kepler.gl 3.1.7 → 3.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/dist/src/actions/src/ui-state-actions.d.ts +0 -16
  2. package/dist/src/actions/src/vis-state-actions.d.ts +26 -0
  3. package/dist/src/ai-assistant/src/constants.d.ts +2 -5
  4. package/dist/src/ai-assistant/src/tools/geo-tools.d.ts +76 -25
  5. package/dist/src/ai-assistant/src/tools/tools.d.ts +76 -25
  6. package/dist/src/components/src/side-panel/add-by-dataset-button.d.ts +0 -1
  7. package/dist/src/duckdb/src/table/duckdb-table-utils.d.ts +8 -9
  8. package/dist/src/localization/src/translations/ca.d.ts +2 -0
  9. package/dist/src/localization/src/translations/cn.d.ts +2 -0
  10. package/dist/src/localization/src/translations/en.d.ts +2 -0
  11. package/dist/src/localization/src/translations/es.d.ts +2 -0
  12. package/dist/src/localization/src/translations/fi.d.ts +2 -0
  13. package/dist/src/localization/src/translations/ja.d.ts +2 -0
  14. package/dist/src/localization/src/translations/pt.d.ts +2 -0
  15. package/dist/src/localization/src/translations/ru.d.ts +2 -0
  16. package/dist/src/reducers/src/ui-state-updaters.d.ts +0 -10
  17. package/dist/src/reducers/src/vis-state-updaters.d.ts +16 -1
  18. package/dist/src/reducers/src/vis-state.d.ts +4 -0
  19. package/dist/src/schemas/src/vis-state-schema.d.ts +1 -0
  20. package/package.json +2 -2
  21. package/src/actions/dist/ui-state-actions.d.ts +0 -16
  22. package/src/actions/dist/ui-state-actions.js +2 -17
  23. package/src/actions/dist/vis-state-actions.d.ts +26 -0
  24. package/src/actions/dist/vis-state-actions.js +25 -1
  25. package/src/actions/package.json +8 -8
  26. package/src/actions/src/ui-state-actions.ts +0 -22
  27. package/src/actions/src/vis-state-actions.ts +30 -0
  28. package/src/ai-assistant/dist/components/ai-assistant-component.js +63 -4
  29. package/src/ai-assistant/dist/components/ai-assistant-config.js +55 -17
  30. package/src/ai-assistant/dist/constants.d.ts +2 -5
  31. package/src/ai-assistant/dist/constants.js +3 -21
  32. package/src/ai-assistant/dist/reducers/index.js +2 -2
  33. package/src/ai-assistant/dist/tools/geo-tools.d.ts +76 -25
  34. package/src/ai-assistant/dist/tools/geo-tools.js +44 -8
  35. package/src/ai-assistant/dist/tools/lisa-tool.js +17 -6
  36. package/src/ai-assistant/dist/tools/tools.d.ts +76 -25
  37. package/src/ai-assistant/package.json +19 -14
  38. package/src/ai-assistant/src/components/ai-assistant-component.tsx +34 -4
  39. package/src/ai-assistant/src/components/ai-assistant-config.tsx +64 -18
  40. package/src/ai-assistant/src/config/models.json +5 -24
  41. package/src/ai-assistant/src/constants.ts +21 -26
  42. package/src/ai-assistant/src/reducers/index.ts +1 -1
  43. package/src/ai-assistant/src/tools/geo-tools.tsx +70 -9
  44. package/src/ai-assistant/src/tools/lisa-tool.tsx +15 -4
  45. package/src/cloud-providers/package.json +2 -2
  46. package/src/common-utils/package.json +3 -3
  47. package/src/components/dist/kepler-gl.js +2 -2
  48. package/src/components/dist/map/map-popover.js +2 -2
  49. package/src/components/dist/map-container.js +2 -2
  50. package/src/components/dist/side-panel/add-by-dataset-button.d.ts +0 -1
  51. package/src/components/dist/side-panel/add-by-dataset-button.js +1 -3
  52. package/src/components/dist/side-panel/filter-panel/add-filter-button.js +1 -2
  53. package/src/components/dist/side-panel/layer-panel/add-layer-button.js +1 -2
  54. package/src/components/dist/side-panel/layer-panel/custom-picker.js +18 -5
  55. package/src/components/package.json +15 -15
  56. package/src/components/src/kepler-gl.tsx +1 -1
  57. package/src/components/src/map/map-popover.tsx +1 -1
  58. package/src/components/src/map-container.tsx +1 -1
  59. package/src/components/src/side-panel/add-by-dataset-button.tsx +0 -3
  60. package/src/components/src/side-panel/filter-panel/add-filter-button.tsx +0 -1
  61. package/src/components/src/side-panel/layer-panel/add-layer-button.tsx +0 -1
  62. package/src/components/src/side-panel/layer-panel/custom-picker.tsx +15 -1
  63. package/src/constants/dist/default-settings.js +1 -1
  64. package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/e6/16/9fd3750f7cfc51cf980ec6937f88e24e5b03b144d0439efabdec6a028ce7442883abce42b76f97bffa8d37bfb65c10508e48d68a2b019c4b750a48374080 +1 -0
  65. package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/b6/51/9b3488269917e0404a46b4db6235f226deef2d5b5b5ffb7414dafaa60b52 +2 -0
  66. package/src/constants/package.json +2 -2
  67. package/src/constants/umd/keplergl.min.js +1 -1
  68. package/src/deckgl-arrow-layers/package.json +2 -2
  69. package/src/deckgl-layers/package.json +4 -4
  70. package/src/duckdb/dist/components/sql-panel.js +34 -33
  71. package/src/duckdb/dist/table/duckdb-table-utils.d.ts +8 -9
  72. package/src/duckdb/dist/table/duckdb-table-utils.js +21 -23
  73. package/src/duckdb/dist/table/duckdb-table.js +20 -17
  74. package/src/duckdb/package.json +6 -6
  75. package/src/duckdb/src/components/sql-panel.tsx +3 -5
  76. package/src/duckdb/src/table/duckdb-table-utils.ts +19 -18
  77. package/src/duckdb/src/table/duckdb-table.ts +7 -4
  78. package/src/effects/package.json +5 -5
  79. package/src/layers/dist/geojson-layer/geojson-layer.js +5 -2
  80. package/src/layers/package.json +9 -9
  81. package/src/layers/src/geojson-layer/geojson-layer.ts +4 -1
  82. package/src/localization/dist/translations/ca.d.ts +2 -0
  83. package/src/localization/dist/translations/ca.js +3 -1
  84. package/src/localization/dist/translations/cn.d.ts +2 -0
  85. package/src/localization/dist/translations/cn.js +3 -1
  86. package/src/localization/dist/translations/en.d.ts +2 -0
  87. package/src/localization/dist/translations/en.js +4 -2
  88. package/src/localization/dist/translations/es.d.ts +2 -0
  89. package/src/localization/dist/translations/es.js +3 -1
  90. package/src/localization/dist/translations/fi.d.ts +2 -0
  91. package/src/localization/dist/translations/fi.js +3 -1
  92. package/src/localization/dist/translations/ja.d.ts +2 -0
  93. package/src/localization/dist/translations/ja.js +3 -1
  94. package/src/localization/dist/translations/pt.d.ts +2 -0
  95. package/src/localization/dist/translations/pt.js +3 -1
  96. package/src/localization/dist/translations/ru.d.ts +2 -0
  97. package/src/localization/dist/translations/ru.js +3 -1
  98. package/src/localization/package.json +1 -1
  99. package/src/localization/src/translations/ca.ts +2 -0
  100. package/src/localization/src/translations/cn.ts +2 -0
  101. package/src/localization/src/translations/en.ts +4 -2
  102. package/src/localization/src/translations/es.ts +2 -0
  103. package/src/localization/src/translations/fi.ts +2 -0
  104. package/src/localization/src/translations/ja.ts +2 -0
  105. package/src/localization/src/translations/pt.ts +2 -0
  106. package/src/localization/src/translations/ru.ts +2 -0
  107. package/src/processors/dist/file-handler.js +13 -14
  108. package/src/processors/package.json +7 -7
  109. package/src/processors/src/file-handler.ts +0 -1
  110. package/src/reducers/dist/combined-updaters.js +4 -2
  111. package/src/reducers/dist/ui-state-updaters.d.ts +0 -10
  112. package/src/reducers/dist/ui-state-updaters.js +2 -22
  113. package/src/reducers/dist/ui-state.js +2 -2
  114. package/src/reducers/dist/vis-state-updaters.d.ts +16 -1
  115. package/src/reducers/dist/vis-state-updaters.js +79 -45
  116. package/src/reducers/dist/vis-state.d.ts +4 -0
  117. package/src/reducers/dist/vis-state.js +2 -2
  118. package/src/reducers/package.json +16 -16
  119. package/src/reducers/src/combined-updaters.ts +1 -0
  120. package/src/reducers/src/ui-state-updaters.ts +0 -24
  121. package/src/reducers/src/ui-state.ts +1 -3
  122. package/src/reducers/src/vis-state-updaters.ts +74 -22
  123. package/src/reducers/src/vis-state.ts +3 -1
  124. package/src/schemas/dist/vis-state-schema.d.ts +1 -0
  125. package/src/schemas/dist/vis-state-schema.js +1 -1
  126. package/src/schemas/package.json +7 -7
  127. package/src/schemas/src/vis-state-schema.ts +1 -0
  128. package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/f9/fc/86ccce4fa2c3e73042785814bc24476cb7cc9531d16a7c2ecb66bfc154f7b35d7416d852faa175d172da177931675cd2ba82e3b7898e8f4bf499921b00c2 +1 -0
  129. package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/ba/31/d609a3a75657c3640471d5a925a4a64689ea3853d9379bdcd675dba816a2 +2 -0
  130. package/src/styles/package.json +2 -2
  131. package/src/styles/umd/keplergl.min.js +1 -1
  132. package/src/table/package.json +5 -5
  133. package/src/tasks/package.json +2 -2
  134. package/src/types/package.json +1 -1
  135. package/src/utils/package.json +4 -4
  136. package/umd/keplergl.min.js +1350 -1312
@@ -6,13 +6,17 @@ Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports.AiAssistantComponent = AiAssistantComponent;
9
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
10
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
12
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
13
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
14
  var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
12
15
  var _react = _interopRequireWildcard(require("react"));
13
16
  var _reactRedux = require("react-redux");
14
17
  var _styledComponents = _interopRequireDefault(require("styled-components"));
15
18
  var _styles = require("@kepler.gl/styles");
19
+ var _core = require("@openassistant/core");
16
20
  var _ui = require("@openassistant/ui");
17
21
  require("@openassistant/echarts/dist/index.css");
18
22
  require("@openassistant/ui/dist/index.css");
@@ -24,6 +28,8 @@ var _templateObject; // SPDX-License-Identifier: MIT
24
28
  // Copyright contributors to the kepler.gl project
25
29
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
26
30
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
31
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
32
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
27
33
  var StyledAiAssistantComponent = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n height: 100%;\n padding-bottom: 4px;\n\n * {\n font-size: 11px;\n }\n"])));
28
34
  function AiAssistantComponent() {
29
35
  var visState = (0, _reactRedux.useSelector)(function (state) {
@@ -59,17 +65,69 @@ function AiAssistantComponent() {
59
65
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
60
66
  datasetMetaData = _useState2[0],
61
67
  setDatasetMetaData = _useState2[1];
68
+ var _useState3 = (0, _react.useState)([]),
69
+ _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
70
+ ideas = _useState4[0],
71
+ setIdeas = _useState4[1];
62
72
 
63
- // get dataset meta data
73
+ // get dataset meta data and re-initialize assistant when datasets or layers change
64
74
  (0, _react.useEffect)(function () {
65
75
  var metaData = (0, _utils.getDatasetContext)(visState === null || visState === void 0 ? void 0 : visState.datasets, (visState === null || visState === void 0 ? void 0 : visState.layers) || []);
66
76
  setDatasetMetaData(metaData);
67
- // re-initialize assistant when datasets or layers change
68
77
  // eslint-disable-next-line react-hooks/exhaustive-deps
69
78
  }, [visState === null || visState === void 0 ? void 0 : visState.datasets, visState === null || visState === void 0 ? void 0 : visState.layers]);
70
79
 
71
80
  // use dataset meta data in LLM instructions
72
81
  var instructions = "".concat(_constants.INSTRUCTIONS, "\n\n").concat(datasetMetaData);
82
+
83
+ // generate ideas from LLM
84
+ var _useAssistant = (0, _core.useAssistant)(_objectSpread(_objectSpread({}, assistantProps), {}, {
85
+ instructions: instructions
86
+ })),
87
+ temporaryPrompt = _useAssistant.temporaryPrompt;
88
+ var generateIdeas = /*#__PURE__*/function () {
89
+ var _ref = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
90
+ var response, match, json;
91
+ return _regenerator["default"].wrap(function _callee$(_context) {
92
+ while (1) switch (_context.prev = _context.next) {
93
+ case 0:
94
+ _context.prev = 0;
95
+ _context.next = 3;
96
+ return temporaryPrompt({
97
+ prompt: _constants.PROMPT_IDEAS,
98
+ temperature: 1.0
99
+ });
100
+ case 3:
101
+ response = _context.sent;
102
+ // find [{},{}...] in the text and parse it as json, handling whitespace
103
+ match = response === null || response === void 0 ? void 0 : response.match(/\[\s*\{[\s\S]*\}\s*\]/);
104
+ if (match) {
105
+ json = JSON.parse(match[0]);
106
+ setIdeas(json);
107
+ }
108
+ _context.next = 11;
109
+ break;
110
+ case 8:
111
+ _context.prev = 8;
112
+ _context.t0 = _context["catch"](0);
113
+ console.error('Error generating ideas', _context.t0);
114
+ case 11:
115
+ case "end":
116
+ return _context.stop();
117
+ }
118
+ }, _callee, null, [[0, 8]]);
119
+ }));
120
+ return function generateIdeas() {
121
+ return _ref.apply(this, arguments);
122
+ };
123
+ }();
124
+ (0, _react.useEffect)(function () {
125
+ // get ideas UI component
126
+ if (ideas.length === 0 && datasetMetaData.length > 0) {
127
+ generateIdeas();
128
+ }
129
+ // eslint-disable-next-line react-hooks/exhaustive-deps
130
+ }, [datasetMetaData]);
73
131
  var onRestartAssistant = function onRestartAssistant() {
74
132
  // clean up aiAssistant state
75
133
  dispatch((0, _actions.updateAiAssistantMessages)([]));
@@ -102,7 +160,8 @@ function AiAssistantComponent() {
102
160
  fontSize: 'text-tiny',
103
161
  botMessageClassName: '',
104
162
  githubIssueLink: 'https://github.com/keplergl/kepler.gl/issues',
105
- ideas: _constants.PROMPT_IDEAS
163
+ ideas: ideas,
164
+ onRefreshIdeas: generateIdeas
106
165
  })));
107
166
  }
108
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcmVhY3RSZWR1eCIsIl9zdHlsZWRDb21wb25lbnRzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9zdHlsZXMiLCJfdWkiLCJfYWN0aW9ucyIsIl9jb25zdGFudHMiLCJfdXRpbHMiLCJfdG9vbHMiLCJfdGVtcGxhdGVPYmplY3QiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJTdHlsZWRBaUFzc2lzdGFudENvbXBvbmVudCIsInN0eWxlZCIsImRpdiIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwiQWlBc3Npc3RhbnRDb21wb25lbnQiLCJ2aXNTdGF0ZSIsInVzZVNlbGVjdG9yIiwic3RhdGUiLCJkZW1vIiwia2VwbGVyR2wiLCJtYXAiLCJhaUFzc2lzdGFudCIsImRpc3BhdGNoIiwidXNlRGlzcGF0Y2giLCJ0b29scyIsInNldHVwTExNVG9vbHMiLCJlbmFibGVWb2ljZUFuZFNjcmVlbkNhcHR1cmUiLCJjb25maWciLCJwcm92aWRlciIsImFzc2lzdGFudFByb3BzIiwibmFtZSIsIkFTU0lTVEFOVF9OQU1FIiwiZGVzY3JpcHRpb24iLCJBU1NJU1RBTlRfREVTQ1JJUFRJT04iLCJ2ZXJzaW9uIiwiQVNTSVNUQU5UX1ZFUlNJT04iLCJtb2RlbFByb3ZpZGVyIiwibW9kZWwiLCJhcGlLZXkiLCJiYXNlVXJsIiwiX3VzZVN0YXRlIiwidXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkyIiwiZGF0YXNldE1ldGFEYXRhIiwic2V0RGF0YXNldE1ldGFEYXRhIiwidXNlRWZmZWN0IiwibWV0YURhdGEiLCJnZXREYXRhc2V0Q29udGV4dCIsImRhdGFzZXRzIiwibGF5ZXJzIiwiaW5zdHJ1Y3Rpb25zIiwiY29uY2F0IiwiSU5TVFJVQ1RJT05TIiwib25SZXN0YXJ0QXNzaXN0YW50IiwidXBkYXRlQWlBc3Npc3RhbnRNZXNzYWdlcyIsIm9uTWVzc2FnZXNVcGRhdGVkIiwibWVzc2FnZXMiLCJvblNjcmVlbnNob3RDbGljayIsInNldFN0YXJ0U2NyZWVuQ2FwdHVyZSIsIm9uUmVtb3ZlU2NyZWVuc2hvdCIsInNldFNjcmVlbkNhcHR1cmVkIiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsIkFpQXNzaXN0YW50IiwiX2V4dGVuZHMyIiwidGhlbWUiLCJ0ZXh0Q29sb3IiLCJ0ZXh0Q29sb3JMVCIsIndlbGNvbWVNZXNzYWdlIiwiV0VMQ09NRV9NRVNTQUdFIiwidGVtcGVyYXR1cmUiLCJ0b3BQIiwiaW5pdGlhbE1lc3NhZ2VzIiwiZW5hYmxlVm9pY2UiLCJlbmFibGVTY3JlZW5DYXB0dXJlIiwic2NyZWVuQ2FwdHVyZWRCYXNlNjQiLCJzY3JlZW5zaG90VG9Bc2siLCJzY3JlZW5DYXB0dXJlZCIsIm9uUmVzdGFydENoYXQiLCJmb250U2l6ZSIsImJvdE1lc3NhZ2VDbGFzc05hbWUiLCJnaXRodWJJc3N1ZUxpbmsiLCJpZGVhcyIsIlBST01QVF9JREVBUyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL2FpLWFzc2lzdGFudC1jb21wb25lbnQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCwge3VzZUVmZmVjdCwgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7dXNlRGlzcGF0Y2gsIHVzZVNlbGVjdG9yfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7dGV4dENvbG9yTFQsIHRoZW1lfSBmcm9tICdAa2VwbGVyLmdsL3N0eWxlcyc7XG5pbXBvcnQge01lc3NhZ2VNb2RlbH0gZnJvbSAnQG9wZW5hc3Npc3RhbnQvY29yZSc7XG5pbXBvcnQge0FpQXNzaXN0YW50fSBmcm9tICdAb3BlbmFzc2lzdGFudC91aSc7XG5pbXBvcnQgJ0BvcGVuYXNzaXN0YW50L2VjaGFydHMvZGlzdC9pbmRleC5jc3MnO1xuaW1wb3J0ICdAb3BlbmFzc2lzdGFudC91aS9kaXN0L2luZGV4LmNzcyc7XG5pbXBvcnQge3NldFNjcmVlbkNhcHR1cmVkLCBzZXRTdGFydFNjcmVlbkNhcHR1cmUsIHVwZGF0ZUFpQXNzaXN0YW50TWVzc2FnZXN9IGZyb20gJy4uL2FjdGlvbnMnO1xuaW1wb3J0IHtcbiAgQVNTSVNUQU5UX0RFU0NSSVBUSU9OLFxuICBBU1NJU1RBTlRfTkFNRSxcbiAgQVNTSVNUQU5UX1ZFUlNJT04sXG4gIElOU1RSVUNUSU9OUyxcbiAgUFJPTVBUX0lERUFTLFxuICBXRUxDT01FX01FU1NBR0Vcbn0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7Z2V0RGF0YXNldENvbnRleHR9IGZyb20gJy4uL3Rvb2xzL3V0aWxzJztcbmltcG9ydCB7c2V0dXBMTE1Ub29sc30gZnJvbSAnLi4vdG9vbHMvdG9vbHMnO1xuaW1wb3J0IHtTdGF0ZX0gZnJvbSAnLi9haS1hc3Npc3RhbnQtbWFuYWdlcic7XG5cbmNvbnN0IFN0eWxlZEFpQXNzaXN0YW50Q29tcG9uZW50ID0gc3R5bGVkLmRpdmBcbiAgaGVpZ2h0OiAxMDAlO1xuICBwYWRkaW5nLWJvdHRvbTogNHB4O1xuXG4gICoge1xuICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgfVxuYDtcblxuZXhwb3J0IGZ1bmN0aW9uIEFpQXNzaXN0YW50Q29tcG9uZW50KCkge1xuICBjb25zdCB2aXNTdGF0ZSA9IHVzZVNlbGVjdG9yKChzdGF0ZTogU3RhdGUpID0+IHN0YXRlLmRlbW8ua2VwbGVyR2wubWFwLnZpc1N0YXRlKTtcbiAgY29uc3QgYWlBc3Npc3RhbnQgPSB1c2VTZWxlY3Rvcigoc3RhdGU6IFN0YXRlKSA9PiBzdGF0ZS5kZW1vLmFpQXNzaXN0YW50KTtcbiAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xuXG4gIC8vIGRlZmluZSBMTE0gZnVuY3Rpb25zXG4gIGNvbnN0IHRvb2xzID0gc2V0dXBMTE1Ub29scyh7dmlzU3RhdGUsIGFpQXNzaXN0YW50LCBkaXNwYXRjaH0pO1xuXG4gIC8vIGVuYWJsZSB2b2ljZSBhbmQgc2NyZWVuIGNhcHR1cmVcbiAgY29uc3QgZW5hYmxlVm9pY2VBbmRTY3JlZW5DYXB0dXJlID1cbiAgICBhaUFzc2lzdGFudD8uY29uZmlnLnByb3ZpZGVyID09PSAnb3BlbmFpJyB8fCBhaUFzc2lzdGFudD8uY29uZmlnLnByb3ZpZGVyID09PSAnZ29vZ2xlJyB8fCBmYWxzZTtcblxuICAvLyBkZWZpbmUgYXNzaXN0YW50IHByb3BzXG4gIGNvbnN0IGFzc2lzdGFudFByb3BzID0ge1xuICAgIG5hbWU6IEFTU0lTVEFOVF9OQU1FLFxuICAgIGRlc2NyaXB0aW9uOiBBU1NJU1RBTlRfREVTQ1JJUFRJT04sXG4gICAgdmVyc2lvbjogQVNTSVNUQU5UX1ZFUlNJT04sXG4gICAgbW9kZWxQcm92aWRlcjogYWlBc3Npc3RhbnQ/LmNvbmZpZy5wcm92aWRlciB8fCAnJyxcbiAgICBtb2RlbDogYWlBc3Npc3RhbnQ/LmNvbmZpZy5tb2RlbCB8fCAnJyxcbiAgICBhcGlLZXk6IGFpQXNzaXN0YW50Py5jb25maWcuYXBpS2V5IHx8ICcnLFxuICAgIGJhc2VVcmw6IGFpQXNzaXN0YW50Py5jb25maWcuYmFzZVVybCB8fCAnJyxcbiAgICB0b29sc1xuICB9O1xuXG4gIGNvbnN0IFtkYXRhc2V0TWV0YURhdGEsIHNldERhdGFzZXRNZXRhRGF0YV0gPSB1c2VTdGF0ZTxzdHJpbmc+KCcnKTtcblxuICAvLyBnZXQgZGF0YXNldCBtZXRhIGRhdGFcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBtZXRhRGF0YSA9IGdldERhdGFzZXRDb250ZXh0KHZpc1N0YXRlPy5kYXRhc2V0cywgdmlzU3RhdGU/LmxheWVycyB8fCBbXSk7XG4gICAgc2V0RGF0YXNldE1ldGFEYXRhKG1ldGFEYXRhKTtcbiAgICAvLyByZS1pbml0aWFsaXplIGFzc2lzdGFudCB3aGVuIGRhdGFzZXRzIG9yIGxheWVycyBjaGFuZ2VcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFt2aXNTdGF0ZT8uZGF0YXNldHMsIHZpc1N0YXRlPy5sYXllcnNdKTtcblxuICAvLyB1c2UgZGF0YXNldCBtZXRhIGRhdGEgaW4gTExNIGluc3RydWN0aW9uc1xuICBjb25zdCBpbnN0cnVjdGlvbnMgPSBgJHtJTlNUUlVDVElPTlN9XFxuXFxuJHtkYXRhc2V0TWV0YURhdGF9YDtcblxuICBjb25zdCBvblJlc3RhcnRBc3Npc3RhbnQgPSAoKSA9PiB7XG4gICAgLy8gY2xlYW4gdXAgYWlBc3Npc3RhbnQgc3RhdGVcbiAgICBkaXNwYXRjaCh1cGRhdGVBaUFzc2lzdGFudE1lc3NhZ2VzKFtdKSk7XG4gIH07XG5cbiAgY29uc3Qgb25NZXNzYWdlc1VwZGF0ZWQgPSAobWVzc2FnZXM6IE1lc3NhZ2VNb2RlbFtdKSA9PiB7XG4gICAgZGlzcGF0Y2godXBkYXRlQWlBc3Npc3RhbnRNZXNzYWdlcyhtZXNzYWdlcykpO1xuICB9O1xuXG4gIGNvbnN0IG9uU2NyZWVuc2hvdENsaWNrID0gKCkgPT4ge1xuICAgIGRpc3BhdGNoKHNldFN0YXJ0U2NyZWVuQ2FwdHVyZSh0cnVlKSk7XG4gIH07XG5cbiAgY29uc3Qgb25SZW1vdmVTY3JlZW5zaG90ID0gKCkgPT4ge1xuICAgIGRpc3BhdGNoKHNldFNjcmVlbkNhcHR1cmVkKCcnKSk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8U3R5bGVkQWlBc3Npc3RhbnRDb21wb25lbnQgY2xhc3NOYW1lPVwiYWktYXNzaXN0YW50LWNvbXBvbmVudFwiPlxuICAgICAgPEFpQXNzaXN0YW50XG4gICAgICAgIHsuLi5hc3Npc3RhbnRQcm9wc31cbiAgICAgICAgaW5zdHJ1Y3Rpb25zPXtpbnN0cnVjdGlvbnN9XG4gICAgICAgIHRoZW1lPXt0aGVtZS50ZXh0Q29sb3IgPT09IHRleHRDb2xvckxUID8gJ2xpZ2h0JyA6ICdkYXJrJ31cbiAgICAgICAgd2VsY29tZU1lc3NhZ2U9e1dFTENPTUVfTUVTU0FHRX1cbiAgICAgICAgdGVtcGVyYXR1cmU9e2FpQXNzaXN0YW50Py5jb25maWcudGVtcGVyYXR1cmUgfHwgMH1cbiAgICAgICAgdG9wUD17YWlBc3Npc3RhbnQ/LmNvbmZpZy50b3BQIHx8IDB9XG4gICAgICAgIGluaXRpYWxNZXNzYWdlcz17YWlBc3Npc3RhbnQ/Lm1lc3NhZ2VzfVxuICAgICAgICBvbk1lc3NhZ2VzVXBkYXRlZD17b25NZXNzYWdlc1VwZGF0ZWR9XG4gICAgICAgIGVuYWJsZVZvaWNlPXtlbmFibGVWb2ljZUFuZFNjcmVlbkNhcHR1cmV9XG4gICAgICAgIGVuYWJsZVNjcmVlbkNhcHR1cmU9e2VuYWJsZVZvaWNlQW5kU2NyZWVuQ2FwdHVyZX1cbiAgICAgICAgb25TY3JlZW5zaG90Q2xpY2s9e29uU2NyZWVuc2hvdENsaWNrfVxuICAgICAgICBzY3JlZW5DYXB0dXJlZEJhc2U2ND17YWlBc3Npc3RhbnQ/LnNjcmVlbnNob3RUb0Fzay5zY3JlZW5DYXB0dXJlZCB8fCAnJ31cbiAgICAgICAgb25SZW1vdmVTY3JlZW5zaG90PXtvblJlbW92ZVNjcmVlbnNob3R9XG4gICAgICAgIG9uUmVzdGFydENoYXQ9e29uUmVzdGFydEFzc2lzdGFudH1cbiAgICAgICAgZm9udFNpemU9eyd0ZXh0LXRpbnknfVxuICAgICAgICBib3RNZXNzYWdlQ2xhc3NOYW1lPXsnJ31cbiAgICAgICAgZ2l0aHViSXNzdWVMaW5rPXsnaHR0cHM6Ly9naXRodWIuY29tL2tlcGxlcmdsL2tlcGxlci5nbC9pc3N1ZXMnfVxuICAgICAgICBpZGVhcz17UFJPTVBUX0lERUFTfVxuICAgICAgLz5cbiAgICA8L1N0eWxlZEFpQXNzaXN0YW50Q29tcG9uZW50PlxuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFdBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLGlCQUFBLEdBQUFDLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSSxPQUFBLEdBQUFKLE9BQUE7QUFFQSxJQUFBSyxHQUFBLEdBQUFMLE9BQUE7QUFDQUEsT0FBQTtBQUNBQSxPQUFBO0FBQ0EsSUFBQU0sUUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sVUFBQSxHQUFBUCxPQUFBO0FBUUEsSUFBQVEsTUFBQSxHQUFBUixPQUFBO0FBQ0EsSUFBQVMsTUFBQSxHQUFBVCxPQUFBO0FBQTZDLElBQUFVLGVBQUEsRUFyQjdDO0FBQ0E7QUFBQSxTQUFBQyx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSx5QkFBQUMsQ0FBQSxXQUFBQSxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxLQUFBRixDQUFBO0FBQUEsU0FBQWIsd0JBQUFhLENBQUEsRUFBQUUsQ0FBQSxTQUFBQSxDQUFBLElBQUFGLENBQUEsSUFBQUEsQ0FBQSxDQUFBSSxVQUFBLFNBQUFKLENBQUEsZUFBQUEsQ0FBQSxnQkFBQUssT0FBQSxDQUFBTCxDQUFBLDBCQUFBQSxDQUFBLHNCQUFBQSxDQUFBLFFBQUFHLENBQUEsR0FBQUosd0JBQUEsQ0FBQUcsQ0FBQSxPQUFBQyxDQUFBLElBQUFBLENBQUEsQ0FBQUcsR0FBQSxDQUFBTixDQUFBLFVBQUFHLENBQUEsQ0FBQUksR0FBQSxDQUFBUCxDQUFBLE9BQUFRLENBQUEsS0FBQUMsU0FBQSxVQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMs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
167
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcmVhY3RSZWR1eCIsIl9zdHlsZWRDb21wb25lbnRzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9zdHlsZXMiLCJfY29yZSIsIl91aSIsIl9hY3Rpb25zIiwiX2NvbnN0YW50cyIsIl91dGlscyIsIl90b29scyIsIl90ZW1wbGF0ZU9iamVjdCIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIlN0eWxlZEFpQXNzaXN0YW50Q29tcG9uZW50Iiwic3R5bGVkIiwiZGl2IiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbDIiLCJBaUFzc2lzdGFudENvbXBvbmVudCIsInZpc1N0YXRlIiwidXNlU2VsZWN0b3IiLCJzdGF0ZSIsImRlbW8iLCJrZXBsZXJHbCIsIm1hcCIsImFpQXNzaXN0YW50IiwiZGlzcGF0Y2giLCJ1c2VEaXNwYXRjaCIsInRvb2xzIiwic2V0dXBMTE1Ub29scyIsImVuYWJsZVZvaWNlQW5kU2NyZWVuQ2FwdHVyZSIsImNvbmZpZyIsInByb3ZpZGVyIiwiYXNzaXN0YW50UHJvcHMiLCJuYW1lIiwiQVNTSVNUQU5UX05BTUUiLCJkZXNjcmlwdGlvbiIsIkFTU0lTVEFOVF9ERVNDUklQVElPTiIsInZlcnNpb24iLCJBU1NJU1RBTlRfVkVSU0lPTiIsIm1vZGVsUHJvdmlkZXIiLCJtb2RlbCIsImFwaUtleSIsImJhc2VVcmwiLCJfdXNlU3RhdGUiLCJ1c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheTIiLCJkYXRhc2V0TWV0YURhdGEiLCJzZXREYXRhc2V0TWV0YURhdGEiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImlkZWFzIiwic2V0SWRlYXMiLCJ1c2VFZmZlY3QiLCJtZXRhRGF0YSIsImdldERhdGFzZXRDb250ZXh0IiwiZGF0YXNldHMiLCJsYXllcnMiLCJpbnN0cnVjdGlvbnMiLCJjb25jYXQiLCJJTlNUUlVDVElPTlMiLCJfdXNlQXNzaXN0YW50IiwidXNlQXNzaXN0YW50IiwidGVtcG9yYXJ5UHJvbXB0IiwiZ2VuZXJhdGVJZGVhcyIsIl9yZWYiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsInJlc3BvbnNlIiwibWF0Y2giLCJqc29uIiwid3JhcCIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsInByb21wdCIsIlBST01QVF9JREVBUyIsInRlbXBlcmF0dXJlIiwic2VudCIsIkpTT04iLCJwYXJzZSIsInQwIiwiY29uc29sZSIsImVycm9yIiwic3RvcCIsIm9uUmVzdGFydEFzc2lzdGFudCIsInVwZGF0ZUFpQXNzaXN0YW50TWVzc2FnZXMiLCJvbk1lc3NhZ2VzVXBkYXRlZCIsIm1lc3NhZ2VzIiwib25TY3JlZW5zaG90Q2xpY2siLCJzZXRTdGFydFNjcmVlbkNhcHR1cmUiLCJvblJlbW92ZVNjcmVlbnNob3QiLCJzZXRTY3JlZW5DYXB0dXJlZCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJBaUFzc2lzdGFudCIsIl9leHRlbmRzMiIsInRoZW1lIiwidGV4dENvbG9yIiwidGV4dENvbG9yTFQiLCJ3ZWxjb21lTWVzc2FnZSIsIldFTENPTUVfTUVTU0FHRSIsInRvcFAiLCJpbml0aWFsTWVzc2FnZXMiLCJlbmFibGVWb2ljZSIsImVuYWJsZVNjcmVlbkNhcHR1cmUiLCJzY3JlZW5DYXB0dXJlZEJhc2U2NCIsInNjcmVlbnNob3RUb0FzayIsInNjcmVlbkNhcHR1cmVkIiwib25SZXN0YXJ0Q2hhdCIsImZvbnRTaXplIiwiYm90TWVzc2FnZUNsYXNzTmFtZSIsImdpdGh1Yklzc3VlTGluayIsIm9uUmVmcmVzaElkZWFzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvYWktYXNzaXN0YW50LWNvbXBvbmVudC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IFJlYWN0LCB7dXNlRWZmZWN0LCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHt1c2VEaXNwYXRjaCwgdXNlU2VsZWN0b3J9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHt0ZXh0Q29sb3JMVCwgdGhlbWV9IGZyb20gJ0BrZXBsZXIuZ2wvc3R5bGVzJztcbmltcG9ydCB7TWVzc2FnZU1vZGVsLCB1c2VBc3Npc3RhbnR9IGZyb20gJ0BvcGVuYXNzaXN0YW50L2NvcmUnO1xuaW1wb3J0IHtBaUFzc2lzdGFudH0gZnJvbSAnQG9wZW5hc3Npc3RhbnQvdWknO1xuaW1wb3J0ICdAb3BlbmFzc2lzdGFudC9lY2hhcnRzL2Rpc3QvaW5kZXguY3NzJztcbmltcG9ydCAnQG9wZW5hc3Npc3RhbnQvdWkvZGlzdC9pbmRleC5jc3MnO1xuaW1wb3J0IHtzZXRTY3JlZW5DYXB0dXJlZCwgc2V0U3RhcnRTY3JlZW5DYXB0dXJlLCB1cGRhdGVBaUFzc2lzdGFudE1lc3NhZ2VzfSBmcm9tICcuLi9hY3Rpb25zJztcbmltcG9ydCB7XG4gIEFTU0lTVEFOVF9ERVNDUklQVElPTixcbiAgQVNTSVNUQU5UX05BTUUsXG4gIEFTU0lTVEFOVF9WRVJTSU9OLFxuICBJTlNUUlVDVElPTlMsXG4gIFBST01QVF9JREVBUyxcbiAgV0VMQ09NRV9NRVNTQUdFXG59IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge2dldERhdGFzZXRDb250ZXh0fSBmcm9tICcuLi90b29scy91dGlscyc7XG5pbXBvcnQge3NldHVwTExNVG9vbHN9IGZyb20gJy4uL3Rvb2xzL3Rvb2xzJztcbmltcG9ydCB7U3RhdGV9IGZyb20gJy4vYWktYXNzaXN0YW50LW1hbmFnZXInO1xuXG5jb25zdCBTdHlsZWRBaUFzc2lzdGFudENvbXBvbmVudCA9IHN0eWxlZC5kaXZgXG4gIGhlaWdodDogMTAwJTtcbiAgcGFkZGluZy1ib3R0b206IDRweDtcblxuICAqIHtcbiAgICBmb250LXNpemU6IDExcHg7XG4gIH1cbmA7XG5cbmV4cG9ydCBmdW5jdGlvbiBBaUFzc2lzdGFudENvbXBvbmVudCgpIHtcbiAgY29uc3QgdmlzU3RhdGUgPSB1c2VTZWxlY3Rvcigoc3RhdGU6IFN0YXRlKSA9PiBzdGF0ZS5kZW1vLmtlcGxlckdsLm1hcC52aXNTdGF0ZSk7XG4gIGNvbnN0IGFpQXNzaXN0YW50ID0gdXNlU2VsZWN0b3IoKHN0YXRlOiBTdGF0ZSkgPT4gc3RhdGUuZGVtby5haUFzc2lzdGFudCk7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcblxuICAvLyBkZWZpbmUgTExNIGZ1bmN0aW9uc1xuICBjb25zdCB0b29scyA9IHNldHVwTExNVG9vbHMoe3Zpc1N0YXRlLCBhaUFzc2lzdGFudCwgZGlzcGF0Y2h9KTtcblxuICAvLyBlbmFibGUgdm9pY2UgYW5kIHNjcmVlbiBjYXB0dXJlXG4gIGNvbnN0IGVuYWJsZVZvaWNlQW5kU2NyZWVuQ2FwdHVyZSA9XG4gICAgYWlBc3Npc3RhbnQ/LmNvbmZpZy5wcm92aWRlciA9PT0gJ29wZW5haScgfHwgYWlBc3Npc3RhbnQ/LmNvbmZpZy5wcm92aWRlciA9PT0gJ2dvb2dsZScgfHwgZmFsc2U7XG5cbiAgLy8gZGVmaW5lIGFzc2lzdGFudCBwcm9wc1xuICBjb25zdCBhc3Npc3RhbnRQcm9wcyA9IHtcbiAgICBuYW1lOiBBU1NJU1RBTlRfTkFNRSxcbiAgICBkZXNjcmlwdGlvbjogQVNTSVNUQU5UX0RFU0NSSVBUSU9OLFxuICAgIHZlcnNpb246IEFTU0lTVEFOVF9WRVJTSU9OLFxuICAgIG1vZGVsUHJvdmlkZXI6IGFpQXNzaXN0YW50Py5jb25maWcucHJvdmlkZXIgfHwgJycsXG4gICAgbW9kZWw6IGFpQXNzaXN0YW50Py5jb25maWcubW9kZWwgfHwgJycsXG4gICAgYXBpS2V5OiBhaUFzc2lzdGFudD8uY29uZmlnLmFwaUtleSB8fCAnJyxcbiAgICBiYXNlVXJsOiBhaUFzc2lzdGFudD8uY29uZmlnLmJhc2VVcmwgfHwgJycsXG4gICAgdG9vbHNcbiAgfTtcblxuICBjb25zdCBbZGF0YXNldE1ldGFEYXRhLCBzZXREYXRhc2V0TWV0YURhdGFdID0gdXNlU3RhdGU8c3RyaW5nPignJyk7XG5cbiAgY29uc3QgW2lkZWFzLCBzZXRJZGVhc10gPSB1c2VTdGF0ZTx7dGl0bGU6IHN0cmluZzsgZGVzY3JpcHRpb246IHN0cmluZ31bXT4oW10pO1xuXG4gIC8vIGdldCBkYXRhc2V0IG1ldGEgZGF0YSBhbmQgcmUtaW5pdGlhbGl6ZSBhc3Npc3RhbnQgd2hlbiBkYXRhc2V0cyBvciBsYXllcnMgY2hhbmdlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgbWV0YURhdGEgPSBnZXREYXRhc2V0Q29udGV4dCh2aXNTdGF0ZT8uZGF0YXNldHMsIHZpc1N0YXRlPy5sYXllcnMgfHwgW10pO1xuICAgIHNldERhdGFzZXRNZXRhRGF0YShtZXRhRGF0YSk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbdmlzU3RhdGU/LmRhdGFzZXRzLCB2aXNTdGF0ZT8ubGF5ZXJzXSk7XG5cbiAgLy8gdXNlIGRhdGFzZXQgbWV0YSBkYXRhIGluIExMTSBpbnN0cnVjdGlvbnNcbiAgY29uc3QgaW5zdHJ1Y3Rpb25zID0gYCR7SU5TVFJVQ1RJT05TfVxcblxcbiR7ZGF0YXNldE1ldGFEYXRhfWA7XG5cbiAgLy8gZ2VuZXJhdGUgaWRlYXMgZnJvbSBMTE1cbiAgY29uc3Qge3RlbXBvcmFyeVByb21wdH0gPSB1c2VBc3Npc3RhbnQoey4uLmFzc2lzdGFudFByb3BzLCBpbnN0cnVjdGlvbnN9KTtcblxuICBjb25zdCBnZW5lcmF0ZUlkZWFzID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRlbXBvcmFyeVByb21wdCh7XG4gICAgICAgIHByb21wdDogUFJPTVBUX0lERUFTLFxuICAgICAgICB0ZW1wZXJhdHVyZTogMS4wXG4gICAgICB9KTtcbiAgICAgIC8vIGZpbmQgW3t9LHt9Li4uXSBpbiB0aGUgdGV4dCBhbmQgcGFyc2UgaXQgYXMganNvbiwgaGFuZGxpbmcgd2hpdGVzcGFjZVxuICAgICAgY29uc3QgbWF0Y2ggPSByZXNwb25zZT8ubWF0Y2goL1xcW1xccypcXHsuKlxcfVxccypcXF0vcyk7XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgY29uc3QganNvbiA9IEpTT04ucGFyc2UobWF0Y2hbMF0pO1xuICAgICAgICBzZXRJZGVhcyhqc29uKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZ2VuZXJhdGluZyBpZGVhcycsIGVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBnZXQgaWRlYXMgVUkgY29tcG9uZW50XG4gICAgaWYgKGlkZWFzLmxlbmd0aCA9PT0gMCAmJiBkYXRhc2V0TWV0YURhdGEubGVuZ3RoID4gMCkge1xuICAgICAgZ2VuZXJhdGVJZGVhcygpO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtkYXRhc2V0TWV0YURhdGFdKTtcblxuICBjb25zdCBvblJlc3RhcnRBc3Npc3RhbnQgPSAoKSA9PiB7XG4gICAgLy8gY2xlYW4gdXAgYWlBc3Npc3RhbnQgc3RhdGVcbiAgICBkaXNwYXRjaCh1cGRhdGVBaUFzc2lzdGFudE1lc3NhZ2VzKFtdKSk7XG4gIH07XG5cbiAgY29uc3Qgb25NZXNzYWdlc1VwZGF0ZWQgPSAobWVzc2FnZXM6IE1lc3NhZ2VNb2RlbFtdKSA9PiB7XG4gICAgZGlzcGF0Y2godXBkYXRlQWlBc3Npc3RhbnRNZXNzYWdlcyhtZXNzYWdlcykpO1xuICB9O1xuXG4gIGNvbnN0IG9uU2NyZWVuc2hvdENsaWNrID0gKCkgPT4ge1xuICAgIGRpc3BhdGNoKHNldFN0YXJ0U2NyZWVuQ2FwdHVyZSh0cnVlKSk7XG4gIH07XG5cbiAgY29uc3Qgb25SZW1vdmVTY3JlZW5zaG90ID0gKCkgPT4ge1xuICAgIGRpc3BhdGNoKHNldFNjcmVlbkNhcHR1cmVkKCcnKSk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8U3R5bGVkQWlBc3Npc3RhbnRDb21wb25lbnQgY2xhc3NOYW1lPVwiYWktYXNzaXN0YW50LWNvbXBvbmVudFwiPlxuICAgICAgPEFpQXNzaXN0YW50XG4gICAgICAgIHsuLi5hc3Npc3RhbnRQcm9wc31cbiAgICAgICAgaW5zdHJ1Y3Rpb25zPXtpbnN0cnVjdGlvbnN9XG4gICAgICAgIHRoZW1lPXt0aGVtZS50ZXh0Q29sb3IgPT09IHRleHRDb2xvckxUID8gJ2xpZ2h0JyA6ICdkYXJrJ31cbiAgICAgICAgd2VsY29tZU1lc3NhZ2U9e1dFTENPTUVfTUVTU0FHRX1cbiAgICAgICAgdGVtcGVyYXR1cmU9e2FpQXNzaXN0YW50Py5jb25maWcudGVtcGVyYXR1cmUgfHwgMH1cbiAgICAgICAgdG9wUD17YWlBc3Npc3RhbnQ/LmNvbmZpZy50b3BQIHx8IDB9XG4gICAgICAgIGluaXRpYWxNZXNzYWdlcz17YWlBc3Npc3RhbnQ/Lm1lc3NhZ2VzfVxuICAgICAgICBvbk1lc3NhZ2VzVXBkYXRlZD17b25NZXNzYWdlc1VwZGF0ZWR9XG4gICAgICAgIGVuYWJsZVZvaWNlPXtlbmFibGVWb2ljZUFuZFNjcmVlbkNhcHR1cmV9XG4gICAgICAgIGVuYWJsZVNjcmVlbkNhcHR1cmU9e2VuYWJsZVZvaWNlQW5kU2NyZWVuQ2FwdHVyZX1cbiAgICAgICAgb25TY3JlZW5zaG90Q2xpY2s9e29uU2NyZWVuc2hvdENsaWNrfVxuICAgICAgICBzY3JlZW5DYXB0dXJlZEJhc2U2ND17YWlBc3Npc3RhbnQ/LnNjcmVlbnNob3RUb0Fzay5zY3JlZW5DYXB0dXJlZCB8fCAnJ31cbiAgICAgICAgb25SZW1vdmVTY3JlZW5zaG90PXtvblJlbW92ZVNjcmVlbnNob3R9XG4gICAgICAgIG9uUmVzdGFydENoYXQ9e29uUmVzdGFydEFzc2lzdGFudH1cbiAgICAgICAgZm9udFNpemU9eyd0ZXh0LXRpbnknfVxuICAgICAgICBib3RNZXNzYWdlQ2xhc3NOYW1lPXsnJ31cbiAgICAgICAgZ2l0aHViSXNzdWVMaW5rPXsnaHR0cHM6Ly9naXRodWIuY29tL2tlcGxlcmdsL2tlcGxlci5nbC9pc3N1ZXMnfVxuICAgICAgICBpZGVhcz17aWRlYXN9XG4gICAgICAgIG9uUmVmcmVzaElkZWFzPXtnZW5lcmF0ZUlkZWFzfVxuICAgICAgLz5cbiAgICA8L1N0eWxlZEFpQXNzaXN0YW50Q29tcG9uZW50PlxuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFdBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLGlCQUFBLEdBQUFDLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSSxPQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxLQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxHQUFBLEdBQUFOLE9BQUE7QUFDQUEs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
@@ -20,7 +20,7 @@ var _usehooksTs = require("usehooks-ts");
20
20
  var _core = require("@openassistant/core");
21
21
  var _actions = require("../actions");
22
22
  var _reactIntl = require("react-intl");
23
- var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7; // SPDX-License-Identifier: MIT
23
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8; // SPDX-License-Identifier: MIT
24
24
  // Copyright contributors to the kepler.gl project
25
25
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
26
26
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
@@ -40,13 +40,17 @@ var StyledAiAssistantConfig = _styledComponents["default"].div(_templateObject2
40
40
  }, function (props) {
41
41
  return props.theme.geocoderInputHeight;
42
42
  });
43
- var StyledWrapper = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n justify-content: space-between;\n align-items: center;\n"])));
44
- var StyledItemSelector = (0, _styledComponents["default"])(_components.ItemSelector)(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n .item-selector__dropdown {\n padding-left: 10px;\n border-radius: 4px;\n }\n .active {\n border-color: ", ";\n border-radius: 4px 4px 0px 0px !important;\n }\n width: 100%;\n"])), function (props) {
43
+
44
+ // Ollama model input wrapper: checkbox + 'Input Model Name:' + input
45
+ // all children element have width based on the content
46
+ var OllamaModelInputWrapper = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: row;\n gap: 4px;\n align-items: center;\n"])));
47
+ var StyledWrapper = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n justify-content: space-between;\n align-items: center;\n"])));
48
+ var StyledItemSelector = (0, _styledComponents["default"])(_components.ItemSelector)(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n .item-selector__dropdown {\n padding-left: 10px;\n border-radius: 4px;\n }\n .active {\n border-color: ", ";\n border-radius: 4px 4px 0px 0px !important;\n }\n width: 100%;\n"])), function (props) {
45
49
  return props.theme.activeColor;
46
50
  });
47
- var StyleSliderWrapper = _styledComponents["default"].div(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n width: 100%;\n align-self: flex-start;\n height: 32px;\n display: flex;\n align-items: center;\n .kg-range-slider__input {\n height: 32px;\n text-align: center;\n padding: 3px 6px;\n }\n .kg-slider {\n padding-left: 6px;\n }\n .kg-range-slider {\n padding: 0px !important;\n }\n"])));
48
- var StyledButton = _styledComponents["default"].div(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n width: 100%;\n align-self: flex-start;\n margin-top: 12px;\n\n button div {\n display: flex;\n align-items: center;\n gap: 4px;\n margin-right: 4px;\n }\n"])));
49
- var StyleErrorMessage = _styledComponents["default"].div(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["\n font-size: ", ";\n background-color: ", ";\n border-radius: 4px;\n padding: 4px 8px;\n color: ", ";\n"])), function (props) {
51
+ var StyleSliderWrapper = _styledComponents["default"].div(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n width: 100%;\n align-self: flex-start;\n height: 32px;\n display: flex;\n align-items: center;\n .kg-range-slider__input {\n height: 32px;\n text-align: center;\n padding: 3px 6px;\n }\n .kg-slider {\n padding-left: 6px;\n }\n .kg-range-slider {\n padding: 0px !important;\n }\n"])));
52
+ var StyledButton = _styledComponents["default"].div(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["\n width: 100%;\n align-self: flex-start;\n margin-top: 12px;\n\n button div {\n display: flex;\n align-items: center;\n gap: 4px;\n margin-right: 4px;\n }\n"])));
53
+ var StyleErrorMessage = _styledComponents["default"].div(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2["default"])(["\n font-size: ", ";\n background-color: ", ";\n border-radius: 4px;\n padding: 4px 8px;\n color: ", ";\n"])), function (props) {
50
54
  return props.theme.primaryBtnFontSizeDefault;
51
55
  }, function (props) {
52
56
  return props.theme.errorColor;
@@ -80,7 +84,7 @@ function AiAssistantConfig() {
80
84
  _useLocalStorage10 = (0, _slicedToArray2["default"])(_useLocalStorage9, 2),
81
85
  topP = _useLocalStorage10[0],
82
86
  setTopP = _useLocalStorage10[1];
83
- var _useLocalStorage11 = (0, _usehooksTs.useLocalStorage)('ai-assistant-base-url', aiAssistantConfig.baseUrl || 'http://localhost:11434'),
87
+ var _useLocalStorage11 = (0, _usehooksTs.useLocalStorage)('ai-assistant-base-url', aiAssistantConfig.baseUrl || 'http://localhost:11434/api'),
84
88
  _useLocalStorage12 = (0, _slicedToArray2["default"])(_useLocalStorage11, 2),
85
89
  baseUrl = _useLocalStorage12[0],
86
90
  setBaseUrl = _useLocalStorage12[1];
@@ -90,16 +94,24 @@ function AiAssistantConfig() {
90
94
  setMapboxToken = _useLocalStorage14[1];
91
95
  var _useState = (0, _react.useState)(false),
92
96
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
93
- connectionError = _useState2[0],
94
- setConnectionError = _useState2[1];
97
+ ollamaModelInputChecked = _useState2[0],
98
+ setOllamaModelInputChecked = _useState2[1];
95
99
  var _useState3 = (0, _react.useState)(''),
96
100
  _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
97
- errorMessage = _useState4[0],
98
- setErrorMessage = _useState4[1];
101
+ ollamaModelInputValue = _useState4[0],
102
+ setOllamaModelInputValue = _useState4[1];
99
103
  var _useState5 = (0, _react.useState)(false),
100
104
  _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
101
- isRunning = _useState6[0],
102
- setIsRunning = _useState6[1];
105
+ connectionError = _useState6[0],
106
+ setConnectionError = _useState6[1];
107
+ var _useState7 = (0, _react.useState)(''),
108
+ _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
109
+ errorMessage = _useState8[0],
110
+ setErrorMessage = _useState8[1];
111
+ var _useState9 = (0, _react.useState)(false),
112
+ _useState10 = (0, _slicedToArray2["default"])(_useState9, 2),
113
+ isRunning = _useState10[0],
114
+ setIsRunning = _useState10[1];
103
115
  var onAiProviderSelect = function onAiProviderSelect(value) {
104
116
  if (typeof value === 'string') {
105
117
  setProvider(value);
@@ -133,6 +145,17 @@ function AiAssistantConfig() {
133
145
  var onMapboxTokenChange = function onMapboxTokenChange(e) {
134
146
  setMapboxToken(e.target.value);
135
147
  };
148
+ var onOllamaModelInputChecked = function onOllamaModelInputChecked(e) {
149
+ setOllamaModelInputChecked(e.target.checked);
150
+ if (!e.target.checked) {
151
+ // use model from selector
152
+ setModel('');
153
+ }
154
+ };
155
+ var onOllamaModelInputValueChange = function onOllamaModelInputValueChange(e) {
156
+ setOllamaModelInputValue(e.target.value);
157
+ setModel(e.target.value);
158
+ };
136
159
  var onStartChat = /*#__PURE__*/function () {
137
160
  var _ref = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
138
161
  var timeoutPromise, AssistantModel, success, _errorMessage;
@@ -208,11 +231,11 @@ function AiAssistantConfig() {
208
231
  showArrow: true
209
232
  })), /*#__PURE__*/_react["default"].createElement(_components.PanelLabelWrapper, null, /*#__PURE__*/_react["default"].createElement(SectionTitle, null, /*#__PURE__*/_react["default"].createElement(_reactIntl.FormattedMessage, {
210
233
  id: "aiAssistantManager.llmModel.title"
211
- }))), /*#__PURE__*/_react["default"].createElement(StyledWrapper, null, /*#__PURE__*/_react["default"].createElement(StyledItemSelector, {
234
+ }))), (provider === 'ollama' && !ollamaModelInputChecked || provider !== 'ollama') && /*#__PURE__*/_react["default"].createElement(StyledWrapper, null, /*#__PURE__*/_react["default"].createElement(StyledItemSelector, {
212
235
  selectedItems: model,
213
236
  options: _models["default"][provider],
214
237
  multiSelect: false,
215
- disabled: false,
238
+ disabled: provider === 'ollama' ? ollamaModelInputChecked : false,
216
239
  placeholder: "Select LLM Model",
217
240
  onChange: onLLMModelSelect,
218
241
  filterOption: "name",
@@ -224,6 +247,21 @@ function AiAssistantConfig() {
224
247
  },
225
248
  searchable: false,
226
249
  showArrow: true
250
+ })), provider === 'ollama' && /*#__PURE__*/_react["default"].createElement(OllamaModelInputWrapper, null, /*#__PURE__*/_react["default"].createElement("div", {
251
+ style: {
252
+ width: '250px'
253
+ }
254
+ }, /*#__PURE__*/_react["default"].createElement(_components.Checkbox, {
255
+ id: "ollama-model-input",
256
+ label: "Input Model Name",
257
+ onChange: onOllamaModelInputChecked,
258
+ checked: ollamaModelInputChecked
259
+ })), /*#__PURE__*/_react["default"].createElement(_components.Input, {
260
+ type: "text",
261
+ onChange: onOllamaModelInputValueChange,
262
+ placeholder: "Enter Model Name",
263
+ value: ollamaModelInputValue,
264
+ disabled: !ollamaModelInputChecked
227
265
  })), provider !== 'ollama' ? /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_components.PanelLabelWrapper, null, /*#__PURE__*/_react["default"].createElement(SectionTitle, null, /*#__PURE__*/_react["default"].createElement(_reactIntl.FormattedMessage, {
228
266
  id: "aiAssistantManager.apiKey.placeholder"
229
267
  }))), /*#__PURE__*/_react["default"].createElement("div", {
@@ -276,7 +314,7 @@ function AiAssistantConfig() {
276
314
  onChange: onTopPChange,
277
315
  range: [0, 1],
278
316
  step: 0.1
279
- })), /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_components.PanelLabelWrapper, null, /*#__PURE__*/_react["default"].createElement(SectionTitle, null, "Mapbox Token (optional: route/isochrone)")), /*#__PURE__*/_react["default"].createElement("div", {
317
+ })), /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_components.PanelLabelWrapper, null, /*#__PURE__*/_react["default"].createElement(SectionTitle, null, "Mapbox Token (optional for route/isochrone)")), /*#__PURE__*/_react["default"].createElement("div", {
280
318
  className: "api-key-input"
281
319
  }, /*#__PURE__*/_react["default"].createElement("div", {
282
320
  className: "api-key-input__icon"
@@ -296,4 +334,4 @@ function AiAssistantConfig() {
296
334
  id: "aiAssistantManager.startChat"
297
335
  }))));
298
336
  }
299
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcmVhY3RSZWR1eCIsIl9jb21wb25lbnRzIiwiX2FwaUtleSIsIl9tb2RlbHMiLCJfdXNlaG9va3NUcyIsIl9jb3JlIiwiX2FjdGlvbnMiLCJfcmVhY3RJbnRsIiwiX3RlbXBsYXRlT2JqZWN0IiwiX3RlbXBsYXRlT2JqZWN0MiIsIl90ZW1wbGF0ZU9iamVjdDMiLCJfdGVtcGxhdGVPYmplY3Q0IiwiX3RlbXBsYXRlT2JqZWN0NSIsIl90ZW1wbGF0ZU9iamVjdDYiLCJfdGVtcGxhdGVPYmplY3Q3IiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiU2VjdGlvblRpdGxlIiwic3R5bGVkIiwiZGl2IiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbDIiLCJwcm9wcyIsInRoZW1lIiwiaW5wdXRGb250U2l6ZSIsImVmZmVjdFBhbmVsVGV4dFNlY29uZGFyeTEiLCJTdHlsZWRBaUFzc2lzdGFudENvbmZpZyIsInByaW1hcnlCdG5Gb250U2l6ZURlZmF1bHQiLCJib3hTaGFkb3ciLCJnZW9jb2RlcklucHV0SGVpZ2h0Iiwic3VidGV4dENvbG9yIiwiU3R5bGVkV3JhcHBlciIsIlN0eWxlZEl0ZW1TZWxlY3RvciIsIkl0ZW1TZWxlY3RvciIsImFjdGl2ZUNvbG9yIiwiU3R5bGVTbGlkZXJXcmFwcGVyIiwiU3R5bGVkQnV0dG9uIiwiU3R5bGVFcnJvck1lc3NhZ2UiLCJlcnJvckNvbG9yIiwiZXJyb3JUZXh0Q29sb3IiLCJSYW5nZVNsaWRlciIsImFwcEluamVjdG9yIiwiUmFuZ2VTbGlkZXJGYWN0b3J5IiwiQWlBc3Npc3RhbnRDb25maWciLCJkaXNwYXRjaCIsInVzZURpc3BhdGNoIiwiYWlBc3Npc3RhbnRDb25maWciLCJ1c2VTZWxlY3RvciIsInN0YXRlIiwiZGVtbyIsImFpQXNzaXN0YW50IiwiY29uZmlnIiwiaW50bCIsInVzZUludGwiLCJfdXNlTG9jYWxTdG9yYWdlIiwidXNlTG9jYWxTdG9yYWdlIiwicHJvdmlkZXIiLCJfdXNlTG9jYWxTdG9yYWdlMiIsIl9zbGljZWRUb0FycmF5MiIsInNldFByb3ZpZGVyIiwiX3VzZUxvY2FsU3RvcmFnZTMiLCJtb2RlbCIsIlBST1ZJREVSX01PREVMUyIsIl91c2VMb2NhbFN0b3JhZ2U0Iiwic2V0TW9kZWwiLCJfdXNlTG9jYWxTdG9yYWdlNSIsImFwaUtleSIsIl91c2VMb2NhbFN0b3JhZ2U2Iiwic2V0QXBpS2V5IiwiX3VzZUxvY2FsU3RvcmFnZTciLCJ0ZW1wZXJhdHVyZSIsIl91c2VMb2NhbFN0b3JhZ2U4Iiwic2V0VGVtcGVyYXR1cmUiLCJfdXNlTG9jYWxTdG9yYWdlOSIsInRvcFAiLCJfdXNlTG9jYWxTdG9yYWdlMTAiLCJzZXRUb3BQIiwiX3VzZUxvY2FsU3RvcmFnZTExIiwiYmFzZVVybCIsIl91c2VMb2NhbFN0b3JhZ2UxMiIsInNldEJhc2VVcmwiLCJfdXNlTG9jYWxTdG9yYWdlMTMiLCJtYXBib3hUb2tlbiIsIl91c2VMb2NhbFN0b3JhZ2UxNCIsInNldE1hcGJveFRva2VuIiwiX3VzZVN0YXRlIiwidXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiY29ubmVjdGlvbkVycm9yIiwic2V0Q29ubmVjdGlvbkVycm9yIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJlcnJvck1lc3NhZ2UiLCJzZXRFcnJvck1lc3NhZ2UiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImlzUnVubmluZyIsInNldElzUnVubmluZyIsIm9uQWlQcm92aWRlclNlbGVjdCIsInZhbHVlIiwib25MTE1Nb2RlbFNlbGVjdCIsIm9uQXBpS2V5Q2hhbmdlIiwidGFyZ2V0Iiwib25UZW1wZXJhdHVyZUNoYW5nZSIsIm9uVG9wUENoYW5nZSIsIm9uQmFzZVVybENoYW5nZSIsIm9uTWFwYm94VG9rZW5DaGFuZ2UiLCJvblN0YXJ0Q2hhdCIsIl9yZWYiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsInRpbWVvdXRQcm9taXNlIiwiQXNzaXN0YW50TW9kZWwiLCJzdWNjZXNzIiwiX2Vycm9yTWVzc2FnZSIsIndyYXAiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJQcm9taXNlIiwiXyIsInJlamVjdCIsInNldFRpbWVvdXQiLCJFcnJvciIsIkdldEFzc2lzdGFudE1vZGVsQnlQcm92aWRlciIsInJhY2UiLCJ0ZXN0Q29ubmVjdGlvbiIsInNlbnQiLCJ1cGRhdGVBaUFzc2lzdGFudENvbmZpZyIsImlzUmVhZHkiLCJ0MCIsIm1lc3NhZ2UiLCJmaW5pc2giLCJzdG9wIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwiUGFuZWxMYWJlbFdyYXBwZXIiLCJGb3JtYXR0ZWRNZXNzYWdlIiwiaWQiLCJzZWxlY3RlZEl0ZW1zIiwib3B0aW9ucyIsImtleXMiLCJtdWx0aVNlbGVjdCIsImRpc2FibGVkIiwib25DaGFuZ2UiLCJmaWx0ZXJPcHRpb24iLCJnZXRPcHRpb25WYWx1ZSIsIm9wIiwiZGlzcGxheU9wdGlvbiIsInNlYXJjaGFibGUiLCJzaG93QXJyb3ciLCJwbGFjZWhvbGRlciIsIkZyYWdtZW50IiwiaGVpZ2h0IiwiSW5wdXQiLCJ0eXBlIiwiZm9ybWF0TWVzc2FnZSIsInNob3dJbnB1dCIsImlzUmFuZ2VkIiwidmFsdWUwIiwidmFsdWUxIiwicmFuZ2UiLCJzdGVwIiwiQnV0dG9uIiwib25DbGljayIsIndpZHRoIiwiTG9hZGluZ1NwaW5uZXIiLCJzaXplIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvYWktYXNzaXN0YW50LWNvbmZpZy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IFJlYWN0LCB7dXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHt1c2VTZWxlY3RvciwgdXNlRGlzcGF0Y2h9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7XG4gIElucHV0LFxuICBQYW5lbExhYmVsV3JhcHBlcixcbiAgSXRlbVNlbGVjdG9yLFxuICBSYW5nZVNsaWRlckZhY3RvcnksXG4gIEJ1dHRvbixcbiAgTG9hZGluZ1NwaW5uZXIsXG4gIGFwcEluamVjdG9yXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29tcG9uZW50cyc7XG5pbXBvcnQge1N0YXRlfSBmcm9tICcuLi9pbmRleCc7XG5pbXBvcnQgQXBpS2V5IGZyb20gJy4uL2ljb25zL2FwaS1rZXknO1xuaW1wb3J0IFBST1ZJREVSX01PREVMUyBmcm9tICcuLi9jb25maWcvbW9kZWxzLmpzb24nO1xuaW1wb3J0IHt1c2VMb2NhbFN0b3JhZ2V9IGZyb20gJ3VzZWhvb2tzLXRzJztcbmltcG9ydCB7R2V0QXNzaXN0YW50TW9kZWxCeVByb3ZpZGVyfSBmcm9tICdAb3BlbmFzc2lzdGFudC9jb3JlJztcbmltcG9ydCB7dXBkYXRlQWlBc3Npc3RhbnRDb25maWd9IGZyb20gJy4uL2FjdGlvbnMnO1xuaW1wb3J0IHtGb3JtYXR0ZWRNZXNzYWdlLCB1c2VJbnRsfSBmcm9tICdyZWFjdC1pbnRsJztcblxuY29uc3QgU2VjdGlvblRpdGxlID0gc3R5bGVkLmRpdmBcbiAgZm9udC1zaXplOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmlucHV0Rm9udFNpemV9O1xuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5lZmZlY3RQYW5lbFRleHRTZWNvbmRhcnkxfTtcbiAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XG5gO1xuXG5jb25zdCBTdHlsZWRBaUFzc2lzdGFudENvbmZpZyA9IHN0eWxlZC5kaXZgXG4gIHBhZGRpbmc6IDEycHg7XG4gIGZvbnQtc2l6ZTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5wcmltYXJ5QnRuRm9udFNpemVEZWZhdWx0fTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ2FwOiAxMnB4O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuXG4gIC5hcGkta2V5LWlucHV0IHtcbiAgICBib3gtc2hhZG93OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmJveFNoYWRvd307XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgLmFwaS1rZXktaW5wdXRfX2ljb24ge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgaGVpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmdlb2NvZGVySW5wdXRIZWlnaHR9cHg7XG4gICAgICB3aWR0aDogMzBweDtcbiAgICAgIHBhZGRpbmctbGVmdDogNnB4O1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnN1YnRleHRDb2xvcn07XG4gICAgfVxuXG4gICAgaW5wdXQge1xuICAgICAgcGFkZGluZzogNHB4IDM2cHg7XG4gICAgICBoZWlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuZ2VvY29kZXJJbnB1dEhlaWdodH1weDtcbiAgICAgIGNhcmV0LWNvbG9yOiB1bnNldDtcbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFN0eWxlZFdyYXBwZXIgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5gO1xuXG5jb25zdCBTdHlsZWRJdGVtU2VsZWN0b3IgPSBzdHlsZWQoSXRlbVNlbGVjdG9yKWBcbiAgLml0ZW0tc2VsZWN0b3JfX2Ryb3Bkb3duIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICB9XG4gIC5hY3RpdmUge1xuICAgIGJvcmRlci1jb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5hY3RpdmVDb2xvcn07XG4gICAgYm9yZGVyLXJhZGl1czogNHB4IDRweCAwcHggMHB4ICFpbXBvcnRhbnQ7XG4gIH1cbiAgd2lkdGg6IDEwMCU7XG5gO1xuXG5jb25zdCBTdHlsZVNsaWRlcldyYXBwZXIgPSBzdHlsZWQuZGl2YFxuICB3aWR0aDogMTAwJTtcbiAgYWxpZ24tc2VsZjogZmxleC1zdGFydDtcbiAgaGVpZ2h0OiAzMnB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAua2ctcmFuZ2Utc2xpZGVyX19pbnB1dCB7XG4gICAgaGVpZ2h0OiAzMnB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBwYWRkaW5nOiAzcHggNnB4O1xuICB9XG4gIC5rZy1zbGlkZXIge1xuICAgIHBhZGRpbmctbGVmdDogNnB4O1xuICB9XG4gIC5rZy1yYW5nZS1zbGlkZXIge1xuICAgIHBhZGRpbmc6IDBweCAhaW1wb3J0YW50O1xuICB9XG5gO1xuXG5jb25zdCBTdHlsZWRCdXR0b24gPSBzdHlsZWQuZGl2YFxuICB3aWR0aDogMTAwJTtcbiAgYWxpZ24tc2VsZjogZmxleC1zdGFydDtcbiAgbWFyZ2luLXRvcDogMTJweDtcblxuICBidXR0b24gZGl2IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiA0cHg7XG4gICAgbWFyZ2luLXJpZ2h0OiA0cHg7XG4gIH1cbmA7XG5cbmNvbnN0IFN0eWxlRXJyb3JNZXNzYWdlID0gc3R5bGVkLmRpdmBcbiAgZm9udC1zaXplOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnByaW1hcnlCdG5Gb250U2l6ZURlZmF1bHR9O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmVycm9yQ29sb3J9O1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIHBhZGRpbmc6IDRweCA4cHg7XG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmVycm9yVGV4dENvbG9yfTtcbmA7XG5cbmNvbnN0IFJhbmdlU2xpZGVyID0gYXBwSW5qZWN0b3IuZ2V0KFJhbmdlU2xpZGVyRmFjdG9yeSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBBaUFzc2lzdGFudENvbmZpZygpIHtcbiAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xuICBjb25zdCBhaUFzc2lzdGFudENvbmZpZyA9IHVzZVNlbGVjdG9yKChzdGF0ZTogU3RhdGUpID0+IHN0YXRlLmRlbW8uYWlBc3Npc3RhbnQuY29uZmlnKTtcbiAgY29uc3QgaW50bCA9IHVzZUludGwoKTtcblxuICBjb25zdCBbcHJvdmlkZXIsIHNldFByb3ZpZGVyXSA9IHVzZUxvY2FsU3RvcmFnZShcbiAgICAnYWktYXNzaXN0YW50LXByb3ZpZGVyJyxcbiAgICBhaUFzc2lzdGFudENvbmZpZy5wcm92aWRlciB8fCAnb3BlbmFpJ1xuICApO1xuICBjb25zdCBbbW9kZWwsIHNldE1vZGVsXSA9IHVzZUxvY2FsU3RvcmFnZShcbiAgICAnYWktYXNzaXN0YW50LW1vZGVsJyxcbiAgICBhaUFzc2lzdGFudENvbmZpZy5tb2RlbCB8fCBQUk9WSURFUl9NT0RFTFNbcHJvdmlkZXJdWzBdXG4gICk7XG4gIGNvbnN0IFthcGlLZXksIHNldEFwaUtleV0gPSB1c2VMb2NhbFN0b3JhZ2UoXG4gICAgJ2FpLWFzc2lzdGFudC1hcGkta2V5JyxcbiAgICBhaUFzc2lzdGFudENvbmZpZy5hcGlLZXkgfHwgJydcbiAgKTtcbiAgY29uc3QgW3RlbXBlcmF0dXJlLCBzZXRUZW1wZXJhdHVyZV0gPSB1c2VMb2NhbFN0b3JhZ2UoXG4gICAgJ2FpLWFzc2lzdGFudC10ZW1wZXJhdHVyZScsXG4gICAgYWlBc3Npc3RhbnRDb25maWcudGVtcGVyYXR1cmUgfHwgMC4wXG4gICk7XG4gIGNvbnN0IFt0b3BQLCBzZXRUb3BQXSA9IHVzZUxvY2FsU3RvcmFnZSgnYWktYXNzaXN0YW50LXRvcC1wJywgYWlBc3Npc3RhbnRDb25maWcudG9wUCB8fCAxLjApO1xuICBjb25zdCBbYmFzZVVybCwgc2V0QmFzZVVybF0gPSB1c2VMb2NhbFN0b3JhZ2UoXG4gICAgJ2FpLWFzc2lzdGFudC1iYXNlLXVybCcsXG4gICAgYWlBc3Npc3RhbnRDb25maWcuYmFzZVVybCB8fCAnaHR0cDovL2xvY2FsaG9zdDoxMTQzNCdcbiAgKTtcbiAgY29uc3QgW21hcGJveFRva2VuLCBzZXRNYXBib3hUb2tlbl0gPSB1c2VMb2NhbFN0b3JhZ2UoXG4gICAgJ2FpLWFzc2lzdGFudC1tYXBib3gtdG9rZW4nLFxuICAgIGFpQXNzaXN0YW50Q29uZmlnLm1hcGJveFRva2VuIHx8ICcnXG4gICk7XG4gIGNvbnN0IFtjb25uZWN0aW9uRXJyb3IsIHNldENvbm5lY3Rpb25FcnJvcl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtlcnJvck1lc3NhZ2UsIHNldEVycm9yTWVzc2FnZV0gPSB1c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtpc1J1bm5pbmcsIHNldElzUnVubmluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3Qgb25BaVByb3ZpZGVyU2VsZWN0ID0gKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgb2JqZWN0IHwgbnVsbCkgPT4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBzZXRQcm92aWRlcih2YWx1ZSk7XG4gICAgICBzZXRNb2RlbChQUk9WSURFUl9NT0RFTFNbdmFsdWVdWzBdKTtcbiAgICAgIHNldENvbm5lY3Rpb25FcnJvcihmYWxzZSk7XG4gICAgICBzZXRFcnJvck1lc3NhZ2UoJycpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBvbkxMTU1vZGVsU2VsZWN0ID0gKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgb2JqZWN0IHwgbnVsbCkgPT4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBzZXRNb2RlbCh2YWx1ZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG9uQXBpS2V5Q2hhbmdlID0gKGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgc2V0QXBpS2V5KGUudGFyZ2V0LnZhbHVlKTtcbiAgICAvLyByZXNldCBwcmV2aW91cyBrZXkgZXJyb3IgaWYgYW55XG4gICAgc2V0Q29ubmVjdGlvbkVycm9yKGZhbHNlKTtcbiAgICBzZXRFcnJvck1lc3NhZ2UoJycpO1xuICB9O1xuXG4gIGNvbnN0IG9uVGVtcGVyYXR1cmVDaGFuZ2UgPSAodmFsdWU6IG51bWJlcltdKSA9PiB7XG4gICAgc2V0VGVtcGVyYXR1cmUodmFsdWVbMV0pO1xuICB9O1xuXG4gIGNvbnN0IG9uVG9wUENoYW5nZSA9ICh2YWx1ZTogbnVtYmVyW10pID0+IHtcbiAgICBzZXRUb3BQKHZhbHVlWzFdKTtcbiAgfTtcblxuICBjb25zdCBvbkJhc2VVcmxDaGFuZ2UgPSAoZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICBzZXRCYXNlVXJsKGUudGFyZ2V0LnZhbHVlKTtcbiAgICBzZXRDb25uZWN0aW9uRXJyb3IoZmFsc2UpO1xuICAgIHNldEVycm9yTWVzc2FnZSgnJyk7XG4gIH07XG5cbiAgY29uc3Qgb25NYXBib3hUb2tlbkNoYW5nZSA9IChlOiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgIHNldE1hcGJveFRva2VuKGUudGFyZ2V0LnZhbHVlKTtcbiAgfTtcblxuICBjb25zdCBvblN0YXJ0Q2hhdCA9IGFzeW5jICgpID0+IHtcbiAgICBzZXRJc1J1bm5pbmcodHJ1ZSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRpbWVvdXRQcm9taXNlID0gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoJ0Nvbm5lY3Rpb24gdGltZW91dCBhZnRlciAxNSBzZWNvbmRzJykpLCAxNTAwMCk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgQXNzaXN0YW50TW9kZWwgPSBHZXRBc3Npc3RhbnRNb2RlbEJ5UHJvdmlkZXIoe1xuICAgICAgICBwcm92aWRlcjogcHJvdmlkZXJcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBzdWNjZXNzID0gKGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIEFzc2lzdGFudE1vZGVsPy50ZXN0Q29ubmVjdGlvbihhcGlLZXksIG1vZGVsKSxcbiAgICAgICAgdGltZW91dFByb21pc2VcbiAgICAgIF0pKSBhcyBib29sZWFuO1xuXG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSAhc3VjY2Vzc1xuICAgICAgICA/IHByb3ZpZGVyID09PSAnb2xsYW1hJ1xuICAgICAgICAgID8gJ0Nvbm5lY3Rpb24gZmFpbGVkOiBtYXliZSBpbnZhbGlkIE9sbGFtYSBCYXNlIFVSTCdcbiAgICAgICAgICA6ICdDb25uZWN0aW9uIGZhaWxlZDogbWF5YmUgaW52YWxpZCBBUEkgS2V5J1xuICAgICAgICA6ICcnO1xuICAgICAgc2V0Q29ubmVjdGlvbkVycm9yKCFzdWNjZXNzKTtcbiAgICAgIHNldEVycm9yTWVzc2FnZShlcnJvck1lc3NhZ2UpO1xuICAgICAgZGlzcGF0Y2goXG4gICAgICAgIHVwZGF0ZUFpQXNzaXN0YW50Q29uZmlnKHtcbiAgICAgICAgICBwcm92aWRlcjogcHJvdmlkZXIsXG4gICAgICAgICAgbW9kZWw6IG1vZGVsLFxuICAgICAgICAgIGFwaUtleTogYXBpS2V5LFxuICAgICAgICAgIGJhc2VVcmw6IGJhc2VVcmwsXG4gICAgICAgICAgaXNSZWFkeTogc3VjY2VzcyxcbiAgICAgICAgICB0ZW1wZXJhdHVyZTogdGVtcGVyYXR1cmUsXG4gICAgICAgICAgdG9wUDogdG9wUCxcbiAgICAgICAgICBtYXBib3hUb2tlbjogbWFwYm94VG9rZW5cbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHNldENvbm5lY3Rpb25FcnJvcih0cnVlKTtcbiAgICAgIHNldEVycm9yTWVzc2FnZShlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdDb25uZWN0aW9uIGZhaWxlZCcpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRJc1J1bm5pbmcoZmFsc2UpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxTdHlsZWRBaUFzc2lzdGFudENvbmZpZyBjbGFzc05hbWU9XCJhaS1hc3Npc3RhbnQtY29uZmlnX190eXBlXCI+XG4gICAgICA8UGFuZWxMYWJlbFdyYXBwZXI+XG4gICAgICAgIDxTZWN0aW9uVGl0bGU+XG4gICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJhaUFzc2lzdGFudE1hbmFnZXIuYWlQcm92aWRlclwiIC8+XG4gICAgICAgIDwvU2VjdGlvblRpdGxlPlxuICAgICAgPC9QYW5lbExhYmVsV3JhcHBlcj5cbiAgICAgIDxTdHlsZWRXcmFwcGVyPlxuICAgICAgICA8U3R5bGVkSXRlbVNlbGVjdG9yXG4gICAgICAgICAgc2VsZWN0ZWRJdGVtcz17cHJvdmlkZXJ9XG4gICAgICAgICAgb3B0aW9ucz17T2JqZWN0LmtleXMoUFJPVklERVJfTU9ERUxTKX1cbiAgICAgICAgICBtdWx0aVNlbGVjdD17ZmFsc2V9XG4gICAgICAgICAgZGlzYWJsZWQ9e2ZhbHNlfVxuICAgICAgICAgIG9uQ2hhbmdlPXtvbkFpUHJvdmlkZXJTZWxlY3R9XG4gICAgICAgICAgZmlsdGVyT3B0aW9uPVwibmFtZVwiXG4gICAgICAgICAgZ2V0T3B0aW9uVmFsdWU9e29wID0+IG9wfVxuICAgICAgICAgIGRpc3BsYXlPcHRpb249e29wID0+IG9wfVxuICAgICAgICAgIHNlYXJjaGFibGU9e2ZhbHNlfVxuICAgICAgICAgIHNob3dBcnJvdz17dHJ1ZX1cbiAgICAgICAgLz5cbiAgICAgIDwvU3R5bGVkV3JhcHBlcj5cbiAgICAgIDxQYW5lbExhYmVsV3JhcHBlcj5cbiAgICAgICAgPFNlY3Rpb25UaXRsZT5cbiAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImFpQXNzaXN0YW50TWFuYWdlci5sbG1Nb2RlbC50aXRsZVwiIC8+XG4gICAgICAgIDwvU2VjdGlvblRpdGxlPlxuICAgICAgPC9QYW5lbExhYmVsV3JhcHBlcj5cbiAgICAgIDxTdHlsZWRXcmFwcGVyPlxuICAgICAgICA8U3R5bGVkSXRlbVNlbGVjdG9yXG4gICAgICAgICAgc2VsZWN0ZWRJdGVtcz17bW9kZWx9XG4gICAgICAgICAgb3B0aW9ucz17UFJPVklERVJfTU9ERUxTW3Byb3ZpZGVyXX1cbiAgICAgICAgICBtdWx0aVNlbGVjdD17ZmFsc2V9XG4gICAgICAgICAgZGlzYWJsZWQ9e2ZhbHNlfVxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IExMTSBNb2RlbFwiXG4gICAgICAgICAgb25DaGFuZ2U9e29uTExNTW9kZWxTZWxlY3R9XG4gICAgICAgICAgZmlsdGVyT3B0aW9uPVwibmFtZVwiXG4gICAgICAgICAgZ2V0T3B0aW9uVmFsdWU9e29wID0+IG9wfVxuICAgICAgICAgIGRpc3BsYXlPcHRpb249e29wID0+IG9wfVxuICAgICAgICAgIHNlYXJjaGFibGU9e2ZhbHNlfVxuICAgICAgICAgIHNob3dBcnJvdz17dHJ1ZX1cbiAgICAgICAgLz5cbiAgICAgIDwvU3R5bGVkV3JhcHBlcj5cbiAgICAgIHtwcm92aWRlciAhPT0gJ29sbGFtYScgPyAoXG4gICAgICAgIDw+XG4gICAgICAgICAgPFBhbmVsTGFiZWxXcmFwcGVyPlxuICAgICAgICAgICAgPFNlY3Rpb25UaXRsZT5cbiAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJhaUFzc2lzdGFudE1hbmFnZXIuYXBpS2V5LnBsYWNlaG9sZGVyXCIgLz5cbiAgICAgICAgICAgIDwvU2VjdGlvblRpdGxlPlxuICAgICAgICAgIDwvUGFuZWxMYWJlbFdyYXBwZXI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhcGkta2V5LWlucHV0XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFwaS1rZXktaW5wdXRfX2ljb25cIj5cbiAgICAgICAgICAgICAgPEFwaUtleSBoZWlnaHQ9XCIyMHB4XCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgb25DaGFuZ2U9e29uQXBpS2V5Q2hhbmdlfVxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17aW50bC5mb3JtYXRNZXNzYWdlKHtpZDogJ2FpQXNzaXN0YW50TWFuYWdlci5hcGlLZXkucGxhY2Vob2xkZXInfSl9XG4gICAgICAgICAgICAgIHZhbHVlPXthcGlLZXl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8Lz5cbiAgICAgICkgOiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgPFBhbmVsTGFiZWxXcmFwcGVyPlxuICAgICAgICAgICAgPFNlY3Rpb25UaXRsZT5cbiAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJhaUFzc2lzdGFudE1hbmFnZXIuYmFzZVVybC5wbGFjZWhvbGRlclwiIC8+XG4gICAgICAgICAgICA8L1NlY3Rpb25UaXRsZT5cbiAgICAgICAgICA8L1BhbmVsTGFiZWxXcmFwcGVyPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYXBpLWtleS1pbnB1dFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhcGkta2V5LWlucHV0X19pY29uXCI+XG4gICAgICAgICAgICAgIDxBcGlLZXkgaGVpZ2h0PVwiMjBweFwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtvbkJhc2VVcmxDaGFuZ2V9XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtpbnRsLmZvcm1hdE1lc3NhZ2Uoe2lkOiAnYWlBc3Npc3RhbnRNYW5hZ2VyLmJhc2VVcmwucGxhY2Vob2xkZXInfSl9XG4gICAgICAgICAgICAgIHZhbHVlPXtiYXNlVXJsfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC8+XG4gICAgICApfVxuICAgICAge2Nvbm5lY3Rpb25FcnJvciAmJiAoXG4gICAgICAgIDxTdHlsZUVycm9yTWVzc2FnZSBjbGFzc05hbWU9XCJlcnJvci1tZXNzYWdlXCI+e2Vycm9yTWVzc2FnZX08L1N0eWxlRXJyb3JNZXNzYWdlPlxuICAgICAgKX1cbiAgICAgIDxQYW5lbExhYmVsV3JhcHBlcj5cbiAgICAgICAgPFNlY3Rpb25UaXRsZT5cbiAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImFpQXNzaXN0YW50TWFuYWdlci50ZW1wZXJhdHVyZS50aXRsZVwiIC8+XG4gICAgICAgIDwvU2VjdGlvblRpdGxlPlxuICAgICAgPC9QYW5lbExhYmVsV3JhcHBlcj5cbiAgICAgIDxTdHlsZVNsaWRlcldyYXBwZXI+XG4gICAgICAgIDxSYW5nZVNsaWRlclxuICAgICAgICAgIHNob3dJbnB1dD17dHJ1ZX1cbiAgICAgICAgICBpc1JhbmdlZD17ZmFsc2V9XG4gICAgICAgICAgdmFsdWUwPXswfVxuICAgICAgICAgIHZhbHVlMT17dGVtcGVyYXR1cmV9XG4gICAgICAgICAgb25DaGFuZ2U9e29uVGVtcGVyYXR1cmVDaGFuZ2V9XG4gICAgICAgICAgcmFuZ2U9e1swLCAyXX1cbiAgICAgICAgICBzdGVwPXswLjF9XG4gICAgICAgIC8+XG4gICAgICA8L1N0eWxlU2xpZGVyV3JhcHBlcj5cbiAgICAgIDxQYW5lbExhYmVsV3JhcHBlcj5cbiAgICAgICAgPFNlY3Rpb25UaXRsZT5cbiAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImFpQXNzaXN0YW50TWFuYWdlci50b3BQLnRpdGxlXCIgLz5cbiAgICAgICAgPC9TZWN0aW9uVGl0bGU+XG4gICAgICA8L1BhbmVsTGFiZWxXcmFwcGVyPlxuICAgICAgPFN0eWxlU2xpZGVyV3JhcHBlcj5cbiAgICAgICAgPFJhbmdlU2xpZGVyXG4gICAgICAgICAgc2hvd0lucHV0PXt0cnVlfVxuICAgICAgICAgIGlzUmFuZ2VkPXtmYWxzZX1cbiAgICAgICAgICB2YWx1ZTA9ezB9XG4gICAgICAgICAgdmFsdWUxPXt0b3BQfVxuICAgICAgICAgIG9uQ2hhbmdlPXtvblRvcFBDaGFuZ2V9XG4gICAgICAgICAgcmFuZ2U9e1swLCAxXX1cbiAgICAgICAgICBzdGVwPXswLjF9XG4gICAgICAgIC8+XG4gICAgICA8L1N0eWxlU2xpZGVyV3JhcHBlcj5cbiAgICAgIDw+XG4gICAgICAgIDxQYW5lbExhYmVsV3JhcHBlcj5cbiAgICAgICAgICA8U2VjdGlvblRpdGxlPk1hcGJveCBUb2tlbiAob3B0aW9uYWw6IHJvdXRlL2lzb2Nocm9uZSk8L1NlY3Rpb25UaXRsZT5cbiAgICAgICAgPC9QYW5lbExhYmVsV3JhcHBlcj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhcGkta2V5LWlucHV0XCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhcGkta2V5LWlucHV0X19pY29uXCI+XG4gICAgICAgICAgICA8QXBpS2V5IGhlaWdodD1cIjIwcHhcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgb25DaGFuZ2U9e29uTWFwYm94VG9rZW5DaGFuZ2V9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIHlvdXIgTWFwYm94IFRva2VuXCJcbiAgICAgICAgICAgIHZhbHVlPXttYXBib3hUb2tlbn1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvPlxuICAgICAgPFN0eWxlZEJ1dHRvbj5cbiAgICAgICAgPEJ1dHRvbiBvbkNsaWNrPXtvblN0YXJ0Q2hhdH0gd2lkdGg9eycxMDAlJ30+XG4gICAgICAgICAge2lzUnVubmluZyAmJiA8TG9hZGluZ1NwaW5uZXIgc2l6ZT17MTJ9IC8+fVxuICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPVwiYWlBc3Npc3RhbnRNYW5hZ2VyLnN0YXJ0Q2hhdFwiIC8+XG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgPC9TdHlsZWRCdXR0b24+XG4gICAgPC9TdHlsZWRBaUFzc2lzdGFudENvbmZpZz5cbiAgKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsaUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLFdBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLFdBQUEsR0FBQUosT0FBQTtBQVVBLElBQUFLLE9BQUEsR0FBQUgsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFNLE9BQUEsR0FBQUosc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFPLFdBQUEsR0FBQVAsT0FBQTtBQUNBLElBQUFRLEtBQUEsR0FBQVIsT0FBQTtBQUNBLElBQUFTLFFBQUEsR0FBQVQsT0FBQTtBQUNBLElBQUFVLFVBQUEsR0FBQVYsT0FBQTtBQUFxRCxJQUFBVyxlQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBckJyRDtBQUNBO0FBQUEsU0FBQUMseUJBQUFDLENB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
337
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcmVhY3RSZWR1eCIsIl9jb21wb25lbnRzIiwiX2FwaUtleSIsIl9tb2RlbHMiLCJfdXNlaG9va3NUcyIsIl9jb3JlIiwiX2FjdGlvbnMiLCJfcmVhY3RJbnRsIiwiX3RlbXBsYXRlT2JqZWN0IiwiX3RlbXBsYXRlT2JqZWN0MiIsIl90ZW1wbGF0ZU9iamVjdDMiLCJfdGVtcGxhdGVPYmplY3Q0IiwiX3RlbXBsYXRlT2JqZWN0NSIsIl90ZW1wbGF0ZU9iamVjdDYiLCJfdGVtcGxhdGVPYmplY3Q3IiwiX3RlbXBsYXRlT2JqZWN0OCIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIlNlY3Rpb25UaXRsZSIsInN0eWxlZCIsImRpdiIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwicHJvcHMiLCJ0aGVtZSIsImlucHV0Rm9udFNpemUiLCJlZmZlY3RQYW5lbFRleHRTZWNvbmRhcnkxIiwiU3R5bGVkQWlBc3Npc3RhbnRDb25maWciLCJwcmltYXJ5QnRuRm9udFNpemVEZWZhdWx0IiwiYm94U2hhZG93IiwiZ2VvY29kZXJJbnB1dEhlaWdodCIsInN1YnRleHRDb2xvciIsIk9sbGFtYU1vZGVsSW5wdXRXcmFwcGVyIiwiU3R5bGVkV3JhcHBlciIsIlN0eWxlZEl0ZW1TZWxlY3RvciIsIkl0ZW1TZWxlY3RvciIsImFjdGl2ZUNvbG9yIiwiU3R5bGVTbGlkZXJXcmFwcGVyIiwiU3R5bGVkQnV0dG9uIiwiU3R5bGVFcnJvck1lc3NhZ2UiLCJlcnJvckNvbG9yIiwiZXJyb3JUZXh0Q29sb3IiLCJSYW5nZVNsaWRlciIsImFwcEluamVjdG9yIiwiUmFuZ2VTbGlkZXJGYWN0b3J5IiwiQWlBc3Npc3RhbnRDb25maWciLCJkaXNwYXRjaCIsInVzZURpc3BhdGNoIiwiYWlBc3Npc3RhbnRDb25maWciLCJ1c2VTZWxlY3RvciIsInN0YXRlIiwiZGVtbyIsImFpQXNzaXN0YW50IiwiY29uZmlnIiwiaW50bCIsInVzZUludGwiLCJfdXNlTG9jYWxTdG9yYWdlIiwidXNlTG9jYWxTdG9yYWdlIiwicHJvdmlkZXIiLCJfdXNlTG9jYWxTdG9yYWdlMiIsIl9zbGljZWRUb0FycmF5MiIsInNldFByb3ZpZGVyIiwiX3VzZUxvY2FsU3RvcmFnZTMiLCJtb2RlbCIsIlBST1ZJREVSX01PREVMUyIsIl91c2VMb2NhbFN0b3JhZ2U0Iiwic2V0TW9kZWwiLCJfdXNlTG9jYWxTdG9yYWdlNSIsImFwaUtleSIsIl91c2VMb2NhbFN0b3JhZ2U2Iiwic2V0QXBpS2V5IiwiX3VzZUxvY2FsU3RvcmFnZTciLCJ0ZW1wZXJhdHVyZSIsIl91c2VMb2NhbFN0b3JhZ2U4Iiwic2V0VGVtcGVyYXR1cmUiLCJfdXNlTG9jYWxTdG9yYWdlOSIsInRvcFAiLCJfdXNlTG9jYWxTdG9yYWdlMTAiLCJzZXRUb3BQIiwiX3VzZUxvY2FsU3RvcmFnZTExIiwiYmFzZVVybCIsIl91c2VMb2NhbFN0b3JhZ2UxMiIsInNldEJhc2VVcmwiLCJfdXNlTG9jYWxTdG9yYWdlMTMiLCJtYXBib3hUb2tlbiIsIl91c2VMb2NhbFN0b3JhZ2UxNCIsInNldE1hcGJveFRva2VuIiwiX3VzZVN0YXRlIiwidXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwib2xsYW1hTW9kZWxJbnB1dENoZWNrZWQiLCJzZXRPbGxhbWFNb2RlbElucHV0Q2hlY2tlZCIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0Iiwib2xsYW1hTW9kZWxJbnB1dFZhbHVlIiwic2V0T2xsYW1hTW9kZWxJbnB1dFZhbHVlIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJjb25uZWN0aW9uRXJyb3IiLCJzZXRDb25uZWN0aW9uRXJyb3IiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsImVycm9yTWVzc2FnZSIsInNldEVycm9yTWVzc2FnZSIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUxMCIsImlzUnVubmluZyIsInNldElzUnVubmluZyIsIm9uQWlQcm92aWRlclNlbGVjdCIsInZhbHVlIiwib25MTE1Nb2RlbFNlbGVjdCIsIm9uQXBpS2V5Q2hhbmdlIiwidGFyZ2V0Iiwib25UZW1wZXJhdHVyZUNoYW5nZSIsIm9uVG9wUENoYW5nZSIsIm9uQmFzZVVybENoYW5nZSIsIm9uTWFwYm94VG9rZW5DaGFuZ2UiLCJvbk9sbGFtYU1vZGVsSW5wdXRDaGVja2VkIiwiY2hlY2tlZCIsIm9uT2xsYW1hTW9kZWxJbnB1dFZhbHVlQ2hhbmdlIiwib25TdGFydENoYXQiLCJfcmVmIiwiX2FzeW5jVG9HZW5lcmF0b3IyIiwiX3JlZ2VuZXJhdG9yIiwibWFyayIsIl9jYWxsZWUiLCJ0aW1lb3V0UHJvbWlzZSIsIkFzc2lzdGFudE1vZGVsIiwic3VjY2VzcyIsIl9lcnJvck1lc3NhZ2UiLCJ3cmFwIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiUHJvbWlzZSIsIl8iLCJyZWplY3QiLCJzZXRUaW1lb3V0IiwiRXJyb3IiLCJHZXRBc3Npc3RhbnRNb2RlbEJ5UHJvdmlkZXIiLCJyYWNlIiwidGVzdENvbm5lY3Rpb24iLCJzZW50IiwidXBkYXRlQWlBc3Npc3RhbnRDb25maWciLCJpc1JlYWR5IiwidDAiLCJtZXNzYWdlIiwiZmluaXNoIiwic3RvcCIsImFwcGx5IiwiYXJndW1lbnRzIiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsIlBhbmVsTGFiZWxXcmFwcGVyIiwiRm9ybWF0dGVkTWVzc2FnZSIsImlkIiwic2VsZWN0ZWRJdGVtcyIsIm9wdGlvbnMiLCJrZXlzIiwibXVsdGlTZWxlY3QiLCJkaXNhYmxlZCIsIm9uQ2hhbmdlIiwiZmlsdGVyT3B0aW9uIiwiZ2V0T3B0aW9uVmFsdWUiLCJvcCIsImRpc3BsYXlPcHRpb24iLCJzZWFyY2hhYmxlIiwic2hvd0Fycm93IiwicGxhY2Vob2xkZXIiLCJzdHlsZSIsIndpZHRoIiwiQ2hlY2tib3giLCJsYWJlbCIsIklucHV0IiwidHlwZSIsIkZyYWdtZW50IiwiaGVpZ2h0IiwiZm9ybWF0TWVzc2FnZSIsInNob3dJbnB1dCIsImlzUmFuZ2VkIiwidmFsdWUwIiwidmFsdWUxIiwicmFuZ2UiLCJzdGVwIiwiQnV0dG9uIiwib25DbGljayIsIkxvYWRpbmdTcGlubmVyIiwic2l6ZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL2FpLWFzc2lzdGFudC1jb25maWcudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCwge3VzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7dXNlU2VsZWN0b3IsIHVzZURpc3BhdGNofSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQge1xuICBJbnB1dCxcbiAgUGFuZWxMYWJlbFdyYXBwZXIsXG4gIEl0ZW1TZWxlY3RvcixcbiAgUmFuZ2VTbGlkZXJGYWN0b3J5LFxuICBCdXR0b24sXG4gIExvYWRpbmdTcGlubmVyLFxuICBhcHBJbmplY3RvcixcbiAgQ2hlY2tib3hcbn0gZnJvbSAnQGtlcGxlci5nbC9jb21wb25lbnRzJztcbmltcG9ydCB7U3RhdGV9IGZyb20gJy4uL2luZGV4JztcbmltcG9ydCBBcGlLZXkgZnJvbSAnLi4vaWNvbnMvYXBpLWtleSc7XG5pbXBvcnQgUFJPVklERVJfTU9ERUxTIGZyb20gJy4uL2NvbmZpZy9tb2RlbHMuanNvbic7XG5pbXBvcnQge3VzZUxvY2FsU3RvcmFnZX0gZnJvbSAndXNlaG9va3MtdHMnO1xuaW1wb3J0IHtHZXRBc3Npc3RhbnRNb2RlbEJ5UHJvdmlkZXJ9IGZyb20gJ0BvcGVuYXNzaXN0YW50L2NvcmUnO1xuaW1wb3J0IHt1cGRhdGVBaUFzc2lzdGFudENvbmZpZ30gZnJvbSAnLi4vYWN0aW9ucyc7XG5pbXBvcnQge0Zvcm1hdHRlZE1lc3NhZ2UsIHVzZUludGx9IGZyb20gJ3JlYWN0LWludGwnO1xuXG5jb25zdCBTZWN0aW9uVGl0bGUgPSBzdHlsZWQuZGl2YFxuICBmb250LXNpemU6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuaW5wdXRGb250U2l6ZX07XG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmVmZmVjdFBhbmVsVGV4dFNlY29uZGFyeTF9O1xuICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcbmA7XG5cbmNvbnN0IFN0eWxlZEFpQXNzaXN0YW50Q29uZmlnID0gc3R5bGVkLmRpdmBcbiAgcGFkZGluZzogMTJweDtcbiAgZm9udC1zaXplOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnByaW1hcnlCdG5Gb250U2l6ZURlZmF1bHR9O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBnYXA6IDEycHg7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG5cbiAgLmFwaS1rZXktaW5wdXQge1xuICAgIGJveC1zaGFkb3c6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuYm94U2hhZG93fTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICAuYXBpLWtleS1pbnB1dF9faWNvbiB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBoZWlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuZ2VvY29kZXJJbnB1dEhlaWdodH1weDtcbiAgICAgIHdpZHRoOiAzMHB4O1xuICAgICAgcGFkZGluZy1sZWZ0OiA2cHg7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3VidGV4dENvbG9yfTtcbiAgICB9XG5cbiAgICBpbnB1dCB7XG4gICAgICBwYWRkaW5nOiA0cHggMzZweDtcbiAgICAgIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5nZW9jb2RlcklucHV0SGVpZ2h0fXB4O1xuICAgICAgY2FyZXQtY29sb3I6IHVuc2V0O1xuICAgIH1cbiAgfVxuYDtcblxuLy8gT2xsYW1hIG1vZGVsIGlucHV0IHdyYXBwZXI6IGNoZWNrYm94ICsgJ0lucHV0IE1vZGVsIE5hbWU6JyArIGlucHV0XG4vLyBhbGwgY2hpbGRyZW4gZWxlbWVudCBoYXZlIHdpZHRoIGJhc2VkIG9uIHRoZSBjb250ZW50XG5jb25zdCBPbGxhbWFNb2RlbElucHV0V3JhcHBlciA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGdhcDogNHB4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuYDtcblxuY29uc3QgU3R5bGVkV3JhcHBlciA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbmA7XG5cbmNvbnN0IFN0eWxlZEl0ZW1TZWxlY3RvciA9IHN0eWxlZChJdGVtU2VsZWN0b3IpYFxuICAuaXRlbS1zZWxlY3Rvcl9fZHJvcGRvd24ge1xuICAgIHBhZGRpbmctbGVmdDogMTBweDtcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIH1cbiAgLmFjdGl2ZSB7XG4gICAgYm9yZGVyLWNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmFjdGl2ZUNvbG9yfTtcbiAgICBib3JkZXItcmFkaXVzOiA0cHggNHB4IDBweCAwcHggIWltcG9ydGFudDtcbiAgfVxuICB3aWR0aDogMTAwJTtcbmA7XG5cbmNvbnN0IFN0eWxlU2xpZGVyV3JhcHBlciA9IHN0eWxlZC5kaXZgXG4gIHdpZHRoOiAxMDAlO1xuICBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0O1xuICBoZWlnaHQ6IDMycHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIC5rZy1yYW5nZS1zbGlkZXJfX2lucHV0IHtcbiAgICBoZWlnaHQ6IDMycHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHBhZGRpbmc6IDNweCA2cHg7XG4gIH1cbiAgLmtnLXNsaWRlciB7XG4gICAgcGFkZGluZy1sZWZ0OiA2cHg7XG4gIH1cbiAgLmtnLXJhbmdlLXNsaWRlciB7XG4gICAgcGFkZGluZzogMHB4ICFpbXBvcnRhbnQ7XG4gIH1cbmA7XG5cbmNvbnN0IFN0eWxlZEJ1dHRvbiA9IHN0eWxlZC5kaXZgXG4gIHdpZHRoOiAxMDAlO1xuICBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0O1xuICBtYXJnaW4tdG9wOiAxMnB4O1xuXG4gIGJ1dHRvbiBkaXYge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IDRweDtcbiAgICBtYXJnaW4tcmlnaHQ6IDRweDtcbiAgfVxuYDtcblxuY29uc3QgU3R5bGVFcnJvck1lc3NhZ2UgPSBzdHlsZWQuZGl2YFxuICBmb250LXNpemU6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUucHJpbWFyeUJ0bkZvbnRTaXplRGVmYXVsdH07XG4gIGJhY2tncm91bmQtY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuZXJyb3JDb2xvcn07XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgcGFkZGluZzogNHB4IDhweDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuZXJyb3JUZXh0Q29sb3J9O1xuYDtcblxuY29uc3QgUmFuZ2VTbGlkZXIgPSBhcHBJbmplY3Rvci5nZXQoUmFuZ2VTbGlkZXJGYWN0b3J5KTtcblxuZXhwb3J0IGZ1bmN0aW9uIEFpQXNzaXN0YW50Q29uZmlnKCkge1xuICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XG4gIGNvbnN0IGFpQXNzaXN0YW50Q29uZmlnID0gdXNlU2VsZWN0b3IoKHN0YXRlOiBTdGF0ZSkgPT4gc3RhdGUuZGVtby5haUFzc2lzdGFudC5jb25maWcpO1xuICBjb25zdCBpbnRsID0gdXNlSW50bCgpO1xuXG4gIGNvbnN0IFtwcm92aWRlciwgc2V0UHJvdmlkZXJdID0gdXNlTG9jYWxTdG9yYWdlKFxuICAgICdhaS1hc3Npc3RhbnQtcHJvdmlkZXInLFxuICAgIGFpQXNzaXN0YW50Q29uZmlnLnByb3ZpZGVyIHx8ICdvcGVuYWknXG4gICk7XG4gIGNvbnN0IFttb2RlbCwgc2V0TW9kZWxdID0gdXNlTG9jYWxTdG9yYWdlKFxuICAgICdhaS1hc3Npc3RhbnQtbW9kZWwnLFxuICAgIGFpQXNzaXN0YW50Q29uZmlnLm1vZGVsIHx8IFBST1ZJREVSX01PREVMU1twcm92aWRlcl1bMF1cbiAgKTtcbiAgY29uc3QgW2FwaUtleSwgc2V0QXBpS2V5XSA9IHVzZUxvY2FsU3RvcmFnZShcbiAgICAnYWktYXNzaXN0YW50LWFwaS1rZXknLFxuICAgIGFpQXNzaXN0YW50Q29uZmlnLmFwaUtleSB8fCAnJ1xuICApO1xuICBjb25zdCBbdGVtcGVyYXR1cmUsIHNldFRlbXBlcmF0dXJlXSA9IHVzZUxvY2FsU3RvcmFnZShcbiAgICAnYWktYXNzaXN0YW50LXRlbXBlcmF0dXJlJyxcbiAgICBhaUFzc2lzdGFudENvbmZpZy50ZW1wZXJhdHVyZSB8fCAwLjBcbiAgKTtcbiAgY29uc3QgW3RvcFAsIHNldFRvcFBdID0gdXNlTG9jYWxTdG9yYWdlKCdhaS1hc3Npc3RhbnQtdG9wLXAnLCBhaUFzc2lzdGFudENvbmZpZy50b3BQIHx8IDEuMCk7XG4gIGNvbnN0IFtiYXNlVXJsLCBzZXRCYXNlVXJsXSA9IHVzZUxvY2FsU3RvcmFnZShcbiAgICAnYWktYXNzaXN0YW50LWJhc2UtdXJsJyxcbiAgICBhaUFzc2lzdGFudENvbmZpZy5iYXNlVXJsIHx8ICdodHRwOi8vbG9jYWxob3N0OjExNDM0L2FwaSdcbiAgKTtcbiAgY29uc3QgW21hcGJveFRva2VuLCBzZXRNYXBib3hUb2tlbl0gPSB1c2VMb2NhbFN0b3JhZ2UoXG4gICAgJ2FpLWFzc2lzdGFudC1tYXBib3gtdG9rZW4nLFxuICAgIGFpQXNzaXN0YW50Q29uZmlnLm1hcGJveFRva2VuIHx8ICcnXG4gICk7XG4gIGNvbnN0IFtvbGxhbWFNb2RlbElucHV0Q2hlY2tlZCwgc2V0T2xsYW1hTW9kZWxJbnB1dENoZWNrZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbb2xsYW1hTW9kZWxJbnB1dFZhbHVlLCBzZXRPbGxhbWFNb2RlbElucHV0VmFsdWVdID0gdXNlU3RhdGUoJycpO1xuICBjb25zdCBbY29ubmVjdGlvbkVycm9yLCBzZXRDb25uZWN0aW9uRXJyb3JdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbZXJyb3JNZXNzYWdlLCBzZXRFcnJvck1lc3NhZ2VdID0gdXNlU3RhdGUoJycpO1xuICBjb25zdCBbaXNSdW5uaW5nLCBzZXRJc1J1bm5pbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IG9uQWlQcm92aWRlclNlbGVjdCA9ICh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG9iamVjdCB8IG51bGwpID0+IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgc2V0UHJvdmlkZXIodmFsdWUpO1xuICAgICAgc2V0TW9kZWwoUFJPVklERVJfTU9ERUxTW3ZhbHVlXVswXSk7XG4gICAgICBzZXRDb25uZWN0aW9uRXJyb3IoZmFsc2UpO1xuICAgICAgc2V0RXJyb3JNZXNzYWdlKCcnKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgb25MTE1Nb2RlbFNlbGVjdCA9ICh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG9iamVjdCB8IG51bGwpID0+IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgc2V0TW9kZWwodmFsdWUpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBvbkFwaUtleUNoYW5nZSA9IChlOiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgIHNldEFwaUtleShlLnRhcmdldC52YWx1ZSk7XG4gICAgLy8gcmVzZXQgcHJldmlvdXMga2V5IGVycm9yIGlmIGFueVxuICAgIHNldENvbm5lY3Rpb25FcnJvcihmYWxzZSk7XG4gICAgc2V0RXJyb3JNZXNzYWdlKCcnKTtcbiAgfTtcblxuICBjb25zdCBvblRlbXBlcmF0dXJlQ2hhbmdlID0gKHZhbHVlOiBudW1iZXJbXSkgPT4ge1xuICAgIHNldFRlbXBlcmF0dXJlKHZhbHVlWzFdKTtcbiAgfTtcblxuICBjb25zdCBvblRvcFBDaGFuZ2UgPSAodmFsdWU6IG51bWJlcltdKSA9PiB7XG4gICAgc2V0VG9wUCh2YWx1ZVsxXSk7XG4gIH07XG5cbiAgY29uc3Qgb25CYXNlVXJsQ2hhbmdlID0gKGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgc2V0QmFzZVVybChlLnRhcmdldC52YWx1ZSk7XG4gICAgc2V0Q29ubmVjdGlvbkVycm9yKGZhbHNlKTtcbiAgICBzZXRFcnJvck1lc3NhZ2UoJycpO1xuICB9O1xuXG4gIGNvbnN0IG9uTWFwYm94VG9rZW5DaGFuZ2UgPSAoZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICBzZXRNYXBib3hUb2tlbihlLnRhcmdldC52YWx1ZSk7XG4gIH07XG5cbiAgY29uc3Qgb25PbGxhbWFNb2RlbElucHV0Q2hlY2tlZCA9IChlOiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgIHNldE9sbGFtYU1vZGVsSW5wdXRDaGVja2VkKGUudGFyZ2V0LmNoZWNrZWQpO1xuICAgIGlmICghZS50YXJnZXQuY2hlY2tlZCkge1xuICAgICAgLy8gdXNlIG1vZGVsIGZyb20gc2VsZWN0b3JcbiAgICAgIHNldE1vZGVsKCcnKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgb25PbGxhbWFNb2RlbElucHV0VmFsdWVDaGFuZ2UgPSAoZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICBzZXRPbGxhbWFNb2RlbElucHV0VmFsdWUoZS50YXJnZXQudmFsdWUpO1xuICAgIHNldE1vZGVsKGUudGFyZ2V0LnZhbHVlKTtcbiAgfTtcblxuICBjb25zdCBvblN0YXJ0Q2hhdCA9IGFzeW5jICgpID0+IHtcbiAgICBzZXRJc1J1bm5pbmcodHJ1ZSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRpbWVvdXRQcm9taXNlID0gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoJ0Nvbm5lY3Rpb24gdGltZW91dCBhZnRlciAxNSBzZWNvbmRzJykpLCAxNTAwMCk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgQXNzaXN0YW50TW9kZWwgPSBHZXRBc3Npc3RhbnRNb2RlbEJ5UHJvdmlkZXIoe1xuICAgICAgICBwcm92aWRlcjogcHJvdmlkZXJcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBzdWNjZXNzID0gKGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIEFzc2lzdGFudE1vZGVsPy50ZXN0Q29ubmVjdGlvbihhcGlLZXksIG1vZGVsKSxcbiAgICAgICAgdGltZW91dFByb21pc2VcbiAgICAgIF0pKSBhcyBib29sZWFuO1xuXG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSAhc3VjY2Vzc1xuICAgICAgICA/IHByb3ZpZGVyID09PSAnb2xsYW1hJ1xuICAgICAgICAgID8gJ0Nvbm5lY3Rpb24gZmFpbGVkOiBtYXliZSBpbnZhbGlkIE9sbGFtYSBCYXNlIFVSTCdcbiAgICAgICAgICA6ICdDb25uZWN0aW9uIGZhaWxlZDogbWF5YmUgaW52YWxpZCBBUEkgS2V5J1xuICAgICAgICA6ICcnO1xuICAgICAgc2V0Q29ubmVjdGlvbkVycm9yKCFzdWNjZXNzKTtcbiAgICAgIHNldEVycm9yTWVzc2FnZShlcnJvck1lc3NhZ2UpO1xuICAgICAgZGlzcGF0Y2goXG4gICAgICAgIHVwZGF0ZUFpQXNzaXN0YW50Q29uZmlnKHtcbiAgICAgICAgICBwcm92aWRlcjogcHJvdmlkZXIsXG4gICAgICAgICAgbW9kZWw6IG1vZGVsLFxuICAgICAgICAgIGFwaUtleTogYXBpS2V5LFxuICAgICAgICAgIGJhc2VVcmw6IGJhc2VVcmwsXG4gICAgICAgICAgaXNSZWFkeTogc3VjY2VzcyxcbiAgICAgICAgICB0ZW1wZXJhdHVyZTogdGVtcGVyYXR1cmUsXG4gICAgICAgICAgdG9wUDogdG9wUCxcbiAgICAgICAgICBtYXBib3hUb2tlbjogbWFwYm94VG9rZW5cbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHNldENvbm5lY3Rpb25FcnJvcih0cnVlKTtcbiAgICAgIHNldEVycm9yTWVzc2FnZShlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdDb25uZWN0aW9uIGZhaWxlZCcpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRJc1J1bm5pbmcoZmFsc2UpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxTdHlsZWRBaUFzc2lzdGFudENvbmZpZyBjbGFzc05hbWU9XCJhaS1hc3Npc3RhbnQtY29uZmlnX190eXBlXCI+XG4gICAgICA8UGFuZWxMYWJlbFdyYXBwZXI+XG4gICAgICAgIDxTZWN0aW9uVGl0bGU+XG4gICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJhaUFzc2lzdGFudE1hbmFnZXIuYWlQcm92aWRlclwiIC8+XG4gICAgICAgIDwvU2VjdGlvblRpdGxlPlxuICAgICAgPC9QYW5lbExhYmVsV3JhcHBlcj5cbiAgICAgIDxTdHlsZWRXcmFwcGVyPlxuICAgICAgICA8U3R5bGVkSXRlbVNlbGVjdG9yXG4gICAgICAgICAgc2VsZWN0ZWRJdGVtcz17cHJvdmlkZXJ9XG4gICAgICAgICAgb3B0aW9ucz17T2JqZWN0LmtleXMoUFJPVklERVJfTU9ERUxTKX1cbiAgICAgICAgICBtdWx0aVNlbGVjdD17ZmFsc2V9XG4gICAgICAgICAgZGlzYWJsZWQ9e2ZhbHNlfVxuICAgICAgICAgIG9uQ2hhbmdlPXtvbkFpUHJvdmlkZXJTZWxlY3R9XG4gICAgICAgICAgZmlsdGVyT3B0aW9uPVwibmFtZVwiXG4gICAgICAgICAgZ2V0T3B0aW9uVmFsdWU9e29wID0+IG9wfVxuICAgICAgICAgIGRpc3BsYXlPcHRpb249e29wID0+IG9wfVxuICAgICAgICAgIHNlYXJjaGFibGU9e2ZhbHNlfVxuICAgICAgICAgIHNob3dBcnJvdz17dHJ1ZX1cbiAgICAgICAgLz5cbiAgICAgIDwvU3R5bGVkV3JhcHBlcj5cbiAgICAgIDxQYW5lbExhYmVsV3JhcHBlcj5cbiAgICAgICAgPFNlY3Rpb25UaXRsZT5cbiAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImFpQXNzaXN0YW50TWFuYWdlci5sbG1Nb2RlbC50aXRsZVwiIC8+XG4gICAgICAgIDwvU2VjdGlvblRpdGxlPlxuICAgICAgPC9QYW5lbExhYmVsV3JhcHBlcj5cbiAgICAgIHsoKHByb3ZpZGVyID09PSAnb2xsYW1hJyAmJiAhb2xsYW1hTW9kZWxJbnB1dENoZWNrZWQpIHx8IHByb3ZpZGVyICE9PSAnb2xsYW1hJykgJiYgKFxuICAgICAgICA8U3R5bGVkV3JhcHBlcj5cbiAgICAgICAgICA8U3R5bGVkSXRlbVNlbGVjdG9yXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1zPXttb2RlbH1cbiAgICAgICAgICAgIG9wdGlvbnM9e1BST1ZJREVSX01PREVMU1twcm92aWRlcl19XG4gICAgICAgICAgICBtdWx0aVNlbGVjdD17ZmFsc2V9XG4gICAgICAgICAgICBkaXNhYmxlZD17cHJvdmlkZXIgPT09ICdvbGxhbWEnID8gb2xsYW1hTW9kZWxJbnB1dENoZWNrZWQgOiBmYWxzZX1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IExMTSBNb2RlbFwiXG4gICAgICAgICAgICBvbkNoYW5nZT17b25MTE1Nb2RlbFNlbGVjdH1cbiAgICAgICAgICAgIGZpbHRlck9wdGlvbj1cIm5hbWVcIlxuICAgICAgICAgICAgZ2V0T3B0aW9uVmFsdWU9e29wID0+IG9wfVxuICAgICAgICAgICAgZGlzcGxheU9wdGlvbj17b3AgPT4gb3B9XG4gICAgICAgICAgICBzZWFyY2hhYmxlPXtmYWxzZX1cbiAgICAgICAgICAgIHNob3dBcnJvdz17dHJ1ZX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1N0eWxlZFdyYXBwZXI+XG4gICAgICApfVxuICAgICAge3Byb3ZpZGVyID09PSAnb2xsYW1hJyAmJiAoXG4gICAgICAgIDxPbGxhbWFNb2RlbElucHV0V3JhcHBlcj5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7d2lkdGg6ICcyNTBweCd9fT5cbiAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICBpZD1cIm9sbGFtYS1tb2RlbC1pbnB1dFwiXG4gICAgICAgICAgICAgIGxhYmVsPVwiSW5wdXQgTW9kZWwgTmFtZVwiXG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtvbk9sbGFtYU1vZGVsSW5wdXRDaGVja2VkfVxuICAgICAgICAgICAgICBjaGVja2VkPXtvbGxhbWFNb2RlbElucHV0Q2hlY2tlZH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPElucHV0XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBvbkNoYW5nZT17b25PbGxhbWFNb2RlbElucHV0VmFsdWVDaGFuZ2V9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIE1vZGVsIE5hbWVcIlxuICAgICAgICAgICAgdmFsdWU9e29sbGFtYU1vZGVsSW5wdXRWYWx1ZX1cbiAgICAgICAgICAgIGRpc2FibGVkPXshb2xsYW1hTW9kZWxJbnB1dENoZWNrZWR9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9PbGxhbWFNb2RlbElucHV0V3JhcHBlcj5cbiAgICAgICl9XG4gICAgICB7cHJvdmlkZXIgIT09ICdvbGxhbWEnID8gKFxuICAgICAgICA8PlxuICAgICAgICAgIDxQYW5lbExhYmVsV3JhcHBlcj5cbiAgICAgICAgICAgIDxTZWN0aW9uVGl0bGU+XG4gICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPVwiYWlBc3Npc3RhbnRNYW5hZ2VyLmFwaUtleS5wbGFjZWhvbGRlclwiIC8+XG4gICAgICAgICAgICA8L1NlY3Rpb25UaXRsZT5cbiAgICAgICAgICA8L1BhbmVsTGFiZWxXcmFwcGVyPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYXBpLWtleS1pbnB1dFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhcGkta2V5LWlucHV0X19pY29uXCI+XG4gICAgICAgICAgICAgIDxBcGlLZXkgaGVpZ2h0PVwiMjBweFwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtvbkFwaUtleUNoYW5nZX1cbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2ludGwuZm9ybWF0TWVzc2FnZSh7aWQ6ICdhaUFzc2lzdGFudE1hbmFnZXIuYXBpS2V5LnBsYWNlaG9sZGVyJ30pfVxuICAgICAgICAgICAgICB2YWx1ZT17YXBpS2V5fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC8+XG4gICAgICApIDogKFxuICAgICAgICA8PlxuICAgICAgICAgIDxQYW5lbExhYmVsV3JhcHBlcj5cbiAgICAgICAgICAgIDxTZWN0aW9uVGl0bGU+XG4gICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPVwiYWlBc3Npc3RhbnRNYW5hZ2VyLmJhc2VVcmwucGxhY2Vob2xkZXJcIiAvPlxuICAgICAgICAgICAgPC9TZWN0aW9uVGl0bGU+XG4gICAgICAgICAgPC9QYW5lbExhYmVsV3JhcHBlcj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFwaS1rZXktaW5wdXRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYXBpLWtleS1pbnB1dF9faWNvblwiPlxuICAgICAgICAgICAgICA8QXBpS2V5IGhlaWdodD1cIjIwcHhcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICBvbkNoYW5nZT17b25CYXNlVXJsQ2hhbmdlfVxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17aW50bC5mb3JtYXRNZXNzYWdlKHtpZDogJ2FpQXNzaXN0YW50TWFuYWdlci5iYXNlVXJsLnBsYWNlaG9sZGVyJ30pfVxuICAgICAgICAgICAgICB2YWx1ZT17YmFzZVVybH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvPlxuICAgICAgKX1cbiAgICAgIHtjb25uZWN0aW9uRXJyb3IgJiYgKFxuICAgICAgICA8U3R5bGVFcnJvck1lc3NhZ2UgY2xhc3NOYW1lPVwiZXJyb3ItbWVzc2FnZVwiPntlcnJvck1lc3NhZ2V9PC9TdHlsZUVycm9yTWVzc2FnZT5cbiAgICAgICl9XG4gICAgICA8UGFuZWxMYWJlbFdyYXBwZXI+XG4gICAgICAgIDxTZWN0aW9uVGl0bGU+XG4gICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJhaUFzc2lzdGFudE1hbmFnZXIudGVtcGVyYXR1cmUudGl0bGVcIiAvPlxuICAgICAgICA8L1NlY3Rpb25UaXRsZT5cbiAgICAgIDwvUGFuZWxMYWJlbFdyYXBwZXI+XG4gICAgICA8U3R5bGVTbGlkZXJXcmFwcGVyPlxuICAgICAgICA8UmFuZ2VTbGlkZXJcbiAgICAgICAgICBzaG93SW5wdXQ9e3RydWV9XG4gICAgICAgICAgaXNSYW5nZWQ9e2ZhbHNlfVxuICAgICAgICAgIHZhbHVlMD17MH1cbiAgICAgICAgICB2YWx1ZTE9e3RlbXBlcmF0dXJlfVxuICAgICAgICAgIG9uQ2hhbmdlPXtvblRlbXBlcmF0dXJlQ2hhbmdlfVxuICAgICAgICAgIHJhbmdlPXtbMCwgMl19XG4gICAgICAgICAgc3RlcD17MC4xfVxuICAgICAgICAvPlxuICAgICAgPC9TdHlsZVNsaWRlcldyYXBwZXI+XG4gICAgICA8UGFuZWxMYWJlbFdyYXBwZXI+XG4gICAgICAgIDxTZWN0aW9uVGl0bGU+XG4gICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9XCJhaUFzc2lzdGFudE1hbmFnZXIudG9wUC50aXRsZVwiIC8+XG4gICAgICAgIDwvU2VjdGlvblRpdGxlPlxuICAgICAgPC9QYW5lbExhYmVsV3JhcHBlcj5cbiAgICAgIDxTdHlsZVNsaWRlcldyYXBwZXI+XG4gICAgICAgIDxSYW5nZVNsaWRlclxuICAgICAgICAgIHNob3dJbnB1dD17dHJ1ZX1cbiAgICAgICAgICBpc1JhbmdlZD17ZmFsc2V9XG4gICAgICAgICAgdmFsdWUwPXswfVxuICAgICAgICAgIHZhbHVlMT17dG9wUH1cbiAgICAgICAgICBvbkNoYW5nZT17b25Ub3BQQ2hhbmdlfVxuICAgICAgICAgIHJhbmdlPXtbMCwgMV19XG4gICAgICAgICAgc3RlcD17MC4xfVxuICAgICAgICAvPlxuICAgICAgPC9TdHlsZVNsaWRlcldyYXBwZXI+XG4gICAgICA8PlxuICAgICAgICA8UGFuZWxMYWJlbFdyYXBwZXI+XG4gICAgICAgICAgPFNlY3Rpb25UaXRsZT5NYXBib3ggVG9rZW4gKG9wdGlvbmFsIGZvciByb3V0ZS9pc29jaHJvbmUpPC9TZWN0aW9uVGl0bGU+XG4gICAgICAgIDwvUGFuZWxMYWJlbFdyYXBwZXI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYXBpLWtleS1pbnB1dFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYXBpLWtleS1pbnB1dF9faWNvblwiPlxuICAgICAgICAgICAgPEFwaUtleSBoZWlnaHQ9XCIyMHB4XCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIG9uQ2hhbmdlPXtvbk1hcGJveFRva2VuQ2hhbmdlfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciB5b3VyIE1hcGJveCBUb2tlblwiXG4gICAgICAgICAgICB2YWx1ZT17bWFwYm94VG9rZW59XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8Lz5cbiAgICAgIDxTdHlsZWRCdXR0b24+XG4gICAgICAgIDxCdXR0b24gb25DbGljaz17b25TdGFydENoYXR9IHdpZHRoPXsnMTAwJSd9PlxuICAgICAgICAgIHtpc1J1bm5pbmcgJiYgPExvYWRpbmdTcGlubmVyIHNpemU9ezEyfSAvPn1cbiAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImFpQXNzaXN0YW50TWFuYWdlci5zdGFydENoYXRcIiAvPlxuICAgICAgICA8L0J1dHRvbj5cbiAgICAgIDwvU3R5bGVkQnV0dG9uPlxuICAgIDwvU3R5bGVkQWlBc3Npc3RhbnRDb25maWc+XG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGlCQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxXQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxXQUFBLEdBQUFKLE9BQUE7QUFXQSxJQUFBSyxPQUFBLEdBQUFILHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBTSxPQUFBLEdBQUFKLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBTyxXQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxLQUFBLEdBQUFSLE9BQUE7QUFDQSxJQUFBUyxRQUFBLEdBQUFULE9BQUE7QUFDQSxJQUFBVSxVQUFBLEdBQUFWLE9BQUE7QUFBcUQsSUFBQVcsZUFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQXRCckQ7QUFDQTtBQUFBLFNBQUFDLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLHlCQUFBQyxDQUFBLFdBQUFBLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLEtBQUFGLENBQUE7QUFBQSxTQUFBckIsd0JBQUFxQixDQUFBLEVBQUFFLENBQUEsU0FBQUEsQ0FBQSxJQUFBRixDQUFBLElBQUFBLENBQUEsQ0FBQUksVUFBQSxTQUFBSixDQUFBLGVBQUFBLENBQUEsZ0JBQUFLLE9BQUEsQ0FBQUwsQ0FBQSwwQkFBQUEsQ0FBQSxzQkFBQUEsQ0FBQSxRQUFBRyxDQUFBLEdBQUFKLHdCQUFBLENBQUFHLENBQUEsT0FBQUMsQ0FBQSxJQUFBQSxDQUFBLENBQUFHLEdBQUEsQ0FBQU4sQ0FBQSxVQUFBRyxDQUFBLENBQUFJLEdBQUEsQ0FBQVAsQ0FBQSxPQUFBUSxDQUFBLEtBQUFDLFNBQUEsVUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLGNBQUEsSUFBQUQsTUFBQSxDQUFBRSx3QkFBQSxXQUFBQyxDQUFBLElBQUFkLENBQUEsb0JBQUFjLENBQUEsT0FBQUMsY0FBQSxDQUFBQyxJQUFBLENBQUFoQixDQUFBLEVBQUFjLENBQUEsU0FBQUcsQ0FBQSxHQUFBUCxDQUFBLEdBQUFDLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWIsQ0FBQSxFQUFBYyxDQUFBLFVBQUFHLENBQUEsS0FBQUEsQ0FBQSxDQUFBVixHQUFBLElBQUFVLENBQUEsQ0FBQUMsR0FBQSxJQUFBUCxNQUFBLENBQUFDLGNBQUEsQ0FBQUosQ0FBQSxFQUFBTSxDQUFBLEVBQUFHLENBQUEsSUFBQVQsQ0FBQSxDQUFBTSxDQUFBLElBQUFkLENBQUEsQ0FBQWMsQ0FBQSxZQUFBTixDQUFBLGNBQUFSLENBQUEsRUFBQUcsQ0FBQSxJQUFBQSxDQUFBLENBQUFlLEdBQUEsQ0FBQWxCLENBQUEsRUFBQVEsQ0FBQSxHQUFBQSxDQUFBO0FBdUJBLElBQU1XLFlBQVksR0FBR0MsNEJBQU0sQ0FBQ0MsR0FBRyxDQUFBOUIsZUFBQSxLQUFBQSxlQUFBLE9BQUErQix1QkFBQSwwRkFDaEIsVUFBQUMsS0FBSztFQUFBLE9BQUlBLEtBQUssQ0FBQ0MsS0FBSyxDQUFDQyxhQUFhO0FBQUEsR0FDdEMsVUFBQUYsS0FBSztFQUFBLE9BQUlBLEtBQUssQ0FBQ0MsS0FBSyxDQUFDRSx5QkFBeUI7QUFBQSxFQUV4RDtBQUVELElBQU1DLHVCQUF1QixHQUFHUCw0QkFBTSxDQUFDQyxHQUFHLENBQUE3QixnQkFBQSxLQUFBQSxnQkFBQSxPQUFBOEIsdUJBQUEsd2lCQUUzQixVQUFBQyxLQUFLO0VBQUEsT0FBSUEsS0FBSyxDQUFDQyxLQUFLLENBQUNJLHlCQUF5QjtBQUFBLEdBUTNDLFVBQUFMLEtBQUs7RUFBQSxPQUFJQSxLQUFLLENBQUNDLEtBQUssQ0FBQ0ssU0FBUztBQUFBLEdBSWhDLFVBQUFOLEtBQUs7RUFBQSxPQUFJQSxLQUFLLENBQUNDLEtBQUssQ0FBQ00sbUJBQW1CO0FBQUEsR0FNekMsVUFBQVAsS0FBSztFQUFBLE9BQUlBLEtBQUssQ0FBQ0MsS0FBSyxDQUFDTyxZQUFZO0FBQUEsR0FLaEMsVUFBQVIsS0FBSztFQUFBLE9BQUlBLEtBQUssQ0FBQ0MsS0FBSyxDQUFDTSxtQkFBbUI7QUFBQSxFQUl2RDs7QUFFRDtBQUNBO0FBQ0EsSUFBTUUsdUJBQXVCLEdBQUdaLDRCQUFNLENBQUNDLEdBQUcsQ0FBQTVCLGdCQUFBLEtBQUFBLGdCQUFBLE9BQUE2Qix1QkFBQSxxR0FLekM7QUFFRCxJQUFNVyxhQUFhLEdBQUdiLDRCQUFNLENBQUNDLEdBQUcsQ0FBQTNCLGdCQUFBLEtBQUFBLGdCQUFBLE9BQUE0Qix1QkFBQSxtR0FJL0I7QUFFRCxJQUFNWSxrQkFBa0IsR0FBRyxJQUFBZCw0QkFBTSxFQUFDZSx3QkFBWSxDQUFDLENBQUF4QyxnQkFBQSxLQUFBQSxnQkFBQSxPQUFBMkIsdUJBQUEsdU5BTTNCLFVBQUFDLEtBQUs7RUFBQSxPQUFJQSxLQUFLLENBQUNDLEtBQUssQ0FBQ1ksV0FBVztBQUFBLEVBSW5EO0FBRUQsSUFBTUMsa0JBQWtCLEdBQUdqQiw0QkFBTSxDQUFDQyxHQUFHLENBQUF6QixnQkFBQSxLQUFBQSxnQkFBQSxPQUFBMEIsdUJBQUEsdVVBaUJwQztBQUVELElBQU1nQixZQUFZLEdBQUdsQiw0QkFBTSxDQUFDQyxHQUFHLENBQUF4QixnQkFBQSxLQUFBQSxnQkFBQSxPQUFBeUIsdUJBQUEsa01BVzlCO0FBRUQsSUFBTWlCLGlCQUFpQixHQUFHbkIsNEJBQU0sQ0FBQ0MsR0FBRyxDQUFBdkIsZ0JBQUEsS0FBQUEsZ0JBQUEsT0FBQXdCLHVCQUFBLGtJQUNyQixVQUFBQyxLQUFLO0VBQUEsT0FBSUEsS0FBSyxDQUFDQyxLQUFLLENBQUNJLHlCQUF5QjtBQUFBLEdBQ3ZDLFVBQUFMLEtBQUs7RUFBQSxPQUFJQSxLQUFLLENBQUNDLEtBQUssQ0FBQ2dCLFVBQVU7QUFBQSxHQUcxQyxVQUFBakIsS0FBSztFQUFBLE9BQUlBLEtBQUssQ0FBQ0MsS0FBSyxDQUFDaUIsY0FBYztBQUFBLEVBQzdDO0FBRUQsSUFBTUMsV0FBVyxHQUFHQyx1QkFBVyxDQUFDcEMsR0FBRyxDQUFDcUMsOEJBQWtCLENBQUM7QUFFaEQsU0FBU0MsaUJBQWlCQSxDQUFBLEVBQUc7RUFDbEMsSUFBTUMsUUFBUSxHQUFHLElBQUFDLHVCQUFXLEVBQUMsQ0FBQztFQUM5QixJQUFNQyxpQkFBaUIsR0FBRyxJQUFBQyx1QkFBVyxFQUFDLFVBQUNDLEtBQVk7SUFBQSxPQUFLQSxLQUFLLENBQUNDLElBQUksQ0FBQ0MsV0FBVyxDQUFDQyxNQUFNO0VBQUEsRUFBQztFQUN0RixJQUFNQyxJQUFJLEdBQUcsSUFBQUMsa0JBQU8sRUFBQyxDQUFDO0VBRXRCLElBQUFDLGdCQUFBLEdBQWdDLElBQUFDLDJCQUFlLEVBQzdDLHVCQUF1QixFQUN2QlQsaUJBQWlCLENBQUNVLFFBQVEsSUFBSSxRQUNoQyxDQUFDO0lBQUFDLGlCQUFBLE9BQUFDLGVBQUEsYUFBQUosZ0JBQUE7SUFITUUsUUFBUSxHQUFBQyxpQkFBQTtJQUFFRSxXQUFXLEdBQUFGLGlCQUFBO0VBSTVCLElBQUFHLGlCQUFBLEdBQTBCLElBQUFMLDJCQUFlLEVBQ3ZDLG9CQUFvQixFQUNwQlQsaUJBQWlCLENBQUNlLEtBQUssSUFBSUMsa0JBQWUsQ0FBQ04sUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUN4RCxDQUFDO0lBQUFPLGlCQUFBLE9BQUFMLGVBQUEsYUFBQUUsaUJBQUE7SUFITUMsS0FBSyxHQUFBRSxpQkFBQTtJQUFFQyxRQUFRLEdBQUFELGlCQUFBO0VBSXRCLElBQUFFLGlCQUFBLEdBQTRCLElBQUFWLDJCQUFlLEVBQ3pDLHNCQUFzQixFQUN0QlQsaUJBQWlCLENBQUNvQixNQUFNLElBQUksRUFDOUIsQ0FBQztJQUFBQyxpQkFBQSxPQUFBVCxlQUFBLGFBQUFPLGlCQUFBO0lBSE1DLE1BQU0sR0FBQUMsaUJBQUE7SUFBRUMsU0FBUyxHQUFBRCxpQkFBQTtFQUl4QixJQUFBRSxpQkFBQSxHQUFzQyxJQUFBZCwyQkFBZSxFQUNuRCwwQkFBMEIsRUFDMUJULGlCQUFpQixDQUFDd0IsV0FBVyxJQUFJLEdBQ25DLENBQUM7SUFBQUMsaUJBQUEsT0FBQWIsZUFBQSxhQUFBVyxpQkFBQTtJQUhNQyxXQUFXLEdBQUFDLGlCQUFBO0lBQUVDLGNBQWMsR0FBQUQsaUJBQUE7RUFJbEMsSUFBQUUsaUJBQUEsR0FBd0IsSUFBQWxCLDJCQUFlLEVBQUMsb0JBQW9CLEVBQUVULGlCQUFpQixDQUFDNEIsSUFBSSxJQUFJLEdBQUcsQ0FBQztJQUFBQyxrQkFBQSxPQUFBakIsZUFBQSxhQUFBZSxpQkFBQTtJQUFyRkMsSUFBSSxHQUFBQyxrQkFBQTtJQUFFQyxPQUFPLEdBQUFELGtCQUFBO0VBQ3BCLElBQUFFLGtCQUFBLEdBQThCLElBQUF0QiwyQkFBZSxFQUMzQyx1QkFBdUIsRUFDdkJULGlCQUFpQixDQUFDZ0MsT0FBTyxJQUFJLDRCQUMvQixDQUFDO0lBQUFDLGtCQUFBLE9BQUFyQixlQUFBLGFBQUFtQixrQkFBQTtJQUhNQyxPQUFPLEdBQUFDLGtCQUFBO0lBQUVDLFVBQVUsR0FBQUQsa0JBQUE7RUFJMUIsSUFBQUUsa0JBQUEsR0FBc0MsSUFBQTFCLDJCQUFlLEVBQ25ELDJCQUEyQixFQUMzQlQsaUJBQWlCLENBQUNvQyxXQUFXLElBQUksRUFDbkMsQ0FBQztJQUFBQyxrQkFBQSxPQUFBekIsZUFBQSxhQUFBdUIsa0JBQUE7SUFITUMsV0FBVyxHQUFBQyxrQkFBQTtJQUFFQyxjQUFjLEdBQUFELGtCQUFBO0VBSWxDLElBQUFFLFNBQUEsR0FBOEQsSUFBQUMsZUFBUSxFQUFDLEtBQUssQ0FBQztJQUFBQyxVQUFBLE9BQUE3QixlQUFBLGFBQUEyQixTQUFBO0lBQXRFRyx1QkFBdUIsR0FBQUQsVUFBQTtJQUFFRSwwQkFBMEIsR0FBQUYsVUFBQTtFQUMxRCxJQUFBRyxVQUFBLEdBQTBELElBQUFKLGVBQVEsRUFBQyxFQUFFLENBQUM7SUFBQUssVUFBQSxPQUFBakMsZUFBQSxhQUFBZ0MsVUFBQTtJQUEvREUscUJBQXFCLEdBQUFELFVBQUE7SUFBRUUsd0JBQXdCLEdBQUFGLFVBQUE7RUFDdEQsSUFBQUcsVUFBQSxHQUE4QyxJQUFBUixlQUFRLEVBQUMsS0FBSyxDQUFDO0lBQUFTLFVBQUEsT0FBQXJDLGVBQUEsYUFBQW9DLFVBQUE7SUFBdERFLGVBQWUsR0FBQUQsVUFBQTtJQUFFRSxrQkFBa0IsR0FBQUYsVUFBQTtFQUMxQyxJQUFBRyxVQUFBLEdBQXdDLElBQUFaLGVBQVEsRUFBQyxFQUFFLENBQUM7SUFBQWEsVUFBQSxPQUFBekMsZUFBQSxhQUFBd0MsVUFBQTtJQUE3Q0UsWUFBWSxHQUFBRCxVQUFBO0lBQUVFLGVBQWUsR0FBQUYsVUFBQTtFQUNwQyxJQUFBRyxVQUFBLEdBQWtDLElBQUFoQixlQUFRLEVBQUMsS0FBSyxDQUFDO0lBQUFpQixXQUFBLE9BQUE3QyxlQUFBLGFBQUE0QyxVQUFBO0lBQTFDRSxTQUFTLEdBQUFELFdBQUE7SUFBRUUsWUFBWSxHQUFBRixXQUFBO0VBRTlCLElBQU1HLGtCQUFrQixHQUFHLFNBQXJCQSxrQkFBa0JBLENBQUlDLEtBQWdELEVBQUs7SUFDL0UsSUFBSSxPQUFPQSxLQUFLLEtBQUssUUFBUSxFQUFFO01BQzdCaEQsV0FBVyxDQUFDZ0QsS0FBSyxDQUFDO01BQ2xCM0MsUUFBUSxDQUFDRixrQkFBZSxDQUFDNkMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDbkNWLGtCQUFrQixDQUFDLEtBQUssQ0FBQztNQUN6QkksZUFBZSxDQUFDLEVBQUUsQ0FBQztJQUNyQjtFQUNGLENBQUM7RUFFRCxJQUFNTyxnQkFBZ0IsR0FBRyxTQUFuQkEsZ0JBQWdCQSxDQUFJRCxLQUFnRCxFQUFLO0lBQzdFLElBQUksT0FBT0EsS0FBSyxLQUFLLFFBQVEsRUFBRTtNQUM3QjNDLFFBQVEsQ0FBQzJDLEtBQUssQ0FBQztJQUNqQjtFQUNGLENBQUM7RUFFRCxJQUFNRSxjQUFjLEdBQUcsU0FBakJBLGNBQWNBLENBQUkvRyxDQUFzQyxFQUFLO0lBQ2pFc0UsU0FBUyxDQUFDdEUsQ0FBQyxDQUFDZ0gsTUFBTSxDQUFDSCxLQUFLLENBQUM7SUFDekI7SUFDQVYsa0JBQWtCLENBQUMsS0FBSyxDQUFDO0lBQ3pCSSxlQUFlLENBQUMsRUFBRSxDQUFDO0VBQ3JCLENBQUM7RUFFRCxJQUFNVSxtQkFBbUIsR0FBRyxTQUF0QkEsbUJBQW1CQSxDQUFJSixLQUFlLEVBQUs7SUFDL0NuQyxjQUFjLENBQUNtQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDMUIsQ0FBQztFQUVELElBQU1LLFlBQVksR0FBRyxTQUFmQSxZQUFZQSxDQUFJTCxLQUFlLEVBQUs7SUFDeEMvQixPQUFPLENBQUMrQixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDbkIsQ0FBQztFQUVELElBQU1NLGVBQWUsR0FBRyxTQUFsQkEsZUFBZUEsQ0FBSW5ILENBQXNDLEVBQUs7SUFDbEVrRixVQUFVLENBQUNsRixDQUFDLENBQUNnSCxNQUFNLENBQUNILEtBQUssQ0FBQztJQUMxQlYsa0JBQWtCLENBQUMsS0FBSyxDQUFDO0lBQ3pCSSxlQUFlLENBQUMsRUFBRSxDQUFDO0VBQ3JCLENBQUM7RUFFRCxJQUFNYSxtQkFBbUIsR0FBRyxTQUF0QkEsbUJBQW1CQSxDQUFJcEgsQ0FBc0MsRUFBSztJQUN0RXNGLGNBQWMsQ0FBQ3RGLENBQUMsQ0FBQ2dILE1BQU0sQ0FBQ0gsS0FBSyxDQUFDO0VBQ2hDLENBQUM7RUFFRCxJQUFNUSx5QkFBeUIsR0FBRyxTQUE1QkEseUJBQXlCQSxDQUFJckgsQ0FBc0MsRUFBSztJQUM1RTJGLDBCQUEwQixDQUFDM0YsQ0FBQyxDQUFDZ0gsTUFBTSxDQUFDTSxPQUFPLENBQUM7SUFDNUMsSUFBSSxDQUFDdEgsQ0FBQyxDQUFDZ0gsTUFBTSxDQUFDTSxPQUFPLEVBQUU7TUFDckI7TUFDQXBELFFBQVEsQ0FBQyxFQUFFLENBQUM7SUFDZDtFQUNGLENBQUM7RUFFRCxJQUFNcUQsNkJBQTZCLEdBQUcsU0FBaENBLDZCQUE2QkEsQ0FBSXZILENBQXNDLEVBQUs7SUFDaEYrRix3QkFBd0IsQ0FBQy9GLENBQUMsQ0FBQ2dILE1BQU0sQ0FBQ0gsS0FBSyxDQUFDO0lBQ3hDM0MsUUFBUSxDQUFDbEUsQ0FBQyxDQUFDZ0gsTUFBTSxDQUFDSCxLQUFLLENBQUM7RUFDMUIsQ0FBQztFQUVELElBQU1XLFdBQVc7SUFBQSxJQUFBQyxJQUFBLE9BQUFDLGtCQUFBLDJCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FBRyxTQUFBQyxRQUFBO01BQUEsSUFBQUMsY0FBQSxFQUFBQyxjQUFBLEVBQUFDLE9BQUEsRUFBQUMsYUFBQTtNQUFBLE9BQUFOLFlBQUEsWUFBQU8sSUFBQSxVQUFBQyxTQUFBQyxRQUFBO1FBQUEsa0JBQUFBLFFBQUEsQ0FBQUMsSUFBQSxHQUFBRCxRQUFBLENBQUFFLElBQUE7VUFBQTtZQUNsQjNCLFlBQVksQ0FBQyxJQUFJLENBQUM7WUFBQ3lCLFFBQUEsQ0FBQUMsSUFBQTtZQUVYUCxjQUFjLEdBQUcsSUFBSVMsT0FBTyxDQUFDLFVBQUNDLENBQUMsRUFBRUMsTUFBTSxFQUFLO2NBQ2hEQyxVQUFVLENBQUM7Z0JBQUEsT0FBTUQsTUFBTSxDQUFDLElBQUlFLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO2NBQUEsR0FBRSxLQUFLLENBQUM7WUFDbkYsQ0FBQyxDQUFDO1lBRUlaLGNBQWMsR0FBRyxJQUFBYSxpQ0FBMkIsRUFBQztjQUNqRGxGLFFBQVEsRUFBRUE7WUFDWixDQUFDLENBQUM7WUFBQTBFLFFBQUEsQ0FBQUUsSUFBQTtZQUFBLE9BRXFCQyxPQUFPLENBQUNNLElBQUksQ0FBQyxDQUNsQ2QsY0FBYyxhQUFkQSxjQUFjLHVCQUFkQSxjQUFjLENBQUVlLGNBQWMsQ0FBQzFFLE1BQU0sRUFBRUwsS0FBSyxDQUFDLEVBQzdDK0QsY0FBYyxDQUNmLENBQUM7VUFBQTtZQUhJRSxPQUFPLEdBQUFJLFFBQUEsQ0FBQVcsSUFBQTtZQUtQekMsYUFBWSxHQUFHLENBQUMwQixPQUFPLEdBQ3pCdEUsUUFBUSxLQUFLLFFBQVEsR0FDbkIsa0RBQWtELEdBQ2xELDBDQUEwQyxHQUM1QyxFQUFFO1lBQ055QyxrQkFBa0IsQ0FBQyxDQUFDNkIsT0FBTyxDQUFDO1lBQzVCekIsZUFBZSxDQUFDRCxhQUFZLENBQUM7WUFDN0J4RCxRQUFRLENBQ04sSUFBQWtHLGdDQUF1QixFQUFDO2NBQ3RCdEYsUUFBUSxFQUFFQSxRQUFRO2NBQ2xCSyxLQUFLLEVBQUVBLEtBQUs7Y0FDWkssTUFBTSxFQUFFQSxNQUFNO2NBQ2RZLE9BQU8sRUFBRUEsT0FBTztjQUNoQmlFLE9BQU8sRUFBRWpCLE9BQU87Y0FDaEJ4RCxXQUFXLEVBQUVBLFdBQVc7Y0FDeEJJLElBQUksRUFBRUEsSUFBSTtjQUNWUSxXQUFXLEVBQUVBO1lBQ2YsQ0FBQyxDQUNILENBQUM7WUFBQ2dELFFBQUEsQ0FBQUUsSUFBQTtZQUFBO1VBQUE7WUFBQUYsUUFBQSxDQUFBQyxJQUFBO1lBQUFELFFBQUEsQ0FBQWMsRUFBQSxHQUFBZCxRQUFBO1lBRUZqQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7WUFDeEJJLGVBQWUsQ0FBQzZCLFFBQUEsQ0FBQWMsRUFBQSxZQUFpQlAsS0FBSyxHQUFHUCxRQUFBLENBQUFjLEVBQUEsQ0FBTUMsT0FBTyxHQUFHLG1CQUFtQixDQUFDO1VBQUM7WUFBQWYsUUFBQSxDQUFBQyxJQUFBO1lBRTlFMUIsWUFBWSxDQUFDLEtBQUssQ0FBQztZQUFDLE9BQUF5QixRQUFBLENBQUFnQixNQUFBO1VBQUE7VUFBQTtZQUFBLE9BQUFoQixRQUFBLENBQUFpQixJQUFBO1FBQUE7TUFBQSxHQUFBeEIsT0FBQTtJQUFBLENBRXZCO0lBQUEsZ0JBekNLTCxXQUFXQSxDQUFBO01BQUEsT0FBQUMsSUFBQSxDQUFBNkIsS0FBQSxPQUFBQyxTQUFBO0lBQUE7RUFBQSxHQXlDaEI7RUFFRCxvQkFDRTdLLE1BQUEsWUFBQThLLGFBQUEsQ0FBQzdILHVCQUF1QjtJQUFDOEgsU0FBUyxFQUFDO0VBQTJCLGdCQUM1RC9LLE1BQUEsWUFBQThLLGFBQUEsQ0FBQ3hLLFdBQUEsQ0FBQTBLLGlCQUFpQixxQkFDaEJoTCxNQUFBLFlBQUE4SyxhQUFBLENBQUNySSxZQUFZLHFCQUNYekMsTUFBQSxZQUFBOEssYUFBQSxDQUFDbEssVUFBQSxDQUFBcUssZ0JBQWdCO0lBQUNDLEVBQUUsRUFBQztFQUErQixDQUFFLENBQzFDLENBQ0csQ0FBQyxlQUNwQmxMLE1BQUEsWUFBQThLLGFBQUEsQ0FBQ3ZILGFBQWEscUJBQ1p2RCxNQUFBLFlBQUE4SyxhQUFBLENBQUN0SCxrQkFBa0I7SUFDakIySCxhQUFhLEVBQUVuRyxRQUFTO0lBQ3hCb0csT0FBTyxFQUFFbkosTUFBTSxDQUFDb0osSUFBSSxDQUFDL0Ysa0JBQWUsQ0FBRTtJQUN0Q2dHLFdBQVcsRUFBRSxLQUFNO0lBQ25CQyxRQUFRLEVBQUUsS0FBTTtJQUNoQkMsUUFBUSxFQUFFdEQsa0JBQW1CO0lBQzdCdUQsWUFBWSxFQUFDLE1BQU07SUFDbkJDLGNBQWMsRUFBRSxTQUFoQkEsY0FBY0EsQ0FBRUMsRUFBRTtNQUFBLE9BQUlBLEVBQUU7SUFBQSxDQUFDO0lBQ3pCQyxhQUFhLEVBQUUsU0FBZkEsYUFBYUEsQ0FBRUQsRUFBRTtNQUFBLE9BQUlBLEVBQUU7SUFBQSxDQUFDO0lBQ3hCRSxVQUFVLEVBQUUsS0FBTTtJQUNsQkMsU0FBUyxFQUFFO0VBQUssQ0FDakIsQ0FDWSxDQUFDLGVBQ2hCOUwsTUFBQSxZQUFBOEssYUFBQSxDQUFDeEssV0FBQSxDQUFBMEssaUJBQWlCLHFCQUNoQmhMLE1BQUEsWUFBQThLLGFBQUEsQ0FBQ3JJLFlBQVkscUJBQ1h6QyxNQUFBLFlBQUE4SyxhQUFBLENBQUNsSyxVQUFBLENBQUFxSyxnQkFBZ0I7SUFBQ0MsRUFBRSxFQUFDO0VBQW1DLENBQUUsQ0FDOUMsQ0FDRyxDQUFDLEVBQ25CLENBQUVsRyxRQUFRLEtBQUssUUFBUSxJQUFJLENBQUNnQyx1QkFBdUIsSUFBS2hDLFFBQVEsS0FBSyxRQUFRLGtCQUM1RWhGLE1BQUEsWUFBQThLLGFBQUEsQ0FBQ3ZILGFBQWEscUJBQ1p2RCxNQUFBLFlBQUE4SyxhQUFBLENBQUN0SCxrQkFBa0I7SUFDakIySCxhQUFhLEVBQUU5RixLQUFNO0lBQ3JCK0YsT0FBTyxFQUFFOUYsa0JBQWUsQ0FBQ04sUUFBUSxDQUFFO0lBQ25Dc0csV0FBVyxFQUFFLEtBQU07SUFDbkJDLFFBQVEsRUFBRXZHLFFBQVEsS0FBSyxRQUFRLEdBQUdnQyx1QkFBdUIsR0FBRyxLQUFNO0lBQ2xFK0UsV0FBVyxFQUFDLGtCQUFrQjtJQUM5QlAsUUFBUSxFQUFFcEQsZ0JBQWlCO0lBQzNCcUQsWUFBWSxFQUFDLE1BQU07SUFDbkJDLGNBQWMsRUFBRSxTQUFoQkEsY0FBY0EsQ0FBRUMsRUFBRTtNQUFBLE9BQUlBLEVBQUU7SUFBQSxDQUFDO0lBQ3pCQyxhQUFhLEVBQUUsU0FBZkEsYUFBYUEsQ0FBRUQsRUFBRTtNQUFBLE9BQUlBLEVBQUU7SUFBQSxDQUFDO0lBQ3hCRSxVQUFVLEVBQUUsS0FBTTtJQUNsQkMsU0FBUyxFQUFFO0VBQUssQ0FDakIsQ0FDWSxDQUNoQixFQUNBOUcsUUFBUSxLQUFLLFFBQVEsaUJBQ3BCaEYsTUFBQSxZQUFBOEssYUFBQSxDQUFDeEgsdUJBQXVCLHFCQUN0QnRELE1BQUEsWUFBQThLLGFBQUE7SUFBS2tCLEtBQUssRUFBRTtNQUFDQyxLQUFLLEVBQUU7SUFBTztFQUFFLGdCQUMzQmpNLE1BQUEsWUFBQThLLGFBQUEsQ0FBQ3hLLFdBQUEsQ0FBQTRMLFFBQVE7SUFDUGhCLEVBQUUsRUFBQyxvQkFBb0I7SUFDdkJpQixLQUFLLEVBQUMsa0JBQWtCO0lBQ3hCWCxRQUFRLEVBQUU3Qyx5QkFBMEI7SUFDcENDLE9BQU8sRUFBRTVCO0VBQXdCLENBQ2xDLENBQ0UsQ0FBQyxlQUNOaEgsTUFBQSxZQUFBOEssYUFBQSxDQUFDeEssV0FBQSxDQUFBOEwsS0FBSztJQUNKQyxJQUFJLEVBQUMsTUFBTTtJQUNYYixRQUFRLEVBQUUzQyw2QkFBOEI7SUFDeENrRCxXQUFXLEVBQUMsa0JBQWtCO0lBQzlCNUQsS0FBSyxFQUFFZixxQkFBc0I7SUFDN0JtRSxRQUFRLEVBQUUsQ0FBQ3ZFO0VBQXdCLENBQ3BDLENBQ3NCLENBQzFCLEVBQ0FoQyxRQUFRLEtBQUssUUFBUSxnQkFDcEJoRixNQUFBLFlBQUE4SyxhQUFBLENBQUE5SyxNQUFBLFlBQUFzTSxRQUFBLHFCQUNFdE0sTUFBQSxZQUFBOEssYUFBQSxDQUFDeEssV0FBQSxDQUFBMEssaUJBQWlCLHFCQUNoQmhMLE1BQUEsWUFBQThLLGFBQUEsQ0FBQ3JJLFlBQVkscUJBQ1h6QyxNQUFBLFlBQUE4SyxhQUFBLENBQUNsSyxVQUFBLENBQUFxSyxnQkFBZ0I7SUFBQ0MsRUFBRSxFQUFDO0VBQXVDLENBQUUsQ0FDbEQsQ0FDRyxDQUFDLGVBQ3BCbEwsTUFBQSxZQUFBOEssYUFBQTtJQUFLQyxTQUFTLEVBQUM7RUFBZSxnQkFDNUIvSyxNQUFBLFlBQUE4SyxhQUFBO0lBQUtDLFNBQVMsRUFBQztFQUFxQixnQkFDbEMvSyxNQUFBLFlBQUE4SyxhQUFBLENBQUN2SyxPQUFBLFdBQU07SUFBQ2dNLE1BQU0sRUFBQztFQUFNLENBQUUsQ0FDcEIsQ0FBQyxlQUNOdk0sTUFBQSxZQUFBOEssYUFBQSxDQUFDeEssV0FBQSxDQUFBOEwsS0FBSztJQUNKQyxJQUFJLEVBQUMsTUFBTTtJQUNYYixRQUFRLEVBQUVuRCxjQUFlO0lBQ3pCMEQsV0FBVyxFQUFFbkgsSUFBSSxDQUFDNEgsYUFBYSxDQUFDO01BQUN0QixFQUFFLEVBQUU7SUFBdUMsQ0FBQyxDQUFFO0lBQy9FL0MsS0FBSyxFQUFFekM7RUFBTyxDQUNmLENBQ0UsQ0FDTCxDQUFDLGdCQUVIMUYsTUFBQSxZQUFBOEssYUFBQSxDQUFBOUssTUFBQSxZQUFBc00sUUFBQSxxQkFDRXRNLE1BQUEsWUFBQThLLGFBQUEsQ0FBQ3hLLFdBQUEsQ0FBQTBLLGlCQUFpQixxQkFDaEJoTCxNQUFBLFlBQUE4SyxhQUFBLENBQUNySSxZQUFZLHFCQUNYekMsTUFBQSxZQUFBOEssYUFBQSxDQUFDbEssVUFBQSxDQUFBcUssZ0JBQWdCO0lBQUNDLEVBQUUsRUFBQztFQUF3QyxDQUFFLENBQ25ELENBQ0csQ0FBQyxlQUNwQmxMLE1BQUEsWUFBQThLLGFBQUE7SUFBS0MsU0FBUyxFQUFDO0VBQWUsZ0JBQzVCL0ssTUFBQSxZQUFBOEssYUFBQTtJQUFLQyxTQUFTLEVBQUM7RUFBcUIsZ0JBQ2xDL0ssTUFBQSxZQUFBOEssYUFBQSxDQUFDdkssT0FBQSxXQUFNO0lBQUNnTSxNQUFNLEVBQUM7RUFBTSxDQUFFLENBQ3BCLENBQUMsZUFDTnZNLE1BQUEsWUFBQThLLGFBQUEsQ0FBQ3hLLFdBQUEsQ0FBQThMLEtBQUs7SUFDSkMsSUFBSSxFQUFDLE1BQU07SUFDWGIsUUFBUSxFQUFFL0MsZUFBZ0I7SUFDMUJzRCxXQUFXLEVBQUVuSCxJQUFJLENBQUM0SCxhQUFhLENBQUM7TUFBQ3RCLEVBQUUsRUFBRTtJQUF3QyxDQUFDLENBQUU7SUFDaEYvQyxLQUFLLEVBQUU3QjtFQUFRLENBQ2hCLENBQ0UsQ0FDTCxDQUNILEVBQ0FrQixlQUFlLGlCQUNkeEgsTUFBQSxZQUFBOEssYUFBQSxDQUFDakgsaUJBQWlCO0lBQUNrSCxTQUFTLEVBQUM7RUFBZSxHQUFFbkQsWUFBZ0MsQ0FDL0UsZUFDRDVILE1BQUEsWUFBQThLLGFBQUEsQ0FBQ3hLLFdBQUEsQ0FBQTBLLGlCQUFpQixxQkFDaEJoTCxNQUFBLFlBQUE4SyxhQUFBLENBQUNySSxZQUFZLHFCQUNYekMsTUFBQSxZQUFBOEssYUFBQSxDQUFDbEssVUFBQSxDQUFBcUssZ0JBQWdCO0lBQUNDLEVBQUUsRUFBQztFQUFzQyxDQUFFLENBQ2pELENBQ0csQ0FBQyxlQUNwQmxMLE1BQUEsWUFBQThLLGFBQUEsQ0FBQ25ILGtCQUFrQixxQkFDakIzRCxNQUFBLFlBQUE4SyxhQUFBLENBQUM5RyxXQUFXO0lBQ1Z5SSxTQUFTLEVBQUUsSUFBSztJQUNoQkMsUUFBUSxFQUFFLEtBQU07SUFDaEJDLE1BQU0sRUFBRSxDQUFFO0lBQ1ZDLE1BQU0sRUFBRTlHLFdBQVk7SUFDcEIwRixRQUFRLEVBQUVqRCxtQkFBb0I7SUFDOUJzRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFFO0lBQ2RDLElBQUksRUFBRTtFQUFJLENBQ1gsQ0FDaUIsQ0FBQyxlQUNyQjlNLE1BQUEsWUFBQThLLGFBQUEsQ0FBQ3hLLFdBQUEsQ0FBQTBLLGlCQUFpQixxQkFDaEJoTCxNQUFBLFlBQUE4SyxhQUFBLENBQUNySSxZQUFZLHFCQUNYekMsTUFBQSxZQUFBOEssYUFBQSxDQUFDbEssVUFBQSxDQUFBcUssZ0JBQWdCO0lBQUNDLEVBQUUsRUFBQztFQUErQixDQUFFLENBQzFDLENBQ0csQ0FBQyxlQUNwQmxMLE1BQUEsWUFBQThLLGFBQUEsQ0FBQ25ILGtCQUFrQixxQkFDakIzRCxNQUFBLFlBQUE4SyxhQUFBLENBQUM5RyxXQUFXO0lBQ1Z5SSxTQUFTLEVBQUUsSUFBSztJQUNoQkMsUUFBUSxFQUFFLEtBQU07SUFDaEJDLE1BQU0sRUFBRSxDQUFFO0lBQ1ZDLE1BQU0sRUFBRTFHLElBQUs7SUFDYnNGLFFBQVEsRUFBRWhELFlBQWE7SUFDdkJxRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFFO0lBQ2RDLElBQUksRUFBRTtFQUFJLENBQ1gsQ0FDaUIsQ0FBQyxlQUNyQjlNLE1BQUEsWUFBQThLLGFBQUEsQ0FBQTlLLE1BQUEsWUFBQXNNLFFBQUEscUJBQ0V0TSxNQUFBLFlBQUE4SyxhQUFBLENBQUN4SyxXQUFBLENBQUEwSyxpQkFBaUIscUJBQ2hCaEwsTUFBQSxZQUFBOEssYUFBQSxDQUFDckksWUFBWSxRQUFDLDZDQUF5RCxDQUN0RCxDQUFDLGVBQ3BCekMsTUFBQSxZQUFBOEssYUFBQTtJQUFLQyxTQUFTLEVBQUM7RUFBZSxnQkFDNUIvSyxNQUFBLFlBQUE4SyxhQUFBO0lBQUtDLFNBQVMsRUFBQztFQUFxQixnQkFDbEMvSyxNQUFBLFlBQUE4SyxhQUFBLENBQUN2SyxPQUFBLFdBQU07SUFBQ2dNLE1BQU0sRUFBQztFQUFNLENBQUUsQ0FDcEIsQ0FBQyxlQUNOdk0sTUFBQSxZQUFBOEssYUFBQSxDQUFDeEssV0FBQSxDQUFBOEwsS0FBSztJQUNKQyxJQUFJLEVBQUMsTUFBTTtJQUNYYixRQUFRLEVBQUU5QyxtQkFBb0I7SUFDOUJxRCxXQUFXLEVBQUMseUJBQXlCO0lBQ3JDNUQsS0FBSyxFQUFFekI7RUFBWSxDQUNwQixDQUNFLENBQ0wsQ0FBQyxlQUNIMUcsTUFBQSxZQUFBOEssYUFBQSxDQUFDbEgsWUFBWSxxQkFDWDVELE1BQUEsWUFBQThLLGFBQUEsQ0FBQ3hLLFdBQUEsQ0FBQXlNLE1BQU07SUFBQ0MsT0FBTyxFQUFFbEUsV0FBWTtJQUFDbUQsS0FBSyxFQUFFO0VBQU8sR0FDekNqRSxTQUFTLGlCQUFJaEksTUFBQSxZQUFBOEssYUFBQSxDQUFDeEssV0FBQSxDQUFBMk0sY0FBYztJQUFDQyxJQUFJLEVBQUU7RUFBRyxDQUFFLENBQUMsZUFDMUNsTixNQUFBLFlBQUE4SyxhQUFBLENBQUNsSyxVQUFBLENBQUFxSyxnQkFBZ0I7SUFBQ0MsRUFBRSxFQUFDO0VBQThCLENBQUUsQ0FDL0MsQ0FDSSxDQUNTLENBQUM7QUFFOUIiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -1,9 +1,6 @@
1
1
  export declare const WELCOME_MESSAGE = "Hi, I am Kepler.gl AI Assistant!";
2
- export declare const INSTRUCTIONS = "You are a Kepler.gl AI Assistant.\nNote:\n- Make a plan to answer the question before calling tools\n- Add emojis to your responses to make them more engaging\n\n- For tool usage:\n 1. If parameters are missing, ask the user to provide them\n 2. If a tool fails:\n a. First try to understand and fix the error\n b. If the error persists, explain the issue to the user\n c. Suggest alternative approaches if available\n 3. Use the most appropriate tool for each task\n 4. Chain tool calls when necessary to achieve the desired outcome\n 5. Please do not run tools in parallel\n\n- For any SQL query:\n 1. Please include the SQL clause in your response\n\n- For data analysis:\n 1. For geojson data generated by tools (buffer, centroid, dissolve, zipcode, county, state, isochrone, routing):\n a. Save them as a new dataset first\n b. Use the new dataset for spatial analysis\n 2. For clustering analysis:\n a. Always perform a spatial statistical test (e.g., Local Moran's I)\n b. Explain the results in context\n c. STRICT RULE: Never use datasets generated from previous LISA tools (dataset name with \"lisa_\" prefix) as input for a new LISA analysis\n 3. For spatial joins:\n a. Use the points dataset as the first (left) dataset\n b. Explain the join operation and its purpose\n\n- For spatial filtering:\n 1. IMPORTANT: when use spatial filter to filter the points within polygons, please follow the steps:\n a. The leftDatasetName should be the points dataset\n b. The rightDatasetName should be the polygon dataset\n c. Apply the spatial filter tool and save the result (points)\n d. Use the filterDataset tool to filter the result where Count > 0\n e. Save the result of filterDataset as the final answer\n\n- For datasetName argument:\n 1. Please use the dataset name or dataset label as the datasetName argument, not the dataset id\n";
3
- export declare const PROMPT_IDEAS: {
4
- title: string;
5
- description: string;
6
- }[];
2
+ export declare const INSTRUCTIONS = "You are a Kepler.gl AI Assistant.\nNote:\n- IMPORTANT: make a plan if tools can be used to answer the question before calling tools\n- Add emojis to your responses to make them more engaging\n\n- For tool usage:\n 1. If parameters are missing, ask the user to provide them\n 2. If a tool fails:\n a. First try to understand and fix the error\n b. If the error persists, explain the issue to the user\n c. Suggest alternative approaches if available\n 3. Use the most appropriate tool for each task\n 4. Chain tool calls when necessary to achieve the desired outcome\n 5. Please do not run tools in parallel\n\n- For any SQL query:\n 1. Please include the SQL clause in your response\n\n- For data analysis:\n 1. For geojson data generated by tools (buffer, centroid, dissolve, zipcode, county, state, isochrone, routing):\n a. Save them as a new dataset first\n b. Use the new dataset for spatial analysis\n 2. For clustering analysis:\n a. Always perform a spatial statistical test (e.g., Local Moran's I)\n b. Explain the results in context\n c. STRICT RULE: Never use datasets generated from previous LISA tools (dataset name with \"lisa_\" prefix) as input for a new LISA analysis\n 3. For spatial joins:\n a. Use the points dataset as the first (left) dataset\n b. Explain the join operation and its purpose\n 4. For using road or line dataset in spatial analysis (e.g. local moran, spatial weights, and spatial join):\n a. buffer the road by 1 meter first\n b. save the buffered road as a new dataset\n c. if needed, spatial join by buffered road (left) with points (right)\n d. if needed, create a spatial weights using the buffered road\n e. apply spatial analysis using the count in the result of spatial join\n\n- For spatial filtering:\n 1. IMPORTANT: when use spatial filter to filter the points within polygons, please follow the steps:\n a. The leftDatasetName should be the points dataset\n b. The rightDatasetName should be the polygon dataset\n c. Apply the spatial filter tool and save the result (points)\n d. Use the filterDataset tool to filter the result where Count > 0\n e. Save the result of filterDataset as the final answer\n\n- For datasetName argument:\n 1. Please use the dataset name or dataset label as the datasetName argument, not the dataset id\n";
3
+ export declare const PROMPT_IDEAS = "Return ONLY a JSON array of 5 ideas based on the tools in current context.\nIMPORTANT: please mention tool in a user-friendly title, and use actual field name in the description.\nDo not include any other text or explanation.\nRandomly pick 5 tools.\nFormat:\n[{\n \"title\": \"Data Insight\",\n \"description\": \"What is the distribution of HR60?\"\n},\n{\n \"title\": \"Spatial Analysis\",\n \"description\": \"Is HR60 spatially clustered?\"\n},\n];\n";
7
4
  export declare const ASSISTANT_NAME = "kepler-gl-ai-assistant";
8
5
  export declare const ASSISTANT_DESCRIPTION = "A Kepler.gl AI Assistant";
9
6
  export declare const ASSISTANT_VERSION = "0.0.2";
@@ -8,27 +8,9 @@ exports.WELCOME_MESSAGE = exports.PROMPT_IDEAS = exports.INSTRUCTIONS = exports.
8
8
  // Copyright contributors to the kepler.gl project
9
9
 
10
10
  var WELCOME_MESSAGE = exports.WELCOME_MESSAGE = "Hi, I am Kepler.gl AI Assistant!";
11
- var INSTRUCTIONS = exports.INSTRUCTIONS = "You are a Kepler.gl AI Assistant.\nNote:\n- Make a plan to answer the question before calling tools\n- Add emojis to your responses to make them more engaging\n\n- For tool usage:\n 1. If parameters are missing, ask the user to provide them\n 2. If a tool fails:\n a. First try to understand and fix the error\n b. If the error persists, explain the issue to the user\n c. Suggest alternative approaches if available\n 3. Use the most appropriate tool for each task\n 4. Chain tool calls when necessary to achieve the desired outcome\n 5. Please do not run tools in parallel\n\n- For any SQL query:\n 1. Please include the SQL clause in your response\n\n- For data analysis:\n 1. For geojson data generated by tools (buffer, centroid, dissolve, zipcode, county, state, isochrone, routing):\n a. Save them as a new dataset first\n b. Use the new dataset for spatial analysis\n 2. For clustering analysis:\n a. Always perform a spatial statistical test (e.g., Local Moran's I)\n b. Explain the results in context\n c. STRICT RULE: Never use datasets generated from previous LISA tools (dataset name with \"lisa_\" prefix) as input for a new LISA analysis\n 3. For spatial joins:\n a. Use the points dataset as the first (left) dataset\n b. Explain the join operation and its purpose\n\n- For spatial filtering:\n 1. IMPORTANT: when use spatial filter to filter the points within polygons, please follow the steps:\n a. The leftDatasetName should be the points dataset\n b. The rightDatasetName should be the polygon dataset\n c. Apply the spatial filter tool and save the result (points)\n d. Use the filterDataset tool to filter the result where Count > 0\n e. Save the result of filterDataset as the final answer\n\n- For datasetName argument:\n 1. Please use the dataset name or dataset label as the datasetName argument, not the dataset id\n";
12
- var PROMPT_IDEAS = exports.PROMPT_IDEAS = [{
13
- title: 'Data Insight',
14
- description: 'What is the distribution of the variable?'
15
- }, {
16
- title: 'Spatial Analysis',
17
- description: 'Is the variable spatially clustered?'
18
- }, {
19
- title: 'GeoTools',
20
- description: 'How many events in California?'
21
- }, {
22
- title: 'Load Data',
23
- description: 'load data from https://geodacenter.github.io/data-and-lab/data/lehd.geojson'
24
- }, {
25
- title: 'Create a Map Layer',
26
- description: 'update its color inspired by Van Gogh Starry Night'
27
- }, {
28
- title: 'Change Basemap ',
29
- description: 'use Positron style'
30
- }];
11
+ var INSTRUCTIONS = exports.INSTRUCTIONS = "You are a Kepler.gl AI Assistant.\nNote:\n- IMPORTANT: make a plan if tools can be used to answer the question before calling tools\n- Add emojis to your responses to make them more engaging\n\n- For tool usage:\n 1. If parameters are missing, ask the user to provide them\n 2. If a tool fails:\n a. First try to understand and fix the error\n b. If the error persists, explain the issue to the user\n c. Suggest alternative approaches if available\n 3. Use the most appropriate tool for each task\n 4. Chain tool calls when necessary to achieve the desired outcome\n 5. Please do not run tools in parallel\n\n- For any SQL query:\n 1. Please include the SQL clause in your response\n\n- For data analysis:\n 1. For geojson data generated by tools (buffer, centroid, dissolve, zipcode, county, state, isochrone, routing):\n a. Save them as a new dataset first\n b. Use the new dataset for spatial analysis\n 2. For clustering analysis:\n a. Always perform a spatial statistical test (e.g., Local Moran's I)\n b. Explain the results in context\n c. STRICT RULE: Never use datasets generated from previous LISA tools (dataset name with \"lisa_\" prefix) as input for a new LISA analysis\n 3. For spatial joins:\n a. Use the points dataset as the first (left) dataset\n b. Explain the join operation and its purpose\n 4. For using road or line dataset in spatial analysis (e.g. local moran, spatial weights, and spatial join):\n a. buffer the road by 1 meter first\n b. save the buffered road as a new dataset\n c. if needed, spatial join by buffered road (left) with points (right)\n d. if needed, create a spatial weights using the buffered road\n e. apply spatial analysis using the count in the result of spatial join\n\n- For spatial filtering:\n 1. IMPORTANT: when use spatial filter to filter the points within polygons, please follow the steps:\n a. The leftDatasetName should be the points dataset\n b. The rightDatasetName should be the polygon dataset\n c. Apply the spatial filter tool and save the result (points)\n d. Use the filterDataset tool to filter the result where Count > 0\n e. Save the result of filterDataset as the final answer\n\n- For datasetName argument:\n 1. Please use the dataset name or dataset label as the datasetName argument, not the dataset id\n";
12
+ var PROMPT_IDEAS = exports.PROMPT_IDEAS = "Return ONLY a JSON array of 5 ideas based on the tools in current context.\nIMPORTANT: please mention tool in a user-friendly title, and use actual field name in the description.\nDo not include any other text or explanation.\nRandomly pick 5 tools.\nFormat:\n[{\n \"title\": \"Data Insight\",\n \"description\": \"What is the distribution of HR60?\"\n},\n{\n \"title\": \"Spatial Analysis\",\n \"description\": \"Is HR60 spatially clustered?\"\n},\n];\n";
31
13
  var ASSISTANT_NAME = exports.ASSISTANT_NAME = 'kepler-gl-ai-assistant';
32
14
  var ASSISTANT_DESCRIPTION = exports.ASSISTANT_DESCRIPTION = 'A Kepler.gl AI Assistant';
33
15
  var ASSISTANT_VERSION = exports.ASSISTANT_VERSION = '0.0.2';
34
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJXRUxDT01FX01FU1NBR0UiLCJleHBvcnRzIiwiSU5TVFJVQ1RJT05TIiwiUFJPTVBUX0lERUFTIiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsIkFTU0lTVEFOVF9OQU1FIiwiQVNTSVNUQU5UX0RFU0NSSVBUSU9OIiwiQVNTSVNUQU5UX1ZFUlNJT04iXSwic291cmNlcyI6WyIuLi9zcmMvY29uc3RhbnRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmV4cG9ydCBjb25zdCBXRUxDT01FX01FU1NBR0UgPSBgSGksIEkgYW0gS2VwbGVyLmdsIEFJIEFzc2lzdGFudCFgO1xuXG5leHBvcnQgY29uc3QgSU5TVFJVQ1RJT05TID0gYFlvdSBhcmUgYSBLZXBsZXIuZ2wgQUkgQXNzaXN0YW50LlxuTm90ZTpcbi0gTWFrZSBhIHBsYW4gdG8gYW5zd2VyIHRoZSBxdWVzdGlvbiBiZWZvcmUgY2FsbGluZyB0b29sc1xuLSBBZGQgZW1vamlzIHRvIHlvdXIgcmVzcG9uc2VzIHRvIG1ha2UgdGhlbSBtb3JlIGVuZ2FnaW5nXG5cbi0gRm9yIHRvb2wgdXNhZ2U6XG4gIDEuIElmIHBhcmFtZXRlcnMgYXJlIG1pc3NpbmcsIGFzayB0aGUgdXNlciB0byBwcm92aWRlIHRoZW1cbiAgMi4gSWYgYSB0b29sIGZhaWxzOlxuICAgICBhLiBGaXJzdCB0cnkgdG8gdW5kZXJzdGFuZCBhbmQgZml4IHRoZSBlcnJvclxuICAgICBiLiBJZiB0aGUgZXJyb3IgcGVyc2lzdHMsIGV4cGxhaW4gdGhlIGlzc3VlIHRvIHRoZSB1c2VyXG4gICAgIGMuIFN1Z2dlc3QgYWx0ZXJuYXRpdmUgYXBwcm9hY2hlcyBpZiBhdmFpbGFibGVcbiAgMy4gVXNlIHRoZSBtb3N0IGFwcHJvcHJpYXRlIHRvb2wgZm9yIGVhY2ggdGFza1xuICA0LiBDaGFpbiB0b29sIGNhbGxzIHdoZW4gbmVjZXNzYXJ5IHRvIGFjaGlldmUgdGhlIGRlc2lyZWQgb3V0Y29tZVxuICA1LiBQbGVhc2UgZG8gbm90IHJ1biB0b29scyBpbiBwYXJhbGxlbFxuXG4tIEZvciBhbnkgU1FMIHF1ZXJ5OlxuICAxLiBQbGVhc2UgaW5jbHVkZSB0aGUgU1FMIGNsYXVzZSBpbiB5b3VyIHJlc3BvbnNlXG5cbi0gRm9yIGRhdGEgYW5hbHlzaXM6XG4gIDEuIEZvciBnZW9qc29uIGRhdGEgZ2VuZXJhdGVkIGJ5IHRvb2xzIChidWZmZXIsIGNlbnRyb2lkLCBkaXNzb2x2ZSwgemlwY29kZSwgY291bnR5LCBzdGF0ZSwgaXNvY2hyb25lLCByb3V0aW5nKTpcbiAgICAgYS4gU2F2ZSB0aGVtIGFzIGEgbmV3IGRhdGFzZXQgZmlyc3RcbiAgICAgYi4gVXNlIHRoZSBuZXcgZGF0YXNldCBmb3Igc3BhdGlhbCBhbmFseXNpc1xuICAyLiBGb3IgY2x1c3RlcmluZyBhbmFseXNpczpcbiAgICAgYS4gQWx3YXlzIHBlcmZvcm0gYSBzcGF0aWFsIHN0YXRpc3RpY2FsIHRlc3QgKGUuZy4sIExvY2FsIE1vcmFuJ3MgSSlcbiAgICAgYi4gRXhwbGFpbiB0aGUgcmVzdWx0cyBpbiBjb250ZXh0XG4gICAgIGMuIFNUUklDVCBSVUxFOiBOZXZlciB1c2UgZGF0YXNldHMgZ2VuZXJhdGVkIGZyb20gcHJldmlvdXMgTElTQSB0b29scyAoZGF0YXNldCBuYW1lIHdpdGggXCJsaXNhX1wiIHByZWZpeCkgYXMgaW5wdXQgZm9yIGEgbmV3IExJU0EgYW5hbHlzaXNcbiAgMy4gRm9yIHNwYXRpYWwgam9pbnM6XG4gICAgIGEuIFVzZSB0aGUgcG9pbnRzIGRhdGFzZXQgYXMgdGhlIGZpcnN0IChsZWZ0KSBkYXRhc2V0XG4gICAgIGIuIEV4cGxhaW4gdGhlIGpvaW4gb3BlcmF0aW9uIGFuZCBpdHMgcHVycG9zZVxuXG4tIEZvciBzcGF0aWFsIGZpbHRlcmluZzpcbiAgMS4gSU1QT1JUQU5UOiB3aGVuIHVzZSBzcGF0aWFsIGZpbHRlciB0byBmaWx0ZXIgdGhlIHBvaW50cyB3aXRoaW4gcG9seWdvbnMsIHBsZWFzZSBmb2xsb3cgdGhlIHN0ZXBzOlxuICAgIGEuIFRoZSBsZWZ0RGF0YXNldE5hbWUgc2hvdWxkIGJlIHRoZSBwb2ludHMgZGF0YXNldFxuICAgIGIuIFRoZSByaWdodERhdGFzZXROYW1lIHNob3VsZCBiZSB0aGUgcG9seWdvbiBkYXRhc2V0XG4gICAgYy4gQXBwbHkgdGhlIHNwYXRpYWwgZmlsdGVyIHRvb2wgYW5kIHNhdmUgdGhlIHJlc3VsdCAocG9pbnRzKVxuICAgIGQuIFVzZSB0aGUgZmlsdGVyRGF0YXNldCB0b29sIHRvIGZpbHRlciB0aGUgcmVzdWx0IHdoZXJlIENvdW50ID4gMFxuICAgIGUuIFNhdmUgdGhlIHJlc3VsdCBvZiBmaWx0ZXJEYXRhc2V0IGFzIHRoZSBmaW5hbCBhbnN3ZXJcblxuLSBGb3IgZGF0YXNldE5hbWUgYXJndW1lbnQ6XG4gIDEuIFBsZWFzZSB1c2UgdGhlIGRhdGFzZXQgbmFtZSBvciBkYXRhc2V0IGxhYmVsIGFzIHRoZSBkYXRhc2V0TmFtZSBhcmd1bWVudCwgbm90IHRoZSBkYXRhc2V0IGlkXG5gO1xuXG5leHBvcnQgY29uc3QgUFJPTVBUX0lERUFTID0gW1xuICB7XG4gICAgdGl0bGU6ICdEYXRhIEluc2lnaHQnLFxuICAgIGRlc2NyaXB0aW9uOiAnV2hhdCBpcyB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB2YXJpYWJsZT8nXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ1NwYXRpYWwgQW5hbHlzaXMnLFxuICAgIGRlc2NyaXB0aW9uOiAnSXMgdGhlIHZhcmlhYmxlIHNwYXRpYWxseSBjbHVzdGVyZWQ/J1xuICB9LFxuICB7XG4gICAgdGl0bGU6ICdHZW9Ub29scycsXG4gICAgZGVzY3JpcHRpb246ICdIb3cgbWFueSBldmVudHMgaW4gQ2FsaWZvcm5pYT8nXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0xvYWQgRGF0YScsXG4gICAgZGVzY3JpcHRpb246ICdsb2FkIGRhdGEgZnJvbSBodHRwczovL2dlb2RhY2VudGVyLmdpdGh1Yi5pby9kYXRhLWFuZC1sYWIvZGF0YS9sZWhkLmdlb2pzb24nXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ0NyZWF0ZSBhIE1hcCBMYXllcicsXG4gICAgZGVzY3JpcHRpb246ICd1cGRhdGUgaXRzIGNvbG9yIGluc3BpcmVkIGJ5IFZhbiBHb2doIFN0YXJyeSBOaWdodCdcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnQ2hhbmdlIEJhc2VtYXAgJyxcbiAgICBkZXNjcmlwdGlvbjogJ3VzZSBQb3NpdHJvbiBzdHlsZSdcbiAgfVxuXTtcblxuZXhwb3J0IGNvbnN0IEFTU0lTVEFOVF9OQU1FID0gJ2tlcGxlci1nbC1haS1hc3Npc3RhbnQnO1xuXG5leHBvcnQgY29uc3QgQVNTSVNUQU5UX0RFU0NSSVBUSU9OID0gJ0EgS2VwbGVyLmdsIEFJIEFzc2lzdGFudCc7XG5cbmV4cG9ydCBjb25zdCBBU1NJU1RBTlRfVkVSU0lPTiA9ICcwLjAuMic7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7O0FBRU8sSUFBTUEsZUFBZSxHQUFBQyxPQUFBLENBQUFELGVBQUEscUNBQXFDO0FBRTFELElBQU1FLFlBQVksR0FBQUQsT0FBQSxDQUFBQyxZQUFBLDAzREF3Q3hCO0FBRU0sSUFBTUMsWUFBWSxHQUFBRixPQUFBLENBQUFFLFlBQUEsR0FBRyxDQUMxQjtFQUNFQyxLQUFLLEVBQUUsY0FBYztFQUNyQkMsV0FBVyxFQUFFO0FBQ2YsQ0FBQyxFQUNEO0VBQ0VELEtBQUssRUFBRSxrQkFBa0I7RUFDekJDLFdBQVcsRUFBRTtBQUNmLENBQUMsRUFDRDtFQUNFRCxLQUFLLEVBQUUsVUFBVTtFQUNqQkMsV0FBVyxFQUFFO0FBQ2YsQ0FBQyxFQUNEO0VBQ0VELEtBQUssRUFBRSxXQUFXO0VBQ2xCQyxXQUFXLEVBQUU7QUFDZixDQUFDLEVBQ0Q7RUFDRUQsS0FBSyxFQUFFLG9CQUFvQjtFQUMzQkMsV0FBVyxFQUFFO0FBQ2YsQ0FBQyxFQUNEO0VBQ0VELEtBQUssRUFBRSxpQkFBaUI7RUFDeEJDLFdBQVcsRUFBRTtBQUNmLENBQUMsQ0FDRjtBQUVNLElBQU1DLGNBQWMsR0FBQUwsT0FBQSxDQUFBSyxjQUFBLEdBQUcsd0JBQXdCO0FBRS9DLElBQU1DLHFCQUFxQixHQUFBTixPQUFBLENBQUFNLHFCQUFBLEdBQUcsMEJBQTBCO0FBRXhELElBQU1DLGlCQUFpQixHQUFBUCxPQUFBLENBQUFPLGlCQUFBLEdBQUcsT0FBTyIsImlnbm9yZUxpc3QiOltdfQ==
16
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJXRUxDT01FX01FU1NBR0UiLCJleHBvcnRzIiwiSU5TVFJVQ1RJT05TIiwiUFJPTVBUX0lERUFTIiwiQVNTSVNUQU5UX05BTUUiLCJBU1NJU1RBTlRfREVTQ1JJUFRJT04iLCJBU1NJU1RBTlRfVkVSU0lPTiJdLCJzb3VyY2VzIjpbIi4uL3NyYy9jb25zdGFudHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuZXhwb3J0IGNvbnN0IFdFTENPTUVfTUVTU0FHRSA9IGBIaSwgSSBhbSBLZXBsZXIuZ2wgQUkgQXNzaXN0YW50IWA7XG5cbmV4cG9ydCBjb25zdCBJTlNUUlVDVElPTlMgPSBgWW91IGFyZSBhIEtlcGxlci5nbCBBSSBBc3Npc3RhbnQuXG5Ob3RlOlxuLSBJTVBPUlRBTlQ6IG1ha2UgYSBwbGFuIGlmIHRvb2xzIGNhbiBiZSB1c2VkIHRvIGFuc3dlciB0aGUgcXVlc3Rpb24gYmVmb3JlIGNhbGxpbmcgdG9vbHNcbi0gQWRkIGVtb2ppcyB0byB5b3VyIHJlc3BvbnNlcyB0byBtYWtlIHRoZW0gbW9yZSBlbmdhZ2luZ1xuXG4tIEZvciB0b29sIHVzYWdlOlxuICAxLiBJZiBwYXJhbWV0ZXJzIGFyZSBtaXNzaW5nLCBhc2sgdGhlIHVzZXIgdG8gcHJvdmlkZSB0aGVtXG4gIDIuIElmIGEgdG9vbCBmYWlsczpcbiAgICAgYS4gRmlyc3QgdHJ5IHRvIHVuZGVyc3RhbmQgYW5kIGZpeCB0aGUgZXJyb3JcbiAgICAgYi4gSWYgdGhlIGVycm9yIHBlcnNpc3RzLCBleHBsYWluIHRoZSBpc3N1ZSB0byB0aGUgdXNlclxuICAgICBjLiBTdWdnZXN0IGFsdGVybmF0aXZlIGFwcHJvYWNoZXMgaWYgYXZhaWxhYmxlXG4gIDMuIFVzZSB0aGUgbW9zdCBhcHByb3ByaWF0ZSB0b29sIGZvciBlYWNoIHRhc2tcbiAgNC4gQ2hhaW4gdG9vbCBjYWxscyB3aGVuIG5lY2Vzc2FyeSB0byBhY2hpZXZlIHRoZSBkZXNpcmVkIG91dGNvbWVcbiAgNS4gUGxlYXNlIGRvIG5vdCBydW4gdG9vbHMgaW4gcGFyYWxsZWxcblxuLSBGb3IgYW55IFNRTCBxdWVyeTpcbiAgMS4gUGxlYXNlIGluY2x1ZGUgdGhlIFNRTCBjbGF1c2UgaW4geW91ciByZXNwb25zZVxuXG4tIEZvciBkYXRhIGFuYWx5c2lzOlxuICAxLiBGb3IgZ2VvanNvbiBkYXRhIGdlbmVyYXRlZCBieSB0b29scyAoYnVmZmVyLCBjZW50cm9pZCwgZGlzc29sdmUsIHppcGNvZGUsIGNvdW50eSwgc3RhdGUsIGlzb2Nocm9uZSwgcm91dGluZyk6XG4gICAgIGEuIFNhdmUgdGhlbSBhcyBhIG5ldyBkYXRhc2V0IGZpcnN0XG4gICAgIGIuIFVzZSB0aGUgbmV3IGRhdGFzZXQgZm9yIHNwYXRpYWwgYW5hbHlzaXNcbiAgMi4gRm9yIGNsdXN0ZXJpbmcgYW5hbHlzaXM6XG4gICAgIGEuIEFsd2F5cyBwZXJmb3JtIGEgc3BhdGlhbCBzdGF0aXN0aWNhbCB0ZXN0IChlLmcuLCBMb2NhbCBNb3JhbidzIEkpXG4gICAgIGIuIEV4cGxhaW4gdGhlIHJlc3VsdHMgaW4gY29udGV4dFxuICAgICBjLiBTVFJJQ1QgUlVMRTogTmV2ZXIgdXNlIGRhdGFzZXRzIGdlbmVyYXRlZCBmcm9tIHByZXZpb3VzIExJU0EgdG9vbHMgKGRhdGFzZXQgbmFtZSB3aXRoIFwibGlzYV9cIiBwcmVmaXgpIGFzIGlucHV0IGZvciBhIG5ldyBMSVNBIGFuYWx5c2lzXG4gIDMuIEZvciBzcGF0aWFsIGpvaW5zOlxuICAgICBhLiBVc2UgdGhlIHBvaW50cyBkYXRhc2V0IGFzIHRoZSBmaXJzdCAobGVmdCkgZGF0YXNldFxuICAgICBiLiBFeHBsYWluIHRoZSBqb2luIG9wZXJhdGlvbiBhbmQgaXRzIHB1cnBvc2VcbiAgNC4gRm9yIHVzaW5nIHJvYWQgb3IgbGluZSBkYXRhc2V0IGluIHNwYXRpYWwgYW5hbHlzaXMgKGUuZy4gbG9jYWwgbW9yYW4sIHNwYXRpYWwgd2VpZ2h0cywgYW5kIHNwYXRpYWwgam9pbik6XG4gICAgIGEuIGJ1ZmZlciB0aGUgcm9hZCBieSAxIG1ldGVyIGZpcnN0XG4gICAgIGIuIHNhdmUgdGhlIGJ1ZmZlcmVkIHJvYWQgYXMgYSBuZXcgZGF0YXNldFxuICAgICBjLiBpZiBuZWVkZWQsIHNwYXRpYWwgam9pbiBieSBidWZmZXJlZCByb2FkIChsZWZ0KSB3aXRoIHBvaW50cyAocmlnaHQpXG4gICAgIGQuIGlmIG5lZWRlZCwgY3JlYXRlIGEgc3BhdGlhbCB3ZWlnaHRzIHVzaW5nIHRoZSBidWZmZXJlZCByb2FkXG4gICAgIGUuIGFwcGx5IHNwYXRpYWwgYW5hbHlzaXMgdXNpbmcgdGhlIGNvdW50IGluIHRoZSByZXN1bHQgb2Ygc3BhdGlhbCBqb2luXG5cbi0gRm9yIHNwYXRpYWwgZmlsdGVyaW5nOlxuICAxLiBJTVBPUlRBTlQ6IHdoZW4gdXNlIHNwYXRpYWwgZmlsdGVyIHRvIGZpbHRlciB0aGUgcG9pbnRzIHdpdGhpbiBwb2x5Z29ucywgcGxlYXNlIGZvbGxvdyB0aGUgc3RlcHM6XG4gICAgYS4gVGhlIGxlZnREYXRhc2V0TmFtZSBzaG91bGQgYmUgdGhlIHBvaW50cyBkYXRhc2V0XG4gICAgYi4gVGhlIHJpZ2h0RGF0YXNldE5hbWUgc2hvdWxkIGJlIHRoZSBwb2x5Z29uIGRhdGFzZXRcbiAgICBjLiBBcHBseSB0aGUgc3BhdGlhbCBmaWx0ZXIgdG9vbCBhbmQgc2F2ZSB0aGUgcmVzdWx0IChwb2ludHMpXG4gICAgZC4gVXNlIHRoZSBmaWx0ZXJEYXRhc2V0IHRvb2wgdG8gZmlsdGVyIHRoZSByZXN1bHQgd2hlcmUgQ291bnQgPiAwXG4gICAgZS4gU2F2ZSB0aGUgcmVzdWx0IG9mIGZpbHRlckRhdGFzZXQgYXMgdGhlIGZpbmFsIGFuc3dlclxuXG4tIEZvciBkYXRhc2V0TmFtZSBhcmd1bWVudDpcbiAgMS4gUGxlYXNlIHVzZSB0aGUgZGF0YXNldCBuYW1lIG9yIGRhdGFzZXQgbGFiZWwgYXMgdGhlIGRhdGFzZXROYW1lIGFyZ3VtZW50LCBub3QgdGhlIGRhdGFzZXQgaWRcbmA7XG5cbmV4cG9ydCBjb25zdCBQUk9NUFRfSURFQVMgPSBgUmV0dXJuIE9OTFkgYSBKU09OIGFycmF5IG9mIDUgaWRlYXMgYmFzZWQgb24gdGhlIHRvb2xzIGluIGN1cnJlbnQgY29udGV4dC5cbklNUE9SVEFOVDogcGxlYXNlIG1lbnRpb24gdG9vbCBpbiBhIHVzZXItZnJpZW5kbHkgdGl0bGUsIGFuZCB1c2UgYWN0dWFsIGZpZWxkIG5hbWUgaW4gdGhlIGRlc2NyaXB0aW9uLlxuRG8gbm90IGluY2x1ZGUgYW55IG90aGVyIHRleHQgb3IgZXhwbGFuYXRpb24uXG5SYW5kb21seSBwaWNrIDUgdG9vbHMuXG5Gb3JtYXQ6XG5be1xuICBcInRpdGxlXCI6IFwiRGF0YSBJbnNpZ2h0XCIsXG4gIFwiZGVzY3JpcHRpb25cIjogXCJXaGF0IGlzIHRoZSBkaXN0cmlidXRpb24gb2YgSFI2MD9cIlxufSxcbntcbiAgXCJ0aXRsZVwiOiBcIlNwYXRpYWwgQW5hbHlzaXNcIixcbiAgXCJkZXNjcmlwdGlvblwiOiBcIklzIEhSNjAgc3BhdGlhbGx5IGNsdXN0ZXJlZD9cIlxufSxcbl07XG5gO1xuXG5leHBvcnQgY29uc3QgQVNTSVNUQU5UX05BTUUgPSAna2VwbGVyLWdsLWFpLWFzc2lzdGFudCc7XG5cbmV4cG9ydCBjb25zdCBBU1NJU1RBTlRfREVTQ1JJUFRJT04gPSAnQSBLZXBsZXIuZ2wgQUkgQXNzaXN0YW50JztcblxuZXhwb3J0IGNvbnN0IEFTU0lTVEFOVF9WRVJTSU9OID0gJzAuMC4yJztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTs7QUFFTyxJQUFNQSxlQUFlLEdBQUFDLE9BQUEsQ0FBQUQsZUFBQSxxQ0FBcUM7QUFFMUQsSUFBTUUsWUFBWSxHQUFBRCxPQUFBLENBQUFDLFlBQUEscTBFQThDeEI7QUFFTSxJQUFNQyxZQUFZLEdBQUFGLE9BQUEsQ0FBQUUsWUFBQSwrY0FjeEI7QUFFTSxJQUFNQyxjQUFjLEdBQUFILE9BQUEsQ0FBQUcsY0FBQSxHQUFHLHdCQUF3QjtBQUUvQyxJQUFNQyxxQkFBcUIsR0FBQUosT0FBQSxDQUFBSSxxQkFBQSxHQUFHLDBCQUEwQjtBQUV4RCxJQUFNQyxpQkFBaUIsR0FBQUwsT0FBQSxDQUFBSyxpQkFBQSxHQUFHLE9BQU8iLCJpZ25vcmVMaXN0IjpbXX0=