kepler.gl 3.1.7 → 3.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/actions/src/ui-state-actions.d.ts +0 -16
- package/dist/src/actions/src/vis-state-actions.d.ts +26 -0
- package/dist/src/ai-assistant/src/constants.d.ts +2 -5
- package/dist/src/ai-assistant/src/tools/geo-tools.d.ts +76 -25
- package/dist/src/ai-assistant/src/tools/tools.d.ts +76 -25
- package/dist/src/components/src/side-panel/add-by-dataset-button.d.ts +0 -1
- package/dist/src/duckdb/src/table/duckdb-table-utils.d.ts +8 -9
- package/dist/src/localization/src/translations/ca.d.ts +2 -0
- package/dist/src/localization/src/translations/cn.d.ts +2 -0
- package/dist/src/localization/src/translations/en.d.ts +2 -0
- package/dist/src/localization/src/translations/es.d.ts +2 -0
- package/dist/src/localization/src/translations/fi.d.ts +2 -0
- package/dist/src/localization/src/translations/ja.d.ts +2 -0
- package/dist/src/localization/src/translations/pt.d.ts +2 -0
- package/dist/src/localization/src/translations/ru.d.ts +2 -0
- package/dist/src/reducers/src/ui-state-updaters.d.ts +0 -10
- package/dist/src/reducers/src/vis-state-updaters.d.ts +16 -1
- package/dist/src/reducers/src/vis-state.d.ts +4 -0
- package/dist/src/schemas/src/vis-state-schema.d.ts +1 -0
- package/package.json +2 -2
- package/src/actions/dist/ui-state-actions.d.ts +0 -16
- package/src/actions/dist/ui-state-actions.js +2 -17
- package/src/actions/dist/vis-state-actions.d.ts +26 -0
- package/src/actions/dist/vis-state-actions.js +25 -1
- package/src/actions/package.json +8 -8
- package/src/actions/src/ui-state-actions.ts +0 -22
- package/src/actions/src/vis-state-actions.ts +30 -0
- package/src/ai-assistant/dist/components/ai-assistant-component.js +63 -4
- package/src/ai-assistant/dist/components/ai-assistant-config.js +55 -17
- package/src/ai-assistant/dist/constants.d.ts +2 -5
- package/src/ai-assistant/dist/constants.js +3 -21
- package/src/ai-assistant/dist/reducers/index.js +2 -2
- package/src/ai-assistant/dist/tools/geo-tools.d.ts +76 -25
- package/src/ai-assistant/dist/tools/geo-tools.js +44 -8
- package/src/ai-assistant/dist/tools/lisa-tool.js +17 -6
- package/src/ai-assistant/dist/tools/tools.d.ts +76 -25
- package/src/ai-assistant/package.json +19 -14
- package/src/ai-assistant/src/components/ai-assistant-component.tsx +34 -4
- package/src/ai-assistant/src/components/ai-assistant-config.tsx +64 -18
- package/src/ai-assistant/src/config/models.json +5 -24
- package/src/ai-assistant/src/constants.ts +21 -26
- package/src/ai-assistant/src/reducers/index.ts +1 -1
- package/src/ai-assistant/src/tools/geo-tools.tsx +70 -9
- package/src/ai-assistant/src/tools/lisa-tool.tsx +15 -4
- package/src/cloud-providers/package.json +2 -2
- package/src/common-utils/package.json +3 -3
- package/src/components/dist/kepler-gl.js +2 -2
- package/src/components/dist/map/map-popover.js +2 -2
- package/src/components/dist/map-container.js +2 -2
- package/src/components/dist/side-panel/add-by-dataset-button.d.ts +0 -1
- package/src/components/dist/side-panel/add-by-dataset-button.js +1 -3
- package/src/components/dist/side-panel/filter-panel/add-filter-button.js +1 -2
- package/src/components/dist/side-panel/layer-panel/add-layer-button.js +1 -2
- package/src/components/dist/side-panel/layer-panel/custom-picker.js +18 -5
- package/src/components/package.json +15 -15
- package/src/components/src/kepler-gl.tsx +1 -1
- package/src/components/src/map/map-popover.tsx +1 -1
- package/src/components/src/map-container.tsx +1 -1
- package/src/components/src/side-panel/add-by-dataset-button.tsx +0 -3
- package/src/components/src/side-panel/filter-panel/add-filter-button.tsx +0 -1
- package/src/components/src/side-panel/layer-panel/add-layer-button.tsx +0 -1
- package/src/components/src/side-panel/layer-panel/custom-picker.tsx +15 -1
- package/src/constants/dist/default-settings.js +1 -1
- package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/e6/16/9fd3750f7cfc51cf980ec6937f88e24e5b03b144d0439efabdec6a028ce7442883abce42b76f97bffa8d37bfb65c10508e48d68a2b019c4b750a48374080 +1 -0
- package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/b6/51/9b3488269917e0404a46b4db6235f226deef2d5b5b5ffb7414dafaa60b52 +2 -0
- package/src/constants/package.json +2 -2
- package/src/constants/umd/keplergl.min.js +1 -1
- package/src/deckgl-arrow-layers/package.json +2 -2
- package/src/deckgl-layers/package.json +4 -4
- package/src/duckdb/dist/components/sql-panel.js +34 -33
- package/src/duckdb/dist/table/duckdb-table-utils.d.ts +8 -9
- package/src/duckdb/dist/table/duckdb-table-utils.js +21 -23
- package/src/duckdb/dist/table/duckdb-table.js +20 -17
- package/src/duckdb/package.json +6 -6
- package/src/duckdb/src/components/sql-panel.tsx +3 -5
- package/src/duckdb/src/table/duckdb-table-utils.ts +19 -18
- package/src/duckdb/src/table/duckdb-table.ts +7 -4
- package/src/effects/package.json +5 -5
- package/src/layers/dist/geojson-layer/geojson-layer.js +5 -2
- package/src/layers/package.json +9 -9
- package/src/layers/src/geojson-layer/geojson-layer.ts +4 -1
- package/src/localization/dist/translations/ca.d.ts +2 -0
- package/src/localization/dist/translations/ca.js +3 -1
- package/src/localization/dist/translations/cn.d.ts +2 -0
- package/src/localization/dist/translations/cn.js +3 -1
- package/src/localization/dist/translations/en.d.ts +2 -0
- package/src/localization/dist/translations/en.js +4 -2
- package/src/localization/dist/translations/es.d.ts +2 -0
- package/src/localization/dist/translations/es.js +3 -1
- package/src/localization/dist/translations/fi.d.ts +2 -0
- package/src/localization/dist/translations/fi.js +3 -1
- package/src/localization/dist/translations/ja.d.ts +2 -0
- package/src/localization/dist/translations/ja.js +3 -1
- package/src/localization/dist/translations/pt.d.ts +2 -0
- package/src/localization/dist/translations/pt.js +3 -1
- package/src/localization/dist/translations/ru.d.ts +2 -0
- package/src/localization/dist/translations/ru.js +3 -1
- package/src/localization/package.json +1 -1
- package/src/localization/src/translations/ca.ts +2 -0
- package/src/localization/src/translations/cn.ts +2 -0
- package/src/localization/src/translations/en.ts +4 -2
- package/src/localization/src/translations/es.ts +2 -0
- package/src/localization/src/translations/fi.ts +2 -0
- package/src/localization/src/translations/ja.ts +2 -0
- package/src/localization/src/translations/pt.ts +2 -0
- package/src/localization/src/translations/ru.ts +2 -0
- package/src/processors/dist/file-handler.js +13 -14
- package/src/processors/package.json +7 -7
- package/src/processors/src/file-handler.ts +0 -1
- package/src/reducers/dist/combined-updaters.js +4 -2
- package/src/reducers/dist/ui-state-updaters.d.ts +0 -10
- package/src/reducers/dist/ui-state-updaters.js +2 -22
- package/src/reducers/dist/ui-state.js +2 -2
- package/src/reducers/dist/vis-state-updaters.d.ts +16 -1
- package/src/reducers/dist/vis-state-updaters.js +79 -45
- package/src/reducers/dist/vis-state.d.ts +4 -0
- package/src/reducers/dist/vis-state.js +2 -2
- package/src/reducers/package.json +16 -16
- package/src/reducers/src/combined-updaters.ts +1 -0
- package/src/reducers/src/ui-state-updaters.ts +0 -24
- package/src/reducers/src/ui-state.ts +1 -3
- package/src/reducers/src/vis-state-updaters.ts +74 -22
- package/src/reducers/src/vis-state.ts +3 -1
- package/src/schemas/dist/vis-state-schema.d.ts +1 -0
- package/src/schemas/dist/vis-state-schema.js +1 -1
- package/src/schemas/package.json +7 -7
- package/src/schemas/src/vis-state-schema.ts +1 -0
- package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/f9/fc/86ccce4fa2c3e73042785814bc24476cb7cc9531d16a7c2ecb66bfc154f7b35d7416d852faa175d172da177931675cd2ba82e3b7898e8f4bf499921b00c2 +1 -0
- package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/ba/31/d609a3a75657c3640471d5a925a4a64689ea3853d9379bdcd675dba816a2 +2 -0
- package/src/styles/package.json +2 -2
- package/src/styles/umd/keplergl.min.js +1 -1
- package/src/table/package.json +5 -5
- package/src/tasks/package.json +2 -2
- package/src/types/package.json +1 -1
- package/src/utils/package.json +4 -4
- package/umd/keplergl.min.js +1350 -1312
|
@@ -19,10 +19,9 @@ import {SchemaPanel, SchemaSuggestion} from './schema-panel';
|
|
|
19
19
|
import {PreviewDataPanel, QueryResult} from './preview-data-panel';
|
|
20
20
|
|
|
21
21
|
import {
|
|
22
|
-
|
|
22
|
+
castDuckDBTypesForKepler,
|
|
23
23
|
getDuckDBColumnTypes,
|
|
24
24
|
getDuckDBColumnTypesMap,
|
|
25
|
-
getGeometryColumns,
|
|
26
25
|
setGeoArrowWKBExtension,
|
|
27
26
|
splitSqlStatements,
|
|
28
27
|
checkIsSelectQuery,
|
|
@@ -209,10 +208,9 @@ export const SqlPanel: React.FC<SqlPanelProps> = ({initialSql = ''}) => {
|
|
|
209
208
|
// 2) query duckdb types and detect candidate columns for ST_asWKB transform.
|
|
210
209
|
const duckDbColumns = await getDuckDBColumnTypes(connection, tempTableName);
|
|
211
210
|
tableDuckDBTypes = getDuckDBColumnTypesMap(duckDbColumns);
|
|
212
|
-
const columnsToConvertToWKB = getGeometryColumns(duckDbColumns);
|
|
213
211
|
|
|
214
|
-
// 3)
|
|
215
|
-
const adjustedQuery =
|
|
212
|
+
// 3) cast GEOMETRY columns to WKB and BigInt to double.
|
|
213
|
+
const adjustedQuery = castDuckDBTypesForKepler(tempTableName, duckDbColumns);
|
|
216
214
|
arrowResult = await connection.query(adjustedQuery);
|
|
217
215
|
|
|
218
216
|
// 4) set geoarrow extension for the arrow table as DuckDB doesn't support the geoarrow extension.
|
|
@@ -62,28 +62,29 @@ export function getDuckDBColumnTypesMap(columns: DuckDBColumnDesc[]) {
|
|
|
62
62
|
|
|
63
63
|
/**
|
|
64
64
|
* Constructs an SQL query to select all columns from a given table,
|
|
65
|
-
* converting specified columns to Well-Known Binary (WKB) format using ST_AsWKB
|
|
65
|
+
* converting specified columns to Well-Known Binary (WKB) format using ST_AsWKB,
|
|
66
|
+
* and casting BIGINT columns to DOUBLE if specified.
|
|
66
67
|
* @param tableName The name of the table from which to select data.
|
|
67
|
-
* @param
|
|
68
|
+
* @param columns An array of column descriptors, each with a type and name.
|
|
69
|
+
* @param options Optional parameters to control the conversion behavior.
|
|
68
70
|
* @returns The constructed SQL query.
|
|
69
71
|
*/
|
|
70
|
-
export function
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
}
|
|
72
|
+
export function castDuckDBTypesForKepler(
|
|
73
|
+
tableName: string,
|
|
74
|
+
columns: DuckDBColumnDesc[],
|
|
75
|
+
options = {geometryToWKB: true, bigIntToDouble: true}
|
|
76
|
+
): string {
|
|
77
|
+
const modifiedColumns = columns.map(column => {
|
|
78
|
+
const {name, type} = column;
|
|
79
|
+
if (type === 'GEOMETRY' && options.geometryToWKB) {
|
|
80
|
+
return `ST_AsWKB(${name}) as ${name}`;
|
|
81
|
+
} else if (type === 'BIGINT' && options.bigIntToDouble) {
|
|
82
|
+
return `CAST(${name} AS DOUBLE) as ${name}`;
|
|
83
|
+
}
|
|
84
|
+
return name;
|
|
85
|
+
});
|
|
79
86
|
|
|
80
|
-
|
|
81
|
-
* Finds the names of columns that have a GEOMETRY type.
|
|
82
|
-
* @param columns An array of column descriptors from a DuckDB table.
|
|
83
|
-
* @returns An array of column names that are of type GEOMETRY.
|
|
84
|
-
*/
|
|
85
|
-
export function getGeometryColumns(columns: DuckDBColumnDesc[]): string[] {
|
|
86
|
-
return columns.filter(column => column.type === 'GEOMETRY').map(column => column.name);
|
|
87
|
+
return `SELECT ${modifiedColumns.join(', ')} FROM '${tableName}'`;
|
|
87
88
|
}
|
|
88
89
|
|
|
89
90
|
/**
|
|
@@ -38,11 +38,10 @@ import {
|
|
|
38
38
|
} from './duckdb-table-utils';
|
|
39
39
|
|
|
40
40
|
import {
|
|
41
|
-
|
|
41
|
+
castDuckDBTypesForKepler,
|
|
42
42
|
dropTableIfExists,
|
|
43
43
|
getDuckDBColumnTypes,
|
|
44
44
|
getDuckDBColumnTypesMap,
|
|
45
|
-
getGeometryColumns,
|
|
46
45
|
removeUnsupportedExtensions,
|
|
47
46
|
restoreArrowTable,
|
|
48
47
|
restoreUnsupportedExtensions
|
|
@@ -127,6 +126,7 @@ export class KeplerGlDuckDbTable extends KeplerTable {
|
|
|
127
126
|
await c.query(createTableSql);
|
|
128
127
|
} catch (error) {
|
|
129
128
|
console.log('importRowData', error);
|
|
129
|
+
throw error;
|
|
130
130
|
}
|
|
131
131
|
}
|
|
132
132
|
|
|
@@ -143,9 +143,11 @@ export class KeplerGlDuckDbTable extends KeplerTable {
|
|
|
143
143
|
FROM ST_READ('${this.id}', keep_wkb = TRUE);
|
|
144
144
|
ALTER TABLE '${this.label}' RENAME '${DUCKDB_WKB_COLUMN}' TO '${KEPLER_GEOM_FROM_GEOJSON_COLUMN}';
|
|
145
145
|
`;
|
|
146
|
+
|
|
146
147
|
await c.query(createTableSql);
|
|
147
148
|
} catch (error) {
|
|
148
149
|
console.error('importGeoJsonData', error);
|
|
150
|
+
throw error;
|
|
149
151
|
}
|
|
150
152
|
|
|
151
153
|
return {
|
|
@@ -180,6 +182,7 @@ export class KeplerGlDuckDbTable extends KeplerTable {
|
|
|
180
182
|
// Known issues:
|
|
181
183
|
// 1) Arrow Type with extension name: geoarrow.point and format: +w:2 is not currently supported in DuckDB.
|
|
182
184
|
console.error('importArrowData', error);
|
|
185
|
+
throw error;
|
|
183
186
|
}
|
|
184
187
|
|
|
185
188
|
return {
|
|
@@ -236,8 +239,7 @@ export class KeplerGlDuckDbTable extends KeplerTable {
|
|
|
236
239
|
|
|
237
240
|
const duckDbColumns = await getDuckDBColumnTypes(c, tableName);
|
|
238
241
|
const tableDuckDBTypes = getDuckDBColumnTypesMap(duckDbColumns);
|
|
239
|
-
const
|
|
240
|
-
const adjustedQuery = constructST_asWKBQuery(tableName, columnsToConvertToWKB);
|
|
242
|
+
const adjustedQuery = castDuckDBTypesForKepler(tableName, duckDbColumns);
|
|
241
243
|
const arrowResult = await c.query(adjustedQuery);
|
|
242
244
|
|
|
243
245
|
// TODO if format is an arrow table then just use the original one, instead of the new table from the query?
|
|
@@ -252,6 +254,7 @@ export class KeplerGlDuckDbTable extends KeplerTable {
|
|
|
252
254
|
.filter(col => col) as arrow.Vector[];
|
|
253
255
|
} catch (error) {
|
|
254
256
|
console.error('DuckDB table: createTableAndGetArrow', error);
|
|
257
|
+
throw error;
|
|
255
258
|
}
|
|
256
259
|
|
|
257
260
|
await c.close();
|
package/src/effects/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kepler.gl/effects",
|
|
3
3
|
"author": "Shan He <shan@uber.com>",
|
|
4
|
-
"version": "3.1.
|
|
4
|
+
"version": "3.1.8",
|
|
5
5
|
"description": "kepler.gl viaual effects",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"main": "dist/index.js",
|
|
@@ -31,10 +31,10 @@
|
|
|
31
31
|
],
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"@deck.gl/core": "^8.9.27",
|
|
34
|
-
"@kepler.gl/common-utils": "3.1.
|
|
35
|
-
"@kepler.gl/constants": "3.1.
|
|
36
|
-
"@kepler.gl/types": "3.1.
|
|
37
|
-
"@kepler.gl/utils": "3.1.
|
|
34
|
+
"@kepler.gl/common-utils": "3.1.8",
|
|
35
|
+
"@kepler.gl/constants": "3.1.8",
|
|
36
|
+
"@kepler.gl/types": "3.1.8",
|
|
37
|
+
"@kepler.gl/utils": "3.1.8",
|
|
38
38
|
"@luma.gl/core": "^8.5.20",
|
|
39
39
|
"@luma.gl/shadertools": "^8.5.20",
|
|
40
40
|
"moment-timezone": "^0.5.35",
|
|
@@ -105,6 +105,9 @@ var geoFieldAccessor = function geoFieldAccessor(_ref3) {
|
|
|
105
105
|
var defaultElevation = exports.defaultElevation = 500;
|
|
106
106
|
var defaultLineWidth = exports.defaultLineWidth = 1;
|
|
107
107
|
var defaultRadius = exports.defaultRadius = 1;
|
|
108
|
+
|
|
109
|
+
// don't use strokes by default for datasets with large number of polygons
|
|
110
|
+
var DEFAULT_POLYGON_STROKE_LIMIT = 100000;
|
|
108
111
|
var COLUMN_MODE_TABLE = exports.COLUMN_MODE_TABLE = 'table';
|
|
109
112
|
var SUPPORTED_COLUMN_MODES = [{
|
|
110
113
|
key: _geojsonUtils.COLUMN_MODE_GEOJSON,
|
|
@@ -538,7 +541,7 @@ var GeoJsonLayer = exports["default"] = /*#__PURE__*/function (_Layer) {
|
|
|
538
541
|
// set both fill and stroke to true
|
|
539
542
|
return this.updateLayerVisConfig({
|
|
540
543
|
filled: true,
|
|
541
|
-
stroked:
|
|
544
|
+
stroked: dataContainer.numRows() < DEFAULT_POLYGON_STROKE_LIMIT,
|
|
542
545
|
strokeColor: _baseLayer.colorMaker.next().value
|
|
543
546
|
});
|
|
544
547
|
} else if (featureTypes && featureTypes.point) {
|
|
@@ -685,4 +688,4 @@ var GeoJsonLayer = exports["default"] = /*#__PURE__*/function (_Layer) {
|
|
|
685
688
|
}
|
|
686
689
|
}]);
|
|
687
690
|
}(_baseLayer["default"]);
|
|
688
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfaGVscGVycyIsInJlcXVpcmUiLCJfYm9vbGVhbldpdGhpbiIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfdW5pcSIsIl90eXBlQW5hbHl6ZXIiLCJfYmFzZUxheWVyIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfbGF5ZXJzIiwiX2dlb2pzb25VdGlscyIsIl9sYXllclV0aWxzIiwiX2dlb2pzb25MYXllckljb24iLCJfY29uc3RhbnRzIiwiX3V0aWxzIiwiX2RlY2tnbExheWVycyIsIl9nZW9qc29uSW5mb01vZGFsIiwiX2V4Y2x1ZGVkIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiX2NhbGxTdXBlciIsIm8iLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsImFwcGx5IiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJfc3VwZXJQcm9wR2V0IiwicCIsIl9nZXQyIiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiU1VQUE9SVEVEX0FOQUxZWkVSX1RZUEVTIiwiREFUQV9UWVBFUyIsIkdFT01FVFJZIiwiR0VPTUVUUllfRlJPTV9TVFJJTkciLCJQQUlSX0dFT01FVFJZX0ZST01fU1RSSU5HIiwiZ2VvanNvblZpc0NvbmZpZ3MiLCJleHBvcnRzIiwib3BhY2l0eSIsInN0cm9rZU9wYWNpdHkiLCJMQVlFUl9WSVNfQ09ORklHUyIsInByb3BlcnR5IiwidGhpY2tuZXNzIiwiZGVmYXVsdFZhbHVlIiwic3Ryb2tlQ29sb3IiLCJjb2xvclJhbmdlIiwic3Ryb2tlQ29sb3JSYW5nZSIsInJhZGl1cyIsInNpemVSYW5nZSIsInJhZGl1c1JhbmdlIiwiaGVpZ2h0UmFuZ2UiLCJlbGV2YXRpb25TY2FsZSIsInN0cm9rZWQiLCJmaWxsZWQiLCJlbmFibGUzZCIsIndpcmVmcmFtZSIsImZpeGVkSGVpZ2h0IiwiZ2VvSnNvblJlcXVpcmVkQ29sdW1ucyIsImZlYXR1cmVBY2Nlc3NvciIsIl9yZWYiLCJnZW9qc29uIiwiZGMiLCJkIiwidmFsdWVBdCIsImluZGV4IiwiZmllbGRJZHgiLCJnZW9Db2x1bW5BY2Nlc3NvciIsIl9yZWYyIiwiX2RjJGdldENvbHVtbiIsImdldENvbHVtbiIsImdldFRhYmxlTW9kZVZhbHVlQWNjZXNzb3IiLCJmZWF0dXJlIiwiZmllbGQiLCJwcm9wZXJ0aWVzIiwidmFsdWVzIiwibWFwIiwidiIsInZhbHVlQWNjZXNzb3IiLCJnZXRUYWJsZU1vZGVGaWVsZFZhbHVlIiwiZGF0YSIsInJ2IiwiZGVmYXVsdEdldEZpZWxkVmFsdWUiLCJnZW9GaWVsZEFjY2Vzc29yIiwiX3JlZjMiLCJnZXRGaWVsZCIsImRlZmF1bHRFbGV2YXRpb24iLCJkZWZhdWx0TGluZVdpZHRoIiwiZGVmYXVsdFJhZGl1cyIsIkNPTFVNTl9NT0RFX1RBQkxFIiwiU1VQUE9SVEVEX0NPTFVNTl9NT0RFUyIsImtleSIsIkNPTFVNTl9NT0RFX0dFT0pTT04iLCJsYWJlbCIsInJlcXVpcmVkQ29sdW1ucyIsIm9wdGlvbmFsQ29sdW1ucyIsIkRFRkFVTFRfQ09MVU1OX01PREUiLCJHZW9Kc29uTGF5ZXIiLCJfTGF5ZXIiLCJwcm9wcyIsIl90aGlzIiwiX2NsYXNzQ2FsbENoZWNrMiIsInJlZ2lzdGVyVmlzQ29uZmlnIiwiZ2V0UG9zaXRpb25BY2Nlc3NvciIsImRhdGFDb250YWluZXIiLCJjb25maWciLCJjb2x1bW5zIiwiX2xheWVySW5mb01vZGFsIiwiR2VvanNvbkluZm9Nb2RhbEZhY3RvcnkiLCJfaW5oZXJpdHMyIiwiX2NyZWF0ZUNsYXNzMiIsInR5cGUiLCJHZW9qc29uTGF5ZXJJY29uIiwiZGVmYXVsdFBvaW50Q29sdW1uUGFpcnMiLCJpZCIsInRlbXBsYXRlIiwibW9kYWxQcm9wcyIsInRpdGxlIiwidmFsdWUiLCJhY2Nlc3NWU0ZpZWxkVmFsdWUiLCJjb2x1bW5Nb2RlIiwidmlzdWFsQ2hhbm5lbHMiLCJjb2xvciIsImFjY2Vzc29yIiwiY29uZGl0aW9uIiwidmlzQ29uZmlnIiwibnVsbFZhbHVlIiwiZ2V0QXR0cmlidXRlVmFsdWUiLCJmaWxsQ29sb3IiLCJzY2FsZSIsImRvbWFpbiIsInJhbmdlIiwiY2hhbm5lbFNjYWxlVHlwZSIsIkNIQU5ORUxfU0NBTEVTIiwibGluZUNvbG9yIiwic2l6ZSIsImxpbmVXaWR0aCIsImhlaWdodCIsImZpeGVkIiwiZWxldmF0aW9uIiwiZ2V0RGVmYXVsdExheWVyQ29uZmlnIiwiX3Byb3BzJGNvbHVtbk1vZGUiLCJkZWZhdWx0TGF5ZXJDb25maWciLCJoZWlnaHRGaWVsZCIsImhlaWdodERvbWFpbiIsImhlaWdodFNjYWxlIiwicmFkaXVzRmllbGQiLCJyYWRpdXNEb21haW4iLCJyYWRpdXNTY2FsZSIsInN0cm9rZUNvbG9yRmllbGQiLCJzdHJva2VDb2xvckRvbWFpbiIsInN0cm9rZUNvbG9yU2NhbGUiLCJjb2xvclVJIiwiREVGQVVMVF9DT0xPUl9VSSIsImdldEhvdmVyRGF0YSIsIm9iamVjdCIsIl9vYmplY3QkcHJvcGVydGllcyIsImdlb0Fycm93TW9kZSIsInJvdyIsImdldEZpbHRlcmVkSXRlbUNvdW50IiwiZmlsdGVyZWRJdGVtQ291bnQiLCJwb2x5Z29uQ291bnQiLCJjb25jYXQiLCJsaW5lc3RyaW5nQ291bnQiLCJwb2ludENvdW50IiwiY2FsY3VsYXRlRGF0YUF0dHJpYnV0ZSIsImRhdGFzZXQiLCJfdGhpczIiLCJmaWVsZElzR2VvQXJyb3ciLCJmaWx0ZXJlZEluZGV4IiwibnVtUm93cyIsIlVpbnQ4Q2xhbXBlZEFycmF5IiwiZmlsbCIsImlzUmFuZ2UiLCJmaWx0ZXJlZEluZGV4VHJpZ2dlciIsImRhdGFUb0ZlYXR1cmUiLCJhcHBseUZpbHRlcnNUb1RhYmxlQ29sdW1ucyIsImZvcm1hdExheWVyRGF0YSIsImRhdGFzZXRzIiwib2xkTGF5ZXJEYXRhIiwiX3RoaXMzIiwiZGF0YUlkIiwiX2RhdGFzZXRzJHRoaXMkY29uZmlnIiwiZ3B1RmlsdGVyIiwiX3RoaXMkdXBkYXRlRGF0YSIsInVwZGF0ZURhdGEiLCJmaWx0ZXJWYWx1ZUFjY2Vzc29yIiwiZGF0YUFjY2Vzc29yIiwiZmllbGRJbmRleCIsImluZGV4QWNjZXNzb3IiLCJmIiwiYWNjZXNzb3JzIiwiZ2V0QXR0cmlidXRlQWNjZXNzb3JzIiwiaXNGaWx0ZXJlZEFjY2Vzc29yIiwiZ2V0RmlsdGVyVmFsdWUiLCJnZXRGaWx0ZXJlZCIsImlzSW5Qb2x5Z29uIiwicG9seWdvbiIsIl9wb2x5Z29uJHByb3BlcnRpZXMiLCJfcG9seWdvbiRwcm9wZXJ0aWVzMiIsImNlbnRyb2lkcyIsImlzUmVhY3RhbmdsZVNlYXJjaEJveCIsInNoYXBlIiwicG9pbnQiLCJiYm94IiwiX3BvbHlnb24kcHJvcGVydGllczMiLCJfcmVmNSIsIl9yZWY2IiwiX3NsaWNlZFRvQXJyYXkyIiwibWluWCIsIm1pblkiLCJtYXhYIiwibWF4WSIsImJvb2xlYW5XaXRoaW4iLCJ0dXJmUG9pbnQiLCJ1cGRhdGVMYXllck1ldGEiLCJBcnJvd0RhdGFDb250YWluZXIiLCJnZW9Db2x1bW4iLCJnZW9GaWVsZCIsIm51bUNodW5rcyIsImlzSW5jcmVtZW50YWxMb2FkIiwiX2dldEdlb2pzb25MYXllck1ldGFGIiwiZ2V0R2VvanNvbkxheWVyTWV0YUZyb21BcnJvdyIsImNodW5rSW5kZXgiLCJib3VuZHMiLCJmaXhlZFJhZGl1cyIsImZlYXR1cmVUeXBlcyIsInVwZGF0ZU1ldGEiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwiZ2V0RmVhdHVyZSIsIl9nZXRHZW9qc29uTGF5ZXJNZXRhIiwiZ2V0R2VvanNvbkxheWVyTWV0YSIsInNldEluaXRpYWxMYXllckNvbmZpZyIsImNvbHVtbkNvbmZpZyIsImRldGVjdFRhYmxlQ29sdW1ucyIsInVwZGF0ZUxheWVyQ29uZmlnIiwibWV0YSIsInVwZGF0ZUxheWVyVmlzQ29uZmlnIiwiY29sb3JNYWtlciIsIm5leHQiLCJpc0xheWVySG92ZXJlZCIsIm9iamVjdEluZm8iLCJpc0xheWVySG92ZXJlZEZyb21BcnJvdyIsImhhc0hvdmVyZWRPYmplY3QiLCJnZXRIb3ZlcmVkT2JqZWN0RnJvbUFycm93IiwiZ2V0RWxldmF0aW9uWm9vbUZhY3RvciIsIl9yZWY3Iiwiem9vbSIsIl9yZWY3JHpvb21PZmZzZXQiLCJ6b29tT2Zmc2V0IiwiTWF0aCIsInBvdyIsIm1heCIsInJlbmRlckxheWVyIiwib3B0cyIsIl90aGlzNCIsImRhdGFQcm9wcyIsIm9iamVjdEhvdmVyZWQiLCJtYXBTdGF0ZSIsImludGVyYWN0aW9uQ29uZmlnIiwiX3RoaXMkbWV0YSIsImdldFJhZGl1c1NjYWxlQnlab29tIiwiem9vbUZhY3RvciIsImdldFpvb21GYWN0b3IiLCJlbGVab29tRmFjdG9yIiwibGF5ZXJQcm9wcyIsImxpbmVXaWR0aFNjYWxlIiwicG9pbnRSYWRpdXNTY2FsZSIsImxpbmVNaXRlckxpbWl0IiwidXBkYXRlVHJpZ2dlcnMiLCJnZXRWaXN1YWxDaGFubmVsVXBkYXRlVHJpZ2dlcnMiLCJmaWx0ZXJWYWx1ZVVwZGF0ZVRyaWdnZXJzIiwiZGVmYXVsdExheWVyUHJvcHMiLCJnZXREZWZhdWx0RGVja0xheWVyUHJvcHMiLCJvcGFPdmVyd3JpdGUiLCJwaWNrYWJsZSIsInRvb2x0aXAiLCJlbmFibGVkIiwiaG92ZXJlZE9iamVjdCIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllczIiLCJkZWNrTGF5ZXJEYXRhIiwiZGVja0xheWVycyIsIkRlY2tHTEdlb0pzb25MYXllciIsImhpZ2hsaWdodENvbG9yIiwiSElHSExJR0hfQ09MT1JfM0QiLCJhdXRvSGlnaGxpZ2h0IiwiZXh0cnVkZWQiLCJ3cmFwTG9uZ2l0dWRlIiwiY2FwUm91bmRlZCIsImpvaW50Um91bmRlZCIsImV4dGVuc2lvbnMiLCJGaWx0ZXJBcnJvd0V4dGVuc2lvbiIsIl9zdWJMYXllclByb3BzIiwibGluZSIsImxpbmVzdHJpbmdzIiwicG9pbnRzIiwibGluZU9wYWNpdHkiLCJnZXREZWZhdWx0SG92ZXJMYXllclByb3BzIiwidmlzaWJsZSIsImdldExpbmVXaWR0aCIsImdldFBvaW50UmFkaXVzIiwiZ2V0RWxldmF0aW9uIiwiZ2V0TGluZUNvbG9yIiwiZ2V0RmlsbENvbG9yIiwiZmluZERlZmF1bHRMYXllclByb3BzIiwiX3JlZjgiLCJfdGhpczUiLCJfcmVmOCRmaWVsZHMiLCJmaWVsZHMiLCJnZW9qc29uQ29sdW1ucyIsImFuYWx5emVyVHlwZSIsIm5hbWUiLCJkZWZhdWx0Q29sdW1ucyIsInVuaXEiLCJHRU9KU09OX0ZJRUxEUyIsImZvdW5kQ29sdW1ucyIsImZpbmREZWZhdWx0Q29sdW1uRmllbGQiLCJyZXBsYWNlIiwiaXNWaXNpYmxlIiwiTGF5ZXIiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2VvanNvbi1sYXllci9nZW9qc29uLWxheWVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCAqIGFzIGFycm93IGZyb20gJ2FwYWNoZS1hcnJvdyc7XG5pbXBvcnQge3BvaW50IGFzIHR1cmZQb2ludH0gZnJvbSAnQHR1cmYvaGVscGVycyc7XG5pbXBvcnQgYm9vbGVhbldpdGhpbiBmcm9tICdAdHVyZi9ib29sZWFuLXdpdGhpbic7XG5pbXBvcnQge0ZlYXR1cmUsIFBvbHlnb259IGZyb20gJ2dlb2pzb24nO1xuaW1wb3J0IHVuaXEgZnJvbSAnbG9kYXNoL3VuaXEnO1xuaW1wb3J0IHtEQVRBX1RZUEVTfSBmcm9tICd0eXBlLWFuYWx5emVyJztcbmltcG9ydCBMYXllciwge1xuICBjb2xvck1ha2VyLFxuICBkZWZhdWx0R2V0RmllbGRWYWx1ZSxcbiAgTGF5ZXJCYXNlQ29uZmlnLFxuICBMYXllckJhc2VDb25maWdQYXJ0aWFsLFxuICBMYXllckNvbG9yQ29uZmlnLFxuICBMYXllckhlaWdodENvbmZpZyxcbiAgTGF5ZXJSYWRpdXNDb25maWcsXG4gIExheWVyU2l6ZUNvbmZpZyxcbiAgTGF5ZXJTdHJva2VDb2xvckNvbmZpZ1xufSBmcm9tICcuLi9iYXNlLWxheWVyJztcbmltcG9ydCB7R2VvSnNvbkxheWVyIGFzIERlY2tHTEdlb0pzb25MYXllcn0gZnJvbSAnQGRlY2suZ2wvbGF5ZXJzJztcbmltcG9ydCB7XG4gIGdldEdlb2pzb25MYXllck1ldGEsXG4gIEdlb2pzb25EYXRhTWFwcyxcbiAgRGVja0dsR2VvVHlwZXMsXG4gIGRldGVjdFRhYmxlQ29sdW1ucyxcbiAgQ09MVU1OX01PREVfR0VPSlNPTixcbiAgYXBwbHlGaWx0ZXJzVG9UYWJsZUNvbHVtbnMsXG4gIGZpZWxkSXNHZW9BcnJvd1xufSBmcm9tICcuL2dlb2pzb24tdXRpbHMnO1xuaW1wb3J0IHtcbiAgZ2V0R2VvanNvbkxheWVyTWV0YUZyb21BcnJvdyxcbiAgaXNMYXllckhvdmVyZWRGcm9tQXJyb3csXG4gIGdldEhvdmVyZWRPYmplY3RGcm9tQXJyb3dcbn0gZnJvbSAnLi4vbGF5ZXItdXRpbHMnO1xuaW1wb3J0IEdlb2pzb25MYXllckljb24gZnJvbSAnLi9nZW9qc29uLWxheWVyLWljb24nO1xuaW1wb3J0IHtcbiAgR0VPSlNPTl9GSUVMRFMsXG4gIEhJR0hMSUdIX0NPTE9SXzNELFxuICBDSEFOTkVMX1NDQUxFUyxcbiAgTEFZRVJfVklTX0NPTkZJR1MsXG4gIERFRkFVTFRfQ09MT1JfVUlcbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgQ29sb3JSYW5nZSxcbiAgVmlzQ29uZmlnTnVtYmVyLFxuICBWaXNDb25maWdDb2xvclNlbGVjdCxcbiAgVmlzQ29uZmlnQ29sb3JSYW5nZSxcbiAgVmlzQ29uZmlnUmFuZ2UsXG4gIFZpc0NvbmZpZ0Jvb2xlYW4sXG4gIE1lcmdlLFxuICBSR0JDb2xvcixcbiAgUHJvdG9EYXRhc2V0RmllbGQsXG4gIExheWVyQ29sdW1uXG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtLZXBsZXJUYWJsZX0gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5pbXBvcnQge0RhdGFDb250YWluZXJJbnRlcmZhY2UsIEFycm93RGF0YUNvbnRhaW5lcn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge0ZpbHRlckFycm93RXh0ZW5zaW9ufSBmcm9tICdAa2VwbGVyLmdsL2RlY2tnbC1sYXllcnMnO1xuaW1wb3J0IEdlb2pzb25JbmZvTW9kYWxGYWN0b3J5IGZyb20gJy4vZ2VvanNvbi1pbmZvLW1vZGFsJztcblxuY29uc3QgU1VQUE9SVEVEX0FOQUxZWkVSX1RZUEVTID0ge1xuICBbREFUQV9UWVBFUy5HRU9NRVRSWV06IHRydWUsXG4gIFtEQVRBX1RZUEVTLkdFT01FVFJZX0ZST01fU1RSSU5HXTogdHJ1ZSxcbiAgW0RBVEFfVFlQRVMuUEFJUl9HRU9NRVRSWV9GUk9NX1NUUklOR106IHRydWVcbn07XG5cbmV4cG9ydCBjb25zdCBnZW9qc29uVmlzQ29uZmlnczoge1xuICBvcGFjaXR5OiAnb3BhY2l0eSc7XG4gIHN0cm9rZU9wYWNpdHk6IFZpc0NvbmZpZ051bWJlcjtcbiAgdGhpY2tuZXNzOiBWaXNDb25maWdOdW1iZXI7XG4gIHN0cm9rZUNvbG9yOiAnc3Ryb2tlQ29sb3InO1xuICBjb2xvclJhbmdlOiAnY29sb3JSYW5nZSc7XG4gIHN0cm9rZUNvbG9yUmFuZ2U6ICdzdHJva2VDb2xvclJhbmdlJztcbiAgcmFkaXVzOiAncmFkaXVzJztcblxuICBzaXplUmFuZ2U6ICdzdHJva2VXaWR0aFJhbmdlJztcbiAgcmFkaXVzUmFuZ2U6ICdyYWRpdXNSYW5nZSc7XG4gIGhlaWdodFJhbmdlOiAnZWxldmF0aW9uUmFuZ2UnO1xuICBlbGV2YXRpb25TY2FsZTogJ2VsZXZhdGlvblNjYWxlJztcbiAgc3Ryb2tlZDogJ3N0cm9rZWQnO1xuICBmaWxsZWQ6ICdmaWxsZWQnO1xuICBlbmFibGUzZDogJ2VuYWJsZTNkJztcbiAgd2lyZWZyYW1lOiAnd2lyZWZyYW1lJztcbiAgZml4ZWRIZWlnaHQ6ICdmaXhlZEhlaWdodCc7XG59ID0ge1xuICBvcGFjaXR5OiAnb3BhY2l0eScsXG4gIHN0cm9rZU9wYWNpdHk6IHtcbiAgICAuLi5MQVlFUl9WSVNfQ09ORklHUy5vcGFjaXR5LFxuICAgIHByb3BlcnR5OiAnc3Ryb2tlT3BhY2l0eSdcbiAgfSxcbiAgdGhpY2tuZXNzOiB7XG4gICAgLi4uTEFZRVJfVklTX0NPTkZJR1MudGhpY2tuZXNzLFxuICAgIGRlZmF1bHRWYWx1ZTogMC41XG4gIH0sXG4gIHN0cm9rZUNvbG9yOiAnc3Ryb2tlQ29sb3InLFxuICBjb2xvclJhbmdlOiAnY29sb3JSYW5nZScsXG4gIHN0cm9rZUNvbG9yUmFuZ2U6ICdzdHJva2VDb2xvclJhbmdlJyxcbiAgcmFkaXVzOiAncmFkaXVzJyxcblxuICBzaXplUmFuZ2U6ICdzdHJva2VXaWR0aFJhbmdlJyxcbiAgcmFkaXVzUmFuZ2U6ICdyYWRpdXNSYW5nZScsXG4gIGhlaWdodFJhbmdlOiAnZWxldmF0aW9uUmFuZ2UnLFxuICBlbGV2YXRpb25TY2FsZTogJ2VsZXZhdGlvblNjYWxlJyxcbiAgc3Ryb2tlZDogJ3N0cm9rZWQnLFxuICBmaWxsZWQ6ICdmaWxsZWQnLFxuICBlbmFibGUzZDogJ2VuYWJsZTNkJyxcbiAgd2lyZWZyYW1lOiAnd2lyZWZyYW1lJyxcbiAgZml4ZWRIZWlnaHQ6ICdmaXhlZEhlaWdodCdcbn07XG5cbmV4cG9ydCB0eXBlIEdlb0pzb25WaXNDb25maWdTZXR0aW5ncyA9IHtcbiAgb3BhY2l0eTogVmlzQ29uZmlnTnVtYmVyO1xuICBzdHJva2VPcGFjaXR5OiBWaXNDb25maWdOdW1iZXI7XG4gIHRoaWNrbmVzczogVmlzQ29uZmlnTnVtYmVyO1xuICBzdHJva2VDb2xvcjogVmlzQ29uZmlnQ29sb3JTZWxlY3Q7XG4gIGNvbG9yUmFuZ2U6IFZpc0NvbmZpZ0NvbG9yUmFuZ2U7XG4gIHN0cm9rZUNvbG9yUmFuZ2U6IFZpc0NvbmZpZ0NvbG9yUmFuZ2U7XG4gIHJhZGl1czogVmlzQ29uZmlnTnVtYmVyO1xuXG4gIHNpemVSYW5nZTogVmlzQ29uZmlnUmFuZ2U7XG4gIHJhZGl1c1JhbmdlOiBWaXNDb25maWdSYW5nZTtcbiAgaGVpZ2h0UmFuZ2U6IFZpc0NvbmZpZ1JhbmdlO1xuICBlbGV2YXRpb25TY2FsZTogVmlzQ29uZmlnTnVtYmVyO1xuICBmaXhlZEhlaWdodDogVmlzQ29uZmlnQm9vbGVhbjtcbiAgc3Ryb2tlZDogVmlzQ29uZmlnQm9vbGVhbjtcbiAgZmlsbGVkOiBWaXNDb25maWdCb29sZWFuO1xuICBlbmFibGUzZDogVmlzQ29uZmlnQm9vbGVhbjtcbiAgd2lyZWZyYW1lOiBWaXNDb25maWdCb29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgR2VvSnNvbkxheWVyQ29sdW1uc0NvbmZpZyA9IHtcbiAgZ2VvanNvbjogTGF5ZXJDb2x1bW47XG59O1xuXG5leHBvcnQgdHlwZSBHZW9Kc29uTGF5ZXJWaXNDb25maWcgPSB7XG4gIG9wYWNpdHk6IG51bWJlcjtcbiAgc3Ryb2tlT3BhY2l0eTogbnVtYmVyO1xuICB0aGlja25lc3M6IG51bWJlcjtcbiAgc3Ryb2tlQ29sb3I6IFJHQkNvbG9yO1xuICBjb2xvclJhbmdlOiBDb2xvclJhbmdlO1xuICBzdHJva2VDb2xvclJhbmdlOiBDb2xvclJhbmdlO1xuICByYWRpdXM6IG51bWJlcjtcblxuICBzaXplUmFuZ2U6IFtudW1iZXIsIG51bWJlcl07XG4gIHJhZGl1c1JhbmdlOiBbbnVtYmVyLCBudW1iZXJdO1xuICBoZWlnaHRSYW5nZTogW251bWJlciwgbnVtYmVyXTtcbiAgZWxldmF0aW9uU2NhbGU6IG51bWJlcjtcbiAgc3Ryb2tlZDogYm9vbGVhbjtcbiAgZmlsbGVkOiBib29sZWFuO1xuICBlbmFibGUzZDogYm9vbGVhbjtcbiAgd2lyZWZyYW1lOiBib29sZWFuO1xuICBmaXhlZEhlaWdodDogYm9vbGVhbjtcbn07XG5cbnR5cGUgR2VvSnNvbkxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZyA9IExheWVyQ29sb3JDb25maWcgJlxuICBMYXllclN0cm9rZUNvbG9yQ29uZmlnICZcbiAgTGF5ZXJTaXplQ29uZmlnICZcbiAgTGF5ZXJIZWlnaHRDb25maWcgJlxuICBMYXllclJhZGl1c0NvbmZpZztcbmV4cG9ydCB0eXBlIEdlb0pzb25MYXllckNvbmZpZyA9IE1lcmdlPFxuICBMYXllckJhc2VDb25maWcsXG4gIHtjb2x1bW5zOiBHZW9Kc29uTGF5ZXJDb2x1bW5zQ29uZmlnOyB2aXNDb25maWc6IEdlb0pzb25MYXllclZpc0NvbmZpZ31cbj4gJlxuICBHZW9Kc29uTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnO1xuXG5leHBvcnQgdHlwZSBHZW9Kc29uTGF5ZXJNZXRhID0ge1xuICBmZWF0dXJlVHlwZXM/OiBEZWNrR2xHZW9UeXBlcztcbiAgZml4ZWRSYWRpdXM/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGNvbnN0IGdlb0pzb25SZXF1aXJlZENvbHVtbnM6IFsnZ2VvanNvbiddID0gWydnZW9qc29uJ107XG5cbnR5cGUgT2JqZWN0SW5mbyA9IHtcbiAgaW5kZXg6IG51bWJlcjtcbiAgb2JqZWN0PzogRmVhdHVyZSB8IHVuZGVmaW5lZDtcbiAgcGlja2VkOiBib29sZWFuO1xuICBsYXllcjogTGF5ZXI7XG4gIHJhZGl1cz86IG51bWJlcjtcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgY29uc3QgZmVhdHVyZUFjY2Vzc29yID1cbiAgKHtnZW9qc29ufTogR2VvSnNvbkxheWVyQ29sdW1uc0NvbmZpZykgPT5cbiAgKGRjOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlKSA9PlxuICBkID0+XG4gICAgZGMudmFsdWVBdChkLmluZGV4LCBnZW9qc29uLmZpZWxkSWR4KTtcblxuY29uc3QgZ2VvQ29sdW1uQWNjZXNzb3IgPVxuICAoe2dlb2pzb259OiBHZW9Kc29uTGF5ZXJDb2x1bW5zQ29uZmlnKSA9PlxuICAoZGM6IERhdGFDb250YWluZXJJbnRlcmZhY2UpOiBhcnJvdy5WZWN0b3IgfCBudWxsID0+XG4gICAgZGMuZ2V0Q29sdW1uPy4oZ2VvanNvbi5maWVsZElkeCkgYXMgYXJyb3cuVmVjdG9yO1xuXG5jb25zdCBnZXRUYWJsZU1vZGVWYWx1ZUFjY2Vzc29yID0gZmVhdHVyZSA9PiB7XG4gIC8vIENhbGxlZCBmcm9tIGdwdS1maWx0ZXItdXRpbHMuZ2V0RmlsdGVyVmFsdWVBY2Nlc3NvcigpXG4gIHJldHVybiBmaWVsZCA9PiBmZWF0dXJlLnByb3BlcnRpZXMudmFsdWVzLm1hcCh2ID0+IGZpZWxkLnZhbHVlQWNjZXNzb3IodikpO1xufTtcblxuY29uc3QgZ2V0VGFibGVNb2RlRmllbGRWYWx1ZSA9IChmaWVsZCwgZGF0YSkgPT4ge1xuICBsZXQgcnY7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJ2ID0gZGF0YShmaWVsZCk7XG4gIH0gZWxzZSB7XG4gICAgcnYgPSBkZWZhdWx0R2V0RmllbGRWYWx1ZShmaWVsZCwgZGF0YSk7XG4gIH1cbiAgcmV0dXJuIHJ2O1xufTtcblxuY29uc3QgZ2VvRmllbGRBY2Nlc3NvciA9XG4gICh7Z2VvanNvbn06IEdlb0pzb25MYXllckNvbHVtbnNDb25maWcpID0+XG4gIChkYzogRGF0YUNvbnRhaW5lckludGVyZmFjZSk6IFByb3RvRGF0YXNldEZpZWxkIHwgbnVsbCA9PlxuICAgIGRjLmdldEZpZWxkID8gZGMuZ2V0RmllbGQoZ2VvanNvbi5maWVsZElkeCkgOiBudWxsO1xuXG4vLyBhY2Nlc3MgZmVhdHVyZSBwcm9wZXJ0aWVzIGZyb20gZ2VvanNvbiBzdWIgbGF5ZXJcbmV4cG9ydCBjb25zdCBkZWZhdWx0RWxldmF0aW9uID0gNTAwO1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRMaW5lV2lkdGggPSAxO1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRSYWRpdXMgPSAxO1xuXG5leHBvcnQgY29uc3QgQ09MVU1OX01PREVfVEFCTEUgPSAndGFibGUnO1xuY29uc3QgU1VQUE9SVEVEX0NPTFVNTl9NT0RFUyA9IFtcbiAge1xuICAgIGtleTogQ09MVU1OX01PREVfR0VPSlNPTixcbiAgICBsYWJlbDogJ0dlb0pTT04nLFxuICAgIHJlcXVpcmVkQ29sdW1uczogWydnZW9qc29uJ11cbiAgfSxcbiAge1xuICAgIGtleTogQ09MVU1OX01PREVfVEFCTEUsXG4gICAgbGFiZWw6ICdUYWJsZSBjb2x1bW5zJyxcbiAgICByZXF1aXJlZENvbHVtbnM6IFsnaWQnLCAnbGF0JywgJ2xuZyddLFxuICAgIG9wdGlvbmFsQ29sdW1uczogWydhbHRpdHVkZScsICdzb3J0QnknXVxuICB9XG5dO1xuY29uc3QgREVGQVVMVF9DT0xVTU5fTU9ERSA9IENPTFVNTl9NT0RFX0dFT0pTT047XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdlb0pzb25MYXllciBleHRlbmRzIExheWVyIHtcbiAgZGVjbGFyZSBjb25maWc6IEdlb0pzb25MYXllckNvbmZpZztcbiAgZGVjbGFyZSB2aXNDb25maWdTZXR0aW5nczogR2VvSnNvblZpc0NvbmZpZ1NldHRpbmdzO1xuICBkZWNsYXJlIG1ldGE6IEdlb0pzb25MYXllck1ldGE7XG4gIGRlY2xhcmUgZ2VvQXJyb3dNb2RlOiBib29sZWFuO1xuXG4gIGRhdGFUb0ZlYXR1cmU6IEdlb2pzb25EYXRhTWFwcyA9IFtdO1xuICBkYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlIHwgbnVsbCA9IG51bGw7XG4gIGZpbHRlcmVkSW5kZXg6IFVpbnQ4Q2xhbXBlZEFycmF5IHwgbnVsbCA9IG51bGw7XG4gIGZpbHRlcmVkSW5kZXhUcmlnZ2VyOiBudW1iZXJbXSB8IG51bGwgPSBudWxsO1xuICBjZW50cm9pZHM6IEFycmF5PG51bWJlcltdIHwgbnVsbD4gPSBbXTtcblxuICBfbGF5ZXJJbmZvTW9kYWw6IHtcbiAgICBbQ09MVU1OX01PREVfVEFCTEVdOiAoKSA9PiBSZWFjdC5KU1guRWxlbWVudDtcbiAgICBbQ09MVU1OX01PREVfR0VPSlNPTl06ICgpID0+IFJlYWN0LkpTWC5FbGVtZW50O1xuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5yZWdpc3RlclZpc0NvbmZpZyhnZW9qc29uVmlzQ29uZmlncyk7XG4gICAgdGhpcy5nZXRQb3NpdGlvbkFjY2Vzc29yID0gKGRhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2UpID0+XG4gICAgICBmZWF0dXJlQWNjZXNzb3IodGhpcy5jb25maWcuY29sdW1ucykoZGF0YUNvbnRhaW5lcik7XG4gICAgdGhpcy5fbGF5ZXJJbmZvTW9kYWwgPSB7XG4gICAgICBbQ09MVU1OX01PREVfVEFCTEVdOiBHZW9qc29uSW5mb01vZGFsRmFjdG9yeShDT0xVTU5fTU9ERV9UQUJMRSksXG4gICAgICBbQ09MVU1OX01PREVfR0VPSlNPTl06IEdlb2pzb25JbmZvTW9kYWxGYWN0b3J5KENPTFVNTl9NT0RFX0dFT0pTT04pXG4gICAgfTtcbiAgfVxuXG4gIGdldCB0eXBlKCkge1xuICAgIHJldHVybiBHZW9Kc29uTGF5ZXIudHlwZTtcbiAgfVxuICBzdGF0aWMgZ2V0IHR5cGUoKTogJ2dlb2pzb24nIHtcbiAgICByZXR1cm4gJ2dlb2pzb24nO1xuICB9XG5cbiAgZ2V0IG5hbWUoKTogJ1BvbHlnb24nIHtcbiAgICByZXR1cm4gJ1BvbHlnb24nO1xuICB9XG5cbiAgZ2V0IGxheWVySWNvbigpIHtcbiAgICByZXR1cm4gR2VvanNvbkxheWVySWNvbjtcbiAgfVxuXG4gIGdldCBjb2x1bW5QYWlycygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9pbnRDb2x1bW5QYWlycztcbiAgfVxuXG4gIGdldCBzdXBwb3J0ZWRDb2x1bW5Nb2RlcygpIHtcbiAgICByZXR1cm4gU1VQUE9SVEVEX0NPTFVNTl9NT0RFUztcbiAgfVxuXG4gIGdldCBsYXllckluZm9Nb2RhbCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgW0NPTFVNTl9NT0RFX0dFT0pTT05dOiB7XG4gICAgICAgIGlkOiAnaWNvbkluZm8nLFxuICAgICAgICB0ZW1wbGF0ZTogdGhpcy5fbGF5ZXJJbmZvTW9kYWxbQ09MVU1OX01PREVfR0VPSlNPTl0sXG4gICAgICAgIG1vZGFsUHJvcHM6IHtcbiAgICAgICAgICB0aXRsZTogJ21vZGFsLnBvbHlnb25JbmZvLnRpdGxlJ1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgW0NPTFVNTl9NT0RFX1RBQkxFXToge1xuICAgICAgICBpZDogJ2ljb25JbmZvJyxcbiAgICAgICAgdGVtcGxhdGU6IHRoaXMuX2xheWVySW5mb01vZGFsW0NPTFVNTl9NT0RFX1RBQkxFXSxcbiAgICAgICAgbW9kYWxQcm9wczoge1xuICAgICAgICAgIHRpdGxlOiAnbW9kYWwucG9seWdvbkluZm8udGl0bGVUYWJsZSdcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBhY2Nlc3NWU0ZpZWxkVmFsdWUoKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnLmNvbHVtbk1vZGUgPT09IENPTFVNTl9NT0RFX0dFT0pTT04pIHtcbiAgICAgIHJldHVybiBkZWZhdWx0R2V0RmllbGRWYWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGdldFRhYmxlTW9kZUZpZWxkVmFsdWU7XG4gIH1cblxuICBnZXQgdmlzdWFsQ2hhbm5lbHMoKSB7XG4gICAgY29uc3QgdmlzdWFsQ2hhbm5lbHMgPSBzdXBlci52aXN1YWxDaGFubmVscztcbiAgICByZXR1cm4ge1xuICAgICAgY29sb3I6IHtcbiAgICAgICAgLi4udmlzdWFsQ2hhbm5lbHMuY29sb3IsXG4gICAgICAgIGFjY2Vzc29yOiAnZ2V0RmlsbENvbG9yJyxcbiAgICAgICAgY29uZGl0aW9uOiBjb25maWcgPT4gY29uZmlnLnZpc0NvbmZpZy5maWxsZWQsXG4gICAgICAgIG51bGxWYWx1ZTogdmlzdWFsQ2hhbm5lbHMuY29sb3IubnVsbFZhbHVlLFxuICAgICAgICBnZXRBdHRyaWJ1dGVWYWx1ZTogY29uZmlnID0+IGQgPT4gZC5wcm9wZXJ0aWVzLmZpbGxDb2xvciB8fCBjb25maWcuY29sb3IsXG4gICAgICAgIC8vIHVzZWQgdGhpcyB0byBnZXQgdXBkYXRlVHJpZ2dlcnNcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBjb25maWcgPT4gY29uZmlnLmNvbG9yXG4gICAgICB9LFxuICAgICAgc3Ryb2tlQ29sb3I6IHtcbiAgICAgICAgcHJvcGVydHk6ICdzdHJva2VDb2xvcicsXG4gICAgICAgIGZpZWxkOiAnc3Ryb2tlQ29sb3JGaWVsZCcsXG4gICAgICAgIHNjYWxlOiAnc3Ryb2tlQ29sb3JTY2FsZScsXG4gICAgICAgIGRvbWFpbjogJ3N0cm9rZUNvbG9yRG9tYWluJyxcbiAgICAgICAgcmFuZ2U6ICdzdHJva2VDb2xvclJhbmdlJyxcbiAgICAgICAga2V5OiAnc3Ryb2tlQ29sb3InLFxuICAgICAgICBjaGFubmVsU2NhbGVUeXBlOiBDSEFOTkVMX1NDQUxFUy5jb2xvcixcbiAgICAgICAgYWNjZXNzb3I6ICdnZXRMaW5lQ29sb3InLFxuICAgICAgICBjb25kaXRpb246IGNvbmZpZyA9PiBjb25maWcudmlzQ29uZmlnLnN0cm9rZWQsXG4gICAgICAgIG51bGxWYWx1ZTogdmlzdWFsQ2hhbm5lbHMuY29sb3IubnVsbFZhbHVlLFxuICAgICAgICBnZXRBdHRyaWJ1dGVWYWx1ZTogY29uZmlnID0+IGQgPT5cbiAgICAgICAgICBkLnByb3BlcnRpZXMubGluZUNvbG9yIHx8IGNvbmZpZy52aXNDb25maWcuc3Ryb2tlQ29sb3IgfHwgY29uZmlnLmNvbG9yLFxuICAgICAgICAvLyB1c2VkIHRoaXMgdG8gZ2V0IHVwZGF0ZVRyaWdnZXJzXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogY29uZmlnID0+IGNvbmZpZy52aXNDb25maWcuc3Ryb2tlQ29sb3IgfHwgY29uZmlnLmNvbG9yXG4gICAgICB9LFxuICAgICAgc2l6ZToge1xuICAgICAgICAuLi52aXN1YWxDaGFubmVscy5zaXplLFxuICAgICAgICBwcm9wZXJ0eTogJ3N0cm9rZScsXG4gICAgICAgIGFjY2Vzc29yOiAnZ2V0TGluZVdpZHRoJyxcbiAgICAgICAgY29uZGl0aW9uOiBjb25maWcgPT4gY29uZmlnLnZpc0NvbmZpZy5zdHJva2VkLFxuICAgICAgICBudWxsVmFsdWU6IDAsXG4gICAgICAgIGdldEF0dHJpYnV0ZVZhbHVlOiAoKSA9PiBkID0+IGQucHJvcGVydGllcy5saW5lV2lkdGggfHwgZGVmYXVsdExpbmVXaWR0aFxuICAgICAgfSxcbiAgICAgIGhlaWdodDoge1xuICAgICAgICBwcm9wZXJ0eTogJ2hlaWdodCcsXG4gICAgICAgIGZpZWxkOiAnaGVpZ2h0RmllbGQnLFxuICAgICAgICBzY2FsZTogJ2hlaWdodFNjYWxlJyxcbiAgICAgICAgZG9tYWluOiAnaGVpZ2h0RG9tYWluJyxcbiAgICAgICAgcmFuZ2U6ICdoZWlnaHRSYW5nZScsXG4gICAgICAgIGtleTogJ2hlaWdodCcsXG4gICAgICAgIGZpeGVkOiAnZml4ZWRIZWlnaHQnLFxuICAgICAgICBjaGFubmVsU2NhbGVUeXBlOiBDSEFOTkVMX1NDQUxFUy5zaXplLFxuICAgICAgICBhY2Nlc3NvcjogJ2dldEVsZXZhdGlvbicsXG4gICAgICAgIGNvbmRpdGlvbjogY29uZmlnID0+IGNvbmZpZy52aXNDb25maWcuZW5hYmxlM2QsXG4gICAgICAgIG51bGxWYWx1ZTogMCxcbiAgICAgICAgZ2V0QXR0cmlidXRlVmFsdWU6ICgpID0+IGQgPT4gZC5wcm9wZXJ0aWVzLmVsZXZhdGlvbiB8fCBkZWZhdWx0RWxldmF0aW9uXG4gICAgICB9LFxuICAgICAgcmFkaXVzOiB7XG4gICAgICAgIHByb3BlcnR5OiAncmFkaXVzJyxcbiAgICAgICAgZmllbGQ6ICdyYWRpdXNGaWVsZCcsXG4gICAgICAgIHNjYWxlOiAncmFkaXVzU2NhbGUnLFxuICAgICAgICBkb21haW46ICdyYWRpdXNEb21haW4nLFxuICAgICAgICByYW5nZTogJ3JhZGl1c1JhbmdlJyxcbiAgICAgICAga2V5OiAncmFkaXVzJyxcbiAgICAgICAgY2hhbm5lbFNjYWxlVHlwZTogQ0hBTk5FTF9TQ0FMRVMucmFkaXVzLFxuICAgICAgICBhY2Nlc3NvcjogJ2dldFBvaW50UmFkaXVzJyxcbiAgICAgICAgbnVsbFZhbHVlOiAwLFxuICAgICAgICBnZXRBdHRyaWJ1dGVWYWx1ZTogKCkgPT4gZCA9PiBkLnByb3BlcnRpZXMucmFkaXVzIHx8IGRlZmF1bHRSYWRpdXNcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGZpbmREZWZhdWx0TGF5ZXJQcm9wcyh7bGFiZWwsIGZpZWxkcyA9IFtdfTogS2VwbGVyVGFibGUpIHtcbiAgICBjb25zdCBnZW9qc29uQ29sdW1ucyA9IGZpZWxkc1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgZiA9PlxuICAgICAgICAgIChmLnR5cGUgPT09ICdnZW9qc29uJyB8fCBmLnR5cGUgPT09ICdnZW9hcnJvdycpICYmXG4gICAgICAgICAgZi5hbmFseXplclR5cGUgJiZcbiAgICAgICAgICBTVVBQT1JURURfQU5BTFlaRVJfVFlQRVNbZi5hbmFseXplclR5cGVdXG4gICAgICApXG4gICAgICAubWFwKGYgPT4gZi5uYW1lKTtcblxuICAgIGNvbnN0IGRlZmF1bHRDb2x1bW5zID0ge1xuICAgICAgZ2VvanNvbjogdW5pcShbLi4uR0VPSlNPTl9GSUVMRFMuZ2VvanNvbiwgLi4uZ2VvanNvbkNvbHVtbnNdKVxuICAgIH07XG5cbiAgICBjb25zdCBmb3VuZENvbHVtbnMgPSB0aGlzLmZpbmREZWZhdWx0Q29sdW1uRmllbGQoZGVmYXVsdENvbHVtbnMsIGZpZWxkcyk7XG4gICAgaWYgKCFmb3VuZENvbHVtbnMgfHwgIWZvdW5kQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB7cHJvcHM6IFtdfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcHJvcHM6IGZvdW5kQ29sdW1ucy5tYXAoY29sdW1ucyA9PiAoe1xuICAgICAgICBsYWJlbDogKHR5cGVvZiBsYWJlbCA9PT0gJ3N0cmluZycgJiYgbGFiZWwucmVwbGFjZSgvXFwuW14vLl0rJC8sICcnKSkgfHwgdGhpcy50eXBlLFxuICAgICAgICBjb2x1bW5zLFxuICAgICAgICBpc1Zpc2libGU6IHRydWVcbiAgICAgIH0pKVxuICAgIH07XG4gIH1cblxuICBnZXREZWZhdWx0TGF5ZXJDb25maWcocHJvcHM6IExheWVyQmFzZUNvbmZpZ1BhcnRpYWwpIHtcbiAgICBjb25zdCBkZWZhdWx0TGF5ZXJDb25maWcgPSBzdXBlci5nZXREZWZhdWx0TGF5ZXJDb25maWcocHJvcHMgPz8ge30pO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5kZWZhdWx0TGF5ZXJDb25maWcsXG5cbiAgICAgIGNvbHVtbk1vZGU6IHByb3BzPy5jb2x1bW5Nb2RlID8/IERFRkFVTFRfQ09MVU1OX01PREUsXG4gICAgICAvLyBhZGQgaGVpZ2h0IHZpc3VhbCBjaGFubmVsXG4gICAgICBoZWlnaHRGaWVsZDogbnVsbCxcbiAgICAgIGhlaWdodERvbWFpbjogWzAsIDFdLFxuICAgICAgaGVpZ2h0U2NhbGU6ICdsaW5lYXInLFxuXG4gICAgICAvLyBhZGQgcmFkaXVzIHZpc3VhbCBjaGFubmVsXG4gICAgICByYWRpdXNGaWVsZDogbnVsbCxcbiAgICAgIHJhZGl1c0RvbWFpbjogWzAsIDFdLFxuICAgICAgcmFkaXVzU2NhbGU6ICdsaW5lYXInLFxuXG4gICAgICAvLyBhZGQgc3Ryb2tlIGNvbG9yIHZpc3VhbCBjaGFubmVsXG4gICAgICBzdHJva2VDb2xvckZpZWxkOiBudWxsLFxuICAgICAgc3Ryb2tlQ29sb3JEb21haW46IFswLCAxXSxcbiAgICAgIHN0cm9rZUNvbG9yU2NhbGU6ICdxdWFudGlsZScsXG4gICAgICBjb2xvclVJOiB7XG4gICAgICAgIC4uLmRlZmF1bHRMYXllckNvbmZpZy5jb2xvclVJLFxuICAgICAgICBzdHJva2VDb2xvclJhbmdlOiBERUZBVUxUX0NPTE9SX1VJXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGdldEhvdmVyRGF0YShvYmplY3QsIGRhdGFDb250YWluZXIpIHtcbiAgICAvLyBpbmRleCBvZiBkYXRhQ29udGFpbmVyIGlzIHNhdmVkIHRvIGZlYXR1cmUucHJvcGVydGllc1xuICAgIC8vIGZvciBhcnJvdyBmb3JtYXQsIGBvYmplY3RgIGlzIHRoZSBpbmRleCBvZiB0aGUgcm93IHJldHVybmVkIGZyb20gZGVja1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZW9BcnJvd01vZGUgPyBvYmplY3QgOiBvYmplY3Q/LnByb3BlcnRpZXM/LmluZGV4O1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICByZXR1cm4gZGF0YUNvbnRhaW5lci5yb3coaW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGdldEZpbHRlcmVkSXRlbUNvdW50KCkge1xuICAgIC8vIHJldHVybiAtcG9seWdvbnMtZmlsbCBvciAtcG9seWdvbnMtc3Ryb2tlXG4gICAgLy8gKyAtbGluZXN0cmluZ3NcbiAgICAvLyArIC1wb2ludHMtY2lyY2xlXG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZmlsdGVyZWRJdGVtQ291bnQpLmxlbmd0aCkge1xuICAgICAgY29uc3QgcG9seWdvbkNvdW50ID1cbiAgICAgICAgdGhpcy5maWx0ZXJlZEl0ZW1Db3VudFtgJHt0aGlzLmlkfS1wb2x5Z29ucy1maWxsYF0gfHxcbiAgICAgICAgdGhpcy5maWx0ZXJlZEl0ZW1Db3VudFtgJHt0aGlzLmlkfS1wb2x5Z29ucy1zdHJva2VgXSB8fFxuICAgICAgICAwO1xuICAgICAgY29uc3QgbGluZXN0cmluZ0NvdW50ID0gdGhpcy5maWx0ZXJlZEl0ZW1Db3VudFtgJHt0aGlzLmlkfS1saW5lc3RyaW5nc2BdIHx8IDA7XG4gICAgICBjb25zdCBwb2ludENvdW50ID0gdGhpcy5maWx0ZXJlZEl0ZW1Db3VudFtgJHt0aGlzLmlkfS1wb2ludHMtY2lyY2xlYF0gfHwgMDtcblxuICAgICAgcmV0dXJuIHBvbHlnb25Db3VudCArIGxpbmVzdHJpbmdDb3VudCArIHBvaW50Q291bnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjYWxjdWxhdGVEYXRhQXR0cmlidXRlKGRhdGFzZXQ6IEtlcGxlclRhYmxlKSB7XG4gICAgdGhpcy5nZW9BcnJvd01vZGUgPSBmaWVsZElzR2VvQXJyb3coXG4gICAgICBnZW9GaWVsZEFjY2Vzc29yKHRoaXMuY29uZmlnLmNvbHVtbnMpKGRhdGFzZXQuZGF0YUNvbnRhaW5lcilcbiAgICApO1xuXG4gICAgY29uc3Qge2RhdGFDb250YWluZXIsIGZpbHRlcmVkSW5kZXh9ID0gZGF0YXNldDtcbiAgICBpZiAodGhpcy5nZW9BcnJvd01vZGUpIHtcbiAgICAgIC8vIFRPRE8gYWRkIGNvbHVtbk1vZGUgbG9naWMgaGVyZSBmb3IgQXJyb3dEYXRhQ29udGFpbmVyP1xuICAgICAgLy8gZmlsdGVyIGdlb2pzb24vYXJyb3cgdGFibGUgYnkgdmFsdWVzIGFuZCBtYWtlIGEgcGFydGlhbCBjb3B5IG9mIHRoZSByYXcgdGFibGUgYXJlIGV4cGVuc2l2ZVxuICAgICAgLy8gc28gd2Ugd2lsbCB1c2UgZmlsdGVyZWRJbmRleCB0byBjcmVhdGUgYW4gYXR0cmlidXRlIGUuZy4gZmlsdGVyZWRJbmRleCBbMHwxXSBmb3IgR1BVIGZpbHRlcmluZ1xuICAgICAgLy8gaW4gZGVjay5nbCBsYXllciwgc2VlOiBGaWx0ZXJBcnJvd0V4dGVuc2lvbiBpbiBAa2VwbGVyLmdsL2RlY2tnbC1sYXllcnNcbiAgICAgIGlmICghdGhpcy5maWx0ZXJlZEluZGV4IHx8IHRoaXMuZmlsdGVyZWRJbmRleC5sZW5ndGggIT09IGRhdGFDb250YWluZXIubnVtUm93cygpKSB7XG4gICAgICAgIC8vIGZvciBpbmNyZW1lbnRhbCBkYXRhIGxvYWRpbmcsIHdlIG5lZWQgdG8gdXBkYXRlIGZpbHRlcmVkSW5kZXhcbiAgICAgICAgdGhpcy5maWx0ZXJlZEluZGV4ID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGRhdGFDb250YWluZXIubnVtUm93cygpKTtcbiAgICAgICAgdGhpcy5maWx0ZXJlZEluZGV4LmZpbGwoMSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGNoZWNrIGlmIGZpbHRlcmVkSW5kZXggaXMgYSByYW5nZSBmcm9tIDAgdG8gbnVtUm93cyBpZiBpdCBpcywgd2UgZG9uJ3QgbmVlZCB0byB1cGRhdGUgaXRcbiAgICAgIGNvbnN0IGlzUmFuZ2UgPSBmaWx0ZXJlZEluZGV4ICYmIGZpbHRlcmVkSW5kZXgubGVuZ3RoID09PSBkYXRhQ29udGFpbmVyLm51bVJvd3MoKTtcbiAgICAgIGlmICghaXNSYW5nZSB8fCB0aGlzLmZpbHRlcmVkSW5kZXhUcmlnZ2VyICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRJbmRleC5maWxsKDApO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbHRlcmVkSW5kZXgubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICB0aGlzLmZpbHRlcmVkSW5kZXhbZmlsdGVyZWRJbmRleFtpXV0gPSAxO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsdGVyZWRJbmRleFRyaWdnZXIgPSBmaWx0ZXJlZEluZGV4O1xuICAgICAgfVxuICAgICAgLy8gZm9yIGFycm93LCBhbHdheXMgcmV0dXJuIGZ1bGwgZGF0YVRvRmVhdHVyZSBpbnN0ZWFkIG9mIGEgZmlsdGVyZWQgb25lLCBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHVwZGF0ZSBhdHRyaWJ1dGVzIGluIEdQVVxuICAgICAgcmV0dXJuIHRoaXMuZGF0YVRvRmVhdHVyZTtcbiAgICB9XG5cbiAgICAvLyBmb3IgZ2VvanNvbiwgdGhpcyBzaG91bGQgd29yayBhcyB3ZWxsIGFuZCBtb3JlIGVmZmljaWVudC4gQnV0IHdlIG5lZWQgdG8gdXBkYXRlIHNvbWUgdGVzdCBjYXNlcyBlLmcuICNHZW9qc29uTGF5ZXIgLT4gZm9ybWF0TGF5ZXJEYXRhXG4gICAgc3dpdGNoICh0aGlzLmNvbmZpZy5jb2x1bW5Nb2RlKSB7XG4gICAgICBjYXNlIENPTFVNTl9NT0RFX0dFT0pTT046IHtcbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkSW5kZXgubWFwKGkgPT4gdGhpcy5kYXRhVG9GZWF0dXJlW2ldKS5maWx0ZXIoZCA9PiBkKTtcbiAgICAgIH1cblxuICAgICAgY2FzZSBDT0xVTU5fTU9ERV9UQUJMRTpcbiAgICAgICAgcmV0dXJuIGFwcGx5RmlsdGVyc1RvVGFibGVDb2x1bW5zKGRhdGFzZXQsIHRoaXMuZGF0YVRvRmVhdHVyZSk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cblxuICBmb3JtYXRMYXllckRhdGEoZGF0YXNldHMsIG9sZExheWVyRGF0YSkge1xuICAgIGlmICh0aGlzLmNvbmZpZy5kYXRhSWQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3Qge2dwdUZpbHRlciwgZGF0YUNvbnRhaW5lcn0gPSBkYXRhc2V0c1t0aGlzLmNvbmZpZy5kYXRhSWRdO1xuICAgIGNvbnN0IHtkYXRhfSA9IHRoaXMudXBkYXRlRGF0YShkYXRhc2V0cywgb2xkTGF5ZXJEYXRhKTtcblxuICAgIGxldCBmaWx0ZXJWYWx1ZUFjY2Vzc29yO1xuICAgIGxldCBkYXRhQWNjZXNzb3I7XG4gICAgaWYgKHRoaXMuY29uZmlnLmNvbHVtbk1vZGUgPT09IENPTFVNTl9NT0RFX0dFT0pTT04pIHtcbiAgICAgIGZpbHRlclZhbHVlQWNjZXNzb3IgPSAoZGMsIGQsIGZpZWxkSW5kZXgpID0+IGRjLnZhbHVlQXQoZC5wcm9wZXJ0aWVzLmluZGV4LCBmaWVsZEluZGV4KTtcbiAgICAgIGRhdGFBY2Nlc3NvciA9ICgpID0+IGQgPT4gKHtpbmRleDogZC5wcm9wZXJ0aWVzLmluZGV4fSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpbHRlclZhbHVlQWNjZXNzb3IgPSBnZXRUYWJsZU1vZGVWYWx1ZUFjY2Vzc29yO1xuICAgICAgZGF0YUFjY2Vzc29yID0gKCkgPT4gZCA9PiAoe2luZGV4OiBkLnByb3BlcnRpZXMuaW5kZXh9KTtcbiAgICB9XG5cbiAgICBjb25zdCBpbmRleEFjY2Vzc29yID0gZiA9PiBmLnByb3BlcnRpZXMuaW5kZXg7XG4gICAgY29uc3QgYWNjZXNzb3JzID0gdGhpcy5nZXRBdHRyaWJ1dGVBY2Nlc3NvcnMoe2RhdGFBY2Nlc3NvciwgZGF0YUNvbnRhaW5lcn0pO1xuXG4gICAgY29uc3QgaXNGaWx0ZXJlZEFjY2Vzc29yID0gZCA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5maWx0ZXJlZEluZGV4ID8gdGhpcy5maWx0ZXJlZEluZGV4W2QucHJvcGVydGllcy5pbmRleF0gOiAxO1xuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YSxcbiAgICAgIGdldEZpbHRlclZhbHVlOiBncHVGaWx0ZXIuZmlsdGVyVmFsdWVBY2Nlc3NvcihkYXRhQ29udGFpbmVyKShcbiAgICAgICAgaW5kZXhBY2Nlc3NvcixcbiAgICAgICAgZmlsdGVyVmFsdWVBY2Nlc3NvclxuICAgICAgKSxcbiAgICAgIGdldEZpbHRlcmVkOiBpc0ZpbHRlcmVkQWNjZXNzb3IsXG4gICAgICAuLi5hY2Nlc3NvcnNcbiAgICB9O1xuICB9XG5cbiAgaXNJblBvbHlnb24oZGF0YTogRGF0YUNvbnRhaW5lckludGVyZmFjZSwgaW5kZXg6IG51bWJlciwgcG9seWdvbjogRmVhdHVyZTxQb2x5Z29uPik6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmNlbnRyb2lkcy5sZW5ndGggPT09IDAgfHwgIXRoaXMuY2VudHJvaWRzW2luZGV4XSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBpc1JlYWN0YW5nbGVTZWFyY2hCb3ggPSBwb2x5Z29uLnByb3BlcnRpZXM/LnNoYXBlID09PSAnUmVjdGFuZ2xlJztcbiAgICBjb25zdCBwb2ludCA9IHRoaXMuY2VudHJvaWRzW2luZGV4XTtcbiAgICAvLyBpZiBubyB2YWxpZCBjZW50cm9pZCwgcmV0dXJuIGZhbHNlXG4gICAgaWYgKCFwb2ludCkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIHF1aWNrIGNoZWNrIGlmIGNlbnRyb2lkIGlzIHdpdGhpbiB0aGUgcXVlcnkgcmVjdGFuZ2xlXG4gICAgaWYgKGlzUmVhY3RhbmdsZVNlYXJjaEJveCAmJiBwb2x5Z29uLnByb3BlcnRpZXM/LmJib3gpIHtcbiAgICAgIGNvbnN0IFttaW5YLCBtaW5ZLCBtYXhYLCBtYXhZXSA9IHBvbHlnb24/LnByb3BlcnRpZXM/LmJib3ggfHwgW107XG4gICAgICByZXR1cm4gcG9pbnRbMF0gPj0gbWluWCAmJiBwb2ludFswXSA8PSBtYXhYICYmIHBvaW50WzFdID49IG1pblkgJiYgcG9pbnRbMV0gPD0gbWF4WTtcbiAgICB9XG4gICAgLy8gdXNlIHR1cmYuanMgdG8gY2hlY2sgaWYgY2VudHJvaWQgaXMgd2l0aGluIHF1ZXJ5IHBvbHlnb25cbiAgICByZXR1cm4gYm9vbGVhbldpdGhpbih0dXJmUG9pbnQocG9pbnQpLCBwb2x5Z29uKTtcbiAgfVxuXG4gIHVwZGF0ZUxheWVyTWV0YShkYXRhc2V0OiBLZXBsZXJUYWJsZSkge1xuICAgIGNvbnN0IHtkYXRhQ29udGFpbmVyfSA9IGRhdGFzZXQ7XG5cbiAgICB0aGlzLmRhdGFDb250YWluZXIgPSBkYXRhQ29udGFpbmVyO1xuXG4gICAgdGhpcy5nZW9BcnJvd01vZGUgPSBmaWVsZElzR2VvQXJyb3coXG4gICAgICBnZW9GaWVsZEFjY2Vzc29yKHRoaXMuY29uZmlnLmNvbHVtbnMpKGRhdGFzZXQuZGF0YUNvbnRhaW5lcilcbiAgICApO1xuXG4gICAgaWYgKHRoaXMuZ2VvQXJyb3dNb2RlICYmIGRhdGFDb250YWluZXIgaW5zdGFuY2VvZiBBcnJvd0RhdGFDb250YWluZXIpIHtcbiAgICAgIGNvbnN0IGdlb0NvbHVtbiA9IGdlb0NvbHVtbkFjY2Vzc29yKHRoaXMuY29uZmlnLmNvbHVtbnMpKGRhdGFDb250YWluZXIpO1xuICAgICAgY29uc3QgZ2VvRmllbGQgPSBnZW9GaWVsZEFjY2Vzc29yKHRoaXMuY29uZmlnLmNvbHVtbnMpKGRhdGFDb250YWluZXIpO1xuXG4gICAgICAvLyB1cGRhdGUgdGhlIGxhdGVzdCBiYXRjaC9jaHVuayBvZiBnZW9hcnJvdyBkYXRhIHdoZW4gbG9hZGluZyBkYXRhIGluY3JlbWVudGFsbHlcbiAgICAgIGlmIChnZW9Db2x1bW4gJiYgZ2VvRmllbGQgJiYgdGhpcy5kYXRhVG9GZWF0dXJlLmxlbmd0aCA8IGRhdGFDb250YWluZXIubnVtQ2h1bmtzKCkpIHtcbiAgICAgICAgLy8gZm9yIGluY3JlbWVudGFsbHkgbG9hZGluZyBkYXRhLCB3ZSBvbmx5IGxvYWQgYW5kIHJlbmRlciB0aGUgbGF0ZXN0IGJhdGNoOyBvdGhlcndpc2UsIHdlIHdpbGwgbG9hZCBhbmQgcmVuZGVyIGFsbCBiYXRjaGVzXG4gICAgICAgIGNvbnN0IGlzSW5jcmVtZW50YWxMb2FkID0gZGF0YUNvbnRhaW5lci5udW1DaHVua3MoKSAtIHRoaXMuZGF0YVRvRmVhdHVyZS5sZW5ndGggPT09IDE7XG4gICAgICAgIC8vIFRPRE86IGFkZCBzdXBwb3J0IGZvciBDT0xVTU5fTU9ERV9UQUJMRSBpbiBnZXRHZW9qc29uTGF5ZXJNZXRhRnJvbUFycm93XG4gICAgICAgIGNvbnN0IHtkYXRhVG9GZWF0dXJlLCBib3VuZHMsIGZpeGVkUmFkaXVzLCBmZWF0dXJlVHlwZXMsIGNlbnRyb2lkc30gPVxuICAgICAgICAgIGdldEdlb2pzb25MYXllck1ldGFGcm9tQXJyb3coe1xuICAgICAgICAgICAgZGF0YUNvbnRhaW5lcixcbiAgICAgICAgICAgIGdlb0NvbHVtbixcbiAgICAgICAgICAgIGdlb0ZpZWxkLFxuICAgICAgICAgICAgLi4uKGlzSW5jcmVtZW50YWxMb2FkID8ge2NodW5rSW5kZXg6IHRoaXMuZGF0YVRvRmVhdHVyZS5sZW5ndGh9IDogbnVsbClcbiAgICAgICAgICB9KTtcbiAgICAgICAgaWYgKGNlbnRyb2lkcykgdGhpcy5jZW50cm9pZHMgPSB0aGlzLmNlbnRyb2lkcy5jb25jYXQoY2VudHJvaWRzKTtcbiAgICAgICAgdGhpcy51cGRhdGVNZXRhKHtib3VuZHMsIGZpeGVkUmFkaXVzLCBmZWF0dXJlVHlwZXN9KTtcbiAgICAgICAgdGhpcy5kYXRhVG9GZWF0dXJlID0gWy4uLnRoaXMuZGF0YVRvRmVhdHVyZSwgLi4uZGF0YVRvRmVhdHVyZV07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmRhdGFUb0ZlYXR1cmUubGVuZ3RoID09PSAwIHx8IHRoaXMuY29uZmlnLmNvbHVtbk1vZGUgPT09IENPTFVNTl9NT0RFX1RBQkxFKSB7XG4gICAgICBjb25zdCBnZXRGZWF0dXJlID0gdGhpcy5nZXRQb3NpdGlvbkFjY2Vzc29yKGRhdGFDb250YWluZXIpO1xuXG4gICAgICBjb25zdCB7ZGF0YVRvRmVhdHVyZSwgYm91bmRzLCBmaXhlZFJhZGl1cywgZmVhdHVyZVR5cGVzLCBjZW50cm9pZHN9ID0gZ2V0R2VvanNvbkxheWVyTWV0YSh7XG4gICAgICAgIGRhdGFDb250YWluZXIsXG4gICAgICAgIGdldEZlYXR1cmUsXG4gICAgICAgIGNvbmZpZzogdGhpcy5jb25maWdcbiAgICAgIH0pO1xuICAgICAgaWYgKGNlbnRyb2lkcykgdGhpcy5jZW50cm9pZHMgPSBjZW50cm9pZHM7XG4gICAgICB0aGlzLmRhdGFUb0ZlYXR1cmUgPSBkYXRhVG9GZWF0dXJlO1xuICAgICAgdGhpcy51cGRhdGVNZXRhKHtib3VuZHMsIGZpeGVkUmFkaXVzLCBmZWF0dXJlVHlwZXN9KTtcbiAgICB9XG4gIH1cblxuICBzZXRJbml0aWFsTGF5ZXJDb25maWcoZGF0YXNldDogS2VwbGVyVGFibGUpIHtcbiAgICBjb25zdCB7ZGF0YUNvbnRhaW5lcn0gPSBkYXRhc2V0O1xuICAgIGlmICghZGF0YUNvbnRhaW5lci5udW1Sb3dzKCkpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIGRlZmVmYXVsdExheWVyUHJvcHMgd2lsbCBhdXRvbWF0aWNhbGx5IGZpbmQgZ2VvanNvbiBjb2x1bW5cbiAgICAvLyBpZiBub3QgZm91bmQsIHdlIHRyeSB0byBzZXQgaXQgdG8gaWQgLyBsYXQgL2xuZyAvdHNcbiAgICBpZiAoIXRoaXMuY29uZmlnLmNvbHVtbnMuZ2VvanNvbi52YWx1ZSkge1xuICAgICAgLy8gZmluZCBjb2x1bW5zIGZyb20gbGF0LCBsbmcsIGlkLCBhbmQgdHNcbiAgICAgIGNvbnN0IGNvbHVtbkNvbmZpZyA9IGRldGVjdFRhYmxlQ29sdW1ucyhkYXRhc2V0LCB0aGlzLmNvbmZpZy5jb2x1bW5zLCAnc29ydEJ5Jyk7XG4gICAgICBpZiAoY29sdW1uQ29uZmlnKSB7XG4gICAgICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICAgIC4uLmNvbHVtbkNvbmZpZyxcbiAgICAgICAgICBjb2x1bW5Nb2RlOiBDT0xVTU5fTU9ERV9UQUJMRVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudXBkYXRlTGF5ZXJNZXRhKGRhdGFzZXQpO1xuXG4gICAgY29uc3Qge2ZlYXR1cmVUeXBlc30gPSB0aGlzLm1ldGE7XG4gICAgLy8gZGVmYXVsdCBzZXR0aW5ncyBpcyBzdHJva2U6IHRydWUsIGZpbGxlZDogZmFsc2VcbiAgICBpZiAoZmVhdHVyZVR5cGVzICYmIGZlYXR1cmVUeXBlcy5wb2x5Z29uKSB7XG4gICAgICAvLyBzZXQgYm90aCBmaWxsIGFuZCBzdHJva2UgdG8gdHJ1ZVxuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlTGF5ZXJWaXNDb25maWcoe1xuICAgICAgICBmaWxsZWQ6IHRydWUsXG4gICAgICAgIHN0cm9rZWQ6IHRydWUsXG4gICAgICAgIHN0cm9rZUNvbG9yOiBjb2xvck1ha2VyLm5leHQoKS52YWx1ZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChmZWF0dXJlVHlwZXMgJiYgZmVhdHVyZVR5cGVzLnBvaW50KSB7XG4gICAgICAvLyBzZXQgZmlsbCB0byB0cnVlIGlmIGRldGVjdCBwb2ludFxuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlTGF5ZXJWaXNDb25maWcoe2ZpbGxlZDogdHJ1ZSwgc3Ryb2tlZDogZmFsc2V9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGlzTGF5ZXJIb3ZlcmVkKG9iamVjdEluZm86IE9iamVjdEluZm8pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZW9BcnJvd01vZGVcbiAgICAgID8gaXNMYXllckhvdmVyZWRGcm9tQXJyb3cob2JqZWN0SW5mbywgdGhpcy5pZClcbiAgICAgIDogc3VwZXIuaXNMYXllckhvdmVyZWQob2JqZWN0SW5mbyk7XG4gIH1cblxuICBoYXNIb3ZlcmVkT2JqZWN0KG9iamVjdEluZm86IE9iamVjdEluZm8pOiBGZWF0dXJlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2VvQXJyb3dNb2RlXG4gICAgICA/IGdldEhvdmVyZWRPYmplY3RGcm9tQXJyb3coXG4gICAgICAgICAgb2JqZWN0SW5mbyxcbiAgICAgICAgICB0aGlzLmRhdGFDb250YWluZXIsXG4gICAgICAgICAgdGhpcy5pZCxcbiAgICAgICAgICBnZW9Db2x1bW5BY2Nlc3Nvcih0aGlzLmNvbmZpZy5jb2x1bW5zKSxcbiAgICAgICAgICBnZW9GaWVsZEFjY2Vzc29yKHRoaXMuY29uZmlnLmNvbHVtbnMpXG4gICAgICAgIClcbiAgICAgIDogc3VwZXIuaGFzSG92ZXJlZE9iamVjdChvYmplY3RJbmZvKTtcbiAgfVxuXG4gIGdldEVsZXZhdGlvblpvb21GYWN0b3Ioe3pvb20sIHpvb21PZmZzZXQgPSAwfSkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy52aXNDb25maWcuZml4ZWRIZWlnaHQgPyAxIDogTWF0aC5wb3coMiwgTWF0aC5tYXgoOCAtIHpvb20gKyB6b29tT2Zmc2V0LCAwKSk7XG4gIH1cblxuICByZW5kZXJMYXllcihvcHRzKSB7XG4gICAgY29uc3Qge2RhdGE6IGRhdGFQcm9wcywgZ3B1RmlsdGVyLCBvYmplY3RIb3ZlcmVkLCBtYXBTdGF0ZSwgaW50ZXJhY3Rpb25Db25maWd9ID0gb3B0cztcblxuICAgIGNvbnN0IHtmaXhlZFJhZGl1cywgZmVhdHVyZVR5cGVzfSA9IHRoaXMubWV0YTtcbiAgICBjb25zdCByYWRpdXNTY2FsZSA9IHRoaXMuZ2V0UmFkaXVzU2NhbGVCeVpvb20obWFwU3RhdGUsIGZpeGVkUmFkaXVzKTtcbiAgICBjb25zdCB6b29tRmFjdG9yID0gdGhpcy5nZXRab29tRmFjdG9yKG1hcFN0YXRlKTtcbiAgICBjb25zdCBlbGVab29tRmFjdG9yID0gdGhpcy5nZXRFbGV2YXRpb25ab29tRmFjdG9yKG1hcFN0YXRlKTtcblxuICAgIGNvbnN0IHt2aXNDb25maWd9ID0gdGhpcy5jb25maWc7XG5cbiAgICBjb25zdCBsYXllclByb3BzID0ge1xuICAgICAgbGluZVdpZHRoU2NhbGU6IHZpc0NvbmZpZy50aGlja25lc3MgKiB6b29tRmFjdG9yICogOCxcbiAgICAgIGVsZXZhdGlvblNjYWxlOiB2aXNDb25maWcuZWxldmF0aW9uU2NhbGUgKiBlbGVab29tRmFjdG9yLFxuICAgICAgcG9pbnRSYWRpdXNTY2FsZTogcmFkaXVzU2NhbGUsXG4gICAgICBsaW5lTWl0ZXJMaW1pdDogNFxuICAgIH07XG5cbiAgICBjb25zdCB1cGRhdGVUcmlnZ2VycyA9IHtcbiAgICAgIC4uLnRoaXMuZ2V0VmlzdWFsQ2hhbm5lbFVwZGF0ZVRyaWdnZXJzKCksXG4gICAgICBnZXRGaWx0ZXJWYWx1ZTogZ3B1RmlsdGVyLmZpbHRlclZhbHVlVXBkYXRlVHJpZ2dlcnMsXG4gICAgICBnZXRGaWx0ZXJlZDogdGhpcy5maWx0ZXJlZEluZGV4VHJpZ2dlclxuICAgIH07XG5cbiAgICBjb25zdCBkZWZhdWx0TGF5ZXJQcm9wcyA9IHRoaXMuZ2V0RGVmYXVsdERlY2tMYXllclByb3BzKG9wdHMpO1xuICAgIGNvbnN0IG9wYU92ZXJ3cml0ZSA9IHtcbiAgICAgIG9wYWNpdHk6IHZpc0NvbmZpZy5zdHJva2VPcGFjaXR5XG4gICAgfTtcblxuICAgIGNvbnN0IHBpY2thYmxlID0gaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5lbmFibGVkO1xuICAgIGNvbnN0IGhvdmVyZWRPYmplY3QgPSB0aGlzLmhhc0hvdmVyZWRPYmplY3Qob2JqZWN0SG92ZXJlZCk7XG5cbiAgICBjb25zdCB7ZGF0YSwgLi4ucHJvcHN9ID0gZGF0YVByb3BzO1xuXG4gICAgLy8gYXJyb3cgdGFibGUgY2FuIGhhdmUgbXVsdGlwbGUgY2h1bmtzLCBhIGRlY2suZ2wgbGF5ZXIgaXMgY3JlYXRlZCBmb3IgZWFjaCBjaHVua1xuICAgIGNvbnN0IGRlY2tMYXllckRhdGEgPSB0aGlzLmdlb0Fycm93TW9kZSA/IGRhdGEgOiBbZGF0YV07XG4gICAgY29uc3QgZGVja0xheWVycyA9IGRlY2tMYXllckRhdGEubWFwKChkLCBpKSA9PiB7XG4gICAgICByZXR1cm4gbmV3IERlY2tHTEdlb0pzb25MYXllcih7XG4gICAgICAgIC4uLmRlZmF1bHRMYXllclByb3BzLFxuICAgICAgICAuLi5sYXllclByb3BzLFxuICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgZGF0YTogZCxcbiAgICAgICAgaWQ6IGRlY2tMYXllckRhdGEubGVuZ3RoID4gMSA/IGAke3RoaXMuaWR9LSR7aX1gIDogdGhpcy5pZCxcbiAgICAgICAgcGlja2FibGUsXG4gICAgICAgIGhpZ2hsaWdodENvbG9yOiBISUdITElHSF9DT0xPUl8zRCxcbiAgICAgICAgYXV0b0hpZ2hsaWdodDogdmlzQ29uZmlnLmVuYWJsZTNkICYmIHBpY2thYmxlLFxuICAgICAgICBzdHJva2VkOiB2aXNDb25maWcuc3Ryb2tlZCxcbiAgICAgICAgZmlsbGVkOiB2aXNDb25maWcuZmlsbGVkLFxuICAgICAgICBleHRydWRlZDogdmlzQ29uZmlnLmVuYWJsZTNkLFxuICAgICAgICB3aXJlZnJhbWU6IHZpc0NvbmZpZy53aXJlZnJhbWUsXG4gICAgICAgIHdyYXBMb25naXR1ZGU6IGZhbHNlLFxuICAgICAgICBsaW5lTWl0ZXJMaW1pdDogMixcbiAgICAgICAgY2FwUm91bmRlZDogdHJ1ZSxcbiAgICAgICAgam9pbnRSb3VuZGVkOiB0cnVlLFxuICAgICAgICB1cGRhdGVUcmlnZ2VycyxcbiAgICAgICAgZXh0ZW5zaW9uczogWy4uLmRlZmF1bHRMYXllclByb3BzLmV4dGVuc2lvbnMsIG5ldyBGaWx0ZXJBcnJvd0V4dGVuc2lvbigpXSxcbiAgICAgICAgX3N1YkxheWVyUHJvcHM6IHtcbiAgICAgICAgICAuLi4oZmVhdHVyZVR5cGVzPy5wb2x5Z29uID8geydwb2x5Z29ucy1zdHJva2UnOiBvcGFPdmVyd3JpdGV9IDoge30pLFxuICAgICAgICAgIC4uLihmZWF0dXJlVHlwZXM/LmxpbmUgPyB7bGluZXN0cmluZ3M6IG9wYU92ZXJ3cml0ZX0gOiB7fSksXG4gICAgICAgICAgLi4uKGZlYXR1cmVUeXBlcz8ucG9pbnRcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIHBvaW50czoge1xuICAgICAgICAgICAgICAgICAgbGluZU9wYWNpdHk6IHZpc0NvbmZpZy5zdHJva2VPcGFjaXR5XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHt9KVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBbXG4gICAgICAuLi5kZWNrTGF5ZXJzLFxuICAgICAgLy8gaG92ZXIgbGF5ZXJcbiAgICAgIC4uLihob3ZlcmVkT2JqZWN0ICYmICF2aXNDb25maWcuZW5hYmxlM2RcbiAgICAgICAgPyBbXG4gICAgICAgICAgICBuZXcgRGVja0dMR2VvSnNvbkxheWVyKHtcbiAgICAgICAgICAgICAgLi4udGhpcy5nZXREZWZhdWx0SG92ZXJMYXllclByb3BzKCksXG4gICAgICAgICAgICAgIC4uLmxheWVyUHJvcHMsXG4gICAgICAgICAgICAgIHZpc2libGU6IGRlZmF1bHRMYXllclByb3BzLnZpc2libGUsXG4gICAgICAgICAgICAgIHdyYXBMb25naXR1ZGU6IGZhbHNlLFxuICAgICAgICAgICAgICBkYXRhOiBbaG92ZXJlZE9iamVjdF0sXG4gICAgICAgICAgICAgIGdldExpbmVXaWR0aDogcHJvcHMuZ2V0TGluZVdpZHRoLFxuICAgICAgICAgICAgICBnZXRQb2ludFJhZGl1czogcHJvcHMuZ2V0UG9pbnRSYWRpdXMsXG4gICAgICAgICAgICAgIGdldEVsZXZhdGlvbjogcHJvcHMuZ2V0RWxldmF0aW9uLFxuICAgICAgICAgICAgICBnZXRMaW5lQ29sb3I6IHRoaXMuY29uZmlnLmhpZ2hsaWdodENvbG9yLFxuICAgICAgICAgICAgICBnZXRGaWxsQ29sb3I6IHRoaXMuY29uZmlnLmhpZ2hsaWdodENvbG9yLFxuICAgICAgICAgICAgICAvLyBhbHdheXMgZHJhdyBvdXRsaW5lXG4gICAgICAgICAgICAgIHN0cm9rZWQ6IHRydWUsXG4gICAgICAgICAgICAgIGZpbGxlZDogZmFsc2VcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXVxuICAgICAgICA6IFtdKVxuICAgIF07XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBSUEsSUFBQUEsUUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsY0FBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBRUEsSUFBQUcsS0FBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUksYUFBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssVUFBQSxHQUFBQyx1QkFBQSxDQUFBTixPQUFBO0FBV0EsSUFBQU8sT0FBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsYUFBQSxHQUFBUixPQUFBO0FBU0EsSUFBQVMsV0FBQSxHQUFBVCxPQUFBO0FBS0EsSUFBQVUsaUJBQUEsR0FB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
|
|
691
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfaGVscGVycyIsInJlcXVpcmUiLCJfYm9vbGVhbldpdGhpbiIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfdW5pcSIsIl90eXBlQW5hbHl6ZXIiLCJfYmFzZUxheWVyIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfbGF5ZXJzIiwiX2dlb2pzb25VdGlscyIsIl9sYXllclV0aWxzIiwiX2dlb2pzb25MYXllckljb24iLCJfY29uc3RhbnRzIiwiX3V0aWxzIiwiX2RlY2tnbExheWVycyIsIl9nZW9qc29uSW5mb01vZGFsIiwiX2V4Y2x1ZGVkIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiX2NhbGxTdXBlciIsIm8iLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsImFwcGx5IiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJfc3VwZXJQcm9wR2V0IiwicCIsIl9nZXQyIiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiU1VQUE9SVEVEX0FOQUxZWkVSX1RZUEVTIiwiREFUQV9UWVBFUyIsIkdFT01FVFJZIiwiR0VPTUVUUllfRlJPTV9TVFJJTkciLCJQQUlSX0dFT01FVFJZX0ZST01fU1RSSU5HIiwiZ2VvanNvblZpc0NvbmZpZ3MiLCJleHBvcnRzIiwib3BhY2l0eSIsInN0cm9rZU9wYWNpdHkiLCJMQVlFUl9WSVNfQ09ORklHUyIsInByb3BlcnR5IiwidGhpY2tuZXNzIiwiZGVmYXVsdFZhbHVlIiwic3Ryb2tlQ29sb3IiLCJjb2xvclJhbmdlIiwic3Ryb2tlQ29sb3JSYW5nZSIsInJhZGl1cyIsInNpemVSYW5nZSIsInJhZGl1c1JhbmdlIiwiaGVpZ2h0UmFuZ2UiLCJlbGV2YXRpb25TY2FsZSIsInN0cm9rZWQiLCJmaWxsZWQiLCJlbmFibGUzZCIsIndpcmVmcmFtZSIsImZpeGVkSGVpZ2h0IiwiZ2VvSnNvblJlcXVpcmVkQ29sdW1ucyIsImZlYXR1cmVBY2Nlc3NvciIsIl9yZWYiLCJnZW9qc29uIiwiZGMiLCJkIiwidmFsdWVBdCIsImluZGV4IiwiZmllbGRJZHgiLCJnZW9Db2x1bW5BY2Nlc3NvciIsIl9yZWYyIiwiX2RjJGdldENvbHVtbiIsImdldENvbHVtbiIsImdldFRhYmxlTW9kZVZhbHVlQWNjZXNzb3IiLCJmZWF0dXJlIiwiZmllbGQiLCJwcm9wZXJ0aWVzIiwidmFsdWVzIiwibWFwIiwidiIsInZhbHVlQWNjZXNzb3IiLCJnZXRUYWJsZU1vZGVGaWVsZFZhbHVlIiwiZGF0YSIsInJ2IiwiZGVmYXVsdEdldEZpZWxkVmFsdWUiLCJnZW9GaWVsZEFjY2Vzc29yIiwiX3JlZjMiLCJnZXRGaWVsZCIsImRlZmF1bHRFbGV2YXRpb24iLCJkZWZhdWx0TGluZVdpZHRoIiwiZGVmYXVsdFJhZGl1cyIsIkRFRkFVTFRfUE9MWUdPTl9TVFJPS0VfTElNSVQiLCJDT0xVTU5fTU9ERV9UQUJMRSIsIlNVUFBPUlRFRF9DT0xVTU5fTU9ERVMiLCJrZXkiLCJDT0xVTU5fTU9ERV9HRU9KU09OIiwibGFiZWwiLCJyZXF1aXJlZENvbHVtbnMiLCJvcHRpb25hbENvbHVtbnMiLCJERUZBVUxUX0NPTFVNTl9NT0RFIiwiR2VvSnNvbkxheWVyIiwiX0xheWVyIiwicHJvcHMiLCJfdGhpcyIsIl9jbGFzc0NhbGxDaGVjazIiLCJyZWdpc3RlclZpc0NvbmZpZyIsImdldFBvc2l0aW9uQWNjZXNzb3IiLCJkYXRhQ29udGFpbmVyIiwiY29uZmlnIiwiY29sdW1ucyIsIl9sYXllckluZm9Nb2RhbCIsIkdlb2pzb25JbmZvTW9kYWxGYWN0b3J5IiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJ0eXBlIiwiR2VvanNvbkxheWVySWNvbiIsImRlZmF1bHRQb2ludENvbHVtblBhaXJzIiwiaWQiLCJ0ZW1wbGF0ZSIsIm1vZGFsUHJvcHMiLCJ0aXRsZSIsInZhbHVlIiwiYWNjZXNzVlNGaWVsZFZhbHVlIiwiY29sdW1uTW9kZSIsInZpc3VhbENoYW5uZWxzIiwiY29sb3IiLCJhY2Nlc3NvciIsImNvbmRpdGlvbiIsInZpc0NvbmZpZyIsIm51bGxWYWx1ZSIsImdldEF0dHJpYnV0ZVZhbHVlIiwiZmlsbENvbG9yIiwic2NhbGUiLCJkb21haW4iLCJyYW5nZSIsImNoYW5uZWxTY2FsZVR5cGUiLCJDSEFOTkVMX1NDQUxFUyIsImxpbmVDb2xvciIsInNpemUiLCJsaW5lV2lkdGgiLCJoZWlnaHQiLCJmaXhlZCIsImVsZXZhdGlvbiIsImdldERlZmF1bHRMYXllckNvbmZpZyIsIl9wcm9wcyRjb2x1bW5Nb2RlIiwiZGVmYXVsdExheWVyQ29uZmlnIiwiaGVpZ2h0RmllbGQiLCJoZWlnaHREb21haW4iLCJoZWlnaHRTY2FsZSIsInJhZGl1c0ZpZWxkIiwicmFkaXVzRG9tYWluIiwicmFkaXVzU2NhbGUiLCJzdHJva2VDb2xvckZpZWxkIiwic3Ryb2tlQ29sb3JEb21haW4iLCJzdHJva2VDb2xvclNjYWxlIiwiY29sb3JVSSIsIkRFRkFVTFRfQ09MT1JfVUkiLCJnZXRIb3ZlckRhdGEiLCJvYmplY3QiLCJfb2JqZWN0JHByb3BlcnRpZXMiLCJnZW9BcnJvd01vZGUiLCJyb3ciLCJnZXRGaWx0ZXJlZEl0ZW1Db3VudCIsImZpbHRlcmVkSXRlbUNvdW50IiwicG9seWdvbkNvdW50IiwiY29uY2F0IiwibGluZXN0cmluZ0NvdW50IiwicG9pbnRDb3VudCIsImNhbGN1bGF0ZURhdGFBdHRyaWJ1dGUiLCJkYXRhc2V0IiwiX3RoaXMyIiwiZmllbGRJc0dlb0Fycm93IiwiZmlsdGVyZWRJbmRleCIsIm51bVJvd3MiLCJVaW50OENsYW1wZWRBcnJheSIsImZpbGwiLCJpc1JhbmdlIiwiZmlsdGVyZWRJbmRleFRyaWdnZXIiLCJkYXRhVG9GZWF0dXJlIiwiYXBwbHlGaWx0ZXJzVG9UYWJsZUNvbHVtbnMiLCJmb3JtYXRMYXllckRhdGEiLCJkYXRhc2V0cyIsIm9sZExheWVyRGF0YSIsIl90aGlzMyIsImRhdGFJZCIsIl9kYXRhc2V0cyR0aGlzJGNvbmZpZyIsImdwdUZpbHRlciIsIl90aGlzJHVwZGF0ZURhdGEiLCJ1cGRhdGVEYXRhIiwiZmlsdGVyVmFsdWVBY2Nlc3NvciIsImRhdGFBY2Nlc3NvciIsImZpZWxkSW5kZXgiLCJpbmRleEFjY2Vzc29yIiwiZiIsImFjY2Vzc29ycyIsImdldEF0dHJpYnV0ZUFjY2Vzc29ycyIsImlzRmlsdGVyZWRBY2Nlc3NvciIsImdldEZpbHRlclZhbHVlIiwiZ2V0RmlsdGVyZWQiLCJpc0luUG9seWdvbiIsInBvbHlnb24iLCJfcG9seWdvbiRwcm9wZXJ0aWVzIiwiX3BvbHlnb24kcHJvcGVydGllczIiLCJjZW50cm9pZHMiLCJpc1JlYWN0YW5nbGVTZWFyY2hCb3giLCJzaGFwZSIsInBvaW50IiwiYmJveCIsIl9wb2x5Z29uJHByb3BlcnRpZXMzIiwiX3JlZjUiLCJfcmVmNiIsIl9zbGljZWRUb0FycmF5MiIsIm1pblgiLCJtaW5ZIiwibWF4WCIsIm1heFkiLCJib29sZWFuV2l0aGluIiwidHVyZlBvaW50IiwidXBkYXRlTGF5ZXJNZXRhIiwiQXJyb3dEYXRhQ29udGFpbmVyIiwiZ2VvQ29sdW1uIiwiZ2VvRmllbGQiLCJudW1DaHVua3MiLCJpc0luY3JlbWVudGFsTG9hZCIsIl9nZXRHZW9qc29uTGF5ZXJNZXRhRiIsImdldEdlb2pzb25MYXllck1ldGFGcm9tQXJyb3ciLCJjaHVua0luZGV4IiwiYm91bmRzIiwiZml4ZWRSYWRpdXMiLCJmZWF0dXJlVHlwZXMiLCJ1cGRhdGVNZXRhIiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsImdldEZlYXR1cmUiLCJfZ2V0R2VvanNvbkxheWVyTWV0YSIsImdldEdlb2pzb25MYXllck1ldGEiLCJzZXRJbml0aWFsTGF5ZXJDb25maWciLCJjb2x1bW5Db25maWciLCJkZXRlY3RUYWJsZUNvbHVtbnMiLCJ1cGRhdGVMYXllckNvbmZpZyIsIm1ldGEiLCJ1cGRhdGVMYXllclZpc0NvbmZpZyIsImNvbG9yTWFrZXIiLCJuZXh0IiwiaXNMYXllckhvdmVyZWQiLCJvYmplY3RJbmZvIiwiaXNMYXllckhvdmVyZWRGcm9tQXJyb3ciLCJoYXNIb3ZlcmVkT2JqZWN0IiwiZ2V0SG92ZXJlZE9iamVjdEZyb21BcnJvdyIsImdldEVsZXZhdGlvblpvb21GYWN0b3IiLCJfcmVmNyIsInpvb20iLCJfcmVmNyR6b29tT2Zmc2V0Iiwiem9vbU9mZnNldCIsIk1hdGgiLCJwb3ciLCJtYXgiLCJyZW5kZXJMYXllciIsIm9wdHMiLCJfdGhpczQiLCJkYXRhUHJvcHMiLCJvYmplY3RIb3ZlcmVkIiwibWFwU3RhdGUiLCJpbnRlcmFjdGlvbkNvbmZpZyIsIl90aGlzJG1ldGEiLCJnZXRSYWRpdXNTY2FsZUJ5Wm9vbSIsInpvb21GYWN0b3IiLCJnZXRab29tRmFjdG9yIiwiZWxlWm9vbUZhY3RvciIsImxheWVyUHJvcHMiLCJsaW5lV2lkdGhTY2FsZSIsInBvaW50UmFkaXVzU2NhbGUiLCJsaW5lTWl0ZXJMaW1pdCIsInVwZGF0ZVRyaWdnZXJzIiwiZ2V0VmlzdWFsQ2hhbm5lbFVwZGF0ZVRyaWdnZXJzIiwiZmlsdGVyVmFsdWVVcGRhdGVUcmlnZ2VycyIsImRlZmF1bHRMYXllclByb3BzIiwiZ2V0RGVmYXVsdERlY2tMYXllclByb3BzIiwib3BhT3ZlcndyaXRlIiwicGlja2FibGUiLCJ0b29sdGlwIiwiZW5hYmxlZCIsImhvdmVyZWRPYmplY3QiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMyIiwiZGVja0xheWVyRGF0YSIsImRlY2tMYXllcnMiLCJEZWNrR0xHZW9Kc29uTGF5ZXIiLCJoaWdobGlnaHRDb2xvciIsIkhJR0hMSUdIX0NPTE9SXzNEIiwiYXV0b0hpZ2hsaWdodCIsImV4dHJ1ZGVkIiwid3JhcExvbmdpdHVkZSIsImNhcFJvdW5kZWQiLCJqb2ludFJvdW5kZWQiLCJleHRlbnNpb25zIiwiRmlsdGVyQXJyb3dFeHRlbnNpb24iLCJfc3ViTGF5ZXJQcm9wcyIsImxpbmUiLCJsaW5lc3RyaW5ncyIsInBvaW50cyIsImxpbmVPcGFjaXR5IiwiZ2V0RGVmYXVsdEhvdmVyTGF5ZXJQcm9wcyIsInZpc2libGUiLCJnZXRMaW5lV2lkdGgiLCJnZXRQb2ludFJhZGl1cyIsImdldEVsZXZhdGlvbiIsImdldExpbmVDb2xvciIsImdldEZpbGxDb2xvciIsImZpbmREZWZhdWx0TGF5ZXJQcm9wcyIsIl9yZWY4IiwiX3RoaXM1IiwiX3JlZjgkZmllbGRzIiwiZmllbGRzIiwiZ2VvanNvbkNvbHVtbnMiLCJhbmFseXplclR5cGUiLCJuYW1lIiwiZGVmYXVsdENvbHVtbnMiLCJ1bmlxIiwiR0VPSlNPTl9GSUVMRFMiLCJmb3VuZENvbHVtbnMiLCJmaW5kRGVmYXVsdENvbHVtbkZpZWxkIiwicmVwbGFjZSIsImlzVmlzaWJsZSIsIkxheWVyIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2dlb2pzb24tbGF5ZXIvZ2VvanNvbi1sYXllci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgKiBhcyBhcnJvdyBmcm9tICdhcGFjaGUtYXJyb3cnO1xuaW1wb3J0IHtwb2ludCBhcyB0dXJmUG9pbnR9IGZyb20gJ0B0dXJmL2hlbHBlcnMnO1xuaW1wb3J0IGJvb2xlYW5XaXRoaW4gZnJvbSAnQHR1cmYvYm9vbGVhbi13aXRoaW4nO1xuaW1wb3J0IHtGZWF0dXJlLCBQb2x5Z29ufSBmcm9tICdnZW9qc29uJztcbmltcG9ydCB1bmlxIGZyb20gJ2xvZGFzaC91bmlxJztcbmltcG9ydCB7REFUQV9UWVBFU30gZnJvbSAndHlwZS1hbmFseXplcic7XG5pbXBvcnQgTGF5ZXIsIHtcbiAgY29sb3JNYWtlcixcbiAgZGVmYXVsdEdldEZpZWxkVmFsdWUsXG4gIExheWVyQmFzZUNvbmZpZyxcbiAgTGF5ZXJCYXNlQ29uZmlnUGFydGlhbCxcbiAgTGF5ZXJDb2xvckNvbmZpZyxcbiAgTGF5ZXJIZWlnaHRDb25maWcsXG4gIExheWVyUmFkaXVzQ29uZmlnLFxuICBMYXllclNpemVDb25maWcsXG4gIExheWVyU3Ryb2tlQ29sb3JDb25maWdcbn0gZnJvbSAnLi4vYmFzZS1sYXllcic7XG5pbXBvcnQge0dlb0pzb25MYXllciBhcyBEZWNrR0xHZW9Kc29uTGF5ZXJ9IGZyb20gJ0BkZWNrLmdsL2xheWVycyc7XG5pbXBvcnQge1xuICBnZXRHZW9qc29uTGF5ZXJNZXRhLFxuICBHZW9qc29uRGF0YU1hcHMsXG4gIERlY2tHbEdlb1R5cGVzLFxuICBkZXRlY3RUYWJsZUNvbHVtbnMsXG4gIENPTFVNTl9NT0RFX0dFT0pTT04sXG4gIGFwcGx5RmlsdGVyc1RvVGFibGVDb2x1bW5zLFxuICBmaWVsZElzR2VvQXJyb3dcbn0gZnJvbSAnLi9nZW9qc29uLXV0aWxzJztcbmltcG9ydCB7XG4gIGdldEdlb2pzb25MYXllck1ldGFGcm9tQXJyb3csXG4gIGlzTGF5ZXJIb3ZlcmVkRnJvbUFycm93LFxuICBnZXRIb3ZlcmVkT2JqZWN0RnJvbUFycm93XG59IGZyb20gJy4uL2xheWVyLXV0aWxzJztcbmltcG9ydCBHZW9qc29uTGF5ZXJJY29uIGZyb20gJy4vZ2VvanNvbi1sYXllci1pY29uJztcbmltcG9ydCB7XG4gIEdFT0pTT05fRklFTERTLFxuICBISUdITElHSF9DT0xPUl8zRCxcbiAgQ0hBTk5FTF9TQ0FMRVMsXG4gIExBWUVSX1ZJU19DT05GSUdTLFxuICBERUZBVUxUX0NPTE9SX1VJXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7XG4gIENvbG9yUmFuZ2UsXG4gIFZpc0NvbmZpZ051bWJlcixcbiAgVmlzQ29uZmlnQ29sb3JTZWxlY3QsXG4gIFZpc0NvbmZpZ0NvbG9yUmFuZ2UsXG4gIFZpc0NvbmZpZ1JhbmdlLFxuICBWaXNDb25maWdCb29sZWFuLFxuICBNZXJnZSxcbiAgUkdCQ29sb3IsXG4gIFByb3RvRGF0YXNldEZpZWxkLFxuICBMYXllckNvbHVtblxufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7S2VwbGVyVGFibGV9IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuaW1wb3J0IHtEYXRhQ29udGFpbmVySW50ZXJmYWNlLCBBcnJvd0RhdGFDb250YWluZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtGaWx0ZXJBcnJvd0V4dGVuc2lvbn0gZnJvbSAnQGtlcGxlci5nbC9kZWNrZ2wtbGF5ZXJzJztcbmltcG9ydCBHZW9qc29uSW5mb01vZGFsRmFjdG9yeSBmcm9tICcuL2dlb2pzb24taW5mby1tb2RhbCc7XG5cbmNvbnN0IFNVUFBPUlRFRF9BTkFMWVpFUl9UWVBFUyA9IHtcbiAgW0RBVEFfVFlQRVMuR0VPTUVUUlldOiB0cnVlLFxuICBbREFUQV9UWVBFUy5HRU9NRVRSWV9GUk9NX1NUUklOR106IHRydWUsXG4gIFtEQVRBX1RZUEVTLlBBSVJfR0VPTUVUUllfRlJPTV9TVFJJTkddOiB0cnVlXG59O1xuXG5leHBvcnQgY29uc3QgZ2VvanNvblZpc0NvbmZpZ3M6IHtcbiAgb3BhY2l0eTogJ29wYWNpdHknO1xuICBzdHJva2VPcGFjaXR5OiBWaXNDb25maWdOdW1iZXI7XG4gIHRoaWNrbmVzczogVmlzQ29uZmlnTnVtYmVyO1xuICBzdHJva2VDb2xvcjogJ3N0cm9rZUNvbG9yJztcbiAgY29sb3JSYW5nZTogJ2NvbG9yUmFuZ2UnO1xuICBzdHJva2VDb2xvclJhbmdlOiAnc3Ryb2tlQ29sb3JSYW5nZSc7XG4gIHJhZGl1czogJ3JhZGl1cyc7XG5cbiAgc2l6ZVJhbmdlOiAnc3Ryb2tlV2lkdGhSYW5nZSc7XG4gIHJhZGl1c1JhbmdlOiAncmFkaXVzUmFuZ2UnO1xuICBoZWlnaHRSYW5nZTogJ2VsZXZhdGlvblJhbmdlJztcbiAgZWxldmF0aW9uU2NhbGU6ICdlbGV2YXRpb25TY2FsZSc7XG4gIHN0cm9rZWQ6ICdzdHJva2VkJztcbiAgZmlsbGVkOiAnZmlsbGVkJztcbiAgZW5hYmxlM2Q6ICdlbmFibGUzZCc7XG4gIHdpcmVmcmFtZTogJ3dpcmVmcmFtZSc7XG4gIGZpeGVkSGVpZ2h0OiAnZml4ZWRIZWlnaHQnO1xufSA9IHtcbiAgb3BhY2l0eTogJ29wYWNpdHknLFxuICBzdHJva2VPcGFjaXR5OiB7XG4gICAgLi4uTEFZRVJfVklTX0NPTkZJR1Mub3BhY2l0eSxcbiAgICBwcm9wZXJ0eTogJ3N0cm9rZU9wYWNpdHknXG4gIH0sXG4gIHRoaWNrbmVzczoge1xuICAgIC4uLkxBWUVSX1ZJU19DT05GSUdTLnRoaWNrbmVzcyxcbiAgICBkZWZhdWx0VmFsdWU6IDAuNVxuICB9LFxuICBzdHJva2VDb2xvcjogJ3N0cm9rZUNvbG9yJyxcbiAgY29sb3JSYW5nZTogJ2NvbG9yUmFuZ2UnLFxuICBzdHJva2VDb2xvclJhbmdlOiAnc3Ryb2tlQ29sb3JSYW5nZScsXG4gIHJhZGl1czogJ3JhZGl1cycsXG5cbiAgc2l6ZVJhbmdlOiAnc3Ryb2tlV2lkdGhSYW5nZScsXG4gIHJhZGl1c1JhbmdlOiAncmFkaXVzUmFuZ2UnLFxuICBoZWlnaHRSYW5nZTogJ2VsZXZhdGlvblJhbmdlJyxcbiAgZWxldmF0aW9uU2NhbGU6ICdlbGV2YXRpb25TY2FsZScsXG4gIHN0cm9rZWQ6ICdzdHJva2VkJyxcbiAgZmlsbGVkOiAnZmlsbGVkJyxcbiAgZW5hYmxlM2Q6ICdlbmFibGUzZCcsXG4gIHdpcmVmcmFtZTogJ3dpcmVmcmFtZScsXG4gIGZpeGVkSGVpZ2h0OiAnZml4ZWRIZWlnaHQnXG59O1xuXG5leHBvcnQgdHlwZSBHZW9Kc29uVmlzQ29uZmlnU2V0dGluZ3MgPSB7XG4gIG9wYWNpdHk6IFZpc0NvbmZpZ051bWJlcjtcbiAgc3Ryb2tlT3BhY2l0eTogVmlzQ29uZmlnTnVtYmVyO1xuICB0aGlja25lc3M6IFZpc0NvbmZpZ051bWJlcjtcbiAgc3Ryb2tlQ29sb3I6IFZpc0NvbmZpZ0NvbG9yU2VsZWN0O1xuICBjb2xvclJhbmdlOiBWaXNDb25maWdDb2xvclJhbmdlO1xuICBzdHJva2VDb2xvclJhbmdlOiBWaXNDb25maWdDb2xvclJhbmdlO1xuICByYWRpdXM6IFZpc0NvbmZpZ051bWJlcjtcblxuICBzaXplUmFuZ2U6IFZpc0NvbmZpZ1JhbmdlO1xuICByYWRpdXNSYW5nZTogVmlzQ29uZmlnUmFuZ2U7XG4gIGhlaWdodFJhbmdlOiBWaXNDb25maWdSYW5nZTtcbiAgZWxldmF0aW9uU2NhbGU6IFZpc0NvbmZpZ051bWJlcjtcbiAgZml4ZWRIZWlnaHQ6IFZpc0NvbmZpZ0Jvb2xlYW47XG4gIHN0cm9rZWQ6IFZpc0NvbmZpZ0Jvb2xlYW47XG4gIGZpbGxlZDogVmlzQ29uZmlnQm9vbGVhbjtcbiAgZW5hYmxlM2Q6IFZpc0NvbmZpZ0Jvb2xlYW47XG4gIHdpcmVmcmFtZTogVmlzQ29uZmlnQm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIEdlb0pzb25MYXllckNvbHVtbnNDb25maWcgPSB7XG4gIGdlb2pzb246IExheWVyQ29sdW1uO1xufTtcblxuZXhwb3J0IHR5cGUgR2VvSnNvbkxheWVyVmlzQ29uZmlnID0ge1xuICBvcGFjaXR5OiBudW1iZXI7XG4gIHN0cm9rZU9wYWNpdHk6IG51bWJlcjtcbiAgdGhpY2tuZXNzOiBudW1iZXI7XG4gIHN0cm9rZUNvbG9yOiBSR0JDb2xvcjtcbiAgY29sb3JSYW5nZTogQ29sb3JSYW5nZTtcbiAgc3Ryb2tlQ29sb3JSYW5nZTogQ29sb3JSYW5nZTtcbiAgcmFkaXVzOiBudW1iZXI7XG5cbiAgc2l6ZVJhbmdlOiBbbnVtYmVyLCBudW1iZXJdO1xuICByYWRpdXNSYW5nZTogW251bWJlciwgbnVtYmVyXTtcbiAgaGVpZ2h0UmFuZ2U6IFtudW1iZXIsIG51bWJlcl07XG4gIGVsZXZhdGlvblNjYWxlOiBudW1iZXI7XG4gIHN0cm9rZWQ6IGJvb2xlYW47XG4gIGZpbGxlZDogYm9vbGVhbjtcbiAgZW5hYmxlM2Q6IGJvb2xlYW47XG4gIHdpcmVmcmFtZTogYm9vbGVhbjtcbiAgZml4ZWRIZWlnaHQ6IGJvb2xlYW47XG59O1xuXG50eXBlIEdlb0pzb25MYXllclZpc3VhbENoYW5uZWxDb25maWcgPSBMYXllckNvbG9yQ29uZmlnICZcbiAgTGF5ZXJTdHJva2VDb2xvckNvbmZpZyAmXG4gIExheWVyU2l6ZUNvbmZpZyAmXG4gIExheWVySGVpZ2h0Q29uZmlnICZcbiAgTGF5ZXJSYWRpdXNDb25maWc7XG5leHBvcnQgdHlwZSBHZW9Kc29uTGF5ZXJDb25maWcgPSBNZXJnZTxcbiAgTGF5ZXJCYXNlQ29uZmlnLFxuICB7Y29sdW1uczogR2VvSnNvbkxheWVyQ29sdW1uc0NvbmZpZzsgdmlzQ29uZmlnOiBHZW9Kc29uTGF5ZXJWaXNDb25maWd9XG4+ICZcbiAgR2VvSnNvbkxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZztcblxuZXhwb3J0IHR5cGUgR2VvSnNvbkxheWVyTWV0YSA9IHtcbiAgZmVhdHVyZVR5cGVzPzogRGVja0dsR2VvVHlwZXM7XG4gIGZpeGVkUmFkaXVzPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZW9Kc29uUmVxdWlyZWRDb2x1bW5zOiBbJ2dlb2pzb24nXSA9IFsnZ2VvanNvbiddO1xuXG50eXBlIE9iamVjdEluZm8gPSB7XG4gIGluZGV4OiBudW1iZXI7XG4gIG9iamVjdD86IEZlYXR1cmUgfCB1bmRlZmluZWQ7XG4gIHBpY2tlZDogYm9vbGVhbjtcbiAgbGF5ZXI6IExheWVyO1xuICByYWRpdXM/OiBudW1iZXI7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGNvbnN0IGZlYXR1cmVBY2Nlc3NvciA9XG4gICh7Z2VvanNvbn06IEdlb0pzb25MYXllckNvbHVtbnNDb25maWcpID0+XG4gIChkYzogRGF0YUNvbnRhaW5lckludGVyZmFjZSkgPT5cbiAgZCA9PlxuICAgIGRjLnZhbHVlQXQoZC5pbmRleCwgZ2VvanNvbi5maWVsZElkeCk7XG5cbmNvbnN0IGdlb0NvbHVtbkFjY2Vzc29yID1cbiAgKHtnZW9qc29ufTogR2VvSnNvbkxheWVyQ29sdW1uc0NvbmZpZykgPT5cbiAgKGRjOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlKTogYXJyb3cuVmVjdG9yIHwgbnVsbCA9PlxuICAgIGRjLmdldENvbHVtbj8uKGdlb2pzb24uZmllbGRJZHgpIGFzIGFycm93LlZlY3RvcjtcblxuY29uc3QgZ2V0VGFibGVNb2RlVmFsdWVBY2Nlc3NvciA9IGZlYXR1cmUgPT4ge1xuICAvLyBDYWxsZWQgZnJvbSBncHUtZmlsdGVyLXV0aWxzLmdldEZpbHRlclZhbHVlQWNjZXNzb3IoKVxuICByZXR1cm4gZmllbGQgPT4gZmVhdHVyZS5wcm9wZXJ0aWVzLnZhbHVlcy5tYXAodiA9PiBmaWVsZC52YWx1ZUFjY2Vzc29yKHYpKTtcbn07XG5cbmNvbnN0IGdldFRhYmxlTW9kZUZpZWxkVmFsdWUgPSAoZmllbGQsIGRhdGEpID0+IHtcbiAgbGV0IHJ2O1xuICBpZiAodHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICBydiA9IGRhdGEoZmllbGQpO1xuICB9IGVsc2Uge1xuICAgIHJ2ID0gZGVmYXVsdEdldEZpZWxkVmFsdWUoZmllbGQsIGRhdGEpO1xuICB9XG4gIHJldHVybiBydjtcbn07XG5cbmNvbnN0IGdlb0ZpZWxkQWNjZXNzb3IgPVxuICAoe2dlb2pzb259OiBHZW9Kc29uTGF5ZXJDb2x1bW5zQ29uZmlnKSA9PlxuICAoZGM6IERhdGFDb250YWluZXJJbnRlcmZhY2UpOiBQcm90b0RhdGFzZXRGaWVsZCB8IG51bGwgPT5cbiAgICBkYy5nZXRGaWVsZCA/IGRjLmdldEZpZWxkKGdlb2pzb24uZmllbGRJZHgpIDogbnVsbDtcblxuLy8gYWNjZXNzIGZlYXR1cmUgcHJvcGVydGllcyBmcm9tIGdlb2pzb24gc3ViIGxheWVyXG5leHBvcnQgY29uc3QgZGVmYXVsdEVsZXZhdGlvbiA9IDUwMDtcbmV4cG9ydCBjb25zdCBkZWZhdWx0TGluZVdpZHRoID0gMTtcbmV4cG9ydCBjb25zdCBkZWZhdWx0UmFkaXVzID0gMTtcblxuLy8gZG9uJ3QgdXNlIHN0cm9rZXMgYnkgZGVmYXVsdCBmb3IgZGF0YXNldHMgd2l0aCBsYXJnZSBudW1iZXIgb2YgcG9seWdvbnNcbmNvbnN0IERFRkFVTFRfUE9MWUdPTl9TVFJPS0VfTElNSVQgPSAxMDAwMDA7XG5cbmV4cG9ydCBjb25zdCBDT0xVTU5fTU9ERV9UQUJMRSA9ICd0YWJsZSc7XG5jb25zdCBTVVBQT1JURURfQ09MVU1OX01PREVTID0gW1xuICB7XG4gICAga2V5OiBDT0xVTU5fTU9ERV9HRU9KU09OLFxuICAgIGxhYmVsOiAnR2VvSlNPTicsXG4gICAgcmVxdWlyZWRDb2x1bW5zOiBbJ2dlb2pzb24nXVxuICB9LFxuICB7XG4gICAga2V5OiBDT0xVTU5fTU9ERV9UQUJMRSxcbiAgICBsYWJlbDogJ1RhYmxlIGNvbHVtbnMnLFxuICAgIHJlcXVpcmVkQ29sdW1uczogWydpZCcsICdsYXQnLCAnbG5nJ10sXG4gICAgb3B0aW9uYWxDb2x1bW5zOiBbJ2FsdGl0dWRlJywgJ3NvcnRCeSddXG4gIH1cbl07XG5jb25zdCBERUZBVUxUX0NPTFVNTl9NT0RFID0gQ09MVU1OX01PREVfR0VPSlNPTjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2VvSnNvbkxheWVyIGV4dGVuZHMgTGF5ZXIge1xuICBkZWNsYXJlIGNvbmZpZzogR2VvSnNvbkxheWVyQ29uZmlnO1xuICBkZWNsYXJlIHZpc0NvbmZpZ1NldHRpbmdzOiBHZW9Kc29uVmlzQ29uZmlnU2V0dGluZ3M7XG4gIGRlY2xhcmUgbWV0YTogR2VvSnNvbkxheWVyTWV0YTtcbiAgZGVjbGFyZSBnZW9BcnJvd01vZGU6IGJvb2xlYW47XG5cbiAgZGF0YVRvRmVhdHVyZTogR2VvanNvbkRhdGFNYXBzID0gW107XG4gIGRhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2UgfCBudWxsID0gbnVsbDtcbiAgZmlsdGVyZWRJbmRleDogVWludDhDbGFtcGVkQXJyYXkgfCBudWxsID0gbnVsbDtcbiAgZmlsdGVyZWRJbmRleFRyaWdnZXI6IG51bWJlcltdIHwgbnVsbCA9IG51bGw7XG4gIGNlbnRyb2lkczogQXJyYXk8bnVtYmVyW10gfCBudWxsPiA9IFtdO1xuXG4gIF9sYXllckluZm9Nb2RhbDoge1xuICAgIFtDT0xVTU5fTU9ERV9UQUJMRV06ICgpID0+IFJlYWN0LkpTWC5FbGVtZW50O1xuICAgIFtDT0xVTU5fTU9ERV9HRU9KU09OXTogKCkgPT4gUmVhY3QuSlNYLkVsZW1lbnQ7XG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnJlZ2lzdGVyVmlzQ29uZmlnKGdlb2pzb25WaXNDb25maWdzKTtcbiAgICB0aGlzLmdldFBvc2l0aW9uQWNjZXNzb3IgPSAoZGF0YUNvbnRhaW5lcjogRGF0YUNvbnRhaW5lckludGVyZmFjZSkgPT5cbiAgICAgIGZlYXR1cmVBY2Nlc3Nvcih0aGlzLmNvbmZpZy5jb2x1bW5zKShkYXRhQ29udGFpbmVyKTtcbiAgICB0aGlzLl9sYXllckluZm9Nb2RhbCA9IHtcbiAgICAgIFtDT0xVTU5fTU9ERV9UQUJMRV06IEdlb2pzb25JbmZvTW9kYWxGYWN0b3J5KENPTFVNTl9NT0RFX1RBQkxFKSxcbiAgICAgIFtDT0xVTU5fTU9ERV9HRU9KU09OXTogR2VvanNvbkluZm9Nb2RhbEZhY3RvcnkoQ09MVU1OX01PREVfR0VPSlNPTilcbiAgICB9O1xuICB9XG5cbiAgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuIEdlb0pzb25MYXllci50eXBlO1xuICB9XG4gIHN0YXRpYyBnZXQgdHlwZSgpOiAnZ2VvanNvbicge1xuICAgIHJldHVybiAnZ2VvanNvbic7XG4gIH1cblxuICBnZXQgbmFtZSgpOiAnUG9seWdvbicge1xuICAgIHJldHVybiAnUG9seWdvbic7XG4gIH1cblxuICBnZXQgbGF5ZXJJY29uKCkge1xuICAgIHJldHVybiBHZW9qc29uTGF5ZXJJY29uO1xuICB9XG5cbiAgZ2V0IGNvbHVtblBhaXJzKCkge1xuICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb2ludENvbHVtblBhaXJzO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRlZENvbHVtbk1vZGVzKCkge1xuICAgIHJldHVybiBTVVBQT1JURURfQ09MVU1OX01PREVTO1xuICB9XG5cbiAgZ2V0IGxheWVySW5mb01vZGFsKCkge1xuICAgIHJldHVybiB7XG4gICAgICBbQ09MVU1OX01PREVfR0VPSlNPTl06IHtcbiAgICAgICAgaWQ6ICdpY29uSW5mbycsXG4gICAgICAgIHRlbXBsYXRlOiB0aGlzLl9sYXllckluZm9Nb2RhbFtDT0xVTU5fTU9ERV9HRU9KU09OXSxcbiAgICAgICAgbW9kYWxQcm9wczoge1xuICAgICAgICAgIHRpdGxlOiAnbW9kYWwucG9seWdvbkluZm8udGl0bGUnXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbQ09MVU1OX01PREVfVEFCTEVdOiB7XG4gICAgICAgIGlkOiAnaWNvbkluZm8nLFxuICAgICAgICB0ZW1wbGF0ZTogdGhpcy5fbGF5ZXJJbmZvTW9kYWxbQ09MVU1OX01PREVfVEFCTEVdLFxuICAgICAgICBtb2RhbFByb3BzOiB7XG4gICAgICAgICAgdGl0bGU6ICdtb2RhbC5wb2x5Z29uSW5mby50aXRsZVRhYmxlJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGFjY2Vzc1ZTRmllbGRWYWx1ZSgpIHtcbiAgICBpZiAodGhpcy5jb25maWcuY29sdW1uTW9kZSA9PT0gQ09MVU1OX01PREVfR0VPSlNPTikge1xuICAgICAgcmV0dXJuIGRlZmF1bHRHZXRGaWVsZFZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gZ2V0VGFibGVNb2RlRmllbGRWYWx1ZTtcbiAgfVxuXG4gIGdldCB2aXN1YWxDaGFubmVscygpIHtcbiAgICBjb25zdCB2aXN1YWxDaGFubmVscyA9IHN1cGVyLnZpc3VhbENoYW5uZWxzO1xuICAgIHJldHVybiB7XG4gICAgICBjb2xvcjoge1xuICAgICAgICAuLi52aXN1YWxDaGFubmVscy5jb2xvcixcbiAgICAgICAgYWNjZXNzb3I6ICdnZXRGaWxsQ29sb3InLFxuICAgICAgICBjb25kaXRpb246IGNvbmZpZyA9PiBjb25maWcudmlzQ29uZmlnLmZpbGxlZCxcbiAgICAgICAgbnVsbFZhbHVlOiB2aXN1YWxDaGFubmVscy5jb2xvci5udWxsVmFsdWUsXG4gICAgICAgIGdldEF0dHJpYnV0ZVZhbHVlOiBjb25maWcgPT4gZCA9PiBkLnByb3BlcnRpZXMuZmlsbENvbG9yIHx8IGNvbmZpZy5jb2xvcixcbiAgICAgICAgLy8gdXNlZCB0aGlzIHRvIGdldCB1cGRhdGVUcmlnZ2Vyc1xuICAgICAgICBkZWZhdWx0VmFsdWU6IGNvbmZpZyA9PiBjb25maWcuY29sb3JcbiAgICAgIH0sXG4gICAgICBzdHJva2VDb2xvcjoge1xuICAgICAgICBwcm9wZXJ0eTogJ3N0cm9rZUNvbG9yJyxcbiAgICAgICAgZmllbGQ6ICdzdHJva2VDb2xvckZpZWxkJyxcbiAgICAgICAgc2NhbGU6ICdzdHJva2VDb2xvclNjYWxlJyxcbiAgICAgICAgZG9tYWluOiAnc3Ryb2tlQ29sb3JEb21haW4nLFxuICAgICAgICByYW5nZTogJ3N0cm9rZUNvbG9yUmFuZ2UnLFxuICAgICAgICBrZXk6ICdzdHJva2VDb2xvcicsXG4gICAgICAgIGNoYW5uZWxTY2FsZVR5cGU6IENIQU5ORUxfU0NBTEVTLmNvbG9yLFxuICAgICAgICBhY2Nlc3NvcjogJ2dldExpbmVDb2xvcicsXG4gICAgICAgIGNvbmRpdGlvbjogY29uZmlnID0+IGNvbmZpZy52aXNDb25maWcuc3Ryb2tlZCxcbiAgICAgICAgbnVsbFZhbHVlOiB2aXN1YWxDaGFubmVscy5jb2xvci5udWxsVmFsdWUsXG4gICAgICAgIGdldEF0dHJpYnV0ZVZhbHVlOiBjb25maWcgPT4gZCA9PlxuICAgICAgICAgIGQucHJvcGVydGllcy5saW5lQ29sb3IgfHwgY29uZmlnLnZpc0NvbmZpZy5zdHJva2VDb2xvciB8fCBjb25maWcuY29sb3IsXG4gICAgICAgIC8vIHVzZWQgdGhpcyB0byBnZXQgdXBkYXRlVHJpZ2dlcnNcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBjb25maWcgPT4gY29uZmlnLnZpc0NvbmZpZy5zdHJva2VDb2xvciB8fCBjb25maWcuY29sb3JcbiAgICAgIH0sXG4gICAgICBzaXplOiB7XG4gICAgICAgIC4uLnZpc3VhbENoYW5uZWxzLnNpemUsXG4gICAgICAgIHByb3BlcnR5OiAnc3Ryb2tlJyxcbiAgICAgICAgYWNjZXNzb3I6ICdnZXRMaW5lV2lkdGgnLFxuICAgICAgICBjb25kaXRpb246IGNvbmZpZyA9PiBjb25maWcudmlzQ29uZmlnLnN0cm9rZWQsXG4gICAgICAgIG51bGxWYWx1ZTogMCxcbiAgICAgICAgZ2V0QXR0cmlidXRlVmFsdWU6ICgpID0+IGQgPT4gZC5wcm9wZXJ0aWVzLmxpbmVXaWR0aCB8fCBkZWZhdWx0TGluZVdpZHRoXG4gICAgICB9LFxuICAgICAgaGVpZ2h0OiB7XG4gICAgICAgIHByb3BlcnR5OiAnaGVpZ2h0JyxcbiAgICAgICAgZmllbGQ6ICdoZWlnaHRGaWVsZCcsXG4gICAgICAgIHNjYWxlOiAnaGVpZ2h0U2NhbGUnLFxuICAgICAgICBkb21haW46ICdoZWlnaHREb21haW4nLFxuICAgICAgICByYW5nZTogJ2hlaWdodFJhbmdlJyxcbiAgICAgICAga2V5OiAnaGVpZ2h0JyxcbiAgICAgICAgZml4ZWQ6ICdmaXhlZEhlaWdodCcsXG4gICAgICAgIGNoYW5uZWxTY2FsZVR5cGU6IENIQU5ORUxfU0NBTEVTLnNpemUsXG4gICAgICAgIGFjY2Vzc29yOiAnZ2V0RWxldmF0aW9uJyxcbiAgICAgICAgY29uZGl0aW9uOiBjb25maWcgPT4gY29uZmlnLnZpc0NvbmZpZy5lbmFibGUzZCxcbiAgICAgICAgbnVsbFZhbHVlOiAwLFxuICAgICAgICBnZXRBdHRyaWJ1dGVWYWx1ZTogKCkgPT4gZCA9PiBkLnByb3BlcnRpZXMuZWxldmF0aW9uIHx8IGRlZmF1bHRFbGV2YXRpb25cbiAgICAgIH0sXG4gICAgICByYWRpdXM6IHtcbiAgICAgICAgcHJvcGVydHk6ICdyYWRpdXMnLFxuICAgICAgICBmaWVsZDogJ3JhZGl1c0ZpZWxkJyxcbiAgICAgICAgc2NhbGU6ICdyYWRpdXNTY2FsZScsXG4gICAgICAgIGRvbWFpbjogJ3JhZGl1c0RvbWFpbicsXG4gICAgICAgIHJhbmdlOiAncmFkaXVzUmFuZ2UnLFxuICAgICAgICBrZXk6ICdyYWRpdXMnLFxuICAgICAgICBjaGFubmVsU2NhbGVUeXBlOiBDSEFOTkVMX1NDQUxFUy5yYWRpdXMsXG4gICAgICAgIGFjY2Vzc29yOiAnZ2V0UG9pbnRSYWRpdXMnLFxuICAgICAgICBudWxsVmFsdWU6IDAsXG4gICAgICAgIGdldEF0dHJpYnV0ZVZhbHVlOiAoKSA9PiBkID0+IGQucHJvcGVydGllcy5yYWRpdXMgfHwgZGVmYXVsdFJhZGl1c1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZmluZERlZmF1bHRMYXllclByb3BzKHtsYWJlbCwgZmllbGRzID0gW119OiBLZXBsZXJUYWJsZSkge1xuICAgIGNvbnN0IGdlb2pzb25Db2x1bW5zID0gZmllbGRzXG4gICAgICAuZmlsdGVyKFxuICAgICAgICBmID0+XG4gICAgICAgICAgKGYudHlwZSA9PT0gJ2dlb2pzb24nIHx8IGYudHlwZSA9PT0gJ2dlb2Fycm93JykgJiZcbiAgICAgICAgICBmLmFuYWx5emVyVHlwZSAmJlxuICAgICAgICAgIFNVUFBPUlRFRF9BTkFMWVpFUl9UWVBFU1tmLmFuYWx5emVyVHlwZV1cbiAgICAgIClcbiAgICAgIC5tYXAoZiA9PiBmLm5hbWUpO1xuXG4gICAgY29uc3QgZGVmYXVsdENvbHVtbnMgPSB7XG4gICAgICBnZW9qc29uOiB1bmlxKFsuLi5HRU9KU09OX0ZJRUxEUy5nZW9qc29uLCAuLi5nZW9qc29uQ29sdW1uc10pXG4gICAgfTtcblxuICAgIGNvbnN0IGZvdW5kQ29sdW1ucyA9IHRoaXMuZmluZERlZmF1bHRDb2x1bW5GaWVsZChkZWZhdWx0Q29sdW1ucywgZmllbGRzKTtcbiAgICBpZiAoIWZvdW5kQ29sdW1ucyB8fCAhZm91bmRDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHtwcm9wczogW119O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBwcm9wczogZm91bmRDb2x1bW5zLm1hcChjb2x1bW5zID0+ICh7XG4gICAgICAgIGxhYmVsOiAodHlwZW9mIGxhYmVsID09PSAnc3RyaW5nJyAmJiBsYWJlbC5yZXBsYWNlKC9cXC5bXi8uXSskLywgJycpKSB8fCB0aGlzLnR5cGUsXG4gICAgICAgIGNvbHVtbnMsXG4gICAgICAgIGlzVmlzaWJsZTogdHJ1ZVxuICAgICAgfSkpXG4gICAgfTtcbiAgfVxuXG4gIGdldERlZmF1bHRMYXllckNvbmZpZyhwcm9wczogTGF5ZXJCYXNlQ29uZmlnUGFydGlhbCkge1xuICAgIGNvbnN0IGRlZmF1bHRMYXllckNvbmZpZyA9IHN1cGVyLmdldERlZmF1bHRMYXllckNvbmZpZyhwcm9wcyA/PyB7fSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRlZmF1bHRMYXllckNvbmZpZyxcblxuICAgICAgY29sdW1uTW9kZTogcHJvcHM/LmNvbHVtbk1vZGUgPz8gREVGQVVMVF9DT0xVTU5fTU9ERSxcbiAgICAgIC8vIGFkZCBoZWlnaHQgdmlzdWFsIGNoYW5uZWxcbiAgICAgIGhlaWdodEZpZWxkOiBudWxsLFxuICAgICAgaGVpZ2h0RG9tYWluOiBbMCwgMV0sXG4gICAgICBoZWlnaHRTY2FsZTogJ2xpbmVhcicsXG5cbiAgICAgIC8vIGFkZCByYWRpdXMgdmlzdWFsIGNoYW5uZWxcbiAgICAgIHJhZGl1c0ZpZWxkOiBudWxsLFxuICAgICAgcmFkaXVzRG9tYWluOiBbMCwgMV0sXG4gICAgICByYWRpdXNTY2FsZTogJ2xpbmVhcicsXG5cbiAgICAgIC8vIGFkZCBzdHJva2UgY29sb3IgdmlzdWFsIGNoYW5uZWxcbiAgICAgIHN0cm9rZUNvbG9yRmllbGQ6IG51bGwsXG4gICAgICBzdHJva2VDb2xvckRvbWFpbjogWzAsIDFdLFxuICAgICAgc3Ryb2tlQ29sb3JTY2FsZTogJ3F1YW50aWxlJyxcbiAgICAgIGNvbG9yVUk6IHtcbiAgICAgICAgLi4uZGVmYXVsdExheWVyQ29uZmlnLmNvbG9yVUksXG4gICAgICAgIHN0cm9rZUNvbG9yUmFuZ2U6IERFRkFVTFRfQ09MT1JfVUlcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZ2V0SG92ZXJEYXRhKG9iamVjdCwgZGF0YUNvbnRhaW5lcikge1xuICAgIC8vIGluZGV4IG9mIGRhdGFDb250YWluZXIgaXMgc2F2ZWQgdG8gZmVhdHVyZS5wcm9wZXJ0aWVzXG4gICAgLy8gZm9yIGFycm93IGZvcm1hdCwgYG9iamVjdGAgaXMgdGhlIGluZGV4IG9mIHRoZSByb3cgcmV0dXJuZWQgZnJvbSBkZWNrXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmdlb0Fycm93TW9kZSA/IG9iamVjdCA6IG9iamVjdD8ucHJvcGVydGllcz8uaW5kZXg7XG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIHJldHVybiBkYXRhQ29udGFpbmVyLnJvdyhpbmRleCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0RmlsdGVyZWRJdGVtQ291bnQoKSB7XG4gICAgLy8gcmV0dXJuIC1wb2x5Z29ucy1maWxsIG9yIC1wb2x5Z29ucy1zdHJva2VcbiAgICAvLyArIC1saW5lc3RyaW5nc1xuICAgIC8vICsgLXBvaW50cy1jaXJjbGVcbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy5maWx0ZXJlZEl0ZW1Db3VudCkubGVuZ3RoKSB7XG4gICAgICBjb25zdCBwb2x5Z29uQ291bnQgPVxuICAgICAgICB0aGlzLmZpbHRlcmVkSXRlbUNvdW50W2Ake3RoaXMuaWR9LXBvbHlnb25zLWZpbGxgXSB8fFxuICAgICAgICB0aGlzLmZpbHRlcmVkSXRlbUNvdW50W2Ake3RoaXMuaWR9LXBvbHlnb25zLXN0cm9rZWBdIHx8XG4gICAgICAgIDA7XG4gICAgICBjb25zdCBsaW5lc3RyaW5nQ291bnQgPSB0aGlzLmZpbHRlcmVkSXRlbUNvdW50W2Ake3RoaXMuaWR9LWxpbmVzdHJpbmdzYF0gfHwgMDtcbiAgICAgIGNvbnN0IHBvaW50Q291bnQgPSB0aGlzLmZpbHRlcmVkSXRlbUNvdW50W2Ake3RoaXMuaWR9LXBvaW50cy1jaXJjbGVgXSB8fCAwO1xuXG4gICAgICByZXR1cm4gcG9seWdvbkNvdW50ICsgbGluZXN0cmluZ0NvdW50ICsgcG9pbnRDb3VudDtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNhbGN1bGF0ZURhdGFBdHRyaWJ1dGUoZGF0YXNldDogS2VwbGVyVGFibGUpIHtcbiAgICB0aGlzLmdlb0Fycm93TW9kZSA9IGZpZWxkSXNHZW9BcnJvdyhcbiAgICAgIGdlb0ZpZWxkQWNjZXNzb3IodGhpcy5jb25maWcuY29sdW1ucykoZGF0YXNldC5kYXRhQ29udGFpbmVyKVxuICAgICk7XG5cbiAgICBjb25zdCB7ZGF0YUNvbnRhaW5lciwgZmlsdGVyZWRJbmRleH0gPSBkYXRhc2V0O1xuICAgIGlmICh0aGlzLmdlb0Fycm93TW9kZSkge1xuICAgICAgLy8gVE9ETyBhZGQgY29sdW1uTW9kZSBsb2dpYyBoZXJlIGZvciBBcnJvd0RhdGFDb250YWluZXI/XG4gICAgICAvLyBmaWx0ZXIgZ2VvanNvbi9hcnJvdyB0YWJsZSBieSB2YWx1ZXMgYW5kIG1ha2UgYSBwYXJ0aWFsIGNvcHkgb2YgdGhlIHJhdyB0YWJsZSBhcmUgZXhwZW5zaXZlXG4gICAgICAvLyBzbyB3ZSB3aWxsIHVzZSBmaWx0ZXJlZEluZGV4IHRvIGNyZWF0ZSBhbiBhdHRyaWJ1dGUgZS5nLiBmaWx0ZXJlZEluZGV4IFswfDFdIGZvciBHUFUgZmlsdGVyaW5nXG4gICAgICAvLyBpbiBkZWNrLmdsIGxheWVyLCBzZWU6IEZpbHRlckFycm93RXh0ZW5zaW9uIGluIEBrZXBsZXIuZ2wvZGVja2dsLWxheWVyc1xuICAgICAgaWYgKCF0aGlzLmZpbHRlcmVkSW5kZXggfHwgdGhpcy5maWx0ZXJlZEluZGV4Lmxlbmd0aCAhPT0gZGF0YUNvbnRhaW5lci5udW1Sb3dzKCkpIHtcbiAgICAgICAgLy8gZm9yIGluY3JlbWVudGFsIGRhdGEgbG9hZGluZywgd2UgbmVlZCB0byB1cGRhdGUgZmlsdGVyZWRJbmRleFxuICAgICAgICB0aGlzLmZpbHRlcmVkSW5kZXggPSBuZXcgVWludDhDbGFtcGVkQXJyYXkoZGF0YUNvbnRhaW5lci5udW1Sb3dzKCkpO1xuICAgICAgICB0aGlzLmZpbHRlcmVkSW5kZXguZmlsbCgxKTtcbiAgICAgIH1cblxuICAgICAgLy8gY2hlY2sgaWYgZmlsdGVyZWRJbmRleCBpcyBhIHJhbmdlIGZyb20gMCB0byBudW1Sb3dzIGlmIGl0IGlzLCB3ZSBkb24ndCBuZWVkIHRvIHVwZGF0ZSBpdFxuICAgICAgY29uc3QgaXNSYW5nZSA9IGZpbHRlcmVkSW5kZXggJiYgZmlsdGVyZWRJbmRleC5sZW5ndGggPT09IGRhdGFDb250YWluZXIubnVtUm93cygpO1xuICAgICAgaWYgKCFpc1JhbmdlIHx8IHRoaXMuZmlsdGVyZWRJbmRleFRyaWdnZXIgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJlZEluZGV4LmZpbGwoMCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsdGVyZWRJbmRleC5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIHRoaXMuZmlsdGVyZWRJbmRleFtmaWx0ZXJlZEluZGV4W2ldXSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWx0ZXJlZEluZGV4VHJpZ2dlciA9IGZpbHRlcmVkSW5kZXg7XG4gICAgICB9XG4gICAgICAvLyBmb3IgYXJyb3csIGFsd2F5cyByZXR1cm4gZnVsbCBkYXRhVG9GZWF0dXJlIGluc3RlYWQgb2YgYSBmaWx0ZXJlZCBvbmUsIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gdXBkYXRlIGF0dHJpYnV0ZXMgaW4gR1BVXG4gICAgICByZXR1cm4gdGhpcy5kYXRhVG9GZWF0dXJlO1xuICAgIH1cblxuICAgIC8vIGZvciBnZW9qc29uLCB0aGlzIHNob3VsZCB3b3JrIGFzIHdlbGwgYW5kIG1vcmUgZWZmaWNpZW50LiBCdXQgd2UgbmVlZCB0byB1cGRhdGUgc29tZSB0ZXN0IGNhc2VzIGUuZy4gI0dlb2pzb25MYXllciAtPiBmb3JtYXRMYXllckRhdGFcbiAgICBzd2l0Y2ggKHRoaXMuY29uZmlnLmNvbHVtbk1vZGUpIHtcbiAgICAgIGNhc2UgQ09MVU1OX01PREVfR0VPSlNPTjoge1xuICAgICAgICByZXR1cm4gZmlsdGVyZWRJbmRleC5tYXAoaSA9PiB0aGlzLmRhdGFUb0ZlYXR1cmVbaV0pLmZpbHRlcihkID0+IGQpO1xuICAgICAgfVxuXG4gICAgICBjYXNlIENPTFVNTl9NT0RFX1RBQkxFOlxuICAgICAgICByZXR1cm4gYXBwbHlGaWx0ZXJzVG9UYWJsZUNvbHVtbnMoZGF0YXNldCwgdGhpcy5kYXRhVG9GZWF0dXJlKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIGZvcm1hdExheWVyRGF0YShkYXRhc2V0cywgb2xkTGF5ZXJEYXRhKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnLmRhdGFJZCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjb25zdCB7Z3B1RmlsdGVyLCBkYXRhQ29udGFpbmVyfSA9IGRhdGFzZXRzW3RoaXMuY29uZmlnLmRhdGFJZF07XG4gICAgY29uc3Qge2RhdGF9ID0gdGhpcy51cGRhdGVEYXRhKGRhdGFzZXRzLCBvbGRMYXllckRhdGEpO1xuXG4gICAgbGV0IGZpbHRlclZhbHVlQWNjZXNzb3I7XG4gICAgbGV0IGRhdGFBY2Nlc3NvcjtcbiAgICBpZiAodGhpcy5jb25maWcuY29sdW1uTW9kZSA9PT0gQ09MVU1OX01PREVfR0VPSlNPTikge1xuICAgICAgZmlsdGVyVmFsdWVBY2Nlc3NvciA9IChkYywgZCwgZmllbGRJbmRleCkgPT4gZGMudmFsdWVBdChkLnByb3BlcnRpZXMuaW5kZXgsIGZpZWxkSW5kZXgpO1xuICAgICAgZGF0YUFjY2Vzc29yID0gKCkgPT4gZCA9PiAoe2luZGV4OiBkLnByb3BlcnRpZXMuaW5kZXh9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmlsdGVyVmFsdWVBY2Nlc3NvciA9IGdldFRhYmxlTW9kZVZhbHVlQWNjZXNzb3I7XG4gICAgICBkYXRhQWNjZXNzb3IgPSAoKSA9PiBkID0+ICh7aW5kZXg6IGQucHJvcGVydGllcy5pbmRleH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGluZGV4QWNjZXNzb3IgPSBmID0+IGYucHJvcGVydGllcy5pbmRleDtcbiAgICBjb25zdCBhY2Nlc3NvcnMgPSB0aGlzLmdldEF0dHJpYnV0ZUFjY2Vzc29ycyh7ZGF0YUFjY2Vzc29yLCBkYXRhQ29udGFpbmVyfSk7XG5cbiAgICBjb25zdCBpc0ZpbHRlcmVkQWNjZXNzb3IgPSBkID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmZpbHRlcmVkSW5kZXggPyB0aGlzLmZpbHRlcmVkSW5kZXhbZC5wcm9wZXJ0aWVzLmluZGV4XSA6IDE7XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICBkYXRhLFxuICAgICAgZ2V0RmlsdGVyVmFsdWU6IGdwdUZpbHRlci5maWx0ZXJWYWx1ZUFjY2Vzc29yKGRhdGFDb250YWluZXIpKFxuICAgICAgICBpbmRleEFjY2Vzc29yLFxuICAgICAgICBmaWx0ZXJWYWx1ZUFjY2Vzc29yXG4gICAgICApLFxuICAgICAgZ2V0RmlsdGVyZWQ6IGlzRmlsdGVyZWRBY2Nlc3NvcixcbiAgICAgIC4uLmFjY2Vzc29yc1xuICAgIH07XG4gIH1cblxuICBpc0luUG9seWdvbihkYXRhOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlLCBpbmRleDogbnVtYmVyLCBwb2x5Z29uOiBGZWF0dXJlPFBvbHlnb24+KTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuY2VudHJvaWRzLmxlbmd0aCA9PT0gMCB8fCAhdGhpcy5jZW50cm9pZHNbaW5kZXhdKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGlzUmVhY3RhbmdsZVNlYXJjaEJveCA9IHBvbHlnb24ucHJvcGVydGllcz8uc2hhcGUgPT09ICdSZWN0YW5nbGUnO1xuICAgIGNvbnN0IHBvaW50ID0gdGhpcy5jZW50cm9pZHNbaW5kZXhdO1xuICAgIC8vIGlmIG5vIHZhbGlkIGNlbnRyb2lkLCByZXR1cm4gZmFsc2VcbiAgICBpZiAoIXBvaW50KSByZXR1cm4gZmFsc2U7XG4gICAgLy8gcXVpY2sgY2hlY2sgaWYgY2VudHJvaWQgaXMgd2l0aGluIHRoZSBxdWVyeSByZWN0YW5nbGVcbiAgICBpZiAoaXNSZWFjdGFuZ2xlU2VhcmNoQm94ICYmIHBvbHlnb24ucHJvcGVydGllcz8uYmJveCkge1xuICAgICAgY29uc3QgW21pblgsIG1pblksIG1heFgsIG1heFldID0gcG9seWdvbj8ucHJvcGVydGllcz8uYmJveCB8fCBbXTtcbiAgICAgIHJldHVybiBwb2ludFswXSA+PSBtaW5YICYmIHBvaW50WzBdIDw9IG1heFggJiYgcG9pbnRbMV0gPj0gbWluWSAmJiBwb2ludFsxXSA8PSBtYXhZO1xuICAgIH1cbiAgICAvLyB1c2UgdHVyZi5qcyB0byBjaGVjayBpZiBjZW50cm9pZCBpcyB3aXRoaW4gcXVlcnkgcG9seWdvblxuICAgIHJldHVybiBib29sZWFuV2l0aGluKHR1cmZQb2ludChwb2ludCksIHBvbHlnb24pO1xuICB9XG5cbiAgdXBkYXRlTGF5ZXJNZXRhKGRhdGFzZXQ6IEtlcGxlclRhYmxlKSB7XG4gICAgY29uc3Qge2RhdGFDb250YWluZXJ9ID0gZGF0YXNldDtcblxuICAgIHRoaXMuZGF0YUNvbnRhaW5lciA9IGRhdGFDb250YWluZXI7XG5cbiAgICB0aGlzLmdlb0Fycm93TW9kZSA9IGZpZWxkSXNHZW9BcnJvdyhcbiAgICAgIGdlb0ZpZWxkQWNjZXNzb3IodGhpcy5jb25maWcuY29sdW1ucykoZGF0YXNldC5kYXRhQ29udGFpbmVyKVxuICAgICk7XG5cbiAgICBpZiAodGhpcy5nZW9BcnJvd01vZGUgJiYgZGF0YUNvbnRhaW5lciBpbnN0YW5jZW9mIEFycm93RGF0YUNvbnRhaW5lcikge1xuICAgICAgY29uc3QgZ2VvQ29sdW1uID0gZ2VvQ29sdW1uQWNjZXNzb3IodGhpcy5jb25maWcuY29sdW1ucykoZGF0YUNvbnRhaW5lcik7XG4gICAgICBjb25zdCBnZW9GaWVsZCA9IGdlb0ZpZWxkQWNjZXNzb3IodGhpcy5jb25maWcuY29sdW1ucykoZGF0YUNvbnRhaW5lcik7XG5cbiAgICAgIC8vIHVwZGF0ZSB0aGUgbGF0ZXN0IGJhdGNoL2NodW5rIG9mIGdlb2Fycm93IGRhdGEgd2hlbiBsb2FkaW5nIGRhdGEgaW5jcmVtZW50YWxseVxuICAgICAgaWYgKGdlb0NvbHVtbiAmJiBnZW9GaWVsZCAmJiB0aGlzLmRhdGFUb0ZlYXR1cmUubGVuZ3RoIDwgZGF0YUNvbnRhaW5lci5udW1DaHVua3MoKSkge1xuICAgICAgICAvLyBmb3IgaW5jcmVtZW50YWxseSBsb2FkaW5nIGRhdGEsIHdlIG9ubHkgbG9hZCBhbmQgcmVuZGVyIHRoZSBsYXRlc3QgYmF0Y2g7IG90aGVyd2lzZSwgd2Ugd2lsbCBsb2FkIGFuZCByZW5kZXIgYWxsIGJhdGNoZXNcbiAgICAgICAgY29uc3QgaXNJbmNyZW1lbnRhbExvYWQgPSBkYXRhQ29udGFpbmVyLm51bUNodW5rcygpIC0gdGhpcy5kYXRhVG9GZWF0dXJlLmxlbmd0aCA9PT0gMTtcbiAgICAgICAgLy8gVE9ETzogYWRkIHN1cHBvcnQgZm9yIENPTFVNTl9NT0RFX1RBQkxFIGluIGdldEdlb2pzb25MYXllck1ldGFGcm9tQXJyb3dcbiAgICAgICAgY29uc3Qge2RhdGFUb0ZlYXR1cmUsIGJvdW5kcywgZml4ZWRSYWRpdXMsIGZlYXR1cmVUeXBlcywgY2VudHJvaWRzfSA9XG4gICAgICAgICAgZ2V0R2VvanNvbkxheWVyTWV0YUZyb21BcnJvdyh7XG4gICAgICAgICAgICBkYXRhQ29udGFpbmVyLFxuICAgICAgICAgICAgZ2VvQ29sdW1uLFxuICAgICAgICAgICAgZ2VvRmllbGQsXG4gICAgICAgICAgICAuLi4oaXNJbmNyZW1lbnRhbExvYWQgPyB7Y2h1bmtJbmRleDogdGhpcy5kYXRhVG9GZWF0dXJlLmxlbmd0aH0gOiBudWxsKVxuICAgICAgICAgIH0pO1xuICAgICAgICBpZiAoY2VudHJvaWRzKSB0aGlzLmNlbnRyb2lkcyA9IHRoaXMuY2VudHJvaWRzLmNvbmNhdChjZW50cm9pZHMpO1xuICAgICAgICB0aGlzLnVwZGF0ZU1ldGEoe2JvdW5kcywgZml4ZWRSYWRpdXMsIGZlYXR1cmVUeXBlc30pO1xuICAgICAgICB0aGlzLmRhdGFUb0ZlYXR1cmUgPSBbLi4udGhpcy5kYXRhVG9GZWF0dXJlLCAuLi5kYXRhVG9GZWF0dXJlXTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuZGF0YVRvRmVhdHVyZS5sZW5ndGggPT09IDAgfHwgdGhpcy5jb25maWcuY29sdW1uTW9kZSA9PT0gQ09MVU1OX01PREVfVEFCTEUpIHtcbiAgICAgIGNvbnN0IGdldEZlYXR1cmUgPSB0aGlzLmdldFBvc2l0aW9uQWNjZXNzb3IoZGF0YUNvbnRhaW5lcik7XG5cbiAgICAgIGNvbnN0IHtkYXRhVG9GZWF0dXJlLCBib3VuZHMsIGZpeGVkUmFkaXVzLCBmZWF0dXJlVHlwZXMsIGNlbnRyb2lkc30gPSBnZXRHZW9qc29uTGF5ZXJNZXRhKHtcbiAgICAgICAgZGF0YUNvbnRhaW5lcixcbiAgICAgICAgZ2V0RmVhdHVyZSxcbiAgICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZ1xuICAgICAgfSk7XG4gICAgICBpZiAoY2VudHJvaWRzKSB0aGlzLmNlbnRyb2lkcyA9IGNlbnRyb2lkcztcbiAgICAgIHRoaXMuZGF0YVRvRmVhdHVyZSA9IGRhdGFUb0ZlYXR1cmU7XG4gICAgICB0aGlzLnVwZGF0ZU1ldGEoe2JvdW5kcywgZml4ZWRSYWRpdXMsIGZlYXR1cmVUeXBlc30pO1xuICAgIH1cbiAgfVxuXG4gIHNldEluaXRpYWxMYXllckNvbmZpZyhkYXRhc2V0OiBLZXBsZXJUYWJsZSkge1xuICAgIGNvbnN0IHtkYXRhQ29udGFpbmVyfSA9IGRhdGFzZXQ7XG4gICAgaWYgKCFkYXRhQ29udGFpbmVyLm51bVJvd3MoKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gZGVmZWZhdWx0TGF5ZXJQcm9wcyB3aWxsIGF1dG9tYXRpY2FsbHkgZmluZCBnZW9qc29uIGNvbHVtblxuICAgIC8vIGlmIG5vdCBmb3VuZCwgd2UgdHJ5IHRvIHNldCBpdCB0byBpZCAvIGxhdCAvbG5nIC90c1xuICAgIGlmICghdGhpcy5jb25maWcuY29sdW1ucy5nZW9qc29uLnZhbHVlKSB7XG4gICAgICAvLyBmaW5kIGNvbHVtbnMgZnJvbSBsYXQsIGxuZywgaWQsIGFuZCB0c1xuICAgICAgY29uc3QgY29sdW1uQ29uZmlnID0gZGV0ZWN0VGFibGVDb2x1bW5zKGRhdGFzZXQsIHRoaXMuY29uZmlnLmNvbHVtbnMsICdzb3J0QnknKTtcbiAgICAgIGlmIChjb2x1bW5Db25maWcpIHtcbiAgICAgICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgICAgLi4uY29sdW1uQ29uZmlnLFxuICAgICAgICAgIGNvbHVtbk1vZGU6IENPTFVNTl9NT0RFX1RBQkxFXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVMYXllck1ldGEoZGF0YXNldCk7XG5cbiAgICBjb25zdCB7ZmVhdHVyZVR5cGVzfSA9IHRoaXMubWV0YTtcbiAgICAvLyBkZWZhdWx0IHNldHRpbmdzIGlzIHN0cm9rZTogdHJ1ZSwgZmlsbGVkOiBmYWxzZVxuICAgIGlmIChmZWF0dXJlVHlwZXMgJiYgZmVhdHVyZVR5cGVzLnBvbHlnb24pIHtcbiAgICAgIC8vIHNldCBib3RoIGZpbGwgYW5kIHN0cm9rZSB0byB0cnVlXG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVMYXllclZpc0NvbmZpZyh7XG4gICAgICAgIGZpbGxlZDogdHJ1ZSxcbiAgICAgICAgc3Ryb2tlZDogZGF0YUNvbnRhaW5lci5udW1Sb3dzKCkgPCBERUZBVUxUX1BPTFlHT05fU1RST0tFX0xJTUlULFxuICAgICAgICBzdHJva2VDb2xvcjogY29sb3JNYWtlci5uZXh0KCkudmFsdWVcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoZmVhdHVyZVR5cGVzICYmIGZlYXR1cmVUeXBlcy5wb2ludCkge1xuICAgICAgLy8gc2V0IGZpbGwgdG8gdHJ1ZSBpZiBkZXRlY3QgcG9pbnRcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUxheWVyVmlzQ29uZmlnKHtmaWxsZWQ6IHRydWUsIHN0cm9rZWQ6IGZhbHNlfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBpc0xheWVySG92ZXJlZChvYmplY3RJbmZvOiBPYmplY3RJbmZvKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2VvQXJyb3dNb2RlXG4gICAgICA/IGlzTGF5ZXJIb3ZlcmVkRnJvbUFycm93KG9iamVjdEluZm8sIHRoaXMuaWQpXG4gICAgICA6IHN1cGVyLmlzTGF5ZXJIb3ZlcmVkKG9iamVjdEluZm8pO1xuICB9XG5cbiAgaGFzSG92ZXJlZE9iamVjdChvYmplY3RJbmZvOiBPYmplY3RJbmZvKTogRmVhdHVyZSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmdlb0Fycm93TW9kZVxuICAgICAgPyBnZXRIb3ZlcmVkT2JqZWN0RnJvbUFycm93KFxuICAgICAgICAgIG9iamVjdEluZm8sXG4gICAgICAgICAgdGhpcy5kYXRhQ29udGFpbmVyLFxuICAgICAgICAgIHRoaXMuaWQsXG4gICAgICAgICAgZ2VvQ29sdW1uQWNjZXNzb3IodGhpcy5jb25maWcuY29sdW1ucyksXG4gICAgICAgICAgZ2VvRmllbGRBY2Nlc3Nvcih0aGlzLmNvbmZpZy5jb2x1bW5zKVxuICAgICAgICApXG4gICAgICA6IHN1cGVyLmhhc0hvdmVyZWRPYmplY3Qob2JqZWN0SW5mbyk7XG4gIH1cblxuICBnZXRFbGV2YXRpb25ab29tRmFjdG9yKHt6b29tLCB6b29tT2Zmc2V0ID0gMH0pIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcudmlzQ29uZmlnLmZpeGVkSGVpZ2h0ID8gMSA6IE1hdGgucG93KDIsIE1hdGgubWF4KDggLSB6b29tICsgem9vbU9mZnNldCwgMCkpO1xuICB9XG5cbiAgcmVuZGVyTGF5ZXIob3B0cykge1xuICAgIGNvbnN0IHtkYXRhOiBkYXRhUHJvcHMsIGdwdUZpbHRlciwgb2JqZWN0SG92ZXJlZCwgbWFwU3RhdGUsIGludGVyYWN0aW9uQ29uZmlnfSA9IG9wdHM7XG5cbiAgICBjb25zdCB7Zml4ZWRSYWRpdXMsIGZlYXR1cmVUeXBlc30gPSB0aGlzLm1ldGE7XG4gICAgY29uc3QgcmFkaXVzU2NhbGUgPSB0aGlzLmdldFJhZGl1c1NjYWxlQnlab29tKG1hcFN0YXRlLCBmaXhlZFJhZGl1cyk7XG4gICAgY29uc3Qgem9vbUZhY3RvciA9IHRoaXMuZ2V0Wm9vbUZhY3RvcihtYXBTdGF0ZSk7XG4gICAgY29uc3QgZWxlWm9vbUZhY3RvciA9IHRoaXMuZ2V0RWxldmF0aW9uWm9vbUZhY3RvcihtYXBTdGF0ZSk7XG5cbiAgICBjb25zdCB7dmlzQ29uZmlnfSA9IHRoaXMuY29uZmlnO1xuXG4gICAgY29uc3QgbGF5ZXJQcm9wcyA9IHtcbiAgICAgIGxpbmVXaWR0aFNjYWxlOiB2aXNDb25maWcudGhpY2tuZXNzICogem9vbUZhY3RvciAqIDgsXG4gICAgICBlbGV2YXRpb25TY2FsZTogdmlzQ29uZmlnLmVsZXZhdGlvblNjYWxlICogZWxlWm9vbUZhY3RvcixcbiAgICAgIHBvaW50UmFkaXVzU2NhbGU6IHJhZGl1c1NjYWxlLFxuICAgICAgbGluZU1pdGVyTGltaXQ6IDRcbiAgICB9O1xuXG4gICAgY29uc3QgdXBkYXRlVHJpZ2dlcnMgPSB7XG4gICAgICAuLi50aGlzLmdldFZpc3VhbENoYW5uZWxVcGRhdGVUcmlnZ2VycygpLFxuICAgICAgZ2V0RmlsdGVyVmFsdWU6IGdwdUZpbHRlci5maWx0ZXJWYWx1ZVVwZGF0ZVRyaWdnZXJzLFxuICAgICAgZ2V0RmlsdGVyZWQ6IHRoaXMuZmlsdGVyZWRJbmRleFRyaWdnZXJcbiAgICB9O1xuXG4gICAgY29uc3QgZGVmYXVsdExheWVyUHJvcHMgPSB0aGlzLmdldERlZmF1bHREZWNrTGF5ZXJQcm9wcyhvcHRzKTtcbiAgICBjb25zdCBvcGFPdmVyd3JpdGUgPSB7XG4gICAgICBvcGFjaXR5OiB2aXNDb25maWcuc3Ryb2tlT3BhY2l0eVxuICAgIH07XG5cbiAgICBjb25zdCBwaWNrYWJsZSA9IGludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuZW5hYmxlZDtcbiAgICBjb25zdCBob3ZlcmVkT2JqZWN0ID0gdGhpcy5oYXNIb3ZlcmVkT2JqZWN0KG9iamVjdEhvdmVyZWQpO1xuXG4gICAgY29uc3Qge2RhdGEsIC4uLnByb3BzfSA9IGRhdGFQcm9wcztcblxuICAgIC8vIGFycm93IHRhYmxlIGNhbiBoYXZlIG11bHRpcGxlIGNodW5rcywgYSBkZWNrLmdsIGxheWVyIGlzIGNyZWF0ZWQgZm9yIGVhY2ggY2h1bmtcbiAgICBjb25zdCBkZWNrTGF5ZXJEYXRhID0gdGhpcy5nZW9BcnJvd01vZGUgPyBkYXRhIDogW2RhdGFdO1xuICAgIGNvbnN0IGRlY2tMYXllcnMgPSBkZWNrTGF5ZXJEYXRhLm1hcCgoZCwgaSkgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBEZWNrR0xHZW9Kc29uTGF5ZXIoe1xuICAgICAgICAuLi5kZWZhdWx0TGF5ZXJQcm9wcyxcbiAgICAgICAgLi4ubGF5ZXJQcm9wcyxcbiAgICAgICAgLi4ucHJvcHMsXG4gICAgICAgIGRhdGE6IGQsXG4gICAgICAgIGlkOiBkZWNrTGF5ZXJEYXRhLmxlbmd0aCA+IDEgPyBgJHt0aGlzLmlkfS0ke2l9YCA6IHRoaXMuaWQsXG4gICAgICAgIHBpY2thYmxlLFxuICAgICAgICBoaWdobGlnaHRDb2xvcjogSElHSExJR0hfQ09MT1JfM0QsXG4gICAgICAgIGF1dG9IaWdobGlnaHQ6IHZpc0NvbmZpZy5lbmFibGUzZCAmJiBwaWNrYWJsZSxcbiAgICAgICAgc3Ryb2tlZDogdmlzQ29uZmlnLnN0cm9rZWQsXG4gICAgICAgIGZpbGxlZDogdmlzQ29uZmlnLmZpbGxlZCxcbiAgICAgICAgZXh0cnVkZWQ6IHZpc0NvbmZpZy5lbmFibGUzZCxcbiAgICAgICAgd2lyZWZyYW1lOiB2aXNDb25maWcud2lyZWZyYW1lLFxuICAgICAgICB3cmFwTG9uZ2l0dWRlOiBmYWxzZSxcbiAgICAgICAgbGluZU1pdGVyTGltaXQ6IDIsXG4gICAgICAgIGNhcFJvdW5kZWQ6IHRydWUsXG4gICAgICAgIGpvaW50Um91bmRlZDogdHJ1ZSxcbiAgICAgICAgdXBkYXRlVHJpZ2dlcnMsXG4gICAgICAgIGV4dGVuc2lvbnM6IFsuLi5kZWZhdWx0TGF5ZXJQcm9wcy5leHRlbnNpb25zLCBuZXcgRmlsdGVyQXJyb3dFeHRlbnNpb24oKV0sXG4gICAgICAgIF9zdWJMYXllclByb3BzOiB7XG4gICAgICAgICAgLi4uKGZlYXR1cmVUeXBlcz8ucG9seWdvbiA/IHsncG9seWdvbnMtc3Ryb2tlJzogb3BhT3ZlcndyaXRlfSA6IHt9KSxcbiAgICAgICAgICAuLi4oZmVhdHVyZVR5cGVzPy5saW5lID8ge2xpbmVzdHJpbmdzOiBvcGFPdmVyd3JpdGV9IDoge30pLFxuICAgICAgICAgIC4uLihmZWF0dXJlVHlwZXM/LnBvaW50XG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBwb2ludHM6IHtcbiAgICAgICAgICAgICAgICAgIGxpbmVPcGFjaXR5OiB2aXNDb25maWcuc3Ryb2tlT3BhY2l0eVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7fSlcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgLi4uZGVja0xheWVycyxcbiAgICAgIC8vIGhvdmVyIGxheWVyXG4gICAgICAuLi4oaG92ZXJlZE9iamVjdCAmJiAhdmlzQ29uZmlnLmVuYWJsZTNkXG4gICAgICAgID8gW1xuICAgICAgICAgICAgbmV3IERlY2tHTEdlb0pzb25MYXllcih7XG4gICAgICAgICAgICAgIC4uLnRoaXMuZ2V0RGVmYXVsdEhvdmVyTGF5ZXJQcm9wcygpLFxuICAgICAgICAgICAgICAuLi5sYXllclByb3BzLFxuICAgICAgICAgICAgICB2aXNpYmxlOiBkZWZhdWx0TGF5ZXJQcm9wcy52aXNpYmxlLFxuICAgICAgICAgICAgICB3cmFwTG9uZ2l0dWRlOiBmYWxzZSxcbiAgICAgICAgICAgICAgZGF0YTogW2hvdmVyZWRPYmplY3RdLFxuICAgICAgICAgICAgICBnZXRMaW5lV2lkdGg6IHByb3BzLmdldExpbmVXaWR0aCxcbiAgICAgICAgICAgICAgZ2V0UG9pbnRSYWRpdXM6IHByb3BzLmdldFBvaW50UmFkaXVzLFxuICAgICAgICAgICAgICBnZXRFbGV2YXRpb246IHByb3BzLmdldEVsZXZhdGlvbixcbiAgICAgICAgICAgICAgZ2V0TGluZUNvbG9yOiB0aGlzLmNvbmZpZy5oaWdobGlnaHRDb2xvcixcbiAgICAgICAgICAgICAgZ2V0RmlsbENvbG9yOiB0aGlzLmNvbmZpZy5oaWdobGlnaHRDb2xvcixcbiAgICAgICAgICAgICAgLy8gYWx3YXlzIGRyYXcgb3V0bGluZVxuICAgICAgICAgICAgICBzdHJva2VkOiB0cnVlLFxuICAgICAgICAgICAgICBmaWxsZWQ6IGZhbHNlXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXSlcbiAgICBdO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUlBLElBQUFBLFFBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLGNBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtB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
|
package/src/layers/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kepler.gl/layers",
|
|
3
3
|
"author": "Shan He <shan@uber.com>",
|
|
4
|
-
"version": "3.1.
|
|
4
|
+
"version": "3.1.8",
|
|
5
5
|
"description": "kepler.gl constants used by kepler.gl components, actions and reducers",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"main": "dist/index.js",
|
|
@@ -36,14 +36,14 @@
|
|
|
36
36
|
"@deck.gl/geo-layers": "^8.9.27",
|
|
37
37
|
"@deck.gl/layers": "^8.9.27",
|
|
38
38
|
"@deck.gl/mesh-layers": "^8.9.27",
|
|
39
|
-
"@kepler.gl/common-utils": "3.1.
|
|
40
|
-
"@kepler.gl/constants": "3.1.
|
|
41
|
-
"@kepler.gl/deckgl-arrow-layers": "3.1.
|
|
42
|
-
"@kepler.gl/deckgl-layers": "3.1.
|
|
43
|
-
"@kepler.gl/localization": "3.1.
|
|
44
|
-
"@kepler.gl/table": "3.1.
|
|
45
|
-
"@kepler.gl/types": "3.1.
|
|
46
|
-
"@kepler.gl/utils": "3.1.
|
|
39
|
+
"@kepler.gl/common-utils": "3.1.8",
|
|
40
|
+
"@kepler.gl/constants": "3.1.8",
|
|
41
|
+
"@kepler.gl/deckgl-arrow-layers": "3.1.8",
|
|
42
|
+
"@kepler.gl/deckgl-layers": "3.1.8",
|
|
43
|
+
"@kepler.gl/localization": "3.1.8",
|
|
44
|
+
"@kepler.gl/table": "3.1.8",
|
|
45
|
+
"@kepler.gl/types": "3.1.8",
|
|
46
|
+
"@kepler.gl/utils": "3.1.8",
|
|
47
47
|
"@loaders.gl/arrow": "^4.3.2",
|
|
48
48
|
"@loaders.gl/core": "^4.3.2",
|
|
49
49
|
"@loaders.gl/gis": "^4.3.2",
|
|
@@ -215,6 +215,9 @@ export const defaultElevation = 500;
|
|
|
215
215
|
export const defaultLineWidth = 1;
|
|
216
216
|
export const defaultRadius = 1;
|
|
217
217
|
|
|
218
|
+
// don't use strokes by default for datasets with large number of polygons
|
|
219
|
+
const DEFAULT_POLYGON_STROKE_LIMIT = 100000;
|
|
220
|
+
|
|
218
221
|
export const COLUMN_MODE_TABLE = 'table';
|
|
219
222
|
const SUPPORTED_COLUMN_MODES = [
|
|
220
223
|
{
|
|
@@ -625,7 +628,7 @@ export default class GeoJsonLayer extends Layer {
|
|
|
625
628
|
// set both fill and stroke to true
|
|
626
629
|
return this.updateLayerVisConfig({
|
|
627
630
|
filled: true,
|
|
628
|
-
stroked:
|
|
631
|
+
stroked: dataContainer.numRows() < DEFAULT_POLYGON_STROKE_LIMIT,
|
|
629
632
|
strokeColor: colorMaker.next().value
|
|
630
633
|
});
|
|
631
634
|
} else if (featureTypes && featureTypes.point) {
|