kepler.gl 3.2.3 → 3.2.5
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/duckdb/src/components/index.d.ts +8 -1
- package/dist/src/duckdb/src/index.d.ts +3 -5
- package/dist/src/duckdb/src/table/index.d.ts +1 -0
- package/dist/src/reducers/src/ui-state-updaters.d.ts +1 -1
- package/dist/src/utils/src/application-config.d.ts +2 -0
- package/package.json +2 -2
- package/src/actions/package.json +8 -8
- package/src/ai-assistant/dist/components/ai-assistant-component.js +42 -7
- package/src/ai-assistant/package.json +7 -7
- package/src/ai-assistant/src/components/ai-assistant-component.tsx +17 -4
- package/src/cloud-providers/package.json +2 -2
- package/src/common-utils/package.json +3 -3
- package/src/components/dist/map-container.js +72 -64
- package/src/components/package.json +15 -15
- package/src/components/src/map-container.tsx +8 -1
- package/src/constants/dist/default-settings.js +1 -1
- package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/89/a2/7b6ce2c6c94377ff73d3eb84e41a05931160d1d250804fb519215165f383a46120fd1f4662bd2ae95d7c509ce63f4b8e866b515f9f8750cb702709d4bcdc +1 -0
- package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/c4/d0/bd16d41c708342b14f4c0aaa31136faccd8d411ae1d3962252433ac31d00ac57f49ecd4f6b4d682ccdab28858444adefb98aa54c83743d739b90698c03cf +1 -0
- package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/10/75/d229810e58d38a1b61f7938bf1587615fbe97f4afa69493e595badd1f471 +2 -0
- package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/5b/96/163a3fcac4673f000a64cbecbb40621d276cb6f295539b4a6e139bbfc4f5 +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 +3 -3
- package/src/deckgl-layers/package.json +4 -4
- package/src/duckdb/dist/components/index.d.ts +8 -1
- package/src/duckdb/dist/components/index.js +54 -11
- package/src/duckdb/dist/index.d.ts +3 -5
- package/src/duckdb/dist/index.js +28 -40
- package/src/duckdb/dist/table/index.d.ts +1 -0
- package/src/duckdb/dist/table/index.js +17 -0
- package/src/duckdb/package.json +25 -8
- package/src/duckdb/src/components/index.tsx +9 -1
- package/src/duckdb/src/index.ts +3 -9
- package/src/duckdb/src/table/index.ts +5 -0
- package/src/effects/package.json +5 -5
- package/src/layers/dist/icon-layer/icon-layer.d.ts +3 -1
- package/src/layers/dist/icon-layer/icon-layer.js +28 -4
- package/src/layers/package.json +9 -9
- package/src/layers/src/icon-layer/icon-layer.ts +24 -2
- package/src/localization/package.json +1 -1
- package/src/processors/package.json +7 -7
- package/src/reducers/dist/ui-state-updaters.d.ts +1 -1
- package/src/reducers/dist/ui-state-updaters.js +4 -4
- package/src/reducers/package.json +16 -16
- package/src/reducers/src/ui-state-updaters.ts +9 -4
- package/src/schemas/package.json +7 -7
- package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/00/92/9b4a08e852e2f12e4702d7c41fe5299bcd72ee10d25072f6aa4bb473d4dbe8d2ea1992b32bf82ea9ad73efdacf9f4e228a18523c93042cc58d07a56115bf +1 -0
- package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/13/40/aa1c82ba19f8a57b20540cedfbc7086324551b58a599674e858ef4b8c12fad29b2e5d0a17f38ff2fb0adb913909e58b1aada0a79f49e8dc1b3ca673db76f +1 -0
- package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/58/24/f9a517552c80acd6fe8c93f7ed4a3e8b24272284e6f2257ad18e152a8dbf +2 -0
- package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/95/15/0b35e451aad3f2352a14cfa64386984de34da0a0b5ad2fc736ecb44d22db +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/layers.d.ts +2 -0
- package/src/types/package.json +1 -1
- package/src/utils/dist/application-config.d.ts +2 -0
- package/src/utils/dist/application-config.js +13 -2
- package/src/utils/dist/dom-to-image.js +19 -7
- package/src/utils/package.json +4 -5
- package/src/utils/src/application-config.ts +17 -1
- package/src/utils/src/dom-to-image.ts +18 -6
- package/umd/keplergl.min.js +1146 -1146
|
@@ -1,17 +1,60 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
3
4
|
Object.defineProperty(exports, "__esModule", {
|
|
4
5
|
value: true
|
|
5
6
|
});
|
|
7
|
+
Object.defineProperty(exports, "ColumnNode", {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
get: function get() {
|
|
10
|
+
return _tree.ColumnNode;
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
Object.defineProperty(exports, "DatasetNode", {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
get: function get() {
|
|
16
|
+
return _tree.DatasetNode;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports, "MonacoEditor", {
|
|
20
|
+
enumerable: true,
|
|
21
|
+
get: function get() {
|
|
22
|
+
return _monacoEditor["default"];
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
Object.defineProperty(exports, "PreviewDataPanel", {
|
|
26
|
+
enumerable: true,
|
|
27
|
+
get: function get() {
|
|
28
|
+
return _previewDataPanel.PreviewDataPanel;
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
Object.defineProperty(exports, "SchemaPanel", {
|
|
32
|
+
enumerable: true,
|
|
33
|
+
get: function get() {
|
|
34
|
+
return _schemaPanel.SchemaPanel;
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
Object.defineProperty(exports, "SchemaPanelDropMessage", {
|
|
38
|
+
enumerable: true,
|
|
39
|
+
get: function get() {
|
|
40
|
+
return _schemaPanel.SchemaPanelDropMessage;
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
Object.defineProperty(exports, "SqlPanel", {
|
|
44
|
+
enumerable: true,
|
|
45
|
+
get: function get() {
|
|
46
|
+
return _sqlPanel.SqlPanel;
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
Object.defineProperty(exports, "Tree", {
|
|
50
|
+
enumerable: true,
|
|
51
|
+
get: function get() {
|
|
52
|
+
return _tree.Tree;
|
|
53
|
+
}
|
|
54
|
+
});
|
|
6
55
|
var _sqlPanel = require("./sql-panel");
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
get: function get() {
|
|
13
|
-
return _sqlPanel[key];
|
|
14
|
-
}
|
|
15
|
-
});
|
|
16
|
-
});
|
|
17
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfc3FsUGFuZWwiLCJyZXF1aXJlIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJrZXkiLCJleHBvcnRzIiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvaW5kZXgudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmV4cG9ydCAqIGZyb20gJy4vc3FsLXBhbmVsJztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFHQSxJQUFBQSxTQUFBLEdBQUFDLE9BQUE7QUFBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFILFNBQUEsRUFBQUksT0FBQSxXQUFBQyxHQUFBO0VBQUEsSUFBQUEsR0FBQSxrQkFBQUEsR0FBQTtFQUFBLElBQUFBLEdBQUEsSUFBQUMsT0FBQSxJQUFBQSxPQUFBLENBQUFELEdBQUEsTUFBQUwsU0FBQSxDQUFBSyxHQUFBO0VBQUFILE1BQUEsQ0FBQUssY0FBQSxDQUFBRCxPQUFBLEVBQUFELEdBQUE7SUFBQUcsVUFBQTtJQUFBQyxHQUFBLFdBQUFBLElBQUE7TUFBQSxPQUFBVCxTQUFBLENBQUFLLEdBQUE7SUFBQTtFQUFBO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
56
|
+
var _schemaPanel = require("./schema-panel");
|
|
57
|
+
var _previewDataPanel = require("./preview-data-panel");
|
|
58
|
+
var _tree = require("./tree");
|
|
59
|
+
var _monacoEditor = _interopRequireDefault(require("./monaco-editor"));
|
|
60
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfc3FsUGFuZWwiLCJyZXF1aXJlIiwiX3NjaGVtYVBhbmVsIiwiX3ByZXZpZXdEYXRhUGFuZWwiLCJfdHJlZSIsIl9tb25hY29FZGl0b3IiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvaW5kZXgudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmV4cG9ydCB7U3FsUGFuZWx9IGZyb20gJy4vc3FsLXBhbmVsJztcbmV4cG9ydCB7U2NoZW1hUGFuZWwsIFNjaGVtYVBhbmVsRHJvcE1lc3NhZ2V9IGZyb20gJy4vc2NoZW1hLXBhbmVsJztcbmV4cG9ydCB7UHJldmlld0RhdGFQYW5lbH0gZnJvbSAnLi9wcmV2aWV3LWRhdGEtcGFuZWwnO1xuZXhwb3J0IHtUcmVlLCBEYXRhc2V0Tm9kZSwgQ29sdW1uTm9kZX0gZnJvbSAnLi90cmVlJztcbmV4cG9ydCB7ZGVmYXVsdCBhcyBNb25hY29FZGl0b3J9IGZyb20gJy4vbW9uYWNvLWVkaXRvcic7XG5cbmV4cG9ydCB0eXBlIHtTY2hlbWFTdWdnZXN0aW9ufSBmcm9tICcuL3NjaGVtYS1wYW5lbCc7XG5leHBvcnQgdHlwZSB7UHJldmlld0RhdGFQYW5lbFByb3BzLCBRdWVyeVJlc3VsdCwgRGF0YVRhYmxlU3R5bGV9IGZyb20gJy4vcHJldmlldy1kYXRhLXBhbmVsJztcbmV4cG9ydCB0eXBlIHtUcmVlTm9kZURhdGEsIFRyZWVOb2RlUHJvcHMsIFRyZWVQcm9wc30gZnJvbSAnLi90cmVlJztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsU0FBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsWUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsaUJBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLEtBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLGFBQUEsR0FBQUMsc0JBQUEsQ0FBQUwsT0FBQSIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
export { DuckDBWasmAdapter } from './adapters/duckdb-wasm-adapter';
|
|
2
|
-
export {
|
|
3
|
-
|
|
4
|
-
export { restoreGeoarrowMetadata, KeplerGlDuckDbTable } from './table/duckdb-table';
|
|
2
|
+
export { keplerGlDuckDBPlugin, keplerGlDuckDBPlugin as default } from './plugin';
|
|
3
|
+
export * from './table/duckdb-table';
|
|
5
4
|
export * from './table/duckdb-table-utils';
|
|
6
|
-
export
|
|
7
|
-
export { consolidateFieldTypes, extendFieldsWithDuckDBColumnType, fieldTypeToColumnType } from './processors/data-processor';
|
|
5
|
+
export * from './processors/data-processor';
|
package/src/duckdb/dist/index.js
CHANGED
|
@@ -5,12 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
var _exportNames = {
|
|
7
7
|
DuckDBWasmAdapter: true,
|
|
8
|
-
|
|
9
|
-
restoreGeoarrowMetadata: true,
|
|
10
|
-
KeplerGlDuckDbTable: true,
|
|
11
|
-
consolidateFieldTypes: true,
|
|
12
|
-
extendFieldsWithDuckDBColumnType: true,
|
|
13
|
-
fieldTypeToColumnType: true
|
|
8
|
+
keplerGlDuckDBPlugin: true
|
|
14
9
|
};
|
|
15
10
|
Object.defineProperty(exports, "DuckDBWasmAdapter", {
|
|
16
11
|
enumerable: true,
|
|
@@ -18,47 +13,32 @@ Object.defineProperty(exports, "DuckDBWasmAdapter", {
|
|
|
18
13
|
return _duckdbWasmAdapter.DuckDBWasmAdapter;
|
|
19
14
|
}
|
|
20
15
|
});
|
|
21
|
-
Object.defineProperty(exports, "
|
|
16
|
+
Object.defineProperty(exports, "default", {
|
|
22
17
|
enumerable: true,
|
|
23
18
|
get: function get() {
|
|
24
|
-
return
|
|
19
|
+
return _plugin.keplerGlDuckDBPlugin;
|
|
25
20
|
}
|
|
26
21
|
});
|
|
27
|
-
Object.defineProperty(exports, "
|
|
22
|
+
Object.defineProperty(exports, "keplerGlDuckDBPlugin", {
|
|
28
23
|
enumerable: true,
|
|
29
24
|
get: function get() {
|
|
30
|
-
return
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
Object.defineProperty(exports, "consolidateFieldTypes", {
|
|
34
|
-
enumerable: true,
|
|
35
|
-
get: function get() {
|
|
36
|
-
return _dataProcessor.consolidateFieldTypes;
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
exports["default"] = void 0;
|
|
40
|
-
Object.defineProperty(exports, "extendFieldsWithDuckDBColumnType", {
|
|
41
|
-
enumerable: true,
|
|
42
|
-
get: function get() {
|
|
43
|
-
return _dataProcessor.extendFieldsWithDuckDBColumnType;
|
|
44
|
-
}
|
|
45
|
-
});
|
|
46
|
-
Object.defineProperty(exports, "fieldTypeToColumnType", {
|
|
47
|
-
enumerable: true,
|
|
48
|
-
get: function get() {
|
|
49
|
-
return _dataProcessor.fieldTypeToColumnType;
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
Object.defineProperty(exports, "restoreGeoarrowMetadata", {
|
|
53
|
-
enumerable: true,
|
|
54
|
-
get: function get() {
|
|
55
|
-
return _duckdbTable.restoreGeoarrowMetadata;
|
|
25
|
+
return _plugin.keplerGlDuckDBPlugin;
|
|
56
26
|
}
|
|
57
27
|
});
|
|
58
28
|
var _duckdbWasmAdapter = require("./adapters/duckdb-wasm-adapter");
|
|
59
|
-
var _components = require("./components");
|
|
60
29
|
var _plugin = require("./plugin");
|
|
61
30
|
var _duckdbTable = require("./table/duckdb-table");
|
|
31
|
+
Object.keys(_duckdbTable).forEach(function (key) {
|
|
32
|
+
if (key === "default" || key === "__esModule") return;
|
|
33
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
34
|
+
if (key in exports && exports[key] === _duckdbTable[key]) return;
|
|
35
|
+
Object.defineProperty(exports, key, {
|
|
36
|
+
enumerable: true,
|
|
37
|
+
get: function get() {
|
|
38
|
+
return _duckdbTable[key];
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
});
|
|
62
42
|
var _duckdbTableUtils = require("./table/duckdb-table-utils");
|
|
63
43
|
Object.keys(_duckdbTableUtils).forEach(function (key) {
|
|
64
44
|
if (key === "default" || key === "__esModule") return;
|
|
@@ -72,7 +52,15 @@ Object.keys(_duckdbTableUtils).forEach(function (key) {
|
|
|
72
52
|
});
|
|
73
53
|
});
|
|
74
54
|
var _dataProcessor = require("./processors/data-processor");
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
55
|
+
Object.keys(_dataProcessor).forEach(function (key) {
|
|
56
|
+
if (key === "default" || key === "__esModule") return;
|
|
57
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
58
|
+
if (key in exports && exports[key] === _dataProcessor[key]) return;
|
|
59
|
+
Object.defineProperty(exports, key, {
|
|
60
|
+
enumerable: true,
|
|
61
|
+
get: function get() {
|
|
62
|
+
return _dataProcessor[key];
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZHVja2RiV2FzbUFkYXB0ZXIiLCJyZXF1aXJlIiwiX3BsdWdpbiIsIl9kdWNrZGJUYWJsZSIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiX2V4cG9ydE5hbWVzIiwiZXhwb3J0cyIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsIl9kdWNrZGJUYWJsZVV0aWxzIiwiX2RhdGFQcm9jZXNzb3IiXSwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuZXhwb3J0IHtEdWNrREJXYXNtQWRhcHRlcn0gZnJvbSAnLi9hZGFwdGVycy9kdWNrZGItd2FzbS1hZGFwdGVyJztcbmV4cG9ydCB7a2VwbGVyR2xEdWNrREJQbHVnaW4sIGtlcGxlckdsRHVja0RCUGx1Z2luIGFzIGRlZmF1bHR9IGZyb20gJy4vcGx1Z2luJztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUvZHVja2RiLXRhYmxlJztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUvZHVja2RiLXRhYmxlLXV0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vcHJvY2Vzc29ycy9kYXRhLXByb2Nlc3Nvcic7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLGtCQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxZQUFBLEdBQUFGLE9BQUE7QUFBQUcsTUFBQSxDQUFBQyxJQUFBLENBQUFGLFlBQUEsRUFBQUcsT0FBQSxXQUFBQyxHQUFBO0VBQUEsSUFBQUEsR0FBQSxrQkFBQUEsR0FBQTtFQUFBLElBQUFILE1BQUEsQ0FBQUksU0FBQSxDQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQUMsWUFBQSxFQUFBSixHQUFBO0VBQUEsSUFBQUEsR0FBQSxJQUFBSyxPQUFBLElBQUFBLE9BQUEsQ0FBQUwsR0FBQSxNQUFBSixZQUFBLENBQUFJLEdBQUE7RUFBQUgsTUFBQSxDQUFBUyxjQUFBLENBQUFELE9BQUEsRUFBQUwsR0FBQTtJQUFBTyxVQUFBO0lBQUFDLEdBQUEsV0FBQUEsSUFBQTtNQUFBLE9BQUFaLFlBQUEsQ0FBQUksR0FBQTtJQUFBO0VBQUE7QUFBQTtBQUNBLElBQUFTLGlCQUFBLEdBQUFmLE9BQUE7QUFBQUcsTUFBQSxDQUFBQyxJQUFBLENBQUFXLGlCQUFBLEVBQUFWLE9BQUEsV0FBQUMsR0FBQTtFQUFBLElBQUFBLEdBQUEsa0JBQUFBLEdBQUE7RUFBQSxJQUFBSCxNQUFBLENBQUFJLFNBQUEsQ0FBQUMsY0FBQSxDQUFBQyxJQUFBLENBQUFDLFlBQUEsRUFBQUosR0FBQTtFQUFBLElBQUFBLEdBQUEsSUFBQUssT0FBQSxJQUFBQSxPQUFBLENBQUFMLEdBQUEsTUFBQVMsaUJBQUEsQ0FBQVQsR0FBQTtFQUFBSCxNQUFBLENBQUFTLGNBQUEsQ0FBQUQsT0FBQSxFQUFBTCxHQUFBO0lBQUFPLFVBQUE7SUFBQUMsR0FBQSxXQUFBQSxJQUFBO01BQUEsT0FBQUMsaUJBQUEsQ0FBQVQsR0FBQTtJQUFBO0VBQUE7QUFBQTtBQUNBLElBQUFVLGNBQUEsR0FBQWhCLE9BQUE7QUFBQUcsTUFBQSxDQUFBQyxJQUFBLENBQUFZLGNBQUEsRUFBQVgsT0FBQSxXQUFBQyxHQUFBO0VBQUEsSUFBQUEsR0FBQSxrQkFBQUEsR0FBQTtFQUFBLElBQUFILE1BQUEsQ0FBQUksU0FBQSxDQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQUMsWUFBQSxFQUFBSixHQUFBO0VBQUEsSUFBQUEsR0FBQSxJQUFBSyxPQUFBLElBQUFBLE9BQUEsQ0FBQUwsR0FBQSxNQUFBVSxjQUFBLENBQUFWLEdBQUE7RUFBQUgsTUFBQSxDQUFBUyxjQUFBLENBQUFELE9BQUEsRUFBQUwsR0FBQTtJQUFBTyxVQUFBO0lBQUFDLEdBQUEsV0FBQUEsSUFBQTtNQUFBLE9BQUFFLGNBQUEsQ0FBQVYsR0FBQTtJQUFBO0VBQUE7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './duckdb-table-utils';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
var _duckdbTableUtils = require("./duckdb-table-utils");
|
|
7
|
+
Object.keys(_duckdbTableUtils).forEach(function (key) {
|
|
8
|
+
if (key === "default" || key === "__esModule") return;
|
|
9
|
+
if (key in exports && exports[key] === _duckdbTableUtils[key]) return;
|
|
10
|
+
Object.defineProperty(exports, key, {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: function get() {
|
|
13
|
+
return _duckdbTableUtils[key];
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZHVja2RiVGFibGVVdGlscyIsInJlcXVpcmUiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsImV4cG9ydHMiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdGFibGUvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuZXhwb3J0ICogZnJvbSAnLi9kdWNrZGItdGFibGUtdXRpbHMnO1xuXG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBR0EsSUFBQUEsaUJBQUEsR0FBQUMsT0FBQTtBQUFBQyxNQUFBLENBQUFDLElBQUEsQ0FBQUgsaUJBQUEsRUFBQUksT0FBQSxXQUFBQyxHQUFBO0VBQUEsSUFBQUEsR0FBQSxrQkFBQUEsR0FBQTtFQUFBLElBQUFBLEdBQUEsSUFBQUMsT0FBQSxJQUFBQSxPQUFBLENBQUFELEdBQUEsTUFBQUwsaUJBQUEsQ0FBQUssR0FBQTtFQUFBSCxNQUFBLENBQUFLLGNBQUEsQ0FBQUQsT0FBQSxFQUFBRCxHQUFBO0lBQUFHLFVBQUE7SUFBQUMsR0FBQSxXQUFBQSxJQUFBO01BQUEsT0FBQVQsaUJBQUEsQ0FBQUssR0FBQTtJQUFBO0VBQUE7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
|
package/src/duckdb/package.json
CHANGED
|
@@ -1,11 +1,28 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kepler.gl/duckdb",
|
|
3
3
|
"author": "Shan He <heshan0131@gmail.com>",
|
|
4
|
-
"version": "3.2.
|
|
4
|
+
"version": "3.2.5",
|
|
5
5
|
"description": "DuckDB plugin for Kepler.gl",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"main": "dist/index.js",
|
|
8
8
|
"types": "dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.js",
|
|
13
|
+
"require": "./dist/index.js"
|
|
14
|
+
},
|
|
15
|
+
"./components": {
|
|
16
|
+
"types": "./dist/components/index.d.ts",
|
|
17
|
+
"import": "./dist/components/index.js",
|
|
18
|
+
"require": "./dist/components/index.js"
|
|
19
|
+
},
|
|
20
|
+
"./table": {
|
|
21
|
+
"types": "./dist/table/index.d.ts",
|
|
22
|
+
"import": "./dist/table/index.js",
|
|
23
|
+
"require": "./dist/table/index.js"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
9
26
|
"keywords": [
|
|
10
27
|
"duckdb"
|
|
11
28
|
],
|
|
@@ -18,7 +35,7 @@
|
|
|
18
35
|
"build:umd": "NODE_OPTIONS=--openssl-legacy-provider webpack --config ./webpack/umd.js --progress --env.prod",
|
|
19
36
|
"build:types": "tsc --project ./tsconfig.production.json",
|
|
20
37
|
"prepublishOnly": "babel-node ../../scripts/license-header/bin --license ../../FILE-HEADER && yarn build && yarn build:types",
|
|
21
|
-
"stab": "mkdir -p dist &&
|
|
38
|
+
"stab": "mkdir -p dist/components dist/table && echo \"export * from '../src';\" > dist/index.js && echo \"export * from '../../src/components';\" > dist/components/index.js && echo \"export * from '../../src/table';\" > dist/table/index.js"
|
|
22
39
|
},
|
|
23
40
|
"files": [
|
|
24
41
|
"dist",
|
|
@@ -26,12 +43,12 @@
|
|
|
26
43
|
],
|
|
27
44
|
"dependencies": {
|
|
28
45
|
"@duckdb/duckdb-wasm": "^1.28.0",
|
|
29
|
-
"@kepler.gl/common-utils": "3.2.
|
|
30
|
-
"@kepler.gl/constants": "3.2.
|
|
31
|
-
"@kepler.gl/processors": "3.2.
|
|
32
|
-
"@kepler.gl/table": "3.2.
|
|
33
|
-
"@kepler.gl/types": "3.2.
|
|
34
|
-
"@kepler.gl/utils": "3.2.
|
|
46
|
+
"@kepler.gl/common-utils": "3.2.5",
|
|
47
|
+
"@kepler.gl/constants": "3.2.5",
|
|
48
|
+
"@kepler.gl/processors": "3.2.5",
|
|
49
|
+
"@kepler.gl/table": "3.2.5",
|
|
50
|
+
"@kepler.gl/types": "3.2.5",
|
|
51
|
+
"@kepler.gl/utils": "3.2.5",
|
|
35
52
|
"@monaco-editor/react": "^4.6.0",
|
|
36
53
|
"@radix-ui/react-collapsible": "^1.1.0",
|
|
37
54
|
"apache-arrow": ">=15.0.0",
|
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
// SPDX-License-Identifier: MIT
|
|
2
2
|
// Copyright contributors to the kepler.gl project
|
|
3
3
|
|
|
4
|
-
export
|
|
4
|
+
export {SqlPanel} from './sql-panel';
|
|
5
|
+
export {SchemaPanel, SchemaPanelDropMessage} from './schema-panel';
|
|
6
|
+
export {PreviewDataPanel} from './preview-data-panel';
|
|
7
|
+
export {Tree, DatasetNode, ColumnNode} from './tree';
|
|
8
|
+
export {default as MonacoEditor} from './monaco-editor';
|
|
9
|
+
|
|
10
|
+
export type {SchemaSuggestion} from './schema-panel';
|
|
11
|
+
export type {PreviewDataPanelProps, QueryResult, DataTableStyle} from './preview-data-panel';
|
|
12
|
+
export type {TreeNodeData, TreeNodeProps, TreeProps} from './tree';
|
package/src/duckdb/src/index.ts
CHANGED
|
@@ -2,13 +2,7 @@
|
|
|
2
2
|
// Copyright contributors to the kepler.gl project
|
|
3
3
|
|
|
4
4
|
export {DuckDBWasmAdapter} from './adapters/duckdb-wasm-adapter';
|
|
5
|
-
export {
|
|
6
|
-
|
|
7
|
-
export {restoreGeoarrowMetadata, KeplerGlDuckDbTable} from './table/duckdb-table';
|
|
5
|
+
export {keplerGlDuckDBPlugin, keplerGlDuckDBPlugin as default} from './plugin';
|
|
6
|
+
export * from './table/duckdb-table';
|
|
8
7
|
export * from './table/duckdb-table-utils';
|
|
9
|
-
export
|
|
10
|
-
export {
|
|
11
|
-
consolidateFieldTypes,
|
|
12
|
-
extendFieldsWithDuckDBColumnType,
|
|
13
|
-
fieldTypeToColumnType
|
|
14
|
-
} from './processors/data-processor';
|
|
8
|
+
export * from './processors/data-processor';
|
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.2.
|
|
4
|
+
"version": "3.2.5",
|
|
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.2.
|
|
35
|
-
"@kepler.gl/constants": "3.2.
|
|
36
|
-
"@kepler.gl/types": "3.2.
|
|
37
|
-
"@kepler.gl/utils": "3.2.
|
|
34
|
+
"@kepler.gl/common-utils": "3.2.5",
|
|
35
|
+
"@kepler.gl/constants": "3.2.5",
|
|
36
|
+
"@kepler.gl/types": "3.2.5",
|
|
37
|
+
"@kepler.gl/utils": "3.2.5",
|
|
38
38
|
"@luma.gl/core": "^8.5.20",
|
|
39
39
|
"@luma.gl/shadertools": "^8.5.20",
|
|
40
40
|
"moment-timezone": "^0.5.35",
|
|
@@ -4,7 +4,7 @@ import Layer, { LayerBaseConfig, LayerBaseConfigPartial } from '../base-layer';
|
|
|
4
4
|
import { FindDefaultLayerPropsReturnValue } from '../layer-utils';
|
|
5
5
|
import { default as KeplerTable } from '@kepler.gl/table';
|
|
6
6
|
import { DataContainerInterface } from '@kepler.gl/utils';
|
|
7
|
-
import { ColorRange, VisConfigBoolean, VisConfigColorRange, VisConfigNumber, VisConfigRange, Merge, LayerColumn } from '@kepler.gl/types';
|
|
7
|
+
import { ColorRange, VisConfigBoolean, VisConfigColorRange, VisConfigNumber, VisConfigRange, Merge, LayerColumn, BindedLayerCallbacks } from '@kepler.gl/types';
|
|
8
8
|
export declare type IconLayerColumnsConfig = {
|
|
9
9
|
lat: LayerColumn;
|
|
10
10
|
lng: LayerColumn;
|
|
@@ -51,6 +51,8 @@ export default class IconLayer extends Layer {
|
|
|
51
51
|
getIconAccessor: (dataContainer: DataContainerInterface) => (d: any) => any;
|
|
52
52
|
_layerInfoModal: () => JSX.Element;
|
|
53
53
|
iconGeometry: IconGeometry;
|
|
54
|
+
iconGeometryVersion: number;
|
|
55
|
+
onRedrawNeeded: BindedLayerCallbacks['onRedrawNeeded'];
|
|
54
56
|
visConfigSettings: IconLayerVisConfigSettings;
|
|
55
57
|
config: IconLayerConfig;
|
|
56
58
|
constructor(props: {
|
|
@@ -76,6 +76,8 @@ var IconLayer = exports["default"] = /*#__PURE__*/function (_Layer) {
|
|
|
76
76
|
(0, _defineProperty2["default"])(_this, "getIconAccessor", void 0);
|
|
77
77
|
(0, _defineProperty2["default"])(_this, "_layerInfoModal", void 0);
|
|
78
78
|
(0, _defineProperty2["default"])(_this, "iconGeometry", void 0);
|
|
79
|
+
(0, _defineProperty2["default"])(_this, "iconGeometryVersion", void 0);
|
|
80
|
+
(0, _defineProperty2["default"])(_this, "onRedrawNeeded", void 0);
|
|
79
81
|
_this.registerVisConfig(pointVisConfigs);
|
|
80
82
|
_this.getPositionAccessor = function (dataContainer) {
|
|
81
83
|
return iconPosAccessor(_this.config.columns)(dataContainer);
|
|
@@ -85,6 +87,7 @@ var IconLayer = exports["default"] = /*#__PURE__*/function (_Layer) {
|
|
|
85
87
|
};
|
|
86
88
|
_this._layerInfoModal = (0, _iconInfoModal["default"])(props.svgIcons);
|
|
87
89
|
_this.iconGeometry = props.iconGeometry || null;
|
|
90
|
+
_this.iconGeometryVersion = 0;
|
|
88
91
|
if ((0, _utils.isTest)()) {
|
|
89
92
|
return (0, _possibleConstructorReturn2["default"])(_this);
|
|
90
93
|
}
|
|
@@ -188,20 +191,29 @@ var IconLayer = exports["default"] = /*#__PURE__*/function (_Layer) {
|
|
|
188
191
|
console.error('Error fetching or parsing svg-icons.json:', err);
|
|
189
192
|
// Fallback to empty geometry to allow default icon rendering
|
|
190
193
|
_this2.iconGeometry = {};
|
|
194
|
+
_this2.iconGeometryVersion += 1;
|
|
191
195
|
});
|
|
192
196
|
} else {
|
|
193
197
|
// No fetch available; set empty geometry so layer can render default icons
|
|
194
198
|
this.iconGeometry = {};
|
|
199
|
+
this.iconGeometryVersion += 1;
|
|
195
200
|
}
|
|
196
201
|
}
|
|
197
202
|
}, {
|
|
198
203
|
key: "setSvgIcons",
|
|
199
204
|
value: function setSvgIcons() {
|
|
205
|
+
var _this$onRedrawNeeded;
|
|
200
206
|
var svgIcons = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
201
207
|
this.iconGeometry = svgIcons.reduce(function (accu, curr) {
|
|
202
208
|
return _objectSpread(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])({}, curr.id, flatterIconPositions(curr)));
|
|
203
209
|
}, {});
|
|
210
|
+
|
|
211
|
+
// Increment version when SVG icons are loaded to trigger layer re-render
|
|
212
|
+
this.iconGeometryVersion += 1;
|
|
204
213
|
this._layerInfoModal = (0, _iconInfoModal["default"])(svgIcons);
|
|
214
|
+
|
|
215
|
+
// Trigger a map redraw so deck.gl picks up the new geometry
|
|
216
|
+
(_this$onRedrawNeeded = this.onRedrawNeeded) === null || _this$onRedrawNeeded === void 0 || _this$onRedrawNeeded.call(this);
|
|
205
217
|
}
|
|
206
218
|
}, {
|
|
207
219
|
key: "getFilteredItemCount",
|
|
@@ -291,7 +303,11 @@ var IconLayer = exports["default"] = /*#__PURE__*/function (_Layer) {
|
|
|
291
303
|
gpuFilter = opts.gpuFilter,
|
|
292
304
|
objectHovered = opts.objectHovered,
|
|
293
305
|
mapState = opts.mapState,
|
|
294
|
-
interactionConfig = opts.interactionConfig
|
|
306
|
+
interactionConfig = opts.interactionConfig,
|
|
307
|
+
layerCallbacks = opts.layerCallbacks;
|
|
308
|
+
|
|
309
|
+
// Store callback to trigger map redraw when icon geometry loads asynchronously
|
|
310
|
+
this.onRedrawNeeded = layerCallbacks === null || layerCallbacks === void 0 ? void 0 : layerCallbacks.onRedrawNeeded;
|
|
295
311
|
var radiusScale = this.getRadiusScaleByZoom(mapState);
|
|
296
312
|
var layerProps = _objectSpread({
|
|
297
313
|
radiusScale: radiusScale,
|
|
@@ -326,7 +342,13 @@ var IconLayer = exports["default"] = /*#__PURE__*/function (_Layer) {
|
|
|
326
342
|
depthTest: ((_this$config$columns$ = this.config.columns.altitude) === null || _this$config$columns$ === void 0 ? void 0 : _this$config$columns$.fieldIdx) > -1,
|
|
327
343
|
cullFace: _constants["default"].FRONT
|
|
328
344
|
};
|
|
329
|
-
|
|
345
|
+
|
|
346
|
+
// Append geometry version to layer id so deck.gl treats it as new layer when geometry changes
|
|
347
|
+
var baseLayerId = defaultLayerProps.id || this.id;
|
|
348
|
+
var layerIdWithVersion = "".concat(baseLayerId, "_").concat(this.iconGeometryVersion);
|
|
349
|
+
return [new _deckglLayers.SvgIconLayer(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({}, defaultLayerProps), {}, {
|
|
350
|
+
id: layerIdWithVersion
|
|
351
|
+
}, brushingProps), layerProps), data), {}, {
|
|
330
352
|
parameters: parameters,
|
|
331
353
|
getIconGeometry: function getIconGeometry(id) {
|
|
332
354
|
var _this3$iconGeometry;
|
|
@@ -337,7 +359,9 @@ var IconLayer = exports["default"] = /*#__PURE__*/function (_Layer) {
|
|
|
337
359
|
extensions: extensions
|
|
338
360
|
}))].concat((0, _toConsumableArray2["default"])(hoveredObject ? [
|
|
339
361
|
// @ts-expect-error SvgIconLayerProps needs getIcon Field
|
|
340
|
-
new _deckglLayers.SvgIconLayer(_objectSpread(_objectSpread(_objectSpread({}, this.getDefaultHoverLayerProps()),
|
|
362
|
+
new _deckglLayers.SvgIconLayer(_objectSpread(_objectSpread(_objectSpread({}, this.getDefaultHoverLayerProps()), {}, {
|
|
363
|
+
id: "".concat(layerIdWithVersion, "-hover")
|
|
364
|
+
}, layerProps), {}, {
|
|
341
365
|
visible: defaultLayerProps.visible,
|
|
342
366
|
data: [hoveredObject],
|
|
343
367
|
parameters: parameters,
|
|
@@ -396,4 +420,4 @@ var IconLayer = exports["default"] = /*#__PURE__*/function (_Layer) {
|
|
|
396
420
|
}
|
|
397
421
|
}]);
|
|
398
422
|
}(_baseLayer["default"]);
|
|
399
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfd2luZG93IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZXh0ZW5zaW9ucyIsIl9jb25zdGFudHMiLCJfZGVja2dsTGF5ZXJzIiwiX2ljb25MYXllckljb24iLCJfY29uc3RhbnRzMiIsIl9pY29uSW5mb01vZGFsIiwiX2Jhc2VMYXllciIsIl9sYXllclV0aWxzIiwiX3V0aWxzIiwiX2xheWVyVGV4dExhYmVsIiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJfY2FsbFN1cGVyIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiY29uc3RydWN0b3IiLCJCb29sZWFuIiwicHJvdG90eXBlIiwidmFsdWVPZiIsImNhbGwiLCJfc3VwZXJQcm9wR2V0IiwicCIsIl9nZXQyIiwiYnJ1c2hpbmdFeHRlbnNpb24iLCJCcnVzaGluZ0V4dGVuc2lvbiIsImljb25Qb3NBY2Nlc3NvciIsImV4cG9ydHMiLCJfcmVmIiwibGF0IiwibG5nIiwiYWx0aXR1ZGUiLCJkYyIsImQiLCJ2YWx1ZUF0IiwiaW5kZXgiLCJmaWVsZElkeCIsImljb25BY2Nlc3NvciIsIl9yZWYyIiwiaWNvbiIsImljb25SZXF1aXJlZENvbHVtbnMiLCJpY29uT3B0aW9uYWxDb2x1bW5zIiwicG9pbnRWaXNDb25maWdzIiwicmFkaXVzIiwiZml4ZWRSYWRpdXMiLCJvcGFjaXR5IiwiY29sb3JSYW5nZSIsInJhZGl1c1JhbmdlIiwiYmlsbGJvYXJkIiwiZmxhdHRlckljb25Qb3NpdGlvbnMiLCJtZXNoIiwiY2VsbHMiLCJyZWR1Y2UiLCJwcmV2IiwiY2VsbCIsInBvc2l0aW9ucyIsIkljb25MYXllciIsIl9MYXllciIsInByb3BzIiwiX3RoaXMiLCJfY2xhc3NDYWxsQ2hlY2syIiwicmVnaXN0ZXJWaXNDb25maWciLCJnZXRQb3NpdGlvbkFjY2Vzc29yIiwiZGF0YUNvbnRhaW5lciIsImNvbmZpZyIsImNvbHVtbnMiLCJnZXRJY29uQWNjZXNzb3IiLCJfbGF5ZXJJbmZvTW9kYWwiLCJJY29uSW5mb01vZGFsRmFjdG9yeSIsInN2Z0ljb25zIiwiaWNvbkdlb21ldHJ5IiwiaXNUZXN0Iiwic2V0U3ZnSWNvbnMiLCJnZXRTdmdJY29ucyIsIl9pbmhlcml0czIiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwiZ2V0IiwiY29uY2F0IiwiZ2V0QXBwbGljYXRpb25Db25maWciLCJjZG5VcmwiLCJkZWZhdWx0UG9pbnRDb2x1bW5QYWlycyIsIkljb25MYXllckljb24iLCJjb2xvciIsImFjY2Vzc29yIiwiZGVmYXVsdFZhbHVlIiwic2l6ZSIsInByb3BlcnR5IiwicmFuZ2UiLCJjaGFubmVsU2NhbGVUeXBlIiwiaWQiLCJ0ZW1wbGF0ZSIsIm1vZGFsUHJvcHMiLCJ0aXRsZSIsInZhbHVlIiwiZ2V0Wm9vbUZhY3RvciIsIl9yZWYzIiwiem9vbSIsIl9yZWYzJHpvb21PZmZzZXQiLCJ6b29tT2Zmc2V0IiwiTWF0aCIsInBvdyIsIl90aGlzMiIsImZldGNoQ29uZmlnIiwibWV0aG9kIiwibW9kZSIsImNhY2hlIiwiV2luZG93IiwiZmV0Y2giLCJzdmdJY29uVXJsIiwidGhlbiIsInJlc3BvbnNlIiwib2siLCJFcnJvciIsInN0YXR1cyIsImpzb24iLCJwYXJzZWQiLCJ1bmRlZmluZWQiLCJlcnIiLCJjb25zb2xlIiwiZXJyb3IiLCJhY2N1IiwiY3VyciIsImdldEZpbHRlcmVkSXRlbUNvdW50IiwiZmlsdGVyZWRJdGVtQ291bnQiLCJ2YWx1ZXMiLCJ0b3RhbCIsIk51bWJlciIsImlzRmluaXRlIiwiY2FsY3VsYXRlRGF0YUF0dHJpYnV0ZSIsIl9yZWY0IiwiZ2V0UG9zaXRpb24iLCJmaWx0ZXJlZEluZGV4IiwiZ2V0SWNvbiIsImRhdGEiLCJpIiwicm93SW5kZXgiLCJwb3MiLCJldmVyeSIsImZvcm1hdExheWVyRGF0YSIsImRhdGFzZXRzIiwib2xkTGF5ZXJEYXRhIiwiZGF0YUlkIiwidGV4dExhYmVsIiwiX2RhdGFzZXRzJHRoaXMkY29uZmlnIiwiZ3B1RmlsdGVyIiwiX3RoaXMkdXBkYXRlRGF0YSIsInVwZGF0ZURhdGEiLCJ0cmlnZ2VyQ2hhbmdlZCIsInRleHRMYWJlbHMiLCJmb3JtYXRUZXh0TGFiZWxEYXRhIiwiYWNjZXNzb3JzIiwiZ2V0QXR0cmlidXRlQWNjZXNzb3JzIiwiZ2V0RmlsdGVyVmFsdWUiLCJmaWx0ZXJWYWx1ZUFjY2Vzc29yIiwidXBkYXRlTGF5ZXJNZXRhIiwiZGF0YXNldCIsImJvdW5kcyIsImdldFBvaW50c0JvdW5kcyIsInVwZGF0ZU1ldGEiLCJyZW5kZXJMYXllciIsIm9wdHMiLCJfdGhpcyRjb25maWckY29sdW1ucyQiLCJfdGhpczMiLCJvYmplY3RIb3ZlcmVkIiwibWFwU3RhdGUiLCJpbnRlcmFjdGlvbkNvbmZpZyIsInJhZGl1c1NjYWxlIiwiZ2V0UmFkaXVzU2NhbGVCeVpvb20iLCJsYXllclByb3BzIiwidmlzQ29uZmlnIiwicmFkaXVzTWF4UGl4ZWxzIiwidXBkYXRlVHJpZ2dlcnMiLCJmaWx0ZXJWYWx1ZVVwZGF0ZVRyaWdnZXJzIiwiZ2V0VmlzdWFsQ2hhbm5lbFVwZGF0ZVRyaWdnZXJzIiwiZGVmYXVsdExheWVyUHJvcHMiLCJnZXREZWZhdWx0RGVja0xheWVyUHJvcHMiLCJicnVzaGluZ1Byb3BzIiwiZ2V0QnJ1c2hpbmdFeHRlbnNpb25Qcm9wcyIsImdldFBpeGVsT2Zmc2V0IiwiZ2V0VGV4dE9mZnNldEJ5UmFkaXVzIiwiZ2V0UmFkaXVzIiwiZXh0ZW5zaW9ucyIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJzaGFyZWRQcm9wcyIsImZpbHRlclJhbmdlIiwibGFiZWxMYXllcnMiLCJyZW5kZXJUZXh0TGFiZWxMYXllciIsImhvdmVyZWRPYmplY3QiLCJoYXNIb3ZlcmVkT2JqZWN0IiwicGFyYW1ldGVycyIsImRlcHRoVGVzdCIsImN1bGxGYWNlIiwiR0wiLCJGUk9OVCIsIlN2Z0ljb25MYXllciIsImdldEljb25HZW9tZXRyeSIsIl90aGlzMyRpY29uR2VvbWV0cnkiLCJnZXREZWZhdWx0SG92ZXJMYXllclByb3BzIiwidmlzaWJsZSIsImdldEZpbGxDb2xvciIsImhpZ2hsaWdodENvbG9yIiwiX3RoaXMzJGljb25HZW9tZXRyeTIiLCJmaW5kRGVmYXVsdExheWVyUHJvcHMiLCJfcmVmNSIsIl9yZWY1JGZpZWxkUGFpcnMiLCJmaWVsZFBhaXJzIiwiX3JlZjUkZmllbGRzIiwiZmllbGRzIiwibm90Rm91bmQiLCJpY29uRmllbGRzIiwiX3JlZjYiLCJuYW1lIiwicmVwbGFjZSIsInRyaW0iLCJzcGxpdCIsInNvbWUiLCJzZWciLCJJQ09OX0ZJRUxEUyIsImluY2x1ZGVzIiwicHRQYWlyIiwiYXNzaWduUG9pbnRQYWlyVG9MYXllckNvbHVtbiIsIm1hcCIsImljb25GaWVsZCIsImxhYmVsIiwiaXNWaXNpYmxlIiwiTGF5ZXIiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvaWNvbi1sYXllci9pY29uLWxheWVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBXaW5kb3cgZnJvbSAnZ2xvYmFsL3dpbmRvdyc7XG5pbXBvcnQge0JydXNoaW5nRXh0ZW5zaW9ufSBmcm9tICdAZGVjay5nbC9leHRlbnNpb25zJztcbmltcG9ydCBHTCBmcm9tICdAbHVtYS5nbC9jb25zdGFudHMnO1xuXG5pbXBvcnQge1N2Z0ljb25MYXllcn0gZnJvbSAnQGtlcGxlci5nbC9kZWNrZ2wtbGF5ZXJzJztcbmltcG9ydCBJY29uTGF5ZXJJY29uIGZyb20gJy4vaWNvbi1sYXllci1pY29uJztcbmltcG9ydCB7SUNPTl9GSUVMRFN9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCBJY29uSW5mb01vZGFsRmFjdG9yeSBmcm9tICcuL2ljb24taW5mby1tb2RhbCc7XG5pbXBvcnQgTGF5ZXIsIHtMYXllckJhc2VDb25maWcsIExheWVyQmFzZUNvbmZpZ1BhcnRpYWx9IGZyb20gJy4uL2Jhc2UtbGF5ZXInO1xuaW1wb3J0IHthc3NpZ25Qb2ludFBhaXJUb0xheWVyQ29sdW1uLCBGaW5kRGVmYXVsdExheWVyUHJvcHNSZXR1cm5WYWx1ZX0gZnJvbSAnLi4vbGF5ZXItdXRpbHMnO1xuaW1wb3J0IHtpc1Rlc3R9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtnZXRUZXh0T2Zmc2V0QnlSYWRpdXMsIGZvcm1hdFRleHRMYWJlbERhdGF9IGZyb20gJy4uL2xheWVyLXRleHQtbGFiZWwnO1xuaW1wb3J0IHtkZWZhdWx0IGFzIEtlcGxlclRhYmxlfSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCB7Z2V0QXBwbGljYXRpb25Db25maWcsIERhdGFDb250YWluZXJJbnRlcmZhY2V9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtcbiAgQ29sb3JSYW5nZSxcbiAgVmlzQ29uZmlnQm9vbGVhbixcbiAgVmlzQ29uZmlnQ29sb3JSYW5nZSxcbiAgVmlzQ29uZmlnTnVtYmVyLFxuICBWaXNDb25maWdSYW5nZSxcbiAgTWVyZ2UsXG4gIExheWVyQ29sdW1uXG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBJY29uTGF5ZXJDb2x1bW5zQ29uZmlnID0ge1xuICBsYXQ6IExheWVyQ29sdW1uO1xuICBsbmc6IExheWVyQ29sdW1uO1xuICBhbHRpdHVkZTogTGF5ZXJDb2x1bW47XG4gIGljb246IExheWVyQ29sdW1uO1xufTtcblxudHlwZSBJY29uR2VvbWV0cnkgPSBvYmplY3QgfCBudWxsO1xuXG5leHBvcnQgdHlwZSBJY29uTGF5ZXJWaXNDb25maWdTZXR0aW5ncyA9IHtcbiAgcmFkaXVzOiBWaXNDb25maWdOdW1iZXI7XG4gIGZpeGVkUmFkaXVzOiBWaXNDb25maWdCb29sZWFuO1xuICBvcGFjaXR5OiBWaXNDb25maWdOdW1iZXI7XG4gIGNvbG9yUmFuZ2U6IFZpc0NvbmZpZ0NvbG9yUmFuZ2U7XG4gIHJhZGl1c1JhbmdlOiBWaXNDb25maWdSYW5nZTtcbn07XG5cbmV4cG9ydCB0eXBlIEljb25MYXllclZpc0NvbmZpZyA9IHtcbiAgcmFkaXVzOiBudW1iZXI7XG4gIGZpeGVkUmFkaXVzOiBib29sZWFuO1xuICBvcGFjaXR5OiBudW1iZXI7XG4gIGNvbG9yUmFuZ2U6IENvbG9yUmFuZ2U7XG4gIHJhZGl1c1JhbmdlOiBbbnVtYmVyLCBudW1iZXJdO1xuICBiaWxsYm9hcmQ6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBJY29uTGF5ZXJDb25maWcgPSBNZXJnZTxcbiAgTGF5ZXJCYXNlQ29uZmlnLFxuICB7Y29sdW1uczogSWNvbkxheWVyQ29sdW1uc0NvbmZpZzsgdmlzQ29uZmlnOiBJY29uTGF5ZXJWaXNDb25maWd9XG4+O1xuXG5leHBvcnQgdHlwZSBJY29uTGF5ZXJEYXRhID0ge2luZGV4OiBudW1iZXI7IGljb246IHN0cmluZ307XG5cbmNvbnN0IGJydXNoaW5nRXh0ZW5zaW9uID0gbmV3IEJydXNoaW5nRXh0ZW5zaW9uKCk7XG5cbmV4cG9ydCBjb25zdCBpY29uUG9zQWNjZXNzb3IgPVxuICAoe2xhdCwgbG5nLCBhbHRpdHVkZX06IEljb25MYXllckNvbHVtbnNDb25maWcpID0+XG4gIChkYzogRGF0YUNvbnRhaW5lckludGVyZmFjZSkgPT5cbiAgZCA9PlxuICAgIFtcbiAgICAgIGRjLnZhbHVlQXQoZC5pbmRleCwgbG5nLmZpZWxkSWR4KSxcbiAgICAgIGRjLnZhbHVlQXQoZC5pbmRleCwgbGF0LmZpZWxkSWR4KSxcbiAgICAgIGFsdGl0dWRlPy5maWVsZElkeCA+IC0xID8gZGMudmFsdWVBdChkLmluZGV4LCBhbHRpdHVkZS5maWVsZElkeCkgOiAwXG4gICAgXTtcblxuZXhwb3J0IGNvbnN0IGljb25BY2Nlc3NvciA9XG4gICh7aWNvbn06IEljb25MYXllckNvbHVtbnNDb25maWcpID0+XG4gIChkYzogRGF0YUNvbnRhaW5lckludGVyZmFjZSkgPT5cbiAgZCA9PlxuICAgIGRjLnZhbHVlQXQoZC5pbmRleCwgaWNvbi5maWVsZElkeCk7XG5cbmV4cG9ydCBjb25zdCBpY29uUmVxdWlyZWRDb2x1bW5zOiBbJ2xhdCcsICdsbmcnLCAnaWNvbiddID0gWydsYXQnLCAnbG5nJywgJ2ljb24nXTtcbmV4cG9ydCBjb25zdCBpY29uT3B0aW9uYWxDb2x1bW5zOiBbJ2FsdGl0dWRlJ10gPSBbJ2FsdGl0dWRlJ107XG5cbmV4cG9ydCBjb25zdCBwb2ludFZpc0NvbmZpZ3M6IHtcbiAgcmFkaXVzOiAncmFkaXVzJztcbiAgZml4ZWRSYWRpdXM6ICdmaXhlZFJhZGl1cyc7XG4gIG9wYWNpdHk6ICdvcGFjaXR5JztcbiAgY29sb3JSYW5nZTogJ2NvbG9yUmFuZ2UnO1xuICByYWRpdXNSYW5nZTogJ3JhZGl1c1JhbmdlJztcbiAgYmlsbGJvYXJkOiAnYmlsbGJvYXJkJztcbn0gPSB7XG4gIHJhZGl1czogJ3JhZGl1cycsXG4gIGZpeGVkUmFkaXVzOiAnZml4ZWRSYWRpdXMnLFxuICBvcGFjaXR5OiAnb3BhY2l0eScsXG4gIGNvbG9yUmFuZ2U6ICdjb2xvclJhbmdlJyxcbiAgcmFkaXVzUmFuZ2U6ICdyYWRpdXNSYW5nZScsXG4gIGJpbGxib2FyZDogJ2JpbGxib2FyZCdcbn07XG5cbmZ1bmN0aW9uIGZsYXR0ZXJJY29uUG9zaXRpb25zKGljb24pIHtcbiAgLy8gaGFkIHRvIGZsaXAgeSwgc2luY2UgQGx1bWEgbW9kYWwgaGFzIGNoYW5nZWRcbiAgcmV0dXJuIGljb24ubWVzaC5jZWxscy5yZWR1Y2UoKHByZXYsIGNlbGwpID0+IHtcbiAgICBjZWxsLmZvckVhY2gocCA9PiB7XG4gICAgICBwcmV2LnB1c2goXG4gICAgICAgIC4uLltpY29uLm1lc2gucG9zaXRpb25zW3BdWzBdLCAtaWNvbi5tZXNoLnBvc2l0aW9uc1twXVsxXSwgaWNvbi5tZXNoLnBvc2l0aW9uc1twXVsyXV1cbiAgICAgICk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHByZXY7XG4gIH0sIFtdKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSWNvbkxheWVyIGV4dGVuZHMgTGF5ZXIge1xuICBnZXRJY29uQWNjZXNzb3I6IChkYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlKSA9PiAoZDogYW55KSA9PiBhbnk7XG4gIF9sYXllckluZm9Nb2RhbDogKCkgPT4gSlNYLkVsZW1lbnQ7XG4gIGljb25HZW9tZXRyeTogSWNvbkdlb21ldHJ5O1xuXG4gIGRlY2xhcmUgdmlzQ29uZmlnU2V0dGluZ3M6IEljb25MYXllclZpc0NvbmZpZ1NldHRpbmdzO1xuICBkZWNsYXJlIGNvbmZpZzogSWNvbkxheWVyQ29uZmlnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3BzOiB7XG4gICAgICBpZD86IHN0cmluZztcbiAgICAgIGljb25HZW9tZXRyeT86IEljb25HZW9tZXRyeTtcbiAgICAgIHN2Z0ljb25zPzogYW55W107XG4gICAgfSAmIExheWVyQmFzZUNvbmZpZ1BhcnRpYWxcbiAgKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5yZWdpc3RlclZpc0NvbmZpZyhwb2ludFZpc0NvbmZpZ3MpO1xuICAgIHRoaXMuZ2V0UG9zaXRpb25BY2Nlc3NvciA9IChkYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlKSA9PlxuICAgICAgaWNvblBvc0FjY2Vzc29yKHRoaXMuY29uZmlnLmNvbHVtbnMpKGRhdGFDb250YWluZXIpO1xuICAgIHRoaXMuZ2V0SWNvbkFjY2Vzc29yID0gZGF0YUNvbnRhaW5lciA9PiBpY29uQWNjZXNzb3IodGhpcy5jb25maWcuY29sdW1ucykoZGF0YUNvbnRhaW5lcik7XG5cbiAgICB0aGlzLl9sYXllckluZm9Nb2RhbCA9IEljb25JbmZvTW9kYWxGYWN0b3J5KHByb3BzLnN2Z0ljb25zKTtcbiAgICB0aGlzLmljb25HZW9tZXRyeSA9IHByb3BzLmljb25HZW9tZXRyeSB8fCBudWxsO1xuXG4gICAgaWYgKGlzVGVzdCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChwcm9wcy5zdmdJY29ucykge1xuICAgICAgLy8gaWYgc3ZnIGljb25zIGFyZSBwYXNzZWQgaW4gdGhlbiBieXBhc3MgZmV0Y2hpbmcgb2YgcmVtb3RlIHN2ZyBpY29uc1xuICAgICAgdGhpcy5zZXRTdmdJY29ucyhwcm9wcy5zdmdJY29ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHByZXBhcmUgbGF5ZXIgaW5mbyBtb2RhbCBhbmQgZmV0Y2ggcmVtb3RlIHN2ZyBpY29uc1xuICAgICAgdGhpcy5nZXRTdmdJY29ucygpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBzdmdJY29uVXJsKCkge1xuICAgIHJldHVybiBgJHtnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmNkblVybH0vaWNvbnMvc3ZnLWljb25zLmpzb25gO1xuICB9XG5cbiAgZ2V0IHR5cGUoKTogJ2ljb24nIHtcbiAgICByZXR1cm4gJ2ljb24nO1xuICB9XG5cbiAgZ2V0IHJlcXVpcmVkTGF5ZXJDb2x1bW5zKCkge1xuICAgIHJldHVybiBpY29uUmVxdWlyZWRDb2x1bW5zO1xuICB9XG5cbiAgZ2V0IG9wdGlvbmFsQ29sdW1ucygpIHtcbiAgICByZXR1cm4gaWNvbk9wdGlvbmFsQ29sdW1ucztcbiAgfVxuXG4gIGdldCBjb2x1bW5QYWlycygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9pbnRDb2x1bW5QYWlycztcbiAgfVxuXG4gIGdldCBsYXllckljb24oKSB7XG4gICAgcmV0dXJuIEljb25MYXllckljb247XG4gIH1cblxuICBnZXQgdmlzdWFsQ2hhbm5lbHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbG9yOiB7XG4gICAgICAgIC4uLnN1cGVyLnZpc3VhbENoYW5uZWxzLmNvbG9yLFxuICAgICAgICBhY2Nlc3NvcjogJ2dldEZpbGxDb2xvcicsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogY29uZmlnID0+IGNvbmZpZy5jb2xvclxuICAgICAgfSxcbiAgICAgIHNpemU6IHtcbiAgICAgICAgLi4uc3VwZXIudmlzdWFsQ2hhbm5lbHMuc2l6ZSxcbiAgICAgICAgcHJvcGVydHk6ICdyYWRpdXMnLFxuICAgICAgICByYW5nZTogJ3JhZGl1c1JhbmdlJyxcbiAgICAgICAgY2hhbm5lbFNjYWxlVHlwZTogJ3JhZGl1cycsXG4gICAgICAgIGFjY2Vzc29yOiAnZ2V0UmFkaXVzJyxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiAxXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGdldCBsYXllckluZm9Nb2RhbCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6ICdpY29uSW5mbycsXG4gICAgICB0ZW1wbGF0ZTogdGhpcy5fbGF5ZXJJbmZvTW9kYWwsXG4gICAgICBtb2RhbFByb3BzOiB7XG4gICAgICAgIHRpdGxlOiAnbW9kYWwuaWNvbkluZm8udGl0bGUnXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGdldFpvb21GYWN0b3Ioe3pvb20sIHpvb21PZmZzZXQgPSAwfToge3pvb206IG51bWJlcjsgem9vbU9mZnNldD86IG51bWJlcn0pIHtcbiAgICByZXR1cm4gTWF0aC5wb3coMiwgMTQgLSB6b29tICsgem9vbU9mZnNldCk7XG4gIH1cblxuICBnZXRTdmdJY29ucygpIHtcbiAgICBjb25zdCBmZXRjaENvbmZpZyA9IHtcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICBtb2RlOiAnY29ycycsXG4gICAgICBjYWNoZTogJ25vLWNhY2hlJ1xuICAgIH07XG5cbiAgICBpZiAoV2luZG93LmZldGNoICYmIHRoaXMuc3ZnSWNvblVybCkge1xuICAgICAgV2luZG93LmZldGNoKHRoaXMuc3ZnSWNvblVybCwgZmV0Y2hDb25maWcpXG4gICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkIHN2Zy1pY29ucy5qc29uOiAke3Jlc3BvbnNlLnN0YXR1c31gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKHBhcnNlZDoge3N2Z0ljb25zPzogYW55W119ID0ge30pID0+IHtcbiAgICAgICAgICB0aGlzLnNldFN2Z0ljb25zKHBhcnNlZC5zdmdJY29ucyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIG9yIHBhcnNpbmcgc3ZnLWljb25zLmpzb246JywgZXJyKTtcbiAgICAgICAgICAvLyBGYWxsYmFjayB0byBlbXB0eSBnZW9tZXRyeSB0byBhbGxvdyBkZWZhdWx0IGljb24gcmVuZGVyaW5nXG4gICAgICAgICAgdGhpcy5pY29uR2VvbWV0cnkgPSB7fTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGZldGNoIGF2YWlsYWJsZTsgc2V0IGVtcHR5IGdlb21ldHJ5IHNvIGxheWVyIGNhbiByZW5kZXIgZGVmYXVsdCBpY29uc1xuICAgICAgdGhpcy5pY29uR2VvbWV0cnkgPSB7fTtcbiAgICB9XG4gIH1cblxuICBzZXRTdmdJY29ucyhzdmdJY29uczogYW55W10gPSBbXSkge1xuICAgIHRoaXMuaWNvbkdlb21ldHJ5ID0gc3ZnSWNvbnMucmVkdWNlKFxuICAgICAgKGFjY3UsIGN1cnIpID0+ICh7XG4gICAgICAgIC4uLmFjY3UsXG4gICAgICAgIFtjdXJyLmlkXTogZmxhdHRlckljb25Qb3NpdGlvbnMoY3VycilcbiAgICAgIH0pLFxuICAgICAge31cbiAgICApO1xuXG4gICAgdGhpcy5fbGF5ZXJJbmZvTW9kYWwgPSBJY29uSW5mb01vZGFsRmFjdG9yeShzdmdJY29ucyk7XG4gIH1cblxuICBzdGF0aWMgZmluZERlZmF1bHRMYXllclByb3BzKHtcbiAgICBmaWVsZFBhaXJzID0gW10sXG4gICAgZmllbGRzID0gW11cbiAgfTogS2VwbGVyVGFibGUpOiBGaW5kRGVmYXVsdExheWVyUHJvcHNSZXR1cm5WYWx1ZSB7XG4gICAgY29uc3Qgbm90Rm91bmQ6IEZpbmREZWZhdWx0TGF5ZXJQcm9wc1JldHVyblZhbHVlID0ge3Byb3BzOiBbXX07XG4gICAgaWYgKCFmaWVsZFBhaXJzLmxlbmd0aCB8fCAhZmllbGRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG5vdEZvdW5kO1xuICAgIH1cblxuICAgIGNvbnN0IGljb25GaWVsZHMgPSBmaWVsZHMuZmlsdGVyKCh7bmFtZX0pID0+XG4gICAgICBuYW1lXG4gICAgICAgIC5yZXBsYWNlKC9bXywuXSsvZywgJyAnKVxuICAgICAgICAudHJpbSgpXG4gICAgICAgIC5zcGxpdCgnICcpXG4gICAgICAgIC5zb21lKHNlZyA9PiBJQ09OX0ZJRUxEUy5pY29uLnNvbWUodCA9PiB0LmluY2x1ZGVzKHNlZykpKVxuICAgICk7XG5cbiAgICBpZiAoIWljb25GaWVsZHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbm90Rm91bmQ7XG4gICAgfVxuXG4gICAgLy8gY3JlYXRlIGljb24gbGF5ZXJzIGZvciBmaXJzdCBwb2ludCBwYWlyXG4gICAgY29uc3QgcHRQYWlyID0gZmllbGRQYWlyc1swXTtcbiAgICBjb25zdCBjb2x1bW5zID0gYXNzaWduUG9pbnRQYWlyVG9MYXllckNvbHVtbihwdFBhaXIsIHRydWUpO1xuXG4gICAgY29uc3QgcHJvcHMgPSBpY29uRmllbGRzLm1hcChpY29uRmllbGQgPT4gKHtcbiAgICAgIGxhYmVsOiBpY29uRmllbGQubmFtZS5yZXBsYWNlKC9bXywuXSsvZywgJyAnKS50cmltKCksXG4gICAgICBjb2x1bW5zOiB7XG4gICAgICAgIC4uLmNvbHVtbnMsXG4gICAgICAgIGljb246IHtcbiAgICAgICAgICB2YWx1ZTogaWNvbkZpZWxkLm5hbWUsXG4gICAgICAgICAgZmllbGRJZHg6IGljb25GaWVsZC5maWVsZElkeFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaXNWaXNpYmxlOiB0cnVlXG4gICAgfSkpO1xuXG4gICAgcmV0dXJuIHtwcm9wc307XG4gIH1cblxuICBnZXRGaWx0ZXJlZEl0ZW1Db3VudCgpIHtcbiAgICAvLyB1c2UgdG90YWxcbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy5maWx0ZXJlZEl0ZW1Db3VudCkubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLmZpbHRlcmVkSXRlbUNvdW50KS5yZWR1Y2UoXG4gICAgICAgICh0b3RhbCwgY3VycikgPT4gKE51bWJlci5pc0Zpbml0ZShjdXJyKSA/IHRvdGFsICsgY3VyciA6IHRvdGFsKSxcbiAgICAgICAgMFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNhbGN1bGF0ZURhdGFBdHRyaWJ1dGUoe2RhdGFDb250YWluZXIsIGZpbHRlcmVkSW5kZXh9OiBLZXBsZXJUYWJsZSwgZ2V0UG9zaXRpb24pIHtcbiAgICBjb25zdCBnZXRJY29uID0gdGhpcy5nZXRJY29uQWNjZXNzb3IoZGF0YUNvbnRhaW5lcik7XG4gICAgY29uc3QgZGF0YTogSWNvbkxheWVyRGF0YVtdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbHRlcmVkSW5kZXgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gZmlsdGVyZWRJbmRleFtpXTtcbiAgICAgIGNvbnN0IHJvd0luZGV4ID0ge2luZGV4fTtcbiAgICAgIGNvbnN0IHBvcyA9IGdldFBvc2l0aW9uKHJvd0luZGV4KTtcbiAgICAgIGNvbnN0IGljb24gPSBnZXRJY29uKHJvd0luZGV4KTtcblxuICAgICAgLy8gaWYgZG9lc24ndCBoYXZlIHBvaW50IGxhdCBvciBsbmcsIGRvIG5vdCBhZGQgdGhlIHBvaW50XG4gICAgICAvLyBkZWNrLmdsIGNhbid0IGhhbmRsZSBwb3NpdGlvbiA9IG51bGxcbiAgICAgIGlmIChwb3MuZXZlcnkoTnVtYmVyLmlzRmluaXRlKSAmJiB0eXBlb2YgaWNvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgZGF0YS5wdXNoKHtcbiAgICAgICAgICBpbmRleCxcbiAgICAgICAgICBpY29uXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgZm9ybWF0TGF5ZXJEYXRhKGRhdGFzZXRzLCBvbGRMYXllckRhdGEpIHtcbiAgICBpZiAodGhpcy5jb25maWcuZGF0YUlkID09PSBudWxsKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IHt0ZXh0TGFiZWx9ID0gdGhpcy5jb25maWc7XG4gICAgY29uc3Qge2dwdUZpbHRlciwgZGF0YUNvbnRhaW5lcn0gPSBkYXRhc2V0c1t0aGlzLmNvbmZpZy5kYXRhSWRdO1xuXG4gICAgY29uc3QgZ2V0UG9zaXRpb24gPSB0aGlzLmdldFBvc2l0aW9uQWNjZXNzb3IoZGF0YUNvbnRhaW5lcik7XG5cbiAgICBjb25zdCB7ZGF0YSwgdHJpZ2dlckNoYW5nZWR9ID0gdGhpcy51cGRhdGVEYXRhKGRhdGFzZXRzLCBvbGRMYXllckRhdGEpO1xuXG4gICAgLy8gZ2V0IGFsbCBkaXN0aW5jdCBjaGFyYWN0ZXJzIGluIHRoZSB0ZXh0IGxhYmVsc1xuICAgIGNvbnN0IHRleHRMYWJlbHMgPSBmb3JtYXRUZXh0TGFiZWxEYXRhKHtcbiAgICAgIHRleHRMYWJlbCxcbiAgICAgIHRyaWdnZXJDaGFuZ2VkLFxuICAgICAgb2xkTGF5ZXJEYXRhLFxuICAgICAgZGF0YSxcbiAgICAgIGRhdGFDb250YWluZXJcbiAgICB9KTtcblxuICAgIGNvbnN0IGFjY2Vzc29ycyA9IHRoaXMuZ2V0QXR0cmlidXRlQWNjZXNzb3JzKHtkYXRhQ29udGFpbmVyfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YSxcbiAgICAgIGdldFBvc2l0aW9uLFxuICAgICAgZ2V0RmlsdGVyVmFsdWU6IGdwdUZpbHRlci5maWx0ZXJWYWx1ZUFjY2Vzc29yKGRhdGFDb250YWluZXIpKCksXG4gICAgICB0ZXh0TGFiZWxzLFxuICAgICAgLi4uYWNjZXNzb3JzXG4gICAgfTtcbiAgfVxuXG4gIHVwZGF0ZUxheWVyTWV0YShkYXRhc2V0OiBLZXBsZXJUYWJsZSwgZ2V0UG9zaXRpb24pIHtcbiAgICBjb25zdCB7ZGF0YUNvbnRhaW5lcn0gPSBkYXRhc2V0O1xuICAgIGNvbnN0IGJvdW5kcyA9IHRoaXMuZ2V0UG9pbnRzQm91bmRzKGRhdGFDb250YWluZXIsIGdldFBvc2l0aW9uKTtcbiAgICB0aGlzLnVwZGF0ZU1ldGEoe2JvdW5kc30pO1xuICB9XG5cbiAgcmVuZGVyTGF5ZXIob3B0cykge1xuICAgIGNvbnN0IHtkYXRhLCBncHVGaWx0ZXIsIG9iamVjdEhvdmVyZWQsIG1hcFN0YXRlLCBpbnRlcmFjdGlvbkNvbmZpZ30gPSBvcHRzO1xuXG4gICAgY29uc3QgcmFkaXVzU2NhbGUgPSB0aGlzLmdldFJhZGl1c1NjYWxlQnlab29tKG1hcFN0YXRlKTtcblxuICAgIGNvbnN0IGxheWVyUHJvcHMgPSB7XG4gICAgICByYWRpdXNTY2FsZSxcbiAgICAgIGJpbGxib2FyZDogdGhpcy5jb25maWcudmlzQ29uZmlnLmJpbGxib2FyZCxcbiAgICAgIC4uLih0aGlzLmNvbmZpZy52aXNDb25maWcuZml4ZWRSYWRpdXMgPyB7fSA6IHtyYWRpdXNNYXhQaXhlbHM6IDUwMH0pXG4gICAgfTtcblxuICAgIGNvbnN0IHVwZGF0ZVRyaWdnZXJzID0ge1xuICAgICAgZ2V0UG9zaXRpb246IHRoaXMuY29uZmlnLmNvbHVtbnMsXG4gICAgICBnZXRGaWx0ZXJWYWx1ZTogZ3B1RmlsdGVyLmZpbHRlclZhbHVlVXBkYXRlVHJpZ2dlcnMsXG4gICAgICAuLi50aGlzLmdldFZpc3VhbENoYW5uZWxVcGRhdGVUcmlnZ2VycygpXG4gICAgfTtcblxuICAgIGNvbnN0IGRlZmF1bHRMYXllclByb3BzID0gdGhpcy5nZXREZWZhdWx0RGVja0xheWVyUHJvcHMob3B0cyk7XG4gICAgY29uc3QgYnJ1c2hpbmdQcm9wcyA9IHRoaXMuZ2V0QnJ1c2hpbmdFeHRlbnNpb25Qcm9wcyhpbnRlcmFjdGlvbkNvbmZpZyk7XG4gICAgY29uc3QgZ2V0UGl4ZWxPZmZzZXQgPSBnZXRUZXh0T2Zmc2V0QnlSYWRpdXMocmFkaXVzU2NhbGUsIGRhdGEuZ2V0UmFkaXVzLCBtYXBTdGF0ZSk7XG4gICAgY29uc3QgZXh0ZW5zaW9ucyA9IFsuLi5kZWZhdWx0TGF5ZXJQcm9wcy5leHRlbnNpb25zLCBicnVzaGluZ0V4dGVuc2lvbl07XG5cbiAgICAvLyBzaGFyZWQgUHJvcHMgYmV0d2VlbiBsYXllciBhbmQgbGFiZWwgbGF5ZXJcbiAgICBjb25zdCBzaGFyZWRQcm9wcyA9IHtcbiAgICAgIGdldEZpbHRlclZhbHVlOiBkYXRhLmdldEZpbHRlclZhbHVlLFxuICAgICAgZXh0ZW5zaW9ucyxcbiAgICAgIGZpbHRlclJhbmdlOiBkZWZhdWx0TGF5ZXJQcm9wcy5maWx0ZXJSYW5nZSxcbiAgICAgIC4uLmJydXNoaW5nUHJvcHNcbiAgICB9O1xuXG4gICAgY29uc3QgbGFiZWxMYXllcnMgPSBbXG4gICAgICAuLi50aGlzLnJlbmRlclRleHRMYWJlbExheWVyKFxuICAgICAgICB7XG4gICAgICAgICAgZ2V0UG9zaXRpb246IGRhdGEuZ2V0UG9zaXRpb24sXG4gICAgICAgICAgc2hhcmVkUHJvcHMsXG4gICAgICAgICAgZ2V0UGl4ZWxPZmZzZXQsXG4gICAgICAgICAgdXBkYXRlVHJpZ2dlcnNcbiAgICAgICAgfSxcbiAgICAgICAgb3B0c1xuICAgICAgKVxuICAgIF07XG4gICAgY29uc3QgaG92ZXJlZE9iamVjdCA9IHRoaXMuaGFzSG92ZXJlZE9iamVjdChvYmplY3RIb3ZlcmVkKTtcblxuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSB7XG4gICAgICAvLyBpY29ucyB3aWxsIGJlIGZsYXQgb24gdGhlIG1hcCB3aGVuIHRoZSBhbHRpdHVkZSBjb2x1bW4gaXMgbm90IHVzZWRcbiAgICAgIGRlcHRoVGVzdDogdGhpcy5jb25maWcuY29sdW1ucy5hbHRpdHVkZT8uZmllbGRJZHggPiAtMSxcbiAgICAgIGN1bGxGYWNlOiBHTC5GUk9OVFxuICAgIH07XG5cbiAgICByZXR1cm4gW1xuICAgICAgbmV3IFN2Z0ljb25MYXllcih7XG4gICAgICAgIC4uLmRlZmF1bHRMYXllclByb3BzLFxuICAgICAgICAuLi5icnVzaGluZ1Byb3BzLFxuICAgICAgICAuLi5sYXllclByb3BzLFxuICAgICAgICAuLi5kYXRhLFxuICAgICAgICBwYXJhbWV0ZXJzLFxuICAgICAgICBnZXRJY29uR2VvbWV0cnk6IGlkID0+IHRoaXMuaWNvbkdlb21ldHJ5Py5baWRdLFxuXG4gICAgICAgIC8vIHVwZGF0ZSB0cmlnZ2Vyc1xuICAgICAgICB1cGRhdGVUcmlnZ2VycyxcbiAgICAgICAgZXh0ZW5zaW9uc1xuICAgICAgfSksXG5cbiAgICAgIC8vIGhvdmVyIGxheWVyXG4gICAgICAuLi4oaG92ZXJlZE9iamVjdFxuICAgICAgICA/IFtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgU3ZnSWNvbkxheWVyUHJvcHMgbmVlZHMgZ2V0SWNvbiBGaWVsZFxuICAgICAgICAgICAgbmV3IFN2Z0ljb25MYXllcih7XG4gICAgICAgICAgICAgIC4uLnRoaXMuZ2V0RGVmYXVsdEhvdmVyTGF5ZXJQcm9wcygpLFxuICAgICAgICAgICAgICAuLi5sYXllclByb3BzLFxuICAgICAgICAgICAgICB2aXNpYmxlOiBkZWZhdWx0TGF5ZXJQcm9wcy52aXNpYmxlLFxuICAgICAgICAgICAgICBkYXRhOiBbaG92ZXJlZE9iamVjdF0sXG4gICAgICAgICAgICAgIHBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgIGdldFBvc2l0aW9uOiBkYXRhLmdldFBvc2l0aW9uLFxuICAgICAgICAgICAgICBnZXRSYWRpdXM6IGRhdGEuZ2V0UmFkaXVzLFxuICAgICAgICAgICAgICBnZXRGaWxsQ29sb3I6IHRoaXMuY29uZmlnLmhpZ2hsaWdodENvbG9yLFxuICAgICAgICAgICAgICBnZXRJY29uR2VvbWV0cnk6IGlkID0+IHRoaXMuaWNvbkdlb21ldHJ5Py5baWRdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXSksXG5cbiAgICAgIC8vIHRleHQgbGFiZWwgbGF5ZXJcbiAgICAgIC4uLmxhYmVsTGF5ZXJzXG4gICAgXTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxXQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxVQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBRyxhQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxjQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxXQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxjQUFBLEdBQUFQLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTyxVQUFBLEdBQUFSLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBUSxXQUFBLEdBQUFSLE9BQUE7QUFDQSxJQUFBUyxNQUFBLEdBQUFULE9BQUE7QUFDQSxJQUFBVSxlQUFBLEdBQUFWLE9BQUE7QUFBK0UsU0FBQVcsUUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFKLENBQUEsT0FBQUcsTUFBQSxDQUFBRSxxQkFBQSxRQUFBQyxDQUFBLEdBQUFILE1BQUEsQ0FBQUUscUJBQUEsQ0FBQUwsQ0FBQSxHQUFBQyxDQUFBLEtBQUFLLENBQUEsR0FBQUEsQ0FBQSxDQUFBQyxNQUFBLFdBQUFOLENBQUEsV0FBQUUsTUFBQSxDQUFBSyx3QkFBQSxDQUFBUixDQUFBLEVBQUFDLENBQUEsRUFBQVEsVUFBQSxPQUFBUCxDQUFBLENBQUFRLElBQUEsQ0FBQUMsS0FBQSxDQUFBVCxDQUFBLEVBQUFJLENBQUEsWUFBQUosQ0FBQTtBQUFBLFNBQUFVLGNBQUFaLENBQUEsYUFBQUMsQ0FBQSxNQUFBQSxDQUFBLEdBQUFZLFNBQUEsQ0FBQUMsTUFBQSxFQUFBYixDQUFBLFVBQUFDLENBQUEsV0FBQVcsU0FBQSxDQUFBWixDQUFBLElBQUFZLFNBQUEsQ0FBQVosQ0FBQSxRQUFBQSxDQUFBLE9BQUFGLE9BQUEsQ0FBQUksTUFBQSxDQUFBRCxDQUFBLE9BQUFhLE9BQUEsV0FBQWQsQ0FBQSxRQUFBZSxnQkFBQSxhQUFBaEIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsQ0FBQUQsQ0FBQSxTQUFBRSxNQUFBLENBQUFjLHlCQUFBLEdBQUFkLE1BQUEsQ0FBQWUsZ0JBQUEsQ0FBQWxCLENBQUEsRUFBQUcsTUFBQSxDQUFBYyx5QkFBQSxDQUFBZixDQUFBLEtBQUFILE9BQUEsQ0FBQUksTUFBQSxDQUFBRCxDQUFBLEdBQUFhLE9BQUEsV0FBQWQsQ0FBQSxJQUFBRSxNQUFBLENBQUFnQixjQUFBLENBQUFuQixDQUFBLEVBQUFDLENBQUEsRUFBQUUsTUFBQSxDQUFBSyx3QkFBQSxDQUFBTixDQUFBLEVBQUFELENBQUEsaUJBQUFELENBQUE7QUFBQSxTQUFBb0IsV0FBQWxCLENBQUEsRUFBQUksQ0FBQSxFQUFBTixDQUFBLFdBQUFNLENBQUEsT0FBQWUsZ0JBQUEsYUFBQWYsQ0FBQSxPQUFBZ0IsMkJBQUEsYUFBQXBCLENBQUEsRUFBQXFCLHlCQUFBLEtBQUFDLE9BQUEsQ0FBQUMsU0FBQSxDQUFBbkIsQ0FBQSxFQUFBTixDQUFBLFlBQUFxQixnQkFBQSxhQUFBbkIsQ0FBQSxFQUFBd0IsV0FBQSxJQUFBcEIsQ0FBQSxDQUFBSyxLQUFBLENBQUFULENBQUEsRUFBQUYsQ0FBQTtBQUFBLFNBQUF1QiwwQkFBQSxjQUFBckIsQ0FBQSxJQUFBeUIsT0FBQSxDQUFBQyxTQUFBLENBQUFDLE9BQUEsQ0FBQUMsSUFBQSxDQUFBTixPQUFBLENBQUFDLFNBQUEsQ0FBQUUsT0FBQSxpQ0FBQXpCLENBQUEsYUFBQXFCLHlCQUFBLFlBQUFBLDBCQUFBLGFBQUFyQixDQUFBO0FBQUEsU0FBQTZCLGNBQUE3QixDQUFBLEVBQUFGLENBQUEsRUFBQUMsQ0FBQSxFQUFBSyxDQUFBLFFBQUEwQixDQUFBLE9BQUFDLEtBQUEsaUJBQUFaLGdCQUFBLGlCQUFBZixDQUFBLEdBQUFKLENBQUEsQ0FBQTBCLFNBQUEsR0FBQTFCLENBQUEsR0FBQUYsQ0FBQSxFQUFBQyxDQUFBLGNBQUFLLENBQUEsYUFBQUosQ0FBQSxXQUFBOEIsQ0FBQSxDQUFBckIsS0FBQSxDQUFBVixDQUFBLEVBQUFDLENBQUEsT0FBQThCLENBQUEsSUFkL0U7QUFDQTtBQTJEQSxJQUFNRSxpQkFBaUIsR0FBRyxJQUFJQyw2QkFBaUIsQ0FBQyxDQUFDO0FBRTFDLElBQU1DLGVBQWUsR0FBQUMsT0FBQSxDQUFBRCxlQUFBLEdBQzFCLFNBRFdBLGVBQWVBLENBQUFFLElBQUE7RUFBQSxJQUN4QkMsR0FBRyxHQUFBRCxJQUFBLENBQUhDLEdBQUc7SUFBRUMsR0FBRyxHQUFBRixJQUFBLENBQUhFLEdBQUc7SUFBRUMsUUFBUSxHQUFBSCxJQUFBLENBQVJHLFFBQVE7RUFBQSxPQUNwQixVQUFDQyxFQUEwQjtJQUFBLE9BQzNCLFVBQUFDLENBQUM7TUFBQSxPQUNDLENBQ0VELEVBQUUsQ0FBQ0UsT0FBTyxDQUFDRCxDQUFDLENBQUNFLEtBQUssRUFBRUwsR0FBRyxDQUFDTSxRQUFRLENBQUMsRUFDakNKLEVBQUUsQ0FBQ0UsT0FBTyxDQUFDRCxDQUFDLENBQUNFLEtBQUssRUFBRU4sR0FBRyxDQUFDTyxRQUFRLENBQUMsRUFDakMsQ0FBQUwsUUFBUSxhQUFSQSxRQUFRLHVCQUFSQSxRQUFRLENBQUVLLFFBQVEsSUFBRyxDQUFDLENBQUMsR0FBR0osRUFBRSxDQUFDRSxPQUFPLENBQUNELENBQUMsQ0FBQ0UsS0FBSyxFQUFFSixRQUFRLENBQUNLLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FDckU7SUFBQTtFQUFBO0FBQUE7QUFFRSxJQUFNQyxZQUFZLEdBQUFWLE9BQUEsQ0FBQVUsWUFBQSxHQUN2QixTQURXQSxZQUFZQSxDQUFBQyxLQUFBO0VBQUEsSUFDckJDLElBQUksR0FBQUQsS0FBQSxDQUFKQyxJQUFJO0VBQUEsT0FDTixVQUFDUCxFQUEwQjtJQUFBLE9BQzNCLFVBQUFDLENBQUM7TUFBQSxPQUNDRCxFQUFFLENBQUNFLE9BQU8sQ0FBQ0QsQ0FBQyxDQUFDRSxLQUFLLEVBQUVJLElBQUksQ0FBQ0gsUUFBUSxDQUFDO0lBQUE7RUFBQTtBQUFBO0FBRS9CLElBQU1JLG1CQUEyQyxHQUFBYixPQUFBLENBQUFhLG1CQUFBLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQztBQUMxRSxJQUFNQyxtQkFBaUMsR0FBQWQsT0FBQSxDQUFBYyxtQkFBQSxHQUFHLENBQUMsVUFBVSxDQUFDO0FBRXRELElBQU1DLGVBT1osR0FBQWYsT0FBQSxDQUFBZSxlQUFBLEdBQUc7RUFDRkMsTUFBTSxFQUFFLFFBQVE7RUFDaEJDLFdBQVcsRUFBRSxhQUFhO0VBQzFCQyxPQUFPLEVBQUUsU0FBUztFQUNsQkMsVUFBVSxFQUFFLFlBQVk7RUFDeEJDLFdBQVcsRUFBRSxhQUFhO0VBQzFCQyxTQUFTLEVBQUU7QUFDYixDQUFDO0FBRUQsU0FBU0Msb0JBQW9CQSxDQUFDVixJQUFJLEVBQUU7RUFDbEM7RUFDQSxPQUFPQSxJQUFJLENBQUNXLElBQUksQ0FBQ0MsS0FBSyxDQUFDQyxNQUFNLENBQUMsVUFBQ0MsSUFBSSxFQUFFQyxJQUFJLEVBQUs7SUFDNUNBLElBQUksQ0FBQ2pELE9BQU8sQ0FBQyxVQUFBaUIsQ0FBQyxFQUFJO01BQ2hCK0IsSUFBSSxDQUFDckQsSUFBSSxDQUFBQyxLQUFBLENBQVRvRCxJQUFJLEVBQ0MsQ0FBQ2QsSUFBSSxDQUFDVyxJQUFJLENBQUNLLFNBQVMsQ0FBQ2pDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUNpQixJQUFJLENBQUNXLElBQUksQ0FBQ0ssU0FBUyxDQUFDakMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUVpQixJQUFJLENBQUNXLElBQUksQ0FBQ0ssU0FBUyxDQUFDakMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3RGLENBQUM7SUFDSCxDQUFDLENBQUM7SUFDRixPQUFPK0IsSUFBSTtFQUNiLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDUjtBQUFDLElBRW9CRyxTQUFTLEdBQUE3QixPQUFBLHFDQUFBOEIsTUFBQTtFQVE1QixTQUFBRCxVQUNFRSxLQUkwQixFQUMxQjtJQUFBLElBQUFDLEtBQUE7SUFBQSxJQUFBQyxnQkFBQSxtQkFBQUosU0FBQTtJQUNBRyxLQUFBLEdBQUFqRCxVQUFBLE9BQUE4QyxTQUFBLEdBQU1FLEtBQUs7SUFBRSxJQUFBcEQsZ0JBQUEsYUFBQXFELEtBQUE7SUFBQSxJQUFBckQsZ0JBQUEsYUFBQXFELEtBQUE7SUFBQSxJQUFBckQsZ0JBQUEsYUFBQXFELEtBQUE7SUFFYkEsS0FBQSxDQUFLRSxpQkFBaUIsQ0FBQ25CLGVBQWUsQ0FBQztJQUN2Q2lCLEtBQUEsQ0FBS0csbUJBQW1CLEdBQUcsVUFBQ0MsYUFBcUM7TUFBQSxPQUMvRHJDLGVBQWUsQ0FBQ2lDLEtBQUEsQ0FBS0ssTUFBTSxDQUFDQyxPQUFPLENBQUMsQ0FBQ0YsYUFBYSxDQUFDO0lBQUE7SUFDckRKLEtBQUEsQ0FBS08sZUFBZSxHQUFHLFVBQUFILGFBQWE7TUFBQSxPQUFJMUIsWUFBWSxDQUFDc0IsS0FBQSxDQUFLSyxNQUFNLENBQUNDLE9BQU8sQ0FBQyxDQUFDRixhQUFhLENBQUM7SUFBQTtJQUV4RkosS0FBQSxDQUFLUSxlQUFlLEdBQUcsSUFBQUMseUJBQW9CLEVBQUNWLEtBQUssQ0FBQ1csUUFBUSxDQUFDO0lBQzNEVixLQUFBLENBQUtXLFlBQVksR0FBR1osS0FBSyxDQUFDWSxZQUFZLElBQUksSUFBSTtJQUU5QyxJQUFJLElBQUFDLGFBQU0sRUFBQyxDQUFDLEVBQUU7TUFDWixXQUFBM0QsMkJBQUEsYUFBQStDLEtBQUE7SUFDRjtJQUNBLElBQUlELEtBQUssQ0FBQ1csUUFBUSxFQUFFO01BQ2xCO01BQ0FWLEtBQUEsQ0FBS2EsV0FBVyxDQUFDZCxLQUFLLENBQUNXLFFBQVEsQ0FBQztJQUNsQyxDQUFDLE1BQU07TUFDTDtNQUNBVixLQUFBLENBQUtjLFdBQVcsQ0FBQyxDQUFDO0lBQ3BCO0lBQUMsT0FBQWQsS0FBQTtFQUNIO0VBQUMsSUFBQWUsVUFBQSxhQUFBbEIsU0FBQSxFQUFBQyxNQUFBO0VBQUEsV0FBQWtCLGFBQUEsYUFBQW5CLFNBQUE7SUFBQW9CLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBaUI7TUFDZixVQUFBQyxNQUFBLENBQVUsSUFBQUMsMkJBQW9CLEVBQUMsQ0FBQyxDQUFDQyxNQUFNO0lBQ3pDO0VBQUM7SUFBQUosR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFtQjtNQUNqQixPQUFPLE1BQU07SUFDZjtFQUFDO0lBQUFELEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBMkI7TUFDekIsT0FBT3JDLG1CQUFtQjtJQUM1QjtFQUFDO0lBQUFvQyxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXNCO01BQ3BCLE9BQU9wQyxtQkFBbUI7SUFDNUI7RUFBQztJQUFBbUMsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFrQjtNQUNoQixPQUFPLElBQUksQ0FBQ0ksdUJBQXVCO0lBQ3JDO0VBQUM7SUFBQUwsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFnQjtNQUNkLE9BQU9LLHlCQUFhO0lBQ3RCO0VBQUM7SUFBQU4sR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFxQjtNQUNuQixPQUFPO1FBQ0xNLEtBQUssRUFBQWpGLGFBQUEsQ0FBQUEsYUFBQSxLQUNBbUIsYUFBQSxDQUFBbUMsU0FBQSw2QkFBcUIyQixLQUFLO1VBQzdCQyxRQUFRLEVBQUUsY0FBYztVQUN4QkMsWUFBWSxFQUFFLFNBQWRBLFlBQVlBLENBQUVyQixNQUFNO1lBQUEsT0FBSUEsTUFBTSxDQUFDbUIsS0FBSztVQUFBO1FBQUEsRUFDckM7UUFDREcsSUFBSSxFQUFBcEYsYUFBQSxDQUFBQSxhQUFBLEtBQ0NtQixhQUFBLENBQUFtQyxTQUFBLDZCQUFxQjhCLElBQUk7VUFDNUJDLFFBQVEsRUFBRSxRQUFRO1VBQ2xCQyxLQUFLLEVBQUUsYUFBYTtVQUNwQkMsZ0JBQWdCLEVBQUUsUUFBUTtVQUMxQkwsUUFBUSxFQUFFLFdBQVc7VUFDckJDLFlBQVksRUFBRTtRQUFDO01BRW5CLENBQUM7SUFDSDtFQUFDO0lBQUFULEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBcUI7TUFDbkIsT0FBTztRQUNMYSxFQUFFLEVBQUUsVUFBVTtRQUNkQyxRQUFRLEVBQUUsSUFBSSxDQUFDeEIsZUFBZTtRQUM5QnlCLFVBQVUsRUFBRTtVQUNWQyxLQUFLLEVBQUU7UUFDVDtNQUNGLENBQUM7SUFDSDtFQUFDO0lBQUFqQixHQUFBO0lBQUFrQixLQUFBLEVBRUQsU0FBQUMsYUFBYUEsQ0FBQUMsS0FBQSxFQUE4RDtNQUFBLElBQTVEQyxJQUFJLEdBQUFELEtBQUEsQ0FBSkMsSUFBSTtRQUFBQyxnQkFBQSxHQUFBRixLQUFBLENBQUVHLFVBQVU7UUFBVkEsVUFBVSxHQUFBRCxnQkFBQSxjQUFHLENBQUMsR0FBQUEsZ0JBQUE7TUFDakMsT0FBT0UsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBR0osSUFBSSxHQUFHRSxVQUFVLENBQUM7SUFDNUM7RUFBQztJQUFBdkIsR0FBQTtJQUFBa0IsS0FBQSxFQUVELFNBQUFyQixXQUFXQSxDQUFBLEVBQUc7TUFBQSxJQUFBNkIsTUFBQTtNQUNaLElBQU1DLFdBQVcsR0FBRztRQUNsQkMsTUFBTSxFQUFFLEtBQUs7UUFDYkMsSUFBSSxFQUFFLE1BQU07UUFDWkMsS0FBSyxFQUFFO01BQ1QsQ0FBQztNQUVELElBQUlDLGtCQUFNLENBQUNDLEtBQUssSUFBSSxJQUFJLENBQUNDLFVBQVUsRUFBRTtRQUNuQ0Ysa0JBQU0sQ0FBQ0MsS0FBSyxDQUFDLElBQUksQ0FBQ0MsVUFBVSxFQUFFTixXQUFXLENBQUMsQ0FDdkNPLElBQUksQ0FBQyxVQUFBQyxRQUFRLEVBQUk7VUFDaEIsSUFBSSxDQUFDQSxRQUFRLENBQUNDLEVBQUUsRUFBRTtZQUNoQixNQUFNLElBQUlDLEtBQUssbUNBQUFuQyxNQUFBLENBQW1DaUMsUUFBUSxDQUFDRyxNQUFNLENBQUUsQ0FBQztVQUN0RTtVQUNBLE9BQU9ILFFBQVEsQ0FBQ0ksSUFBSSxDQUFDLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQ0RMLElBQUksQ0FBQyxZQUFxQztVQUFBLElBQXBDTSxNQUEwQixHQUFBakgsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQWtILFNBQUEsR0FBQWxILFNBQUEsTUFBRyxDQUFDLENBQUM7VUFDcENtRyxNQUFJLENBQUM5QixXQUFXLENBQUM0QyxNQUFNLENBQUMvQyxRQUFRLENBQUM7UUFDbkMsQ0FBQyxDQUFDLFNBQ0ksQ0FBQyxVQUFBaUQsR0FBRyxFQUFJO1VBQ1pDLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDLDJDQUEyQyxFQUFFRixHQUFHLENBQUM7VUFDL0Q7VUFDQWhCLE1BQUksQ0FBQ2hDLFlBQVksR0FBRyxDQUFDLENBQUM7UUFDeEIsQ0FBQyxDQUFDO01BQ04sQ0FBQyxNQUFNO1FBQ0w7UUFDQSxJQUFJLENBQUNBLFlBQVksR0FBRyxDQUFDLENBQUM7TUFDeEI7SUFDRjtFQUFDO0lBQUFNLEdBQUE7SUFBQWtCLEtBQUEsRUFFRCxTQUFBdEIsV0FBV0EsQ0FBQSxFQUF1QjtNQUFBLElBQXRCSCxRQUFlLEdBQUFsRSxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBa0gsU0FBQSxHQUFBbEgsU0FBQSxNQUFHLEVBQUU7TUFDOUIsSUFBSSxDQUFDbUUsWUFBWSxHQUFHRCxRQUFRLENBQUNqQixNQUFNLENBQ2pDLFVBQUNxRSxJQUFJLEVBQUVDLElBQUk7UUFBQSxPQUFBeEgsYUFBQSxDQUFBQSxhQUFBLEtBQ051SCxJQUFJLFdBQUFuSCxnQkFBQSxpQkFDTm9ILElBQUksQ0FBQ2hDLEVBQUUsRUFBR3pDLG9CQUFvQixDQUFDeUUsSUFBSSxDQUFDO01BQUEsQ0FDckMsRUFDRixDQUFDLENBQ0gsQ0FBQztNQUVELElBQUksQ0FBQ3ZELGVBQWUsR0FBRyxJQUFBQyx5QkFBb0IsRUFBQ0MsUUFBUSxDQUFDO0lBQ3ZEO0VBQUM7SUFBQU8sR0FBQTtJQUFBa0IsS0FBQSxFQTBDRCxTQUFBNkIsb0JBQW9CQSxDQUFBLEVBQUc7TUFDckI7TUFDQSxJQUFJbEksTUFBTSxDQUFDQyxJQUFJLENBQUMsSUFBSSxDQUFDa0ksaUJBQWlCLENBQUMsQ0FBQ3hILE1BQU0sRUFBRTtRQUM5QyxPQUFPWCxNQUFNLENBQUNvSSxNQUFNLENBQUMsSUFBSSxDQUFDRCxpQkFBaUIsQ0FBQyxDQUFDeEUsTUFBTSxDQUNqRCxVQUFDMEUsS0FBSyxFQUFFSixJQUFJO1VBQUEsT0FBTUssTUFBTSxDQUFDQyxRQUFRLENBQUNOLElBQUksQ0FBQyxHQUFHSSxLQUFLLEdBQUdKLElBQUksR0FBR0ksS0FBSztRQUFBLENBQUMsRUFDL0QsQ0FDRixDQUFDO01BQ0g7TUFFQSxPQUFPLElBQUk7SUFDYjtFQUFDO0lBQUFsRCxHQUFBO0lBQUFrQixLQUFBLEVBRUQsU0FBQW1DLHNCQUFzQkEsQ0FBQUMsS0FBQSxFQUE4Q0MsV0FBVyxFQUFFO01BQUEsSUFBekRwRSxhQUFhLEdBQUFtRSxLQUFBLENBQWJuRSxhQUFhO1FBQUVxRSxhQUFhLEdBQUFGLEtBQUEsQ0FBYkUsYUFBYTtNQUNsRCxJQUFNQyxPQUFPLEdBQUcsSUFBSSxDQUFDbkUsZUFBZSxDQUFDSCxhQUFhLENBQUM7TUFDbkQsSUFBTXVFLElBQXFCLEdBQUcsRUFBRTtNQUVoQyxLQUFLLElBQUlDLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR0gsYUFBYSxDQUFDaEksTUFBTSxFQUFFbUksQ0FBQyxFQUFFLEVBQUU7UUFDN0MsSUFBTXBHLEtBQUssR0FBR2lHLGFBQWEsQ0FBQ0csQ0FBQyxDQUFDO1FBQzlCLElBQU1DLFFBQVEsR0FBRztVQUFDckcsS0FBSyxFQUFMQTtRQUFLLENBQUM7UUFDeEIsSUFBTXNHLEdBQUcsR0FBR04sV0FBVyxDQUFDSyxRQUFRLENBQUM7UUFDakMsSUFBTWpHLElBQUksR0FBRzhGLE9BQU8sQ0FBQ0csUUFBUSxDQUFDOztRQUU5QjtRQUNBO1FBQ0EsSUFBSUMsR0FBRyxDQUFDQyxLQUFLLENBQUNYLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDLElBQUksT0FBT3pGLElBQUksS0FBSyxRQUFRLEVBQUU7VUFDMUQrRixJQUFJLENBQUN0SSxJQUFJLENBQUM7WUFDUm1DLEtBQUssRUFBTEEsS0FBSztZQUNMSSxJQUFJLEVBQUpBO1VBQ0YsQ0FBQyxDQUFDO1FBQ0o7TUFDRjtNQUVBLE9BQU8rRixJQUFJO0lBQ2I7RUFBQztJQUFBMUQsR0FBQTtJQUFBa0IsS0FBQSxFQUVELFNBQUE2QyxlQUFlQSxDQUFDQyxRQUFRLEVBQUVDLFlBQVksRUFBRTtNQUN0QyxJQUFJLElBQUksQ0FBQzdFLE1BQU0sQ0FBQzhFLE1BQU0sS0FBSyxJQUFJLEVBQUU7UUFDL0IsT0FBTyxDQUFDLENBQUM7TUFDWDtNQUNBLElBQU9DLFNBQVMsR0FBSSxJQUFJLENBQUMvRSxNQUFNLENBQXhCK0UsU0FBUztNQUNoQixJQUFBQyxxQkFBQSxHQUFtQ0osUUFBUSxDQUFDLElBQUksQ0FBQzVFLE1BQU0sQ0FBQzhFLE1BQU0sQ0FBQztRQUF4REcsU0FBUyxHQUFBRCxxQkFBQSxDQUFUQyxTQUFTO1FBQUVsRixhQUFhLEdBQUFpRixxQkFBQSxDQUFiakYsYUFBYTtNQUUvQixJQUFNb0UsV0FBVyxHQUFHLElBQUksQ0FBQ3JFLG1CQUFtQixDQUFDQyxhQUFhLENBQUM7TUFFM0QsSUFBQW1GLGdCQUFBLEdBQStCLElBQUksQ0FBQ0MsVUFBVSxDQUFDUCxRQUFRLEVBQUVDLFlBQVksQ0FBQztRQUEvRFAsSUFBSSxHQUFBWSxnQkFBQSxDQUFKWixJQUFJO1FBQUVjLGNBQWMsR0FBQUYsZ0JBQUEsQ0FBZEUsY0FBYzs7TUFFM0I7TUFDQSxJQUFNQyxVQUFVLEdBQUcsSUFBQUMsbUNBQW1CLEVBQUM7UUFDckNQLFNBQVMsRUFBVEEsU0FBUztRQUNUSyxjQUFjLEVBQWRBLGNBQWM7UUFDZFAsWUFBWSxFQUFaQSxZQUFZO1FBQ1pQLElBQUksRUFBSkEsSUFBSTtRQUNKdkUsYUFBYSxFQUFiQTtNQUNGLENBQUMsQ0FBQztNQUVGLElBQU13RixTQUFTLEdBQUcsSUFBSSxDQUFDQyxxQkFBcUIsQ0FBQztRQUFDekYsYUFBYSxFQUFiQTtNQUFhLENBQUMsQ0FBQztNQUU3RCxPQUFBN0QsYUFBQTtRQUNFb0ksSUFBSSxFQUFKQSxJQUFJO1FBQ0pILFdBQVcsRUFBWEEsV0FBVztRQUNYc0IsY0FBYyxFQUFFUixTQUFTLENBQUNTLG1CQUFtQixDQUFDM0YsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUM5RHNGLFVBQVUsRUFBVkE7TUFBVSxHQUNQRSxTQUFTO0lBRWhCO0VBQUM7SUFBQTNFLEdBQUE7SUFBQWtCLEtBQUEsRUFFRCxTQUFBNkQsZUFBZUEsQ0FBQ0MsT0FBb0IsRUFBRXpCLFdBQVcsRUFBRTtNQUNqRCxJQUFPcEUsYUFBYSxHQUFJNkYsT0FBTyxDQUF4QjdGLGFBQWE7TUFDcEIsSUFBTThGLE1BQU0sR0FBRyxJQUFJLENBQUNDLGVBQWUsQ0FBQy9GLGFBQWEsRUFBRW9FLFdBQVcsQ0FBQztNQUMvRCxJQUFJLENBQUM0QixVQUFVLENBQUM7UUFBQ0YsTUFBTSxFQUFOQTtNQUFNLENBQUMsQ0FBQztJQUMzQjtFQUFDO0lBQUFqRixHQUFBO0lBQUFrQixLQUFBLEVBRUQsU0FBQWtFLFdBQVdBLENBQUNDLElBQUksRUFBRTtNQUFBLElBQUFDLHFCQUFBO1FBQUFDLE1BQUE7TUFDaEIsSUFBTzdCLElBQUksR0FBMkQyQixJQUFJLENBQW5FM0IsSUFBSTtRQUFFVyxTQUFTLEdBQWdEZ0IsSUFBSSxDQUE3RGhCLFNBQVM7UUFBRW1CLGFBQWEsR0FBaUNILElBQUksQ0FBbERHLGFBQWE7UUFBRUMsUUFBUSxHQUF1QkosSUFBSSxDQUFuQ0ksUUFBUTtRQUFFQyxpQkFBaUIsR0FBSUwsSUFBSSxDQUF6QkssaUJBQWlCO01BRWxFLElBQU1DLFdBQVcsR0FBRyxJQUFJLENBQUNDLG9CQUFvQixDQUFDSCxRQUFRLENBQUM7TUFFdkQsSUFBTUksVUFBVSxHQUFBdkssYUFBQTtRQUNkcUssV0FBVyxFQUFYQSxXQUFXO1FBQ1h2SCxTQUFTLEVBQUUsSUFBSSxDQUFDZ0IsTUFBTSxDQUFDMEcsU0FBUyxDQUFDMUg7TUFBUyxHQUN0QyxJQUFJLENBQUNnQixNQUFNLENBQUMwRyxTQUFTLENBQUM5SCxXQUFXLEdBQUcsQ0FBQyxDQUFDLEdBQUc7UUFBQytILGVBQWUsRUFBRTtNQUFHLENBQUMsQ0FDcEU7TUFFRCxJQUFNQyxjQUFjLEdBQUExSyxhQUFBO1FBQ2xCaUksV0FBVyxFQUFFLElBQUksQ0FBQ25FLE1BQU0sQ0FBQ0MsT0FBTztRQUNoQ3dGLGNBQWMsRUFBRVIsU0FBUyxDQUFDNEI7TUFBeUIsR0FDaEQsSUFBSSxDQUFDQyw4QkFBOEIsQ0FBQyxDQUFDLENBQ3pDO01BRUQsSUFBTUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDQyx3QkFBd0IsQ0FBQ2YsSUFBSSxDQUFDO01BQzdELElBQU1nQixhQUFhLEdBQUcsSUFBSSxDQUFDQyx5QkFBeUIsQ0FBQ1osaUJBQWlCLENBQUM7TUFDdkUsSUFBTWEsY0FBYyxHQUFHLElBQUFDLHFDQUFxQixFQUFDYixXQUFXLEVBQUVqQyxJQUFJLENBQUMrQyxTQUFTLEVBQUVoQixRQUFRLENBQUM7TUFDbkYsSUFBTWlCLFVBQVUsTUFBQXhHLE1BQUEsS0FBQXlHLG1CQUFBLGFBQU9SLGlCQUFpQixDQUFDTyxVQUFVLElBQUU5SixpQkFBaUIsRUFBQzs7TUFFdkU7TUFDQSxJQUFNZ0ssV0FBVyxHQUFBdEwsYUFBQTtRQUNmdUosY0FBYyxFQUFFbkIsSUFBSSxDQUFDbUIsY0FBYztRQUNuQzZCLFVBQVUsRUFBVkEsVUFBVTtRQUNWRyxXQUFXLEVBQUVWLGlCQUFpQixDQUFDVTtNQUFXLEdBQ3ZDUixhQUFhLENBQ2pCO01BRUQsSUFBTVMsV0FBVyxPQUFBSCxtQkFBQSxhQUNaLElBQUksQ0FBQ0ksb0JBQW9CLENBQzFCO1FBQ0V4RCxXQUFXLEVBQUVHLElBQUksQ0FBQ0gsV0FBVztRQUM3QnFELFdBQVcsRUFBWEEsV0FBVztRQUNYTCxjQUFjLEVBQWRBLGNBQWM7UUFDZFAsY0FBYyxFQUFkQTtNQUNGLENBQUMsRUFDRFgsSUFDRixDQUFDLENBQ0Y7TUFDRCxJQUFNMkIsYUFBYSxHQUFHLElBQUksQ0FBQ0MsZ0JBQWdCLENBQUN6QixhQUFhLENBQUM7TUFFMUQsSUFBTTBCLFVBQVUsR0FBRztRQUNqQjtRQUNBQyxTQUFTLEVBQUUsRUFBQTdCLHFCQUFBLE9BQUksQ0FBQ2xHLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDbEMsUUFBUSxjQUFBbUkscUJBQUEsdUJBQTVCQSxxQkFBQSxDQUE4QjlILFFBQVEsSUFBRyxDQUFDLENBQUM7UUFDdEQ0SixRQUFRLEVBQUVDLHFCQUFFLENBQUNDO01BQ2YsQ0FBQztNQUVELFFBQ0UsSUFBSUMsMEJBQVksQ0FBQWpNLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxLQUNYNkssaUJBQWlCLEdBQ2pCRSxhQUFhLEdBQ2JSLFVBQVUsR0FDVm5DLElBQUk7UUFDUHdELFVBQVUsRUFBVkEsVUFBVTtRQUNWTSxlQUFlLEVBQUUsU0FBakJBLGVBQWVBLENBQUUxRyxFQUFFO1VBQUEsSUFBQTJHLG1CQUFBO1VBQUEsUUFBQUEsbUJBQUEsR0FBSWxDLE1BQUksQ0FBQzdGLFlBQVksY0FBQStILG1CQUFBLHVCQUFqQkEsbUJBQUEsQ0FBb0IzRyxFQUFFLENBQUM7UUFBQTtRQUU5QztRQUNBa0YsY0FBYyxFQUFkQSxjQUFjO1FBQ2RVLFVBQVUsRUFBVkE7TUFBVSxFQUNYLENBQUMsRUFBQXhHLE1BQUEsS0FBQXlHLG1CQUFBLGFBR0VLLGFBQWEsR0FDYjtNQUNFO01BQ0EsSUFBSU8sMEJBQVksQ0FBQWpNLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBLEtBQ1gsSUFBSSxDQUFDb00seUJBQXlCLENBQUMsQ0FBQyxHQUNoQzdCLFVBQVU7UUFDYjhCLE9BQU8sRUFBRXhCLGlCQUFpQixDQUFDd0IsT0FBTztRQUNsQ2pFLElBQUksRUFBRSxDQUFDc0QsYUFBYSxDQUFDO1FBQ3JCRSxVQUFVLEVBQVZBLFVBQVU7UUFDVjNELFdBQVcsRUFBRUcsSUFBSSxDQUFDSCxXQUFXO1FBQzdCa0QsU0FBUyxFQUFFL0MsSUFBSSxDQUFDK0MsU0FBUztRQUN6Qm1CLFlBQVksRUFBRSxJQUFJLENBQUN4SSxNQUFNLENBQUN5SSxjQUFjO1FBQ3hDTCxlQUFlLEVBQUUsU0FBakJBLGVBQWVBLENBQUUxRyxFQUFFO1VBQUEsSUFBQWdILG9CQUFBO1VBQUEsUUFBQUEsb0JBQUEsR0FBSXZDLE1BQUksQ0FBQzdGLFlBQVksY0FBQW9JLG9CQUFBLHVCQUFqQkEsb0JBQUEsQ0FBb0JoSCxFQUFFLENBQUM7UUFBQTtNQUFBLEVBQy9DLENBQUMsQ0FDSCxHQUNELEVBQUUsT0FBQTZGLG1CQUFBLGFBR0hHLFdBQVc7SUFFbEI7RUFBQztJQUFBOUcsR0FBQTtJQUFBa0IsS0FBQSxFQXBNRCxTQUFPNkcscUJBQXFCQSxDQUFBQyxLQUFBLEVBR3NCO01BQUEsSUFBQUMsZ0JBQUEsR0FBQUQsS0FBQSxDQUZoREUsVUFBVTtRQUFWQSxVQUFVLEdBQUFELGdCQUFBLGNBQUcsRUFBRSxHQUFBQSxnQkFBQTtRQUFBRSxZQUFBLEdBQUFILEtBQUEsQ0FDZkksTUFBTTtRQUFOQSxNQUFNLEdBQUFELFlBQUEsY0FBRyxFQUFFLEdBQUFBLFlBQUE7TUFFWCxJQUFNRSxRQUEwQyxHQUFHO1FBQUN2SixLQUFLLEVBQUU7TUFBRSxDQUFDO01BQzlELElBQUksQ0FBQ29KLFVBQVUsQ0FBQzFNLE1BQU0sSUFBSSxDQUFDNE0sTUFBTSxDQUFDNU0sTUFBTSxFQUFFO1FBQ3hDLE9BQU82TSxRQUFRO01BQ2pCO01BRUEsSUFBTUMsVUFBVSxHQUFHRixNQUFNLENBQUNuTixNQUFNLENBQUMsVUFBQXNOLEtBQUE7UUFBQSxJQUFFQyxJQUFJLEdBQUFELEtBQUEsQ0FBSkMsSUFBSTtRQUFBLE9BQ3JDQSxJQUFJLENBQ0RDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQ3ZCQyxJQUFJLENBQUMsQ0FBQyxDQUNOQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQ1ZDLElBQUksQ0FBQyxVQUFBQyxHQUFHO1VBQUEsT0FBSUMsdUJBQVcsQ0FBQ25MLElBQUksQ0FBQ2lMLElBQUksQ0FBQyxVQUFBaE8sQ0FBQztZQUFBLE9BQUlBLENBQUMsQ0FBQ21PLFFBQVEsQ0FBQ0YsR0FBRyxDQUFDO1VBQUEsRUFBQztRQUFBLEVBQUM7TUFBQSxDQUM3RCxDQUFDO01BRUQsSUFBSSxDQUFDUCxVQUFVLENBQUM5TSxNQUFNLEVBQUU7UUFDdEIsT0FBTzZNLFFBQVE7TUFDakI7O01BRUE7TUFDQSxJQUFNVyxNQUFNLEdBQUdkLFVBQVUsQ0FBQyxDQUFDLENBQUM7TUFDNUIsSUFBTTdJLE9BQU8sR0FBRyxJQUFBNEosd0NBQTRCLEVBQUNELE1BQU0sRUFBRSxJQUFJLENBQUM7TUFFMUQsSUFBTWxLLEtBQUssR0FBR3dKLFVBQVUsQ0FBQ1ksR0FBRyxDQUFDLFVBQUFDLFNBQVM7UUFBQSxPQUFLO1VBQ3pDQyxLQUFLLEVBQUVELFNBQVMsQ0FBQ1gsSUFBSSxDQUFDQyxPQUFPLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDQyxJQUFJLENBQUMsQ0FBQztVQUNwRHJKLE9BQU8sRUFBQS9ELGFBQUEsQ0FBQUEsYUFBQSxLQUNGK0QsT0FBTztZQUNWMUIsSUFBSSxFQUFFO2NBQ0p1RCxLQUFLLEVBQUVpSSxTQUFTLENBQUNYLElBQUk7Y0FDckJoTCxRQUFRLEVBQUUyTCxTQUFTLENBQUMzTDtZQUN0QjtVQUFDLEVBQ0Y7VUFDRDZMLFNBQVMsRUFBRTtRQUNiLENBQUM7TUFBQSxDQUFDLENBQUM7TUFFSCxPQUFPO1FBQUN2SyxLQUFLLEVBQUxBO01BQUssQ0FBQztJQUNoQjtFQUFDO0FBQUEsRUE1S29Dd0sscUJBQUsiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
423
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfd2luZG93IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZXh0ZW5zaW9ucyIsIl9jb25zdGFudHMiLCJfZGVja2dsTGF5ZXJzIiwiX2ljb25MYXllckljb24iLCJfY29uc3RhbnRzMiIsIl9pY29uSW5mb01vZGFsIiwiX2Jhc2VMYXllciIsIl9sYXllclV0aWxzIiwiX3V0aWxzIiwiX2xheWVyVGV4dExhYmVsIiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJfY2FsbFN1cGVyIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiY29uc3RydWN0b3IiLCJCb29sZWFuIiwicHJvdG90eXBlIiwidmFsdWVPZiIsImNhbGwiLCJfc3VwZXJQcm9wR2V0IiwicCIsIl9nZXQyIiwiYnJ1c2hpbmdFeHRlbnNpb24iLCJCcnVzaGluZ0V4dGVuc2lvbiIsImljb25Qb3NBY2Nlc3NvciIsImV4cG9ydHMiLCJfcmVmIiwibGF0IiwibG5nIiwiYWx0aXR1ZGUiLCJkYyIsImQiLCJ2YWx1ZUF0IiwiaW5kZXgiLCJmaWVsZElkeCIsImljb25BY2Nlc3NvciIsIl9yZWYyIiwiaWNvbiIsImljb25SZXF1aXJlZENvbHVtbnMiLCJpY29uT3B0aW9uYWxDb2x1bW5zIiwicG9pbnRWaXNDb25maWdzIiwicmFkaXVzIiwiZml4ZWRSYWRpdXMiLCJvcGFjaXR5IiwiY29sb3JSYW5nZSIsInJhZGl1c1JhbmdlIiwiYmlsbGJvYXJkIiwiZmxhdHRlckljb25Qb3NpdGlvbnMiLCJtZXNoIiwiY2VsbHMiLCJyZWR1Y2UiLCJwcmV2IiwiY2VsbCIsInBvc2l0aW9ucyIsIkljb25MYXllciIsIl9MYXllciIsInByb3BzIiwiX3RoaXMiLCJfY2xhc3NDYWxsQ2hlY2syIiwicmVnaXN0ZXJWaXNDb25maWciLCJnZXRQb3NpdGlvbkFjY2Vzc29yIiwiZGF0YUNvbnRhaW5lciIsImNvbmZpZyIsImNvbHVtbnMiLCJnZXRJY29uQWNjZXNzb3IiLCJfbGF5ZXJJbmZvTW9kYWwiLCJJY29uSW5mb01vZGFsRmFjdG9yeSIsInN2Z0ljb25zIiwiaWNvbkdlb21ldHJ5IiwiaWNvbkdlb21ldHJ5VmVyc2lvbiIsImlzVGVzdCIsInNldFN2Z0ljb25zIiwiZ2V0U3ZnSWNvbnMiLCJfaW5oZXJpdHMyIiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsImdldCIsImNvbmNhdCIsImdldEFwcGxpY2F0aW9uQ29uZmlnIiwiY2RuVXJsIiwiZGVmYXVsdFBvaW50Q29sdW1uUGFpcnMiLCJJY29uTGF5ZXJJY29uIiwiY29sb3IiLCJhY2Nlc3NvciIsImRlZmF1bHRWYWx1ZSIsInNpemUiLCJwcm9wZXJ0eSIsInJhbmdlIiwiY2hhbm5lbFNjYWxlVHlwZSIsImlkIiwidGVtcGxhdGUiLCJtb2RhbFByb3BzIiwidGl0bGUiLCJ2YWx1ZSIsImdldFpvb21GYWN0b3IiLCJfcmVmMyIsInpvb20iLCJfcmVmMyR6b29tT2Zmc2V0Iiwiem9vbU9mZnNldCIsIk1hdGgiLCJwb3ciLCJfdGhpczIiLCJmZXRjaENvbmZpZyIsIm1ldGhvZCIsIm1vZGUiLCJjYWNoZSIsIldpbmRvdyIsImZldGNoIiwic3ZnSWNvblVybCIsInRoZW4iLCJyZXNwb25zZSIsIm9rIiwiRXJyb3IiLCJzdGF0dXMiLCJqc29uIiwicGFyc2VkIiwidW5kZWZpbmVkIiwiZXJyIiwiY29uc29sZSIsImVycm9yIiwiX3RoaXMkb25SZWRyYXdOZWVkZWQiLCJhY2N1IiwiY3VyciIsIm9uUmVkcmF3TmVlZGVkIiwiZ2V0RmlsdGVyZWRJdGVtQ291bnQiLCJmaWx0ZXJlZEl0ZW1Db3VudCIsInZhbHVlcyIsInRvdGFsIiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJjYWxjdWxhdGVEYXRhQXR0cmlidXRlIiwiX3JlZjQiLCJnZXRQb3NpdGlvbiIsImZpbHRlcmVkSW5kZXgiLCJnZXRJY29uIiwiZGF0YSIsImkiLCJyb3dJbmRleCIsInBvcyIsImV2ZXJ5IiwiZm9ybWF0TGF5ZXJEYXRhIiwiZGF0YXNldHMiLCJvbGRMYXllckRhdGEiLCJkYXRhSWQiLCJ0ZXh0TGFiZWwiLCJfZGF0YXNldHMkdGhpcyRjb25maWciLCJncHVGaWx0ZXIiLCJfdGhpcyR1cGRhdGVEYXRhIiwidXBkYXRlRGF0YSIsInRyaWdnZXJDaGFuZ2VkIiwidGV4dExhYmVscyIsImZvcm1hdFRleHRMYWJlbERhdGEiLCJhY2Nlc3NvcnMiLCJnZXRBdHRyaWJ1dGVBY2Nlc3NvcnMiLCJnZXRGaWx0ZXJWYWx1ZSIsImZpbHRlclZhbHVlQWNjZXNzb3IiLCJ1cGRhdGVMYXllck1ldGEiLCJkYXRhc2V0IiwiYm91bmRzIiwiZ2V0UG9pbnRzQm91bmRzIiwidXBkYXRlTWV0YSIsInJlbmRlckxheWVyIiwib3B0cyIsIl90aGlzJGNvbmZpZyRjb2x1bW5zJCIsIl90aGlzMyIsIm9iamVjdEhvdmVyZWQiLCJtYXBTdGF0ZSIsImludGVyYWN0aW9uQ29uZmlnIiwibGF5ZXJDYWxsYmFja3MiLCJyYWRpdXNTY2FsZSIsImdldFJhZGl1c1NjYWxlQnlab29tIiwibGF5ZXJQcm9wcyIsInZpc0NvbmZpZyIsInJhZGl1c01heFBpeGVscyIsInVwZGF0ZVRyaWdnZXJzIiwiZmlsdGVyVmFsdWVVcGRhdGVUcmlnZ2VycyIsImdldFZpc3VhbENoYW5uZWxVcGRhdGVUcmlnZ2VycyIsImRlZmF1bHRMYXllclByb3BzIiwiZ2V0RGVmYXVsdERlY2tMYXllclByb3BzIiwiYnJ1c2hpbmdQcm9wcyIsImdldEJydXNoaW5nRXh0ZW5zaW9uUHJvcHMiLCJnZXRQaXhlbE9mZnNldCIsImdldFRleHRPZmZzZXRCeVJhZGl1cyIsImdldFJhZGl1cyIsImV4dGVuc2lvbnMiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwic2hhcmVkUHJvcHMiLCJmaWx0ZXJSYW5nZSIsImxhYmVsTGF5ZXJzIiwicmVuZGVyVGV4dExhYmVsTGF5ZXIiLCJob3ZlcmVkT2JqZWN0IiwiaGFzSG92ZXJlZE9iamVjdCIsInBhcmFtZXRlcnMiLCJkZXB0aFRlc3QiLCJjdWxsRmFjZSIsIkdMIiwiRlJPTlQiLCJiYXNlTGF5ZXJJZCIsImxheWVySWRXaXRoVmVyc2lvbiIsIlN2Z0ljb25MYXllciIsImdldEljb25HZW9tZXRyeSIsIl90aGlzMyRpY29uR2VvbWV0cnkiLCJnZXREZWZhdWx0SG92ZXJMYXllclByb3BzIiwidmlzaWJsZSIsImdldEZpbGxDb2xvciIsImhpZ2hsaWdodENvbG9yIiwiX3RoaXMzJGljb25HZW9tZXRyeTIiLCJmaW5kRGVmYXVsdExheWVyUHJvcHMiLCJfcmVmNSIsIl9yZWY1JGZpZWxkUGFpcnMiLCJmaWVsZFBhaXJzIiwiX3JlZjUkZmllbGRzIiwiZmllbGRzIiwibm90Rm91bmQiLCJpY29uRmllbGRzIiwiX3JlZjYiLCJuYW1lIiwicmVwbGFjZSIsInRyaW0iLCJzcGxpdCIsInNvbWUiLCJzZWciLCJJQ09OX0ZJRUxEUyIsImluY2x1ZGVzIiwicHRQYWlyIiwiYXNzaWduUG9pbnRQYWlyVG9MYXllckNvbHVtbiIsIm1hcCIsImljb25GaWVsZCIsImxhYmVsIiwiaXNWaXNpYmxlIiwiTGF5ZXIiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvaWNvbi1sYXllci9pY29uLWxheWVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBXaW5kb3cgZnJvbSAnZ2xvYmFsL3dpbmRvdyc7XG5pbXBvcnQge0JydXNoaW5nRXh0ZW5zaW9ufSBmcm9tICdAZGVjay5nbC9leHRlbnNpb25zJztcbmltcG9ydCBHTCBmcm9tICdAbHVtYS5nbC9jb25zdGFudHMnO1xuXG5pbXBvcnQge1N2Z0ljb25MYXllcn0gZnJvbSAnQGtlcGxlci5nbC9kZWNrZ2wtbGF5ZXJzJztcbmltcG9ydCBJY29uTGF5ZXJJY29uIGZyb20gJy4vaWNvbi1sYXllci1pY29uJztcbmltcG9ydCB7SUNPTl9GSUVMRFN9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCBJY29uSW5mb01vZGFsRmFjdG9yeSBmcm9tICcuL2ljb24taW5mby1tb2RhbCc7XG5pbXBvcnQgTGF5ZXIsIHtMYXllckJhc2VDb25maWcsIExheWVyQmFzZUNvbmZpZ1BhcnRpYWx9IGZyb20gJy4uL2Jhc2UtbGF5ZXInO1xuaW1wb3J0IHthc3NpZ25Qb2ludFBhaXJUb0xheWVyQ29sdW1uLCBGaW5kRGVmYXVsdExheWVyUHJvcHNSZXR1cm5WYWx1ZX0gZnJvbSAnLi4vbGF5ZXItdXRpbHMnO1xuaW1wb3J0IHtpc1Rlc3R9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtnZXRUZXh0T2Zmc2V0QnlSYWRpdXMsIGZvcm1hdFRleHRMYWJlbERhdGF9IGZyb20gJy4uL2xheWVyLXRleHQtbGFiZWwnO1xuaW1wb3J0IHtkZWZhdWx0IGFzIEtlcGxlclRhYmxlfSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCB7Z2V0QXBwbGljYXRpb25Db25maWcsIERhdGFDb250YWluZXJJbnRlcmZhY2V9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtcbiAgQ29sb3JSYW5nZSxcbiAgVmlzQ29uZmlnQm9vbGVhbixcbiAgVmlzQ29uZmlnQ29sb3JSYW5nZSxcbiAgVmlzQ29uZmlnTnVtYmVyLFxuICBWaXNDb25maWdSYW5nZSxcbiAgTWVyZ2UsXG4gIExheWVyQ29sdW1uLFxuICBCaW5kZWRMYXllckNhbGxiYWNrc1xufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgSWNvbkxheWVyQ29sdW1uc0NvbmZpZyA9IHtcbiAgbGF0OiBMYXllckNvbHVtbjtcbiAgbG5nOiBMYXllckNvbHVtbjtcbiAgYWx0aXR1ZGU6IExheWVyQ29sdW1uO1xuICBpY29uOiBMYXllckNvbHVtbjtcbn07XG5cbnR5cGUgSWNvbkdlb21ldHJ5ID0gb2JqZWN0IHwgbnVsbDtcblxuZXhwb3J0IHR5cGUgSWNvbkxheWVyVmlzQ29uZmlnU2V0dGluZ3MgPSB7XG4gIHJhZGl1czogVmlzQ29uZmlnTnVtYmVyO1xuICBmaXhlZFJhZGl1czogVmlzQ29uZmlnQm9vbGVhbjtcbiAgb3BhY2l0eTogVmlzQ29uZmlnTnVtYmVyO1xuICBjb2xvclJhbmdlOiBWaXNDb25maWdDb2xvclJhbmdlO1xuICByYWRpdXNSYW5nZTogVmlzQ29uZmlnUmFuZ2U7XG59O1xuXG5leHBvcnQgdHlwZSBJY29uTGF5ZXJWaXNDb25maWcgPSB7XG4gIHJhZGl1czogbnVtYmVyO1xuICBmaXhlZFJhZGl1czogYm9vbGVhbjtcbiAgb3BhY2l0eTogbnVtYmVyO1xuICBjb2xvclJhbmdlOiBDb2xvclJhbmdlO1xuICByYWRpdXNSYW5nZTogW251bWJlciwgbnVtYmVyXTtcbiAgYmlsbGJvYXJkOiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgSWNvbkxheWVyQ29uZmlnID0gTWVyZ2U8XG4gIExheWVyQmFzZUNvbmZpZyxcbiAge2NvbHVtbnM6IEljb25MYXllckNvbHVtbnNDb25maWc7IHZpc0NvbmZpZzogSWNvbkxheWVyVmlzQ29uZmlnfVxuPjtcblxuZXhwb3J0IHR5cGUgSWNvbkxheWVyRGF0YSA9IHtpbmRleDogbnVtYmVyOyBpY29uOiBzdHJpbmd9O1xuXG5jb25zdCBicnVzaGluZ0V4dGVuc2lvbiA9IG5ldyBCcnVzaGluZ0V4dGVuc2lvbigpO1xuXG5leHBvcnQgY29uc3QgaWNvblBvc0FjY2Vzc29yID1cbiAgKHtsYXQsIGxuZywgYWx0aXR1ZGV9OiBJY29uTGF5ZXJDb2x1bW5zQ29uZmlnKSA9PlxuICAoZGM6IERhdGFDb250YWluZXJJbnRlcmZhY2UpID0+XG4gIGQgPT5cbiAgICBbXG4gICAgICBkYy52YWx1ZUF0KGQuaW5kZXgsIGxuZy5maWVsZElkeCksXG4gICAgICBkYy52YWx1ZUF0KGQuaW5kZXgsIGxhdC5maWVsZElkeCksXG4gICAgICBhbHRpdHVkZT8uZmllbGRJZHggPiAtMSA/IGRjLnZhbHVlQXQoZC5pbmRleCwgYWx0aXR1ZGUuZmllbGRJZHgpIDogMFxuICAgIF07XG5cbmV4cG9ydCBjb25zdCBpY29uQWNjZXNzb3IgPVxuICAoe2ljb259OiBJY29uTGF5ZXJDb2x1bW5zQ29uZmlnKSA9PlxuICAoZGM6IERhdGFDb250YWluZXJJbnRlcmZhY2UpID0+XG4gIGQgPT5cbiAgICBkYy52YWx1ZUF0KGQuaW5kZXgsIGljb24uZmllbGRJZHgpO1xuXG5leHBvcnQgY29uc3QgaWNvblJlcXVpcmVkQ29sdW1uczogWydsYXQnLCAnbG5nJywgJ2ljb24nXSA9IFsnbGF0JywgJ2xuZycsICdpY29uJ107XG5leHBvcnQgY29uc3QgaWNvbk9wdGlvbmFsQ29sdW1uczogWydhbHRpdHVkZSddID0gWydhbHRpdHVkZSddO1xuXG5leHBvcnQgY29uc3QgcG9pbnRWaXNDb25maWdzOiB7XG4gIHJhZGl1czogJ3JhZGl1cyc7XG4gIGZpeGVkUmFkaXVzOiAnZml4ZWRSYWRpdXMnO1xuICBvcGFjaXR5OiAnb3BhY2l0eSc7XG4gIGNvbG9yUmFuZ2U6ICdjb2xvclJhbmdlJztcbiAgcmFkaXVzUmFuZ2U6ICdyYWRpdXNSYW5nZSc7XG4gIGJpbGxib2FyZDogJ2JpbGxib2FyZCc7XG59ID0ge1xuICByYWRpdXM6ICdyYWRpdXMnLFxuICBmaXhlZFJhZGl1czogJ2ZpeGVkUmFkaXVzJyxcbiAgb3BhY2l0eTogJ29wYWNpdHknLFxuICBjb2xvclJhbmdlOiAnY29sb3JSYW5nZScsXG4gIHJhZGl1c1JhbmdlOiAncmFkaXVzUmFuZ2UnLFxuICBiaWxsYm9hcmQ6ICdiaWxsYm9hcmQnXG59O1xuXG5mdW5jdGlvbiBmbGF0dGVySWNvblBvc2l0aW9ucyhpY29uKSB7XG4gIC8vIGhhZCB0byBmbGlwIHksIHNpbmNlIEBsdW1hIG1vZGFsIGhhcyBjaGFuZ2VkXG4gIHJldHVybiBpY29uLm1lc2guY2VsbHMucmVkdWNlKChwcmV2LCBjZWxsKSA9PiB7XG4gICAgY2VsbC5mb3JFYWNoKHAgPT4ge1xuICAgICAgcHJldi5wdXNoKFxuICAgICAgICAuLi5baWNvbi5tZXNoLnBvc2l0aW9uc1twXVswXSwgLWljb24ubWVzaC5wb3NpdGlvbnNbcF1bMV0sIGljb24ubWVzaC5wb3NpdGlvbnNbcF1bMl1dXG4gICAgICApO1xuICAgIH0pO1xuICAgIHJldHVybiBwcmV2O1xuICB9LCBbXSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEljb25MYXllciBleHRlbmRzIExheWVyIHtcbiAgZ2V0SWNvbkFjY2Vzc29yOiAoZGF0YUNvbnRhaW5lcjogRGF0YUNvbnRhaW5lckludGVyZmFjZSkgPT4gKGQ6IGFueSkgPT4gYW55O1xuICBfbGF5ZXJJbmZvTW9kYWw6ICgpID0+IEpTWC5FbGVtZW50O1xuICBpY29uR2VvbWV0cnk6IEljb25HZW9tZXRyeTtcbiAgaWNvbkdlb21ldHJ5VmVyc2lvbjogbnVtYmVyO1xuXG4gIG9uUmVkcmF3TmVlZGVkOiBCaW5kZWRMYXllckNhbGxiYWNrc1snb25SZWRyYXdOZWVkZWQnXTtcblxuICBkZWNsYXJlIHZpc0NvbmZpZ1NldHRpbmdzOiBJY29uTGF5ZXJWaXNDb25maWdTZXR0aW5ncztcbiAgZGVjbGFyZSBjb25maWc6IEljb25MYXllckNvbmZpZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm9wczoge1xuICAgICAgaWQ/OiBzdHJpbmc7XG4gICAgICBpY29uR2VvbWV0cnk/OiBJY29uR2VvbWV0cnk7XG4gICAgICBzdmdJY29ucz86IGFueVtdO1xuICAgIH0gJiBMYXllckJhc2VDb25maWdQYXJ0aWFsXG4gICkge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIHRoaXMucmVnaXN0ZXJWaXNDb25maWcocG9pbnRWaXNDb25maWdzKTtcbiAgICB0aGlzLmdldFBvc2l0aW9uQWNjZXNzb3IgPSAoZGF0YUNvbnRhaW5lcjogRGF0YUNvbnRhaW5lckludGVyZmFjZSkgPT5cbiAgICAgIGljb25Qb3NBY2Nlc3Nvcih0aGlzLmNvbmZpZy5jb2x1bW5zKShkYXRhQ29udGFpbmVyKTtcbiAgICB0aGlzLmdldEljb25BY2Nlc3NvciA9IGRhdGFDb250YWluZXIgPT4gaWNvbkFjY2Vzc29yKHRoaXMuY29uZmlnLmNvbHVtbnMpKGRhdGFDb250YWluZXIpO1xuXG4gICAgdGhpcy5fbGF5ZXJJbmZvTW9kYWwgPSBJY29uSW5mb01vZGFsRmFjdG9yeShwcm9wcy5zdmdJY29ucyk7XG4gICAgdGhpcy5pY29uR2VvbWV0cnkgPSBwcm9wcy5pY29uR2VvbWV0cnkgfHwgbnVsbDtcbiAgICB0aGlzLmljb25HZW9tZXRyeVZlcnNpb24gPSAwO1xuXG4gICAgaWYgKGlzVGVzdCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChwcm9wcy5zdmdJY29ucykge1xuICAgICAgLy8gaWYgc3ZnIGljb25zIGFyZSBwYXNzZWQgaW4gdGhlbiBieXBhc3MgZmV0Y2hpbmcgb2YgcmVtb3RlIHN2ZyBpY29uc1xuICAgICAgdGhpcy5zZXRTdmdJY29ucyhwcm9wcy5zdmdJY29ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHByZXBhcmUgbGF5ZXIgaW5mbyBtb2RhbCBhbmQgZmV0Y2ggcmVtb3RlIHN2ZyBpY29uc1xuICAgICAgdGhpcy5nZXRTdmdJY29ucygpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBzdmdJY29uVXJsKCkge1xuICAgIHJldHVybiBgJHtnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmNkblVybH0vaWNvbnMvc3ZnLWljb25zLmpzb25gO1xuICB9XG5cbiAgZ2V0IHR5cGUoKTogJ2ljb24nIHtcbiAgICByZXR1cm4gJ2ljb24nO1xuICB9XG5cbiAgZ2V0IHJlcXVpcmVkTGF5ZXJDb2x1bW5zKCkge1xuICAgIHJldHVybiBpY29uUmVxdWlyZWRDb2x1bW5zO1xuICB9XG5cbiAgZ2V0IG9wdGlvbmFsQ29sdW1ucygpIHtcbiAgICByZXR1cm4gaWNvbk9wdGlvbmFsQ29sdW1ucztcbiAgfVxuXG4gIGdldCBjb2x1bW5QYWlycygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9pbnRDb2x1bW5QYWlycztcbiAgfVxuXG4gIGdldCBsYXllckljb24oKSB7XG4gICAgcmV0dXJuIEljb25MYXllckljb247XG4gIH1cblxuICBnZXQgdmlzdWFsQ2hhbm5lbHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbG9yOiB7XG4gICAgICAgIC4uLnN1cGVyLnZpc3VhbENoYW5uZWxzLmNvbG9yLFxuICAgICAgICBhY2Nlc3NvcjogJ2dldEZpbGxDb2xvcicsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogY29uZmlnID0+IGNvbmZpZy5jb2xvclxuICAgICAgfSxcbiAgICAgIHNpemU6IHtcbiAgICAgICAgLi4uc3VwZXIudmlzdWFsQ2hhbm5lbHMuc2l6ZSxcbiAgICAgICAgcHJvcGVydHk6ICdyYWRpdXMnLFxuICAgICAgICByYW5nZTogJ3JhZGl1c1JhbmdlJyxcbiAgICAgICAgY2hhbm5lbFNjYWxlVHlwZTogJ3JhZGl1cycsXG4gICAgICAgIGFjY2Vzc29yOiAnZ2V0UmFkaXVzJyxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiAxXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGdldCBsYXllckluZm9Nb2RhbCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6ICdpY29uSW5mbycsXG4gICAgICB0ZW1wbGF0ZTogdGhpcy5fbGF5ZXJJbmZvTW9kYWwsXG4gICAgICBtb2RhbFByb3BzOiB7XG4gICAgICAgIHRpdGxlOiAnbW9kYWwuaWNvbkluZm8udGl0bGUnXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGdldFpvb21GYWN0b3Ioe3pvb20sIHpvb21PZmZzZXQgPSAwfToge3pvb206IG51bWJlcjsgem9vbU9mZnNldD86IG51bWJlcn0pIHtcbiAgICByZXR1cm4gTWF0aC5wb3coMiwgMTQgLSB6b29tICsgem9vbU9mZnNldCk7XG4gIH1cblxuICBnZXRTdmdJY29ucygpIHtcbiAgICBjb25zdCBmZXRjaENvbmZpZyA9IHtcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICBtb2RlOiAnY29ycycsXG4gICAgICBjYWNoZTogJ25vLWNhY2hlJ1xuICAgIH07XG5cbiAgICBpZiAoV2luZG93LmZldGNoICYmIHRoaXMuc3ZnSWNvblVybCkge1xuICAgICAgV2luZG93LmZldGNoKHRoaXMuc3ZnSWNvblVybCwgZmV0Y2hDb25maWcpXG4gICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkIHN2Zy1pY29ucy5qc29uOiAke3Jlc3BvbnNlLnN0YXR1c31gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKHBhcnNlZDoge3N2Z0ljb25zPzogYW55W119ID0ge30pID0+IHtcbiAgICAgICAgICB0aGlzLnNldFN2Z0ljb25zKHBhcnNlZC5zdmdJY29ucyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIG9yIHBhcnNpbmcgc3ZnLWljb25zLmpzb246JywgZXJyKTtcbiAgICAgICAgICAvLyBGYWxsYmFjayB0byBlbXB0eSBnZW9tZXRyeSB0byBhbGxvdyBkZWZhdWx0IGljb24gcmVuZGVyaW5nXG4gICAgICAgICAgdGhpcy5pY29uR2VvbWV0cnkgPSB7fTtcbiAgICAgICAgICB0aGlzLmljb25HZW9tZXRyeVZlcnNpb24gKz0gMTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGZldGNoIGF2YWlsYWJsZTsgc2V0IGVtcHR5IGdlb21ldHJ5IHNvIGxheWVyIGNhbiByZW5kZXIgZGVmYXVsdCBpY29uc1xuICAgICAgdGhpcy5pY29uR2VvbWV0cnkgPSB7fTtcbiAgICAgIHRoaXMuaWNvbkdlb21ldHJ5VmVyc2lvbiArPSAxO1xuICAgIH1cbiAgfVxuXG4gIHNldFN2Z0ljb25zKHN2Z0ljb25zOiBhbnlbXSA9IFtdKSB7XG4gICAgdGhpcy5pY29uR2VvbWV0cnkgPSBzdmdJY29ucy5yZWR1Y2UoXG4gICAgICAoYWNjdSwgY3VycikgPT4gKHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgW2N1cnIuaWRdOiBmbGF0dGVySWNvblBvc2l0aW9ucyhjdXJyKVxuICAgICAgfSksXG4gICAgICB7fVxuICAgICk7XG5cbiAgICAvLyBJbmNyZW1lbnQgdmVyc2lvbiB3aGVuIFNWRyBpY29ucyBhcmUgbG9hZGVkIHRvIHRyaWdnZXIgbGF5ZXIgcmUtcmVuZGVyXG4gICAgdGhpcy5pY29uR2VvbWV0cnlWZXJzaW9uICs9IDE7XG5cbiAgICB0aGlzLl9sYXllckluZm9Nb2RhbCA9IEljb25JbmZvTW9kYWxGYWN0b3J5KHN2Z0ljb25zKTtcblxuICAgIC8vIFRyaWdnZXIgYSBtYXAgcmVkcmF3IHNvIGRlY2suZ2wgcGlja3MgdXAgdGhlIG5ldyBnZW9tZXRyeVxuICAgIHRoaXMub25SZWRyYXdOZWVkZWQ/LigpO1xuICB9XG5cbiAgc3RhdGljIGZpbmREZWZhdWx0TGF5ZXJQcm9wcyh7XG4gICAgZmllbGRQYWlycyA9IFtdLFxuICAgIGZpZWxkcyA9IFtdXG4gIH06IEtlcGxlclRhYmxlKTogRmluZERlZmF1bHRMYXllclByb3BzUmV0dXJuVmFsdWUge1xuICAgIGNvbnN0IG5vdEZvdW5kOiBGaW5kRGVmYXVsdExheWVyUHJvcHNSZXR1cm5WYWx1ZSA9IHtwcm9wczogW119O1xuICAgIGlmICghZmllbGRQYWlycy5sZW5ndGggfHwgIWZpZWxkcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBub3RGb3VuZDtcbiAgICB9XG5cbiAgICBjb25zdCBpY29uRmllbGRzID0gZmllbGRzLmZpbHRlcigoe25hbWV9KSA9PlxuICAgICAgbmFtZVxuICAgICAgICAucmVwbGFjZSgvW18sLl0rL2csICcgJylcbiAgICAgICAgLnRyaW0oKVxuICAgICAgICAuc3BsaXQoJyAnKVxuICAgICAgICAuc29tZShzZWcgPT4gSUNPTl9GSUVMRFMuaWNvbi5zb21lKHQgPT4gdC5pbmNsdWRlcyhzZWcpKSlcbiAgICApO1xuXG4gICAgaWYgKCFpY29uRmllbGRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG5vdEZvdW5kO1xuICAgIH1cblxuICAgIC8vIGNyZWF0ZSBpY29uIGxheWVycyBmb3IgZmlyc3QgcG9pbnQgcGFpclxuICAgIGNvbnN0IHB0UGFpciA9IGZpZWxkUGFpcnNbMF07XG4gICAgY29uc3QgY29sdW1ucyA9IGFzc2lnblBvaW50UGFpclRvTGF5ZXJDb2x1bW4ocHRQYWlyLCB0cnVlKTtcblxuICAgIGNvbnN0IHByb3BzID0gaWNvbkZpZWxkcy5tYXAoaWNvbkZpZWxkID0+ICh7XG4gICAgICBsYWJlbDogaWNvbkZpZWxkLm5hbWUucmVwbGFjZSgvW18sLl0rL2csICcgJykudHJpbSgpLFxuICAgICAgY29sdW1uczoge1xuICAgICAgICAuLi5jb2x1bW5zLFxuICAgICAgICBpY29uOiB7XG4gICAgICAgICAgdmFsdWU6IGljb25GaWVsZC5uYW1lLFxuICAgICAgICAgIGZpZWxkSWR4OiBpY29uRmllbGQuZmllbGRJZHhcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGlzVmlzaWJsZTogdHJ1ZVxuICAgIH0pKTtcblxuICAgIHJldHVybiB7cHJvcHN9O1xuICB9XG5cbiAgZ2V0RmlsdGVyZWRJdGVtQ291bnQoKSB7XG4gICAgLy8gdXNlIHRvdGFsXG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZmlsdGVyZWRJdGVtQ291bnQpLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5maWx0ZXJlZEl0ZW1Db3VudCkucmVkdWNlKFxuICAgICAgICAodG90YWwsIGN1cnIpID0+IChOdW1iZXIuaXNGaW5pdGUoY3VycikgPyB0b3RhbCArIGN1cnIgOiB0b3RhbCksXG4gICAgICAgIDBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjYWxjdWxhdGVEYXRhQXR0cmlidXRlKHtkYXRhQ29udGFpbmVyLCBmaWx0ZXJlZEluZGV4fTogS2VwbGVyVGFibGUsIGdldFBvc2l0aW9uKSB7XG4gICAgY29uc3QgZ2V0SWNvbiA9IHRoaXMuZ2V0SWNvbkFjY2Vzc29yKGRhdGFDb250YWluZXIpO1xuICAgIGNvbnN0IGRhdGE6IEljb25MYXllckRhdGFbXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWx0ZXJlZEluZGV4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBpbmRleCA9IGZpbHRlcmVkSW5kZXhbaV07XG4gICAgICBjb25zdCByb3dJbmRleCA9IHtpbmRleH07XG4gICAgICBjb25zdCBwb3MgPSBnZXRQb3NpdGlvbihyb3dJbmRleCk7XG4gICAgICBjb25zdCBpY29uID0gZ2V0SWNvbihyb3dJbmRleCk7XG5cbiAgICAgIC8vIGlmIGRvZXNuJ3QgaGF2ZSBwb2ludCBsYXQgb3IgbG5nLCBkbyBub3QgYWRkIHRoZSBwb2ludFxuICAgICAgLy8gZGVjay5nbCBjYW4ndCBoYW5kbGUgcG9zaXRpb24gPSBudWxsXG4gICAgICBpZiAocG9zLmV2ZXJ5KE51bWJlci5pc0Zpbml0ZSkgJiYgdHlwZW9mIGljb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGRhdGEucHVzaCh7XG4gICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgaWNvblxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGZvcm1hdExheWVyRGF0YShkYXRhc2V0cywgb2xkTGF5ZXJEYXRhKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnLmRhdGFJZCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjb25zdCB7dGV4dExhYmVsfSA9IHRoaXMuY29uZmlnO1xuICAgIGNvbnN0IHtncHVGaWx0ZXIsIGRhdGFDb250YWluZXJ9ID0gZGF0YXNldHNbdGhpcy5jb25maWcuZGF0YUlkXTtcblxuICAgIGNvbnN0IGdldFBvc2l0aW9uID0gdGhpcy5nZXRQb3NpdGlvbkFjY2Vzc29yKGRhdGFDb250YWluZXIpO1xuXG4gICAgY29uc3Qge2RhdGEsIHRyaWdnZXJDaGFuZ2VkfSA9IHRoaXMudXBkYXRlRGF0YShkYXRhc2V0cywgb2xkTGF5ZXJEYXRhKTtcblxuICAgIC8vIGdldCBhbGwgZGlzdGluY3QgY2hhcmFjdGVycyBpbiB0aGUgdGV4dCBsYWJlbHNcbiAgICBjb25zdCB0ZXh0TGFiZWxzID0gZm9ybWF0VGV4dExhYmVsRGF0YSh7XG4gICAgICB0ZXh0TGFiZWwsXG4gICAgICB0cmlnZ2VyQ2hhbmdlZCxcbiAgICAgIG9sZExheWVyRGF0YSxcbiAgICAgIGRhdGEsXG4gICAgICBkYXRhQ29udGFpbmVyXG4gICAgfSk7XG5cbiAgICBjb25zdCBhY2Nlc3NvcnMgPSB0aGlzLmdldEF0dHJpYnV0ZUFjY2Vzc29ycyh7ZGF0YUNvbnRhaW5lcn0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGEsXG4gICAgICBnZXRQb3NpdGlvbixcbiAgICAgIGdldEZpbHRlclZhbHVlOiBncHVGaWx0ZXIuZmlsdGVyVmFsdWVBY2Nlc3NvcihkYXRhQ29udGFpbmVyKSgpLFxuICAgICAgdGV4dExhYmVscyxcbiAgICAgIC4uLmFjY2Vzc29yc1xuICAgIH07XG4gIH1cblxuICB1cGRhdGVMYXllck1ldGEoZGF0YXNldDogS2VwbGVyVGFibGUsIGdldFBvc2l0aW9uKSB7XG4gICAgY29uc3Qge2RhdGFDb250YWluZXJ9ID0gZGF0YXNldDtcbiAgICBjb25zdCBib3VuZHMgPSB0aGlzLmdldFBvaW50c0JvdW5kcyhkYXRhQ29udGFpbmVyLCBnZXRQb3NpdGlvbik7XG4gICAgdGhpcy51cGRhdGVNZXRhKHtib3VuZHN9KTtcbiAgfVxuXG4gIHJlbmRlckxheWVyKG9wdHMpIHtcbiAgICBjb25zdCB7ZGF0YSwgZ3B1RmlsdGVyLCBvYmplY3RIb3ZlcmVkLCBtYXBTdGF0ZSwgaW50ZXJhY3Rpb25Db25maWcsIGxheWVyQ2FsbGJhY2tzfSA9IG9wdHM7XG5cbiAgICAvLyBTdG9yZSBjYWxsYmFjayB0byB0cmlnZ2VyIG1hcCByZWRyYXcgd2hlbiBpY29uIGdlb21ldHJ5IGxvYWRzIGFzeW5jaHJvbm91c2x5XG4gICAgdGhpcy5vblJlZHJhd05lZWRlZCA9IGxheWVyQ2FsbGJhY2tzPy5vblJlZHJhd05lZWRlZDtcblxuICAgIGNvbnN0IHJhZGl1c1NjYWxlID0gdGhpcy5nZXRSYWRpdXNTY2FsZUJ5Wm9vbShtYXBTdGF0ZSk7XG5cbiAgICBjb25zdCBsYXllclByb3BzID0ge1xuICAgICAgcmFkaXVzU2NhbGUsXG4gICAgICBiaWxsYm9hcmQ6IHRoaXMuY29uZmlnLnZpc0NvbmZpZy5iaWxsYm9hcmQsXG4gICAgICAuLi4odGhpcy5jb25maWcudmlzQ29uZmlnLmZpeGVkUmFkaXVzID8ge30gOiB7cmFkaXVzTWF4UGl4ZWxzOiA1MDB9KVxuICAgIH07XG5cbiAgICBjb25zdCB1cGRhdGVUcmlnZ2VycyA9IHtcbiAgICAgIGdldFBvc2l0aW9uOiB0aGlzLmNvbmZpZy5jb2x1bW5zLFxuICAgICAgZ2V0RmlsdGVyVmFsdWU6IGdwdUZpbHRlci5maWx0ZXJWYWx1ZVVwZGF0ZVRyaWdnZXJzLFxuICAgICAgLi4udGhpcy5nZXRWaXN1YWxDaGFubmVsVXBkYXRlVHJpZ2dlcnMoKVxuICAgIH07XG5cbiAgICBjb25zdCBkZWZhdWx0TGF5ZXJQcm9wcyA9IHRoaXMuZ2V0RGVmYXVsdERlY2tMYXllclByb3BzKG9wdHMpO1xuICAgIGNvbnN0IGJydXNoaW5nUHJvcHMgPSB0aGlzLmdldEJydXNoaW5nRXh0ZW5zaW9uUHJvcHMoaW50ZXJhY3Rpb25Db25maWcpO1xuICAgIGNvbnN0IGdldFBpeGVsT2Zmc2V0ID0gZ2V0VGV4dE9mZnNldEJ5UmFkaXVzKHJhZGl1c1NjYWxlLCBkYXRhLmdldFJhZGl1cywgbWFwU3RhdGUpO1xuICAgIGNvbnN0IGV4dGVuc2lvbnMgPSBbLi4uZGVmYXVsdExheWVyUHJvcHMuZXh0ZW5zaW9ucywgYnJ1c2hpbmdFeHRlbnNpb25dO1xuXG4gICAgLy8gc2hhcmVkIFByb3BzIGJldHdlZW4gbGF5ZXIgYW5kIGxhYmVsIGxheWVyXG4gICAgY29uc3Qgc2hhcmVkUHJvcHMgPSB7XG4gICAgICBnZXRGaWx0ZXJWYWx1ZTogZGF0YS5nZXRGaWx0ZXJWYWx1ZSxcbiAgICAgIGV4dGVuc2lvbnMsXG4gICAgICBmaWx0ZXJSYW5nZTogZGVmYXVsdExheWVyUHJvcHMuZmlsdGVyUmFuZ2UsXG4gICAgICAuLi5icnVzaGluZ1Byb3BzXG4gICAgfTtcblxuICAgIGNvbnN0IGxhYmVsTGF5ZXJzID0gW1xuICAgICAgLi4udGhpcy5yZW5kZXJUZXh0TGFiZWxMYXllcihcbiAgICAgICAge1xuICAgICAgICAgIGdldFBvc2l0aW9uOiBkYXRhLmdldFBvc2l0aW9uLFxuICAgICAgICAgIHNoYXJlZFByb3BzLFxuICAgICAgICAgIGdldFBpeGVsT2Zmc2V0LFxuICAgICAgICAgIHVwZGF0ZVRyaWdnZXJzXG4gICAgICAgIH0sXG4gICAgICAgIG9wdHNcbiAgICAgIClcbiAgICBdO1xuICAgIGNvbnN0IGhvdmVyZWRPYmplY3QgPSB0aGlzLmhhc0hvdmVyZWRPYmplY3Qob2JqZWN0SG92ZXJlZCk7XG5cbiAgICBjb25zdCBwYXJhbWV0ZXJzID0ge1xuICAgICAgLy8gaWNvbnMgd2lsbCBiZSBmbGF0IG9uIHRoZSBtYXAgd2hlbiB0aGUgYWx0aXR1ZGUgY29sdW1uIGlzIG5vdCB1c2VkXG4gICAgICBkZXB0aFRlc3Q6IHRoaXMuY29uZmlnLmNvbHVtbnMuYWx0aXR1ZGU/LmZpZWxkSWR4ID4gLTEsXG4gICAgICBjdWxsRmFjZTogR0wuRlJPTlRcbiAgICB9O1xuXG4gICAgLy8gQXBwZW5kIGdlb21ldHJ5IHZlcnNpb24gdG8gbGF5ZXIgaWQgc28gZGVjay5nbCB0cmVhdHMgaXQgYXMgbmV3IGxheWVyIHdoZW4gZ2VvbWV0cnkgY2hhbmdlc1xuICAgIGNvbnN0IGJhc2VMYXllcklkID0gZGVmYXVsdExheWVyUHJvcHMuaWQgfHwgdGhpcy5pZDtcbiAgICBjb25zdCBsYXllcklkV2l0aFZlcnNpb24gPSBgJHtiYXNlTGF5ZXJJZH1fJHt0aGlzLmljb25HZW9tZXRyeVZlcnNpb259YDtcblxuICAgIHJldHVybiBbXG4gICAgICBuZXcgU3ZnSWNvbkxheWVyKHtcbiAgICAgICAgLi4uZGVmYXVsdExheWVyUHJvcHMsXG4gICAgICAgIGlkOiBsYXllcklkV2l0aFZlcnNpb24sXG4gICAgICAgIC4uLmJydXNoaW5nUHJvcHMsXG4gICAgICAgIC4uLmxheWVyUHJvcHMsXG4gICAgICAgIC4uLmRhdGEsXG4gICAgICAgIHBhcmFtZXRlcnMsXG4gICAgICAgIGdldEljb25HZW9tZXRyeTogaWQgPT4gdGhpcy5pY29uR2VvbWV0cnk/LltpZF0sXG5cbiAgICAgICAgLy8gdXBkYXRlIHRyaWdnZXJzXG4gICAgICAgIHVwZGF0ZVRyaWdnZXJzLFxuICAgICAgICBleHRlbnNpb25zXG4gICAgICB9KSxcblxuICAgICAgLy8gaG92ZXIgbGF5ZXJcbiAgICAgIC4uLihob3ZlcmVkT2JqZWN0XG4gICAgICAgID8gW1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBTdmdJY29uTGF5ZXJQcm9wcyBuZWVkcyBnZXRJY29uIEZpZWxkXG4gICAgICAgICAgICBuZXcgU3ZnSWNvbkxheWVyKHtcbiAgICAgICAgICAgICAgLi4udGhpcy5nZXREZWZhdWx0SG92ZXJMYXllclByb3BzKCksXG4gICAgICAgICAgICAgIGlkOiBgJHtsYXllcklkV2l0aFZlcnNpb259LWhvdmVyYCxcbiAgICAgICAgICAgICAgLi4ubGF5ZXJQcm9wcyxcbiAgICAgICAgICAgICAgdmlzaWJsZTogZGVmYXVsdExheWVyUHJvcHMudmlzaWJsZSxcbiAgICAgICAgICAgICAgZGF0YTogW2hvdmVyZWRPYmplY3RdLFxuICAgICAgICAgICAgICBwYXJhbWV0ZXJzLFxuICAgICAgICAgICAgICBnZXRQb3NpdGlvbjogZGF0YS5nZXRQb3NpdGlvbixcbiAgICAgICAgICAgICAgZ2V0UmFkaXVzOiBkYXRhLmdldFJhZGl1cyxcbiAgICAgICAgICAgICAgZ2V0RmlsbENvbG9yOiB0aGlzLmNvbmZpZy5oaWdobGlnaHRDb2xvcixcbiAgICAgICAgICAgICAgZ2V0SWNvbkdlb21ldHJ5OiBpZCA9PiB0aGlzLmljb25HZW9tZXRyeT8uW2lkXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdXG4gICAgICAgIDogW10pLFxuXG4gICAgICAvLyB0ZXh0IGxhYmVsIGxheWVyXG4gICAgICAuLi5sYWJlbExheWVyc1xuICAgIF07XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsV0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsVUFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUcsYUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksY0FBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUssV0FBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sY0FBQSxHQUFBUCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU8sVUFBQSxHQUFBUixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVEsV0FBQSxHQUFBUixPQUFBO0FBQ0EsSUFBQVMsTUFBQSxHQUFBVCxPQUFBO0FBQ0EsSUFBQVUsZUFBQSxHQUFBVixPQUFBO0FBQStFLFNBQUFXLFFB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
|