Skip to content

Instantly share code, notes, and snippets.

@jni
Forked from manugarri/parking map.ipynb
Created February 23, 2016 22:14
Show Gist options
  • Save jni/8b43ecdd4d0a8c0c0afa to your computer and use it in GitHub Desktop.
Save jni/8b43ecdd4d0a8c0c0afa to your computer and use it in GitHub Desktop.
Where the f*** can I park?
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Where the fuck can I park?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This notebook is the code that accompanies [this blog post](http://blog.manugarri.com/where-the-f-can-i-park/). Basically I explain there the issues I found when trying to figure out where can I park on my town in Spain."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Populating the interactive namespace from numpy and matplotlib\n"
]
}
],
"source": [
"%pylab inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"You will need to download the geojson data from [here](https://s3.amazonaws.com/metro-extracts.mapzen.com/murcia_spain.imposm-geojson.zip) , and the clean street file from [this spreadsheet](https://docs.google.com/spreadsheets/d/1tdlmli43oq1bFBf8n41XfdUouquXRA7RQKkQIF4CJ3c/edit?usp=sharing)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import pandas as pd\n",
"import unicodedata\n",
"import geopandas as gpd\n",
"import geopy\n",
"import shapely.ops\n",
"from shapely.geometry.point import Point\n",
"from shapely.geometry.linestring import LineString\n",
"from shapely.geometry import MultiPoint\n",
"import folium"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"First we load the geojson data and the clean list from the spreadsheet ,as a geopandas dataframes."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(2376, 13)"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"roads_df = gpd.read_file('murcia_spain.imposm-geojson/murcia_spain_roads.geojson')\n",
"roads_df = roads_df[roads_df['name'].notnull()]\n",
"roads_df.shape"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>access</th>\n",
" <th>bridge</th>\n",
" <th>class</th>\n",
" <th>geometry</th>\n",
" <th>id</th>\n",
" <th>name</th>\n",
" <th>oneway</th>\n",
" <th>osm_id</th>\n",
" <th>ref</th>\n",
" <th>service</th>\n",
" <th>tunnel</th>\n",
" <th>type</th>\n",
" <th>z_order</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>None</td>\n",
" <td>0</td>\n",
" <td>highway</td>\n",
" <td>LINESTRING (-1.125423512183801 37.991579170480...</td>\n",
" <td>1</td>\n",
" <td>plaza Juan XXIII</td>\n",
" <td>0</td>\n",
" <td>23067118</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>0</td>\n",
" <td>primary</td>\n",
" <td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>None</td>\n",
" <td>0</td>\n",
" <td>highway</td>\n",
" <td>LINESTRING (-1.125423512183801 37.991579170480...</td>\n",
" <td>3</td>\n",
" <td>Avenida Rector José Loustau</td>\n",
" <td>0</td>\n",
" <td>23067664</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>0</td>\n",
" <td>residential</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>None</td>\n",
" <td>0</td>\n",
" <td>highway</td>\n",
" <td>LINESTRING (-1.127376663261316 37.981144455400...</td>\n",
" <td>4</td>\n",
" <td>Avenida Río Segura</td>\n",
" <td>0</td>\n",
" <td>23067712</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>0</td>\n",
" <td>residential</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>None</td>\n",
" <td>0</td>\n",
" <td>highway</td>\n",
" <td>LINESTRING (-1.117595401352986 37.990002031579...</td>\n",
" <td>5</td>\n",
" <td>Ronda de Levante</td>\n",
" <td>1</td>\n",
" <td>23067799</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>0</td>\n",
" <td>primary</td>\n",
" <td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>None</td>\n",
" <td>0</td>\n",
" <td>highway</td>\n",
" <td>LINESTRING (-1.131457141364223 37.992166071340...</td>\n",
" <td>7</td>\n",
" <td>Avenida General Primo de Rivera</td>\n",
" <td>1</td>\n",
" <td>23067354</td>\n",
" <td>None</td>\n",
" <td>None</td>\n",
" <td>0</td>\n",
" <td>primary</td>\n",
" <td>6</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" access bridge class geometry \\\n",
"0 None 0 highway LINESTRING (-1.125423512183801 37.991579170480... \n",
"2 None 0 highway LINESTRING (-1.125423512183801 37.991579170480... \n",
"3 None 0 highway LINESTRING (-1.127376663261316 37.981144455400... \n",
"4 None 0 highway LINESTRING (-1.117595401352986 37.990002031579... \n",
"6 None 0 highway LINESTRING (-1.131457141364223 37.992166071340... \n",
"\n",
" id name oneway osm_id ref service \\\n",
"0 1 plaza Juan XXIII 0 23067118 None None \n",
"2 3 Avenida Rector José Loustau 0 23067664 None None \n",
"3 4 Avenida Río Segura 0 23067712 None None \n",
"4 5 Ronda de Levante 1 23067799 None None \n",
"6 7 Avenida General Primo de Rivera 1 23067354 None None \n",
"\n",
" tunnel type z_order \n",
"0 0 primary 6 \n",
"2 0 residential 3 \n",
"3 0 residential 3 \n",
"4 0 primary 6 \n",
"6 0 primary 6 "
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"roads_df.head()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f872824a8d0>"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n188AAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f8728266310>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"roads_df.plot()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" # we clean the zones files in google sheets\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"zones = pd.read_csv('ORA Murcia.csv', encoding='utf8')\n",
"zones.road_type = zones.road_type.apply(lambda x: unicodedata.normalize('NFKD',x).encode('ascii', 'ignore'))\n",
"zones = zones[zones.road_name.notnull()]\n",
"zones.road_name = zones.road_name.apply(lambda x: unicodedata.normalize('NFKD',x).encode('ascii', 'ignore'))"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"g = geopy.geocoders.GoogleV3(api_key='GOOGLE API KEY')"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"zones['geo_name'] = zones.road_type.apply(str) +' ' +zones.road_name.apply(str) + ', Murcia'\n",
"zones['geocode'] = zones.geo_name.apply(lambda x: g.geocode(x))\n",
"zones['latlon'] = zones.geocode.apply(lambda x: [x.latitude, x.longitude])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### We save the geocoded data and reload so we dont have to geocode again if we have to stop the session"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"zones.to_csv('ORA Murcia2.csv', index=False, encoding='utf8')"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"zones = pd.read_csv('ORA Murcia2.csv', encoding='utf8')\n",
"zones['latlon'] = zones['latlon'].apply(lambda x: x.replace('[','').replace(']','').split(','))\n",
"zones['latlon'] = zones['latlon'] .apply(lambda x: [float(x[0]), float(x[1])])"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"zones_osm = gpd.GeoDataFrame(pd.merge(roads_df, zones[zones.osm_name.notnull()],\n",
" left_on='name', \n",
" right_on='osm_name')[['name','geometry','zone', 'geocode', 'latlon']])\n",
"zones_osm.drop_duplicates(subset=['zone','name'],inplace=True)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([u'1-2-3', u'5', u'4', u'6'], dtype=object)"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"zones_osm.zone.unique()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### We see that there are 6 zones, with 1-2-3 being all together"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/manuel/anaconda3/lib/python2.7/site-packages/ipykernel/__main__.py:11: FutureWarning: simple_marker is deprecated. Use add_children(Marker) instead\n"
]
},
{
"data": {
"text/html": [
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><iframe src=\"data:text/html;base64,CiAgICAgICAgPCFET0NUWVBFIGh0bWw+CiAgICAgICAgPGhlYWQ+CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgLz4KICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9sZWFmbGV0LzAuNy4zL2xlYWZsZXQuanMiPjwvc2NyaXB0PgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vYWpheC5nb29nbGVhcGlzLmNvbS9hamF4L2xpYnMvanF1ZXJ5LzEuMTEuMS9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxzY3JpcHQgc3JjPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9qcy9ib290c3RyYXAubWluLmpzIj48L3NjcmlwdD4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxzY3JpcHQgc3JjPSJodHRwczovL3Jhd2dpdGh1Yi5jb20vbHZvb2dkdC9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAvZGV2ZWxvcC9kaXN0L2xlYWZsZXQuYXdlc29tZS1tYXJrZXJzLmpzIj48L3NjcmlwdD4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9sZWFmbGV0Lm1hcmtlcmNsdXN0ZXIvMC40LjAvbGVhZmxldC5tYXJrZXJjbHVzdGVyLXNyYy5qcyI+PC9zY3JpcHQ+CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvbGVhZmxldC5tYXJrZXJjbHVzdGVyLzAuNC4wL2xlYWZsZXQubWFya2VyY2x1c3Rlci5qcyI+PC9zY3JpcHQ+CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2xlYWZsZXQvMC43LjMvbGVhZmxldC5jc3MiIC8+CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vYm9vdHN0cmFwLzMuMi4wL2Nzcy9ib290c3RyYXAubWluLmNzcyIgLz4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIiAvPgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2ZvbnQtYXdlc29tZS80LjEuMC9jc3MvZm9udC1hd2Vzb21lLm1pbi5jc3MiIC8+CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vcmF3Z2l0LmNvbS9sdm9vZ2R0L0xlYWZsZXQuYXdlc29tZS1tYXJrZXJzLzIuMC9kZXZlbG9wL2Rpc3QvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuY3NzIiAvPgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9sZWFmbGV0Lm1hcmtlcmNsdXN0ZXIvMC40LjAvTWFya2VyQ2x1c3Rlci5EZWZhdWx0LmNzcyIgLz4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvbGVhZmxldC5tYXJrZXJjbHVzdGVyLzAuNC4wL01hcmtlckNsdXN0ZXIuY3NzIiAvPgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIiAvPgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgPHN0eWxlPgoKICAgICAgICAgICAgaHRtbCwgYm9keSB7CiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICAgICAgICAgIG1hcmdpbjogMDsKICAgICAgICAgICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAjbWFwIHsKICAgICAgICAgICAgICAgIHBvc2l0aW9uOmFic29sdXRlOwogICAgICAgICAgICAgICAgdG9wOjA7CiAgICAgICAgICAgICAgICBib3R0b206MDsKICAgICAgICAgICAgICAgIHJpZ2h0OjA7CiAgICAgICAgICAgICAgICBsZWZ0OjA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIDwvc3R5bGU+CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgPHN0eWxlPiAjbWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmIHsKICAgICAgICAgICAgICAgIHBvc2l0aW9uIDogcmVsYXRpdmU7CiAgICAgICAgICAgICAgICB3aWR0aCA6IDEwMC4wJTsKICAgICAgICAgICAgICAgIGhlaWdodDogMTAwLjAlOwogICAgICAgICAgICAgICAgbGVmdDogMC4wJTsKICAgICAgICAgICAgICAgIHRvcDogMC4wJTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgPC9zdHlsZT4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICA8L2hlYWQ+CiAgICAgICAgPGJvZHk+CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0ZiIgPjwvZGl2PgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgIDwvYm9keT4KICAgICAgICA8c2NyaXB0PgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgc291dGhXZXN0ID0gTC5sYXRMbmcoLTkwLCAtMTgwKTsKICAgICAgICAgICAgdmFyIG5vcnRoRWFzdCA9IEwubGF0TG5nKDkwLCAxODApOwogICAgICAgICAgICB2YXIgYm91bmRzID0gTC5sYXRMbmdCb3VuZHMoc291dGhXZXN0LCBub3J0aEVhc3QpOwoKICAgICAgICAgICAgdmFyIG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0ZiA9IEwubWFwKCdtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYnLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZW50ZXI6WzM3Ljk4MjkyNzIsLTEuMTI1MTk0OF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b29tOiAxNCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJzOiBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyczogTC5DUlMuRVBTRzM4NTcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgdGlsZV9sYXllcl80MzU2OTE3Y2ZkYTU0ZTllOTY5NmYyZTEwMjhiZDdmOCA9IEwudGlsZUxheWVyKAogICAgICAgICAgICAgICAgJ2h0dHBzOi8vY2FydG9kYi1iYXNlbWFwcy17c30uZ2xvYmFsLnNzbC5mYXN0bHkubmV0L2xpZ2h0X2FsbC97en0ve3h9L3t5fS5wbmcnLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG1heFpvb206IDE4LAogICAgICAgICAgICAgICAgICAgIG1pblpvb206IDEsCiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRpb246ICcoYykgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy9jb3B5cmlnaHQiPk9wZW5TdHJlZXRNYXA8L2E+IGNvbnRyaWJ1dG9ycyAoYykgPGEgaHJlZj0iaHR0cDovL2NhcnRvZGIuY29tL2F0dHJpYnV0aW9ucyI+Q2FydG9EQjwvYT4sIENhcnRvREIgPGEgaHJlZiA9Imh0dHA6Ly9jYXJ0b2RiLmNvbS9hdHRyaWJ1dGlvbnMiPmF0dHJpYnV0aW9uczwvYT4nLAogICAgICAgICAgICAgICAgICAgIGRldGVjdFJldGluYTogZmFsc2UKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CgogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNGQ5ZTMwMTQwNGZmNDMyMGJjYzljMjUzOTc3YzlmYzkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45NDUwMDE0LC0xLjExMDc0MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzVlZWU4YTE4YzIzMTQyOWJiMmU3ZDUyYmQ2ZGMzZjFhID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzRkOWUzMDE0MDRmZjQzMjBiY2M5YzI1Mzk3N2M5ZmM5LnNldEljb24oaWNvbl81ZWVlOGExOGMyMzE0MjliYjJlN2Q1MmJkNmRjM2YxYSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzliYzMwY2E2ZDYxNjRhNGY4YWM5YWMzNTk1MjdhM2E0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RhMDRkNzQzYjI4YjRjMjBhMzcxMzAwYTlhM2RjMjlkID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9kYTA0ZDc0M2IyOGI0YzIwYTM3MTMwMGE5YTNkYzI5ZCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgcGxhemEgSnVhbiBYWElJSSAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWJjMzBjYTZkNjE2NGE0ZjhhYzlhYzM1OTUyN2EzYTQuc2V0Q29udGVudChodG1sX2RhMDRkNzQzYjI4YjRjMjBhMzcxMzAwYTlhM2RjMjlkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNGQ5ZTMwMTQwNGZmNDMyMGJjYzljMjUzOTc3YzlmYzkuYmluZFBvcHVwKHBvcHVwXzliYzMwY2E2ZDYxNjRhNGY4YWM5YWMzNTk1MjdhM2E0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMmVmYTdjYTUzMTg0NDUxNmI0NGM1ODAwZTVlZGQ1YTAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45OTE1Mzg5LC0xLjEyNDQ5MjNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9iMmRjM2NmZmViM2E0MjhhYWM5MDkxYTUyOGQzOTM0YyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8yZWZhN2NhNTMxODQ0NTE2YjQ0YzU4MDBlNWVkZDVhMC5zZXRJY29uKGljb25fYjJkYzNjZmZlYjNhNDI4YWFjOTA5MWE1MjhkMzkzNGMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jMTgxNGVkZjhjNWE0YjJlYThiMTY3ZTNkY2E3MTk5NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mYTJhZjUzODNkMTI0YmJlYTlmNDhlZmYwM2ViOWUzMSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZmEyYWY1MzgzZDEyNGJiZWE5ZjQ4ZWZmMDNlYjllMzEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFJvbmRhIGRlIExldmFudGUgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MxODE0ZWRmOGM1YTRiMmVhOGIxNjdlM2RjYTcxOTk2LnNldENvbnRlbnQoaHRtbF9mYTJhZjUzODNkMTI0YmJlYTlmNDhlZmYwM2ViOWUzMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzJlZmE3Y2E1MzE4NDQ1MTZiNDRjNTgwMGU1ZWRkNWEwLmJpbmRQb3B1cChwb3B1cF9jMTgxNGVkZjhjNWE0YjJlYThiMTY3ZTNkY2E3MTk5Nik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2M5ODkyNTk4NzUyYjRjNDZhN2U1OGYwZGUwYWFhNTI5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTkxMDM5NiwtMS4xMzQwMTA4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMDVlYmQ5NDE3NDYyNGZjMzliOTk3ZDI1NWVjZThlNjEgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYzk4OTI1OTg3NTJiNGM0NmE3ZTU4ZjBkZTBhYWE1Mjkuc2V0SWNvbihpY29uXzA1ZWJkOTQxNzQ2MjRmYzM5Yjk5N2QyNTVlY2U4ZTYxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmFjZDg2ZWRmNTJmNGFkYzk2OTI2MWQ2OTViMjYzMDggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODg1Njg5ZDg2OTJlNDNkMTk2M2YxNGFkMTgzNGIzOGMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzg4NTY4OWQ4NjkyZTQzZDE5NjNmMTRhZDE4MzRiMzhjIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBBdmVuaWRhIEdlbmVyYWwgUHJpbW8gZGUgUml2ZXJhIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82YWNkODZlZGY1MmY0YWRjOTY5MjYxZDY5NWIyNjMwOC5zZXRDb250ZW50KGh0bWxfODg1Njg5ZDg2OTJlNDNkMTk2M2YxNGFkMTgzNGIzOGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jOTg5MjU5ODc1MmI0YzQ2YTdlNThmMGRlMGFhYTUyOS5iaW5kUG9wdXAocG9wdXBfNmFjZDg2ZWRmNTJmNGFkYzk2OTI2MWQ2OTViMjYzMDgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hZjI0OWRjZTgyNTk0MWM5ODI3ODJjMTM1Y2I5ZGRlNyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk5MjU5MjcsLTEuMTM5NTYzOV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2VmYjA5NjcyZDQzYTQwM2JiMDM0MGNmMjkwZWI3ZTZhID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2FmMjQ5ZGNlODI1OTQxYzk4Mjc4MmMxMzVjYjlkZGU3LnNldEljb24oaWNvbl9lZmIwOTY3MmQ0M2E0MDNiYjAzNDBjZjI5MGViN2U2YSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U1Njc2YzE4ZTg3YzQ0MDc5NDFkYmVjMWVkMjczNWFjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFlZTllYTU1MTI0NTQzOTA5ZGRhMTBjZjMyNzc0ZDBlID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8xZWU5ZWE1NTEyNDU0MzkwOWRkYTEwY2YzMjc3NGQwZSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgUm9uZGEgTm9ydGUgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U1Njc2YzE4ZTg3YzQ0MDc5NDFkYmVjMWVkMjczNWFjLnNldENvbnRlbnQoaHRtbF8xZWU5ZWE1NTEyNDU0MzkwOWRkYTEwY2YzMjc3NGQwZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2FmMjQ5ZGNlODI1OTQxYzk4Mjc4MmMxMzVjYjlkZGU3LmJpbmRQb3B1cChwb3B1cF9lNTY3NmMxOGU4N2M0NDA3OTQxZGJlYzFlZDI3MzVhYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzhkMjlkYjZiZWNjNjRhYjFiYzYxYWZiY2FjMjM5M2YxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTQxNTY2MiwtMS4xMDk1NzFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8zMmY5NGRhNDNiNDA0N2IxOGZiYTc1MjJkYjkyNzJiNiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl84ZDI5ZGI2YmVjYzY0YWIxYmM2MWFmYmNhYzIzOTNmMS5zZXRJY29uKGljb25fMzJmOTRkYTQzYjQwNDdiMThmYmE3NTIyZGI5MjcyYjYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lZGRiNWJkMjViY2U0NDEyOGQ5ZDJiZmU2NDJmYzJhMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85Nzg4NTAxNTU0OTI0OGFlODYyMmM4ODE1YjMxNzU1MyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfOTc4ODUwMTU1NDkyNDhhZTg2MjJjODgxNWIzMTc1NTMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIERvY3RvciBNYXJhbm9uIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lZGRiNWJkMjViY2U0NDEyOGQ5ZDJiZmU2NDJmYzJhMC5zZXRDb250ZW50KGh0bWxfOTc4ODUwMTU1NDkyNDhhZTg2MjJjODgxNWIzMTc1NTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84ZDI5ZGI2YmVjYzY0YWIxYmM2MWFmYmNhYzIzOTNmMS5iaW5kUG9wdXAocG9wdXBfZWRkYjViZDI1YmNlNDQxMjhkOWQyYmZlNjQyZmMyYTApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81MWU3NTYxMzk4ZjM0ZDI3YjA3YWFlZDI5N2Y4MjVlOCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4OTM3NzYsLTEuMTMxNTQ2MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzgxYzQ0YmM4NGUyNjQ4MDhiYTA4Yzc5MGE3ODllNDRjID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzUxZTc1NjEzOThmMzRkMjdiMDdhYWVkMjk3ZjgyNWU4LnNldEljb24oaWNvbl84MWM0NGJjODRlMjY0ODA4YmEwOGM3OTBhNzg5ZTQ0Yyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FjNjFmM2JkYTk1NzQ2YTA4MDFkZDE3MTQ0NTQ4MDcyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NmYzRhNGE1MDIwMjRjOWY4MzJlYThmN2EzNmU3MzI4ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9jZmM0YTRhNTAyMDI0YzlmODMyZWE4ZjdhMzZlNzMyOCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgSmFpbWUgSSBlbCBDb25xdWlzdGFkb3IgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FjNjFmM2JkYTk1NzQ2YTA4MDFkZDE3MTQ0NTQ4MDcyLnNldENvbnRlbnQoaHRtbF9jZmM0YTRhNTAyMDI0YzlmODMyZWE4ZjdhMzZlNzMyOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzUxZTc1NjEzOThmMzRkMjdiMDdhYWVkMjk3ZjgyNWU4LmJpbmRQb3B1cChwb3B1cF9hYzYxZjNiZGE5NTc0NmEwODAxZGQxNzE0NDU0ODA3Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzhlNGM1MDk1MzA1MjQzODliY2VjM2JkMmQ5YWFiYWRkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTg3NzU1NiwtMS4xMjkwOTQzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZTZmMTBhZjhjMmI2NGU3M2FkYjkyMGU0N2U3Nzk4NjggPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfOGU0YzUwOTUzMDUyNDM4OWJjZWMzYmQyZDlhYWJhZGQuc2V0SWNvbihpY29uX2U2ZjEwYWY4YzJiNjRlNzNhZGI5MjBlNDdlNzc5ODY4KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzAxMmFhNDUzZjFjNDE1MThmY2U0N2I2ZjYxNTkyM2YgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGIwZTAzZGI2NjkzNDAzZWFiMTNhMGU0ZGZlM2I3ZmQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzhiMGUwM2RiNjY5MzQwM2VhYjEzYTBlNGRmZTNiN2ZkIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBjYWxsZSBFbnJpcXVlIFZpbGxhciAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzAxMmFhNDUzZjFjNDE1MThmY2U0N2I2ZjYxNTkyM2Yuc2V0Q29udGVudChodG1sXzhiMGUwM2RiNjY5MzQwM2VhYjEzYTBlNGRmZTNiN2ZkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOGU0YzUwOTUzMDUyNDM4OWJjZWMzYmQyZDlhYWJhZGQuYmluZFBvcHVwKHBvcHVwXzMwMTJhYTQ1M2YxYzQxNTE4ZmNlNDdiNmY2MTU5MjNmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMDJhNWJlNDVjNzQ5NDI5N2I2MzdlODgwYzhhNGQwMWQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45OTIxLC0xLjEyOTAzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNGY1ODU3YzM5ODgzNDI5OTgwMTg5OTljOTNiYWUxN2MgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMDJhNWJlNDVjNzQ5NDI5N2I2MzdlODgwYzhhNGQwMWQuc2V0SWNvbihpY29uXzRmNTg1N2MzOTg4MzQyOTk4MDE4OTk5YzkzYmFlMTdjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTY5M2ExYmRiZThkNDIwNDk3NjQ3YjBjYmI5MGIyOTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjdjOTYxMzhlMWZiNDI5YmIyMzMyNTgzYjA0Nzc4OTAgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzY3Yzk2MTM4ZTFmYjQyOWJiMjMzMjU4M2IwNDc3ODkwIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBQbGF6YSBDaXJjdWxhciAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTY5M2ExYmRiZThkNDIwNDk3NjQ3YjBjYmI5MGIyOTQuc2V0Q29udGVudChodG1sXzY3Yzk2MTM4ZTFmYjQyOWJiMjMzMjU4M2IwNDc3ODkwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDJhNWJlNDVjNzQ5NDI5N2I2MzdlODgwYzhhNGQwMWQuYmluZFBvcHVwKHBvcHVwXzU2OTNhMWJkYmU4ZDQyMDQ5NzY0N2IwY2JiOTBiMjk0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOGRjN2NlNGI0MjdmNDEwODhhNjc0ZTdmODZkZGYxN2YgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45MzYxMjMxLC0xLjE0NzA1MzFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl82OWVjOGU3OGRhNWI0NmFhYTUwNzQ5OGU0NmRkNzEzZSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl84ZGM3Y2U0YjQyN2Y0MTA4OGE2NzRlN2Y4NmRkZjE3Zi5zZXRJY29uKGljb25fNjllYzhlNzhkYTViNDZhYWE1MDc0OThlNDZkZDcxM2UpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ZmE1ZDA0Y2EwNWY0MzI3YTVjY2IzYzY1MDg1Nzc0ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zYzZlMzE5N2NmMzU0M2MwYWU5OWEwYzNhY2JkOTBkZiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfM2M2ZTMxOTdjZjM1NDNjMGFlOTlhMGMzYWNiZDkwZGYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIENhbGRlcm9uIGRlIGxhIEJhcmNhIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85ZmE1ZDA0Y2EwNWY0MzI3YTVjY2IzYzY1MDg1Nzc0Zi5zZXRDb250ZW50KGh0bWxfM2M2ZTMxOTdjZjM1NDNjMGFlOTlhMGMzYWNiZDkwZGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84ZGM3Y2U0YjQyN2Y0MTA4OGE2NzRlN2Y4NmRkZjE3Zi5iaW5kUG9wdXAocG9wdXBfOWZhNWQwNGNhMDVmNDMyN2E1Y2NiM2M2NTA4NTc3NGYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lMDU4Y2FmMzI3YmY0OTJjOWQyYjdiNDVjZjNmNWE1MyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4NzEwNTQsLTEuMTM0OTYwMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzY3ODlhMjZmNzM1ODQ5NjNhMzRmNTM1MGM2ZTJkM2U5ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2UwNThjYWYzMjdiZjQ5MmM5ZDJiN2I0NWNmM2Y1YTUzLnNldEljb24oaWNvbl82Nzg5YTI2ZjczNTg0OTYzYTM0ZjUzNTBjNmUyZDNlOSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzYxNzAyMjBhNmYyMjQwMmJhYTkxZWVhMTkzNTE2YzA1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFjNzUxYjM2MzA1ODRkMjk4NzU4NzJhZGQyYmY0NGMxID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8xYzc1MWIzNjMwNTg0ZDI5ODc1ODcyYWRkMmJmNDRjMSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgU2FudGEgVGVyZXNhIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82MTcwMjIwYTZmMjI0MDJiYWE5MWVlYTE5MzUxNmMwNS5zZXRDb250ZW50KGh0bWxfMWM3NTFiMzYzMDU4NGQyOTg3NTg3MmFkZDJiZjQ0YzEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lMDU4Y2FmMzI3YmY0OTJjOWQyYjdiNDVjZjNmNWE1My5iaW5kUG9wdXAocG9wdXBfNjE3MDIyMGE2ZjIyNDAyYmFhOTFlZWExOTM1MTZjMDUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85ZDQyYjg2YWI3NTg0NTk4OWY4ZjVmYTA1MDlkOTFhNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4OTg5OTUsLTEuMTM0OTU0M10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2NkNDgzMDAxNTA0ZDQ5NDJhNDFhYjE0ZjgwZTVmMzBhID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzlkNDJiODZhYjc1ODQ1OTg5ZjhmNWZhMDUwOWQ5MWE1LnNldEljb24oaWNvbl9jZDQ4MzAwMTUwNGQ0OTQyYTQxYWIxNGY4MGU1ZjMwYSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JhMDUwMWZlMjgzZDRhOTNiMjgwZDUyYzQ4MTEzYjk0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NlMDU1OTYxMTNmZTRiMzA5OTkwZTk0Nzc3ZjdiZTc1ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9jZTA1NTk2MTEzZmU0YjMwOTk5MGU5NDc3N2Y3YmU3NSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgQ29uZGVzdGFibGUgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JhMDUwMWZlMjgzZDRhOTNiMjgwZDUyYzQ4MTEzYjk0LnNldENvbnRlbnQoaHRtbF9jZTA1NTk2MTEzZmU0YjMwOTk5MGU5NDc3N2Y3YmU3NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzlkNDJiODZhYjc1ODQ1OTg5ZjhmNWZhMDUwOWQ5MWE1LmJpbmRQb3B1cChwb3B1cF9iYTA1MDFmZTI4M2Q0YTkzYjI4MGQ1MmM0ODExM2I5NCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzRmMGUzMjZkOWQwMzRjNDc4MGZmZTRiMGIxYTg2ZmZmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTkwNTE1LC0xLjEzNTEyODVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl82MWYzOGYzZTJiMzI0Y2M5OWRiNjZhOTgxNTJlMzg1NCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl80ZjBlMzI2ZDlkMDM0YzQ3ODBmZmU0YjBiMWE4NmZmZi5zZXRJY29uKGljb25fNjFmMzhmM2UyYjMyNGNjOTlkYjY2YTk4MTUyZTM4NTQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMjc0NTZjYmYzZjk0MzE2YmEyOTViOGY3OWJkN2RhOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMGFkNzJhNjA0OGU0YWEwOThhMTFjMWZjZjA4NTJkZCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZjBhZDcyYTYwNDhlNGFhMDk4YTExYzFmY2YwODUyZGQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIGNhbGxlIHBvZXRhIENhbm8gUGF0byAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTI3NDU2Y2JmM2Y5NDMxNmJhMjk1YjhmNzliZDdkYTguc2V0Q29udGVudChodG1sX2YwYWQ3MmE2MDQ4ZTRhYTA5OGExMWMxZmNmMDg1MmRkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNGYwZTMyNmQ5ZDAzNGM0NzgwZmZlNGIwYjFhODZmZmYuYmluZFBvcHVwKHBvcHVwXzEyNzQ1NmNiZjNmOTQzMTZiYTI5NWI4Zjc5YmQ3ZGE4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDEzZThkYWQ3ZWQ1NDM2N2I1ZjY2ZjhkZGEzODYwZWMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODc0MTgyLC0xLjEzMzYzNzVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8yOWU1ZjBlYTI1MzY0NTc1YjBmMmUwNjE5OTkwZmYyYSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9kMTNlOGRhZDdlZDU0MzY3YjVmNjZmOGRkYTM4NjBlYy5zZXRJY29uKGljb25fMjllNWYwZWEyNTM2NDU3NWIwZjJlMDYxOTk5MGZmMmEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMTg0NzljOTNhMDk0OWQzODBkYWIyNDNlZTY1MjhmZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kYWI3ZGU5MWVkZTA0Y2YyOTc1MDM2NTk4OTBmMWZkOCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZGFiN2RlOTFlZGUwNGNmMjk3NTAzNjU5ODkwZjFmZDgiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIEF5bGxvbiAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjE4NDc5YzkzYTA5NDlkMzgwZGFiMjQzZWU2NTI4ZmUuc2V0Q29udGVudChodG1sX2RhYjdkZTkxZWRlMDRjZjI5NzUwMzY1OTg5MGYxZmQ4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZDEzZThkYWQ3ZWQ1NDM2N2I1ZjY2ZjhkZGEzODYwZWMuYmluZFBvcHVwKHBvcHVwX2IxODQ3OWM5M2EwOTQ5ZDM4MGRhYjI0M2VlNjUyOGZlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTg5MzBlMjgxMTY0NGQyN2E5YTJjZmFkMmY3YzE5ZjkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45OTIyMzk5LC0xLjEzMDY1NDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl82MDNjMmRlMTVlY2E0ZTU1YmQ4NDU4MTgxOTFmMjc3MCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl85ODkzMGUyODExNjQ0ZDI3YTlhMmNmYWQyZjdjMTlmOS5zZXRJY29uKGljb25fNjAzYzJkZTE1ZWNhNGU1NWJkODQ1ODE4MTkxZjI3NzApOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZDA2ZTk5OGJiYjk0ODM0OWQ0YWYyNmMxZGQ5ZjNlNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lOTdjOGE1ZmZjYWE0MWYyYjVmODZjNzZkMzkyYTI2NyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZTk3YzhhNWZmY2FhNDFmMmI1Zjg2Yzc2ZDM5MmEyNjciICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIGNhbGxlam9uIGRlIEJ1cnJ1ZXpvIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wZDA2ZTk5OGJiYjk0ODM0OWQ0YWYyNmMxZGQ5ZjNlNi5zZXRDb250ZW50KGh0bWxfZTk3YzhhNWZmY2FhNDFmMmI1Zjg2Yzc2ZDM5MmEyNjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85ODkzMGUyODExNjQ0ZDI3YTlhMmNmYWQyZjdjMTlmOS5iaW5kUG9wdXAocG9wdXBfMGQwNmU5OThiYmI5NDgzNDlkNGFmMjZjMWRkOWYzZTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zZjdlMzdjMmYzYWI0YmEwOWMwMTBlZjMzNDY4M2E5YiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk5MDAzMywtMS4xMzg2MjQ2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fODYwY2FhOGNjNjYzNDY1Y2IyYjAyYzNlMGYyMGMwNTMgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfM2Y3ZTM3YzJmM2FiNGJhMDljMDEwZWYzMzQ2ODNhOWIuc2V0SWNvbihpY29uXzg2MGNhYThjYzY2MzQ2NWNiMmIwMmMzZTBmMjBjMDUzKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjNkNDgyM2ZiNGQwNDA2N2E1NWQ0ZmEyNzA0ZGE1YTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGE5YzUzMTliMTU4NGIzNmFlNmNjZjVkZGNiODRhZjggPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2RhOWM1MzE5YjE1ODRiMzZhZTZjY2Y1ZGRjYjg0YWY4IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBJc2FhYyBBbGJlbml6IChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iM2Q0ODIzZmI0ZDA0MDY3YTU1ZDRmYTI3MDRkYTVhMS5zZXRDb250ZW50KGh0bWxfZGE5YzUzMTliMTU4NGIzNmFlNmNjZjVkZGNiODRhZjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zZjdlMzdjMmYzYWI0YmEwOWMwMTBlZjMzNDY4M2E5Yi5iaW5kUG9wdXAocG9wdXBfYjNkNDgyM2ZiNGQwNDA2N2E1NWQ0ZmEyNzA0ZGE1YTEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84ZTg1NjZlYTJmZTM0M2RkYjNlYmNjY2QxY2JlMGZiOCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk3ODcyOTYsLTEuMTcxMDcwMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2E2MGIxOTE0NDJmYzQyMDg5MTY0ZDAzODY4ZWE5OWY3ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzhlODU2NmVhMmZlMzQzZGRiM2ViY2NjZDFjYmUwZmI4LnNldEljb24oaWNvbl9hNjBiMTkxNDQyZmM0MjA4OTE2NGQwMzg2OGVhOTlmNyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E0Y2IyNjJiNWU0ZDQ3MTViMjA0NmNiYzA2NmNiYTBiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M5N2Q0ZDBkZGQwMDQ0ODA4ZjM5YmUxNzU2MWMwZTk5ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9jOTdkNGQwZGRkMDA0NDgwOGYzOWJlMTc1NjFjMGU5OSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgRmVybmFuZGV6IENhYmFsbGVybyAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTRjYjI2MmI1ZTRkNDcxNWIyMDQ2Y2JjMDY2Y2JhMGIuc2V0Q29udGVudChodG1sX2M5N2Q0ZDBkZGQwMDQ0ODA4ZjM5YmUxNzU2MWMwZTk5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOGU4NTY2ZWEyZmUzNDNkZGIzZWJjY2NkMWNiZTBmYjguYmluZFBvcHVwKHBvcHVwX2E0Y2IyNjJiNWU0ZDQ3MTViMjA0NmNiYzA2NmNiYTBiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNTEwZTViNmU3NDhkNGViOTllYzE4ZDEzMzgxZmI0ZGYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45OTM1NjYyLC0xLjEzNjAzNTddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8xYTA4ODJlMWI3NTg0NDYzYTYwMmRmYzIyYmQ3YTQ0NiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl81MTBlNWI2ZTc0OGQ0ZWI5OWVjMThkMTMzODFmYjRkZi5zZXRJY29uKGljb25fMWEwODgyZTFiNzU4NDQ2M2E2MDJkZmMyMmJkN2E0NDYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84NWNlMGE4OWI1MjA0N2U5OTc0ZTdmOTY5MzlhNTMxYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNTVjMmMxOTFiYTc0MjA3YjE3MDI2ZDc3ZDkzNDVkNCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZDU1YzJjMTkxYmE3NDIwN2IxNzAyNmQ3N2Q5MzQ1ZDQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIGNhbGxlIE1hciBNZW5vciAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODVjZTBhODliNTIwNDdlOTk3NGU3Zjk2OTM5YTUzMWMuc2V0Q29udGVudChodG1sX2Q1NWMyYzE5MWJhNzQyMDdiMTcwMjZkNzdkOTM0NWQ0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTEwZTViNmU3NDhkNGViOTllYzE4ZDEzMzgxZmI0ZGYuYmluZFBvcHVwKHBvcHVwXzg1Y2UwYTg5YjUyMDQ3ZTk5NzRlN2Y5NjkzOWE1MzFjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjhmNzk1ZWVlZWUxNGUzMGI1NDE2MGQzMWM5NjlkNTYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45OTQxMzI1LC0xLjEzNDAxODRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9jNjMwZmM1NTUwMDY0YmViODVlZGRjZjNjMzZiODBhYiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8yOGY3OTVlZWVlZTE0ZTMwYjU0MTYwZDMxYzk2OWQ1Ni5zZXRJY29uKGljb25fYzYzMGZjNTU1MDA2NGJlYjg1ZWRkY2YzYzM2YjgwYWIpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNzBlNDU1ZWQ0NDU0ZThjODFhMzIzMzE5ZjJmNDJiZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hODAzZTVlZjgyOGY0OTM1YmQwNzhkYjQ0MWQyYTE0YyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYTgwM2U1ZWY4MjhmNDkzNWJkMDc4ZGI0NDFkMmExNGMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIGNhbGxlIEF1ZGl0b3JpdW0gKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA3MGU0NTVlZDQ0NTRlOGM4MWEzMjMzMTlmMmY0MmJlLnNldENvbnRlbnQoaHRtbF9hODAzZTVlZjgyOGY0OTM1YmQwNzhkYjQ0MWQyYTE0Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzI4Zjc5NWVlZWVlMTRlMzBiNTQxNjBkMzFjOTY5ZDU2LmJpbmRQb3B1cChwb3B1cF8wNzBlNDU1ZWQ0NDU0ZThjODFhMzIzMzE5ZjJmNDJiZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzBiOGY3NTlkNTJhODQzMjZiNGEzNTEzNzQ2ODIxZGNiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTkzOTc4OSwtMS4xMzMzMTIzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMDQxNWYwOGRhZWE5NDVlOGE4YzU0NWQ1MGI5ODNkZTQgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMGI4Zjc1OWQ1MmE4NDMyNmI0YTM1MTM3NDY4MjFkY2Iuc2V0SWNvbihpY29uXzA0MTVmMDhkYWVhOTQ1ZThhOGM1NDVkNTBiOTgzZGU0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmU1YmI2YTg2YzJmNGJlYmJkYTVlMmI0M2Y0YzkxNjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTRkMjRhNzJhNTk4NDE4NGFhY2NlNWQyYmQ3NzEzZTkgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2E0ZDI0YTcyYTU5ODQxODRhYWNjZTVkMmJkNzcxM2U5IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBjYWxsZSBUb3JyZSBkZSBsYSBNYXJxdWVzYSAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmU1YmI2YTg2YzJmNGJlYmJkYTVlMmI0M2Y0YzkxNjcuc2V0Q29udGVudChodG1sX2E0ZDI0YTcyYTU5ODQxODRhYWNjZTVkMmJkNzcxM2U5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMGI4Zjc1OWQ1MmE4NDMyNmI0YTM1MTM3NDY4MjFkY2IuYmluZFBvcHVwKHBvcHVwX2JlNWJiNmE4NmMyZjRiZWJiZGE1ZTJiNDNmNGM5MTY3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYTAzMjhmN2MzYjdkNDMyZTg4YzY3NzJlNjJmMzE5OGYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45OTU1MTAyLC0xLjEyOTkyMjhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9iNzg3Y2YwOWMxM2I0MDFiYTExYTMzOThlMTFhZDBmYSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9hMDMyOGY3YzNiN2Q0MzJlODhjNjc3MmU2MmYzMTk4Zi5zZXRJY29uKGljb25fYjc4N2NmMDljMTNiNDAxYmExMWEzMzk4ZTExYWQwZmEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xOGVjOTk0MTlmODE0ODJjOTJhNTUyNWU1OGI1M2I0NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wYWZkMWMwYjJiOTc0N2Q5ODk1OGQ2ZjEwYmJjZWIzMiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMGFmZDFjMGIyYjk3NDdkOTg5NThkNmYxMGJiY2ViMzIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIERyLiBKdWxpbyBMb3BleiBBbWJpdCAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMThlYzk5NDE5ZjgxNDgyYzkyYTU1MjVlNThiNTNiNDcuc2V0Q29udGVudChodG1sXzBhZmQxYzBiMmI5NzQ3ZDk4OTU4ZDZmMTBiYmNlYjMyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYTAzMjhmN2MzYjdkNDMyZTg4YzY3NzJlNjJmMzE5OGYuYmluZFBvcHVwKHBvcHVwXzE4ZWM5OTQxOWY4MTQ4MmM5MmE1NTI1ZTU4YjUzYjQ3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOWMzNmQ1MDg5YWU4NGMzYzliYmI5NTM1N2NmZTM5Y2QgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45OTYzMTM2LC0xLjEzMDkyMTNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9iY2ExNTY4YzQyNGM0OTllOGY0ZjNiNTQ2NDNlZGMxOCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl85YzM2ZDUwODlhZTg0YzNjOWJiYjk1MzU3Y2ZlMzljZC5zZXRJY29uKGljb25fYmNhMTU2OGM0MjRjNDk5ZThmNGYzYjU0NjQzZWRjMTgpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zZThkNzdiNmUyYzQ0OWNmOWE0ODY5NWNlM2VlZjY4NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lODAzOTFmOGFiOTY0YjQzOTlkOTIyYWM3ODJhZGExYiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZTgwMzkxZjhhYjk2NGI0Mzk5ZDkyMmFjNzgyYWRhMWIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEF2ZW5pZGEgTWFycXVlcyBkZSBMb3MgVmVsZXogKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNlOGQ3N2I2ZTJjNDQ5Y2Y5YTQ4Njk1Y2UzZWVmNjg2LnNldENvbnRlbnQoaHRtbF9lODAzOTFmOGFiOTY0YjQzOTlkOTIyYWM3ODJhZGExYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzljMzZkNTA4OWFlODRjM2M5YmJiOTUzNTdjZmUzOWNkLmJpbmRQb3B1cChwb3B1cF8zZThkNzdiNmUyYzQ0OWNmOWE0ODY5NWNlM2VlZjY4Nik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzliYmU4YjQ5YWY1ZDQzNjE5OTM1MTA5NzYyMDhiM2I3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTk2NDc4NywtMS4xMjkxMjA5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMTVkZGVmMzUzM2EzNGU5N2EwOWRiNzhlNDdjM2I0YTggPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfOWJiZThiNDlhZjVkNDM2MTk5MzUxMDk3NjIwOGIzYjcuc2V0SWNvbihpY29uXzE1ZGRlZjM1MzNhMzRlOTdhMDlkYjc4ZTQ3YzNiNGE4KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTdjNDc4NzI3ZWQyNDliZGFlNDNkYThkMTYzNzEwOGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjkwZmY0ZTA1ODc2NGViYjgzMWUxNDU0MGQ5MDM3MDIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2Y5MGZmNGUwNTg3NjRlYmI4MzFlMTQ1NDBkOTAzNzAyIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBEb2N0b3IgQWxvbnNvIGRlIEVzcGVqbyAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTdjNDc4NzI3ZWQyNDliZGFlNDNkYThkMTYzNzEwOGEuc2V0Q29udGVudChodG1sX2Y5MGZmNGUwNTg3NjRlYmI4MzFlMTQ1NDBkOTAzNzAyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOWJiZThiNDlhZjVkNDM2MTk5MzUxMDk3NjIwOGIzYjcuYmluZFBvcHVwKHBvcHVwXzU3YzQ3ODcyN2VkMjQ5YmRhZTQzZGE4ZDE2MzcxMDhhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfM2VlNDcwOTNlYWNlNGM2ZWJhOTIxODhlOGZlMjM2OWMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45OTIyMzk5LC0xLjEzMDY1NDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl80YWM3NDU5ODY4OWQ0MzRmYjI4NGY4MjEyNzAwOGQ1NCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8zZWU0NzA5M2VhY2U0YzZlYmE5MjE4OGU4ZmUyMzY5Yy5zZXRJY29uKGljb25fNGFjNzQ1OTg2ODlkNDM0ZmIyODRmODIxMjcwMDhkNTQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xYWM2ZDhkOGNlNTM0NDA3YmM2MzIxMWJhOTMzNzFhMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wODkxNmQzN2NmZjM0OTMwYTgwNTk3YTgyMTJhMTk3MSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMDg5MTZkMzdjZmYzNDkzMGE4MDU5N2E4MjEyYTE5NzEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIERvY3RvciBKb3NlIFRhcGlhIFNhbnogKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFhYzZkOGQ4Y2U1MzQ0MDdiYzYzMjExYmE5MzM3MWEwLnNldENvbnRlbnQoaHRtbF8wODkxNmQzN2NmZjM0OTMwYTgwNTk3YTgyMTJhMTk3MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzNlZTQ3MDkzZWFjZTRjNmViYTkyMTg4ZThmZTIzNjljLmJpbmRQb3B1cChwb3B1cF8xYWM2ZDhkOGNlNTM0NDA3YmM2MzIxMWJhOTMzNzFhMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2ZjYWFlZWFiMDViOTQ4NzRhMjY1MGQ1YTQ0ODdlOTQ5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTg2OTMyMiwtMS4xMzI3Mjk5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNjEzOGJiMmNiMjg2NDYxZWIzMzEzODZhYzVjOTM5NGMgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZmNhYWVlYWIwNWI5NDg3NGEyNjUwZDVhNDQ4N2U5NDkuc2V0SWNvbihpY29uXzYxMzhiYjJjYjI4NjQ2MWViMzMxMzg2YWM1YzkzOTRjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWFlNDM2MDFiNWM0NDdiM2FiYTU3NzgzMTFlNGVjN2IgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGY5OGU0YTZiYThjNDUxMTg5NDc3ZGNiYzVlYmQ0OWUgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2RmOThlNGE2YmE4YzQ1MTE4OTQ3N2RjYmM1ZWJkNDllIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYXJyaWwgTWFucmVzYSAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWFlNDM2MDFiNWM0NDdiM2FiYTU3NzgzMTFlNGVjN2Iuc2V0Q29udGVudChodG1sX2RmOThlNGE2YmE4YzQ1MTE4OTQ3N2RjYmM1ZWJkNDllKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZmNhYWVlYWIwNWI5NDg3NGEyNjUwZDVhNDQ4N2U5NDkuYmluZFBvcHVwKHBvcHVwX2FhZTQzNjAxYjVjNDQ3YjNhYmE1Nzc4MzExZTRlYzdiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfM2ExYzRjYjEyYTQ0NDY1ZThkYzU1NWE5ZmRlYjBjYTcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODg5MjA3LC0xLjEyNjQ4OTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9hMmY1ODdhODdlYTU0NzNkOWQyYmZjNTk4M2QwZjFiOCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8zYTFjNGNiMTJhNDQ0NjVlOGRjNTU1YTlmZGViMGNhNy5zZXRJY29uKGljb25fYTJmNTg3YTg3ZWE1NDczZDlkMmJmYzU5ODNkMGYxYjgpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNjU4OGI3MDI1MGI0NzU4OTZkMTdjYjgxZDBlMmE2ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83YzZhM2YyMzU0OWE0NDc4YjA4NWVjZDQyYTQ2NGRmNyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfN2M2YTNmMjM1NDlhNDQ3OGIwODVlY2Q0MmE0NjRkZjciICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIEFudG9uaW8gUHVpZyAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzY1ODhiNzAyNTBiNDc1ODk2ZDE3Y2I4MWQwZTJhNmYuc2V0Q29udGVudChodG1sXzdjNmEzZjIzNTQ5YTQ0NzhiMDg1ZWNkNDJhNDY0ZGY3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfM2ExYzRjYjEyYTQ0NDY1ZThkYzU1NWE5ZmRlYjBjYTcuYmluZFBvcHVwKHBvcHVwXzM2NTg4YjcwMjUwYjQ3NTg5NmQxN2NiODFkMGUyYTZmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMmMwNWU4MzE1YjczNDc0M2FiOWY5MTJmYTA5NzE4MWUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODgyMDEsLTEuMTI3ODMzM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2M1YzhlYzA1YmRmMzQ5NTE4NzhlOTZkZmM4NjhlM2YxID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzJjMDVlODMxNWI3MzQ3NDNhYjlmOTEyZmEwOTcxODFlLnNldEljb24oaWNvbl9jNWM4ZWMwNWJkZjM0OTUxODc4ZTk2ZGZjODY4ZTNmMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI1M2RlY2U3ZGZlODRiODI5YmM5ZjUxNDM0MDUyMmE3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU4YjNmNjM2ZTJiZTQwOWM4NzhiNWQxN2QxNmRiM2UxID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF81OGIzZjYzNmUyYmU0MDljODc4YjVkMTdkMTZkYjNlMSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgU2FuIElnbmFjaW8gZGUgTG95b2xhIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yNTNkZWNlN2RmZTg0YjgyOWJjOWY1MTQzNDA1MjJhNy5zZXRDb250ZW50KGh0bWxfNThiM2Y2MzZlMmJlNDA5Yzg3OGI1ZDE3ZDE2ZGIzZTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yYzA1ZTgzMTViNzM0NzQzYWI5ZjkxMmZhMDk3MTgxZS5iaW5kUG9wdXAocG9wdXBfMjUzZGVjZTdkZmU4NGI4MjliYzlmNTE0MzQwNTIyYTcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yZDM4MWY3YzczNzg0MTQ0OWRjZjBhOTdhN2IxYjJmMyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4OTU5MzMsLTEuMTI2MTY3NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzZiNzY2NGY3ODE0YjQwMzQ4OWIyZjQ2ODViMmVjODE4ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzJkMzgxZjdjNzM3ODQxNDQ5ZGNmMGE5N2E3YjFiMmYzLnNldEljb24oaWNvbl82Yjc2NjRmNzgxNGI0MDM0ODliMmY0Njg1YjJlYzgxOCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNhMzJlMjZhYTYxMzQzMjFiNDlmZjdjZTY2YWY5ODIzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk1NWZiMjBmNDlhMDQ4NzBiYTM0MGVmMWMxMmQ0OGViID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF85NTVmYjIwZjQ5YTA0ODcwYmEzNDBlZjFjMTJkNDhlYiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgU2FuIE1hcnRpbiBkZSBQb3JyZXMgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNhMzJlMjZhYTYxMzQzMjFiNDlmZjdjZTY2YWY5ODIzLnNldENvbnRlbnQoaHRtbF85NTVmYjIwZjQ5YTA0ODcwYmEzNDBlZjFjMTJkNDhlYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzJkMzgxZjdjNzM3ODQxNDQ5ZGNmMGE5N2E3YjFiMmYzLmJpbmRQb3B1cChwb3B1cF8zYTMyZTI2YWE2MTM0MzIxYjQ5ZmY3Y2U2NmFmOTgyMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2IzOGVmODUwNDBlMjQwMzE5Mjc2MDBlMmRlOGFhYzIzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTg5MzgyNiwtMS4xMjY2NTYxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNjgwODVhYzg5YjEyNDZhZmE5N2QwMjNiNzA5NGVlZWUgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYjM4ZWY4NTA0MGUyNDAzMTkyNzYwMGUyZGU4YWFjMjMuc2V0SWNvbihpY29uXzY4MDg1YWM4OWIxMjQ2YWZhOTdkMDIzYjcwOTRlZWVlKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGUxMmMxOGFhNGY3NDA1NzlkODFmZTM1MWI5NzdkY2QgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjAzNTFhMzE0ZWM1NDliMjkwNjM4YTBmZjk5YjFlMDUgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2YwMzUxYTMxNGVjNTQ5YjI5MDYzOGEwZmY5OWIxZTA1IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBKYWNvYm8gZGUgbGFzIExleWVzIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZTEyYzE4YWE0Zjc0MDU3OWQ4MWZlMzUxYjk3N2RjZC5zZXRDb250ZW50KGh0bWxfZjAzNTFhMzE0ZWM1NDliMjkwNjM4YTBmZjk5YjFlMDUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iMzhlZjg1MDQwZTI0MDMxOTI3NjAwZTJkZThhYWMyMy5iaW5kUG9wdXAocG9wdXBfNGUxMmMxOGFhNGY3NDA1NzlkODFmZTM1MWI5NzdkY2QpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82ZjMyN2JiMTk5YWU0NmNlOTZlMzU0ZGY1Yjk4M2YzMyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk2NzM2MTgsLTEuMDg0NjAxNF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzMxMGYwNzUxMWU4MTRmYzQ4MmM3ODQ4NjMxMDI0NzViID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzZmMzI3YmIxOTlhZTQ2Y2U5NmUzNTRkZjViOTgzZjMzLnNldEljb24oaWNvbl8zMTBmMDc1MTFlODE0ZmM0ODJjNzg0ODYzMTAyNDc1Yik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2EyNzlmNTcyOGI1NzQ1OGNhYzVjYmE0Njk3NGE2MGFhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIwOTA4YTczOTVjYTQ2NTRiNWYzMjczYjU4NzUzNTY1ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8yMDkwOGE3Mzk1Y2E0NjU0YjVmMzI3M2I1ODc1MzU2NSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQXZlbmlkYSBkZSBsYSBMaWJlcnRhZCAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTI3OWY1NzI4YjU3NDU4Y2FjNWNiYTQ2OTc0YTYwYWEuc2V0Q29udGVudChodG1sXzIwOTA4YTczOTVjYTQ2NTRiNWYzMjczYjU4NzUzNTY1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNmYzMjdiYjE5OWFlNDZjZTk2ZTM1NGRmNWI5ODNmMzMuYmluZFBvcHVwKHBvcHVwX2EyNzlmNTcyOGI1NzQ1OGNhYzVjYmE0Njk3NGE2MGFhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNDRlMzgwYmM4MWUyNGFlNzg0MWJjMmZiYjA3MDVhYzIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODc1MjM1LC0xLjEyNzU0OTldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9mNzNlY2U5NzE5MjA0MWQwYmZlZjlmZjI0MzdjN2FmOSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl80NGUzODBiYzgxZTI0YWU3ODQxYmMyZmJiMDcwNWFjMi5zZXRJY29uKGljb25fZjczZWNlOTcxOTIwNDFkMGJmZWY5ZmYyNDM3YzdhZjkpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83MWJhMTk2YjM4NDk0NTFhOGVmOTg1N2NmM2YyNGQ3NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wODcyNjM0NGY2NzQ0ZmU1YmYyOTY1ZjAzMzg4YTc3YyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMDg3MjYzNDRmNjc0NGZlNWJmMjk2NWYwMzM4OGE3N2MiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIGRlIGxhIE1lcmNlZCAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzFiYTE5NmIzODQ5NDUxYThlZjk4NTdjZjNmMjRkNzcuc2V0Q29udGVudChodG1sXzA4NzI2MzQ0ZjY3NDRmZTViZjI5NjVmMDMzODhhNzdjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNDRlMzgwYmM4MWUyNGFlNzg0MWJjMmZiYjA3MDVhYzIuYmluZFBvcHVwKHBvcHVwXzcxYmExOTZiMzg0OTQ1MWE4ZWY5ODU3Y2YzZjI0ZDc3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYmFmMzY4MDdkYjZkNGZlMWIxOWZhNjk1M2ViNTI3NDQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45OTI1NTM5LC0xLjEzMzM3N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzM1MmNjZWI2OTI2NzQzMzNhZWUxNmQyZDJjNDZhZjU5ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2JhZjM2ODA3ZGI2ZDRmZTFiMTlmYTY5NTNlYjUyNzQ0LnNldEljb24oaWNvbl8zNTJjY2ViNjkyNjc0MzMzYWVlMTZkMmQyYzQ2YWY1OSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhmMDYyNTgzZWFkODQ5OGQ4ZDAzMmZlODEwMzk5ZDY5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMyMDgxN2U2YzA0ZjQ2YjI5ZTdiODdmYTY4ZjhlZTJmID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8zMjA4MTdlNmMwNGY0NmIyOWU3Yjg3ZmE2OGY4ZWUyZiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgY2FsbGUgZG9jdG9yIFJvbWFuIEFsYmVyY2EgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhmMDYyNTgzZWFkODQ5OGQ4ZDAzMmZlODEwMzk5ZDY5LnNldENvbnRlbnQoaHRtbF8zMjA4MTdlNmMwNGY0NmIyOWU3Yjg3ZmE2OGY4ZWUyZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2JhZjM2ODA3ZGI2ZDRmZTFiMTlmYTY5NTNlYjUyNzQ0LmJpbmRQb3B1cChwb3B1cF84ZjA2MjU4M2VhZDg0OThkOGQwMzJmZTgxMDM5OWQ2OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2Q2OTE0MjFhNjhhZDQyODBiMzIyZjRhODVjZmRmNTFiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTQ3NzI3NywtMS4xODEzMDA4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fOWQ4OWIwYzNkYWEyNGM1Mzg3NTg4OTViOTA1M2MwOGYgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZDY5MTQyMWE2OGFkNDI4MGIzMjJmNGE4NWNmZGY1MWIuc2V0SWNvbihpY29uXzlkODliMGMzZGFhMjRjNTM4NzU4ODk1YjkwNTNjMDhmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDU2MWFkMDZkZWU0NDZmNDg0NDVmOGI2NDYwNTViZTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGJlMTA0MjE4ZWJiNDgyYmJlNzU1ZGY5MTI5ZDZlMmYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzhiZTEwNDIxOGViYjQ4MmJiZTc1NWRmOTEyOWQ2ZTJmIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBjYWxsZSBlc2N1bHRvciBSb3F1ZSBMb3BleiAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDU2MWFkMDZkZWU0NDZmNDg0NDVmOGI2NDYwNTViZTYuc2V0Q29udGVudChodG1sXzhiZTEwNDIxOGViYjQ4MmJiZTc1NWRmOTEyOWQ2ZTJmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZDY5MTQyMWE2OGFkNDI4MGIzMjJmNGE4NWNmZGY1MWIuYmluZFBvcHVwKHBvcHVwXzQ1NjFhZDA2ZGVlNDQ2ZjQ4NDQ1ZjhiNjQ2MDU1YmU2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZGI5ZDYyNTE5ZTM3NGExYWIzNTY4NDQ1ZjgwZThlNWMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45OTIwNTgyLC0xLjEzNTYyMDJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9iNjczMDhjYjBjNDg0MGU4ODhhOTU5MmU1YWNjMmQ5OSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9kYjlkNjI1MTllMzc0YTFhYjM1Njg0NDVmODBlOGU1Yy5zZXRJY29uKGljb25fYjY3MzA4Y2IwYzQ4NDBlODg4YTk1OTJlNWFjYzJkOTkpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZmM2OTE5NTIyZWU0NTlmOWUxZDJmOWUzYTJhZjYwMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wOThjZjYwZmMzMDc0MjMzOGY0Mzk3YzAyOGQ5NjQyZSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMDk4Y2Y2MGZjMzA3NDIzMzhmNDM5N2MwMjhkOTY0MmUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIGNhbGxlIEpvYXF1aW4gQmx1bWUgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJmYzY5MTk1MjJlZTQ1OWY5ZTFkMmY5ZTNhMmFmNjAxLnNldENvbnRlbnQoaHRtbF8wOThjZjYwZmMzMDc0MjMzOGY0Mzk3YzAyOGQ5NjQyZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2RiOWQ2MjUxOWUzNzRhMWFiMzU2ODQ0NWY4MGU4ZTVjLmJpbmRQb3B1cChwb3B1cF8yZmM2OTE5NTIyZWU0NTlmOWUxZDJmOWUzYTJhZjYwMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2NlNDQxYmRkNWM5NDQxZmU4ZTIwM2U3YzFmNDQyOWFiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTg4NTI4MiwtMS4xMzI3NTY1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMmFlODg2OWU2Nzk3NGE1NjliNzZiYmQ5YTg4ZjkyZTAgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfY2U0NDFiZGQ1Yzk0NDFmZThlMjAzZTdjMWY0NDI5YWIuc2V0SWNvbihpY29uXzJhZTg4NjllNjc5NzRhNTY5Yjc2YmJkOWE4OGY5MmUwKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzFkZDIwZWJlODkxNGIzZTk5NDE2MzlkZTdlMGM5ODMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzViNzNmYzdkYTZkNGNjZjkzYTljMzc3OGI1Nzk2OGIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzc1YjczZmM3ZGE2ZDRjY2Y5M2E5YzM3NzhiNTc5NjhiIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBjYWxsZSBQb3J0aWxsbyBkZSBTYW4gQW50b25pbyAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzFkZDIwZWJlODkxNGIzZTk5NDE2MzlkZTdlMGM5ODMuc2V0Q29udGVudChodG1sXzc1YjczZmM3ZGE2ZDRjY2Y5M2E5YzM3NzhiNTc5NjhiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfY2U0NDFiZGQ1Yzk0NDFmZThlMjAzZTdjMWY0NDI5YWIuYmluZFBvcHVwKHBvcHVwX2MxZGQyMGViZTg5MTRiM2U5OTQxNjM5ZGU3ZTBjOTgzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMmI0MDViMTIzMzU1NGFkMDg5YzNjNWEzN2QyOWI1NTIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45OTE5Mzk2LC0xLjEzNDQ0OTddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8wNWQxMjg2NGNhZGQ0ZDVkOWZlODkzNDU1N2ExOWNkNSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8yYjQwNWIxMjMzNTU0YWQwODljM2M1YTM3ZDI5YjU1Mi5zZXRJY29uKGljb25fMDVkMTI4NjRjYWRkNGQ1ZDlmZTg5MzQ1NTdhMTljZDUpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MzlhYzJjMzJlMzM0OTkyYjU4ZDIzZjEzMWUxNDk5MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hYjVjODIxMWViODg0ODcxOTRmYzBiNjI2N2E1MWE3YyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYWI1YzgyMTFlYjg4NDg3MTk0ZmMwYjYyNjdhNTFhN2MiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIGNhbGxlIFNpZXJyYSBkZSBBc2NveSAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTM5YWMyYzMyZTMzNDk5MmI1OGQyM2YxMzFlMTQ5OTIuc2V0Q29udGVudChodG1sX2FiNWM4MjExZWI4ODQ4NzE5NGZjMGI2MjY3YTUxYTdjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMmI0MDViMTIzMzU1NGFkMDg5YzNjNWEzN2QyOWI1NTIuYmluZFBvcHVwKHBvcHVwXzkzOWFjMmMzMmUzMzQ5OTJiNThkMjNmMTMxZTE0OTkyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjgxZmQ5YjUwNTM2NDBmZTg4MzBiNzQzNTkzMWI3MWUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODkzNTE5LC0xLjEzMTAyODZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl82YWVlZDA5MTdhZjk0MTAwYWQyMGE1ZTUxMWMzNmI5YiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8yODFmZDliNTA1MzY0MGZlODgzMGI3NDM1OTMxYjcxZS5zZXRJY29uKGljb25fNmFlZWQwOTE3YWY5NDEwMGFkMjBhNWU1MTFjMzZiOWIpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMTI3YmIzZDAzNjA0NzlkOWY3NTMwMDc0MzgyNDBiNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xZjI3YTY0M2JlZGE0ZTY3OTAzYjYyZmUwNDUxNzA4NyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMWYyN2E2NDNiZWRhNGU2NzkwM2I2MmZlMDQ1MTcwODciICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIENhcmxvcyBJSUkgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzExMjdiYjNkMDM2MDQ3OWQ5Zjc1MzAwNzQzODI0MGI1LnNldENvbnRlbnQoaHRtbF8xZjI3YTY0M2JlZGE0ZTY3OTAzYjYyZmUwNDUxNzA4Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzI4MWZkOWI1MDUzNjQwZmU4ODMwYjc0MzU5MzFiNzFlLmJpbmRQb3B1cChwb3B1cF8xMTI3YmIzZDAzNjA0NzlkOWY3NTMwMDc0MzgyNDBiNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2FjZDllNmI4ZWU4NjQyNGJiNTQ2MzY5MjlmODE4NDQ0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTkxODkwMSwtMS4xMzQ3MjJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8yYjMxMzQ0NTkzMjc0YmMzYmQyNzFkZWIyODIzNzRlNiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9hY2Q5ZTZiOGVlODY0MjRiYjU0NjM2OTI5ZjgxODQ0NC5zZXRJY29uKGljb25fMmIzMTM0NDU5MzI3NGJjM2JkMjcxZGViMjgyMzc0ZTYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83MDVmNTM0NTU1YzM0YzRkODIwY2Y5NTc2NGUxOGE4ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hOTIyZGM3ZjNmYTk0N2JmODZiMjczMDVmZGNiODcxZCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYTkyMmRjN2YzZmE5NDdiZjg2YjI3MzA1ZmRjYjg3MWQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIGNhbGxlIFNhbnRhIE1hcnRhIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83MDVmNTM0NTU1YzM0YzRkODIwY2Y5NTc2NGUxOGE4ZC5zZXRDb250ZW50KGh0bWxfYTkyMmRjN2YzZmE5NDdiZjg2YjI3MzA1ZmRjYjg3MWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hY2Q5ZTZiOGVlODY0MjRiYjU0NjM2OTI5ZjgxODQ0NC5iaW5kUG9wdXAocG9wdXBfNzA1ZjUzNDU1NWMzNGM0ZDgyMGNmOTU3NjRlMThhOGQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83NThhNWQxYTA2MWM0ZjIzOGQzZjVjMGVmZmFjZDUyMyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk5MTMxODQsLTEuMTMyODY1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fM2Q2NWE3MWEyNjM0NDNkMGIyNTEzOTViZTU3NWNlNGEgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNzU4YTVkMWEwNjFjNGYyMzhkM2Y1YzBlZmZhY2Q1MjMuc2V0SWNvbihpY29uXzNkNjVhNzFhMjYzNDQzZDBiMjUxMzk1YmU1NzVjZTRhKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTcwZjIyZWM5MWM5NDY5Yjg4NjlkMmFmMzM1YTc4NTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjE3YWE3OWE2OTBmNGJkNmIzOWJiNDYyYmI3ZTY2NWEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2IxN2FhNzlhNjkwZjRiZDZiMzliYjQ2MmJiN2U2NjVhIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBCYXRhbGxhIGRlIGxhcyBGbG9yZXMgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E3MGYyMmVjOTFjOTQ2OWI4ODY5ZDJhZjMzNWE3ODU0LnNldENvbnRlbnQoaHRtbF9iMTdhYTc5YTY5MGY0YmQ2YjM5YmI0NjJiYjdlNjY1YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzc1OGE1ZDFhMDYxYzRmMjM4ZDNmNWMwZWZmYWNkNTIzLmJpbmRQb3B1cChwb3B1cF9hNzBmMjJlYzkxYzk0NjliODg2OWQyYWYzMzVhNzg1NCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2Y4N2U0MDJkMzY2MDQzOGE4MWZhY2UyN2ZkMGM4MDhkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTkwNzM3NywtMS4xMzA2NzcxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMTAwYWE4OGUzNzI4NGQxMmFkN2Y3NTBmODZjODkyYzUgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZjg3ZTQwMmQzNjYwNDM4YTgxZmFjZTI3ZmQwYzgwOGQuc2V0SWNvbihpY29uXzEwMGFhODhlMzcyODRkMTJhZDdmNzUwZjg2Yzg5MmM1KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDNkOTc1MDMzMjJhNGY3ZjgwMjNmYWZiMzNiMGZhMzIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGExNjAyOTcxNzI3NGRlMmJkMmIyODJmMWYwMjdlZWYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2RhMTYwMjk3MTcyNzRkZTJiZDJiMjgyZjFmMDI3ZWVmIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBjYWxsZSBMZXBhbnRvIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wM2Q5NzUwMzMyMmE0ZjdmODAyM2ZhZmIzM2IwZmEzMi5zZXRDb250ZW50KGh0bWxfZGExNjAyOTcxNzI3NGRlMmJkMmIyODJmMWYwMjdlZWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mODdlNDAyZDM2NjA0MzhhODFmYWNlMjdmZDBjODA4ZC5iaW5kUG9wdXAocG9wdXBfMDNkOTc1MDMzMjJhNGY3ZjgwMjNmYWZiMzNiMGZhMzIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hNTQ4Y2ZkMmQxM2M0NDFjYTNiMWJmMTUxMjQ2ODQzOCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk5Mzk4NDEsLTEuMTMyODIxOV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2VlMjU4MGU0MzhlYzRkN2M4NDBkNmI0YmU3ZWFlMjgwID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2E1NDhjZmQyZDEzYzQ0MWNhM2IxYmYxNTEyNDY4NDM4LnNldEljb24oaWNvbl9lZTI1ODBlNDM4ZWM0ZDdjODQwZDZiNGJlN2VhZTI4MCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU3NzgyNzNkMDVkYjRmZTliODM0ZDg5MzkzZjQ2MTJiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI3MmM0NTg3YTMyODQxODE4NjcyMDhlYjk2ODFjNWUwID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8yNzJjNDU4N2EzMjg0MTgxODY3MjA4ZWI5NjgxYzVlMCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgY2FsbGUgSm9zZSBCYWxsZXN0ZXIgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU3NzgyNzNkMDVkYjRmZTliODM0ZDg5MzkzZjQ2MTJiLnNldENvbnRlbnQoaHRtbF8yNzJjNDU4N2EzMjg0MTgxODY3MjA4ZWI5NjgxYzVlMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2E1NDhjZmQyZDEzYzQ0MWNhM2IxYmYxNTEyNDY4NDM4LmJpbmRQb3B1cChwb3B1cF81Nzc4MjczZDA1ZGI0ZmU5YjgzNGQ4OTM5M2Y0NjEyYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzk2MjliMjg3OGViZTQ2MTQ4MGIwNWMwMDI1ZTgzMmY3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTkzMDIwMywtMS4xMzI5NzkxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYjgzMGFiMzA1ZjFmNGEzZWExYjIwMzgwNzg3NGZjNjEgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfOTYyOWIyODc4ZWJlNDYxNDgwYjA1YzAwMjVlODMyZjcuc2V0SWNvbihpY29uX2I4MzBhYjMwNWYxZjRhM2VhMWIyMDM4MDc4NzRmYzYxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTdiMWZkZDY2ODViNGVmZjhmMmY2OGJjYjAyYjA1MjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTJhNmMxMDgzMWFlNDFiMTljZGQ4NzIwOGRjMWE4M2QgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzUyYTZjMTA4MzFhZTQxYjE5Y2RkODcyMDhkYzFhODNkIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBjYWxsZSBSaW8gQXJnb3MgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E3YjFmZGQ2Njg1YjRlZmY4ZjJmNjhiY2IwMmIwNTIyLnNldENvbnRlbnQoaHRtbF81MmE2YzEwODMxYWU0MWIxOWNkZDg3MjA4ZGMxYTgzZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzk2MjliMjg3OGViZTQ2MTQ4MGIwNWMwMDI1ZTgzMmY3LmJpbmRQb3B1cChwb3B1cF9hN2IxZmRkNjY4NWI0ZWZmOGYyZjY4YmNiMDJiMDUyMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzk1MTFmMzAxODk5ZDRlNWFiNDZlNjllM2UzYmJmNTIxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguMDQwNTE1LC0xLjA5MzE5ODFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9mYTc2ZjIxOWYxNzA0YmI2YWNkMGE4MmY4Y2ViNGQ2MCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl85NTExZjMwMTg5OWQ0ZTVhYjQ2ZTY5ZTNlM2JiZjUyMS5zZXRJY29uKGljb25fZmE3NmYyMTlmMTcwNGJiNmFjZDBhODJmOGNlYjRkNjApOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hMjFmNWJlN2YxYTM0ZDY3YTk1OGVjZGI4YTc3ZjExMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNjhmYTNmNjBmN2Q0OWFlYWI1YzUxN2Q2MTAzMTU0ZiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYTY4ZmEzZjYwZjdkNDlhZWFiNWM1MTdkNjEwMzE1NGYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIGNhbGxlIFNpZXJyYSBkZSBsYSBNdWVsYSAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTIxZjViZTdmMWEzNGQ2N2E5NThlY2RiOGE3N2YxMTAuc2V0Q29udGVudChodG1sX2E2OGZhM2Y2MGY3ZDQ5YWVhYjVjNTE3ZDYxMDMxNTRmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOTUxMWYzMDE4OTlkNGU1YWI0NmU2OWUzZTNiYmY1MjEuYmluZFBvcHVwKHBvcHVwX2EyMWY1YmU3ZjFhMzRkNjdhOTU4ZWNkYjhhNzdmMTEwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfN2I2OGI2MTI3MDM0NDAxYzlkMTZmZGJiYmRlMTA5MjUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45OTUxNTY0LC0xLjE5MjEwMTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9iYTkxMjhkMTU5ODY0M2I1OWM3YmM1NWQ2NWQ0ZDVhMSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl83YjY4YjYxMjcwMzQ0MDFjOWQxNmZkYmJiZGUxMDkyNS5zZXRJY29uKGljb25fYmE5MTI4ZDE1OTg2NDNiNTljN2JjNTVkNjVkNGQ1YTEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83MDEwYjQ0NTA2ZTA0NWQ1YjMzMTBiNmU2NDVlMzQ4ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83YmJhMTFmZTI2Mjc0NTI0ODBkMjcxNzQ3MGVkMTdmMiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfN2JiYTExZmUyNjI3NDUyNDgwZDI3MTc0NzBlZDE3ZjIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIGNhbGxlIEJhcnRvbG9tZSBQZXJleiBDYXNhcyAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzAxMGI0NDUwNmUwNDVkNWIzMzEwYjZlNjQ1ZTM0OGQuc2V0Q29udGVudChodG1sXzdiYmExMWZlMjYyNzQ1MjQ4MGQyNzE3NDcwZWQxN2YyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfN2I2OGI2MTI3MDM0NDAxYzlkMTZmZGJiYmRlMTA5MjUuYmluZFBvcHVwKHBvcHVwXzcwMTBiNDQ1MDZlMDQ1ZDViMzMxMGI2ZTY0NWUzNDhkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNDdmMWY2NzE0NWViNDdmZTk5ZDIyM2I1M2UwOWNjZDkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45OTEwMTE3LC0xLjEzMTkyNzFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl83OTkwNmNlMmJjOGM0MDhiYTFlMGZjNDRlZWFlNzJmNiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl80N2YxZjY3MTQ1ZWI0N2ZlOTlkMjIzYjUzZTA5Y2NkOS5zZXRJY29uKGljb25fNzk5MDZjZTJiYzhjNDA4YmExZTBmYzQ0ZWVhZTcyZjYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85NjQzMzRlZmQwNzI0MzgzYjU0ZDU0OGI3YzU5NTEzMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jNGMyZDIwOWUyMGU0NDUyYTk4YmYwMTU5MmU4YTM1ZiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYzRjMmQyMDllMjBlNDQ1MmE5OGJmMDE1OTJlOGEzNWYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIGNhbGxlIEp1bnRlcm9uZXMgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk2NDMzNGVmZDA3MjQzODNiNTRkNTQ4YjdjNTk1MTMzLnNldENvbnRlbnQoaHRtbF9jNGMyZDIwOWUyMGU0NDUyYTk4YmYwMTU5MmU4YTM1Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQ3ZjFmNjcxNDVlYjQ3ZmU5OWQyMjNiNTNlMDljY2Q5LmJpbmRQb3B1cChwb3B1cF85NjQzMzRlZmQwNzI0MzgzYjU0ZDU0OGI3YzU5NTEzMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2ExZjJiNWFjYWRjNTRhODc5M2Y0ZmRiYWI2YzgwMmVhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTkwMjE2MywtMS4xMjc1MTE3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYjVjNDdiZTY2ZTUxNGVhNTgwMzFiYTU2YTYwZjgzNDcgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYTFmMmI1YWNhZGM1NGE4NzkzZjRmZGJhYjZjODAyZWEuc2V0SWNvbihpY29uX2I1YzQ3YmU2NmU1MTRlYTU4MDMxYmE1NmE2MGY4MzQ3KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGFiMTdlODNiOGIwNDQ1NjlmN2Q3MWNlOGQ1YWZlN2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2Y1YWYxOGJjNjE2NGY1N2JkN2ExYjVlMzZjYzhjZDEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2NmNWFmMThiYzYxNjRmNTdiZDdhMWI1ZTM2Y2M4Y2QxIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBjYWxsZSBQdWVydGEgTnVldmEgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhhYjE3ZTgzYjhiMDQ0NTY5ZjdkNzFjZThkNWFmZTdhLnNldENvbnRlbnQoaHRtbF9jZjVhZjE4YmM2MTY0ZjU3YmQ3YTFiNWUzNmNjOGNkMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2ExZjJiNWFjYWRjNTRhODc5M2Y0ZmRiYWI2YzgwMmVhLmJpbmRQb3B1cChwb3B1cF84YWIxN2U4M2I4YjA0NDU2OWY3ZDcxY2U4ZDVhZmU3YSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2RmYmM1MzlkNGJmMDRhODZhZjdiNDdiZGEyMGMyM2ZjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTg4OTI3MiwtMS4xMzQ2MTU4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fY2MyYmRmODM4YjA3NDg3YjhkZjIyMmYxNjhhNjJjYjkgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZGZiYzUzOWQ0YmYwNGE4NmFmN2I0N2JkYTIwYzIzZmMuc2V0SWNvbihpY29uX2NjMmJkZjgzOGIwNzQ4N2I4ZGYyMjJmMTY4YTYyY2I5KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjNhMGU1OTczNmIwNDMwODhjY2NlZjNmZTBkODM2YmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTQ0NGQ4MDkyMTk0NGUwOWFmNGE1MmY5YmRmZGFmZTggPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzU0NDRkODA5MjE5NDRlMDlhZjRhNTJmOWJkZmRhZmU4IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBKZXJvbmltbyBkZSBSb2RhIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yM2EwZTU5NzM2YjA0MzA4OGNjY2VmM2ZlMGQ4MzZiZC5zZXRDb250ZW50KGh0bWxfNTQ0NGQ4MDkyMTk0NGUwOWFmNGE1MmY5YmRmZGFmZTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kZmJjNTM5ZDRiZjA0YTg2YWY3YjQ3YmRhMjBjMjNmYy5iaW5kUG9wdXAocG9wdXBfMjNhMGU1OTczNmIwNDMwODhjY2NlZjNmZTBkODM2YmQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hNTYzNzI0NDg5NTA0Y2RlODFkNDcxMTMxOWQxNGM4OCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjA1MzM5NzcsLTEuNjYwODg4N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzUxYzYwMGE0ZjdjMDRmYWFhMjRlYjAzMDE3YTcxN2UzID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2E1NjM3MjQ0ODk1MDRjZGU4MWQ0NzExMzE5ZDE0Yzg4LnNldEljb24oaWNvbl81MWM2MDBhNGY3YzA0ZmFhYTI0ZWIwMzAxN2E3MTdlMyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E1OWQ5MzQ0MTAzNjRjN2Q5ZTk3NWYzMmM4ZTk4Yjg0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MzODExM2E4N2ZhNDQ1OTg5YjQ3NTIwZTVlNDI3YWExID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9jMzgxMTNhODdmYTQ0NTk4OWI0NzUyMGU1ZTQyN2FhMSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgY2FsbGUgVGVuaWVudGUgR2VuZXJhbCBHdXRpZXJyZXogTWVsbGFkbyAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTU5ZDkzNDQxMDM2NGM3ZDllOTc1ZjMyYzhlOThiODQuc2V0Q29udGVudChodG1sX2MzODExM2E4N2ZhNDQ1OTg5YjQ3NTIwZTVlNDI3YWExKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYTU2MzcyNDQ4OTUwNGNkZTgxZDQ3MTEzMTlkMTRjODguYmluZFBvcHVwKHBvcHVwX2E1OWQ5MzQ0MTAzNjRjN2Q5ZTk3NWYzMmM4ZTk4Yjg0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNGZlYmU5NzNiYTRlNDFkNTkzZmMxMDZiNTNlY2RkNzYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45OTI5NTk4LC0xLjEzMzk3ODZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9lZGJhNzA5ZDQ1YTg0OTdmODc1NDdhYzNiOGRiYzdmZiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl80ZmViZTk3M2JhNGU0MWQ1OTNmYzEwNmI1M2VjZGQ3Ni5zZXRJY29uKGljb25fZWRiYTcwOWQ0NWE4NDk3Zjg3NTQ3YWMzYjhkYmM3ZmYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hMTA5ZmU3ZTVlMmU0MTU5OGI5NWE5YTcwNjg5NzE1NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNjhkNzlkNzViZDQ0NjhlYWY2N2I1YmExZGMxOTk5OSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMzY4ZDc5ZDc1YmQ0NDY4ZWFmNjdiNWJhMWRjMTk5OTkiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIGNhbGxlIENyb25pc3RhIENhcmxvcyBWYWxjYXJjZWwgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ExMDlmZTdlNWUyZTQxNTk4Yjk1YTlhNzA2ODk3MTU0LnNldENvbnRlbnQoaHRtbF8zNjhkNzlkNzViZDQ0NjhlYWY2N2I1YmExZGMxOTk5OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzRmZWJlOTczYmE0ZTQxZDU5M2ZjMTA2YjUzZWNkZDc2LmJpbmRQb3B1cChwb3B1cF9hMTA5ZmU3ZTVlMmU0MTU5OGI5NWE5YTcwNjg5NzE1NCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2I0MWRmM2Y5ZmQ1NTRmNzY4ZDU4MDVhNDE5NDgxYWYwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTg5NDAyNCwtMS4xMzU2ODk3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fOTVlNmYwYTExNjg1NGIwNWI2NjViZWM3ODc5ZjBmZjMgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYjQxZGYzZjlmZDU1NGY3NjhkNTgwNWE0MTk0ODFhZjAuc2V0SWNvbihpY29uXzk1ZTZmMGExMTY4NTRiMDViNjY1YmVjNzg3OWYwZmYzKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGU2Y2RjZmQ2OWY5NDFhOTkwMzFkYjA2NDUwZjM5NWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGY0OGFlYjFlYjAyNDc2MThjMTczYTMyYWViYjExOWMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2RmNDhhZWIxZWIwMjQ3NjE4YzE3M2EzMmFlYmIxMTljIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBQYXNvcyBkZSBTYW50aWFnbyAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGU2Y2RjZmQ2OWY5NDFhOTkwMzFkYjA2NDUwZjM5NWYuc2V0Q29udGVudChodG1sX2RmNDhhZWIxZWIwMjQ3NjE4YzE3M2EzMmFlYmIxMTljKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYjQxZGYzZjlmZDU1NGY3NjhkNTgwNWE0MTk0ODFhZjAuYmluZFBvcHVwKHBvcHVwXzBlNmNkY2ZkNjlmOTQxYTk5MDMxZGIwNjQ1MGYzOTVmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYmJkYjdmNzE3NjQ4NGFlMDkxMzhhNTlhZjAyZjIxZjcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45MzQ3ODkxLC0xLjE2OTA4NDVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8xMDE1YmViOWFjODA0ZDQzODNjZGRkYzllMTNmMmVhMyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9iYmRiN2Y3MTc2NDg0YWUwOTEzOGE1OWFmMDJmMjFmNy5zZXRJY29uKGljb25fMTAxNWJlYjlhYzgwNGQ0MzgzY2RkZGM5ZTEzZjJlYTMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMmM3NTA1OGM0Yzk0MTk3YTYzY2ZkNWE4MmNkYTdjZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81NThiMjE1N2VmNDc0NjM4OWI5MjI4NjgzMGE0ZGE3YSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNTU4YjIxNTdlZjQ3NDYzODliOTIyODY4MzBhNGRhN2EiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIFBpbnRvciBFbCBHcmVjbyAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDJjNzUwNThjNGM5NDE5N2E2M2NmZDVhODJjZGE3Y2Yuc2V0Q29udGVudChodG1sXzU1OGIyMTU3ZWY0NzQ2Mzg5YjkyMjg2ODMwYTRkYTdhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYmJkYjdmNzE3NjQ4NGFlMDkxMzhhNTlhZjAyZjIxZjcuYmluZFBvcHVwKHBvcHVwX2QyYzc1MDU4YzRjOTQxOTdhNjNjZmQ1YTgyY2RhN2NmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYzQwYTU3N2FiNzI4NGVmZmFlNTk0NGFjN2Q1Yjc0ZGYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45OTE5OTEyLC0xLjEzNjAyMDFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8wNDQ1YzM4ZTE4YWM0NjM2ODgyNWQ2YjM1MWRiZDk1NyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9jNDBhNTc3YWI3Mjg0ZWZmYWU1OTQ0YWM3ZDViNzRkZi5zZXRJY29uKGljb25fMDQ0NWMzOGUxOGFjNDYzNjg4MjVkNmIzNTFkYmQ5NTcpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jNzkxOWJhMGJjODI0NzhkODBkYTFlMWYxMjVlODhmNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNjg3ZDcyNGYzNmI0NjY3Yjg2NDZmMTg2ODA5MjgyOCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZDY4N2Q3MjRmMzZiNDY2N2I4NjQ2ZjE4NjgwOTI4MjgiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFNlbmRhIFBpY2F6byAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzc5MTliYTBiYzgyNDc4ZDgwZGExZTFmMTI1ZTg4ZjUuc2V0Q29udGVudChodG1sX2Q2ODdkNzI0ZjM2YjQ2NjdiODY0NmYxODY4MDkyODI4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYzQwYTU3N2FiNzI4NGVmZmFlNTk0NGFjN2Q1Yjc0ZGYuYmluZFBvcHVwKHBvcHVwX2M3OTE5YmEwYmM4MjQ3OGQ4MGRhMWUxZjEyNWU4OGY1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNTA2ZWEwYWY5OTdlNDcxNzljYjIyOTRkYTJkZTVjZDYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45OTE4NjcyLC0xLjEzOTYyNDddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl84ZTg0NjJkYzliNjM0NTU2YWYwOTYyMjY3ZjhlMDQ1NCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl81MDZlYTBhZjk5N2U0NzE3OWNiMjI5NGRhMmRlNWNkNi5zZXRJY29uKGljb25fOGU4NDYyZGM5YjYzNDU1NmFmMDk2MjI2N2Y4ZTA0NTQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hNzFmNzIxNGMzMzc0YjljYWQ4ZmRhYmVhYjIzNGQ0MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hYTY1NWY2YWIwNzI0MjUzYjYwNDliNmM1MDViZjllYiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYWE2NTVmNmFiMDcyNDI1M2I2MDQ5YjZjNTA1YmY5ZWIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIGRlbCBFbWlncmFudGUgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E3MWY3MjE0YzMzNzRiOWNhZDhmZGFiZWFiMjM0ZDQyLnNldENvbnRlbnQoaHRtbF9hYTY1NWY2YWIwNzI0MjUzYjYwNDliNmM1MDViZjllYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzUwNmVhMGFmOTk3ZTQ3MTc5Y2IyMjk0ZGEyZGU1Y2Q2LmJpbmRQb3B1cChwb3B1cF9hNzFmNzIxNGMzMzc0YjljYWQ4ZmRhYmVhYjIzNGQ0Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzVhMTM1MDA5MDE1NzQ1OWU5NzRmMzI0YzJiZmI0NzI3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTkyMzc1MywtMS4xMzY1MzAxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMzg2MTZiZTU1Y2MyNDJjZGEyYWY3OTQ0MDVhZjZjZmYgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNWExMzUwMDkwMTU3NDU5ZTk3NGYzMjRjMmJmYjQ3Mjcuc2V0SWNvbihpY29uXzM4NjE2YmU1NWNjMjQyY2RhMmFmNzk0NDA1YWY2Y2ZmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjRlM2FiZTVkMWQ0NDBhODgyYTYzNWE5ZWZmN2JiYzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2FkYjYxNjZmYTUzNDQ3NmE2Njc2NDYzYjQxYWY4OWMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzNhZGI2MTY2ZmE1MzQ0NzZhNjY3NjQ2M2I0MWFmODljIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBQbGF6YSBTYW50YSBNYXJpYSBkZSBHcmFjaWEgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY0ZTNhYmU1ZDFkNDQwYTg4MmE2MzVhOWVmZjdiYmM4LnNldENvbnRlbnQoaHRtbF8zYWRiNjE2NmZhNTM0NDc2YTY2NzY0NjNiNDFhZjg5Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzVhMTM1MDA5MDE1NzQ1OWU5NzRmMzI0YzJiZmI0NzI3LmJpbmRQb3B1cChwb3B1cF82NGUzYWJlNWQxZDQ0MGE4ODJhNjM1YTllZmY3YmJjOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzNmYmFmOGQ5ZmY0ZTQ1OTFiOGJlMDgyMzFhYzM0ZWI0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTkzNDMzLC0xLjEzOTE0MzRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9kODZlNTUyZWUyYmI0YThhYmExMTY0NGZhYTBmZjZiMCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8zZmJhZjhkOWZmNGU0NTkxYjhiZTA4MjMxYWMzNGViNC5zZXRJY29uKGljb25fZDg2ZTU1MmVlMmJiNGE4YWJhMTE2NDRmYWEwZmY2YjApOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82YmNiMDY0YWRjZGI0NDI1ODE3YjQ1MTUwMGZhNjg3ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NjdkYWI0YmQ1N2M0ODcxYTZkNTcyMDI0NmFjMGJjOCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfODY3ZGFiNGJkNTdjNDg3MWE2ZDU3MjAyNDZhYzBiYzgiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIEF6b3JpbiAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmJjYjA2NGFkY2RiNDQyNTgxN2I0NTE1MDBmYTY4N2Quc2V0Q29udGVudChodG1sXzg2N2RhYjRiZDU3YzQ4NzFhNmQ1NzIwMjQ2YWMwYmM4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfM2ZiYWY4ZDlmZjRlNDU5MWI4YmUwODIzMWFjMzRlYjQuYmluZFBvcHVwKHBvcHVwXzZiY2IwNjRhZGNkYjQ0MjU4MTdiNDUxNTAwZmE2ODdkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYTA4ZTRiODUxNjg0NGRmMmIyNTVhMWUzMGM0N2IzZTAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45OTM5MjA2LC0xLjEzNjY1MDddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9iM2NlNWVlOWMwOTM0ZTkzYWUwNDllZWQxYTg4YTAxMSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9hMDhlNGI4NTE2ODQ0ZGYyYjI1NWExZTMwYzQ3YjNlMC5zZXRJY29uKGljb25fYjNjZTVlZTljMDkzNGU5M2FlMDQ5ZWVkMWE4OGEwMTEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xYzE3Y2EwNmVlNTI0ZWI0ODgzMjQ4YmY0NmUzYzMxNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82YzdhYjBhZTg5MGE0ZTlhOGRhMjdhYzgwYjQzOTFhOSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNmM3YWIwYWU4OTBhNGU5YThkYTI3YWM4MGI0MzkxYTkiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIFBpY28gZGVsIE1vcnJvbiAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWMxN2NhMDZlZTUyNGViNDg4MzI0OGJmNDZlM2MzMTQuc2V0Q29udGVudChodG1sXzZjN2FiMGFlODkwYTRlOWE4ZGEyN2FjODBiNDM5MWE5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYTA4ZTRiODUxNjg0NGRmMmIyNTVhMWUzMGM0N2IzZTAuYmluZFBvcHVwKHBvcHVwXzFjMTdjYTA2ZWU1MjRlYjQ4ODMyNDhiZjQ2ZTNjMzE0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNWFlY2IzOWVhNTI3NDY1YmE0NTAyMTdiZTIyMDFjNzcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45MzkwODg3LC0xLjI1NTgxNzddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9hNDAxNjQ5OGUzNTQ0ZmNjOTViMGFhNmJmNTUwNjY0ZiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl81YWVjYjM5ZWE1Mjc0NjViYTQ1MDIxN2JlMjIwMWM3Ny5zZXRJY29uKGljb25fYTQwMTY0OThlMzU0NGZjYzk1YjBhYTZiZjU1MDY2NGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hYTc1MTFlMzg5OTI0MGM1OWZjMTZhNjliMDYxZGE2NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82YzM4ODU3NDZmNGQ0NTA1ODkzNmQ4MWVjZjhjY2U4NSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNmMzODg1NzQ2ZjRkNDUwNTg5MzZkODFlY2Y4Y2NlODUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIFBhbnRhbm8gZGUgQ2FtYXJpbGxhcyAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWE3NTExZTM4OTkyNDBjNTlmYzE2YTY5YjA2MWRhNjQuc2V0Q29udGVudChodG1sXzZjMzg4NTc0NmY0ZDQ1MDU4OTM2ZDgxZWNmOGNjZTg1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNWFlY2IzOWVhNTI3NDY1YmE0NTAyMTdiZTIyMDFjNzcuYmluZFBvcHVwKHBvcHVwX2FhNzUxMWUzODk5MjQwYzU5ZmMxNmE2OWIwNjFkYTY0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMzBlMjRiZmZiYjdhNDQ3N2JiNTliMGI2YWMxYTdkZTEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45OTI4MDEsLTEuMTM3NDU4NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2VhMDdhNTI1NmUwYTQwZDA4ZGQxYTlhYzQ3NzJiYzQxID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzMwZTI0YmZmYmI3YTQ0NzdiYjU5YjBiNmFjMWE3ZGUxLnNldEljb24oaWNvbl9lYTA3YTUyNTZlMGE0MGQwOGRkMWE5YWM0NzcyYmM0MSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhlZTdjNGFkNGU4NzRlZDE5ODllNmY4MDNmOGU5YjEwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMwYmRjNDRhYzM1MzQwZjJiM2I1MWU5Y2M1NmEwMGU0ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8zMGJkYzQ0YWMzNTM0MGYyYjNiNTFlOWNjNTZhMDBlNCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgRXNjcml0b3IgU2FuY2hleiBNb3Jlbm8gKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhlZTdjNGFkNGU4NzRlZDE5ODllNmY4MDNmOGU5YjEwLnNldENvbnRlbnQoaHRtbF8zMGJkYzQ0YWMzNTM0MGYyYjNiNTFlOWNjNTZhMDBlNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzMwZTI0YmZmYmI3YTQ0NzdiYjU5YjBiNmFjMWE3ZGUxLmJpbmRQb3B1cChwb3B1cF84ZWU3YzRhZDRlODc0ZWQxOTg5ZTZmODAzZjhlOWIxMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2JhNWVkMGRhZTY1ZjRhMTg5OTc4OTY3YzViMzZlZTVjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTkyNTI3NywtMS4xMzY3OTU1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNDlmODIzMTZhYzAyNGZmMWJmNGEyN2RhZWMxZjllZWQgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYmE1ZWQwZGFlNjVmNGExODk5Nzg5NjdjNWIzNmVlNWMuc2V0SWNvbihpY29uXzQ5ZjgyMzE2YWMwMjRmZjFiZjRhMjdkYWVjMWY5ZWVkKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2MzOTA5YWU3NDZiNDA1OWE1YzU3YTFiYTNlZWM1YzMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzA2YjI1ZTM2NjAwNDljMzk2NTg5Nzg4OTdmNWJlMjcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzcwNmIyNWUzNjYwMDQ5YzM5NjU4OTc4ODk3ZjViZTI3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBTaWVycmEgZGUgQ2FycmFzY295IChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYzM5MDlhZTc0NmI0MDU5YTVjNTdhMWJhM2VlYzVjMy5zZXRDb250ZW50KGh0bWxfNzA2YjI1ZTM2NjAwNDljMzk2NTg5Nzg4OTdmNWJlMjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iYTVlZDBkYWU2NWY0YTE4OTk3ODk2N2M1YjM2ZWU1Yy5iaW5kUG9wdXAocG9wdXBfM2MzOTA5YWU3NDZiNDA1OWE1YzU3YTFiYTNlZWM1YzMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kZmI4NTI4OTAyM2U0ODJjODU5NzhmMDI5ZGFiMDU3MSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk5MjQ2OTUsLTEuMTI3NDI5NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzQ2OTNjOWQ5ZjUzODQ3YmNiZjhiMThhNDA3NTI1ZmI5ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2RmYjg1Mjg5MDIzZTQ4MmM4NTk3OGYwMjlkYWIwNTcxLnNldEljb24oaWNvbl80NjkzYzlkOWY1Mzg0N2JjYmY4YjE4YTQwNzUyNWZiOSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZhODM5ZDI5YTRkOTQ3YjdiMGRlOTJlMzhiYmM1YjEyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I5ODU1OGZkODA4YTQ3Y2U5ZmJkMzMxNWU4M2YyODY3ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9iOTg1NThmZDgwOGE0N2NlOWZiZDMzMTVlODNmMjg2NyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgQ29ycmVnaWRvciBQdWV5byAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmE4MzlkMjlhNGQ5NDdiN2IwZGU5MmUzOGJiYzViMTIuc2V0Q29udGVudChodG1sX2I5ODU1OGZkODA4YTQ3Y2U5ZmJkMzMxNWU4M2YyODY3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZGZiODUyODkwMjNlNDgyYzg1OTc4ZjAyOWRhYjA1NzEuYmluZFBvcHVwKHBvcHVwXzZhODM5ZDI5YTRkOTQ3YjdiMGRlOTJlMzhiYmM1YjEyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjQ1ZDUyY2QwY2U5NGQxZDg3YjExNzU1MTA1NTBlY2EgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45OTI1MzQ2LC0xLjEyNDgxNTldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl83N2QwMmRiZmI4YTM0NGZmYTdlOWI5YzY2ZGIwMDQ4NCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9iNDVkNTJjZDBjZTk0ZDFkODdiMTE3NTUxMDU1MGVjYS5zZXRJY29uKGljb25fNzdkMDJkYmZiOGEzNDRmZmE3ZTliOWM2NmRiMDA0ODQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85NmM0NmZlNjJmOGU0MDIwYjQxN2UzNjZkZjA4NmQzOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85OTY1MmEzYjY4YjI0NmZhOTM5NDJlMDAwYzk3YTdkYiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfOTk2NTJhM2I2OGIyNDZmYTkzOTQyZTAwMGM5N2E3ZGIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIGRlIGxhIEZsb3RhIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85NmM0NmZlNjJmOGU0MDIwYjQxN2UzNjZkZjA4NmQzOC5zZXRDb250ZW50KGh0bWxfOTk2NTJhM2I2OGIyNDZmYTkzOTQyZTAwMGM5N2E3ZGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iNDVkNTJjZDBjZTk0ZDFkODdiMTE3NTUxMDU1MGVjYS5iaW5kUG9wdXAocG9wdXBfOTZjNDZmZTYyZjhlNDAyMGI0MTdlMzY2ZGYwODZkMzgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84YmVkZjAzNDkxMTc0MWMzYTcyZWI5ODNlODI5MGQ2ZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4NjgzNTUsLTEuMTMzMzg2MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzg4NGQ2YmZjYzg0MDQwYzBiYWM2MGVmMWQ4ZTY5OTM1ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzhiZWRmMDM0OTExNzQxYzNhNzJlYjk4M2U4MjkwZDZkLnNldEljb24oaWNvbl84ODRkNmJmY2M4NDA0MGMwYmFjNjBlZjFkOGU2OTkzNSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQyNjdjMTUxOGI5NDQwNDU5MWVhOGRlYTBiZDlmYTEyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ExNjU0YWFiYmE4MzRhYzM5N2JiZTYxMmI4MDQ5MzU3ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9hMTY1NGFhYmJhODM0YWMzOTdiYmU2MTJiODA0OTM1NyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgQ29uZGUgZGUgUm9jaGUgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQyNjdjMTUxOGI5NDQwNDU5MWVhOGRlYTBiZDlmYTEyLnNldENvbnRlbnQoaHRtbF9hMTY1NGFhYmJhODM0YWMzOTdiYmU2MTJiODA0OTM1Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzhiZWRmMDM0OTExNzQxYzNhNzJlYjk4M2U4MjkwZDZkLmJpbmRQb3B1cChwb3B1cF80MjY3YzE1MThiOTQ0MDQ1OTFlYThkZWEwYmQ5ZmExMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2UxMmYxYTQxODdhMjRlZGNhZjM0NWU2YzhlYjExNTMwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTkyMjM5OSwtMS4xMzA2NTQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZmFkYmEyYzIxZjNhNDk0NzhlYzlkNDE0NWJjYzk2YmQgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZTEyZjFhNDE4N2EyNGVkY2FmMzQ1ZTZjOGViMTE1MzAuc2V0SWNvbihpY29uX2ZhZGJhMmMyMWYzYTQ5NDc4ZWM5ZDQxNDViY2M5NmJkKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTc1ZjFiMjE2YjE0NGJjMDhhYmI3ODk0OWEyYzk4ZmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjFjYTYzZjJmNjJhNGExNmFkMjEyZDA2ZDM1NWE0ODQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2YxY2E2M2YyZjYyYTRhMTZhZDIxMmQwNmQzNTVhNDg0IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBjYWxsZSBKdWFuIEd1ZXJyZXJvIFJ1aXogKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk3NWYxYjIxNmIxNDRiYzA4YWJiNzg5NDlhMmM5OGZlLnNldENvbnRlbnQoaHRtbF9mMWNhNjNmMmY2MmE0YTE2YWQyMTJkMDZkMzU1YTQ4NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2UxMmYxYTQxODdhMjRlZGNhZjM0NWU2YzhlYjExNTMwLmJpbmRQb3B1cChwb3B1cF85NzVmMWIyMTZiMTQ0YmMwOGFiYjc4OTQ5YTJjOThmZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzU2ODE2NDQwZjJjYTRmNDE5NzEyOTY2MjljNWNmMDE5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTg2ODIwNCwtMS4xMzQwMjU4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMDk5ODM3NzM5ZWRhNDI1Mjk5NTk0MDlmNzk2YjViMmQgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNTY4MTY0NDBmMmNhNGY0MTk3MTI5NjYyOWM1Y2YwMTkuc2V0SWNvbihpY29uXzA5OTgzNzczOWVkYTQyNTI5OTU5NDA5Zjc5NmI1YjJkKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzhjMTc2NWI5MTkzNGZlNTg4NTI4NTdhYjc2ZDU5OTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjAwNGE4OGEwZjQ2NGFhYWIwMzEwMWEyZmU3NzczNGQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2IwMDRhODhhMGY0NjRhYWFiMDMxMDFhMmZlNzc3MzRkIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBMYXJlZG8gKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM4YzE3NjViOTE5MzRmZTU4ODUyODU3YWI3NmQ1OTkyLnNldENvbnRlbnQoaHRtbF9iMDA0YTg4YTBmNDY0YWFhYjAzMTAxYTJmZTc3NzM0ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzU2ODE2NDQwZjJjYTRmNDE5NzEyOTY2MjljNWNmMDE5LmJpbmRQb3B1cChwb3B1cF8zOGMxNzY1YjkxOTM0ZmU1ODg1Mjg1N2FiNzZkNTk5Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2EyNDFiMmI0MTlkNDQ3ZjhhYmE1NmUxOTUxNTA4MDdlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTY1NzE5NywtMS4xMjgwODA2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZjU1ZWQ1NzA2OWJjNDkzZjhmYzA3ZDgxNDQwODhjMmEgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYTI0MWIyYjQxOWQ0NDdmOGFiYTU2ZTE5NTE1MDgwN2Uuc2V0SWNvbihpY29uX2Y1NWVkNTcwNjliYzQ5M2Y4ZmMwN2Q4MTQ0MDg4YzJhKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTNiNzI1ZWVkYmRjNGIyNmFlZGI2YzMzMDkzZDBlZTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODVmNTZjY2YxYTlkNGJiZGI4MDUyMTdiZTdiYjMzM2MgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzg1ZjU2Y2NmMWE5ZDRiYmRiODA1MjE3YmU3YmIzMzNjIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBTYW4gTWlndWVsIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lM2I3MjVlZWRiZGM0YjI2YWVkYjZjMzMwOTNkMGVlMS5zZXRDb250ZW50KGh0bWxfODVmNTZjY2YxYTlkNGJiZGI4MDUyMTdiZTdiYjMzM2MpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hMjQxYjJiNDE5ZDQ0N2Y4YWJhNTZlMTk1MTUwODA3ZS5iaW5kUG9wdXAocG9wdXBfZTNiNzI1ZWVkYmRjNGIyNmFlZGI2YzMzMDkzZDBlZTEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hMjlmNmIwNjBjNjI0OWJkOGIzNzUyZDdkYjYyMTU2ZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk0Mjg4MTIsLTEuMTU5ODYxMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2ZmMTZhMTg4MDBiNDQ2NzQ4ODNiNzZmNjYxMGY0Yzc5ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2EyOWY2YjA2MGM2MjQ5YmQ4YjM3NTJkN2RiNjIxNTZmLnNldEljb24oaWNvbl9mZjE2YTE4ODAwYjQ0Njc0ODgzYjc2ZjY2MTBmNGM3OSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E0NzBmNzY2N2I1MzQwZDJiYjM0OWQzNmI1OGM0YzBjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA1NzMwNjk5ZTc1ZjRlNTc5ZDA4NmIwYTQ0MzMxODFhID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8wNTczMDY5OWU3NWY0ZTU3OWQwODZiMGE0NDMzMTgxYSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQXZlbmlkYSBBbGZvbnNvIFggRWwgU2FiaW8gKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E0NzBmNzY2N2I1MzQwZDJiYjM0OWQzNmI1OGM0YzBjLnNldENvbnRlbnQoaHRtbF8wNTczMDY5OWU3NWY0ZTU3OWQwODZiMGE0NDMzMTgxYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2EyOWY2YjA2MGM2MjQ5YmQ4YjM3NTJkN2RiNjIxNTZmLmJpbmRQb3B1cChwb3B1cF9hNDcwZjc2NjdiNTM0MGQyYmIzNDlkMzZiNThjNGMwYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzJmMDJhZWZjZTNlYzQ0YmQ5YWNmYzBiNmE1YWRlZWQ5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTcyOTQxMSwtMS4xMzYzNjYzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYzU5NzI5ZmJjNTIyNDUxM2EwMjA3NjkyOWY5OTgyNjYgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMmYwMmFlZmNlM2VjNDRiZDlhY2ZjMGI2YTVhZGVlZDkuc2V0SWNvbihpY29uX2M1OTcyOWZiYzUyMjQ1MTNhMDIwNzY5MjlmOTk4MjY2KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTZjZjg5OGUyZGFlNDU2YmJiZTUwZDBmYTIxMjA0NDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTk1YmVlMzNlYmJlNGZiZDk1MmJkZjA3ZTJiZTEyZWMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzE5NWJlZTMzZWJiZTRmYmQ5NTJiZGYwN2UyYmUxMmVjIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBaYXJhaWNoaWNvIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hNmNmODk4ZTJkYWU0NTZiYmJlNTBkMGZhMjEyMDQ0OS5zZXRDb250ZW50KGh0bWxfMTk1YmVlMzNlYmJlNGZiZDk1MmJkZjA3ZTJiZTEyZWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yZjAyYWVmY2UzZWM0NGJkOWFjZmMwYjZhNWFkZWVkOS5iaW5kUG9wdXAocG9wdXBfYTZjZjg5OGUyZGFlNDU2YmJiZTUwZDBmYTIxMjA0NDkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82MjI2Y2Q0NmRiY2U0NzViYTBhMGU5ZmRkNzU1ZmNkNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk3NTIyOTMsLTEuMDU3ODM5NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzVjOGNlM2I1OTI3YzRkZWM5MWUxMGVlYzQ3MzZiNWVjID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzYyMjZjZDQ2ZGJjZTQ3NWJhMGEwZTlmZGQ3NTVmY2Q2LnNldEljb24oaWNvbl81YzhjZTNiNTkyN2M0ZGVjOTFlMTBlZWM0NzM2YjVlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UxOTgxNWVhZTNmMjRkM2M4MDI3NTNlYWY2MDUzYjZlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBjODU0OWRhM2JlODQ2NzU4MjRkY2Q0OGY0ZjRjNzJhID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8wYzg1NDlkYTNiZTg0Njc1ODI0ZGNkNDhmNGY0YzcyYSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgY2FsbGUgQmFuZG8gZGUgbGEgSHVlcnRhIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMTk4MTVlYWUzZjI0ZDNjODAyNzUzZWFmNjA1M2I2ZS5zZXRDb250ZW50KGh0bWxfMGM4NTQ5ZGEzYmU4NDY3NTgyNGRjZDQ4ZjRmNGM3MmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82MjI2Y2Q0NmRiY2U0NzViYTBhMGU5ZmRkNzU1ZmNkNi5iaW5kUG9wdXAocG9wdXBfZTE5ODE1ZWFlM2YyNGQzYzgwMjc1M2VhZjYwNTNiNmUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83YWM0ZDIwZmY2ZDU0ZDJmOGM5ZDY5YzIzYTVhNzNlZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4ODUzMTEsLTEuMTMyNTIyN10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzE5YTkxMjFhZGZjNzQ4NDZiOGZkMjBjZmE5YmY4ZWI3ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzdhYzRkMjBmZjZkNTRkMmY4YzlkNjljMjNhNWE3M2VkLnNldEljb24oaWNvbl8xOWE5MTIxYWRmYzc0ODQ2YjhmZDIwY2ZhOWJmOGViNyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzczMDg0NjUxYjI2MjRiZmY5ZWQyYTI2NTBiNzE5OTgxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdmZTZlNjcyMzQ5OTQyOWY5ZjVjMzFmZjQ4ZTg0NzE3ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF83ZmU2ZTY3MjM0OTk0MjlmOWY1YzMxZmY0OGU4NDcxNyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgY2FsbGUgQWxtdWRlbmEgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzczMDg0NjUxYjI2MjRiZmY5ZWQyYTI2NTBiNzE5OTgxLnNldENvbnRlbnQoaHRtbF83ZmU2ZTY3MjM0OTk0MjlmOWY1YzMxZmY0OGU4NDcxNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzdhYzRkMjBmZjZkNTRkMmY4YzlkNjljMjNhNWE3M2VkLmJpbmRQb3B1cChwb3B1cF83MzA4NDY1MWIyNjI0YmZmOWVkMmEyNjUwYjcxOTk4MSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzA2NDBjY2M0ZjUzNzQ4YWZhYTQzNmNlZTNjMGI1YWFjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguMDQwNDYyNiwtMS4xMDAzMDQzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZTgwMmEwNmJlOGI5NDdiZTlmMTZmNjhjYzZjNThhZDggPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMDY0MGNjYzRmNTM3NDhhZmFhNDM2Y2VlM2MwYjVhYWMuc2V0SWNvbihpY29uX2U4MDJhMDZiZThiOTQ3YmU5ZjE2ZjY4Y2M2YzU4YWQ4KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTI3ZmQ1MDIxMjQ4NGU5ZjhhYTllMjE1M2IyMThlNmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2NkN2VlOGIzM2QwNDFjOTg3M2MyM2Y4NzhjYjFmMzMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2NjZDdlZThiMzNkMDQxYzk4NzNjMjNmODc4Y2IxZjMzIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBTaWVycmEgRXNwdW5hIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMjdmZDUwMjEyNDg0ZTlmOGFhOWUyMTUzYjIxOGU2ZS5zZXRDb250ZW50KGh0bWxfY2NkN2VlOGIzM2QwNDFjOTg3M2MyM2Y4NzhjYjFmMzMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wNjQwY2NjNGY1Mzc0OGFmYWE0MzZjZWUzYzBiNWFhYy5iaW5kUG9wdXAocG9wdXBfZTI3ZmQ1MDIxMjQ4NGU5ZjhhYTllMjE1M2IyMThlNmUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83MzEwYzFkMGI1NGM0NTI3OTA4ZDllMzk3OTEyNzkzOCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjAxOTcxNjksLTEuMDczNjg0NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzFlZjkxNjcwMWZiNzQ4NzBhMmQ5Zjk2MTUyMmZjYTMzID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzczMTBjMWQwYjU0YzQ1Mjc5MDhkOWUzOTc5MTI3OTM4LnNldEljb24oaWNvbl8xZWY5MTY3MDFmYjc0ODcwYTJkOWY5NjE1MjJmY2EzMyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVjYjU2ZjIxMDI0ZTQ5ODBiZWE1Yjk2OWFiYzRjNmIwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVhNjA0ZGI2M2MzMDQ4MTk5MTE3MWI3NzY1MWYxMTY4ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF81YTYwNGRiNjNjMzA0ODE5OTExNzFiNzc2NTFmMTE2OCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FtaW5vIGRlIENhYmVjaWNvcyAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWNiNTZmMjEwMjRlNDk4MGJlYTViOTY5YWJjNGM2YjAuc2V0Q29udGVudChodG1sXzVhNjA0ZGI2M2MzMDQ4MTk5MTE3MWI3NzY1MWYxMTY4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNzMxMGMxZDBiNTRjNDUyNzkwOGQ5ZTM5NzkxMjc5MzguYmluZFBvcHVwKHBvcHVwXzVjYjU2ZjIxMDI0ZTQ5ODBiZWE1Yjk2OWFiYzRjNmIwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMWU4MzdlMGM5NGJkNGRiZTkyZDM2NjRjODQ2NDFmNTggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODY0MDgyLC0xLjEzMTY5MjNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl81MTQ1YTdkZDA1MTM0MTVlODVmMzY0NGZmNjMwNjA1MyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8xZTgzN2UwYzk0YmQ0ZGJlOTJkMzY2NGM4NDY0MWY1OC5zZXRJY29uKGljb25fNTE0NWE3ZGQwNTEzNDE1ZTg1ZjM2NDRmZjYzMDYwNTMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82OTJlZmFiMDQ4MjA0MzQ3YWQxMzhhODlkZjcxYjBjNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85NjNhM2IyMzM0NDY0NWYxYTBhMWRiYjRhZGI5OTc4ZiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfOTYzYTNiMjMzNDQ2NDVmMWEwYTFkYmI0YWRiOTk3OGYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIEFjdG9yIEZlcm5hbmRvIERpYXogZGUgTWVuZG96YSAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjkyZWZhYjA0ODIwNDM0N2FkMTM4YTg5ZGY3MWIwYzcuc2V0Q29udGVudChodG1sXzk2M2EzYjIzMzQ0NjQ1ZjFhMGExZGJiNGFkYjk5NzhmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMWU4MzdlMGM5NGJkNGRiZTkyZDM2NjRjODQ2NDFmNTguYmluZFBvcHVwKHBvcHVwXzY5MmVmYWIwNDgyMDQzNDdhZDEzOGE4OWRmNzFiMGM3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDczYWVjYTA0ZjhhNDE4ZTg5NzU5ZWE2MDcxNGI1ZTQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODczNDA5LC0xLjEzMDIzMjhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9iYzQyZTk5ZTYwOGU0MmE2OGNlNDVjZjE1MGIwYjA4MSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9kNzNhZWNhMDRmOGE0MThlODk3NTllYTYwNzE0YjVlNC5zZXRJY29uKGljb25fYmM0MmU5OWU2MDhlNDJhNjhjZTQ1Y2YxNTBiMGIwODEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83MTMzODVjOGU2ZTQ0YzY0ODEyOGFlMGU5NDVmMTIzYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hYWU2NzQxYjM3NzM0OTc1OGEwMmU2ODZkMDdjOWFmMCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYWFlNjc0MWIzNzczNDk3NThhMDJlNjg2ZDA3YzlhZjAiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIEVjaGVnYXJheSAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzEzMzg1YzhlNmU0NGM2NDgxMjhhZTBlOTQ1ZjEyM2Euc2V0Q29udGVudChodG1sX2FhZTY3NDFiMzc3MzQ5NzU4YTAyZTY4NmQwN2M5YWYwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZDczYWVjYTA0ZjhhNDE4ZTg5NzU5ZWE2MDcxNGI1ZTQuYmluZFBvcHVwKHBvcHVwXzcxMzM4NWM4ZTZlNDRjNjQ4MTI4YWUwZTk0NWYxMjNhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYWZlMDY3NjI0MTNmNGQxZjk5YzI0NjdmMjA2NmJhMjUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODcyOTQ1LC0xLjEzMTAxODhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl82ZGYwM2M3NTAyNmQ0YTYzYjIzMWIxMjdlNDBkOWI3NyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9hZmUwNjc2MjQxM2Y0ZDFmOTljMjQ2N2YyMDY2YmEyNS5zZXRJY29uKGljb25fNmRmMDNjNzUwMjZkNGE2M2IyMzFiMTI3ZTQwZDliNzcpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kZGQ3MDdiY2Y5MTg0ZmQ3ODQyZDlhNWIwM2M0ODdlNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xYjExZWJkNmMyMjA0NzlhYjJkMWRjZmMzYzM1OTRhZiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMWIxMWViZDZjMjIwNDc5YWIyZDFkY2ZjM2MzNTk0YWYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIEFuZ2VsIEd1aXJhbyAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGRkNzA3YmNmOTE4NGZkNzg0MmQ5YTViMDNjNDg3ZTQuc2V0Q29udGVudChodG1sXzFiMTFlYmQ2YzIyMDQ3OWFiMmQxZGNmYzNjMzU5NGFmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYWZlMDY3NjI0MTNmNGQxZjk5YzI0NjdmMjA2NmJhMjUuYmluZFBvcHVwKHBvcHVwX2RkZDcwN2JjZjkxODRmZDc4NDJkOWE1YjAzYzQ4N2U0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfY2JlODY0MGI0YjFmNGI2OGJiNGU2MWZhZmJkN2E5MmYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOC4wMTUwODE4LC0xLjEyMjMwNDNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8yNzE2Yjk4MTcwYTU0MGIzYmViOTg0MjRjN2E1ODFjYiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9jYmU4NjQwYjRiMWY0YjY4YmI0ZTYxZmFmYmQ3YTkyZi5zZXRJY29uKGljb25fMjcxNmI5ODE3MGE1NDBiM2JlYjk4NDI0YzdhNTgxY2IpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80Njk3ZGZlMjM2OGY0MjRjODIwNjA5ZjliOGFkNmU3ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wY2M0NzdkYzA5NmQ0NmQzYTBmOTNkYmI4OTBjMTU2MiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMGNjNDc3ZGMwOTZkNDZkM2EwZjkzZGJiODkwYzE1NjIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIFJpY2FyZG8gQ29kb3JuaXUgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ2OTdkZmUyMzY4ZjQyNGM4MjA2MDlmOWI4YWQ2ZTdkLnNldENvbnRlbnQoaHRtbF8wY2M0NzdkYzA5NmQ0NmQzYTBmOTNkYmI4OTBjMTU2Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2NiZTg2NDBiNGIxZjRiNjhiYjRlNjFmYWZiZDdhOTJmLmJpbmRQb3B1cChwb3B1cF80Njk3ZGZlMjM2OGY0MjRjODIwNjA5ZjliOGFkNmU3ZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzU2YzZjZmQ4MjBjZTQ1OTk4M2IyZjIyOTNlMGYzNTdhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTkzNjI1NCwtMS4xMzg1MDcxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNGQzZTcwNDg1MGFlNGZhYzhkNDliNmYyNDZhMzRkYjUgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNTZjNmNmZDgyMGNlNDU5OTgzYjJmMjI5M2UwZjM1N2Euc2V0SWNvbihpY29uXzRkM2U3MDQ4NTBhZTRmYWM4ZDQ5YjZmMjQ2YTM0ZGI1KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODY4OTdhNTNiOTg1NDE0OWJiYjVlZTM4YTc4MjJlN2MgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWNjN2MxOWEzOTYyNGRmN2JkNWM3MmQwMDk0MWQyZTkgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzFjYzdjMTlhMzk2MjRkZjdiZDVjNzJkMDA5NDFkMmU5IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBEYWxpYXMgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg2ODk3YTUzYjk4NTQxNDliYmI1ZWUzOGE3ODIyZTdjLnNldENvbnRlbnQoaHRtbF8xY2M3YzE5YTM5NjI0ZGY3YmQ1YzcyZDAwOTQxZDJlOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzU2YzZjZmQ4MjBjZTQ1OTk4M2IyZjIyOTNlMGYzNTdhLmJpbmRQb3B1cChwb3B1cF84Njg5N2E1M2I5ODU0MTQ5YmJiNWVlMzhhNzgyMmU3Yyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2M4MzVhMTQ3YjRhZjRhZmI4YTk0OGY4MjFjZTNjZjFhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTk0NjU3NywtMS4xNDAyMjc3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNjQ2NWZlZmY1NTA4NDliMDkzNzM4NzBmZGZhZmFjMmEgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYzgzNWExNDdiNGFmNGFmYjhhOTQ4ZjgyMWNlM2NmMWEuc2V0SWNvbihpY29uXzY0NjVmZWZmNTUwODQ5YjA5MzczODcwZmRmYWZhYzJhKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTk2N2M3ZWQyOWIyNGY4NjhlNDNjMDhmNmIxMDQ4YTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWM5NzBlN2IyYzEyNDQwM2IwNTczN2U5Yzc2MDZjNDkgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzVjOTcwZTdiMmMxMjQ0MDNiMDU3MzdlOWM3NjA2YzQ5IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBNb25jYXlvIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xOTY3YzdlZDI5YjI0Zjg2OGU0M2MwOGY2YjEwNDhhNy5zZXRDb250ZW50KGh0bWxfNWM5NzBlN2IyYzEyNDQwM2IwNTczN2U5Yzc2MDZjNDkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jODM1YTE0N2I0YWY0YWZiOGE5NDhmODIxY2UzY2YxYS5iaW5kUG9wdXAocG9wdXBfMTk2N2M3ZWQyOWIyNGY4NjhlNDNjMDhmNmIxMDQ4YTcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zMmY0YTY1ODZmYjM0Y2VlYmVhNjFjMTk1M2M2OWViOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk5MDc3ODYsLTEuMTM0MDg1N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzc2MmI3OGNmNWU3NDQ4MWNiNmNmMjJmYTA0NTI0MGM1ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzMyZjRhNjU4NmZiMzRjZWViZWE2MWMxOTUzYzY5ZWI5LnNldEljb24oaWNvbl83NjJiNzhjZjVlNzQ0ODFjYjZjZjIyZmEwNDUyNDBjNSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAwZDBmMGYwM2ZlNTQwNTg4YzhhNGRlMjY3Yjc0ZTgwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzllYWNlMGVjNmE2ODQ5Y2FiNzI5MDQ0MzZiZDk2MDBiID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF85ZWFjZTBlYzZhNjg0OWNhYjcyOTA0NDM2YmQ5NjAwYiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgUGxhemEgVmlyZ2VuIGRlIGxhIEVzcGVyYW56YSAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDBkMGYwZjAzZmU1NDA1ODhjOGE0ZGUyNjdiNzRlODAuc2V0Q29udGVudChodG1sXzllYWNlMGVjNmE2ODQ5Y2FiNzI5MDQ0MzZiZDk2MDBiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzJmNGE2NTg2ZmIzNGNlZWJlYTYxYzE5NTNjNjllYjkuYmluZFBvcHVwKHBvcHVwXzAwZDBmMGYwM2ZlNTQwNTg4YzhhNGRlMjY3Yjc0ZTgwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMzg5YzQ3ZTcxMGRkNGJhNmI5OThlZGQ2NGQzZjI4ZDYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45OTE5OTU1LC0xLjEzODAwNjhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl82ZWFlMDhkOTVhMmY0NjM1YjMzM2Q2ZTcwYTg3YzQ0MyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8zODljNDdlNzEwZGQ0YmE2Yjk5OGVkZDY0ZDNmMjhkNi5zZXRJY29uKGljb25fNmVhZTA4ZDk1YTJmNDYzNWIzMzNkNmU3MGE4N2M0NDMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80YTUzNDg4MTFkMjk0MDQxYjY0MjczZGU4NWM1Y2UzOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNTE2ZTc1ZTYwODY0ODI5YTllNmFjNzVmYjk1MWY4YSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMzUxNmU3NWU2MDg2NDgyOWE5ZTZhYzc1ZmI5NTFmOGEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIEplcm9uaW1vIEd1aWphcnJvIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80YTUzNDg4MTFkMjk0MDQxYjY0MjczZGU4NWM1Y2UzOC5zZXRDb250ZW50KGh0bWxfMzUxNmU3NWU2MDg2NDgyOWE5ZTZhYzc1ZmI5NTFmOGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zODljNDdlNzEwZGQ0YmE2Yjk5OGVkZDY0ZDNmMjhkNi5iaW5kUG9wdXAocG9wdXBfNGE1MzQ4ODExZDI5NDA0MWI2NDI3M2RlODVjNWNlMzgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83ZDMyNjEwYzIyZGQ0NGUzYjc1MjYzN2I3Yzc1MmE0MiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljc3NDY2NCwtMC44NjgwNzQzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYTk0YTUyNDhkZWUxNDllNTlkNjJiNWIxOGQ3N2NjMTkgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfN2QzMjYxMGMyMmRkNDRlM2I3NTI2MzdiN2M3NTJhNDIuc2V0SWNvbihpY29uX2E5NGE1MjQ4ZGVlMTQ5ZTU5ZDYyYjViMThkNzdjYzE5KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmYxYmQ0MmUzMTIyNGYwMjliNjNmYTNjOWM4NGRjNWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDE5YTc5OGY4Yzc4NGUwNmJiZGY1YzU0MTdkZmFhZDkgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2QxOWE3OThmOGM3ODRlMDZiYmRmNWM1NDE3ZGZhYWQ5IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBBYmRlcnJhbWFuIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZjFiZDQyZTMxMjI0ZjAyOWI2M2ZhM2M5Yzg0ZGM1YS5zZXRDb250ZW50KGh0bWxfZDE5YTc5OGY4Yzc4NGUwNmJiZGY1YzU0MTdkZmFhZDkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83ZDMyNjEwYzIyZGQ0NGUzYjc1MjYzN2I3Yzc1MmE0Mi5iaW5kUG9wdXAocG9wdXBfMmYxYmQ0MmUzMTIyNGYwMjliNjNmYTNjOWM4NGRjNWEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81Y2I4Yzc4NTQ2MzE0MjJmYmRkYmFkMmE2YTdmM2FkNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjA0NDE0ODEsLTEuMDE4NTE1M10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzgyYWRlNjJhNmVlNDRmZjZhMzJmY2JhMmQ5OWFjODRjID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzVjYjhjNzg1NDYzMTQyMmZiZGRiYWQyYTZhN2YzYWQ2LnNldEljb24oaWNvbl84MmFkZTYyYTZlZTQ0ZmY2YTMyZmNiYTJkOTlhYzg0Yyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZmNDY5NWQzNmQ2MzQ5M2M4MTZhMTg0YTM4MDgyMTUyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM5ZjE1OTlmY2QxNTQ2NDI4YWUyMThiODMyZGFkNDEwID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8zOWYxNTk5ZmNkMTU0NjQyOGFlMjE4YjgzMmRhZDQxMCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgQ29uc3RpdHVjaW9uIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZjQ2OTVkMzZkNjM0OTNjODE2YTE4NGEzODA4MjE1Mi5zZXRDb250ZW50KGh0bWxfMzlmMTU5OWZjZDE1NDY0MjhhZTIxOGI4MzJkYWQ0MTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81Y2I4Yzc4NTQ2MzE0MjJmYmRkYmFkMmE2YTdmM2FkNi5iaW5kUG9wdXAocG9wdXBfZmY0Njk1ZDM2ZDYzNDkzYzgxNmExODRhMzgwODIxNTIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80NGQzODc3ZThkZWY0NWZhOWNjNWZkMjZmY2RkNmQ4NiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4NjExNiwtMS4xMzQyOTQxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fM2FiMTk2YmMxYTA1NDJmN2E2MTgxNGQ5MGZiYmM3NzIgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNDRkMzg3N2U4ZGVmNDVmYTljYzVmZDI2ZmNkZDZkODYuc2V0SWNvbihpY29uXzNhYjE5NmJjMWEwNTQyZjdhNjE4MTRkOTBmYmJjNzcyKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDc1YmJlMTg1ODY2NGNlZmJkYzQ3MWRjMTAxOGVhZmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzQ2MzdjYWNkZDBiNDEwYWJiZjc3NzlkZjhkZjNlYWUgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzM0NjM3Y2FjZGQwYjQxMGFiYmY3Nzc5ZGY4ZGYzZWFlIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDdWVzdGEgZGUgbGEgTWFnZGFsZW5hIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NzViYmUxODU4NjY0Y2VmYmRjNDcxZGMxMDE4ZWFmYS5zZXRDb250ZW50KGh0bWxfMzQ2MzdjYWNkZDBiNDEwYWJiZjc3NzlkZjhkZjNlYWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80NGQzODc3ZThkZWY0NWZhOWNjNWZkMjZmY2RkNmQ4Ni5iaW5kUG9wdXAocG9wdXBfNDc1YmJlMTg1ODY2NGNlZmJkYzQ3MWRjMTAxOGVhZmEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIG11bHRpX3BvbHlfbGluZV9iYjkwODgwNzQ5ODc0ZjE1ODhjMjBkNjg0YmM4ZThjYSA9IEwubXVsdGlQb2x5bGluZSgKICAgICAgICAgICAgICAgICAgICBbW1szOC4wNTMzOTc3LCAtMS42NjA4ODg3XSwgWzM3Ljc3NDY2NCwgLTAuODY4MDc0M11dLCBbWzM3Ljc3NDY2NCwgLTAuODY4MDc0M10sIFszOC4wNDQxNDgxLCAtMS4wMTg1MTUzXV0sIFtbMzguMDQ0MTQ4MSwgLTEuMDE4NTE1M10sIFszOC4wNTMzOTc3LCAtMS42NjA4ODg3XV1dLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ6IDUsCiAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmLmFkZExheWVyKG11bHRpX3BvbHlfbGluZV9iYjkwODgwNzQ5ODc0ZjE1ODhjMjBkNjg0YmM4ZThjYSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U2NzEzMWY3YjA2YTQ5NDBhOTFmMzUyNGQ5ZGQ2ZDk4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZhNTYzMTNhOWFkZTQ5MTg5NzA0ZDQ3NTZkZTY0MGM0ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9mYTU2MzEzYTlhZGU0OTE4OTcwNGQ0NzU2ZGU2NDBjNCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgWm9uYSAxLTItMzwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNjcxMzFmN2IwNmE0OTQwYTkxZjM1MjRkOWRkNmQ5OC5zZXRDb250ZW50KGh0bWxfZmE1NjMxM2E5YWRlNDkxODk3MDRkNDc1NmRlNjQwYzQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG11bHRpX3BvbHlfbGluZV9iYjkwODgwNzQ5ODc0ZjE1ODhjMjBkNjg0YmM4ZThjYS5iaW5kUG9wdXAocG9wdXBfZTY3MTMxZjdiMDZhNDk0MGE5MWYzNTI0ZDlkZDZkOTgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kYWFkNGVlNjNiZmQ0MDNhYTZmY2MzZGFlZDMyZjExZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4MzYwMzMsLTEuMTc3MzczNF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2JiZmVhOTIzM2UwMjQwZWQ4YTE5MmM3ZDZmN2Q3ZjYyID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9kYWFkNGVlNjNiZmQ0MDNhYTZmY2MzZGFlZDMyZjExZi5zZXRJY29uKGljb25fYmJmZWE5MjMzZTAyNDBlZDhhMTkyYzdkNmY3ZDdmNjIpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lZGU3ODFmMjc5MzE0Mjg1ODk3NzJmNjU1ZjcwZGM1YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82YzkzN2JlZDcwMjQ0M2I2YmJmOTNkYTFmMWNkNGY3MiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNmM5MzdiZWQ3MDI0NDNiNmJiZjkzZGExZjFjZDRmNzIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEF2ZW5pZGEgUmlvIFNlZ3VyYSAoWm9uYSA1KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lZGU3ODFmMjc5MzE0Mjg1ODk3NzJmNjU1ZjcwZGM1Yy5zZXRDb250ZW50KGh0bWxfNmM5MzdiZWQ3MDI0NDNiNmJiZjkzZGExZjFjZDRmNzIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kYWFkNGVlNjNiZmQ0MDNhYTZmY2MzZGFlZDMyZjExZi5iaW5kUG9wdXAocG9wdXBfZWRlNzgxZjI3OTMxNDI4NTg5NzcyZjY1NWY3MGRjNWMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xYmQ1NjVjMjQyMTc0MThlOGQ1ZjJmMGI2ODY2ZWFjNCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjYxOTYzNzQsLTAuODgzNDYxMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzNmYmIyMTBmNjk2MzQ0Zjc5NmFiMTliZmUwNjgwMjFmID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8xYmQ1NjVjMjQyMTc0MThlOGQ1ZjJmMGI2ODY2ZWFjNC5zZXRJY29uKGljb25fM2ZiYjIxMGY2OTYzNDRmNzk2YWIxOWJmZTA2ODAyMWYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ZGQ0NzdlYjdkNGY0MDQxYWFiNDhhYjYyZGE5YTJiMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jNjJjMmQ3NjM2YmE0OTBkOWY1OTY3ZjkxY2IxM2Y3NCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYzYyYzJkNzYzNmJhNDkwZDlmNTk2N2Y5MWNiMTNmNzQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFBhc2VvIE1hcnF1ZXMgZGUgQ29ydmVyYSAoWm9uYSA1KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ZGQ0NzdlYjdkNGY0MDQxYWFiNDhhYjYyZGE5YTJiMi5zZXRDb250ZW50KGh0bWxfYzYyYzJkNzYzNmJhNDkwZDlmNTk2N2Y5MWNiMTNmNzQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xYmQ1NjVjMjQyMTc0MThlOGQ1ZjJmMGI2ODY2ZWFjNC5iaW5kUG9wdXAocG9wdXBfN2RkNDc3ZWI3ZDRmNDA0MWFhYjQ4YWI2MmRhOWEyYjIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83ZTZhYzVjODcxMWQ0NDRhOWY4MzI0NTM3ZjYyYzc1MiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4MTM5MzcsLTEuMTMwNjUwMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2I3NjUyNmFiNjZiZTQ3NWJiZWRiNjVhOTNkMmRmYTQwID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl83ZTZhYzVjODcxMWQ0NDRhOWY4MzI0NTM3ZjYyYzc1Mi5zZXRJY29uKGljb25fYjc2NTI2YWI2NmJlNDc1YmJlZGI2NWE5M2QyZGZhNDApOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81Y2Q3MmM2MzJhM2M0ODA2OTdkYjYzMzA5ZWEyZThiNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iMGEyZTUyMjUxZjg0ZmMwYTM2NTNhODUxN2JiYTZmOSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYjBhMmU1MjI1MWY4NGZjMGEzNjUzYTg1MTdiYmE2ZjkiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIEp1YW4gQW50b25pbyBIZXJuYW5kZXogZGVsIEFndWlsYSAoWm9uYSA1KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81Y2Q3MmM2MzJhM2M0ODA2OTdkYjYzMzA5ZWEyZThiNS5zZXRDb250ZW50KGh0bWxfYjBhMmU1MjI1MWY4NGZjMGEzNjUzYTg1MTdiYmE2ZjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83ZTZhYzVjODcxMWQ0NDRhOWY4MzI0NTM3ZjYyYzc1Mi5iaW5kUG9wdXAocG9wdXBfNWNkNzJjNjMyYTNjNDgwNjk3ZGI2MzMwOWVhMmU4YjUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hMDNkMmVlNmYyMDA0ZjA2OTVkZTkzYTA5ZGJiOWFkYSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk3NTA0MzMsLTEuMTMwMDQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYzkwMDQ1NDgwYWUyNGI4YmI5Y2E1MmU3NjZjNDg0MTkgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2EwM2QyZWU2ZjIwMDRmMDY5NWRlOTNhMDlkYmI5YWRhLnNldEljb24oaWNvbl9jOTAwNDU0ODBhZTI0YjhiYjljYTUyZTc2NmM0ODQxOSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U3ZjA2MDM2ZGIxYTQ5ZjY4ZmMwYjYyYWU2Zjk4YTFmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdjY2ZhZmRlNDEwMjRkMDhiMWQwMTYzYzBkMjNlNzgxID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF83Y2NmYWZkZTQxMDI0ZDA4YjFkMDE2M2MwZDIzZTc4MSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgSW5kdXN0cmlhIChab25hIDUpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U3ZjA2MDM2ZGIxYTQ5ZjY4ZmMwYjYyYWU2Zjk4YTFmLnNldENvbnRlbnQoaHRtbF83Y2NmYWZkZTQxMDI0ZDA4YjFkMDE2M2MwZDIzZTc4MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2EwM2QyZWU2ZjIwMDRmMDY5NWRlOTNhMDlkYmI5YWRhLmJpbmRQb3B1cChwb3B1cF9lN2YwNjAzNmRiMWE0OWY2OGZjMGI2MmFlNmY5OGExZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzMyZjhkNGU0MGMxNjQyZmRiN2ExZTRlNDdlOWIxMTc1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTgxMzMxMSwtMS4xMjg4MjE5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYTVkMmE0ZDIwZDk5NGNiZjk5OTFkZWJmNzU3Nzc1NWIgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzMyZjhkNGU0MGMxNjQyZmRiN2ExZTRlNDdlOWIxMTc1LnNldEljb24oaWNvbl9hNWQyYTRkMjBkOTk0Y2JmOTk5MWRlYmY3NTc3NzU1Yik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M2MTA5NjQ0ODA1YjRhYmU4YmU0MzE2MzM0NTNkNzkyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZlMDA5MzM1YjQyZTRlYTdhN2E5NTZmMWY2MzMyYzFkID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9mZTAwOTMzNWI0MmU0ZWE3YTdhOTU2ZjFmNjMzMmMxZCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgQW1icm9zaW8gU2FsYXphciAoWm9uYSA1KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jNjEwOTY0NDgwNWI0YWJlOGJlNDMxNjMzNDUzZDc5Mi5zZXRDb250ZW50KGh0bWxfZmUwMDkzMzViNDJlNGVhN2E3YTk1NmYxZjYzMzJjMWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zMmY4ZDRlNDBjMTY0MmZkYjdhMWU0ZTQ3ZTliMTE3NS5iaW5kUG9wdXAocG9wdXBfYzYxMDk2NDQ4MDViNGFiZThiZTQzMTYzMzQ1M2Q3OTIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yZTBhMWRlODQ3MmM0NTQxOWZlYWI0M2U5ODNiZTEzMyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4MDg0MzIsLTEuMTI4NTk5Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2Q3MDU4M2JmYmI4MTRmNWY4Yzk1YTk1ODZiYjM4NzgyID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8yZTBhMWRlODQ3MmM0NTQxOWZlYWI0M2U5ODNiZTEzMy5zZXRJY29uKGljb25fZDcwNTgzYmZiYjgxNGY1ZjhjOTVhOTU4NmJiMzg3ODIpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84YmI4YmEzYmQxYzg0NjZjYjQ3N2U5YWJkYTE1NGQ5MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNTRkMGUxM2RmY2I0MmUyYTdjOWI2Yjg5ZDIzZmRkMSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMzU0ZDBlMTNkZmNiNDJlMmE3YzliNmI4OWQyM2ZkZDEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIGRlIFJpY2FyZG8gR2lsIChab25hIDUpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhiYjhiYTNiZDFjODQ2NmNiNDc3ZTlhYmRhMTU0ZDkzLnNldENvbnRlbnQoaHRtbF8zNTRkMGUxM2RmY2I0MmUyYTdjOWI2Yjg5ZDIzZmRkMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzJlMGExZGU4NDcyYzQ1NDE5ZmVhYjQzZTk4M2JlMTMzLmJpbmRQb3B1cChwb3B1cF84YmI4YmEzYmQxYzg0NjZjYjQ3N2U5YWJkYTE1NGQ5Myk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzQxMGVlZjRjMDVjZDRiY2FiZjY4MGYzMzQ1MTM4MTk3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTgwNDEyNiwtMS4xMjk0MzE4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fODU4MjgzZTQwNWI4NDBiM2E3NGNkNjVjYWZhYWQ2NmQgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzQxMGVlZjRjMDVjZDRiY2FiZjY4MGYzMzQ1MTM4MTk3LnNldEljb24oaWNvbl84NTgyODNlNDA1Yjg0MGIzYTc0Y2Q2NWNhZmFhZDY2ZCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UwYzlmOTM4OWVlYTQxMzZhYjBlNzZhZjlkM2E1NWMxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U1M2IwNDc0MGEzMTRkOTg5Yzg4YWMwMGE1NGZmZDQ3ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9lNTNiMDQ3NDBhMzE0ZDk4OWM4OGFjMDBhNTRmZmQ0NyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgUHJvY2xhbWFjaW9uIChab25hIDUpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2UwYzlmOTM4OWVlYTQxMzZhYjBlNzZhZjlkM2E1NWMxLnNldENvbnRlbnQoaHRtbF9lNTNiMDQ3NDBhMzE0ZDk4OWM4OGFjMDBhNTRmZmQ0Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQxMGVlZjRjMDVjZDRiY2FiZjY4MGYzMzQ1MTM4MTk3LmJpbmRQb3B1cChwb3B1cF9lMGM5ZjkzODllZWE0MTM2YWIwZTc2YWY5ZDNhNTVjMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzI3ZWJjNjg1ZGNkMjQzZTNiODQyNjViYjA3MTgyZDVmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTc3MDk5MiwtMS4xMjc5NjU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZDdmZGI2ZmM5OWJmNDQzYWJlYTcyMjdhNTM0NGJiNDkgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzI3ZWJjNjg1ZGNkMjQzZTNiODQyNjViYjA3MTgyZDVmLnNldEljb24oaWNvbl9kN2ZkYjZmYzk5YmY0NDNhYmVhNzIyN2E1MzQ0YmI0OSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFmZWVmNzNlYWU1NzQxODQ4ZmZkMTAwNWNjZWJjNzIzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFkY2VhNTk5YTc2MjQ3NjVhYTU2MTQ3MTUxYTNkZDFmID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8xZGNlYTU5OWE3NjI0NzY1YWE1NjE0NzE1MWEzZGQxZiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgSnVhbiBMb3BleiBTb21hbG8gKFpvbmEgNSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWZlZWY3M2VhZTU3NDE4NDhmZmQxMDA1Y2NlYmM3MjMuc2V0Q29udGVudChodG1sXzFkY2VhNTk5YTc2MjQ3NjVhYTU2MTQ3MTUxYTNkZDFmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjdlYmM2ODVkY2QyNDNlM2I4NDI2NWJiMDcxODJkNWYuYmluZFBvcHVwKHBvcHVwXzFmZWVmNzNlYWU1NzQxODQ4ZmZkMTAwNWNjZWJjNzIzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMzk2YmJmNThhMjIzNGFjZWFjZjc5NDE0MTYwYmNkMmQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45NzY0NzAyLC0xLjEyNzE2MzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9iZDkwZDMzOTZjYmQ0ZjNhYWYzZjg2YmUzYWViYThiZCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMzk2YmJmNThhMjIzNGFjZWFjZjc5NDE0MTYwYmNkMmQuc2V0SWNvbihpY29uX2JkOTBkMzM5NmNiZDRmM2FhZjNmODZiZTNhZWJhOGJkKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWZjYzM2OGMyN2RhNDE0Mjk3MzdmMDc3NmNjNjdhYzMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODg4YmNlMGZhYWM3NDRhZmI2NDkyN2EzODg4ZDEzNTAgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzg4OGJjZTBmYWFjNzQ0YWZiNjQ5MjdhMzg4OGQxMzUwIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBBcmNpcHJlc3RlIE1hcmlhbm8gQXJvY2EgKFpvbmEgNSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWZjYzM2OGMyN2RhNDE0Mjk3MzdmMDc3NmNjNjdhYzMuc2V0Q29udGVudChodG1sXzg4OGJjZTBmYWFjNzQ0YWZiNjQ5MjdhMzg4OGQxMzUwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzk2YmJmNThhMjIzNGFjZWFjZjc5NDE0MTYwYmNkMmQuYmluZFBvcHVwKHBvcHVwX2FmY2MzNjhjMjdkYTQxNDI5NzM3ZjA3NzZjYzY3YWMzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzYyOTg2MTEyMDAyNDc0NjhmNjRmNDAxY2ZhZDg0NWQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45NzYxNTQ2LC0xLjEyODkxOF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2E4Zjk1MmM1MDU5NTQwZDNhMTRjMzZlMTA3YWJlYjlkID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl83NjI5ODYxMTIwMDI0NzQ2OGY2NGY0MDFjZmFkODQ1ZC5zZXRJY29uKGljb25fYThmOTUyYzUwNTk1NDBkM2ExNGMzNmUxMDdhYmViOWQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NDFmMmJhYzUxOTY0MWVmYTM2NGY1NTM5NWEzMDcwNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83N2RmZDE4ZTAxODI0Y2YyYjdiMjFjMWE2ZDVlMjViZiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNzdkZmQxOGUwMTgyNGNmMmI3YjIxYzFhNmQ1ZTI1YmYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIFJ1aXogSGlkYWxnbyAoWm9uYSA1KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NDFmMmJhYzUxOTY0MWVmYTM2NGY1NTM5NWEzMDcwNy5zZXRDb250ZW50KGh0bWxfNzdkZmQxOGUwMTgyNGNmMmI3YjIxYzFhNmQ1ZTI1YmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83NjI5ODYxMTIwMDI0NzQ2OGY2NGY0MDFjZmFkODQ1ZC5iaW5kUG9wdXAocG9wdXBfNjQxZjJiYWM1MTk2NDFlZmEzNjRmNTUzOTVhMzA3MDcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mNGU1ZTkzZWZlNTc0ZWUxOTdlNmU3MzE1NTZmNTNlMCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk3NzEzMDMsLTEuMTI3NjE3Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzNhYTVkY2ZlYTE2YjQ3ZDlhMTQyZDgxZDMzYjIxYTZiID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9mNGU1ZTkzZWZlNTc0ZWUxOTdlNmU3MzE1NTZmNTNlMC5zZXRJY29uKGljb25fM2FhNWRjZmVhMTZiNDdkOWExNDJkODFkMzNiMjFhNmIpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iZDM0OTA4ZTJkMmI0NTJkYjBhNmVhNjNhMDA3YzlmZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hMTEyODE0NzU2NDg0ZDdkYjRlYzQ5MDZhNzA5NTQwMiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYTExMjgxNDc1NjQ4NGQ3ZGI0ZWM0OTA2YTcwOTU0MDIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIENsZW1lbnRlcyAoWm9uYSA1KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iZDM0OTA4ZTJkMmI0NTJkYjBhNmVhNjNhMDA3YzlmZi5zZXRDb250ZW50KGh0bWxfYTExMjgxNDc1NjQ4NGQ3ZGI0ZWM0OTA2YTcwOTU0MDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mNGU1ZTkzZWZlNTc0ZWUxOTdlNmU3MzE1NTZmNTNlMC5iaW5kUG9wdXAocG9wdXBfYmQzNDkwOGUyZDJiNDUyZGIwYTZlYTYzYTAwN2M5ZmYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kZjg1ODMyZDI3ZTQ0NzhjYjU0ZTlmZGZiNjgyNGQ5YiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjAzNDM4NiwtMS4xMzU1Mzg0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fOTljM2E3ZjY3NzA3NDU5Y2IzNTRkZGVmN2M5YzgyN2YgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2RmODU4MzJkMjdlNDQ3OGNiNTRlOWZkZmI2ODI0ZDliLnNldEljb24oaWNvbl85OWMzYTdmNjc3MDc0NTljYjM1NGRkZWY3YzljODI3Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhmNDRlZDkyMzIzNDQ5OTU4OGY3Njc2MTdlZTY4MzcwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE3NTQwOTlhMThhZDRmMmVhZDRhMmQzYjM5NGRlNTI5ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8xNzU0MDk5YTE4YWQ0ZjJlYWQ0YTJkM2IzOTRkZTUyOSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgQWxtb2hhamFyIChab25hIDUpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhmNDRlZDkyMzIzNDQ5OTU4OGY3Njc2MTdlZTY4MzcwLnNldENvbnRlbnQoaHRtbF8xNzU0MDk5YTE4YWQ0ZjJlYWQ0YTJkM2IzOTRkZTUyOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2RmODU4MzJkMjdlNDQ3OGNiNTRlOWZkZmI2ODI0ZDliLmJpbmRQb3B1cChwb3B1cF84ZjQ0ZWQ5MjMyMzQ0OTk1ODhmNzY3NjE3ZWU2ODM3MCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzI3ZTFmNWQyZTBmMDQxOTU4NzBhNTU5ZWZhMzc0MTgzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTc5NTMyNiwtMS4xMzE5MzczXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMzI2MzE0MzIwZDVlNGI4ZDk4MWE0YWRmNmE4YjdiZDMgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzI3ZTFmNWQyZTBmMDQxOTU4NzBhNTU5ZWZhMzc0MTgzLnNldEljb24oaWNvbl8zMjYzMTQzMjBkNWU0YjhkOTgxYTRhZGY2YThiN2JkMyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRiM2Y3YTFhOWM3NjQwZDBhZWM2MGI0MTEyNzg4MzAyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ExNTIyNTNkZjU4MDQ0MzhiOTk4OGFlOTI5OGIyZDY4ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9hMTUyMjUzZGY1ODA0NDM4Yjk5ODhhZTkyOThiMmQ2OCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGVqb24gQ2FyYXZhY2EgKFpvbmEgNSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGIzZjdhMWE5Yzc2NDBkMGFlYzYwYjQxMTI3ODgzMDIuc2V0Q29udGVudChodG1sX2ExNTIyNTNkZjU4MDQ0MzhiOTk4OGFlOTI5OGIyZDY4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjdlMWY1ZDJlMGYwNDE5NTg3MGE1NTllZmEzNzQxODMuYmluZFBvcHVwKHBvcHVwXzRiM2Y3YTFhOWM3NjQwZDBhZWM2MGI0MTEyNzg4MzAyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzY2YjYwODYwMjBlNGJiZjljODc0Yjk1NDYyZDJhOTEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45NzY4MDMzLC0xLjEzMzM1NjRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl80ODE3NjYwOWU0OTk0ZGZjYjliZjc5OTdkMTI3YzAxZSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNzY2YjYwODYwMjBlNGJiZjljODc0Yjk1NDYyZDJhOTEuc2V0SWNvbihpY29uXzQ4MTc2NjA5ZTQ5OTRkZmNiOWJmNzk5N2QxMjdjMDFlKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGEzMzhhNDRjNzJkNDBhZjlmNTVmNTE2NWY3MmJkMTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWIxNWU0NjkxZWRjNDQxNmI5OGQxNDFkOWNlNTRjNGEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2FiMTVlNDY5MWVkYzQ0MTZiOThkMTQxZDljZTU0YzRhIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBDdWFydGVsIGRlIEFydGlsbGVyaWEgKFpvbmEgNSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGEzMzhhNDRjNzJkNDBhZjlmNTVmNTE2NWY3MmJkMTkuc2V0Q29udGVudChodG1sX2FiMTVlNDY5MWVkYzQ0MTZiOThkMTQxZDljZTU0YzRhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNzY2YjYwODYwMjBlNGJiZjljODc0Yjk1NDYyZDJhOTEuYmluZFBvcHVwKHBvcHVwXzRhMzM4YTQ0YzcyZDQwYWY5ZjU1ZjUxNjVmNzJiZDE5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMGVjOTFhN2ZkNDg3NDY5M2JlZjMxZDI3N2IwN2YwNDcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODA5NzQ0LC0xLjEzMjg4Ml0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2U0NTI4ZTg4YmY5YjRhODRiNTFiNTQ1ZjVmZmY3NjJhID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8wZWM5MWE3ZmQ0ODc0NjkzYmVmMzFkMjc3YjA3ZjA0Ny5zZXRJY29uKGljb25fZTQ1MjhlODhiZjliNGE4NGI1MWI1NDVmNWZmZjc2MmEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wOTlmOTZkMDYxN2U0NmM3ODdhMjRjNTkyZWI4MDhjZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNGZjNzViNWZjMzg0ZTE4OTdjYzUxZDRmYTg4MzY3MiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZTRmYzc1YjVmYzM4NGUxODk3Y2M1MWQ0ZmE4ODM2NzIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIEp1bWlsbGEgKFpvbmEgNSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDk5Zjk2ZDA2MTdlNDZjNzg3YTI0YzU5MmViODA4Y2Yuc2V0Q29udGVudChodG1sX2U0ZmM3NWI1ZmMzODRlMTg5N2NjNTFkNGZhODgzNjcyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMGVjOTFhN2ZkNDg3NDY5M2JlZjMxZDI3N2IwN2YwNDcuYmluZFBvcHVwKHBvcHVwXzA5OWY5NmQwNjE3ZTQ2Yzc4N2EyNGM1OTJlYjgwOGNmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjAzMjM3NWU0NDk3NGY3NmE5ZWE5ZGNlMDNmY2VjNzEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODA0MDE1LC0xLjEzMDQ2OTldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9iMGI0ZTE0NDVjM2M0NDMxOTJiNGMwMTMwODFjMjY0ZSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZjAzMjM3NWU0NDk3NGY3NmE5ZWE5ZGNlMDNmY2VjNzEuc2V0SWNvbihpY29uX2IwYjRlMTQ0NWMzYzQ0MzE5MmI0YzAxMzA4MWMyNjRlKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODFhNWRlOThlOThhNDM4N2E4OTI4ZWZjOTg2NDFlZjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzM5NmU3NjdjN2ViNDEwN2I0NzM5OThlMTdjYWYwZTQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2MzOTZlNzY3YzdlYjQxMDdiNDczOTk4ZTE3Y2FmMGU0IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBBbGFtZWRhIGRlIENvbG9uIChab25hIDUpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgxYTVkZTk4ZTk4YTQzODdhODkyOGVmYzk4NjQxZWY1LnNldENvbnRlbnQoaHRtbF9jMzk2ZTc2N2M3ZWI0MTA3YjQ3Mzk5OGUxN2NhZjBlNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2YwMzIzNzVlNDQ5NzRmNzZhOWVhOWRjZTAzZmNlYzcxLmJpbmRQb3B1cChwb3B1cF84MWE1ZGU5OGU5OGE0Mzg3YTg5MjhlZmM5ODY0MWVmNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzVmYzY0ZDU3MmZkZTQ2ZjY4MmY5NWUxZDExOWNlNjRlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTc4NTc5NiwtMS4xMzMxNTUyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMDJlYTFhN2E1ZjlkNGFiZmIyYWFkMDI1NDIxYTg5MWQgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzVmYzY0ZDU3MmZkZTQ2ZjY4MmY5NWUxZDExOWNlNjRlLnNldEljb24oaWNvbl8wMmVhMWE3YTVmOWQ0YWJmYjJhYWQwMjU0MjFhODkxZCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkzOWEyOTIyMGY1MTQ3NjM5OGI0MjI2N2ZiY2RiNTQyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RiOWUyMWY1MmE1NDQ0ZTZhYjJkZGFmYjM0YjY0YmE1ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9kYjllMjFmNTJhNTQ0NGU2YWIyZGRhZmIzNGI2NGJhNSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgQ2FydGFnZW5hIChab25hIDUpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkzOWEyOTIyMGY1MTQ3NjM5OGI0MjI2N2ZiY2RiNTQyLnNldENvbnRlbnQoaHRtbF9kYjllMjFmNTJhNTQ0NGU2YWIyZGRhZmIzNGI2NGJhNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzVmYzY0ZDU3MmZkZTQ2ZjY4MmY5NWUxZDExOWNlNjRlLmJpbmRQb3B1cChwb3B1cF85MzlhMjkyMjBmNTE0NzYzOThiNDIyNjdmYmNkYjU0Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzhlMWU1NmQ5ZWI1MDQ0Yjk4YzA1NTYxM2QyNGI0ZDI1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTgxNTE5MSwtMS4xMzA5NTE2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZWQ2NzM4ZjY1OGY0NGVkMWE3NjBhMDdiZDU3OTNlYzUgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzhlMWU1NmQ5ZWI1MDQ0Yjk4YzA1NTYxM2QyNGI0ZDI1LnNldEljb24oaWNvbl9lZDY3MzhmNjU4ZjQ0ZWQxYTc2MGEwN2JkNTc5M2VjNSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M1YmUyMTEyYmMyZTQ0MjNiYmQ5MmM3OTg5ZjQ2MWE3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYzODcyM2UyOGQ3NTQxZDhiNjNkNzhkNzZmOThhMThiID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF82Mzg3MjNlMjhkNzU0MWQ4YjYzZDc4ZDc2Zjk4YTE4YiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgUGxhemEgQ2FtYWNob3MgKFpvbmEgNSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzViZTIxMTJiYzJlNDQyM2JiZDkyYzc5ODlmNDYxYTcuc2V0Q29udGVudChodG1sXzYzODcyM2UyOGQ3NTQxZDhiNjNkNzhkNzZmOThhMThiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOGUxZTU2ZDllYjUwNDRiOThjMDU1NjEzZDI0YjRkMjUuYmluZFBvcHVwKHBvcHVwX2M1YmUyMTEyYmMyZTQ0MjNiYmQ5MmM3OTg5ZjQ2MWE3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZTk5ZTY2NGU5YzYyNGZkYjlmMTg2NjlkZmY2MmRkMTYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45NzgxODA1LC0xLjEyOTM5MTldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl84YjE3YmJlYjExNmY0YmM1YTNmMjFjNDcwNzRkNzkzNCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZTk5ZTY2NGU5YzYyNGZkYjlmMTg2NjlkZmY2MmRkMTYuc2V0SWNvbihpY29uXzhiMTdiYmViMTE2ZjRiYzVhM2YyMWM0NzA3NGQ3OTM0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTdjYjc2ODgxMmQ5NDRhZWJmYzMyNDE5ZTRiY2E2MzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDI2NmMxYTdlMGI5NDk5M2E0ZTNmYTExY2EyZTNhNzQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzQyNjZjMWE3ZTBiOTQ5OTNhNGUzZmExMWNhMmUzYTc0IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBOaWNhcmFndWEgKFpvbmEgNSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTdjYjc2ODgxMmQ5NDRhZWJmYzMyNDE5ZTRiY2E2Mzguc2V0Q29udGVudChodG1sXzQyNjZjMWE3ZTBiOTQ5OTNhNGUzZmExMWNhMmUzYTc0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZTk5ZTY2NGU5YzYyNGZkYjlmMTg2NjlkZmY2MmRkMTYuYmluZFBvcHVwKHBvcHVwX2E3Y2I3Njg4MTJkOTQ0YWViZmMzMjQxOWU0YmNhNjM4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNDZjYTM0NDgyNGQ0NDhiMThkOTVlZGNmMTA1YWY2ZTMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45NzgxMTQyLC0xLjEyODIxMjhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl82OTliMDliNTYwYjU0ODI2OWUyODcwZTg4MTc2NzEwYiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNDZjYTM0NDgyNGQ0NDhiMThkOTVlZGNmMTA1YWY2ZTMuc2V0SWNvbihpY29uXzY5OWIwOWI1NjBiNTQ4MjY5ZTI4NzBlODgxNzY3MTBiKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmYzOWNmMmNjNGQ3NGRiMjg5OTUzYzU4ODM0Nzg5Y2IgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWM5ZTAzM2RkYzNlNDcwOWIzZThmOGQyNWJiYzg2M2QgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzljOWUwMzNkZGMzZTQ3MDliM2U4ZjhkMjViYmM4NjNkIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBDYXB1Y2hpbm9zIChab25hIDUpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZmMzljZjJjYzRkNzRkYjI4OTk1M2M1ODgzNDc4OWNiLnNldENvbnRlbnQoaHRtbF85YzllMDMzZGRjM2U0NzA5YjNlOGY4ZDI1YmJjODYzZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQ2Y2EzNDQ4MjRkNDQ4YjE4ZDk1ZWRjZjEwNWFmNmUzLmJpbmRQb3B1cChwb3B1cF82ZjM5Y2YyY2M0ZDc0ZGIyODk5NTNjNTg4MzQ3ODljYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzk0NjhiMWI4NjA5MTQyYTY5ZjQ4NWUzMzEwMmVkNzcwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTc3MjQzMiwtMS4xMzM2MDgzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNmEzYWNhNWI1MzE5NGQ5MmI4YjEzYjQ0MWJiYTM3NzUgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzk0NjhiMWI4NjA5MTQyYTY5ZjQ4NWUzMzEwMmVkNzcwLnNldEljb24oaWNvbl82YTNhY2E1YjUzMTk0ZDkyYjhiMTNiNDQxYmJhMzc3NSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y5YTJlMjZjMjg3YzRmNjI5N2JhNDQ2ODkyYTIyNjQ0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q1NDc1OTZkOThkYjQwZjQ4NmYxODc5MGEyNDdmYjkwID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9kNTQ3NTk2ZDk4ZGI0MGY0ODZmMTg3OTBhMjQ3ZmI5MCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgQWN0b3IgSm9zZSBDcmVzcG8gKFpvbmEgNSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjlhMmUyNmMyODdjNGY2Mjk3YmE0NDY4OTJhMjI2NDQuc2V0Q29udGVudChodG1sX2Q1NDc1OTZkOThkYjQwZjQ4NmYxODc5MGEyNDdmYjkwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOTQ2OGIxYjg2MDkxNDJhNjlmNDg1ZTMzMTAyZWQ3NzAuYmluZFBvcHVwKHBvcHVwX2Y5YTJlMjZjMjg3YzRmNjI5N2JhNDQ2ODkyYTIyNjQ0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZTM3MzQwMmI0OWJjNGQ5NWIyMjEwMDRjOWMzNWU5ZjMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45NzU0OTM3LC0xLjEzMzAwMzVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8yMzEyNjViZWIzMTM0N2YyYWViMmVhYzg5MGRjYTdhMyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZTM3MzQwMmI0OWJjNGQ5NWIyMjEwMDRjOWMzNWU5ZjMuc2V0SWNvbihpY29uXzIzMTI2NWJlYjMxMzQ3ZjJhZWIyZWFjODkwZGNhN2EzKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzk1YTI5NWJmMTFkNGQwN2JkYWVkN2U4MjIyNjA4ZGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzBkODE5YmI4MzUwNGJkZGJmODZlODA4MmU5OTUzYzcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzcwZDgxOWJiODM1MDRiZGRiZjg2ZTgwODJlOTk1M2M3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBBdmVuaWRhIEp1YW4gQW50b25pbyBQZXJlYSAoWm9uYSA1KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zOTVhMjk1YmYxMWQ0ZDA3YmRhZWQ3ZTgyMjI2MDhkZC5zZXRDb250ZW50KGh0bWxfNzBkODE5YmI4MzUwNGJkZGJmODZlODA4MmU5OTUzYzcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lMzczNDAyYjQ5YmM0ZDk1YjIyMTAwNGM5YzM1ZTlmMy5iaW5kUG9wdXAocG9wdXBfMzk1YTI5NWJmMTFkNGQwN2JkYWVkN2U4MjIyNjA4ZGQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yODVmNjMzNTZlNDQ0Mzc2YjhiMDc1OTA4NjA5OTJjNCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4MDQ1MSwtMS4xMzI0MzU3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNmE0NTRmOTBlZmY3NDFmODgyMzQ0YjkwOWM0NzEzMjEgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzI4NWY2MzM1NmU0NDQzNzZiOGIwNzU5MDg2MDk5MmM0LnNldEljb24oaWNvbl82YTQ1NGY5MGVmZjc0MWY4ODIzNDRiOTA5YzQ3MTMyMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM1MjQ4Y2NhYTQ3ZjQ0NThhOGI3YWQ2YjJjNGY1MDE2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E2NzhjNTlmNjE0ZTQ4ZGE5MDdlNTJhMWQwZGViZjdmID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9hNjc4YzU5ZjYxNGU0OGRhOTA3ZTUyYTFkMGRlYmY3ZiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgUm9zYWwgKFpvbmEgNSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzUyNDhjY2FhNDdmNDQ1OGE4YjdhZDZiMmM0ZjUwMTYuc2V0Q29udGVudChodG1sX2E2NzhjNTlmNjE0ZTQ4ZGE5MDdlNTJhMWQwZGViZjdmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjg1ZjYzMzU2ZTQ0NDM3NmI4YjA3NTkwODYwOTkyYzQuYmluZFBvcHVwKHBvcHVwXzM1MjQ4Y2NhYTQ3ZjQ0NThhOGI3YWQ2YjJjNGY1MDE2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMzIzYzk3ZjM5Y2M1NDc5M2JmYTZlZmRkNGFmNDM3MDggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45Nzk3NjYzLC0xLjEzMjQ4NzZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl84ZmM3NzA3ZWY2MTI0ZTUzOWQ5ZDkwNjI2ZjEzZDlmZiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMzIzYzk3ZjM5Y2M1NDc5M2JmYTZlZmRkNGFmNDM3MDguc2V0SWNvbihpY29uXzhmYzc3MDdlZjYxMjRlNTM5ZDlkOTA2MjZmMTNkOWZmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTc0OGEyYWU5YzlhNGQ0NmI4YWQ0NjYzZDdmMDM4MDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmYwNjIyZmU4Y2IxNDczMDk1NWEwYmE5MjA4YTYyM2IgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2ZmMDYyMmZlOGNiMTQ3MzA5NTVhMGJhOTIwOGE2MjNiIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBNYWRyZSBFbGlzZWEgT2xpdmVyIE1vbGluYSAoWm9uYSA1KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85NzQ4YTJhZTljOWE0ZDQ2YjhhZDQ2NjNkN2YwMzgwOS5zZXRDb250ZW50KGh0bWxfZmYwNjIyZmU4Y2IxNDczMDk1NWEwYmE5MjA4YTYyM2IpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zMjNjOTdmMzljYzU0NzkzYmZhNmVmZGQ0YWY0MzcwOC5iaW5kUG9wdXAocG9wdXBfOTc0OGEyYWU5YzlhNGQ0NmI4YWQ0NjYzZDdmMDM4MDkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kYjU4YTc4NDAzZDU0MDIxOTZkNDc4MWU5ZDJlMzMzZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk2NDk5NzgsLTEuMTY3OTExNV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2Y1NzhiMWFmNDJjOTQzODA5YjM0MGI3MWEyMjliZDM0ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9kYjU4YTc4NDAzZDU0MDIxOTZkNDc4MWU5ZDJlMzMzZC5zZXRJY29uKGljb25fZjU3OGIxYWY0MmM5NDM4MDliMzQwYjcxYTIyOWJkMzQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMTliY2IzODBlMTA0YThkYmQ3NTQzMTMxNjI3NzU4OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lYmExNGRiYmJjZjg0Y2U0YWIxODg4YTliZjg3MDM2NCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZWJhMTRkYmJiY2Y4NGNlNGFiMTg4OGE5YmY4NzAzNjQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIENhcm1lbiAoWm9uYSA1KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kMTliY2IzODBlMTA0YThkYmQ3NTQzMTMxNjI3NzU4OC5zZXRDb250ZW50KGh0bWxfZWJhMTRkYmJiY2Y4NGNlNGFiMTg4OGE5YmY4NzAzNjQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kYjU4YTc4NDAzZDU0MDIxOTZkNDc4MWU5ZDJlMzMzZC5iaW5kUG9wdXAocG9wdXBfZDE5YmNiMzgwZTEwNGE4ZGJkNzU0MzEzMTYyNzc1ODgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIG11bHRpX3BvbHlfbGluZV9iMDA1NDk1MjkzMGU0OGRkOWYwYmFmMTEyODkwNzYyYiA9IEwubXVsdGlQb2x5bGluZSgKICAgICAgICAgICAgICAgICAgICBbW1szNy45ODM2MDMzLCAtMS4xNzczNzM0XSwgWzM3Ljk2NDk5NzgsIC0xLjE2NzkxMTVdXSwgW1szNy45NjQ5OTc4LCAtMS4xNjc5MTE1XSwgWzM3LjYxOTYzNzQsIC0wLjg4MzQ2MTJdXSwgW1szNy42MTk2Mzc0LCAtMC44ODM0NjEyXSwgWzM4LjAzNDM4NiwgLTEuMTM1NTM4NF1dLCBbWzM4LjAzNDM4NiwgLTEuMTM1NTM4NF0sIFszNy45ODM2MDMzLCAtMS4xNzczNzM0XV1dLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OiA1LAogICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAxLAogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zi5hZGRMYXllcihtdWx0aV9wb2x5X2xpbmVfYjAwNTQ5NTI5MzBlNDhkZDlmMGJhZjExMjg5MDc2MmIpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MGE3Njc5ZjUwZTE0NjdkYjc3ZWI4ZjZlNzc2MTU0MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ODQxYTUxYjQ4MjQ0Mjk1OWUyMTRkNTM0YTQxZGFhYSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNzg0MWE1MWI0ODI0NDI5NTllMjE0ZDUzNGE0MWRhYWEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFpvbmEgNTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MGE3Njc5ZjUwZTE0NjdkYjc3ZWI4ZjZlNzc2MTU0MC5zZXRDb250ZW50KGh0bWxfNzg0MWE1MWI0ODI0NDI5NTllMjE0ZDUzNGE0MWRhYWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG11bHRpX3BvbHlfbGluZV9iMDA1NDk1MjkzMGU0OGRkOWYwYmFmMTEyODkwNzYyYi5iaW5kUG9wdXAocG9wdXBfOTBhNzY3OWY1MGUxNDY3ZGI3N2ViOGY2ZTc3NjE1NDApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yNDUyNzEzOTNiZDM0ZjQ4OWM0ZWEyYTQ4OTJhNDQ0YiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4NzY5ODcsLTEuMTQxMjkxOV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2ZhY2UyMDliMzNmYjRhMTU5MDc5MmIyNzAwMzg2MTdhID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMjQ1MjcxMzkzYmQzNGY0ODljNGVhMmE0ODkyYTQ0NGIuc2V0SWNvbihpY29uX2ZhY2UyMDliMzNmYjRhMTU5MDc5MmIyNzAwMzg2MTdhKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTYwZjY5MzA5ODI4NDBmYzlkN2M5ZWZkMTg5MDUyYzkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTNkZGI5ODkxMzFiNDRlYWJmYjc1ZmI3NjcyZTkwZGQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2EzZGRiOTg5MTMxYjQ0ZWFiZmI3NWZiNzY3MmU5MGRkIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBkZSBsYSBPbG1hIChab25hIDQpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk2MGY2OTMwOTgyODQwZmM5ZDdjOWVmZDE4OTA1MmM5LnNldENvbnRlbnQoaHRtbF9hM2RkYjk4OTEzMWI0NGVhYmZiNzVmYjc2NzJlOTBkZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzI0NTI3MTM5M2JkMzRmNDg5YzRlYTJhNDg5MmE0NDRiLmJpbmRQb3B1cChwb3B1cF85NjBmNjkzMDk4Mjg0MGZjOWQ3YzllZmQxODkwNTJjOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2RlNzkxOGIwZGRlMTQ4YjI4OTkzOGE0MGJhN2NhOGI2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTg1MTA0OCwtMS4xMzkzMjQ4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMWRmNzVmNDkxN2M0NGMzYTk4YjJlOWMxOTQwY2M2M2UgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9kZTc5MThiMGRkZTE0OGIyODk5MzhhNDBiYTdjYThiNi5zZXRJY29uKGljb25fMWRmNzVmNDkxN2M0NGMzYTk4YjJlOWMxOTQwY2M2M2UpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xN2NhYWVkODlmNDY0YjM2OTI1ZTZhYTk5MzA4ZTA0OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNzk3NjNiZjYxMmM0OGI3OWZlMjUxYWM1ZGFkMDZlOSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYTc5NzYzYmY2MTJjNDhiNzlmZTI1MWFjNWRhZDA2ZTkiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIGRlIGxvcyBCb2xvcyAoWm9uYSA0KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xN2NhYWVkODlmNDY0YjM2OTI1ZTZhYTk5MzA4ZTA0OC5zZXRDb250ZW50KGh0bWxfYTc5NzYzYmY2MTJjNDhiNzlmZTI1MWFjNWRhZDA2ZTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kZTc5MThiMGRkZTE0OGIyODk5MzhhNDBiYTdjYThiNi5iaW5kUG9wdXAocG9wdXBfMTdjYWFlZDg5ZjQ2NGIzNjkyNWU2YWE5OTMwOGUwNDgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85NWQ5MTBlMDJjYmU0NDU1YWJlNjM0ZGM5NmZjNWY1ZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4NTAxNjIsLTEuMTM2MTQ4N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2I3Njg2OGQ3NDE0YjQzZmJiYTNmZDY2NmEwNzdlNThhID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfOTVkOTEwZTAyY2JlNDQ1NWFiZTYzNGRjOTZmYzVmNWYuc2V0SWNvbihpY29uX2I3Njg2OGQ3NDE0YjQzZmJiYTNmZDY2NmEwNzdlNThhKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDk1OGUxY2M3MzFkNDgxZDg5MmYyYjNmY2Y2NWVkYTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWVhZjM0NjVjY2M3NDNiMWI0YjEyOTBlZmI1N2Y1N2EgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2FlYWYzNDY1Y2NjNzQzYjFiNGIxMjkwZWZiNTdmNTdhIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBjYWxsZSBTYWdhc3RhIChab25hIDQpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ5NThlMWNjNzMxZDQ4MWQ4OTJmMmIzZmNmNjVlZGE0LnNldENvbnRlbnQoaHRtbF9hZWFmMzQ2NWNjYzc0M2IxYjRiMTI5MGVmYjU3ZjU3YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzk1ZDkxMGUwMmNiZTQ0NTVhYmU2MzRkYzk2ZmM1ZjVmLmJpbmRQb3B1cChwb3B1cF80OTU4ZTFjYzczMWQ0ODFkODkyZjJiM2ZjZjY1ZWRhNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzMzOTNmMmQxMDJmZTRiMzhiMDRmZGQ0OGEzYzdmYjc3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTg2NzcxOCwtMS4xMzkzMjRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9mODc3ZjE1NDhhZWI0ZTZhYTRmY2VjZmY3YWZhOWFhYiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzMzOTNmMmQxMDJmZTRiMzhiMDRmZGQ0OGEzYzdmYjc3LnNldEljb24oaWNvbl9mODc3ZjE1NDhhZWI0ZTZhYTRmY2VjZmY3YWZhOWFhYik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JkNWEyOTBkMWFkMzQ4NGQ4NjdmY2FmNDQ0MjUwNWFkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIwMGI3NjM0MTZkYjRkMTA5MzkzM2ZhMzc3MGJjOWNmID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8yMDBiNzYzNDE2ZGI0ZDEwOTM5MzNmYTM3NzBiYzljZiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgZGVsIERvY3RvciBKZXN1cyBRdWVzYWRhIFNhbnogKFpvbmEgNCk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmQ1YTI5MGQxYWQzNDg0ZDg2N2ZjYWY0NDQyNTA1YWQuc2V0Q29udGVudChodG1sXzIwMGI3NjM0MTZkYjRkMTA5MzkzM2ZhMzc3MGJjOWNmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzM5M2YyZDEwMmZlNGIzOGIwNGZkZDQ4YTNjN2ZiNzcuYmluZFBvcHVwKHBvcHVwX2JkNWEyOTBkMWFkMzQ4NGQ4NjdmY2FmNDQ0MjUwNWFkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNjZhMDU4ZGZlNmZkNGQxNTgxZGZmN2IyZTIxZWFhMjggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45Mzk0OTQzLC0xLjE1ODk4Ml0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2VkYTIxMDFhM2Y1MTQwZDNhMTYwNjZiZmNhZDNlZjcwID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNjZhMDU4ZGZlNmZkNGQxNTgxZGZmN2IyZTIxZWFhMjguc2V0SWNvbihpY29uX2VkYTIxMDFhM2Y1MTQwZDNhMTYwNjZiZmNhZDNlZjcwKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODk0OGFjZTdmOTExNGY1NWI0OWY5NTQwMTQ4ODMwNjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjA0MGY5MGFlMDZkNGNhYjk4NWM2YzYwYTJkYWNlYmUgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2YwNDBmOTBhZTA2ZDRjYWI5ODVjNmM2MGEyZGFjZWJlIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBOYXZhcnJhIChab25hIDQpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg5NDhhY2U3ZjkxMTRmNTViNDlmOTU0MDE0ODgzMDYxLnNldENvbnRlbnQoaHRtbF9mMDQwZjkwYWUwNmQ0Y2FiOTg1YzZjNjBhMmRhY2ViZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzY2YTA1OGRmZTZmZDRkMTU4MWRmZjdiMmUyMWVhYTI4LmJpbmRQb3B1cChwb3B1cF84OTQ4YWNlN2Y5MTE0ZjU1YjQ5Zjk1NDAxNDg4MzA2MSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzg2YzRhY2ViM2ZlYTQ2NGU5ODdjMTk0ZmIwNjAxZGY4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTgyNzU4NiwtMS4xMzgyNzAzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNGViMjY5N2E0YWQ3NDg5Nzk2ZWFmN2MyM2E1YzY5MjcgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl84NmM0YWNlYjNmZWE0NjRlOTg3YzE5NGZiMDYwMWRmOC5zZXRJY29uKGljb25fNGViMjY5N2E0YWQ3NDg5Nzk2ZWFmN2MyM2E1YzY5MjcpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZTFkNTM3ZmU5OGM0YjllYjRhNGIwMjMyN2I3ODA1NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zMTJkYThmMGMxZTg0YTZkYjY0ZTEwMDAzYjgzNDcwZCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMzEyZGE4ZjBjMWU4NGE2ZGI2NGUxMDAwM2I4MzQ3MGQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIFBpbnRvciBTb2JlamFubyAoWm9uYSA0KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZTFkNTM3ZmU5OGM0YjllYjRhNGIwMjMyN2I3ODA1Ni5zZXRDb250ZW50KGh0bWxfMzEyZGE4ZjBjMWU4NGE2ZGI2NGUxMDAwM2I4MzQ3MGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84NmM0YWNlYjNmZWE0NjRlOTg3YzE5NGZiMDYwMWRmOC5iaW5kUG9wdXAocG9wdXBfMmUxZDUzN2ZlOThjNGI5ZWI0YTRiMDIzMjdiNzgwNTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83OTUzNjY2ZmQ3ODE0OTAwODc5YjM1NDIwODRlMGFjMSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjgzMTU3NTMsLTEuMTUzMzQ4M10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzlmNzA0ZjgxOWU1YjQ5MjA4NzFhZTFmZjE5ZTM4MDNmID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNzk1MzY2NmZkNzgxNDkwMDg3OWIzNTQyMDg0ZTBhYzEuc2V0SWNvbihpY29uXzlmNzA0ZjgxOWU1YjQ5MjA4NzFhZTFmZjE5ZTM4MDNmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmRjNDYzNDdkZDUzNGU2ZDg3YjBmZjk5NzI2MmQ3NjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDliYjc4NzQ5MjQxNDE0OTg2OGVhODFhNzBkMjIzMWQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzA5YmI3ODc0OTI0MTQxNDk4NjhlYTgxYTcwZDIyMzFkIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBkZWwgRXNjdWx0b3IgSm9zZSBTYW5jaGV6IExvemFubyAoWm9uYSA0KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iZGM0NjM0N2RkNTM0ZTZkODdiMGZmOTk3MjYyZDc2OC5zZXRDb250ZW50KGh0bWxfMDliYjc4NzQ5MjQxNDE0OTg2OGVhODFhNzBkMjIzMWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83OTUzNjY2ZmQ3ODE0OTAwODc5YjM1NDIwODRlMGFjMS5iaW5kUG9wdXAocG9wdXBfYmRjNDYzNDdkZDUzNGU2ZDg3YjBmZjk5NzI2MmQ3NjgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82OWI0MzBhYTI2Y2M0ZmNlOTA3MGY4YmJlZWU0M2ZhZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjA0MDQ0ODksLTEuMTAyMzMwOF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2RmYWY0N2RmZDdiMTRmZjJhODYyZGRlMWZhNmZmOThjID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNjliNDMwYWEyNmNjNGZjZTkwNzBmOGJiZWVlNDNmYWQuc2V0SWNvbihpY29uX2RmYWY0N2RmZDdiMTRmZjJhODYyZGRlMWZhNmZmOThjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjQzYTkyMjRjNmE3NDY4NDk5M2U3N2VjNmJlODlkNmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjZiMGJkMDlmYjk4NGIwYzgzYTZmNjNjYTY5ZDg1MmEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2I2YjBiZDA5ZmI5ODRiMGM4M2E2ZjYzY2E2OWQ4NTJhIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBkZSBTaWVycmEgTmV2YWRhIChab25hIDQpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y0M2E5MjI0YzZhNzQ2ODQ5OTNlNzdlYzZiZTg5ZDZkLnNldENvbnRlbnQoaHRtbF9iNmIwYmQwOWZiOTg0YjBjODNhNmY2M2NhNjlkODUyYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzY5YjQzMGFhMjZjYzRmY2U5MDcwZjhiYmVlZTQzZmFkLmJpbmRQb3B1cChwb3B1cF9mNDNhOTIyNGM2YTc0Njg0OTkzZTc3ZWM2YmU4OWQ2ZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzkyZDVmNmNlZDA4YjQxZjNhMGM4OWFhMjhiN2I4MjFmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTg3NTgwNiwtMS4xNDQ5MzU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMTEzZDgxMTQ5NmE4NDQyYmJkZWIyY2FiOTEzNjkwYTEgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl85MmQ1ZjZjZWQwOGI0MWYzYTBjODlhYTI4YjdiODIxZi5zZXRJY29uKGljb25fMTEzZDgxMTQ5NmE4NDQyYmJkZWIyY2FiOTEzNjkwYTEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNjU4ZmU2MDg0NmE0ZmM3ODgxMmQ0NzdiNDMyYmJkYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iZTFjMTRjMjkwOTA0OGFkOGEyNDUzNzViZmViOWVjNCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYmUxYzE0YzI5MDkwNDhhZDhhMjQ1Mzc1YmZlYjllYzQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbWlubyBkZSBFbm1lZGlvIChab25hIDQpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA2NThmZTYwODQ2YTRmYzc4ODEyZDQ3N2I0MzJiYmRhLnNldENvbnRlbnQoaHRtbF9iZTFjMTRjMjkwOTA0OGFkOGEyNDUzNzViZmViOWVjNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzkyZDVmNmNlZDA4YjQxZjNhMGM4OWFhMjhiN2I4MjFmLmJpbmRQb3B1cChwb3B1cF8wNjU4ZmU2MDg0NmE0ZmM3ODgxMmQ0NzdiNDMyYmJkYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2Y4OGNhYWU3ZWQ0YTQxMmViNjY5ZmMzN2UwOTFkNWZhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTg5NDkwOSwtMS4xNDIzNjM4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYzM0ZDQ3MzQyYmVjNGFiMGI1ZGY5N2I0Nzc1M2VjOTcgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9mODhjYWFlN2VkNGE0MTJlYjY2OWZjMzdlMDkxZDVmYS5zZXRJY29uKGljb25fYzM0ZDQ3MzQyYmVjNGFiMGI1ZGY5N2I0Nzc1M2VjOTcpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hZTVhZWQyZjE0YTI0N2MzYTZlNWFjZTQzNjdmZGYyYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mNzgwMmQ1Y2M0MDE0ZDYxOWViYjQ2MmY5ZmUzMWJmYiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZjc4MDJkNWNjNDAxNGQ2MTllYmI0NjJmOWZlMzFiZmIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIGRlIGxhcyBOb3JpYXMgKFpvbmEgNCk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWU1YWVkMmYxNGEyNDdjM2E2ZTVhY2U0MzY3ZmRmMmIuc2V0Q29udGVudChodG1sX2Y3ODAyZDVjYzQwMTRkNjE5ZWJiNDYyZjlmZTMxYmZiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjg4Y2FhZTdlZDRhNDEyZWI2NjlmYzM3ZTA5MWQ1ZmEuYmluZFBvcHVwKHBvcHVwX2FlNWFlZDJmMTRhMjQ3YzNhNmU1YWNlNDM2N2ZkZjJiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjIwYmVmNjc5ZGViNGJkNWIyY2M3MmRiZmFlY2Y3MDggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODk0OTA5LC0xLjE0MjM2MzhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl85Y2VhZjllOTc3NzI0MjJkYjU0ZmRlZmJhOTBkNzQ1ZCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2IyMGJlZjY3OWRlYjRiZDViMmNjNzJkYmZhZWNmNzA4LnNldEljb24oaWNvbl85Y2VhZjllOTc3NzI0MjJkYjU0ZmRlZmJhOTBkNzQ1ZCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE3M2I1MDdmZGZkMTQ5ZmNiYjUyMjg3MjU2ZmQ3NDc4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IwYjA5YzIzZjhiNjQ3Njc4NDFjN2ZmYjU2OGJkMzM2ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9iMGIwOWMyM2Y4YjY0NzY3ODQxYzdmZmI1NjhiZDMzNiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgT2xvZiBQYWxtZSAoWm9uYSA0KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNzNiNTA3ZmRmZDE0OWZjYmI1MjI4NzI1NmZkNzQ3OC5zZXRDb250ZW50KGh0bWxfYjBiMDljMjNmOGI2NDc2Nzg0MWM3ZmZiNTY4YmQzMzYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iMjBiZWY2NzlkZWI0YmQ1YjJjYzcyZGJmYWVjZjcwOC5iaW5kUG9wdXAocG9wdXBfMTczYjUwN2ZkZmQxNDlmY2JiNTIyODcyNTZmZDc0NzgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82NzdmOTQ2MzljZjU0ZTFkOTZlMzI4N2Q4NTBlMzcyYyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4Mzg0MTIsLTEuMTMzNDQ2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYTA0YmI3YjViMWNlNDM5ZWIwNzkxY2Y4NmU1NzY5YTUgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl82NzdmOTQ2MzljZjU0ZTFkOTZlMzI4N2Q4NTBlMzcyYy5zZXRJY29uKGljb25fYTA0YmI3YjViMWNlNDM5ZWIwNzkxY2Y4NmU1NzY5YTUpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lNDNlNjgwZjEwOTk0NDFiYTEwMmVlMjA2ZWIyNmRlZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MDMxNTNmYTE2NjA0Y2FmYmVhNzdkYTJlMDBkZTQ5OSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfOTAzMTUzZmExNjYwNGNhZmJlYTc3ZGEyZTAwZGU0OTkiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIEFyY28gVmVyb25pY2FzIChab25hIDQpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U0M2U2ODBmMTA5OTQ0MWJhMTAyZWUyMDZlYjI2ZGVmLnNldENvbnRlbnQoaHRtbF85MDMxNTNmYTE2NjA0Y2FmYmVhNzdkYTJlMDBkZTQ5OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzY3N2Y5NDYzOWNmNTRlMWQ5NmUzMjg3ZDg1MGUzNzJjLmJpbmRQb3B1cChwb3B1cF9lNDNlNjgwZjEwOTk0NDFiYTEwMmVlMjA2ZWIyNmRlZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzYzNTY1OWQ2NTdjNjRhZjQ4MTYxNzFhNGM2MzIzYWViID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTg5NjYyOSwtMS4xMzczMjY3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNWRiMjBjMmYyZmU0NDlkZmFkYzg4NzI3ODY3MjEyMzkgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl82MzU2NTlkNjU3YzY0YWY0ODE2MTcxYTRjNjMyM2FlYi5zZXRJY29uKGljb25fNWRiMjBjMmYyZmU0NDlkZmFkYzg4NzI3ODY3MjEyMzkpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NTM2NmMxYjMyOTI0ZjhiYTgxYWViMDVmOThlNWY3OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84YWEzYWFhNDhhYTM0ZmNiODRlOWJhNjk1NGMxZjFhOCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfOGFhM2FhYTQ4YWEzNGZjYjg0ZTliYTY5NTRjMWYxYTgiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIEZyYW5jaXNjbyBSYWJhbCAoWm9uYSA0KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NTM2NmMxYjMyOTI0ZjhiYTgxYWViMDVmOThlNWY3OC5zZXRDb250ZW50KGh0bWxfOGFhM2FhYTQ4YWEzNGZjYjg0ZTliYTY5NTRjMWYxYTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82MzU2NTlkNjU3YzY0YWY0ODE2MTcxYTRjNjMyM2FlYi5iaW5kUG9wdXAocG9wdXBfNjUzNjZjMWIzMjkyNGY4YmE4MWFlYjA1Zjk4ZTVmNzgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kYmMxMjkwOTZkNzU0ZTBiYTY2NDVhODE5NGU0MTMxMiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4NDI2NzUsLTEuMTMxNjI4NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2Q0MGE4Yzk5YzQ0ZTQ0ZDdiYzk3ZGVmNDU5OWYzNzU3ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZGJjMTI5MDk2ZDc1NGUwYmE2NjQ1YTgxOTRlNDEzMTIuc2V0SWNvbihpY29uX2Q0MGE4Yzk5YzQ0ZTQ0ZDdiYzk3ZGVmNDU5OWYzNzU3KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWRjYWU5MDVkNzhmNDdhMzhkZmI3NTIzNjRkMjg0N2YgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTRmYzdkMWY4YWZkNDQ1Yzk4ZjExNTQ0ZWY5MDA0ZTYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzk0ZmM3ZDFmOGFmZDQ0NWM5OGYxMTU0NGVmOTAwNGU2IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBNYWRyZSBkZSBEaW9zIChab25hIDQpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVkY2FlOTA1ZDc4ZjQ3YTM4ZGZiNzUyMzY0ZDI4NDdmLnNldENvbnRlbnQoaHRtbF85NGZjN2QxZjhhZmQ0NDVjOThmMTE1NDRlZjkwMDRlNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2RiYzEyOTA5NmQ3NTRlMGJhNjY0NWE4MTk0ZTQxMzEyLmJpbmRQb3B1cChwb3B1cF81ZGNhZTkwNWQ3OGY0N2EzOGRmYjc1MjM2NGQyODQ3Zik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzc3YWY2YmZmOTE1MTRhMWNhMGM2YTgyZWZmZjIyZDc4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTg1OTIzNiwtMS4xMzgzMzY4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNjNhZDU1ZjNiYWIzNGY0YzkzYmQwYzM3NjhhMmFhZTEgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl83N2FmNmJmZjkxNTE0YTFjYTBjNmE4MmVmZmYyMmQ3OC5zZXRJY29uKGljb25fNjNhZDU1ZjNiYWIzNGY0YzkzYmQwYzM3NjhhMmFhZTEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kZjc2ZWQxNmRkYzg0M2VkYjUzODE1ZTU2N2RhMzU2NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMzY4ODU3M2RkOTc0NGQ3YjBmYTFkMWU3ZWU0YTE0NiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMTM2ODg1NzNkZDk3NDRkN2IwZmExZDFlN2VlNGExNDYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIE51ZXZhcyBUZWNub2xvZ2lhcyAoWm9uYSA0KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kZjc2ZWQxNmRkYzg0M2VkYjUzODE1ZTU2N2RhMzU2Ny5zZXRDb250ZW50KGh0bWxfMTM2ODg1NzNkZDk3NDRkN2IwZmExZDFlN2VlNGExNDYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83N2FmNmJmZjkxNTE0YTFjYTBjNmE4MmVmZmYyMmQ3OC5iaW5kUG9wdXAocG9wdXBfZGY3NmVkMTZkZGM4NDNlZGI1MzgxNWU1NjdkYTM1NjcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kMzM5YzM5N2EyMmQ0NzhiOTViYTA0ZTZkYmFlMTMzNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4NzE5MjYsLTEuMTM5Mzk2MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzI2YjFhOTFiZWVkNTRiZTA4NzVlODIxMTNhZDIxNDNkID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZDMzOWMzOTdhMjJkNDc4Yjk1YmEwNGU2ZGJhZTEzMzYuc2V0SWNvbihpY29uXzI2YjFhOTFiZWVkNTRiZTA4NzVlODIxMTNhZDIxNDNkKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDNiMzAxN2VmN2VjNDM3ZGJhMTc3OGI0YWUyMmFkOWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTUzM2EzYzE5NzZlNGQzYTgxN2FjYmQ1OTJmODE5OTUgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzU1MzNhM2MxOTc2ZTRkM2E4MTdhY2JkNTkyZjgxOTk1IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBTaWVycmEgZGUgR3JlZG9zIChab25hIDQpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAzYjMwMTdlZjdlYzQzN2RiYTE3NzhiNGFlMjJhZDlkLnNldENvbnRlbnQoaHRtbF81NTMzYTNjMTk3NmU0ZDNhODE3YWNiZDU5MmY4MTk5NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2QzMzljMzk3YTIyZDQ3OGI5NWJhMDRlNmRiYWUxMzM2LmJpbmRQb3B1cChwb3B1cF8wM2IzMDE3ZWY3ZWM0MzdkYmExNzc4YjRhZTIyYWQ5ZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2JmZTlmM2MwOTgzMjRmMWFhYTA5NzYwZjk5Mzc5Mzc0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTg4MTg4OSwtMS4xMzk2NTddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl82NGZlZTQxM2VmZTA0ZWNkODI4NTRmZjc1OGUyOGI3NCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2JmZTlmM2MwOTgzMjRmMWFhYTA5NzYwZjk5Mzc5Mzc0LnNldEljb24oaWNvbl82NGZlZTQxM2VmZTA0ZWNkODI4NTRmZjc1OGUyOGI3NCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U5YjY4ZDI3MzI4NDRmMjQ4Y2MxYzRmMTM3OTY4MmQyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM2NmZlZGRmMWY1MTQ0NjY4NjgzOTA0NDkyNGY2MmQ2ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8zNjZmZWRkZjFmNTE0NDY2ODY4MzkwNDQ5MjRmNjJkNiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgU2llcnJhIENhcmJvbmVyYSAoWm9uYSA0KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lOWI2OGQyNzMyODQ0ZjI0OGNjMWM0ZjEzNzk2ODJkMi5zZXRDb250ZW50KGh0bWxfMzY2ZmVkZGYxZjUxNDQ2Njg2ODM5MDQ0OTI0ZjYyZDYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iZmU5ZjNjMDk4MzI0ZjFhYWEwOTc2MGY5OTM3OTM3NC5iaW5kUG9wdXAocG9wdXBfZTliNjhkMjczMjg0NGYyNDhjYzFjNGYxMzc5NjgyZDIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83NDAyNDQyYTYwNDQ0MDFjYmQ1MTZkNWFjZDkzYmU0NCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4NjQ0MjQsLTEuMTM3NjgxMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzgxZWEwMGFmYzYyMDQ1MThiZjk3Njk3MmU1YjM0NzliID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNzQwMjQ0MmE2MDQ0NDAxY2JkNTE2ZDVhY2Q5M2JlNDQuc2V0SWNvbihpY29uXzgxZWEwMGFmYzYyMDQ1MThiZjk3Njk3MmU1YjM0NzliKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmViMmZiYzhhYjU1NDIxNzk5MWFkNGJkMzViOWU0ZGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDNmZjhlZDdiMGIzNDAxZGE5MTI2NzJiZjlkMGY1ZmQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzAzZmY4ZWQ3YjBiMzQwMWRhOTEyNjcyYmY5ZDBmNWZkIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBBcnJpeGFjYSAoWm9uYSA0KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZWIyZmJjOGFiNTU0MjE3OTkxYWQ0YmQzNWI5ZTRkYS5zZXRDb250ZW50KGh0bWxfMDNmZjhlZDdiMGIzNDAxZGE5MTI2NzJiZjlkMGY1ZmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83NDAyNDQyYTYwNDQ0MDFjYmQ1MTZkNWFjZDkzYmU0NC5iaW5kUG9wdXAocG9wdXBfMmViMmZiYzhhYjU1NDIxNzk5MWFkNGJkMzViOWU0ZGEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wOTI0YTMwMDE3OGM0NGFhOTYzYThjMmFiYmIwOWFhYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4Mzg1MDYsLTEuMTMyNTUzM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzcxNzRkODA1YmE1MDQ1ODdiNjU2YWI0MDQzYjBhYTI2ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMDkyNGEzMDAxNzhjNDRhYTk2M2E4YzJhYmJiMDlhYWIuc2V0SWNvbihpY29uXzcxNzRkODA1YmE1MDQ1ODdiNjU2YWI0MDQzYjBhYTI2KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDkyNTQzZGRiNzEzNDQ5NWI2YmIzMDNjOTNlODNjYTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDk3MWY1ZTAzZDFjNDNlMjg1Y2MyNzhkZDhiZThhZTMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2Q5NzFmNWUwM2QxYzQzZTI4NWNjMjc4ZGQ4YmU4YWUzIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBQYXNjdWFsIChab25hIDQpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA5MjU0M2RkYjcxMzQ0OTViNmJiMzAzYzkzZTgzY2E1LnNldENvbnRlbnQoaHRtbF9kOTcxZjVlMDNkMWM0M2UyODVjYzI3OGRkOGJlOGFlMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzA5MjRhMzAwMTc4YzQ0YWE5NjNhOGMyYWJiYjA5YWFiLmJpbmRQb3B1cChwb3B1cF8wOTI1NDNkZGI3MTM0NDk1YjZiYjMwM2M5M2U4M2NhNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzlkYzU4M2RhNWVhODRmZGQ4YzU1ODFhYzdkZjhkYzkzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTM4NzQxOSwtMS4xNjYzOTY2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fOTU2Zjk3YzQ0Y2IwNDUyY2E0NzAyYmJmNTNmZTBhZjcgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl85ZGM1ODNkYTVlYTg0ZmRkOGM1NTgxYWM3ZGY4ZGM5My5zZXRJY29uKGljb25fOTU2Zjk3YzQ0Y2IwNDUyY2E0NzAyYmJmNTNmZTBhZjcpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hOGVkZmE1YjA1NjY0M2VlYjNhYmYzNmE3ZjVkMDFjMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xYmY0NDQxMTY3YWY0ODk3YWY3ZGViOTcwOTBmNGMwZiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMWJmNDQ0MTE2N2FmNDg5N2FmN2RlYjk3MDkwZjRjMGYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIEphcmEgQ2FycmlsbG8gKFpvbmEgNCk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYThlZGZhNWIwNTY2NDNlZWIzYWJmMzZhN2Y1ZDAxYzMuc2V0Q29udGVudChodG1sXzFiZjQ0NDExNjdhZjQ4OTdhZjdkZWI5NzA5MGY0YzBmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOWRjNTgzZGE1ZWE4NGZkZDhjNTU4MWFjN2RmOGRjOTMuYmluZFBvcHVwKHBvcHVwX2E4ZWRmYTViMDU2NjQzZWViM2FiZjM2YTdmNWQwMWMzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZTEwYWMwZGZhNzViNDYyNWEyYjIzNGFjM2YwMzk3ZjUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODY1NjQ2LC0xLjEzNzcwNzFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8zOTJlM2Y2MWUzMDE0YTI3OGY5YzA2NmM4YjU2MmFmMSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2UxMGFjMGRmYTc1YjQ2MjVhMmIyMzRhYzNmMDM5N2Y1LnNldEljb24oaWNvbl8zOTJlM2Y2MWUzMDE0YTI3OGY5YzA2NmM4YjU2MmFmMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQyZGMxOGZiYmE5MzQ3ZGY4ZDY3ZWJiMGZhZTlmOTlmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUzMGE3Yzg1YjhhZTQ4ZmFhNDNhYjNkNjg5YjdmNjYxID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF81MzBhN2M4NWI4YWU0OGZhYTQzYWIzZDY4OWI3ZjY2MSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgUGxhemEgZGUgU2FuIEFndXN0aW4gKFpvbmEgNCk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDJkYzE4ZmJiYTkzNDdkZjhkNjdlYmIwZmFlOWY5OWYuc2V0Q29udGVudChodG1sXzUzMGE3Yzg1YjhhZTQ4ZmFhNDNhYjNkNjg5YjdmNjYxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZTEwYWMwZGZhNzViNDYyNWEyYjIzNGFjM2YwMzk3ZjUuYmluZFBvcHVwKHBvcHVwXzQyZGMxOGZiYmE5MzQ3ZGY4ZDY3ZWJiMGZhZTlmOTlmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYWY2ZTMxMzYzNTk4NGU2MzhiNjJjYTNiNzZmZGIyMGEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODYyNzIzLC0xLjE0MDAzNV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzZkOWFjMGZlZjcyZjQ0N2JiOTQwOTE0NGFmYzAwMzc4ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYWY2ZTMxMzYzNTk4NGU2MzhiNjJjYTNiNzZmZGIyMGEuc2V0SWNvbihpY29uXzZkOWFjMGZlZjcyZjQ0N2JiOTQwOTE0NGFmYzAwMzc4KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzkyODIzNTBjZTdhNGVhMWE5ZmYxNzMxMWU4N2Q1OGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmE4N2I1OTY3NjdiNDIyMmE1YzM5YmFhYzJlYTc4NDAgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2ZhODdiNTk2NzY3YjQyMjJhNWMzOWJhYWMyZWE3ODQwIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBNYXJpYW5vIE1vbnRlc2lub3MgKFpvbmEgNCk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzkyODIzNTBjZTdhNGVhMWE5ZmYxNzMxMWU4N2Q1OGMuc2V0Q29udGVudChodG1sX2ZhODdiNTk2NzY3YjQyMjJhNWMzOWJhYWMyZWE3ODQwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYWY2ZTMxMzYzNTk4NGU2MzhiNjJjYTNiNzZmZGIyMGEuYmluZFBvcHVwKHBvcHVwXzM5MjgyMzUwY2U3YTRlYTFhOWZmMTczMTFlODdkNThjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYWE2OThiMGJiZTQ3NGNhZjhmMTU5OGVlZDIzYjdhMTkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOC4yMDU2NTg3LC0xLjAzODYxMTRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl81N2UwNDI3MTNhY2E0MDNmYTJjNDQ0YzZhNTM1YTY5NyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2FhNjk4YjBiYmU0NzRjYWY4ZjE1OThlZWQyM2I3YTE5LnNldEljb24oaWNvbl81N2UwNDI3MTNhY2E0MDNmYTJjNDQ0YzZhNTM1YTY5Nyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBkNzMyMGFhNzNmYzQ1MDI5NjI5NWViYTNkMmQxNWVjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRiODJiNDkxYzFiNTRkZDU5ZDg1ZmEzMjE0MmQxNWU1ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF80YjgyYjQ5MWMxYjU0ZGQ1OWQ4NWZhMzIxNDJkMTVlNSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsZSBBbGZhbmRlIChab25hIDQpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBkNzMyMGFhNzNmYzQ1MDI5NjI5NWViYTNkMmQxNWVjLnNldENvbnRlbnQoaHRtbF80YjgyYjQ5MWMxYjU0ZGQ1OWQ4NWZhMzIxNDJkMTVlNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2FhNjk4YjBiYmU0NzRjYWY4ZjE1OThlZWQyM2I3YTE5LmJpbmRQb3B1cChwb3B1cF8wZDczMjBhYTczZmM0NTAyOTYyOTVlYmEzZDJkMTVlYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgbXVsdGlfcG9seV9saW5lXzM2NWJkNmE0NTVhYjQxZDU5NWNjODIyZmM4MDUxNjNhID0gTC5tdWx0aVBvbHlsaW5lKAogICAgICAgICAgICAgICAgICAgIFtbWzM3LjkzODc0MTksIC0xLjE2NjM5NjZdLCBbMzcuODMxNTc1MywgLTEuMTUzMzQ4M11dLCBbWzM3LjgzMTU3NTMsIC0xLjE1MzM0ODNdLCBbMzguMjA1NjU4NywgLTEuMDM4NjExNF1dLCBbWzM4LjIwNTY1ODcsIC0xLjAzODYxMTRdLCBbMzcuOTg3NTgwNiwgLTEuMTQ0OTM1Nl1dLCBbWzM3Ljk4NzU4MDYsIC0xLjE0NDkzNTZdLCBbMzcuOTM4NzQxOSwgLTEuMTY2Mzk2Nl1dXSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ6IDUsCiAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmLmFkZExheWVyKG11bHRpX3BvbHlfbGluZV8zNjViZDZhNDU1YWI0MWQ1OTVjYzgyMmZjODA1MTYzYSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgwMDdlZWRhOTNhODQ4Yzg5N2Q5Yzk3ZmJiOGFiMzYwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NlOWNhNTA3YWQwMDRlN2Y4NjNhYzU1ZmQ3MDlmYmZmID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9jZTljYTUwN2FkMDA0ZTdmODYzYWM1NWZkNzA5ZmJmZiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgWm9uYSA0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgwMDdlZWRhOTNhODQ4Yzg5N2Q5Yzk3ZmJiOGFiMzYwLnNldENvbnRlbnQoaHRtbF9jZTljYTUwN2FkMDA0ZTdmODYzYWM1NWZkNzA5ZmJmZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbXVsdGlfcG9seV9saW5lXzM2NWJkNmE0NTVhYjQxZDU5NWNjODIyZmM4MDUxNjNhLmJpbmRQb3B1cChwb3B1cF84MDA3ZWVkYTkzYTg0OGM4OTdkOWM5N2ZiYjhhYjM2MCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzQ5NDAzYjRkMmY3MjQ5YWI4OGVlYWQ1YzMyMTIzZWQ5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTg1MTM5NCwtMS4xMjMyNDk4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNzFmOWM1YThjNDNhNGVkOTg4ZDk3NzI2NjE4MjBhM2UgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNDk0MDNiNGQyZjcyNDlhYjg4ZWVhZDVjMzIxMjNlZDkuc2V0SWNvbihpY29uXzcxZjljNWE4YzQzYTRlZDk4OGQ5NzcyNjYxODIwYTNlKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmM2MGZkMTlmMDIyNGM2YzgzZjFjZjhmYjY0ZjIzNmIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTZmMWJkNGFmOTdmNDQ0ZmIyZjc3YTY5ZjVmOGQ3YjUgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzE2ZjFiZDRhZjk3ZjQ0NGZiMmY3N2E2OWY1ZjhkN2I1IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBSb25kYSBkZSBHYXJheSAoWm9uYSA2KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82YzYwZmQxOWYwMjI0YzZjODNmMWNmOGZiNjRmMjM2Yi5zZXRDb250ZW50KGh0bWxfMTZmMWJkNGFmOTdmNDQ0ZmIyZjc3YTY5ZjVmOGQ3YjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80OTQwM2I0ZDJmNzI0OWFiODhlZWFkNWMzMjEyM2VkOS5iaW5kUG9wdXAocG9wdXBfNmM2MGZkMTlmMDIyNGM2YzgzZjFjZjhmYjY0ZjIzNmIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zZDQ4YWUyYTEyYjY0YzJiODlmOTA1N2NmNDBjYTY2YyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4NDE4ODcsLTEuMTI0OTkwNl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzFhNTAwYTAwOTE2YzRkYTQ5ZGM3YjY3MWNjYmQ3ODFjID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnb3JhbmdlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzNkNDhhZTJhMTJiNjRjMmI4OWY5MDU3Y2Y0MGNhNjZjLnNldEljb24oaWNvbl8xYTUwMGEwMDkxNmM0ZGE0OWRjN2I2NzFjY2JkNzgxYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E5ZWVkMGM0MDQ0MTQ1MDU4NmI1MGU2MWM2YjQ2NmNhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NkYzQzNTcwY2Q5ZDRkYWQ5MjkxZDkwNWVmMDU5NGUzID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9jZGM0MzU3MGNkOWQ0ZGFkOTI5MWQ5MDVlZjA1OTRlMyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgU2ltb24gR2FyY2lhIChab25hIDYpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E5ZWVkMGM0MDQ0MTQ1MDU4NmI1MGU2MWM2YjQ2NmNhLnNldENvbnRlbnQoaHRtbF9jZGM0MzU3MGNkOWQ0ZGFkOTI5MWQ5MDVlZjA1OTRlMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzNkNDhhZTJhMTJiNjRjMmI4OWY5MDU3Y2Y0MGNhNjZjLmJpbmRQb3B1cChwb3B1cF9hOWVlZDBjNDA0NDE0NTA1ODZiNTBlNjFjNmI0NjZjYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2EzYjVhNDAyYzBmZTRmYjQ4MWFmNWYwMGIzMzc3OTVhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTg0MTY0NCwtMS4xMjE5NjQ2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYTMxMmU0ODY2MzYyNGI0MmFkNmE4ZTYzZTVlMTZmODcgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYTNiNWE0MDJjMGZlNGZiNDgxYWY1ZjAwYjMzNzc5NWEuc2V0SWNvbihpY29uX2EzMTJlNDg2NjM2MjRiNDJhZDZhOGU2M2U1ZTE2Zjg3KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzYxZTNkN2VjOGIzNDc5YWIzYTJmYjAzN2ZmZmMzZWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDQzMDdhOGM0N2E5NDJiYmIzODFlZTEwNDEyYzAwMWMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzQ0MzA3YThjNDdhOTQyYmJiMzgxZWUxMDQxMmMwMDFjIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBTYW4gTGVhbmRybyAoWm9uYSA2KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNjFlM2Q3ZWM4YjM0NzlhYjNhMmZiMDM3ZmZmYzNlZS5zZXRDb250ZW50KGh0bWxfNDQzMDdhOGM0N2E5NDJiYmIzODFlZTEwNDEyYzAwMWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hM2I1YTQwMmMwZmU0ZmI0ODFhZjVmMDBiMzM3Nzk1YS5iaW5kUG9wdXAocG9wdXBfMzYxZTNkN2VjOGIzNDc5YWIzYTJmYjAzN2ZmZmMzZWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zMWRjYmUxNzg0ZWU0MmJjYTMxODE1ZjFlNjllM2U1YiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4MjQ0MDcsLTEuMTI0NzI4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNDI0OTczZTFjNTg1NGZiYTk2MmVkM2JkYzkxMmM4ZTggPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMzFkY2JlMTc4NGVlNDJiY2EzMTgxNWYxZTY5ZTNlNWIuc2V0SWNvbihpY29uXzQyNDk3M2UxYzU4NTRmYmE5NjJlZDNiZGM5MTJjOGU4KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzIyNjI3MzNjMDM2NGZmZGI5Yzg0ODdkNTE3OTg2MjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjNhOGM2MTgwMGQ2NDE4YThiODljMTJiNTZjNzk5ZDcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzYzYThjNjE4MDBkNjQxOGE4Yjg5YzEyYjU2Yzc5OWQ3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBHZW5lcmFsIFNhbm1hcnRpbiAoWm9uYSA2KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMjI2MjczM2MwMzY0ZmZkYjljODQ4N2Q1MTc5ODYyMy5zZXRDb250ZW50KGh0bWxfNjNhOGM2MTgwMGQ2NDE4YThiODljMTJiNTZjNzk5ZDcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zMWRjYmUxNzg0ZWU0MmJjYTMxODE1ZjFlNjllM2U1Yi5iaW5kUG9wdXAocG9wdXBfMzIyNjI3MzNjMDM2NGZmZGI5Yzg0ODdkNTE3OTg2MjMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jZmMyODdiYzllMjU0YjNiYTE1Y2NlMDRmN2YwMjBhNyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4NDczNjgsLTEuMTIyMzA4Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzY3YjYwOWQ1NTYyNjRhZTdhNTlmMzA0NmY1NjI0MjUxID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnb3JhbmdlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2NmYzI4N2JjOWUyNTRiM2JhMTVjY2UwNGY3ZjAyMGE3LnNldEljb24oaWNvbl82N2I2MDlkNTU2MjY0YWU3YTU5ZjMwNDZmNTYyNDI1MSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRhZWVjYjhkYTZlMTRkODdhNzQwYWI2ZGU4ZTBjNmQ3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YwNGUxN2VhZTBkOTQ4MzZiNzViMGJjNDMzNzA5ZmQwID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9mMDRlMTdlYWUwZDk0ODM2Yjc1YjBiYzQzMzcwOWZkMCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgSm9zZWxpdG8gKFpvbmEgNik8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGFlZWNiOGRhNmUxNGQ4N2E3NDBhYjZkZThlMGM2ZDcuc2V0Q29udGVudChodG1sX2YwNGUxN2VhZTBkOTQ4MzZiNzViMGJjNDMzNzA5ZmQwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfY2ZjMjg3YmM5ZTI1NGIzYmExNWNjZTA0ZjdmMDIwYTcuYmluZFBvcHVwKHBvcHVwXzRhZWVjYjhkYTZlMTRkODdhNzQwYWI2ZGU4ZTBjNmQ3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNjQ1MDZjNDQwZWEyNGE1MjlmNjc1MGRlMTgwOGU1MjAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODYwODE4LC0xLjEyNDA4OTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8xMDZiMjgzZGRmYTk0ODFmODgzMTkyNzVkZDZmNmRhZCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl82NDUwNmM0NDBlYTI0YTUyOWY2NzUwZGUxODA4ZTUyMC5zZXRJY29uKGljb25fMTA2YjI4M2RkZmE5NDgxZjg4MzE5Mjc1ZGQ2ZjZkYWQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hMWVlMzFiNTBlNmQ0NzZiODdhOWFlYjI5ZTlkYjUyYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMTY5NjJlMWJkZGY0ZDFiOTJlZDE5YTM4YzhkYzZmYiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZjE2OTYyZTFiZGRmNGQxYjkyZWQxOWEzOGM4ZGM2ZmIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIE1hcmlhbm8gVmVyZ2FyYSAoWm9uYSA2KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hMWVlMzFiNTBlNmQ0NzZiODdhOWFlYjI5ZTlkYjUyYy5zZXRDb250ZW50KGh0bWxfZjE2OTYyZTFiZGRmNGQxYjkyZWQxOWEzOGM4ZGM2ZmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82NDUwNmM0NDBlYTI0YTUyOWY2NzUwZGUxODA4ZTUyMC5iaW5kUG9wdXAocG9wdXBfYTFlZTMxYjUwZTZkNDc2Yjg3YTlhZWIyOWU5ZGI1MmMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iODYwYWEzNGE0YjM0NWE4YTMzYzFiYzdkMmFkYzI4YSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4NjQ5NTIsLTEuMTI0MDIxNF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzVmMzNlZTRiMGVlODQ4OGJiZjJhZmFkY2U3NzYyNDFhID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnb3JhbmdlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2I4NjBhYTM0YTRiMzQ1YThhMzNjMWJjN2QyYWRjMjhhLnNldEljb24oaWNvbl81ZjMzZWU0YjBlZTg0ODhiYmYyYWZhZGNlNzc2MjQxYSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E2MmIxMzg1NDdhMTQ4ZmNhOTliNDM4N2E2MGI5ZWM2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVmZTEwOTk5Yjk5ZTQ1MzY4YTFjYTYwNzdiMWRiMTIwID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF81ZmUxMDk5OWI5OWU0NTM2OGExY2E2MDc3YjFkYjEyMCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgT2Jpc3BvIEZydXRvcyAoWm9uYSA2KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hNjJiMTM4NTQ3YTE0OGZjYTk5YjQzODdhNjBiOWVjNi5zZXRDb250ZW50KGh0bWxfNWZlMTA5OTliOTllNDUzNjhhMWNhNjA3N2IxZGIxMjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iODYwYWEzNGE0YjM0NWE4YTMzYzFiYzdkMmFkYzI4YS5iaW5kUG9wdXAocG9wdXBfYTYyYjEzODU0N2ExNDhmY2E5OWI0Mzg3YTYwYjllYzYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wYTZjYWZlZDgzMTE0M2UxOGQ1ZWExNTE1YTM5MDRiZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4NzQ3ODEsLTEuMTIzNjY1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzE4MWY3NGMxNzk3YjQ1NGQ5ZTEwMGVmNTY3MDQ0MDk4ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnb3JhbmdlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzBhNmNhZmVkODMxMTQzZTE4ZDVlYTE1MTVhMzkwNGJkLnNldEljb24oaWNvbl8xODFmNzRjMTc5N2I0NTRkOWUxMDBlZjU2NzA0NDA5OCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMyMzA5ZmUwOTI3NjQzODRhMjM1ZTFkMDVhMzhjZTYzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzcxMDMxMGQxNjM5MDRlZjdiY2M2NjE2NDY3YmU1Y2Q0ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF83MTAzMTBkMTYzOTA0ZWY3YmNjNjYxNjQ2N2JlNWNkNCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgQ2lnYXJyYWwgKFpvbmEgNik8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzIzMDlmZTA5Mjc2NDM4NGEyMzVlMWQwNWEzOGNlNjMuc2V0Q29udGVudChodG1sXzcxMDMxMGQxNjM5MDRlZjdiY2M2NjE2NDY3YmU1Y2Q0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMGE2Y2FmZWQ4MzExNDNlMThkNWVhMTUxNWEzOTA0YmQuYmluZFBvcHVwKHBvcHVwXzMyMzA5ZmUwOTI3NjQzODRhMjM1ZTFkMDVhMzhjZTYzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfODE4NDJhYjk3ZTE1NDNiMDg5YzJhMzY5ZGM0MTE4NmQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45Mzg0NDMxLC0xLjE0NTQ1NjhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9lOWMzYmZhY2RhYTI0N2E0OTlhMjYzZmYzMTUyMjQ1ZSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl84MTg0MmFiOTdlMTU0M2IwODljMmEzNjlkYzQxMTg2ZC5zZXRJY29uKGljb25fZTljM2JmYWNkYWEyNDdhNDk5YTI2M2ZmMzE1MjI0NWUpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85N2MxMDdlMDgwNGU0N2FmOTc3MzMzOGRkMzYxYmY5MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85Mzc2YTExMzI0N2E0NDczODg0YWUxMmJhNTEwZGEwNiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfOTM3NmExMTMyNDdhNDQ3Mzg4NGFlMTJiYTUxMGRhMDYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIERvY3RvciBGbGVtaW5nIChab25hIDYpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk3YzEwN2UwODA0ZTQ3YWY5NzczMzM4ZGQzNjFiZjkwLnNldENvbnRlbnQoaHRtbF85Mzc2YTExMzI0N2E0NDczODg0YWUxMmJhNTEwZGEwNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzgxODQyYWI5N2UxNTQzYjA4OWMyYTM2OWRjNDExODZkLmJpbmRQb3B1cChwb3B1cF85N2MxMDdlMDgwNGU0N2FmOTc3MzMzOGRkMzYxYmY5MCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzgzYmJiYWFhMWMzMzQ3Y2Y4ZWRjOGM1ZTA1ZjgzZjlkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTg1MjEwOSwtMS4xMjM5NzY5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZjkxZDQ4MzJiOWZhNDRlMWEyODgzYzcyNjcxMTA3NzAgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfODNiYmJhYWExYzMzNDdjZjhlZGM4YzVlMDVmODNmOWQuc2V0SWNvbihpY29uX2Y5MWQ0ODMyYjlmYTQ0ZTFhMjg4M2M3MjY3MTEwNzcwKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2U0ODhiNGQ0MzI2NDg4YjhjMWRlOWM4M2Q5NjYyYTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2IxOWJlMDhhNDczNDZmYjkwZDk5MDhkYTI4MGJjYTUgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzdiMTliZTA4YTQ3MzQ2ZmI5MGQ5OTA4ZGEyODBiY2E1IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBQZXJpb2Rpc3RhIE5pY29sYXMgT3J0ZWdhIFBhZ2FuIChab25hIDYpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdlNDg4YjRkNDMyNjQ4OGI4YzFkZTljODNkOTY2MmE0LnNldENvbnRlbnQoaHRtbF83YjE5YmUwOGE0NzM0NmZiOTBkOTkwOGRhMjgwYmNhNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzgzYmJiYWFhMWMzMzQ3Y2Y4ZWRjOGM1ZTA1ZjgzZjlkLmJpbmRQb3B1cChwb3B1cF83ZTQ4OGI0ZDQzMjY0ODhiOGMxZGU5YzgzZDk2NjJhNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzI2ZTZlODliM2EzMDQxMzU5OTdiNDExOTRkNWYyN2M2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTg3ODY1NSwtMS4xMjMxNjk4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYTA5NGE5M2M1YzhiNDAzMWJiNzgxZmYyY2ZmYmM1ODYgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMjZlNmU4OWIzYTMwNDEzNTk5N2I0MTE5NGQ1ZjI3YzYuc2V0SWNvbihpY29uX2EwOTRhOTNjNWM4YjQwMzFiYjc4MWZmMmNmZmJjNTg2KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODgyNzQ3MTYwNjkwNDNiNTgwZTdkNjI4YTUyNTg2NDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWIzYThkYWE5MGNiNDJjZTg4MDQwOWY3ZTFiOWEwZTggPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2FiM2E4ZGFhOTBjYjQyY2U4ODA0MDlmN2UxYjlhMGU4IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBkZSBDZXV0YSAoWm9uYSA2KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ODI3NDcxNjA2OTA0M2I1ODBlN2Q2MjhhNTI1ODY0NC5zZXRDb250ZW50KGh0bWxfYWIzYThkYWE5MGNiNDJjZTg4MDQwOWY3ZTFiOWEwZTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yNmU2ZTg5YjNhMzA0MTM1OTk3YjQxMTk0ZDVmMjdjNi5iaW5kUG9wdXAocG9wdXBfODgyNzQ3MTYwNjkwNDNiNTgwZTdkNjI4YTUyNTg2NDQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80ZmJmMDgzODBjMTM0N2E4YTI1OWIwNzAyMjNlNzhjMiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4MjkyNTMsLTEuMTIyOTU4N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzlkNzBmZGNmNmVlODQ1ZDZhMDU1YjM3Mzc4NzU4ZTRmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzNhMDlmMTAwNTAyNDRiYzE4ZDZhOGJlOGMxOGU5N2IwID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnb3JhbmdlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzRmYmYwODM4MGMxMzQ3YThhMjU5YjA3MDIyM2U3OGMyLnNldEljb24oaWNvbl8zYTA5ZjEwMDUwMjQ0YmMxOGQ2YThiZThjMThlOTdiMCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q4MDc1NDJiMmExNDRmMmJhZjdiNDlhMjNlNDEwOTBiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYxZTM3YTU0NDdhODRmNWU5MGQwNzZmNDVjMmM1Y2ExID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF82MWUzN2E1NDQ3YTg0ZjVlOTBkMDc2ZjQ1YzJjNWNhMSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgQ29tdW5lcm9zIChab25hIDYpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q4MDc1NDJiMmExNDRmMmJhZjdiNDlhMjNlNDEwOTBiLnNldENvbnRlbnQoaHRtbF82MWUzN2E1NDQ3YTg0ZjVlOTBkMDc2ZjQ1YzJjNWNhMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzRmYmYwODM4MGMxMzQ3YThhMjU5YjA3MDIyM2U3OGMyLmJpbmRQb3B1cChwb3B1cF9kODA3NTQyYjJhMTQ0ZjJiYWY3YjQ5YTIzZTQxMDkwYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzQyYzFiYmIyMmU4ODRlMTU5NWVmMzg5ZGVhMDNjNmE2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTg3NDYyNSwtMS4xMjQ1MDc4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fOGI5OTA1MTZmMDlkNGY2ZjgzMTU1YzFjZjU3ZmFmYTAgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNDJjMWJiYjIyZTg4NGUxNTk1ZWYzODlkZWEwM2M2YTYuc2V0SWNvbihpY29uXzhiOTkwNTE2ZjA5ZDRmNmY4MzE1NWMxY2Y1N2ZhZmEwKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWNmMDMxYjA5MzkwNGU5NWE5ZTVkMjAzZWM4N2YzYzUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWE0NzY1Y2JkYmNmNDhiZGIzZDAwYjNjNTIxNmJlNjMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzFhNDc2NWNiZGJjZjQ4YmRiM2QwMGIzYzUyMTZiZTYzIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBNYWRyaWQgKFpvbmEgNik8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWNmMDMxYjA5MzkwNGU5NWE5ZTVkMjAzZWM4N2YzYzUuc2V0Q29udGVudChodG1sXzFhNDc2NWNiZGJjZjQ4YmRiM2QwMGIzYzUyMTZiZTYzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNDJjMWJiYjIyZTg4NGUxNTk1ZWYzODlkZWEwM2M2YTYuYmluZFBvcHVwKHBvcHVwXzFjZjAzMWIwOTM5MDRlOTVhOWU1ZDIwM2VjODdmM2M1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNmNiMjc3M2NjZDhjNDVjOGEwOTljYTI1MDdhMDgyZjggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45NTIwNTQxLC0xLjE3NTI2NDddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF85ZDcwZmRjZjZlZTg0NWQ2YTA1NWIzNzM3ODc1OGU0Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9hMzRlNjZhNjJmNWU0ODRlOTRhMTk1NmQ5YmJlZTMzNCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl82Y2IyNzczY2NkOGM0NWM4YTA5OWNhMjUwN2EwODJmOC5zZXRJY29uKGljb25fYTM0ZTY2YTYyZjVlNDg0ZTk0YTE5NTZkOWJiZWUzMzQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZWI2YWNiZDFiOTk0MTQ1ODU2NjRmNmYxOWE2YWI1YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80OWQzMmFjMGFlYTA0NzE3ODBmYTVjOTc1ZmU3YzRhZSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNDlkMzJhYzBhZWEwNDcxNzgwZmE1Yzk3NWZlN2M0YWUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIExhIEdsb3JpYSAoWm9uYSA2KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZWI2YWNiZDFiOTk0MTQ1ODU2NjRmNmYxOWE2YWI1YS5zZXRDb250ZW50KGh0bWxfNDlkMzJhYzBhZWEwNDcxNzgwZmE1Yzk3NWZlN2M0YWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82Y2IyNzczY2NkOGM0NWM4YTA5OWNhMjUwN2EwODJmOC5iaW5kUG9wdXAocG9wdXBfMmViNmFjYmQxYjk5NDE0NTg1NjY0ZjZmMTlhNmFiNWEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIG11bHRpX3BvbHlfbGluZV8yN2M5NWViNDU2MDU0MjZjODk5MTFhMDU3ZTYzNTlmNyA9IEwubXVsdGlQb2x5bGluZSgKICAgICAgICAgICAgICAgICAgICBbW1szNy45NTIwNTQxLCAtMS4xNzUyNjQ3XSwgWzM3LjkzODQ0MzEsIC0xLjE0NTQ1NjhdXSwgW1szNy45Mzg0NDMxLCAtMS4xNDU0NTY4XSwgWzM3Ljk4NDE2NDQsIC0xLjEyMTk2NDZdXSwgW1szNy45ODQxNjQ0LCAtMS4xMjE5NjQ2XSwgWzM3Ljk4Nzg2NTUsIC0xLjEyMzE2OThdXSwgW1szNy45ODc4NjU1LCAtMS4xMjMxNjk4XSwgWzM3Ljk4NzQ2MjUsIC0xLjEyNDUwNzhdXSwgW1szNy45ODc0NjI1LCAtMS4xMjQ1MDc4XSwgWzM3Ljk1MjA1NDEsIC0xLjE3NTI2NDddXV0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodDogNSwKICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMSwKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXBfOWQ3MGZkY2Y2ZWU4NDVkNmEwNTViMzczNzg3NThlNGYuYWRkTGF5ZXIobXVsdGlfcG9seV9saW5lXzI3Yzk1ZWI0NTYwNTQyNmM4OTkxMWEwNTdlNjM1OWY3KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTE0OTQ2Yjc1NGEyNDA1OWI3ZDVkYTNhMWJiYmNkMTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2ZiNTYwYjE4NDE4NDVkNGI1OWRkMzFkMDFjYzIyNzAgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzdmYjU2MGIxODQxODQ1ZDRiNTlkZDMxZDAxY2MyMjcwIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBab25hIDY8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTE0OTQ2Yjc1NGEyNDA1OWI3ZDVkYTNhMWJiYmNkMTYuc2V0Q29udGVudChodG1sXzdmYjU2MGIxODQxODQ1ZDRiNTlkZDMxZDAxY2MyMjcwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtdWx0aV9wb2x5X2xpbmVfMjdjOTVlYjQ1NjA1NDI2Yzg5OTExYTA1N2U2MzU5ZjcuYmluZFBvcHVwKHBvcHVwX2UxNDk0NmI3NTRhMjQwNTliN2Q1ZGEzYTFiYmJjZDE2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgIDwvc2NyaXB0PgogICAgICAgIA==\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;\"></iframe></div></div>"
],
"text/plain": [
"<folium.folium.Map at 0x7f8723068410>"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mapa = folium.Map(location=[37.9829272,-1.1251948], zoom_start=14,\n",
" tiles='Cartodb Positron')\n",
"\n",
"zones_colors = {'1-2-3':'red','4':'green','5':'blue','6':'orange'}\n",
"\n",
"zones_labels = ['6']\n",
"for zone in zones_colors.keys():\n",
" zone_slice = zones_osm[['latlon','name']][(zones_osm.zone==zone)]\n",
" zone_slice = zone_slice.drop_duplicates(subset=['name'])\n",
" for point in zone_slice.values:\n",
" mapa.simple_marker(point[0], popup='{} (Zona {})'.format(unicodedata.normalize('NFKD', point[1]).encode('ascii','ignore'), zone), marker_icon=None,marker_color=zones_colors[zone])\n",
" zone_boundary = MultiPoint(zone_slice.latlon.tolist()).convex_hull \n",
" locations = list(zip(zone_boundary.exterior.coords.xy[0],zone_boundary.exterior.coords.xy[1]))\n",
" locations = [[locations[i],locations[i+1]] for i in range( len(locations) -1)]\n",
" zone_border = folium.MultiPolyLine(locations=locations,popup='Zona {}'.format(zone), color=zones_colors[zone], weight=5, opacity=1) \n",
" mapa.add_children(zone_border) \n",
"\n",
"mapa"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### We see that many points are mislabeled. This is because in the region many streets in different areas share the same name.\n",
"### We get the bounding box of Murcia by getting a sensible square around the city and writing down the minimum and maximum latitude and longitude"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"zones_osm['lat'] = zones_osm.latlon.apply(lambda x:x[0])\n",
"zones_osm['lon'] = zones_osm.latlon.apply(lambda x:x[1])"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"max_lat=37.996859\n",
"min_lat=37.974663\n",
"max_lon=-1.121954\n",
"min_lon=-1.144947"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"murcia_bbox = zones_osm[\n",
" (zones_osm.lat>=min_lat)&\n",
" (zones_osm.lat<=max_lat)&\n",
" (zones_osm.lon>=min_lon)&\n",
" (zones_osm.lon<=max_lon)\n",
"]"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/manuel/anaconda3/lib/python2.7/site-packages/ipykernel/__main__.py:11: FutureWarning: simple_marker is deprecated. Use add_children(Marker) instead\n"
]
},
{
"data": {
"text/html": [
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><iframe src=\"data:text/html;base64,CiAgICAgICAgPCFET0NUWVBFIGh0bWw+CiAgICAgICAgPGhlYWQ+CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgLz4KICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9sZWFmbGV0LzAuNy4zL2xlYWZsZXQuanMiPjwvc2NyaXB0PgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vYWpheC5nb29nbGVhcGlzLmNvbS9hamF4L2xpYnMvanF1ZXJ5LzEuMTEuMS9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxzY3JpcHQgc3JjPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9qcy9ib290c3RyYXAubWluLmpzIj48L3NjcmlwdD4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxzY3JpcHQgc3JjPSJodHRwczovL3Jhd2dpdGh1Yi5jb20vbHZvb2dkdC9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAvZGV2ZWxvcC9kaXN0L2xlYWZsZXQuYXdlc29tZS1tYXJrZXJzLmpzIj48L3NjcmlwdD4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9sZWFmbGV0Lm1hcmtlcmNsdXN0ZXIvMC40LjAvbGVhZmxldC5tYXJrZXJjbHVzdGVyLXNyYy5qcyI+PC9zY3JpcHQ+CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvbGVhZmxldC5tYXJrZXJjbHVzdGVyLzAuNC4wL2xlYWZsZXQubWFya2VyY2x1c3Rlci5qcyI+PC9zY3JpcHQ+CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2xlYWZsZXQvMC43LjMvbGVhZmxldC5jc3MiIC8+CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vYm9vdHN0cmFwLzMuMi4wL2Nzcy9ib290c3RyYXAubWluLmNzcyIgLz4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIiAvPgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2ZvbnQtYXdlc29tZS80LjEuMC9jc3MvZm9udC1hd2Vzb21lLm1pbi5jc3MiIC8+CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vcmF3Z2l0LmNvbS9sdm9vZ2R0L0xlYWZsZXQuYXdlc29tZS1tYXJrZXJzLzIuMC9kZXZlbG9wL2Rpc3QvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuY3NzIiAvPgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9sZWFmbGV0Lm1hcmtlcmNsdXN0ZXIvMC40LjAvTWFya2VyQ2x1c3Rlci5EZWZhdWx0LmNzcyIgLz4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvbGVhZmxldC5tYXJrZXJjbHVzdGVyLzAuNC4wL01hcmtlckNsdXN0ZXIuY3NzIiAvPgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIiAvPgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgPHN0eWxlPgoKICAgICAgICAgICAgaHRtbCwgYm9keSB7CiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICAgICAgICAgIG1hcmdpbjogMDsKICAgICAgICAgICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAjbWFwIHsKICAgICAgICAgICAgICAgIHBvc2l0aW9uOmFic29sdXRlOwogICAgICAgICAgICAgICAgdG9wOjA7CiAgICAgICAgICAgICAgICBib3R0b206MDsKICAgICAgICAgICAgICAgIHJpZ2h0OjA7CiAgICAgICAgICAgICAgICBsZWZ0OjA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIDwvc3R5bGU+CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgPHN0eWxlPiAjbWFwXzY5NzdmMTQ4ODhhNzQyNTY4NTdlZTZmZWE5MGFjZmUxIHsKICAgICAgICAgICAgICAgIHBvc2l0aW9uIDogcmVsYXRpdmU7CiAgICAgICAgICAgICAgICB3aWR0aCA6IDEwMC4wJTsKICAgICAgICAgICAgICAgIGhlaWdodDogMTAwLjAlOwogICAgICAgICAgICAgICAgbGVmdDogMC4wJTsKICAgICAgICAgICAgICAgIHRvcDogMC4wJTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgPC9zdHlsZT4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICA8L2hlYWQ+CiAgICAgICAgPGJvZHk+CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSIgPjwvZGl2PgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgIDwvYm9keT4KICAgICAgICA8c2NyaXB0PgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgc291dGhXZXN0ID0gTC5sYXRMbmcoLTkwLCAtMTgwKTsKICAgICAgICAgICAgdmFyIG5vcnRoRWFzdCA9IEwubGF0TG5nKDkwLCAxODApOwogICAgICAgICAgICB2YXIgYm91bmRzID0gTC5sYXRMbmdCb3VuZHMoc291dGhXZXN0LCBub3J0aEVhc3QpOwoKICAgICAgICAgICAgdmFyIG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSA9IEwubWFwKCdtYXBfNjk3N2YxNDg4OGE3NDI1Njg1N2VlNmZlYTkwYWNmZTEnLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZW50ZXI6WzM3Ljk4MjkyNzIsLTEuMTI1MTk0OF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b29tOiAxNCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJzOiBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyczogTC5DUlMuRVBTRzM4NTcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgdGlsZV9sYXllcl9iODI5ZTdiOTFmNzQ0ZDliYmQwZTJhM2Q4MGQ3MTlkZiA9IEwudGlsZUxheWVyKAogICAgICAgICAgICAgICAgJ2h0dHBzOi8vY2FydG9kYi1iYXNlbWFwcy17c30uZ2xvYmFsLnNzbC5mYXN0bHkubmV0L2xpZ2h0X2FsbC97en0ve3h9L3t5fS5wbmcnLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG1heFpvb206IDE4LAogICAgICAgICAgICAgICAgICAgIG1pblpvb206IDEsCiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRpb246ICcoYykgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy9jb3B5cmlnaHQiPk9wZW5TdHJlZXRNYXA8L2E+IGNvbnRyaWJ1dG9ycyAoYykgPGEgaHJlZj0iaHR0cDovL2NhcnRvZGIuY29tL2F0dHJpYnV0aW9ucyI+Q2FydG9EQjwvYT4sIENhcnRvREIgPGEgaHJlZiA9Imh0dHA6Ly9jYXJ0b2RiLmNvbS9hdHRyaWJ1dGlvbnMiPmF0dHJpYnV0aW9uczwvYT4nLAogICAgICAgICAgICAgICAgICAgIGRldGVjdFJldGluYTogZmFsc2UKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CgogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYWFhMzQ4MTYxMmNjNDZmZGJjMDNjMmVmMjFiM2I1YjUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45OTE1Mzg5LC0xLjEyNDQ5MjNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9jZjk2ZWRmNjI0ZWY0MDQyOTAzMzMwYjJhYTI1ZGVkYyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9hYWEzNDgxNjEyY2M0NmZkYmMwM2MyZWYyMWIzYjViNS5zZXRJY29uKGljb25fY2Y5NmVkZjYyNGVmNDA0MjkwMzMzMGIyYWEyNWRlZGMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NTVlYmY4ZmM2ZmQ0MWQ1OTE0OWU0MjI2MmU5NmFhYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNWFkOTcyM2FkOGY0YzQzYWYzYzRlYWEwMWEyMGE2YiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMDVhZDk3MjNhZDhmNGM0M2FmM2M0ZWFhMDFhMjBhNmIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFJvbmRhIGRlIExldmFudGUgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc1NWViZjhmYzZmZDQxZDU5MTQ5ZTQyMjYyZTk2YWFjLnNldENvbnRlbnQoaHRtbF8wNWFkOTcyM2FkOGY0YzQzYWYzYzRlYWEwMWEyMGE2Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2FhYTM0ODE2MTJjYzQ2ZmRiYzAzYzJlZjIxYjNiNWI1LmJpbmRQb3B1cChwb3B1cF83NTVlYmY4ZmM2ZmQ0MWQ1OTE0OWU0MjI2MmU5NmFhYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzM4ZWVmOTRjOWVjZDQ0YTM4MjNhZWY2MDEwNzE1ZmQ4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTkxMDM5NiwtMS4xMzQwMTA4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfNjk3N2YxNDg4OGE3NDI1Njg1N2VlNmZlYTkwYWNmZTEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNmM5MTcxMGJlYzI4NDQ1OThiN2I0MWIxYWRjZWFmMTYgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMzhlZWY5NGM5ZWNkNDRhMzgyM2FlZjYwMTA3MTVmZDguc2V0SWNvbihpY29uXzZjOTE3MTBiZWMyODQ0NTk4YjdiNDFiMWFkY2VhZjE2KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzg3ZjgzZTgyMDU1NDg2ODg5NTA5ZmFlMDI0ZGQxNDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTFlN2QzNDhhZWMxNDJmMTk1MGRjY2RkMDU5N2MxMzIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2UxZTdkMzQ4YWVjMTQyZjE5NTBkY2NkZDA1OTdjMTMyIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBBdmVuaWRhIEdlbmVyYWwgUHJpbW8gZGUgUml2ZXJhIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ODdmODNlODIwNTU0ODY4ODk1MDlmYWUwMjRkZDE0MS5zZXRDb250ZW50KGh0bWxfZTFlN2QzNDhhZWMxNDJmMTk1MGRjY2RkMDU5N2MxMzIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zOGVlZjk0YzllY2Q0NGEzODIzYWVmNjAxMDcxNWZkOC5iaW5kUG9wdXAocG9wdXBfNzg3ZjgzZTgyMDU1NDg2ODg5NTA5ZmFlMDI0ZGQxNDEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84OWZiMWRmYzFiMjE0MDJjYTExNzNkN2FkOTEzODliZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk5MjU5MjcsLTEuMTM5NTYzOV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzY5NzdmMTQ4ODhhNzQyNTY4NTdlZTZmZWE5MGFjZmUxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzQyZTIxZDU4YTY2NDQwOGZiZmRmNjA4NGNkODU2ZDU5ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzg5ZmIxZGZjMWIyMTQwMmNhMTE3M2Q3YWQ5MTM4OWJmLnNldEljb24oaWNvbl80MmUyMWQ1OGE2NjQ0MDhmYmZkZjYwODRjZDg1NmQ1OSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I4N2ViNDU2ZTNhODQ3YTJhN2Y4ODdkNzA4MmM0MmQzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc5NWE4MjQ2MWFhODQ5NjA4Y2FmNGRhMWZiODZiMmY5ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF83OTVhODI0NjFhYTg0OTYwOGNhZjRkYTFmYjg2YjJmOSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgUm9uZGEgTm9ydGUgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I4N2ViNDU2ZTNhODQ3YTJhN2Y4ODdkNzA4MmM0MmQzLnNldENvbnRlbnQoaHRtbF83OTVhODI0NjFhYTg0OTYwOGNhZjRkYTFmYjg2YjJmOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzg5ZmIxZGZjMWIyMTQwMmNhMTE3M2Q3YWQ5MTM4OWJmLmJpbmRQb3B1cChwb3B1cF9iODdlYjQ1NmUzYTg0N2EyYTdmODg3ZDcwODJjNDJkMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzhmZGM4ZjUzNDVjYTQ0N2FhMTA4MGI3OWRkMDQwOTZiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTg5Mzc3NiwtMS4xMzE1NDYxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfNjk3N2YxNDg4OGE3NDI1Njg1N2VlNmZlYTkwYWNmZTEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYmQxZTQ5NGNmMGM5NDcxODk2ZTEwMTNiZDdjNWE0MmYgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfOGZkYzhmNTM0NWNhNDQ3YWExMDgwYjc5ZGQwNDA5NmIuc2V0SWNvbihpY29uX2JkMWU0OTRjZjBjOTQ3MTg5NmUxMDEzYmQ3YzVhNDJmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDdhMDUyMTEzYjAwNDU0ZjlmODY2MTdhYTE0YTU0MWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzYxYjQyMTE1NDc4NDdiNTg2ZjMxYjMwNjUyOTlhOGYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzc2MWI0MjExNTQ3ODQ3YjU4NmYzMWIzMDY1Mjk5YThmIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBKYWltZSBJIGVsIENvbnF1aXN0YWRvciAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDdhMDUyMTEzYjAwNDU0ZjlmODY2MTdhYTE0YTU0MWYuc2V0Q29udGVudChodG1sXzc2MWI0MjExNTQ3ODQ3YjU4NmYzMWIzMDY1Mjk5YThmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOGZkYzhmNTM0NWNhNDQ3YWExMDgwYjc5ZGQwNDA5NmIuYmluZFBvcHVwKHBvcHVwXzA3YTA1MjExM2IwMDQ1NGY5Zjg2NjE3YWExNGE1NDFmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDE1ZWI1MTkzOThhNGY4YmI0Y2IyMWIzNTI3OTQxZmIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODc3NTU2LC0xLjEyOTA5NDNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8yMzk0OTVkMTM5Y2U0M2NhYTJiMmQ0NWNkN2ZhYWRjZSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9kMTVlYjUxOTM5OGE0ZjhiYjRjYjIxYjM1Mjc5NDFmYi5zZXRJY29uKGljb25fMjM5NDk1ZDEzOWNlNDNjYWEyYjJkNDVjZDdmYWFkY2UpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wODM3OTE5ZmRjNzQ0ZjcxYTMwYjU4MWViZTdmN2U5ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNmY3NmQzMGVmYTU0NDcxOWQ3MmExNjk4NzE1MTRmMSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYTZmNzZkMzBlZmE1NDQ3MTlkNzJhMTY5ODcxNTE0ZjEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIGNhbGxlIEVucmlxdWUgVmlsbGFyIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wODM3OTE5ZmRjNzQ0ZjcxYTMwYjU4MWViZTdmN2U5ZC5zZXRDb250ZW50KGh0bWxfYTZmNzZkMzBlZmE1NDQ3MTlkNzJhMTY5ODcxNTE0ZjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kMTVlYjUxOTM5OGE0ZjhiYjRjYjIxYjM1Mjc5NDFmYi5iaW5kUG9wdXAocG9wdXBfMDgzNzkxOWZkYzc0NGY3MWEzMGI1ODFlYmU3ZjdlOWQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85MzZjNTdmNjcwODU0NTZlYTAzZDRlYjc3MGE4NGQyMyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk5MjEsLTEuMTI5MDNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9kNjk1NWMyNTRlZDA0MGViYmE3OTc3MTkwYmRiOWNjNSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl85MzZjNTdmNjcwODU0NTZlYTAzZDRlYjc3MGE4NGQyMy5zZXRJY29uKGljb25fZDY5NTVjMjU0ZWQwNDBlYmJhNzk3NzE5MGJkYjljYzUpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zOTYzMzM1NzM3N2I0YWIwYjk2ZDFmM2ZmNGYxYmViMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMjcxYWU3ZTA1Yjc0YTRmOTdhOTE3ZmMxNGYyNjNkZiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYzI3MWFlN2UwNWI3NGE0Zjk3YTkxN2ZjMTRmMjYzZGYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFBsYXphIENpcmN1bGFyIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zOTYzMzM1NzM3N2I0YWIwYjk2ZDFmM2ZmNGYxYmViMi5zZXRDb250ZW50KGh0bWxfYzI3MWFlN2UwNWI3NGE0Zjk3YTkxN2ZjMTRmMjYzZGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85MzZjNTdmNjcwODU0NTZlYTAzZDRlYjc3MGE4NGQyMy5iaW5kUG9wdXAocG9wdXBfMzk2MzMzNTczNzdiNGFiMGI5NmQxZjNmZjRmMWJlYjIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jOGFjOTlhMjM2NjA0NjJkOGNlZDIyNmY3ZDM2OGNjYyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4NzEwNTQsLTEuMTM0OTYwMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzY5NzdmMTQ4ODhhNzQyNTY4NTdlZTZmZWE5MGFjZmUxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzhlNDFiYTkwZjE0YTQ3ZDA4MDhlNjkxYzQ1MzNjZDUzID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2M4YWM5OWEyMzY2MDQ2MmQ4Y2VkMjI2ZjdkMzY4Y2NjLnNldEljb24oaWNvbl84ZTQxYmE5MGYxNGE0N2QwODA4ZTY5MWM0NTMzY2Q1Myk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU4N2NmMTY3ZTY0NTRmMzViYjYwMzVlNzM3NzBjYWQ5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc1Mzk3NGRkNzBlYjQ0ZWQ5NTVkOWZhNzIzOWY4YTY5ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF83NTM5NzRkZDcwZWI0NGVkOTU1ZDlmYTcyMzlmOGE2OSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgU2FudGEgVGVyZXNhIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ODdjZjE2N2U2NDU0ZjM1YmI2MDM1ZTczNzcwY2FkOS5zZXRDb250ZW50KGh0bWxfNzUzOTc0ZGQ3MGViNDRlZDk1NWQ5ZmE3MjM5ZjhhNjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jOGFjOTlhMjM2NjA0NjJkOGNlZDIyNmY3ZDM2OGNjYy5iaW5kUG9wdXAocG9wdXBfNTg3Y2YxNjdlNjQ1NGYzNWJiNjAzNWU3Mzc3MGNhZDkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mN2U1Y2E2YzFjMTU0MjNjOWJlNDg1ZTQ1NDNiODFiNCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4OTg5OTUsLTEuMTM0OTU0M10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzY5NzdmMTQ4ODhhNzQyNTY4NTdlZTZmZWE5MGFjZmUxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2FmNDk0Yjg3NzNmNDRmYzhiMDY2MDIyZDVhNDk0YmExID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2Y3ZTVjYTZjMWMxNTQyM2M5YmU0ODVlNDU0M2I4MWI0LnNldEljb24oaWNvbl9hZjQ5NGI4NzczZjQ0ZmM4YjA2NjAyMmQ1YTQ5NGJhMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg1ZGY5NTA0ZTJiMDQyYjk5MWVhMzE0NDdjMjZjYWM4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y4NDA3MWUzMWNkZTQ0OGE5MjY5M2Y3ZTJlNTE4NmVlID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9mODQwNzFlMzFjZGU0NDhhOTI2OTNmN2UyZTUxODZlZSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgQ29uZGVzdGFibGUgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg1ZGY5NTA0ZTJiMDQyYjk5MWVhMzE0NDdjMjZjYWM4LnNldENvbnRlbnQoaHRtbF9mODQwNzFlMzFjZGU0NDhhOTI2OTNmN2UyZTUxODZlZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Y3ZTVjYTZjMWMxNTQyM2M5YmU0ODVlNDU0M2I4MWI0LmJpbmRQb3B1cChwb3B1cF84NWRmOTUwNGUyYjA0MmI5OTFlYTMxNDQ3YzI2Y2FjOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzEwZTA5NzIxOTRmODRjYTA4NjlmODc5Nzk3ZDg5ZTQ3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTkwNTE1LC0xLjEzNTEyODVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9iMzQ3MzY0MGQ5M2Y0ZTdiOWZjNTg0NTliN2I1MGE3ZSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8xMGUwOTcyMTk0Zjg0Y2EwODY5Zjg3OTc5N2Q4OWU0Ny5zZXRJY29uKGljb25fYjM0NzM2NDBkOTNmNGU3YjlmYzU4NDU5YjdiNTBhN2UpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mNTFlODYwMzcwYjU0M2YyYjBiMTI2YTI5NmY3YmRiMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNzVjNTRiODg1ZmU0OGRiYTRiMTI3YWJlZjYyYzEzMiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZDc1YzU0Yjg4NWZlNDhkYmE0YjEyN2FiZWY2MmMxMzIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIGNhbGxlIHBvZXRhIENhbm8gUGF0byAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjUxZTg2MDM3MGI1NDNmMmIwYjEyNmEyOTZmN2JkYjEuc2V0Q29udGVudChodG1sX2Q3NWM1NGI4ODVmZTQ4ZGJhNGIxMjdhYmVmNjJjMTMyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTBlMDk3MjE5NGY4NGNhMDg2OWY4Nzk3OTdkODllNDcuYmluZFBvcHVwKHBvcHVwX2Y1MWU4NjAzNzBiNTQzZjJiMGIxMjZhMjk2ZjdiZGIxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfY2JlOWI2Mzg4MWVlNDA1MmI0YTVmNzQ4MTBiYmQ5NDUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODc0MTgyLC0xLjEzMzYzNzVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8xYzVhNGFjZWNiYzQ0MjY3OWVkZDllODhjNzgwZTM3MCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9jYmU5YjYzODgxZWU0MDUyYjRhNWY3NDgxMGJiZDk0NS5zZXRJY29uKGljb25fMWM1YTRhY2VjYmM0NDI2NzllZGQ5ZTg4Yzc4MGUzNzApOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zZjI3MTZkNTAzYjY0NWQwOGE2OGUwY2UwNTEwYTI3YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81N2E3NDNjMGI5YWY0ZjNkYWMwZTUyNGExMTdmMDRmOSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNTdhNzQzYzBiOWFmNGYzZGFjMGU1MjRhMTE3ZjA0ZjkiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIEF5bGxvbiAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2YyNzE2ZDUwM2I2NDVkMDhhNjhlMGNlMDUxMGEyN2Euc2V0Q29udGVudChodG1sXzU3YTc0M2MwYjlhZjRmM2RhYzBlNTI0YTExN2YwNGY5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfY2JlOWI2Mzg4MWVlNDA1MmI0YTVmNzQ4MTBiYmQ5NDUuYmluZFBvcHVwKHBvcHVwXzNmMjcxNmQ1MDNiNjQ1ZDA4YTY4ZTBjZTA1MTBhMjdhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDBiODRhYzljZWFlNDk1Yzk4NmFmYTc1MTJjOTY0ZmYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45OTIyMzk5LC0xLjEzMDY1NDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl80OTY2ODg1NDM4N2E0NjFkOTdlYzNjMjc2YzRiN2U2ZCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9kMGI4NGFjOWNlYWU0OTVjOTg2YWZhNzUxMmM5NjRmZi5zZXRJY29uKGljb25fNDk2Njg4NTQzODdhNDYxZDk3ZWMzYzI3NmM0YjdlNmQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zYjFiMWY3YzMyYmI0MmI4ODhlYzYxMGYxZWRiYjNmZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yYmZjOGZmYjEzMWQ0ZjA0YTkwYWI5ZDRmNzEzNzhkMyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMmJmYzhmZmIxMzFkNGYwNGE5MGFiOWQ0ZjcxMzc4ZDMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIGNhbGxlam9uIGRlIEJ1cnJ1ZXpvIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYjFiMWY3YzMyYmI0MmI4ODhlYzYxMGYxZWRiYjNmZi5zZXRDb250ZW50KGh0bWxfMmJmYzhmZmIxMzFkNGYwNGE5MGFiOWQ0ZjcxMzc4ZDMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kMGI4NGFjOWNlYWU0OTVjOTg2YWZhNzUxMmM5NjRmZi5iaW5kUG9wdXAocG9wdXBfM2IxYjFmN2MzMmJiNDJiODg4ZWM2MTBmMWVkYmIzZmYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xMzA3MDhhMjI2ODA0ZGYxYmJjNWM1NjM1YzY5YjQ2ZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk5MDAzMywtMS4xMzg2MjQ2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfNjk3N2YxNDg4OGE3NDI1Njg1N2VlNmZlYTkwYWNmZTEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNGI1ZWMyMzhkN2JjNDI4ZWExODZkZTg4M2Y4MGQzNmQgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMTMwNzA4YTIyNjgwNGRmMWJiYzVjNTYzNWM2OWI0NmQuc2V0SWNvbihpY29uXzRiNWVjMjM4ZDdiYzQyOGVhMTg2ZGU4ODNmODBkMzZkKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDY5MTBhZTg2ZDUzNDAzYmI2ZGE1NmQwNjFjMzg1ZmMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2VlM2VhYTliY2FiNDUwOGE4YzY3MjBiZmY5NDYxZDEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzdlZTNlYWE5YmNhYjQ1MDhhOGM2NzIwYmZmOTQ2MWQxIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBJc2FhYyBBbGJlbml6IChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kNjkxMGFlODZkNTM0MDNiYjZkYTU2ZDA2MWMzODVmYy5zZXRDb250ZW50KGh0bWxfN2VlM2VhYTliY2FiNDUwOGE4YzY3MjBiZmY5NDYxZDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xMzA3MDhhMjI2ODA0ZGYxYmJjNWM1NjM1YzY5YjQ2ZC5iaW5kUG9wdXAocG9wdXBfZDY5MTBhZTg2ZDUzNDAzYmI2ZGE1NmQwNjFjMzg1ZmMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82NGY3NTlmOTFkNzc0NTJlOWM5ZDc2MDMyOGZmZWRlYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk5MzU2NjIsLTEuMTM2MDM1N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzY5NzdmMTQ4ODhhNzQyNTY4NTdlZTZmZWE5MGFjZmUxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2Y5MzJhOTlkM2JjNzQ4YTI4MWZjZDAyZjhkZWNlYjkxID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzY0Zjc1OWY5MWQ3NzQ1MmU5YzlkNzYwMzI4ZmZlZGViLnNldEljb24oaWNvbl9mOTMyYTk5ZDNiYzc0OGEyODFmY2QwMmY4ZGVjZWI5MSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM2N2E3MzI2YjVjYjQ3ZjJiMWZhNWIxMjg0ZDM5MDg4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZjNGFlNGMxMWJmMTQyYTRhOGQwZWYzYzRhM2M3ZGIwID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9mYzRhZTRjMTFiZjE0MmE0YThkMGVmM2M0YTNjN2RiMCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgY2FsbGUgTWFyIE1lbm9yIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNjdhNzMyNmI1Y2I0N2YyYjFmYTViMTI4NGQzOTA4OC5zZXRDb250ZW50KGh0bWxfZmM0YWU0YzExYmYxNDJhNGE4ZDBlZjNjNGEzYzdkYjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82NGY3NTlmOTFkNzc0NTJlOWM5ZDc2MDMyOGZmZWRlYi5iaW5kUG9wdXAocG9wdXBfMzY3YTczMjZiNWNiNDdmMmIxZmE1YjEyODRkMzkwODgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zYjI1MDBjYWY1OGU0MzllOWVkMWIzZTc5YWUzMDI1MCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk5NDEzMjUsLTEuMTM0MDE4NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzY5NzdmMTQ4ODhhNzQyNTY4NTdlZTZmZWE5MGFjZmUxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzAyZDQxZTY1NTc3NjQ2ZDNiYzExYjYwZDY0NjIyNmE3ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzNiMjUwMGNhZjU4ZTQzOWU5ZWQxYjNlNzlhZTMwMjUwLnNldEljb24oaWNvbl8wMmQ0MWU2NTU3NzY0NmQzYmMxMWI2MGQ2NDYyMjZhNyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFhNzZlM2YwMmI0ODQ3MWFhYWQzMjM3ZTY5OTRhZWFmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E0ZDI1YTBkNGZmZTRjZmRiYmMzYjM1NzQ3YmI5MWY4ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9hNGQyNWEwZDRmZmU0Y2ZkYmJjM2IzNTc0N2JiOTFmOCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgY2FsbGUgQXVkaXRvcml1bSAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWE3NmUzZjAyYjQ4NDcxYWFhZDMyMzdlNjk5NGFlYWYuc2V0Q29udGVudChodG1sX2E0ZDI1YTBkNGZmZTRjZmRiYmMzYjM1NzQ3YmI5MWY4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfM2IyNTAwY2FmNThlNDM5ZTllZDFiM2U3OWFlMzAyNTAuYmluZFBvcHVwKHBvcHVwXzFhNzZlM2YwMmI0ODQ3MWFhYWQzMjM3ZTY5OTRhZWFmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNjU1YTYxMDQ0ZmYwNDE2NDlkOTJlOGUzNzZmYTAzODggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45OTM5Nzg5LC0xLjEzMzMxMjNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9iOGM3ZDk1OGUwMDI0MjViOGQ1ZWMzODgzZDI4ZDM5YiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl82NTVhNjEwNDRmZjA0MTY0OWQ5MmU4ZTM3NmZhMDM4OC5zZXRJY29uKGljb25fYjhjN2Q5NThlMDAyNDI1YjhkNWVjMzg4M2QyOGQzOWIpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNjU5ZjA5M2I1NDU0Y2RiOWIzMGEzMTYzMmNjMjQxNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mNmViYTk4MjgxZDM0ZTE0YTQ4YTI3NDE3ZGIwMTI5MiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZjZlYmE5ODI4MWQzNGUxNGE0OGEyNzQxN2RiMDEyOTIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIGNhbGxlIFRvcnJlIGRlIGxhIE1hcnF1ZXNhIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNjU5ZjA5M2I1NDU0Y2RiOWIzMGEzMTYzMmNjMjQxNS5zZXRDb250ZW50KGh0bWxfZjZlYmE5ODI4MWQzNGUxNGE0OGEyNzQxN2RiMDEyOTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82NTVhNjEwNDRmZjA0MTY0OWQ5MmU4ZTM3NmZhMDM4OC5iaW5kUG9wdXAocG9wdXBfMzY1OWYwOTNiNTQ1NGNkYjliMzBhMzE2MzJjYzI0MTUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yOTMwMjU0MzcxNzg0NTM2OGJlZWE3NzdmNDJjY2ZhZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk5NTUxMDIsLTEuMTI5OTIyOF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzY5NzdmMTQ4ODhhNzQyNTY4NTdlZTZmZWE5MGFjZmUxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2NiMGNmNmNiMjIxNDQxNTQ5MDNiNmYxNWFmOGJhNjljID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzI5MzAyNTQzNzE3ODQ1MzY4YmVlYTc3N2Y0MmNjZmFmLnNldEljb24oaWNvbl9jYjBjZjZjYjIyMTQ0MTU0OTAzYjZmMTVhZjhiYTY5Yyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ2OTk5NGU3NWNmNjQ1NzdhZWRiNGRkMjQxYzI5OWEyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E0NjQxOTFkNGJkMDQxOTQ5NzZlNjY2Mzc1ZWQwN2I2ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9hNDY0MTkxZDRiZDA0MTk0OTc2ZTY2NjM3NWVkMDdiNiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgRHIuIEp1bGlvIExvcGV6IEFtYml0IChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80Njk5OTRlNzVjZjY0NTc3YWVkYjRkZDI0MWMyOTlhMi5zZXRDb250ZW50KGh0bWxfYTQ2NDE5MWQ0YmQwNDE5NDk3NmU2NjYzNzVlZDA3YjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yOTMwMjU0MzcxNzg0NTM2OGJlZWE3NzdmNDJjY2ZhZi5iaW5kUG9wdXAocG9wdXBfNDY5OTk0ZTc1Y2Y2NDU3N2FlZGI0ZGQyNDFjMjk5YTIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iNzk3YmYwNWMxMjI0YjZmOTZjOTBmNDY1OTI2ZTI3MSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk5NjMxMzYsLTEuMTMwOTIxM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzY5NzdmMTQ4ODhhNzQyNTY4NTdlZTZmZWE5MGFjZmUxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2YwODU0MzU2OTNiYzQ1MTVhYWEwMjRlMWEwMTY1MWEwID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2I3OTdiZjA1YzEyMjRiNmY5NmM5MGY0NjU5MjZlMjcxLnNldEljb24oaWNvbl9mMDg1NDM1NjkzYmM0NTE1YWFhMDI0ZTFhMDE2NTFhMCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhkOWZlMWM1YzMyMDQyMTU5ZTc5ZGJmY2U2NTgwZDFmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIxODdkY2QyNDA4MzQ2OTA4NjgxOTFkOGFlYjVhZGU3ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8yMTg3ZGNkMjQwODM0NjkwODY4MTkxZDhhZWI1YWRlNyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQXZlbmlkYSBNYXJxdWVzIGRlIExvcyBWZWxleiAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGQ5ZmUxYzVjMzIwNDIxNTllNzlkYmZjZTY1ODBkMWYuc2V0Q29udGVudChodG1sXzIxODdkY2QyNDA4MzQ2OTA4NjgxOTFkOGFlYjVhZGU3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYjc5N2JmMDVjMTIyNGI2Zjk2YzkwZjQ2NTkyNmUyNzEuYmluZFBvcHVwKHBvcHVwXzhkOWZlMWM1YzMyMDQyMTU5ZTc5ZGJmY2U2NTgwZDFmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMWNiOTJjMzIxMjVhNGU1Nzk0ZGNjZjk3MTA0MGExNTQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45OTY0Nzg3LC0xLjEyOTEyMDldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9hN2NiYjZlOGVmZmM0MDMyOThmMTg0NmQ0MjY4MDdmNSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8xY2I5MmMzMjEyNWE0ZTU3OTRkY2NmOTcxMDQwYTE1NC5zZXRJY29uKGljb25fYTdjYmI2ZThlZmZjNDAzMjk4ZjE4NDZkNDI2ODA3ZjUpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82OWFlY2RmNjAyYmY0MDk2OGJmYzBjYjA1MjA1NmNkNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNzExYmFkMWE3Y2E0ODJjODAxYTIzMTQ2NmZmMDdmMSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZDcxMWJhZDFhN2NhNDgyYzgwMWEyMzE0NjZmZjA3ZjEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIERvY3RvciBBbG9uc28gZGUgRXNwZWpvIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82OWFlY2RmNjAyYmY0MDk2OGJmYzBjYjA1MjA1NmNkNy5zZXRDb250ZW50KGh0bWxfZDcxMWJhZDFhN2NhNDgyYzgwMWEyMzE0NjZmZjA3ZjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xY2I5MmMzMjEyNWE0ZTU3OTRkY2NmOTcxMDQwYTE1NC5iaW5kUG9wdXAocG9wdXBfNjlhZWNkZjYwMmJmNDA5NjhiZmMwY2IwNTIwNTZjZDcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85OTgwNjU2YWNkZjE0NWMxOWVjZDBiZTEzMDU2ZTM5OSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk5MjIzOTksLTEuMTMwNjU0NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzY5NzdmMTQ4ODhhNzQyNTY4NTdlZTZmZWE5MGFjZmUxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzM3NDBiMzA4ZmZmYTRjMDdiMzcxYWI1OWI3YzkxOTEyID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzk5ODA2NTZhY2RmMTQ1YzE5ZWNkMGJlMTMwNTZlMzk5LnNldEljb24oaWNvbl8zNzQwYjMwOGZmZmE0YzA3YjM3MWFiNTliN2M5MTkxMik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE0OWVlOWI2OWIyNDRjZWQ4ODc5Nzc4MzExYjUzOTY3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzcxOTJhMzFmOTI4ODRlNjZhNDQ0M2QzZTY5NjQ0NzRmID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF83MTkyYTMxZjkyODg0ZTY2YTQ0NDNkM2U2OTY0NDc0ZiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgRG9jdG9yIEpvc2UgVGFwaWEgU2FueiAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTQ5ZWU5YjY5YjI0NGNlZDg4Nzk3NzgzMTFiNTM5Njcuc2V0Q29udGVudChodG1sXzcxOTJhMzFmOTI4ODRlNjZhNDQ0M2QzZTY5NjQ0NzRmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOTk4MDY1NmFjZGYxNDVjMTllY2QwYmUxMzA1NmUzOTkuYmluZFBvcHVwKHBvcHVwXzE0OWVlOWI2OWIyNDRjZWQ4ODc5Nzc4MzExYjUzOTY3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYWYzNjVkYjFmNjgzNGY3YTljMjE3Y2YyNzMyNzgxZjEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODY5MzIyLC0xLjEzMjcyOTldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9iYTYzODE5YjI3YzI0ZTgwOTc4ZjU1YjJiOWQxMjI4ZCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9hZjM2NWRiMWY2ODM0ZjdhOWMyMTdjZjI3MzI3ODFmMS5zZXRJY29uKGljb25fYmE2MzgxOWIyN2MyNGU4MDk3OGY1NWIyYjlkMTIyOGQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMTU2NWY1NTVhNDQ0NmI1OGM4OTIyMTRkYTBiNzJkOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kMTk5ZGIyZjAxZTg0NzgzYmVhMjUxMzE5YzE3MDRkZiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZDE5OWRiMmYwMWU4NDc4M2JlYTI1MTMxOWMxNzA0ZGYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhcnJpbCBNYW5yZXNhIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMTU2NWY1NTVhNDQ0NmI1OGM4OTIyMTRkYTBiNzJkOS5zZXRDb250ZW50KGh0bWxfZDE5OWRiMmYwMWU4NDc4M2JlYTI1MTMxOWMxNzA0ZGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hZjM2NWRiMWY2ODM0ZjdhOWMyMTdjZjI3MzI3ODFmMS5iaW5kUG9wdXAocG9wdXBfYjE1NjVmNTU1YTQ0NDZiNThjODkyMjE0ZGEwYjcyZDkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hZjM2ODc5MTVkZDQ0MWY3YmQyN2U5NmQ4ZTE0YzFlYyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4ODkyMDcsLTEuMTI2NDg5Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzY5NzdmMTQ4ODhhNzQyNTY4NTdlZTZmZWE5MGFjZmUxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2RlZjZmMjA4ODMyMDRhMzNiM2MwMTk5ZTEwMjQwZWE3ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2FmMzY4NzkxNWRkNDQxZjdiZDI3ZTk2ZDhlMTRjMWVjLnNldEljb24oaWNvbl9kZWY2ZjIwODgzMjA0YTMzYjNjMDE5OWUxMDI0MGVhNyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBiZTQ5MDcwMjk0NzQzNzI5ODdhOGEyNGVhM2E4MjZlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I0ZTdiNDM4MWQ4NTQwNTk5ODVkYmU0NTg5MTE2MDJlID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9iNGU3YjQzODFkODU0MDU5OTg1ZGJlNDU4OTExNjAyZSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgQW50b25pbyBQdWlnIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wYmU0OTA3MDI5NDc0MzcyOTg3YThhMjRlYTNhODI2ZS5zZXRDb250ZW50KGh0bWxfYjRlN2I0MzgxZDg1NDA1OTk4NWRiZTQ1ODkxMTYwMmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hZjM2ODc5MTVkZDQ0MWY3YmQyN2U5NmQ4ZTE0YzFlYy5iaW5kUG9wdXAocG9wdXBfMGJlNDkwNzAyOTQ3NDM3Mjk4N2E4YTI0ZWEzYTgyNmUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yNWM0ZjQyNTQwODE0NzdjYjc2MDdiMWVlNWM2NDEzNCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4ODIwMSwtMS4xMjc4MzMzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfNjk3N2YxNDg4OGE3NDI1Njg1N2VlNmZlYTkwYWNmZTEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fOGFlYWExODlhMDk4NDhjZDkzYWVmMzcyYWMxMDlmM2YgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMjVjNGY0MjU0MDgxNDc3Y2I3NjA3YjFlZTVjNjQxMzQuc2V0SWNvbihpY29uXzhhZWFhMTg5YTA5ODQ4Y2Q5M2FlZjM3MmFjMTA5ZjNmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWUwMTI3NzJjZjU3NDk1NGE5NDNjNTAyNGQzYTc0NDIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmMyYWY5YmVlMDcwNDZhODk5NmY0ZGYxNzM4NDUxMWYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2JjMmFmOWJlZTA3MDQ2YTg5OTZmNGRmMTczODQ1MTFmIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBTYW4gSWduYWNpbyBkZSBMb3lvbGEgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzllMDEyNzcyY2Y1NzQ5NTRhOTQzYzUwMjRkM2E3NDQyLnNldENvbnRlbnQoaHRtbF9iYzJhZjliZWUwNzA0NmE4OTk2ZjRkZjE3Mzg0NTExZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzI1YzRmNDI1NDA4MTQ3N2NiNzYwN2IxZWU1YzY0MTM0LmJpbmRQb3B1cChwb3B1cF85ZTAxMjc3MmNmNTc0OTU0YTk0M2M1MDI0ZDNhNzQ0Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzVkY2FmMTIyZTFhNjRhZjY4N2Y3Y2FjNmE1Zjg5MTdhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTg5NTkzMywtMS4xMjYxNjc1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfNjk3N2YxNDg4OGE3NDI1Njg1N2VlNmZlYTkwYWNmZTEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZjA1YWI2MDllODNhNDUwMWI3YTYxOTM2ODhlMTMxNzEgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNWRjYWYxMjJlMWE2NGFmNjg3ZjdjYWM2YTVmODkxN2Euc2V0SWNvbihpY29uX2YwNWFiNjA5ZTgzYTQ1MDFiN2E2MTkzNjg4ZTEzMTcxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTkyZDgyNjNlZTJiNDQ5OGIwZjZhNjc1MzY5MjM3MGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2VmZTljN2MzZjMwNDRhNTkyYmJlODQxMDFmZmVmOWIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzdlZmU5YzdjM2YzMDQ0YTU5MmJiZTg0MTAxZmZlZjliIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBTYW4gTWFydGluIGRlIFBvcnJlcyAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTkyZDgyNjNlZTJiNDQ5OGIwZjZhNjc1MzY5MjM3MGYuc2V0Q29udGVudChodG1sXzdlZmU5YzdjM2YzMDQ0YTU5MmJiZTg0MTAxZmZlZjliKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNWRjYWYxMjJlMWE2NGFmNjg3ZjdjYWM2YTVmODkxN2EuYmluZFBvcHVwKHBvcHVwX2U5MmQ4MjYzZWUyYjQ0OThiMGY2YTY3NTM2OTIzNzBmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNDMxZTgwYjc1MDUyNGY0OTk5OTczYjMyNjliYjlkZTMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODkzODI2LC0xLjEyNjY1NjFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl85NmFiOGM3YWE3NTg0ZmY4OGYxNzk3NzFiMmNjMDQwMSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl80MzFlODBiNzUwNTI0ZjQ5OTk5NzNiMzI2OWJiOWRlMy5zZXRJY29uKGljb25fOTZhYjhjN2FhNzU4NGZmODhmMTc5NzcxYjJjYzA0MDEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNzBjNTc3NDgwYzU0MzQ0OTI0N2QxNmEwMjNiYWVhNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zYzc4OTk0ZjYyMTY0NTY2YjkyNzQ3OWZmNzFmNDdkZSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfM2M3ODk5NGY2MjE2NDU2NmI5Mjc0NzlmZjcxZjQ3ZGUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIEphY29ibyBkZSBsYXMgTGV5ZXMgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI3MGM1Nzc0ODBjNTQzNDQ5MjQ3ZDE2YTAyM2JhZWE1LnNldENvbnRlbnQoaHRtbF8zYzc4OTk0ZjYyMTY0NTY2YjkyNzQ3OWZmNzFmNDdkZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQzMWU4MGI3NTA1MjRmNDk5OTk3M2IzMjY5YmI5ZGUzLmJpbmRQb3B1cChwb3B1cF8yNzBjNTc3NDgwYzU0MzQ0OTI0N2QxNmEwMjNiYWVhNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzZiY2U5NjdjMGE0MzRlNmI5ZWEyNjNmY2UzYjdkMWFjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTg3NTIzNSwtMS4xMjc1NDk5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfNjk3N2YxNDg4OGE3NDI1Njg1N2VlNmZlYTkwYWNmZTEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNjQzYTUyMWM3MGVmNGNlMjhmZGI5MGI3YWMyNjY5ZjIgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNmJjZTk2N2MwYTQzNGU2YjllYTI2M2ZjZTNiN2QxYWMuc2V0SWNvbihpY29uXzY0M2E1MjFjNzBlZjRjZTI4ZmRiOTBiN2FjMjY2OWYyKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODExN2UxZTgyYjk4NGFlZDg3MjdkOTgwYTY4ZTM1YzcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjQwOWZkYWM0MzZmNDljN2EzMmQxOTMyZDFkNzI3ZDEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2Y0MDlmZGFjNDM2ZjQ5YzdhMzJkMTkzMmQxZDcyN2QxIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBkZSBsYSBNZXJjZWQgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgxMTdlMWU4MmI5ODRhZWQ4NzI3ZDk4MGE2OGUzNWM3LnNldENvbnRlbnQoaHRtbF9mNDA5ZmRhYzQzNmY0OWM3YTMyZDE5MzJkMWQ3MjdkMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzZiY2U5NjdjMGE0MzRlNmI5ZWEyNjNmY2UzYjdkMWFjLmJpbmRQb3B1cChwb3B1cF84MTE3ZTFlODJiOTg0YWVkODcyN2Q5ODBhNjhlMzVjNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzBmNjAwNGVkNzViYzQxMWNiMTU3MGVhODk5NDUwYTBiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTkyNTUzOSwtMS4xMzMzNzddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9lZjU0M2U2ZGUzNjY0YWU1OWYxNmI0YTlmYzkzMjY1ZSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8wZjYwMDRlZDc1YmM0MTFjYjE1NzBlYTg5OTQ1MGEwYi5zZXRJY29uKGljb25fZWY1NDNlNmRlMzY2NGFlNTlmMTZiNGE5ZmM5MzI2NWUpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jNDZiMmNlZDc4MGU0ZjE0YWEyYjlhMGRiNDc5MWMyYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80ODAwYWFmZjdhNGY0NGZjOWFhNGU2MzRmYmQ3ZjJkZCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNDgwMGFhZmY3YTRmNDRmYzlhYTRlNjM0ZmJkN2YyZGQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIGNhbGxlIGRvY3RvciBSb21hbiBBbGJlcmNhIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jNDZiMmNlZDc4MGU0ZjE0YWEyYjlhMGRiNDc5MWMyYS5zZXRDb250ZW50KGh0bWxfNDgwMGFhZmY3YTRmNDRmYzlhYTRlNjM0ZmJkN2YyZGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wZjYwMDRlZDc1YmM0MTFjYjE1NzBlYTg5OTQ1MGEwYi5iaW5kUG9wdXAocG9wdXBfYzQ2YjJjZWQ3ODBlNGYxNGFhMmI5YTBkYjQ3OTFjMmEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81OTYxOTM4ODY3ZDA0MmQwYWY1MGYwMWViOWU5MjllOCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk5MjA1ODIsLTEuMTM1NjIwMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzY5NzdmMTQ4ODhhNzQyNTY4NTdlZTZmZWE5MGFjZmUxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzc4N2JhODk0OWRkMzRlMjE4YWYyZjBmZTNjMjhmNGY1ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzU5NjE5Mzg4NjdkMDQyZDBhZjUwZjAxZWI5ZTkyOWU4LnNldEljb24oaWNvbl83ODdiYTg5NDlkZDM0ZTIxOGFmMmYwZmUzYzI4ZjRmNSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBlYjVkZTJiYTE2MDQ4NjE4NDZmYzc5NWM1MmI3MTc0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VjMmRlMzU5ZTkwNDRmMDc4ZDQyZTYyOGM0YmM3ZGIyID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9lYzJkZTM1OWU5MDQ0ZjA3OGQ0MmU2MjhjNGJjN2RiMiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgY2FsbGUgSm9hcXVpbiBCbHVtZSAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGViNWRlMmJhMTYwNDg2MTg0NmZjNzk1YzUyYjcxNzQuc2V0Q29udGVudChodG1sX2VjMmRlMzU5ZTkwNDRmMDc4ZDQyZTYyOGM0YmM3ZGIyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTk2MTkzODg2N2QwNDJkMGFmNTBmMDFlYjllOTI5ZTguYmluZFBvcHVwKHBvcHVwXzBlYjVkZTJiYTE2MDQ4NjE4NDZmYzc5NWM1MmI3MTc0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNmFkOWMxNWVmZWYwNGUxN2FjODgwNzhiYzRjNTM2ZjYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODg1MjgyLC0xLjEzMjc1NjVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9mYzYxMzJlNDYwY2I0ZThiYWJkOGVkZTI1ZjMxYzM2NyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl82YWQ5YzE1ZWZlZjA0ZTE3YWM4ODA3OGJjNGM1MzZmNi5zZXRJY29uKGljb25fZmM2MTMyZTQ2MGNiNGU4YmFiZDhlZGUyNWYzMWMzNjcpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ZjVhZjE1NDNkMGU0MDNmODEzNDMyODAyNWU2MTczZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hYzU3NzNlODQxMTI0ZjMwOWM4MjJjMjQ0NmUxMDlmMiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYWM1NzczZTg0MTEyNGYzMDljODIyYzI0NDZlMTA5ZjIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIGNhbGxlIFBvcnRpbGxvIGRlIFNhbiBBbnRvbmlvIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ZjVhZjE1NDNkMGU0MDNmODEzNDMyODAyNWU2MTczZi5zZXRDb250ZW50KGh0bWxfYWM1NzczZTg0MTEyNGYzMDljODIyYzI0NDZlMTA5ZjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82YWQ5YzE1ZWZlZjA0ZTE3YWM4ODA3OGJjNGM1MzZmNi5iaW5kUG9wdXAocG9wdXBfN2Y1YWYxNTQzZDBlNDAzZjgxMzQzMjgwMjVlNjE3M2YpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82MDZiNGY0YzUxNmE0NTVjYWEzYWJjOGVmZGY2Mzg3NiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk5MTkzOTYsLTEuMTM0NDQ5N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzY5NzdmMTQ4ODhhNzQyNTY4NTdlZTZmZWE5MGFjZmUxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2U3OWFhMzY3NjgyMjRiZmViZDE4ZGFiMzQ2ZTZiNmE1ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzYwNmI0ZjRjNTE2YTQ1NWNhYTNhYmM4ZWZkZjYzODc2LnNldEljb24oaWNvbl9lNzlhYTM2NzY4MjI0YmZlYmQxOGRhYjM0NmU2YjZhNSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UzNzE3YTJkOWY5YzQyZjViNGNkYjNmMjViYmIwZDEwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RkMjZlNWI1OGIzMTQ2N2E4OGVjMzE2ZTkzNmMzMzhmID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9kZDI2ZTViNThiMzE0NjdhODhlYzMxNmU5MzZjMzM4ZiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgY2FsbGUgU2llcnJhIGRlIEFzY295IChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMzcxN2EyZDlmOWM0MmY1YjRjZGIzZjI1YmJiMGQxMC5zZXRDb250ZW50KGh0bWxfZGQyNmU1YjU4YjMxNDY3YTg4ZWMzMTZlOTM2YzMzOGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82MDZiNGY0YzUxNmE0NTVjYWEzYWJjOGVmZGY2Mzg3Ni5iaW5kUG9wdXAocG9wdXBfZTM3MTdhMmQ5ZjljNDJmNWI0Y2RiM2YyNWJiYjBkMTApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81MzUzZjAwYTUxOTY0MjQ4YTc5NDNkNDIwZGE2YTM3NiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4OTM1MTksLTEuMTMxMDI4Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzY5NzdmMTQ4ODhhNzQyNTY4NTdlZTZmZWE5MGFjZmUxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzUzZmEzYjAwZWI0YTRjNTY4YWVmOTUwZWE4ODdlNTIyID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzUzNTNmMDBhNTE5NjQyNDhhNzk0M2Q0MjBkYTZhMzc2LnNldEljb24oaWNvbl81M2ZhM2IwMGViNGE0YzU2OGFlZjk1MGVhODg3ZTUyMik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NlZmZmZTI4Y2ExZTQ0NDM4YmI4MTZkZjNmMDdhMDY1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZhODRjMTg5YjYxNTQ1Y2RhOWE0YTIxZGIyNzYyNTY4ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF82YTg0YzE4OWI2MTU0NWNkYTlhNGEyMWRiMjc2MjU2OCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgQ2FybG9zIElJSSAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2VmZmZlMjhjYTFlNDQ0MzhiYjgxNmRmM2YwN2EwNjUuc2V0Q29udGVudChodG1sXzZhODRjMTg5YjYxNTQ1Y2RhOWE0YTIxZGIyNzYyNTY4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTM1M2YwMGE1MTk2NDI0OGE3OTQzZDQyMGRhNmEzNzYuYmluZFBvcHVwKHBvcHVwX2NlZmZmZTI4Y2ExZTQ0NDM4YmI4MTZkZjNmMDdhMDY1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfN2I4YWRhNWIzNjBkNDIyYThlMDEzZWU0YmNhMThlMGEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45OTE4OTAxLC0xLjEzNDcyMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzY5NzdmMTQ4ODhhNzQyNTY4NTdlZTZmZWE5MGFjZmUxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzViMDQ2YzdmOGZhNTQwOGE4YTA3ZjMwOWRjYWVlNTQwID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzdiOGFkYTViMzYwZDQyMmE4ZTAxM2VlNGJjYTE4ZTBhLnNldEljb24oaWNvbl81YjA0NmM3ZjhmYTU0MDhhOGEwN2YzMDlkY2FlZTU0MCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NhMmVlOGYzNjIzYzQ3ZmFiZjVjMTNlZDk1MWU3MDYyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk5MmQyODRkNWJhYTQ1NjQ5YWFmNTc1YWU2MjJiMjZmID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF85OTJkMjg0ZDViYWE0NTY0OWFhZjU3NWFlNjIyYjI2ZiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgY2FsbGUgU2FudGEgTWFydGEgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NhMmVlOGYzNjIzYzQ3ZmFiZjVjMTNlZDk1MWU3MDYyLnNldENvbnRlbnQoaHRtbF85OTJkMjg0ZDViYWE0NTY0OWFhZjU3NWFlNjIyYjI2Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzdiOGFkYTViMzYwZDQyMmE4ZTAxM2VlNGJjYTE4ZTBhLmJpbmRQb3B1cChwb3B1cF9jYTJlZThmMzYyM2M0N2ZhYmY1YzEzZWQ5NTFlNzA2Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzY2MmZlZDhlYzFkYTQ5YmM5OWQ5ZWNkNjdhMjU4ZDE1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTkxMzE4NCwtMS4xMzI4NjVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9jN2Q0ZmFkOGIwODk0YzE5YWMyYzliYmVjODU3YTc5YyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl82NjJmZWQ4ZWMxZGE0OWJjOTlkOWVjZDY3YTI1OGQxNS5zZXRJY29uKGljb25fYzdkNGZhZDhiMDg5NGMxOWFjMmM5YmJlYzg1N2E3OWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jNjJiMjBlYmRjY2M0ODY2YTlmOGVkODY1MDcxYzRhMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80Y2ZlZTI5YzcyODc0MjNkYTk1YzNlYTU5MWI4M2QyMSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNGNmZWUyOWM3Mjg3NDIzZGE5NWMzZWE1OTFiODNkMjEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIEJhdGFsbGEgZGUgbGFzIEZsb3JlcyAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzYyYjIwZWJkY2NjNDg2NmE5ZjhlZDg2NTA3MWM0YTAuc2V0Q29udGVudChodG1sXzRjZmVlMjljNzI4NzQyM2RhOTVjM2VhNTkxYjgzZDIxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNjYyZmVkOGVjMWRhNDliYzk5ZDllY2Q2N2EyNThkMTUuYmluZFBvcHVwKHBvcHVwX2M2MmIyMGViZGNjYzQ4NjZhOWY4ZWQ4NjUwNzFjNGEwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTJjMDZjZTBhMjliNDM0MTlhYjUxYzdmYzhiZTA4NjUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45OTA3Mzc3LC0xLjEzMDY3NzFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8zOWE3NzAyNDE5NTI0ZGFjYjg0MjYzZGEwMDk2MGU5MyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl85MmMwNmNlMGEyOWI0MzQxOWFiNTFjN2ZjOGJlMDg2NS5zZXRJY29uKGljb25fMzlhNzcwMjQxOTUyNGRhY2I4NDI2M2RhMDA5NjBlOTMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iZmZlMWIyNzI1NzQ0YjNlOWVmZTAxNjk2MGUzZTFjYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZmUxZGYzMDUxMjM0YmViODJhMzAyYjc1YjczYjg2ZiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfOWZlMWRmMzA1MTIzNGJlYjgyYTMwMmI3NWI3M2I4NmYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIGNhbGxlIExlcGFudG8gKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JmZmUxYjI3MjU3NDRiM2U5ZWZlMDE2OTYwZTNlMWNhLnNldENvbnRlbnQoaHRtbF85ZmUxZGYzMDUxMjM0YmViODJhMzAyYjc1YjczYjg2Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzkyYzA2Y2UwYTI5YjQzNDE5YWI1MWM3ZmM4YmUwODY1LmJpbmRQb3B1cChwb3B1cF9iZmZlMWIyNzI1NzQ0YjNlOWVmZTAxNjk2MGUzZTFjYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzhiMzA1NTBmNzhmYjRiMGI4OTg3NjNmYmRkYzUwYjQwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTkzOTg0MSwtMS4xMzI4MjE5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfNjk3N2YxNDg4OGE3NDI1Njg1N2VlNmZlYTkwYWNmZTEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fOWVkODQ5ZDViNmRkNGY0MTlhNGU1NDgxMThjYWZjYjMgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfOGIzMDU1MGY3OGZiNGIwYjg5ODc2M2ZiZGRjNTBiNDAuc2V0SWNvbihpY29uXzllZDg0OWQ1YjZkZDRmNDE5YTRlNTQ4MTE4Y2FmY2IzKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjhmZGE2NmIyMWNhNDQwOGE2NWJhYzkxZTc4N2Y3NzMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2EwZmViMjM2ZjVjNDRhYjlmYTAzOGIzZWM2MTFlMTYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzNhMGZlYjIzNmY1YzQ0YWI5ZmEwMzhiM2VjNjExZTE2IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBjYWxsZSBKb3NlIEJhbGxlc3RlciAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjhmZGE2NmIyMWNhNDQwOGE2NWJhYzkxZTc4N2Y3NzMuc2V0Q29udGVudChodG1sXzNhMGZlYjIzNmY1YzQ0YWI5ZmEwMzhiM2VjNjExZTE2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOGIzMDU1MGY3OGZiNGIwYjg5ODc2M2ZiZGRjNTBiNDAuYmluZFBvcHVwKHBvcHVwXzY4ZmRhNjZiMjFjYTQ0MDhhNjViYWM5MWU3ODdmNzczKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjVhZDgyNTcwZmY4NDY5YTkyYjVlYTg3ZDkzOTYxZjcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45OTMwMjAzLC0xLjEzMjk3OTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl81MGZjNzJlZTI5Mzg0YzNiOWYxNGY4MWM4ODVjZDA4YSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9mNWFkODI1NzBmZjg0NjlhOTJiNWVhODdkOTM5NjFmNy5zZXRJY29uKGljb25fNTBmYzcyZWUyOTM4NGMzYjlmMTRmODFjODg1Y2QwOGEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNDFhNjYwYTc5MTI0ODMyYjYxYjBlZmJiNjlkOTU3ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MzU2MDVmYTZjNmM0N2VhYWFlMDk3NjMwYzUyODI5YyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNzM1NjA1ZmE2YzZjNDdlYWFhZTA5NzYzMGM1MjgyOWMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIGNhbGxlIFJpbyBBcmdvcyAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDQxYTY2MGE3OTEyNDgzMmI2MWIwZWZiYjY5ZDk1N2Quc2V0Q29udGVudChodG1sXzczNTYwNWZhNmM2YzQ3ZWFhYWUwOTc2MzBjNTI4MjljKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjVhZDgyNTcwZmY4NDY5YTkyYjVlYTg3ZDkzOTYxZjcuYmluZFBvcHVwKHBvcHVwXzA0MWE2NjBhNzkxMjQ4MzJiNjFiMGVmYmI2OWQ5NTdkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjA2Y2FlNTYwODI3NDcxOWI5YmMxMTlhODMzZWYxYTEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45OTEwMTE3LC0xLjEzMTkyNzFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl82NjM0MGI2MzdhYjU0MTMzOGE4YTNiM2YzZmMwMDBhYSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9iMDZjYWU1NjA4Mjc0NzE5YjliYzExOWE4MzNlZjFhMS5zZXRJY29uKGljb25fNjYzNDBiNjM3YWI1NDEzMzhhOGEzYjNmM2ZjMDAwYWEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yYmEzNmUwNDRhOWQ0ZTVmOGMxZTU4YzA0M2E2NjdjYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ZGE1ODk4OWFmMDU0ODdkYmM4YTc5NWQzOGExNDQwMSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNWRhNTg5ODlhZjA1NDg3ZGJjOGE3OTVkMzhhMTQ0MDEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIGNhbGxlIEp1bnRlcm9uZXMgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJiYTM2ZTA0NGE5ZDRlNWY4YzFlNThjMDQzYTY2N2NhLnNldENvbnRlbnQoaHRtbF81ZGE1ODk4OWFmMDU0ODdkYmM4YTc5NWQzOGExNDQwMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2IwNmNhZTU2MDgyNzQ3MTliOWJjMTE5YTgzM2VmMWExLmJpbmRQb3B1cChwb3B1cF8yYmEzNmUwNDRhOWQ0ZTVmOGMxZTU4YzA0M2E2NjdjYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzAwZTJlMTdiOTQ3NTRkNmU5YTZlMjE2N2NjODgxYjI4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTkwMjE2MywtMS4xMjc1MTE3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfNjk3N2YxNDg4OGE3NDI1Njg1N2VlNmZlYTkwYWNmZTEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYTg5YmNlOWM3MjQzNDA3MmFkYTQ5ZjMzZGI2ZmVmNjUgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMDBlMmUxN2I5NDc1NGQ2ZTlhNmUyMTY3Y2M4ODFiMjguc2V0SWNvbihpY29uX2E4OWJjZTljNzI0MzQwNzJhZGE0OWYzM2RiNmZlZjY1KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDAzMWY5OGE4YjM2NDRlNmJkZDUwODExY2ZiZjAxNGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDE5Yzk4Y2M1OWQ2NDNhYmFiNWE5ZTdhMmNkMWMzNDEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzQxOWM5OGNjNTlkNjQzYWJhYjVhOWU3YTJjZDFjMzQxIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBjYWxsZSBQdWVydGEgTnVldmEgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQwMzFmOThhOGIzNjQ0ZTZiZGQ1MDgxMWNmYmYwMTRkLnNldENvbnRlbnQoaHRtbF80MTljOThjYzU5ZDY0M2FiYWI1YTllN2EyY2QxYzM0MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzAwZTJlMTdiOTQ3NTRkNmU5YTZlMjE2N2NjODgxYjI4LmJpbmRQb3B1cChwb3B1cF80MDMxZjk4YThiMzY0NGU2YmRkNTA4MTFjZmJmMDE0ZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2NlNTY2Y2FiMjRkNTQ4ZDFhOWQyMTk4N2IwNWIyZDU4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTg4OTI3MiwtMS4xMzQ2MTU4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfNjk3N2YxNDg4OGE3NDI1Njg1N2VlNmZlYTkwYWNmZTEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNWFlNDdkMTExZThiNDVjZGJlZTk2ZmEwNGIxODM4YTMgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfY2U1NjZjYWIyNGQ1NDhkMWE5ZDIxOTg3YjA1YjJkNTguc2V0SWNvbihpY29uXzVhZTQ3ZDExMWU4YjQ1Y2RiZWU5NmZhMDRiMTgzOGEzKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzA1OTBlZGEwYmVlNDQyY2IzYTZlYzNhMjU5OWFjNjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzM2NWMyOWI1NDk4NDRjZDg5NTg5NjQzMzY5NmViMjIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2MzNjVjMjliNTQ5ODQ0Y2Q4OTU4OTY0MzM2OTZlYjIyIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBKZXJvbmltbyBkZSBSb2RhIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMDU5MGVkYTBiZWU0NDJjYjNhNmVjM2EyNTk5YWM2MS5zZXRDb250ZW50KGh0bWxfYzM2NWMyOWI1NDk4NDRjZDg5NTg5NjQzMzY5NmViMjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jZTU2NmNhYjI0ZDU0OGQxYTlkMjE5ODdiMDViMmQ1OC5iaW5kUG9wdXAocG9wdXBfMzA1OTBlZGEwYmVlNDQyY2IzYTZlYzNhMjU5OWFjNjEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82MmRmYjBlYmYxZDg0NDA3OTY2ZTQyNDM3M2YyODFhZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk5Mjk1OTgsLTEuMTMzOTc4Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzY5NzdmMTQ4ODhhNzQyNTY4NTdlZTZmZWE5MGFjZmUxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2Q1MGZlMTNjMzk0MzQ5ODM5M2JmY2ZhMDVjZjkwODg4ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzYyZGZiMGViZjFkODQ0MDc5NjZlNDI0MzczZjI4MWFlLnNldEljb24oaWNvbl9kNTBmZTEzYzM5NDM0OTgzOTNiZmNmYTA1Y2Y5MDg4OCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU4MTE0M2Q5NGFjYjQ3ZWFhZTI3ZTMzMjhhZGYwZjI3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzlhYWUzMmU3ZjU0ZDQ4NjJhYjBmM2RiZWM0NTUzYWI3ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF85YWFlMzJlN2Y1NGQ0ODYyYWIwZjNkYmVjNDU1M2FiNyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgY2FsbGUgQ3JvbmlzdGEgQ2FybG9zIFZhbGNhcmNlbCAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTgxMTQzZDk0YWNiNDdlYWFlMjdlMzMyOGFkZjBmMjcuc2V0Q29udGVudChodG1sXzlhYWUzMmU3ZjU0ZDQ4NjJhYjBmM2RiZWM0NTUzYWI3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNjJkZmIwZWJmMWQ4NDQwNzk2NmU0MjQzNzNmMjgxYWUuYmluZFBvcHVwKHBvcHVwXzU4MTE0M2Q5NGFjYjQ3ZWFhZTI3ZTMzMjhhZGYwZjI3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYzY1YTUyMjdhYTllNGNkZTg4NGE3MDYwNjRlMjA5MzggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODk0MDI0LC0xLjEzNTY4OTddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9iNjc4ZjJmYjJiODA0ZmFkYmY1MTUyYmIwMDBlNjAzNyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9jNjVhNTIyN2FhOWU0Y2RlODg0YTcwNjA2NGUyMDkzOC5zZXRJY29uKGljb25fYjY3OGYyZmIyYjgwNGZhZGJmNTE1MmJiMDAwZTYwMzcpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hNzdhYmJlYmIwZDM0ZjlmYTIwNTljZjNmMGNmYjVkNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wOGY2YWQ2YWJiODQ0YzcwOWMxYTVlYzNjYmY2OGU3NSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMDhmNmFkNmFiYjg0NGM3MDljMWE1ZWMzY2JmNjhlNzUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIFBhc29zIGRlIFNhbnRpYWdvIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hNzdhYmJlYmIwZDM0ZjlmYTIwNTljZjNmMGNmYjVkNS5zZXRDb250ZW50KGh0bWxfMDhmNmFkNmFiYjg0NGM3MDljMWE1ZWMzY2JmNjhlNzUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jNjVhNTIyN2FhOWU0Y2RlODg0YTcwNjA2NGUyMDkzOC5iaW5kUG9wdXAocG9wdXBfYTc3YWJiZWJiMGQzNGY5ZmEyMDU5Y2YzZjBjZmI1ZDUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82NGY4ZTRhNzliZDM0ZjVlYTZjNmYzMGI4ODc4YWRkNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk5MTk5MTIsLTEuMTM2MDIwMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzY5NzdmMTQ4ODhhNzQyNTY4NTdlZTZmZWE5MGFjZmUxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzI2NWUyYjAzOTUwNzQ1MGY4MzYzNTk5Njc3YjU0ZDU5ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzY0ZjhlNGE3OWJkMzRmNWVhNmM2ZjMwYjg4NzhhZGQ1LnNldEljb24oaWNvbl8yNjVlMmIwMzk1MDc0NTBmODM2MzU5OTY3N2I1NGQ1OSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZjNWNiMzhkYzNkNDQ0MzM5OTBlYWMzYzAyMzlhMDc4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FjMDYwYTQyNWNjMjQ4OTFhZjk0ZTg0ZTQ2MzI2MjAyID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9hYzA2MGE0MjVjYzI0ODkxYWY5NGU4NGU0NjMyNjIwMiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU2VuZGEgUGljYXpvIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mYzVjYjM4ZGMzZDQ0NDMzOTkwZWFjM2MwMjM5YTA3OC5zZXRDb250ZW50KGh0bWxfYWMwNjBhNDI1Y2MyNDg5MWFmOTRlODRlNDYzMjYyMDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82NGY4ZTRhNzliZDM0ZjVlYTZjNmYzMGI4ODc4YWRkNS5iaW5kUG9wdXAocG9wdXBfZmM1Y2IzOGRjM2Q0NDQzMzk5MGVhYzNjMDIzOWEwNzgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85NDYzOGIyMjBjYmY0NWFiOWMyOTZiM2IxNzY5YTMyOCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk5MTg2NzIsLTEuMTM5NjI0N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzY5NzdmMTQ4ODhhNzQyNTY4NTdlZTZmZWE5MGFjZmUxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzI2NDEzMDc1YTM0ZjRhODY5YzFkZjA5ZWIzYzFjZGNhID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzk0NjM4YjIyMGNiZjQ1YWI5YzI5NmIzYjE3NjlhMzI4LnNldEljb24oaWNvbl8yNjQxMzA3NWEzNGY0YTg2OWMxZGYwOWViM2MxY2RjYSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YwZjc5Y2RhYjIyODQ0YmU4OTgwMmZlMzM2NmE2Mzc2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M3OTI5NTk1ZjY3NjRkNWY5NjhlM2U5OWQxM2JkZjMwID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9jNzkyOTU5NWY2NzY0ZDVmOTY4ZTNlOTlkMTNiZGYzMCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgZGVsIEVtaWdyYW50ZSAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjBmNzljZGFiMjI4NDRiZTg5ODAyZmUzMzY2YTYzNzYuc2V0Q29udGVudChodG1sX2M3OTI5NTk1ZjY3NjRkNWY5NjhlM2U5OWQxM2JkZjMwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOTQ2MzhiMjIwY2JmNDVhYjljMjk2YjNiMTc2OWEzMjguYmluZFBvcHVwKHBvcHVwX2YwZjc5Y2RhYjIyODQ0YmU4OTgwMmZlMzM2NmE2Mzc2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYmUyODY3MjRiZTVhNDFiNzk0NTg1NWRkMWQwZTM4MTUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45OTIzNzUzLC0xLjEzNjUzMDFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9jMmRkNGE0MGRlOTM0NmMxYjAwNTZiNjM0ZmZkYTZmOSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9iZTI4NjcyNGJlNWE0MWI3OTQ1ODU1ZGQxZDBlMzgxNS5zZXRJY29uKGljb25fYzJkZDRhNDBkZTkzNDZjMWIwMDU2YjYzNGZmZGE2ZjkpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mZDE1NWRhZjZkNzc0MWIxOTVkZDdlZWY5NjM5OWQwNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNjM3OGZiYWZhZmM0ZmE0YTAzMDcwODQwNDVjNTk4YyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMTYzNzhmYmFmYWZjNGZhNGEwMzA3MDg0MDQ1YzU5OGMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFBsYXphIFNhbnRhIE1hcmlhIGRlIEdyYWNpYSAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmQxNTVkYWY2ZDc3NDFiMTk1ZGQ3ZWVmOTYzOTlkMDQuc2V0Q29udGVudChodG1sXzE2Mzc4ZmJhZmFmYzRmYTRhMDMwNzA4NDA0NWM1OThjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYmUyODY3MjRiZTVhNDFiNzk0NTg1NWRkMWQwZTM4MTUuYmluZFBvcHVwKHBvcHVwX2ZkMTU1ZGFmNmQ3NzQxYjE5NWRkN2VlZjk2Mzk5ZDA0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNjA4YWU0ZmRiNTYwNDExNGIyNmZhNDRlNDk4NThjZTEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45OTM0MzMsLTEuMTM5MTQzNF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzY5NzdmMTQ4ODhhNzQyNTY4NTdlZTZmZWE5MGFjZmUxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2ExZmM2MjhkNjcxYzRmOTVhYTgxNGNlM2QzZjM4NmZhID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzYwOGFlNGZkYjU2MDQxMTRiMjZmYTQ0ZTQ5ODU4Y2UxLnNldEljb24oaWNvbl9hMWZjNjI4ZDY3MWM0Zjk1YWE4MTRjZTNkM2YzODZmYSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY3ZTA0MmJjYzk1ODRmOTc4ODBjYmJhNjIxODYyY2Y5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2EzYmM3ZjA3MjFhODRlYmZiMGIzYzc2MTE1ZGMxNGE3ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9hM2JjN2YwNzIxYTg0ZWJmYjBiM2M3NjExNWRjMTRhNyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgQXpvcmluIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82N2UwNDJiY2M5NTg0Zjk3ODgwY2JiYTYyMTg2MmNmOS5zZXRDb250ZW50KGh0bWxfYTNiYzdmMDcyMWE4NGViZmIwYjNjNzYxMTVkYzE0YTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82MDhhZTRmZGI1NjA0MTE0YjI2ZmE0NGU0OTg1OGNlMS5iaW5kUG9wdXAocG9wdXBfNjdlMDQyYmNjOTU4NGY5Nzg4MGNiYmE2MjE4NjJjZjkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zZDYwNzkxZmIwMjM0NjM4YWQ4ZjUwY2JhMGYzNmYwOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk5MzkyMDYsLTEuMTM2NjUwN10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzY5NzdmMTQ4ODhhNzQyNTY4NTdlZTZmZWE5MGFjZmUxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2UyYjYyYzMzMDFjYjQ2ZGJiODA4YTQ4Y2I4N2U3NWNkID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzNkNjA3OTFmYjAyMzQ2MzhhZDhmNTBjYmEwZjM2ZjA5LnNldEljb24oaWNvbl9lMmI2MmMzMzAxY2I0NmRiYjgwOGE0OGNiODdlNzVjZCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ4MjQ5MGRjODc1NjRiOWFiNWU2MDEwODFkOGE0N2YxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE5NTQzYWFhOTU3NjQwYmQ4NGNiNDE5YjIzOGEwMzgzID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8xOTU0M2FhYTk1NzY0MGJkODRjYjQxOWIyMzhhMDM4MyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgUGljbyBkZWwgTW9ycm9uIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ODI0OTBkYzg3NTY0YjlhYjVlNjAxMDgxZDhhNDdmMS5zZXRDb250ZW50KGh0bWxfMTk1NDNhYWE5NTc2NDBiZDg0Y2I0MTliMjM4YTAzODMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zZDYwNzkxZmIwMjM0NjM4YWQ4ZjUwY2JhMGYzNmYwOS5iaW5kUG9wdXAocG9wdXBfNDgyNDkwZGM4NzU2NGI5YWI1ZTYwMTA4MWQ4YTQ3ZjEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iY2E3ODM1YmEzZmU0OGE3OTJiNTFhNGFiMmU3M2Y2YiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk5MjgwMSwtMS4xMzc0NTg1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfNjk3N2YxNDg4OGE3NDI1Njg1N2VlNmZlYTkwYWNmZTEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fY2M3YTJkNDllOWIzNDdmM2ExZWI2ODgyYWIwZWFjMmMgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYmNhNzgzNWJhM2ZlNDhhNzkyYjUxYTRhYjJlNzNmNmIuc2V0SWNvbihpY29uX2NjN2EyZDQ5ZTliMzQ3ZjNhMWViNjg4MmFiMGVhYzJjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzc1ZWIyNWEwZmQ1NGVlM2FjZWNhNGUzOTVkYmU2ODQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWRlNTlkODQ0NTRlNDVhNDkyYjkxMWU0MTIwNWYwMGMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2FkZTU5ZDg0NDU0ZTQ1YTQ5MmI5MTFlNDEyMDVmMDBjIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBFc2NyaXRvciBTYW5jaGV6IE1vcmVubyAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzc1ZWIyNWEwZmQ1NGVlM2FjZWNhNGUzOTVkYmU2ODQuc2V0Q29udGVudChodG1sX2FkZTU5ZDg0NDU0ZTQ1YTQ5MmI5MTFlNDEyMDVmMDBjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYmNhNzgzNWJhM2ZlNDhhNzkyYjUxYTRhYjJlNzNmNmIuYmluZFBvcHVwKHBvcHVwXzc3NWViMjVhMGZkNTRlZTNhY2VjYTRlMzk1ZGJlNjg0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNDNiOTE0Nzg5Y2ZiNDMwMmJiMzZlYjk1ZWIxYTQxNDMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45OTI1Mjc3LC0xLjEzNjc5NTVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl80YWI0ZWFlMWFmZGE0NzEyYjNiYjU2OWMxNmMwOGEzMyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl80M2I5MTQ3ODljZmI0MzAyYmIzNmViOTVlYjFhNDE0My5zZXRJY29uKGljb25fNGFiNGVhZTFhZmRhNDcxMmIzYmI1NjljMTZjMDhhMzMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zYTNiNDcyZjkwMTg0MTZhODI3YWUzMzMyMDRkMDQwNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83Y2EwOGNjMzg0MjE0NGYxYTZkM2ZhNjljMjQ1N2MzZCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfN2NhMDhjYzM4NDIxNDRmMWE2ZDNmYTY5YzI0NTdjM2QiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIFNpZXJyYSBkZSBDYXJyYXNjb3kgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNhM2I0NzJmOTAxODQxNmE4MjdhZTMzMzIwNGQwNDA0LnNldENvbnRlbnQoaHRtbF83Y2EwOGNjMzg0MjE0NGYxYTZkM2ZhNjljMjQ1N2MzZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQzYjkxNDc4OWNmYjQzMDJiYjM2ZWI5NWViMWE0MTQzLmJpbmRQb3B1cChwb3B1cF8zYTNiNDcyZjkwMTg0MTZhODI3YWUzMzMyMDRkMDQwNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2ZiMDA5ZTQyNzQwNzQ3MTRhNzE0M2Q4N2U4NmIzMDYzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTkyNDY5NSwtMS4xMjc0Mjk0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfNjk3N2YxNDg4OGE3NDI1Njg1N2VlNmZlYTkwYWNmZTEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYjNlNTFmYjJlM2NiNDYzY2IzMGExNjA3OGFjZGZlNDEgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZmIwMDllNDI3NDA3NDcxNGE3MTQzZDg3ZTg2YjMwNjMuc2V0SWNvbihpY29uX2IzZTUxZmIyZTNjYjQ2M2NiMzBhMTYwNzhhY2RmZTQxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTE0N2MyMzY3ZTYyNGY1ZWE3Nzc1ODZlMjBjMTJjOTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGU2MDA3M2IzYjRlNGQ5MDhlMGMwZjFmNDg5MjY2ODMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzhlNjAwNzNiM2I0ZTRkOTA4ZTBjMGYxZjQ4OTI2NjgzIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBDb3JyZWdpZG9yIFB1ZXlvIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MTQ3YzIzNjdlNjI0ZjVlYTc3NzU4NmUyMGMxMmM5Ny5zZXRDb250ZW50KGh0bWxfOGU2MDA3M2IzYjRlNGQ5MDhlMGMwZjFmNDg5MjY2ODMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mYjAwOWU0Mjc0MDc0NzE0YTcxNDNkODdlODZiMzA2My5iaW5kUG9wdXAocG9wdXBfNTE0N2MyMzY3ZTYyNGY1ZWE3Nzc1ODZlMjBjMTJjOTcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mYWI2NzJjZjE3NWY0NGYwYTc5ZWUxMjQyNGYyOGVjMSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk5MjUzNDYsLTEuMTI0ODE1OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzY5NzdmMTQ4ODhhNzQyNTY4NTdlZTZmZWE5MGFjZmUxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzlhODAwNGUxYjQ1NzRhNzY4Mjc3ODk4NzQyOTcwNjFlID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2ZhYjY3MmNmMTc1ZjQ0ZjBhNzllZTEyNDI0ZjI4ZWMxLnNldEljb24oaWNvbl85YTgwMDRlMWI0NTc0YTc2ODI3Nzg5ODc0Mjk3MDYxZSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhiMzg2OTg5ZTllOTQ3ZjliMzhhNTE1NGZjNDJjYzRlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QyNGVjNTk4MDM1NTQ5NzNiMDQwYmUxNGQwYmMzN2E3ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9kMjRlYzU5ODAzNTU0OTczYjA0MGJlMTRkMGJjMzdhNyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgZGUgbGEgRmxvdGEgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhiMzg2OTg5ZTllOTQ3ZjliMzhhNTE1NGZjNDJjYzRlLnNldENvbnRlbnQoaHRtbF9kMjRlYzU5ODAzNTU0OTczYjA0MGJlMTRkMGJjMzdhNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2ZhYjY3MmNmMTc1ZjQ0ZjBhNzllZTEyNDI0ZjI4ZWMxLmJpbmRQb3B1cChwb3B1cF84YjM4Njk4OWU5ZTk0N2Y5YjM4YTUxNTRmYzQyY2M0ZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2FiNWZjNjkzMzkzMjQzYmViMTEwYjlmZTVhZDVhNTg3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTg2ODM1NSwtMS4xMzMzODYxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfNjk3N2YxNDg4OGE3NDI1Njg1N2VlNmZlYTkwYWNmZTEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNjY5MWY2MjUxZjE4NDRjZjgxZTgxMzA1YmNjNjIxMDMgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYWI1ZmM2OTMzOTMyNDNiZWIxMTBiOWZlNWFkNWE1ODcuc2V0SWNvbihpY29uXzY2OTFmNjI1MWYxODQ0Y2Y4MWU4MTMwNWJjYzYyMTAzKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTg4ODFiNGEzNGRhNGVlYWI0N2U4NDY0NzUyY2IxZTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2Q3NWIzYzNhN2RkNDcwMjgzNTI3ZTI3MDg2NWE3NTQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2NkNzViM2MzYTdkZDQ3MDI4MzUyN2UyNzA4NjVhNzU0IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBDb25kZSBkZSBSb2NoZSAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTg4ODFiNGEzNGRhNGVlYWI0N2U4NDY0NzUyY2IxZTguc2V0Q29udGVudChodG1sX2NkNzViM2MzYTdkZDQ3MDI4MzUyN2UyNzA4NjVhNzU0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYWI1ZmM2OTMzOTMyNDNiZWIxMTBiOWZlNWFkNWE1ODcuYmluZFBvcHVwKHBvcHVwXzU4ODgxYjRhMzRkYTRlZWFiNDdlODQ2NDc1MmNiMWU4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjE5MGZjODliY2QzNGM1MTlkNWM3N2MwN2Q1ODlkOTUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45OTIyMzk5LC0xLjEzMDY1NDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl82YjhmNjNlNGRhMmI0MDUwOTZiNzQ5N2RiYmRlMGY5MyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8yMTkwZmM4OWJjZDM0YzUxOWQ1Yzc3YzA3ZDU4OWQ5NS5zZXRJY29uKGljb25fNmI4ZjYzZTRkYTJiNDA1MDk2Yjc0OTdkYmJkZTBmOTMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MzY5ZDdhZjg2MjQ0MTk2ODJjMjg4NTg3ZmQxNjI5YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hYjgyNTQwNDA5Mzg0MGFmOTY5Y2M3ODMzMTBkNGVlMCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYWI4MjU0MDQwOTM4NDBhZjk2OWNjNzgzMzEwZDRlZTAiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIGNhbGxlIEp1YW4gR3VlcnJlcm8gUnVpeiAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDM2OWQ3YWY4NjI0NDE5NjgyYzI4ODU4N2ZkMTYyOWEuc2V0Q29udGVudChodG1sX2FiODI1NDA0MDkzODQwYWY5NjljYzc4MzMxMGQ0ZWUwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjE5MGZjODliY2QzNGM1MTlkNWM3N2MwN2Q1ODlkOTUuYmluZFBvcHVwKHBvcHVwXzQzNjlkN2FmODYyNDQxOTY4MmMyODg1ODdmZDE2MjlhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYTRmZjcyNGMzNWM0NGZiNTk4NWMwNmI2N2EyZTVmMjggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODY4MjA0LC0xLjEzNDAyNThdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl83ODU2ZDczNjdmNjU0ZjY1OTM2YTgxZWM0ZjUyMTJlYSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9hNGZmNzI0YzM1YzQ0ZmI1OTg1YzA2YjY3YTJlNWYyOC5zZXRJY29uKGljb25fNzg1NmQ3MzY3ZjY1NGY2NTkzNmE4MWVjNGY1MjEyZWEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMjAwZmQwOTFhNTI0ZmEwYTNlOGY0ZjY4OGMzZjM3OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80MTVhMjdiY2EzZGM0N2ExYjJmMTk0MWM1YjYyM2MxOCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNDE1YTI3YmNhM2RjNDdhMWIyZjE5NDFjNWI2MjNjMTgiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIExhcmVkbyAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjIwMGZkMDkxYTUyNGZhMGEzZThmNGY2ODhjM2YzNzkuc2V0Q29udGVudChodG1sXzQxNWEyN2JjYTNkYzQ3YTFiMmYxOTQxYzViNjIzYzE4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYTRmZjcyNGMzNWM0NGZiNTk4NWMwNmI2N2EyZTVmMjguYmluZFBvcHVwKHBvcHVwX2IyMDBmZDA5MWE1MjRmYTBhM2U4ZjRmNjg4YzNmMzc5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNDM3MDU0MDE1OTIwNDNlY2JiMGE1OTBhYWI2YjA5MDAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODg1MzExLC0xLjEzMjUyMjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl81MDk3ZjdmMjVlNTI0ZWJjODFlZGM1N2IwZjZiNTVlYyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl80MzcwNTQwMTU5MjA0M2VjYmIwYTU5MGFhYjZiMDkwMC5zZXRJY29uKGljb25fNTA5N2Y3ZjI1ZTUyNGViYzgxZWRjNTdiMGY2YjU1ZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNTg5MWExMTIzZjk0NTIxOGJmZmNlYWEyZDIwMTdjZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZjlkMGQxMjk2OTc0MTIwODYxZTIxZDA2YTgzODVmNSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZGY5ZDBkMTI5Njk3NDEyMDg2MWUyMWQwNmE4Mzg1ZjUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIGNhbGxlIEFsbXVkZW5hIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNTg5MWExMTIzZjk0NTIxOGJmZmNlYWEyZDIwMTdjZC5zZXRDb250ZW50KGh0bWxfZGY5ZDBkMTI5Njk3NDEyMDg2MWUyMWQwNmE4Mzg1ZjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80MzcwNTQwMTU5MjA0M2VjYmIwYTU5MGFhYjZiMDkwMC5iaW5kUG9wdXAocG9wdXBfMzU4OTFhMTEyM2Y5NDUyMThiZmZjZWFhMmQyMDE3Y2QpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iOWFmODQ1NjBlNzQ0NGMxYmJiNWZjZDE2MGUzNWZlNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4NjQwODIsLTEuMTMxNjkyM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzY5NzdmMTQ4ODhhNzQyNTY4NTdlZTZmZWE5MGFjZmUxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzk0MjVmMWRhNmQ3NzRhNDc4ZTBiNzZlMjc3MTcwYzg4ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2I5YWY4NDU2MGU3NDQ0YzFiYmI1ZmNkMTYwZTM1ZmU1LnNldEljb24oaWNvbl85NDI1ZjFkYTZkNzc0YTQ3OGUwYjc2ZTI3NzE3MGM4OCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQyZDA5Y2Q5ZmRjYjQzNWU4MzFhYmRlMDdmZGU0YTFiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkzMmM5MTI0MzE4YTRiMGI5ZjQ4ZmNiYjUzY2RhODFmID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF85MzJjOTEyNDMxOGE0YjBiOWY0OGZjYmI1M2NkYTgxZiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgQWN0b3IgRmVybmFuZG8gRGlheiBkZSBNZW5kb3phIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MmQwOWNkOWZkY2I0MzVlODMxYWJkZTA3ZmRlNGExYi5zZXRDb250ZW50KGh0bWxfOTMyYzkxMjQzMThhNGIwYjlmNDhmY2JiNTNjZGE4MWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iOWFmODQ1NjBlNzQ0NGMxYmJiNWZjZDE2MGUzNWZlNS5iaW5kUG9wdXAocG9wdXBfNDJkMDljZDlmZGNiNDM1ZTgzMWFiZGUwN2ZkZTRhMWIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hZTA3NTQzNTE2YjA0OTNkYWQ1OWMwMmJkMTY5MWUxYSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4NzM0MDksLTEuMTMwMjMyOF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzY5NzdmMTQ4ODhhNzQyNTY4NTdlZTZmZWE5MGFjZmUxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2UzYTMzZDg1YjVlMTQwMmM5YjVmMjg3MmU1YTc0YjVlID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2FlMDc1NDM1MTZiMDQ5M2RhZDU5YzAyYmQxNjkxZTFhLnNldEljb24oaWNvbl9lM2EzM2Q4NWI1ZTE0MDJjOWI1ZjI4NzJlNWE3NGI1ZSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNhY2MzMjUzZmFlNDQ3ZDZiYWRiNzkwMWE3YjI0MGI5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M1N2Y0Nzc4ODhlNTRlMzM4NThhZDg2NDcwY2E4YmJmID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9jNTdmNDc3ODg4ZTU0ZTMzODU4YWQ4NjQ3MGNhOGJiZiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgRWNoZWdhcmF5IChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYWNjMzI1M2ZhZTQ0N2Q2YmFkYjc5MDFhN2IyNDBiOS5zZXRDb250ZW50KGh0bWxfYzU3ZjQ3Nzg4OGU1NGUzMzg1OGFkODY0NzBjYThiYmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hZTA3NTQzNTE2YjA0OTNkYWQ1OWMwMmJkMTY5MWUxYS5iaW5kUG9wdXAocG9wdXBfM2FjYzMyNTNmYWU0NDdkNmJhZGI3OTAxYTdiMjQwYjkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jYzViZTE1ZWQ3YzU0NzZkODRmZTVhYTdhZTFkMmJkZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4NzI5NDUsLTEuMTMxMDE4OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzY5NzdmMTQ4ODhhNzQyNTY4NTdlZTZmZWE5MGFjZmUxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2I0MzA4YThjYjg2MjQ4ZGVhZDcwNTg5NWRlZDI3MTZkID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2NjNWJlMTVlZDdjNTQ3NmQ4NGZlNWFhN2FlMWQyYmRmLnNldEljb24oaWNvbl9iNDMwOGE4Y2I4NjI0OGRlYWQ3MDU4OTVkZWQyNzE2ZCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkyZjIxNGE1NDUwYzRkNTM4YTQxN2M5ZWQ4NTVhY2JiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzcwNGQyYzgxNGExNjQ4MWM4YjdlZTMwNzRmNWViMTEwID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF83MDRkMmM4MTRhMTY0ODFjOGI3ZWUzMDc0ZjVlYjExMCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgQW5nZWwgR3VpcmFvIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MmYyMTRhNTQ1MGM0ZDUzOGE0MTdjOWVkODU1YWNiYi5zZXRDb250ZW50KGh0bWxfNzA0ZDJjODE0YTE2NDgxYzhiN2VlMzA3NGY1ZWIxMTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jYzViZTE1ZWQ3YzU0NzZkODRmZTVhYTdhZTFkMmJkZi5iaW5kUG9wdXAocG9wdXBfOTJmMjE0YTU0NTBjNGQ1MzhhNDE3YzllZDg1NWFjYmIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85MjVlMDVlNTdlZjM0YmRlYjkyM2JjMGFlNDFhYTFhMCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk5MzYyNTQsLTEuMTM4NTA3MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzY5NzdmMTQ4ODhhNzQyNTY4NTdlZTZmZWE5MGFjZmUxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzg0ZDE1YWIzNTc0OTRmOTg4MWJhMTcwZGU0NDRlYmIzID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzkyNWUwNWU1N2VmMzRiZGViOTIzYmMwYWU0MWFhMWEwLnNldEljb24oaWNvbl84NGQxNWFiMzU3NDk0Zjk4ODFiYTE3MGRlNDQ0ZWJiMyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M2Yjk2OWYxZjgwZjQwYTFhYjIyY2I3NmNhZjIxYzU3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQzOTk4MzI3Mzc5MjRkODA4YWY0ODYzOTUzMGI3ZjQ2ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF80Mzk5ODMyNzM3OTI0ZDgwOGFmNDg2Mzk1MzBiN2Y0NiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgRGFsaWFzIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jNmI5NjlmMWY4MGY0MGExYWIyMmNiNzZjYWYyMWM1Ny5zZXRDb250ZW50KGh0bWxfNDM5OTgzMjczNzkyNGQ4MDhhZjQ4NjM5NTMwYjdmNDYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85MjVlMDVlNTdlZjM0YmRlYjkyM2JjMGFlNDFhYTFhMC5iaW5kUG9wdXAocG9wdXBfYzZiOTY5ZjFmODBmNDBhMWFiMjJjYjc2Y2FmMjFjNTcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80MGEwMjBjZmYyMzI0MGY1YTYyMTA0ODYxZjQxZTUxOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk5NDY1NzcsLTEuMTQwMjI3N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzY5NzdmMTQ4ODhhNzQyNTY4NTdlZTZmZWE5MGFjZmUxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzk0MGY3NzMyYTA1NTQzOWNiZjNlZDNjNjNiNmI4NGEzID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzQwYTAyMGNmZjIzMjQwZjVhNjIxMDQ4NjFmNDFlNTE5LnNldEljb24oaWNvbl85NDBmNzczMmEwNTU0MzljYmYzZWQzYzYzYjZiODRhMyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhjYTY4ZjQxNDJkOTQxNjM4Y2Q2NzZkZTBiZTMxNWRjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RmNzhkMDQ0MWUxYTQ1NTRiNDdjMmViMTZjZDFkZmE1ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9kZjc4ZDA0NDFlMWE0NTU0YjQ3YzJlYjE2Y2QxZGZhNSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgTW9uY2F5byAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGNhNjhmNDE0MmQ5NDE2MzhjZDY3NmRlMGJlMzE1ZGMuc2V0Q29udGVudChodG1sX2RmNzhkMDQ0MWUxYTQ1NTRiNDdjMmViMTZjZDFkZmE1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNDBhMDIwY2ZmMjMyNDBmNWE2MjEwNDg2MWY0MWU1MTkuYmluZFBvcHVwKHBvcHVwXzhjYTY4ZjQxNDJkOTQxNjM4Y2Q2NzZkZTBiZTMxNWRjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMDIwOWJlMGRlZTlhNGFlMGFkNmJiYTIwNzgyMDI2N2MgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45OTA3Nzg2LC0xLjEzNDA4NTddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9iMzFlYWI4ZDljZWQ0NjliOWU2ZDA2ZDZiYmIzYzI1MCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8wMjA5YmUwZGVlOWE0YWUwYWQ2YmJhMjA3ODIwMjY3Yy5zZXRJY29uKGljb25fYjMxZWFiOGQ5Y2VkNDY5YjllNmQwNmQ2YmJiM2MyNTApOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jNzNiOTRlZWE2ZWQ0MjE4YWI1Y2EzZDZmNGExNmI1MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZjA5YzNhMjYwOGI0ODI2OTEwNjZmNTAwOWY1ZDdkNSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfOWYwOWMzYTI2MDhiNDgyNjkxMDY2ZjUwMDlmNWQ3ZDUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFBsYXphIFZpcmdlbiBkZSBsYSBFc3BlcmFuemEgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M3M2I5NGVlYTZlZDQyMThhYjVjYTNkNmY0YTE2YjUyLnNldENvbnRlbnQoaHRtbF85ZjA5YzNhMjYwOGI0ODI2OTEwNjZmNTAwOWY1ZDdkNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzAyMDliZTBkZWU5YTRhZTBhZDZiYmEyMDc4MjAyNjdjLmJpbmRQb3B1cChwb3B1cF9jNzNiOTRlZWE2ZWQ0MjE4YWI1Y2EzZDZmNGExNmI1Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2NmOTRjZGY5YTlkYzQ5ZjBhZDFlZmZmOTMyNzc4M2NiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTkxOTk1NSwtMS4xMzgwMDY4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfNjk3N2YxNDg4OGE3NDI1Njg1N2VlNmZlYTkwYWNmZTEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fODcyYjkyNmNiZWE1NGJiN2I5ZjFjYTczNmI0NWVkZGMgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfY2Y5NGNkZjlhOWRjNDlmMGFkMWVmZmY5MzI3NzgzY2Iuc2V0SWNvbihpY29uXzg3MmI5MjZjYmVhNTRiYjdiOWYxY2E3MzZiNDVlZGRjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmRhZDNjMTMwOWJiNDEzYzk5YzFjODk1ODAyMjI3ZWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTVlZTJlZTdhODMxNDAyYjhkOWNmZDQyOWJkYjJiZWQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2E1ZWUyZWU3YTgzMTQwMmI4ZDljZmQ0MjliZGIyYmVkIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBKZXJvbmltbyBHdWlqYXJybyAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmRhZDNjMTMwOWJiNDEzYzk5YzFjODk1ODAyMjI3ZWEuc2V0Q29udGVudChodG1sX2E1ZWUyZWU3YTgzMTQwMmI4ZDljZmQ0MjliZGIyYmVkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfY2Y5NGNkZjlhOWRjNDlmMGFkMWVmZmY5MzI3NzgzY2IuYmluZFBvcHVwKHBvcHVwXzZkYWQzYzEzMDliYjQxM2M5OWMxYzg5NTgwMjIyN2VhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfODZlNDQzNjYwNzEzNDIyOTg1YzYxMzczMzY1ZmUzMjcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODYxMTYsLTEuMTM0Mjk0MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzY5NzdmMTQ4ODhhNzQyNTY4NTdlZTZmZWE5MGFjZmUxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2JlOWI1Nzc5MjUwZjQ3YTE4YTI5NzVhMzMzYzgxNjMyID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzg2ZTQ0MzY2MDcxMzQyMjk4NWM2MTM3MzM2NWZlMzI3LnNldEljb24oaWNvbl9iZTliNTc3OTI1MGY0N2ExOGEyOTc1YTMzM2M4MTYzMik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQzMGI2MzAwODNjNDQyNGM4YzU4ZDIzZmYwYTNmNWMzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I4YjkwMjhkN2I2NDRiZjNiZTAyYTE2ZTQ3NTI3YWE1ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9iOGI5MDI4ZDdiNjQ0YmYzYmUwMmExNmU0NzUyN2FhNSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ3Vlc3RhIGRlIGxhIE1hZ2RhbGVuYSAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDMwYjYzMDA4M2M0NDI0YzhjNThkMjNmZjBhM2Y1YzMuc2V0Q29udGVudChodG1sX2I4YjkwMjhkN2I2NDRiZjNiZTAyYTE2ZTQ3NTI3YWE1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfODZlNDQzNjYwNzEzNDIyOTg1YzYxMzczMzY1ZmUzMjcuYmluZFBvcHVwKHBvcHVwXzQzMGI2MzAwODNjNDQyNGM4YzU4ZDIzZmYwYTNmNWMzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBtdWx0aV9wb2x5X2xpbmVfNTQ3YzliYWY3YTdmNGRjN2E0YjBlN2JlODBiMmZhMGEgPSBMLm11bHRpUG9seWxpbmUoCiAgICAgICAgICAgICAgICAgICAgW1tbMzcuOTk0NjU3NywgLTEuMTQwMjI3N10sIFszNy45OTE4NjcyLCAtMS4xMzk2MjQ3XV0sIFtbMzcuOTkxODY3MiwgLTEuMTM5NjI0N10sIFszNy45OTAwMzMsIC0xLjEzODYyNDZdXSwgW1szNy45OTAwMzMsIC0xLjEzODYyNDZdLCBbMzcuOTg2MTE2LCAtMS4xMzQyOTQxXV0sIFtbMzcuOTg2MTE2LCAtMS4xMzQyOTQxXSwgWzM3Ljk4NjQwODIsIC0xLjEzMTY5MjNdXSwgW1szNy45ODY0MDgyLCAtMS4xMzE2OTIzXSwgWzM3Ljk4NzUyMzUsIC0xLjEyNzU0OTldXSwgW1szNy45ODc1MjM1LCAtMS4xMjc1NDk5XSwgWzM3Ljk5MTUzODksIC0xLjEyNDQ5MjNdXSwgW1szNy45OTE1Mzg5LCAtMS4xMjQ0OTIzXSwgWzM3Ljk5MjUzNDYsIC0xLjEyNDgxNTldXSwgW1szNy45OTI1MzQ2LCAtMS4xMjQ4MTU5XSwgWzM3Ljk5NjQ3ODcsIC0xLjEyOTEyMDldXSwgW1szNy45OTY0Nzg3LCAtMS4xMjkxMjA5XSwgWzM3Ljk5NjMxMzYsIC0xLjEzMDkyMTNdXSwgW1szNy45OTYzMTM2LCAtMS4xMzA5MjEzXSwgWzM3Ljk5NDY1NzcsIC0xLjE0MDIyNzddXV0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodDogNSwKICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMSwKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXBfNjk3N2YxNDg4OGE3NDI1Njg1N2VlNmZlYTkwYWNmZTEuYWRkTGF5ZXIobXVsdGlfcG9seV9saW5lXzU0N2M5YmFmN2E3ZjRkYzdhNGIwZTdiZTgwYjJmYTBhKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2E5MmYyYmUyZDQ4NDgxZDkxZDU5YTZkY2VkMmY1NTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTNiMTVkZGJjMjliNGI0YjgwMTExOWM5Y2Y5ZGM0ZDEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzUzYjE1ZGRiYzI5YjRiNGI4MDExMTljOWNmOWRjNGQxIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBab25hIDEtMi0zPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNhOTJmMmJlMmQ0ODQ4MWQ5MWQ1OWE2ZGNlZDJmNTU5LnNldENvbnRlbnQoaHRtbF81M2IxNWRkYmMyOWI0YjRiODAxMTE5YzljZjlkYzRkMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbXVsdGlfcG9seV9saW5lXzU0N2M5YmFmN2E3ZjRkYzdhNGIwZTdiZTgwYjJmYTBhLmJpbmRQb3B1cChwb3B1cF8zYTkyZjJiZTJkNDg0ODFkOTFkNTlhNmRjZWQyZjU1OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2M0ODZkYTljOTdhMTQzNTE4MGJiY2E0OWU0ZjFkZDVhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTgxMzkzNywtMS4xMzA2NTAyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfNjk3N2YxNDg4OGE3NDI1Njg1N2VlNmZlYTkwYWNmZTEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZDNhMjdlZGRhNzhjNDliZjgyYTE2NTY2YjkyMWFjMjAgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2M0ODZkYTljOTdhMTQzNTE4MGJiY2E0OWU0ZjFkZDVhLnNldEljb24oaWNvbl9kM2EyN2VkZGE3OGM0OWJmODJhMTY1NjZiOTIxYWMyMCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FjYmJiMWE4Y2Q1ZDRlNWJhZmJjODY5N2Q5MzczYTg5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdmMGZiN2Y4YzkwMTQyOTI4YzcwMDNiZTlhZjkyNzZjID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF83ZjBmYjdmOGM5MDE0MjkyOGM3MDAzYmU5YWY5Mjc2YyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgSnVhbiBBbnRvbmlvIEhlcm5hbmRleiBkZWwgQWd1aWxhIChab25hIDUpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FjYmJiMWE4Y2Q1ZDRlNWJhZmJjODY5N2Q5MzczYTg5LnNldENvbnRlbnQoaHRtbF83ZjBmYjdmOGM5MDE0MjkyOGM3MDAzYmU5YWY5Mjc2Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2M0ODZkYTljOTdhMTQzNTE4MGJiY2E0OWU0ZjFkZDVhLmJpbmRQb3B1cChwb3B1cF9hY2JiYjFhOGNkNWQ0ZTViYWZiYzg2OTdkOTM3M2E4OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzYwNzUwNmExZmQyZjRhZGQ4MDE1MWJhZmMyZWU1NzYzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTc1MDQzMywtMS4xMzAwNDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl85Yzg2MzM4YzZkNjY0Zjc5YTZiMzg2MGVmODU4NDhiMCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNjA3NTA2YTFmZDJmNGFkZDgwMTUxYmFmYzJlZTU3NjMuc2V0SWNvbihpY29uXzljODYzMzhjNmQ2NjRmNzlhNmIzODYwZWY4NTg0OGIwKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmExOGRlMTZhM2I4NGZkOWFlM2Q1NzMzNGI1Yjg4MmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzRmNmQ1ZWQzMDE5NDVjYmIzZmEzNWFlMjUyMWQzMWYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzc0ZjZkNWVkMzAxOTQ1Y2JiM2ZhMzVhZTI1MjFkMzFmIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBJbmR1c3RyaWEgKFpvbmEgNSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmExOGRlMTZhM2I4NGZkOWFlM2Q1NzMzNGI1Yjg4MmUuc2V0Q29udGVudChodG1sXzc0ZjZkNWVkMzAxOTQ1Y2JiM2ZhMzVhZTI1MjFkMzFmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNjA3NTA2YTFmZDJmNGFkZDgwMTUxYmFmYzJlZTU3NjMuYmluZFBvcHVwKHBvcHVwXzJhMThkZTE2YTNiODRmZDlhZTNkNTczMzRiNWI4ODJlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTFmNzQ2ZmM1YjkzNDNmZGFjYTAwNTdjM2MwMWEzNDUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODEzMzExLC0xLjEyODgyMTldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9jMDE5ZjA4ODA0OGE0MzRiYTZkMjQyZmQyYWViZjFlMiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfOTFmNzQ2ZmM1YjkzNDNmZGFjYTAwNTdjM2MwMWEzNDUuc2V0SWNvbihpY29uX2MwMTlmMDg4MDQ4YTQzNGJhNmQyNDJmZDJhZWJmMWUyKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzhjYTYxYmY4MjIxNGMwNWI1OTVmN2Q2OTUwMDY0NjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjcxMDdkY2VmM2Y2NGZlNzk3YzIyZGNlNzg2YjE5YjcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzY3MTA3ZGNlZjNmNjRmZTc5N2MyMmRjZTc4NmIxOWI3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBBbWJyb3NpbyBTYWxhemFyIChab25hIDUpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M4Y2E2MWJmODIyMTRjMDViNTk1ZjdkNjk1MDA2NDY3LnNldENvbnRlbnQoaHRtbF82NzEwN2RjZWYzZjY0ZmU3OTdjMjJkY2U3ODZiMTliNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzkxZjc0NmZjNWI5MzQzZmRhY2EwMDU3YzNjMDFhMzQ1LmJpbmRQb3B1cChwb3B1cF9jOGNhNjFiZjgyMjE0YzA1YjU5NWY3ZDY5NTAwNjQ2Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzA1NDVkN2E2NDU4YzQ0MzJiYjFjZTAyMTRlOWNjOTliID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTgwODQzMiwtMS4xMjg1OTk2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfNjk3N2YxNDg4OGE3NDI1Njg1N2VlNmZlYTkwYWNmZTEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYjc4NDlmZWU3NWIxNDZkZmI5ZjcxN2Q1OThmZTQ1OGIgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzA1NDVkN2E2NDU4YzQ0MzJiYjFjZTAyMTRlOWNjOTliLnNldEljb24oaWNvbl9iNzg0OWZlZTc1YjE0NmRmYjlmNzE3ZDU5OGZlNDU4Yik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdhODFkZDJmZDU0NTRiZDBhODJmYTI3MmE5N2E1ZjhjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzAyMjQyMjYzYWVlNTQyYjRhYTQ3ZWZiZjQwZDczZTRjID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8wMjI0MjI2M2FlZTU0MmI0YWE0N2VmYmY0MGQ3M2U0YyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgZGUgUmljYXJkbyBHaWwgKFpvbmEgNSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2E4MWRkMmZkNTQ1NGJkMGE4MmZhMjcyYTk3YTVmOGMuc2V0Q29udGVudChodG1sXzAyMjQyMjYzYWVlNTQyYjRhYTQ3ZWZiZjQwZDczZTRjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDU0NWQ3YTY0NThjNDQzMmJiMWNlMDIxNGU5Y2M5OWIuYmluZFBvcHVwKHBvcHVwXzdhODFkZDJmZDU0NTRiZDBhODJmYTI3MmE5N2E1ZjhjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOWNiOTdhNzAyNWNlNDhkMTlhYjE5MDM1ZDllNTUwZTggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODA0MTI2LC0xLjEyOTQzMThdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9iOThlM2ViYjc2YTg0M2IzODI4MjE1OWIzZDk2OTE2ZSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfOWNiOTdhNzAyNWNlNDhkMTlhYjE5MDM1ZDllNTUwZTguc2V0SWNvbihpY29uX2I5OGUzZWJiNzZhODQzYjM4MjgyMTU5YjNkOTY5MTZlKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTExNTgzYWY2YmNjNGJhYTg3MjExYWY5ZGU2OTM0ZjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzI1NzQ0OWQ2MWZmNGU3NmIwMjQ0ZjE3MzAxM2FmOWQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzcyNTc0NDlkNjFmZjRlNzZiMDI0NGYxNzMwMTNhZjlkIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBQcm9jbGFtYWNpb24gKFpvbmEgNSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTExNTgzYWY2YmNjNGJhYTg3MjExYWY5ZGU2OTM0ZjYuc2V0Q29udGVudChodG1sXzcyNTc0NDlkNjFmZjRlNzZiMDI0NGYxNzMwMTNhZjlkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOWNiOTdhNzAyNWNlNDhkMTlhYjE5MDM1ZDllNTUwZTguYmluZFBvcHVwKHBvcHVwX2ExMTU4M2FmNmJjYzRiYWE4NzIxMWFmOWRlNjkzNGY2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTc3NTJjZWFlNGI2NGM5Y2I1MTVjZDcyYmJhNjVlZjggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45NzcwOTkyLC0xLjEyNzk2NTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9jZGJiYWFlMDA0MzM0NGZiODY3ZTg0MjIwOTE2MjRkNyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfOTc3NTJjZWFlNGI2NGM5Y2I1MTVjZDcyYmJhNjVlZjguc2V0SWNvbihpY29uX2NkYmJhYWUwMDQzMzQ0ZmI4NjdlODQyMjA5MTYyNGQ3KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzViYjcxMTIzZDU4NDZlNDlhY2NjYzhmYjEyNmIwODggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzQxZDM4MWFmYzQ0NDcyNThlYzFlMGNmM2U2Nzg4YjEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2M0MWQzODFhZmM0NDQ3MjU4ZWMxZTBjZjNlNjc4OGIxIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBKdWFuIExvcGV6IFNvbWFsbyAoWm9uYSA1KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83NWJiNzExMjNkNTg0NmU0OWFjY2NjOGZiMTI2YjA4OC5zZXRDb250ZW50KGh0bWxfYzQxZDM4MWFmYzQ0NDcyNThlYzFlMGNmM2U2Nzg4YjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85Nzc1MmNlYWU0YjY0YzljYjUxNWNkNzJiYmE2NWVmOC5iaW5kUG9wdXAocG9wdXBfNzViYjcxMTIzZDU4NDZlNDlhY2NjYzhmYjEyNmIwODgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85Yjc4Y2FlNGI1MzI0ZmQ3OWVlNDg1NTczNjUwMDk0OCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk3NjQ3MDIsLTEuMTI3MTYzM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzY5NzdmMTQ4ODhhNzQyNTY4NTdlZTZmZWE5MGFjZmUxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzRlYTRmNmFmZTc3OTRkMTVhNTA1NDVlMTQ0YmRkYTA2ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl85Yjc4Y2FlNGI1MzI0ZmQ3OWVlNDg1NTczNjUwMDk0OC5zZXRJY29uKGljb25fNGVhNGY2YWZlNzc5NGQxNWE1MDU0NWUxNDRiZGRhMDYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZjQxZmM0NTJhMTk0NTg3ODk3MGVhZDMzYjQzMjk3ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNjkwY2Q1Y2M2MTY0OGFkYWM0ZTk2M2ZjMjc0NGFiNCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYTY5MGNkNWNjNjE2NDhhZGFjNGU5NjNmYzI3NDRhYjQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIEFyY2lwcmVzdGUgTWFyaWFubyBBcm9jYSAoWm9uYSA1KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZjQxZmM0NTJhMTk0NTg3ODk3MGVhZDMzYjQzMjk3ZC5zZXRDb250ZW50KGh0bWxfYTY5MGNkNWNjNjE2NDhhZGFjNGU5NjNmYzI3NDRhYjQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85Yjc4Y2FlNGI1MzI0ZmQ3OWVlNDg1NTczNjUwMDk0OC5iaW5kUG9wdXAocG9wdXBfNWY0MWZjNDUyYTE5NDU4Nzg5NzBlYWQzM2I0MzI5N2QpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wZjQxODM3NTdiODY0ZmVlYmE5ZTQ4ZDgxMTdmMDBmNyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk3NjE1NDYsLTEuMTI4OTE4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfNjk3N2YxNDg4OGE3NDI1Njg1N2VlNmZlYTkwYWNmZTEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMzIzNjVjMzE3MGEzNDU5NGJiZjcxMjBjNjU3MzE4ZDkgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzBmNDE4Mzc1N2I4NjRmZWViYTllNDhkODExN2YwMGY3LnNldEljb24oaWNvbl8zMjM2NWMzMTcwYTM0NTk0YmJmNzEyMGM2NTczMThkOSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNlMzgwNDkwNzYxMDRmYjc5NWY2YTdhYjA5M2ZiM2QzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU0MTY5NDc4OWViYzRmODI5NmE2MmE3YmI2OTE2MDE2ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF81NDE2OTQ3ODllYmM0ZjgyOTZhNjJhN2JiNjkxNjAxNiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgUnVpeiBIaWRhbGdvIChab25hIDUpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNlMzgwNDkwNzYxMDRmYjc5NWY2YTdhYjA5M2ZiM2QzLnNldENvbnRlbnQoaHRtbF81NDE2OTQ3ODllYmM0ZjgyOTZhNjJhN2JiNjkxNjAxNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzBmNDE4Mzc1N2I4NjRmZWViYTllNDhkODExN2YwMGY3LmJpbmRQb3B1cChwb3B1cF8zZTM4MDQ5MDc2MTA0ZmI3OTVmNmE3YWIwOTNmYjNkMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzI4ZTI4ZTJjYmQxZjQyMjU5YTk2YTA1OGYxMGUzYTdmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTc3MTMwMywtMS4xMjc2MTc2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfNjk3N2YxNDg4OGE3NDI1Njg1N2VlNmZlYTkwYWNmZTEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYzA2YjZkMTE4ZDI0NDI0NTllNWZiYzA2MmEwYjAxM2EgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzI4ZTI4ZTJjYmQxZjQyMjU5YTk2YTA1OGYxMGUzYTdmLnNldEljb24oaWNvbl9jMDZiNmQxMThkMjQ0MjQ1OWU1ZmJjMDYyYTBiMDEzYSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJkNTE0NmNkNzYxNzRhMjM5ZjIxMTVlZGQ4NjU3NjhjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJhNjY0NjEzNWY3MTQ3Y2I5MjJjNzU3MTQyMTMxMTAzID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8yYTY2NDYxMzVmNzE0N2NiOTIyYzc1NzE0MjEzMTEwMyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgQ2xlbWVudGVzIChab25hIDUpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJkNTE0NmNkNzYxNzRhMjM5ZjIxMTVlZGQ4NjU3NjhjLnNldENvbnRlbnQoaHRtbF8yYTY2NDYxMzVmNzE0N2NiOTIyYzc1NzE0MjEzMTEwMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzI4ZTI4ZTJjYmQxZjQyMjU5YTk2YTA1OGYxMGUzYTdmLmJpbmRQb3B1cChwb3B1cF8yZDUxNDZjZDc2MTc0YTIzOWYyMTE1ZWRkODY1NzY4Yyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzRkY2ZkMjhkMDYyYTQ3N2Q5ZmVlNzU5ZTE2OGRkMGNmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTc5NTMyNiwtMS4xMzE5MzczXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfNjk3N2YxNDg4OGE3NDI1Njg1N2VlNmZlYTkwYWNmZTEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMmVjYjI1ODRhMmJmNGJkNzhiZTI2YmNjOTQyNDEwOGIgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzRkY2ZkMjhkMDYyYTQ3N2Q5ZmVlNzU5ZTE2OGRkMGNmLnNldEljb24oaWNvbl8yZWNiMjU4NGEyYmY0YmQ3OGJlMjZiY2M5NDI0MTA4Yik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRmZjI5MGUyNzg1NzRhNmNhMzZhYjgwZTg5NThjY2RlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE5MzMzOTVhNTk2ZjQzMDFiNzRjZTQyZmNlMmY4MjViID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8xOTMzMzk1YTU5NmY0MzAxYjc0Y2U0MmZjZTJmODI1YiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGVqb24gQ2FyYXZhY2EgKFpvbmEgNSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGZmMjkwZTI3ODU3NGE2Y2EzNmFiODBlODk1OGNjZGUuc2V0Q29udGVudChodG1sXzE5MzMzOTVhNTk2ZjQzMDFiNzRjZTQyZmNlMmY4MjViKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNGRjZmQyOGQwNjJhNDc3ZDlmZWU3NTllMTY4ZGQwY2YuYmluZFBvcHVwKHBvcHVwXzRmZjI5MGUyNzg1NzRhNmNhMzZhYjgwZTg5NThjY2RlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMTIxMmZkMjFiMmQxNDllYWEzNWVmY2YwNTM4YzQ3ZTMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45NzY4MDMzLC0xLjEzMzM1NjRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl81Y2Q4MzM2ZTJkOWQ0NzhiOTQwY2M2ZDlhOThjZWU5OSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMTIxMmZkMjFiMmQxNDllYWEzNWVmY2YwNTM4YzQ3ZTMuc2V0SWNvbihpY29uXzVjZDgzMzZlMmQ5ZDQ3OGI5NDBjYzZkOWE5OGNlZTk5KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmM1YTFmOGRmM2IwNDQ4ZWEzNzViMDczZGE3YWFiNzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWU2MTYwNTliOTNjNDJmNDgwZjYyYTE5YWFjM2VlYWYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzllNjE2MDU5YjkzYzQyZjQ4MGY2MmExOWFhYzNlZWFmIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBDdWFydGVsIGRlIEFydGlsbGVyaWEgKFpvbmEgNSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmM1YTFmOGRmM2IwNDQ4ZWEzNzViMDczZGE3YWFiNzYuc2V0Q29udGVudChodG1sXzllNjE2MDU5YjkzYzQyZjQ4MGY2MmExOWFhYzNlZWFmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTIxMmZkMjFiMmQxNDllYWEzNWVmY2YwNTM4YzQ3ZTMuYmluZFBvcHVwKHBvcHVwX2ZjNWExZjhkZjNiMDQ0OGVhMzc1YjA3M2RhN2FhYjc2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZTFlYzMwM2NjNjNkNDVjNmE4NzQ1NGM3N2IwNDMyYWIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODA5NzQ0LC0xLjEzMjg4Ml0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzY5NzdmMTQ4ODhhNzQyNTY4NTdlZTZmZWE5MGFjZmUxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2Y5ODk5Zjk2N2EzODQxZjBiN2UxNDgxMTRlZjk0MTgwID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9lMWVjMzAzY2M2M2Q0NWM2YTg3NDU0Yzc3YjA0MzJhYi5zZXRJY29uKGljb25fZjk4OTlmOTY3YTM4NDFmMGI3ZTE0ODExNGVmOTQxODApOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jZDRlMzI4ZTM4MzM0NDhkYTRiYTI4NDdiYmIzOWY3NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MTJmYzVmNGIzZGY0NWQ5YjExNWQ5NmY3OWE0NWRiYyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNzEyZmM1ZjRiM2RmNDVkOWIxMTVkOTZmNzlhNDVkYmMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIEp1bWlsbGEgKFpvbmEgNSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2Q0ZTMyOGUzODMzNDQ4ZGE0YmEyODQ3YmJiMzlmNzQuc2V0Q29udGVudChodG1sXzcxMmZjNWY0YjNkZjQ1ZDliMTE1ZDk2Zjc5YTQ1ZGJjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZTFlYzMwM2NjNjNkNDVjNmE4NzQ1NGM3N2IwNDMyYWIuYmluZFBvcHVwKHBvcHVwX2NkNGUzMjhlMzgzMzQ0OGRhNGJhMjg0N2JiYjM5Zjc0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZGMyYzg3OTAwYTA1NDBjZGE2NTQ1YmQ1NDU3YmQ2NTMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODA0MDE1LC0xLjEzMDQ2OTldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl82Yjg4ZTZmNzNhNzk0YjUzYWQ1NWRhYTQ4OWU1ZjJkYiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZGMyYzg3OTAwYTA1NDBjZGE2NTQ1YmQ1NDU3YmQ2NTMuc2V0SWNvbihpY29uXzZiODhlNmY3M2E3OTRiNTNhZDU1ZGFhNDg5ZTVmMmRiKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGMyNTdiNmRhNmZhNDRlZDljNGEwZjAxMTgyOWZkODQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWQ2ZWJkNDhlZjMwNDFkMGIyOWVkYTFmOGY1YjVkMmQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzFkNmViZDQ4ZWYzMDQxZDBiMjllZGExZjhmNWI1ZDJkIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBBbGFtZWRhIGRlIENvbG9uIChab25hIDUpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhjMjU3YjZkYTZmYTQ0ZWQ5YzRhMGYwMTE4MjlmZDg0LnNldENvbnRlbnQoaHRtbF8xZDZlYmQ0OGVmMzA0MWQwYjI5ZWRhMWY4ZjViNWQyZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2RjMmM4NzkwMGEwNTQwY2RhNjU0NWJkNTQ1N2JkNjUzLmJpbmRQb3B1cChwb3B1cF84YzI1N2I2ZGE2ZmE0NGVkOWM0YTBmMDExODI5ZmQ4NCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzUwYTJiMzBmZjYzMzRmMWRiYjM5NGRjMzI5MGI5ZTRhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTc4NTc5NiwtMS4xMzMxNTUyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfNjk3N2YxNDg4OGE3NDI1Njg1N2VlNmZlYTkwYWNmZTEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYjNhNjg4OGRkODAxNDkwOWIzNTNkMGI0MzU3MGFjNTcgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzUwYTJiMzBmZjYzMzRmMWRiYjM5NGRjMzI5MGI5ZTRhLnNldEljb24oaWNvbl9iM2E2ODg4ZGQ4MDE0OTA5YjM1M2QwYjQzNTcwYWM1Nyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA1NzY0ZDlhNjYwNTQzZmU4OTViODQ4ZWIyYzI5Y2VmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU0YjEzMDU3MWM1YzRlNDRhMmJlNWY0ODkwZmQ2M2M1ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF81NGIxMzA1NzFjNWM0ZTQ0YTJiZTVmNDg5MGZkNjNjNSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgQ2FydGFnZW5hIChab25hIDUpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA1NzY0ZDlhNjYwNTQzZmU4OTViODQ4ZWIyYzI5Y2VmLnNldENvbnRlbnQoaHRtbF81NGIxMzA1NzFjNWM0ZTQ0YTJiZTVmNDg5MGZkNjNjNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzUwYTJiMzBmZjYzMzRmMWRiYjM5NGRjMzI5MGI5ZTRhLmJpbmRQb3B1cChwb3B1cF8wNTc2NGQ5YTY2MDU0M2ZlODk1Yjg0OGViMmMyOWNlZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzA5MTExNWU2YmE3ZTQ5OGZhMWZjYjQ0NTFkZWJkNjc2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTgxNTE5MSwtMS4xMzA5NTE2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfNjk3N2YxNDg4OGE3NDI1Njg1N2VlNmZlYTkwYWNmZTEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fODEwNjlhNWRlOGU1NDk5YmE0NmQyMGIxMmM3YjE0MWYgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzA5MTExNWU2YmE3ZTQ5OGZhMWZjYjQ0NTFkZWJkNjc2LnNldEljb24oaWNvbl84MTA2OWE1ZGU4ZTU0OTliYTQ2ZDIwYjEyYzdiMTQxZik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q4ZDM3NmQ5YjE4MjQ4YjA5M2M2M2Y4NTE2OGViOWZiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI2ZmE3MjZjMmM5YjQyOGI4YmFhZjJiZmZmYzcyMGZhID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8yNmZhNzI2YzJjOWI0MjhiOGJhYWYyYmZmZmM3MjBmYSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgUGxhemEgQ2FtYWNob3MgKFpvbmEgNSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDhkMzc2ZDliMTgyNDhiMDkzYzYzZjg1MTY4ZWI5ZmIuc2V0Q29udGVudChodG1sXzI2ZmE3MjZjMmM5YjQyOGI4YmFhZjJiZmZmYzcyMGZhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDkxMTE1ZTZiYTdlNDk4ZmExZmNiNDQ1MWRlYmQ2NzYuYmluZFBvcHVwKHBvcHVwX2Q4ZDM3NmQ5YjE4MjQ4YjA5M2M2M2Y4NTE2OGViOWZiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOGEyYWQwN2I0M2MyNGYxNGJiZTBlY2I3ZmJkMjA4YzYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45NzgxODA1LC0xLjEyOTM5MTldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9lM2U1NjYwNGRiODk0YTJjOWM1ZDAzOWEzYTIxMWEyZCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfOGEyYWQwN2I0M2MyNGYxNGJiZTBlY2I3ZmJkMjA4YzYuc2V0SWNvbihpY29uX2UzZTU2NjA0ZGI4OTRhMmM5YzVkMDM5YTNhMjExYTJkKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjc0ZTk2NzVmMGQ3NDMxN2E0Njk3YTUxMzI5ZWI3NGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjM4OWEyMGQ2YTliNDM2OTkzMThkMzI0NzYyNDI4NjIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzIzODlhMjBkNmE5YjQzNjk5MzE4ZDMyNDc2MjQyODYyIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBOaWNhcmFndWEgKFpvbmEgNSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjc0ZTk2NzVmMGQ3NDMxN2E0Njk3YTUxMzI5ZWI3NGYuc2V0Q29udGVudChodG1sXzIzODlhMjBkNmE5YjQzNjk5MzE4ZDMyNDc2MjQyODYyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOGEyYWQwN2I0M2MyNGYxNGJiZTBlY2I3ZmJkMjA4YzYuYmluZFBvcHVwKHBvcHVwXzI3NGU5Njc1ZjBkNzQzMTdhNDY5N2E1MTMyOWViNzRmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMWE2N2IxYjQyMDUxNDg5ZmIwZTk4ZTU4NDE1Mzg5YWMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45NzgxMTQyLC0xLjEyODIxMjhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl83MTBiMmU4ODlkZjc0MzFlYjk1ZTg0NGJkYWQwM2ZlNCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMWE2N2IxYjQyMDUxNDg5ZmIwZTk4ZTU4NDE1Mzg5YWMuc2V0SWNvbihpY29uXzcxMGIyZTg4OWRmNzQzMWViOTVlODQ0YmRhZDAzZmU0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmQzM2Q0Njc3Y2ZhNDdhNDg0Mzg2ZTMzNGQwODg0ODYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGJjZmRhYWUzYjE1NDVmM2IwZmZkZDZjZWMzNGMwMmEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzRiY2ZkYWFlM2IxNTQ1ZjNiMGZmZGQ2Y2VjMzRjMDJhIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBDYXB1Y2hpbm9zIChab25hIDUpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZkMzNkNDY3N2NmYTQ3YTQ4NDM4NmUzMzRkMDg4NDg2LnNldENvbnRlbnQoaHRtbF80YmNmZGFhZTNiMTU0NWYzYjBmZmRkNmNlYzM0YzAyYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzFhNjdiMWI0MjA1MTQ4OWZiMGU5OGU1ODQxNTM4OWFjLmJpbmRQb3B1cChwb3B1cF82ZDMzZDQ2NzdjZmE0N2E0ODQzODZlMzM0ZDA4ODQ4Nik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzA3NzZlZjc2Mzk1NDRkZmZhODhiMTZkMWNkN2QyMjE2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTc3MjQzMiwtMS4xMzM2MDgzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfNjk3N2YxNDg4OGE3NDI1Njg1N2VlNmZlYTkwYWNmZTEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNjI2NDk4MTgwNmI5NDI4NjgxNmY4ZGEyNzVlZGJlYjUgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzA3NzZlZjc2Mzk1NDRkZmZhODhiMTZkMWNkN2QyMjE2LnNldEljb24oaWNvbl82MjY0OTgxODA2Yjk0Mjg2ODE2ZjhkYTI3NWVkYmViNSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZlZjFiMjRhMmEyODQ1NmE4ZTM0ZTU1MDVmODBkZTkwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y4YTI4YzAwM2NlNDQxNGJhMGUzMjkxNWE0OTEwNDk0ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9mOGEyOGMwMDNjZTQ0MTRiYTBlMzI5MTVhNDkxMDQ5NCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgQWN0b3IgSm9zZSBDcmVzcG8gKFpvbmEgNSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmVmMWIyNGEyYTI4NDU2YThlMzRlNTUwNWY4MGRlOTAuc2V0Q29udGVudChodG1sX2Y4YTI4YzAwM2NlNDQxNGJhMGUzMjkxNWE0OTEwNDk0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDc3NmVmNzYzOTU0NGRmZmE4OGIxNmQxY2Q3ZDIyMTYuYmluZFBvcHVwKHBvcHVwXzZlZjFiMjRhMmEyODQ1NmE4ZTM0ZTU1MDVmODBkZTkwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYzM0OTc5MzM0OWFlNDFhZDlhMGQ2MjA3M2Y5Y2QwYjkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45NzU0OTM3LC0xLjEzMzAwMzVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9kYTJiYzQ2NGU3ZjU0OTk3OWExYzg2ZTY2NDc2MjZkYiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYzM0OTc5MzM0OWFlNDFhZDlhMGQ2MjA3M2Y5Y2QwYjkuc2V0SWNvbihpY29uX2RhMmJjNDY0ZTdmNTQ5OTc5YTFjODZlNjY0NzYyNmRiKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTIwNDdmOWFjMmU1NDYwNGExN2E5ODYzOGJkN2U3ZmMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGQzZDdmNGQyZmZhNGVmODkyOWU0YzFjZDVjZTIzYzQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzBkM2Q3ZjRkMmZmYTRlZjg5MjllNGMxY2Q1Y2UyM2M0IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBBdmVuaWRhIEp1YW4gQW50b25pbyBQZXJlYSAoWm9uYSA1KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MjA0N2Y5YWMyZTU0NjA0YTE3YTk4NjM4YmQ3ZTdmYy5zZXRDb250ZW50KGh0bWxfMGQzZDdmNGQyZmZhNGVmODkyOWU0YzFjZDVjZTIzYzQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jMzQ5NzkzMzQ5YWU0MWFkOWEwZDYyMDczZjljZDBiOS5iaW5kUG9wdXAocG9wdXBfNTIwNDdmOWFjMmU1NDYwNGExN2E5ODYzOGJkN2U3ZmMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xMTdhOWM0Y2YxNTU0MDk5YTUwOWU5NTIwZTM4M2RlMSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4MDQ1MSwtMS4xMzI0MzU3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfNjk3N2YxNDg4OGE3NDI1Njg1N2VlNmZlYTkwYWNmZTEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMDQzYzhiNzNmYmU4NDUwMjk4MjZkODhlYjgzMGMyZjAgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzExN2E5YzRjZjE1NTQwOTlhNTA5ZTk1MjBlMzgzZGUxLnNldEljb24oaWNvbl8wNDNjOGI3M2ZiZTg0NTAyOTgyNmQ4OGViODMwYzJmMCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q3NmNiZTEwZTQyYzQzYzc5OTljNDJkNzAzM2UxMThmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UyYWI1NzUxNzE5MTRkYzRiZDc1ZTI1NjM0OTdhNGZlID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9lMmFiNTc1MTcxOTE0ZGM0YmQ3NWUyNTYzNDk3YTRmZSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgUm9zYWwgKFpvbmEgNSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDc2Y2JlMTBlNDJjNDNjNzk5OWM0MmQ3MDMzZTExOGYuc2V0Q29udGVudChodG1sX2UyYWI1NzUxNzE5MTRkYzRiZDc1ZTI1NjM0OTdhNGZlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTE3YTljNGNmMTU1NDA5OWE1MDllOTUyMGUzODNkZTEuYmluZFBvcHVwKHBvcHVwX2Q3NmNiZTEwZTQyYzQzYzc5OTljNDJkNzAzM2UxMThmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNWFiOTliMTFmYzU5NDUwNDgzMmUwY2UzZDBjZDg1NjggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45Nzk3NjYzLC0xLjEzMjQ4NzZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9lNGY4MjkxYTYwZjk0MjFlOTc4OTIwZjc3MmNkZWUwZCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNWFiOTliMTFmYzU5NDUwNDgzMmUwY2UzZDBjZDg1Njguc2V0SWNvbihpY29uX2U0ZjgyOTFhNjBmOTQyMWU5Nzg5MjBmNzcyY2RlZTBkKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjdlN2ExZDI4NjNmNDBjYjhmODUzYjdlNWMyY2UxZTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzVmNWFlMDg4MjZjNDY0MGIwOWQ2Y2FiNWNkYjgyN2YgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2M1ZjVhZTA4ODI2YzQ2NDBiMDlkNmNhYjVjZGI4MjdmIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBNYWRyZSBFbGlzZWEgT2xpdmVyIE1vbGluYSAoWm9uYSA1KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mN2U3YTFkMjg2M2Y0MGNiOGY4NTNiN2U1YzJjZTFlMC5zZXRDb250ZW50KGh0bWxfYzVmNWFlMDg4MjZjNDY0MGIwOWQ2Y2FiNWNkYjgyN2YpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81YWI5OWIxMWZjNTk0NTA0ODMyZTBjZTNkMGNkODU2OC5iaW5kUG9wdXAocG9wdXBfZjdlN2ExZDI4NjNmNDBjYjhmODUzYjdlNWMyY2UxZTApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIG11bHRpX3BvbHlfbGluZV9kMGJiMzYxZDU2OTU0ZDcwYmFhYTY5ZDZkNThiODcyYiA9IEwubXVsdGlQb2x5bGluZSgKICAgICAgICAgICAgICAgICAgICBbW1szNy45NzcyNDMyLCAtMS4xMzM2MDgzXSwgWzM3Ljk3NTQ5MzcsIC0xLjEzMzAwMzVdXSwgW1szNy45NzU0OTM3LCAtMS4xMzMwMDM1XSwgWzM3Ljk3NTA0MzMsIC0xLjEzMDA0NF1dLCBbWzM3Ljk3NTA0MzMsIC0xLjEzMDA0NF0sIFszNy45NzY0NzAyLCAtMS4xMjcxNjMzXV0sIFtbMzcuOTc2NDcwMiwgLTEuMTI3MTYzM10sIFszNy45ODA4NDMyLCAtMS4xMjg1OTk2XV0sIFtbMzcuOTgwODQzMiwgLTEuMTI4NTk5Nl0sIFszNy45ODEzMzExLCAtMS4xMjg4MjE5XV0sIFtbMzcuOTgxMzMxMSwgLTEuMTI4ODIxOV0sIFszNy45ODE1MTkxLCAtMS4xMzA5NTE2XV0sIFtbMzcuOTgxNTE5MSwgLTEuMTMwOTUxNl0sIFszNy45ODA5NzQ0LCAtMS4xMzI4ODJdXSwgW1szNy45ODA5NzQ0LCAtMS4xMzI4ODJdLCBbMzcuOTc3MjQzMiwgLTEuMTMzNjA4M11dXSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodDogNSwKICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMSwKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXBfNjk3N2YxNDg4OGE3NDI1Njg1N2VlNmZlYTkwYWNmZTEuYWRkTGF5ZXIobXVsdGlfcG9seV9saW5lX2QwYmIzNjFkNTY5NTRkNzBiYWFhNjlkNmQ1OGI4NzJiKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWE0ZjRmMWViZTUxNGZkOGI0Yzg4NzM4MmVjMGYwNmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTJlODUzNjAyODFmNDljMWE1MjhjODVmYTUyMGQwYjMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzkyZTg1MzYwMjgxZjQ5YzFhNTI4Yzg1ZmE1MjBkMGIzIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBab25hIDU8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWE0ZjRmMWViZTUxNGZkOGI0Yzg4NzM4MmVjMGYwNmQuc2V0Q29udGVudChodG1sXzkyZTg1MzYwMjgxZjQ5YzFhNTI4Yzg1ZmE1MjBkMGIzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtdWx0aV9wb2x5X2xpbmVfZDBiYjM2MWQ1Njk1NGQ3MGJhYWE2OWQ2ZDU4Yjg3MmIuYmluZFBvcHVwKHBvcHVwX2VhNGY0ZjFlYmU1MTRmZDhiNGM4ODczODJlYzBmMDZkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzdiNjlkOGI5YmUyNDRlYTg0YzRjMTU5ZmI1ZjM2YjggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODc2OTg3LC0xLjE0MTI5MTldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl81NDMzMzg2Zjc5ZmU0MzRkYmY2MDJhNzIyZjQzNGZkNSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzc3YjY5ZDhiOWJlMjQ0ZWE4NGM0YzE1OWZiNWYzNmI4LnNldEljb24oaWNvbl81NDMzMzg2Zjc5ZmU0MzRkYmY2MDJhNzIyZjQzNGZkNSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRhNmRkYTdiYTVmZjQxY2Q4NjdjMzg4MTM1YjdjNjUxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzlmOGUzNDQ0Njc4MzQwYmU5OTJmN2FhZDQ3OGNiYzhmID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF85ZjhlMzQ0NDY3ODM0MGJlOTkyZjdhYWQ0NzhjYmM4ZiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgZGUgbGEgT2xtYSAoWm9uYSA0KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80YTZkZGE3YmE1ZmY0MWNkODY3YzM4ODEzNWI3YzY1MS5zZXRDb250ZW50KGh0bWxfOWY4ZTM0NDQ2NzgzNDBiZTk5MmY3YWFkNDc4Y2JjOGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83N2I2OWQ4YjliZTI0NGVhODRjNGMxNTlmYjVmMzZiOC5iaW5kUG9wdXAocG9wdXBfNGE2ZGRhN2JhNWZmNDFjZDg2N2MzODgxMzViN2M2NTEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85ZjljZWE1YmI3ZmI0YjBhOTRlMjc0MDhlY2I0ODNjMiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4NTEwNDgsLTEuMTM5MzI0OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzY5NzdmMTQ4ODhhNzQyNTY4NTdlZTZmZWE5MGFjZmUxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2U4Y2Y4MGMyZWUxYjQ1NTZiZmQwM2M0NjFlNGM2MjczID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfOWY5Y2VhNWJiN2ZiNGIwYTk0ZTI3NDA4ZWNiNDgzYzIuc2V0SWNvbihpY29uX2U4Y2Y4MGMyZWUxYjQ1NTZiZmQwM2M0NjFlNGM2MjczKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzYyOGQyYTRlZDljNDRlZGI4M2M3NjY1OWE4N2VlYjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWExNTQxZmQyNGJhNDQ0YzgxZjgxNTZmZWE2ODFiMGYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2VhMTU0MWZkMjRiYTQ0NGM4MWY4MTU2ZmVhNjgxYjBmIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBkZSBsb3MgQm9sb3MgKFpvbmEgNCk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzYyOGQyYTRlZDljNDRlZGI4M2M3NjY1OWE4N2VlYjQuc2V0Q29udGVudChodG1sX2VhMTU0MWZkMjRiYTQ0NGM4MWY4MTU2ZmVhNjgxYjBmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOWY5Y2VhNWJiN2ZiNGIwYTk0ZTI3NDA4ZWNiNDgzYzIuYmluZFBvcHVwKHBvcHVwXzc2MjhkMmE0ZWQ5YzQ0ZWRiODNjNzY2NTlhODdlZWI0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfY2Y4OWU0YzE3M2ZhNGVlOWEzZjMxYzUyNWVhMDZmNWQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODUwMTYyLC0xLjEzNjE0ODddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8zYmQ0ZmExZGM2Nzg0ODZkOWI5NDcyMGY3ODQyMzliMCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2NmODllNGMxNzNmYTRlZTlhM2YzMWM1MjVlYTA2ZjVkLnNldEljb24oaWNvbl8zYmQ0ZmExZGM2Nzg0ODZkOWI5NDcyMGY3ODQyMzliMCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM0MjcxYzQ0YjQ1MjQ2Y2RiMThhMGM2YTdkMDJkYzFkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M4MzBiZjM2NmZkYjRiMTI4NzZkZGFlZWI0MmY3ZDFlID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9jODMwYmYzNjZmZGI0YjEyODc2ZGRhZWViNDJmN2QxZSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgY2FsbGUgU2FnYXN0YSAoWm9uYSA0KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNDI3MWM0NGI0NTI0NmNkYjE4YTBjNmE3ZDAyZGMxZC5zZXRDb250ZW50KGh0bWxfYzgzMGJmMzY2ZmRiNGIxMjg3NmRkYWVlYjQyZjdkMWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jZjg5ZTRjMTczZmE0ZWU5YTNmMzFjNTI1ZWEwNmY1ZC5iaW5kUG9wdXAocG9wdXBfMzQyNzFjNDRiNDUyNDZjZGIxOGEwYzZhN2QwMmRjMWQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82Y2UzMzRmNjk2MWQ0NmI3YTBmNWIwOTBiNWY3MjM0ZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4Njc3MTgsLTEuMTM5MzI0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfNjk3N2YxNDg4OGE3NDI1Njg1N2VlNmZlYTkwYWNmZTEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMjIxYjYzZWMxYmI4NDA1MzhlNjM3MGQwNmQzMWFhODUgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl82Y2UzMzRmNjk2MWQ0NmI3YTBmNWIwOTBiNWY3MjM0ZS5zZXRJY29uKGljb25fMjIxYjYzZWMxYmI4NDA1MzhlNjM3MGQwNmQzMWFhODUpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNzg3MjI3YzVjNTk0ZWJjYWU5N2JmYzU2ZDg1MjQyZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZTE0ODU2YzEzMjc0ZGU3OWYzMGFlYWZmNWU5NDBiMCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfN2UxNDg1NmMxMzI3NGRlNzlmMzBhZWFmZjVlOTQwYjAiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIGRlbCBEb2N0b3IgSmVzdXMgUXVlc2FkYSBTYW56IChab25hIDQpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I3ODcyMjdjNWM1OTRlYmNhZTk3YmZjNTZkODUyNDJmLnNldENvbnRlbnQoaHRtbF83ZTE0ODU2YzEzMjc0ZGU3OWYzMGFlYWZmNWU5NDBiMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzZjZTMzNGY2OTYxZDQ2YjdhMGY1YjA5MGI1ZjcyMzRlLmJpbmRQb3B1cChwb3B1cF9iNzg3MjI3YzVjNTk0ZWJjYWU5N2JmYzU2ZDg1MjQyZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2NlNmVlOTVlMDE2ZTQ5MThiY2ZkOWNlN2Q2NjUyNGZjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTgyNzU4NiwtMS4xMzgyNzAzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfNjk3N2YxNDg4OGE3NDI1Njg1N2VlNmZlYTkwYWNmZTEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZmJlNDUwNGJjOTlhNDFjY2FmMjdiMGQ4MjliZDAxOWQgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9jZTZlZTk1ZTAxNmU0OTE4YmNmZDljZTdkNjY1MjRmYy5zZXRJY29uKGljb25fZmJlNDUwNGJjOTlhNDFjY2FmMjdiMGQ4MjliZDAxOWQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zODU0ZjRhM2NlNTI0ZTJhODA1NWI1ZDg4ODU1ZDk1YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jNmM5ZjFmODVmZTk0YjdlOTI0ZTc4NjE5YjM1NzY2MSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYzZjOWYxZjg1ZmU5NGI3ZTkyNGU3ODYxOWIzNTc2NjEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIFBpbnRvciBTb2JlamFubyAoWm9uYSA0KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zODU0ZjRhM2NlNTI0ZTJhODA1NWI1ZDg4ODU1ZDk1Yy5zZXRDb250ZW50KGh0bWxfYzZjOWYxZjg1ZmU5NGI3ZTkyNGU3ODYxOWIzNTc2NjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jZTZlZTk1ZTAxNmU0OTE4YmNmZDljZTdkNjY1MjRmYy5iaW5kUG9wdXAocG9wdXBfMzg1NGY0YTNjZTUyNGUyYTgwNTViNWQ4ODg1NWQ5NWMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lMzE5YWU0NWNjN2Y0MDlmYTU0MmE3NzE2ZTQ1ZTY4ZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4NzU4MDYsLTEuMTQ0OTM1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzY5NzdmMTQ4ODhhNzQyNTY4NTdlZTZmZWE5MGFjZmUxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2QxNTIxZTI1ZTRmMDRmZGE5MTdhMWNhMTI3ZGIwNDI3ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZTMxOWFlNDVjYzdmNDA5ZmE1NDJhNzcxNmU0NWU2OGUuc2V0SWNvbihpY29uX2QxNTIxZTI1ZTRmMDRmZGE5MTdhMWNhMTI3ZGIwNDI3KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGMwZDFiMjkxYjI0NGRlZTllYmM5NTcxNmM5NjFhMTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjhkYjVjYTM0MmEyNGE5MGFhNzE5YzNhNjI4NDlhYmIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzI4ZGI1Y2EzNDJhMjRhOTBhYTcxOWMzYTYyODQ5YWJiIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYW1pbm8gZGUgRW5tZWRpbyAoWm9uYSA0KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84YzBkMWIyOTFiMjQ0ZGVlOWViYzk1NzE2Yzk2MWExNy5zZXRDb250ZW50KGh0bWxfMjhkYjVjYTM0MmEyNGE5MGFhNzE5YzNhNjI4NDlhYmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lMzE5YWU0NWNjN2Y0MDlmYTU0MmE3NzE2ZTQ1ZTY4ZS5iaW5kUG9wdXAocG9wdXBfOGMwZDFiMjkxYjI0NGRlZTllYmM5NTcxNmM5NjFhMTcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jYTllMDY3NTg3NjI0MmU5YmQyOWFjYTlmMjE1M2YwYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4OTQ5MDksLTEuMTQyMzYzOF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzY5NzdmMTQ4ODhhNzQyNTY4NTdlZTZmZWE5MGFjZmUxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzlkYzcwZTkyYTRjZTQ4MDU4Y2NiYWZlNjM1OGRjZjYwID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfY2E5ZTA2NzU4NzYyNDJlOWJkMjlhY2E5ZjIxNTNmMGIuc2V0SWNvbihpY29uXzlkYzcwZTkyYTRjZTQ4MDU4Y2NiYWZlNjM1OGRjZjYwKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWEzZTVmOTM0ZWU1NDNlZGEyMTJjNjFiNDU1MThiMTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTVjZDU4MTIwMzQ0NDJjNGEzYmE2YjRhNjExMDIxZGEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2U1Y2Q1ODEyMDM0NDQyYzRhM2JhNmI0YTYxMTAyMWRhIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBkZSBsYXMgTm9yaWFzIChab25hIDQpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FhM2U1ZjkzNGVlNTQzZWRhMjEyYzYxYjQ1NTE4YjEyLnNldENvbnRlbnQoaHRtbF9lNWNkNTgxMjAzNDQ0MmM0YTNiYTZiNGE2MTEwMjFkYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2NhOWUwNjc1ODc2MjQyZTliZDI5YWNhOWYyMTUzZjBiLmJpbmRQb3B1cChwb3B1cF9hYTNlNWY5MzRlZTU0M2VkYTIxMmM2MWI0NTUxOGIxMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2JjYzQwYjMzY2I0NzQxNzBhY2Q4ZGQwNTA5MDc5MzIxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTg5NDkwOSwtMS4xNDIzNjM4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfNjk3N2YxNDg4OGE3NDI1Njg1N2VlNmZlYTkwYWNmZTEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNzE5NzQxMjc0ODgzNDRiM2I4Njk3NTIzMjU4NGJjMjUgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9iY2M0MGIzM2NiNDc0MTcwYWNkOGRkMDUwOTA3OTMyMS5zZXRJY29uKGljb25fNzE5NzQxMjc0ODgzNDRiM2I4Njk3NTIzMjU4NGJjMjUpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81MDE1MWI0NDk2NzQ0ZWEzYjY5ZGNkNzVkZDdkMTM3MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80MDlmYTJmNzVmMTg0ZGY3Yjk1ODE0Njc4NWQzZmViZSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNDA5ZmEyZjc1ZjE4NGRmN2I5NTgxNDY3ODVkM2ZlYmUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIE9sb2YgUGFsbWUgKFpvbmEgNCk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTAxNTFiNDQ5Njc0NGVhM2I2OWRjZDc1ZGQ3ZDEzNzMuc2V0Q29udGVudChodG1sXzQwOWZhMmY3NWYxODRkZjdiOTU4MTQ2Nzg1ZDNmZWJlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYmNjNDBiMzNjYjQ3NDE3MGFjZDhkZDA1MDkwNzkzMjEuYmluZFBvcHVwKHBvcHVwXzUwMTUxYjQ0OTY3NDRlYTNiNjlkY2Q3NWRkN2QxMzczKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYTFlZmMxYWEyYzAzNGViOGJjNTExYzk2OGVhNjU0M2IgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODM4NDEyLC0xLjEzMzQ0Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzY5NzdmMTQ4ODhhNzQyNTY4NTdlZTZmZWE5MGFjZmUxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2NlYWRiM2FkMzcwNDQwZjViNDM2NmZkM2FjODYzNjZkID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYTFlZmMxYWEyYzAzNGViOGJjNTExYzk2OGVhNjU0M2Iuc2V0SWNvbihpY29uX2NlYWRiM2FkMzcwNDQwZjViNDM2NmZkM2FjODYzNjZkKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjA5YzljMzVmM2QwNDRjNDg1OTUyZWMyMDU0NzQ5MTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjVkYmU5MzEzZjMyNDYzOWIyM2VjZGQxMzlkNGNkYzggPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2I1ZGJlOTMxM2YzMjQ2MzliMjNlY2RkMTM5ZDRjZGM4IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBBcmNvIFZlcm9uaWNhcyAoWm9uYSA0KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yMDljOWMzNWYzZDA0NGM0ODU5NTJlYzIwNTQ3NDkxMC5zZXRDb250ZW50KGh0bWxfYjVkYmU5MzEzZjMyNDYzOWIyM2VjZGQxMzlkNGNkYzgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hMWVmYzFhYTJjMDM0ZWI4YmM1MTFjOTY4ZWE2NTQzYi5iaW5kUG9wdXAocG9wdXBfMjA5YzljMzVmM2QwNDRjNDg1OTUyZWMyMDU0NzQ5MTApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kZDc4MWU0MTM0ZGM0ZmRmOTc2NDk0OGMxMTk0ZDE1MCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4OTY2MjksLTEuMTM3MzI2N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzY5NzdmMTQ4ODhhNzQyNTY4NTdlZTZmZWE5MGFjZmUxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzM5OTk2NDlmZTFkZDQzZDFhYWE4MWZkMDEzODQ2MWM2ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZGQ3ODFlNDEzNGRjNGZkZjk3NjQ5NDhjMTE5NGQxNTAuc2V0SWNvbihpY29uXzM5OTk2NDlmZTFkZDQzZDFhYWE4MWZkMDEzODQ2MWM2KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGYwZjRjMmFlZjgwNGVmZWE1YzJjNmY3NDhiNmNlZGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzRiZDU1ZWQxMWUwNGNjMjgxOTdjYmFkYTYxOTJiZjMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2M0YmQ1NWVkMTFlMDRjYzI4MTk3Y2JhZGE2MTkyYmYzIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBGcmFuY2lzY28gUmFiYWwgKFpvbmEgNCk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGYwZjRjMmFlZjgwNGVmZWE1YzJjNmY3NDhiNmNlZGQuc2V0Q29udGVudChodG1sX2M0YmQ1NWVkMTFlMDRjYzI4MTk3Y2JhZGE2MTkyYmYzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZGQ3ODFlNDEzNGRjNGZkZjk3NjQ5NDhjMTE5NGQxNTAuYmluZFBvcHVwKHBvcHVwXzhmMGY0YzJhZWY4MDRlZmVhNWMyYzZmNzQ4YjZjZWRkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTdkZTM4ODY3ZDBiNDMwOGFiYWQyMjFkOTZmMTQ2YjggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODQyNjc1LC0xLjEzMTYyODRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl85MDRkMTZlN2U4YzU0MzVlYjcxYmJiMTBkNzFhYmYzYyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzk3ZGUzODg2N2QwYjQzMDhhYmFkMjIxZDk2ZjE0NmI4LnNldEljb24oaWNvbl85MDRkMTZlN2U4YzU0MzVlYjcxYmJiMTBkNzFhYmYzYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YzYzdiZjdhZjdkYzQ0ZGFiZTcxODc5MzY0YjExNGMxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q0OGJiMTgzM2RmZTRmM2U4N2ZjNzUyZmE1ZWZmMWUzID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9kNDhiYjE4MzNkZmU0ZjNlODdmYzc1MmZhNWVmZjFlMyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgTWFkcmUgZGUgRGlvcyAoWm9uYSA0KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mM2M3YmY3YWY3ZGM0NGRhYmU3MTg3OTM2NGIxMTRjMS5zZXRDb250ZW50KGh0bWxfZDQ4YmIxODMzZGZlNGYzZTg3ZmM3NTJmYTVlZmYxZTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85N2RlMzg4NjdkMGI0MzA4YWJhZDIyMWQ5NmYxNDZiOC5iaW5kUG9wdXAocG9wdXBfZjNjN2JmN2FmN2RjNDRkYWJlNzE4NzkzNjRiMTE0YzEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jODUwNDU1MTA5YTY0NmYwYWVjNWVmNDVjOTNjMDQ2NSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4NTkyMzYsLTEuMTM4MzM2OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzY5NzdmMTQ4ODhhNzQyNTY4NTdlZTZmZWE5MGFjZmUxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzQ3YmZjOGJlYTQwNzRkYmRhMTZlN2MyMDI2Y2UxYTEwID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYzg1MDQ1NTEwOWE2NDZmMGFlYzVlZjQ1YzkzYzA0NjUuc2V0SWNvbihpY29uXzQ3YmZjOGJlYTQwNzRkYmRhMTZlN2MyMDI2Y2UxYTEwKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTIwNzlkOTYwMzlhNGZlMzg2YmYxMGY4ZDhmZWQ5ZmIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWI3ZmVjZDViNjExNDkwNGIwZWFjMThlZmI4MzZiZjcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2FiN2ZlY2Q1YjYxMTQ5MDRiMGVhYzE4ZWZiODM2YmY3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBOdWV2YXMgVGVjbm9sb2dpYXMgKFpvbmEgNCk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTIwNzlkOTYwMzlhNGZlMzg2YmYxMGY4ZDhmZWQ5ZmIuc2V0Q29udGVudChodG1sX2FiN2ZlY2Q1YjYxMTQ5MDRiMGVhYzE4ZWZiODM2YmY3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYzg1MDQ1NTEwOWE2NDZmMGFlYzVlZjQ1YzkzYzA0NjUuYmluZFBvcHVwKHBvcHVwX2EyMDc5ZDk2MDM5YTRmZTM4NmJmMTBmOGQ4ZmVkOWZiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfY2Y4NjQ3NjU0NmNjNGNjNTgwYjY0Mjc2NzJkZWNjOTcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODcxOTI2LC0xLjEzOTM5NjFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl80NjFhMWIyYTU5MzY0NTFkYThkNTdmZTVmMTJhOTY3OCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2NmODY0NzY1NDZjYzRjYzU4MGI2NDI3NjcyZGVjYzk3LnNldEljb24oaWNvbl80NjFhMWIyYTU5MzY0NTFkYThkNTdmZTVmMTJhOTY3OCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJjNDkyZWVhMzVhYjRmODI5MDI4OWRiMGYwNTU2MzBjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UyY2Y4MjZkOWEyNzQyNDZiYjc5MTdjNDJhYTRkZWQxID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9lMmNmODI2ZDlhMjc0MjQ2YmI3OTE3YzQyYWE0ZGVkMSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgU2llcnJhIGRlIEdyZWRvcyAoWm9uYSA0KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yYzQ5MmVlYTM1YWI0ZjgyOTAyODlkYjBmMDU1NjMwYy5zZXRDb250ZW50KGh0bWxfZTJjZjgyNmQ5YTI3NDI0NmJiNzkxN2M0MmFhNGRlZDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jZjg2NDc2NTQ2Y2M0Y2M1ODBiNjQyNzY3MmRlY2M5Ny5iaW5kUG9wdXAocG9wdXBfMmM0OTJlZWEzNWFiNGY4MjkwMjg5ZGIwZjA1NTYzMGMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81OWNiZDlkMTBlNTI0OGE4YWE2N2U4MjdkYTVkYjc0NiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4ODE4ODksLTEuMTM5NjU3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfNjk3N2YxNDg4OGE3NDI1Njg1N2VlNmZlYTkwYWNmZTEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZTk0ZDhmMWE1NjYyNGZlZmExMTdlYjM5NzVlZDcwNDEgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl81OWNiZDlkMTBlNTI0OGE4YWE2N2U4MjdkYTVkYjc0Ni5zZXRJY29uKGljb25fZTk0ZDhmMWE1NjYyNGZlZmExMTdlYjM5NzVlZDcwNDEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNjQ3YzA2ZWJmOWU0Y2ZlYmUyZTkzNzkzMWYwMmQ1YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jOTgxNzE5N2ZhZGI0MTE3OTI2NGY4YTQxYjRjZTQ1YyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYzk4MTcxOTdmYWRiNDExNzkyNjRmOGE0MWI0Y2U0NWMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIFNpZXJyYSBDYXJib25lcmEgKFpvbmEgNCk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzY0N2MwNmViZjllNGNmZWJlMmU5Mzc5MzFmMDJkNWMuc2V0Q29udGVudChodG1sX2M5ODE3MTk3ZmFkYjQxMTc5MjY0ZjhhNDFiNGNlNDVjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTljYmQ5ZDEwZTUyNDhhOGFhNjdlODI3ZGE1ZGI3NDYuYmluZFBvcHVwKHBvcHVwXzM2NDdjMDZlYmY5ZTRjZmViZTJlOTM3OTMxZjAyZDVjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTFlMGE4MDNkZTJiNDkxN2IyYWYzZDE5MTA0NzQ0ZTcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODY0NDI0LC0xLjEzNzY4MTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl80MTQwZDRhZmI3NTQ0MTU0YWEwODFlOGY0OGQ4OTJkNyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzkxZTBhODAzZGUyYjQ5MTdiMmFmM2QxOTEwNDc0NGU3LnNldEljb24oaWNvbl80MTQwZDRhZmI3NTQ0MTU0YWEwODFlOGY0OGQ4OTJkNyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JhYmVlZTJkYmQ3ZTQwZTY4Yzc2NjNhOGZkZmRkOTY2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJmZDllNGNkNzRmOTRjODc5NzgwNzA5N2FjNDNjMDAwID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8yZmQ5ZTRjZDc0Zjk0Yzg3OTc4MDcwOTdhYzQzYzAwMCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgQXJyaXhhY2EgKFpvbmEgNCk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmFiZWVlMmRiZDdlNDBlNjhjNzY2M2E4ZmRmZGQ5NjYuc2V0Q29udGVudChodG1sXzJmZDllNGNkNzRmOTRjODc5NzgwNzA5N2FjNDNjMDAwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOTFlMGE4MDNkZTJiNDkxN2IyYWYzZDE5MTA0NzQ0ZTcuYmluZFBvcHVwKHBvcHVwX2JhYmVlZTJkYmQ3ZTQwZTY4Yzc2NjNhOGZkZmRkOTY2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMDhiNDljY2Q5OTYzNDMyM2FkMzM0N2ZjNDUzZGQxYTYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODM4NTA2LC0xLjEzMjU1MzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl83NTZmMmVmZmRjMzg0ZjRlOWE5ZjA3ZGM1NGE0YWI1ZiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzA4YjQ5Y2NkOTk2MzQzMjNhZDMzNDdmYzQ1M2RkMWE2LnNldEljb24oaWNvbl83NTZmMmVmZmRjMzg0ZjRlOWE5ZjA3ZGM1NGE0YWI1Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUyMDYyMzJjMDkwMjRhY2JiYjUyZGE1ZDNhZTY4ZjI5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMwNTdiYmUyZmQ3MTRiNjQ5NTIwMjhlNDI1MjQyMThiID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8zMDU3YmJlMmZkNzE0YjY0OTUyMDI4ZTQyNTI0MjE4YiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgUGFzY3VhbCAoWm9uYSA0KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MjA2MjMyYzA5MDI0YWNiYmI1MmRhNWQzYWU2OGYyOS5zZXRDb250ZW50KGh0bWxfMzA1N2JiZTJmZDcxNGI2NDk1MjAyOGU0MjUyNDIxOGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wOGI0OWNjZDk5NjM0MzIzYWQzMzQ3ZmM0NTNkZDFhNi5iaW5kUG9wdXAocG9wdXBfNTIwNjIzMmMwOTAyNGFjYmJiNTJkYTVkM2FlNjhmMjkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jZTAxZjgwMTkwMzg0YTQ4YTUxYTM4ZWQ0ZjlmNmE5NyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4NjU2NDYsLTEuMTM3NzA3MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzY5NzdmMTQ4ODhhNzQyNTY4NTdlZTZmZWE5MGFjZmUxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2MwMDVhMmY0MjgyYTRjMGViZjJkNTJlYzA1ODg3ZTRhID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfY2UwMWY4MDE5MDM4NGE0OGE1MWEzOGVkNGY5ZjZhOTcuc2V0SWNvbihpY29uX2MwMDVhMmY0MjgyYTRjMGViZjJkNTJlYzA1ODg3ZTRhKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWRjODgxNDRlYzljNGZiMGFiODJkNWJmMTBhZjg4ZGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjk2NTMxYTA3OWY5NDlhNGI0NGYyOWQ4MDU1NGIxNTggPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzY5NjUzMWEwNzlmOTQ5YTRiNDRmMjlkODA1NTRiMTU4IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBQbGF6YSBkZSBTYW4gQWd1c3RpbiAoWm9uYSA0KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lZGM4ODE0NGVjOWM0ZmIwYWI4MmQ1YmYxMGFmODhkYS5zZXRDb250ZW50KGh0bWxfNjk2NTMxYTA3OWY5NDlhNGI0NGYyOWQ4MDU1NGIxNTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jZTAxZjgwMTkwMzg0YTQ4YTUxYTM4ZWQ0ZjlmNmE5Ny5iaW5kUG9wdXAocG9wdXBfZWRjODgxNDRlYzljNGZiMGFiODJkNWJmMTBhZjg4ZGEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hMjFiZGY4NzMxYmE0Yjc0YWFlZGQyNGUwM2FiZjM4MCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4NjI3MjMsLTEuMTQwMDM1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfNjk3N2YxNDg4OGE3NDI1Njg1N2VlNmZlYTkwYWNmZTEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNjgxMzUwM2Y2ZmM5NDBjODhlYWIxMWI2NmMwYjc5NGQgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9hMjFiZGY4NzMxYmE0Yjc0YWFlZGQyNGUwM2FiZjM4MC5zZXRJY29uKGljb25fNjgxMzUwM2Y2ZmM5NDBjODhlYWIxMWI2NmMwYjc5NGQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ZjBmMTdhNjAxOWM0YzkwYmQwMDc4MTcxNDhjMmJlNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMmYzZmJiYWZmMDg0YzVlYWUxYTM3NzliMmY5MDM3MCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYzJmM2ZiYmFmZjA4NGM1ZWFlMWEzNzc5YjJmOTAzNzAiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIE1hcmlhbm8gTW9udGVzaW5vcyAoWm9uYSA0KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZjBmMTdhNjAxOWM0YzkwYmQwMDc4MTcxNDhjMmJlNy5zZXRDb250ZW50KGh0bWxfYzJmM2ZiYmFmZjA4NGM1ZWFlMWEzNzc5YjJmOTAzNzApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hMjFiZGY4NzMxYmE0Yjc0YWFlZGQyNGUwM2FiZjM4MC5iaW5kUG9wdXAocG9wdXBfNmYwZjE3YTYwMTljNGM5MGJkMDA3ODE3MTQ4YzJiZTcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIG11bHRpX3BvbHlfbGluZV9jZTI4NTg4ZGUwNDQ0ZTUzOTEwMDk1NTBjZGZiODBjZCA9IEwubXVsdGlQb2x5bGluZSgKICAgICAgICAgICAgICAgICAgICBbW1szNy45ODc1ODA2LCAtMS4xNDQ5MzU2XSwgWzM3Ljk4Mjc1ODYsIC0xLjEzODI3MDNdXSwgW1szNy45ODI3NTg2LCAtMS4xMzgyNzAzXSwgWzM3Ljk4Mzg1MDYsIC0xLjEzMjU1MzNdXSwgW1szNy45ODM4NTA2LCAtMS4xMzI1NTMzXSwgWzM3Ljk4NDI2NzUsIC0xLjEzMTYyODRdXSwgW1szNy45ODQyNjc1LCAtMS4xMzE2Mjg0XSwgWzM3Ljk4OTY2MjksIC0xLjEzNzMyNjddXSwgW1szNy45ODk2NjI5LCAtMS4xMzczMjY3XSwgWzM3Ljk4OTQ5MDksIC0xLjE0MjM2MzhdXSwgW1szNy45ODk0OTA5LCAtMS4xNDIzNjM4XSwgWzM3Ljk4NzU4MDYsIC0xLjE0NDkzNTZdXV0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OiA1LAogICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAxLAogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMS5hZGRMYXllcihtdWx0aV9wb2x5X2xpbmVfY2UyODU4OGRlMDQ0NGU1MzkxMDA5NTUwY2RmYjgwY2QpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81MjZjMGM5NzE0ZTY0Yjc1ODIwYzdjOTIxOTI4OWFjMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMTNlMTViN2JhOGQ0NDhjOTJmNTdlYjQ3Y2JkODM1ZiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMTEzZTE1YjdiYThkNDQ4YzkyZjU3ZWI0N2NiZDgzNWYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFpvbmEgNDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MjZjMGM5NzE0ZTY0Yjc1ODIwYzdjOTIxOTI4OWFjMC5zZXRDb250ZW50KGh0bWxfMTEzZTE1YjdiYThkNDQ4YzkyZjU3ZWI0N2NiZDgzNWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG11bHRpX3BvbHlfbGluZV9jZTI4NTg4ZGUwNDQ0ZTUzOTEwMDk1NTBjZGZiODBjZC5iaW5kUG9wdXAocG9wdXBfNTI2YzBjOTcxNGU2NGI3NTgyMGM3YzkyMTkyODlhYzApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jYjVmNGY2M2RhOGU0MTgxODNiYmVlMzllZDEwNGUyNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4NTEzOTQsLTEuMTIzMjQ5OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzY5NzdmMTQ4ODhhNzQyNTY4NTdlZTZmZWE5MGFjZmUxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzFjYjlkMGIwMGE5YzQ1ODdiYTRiMjBjYWEzOGExYWI2ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnb3JhbmdlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2NiNWY0ZjYzZGE4ZTQxODE4M2JiZWUzOWVkMTA0ZTI2LnNldEljb24oaWNvbl8xY2I5ZDBiMDBhOWM0NTg3YmE0YjIwY2FhMzhhMWFiNik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFkNzFkYjY4ZWYwNjQxMDU4OWQyOGIzYzU2NmNmYzkyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk3NGZmNzA1ZDIyYjQxNTQ5YmVkYzVjMDM2MTVmZjk2ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF85NzRmZjcwNWQyMmI0MTU0OWJlZGM1YzAzNjE1ZmY5NiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgUm9uZGEgZGUgR2FyYXkgKFpvbmEgNik8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWQ3MWRiNjhlZjA2NDEwNTg5ZDI4YjNjNTY2Y2ZjOTIuc2V0Q29udGVudChodG1sXzk3NGZmNzA1ZDIyYjQxNTQ5YmVkYzVjMDM2MTVmZjk2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfY2I1ZjRmNjNkYThlNDE4MTgzYmJlZTM5ZWQxMDRlMjYuYmluZFBvcHVwKHBvcHVwXzFkNzFkYjY4ZWYwNjQxMDU4OWQyOGIzYzU2NmNmYzkyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZGE0ZTcxOTQ5M2FmNDc0ZWFiY2JhNTY3ODgxYTMxOTkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODQxODg3LC0xLjEyNDk5MDZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9mOTMwNTAyYTkzODM0ZTkzYjQ4MTgyNjEyNjg3YTVhMiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9kYTRlNzE5NDkzYWY0NzRlYWJjYmE1Njc4ODFhMzE5OS5zZXRJY29uKGljb25fZjkzMDUwMmE5MzgzNGU5M2I0ODE4MjYxMjY4N2E1YTIpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81MTU5M2U3YzRhNTA0MzljYjk2MTVlMjNlYzM2ZWZmMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NjFmNTlhMGNlZmY0MWExOGZhOWI1YTJlMTFjOTMwYSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNjYxZjU5YTBjZWZmNDFhMThmYTliNWEyZTExYzkzMGEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIFNpbW9uIEdhcmNpYSAoWm9uYSA2KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MTU5M2U3YzRhNTA0MzljYjk2MTVlMjNlYzM2ZWZmMS5zZXRDb250ZW50KGh0bWxfNjYxZjU5YTBjZWZmNDFhMThmYTliNWEyZTExYzkzMGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kYTRlNzE5NDkzYWY0NzRlYWJjYmE1Njc4ODFhMzE5OS5iaW5kUG9wdXAocG9wdXBfNTE1OTNlN2M0YTUwNDM5Y2I5NjE1ZTIzZWMzNmVmZjEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wZjZiN2I4NTgzNzI0ZmM5ODU5MmM5NzAzMjRlMzg4OCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4NDE2NDQsLTEuMTIxOTY0Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzY5NzdmMTQ4ODhhNzQyNTY4NTdlZTZmZWE5MGFjZmUxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2VmNTg5MjNkN2UzMzQ5ZGZiZmY3Nzk3MGI3MWIxMTcyID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnb3JhbmdlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzBmNmI3Yjg1ODM3MjRmYzk4NTkyYzk3MDMyNGUzODg4LnNldEljb24oaWNvbl9lZjU4OTIzZDdlMzM0OWRmYmZmNzc5NzBiNzFiMTE3Mik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU3ZGI0NmZlMTQxODQwMjFhNWE1MjMyODYwYWU4ZmMzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IxZTkyMTU2OTIwNDQ2MmM5NmFiYTkwMjhjNGJmMGU0ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9iMWU5MjE1NjkyMDQ0NjJjOTZhYmE5MDI4YzRiZjBlNCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgU2FuIExlYW5kcm8gKFpvbmEgNik8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTdkYjQ2ZmUxNDE4NDAyMWE1YTUyMzI4NjBhZThmYzMuc2V0Q29udGVudChodG1sX2IxZTkyMTU2OTIwNDQ2MmM5NmFiYTkwMjhjNGJmMGU0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMGY2YjdiODU4MzcyNGZjOTg1OTJjOTcwMzI0ZTM4ODguYmluZFBvcHVwKHBvcHVwXzU3ZGI0NmZlMTQxODQwMjFhNWE1MjMyODYwYWU4ZmMzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZTJlNzE3NTlhMmRlNGI3MzhmZDhiNTQ2MjkxM2M3MjAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODI0NDA3LC0xLjEyNDcyOF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzY5NzdmMTQ4ODhhNzQyNTY4NTdlZTZmZWE5MGFjZmUxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzAzMGNhZGFmYTUxNTQ5OWI4MzFjMDJiZGYzYWRmN2I3ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnb3JhbmdlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2UyZTcxNzU5YTJkZTRiNzM4ZmQ4YjU0NjI5MTNjNzIwLnNldEljb24oaWNvbl8wMzBjYWRhZmE1MTU0OTliODMxYzAyYmRmM2FkZjdiNyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE1NTQzZGI0NGI0ZTQ2Y2Q4MGQwMmJhZGU3YzE0ZmQ3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkzNWI4NTlkMDg1MTRhOTU4OWVjN2FhY2M5ZmViNWViID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF85MzViODU5ZDA4NTE0YTk1ODllYzdhYWNjOWZlYjVlYiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgR2VuZXJhbCBTYW5tYXJ0aW4gKFpvbmEgNik8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTU1NDNkYjQ0YjRlNDZjZDgwZDAyYmFkZTdjMTRmZDcuc2V0Q29udGVudChodG1sXzkzNWI4NTlkMDg1MTRhOTU4OWVjN2FhY2M5ZmViNWViKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZTJlNzE3NTlhMmRlNGI3MzhmZDhiNTQ2MjkxM2M3MjAuYmluZFBvcHVwKHBvcHVwXzE1NTQzZGI0NGI0ZTQ2Y2Q4MGQwMmJhZGU3YzE0ZmQ3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZTY5NThkMmQ0NDE0NGVjMWI3MDQ1OGViN2E3MTM2NWEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODQ3MzY4LC0xLjEyMjMwODZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9hYWIwZGExYWYzY2Y0NjM1ODc1YmVmNmE4OWRiNzA1ZiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9lNjk1OGQyZDQ0MTQ0ZWMxYjcwNDU4ZWI3YTcxMzY1YS5zZXRJY29uKGljb25fYWFiMGRhMWFmM2NmNDYzNTg3NWJlZjZhODlkYjcwNWYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hYTYyODUzYTA3ZWY0YzAyODFhOTJlMTdjZDE3NzEyMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNzhlNGMwZjhhNGE0YzRmOWMyZWZhYmZkODcyYWQ3MyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYTc4ZTRjMGY4YTRhNGM0ZjljMmVmYWJmZDg3MmFkNzMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIEpvc2VsaXRvIChab25hIDYpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FhNjI4NTNhMDdlZjRjMDI4MWE5MmUxN2NkMTc3MTIzLnNldENvbnRlbnQoaHRtbF9hNzhlNGMwZjhhNGE0YzRmOWMyZWZhYmZkODcyYWQ3Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2U2OTU4ZDJkNDQxNDRlYzFiNzA0NThlYjdhNzEzNjVhLmJpbmRQb3B1cChwb3B1cF9hYTYyODUzYTA3ZWY0YzAyODFhOTJlMTdjZDE3NzEyMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2M0NTZhMDc4MmJhYzQ1ZTViYjRmZjgzMzVmODBjODZhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTg2MDgxOCwtMS4xMjQwODk2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfNjk3N2YxNDg4OGE3NDI1Njg1N2VlNmZlYTkwYWNmZTEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZGRiODgwOWJmYTNiNDNjNTk1MTY1ZDNiNDJlOGU0ZDIgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYzQ1NmEwNzgyYmFjNDVlNWJiNGZmODMzNWY4MGM4NmEuc2V0SWNvbihpY29uX2RkYjg4MDliZmEzYjQzYzU5NTE2NWQzYjQyZThlNGQyKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWRkZjljM2E3YjZhNDgwMjlkOTMzYTBkMmY1YTdlYTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmI3YmE5YzEwNDE5NGUyYjhkYjQ3YmVhY2FiZmYxOTcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2JiN2JhOWMxMDQxOTRlMmI4ZGI0N2JlYWNhYmZmMTk3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBNYXJpYW5vIFZlcmdhcmEgKFpvbmEgNik8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWRkZjljM2E3YjZhNDgwMjlkOTMzYTBkMmY1YTdlYTUuc2V0Q29udGVudChodG1sX2JiN2JhOWMxMDQxOTRlMmI4ZGI0N2JlYWNhYmZmMTk3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYzQ1NmEwNzgyYmFjNDVlNWJiNGZmODMzNWY4MGM4NmEuYmluZFBvcHVwKHBvcHVwX2FkZGY5YzNhN2I2YTQ4MDI5ZDkzM2EwZDJmNWE3ZWE1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjljMmY1ZGI1NmM0NGY0YWFjZmM0YjJmNzEyMThmODYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODY0OTUyLC0xLjEyNDAyMTRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl83YjQ4MjA1YzFhOWQ0MWQ1ODZkMGUwYmY4ZWMxZTcwOSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9iOWMyZjVkYjU2YzQ0ZjRhYWNmYzRiMmY3MTIxOGY4Ni5zZXRJY29uKGljb25fN2I0ODIwNWMxYTlkNDFkNTg2ZDBlMGJmOGVjMWU3MDkpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jOTFkMWE4NmI3Mzc0MjVmODhiMzQxOTkwZTc2ZmQzZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jY2EwZDMyYTkwNjE0NWQ3YmIxM2I3MmM5YzcxNWQ0YyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfY2NhMGQzMmE5MDYxNDVkN2JiMTNiNzJjOWM3MTVkNGMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIE9iaXNwbyBGcnV0b3MgKFpvbmEgNik8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzkxZDFhODZiNzM3NDI1Zjg4YjM0MTk5MGU3NmZkM2Yuc2V0Q29udGVudChodG1sX2NjYTBkMzJhOTA2MTQ1ZDdiYjEzYjcyYzljNzE1ZDRjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYjljMmY1ZGI1NmM0NGY0YWFjZmM0YjJmNzEyMThmODYuYmluZFBvcHVwKHBvcHVwX2M5MWQxYTg2YjczNzQyNWY4OGIzNDE5OTBlNzZmZDNmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjYxNzcxMjRkZGEwNGE3ZTgyY2JkMzgyMjRiYjc1ZDYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODc0NzgxLC0xLjEyMzY2NTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8xMzkwODk1NzgyYjA0MjczYjY5ZmQ3YTkzYWRkNGQ3NyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ29yYW5nZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9iNjE3NzEyNGRkYTA0YTdlODJjYmQzODIyNGJiNzVkNi5zZXRJY29uKGljb25fMTM5MDg5NTc4MmIwNDI3M2I2OWZkN2E5M2FkZDRkNzcpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ZmM5ODQwNjVkYWI0NmZhOGZlYTAyNDQ2MDY4ZGQzYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hY2IxN2I2YjEyYjA0YzIwOGQ2NDUwMzY5OGU2MzFmMyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYWNiMTdiNmIxMmIwNGMyMDhkNjQ1MDM2OThlNjMxZjMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIENpZ2FycmFsIChab25hIDYpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdmYzk4NDA2NWRhYjQ2ZmE4ZmVhMDI0NDYwNjhkZDNjLnNldENvbnRlbnQoaHRtbF9hY2IxN2I2YjEyYjA0YzIwOGQ2NDUwMzY5OGU2MzFmMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2I2MTc3MTI0ZGRhMDRhN2U4MmNiZDM4MjI0YmI3NWQ2LmJpbmRQb3B1cChwb3B1cF83ZmM5ODQwNjVkYWI0NmZhOGZlYTAyNDQ2MDY4ZGQzYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2JjMjlmMjI0NmYzZjQ3Mjg5YzZmOTNhM2U3OTJkMzIyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTg1MjEwOSwtMS4xMjM5NzY5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfNjk3N2YxNDg4OGE3NDI1Njg1N2VlNmZlYTkwYWNmZTEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMjc5ZjdkODFhMjMyNDM4ZTk4YTNjMGNmNDYzMzkwMTEgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYmMyOWYyMjQ2ZjNmNDcyODljNmY5M2EzZTc5MmQzMjIuc2V0SWNvbihpY29uXzI3OWY3ZDgxYTIzMjQzOGU5OGEzYzBjZjQ2MzM5MDExKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWZjYTE4ZmQzYTk4NDgwM2E3YTViY2M2YjZmMjUyZTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGM2NzEwOTBlNzAwNDBkYTk2YzQ0NzUxNDcwYjc3MzEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzRjNjcxMDkwZTcwMDQwZGE5NmM0NDc1MTQ3MGI3NzMxIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBQZXJpb2Rpc3RhIE5pY29sYXMgT3J0ZWdhIFBhZ2FuIChab25hIDYpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FmY2ExOGZkM2E5ODQ4MDNhN2E1YmNjNmI2ZjI1MmU3LnNldENvbnRlbnQoaHRtbF80YzY3MTA5MGU3MDA0MGRhOTZjNDQ3NTE0NzBiNzczMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2JjMjlmMjI0NmYzZjQ3Mjg5YzZmOTNhM2U3OTJkMzIyLmJpbmRQb3B1cChwb3B1cF9hZmNhMThmZDNhOTg0ODAzYTdhNWJjYzZiNmYyNTJlNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2ZkMGVjZmFhNTI0NTRkZDU4YWNiMDZjODdiNmFiODU3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTg3ODY1NSwtMS4xMjMxNjk4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfNjk3N2YxNDg4OGE3NDI1Njg1N2VlNmZlYTkwYWNmZTEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYjY4MWQ0MzhkZDQ0NDdhYWFmYTVlOWJhMGRkODBlZTAgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZmQwZWNmYWE1MjQ1NGRkNThhY2IwNmM4N2I2YWI4NTcuc2V0SWNvbihpY29uX2I2ODFkNDM4ZGQ0NDQ3YWFhZmE1ZTliYTBkZDgwZWUwKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTI0Nzg2NDdmZTcyNGFjNmJjMTI4YjgzZjg1YWQzZWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYThmNTkwOTY4YjYxNDQxODliMGVhOTlhZWEzYzliYjMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2E4ZjU5MDk2OGI2MTQ0MTg5YjBlYTk5YWVhM2M5YmIzIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBkZSBDZXV0YSAoWm9uYSA2KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MjQ3ODY0N2ZlNzI0YWM2YmMxMjhiODNmODVhZDNlZS5zZXRDb250ZW50KGh0bWxfYThmNTkwOTY4YjYxNDQxODliMGVhOTlhZWEzYzliYjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mZDBlY2ZhYTUyNDU0ZGQ1OGFjYjA2Yzg3YjZhYjg1Ny5iaW5kUG9wdXAocG9wdXBfNTI0Nzg2NDdmZTcyNGFjNmJjMTI4YjgzZjg1YWQzZWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wN2ZhZTJkMWRkODM0ZjU3OWNlZWE0NTAxYzYxMTMwZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4MjkyNTMsLTEuMTIyOTU4N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzY5NzdmMTQ4ODhhNzQyNTY4NTdlZTZmZWE5MGFjZmUxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzdlODk0Yjk2Yzk5MjRmM2ViYzE3NjIyZmZlZGM4ZTlhID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnb3JhbmdlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzA3ZmFlMmQxZGQ4MzRmNTc5Y2VlYTQ1MDFjNjExMzBlLnNldEljb24oaWNvbl83ZTg5NGI5NmM5OTI0ZjNlYmMxNzYyMmZmZWRjOGU5YSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI1YmFkOGU1OTNjMzQ5YWE4ZDk4OTgxZTYxZjExMTk0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzExMjg1MjdjYTdmOTRkZWZhZjI3NzJhYWNjYTViNzM5ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8xMTI4NTI3Y2E3Zjk0ZGVmYWYyNzcyYWFjY2E1YjczOSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgQ29tdW5lcm9zIChab25hIDYpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI1YmFkOGU1OTNjMzQ5YWE4ZDk4OTgxZTYxZjExMTk0LnNldENvbnRlbnQoaHRtbF8xMTI4NTI3Y2E3Zjk0ZGVmYWYyNzcyYWFjY2E1YjczOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzA3ZmFlMmQxZGQ4MzRmNTc5Y2VlYTQ1MDFjNjExMzBlLmJpbmRQb3B1cChwb3B1cF8yNWJhZDhlNTkzYzM0OWFhOGQ5ODk4MWU2MWYxMTE5NCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzNjMzVhZDAyZjQ5ZTQ1NDlhNjYzYmZlM2ZlZDIyYmY2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTg3NDYyNSwtMS4xMjQ1MDc4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfNjk3N2YxNDg4OGE3NDI1Njg1N2VlNmZlYTkwYWNmZTEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNzIzODZlMGQ1MTgxNGIzZDk1ZGRjMzM2N2FhNWUyNTggPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdvcmFuZ2UnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfM2MzNWFkMDJmNDllNDU0OWE2NjNiZmUzZmVkMjJiZjYuc2V0SWNvbihpY29uXzcyMzg2ZTBkNTE4MTRiM2Q5NWRkYzMzNjdhYTVlMjU4KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODNmMjNhMzg5MWY2NGFhMzkxMDkyYjRjMjZiNGRmODUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDNkZDlmYjkyYTY4NDRmMWI3MDY2NGZmMTRhNmRhNjggPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzAzZGQ5ZmI5MmE2ODQ0ZjFiNzA2NjRmZjE0YTZkYTY4IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBNYWRyaWQgKFpvbmEgNik8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODNmMjNhMzg5MWY2NGFhMzkxMDkyYjRjMjZiNGRmODUuc2V0Q29udGVudChodG1sXzAzZGQ5ZmI5MmE2ODQ0ZjFiNzA2NjRmZjE0YTZkYTY4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfM2MzNWFkMDJmNDllNDU0OWE2NjNiZmUzZmVkMjJiZjYuYmluZFBvcHVwKHBvcHVwXzgzZjIzYTM4OTFmNjRhYTM5MTA5MmI0YzI2YjRkZjg1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBtdWx0aV9wb2x5X2xpbmVfYTM5ZWQ1ZDQ2Mjg5NGRjZDliZWVhMGZmOTRjZWYzZmIgPSBMLm11bHRpUG9seWxpbmUoCiAgICAgICAgICAgICAgICAgICAgW1tbMzcuOTg0MTg4NywgLTEuMTI0OTkwNl0sIFszNy45ODI0NDA3LCAtMS4xMjQ3MjhdXSwgW1szNy45ODI0NDA3LCAtMS4xMjQ3MjhdLCBbMzcuOTgyOTI1MywgLTEuMTIyOTU4N11dLCBbWzM3Ljk4MjkyNTMsIC0xLjEyMjk1ODddLCBbMzcuOTg0MTY0NCwgLTEuMTIxOTY0Nl1dLCBbWzM3Ljk4NDE2NDQsIC0xLjEyMTk2NDZdLCBbMzcuOTg3ODY1NSwgLTEuMTIzMTY5OF1dLCBbWzM3Ljk4Nzg2NTUsIC0xLjEyMzE2OThdLCBbMzcuOTg3NDYyNSwgLTEuMTI0NTA3OF1dLCBbWzM3Ljk4NzQ2MjUsIC0xLjEyNDUwNzhdLCBbMzcuOTg0MTg4NywgLTEuMTI0OTkwNl1dXSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnb3JhbmdlJywKICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OiA1LAogICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAxLAogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcF82OTc3ZjE0ODg4YTc0MjU2ODU3ZWU2ZmVhOTBhY2ZlMS5hZGRMYXllcihtdWx0aV9wb2x5X2xpbmVfYTM5ZWQ1ZDQ2Mjg5NGRjZDliZWVhMGZmOTRjZWYzZmIpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xODEwYTYxZmI5OTM0MTJmOTg3ZjM5NGE0ZGNmYjdlYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZmZkZDc3ZTcyMzk0MzVmYjRhNDdjZWMwYjMzMmJkMiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZGZmZGQ3N2U3MjM5NDM1ZmI0YTQ3Y2VjMGIzMzJiZDIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFpvbmEgNjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xODEwYTYxZmI5OTM0MTJmOTg3ZjM5NGE0ZGNmYjdlYS5zZXRDb250ZW50KGh0bWxfZGZmZGQ3N2U3MjM5NDM1ZmI0YTQ3Y2VjMGIzMzJiZDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG11bHRpX3BvbHlfbGluZV9hMzllZDVkNDYyODk0ZGNkOWJlZWEwZmY5NGNlZjNmYi5iaW5kUG9wdXAocG9wdXBfMTgxMGE2MWZiOTkzNDEyZjk4N2YzOTRhNGRjZmI3ZWEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgPC9zY3JpcHQ+CiAgICAgICAg\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;\"></iframe></div></div>"
],
"text/plain": [
"<folium.folium.Map at 0x7f8723202910>"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mapa = folium.Map(location=[37.9829272,-1.1251948], zoom_start=14,\n",
" tiles='Cartodb Positron')\n",
"\n",
"zones_colors = {'1-2-3':'red','4':'green','5':'blue','6':'orange'}\n",
"\n",
"zones_labels = ['6']\n",
"for zone in zones_colors.keys():\n",
" zone_slice = murcia_bbox[['latlon','name']][(zones_osm.zone==zone)]\n",
" zone_slice = zone_slice.drop_duplicates(subset=['name'])\n",
" for point in zone_slice.values:\n",
" mapa.simple_marker(point[0], popup='{} (Zona {})'.format(unicodedata.normalize('NFKD', point[1]).encode('ascii','ignore'), zone), marker_icon=None,marker_color=zones_colors[zone])\n",
" zone_boundary = MultiPoint(zone_slice.latlon.tolist()).convex_hull \n",
" locations = list(zip(zone_boundary.exterior.coords.xy[0],zone_boundary.exterior.coords.xy[1]))\n",
" locations = [[locations[i],locations[i+1]] for i in range( len(locations) -1)]\n",
" zone_border = folium.MultiPolyLine(locations=locations,popup='Zona {}'.format(zone), color=zones_colors[zone], weight=5, opacity=1) \n",
" mapa.add_children(zone_border) \n",
"\n",
"mapa"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We want to also plot the street geometries as well, so we filter also those mislabeled geometries"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(103, 7)"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"murcia_bbox = murcia_bbox[\n",
" (murcia_bbox.bounds.miny>=min_lat)&\n",
" (murcia_bbox.bounds.maxy<=max_lat)&\n",
" (murcia_bbox.bounds.minx>=min_lon)&\n",
" (murcia_bbox.bounds.maxx<=max_lon)\n",
"]\n",
"murcia_bbox.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now, for each zone, we calculate the zone boundary including the geocoded points, as well as the streets' geometries"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/manuel/anaconda3/lib/python2.7/site-packages/ipykernel/__main__.py:14: FutureWarning: simple_marker is deprecated. Use add_children(Marker) instead\n"
]
},
{
"data": {
"text/html": [
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><iframe src=\"data:text/html;base64,CiAgICAgICAgPCFET0NUWVBFIGh0bWw+CiAgICAgICAgPGhlYWQ+CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgLz4KICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9sZWFmbGV0LzAuNy4zL2xlYWZsZXQuanMiPjwvc2NyaXB0PgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vYWpheC5nb29nbGVhcGlzLmNvbS9hamF4L2xpYnMvanF1ZXJ5LzEuMTEuMS9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxzY3JpcHQgc3JjPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9qcy9ib290c3RyYXAubWluLmpzIj48L3NjcmlwdD4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxzY3JpcHQgc3JjPSJodHRwczovL3Jhd2dpdGh1Yi5jb20vbHZvb2dkdC9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAvZGV2ZWxvcC9kaXN0L2xlYWZsZXQuYXdlc29tZS1tYXJrZXJzLmpzIj48L3NjcmlwdD4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9sZWFmbGV0Lm1hcmtlcmNsdXN0ZXIvMC40LjAvbGVhZmxldC5tYXJrZXJjbHVzdGVyLXNyYy5qcyI+PC9zY3JpcHQ+CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvbGVhZmxldC5tYXJrZXJjbHVzdGVyLzAuNC4wL2xlYWZsZXQubWFya2VyY2x1c3Rlci5qcyI+PC9zY3JpcHQ+CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2xlYWZsZXQvMC43LjMvbGVhZmxldC5jc3MiIC8+CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vYm9vdHN0cmFwLzMuMi4wL2Nzcy9ib290c3RyYXAubWluLmNzcyIgLz4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIiAvPgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2ZvbnQtYXdlc29tZS80LjEuMC9jc3MvZm9udC1hd2Vzb21lLm1pbi5jc3MiIC8+CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vcmF3Z2l0LmNvbS9sdm9vZ2R0L0xlYWZsZXQuYXdlc29tZS1tYXJrZXJzLzIuMC9kZXZlbG9wL2Rpc3QvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuY3NzIiAvPgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9sZWFmbGV0Lm1hcmtlcmNsdXN0ZXIvMC40LjAvTWFya2VyQ2x1c3Rlci5EZWZhdWx0LmNzcyIgLz4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvbGVhZmxldC5tYXJrZXJjbHVzdGVyLzAuNC4wL01hcmtlckNsdXN0ZXIuY3NzIiAvPgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIiAvPgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgPHN0eWxlPgoKICAgICAgICAgICAgaHRtbCwgYm9keSB7CiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICAgICAgICAgIG1hcmdpbjogMDsKICAgICAgICAgICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAjbWFwIHsKICAgICAgICAgICAgICAgIHBvc2l0aW9uOmFic29sdXRlOwogICAgICAgICAgICAgICAgdG9wOjA7CiAgICAgICAgICAgICAgICBib3R0b206MDsKICAgICAgICAgICAgICAgIHJpZ2h0OjA7CiAgICAgICAgICAgICAgICBsZWZ0OjA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIDwvc3R5bGU+CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgPHN0eWxlPiAjbWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0IHsKICAgICAgICAgICAgICAgIHBvc2l0aW9uIDogcmVsYXRpdmU7CiAgICAgICAgICAgICAgICB3aWR0aCA6IDEwMC4wJTsKICAgICAgICAgICAgICAgIGhlaWdodDogMTAwLjAlOwogICAgICAgICAgICAgICAgbGVmdDogMC4wJTsKICAgICAgICAgICAgICAgIHRvcDogMC4wJTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgPC9zdHlsZT4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICA8L2hlYWQ+CiAgICAgICAgPGJvZHk+CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNCIgPjwvZGl2PgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgIDwvYm9keT4KICAgICAgICA8c2NyaXB0PgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgc291dGhXZXN0ID0gTC5sYXRMbmcoLTkwLCAtMTgwKTsKICAgICAgICAgICAgdmFyIG5vcnRoRWFzdCA9IEwubGF0TG5nKDkwLCAxODApOwogICAgICAgICAgICB2YXIgYm91bmRzID0gTC5sYXRMbmdCb3VuZHMoc291dGhXZXN0LCBub3J0aEVhc3QpOwoKICAgICAgICAgICAgdmFyIG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNCA9IEwubWFwKCdtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQnLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZW50ZXI6WzM3Ljk4MjkyNzIsLTEuMTI1MTk0OF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b29tOiAxNCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJzOiBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyczogTC5DUlMuRVBTRzM4NTcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgdGlsZV9sYXllcl84MDFmNWUyNzZkNDc0MzMyYjUxOGMyZTY4Y2E4ZGYzNyA9IEwudGlsZUxheWVyKAogICAgICAgICAgICAgICAgJ2h0dHBzOi8vY2FydG9kYi1iYXNlbWFwcy17c30uZ2xvYmFsLnNzbC5mYXN0bHkubmV0L2xpZ2h0X2FsbC97en0ve3h9L3t5fS5wbmcnLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG1heFpvb206IDE4LAogICAgICAgICAgICAgICAgICAgIG1pblpvb206IDEsCiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRpb246ICcoYykgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy9jb3B5cmlnaHQiPk9wZW5TdHJlZXRNYXA8L2E+IGNvbnRyaWJ1dG9ycyAoYykgPGEgaHJlZj0iaHR0cDovL2NhcnRvZGIuY29tL2F0dHJpYnV0aW9ucyI+Q2FydG9EQjwvYT4sIENhcnRvREIgPGEgaHJlZiA9Imh0dHA6Ly9jYXJ0b2RiLmNvbS9hdHRyaWJ1dGlvbnMiPmF0dHJpYnV0aW9uczwvYT4nLAogICAgICAgICAgICAgICAgICAgIGRldGVjdFJldGluYTogZmFsc2UKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNCk7CgogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDA4ZTk5MGI5NzRjNGZiM2E0YmEyYzhkZTllYzMyY2YgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45OTEwMzk2LC0xLjEzNDAxMDhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl83ZWQ4ZjIwOGU2YzA0MTRkOWM5MDZjNDFiMDZiOTc0YSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9kMDhlOTkwYjk3NGM0ZmIzYTRiYTJjOGRlOWVjMzJjZi5zZXRJY29uKGljb25fN2VkOGYyMDhlNmMwNDE0ZDljOTA2YzQxYjA2Yjk3NGEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81MzM5NTk0YmJmZTc0ODM3YjAzZWNkMDkyZDZmYzBlYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNDBlMGQyZDZmZmU0ZTEyOTE5YzUwODI0YTg2OTI2NSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMzQwZTBkMmQ2ZmZlNGUxMjkxOWM1MDgyNGE4NjkyNjUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEF2ZW5pZGEgR2VuZXJhbCBQcmltbyBkZSBSaXZlcmEgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUzMzk1OTRiYmZlNzQ4MzdiMDNlY2QwOTJkNmZjMGVjLnNldENvbnRlbnQoaHRtbF8zNDBlMGQyZDZmZmU0ZTEyOTE5YzUwODI0YTg2OTI2NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2QwOGU5OTBiOTc0YzRmYjNhNGJhMmM4ZGU5ZWMzMmNmLmJpbmRQb3B1cChwb3B1cF81MzM5NTk0YmJmZTc0ODM3YjAzZWNkMDkyZDZmYzBlYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgbXVsdGlfcG9seV9saW5lXzQ4ZjdkZGZhZGM5MjRkNWZiZDQzYmM5NWM5NzlkNzMzID0gTC5tdWx0aVBvbHlsaW5lKAogICAgICAgICAgICAgICAgICAgIFtbWzM3Ljk5MjE2NjA3MTM0MDQ1LCAtMS4xMzE0NTcxNDEzNjQyMjNdLCBbMzcuOTkyMTIxMjI4MTU4NDgsIC0xLjEzMTU1MDM0ODEyNzUxOV1dLCBbWzM3Ljk5MjEyMTIyODE1ODQ4LCAtMS4xMzE1NTAzNDgxMjc1MTldLCBbMzcuOTkyMTAwMTg5NTgxNTIsIC0xLjEzMTYwNTc1MjUwNzUxMV1dLCBbWzM3Ljk5MjEwMDE4OTU4MTUyLCAtMS4xMzE2MDU3NTI1MDc1MTFdLCBbMzcuOTkyMDc5NTcwMDk5NzIsIC0xLjEzMTY2MDA2NzI0MDA2M11dLCBbWzM3Ljk5MjA3OTU3MDA5OTcyLCAtMS4xMzE2NjAwNjcyNDAwNjNdLCBbMzcuOTkxODg4ODgxODAyNTEsIC0xLjEzMjU1NTE3MDY3OTk3OV1dLCBbWzM3Ljk5MTg4ODg4MTgwMjUxLCAtMS4xMzI1NTUxNzA2Nzk5NzldLCBbMzcuOTkxNjcwNTMzMjI0ODM0LCAtMS4xMzM1ODM3MTQwMTgzODZdXSwgW1szNy45OTE2NzA1MzMyMjQ4MzQsIC0xLjEzMzU4MzcxNDAxODM4Nl0sIFszNy45OTEzOTUzNTUzNDM2NTYsIC0xLjEzNDgwNjQ2NjA1MzMzNF1dLCBbWzM3Ljk5MTM5NTM1NTM0MzY1NiwgLTEuMTM0ODA2NDY2MDUzMzM0XSwgWzM3Ljk5MTM3NjY2MzY5OTU4LCAtMS4xMzUxMDMxMDE2MDY2Nl1dXSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OiAyLAogICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0LmFkZExheWVyKG11bHRpX3BvbHlfbGluZV80OGY3ZGRmYWRjOTI0ZDVmYmQ0M2JjOTVjOTc5ZDczMyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMwYmVhNTczMjJiYzQ4MThiNzY3ZGVlMDA5OGRmNWZhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE0ZjE2N2M5MmNjNTQ2NzA5OTFhNTExYzk2YzVjYzI2ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8xNGYxNjdjOTJjYzU0NjcwOTkxYTUxMWM5NmM1Y2MyNiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQXZlbmlkYSBHZW5lcmFsIFByaW1vIGRlIFJpdmVyYSAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzBiZWE1NzMyMmJjNDgxOGI3NjdkZWUwMDk4ZGY1ZmEuc2V0Q29udGVudChodG1sXzE0ZjE2N2M5MmNjNTQ2NzA5OTFhNTExYzk2YzVjYzI2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtdWx0aV9wb2x5X2xpbmVfNDhmN2RkZmFkYzkyNGQ1ZmJkNDNiYzk1Yzk3OWQ3MzMuYmluZFBvcHVwKHBvcHVwXzMwYmVhNTczMjJiYzQ4MThiNzY3ZGVlMDA5OGRmNWZhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYmM0MDExZWI5NGVmNDE0MzkwMDAzNTY2MGU2NzNlZDAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45OTI1OTI3LC0xLjEzOTU2MzldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8zNWVmY2Q3OWQ2Mzk0NmM5OGU2MzU2MGUwZmFkNDk5OSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9iYzQwMTFlYjk0ZWY0MTQzOTAwMDM1NjYwZTY3M2VkMC5zZXRJY29uKGljb25fMzVlZmNkNzlkNjM5NDZjOThlNjM1NjBlMGZhZDQ5OTkpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85NDFiNWFhNjBiYTM0MGZhYjMwNmViZGRjYWI0MGRkNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82YTMzMjQ1MTM1NjU0ODRmYWI3MTU3N2IwNjg0MDhhYSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNmEzMzI0NTEzNTY1NDg0ZmFiNzE1NzdiMDY4NDA4YWEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFJvbmRhIE5vcnRlIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85NDFiNWFhNjBiYTM0MGZhYjMwNmViZGRjYWI0MGRkNS5zZXRDb250ZW50KGh0bWxfNmEzMzI0NTEzNTY1NDg0ZmFiNzE1NzdiMDY4NDA4YWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iYzQwMTFlYjk0ZWY0MTQzOTAwMDM1NjYwZTY3M2VkMC5iaW5kUG9wdXAocG9wdXBfOTQxYjVhYTYwYmEzNDBmYWIzMDZlYmRkY2FiNDBkZDUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIG11bHRpX3BvbHlfbGluZV8wMGE3NzUxZDc1YzA0NGMwOTFiM2FkOGU3MTQ0YzNkMyA9IEwubXVsdGlQb2x5bGluZSgKICAgICAgICAgICAgICAgICAgICBbW1szNy45OTE0MTQ2MzM3MjA5NCwgLTEuMTM1NzIxNTE4NDIyNzk4XSwgWzM3Ljk5MTQ5NDU5NzA3NzIzNSwgLTEuMTM2MDYwMTQ3MzExMDE0XV0sIFtbMzcuOTkxNDk0NTk3MDc3MjM1LCAtMS4xMzYwNjAxNDczMTEwMTRdLCBbMzcuOTkxNTkzNTg3MzUzNzEsIC0xLjEzNjMxMTkzOTY4MjM0NF1dLCBbWzM3Ljk5MTU5MzU4NzM1MzcxLCAtMS4xMzYzMTE5Mzk2ODIzNDRdLCBbMzcuOTkxNzU1NTI1NzIzMDIsIC0xLjEzNjc4OTM3Mjg4NzEwOF1dLCBbWzM3Ljk5MTc1NTUyNTcyMzAyLCAtMS4xMzY3ODkzNzI4ODcxMDhdLCBbMzcuOTkxOTEzMTg5MzIxNzEsIC0xLjEzNzI1NDA2NTU5OTAyNF1dLCBbWzM3Ljk5MTkxMzE4OTMyMTcxLCAtMS4xMzcyNTQwNjU1OTkwMjRdLCBbMzcuOTkyMTc1MTIzNzk1ODc0LCAtMS4xMzgwMjY1NDE3OTU1MTJdXSwgW1szNy45OTIxNzUxMjM3OTU4NzQsIC0xLjEzODAyNjU0MTc5NTUxMl0sIFszNy45OTIzNjc0ODg0NzM3MiwgLTEuMTM4NjIzOTIwMDM0Njg5XV1dLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ6IDIsCiAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNSwKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQuYWRkTGF5ZXIobXVsdGlfcG9seV9saW5lXzAwYTc3NTFkNzVjMDQ0YzA5MWIzYWQ4ZTcxNDRjM2QzKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGZlYTY5OTk0ZWYwNDBhMWJhZTMyZTU2ZTEzNjM2YzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmE5MGFmYjFiZDBjNDI4ODkzOTY3ZDA3NGE1MzVkMjQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzJhOTBhZmIxYmQwYzQyODg5Mzk2N2QwNzRhNTM1ZDI0IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBSb25kYSBOb3J0ZSAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGZlYTY5OTk0ZWYwNDBhMWJhZTMyZTU2ZTEzNjM2YzYuc2V0Q29udGVudChodG1sXzJhOTBhZmIxYmQwYzQyODg5Mzk2N2QwNzRhNTM1ZDI0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtdWx0aV9wb2x5X2xpbmVfMDBhNzc1MWQ3NWMwNDRjMDkxYjNhZDhlNzE0NGMzZDMuYmluZFBvcHVwKHBvcHVwXzBmZWE2OTk5NGVmMDQwYTFiYWUzMmU1NmUxMzYzNmM2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMDMwMzQxMzAyM2U2NDc5YzkzMTI3YTBiMGI0OWYyNGQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODkzNzc2LC0xLjEzMTU0NjFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9lYmVkMDg1NDYxNzA0NjhjODA3OWVjNjY3MmIwOGYxYiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8wMzAzNDEzMDIzZTY0NzljOTMxMjdhMGIwYjQ5ZjI0ZC5zZXRJY29uKGljb25fZWJlZDA4NTQ2MTcwNDY4YzgwNzllYzY2NzJiMDhmMWIpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NmVmNzMyM2E5M2E0ZjAxOTY3OWUzOTQ5YzhjYmI4MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lZDMyMGY5M2MzNzA0YWUxYWUyMTVlNzUxOTQ1ZDJmMiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZWQzMjBmOTNjMzcwNGFlMWFlMjE1ZTc1MTk0NWQyZjIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIEphaW1lIEkgZWwgQ29ucXVpc3RhZG9yIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81NmVmNzMyM2E5M2E0ZjAxOTY3OWUzOTQ5YzhjYmI4Mi5zZXRDb250ZW50KGh0bWxfZWQzMjBmOTNjMzcwNGFlMWFlMjE1ZTc1MTk0NWQyZjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wMzAzNDEzMDIzZTY0NzljOTMxMjdhMGIwYjQ5ZjI0ZC5iaW5kUG9wdXAocG9wdXBfNTZlZjczMjNhOTNhNGYwMTk2NzllMzk0OWM4Y2JiODIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIG11bHRpX3BvbHlfbGluZV8xYjY2OWI5NGVhNDA0OTBjOTk2MjgxNWNhZTBiN2Q1ZSA9IEwubXVsdGlQb2x5bGluZSgKICAgICAgICAgICAgICAgICAgICBbW1szNy45ODk0ODA3NjEwMjA3NiwgLTEuMTMwMTQzMDI2NTg0NzA1XSwgWzM3Ljk4OTQ2ODE4ODE2NiwgLTEuMTMwMjQ5MDU3NjU5ODI1XV0sIFtbMzcuOTg5NDY4MTg4MTY2LCAtMS4xMzAyNDkwNTc2NTk4MjVdLCBbMzcuOTg5Mzg3NDcwNDM4NDMsIC0xLjEzMDkyODc0NjE4ODE3NV1dLCBbWzM3Ljk4OTM4NzQ3MDQzODQzLCAtMS4xMzA5Mjg3NDYxODgxNzVdLCBbMzcuOTg5MzcyNzE4Mjg4ODUsIC0xLjEzMTA1MjYzMDcxNzA3OV1dLCBbWzM3Ljk4OTM3MjcxODI4ODg1LCAtMS4xMzEwNTI2MzA3MTcwNzldLCBbMzcuOTg5MzY3Njg5MTQ2OTQ1LCAtMS4xMzExNDUxNjY5MjgxMjFdXSwgW1szNy45ODkzNjc2ODkxNDY5NDUsIC0xLjEzMTE0NTE2NjkyODEyMV0sIFszNy45ODkzMzQxNjE1MzQyNiwgLTEuMTMxNzU1MzY5NDc5MTUxXV0sIFtbMzcuOTg5MzM0MTYxNTM0MjYsIC0xLjEzMTc1NTM2OTQ3OTE1MV0sIFszNy45ODkzMjQ2ODk5ODM2NzUsIC0xLjEzMTg2MTA2NTI3ODE3M11dLCBbWzM3Ljk4OTMyNDY4OTk4MzY3NSwgLTEuMTMxODYxMDY1Mjc4MTczXSwgWzM3Ljk4OTMxNjU1OTUzNzYsIC0xLjEzMTk1MTg0MTI4OTU0OV1dXSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OiAyLAogICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0LmFkZExheWVyKG11bHRpX3BvbHlfbGluZV8xYjY2OWI5NGVhNDA0OTBjOTk2MjgxNWNhZTBiN2Q1ZSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q3MzBmN2FlNTc3OTQwYzQ5NDViMGRmZjBjYmIxNzI1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNjOWE0M2UyODhlNjQ5MjBhM2RiNjlkN2I3ZGQxOWI3ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8zYzlhNDNlMjg4ZTY0OTIwYTNkYjY5ZDdiN2RkMTliNyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgSmFpbWUgSSBlbCBDb25xdWlzdGFkb3IgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q3MzBmN2FlNTc3OTQwYzQ5NDViMGRmZjBjYmIxNzI1LnNldENvbnRlbnQoaHRtbF8zYzlhNDNlMjg4ZTY0OTIwYTNkYjY5ZDdiN2RkMTliNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbXVsdGlfcG9seV9saW5lXzFiNjY5Yjk0ZWE0MDQ5MGM5OTYyODE1Y2FlMGI3ZDVlLmJpbmRQb3B1cChwb3B1cF9kNzMwZjdhZTU3Nzk0MGM0OTQ1YjBkZmYwY2JiMTcyNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2ViNWQ0N2ZjMjhlMTQ3Yzc5YjFmZTQ4OWM4NzliMzMxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTg3NzU1NiwtMS4xMjkwOTQzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMDM0NDAwNWUwYzNhNDUzYmFjZGEyMWU4NWE2MTVjMzEgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZWI1ZDQ3ZmMyOGUxNDdjNzliMWZlNDg5Yzg3OWIzMzEuc2V0SWNvbihpY29uXzAzNDQwMDVlMGMzYTQ1M2JhY2RhMjFlODVhNjE1YzMxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWQxNDNmMzg1ZmFmNDdlMmJiZTU5MjdiYjJkMGZjZGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmIzNDA2YjkzNDM5NDgzZThjMDk2OGM3ODJkNDE0MjEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2ZiMzQwNmI5MzQzOTQ4M2U4YzA5NjhjNzgyZDQxNDIxIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBjYWxsZSBFbnJpcXVlIFZpbGxhciAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWQxNDNmMzg1ZmFmNDdlMmJiZTU5MjdiYjJkMGZjZGEuc2V0Q29udGVudChodG1sX2ZiMzQwNmI5MzQzOTQ4M2U4YzA5NjhjNzgyZDQxNDIxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZWI1ZDQ3ZmMyOGUxNDdjNzliMWZlNDg5Yzg3OWIzMzEuYmluZFBvcHVwKHBvcHVwXzlkMTQzZjM4NWZhZjQ3ZTJiYmU1OTI3YmIyZDBmY2RhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBtdWx0aV9wb2x5X2xpbmVfY2IxNTdmNTBlMmRjNDZlMDllNGRlYzQ5MTA0YmVkNTQgPSBMLm11bHRpUG9seWxpbmUoCiAgICAgICAgICAgICAgICAgICAgW1tbMzcuOTg3ODIzMjM5NjY4MTgsIC0xLjEyOTU5MzkyODEwNzc5NV0sIFszNy45ODc3NTc2OTMxODUzOSwgLTEuMTI5NTIxNzU5OTIxNDZdXV0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodDogMiwKICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMC41LAogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNC5hZGRMYXllcihtdWx0aV9wb2x5X2xpbmVfY2IxNTdmNTBlMmRjNDZlMDllNGRlYzQ5MTA0YmVkNTQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hZGIwOWMxNGE4MzE0OWVlYmJkZDUxZTJmMTQ4NjIyZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mNjllY2YxM2ZmNDE0NTY4YjJjNTc4NmZiMzJkZWQ4YyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZjY5ZWNmMTNmZjQxNDU2OGIyYzU3ODZmYjMyZGVkOGMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIGNhbGxlIEVucmlxdWUgVmlsbGFyIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hZGIwOWMxNGE4MzE0OWVlYmJkZDUxZTJmMTQ4NjIyZS5zZXRDb250ZW50KGh0bWxfZjY5ZWNmMTNmZjQxNDU2OGIyYzU3ODZmYjMyZGVkOGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG11bHRpX3BvbHlfbGluZV9jYjE1N2Y1MGUyZGM0NmUwOWU0ZGVjNDkxMDRiZWQ1NC5iaW5kUG9wdXAocG9wdXBfYWRiMDljMTRhODMxNDllZWJiZGQ1MWUyZjE0ODYyMmUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mYmEyNDdlODMxODA0MzQ5ODk5ZDE4NTRlMTIxM2Y3NCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk5MjEsLTEuMTI5MDNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl83YjQzNWE0YjkxMDQ0ODY3YjkxNjQ2ZDM0NWJlYjRiNiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9mYmEyNDdlODMxODA0MzQ5ODk5ZDE4NTRlMTIxM2Y3NC5zZXRJY29uKGljb25fN2I0MzVhNGI5MTA0NDg2N2I5MTY0NmQzNDViZWI0YjYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNDI5ZGI3MzE4NDE0N2E2OWFjNmNmYzU0NzBmZWEzZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lZDg5YWFjN2Y4Yjk0NjhkOTVhZGE0OThhODkzOWU1NiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZWQ4OWFhYzdmOGI5NDY4ZDk1YWRhNDk4YTg5MzllNTYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFBsYXphIENpcmN1bGFyIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNDI5ZGI3MzE4NDE0N2E2OWFjNmNmYzU0NzBmZWEzZC5zZXRDb250ZW50KGh0bWxfZWQ4OWFhYzdmOGI5NDY4ZDk1YWRhNDk4YTg5MzllNTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mYmEyNDdlODMxODA0MzQ5ODk5ZDE4NTRlMTIxM2Y3NC5iaW5kUG9wdXAocG9wdXBfMzQyOWRiNzMxODQxNDdhNjlhYzZjZmM1NDcwZmVhM2QpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIG11bHRpX3BvbHlfbGluZV8xZGQ0NTU5NDk0ZDc0NGEzYWRiZTkwY2ExMDcyNGNjMCA9IEwubXVsdGlQb2x5bGluZSgKICAgICAgICAgICAgICAgICAgICBbW1szNy45OTE1OTM2NzExNzI3NSwgLTEuMTMwODY5ODIxNDA4ODc5XSwgWzM3Ljk5MTU4MTkzNjUwODI4LCAtMS4xMzA3OTI2MjQwODA2NDFdXV0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodDogMiwKICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMC41LAogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNC5hZGRMYXllcihtdWx0aV9wb2x5X2xpbmVfMWRkNDU1OTQ5NGQ3NDRhM2FkYmU5MGNhMTA3MjRjYzApOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hYTliMjM5YWUzNjU0MTkxYTA2ZGU4YmJmMzFjZGEzMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kY2VlZTRlODEyZGQ0YjM4YmMwNmY4YzliM2UzZmQyNCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZGNlZWU0ZTgxMmRkNGIzOGJjMDZmOGM5YjNlM2ZkMjQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFBsYXphIENpcmN1bGFyIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hYTliMjM5YWUzNjU0MTkxYTA2ZGU4YmJmMzFjZGEzMS5zZXRDb250ZW50KGh0bWxfZGNlZWU0ZTgxMmRkNGIzOGJjMDZmOGM5YjNlM2ZkMjQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG11bHRpX3BvbHlfbGluZV8xZGQ0NTU5NDk0ZDc0NGEzYWRiZTkwY2ExMDcyNGNjMC5iaW5kUG9wdXAocG9wdXBfYWE5YjIzOWFlMzY1NDE5MWEwNmRlOGJiZjMxY2RhMzEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iNDBlMDZlNWNkYzI0MTViOTFiMjJlMTIxZjVmYWYwMyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4NzEwNTQsLTEuMTM0OTYwMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzI1ZmY3OGE0YzU0NzQzMTFiY2RhOGVjZWRjNTIwMzc1ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2I0MGUwNmU1Y2RjMjQxNWI5MWIyMmUxMjFmNWZhZjAzLnNldEljb24oaWNvbl8yNWZmNzhhNGM1NDc0MzExYmNkYThlY2VkYzUyMDM3NSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhkZTA2ZDhkMmUwYzQ4M2Q4ZGQzNGJlZTNmNzkyNmY3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I2YmJiMmFlNzUxNzRkMzRhZTAxMDViZThiZDEzMDliID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9iNmJiYjJhZTc1MTc0ZDM0YWUwMTA1YmU4YmQxMzA5YiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgU2FudGEgVGVyZXNhIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ZGUwNmQ4ZDJlMGM0ODNkOGRkMzRiZWUzZjc5MjZmNy5zZXRDb250ZW50KGh0bWxfYjZiYmIyYWU3NTE3NGQzNGFlMDEwNWJlOGJkMTMwOWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iNDBlMDZlNWNkYzI0MTViOTFiMjJlMTIxZjVmYWYwMy5iaW5kUG9wdXAocG9wdXBfOGRlMDZkOGQyZTBjNDgzZDhkZDM0YmVlM2Y3OTI2ZjcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIG11bHRpX3BvbHlfbGluZV9lODliMjU4YzFlZDE0YzIwYjI4Njg2ZmYzNDU0NTEwZSA9IEwubXVsdGlQb2x5bGluZSgKICAgICAgICAgICAgICAgICAgICBbW1szNy45ODcwNDY2NTYzMzkxNzQsIC0xLjEzNjI5NTAwODIzNzkzN10sIFszNy45ODcwOTE2NjcxNTkyMDYsIC0xLjEzNTk5OTk2NTI0NjIxNF1dLCBbWzM3Ljk4NzA5MTY2NzE1OTIwNiwgLTEuMTM1OTk5OTY1MjQ2MjE0XSwgWzM3Ljk4NzEwODA5NTY4OTQyLCAtMS4xMzUwMjY2NTg2NDk3MDddXSwgW1szNy45ODcxMDgwOTU2ODk0MiwgLTEuMTM1MDI2NjU4NjQ5NzA3XSwgWzM3Ljk4NzA5ODAzNzQwNTYxNiwgLTEuMTM0MzM2ODI4MDE4NTE5XV0sIFtbMzcuOTg3MDk4MDM3NDA1NjE2LCAtMS4xMzQzMzY4MjgwMTg1MTldLCBbMzcuOTg3MDg2NTU0MTk4MjcsIC0xLjEzNDI0OTc0MDA0NDU2N11dLCBbWzM3Ljk4NzA4NjU1NDE5ODI3LCAtMS4xMzQyNDk3NDAwNDQ1NjddLCBbMzcuOTg3MDYzNTg3NzgzNTgsIC0xLjEzMzc1MDE3ODYxNTQwMV1dLCBbWzM3Ljk4NzA2MzU4Nzc4MzU4LCAtMS4xMzM3NTAxNzg2MTU0MDFdLCBbMzcuOTg3MDcxMTMxNDk2NDM1LCAtMS4xMzM2ODA4NjAyNzYxNzJdXSwgW1szNy45ODcwNzExMzE0OTY0MzUsIC0xLjEzMzY4MDg2MDI3NjE3Ml0sIFszNy45ODcxMzg3NzM0NTUwNiwgLTEuMTMzMzE4Njc4MjQwMDQ1XV0sIFtbMzcuOTg3MTM4NzczNDU1MDYsIC0xLjEzMzMxODY3ODI0MDA0NV0sIFszNy45ODcyOTg2MTYzNDg1NywgLTEuMTMyNjY1MDU3NDMwNTU3XV0sIFtbMzcuOTg3Mjk4NjE2MzQ4NTcsIC0xLjEzMjY2NTA1NzQzMDU1N10sIFszNy45ODczNjg0Mzc2MDIwMTUsIC0xLjEzMjMyMjkwODE0MzAzOF1dLCBbWzM3Ljk4NzM2ODQzNzYwMjAxNSwgLTEuMTMyMzIyOTA4MTQzMDM4XSwgWzM3Ljk4NzM4NDAyNzk0MTkxLCAtMS4xMzIyNDY3MTY2NDMxOF1dLCBbWzM3Ljk4NzM4NDAyNzk0MTkxLCAtMS4xMzIyNDY3MTY2NDMxOF0sIFszNy45ODczODYyOTEwNTU3NiwgLTEuMTMyMTg0Nzc0Mzc4NzE1XV1dLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ6IDIsCiAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNSwKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQuYWRkTGF5ZXIobXVsdGlfcG9seV9saW5lX2U4OWIyNThjMWVkMTRjMjBiMjg2ODZmZjM0NTQ1MTBlKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGE4NjEwYTE1YzAyNDU4M2EyMjExZjgzMzVlNWE2MzAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODM5NGQ1MTM5YTVmNDQ2MDlmMmNlNTE4Zjc5N2IzNTcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzgzOTRkNTEzOWE1ZjQ0NjA5ZjJjZTUxOGY3OTdiMzU3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBTYW50YSBUZXJlc2EgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRhODYxMGExNWMwMjQ1ODNhMjIxMWY4MzM1ZTVhNjMwLnNldENvbnRlbnQoaHRtbF84Mzk0ZDUxMzlhNWY0NDYwOWYyY2U1MThmNzk3YjM1Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbXVsdGlfcG9seV9saW5lX2U4OWIyNThjMWVkMTRjMjBiMjg2ODZmZjM0NTQ1MTBlLmJpbmRQb3B1cChwb3B1cF80YTg2MTBhMTVjMDI0NTgzYTIyMTFmODMzNWU1YTYzMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzRjOGZkODdkMTQxOTQxNTI4ZWFlMGVlNzZjYjBjZjAxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTg5ODk5NSwtMS4xMzQ5NTQzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYWY5MDk5MzViMDRiNDRjZmEwMzExZmYzY2E5MDlhNzIgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNGM4ZmQ4N2QxNDE5NDE1MjhlYWUwZWU3NmNiMGNmMDEuc2V0SWNvbihpY29uX2FmOTA5OTM1YjA0YjQ0Y2ZhMDMxMWZmM2NhOTA5YTcyKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGFlMmVjZDZiMzQ1NDUyODk4NTkxNTc0OTlmMGEzYWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzc4ZjI4NDY5ZWFjNGIwOWEwM2RhNzJiOTllNWUyMjMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzM3OGYyODQ2OWVhYzRiMDlhMDNkYTcyYjk5ZTVlMjIzIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBDb25kZXN0YWJsZSAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGFlMmVjZDZiMzQ1NDUyODk4NTkxNTc0OTlmMGEzYWIuc2V0Q29udGVudChodG1sXzM3OGYyODQ2OWVhYzRiMDlhMDNkYTcyYjk5ZTVlMjIzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNGM4ZmQ4N2QxNDE5NDE1MjhlYWUwZWU3NmNiMGNmMDEuYmluZFBvcHVwKHBvcHVwXzhhZTJlY2Q2YjM0NTQ1Mjg5ODU5MTU3NDk5ZjBhM2FiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBtdWx0aV9wb2x5X2xpbmVfMWM3MTc3ZWI5ZDc5NDBmMjk5Zjc1YmNmMTVjYmE4MzkgPSBMLm11bHRpUG9seWxpbmUoCiAgICAgICAgICAgICAgICAgICAgW1tbMzcuOTkwNDc0MTg0MTg0ODc2LCAtMS4xMzUxMTUxNzE1NDcyMjddLCBbMzcuOTkwODU0OTc0MDQ2MDQsIC0xLjEzNDc3NTAzMzkxNjQ0MV1dXSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OiAyLAogICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0LmFkZExheWVyKG11bHRpX3BvbHlfbGluZV8xYzcxNzdlYjlkNzk0MGYyOTlmNzViY2YxNWNiYTgzOSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI5MTM5NzU4ZjhkZjQ3ZTk4NzEwYmQ5OTc0ZDZhMDMyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk3N2EyNzg4NzA3NDQyMDQ4NGMwZTVlYTY0M2M1MmI1ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF85NzdhMjc4ODcwNzQ0MjA0ODRjMGU1ZWE2NDNjNTJiNSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgQ29uZGVzdGFibGUgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI5MTM5NzU4ZjhkZjQ3ZTk4NzEwYmQ5OTc0ZDZhMDMyLnNldENvbnRlbnQoaHRtbF85NzdhMjc4ODcwNzQ0MjA0ODRjMGU1ZWE2NDNjNTJiNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbXVsdGlfcG9seV9saW5lXzFjNzE3N2ViOWQ3OTQwZjI5OWY3NWJjZjE1Y2JhODM5LmJpbmRQb3B1cChwb3B1cF8yOTEzOTc1OGY4ZGY0N2U5ODcxMGJkOTk3NGQ2YTAzMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzRjMDFiZDk4ZmE4ZTQ2YmZhY2ZjYTYxMzNlOGRlZDU4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTkwNTE1LC0xLjEzNTEyODVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8wMWI3ZjJkNWVjODg0NTkzOWY4MWQyMTE2OTEyYzNjZCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl80YzAxYmQ5OGZhOGU0NmJmYWNmY2E2MTMzZThkZWQ1OC5zZXRJY29uKGljb25fMDFiN2YyZDVlYzg4NDU5MzlmODFkMjExNjkxMmMzY2QpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZjRjYzg1MjZhOTM0OGNjYmY0ODNkZDI5N2UzZDA0MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jNGQ2MTljNGJkZDA0NzYxOWMwNDU1MWE4OThhOWZiMyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYzRkNjE5YzRiZGQwNDc2MTljMDQ1NTFhODk4YTlmYjMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIGNhbGxlIHBvZXRhIENhbm8gUGF0byAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWY0Y2M4NTI2YTkzNDhjY2JmNDgzZGQyOTdlM2QwNDIuc2V0Q29udGVudChodG1sX2M0ZDYxOWM0YmRkMDQ3NjE5YzA0NTUxYTg5OGE5ZmIzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNGMwMWJkOThmYThlNDZiZmFjZmNhNjEzM2U4ZGVkNTguYmluZFBvcHVwKHBvcHVwXzVmNGNjODUyNmE5MzQ4Y2NiZjQ4M2RkMjk3ZTNkMDQyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBtdWx0aV9wb2x5X2xpbmVfNTJiNTAzZWVmYzFlNGMxY2I0Y2U3ODZhMzNjOTdhZDMgPSBMLm11bHRpUG9seWxpbmUoCiAgICAgICAgICAgICAgICAgICAgW1tbMzcuOTkwMzQ1NzczNDI4MjYsIC0xLjEzNTg3NjI0ODM1NTM3M10sIFszNy45OTAzOTc1NzM1ODk4OSwgLTEuMTM1NTMyMDAzNTkyMDMzXV0sIFtbMzcuOTkwMzk3NTczNTg5ODksIC0xLjEzNTUzMjAwMzU5MjAzM10sIFszNy45OTA0NzQxODQxODQ4NzYsIC0xLjEzNTExNTE3MTU0NzIyN11dXSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OiAyLAogICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0LmFkZExheWVyKG11bHRpX3BvbHlfbGluZV81MmI1MDNlZWZjMWU0YzFjYjRjZTc4NmEzM2M5N2FkMyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U5MDJkNzdlNGQ1ZTQxYmRhMzUyZDZkNDMyYjZjNzM1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgyMmE3YjBkMzNiYzQ0ZDdiMGUzYjJmMjM2YThmZWZhID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF84MjJhN2IwZDMzYmM0NGQ3YjBlM2IyZjIzNmE4ZmVmYSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgY2FsbGUgcG9ldGEgQ2FubyBQYXRvIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lOTAyZDc3ZTRkNWU0MWJkYTM1MmQ2ZDQzMmI2YzczNS5zZXRDb250ZW50KGh0bWxfODIyYTdiMGQzM2JjNDRkN2IwZTNiMmYyMzZhOGZlZmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG11bHRpX3BvbHlfbGluZV81MmI1MDNlZWZjMWU0YzFjYjRjZTc4NmEzM2M5N2FkMy5iaW5kUG9wdXAocG9wdXBfZTkwMmQ3N2U0ZDVlNDFiZGEzNTJkNmQ0MzJiNmM3MzUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kYTZmMzAzNGEwMjM0ZWE1ODNlODFhMTJiMGJhMTkwNCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4NzQxODIsLTEuMTMzNjM3NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2I2ZjNkYjI5MWE1NTQ5MzViNWUxMmQ3OTJlMzRlNGFjID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2RhNmYzMDM0YTAyMzRlYTU4M2U4MWExMmIwYmExOTA0LnNldEljb24oaWNvbl9iNmYzZGIyOTFhNTU0OTM1YjVlMTJkNzkyZTM0ZTRhYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRkNWE5MzM5ZDE0YzQ4MjFhNDNmOGIwM2UyNWM2ZDQ2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNjYmVkZjliMGFlZDRiYjNiNmMxMjIyM2I0N2JjMTk5ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8zY2JlZGY5YjBhZWQ0YmIzYjZjMTIyMjNiNDdiYzE5OSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgQXlsbG9uIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZDVhOTMzOWQxNGM0ODIxYTQzZjhiMDNlMjVjNmQ0Ni5zZXRDb250ZW50KGh0bWxfM2NiZWRmOWIwYWVkNGJiM2I2YzEyMjIzYjQ3YmMxOTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kYTZmMzAzNGEwMjM0ZWE1ODNlODFhMTJiMGJhMTkwNC5iaW5kUG9wdXAocG9wdXBfNGQ1YTkzMzlkMTRjNDgyMWE0M2Y4YjAzZTI1YzZkNDYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIG11bHRpX3BvbHlfbGluZV8zMjU3NTU0YTE0Y2Y0MmY1YWRkODgwZmIyNGI2MTdhMSA9IEwubXVsdGlQb2x5bGluZSgKICAgICAgICAgICAgICAgICAgICBbW1szNy45ODc0MDA0NTY0NzIxMywgLTEuMTMzNzc4MTc0MTcyMDIyXSwgWzM3Ljk4NzQ2MjIzMTA5ODUwNSwgLTEuMTMzNDEzOTgwNDc5MTMzXV1dLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ6IDIsCiAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNSwKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQuYWRkTGF5ZXIobXVsdGlfcG9seV9saW5lXzMyNTc1NTRhMTRjZjQyZjVhZGQ4ODBmYjI0YjYxN2ExKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjlhNGY4ZjMzZjZlNDVjMGE0NmI1ZWM1OTljNTk4MzUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTlmOWVlZWI0MTNlNDljOTkxNTk0YzJkZmM3M2RkNjAgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2U5ZjllZWViNDEzZTQ5Yzk5MTU5NGMyZGZjNzNkZDYwIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBBeWxsb24gKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI5YTRmOGYzM2Y2ZTQ1YzBhNDZiNWVjNTk5YzU5ODM1LnNldENvbnRlbnQoaHRtbF9lOWY5ZWVlYjQxM2U0OWM5OTE1OTRjMmRmYzczZGQ2MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbXVsdGlfcG9seV9saW5lXzMyNTc1NTRhMTRjZjQyZjVhZGQ4ODBmYjI0YjYxN2ExLmJpbmRQb3B1cChwb3B1cF8yOWE0ZjhmMzNmNmU0NWMwYTQ2YjVlYzU5OWM1OTgzNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzg1MzFiOTA4MmEwOTQwOTY4Y2JkN2Y0ZDE3N2E5NWQ1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTkyMjM5OSwtMS4xMzA2NTQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fOWZjODc4OTkyMjkyNDYxYmI3YzZjOTRlM2I5MGJjYTYgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfODUzMWI5MDgyYTA5NDA5NjhjYmQ3ZjRkMTc3YTk1ZDUuc2V0SWNvbihpY29uXzlmYzg3ODk5MjI5MjQ2MWJiN2M2Yzk0ZTNiOTBiY2E2KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmY4MGE3MWMwMGQ2NDIyN2I0YWI4MWRkMGJhMWIxYzEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDg3ZmYxOGI1MGY0NDZkNGI5ZTdiZTUzN2U4MGRkODQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2Q4N2ZmMThiNTBmNDQ2ZDRiOWU3YmU1MzdlODBkZDg0IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBjYWxsZWpvbiBkZSBCdXJydWV6byAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmY4MGE3MWMwMGQ2NDIyN2I0YWI4MWRkMGJhMWIxYzEuc2V0Q29udGVudChodG1sX2Q4N2ZmMThiNTBmNDQ2ZDRiOWU3YmU1MzdlODBkZDg0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfODUzMWI5MDgyYTA5NDA5NjhjYmQ3ZjRkMTc3YTk1ZDUuYmluZFBvcHVwKHBvcHVwXzJmODBhNzFjMDBkNjQyMjdiNGFiODFkZDBiYTFiMWMxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBtdWx0aV9wb2x5X2xpbmVfOTEyMjBjMGY4MmJjNDc2NzhmZWNjZTFlMzBiZDcxZTkgPSBMLm11bHRpUG9seWxpbmUoCiAgICAgICAgICAgICAgICAgICAgW1tbMzcuOTg3NjcxODYyNDk2ODgsIC0xLjEzNDQxNTYxNzkwODM2XSwgWzM3Ljk4NzczNjczODQyNzQ2LCAtMS4xMzQzNzY3MjU4Nzc2NDRdXSwgW1szNy45ODc3MzY3Mzg0Mjc0NiwgLTEuMTM0Mzc2NzI1ODc3NjQ0XSwgWzM3Ljk4ODMyNjIzNzY3NzYyNiwgLTEuMTM0NDYyMTM3NDcwOTYyXV0sIFtbMzcuOTg4MzI2MjM3Njc3NjI2LCAtMS4xMzQ0NjIxMzc0NzA5NjJdLCBbMzcuOTg4ODIwOTM3NjAyOTUsIC0xLjEzNDU5MDU0ODIyNzU3OF1dLCBbWzM3Ljk4ODgyMDkzNzYwMjk1LCAtMS4xMzQ1OTA1NDgyMjc1NzhdLCBbMzcuOTg4ODkwODQyNjc1NCwgLTEuMTM0NjgzMDAwNjE5NTg5XV1dLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ6IDIsCiAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNSwKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQuYWRkTGF5ZXIobXVsdGlfcG9seV9saW5lXzkxMjIwYzBmODJiYzQ3Njc4ZmVjY2UxZTMwYmQ3MWU5KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjVhNjgyYTBhMGFlNDcwMTk5ZDUyOTU1YzA4NThkZGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjM4YWQyOWE3YWVjNDRiNGEzMGFjYWNlYjk1NzE3NzEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzYzOGFkMjlhN2FlYzQ0YjRhMzBhY2FjZWI5NTcxNzcxIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBjYWxsZWpvbiBkZSBCdXJydWV6byAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjVhNjgyYTBhMGFlNDcwMTk5ZDUyOTU1YzA4NThkZGEuc2V0Q29udGVudChodG1sXzYzOGFkMjlhN2FlYzQ0YjRhMzBhY2FjZWI5NTcxNzcxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtdWx0aV9wb2x5X2xpbmVfOTEyMjBjMGY4MmJjNDc2NzhmZWNjZTFlMzBiZDcxZTkuYmluZFBvcHVwKHBvcHVwX2Y1YTY4MmEwYTBhZTQ3MDE5OWQ1Mjk1NWMwODU4ZGRhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjk5YmM0N2E3OTVhNDNhMjkzODc4MmM5YjI0M2FlNmIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45OTAwMzMsLTEuMTM4NjI0Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2QwY2E3ZTIzNjkzMzQyOGViMmI2ZDc0MWZkNWRmMjE4ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzI5OWJjNDdhNzk1YTQzYTI5Mzg3ODJjOWIyNDNhZTZiLnNldEljb24oaWNvbl9kMGNhN2UyMzY5MzM0MjhlYjJiNmQ3NDFmZDVkZjIxOCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YyMDliMTAxMDlmNjRjNjI5M2U3NDM1ZDYwNGM3YzQ0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JkOGI2YzUwNjAwNjQ0NGJhMjM1OTNlZTk1ZTE5NTIxID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9iZDhiNmM1MDYwMDY0NDRiYTIzNTkzZWU5NWUxOTUyMSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgSXNhYWMgQWxiZW5peiAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjIwOWIxMDEwOWY2NGM2MjkzZTc0MzVkNjA0YzdjNDQuc2V0Q29udGVudChodG1sX2JkOGI2YzUwNjAwNjQ0NGJhMjM1OTNlZTk1ZTE5NTIxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjk5YmM0N2E3OTVhNDNhMjkzODc4MmM5YjI0M2FlNmIuYmluZFBvcHVwKHBvcHVwX2YyMDliMTAxMDlmNjRjNjI5M2U3NDM1ZDYwNGM3YzQ0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBtdWx0aV9wb2x5X2xpbmVfZjE5MGIxYzQ2NDFmNDQ3MThlODNiY2JiMTQ0YTY2NTAgPSBMLm11bHRpUG9seWxpbmUoCiAgICAgICAgICAgICAgICAgICAgW1tbMzcuOTg5NjY0NjU5OTc2NCwgLTEuMTM5NTE1NzU0NTMyMzRdLCBbMzcuOTg5ODMxMTI0NTczNDEsIC0xLjEzOTA4MDMxNDY2MjQ5M11dLCBbWzM3Ljk4OTgzMTEyNDU3MzQxLCAtMS4xMzkwODAzMTQ2NjI0OTNdLCBbMzcuOTg5OTE4Nzk5MjgwNjE2LCAtMS4xMzg4NTEyMzcyNDg3NThdXSwgW1szNy45ODk5MTg3OTkyODA2MTYsIC0xLjEzODg1MTIzNzI0ODc1OF0sIFszNy45OTAwNzkwNjEyNjkyODQsIC0xLjEzODQzMTcyMjk5NDkwOV1dLCBbWzM3Ljk5MDA3OTA2MTI2OTI4NCwgLTEuMTM4NDMxNzIyOTk0OTA5XSwgWzM3Ljk5MDE3ODcyMjA5ODAxNSwgLTEuMTM4MTcwOTYxOTg3MTg2XV0sIFtbMzcuOTkwMTc4NzIyMDk4MDE1LCAtMS4xMzgxNzA5NjE5ODcxODZdLCBbMzcuOTkwMjM5NTc0NzE1MDUsIC0xLjEzODAxMjA0MTEwMzAyNV1dLCBbWzM3Ljk5MDIzOTU3NDcxNTA1LCAtMS4xMzgwMTIwNDExMDMwMjVdLCBbMzcuOTkwNDExNjU1MTg3MjE2LCAtMS4xMzc1NjE4NDkwODM1NjhdXSwgW1szNy45OTA0MTE2NTUxODcyMTYsIC0xLjEzNzU2MTg0OTA4MzU2OF0sIFszNy45OTA0ODY5MjQ2Nzc3LCAtMS4xMzczNjQ4NzQzNTg5OF1dLCBbWzM3Ljk5MDQ4NjkyNDY3NzcsIC0xLjEzNzM2NDg3NDM1ODk4XSwgWzM3Ljk5MDYwODU0NjA5Mjc0LCAtMS4xMzcwNDY3ODExMzM1NjNdXSwgW1szNy45OTA2MDg1NDYwOTI3NCwgLTEuMTM3MDQ2NzgxMTMzNTYzXSwgWzM3Ljk5MDYzODIxODAzLCAtMS4xMzY5NjkyNDg1MjkxOThdXSwgW1szNy45OTA2MzgyMTgwMywgLTEuMTM2OTY5MjQ4NTI5MTk4XSwgWzM3Ljk5MDY1MTg4MDUzMjE3LCAtMS4xMzY5MzM2MjU0NDA3MTldXSwgW1szNy45OTA2NTE4ODA1MzIxNywgLTEuMTM2OTMzNjI1NDQwNzE5XSwgWzM3Ljk5MDcwMDMyNzkzMjQ5NCwgLTEuMTM2ODA2NzIzNDI2NjczXV0sIFtbMzcuOTkwNzAwMzI3OTMyNDk0LCAtMS4xMzY4MDY3MjM0MjY2NzNdLCBbMzcuOTkwNzE0NDkzMzQ4ODU0LCAtMS4xMzY3Njk5MjY4NzE3MjJdXSwgW1szNy45OTA3MTQ0OTMzNDg4NTQsIC0xLjEzNjc2OTkyNjg3MTcyMl0sIFszNy45OTA5MDc5NDc2NzQxMiwgLTEuMTM2MjYzNzQzNzM5MDc5XV0sIFtbMzcuOTkwOTA3OTQ3Njc0MTIsIC0xLjEzNjI2Mzc0MzczOTA3OV0sIFszNy45OTA5OTM3NzgzNjI2MiwgLTEuMTM2MDM5MTA4NzM0MDI1XV0sIFtbMzcuOTkwOTkzNzc4MzYyNjIsIC0xLjEzNjAzOTEwODczNDAyNV0sIFszNy45OTExMTg5MjAxNzcsIC0xLjEzNTcxMTcxMTU5NjA4OF1dXSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OiAyLAogICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0LmFkZExheWVyKG11bHRpX3BvbHlfbGluZV9mMTkwYjFjNDY0MWY0NDcxOGU4M2JjYmIxNDRhNjY1MCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzExNTkyMDQxMzBkYjRiNTM4OTdhODIzMzQ2YjJhNTY4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZiYjRhMmIyNWI0ODQwZjQ4MTNjOTQ2NmNhMjUxZjhlID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF82YmI0YTJiMjViNDg0MGY0ODEzYzk0NjZjYTI1MWY4ZSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgSXNhYWMgQWxiZW5peiAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTE1OTIwNDEzMGRiNGI1Mzg5N2E4MjMzNDZiMmE1Njguc2V0Q29udGVudChodG1sXzZiYjRhMmIyNWI0ODQwZjQ4MTNjOTQ2NmNhMjUxZjhlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtdWx0aV9wb2x5X2xpbmVfZjE5MGIxYzQ2NDFmNDQ3MThlODNiY2JiMTQ0YTY2NTAuYmluZFBvcHVwKHBvcHVwXzExNTkyMDQxMzBkYjRiNTM4OTdhODIzMzQ2YjJhNTY4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNDg2MzU0ZTQ4YjBmNDdlMjkyNmIzZmE4OGEwY2I3OTkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45OTM1NjYyLC0xLjEzNjAzNTddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8wOGY2MTQwMDUzMDg0MGYwOTNlY2IzNjUyMzAwMmM4ZiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl80ODYzNTRlNDhiMGY0N2UyOTI2YjNmYTg4YTBjYjc5OS5zZXRJY29uKGljb25fMDhmNjE0MDA1MzA4NDBmMDkzZWNiMzY1MjMwMDJjOGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84Y2I3Y2Y3MTA2ZjU0ODdkYTA3MjJiZjJhZjFkNzAxMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kMjk2MjVmM2MyY2U0ZTYxOTYxMWM0NDQzYjE2YzQ3ZiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZDI5NjI1ZjNjMmNlNGU2MTk2MTFjNDQ0M2IxNmM0N2YiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIGNhbGxlIE1hciBNZW5vciAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGNiN2NmNzEwNmY1NDg3ZGEwNzIyYmYyYWYxZDcwMTAuc2V0Q29udGVudChodG1sX2QyOTYyNWYzYzJjZTRlNjE5NjExYzQ0NDNiMTZjNDdmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNDg2MzU0ZTQ4YjBmNDdlMjkyNmIzZmE4OGEwY2I3OTkuYmluZFBvcHVwKHBvcHVwXzhjYjdjZjcxMDZmNTQ4N2RhMDcyMmJmMmFmMWQ3MDEwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBtdWx0aV9wb2x5X2xpbmVfMzc2MDM2MWE4YjdlNDIwZjg0MTk1YmQ4MTkyMGE3NTcgPSBMLm11bHRpUG9seWxpbmUoCiAgICAgICAgICAgICAgICAgICAgW1tbMzcuOTkxNTM3MTc3MTQ1MzUsIC0xLjEzNTUxNTA3MjE0NzYyNl0sIFszNy45OTE2MTI2OTgwOTI5NSwgLTEuMTM1NTIwMjY4OTI3NTkzXV0sIFtbMzcuOTkxNjEyNjk4MDkyOTUsIC0xLjEzNTUyMDI2ODkyNzU5M10sIFszNy45OTIwMjA2NDUzMjAzOTUsIC0xLjEzNTYwMTY1NzIwNzQxN11dLCBbWzM3Ljk5MjAyMDY0NTMyMDM5NSwgLTEuMTM1NjAxNjU3MjA3NDE3XSwgWzM3Ljk5MjYzOTU2NTA1MDcxNiwgLTEuMTM1NzY2MTEwMTQ3NjcxXV0sIFtbMzcuOTkyNjM5NTY1MDUwNzE2LCAtMS4xMzU3NjYxMTAxNDc2NzFdLCBbMzcuOTkzNTI5NTU1NTI5NzA1LCAtMS4xMzYwMDI2NDc0NTUyMjhdXSwgW1szNy45OTM1Mjk1NTU1Mjk3MDUsIC0xLjEzNjAwMjY0NzQ1NTIyOF0sIFszNy45OTM3MTc3MjkyNTU5MzQsIC0xLjEzNjA3MDM3MzIzMjg4M11dLCBbWzM3Ljk5MzcxNzcyOTI1NTkzNCwgLTEuMTM2MDcwMzczMjMyODgzXSwgWzM3Ljk5Mzk0NjcyMjg1MDY0LCAtMS4xMzYxMTM1NDAwMzQyMTZdXSwgW1szNy45OTM5NDY3MjI4NTA2NCwgLTEuMTM2MTEzNTQwMDM0MjE2XSwgWzM3Ljk5NDIxMDY2ODk4MTU2NiwgLTEuMTM2MTkwMzE4MjY3Mjk2XV0sIFtbMzcuOTk0MjEwNjY4OTgxNTY2LCAtMS4xMzYxOTAzMTgyNjcyOTZdLCBbMzcuOTk0OTk0NDYwNzQ3MzM2LCAtMS4xMzY0NTAxNTcyNjU2NzFdXSwgW1szNy45OTQ5OTQ0NjA3NDczMzYsIC0xLjEzNjQ1MDE1NzI2NTY3MV0sIFszNy45OTU4NjA3MzA0NDAzMSwgLTEuMTM2NjU2NzcxMTc4OTA2XV1dLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ6IDIsCiAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNSwKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQuYWRkTGF5ZXIobXVsdGlfcG9seV9saW5lXzM3NjAzNjFhOGI3ZTQyMGY4NDE5NWJkODE5MjBhNzU3KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGI1MWMxODVmYTZhNDg1Mzg4YmZkNmI2NTFhMGE2ZmMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDYxMzFiMzYyNjc5NGYxOWIwZjI4Y2E1ODQyZmZjMWEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzA2MTMxYjM2MjY3OTRmMTliMGYyOGNhNTg0MmZmYzFhIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBjYWxsZSBNYXIgTWVub3IgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRiNTFjMTg1ZmE2YTQ4NTM4OGJmZDZiNjUxYTBhNmZjLnNldENvbnRlbnQoaHRtbF8wNjEzMWIzNjI2Nzk0ZjE5YjBmMjhjYTU4NDJmZmMxYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbXVsdGlfcG9seV9saW5lXzM3NjAzNjFhOGI3ZTQyMGY4NDE5NWJkODE5MjBhNzU3LmJpbmRQb3B1cChwb3B1cF80YjUxYzE4NWZhNmE0ODUzODhiZmQ2YjY1MWEwYTZmYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzczODY3MzBkMTJiMjQwMzY5NzlkZDJiNjNmNWQxYTk5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTk0MTMyNSwtMS4xMzQwMTg0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMDUzYTkwMDY5ZjUzNDg0YThlYmVlY2U5YjE4NDQxMDggPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNzM4NjczMGQxMmIyNDAzNjk3OWRkMmI2M2Y1ZDFhOTkuc2V0SWNvbihpY29uXzA1M2E5MDA2OWY1MzQ4NGE4ZWJlZWNlOWIxODQ0MTA4KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTA1OWVhNzczYmUwNGZhZDk4ZjdiODNkNDMwZWZiZmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTQ5MDdhMWM4MjlhNGE2YjkzYjgzZjhkZDY4ZjUyMDYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzk0OTA3YTFjODI5YTRhNmI5M2I4M2Y4ZGQ2OGY1MjA2IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBjYWxsZSBBdWRpdG9yaXVtIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MDU5ZWE3NzNiZTA0ZmFkOThmN2I4M2Q0MzBlZmJmYS5zZXRDb250ZW50KGh0bWxfOTQ5MDdhMWM4MjlhNGE2YjkzYjgzZjhkZDY4ZjUyMDYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83Mzg2NzMwZDEyYjI0MDM2OTc5ZGQyYjYzZjVkMWE5OS5iaW5kUG9wdXAocG9wdXBfOTA1OWVhNzczYmUwNGZhZDk4ZjdiODNkNDMwZWZiZmEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIG11bHRpX3BvbHlfbGluZV9hOTZlMjg2MWI2MjQ0OTNhYjA5MDU2NzBkZDg2NmFjYyA9IEwubXVsdGlQb2x5bGluZSgKICAgICAgICAgICAgICAgICAgICBbW1szNy45OTM5NDIzNjQyNjA5OSwgLTEuMTM0ODYxNTM1MTU3MTk5XSwgWzM3Ljk5MzkzNzI1MTMwMDA1LCAtMS4xMzQ4ODkxMTE2MTg2MzNdXSwgW1szNy45OTM5MzcyNTEzMDAwNSwgLTEuMTM0ODg5MTExNjE4NjMzXSwgWzM3Ljk5MzcxNzcyOTI1NTkzNCwgLTEuMTM2MDcwMzczMjMyODgzXV1dLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ6IDIsCiAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNSwKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQuYWRkTGF5ZXIobXVsdGlfcG9seV9saW5lX2E5NmUyODYxYjYyNDQ5M2FiMDkwNTY3MGRkODY2YWNjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzU4MjNiNDE1ZjhhNDYwOWFiM2EyYjAwODFlOTcwOGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDJlYTU2ZWQwNWFlNDQxMjgzYmNhM2ZhZjVjNzNlNzUgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzQyZWE1NmVkMDVhZTQ0MTI4M2JjYTNmYWY1YzczZTc1IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBjYWxsZSBBdWRpdG9yaXVtIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jNTgyM2I0MTVmOGE0NjA5YWIzYTJiMDA4MWU5NzA4ZC5zZXRDb250ZW50KGh0bWxfNDJlYTU2ZWQwNWFlNDQxMjgzYmNhM2ZhZjVjNzNlNzUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG11bHRpX3BvbHlfbGluZV9hOTZlMjg2MWI2MjQ0OTNhYjA5MDU2NzBkZDg2NmFjYy5iaW5kUG9wdXAocG9wdXBfYzU4MjNiNDE1ZjhhNDYwOWFiM2EyYjAwODFlOTcwOGQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83Mjk3ZDNlODYyNzY0N2RmOGE2MmI5MjUxOGUzNTMxNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk5Mzk3ODksLTEuMTMzMzEyM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2U4OTRkZjE4YTRiNjQ4NzY4NWEzMTA1MTMxNjhkMzU5ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzcyOTdkM2U4NjI3NjQ3ZGY4YTYyYjkyNTE4ZTM1MzE2LnNldEljb24oaWNvbl9lODk0ZGYxOGE0YjY0ODc2ODVhMzEwNTEzMTY4ZDM1OSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhiZWU0MGI4YjdlZjQwMjFhMGU4ZmQ2NWY4YzRjMTk1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzEyYTZhOWIwYjI1MTQ5Y2FhYjVlNGNjYWQyYjcxNTFjID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8xMmE2YTliMGIyNTE0OWNhYWI1ZTRjY2FkMmI3MTUxYyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgY2FsbGUgVG9ycmUgZGUgbGEgTWFycXVlc2EgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhiZWU0MGI4YjdlZjQwMjFhMGU4ZmQ2NWY4YzRjMTk1LnNldENvbnRlbnQoaHRtbF8xMmE2YTliMGIyNTE0OWNhYWI1ZTRjY2FkMmI3MTUxYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzcyOTdkM2U4NjI3NjQ3ZGY4YTYyYjkyNTE4ZTM1MzE2LmJpbmRQb3B1cChwb3B1cF84YmVlNDBiOGI3ZWY0MDIxYTBlOGZkNjVmOGM0YzE5NSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgbXVsdGlfcG9seV9saW5lX2JjNzllMDc3ZjQwNDQxMmViMTEyNDcwMTcyN2U5ZGRiID0gTC5tdWx0aVBvbHlsaW5lKAogICAgICAgICAgICAgICAgICAgIFtbWzM3Ljk5MTk2Mjk3NzgyNjU3NCwgLTEuMTMyNjEwMDcyMTQ1NzUyXSwgWzM3Ljk5MjMzMDUyNDI4MDcyNSwgLTEuMTMyNzM3ODEyMzUwMTE1XV0sIFtbMzcuOTkyMzMwNTI0MjgwNzI1LCAtMS4xMzI3Mzc4MTIzNTAxMTVdLCBbMzcuOTkyNTg1MDgyNjgwMTEsIC0xLjEzMjc5MjIxMDkwMTcyNl1dXSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OiAyLAogICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0LmFkZExheWVyKG11bHRpX3BvbHlfbGluZV9iYzc5ZTA3N2Y0MDQ0MTJlYjExMjQ3MDE3MjdlOWRkYik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQxMmMyMmE3YzQ0NTRmMTI4YzdkNWNmYjkyZWMyNjgwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FjODFiMjZkZDRhMjQ0MDVhNTBiZTRmMzYyNWVhMTJjID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9hYzgxYjI2ZGQ0YTI0NDA1YTUwYmU0ZjM2MjVlYTEyYyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgY2FsbGUgVG9ycmUgZGUgbGEgTWFycXVlc2EgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQxMmMyMmE3YzQ0NTRmMTI4YzdkNWNmYjkyZWMyNjgwLnNldENvbnRlbnQoaHRtbF9hYzgxYjI2ZGQ0YTI0NDA1YTUwYmU0ZjM2MjVlYTEyYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbXVsdGlfcG9seV9saW5lX2JjNzllMDc3ZjQwNDQxMmViMTEyNDcwMTcyN2U5ZGRiLmJpbmRQb3B1cChwb3B1cF80MTJjMjJhN2M0NDU0ZjEyOGM3ZDVjZmI5MmVjMjY4MCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzgwMjAyMzEwNGZlYzQzZDA5ZWI2NWI0NWMyZWNjYmVjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTk1NTEwMiwtMS4xMjk5MjI4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMDFhNGEyYzZhMjYxNDU4OGJiZWM4OGFjYTViNzY1NjIgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfODAyMDIzMTA0ZmVjNDNkMDllYjY1YjQ1YzJlY2NiZWMuc2V0SWNvbihpY29uXzAxYTRhMmM2YTI2MTQ1ODhiYmVjODhhY2E1Yjc2NTYyKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTIyNzc0ODE5M2FmNDE1Yjk2YTY3OGE0MzhiMjFmM2YgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWNlZDcxODFmNmQyNGExMzkxODBiNDA1MzhlY2IwMmQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2VjZWQ3MTgxZjZkMjRhMTM5MTgwYjQwNTM4ZWNiMDJkIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBEci4gSnVsaW8gTG9wZXogQW1iaXQgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2UyMjc3NDgxOTNhZjQxNWI5NmE2NzhhNDM4YjIxZjNmLnNldENvbnRlbnQoaHRtbF9lY2VkNzE4MWY2ZDI0YTEzOTE4MGI0MDUzOGVjYjAyZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzgwMjAyMzEwNGZlYzQzZDA5ZWI2NWI0NWMyZWNjYmVjLmJpbmRQb3B1cChwb3B1cF9lMjI3NzQ4MTkzYWY0MTViOTZhNjc4YTQzOGIyMWYzZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgbXVsdGlfcG9seV9saW5lX2E5NTc3N2M1NzUyMzQ5OGFiNmY2MTcxNjg5M2IxNmEyID0gTC5tdWx0aVBvbHlsaW5lKAogICAgICAgICAgICAgICAgICAgIFtbWzM3Ljk5NTM0NzkyNTYwNDE2NSwgLTEuMTMwNTUyMDYzNDU5NTYxXSwgWzM3Ljk5NTUyMTE3OTU0Mjc1LCAtMS4xMjk5MjA4MjIzMzE1N11dLCBbWzM3Ljk5NTUyMTE3OTU0Mjc1LCAtMS4xMjk5MjA4MjIzMzE1N10sIFszNy45OTU2NjYzNTQxMDU3MSwgLTEuMTI5MzkyMDA4MDYwMzM2XV0sIFtbMzcuOTk1NjY2MzU0MTA1NzEsIC0xLjEyOTM5MjAwODA2MDMzNl0sIFszNy45OTU3OTEwNzY4MjQ5MywgLTEuMTI4ODI2MjI5NTk2MTQzXV1dLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ6IDIsCiAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNSwKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQuYWRkTGF5ZXIobXVsdGlfcG9seV9saW5lX2E5NTc3N2M1NzUyMzQ5OGFiNmY2MTcxNjg5M2IxNmEyKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTg5ZDc5YmMzOTZiNDYzYjlmNTRhYTljZWY1MWExODYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTQyYWY3N2QxOTgwNDUyMWJjOTgxMjYwZDU5NWFmYzAgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzU0MmFmNzdkMTk4MDQ1MjFiYzk4MTI2MGQ1OTVhZmMwIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBEci4gSnVsaW8gTG9wZXogQW1iaXQgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U4OWQ3OWJjMzk2YjQ2M2I5ZjU0YWE5Y2VmNTFhMTg2LnNldENvbnRlbnQoaHRtbF81NDJhZjc3ZDE5ODA0NTIxYmM5ODEyNjBkNTk1YWZjMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbXVsdGlfcG9seV9saW5lX2E5NTc3N2M1NzUyMzQ5OGFiNmY2MTcxNjg5M2IxNmEyLmJpbmRQb3B1cChwb3B1cF9lODlkNzliYzM5NmI0NjNiOWY1NGFhOWNlZjUxYTE4Nik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzRhZDcwMTgxNGU5OTQ2ZmJiMTE2ZGU3MGZhYTY4MTAzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTk2MzEzNiwtMS4xMzA5MjEzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZWEwNTc5N2Y5YTRhNGY2NzkzNjI1NDk1OGZlNjg1MmYgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNGFkNzAxODE0ZTk5NDZmYmIxMTZkZTcwZmFhNjgxMDMuc2V0SWNvbihpY29uX2VhMDU3OTdmOWE0YTRmNjc5MzYyNTQ5NThmZTY4NTJmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWFmMTY3MWM0ZDY3NDk2NmEzMzQ3ZGMzNmY0ODZiODcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTY3ZjAzNjBjYzJlNGQ4ODk3ZjIzMDBlNTdlOTkxMzMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzE2N2YwMzYwY2MyZTRkODg5N2YyMzAwZTU3ZTk5MTMzIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBBdmVuaWRhIE1hcnF1ZXMgZGUgTG9zIFZlbGV6IChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xYWYxNjcxYzRkNjc0OTY2YTMzNDdkYzM2ZjQ4NmI4Ny5zZXRDb250ZW50KGh0bWxfMTY3ZjAzNjBjYzJlNGQ4ODk3ZjIzMDBlNTdlOTkxMzMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80YWQ3MDE4MTRlOTk0NmZiYjExNmRlNzBmYWE2ODEwMy5iaW5kUG9wdXAocG9wdXBfMWFmMTY3MWM0ZDY3NDk2NmEzMzQ3ZGMzNmY0ODZiODcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIG11bHRpX3BvbHlfbGluZV85OThmODFlMjEzMDU0MzFlYTIyZjdiMWZjZjA4MjNkYyA9IEwubXVsdGlQb2x5bGluZSgKICAgICAgICAgICAgICAgICAgICBbW1szNy45OTIxODQ5MzA2MjI1OCwgLTEuMTI4Mzg1MjU3NjcwMTc1XSwgWzM3Ljk5MjcyNTY0NzE5NjMyLCAtMS4xMjg1OTYwNjI1MzQ5OTZdXSwgW1szNy45OTI3MjU2NDcxOTYzMiwgLTEuMTI4NTk2MDYyNTM0OTk2XSwgWzM3Ljk5MzA1MDY5NzQwMTQsIC0xLjEyODcyMjg4MDczMDAxXV0sIFtbMzcuOTkzMDUwNjk3NDAxNCwgLTEuMTI4NzIyODgwNzMwMDFdLCBbMzcuOTkzMzk4Mjk0OTI2MDEsIC0xLjEyODg1ODMzMjI4NTI5XV0sIFtbMzcuOTkzMzk4Mjk0OTI2MDEsIC0xLjEyODg1ODMzMjI4NTI5XSwgWzM3Ljk5Mzc0NTk3NjI2OTYyLCAtMS4xMjkxNDkyNjgxNDQ0MzFdXSwgW1szNy45OTM3NDU5NzYyNjk2MiwgLTEuMTI5MTQ5MjY4MTQ0NDMxXSwgWzM3Ljk5MzczODY4NDAxMzg1NiwgLTEuMTI5NjU3MDQzODM4NzA1XV0sIFtbMzcuOTkzNzM4Njg0MDEzODU2LCAtMS4xMjk2NTcwNDM4Mzg3MDVdLCBbMzcuOTk0MzU3MTg0NjQ5MDMsIC0xLjEzMDE0NjM3OTM0NTk3M11dXSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OiAyLAogICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0LmFkZExheWVyKG11bHRpX3BvbHlfbGluZV85OThmODFlMjEzMDU0MzFlYTIyZjdiMWZjZjA4MjNkYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZkNGExMmUwMGI4ZTQzMWI4MmI2ODRiZTI2NDAxNDkwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRhYTk1ZjU3MGI4YzQwNWJhM2Y1NDAzYTAyZDViOTZmID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF80YWE5NWY1NzBiOGM0MDViYTNmNTQwM2EwMmQ1Yjk2ZiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQXZlbmlkYSBNYXJxdWVzIGRlIExvcyBWZWxleiAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmQ0YTEyZTAwYjhlNDMxYjgyYjY4NGJlMjY0MDE0OTAuc2V0Q29udGVudChodG1sXzRhYTk1ZjU3MGI4YzQwNWJhM2Y1NDAzYTAyZDViOTZmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtdWx0aV9wb2x5X2xpbmVfOTk4ZjgxZTIxMzA1NDMxZWEyMmY3YjFmY2YwODIzZGMuYmluZFBvcHVwKHBvcHVwXzZkNGExMmUwMGI4ZTQzMWI4MmI2ODRiZTI2NDAxNDkwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNTBkZWI4NGMyMzIyNGFiYTg0YzdmMTc2NDE5ZGIxMDggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45OTIyMzk5LC0xLjEzMDY1NDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8wZjk2MDNjNmEzZGY0OWRlODU2ODQ3NDYyNGJmZjM1MCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl81MGRlYjg0YzIzMjI0YWJhODRjN2YxNzY0MTlkYjEwOC5zZXRJY29uKGljb25fMGY5NjAzYzZhM2RmNDlkZTg1Njg0NzQ2MjRiZmYzNTApOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jYTc0ZWYyN2U2ODI0MjM3YjFmNjg5OTgyOWJhZmM3OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mNmY2ZGI1ZGFiOGU0YzkwOTgxNDRhNmVkYTQzMWQzMiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZjZmNmRiNWRhYjhlNGM5MDk4MTQ0YTZlZGE0MzFkMzIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIERvY3RvciBKb3NlIFRhcGlhIFNhbnogKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NhNzRlZjI3ZTY4MjQyMzdiMWY2ODk5ODI5YmFmYzc5LnNldENvbnRlbnQoaHRtbF9mNmY2ZGI1ZGFiOGU0YzkwOTgxNDRhNmVkYTQzMWQzMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzUwZGViODRjMjMyMjRhYmE4NGM3ZjE3NjQxOWRiMTA4LmJpbmRQb3B1cChwb3B1cF9jYTc0ZWYyN2U2ODI0MjM3YjFmNjg5OTgyOWJhZmM3OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgbXVsdGlfcG9seV9saW5lX2RlNzBjZTMzNDBiODQ4OTc5YjczMWRkOTc3MWMzYWE0ID0gTC5tdWx0aVBvbHlsaW5lKAogICAgICAgICAgICAgICAgICAgIFtbWzM3Ljk4OTgwMjg3NzU1OTcyNSwgLTEuMTI3NDQ3NzQxODAwMjExXSwgWzM3Ljk4OTY5NDMzMTkxMzYyNiwgLTEuMTI2NzMzNDM2MDExNzYxXV0sIFtbMzcuOTg5Njk0MzMxOTEzNjI2LCAtMS4xMjY3MzM0MzYwMTE3NjFdLCBbMzcuOTg5Njg4MzgwNzYyMzc0LCAtMS4xMjY2OTM5NTcyNDc4MjRdXSwgW1szNy45ODk2ODgzODA3NjIzNzQsIC0xLjEyNjY5Mzk1NzI0NzgyNF0sIFszNy45ODk2MDc5OTgzMTA5MywgLTEuMTI2MTY0MzA0Nzg2M11dLCBbWzM3Ljk4OTYwNzk5ODMxMDkzLCAtMS4xMjYxNjQzMDQ3ODYzXSwgWzM3Ljk4OTQ1MjI2MjU0OTk3NSwgLTEuMTI1MTM5MzY1NjY2MjI5XV1dLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ6IDIsCiAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNSwKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQuYWRkTGF5ZXIobXVsdGlfcG9seV9saW5lX2RlNzBjZTMzNDBiODQ4OTc5YjczMWRkOTc3MWMzYWE0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTYyYjAwZDY1MDg0NGI2NzliZjZiMDQ4YjM4ZjZiNDcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzkwNjIwZjkzY2FjNDVmOWE0Yjk0MzM3ZTcyZjc0OGEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzc5MDYyMGY5M2NhYzQ1ZjlhNGI5NDMzN2U3MmY3NDhhIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBEb2N0b3IgSm9zZSBUYXBpYSBTYW56IChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNjJiMDBkNjUwODQ0YjY3OWJmNmIwNDhiMzhmNmI0Ny5zZXRDb250ZW50KGh0bWxfNzkwNjIwZjkzY2FjNDVmOWE0Yjk0MzM3ZTcyZjc0OGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG11bHRpX3BvbHlfbGluZV9kZTcwY2UzMzQwYjg0ODk3OWI3MzFkZDk3NzFjM2FhNC5iaW5kUG9wdXAocG9wdXBfZTYyYjAwZDY1MDg0NGI2NzliZjZiMDQ4YjM4ZjZiNDcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hYzJkOGM1YjczY2I0NGRlYjM3NzVhYzIyYTdmMTY4OSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4ODkyMDcsLTEuMTI2NDg5Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzg2ZmU5NjIxZDcxYTQzNDE4MGIzMTk4NDQ4NDBkMjY0ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2FjMmQ4YzViNzNjYjQ0ZGViMzc3NWFjMjJhN2YxNjg5LnNldEljb24oaWNvbl84NmZlOTYyMWQ3MWE0MzQxODBiMzE5ODQ0ODQwZDI2NCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM2YzZjYWVjZmRlMzQzNTQ5NGM2Y2ZjMzAzY2Y1NjQ1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MzNDJhNGVkYzAxYjQ0NmQ5YmRiNzc0MTE1ZmZkMDIwID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9jMzQyYTRlZGMwMWI0NDZkOWJkYjc3NDExNWZmZDAyMCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgQW50b25pbyBQdWlnIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNmM2Y2FlY2ZkZTM0MzU0OTRjNmNmYzMwM2NmNTY0NS5zZXRDb250ZW50KGh0bWxfYzM0MmE0ZWRjMDFiNDQ2ZDliZGI3NzQxMTVmZmQwMjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hYzJkOGM1YjczY2I0NGRlYjM3NzVhYzIyYTdmMTY4OS5iaW5kUG9wdXAocG9wdXBfMzZjNmNhZWNmZGUzNDM1NDk0YzZjZmMzMDNjZjU2NDUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIG11bHRpX3BvbHlfbGluZV81MTEyNDBmZTU4NDE0YTA5OTdkZGVmOGUyM2QxNDhmNyA9IEwubXVsdGlQb2x5bGluZSgKICAgICAgICAgICAgICAgICAgICBbW1szNy45ODg5NDgzNDI1MzExOSwgLTEuMTI1OTY2ODI3MTQ3NTIyXSwgWzM3Ljk4ODkyMjUyNjI2OTM5LCAtMS4xMjY0OTEwMzEzNzE5ODRdXV0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodDogMiwKICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMC41LAogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNC5hZGRMYXllcihtdWx0aV9wb2x5X2xpbmVfNTExMjQwZmU1ODQxNGEwOTk3ZGRlZjhlMjNkMTQ4ZjcpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zOWNjMzhiZmViYmU0MGM3YjI4NzEyNGY5ODUzNGZjNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jNzliOTQ2YTJjNjg0M2FhYTE2Mjc1MDVmZjg3MTQ3OCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYzc5Yjk0NmEyYzY4NDNhYWExNjI3NTA1ZmY4NzE0NzgiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIEFudG9uaW8gUHVpZyAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzljYzM4YmZlYmJlNDBjN2IyODcxMjRmOTg1MzRmYzYuc2V0Q29udGVudChodG1sX2M3OWI5NDZhMmM2ODQzYWFhMTYyNzUwNWZmODcxNDc4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtdWx0aV9wb2x5X2xpbmVfNTExMjQwZmU1ODQxNGEwOTk3ZGRlZjhlMjNkMTQ4ZjcuYmluZFBvcHVwKHBvcHVwXzM5Y2MzOGJmZWJiZTQwYzdiMjg3MTI0Zjk4NTM0ZmM2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYThkNWUxMjI3YTJiNDJiOWFmYWUwNjQ5MGE1ZTdlYWUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODgyMDEsLTEuMTI3ODMzM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzYxNWY1OGRhNjBkOTQzOGI5YTEwOWE0OWQ5ODc5MTI0ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2E4ZDVlMTIyN2EyYjQyYjlhZmFlMDY0OTBhNWU3ZWFlLnNldEljb24oaWNvbl82MTVmNThkYTYwZDk0MzhiOWExMDlhNDlkOTg3OTEyNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZkOGFiZjJiM2M2YjQxNjE5ZTdkMzE2NTM0MWE5MjFjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q2MjdlYjExZGE5NzQwNjM4NDEyY2NhMThkMDVkZTRkID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9kNjI3ZWIxMWRhOTc0MDYzODQxMmNjYTE4ZDA1ZGU0ZCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgU2FuIElnbmFjaW8gZGUgTG95b2xhIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZDhhYmYyYjNjNmI0MTYxOWU3ZDMxNjUzNDFhOTIxYy5zZXRDb250ZW50KGh0bWxfZDYyN2ViMTFkYTk3NDA2Mzg0MTJjY2ExOGQwNWRlNGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hOGQ1ZTEyMjdhMmI0MmI5YWZhZTA2NDkwYTVlN2VhZS5iaW5kUG9wdXAocG9wdXBfZmQ4YWJmMmIzYzZiNDE2MTllN2QzMTY1MzQxYTkyMWMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIG11bHRpX3BvbHlfbGluZV9lY2NiNzM2ZWU0MzY0N2ViOGI0OGI2OGQ0YTZjNWE5NiA9IEwubXVsdGlQb2x5bGluZSgKICAgICAgICAgICAgICAgICAgICBbW1szNy45ODc5MDIxOTcxOTYwODUsIC0xLjEyNzY5MzA4MDEwNjA5OF0sIFszNy45ODgyNzcyODczNjMxMDQsIC0xLjEyNzg2MTU1NjM1OTkwM11dLCBbWzM3Ljk4ODI3NzI4NzM2MzEwNCwgLTEuMTI3ODYxNTU2MzU5OTAzXSwgWzM3Ljk4ODQxNDMzMTQ3OTk5LCAtMS4xMjc4NzMxMjMzODYyOF1dLCBbWzM3Ljk4ODQxNDMzMTQ3OTk5LCAtMS4xMjc4NzMxMjMzODYyOF0sIFszNy45ODg1NTYzMjA5MTk3NCwgLTEuMTI3ODY1NDEyMDM1MzYyXV1dLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ6IDIsCiAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNSwKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQuYWRkTGF5ZXIobXVsdGlfcG9seV9saW5lX2VjY2I3MzZlZTQzNjQ3ZWI4YjQ4YjY4ZDRhNmM1YTk2KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmRjNWZiMDE5MGFjNDlkN2E0MWJkZWZjNDY4NjA5ODIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTEyNzU2NWE4MGI1NDkwY2E1MDU2YmVlODRmZjhmMjEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2UxMjc1NjVhODBiNTQ5MGNhNTA1NmJlZTg0ZmY4ZjIxIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBTYW4gSWduYWNpbyBkZSBMb3lvbGEgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZkYzVmYjAxOTBhYzQ5ZDdhNDFiZGVmYzQ2ODYwOTgyLnNldENvbnRlbnQoaHRtbF9lMTI3NTY1YTgwYjU0OTBjYTUwNTZiZWU4NGZmOGYyMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbXVsdGlfcG9seV9saW5lX2VjY2I3MzZlZTQzNjQ3ZWI4YjQ4YjY4ZDRhNmM1YTk2LmJpbmRQb3B1cChwb3B1cF9mZGM1ZmIwMTkwYWM0OWQ3YTQxYmRlZmM0Njg2MDk4Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzcyODVhY2Q3YWE1OTQ1YTRhZTgxYjgxM2RiNDI0YWRjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTg5NTkzMywtMS4xMjYxNjc1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNDdjODRkZGY4MTJjNGE3YzhmMzcxZDdhNGQ2OTk0OWIgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNzI4NWFjZDdhYTU5NDVhNGFlODFiODEzZGI0MjRhZGMuc2V0SWNvbihpY29uXzQ3Yzg0ZGRmODEyYzRhN2M4ZjM3MWQ3YTRkNjk5NDliKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2U2NmUyYmE2MTVkNDdkMzg2OTk1M2IxMjkwY2M1OTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDE3ZWZhYjE1NDE2NGI1Y2EzNTk2YTU1ZGE3ZDFkYTggPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzQxN2VmYWIxNTQxNjRiNWNhMzU5NmE1NWRhN2QxZGE4IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBTYW4gTWFydGluIGRlIFBvcnJlcyAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2U2NmUyYmE2MTVkNDdkMzg2OTk1M2IxMjkwY2M1OTQuc2V0Q29udGVudChodG1sXzQxN2VmYWIxNTQxNjRiNWNhMzU5NmE1NWRhN2QxZGE4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNzI4NWFjZDdhYTU5NDVhNGFlODFiODEzZGI0MjRhZGMuYmluZFBvcHVwKHBvcHVwXzdlNjZlMmJhNjE1ZDQ3ZDM4Njk5NTNiMTI5MGNjNTk0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBtdWx0aV9wb2x5X2xpbmVfOTk1ZWYxMmIyOWYzNDM0N2I3NTFhMGQ2NGI0MTEzNmUgPSBMLm11bHRpUG9seWxpbmUoCiAgICAgICAgICAgICAgICAgICAgW1tbMzcuOTg4OTQ4MzQyNTMxMTksIC0xLjEyNTk2NjgyNzE0NzUyMl0sIFszNy45ODk2MDc5OTgzMTA5MywgLTEuMTI2MTY0MzA0Nzg2M11dLCBbWzM3Ljk4OTYwNzk5ODMxMDkzLCAtMS4xMjYxNjQzMDQ3ODYzXSwgWzM3Ljk5MDE1NjY3NzY5MjY4LCAtMS4xMjYzMzM0NTE1OTIzM11dLCBbWzM3Ljk5MDE1NjY3NzY5MjY4LCAtMS4xMjYzMzM0NTE1OTIzM10sIFszNy45OTAzNzUzNjE1NDY0NTUsIC0xLjEyNjM3NzQ1NjU4Mzk4MV1dXSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OiAyLAogICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0LmFkZExheWVyKG11bHRpX3BvbHlfbGluZV85OTVlZjEyYjI5ZjM0MzQ3Yjc1MWEwZDY0YjQxMTM2ZSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZjNDA2OTRjZmRkMDRjYTk5ZTNjN2E2Njk1MGU2OWQzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkwOGNmMTk1ZWFiYzRjZGQ5MmQyZjBmMDc3MDRjN2Y5ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF85MDhjZjE5NWVhYmM0Y2RkOTJkMmYwZjA3NzA0YzdmOSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgU2FuIE1hcnRpbiBkZSBQb3JyZXMgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZjNDA2OTRjZmRkMDRjYTk5ZTNjN2E2Njk1MGU2OWQzLnNldENvbnRlbnQoaHRtbF85MDhjZjE5NWVhYmM0Y2RkOTJkMmYwZjA3NzA0YzdmOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbXVsdGlfcG9seV9saW5lXzk5NWVmMTJiMjlmMzQzNDdiNzUxYTBkNjRiNDExMzZlLmJpbmRQb3B1cChwb3B1cF9mYzQwNjk0Y2ZkZDA0Y2E5OWUzYzdhNjY5NTBlNjlkMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2IyYzhhOWIyODczODRhYTY5OGM4MDM5OTE5MDIxODQ5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTg5MzgyNiwtMS4xMjY2NTYxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZjcyMDMzYTllZTUwNGY0NTk4NzAzYjNlOTE4YzZlMWUgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYjJjOGE5YjI4NzM4NGFhNjk4YzgwMzk5MTkwMjE4NDkuc2V0SWNvbihpY29uX2Y3MjAzM2E5ZWU1MDRmNDU5ODcwM2IzZTkxOGM2ZTFlKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmI0ZjMzODE4MDMwNDEyODk1ZjMwMWRjNmY3ZDQyOTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODhkNWEzNDExNTBmNDI2Y2FlMTY4NGFkM2FiOWY1OWEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzg4ZDVhMzQxMTUwZjQyNmNhZTE2ODRhZDNhYjlmNTlhIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBKYWNvYm8gZGUgbGFzIExleWVzIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iYjRmMzM4MTgwMzA0MTI4OTVmMzAxZGM2ZjdkNDI5MS5zZXRDb250ZW50KGh0bWxfODhkNWEzNDExNTBmNDI2Y2FlMTY4NGFkM2FiOWY1OWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iMmM4YTliMjg3Mzg0YWE2OThjODAzOTkxOTAyMTg0OS5iaW5kUG9wdXAocG9wdXBfYmI0ZjMzODE4MDMwNDEyODk1ZjMwMWRjNmY3ZDQyOTEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIG11bHRpX3BvbHlfbGluZV8zNGNlMGVjMDMzNWY0NTM0YjI1NjdjOTdlNGU3MjFlNyA9IEwubXVsdGlQb2x5bGluZSgKICAgICAgICAgICAgICAgICAgICBbW1szNy45ODk2OTQzMzE5MTM2MjYsIC0xLjEyNjczMzQzNjAxMTc2MV0sIFszNy45ODkyMDAzODYzNTk2MSwgLTEuMTI2NTc4MzcwODAzMDZdXSwgW1szNy45ODkyMDAzODYzNTk2MSwgLTEuMTI2NTc4MzcwODAzMDZdLCBbMzcuOTg4OTIyNTI2MjY5MzksIC0xLjEyNjQ5MTAzMTM3MTk4NF1dXSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OiAyLAogICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0LmFkZExheWVyKG11bHRpX3BvbHlfbGluZV8zNGNlMGVjMDMzNWY0NTM0YjI1NjdjOTdlNGU3MjFlNyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQwYTg5MjIxYjAzZjQ0NmZhNDgxMWNiZTU5M2M4ZDBmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA3NTAzZGU3OGY3ZjRjNWU4NDg0MDU0NTRlYzAwMjMyID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8wNzUwM2RlNzhmN2Y0YzVlODQ4NDA1NDU0ZWMwMDIzMiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgSmFjb2JvIGRlIGxhcyBMZXllcyAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDBhODkyMjFiMDNmNDQ2ZmE0ODExY2JlNTkzYzhkMGYuc2V0Q29udGVudChodG1sXzA3NTAzZGU3OGY3ZjRjNWU4NDg0MDU0NTRlYzAwMjMyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtdWx0aV9wb2x5X2xpbmVfMzRjZTBlYzAzMzVmNDUzNGIyNTY3Yzk3ZTRlNzIxZTcuYmluZFBvcHVwKHBvcHVwXzQwYTg5MjIxYjAzZjQ0NmZhNDgxMWNiZTU5M2M4ZDBmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMzFmOTAyOGE3MmU0NGRlZGEzM2YyNzU3MDUyZmVkNDYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODc1MjM1LC0xLjEyNzU0OTldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9kZWI0MmExOTc0NDM0NmJlYWVhMjAxZWUxMGE4ODEzZiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8zMWY5MDI4YTcyZTQ0ZGVkYTMzZjI3NTcwNTJmZWQ0Ni5zZXRJY29uKGljb25fZGViNDJhMTk3NDQzNDZiZWFlYTIwMWVlMTBhODgxM2YpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83YmIyMzE5YTM3Y2Y0MWQ0YTliOWU4NjlkMTQ2NDRhMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82YWU2MDZiYWFkNGQ0NzA3OTBkYzM3YTkyYmZjNWVhNyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNmFlNjA2YmFhZDRkNDcwNzkwZGMzN2E5MmJmYzVlYTciICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIGRlIGxhIE1lcmNlZCAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2JiMjMxOWEzN2NmNDFkNGE5YjllODY5ZDE0NjQ0YTEuc2V0Q29udGVudChodG1sXzZhZTYwNmJhYWQ0ZDQ3MDc5MGRjMzdhOTJiZmM1ZWE3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzFmOTAyOGE3MmU0NGRlZGEzM2YyNzU3MDUyZmVkNDYuYmluZFBvcHVwKHBvcHVwXzdiYjIzMTlhMzdjZjQxZDRhOWI5ZTg2OWQxNDY0NGExKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBtdWx0aV9wb2x5X2xpbmVfNmQ1NTQ0MDcxNTc4NGUyMGJmYWQzNmZmNTNmOWNkOGIgPSBMLm11bHRpUG9seWxpbmUoCiAgICAgICAgICAgICAgICAgICAgW1tbMzcuOTg3MjYzMDc3MDc5MTIsIC0xLjEyODE5NjQxMzM5MTY2M10sIFszNy45ODczMTY2Mzc0NDAzOSwgLTEuMTI4MDAwOTQ3NDA5Njc0XV0sIFtbMzcuOTg3MzE2NjM3NDQwMzksIC0xLjEyODAwMDk0NzQwOTY3NF0sIFszNy45ODc2MjQzMzcxMDU5LCAtMS4xMjczMTI4NzY5NzgxNTJdXSwgW1szNy45ODc2MjQzMzcxMDU5LCAtMS4xMjczMTI4NzY5NzgxNTJdLCBbMzcuOTg3NjI1MzQyOTM0MjgsIC0xLjEyNzIxNjkwNDE4NjgwOV1dXSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OiAyLAogICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0LmFkZExheWVyKG11bHRpX3BvbHlfbGluZV82ZDU1NDQwNzE1Nzg0ZTIwYmZhZDM2ZmY1M2Y5Y2Q4Yik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUyMzk3ZWZmYjg2YTQyNTdiZTM0NmRiNzE5ZTIxNGY0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhlZWRkMGU2YjI5OTRmMmFiZjFiYWYyZWY3MmE2Njk1ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF84ZWVkZDBlNmIyOTk0ZjJhYmYxYmFmMmVmNzJhNjY5NSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgZGUgbGEgTWVyY2VkIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MjM5N2VmZmI4NmE0MjU3YmUzNDZkYjcxOWUyMTRmNC5zZXRDb250ZW50KGh0bWxfOGVlZGQwZTZiMjk5NGYyYWJmMWJhZjJlZjcyYTY2OTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG11bHRpX3BvbHlfbGluZV82ZDU1NDQwNzE1Nzg0ZTIwYmZhZDM2ZmY1M2Y5Y2Q4Yi5iaW5kUG9wdXAocG9wdXBfNTIzOTdlZmZiODZhNDI1N2JlMzQ2ZGI3MTllMjE0ZjQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wOTdkZTU3M2E3MDA0NjI0YTg3NDU3YWNmMjg2NDUxMCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk5MjU1MzksLTEuMTMzMzc3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fODNkMTU0MWQ0MWI2NDkwYjhkYjY1ODg1OWZlNWM2ZDEgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMDk3ZGU1NzNhNzAwNDYyNGE4NzQ1N2FjZjI4NjQ1MTAuc2V0SWNvbihpY29uXzgzZDE1NDFkNDFiNjQ5MGI4ZGI2NTg4NTlmZTVjNmQxKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzNjYTEyMDhlM2RlNDVjNTg1NWJmM2VjODQ5ZWJlYzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmQ3YTI0ODkyYmVkNGFjNGI0N2UwNzAzNjQ3NmM5NTEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzZkN2EyNDg5MmJlZDRhYzRiNDdlMDcwMzY0NzZjOTUxIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBjYWxsZSBkb2N0b3IgUm9tYW4gQWxiZXJjYSAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzNjYTEyMDhlM2RlNDVjNTg1NWJmM2VjODQ5ZWJlYzYuc2V0Q29udGVudChodG1sXzZkN2EyNDg5MmJlZDRhYzRiNDdlMDcwMzY0NzZjOTUxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDk3ZGU1NzNhNzAwNDYyNGE4NzQ1N2FjZjI4NjQ1MTAuYmluZFBvcHVwKHBvcHVwX2MzY2ExMjA4ZTNkZTQ1YzU4NTViZjNlYzg0OWViZWM2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBtdWx0aV9wb2x5X2xpbmVfMzgxNWZiNDY2NDcwNGRlNDg1YWQxNjcwMTc4MTRjYzkgPSBMLm11bHRpUG9seWxpbmUoCiAgICAgICAgICAgICAgICAgICAgW1tbMzcuOTkyNTg1MDgyNjgwMTEsIC0xLjEzMjc5MjIxMDkwMTcyNl0sIFszNy45OTI0NzI5MzI4MTU2NDUsIC0xLjEzMzM0OTQzOTgyNDY4NF1dLCBbWzM3Ljk5MjQ3MjkzMjgxNTY0NSwgLTEuMTMzMzQ5NDM5ODI0Njg0XSwgWzM3Ljk5MjM4MjE1NjgwNDI3LCAtMS4xMzM4MDA3MjE0OTE1NTRdXV0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodDogMiwKICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMC41LAogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNC5hZGRMYXllcihtdWx0aV9wb2x5X2xpbmVfMzgxNWZiNDY2NDcwNGRlNDg1YWQxNjcwMTc4MTRjYzkpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMTc2Y2UxNTFhZWU0NDFjYWRlODYwNDI5NmMxNTMxNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hZTFkZWMxNmYzZjU0N2Q4OWE1YTk1M2Q5YThhZTk1OSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYWUxZGVjMTZmM2Y1NDdkODlhNWE5NTNkOWE4YWU5NTkiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIGNhbGxlIGRvY3RvciBSb21hbiBBbGJlcmNhIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMTc2Y2UxNTFhZWU0NDFjYWRlODYwNDI5NmMxNTMxNi5zZXRDb250ZW50KGh0bWxfYWUxZGVjMTZmM2Y1NDdkODlhNWE5NTNkOWE4YWU5NTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG11bHRpX3BvbHlfbGluZV8zODE1ZmI0NjY0NzA0ZGU0ODVhZDE2NzAxNzgxNGNjOS5iaW5kUG9wdXAocG9wdXBfYjE3NmNlMTUxYWVlNDQxY2FkZTg2MDQyOTZjMTUzMTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jYzY3MTkyNjkyN2Q0ZTg4YjI1MzkxYzIyMGYwODczYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk5MjA1ODIsLTEuMTM1NjIwMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzMzNWRlY2Y2NGI5OTQ4ZWVhZWI5NDE4MTgwNTNkOGZmID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2NjNjcxOTI2OTI3ZDRlODhiMjUzOTFjMjIwZjA4NzNiLnNldEljb24oaWNvbl8zMzVkZWNmNjRiOTk0OGVlYWViOTQxODE4MDUzZDhmZik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y0ODcxYmZhOGY2NTQzMGQ5MWU4MTZlMjEwNWRkNjZhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIwNzg2ZTU0NTY1YjQ3M2RiMTM5MWFkNDIyOTE3MWYwID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8yMDc4NmU1NDU2NWI0NzNkYjEzOTFhZDQyMjkxNzFmMCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgY2FsbGUgSm9hcXVpbiBCbHVtZSAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjQ4NzFiZmE4ZjY1NDMwZDkxZTgxNmUyMTA1ZGQ2NmEuc2V0Q29udGVudChodG1sXzIwNzg2ZTU0NTY1YjQ3M2RiMTM5MWFkNDIyOTE3MWYwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfY2M2NzE5MjY5MjdkNGU4OGIyNTM5MWMyMjBmMDg3M2IuYmluZFBvcHVwKHBvcHVwX2Y0ODcxYmZhOGY2NTQzMGQ5MWU4MTZlMjEwNWRkNjZhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBtdWx0aV9wb2x5X2xpbmVfMWFlNzUzOTIwMGQzNDY4MzkwY2JkYzNmNTY2Yzk4YjMgPSBMLm11bHRpUG9seWxpbmUoCiAgICAgICAgICAgICAgICAgICAgW1tbMzcuOTkyMDIwNjQ1MzIwMzk1LCAtMS4xMzU2MDE2NTcyMDc0MTddLCBbMzcuOTkyMDkyNTYyMDQ5NjM1LCAtMS4xMzUyNDMxNjMyMDg2ODVdXSwgW1szNy45OTIwOTI1NjIwNDk2MzUsIC0xLjEzNTI0MzE2MzIwODY4NV0sIFszNy45OTIxNzc2MzgzNjY4MjYsIC0xLjEzNDgxOTQ1ODAwMzI1XV0sIFtbMzcuOTkyMTc3NjM4MzY2ODI2LCAtMS4xMzQ4MTk0NTgwMDMyNV0sIFszNy45OTIyMzUzODk2Nzk3MDYsIC0xLjEzNDUzMjA0MjU0MzQ0MV1dLCBbWzM3Ljk5MjIzNTM4OTY3OTcwNiwgLTEuMTM0NTMyMDQyNTQzNDQxXSwgWzM3Ljk5MjM4MjE1NjgwNDI3LCAtMS4xMzM4MDA3MjE0OTE1NTRdXV0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodDogMiwKICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMC41LAogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNC5hZGRMYXllcihtdWx0aV9wb2x5X2xpbmVfMWFlNzUzOTIwMGQzNDY4MzkwY2JkYzNmNTY2Yzk4YjMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jMjE1NGJmZDkyODM0OTRlYTAzNjNkM2U2NjkzZDJlZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MTk0MTIwOTBhYjA0ODdiYmViNGRjMzc2NGZjNTk3NyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNzE5NDEyMDkwYWIwNDg3YmJlYjRkYzM3NjRmYzU5NzciICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIGNhbGxlIEpvYXF1aW4gQmx1bWUgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MyMTU0YmZkOTI4MzQ5NGVhMDM2M2QzZTY2OTNkMmVkLnNldENvbnRlbnQoaHRtbF83MTk0MTIwOTBhYjA0ODdiYmViNGRjMzc2NGZjNTk3Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbXVsdGlfcG9seV9saW5lXzFhZTc1MzkyMDBkMzQ2ODM5MGNiZGMzZjU2NmM5OGIzLmJpbmRQb3B1cChwb3B1cF9jMjE1NGJmZDkyODM0OTRlYTAzNjNkM2U2NjkzZDJlZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzA5MjdjMDAxM2NhZDRlNTliNGUzYTAyODBkNTZjOWNiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTg4NTI4MiwtMS4xMzI3NTY1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNWI5ODU5NDUyNGZlNDhiMjkwNmE4YzFmY2NiYTU4MGUgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMDkyN2MwMDEzY2FkNGU1OWI0ZTNhMDI4MGQ1NmM5Y2Iuc2V0SWNvbihpY29uXzViOTg1OTQ1MjRmZTQ4YjI5MDZhOGMxZmNjYmE1ODBlKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTJlMWI4MmNhZjBmNDY0MThkZjkzOWM0MTY3NTEwYTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDYyNGJkZWFkN2U0NGNmNWIyZTQzYTUzMmI1NTY3YmIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzQ2MjRiZGVhZDdlNDRjZjViMmU0M2E1MzJiNTU2N2JiIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBjYWxsZSBQb3J0aWxsbyBkZSBTYW4gQW50b25pbyAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTJlMWI4MmNhZjBmNDY0MThkZjkzOWM0MTY3NTEwYTMuc2V0Q29udGVudChodG1sXzQ2MjRiZGVhZDdlNDRjZjViMmU0M2E1MzJiNTU2N2JiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDkyN2MwMDEzY2FkNGU1OWI0ZTNhMDI4MGQ1NmM5Y2IuYmluZFBvcHVwKHBvcHVwXzkyZTFiODJjYWYwZjQ2NDE4ZGY5MzljNDE2NzUxMGEzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBtdWx0aV9wb2x5X2xpbmVfOThmMjdhZDQ2YjI5NDJjOGI3MjMwODE0MWM3MDg4MWEgPSBMLm11bHRpUG9seWxpbmUoCiAgICAgICAgICAgICAgICAgICAgW1tbMzcuOTg3ODM5NDE2NzQxMzEsIC0xLjEzMjc3MTc1OTA1Nzk1OV0sIFszNy45ODg1MzU1MzM3OTk4NzYsIC0xLjEzMjc4NDMzMTkxMjcxN11dLCBbWzM3Ljk4ODUzNTUzMzc5OTg3NiwgLTEuMTMyNzg0MzMxOTEyNzE3XSwgWzM3Ljk4ODg1NDQ2NTIxNTYzLCAtMS4xMzI3NzkxMzUxMzI3NTFdXSwgW1szNy45ODg4NTQ0NjUyMTU2MywgLTEuMTMyNzc5MTM1MTMyNzUxXSwgWzM3Ljk4OTA2MjE2ODc3NjI4NiwgLTEuMTMzMDY4MDU5MzM1MTU5XV0sIFtbMzcuOTg5MDYyMTY4Nzc2Mjg2LCAtMS4xMzMwNjgwNTkzMzUxNTldLCBbMzcuOTg5MTU0Nzg4ODA2MzMsIC0xLjEzMzE5NDk2MTM0OTIwNF1dXSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OiAyLAogICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0LmFkZExheWVyKG11bHRpX3BvbHlfbGluZV85OGYyN2FkNDZiMjk0MmM4YjcyMzA4MTQxYzcwODgxYSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU5ZDBiYmUwMTAxOTQwYmI5ZmNmYTllZjU3ZjdiMDFkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdmZGRkZTQxYTM5ODQ5NmJhYmZhYWFkMTE4MTc3YjVjID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF83ZmRkZGU0MWEzOTg0OTZiYWJmYWFhZDExODE3N2I1YyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgY2FsbGUgUG9ydGlsbG8gZGUgU2FuIEFudG9uaW8gKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU5ZDBiYmUwMTAxOTQwYmI5ZmNmYTllZjU3ZjdiMDFkLnNldENvbnRlbnQoaHRtbF83ZmRkZGU0MWEzOTg0OTZiYWJmYWFhZDExODE3N2I1Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbXVsdGlfcG9seV9saW5lXzk4ZjI3YWQ0NmIyOTQyYzhiNzIzMDgxNDFjNzA4ODFhLmJpbmRQb3B1cChwb3B1cF81OWQwYmJlMDEwMTk0MGJiOWZjZmE5ZWY1N2Y3YjAxZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzllMzM1NWYxOTg5NDQ4MDBhNTczMTg1NzBhMzE3MzUzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTkxOTM5NiwtMS4xMzQ0NDk3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZWM0ODllZjE3ZjZhNDI5MGFhYjNlYzM4MDk4NzIwZGMgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfOWUzMzU1ZjE5ODk0NDgwMGE1NzMxODU3MGEzMTczNTMuc2V0SWNvbihpY29uX2VjNDg5ZWYxN2Y2YTQyOTBhYWIzZWMzODA5ODcyMGRjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTVmZmUwZWM3MzY3NDUzZmIzNzZhMjMzYzUwZDBjOTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2RmOWEzMzgyNDEzNDgwM2FmYjMxODJmNmNmMzdlOGQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzdkZjlhMzM4MjQxMzQ4MDNhZmIzMTgyZjZjZjM3ZThkIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBjYWxsZSBTaWVycmEgZGUgQXNjb3kgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU1ZmZlMGVjNzM2NzQ1M2ZiMzc2YTIzM2M1MGQwYzk2LnNldENvbnRlbnQoaHRtbF83ZGY5YTMzODI0MTM0ODAzYWZiMzE4MmY2Y2YzN2U4ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzllMzM1NWYxOTg5NDQ4MDBhNTczMTg1NzBhMzE3MzUzLmJpbmRQb3B1cChwb3B1cF81NWZmZTBlYzczNjc0NTNmYjM3NmEyMzNjNTBkMGM5Nik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgbXVsdGlfcG9seV9saW5lX2FmZTM4YWI3ZGZmZDRhNzY5ZDZhMGUyMjIwM2U4MTM1ID0gTC5tdWx0aVBvbHlsaW5lKAogICAgICAgICAgICAgICAgICAgIFtbWzM3Ljk5MjMzMDUyNDI4MDcyNSwgLTEuMTMyNzM3ODEyMzUwMTE1XSwgWzM3Ljk5MjIyMDYzNzUzMDEyNCwgLTEuMTMzMjUzMzgzMjE0MzFdXSwgW1szNy45OTIyMjA2Mzc1MzAxMjQsIC0xLjEzMzI1MzM4MzIxNDMxXSwgWzM3Ljk5MjEyNjM0MTExOTQxNiwgLTEuMTMzNzA4NDM2NzM3NjA2XV0sIFtbMzcuOTkyMTI2MzQxMTE5NDE2LCAtMS4xMzM3MDg0MzY3Mzc2MDZdLCBbMzcuOTkxOTU3MDI2Njc1MzIsIC0xLjEzNDQ0MTg1MzI2NTI4Nl1dLCBbWzM3Ljk5MTk1NzAyNjY3NTMyLCAtMS4xMzQ0NDE4NTMyNjUyODZdLCBbMzcuOTkxODY1NDk2MjkyNjYsIC0xLjEzNDcxMDY2MDkwMDA1NV1dLCBbWzM3Ljk5MTg2NTQ5NjI5MjY2LCAtMS4xMzQ3MTA2NjA5MDAwNTVdLCBbMzcuOTkxNzk5NTMwNzE0NjcsIC0xLjEzNTAwMDUwNzExMTgxMl1dLCBbWzM3Ljk5MTc5OTUzMDcxNDY3LCAtMS4xMzUwMDA1MDcxMTE4MTJdLCBbMzcuOTkxODU0NTk5ODE4NTQsIC0xLjEzNTE3NzYxNjcyNTg1NV1dLCBbWzM3Ljk5MTg1NDU5OTgxODU0LCAtMS4xMzUxNzc2MTY3MjU4NTVdLCBbMzcuOTkyMDkyNTYyMDQ5NjM1LCAtMS4xMzUyNDMxNjMyMDg2ODVdXV0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodDogMiwKICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMC41LAogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNC5hZGRMYXllcihtdWx0aV9wb2x5X2xpbmVfYWZlMzhhYjdkZmZkNGE3NjlkNmEwZTIyMjAzZTgxMzUpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NTYxZTkyNGIwMjg0ZDcyYTc4OTY2N2Y1YWM1OTVmNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MGM0NTRiMjAxNWU0M2Y5ODRjMzI2Y2I4MzViOGU4OSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNzBjNDU0YjIwMTVlNDNmOTg0YzMyNmNiODM1YjhlODkiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIGNhbGxlIFNpZXJyYSBkZSBBc2NveSAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTU2MWU5MjRiMDI4NGQ3MmE3ODk2NjdmNWFjNTk1ZjQuc2V0Q29udGVudChodG1sXzcwYzQ1NGIyMDE1ZTQzZjk4NGMzMjZjYjgzNWI4ZTg5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtdWx0aV9wb2x5X2xpbmVfYWZlMzhhYjdkZmZkNGE3NjlkNmEwZTIyMjAzZTgxMzUuYmluZFBvcHVwKHBvcHVwXzU1NjFlOTI0YjAyODRkNzJhNzg5NjY3ZjVhYzU5NWY0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMDUzYTJiNDFkMTUzNGNmMjk1MmFjNmYyNWEzNzU1ODEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODkzNTE5LC0xLjEzMTAyODZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl85OWJhM2I1ZDA2OTQ0ZDhkYWE4ZWQyOWEwM2M5ZmQxMSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8wNTNhMmI0MWQxNTM0Y2YyOTUyYWM2ZjI1YTM3NTU4MS5zZXRJY29uKGljb25fOTliYTNiNWQwNjk0NGQ4ZGFhOGVkMjlhMDNjOWZkMTEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MDU5MzZiYzA0Zjg0MmUwODY0ZDk0YmMwM2RkZmFjZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNzc5YTdjMzMyOWQ0YzdhOWM3ZjZmYmFhODFmODJiNiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMzc3OWE3YzMzMjlkNGM3YTljN2Y2ZmJhYTgxZjgyYjYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIENhcmxvcyBJSUkgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkwNTkzNmJjMDRmODQyZTA4NjRkOTRiYzAzZGRmYWNmLnNldENvbnRlbnQoaHRtbF8zNzc5YTdjMzMyOWQ0YzdhOWM3ZjZmYmFhODFmODJiNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzA1M2EyYjQxZDE1MzRjZjI5NTJhYzZmMjVhMzc1NTgxLmJpbmRQb3B1cChwb3B1cF85MDU5MzZiYzA0Zjg0MmUwODY0ZDk0YmMwM2RkZmFjZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgbXVsdGlfcG9seV9saW5lXzJmODI2OTIwZWM2NzQxYTM5OGIwMTJkNjNmMjg5Mzk3ID0gTC5tdWx0aVBvbHlsaW5lKAogICAgICAgICAgICAgICAgICAgIFtbWzM3Ljk4OTM3MjcxODI4ODg1LCAtMS4xMzEwNTI2MzA3MTcwNzldLCBbMzcuOTg5MzQxNTM3NjA5MDQsIC0xLjEzMTA0NzM1MDExODA4MV1dLCBbWzM3Ljk4OTM0MTUzNzYwOTA0LCAtMS4xMzEwNDczNTAxMTgwODFdLCBbMzcuOTg5MTY3NzgwNzU2MjUsIC0xLjEzMTAxODE4MTA5NTA0NF1dLCBbWzM3Ljk4OTE2Nzc4MDc1NjI1LCAtMS4xMzEwMTgxODEwOTUwNDRdLCBbMzcuOTg5MDkxNDIxNjE4MzU1LCAtMS4xMzEwMDA3NDY3MzY0NDddXSwgW1szNy45ODkwOTE0MjE2MTgzNTUsIC0xLjEzMTAwMDc0NjczNjQ0N10sIFszNy45ODkwMzkxMTg1NDI1MzYsIC0xLjEzMDk5MDI2OTM1NzQ4M11dLCBbWzM3Ljk4OTAzOTExODU0MjUzNiwgLTEuMTMwOTkwMjY5MzU3NDgzXSwgWzM3Ljk4ODkzMjY2ODM3MjIzLCAtMS4xMzA5Nzg1MzQ2OTMwMTRdXSwgW1szNy45ODg5MzI2NjgzNzIyMywgLTEuMTMwOTc4NTM0NjkzMDE0XSwgWzM3Ljk4ODg2MjkzMDkzNzg0LCAtMS4xMzA5NzIzMzIwODQ2NjddXSwgW1szNy45ODg4NjI5MzA5Mzc4NCwgLTEuMTMwOTcyMzMyMDg0NjY3XSwgWzM3Ljk4ODc5ODA1NTAwNzI2NSwgLTEuMTMwOTcyOTE4ODE3ODg5XV0sIFtbMzcuOTg4Nzk4MDU1MDA3MjY1LCAtMS4xMzA5NzI5MTg4MTc4ODldLCBbMzcuOTg4NjQ4MzU0MjE2NTksIC0xLjEzMDk3NjAyMDEyMjA2M11dXSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OiAyLAogICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0LmFkZExheWVyKG11bHRpX3BvbHlfbGluZV8yZjgyNjkyMGVjNjc0MWEzOThiMDEyZDYzZjI4OTM5Nyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2EzZWQ1OTU4M2Q5ZDRhYWQ5YWI3MDlmMjU2YWRmMGIyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRhMjFkYzI4MWE4NTQ4NGQ5NDlkYzE2YThkODgyMTQyID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF80YTIxZGMyODFhODU0ODRkOTQ5ZGMxNmE4ZDg4MjE0MiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgQ2FybG9zIElJSSAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTNlZDU5NTgzZDlkNGFhZDlhYjcwOWYyNTZhZGYwYjIuc2V0Q29udGVudChodG1sXzRhMjFkYzI4MWE4NTQ4NGQ5NDlkYzE2YThkODgyMTQyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtdWx0aV9wb2x5X2xpbmVfMmY4MjY5MjBlYzY3NDFhMzk4YjAxMmQ2M2YyODkzOTcuYmluZFBvcHVwKHBvcHVwX2EzZWQ1OTU4M2Q5ZDRhYWQ5YWI3MDlmMjU2YWRmMGIyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOWEzMGE5NjU5MjBkNDdkZDljMWM4ZjE0NTE5MTU1M2QgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45OTE4OTAxLC0xLjEzNDcyMl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2E2MzM0ODdlYjQ0ZjRkNWRhYzVlNzM2YTg3NzIzZDVmID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzlhMzBhOTY1OTIwZDQ3ZGQ5YzFjOGYxNDUxOTE1NTNkLnNldEljb24oaWNvbl9hNjMzNDg3ZWI0NGY0ZDVkYWM1ZTczNmE4NzcyM2Q1Zik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzYwMjFkNjQ3NTk3ZjQzY2FiNmY1MTU5MTFjZWJiMjM1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRmZDkwODVlZGIyMTRkNmY4ZjEyYzc5YTExNzI4YzRiID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF80ZmQ5MDg1ZWRiMjE0ZDZmOGYxMmM3OWExMTcyOGM0YiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgY2FsbGUgU2FudGEgTWFydGEgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzYwMjFkNjQ3NTk3ZjQzY2FiNmY1MTU5MTFjZWJiMjM1LnNldENvbnRlbnQoaHRtbF80ZmQ5MDg1ZWRiMjE0ZDZmOGYxMmM3OWExMTcyOGM0Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzlhMzBhOTY1OTIwZDQ3ZGQ5YzFjOGYxNDUxOTE1NTNkLmJpbmRQb3B1cChwb3B1cF82MDIxZDY0NzU5N2Y0M2NhYjZmNTE1OTExY2ViYjIzNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgbXVsdGlfcG9seV9saW5lXzRjNjQ5OTk2MDg3NTQ5OTdhOWMxNjVhYWFkN2RkNDg4ID0gTC5tdWx0aVBvbHlsaW5lKAogICAgICAgICAgICAgICAgICAgIFtbWzM3Ljk5MjE3NzYzODM2NjgyNiwgLTEuMTM0ODE5NDU4MDAzMjVdLCBbMzcuOTkxODY1NDk2MjkyNjYsIC0xLjEzNDcxMDY2MDkwMDA1NV1dLCBbWzM3Ljk5MTg2NTQ5NjI5MjY2LCAtMS4xMzQ3MTA2NjA5MDAwNTVdLCBbMzcuOTkxNTMzOTkyMDIyMTQsIC0xLjEzNDU5OTI2NTQwNjg3N11dXSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OiAyLAogICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0LmFkZExheWVyKG11bHRpX3BvbHlfbGluZV80YzY0OTk5NjA4NzU0OTk3YTljMTY1YWFhZDdkZDQ4OCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JhOWU1ZWE4MWIzMzQwYmFhODk0NjYxOGZmYzU0N2EwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFhMTJkY2MzYjgzYTQ0YzhiMGNiNjYwYjBjMTk3NDVlID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8xYTEyZGNjM2I4M2E0NGM4YjBjYjY2MGIwYzE5NzQ1ZSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgY2FsbGUgU2FudGEgTWFydGEgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JhOWU1ZWE4MWIzMzQwYmFhODk0NjYxOGZmYzU0N2EwLnNldENvbnRlbnQoaHRtbF8xYTEyZGNjM2I4M2E0NGM4YjBjYjY2MGIwYzE5NzQ1ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbXVsdGlfcG9seV9saW5lXzRjNjQ5OTk2MDg3NTQ5OTdhOWMxNjVhYWFkN2RkNDg4LmJpbmRQb3B1cChwb3B1cF9iYTllNWVhODFiMzM0MGJhYTg5NDY2MThmZmM1NDdhMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2Q3YzVjYmE5M2M2MTQ0NTNhMDdhZjllOTU5NDQzZDUxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTkxMzE4NCwtMS4xMzI4NjVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl80ZmU3MDBlNGVkMGQ0MDVlOGM2NGEyYTAxOGQ1MTY3MiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9kN2M1Y2JhOTNjNjE0NDUzYTA3YWY5ZTk1OTQ0M2Q1MS5zZXRJY29uKGljb25fNGZlNzAwZTRlZDBkNDA1ZThjNjRhMmEwMThkNTE2NzIpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xZjQ2MjE4Zjc1YTU0NmYyYTMzZjI1NjNlZDRjYTAyZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82YTBmZGNiOGI3NGE0NTgyYjJmMTY2OTc1ODFlYjgwNyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNmEwZmRjYjhiNzRhNDU4MmIyZjE2Njk3NTgxZWI4MDciICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIEJhdGFsbGEgZGUgbGFzIEZsb3JlcyAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWY0NjIxOGY3NWE1NDZmMmEzM2YyNTYzZWQ0Y2EwMmUuc2V0Q29udGVudChodG1sXzZhMGZkY2I4Yjc0YTQ1ODJiMmYxNjY5NzU4MWViODA3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZDdjNWNiYTkzYzYxNDQ1M2EwN2FmOWU5NTk0NDNkNTEuYmluZFBvcHVwKHBvcHVwXzFmNDYyMThmNzVhNTQ2ZjJhMzNmMjU2M2VkNGNhMDJlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBtdWx0aV9wb2x5X2xpbmVfMmZlNjUwYWVhNGM5NGUwODhkZWRlYTk2YWZiM2YyN2MgPSBMLm11bHRpUG9seWxpbmUoCiAgICAgICAgICAgICAgICAgICAgW1tbMzcuOTkxNTE0NDYyMTg3NzUsIC0xLjEzMTk1NDAyMDU4NDM3M10sIFszNy45OTE0NDUzOTUzMDU1OSwgLTEuMTMyMjUzMjU0NTI3NjU0XV0sIFtbMzcuOTkxNDQ1Mzk1MzA1NTksIC0xLjEzMjI1MzI1NDUyNzY1NF0sIFszNy45OTEzNDkwODcyMzgxNSwgLTEuMTMyNjY2NjQ5OTkyMTZdXSwgW1szNy45OTEzNDkwODcyMzgxNSwgLTEuMTMyNjY2NjQ5OTkyMTZdLCBbMzcuOTkxMzA4NDM1MDA3NzQsIC0xLjEzMjg1MTMwMzMxOTA4Nl1dLCBbWzM3Ljk5MTMwODQzNTAwNzc0LCAtMS4xMzI4NTEzMDMzMTkwODZdLCBbMzcuOTkxMjE5MzM1Mzc3LCAtMS4xMzMyNTQ2NDA0OTk3ODZdXSwgW1szNy45OTEyMTkzMzUzNzcsIC0xLjEzMzI1NDY0MDQ5OTc4Nl0sIFszNy45OTEwNzUyNTA0NjE0NSwgLTEuMTMzOTkyNTgzMjU1MTc4XV0sIFtbMzcuOTkxMDc1MjUwNDYxNDUsIC0xLjEzMzk5MjU4MzI1NTE3OF0sIFszNy45OTA3NjAwOTA5MDIxMzUsIC0xLjEzNDI4Mjg0ODU2MjA5NF1dXSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OiAyLAogICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0LmFkZExheWVyKG11bHRpX3BvbHlfbGluZV8yZmU2NTBhZWE0Yzk0ZTA4OGRlZGVhOTZhZmIzZjI3Yyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NiMjdiYTAzMmVhOTQxYjdhZDNkZGRhZGRjNTIwYjkzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdiYzQ5MDVjYjAzOTQ3YzlhNDE2MDgwYmFmNmJlMDIxID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF83YmM0OTA1Y2IwMzk0N2M5YTQxNjA4MGJhZjZiZTAyMSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgQmF0YWxsYSBkZSBsYXMgRmxvcmVzIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jYjI3YmEwMzJlYTk0MWI3YWQzZGRkYWRkYzUyMGI5My5zZXRDb250ZW50KGh0bWxfN2JjNDkwNWNiMDM5NDdjOWE0MTYwODBiYWY2YmUwMjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG11bHRpX3BvbHlfbGluZV8yZmU2NTBhZWE0Yzk0ZTA4OGRlZGVhOTZhZmIzZjI3Yy5iaW5kUG9wdXAocG9wdXBfY2IyN2JhMDMyZWE5NDFiN2FkM2RkZGFkZGM1MjBiOTMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lYjliNWRjNWFkMjA0MDc3OWEwYTJmMDdiYzIzMDNhNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk5MDczNzcsLTEuMTMwNjc3MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2UwODk1M2UyOGM1NjQzZmM5ZDMxMTQwYmVkOGI1ZDY4ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2ViOWI1ZGM1YWQyMDQwNzc5YTBhMmYwN2JjMjMwM2E2LnNldEljb24oaWNvbl9lMDg5NTNlMjhjNTY0M2ZjOWQzMTE0MGJlZDhiNWQ2OCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RkNjgwZmYxOGFlZjQ0NmViZGExZjM4NzI3Y2VmZjJhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FiYjA4Y2EyMDY5ZjQ0ZTVhMjQzZjA2MmQzYjczYzE1ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9hYmIwOGNhMjA2OWY0NGU1YTI0M2YwNjJkM2I3M2MxNSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgY2FsbGUgTGVwYW50byAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGQ2ODBmZjE4YWVmNDQ2ZWJkYTFmMzg3MjdjZWZmMmEuc2V0Q29udGVudChodG1sX2FiYjA4Y2EyMDY5ZjQ0ZTVhMjQzZjA2MmQzYjczYzE1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZWI5YjVkYzVhZDIwNDA3NzlhMGEyZjA3YmMyMzAzYTYuYmluZFBvcHVwKHBvcHVwX2RkNjgwZmYxOGFlZjQ0NmViZGExZjM4NzI3Y2VmZjJhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBtdWx0aV9wb2x5X2xpbmVfNmZmNjA2ZWQ4ZDYxNDNmOWJlNjViNDRkNjU5ODVhNzQgPSBMLm11bHRpUG9seWxpbmUoCiAgICAgICAgICAgICAgICAgICAgW1tbMzcuOTkwNzkyMjc3NDEwMzIsIC0xLjEzMDM3ODMwNjYwNjc1OF0sIFszNy45OTA3NjY0NjExNDg1NSwgLTEuMTMwNTA2OTY4ODIwNDk4XV0sIFtbMzcuOTkwNzY2NDYxMTQ4NTUsIC0xLjEzMDUwNjk2ODgyMDQ5OF0sIFszNy45OTA3MTkxODcyMTQ2NCwgLTEuMTMwOTM3NDYzMzY3NDc0XV0sIFtbMzcuOTkwNzE5MTg3MjE0NjQsIC0xLjEzMDkzNzQ2MzM2NzQ3NF0sIFszNy45OTA3OTk0ODU4NDcwNSwgLTEuMTMxMjE1NjU4NzMzNzk0XV0sIFtbMzcuOTkwNzk5NDg1ODQ3MDUsIC0xLjEzMTIxNTY1ODczMzc5NF0sIFszNy45OTA4MDc4Njc3NTAyMSwgLTEuMTMxMjQ0ODI3NzU2ODU5XV1dLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ6IDIsCiAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNSwKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQuYWRkTGF5ZXIobXVsdGlfcG9seV9saW5lXzZmZjYwNmVkOGQ2MTQzZjliZTY1YjQ0ZDY1OTg1YTc0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmVmMzg5ZTM2MGY2NGQzMjlhZmM0Y2IwYjk5Y2VhZmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjYyMjlkZmMxOTgyNDRiNmJhMGVlODRjNzQ0NDFjYzEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzI2MjI5ZGZjMTk4MjQ0YjZiYTBlZTg0Yzc0NDQxY2MxIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBjYWxsZSBMZXBhbnRvIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZWYzODllMzYwZjY0ZDMyOWFmYzRjYjBiOTljZWFmZC5zZXRDb250ZW50KGh0bWxfMjYyMjlkZmMxOTgyNDRiNmJhMGVlODRjNzQ0NDFjYzEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG11bHRpX3BvbHlfbGluZV82ZmY2MDZlZDhkNjE0M2Y5YmU2NWI0NGQ2NTk4NWE3NC5iaW5kUG9wdXAocG9wdXBfNmVmMzg5ZTM2MGY2NGQzMjlhZmM0Y2IwYjk5Y2VhZmQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80ZThhYTMzYTMyMmE0ZmY2ODIwYmU2OTIxYTk5Yjk1MCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk5Mzk4NDEsLTEuMTMyODIxOV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzI2NGEzY2Y2YzVkNTQyM2ViNjE0M2NlZjlhODI2YjEzID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzRlOGFhMzNhMzIyYTRmZjY4MjBiZTY5MjFhOTliOTUwLnNldEljb24oaWNvbl8yNjRhM2NmNmM1ZDU0MjNlYjYxNDNjZWY5YTgyNmIxMyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M1MWE0YWVmYTk2MjQxOTJiZTExNjA0YTdlNWRhYWMzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2EzY2Y1ZDEyODc1ZTQwOGI4ODg2ZTYwOTY1Y2I4ZTAwID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9hM2NmNWQxMjg3NWU0MDhiODg4NmU2MDk2NWNiOGUwMCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgY2FsbGUgSm9zZSBCYWxsZXN0ZXIgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M1MWE0YWVmYTk2MjQxOTJiZTExNjA0YTdlNWRhYWMzLnNldENvbnRlbnQoaHRtbF9hM2NmNWQxMjg3NWU0MDhiODg4NmU2MDk2NWNiOGUwMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzRlOGFhMzNhMzIyYTRmZjY4MjBiZTY5MjFhOTliOTUwLmJpbmRQb3B1cChwb3B1cF9jNTFhNGFlZmE5NjI0MTkyYmUxMTYwNGE3ZTVkYWFjMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgbXVsdGlfcG9seV9saW5lXzI3YmY4Zjg4NDc2ZDRhNDY4MjlkNTQ3NzRmNTZhNGI5ID0gTC5tdWx0aVBvbHlsaW5lKAogICAgICAgICAgICAgICAgICAgIFtbWzM3Ljk5MzA1NzgyMjAxOTEsIC0xLjEzMjc4NDkxODY0NTkzOV0sIFszNy45OTQxODQyNjU5ODY1NzYsIC0xLjEzMjg0MDE1NTM4Nzg2OF1dLCBbWzM3Ljk5NDE4NDI2NTk4NjU3NiwgLTEuMTMyODQwMTU1Mzg3ODY4XSwgWzM3Ljk5NDI3Mzg2ODUzMTUxLCAtMS4xMzI5NDU5MzUwMDU5MjFdXSwgW1szNy45OTQyNzM4Njg1MzE1MSwgLTEuMTMyOTQ1OTM1MDA1OTIxXSwgWzM3Ljk5NDI4MTY2MzcwMTQ1LCAtMS4xMzMwODM1NjU4NTYwMjZdXSwgW1szNy45OTQyODE2NjM3MDE0NSwgLTEuMTMzMDgzNTY1ODU2MDI2XSwgWzM3Ljk5NDIyODk0MTUzMDQ4LCAtMS4xMzM0MTQ3MzQ4NTA0MTldXV0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodDogMiwKICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMC41LAogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNC5hZGRMYXllcihtdWx0aV9wb2x5X2xpbmVfMjdiZjhmODg0NzZkNGE0NjgyOWQ1NDc3NGY1NmE0YjkpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MDk4NzkxYmY4MDY0NjE4YWRmMTNlMjZiZThkMjhhZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZTEyOWY3MGQzNTE0MTA2YmM0NWRkMzgxNDNlYjgxMyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfM2UxMjlmNzBkMzUxNDEwNmJjNDVkZDM4MTQzZWI4MTMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIGNhbGxlIEpvc2UgQmFsbGVzdGVyIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MDk4NzkxYmY4MDY0NjE4YWRmMTNlMjZiZThkMjhhZi5zZXRDb250ZW50KGh0bWxfM2UxMjlmNzBkMzUxNDEwNmJjNDVkZDM4MTQzZWI4MTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG11bHRpX3BvbHlfbGluZV8yN2JmOGY4ODQ3NmQ0YTQ2ODI5ZDU0Nzc0ZjU2YTRiOS5iaW5kUG9wdXAocG9wdXBfOTA5ODc5MWJmODA2NDYxOGFkZjEzZTI2YmU4ZDI4YWYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mN2ZkY2Y4MzU3NmI0NzM3ODZmOTk3MGUwNTQ4OThlNyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk5MzAyMDMsLTEuMTMyOTc5MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2NmN2ZlZDkyOTRjZDQ3ODJiZTBlN2VhZTQ0ZWFjZWI1ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2Y3ZmRjZjgzNTc2YjQ3Mzc4NmY5OTcwZTA1NDg5OGU3LnNldEljb24oaWNvbl9jZjdmZWQ5Mjk0Y2Q0NzgyYmUwZTdlYWU0NGVhY2ViNSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzEyYjhmNThhMmZmYzRkNTc5MjI0ZjBjY2E4NDU3ZWM4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ4N2FkZWZmMDk0YTQwOGE4NTdjNmFiYzgwNGIzNmI4ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF80ODdhZGVmZjA5NGE0MDhhODU3YzZhYmM4MDRiMzZiOCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgY2FsbGUgUmlvIEFyZ29zIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMmI4ZjU4YTJmZmM0ZDU3OTIyNGYwY2NhODQ1N2VjOC5zZXRDb250ZW50KGh0bWxfNDg3YWRlZmYwOTRhNDA4YTg1N2M2YWJjODA0YjM2YjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mN2ZkY2Y4MzU3NmI0NzM3ODZmOTk3MGUwNTQ4OThlNy5iaW5kUG9wdXAocG9wdXBfMTJiOGY1OGEyZmZjNGQ1NzkyMjRmMGNjYTg0NTdlYzgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIG11bHRpX3BvbHlfbGluZV81NTJmNDIxM2UwZTc0ZGEyYTc4NjQzNzFjMDYzNzMyOCA9IEwubXVsdGlQb2x5bGluZSgKICAgICAgICAgICAgICAgICAgICBbW1szNy45OTMwMTYwODAxNDEyNzQsIC0xLjEzMjk3MjY3MzI3NzAzOF0sIFszNy45OTMwNTc4MjIwMTkxLCAtMS4xMzI3ODQ5MTg2NDU5MzldXSwgW1szNy45OTMwNTc4MjIwMTkxLCAtMS4xMzI3ODQ5MTg2NDU5MzldLCBbMzcuOTkzMTg3NjU3Njk5MjUsIC0xLjEzMjA5NDkyMDM3NjcxNl1dLCBbWzM3Ljk5MzE4NzY1NzY5OTI1LCAtMS4xMzIwOTQ5MjAzNzY3MTZdLCBbMzcuOTkzMjM0ODQ3ODE0MTEsIC0xLjEzMTgyOTU0OTMyMjI0OF1dXSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OiAyLAogICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0LmFkZExheWVyKG11bHRpX3BvbHlfbGluZV81NTJmNDIxM2UwZTc0ZGEyYTc4NjQzNzFjMDYzNzMyOCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ0NTdmMDAxYWY3ODRmZmY4N2VhOTA1MjViMjZiNzhjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQwNGU0MmZlY2Q5ZjQyZjU5YTI5YzIwNjM5YmU5OWM5ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF80MDRlNDJmZWNkOWY0MmY1OWEyOWMyMDYzOWJlOTljOSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgY2FsbGUgUmlvIEFyZ29zIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NDU3ZjAwMWFmNzg0ZmZmODdlYTkwNTI1YjI2Yjc4Yy5zZXRDb250ZW50KGh0bWxfNDA0ZTQyZmVjZDlmNDJmNTlhMjljMjA2MzliZTk5YzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG11bHRpX3BvbHlfbGluZV81NTJmNDIxM2UwZTc0ZGEyYTc4NjQzNzFjMDYzNzMyOC5iaW5kUG9wdXAocG9wdXBfNDQ1N2YwMDFhZjc4NGZmZjg3ZWE5MDUyNWIyNmI3OGMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84MWU0NThhMTllMWY0OWY5YmZlYWMyN2M3NDQ4MDcyYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk5MTAxMTcsLTEuMTMxOTI3MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzc1ODhmN2RiNjhkZjQ0OTM4ZDAwZWJlYjkyODVhNzI2ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzgxZTQ1OGExOWUxZjQ5ZjliZmVhYzI3Yzc0NDgwNzJiLnNldEljb24oaWNvbl83NTg4ZjdkYjY4ZGY0NDkzOGQwMGViZWI5Mjg1YTcyNik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdhNzFhMDE4NjNiNjQ5YzI4NTQxOTk4MDI0Y2VjMTcyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNkODVjZjNhMjhhNzQ1YmViMTZiNzBmNTI4ZWZjYjIwID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8zZDg1Y2YzYTI4YTc0NWJlYjE2YjcwZjUyOGVmY2IyMCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgY2FsbGUgSnVudGVyb25lcyAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2E3MWEwMTg2M2I2NDljMjg1NDE5OTgwMjRjZWMxNzIuc2V0Q29udGVudChodG1sXzNkODVjZjNhMjhhNzQ1YmViMTZiNzBmNTI4ZWZjYjIwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfODFlNDU4YTE5ZTFmNDlmOWJmZWFjMjdjNzQ0ODA3MmIuYmluZFBvcHVwKHBvcHVwXzdhNzFhMDE4NjNiNjQ5YzI4NTQxOTk4MDI0Y2VjMTcyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBtdWx0aV9wb2x5X2xpbmVfYjg2MzJiMjkzZjEzNDAwNWJlY2JmYzRkNjhhMTA3MDYgPSBMLm11bHRpUG9seWxpbmUoCiAgICAgICAgICAgICAgICAgICAgW1tbMzcuOTkwOTk1MDM1NjQ4MSwgLTEuMTMxODA4MjU5Mjg4MTY0XSwgWzM3Ljk5MDgyMDUyNDQyNDAxLCAtMS4xMzEyODMwNDkyMzUzMjFdXSwgW1szNy45OTA4MjA1MjQ0MjQwMSwgLTEuMTMxMjgzMDQ5MjM1MzIxXSwgWzM3Ljk5MDgwNzg2Nzc1MDIxLCAtMS4xMzEyNDQ4Mjc3NTY4NTldXV0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodDogMiwKICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMC41LAogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNC5hZGRMYXllcihtdWx0aV9wb2x5X2xpbmVfYjg2MzJiMjkzZjEzNDAwNWJlY2JmYzRkNjhhMTA3MDYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NmE5ZTFiM2IwZTk0OGQzODFmMzY3ODY4MmE2YjdlNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wZTI2YzNmNzE3MmQ0NTk2OTFkMDg1MTQ4OGYwZWM3NSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMGUyNmMzZjcxNzJkNDU5NjkxZDA4NTE0ODhmMGVjNzUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIGNhbGxlIEp1bnRlcm9uZXMgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU2YTllMWIzYjBlOTQ4ZDM4MWYzNjc4NjgyYTZiN2U2LnNldENvbnRlbnQoaHRtbF8wZTI2YzNmNzE3MmQ0NTk2OTFkMDg1MTQ4OGYwZWM3NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbXVsdGlfcG9seV9saW5lX2I4NjMyYjI5M2YxMzQwMDViZWNiZmM0ZDY4YTEwNzA2LmJpbmRQb3B1cChwb3B1cF81NmE5ZTFiM2IwZTk0OGQzODFmMzY3ODY4MmE2YjdlNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzcwYmQ5MmEwMTM0NTRmNTdhZWVlMTY4N2Q0MGE1OTZhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTkwMjE2MywtMS4xMjc1MTE3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNmQyY2JmNmJlZDJmNGUxY2FkMDE3NTNlZmRlNDc5MzUgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNzBiZDkyYTAxMzQ1NGY1N2FlZWUxNjg3ZDQwYTU5NmEuc2V0SWNvbihpY29uXzZkMmNiZjZiZWQyZjRlMWNhZDAxNzUzZWZkZTQ3OTM1KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGM0NjE2NGJiM2QxNDgxZDkyOWE0MTI0MWM5ODM1MzEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTNjYTJiYjMxZDQ2NDI5ZTg3ZDFhMTI5NWY2M2YzZDAgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzkzY2EyYmIzMWQ0NjQyOWU4N2QxYTEyOTVmNjNmM2QwIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBjYWxsZSBQdWVydGEgTnVldmEgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRjNDYxNjRiYjNkMTQ4MWQ5MjlhNDEyNDFjOTgzNTMxLnNldENvbnRlbnQoaHRtbF85M2NhMmJiMzFkNDY0MjllODdkMWExMjk1ZjYzZjNkMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzcwYmQ5MmEwMTM0NTRmNTdhZWVlMTY4N2Q0MGE1OTZhLmJpbmRQb3B1cChwb3B1cF80YzQ2MTY0YmIzZDE0ODFkOTI5YTQxMjQxYzk4MzUzMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgbXVsdGlfcG9seV9saW5lX2MwNmU5ODRkOGQyMTQ2OTE5YjZjMDE3ZTJmMGJlNjc3ID0gTC5tdWx0aVBvbHlsaW5lKAogICAgICAgICAgICAgICAgICAgIFtbWzM3Ljk4NzYyNTM0MjkzNDI4LCAtMS4xMjcyMTY5MDQxODY4MDldLCBbMzcuOTg3OTkyNDcwMjkzMjgsIC0xLjEyNzI2ODM2OTA3MjMxMV1dLCBbWzM3Ljk4Nzk5MjQ3MDI5MzI4LCAtMS4xMjcyNjgzNjkwNzIzMTFdLCBbMzcuOTg4MTI1NDkxMDk2NjQsIC0xLjEyNzEyMDQyODQ4MTI3N11dLCBbWzM3Ljk4ODEyNTQ5MTA5NjY0LCAtMS4xMjcxMjA0Mjg0ODEyNzddLCBbMzcuOTg4NTk2NzIxNjkzMDYsIC0xLjEyNzE1NTA0NTc0MTQwNF1dLCBbWzM3Ljk4ODU5NjcyMTY5MzA2LCAtMS4xMjcxNTUwNDU3NDE0MDRdLCBbMzcuOTg5MDYyODM5MzI4NTQsIC0xLjEyNzIxMzA0ODUxMTM1MV1dLCBbWzM3Ljk4OTA2MjgzOTMyODU0LCAtMS4xMjcyMTMwNDg1MTEzNTFdLCBbMzcuOTg5MTQ0NDc5MDY1NDMsIC0xLjEyNzIyNzk2ODI5ODk5Nl1dLCBbWzM3Ljk4OTE0NDQ3OTA2NTQzLCAtMS4xMjcyMjc5NjgyOTg5OTZdLCBbMzcuOTg5Mzc4NzUzMjU5MTMsIC0xLjEyNzI4ODMxODAwMTg2XV0sIFtbMzcuOTg5Mzc4NzUzMjU5MTMsIC0xLjEyNzI4ODMxODAwMTg2XSwgWzM3Ljk4OTgwMjg3NzU1OTcyNSwgLTEuMTI3NDQ3NzQxODAwMjExXV1dLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ6IDIsCiAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNSwKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQuYWRkTGF5ZXIobXVsdGlfcG9seV9saW5lX2MwNmU5ODRkOGQyMTQ2OTE5YjZjMDE3ZTJmMGJlNjc3KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWQ5NWQ0MGEzZDU1NDNhYzg2YTYwZDRlNmE3ZTYzNGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGMwNzNmNDAzNWEzNGNmMjg4ZDIxODRjMmY0NGU5NDkgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzBjMDczZjQwMzVhMzRjZjI4OGQyMTg0YzJmNDRlOTQ5IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBjYWxsZSBQdWVydGEgTnVldmEgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FkOTVkNDBhM2Q1NTQzYWM4NmE2MGQ0ZTZhN2U2MzRmLnNldENvbnRlbnQoaHRtbF8wYzA3M2Y0MDM1YTM0Y2YyODhkMjE4NGMyZjQ0ZTk0OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbXVsdGlfcG9seV9saW5lX2MwNmU5ODRkOGQyMTQ2OTE5YjZjMDE3ZTJmMGJlNjc3LmJpbmRQb3B1cChwb3B1cF9hZDk1ZDQwYTNkNTU0M2FjODZhNjBkNGU2YTdlNjM0Zik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzhkMzIwMTU3YzMwZDQ0NjBhNjZhMjZiNTYxYzMyNmM1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTg4OTI3MiwtMS4xMzQ2MTU4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZjJiOTNhNmM4ZDkwNDAyM2I1MjExMzNlMzBkMmM2N2UgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfOGQzMjAxNTdjMzBkNDQ2MGE2NmEyNmI1NjFjMzI2YzUuc2V0SWNvbihpY29uX2YyYjkzYTZjOGQ5MDQwMjNiNTIxMTMzZTMwZDJjNjdlKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjg0NjIxZWZkMDhmNGMxZjliMDI4ODYwNGRkZjRlZWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWY4OTNiMDMzYmM2NDM1Nzk1N2I2YjBhNGNjMTUwNDUgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2VmODkzYjAzM2JjNjQzNTc5NTdiNmIwYTRjYzE1MDQ1IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBKZXJvbmltbyBkZSBSb2RhIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ODQ2MjFlZmQwOGY0YzFmOWIwMjg4NjA0ZGRmNGVlZS5zZXRDb250ZW50KGh0bWxfZWY4OTNiMDMzYmM2NDM1Nzk1N2I2YjBhNGNjMTUwNDUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84ZDMyMDE1N2MzMGQ0NDYwYTY2YTI2YjU2MWMzMjZjNS5iaW5kUG9wdXAocG9wdXBfNjg0NjIxZWZkMDhmNGMxZjliMDI4ODYwNGRkZjRlZWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIG11bHRpX3BvbHlfbGluZV82MDZiOTI5Mjg5NGI0ODUzYjRmNTFiMzY0ZGNiODRmNiA9IEwubXVsdGlQb2x5bGluZSgKICAgICAgICAgICAgICAgICAgICBbW1szNy45ODkxNzM5ODMzNjQ1OTQsIC0xLjEzMjk4MzY1MzU3MDE5M10sIFszNy45ODkxNjgwMzIyMTMzNCwgLTEuMTMzMDQ5OTU0NDI0MzA4XV0sIFtbMzcuOTg5MTY4MDMyMjEzMzQsIC0xLjEzMzA0OTk1NDQyNDMwOF0sIFszNy45ODkxNTQ3ODg4MDYzMywgLTEuMTMzMTk0OTYxMzQ5MjA0XV0sIFtbMzcuOTg5MTU0Nzg4ODA2MzMsIC0xLjEzMzE5NDk2MTM0OTIwNF0sIFszNy45ODg5MTAyODg2OTA3NiwgLTEuMTM0NjEwMzI5NTE5MDkxXV0sIFtbMzcuOTg4OTEwMjg4NjkwNzYsIC0xLjEzNDYxMDMyOTUxOTA5MV0sIFszNy45ODg4OTA4NDI2NzU0LCAtMS4xMzQ2ODMwMDA2MTk1ODldXSwgW1szNy45ODg4OTA4NDI2NzU0LCAtMS4xMzQ2ODMwMDA2MTk1ODldLCBbMzcuOTg4ODQ1ODMxODU1MzcsIC0xLjEzNDc4NDE3MDE5MDg5OF1dLCBbWzM3Ljk4ODg0NTgzMTg1NTM3LCAtMS4xMzQ3ODQxNzAxOTA4OThdLCBbMzcuOTg4ODI5MTUxODY4MDYsIC0xLjEzNDg4NDI1MDExNDc5NF1dLCBbWzM3Ljk4ODgyOTE1MTg2ODA2LCAtMS4xMzQ4ODQyNTAxMTQ3OTRdLCBbMzcuOTg4NzE1MTU3OTg0OSwgLTEuMTM1NTI1OTY4NjIxNzQ5XV0sIFtbMzcuOTg4NzE1MTU3OTg0OSwgLTEuMTM1NTI1OTY4NjIxNzQ5XSwgWzM3Ljk4ODcwNDE3NzY5MTc0NCwgLTEuMTM1NjAwNjUxMzc5MDM2XV1dLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ6IDIsCiAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNSwKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQuYWRkTGF5ZXIobXVsdGlfcG9seV9saW5lXzYwNmI5MjkyODk0YjQ4NTNiNGY1MWIzNjRkY2I4NGY2KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTgxMzM3ZjYyZjdhNDIzOGIzYjJiNGNiZDhmYWRjYTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDk1YTBmODllMWNhNGZjZWJhZTc0N2Y2ODEwZjI0YzIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzQ5NWEwZjg5ZTFjYTRmY2ViYWU3NDdmNjgxMGYyNGMyIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBKZXJvbmltbyBkZSBSb2RhIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85ODEzMzdmNjJmN2E0MjM4YjNiMmI0Y2JkOGZhZGNhMy5zZXRDb250ZW50KGh0bWxfNDk1YTBmODllMWNhNGZjZWJhZTc0N2Y2ODEwZjI0YzIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG11bHRpX3BvbHlfbGluZV82MDZiOTI5Mjg5NGI0ODUzYjRmNTFiMzY0ZGNiODRmNi5iaW5kUG9wdXAocG9wdXBfOTgxMzM3ZjYyZjdhNDIzOGIzYjJiNGNiZDhmYWRjYTMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80MjhkN2ZlNDMyY2E0MmZiYWFlOTQwZDc3OGU5YTA1NiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk5Mjk1OTgsLTEuMTMzOTc4Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzgzM2RjNzFmY2Y4YzQyMDJhOWM3MDRjNWFmMjg4ODUyID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzQyOGQ3ZmU0MzJjYTQyZmJhYWU5NDBkNzc4ZTlhMDU2LnNldEljb24oaWNvbl84MzNkYzcxZmNmOGM0MjAyYTljNzA0YzVhZjI4ODg1Mik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NiNDNiMzM3MjVkMzQxODQ5YzllZjFkNjRiN2YwZDFiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q5NmZjY2JlOWM3YTRhYWFhYzMyNjlmMjdjZjk0NzM0ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9kOTZmY2NiZTljN2E0YWFhYWMzMjY5ZjI3Y2Y5NDczNCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgY2FsbGUgQ3JvbmlzdGEgQ2FybG9zIFZhbGNhcmNlbCAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2I0M2IzMzcyNWQzNDE4NDljOWVmMWQ2NGI3ZjBkMWIuc2V0Q29udGVudChodG1sX2Q5NmZjY2JlOWM3YTRhYWFhYzMyNjlmMjdjZjk0NzM0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNDI4ZDdmZTQzMmNhNDJmYmFhZTk0MGQ3NzhlOWEwNTYuYmluZFBvcHVwKHBvcHVwX2NiNDNiMzM3MjVkMzQxODQ5YzllZjFkNjRiN2YwZDFiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBtdWx0aV9wb2x5X2xpbmVfNzVlNjZmMGFmNzRjNDI2YzkzMDIxNTNhMmNmMWEwNzEgPSBMLm11bHRpUG9seWxpbmUoCiAgICAgICAgICAgICAgICAgICAgW1tbMzcuOTkzNTY4MzYzNzQxMzksIC0xLjEzNDIwNzQxMTQzMzUyMl0sIFszNy45OTI5NDA5NzgyODg4NiwgLTEuMTMzOTkwMzIwMTQxMzIyXV0sIFtbMzcuOTkyOTQwOTc4Mjg4ODYsIC0xLjEzMzk5MDMyMDE0MTMyMl0sIFszNy45OTIzODIxNTY4MDQyNywgLTEuMTMzODAwNzIxNDkxNTU0XV0sIFtbMzcuOTkyMzgyMTU2ODA0MjcsIC0xLjEzMzgwMDcyMTQ5MTU1NF0sIFszNy45OTIxMjYzNDExMTk0MTYsIC0xLjEzMzcwODQzNjczNzYwNl1dLCBbWzM3Ljk5MjEyNjM0MTExOTQxNiwgLTEuMTMzNzA4NDM2NzM3NjA2XSwgWzM3Ljk5MTc0ODA2NTgyOTIsIC0xLjEzMzYwOTI3ODgyMzA1OV1dLCBbWzM3Ljk5MTc0ODA2NTgyOTIsIC0xLjEzMzYwOTI3ODgyMzA1OV0sIFszNy45OTE2NzA1MzMyMjQ4MzQsIC0xLjEzMzU4MzcxNDAxODM4Nl1dXSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OiAyLAogICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0LmFkZExheWVyKG11bHRpX3BvbHlfbGluZV83NWU2NmYwYWY3NGM0MjZjOTMwMjE1M2EyY2YxYTA3MSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMwZWE2NjAwOGRhMDQ0YTU5NzFkNzI0Y2I4NWZmMTVlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM2M2I0YTVhODg4MzRiMTQ4YjkzNjI1NThlMmMxZTg1ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8zNjNiNGE1YTg4ODM0YjE0OGI5MzYyNTU4ZTJjMWU4NSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgY2FsbGUgQ3JvbmlzdGEgQ2FybG9zIFZhbGNhcmNlbCAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzBlYTY2MDA4ZGEwNDRhNTk3MWQ3MjRjYjg1ZmYxNWUuc2V0Q29udGVudChodG1sXzM2M2I0YTVhODg4MzRiMTQ4YjkzNjI1NThlMmMxZTg1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtdWx0aV9wb2x5X2xpbmVfNzVlNjZmMGFmNzRjNDI2YzkzMDIxNTNhMmNmMWEwNzEuYmluZFBvcHVwKHBvcHVwXzMwZWE2NjAwOGRhMDQ0YTU5NzFkNzI0Y2I4NWZmMTVlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjQ5N2M4NzQxMzQ0NDQ2NDhhNzIyNzBjMWQxMDMxYTQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODk0MDI0LC0xLjEzNTY4OTddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl82OGE2MmUyYzg5MWM0NGE4YTdlNDg0ZjQzOTQ2NTdmMCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8yNDk3Yzg3NDEzNDQ0NDY0OGE3MjI3MGMxZDEwMzFhNC5zZXRJY29uKGljb25fNjhhNjJlMmM4OTFjNDRhOGE3ZTQ4NGY0Mzk0NjU3ZjApOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZGJiYzc5NGU1YWE0MTg0ODgxZDA2NDM5OGFhYTk3OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMzMwZTE0NzUzYmI0NTk5YTdhOGRlZGUyY2M0Nzc4ZiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMTMzMGUxNDc1M2JiNDU5OWE3YThkZWRlMmNjNDc3OGYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIFBhc29zIGRlIFNhbnRpYWdvIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wZGJiYzc5NGU1YWE0MTg0ODgxZDA2NDM5OGFhYTk3OS5zZXRDb250ZW50KGh0bWxfMTMzMGUxNDc1M2JiNDU5OWE3YThkZWRlMmNjNDc3OGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yNDk3Yzg3NDEzNDQ0NDY0OGE3MjI3MGMxZDEwMzFhNC5iaW5kUG9wdXAocG9wdXBfMGRiYmM3OTRlNWFhNDE4NDg4MWQwNjQzOThhYWE5NzkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIG11bHRpX3BvbHlfbGluZV8zMThjODEyYmQ1ZTU0MGRiOTAyNjI0YTUyNTRiN2NiNyA9IEwubXVsdGlQb2x5bGluZSgKICAgICAgICAgICAgICAgICAgICBbW1szNy45OTA0NzkwNDU2ODg3MTYsIC0xLjEzNTkwNTQxNzM3ODQxXSwgWzM3Ljk5MDcyNzczNjc1NTg3LCAtMS4xMzYwNTYyMDc4MTY1MjNdXSwgW1szNy45OTA3Mjc3MzY3NTU4NywgLTEuMTM2MDU2MjA3ODE2NTIzXSwgWzM3Ljk5MDkwNzk0NzY3NDEyLCAtMS4xMzYyNjM3NDM3MzkwNzldXV0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodDogMiwKICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMC41LAogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNC5hZGRMYXllcihtdWx0aV9wb2x5X2xpbmVfMzE4YzgxMmJkNWU1NDBkYjkwMjYyNGE1MjU0YjdjYjcpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kYjJkOTdmOTQ0Mjg0MjI1YWFmY2NiZTA5MjI5NTUyYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83YzA2YWEwMTA2NjY0NTA1OTA5N2IxMTg2MDliNGRmMCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfN2MwNmFhMDEwNjY2NDUwNTkwOTdiMTE4NjA5YjRkZjAiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIFBhc29zIGRlIFNhbnRpYWdvIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kYjJkOTdmOTQ0Mjg0MjI1YWFmY2NiZTA5MjI5NTUyYy5zZXRDb250ZW50KGh0bWxfN2MwNmFhMDEwNjY2NDUwNTkwOTdiMTE4NjA5YjRkZjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG11bHRpX3BvbHlfbGluZV8zMThjODEyYmQ1ZTU0MGRiOTAyNjI0YTUyNTRiN2NiNy5iaW5kUG9wdXAocG9wdXBfZGIyZDk3Zjk0NDI4NDIyNWFhZmNjYmUwOTIyOTU1MmMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iMmIyODQ4MzQ1YmQ0ODdiOThkNDA5ZDUwZGE3NWQ0NiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk5MTk5MTIsLTEuMTM2MDIwMV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzgzY2VmYmY1NDM2MzRmYjNhYTE2NTM5N2RiYTAyNjMzID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2IyYjI4NDgzNDViZDQ4N2I5OGQ0MDlkNTBkYTc1ZDQ2LnNldEljb24oaWNvbl84M2NlZmJmNTQzNjM0ZmIzYWExNjUzOTdkYmEwMjYzMyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ5MTdkMmE2NDExYzQ4YTk4OGU2NDY0YmUzZjliMjU2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VjNzdhZjA2OTBhMTRjZTViZmRiZTQ5OTczNjc4YTBlID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9lYzc3YWYwNjkwYTE0Y2U1YmZkYmU0OTk3MzY3OGEwZSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU2VuZGEgUGljYXpvIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80OTE3ZDJhNjQxMWM0OGE5ODhlNjQ2NGJlM2Y5YjI1Ni5zZXRDb250ZW50KGh0bWxfZWM3N2FmMDY5MGExNGNlNWJmZGJlNDk5NzM2NzhhMGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iMmIyODQ4MzQ1YmQ0ODdiOThkNDA5ZDUwZGE3NWQ0Ni5iaW5kUG9wdXAocG9wdXBfNDkxN2QyYTY0MTFjNDhhOTg4ZTY0NjRiZTNmOWIyNTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIG11bHRpX3BvbHlfbGluZV8yZTk3N2E2Y2Q0ZDg0NDQwODk0OGI5MTlmY2M3YmQwNiA9IEwubXVsdGlQb2x5bGluZSgKICAgICAgICAgICAgICAgICAgICBbW1szNy45OTA4Mjk2NjA2OTg0NjYsIC0xLjE0MDU1MTkyNTQwMjY2MV0sIFszNy45OTEwMjI5NDczODU2NSwgLTEuMTQwMDY2NjEzMjA4OTE2XV0sIFtbMzcuOTkxMDIyOTQ3Mzg1NjUsIC0xLjE0MDA2NjYxMzIwODkxNl0sIFszNy45OTEwNjk4ODYwNDM0MiwgLTEuMTM5ODYwMzM0NTcxODA3XV0sIFtbMzcuOTkxMDY5ODg2MDQzNDIsIC0xLjEzOTg2MDMzNDU3MTgwN10sIFszNy45OTExNTgyMzEzMDI4NzYsIC0xLjEzOTQwMTAwNjI3Nzg5M11dLCBbWzM3Ljk5MTE1ODIzMTMwMjg3NiwgLTEuMTM5NDAxMDA2Mjc3ODkzXSwgWzM3Ljk5MTI1MTY4OTUyMzI3LCAtMS4xMzg5NzkwNjEyNzIxNTJdXSwgW1szNy45OTEyNTE2ODk1MjMyNywgLTEuMTM4OTc5MDYxMjcyMTUyXSwgWzM3Ljk5MTQyMzY4NjE3NjM3NSwgLTEuMTM4MjE0OTY2OTc4ODM2XV0sIFtbMzcuOTkxNDIzNjg2MTc2Mzc1LCAtMS4xMzgyMTQ5NjY5Nzg4MzZdLCBbMzcuOTkwNzczOTIxMDQyMzc2LCAtMS4xMzc3NjI2Nzk0ODM2MTVdXV0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodDogMiwKICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMC41LAogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNC5hZGRMYXllcihtdWx0aV9wb2x5X2xpbmVfMmU5NzdhNmNkNGQ4NDQ0MDg5NDhiOTE5ZmNjN2JkMDYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hMjQ5NjJjNzkxMTc0MGUyODU2ODMwZThkZjI5N2Q1NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNzNhNmViM2ZmMTY0NTU2YTFhYWJjZmRmMzA5YWExNyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMTczYTZlYjNmZjE2NDU1NmExYWFiY2ZkZjMwOWFhMTciICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFNlbmRhIFBpY2F6byAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTI0OTYyYzc5MTE3NDBlMjg1NjgzMGU4ZGYyOTdkNTcuc2V0Q29udGVudChodG1sXzE3M2E2ZWIzZmYxNjQ1NTZhMWFhYmNmZGYzMDlhYTE3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtdWx0aV9wb2x5X2xpbmVfMmU5NzdhNmNkNGQ4NDQ0MDg5NDhiOTE5ZmNjN2JkMDYuYmluZFBvcHVwKHBvcHVwX2EyNDk2MmM3OTExNzQwZTI4NTY4MzBlOGRmMjk3ZDU3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDE2YjI5ZTYxN2Y4NDc3Y2JiNWI3MjlhYjRkNDU3Y2IgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45OTE4NjcyLC0xLjEzOTYyNDddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl83ZTNhNDFhNjg1Njg0MGZkOWFmNTRjYTg4Yjg0MmRlOSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9kMTZiMjllNjE3Zjg0NzdjYmI1YjcyOWFiNGQ0NTdjYi5zZXRJY29uKGljb25fN2UzYTQxYTY4NTY4NDBmZDlhZjU0Y2E4OGI4NDJkZTkpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NzYzZjBiNmRhODk0MGEyYTYyZGI2NjQ2NDljZGNjZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81YmU5MDdhOTBkNjM0YTJiYTU4ODE0NDZkMjRiNDkyZSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNWJlOTA3YTkwZDYzNGEyYmE1ODgxNDQ2ZDI0YjQ5MmUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIGRlbCBFbWlncmFudGUgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY3NjNmMGI2ZGE4OTQwYTJhNjJkYjY2NDY0OWNkY2NkLnNldENvbnRlbnQoaHRtbF81YmU5MDdhOTBkNjM0YTJiYTU4ODE0NDZkMjRiNDkyZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2QxNmIyOWU2MTdmODQ3N2NiYjViNzI5YWI0ZDQ1N2NiLmJpbmRQb3B1cChwb3B1cF82NzYzZjBiNmRhODk0MGEyYTYyZGI2NjQ2NDljZGNjZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgbXVsdGlfcG9seV9saW5lXzAzNDc3YzFiMTE5MTQzMmNhZTgzNWJlZTVlMTIwNTQ1ID0gTC5tdWx0aVBvbHlsaW5lKAogICAgICAgICAgICAgICAgICAgIFtbWzM3Ljk5MTE1ODIzMTMwMjg3NiwgLTEuMTM5NDAxMDA2Mjc3ODkzXSwgWzM3Ljk5MTUwNzE2OTkzMTk5LCAtMS4xMzk1MDMyNjU0OTY2MTRdXSwgW1szNy45OTE1MDcxNjk5MzE5OSwgLTEuMTM5NTAzMjY1NDk2NjE0XSwgWzM3Ljk5MTg4MDI0ODQ0MjIzNiwgLTEuMTM5NjIwNTI4MzIyMDEyXV0sIFtbMzcuOTkxODgwMjQ4NDQyMjM2LCAtMS4xMzk2MjA1MjgzMjIwMTJdLCBbMzcuOTkyMDUxMDcxNjI4OTEsIC0xLjEzOTU0MzY2NjI2OTkwMV1dLCBbWzM3Ljk5MjA1MTA3MTYyODkxLCAtMS4xMzk1NDM2NjYyNjk5MDFdLCBbMzcuOTkyNDY0NTUwOTEyNDcsIC0xLjEzOTMyNDQ3OTUwMTkzN11dXSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OiAyLAogICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0LmFkZExheWVyKG11bHRpX3BvbHlfbGluZV8wMzQ3N2MxYjExOTE0MzJjYWU4MzViZWU1ZTEyMDU0NSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YwNzUwMzgwNzdhMjRmNWU4ZWFiOTJjMzRjNzNhMmIzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk1OTMxMDFjMmJmZDQ3MGE5OGY1ZjRiYmRlNzE2ZWIzID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF85NTkzMTAxYzJiZmQ0NzBhOThmNWY0YmJkZTcxNmViMyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgZGVsIEVtaWdyYW50ZSAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjA3NTAzODA3N2EyNGY1ZThlYWI5MmMzNGM3M2EyYjMuc2V0Q29udGVudChodG1sXzk1OTMxMDFjMmJmZDQ3MGE5OGY1ZjRiYmRlNzE2ZWIzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtdWx0aV9wb2x5X2xpbmVfMDM0NzdjMWIxMTkxNDMyY2FlODM1YmVlNWUxMjA1NDUuYmluZFBvcHVwKHBvcHVwX2YwNzUwMzgwNzdhMjRmNWU4ZWFiOTJjMzRjNzNhMmIzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNjFiYTUwZTdlMWU1NGZjZThkMWNmZDUzOWMwZGMzMDQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45OTIzNzUzLC0xLjEzNjUzMDFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9jY2JiMWMxNTRhNjk0NDZmODEyNTE3NDA3MTY5NzgzNiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl82MWJhNTBlN2UxZTU0ZmNlOGQxY2ZkNTM5YzBkYzMwNC5zZXRJY29uKGljb25fY2NiYjFjMTU0YTY5NDQ2ZjgxMjUxNzQwNzE2OTc4MzYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iZTkxZGJmMTk3Mzc0ZWZlYTRjNTZiMTk0OWU4NDE1NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iOGFiMDBkNDI0OGE0MzU4YWZlMGE0MWNkMmU3NWJlOSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYjhhYjAwZDQyNDhhNDM1OGFmZTBhNDFjZDJlNzViZTkiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFBsYXphIFNhbnRhIE1hcmlhIGRlIEdyYWNpYSAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmU5MWRiZjE5NzM3NGVmZWE0YzU2YjE5NDllODQxNTUuc2V0Q29udGVudChodG1sX2I4YWIwMGQ0MjQ4YTQzNThhZmUwYTQxY2QyZTc1YmU5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNjFiYTUwZTdlMWU1NGZjZThkMWNmZDUzOWMwZGMzMDQuYmluZFBvcHVwKHBvcHVwX2JlOTFkYmYxOTczNzRlZmVhNGM1NmIxOTQ5ZTg0MTU1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBtdWx0aV9wb2x5X2xpbmVfYjg4NzJjOWMwYjgyNGI3OWIzZWQwZDM1YTg1MGZiNzkgPSBMLm11bHRpUG9seWxpbmUoCiAgICAgICAgICAgICAgICAgICAgW1tbMzcuOTkyMzIwMjk4MzU4ODYsIC0xLjEzNjcwNjcyNzMyMTgwOF0sIFszNy45OTIzNTY0MjQzNjE1MywgLTEuMTM2NTIzNzUwMzc1NTE3XV0sIFtbMzcuOTkyMzU2NDI0MzYxNTMsIC0xLjEzNjUyMzc1MDM3NTUxN10sIFszNy45OTIzOTk4NDI2MTk5NiwgLTEuMTM2MzA0MjI4MzMxNDI2XV1dLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ6IDIsCiAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNSwKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQuYWRkTGF5ZXIobXVsdGlfcG9seV9saW5lX2I4ODcyYzljMGI4MjRiNzliM2VkMGQzNWE4NTBmYjc5KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDZhMWMxZjgxMzIwNDQ2MGJhYzE1NDI2NDNkOTQ0ZTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2FmNmE1MTFmOGQ0NDYxYzlhYjc4MWEyM2YwYzU1NDMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2NhZjZhNTExZjhkNDQ2MWM5YWI3ODFhMjNmMGM1NTQzIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBQbGF6YSBTYW50YSBNYXJpYSBkZSBHcmFjaWEgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA2YTFjMWY4MTMyMDQ0NjBiYWMxNTQyNjQzZDk0NGUxLnNldENvbnRlbnQoaHRtbF9jYWY2YTUxMWY4ZDQ0NjFjOWFiNzgxYTIzZjBjNTU0Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbXVsdGlfcG9seV9saW5lX2I4ODcyYzljMGI4MjRiNzliM2VkMGQzNWE4NTBmYjc5LmJpbmRQb3B1cChwb3B1cF8wNmExYzFmODEzMjA0NDYwYmFjMTU0MjY0M2Q5NDRlMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzMxMjQyZGFiMzI2YTQxZWVhMTY1Y2I2NWE1MTI1OThiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTkzNDMzLC0xLjEzOTE0MzRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9mMzc0YzhmMjMwYzY0YWI3YmI5MzhhYmFlZWY5MzdkNCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8zMTI0MmRhYjMyNmE0MWVlYTE2NWNiNjVhNTEyNTk4Yi5zZXRJY29uKGljb25fZjM3NGM4ZjIzMGM2NGFiN2JiOTM4YWJhZWVmOTM3ZDQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jYjFlNmZlMjhhZmU0MmI3YTk0MTdkM2U4M2EwY2JiYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNDViODQ3MmExNmM0MDdkODk1NmUwZWJlYjViMDY0YyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZDQ1Yjg0NzJhMTZjNDA3ZDg5NTZlMGViZWI1YjA2NGMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIEF6b3JpbiAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2IxZTZmZTI4YWZlNDJiN2E5NDE3ZDNlODNhMGNiYmEuc2V0Q29udGVudChodG1sX2Q0NWI4NDcyYTE2YzQwN2Q4OTU2ZTBlYmViNWIwNjRjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzEyNDJkYWIzMjZhNDFlZWExNjVjYjY1YTUxMjU5OGIuYmluZFBvcHVwKHBvcHVwX2NiMWU2ZmUyOGFmZTQyYjdhOTQxN2QzZTgzYTBjYmJhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBtdWx0aV9wb2x5X2xpbmVfMWMwODgxMDUzZWJlNGQzNmE1NDMyOTFkNGYzNzlhM2QgPSBMLm11bHRpUG9seWxpbmUoCiAgICAgICAgICAgICAgICAgICAgW1tbMzcuOTkyNzEzNDkzNDM2NzI1LCAtMS4xMzk1MTQyNDU3ODk3NjldLCBbMzcuOTkzMDYzODU2OTg5MzgsIC0xLjEzOTMyODgzODA5MTU4Nl1dLCBbWzM3Ljk5MzA2Mzg1Njk4OTM4LCAtMS4xMzkzMjg4MzgwOTE1ODZdLCBbMzcuOTkzMTkxMDk0Mjc5NTUsIC0xLjEzOTI2MTUzMTQwOTA5XV0sIFtbMzcuOTkzMTkxMDk0Mjc5NTUsIC0xLjEzOTI2MTUzMTQwOTA5XSwgWzM3Ljk5MzU4MzI4MzUyOTAzNCwgLTEuMTM5MDU0MTYzMTI0NTddXSwgW1szNy45OTM1ODMyODM1MjkwMzQsIC0xLjEzOTA1NDE2MzEyNDU3XSwgWzM3Ljk5Mzc3OTY3MTUyMDQsIC0xLjEzODk1MDIyNzUyNTI0M11dLCBbWzM3Ljk5Mzc3OTY3MTUyMDQsIC0xLjEzODk1MDIyNzUyNTI0M10sIFszNy45OTQwMDk4Mzg1ODE1NSwgLTEuMTM4ODI4NDM4NDcyMTMyXV0sIFtbMzcuOTk0MDA5ODM4NTgxNTUsIC0xLjEzODgyODQzODQ3MjEzMl0sIFszNy45OTQzMjk5NDM0NjM3MjUsIC0xLjEzODY1OTEyNDAyODAxXV1dLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ6IDIsCiAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNSwKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQuYWRkTGF5ZXIobXVsdGlfcG9seV9saW5lXzFjMDg4MTA1M2ViZTRkMzZhNTQzMjkxZDRmMzc5YTNkKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmYzZTFkMDczYzQ4NDRhNDlmMTQ1ZDVhZTM5MTkyM2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjBmNzlkOGY2MTJjNGM4NDhlMWZlNTM3MzFlYWJmNGEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzYwZjc5ZDhmNjEyYzRjODQ4ZTFmZTUzNzMxZWFiZjRhIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBBem9yaW4gKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZmM2UxZDA3M2M0ODQ0YTQ5ZjE0NWQ1YWUzOTE5MjNhLnNldENvbnRlbnQoaHRtbF82MGY3OWQ4ZjYxMmM0Yzg0OGUxZmU1MzczMWVhYmY0YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbXVsdGlfcG9seV9saW5lXzFjMDg4MTA1M2ViZTRkMzZhNTQzMjkxZDRmMzc5YTNkLmJpbmRQb3B1cChwb3B1cF82ZjNlMWQwNzNjNDg0NGE0OWYxNDVkNWFlMzkxOTIzYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2JhZTJkNmY0NDBhNjRkNjg5M2U4MTM4OTM0OWU2OWNjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTkzOTIwNiwtMS4xMzY2NTA3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fODYxZTk2ZTRlMjQ4NDJjNzg3NmM2NGRmZWRiNzM1MDIgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYmFlMmQ2ZjQ0MGE2NGQ2ODkzZTgxMzg5MzQ5ZTY5Y2Muc2V0SWNvbihpY29uXzg2MWU5NmU0ZTI0ODQyYzc4NzZjNjRkZmVkYjczNTAyKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTY5YmNjYTJkMTI4NDY4NmI4OTJiMDk3ZjI5MDVkN2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTY5NmM2M2Q4OGU1NDNmZWIwMGNhNTljYmY1YzM5YWMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2E2OTZjNjNkODhlNTQzZmViMDBjYTU5Y2JmNWMzOWFjIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBQaWNvIGRlbCBNb3Jyb24gKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk2OWJjY2EyZDEyODQ2ODZiODkyYjA5N2YyOTA1ZDdhLnNldENvbnRlbnQoaHRtbF9hNjk2YzYzZDg4ZTU0M2ZlYjAwY2E1OWNiZjVjMzlhYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2JhZTJkNmY0NDBhNjRkNjg5M2U4MTM4OTM0OWU2OWNjLmJpbmRQb3B1cChwb3B1cF85NjliY2NhMmQxMjg0Njg2Yjg5MmIwOTdmMjkwNWQ3YSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgbXVsdGlfcG9seV9saW5lX2ViYzVhZTM0MTA4ZDRjYTJhYWEyYThiNDRmYmE3ODNlID0gTC5tdWx0aVBvbHlsaW5lKAogICAgICAgICAgICAgICAgICAgIFtbWzM3Ljk5Mzk0NjcyMjg1MDY0LCAtMS4xMzYxMTM1NDAwMzQyMTZdLCBbMzcuOTkzODcxMDM0MjY0OTcsIC0xLjEzNjY0NzQ2NzI2NjM1N11dLCBbWzM3Ljk5Mzg3MTAzNDI2NDk3LCAtMS4xMzY2NDc0NjcyNjYzNTddLCBbMzcuOTkzNzg5MDU5MjUxOTUsIC0xLjEzNzE1MDIxMzgxODcyOF1dLCBbWzM3Ljk5Mzc4OTA1OTI1MTk1LCAtMS4xMzcxNTAyMTM4MTg3MjhdLCBbMzcuOTkzNzU5NzIyNTkwODUsIC0xLjEzNzM0MjQxMDg1ODQ4XV0sIFtbMzcuOTkzNzU5NzIyNTkwODUsIC0xLjEzNzM0MjQxMDg1ODQ4XSwgWzM3Ljk5MzcxMDQzNzAwMDE3NSwgLTEuMTM3NjY2NzA2NjkyMjcyXV1dLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ6IDIsCiAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNSwKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQuYWRkTGF5ZXIobXVsdGlfcG9seV9saW5lX2ViYzVhZTM0MTA4ZDRjYTJhYWEyYThiNDRmYmE3ODNlKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmEwMWZmMDZjMTkwNGEwMmI4NTc3NTE3YzViMGExOTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2YzMDk2NDVkODNiNGZjODhlNjc5NGQ0ZGNjMGU3MzkgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzNmMzA5NjQ1ZDgzYjRmYzg4ZTY3OTRkNGRjYzBlNzM5IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBQaWNvIGRlbCBNb3Jyb24gKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJhMDFmZjA2YzE5MDRhMDJiODU3NzUxN2M1YjBhMTkyLnNldENvbnRlbnQoaHRtbF8zZjMwOTY0NWQ4M2I0ZmM4OGU2Nzk0ZDRkY2MwZTczOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbXVsdGlfcG9seV9saW5lX2ViYzVhZTM0MTA4ZDRjYTJhYWEyYThiNDRmYmE3ODNlLmJpbmRQb3B1cChwb3B1cF8yYTAxZmYwNmMxOTA0YTAyYjg1Nzc1MTdjNWIwYTE5Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzVlNWEzMmRkMzNhOTQ5YzFiMzYzMTIxYWI4YzdiYjc3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTkyODAxLC0xLjEzNzQ1ODVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9iZjdlY2Q1YjRmNjg0ODBlOGE3Y2JjMDU0MGYzMTQ3MSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl81ZTVhMzJkZDMzYTk0OWMxYjM2MzEyMWFiOGM3YmI3Ny5zZXRJY29uKGljb25fYmY3ZWNkNWI0ZjY4NDgwZThhN2NiYzA1NDBmMzE0NzEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMDYyOGYzZjhjOGE0OTUwYTc2NzE3NDllNjgzMWRmNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85NTFhNzUzMjhlNmQ0OTIxODczNGE0NTFjMzM5NzkxYiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfOTUxYTc1MzI4ZTZkNDkyMTg3MzRhNDUxYzMzOTc5MWIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIEVzY3JpdG9yIFNhbmNoZXogTW9yZW5vIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMDYyOGYzZjhjOGE0OTUwYTc2NzE3NDllNjgzMWRmNS5zZXRDb250ZW50KGh0bWxfOTUxYTc1MzI4ZTZkNDkyMTg3MzRhNDUxYzMzOTc5MWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81ZTVhMzJkZDMzYTk0OWMxYjM2MzEyMWFiOGM3YmI3Ny5iaW5kUG9wdXAocG9wdXBfYjA2MjhmM2Y4YzhhNDk1MGE3NjcxNzQ5ZTY4MzFkZjUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIG11bHRpX3BvbHlfbGluZV81MWE4YTRmY2U4MjU0MThjOWZjMGI1OWZhNTdkYzc2ZSA9IEwubXVsdGlQb2x5bGluZSgKICAgICAgICAgICAgICAgICAgICBbW1szNy45OTM1MDIzOTgxNjM0LCAtMS4xMzc2Mjk5MTAxMzczNDldLCBbMzcuOTkzMjc1MzMyNDA2NDMsIC0xLjEzNzU3MjU3NzkxOTYyN11dLCBbWzM3Ljk5MzI3NTMzMjQwNjQzLCAtMS4xMzc1NzI1Nzc5MTk2MjddLCBbMzcuOTkyODAyOTI4MzQzNTksIC0xLjEzNzQ1MzEzNTc5OTQwNF1dLCBbWzM3Ljk5MjgwMjkyODM0MzU5LCAtMS4xMzc0NTMxMzU3OTk0MDRdLCBbMzcuOTkxOTg4NDU4ODEyMjEsIC0xLjEzNzI0NzI3NjI1NzQ1NF1dXSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OiAyLAogICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0LmFkZExheWVyKG11bHRpX3BvbHlfbGluZV81MWE4YTRmY2U4MjU0MThjOWZjMGI1OWZhNTdkYzc2ZSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAzNTdmNjY1ODUzNjQ2MTE5MTNhM2UxYmZjNjY0ZTcwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IyNTUwYTE5NDY4YzQ4YTA4M2MxNDUzYWZiN2FlZTg4ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9iMjU1MGExOTQ2OGM0OGEwODNjMTQ1M2FmYjdhZWU4OCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgRXNjcml0b3IgU2FuY2hleiBNb3Jlbm8gKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAzNTdmNjY1ODUzNjQ2MTE5MTNhM2UxYmZjNjY0ZTcwLnNldENvbnRlbnQoaHRtbF9iMjU1MGExOTQ2OGM0OGEwODNjMTQ1M2FmYjdhZWU4OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbXVsdGlfcG9seV9saW5lXzUxYThhNGZjZTgyNTQxOGM5ZmMwYjU5ZmE1N2RjNzZlLmJpbmRQb3B1cChwb3B1cF8wMzU3ZjY2NTg1MzY0NjExOTEzYTNlMWJmYzY2NGU3MCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzQxOTYwNzA5ZDljNjQyNjZhZTFjNzI5YWZhNjJhN2ZjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTkyNTI3NywtMS4xMzY3OTU1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZGMwN2YxNGIxOTZjNDcyNTk3YzI1N2UyMGY5MGQ4OWUgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNDE5NjA3MDlkOWM2NDI2NmFlMWM3MjlhZmE2MmE3ZmMuc2V0SWNvbihpY29uX2RjMDdmMTRiMTk2YzQ3MjU5N2MyNTdlMjBmOTBkODllKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWFlMmU2MjhjNzA3NGZjMThjMjQyOTRkOWI5YmRhZjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjI2N2FlYjdiZDIzNDllMWJlZDQzMWUzYjJmYTI5YzkgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzYyNjdhZWI3YmQyMzQ5ZTFiZWQ0MzFlM2IyZmEyOWM5IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBTaWVycmEgZGUgQ2FycmFzY295IChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85YWUyZTYyOGM3MDc0ZmMxOGMyNDI5NGQ5YjliZGFmNi5zZXRDb250ZW50KGh0bWxfNjI2N2FlYjdiZDIzNDllMWJlZDQzMWUzYjJmYTI5YzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80MTk2MDcwOWQ5YzY0MjY2YWUxYzcyOWFmYTYyYTdmYy5iaW5kUG9wdXAocG9wdXBfOWFlMmU2MjhjNzA3NGZjMThjMjQyOTRkOWI5YmRhZjYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIG11bHRpX3BvbHlfbGluZV83OGNjMGRjZmM4MjA0ZDg4ODJmMjc4MWE2NDcxOTcwMiA9IEwubXVsdGlQb2x5bGluZSgKICAgICAgICAgICAgICAgICAgICBbW1szNy45OTM3ODkwNTkyNTE5NSwgLTEuMTM3MTUwMjEzODE4NzI4XSwgWzM3Ljk5MzU3Mjk3Mzc4ODEzLCAtMS4xMzcwNzYxMTc3OTQ2NjNdXSwgW1szNy45OTM1NzI5NzM3ODgxMywgLTEuMTM3MDc2MTE3Nzk0NjYzXSwgWzM3Ljk5MzM2NDg1MTEzMjMyLCAtMS4xMzcwMTkxMjA4NTMwOTddXSwgW1szNy45OTMzNjQ4NTExMzIzMiwgLTEuMTM3MDE5MTIwODUzMDk3XSwgWzM3Ljk5MjQ4NTg0MDk0NjUyLCAtMS4xMzY3NTc4NTY5MzExNTVdXSwgW1szNy45OTI0ODU4NDA5NDY1MiwgLTEuMTM2NzU3ODU2OTMxMTU1XSwgWzM3Ljk5MjM4MjE1NjgwNDI3LCAtMS4xMzY3MjY5Mjc3MDg0NTJdXSwgW1szNy45OTIzODIxNTY4MDQyNywgLTEuMTM2NzI2OTI3NzA4NDUyXSwgWzM3Ljk5MjMyMDI5ODM1ODg2LCAtMS4xMzY3MDY3MjczMjE4MDhdXSwgW1szNy45OTIzMjAyOTgzNTg4NiwgLTEuMTM2NzA2NzI3MzIxODA4XSwgWzM3Ljk5MjA5MjQ3ODIzMDYsIC0xLjEzNjY3NjIxNzE5NDI2NF1dLCBbWzM3Ljk5MjA5MjQ3ODIzMDYsIC0xLjEzNjY3NjIxNzE5NDI2NF0sIFszNy45OTE4NjY5MjEyMTYyLCAtMS4xMzY4MDA1MjA4MTgzMjZdXV0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodDogMiwKICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMC41LAogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNC5hZGRMYXllcihtdWx0aV9wb2x5X2xpbmVfNzhjYzBkY2ZjODIwNGQ4ODgyZjI3ODFhNjQ3MTk3MDIpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lNDk3YzExNDhhMTc0NjYzYTM2ZGZiZTA3Yzk4MDAyNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NWYyYTRlOWU5NDM0YmQ3ODBlZDU2YmU3YTlmODlkNCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNDVmMmE0ZTllOTQzNGJkNzgwZWQ1NmJlN2E5Zjg5ZDQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIFNpZXJyYSBkZSBDYXJyYXNjb3kgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U0OTdjMTE0OGExNzQ2NjNhMzZkZmJlMDdjOTgwMDI2LnNldENvbnRlbnQoaHRtbF80NWYyYTRlOWU5NDM0YmQ3ODBlZDU2YmU3YTlmODlkNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbXVsdGlfcG9seV9saW5lXzc4Y2MwZGNmYzgyMDRkODg4MmYyNzgxYTY0NzE5NzAyLmJpbmRQb3B1cChwb3B1cF9lNDk3YzExNDhhMTc0NjYzYTM2ZGZiZTA3Yzk4MDAyNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzYzZjU0ZGY2MmFjZjQxODQ4NzljOWE2ZWI1Y2E0YmRjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTkyNDY5NSwtMS4xMjc0Mjk0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYWYzODhlYjIyYTg0NGNmYTkyZjIwNWFmOTlmMWJmZGUgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNjNmNTRkZjYyYWNmNDE4NDg3OWM5YTZlYjVjYTRiZGMuc2V0SWNvbihpY29uX2FmMzg4ZWIyMmE4NDRjZmE5MmYyMDVhZjk5ZjFiZmRlKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWM5MmE3ZmY4NDkwNDE0ZmI2NTg5OGNkODFiNDk1NDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDc2MDg3MGRlNTM5NDdlZDhlNDQwZDJjMzAzNDY0ODcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzA3NjA4NzBkZTUzOTQ3ZWQ4ZTQ0MGQyYzMwMzQ2NDg3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBDb3JyZWdpZG9yIFB1ZXlvIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lYzkyYTdmZjg0OTA0MTRmYjY1ODk4Y2Q4MWI0OTU0NC5zZXRDb250ZW50KGh0bWxfMDc2MDg3MGRlNTM5NDdlZDhlNDQwZDJjMzAzNDY0ODcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82M2Y1NGRmNjJhY2Y0MTg0ODc5YzlhNmViNWNhNGJkYy5iaW5kUG9wdXAocG9wdXBfZWM5MmE3ZmY4NDkwNDE0ZmI2NTg5OGNkODFiNDk1NDQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIG11bHRpX3BvbHlfbGluZV8wOThiYzI3YWI0YmI0ZGZmODMxZTcyZjI2ZTFkYTcyNCA9IEwubXVsdGlQb2x5bGluZSgKICAgICAgICAgICAgICAgICAgICBbW1szNy45OTIxMDIyODUwNTczMTQsIC0xLjEyNzQ1MTM0NjAxODU3NF0sIFszNy45OTI2Njk5OTEzNTkyMzYsIC0xLjEyNzM4Mjc4MjA1MDYzMV1dLCBbWzM3Ljk5MjY2OTk5MTM1OTIzNiwgLTEuMTI3MzgyNzgyMDUwNjMxXSwgWzM3Ljk5MzE2Mjg0NzI2NTg2NCwgLTEuMTI3MzI0ODYzMDk5Njg3XV1dLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ6IDIsCiAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNSwKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQuYWRkTGF5ZXIobXVsdGlfcG9seV9saW5lXzA5OGJjMjdhYjRiYjRkZmY4MzFlNzJmMjZlMWRhNzI0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2JhZTk2ZjA1ZTg5NGVhZDgyN2E5ZTJmYzljMTAzYzMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWY1Y2YyNjEzZmRkNGYwYzk5YTZlNzhmZDYyZWZlYzIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzlmNWNmMjYxM2ZkZDRmMGM5OWE2ZTc4ZmQ2MmVmZWMyIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBDb3JyZWdpZG9yIFB1ZXlvIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYmFlOTZmMDVlODk0ZWFkODI3YTllMmZjOWMxMDNjMy5zZXRDb250ZW50KGh0bWxfOWY1Y2YyNjEzZmRkNGYwYzk5YTZlNzhmZDYyZWZlYzIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG11bHRpX3BvbHlfbGluZV8wOThiYzI3YWI0YmI0ZGZmODMxZTcyZjI2ZTFkYTcyNC5iaW5kUG9wdXAocG9wdXBfM2JhZTk2ZjA1ZTg5NGVhZDgyN2E5ZTJmYzljMTAzYzMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80ZTUwYzU0MjAzMGQ0NDE2YmU3MzNhZmE3MTcyMjlmNCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk5MjUzNDYsLTEuMTI0ODE1OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzA3ZGMwYjVhMjJmNTRhZDFhZmY0MzhmMjk0ZThiOWZhID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzRlNTBjNTQyMDMwZDQ0MTZiZTczM2FmYTcxNzIyOWY0LnNldEljb24oaWNvbl8wN2RjMGI1YTIyZjU0YWQxYWZmNDM4ZjI5NGU4YjlmYSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFlZmRjODgyNThlYTRlOTc5MmQ5ZmUyNDU4NDg2YmFlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I1YTI4ZWVhMmE1MzRmOGViMzBhNmYyM2M2MmNjZDAxID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9iNWEyOGVlYTJhNTM0ZjhlYjMwYTZmMjNjNjJjY2QwMSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgZGUgbGEgRmxvdGEgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFlZmRjODgyNThlYTRlOTc5MmQ5ZmUyNDU4NDg2YmFlLnNldENvbnRlbnQoaHRtbF9iNWEyOGVlYTJhNTM0ZjhlYjMwYTZmMjNjNjJjY2QwMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzRlNTBjNTQyMDMwZDQ0MTZiZTczM2FmYTcxNzIyOWY0LmJpbmRQb3B1cChwb3B1cF8xZWZkYzg4MjU4ZWE0ZTk3OTJkOWZlMjQ1ODQ4NmJhZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgbXVsdGlfcG9seV9saW5lX2JlNmVjOWJiYWRlZTQ4Nzg5MWU4YTEzODBjOTMyZDU5ID0gTC5tdWx0aVBvbHlsaW5lKAogICAgICAgICAgICAgICAgICAgIFtbWzM3Ljk5MzA0MjA2NDA0MTEzNCwgLTEuMTI0MTUxNTU4Mzc3MjM1XSwgWzM3Ljk5MzIyOTY1MTAzNDEzNSwgLTEuMTIzNzEwNDE4ODEzMjA0XV0sIFtbMzcuOTkzMjI5NjUxMDM0MTM1LCAtMS4xMjM3MTA0MTg4MTMyMDRdLCBbMzcuOTkzMzg1ODg5NzA5MjksIC0xLjEyMzM0MzAzOTk5NzExXV0sIFtbMzcuOTkzMzg1ODg5NzA5MjksIC0xLjEyMzM0MzAzOTk5NzExXSwgWzM3Ljk5MzU2MDQ4NDc1MjQxLCAtMS4xMjI5MzI2NjIwMTc3NDZdXSwgW1szNy45OTM1NjA0ODQ3NTI0MSwgLTEuMTIyOTMyNjYyMDE3NzQ2XSwgWzM3Ljk5MzY5OTU0MDUyNjA1LCAtMS4xMjI2MDU1MTYzMzY4NzZdXV0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodDogMiwKICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMC41LAogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNC5hZGRMYXllcihtdWx0aV9wb2x5X2xpbmVfYmU2ZWM5YmJhZGVlNDg3ODkxZThhMTM4MGM5MzJkNTkpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lYzBkNGEwNjEzZGM0NzI5YjhiZDZlODE5ZjE5NzEyMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xZTg4N2IxNTRjYWQ0Yjg2YTQwYjdjYWI0OGQ3YjVhYiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMWU4ODdiMTU0Y2FkNGI4NmE0MGI3Y2FiNDhkN2I1YWIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIGRlIGxhIEZsb3RhIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lYzBkNGEwNjEzZGM0NzI5YjhiZDZlODE5ZjE5NzEyMy5zZXRDb250ZW50KGh0bWxfMWU4ODdiMTU0Y2FkNGI4NmE0MGI3Y2FiNDhkN2I1YWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG11bHRpX3BvbHlfbGluZV9iZTZlYzliYmFkZWU0ODc4OTFlOGExMzgwYzkzMmQ1OS5iaW5kUG9wdXAocG9wdXBfZWMwZDRhMDYxM2RjNDcyOWI4YmQ2ZTgxOWYxOTcxMjMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lMmQ4ZWI0ZDUwYzg0ZTcxOGZlZDYzZjc3YjRiODIxNyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4NjgzNTUsLTEuMTMzMzg2MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzhkMmMyN2VkNGU1YzRlYzFhYmIxOTM1ZDYzNTU5OGMxID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2UyZDhlYjRkNTBjODRlNzE4ZmVkNjNmNzdiNGI4MjE3LnNldEljb24oaWNvbl84ZDJjMjdlZDRlNWM0ZWMxYWJiMTkzNWQ2MzU1OThjMSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MyNmM1OGU3YWYyYzQ0ODBiYmVhMmYwMjk2ZGI5NzY0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IwMzA4MjYyMTZjOTQ4NjJiZWI3MzVjYTE1OGU4MzVmID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9iMDMwODI2MjE2Yzk0ODYyYmViNzM1Y2ExNThlODM1ZiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgQ29uZGUgZGUgUm9jaGUgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MyNmM1OGU3YWYyYzQ0ODBiYmVhMmYwMjk2ZGI5NzY0LnNldENvbnRlbnQoaHRtbF9iMDMwODI2MjE2Yzk0ODYyYmViNzM1Y2ExNThlODM1Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2UyZDhlYjRkNTBjODRlNzE4ZmVkNjNmNzdiNGI4MjE3LmJpbmRQb3B1cChwb3B1cF9jMjZjNThlN2FmMmM0NDgwYmJlYTJmMDI5NmRiOTc2NCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgbXVsdGlfcG9seV9saW5lXzgzYzEyMmVlZmM3MzQxNzRiYzdjMTQ4MDQwYmUwM2ZhID0gTC5tdWx0aVBvbHlsaW5lKAogICAgICAgICAgICAgICAgICAgIFtbWzM3Ljk4NjE2NzU2MjMzNDM0NCwgLTEuMTMzMjY1OTU2MDY5MDY3XSwgWzM3Ljk4Njg0MTcxODgwNjU2NiwgLTEuMTMzMzU4NDA4NDYxMDc4XV1dLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ6IDIsCiAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNSwKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQuYWRkTGF5ZXIobXVsdGlfcG9seV9saW5lXzgzYzEyMmVlZmM3MzQxNzRiYzdjMTQ4MDQwYmUwM2ZhKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzZiMGRiOGU1M2QxNDAxMTg2OWM5OTYwNWI3ZjIxNmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDQ4YTliNTM1MDA3NGZhYTk5Zjk1MjIzMzI5MGJhZDMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2Q0OGE5YjUzNTAwNzRmYWE5OWY5NTIyMzMyOTBiYWQzIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBDb25kZSBkZSBSb2NoZSAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzZiMGRiOGU1M2QxNDAxMTg2OWM5OTYwNWI3ZjIxNmUuc2V0Q29udGVudChodG1sX2Q0OGE5YjUzNTAwNzRmYWE5OWY5NTIyMzMyOTBiYWQzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtdWx0aV9wb2x5X2xpbmVfODNjMTIyZWVmYzczNDE3NGJjN2MxNDgwNDBiZTAzZmEuYmluZFBvcHVwKHBvcHVwXzc2YjBkYjhlNTNkMTQwMTE4NjljOTk2MDViN2YyMTZlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjc5MWU2ZDJmOGIzNDlhMzk1YTlkOWZlMDY5Mzk5YmIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45OTIyMzk5LC0xLjEzMDY1NDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9kMTBlNjA4ODg2NjA0YmUzYTcyOTc3N2Q0OWRjMTY4OCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8yNzkxZTZkMmY4YjM0OWEzOTVhOWQ5ZmUwNjkzOTliYi5zZXRJY29uKGljb25fZDEwZTYwODg4NjYwNGJlM2E3Mjk3NzdkNDlkYzE2ODgpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NThkYTEzZDI3NGE0Zjc1YjMxZjQ0NWE0MTEyYzc3ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84M2EzMWU5YTBjMDQ0MTI0ODMzYWVhYjJlZWIxMzg3NCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfODNhMzFlOWEwYzA0NDEyNDgzM2FlYWIyZWViMTM4NzQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIGNhbGxlIEp1YW4gR3VlcnJlcm8gUnVpeiAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjU4ZGExM2QyNzRhNGY3NWIzMWY0NDVhNDExMmM3N2Quc2V0Q29udGVudChodG1sXzgzYTMxZTlhMGMwNDQxMjQ4MzNhZWFiMmVlYjEzODc0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjc5MWU2ZDJmOGIzNDlhMzk1YTlkOWZlMDY5Mzk5YmIuYmluZFBvcHVwKHBvcHVwXzY1OGRhMTNkMjc0YTRmNzViMzFmNDQ1YTQxMTJjNzdkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBtdWx0aV9wb2x5X2xpbmVfMjA5MWExNTdjNWI1NDYwZWJiODNhZTNhMjI0ODUzMGQgPSBMLm11bHRpUG9seWxpbmUoCiAgICAgICAgICAgICAgICAgICAgW1tbMzcuOTkyNjc3MjgzNjE1MDIsIC0xLjEzODEyMDMzNTI5MjAyOV0sIFszNy45OTI4MDI5MjgzNDM1OSwgLTEuMTM3NDUzMTM1Nzk5NDA0XV1dLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ6IDIsCiAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNSwKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQuYWRkTGF5ZXIobXVsdGlfcG9seV9saW5lXzIwOTFhMTU3YzViNTQ2MGViYjgzYWUzYTIyNDg1MzBkKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjY2Yjc4YjVjYzllNGU4YTlhZjE3ZGQzM2NjOWQ0Y2QgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmIzM2E5YzcwNGE4NDViMmJiZDAyNWMxNzcxYjg3YzIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzJiMzNhOWM3MDRhODQ1YjJiYmQwMjVjMTc3MWI4N2MyIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBjYWxsZSBKdWFuIEd1ZXJyZXJvIFJ1aXogKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI2NmI3OGI1Y2M5ZTRlOGE5YWYxN2RkMzNjYzlkNGNkLnNldENvbnRlbnQoaHRtbF8yYjMzYTljNzA0YTg0NWIyYmJkMDI1YzE3NzFiODdjMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbXVsdGlfcG9seV9saW5lXzIwOTFhMTU3YzViNTQ2MGViYjgzYWUzYTIyNDg1MzBkLmJpbmRQb3B1cChwb3B1cF8yNjZiNzhiNWNjOWU0ZThhOWFmMTdkZDMzY2M5ZDRjZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzQyY2E3MmI5MWJmZTRiZTFhMzkwNGFhMzU2NWVmMWU2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTg2ODIwNCwtMS4xMzQwMjU4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNTFiODg3Mzg5ODljNGYwN2FhOTY5YmRkODFkYzBmNDkgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNDJjYTcyYjkxYmZlNGJlMWEzOTA0YWEzNTY1ZWYxZTYuc2V0SWNvbihpY29uXzUxYjg4NzM4OTg5YzRmMDdhYTk2OWJkZDgxZGMwZjQ5KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjljMzk0OTFmNjkyNDNiZmE2YmMyNDAxNTIwOTM0ZTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTgxNWMwNjZjNjMzNDk4MmFhOWY5NWE5M2I1YmZmNGUgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzk4MTVjMDY2YzYzMzQ5ODJhYTlmOTVhOTNiNWJmZjRlIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBMYXJlZG8gKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y5YzM5NDkxZjY5MjQzYmZhNmJjMjQwMTUyMDkzNGUzLnNldENvbnRlbnQoaHRtbF85ODE1YzA2NmM2MzM0OTgyYWE5Zjk1YTkzYjViZmY0ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQyY2E3MmI5MWJmZTRiZTFhMzkwNGFhMzU2NWVmMWU2LmJpbmRQb3B1cChwb3B1cF9mOWMzOTQ5MWY2OTI0M2JmYTZiYzI0MDE1MjA5MzRlMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgbXVsdGlfcG9seV9saW5lXzE2NmY2NzQyN2ZhOTQzMWNiYWI1NmViODI2YzZlOGJhID0gTC5tdWx0aVBvbHlsaW5lKAogICAgICAgICAgICAgICAgICAgIFtbWzM3Ljk4Njg0MTcxODgwNjU2NiwgLTEuMTMzMzU4NDA4NDYxMDc4XSwgWzM3Ljk4Njc5MTU5NTAyNTYxLCAtMS4xMzM3ODgxNDg2MzY3OTZdXSwgW1szNy45ODY3OTE1OTUwMjU2MSwgLTEuMTMzNzg4MTQ4NjM2Nzk2XSwgWzM3Ljk4NjgyOTM5NzQwODkxLCAtMS4xMzQyNTMyNjA0NDM4OTldXV0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodDogMiwKICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMC41LAogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNC5hZGRMYXllcihtdWx0aV9wb2x5X2xpbmVfMTY2ZjY3NDI3ZmE5NDMxY2JhYjU2ZWI4MjZjNmU4YmEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMmZiNmZiNWUyZTE0NzA4YWMzMDY0N2E5ZjUwNmRjNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ZjczZDM3M2E3MDM0ODlhYWQ1YTAzOGViYzkxMDdjNSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNWY3M2QzNzNhNzAzNDg5YWFkNWEwMzhlYmM5MTA3YzUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIExhcmVkbyAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDJmYjZmYjVlMmUxNDcwOGFjMzA2NDdhOWY1MDZkYzcuc2V0Q29udGVudChodG1sXzVmNzNkMzczYTcwMzQ4OWFhZDVhMDM4ZWJjOTEwN2M1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtdWx0aV9wb2x5X2xpbmVfMTY2ZjY3NDI3ZmE5NDMxY2JhYjU2ZWI4MjZjNmU4YmEuYmluZFBvcHVwKHBvcHVwX2QyZmI2ZmI1ZTJlMTQ3MDhhYzMwNjQ3YTlmNTA2ZGM3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZGUyYjZiNTFkZTk1NGE3Y2JmOGMxZjE4M2RjOTM3ZTIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODg1MzExLC0xLjEzMjUyMjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9mZjYwNjA1N2I5MDA0YWM2YTA0MzE5YjI3MDFmNTJkNyA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9kZTJiNmI1MWRlOTU0YTdjYmY4YzFmMTgzZGM5MzdlMi5zZXRJY29uKGljb25fZmY2MDYwNTdiOTAwNGFjNmEwNDMxOWIyNzAxZjUyZDcpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hMjFlY2UwNjYwNDU0MDAyYjE5N2Y4OTA0NGZmZTc0MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNzZmOTEyNDBmMzQ0ZjI3OWQ5OTZiN2U1ZDRlZDAxOSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYjc2ZjkxMjQwZjM0NGYyNzlkOTk2YjdlNWQ0ZWQwMTkiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIGNhbGxlIEFsbXVkZW5hIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hMjFlY2UwNjYwNDU0MDAyYjE5N2Y4OTA0NGZmZTc0Mi5zZXRDb250ZW50KGh0bWxfYjc2ZjkxMjQwZjM0NGYyNzlkOTk2YjdlNWQ0ZWQwMTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kZTJiNmI1MWRlOTU0YTdjYmY4YzFmMTgzZGM5MzdlMi5iaW5kUG9wdXAocG9wdXBfYTIxZWNlMDY2MDQ1NDAwMmIxOTdmODkwNDRmZmU3NDIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIG11bHRpX3BvbHlfbGluZV8xMmE1YWU0MDBlMGM0NzRjYmM1NGQxNjkxNTcxNzc2YiA9IEwubXVsdGlQb2x5bGluZSgKICAgICAgICAgICAgICAgICAgICBbW1szNy45ODg1NDgyNzQyOTI2OSwgLTEuMTMyMTc0MTI5MzYxNjg3XSwgWzM3Ljk4ODU0MzU4MDQyNjkyLCAtMS4xMzIyMzcyNDUwOTI1OTddXSwgW1szNy45ODg1NDM1ODA0MjY5MiwgLTEuMTMyMjM3MjQ1MDkyNTk3XSwgWzM3Ljk4ODU0NTM0MDYyNjU5LCAtMS4xMzIyNjcwMDA4NDg4NTZdXSwgW1szNy45ODg1NDUzNDA2MjY1OSwgLTEuMTMyMjY3MDAwODQ4ODU2XSwgWzM3Ljk4ODUzNTUzMzc5OTg3NiwgLTEuMTMyNzg0MzMxOTEyNzE3XV1dLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ6IDIsCiAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNSwKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQuYWRkTGF5ZXIobXVsdGlfcG9seV9saW5lXzEyYTVhZTQwMGUwYzQ3NGNiYzU0ZDE2OTE1NzE3NzZiKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGU2ODk4ODRiZDc2NGM4MjgxMjFlZWZhN2VmOTRkNzUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDAzYTBjYTYyNTgzNGMwOGE0NWRlOGFiZGZlMmFiNDkgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2QwM2EwY2E2MjU4MzRjMDhhNDVkZThhYmRmZTJhYjQ5IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBjYWxsZSBBbG11ZGVuYSAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGU2ODk4ODRiZDc2NGM4MjgxMjFlZWZhN2VmOTRkNzUuc2V0Q29udGVudChodG1sX2QwM2EwY2E2MjU4MzRjMDhhNDVkZThhYmRmZTJhYjQ5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtdWx0aV9wb2x5X2xpbmVfMTJhNWFlNDAwZTBjNDc0Y2JjNTRkMTY5MTU3MTc3NmIuYmluZFBvcHVwKHBvcHVwXzRlNjg5ODg0YmQ3NjRjODI4MTIxZWVmYTdlZjk0ZDc1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMzk5ZjJhMjhmNDI2NGYxNTk2MTIxYTc1OWI5OTVmMjEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODY0MDgyLC0xLjEzMTY5MjNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9hZTI3Y2FiYmMwOWI0N2Q3YWViYTVkY2QzYmM4MTcyOSA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8zOTlmMmEyOGY0MjY0ZjE1OTYxMjFhNzU5Yjk5NWYyMS5zZXRJY29uKGljb25fYWUyN2NhYmJjMDliNDdkN2FlYmE1ZGNkM2JjODE3MjkpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xYzk3NzRkODVjMzA0NTg4ODg2NGQ1YTIzY2NhZjVkMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MDc0NTE0NGY2ZDk0YTUxODVlZmU0NTgzMTQ4ZmYzMyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfOTA3NDUxNDRmNmQ5NGE1MTg1ZWZlNDU4MzE0OGZmMzMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIEFjdG9yIEZlcm5hbmRvIERpYXogZGUgTWVuZG96YSAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWM5Nzc0ZDg1YzMwNDU4ODg4NjRkNWEyM2NjYWY1ZDEuc2V0Q29udGVudChodG1sXzkwNzQ1MTQ0ZjZkOTRhNTE4NWVmZTQ1ODMxNDhmZjMzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzk5ZjJhMjhmNDI2NGYxNTk2MTIxYTc1OWI5OTVmMjEuYmluZFBvcHVwKHBvcHVwXzFjOTc3NGQ4NWMzMDQ1ODg4ODY0ZDVhMjNjY2FmNWQxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBtdWx0aV9wb2x5X2xpbmVfMjkzMTE3OTAzYjM5NDQxYWI0MjZkYWZkM2YzMWQ3ZTQgPSBMLm11bHRpUG9seWxpbmUoCiAgICAgICAgICAgICAgICAgICAgW1tbMzcuOTg2NDE0MzI1NTYzNzcsIC0xLjEzMTUwNTc1NjQwMjY0Nl0sIFszNy45ODY0MDUwMjE2NTEyNDQsIC0xLjEzMjAyMzQyMjc0MjYzNF1dLCBbWzM3Ljk4NjQwNTAyMTY1MTI0NCwgLTEuMTMyMDIzNDIyNzQyNjM0XSwgWzM3Ljk4NjM3ODI4MzM4MDEwNSwgLTEuMTMyMTAyMzgwMjcwNTM4XV0sIFtbMzcuOTg2Mzc4MjgzMzgwMTA1LCAtMS4xMzIxMDIzODAyNzA1MzhdLCBbMzcuOTg2Mzc0NDI3NzA0NjUsIC0xLjEzMjE0ODE0NTQ2MTg1NV1dXSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OiAyLAogICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0LmFkZExheWVyKG11bHRpX3BvbHlfbGluZV8yOTMxMTc5MDNiMzk0NDFhYjQyNmRhZmQzZjMxZDdlNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NjNmNjNTVmZGVkZjQ5ZjhhOGZkOTIxNGIyNDBhMDIxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU3MWY2ODYxYjgyZDRkYmU5YWQyMjRiZmZhOTgyMjIxID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF81NzFmNjg2MWI4MmQ0ZGJlOWFkMjI0YmZmYTk4MjIyMSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgQWN0b3IgRmVybmFuZG8gRGlheiBkZSBNZW5kb3phIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jYzZjYzU1ZmRlZGY0OWY4YThmZDkyMTRiMjQwYTAyMS5zZXRDb250ZW50KGh0bWxfNTcxZjY4NjFiODJkNGRiZTlhZDIyNGJmZmE5ODIyMjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG11bHRpX3BvbHlfbGluZV8yOTMxMTc5MDNiMzk0NDFhYjQyNmRhZmQzZjMxZDdlNC5iaW5kUG9wdXAocG9wdXBfY2M2Y2M1NWZkZWRmNDlmOGE4ZmQ5MjE0YjI0MGEwMjEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iZGIwNjg0ZDVlMzk0MjU2YWM0MjE4Nzk1ODdmMjk2ZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4NzM0MDksLTEuMTMwMjMyOF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzkyMmUyZjIwYWY0NDQ1Y2Y4MzI2NDcxZTQxZGIyMTVjID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2JkYjA2ODRkNWUzOTQyNTZhYzQyMTg3OTU4N2YyOTZkLnNldEljb24oaWNvbl85MjJlMmYyMGFmNDQ0NWNmODMyNjQ3MWU0MWRiMjE1Yyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ2OTgyZDUwOGE1YTRmM2JiZTI1Njk1YmE5N2ZkNWYxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRiOTY4ZmRjNDhhYTQ5N2FhN2ExMjA5OGNhODAyNzQzID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF80Yjk2OGZkYzQ4YWE0OTdhYTdhMTIwOThjYTgwMjc0MyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgRWNoZWdhcmF5IChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80Njk4MmQ1MDhhNWE0ZjNiYmUyNTY5NWJhOTdmZDVmMS5zZXRDb250ZW50KGh0bWxfNGI5NjhmZGM0OGFhNDk3YWE3YTEyMDk4Y2E4MDI3NDMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iZGIwNjg0ZDVlMzk0MjU2YWM0MjE4Nzk1ODdmMjk2ZC5iaW5kUG9wdXAocG9wdXBfNDY5ODJkNTA4YTVhNGYzYmJlMjU2OTViYTk3ZmQ1ZjEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIG11bHRpX3BvbHlfbGluZV82ZjE0NzZiNzk5YTA0OTRiYjBmYjY0YzgzZWZkNzhkMyA9IEwubXVsdGlQb2x5bGluZSgKICAgICAgICAgICAgICAgICAgICBbW1szNy45ODcwNDQ5Nzk5NTg1NCwgLTEuMTMwMjU1OTMwODIwNDI1XSwgWzM3Ljk4NzE1NjYyNjkwODgxLCAtMS4xMzAyNDc1NDg5MTcyNTRdXSwgW1szNy45ODcxNTY2MjY5MDg4MSwgLTEuMTMwMjQ3NTQ4OTE3MjU0XSwgWzM3Ljk4NzMyODYyMzU2MTkyLCAtMS4xMzAyMzg2NjQwOTk4OTJdXSwgW1szNy45ODczMjg2MjM1NjE5MiwgLTEuMTMwMjM4NjY0MDk5ODkyXSwgWzM3Ljk4NzM5ODM2MDk5NjM0LCAtMS4xMzAyMzU2NDY2MTQ3NV1dLCBbWzM3Ljk4NzM5ODM2MDk5NjM0LCAtMS4xMzAyMzU2NDY2MTQ3NV0sIFszNy45ODc3NjEwNDU5NDY2NSwgLTEuMTMwMjA3MDY0MzI0OTM1XV1dLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ6IDIsCiAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNSwKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQuYWRkTGF5ZXIobXVsdGlfcG9seV9saW5lXzZmMTQ3NmI3OTlhMDQ5NGJiMGZiNjRjODNlZmQ3OGQzKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZThhNzAzNmM1MjAxNDk5ZGJlYmFiYzNiNmE1MjAwNWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2QyY2Q0NDUyODM2NDYxZTg2NjhkYWRiYjRlZGJjZjYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzdkMmNkNDQ1MjgzNjQ2MWU4NjY4ZGFkYmI0ZWRiY2Y2IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBFY2hlZ2FyYXkgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U4YTcwMzZjNTIwMTQ5OWRiZWJhYmMzYjZhNTIwMDVkLnNldENvbnRlbnQoaHRtbF83ZDJjZDQ0NTI4MzY0NjFlODY2OGRhZGJiNGVkYmNmNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbXVsdGlfcG9seV9saW5lXzZmMTQ3NmI3OTlhMDQ5NGJiMGZiNjRjODNlZmQ3OGQzLmJpbmRQb3B1cChwb3B1cF9lOGE3MDM2YzUyMDE0OTlkYmViYWJjM2I2YTUyMDA1ZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzg3MWFiYWQ1M2VlMjQzNjE4MTBiOTA2MTBkMzRhMDI3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTg3Mjk0NSwtMS4xMzEwMTg4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZjNkMTlhOWJiNzRjNDZjYWI0ZWMwZWMwODk4Mjg5MjUgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfODcxYWJhZDUzZWUyNDM2MTgxMGI5MDYxMGQzNGEwMjcuc2V0SWNvbihpY29uX2YzZDE5YTliYjc0YzQ2Y2FiNGVjMGVjMDg5ODI4OTI1KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWM3MTcxNGI0Yzk5NDFiOThmZjVjNjZlNTBiYjhhMDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWFmNzc0ZWYyNWY4NGRiOWEwYzMyNDZjMmQ4NTUxZDEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzlhZjc3NGVmMjVmODRkYjlhMGMzMjQ2YzJkODU1MWQxIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBBbmdlbCBHdWlyYW8gKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzljNzE3MTRiNGM5OTQxYjk4ZmY1YzY2ZTUwYmI4YTAxLnNldENvbnRlbnQoaHRtbF85YWY3NzRlZjI1Zjg0ZGI5YTBjMzI0NmMyZDg1NTFkMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzg3MWFiYWQ1M2VlMjQzNjE4MTBiOTA2MTBkMzRhMDI3LmJpbmRQb3B1cChwb3B1cF85YzcxNzE0YjRjOTk0MWI5OGZmNWM2NmU1MGJiOGEwMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgbXVsdGlfcG9seV9saW5lX2FlOWE5MzA4ZmMyMzRlYjA4OWZlYTIwZjQzOWYzOWYyID0gTC5tdWx0aVBvbHlsaW5lKAogICAgICAgICAgICAgICAgICAgIFtbWzM3Ljk4NzgxNzEyMDg3ODg3LCAtMS4xMzEwNDc1MTc3NTYxNDRdLCBbMzcuOTg3MjI5Mjk4MDA5MzEsIC0xLjEzMTA1MTg3NjM0NTc5NF1dLCBbWzM3Ljk4NzIyOTI5ODAwOTMxLCAtMS4xMzEwNTE4NzYzNDU3OTRdLCBbMzcuOTg3MDU0MjgzODcxMDUsIC0xLjEzMTA1MDAzMjMyNzA5Nl1dXSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OiAyLAogICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0LmFkZExheWVyKG11bHRpX3BvbHlfbGluZV9hZTlhOTMwOGZjMjM0ZWIwODlmZWEyMGY0MzlmMzlmMik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdlZjBkZTVlYTFmYjQxY2RhMTUyMWM1OWQ1MDRlNWYzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNkNmMzNjM2MmYyYTQ0MjQ5MzUzNDhkNDA3Y2Y3YzVlID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8zZDZjMzYzNjJmMmE0NDI0OTM1MzQ4ZDQwN2NmN2M1ZSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgQW5nZWwgR3VpcmFvIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ZWYwZGU1ZWExZmI0MWNkYTE1MjFjNTlkNTA0ZTVmMy5zZXRDb250ZW50KGh0bWxfM2Q2YzM2MzYyZjJhNDQyNDkzNTM0OGQ0MDdjZjdjNWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG11bHRpX3BvbHlfbGluZV9hZTlhOTMwOGZjMjM0ZWIwODlmZWEyMGY0MzlmMzlmMi5iaW5kUG9wdXAocG9wdXBfN2VmMGRlNWVhMWZiNDFjZGExNTIxYzU5ZDUwNGU1ZjMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wMTE1ZDQzYTNhYjg0ODAzODBjOTM2ZGNhMDRkOTAyZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk5MzYyNTQsLTEuMTM4NTA3MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzliMzRhZTAzYmY5MzQ1MzliODQ2M2I1ZTRhMDkxOWU3ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzAxMTVkNDNhM2FiODQ4MDM4MGM5MzZkY2EwNGQ5MDJmLnNldEljb24oaWNvbl85YjM0YWUwM2JmOTM0NTM5Yjg0NjNiNWU0YTA5MTllNyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzllYmI3MzM0Y2MxZjRlYjg4YzA3Y2MzOWY5NWQ5ODJhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ3NGYwYjUwODM3ZDRiMDk5MDY4NTZhNjI3NTliZTRiID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF80NzRmMGI1MDgzN2Q0YjA5OTA2ODU2YTYyNzU5YmU0YiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgRGFsaWFzIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85ZWJiNzMzNGNjMWY0ZWI4OGMwN2NjMzlmOTVkOTgyYS5zZXRDb250ZW50KGh0bWxfNDc0ZjBiNTA4MzdkNGIwOTkwNjg1NmE2Mjc1OWJlNGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wMTE1ZDQzYTNhYjg0ODAzODBjOTM2ZGNhMDRkOTAyZi5iaW5kUG9wdXAocG9wdXBfOWViYjczMzRjYzFmNGViODhjMDdjYzM5Zjk1ZDk4MmEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIG11bHRpX3BvbHlfbGluZV8xY2NhYWQ2NWU5MzI0MGMzOTNjYWM3ZDgwMGYwZmU5MCA9IEwubXVsdGlQb2x5bGluZSgKICAgICAgICAgICAgICAgICAgICBbW1szNy45OTM0NTEzNTIzNzMwOCwgLTEuMTM4MDY4NDUxMzExMzY5XSwgWzM3Ljk5MzU4MjM2MTUxOTY4NSwgLTEuMTM4NDczMTI5NTk2NjA1XV0sIFtbMzcuOTkzNTgyMzYxNTE5Njg1LCAtMS4xMzg0NzMxMjk1OTY2MDVdLCBbMzcuOTkzNzc5NjcxNTIwNCwgLTEuMTM4OTUwMjI3NTI1MjQzXV1dLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ6IDIsCiAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNSwKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQuYWRkTGF5ZXIobXVsdGlfcG9seV9saW5lXzFjY2FhZDY1ZTkzMjQwYzM5M2NhYzdkODAwZjBmZTkwKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTdjNDQ0ZGZlY2Q4NDg2ODhjMWRhOWUyMmNiYzA4YjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTg2M2UwZDk2OTQ0NGEzOWFmMTM1YTUxZWY4NTQ3NzEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzE4NjNlMGQ5Njk0NDRhMzlhZjEzNWE1MWVmODU0NzcxIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBEYWxpYXMgKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U3YzQ0NGRmZWNkODQ4Njg4YzFkYTllMjJjYmMwOGIyLnNldENvbnRlbnQoaHRtbF8xODYzZTBkOTY5NDQ0YTM5YWYxMzVhNTFlZjg1NDc3MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbXVsdGlfcG9seV9saW5lXzFjY2FhZDY1ZTkzMjQwYzM5M2NhYzdkODAwZjBmZTkwLmJpbmRQb3B1cChwb3B1cF9lN2M0NDRkZmVjZDg0ODY4OGMxZGE5ZTIyY2JjMDhiMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzk1NjM0NDY2YjhiOTQ2Mzg4MjZkZjYzODBjNzIxNTAyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTk0NjU3NywtMS4xNDAyMjc3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZmU0NGNkOTQxYTg1NGNiY2IyODlkNGU3ZDQ0MDI3ODQgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfOTU2MzQ0NjZiOGI5NDYzODgyNmRmNjM4MGM3MjE1MDIuc2V0SWNvbihpY29uX2ZlNDRjZDk0MWE4NTRjYmNiMjg5ZDRlN2Q0NDAyNzg0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDFmODhjMjg0NmNjNDFjNmIzNzFkNzM0Y2MwODVmYzkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjk5OTY3OWQwMWRkNDE3NGI0ZjM4YmMwODI2ODQ1ZjEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2Y5OTk2NzlkMDFkZDQxNzRiNGYzOGJjMDgyNjg0NWYxIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBNb25jYXlvIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMWY4OGMyODQ2Y2M0MWM2YjM3MWQ3MzRjYzA4NWZjOS5zZXRDb250ZW50KGh0bWxfZjk5OTY3OWQwMWRkNDE3NGI0ZjM4YmMwODI2ODQ1ZjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85NTYzNDQ2NmI4Yjk0NjM4ODI2ZGY2MzgwYzcyMTUwMi5iaW5kUG9wdXAocG9wdXBfMDFmODhjMjg0NmNjNDFjNmIzNzFkNzM0Y2MwODVmYzkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIG11bHRpX3BvbHlfbGluZV9hNmQ3ZDI4NDM5ZTY0MjhiYTJlYTU5MDE4NjZiY2JhOCA9IEwubXVsdGlQb2x5bGluZSgKICAgICAgICAgICAgICAgICAgICBbW1szNy45OTQ2NDI1ODg0NTIxMSwgLTEuMTQwMjE4NDA5NDc1MzgxXSwgWzM3Ljk5NTMyODM5NTc2OTc3NSwgLTEuMTQwNTE0NjI1OTMzNTQ4XV1dLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ6IDIsCiAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNSwKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQuYWRkTGF5ZXIobXVsdGlfcG9seV9saW5lX2E2ZDdkMjg0MzllNjQyOGJhMmVhNTkwMTg2NmJjYmE4KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjkzYWZhMTFjZjQzNDk3NTlkZDQ2YmM4MzVkNDU5NzcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjE0OWRlNzg2MjI0NDdkZWFkNmIwNGM4NTcyZTdhMGIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2YxNDlkZTc4NjIyNDQ3ZGVhZDZiMDRjODU3MmU3YTBiIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBNb25jYXlvIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iOTNhZmExMWNmNDM0OTc1OWRkNDZiYzgzNWQ0NTk3Ny5zZXRDb250ZW50KGh0bWxfZjE0OWRlNzg2MjI0NDdkZWFkNmIwNGM4NTcyZTdhMGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG11bHRpX3BvbHlfbGluZV9hNmQ3ZDI4NDM5ZTY0MjhiYTJlYTU5MDE4NjZiY2JhOC5iaW5kUG9wdXAocG9wdXBfYjkzYWZhMTFjZjQzNDk3NTlkZDQ2YmM4MzVkNDU5NzcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iYTEwOGM0ZWQ2NTk0ZTU4OTFiZTg5YzdjMTUyYmI4YyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk5MTk5NTUsLTEuMTM4MDA2OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzJiMjNjMzVjNWQxYzRjYjhiMjBiMDZkOGQ2OTM0Zjc4ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2JhMTA4YzRlZDY1OTRlNTg5MWJlODljN2MxNTJiYjhjLnNldEljb24oaWNvbl8yYjIzYzM1YzVkMWM0Y2I4YjIwYjA2ZDhkNjkzNGY3OCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVlNTk3OWJiZTljOTQwZTlhOTJlNTE1M2U1MTkzNmQ2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YxZDI3NDczOGM4MTQ5NDRiZjc1YzRlZTQ5NzMxNTQ5ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9mMWQyNzQ3MzhjODE0OTQ0YmY3NWM0ZWU0OTczMTU0OSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgSmVyb25pbW8gR3VpamFycm8gKFpvbmEgMS0yLTMpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVlNTk3OWJiZTljOTQwZTlhOTJlNTE1M2U1MTkzNmQ2LnNldENvbnRlbnQoaHRtbF9mMWQyNzQ3MzhjODE0OTQ0YmY3NWM0ZWU0OTczMTU0OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2JhMTA4YzRlZDY1OTRlNTg5MWJlODljN2MxNTJiYjhjLmJpbmRQb3B1cChwb3B1cF81ZTU5NzliYmU5Yzk0MGU5YTkyZTUxNTNlNTE5MzZkNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgbXVsdGlfcG9seV9saW5lXzZlMTU1NzdjY2YyODRmYzZhMTA3NjFhNDdlMTNjNzZkID0gTC5tdWx0aVBvbHlsaW5lKAogICAgICAgICAgICAgICAgICAgIFtbWzM3Ljk5MTYxNjEzNDY3MzI1LCAtMS4xMzgxNjY3NzEwMzU2XSwgWzM3Ljk5MTk4ODQ1ODgxMjIxLCAtMS4xMzc5NzI1NjIzMzkwNThdXV0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodDogMiwKICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMC41LAogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNC5hZGRMYXllcihtdWx0aV9wb2x5X2xpbmVfNmUxNTU3N2NjZjI4NGZjNmExMDc2MWE0N2UxM2M3NmQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZDhlZmRhNDQ2MTI0ZDA1YWU5YWUwMzhmNGU0MWJhOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hMjUxYWNhMTEwZTY0YzE3YTc5NDkzOThjNjFmZWNlZCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYTI1MWFjYTExMGU2NGMxN2E3OTQ5Mzk4YzYxZmVjZWQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIEplcm9uaW1vIEd1aWphcnJvIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZDhlZmRhNDQ2MTI0ZDA1YWU5YWUwMzhmNGU0MWJhOC5zZXRDb250ZW50KGh0bWxfYTI1MWFjYTExMGU2NGMxN2E3OTQ5Mzk4YzYxZmVjZWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG11bHRpX3BvbHlfbGluZV82ZTE1NTc3Y2NmMjg0ZmM2YTEwNzYxYTQ3ZTEzYzc2ZC5iaW5kUG9wdXAocG9wdXBfNGQ4ZWZkYTQ0NjEyNGQwNWFlOWFlMDM4ZjRlNDFiYTgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zMjhkZDZjMDNjMDM0MzA1YjI3N2I4OTM5MDVkNDI3MyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4NjExNiwtMS4xMzQyOTQxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNmNmM2QyNDc3Y2E1NDE3NzhmNmRhNmFlYWE1MmY2N2YgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdyZWQnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMzI4ZGQ2YzAzYzAzNDMwNWIyNzdiODkzOTA1ZDQyNzMuc2V0SWNvbihpY29uXzZjZjNkMjQ3N2NhNTQxNzc4ZjZkYTZhZWFhNTJmNjdmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODRjZTJlYThiNTRkNDIxMTkzOWNjODQ1Y2UxOWUyMDMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODk2MTU0MzEyMzQ2NGNkOWE0MDk2OGUzNDhhODVmN2UgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzg5NjE1NDMxMjM0NjRjZDlhNDA5NjhlMzQ4YTg1ZjdlIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDdWVzdGEgZGUgbGEgTWFnZGFsZW5hIChab25hIDEtMi0zKTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NGNlMmVhOGI1NGQ0MjExOTM5Y2M4NDVjZTE5ZTIwMy5zZXRDb250ZW50KGh0bWxfODk2MTU0MzEyMzQ2NGNkOWE0MDk2OGUzNDhhODVmN2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zMjhkZDZjMDNjMDM0MzA1YjI3N2I4OTM5MDVkNDI3My5iaW5kUG9wdXAocG9wdXBfODRjZTJlYThiNTRkNDIxMTkzOWNjODQ1Y2UxOWUyMDMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIG11bHRpX3BvbHlfbGluZV9iYzcxMTgyNjZjZDk0M2JjYTA0ZWU2NjZmNWM4YTllYyA9IEwubXVsdGlQb2x5bGluZSgKICAgICAgICAgICAgICAgICAgICBbW1szNy45ODYxMDUwMzMzMzY2NSwgLTEuMTM0MjkzODI4ODU1MjQ5XSwgWzM3Ljk4NjI2ODczMTkwNTYyNSwgLTEuMTM0Mjc3OTAzMjM5MjIzXV0sIFtbMzcuOTg2MjY4NzMxOTA1NjI1LCAtMS4xMzQyNzc5MDMyMzkyMjNdLCBbMzcuOTg2ODI5Mzk3NDA4OTEsIC0xLjEzNDI1MzI2MDQ0Mzg5OV1dLCBbWzM3Ljk4NjgyOTM5NzQwODkxLCAtMS4xMzQyNTMyNjA0NDM4OTldLCBbMzcuOTg3MDg2NTU0MTk4MjcsIC0xLjEzNDI0OTc0MDA0NDU2N11dXSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncmVkJywKICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OiAyLAogICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0LmFkZExheWVyKG11bHRpX3BvbHlfbGluZV9iYzcxMTgyNjZjZDk0M2JjYTA0ZWU2NjZmNWM4YTllYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RiM2Q2ODUxZWZhZTQ0MzdhNDc2ZTBkYWY5NjQ4YzZlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VjMmY2ZWI1MGIzOTRkYzU5MmQ1ZTE2NDRhMjVmZDI2ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9lYzJmNmViNTBiMzk0ZGM1OTJkNWUxNjQ0YTI1ZmQyNiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ3Vlc3RhIGRlIGxhIE1hZ2RhbGVuYSAoWm9uYSAxLTItMyk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGIzZDY4NTFlZmFlNDQzN2E0NzZlMGRhZjk2NDhjNmUuc2V0Q29udGVudChodG1sX2VjMmY2ZWI1MGIzOTRkYzU5MmQ1ZTE2NDRhMjVmZDI2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtdWx0aV9wb2x5X2xpbmVfYmM3MTE4MjY2Y2Q5NDNiY2EwNGVlNjY2ZjVjOGE5ZWMuYmluZFBvcHVwKHBvcHVwX2RiM2Q2ODUxZWZhZTQ0MzdhNDc2ZTBkYWY5NjQ4YzZlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBtdWx0aV9wb2x5X2xpbmVfMmQyNGMxMmFmNmM4NGY4Njk0ZTk0ZDdkMzAzMDU5YzggPSBMLm11bHRpUG9seWxpbmUoCiAgICAgICAgICAgICAgICAgICAgW1tbMzcuOTk0OTg1NDkyMTEwOTQsIC0xLjE0MDM2NjUxNzcwNDQ2NDRdLCBbMzcuOTkxODY3MiwgLTEuMTM5NjI0N11dLCBbWzM3Ljk5MTg2NzIsIC0xLjEzOTYyNDddLCBbMzcuOTkwMDMzLCAtMS4xMzg2MjQ2XV0sIFtbMzcuOTkwMDMzLCAtMS4xMzg2MjQ2XSwgWzM3Ljk4NjExNiwgLTEuMTM0Mjk0MV1dLCBbWzM3Ljk4NjExNiwgLTEuMTM0Mjk0MV0sIFszNy45ODY0MDgyLCAtMS4xMzE2OTIzXV0sIFtbMzcuOTg2NDA4MiwgLTEuMTMxNjkyM10sIFszNy45ODc0NDk3NzgxMTMzNSwgLTEuMTI3NzA2MjM2NTIyODAzNF1dLCBbWzM3Ljk4NzQ0OTc3ODExMzM1LCAtMS4xMjc3MDYyMzY1MjI4MDM0XSwgWzM3Ljk4NzUyMzUsIC0xLjEyNzU0OTldXSwgW1szNy45ODc1MjM1LCAtMS4xMjc1NDk5XSwgWzM3Ljk4ODkzNTQzNDQwMDI5LCAtMS4xMjYyMjg5MjkyNTk3NTNdXSwgW1szNy45ODg5MzU0MzQ0MDAyOSwgLTEuMTI2MjI4OTI5MjU5NzUzXSwgWzM3Ljk5MzM3MDgxMTA4Mzg4LCAtMS4xMjMzNzg1NDEwOTYzMTQ5XV0sIFtbMzcuOTkzMzcwODExMDgzODgsIC0xLjEyMzM3ODU0MTA5NjMxNDldLCBbMzcuOTk2MzEzNiwgLTEuMTMwOTIxM11dLCBbWzM3Ljk5NjMxMzYsIC0xLjEzMDkyMTNdLCBbMzcuOTk0OTg1NDkyMTEwOTQsIC0xLjE0MDM2NjUxNzcwNDQ2NDRdXV0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodDogNSwKICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMSwKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQuYWRkTGF5ZXIobXVsdGlfcG9seV9saW5lXzJkMjRjMTJhZjZjODRmODY5NGU5NGQ3ZDMwMzA1OWM4KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjA3MzE1NGZiZTNlNDU1YmJhY2I2MDhmMjI0YTliYjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjU0NTQ3YzlkYTczNDkxY2FlYjAzMjA3YWRjOTBkNjEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2Y1NDU0N2M5ZGE3MzQ5MWNhZWIwMzIwN2FkYzkwZDYxIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBab25hIDEtMi0zPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIwNzMxNTRmYmUzZTQ1NWJiYWNiNjA4ZjIyNGE5YmI4LnNldENvbnRlbnQoaHRtbF9mNTQ1NDdjOWRhNzM0OTFjYWViMDMyMDdhZGM5MGQ2MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbXVsdGlfcG9seV9saW5lXzJkMjRjMTJhZjZjODRmODY5NGU5NGQ3ZDMwMzA1OWM4LmJpbmRQb3B1cChwb3B1cF8yMDczMTU0ZmJlM2U0NTViYmFjYjYwOGYyMjRhOWJiOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2ZkNjU3NjI0MjQyZjQ1Y2Y5NjdjYzdlZTAyOWUwNmVjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTgxMzkzNywtMS4xMzA2NTAyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZjcxYjA5YTEzZDE3NDVmZGJlMGJmZjJkNGZhZGM2YzQgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2ZkNjU3NjI0MjQyZjQ1Y2Y5NjdjYzdlZTAyOWUwNmVjLnNldEljb24oaWNvbl9mNzFiMDlhMTNkMTc0NWZkYmUwYmZmMmQ0ZmFkYzZjNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRmNWY4OTU2NTk3NTQzM2FhNDY3ODI2YzI1ZTE3OGI2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA0NzQwOWExOTc3MjQ5MDQ4OGM4YzUyOTc5OWU1YWFhID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8wNDc0MDlhMTk3NzI0OTA0ODhjOGM1Mjk3OTllNWFhYSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgSnVhbiBBbnRvbmlvIEhlcm5hbmRleiBkZWwgQWd1aWxhIChab25hIDUpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRmNWY4OTU2NTk3NTQzM2FhNDY3ODI2YzI1ZTE3OGI2LnNldENvbnRlbnQoaHRtbF8wNDc0MDlhMTk3NzI0OTA0ODhjOGM1Mjk3OTllNWFhYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2ZkNjU3NjI0MjQyZjQ1Y2Y5NjdjYzdlZTAyOWUwNmVjLmJpbmRQb3B1cChwb3B1cF80ZjVmODk1NjU5NzU0MzNhYTQ2NzgyNmMyNWUxNzhiNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgbXVsdGlfcG9seV9saW5lXzNjNTY4YWQ3ZGViMzQ4OThhODE4NzU3MDk5M2NlMWE4ID0gTC5tdWx0aVBvbHlsaW5lKAogICAgICAgICAgICAgICAgICAgIFtbWzM3Ljk4MTI4NTE4NzU1NDc5LCAtMS4xMzEzMjA4NTE2MTg2MjVdLCBbMzcuOTgxMjkxODkzMDc3MzIsIC0xLjEzMTI2MTE3MjQ2ODA0NF1dLCBbWzM3Ljk4MTI5MTg5MzA3NzMyLCAtMS4xMzEyNjExNzI0NjgwNDRdLCBbMzcuOTgxMzI2MDkxMjQyMjY2LCAtMS4xMzA5NTcwNzcwMjA4OTVdXSwgW1szNy45ODEzMjYwOTEyNDIyNjYsIC0xLjEzMDk1NzA3NzAyMDg5NV0sIFszNy45ODEzNDYzNzU0NDc5NywgLTEuMTMwODQyNzQ3ODYxNjA3XV1dLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OiAyLAogICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0LmFkZExheWVyKG11bHRpX3BvbHlfbGluZV8zYzU2OGFkN2RlYjM0ODk4YTgxODc1NzA5OTNjZTFhOCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFmODA0NGRjOTU0ODQzNGViYzM1MTFjZmUxN2MxMjY5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M0YWMyOTIzY2Q3NDRkYWY4NzkyYTI0NWY2YWRkOWE1ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9jNGFjMjkyM2NkNzQ0ZGFmODc5MmEyNDVmNmFkZDlhNSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgSnVhbiBBbnRvbmlvIEhlcm5hbmRleiBkZWwgQWd1aWxhIChab25hIDUpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFmODA0NGRjOTU0ODQzNGViYzM1MTFjZmUxN2MxMjY5LnNldENvbnRlbnQoaHRtbF9jNGFjMjkyM2NkNzQ0ZGFmODc5MmEyNDVmNmFkZDlhNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbXVsdGlfcG9seV9saW5lXzNjNTY4YWQ3ZGViMzQ4OThhODE4NzU3MDk5M2NlMWE4LmJpbmRQb3B1cChwb3B1cF8xZjgwNDRkYzk1NDg0MzRlYmMzNTExY2ZlMTdjMTI2OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzFhYWExYTQzNjQ0MDRiMGFhNWYzMGJhODEyOGQ4ZDAyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTc1MDQzMywtMS4xMzAwNDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl81MWQxNDM2OGRlYmE0MDQ3OGQ2NGFhY2Y0NTg1NGFiMCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMWFhYTFhNDM2NDQwNGIwYWE1ZjMwYmE4MTI4ZDhkMDIuc2V0SWNvbihpY29uXzUxZDE0MzY4ZGViYTQwNDc4ZDY0YWFjZjQ1ODU0YWIwKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODNkYTY2ZWRmNzE1NDg2Yjk1MmJjODIxZjczNTcyZmIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmJkMmE2YTc5MGU4NGQxN2E4ZTczOTJjOGY5ZDE3MzUgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzJiZDJhNmE3OTBlODRkMTdhOGU3MzkyYzhmOWQxNzM1IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBJbmR1c3RyaWEgKFpvbmEgNSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODNkYTY2ZWRmNzE1NDg2Yjk1MmJjODIxZjczNTcyZmIuc2V0Q29udGVudChodG1sXzJiZDJhNmE3OTBlODRkMTdhOGU3MzkyYzhmOWQxNzM1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMWFhYTFhNDM2NDQwNGIwYWE1ZjMwYmE4MTI4ZDhkMDIuYmluZFBvcHVwKHBvcHVwXzgzZGE2NmVkZjcxNTQ4NmI5NTJiYzgyMWY3MzU3MmZiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBtdWx0aV9wb2x5X2xpbmVfZTE5NDZlNjIzNWNkNGNkMmI1Yzg3MmMyNGU5MWY2OWIgPSBMLm11bHRpUG9seWxpbmUoCiAgICAgICAgICAgICAgICAgICAgW1tbMzcuOTc1MTg5MzY0NjUyODM0LCAtMS4xMzE1NzAyMTMyMzgwMzVdLCBbMzcuOTc1MTIzOTg1ODA4MDcsIC0xLjEzMTUwNzg1MTg3ODQzOV1dLCBbWzM3Ljk3NTEyMzk4NTgwODA3LCAtMS4xMzE1MDc4NTE4Nzg0MzldLCBbMzcuOTc1MDg4Mjc4OTAwNTYsIC0xLjEzMTM2NjYxNjgwOTk3XV0sIFtbMzcuOTc1MDg4Mjc4OTAwNTYsIC0xLjEzMTM2NjYxNjgwOTk3XSwgWzM3Ljk3NTA1OTE5MzY5NjUyNCwgLTEuMTMxMDY0NTMzMDE5NTgzXV0sIFtbMzcuOTc1MDU5MTkzNjk2NTI0LCAtMS4xMzEwNjQ1MzMwMTk1ODNdLCBbMzcuOTc0ODYwMzc0OTUzMjY2LCAtMS4xMjkyNjEwODI3MzI3NjhdXSwgW1szNy45NzQ4NjAzNzQ5NTMyNjYsIC0xLjEyOTI2MTA4MjczMjc2OF0sIFszNy45NzQ4NDUwMzYwNzA0NiwgLTEuMTI5MTA0MTczNTA1MzY4XV1dLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OiAyLAogICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0LmFkZExheWVyKG11bHRpX3BvbHlfbGluZV9lMTk0NmU2MjM1Y2Q0Y2QyYjVjODcyYzI0ZTkxZjY5Yik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y1NzRmNmY1N2Y0YTQ5M2JiZWQ3NGNhYTUyMGY4YzU5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUwYjVjYWY1MzExMDRjY2I5MDUyY2YyM2ZhNDlhYTVmID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF81MGI1Y2FmNTMxMTA0Y2NiOTA1MmNmMjNmYTQ5YWE1ZiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgSW5kdXN0cmlhIChab25hIDUpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y1NzRmNmY1N2Y0YTQ5M2JiZWQ3NGNhYTUyMGY4YzU5LnNldENvbnRlbnQoaHRtbF81MGI1Y2FmNTMxMTA0Y2NiOTA1MmNmMjNmYTQ5YWE1Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbXVsdGlfcG9seV9saW5lX2UxOTQ2ZTYyMzVjZDRjZDJiNWM4NzJjMjRlOTFmNjliLmJpbmRQb3B1cChwb3B1cF9mNTc0ZjZmNTdmNGE0OTNiYmVkNzRjYWE1MjBmOGM1OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzEyNmQzNDI2NmE4OTRmNThhMTkzOTZhNjZlYzViMzNlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTgxMzMxMSwtMS4xMjg4MjE5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZGI4OGM1MjU1MzIyNDI5YjljODkyYzEzNmJjMGUzZGMgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzEyNmQzNDI2NmE4OTRmNThhMTkzOTZhNjZlYzViMzNlLnNldEljb24oaWNvbl9kYjg4YzUyNTUzMjI0MjliOWM4OTJjMTM2YmMwZTNkYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRkNGY2MDkwZmZiNjQzNTc5ODI3NzFlZWRjYTEwZmI2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFhOTY2YmVjM2Q0YzQ3NGY4OTMyOWYwNTllNjVkMmRiID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8xYTk2NmJlYzNkNGM0NzRmODkzMjlmMDU5ZTY1ZDJkYiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgQW1icm9zaW8gU2FsYXphciAoWm9uYSA1KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZDRmNjA5MGZmYjY0MzU3OTgyNzcxZWVkY2ExMGZiNi5zZXRDb250ZW50KGh0bWxfMWE5NjZiZWMzZDRjNDc0Zjg5MzI5ZjA1OWU2NWQyZGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xMjZkMzQyNjZhODk0ZjU4YTE5Mzk2YTY2ZWM1YjMzZS5iaW5kUG9wdXAocG9wdXBfNGQ0ZjYwOTBmZmI2NDM1Nzk4Mjc3MWVlZGNhMTBmYjYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIG11bHRpX3BvbHlfbGluZV9iMDE3NDdjZWRjOTc0ZWY4OTJkZDk1MzgzYTkzMjNjZiA9IEwubXVsdGlQb2x5bGluZSgKICAgICAgICAgICAgICAgICAgICBbW1szNy45ODE2NTg5MzY2MTcyOSwgLTEuMTI4NTYwNDM5NDQ2NDg4XSwgWzM3Ljk4MTYwMDE3OTQ3NjA2LCAtMS4xMjg2MDI3NjgwNTc1MzNdXSwgW1szNy45ODE2MDAxNzk0NzYwNiwgLTEuMTI4NjAyNzY4MDU3NTMzXSwgWzM3Ljk4MDkxNDYyMzYxNTQ4LCAtMS4xMjkxMTQ4MTg1MjIzOTZdXV0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ6IDIsCiAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNSwKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQuYWRkTGF5ZXIobXVsdGlfcG9seV9saW5lX2IwMTc0N2NlZGM5NzRlZjg5MmRkOTUzODNhOTMyM2NmKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWI1MWY2Yjc3YjNjNGU1NTlmY2IyNTVlZjUxYzM2NjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTFiZWQ5NDNjZGU0NGYzYTgyMWNkMGJlOGI2MjY4NzIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzUxYmVkOTQzY2RlNDRmM2E4MjFjZDBiZThiNjI2ODcyIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBBbWJyb3NpbyBTYWxhemFyIChab25hIDUpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FiNTFmNmI3N2IzYzRlNTU5ZmNiMjU1ZWY1MWMzNjYzLnNldENvbnRlbnQoaHRtbF81MWJlZDk0M2NkZTQ0ZjNhODIxY2QwYmU4YjYyNjg3Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbXVsdGlfcG9seV9saW5lX2IwMTc0N2NlZGM5NzRlZjg5MmRkOTUzODNhOTMyM2NmLmJpbmRQb3B1cChwb3B1cF9hYjUxZjZiNzdiM2M0ZTU1OWZjYjI1NWVmNTFjMzY2Myk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzIxZTBmYTlmZjczNzRiZmM4ZjZiYjE0NTMwMDhlNjZkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTgwODQzMiwtMS4xMjg1OTk2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fZjFkMmRkZDk2N2UzNGJmNzk2Yzk1N2Q5MWZhMWI4NWUgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzIxZTBmYTlmZjczNzRiZmM4ZjZiYjE0NTMwMDhlNjZkLnNldEljb24oaWNvbl9mMWQyZGRkOTY3ZTM0YmY3OTZjOTU3ZDkxZmExYjg1ZSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzcwZGMwMGUyNzRjMzQ1NDQ5OWQwN2UwYjU4ZGZiNmVmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhkMWQxNDc0MjA4OTQ5ZGJhOGYyOGIzOGM5YWM0YTIzID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF84ZDFkMTQ3NDIwODk0OWRiYThmMjhiMzhjOWFjNGEyMyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgZGUgUmljYXJkbyBHaWwgKFpvbmEgNSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzBkYzAwZTI3NGMzNDU0NDk5ZDA3ZTBiNThkZmI2ZWYuc2V0Q29udGVudChodG1sXzhkMWQxNDc0MjA4OTQ5ZGJhOGYyOGIzOGM5YWM0YTIzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjFlMGZhOWZmNzM3NGJmYzhmNmJiMTQ1MzAwOGU2NmQuYmluZFBvcHVwKHBvcHVwXzcwZGMwMGUyNzRjMzQ1NDQ5OWQwN2UwYjU4ZGZiNmVmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBtdWx0aV9wb2x5X2xpbmVfYTk4MDQ0MmNhODJjNGRjNmFiNjZmMGNlZDczZDA3MzQgPSBMLm11bHRpUG9seWxpbmUoCiAgICAgICAgICAgICAgICAgICAgW1tbMzcuOTgxNjI0NDg2OTk1MjYsIC0xLjEyOTgzMjE0MTc5NTk4N10sIFszNy45ODE1ODI3NDUxMTc0NiwgLTEuMTI5Nzc5MzM1ODA2MDA2XV0sIFtbMzcuOTgxNTgyNzQ1MTE3NDYsIC0xLjEyOTc3OTMzNTgwNjAwNl0sIFszNy45ODE0OTExMzA5MTU3NywgLTEuMTI5NjM2Njc1ODEzOTddXSwgW1szNy45ODE0OTExMzA5MTU3NywgLTEuMTI5NjM2Njc1ODEzOTddLCBbMzcuOTgwODk4MDI3NDQ3MjEsIC0xLjEyOTE3ODEwMTg5MTM3XV0sIFtbMzcuOTgwODk4MDI3NDQ3MjEsIC0xLjEyOTE3ODEwMTg5MTM3XSwgWzM3Ljk4MDkxNDYyMzYxNTQ4LCAtMS4xMjkxMTQ4MTg1MjIzOTZdXSwgW1szNy45ODA5MTQ2MjM2MTU0OCwgLTEuMTI5MTE0ODE4NTIyMzk2XSwgWzM3Ljk4MDg0NzY1MjIwOTEyLCAtMS4xMjg2Njk3Mzk0NjM4NzRdXSwgW1szNy45ODA4NDc2NTIyMDkxMiwgLTEuMTI4NjY5NzM5NDYzODc0XSwgWzM3Ljk4MDg3MzU1MjI4OTk1LCAtMS4xMjc0MjI3NjM3Mjg3NTldXSwgW1szNy45ODA4NzM1NTIyODk5NSwgLTEuMTI3NDIyNzYzNzI4NzU5XSwgWzM3Ljk4MDgyNDc2OTYxMzQ2LCAtMS4xMjcxNjM0Mjc2NDQ1NzVdXSwgW1szNy45ODA4MjQ3Njk2MTM0NiwgLTEuMTI3MTYzNDI3NjQ0NTc1XSwgWzM3Ljk4MDgwNjc0ODUyMTY0NCwgLTEuMTI3MDY3OTU3NzY3NDIzXV1dLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OiAyLAogICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0LmFkZExheWVyKG11bHRpX3BvbHlfbGluZV9hOTgwNDQyY2E4MmM0ZGM2YWI2NmYwY2VkNzNkMDczNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y4M2Q5NWI4OWQ5ODQ4YjNhMjJkMjc3ZmNmZjkyMDFjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRjZjhhYzBmY2M1ZjQ4YWJhMWZkY2M4ZDg4NjMyN2NlID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF80Y2Y4YWMwZmNjNWY0OGFiYTFmZGNjOGQ4ODYzMjdjZSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgZGUgUmljYXJkbyBHaWwgKFpvbmEgNSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjgzZDk1Yjg5ZDk4NDhiM2EyMmQyNzdmY2ZmOTIwMWMuc2V0Q29udGVudChodG1sXzRjZjhhYzBmY2M1ZjQ4YWJhMWZkY2M4ZDg4NjMyN2NlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtdWx0aV9wb2x5X2xpbmVfYTk4MDQ0MmNhODJjNGRjNmFiNjZmMGNlZDczZDA3MzQuYmluZFBvcHVwKHBvcHVwX2Y4M2Q5NWI4OWQ5ODQ4YjNhMjJkMjc3ZmNmZjkyMDFjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZTc4MDA2MGJkNTY2NGUwZGI3YmQ1NmZkMGI1NjM4NmMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODA0MTI2LC0xLjEyOTQzMThdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9hNzA0MzJhOTliZWU0NzM0YTA5OGMwOTVkYTU5MTE1NiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZTc4MDA2MGJkNTY2NGUwZGI3YmQ1NmZkMGI1NjM4NmMuc2V0SWNvbihpY29uX2E3MDQzMmE5OWJlZTQ3MzRhMDk4YzA5NWRhNTkxMTU2KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWU1ZDAyZjdjZWY2NGJjNThjZWVjNDUxOTE1NDYzMDMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGM5NzQ1NDc5ZGVjNGYwNWI1NTUyMDY0ZTk5YWVhYjYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzRjOTc0NTQ3OWRlYzRmMDViNTU1MjA2NGU5OWFlYWI2IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBQcm9jbGFtYWNpb24gKFpvbmEgNSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWU1ZDAyZjdjZWY2NGJjNThjZWVjNDUxOTE1NDYzMDMuc2V0Q29udGVudChodG1sXzRjOTc0NTQ3OWRlYzRmMDViNTU1MjA2NGU5OWFlYWI2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZTc4MDA2MGJkNTY2NGUwZGI3YmQ1NmZkMGI1NjM4NmMuYmluZFBvcHVwKHBvcHVwX2FlNWQwMmY3Y2VmNjRiYzU4Y2VlYzQ1MTkxNTQ2MzAzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBtdWx0aV9wb2x5X2xpbmVfMGI3NWVhOGI0NTNkNGE1ZWFiMGY0ZjdlYzkyMzAwYzIgPSBMLm11bHRpUG9seWxpbmUoCiAgICAgICAgICAgICAgICAgICAgW1tbMzcuOTgxNDYzNjM4MjczMzcsIC0xLjEzMDMzNDQ2OTI1MzE3MV0sIFszNy45ODE0MTc1Mzc4MDU4OTYsIC0xLjEzMDMwMzIwNDc1NDM0MV1dLCBbWzM3Ljk4MTQxNzUzNzgwNTg5NiwgLTEuMTMwMzAzMjA0NzU0MzQxXSwgWzM3Ljk4MDkwMzU1OTUwMzMwNCwgLTEuMTI5ODc0MDUxMzExODQ1XV0sIFtbMzcuOTgwOTAzNTU5NTAzMzA0LCAtMS4xMjk4NzQwNTEzMTE4NDVdLCBbMzcuOTgwMTkxNjg0NDY2Nzc0LCAtMS4xMjkyNDE5NzE5OTM1MzddXSwgW1szNy45ODAxOTE2ODQ0NjY3NzQsIC0xLjEyOTI0MTk3MTk5MzUzN10sIFszNy45Nzk4OTIxOTkwNjYzOSwgLTEuMTI5MDA5NTQxODE4NTMzXV0sIFtbMzcuOTc5ODkyMTk5MDY2MzksIC0xLjEyOTAwOTU0MTgxODUzM10sIFszNy45Nzk4MjUxNDM4NDEsIC0xLjEyODk3MzE2NDM1ODc2OV1dXSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodDogMiwKICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMC41LAogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNC5hZGRMYXllcihtdWx0aV9wb2x5X2xpbmVfMGI3NWVhOGI0NTNkNGE1ZWFiMGY0ZjdlYzkyMzAwYzIpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNzAwMmM3ZTE5ODA0ZDUwYjU5ZTYxNGFkNTM0NmNkNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yZDQwYzM2Mzc2ODY0MDUwODNkYjIyMjcxODNiZWQ2ZiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMmQ0MGMzNjM3Njg2NDA1MDgzZGIyMjI3MTgzYmVkNmYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIFByb2NsYW1hY2lvbiAoWm9uYSA1KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNzAwMmM3ZTE5ODA0ZDUwYjU5ZTYxNGFkNTM0NmNkNS5zZXRDb250ZW50KGh0bWxfMmQ0MGMzNjM3Njg2NDA1MDgzZGIyMjI3MTgzYmVkNmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG11bHRpX3BvbHlfbGluZV8wYjc1ZWE4YjQ1M2Q0YTVlYWIwZjRmN2VjOTIzMDBjMi5iaW5kUG9wdXAocG9wdXBfMDcwMDJjN2UxOTgwNGQ1MGI1OWU2MTRhZDUzNDZjZDUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jMjgzODFjMmMyN2E0MTA3YWY0OTdkNzc4NTNjNjNiZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk3NzA5OTIsLTEuMTI3OTY1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2E2ZmY1ZDI5NmQzNzQyODY5Mjk1M2JjN2YyZDk5ZTU5ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9jMjgzODFjMmMyN2E0MTA3YWY0OTdkNzc4NTNjNjNiZC5zZXRJY29uKGljb25fYTZmZjVkMjk2ZDM3NDI4NjkyOTUzYmM3ZjJkOTllNTkpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xODg2M2M5OTcwZjg0ZmNlYmQyOWYzYzFmMmE3MDQ0NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80MjY1MDEyMzVhZjA0MjZhODMwZmFlNzI5NzhhNDQzYyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNDI2NTAxMjM1YWYwNDI2YTgzMGZhZTcyOTc4YTQ0M2MiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEp1YW4gTG9wZXogU29tYWxvIChab25hIDUpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE4ODYzYzk5NzBmODRmY2ViZDI5ZjNjMWYyYTcwNDQ1LnNldENvbnRlbnQoaHRtbF80MjY1MDEyMzVhZjA0MjZhODMwZmFlNzI5NzhhNDQzYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2MyODM4MWMyYzI3YTQxMDdhZjQ5N2Q3Nzg1M2M2M2JkLmJpbmRQb3B1cChwb3B1cF8xODg2M2M5OTcwZjg0ZmNlYmQyOWYzYzFmMmE3MDQ0NSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgbXVsdGlfcG9seV9saW5lXzM2MjRjOTI1OWEwNzQ0MWM5OGYyMGUwYzQ2ZTBkMWE0ID0gTC5tdWx0aVBvbHlsaW5lKAogICAgICAgICAgICAgICAgICAgIFtbWzM3Ljk3NzM5NTgxNjg0NDIyLCAtMS4xMjY0MTczNTQ0NDMxMDZdLCBbMzcuOTc3MzE5MTIyNDMwMTc0LCAtMS4xMjY1OTEwMjc0NzY4NDldXSwgW1szNy45NzczMTkxMjI0MzAxNzQsIC0xLjEyNjU5MTAyNzQ3Njg0OV0sIFszNy45NzcyODc5NDE3NTAzNzYsIC0xLjEyNjcwMjY3NDQyNzEyMl1dLCBbWzM3Ljk3NzI4Nzk0MTc1MDM3NiwgLTEuMTI2NzAyNjc0NDI3MTIyXSwgWzM3Ljk3NzI3NjM3NDcyMzk5LCAtMS4xMjY4NDc3NjUxNzEwNV1dLCBbWzM3Ljk3NzI3NjM3NDcyMzk5LCAtMS4xMjY4NDc3NjUxNzEwNV0sIFszNy45NzcyMDE3NzU3ODU3NDQsIC0xLjEyNzE1MjI3OTcxMzM1N11dLCBbWzM3Ljk3NzIwMTc3NTc4NTc0NCwgLTEuMTI3MTUyMjc5NzEzMzU3XSwgWzM3Ljk3NzEwNTEzMjQ0MjE1LCAtMS4xMjc2MTk5MDYwOTE0MTFdXV0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ6IDIsCiAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNSwKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQuYWRkTGF5ZXIobXVsdGlfcG9seV9saW5lXzM2MjRjOTI1OWEwNzQ0MWM5OGYyMGUwYzQ2ZTBkMWE0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGEzMzJiMzc0OWZmNDc2ODgzMDRmNWU4YTU3NzU3NWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDU3ZjM3MGZmZWY5NDhhNmI0MjJhZTdmZTBmM2JiNjMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2Q1N2YzNzBmZmVmOTQ4YTZiNDIyYWU3ZmUwZjNiYjYzIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBKdWFuIExvcGV6IFNvbWFsbyAoWm9uYSA1KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kYTMzMmIzNzQ5ZmY0NzY4ODMwNGY1ZThhNTc3NTc1ZS5zZXRDb250ZW50KGh0bWxfZDU3ZjM3MGZmZWY5NDhhNmI0MjJhZTdmZTBmM2JiNjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG11bHRpX3BvbHlfbGluZV8zNjI0YzkyNTlhMDc0NDFjOThmMjBlMGM0NmUwZDFhNC5iaW5kUG9wdXAocG9wdXBfZGEzMzJiMzc0OWZmNDc2ODgzMDRmNWU4YTU3NzU3NWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82MWViN2E1MTUzZGU0NmNjODQ0MWRmZWMwMGVhMjQwNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk3NjQ3MDIsLTEuMTI3MTYzM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzQ0YTQ3ZDRiNjkxZjQ3NThhNTRhMjZkODIzNTc5NjU0ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl82MWViN2E1MTUzZGU0NmNjODQ0MWRmZWMwMGVhMjQwNS5zZXRJY29uKGljb25fNDRhNDdkNGI2OTFmNDc1OGE1NGEyNmQ4MjM1Nzk2NTQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mNDIzNzI0OTdiMTc0MTZlOTdkZTIyMTFkNjQzN2RlYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mNTExNTNlNDNjNWU0Y2Y1ODg0NzgzY2Q3NTE5ZTE1ZiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZjUxMTUzZTQzYzVlNGNmNTg4NDc4M2NkNzUxOWUxNWYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIEFyY2lwcmVzdGUgTWFyaWFubyBBcm9jYSAoWm9uYSA1KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNDIzNzI0OTdiMTc0MTZlOTdkZTIyMTFkNjQzN2RlYy5zZXRDb250ZW50KGh0bWxfZjUxMTUzZTQzYzVlNGNmNTg4NDc4M2NkNzUxOWUxNWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82MWViN2E1MTUzZGU0NmNjODQ0MWRmZWMwMGVhMjQwNS5iaW5kUG9wdXAocG9wdXBfZjQyMzcyNDk3YjE3NDE2ZTk3ZGUyMjExZDY0MzdkZWMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIG11bHRpX3BvbHlfbGluZV84MjA0MzRkYTliZGM0MDA5YjE1N2IyMTI0OGQ5ZmZkYSA9IEwubXVsdGlQb2x5bGluZSgKICAgICAgICAgICAgICAgICAgICBbW1szNy45Nzc2MTk4NjUxMTYwNTQsIC0xLjEyNjI2NDMwMDg5MTEzN10sIFszNy45NzczOTU4MTY4NDQyMiwgLTEuMTI2NDE3MzU0NDQzMTA2XV0sIFtbMzcuOTc3Mzk1ODE2ODQ0MjIsIC0xLjEyNjQxNzM1NDQ0MzEwNl0sIFszNy45NzcyODA4MTcxMzI2OCwgLTEuMTI2NDk1ODA5MDU2NzkxXV0sIFtbMzcuOTc3MjgwODE3MTMyNjgsIC0xLjEyNjQ5NTgwOTA1Njc5MV0sIFszNy45NzcyMTYwMjUwMjExMzYsIC0xLjEyNjU0MjQxMjQzODQ1NF1dLCBbWzM3Ljk3NzIxNjAyNTAyMTEzNiwgLTEuMTI2NTQyNDEyNDM4NDU0XSwgWzM3Ljk3NzExMDU4MDY3OTIxLCAtMS4xMjY2MTIxNDk4NzI4NDFdXSwgW1szNy45NzcxMTA1ODA2NzkyMSwgLTEuMTI2NjEyMTQ5ODcyODQxXSwgWzM3Ljk3NjQ1Mzg1ODU2NTU4LCAtMS4xMjcxMDM4MzIzMTI5OTddXV0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ6IDIsCiAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNSwKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQuYWRkTGF5ZXIobXVsdGlfcG9seV9saW5lXzgyMDQzNGRhOWJkYzQwMDliMTU3YjIxMjQ4ZDlmZmRhKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjU2M2Q2N2Y3OWUwNGIwNWI3NmM4YTFjZmQ3ZGFjY2QgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmUzMDE4OTRhMGQ5NDgyZmJhYTRiZjBmY2UzOGM5MWYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzJlMzAxODk0YTBkOTQ4MmZiYWE0YmYwZmNlMzhjOTFmIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBBcmNpcHJlc3RlIE1hcmlhbm8gQXJvY2EgKFpvbmEgNSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjU2M2Q2N2Y3OWUwNGIwNWI3NmM4YTFjZmQ3ZGFjY2Quc2V0Q29udGVudChodG1sXzJlMzAxODk0YTBkOTQ4MmZiYWE0YmYwZmNlMzhjOTFmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtdWx0aV9wb2x5X2xpbmVfODIwNDM0ZGE5YmRjNDAwOWIxNTdiMjEyNDhkOWZmZGEuYmluZFBvcHVwKHBvcHVwX2Y1NjNkNjdmNzllMDRiMDViNzZjOGExY2ZkN2RhY2NkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOWI2MWIxMzY4NThjNDA2Y2JjZWRlYThmYTEwMGI5NWUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45NzYxNTQ2LC0xLjEyODkxOF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uX2JjMGZkYzM0ZTYyNjRjMGZhZDU1YTY1ZWNjZTY0NTI3ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl85YjYxYjEzNjg1OGM0MDZjYmNlZGVhOGZhMTAwYjk1ZS5zZXRJY29uKGljb25fYmMwZmRjMzRlNjI2NGMwZmFkNTVhNjVlY2NlNjQ1MjcpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jNThmOTVhYjFlZWE0NjNkOGUwYjlhZTI3OTI5YTU4ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84ZDM1M2Y2NGQxMDU0YzIxOTYxZDY4ZWFlZDdiNzc0YSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfOGQzNTNmNjRkMTA1NGMyMTk2MWQ2OGVhZWQ3Yjc3NGEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIFJ1aXogSGlkYWxnbyAoWm9uYSA1KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jNThmOTVhYjFlZWE0NjNkOGUwYjlhZTI3OTI5YTU4Zi5zZXRDb250ZW50KGh0bWxfOGQzNTNmNjRkMTA1NGMyMTk2MWQ2OGVhZWQ3Yjc3NGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85YjYxYjEzNjg1OGM0MDZjYmNlZGVhOGZhMTAwYjk1ZS5iaW5kUG9wdXAocG9wdXBfYzU4Zjk1YWIxZWVhNDYzZDhlMGI5YWUyNzkyOWE1OGYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIG11bHRpX3BvbHlfbGluZV8xNDA2ZTFmNDk1MjE0YTljYjkzM2U0YTY1ZDIxMDY4ZiA9IEwubXVsdGlQb2x5bGluZSgKICAgICAgICAgICAgICAgICAgICBbW1szNy45NzYwNzE3Mjc1OTk5LCAtMS4xMjkzODc2NDk0NzA2ODZdLCBbMzcuOTc2MTU2NzIwMDk4MDksIC0xLjEyODkwNjQ0NDQwOTQ5NV1dLCBbWzM3Ljk3NjE1NjcyMDA5ODA5LCAtMS4xMjg5MDY0NDQ0MDk0OTVdLCBbMzcuOTc2MzUwODQ0OTc1NTYsIC0xLjEyNzY3MTAzNTcwMDc1N11dLCBbWzM3Ljk3NjM1MDg0NDk3NTU2LCAtMS4xMjc2NzEwMzU3MDA3NTddLCBbMzcuOTc2NDUzODU4NTY1NTgsIC0xLjEyNzEwMzgzMjMxMjk5N11dXSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodDogMiwKICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMC41LAogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNC5hZGRMYXllcihtdWx0aV9wb2x5X2xpbmVfMTQwNmUxZjQ5NTIxNGE5Y2I5MzNlNGE2NWQyMTA2OGYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NWQxZDEzZWIwOTE0NzQxYWQwNTUwZGJmYTljYjBjNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZTliZDBhYWRhMWI0NjBhYjYwYTk3MDZlNzhiMWU5YyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZGU5YmQwYWFkYTFiNDYwYWI2MGE5NzA2ZTc4YjFlOWMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIFJ1aXogSGlkYWxnbyAoWm9uYSA1KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NWQxZDEzZWIwOTE0NzQxYWQwNTUwZGJmYTljYjBjNy5zZXRDb250ZW50KGh0bWxfZGU5YmQwYWFkYTFiNDYwYWI2MGE5NzA2ZTc4YjFlOWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG11bHRpX3BvbHlfbGluZV8xNDA2ZTFmNDk1MjE0YTljYjkzM2U0YTY1ZDIxMDY4Zi5iaW5kUG9wdXAocG9wdXBfNjVkMWQxM2ViMDkxNDc0MWFkMDU1MGRiZmE5Y2IwYzcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mZmE4MGRlNWQ5M2E0YTFhYmRlYjM0ODYyMzAzMDg4NyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk3NzEzMDMsLTEuMTI3NjE3Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzA3MzE0ODU4MjNiNzQ0Y2ZhZGZhOTIwMjhjNDYwMjg5ID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9mZmE4MGRlNWQ5M2E0YTFhYmRlYjM0ODYyMzAzMDg4Ny5zZXRJY29uKGljb25fMDczMTQ4NTgyM2I3NDRjZmFkZmE5MjAyOGM0NjAyODkpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMjdjNTk2ZjI0NGI0Y2M5YTExYjllYzQ4OTQ3M2NlOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80MTY3MzlhNDVhZWQ0NTk0YmVhNjhhZGI5MDU1ZjJjYyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNDE2NzM5YTQ1YWVkNDU5NGJlYTY4YWRiOTA1NWYyY2MiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIENsZW1lbnRlcyAoWm9uYSA1KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMjdjNTk2ZjI0NGI0Y2M5YTExYjllYzQ4OTQ3M2NlOC5zZXRDb250ZW50KGh0bWxfNDE2NzM5YTQ1YWVkNDU5NGJlYTY4YWRiOTA1NWYyY2MpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mZmE4MGRlNWQ5M2E0YTFhYmRlYjM0ODYyMzAzMDg4Ny5iaW5kUG9wdXAocG9wdXBfMzI3YzU5NmYyNDRiNGNjOWExMWI5ZWM0ODk0NzNjZTgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIG11bHRpX3BvbHlfbGluZV82NmM0ZTJjZmY0N2I0MzYwYmM1YTlhNjI2ODM3N2QzNCA9IEwubXVsdGlQb2x5bGluZSgKICAgICAgICAgICAgICAgICAgICBbW1szNy45NzcxMDUxMzI0NDIxNSwgLTEuMTI3NjE5OTA2MDkxNDExXSwgWzM3Ljk3NzEyMDcyMjc4MjA3NSwgLTEuMTI3NjMxMzA1NDc5NzI0XV0sIFtbMzcuOTc3MTIwNzIyNzgyMDc1LCAtMS4xMjc2MzEzMDU0Nzk3MjRdLCBbMzcuOTc3NDU1OTk4OTA4OTk0LCAtMS4xMjc4MjcwMjI5MTg4MDhdXSwgW1szNy45Nzc0NTU5OTg5MDg5OTQsIC0xLjEyNzgyNzAyMjkxODgwOF0sIFszNy45Nzc3NDc2ODkxMzk0NCwgLTEuMTI3OTk0ODI4NjIwMzU5XV0sIFtbMzcuOTc3NzQ3Njg5MTM5NDQsIC0xLjEyNzk5NDgyODYyMDM1OV0sIFszNy45NzgwNTYyMjY5OTUyNSwgLTEuMTI4MTg3MzYwOTM2MjM4XV0sIFtbMzcuOTc4MDU2MjI2OTk1MjUsIC0xLjEyODE4NzM2MDkzNjIzOF0sIFszNy45NzgwOTM4NjE3NDA1MSwgLTEuMTI4MjA3MjI2MDQ2NzU0XV1dLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OiAyLAogICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0LmFkZExheWVyKG11bHRpX3BvbHlfbGluZV82NmM0ZTJjZmY0N2I0MzYwYmM1YTlhNjI2ODM3N2QzNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA5YWExY2YwZDQ1NzRjZmM4ZWNmM2Y5N2VhZTFjMzY2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YzNDkyZTgyNmVmMDRlMjZhYzc5NWY1YzU2N2FlZDIxID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9mMzQ5MmU4MjZlZjA0ZTI2YWM3OTVmNWM1NjdhZWQyMSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgQ2xlbWVudGVzIChab25hIDUpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA5YWExY2YwZDQ1NzRjZmM4ZWNmM2Y5N2VhZTFjMzY2LnNldENvbnRlbnQoaHRtbF9mMzQ5MmU4MjZlZjA0ZTI2YWM3OTVmNWM1NjdhZWQyMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbXVsdGlfcG9seV9saW5lXzY2YzRlMmNmZjQ3YjQzNjBiYzVhOWE2MjY4Mzc3ZDM0LmJpbmRQb3B1cChwb3B1cF8wOWFhMWNmMGQ0NTc0Y2ZjOGVjZjNmOTdlYWUxYzM2Nik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2YzM2Y2OThlMzIyNzQ5NzVhNDZiNTgyNjBmODEzMjJlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTc5NTMyNiwtMS4xMzE5MzczXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNjAyODg4NjRjYjczNGYzMDk0MTMyZmFhMjU0M2ZiMDggPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2YzM2Y2OThlMzIyNzQ5NzVhNDZiNTgyNjBmODEzMjJlLnNldEljb24oaWNvbl82MDI4ODg2NGNiNzM0ZjMwOTQxMzJmYWEyNTQzZmIwOCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJkMjk1YjYwMDRmMjQxZGY5MGRlMGFmYTc5YmYyNjJmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgzNTE1NzI0MDRiMjRkYzA4NDY2NDBlYjc5ZGY2ODFlID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF84MzUxNTcyNDA0YjI0ZGMwODQ2NjQwZWI3OWRmNjgxZSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGVqb24gQ2FyYXZhY2EgKFpvbmEgNSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmQyOTViNjAwNGYyNDFkZjkwZGUwYWZhNzliZjI2MmYuc2V0Q29udGVudChodG1sXzgzNTE1NzI0MDRiMjRkYzA4NDY2NDBlYjc5ZGY2ODFlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjMzZjY5OGUzMjI3NDk3NWE0NmI1ODI2MGY4MTMyMmUuYmluZFBvcHVwKHBvcHVwXzJkMjk1YjYwMDRmMjQxZGY5MGRlMGFmYTc5YmYyNjJmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBtdWx0aV9wb2x5X2xpbmVfNWVhMTJjOGFjYTJhNGY4ZGE3YTM4NTJiMzEwOGMxY2IgPSBMLm11bHRpUG9seWxpbmUoCiAgICAgICAgICAgICAgICAgICAgW1tbMzcuOTc5NTEyNTgyNjcxNjQ2LCAtMS4xMzE5MzU0MTI3NTkzMDRdLCBbMzcuOTc5NTQ2ODY0NjU1NjQ2LCAtMS4xMzIwMTA2ODIyNDk4MTNdXSwgW1szNy45Nzk1NDY4NjQ2NTU2NDYsIC0xLjEzMjAxMDY4MjI0OTgxM10sIFszNy45Nzk3NjU5Njc2MDQ1OCwgLTEuMTMyNDQ4MjE3NTk1NDgxXV1dLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OiAyLAogICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0LmFkZExheWVyKG11bHRpX3BvbHlfbGluZV81ZWExMmM4YWNhMmE0ZjhkYTdhMzg1MmIzMTA4YzFjYik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YxZDAxNDQyM2VmMTQwYWZhY2NkNGVhOTZkODZmNzRkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU1ZWYyNjk5OWFlZTRiOGNhMDdlN2VjNDdjYTFmNTQ0ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF81NWVmMjY5OTlhZWU0YjhjYTA3ZTdlYzQ3Y2ExZjU0NCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGVqb24gQ2FyYXZhY2EgKFpvbmEgNSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjFkMDE0NDIzZWYxNDBhZmFjY2Q0ZWE5NmQ4NmY3NGQuc2V0Q29udGVudChodG1sXzU1ZWYyNjk5OWFlZTRiOGNhMDdlN2VjNDdjYTFmNTQ0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtdWx0aV9wb2x5X2xpbmVfNWVhMTJjOGFjYTJhNGY4ZGE3YTM4NTJiMzEwOGMxY2IuYmluZFBvcHVwKHBvcHVwX2YxZDAxNDQyM2VmMTQwYWZhY2NkNGVhOTZkODZmNzRkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNDY1NTI2MjBiNzQxNGY5ZGI4YjMxMjE3NTQ2ODNjMzMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45NzY4MDMzLC0xLjEzMzM1NjRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9kZmYyOGI3NDBmOTI0Mzg3OTg0YTk4NTkwYTRjMjE1ZCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNDY1NTI2MjBiNzQxNGY5ZGI4YjMxMjE3NTQ2ODNjMzMuc2V0SWNvbihpY29uX2RmZjI4Yjc0MGY5MjQzODc5ODRhOTg1OTBhNGMyMTVkKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDZhOGI1ZmNlZTllNDJiYzg2NDc1OGU2N2E0ODgxYzAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmY1YWE2YzY0ZTkzNDQzMGExOGZmMGQyMWY4N2U0N2IgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzJmNWFhNmM2NGU5MzQ0MzBhMThmZjBkMjFmODdlNDdiIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBDdWFydGVsIGRlIEFydGlsbGVyaWEgKFpvbmEgNSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDZhOGI1ZmNlZTllNDJiYzg2NDc1OGU2N2E0ODgxYzAuc2V0Q29udGVudChodG1sXzJmNWFhNmM2NGU5MzQ0MzBhMThmZjBkMjFmODdlNDdiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNDY1NTI2MjBiNzQxNGY5ZGI4YjMxMjE3NTQ2ODNjMzMuYmluZFBvcHVwKHBvcHVwX2Q2YThiNWZjZWU5ZTQyYmM4NjQ3NThlNjdhNDg4MWMwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBtdWx0aV9wb2x5X2xpbmVfYmI5NDczNjE3NWE4NGVjNjlhZTBhMWE3NDVhNGVmY2MgPSBMLm11bHRpUG9seWxpbmUoCiAgICAgICAgICAgICAgICAgICAgW1tbMzcuOTc3OTQ4NDM1NzIwNDM1LCAtMS4xMzM5OTgyODI5NDkzNjRdLCBbMzcuOTc3OTAzNTkyNTM4NDcsIC0xLjEzMzk3NjA3MDkwNTkzMV1dLCBbWzM3Ljk3NzkwMzU5MjUzODQ3LCAtMS4xMzM5NzYwNzA5MDU5MzFdLCBbMzcuOTc3NjUzNzI4MDA0ODcsIC0xLjEzMzg1MjYwNTQ3MjE4NV1dLCBbWzM3Ljk3NzY1MzcyODAwNDg3LCAtMS4xMzM4NTI2MDU0NzIxODVdLCBbMzcuOTc3MjgwMzk4MDM3NTIsIC0xLjEzMzYzMTE1NTU5MDMzNl1dLCBbWzM3Ljk3NzI4MDM5ODAzNzUyLCAtMS4xMzM2MzExNTU1OTAzMzZdLCBbMzcuOTc3MTYzNjM4MTI2MzE0LCAtMS4xMzM1NjUxMDYxOTMzNDVdXSwgW1szNy45NzcxNjM2MzgxMjYzMTQsIC0xLjEzMzU2NTEwNjE5MzM0NV0sIFszNy45NzY3Nzk5OTg0MTgwNywgLTEuMTMzMzcwMjI2OTQ0NTVdXSwgW1szNy45NzY3Nzk5OTg0MTgwNywgLTEuMTMzMzcwMjI2OTQ0NTVdLCBbMzcuOTc2NDg5NjQ5MjkyMTIsIC0xLjEzMzI3MDgxNzU3MjkwN11dXSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodDogMiwKICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMC41LAogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNC5hZGRMYXllcihtdWx0aV9wb2x5X2xpbmVfYmI5NDczNjE3NWE4NGVjNjlhZTBhMWE3NDVhNGVmY2MpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MzYzZjRmYjVmYjE0YjQ0OWY2YzliM2EzOTQxNGQ1ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yODI5OWQ4ZmRlMGQ0MGEwYWRhNDk5YWVmMWFiYjU2ZSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMjgyOTlkOGZkZTBkNDBhMGFkYTQ5OWFlZjFhYmI1NmUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIEN1YXJ0ZWwgZGUgQXJ0aWxsZXJpYSAoWm9uYSA1KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MzYzZjRmYjVmYjE0YjQ0OWY2YzliM2EzOTQxNGQ1ZC5zZXRDb250ZW50KGh0bWxfMjgyOTlkOGZkZTBkNDBhMGFkYTQ5OWFlZjFhYmI1NmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG11bHRpX3BvbHlfbGluZV9iYjk0NzM2MTc1YTg0ZWM2OWFlMGExYTc0NWE0ZWZjYy5iaW5kUG9wdXAocG9wdXBfNDM2M2Y0ZmI1ZmIxNGI0NDlmNmM5YjNhMzk0MTRkNWQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kMTg4NTgzMjgxYjU0MjYzODAwMTQyYzM0MmYzMzViZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4MDQwMTUsLTEuMTMwNDY5OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzFmMWE2Y2Y1OGU4YzQxMjM5MzU5ODMyYzc5MzA0NmMwID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9kMTg4NTgzMjgxYjU0MjYzODAwMTQyYzM0MmYzMzViZS5zZXRJY29uKGljb25fMWYxYTZjZjU4ZThjNDEyMzkzNTk4MzJjNzkzMDQ2YzApOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMzQ1ZTBhZGM3NWM0MTQwYmQ5ZGZlZDQzZGU1MzViNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lMTNhYmUwN2EwZjU0MzUzODQ0MzFhMzFmMmFkMTQyNSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZTEzYWJlMDdhMGY1NDM1Mzg0NDMxYTMxZjJhZDE0MjUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEFsYW1lZGEgZGUgQ29sb24gKFpvbmEgNSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTM0NWUwYWRjNzVjNDE0MGJkOWRmZWQ0M2RlNTM1YjQuc2V0Q29udGVudChodG1sX2UxM2FiZTA3YTBmNTQzNTM4NDQzMWEzMWYyYWQxNDI1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZDE4ODU4MzI4MWI1NDI2MzgwMDE0MmMzNDJmMzM1YmUuYmluZFBvcHVwKHBvcHVwX2UzNDVlMGFkYzc1YzQxNDBiZDlkZmVkNDNkZTUzNWI0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBtdWx0aV9wb2x5X2xpbmVfMzJlNTUzY2JlYTRlNDk0MzlkNWJjYmFjMzUzZGUyN2EgPSBMLm11bHRpUG9seWxpbmUoCiAgICAgICAgICAgICAgICAgICAgW1tbMzcuOTgxMzQ2Mzc1NDQ3OTcsIC0xLjEzMDg0Mjc0Nzg2MTYwN10sIFszNy45ODEyMzcyNDMwNjg2NCwgLTEuMTMwODAzMTAxNDU5NjA1XV0sIFtbMzcuOTgxMjM3MjQzMDY4NjQsIC0xLjEzMDgwMzEwMTQ1OTYwNV0sIFszNy45ODA5MTEzNTQ2NzMyNSwgLTEuMTMwNjgwODA5NDkyMzA0XV0sIFtbMzcuOTgwOTExMzU0NjczMjUsIC0xLjEzMDY4MDgwOTQ5MjMwNF0sIFszNy45ODA1NzU5OTQ3MjcyNywgLTEuMTMwNTQzMTc4NjQyMTk5XV0sIFtbMzcuOTgwNTc1OTk0NzI3MjcsIC0xLjEzMDU0MzE3ODY0MjE5OV0sIFszNy45ODA0MDYzNDUwMDcwNTQsIC0xLjEzMDQ3MzUyNTAyNjgxNV1dLCBbWzM3Ljk4MDQwNjM0NTAwNzA1NCwgLTEuMTMwNDczNTI1MDI2ODE1XSwgWzM3Ljk3OTgyMTM3MTk4NDU3LCAtMS4xMzAyODg5NTU1MTg5NDldXV0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ6IDIsCiAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNSwKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQuYWRkTGF5ZXIobXVsdGlfcG9seV9saW5lXzMyZTU1M2NiZWE0ZTQ5NDM5ZDViY2JhYzM1M2RlMjdhKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGY1YjQ0Zjg2MDUzNDY5NWEzYTA5YjZiNGQwOGUyZmIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDYwNjI4YTI4MzU3NDViZTg2YTg0MmMzMmQwY2ZiYjMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzQ2MDYyOGEyODM1NzQ1YmU4NmE4NDJjMzJkMGNmYmIzIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBBbGFtZWRhIGRlIENvbG9uIChab25hIDUpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhmNWI0NGY4NjA1MzQ2OTVhM2EwOWI2YjRkMDhlMmZiLnNldENvbnRlbnQoaHRtbF80NjA2MjhhMjgzNTc0NWJlODZhODQyYzMyZDBjZmJiMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbXVsdGlfcG9seV9saW5lXzMyZTU1M2NiZWE0ZTQ5NDM5ZDViY2JhYzM1M2RlMjdhLmJpbmRQb3B1cChwb3B1cF84ZjViNDRmODYwNTM0Njk1YTNhMDliNmI0ZDA4ZTJmYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzY1MTAxNjM2ZWQyYjQxMjU4ZGVjNmVhMTQ1ZWUyMmI3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTc4NTc5NiwtMS4xMzMxNTUyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYTQyM2NhNjg2NzI5NDYzNWJmNmE0NzEyYTMzYzI4NTIgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzY1MTAxNjM2ZWQyYjQxMjU4ZGVjNmVhMTQ1ZWUyMmI3LnNldEljb24oaWNvbl9hNDIzY2E2ODY3Mjk0NjM1YmY2YTQ3MTJhMzNjMjg1Mik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E1ZjhlZTBjMzA3NDRhOWFhNmYyODQxMDhmYWFjZDNlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUxZWYwMzVhOWI1OTRhNWFhMjYzZGZmZjk1NDg0OTM0ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF81MWVmMDM1YTliNTk0YTVhYTI2M2RmZmY5NTQ4NDkzNCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgQ2FydGFnZW5hIChab25hIDUpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E1ZjhlZTBjMzA3NDRhOWFhNmYyODQxMDhmYWFjZDNlLnNldENvbnRlbnQoaHRtbF81MWVmMDM1YTliNTk0YTVhYTI2M2RmZmY5NTQ4NDkzNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzY1MTAxNjM2ZWQyYjQxMjU4ZGVjNmVhMTQ1ZWUyMmI3LmJpbmRQb3B1cChwb3B1cF9hNWY4ZWUwYzMwNzQ0YTlhYTZmMjg0MTA4ZmFhY2QzZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgbXVsdGlfcG9seV9saW5lX2EwYmU4MzI2NzY2MjQ2ZjBiNjA1NDNkMjNlZjc3OTBiID0gTC5tdWx0aVBvbHlsaW5lKAogICAgICAgICAgICAgICAgICAgIFtbWzM3Ljk3NjM4NDI4ODc2OTIyNSwgLTEuMTM1MDg2ODQwNzE0NTA3XSwgWzM3Ljk3NzAwNzk4NjE4NDM5LCAtMS4xMzQ3OTY1NzU0MDc1OTFdXSwgW1szNy45NzcwMDc5ODYxODQzOSwgLTEuMTM0Nzk2NTc1NDA3NTkxXSwgWzM3Ljk3NzA1Mzc1MTM3NTcwNiwgLTEuMTM0NzYxNDU1MjMzMzAzXV0sIFtbMzcuOTc3MDUzNzUxMzc1NzA2LCAtMS4xMzQ3NjE0NTUyMzMzMDNdLCBbMzcuOTc3MzAwMDk1NTA5OTc1LCAtMS4xMzQ1OTQxNTI0NDU5NDJdXSwgW1szNy45NzczMDAwOTU1MDk5NzUsIC0xLjEzNDU5NDE1MjQ0NTk0Ml0sIFszNy45NzczNTg2ODUwMTMxNywgLTEuMTM0NTU4ODY0NjMzNTldXSwgW1szNy45NzczNTg2ODUwMTMxNywgLTEuMTM0NTU4ODY0NjMzNTldLCBbMzcuOTc3Mzg3MTgzNDgzOTU1LCAtMS4xMzQ1NDE2ODE3MzIwODhdXSwgW1szNy45NzczODcxODM0ODM5NTUsIC0xLjEzNDU0MTY4MTczMjA4OF0sIFszNy45Nzc2Mjk4Mzk1ODA4MiwgLTEuMTM0MzU5NzEwNjE0MTc3XV0sIFtbMzcuOTc3NjI5ODM5NTgwODIsIC0xLjEzNDM1OTcxMDYxNDE3N10sIFszNy45Nzc2NjE3NzQ2MzE5MSwgLTEuMTM0MzIzNTAwNzkyNDc2XV0sIFtbMzcuOTc3NjYxNzc0NjMxOTEsIC0xLjEzNDMyMzUwMDc5MjQ3Nl0sIFszNy45Nzc5NDg0MzU3MjA0MzUsIC0xLjEzMzk5ODI4Mjk0OTM2NF1dLCBbWzM3Ljk3Nzk0ODQzNTcyMDQzNSwgLTEuMTMzOTk4MjgyOTQ5MzY0XSwgWzM3Ljk3Nzk4OTg0MjMyMjEzLCAtMS4xMzM5Mzk0NDE5ODkwNzFdXSwgW1szNy45Nzc5ODk4NDIzMjIxMywgLTEuMTMzOTM5NDQxOTg5MDcxXSwgWzM3Ljk3ODQxMTAzMjk1NjU4NiwgLTEuMTMzMzg0ODExNDU2MDY4XV0sIFtbMzcuOTc4NDExMDMyOTU2NTg2LCAtMS4xMzMzODQ4MTE0NTYwNjhdLCBbMzcuOTc4NTQ4MzI4NTMwNTY1LCAtMS4xMzMxODcyNDk5OTgyODZdXSwgW1szNy45Nzg1NDgzMjg1MzA1NjUsIC0xLjEzMzE4NzI0OTk5ODI4Nl0sIFszNy45Nzg2ODAxNzU4Njc0NzQsIC0xLjEzMjk2OTIzNjY5NjczOF1dLCBbWzM3Ljk3ODY4MDE3NTg2NzQ3NCwgLTEuMTMyOTY5MjM2Njk2NzM4XSwgWzM3Ljk3ODg3OTE2MjI0ODgzLCAtMS4xMzI2NDM1MTU5Mzk0MDddXSwgW1szNy45Nzg4NzkxNjIyNDg4MywgLTEuMTMyNjQzNTE1OTM5NDA3XSwgWzM3Ljk3OTQxMzM0MDkzODA5NSwgLTEuMTMyMDMyNzI2NjU1MTU0XV0sIFtbMzcuOTc5NDEzMzQwOTM4MDk1LCAtMS4xMzIwMzI3MjY2NTUxNTRdLCBbMzcuOTc5NDQ1Mjc1OTg5MTgsIC0xLjEzMjAwMTQ2MjE1NjMyNV1dLCBbWzM3Ljk3OTQ0NTI3NTk4OTE4LCAtMS4xMzIwMDE0NjIxNTYzMjVdLCBbMzcuOTc5NTEyNTgyNjcxNjQ2LCAtMS4xMzE5MzU0MTI3NTkzMDRdXSwgW1szNy45Nzk1MTI1ODI2NzE2NDYsIC0xLjEzMTkzNTQxMjc1OTMwNF0sIFszNy45Nzk3MjU4MTgyODgzOSwgLTEuMTMxNzIzMjY2NzkwMDA0XV0sIFtbMzcuOTc5NzI1ODE4Mjg4MzksIC0xLjEzMTcyMzI2Njc5MDAwNF0sIFszNy45Nzk3NzYxOTM1MjY0NywgLTEuMTMxNjk5MTI2OTA4ODQyXV0sIFtbMzcuOTc5Nzc2MTkzNTI2NDcsIC0xLjEzMTY5OTEyNjkwODg0Ml0sIFszNy45ODAwMDI4NDAxODgyNTYsIC0xLjEzMTU5MDc0ODkwMDgzNF1dLCBbWzM3Ljk4MDAwMjg0MDE4ODI1NiwgLTEuMTMxNTkwNzQ4OTAwODM0XSwgWzM3Ljk4MDIzMjI1Mjg3ODEyNSwgLTEuMTMxNTIzMDIzMTIzMTc5XV0sIFtbMzcuOTgwMjMyMjUyODc4MTI1LCAtMS4xMzE1MjMwMjMxMjMxNzldLCBbMzcuOTgwMjkxNTk2NzUyNjEsIC0xLjEzMTUwNjc2MjIzMTAyN11dLCBbWzM3Ljk4MDI5MTU5Njc1MjYxLCAtMS4xMzE1MDY3NjIyMzEwMjddLCBbMzcuOTgwNzc3MDc2NTg0NDIsIC0xLjEzMTM4NTgxMTM2ODIzM11dLCBbWzM3Ljk4MDc3NzA3NjU4NDQyLCAtMS4xMzEzODU4MTEzNjgyMzNdLCBbMzcuOTgwODc1OTgzMDQxODYsIC0xLjEzMTM2ODk2Mzc0Mjg1OF1dLCBbWzM3Ljk4MDg3NTk4MzA0MTg2LCAtMS4xMzEzNjg5NjM3NDI4NThdLCBbMzcuOTgxMjQ2Mzc5MzQzMSwgLTEuMTMxMzI1NDYxNjY1MzY5XV0sIFtbMzcuOTgxMjQ2Mzc5MzQzMSwgLTEuMTMxMzI1NDYxNjY1MzY5XSwgWzM3Ljk4MTI4NTE4NzU1NDc5LCAtMS4xMzEzMjA4NTE2MTg2MjVdXSwgW1szNy45ODEyODUxODc1NTQ3OSwgLTEuMTMxMzIwODUxNjE4NjI1XSwgWzM3Ljk4MTM0MjE4NDQ5NjM4NCwgLTEuMTMxMzUyMDMyMjk4NDUyXV0sIFtbMzcuOTgxMzQyMTg0NDk2Mzg0LCAtMS4xMzEzNTIwMzIyOTg0NTJdLCBbMzcuOTgxNjAxMDE3NjY2MzcsIC0xLjEzMTQ5MzM1MTE4NTk1Ml1dXSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodDogMiwKICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMC41LAogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNC5hZGRMYXllcihtdWx0aV9wb2x5X2xpbmVfYTBiZTgzMjY3NjYyNDZmMGI2MDU0M2QyM2VmNzc5MGIpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81MTE0NWQxZmE3NDE0MzM0YWRjNjM0NjZlMDQwZjBiZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iMDhjZmNhMjk0OTk0OGJiYjJjMzc2MzMxZTZhMWRjOCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYjA4Y2ZjYTI5NDk5NDhiYmIyYzM3NjMzMWU2YTFkYzgiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIENhcnRhZ2VuYSAoWm9uYSA1KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MTE0NWQxZmE3NDE0MzM0YWRjNjM0NjZlMDQwZjBiZC5zZXRDb250ZW50KGh0bWxfYjA4Y2ZjYTI5NDk5NDhiYmIyYzM3NjMzMWU2YTFkYzgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG11bHRpX3BvbHlfbGluZV9hMGJlODMyNjc2NjI0NmYwYjYwNTQzZDIzZWY3NzkwYi5iaW5kUG9wdXAocG9wdXBfNTExNDVkMWZhNzQxNDMzNGFkYzYzNDY2ZTA0MGYwYmQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zODkxZmUxMDJjMmY0ZDY1ODlhZGY4M2MwNWZmZDBhZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4MTUxOTEsLTEuMTMwOTUxNl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzc0MjYxZGMxMzFhMjQyZDA4NDlmZDVkODRhYWFhZjBhID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8zODkxZmUxMDJjMmY0ZDY1ODlhZGY4M2MwNWZmZDBhZS5zZXRJY29uKGljb25fNzQyNjFkYzEzMWEyNDJkMDg0OWZkNWQ4NGFhYWFmMGEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMDJlNTBiYzIyY2U0MmY1OWIyNTRkNDgwMzY1MjUzYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80MGY5NjFhYzFhMTI0ODQ3OWFlNmIwOGViZmE3ZjE3ZiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNDBmOTYxYWMxYTEyNDg0NzlhZTZiMDhlYmZhN2YxN2YiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFBsYXphIENhbWFjaG9zIChab25hIDUpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IwMmU1MGJjMjJjZTQyZjU5YjI1NGQ0ODAzNjUyNTNiLnNldENvbnRlbnQoaHRtbF80MGY5NjFhYzFhMTI0ODQ3OWFlNmIwOGViZmE3ZjE3Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzM4OTFmZTEwMmMyZjRkNjU4OWFkZjgzYzA1ZmZkMGFlLmJpbmRQb3B1cChwb3B1cF9iMDJlNTBiYzIyY2U0MmY1OWIyNTRkNDgwMzY1MjUzYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgbXVsdGlfcG9seV9saW5lXzc1YzhmN2YwMjU3ZTQzYzM5ODkxYTIxNWQ5OTFiZTMzID0gTC5tdWx0aVBvbHlsaW5lKAogICAgICAgICAgICAgICAgICAgIFtbWzM3Ljk4MTU0NDM1NjAwMDkxLCAtMS4xMzA5NDA2NDg0OTA2NzldLCBbMzcuOTgxNTg1MjU5Njg4NDEsIC0xLjEzMDczOTgxODA5MDYzMl1dLCBbWzM3Ljk4MTU4NTI1OTY4ODQxLCAtMS4xMzA3Mzk4MTgwOTA2MzJdLCBbMzcuOTgxNjIwMzc5ODYyNzA0LCAtMS4xMzA2OTkxNjU4NjAyNV1dLCBbWzM3Ljk4MTYyMDM3OTg2MjcwNCwgLTEuMTMwNjk5MTY1ODYwMjVdLCBbMzcuOTgxNjYzMTI3NTY4ODgsIC0xLjEzMDcwMDkyNjA1OTkxNl1dLCBbWzM3Ljk4MTY2MzEyNzU2ODg4LCAtMS4xMzA3MDA5MjYwNTk5MTZdLCBbMzcuOTgxNzc0MDIwMTQ3ODcsIC0xLjEzMDczNjIxMzg3MjI2OF1dLCBbWzM3Ljk4MTc3NDAyMDE0Nzg3LCAtMS4xMzA3MzYyMTM4NzIyNjhdLCBbMzcuOTgxOTEzMTU5NzQwNTQsIC0xLjEzMDc4NTI0ODAwNTg1XV0sIFtbMzcuOTgxOTEzMTU5NzQwNTQsIC0xLjEzMDc4NTI0ODAwNTg1XSwgWzM3Ljk4MTk0ODQ0NzU1MjkyNCwgLTEuMTMwODYyNTI5MTUzMTJdXSwgW1szNy45ODE5NDg0NDc1NTI5MjQsIC0xLjEzMDg2MjUyOTE1MzEyXSwgWzM3Ljk4MTkwMjA5NTYyODM2LCAtMS4xMzEyNDE0NzQ5OTU1OTFdXV0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ6IDIsCiAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNSwKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQuYWRkTGF5ZXIobXVsdGlfcG9seV9saW5lXzc1YzhmN2YwMjU3ZTQzYzM5ODkxYTIxNWQ5OTFiZTMzKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmJiNDNjNmQyMmM1NGQ2NGI3MTMyY2UzMTdhZGM2ZWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjcwOTQ4NDA4MWQ3NDJiNzk1NjEwYTcxMjIxN2E4YzggPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2Y3MDk0ODQwODFkNzQyYjc5NTYxMGE3MTIyMTdhOGM4IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBQbGF6YSBDYW1hY2hvcyAoWm9uYSA1KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82YmI0M2M2ZDIyYzU0ZDY0YjcxMzJjZTMxN2FkYzZlYi5zZXRDb250ZW50KGh0bWxfZjcwOTQ4NDA4MWQ3NDJiNzk1NjEwYTcxMjIxN2E4YzgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG11bHRpX3BvbHlfbGluZV83NWM4ZjdmMDI1N2U0M2MzOTg5MWEyMTVkOTkxYmUzMy5iaW5kUG9wdXAocG9wdXBfNmJiNDNjNmQyMmM1NGQ2NGI3MTMyY2UzMTdhZGM2ZWIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zYTRmYjQ1N2Q2OWE0MjhlOGYxYjU3MDk5MjBmNWNkZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk3ODE4MDUsLTEuMTI5MzkxOV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzZjODNlODY1ZDgyNzQyNWZhYTkyNDgwMDYzYmNmMGVkID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8zYTRmYjQ1N2Q2OWE0MjhlOGYxYjU3MDk5MjBmNWNkZC5zZXRJY29uKGljb25fNmM4M2U4NjVkODI3NDI1ZmFhOTI0ODAwNjNiY2YwZWQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84NDgxNTM1ODUwNzM0ZjhlODg5YzUwMTlmMTYzYmZlZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yY2FmNmEzZDhhNDA0ODY2YWQ3YzI5MWExNTBmMDhiNiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMmNhZjZhM2Q4YTQwNDg2NmFkN2MyOTFhMTUwZjA4YjYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIE5pY2FyYWd1YSAoWm9uYSA1KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NDgxNTM1ODUwNzM0ZjhlODg5YzUwMTlmMTYzYmZlZS5zZXRDb250ZW50KGh0bWxfMmNhZjZhM2Q4YTQwNDg2NmFkN2MyOTFhMTUwZjA4YjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zYTRmYjQ1N2Q2OWE0MjhlOGYxYjU3MDk5MjBmNWNkZC5iaW5kUG9wdXAocG9wdXBfODQ4MTUzNTg1MDczNGY4ZTg4OWM1MDE5ZjE2M2JmZWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIG11bHRpX3BvbHlfbGluZV9hN2I4Mzc1OWM5ZjA0OWUzYTYzOGJiY2YzZTA2NzdmMyA9IEwubXVsdGlQb2x5bGluZSgKICAgICAgICAgICAgICAgICAgICBbW1szNy45Nzc4MTA5NzI1MDgzOTQsIC0xLjEyOTI1Mzg3NDI5NjA0XSwgWzM3Ljk3Nzg2NzEzMTI1OTY3LCAtMS4xMjkyNzI5MDEyMTYyMzldXSwgW1szNy45Nzc4NjcxMzEyNTk2NywgLTEuMTI5MjcyOTAxMjE2MjM5XSwgWzM3Ljk3NzkzMzA5NjgzNzYzLCAtMS4xMjkyOTUyODA4OTc3MzZdXSwgW1szNy45Nzc5MzMwOTY4Mzc2MywgLTEuMTI5Mjk1MjgwODk3NzM2XSwgWzM3Ljk3ODM2NDkzMjQ4OTE0LCAtMS4xMjk0NzMzMTI1MjExMjhdXSwgW1szNy45NzgzNjQ5MzI0ODkxNCwgLTEuMTI5NDczMzEyNTIxMTI4XSwgWzM3Ljk3ODQ0OTA4Njc5NzAxLCAtMS4xMjkxNTA1MjU0Mjk5MDddXSwgW1szNy45Nzg0NDkwODY3OTcwMSwgLTEuMTI5MTUwNTI1NDI5OTA3XSwgWzM3Ljk3ODUwMDEzMjU4NzMzLCAtMS4xMjg5NDU5MjMxNzM0NjFdXSwgW1szNy45Nzg1MDAxMzI1ODczMywgLTEuMTI4OTQ1OTIzMTczNDYxXSwgWzM3Ljk3ODQ5Nzg2OTQ3MzQ2NSwgLTEuMTI4ODQzODMxNTkyODAzXV0sIFtbMzcuOTc4NDk3ODY5NDczNDY1LCAtMS4xMjg4NDM4MzE1OTI4MDNdLCBbMzcuOTc4MzIyNDM2MjQwMDU2LCAtMS4xMjg3Nzc4NjYwMTQ4MTVdXSwgW1szNy45NzgzMjI0MzYyNDAwNTYsIC0xLjEyODc3Nzg2NjAxNDgxNV0sIFszNy45NzgwNzgwMTk5NDM0OTYsIC0xLjEyODY4NTkxNjUzNjk5NV1dLCBbWzM3Ljk3ODA3ODAxOTk0MzQ5NiwgLTEuMTI4Njg1OTE2NTM2OTk1XSwgWzM3Ljk3ODAzMzg0NzMxMzc4LCAtMS4xMjg2NjgxNDY5MDIyNzFdXSwgW1szNy45NzgwMzM4NDczMTM3OCwgLTEuMTI4NjY4MTQ2OTAyMjcxXSwgWzM3Ljk3Nzk3NDMzNTgwMTI2NCwgLTEuMTI4NjQ0MDA3MDIxMTM3XV1dLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OiAyLAogICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0LmFkZExheWVyKG11bHRpX3BvbHlfbGluZV9hN2I4Mzc1OWM5ZjA0OWUzYTYzOGJiY2YzZTA2NzdmMyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzEwZWEyYjljYTk5NDQ4NGE4NmMxYzIyYzVhYWRlMmUyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E3NGExZjI0ZGI2MzRhZDI5M2ZiODRmYTNiOTZjNjhhID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9hNzRhMWYyNGRiNjM0YWQyOTNmYjg0ZmEzYjk2YzY4YSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgTmljYXJhZ3VhIChab25hIDUpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzEwZWEyYjljYTk5NDQ4NGE4NmMxYzIyYzVhYWRlMmUyLnNldENvbnRlbnQoaHRtbF9hNzRhMWYyNGRiNjM0YWQyOTNmYjg0ZmEzYjk2YzY4YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbXVsdGlfcG9seV9saW5lX2E3YjgzNzU5YzlmMDQ5ZTNhNjM4YmJjZjNlMDY3N2YzLmJpbmRQb3B1cChwb3B1cF8xMGVhMmI5Y2E5OTQ0ODRhODZjMWMyMmM1YWFkZTJlMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzNkZDcwYzJlYzE3ZjRiMjM5OGM3MjJhNjFhYzliZWI4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTc4MTE0MiwtMS4xMjgyMTI4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYmI1ZGJmNjBkZTFhNDdkMmI0ZWE5OWM3Zjc2MmJiNjMgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzNkZDcwYzJlYzE3ZjRiMjM5OGM3MjJhNjFhYzliZWI4LnNldEljb24oaWNvbl9iYjVkYmY2MGRlMWE0N2QyYjRlYTk5YzdmNzYyYmI2Myk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVmZWYwNTdiMWY3OTQyMGZhNzU5ZWIzN2ExOWE4ZDU1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIwMDc2ZWI0M2Y5YTQ3NDQ5YmRkYmNkMTQ2YTVkNjBiID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8yMDA3NmViNDNmOWE0NzQ0OWJkZGJjZDE0NmE1ZDYwYiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgQ2FwdWNoaW5vcyAoWm9uYSA1KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZmVmMDU3YjFmNzk0MjBmYTc1OWViMzdhMTlhOGQ1NS5zZXRDb250ZW50KGh0bWxfMjAwNzZlYjQzZjlhNDc0NDliZGRiY2QxNDZhNWQ2MGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zZGQ3MGMyZWMxN2Y0YjIzOThjNzIyYTYxYWM5YmViOC5iaW5kUG9wdXAocG9wdXBfNWZlZjA1N2IxZjc5NDIwZmE3NTllYjM3YTE5YThkNTUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIG11bHRpX3BvbHlfbGluZV84ODcwNWZhYzEzNjI0YTU5OGRjNDg1NTAxMmUxYTRlMiA9IEwubXVsdGlQb2x5bGluZSgKICAgICAgICAgICAgICAgICAgICBbW1szNy45Nzc2Njg5ODMwNjg2NCwgLTEuMTI5ODY5NTI1MDg0MTMyXSwgWzM3Ljk3NzY1NjI0MjU3NTgyLCAtMS4xMjk5MzIzMDU1Mzg5MTVdXSwgW1szNy45Nzc2NTYyNDI1NzU4MiwgLTEuMTI5OTMyMzA1NTM4OTE1XSwgWzM3Ljk3NzU5NjY0NzI0NDI3LCAtMS4xMzAyMjgyNzA1Mzk5NTldXSwgW1szNy45Nzc1OTY2NDcyNDQyNywgLTEuMTMwMjI4MjcwNTM5OTU5XSwgWzM3Ljk3NzU4NzU5NDc4ODgxNSwgLTEuMTMwMjczMDI5OTAyOTI0XV0sIFtbMzcuOTc3NTg3NTk0Nzg4ODE1LCAtMS4xMzAyNzMwMjk5MDI5MjRdLCBbMzcuOTc3NTgwNzIxNjI4MjE1LCAtMS4xMzAzMTAyNDU1NTMwMDVdXSwgW1szNy45Nzc1ODA3MjE2MjgyMTUsIC0xLjEzMDMxMDI0NTU1MzAwNV0sIFszNy45Nzc1MzUwNDAyNTU5MywgLTEuMTMwNTU3OTMwNzkxNzgxXV0sIFtbMzcuOTc3NTM1MDQwMjU1OTMsIC0xLjEzMDU1NzkzMDc5MTc4MV0sIFszNy45Nzc1MjUwNjU3OTExNSwgLTEuMTMwNjEyMjQ1NTI0MzMzXV0sIFtbMzcuOTc3NTI1MDY1NzkxMTUsIC0xLjEzMDYxMjI0NTUyNDMzM10sIFszNy45Nzc1MTQyNTMxMzYwNjQsIC0xLjEzMDY2NjA1NzM0MjcyMl1dLCBbWzM3Ljk3NzUxNDI1MzEzNjA2NCwgLTEuMTMwNjY2MDU3MzQyNzIyXSwgWzM3Ljk3NzQxNTg0OTU5MjgsIC0xLjEzMTE1ODA3NTA1OTAwNV1dXSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodDogMiwKICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMC41LAogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNC5hZGRMYXllcihtdWx0aV9wb2x5X2xpbmVfODg3MDVmYWMxMzYyNGE1OThkYzQ4NTUwMTJlMWE0ZTIpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iOGZkMjIzZWQ4ZDk0NmEyODQ5Yzk0ZGU5NmJlNjc2MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iYWE1MDZhYTliMGQ0N2YzYjBlNzYwODQyZmEwOWIyOSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYmFhNTA2YWE5YjBkNDdmM2IwZTc2MDg0MmZhMDliMjkiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIENhcHVjaGlub3MgKFpvbmEgNSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjhmZDIyM2VkOGQ5NDZhMjg0OWM5NGRlOTZiZTY3NjIuc2V0Q29udGVudChodG1sX2JhYTUwNmFhOWIwZDQ3ZjNiMGU3NjA4NDJmYTA5YjI5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtdWx0aV9wb2x5X2xpbmVfODg3MDVmYWMxMzYyNGE1OThkYzQ4NTUwMTJlMWE0ZTIuYmluZFBvcHVwKHBvcHVwX2I4ZmQyMjNlZDhkOTQ2YTI4NDljOTRkZTk2YmU2NzYyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMDRhYTZmNWZkOWVlNGM4NDllYzE0ZGQxMzgxZGEwMzAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45NzcyNDMyLC0xLjEzMzYwODNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl85ZGY0MTdlYTNiZjM0OWRhYTUwNjg2ZmJhZTExM2YyMiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMDRhYTZmNWZkOWVlNGM4NDllYzE0ZGQxMzgxZGEwMzAuc2V0SWNvbihpY29uXzlkZjQxN2VhM2JmMzQ5ZGFhNTA2ODZmYmFlMTEzZjIyKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTQ4NmFkNzgyNDc1NGJlOTk2NmVkYzFmYjQ1MWQxZDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjBlZjI1OTUzMDdkNDljNTk1MGQxNDk2YjcwNzk4NTcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzIwZWYyNTk1MzA3ZDQ5YzU5NTBkMTQ5NmI3MDc5ODU3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBBY3RvciBKb3NlIENyZXNwbyAoWm9uYSA1KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hNDg2YWQ3ODI0NzU0YmU5OTY2ZWRjMWZiNDUxZDFkMS5zZXRDb250ZW50KGh0bWxfMjBlZjI1OTUzMDdkNDljNTk1MGQxNDk2YjcwNzk4NTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wNGFhNmY1ZmQ5ZWU0Yzg0OWVjMTRkZDEzODFkYTAzMC5iaW5kUG9wdXAocG9wdXBfYTQ4NmFkNzgyNDc1NGJlOTk2NmVkYzFmYjQ1MWQxZDEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIG11bHRpX3BvbHlfbGluZV82OGYxNGRiYTkwY2Y0MWM3OTY2YTM1MmQyNzY4ZTU0MiA9IEwubXVsdGlQb2x5bGluZSgKICAgICAgICAgICAgICAgICAgICBbW1szNy45Nzc0NTI5ODE0MjM4NSwgLTEuMTMyMDQyMTE0Mzg2NzA3XSwgWzM3Ljk3NzQ1MDk2OTc2NzA5LCAtMS4xMzIxMzIzMDM2NjQ4NjFdXSwgW1szNy45Nzc0NTA5Njk3NjcwOSwgLTEuMTMyMTMyMzAzNjY0ODYxXSwgWzM3Ljk3NzQxMDczNjYzMTg3LCAtMS4xMzI0MjMyMzk1MjQwMDJdXSwgW1szNy45Nzc0MTA3MzY2MzE4NywgLTEuMTMyNDIzMjM5NTI0MDAyXSwgWzM3Ljk3NzQwNTQ1NjAzMjg3LCAtMS4xMzI0NjkxNzIzNTM0MV1dLCBbWzM3Ljk3NzQwNTQ1NjAzMjg3LCAtMS4xMzI0NjkxNzIzNTM0MV0sIFszNy45NzczNTc5MzA2NDE4OSwgLTEuMTMyOTA3MDQyOTc1MTc3XV0sIFtbMzcuOTc3MzU3OTMwNjQxODksIC0xLjEzMjkwNzA0Mjk3NTE3N10sIFszNy45NzcyOTAwMzcyMjYxNywgLTEuMTMzNTMxOTEzODU2Nzg1XV0sIFtbMzcuOTc3MjkwMDM3MjI2MTcsIC0xLjEzMzUzMTkxMzg1Njc4NV0sIFszNy45NzcyODAzOTgwMzc1MiwgLTEuMTMzNjMxMTU1NTkwMzM2XV1dLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OiAyLAogICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0LmFkZExheWVyKG11bHRpX3BvbHlfbGluZV82OGYxNGRiYTkwY2Y0MWM3OTY2YTM1MmQyNzY4ZTU0Mik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzcyMTA5MzU5ZTAxZjQ0NGVhNDhkZmEzNzM0Njk4YzAzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NiZmJhMzM0MDRkODQwNmM5YjYwZWZjMTcxOTM2YzM3ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9jYmZiYTMzNDA0ZDg0MDZjOWI2MGVmYzE3MTkzNmMzNyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgQWN0b3IgSm9zZSBDcmVzcG8gKFpvbmEgNSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzIxMDkzNTllMDFmNDQ0ZWE0OGRmYTM3MzQ2OThjMDMuc2V0Q29udGVudChodG1sX2NiZmJhMzM0MDRkODQwNmM5YjYwZWZjMTcxOTM2YzM3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtdWx0aV9wb2x5X2xpbmVfNjhmMTRkYmE5MGNmNDFjNzk2NmEzNTJkMjc2OGU1NDIuYmluZFBvcHVwKHBvcHVwXzcyMTA5MzU5ZTAxZjQ0NGVhNDhkZmEzNzM0Njk4YzAzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNmQxY2ZkZjk3ZmFmNDg0Y2EwNWY1MTA5OTg4YWY2N2QgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45NzU0OTM3LC0xLjEzMzAwMzVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8yZmFjY2Y3M2EwODE0ZWE2YjE2YTgwM2MxYjZlOThmNiA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNmQxY2ZkZjk3ZmFmNDg0Y2EwNWY1MTA5OTg4YWY2N2Quc2V0SWNvbihpY29uXzJmYWNjZjczYTA4MTRlYTZiMTZhODAzYzFiNmU5OGY2KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWUzMjcwNTFiNWIxNGE5YWFlYzY0NjE4MGU1NDg4NDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzM1ZGYxNTQ3ZjY5NDhlYzk0MWRjMDlhYjQzZmVmZjUgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2MzNWRmMTU0N2Y2OTQ4ZWM5NDFkYzA5YWI0M2ZlZmY1IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBBdmVuaWRhIEp1YW4gQW50b25pbyBQZXJlYSAoWm9uYSA1KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lZTMyNzA1MWI1YjE0YTlhYWVjNjQ2MTgwZTU0ODg0MS5zZXRDb250ZW50KGh0bWxfYzM1ZGYxNTQ3ZjY5NDhlYzk0MWRjMDlhYjQzZmVmZjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82ZDFjZmRmOTdmYWY0ODRjYTA1ZjUxMDk5ODhhZjY3ZC5iaW5kUG9wdXAocG9wdXBfZWUzMjcwNTFiNWIxNGE5YWFlYzY0NjE4MGU1NDg4NDEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIG11bHRpX3BvbHlfbGluZV80NDljM2Q4NDQ1YjE0MmY4YjBmOGE3NzU5ZWY1MTNiNiA9IEwubXVsdGlQb2x5bGluZSgKICAgICAgICAgICAgICAgICAgICBbW1szNy45NzUxODkzNjQ2NTI4MzQsIC0xLjEzMTU3MDIxMzIzODAzNV0sIFszNy45NzUyMjUyMzkxOTg0LCAtMS4xMzE2MjQ5NDcwNjU3NzRdXSwgW1szNy45NzUyMjUyMzkxOTg0LCAtMS4xMzE2MjQ5NDcwNjU3NzRdLCBbMzcuOTc1ODM0MzUyMTAyMDMsIC0xLjEzMjU4NTQyOTM1MDQyOF1dLCBbWzM3Ljk3NTgzNDM1MjEwMjAzLCAtMS4xMzI1ODU0MjkzNTA0MjhdLCBbMzcuOTc1ODcxOTg2ODQ3MjYsIC0xLjEzMjY0MjUxMDExMTAyNl1dLCBbWzM3Ljk3NTg3MTk4Njg0NzI2LCAtMS4xMzI2NDI1MTAxMTEwMjZdLCBbMzcuOTc2MDgzNzk3NTQwNDcsIC0xLjEzMjk3MDQxMDE2MzE4Ml1dXSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnYmx1ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodDogMiwKICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMC41LAogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNC5hZGRMYXllcihtdWx0aV9wb2x5X2xpbmVfNDQ5YzNkODQ0NWIxNDJmOGIwZjhhNzc1OWVmNTEzYjYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ODY4Mzk0MDRjMWM0MWE4YjMzOGRiMGRhY2RkYjM0MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82ZDI0ZWI5ZjI0YTU0MGJlYThkNmU2MWQ2MWZlMTJiNSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNmQyNGViOWYyNGE1NDBiZWE4ZDZlNjFkNjFmZTEyYjUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEF2ZW5pZGEgSnVhbiBBbnRvbmlvIFBlcmVhIChab25hIDUpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY4NjgzOTQwNGMxYzQxYThiMzM4ZGIwZGFjZGRiMzQzLnNldENvbnRlbnQoaHRtbF82ZDI0ZWI5ZjI0YTU0MGJlYThkNmU2MWQ2MWZlMTJiNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbXVsdGlfcG9seV9saW5lXzQ0OWMzZDg0NDViMTQyZjhiMGY4YTc3NTllZjUxM2I2LmJpbmRQb3B1cChwb3B1cF82ODY4Mzk0MDRjMWM0MWE4YjMzOGRiMGRhY2RkYjM0Myk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2RmN2VmYmU2MDM1NzRhOTE4OTE4MTE0ZjJhMDhlYjU4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTgwNDUxLC0xLjEzMjQzNTddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl82MjgyMTJkNjBmMTE0YWU5ODQ5MWNkYzM3ODU4ZDM0ZCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZGY3ZWZiZTYwMzU3NGE5MTg5MTgxMTRmMmEwOGViNTguc2V0SWNvbihpY29uXzYyODIxMmQ2MGYxMTRhZTk4NDkxY2RjMzc4NThkMzRkKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjc2MjU1NWQzYjkyNGUwOWIxNmVlMWNiMzQzNTgwNTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjZkYmE0N2JkNTVmNDQ2NmFlZDVjYThmYWVmZTlmNTkgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2Y2ZGJhNDdiZDU1ZjQ0NjZhZWQ1Y2E4ZmFlZmU5ZjU5IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBSb3NhbCAoWm9uYSA1KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iNzYyNTU1ZDNiOTI0ZTA5YjE2ZWUxY2IzNDM1ODA1Mi5zZXRDb250ZW50KGh0bWxfZjZkYmE0N2JkNTVmNDQ2NmFlZDVjYThmYWVmZTlmNTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kZjdlZmJlNjAzNTc0YTkxODkxODExNGYyYTA4ZWI1OC5iaW5kUG9wdXAocG9wdXBfYjc2MjU1NWQzYjkyNGUwOWIxNmVlMWNiMzQzNTgwNTIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIG11bHRpX3BvbHlfbGluZV9lMmVkMGVlMWY5ODE0MzJkYjBmYjAxMTM1ZGU1MDA1YyA9IEwubXVsdGlQb2x5bGluZSgKICAgICAgICAgICAgICAgICAgICBbW1szNy45ODA5NTU3Nzg3NjAwNiwgLTEuMTMyOTE3MDE3NDM5OTc5XSwgWzM3Ljk4MDg3NTE0NDg1MTU1LCAtMS4xMzI5Mzc2MzY5MjE3ODFdXSwgW1szNy45ODA4NzUxNDQ4NTE1NSwgLTEuMTMyOTM3NjM2OTIxNzgxXSwgWzM3Ljk4MDc4NTM3NDY2ODU2LCAtMS4xMzI4ODI4MTkyNzUwMTFdXSwgW1szNy45ODA3ODUzNzQ2Njg1NiwgLTEuMTMyODgyODE5Mjc1MDExXSwgWzM3Ljk4MDcyMjE3NTExODYxNSwgLTEuMTMyNzk3NzQyOTU3ODJdXSwgW1szNy45ODA3MjIxNzUxMTg2MTUsIC0xLjEzMjc5Nzc0Mjk1NzgyXSwgWzM3Ljk4MDY0MzM4NTIyODgsIC0xLjEzMjY5MTcxMTg4MjY3MV1dLCBbWzM3Ljk4MDY0MzM4NTIyODgsIC0xLjEzMjY5MTcxMTg4MjY3MV0sIFszNy45ODA0Njg0NTQ5MDk1NTUsIC0xLjEzMjQ3MjI3MzY1NzU4NF1dLCBbWzM3Ljk4MDQ2ODQ1NDkwOTU1NSwgLTEuMTMyNDcyMjczNjU3NTg0XSwgWzM3Ljk4MDQ1MzUzNTEyMTkxLCAtMS4xMzI0MTMzNDg4NzgyNTldXSwgW1szNy45ODA0NTM1MzUxMjE5MSwgLTEuMTMyNDEzMzQ4ODc4MjU5XSwgWzM3Ljk4MDM3Mzk5MDg2MDgxLCAtMS4xMzIwOTk1MzA0MjM0Nl1dLCBbWzM3Ljk4MDM3Mzk5MDg2MDgxLCAtMS4xMzIwOTk1MzA0MjM0Nl0sIFszNy45ODAzMDE2NTUwMzY0MSwgLTEuMTMxNTg2NzI1NTg3MzEyXV0sIFtbMzcuOTgwMzAxNjU1MDM2NDEsIC0xLjEzMTU4NjcyNTU4NzMxMl0sIFszNy45ODAyOTE1OTY3NTI2MSwgLTEuMTMxNTA2NzYyMjMxMDI3XV1dLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OiAyLAogICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0LmFkZExheWVyKG11bHRpX3BvbHlfbGluZV9lMmVkMGVlMWY5ODE0MzJkYjBmYjAxMTM1ZGU1MDA1Yyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM4MTJhYjIzNDE3ZjQ1OWQ5MDVkODhkZDc3ODJkNThkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VmYzgxOTA3N2VhMjQ1ZDVhYjc0MjBmMjBjYmJiODFiID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9lZmM4MTkwNzdlYTI0NWQ1YWI3NDIwZjIwY2JiYjgxYiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgUm9zYWwgKFpvbmEgNSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzgxMmFiMjM0MTdmNDU5ZDkwNWQ4OGRkNzc4MmQ1OGQuc2V0Q29udGVudChodG1sX2VmYzgxOTA3N2VhMjQ1ZDVhYjc0MjBmMjBjYmJiODFiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtdWx0aV9wb2x5X2xpbmVfZTJlZDBlZTFmOTgxNDMyZGIwZmIwMTEzNWRlNTAwNWMuYmluZFBvcHVwKHBvcHVwXzM4MTJhYjIzNDE3ZjQ1OWQ5MDVkODhkZDc3ODJkNThkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNDkxODgxZTJjMjdiNGY5Zjk0ODEzNWFkNjI1N2U0MjIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45Nzk3NjYzLC0xLjEzMjQ4NzZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl9mN2MzNGFhMDc2ZWQ0MzU4OTI2YWFiZGIzZGY0MjU4ZCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNDkxODgxZTJjMjdiNGY5Zjk0ODEzNWFkNjI1N2U0MjIuc2V0SWNvbihpY29uX2Y3YzM0YWEwNzZlZDQzNTg5MjZhYWJkYjNkZjQyNThkKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmY3YjRjNWY5ODVjNDhlODhkMDJmMDllYWQ4Yjg5ZDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTU2MmVmOGU4ZjQ1NDgxOGIyNjM2MTY1MDg4M2FjZmEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzE1NjJlZjhlOGY0NTQ4MThiMjYzNjE2NTA4ODNhY2ZhIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBNYWRyZSBFbGlzZWEgT2xpdmVyIE1vbGluYSAoWm9uYSA1KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZjdiNGM1Zjk4NWM0OGU4OGQwMmYwOWVhZDhiODlkMS5zZXRDb250ZW50KGh0bWxfMTU2MmVmOGU4ZjQ1NDgxOGIyNjM2MTY1MDg4M2FjZmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80OTE4ODFlMmMyN2I0ZjlmOTQ4MTM1YWQ2MjU3ZTQyMi5iaW5kUG9wdXAocG9wdXBfZmY3YjRjNWY5ODVjNDhlODhkMDJmMDllYWQ4Yjg5ZDEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIG11bHRpX3BvbHlfbGluZV81MTAyNWY4ZGJkN2U0MTFkOTBmZDBkOGRiNDUwMmRmOSA9IEwubXVsdGlQb2x5bGluZSgKICAgICAgICAgICAgICAgICAgICBbW1szNy45ODAzNzM5OTA4NjA4MSwgLTEuMTMyMDk5NTMwNDIzNDZdLCBbMzcuOTgwMTYzOTQwMzY3MjgsIC0xLjEzMjIxOTk3ODM3MjA2M11dLCBbWzM3Ljk4MDE2Mzk0MDM2NzI4LCAtMS4xMzIyMTk5NzgzNzIwNjNdLCBbMzcuOTc5NzY1OTY3NjA0NTgsIC0xLjEzMjQ0ODIxNzU5NTQ4MV1dLCBbWzM3Ljk3OTc2NTk2NzYwNDU4LCAtMS4xMzI0NDgyMTc1OTU0ODFdLCBbMzcuOTc4OTU3NDQ5MjI0NDgsIC0xLjEzMzQxNjc0NjUwNzE4XV0sIFtbMzcuOTc4OTU3NDQ5MjI0NDgsIC0xLjEzMzQxNjc0NjUwNzE4XSwgWzM3Ljk3ODYxNjEzODEyNzI1LCAtMS4xMzMyMjUyMjAwMTk2NTRdXSwgW1szNy45Nzg2MTYxMzgxMjcyNSwgLTEuMTMzMjI1MjIwMDE5NjU0XSwgWzM3Ljk3ODU0ODMyODUzMDU2NSwgLTEuMTMzMTg3MjQ5OTk4Mjg2XV1dLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdibHVlJywKICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OiAyLAogICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0LmFkZExheWVyKG11bHRpX3BvbHlfbGluZV81MTAyNWY4ZGJkN2U0MTFkOTBmZDBkOGRiNDUwMmRmOSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M5OGMwMmNkOWVjMTQ3Yzk4MjlhMGViNDA0MzQyOTRjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY2MDk4MTY1M2ExYzQ0MTViNWQwZjc4ZjNlMzdhY2ZhID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF82NjA5ODE2NTNhMWM0NDE1YjVkMGY3OGYzZTM3YWNmYSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgTWFkcmUgRWxpc2VhIE9saXZlciBNb2xpbmEgKFpvbmEgNSk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzk4YzAyY2Q5ZWMxNDdjOTgyOWEwZWI0MDQzNDI5NGMuc2V0Q29udGVudChodG1sXzY2MDk4MTY1M2ExYzQ0MTViNWQwZjc4ZjNlMzdhY2ZhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtdWx0aV9wb2x5X2xpbmVfNTEwMjVmOGRiZDdlNDExZDkwZmQwZDhkYjQ1MDJkZjkuYmluZFBvcHVwKHBvcHVwX2M5OGMwMmNkOWVjMTQ3Yzk4MjlhMGViNDA0MzQyOTRjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBtdWx0aV9wb2x5X2xpbmVfZjlmYTUwMDdjM2NhNDBlYjgzZTEyM2Y1ODBkOTM5MjkgPSBMLm11bHRpUG9seWxpbmUoCiAgICAgICAgICAgICAgICAgICAgW1tbMzcuOTc3MjI3NDQzOTIyMTA0LCAtMS4xMzM2MTU2NjgzMTI0NjgzXSwgWzM3Ljk3NTQ5MzcsIC0xLjEzMzAwMzVdXSwgW1szNy45NzU0OTM3LCAtMS4xMzMwMDM1XSwgWzM3Ljk3NDk4MjQwMzcyMjc3LCAtMS4xMzAzNTE5MTk2NTk1ODAyXV0sIFtbMzcuOTc0OTgyNDAzNzIyNzcsIC0xLjEzMDM1MTkxOTY1OTU4MDJdLCBbMzcuOTc1MDQzMywgLTEuMTMwMDQ0XV0sIFtbMzcuOTc1MDQzMywgLTEuMTMwMDQ0XSwgWzM3Ljk3NjQ3MDIsIC0xLjEyNzE2MzNdXSwgW1szNy45NzY0NzAyLCAtMS4xMjcxNjMzXSwgWzM3Ljk3NzAzMjQ5NDgxMjA2NSwgLTEuMTI2Njc3OTU2NDU4ODMyXV0sIFtbMzcuOTc3MDMyNDk0ODEyMDY1LCAtMS4xMjY2Nzc5NTY0NTg4MzJdLCBbMzcuOTgwOTk1NjEwNzk4LCAtMS4xMjg1NTU1OTQ3ODQ4MTldXSwgW1szNy45ODA5OTU2MTA3OTgsIC0xLjEyODU1NTU5NDc4NDgxOV0sIFszNy45ODEzMzExLCAtMS4xMjg4MjE5XV0sIFtbMzcuOTgxMzMxMSwgLTEuMTI4ODIxOV0sIFszNy45ODE3OTA2MjY1NTY1NSwgLTEuMTMwODgwMDQzMzAwOTYzNl1dLCBbWzM3Ljk4MTc5MDYyNjU1NjU1LCAtMS4xMzA4ODAwNDMzMDA5NjM2XSwgWzM3Ljk4MDQ1MSwgLTEuMTMyNDM1N11dLCBbWzM3Ljk4MDQ1MSwgLTEuMTMyNDM1N10sIFszNy45Nzg1Nzk2LCAtMS4xMzMxNTUyXV0sIFtbMzcuOTc4NTc5NiwgLTEuMTMzMTU1Ml0sIFszNy45NzcyMjc0NDM5MjIxMDQsIC0xLjEzMzYxNTY2ODMxMjQ2ODNdXV0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ2JsdWUnLAogICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ6IDUsCiAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0LmFkZExheWVyKG11bHRpX3BvbHlfbGluZV9mOWZhNTAwN2MzY2E0MGViODNlMTIzZjU4MGQ5MzkyOSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y2NWE2MDY0NTZkODRmMjFhNGQzYmYwMmI3Y2ZjYTYxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE1ZjRmYjgwYmY5OTQ1NWY4MGRhZTk1NjFlYWJkOWI5ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8xNWY0ZmI4MGJmOTk0NTVmODBkYWU5NTYxZWFiZDliOSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgWm9uYSA1PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y2NWE2MDY0NTZkODRmMjFhNGQzYmYwMmI3Y2ZjYTYxLnNldENvbnRlbnQoaHRtbF8xNWY0ZmI4MGJmOTk0NTVmODBkYWU5NTYxZWFiZDliOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbXVsdGlfcG9seV9saW5lX2Y5ZmE1MDA3YzNjYTQwZWI4M2UxMjNmNTgwZDkzOTI5LmJpbmRQb3B1cChwb3B1cF9mNjVhNjA2NDU2ZDg0ZjIxYTRkM2JmMDJiN2NmY2E2MSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzZlZWM0ZjBhOWI1NTRkZWY4MTRhYjgyNTgxODI2YjFhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTg3Njk4NywtMS4xNDEyOTE5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fMjcxM2EwNjRjZjA2NGE0ODhkNWRhMzlhYWIxOTBjNTYgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl82ZWVjNGYwYTliNTU0ZGVmODE0YWI4MjU4MTgyNmIxYS5zZXRJY29uKGljb25fMjcxM2EwNjRjZjA2NGE0ODhkNWRhMzlhYWIxOTBjNTYpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hMTZhYzY1OTE1OWU0ZTZhOWY0YzFiYjhlZjRjY2QzMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xOTVjOWU1NGNhZGI0N2I5YTA5NGUzNTFjMTQyNmJmOSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMTk1YzllNTRjYWRiNDdiOWEwOTRlMzUxYzE0MjZiZjkiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIGRlIGxhIE9sbWEgKFpvbmEgNCk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTE2YWM2NTkxNTllNGU2YTlmNGMxYmI4ZWY0Y2NkMzMuc2V0Q29udGVudChodG1sXzE5NWM5ZTU0Y2FkYjQ3YjlhMDk0ZTM1MWMxNDI2YmY5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNmVlYzRmMGE5YjU1NGRlZjgxNGFiODI1ODE4MjZiMWEuYmluZFBvcHVwKHBvcHVwX2ExNmFjNjU5MTU5ZTRlNmE5ZjRjMWJiOGVmNGNjZDMzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBtdWx0aV9wb2x5X2xpbmVfZTBkZDdjMmQ5NTUxNGZmODhmYzA4ODgzOTNjOTU0NGIgPSBMLm11bHRpUG9seWxpbmUoCiAgICAgICAgICAgICAgICAgICAgW1tbMzcuOTg3MDU5NDgwNjUxMDMsIC0xLjE0MjcwMzMwODQ5MDIxMl0sIFszNy45ODcxMjgyOTYwNzYwOTQsIC0xLjE0MjY2NTQyMjI4Nzg0OF1dLCBbWzM3Ljk4NzEyODI5NjA3NjA5NCwgLTEuMTQyNjY1NDIyMjg3ODQ4XSwgWzM3Ljk4NzIxOTMyMzU0NDU0LCAtMS4xNDI0NTE0MzIyOTk4NV1dLCBbWzM3Ljk4NzIxOTMyMzU0NDU0LCAtMS4xNDI0NTE0MzIyOTk4NV0sIFszNy45ODczNjEyMjkxNjUyNiwgLTEuMTQyMTE2MjM5OTkxOTM1XV0sIFtbMzcuOTg3MzYxMjI5MTY1MjYsIC0xLjE0MjExNjIzOTk5MTkzNV0sIFszNy45ODc1NDg1NjQ3MDEyLCAtMS4xNDE2NTI2MzY5Mjc0MDRdXSwgW1szNy45ODc1NDg1NjQ3MDEyLCAtMS4xNDE2NTI2MzY5Mjc0MDRdLCBbMzcuOTg3ODA0NDY0MjA1MDg0LCAtMS4xNDA5NjUwNjk0MTAwNzJdXV0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OiAyLAogICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0LmFkZExheWVyKG11bHRpX3BvbHlfbGluZV9lMGRkN2MyZDk1NTE0ZmY4OGZjMDg4ODM5M2M5NTQ0Yik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVmN2YyMzFhNGE4YjQwNjk4N2NiMzBjZWRjYmZkNmFlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y0ZjNkMDM0OTRlZDQ2ZjM5M2UzNmY3ZDY2MDM3MzQxID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9mNGYzZDAzNDk0ZWQ0NmYzOTNlMzZmN2Q2NjAzNzM0MSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgZGUgbGEgT2xtYSAoWm9uYSA0KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZjdmMjMxYTRhOGI0MDY5ODdjYjMwY2VkY2JmZDZhZS5zZXRDb250ZW50KGh0bWxfZjRmM2QwMzQ5NGVkNDZmMzkzZTM2ZjdkNjYwMzczNDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG11bHRpX3BvbHlfbGluZV9lMGRkN2MyZDk1NTE0ZmY4OGZjMDg4ODM5M2M5NTQ0Yi5iaW5kUG9wdXAocG9wdXBfNWY3ZjIzMWE0YThiNDA2OTg3Y2IzMGNlZGNiZmQ2YWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80OThmOTE0MzQ2NDY0ZTJjYTJkYzA2NmMwNjFjOGM1NyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4NTEwNDgsLTEuMTM5MzI0OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgIHZhciBpY29uXzE4ZGY4ODRhZjc0NjRiODA4MDNiNzA5MzNlNTYxN2IyID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKHsKICAgICAgICAgICAgICAgICAgICBpY29uOiAnTm9uZScsCiAgICAgICAgICAgICAgICAgICAgaWNvbkNvbG9yOiAnd2hpdGUnLAogICAgICAgICAgICAgICAgICAgIG1hcmtlckNvbG9yOiAnZ3JlZW4nLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogJ2dseXBoaWNvbicsCiAgICAgICAgICAgICAgICAgICAgZXh0cmFDbGFzc2VzOiAnZmEtcm90YXRlLTAnCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNDk4ZjkxNDM0NjQ2NGUyY2EyZGMwNjZjMDYxYzhjNTcuc2V0SWNvbihpY29uXzE4ZGY4ODRhZjc0NjRiODA4MDNiNzA5MzNlNTYxN2IyKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDUyMTczZDJjZDVjNDVjOWFmZDZmODVmNjYzNzI0ZDcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTIzZDRmYWQ2NDA3NDVmYjhlNWZjODBlM2YyZjI1MDggPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2UyM2Q0ZmFkNjQwNzQ1ZmI4ZTVmYzgwZTNmMmYyNTA4IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYWxsZSBkZSBsb3MgQm9sb3MgKFpvbmEgNCk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDUyMTczZDJjZDVjNDVjOWFmZDZmODVmNjYzNzI0ZDcuc2V0Q29udGVudChodG1sX2UyM2Q0ZmFkNjQwNzQ1ZmI4ZTVmYzgwZTNmMmYyNTA4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNDk4ZjkxNDM0NjQ2NGUyY2EyZGMwNjZjMDYxYzhjNTcuYmluZFBvcHVwKHBvcHVwX2Q1MjE3M2QyY2Q1YzQ1YzlhZmQ2Zjg1ZjY2MzcyNGQ3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBtdWx0aV9wb2x5X2xpbmVfYmQzNGU3NzQ5MjUzNDdlZGJiMDdjZDUzNTU4M2IxNDQgPSBMLm11bHRpUG9seWxpbmUoCiAgICAgICAgICAgICAgICAgICAgW1tbMzcuOTg1NTQ2Nzk4NTg1MjksIC0xLjEzNzc5Mzc3NjM0NDM4MV0sIFszNy45ODUzMzEzODM2NzM3NSwgLTEuMTM4NDU4NjI4OTA0MDldXSwgW1szNy45ODUzMzEzODM2NzM3NSwgLTEuMTM4NDU4NjI4OTA0MDldLCBbMzcuOTg1MjMzNzM0NTAxNzc2LCAtMS4xMzg3ODQxODIwMjMzNThdXSwgW1szNy45ODUyMzM3MzQ1MDE3NzYsIC0xLjEzODc4NDE4MjAyMzM1OF0sIFszNy45ODUxODc5NjkzMTA0MjQsIC0xLjEzODk4ODExMzcyNzU3OF1dLCBbWzM3Ljk4NTE4Nzk2OTMxMDQyNCwgLTEuMTM4OTg4MTEzNzI3NTc4XSwgWzM3Ljk4NTE3MDE5OTY3NTcxLCAtMS4xMzkxMDk5MDI3ODA2ODldXV0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OiAyLAogICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0LmFkZExheWVyKG11bHRpX3BvbHlfbGluZV9iZDM0ZTc3NDkyNTM0N2VkYmIwN2NkNTM1NTgzYjE0NCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I5Y2QzYzJjMThlMTQwNDk5MWNhN2Y2OTQwMWRjZWI3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc1MjNmMjQ4MWM2ZDQ1YjU5NjIyZGJmY2EyOTY5ZGZjID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF83NTIzZjI0ODFjNmQ0NWI1OTYyMmRiZmNhMjk2OWRmYyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgZGUgbG9zIEJvbG9zIChab25hIDQpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I5Y2QzYzJjMThlMTQwNDk5MWNhN2Y2OTQwMWRjZWI3LnNldENvbnRlbnQoaHRtbF83NTIzZjI0ODFjNmQ0NWI1OTYyMmRiZmNhMjk2OWRmYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbXVsdGlfcG9seV9saW5lX2JkMzRlNzc0OTI1MzQ3ZWRiYjA3Y2Q1MzU1ODNiMTQ0LmJpbmRQb3B1cChwb3B1cF9iOWNkM2MyYzE4ZTE0MDQ5OTFjYTdmNjk0MDFkY2ViNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzhhZjEwOGM1MjNhNTQ5MDJiYjRhMDMzZGI0YjFkNDMyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTg1MDE2MiwtMS4xMzYxNDg3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNjJkNGYyZDkyZGQ5NDNjNmE0YmFmM2Q0MGEyMzFiOWUgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl84YWYxMDhjNTIzYTU0OTAyYmI0YTAzM2RiNGIxZDQzMi5zZXRJY29uKGljb25fNjJkNGYyZDkyZGQ5NDNjNmE0YmFmM2Q0MGEyMzFiOWUpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ZjI0OTZkMjZmZDk0YmE2YWEzZGIyZDUwZmQ3OTUxZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mM2RkMWYyMzY0ZTM0ZjNlYmQ3YmNhNTBhZTM2MjRkMSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZjNkZDFmMjM2NGUzNGYzZWJkN2JjYTUwYWUzNjI0ZDEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIGNhbGxlIFNhZ2FzdGEgKFpvbmEgNCk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmYyNDk2ZDI2ZmQ5NGJhNmFhM2RiMmQ1MGZkNzk1MWUuc2V0Q29udGVudChodG1sX2YzZGQxZjIzNjRlMzRmM2ViZDdiY2E1MGFlMzYyNGQxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOGFmMTA4YzUyM2E1NDkwMmJiNGEwMzNkYjRiMWQ0MzIuYmluZFBvcHVwKHBvcHVwXzZmMjQ5NmQyNmZkOTRiYTZhYTNkYjJkNTBmZDc5NTFlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBtdWx0aV9wb2x5X2xpbmVfODM4ZjI5YzBjOTE4NGNkZmExZjRkMDU3OWYxNjljYTMgPSBMLm11bHRpUG9seWxpbmUoCiAgICAgICAgICAgICAgICAgICAgW1tbMzcuOTg0ODIyNzY5Nzg5MTYsIC0xLjEzNjA1Mzc3NzA2NDYwM10sIFszNy45ODQ3MTY4MjI1MzMwNywgLTEuMTM1OTg3NTYwMDI5NTJdXV0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OiAyLAogICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0LmFkZExheWVyKG11bHRpX3BvbHlfbGluZV84MzhmMjljMGM5MTg0Y2RmYTFmNGQwNTc5ZjE2OWNhMyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QxOWM5NWE5NmZhNjRiOGZiMzU1OTdjZjY4OTcwM2YyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM1Yjk4OTUyYjc1NDQ5MTViNmRkZGY1YzFjMzIxYTFhID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8zNWI5ODk1MmI3NTQ0OTE1YjZkZGRmNWMxYzMyMWExYSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgY2FsbGUgU2FnYXN0YSAoWm9uYSA0KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kMTljOTVhOTZmYTY0YjhmYjM1NTk3Y2Y2ODk3MDNmMi5zZXRDb250ZW50KGh0bWxfMzViOTg5NTJiNzU0NDkxNWI2ZGRkZjVjMWMzMjFhMWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG11bHRpX3BvbHlfbGluZV84MzhmMjljMGM5MTg0Y2RmYTFmNGQwNTc5ZjE2OWNhMy5iaW5kUG9wdXAocG9wdXBfZDE5Yzk1YTk2ZmE2NGI4ZmIzNTU5N2NmNjg5NzAzZjIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wYTYwYTZlNjA0NWY0ZTg4OGY5OWU4ZmFmYjQ1YzE3ZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3Ljk4Njc3MTgsLTEuMTM5MzI0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fNWEzODk0ZmQ0M2ZiNDMyNGJmZmNhYzM0MDVlMzY5MTEgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8wYTYwYTZlNjA0NWY0ZTg4OGY5OWU4ZmFmYjQ1YzE3ZC5zZXRJY29uKGljb25fNWEzODk0ZmQ0M2ZiNDMyNGJmZmNhYzM0MDVlMzY5MTEpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMzFmY2NjNzc3NWM0ZDNkODI5MTQ3ZTdhMjEwNGEwMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNDM2ZjUwODk0YzM0YmI2YjkwMDE5MTljMDNjMTExYSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYjQzNmY1MDg5NGMzNGJiNmI5MDAxOTE5YzAzYzExMWEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIGRlbCBEb2N0b3IgSmVzdXMgUXVlc2FkYSBTYW56IChab25hIDQpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAzMWZjY2M3Nzc1YzRkM2Q4MjkxNDdlN2EyMTA0YTAxLnNldENvbnRlbnQoaHRtbF9iNDM2ZjUwODk0YzM0YmI2YjkwMDE5MTljMDNjMTExYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzBhNjBhNmU2MDQ1ZjRlODg4Zjk5ZThmYWZiNDVjMTdkLmJpbmRQb3B1cChwb3B1cF8wMzFmY2NjNzc3NWM0ZDNkODI5MTQ3ZTdhMjEwNGEwMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgbXVsdGlfcG9seV9saW5lXzJiOTM1MGE1NGRhOTQyOTliYzVmYWUzYjY2NzQ5ZjU2ID0gTC5tdWx0aVBvbHlsaW5lKAogICAgICAgICAgICAgICAgICAgIFtbWzM3Ljk4NjkyNDY5OTY0OCwgLTEuMTM4MTM3NTE4MTkzNTMxXSwgWzM3Ljk4NjkyMjE4NTA3NzA1LCAtMS4xMzgyOTQwMDgzMjU3NzJdXSwgW1szNy45ODY5MjIxODUwNzcwNSwgLTEuMTM4Mjk0MDA4MzI1NzcyXSwgWzM3Ljk4Njg0MTYzNDk4NzU0LCAtMS4xMzg3MTA2NzI3MzI1NDNdXSwgW1szNy45ODY4NDE2MzQ5ODc1NCwgLTEuMTM4NzEwNjcyNzMyNTQzXSwgWzM3Ljk4NjgxNzY2Mjc0NDQ3LCAtMS4xMzg4NjY4Mjc1ODg2NTddXSwgW1szNy45ODY4MTc2NjI3NDQ0NywgLTEuMTM4ODY2ODI3NTg4NjU3XSwgWzM3Ljk4Njc1MzQ1NzM2NjE1LCAtMS4xMzkxMzcwNjAxNDY5NjRdXSwgW1szNy45ODY3NTM0NTczNjYxNSwgLTEuMTM5MTM3MDYwMTQ2OTY0XSwgWzM3Ljk4NjYwMjE2NDAxMzg3LCAtMS4xNDAwNzE4MDk5ODg4ODJdXSwgW1szNy45ODY2MDIxNjQwMTM4NywgLTEuMTQwMDcxODA5OTg4ODgyXSwgWzM3Ljk4NjU5Nzg4OTI0MzI2LCAtMS4xNDAwOTgzODA2MjE5MzZdXV0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OiAyLAogICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0LmFkZExheWVyKG11bHRpX3BvbHlfbGluZV8yYjkzNTBhNTRkYTk0Mjk5YmM1ZmFlM2I2Njc0OWY1Nik7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQzMDA0MzdkMzRlNjRmMTI4MWM4M2ZjZWFiMzY4NmFlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMxMDIwZGFhZDljYjRkZTI5MTc1MTFmYzA0OGU3YmY3ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8zMTAyMGRhYWQ5Y2I0ZGUyOTE3NTExZmMwNDhlN2JmNyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgZGVsIERvY3RvciBKZXN1cyBRdWVzYWRhIFNhbnogKFpvbmEgNCk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDMwMDQzN2QzNGU2NGYxMjgxYzgzZmNlYWIzNjg2YWUuc2V0Q29udGVudChodG1sXzMxMDIwZGFhZDljYjRkZTI5MTc1MTFmYzA0OGU3YmY3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtdWx0aV9wb2x5X2xpbmVfMmI5MzUwYTU0ZGE5NDI5OWJjNWZhZTNiNjY3NDlmNTYuYmluZFBvcHVwKHBvcHVwXzQzMDA0MzdkMzRlNjRmMTI4MWM4M2ZjZWFiMzY4NmFlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMWEyZjg2M2Q4NDQwNDI5ZWJjY2JlNzA5ZGQ5MjgyM2MgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODI3NTg2LC0xLjEzODI3MDNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8zMTU5ZWVkODlkNGM0ODMzOTFhMzVhNzg3YTM0MDVmMCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzFhMmY4NjNkODQ0MDQyOWViY2NiZTcwOWRkOTI4MjNjLnNldEljb24oaWNvbl8zMTU5ZWVkODlkNGM0ODMzOTFhMzVhNzg3YTM0MDVmMCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U3ZTNmZGI2ZDUxYjQzMDY4OWQxNWQwYzg3NmQxNGIzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MyMmJhYmQ2YmJiMjQ1YjBhY2E3NTE1ODkwYWQzM2M5ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9jMjJiYWJkNmJiYjI0NWIwYWNhNzUxNTg5MGFkMzNjOSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgUGludG9yIFNvYmVqYW5vIChab25hIDQpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U3ZTNmZGI2ZDUxYjQzMDY4OWQxNWQwYzg3NmQxNGIzLnNldENvbnRlbnQoaHRtbF9jMjJiYWJkNmJiYjI0NWIwYWNhNzUxNTg5MGFkMzNjOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzFhMmY4NjNkODQ0MDQyOWViY2NiZTcwOWRkOTI4MjNjLmJpbmRQb3B1cChwb3B1cF9lN2UzZmRiNmQ1MWI0MzA2ODlkMTVkMGM4NzZkMTRiMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgbXVsdGlfcG9seV9saW5lX2I2ZDMyNjRhYjkxNTQzMjI5Y2RjMTEzYzI1YTFhYjU4ID0gTC5tdWx0aVBvbHlsaW5lKAogICAgICAgICAgICAgICAgICAgIFtbWzM3Ljk4MzAxMDM1MDg2NTk1LCAtMS4xMzcwMTIxNjM4NzM0MzZdLCBbMzcuOTgzMDE4ODE2NTg4MTYsIC0xLjEzNzMwMTc1ODYyODA5OF1dLCBbWzM3Ljk4MzAxODgxNjU4ODE2LCAtMS4xMzczMDE3NTg2MjgwOThdLCBbMzcuOTgyNzk3NjE4MTYzNDI0LCAtMS4xMzgyODA0Mjk2NDI2MzRdXV0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0OiAyLAogICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjUsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFwX2Q1ZWNiMDFiMzZjZjRjMjhiZWIwNTNjOTJmNGQ1YWU0LmFkZExheWVyKG11bHRpX3BvbHlfbGluZV9iNmQzMjY0YWI5MTU0MzIyOWNkYzExM2MyNWExYWI1OCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ4M2Y3ZTcyYzM4NDQ0YjliMDlkOTY5NTBkZmY3NmEyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhlODRlZGM1ZjFmZTRmMzQ4YmE5ZDQxMzJkOGY2ZjQ2ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF84ZTg0ZWRjNWYxZmU0ZjM0OGJhOWQ0MTMyZDhmNmY0NiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgUGludG9yIFNvYmVqYW5vIChab25hIDQpPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ4M2Y3ZTcyYzM4NDQ0YjliMDlkOTY5NTBkZmY3NmEyLnNldENvbnRlbnQoaHRtbF84ZTg0ZWRjNWYxZmU0ZjM0OGJhOWQ0MTMyZDhmNmY0Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbXVsdGlfcG9seV9saW5lX2I2ZDMyNjRhYjkxNTQzMjI5Y2RjMTEzYzI1YTFhYjU4LmJpbmRQb3B1cChwb3B1cF80ODNmN2U3MmMzODQ0NGI5YjA5ZDk2OTUwZGZmNzZhMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzVhOGQzMzNjODIyOTQxYzE5OTlhY2Y1MTA4ZTQ3NjRiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuOTg5NDkwOSwtMS4xNDIzNjM4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZDVlY2IwMWIzNmNmNGMyOGJlYjA1M2M5MmY0ZDVhZTQpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICAgICAgdmFyIGljb25fYjg3NDNhMGUxZTU3NDAyM2JhNjc2M2FmYzAyNWMwZjkgPSBMLkF3ZXNvbWVNYXJrZXJzLmljb24oewogICAgICAgICAgICAgICAgICAgIGljb246ICdOb25lJywKICAgICAgICAgICAgICAgICAgICBpY29uQ29sb3I6ICd3aGl0ZScsCiAgICAgICAgICAgICAgICAgICAgbWFya2VyQ29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnZ2x5cGhpY29uJywKICAgICAgICAgICAgICAgICAgICBleHRyYUNsYXNzZXM6ICdmYS1yb3RhdGUtMCcKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl81YThkMzMzYzgyMjk0MWMxOTk5YWNmNTEwOGU0NzY0Yi5zZXRJY29uKGljb25fYjg3NDNhMGUxZTU3NDAyM2JhNjc2M2FmYzAyNWMwZjkpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81MjUwZmJmYTRjNjc0ZWU2ODhhYjM1YTk2MDJlYTIzYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNTM3ZGNjY2ZkYjY0ZTViOTllNTQ5MGExYzY3ODFkNCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZTUzN2RjY2NmZGI2NGU1Yjk5ZTU0OTBhMWM2NzgxZDQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIGRlIGxhcyBOb3JpYXMgKFpvbmEgNCk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTI1MGZiZmE0YzY3NGVlNjg4YWIzNWE5NjAyZWEyM2Iuc2V0Q29udGVudChodG1sX2U1MzdkY2NjZmRiNjRlNWI5OWU1NDkwYTFjNjc4MWQ0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNWE4ZDMzM2M4MjI5NDFjMTk5OWFjZjUxMDhlNDc2NGIuYmluZFBvcHVwKHBvcHVwXzUyNTBmYmZhNGM2NzRlZTY4OGFiMzVhOTYwMmVhMjNiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBtdWx0aV9wb2x5X2xpbmVfM2UyMzhkMTM0N2ZhNDQ1OGE2Y2YxNDZmYTQyODljYmMgPSBMLm11bHRpUG9seWxpbmUoCiAgICAgICAgICAgICAgICAgICAgW1tbMzcuOTg5NDc0MTM5MzE3MjUsIC0xLjE0MjM2MTkxMzU3Mzk1XSwgWzM3Ljk4OTY2Njc1NTQ1MjE5LCAtMS4xNDE5MDg5NTU1MjY0NDZdXSwgW1szNy45ODk2NjY3NTU0NTIxOSwgLTEuMTQxOTA4OTU1NTI2NDQ2XSwgWzM3Ljk4OTcyODQ0NjI1OTUzNCwgLTEuMTQxNzYzNzgwOTYzNDg3XV0sIFtbMzcuOTg5NzI4NDQ2MjU5NTM0LCAtMS4xNDE3NjM3ODA5NjM0ODddLCBbMzcuOTg5ODcxNzc2ODAzNzk1LCAtMS4xNDE0MjY2NjA4MTc4NDJdXSwgW1szNy45ODk4NzE3NzY4MDM3OTUsIC0xLjE0MTQyNjY2MDgxNzg0Ml0sIFszNy45ODk5MzM1NTE0MzAyLCAtMS4xNDEyODExNTA5Nzg3NTZdXSwgW1szNy45ODk5MzM1NTE0MzAyLCAtMS4xNDEyODExNTA5Nzg3NTZdLCBbMzcuOTg5OTY0OTgzNTY3MDg0LCAtMS4xNDEyMDc0NzQwNDk4NV1dLCBbWzM3Ljk4OTk2NDk4MzU2NzA4NCwgLTEuMTQxMjA3NDc0MDQ5ODVdLCBbMzcuOTkwMDgyOTE2OTQ0NzQsIC0xLjE0MDkyOTc4MTU5NzcyXV0sIFtbMzcuOTkwMDgyOTE2OTQ0NzQsIC0xLjE0MDkyOTc4MTU5NzcyXSwgWzM3Ljk5MDIxMDMyMTg3Mjk4LCAtMS4xNDA2MzAyMTIzNzgyODRdXSwgW1szNy45OTAyMTAzMjE4NzI5OCwgLTEuMTQwNjMwMjEyMzc4Mjg0XSwgWzM3Ljk5MDM3NTc4MDY0MTYxNCwgLTEuMTQwMjQxMDQwNjEzOTQ0XV1dLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdncmVlbicsCiAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodDogMiwKICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMC41LAogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNC5hZGRMYXllcihtdWx0aV9wb2x5X2xpbmVfM2UyMzhkMTM0N2ZhNDQ1OGE2Y2YxNDZmYTQyODljYmMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNzI3NDYzZDE4Mzc0NTUwOWQyYzVlYzJhZTM3ODAyYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NTM0OGM2NTU5NDY0Nzk0OWYyM2QzMmYxNTc5OTJjOSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNjUzNDhjNjU1OTQ2NDc5NDlmMjNkMzJmMTU3OTkyYzkiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhbGxlIGRlIGxhcyBOb3JpYXMgKFpvbmEgNCk8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzcyNzQ2M2QxODM3NDU1MDlkMmM1ZWMyYWUzNzgwMmEuc2V0Q29udGVudChodG1sXzY1MzQ4YzY1NTk0NjQ3OTQ5ZjIzZDMyZjE1Nzk5MmM5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtdWx0aV9wb2x5X2xpbmVfM2UyMzhkMTM0N2ZhNDQ1OGE2Y2YxNDZmYTQyODljYmMuYmluZFBvcHVwKHBvcHVwXzM3Mjc0NjNkMTgzNzQ1NTA5ZDJjNWVjMmFlMzc4MDJhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTBlMTg3ZjdlNTc1NGUyZWFkY2ZiZThkZTEzMTlkYWIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy45ODk0OTA5LC0xLjE0MjM2MzhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9kNWVjYjAxYjM2Y2Y0YzI4YmViMDUzYzkyZjRkNWFlNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgaWNvbl8xZTdiNjVhMDg5NzY0ZDQwOGJkYTg1OTc0ZWE0ZWJiNCA9IEwuQXdlc29tZU1hcmtlcnMuaWNvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ05vbmUnLAogICAgICAgICAgICAgICAgICAgIGljb25Db2xvcjogJ3doaXRlJywKICAgICAgICAgICAgICAgICAgICBtYXJrZXJDb2xvcjogJ2dyZWVuJywKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6ICdnbHlwaGljb24nLAogICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3NlczogJ2ZhLXJvdGF0ZS0wJwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzkwZTE4N2Y3ZTU3NTRlMmVhZGNmYmU4ZGUxMzE5ZGFiLnNldEljb24oaWNvbl8xZTdiNjVhMDg5NzY0ZDQwOGJkYTg1OTc0ZWE0ZWJiNCk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ExNTdiNDY1YjA5YTRjY2RiNjI5OTE0MWEwYzYyN2NiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M0Y2Y3N2U0NzE2YTQ0MmI5ZWQxNTk1NGJjZDY2YjNmID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9jNGNmNzdlNDcxNmE0NDJiOWVkMTU5NTRiY2Q2NmIzZiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FsbGUgT2xvZiBQYWxtZSAoWm9uYSA0KTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hMTU3YjQ2NWIwOWE0Y2NkYjYyOTkxNDFhMGM2MjdjYi5zZXRDb250ZW50KGh0bWxfYzRjZjc3ZTQ3MTZhNDQyYjllZDE1OTU0YmNkNjZiM2YpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85MGUxODdmN2U1NzU0ZTJlYWRjZmJlOGRlMTMxOWRhYi5iaW5kUG9wdXAocG9wdXBfYTE1N2I0NjViMDlhNGNjZGI2Mjk5MTQxYTBjNjI3Y2IpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIG11bHRpX3BvbHlfbGluZV9iZTUxODRhM2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment