Skip to content

Instantly share code, notes, and snippets.

@psychemedia
Last active February 28, 2019 11:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save psychemedia/5656aaa5216b5ca55c96c97a5f3d4372 to your computer and use it in GitHub Desktop.
Save psychemedia/5656aaa5216b5ca55c96c97a5f3d4372 to your computer and use it in GitHub Desktop.
Simple demos of running spatialite within queries using datasette api
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Searching for Locations Within an Area Using SpatiaLite\n",
"\n",
"As as spatial database, *SpatiaLite* supports geospatial queries, such as identifying locations that exist *within* a particular spatially defined area.\n",
"\n",
"This notebook provides some simple examples of searching for locations of establishments rated by the UK Food Standards Agency.\n",
"\n",
"The search context is based on three *SpatiaLite* tables:\n",
"\n",
"- a table containing shapefiles specifying the area the establishments should be located within;\n",
"- a spatial index table corresponding to the shapefile table that contains bounding box limits for shapefile areas to allow a preliminary quick search;\n",
"- a table containing point locations, some of which hope to dientify as being located within the specified area."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import oifsa, sqlite3"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The boundary files we'll use come from the Ordnance Survey *BoundaryLine* product. In particular, we'll be searching within parish boundaries."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"dbname='adminboundaries.db'\n",
"conn = sqlite3.connect(dbname)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"#Handy utility function\n",
"def droptable(conn,table):\n",
" cursor = conn.cursor()\n",
" cursor.execute('''DROP TABLE IF EXISTS {}'''.format(table))\n",
" conn.commit()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Point Location Data\n",
"\n",
"The point location data is loaded from a data file published by the Food Standards Agency."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"#Name oftable for the point location data\n",
"table = 'foodratings'\n",
"#droptable(conn,table)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#wight /via http://ratings.food.gov.uk/open-data/en-GB\n",
"url='http://ratings.food.gov.uk/OpenDataFiles/FHRS867en-GB.xml'\n",
"\n",
"#Grab the data using the ouseful data supply food-gov-uk package\n",
"# https://github.com/ouseful-datasupply/food_gov_uk\n",
"oifsa.save_fsa_data(url, conn, table, delay=1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"*Note that the foodgov co-ordinates seem to be postcode centroid locations, or some other area based value, and as such are not very accurate.*\n",
"\n",
"*It would perhaps be better to use OpenStreetMap to re-geocode the locations from provided addresses?*"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Modify the ratings table with a column that allows for the storage of point location data as a *Geometry* and use the latitide and longitude columns as the basis for the points. Use EPSG / CRSID 4326 ([WGS64](http://spatialreference.org/ref/epsg/wgs-84/)) as the projection."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\r\n",
"BEGIN;\r\n",
"-- We need to ensure we have a spatial table set up\r\n",
"SELECT InitSpatialMetaData();\r\n",
"SELECT AddGeometryColumn('foodratings', 'Geometry', 4326, 'POINT', 2);\r\n",
"UPDATE foodratings SET Geometry = GeomFromText('POINT('||\"Longitude\"||' '||\"Latitude\"||')',4326);\r\n",
"COMMIT;\r\n"
]
}
],
"source": [
"addPointFromLatLon ='''\n",
"BEGIN;\n",
"SELECT AddGeometryColumn('{table}', 'Geometry', 4326, 'POINT', 2);\n",
"UPDATE {table} SET Geometry = GeomFromText('POINT('||\"Longitude\"||' '||\"Latitude\"||')',4326);\n",
"COMMIT;\n",
"'''.format(table=table)\n",
"\n",
"with open(\"addpointFromLatLon.sql\", \"w\") as sqlfile:\n",
" sqlfile.write(addPointFromLatLon)\n",
" \n",
"!cat addpointFromLatLon.sql"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"SpatiaLite version ..: 4.3.0a\tSupported Extensions:\n",
"\t- 'VirtualShape'\t[direct Shapefile access]\n",
"\t- 'VirtualDbf'\t\t[direct DBF access]\n",
"\t- 'VirtualXL'\t\t[direct XLS access]\n",
"\t- 'VirtualText'\t\t[direct CSV/TXT access]\n",
"\t- 'VirtualNetwork'\t[Dijkstra shortest path]\n",
"\t- 'RTree'\t\t[Spatial Index - R*Tree]\n",
"\t- 'MbrCache'\t\t[Spatial Index - MBR cache]\n",
"\t- 'VirtualSpatialIndex'\t[R*Tree metahandler]\n",
"\t- 'VirtualElementary'\t[ElemGeoms metahandler]\n",
"\t- 'VirtualXPath'\t[XML Path Language - XPath]\n",
"\t- 'VirtualFDO'\t\t[FDO-OGR interoperability]\n",
"\t- 'VirtualGPKG'\t[OGC GeoPackage interoperability]\n",
"\t- 'VirtualBBox'\t\t[BoundingBox tables]\n",
"\t- 'SpatiaLite'\t\t[Spatial SQL - OGC]\n",
"PROJ.4 version ......: Rel. 5.1.0, June 1st, 2018\n",
"GEOS version ........: 3.6.2-CAPI-1.10.2 4d2925d6\n",
"TARGET CPU ..........: x86_64-apple-darwin17.3.0\n",
"AddGeometryColumn: \"duplicate column name: Geometry\"\n",
"0\n",
"\n"
]
}
],
"source": [
"#Add the column to the table\n",
"! spatialite adminboundaries.db \".read addpointFromLatLon.sql utf-8\""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The original shapefile uses the OSGB projection (CRSID 27700), so let's also create a point geometry column using that projection. We can use the `ST_Transform()` *SpatiaLite* function to transform the WGS84 (EPSG:4326) tagged `Geometry` point column to create the new column."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\r\n",
"BEGIN;\r\n",
"SELECT AddGeometryColumn('foodratings', 'osgb', 27700, 'POINT', 2);\r\n",
"UPDATE foodratings SET osgb = ST_Transform(Geometry, 27700);\r\n",
"COMMIT;\r\n"
]
}
],
"source": [
"osgbfromlatlon='''\n",
"BEGIN;\n",
"SELECT AddGeometryColumn('{table}', 'osgb', 27700, 'POINT', 2);\n",
"UPDATE {table} SET osgb = ST_Transform(Geometry, 27700);\n",
"COMMIT;\n",
"'''.format(table=table)\n",
"\n",
"with open(\"osgbfromlatlon.sql\", \"w\") as sqlfile:\n",
" sqlfile.write(osgbfromlatlon)\n",
"!cat osgbfromlatlon.sql"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"SpatiaLite version ..: 4.3.0a\tSupported Extensions:\n",
"\t- 'VirtualShape'\t[direct Shapefile access]\n",
"\t- 'VirtualDbf'\t\t[direct DBF access]\n",
"\t- 'VirtualXL'\t\t[direct XLS access]\n",
"\t- 'VirtualText'\t\t[direct CSV/TXT access]\n",
"\t- 'VirtualNetwork'\t[Dijkstra shortest path]\n",
"\t- 'RTree'\t\t[Spatial Index - R*Tree]\n",
"\t- 'MbrCache'\t\t[Spatial Index - MBR cache]\n",
"\t- 'VirtualSpatialIndex'\t[R*Tree metahandler]\n",
"\t- 'VirtualElementary'\t[ElemGeoms metahandler]\n",
"\t- 'VirtualXPath'\t[XML Path Language - XPath]\n",
"\t- 'VirtualFDO'\t\t[FDO-OGR interoperability]\n",
"\t- 'VirtualGPKG'\t[OGC GeoPackage interoperability]\n",
"\t- 'VirtualBBox'\t\t[BoundingBox tables]\n",
"\t- 'SpatiaLite'\t\t[Spatial SQL - OGC]\n",
"PROJ.4 version ......: Rel. 5.1.0, June 1st, 2018\n",
"GEOS version ........: 3.6.2-CAPI-1.10.2 4d2925d6\n",
"TARGET CPU ..........: x86_64-apple-darwin17.3.0\n",
"AddGeometryColumn: \"duplicate column name: osgb\"\n",
"0\n",
"\n"
]
}
],
"source": [
"#Create the new column and run the transformation to populate it\n",
"! spatialite adminboundaries.db \".read osgbfromlatlon.sql utf-8\""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Create a spatial index on the boundary data table to speed up queries."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"SpatiaLite version ..: 4.3.0a\tSupported Extensions:\r\n",
"\t- 'VirtualShape'\t[direct Shapefile access]\r\n",
"\t- 'VirtualDbf'\t\t[direct DBF access]\r\n",
"\t- 'VirtualXL'\t\t[direct XLS access]\r\n",
"\t- 'VirtualText'\t\t[direct CSV/TXT access]\r\n",
"\t- 'VirtualNetwork'\t[Dijkstra shortest path]\r\n",
"\t- 'RTree'\t\t[Spatial Index - R*Tree]\r\n",
"\t- 'MbrCache'\t\t[Spatial Index - MBR cache]\r\n",
"\t- 'VirtualSpatialIndex'\t[R*Tree metahandler]\r\n",
"\t- 'VirtualElementary'\t[ElemGeoms metahandler]\r\n",
"\t- 'VirtualXPath'\t[XML Path Language - XPath]\r\n",
"\t- 'VirtualFDO'\t\t[FDO-OGR interoperability]\r\n",
"\t- 'VirtualGPKG'\t[OGC GeoPackage interoperability]\r\n",
"\t- 'VirtualBBox'\t\t[BoundingBox tables]\r\n",
"\t- 'SpatiaLite'\t\t[Spatial SQL - OGC]\r\n",
"PROJ.4 version ......: Rel. 5.1.0, June 1st, 2018\r\n",
"GEOS version ........: 3.6.2-CAPI-1.10.2 4d2925d6\r\n",
"TARGET CPU ..........: x86_64-apple-darwin17.3.0\r\n",
"CreateSpatialIndex() error: either \"parish_region\".\"Geometry\" isn't a Geometry column or a SpatialIndex is already defined\r\n",
"0\r\n"
]
}
],
"source": [
"! spatialite adminboundaries.db \"SELECT CreateSpatialIndex('parish_region', 'Geometry');\""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The index table is created as `idx_TABLENAME_COLUMN`, in this case `idx_parish_region_geometry`.\n",
"\n",
"Let's have a quick look at it."
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {},
"outputs": [],
"source": [
"import requests, json\n",
"#import pandas as pd\n",
"import geopandas as gpd\n",
"from shapely.geometry import shape \n",
"\n",
"\n",
"def query_datasette_api(q,db_url = \"http://localhost:8001/adminboundaries.json\",\n",
" dataframe=False, geojsoncol=None):\n",
" ''' Simple query to datasette endpoint. Return response as a dict or pandas dataframe. '''\n",
" params = {'sql': q}\n",
"\n",
" r = requests.get(db_url, params=params)\n",
" jdata=r.json()\n",
" if dataframe:\n",
" df=gpd.GeoDataFrame(jdata['rows'])\n",
" df.columns = jdata['columns']\n",
" for c in df.columns:\n",
" #Need a better way to identify geo columns?\n",
" #Also, this should really be a geopandas dataframe, with the json column as a geometry column\n",
" if c.startswith('AsGeoJSON'):\n",
" df[c]=df[c].apply(json.loads)\n",
" cn=c.replace('AsGeoJSON(','').replace(')','')\n",
" df[cn]=df[c].apply(shape)\n",
" return df\n",
" \n",
" #Need a better way to identify geo columns?\n",
" ix = [jdata['columns'].index(c) for c in jdata['columns'] if c.startswith('AsGeoJSON')]\n",
" for i in ix:\n",
" for i2 in range(len(jdata['rows'])):\n",
" jdata['rows'][i2][i]=json.loads(jdata['rows'][i2][i])\n",
"\n",
" geojsoncol = geojsoncol if geojsoncol and geojsoncol.startswith('AsGeoJSON') else 'AsGeoJSON({})'.format(geojsoncol)\n",
" if geojsoncol and geojsoncol in jdata['columns']:\n",
" return jdata['rows'][jdata['columns'].index(geojsoncol)][0]\n",
" return jdata"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'database': 'adminboundaries',\n",
" 'rows': [[9448, 135524.6875, 140380.125, 21392.095703125, 25377.1953125],\n",
" [9449, 137675.6875, 145051.609375, 22622.400390625, 28994.603515625]],\n",
" 'truncated': False,\n",
" 'columns': ['pkid', 'xmin', 'xmax', 'ymin', 'ymax'],\n",
" 'query': {'sql': 'SELECT * FROM idx_parish_region_geometry LIMIT 2',\n",
" 'params': {}},\n",
" 'query_ms': 0.4799365997314453}"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"query_datasette_api(\"SELECT * FROM idx_parish_region_geometry LIMIT 2\",\n",
" \"http://localhost:8003/adminboundaries.json\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's also just have a quick look at a query on the `foodratings` table:"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>FHRSID</th>\n",
" <th>BusinessName</th>\n",
" <th>BusinessType</th>\n",
" <th>BusinessTypeID</th>\n",
" <th>RatingValue</th>\n",
" <th>AsGeoJSON(Geometry)</th>\n",
" <th>Geometry</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1049392</td>\n",
" <td>135A Hunnyhill</td>\n",
" <td>Retailers - other</td>\n",
" <td>4613</td>\n",
" <td>AwaitingInspection</td>\n",
" <td>{'type': 'Point', 'coordinates': [-1.299703001...</td>\n",
" <td>POINT (-1.29970300197601 50.7066879272461)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1051980</td>\n",
" <td>20 Esplanade</td>\n",
" <td>Takeaway/sandwich shop</td>\n",
" <td>7844</td>\n",
" <td>AwaitingInspection</td>\n",
" <td>{'type': 'Point', 'coordinates': [-1.158509016...</td>\n",
" <td>POINT (-1.15850901603699 50.7319946289063)</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" FHRSID BusinessName BusinessType BusinessTypeID \\\n",
"0 1049392 135A Hunnyhill Retailers - other 4613 \n",
"1 1051980 20 Esplanade Takeaway/sandwich shop 7844 \n",
"\n",
" RatingValue AsGeoJSON(Geometry) \\\n",
"0 AwaitingInspection {'type': 'Point', 'coordinates': [-1.299703001... \n",
"1 AwaitingInspection {'type': 'Point', 'coordinates': [-1.158509016... \n",
"\n",
" Geometry \n",
"0 POINT (-1.29970300197601 50.7066879272461) \n",
"1 POINT (-1.15850901603699 50.7319946289063) "
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"q='''\n",
"SELECT FHRSID, BusinessName, BusinessType, BusinessTypeID, RatingValue, AsGeoJSON(Geometry)\n",
" FROM foodratings WHERE Geometry IS NOT NULL LIMIT 2;\n",
"'''\n",
"\n",
"query_datasette_api(q,\"http://localhost:8003/adminboundaries.json\", True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Creating Spatial Queries\n",
"\n",
"One of the advantages of using a geo-sensitive database such as *SpatiaLite* is that it allows us to run spatial queries. For example, the *SpatialLite* `within(POINT, REGION)` function allows us to check whether a point lays within a particular spatial boundary (I'm not sure if the function is inclusive or exclusive, which is to say whether a point is *within* an area if it is on the boundary of the area.)\n",
"\n",
"We can naively run a query that returns the points listed in one table that are contained within a shapefile retrieved from another table. For example, something like:\n",
"\n",
"```sql\n",
"SELECT BusinessName, AsGeoJSON(foodratings.Geometry)\n",
" FROM foodratings, parish_region \n",
" WHERE parish_region.NAME LIKE '%Arreton%' AND foodratings.Geometry NOT NULL\n",
" AND within(foodratings.Geometry, parish_region.wgs84) ;\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"However, such queries can take a long time to process. Instead, we might run a query against the shapefile index to locate points with the bounding box that encloses the shapefile:\n",
"\n",
"```sql\n",
"SELECT FHRSID, p.wgs84, f.Geometry, f.BusinessName, f.BusinessType FROM \n",
" (SELECT FHRSID, Geometry, X(osgb) x, Y(osgb) y, BusinessName, BusinessType\n",
" FROM foodratings WHERE Geometry NOT NULL) f,\n",
" parish_region p, idx_parish_region_geometry i\n",
" WHERE p.NAME LIKE '%Arreton%' AND p.pk_uid= i.pkid AND \n",
" i.xmin < f.x and i.xmax > f.x and i.ymin < f.y and i.ymax > f.y) fr;\n",
"```\n",
"\n",
"and then tighten up the query around those efficiently selected points:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"q='''\n",
"SELECT BusinessName, BusinessType, AsGeoJSON(Geometry) FROM \n",
" (SELECT FHRSID, p.wgs84, f.Geometry, f.BusinessName, f.BusinessType FROM \n",
" (SELECT FHRSID, Geometry, X(osgb) x, Y(osgb) y, BusinessName, BusinessType\n",
" FROM foodratings WHERE Geometry NOT NULL) f ,\n",
" parish_region p, idx_parish_region_geometry i\n",
" WHERE p.NAME LIKE '%Arreton%' AND p.pk_uid= i.pkid AND \n",
" i.xmin < f.x and i.xmax > f.x and i.ymin < f.y and i.ymax > f.y) fr\n",
" WHERE within(Geometry, wgs84) ;\n",
"'''"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>BusinessName</th>\n",
" <th>BusinessType</th>\n",
" <th>AsGeoJSON(Geometry)</th>\n",
" <th>Geometry</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Amazon World</td>\n",
" <td>Restaurant/Cafe/Canteen</td>\n",
" <td>{'type': 'Point', 'coordinates': [-1.218829035...</td>\n",
" <td>POINT (-1.21882903575897 50.6552581787109)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Arreton Community Centre</td>\n",
" <td>Other catering premises</td>\n",
" <td>{'type': 'Point', 'coordinates': [-1.241533041...</td>\n",
" <td>POINT (-1.24153304100037 50.67551422119139)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Arreton Manor Guest House</td>\n",
" <td>Hotel/bed &amp; breakfast/guest house</td>\n",
" <td>{'type': 'Point', 'coordinates': [-1.246361017...</td>\n",
" <td>POINT (-1.24636101722717 50.6780624389648)</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" BusinessName BusinessType \\\n",
"0 Amazon World Restaurant/Cafe/Canteen \n",
"1 Arreton Community Centre Other catering premises \n",
"2 Arreton Manor Guest House Hotel/bed & breakfast/guest house \n",
"\n",
" AsGeoJSON(Geometry) \\\n",
"0 {'type': 'Point', 'coordinates': [-1.218829035... \n",
"1 {'type': 'Point', 'coordinates': [-1.241533041... \n",
"2 {'type': 'Point', 'coordinates': [-1.246361017... \n",
"\n",
" Geometry \n",
"0 POINT (-1.21882903575897 50.6552581787109) \n",
"1 POINT (-1.24153304100037 50.67551422119139) \n",
"2 POINT (-1.24636101722717 50.6780624389648) "
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"results = query_datasette_api(q,\"http://localhost:8003/adminboundaries.json\", True)\n",
"results.head(3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can now display those points on a map:"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><iframe src=\"data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVMgPSBmYWxzZTsgTF9OT19UT1VDSCA9IGZhbHNlOyBMX0RJU0FCTEVfM0QgPSBmYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjExLjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmNzcyIgLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC5taW4uY3NzIiAvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLXRoZW1lLm1pbi5jc3MiIC8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIgLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuY3NzIiAvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL3Jhd2dpdC5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIiAvPgogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIAogICAgICAgICAgICA8c3R5bGU+ICNtYXBfMzk3ZWNhZjFjMWIyNDBmNzljZjU5YTdlMjMyNWIxMTQgewogICAgICAgICAgICAgICAgcG9zaXRpb24gOiByZWxhdGl2ZTsKICAgICAgICAgICAgICAgIHdpZHRoIDogMTAwLjAlOwogICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAuMCU7CiAgICAgICAgICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgICAgICAgICAgdG9wOiAwLjAlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICA8L3N0eWxlPgogICAgICAgIAogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2xlYWZsZXQubWFya2VyY2x1c3Rlci8xLjEuMC9sZWFmbGV0Lm1hcmtlcmNsdXN0ZXIuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9sZWFmbGV0Lm1hcmtlcmNsdXN0ZXIvMS4xLjAvTWFya2VyQ2x1c3Rlci5jc3MiIC8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2xlYWZsZXQubWFya2VyY2x1c3Rlci8xLjEuMC9NYXJrZXJDbHVzdGVyLkRlZmF1bHQuY3NzIiAvPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwXzM5N2VjYWYxYzFiMjQwZjc5Y2Y1OWE3ZTIzMjViMTE0IiA+PC9kaXY+CiAgICAgICAgCjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGJvdW5kcyA9IG51bGw7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcF8zOTdlY2FmMWMxYjI0MGY3OWNmNTlhN2UyMzI1YjExNCA9IEwubWFwKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcF8zOTdlY2FmMWMxYjI0MGY3OWNmNTlhN2UyMzI1YjExNCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2VudGVyOiBbNTAuNjU1MjU4MTc4NzEwOSwtMS4yMTg4MjkwMzU3NTg5N10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b29tOiAxMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJzOiBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmxkQ29weUp1bXA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHRpbGVfbGF5ZXJfMzM2NDUwY2E5NzNhNGE5NGFkYjZmZmIyODUwOTBlZjEgPSBMLnRpbGVMYXllcigKICAgICAgICAgICAgICAgICdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgICAgICAgICB7CiAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgIm1heFpvb20iOiAxOCwKICAibWluWm9vbSI6IDEsCiAgIm5vV3JhcCI6IGZhbHNlLAogICJzdWJkb21haW5zIjogImFiYyIKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfMzk3ZWNhZjFjMWIyNDBmNzljZjU5YTdlMjMyNWIxMTQpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfY2x1c3Rlcl8wZWYzNWVmZTVkMjM0MjU4YTg5NDg1ZGY4NmRjNWNiZCA9IEwubWFya2VyQ2x1c3Rlckdyb3VwKHsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKICAgICAgICAgICAgbWFwXzM5N2VjYWYxYzFiMjQwZjc5Y2Y1OWE3ZTIzMjViMTE0LmFkZExheWVyKG1hcmtlcl9jbHVzdGVyXzBlZjM1ZWZlNWQyMzQyNThhODk0ODVkZjg2ZGM1Y2JkKTsKICAgICAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDdjYTNmZGYxODFhNDI2Mzk5YWM1MThkNWQyODZlOTUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC42NTUyNTgxNzg3MTA5LC0xLjIxODgyOTAzNTc1ODk3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl8wZWYzNWVmZTVkMjM0MjU4YTg5NDg1ZGY4NmRjNWNiZCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83OWJlMmZlZDBhYTE0NjliOTc1ZmE0NjQ2YjVmNGVkOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wMzY3MDdjMTIxNTE0NTI5YTdjMTFlMTM5Mjc4MjcyYSA9ICQoJzxkaXYgaWQ9Imh0bWxfMDM2NzA3YzEyMTUxNDUyOWE3YzExZTEzOTI3ODI3MmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFtYXpvbiBXb3JsZDxici8+UmVzdGF1cmFudC9DYWZlL0NhbnRlZW48L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc5YmUyZmVkMGFhMTQ2OWI5NzVmYTQ2NDZiNWY0ZWQ4LnNldENvbnRlbnQoaHRtbF8wMzY3MDdjMTIxNTE0NTI5YTdjMTFlMTM5Mjc4MjcyYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Q3Y2EzZmRmMTgxYTQyNjM5OWFjNTE4ZDVkMjg2ZTk1LmJpbmRQb3B1cChwb3B1cF83OWJlMmZlZDBhYTE0NjliOTc1ZmE0NjQ2YjVmNGVkOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kOGNiZmViNTczZWU0NDg5YTg4YTUzOWVhMjQ1MDFlZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjY3NTUxNDIyMTE5MTM5LC0xLjI0MTUzMzA0MTAwMDM3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl8wZWYzNWVmZTVkMjM0MjU4YTg5NDg1ZGY4NmRjNWNiZCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ODE1YWVkOWQxNGE0MTJjOTJkZGY1ZDgyNzgxMjk1MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mZGYxOTNmOWMzNjI0OTRmODNhZjlmZjQzNTJiNDYwMyA9ICQoJzxkaXYgaWQ9Imh0bWxfZmRmMTkzZjljMzYyNDk0ZjgzYWY5ZmY0MzUyYjQ2MDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkFycmV0b24gQ29tbXVuaXR5IENlbnRyZTxici8+T3RoZXIgY2F0ZXJpbmcgcHJlbWlzZXM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU4MTVhZWQ5ZDE0YTQxMmM5MmRkZjVkODI3ODEyOTUxLnNldENvbnRlbnQoaHRtbF9mZGYxOTNmOWMzNjI0OTRmODNhZjlmZjQzNTJiNDYwMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Q4Y2JmZWI1NzNlZTQ0ODlhODhhNTM5ZWEyNDUwMWVmLmJpbmRQb3B1cChwb3B1cF81ODE1YWVkOWQxNGE0MTJjOTJkZGY1ZDgyNzgxMjk1MSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zOGVlOWQxZmRjOTY0NzE3OTBjMzBlZTU0Njk0NDY2YSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjY3ODA2MjQzODk2NDgsLTEuMjQ2MzYxMDE3MjI3MTddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzBlZjM1ZWZlNWQyMzQyNThhODk0ODVkZjg2ZGM1Y2JkKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q4ZDk1YTIzNDhjMDQyNjFhNjZkMDA1YmI4MGEzMTYxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg4NjljNTNjOTc0YTRlMTJiOWZiNjVkMDRkNWI4YjE5ID0gJCgnPGRpdiBpZD0iaHRtbF84ODY5YzUzYzk3NGE0ZTEyYjlmYjY1ZDA0ZDViOGIxOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QXJyZXRvbiBNYW5vciBHdWVzdCBIb3VzZTxici8+SG90ZWwvYmVkICZhbXA7IGJyZWFrZmFzdC9ndWVzdCBob3VzZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDhkOTVhMjM0OGMwNDI2MWE2NmQwMDViYjgwYTMxNjEuc2V0Q29udGVudChodG1sXzg4NjljNTNjOTc0YTRlMTJiOWZiNjVkMDRkNWI4YjE5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzhlZTlkMWZkYzk2NDcxNzkwYzMwZWU1NDY5NDQ2NmEuYmluZFBvcHVwKHBvcHVwX2Q4ZDk1YTIzNDhjMDQyNjFhNjZkMDA1YmI4MGEzMTYxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzJjNzUzMzI2YThmMDQ5NGFhZDFhYWYzNTZmZWU4NjdmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNjcxNjcyODIxMDQ0OSwtMS4yMzQzNDkwMTIzNzQ4OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfMGVmMzVlZmU1ZDIzNDI1OGE4OTQ4NWRmODZkYzVjYmQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzU3ZDA3ZDE0OGVmNGU5ZDk4Y2E3NjhkZGI1MTVkYzUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzFhMTRkNmQ3MWUyNDg5MGIzMDk3NjUzYmI3Y2I0YjcgPSAkKCc8ZGl2IGlkPSJodG1sXzMxYTE0ZDZkNzFlMjQ4OTBiMzA5NzY1M2JiN2NiNGI3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5BcnJldG9uIFBvc3QgT2ZmaWNlPGJyLz5SZXRhaWxlcnMgLSBvdGhlcjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzU3ZDA3ZDE0OGVmNGU5ZDk4Y2E3NjhkZGI1MTVkYzUuc2V0Q29udGVudChodG1sXzMxYTE0ZDZkNzFlMjQ4OTBiMzA5NzY1M2JiN2NiNGI3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMmM3NTMzMjZhOGYwNDk0YWFkMWFhZjM1NmZlZTg2N2YuYmluZFBvcHVwKHBvcHVwXzc1N2QwN2QxNDhlZjRlOWQ5OGNhNzY4ZGRiNTE1ZGM1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzI4MjRkN2RhM2IyYTQxNjZhZjI4M2FjMDE5ZWZkZWIyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNjczMDIyLC0xLjI4NTQ4Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfMGVmMzVlZmU1ZDIzNDI1OGE4OTQ4NWRmODZkYzVjYmQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2I2ZmViZmJlYzU1NGY5M2I0ZTc4MzUyMjZiODI5ZDMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTk2NTZlYzVjZmE2NGY0OTg3YjAwYmZhMzc0MTc5ZTEgPSAkKCc8ZGl2IGlkPSJodG1sX2U5NjU2ZWM1Y2ZhNjRmNDk4N2IwMGJmYTM3NDE3OWUxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CbGFja3dhdGVyIE1pbGwgUmVzaWRlbnRpYWwgSG9tZTxici8+SG9zcGl0YWxzL0NoaWxkY2FyZS9DYXJpbmcgUHJlbWlzZXM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNiNmZlYmZiZWM1NTRmOTNiNGU3ODM1MjI2YjgyOWQzLnNldENvbnRlbnQoaHRtbF9lOTY1NmVjNWNmYTY0ZjQ5ODdiMDBiZmEzNzQxNzllMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzI4MjRkN2RhM2IyYTQxNjZhZjI4M2FjMDE5ZWZkZWIyLmJpbmRQb3B1cChwb3B1cF8zYjZmZWJmYmVjNTU0ZjkzYjRlNzgzNTIyNmI4MjlkMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82MTNlODE3OTYyY2Q0YzAzOWZmNzhjOWRhNTcyZTRkNyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjY3NTUxNDIyMTE5MTM5LC0xLjI0MTUzMzA0MTAwMDM3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl8wZWYzNWVmZTVkMjM0MjU4YTg5NDg1ZGY4NmRjNWNiZCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yYmVkNzQ3ZmIzODU0YzQxOGIzNzM3ZDE4ZjM3ZmMwNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNjRiMWY1NWFiYTU0NmRlOThkM2M1OGZmNmJjNjAxMCA9ICQoJzxkaXYgaWQ9Imh0bWxfZTY0YjFmNTVhYmE1NDZkZTk4ZDNjNThmZjZiYzYwMTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNhdGVybGluayAtIEFycmV0b24gU3QgR2VvcmdlcyBDb2ZFIFByaW1hcnkgU2Nob29sPGJyLz5TY2hvb2wvY29sbGVnZS91bml2ZXJzaXR5PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yYmVkNzQ3ZmIzODU0YzQxOGIzNzM3ZDE4ZjM3ZmMwNi5zZXRDb250ZW50KGh0bWxfZTY0YjFmNTVhYmE1NDZkZTk4ZDNjNThmZjZiYzYwMTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82MTNlODE3OTYyY2Q0YzAzOWZmNzhjOWRhNTcyZTRkNy5iaW5kUG9wdXAocG9wdXBfMmJlZDc0N2ZiMzg1NGM0MThiMzczN2QxOGYzN2ZjMDYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNjA2N2U5MTFiNDgwNDBiYmFmOTEyMTZhNjRiOTBjYWEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC42NTMyMDk2ODYyNzkyOSwtMS4yMzI3MjU5Nzc4OTc2NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfMGVmMzVlZmU1ZDIzNDI1OGE4OTQ4NWRmODZkYzVjYmQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzM1MTEyNDEwNzc2NGE5YzhjYWRiYTUwMWFjYjlhMjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWQyOWEwZjFkZTk4NDNiM2EzNTUzNGZjZDkzNzg4NWUgPSAkKCc8ZGl2IGlkPSJodG1sX2VkMjlhMGYxZGU5ODQzYjNhMzU1MzRmY2Q5Mzc4ODVlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FZ2cgUGFja2luZyBTdGF0aW9uPGJyLz5NYW51ZmFjdHVyZXJzL3BhY2tlcnM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMzNTExMjQxMDc3NjRhOWM4Y2FkYmE1MDFhY2I5YTIwLnNldENvbnRlbnQoaHRtbF9lZDI5YTBmMWRlOTg0M2IzYTM1NTM0ZmNkOTM3ODg1ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzYwNjdlOTExYjQ4MDQwYmJhZjkxMjE2YTY0YjkwY2FhLmJpbmRQb3B1cChwb3B1cF8zMzUxMTI0MTA3NzY0YTljOGNhZGJhNTAxYWNiOWEyMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lNGZmMjA2M2NlYjk0MTA4ODgzMTU0OWJlYTlmY2RkNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjY3ODA2Mzk5OTk5OTk5LC0xLjI0NjM2MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfMGVmMzVlZmU1ZDIzNDI1OGE4OTQ4NWRmODZkYzVjYmQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODhlYmE4MzVhYmFmNDY5MDkyOTliNGZhNGU3MjVhYmIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWVmMDUyMWRhMWIzNGM1Mzk5ODBkNTNjZDBhMGEyNmQgPSAkKCc8ZGl2IGlkPSJodG1sX2VlZjA1MjFkYTFiMzRjNTM5OTgwZDUzY2QwYTBhMjZkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GYXJtZXIgSmFjayYjeDI3O3MgRmFybSBTaG9wPGJyLz5SZXRhaWxlcnMgLSBvdGhlcjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODhlYmE4MzVhYmFmNDY5MDkyOTliNGZhNGU3MjVhYmIuc2V0Q29udGVudChodG1sX2VlZjA1MjFkYTFiMzRjNTM5OTgwZDUzY2QwYTBhMjZkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZTRmZjIwNjNjZWI5NDEwODg4MzE1NDliZWE5ZmNkZDUuYmluZFBvcHVwKHBvcHVwXzg4ZWJhODM1YWJhZjQ2OTA5Mjk5YjRmYTRlNzI1YWJiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzA3MDc3NGE2ZWNhYjQyMjNhYjIwZDJjYWRjZTRkYjI1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNjY5MzY0MTcxNzE3NDksLTEuMjgxODg4NTY0OTY0MTddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzBlZjM1ZWZlNWQyMzQyNThhODk0ODVkZjg2ZGM1Y2JkKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMxNmIyMjhlYjBiNzRjNjg5ODQzNjgyN2ZkOGQ2ZmFiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2EyZGUyYWVlZjA1MDQyYTM5NjE1Nzk4ZmVkOTExNWEyID0gJCgnPGRpdiBpZD0iaHRtbF9hMmRlMmFlZWYwNTA0MmEzOTYxNTc5OGZlZDkxMTVhMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TmF0dXJlem9uZXMgV2lsZGxpZmUgRWR1Y2F0aW9uIFRydXN0PGJyLz5SZXN0YXVyYW50L0NhZmUvQ2FudGVlbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzE2YjIyOGViMGI3NGM2ODk4NDM2ODI3ZmQ4ZDZmYWIuc2V0Q29udGVudChodG1sX2EyZGUyYWVlZjA1MDQyYTM5NjE1Nzk4ZmVkOTExNWEyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDcwNzc0YTZlY2FiNDIyM2FiMjBkMmNhZGNlNGRiMjUuYmluZFBvcHVwKHBvcHVwXzMxNmIyMjhlYjBiNzRjNjg5ODQzNjgyN2ZkOGQ2ZmFiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzEyMGM2MDAzY2JhYjQwMWQ5ZjFkMzEyODYxM2JhNjEyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNjc3NjkyNDEzMzMwMDksLTEuMjg0MjQwOTYxMDc0ODNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzBlZjM1ZWZlNWQyMzQyNThhODk0ODVkZjg2ZGM1Y2JkKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzczZWY0ODMwODUzMDQyN2E5YWIzZjkwZTZiNThhNDc5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY0ZGM5MGVlNDY4ZjQ3YjU5ZGQ4NWI2MmVhZTM4ODMyID0gJCgnPGRpdiBpZD0iaHRtbF82NGRjOTBlZTQ2OGY0N2I1OWRkODViNjJlYWUzODgzMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TkNDRyBUcmFkaW5nIEx0ZDxici8+UmVzdGF1cmFudC9DYWZlL0NhbnRlZW48L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzczZWY0ODMwODUzMDQyN2E5YWIzZjkwZTZiNThhNDc5LnNldENvbnRlbnQoaHRtbF82NGRjOTBlZTQ2OGY0N2I1OWRkODViNjJlYWUzODgzMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzEyMGM2MDAzY2JhYjQwMWQ5ZjFkMzEyODYxM2JhNjEyLmJpbmRQb3B1cChwb3B1cF83M2VmNDgzMDg1MzA0MjdhOWFiM2Y5MGU2YjU4YTQ3OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80NmUxZGQ5Y2Y2MjI0MGYzYTgzZTE4MThjYzFlOWJkYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjY3MzEzNiwtMS4yODIwNl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfMGVmMzVlZmU1ZDIzNDI1OGE4OTQ4NWRmODZkYzVjYmQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDcwYWFjMzMwMDNlNDc3Zjg4MTA4ODQ5NjM1MzQwNjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGQ0MzE3ZWI2NDdjNGQ4NTk1MGNlZmUyMjZlMGJmNTIgPSAkKCc8ZGl2IGlkPSJodG1sXzRkNDMxN2ViNjQ3YzRkODU5NTBjZWZlMjI2ZTBiZjUyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OZXdzdG9uZSBGYXJtIFNob3A8YnIvPlJldGFpbGVycyAtIG90aGVyPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NzBhYWMzMzAwM2U0NzdmODgxMDg4NDk2MzUzNDA2Ni5zZXRDb250ZW50KGh0bWxfNGQ0MzE3ZWI2NDdjNGQ4NTk1MGNlZmUyMjZlMGJmNTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80NmUxZGQ5Y2Y2MjI0MGYzYTgzZTE4MThjYzFlOWJkYi5iaW5kUG9wdXAocG9wdXBfNDcwYWFjMzMwMDNlNDc3Zjg4MTA4ODQ5NjM1MzQwNjYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjE1OGJmZjg3OTU4NGI1NzhmNTI4NjE1ZWZlZjAxZjggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC42NjU3ODY3NDMxNjQwOSwtMS4yNDcyMzYwMTM0MTI0OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfMGVmMzVlZmU1ZDIzNDI1OGE4OTQ4NWRmODZkYzVjYmQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTgzYTA2ZjQxYzA3NDlmM2EyZjVkMTg3ZTYyYjlmMTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGIwZWY4OGE4ZjU1NGRkYWFkM2MyZjBkMTU0ZTcwOTcgPSAkKCc8ZGl2IGlkPSJodG1sX2RiMGVmODhhOGY1NTRkZGFhZDNjMmYwZDE1NGU3MDk3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QaW5rJiN4Mjc7czxici8+RGlzdHJpYnV0b3JzL1RyYW5zcG9ydGVyczwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTgzYTA2ZjQxYzA3NDlmM2EyZjVkMTg3ZTYyYjlmMTEuc2V0Q29udGVudChodG1sX2RiMGVmODhhOGY1NTRkZGFhZDNjMmYwZDE1NGU3MDk3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjE1OGJmZjg3OTU4NGI1NzhmNTI4NjE1ZWZlZjAxZjguYmluZFBvcHVwKHBvcHVwXzE4M2EwNmY0MWMwNzQ5ZjNhMmY1ZDE4N2U2MmI5ZjExKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzNmYjQzMzJiZWE2NzRkOWI5YmZmYmU1ZGQ4ZTU3MTMzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNjYwODYxOTY4OTk0MDksLTEuMjQ1MzM0MDI5MTk3NjldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzBlZjM1ZWZlNWQyMzQyNThhODk0ODVkZjg2ZGM1Y2JkKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VhZGIzNjdlMzRiNzQ4YWQ5MTU0ZmZiNjBlMzc3ZGYzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzljZTQ1YTgyOWVlMDQ5MmZiYWI5Y2M2ZThjZjUzYjBjID0gJCgnPGRpdiBpZD0iaHRtbF85Y2U0NWE4MjllZTA0OTJmYmFiOWNjNmU4Y2Y1M2IwYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmVkd2F5IEZhcm0gQmVkICZhbXA7IEJyZWFrZmFzdDxici8+SG90ZWwvYmVkICZhbXA7IGJyZWFrZmFzdC9ndWVzdCBob3VzZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWFkYjM2N2UzNGI3NDhhZDkxNTRmZmI2MGUzNzdkZjMuc2V0Q29udGVudChodG1sXzljZTQ1YTgyOWVlMDQ5MmZiYWI5Y2M2ZThjZjUzYjBjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfM2ZiNDMzMmJlYTY3NGQ5YjliZmZiZTVkZDhlNTcxMzMuYmluZFBvcHVwKHBvcHVwX2VhZGIzNjdlMzRiNzQ4YWQ5MTU0ZmZiNjBlMzc3ZGYzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzVjMTNkNWRjNGYxMjRmY2E5ZTNhNDAxM2E4ODI5YmQyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNjc1NTE0MjIxMTkxMzksLTEuMjQxNTMzMDQxMDAwMzddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzBlZjM1ZWZlNWQyMzQyNThhODk0ODVkZjg2ZGM1Y2JkKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUyODcyZjIxMjY5MDQ4MmU5ZGI4NTQ0ZWJjZWI5MjhmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM5YzQ1NmYwM2NkNTRiNjE5OTA2MGFjODdjMWU1OWE1ID0gJCgnPGRpdiBpZD0iaHRtbF8zOWM0NTZmMDNjZDU0YjYxOTkwNjBhYzg3YzFlNTlhNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3QgR2VvcmdlcyBQcmUtU2Nob29sICZhbXA7IE51cnNlcnk8YnIvPkhvc3BpdGFscy9DaGlsZGNhcmUvQ2FyaW5nIFByZW1pc2VzPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81Mjg3MmYyMTI2OTA0ODJlOWRiODU0NGViY2ViOTI4Zi5zZXRDb250ZW50KGh0bWxfMzljNDU2ZjAzY2Q1NGI2MTk5MDYwYWM4N2MxZTU5YTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81YzEzZDVkYzRmMTI0ZmNhOWUzYTQwMTNhODgyOWJkMi5iaW5kUG9wdXAocG9wdXBfNTI4NzJmMjEyNjkwNDgyZTlkYjg1NDRlYmNlYjkyOGYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZThmZTY1OTY5YTQ3NDYzZjliOGQxZjVmMzU5OTk2MmYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC42NzgwNjI0Mzg5NjQ4LC0xLjI0NjM2MTAxNzIyNzE3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXJrZXJfY2x1c3Rlcl8wZWYzNWVmZTVkMjM0MjU4YTg5NDg1ZGY4NmRjNWNiZCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMmU4MmQzZDE0MWM0ODFmOGUwMjMzZDU3M2IxMWJjMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84ODBhODVkYTI4MjA0NmU4OWU2NjcwOTYzYzA5NTZjMyA9ICQoJzxkaXYgaWQ9Imh0bWxfODgwYTg1ZGEyODIwNDZlODllNjY3MDk2M2MwOTU2YzMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlN3ZWV0IE1lbW9yaWVzPGJyLz5SZXRhaWxlcnMgLSBvdGhlcjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjJlODJkM2QxNDFjNDgxZjhlMDIzM2Q1NzNiMTFiYzMuc2V0Q29udGVudChodG1sXzg4MGE4NWRhMjgyMDQ2ZTg5ZTY2NzA5NjNjMDk1NmMzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZThmZTY1OTY5YTQ3NDYzZjliOGQxZjVmMzU5OTk2MmYuYmluZFBvcHVwKHBvcHVwXzIyZTgyZDNkMTQxYzQ4MWY4ZTAyMzNkNTczYjExYmMzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzExY2MyNDllNWQ2ZjRlNGFiMmUxNzk2OTlmZjViZjE2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNjc4MDYyNDM4OTY0OCwtMS4yNDYzNjEwMTcyMjcxN10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfMGVmMzVlZmU1ZDIzNDI1OGE4OTQ4NWRmODZkYzVjYmQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzVjNDY0YmYyNTRmNGEzMGE3OWQ5ZjVhYzNjZGMyMjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjE3NzIyMGE4NjBjNDQyOGFlYzdlNjc2YzM4ZjlkMTYgPSAkKCc8ZGl2IGlkPSJodG1sX2IxNzcyMjBhODYwYzQ0MjhhZWM3ZTY3NmMzOGY5ZDE2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgRGFpcnltYW4mI3gyNztzIERhdWdodGVyPGJyLz5QdWIvYmFyL25pZ2h0Y2x1YjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzVjNDY0YmYyNTRmNGEzMGE3OWQ5ZjVhYzNjZGMyMjEuc2V0Q29udGVudChodG1sX2IxNzcyMjBhODYwYzQ0MjhhZWM3ZTY3NmMzOGY5ZDE2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTFjYzI0OWU1ZDZmNGU0YWIyZTE3OTY5OWZmNWJmMTYuYmluZFBvcHVwKHBvcHVwXzM1YzQ2NGJmMjU0ZjRhMzBhNzlkOWY1YWMzY2RjMjIxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzliZTBjOGUxZDI4YjQ2Y2U4NTYzZjlhMzQ3YjFmZjRiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNjU4MDAwOTQ2MDQ0OSwtMS4yMjcyNTc5NjY5OTUyNF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfMGVmMzVlZmU1ZDIzNDI1OGE4OTQ4NWRmODZkYzVjYmQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODQwYmVjNWVmYjZjNDRmNzgzNWFhYWZmYjg4ZTQxNmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2NlNjhjODNmMTkzNDY0ZTkyNTYyZGQ3YmMwOTI0YmIgPSAkKCc8ZGl2IGlkPSJodG1sX2NjZTY4YzgzZjE5MzQ2NGU5MjU2MmRkN2JjMDkyNGJiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgRmlnaHRpbmcgQ29ja3M8YnIvPlB1Yi9iYXIvbmlnaHRjbHViPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NDBiZWM1ZWZiNmM0NGY3ODM1YWFhZmZiODhlNDE2ZC5zZXRDb250ZW50KGh0bWxfY2NlNjhjODNmMTkzNDY0ZTkyNTYyZGQ3YmMwOTI0YmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85YmUwYzhlMWQyOGI0NmNlODU2M2Y5YTM0N2IxZmY0Yi5iaW5kUG9wdXAocG9wdXBfODQwYmVjNWVmYjZjNDRmNzgzNWFhYWZmYjg4ZTQxNmQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOWNjN2JlNDE4YmMxNDVjZGIwN2M4MTVmZmZjNWVkM2EgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC42NTUyNTY5OTk5OTk5OSwtMS4yMTg4MjldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzBlZjM1ZWZlNWQyMzQyNThhODk0ODVkZjg2ZGM1Y2JkKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzcwZWEzMDM5MzU0OTRkYzc5ZDlkMTdiZTQ2ZGE1Y2FiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBmOGY4YzZlNzkyNDRmODBiMTNkMzQ3MzY2N2ZlYmQ3ID0gJCgnPGRpdiBpZD0iaHRtbF8wZjhmOGM2ZTc5MjQ0ZjgwYjEzZDM0NzM2NjdmZWJkNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhlIEdhcmRlbiBDYWZlPGJyLz5SZXN0YXVyYW50L0NhZmUvQ2FudGVlbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzBlYTMwMzkzNTQ5NGRjNzlkOWQxN2JlNDZkYTVjYWIuc2V0Q29udGVudChodG1sXzBmOGY4YzZlNzkyNDRmODBiMTNkMzQ3MzY2N2ZlYmQ3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOWNjN2JlNDE4YmMxNDVjZGIwN2M4MTVmZmZjNWVkM2EuYmluZFBvcHVwKHBvcHVwXzcwZWEzMDM5MzU0OTRkYzc5ZDlkMTdiZTQ2ZGE1Y2FiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2U1YTJkY2JkYzkwNzQzMjliNGI3OTMzMDZiMzY4ZmFkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNjc4MDYyNDM4OTY0OCwtMS4yNDYzNjEwMTcyMjcxN10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFya2VyX2NsdXN0ZXJfMGVmMzVlZmU1ZDIzNDI1OGE4OTQ4NWRmODZkYzVjYmQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTQ1YTFkZDBhMTU2NGExYjkzNTY2YWY3ZGZlZTkwY2QgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2RhNWI0MTJhYjQ0NDUwMzljZWRhMzM0NTVmYmUwNWUgPSAkKCc8ZGl2IGlkPSJodG1sX2NkYTViNDEyYWI0NDQ1MDM5Y2VkYTMzNDU1ZmJlMDVlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgV2hpdGUgTGlvbjxici8+UHViL2Jhci9uaWdodGNsdWI8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U0NWExZGQwYTE1NjRhMWI5MzU2NmFmN2RmZWU5MGNkLnNldENvbnRlbnQoaHRtbF9jZGE1YjQxMmFiNDQ0NTAzOWNlZGEzMzQ1NWZiZTA1ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2U1YTJkY2JkYzkwNzQzMjliNGI3OTMzMDZiMzY4ZmFkLmJpbmRQb3B1cChwb3B1cF9lNDVhMWRkMGExNTY0YTFiOTM1NjZhZjdkZmVlOTBjZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8yMDZlYTNmMDkxNDI0NDBlOGEwMTE5OWI2MDQ3ZjE2ZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjY1ODAwMDk0NjA0NDksLTEuMjI3MjU3OTY2OTk1MjRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcmtlcl9jbHVzdGVyXzBlZjM1ZWZlNWQyMzQyNThhODk0ODVkZjg2ZGM1Y2JkKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJiZWVlYjFiMjM5ZjQxMDliY2U0ZjFlOWYxMTU0OTkzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I4MTBhNjEyYjYwMjQ3ZDY4MThiOWQzN2NmYTllNzRlID0gJCgnPGRpdiBpZD0iaHRtbF9iODEwYTYxMmI2MDI0N2Q2ODE4YjlkMzdjZmE5ZTc0ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V2lnaHQgU2FsYWRzIEdyb3VwIEx0ZDxici8+RmFybWVycy9ncm93ZXJzPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yYmVlZWIxYjIzOWY0MTA5YmNlNGYxZTlmMTE1NDk5My5zZXRDb250ZW50KGh0bWxfYjgxMGE2MTJiNjAyNDdkNjgxOGI5ZDM3Y2ZhOWU3NGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yMDZlYTNmMDkxNDI0NDBlOGEwMTE5OWI2MDQ3ZjE2Zi5iaW5kUG9wdXAocG9wdXBfMmJlZWViMWIyMzlmNDEwOWJjZTRmMWU5ZjExNTQ5OTMpOwoKICAgICAgICAgICAgCiAgICAgICAgCjwvc2NyaXB0Pg==\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
],
"text/plain": [
"<folium.folium.Map at 0x10837c128>"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import folium\n",
"import html\n",
"from folium.plugins import MarkerCluster\n",
"\n",
"#Hacky for now\n",
"#Coords are wrong way round?\n",
"center=results['Geometry'][0].coords[0][::-1]\n",
"\n",
"m=folium.Map( location=center, zoom_start=12)\n",
"\n",
"mc = MarkerCluster()\n",
"\n",
"for ix,row in results.iterrows():\n",
" mc.add_child(folium.Marker(location=row['Geometry'].coords[0][::-1],\n",
" popup='{}<br/>{}'.format(html.escape(row['BusinessName']),\n",
" html.escape(row['BusinessType']))))\n",
"\n",
"m.add_child(mc)\n",
"m"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For small areas, using the marker cluster may not be appropriate. On the one hand, the clusterer is quite aggressive and may cluster nearby items inappropriately. On the other, where points are geocoded as postcode centroids, the marker cluster does provide an advantage becuase it allows us to split out multiple points that are colocated, which hides all but the last rendered marker from the user if the marker cluster is not used.\n",
"\n",
"To be able to see multiple co-located points, we need to use map extension that allows us to explode colacated points, or add a small random perturbation to each marker so that it is plotted uniquely:"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><iframe src=\"data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVMgPSBmYWxzZTsgTF9OT19UT1VDSCA9IGZhbHNlOyBMX0RJU0FCTEVfM0QgPSBmYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjExLjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmNzcyIgLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC5taW4uY3NzIiAvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLXRoZW1lLm1pbi5jc3MiIC8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIgLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuY3NzIiAvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL3Jhd2dpdC5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIiAvPgogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIAogICAgICAgICAgICA8c3R5bGU+ICNtYXBfOGY0NmE4YWMyNzhhNGY2NWJhMTI3Mzg1NzY5NmUzZjMgewogICAgICAgICAgICAgICAgcG9zaXRpb24gOiByZWxhdGl2ZTsKICAgICAgICAgICAgICAgIHdpZHRoIDogMTAwLjAlOwogICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAuMCU7CiAgICAgICAgICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgICAgICAgICAgdG9wOiAwLjAlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICA8L3N0eWxlPgogICAgICAgIAo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwXzhmNDZhOGFjMjc4YTRmNjViYTEyNzM4NTc2OTZlM2YzIiA+PC9kaXY+CiAgICAgICAgCjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGJvdW5kcyA9IG51bGw7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcF84ZjQ2YThhYzI3OGE0ZjY1YmExMjczODU3Njk2ZTNmMyA9IEwubWFwKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcF84ZjQ2YThhYzI3OGE0ZjY1YmExMjczODU3Njk2ZTNmMycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2VudGVyOiBbNTAuNjU1MjU4MTc4NzEwOSwtMS4yMTg4MjkwMzU3NTg5N10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b29tOiAxMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJzOiBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmxkQ29weUp1bXA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHRpbGVfbGF5ZXJfYWFhYWZiZDZiZTI2NDg0NWE4M2VkMGYyNDZhMTg4YjEgPSBMLnRpbGVMYXllcigKICAgICAgICAgICAgICAgICdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgICAgICAgICB7CiAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgIm1heFpvb20iOiAxOCwKICAibWluWm9vbSI6IDEsCiAgIm5vV3JhcCI6IGZhbHNlLAogICJzdWJkb21haW5zIjogImFiYyIKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOGY0NmE4YWMyNzhhNGY2NWJhMTI3Mzg1NzY5NmUzZjMpOwogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2JkODI5MDJmYjJiNjQ2ZGQ5NmUwMDI5NmVmMTYxNzFlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNjU1MzAxNDAzMzExNDgsLTEuMjE4OTUxNzk3MTY4MTg3MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzhmNDZhOGFjMjc4YTRmNjViYTEyNzM4NTc2OTZlM2YzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UxYzVjNGVlN2QxMDQwNWVhMjc4MzkwYWIzNThkYmRiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgyOWZkMDQ2OGY3YTQwMTk5ZGYyZTFmZDdiOWY0ODNjID0gJCgnPGRpdiBpZD0iaHRtbF84MjlmZDA0NjhmN2E0MDE5OWRmMmUxZmQ3YjlmNDgzYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QW1hem9uIFdvcmxkPGJyLz5SZXN0YXVyYW50L0NhZmUvQ2FudGVlbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTFjNWM0ZWU3ZDEwNDA1ZWEyNzgzOTBhYjM1OGRiZGIuc2V0Q29udGVudChodG1sXzgyOWZkMDQ2OGY3YTQwMTk5ZGYyZTFmZDdiOWY0ODNjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYmQ4MjkwMmZiMmI2NDZkZDk2ZTAwMjk2ZWYxNjE3MWUuYmluZFBvcHVwKHBvcHVwX2UxYzVjNGVlN2QxMDQwNWVhMjc4MzkwYWIzNThkYmRiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzgzNWRmNDk0NDBmZTQ4NmU4NDA1Mjg0OGY4YTg4OWVlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNjc1MjQwMDI5MTQ3NjUsLTEuMjQxNTAyMzM0ODgxOTM3Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzhmNDZhOGFjMjc4YTRmNjViYTEyNzM4NTc2OTZlM2YzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M3ZjQ0NmRhOGFjZDQwMDBhYTUxMWU4YWU0YjdjNjkyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RjOWQ0NTVjMWU0YTRiN2E5ZDUzZGQ2NTI0YjBkYTBkID0gJCgnPGRpdiBpZD0iaHRtbF9kYzlkNDU1YzFlNGE0YjdhOWQ1M2RkNjUyNGIwZGEwZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QXJyZXRvbiBDb21tdW5pdHkgQ2VudHJlPGJyLz5PdGhlciBjYXRlcmluZyBwcmVtaXNlczwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzdmNDQ2ZGE4YWNkNDAwMGFhNTExZThhZTRiN2M2OTIuc2V0Q29udGVudChodG1sX2RjOWQ0NTVjMWU0YTRiN2E5ZDUzZGQ2NTI0YjBkYTBkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfODM1ZGY0OTQ0MGZlNDg2ZTg0MDUyODQ4ZjhhODg5ZWUuYmluZFBvcHVwKHBvcHVwX2M3ZjQ0NmRhOGFjZDQwMDBhYTUxMWU4YWU0YjdjNjkyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzQ5ZmE3OWFiYzdiYTRlODQ5ZmJiNTAzODM3NzJlNDY4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNjc4NDgxMTcxOTQ2MzcsLTEuMjQ1ODcwMjgyOTQwNDA5MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzhmNDZhOGFjMjc4YTRmNjViYTEyNzM4NTc2OTZlM2YzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MzYTlmNjg4ZDU2MzQzY2U4YTkwNTc5NDFlZjg2Zjk3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYzN2UzNDAxYjBmZjRiMzRiYTYwNGJiOTkyZWIwMmM2ID0gJCgnPGRpdiBpZD0iaHRtbF82MzdlMzQwMWIwZmY0YjM0YmE2MDRiYjk5MmViMDJjNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QXJyZXRvbiBNYW5vciBHdWVzdCBIb3VzZTxici8+SG90ZWwvYmVkICZhbXA7IGJyZWFrZmFzdC9ndWVzdCBob3VzZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzNhOWY2ODhkNTYzNDNjZThhOTA1Nzk0MWVmODZmOTcuc2V0Q29udGVudChodG1sXzYzN2UzNDAxYjBmZjRiMzRiYTYwNGJiOTkyZWIwMmM2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNDlmYTc5YWJjN2JhNGU4NDlmYmI1MDM4Mzc3MmU0NjguYmluZFBvcHVwKHBvcHVwX2MzYTlmNjg4ZDU2MzQzY2U4YTkwNTc5NDFlZjg2Zjk3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzM2YjhlYTZkZTZmMTRmMjZhOTRkMDU0NGRkMjJhYmMwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNjcxMjU2NjQ2MTYzMzUsLTEuMjM0MDM4MDczMzUzOTA5NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzhmNDZhOGFjMjc4YTRmNjViYTEyNzM4NTc2OTZlM2YzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RhNDNkOTFjNDhkNzRlZGQ5MWVlYzIyYmRkYWNkZmNiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUxNmJiMjkyNGFmNTQxMTE5NGU4NzcwNTNkMmVjYTM5ID0gJCgnPGRpdiBpZD0iaHRtbF81MTZiYjI5MjRhZjU0MTExOTRlODc3MDUzZDJlY2EzOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QXJyZXRvbiBQb3N0IE9mZmljZTxici8+UmV0YWlsZXJzIC0gb3RoZXI8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RhNDNkOTFjNDhkNzRlZGQ5MWVlYzIyYmRkYWNkZmNiLnNldENvbnRlbnQoaHRtbF81MTZiYjI5MjRhZjU0MTExOTRlODc3MDUzZDJlY2EzOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzM2YjhlYTZkZTZmMTRmMjZhOTRkMDU0NGRkMjJhYmMwLmJpbmRQb3B1cChwb3B1cF9kYTQzZDkxYzQ4ZDc0ZWRkOTFlZWMyMmJkZGFjZGZjYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kOTVjN2Y4ZjRmNTQ0ZWI0OTkxNjk5ZjcyOWY2NzQ4NyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjY3MjY3NTQzNjc0NTcwNiwtMS4yODU4ODkwODYyMjE0OTU4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOGY0NmE4YWMyNzhhNGY2NWJhMTI3Mzg1NzY5NmUzZjMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWNlMmRlYzdhNmFhNDI0Nzg0NGI0MmQ1ZjEyZGJiZGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTQzOThkZjM2ZDM4NGU2YWI2ZmEwYWYyMTU3MmNhZWUgPSAkKCc8ZGl2IGlkPSJodG1sXzU0Mzk4ZGYzNmQzODRlNmFiNmZhMGFmMjE1NzJjYWVlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CbGFja3dhdGVyIE1pbGwgUmVzaWRlbnRpYWwgSG9tZTxici8+SG9zcGl0YWxzL0NoaWxkY2FyZS9DYXJpbmcgUHJlbWlzZXM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VjZTJkZWM3YTZhYTQyNDc4NDRiNDJkNWYxMmRiYmRiLnNldENvbnRlbnQoaHRtbF81NDM5OGRmMzZkMzg0ZTZhYjZmYTBhZjIxNTcyY2FlZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Q5NWM3ZjhmNGY1NDRlYjQ5OTE2OTlmNzI5ZjY3NDg3LmJpbmRQb3B1cChwb3B1cF9lY2UyZGVjN2E2YWE0MjQ3ODQ0YjQyZDVmMTJkYmJkYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85ZDZlNzg1Yzk0MDg0OGQ5OGFmMGIyZmNkZmJmNmRhZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjY3NTM4MzEyNTU1OTQ0LC0xLjI0MTg5MzAyODU4MzE5NDhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF84ZjQ2YThhYzI3OGE0ZjY1YmExMjczODU3Njk2ZTNmMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMWU3NWQ0YmJlY2E0Njg5OGYwNWIyNjIyMGEwMmM3ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iMDg0Y2QwY2E1Yzc0ZjA2OTJlMDgxYTY2NzFkZWQ2NyA9ICQoJzxkaXYgaWQ9Imh0bWxfYjA4NGNkMGNhNWM3NGYwNjkyZTA4MWE2NjcxZGVkNjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNhdGVybGluayAtIEFycmV0b24gU3QgR2VvcmdlcyBDb2ZFIFByaW1hcnkgU2Nob29sPGJyLz5TY2hvb2wvY29sbGVnZS91bml2ZXJzaXR5PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMWU3NWQ0YmJlY2E0Njg5OGYwNWIyNjIyMGEwMmM3ZC5zZXRDb250ZW50KGh0bWxfYjA4NGNkMGNhNWM3NGYwNjkyZTA4MWE2NjcxZGVkNjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85ZDZlNzg1Yzk0MDg0OGQ5OGFmMGIyZmNkZmJmNmRhZC5iaW5kUG9wdXAocG9wdXBfMzFlNzVkNGJiZWNhNDY4OThmMDViMjYyMjBhMDJjN2QpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMTVmOWQ3MTE4Zjg5NGNlNjllOTNlZWZiMjY4OWU3ZmEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC42NTM1NTUzODMwNTE3NCwtMS4yMzI3Mjk2ODA1NzYwMDg4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOGY0NmE4YWMyNzhhNGY2NWJhMTI3Mzg1NzY5NmUzZjMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWM0YjRmZjNiODYzNDNjNjhlMmVhMmJhZjhkMzc1NGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDhiYzNjMGZhYTA4NDI0Y2IwNTlmYjBmY2M3YmIzZjcgPSAkKCc8ZGl2IGlkPSJodG1sXzA4YmMzYzBmYWEwODQyNGNiMDU5ZmIwZmNjN2JiM2Y3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FZ2cgUGFja2luZyBTdGF0aW9uPGJyLz5NYW51ZmFjdHVyZXJzL3BhY2tlcnM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzljNGI0ZmYzYjg2MzQzYzY4ZTJlYTJiYWY4ZDM3NTRhLnNldENvbnRlbnQoaHRtbF8wOGJjM2MwZmFhMDg0MjRjYjA1OWZiMGZjYzdiYjNmNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzE1ZjlkNzExOGY4OTRjZTY5ZTkzZWVmYjI2ODllN2ZhLmJpbmRQb3B1cChwb3B1cF85YzRiNGZmM2I4NjM0M2M2OGUyZWEyYmFmOGQzNzU0YSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mNjBmYTVmZTNmZjU0M2M5YjUyNWU4MzY4MTFmYmFjZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjY3NzY0NDA0NTYxNDc4LC0xLjI0NjQ0MzkwOTIyODU5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOGY0NmE4YWMyNzhhNGY2NWJhMTI3Mzg1NzY5NmUzZjMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjdhNDIyNzM3MDAyNGRmMjhjNDI1YjUyYzc0YWMxMTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTBlMjgwYjQ1YTgwNDM2NjgxYmMwOTljNjlhNjU0OGEgPSAkKCc8ZGl2IGlkPSJodG1sX2UwZTI4MGI0NWE4MDQzNjY4MWJjMDk5YzY5YTY1NDhhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GYXJtZXIgSmFjayYjeDI3O3MgRmFybSBTaG9wPGJyLz5SZXRhaWxlcnMgLSBvdGhlcjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjdhNDIyNzM3MDAyNGRmMjhjNDI1YjUyYzc0YWMxMTAuc2V0Q29udGVudChodG1sX2UwZTI4MGI0NWE4MDQzNjY4MWJjMDk5YzY5YTY1NDhhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjYwZmE1ZmUzZmY1NDNjOWI1MjVlODM2ODExZmJhY2QuYmluZFBvcHVwKHBvcHVwX2Y3YTQyMjczNzAwMjRkZjI4YzQyNWI1MmM3NGFjMTEwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzZlZmU4ZWQ5NzE5NDQ5MmFhMzJlYzcwYjQ4NWIwZTEzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNjY5NzU2NzQxNjEwODIsLTEuMjgxNzUzMjI1Njk3NjY1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzhmNDZhOGFjMjc4YTRmNjViYTEyNzM4NTc2OTZlM2YzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc3MjE2Y2ZiMjdiNDRkYjNhNGJiMzQ3NzFlNmQ3YzIwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI2NzFiMmFjMTcxYTRmZGJiM2VkZDg5ODhjMjk1OGY4ID0gJCgnPGRpdiBpZD0iaHRtbF8yNjcxYjJhYzE3MWE0ZmRiYjNlZGQ4OTg4YzI5NThmOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TmF0dXJlem9uZXMgV2lsZGxpZmUgRWR1Y2F0aW9uIFRydXN0PGJyLz5SZXN0YXVyYW50L0NhZmUvQ2FudGVlbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzcyMTZjZmIyN2I0NGRiM2E0YmIzNDc3MWU2ZDdjMjAuc2V0Q29udGVudChodG1sXzI2NzFiMmFjMTcxYTRmZGJiM2VkZDg5ODhjMjk1OGY4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNmVmZThlZDk3MTk0NDkyYWEzMmVjNzBiNDg1YjBlMTMuYmluZFBvcHVwKHBvcHVwXzc3MjE2Y2ZiMjdiNDRkYjNhNGJiMzQ3NzFlNmQ3YzIwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2E2MWRjY2U2OGY4ZDRlYmFhMjJjYjM3YmE3NDg1ZGIxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNjc3ODgyNzAwNjQxODIsLTEuMjgzNzkxNzc3NTIzNTM0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOGY0NmE4YWMyNzhhNGY2NWJhMTI3Mzg1NzY5NmUzZjMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzk5YmUzMmUzNDFlNGZlOGI1MzY5YTBjMjBiMWU4MjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmQ1OTZmNzIzNTZkNDU2ZDlhZWMyNmU3OWMzZGNiMWIgPSAkKCc8ZGl2IGlkPSJodG1sX2JkNTk2ZjcyMzU2ZDQ1NmQ5YWVjMjZlNzljM2RjYjFiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OQ0NHIFRyYWRpbmcgTHRkPGJyLz5SZXN0YXVyYW50L0NhZmUvQ2FudGVlbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzk5YmUzMmUzNDFlNGZlOGI1MzY5YTBjMjBiMWU4MjIuc2V0Q29udGVudChodG1sX2JkNTk2ZjcyMzU2ZDQ1NmQ5YWVjMjZlNzljM2RjYjFiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYTYxZGNjZTY4ZjhkNGViYWEyMmNiMzdiYTc0ODVkYjEuYmluZFBvcHVwKHBvcHVwXzM5OWJlMzJlMzQxZTRmZThiNTM2OWEwYzIwYjFlODIyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2MwZTAyYWM1NzY2YTRkYjk4MGQ0YWFlZTJmODg3ODA1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNjczNTg4MTM2MzIzNjYsLTEuMjgyMTE2MTIwOTU2Mjg4MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzhmNDZhOGFjMjc4YTRmNjViYTEyNzM4NTc2OTZlM2YzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU0ZDMzZDY5YTI5MTQ2MDQ5NjMxYjExZDhhNzFhMzQ3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE0NDMyNzVkNjgyMjQ2MTNiYTAyZjQ3MjM2NTA3MzZhID0gJCgnPGRpdiBpZD0iaHRtbF8xNDQzMjc1ZDY4MjI0NjEzYmEwMmY0NzIzNjUwNzM2YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TmV3c3RvbmUgRmFybSBTaG9wPGJyLz5SZXRhaWxlcnMgLSBvdGhlcjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTRkMzNkNjlhMjkxNDYwNDk2MzFiMTFkOGE3MWEzNDcuc2V0Q29udGVudChodG1sXzE0NDMyNzVkNjgyMjQ2MTNiYTAyZjQ3MjM2NTA3MzZhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYzBlMDJhYzU3NjZhNGRiOTgwZDRhYWVlMmY4ODc4MDUuYmluZFBvcHVwKHBvcHVwXzU0ZDMzZDY5YTI5MTQ2MDQ5NjMxYjExZDhhNzFhMzQ3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzc5MzFmN2QwZjg1MDQ5OTFhYzI4OWZjODhiOTMyZjQwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNjY1NjkyMDg3NTU2MzYsLTEuMjQ3NTIxMDAwNzg4NzI4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOGY0NmE4YWMyNzhhNGY2NWJhMTI3Mzg1NzY5NmUzZjMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2E3OWFmMzg1NjlhNGZlYTljOGE1OTM4NTYwNTkzODYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDhmYzIzZDcwZjQ3NGEyNThmZTVkODdiZGE3YWQzZTggPSAkKCc8ZGl2IGlkPSJodG1sX2Q4ZmMyM2Q3MGY0NzRhMjU4ZmU1ZDg3YmRhN2FkM2U4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QaW5rJiN4Mjc7czxici8+RGlzdHJpYnV0b3JzL1RyYW5zcG9ydGVyczwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2E3OWFmMzg1NjlhNGZlYTljOGE1OTM4NTYwNTkzODYuc2V0Q29udGVudChodG1sX2Q4ZmMyM2Q3MGY0NzRhMjU4ZmU1ZDg3YmRhN2FkM2U4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNzkzMWY3ZDBmODUwNDk5MWFjMjg5ZmM4OGI5MzJmNDAuYmluZFBvcHVwKHBvcHVwX2NhNzlhZjM4NTY5YTRmZWE5YzhhNTkzODU2MDU5Mzg2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzU2ZGQyMWMzNGE0MzQ4OWVhMDE5M2UyNTEyZjIwMjliID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNjYxMjM1MjkyMjEyNTQ1LC0xLjI0NTAwODIxNDM5NzUzNl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzhmNDZhOGFjMjc4YTRmNjViYTEyNzM4NTc2OTZlM2YzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUxNzY4NGI2YzllYjQ2MDJhODIzODAxZjE5ZmExMzAyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc4NzJkMzliNmU5MzRjN2I5MzA0Nzk2OWEyMzhhMzMxID0gJCgnPGRpdiBpZD0iaHRtbF83ODcyZDM5YjZlOTM0YzdiOTMwNDc5NjlhMjM4YTMzMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmVkd2F5IEZhcm0gQmVkICZhbXA7IEJyZWFrZmFzdDxici8+SG90ZWwvYmVkICZhbXA7IGJyZWFrZmFzdC9ndWVzdCBob3VzZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTE3Njg0YjZjOWViNDYwMmE4MjM4MDFmMTlmYTEzMDIuc2V0Q29udGVudChodG1sXzc4NzJkMzliNmU5MzRjN2I5MzA0Nzk2OWEyMzhhMzMxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTZkZDIxYzM0YTQzNDg5ZWEwMTkzZTI1MTJmMjAyOWIuYmluZFBvcHVwKHBvcHVwXzUxNzY4NGI2YzllYjQ2MDJhODIzODAxZjE5ZmExMzAyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzI5NGMxNWJlOTI2NzQwZmFhYTc2ZTU2ZTU4Y2RjM2FjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNjc1MjU4ODI4NjgzMjIsLTEuMjQxMzg4NzY4OTg4ODI1Ml0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzhmNDZhOGFjMjc4YTRmNjViYTEyNzM4NTc2OTZlM2YzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzcxMWM5YzliZjBkNzRhZTZiODk4YzY1NDA0MTJjOWFlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzExYjU5MWE1YTAyNzQwNzFiNGNkMmI3ZThiMGM0MDUwID0gJCgnPGRpdiBpZD0iaHRtbF8xMWI1OTFhNWEwMjc0MDcxYjRjZDJiN2U4YjBjNDA1MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3QgR2VvcmdlcyBQcmUtU2Nob29sICZhbXA7IE51cnNlcnk8YnIvPkhvc3BpdGFscy9DaGlsZGNhcmUvQ2FyaW5nIFByZW1pc2VzPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83MTFjOWM5YmYwZDc0YWU2Yjg5OGM2NTQwNDEyYzlhZS5zZXRDb250ZW50KGh0bWxfMTFiNTkxYTVhMDI3NDA3MWI0Y2QyYjdlOGIwYzQwNTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yOTRjMTViZTkyNjc0MGZhYWE3NmU1NmU1OGNkYzNhYy5iaW5kUG9wdXAocG9wdXBfNzExYzljOWJmMGQ3NGFlNmI4OThjNjU0MDQxMmM5YWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfN2FhN2UwOGQ1NWEyNGU4MGI2YmI1ZTU5YmM2NzllYjkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC42NzgyOTg5MTc2MDAwMSwtMS4yNDYwOTAyNTI1NzE4NTcxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOGY0NmE4YWMyNzhhNGY2NWJhMTI3Mzg1NzY5NmUzZjMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDMyMWRlZjM4OTVkNDRmODkzZDE5YjE1ZjVmM2FiODYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWQzM2YxNjk2MDk3NGEyNTg1NDM5OWEwM2M3YzdjMDEgPSAkKCc8ZGl2IGlkPSJodG1sXzVkMzNmMTY5NjA5NzRhMjU4NTQzOTlhMDNjN2M3YzAxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Td2VldCBNZW1vcmllczxici8+UmV0YWlsZXJzIC0gb3RoZXI8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2QzMjFkZWYzODk1ZDQ0Zjg5M2QxOWIxNWY1ZjNhYjg2LnNldENvbnRlbnQoaHRtbF81ZDMzZjE2OTYwOTc0YTI1ODU0Mzk5YTAzYzdjN2MwMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzdhYTdlMDhkNTVhMjRlODBiNmJiNWU1OWJjNjc5ZWI5LmJpbmRQb3B1cChwb3B1cF9kMzIxZGVmMzg5NWQ0NGY4OTNkMTliMTVmNWYzYWI4Nik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82Mjc5ODI4NTI5NmE0YWM0ODljZmFhMTlkZmU5YzYxOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjY3NzkyNzk3MTkzNzk1LC0xLjI0Njc3MDU5NjAzMjc1N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzhmNDZhOGFjMjc4YTRmNjViYTEyNzM4NTc2OTZlM2YzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZmMTJjMTVlNzY3MjQ0NDE5MGFjMDRhZDQ0OTk2ZDE4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U4MTA3NjMzNDc0MDQ4ODBhZDc3MmJlZjE0ZTMyYmE1ID0gJCgnPGRpdiBpZD0iaHRtbF9lODEwNzYzMzQ3NDA0ODgwYWQ3NzJiZWYxNGUzMmJhNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhlIERhaXJ5bWFuJiN4Mjc7cyBEYXVnaHRlcjxici8+UHViL2Jhci9uaWdodGNsdWI8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZmMTJjMTVlNzY3MjQ0NDE5MGFjMDRhZDQ0OTk2ZDE4LnNldENvbnRlbnQoaHRtbF9lODEwNzYzMzQ3NDA0ODgwYWQ3NzJiZWYxNGUzMmJhNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzYyNzk4Mjg1Mjk2YTRhYzQ4OWNmYWExOWRmZTljNjE5LmJpbmRQb3B1cChwb3B1cF82ZjEyYzE1ZTc2NzI0NDQxOTBhYzA0YWQ0NDk5NmQxOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kOThiZmFjMDUzZjc0MjliYjU4NzRhNGQ3YTQ3ZjVkOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjY1ODQxMTMzNTA1NzQ0NCwtMS4yMjc1MTgyOTA1Mjg3NzM2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOGY0NmE4YWMyNzhhNGY2NWJhMTI3Mzg1NzY5NmUzZjMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzRiZmFmMzk4ZjU1NGNkOWI2YjBjMjNlMmI4NDA1YzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGY5YjA1NDE1OWM1NDgxMDhjOGM3YjBkMTI2YjkyMzMgPSAkKCc8ZGl2IGlkPSJodG1sXzRmOWIwNTQxNTljNTQ4MTA4YzhjN2IwZDEyNmI5MjMzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgRmlnaHRpbmcgQ29ja3M8YnIvPlB1Yi9iYXIvbmlnaHRjbHViPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNGJmYWYzOThmNTU0Y2Q5YjZiMGMyM2UyYjg0MDVjNi5zZXRDb250ZW50KGh0bWxfNGY5YjA1NDE1OWM1NDgxMDhjOGM3YjBkMTI2YjkyMzMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kOThiZmFjMDUzZjc0MjliYjU4NzRhNGQ3YTQ3ZjVkOS5iaW5kUG9wdXAocG9wdXBfMzRiZmFmMzk4ZjU1NGNkOWI2YjBjMjNlMmI4NDA1YzYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYWE4ZjY3NzQ5ODE2NDYzMTkxM2EwMGE3MTI2MWQ0YTQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC42NTQ4MTI0NDczNDYzMywtMS4yMTgzNzI4NjUxNzMyNDFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF84ZjQ2YThhYzI3OGE0ZjY1YmExMjczODU3Njk2ZTNmMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85NDA0MmNhM2JiNmU0N2Y1YmIyYjUxMTE0NDEwMjFkMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MGUwNjFhMzhhZTk0NzBkYWI1NjBkMzIzODJmZDg2OSA9ICQoJzxkaXYgaWQ9Imh0bWxfNzBlMDYxYTM4YWU5NDcwZGFiNTYwZDMyMzgyZmQ4NjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBHYXJkZW4gQ2FmZTxici8+UmVzdGF1cmFudC9DYWZlL0NhbnRlZW48L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk0MDQyY2EzYmI2ZTQ3ZjViYjJiNTExMTQ0MTAyMWQxLnNldENvbnRlbnQoaHRtbF83MGUwNjFhMzhhZTk0NzBkYWI1NjBkMzIzODJmZDg2OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2FhOGY2Nzc0OTgxNjQ2MzE5MTNhMDBhNzEyNjFkNGE0LmJpbmRQb3B1cChwb3B1cF85NDA0MmNhM2JiNmU0N2Y1YmIyYjUxMTE0NDEwMjFkMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80NWZmMmI2NTEzMWI0MTFjYjdkZmQ0MmUyY2VlZTQwYSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjY3NzU2OTYyOTcwNDY2NCwtMS4yNDYwMDU4NDMzMDY1NjY2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOGY0NmE4YWMyNzhhNGY2NWJhMTI3Mzg1NzY5NmUzZjMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWU0OTJiNjJmMTVhNGI0OTkyYjExOTA2YjA5ZTdlOTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzhkOGFjMjY5ZWVkNGYwMDgxYmRlYmFmOTE5NDAxOWUgPSAkKCc8ZGl2IGlkPSJodG1sXzM4ZDhhYzI2OWVlZDRmMDA4MWJkZWJhZjkxOTQwMTllIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgV2hpdGUgTGlvbjxici8+UHViL2Jhci9uaWdodGNsdWI8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzllNDkyYjYyZjE1YTRiNDk5MmIxMTkwNmIwOWU3ZTk3LnNldENvbnRlbnQoaHRtbF8zOGQ4YWMyNjllZWQ0ZjAwODFiZGViYWY5MTk0MDE5ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQ1ZmYyYjY1MTMxYjQxMWNiN2RmZDQyZTJjZWVlNDBhLmJpbmRQb3B1cChwb3B1cF85ZTQ5MmI2MmYxNWE0YjQ5OTJiMTE5MDZiMDllN2U5Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82YzZjMzZmNGU0M2Q0ZGUzODcwMDYxZTZmMjE4ZWM2MCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjY1Nzk1MTM3MDc0NDU4NCwtMS4yMjc1ODQ2OTQyMTc2MjRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF84ZjQ2YThhYzI3OGE0ZjY1YmExMjczODU3Njk2ZTNmMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZDcyMDlmOTA0ZGM0YTFlYjdhYWYxNGVhMDRlNjA3YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82OTA3NzE3YzQ2NWQ0MDUyYWFlMTA0NDVjMzA0YTJjMCA9ICQoJzxkaXYgaWQ9Imh0bWxfNjkwNzcxN2M0NjVkNDA1MmFhZTEwNDQ1YzMwNGEyYzAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldpZ2h0IFNhbGFkcyBHcm91cCBMdGQ8YnIvPkZhcm1lcnMvZ3Jvd2VyczwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGQ3MjA5ZjkwNGRjNGExZWI3YWFmMTRlYTA0ZTYwN2Iuc2V0Q29udGVudChodG1sXzY5MDc3MTdjNDY1ZDQwNTJhYWUxMDQ0NWMzMDRhMmMwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNmM2YzM2ZjRlNDNkNGRlMzg3MDA2MWU2ZjIxOGVjNjAuYmluZFBvcHVwKHBvcHVwXzBkNzIwOWY5MDRkYzRhMWViN2FhZjE0ZWEwNGU2MDdiKTsKCiAgICAgICAgICAgIAogICAgICAgIAo8L3NjcmlwdD4=\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
],
"text/plain": [
"<folium.folium.Map at 0x10e91bcf8>"
]
},
"execution_count": 53,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"m=folium.Map(location=center, zoom_start=12)\n",
"\n",
"import numpy as np\n",
"\n",
"for ix,row in results.iterrows():\n",
" loc=list(row['Geometry'].coords[0][::-1])\n",
" loc[0]=loc[0]+np.random.uniform(0.001, 10**(-20))-0.0005\n",
" loc[1]=loc[1]+np.random.uniform(0.001, 10**(-20))-0.0005\n",
"\n",
" folium.Marker(loc, popup='{}<br/>{}'.format(html.escape(row['BusinessName']),\n",
" html.escape(row['BusinessType']))).add_to(m)\n",
"m"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Another approach might be to try to geocode different addresses more accurately than their postcode centroid.\n",
"\n",
"To check that the markers are indeed bounded by the search area, we can add the boundary to the map as well as the points that supposedly lay within it."
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [],
"source": [
"def get_geojson(region_type, region, county=None, code=None,\n",
" col='wgs84',db_url = \"http://localhost:8001/adminboundaries.json\",\n",
" dataframe=False, geojsoncol=None):\n",
" ''' Return boundaries of a given name within an optional given county. '''\n",
" \n",
" q='SELECT AsGeoJSON({col}) FROM {table} WHERE name LIKE \"%{region}%\"'.format(col=col,table=region_type,region=region)\n",
" \n",
" if county is not None: q='{} AND FILE_NAME LIKE \"%{}%\"'.format(q, county)\n",
" if code is not None: q='{} AND CODE LIKE \"%{}%\"'.format(q, code)\n",
" \n",
" return query_datasette_api(q, db_url=db_url, dataframe=dataframe, geojsoncol=geojsoncol)\n"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><iframe src=\"data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVMgPSBmYWxzZTsgTF9OT19UT1VDSCA9IGZhbHNlOyBMX0RJU0FCTEVfM0QgPSBmYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjExLjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmNzcyIgLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC5taW4uY3NzIiAvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLXRoZW1lLm1pbi5jc3MiIC8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIgLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuY3NzIiAvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL3Jhd2dpdC5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIiAvPgogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIAogICAgICAgICAgICA8c3R5bGU+ICNtYXBfOGY0NmE4YWMyNzhhNGY2NWJhMTI3Mzg1NzY5NmUzZjMgewogICAgICAgICAgICAgICAgcG9zaXRpb24gOiByZWxhdGl2ZTsKICAgICAgICAgICAgICAgIHdpZHRoIDogMTAwLjAlOwogICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAuMCU7CiAgICAgICAgICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgICAgICAgICAgdG9wOiAwLjAlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICA8L3N0eWxlPgogICAgICAgIAo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwXzhmNDZhOGFjMjc4YTRmNjViYTEyNzM4NTc2OTZlM2YzIiA+PC9kaXY+CiAgICAgICAgCjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGJvdW5kcyA9IG51bGw7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcF84ZjQ2YThhYzI3OGE0ZjY1YmExMjczODU3Njk2ZTNmMyA9IEwubWFwKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcF84ZjQ2YThhYzI3OGE0ZjY1YmExMjczODU3Njk2ZTNmMycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2VudGVyOiBbNTAuNjU1MjU4MTc4NzEwOSwtMS4yMTg4MjkwMzU3NTg5N10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b29tOiAxMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJzOiBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmxkQ29weUp1bXA6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHRpbGVfbGF5ZXJfYWFhYWZiZDZiZTI2NDg0NWE4M2VkMGYyNDZhMTg4YjEgPSBMLnRpbGVMYXllcigKICAgICAgICAgICAgICAgICdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgICAgICAgICB7CiAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgIm1heFpvb20iOiAxOCwKICAibWluWm9vbSI6IDEsCiAgIm5vV3JhcCI6IGZhbHNlLAogICJzdWJkb21haW5zIjogImFiYyIKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfOGY0NmE4YWMyNzhhNGY2NWJhMTI3Mzg1NzY5NmUzZjMpOwogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2JkODI5MDJmYjJiNjQ2ZGQ5NmUwMDI5NmVmMTYxNzFlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNjU1MzAxNDAzMzExNDgsLTEuMjE4OTUxNzk3MTY4MTg3MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzhmNDZhOGFjMjc4YTRmNjViYTEyNzM4NTc2OTZlM2YzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UxYzVjNGVlN2QxMDQwNWVhMjc4MzkwYWIzNThkYmRiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgyOWZkMDQ2OGY3YTQwMTk5ZGYyZTFmZDdiOWY0ODNjID0gJCgnPGRpdiBpZD0iaHRtbF84MjlmZDA0NjhmN2E0MDE5OWRmMmUxZmQ3YjlmNDgzYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QW1hem9uIFdvcmxkPGJyLz5SZXN0YXVyYW50L0NhZmUvQ2FudGVlbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTFjNWM0ZWU3ZDEwNDA1ZWEyNzgzOTBhYjM1OGRiZGIuc2V0Q29udGVudChodG1sXzgyOWZkMDQ2OGY3YTQwMTk5ZGYyZTFmZDdiOWY0ODNjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYmQ4MjkwMmZiMmI2NDZkZDk2ZTAwMjk2ZWYxNjE3MWUuYmluZFBvcHVwKHBvcHVwX2UxYzVjNGVlN2QxMDQwNWVhMjc4MzkwYWIzNThkYmRiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzgzNWRmNDk0NDBmZTQ4NmU4NDA1Mjg0OGY4YTg4OWVlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNjc1MjQwMDI5MTQ3NjUsLTEuMjQxNTAyMzM0ODgxOTM3Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzhmNDZhOGFjMjc4YTRmNjViYTEyNzM4NTc2OTZlM2YzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M3ZjQ0NmRhOGFjZDQwMDBhYTUxMWU4YWU0YjdjNjkyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RjOWQ0NTVjMWU0YTRiN2E5ZDUzZGQ2NTI0YjBkYTBkID0gJCgnPGRpdiBpZD0iaHRtbF9kYzlkNDU1YzFlNGE0YjdhOWQ1M2RkNjUyNGIwZGEwZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QXJyZXRvbiBDb21tdW5pdHkgQ2VudHJlPGJyLz5PdGhlciBjYXRlcmluZyBwcmVtaXNlczwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzdmNDQ2ZGE4YWNkNDAwMGFhNTExZThhZTRiN2M2OTIuc2V0Q29udGVudChodG1sX2RjOWQ0NTVjMWU0YTRiN2E5ZDUzZGQ2NTI0YjBkYTBkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfODM1ZGY0OTQ0MGZlNDg2ZTg0MDUyODQ4ZjhhODg5ZWUuYmluZFBvcHVwKHBvcHVwX2M3ZjQ0NmRhOGFjZDQwMDBhYTUxMWU4YWU0YjdjNjkyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzQ5ZmE3OWFiYzdiYTRlODQ5ZmJiNTAzODM3NzJlNDY4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNjc4NDgxMTcxOTQ2MzcsLTEuMjQ1ODcwMjgyOTQwNDA5MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzhmNDZhOGFjMjc4YTRmNjViYTEyNzM4NTc2OTZlM2YzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MzYTlmNjg4ZDU2MzQzY2U4YTkwNTc5NDFlZjg2Zjk3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYzN2UzNDAxYjBmZjRiMzRiYTYwNGJiOTkyZWIwMmM2ID0gJCgnPGRpdiBpZD0iaHRtbF82MzdlMzQwMWIwZmY0YjM0YmE2MDRiYjk5MmViMDJjNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QXJyZXRvbiBNYW5vciBHdWVzdCBIb3VzZTxici8+SG90ZWwvYmVkICZhbXA7IGJyZWFrZmFzdC9ndWVzdCBob3VzZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzNhOWY2ODhkNTYzNDNjZThhOTA1Nzk0MWVmODZmOTcuc2V0Q29udGVudChodG1sXzYzN2UzNDAxYjBmZjRiMzRiYTYwNGJiOTkyZWIwMmM2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNDlmYTc5YWJjN2JhNGU4NDlmYmI1MDM4Mzc3MmU0NjguYmluZFBvcHVwKHBvcHVwX2MzYTlmNjg4ZDU2MzQzY2U4YTkwNTc5NDFlZjg2Zjk3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzM2YjhlYTZkZTZmMTRmMjZhOTRkMDU0NGRkMjJhYmMwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNjcxMjU2NjQ2MTYzMzUsLTEuMjM0MDM4MDczMzUzOTA5NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzhmNDZhOGFjMjc4YTRmNjViYTEyNzM4NTc2OTZlM2YzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RhNDNkOTFjNDhkNzRlZGQ5MWVlYzIyYmRkYWNkZmNiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUxNmJiMjkyNGFmNTQxMTE5NGU4NzcwNTNkMmVjYTM5ID0gJCgnPGRpdiBpZD0iaHRtbF81MTZiYjI5MjRhZjU0MTExOTRlODc3MDUzZDJlY2EzOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+QXJyZXRvbiBQb3N0IE9mZmljZTxici8+UmV0YWlsZXJzIC0gb3RoZXI8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RhNDNkOTFjNDhkNzRlZGQ5MWVlYzIyYmRkYWNkZmNiLnNldENvbnRlbnQoaHRtbF81MTZiYjI5MjRhZjU0MTExOTRlODc3MDUzZDJlY2EzOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzM2YjhlYTZkZTZmMTRmMjZhOTRkMDU0NGRkMjJhYmMwLmJpbmRQb3B1cChwb3B1cF9kYTQzZDkxYzQ4ZDc0ZWRkOTFlZWMyMmJkZGFjZGZjYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kOTVjN2Y4ZjRmNTQ0ZWI0OTkxNjk5ZjcyOWY2NzQ4NyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjY3MjY3NTQzNjc0NTcwNiwtMS4yODU4ODkwODYyMjE0OTU4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOGY0NmE4YWMyNzhhNGY2NWJhMTI3Mzg1NzY5NmUzZjMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWNlMmRlYzdhNmFhNDI0Nzg0NGI0MmQ1ZjEyZGJiZGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTQzOThkZjM2ZDM4NGU2YWI2ZmEwYWYyMTU3MmNhZWUgPSAkKCc8ZGl2IGlkPSJodG1sXzU0Mzk4ZGYzNmQzODRlNmFiNmZhMGFmMjE1NzJjYWVlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CbGFja3dhdGVyIE1pbGwgUmVzaWRlbnRpYWwgSG9tZTxici8+SG9zcGl0YWxzL0NoaWxkY2FyZS9DYXJpbmcgUHJlbWlzZXM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VjZTJkZWM3YTZhYTQyNDc4NDRiNDJkNWYxMmRiYmRiLnNldENvbnRlbnQoaHRtbF81NDM5OGRmMzZkMzg0ZTZhYjZmYTBhZjIxNTcyY2FlZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Q5NWM3ZjhmNGY1NDRlYjQ5OTE2OTlmNzI5ZjY3NDg3LmJpbmRQb3B1cChwb3B1cF9lY2UyZGVjN2E2YWE0MjQ3ODQ0YjQyZDVmMTJkYmJkYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85ZDZlNzg1Yzk0MDg0OGQ5OGFmMGIyZmNkZmJmNmRhZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjY3NTM4MzEyNTU1OTQ0LC0xLjI0MTg5MzAyODU4MzE5NDhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF84ZjQ2YThhYzI3OGE0ZjY1YmExMjczODU3Njk2ZTNmMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMWU3NWQ0YmJlY2E0Njg5OGYwNWIyNjIyMGEwMmM3ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iMDg0Y2QwY2E1Yzc0ZjA2OTJlMDgxYTY2NzFkZWQ2NyA9ICQoJzxkaXYgaWQ9Imh0bWxfYjA4NGNkMGNhNWM3NGYwNjkyZTA4MWE2NjcxZGVkNjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNhdGVybGluayAtIEFycmV0b24gU3QgR2VvcmdlcyBDb2ZFIFByaW1hcnkgU2Nob29sPGJyLz5TY2hvb2wvY29sbGVnZS91bml2ZXJzaXR5PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMWU3NWQ0YmJlY2E0Njg5OGYwNWIyNjIyMGEwMmM3ZC5zZXRDb250ZW50KGh0bWxfYjA4NGNkMGNhNWM3NGYwNjkyZTA4MWE2NjcxZGVkNjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85ZDZlNzg1Yzk0MDg0OGQ5OGFmMGIyZmNkZmJmNmRhZC5iaW5kUG9wdXAocG9wdXBfMzFlNzVkNGJiZWNhNDY4OThmMDViMjYyMjBhMDJjN2QpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMTVmOWQ3MTE4Zjg5NGNlNjllOTNlZWZiMjY4OWU3ZmEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC42NTM1NTUzODMwNTE3NCwtMS4yMzI3Mjk2ODA1NzYwMDg4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOGY0NmE4YWMyNzhhNGY2NWJhMTI3Mzg1NzY5NmUzZjMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWM0YjRmZjNiODYzNDNjNjhlMmVhMmJhZjhkMzc1NGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDhiYzNjMGZhYTA4NDI0Y2IwNTlmYjBmY2M3YmIzZjcgPSAkKCc8ZGl2IGlkPSJodG1sXzA4YmMzYzBmYWEwODQyNGNiMDU5ZmIwZmNjN2JiM2Y3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5FZ2cgUGFja2luZyBTdGF0aW9uPGJyLz5NYW51ZmFjdHVyZXJzL3BhY2tlcnM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzljNGI0ZmYzYjg2MzQzYzY4ZTJlYTJiYWY4ZDM3NTRhLnNldENvbnRlbnQoaHRtbF8wOGJjM2MwZmFhMDg0MjRjYjA1OWZiMGZjYzdiYjNmNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzE1ZjlkNzExOGY4OTRjZTY5ZTkzZWVmYjI2ODllN2ZhLmJpbmRQb3B1cChwb3B1cF85YzRiNGZmM2I4NjM0M2M2OGUyZWEyYmFmOGQzNzU0YSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mNjBmYTVmZTNmZjU0M2M5YjUyNWU4MzY4MTFmYmFjZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjY3NzY0NDA0NTYxNDc4LC0xLjI0NjQ0MzkwOTIyODU5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOGY0NmE4YWMyNzhhNGY2NWJhMTI3Mzg1NzY5NmUzZjMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjdhNDIyNzM3MDAyNGRmMjhjNDI1YjUyYzc0YWMxMTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTBlMjgwYjQ1YTgwNDM2NjgxYmMwOTljNjlhNjU0OGEgPSAkKCc8ZGl2IGlkPSJodG1sX2UwZTI4MGI0NWE4MDQzNjY4MWJjMDk5YzY5YTY1NDhhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5GYXJtZXIgSmFjayYjeDI3O3MgRmFybSBTaG9wPGJyLz5SZXRhaWxlcnMgLSBvdGhlcjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjdhNDIyNzM3MDAyNGRmMjhjNDI1YjUyYzc0YWMxMTAuc2V0Q29udGVudChodG1sX2UwZTI4MGI0NWE4MDQzNjY4MWJjMDk5YzY5YTY1NDhhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjYwZmE1ZmUzZmY1NDNjOWI1MjVlODM2ODExZmJhY2QuYmluZFBvcHVwKHBvcHVwX2Y3YTQyMjczNzAwMjRkZjI4YzQyNWI1MmM3NGFjMTEwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzZlZmU4ZWQ5NzE5NDQ5MmFhMzJlYzcwYjQ4NWIwZTEzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNjY5NzU2NzQxNjEwODIsLTEuMjgxNzUzMjI1Njk3NjY1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzhmNDZhOGFjMjc4YTRmNjViYTEyNzM4NTc2OTZlM2YzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc3MjE2Y2ZiMjdiNDRkYjNhNGJiMzQ3NzFlNmQ3YzIwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI2NzFiMmFjMTcxYTRmZGJiM2VkZDg5ODhjMjk1OGY4ID0gJCgnPGRpdiBpZD0iaHRtbF8yNjcxYjJhYzE3MWE0ZmRiYjNlZGQ4OTg4YzI5NThmOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TmF0dXJlem9uZXMgV2lsZGxpZmUgRWR1Y2F0aW9uIFRydXN0PGJyLz5SZXN0YXVyYW50L0NhZmUvQ2FudGVlbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzcyMTZjZmIyN2I0NGRiM2E0YmIzNDc3MWU2ZDdjMjAuc2V0Q29udGVudChodG1sXzI2NzFiMmFjMTcxYTRmZGJiM2VkZDg5ODhjMjk1OGY4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNmVmZThlZDk3MTk0NDkyYWEzMmVjNzBiNDg1YjBlMTMuYmluZFBvcHVwKHBvcHVwXzc3MjE2Y2ZiMjdiNDRkYjNhNGJiMzQ3NzFlNmQ3YzIwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2E2MWRjY2U2OGY4ZDRlYmFhMjJjYjM3YmE3NDg1ZGIxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNjc3ODgyNzAwNjQxODIsLTEuMjgzNzkxNzc3NTIzNTM0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOGY0NmE4YWMyNzhhNGY2NWJhMTI3Mzg1NzY5NmUzZjMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzk5YmUzMmUzNDFlNGZlOGI1MzY5YTBjMjBiMWU4MjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmQ1OTZmNzIzNTZkNDU2ZDlhZWMyNmU3OWMzZGNiMWIgPSAkKCc8ZGl2IGlkPSJodG1sX2JkNTk2ZjcyMzU2ZDQ1NmQ5YWVjMjZlNzljM2RjYjFiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OQ0NHIFRyYWRpbmcgTHRkPGJyLz5SZXN0YXVyYW50L0NhZmUvQ2FudGVlbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzk5YmUzMmUzNDFlNGZlOGI1MzY5YTBjMjBiMWU4MjIuc2V0Q29udGVudChodG1sX2JkNTk2ZjcyMzU2ZDQ1NmQ5YWVjMjZlNzljM2RjYjFiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYTYxZGNjZTY4ZjhkNGViYWEyMmNiMzdiYTc0ODVkYjEuYmluZFBvcHVwKHBvcHVwXzM5OWJlMzJlMzQxZTRmZThiNTM2OWEwYzIwYjFlODIyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2MwZTAyYWM1NzY2YTRkYjk4MGQ0YWFlZTJmODg3ODA1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNjczNTg4MTM2MzIzNjYsLTEuMjgyMTE2MTIwOTU2Mjg4MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzhmNDZhOGFjMjc4YTRmNjViYTEyNzM4NTc2OTZlM2YzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU0ZDMzZDY5YTI5MTQ2MDQ5NjMxYjExZDhhNzFhMzQ3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE0NDMyNzVkNjgyMjQ2MTNiYTAyZjQ3MjM2NTA3MzZhID0gJCgnPGRpdiBpZD0iaHRtbF8xNDQzMjc1ZDY4MjI0NjEzYmEwMmY0NzIzNjUwNzM2YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TmV3c3RvbmUgRmFybSBTaG9wPGJyLz5SZXRhaWxlcnMgLSBvdGhlcjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTRkMzNkNjlhMjkxNDYwNDk2MzFiMTFkOGE3MWEzNDcuc2V0Q29udGVudChodG1sXzE0NDMyNzVkNjgyMjQ2MTNiYTAyZjQ3MjM2NTA3MzZhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYzBlMDJhYzU3NjZhNGRiOTgwZDRhYWVlMmY4ODc4MDUuYmluZFBvcHVwKHBvcHVwXzU0ZDMzZDY5YTI5MTQ2MDQ5NjMxYjExZDhhNzFhMzQ3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzc5MzFmN2QwZjg1MDQ5OTFhYzI4OWZjODhiOTMyZjQwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNjY1NjkyMDg3NTU2MzYsLTEuMjQ3NTIxMDAwNzg4NzI4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOGY0NmE4YWMyNzhhNGY2NWJhMTI3Mzg1NzY5NmUzZjMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2E3OWFmMzg1NjlhNGZlYTljOGE1OTM4NTYwNTkzODYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDhmYzIzZDcwZjQ3NGEyNThmZTVkODdiZGE3YWQzZTggPSAkKCc8ZGl2IGlkPSJodG1sX2Q4ZmMyM2Q3MGY0NzRhMjU4ZmU1ZDg3YmRhN2FkM2U4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QaW5rJiN4Mjc7czxici8+RGlzdHJpYnV0b3JzL1RyYW5zcG9ydGVyczwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2E3OWFmMzg1NjlhNGZlYTljOGE1OTM4NTYwNTkzODYuc2V0Q29udGVudChodG1sX2Q4ZmMyM2Q3MGY0NzRhMjU4ZmU1ZDg3YmRhN2FkM2U4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNzkzMWY3ZDBmODUwNDk5MWFjMjg5ZmM4OGI5MzJmNDAuYmluZFBvcHVwKHBvcHVwX2NhNzlhZjM4NTY5YTRmZWE5YzhhNTkzODU2MDU5Mzg2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzU2ZGQyMWMzNGE0MzQ4OWVhMDE5M2UyNTEyZjIwMjliID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNjYxMjM1MjkyMjEyNTQ1LC0xLjI0NTAwODIxNDM5NzUzNl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzhmNDZhOGFjMjc4YTRmNjViYTEyNzM4NTc2OTZlM2YzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUxNzY4NGI2YzllYjQ2MDJhODIzODAxZjE5ZmExMzAyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc4NzJkMzliNmU5MzRjN2I5MzA0Nzk2OWEyMzhhMzMxID0gJCgnPGRpdiBpZD0iaHRtbF83ODcyZDM5YjZlOTM0YzdiOTMwNDc5NjlhMjM4YTMzMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmVkd2F5IEZhcm0gQmVkICZhbXA7IEJyZWFrZmFzdDxici8+SG90ZWwvYmVkICZhbXA7IGJyZWFrZmFzdC9ndWVzdCBob3VzZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTE3Njg0YjZjOWViNDYwMmE4MjM4MDFmMTlmYTEzMDIuc2V0Q29udGVudChodG1sXzc4NzJkMzliNmU5MzRjN2I5MzA0Nzk2OWEyMzhhMzMxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTZkZDIxYzM0YTQzNDg5ZWEwMTkzZTI1MTJmMjAyOWIuYmluZFBvcHVwKHBvcHVwXzUxNzY4NGI2YzllYjQ2MDJhODIzODAxZjE5ZmExMzAyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzI5NGMxNWJlOTI2NzQwZmFhYTc2ZTU2ZTU4Y2RjM2FjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTAuNjc1MjU4ODI4NjgzMjIsLTEuMjQxMzg4NzY4OTg4ODI1Ml0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzhmNDZhOGFjMjc4YTRmNjViYTEyNzM4NTc2OTZlM2YzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzcxMWM5YzliZjBkNzRhZTZiODk4YzY1NDA0MTJjOWFlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzExYjU5MWE1YTAyNzQwNzFiNGNkMmI3ZThiMGM0MDUwID0gJCgnPGRpdiBpZD0iaHRtbF8xMWI1OTFhNWEwMjc0MDcxYjRjZDJiN2U4YjBjNDA1MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U3QgR2VvcmdlcyBQcmUtU2Nob29sICZhbXA7IE51cnNlcnk8YnIvPkhvc3BpdGFscy9DaGlsZGNhcmUvQ2FyaW5nIFByZW1pc2VzPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83MTFjOWM5YmYwZDc0YWU2Yjg5OGM2NTQwNDEyYzlhZS5zZXRDb250ZW50KGh0bWxfMTFiNTkxYTVhMDI3NDA3MWI0Y2QyYjdlOGIwYzQwNTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yOTRjMTViZTkyNjc0MGZhYWE3NmU1NmU1OGNkYzNhYy5iaW5kUG9wdXAocG9wdXBfNzExYzljOWJmMGQ3NGFlNmI4OThjNjU0MDQxMmM5YWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfN2FhN2UwOGQ1NWEyNGU4MGI2YmI1ZTU5YmM2NzllYjkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC42NzgyOTg5MTc2MDAwMSwtMS4yNDYwOTAyNTI1NzE4NTcxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOGY0NmE4YWMyNzhhNGY2NWJhMTI3Mzg1NzY5NmUzZjMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDMyMWRlZjM4OTVkNDRmODkzZDE5YjE1ZjVmM2FiODYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWQzM2YxNjk2MDk3NGEyNTg1NDM5OWEwM2M3YzdjMDEgPSAkKCc8ZGl2IGlkPSJodG1sXzVkMzNmMTY5NjA5NzRhMjU4NTQzOTlhMDNjN2M3YzAxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Td2VldCBNZW1vcmllczxici8+UmV0YWlsZXJzIC0gb3RoZXI8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2QzMjFkZWYzODk1ZDQ0Zjg5M2QxOWIxNWY1ZjNhYjg2LnNldENvbnRlbnQoaHRtbF81ZDMzZjE2OTYwOTc0YTI1ODU0Mzk5YTAzYzdjN2MwMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzdhYTdlMDhkNTVhMjRlODBiNmJiNWU1OWJjNjc5ZWI5LmJpbmRQb3B1cChwb3B1cF9kMzIxZGVmMzg5NWQ0NGY4OTNkMTliMTVmNWYzYWI4Nik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82Mjc5ODI4NTI5NmE0YWM0ODljZmFhMTlkZmU5YzYxOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjY3NzkyNzk3MTkzNzk1LC0xLjI0Njc3MDU5NjAzMjc1N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzhmNDZhOGFjMjc4YTRmNjViYTEyNzM4NTc2OTZlM2YzKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZmMTJjMTVlNzY3MjQ0NDE5MGFjMDRhZDQ0OTk2ZDE4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U4MTA3NjMzNDc0MDQ4ODBhZDc3MmJlZjE0ZTMyYmE1ID0gJCgnPGRpdiBpZD0iaHRtbF9lODEwNzYzMzQ3NDA0ODgwYWQ3NzJiZWYxNGUzMmJhNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VGhlIERhaXJ5bWFuJiN4Mjc7cyBEYXVnaHRlcjxici8+UHViL2Jhci9uaWdodGNsdWI8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZmMTJjMTVlNzY3MjQ0NDE5MGFjMDRhZDQ0OTk2ZDE4LnNldENvbnRlbnQoaHRtbF9lODEwNzYzMzQ3NDA0ODgwYWQ3NzJiZWYxNGUzMmJhNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzYyNzk4Mjg1Mjk2YTRhYzQ4OWNmYWExOWRmZTljNjE5LmJpbmRQb3B1cChwb3B1cF82ZjEyYzE1ZTc2NzI0NDQxOTBhYzA0YWQ0NDk5NmQxOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kOThiZmFjMDUzZjc0MjliYjU4NzRhNGQ3YTQ3ZjVkOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjY1ODQxMTMzNTA1NzQ0NCwtMS4yMjc1MTgyOTA1Mjg3NzM2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOGY0NmE4YWMyNzhhNGY2NWJhMTI3Mzg1NzY5NmUzZjMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzRiZmFmMzk4ZjU1NGNkOWI2YjBjMjNlMmI4NDA1YzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGY5YjA1NDE1OWM1NDgxMDhjOGM3YjBkMTI2YjkyMzMgPSAkKCc8ZGl2IGlkPSJodG1sXzRmOWIwNTQxNTljNTQ4MTA4YzhjN2IwZDEyNmI5MjMzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgRmlnaHRpbmcgQ29ja3M8YnIvPlB1Yi9iYXIvbmlnaHRjbHViPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNGJmYWYzOThmNTU0Y2Q5YjZiMGMyM2UyYjg0MDVjNi5zZXRDb250ZW50KGh0bWxfNGY5YjA1NDE1OWM1NDgxMDhjOGM3YjBkMTI2YjkyMzMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kOThiZmFjMDUzZjc0MjliYjU4NzRhNGQ3YTQ3ZjVkOS5iaW5kUG9wdXAocG9wdXBfMzRiZmFmMzk4ZjU1NGNkOWI2YjBjMjNlMmI4NDA1YzYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYWE4ZjY3NzQ5ODE2NDYzMTkxM2EwMGE3MTI2MWQ0YTQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs1MC42NTQ4MTI0NDczNDYzMywtMS4yMTgzNzI4NjUxNzMyNDFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF84ZjQ2YThhYzI3OGE0ZjY1YmExMjczODU3Njk2ZTNmMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85NDA0MmNhM2JiNmU0N2Y1YmIyYjUxMTE0NDEwMjFkMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MGUwNjFhMzhhZTk0NzBkYWI1NjBkMzIzODJmZDg2OSA9ICQoJzxkaXYgaWQ9Imh0bWxfNzBlMDYxYTM4YWU5NDcwZGFiNTYwZDMyMzgyZmQ4NjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRoZSBHYXJkZW4gQ2FmZTxici8+UmVzdGF1cmFudC9DYWZlL0NhbnRlZW48L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk0MDQyY2EzYmI2ZTQ3ZjViYjJiNTExMTQ0MTAyMWQxLnNldENvbnRlbnQoaHRtbF83MGUwNjFhMzhhZTk0NzBkYWI1NjBkMzIzODJmZDg2OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2FhOGY2Nzc0OTgxNjQ2MzE5MTNhMDBhNzEyNjFkNGE0LmJpbmRQb3B1cChwb3B1cF85NDA0MmNhM2JiNmU0N2Y1YmIyYjUxMTE0NDEwMjFkMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80NWZmMmI2NTEzMWI0MTFjYjdkZmQ0MmUyY2VlZTQwYSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjY3NzU2OTYyOTcwNDY2NCwtMS4yNDYwMDU4NDMzMDY1NjY2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfOGY0NmE4YWMyNzhhNGY2NWJhMTI3Mzg1NzY5NmUzZjMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWU0OTJiNjJmMTVhNGI0OTkyYjExOTA2YjA5ZTdlOTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzhkOGFjMjY5ZWVkNGYwMDgxYmRlYmFmOTE5NDAxOWUgPSAkKCc8ZGl2IGlkPSJodG1sXzM4ZDhhYzI2OWVlZDRmMDA4MWJkZWJhZjkxOTQwMTllIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5UaGUgV2hpdGUgTGlvbjxici8+UHViL2Jhci9uaWdodGNsdWI8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzllNDkyYjYyZjE1YTRiNDk5MmIxMTkwNmIwOWU3ZTk3LnNldENvbnRlbnQoaHRtbF8zOGQ4YWMyNjllZWQ0ZjAwODFiZGViYWY5MTk0MDE5ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQ1ZmYyYjY1MTMxYjQxMWNiN2RmZDQyZTJjZWVlNDBhLmJpbmRQb3B1cChwb3B1cF85ZTQ5MmI2MmYxNWE0YjQ5OTJiMTE5MDZiMDllN2U5Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82YzZjMzZmNGU0M2Q0ZGUzODcwMDYxZTZmMjE4ZWM2MCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzUwLjY1Nzk1MTM3MDc0NDU4NCwtMS4yMjc1ODQ2OTQyMTc2MjRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF84ZjQ2YThhYzI3OGE0ZjY1YmExMjczODU3Njk2ZTNmMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZDcyMDlmOTA0ZGM0YTFlYjdhYWYxNGVhMDRlNjA3YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82OTA3NzE3YzQ2NWQ0MDUyYWFlMTA0NDVjMzA0YTJjMCA9ICQoJzxkaXYgaWQ9Imh0bWxfNjkwNzcxN2M0NjVkNDA1MmFhZTEwNDQ1YzMwNGEyYzAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldpZ2h0IFNhbGFkcyBHcm91cCBMdGQ8YnIvPkZhcm1lcnMvZ3Jvd2VyczwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGQ3MjA5ZjkwNGRjNGExZWI3YWFmMTRlYTA0ZTYwN2Iuc2V0Q29udGVudChodG1sXzY5MDc3MTdjNDY1ZDQwNTJhYWUxMDQ0NWMzMDRhMmMwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNmM2YzM2ZjRlNDNkNGRlMzg3MDA2MWU2ZjIxOGVjNjAuYmluZFBvcHVwKHBvcHVwXzBkNzIwOWY5MDRkYzRhMWViN2FhZjE0ZWEwNGU2MDdiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCgogICAgICAgICAgICAKCiAgICAgICAgICAgICAgICB2YXIgZ2VvX2pzb25fYWYyNGExYmM1NTcyNGUwNjhjNTU3YmVlZmQ3Yzg3ZjIgPSBMLmdlb0pzb24oCiAgICAgICAgICAgICAgICAgICAgeyJmZWF0dXJlcyI6IFt7Imdlb21ldHJ5IjogeyJjb29yZGluYXRlcyI6IFtbW1stMS4yOTMzMjE5NjE1NDY4NTYsIDUwLjY2Mzk5NjgxMzU2MjgxXSwgWy0xLjI5MzAwMDk1ODA4NzY1NiwgNTAuNjY0MDc5Mzc2NDY4MDNdLCBbLTEuMjkyNzIzMTQyODc0NDEsIDUwLjY2NDExMzY1Mjc3MDk2XSwgWy0xLjI5MjUwNDk4NTM4MjgzNCwgNTAuNjY0MTI5NDEwNzcwMThdLCBbLTEuMjkyMjUyOTc5NDg3OTM1LCA1MC42NjQyMzk0NTExNDE5OV0sIFstMS4yOTE4NDQ3MDU4OTUxMzgsIDUwLjY2NDU3MDYwMjc5MjcyXSwgWy0xLjI5MTg2NDc1NDUyMDU4NCwgNTAuNjY0NzQyNDM5NjMxNTJdLCBbLTEuMjkxNzg2NDk0OTQ5MTI3LCA1MC42NjQ4NjUyMjE1NDE1MV0sIFstMS4yOTE4OTk2NjI4MjMxNDMsIDUwLjY2NDk2NTcwMTQyMTY1XSwgWy0xLjI5MTk3NDE1MDQ5NTI1MiwgNTAuNjY1MDkzODE2Mjg3MjFdLCBbLTEuMjkxOTUxMjYzMjgyMjA4LCA1MC42NjUxMTA3NTg5MDEzMl0sIFstMS4yOTE4OTE3MzAzMzE3MjcsIDUwLjY2NTExMzA5NDQ0Njc0XSwgWy0xLjI5MTgxNjY4MjY4ODgzLCA1MC42NjUxMTUzMzU3MjY1NF0sIFstMS4yOTE3MzczNjc5ODE2MDQsIDUwLjY2NTEyMjA0NjE5NTYyXSwgWy0xLjI5MTY2NDc3NTU3ODIzNiwgNTAuNjY1MTU0OTU5MjczNzVdLCBbLTEuMjkxNjI3NDUzODc4NTYsIDUwLjY2NTE4NTI5OTYwNTE5XSwgWy0xLjI5MTYwODgxNTAxNDM0MiwgNTAuNjY1MjA2NzYzMTIxOTJdLCBbLTEuMjkxNjEzNjMwMDg2NTY1LCA1MC42NjUyNTg5MzYyMTU2OF0sIFstMS4yOTE1NTQwMTc3ODM0NTgsIDUwLjY2NTM2NzM1Njg0NjA0XSwgWy0xLjI5MTU2OTMxNjIwMDExLCA1MC42NjUzODE4MzQzMDg4M10sIFstMS4yOTE1OTE3OTgwMzQ4NzgsIDUwLjY2NTM5MTg2MDI1NzI1XSwgWy0xLjI5MTYyNTU1NDYwNzQzNCwgNTAuNjY1NDA0NjUxNzk3OTldLCBbLTEuMjkxNjUyNDc0MjkyMzcyLCA1MC42NjU0MDY2MTM0MTIyM10sIFstMS4yOTE3MTczMDk1MjE4MDUsIDUwLjY2NTQyNDA4ODg5NTY5XSwgWy0xLjI5MTc3MDYzODg5MTg5OCwgNTAuNjY1NDU0MTcwNzk4OTFdLCBbLTEuMjkxODE5MjM0NDk1NzQsIDUwLjY2NTUxMjAwNDAwMjhdLCBbLTEuMjkxODAyOTg5NzI2MTczLCA1MC42NjU1NjA0NTMwNDAzOV0sIFstMS4yOTE3NjAyMDM2MzM4OTksIDUwLjY2NTU4MTc2OTkwNDkzXSwgWy0xLjI5MTcyNjA0MTMyNDA2MSwgNTAuNjY1NTk1OTQ2ODg4MzhdLCBbLTEuMjkxNjkzMzQ2NDI4NTgsIDUwLjY2NTYwNTYzNzYxODI0XSwgWy0xLjI5MTYyMTUxMDQ1NjQyLCA1MC42NjU2NzM1Mjc1OTQxNV0sIFstMS4yOTE2MDg1MjQ4MzM3OTksIDUwLjY2NTY5MTQyOTMyOTkyXSwgWy0xLjI5MTYwNjg1NDU2NjE3MSwgNTAuNjY1NzA5Mzk5ODE0MjldLCBbLTEuMjkxNjM2Mzg0ODA5ODAyLCA1MC42NjU3MjM5NjM3MzU3XSwgWy0xLjI5MTczOTI5ODUxMjk2OSwgNTAuNjY1NzQ2MTY1NzAzNTZdLCBbLTEuMjkxODQyMTM4Mzc3NjYyLCA1MC42NjU3ODEwNDM0Nzc0M10sIFstMS4yOTE4NTUyNjY3MTg5NDksIDUwLjY2NTg0Njc1MjUyMTg3XSwgWy0xLjI5MTgwNTEwNzY3ODg2MywgNTAuNjY1ODg1MTA2MjIxNzVdLCBbLTEuMjkxNzc0MDY5MjkxNDA4LCA1MC42NjU4Nzc3MjU0MzU2Ml0sIFstMS4yOTE0MjI5ODc0MTc3NzMsIDUwLjY2NTgwMjc3MDc1NzVdLCBbLTEuMjkxMzczMzY5MTE0MDE2LCA1MC42NjU4MDUxNjYyOTRdLCBbLTEuMjkxMzE0OTg2NTIzMjU0LCA1MC42NjU4MzE3ODIzOTE3XSwgWy0xLjI5MTI3NjQyNjU0OTA4MiwgNTAuNjY1ODUxMzI2NzAyNzhdLCBbLTEuMjkxMjc1OTY2NjAxOTgsIDUwLjY2NTg4MTg5MDk4MTg1XSwgWy0xLjI5MTI2ODM4NTY3NzMzOCwgNTAuNjY1OTIwNTAzMjU5MzNdLCBbLTEuMjkxMjY3OTEyMTk1ODI5LCA1MC42NjU5NTE5NjY0ODczNV0sIFstMS4yOTEzMzk0NjMyMDE3MjksIDUwLjY2NTk4ODM2MjY2NDVdLCBbLTEuMjkxNDgyNjI4MTAzOTkxLCA1MC42NjYwNjQ3NTEzOTQxM10sIFstMS4yOTE0NjQxNzgxNjI5MjIsIDUwLjY2NjA3MzYyOTU5MTM0XSwgWy0xLjI5MTQwODc5NjUxODYsIDUwLjY2NjA4Njg2ODQwMTU5XSwgWy0xLjI5MTMzNzc0Mzk1MTc1NSwgNTAuNjY2MTAyNjE5MTI5MjJdLCBbLTEuMjkxMjk2MjIxNzMwNTI2LCA1MC42NjYxMzI5MzM4MjA0N10sIFstMS4yOTEyNjkwOTM2MjU2MzYsIDUwLjY2NjE1MjU0NzYxNTgxXSwgWy0xLjI5MTI0ODU5OTQ5MDgxNiwgNTAuNjY2MTk2NDc1NTg0MDldLCBbLTEuMjkxMzgwMTY1MzI2NzI1LCA1MC42NjYyOTE2NzM1ODkxNV0sIFstMS4yOTE0MjM3MDk5NjQ1NiwgNTAuNjY2NTA2ODk2NjcwMzJdLCBbLTEuMjkxNTY5OTEzMjI0MTg1LCA1MC42NjY2NjA2MjA0NTU1N10sIFstMS4yOTE2MTMyNTQxNDg2MjMsIDUwLjY2Njc4ODYzNjE2MTJdLCBbLTEuMjkxNjAzODE4NzY3MDI4LCA1MC42NjY4NDk3MTI5NzM1Nl0sIFstMS4yOTE1NjU5OTAyODAzMzMsIDUwLjY2NjkyMTQwNTY0NjY5XSwgWy0xLjI5MTU1Njg3OTM2MTg0MiwgNTAuNjY2OTYwOTA3NjcxMDVdLCBbLTEuMjkxNTc5MjI2NzE4NjE3LCA1MC42NjY5Nzk5MjMxMTQ5NV0sIFstMS4yOTE2NTk5NTI5NDQ1ODIsIDUwLjY2Njk4MDQxMzU3NjE5XSwgWy0xLjI5MTczOTAxMzkyNDQ3NywgNTAuNjY2OTkwNzgzMjExNTFdLCBbLTEuMjkxODE1MDk5NDQ5MzksIDUwLjY2NzAxMjgyMjEyODldLCBbLTEuMjkxODA3NDAwNzY2NjczLCA1MC42NjcwNTE1MjM2MjE0XSwgWy0xLjI5MTc2MTU1NjY5MTAyNywgNTAuNjY3MDg5OTAzNTA2M10sIFstMS4yOTE3MjI5NzczMjI0MjksIDUwLjY2NzExODQzODE1ODg4XSwgWy0xLjI5MTY2ODcyNTMzMTQ2OSwgNTAuNjY3MTQ5NTc0Njc5ODddLCBbLTEuMjkxNjQxMjYzNzg5Njg1LCA1MC42NjcxODM1NzEwMzYwMl0sIFstMS4yOTE2NTIwMzg2NTY0MDYsIDUwLjY2NzIxOTU5Nzc1MzE4XSwgWy0xLjI5MTcyMjk2NDkzNTYyNywgNTAuNjY3MzA1NDM2NjEzMTZdLCBbLTEuMjkxNzIyMjQ3MDIxNzU2LCA1MC42NjczNTMxNzA4MTgwMV0sIFstMS4yOTE2ODc3ODU5NTM4NjksIDUwLjY2NzM4NzEyNDY2Mzc2XSwgWy0xLjI5MTYzMDg0MjAyMzQyNSwgNTAuNjY3NDExMDUyNTYxODZdLCBbLTEuMjkxNTk1MDEzMDQ2NzY1LCA1MC42Njc0MzUxMDg3MjQzNV0sIFstMS4yOTE1ODA3NDg3MzU4MTEsIDUwLjY2NzQ0NDkxMTQwMTI5XSwgWy0xLjI5MTU2ODk1OTY0Nzg1MSwgNTAuNjY3NDc2MzA1ODY4NjldLCBbLTEuMjkxNTU5OTAyNzEyNjY0LCA1MC42Njc1MTIyMTIwOTIzN10sIFstMS4yOTE1OTA1MzY0NjE1MDMsIDUwLjY2NzU0NjU2MTQxMzMzXSwgWy0xLjI5MTYxMjY5NDc5NjA3OCwgNTAuNjY3NTc4MTYyMTM4NjVdLCBbLTEuMjkxNjI5MzIxMTg4MDgzLCA1MC42Njc2MDUyMzQwOTM2NF0sIFstMS4yOTE4MjEzNjU3MDY5ODMsIDUwLjY2NzYyNzk3NzQ1NDAxXSwgWy0xLjI5MTg3NDkyODc3MjAwMywgNTAuNjY3NjQyNjg3Mjc3MDJdLCBbLTEuMjkxOTA0MzEwMjcwMzA3LCA1MC42Njc2NjcyMjk0NjczN10sIFstMS4yOTE5MDc4MjA2MTIxNzUsIDUwLjY2NzcxMzEwMTM4MzAzXSwgWy0xLjI5MTg5NTkyMzUzNzYyNCwgNTAuNjY3NzUxNjg3NDc2MzZdLCBbLTEuMjkxODc1MzM0NjUzOTA2LCA1MC42Njc4MDE5MDgxODY3Nl0sIFstMS4yOTE4MTI5ODc0NTY2NTUsIDUwLjY2NzkwNTgxNzE0MTQzXSwgWy0xLjI5MTg1ODI3MDc3NDUxOCwgNTAuNjY3OTk3ODgzMjcyNThdLCBbLTEuMjkxODE4OTQ3MTk1MDc0LCA1MC42NjgwNzU4NjAxNTMxOV0sIFstMS4yOTE4MTg2MjI3NDk1NywgNTAuNjY4MDk3NDM0OTMyNjhdLCBbLTEuMjkxODM2NjU0MzU2NDM3LCA1MC42NjgxMTY0MjQxMDg5MV0sIFstMS4yOTE4ODE1ODAxOTg0NzgsIDUwLjY2ODEzOTE3Mjc0NzUyXSwgWy0xLjI5MTk4NTAyMTQxMDAwMywgNTAuNjY4MTM0NDA2NzQ1MTJdLCBbLTEuMjkxOTk1OTMxOTAyNTkyLCA1MC42NjgxNjE0NDM5MzQ5M10sIFstMS4yOTE5MTMzNTc2NzkzODQsIDUwLjY2ODE5MDYxMDUxODQzXSwgWy0xLjI5MTg2MjE4MzI3MTE1NCwgNTAuNjY4MjEwOTc3NDQxNDJdLCBbLTEuMjkxNzg5NjQ2NjEwOTY0LCA1MC42NjgyMzIxMTM2MTg3NV0sIFstMS4yOTE3MzQzODU1NDUzNDMsIDUwLjY2ODIzNzE3MjEzMTg3XSwgWy0xLjI5MTY4OTIxNjMwMjE2NCwgNTAuNjY4MjMwNjA0NTIwNjFdLCBbLTEuMjkxNjQ5NzQxMzc5NzM4LCA1MC42NjgyMTc3NzgyNjc5NV0sIFstMS4yOTE2MjMxMjYwNjEwMzYsIDUwLjY2ODIwMzIzMjA2OTAxXSwgWy0xLjI5MTU1ODg4MjA4NjkzOCwgNTAuNjY4MTQ2MjAyNzY2MzVdLCBbLTEuMjkxNTI1MTM3MDk4NTE0LCA1MC42NjgxMzI1MTIyNTUyN10sIFstMS4yOTE0NzQzMDU3ODM5MjIsIDUwLjY2ODEyMjMxNDAzMDI5XSwgWy0xLjI5MTQyNDg0MjI3NDAyMSwgNTAuNjY4MTIyMDEzNDM5NDVdLCBbLTEuMjkxMzgyMjI5NTIxOTk5LCA1MC42NjgxMzE2NDM4MDc5M10sIFstMS4yOTEzNDM4MjQ5MjQyNTQsIDUwLjY2ODE0ODQ5MTk4Nzg3XSwgWy0xLjI5MTMxNTEyNDk4NDg1NiwgNTAuNjY4MTcxNjkyMzYxXSwgWy0xLjI5MTI5OTI3MTA3OTQyMSwgNTAuNjY4MTk0MDcxNzc4NjRdLCBbLTEuMjkxMjk3NDE2MjkyOTcsIDUwLjY2ODIxNjUzNjI4NjA0XSwgWy0xLjI5MTMxMzk2MTU1NTI4NiwgNTAuNjY4MjQ5MDAxOTc3MzhdLCBbLTEuMjkxMzYxNDk2MzYyNjAyLCA1MC42NjgyODQ0NDMwMTQ0NV0sIFstMS4yOTE0MzQ1NDA0OTI2NzUsIDUwLjY2ODMyMjY0NjI0ODkxXSwgWy0xLjI5MTUzOTg2MjM0OTQxMSwgNTAuNjY4Mzc5MDI2MTkzMTJdLCBbLTEuMjkxNTY0NjA0NDk3NDI5LCA1MC42Njg0MjUwMjcxMjE2M10sIFstMS4yOTE1OTgzMDkxMzc0NTIsIDUwLjY2ODQ0MTQxNDQ2ODY1XSwgWy0xLjI5MTYwNjQ2NzI3NTAxNCwgNTAuNjY4NTU4MzM4MDkwOTJdLCBbLTEuMjkxNTU4MzgxODA0NTUsIDUwLjY2ODY1MjUzNDEwNzc3XSwgWy0xLjI5MTYwNzY1MDEwMDMyOSwgNTAuNjY4NzU4OTE5MTMyNTNdLCBbLTEuMjkxNTg0MTM4ODg1Mzc2LCA1MC42Njg4MTcyMTMzMDk2OF0sIFstMS4yOTE1MTQzNTUzOTMyNTIsIDUwLjY2ODg0OTE1NDQxNzE0XSwgWy0xLjI5MTQ1MDQyODUzMzA5MiwgNTAuNjY4ODY0MDQ5NDgxNzldLCBbLTEuMjkxMzc1MTQ0OTI0MzIxLCA1MC42Njg4ODE1NzI1ODMzNV0sIFstMS4yOTEzMDU3NjcwNTg0MTcsIDUwLjY2ODg4NjU0NTA5Njc5XSwgWy0xLjI5MTI4MTgyOTU3MzgzMywgNTAuNjY4ODgwMTA2Mzc4OV0sIFstMS4yOTEyNjUwMjcwNTU3MjYsIDUwLjY2ODg2NDcyMDcxNTE0XSwgWy0xLjI5MTI2OTUxOTM5NzM1MSwgNTAuNjY4ODUzMDYwNjE3MDRdLCBbLTEuMjkxMzExMDc2MjA2NTMxLCA1MC42Njg4MTI4NTY4MTE5Nl0sIFstMS4yOTEzNDAyNjM1NTEyOTIsIDUwLjY2ODc1NzI5NDI4MTk2XSwgWy0xLjI5MTMxNjc3MjU2NjgxOCwgNTAuNjY4NzIxMTkwMjU2MDVdLCBbLTEuMjkxMjc1ODI5NzYyOTIsIDUwLjY2ODcxMjg1MDExMjM1XSwgWy0xLjI5MTIyNDgwODQ1NTIxMywgNTAuNjY4NzE1MjM3MDYyMzZdLCBbLTEuMjkxMjIwNTk1MTQwMjUxLCA1MC42Njg3MTYxMTA0ODEwNV0sIFstMS4yOTEyMDIwNDA5NzU4OSwgNTAuNjY4NzI0MDg4OTcwMTZdLCBbLTEuMjkxMTg3ODAzMjUyMTI1LCA1MC42Njg3MzIwOTM2OTcwOF0sIFstMS4yOTExNTkyMDYwMDY3OTQsIDUwLjY2ODc1NjE5MzY4NTg1XSwgWy0xLjI5MTEyNzcwNTc0MzExMSwgNTAuNjY4Nzc5Mzc2OTg2NzldLCBbLTEuMjkwODgxNTc0ODM3MzE3LCA1MC42Njg5NjIyNzE2MDQyNV0sIFstMS4yOTEwNjI1NzE0ODgyMzksIDUwLjY2OTA2MDQ2NzYyMzE1XSwgWy0xLjI5MDgzMDY4NjE1MTQ3NCwgNTAuNjY5MTQxNzY4MzI0Ml0sIFstMS4yOTA3MDUzODYwNTU1ODksIDUwLjY2OTI4ODUzNzE1MzA0XSwgWy0xLjI5MDUxNzI5MTM2OTQzMywgNTAuNjY5MjgxOTk4NTY3NDJdLCBbLTEuMjkwMzQ1Nzc0MDU0NDU4LCA1MC42NjkyOTgwMzYzNTQ2N10sIFstMS4yOTAyNjkyNzM4MDYwNTgsIDUwLjY2OTMxMTA1NjE4MjEzXSwgWy0xLjI5MDE5NTM3NTQ0NDczMSwgNTAuNjY5MzI5NDg1OTg1OF0sIFstMS4yOTAwNDE3NDgzNTc4MjgsIDUwLjY2OTM4MTU5MzQ4MDY1XSwgWy0xLjI4OTc3MTQ2NzAwMzExNywgNTAuNjY5NDc4ODQwODM1MjFdLCBbLTEuMjg5NzIwMDM4MDE1NzU0LCA1MC42Njk1MDgxOTU1NzgyXSwgWy0xLjI4OTcxNTM0ODY2Njc1NywgNTAuNjY5NTQwNjIyMDM0NzVdLCBbLTEuMjg5NzIzMDgzOTc1NjUsIDUwLjY2OTU4NDcyMTY4MTA2XSwgWy0xLjI4OTcyMjYwOTM5OTYyOCwgNTAuNjY5NjE2MTg0ODc4NjRdLCBbLTEuMjg5NzUwMzc1NDUxMjU3LCA1MC42Njk2NTUwMTIzNTcwNF0sIFstMS4yODk3NjM5NjI4ODc3MTgsIDUwLjY2OTY5MDE1NzMzNzFdLCBbLTEuMjg5NzU3NzgwMDM2NzQzLCA1MC42Njk3Mjg3NzgwMTEyNl0sIFstMS4yODk3MzAzMDIwMzY1ODIsIDUwLjY2OTc2MzY3MjgzODc2XSwgWy0xLjI4OTQ0OTY2ODgyMzA0NiwgNTAuNjY5OTgyMzE1NDgyMTldLCBbLTEuMjg5MTAzMjI4NTk2NjcyLCA1MC42NzAyNDczMDU4NDk0OV0sIFstMS4yODg5MTA0NDM0Mzc4NTQsIDUwLjY3MDM2NTcwMTM5MzE5XSwgWy0xLjI4ODg0NzYxNDk5OTgyNSwgNTAuNjcwNDAwMzgwNDEzMzJdLCBbLTEuMjg4NzgwNjk1MTU1MDc3LCA1MC42NzA0Mjc4NDIxOTQ3MV0sIFstMS4yODg3MDk2NzAzNDgzNiwgNTAuNjcwNDQ4OTg1Njc4NjVdLCBbLTEuMjg4NTkwMzkzNTgxMzMzLCA1MC42NzA0NzQ0MTk3ODAzOV0sIFstMS4yODgzOTEyMjMyMjU3MTEsIDUwLjY3MDU0NDIyNzgzMTY0XSwgWy0xLjI4ODMzOTc3ODYyNjc4MiwgNTAuNjcwNTc0NDgwODk5OThdLCBbLTEuMjg4Mjg4MjExNjc2OTgyLCA1MC42NzA2MTI4MjQ0Nzc3N10sIFstMS4yODgxODUxNjcwMTIxNzUsIDUwLjY3MDY5MTMxMDE3MTQzXSwgWy0xLjI4ODA3MzUwODkwODYxNCwgNTAuNjcwNzc2MTI2MzAxMzVdLCBbLTEuMjg3ODM4MTAwODc2Mjc4LCA1MC42NzEwODk0Mzk0MzQyNV0sIFstMS4yODc2NDUzNzYzMDkzMywgNTAuNjcxMjk1OTM4MjgyNzNdLCBbLTEuMjg4NjAzMTEyNjc5MjgxLCA1MC42NzE1MDE0NjA0MTk0N10sIFstMS4yODg1NjM4NzY4MzM2MzQsIDUwLjY3MTY2NTc0MzY2NzU3XSwgWy0xLjI4ODUyOTQ2NDIzNjMzNSwgNTAuNjcxNzg4NzkwODE1MzddLCBbLTEuMjg4NDk1NjA2MzMyMzU1LCA1MC42NzIyNTM0NzMwMjgxNV0sIFstMS4yODg1ODc0NjAzMTYwNzcsIDUwLjY3MjI1OTQyNzY4Njg0XSwgWy0xLjI4ODY2NDk5MzQ2MzAzOCwgNTAuNjcyMzcxNDcwNDM1MThdLCBbLTEuMjg4Njk1MzgzNzcyODM2LCA1MC42NzI0MjIwMDE1NTQzM10sIFstMS4yODg3MTIxMzM2ODQwMzEsIDUwLjY3MjUzMzU4MzU0MjM2XSwgWy0xLjI4ODY2NTEwNTcyNzM2MywgNTAuNjcyNjQyMDc5MzYwM10sIFstMS4yODg2MjMyMjk1MTM5MjUsIDUwLjY3MjcwMzA0Nzg2Njc0XSwgWy0xLjI4ODU3MTMzNDQ1NjI5MSwgNTAuNjcyNzYyOTY2Mjk0MjZdLCBbLTEuMjg4NjI0MTAwOTg5MzgsIDUwLjY3MjgzMDcxNTUzNzQyXSwgWy0xLjI4ODQ4OTM3MDE4MTgxMSwgNTAuNjcyODUxNDcwMTk0MjNdLCBbLTEuMjg3ODYzMzY1NzI4MjY1LCA1MC42NzI5NzU0MDA3NTU0OF0sIFstMS4yODc4MDkzNzYzNjIwOTcsIDUwLjY3Mjk4ODU1NjQ1ODNdLCBbLTEuMjg3NzgzMzcwOTI3MDAxLCA1MC42NzMwMjYxNTY5MDA1NF0sIFstMS4yODc1MTMzMDMxNDcxODQsIDUwLjY3MzQ3NzcwODI4MTE5XSwgWy0xLjI4Njg1NTkxNzEzNjc2NCwgNTAuNjc0NjQ4MTgyOTExMTRdLCBbLTEuMjg3MjE3NzAxOTQ0NDksIDUwLjY3NTE1MzA0Mjk3MTE2XSwgWy0xLjI4NzIyMTU2MDY5NDc3NCwgNTAuNjc1MTc1NjMyMjIxNDZdLCBbLTEuMjg3MjE1NTAzMjk0MTQ2LCA1MC42NzUxOTgwNzA5NTEwM10sIFstMS4yODcxOTk2OTk0ODUwNDksIDUwLjY3NTIxNjg1Mzk3NzczXSwgWy0xLjI4NzE3NjgxOTIxMzg0LCA1MC42NzUyMzI4OTY2NTAzN10sIFstMS4yODcxNDk3MDM1NTMzODQsIDUwLjY3NTI0MzUxOTI0MzA2XSwgWy0xLjI4Njc1MDk5MzI4NTM5NCwgNTAuNjc1MzEyMTA0NDAwMTFdLCBbLTEuMjg2MzUzMzcxOTg0MzYxLCA1MC42NzUzMDg3NzI0MzE0OF0sIFstMS4yODU5NjMyNDk3OTE5ODMsIDUwLjY3NTI4MDMxMjE3ODgzXSwgWy0xLjI4NTU5ODEzMTk5MTkyNywgNTAuNjc1MTg4MTcyNjYzNDNdLCBbLTEuMjg1MTE3MzUzNjM3MDM1LCA1MC42NzUxNTkxNTQwOTcwN10sIFstMS4yODUxOTk1MDUxMjIzODksIDUwLjY3NTYyMDA1MTIwNTcxXSwgWy0xLjI4NTM0NDU4MDUwNjk5OSwgNTAuNjc1NjY0MDkzOTMxM10sIFstMS4yODU0NjkwMjg2MzU4MjIsIDUwLjY3NTY3NTY0NDk4MTI2XSwgWy0xLjI4NTU4NTk1NjMzNTM3NSwgNTAuNjc1NzA2MDI5NDU3Nl0sIFstMS4yODU2Nzg2OTI0MTcxMzEsIDUwLjY3NTc1NDI0NjIyMjE0XSwgWy0xLjI4NTgyNzYzNTk5MTMyNCwgNTAuNjc1OTEyNTc4NzkxNDRdLCBbLTEuMjg1ODY3OTU2ODA0NzU5LCA1MC42NzU5NjIyNzI0MTE3N10sIFstMS4yODU5MDAxNjkyMjUwMjcsIDUwLjY3NTk4NDk0NTQ1MTU1XSwgWy0xLjI4NTkzNjcxODQ1NDA5LCA1MC42NzU5OTg2NTQ3MzgyXSwgWy0xLjI4NjE1NDEwMTYxMjE0OCwgNTAuNjc2MDM3NzQ1MDU3MDhdLCBbLTEuMjg2MjA0NjY3Njg5NDAzLCA1MC42NzYwNjU5MjQ1NTUyOF0sIFstMS4yODYzNzc4NTg2MTk5NDksIDUwLjY3NjMxMDcxMTczOTYyXSwgWy0xLjI4NjYxNjY1MjA3OTMxNSwgNTAuNjc2NDMwOTM0ODQyNTRdLCBbLTEuMjg3MDgxOTk4MzQ1NDU2LCA1MC42NzY4MjQ5NDg5NzE1XSwgWy0xLjI4NzIyNTc4NjIxODg4MywgNTAuNjc2OTU0Mzg5MzIxMDVdLCBbLTEuMjg3NDUzOTE3NTg1MDIxLCA1MC42NzcyMTY1OTIyNTM1M10sIFstMS4yODc0NTA4ODQ2Mzc2OCwgNTAuNjc3MzI0NDU3MzIxMzddLCBbLTEuMjg3NDAyNjEwNjIwMTkxLCA1MC42Nzc0MjIyNDY0ODUzN10sIFstMS4yODczODc3NzA4Njk2OTcsIDUwLjY3NzQ2OTgwNDM4MzE3XSwgWy0xLjI4NzM4MTQ0ODkwNDQyNywgNTAuNjc3NTE3NDE0MzM1NzFdLCBbLTEuMjg3MzgzNTY4ODkxMTg2LCA1MC42Nzc1NjIzNzg3OTA5M10sIFstMS4yODczOTY4NDM4MDU0MDIsIDUwLjY3NzYxODE5OTc3NzkzXSwgWy0xLjI4NzQxODcxODIzNzg4MywgNTAuNjc3NjY4Njc5MTM2NzRdLCBbLTEuMjg3NDUwNjQ1NDY5Njc2LCA1MC42Nzc3MTAzMTk1MjY2OF0sIFstMS4yODc0ODk3NzM0MTYxMzMsIDUwLjY3Nzc0NjUxOTgyNTYyXSwgWy0xLjI4NzUzNDU4Mzg0MDI4MywgNTAuNjc3Nzc3MzYwNjUyNjJdLCBbLTEuMjg3NTgzNjYyOTM2NTkyLCA1MC42Nzc4MDM3MzIzOTMyXSwgWy0xLjI4NzY0MDA1ODA2NDA3MSwgNTAuNjc3ODI0NzU0NjI5MjldLCBbLTEuMjg3Njk2NDMxNzcyODcyLCA1MC42Nzc4Mzk0ODM0OTc2NV0sIFstMS4yODc4MDk0MjQwOTQzMjksIDUwLjY3Nzg1Mjc2MDEwOTY1XSwgWy0xLjI4Nzg5MTUzNDAwOTMsIDUwLjY3Nzg0Nzg2NzQxNDk5XSwgWy0xLjI4NzkyNjk1MTMyMzgyLCA1MC42Nzc4NTE2Nzk4MjczOV0sIFstMS4yODc5ODc0MzA1NzkxOTgsIDUwLjY3Nzg3MjcyNjgzNTc4XSwgWy0xLjI4ODAwNTY2MjU5OTU3MSwgNTAuNjc3ODg2MzIzNjEzMTldLCBbLTEuMjg4MDIyMjE0NTk3MDExLCA1MC42Nzc5MTA2OTg0ODgyNF0sIFstMS4yODgwMzAyNzAyMzI3OTcsIDUwLjY3Nzk0MTMxNDY5MjEyXSwgWy0xLjI4ODAwOTI0OTgyMzk1OCwgNTAuNjc4MDE5NDkxODQ0MDldLCBbLTEuMjg4MDA3MjkyMTc3ODg3LCA1MC42NzgwNTYzNDAxMTU0NV0sIFstMS4yODgwMTQyMTk1NDI3NTcsIDUwLjY3ODA2ODk2ODgzMjg1XSwgWy0xLjI4ODAyOTU4ODkzMzc0OSwgNTAuNjc4MDc4OTUyMDA2OTddLCBbLTEuMjg4NDA2MjkxMjc4MTM2LCA1MC42NzgxNjMwNjMyMzQ2XSwgWy0xLjI4ODU1Nzg2MjMxMTY0MiwgNTAuNjc4MjQxMzA0Njk0MDFdLCBbLTEuMjg4NjQxOTM5MDQ4ODMxLCA1MC42NzgyOTkzNTU1NTc0NV0sIFstMS4yODg3NDY3MzUwOTU0NDMsIDUwLjY3ODM5MTc4NTc3OTQ0XSwgWy0xLjI4ODg0NDQzMDE1NDI2NiwgNTAuNjc4NTc1NzgzNzMwMzZdLCBbLTEuMjg4OTI4OTU2MTg2MzA1LCA1MC42Nzg2OTY4NTkxMDcwM10sIFstMS4yODkzNjQ1NjU1MDAwODksIDUwLjY3OTI3Nzc3MDYxMjYyXSwgWy0xLjI4OTM4Mzc4Mjk4Mjc5MiwgNTAuNjc5NTA0NDQzMTk0NDRdLCBbLTEuMjg5NTYxNTM3NTA1MzI1LCA1MC42Nzk3MzQ4Njg3ODUxM10sIFstMS4yODk2MTI3MTM5MjA1ODEsIDUwLjY4MDAwMTM4MzIyMzIyXSwgWy0xLjI4OTcxMTg5NzMwNzcxNCwgNTAuNjgwMTc5OTk1MjczNjFdLCBbLTEuMjg5NTU4MTI3MDU2NzksIDUwLjY4MDMzMTk4MzQwOTA3XSwgWy0xLjI4OTMyNjkzMjIyNTU5OSwgNTAuNjgwNDU2NDM4Njk5MjZdLCBbLTEuMjg5MzAzOTE0MzgzODkzLCA1MC42ODA0ODE0NzEyMzQ5M10sIFstMS4yODkzMDYyMjYzMjgzOTQsIDUwLjY4MDUxMzg1MDM4NjI0XSwgWy0xLjI4OTMyMzAxNzM5NDYxOCwgNTAuNjgwNTMwMjI1MTU3NTFdLCBbLTEuMjg5MzQ4MjUyMjIyNTkzLCA1MC42ODA1NDM4NjQzOTU5NF0sIFstMS4yODk0NzQ4OTA2NDE1MTcsIDUwLjY4MDU5Njc3OTgzMzk0XSwgWy0xLjI4OTYxNzI2NjIxMzIwMSwgNTAuNjgwNjM1NDA2NTM3NTZdLCBbLTEuMjg5NzkwODc5NzA4OTMyLCA1MC42ODA2Njg4MjkxNTU0NF0sIFstMS4yOTAwODMzMjQ5MjU0ODksIDUwLjY4MDcwMDI3Nzk1NzcyXSwgWy0xLjI5MDI1NzE4NzE1MjcwNywgNTAuNjgwODEwMTE4ODkwNjJdLCBbLTEuMjkwNDUyMzgxNDQwMTYsIDUwLjY4MDkxMzg4NjA2NjA4XSwgWy0xLjI5MDQ3NTc2OTM0ODI5NiwgNTAuNjgwOTU3MTgxNzg4MDhdLCBbLTEuMjkwNDgxMDUzNTk4MTUxLCA1MC42ODA5ODU5ODI4ODAzOV0sIFstMS4yOTA0NjMyNDQzMTE3NzMsIDUwLjY4MTAzNzExOTE4NTNdLCBbLTEuMjkwNDIxNTQ1NjM3MDEzLCA1MC42ODEwNzgyMjA3OTM0MV0sIFstMS4yOTAxNTYwMDU4NjU4MywgNTAuNjgxMjM1ODIyNjk5XSwgWy0xLjI5MDA2NDYwMDQ3OTIxMiwgNTAuNjgxMTkxMjEzNzkxNjJdLCBbLTEuMjg5OTk5NzMwNjQ4ODI1LCA1MC42ODExNzQ2MzYyOTYyNF0sIFstMS4yODk5NjQzNTk1NTE2MjIsIDUwLjY4MTE3NTMxOTk0OTI0XSwgWy0xLjI4OTkzMzEwNzk4Mzc4NiwgNTAuNjgxMTgxNDIyODUzMjddLCBbLTEuMjg5OTA4OTA2Nzg3MDM2LCA1MC42ODExOTIwNjM4MzAyMl0sIFstMS4yODk4ODE3MTUxMTQ1MiwgNTAuNjgxMjE1MjczMDAwOTddLCBbLTEuMjg5ODU4NTQ4MDA1ODUsIDUwLjY4MTI1MDE5NDA1NjU1XSwgWy0xLjI4OTg1NjQ2MTM5MzM1NCwgNTAuNjgxMjg3OTQwNTgwMDJdLCBbLTEuMjg5ODg1Mzc2OTcyNjYzLCA1MC42ODEzNDM4NTY0OTI3MV0sIFstMS4yODk4MTQ3NzM0NDM0NTIsIDUwLjY4MTQyODgzNDI4ODE3XSwgWy0xLjI4OTgwODc1NzEzMjkzMSwgNTAuNjgxNDQ4NTc2MjkwMl0sIFstMS4yODk4MDk3NzYzMDg4NjIsIDUwLjY4MTQ3Mzg0NTIyMDQzXSwgWy0xLjI4OTgyMjE3ODQzODk1LCA1MC42ODE1MDI2ODk2OTIxM10sIFstMS4yODk5NjE3ODcxMTIyMiwgNTAuNjgxNjMyMTAxMDY2NjZdLCBbLTEuMjkwMDM1MjEyMzAzMzMsIDUwLjY4MTczMTQ0MTM2MTE4XSwgWy0xLjI5MDA2NjEwNDMzOTAxNywgNTAuNjgxOTM0ODk5OTUxNzddLCBbLTEuMjkwMDk2ODE0MDY2NzE0LCA1MC42ODE5NjQ3NTQ4ODExOF0sIFstMS4yOTAxNDYxMjQxMDUxNTksIDUwLjY4MTk4MzkzNDY4NDhdLCBbLTEuMjkwMTc0MzA5NzE4MzQ0LCA1MC42ODE5ODc3MDIzODEwNV0sIFstMS4yOTAyMTI2MTIzMTg5NTUsIDUwLjY4MTk4NjEzNzQ3ODIzXSwgWy0xLjI5MDI3NjU0Mzg3ODQ5OCwgNTAuNjgxOTcyMTQyMTQ3MzJdLCBbLTEuMjkwMzU4NjQ3MTk0NDQyLCA1MC42ODE5NjgxNDY2OTMyM10sIFstMS4yOTA0MDcwMjMwNzMwMzIsIDUwLjY4MTk0ODY2MjQ0NjE4XSwgWy0xLjI5MDQ0MjU1MjA5NDY3MywgNTAuNjgxOTQ1MjgyNTMxMl0sIFstMS4yOTA0Njc5NTA2MTY4NTYsIDUwLjY4MTk0ODEzNDE2NzYzXSwgWy0xLjI5MDQ4MTgxMzA2MjM0NywgNTAuNjgxOTY1MzAwMDcyMTZdLCBbLTEuMjkwNDMzOTE2MDAzOTE1LCA1MC42ODIwNDU5MjEyNDc5XSwgWy0xLjI5MDM4MTkxNjU5NDI5NCwgNTAuNjgyMTEyMjIyODc0NF0sIFstMS4yOTAzNDc0ODQzMDY4MzksIDUwLjY4MjE0MzQ3OTM0OTddLCBbLTEuMjkwMTU0NjgwMzI4NjU2LCA1MC42ODIyNjAwNzg2Mjk5Nl0sIFstMS4yOTAxODM4NTg0MjMxNzgsIDUwLjY4MjM5MTUxNDUwMjg2XSwgWy0xLjI5MDE1MjkzNzk2MjMxMiwgNTAuNjgyNTYxMzMyNjgzODRdLCBbLTEuMjkwMDI2NjY3NjUxMTUyLCA1MC42ODI4NjI3Mjc2MThdLCBbLTEuMjg5ODU2OTA1ODQwNDg3LCA1MC42ODI5NTI0OTU4MTkyNV0sIFstMS4yODk3NDk2OTUxMzcwMTksIDUwLjY4MzAxOTI3MDAzMTA0XSwgWy0xLjI4OTg4MjAxMTkxMjU1OCwgNTAuNjgzMTYwNDE0MzI0NTZdLCBbLTEuMjg5ODg4MjIxNjk2MDEzLCA1MC42ODMyMjA2ODcwODUwOF0sIFstMS4yODk5MTI0MDAyNjY4NDEsIDUwLjY4MzMwNDQ0NDAyMTk5XSwgWy0xLjI4OTg5OTQ2ODc5MDg5OCwgNTAuNjgzNTA0MDM5NjExOTRdLCBbLTEuMjkwMTM5MDMwMTA3OTQxLCA1MC42ODM2NjkyMTEzODMxNl0sIFstMS4yOTAyMzYyMzcxOTA3NzQsIDUwLjY4Mzk4NzI1MDIwNzAxXSwgWy0xLjI5MDM2NTA0NDY1OTQ5OSwgNTAuNjg0MjY4NTMxMTU3NDNdLCBbLTEuMjkwMzcxNDIxNzczNTkxLCA1MC42ODQzMTAwMTUxOTUxNV0sIFstMS4yOTAzNjM2NDcyMjYzNSwgNTAuNjg0MzYxMjEyNTI1MzZdLCBbLTEuMjkwMzQ0NTU4MDkzOTIzLCA1MC42ODQ0MDQyNDk3Mzc1OF0sIFstMS4yOTAzMDEzMDY3OTYyMDEsIDUwLjY4NDQ1NTIzMTE1MzIzXSwgWy0xLjI5MDExMjI2Njc0NTY3LCA1MC42ODQ3ODU5MTE5OTc0Ml0sIFstMS4yOTAxMDc1MDk1OTY3MiwgNTAuNjg0ODIyNzQzMjE2MTddLCBbLTEuMjkwMTE2ODg2NzgxOTIsIDUwLjY4NDg1ODc2MTQ1MjYzXSwgWy0xLjI5MDE0MTgxMjMwMTIyMiwgNTAuNjg0ODkzMDc2MjgyMzddLCBbLTEuMjkwMjA0ODExMDE4NjM3LCA1MC42ODQ5NDExOTgxOTcyN10sIFstMS4yOTAyMTg2MjAwMDk2NSwgNTAuNjg0OTYxOTU5OTEyMzddLCBbLTEuMjkwMjM4NDYzMjIyMzcsIDUwLjY4NTA1NDY4MDY1MjI4XSwgWy0xLjI5MDIzNjM0ODMzNTI4OSwgNTAuNjg1MTk0OTE2MjU4MjhdLCBbLTEuMjkwMjMyMDUyMTgwODgyLCA1MC42ODUyMDExODMzMDk3Ml0sIFstMS4yODc5MjAwNjQ1Nzc0NjIsIDUwLjY4NTEzNDA0NTIzODMyXSwgWy0xLjI4NzQ4MTgzNTQ5OTgzOSwgNTAuNjg3NjIyMzk2ODQ3MjddLCBbLTEuMjg3MzQyODY5MzU1OTgzLCA1MC42ODg3NjAwNzcxNTQ0Ml0sIFstMS4yODczMzQzMjIyNzY0NTQsIDUwLjY4ODc2MTgyMjk3NjMzXSwgWy0xLjI4Njg0MDc2MTc2MTM4NiwgNTAuNjg4ODE5OTM5NDkxMV0sIFstMS4yODY3MDA4OTIzMjMwMzIsIDUwLjY4ODc5OTMwNTM5MDAyXSwgWy0xLjI4NTQ0MDI0MzEwMDQyNiwgNTAuNjg5MTI2MTE1NzgwMDJdLCBbLTEuMjg0NzQ1NjcyOTA5MzIyLCA1MC42ODkyODQ1ODE3MzUyNF0sIFstMS4yODQxMTI1MTE3MjkzNzIsIDUwLjY4OTM5NTg2MTk2OTMzXSwgWy0xLjI4Mzc0NDcyNDc0MTQ0NywgNTAuNjg5MzgwMTE4MTAyMDNdLCBbLTEuMjgzNTM3MzAxODg1OTA1LCA1MC42OTAxNzAxNjg1NTM2NF0sIFstMS4yODM0NDM1MTM3MTkwOTYsIDUwLjY5MDM4MDk1MzgxMTY0XSwgWy0xLjI4MjM3OTQ5NjA4MDAzOCwgNTAuNjkwMjQ3NjQ3ODU4NDRdLCBbLTEuMjgxOTQ5NDQ2NDg4NTUsIDUwLjY5MDIyNzAyMDAyNjQ3XSwgWy0xLjI4MTg1NDkwODEyNDUzOCwgNTAuNjkwMjExMTU0MzgxMTZdLCBbLTEuMjgxNzYxODE5NzA0NTU5LCA1MC42OTAxODQ0MTkzNDc1N10sIFstMS4yODE2ODE3MDU3NDUxMDcsIDUwLjY5MDE0ODg2Mzc4MTE2XSwgWy0xLjI4MTU5NDcxOTQyNTE1LCA1MC42OTAwOTcwODMzMTIzOF0sIFstMS4yODE0NDc2NjAwMzI0MDMsIDUwLjY4OTk4OTE5Mjg3NTU3XSwgWy0xLjI4MTI1MDMzMzc1NTk0OSwgNTAuNjg5NzQ4NzQ1MzY4MTddLCBbLTEuMjgxMjE0MDIyNDM0OTcxLCA1MC42ODk3MTg4NTM2MTg4Nl0sIFstMS4yODExMTcwNDgyMDQxMzQsIDUwLjY4OTY3MTUwNjM2NDA0XSwgWy0xLjI4MDQ3MjI4NDY5MDI1NCwgNTAuNjg5NTI1MzkzMzkzMjNdLCBbLTEuMjc5OTgxMjI3NjI5MDgzLCA1MC42ODkzMjcyNzMyMjldLCBbLTEuMjc5MTg5MTkzNTM0NjQxLCA1MC42ODkwOTU3MzUwMzg3OV0sIFstMS4yNzg2ODg1OTMwNzg4NDYsIDUwLjY4ODk2NDk3NzU0NjA1XSwgWy0xLjI3ODU1NzQ4NzUwMzc0NiwgNTAuNjg4OTM2Mjk2NjE5NTFdLCBbLTEuMjc4NDI2MjY2NzU3ODg1LCA1MC42ODg5MDc1MjQ5Mjk1Ml0sIFstMS4yNzc4MDEyNzIwNDM5OTIsIDUwLjY4ODg1ODcwNDQ0NTc5XSwgWy0xLjI3Njk2NDUzNTM5NTEzNCwgNTAuNjg4NzcyNjA2NzY4NzNdLCBbLTEuMjc2OTk5ODA1OTY5NjAyLCA1MC42ODg1OTY1MjU5MzIxNl0sIFstMS4yNzY3MzU5OTI4MjkxNDYsIDUwLjY4ODUzNzM1MjEyNjU5XSwgWy0xLjI3NjU0MjAwMzIyMDczOSwgNTAuNjg4NDQ2MjQ1ODk2ODJdLCBbLTEuMjc2Mzk3OTM4MDA3MTY2LCA1MC42ODg0MjU1NzMzODg4Nl0sIFstMS4yNzU4Mzk0MzEyNTQ2MzMsIDUwLjY4ODI4OTA1MDEwMjIyXSwgWy0xLjI3NTgzMTU3NjkxNDYzNiwgNTAuNjg4MjQ1NzU4MDQxNDFdLCBbLTEuMjc1MzQ2NjYxNTcxNzkzLCA1MC42ODgxMTMyODU0ODc3M10sIFstMS4yNzUxNDMyMTMxNzAxOTgsIDUwLjY4Nzk5MjQ1MDE4MTk4XSwgWy0xLjI3NDc5OTkzOTUzMzY4OCwgNTAuNjg3ODU2MjcwNjYwMThdLCBbLTEuMjc0MTg2OTc2NDkzOTc4LCA1MC42ODc2NzE3NTIyMDgwOV0sIFstMS4yNzMxMTQ1MjIyNTM2ODIsIDUwLjY4NzI2NjYyMjM1OF0sIFstMS4yNzIzOTU5NDY3MTU5ODEsIDUwLjY4NzA1MTc2ODA5NDcxXSwgWy0xLjI3MTQwOTc5MzQ3NzIxMSwgNTAuNjg2NzQzNDQ2OTQzMTFdLCBbLTEuMjcwODIyNjYzNDczMzA2LCA1MC42ODY1MzU2MDc0NDk3XSwgWy0xLjI3MDY1NDU5MzQ2ODkzOSwgNTAuNjg2NTEyOTc5NjUxNV0sIFstMS4yNzAzODc0NDE3NDIxNjcsIDUwLjY4NjQ4OTczMTcwNDg4XSwgWy0xLjI3MDI4MjU3MTY1Nzg3MSwgNTAuNjg2NDkzNTcwNjM4ODhdLCBbLTEuMjcwMjQ0MjgzOTE4MzI2LCA1MC42ODY1MDE0MjIyOTc3M10sIFstMS4yNzAyMDg2Mzg1NDMyMTQsIDUwLjY4NjUxMTk4NzU2OTAyXSwgWy0xLjI3MDE2MDE5MzkxMDE1NywgNTAuNjg2NTM1MDU5MTMwODldLCBbLTEuMjcwMDkwMTMyNTgwNjQsIDUwLjY4NjU4MjI2OTE1NTQ4XSwgWy0xLjI3MDAxNjk1ODI3OTU1NSwgNTAuNjg2NjQyMDQ2MDYwMDJdLCBbLTEuMjY5OTY1MjUwOTI1MzE5LCA1MC42ODY2OTQ4NTQ5ODQxM10sIFstMS4yNjk5MjkwNDc1MTAwMjUsIDUwLjY4Njc0MTM3Nzg0NjM2XSwgWy0xLjI2OTkwMDAzNzg5MDQ4OSwgNTAuNjg2NzkwNjQyODI2MTNdLCBbLTEuMjY5ODU0NjA4NjgxOTc3LCA1MC42ODY4OTAxNTA2MjU0XSwgWy0xLjI2OTgzNDM5MjIxMDI4NCwgNTAuNjg2OTE0Mjk3ODI3NThdLCBbLTEuMjY5ODAyODQxMzUzMzY0LCA1MC42ODY5MzkyNzMwODA4Ml0sIFstMS4yNjk3NTk5OTc5MzkwMDEsIDUwLjY4Njk2MjM3OTU1MDI3XSwgWy0xLjI2OTcxMDI0OTgwNzIyLCA1MC42ODY5NzkxNDk1NTczMV0sIFstMS4yNjk2MDEwMDgzNjU3NjUsIDUwLjY4Njk5MzgzODc1NzAzXSwgWy0xLjI2OTU2MjY2NDI5NTA0NCwgNTAuNjg3MDA1Mjg1OTU2NDJdLCBbLTEuMjY5NTE3MDAwNzQxNDY4LCA1MC42ODcwMjIwODE0NjY3OV0sIFstMS4yNjk0ODEzMzE5NzAxNTEsIDUwLjY4NzA0MTYzNjY2MTQ5XSwgWy0xLjI2OTQ0NTU2NTQ4MjgzNCwgNTAuNjg3MDY3NDg0NDM3NTldLCBbLTEuMjY5NDA1MTU5ODU3ODE3LCA1MC42ODcxMTM5ODA4MDg5NF0sIFstMS4yNjkzNTMwNjE4OTQ1MzcsIDUwLjY4NzE5MTg2OTkyNzE0XSwgWy0xLjI2OTMwNDk0MTg1MDQ3OCwgNTAuNjg3Mjg0MTY4NDE0ODddLCBbLTEuMjY5MjY2NDQyMDkyOTQsIDUwLjY4NzM4ODMwNDQ0OTg5XSwgWy0xLjI2OTIzMzYzNDI2NzAwOSwgNTAuNjg3NDk0MTg0Mjk2NDFdLCBbLTEuMjY5MTk4Nzk2MjAzNDEyLCA1MC42ODc2NDA1OTc2MjI2OF0sIFstMS4yNjkxOTM1ODc2MDM2NzYsIDUwLjY4Nzk3NTk5Mjc0MTgyXSwgWy0xLjI2OTIxNDE0NzUxNTkyMSwgNTAuNjg4Mjk4MDYzODk4MjVdLCBbLTEuMjY5MDI5MDA0NjM1NzI5LCA1MC42ODgyNzcxMjQ4MzY2NF0sIFstMS4yNjg3OTU4MDU5MzE2MzcsIDUwLjY4ODI1NDA4NjA5Nzc3XSwgWy0xLjI2ODY0MDIwMDU0Njc1MSwgNTAuNjg4MjQ3NzE2MDk0MjRdLCBbLTEuMjY4NTMyMzE1ODExOTc1LCA1MC42ODgyNjUwMTk5ODkyNl0sIFstMS4yNjg0OTE5NzgxMTY3NjksIDUwLjY4ODMwNzAyMTMxOTMzXSwgWy0xLjI2ODQ2MDUyMzQzMTYwOSwgNTAuNjg4MzI1NzAzNjA2NTVdLCBbLTEuMjY4NDMxODc0NjM5MTU3LCA1MC42ODgzNTE1OTU3MjA5NV0sIFstMS4yNjg0MTU4MTYzOTU4MDksIDUwLjY4ODM3ODQ2NTg0ODEzXSwgWy0xLjI2ODQwNjgxMjQwMjkyOSwgNTAuNjg4NDE3MDY3NjA4MTVdLCBbLTEuMjY4MzUxNTk3OTIxNTIxLCA1MC42ODg1MDc1MjMxMjE4M10sIFstMS4yNjgxMjQ0Njc2MTcwMTUsIDUwLjY4ODcyNDY1MTc3MTk5XSwgWy0xLjI2ODA2MTE1NjcyNzI0NSwgNTAuNjg4Nzk1Mjc3NjkxODFdLCBbLTEuMjY4MDA1MTI4NjgyMjg1LCA1MC42ODg5Mzc5NjE1MTU2M10sIFstMS4yNjc3OTk5OTc1ODg2NTYsIDUwLjY4OTExMzc4MjM4MjQ5XSwgWy0xLjI2NzUzMjE1MTYwNDgzNywgNTAuNjg5Njc0MTczMTU2MjddLCBbLTEuMjY3MjM1MDAzMjc4MjI1LCA1MC42OTAxMjIwMDA1NDQxXSwgWy0xLjI2NzA4MjIyMjE3MDk5OSwgNTAuNjkwMzgzNTU2ODExNDJdLCBbLTEuMjY3MDcxOTc4MzkxMTQyLCA1MC42OTA0OTQxNjI4NzIxOV0sIFstMS4yNjcxMTA0NDM0NTYxMjUsIDUwLjY5MDY2MjUyMzAwNjc0XSwgWy0xLjI2NzIxNzc4OTI4MzA1MywgNTAuNjkxMDM5OTgwNTQ5OThdLCBbLTEuMjY2NjMyMzkyODUwMjU0LCA1MC42OTEzNjI3Mzc4MTIxMV0sIFstMS4yNjY0Nzg5NzM4ODM1NzIsIDUwLjY5MTQ4NTAyOTY5OTg4XSwgWy0xLjI2NjIxNzM1ODM3OTI0MywgNTAuNjkxNjUxNTAyMTM5NjldLCBbLTEuMjY2MDM4NzEyODYxODEsIDUwLjY5MTc1MjA1ODAxODhdLCBbLTEuMjY1ODUzMTM5NTc3ODg4LCA1MC42OTE4NTUxNzcxOTI3N10sIFstMS4yNjUzOTYzMjYzNjg4MDQsIDUwLjY5MjA5NzgyNTEwMzg1XSwgWy0xLjI2NTMxNzU2MTY5ODc5NiwgNTAuNjkyMDU4NjcwNjY4NDddLCBbLTEuMjY1MjE4NDQxMjk4MzYzLCA1MC42OTIxNTY5MzkyOTcxN10sIFstMS4yNjQ5Mzg3MzczNDc5MjMsIDUwLjY5MjY1ODgxMjM0ODUxXSwgWy0xLjI2NDkzODgxNzgzMzgwOSwgNTAuNjkyNzQzMzIxNTM3OTNdLCBbLTEuMjY0OTQzMjg3MTcxNzI5LCA1MC42OTI4MjMzNjMyNDgxOV0sIFstMS4yNjUwNjUxODAzNzk4MTgsIDUwLjY5MjgxNDI0MjIwNzQxXSwgWy0xLjI2NTA4MjA2NTYwNDIzMSwgNTAuNjkzMTgzMDQwMjAyNTddLCBbLTEuMjY1MzM5NTgzOTYwNzksIDUwLjY5MzE5MDA1NzAwODQ4XSwgWy0xLjI2NTI2ODk0OTQ2NDgsIDUwLjY5MzU0MjEyMTAzNjY5XSwgWy0xLjI2NTE3MDA5NzQ0NzI0NywgNTAuNjkzNzA1MjExMjQzXSwgWy0xLjI2NDk2MDAyMTY3MTgzOCwgNTAuNjk0MTA1ODQyODYyNF0sIFstMS4yNjQ3MTIzODE3Mzc5NzcsIDUwLjY5NDU0OTQ4MDQ5Njg4XSwgWy0xLjI2NDYwOTY2NTk0NTgyNCwgNTAuNjk0ODY5ODc1Nzg1OV0sIFstMS4yNjQ1NTAxMzYwMDI1NjgsIDUwLjY5NDk2NjU5NTQxMzg2XSwgWy0xLjI2NDQ5NTgwNDM2NjczMiwgNTAuNjk1MjY4NDE2MTIzMTldLCBbLTEuMjY0MjY3Mjc1NjAyOTgxLCA1MC42OTU0MDAwMzA3MTU1N10sIFstMS4yNjQyMDkzMjYzNTg4NjEsIDUwLjY5NTQ4NTE2MjY3MzM1XSwgWy0xLjI2MzQyMDg1MTMwNjAyNiwgNTAuNjk1MTE0MTAwODEzNV0sIFstMS4yNjI5ODg3OTkyNDU1MzcsIDUwLjY5NDk0MzI1Mjc1MTQzXSwgWy0xLjI2MjMxMzY1NzY3NzExMSwgNTAuNjk0NjYzNzkxMzEyOF0sIFstMS4yNjEyMTE5NzgyODAzMTUsIDUwLjY5NDMwOTcwMjE5NDddLCBbLTEuMjYxMTc1OTcyNzIzNzM5LCA1MC42OTQyNjA5MjY1NDcyMl0sIFstMS4yNjA4NTQ3NDE3NDc2NTEsIDUwLjY5NDE1NTQxMjczMjU3XSwgWy0xLjI2MDM5NDAyMjk0MDgxMSwgNTAuNjk0MDEyMjQzMTY2OTFdLCBbLTEuMjU5Njg3NDYyOTExMzc4LCA1MC42OTM4Mzk1NTE1NDI3XSwgWy0xLjI1OTI4ODUyODI4NjUzNywgNTAuNjkzNzMxODMxOTE2NDldLCBbLTEuMjU4OTQ4MjE0OTg4NjA2LCA1MC42OTM1ODU4MjUyMjY5OV0sIFstMS4yNTg1OTExMTg5MjE1OTQsIDUwLjY5MzQyMzQzODQxNjExXSwgWy0xLjI1Nzg4OTQ0NTg5ODI0NywgNTAuNjkzMTE5NTA4NzE4M10sIFstMS4yNTc1NDUyMDU3Njg4OTcsIDUwLjY5Mjk0OTE5OTEzMTk0XSwgWy0xLjI1NzIzMzYzNjgxOTQxLCA1MC42OTI3Nzk5MDU3NDg1OV0sIFstMS4yNTY4MzIyMTcxNTE4NjksIDUwLjY5MjU1Njk5NjIzOTI3XSwgWy0xLjI1NjE4MzgyNzc5Nzg3NywgNTAuNjkyMzc2NjUyNjA5NDZdLCBbLTEuMjU1Mzg4NjYxODI2MDM5LCA1MC42OTIxNzAxMDU1MTMxN10sIFstMS4yNTQyNTg1OTE0OTc4MywgNTAuNjkxODMxOTUxNTI4NTFdLCBbLTEuMjUzNTIzNDA1NTk4ODAzLCA1MC42OTE1ODM1MjA4NDMzM10sIFstMS4yNTIzOTAzNzUyMzU0MTYsIDUwLjY5MTE2ODkxMjIxOTEzXSwgWy0xLjI1MTMyMjU2MzAyMjQ3MiwgNTAuNjkwNzUwMjE2MTAyMjddLCBbLTEuMjQ5NzU5NDE1ODMwMzI4LCA1MC42OTAxMzk0MzgyMjc0MV0sIFstMS4yNDkyNzQ1NzQ0MDE4ODMsIDUwLjY4OTkxMDU3MTU0NTkzXSwgWy0xLjI0ODkzNDk5NDQwMzUzOCwgNTAuNjg5NzIyMjg1NzMyMzVdLCBbLTEuMjQ4NjE2NDAxNjE5OTg4LCA1MC42ODk1NTAyMjY3ODM1MV0sIFstMS4yNDg0ODkzOTE5NTAyNjIsIDUwLjY4OTQ0MTUyNDc1NTI4XSwgWy0xLjI0ODM4Nzc1MzU5OTM3NywgNTAuNjg5MzMwMTk5MTI4MzRdLCBbLTEuMjQ4MjU1Nzk0MjUyMjU5LCA1MC42ODkwODU3MTE0NDQ3Nl0sIFstMS4yNDgxOTI3ODk3MDkyMTQsIDUwLjY4ODg2NDk1MzA1OTZdLCBbLTEuMjQ4MTM4MTk3ODc4NjgxLCA1MC42ODg3Mzg2NDcwMDQ3NF0sIFstMS4yNDgwNDQwOTYyNTQ4MTUsIDUwLjY4ODYwMTM4NzY5MjI4XSwgWy0xLjI0Nzk0MDIzMjk4Njg5OSwgNTAuNjg4NDU0MTc2MDE0MzZdLCBbLTEuMjQ3Njg1MTk2MTA2NDM3LCA1MC42ODgyMDYxMDY3OTg1M10sIFstMS4yNDczMTcxNjQwOTEwNzUsIDUwLjY4Nzg0OTQyNDEwNTQ4XSwgWy0xLjI0NzIyNTE2NDM5MjQ3MSwgNTAuNjg3NzU2MTQwMjM2OF0sIFstMS4yNDcxMTk5NjQyMzQ1MjEsIDUwLjY4NzYxMjUxNTI4NzFdLCBbLTEuMjQ3MDgxNjIxNjYxMzQ5LCA1MC42ODc1Mjg2NTc5Mjg3Ml0sIFstMS4yNDcwNzM3NzgxMDY3NDMsIDUwLjY4NzQ4NjM1Mjg3MTk3XSwgWy0xLjI0NzA3NTk1NjY5MTc5OSwgNTAuNjg3NDM3NzI5NDEzMzZdLCBbLTEuMjQ3MDgyMDM0ODUxNTU3LCA1MC42ODc0MTUyOTI5MDc5Nl0sIFstMS4yNDcxMDAwNzkwMzA4NjUsIDUwLjY4NzM0NTI4NTA3MDU0XSwgWy0xLjI0NzE5ODE5NzgyNTA3NCwgNTAuNjg3MTQzNTQ2ODgyNTNdLCBbLTEuMjQ3Mjg1MzQxNzIzMjI1LCA1MC42ODY3Mzc2NTc5MjI3OV0sIFstMS4yNDcyODE4NDQ5MTkwODIsIDUwLjY4NjY5MzU4Mjg3Mjk1XSwgWy0xLjI0NzI1NjY4NTMxMzAyMywgNTAuNjg2NTg4MjMzOTMxNTJdLCBbLTEuMjQ3MjA4OTEzODUyMjc1LCA1MC42ODY0NzM2NTg4MDIxOV0sIFstMS4yNDcxNjA3NTQ1NjM1NTQsIDUwLjY4NjM5MDYzNzEwNjk4XSwgWy0xLjI0NzAyNjIxNTI1ODA3NSwgNTAuNjg2MjEzNDY4NTg2ODldLCBbLTEuMjQ2OTcxMDk1OTE0MjgyLCA1MC42ODYxMjA1MTI1MzE2NF0sIFstMS4yNDY5MzY4NDI2Mjk4NjMsIDUwLjY4NjA1MTA2NTk5MzU1XSwgWy0xLjI0Njg4OTM0NDM2OTIyMywgNTAuNjg1OTE5NTAwODExODldLCBbLTEuMjQ2MzI5OTU0NTg5OTA5LCA1MC42ODU2NzAzNjE0Mjg0Ml0sIFstMS4yNDU5Mzk2MDcyMTA2OTksIDUwLjY4NTQ2OTk2MTIyNDMxXSwgWy0xLjI0NTI2NjcwOTI0NDU1MSwgNTAuNjg1MTUyNjU1MzI3NTldLCBbLTEuMjQ0MjIwNTY2MTM5MTYxLCA1MC42ODQ3MTI0NTY4MTU5M10sIFstMS4yNDM4Njg1NTU2NDgzNTcsIDUwLjY4NDU5NjgwNjk2MTA2XSwgWy0xLjI0Mjk2MjcwNTQ2ODM4NiwgNTAuNjg0MjM3NTIwNDUxODddLCBbLTEuMjQyMjk0MjAwNjkxNTI5LCA1MC42ODM5OTc2MzIzMTk0OV0sIFstMS4yNDE2MDA4NzI3MjQ3ODEsIDUwLjY4MzcxOTcyOTY4MTg2XSwgWy0xLjI0MDY3NTk2Njk4NzQ2NywgNTAuNjgzNDA3OTQ5OTczMTRdLCBbLTEuMjQwMTc5ODM5ODE5NTgyLCA1MC42ODMyNzA2NzI2MjM2MV0sIFstMS4yMzk5MjQ2ODA1MjQ0NDEsIDUwLjY4MzIwNzg3NTU1MzUyXSwgWy0xLjIzOTM2MzIyMzAyMTA5OSwgNTAuNjgzMDkwOTM2NDU5NV0sIFstMS4yMzkwOTIxOTYxNzM3NDYsIDUwLjY4MzA0MjQxODU0NzgyXSwgWy0xLjIzODUwNzY1NDU5NjcxNiwgNTAuNjgyOTUzMTA0NzQxMV0sIFstMS4yMzcyMTgwMzA1MzE1ODIsIDUwLjY4Mjc4ODI0NDEzOTgyXSwgWy0xLjIzNDYxNTUyOTk3NzgwOCwgNTAuNjgyNDkwNjAyNjUzOTZdLCBbLTEuMjMzNzcxNDgxNTc0MzIxLCA1MC42ODIzNDIwMjMzNDI3N10sIFstMS4yMzI2MzcyMjg4MDM5NiwgNTAuNjgyMTEyNTAzNTU4NzldLCBbLTEuMjMwNTc0NjI3MTEzMjQzLCA1MC42ODE2OTU5NjUzMTQ2Nl0sIFstMS4yMzAwMTUyMzI1MjM3NTEsIDUwLjY4MTYyNjY0MzM2MDExXSwgWy0xLjIyOTEzMzI5MjM2MDgxOSwgNTAuNjgxNTQ4ODkzNTUzMzldLCBbLTEuMjI3NTEwMTQwMjk2NjA3LCA1MC42ODE0NDQ2NTIwOTM1Ml0sIFstMS4yMjY4NTI4MDI5NzAxOTMsIDUwLjY4MTM5MTc0NzYyODVdLCBbLTEuMjI2NTc4MjE1NjY4NjM4LCA1MC42ODEzOTA4MjU2MzIxOV0sIFstMS4yMjYzMDIxODM3NzA0NTksIDUwLjY4MTM5MjU5MDQ5ODk0XSwgWy0xLjIyNTAzMDgyOTQ4NzA5MiwgNTAuNjgxNDk4MzI0NjQyODldLCBbLTEuMjI0MzExNTcyNzAwOTUyLCA1MC42ODE1MTMzMjA3MTIxNF0sIFstMS4yMjM4ODQ4Mzg1MTQyMDksIDUwLjY4MTU1MjczNTU4Mzg3XSwgWy0xLjIyMjg4MDcyMTE3NzM2NywgNTAuNjgxNjcyOTAxMTA1MV0sIFstMS4yMjI4NzkzMjA4ODUzNDYsIDUwLjY4MTY3Mjg5MTc3MjQ3XSwgWy0xLjIyMjQxNzgyNTA0ODkyOSwgNTAuNjgxNzYwNjE3MzE4MzFdLCBbLTEuMjIxNzA3ODE2NDY5NzA1LCA1MC42ODE5MDA2MjQ0NDMyN10sIFstMS4yMjExMTQ1MjI4NjAxNzEsIDUwLjY4MTk5NzQ0NDI4OTU1XSwgWy0xLjIyMDE2MjY4MTQwMjg0NywgNTAuNjgyMjA4NjQ3OTMyXSwgWy0xLjIxOTc3NTA0NTIzNjUyMiwgNTAuNjgyMjgyNTYyMzc0MV0sIFstMS4yMTkzMDMzMDU3NTU0NjgsIDUwLjY4MjM4OTA4NjczMTFdLCBbLTEuMjE5MDMyNDA0MTM2NTE1LCA1MC42ODI0MjU5MzA5ODk4Nl0sIFstMS4yMTg1OTY3MDYwNzI3MzMsIDUwLjY4MjQ5MTMzODQxMDldLCBbLTEuMjE3NzQ0NzcxOTY4MDcsIDUwLjY4MjU2NzQzNzk4ODg0XSwgWy0xLjIxNzcwODY5NTI4NDMwNSwgNTAuNjgyNjEwNDM5MzkxNl0sIFstMS4yMTczOTg4NDc4OTE0MjgsIDUwLjY4MjYwMjk2NTk5MTk0XSwgWy0xLjIxNzQwMDQ5MDk3NjE3MiwgNTAuNjgyMzI4NjgyMzQ3MTFdLCBbLTEuMjE3NDE3Mjg5NTQ4NTMyLCA1MC42ODIwOTA0NjE2OTIwOV0sIFstMS4yMTc0MzIxOTExNDAzNDMsIDUwLjY4MTk1OTMwMzAxODc4XSwgWy0xLjIxNzQ3ODUyNDI4ODczNSwgNTAuNjgxNzI3NTczNzgzNV0sIFstMS4yMTc1ODQzODY4Nzg0NzEsIDUwLjY4MTQ4ODE1MjcwMjc1XSwgWy0xLjIxNzY5MTE3OTgwOTA3OSwgNTAuNjgxMzYxMjA2Njg4MThdLCBbLTEuMjE3NzU0NTU0NTQwMTg3LCA1MC42ODEyOTc3MTA2ODI2OV0sIFstMS4yMTc3NjUzNTg2Njc3OCwgNTAuNjgxMTYwMjMxMjM3MjVdLCBbLTEuMjE3NzYzMzk0NzM1MjM0LCA1MC42ODExMDk4NzIyNTc1Nl0sIFstMS4yMTc1NjIwMTQyMTQ1NzEsIDUwLjY4MDc5MTA3Mjc5MzA0XSwgWy0xLjIxNzQ5NjM4MzQwMDcwMiwgNTAuNjgwNzM3NTg5NDU3OTJdLCBbLTEuMjE3NDY4NjU1Nzc3NjMxLCA1MC42ODA2OTk2NDQwMTc5OV0sIFstMS4yMTc0NTc4NDY2MzAyNzYsIDUwLjY4MDY2ODkxNDQ3MzE4XSwgWy0xLjIxNzQ0MzA5NzE1NTg0MywgNTAuNjgwMjc4NTQ1NTQ3NjZdLCBbLTEuMjE3NDQ1NDEzOTk4MDIsIDUwLjY3OTg4NjQ5MzA3MDYyXSwgWy0xLjIxNzQxNjQwMjUzNzQ3LCA1MC42Nzk0MjA0MTk3MzY2Ml0sIFstMS4yMTc0MTY3MDMyNzIzNjIsIDUwLjY3OTE0MjYyMDcwNzYyXSwgWy0xLjIxNzQ2ODY2ODgxOTM3NSwgNTAuNjc4ODI0NjIyMDQ3NDVdLCBbLTEuMjE3NTE2MTI5NzU0MjAxLCA1MC42Nzg2MDkwODI4MzczMl0sIFstMS4yMTc1OTU2OTAxMjU3MTIsIDUwLjY3ODI1MjYxMDg3NDM4XSwgWy0xLjIxNzYwMjczOTU0MTU5LCA1MC42Nzc5MTI3MzM5MTcyNV0sIFstMS4yMTc1NDgxNjM1NTM2MDUsIDUwLjY3NzExMDE2MDczNzI1XSwgWy0xLjIxNzU1MzUyNDY4MzE1NCwgNTAuNjc2ODcxODYzMTAzMjNdLCBbLTEuMjE3NTkzMTgxMjgzODQzLCA1MC42NzY2MTMyMDc3NDYxOF0sIFstMS4yMTc2NjUzMjk0MDcxNjIsIDUwLjY3NjM2NTQ2ODg3MjQxXSwgWy0xLjIxNzcwNjc4MTc4MjgzLCA1MC42NzYyNTE0Nzk5MTE5N10sIFstMS4yMTc2MTU4MzIyMzk5NDEsIDUwLjY3NTg0NzExMzkzNzc3XSwgWy0xLjIxNzU4NTU2NjExODgxNiwgNTAuNjc0OTQ0MDExODk4MTRdLCBbLTEuMjE3NTkwOTc1NzM0MzMyLCA1MC42NzQ2MTg1MDgyNzk1OV0sIFstMS4yMTc2NDQ0NzIzMTU3MTksIDUwLjY3Mzk1NTIwMDg5NzI5XSwgWy0xLjIxNzUzODUwMTMyOTQwNywgNTAuNjczMzQ1NjY0Mzc5ODRdLCBbLTEuMjE3NDM2NzY3NzQ4MzQyLCA1MC42NzMwODUwNzEwMzQxXSwgWy0xLjIxNzI5NjU0MjIyMDY1MSwgNTAuNjcyODM3Nzk0NTk3NTddLCBbLTEuMjE3Mjg5MzQxOTc0NjMyLCA1MC42NzI3NTg1NDE0MDkyXSwgWy0xLjIxNzM1NjQwMzg5MzkzNywgNTAuNjcyMzgxMzA3NTk2ODhdLCBbLTEuMjE3MzU5NTY0MjY2NDU0LCA1MC42NzIyODI0MzUxMTc2N10sIFstMS4yMTcyODUyODU0OTg1ODgsIDUwLjY3MjE1MzI4NDc4MzU3XSwgWy0xLjIxNzIwNDY5MTE0NDA3NiwgNTAuNjcyMDYwMTQzMjQ0NzJdLCBbLTEuMjE3MDYwNzY3ODMxODM0LCA1MC42NzE5NTEyOTI4Mjg4M10sIFstMS4yMTY5MDY1MjYzNTI0NzQsIDUwLjY3MTg2NjU1NjkzNl0sIFstMS4yMTY3MTgwMTk5OTEzNjgsIDUwLjY3MTgwMDU2MDI1NzA2XSwgWy0xLjIxNjUzOTExOTY2NzE2NywgNTAuNjcxNzQ2MzE1MjU5MDZdLCBbLTEuMjE2MTE3Nzc5MTY0MzY3LCA1MC42NzE2NDE4OTI0MjUyOV0sIFstMS4yMTU3MzEzMjYwNzI3MDIsIDUwLjY3MTU2NTU3Mjc4NzZdLCBbLTEuMjE1MzczMjI4NjQ4MjY4LCA1MC42NzE0ODIxNjA1MTg2M10sIFstMS4yMTUxODQ3MjU5OTg0MTQsIDUwLjY3MTQxNjE2MTM3MjE3XSwgWy0xLjIxNTAxMTM1OTQ3OTk4NywgNTAuNjcxMjg5MTI5NTI3NjZdLCBbLTEuMjE0NzY3MjM0MTEwNzcsIDUwLjY3MTA3NDMyNDcwMDQ3XSwgWy0xLjIxNDUzMzMwOTAxOTIwNSwgNTAuNjcwODQ5Njk4Njk0NzddLCBbLTEuMjE0MjY5Mzk1NDgxNTI1LCA1MC42NzA2MzkzNDQ1NTkyNF0sIFstMS4yMTQwOTc2NDEyMDg4NDYsIDUwLjY3MDQxNjAzNTY1MDkzXSwgWy0xLjIxNDA1MTc1NjY4MTU3OCwgNTAuNjcwMjc4MDg0MjQxNDFdLCBbLTEuMjE0MDE0NTIzMzcyMDkxLCA1MC42NzAyMjI5OTIxNjcxN10sIFstMS4yMTM5ODUxOTQ2MzQ0NzcsIDUwLjY3MDE5NzYyMTQ5MzkxXSwgWy0xLjIxMzg5MTI2MDI1MzExOCwgNTAuNjcwMTQ5MzM5Mzc5NTVdLCBbLTEuMjEzODk2MzI2MjkxNzYsIDUwLjY3MDAxMzYxOTM5Mjk4XSwgWy0xLjIxMzc1MzYwNDE4Njk5OSwgNTAuNjY5ODMzNjU5MzI1OTZdLCBbLTEuMjEzNzE5MTI5ODM2MTgsIDUwLjY2OTc3NDA5MDU4NjQ1XSwgWy0xLjIxMzY2MDM3NzQzMzY0OCwgNTAuNjY5NjUyMjM0ODM3NTVdLCBbLTEuMjEzNTg3NTc1MDkyNzQxLCA1MC42Njk2MDMxOTU5NTg4NV0sIFstMS4yMTMyODg0OTMwNDM3NzcsIDUwLjY2OTQ2NjMyMzExNjQyXSwgWy0xLjIxMzE5NzA1OTI1MjAwOSwgNTAuNjY5MjYxNTM1NDQ5MTNdLCBbLTEuMjEzMTc2MzM3ODQ4NDc5LCA1MC42NjkyMzA4Mjg0NDY0XSwgWy0xLjIxMzA5Nzg3NjkwNDA3MSwgNTAuNjY5MTg1MzQ3MjA0NzFdLCBbLTEuMjEyOTMwMDMwMTU3NjA4LCA1MC42NjkwNzA5MzU5MTk2NV0sIFstMS4yMTI4NzY2OTg2Mjg3MjQsIDUwLjY2ODc4NTQ5MjEwODA3XSwgWy0xLjIxMjc2MDk0OTQ2MDg2MiwgNTAuNjY4Njg4NDI0MDI3MDJdLCBbLTEuMjEyNjc1MjY4NDQ0OTA4LCA1MC42Njg2NDkxODY5ODIzOF0sIFstMS4yMTI2NTE5MTMxODMzOTgsIDUwLjY2ODYwODU3MjcxNzc1XSwgWy0xLjIxMjY0Njg3MzMwMzkxMywgNTAuNjY4NTY4MDgyMTM2OTddLCBbLTEuMjEyNjgxNTg3Mzc2NywgNTAuNjY4NTIyNDY1ODExMDNdLCBbLTEuMjEyNzIxNzc3MTU3ODM0LCA1MC42Njg0OTEyNzA5OTk1XSwgWy0xLjIxMjc4NDQ2Njg0NTE2NCwgNTAuNjY4NDYxMTI3MTMwNTNdLCBbLTEuMjEyODkyNTM2Mzc0MywgNTAuNjY4NDMxMjg5NjAwNTldLCBbLTEuMjEyOTk4Mzk0NTg2OSwgNTAuNjY4NDQ5OTg0ODk5MDFdLCBbLTEuMjEzMDg1NzYwODMyNDM4LCA1MC42Njg0NzIxNTE0Mjk0Nl0sIFstMS4yMTMxNzI3MDY1ODU2NzMsIDUwLjY2ODUxOTQ4ODAxNzc5XSwgWy0xLjIxMzI1MzY5NTk1NTQ2NSwgNTAuNjY4NTgxMTY4ODk2MTRdLCBbLTEuMjEzMzQ2ODIzODc2NDk1LCA1MC42Njg2MDA2NzcwMDYyNF0sIFstMS4yMTM0MjQ4NDUyMDUwMjQsIDUwLjY2ODU4ODYxNjkyNDhdLCBbLTEuMjEzNTc1MTExNDM4MTE1LCA1MC42Njg1NjgwNTM3Nzk0NF0sIFstMS4yMTM3NTA3MTU1NTY0OTMsIDUwLjY2ODU2MDI0Nzc5NTQ0XSwgWy0xLjIxMzg0Mjc1ODkxMDczMSwgNTAuNjY4NTYwODY4NDc0NjZdLCBbLTEuMjEzOTQ0OTE2NjgzNjE3LCA1MC42Njg1NDI2Nzc1NTM0XSwgWy0xLjIxNDA4NTMyMzI1MjUxNywgNTAuNjY4NTI1NjQzNDEzMDldLCBbLTEuMjE0MjYwOTg3MTM1NzE2LCA1MC42Njg1MTQyNDA5MjY0MV0sIFstMS4yMTQ0ODAzMDQ0NTE1OTYsIDUwLjY2ODUxNTcxODc3N10sIFstMS4yMTQ5MTM4Nzc3NDc4NTEsIDUwLjY2ODM5NTM4MTU1OTcxXSwgWy0xLjIxNTIyNjE1NDY1OTM0NSwgNTAuNjY4MzM1NDUwNTczNF0sIFstMS4yMTU3MDkxMDc2OTQxMDEsIDUwLjY2ODIyNzIyMDExOTQ5XSwgWy0xLjIxNjEyMzY3MzI3MTYzMywgNTAuNjY4MTQxMDAzNzQ4NDFdLCBbLTEuMjE2NDk4NzA3MDUyNDM5LCA1MC42NjgwNTM1MzEzMTMxM10sIFstMS4yMTY4OTM0NTAwMjgxODcsIDUwLjY2Nzk3MzQ3MjIzNDQ3XSwgWy0xLjIxNzMzMjE2MjA0NDg5MywgNTAuNjY3ODgwMjIxNDgwNTFdLCBbLTEuMjE4MDU0OTg0MTk5MTYxLCA1MC42Njc3Mjk0NDg3Mzg5N10sIFstMS4yMTgzMDYyNjYwMDkxMSwgNTAuNjY3NjgxNjg2ODkwMjRdLCBbLTEuMjE4NDg0OTY0MjM1ODU5LCA1MC42Njc2NTU5MTM4NDA1NV0sIFstMS4yMTg2MTUzNzYyMjU1ODUsIDUwLjY2NzY0MzMwMjQyNDkyXSwgWy0xLjIxODc3MTE0NDYwNjEyNCwgNTAuNjY3NjM1MzU1OTQyODJdLCBbLTEuMjE4OTY5MzAxMjAwNzk0LCA1MC42Njc2MzIxODgzODk4NV0sIFstMS4yMTkxMTQ5NzQ4NDQ2NDEsIDUwLjY2NzYzNDk2MjIzNDAyXSwgWy0xLjIxOTI3ODk0NjA0MTYxMiwgNTAuNjY3NjQ1OTQ5NzMxOTZdLCBbLTEuMjE5NTY5ODE2NzQ0NjI2LCA1MC42Njc2ODAyNjIzNjc4OF0sIFstMS4yMjAxNzMwNTU0OTMxMTcsIDUwLjY2NzgyNDYzODAyMDk5XSwgWy0xLjIyMDM2NzM3MTI2MjE2NywgNTAuNjY3ODg0Mzc0Nzg4NzhdLCBbLTEuMjIwNTA1NTU1MzM1ODIxLCA1MC42Njc5MTY3NjQ5MzU4NV0sIFstMS4yMjA1NzE4NTYzMDYzNTQsIDUwLjY2NzkyODg5NTYzNTMyXSwgWy0xLjIyMDc1Njg4MTkzOTgzNywgNTAuNjY3OTUwODEwMjExMzFdLCBbLTEuMjIwODkzOTY2Mzc5MTk5LCA1MC42Njc5NTgwMTk1OTIyN10sIFstMS4yMjIwMjE0MDkzMTY0NjQsIDUwLjY2Nzk3NTQzNzYwNzU1XSwgWy0xLjIyMjk3ODU4MzE0OTUwNywgNTAuNjY4MDI0MDc1MjkxNDZdLCBbLTEuMjIzMTA1NjkwOTk5ODQsIDUwLjY2ODA0MjAwMzk4NzI2XSwgWy0xLjIyMzIyOTg4MjUxNjgyNiwgNTAuNjY4MDU5OTEzMTE0MzhdLCBbLTEuMjIzMjM5OTc2MzIxMjYyLCA1MC42NjgwNDkxOTE5NTUyNF0sIFstMS4yMjMyNzcyMTI2NTQ0NzIsIDUwLjY2ODAxOTc3MTkwODM2XSwgWy0xLjIyMzQ1NDIyMTU1NDU1NiwgNTAuNjY3OTI2NTUyNDQwMDVdLCBbLTEuMjIzNTI5NDk4NzczMTgzLCA1MC42Njc5MTA4NzExODczMV0sIFstMS4yMjM1NzIxODQyMTE0MDMsIDUwLjY2Nzg5NzY2OTk0ODE2XSwgWy0xLjIyMzYwOTI0MjM2NjE4NCwgNTAuNjY3ODc5MDM3MDE2NTVdLCBbLTEuMjIzNjQ5MzY1MTEyNzQ0LCA1MC42Njc4NTE0MzQxMzk3OV0sIFstMS4yMjM3NDczNDIxNjA1MDYsIDUwLjY2Nzc0NjgwOTYyODc4XSwgWy0xLjIyMzc5OTgwNDY1NTE1MywgNTAuNjY3NjUwMDYzMjM3OTddLCBbLTEuMjIzODAyOTU4MTM1NDksIDUwLjY2NzYzNTY5OTY4Nzk5XSwgWy0xLjIyMzc0MzYyNDIzMzI2NiwgNTAuNjY3MjAwODkxMzk4NjVdLCBbLTEuMjIzNzQxOTA4MTE0ODcsIDUwLjY2NzEyODA1ODIxMDYzXSwgWy0xLjIyMzc1NDIyNDI2MjU1MiwgNTAuNjY2OTgyNDk2Njg1MDNdLCBbLTEuMjIzNzY2NzI1MTU0OTgzLCA1MC42NjY5MTA2NTcxODQzNl0sIFstMS4yMjM5NTM4NjQzNjQ1MzQsIDUwLjY2NjM3MjMwMjY3MjE3XSwgWy0xLjIyMzk5NTIyMzg1NDQ1OCwgNTAuNjY2MDE0NjcyNDM1NjVdLCBbLTEuMjIzOTc4NDM4NTE1NTU3LCA1MC42NjU5MTQ2NzgwMDQ1Nl0sIFstMS4yMjM5MzMzOTI0MjAzNzIsIDUwLjY2NTgxNjM4MzQyNzQ2XSwgWy0xLjIyMzkxMjY1MDY2OTg4MSwgNTAuNjY1Nzg2NTc3MjI2NjRdLCBbLTEuMjIzODA2OTk0MzAyNDcsIDUwLjY2NTY3MDc5NzQ2Nzc0XSwgWy0xLjIyMzc2MTY5ODM4OTcxNywgNTAuNjY1NTg3Njk0ODM2MDZdLCBbLTEuMjIzNzM4ODA5MTc5NDc4LCA1MC42NjU1MTgzMTY3OTM3XSwgWy0xLjIyMzcyNDk4NTY3ODM3NCwgNTAuNjY1NDA4NTQyNTYxOTJdLCBbLTEuMjIzNTkwMzkwNjg5MzA5LCA1MC42NjQ5MDQwMDcyMzQ0N10sIFstMS4yMjM2MDY4OTYwNjA5NiwgNTAuNjY0ODUxMDc0MTE3NThdLCBbLTEuMjIzNjM3MTQ3Mzc5MDQ4LCA1MC42NjQ4MTM1MTYxMTk4N10sIFstMS4yMjM2NzkzMTM4MzUyNDcsIDUwLjY2NDY2MTc3MDE3MjU3XSwgWy0xLjIyMzczMzEyNjQwODE3NiwgNTAuNjY0NTc0OTIyMTM3NTRdLCBbLTEuMjIzNzM1NDE1MTk4MjM1LCA1MC42NjQ1MjA5OTUzMDY5OV0sIFstMS4yMjM2NzU1MzIyOTI2NjQsIDUwLjY2NDQ1OTQ2MjIzMDA5XSwgWy0xLjIyMzU5NDM1ODM4NTk4MiwgNTAuNjY0NDA4NTc1NzUxMTRdLCBbLTEuMjIzNTA1MjU4OTg4NTk3LCA1MC42NjQyMjk4ODM2MjA1Ml0sIFstMS4yMjMzNjY0Nzc0OTU3MzksIDUwLjY2NDA3MTUzODI2NzEzXSwgWy0xLjIyMzI4NDY0MTgyMDAzNCwgNTAuNjYzODgzOTkzODk4MjVdLCBbLTEuMjIzMTI1MTc3MDk0MjYsIDUwLjY2MzYwMDU0NDYzMDMxXSwgWy0xLjIyMzAzNDQyMzM1MzM2MiwgNTAuNjYzMzUyNjE1NDEyXSwgWy0xLjIyMjkxNjkyNDAwNTgyOCwgNTAuNjYzMjc2MzEzMzgzODZdLCBbLTEuMjIyODUxNjk0OTgwNDU5LCA1MC42NjMxMDc2NjkxOTI4Ml0sIFstMS4yMjI3NzQwNjk2ODQ4OTIsIDUwLjY2Mjg0MTkzNjQ2NTYxXSwgWy0xLjIyMjY5MzUwMDk3MDE5MiwgNTAuNjYyNTc3ODkyMjE0NDVdLCBbLTEuMjIyNjU3MTU1MTY2OTM5LCA1MC42NjI0Njg3NzY3NjA3OV0sIFstMS4yMjI2ODQwNTIxNjQ5MjMsIDUwLjY2MjM3OTk1MTY0NDIxXSwgWy0xLjIyMjcxOTA2MzQ1MTA5NiwgNTAuNjYyMzE1NDU0NTYwOTRdLCBbLTEuMjIyNzUzOTExNDYzMjYyLCA1MC42NjIyNjA4NDU3NjE5MV0sIFstMS4yMjI3NTUyNDgwMzAzNiwgNTAuNjYyMTc5ODUxNjI4NTddLCBbLTEuMjIyNjk3MTIzMDcyNzgxLCA1MC42NjIxMDM5NDUxNzY0M10sIFstMS4yMjI2MzA2NzYyODgyMDcsIDUwLjY2MjAxNjI5NTc1MTVdLCBbLTEuMjIyNTcyODUwNTQxMzQyLCA1MC42NjE5MTUyMTgyNTA5OF0sIFstMS4yMjI1MjIwNjU0MTM5NywgNTAuNjYxODI1Nzg1MjIzMTFdLCBbLTEuMjIyMzc5NTc1Mjk2NTYzLCA1MC42NjE3MTYwNTE2NjgxNl0sIFstMS4yMjIzMDAxOTUyMDI1NjUsIDUwLjY2MTYzNDYwOTAyNTQ5XSwgWy0xLjIyMjI4NDc2Nzk4NjgwMiwgNTAuNjYxNTQ0NTEyNzA5NzddLCBbLTEuMjIyMzA3MTk4OTA0MTM3LCA1MC42NjE0NzE4NDA1MDM4Ml0sIFstMS4yMjIyOTE0MzA5NTk5MDcsIDUwLjY2MTM5NTMxNzM0MjYyXSwgWy0xLjIyMjE1MjkwMTQ1OTQ4MSwgNTAuNjYxMjE1Mzk1MjgwMTVdLCBbLTEuMjIyMDg2NDg2NjE5ODY0LCA1MC42NjExMjU5NDc2Njk3Nl0sIFstMS4yMjIwMTQyMzM5MDkxMjIsIDUwLjY2MDk1OTE0NDA0MzA1XSwgWy0xLjIyMTk3NTI5MzcyNDU0OCwgNTAuNjYwNjYxMjEzNjQ2NDRdLCBbLTEuMjIxOTM1NDgxNzgyODE4LCA1MC42NjA1MDA4Mjk3ODgzNF0sIFstMS4yMjE3NTUwNjg2MTIxMTQsIDUwLjY2MDAzMjAzNzM2ODNdLCBbLTEuMjIxNjY0MjU1Njg2ODE0LCA1MC42NTk4ODAzMDMyODQ1OF0sIFstMS4yMjE0ODAyNTIxMDQwODIsIDUwLjY1OTYyOTA1Mjk2NDg0XSwgWy0xLjIyMTQyMDQyMjg4Mzg5MSwgNTAuNjU5NTY0ODIxOTEwNTZdLCBbLTEuMjIxMjM2NTcxNTc2NzM0LCA1MC42NTkzODkxODEwODA2OV0sIFstMS4yMjEzMzA5NzkwMzk0OTcsIDUwLjY1OTMzMDM4NTQzODM3XSwgWy0xLjIyMDgxMzgwODA5NDA2MSwgNTAuNjU4ODYyMDM4ODExNF0sIFstMS4yMjA0NTIzMzkxNDY0MjEsIDUwLjY1ODQ4MDEzOTQ0NTkyXSwgWy0xLjIyMDI1NjQ4MzUwMDYxLCA1MC42NTgyNjIwNzIxNzM1NF0sIFstMS4yMTk5Mjc2NzA2MTU4OTEsIDUwLjY1Nzg2NjkwMzk5OTM0XSwgWy0xLjIxOTc4MDAyMDk0MjU2NSwgNTAuNjU3NjQwMTY4MDgzNDNdLCBbLTEuMjE5NzIwMjk4Mjg5MzY2LCA1MC42NTc1NzY4MzU4NzI5OF0sIFstMS4yMTk1MDY4NzA2MTU0MzYsIDUwLjY1NzM5MTkxNDAwMzU1XSwgWy0xLjIxOTQ1Njg4MzUwNTcwMiwgNTAuNjU3MzM5NDM1MjYxMDRdLCBbLTEuMjE5MjMwMTUzNzE5MDQxLCA1MC42NTcwMTQxNzQyMjE4Ml0sIFstMS4yMTg5NDE3ODI4Mzg5MiwgNTAuNjU2NjY0MjI1NzgzOF0sIFstMS4yMTg4MDkwNTY5NDIxMjksIDUwLjY1NjQ3MzU0OTk5NTA3XSwgWy0xLjIxODczOTE1NzExNDM2LCA1MC42NTYzNDE4MjIzMzQxMl0sIFstMS4yMTg2MjUxODQ2MzAwOTcsIDUwLjY1NjIxNjA5MjQ5MTA4XSwgWy0xLjIxODQ0NTY0MzYwOTAyOCwgNTAuNjU2MDQyMTg0MTY0OTZdLCBbLTEuMjE3OTc5MjAxMzA4Mzg3LCA1MC42NTU2NzY2NTQ3NDczM10sIFstMS4yMTc0NzAwMzQ5MDA2NTYsIDUwLjY1NTI0MzQwODkzNTczXSwgWy0xLjIxOTkwODI5NDMxODQ4NiwgNTAuNjUzODI0NDM4ODUxODFdLCBbLTEuMjIwNzExMTAyNTU5NTUzLCA1MC42NTMzNTEzNDEwMzU0Ml0sIFstMS4yMjExNjM1MDY3NTE0NjksIDUwLjY1MzExMjUyMzU4MTgzXSwgWy0xLjIyMzM2ODMzNjE3NTEyOSwgNTAuNjUyMDMwMDQ4OTE2M10sIFstMS4yMjMzNjk3NTA0MDMwNiwgNTAuNjUyMDI5MTU5MzAxNDVdLCBbLTEuMjIzNTY4MDcxMTU3MTMzLCA1MC42NTE5MjcwOTExNTEyNF0sIFstMS4yMjM3OTAyOTU2OTcwMTYsIDUwLjY1MTgzMjM3NDExNzgzXSwgWy0xLjIyMzg5NjEzMTY4NzUxMiwgNTAuNjUxNzU4MzY4ODM3Ml0sIFstMS4yMjM5NDA3NjQzNjg0ODgsIDUwLjY1MTcxMTAxNzAzNzczXSwgWy0xLjIyMzk4MTQ5NDg2NDcyLCA1MC42NTE2NDU2NTg1MTYxM10sIFstMS4yMjQwODY0MzMwNTc4MzQsIDUwLjY1MTM3MTE2MTk1MTA1XSwgWy0xLjIyNDExNTczMjkwMTIxOSwgNTAuNjUxMzEyOTE5NTkwNTNdLCBbLTEuMjI0MTc2ODk2MTE1MDIyLCA1MC42NTEyMDM2NDQxOTg3OF0sIFstMS4yMjQyNTY2NjMzMzI0NDgsIDUwLjY1MTA4MzYxNDIzMTUzXSwgWy0xLjIyNDM1NTAwMTgwMTAyNywgNTAuNjUwOTU0ODA3MzEyODVdLCBbLTEuMjI0NDYwMjQ5MzEwOTYzLCA1MC42NTA4MzEzNTA1ODldLCBbLTEuMjI0NzEyMjQ2MTI2ODExLCA1MC42NTA1NjQxMjQ5Mjk4N10sIFstMS4yMjQ3NDEyNTA1ODkwODgsIDUwLjY1MDUxNjY2ODg4MTU5XSwgWy0xLjIyNDc2MDQ1OTQzODM2NSwgNTAuNjUwNDY5MTQ3Njg0MzZdLCBbLTEuMjI0ODM3MjQxOTIzNjQsIDUwLjY1MDAxMjg1Nzc1NzNdLCBbLTEuMjI0ODc2NzE3NDY5MzU1LCA1MC42NDk3NjEzMDAwNjYzNV0sIFstMS4yMjU2ODUxNTI1MjcwMDUsIDUwLjY1MDA1OTg0ODUxNDUzXSwgWy0xLjIyNjE5NzE2NjU5MDY1NiwgNTAuNjUwMTUwNDU0ODM1NTJdLCBbLTEuMjI2NjM0ODY0MjY3NzI5LCA1MC42NTAyMDAxMDkyNjIwM10sIFstMS4yMjY5MDU5NzA5MTgyNiwgNTAuNjUwMjI0MzgzMzkxNTZdLCBbLTEuMjI3MDE1Njk3MTM1MjkyLCA1MC42NTAyNjEwNzI0NzM3OF0sIFstMS4yMjcwNzg4Nzk5MTYxNiwgNTAuNjUwMjkxMjQ5NTE2MTNdLCBbLTEuMjI3MTgxMTM3ODI0Njg5LCA1MC42NTAzNTY2NTgwOTM0OF0sIFstMS4yMjcyMjg5MDI0ODg0NDYsIDUwLjY1MDM3NDA1NjQyNTY5XSwgWy0xLjIyNzI3Mzk4NjM5NTExLCA1MC42NTAzODQyNDQ2NzY2Ml0sIFstMS4yMjcyOTc5OTQwNTUxMTIsIDUwLjY1MDM4NTMwMjg0NjQyXSwgWy0xLjIyNzM0NjQwNjA1OTY3MywgNTAuNjUwMzcwMzQwMTA2NzFdLCBbLTEuMjI3MzcyMDkzMTM1MjksIDUwLjY1MDM1NDMyNzY5ODU5XSwgWy0xLjIyNzQyMDc0MjIwNjA5NSwgNTAuNjUwMzE3Nzg5NjIyOTFdLCBbLTEuMjI3NDc0MDE2ODY1MDYyLCA1MC42NTAyNjIzMTI1MDkzNl0sIFstMS4yMjc5NzA3NjM2MDExNDIsIDUwLjY1MDE2MDQxNjAzNTQ1XSwgWy0xLjIyODI0NTk2MzkyMzk4OCwgNTAuNjUwMTEyNzkxMjM2NDldLCBbLTEuMjI4Mzc4MTA2ODgxMTY0LCA1MC42NTAwNzY4MDU0NzkxM10sIFstMS4yMjg2MTczNTQ1Nzc4MDEsIDUwLjY1MDA2NjcwMTM1ODY4XSwgWy0xLjIyODY5NjY1MjQxOTExMywgNTAuNjUwMDYwMDMzNzU1NjddLCBbLTEuMjI4ODM4NTMwNDMyMDI5LCA1MC42NTAwMzQ5MDAzMjUwN10sIFstMS4yMjkyNDUwNjI0MDAzNTIsIDUwLjY1MDAwMDcyODM4MjExXSwgWy0xLjIyOTI4MTg5ODMyNDgyNSwgNTAuNjQ5OTk0Njc4NjY2ODhdLCBbLTEuMjI5MzIzMjEwNjM2MDU5LCA1MC42NDk5Nzg3NjkxMzIwMV0sIFstMS4yMjk0MDQ2ODgyMDM5NDksIDUwLjY0OTkyNDM3NjYyMDA5XSwgWy0xLjIyOTQ4MjQwNzA0ODcyMywgNTAuNjQ5ODQzMDc4MDE2MDZdLCBbLTEuMjI5NTIyODY0NjM1NDM5LCA1MC42NDk3ODY3MDYxMTgyM10sIFstMS4yMjk1MzU4ODMwNTMyNjksIDUwLjY0OTc3NTEwNDY4NTA5XSwgWy0xLjIyOTU2NzEzNzA0OTE0NiwgNTAuNjQ5NzYwOTI2NjU5MzNdLCBbLTEuMjI5NjEyNTg3MzQ0NCwgNTAuNjQ5NzU1ODMyODA3NDVdLCBbLTEuMjI5NjU5MTg4MDk5NjY5LCA1MC42NDk3NTg4Mzc4Njg3Nl0sIFstMS4yMjk3NDIxODM3MTAyNDEsIDUwLjY0OTc4Mjc2MTIzMTY3XSwgWy0xLjIyOTc3OTA0Nzg1MjA0OCwgNTAuNjQ5NzgyMTA1NzY1MDFdLCBbLTEuMjI5ODIxNzAwMzg0Mzg1LCA1MC42NDk3Njk4MDEwNTQ1MV0sIFstMS4yMjk4NTMwMTMwNjA0ODIsIDUwLjY0OTc1MjAyNzE5MzkyXSwgWy0xLjIyOTg2NDU0NDgxNDc2MSwgNTAuNjQ5NzM4NjE3ODI5NjRdLCBbLTEuMjI5OTA2OTE1OTQwMjQzLCA1MC42NDk2NTc4OTQ1NTA2NF0sIFstMS4yMjk5NTAxNDEyNDkzODIsIDUwLjY0OTYxMDUzMTE1Mjc5XSwgWy0xLjIyOTk5NDQ1NzMzMjczMiwgNTAuNjQ5NTgyMDU0NzEwNTNdLCBbLTEuMjMwMDUyNzY1ODYxNzIsIDUwLjY0OTU2MDg2Mjk2MDc5XSwgWy0xLjIzMDE0Nzg5NDIyNjY1MiwgNTAuNjQ5NTQxNzEyNDE1ODldLCBbLTEuMjMwMjMxNDYyNDE5NDM2LCA1MC42NDk1MzA1NzY3ODg1OF0sIFstMS4yMzA0MjM5MDA4NzI3MzEsIDUwLjY0OTUzMDA0OTI2NjI2XSwgWy0xLjIzMDQ4MDYzMzY0NjQ0NiwgNTAuNjQ5NTE5NjM1MzM4NV0sIFstMS4yMzA2ODI2NzE1NDI3MDYsIDUwLjY0OTQ0NTQ0OTc2MTMzXSwgWy0xLjIzMDczMTAwODE0MTc5MSwgNTAuNjQ5NDM0OTgwMzAyNF0sIFstMS4yMzA3ODQ4MzkzNDI5MDIsIDUwLjY0OTQzMDg0MDMzNTA2XSwgWy0xLjIzMDkxMjAxODI5NjAzMSwgNTAuNjQ5NDM0Mzc2NTU5ODVdLCBbLTEuMjMwOTQxODg2MjMxMTUxLCA1MC42NDk0MjY0ODIyNzcxMV0sIFstMS4yMzA5NzM0MTc1NjQyMzgsIDUwLjY0OTQwMjQxNjMwMjc1XSwgWy0xLjIzMDk4NDQ4OTk1NDkxMSwgNTAuNjQ5MzMxMzc1NTU2NzRdLCBbLTEuMjMxMDAxNzc5OTg1ODc0LCA1MC42NDkzMDgxMTQ2NjM4OV0sIFstMS4yMzEwMzQ3NTQ1NDg2OSwgNTAuNjQ5MjgxMzYxMDgzNTNdLCBbLTEuMjMxMDczMTM1NzA0NDY1LCA1MC42NDkyNjYzMzA2MzA1OF0sIFstMS4yMzExMTE0ODY3NjcxNDYsIDUwLjY0OTI2MDI5MDMzMTc5XSwgWy0xLjIzMTE1NjcwMjQ3MDY4MiwgNTAuNjQ5MjYyMzg2NjIzNDldLCBbLTEuMjMxMjY2NjkzNzgwMjIzLCA1MC42NDkyODI4OTA3OTc1N10sIFstMS4yMzEzMDA2NTY5MDQ2OTYsIDUwLjY0OTI4MTMxNjY4MzU0XSwgWy0xLjIzMTM1MzMzNzgyODI3NCwgNTAuNjQ5MjYxODg1MjQ4MjNdLCBbLTEuMjMxMzYxOTk3MDU4MTEyLCA1MC42NDkyNTI5NTE5NzgxMl0sIFstMS4yMzEzNjMxNDA3ODM3MzYsIDUwLjY0OTE4MjgzNDY3MDYyXSwgWy0xLjIzMTM3MzQ5MjU4MzkxMiwgNTAuNjQ5MTU1OTMxODI4OTZdLCBbLTEuMjMxNDEzNDE5NDc5MTcsIDUwLjY0OTEzMTkyMTA5MDQ1XSwgWy0xLjIzMTY3MzE0NTE2NTI5MiwgNTAuNjQ5MDgxNDg5MDczNDNdLCBbLTEuMjMyMDI5ODIzMDg2MTU4LCA1MC42NDg5Nzg1NjIxNjA4NF0sIFstMS4yMzIyNzI2ODMzMDI5MiwgNTAuNjQ4OTE4MTI4MzAwMTNdLCBbLTEuMjMyMzk3MzY5ODY3MDc5LCA1MC42NDg5MDI3NjY3MjU1OV0sIFstMS4yMzI2OTQ1MzY3NDgwMDksIDUwLjY0ODg5NDgzMzY4MjI4XSwgWy0xLjIzMjc0NzA0MTAzMDkwMSwgNTAuNjQ4ODg2MTg4ODkzM10sIFstMS4yMzI4MDI0NjEwMTkxOTUsIDUwLjY0ODg3MDM3MDk3NzM0XSwgWy0xLjIzMjgzOTUwMDUwMDUyNSwgNTAuNjQ4ODUxNzM0OTY3NjFdLCBbLTEuMjMyOTI1NTc3ODMzNjQ3LCA1MC42NDg3Nzk0Nzk0Mzk3Nl0sIFstMS4yMzI5Njk4MDM1NDk5MDEsIDUwLjY0ODc1NjM5NTQ5MTk5XSwgWy0xLjIzMjk5MjU0Mjg5MDk3NywgNTAuNjQ4NzQ5MzUyODE2NDFdLCBbLTEuMjMzMDQ5MDk4NTk5Nzc2LCA1MC42NDg3NDk3MjQ5MTMyOF0sIFstMS4yMzMxMDU5Nzc2MjQ3MTIsIDUwLjY0ODczMDIzMDQwMjQ5XSwgWy0xLjIzMzE5MDYyNTc1NzM4NCwgNTAuNjQ4NjU5NzYzMzQ5NjddLCBbLTEuMjMzMzQ3NDg0NDQ1OTc1LCA1MC42NDg1ODA3ODA3ODQ5M10sIFstMS4yMzMzODcyOTI0NzQyNywgNTAuNjQ4NTcxMTUzMTczNzldLCBbLTEuMjMzNDI5NjUwODg5LCA1MC42NDg1Njk2MzM2NDg3OV0sIFstMS4yMzM0NjUwMjY5OTUyNzYsIDUwLjY0ODU3NDM2MTQ1MjIxXSwgWy0xLjIzMzUzMjQ0MDMzNzYxOCwgNTAuNjQ4NjAyNjc0ODQxMDhdLCBbLTEuMjMzNjAwMTkwMDI0NTI2LCA1MC42NDg2MTAzMTI1NjE5Ml0sIFstMS4yMzM2MzgzOTQzODkwOTMsIDUwLjY0ODYwNjA2ODU0MTI0XSwgWy0xLjIzMzY3MTA4OTIxMDI0LCA1MC42NDg1OTYzOTQwNzA4Ml0sIFstMS4yMzM4NDM4MjA5Nzc1NDgsIDUwLjY0ODUwMjIzMTU2MjVdLCBbLTEuMjMzODgwODAxMzAwNjA2LCA1MC42NDg0ODcxOTA5Nzk0NF0sIFstMS4yMzM5NjQ2MDAyODA2OTIsIDUwLjY0ODQ2ODg2MTkwMzIyXSwgWy0xLjIzNDk4NTUxNTQ3NzAyMiwgNTAuNjQ4NDAzNTUzMjU2OTZdLCBbLTEuMjM1MDA5NDM0NzU5OCwgNTAuNjQ4NDEwMDAzNDc5MTVdLCBbLTEuMjM1MDYyNzUzNzA5ODk0LCA1MC42NDg0MzczMjQ0NTM4XSwgWy0xLjIzNTEzNjM2MDQyMDg2NSwgNTAuNjQ4NTE1MjE0NDYzMTFdLCBbLTEuMjM1MTQ4ODIyNjY3OTg5LCA1MC42NDg1Mzc3NzIxNDA5NV0sIFstMS4yMzUxNjE3NTA1NzE1MjQsIDUwLjY0ODYxMDY3ODkxNDM2XSwgWy0xLjIzNTE3MjU4MDIxMTIxNSwgNTAuNjQ4NjQwNDE4MTY5NDFdLCBbLTEuMjM1MTg5MjExMzgxNjA3LCA1MC42NDg2NTc2MDg5NzUxOV0sIFstMS4yMzUyNDY4MTYwOTM2MDcsIDUwLjY0ODY4Njc1NjA1NDAyXSwgWy0xLjIzNTUyNDIyODM0MDI2MSwgNTAuNjQ4NzYwNTg4NDIwNDddLCBbLTEuMjM1NjY0MDQzNDI1NjQyLCA1MC42NDg3NzU4ODk4MDAzNF0sIFstMS4yMzU4MjY1Njg0MDA0NjYsIDUwLjY0ODc3ODc1MzM3Mjk5XSwgWy0xLjIzNjE3MjIwMTMzNDU5LCA1MC42NDg3NTIxNTk0OTEwMV0sIFstMS4yMzYzNTExMjM0MzAxMzIsIDUwLjY0ODc5Mzg3ODIzNzI2XSwgWy0xLjIzNjUxMDg3OTEwMjkyNSwgNTAuNjQ4ODAyMTE2OTMyNTNdLCBbLTEuMjM2NTcxNDcyNjgwMjk0LCA1MC42NDg4MTI0MDMxNjQ5OV0sIFstMS4yMzY2Nzk3MDE5OTY1MzUsIDUwLjY0ODg1NTM2NjU5ODM0XSwgWy0xLjIzNjcxNjMxNzY4MjU0MiwgNTAuNjQ4ODYyNzk4NjM5XSwgWy0xLjIzNjg3MDM3NDMyMDU0MywgNTAuNjQ4ODcwMTAwNDg5MzJdLCBbLTEuMjM3MDE0ODU0MDgzOTUxLCA1MC42NDg4NjM4NTM5MTAzMV0sIFstMS4yMzcxMzM0MzIxOTMyMTgsIDUwLjY0ODg3MjcyMTI3MjUzXSwgWy0xLjIzNzI4MDA4NDkyMzg2MywgNTAuNjQ4OTA1MTQ3MTQ2NzldLCBbLTEuMjM3NTg4Mjc0NTE4MzI4LCA1MC42NDkwMDE1NjE5NTQ4Nl0sIFstMS4yMzc2MzIwMDM3MDMyNDcsIDUwLjY0OTAwOTA0MDIyOTcyXSwgWy0xLjIzNzY4ODUzMDcwMDMyMywgNTAuNjQ5MDExMjA3OTU4ODhdLCBbLTEuMjM3NzM4MDYwNzk0MDY0LCA1MC42NDkwMDYxMzc2MTkxXSwgWy0xLjIzNzc2MDkwMTYyMjg2LCA1MC42NDg5OTk5OTM3MTQ0Nl0sIFstMS4yMzc4ODc3NDIwMDU2OCwgNTAuNjQ4OTM3ODkwNDY0Ml0sIFstMS4yMzc5MjAzOTI1ODQ1NjEsIDUwLjY0ODkzMDkxMTYyMzA4XSwgWy0xLjIzNzk4MzkwMTkwMTAyNSwgNTAuNjQ4OTQxMjE2MTgwNjhdLCBbLTEuMjM4MDk0NzQyNTE1Mzg4LCA1MC42NDg5OTU4ODI4MzYyOF0sIFstMS4yMzgyNTI3ODI2Njc3NzIsIDUwLjY0OTEwMzA5MTgyMTZdLCBbLTEuMjM4OTg3OTczNjUwOTk1LCA1MC42NDkzOTE5ODg5NjAxMl0sIFstMS4yNDAxNTM3NjU5NDMyNTMsIDUwLjY0OTg5Njk0MDI1NTQzXSwgWy0xLjI0MDU5NzY4NDM1NTU2MiwgNTAuNjUwMDg5NjE5Mzg3ODZdLCBbLTEuMjQyMDE0NzI5MjAxODg2LCA1MC42NTA3MTc1NTgyMDkxNF0sIFstMS4yNDIxOTMzNzIyMjQyNSwgNTAuNjUwNTE2MzQ2NjM5MDVdLCBbLTEuMjQyNDM2MjkxODcwODkyLCA1MC42NTAyNzc3OTI5OTc2N10sIFstMS4yNDI0NTI0OTUxOTg1NSwgNTAuNjUwMjM0NzQ0NTY4ODRdLCBbLTEuMjQyNDgzMzYxMzE2Mjk3LCA1MC42NTAwNzc2MTM4NTQ2N10sIFstMS4yNDI1MTk3MjI1NzU0NywgNTAuNjUwMDEzOTI4NjcwMDddLCBbLTEuMjQyNTc4NTQ2MjU2NDE4LCA1MC42NDk5NjAzNjg3MTgwOF0sIFstMS4yNDI2MDA2MzY3NjA3NTMsIDUwLjY0OTkwNjU3MDA4NTQ3XSwgWy0xLjI0MjU5NzYzNzk3NDQxNywgNTAuNjQ5ODMxOTMwNjE3MThdLCBbLTEuMjQyNTYyMjc5MTYwODM2LCA1MC42NDk3NDYyMDI1NjIwNF0sIFstMS4yNDI1NjI3OTkzNDk3MDcsIDUwLjY0OTcxMzg0MDY0NjM0XSwgWy0xLjI0MjU4MTcxNDM2MDU1MiwgNTAuNjQ5Njc2MjA0MDMwODNdLCBbLTEuMjQyNjEwNjE0NjQxMjYzLCA1MC42NDk2NDEzMjkzOTQzNl0sIFstMS4yNDI2ODY1NDk3OTE2MzIsIDUwLjY0OTU4MjQ4NjM0MDg5XSwgWy0xLjI0Mjc0MDc3MDIxNzk1NywgNTAuNjQ5NTU0MDY5NDA4NjJdLCBbLTEuMjQyODY4NzQ0OTQ4NTIxLCA1MC42NDk1MDgxNTA3Njk3NF0sIFstMS4yNDMwODc0ODU1OTE1NTIsIDUwLjY0OTQ1MjkzMTk2MTE2XSwgWy0xLjI0MzExNTI4OTU4MzQzLCA1MC42NDkzOTE4ODgxMzMxOV0sIFstMS4yNDMxODUwNDk5NTkwNzYsIDUwLjY0OTI4MTc1OTYxMDI4XSwgWy0xLjI0MzIzMjQxNjMxMzc4OCwgNTAuNjQ5MjM3MTE1MzAzNDVdLCBbLTEuMjQzMzA2NTYwOTUxNDA2LCA1MC42NDkyMDI1MzQxOTQ1OV0sIFstMS4yNDMzMjM1NDE3MzY3MTgsIDUwLjY0OTE5ODE0OTIzNTVdLCBbLTEuMjQzMzUzODY4NTc4MDk3LCA1MC42NDkyNDg2OTIwOTY1OF0sIFstMS4yNDQ4MzE1OTE2MjI4NjYsIDUwLjY0ODkyMTk0NDY2MjQxXSwgWy0xLjI0NTc1MzMzOTIyODA2NywgNTAuNjQ4ODU4Njg2MjYwMDFdLCBbLTEuMjQ2MTkxOTY2NjM4OTkzLCA1MC42NDg4NTA3MzQ5MzA4OF0sIFstMS4yNDczNDYzNTU1MjQyNTIsIDUwLjY0ODc1MjAxNzY0MjU1XSwgWy0xLjI0NzgwNDIwMDk3MTY0OSwgNTAuNjQ4Nzc0NzUxNTQ1MzhdLCBbLTEuMjQ3ODgxMTQ3Nzg4OTU1LCA1MC42NDg4MjczOTIwOTY0N10sIFstMS4yNDc5NTk3NjcwODgwNzMsIDUwLjY0ODg3MDI0Mzg5MzkzXSwgWy0xLjI0ODA1Njc2NzUzODU0OCwgNTAuNjQ4OTA4NjI5MTE5MTRdLCBbLTEuMjQ4MTgyMTAyNjUwOTM4LCA1MC42NDg5NDAwMDQ3MTQ1NV0sIFstMS4yNDgzMTMyNjY1NzA4OTgsIDUwLjY0ODk2NDIyNTQ3MjE5XSwgWy0xLjI0ODQzMzMwNTc3MjM3MiwgNTAuNjQ4OTc2Njg2ODk0ODhdLCBbLTEuMjQ4ODExOTc1MjcwNzc0LCA1MC42NDg5OTg5MDYzNTYxMl0sIFstMS4yNDk1NDQyNjg1MDcxNDMsIDUwLjY0OTAyNjk5NzcxMTA0XSwgWy0xLjI0OTY0NTgyNjQzMjcyLCA1MC42NDkwNDI5MzUwNTI0NF0sIFstMS4yNDk4MDUxMTMyMDIwNjIsIDUwLjY0OTA4MDgyMDY3NzQ0XSwgWy0xLjI1MDA2MDU2NDY1NzA0MywgNTAuNjQ4OTM4NjE4NTYwNzldLCBbLTEuMjUwMzg5OTA5NDgwOTQsIDUwLjY0ODc2OTgzMDA4MDczXSwgWy0xLjI1MDczODA5MTYzNTE5OCwgNTAuNjQ4NTgyMzcxODk0OF0sIFstMS4yNTEwMzg4MTIwMzgwMzEsIDUwLjY0ODQzODU3MDYwNDM0XSwgWy0xLjI1MTIwNzQ3OTkyMDgwMiwgNTAuNjQ4MzI2Mzc1NjAyNjNdLCBbLTEuMjUxMjgxOTQ1ODE2NTExLCA1MC42NDgyNzExMTM2Njc4M10sIFstMS4yNTE0MDM3NTM4ODExNjUsIDUwLjY0ODE2NDgyMDc1NzMyXSwgWy0xLjI1MTQ4MjkxOTMzMjg4LCA1MC42NDgwODUzMTQ5MDMyN10sIFstMS4yNTE1NjM3MDk4NTc2ODQsIDUwLjY0Nzk4NDI0MjU2NjgzXSwgWy0xLjI1MTYwMjE4MzQwNzkwNiwgNTAuNjQ3OTYyOTEyNzA2NzVdLCBbLTEuMjUxNjI3NzQ5MTY5MDgyLCA1MC42NDc5NjEyNzg3NjA5XSwgWy0xLjI1MTY2OTg5MjM5MjM4LCA1MC42NDc5NzMyMzY3NjQ0Ml0sIFstMS4yNTE3ODUyMDQwMDI0ODMsIDUwLjY0ODAxODkyODcxOTM5XSwgWy0xLjI1MTgzMzE0Njc2MjY5NiwgNTAuNjQ4MDI1NTI5NjcxM10sIFstMS4yNTE4OTgyMjg1MzQ0MjUsIDUwLjY0ODAyNTA0ODMwNDI3XSwgWy0xLjI1MTk3NjI5MTczODAyLCA1MC42NDgwMDc1Njg1MTc0XSwgWy0xLjI1MjEzNTc2MTE2MzgxNywgNTAuNjQ3OTQ1NjU5MTU3MjVdLCBbLTEuMjUyMTc5NzQ4NTEyNzA2LCA1MC42NDc5MzY5NTA5ODE2NV0sIFstMS4yNTIzMjgyNDc4MjIwOTQsIDUwLjY0NzkzNDMwNzM1MzIyXSwgWy0xLjI1MjQ0MDE3MzgyMDY3MSwgNTAuNjQ3OTIxNDQ5NzEwNDNdLCBbLTEuMjUyNzEzMDA4NzM1OTYzLCA1MC42NDc4NDQwODM4MzY5MV0sIFstMS4yNTI3NDAwMTM4ODQzMzgsIDUwLjY0NzgzMjU2OTQ3OTYxXSwgWy0xLjI1Mjc3MTQ2MTc5ODU5MywgNTAuNjQ3ODEyOTkyMjcwNzJdLCBbLTEuMjUyNzg4ODU3MTQ4MTY2LCA1MC42NDc3ODk3Mjg4MzgxM10sIFstMS4yNTI4MTUzODk0MDA3MDYsIDUwLjY0NzcxOTc3NDEwMDE2XSwgWy0xLjI1MjgzMjcxMzQzMDM0OSwgNTAuNjQ3NzAxMDA1MzgzMDhdLCBbLTEuMjUyOTQ0MzIxMDY1Nzg2LCA1MC42NDc2MTk5MDgzOTI2XSwgWy0xLjI1MzAwNjc4Nzc0NjY4NSwgNTAuNjQ3NjAwNDM5OTkxNzldLCBbLTEuMjUzMDMwODUxNjE4MjQzLCA1MC42NDc1OTc4OTcwNzg3NF0sIFstMS4yNTMxNDY2NjIyODA5MjcsIDUwLjY0NzYxMjEyNDYzMDNdLCBbLTEuMjUzMzg0MzA4MjQzOTMxLCA1MC42NDc2MTM2NDY4OTY4Ml0sIFstMS4yNTM1ODEwMTk2MDk3NzksIDUwLjY0NzYwMDUyMjAxMTg0XSwgWy0xLjI1MzY4MjkzNDQ5NDkyMywgNTAuNjQ3NjAxMTc0NTE4XSwgWy0xLjI1Mzg3Nzc3Njc2MzQ4NiwgNTAuNjQ3NjE3NzA1MzQ5NjNdLCBbLTEuMjU0MDA3NDgyMzcxNDI0LCA1MC42NDc2NDU1OTY0MTc5Nl0sIFstMS4yNTQwNjIyOTYyMzgxNDcsIDUwLjY0NzY2NzUyNDAzMjJdLCBbLTEuMjU0MTQ2MTc2NDA5NTgyLCA1MC42NDc3MzE4OTIyNzU3XSwgWy0xLjI1NDI0MzEyMjcxODU2NCwgNTAuNjQ3NzczODY4MTQ5NzZdLCBbLTEuMjU0NDE2Mzc2MzEwMjM4LCA1MC42NDc4MjA4MjcxODY1NF0sIFstMS4yNTQ2NTQ2NTIwNTU0NzcsIDUwLjY0Nzg2MzcwNjUzNDJdLCBbLTEuMjU0Nzk1NTU3NDk5ODYxLCA1MC42NDc4OTg3NzA3MTE5NV0sIFstMS4yNTQ4ODczNzY1ODU1MDEsIDUwLjY0NzkxMTA0NTA5MDgzXSwgWy0xLjI1NTE3MDI2NTIwMTc0NiwgNTAuNjQ3OTA1NjYwNTkzMDNdLCBbLTEuMjU1OTgzODY3MDIzMDg3LCA1MC42NDc5NzU2NzY1MzAyOV0sIFstMS4yNTYxMDkzNzgzOTk5NDksIDUwLjY0ODAwMzQ0ODU4MDI5XSwgWy0xLjI1NjE4Mzg0Mzc1NzU3NSwgNTAuNjQ4MDI5MDk2NzMzMl0sIFstMS4yNTYyNzY2MzcxNTkwMTEsIDUwLjY0ODA2ODM0NzMwMzNdLCBbLTEuMjU2NDAyNzkzMzM5NzkxLCA1MC42NDgxMzY1Nzk3NTUyMl0sIFstMS4yNTY1NTg0Nzg5NzY1MDcsIDUwLjY0ODQwMjg3ODEzNjkxXSwgWy0xLjI1NjYwNDE0NDI3NTcxOSwgNTAuNjQ4NDY1MjAyODA3NzFdLCBbLTEuMjU2NjU0MjgwMjM5Mzc4LCA1MC42NDg1MTc2NjY1NzUyXSwgWy0xLjI1Njg1MjE3NDY4NzAxNSwgNTAuNjQ4NzAzMzIwNDc2MzddLCBbLTEuMjU2OTA5Mzc4Njc3NzA5LCA1MC42NDg3NTEzMzQwMDk5Ml0sIFstMS4yNTcxODkyOTgyNzQzNTgsIDUwLjY0ODk0MjAwNTMyNjU2XSwgWy0xLjI1NzIzMjQzNTQ4MDM5MSwgNTAuNjQ4OTg3MjMxOTU5MTZdLCBbLTEuMjU3Mjg3NjE3NDYyMTE0LCA1MC42NDkwNzQ3ODk5ODIwM10sIFstMS4yNTczMjk1MjU1NTg4OTgsIDUwLjY0OTEwOTIyMDMyMDY2XSwgWy0xLjI1NzM3ODczMTE3NTA1NywgNTAuNjQ5MTMyMDA5NjY5NzRdLCBbLTEuMjU3NDIzODA2MzczODQ0LCA1MC42NDkxNDMwODUyMjY1NF0sIFstMS4yNTc0OTMwMzEwMTU5NTYsIDUwLjY0OTE0NjIyMzI2Mjk4XSwgWy0xLjI1Nzk1NDc2MzQ4MzAxLCA1MC42NDkxMDc4MDc2MDg5NF0sIFstMS4yNTgwNDYwMDM5ODI4NDYsIDUwLjY0OTA2MDczOTQ2NjE3XSwgWy0xLjI1ODA2NTE1MDM3NDA4OCwgNTAuNjQ5MDE1MDEwNTEyOTVdLCBbLTEuMjU4MzU2NzcwMTY0MTk5LCA1MC42NDg5OTYxODgzMDMxOF0sIFstMS4yNTg2NTk5NTkwMjQzMTUsIDUwLjY0ODk2ODQ0ODU4MDU5XSwgWy0xLjI1ODkyMTQ3ODIyNzI2NSwgNTAuNjQ5MDY5MDA1MjUxNDZdLCBbLTEuMjU5MDE1OTY4NjIzMDIsIDUwLjY0OTA4MjE5MjM4NDYzXSwgWy0xLjI1OTIzMzg5NzMyNjE5MSwgNTAuNjQ5MDc3Mjg0MTI4ODNdLCBbLTEuMjU5Mjc4MjM4MTM2MTI3LCA1MC42NDkxMzUxMDQxNDI1Nl0sIFstMS4yNTkzNDgyNTgyNjY0NjcsIDUwLjY0OTE4NDA5NjkzNjcxXSwgWy0xLjI1OTM3MDM3MjI2MzEyNCwgNTAuNjQ5MjE2NjAyNzA2NDZdLCBbLTEuMjU5Mzc0MjQzOTA4NTE0LCA1MC42NDkyMzczOTUwMjEwN10sIFstMS4yNTkzNzE5Njg1OTA5MDEsIDUwLjY0OTI5MzEyMDc1OTY5XSwgWy0xLjI1OTM3NzM2ODE1NTAxMywgNTAuNjQ5MzA1NzQxNTU4OTldLCBbLTEuMjU5MzkxNDExMTI1MjczLCA1MC42NDkzMTc1MTgyMzQxNl0sIFstMS4yNTk0MTk0MTkyNjkwNzIsIDUwLjY0OTMzMTE4MTY5NTldLCBbLTEuMjU5NDg3MDQ3MjE5MTg4LCA1MC42NDkzNDY4OTQ4OTg2OF0sIFstMS4yNTk1Nzc0OTkyOTE1NjIsIDUwLjY0OTM1NzM1ODgxNjI4XSwgWy0xLjI1OTY0OTU3OTU4NTYxNSwgNTAuNjQ5MzU2OTE3NTY2M10sIFstMS4yNTk3MDM0NjQ3ODU2MjIsIDUwLjY0OTM0OTE2ODQ0NjQxXSwgWy0xLjI1OTgzMjkyNDQ1MTU1NywgNTAuNjQ5MzA0MTM5Njc1ODZdLCBbLTEuMjU5ODcxMTk3NzAyMjMyLCA1MC42NDkyOTUzOTIzMTkyM10sIFstMS4yNTk5MDUxNTk5NjcyOTcsIDUwLjY0OTI5MzgwOTg2NDUzXSwgWy0xLjI1OTk4OTgyNzQ3MTE2NywgNTAuNjQ5MzA4NzMxOTE1MTldLCBbLTEuMjYwMDU0ODk2ODY0OTk0LCA1MC42NDkzMDkxNDQ5NDU4Nl0sIFstMS4yNjAyODEzNzc4MDYwMzgsIDUwLjY0OTI5NDM5OTYyMzQ1XSwgWy0xLjI2MDQ5MDY2Nzc1ODE3MywgNTAuNjQ5Mjk3NTI1NTE3NzRdLCBbLTEuMjYwNTQxNzY4MTc5NDY4LCA1MC42NDkyODg4NTkzMDk4OF0sIFstMS4yNjA2MTg2NTY2NzM2MjgsIDUwLjY0OTI1Njk4MTcyMjY1XSwgWy0xLjI2MDcyMjE5NzkxMzgzOCwgNTAuNjQ5MjM1OTcxNjI3NzNdLCBbLTEuMjYwNzU2MTE2MzkzMDcsIDUwLjY0OTIzNzE3NTY1NzAyXSwgWy0xLjI2MDc5NDIzODEwMzUyNiwgNTAuNjQ5MjQ1NTA4NzA3OThdLCBbLTEuMjYwODQ0OTAxMjk2MTk3LCA1MC42NDkyNjQ3MDk2OTAxN10sIFstMS4yNjA5NDgzNzA1NTE4MDQsIDUwLjY0OTI0ODI4NDAxODIyXSwgWy0xLjI2MTUwMjUwOTk4ODkxMywgNTAuNjQ5NjMxMjc4NTExMTldLCBbLTEuMjYxNDE1NjY3MTIxMzQsIDUwLjY0OTY2NTc5MDcxOTE4XSwgWy0xLjI2MjAzODMwOTQ5NDE4OSwgNTAuNjUwMDk4NjYzNTM2MzhdLCBbLTEuMjYyMDYzNzg3NjE5MDYsIDUwLjY1MDA5NTIyODY3NDc1XSwgWy0xLjI2MjYwNTU5NjkwNTY0MywgNTAuNjUwMDA3ODU0NTExNTRdLCBbLTEuMjYzMDc0OTcwODkxNDUyLCA1MC42NTAwMTgwMTQ3OTc1M10sIFstMS4yNjI3NDI0MzkxNjA0NTYsIDUwLjY1MDAyNzU5OTc0Mjk4XSwgWy0xLjI2MjUxMTYxMjU2NjUyNiwgNTAuNjUwMDQ0MTIwNDMxNjldLCBbLTEuMjYyMzk1MTIxNjIxOTE0LCA1MC42NTAwODAyNDM4NzU3NV0sIFstMS4yNjIyOTA5MTUxODI5NTQsIDUwLjY1MDEzNjIyMzcxNDA1XSwgWy0xLjI2MjIzNjQzODM2NjUwOSwgNTAuNjUwMTgxNzI5NzYyMDddLCBbLTEuMjYyMjE4MjA0ODg4Nzc4LCA1MC42NTAyNjYyMTM1NzU2Ml0sIFstMS4yNjIyMTE3MjI2MDk2OTksIDUwLjY1MDQwNDYyMzk1ODQ2XSwgWy0xLjI2MjE5NjkxMjk4MjkwMSwgNTAuNjUwNTM4NTc2MzYzODVdLCBbLTEuMjYyMTc3OTg3MjQzMTU0LCA1MC42NTA4NDYwMTY0NzgwMV0sIFstMS4yNjIxMjAyOTU5NDE0NDIsIDUwLjY1MTI3NTQ3OTk3MjQ4XSwgWy0xLjI2MjIwMzc3OTQ1MzA1MSwgNTAuNjUxMjc2OTA3MzgyMTRdLCBbLTEuMjYyNzAxNTc0MTg3NjA5LCA1MC42NTEyODI3NTM4MzMyXSwgWy0xLjI2MjkzMjUwNTIyNTYxOCwgNTAuNjUxMjU5OTQwMTc1MDddLCBbLTEuMjYzMDI2MDUxNjg0ODE2LCA1MC42NTEyNDQzNDg5NTQxNF0sIFstMS4yNjMxMzQwMzYxODI0MjcsIDUwLjY1MTIxNTM2MzM5NDI1XSwgWy0xLjI2MzQ1MTI5ODI0MDMxNiwgNTAuNjUxMTAxMzAyODg2NjRdLCBbLTEuMjYzODEzMzY5MDEwMTIzLCA1MC42NTEwMTU0ODQ0NzU2MV0sIFstMS4yNjQwNDg5NTk3MzAyMzEsIDUwLjY1MDk2MzAyOTg4MDEzXSwgWy0xLjI2NDQwNDkwNzIyMDA3NSwgNTAuNjUwOTAzMjQyOTkwODZdLCBbLTEuMjY0OTE1NTk2MjAyNzcsIDUwLjY1MDgwNzQ4MDUwMTg5XSwgWy0xLjI2NTE0Mjg3MjQ3MzY1MSwgNTAuNjUwNzQ5NTc3MDYxMDddLCBbLTEuMjY1NTQ5ODMzOTYxMjMzLCA1MC42NTA2ODY1MTIwOTYxM10sIFstMS4yNjU2MzIwMjQ3MTc5NzEsIDUwLjY1MDY3MzU0NDM0ODU4XSwgWy0xLjI2NTYyOTQ3MTE5NDU1NiwgNTAuNjUyMDE5NzQzMDA2MzJdLCBbLTEuMjY1NzI4MTUzOTM4NzIxLCA1MC42NTIyMjA5MzkyMzg0MV0sIFstMS4yNjYwNjI2NDY3OTgxODksIDUwLjY1MjgyMDE4NDM0MTUxXSwgWy0xLjI2NjI1MzE4ODA1MDc0MiwgNTAuNjUzMTE0NTU4OTEzOThdLCBbLTEuMjY2MzA3MjMwMTEyNzIyLCA1MC42NTMxODY4MjE3OTgzM10sIFstMS4yNjYzMjY1OTM4NDk5OTcsIDUwLjY1MzIxNjYxMTc5OTk3XSwgWy0xLjI2NjcxMjA0NzEzMTc3OSwgNTAuNjUzNTQwMDgyMTMwNzZdLCBbLTEuMjY2ODQ2NTM2NzQ5Nzg2LCA1MC42NTM2MjE4NDEwODRdLCBbLTEuMjY2OTQyNDU2MTc1NjEyLCA1MC42NTM3MzEzMTczMjg3Ml0sIFstMS4yNjcxNDI3Mzc5OTU4MDMsIDUwLjY1Mzk0NzQ0NTczNzIzXSwgWy0xLjI2NzQzMjg0MDQxMzkzLCA1MC42NTQyMTU0NzMwOTIxNl0sIFstMS4yNjc3MDg4OTk1MzQ4NzksIDUwLjY1NDQ3MTcyNDA1MDU1XSwgWy0xLjI2NjcyNDY3MDMwNDQxMywgNTAuNjU1MDg5NjQ3MTkwMjhdLCBbLTEuMjY2NzYzMzExMjI2OTcsIDUwLjY1NTE0NzQyODQxNTA3XSwgWy0xLjI2Njk3NzUxODQyODgzMywgNTAuNjU1NDczNDE2Njk2MDNdLCBbLTEuMjY4MDI3NTAxMDMxNzM4LCA1MC42NTUxODA1NDU1NDY2N10sIFstMS4yNjgyNTIxMjk4MzA0MjYsIDUwLjY1NTM4NDMyODI2MDA0XSwgWy0xLjI2OTU5MDkyMzExMDc2NiwgNTAuNjU0OTg0NDcyMzIwMzJdLCBbLTEuMjY5Njg0NjU1OTgzNjAyLCA1MC42NTQ5NTcxODk0Nzc3NF0sIFstMS4yNjk2MDg2OTM0MzY4MTIsIDUwLjY1NDgzODg1MDIyMTg5XSwgWy0xLjI2OTQ3OTI1Mzk4NDk4NCwgNTAuNjU0NjExMzkyNjk3OF0sIFstMS4yNjkzODc4MjE4MTk1NzgsIDUwLjY1NDQ5MDM0OTE1MzY1XSwgWy0xLjI2OTkwODEzMzU0MjU5NiwgNTAuNjU0MjM0NTk3MDAxMTNdLCBbLTEuMjcyMjU2NzY2NzIyNzA2LCA1MC42NTMzODUwNDAwNDI4M10sIFstMS4yNzIyNTgxMzg0MTk3OSwgNTAuNjUzMzg2ODQ2NjczOTVdLCBbLTEuMjcyMzIwNzc1NjY2NDY4LCA1MC42NTMzNjM4NjI3NzAzOV0sIFstMS4yNzI3NjYzODg1ODUzOTMsIDUwLjY1MzkxMDczODg0NjY3XSwgWy0xLjI3NDA5MzY1MzAwMzY3MiwgNTAuNjU1MzUxNjIxMzg0M10sIFstMS4yNzQ4MzIzNDE5ODY0MjIsIDUwLjY1NjQ0MTYyMTk2OTIxXSwgWy0xLjI3NTQ3OTg5NTc4ODY4OCwgNTAuNjU3Mzg0NTA4ODEzMDFdLCBbLTEuMjc1NTM2MjQxMjI1NTI3LCA1MC42NTczOTkyNDM0OTU5Ml0sIFstMS4yNzU2MDM5ODI5Njc2NzksIDUwLjY1NzQwODY1NDc2MTU0XSwgWy0xLjI3NTcwNDQ1MDg4NzI0LCA1MC42NTc0MTM3NzQxMzkzOV0sIFstMS4yNzY5MDgwMTE4NTEwNTMsIDUwLjY1Nzg5NzkxMjY4NTc5XSwgWy0xLjI3NzAwOTE1Njg5NjA4MiwgNTAuNjU3OTQyNTkyNjA0Ml0sIFstMS4yNzcxMDgzOTIxMzE1NjgsIDUwLjY1ODAyMDUyNDgyNjU2XSwgWy0xLjI3NzE3NDcwMDU4OTM2MSwgNTAuNjU4MTIzNDI1NzU2NF0sIFstMS4yNzc1NDc3NTQwMDkyMzcsIDUwLjY1ODg5MDE4NjA1NzYyXSwgWy0xLjI3NzU1NTk5MjcwODc5NywgNTAuNjU4OTA4MjE3Nzc0MjldLCBbLTEuMjc4NTE4OTQzMDkwMDU2LCA1MC42NTg0Nzk4NTc5MTk1NV0sIFstMS4yNzkwNTg5MDYxMjc4MTIsIDUwLjY1ODIyNzc4MjgzNTY2XSwgWy0xLjI3OTIwMDQwMjE0NzE1NCwgNTAuNjU4MTM1OTY3NDAxNl0sIFstMS4yNzk2MjI4NjE4MjYyNDYsIDUwLjY1NzgwMjI1MDE3NjM2XSwgWy0xLjI3OTYzMTQ4NjAzMTIzNCwgNTAuNjU3Nzk1MTExMTk4M10sIFstMS4yNzk2NjI0NTgzNTE0MjUsIDUwLjY1Nzg5Nzg4MjI2NjI5XSwgWy0xLjI3OTY5OTU4MDQwNTgyNCwgNTAuNjU3OTY0NjQwMDg1MThdLCBbLTEuMjc5ODEzMTcxMDIyMzk5LCA1MC42NTgxMjYyNjg3NzcyMV0sIFstMS4yNzk4Mzc4MTI1NzQyMjYsIDUwLjY1ODE3Nzc1NTc5MDZdLCBbLTEuMjc5ODY4MTEzNjA1NjIsIDUwLjY1ODMyNDQ4NTM3MzA0XSwgWy0xLjI3OTg4NzA2MjAzMjEwNiwgNTAuNjU4MzgyMTQwNTM3MzldLCBbLTEuMjc5OTczMzk0MTU4ODM1LCA1MC42NTg1NjQzNjgzNTVdLCBbLTEuMjgwMDA2NTUxODY3MTk5LCA1MC42NTg2MTU4MTgwMTk0OF0sIFstMS4yODAxMDEyMjM2OTczODQsIDUwLjY1ODcxNzk5MzM4NDE4XSwgWy0xLjI4MDEzMTk5NDUwOTA4MSwgNTAuNjU4NzQyNDU3Mjc4NjRdLCBbLTEuMjgwMjQ2ODAyNzUyMzIxLCA1MC42NTg4MTY5NzY3MzAwOV0sIFstMS4yODEyNjA2NjU3OTU4ODQsIDUwLjY1OTMxNTk5MTQ2OTQxXSwgWy0xLjI4MTI4MzU5NTgxMDgxOSwgNTAuNjU5Mzg4MDU1NDY2M10sIFstMS4yODE4MzA1MDYzMjE2MDYsIDUwLjY1OTc5NzA2OTM0NzEyXSwgWy0xLjI4MTk0MzQ1MzEwNzQzMywgNTAuNjU5NzE4NTYwMjM3MjhdLCBbLTEuMjgyMjQyNjUxMDcyNjU4LCA1MC42NTk0ODkzNTExNDE4MV0sIFstMS4yODIzMzY5Njc5OTUxOSwgNTAuNjU5NDMxNDk0NjE1NzRdLCBbLTEuMjgyNDAyNTE4NjY5MDU3LCA1MC42NTk0MDEyNDEwNzc1MV0sIFstMS4yODI0OTM1MzU5MDExODgsIDUwLjY1OTM2ODUzNzAzNzMzXSwgWy0xLjI4MjY0NzAyODk0MDU2OCwgNTAuNjU5MzIzNjMwODkxNDhdLCBbLTEuMjgyNjcxMTM4MzM3ODE0LCA1MC42NTkzMTgzODUwMzQ5OV0sIFstMS4yODQxNjgwMjU3NDUyNzksIDUwLjY1OTIyMjM5ODUyXSwgWy0xLjI4NDIxNzI2MDM4MjMxMSwgNTAuNjU5NDIxMzg3MDcyMzJdLCBbLTEuMjg0MjY1NDg2Mjk3Mzc5LCA1MC42NTk0MTgwODcwMTE5NV0sIFstMS4yODQ3MDczMzM5NDQ1ODcsIDUwLjY1OTM4ODQzMzUxNDgyXSwgWy0xLjI4NDgyMjI5MDM0MDUwOSwgNTAuNjU5NzM4MDUzMzg0MDVdLCBbLTEuMjg1MTk0Nzc1NzE1MjUsIDUwLjY1OTcxMzM2NjcyNTI1XSwgWy0xLjI4NTI3MjY4MjUzMjE2NywgNTAuNjU5NzA2NjUyMDg4MjFdLCBbLTEuMjg1MjA1NDk2MzYxODY0LCA1MC42NTk4NDQ3ODExNDIzMV0sIFstMS4yODUxNTM4MTA0ODkyNTMsIDUwLjY1OTk4MzgxNDMyNDIyXSwgWy0xLjI4NTEwMjMwNzc5NzE2OCwgNTAuNjYwMTE4NDQzMzQzMzddLCBbLTEuMjg1MDE2MzA1MDYzMjEyLCA1MC42NjAzNzQxNDAyODAwOF0sIFstMS4yODQ5NTY0NDQ3MDg0NywgNTAuNjYwNTkwNTI5OTQ2MTRdLCBbLTEuMjg1MDQ1NDA3ODg2NDI0LCA1MC42NjA2MDA5NjQ4ODg0OF0sIFstMS4yODUwOTkxMjQ1NTAwNCwgNTAuNjYwNjA0ODkwNDEzNTNdLCBbLTEuMjg1NDY5Mzg1MTU5MzcsIDUwLjY2MDYzNTAzMDIxNjI4XSwgWy0xLjI4NTg5ODcxNjUwNjU0NiwgNTAuNjYwNjg1MzA5MzgwOV0sIFstMS4yODYzMDEwNzYxNjA3MzksIDUwLjY2MDczNzMwOTgyNTMyXSwgWy0xLjI4NjczMTc4OTU2OTExNiwgNTAuNjYwNzk2NTg0NzAyMjZdLCBbLTEuMjg3MTE5OTk4MDk2MzAyLCA1MC42NjA4NTExMDI5MzM5Nl0sIFstMS4yODc1NTMxOTI0MDY1MTMsIDUwLjY2MDkyMzg3NTQyNjg2XSwgWy0xLjI4NzkzODIwMzgxNjc1MiwgNTAuNjYxMDEyNTM0NjI1MzhdLCBbLTEuMjg4MzUzOTg5NTc5NzU1LCA1MC42NjExMTA0NjA2MjI3NV0sIFstMS4yODg3NDA1Mzk0OTEwMzMsIDUwLjY2MTE5MDEzNjIyODI1XSwgWy0xLjI4OTE1NDAxODg0MTMzMiwgNTAuNjYxMjU1NTkwMjIxODRdLCBbLTEuMjg5NDc5MzQzNjU2Mzg0LCA1MC42NjEzNTc0NTU3NzU5OV0sIFstMS4yODk4ODg4NTY3ODE2OTcsIDUwLjY2MTQwNzU5OTQzNDVdLCBbLTEuMjkwMjk4MzcwNzkzMjk2LCA1MC42NjE0NTc3NDE2NTcxOV0sIFstMS4yOTA3MzM1Mzg3NTY3NjQsIDUwLjY2MTUwMDg0NjI0NzY2XSwgWy0xLjI5MDk0MjUzMzY4Nzk3OSwgNTAuNjYxNTI3MjkwMzc1MDhdLCBbLTEuMjkxMTM0NDgwMzQ2NDU3LCA1MC42NjE1NjI2MjA3OTc0OF0sIFstMS4yOTEzNzY5NDU1NzA4NDIsIDUwLjY2MTYyMDczMzc2ODU4XSwgWy0xLjI5MTU0MDE0MTY2ODM4LCA1MC42NjE2ODI5NDk2NDQyXSwgWy0xLjI5MTg2MTU0NjMxNTMyMywgNTAuNjYxODUyMTIyMjE2MzFdLCBbLTEuMjkxOTc4MjIyNzkzOTk4LCA1MC42NjE5MDQ5NzQ2ODk5OV0sIFstMS4yOTIwNDk0ODQ0OTk1OTksIDUwLjY2MTk2MDI0ODM4NjRdLCBbLTEuMjkyMDgzNzA0ODk0MzYsIDUwLjY2MjAzNTE2NTc0NjE4XSwgWy0xLjI5MjA2ODgwNzMyMDA3MiwgNTAuNjYyMDg3MjE5MTU1MTVdLCBbLTEuMjkxOTk0NjEzMjI4NTMxLCA1MC42NjIyMjcwMTc2NDM0OF0sIFstMS4yOTE5NzIzOTc0NzAxOTEsIDUwLjY2MjI5MjUxMjA4MDE5XSwgWy0xLjI5MTkyNTc1MTAwMzU1OCwgNTAuNjYyMzc2ODI3NzIwMjVdLCBbLTEuMjkxODYzNzYyNjEyODQ3LCA1MC42NjI0NTczNjQxMjc2N10sIFstMS4yOTE3ODcwODM3MDk3NjksIDUwLjY2MjU2ODM3ODM1ODI5XSwgWy0xLjI5MTY5ODk2Njc4OTg0OCwgNTAuNjYyNjg3NTA0MjQyMzJdLCBbLTEuMjkxNzg3MTkyMDU5NTg0LCA1MC42NjI3NDczNzYzMDQ3N10sIFstMS4yOTIwNjI4Mzk4MTg1OTgsIDUwLjY2Mjk1NzcxNTY5OTMzXSwgWy0xLjI5MjMyMjc5MzE2MTU2MiwgNTAuNjYzMTcyMzY0NDI2MjNdLCBbLTEuMjkyNTg3MDE0MzM5NDE2LCA1MC42NjMzODI2MzMxOTkyNF0sIFstMS4yOTI4NTExNDMzOTcwMTMsIDUwLjY2MzU5OTE5NDAyNTU3XSwgWy0xLjI5MzEyMjYyMTE1MTI0NCwgNTAuNjYzODAwNDI1MzQ5OTldLCBbLTEuMjkzMzIxOTYxNTQ2ODU2LCA1MC42NjM5OTY4MTM1NjI4MV1dXV0sICJ0eXBlIjogIk11bHRpUG9seWdvbiJ9LCAicHJvcGVydGllcyI6IHsiaGlnaGxpZ2h0Ijoge30sICJzdHlsZSI6IHt9fSwgInR5cGUiOiAiRmVhdHVyZSJ9XSwgInR5cGUiOiAiRmVhdHVyZUNvbGxlY3Rpb24ifQogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzhmNDZhOGFjMjc4YTRmNjViYTEyNzM4NTc2OTZlM2YzKTsKICAgICAgICAgICAgICAgIGdlb19qc29uX2FmMjRhMWJjNTU3MjRlMDY4YzU1N2JlZWZkN2M4N2YyLnNldFN0eWxlKGZ1bmN0aW9uKGZlYXR1cmUpIHtyZXR1cm4gZmVhdHVyZS5wcm9wZXJ0aWVzLnN0eWxlO30pOwoKICAgICAgICAgICAgCjwvc2NyaXB0Pg==\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
],
"text/plain": [
"<folium.folium.Map at 0x10e91bcf8>"
]
},
"execution_count": 54,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Get the boundaryline\n",
"geojson = get_geojson('parish_region', 'Arreton', geojsoncol='wgs84',\n",
" db_url = \"http://localhost:8003/adminboundaries.json\")\n",
"\n",
"#Add it to the map\n",
"folium.GeoJson(geojson, name='geojson').add_to(m)\n",
" \n",
"m"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Enhancing Point Location Data Using OpenStreetMap\n",
"\n",
"Locations generated as postcode centroids are not very accurate. To improve the location data for particular points, we could use the OSM geolocation API to get more exact location data from the geocoded address.\n",
"\n",
"The `osmnx` package provides a convenient utility function for this:"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>amenity</th>\n",
" <th>element_type</th>\n",
" <th>geometry</th>\n",
" <th>name</th>\n",
" <th>osmid</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>11248231</th>\n",
" <td>pub</td>\n",
" <td>node</td>\n",
" <td>POINT (-1.2463103 50.6779437)</td>\n",
" <td>Dairymans Daughter</td>\n",
" <td>11248231</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" amenity element_type geometry \\\n",
"11248231 pub node POINT (-1.2463103 50.6779437) \n",
"\n",
" name osmid \n",
"11248231 Dairymans Daughter 11248231 "
]
},
"execution_count": 55,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import osmnx\n",
"osmnx.pois_from_address(\"Dairyman's, Arreton, Isle of Wight\",0.1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As well as geocoding addresses, the OpenStreetMap API also allows us to search for poitns of interest (POIs) *within* a particular boundary directly. In addition, we can limit the search using particular [amenity tags](https://taginfo.openstreetmap.org/keys/amenity#values). Once again, there is an `osmnx` utulity function to help us with this.\n",
"\n",
"First, let's get a `shapely` representation of the area we want to search within:"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"100.0\" height=\"100.0\" viewBox=\"-1.2965489650765738 50.64437089354902 0.08712909530237845 0.05434127265404243\" preserveAspectRatio=\"xMinYMin meet\"><g transform=\"matrix(1,0,0,-1,0,101.34308305975209)\"><g><path fill-rule=\"evenodd\" fill=\"#66cc99\" stroke=\"#555555\" stroke-width=\"0.001742581906047569\" opacity=\"0.6\" d=\"M -1.293321961546856,50.66399681356281 L -1.293000958087656,50.66407937646803 L -1.29272314287441,50.66411365277096 L -1.292504985382834,50.66412941077018 L -1.292252979487935,50.66423945114199 L -1.291844705895138,50.66457060279272 L -1.291864754520584,50.66474243963152 L -1.291786494949127,50.66486522154151 L -1.291899662823143,50.66496570142165 L -1.291974150495252,50.66509381628721 L -1.291951263282208,50.66511075890132 L -1.291891730331727,50.66511309444674 L -1.29181668268883,50.66511533572654 L -1.291737367981604,50.66512204619562 L -1.291664775578236,50.66515495927375 L -1.29162745387856,50.66518529960519 L -1.291608815014342,50.66520676312192 L -1.291613630086565,50.66525893621568 L -1.291554017783458,50.66536735684604 L -1.29156931620011,50.66538183430883 L -1.291591798034878,50.66539186025725 L -1.291625554607434,50.66540465179799 L -1.291652474292372,50.66540661341223 L -1.291717309521805,50.66542408889569 L -1.291770638891898,50.66545417079891 L -1.29181923449574,50.6655120040028 L -1.291802989726173,50.66556045304039 L -1.291760203633899,50.66558176990493 L -1.291726041324061,50.66559594688838 L -1.29169334642858,50.66560563761824 L -1.29162151045642,50.66567352759415 L -1.291608524833799,50.66569142932992 L -1.291606854566171,50.66570939981429 L -1.291636384809802,50.6657239637357 L -1.291739298512969,50.66574616570356 L -1.291842138377662,50.66578104347743 L -1.291855266718949,50.66584675252187 L -1.291805107678863,50.66588510622175 L -1.291774069291408,50.66587772543562 L -1.291422987417773,50.6658027707575 L -1.291373369114016,50.665805166294 L -1.291314986523254,50.6658317823917 L -1.291276426549082,50.66585132670278 L -1.29127596660198,50.66588189098185 L -1.291268385677338,50.66592050325933 L -1.291267912195829,50.66595196648735 L -1.291339463201729,50.6659883626645 L -1.291482628103991,50.66606475139413 L -1.291464178162922,50.66607362959134 L -1.2914087965186,50.66608686840159 L -1.291337743951755,50.66610261912922 L -1.291296221730526,50.66613293382047 L -1.291269093625636,50.66615254761581 L -1.291248599490816,50.66619647558409 L -1.291380165326725,50.66629167358915 L -1.29142370996456,50.66650689667032 L -1.291569913224185,50.66666062045557 L -1.291613254148623,50.6667886361612 L -1.291603818767028,50.66684971297356 L -1.291565990280333,50.66692140564669 L -1.291556879361842,50.66696090767105 L -1.291579226718617,50.66697992311495 L -1.291659952944582,50.66698041357619 L -1.291739013924477,50.66699078321151 L -1.29181509944939,50.6670128221289 L -1.291807400766673,50.6670515236214 L -1.291761556691027,50.6670899035063 L -1.291722977322429,50.66711843815888 L -1.291668725331469,50.66714957467987 L -1.291641263789685,50.66718357103602 L -1.291652038656406,50.66721959775318 L -1.291722964935627,50.66730543661316 L -1.291722247021756,50.66735317081801 L -1.291687785953869,50.66738712466376 L -1.291630842023425,50.66741105256186 L -1.291595013046765,50.66743510872435 L -1.291580748735811,50.66744491140129 L -1.291568959647851,50.66747630586869 L -1.291559902712664,50.66751221209237 L -1.291590536461503,50.66754656141333 L -1.291612694796078,50.66757816213865 L -1.291629321188083,50.66760523409364 L -1.291821365706983,50.66762797745401 L -1.291874928772003,50.66764268727702 L -1.291904310270307,50.66766722946737 L -1.291907820612175,50.66771310138303 L -1.291895923537624,50.66775168747636 L -1.291875334653906,50.66780190818676 L -1.291812987456655,50.66790581714143 L -1.291858270774518,50.66799788327258 L -1.291818947195074,50.66807586015319 L -1.29181862274957,50.66809743493268 L -1.291836654356437,50.66811642410891 L -1.291881580198478,50.66813917274752 L -1.291985021410003,50.66813440674512 L -1.291995931902592,50.66816144393493 L -1.291913357679384,50.66819061051843 L -1.291862183271154,50.66821097744142 L -1.291789646610964,50.66823211361875 L -1.291734385545343,50.66823717213187 L -1.291689216302164,50.66823060452061 L -1.291649741379738,50.66821777826795 L -1.291623126061036,50.66820323206901 L -1.291558882086938,50.66814620276635 L -1.291525137098514,50.66813251225527 L -1.291474305783922,50.66812231403029 L -1.291424842274021,50.66812201343945 L -1.291382229521999,50.66813164380793 L -1.291343824924254,50.66814849198787 L -1.291315124984856,50.668171692361 L -1.291299271079421,50.66819407177864 L -1.29129741629297,50.66821653628604 L -1.291313961555286,50.66824900197738 L -1.291361496362602,50.66828444301445 L -1.291434540492675,50.66832264624891 L -1.291539862349411,50.66837902619312 L -1.291564604497429,50.66842502712163 L -1.291598309137452,50.66844141446865 L -1.291606467275014,50.66855833809092 L -1.29155838180455,50.66865253410777 L -1.291607650100329,50.66875891913253 L -1.291584138885376,50.66881721330968 L -1.291514355393252,50.66884915441714 L -1.291450428533092,50.66886404948179 L -1.291375144924321,50.66888157258335 L -1.291305767058417,50.66888654509679 L -1.291281829573833,50.6688801063789 L -1.291265027055726,50.66886472071514 L -1.291269519397351,50.66885306061704 L -1.291311076206531,50.66881285681196 L -1.291340263551292,50.66875729428196 L -1.291316772566818,50.66872119025605 L -1.29127582976292,50.66871285011235 L -1.291224808455213,50.66871523706236 L -1.291220595140251,50.66871611048105 L -1.29120204097589,50.66872408897016 L -1.291187803252125,50.66873209369708 L -1.291159206006794,50.66875619368585 L -1.291127705743111,50.66877937698679 L -1.290881574837317,50.66896227160425 L -1.291062571488239,50.66906046762315 L -1.290830686151474,50.6691417683242 L -1.290705386055589,50.66928853715304 L -1.290517291369433,50.66928199856742 L -1.290345774054458,50.66929803635467 L -1.290269273806058,50.66931105618213 L -1.290195375444731,50.6693294859858 L -1.290041748357828,50.66938159348065 L -1.289771467003117,50.66947884083521 L -1.289720038015754,50.6695081955782 L -1.289715348666757,50.66954062203475 L -1.28972308397565,50.66958472168106 L -1.289722609399628,50.66961618487864 L -1.289750375451257,50.66965501235704 L -1.289763962887718,50.6696901573371 L -1.289757780036743,50.66972877801126 L -1.289730302036582,50.66976367283876 L -1.289449668823046,50.66998231548219 L -1.289103228596672,50.67024730584949 L -1.288910443437854,50.67036570139319 L -1.288847614999825,50.67040038041332 L -1.288780695155077,50.67042784219471 L -1.28870967034836,50.67044898567865 L -1.288590393581333,50.67047441978039 L -1.288391223225711,50.67054422783164 L -1.288339778626782,50.67057448089998 L -1.288288211676982,50.67061282447777 L -1.288185167012175,50.67069131017143 L -1.288073508908614,50.67077612630135 L -1.287838100876278,50.67108943943425 L -1.28764537630933,50.67129593828273 L -1.288603112679281,50.67150146041947 L -1.288563876833634,50.67166574366757 L -1.288529464236335,50.67178879081537 L -1.288495606332355,50.67225347302815 L -1.288587460316077,50.67225942768684 L -1.288664993463038,50.67237147043518 L -1.288695383772836,50.67242200155433 L -1.288712133684031,50.67253358354236 L -1.288665105727363,50.6726420793603 L -1.288623229513925,50.67270304786674 L -1.288571334456291,50.67276296629426 L -1.28862410098938,50.67283071553742 L -1.288489370181811,50.67285147019423 L -1.287863365728265,50.67297540075548 L -1.287809376362097,50.6729885564583 L -1.287783370927001,50.67302615690054 L -1.287513303147184,50.67347770828119 L -1.286855917136764,50.67464818291114 L -1.28721770194449,50.67515304297116 L -1.287221560694774,50.67517563222146 L -1.287215503294146,50.67519807095103 L -1.287199699485049,50.67521685397773 L -1.28717681921384,50.67523289665037 L -1.287149703553384,50.67524351924306 L -1.286750993285394,50.67531210440011 L -1.286353371984361,50.67530877243148 L -1.285963249791983,50.67528031217883 L -1.285598131991927,50.67518817266343 L -1.285117353637035,50.67515915409707 L -1.285199505122389,50.67562005120571 L -1.285344580506999,50.6756640939313 L -1.285469028635822,50.67567564498126 L -1.285585956335375,50.6757060294576 L -1.285678692417131,50.67575424622214 L -1.285827635991324,50.67591257879144 L -1.285867956804759,50.67596227241177 L -1.285900169225027,50.67598494545155 L -1.28593671845409,50.6759986547382 L -1.286154101612148,50.67603774505708 L -1.286204667689403,50.67606592455528 L -1.286377858619949,50.67631071173962 L -1.286616652079315,50.67643093484254 L -1.287081998345456,50.6768249489715 L -1.287225786218883,50.67695438932105 L -1.287453917585021,50.67721659225353 L -1.28745088463768,50.67732445732137 L -1.287402610620191,50.67742224648537 L -1.287387770869697,50.67746980438317 L -1.287381448904427,50.67751741433571 L -1.287383568891186,50.67756237879093 L -1.287396843805402,50.67761819977793 L -1.287418718237883,50.67766867913674 L -1.287450645469676,50.67771031952668 L -1.287489773416133,50.67774651982562 L -1.287534583840283,50.67777736065262 L -1.287583662936592,50.6778037323932 L -1.287640058064071,50.67782475462929 L -1.287696431772872,50.67783948349765 L -1.287809424094329,50.67785276010965 L -1.2878915340093,50.67784786741499 L -1.28792695132382,50.67785167982739 L -1.287987430579198,50.67787272683578 L -1.288005662599571,50.67788632361319 L -1.288022214597011,50.67791069848824 L -1.288030270232797,50.67794131469212 L -1.288009249823958,50.67801949184409 L -1.288007292177887,50.67805634011545 L -1.288014219542757,50.67806896883285 L -1.288029588933749,50.67807895200697 L -1.288406291278136,50.6781630632346 L -1.288557862311642,50.67824130469401 L -1.288641939048831,50.67829935555745 L -1.288746735095443,50.67839178577944 L -1.288844430154266,50.67857578373036 L -1.288928956186305,50.67869685910703 L -1.289364565500089,50.67927777061262 L -1.289383782982792,50.67950444319444 L -1.289561537505325,50.67973486878513 L -1.289612713920581,50.68000138322322 L -1.289711897307714,50.68017999527361 L -1.28955812705679,50.68033198340907 L -1.289326932225599,50.68045643869926 L -1.289303914383893,50.68048147123493 L -1.289306226328394,50.68051385038624 L -1.289323017394618,50.68053022515751 L -1.289348252222593,50.68054386439594 L -1.289474890641517,50.68059677983394 L -1.289617266213201,50.68063540653756 L -1.289790879708932,50.68066882915544 L -1.290083324925489,50.68070027795772 L -1.290257187152707,50.68081011889062 L -1.29045238144016,50.68091388606608 L -1.290475769348296,50.68095718178808 L -1.290481053598151,50.68098598288039 L -1.290463244311773,50.6810371191853 L -1.290421545637013,50.68107822079341 L -1.29015600586583,50.681235822699 L -1.290064600479212,50.68119121379162 L -1.289999730648825,50.68117463629624 L -1.289964359551622,50.68117531994924 L -1.289933107983786,50.68118142285327 L -1.289908906787036,50.68119206383022 L -1.28988171511452,50.68121527300097 L -1.28985854800585,50.68125019405655 L -1.289856461393354,50.68128794058002 L -1.289885376972663,50.68134385649271 L -1.289814773443452,50.68142883428817 L -1.289808757132931,50.6814485762902 L -1.289809776308862,50.68147384522043 L -1.28982217843895,50.68150268969213 L -1.28996178711222,50.68163210106666 L -1.29003521230333,50.68173144136118 L -1.290066104339017,50.68193489995177 L -1.290096814066714,50.68196475488118 L -1.290146124105159,50.6819839346848 L -1.290174309718344,50.68198770238105 L -1.290212612318955,50.68198613747823 L -1.290276543878498,50.68197214214732 L -1.290358647194442,50.68196814669323 L -1.290407023073032,50.68194866244618 L -1.290442552094673,50.6819452825312 L -1.290467950616856,50.68194813416763 L -1.290481813062347,50.68196530007216 L -1.290433916003915,50.6820459212479 L -1.290381916594294,50.6821122228744 L -1.290347484306839,50.6821434793497 L -1.290154680328656,50.68226007862996 L -1.290183858423178,50.68239151450286 L -1.290152937962312,50.68256133268384 L -1.290026667651152,50.682862727618 L -1.289856905840487,50.68295249581925 L -1.289749695137019,50.68301927003104 L -1.289882011912558,50.68316041432456 L -1.289888221696013,50.68322068708508 L -1.289912400266841,50.68330444402199 L -1.289899468790898,50.68350403961194 L -1.290139030107941,50.68366921138316 L -1.290236237190774,50.68398725020701 L -1.290365044659499,50.68426853115743 L -1.290371421773591,50.68431001519515 L -1.29036364722635,50.68436121252536 L -1.290344558093923,50.68440424973758 L -1.290301306796201,50.68445523115323 L -1.29011226674567,50.68478591199742 L -1.29010750959672,50.68482274321617 L -1.29011688678192,50.68485876145263 L -1.290141812301222,50.68489307628237 L -1.290204811018637,50.68494119819727 L -1.29021862000965,50.68496195991237 L -1.29023846322237,50.68505468065228 L -1.290236348335289,50.68519491625828 L -1.290232052180882,50.68520118330972 L -1.287920064577462,50.68513404523832 L -1.287481835499839,50.68762239684727 L -1.287342869355983,50.68876007715442 L -1.287334322276454,50.68876182297633 L -1.286840761761386,50.6888199394911 L -1.286700892323032,50.68879930539002 L -1.285440243100426,50.68912611578002 L -1.284745672909322,50.68928458173524 L -1.284112511729372,50.68939586196933 L -1.283744724741447,50.68938011810203 L -1.283537301885905,50.69017016855364 L -1.283443513719096,50.69038095381164 L -1.282379496080038,50.69024764785844 L -1.28194944648855,50.69022702002647 L -1.281854908124538,50.69021115438116 L -1.281761819704559,50.69018441934757 L -1.281681705745107,50.69014886378116 L -1.28159471942515,50.69009708331238 L -1.281447660032403,50.68998919287557 L -1.281250333755949,50.68974874536817 L -1.281214022434971,50.68971885361886 L -1.281117048204134,50.68967150636404 L -1.280472284690254,50.68952539339323 L -1.279981227629083,50.689327273229 L -1.279189193534641,50.68909573503879 L -1.278688593078846,50.68896497754605 L -1.278557487503746,50.68893629661951 L -1.278426266757885,50.68890752492952 L -1.277801272043992,50.68885870444579 L -1.276964535395134,50.68877260676873 L -1.276999805969602,50.68859652593216 L -1.276735992829146,50.68853735212659 L -1.276542003220739,50.68844624589682 L -1.276397938007166,50.68842557338886 L -1.275839431254633,50.68828905010222 L -1.275831576914636,50.68824575804141 L -1.275346661571793,50.68811328548773 L -1.275143213170198,50.68799245018198 L -1.274799939533688,50.68785627066018 L -1.274186976493978,50.68767175220809 L -1.273114522253682,50.687266622358 L -1.272395946715981,50.68705176809471 L -1.271409793477211,50.68674344694311 L -1.270822663473306,50.6865356074497 L -1.270654593468939,50.6865129796515 L -1.270387441742167,50.68648973170488 L -1.270282571657871,50.68649357063888 L -1.270244283918326,50.68650142229773 L -1.270208638543214,50.68651198756902 L -1.270160193910157,50.68653505913089 L -1.27009013258064,50.68658226915548 L -1.270016958279555,50.68664204606002 L -1.269965250925319,50.68669485498413 L -1.269929047510025,50.68674137784636 L -1.269900037890489,50.68679064282613 L -1.269854608681977,50.6868901506254 L -1.269834392210284,50.68691429782758 L -1.269802841353364,50.68693927308082 L -1.269759997939001,50.68696237955027 L -1.26971024980722,50.68697914955731 L -1.269601008365765,50.68699383875703 L -1.269562664295044,50.68700528595642 L -1.269517000741468,50.68702208146679 L -1.269481331970151,50.68704163666149 L -1.269445565482834,50.68706748443759 L -1.269405159857817,50.68711398080894 L -1.269353061894537,50.68719186992714 L -1.269304941850478,50.68728416841487 L -1.26926644209294,50.68738830444989 L -1.269233634267009,50.68749418429641 L -1.269198796203412,50.68764059762268 L -1.269193587603676,50.68797599274182 L -1.269214147515921,50.68829806389825 L -1.269029004635729,50.68827712483664 L -1.268795805931637,50.68825408609777 L -1.268640200546751,50.68824771609424 L -1.268532315811975,50.68826501998926 L -1.268491978116769,50.68830702131933 L -1.268460523431609,50.68832570360655 L -1.268431874639157,50.68835159572095 L -1.268415816395809,50.68837846584813 L -1.268406812402929,50.68841706760815 L -1.268351597921521,50.68850752312183 L -1.268124467617015,50.68872465177199 L -1.268061156727245,50.68879527769181 L -1.268005128682285,50.68893796151563 L -1.267799997588656,50.68911378238249 L -1.267532151604837,50.68967417315627 L -1.267235003278225,50.6901220005441 L -1.267082222170999,50.69038355681142 L -1.267071978391142,50.69049416287219 L -1.267110443456125,50.69066252300674 L -1.267217789283053,50.69103998054998 L -1.266632392850254,50.69136273781211 L -1.266478973883572,50.69148502969988 L -1.266217358379243,50.69165150213969 L -1.26603871286181,50.6917520580188 L -1.265853139577888,50.69185517719277 L -1.265396326368804,50.69209782510385 L -1.265317561698796,50.69205867066847 L -1.265218441298363,50.69215693929717 L -1.264938737347923,50.69265881234851 L -1.264938817833809,50.69274332153793 L -1.264943287171729,50.69282336324819 L -1.265065180379818,50.69281424220741 L -1.265082065604231,50.69318304020257 L -1.26533958396079,50.69319005700848 L -1.2652689494648,50.69354212103669 L -1.265170097447247,50.693705211243 L -1.264960021671838,50.6941058428624 L -1.264712381737977,50.69454948049688 L -1.264609665945824,50.6948698757859 L -1.264550136002568,50.69496659541386 L -1.264495804366732,50.69526841612319 L -1.264267275602981,50.69540003071557 L -1.264209326358861,50.69548516267335 L -1.263420851306026,50.6951141008135 L -1.262988799245537,50.69494325275143 L -1.262313657677111,50.6946637913128 L -1.261211978280315,50.6943097021947 L -1.261175972723739,50.69426092654722 L -1.260854741747651,50.69415541273257 L -1.260394022940811,50.69401224316691 L -1.259687462911378,50.6938395515427 L -1.259288528286537,50.69373183191649 L -1.258948214988606,50.69358582522699 L -1.258591118921594,50.69342343841611 L -1.257889445898247,50.6931195087183 L -1.257545205768897,50.69294919913194 L -1.25723363681941,50.69277990574859 L -1.256832217151869,50.69255699623927 L -1.256183827797877,50.69237665260946 L -1.255388661826039,50.69217010551317 L -1.25425859149783,50.69183195152851 L -1.253523405598803,50.69158352084333 L -1.252390375235416,50.69116891221913 L -1.251322563022472,50.69075021610227 L -1.249759415830328,50.69013943822741 L -1.249274574401883,50.68991057154593 L -1.248934994403538,50.68972228573235 L -1.248616401619988,50.68955022678351 L -1.248489391950262,50.68944152475528 L -1.248387753599377,50.68933019912834 L -1.248255794252259,50.68908571144476 L -1.248192789709214,50.6888649530596 L -1.248138197878681,50.68873864700474 L -1.248044096254815,50.68860138769228 L -1.247940232986899,50.68845417601436 L -1.247685196106437,50.68820610679853 L -1.247317164091075,50.68784942410548 L -1.247225164392471,50.6877561402368 L -1.247119964234521,50.6876125152871 L -1.247081621661349,50.68752865792872 L -1.247073778106743,50.68748635287197 L -1.247075956691799,50.68743772941336 L -1.247082034851557,50.68741529290796 L -1.247100079030865,50.68734528507054 L -1.247198197825074,50.68714354688253 L -1.247285341723225,50.68673765792279 L -1.247281844919082,50.68669358287295 L -1.247256685313023,50.68658823393152 L -1.247208913852275,50.68647365880219 L -1.247160754563554,50.68639063710698 L -1.247026215258075,50.68621346858689 L -1.246971095914282,50.68612051253164 L -1.246936842629863,50.68605106599355 L -1.246889344369223,50.68591950081189 L -1.246329954589909,50.68567036142842 L -1.245939607210699,50.68546996122431 L -1.245266709244551,50.68515265532759 L -1.244220566139161,50.68471245681593 L -1.243868555648357,50.68459680696106 L -1.242962705468386,50.68423752045187 L -1.242294200691529,50.68399763231949 L -1.241600872724781,50.68371972968186 L -1.240675966987467,50.68340794997314 L -1.240179839819582,50.68327067262361 L -1.239924680524441,50.68320787555352 L -1.239363223021099,50.6830909364595 L -1.239092196173746,50.68304241854782 L -1.238507654596716,50.6829531047411 L -1.237218030531582,50.68278824413982 L -1.234615529977808,50.68249060265396 L -1.233771481574321,50.68234202334277 L -1.23263722880396,50.68211250355879 L -1.230574627113243,50.68169596531466 L -1.230015232523751,50.68162664336011 L -1.229133292360819,50.68154889355339 L -1.227510140296607,50.68144465209352 L -1.226852802970193,50.6813917476285 L -1.226578215668638,50.68139082563219 L -1.226302183770459,50.68139259049894 L -1.225030829487092,50.68149832464289 L -1.224311572700952,50.68151332071214 L -1.223884838514209,50.68155273558387 L -1.222880721177367,50.6816729011051 L -1.222879320885346,50.68167289177247 L -1.222417825048929,50.68176061731831 L -1.221707816469705,50.68190062444327 L -1.221114522860171,50.68199744428955 L -1.220162681402847,50.682208647932 L -1.219775045236522,50.6822825623741 L -1.219303305755468,50.6823890867311 L -1.219032404136515,50.68242593098986 L -1.218596706072733,50.6824913384109 L -1.21774477196807,50.68256743798884 L -1.217708695284305,50.6826104393916 L -1.217398847891428,50.68260296599194 L -1.217400490976172,50.68232868234711 L -1.217417289548532,50.68209046169209 L -1.217432191140343,50.68195930301878 L -1.217478524288735,50.6817275737835 L -1.217584386878471,50.68148815270275 L -1.217691179809079,50.68136120668818 L -1.217754554540187,50.68129771068269 L -1.21776535866778,50.68116023123725 L -1.217763394735234,50.68110987225756 L -1.217562014214571,50.68079107279304 L -1.217496383400702,50.68073758945792 L -1.217468655777631,50.68069964401799 L -1.217457846630276,50.68066891447318 L -1.217443097155843,50.68027854554766 L -1.21744541399802,50.67988649307062 L -1.21741640253747,50.67942041973662 L -1.217416703272362,50.67914262070762 L -1.217468668819375,50.67882462204745 L -1.217516129754201,50.67860908283732 L -1.217595690125712,50.67825261087438 L -1.21760273954159,50.67791273391725 L -1.217548163553605,50.67711016073725 L -1.217553524683154,50.67687186310323 L -1.217593181283843,50.67661320774618 L -1.217665329407162,50.67636546887241 L -1.21770678178283,50.67625147991197 L -1.217615832239941,50.67584711393777 L -1.217585566118816,50.67494401189814 L -1.217590975734332,50.67461850827959 L -1.217644472315719,50.67395520089729 L -1.217538501329407,50.67334566437984 L -1.217436767748342,50.6730850710341 L -1.217296542220651,50.67283779459757 L -1.217289341974632,50.6727585414092 L -1.217356403893937,50.67238130759688 L -1.217359564266454,50.67228243511767 L -1.217285285498588,50.67215328478357 L -1.217204691144076,50.67206014324472 L -1.217060767831834,50.67195129282883 L -1.216906526352474,50.671866556936 L -1.216718019991368,50.67180056025706 L -1.216539119667167,50.67174631525906 L -1.216117779164367,50.67164189242529 L -1.215731326072702,50.6715655727876 L -1.215373228648268,50.67148216051863 L -1.215184725998414,50.67141616137217 L -1.215011359479987,50.67128912952766 L -1.21476723411077,50.67107432470047 L -1.214533309019205,50.67084969869477 L -1.214269395481525,50.67063934455924 L -1.214097641208846,50.67041603565093 L -1.214051756681578,50.67027808424141 L -1.214014523372091,50.67022299216717 L -1.213985194634477,50.67019762149391 L -1.213891260253118,50.67014933937955 L -1.21389632629176,50.67001361939298 L -1.213753604186999,50.66983365932596 L -1.21371912983618,50.66977409058645 L -1.213660377433648,50.66965223483755 L -1.213587575092741,50.66960319595885 L -1.213288493043777,50.66946632311642 L -1.213197059252009,50.66926153544913 L -1.213176337848479,50.6692308284464 L -1.213097876904071,50.66918534720471 L -1.212930030157608,50.66907093591965 L -1.212876698628724,50.66878549210807 L -1.212760949460862,50.66868842402702 L -1.212675268444908,50.66864918698238 L -1.212651913183398,50.66860857271775 L -1.212646873303913,50.66856808213697 L -1.2126815873767,50.66852246581103 L -1.212721777157834,50.6684912709995 L -1.212784466845164,50.66846112713053 L -1.2128925363743,50.66843128960059 L -1.2129983945869,50.66844998489901 L -1.213085760832438,50.66847215142946 L -1.213172706585673,50.66851948801779 L -1.213253695955465,50.66858116889614 L -1.213346823876495,50.66860067700624 L -1.213424845205024,50.6685886169248 L -1.213575111438115,50.66856805377944 L -1.213750715556493,50.66856024779544 L -1.213842758910731,50.66856086847466 L -1.213944916683617,50.6685426775534 L -1.214085323252517,50.66852564341309 L -1.214260987135716,50.66851424092641 L -1.214480304451596,50.668515718777 L -1.214913877747851,50.66839538155971 L -1.215226154659345,50.6683354505734 L -1.215709107694101,50.66822722011949 L -1.216123673271633,50.66814100374841 L -1.216498707052439,50.66805353131313 L -1.216893450028187,50.66797347223447 L -1.217332162044893,50.66788022148051 L -1.218054984199161,50.66772944873897 L -1.21830626600911,50.66768168689024 L -1.218484964235859,50.66765591384055 L -1.218615376225585,50.66764330242492 L -1.218771144606124,50.66763535594282 L -1.218969301200794,50.66763218838985 L -1.219114974844641,50.66763496223402 L -1.219278946041612,50.66764594973196 L -1.219569816744626,50.66768026236788 L -1.220173055493117,50.66782463802099 L -1.220367371262167,50.66788437478878 L -1.220505555335821,50.66791676493585 L -1.220571856306354,50.66792889563532 L -1.220756881939837,50.66795081021131 L -1.220893966379199,50.66795801959227 L -1.222021409316464,50.66797543760755 L -1.222978583149507,50.66802407529146 L -1.22310569099984,50.66804200398726 L -1.223229882516826,50.66805991311438 L -1.223239976321262,50.66804919195524 L -1.223277212654472,50.66801977190836 L -1.223454221554556,50.66792655244005 L -1.223529498773183,50.66791087118731 L -1.223572184211403,50.66789766994816 L -1.223609242366184,50.66787903701655 L -1.223649365112744,50.66785143413979 L -1.223747342160506,50.66774680962878 L -1.223799804655153,50.66765006323797 L -1.22380295813549,50.66763569968799 L -1.223743624233266,50.66720089139865 L -1.22374190811487,50.66712805821063 L -1.223754224262552,50.66698249668503 L -1.223766725154983,50.66691065718436 L -1.223953864364534,50.66637230267217 L -1.223995223854458,50.66601467243565 L -1.223978438515557,50.66591467800456 L -1.223933392420372,50.66581638342746 L -1.223912650669881,50.66578657722664 L -1.22380699430247,50.66567079746774 L -1.223761698389717,50.66558769483606 L -1.223738809179478,50.6655183167937 L -1.223724985678374,50.66540854256192 L -1.223590390689309,50.66490400723447 L -1.22360689606096,50.66485107411758 L -1.223637147379048,50.66481351611987 L -1.223679313835247,50.66466177017257 L -1.223733126408176,50.66457492213754 L -1.223735415198235,50.66452099530699 L -1.223675532292664,50.66445946223009 L -1.223594358385982,50.66440857575114 L -1.223505258988597,50.66422988362052 L -1.223366477495739,50.66407153826713 L -1.223284641820034,50.66388399389825 L -1.22312517709426,50.66360054463031 L -1.223034423353362,50.663352615412 L -1.222916924005828,50.66327631338386 L -1.222851694980459,50.66310766919282 L -1.222774069684892,50.66284193646561 L -1.222693500970192,50.66257789221445 L -1.222657155166939,50.66246877676079 L -1.222684052164923,50.66237995164421 L -1.222719063451096,50.66231545456094 L -1.222753911463262,50.66226084576191 L -1.22275524803036,50.66217985162857 L -1.222697123072781,50.66210394517643 L -1.222630676288207,50.6620162957515 L -1.222572850541342,50.66191521825098 L -1.22252206541397,50.66182578522311 L -1.222379575296563,50.66171605166816 L -1.222300195202565,50.66163460902549 L -1.222284767986802,50.66154451270977 L -1.222307198904137,50.66147184050382 L -1.222291430959907,50.66139531734262 L -1.222152901459481,50.66121539528015 L -1.222086486619864,50.66112594766976 L -1.222014233909122,50.66095914404305 L -1.221975293724548,50.66066121364644 L -1.221935481782818,50.66050082978834 L -1.221755068612114,50.6600320373683 L -1.221664255686814,50.65988030328458 L -1.221480252104082,50.65962905296484 L -1.221420422883891,50.65956482191056 L -1.221236571576734,50.65938918108069 L -1.221330979039497,50.65933038543837 L -1.220813808094061,50.6588620388114 L -1.220452339146421,50.65848013944592 L -1.22025648350061,50.65826207217354 L -1.219927670615891,50.65786690399934 L -1.219780020942565,50.65764016808343 L -1.219720298289366,50.65757683587298 L -1.219506870615436,50.65739191400355 L -1.219456883505702,50.65733943526104 L -1.219230153719041,50.65701417422182 L -1.21894178283892,50.6566642257838 L -1.218809056942129,50.65647354999507 L -1.21873915711436,50.65634182233412 L -1.218625184630097,50.65621609249108 L -1.218445643609028,50.65604218416496 L -1.217979201308387,50.65567665474733 L -1.217470034900656,50.65524340893573 L -1.219908294318486,50.65382443885181 L -1.220711102559553,50.65335134103542 L -1.221163506751469,50.65311252358183 L -1.223368336175129,50.6520300489163 L -1.22336975040306,50.65202915930145 L -1.223568071157133,50.65192709115124 L -1.223790295697016,50.65183237411783 L -1.223896131687512,50.6517583688372 L -1.223940764368488,50.65171101703773 L -1.22398149486472,50.65164565851613 L -1.224086433057834,50.65137116195105 L -1.224115732901219,50.65131291959053 L -1.224176896115022,50.65120364419878 L -1.224256663332448,50.65108361423153 L -1.224355001801027,50.65095480731285 L -1.224460249310963,50.650831350589 L -1.224712246126811,50.65056412492987 L -1.224741250589088,50.65051666888159 L -1.224760459438365,50.65046914768436 L -1.22483724192364,50.6500128577573 L -1.224876717469355,50.64976130006635 L -1.225685152527005,50.65005984851453 L -1.226197166590656,50.65015045483552 L -1.226634864267729,50.65020010926203 L -1.22690597091826,50.65022438339156 L -1.227015697135292,50.65026107247378 L -1.22707887991616,50.65029124951613 L -1.227181137824689,50.65035665809348 L -1.227228902488446,50.65037405642569 L -1.22727398639511,50.65038424467662 L -1.227297994055112,50.65038530284642 L -1.227346406059673,50.65037034010671 L -1.22737209313529,50.65035432769859 L -1.227420742206095,50.65031778962291 L -1.227474016865062,50.65026231250936 L -1.227970763601142,50.65016041603545 L -1.228245963923988,50.65011279123649 L -1.228378106881164,50.65007680547913 L -1.228617354577801,50.65006670135868 L -1.228696652419113,50.65006003375567 L -1.228838530432029,50.65003490032507 L -1.229245062400352,50.65000072838211 L -1.229281898324825,50.64999467866688 L -1.229323210636059,50.64997876913201 L -1.229404688203949,50.64992437662009 L -1.229482407048723,50.64984307801606 L -1.229522864635439,50.64978670611823 L -1.229535883053269,50.64977510468509 L -1.229567137049146,50.64976092665933 L -1.2296125873444,50.64975583280745 L -1.229659188099669,50.64975883786876 L -1.229742183710241,50.64978276123167 L -1.229779047852048,50.64978210576501 L -1.229821700384385,50.64976980105451 L -1.229853013060482,50.64975202719392 L -1.229864544814761,50.64973861782964 L -1.229906915940243,50.64965789455064 L -1.229950141249382,50.64961053115279 L -1.229994457332732,50.64958205471053 L -1.23005276586172,50.64956086296079 L -1.230147894226652,50.64954171241589 L -1.230231462419436,50.64953057678858 L -1.230423900872731,50.64953004926626 L -1.230480633646446,50.6495196353385 L -1.230682671542706,50.64944544976133 L -1.230731008141791,50.6494349803024 L -1.230784839342902,50.64943084033506 L -1.230912018296031,50.64943437655985 L -1.230941886231151,50.64942648227711 L -1.230973417564238,50.64940241630275 L -1.230984489954911,50.64933137555674 L -1.231001779985874,50.64930811466389 L -1.23103475454869,50.64928136108353 L -1.231073135704465,50.64926633063058 L -1.231111486767146,50.64926029033179 L -1.231156702470682,50.64926238662349 L -1.231266693780223,50.64928289079757 L -1.231300656904696,50.64928131668354 L -1.231353337828274,50.64926188524823 L -1.231361997058112,50.64925295197812 L -1.231363140783736,50.64918283467062 L -1.231373492583912,50.64915593182896 L -1.23141341947917,50.64913192109045 L -1.231673145165292,50.64908148907343 L -1.232029823086158,50.64897856216084 L -1.23227268330292,50.64891812830013 L -1.232397369867079,50.64890276672559 L -1.232694536748009,50.64889483368228 L -1.232747041030901,50.6488861888933 L -1.232802461019195,50.64887037097734 L -1.232839500500525,50.64885173496761 L -1.232925577833647,50.64877947943976 L -1.232969803549901,50.64875639549199 L -1.232992542890977,50.64874935281641 L -1.233049098599776,50.64874972491328 L -1.233105977624712,50.64873023040249 L -1.233190625757384,50.64865976334967 L -1.233347484445975,50.64858078078493 L -1.23338729247427,50.64857115317379 L -1.233429650889,50.64856963364879 L -1.233465026995276,50.64857436145221 L -1.233532440337618,50.64860267484108 L -1.233600190024526,50.64861031256192 L -1.233638394389093,50.64860606854124 L -1.23367108921024,50.64859639407082 L -1.233843820977548,50.6485022315625 L -1.233880801300606,50.64848719097944 L -1.233964600280692,50.64846886190322 L -1.234985515477022,50.64840355325696 L -1.2350094347598,50.64841000347915 L -1.235062753709894,50.6484373244538 L -1.235136360420865,50.64851521446311 L -1.235148822667989,50.64853777214095 L -1.235161750571524,50.64861067891436 L -1.235172580211215,50.64864041816941 L -1.235189211381607,50.64865760897519 L -1.235246816093607,50.64868675605402 L -1.235524228340261,50.64876058842047 L -1.235664043425642,50.64877588980034 L -1.235826568400466,50.64877875337299 L -1.23617220133459,50.64875215949101 L -1.236351123430132,50.64879387823726 L -1.236510879102925,50.64880211693253 L -1.236571472680294,50.64881240316499 L -1.236679701996535,50.64885536659834 L -1.236716317682542,50.648862798639 L -1.236870374320543,50.64887010048932 L -1.237014854083951,50.64886385391031 L -1.237133432193218,50.64887272127253 L -1.237280084923863,50.64890514714679 L -1.237588274518328,50.64900156195486 L -1.237632003703247,50.64900904022972 L -1.237688530700323,50.64901120795888 L -1.237738060794064,50.6490061376191 L -1.23776090162286,50.64899999371446 L -1.23788774200568,50.6489378904642 L -1.237920392584561,50.64893091162308 L -1.237983901901025,50.64894121618068 L -1.238094742515388,50.64899588283628 L -1.238252782667772,50.6491030918216 L -1.238987973650995,50.64939198896012 L -1.240153765943253,50.64989694025543 L -1.240597684355562,50.65008961938786 L -1.242014729201886,50.65071755820914 L -1.24219337222425,50.65051634663905 L -1.242436291870892,50.65027779299767 L -1.24245249519855,50.65023474456884 L -1.242483361316297,50.65007761385467 L -1.24251972257547,50.65001392867007 L -1.242578546256418,50.64996036871808 L -1.242600636760753,50.64990657008547 L -1.242597637974417,50.64983193061718 L -1.242562279160836,50.64974620256204 L -1.242562799349707,50.64971384064634 L -1.242581714360552,50.64967620403083 L -1.242610614641263,50.64964132939436 L -1.242686549791632,50.64958248634089 L -1.242740770217957,50.64955406940862 L -1.242868744948521,50.64950815076974 L -1.243087485591552,50.64945293196116 L -1.24311528958343,50.64939188813319 L -1.243185049959076,50.64928175961028 L -1.243232416313788,50.64923711530345 L -1.243306560951406,50.64920253419459 L -1.243323541736718,50.6491981492355 L -1.243353868578097,50.64924869209658 L -1.244831591622866,50.64892194466241 L -1.245753339228067,50.64885868626001 L -1.246191966638993,50.64885073493088 L -1.247346355524252,50.64875201764255 L -1.247804200971649,50.64877475154538 L -1.247881147788955,50.64882739209647 L -1.247959767088073,50.64887024389393 L -1.248056767538548,50.64890862911914 L -1.248182102650938,50.64894000471455 L -1.248313266570898,50.64896422547219 L -1.248433305772372,50.64897668689488 L -1.248811975270774,50.64899890635612 L -1.249544268507143,50.64902699771104 L -1.24964582643272,50.64904293505244 L -1.249805113202062,50.64908082067744 L -1.250060564657043,50.64893861856079 L -1.25038990948094,50.64876983008073 L -1.250738091635198,50.6485823718948 L -1.251038812038031,50.64843857060434 L -1.251207479920802,50.64832637560263 L -1.251281945816511,50.64827111366783 L -1.251403753881165,50.64816482075732 L -1.25148291933288,50.64808531490327 L -1.251563709857684,50.64798424256683 L -1.251602183407906,50.64796291270675 L -1.251627749169082,50.6479612787609 L -1.25166989239238,50.64797323676442 L -1.251785204002483,50.64801892871939 L -1.251833146762696,50.6480255296713 L -1.251898228534425,50.64802504830427 L -1.25197629173802,50.6480075685174 L -1.252135761163817,50.64794565915725 L -1.252179748512706,50.64793695098165 L -1.252328247822094,50.64793430735322 L -1.252440173820671,50.64792144971043 L -1.252713008735963,50.64784408383691 L -1.252740013884338,50.64783256947961 L -1.252771461798593,50.64781299227072 L -1.252788857148166,50.64778972883813 L -1.252815389400706,50.64771977410016 L -1.252832713430349,50.64770100538308 L -1.252944321065786,50.6476199083926 L -1.253006787746685,50.64760043999179 L -1.253030851618243,50.64759789707874 L -1.253146662280927,50.6476121246303 L -1.253384308243931,50.64761364689682 L -1.253581019609779,50.64760052201184 L -1.253682934494923,50.647601174518 L -1.253877776763486,50.64761770534963 L -1.254007482371424,50.64764559641796 L -1.254062296238147,50.6476675240322 L -1.254146176409582,50.6477318922757 L -1.254243122718564,50.64777386814976 L -1.254416376310238,50.64782082718654 L -1.254654652055477,50.6478637065342 L -1.254795557499861,50.64789877071195 L -1.254887376585501,50.64791104509083 L -1.255170265201746,50.64790566059303 L -1.255983867023087,50.64797567653029 L -1.256109378399949,50.64800344858029 L -1.256183843757575,50.6480290967332 L -1.256276637159011,50.6480683473033 L -1.256402793339791,50.64813657975522 L -1.256558478976507,50.64840287813691 L -1.256604144275719,50.64846520280771 L -1.256654280239378,50.6485176665752 L -1.256852174687015,50.64870332047637 L -1.256909378677709,50.64875133400992 L -1.257189298274358,50.64894200532656 L -1.257232435480391,50.64898723195916 L -1.257287617462114,50.64907478998203 L -1.257329525558898,50.64910922032066 L -1.257378731175057,50.64913200966974 L -1.257423806373844,50.64914308522654 L -1.257493031015956,50.64914622326298 L -1.25795476348301,50.64910780760894 L -1.258046003982846,50.64906073946617 L -1.258065150374088,50.64901501051295 L -1.258356770164199,50.64899618830318 L -1.258659959024315,50.64896844858059 L -1.258921478227265,50.64906900525146 L -1.25901596862302,50.64908219238463 L -1.259233897326191,50.64907728412883 L -1.259278238136127,50.64913510414256 L -1.259348258266467,50.64918409693671 L -1.259370372263124,50.64921660270646 L -1.259374243908514,50.64923739502107 L -1.259371968590901,50.64929312075969 L -1.259377368155013,50.64930574155899 L -1.259391411125273,50.64931751823416 L -1.259419419269072,50.6493311816959 L -1.259487047219188,50.64934689489868 L -1.259577499291562,50.64935735881628 L -1.259649579585615,50.6493569175663 L -1.259703464785622,50.64934916844641 L -1.259832924451557,50.64930413967586 L -1.259871197702232,50.64929539231923 L -1.259905159967297,50.64929380986453 L -1.259989827471167,50.64930873191519 L -1.260054896864994,50.64930914494586 L -1.260281377806038,50.64929439962345 L -1.260490667758173,50.64929752551774 L -1.260541768179468,50.64928885930988 L -1.260618656673628,50.64925698172265 L -1.260722197913838,50.64923597162773 L -1.26075611639307,50.64923717565702 L -1.260794238103526,50.64924550870798 L -1.260844901296197,50.64926470969017 L -1.260948370551804,50.64924828401822 L -1.261502509988913,50.64963127851119 L -1.26141566712134,50.64966579071918 L -1.262038309494189,50.65009866353638 L -1.26206378761906,50.65009522867475 L -1.262605596905643,50.65000785451154 L -1.263074970891452,50.65001801479753 L -1.262742439160456,50.65002759974298 L -1.262511612566526,50.65004412043169 L -1.262395121621914,50.65008024387575 L -1.262290915182954,50.65013622371405 L -1.262236438366509,50.65018172976207 L -1.262218204888778,50.65026621357562 L -1.262211722609699,50.65040462395846 L -1.262196912982901,50.65053857636385 L -1.262177987243154,50.65084601647801 L -1.262120295941442,50.65127547997248 L -1.262203779453051,50.65127690738214 L -1.262701574187609,50.6512827538332 L -1.262932505225618,50.65125994017507 L -1.263026051684816,50.65124434895414 L -1.263134036182427,50.65121536339425 L -1.263451298240316,50.65110130288664 L -1.263813369010123,50.65101548447561 L -1.264048959730231,50.65096302988013 L -1.264404907220075,50.65090324299086 L -1.26491559620277,50.65080748050189 L -1.265142872473651,50.65074957706107 L -1.265549833961233,50.65068651209613 L -1.265632024717971,50.65067354434858 L -1.265629471194556,50.65201974300632 L -1.265728153938721,50.65222093923841 L -1.266062646798189,50.65282018434151 L -1.266253188050742,50.65311455891398 L -1.266307230112722,50.65318682179833 L -1.266326593849997,50.65321661179997 L -1.266712047131779,50.65354008213076 L -1.266846536749786,50.653621841084 L -1.266942456175612,50.65373131732872 L -1.267142737995803,50.65394744573723 L -1.26743284041393,50.65421547309216 L -1.267708899534879,50.65447172405055 L -1.266724670304413,50.65508964719028 L -1.26676331122697,50.65514742841507 L -1.266977518428833,50.65547341669603 L -1.268027501031738,50.65518054554667 L -1.268252129830426,50.65538432826004 L -1.269590923110766,50.65498447232032 L -1.269684655983602,50.65495718947774 L -1.269608693436812,50.65483885022189 L -1.269479253984984,50.6546113926978 L -1.269387821819578,50.65449034915365 L -1.269908133542596,50.65423459700113 L -1.272256766722706,50.65338504004283 L -1.27225813841979,50.65338684667395 L -1.272320775666468,50.65336386277039 L -1.272766388585393,50.65391073884667 L -1.274093653003672,50.6553516213843 L -1.274832341986422,50.65644162196921 L -1.275479895788688,50.65738450881301 L -1.275536241225527,50.65739924349592 L -1.275603982967679,50.65740865476154 L -1.27570445088724,50.65741377413939 L -1.276908011851053,50.65789791268579 L -1.277009156896082,50.6579425926042 L -1.277108392131568,50.65802052482656 L -1.277174700589361,50.6581234257564 L -1.277547754009237,50.65889018605762 L -1.277555992708797,50.65890821777429 L -1.278518943090056,50.65847985791955 L -1.279058906127812,50.65822778283566 L -1.279200402147154,50.6581359674016 L -1.279622861826246,50.65780225017636 L -1.279631486031234,50.6577951111983 L -1.279662458351425,50.65789788226629 L -1.279699580405824,50.65796464008518 L -1.279813171022399,50.65812626877721 L -1.279837812574226,50.6581777557906 L -1.27986811360562,50.65832448537304 L -1.279887062032106,50.65838214053739 L -1.279973394158835,50.658564368355 L -1.280006551867199,50.65861581801948 L -1.280101223697384,50.65871799338418 L -1.280131994509081,50.65874245727864 L -1.280246802752321,50.65881697673009 L -1.281260665795884,50.65931599146941 L -1.281283595810819,50.6593880554663 L -1.281830506321606,50.65979706934712 L -1.281943453107433,50.65971856023728 L -1.282242651072658,50.65948935114181 L -1.28233696799519,50.65943149461574 L -1.282402518669057,50.65940124107751 L -1.282493535901188,50.65936853703733 L -1.282647028940568,50.65932363089148 L -1.282671138337814,50.65931838503499 L -1.284168025745279,50.65922239852 L -1.284217260382311,50.65942138707232 L -1.284265486297379,50.65941808701195 L -1.284707333944587,50.65938843351482 L -1.284822290340509,50.65973805338405 L -1.28519477571525,50.65971336672525 L -1.285272682532167,50.65970665208821 L -1.285205496361864,50.65984478114231 L -1.285153810489253,50.65998381432422 L -1.285102307797168,50.66011844334337 L -1.285016305063212,50.66037414028008 L -1.28495644470847,50.66059052994614 L -1.285045407886424,50.66060096488848 L -1.28509912455004,50.66060489041353 L -1.28546938515937,50.66063503021628 L -1.285898716506546,50.6606853093809 L -1.286301076160739,50.66073730982532 L -1.286731789569116,50.66079658470226 L -1.287119998096302,50.66085110293396 L -1.287553192406513,50.66092387542686 L -1.287938203816752,50.66101253462538 L -1.288353989579755,50.66111046062275 L -1.288740539491033,50.66119013622825 L -1.289154018841332,50.66125559022184 L -1.289479343656384,50.66135745577599 L -1.289888856781697,50.6614075994345 L -1.290298370793296,50.66145774165719 L -1.290733538756764,50.66150084624766 L -1.290942533687979,50.66152729037508 L -1.291134480346457,50.66156262079748 L -1.291376945570842,50.66162073376858 L -1.29154014166838,50.6616829496442 L -1.291861546315323,50.66185212221631 L -1.291978222793998,50.66190497468999 L -1.292049484499599,50.6619602483864 L -1.29208370489436,50.66203516574618 L -1.292068807320072,50.66208721915515 L -1.291994613228531,50.66222701764348 L -1.291972397470191,50.66229251208019 L -1.291925751003558,50.66237682772025 L -1.291863762612847,50.66245736412767 L -1.291787083709769,50.66256837835829 L -1.291698966789848,50.66268750424232 L -1.291787192059584,50.66274737630477 L -1.292062839818598,50.66295771569933 L -1.292322793161562,50.66317236442623 L -1.292587014339416,50.66338263319924 L -1.292851143397013,50.66359919402557 L -1.293122621151244,50.66380042534999 L -1.293321961546856,50.66399681356281 z\" /></g></g></svg>"
],
"text/plain": [
"<shapely.geometry.multipolygon.MultiPolygon at 0x10e8ad940>"
]
},
"execution_count": 62,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gj=get_geojson('parish_region', 'arreton', geojsoncol='wgs84',\n",
" db_url = \"http://localhost:8003/adminboundaries.json\")\n",
"\n",
"shp = shape( gj )\n",
"shp"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can now search OpenStreetMap for POIs associated with particular amemity tags within that area:"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {},
"outputs": [],
"source": [
"def get_osm_amenity_nodes(shp, tags=None):\n",
" ''' Simplify OSM amenity search to just return nodes. '''\n",
" \n",
" tags = tags if tags is None or isinstance(tags, list) else [tags]\n",
" items = osmnx.osm_poi_download(shp,tags)\n",
" return [item for item in items['elements'] if item['type']=='node']"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[{'type': 'node',\n",
" 'id': 11248229,\n",
" 'lat': 50.6772199,\n",
" 'lon': -1.2454996,\n",
" 'tags': {'addr:city': 'Arreton',\n",
" 'addr:postcode': 'PO30 3AA',\n",
" 'addr:street': 'Main Road',\n",
" 'amenity': 'pub',\n",
" 'name': 'The White Lion',\n",
" 'phone': '+44 1983 528479',\n",
" 'website': 'http://www.whitelionarreton.com'}},\n",
" {'type': 'node',\n",
" 'id': 11248231,\n",
" 'lat': 50.6779437,\n",
" 'lon': -1.2463103,\n",
" 'tags': {'amenity': 'pub', 'name': 'Dairymans Daughter'}},\n",
" {'type': 'node',\n",
" 'id': 11604647,\n",
" 'lat': 50.6533199,\n",
" 'lon': -1.2770359,\n",
" 'tags': {'amenity': 'pub', 'name': 'Rookley Inn'}},\n",
" {'type': 'node', 'id': 1999008018, 'lat': 50.6543751, 'lon': -1.2230635},\n",
" {'type': 'node', 'id': 1999008023, 'lat': 50.6544119, 'lon': -1.2228529},\n",
" {'type': 'node', 'id': 1999008026, 'lat': 50.654452, 'lon': -1.2228998},\n",
" {'type': 'node', 'id': 1999008029, 'lat': 50.6544766, 'lon': -1.2231822},\n",
" {'type': 'node', 'id': 1999008032, 'lat': 50.6544869, 'lon': -1.2226933},\n",
" {'type': 'node', 'id': 1999008035, 'lat': 50.6545079, 'lon': -1.2231157},\n",
" {'type': 'node', 'id': 1999008040, 'lat': 50.6545403, 'lon': -1.2231536},\n",
" {'type': 'node', 'id': 1999008043, 'lat': 50.6545579, 'lon': -1.2227763},\n",
" {'type': 'node', 'id': 1999008046, 'lat': 50.654567, 'lon': -1.2227569},\n",
" {'type': 'node', 'id': 1999008049, 'lat': 50.6546006, 'lon': -1.2229414},\n",
" {'type': 'node', 'id': 1999008054, 'lat': 50.654626, 'lon': -1.2229711},\n",
" {'type': 'node', 'id': 1999008057, 'lat': 50.6546446, 'lon': -1.2228477},\n",
" {'type': 'node', 'id': 4793149150, 'lat': 50.6858352, 'lon': -1.2466761},\n",
" {'type': 'node', 'id': 4940303326, 'lat': 50.6858532, 'lon': -1.2463767},\n",
" {'type': 'node', 'id': 4940303328, 'lat': 50.6859156, 'lon': -1.2463861},\n",
" {'type': 'node', 'id': 4940303329, 'lat': 50.6859175, 'lon': -1.2463553},\n",
" {'type': 'node', 'id': 4940303330, 'lat': 50.6859507, 'lon': -1.2463602},\n",
" {'type': 'node', 'id': 4940303331, 'lat': 50.6859539, 'lon': -1.2463059},\n",
" {'type': 'node', 'id': 4940303332, 'lat': 50.6859718, 'lon': -1.2466966},\n",
" {'type': 'node', 'id': 4940303333, 'lat': 50.6859783, 'lon': -1.2466082},\n",
" {'type': 'node', 'id': 4940303334, 'lat': 50.6859801, 'lon': -1.2465599},\n",
" {'type': 'node', 'id': 4940303335, 'lat': 50.6860499, 'lon': -1.2463518},\n",
" {'type': 'node', 'id': 4940303336, 'lat': 50.6860518, 'lon': -1.2463205},\n",
" {'type': 'node', 'id': 4940303337, 'lat': 50.6860866, 'lon': -1.2464473},\n",
" {'type': 'node', 'id': 4940303338, 'lat': 50.686092, 'lon': -1.2463581},\n",
" {'type': 'node', 'id': 4940303339, 'lat': 50.6861758, 'lon': -1.2465892},\n",
" {'type': 'node', 'id': 4940303340, 'lat': 50.6861835, 'lon': -1.2464618},\n",
" {'type': 'node', 'id': 4985259880, 'lat': 50.6544603, 'lon': -1.2231632},\n",
" {'type': 'node',\n",
" 'id': 5254382447,\n",
" 'lat': 50.6546198,\n",
" 'lon': -1.2229005,\n",
" 'tags': {'entrance': 'main'}}]"
]
},
"execution_count": 68,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"get_osm_amenity_nodes(shp,'pub')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment