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.
Files changed (63) hide show
  1. package/dist/src/duckdb/src/components/index.d.ts +8 -1
  2. package/dist/src/duckdb/src/index.d.ts +3 -5
  3. package/dist/src/duckdb/src/table/index.d.ts +1 -0
  4. package/dist/src/reducers/src/ui-state-updaters.d.ts +1 -1
  5. package/dist/src/utils/src/application-config.d.ts +2 -0
  6. package/package.json +2 -2
  7. package/src/actions/package.json +8 -8
  8. package/src/ai-assistant/dist/components/ai-assistant-component.js +42 -7
  9. package/src/ai-assistant/package.json +7 -7
  10. package/src/ai-assistant/src/components/ai-assistant-component.tsx +17 -4
  11. package/src/cloud-providers/package.json +2 -2
  12. package/src/common-utils/package.json +3 -3
  13. package/src/components/dist/map-container.js +72 -64
  14. package/src/components/package.json +15 -15
  15. package/src/components/src/map-container.tsx +8 -1
  16. package/src/constants/dist/default-settings.js +1 -1
  17. package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/89/a2/7b6ce2c6c94377ff73d3eb84e41a05931160d1d250804fb519215165f383a46120fd1f4662bd2ae95d7c509ce63f4b8e866b515f9f8750cb702709d4bcdc +1 -0
  18. package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/c4/d0/bd16d41c708342b14f4c0aaa31136faccd8d411ae1d3962252433ac31d00ac57f49ecd4f6b4d682ccdab28858444adefb98aa54c83743d739b90698c03cf +1 -0
  19. package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/10/75/d229810e58d38a1b61f7938bf1587615fbe97f4afa69493e595badd1f471 +2 -0
  20. package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/5b/96/163a3fcac4673f000a64cbecbb40621d276cb6f295539b4a6e139bbfc4f5 +2 -0
  21. package/src/constants/package.json +2 -2
  22. package/src/constants/umd/keplergl.min.js +1 -1
  23. package/src/deckgl-arrow-layers/package.json +3 -3
  24. package/src/deckgl-layers/package.json +4 -4
  25. package/src/duckdb/dist/components/index.d.ts +8 -1
  26. package/src/duckdb/dist/components/index.js +54 -11
  27. package/src/duckdb/dist/index.d.ts +3 -5
  28. package/src/duckdb/dist/index.js +28 -40
  29. package/src/duckdb/dist/table/index.d.ts +1 -0
  30. package/src/duckdb/dist/table/index.js +17 -0
  31. package/src/duckdb/package.json +25 -8
  32. package/src/duckdb/src/components/index.tsx +9 -1
  33. package/src/duckdb/src/index.ts +3 -9
  34. package/src/duckdb/src/table/index.ts +5 -0
  35. package/src/effects/package.json +5 -5
  36. package/src/layers/dist/icon-layer/icon-layer.d.ts +3 -1
  37. package/src/layers/dist/icon-layer/icon-layer.js +28 -4
  38. package/src/layers/package.json +9 -9
  39. package/src/layers/src/icon-layer/icon-layer.ts +24 -2
  40. package/src/localization/package.json +1 -1
  41. package/src/processors/package.json +7 -7
  42. package/src/reducers/dist/ui-state-updaters.d.ts +1 -1
  43. package/src/reducers/dist/ui-state-updaters.js +4 -4
  44. package/src/reducers/package.json +16 -16
  45. package/src/reducers/src/ui-state-updaters.ts +9 -4
  46. package/src/schemas/package.json +7 -7
  47. package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/00/92/9b4a08e852e2f12e4702d7c41fe5299bcd72ee10d25072f6aa4bb473d4dbe8d2ea1992b32bf82ea9ad73efdacf9f4e228a18523c93042cc58d07a56115bf +1 -0
  48. package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/13/40/aa1c82ba19f8a57b20540cedfbc7086324551b58a599674e858ef4b8c12fad29b2e5d0a17f38ff2fb0adb913909e58b1aada0a79f49e8dc1b3ca673db76f +1 -0
  49. package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/58/24/f9a517552c80acd6fe8c93f7ed4a3e8b24272284e6f2257ad18e152a8dbf +2 -0
  50. package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/95/15/0b35e451aad3f2352a14cfa64386984de34da0a0b5ad2fc736ecb44d22db +2 -0
  51. package/src/styles/package.json +2 -2
  52. package/src/styles/umd/keplergl.min.js +1 -1
  53. package/src/table/package.json +5 -5
  54. package/src/tasks/package.json +2 -2
  55. package/src/types/layers.d.ts +2 -0
  56. package/src/types/package.json +1 -1
  57. package/src/utils/dist/application-config.d.ts +2 -0
  58. package/src/utils/dist/application-config.js +13 -2
  59. package/src/utils/dist/dom-to-image.js +19 -7
  60. package/src/utils/package.json +4 -5
  61. package/src/utils/src/application-config.ts +17 -1
  62. package/src/utils/src/dom-to-image.ts +18 -6
  63. 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
- Object.keys(_sqlPanel).forEach(function (key) {
8
- if (key === "default" || key === "__esModule") return;
9
- if (key in exports && exports[key] === _sqlPanel[key]) return;
10
- Object.defineProperty(exports, key, {
11
- enumerable: true,
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 { SqlPanel } from './components';
3
- import { keplerGlDuckDBPlugin } from './plugin';
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 default keplerGlDuckDBPlugin;
7
- export { consolidateFieldTypes, extendFieldsWithDuckDBColumnType, fieldTypeToColumnType } from './processors/data-processor';
5
+ export * from './processors/data-processor';
@@ -5,12 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  var _exportNames = {
7
7
  DuckDBWasmAdapter: true,
8
- SqlPanel: true,
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, "KeplerGlDuckDbTable", {
16
+ Object.defineProperty(exports, "default", {
22
17
  enumerable: true,
23
18
  get: function get() {
24
- return _duckdbTable.KeplerGlDuckDbTable;
19
+ return _plugin.keplerGlDuckDBPlugin;
25
20
  }
26
21
  });
27
- Object.defineProperty(exports, "SqlPanel", {
22
+ Object.defineProperty(exports, "keplerGlDuckDBPlugin", {
28
23
  enumerable: true,
29
24
  get: function get() {
30
- return _components.SqlPanel;
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
- // SPDX-License-Identifier: MIT
76
- // Copyright contributors to the kepler.gl project
77
- var _default = exports["default"] = _plugin.keplerGlDuckDBPlugin;
78
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZHVja2RiV2FzbUFkYXB0ZXIiLCJyZXF1aXJlIiwiX2NvbXBvbmVudHMiLCJfcGx1Z2luIiwiX2R1Y2tkYlRhYmxlIiwiX2R1Y2tkYlRhYmxlVXRpbHMiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIl9leHBvcnROYW1lcyIsImV4cG9ydHMiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJfZGF0YVByb2Nlc3NvciIsIl9kZWZhdWx0Iiwia2VwbGVyR2xEdWNrREJQbHVnaW4iXSwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuZXhwb3J0IHtEdWNrREJXYXNtQWRhcHRlcn0gZnJvbSAnLi9hZGFwdGVycy9kdWNrZGItd2FzbS1hZGFwdGVyJztcbmV4cG9ydCB7U3FsUGFuZWx9IGZyb20gJy4vY29tcG9uZW50cyc7XG5pbXBvcnQge2tlcGxlckdsRHVja0RCUGx1Z2lufSBmcm9tICcuL3BsdWdpbic7XG5leHBvcnQge3Jlc3RvcmVHZW9hcnJvd01ldGFkYXRhLCBLZXBsZXJHbER1Y2tEYlRhYmxlfSBmcm9tICcuL3RhYmxlL2R1Y2tkYi10YWJsZSc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlL2R1Y2tkYi10YWJsZS11dGlscyc7XG5leHBvcnQgZGVmYXVsdCBrZXBsZXJHbER1Y2tEQlBsdWdpbjtcbmV4cG9ydCB7XG4gIGNvbnNvbGlkYXRlRmllbGRUeXBlcyxcbiAgZXh0ZW5kRmllbGRzV2l0aER1Y2tEQkNvbHVtblR5cGUsXG4gIGZpZWxkVHlwZVRvQ29sdW1uVHlwZVxufSBmcm9tICcuL3Byb2Nlc3NvcnMvZGF0YS1wcm9jZXNzb3InO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxrQkFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsV0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsT0FBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsWUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksaUJBQUEsR0FBQUosT0FBQTtBQUFBSyxNQUFBLENBQUFDLElBQUEsQ0FBQUYsaUJBQUEsRUFBQUcsT0FBQSxXQUFBQyxHQUFBO0VBQUEsSUFBQUEsR0FBQSxrQkFBQUEsR0FBQTtFQUFBLElBQUFILE1BQUEsQ0FBQUksU0FBQSxDQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQUMsWUFBQSxFQUFBSixHQUFBO0VBQUEsSUFBQUEsR0FBQSxJQUFBSyxPQUFBLElBQUFBLE9BQUEsQ0FBQUwsR0FBQSxNQUFBSixpQkFBQSxDQUFBSSxHQUFBO0VBQUFILE1BQUEsQ0FBQVMsY0FBQSxDQUFBRCxPQUFBLEVBQUFMLEdBQUE7SUFBQU8sVUFBQTtJQUFBQyxHQUFBLFdBQUFBLElBQUE7TUFBQSxPQUFBWixpQkFBQSxDQUFBSSxHQUFBO0lBQUE7RUFBQTtBQUFBO0FBRUEsSUFBQVMsY0FBQSxHQUFBakIsT0FBQTtBQVRBO0FBQ0E7QUFBQSxJQUFBa0IsUUFBQSxHQUFBTCxPQUFBLGNBT2VNLDRCQUFvQiIsImlnbm9yZUxpc3QiOltdfQ==
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==
@@ -1,11 +1,28 @@
1
1
  {
2
2
  "name": "@kepler.gl/duckdb",
3
3
  "author": "Shan He <heshan0131@gmail.com>",
4
- "version": "3.2.3",
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 && touch dist/index.js"
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.3",
30
- "@kepler.gl/constants": "3.2.3",
31
- "@kepler.gl/processors": "3.2.3",
32
- "@kepler.gl/table": "3.2.3",
33
- "@kepler.gl/types": "3.2.3",
34
- "@kepler.gl/utils": "3.2.3",
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 * from './sql-panel';
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';
@@ -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 {SqlPanel} from './components';
6
- import {keplerGlDuckDBPlugin} from './plugin';
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 default keplerGlDuckDBPlugin;
10
- export {
11
- consolidateFieldTypes,
12
- extendFieldsWithDuckDBColumnType,
13
- fieldTypeToColumnType
14
- } from './processors/data-processor';
8
+ export * from './processors/data-processor';
@@ -0,0 +1,5 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // Copyright contributors to the kepler.gl project
3
+
4
+ export * from './duckdb-table-utils';
5
+
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kepler.gl/effects",
3
3
  "author": "Shan He <shan@uber.com>",
4
- "version": "3.2.3",
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.3",
35
- "@kepler.gl/constants": "3.2.3",
36
- "@kepler.gl/types": "3.2.3",
37
- "@kepler.gl/utils": "3.2.3",
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
- return [new _deckglLayers.SvgIconLayer(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({}, defaultLayerProps), brushingProps), layerProps), data), {}, {
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()), layerProps), {}, {
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+IHRoaXMuaWNvbkdlb21ldHJ5Py5baWRdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXSksXG5cbiAgICAgIC8vIHRleHQgbGFiZWwgbGF5ZXJcbiAgICAgIC4uLmxhYmVsTGF5ZXJzXG4gICAgXTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxXQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxVQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBRyxhQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxjQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxXQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxjQUFBLEdBQUFQLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTyxVQUFBLEdBQUFSLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBUSxXQUFBLEdBQUFSLE9BQUE7QUFDQSxJQUFBUyxNQUFBLEdBQUFULE9BQUE7QUFDQSxJQUFBVSxlQUFBLEdBQUFWLE9BQUE7QUFBK0UsU0FBQVcsUUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFKLENBQUEsT0FBQUcsTUFBQSxDQUFBRSxxQkFBQSxRQUFBQyxDQUFBLEdBQUFILE1BQUEsQ0FBQUUscUJBQUEsQ0FBQUwsQ0FBQSxHQUFBQyxDQUFBLEtB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
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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