@kepler.gl/reducers 3.3.0-alpha.15 → 3.3.0-alpha.16

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.
@@ -4,9 +4,12 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.setMapSplitModeUpdater = exports.replaceDataInMapUpdater = exports.loadFilesSuccessUpdater = exports.isValidConfig = exports.defaultAddDataToMapOptions = exports.combinedSetMapViewModeUpdater = exports.combinedMapStyleChangeUpdater = exports.combinedLayerTypeChangeUpdater = exports.addDataToMapUpdater = exports.addDataToMapComposed = void 0;
7
+ exports.stageLoadedFilesUpdater = exports.setMapSplitModeUpdater = exports.replaceDataInMapUpdater = exports.loadFilesSuccessUpdater = exports.isValidConfig = exports.defaultAddDataToMapOptions = exports.confirmReplaceDatasetUpdater = exports.combinedSetMapViewModeUpdater = exports.combinedMapStyleChangeUpdater = exports.combinedLayerTypeChangeUpdater = exports.appendStagedLoadedFilesUpdater = exports.addDataToMapUpdater = exports.addDataToMapComposed = void 0;
8
8
  exports.syncGlobeConfigColorsToStyle = syncGlobeConfigColorsToStyle;
9
9
  exports.toggleSplitMapUpdater = void 0;
10
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
11
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
12
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
13
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
14
  var _uiStateUpdaters = require("./ui-state-updaters");
12
15
  var _visStateUpdaters = require("./vis-state-updaters");
@@ -18,6 +21,7 @@ var _utils = require("@kepler.gl/utils");
18
21
  var _dataUtils = require("./data-utils");
19
22
  var _constants = require("@kepler.gl/constants");
20
23
  var _deckglLayers = require("@kepler.gl/deckgl-layers");
24
+ var _excluded = ["deleteOriginalDataset"];
21
25
  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; }
22
26
  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; } // SPDX-License-Identifier: MIT
23
27
  // Copyright contributors to the kepler.gl project
@@ -173,11 +177,15 @@ var addDataToMapUpdater = exports.addDataToMapUpdater = function addDataToMapUpd
173
177
  } : {}))])(state);
174
178
  };
175
179
  var loadFilesSuccessUpdater = exports.loadFilesSuccessUpdater = function loadFilesSuccessUpdater(state, action) {
180
+ if (isStaleFileLoadFinish(state.visState.fileLoading, action.loadId)) {
181
+ return state;
182
+ }
176
183
  // still more to load
177
- var payloads = (0, _processors.filesToDataPayload)(action.result);
184
+ var payloads = (0, _processors.filesToDataPayload)(action.result, action.options);
178
185
  var nextState = (0, _composerHelpers.compose_)([(0, _composerHelpers.pick_)('visState')((0, _composerHelpers.merge_)({
179
186
  fileLoading: false,
180
- fileLoadingProgress: {}
187
+ fileLoadingProgress: {},
188
+ stagedToAdd: null
181
189
  }))])(state);
182
190
  // make multiple add data to map calls
183
191
  var stateWithData = (0, _composerHelpers.compose_)(payloads.map(function (p) {
@@ -185,6 +193,151 @@ var loadFilesSuccessUpdater = exports.loadFilesSuccessUpdater = function loadFil
185
193
  }))(nextState);
186
194
  return stateWithData;
187
195
  };
196
+ function keptLoadErrors() {
197
+ var progress = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
198
+ return Object.fromEntries(Object.entries(progress).filter(function (_ref3) {
199
+ var _ref4 = (0, _slicedToArray2["default"])(_ref3, 2),
200
+ value = _ref4[1];
201
+ return value === null || value === void 0 ? void 0 : value.error;
202
+ }));
203
+ }
204
+
205
+ /** A finish from the 200ms pause is stale once that load was canceled or replaced. */
206
+ function isStaleFileLoadFinish(fileLoading, loadId) {
207
+ if (loadId == null) {
208
+ return false;
209
+ }
210
+ return !fileLoading || fileLoading.loadId !== loadId;
211
+ }
212
+
213
+ /**
214
+ * Finish a deferred file load: keep the parsed cache, clear the loading flag,
215
+ * and leave the Add Data modal open until the user confirms.
216
+ * @memberof combinedUpdaters
217
+ * @public
218
+ */
219
+ var stageLoadedFilesUpdater = exports.stageLoadedFilesUpdater = function stageLoadedFilesUpdater(state, action) {
220
+ if (isStaleFileLoadFinish(state.visState.fileLoading, action.loadId)) {
221
+ return state;
222
+ }
223
+ var modalOpen = state.uiState.currentModal === _constants.ADD_DATA_ID;
224
+ var result = action.result || [];
225
+ var previous = modalOpen && Array.isArray(state.visState.stagedToAdd) ? state.visState.stagedToAdd : [];
226
+ var stagedToAdd = [].concat((0, _toConsumableArray2["default"])(previous), (0, _toConsumableArray2["default"])(result));
227
+ return (0, _composerHelpers.compose_)([(0, _composerHelpers.pick_)('visState')((0, _composerHelpers.merge_)({
228
+ fileLoading: false,
229
+ fileLoadingProgress: modalOpen ? keptLoadErrors(state.visState.fileLoadingProgress) : {},
230
+ stagedToAdd: modalOpen && stagedToAdd.length ? stagedToAdd : null
231
+ })), (0, _composerHelpers.pick_)('uiState')((0, _composerHelpers.apply_)(_uiStateUpdaters.loadFilesSuccessUpdater, (0, _composerHelpers.payload_)(null)))])(state);
232
+ };
233
+ function stagedItemKey(item) {
234
+ var _item$metadata, _item$info;
235
+ return (item === null || item === void 0 || (_item$metadata = item.metadata) === null || _item$metadata === void 0 ? void 0 : _item$metadata.source) || (item === null || item === void 0 || (_item$info = item.info) === null || _item$info === void 0 ? void 0 : _item$info.id) || '';
236
+ }
237
+
238
+ /**
239
+ * Add datasets to the Add Data list without interrupting a file that is still parsing.
240
+ * @memberof combinedUpdaters
241
+ * @public
242
+ */
243
+ var appendStagedLoadedFilesUpdater = exports.appendStagedLoadedFilesUpdater = function appendStagedLoadedFilesUpdater(state, action) {
244
+ if (state.uiState.currentModal !== _constants.ADD_DATA_ID) {
245
+ return state;
246
+ }
247
+ var previous = Array.isArray(state.visState.stagedToAdd) ? state.visState.stagedToAdd : [];
248
+ var seen = new Set(previous.map(stagedItemKey).filter(Boolean));
249
+ var next = (action.result || []).filter(function (item) {
250
+ var key = stagedItemKey(item);
251
+ if (!key || seen.has(key)) {
252
+ return false;
253
+ }
254
+ seen.add(key);
255
+ return true;
256
+ });
257
+ if (!next.length) {
258
+ return state;
259
+ }
260
+ return (0, _composerHelpers.compose_)([(0, _composerHelpers.pick_)('visState')((0, _composerHelpers.merge_)({
261
+ stagedToAdd: [].concat((0, _toConsumableArray2["default"])(previous), (0, _toConsumableArray2["default"])(next))
262
+ }))])(state);
263
+ };
264
+
265
+ /**
266
+ * The first plain dataset in a confirmed upload replaces the selected table.
267
+ * A kepler.gl map json is added as a map. Further tables are added after the replacement.
268
+ */
269
+ function splitReplacementUpload(payloads) {
270
+ var datasets = [];
271
+ var maps = [];
272
+ payloads.forEach(function (payload) {
273
+ if (payload.config) {
274
+ maps.push(payload);
275
+ return;
276
+ }
277
+ var list = (Array.isArray(payload.datasets) ? payload.datasets : [payload.datasets]).filter(function (dataset) {
278
+ return Boolean(dataset);
279
+ });
280
+ datasets.push.apply(datasets, (0, _toConsumableArray2["default"])(list));
281
+ });
282
+ var datasetToUse = datasets[0],
283
+ more = datasets.slice(1);
284
+ return {
285
+ datasetToUse: datasetToUse !== null && datasetToUse !== void 0 ? datasetToUse : null,
286
+ remainder: [].concat(maps, (0, _toConsumableArray2["default"])(more.length ? [{
287
+ datasets: more,
288
+ options: {
289
+ keepExistingConfig: true,
290
+ centerMap: false,
291
+ autoCreateLayers: false
292
+ }
293
+ }] : []))
294
+ };
295
+ }
296
+
297
+ /**
298
+ * Turn a confirmed Add Data selection into a dataset replacement.
299
+ * Layers and filters move onto the new table. The original table is dropped unless asked to stay.
300
+ * @memberof combinedUpdaters
301
+ * @public
302
+ */
303
+ var confirmReplaceDatasetUpdater = exports.confirmReplaceDatasetUpdater = function confirmReplaceDatasetUpdater(state, action) {
304
+ var _datasetToUse$info;
305
+ var payloads = (0, _processors.filesToDataPayload)(action.result, {
306
+ keepExistingConfig: true,
307
+ centerMap: true,
308
+ autoCreateLayers: false
309
+ });
310
+ var cleared = (0, _composerHelpers.compose_)([(0, _composerHelpers.pick_)('visState')((0, _composerHelpers.merge_)({
311
+ fileLoading: false,
312
+ fileLoadingProgress: {},
313
+ stagedToAdd: null
314
+ }))])(state);
315
+ var _splitReplacementUplo = splitReplacementUpload(payloads),
316
+ datasetToUse = _splitReplacementUplo.datasetToUse,
317
+ remainder = _splitReplacementUplo.remainder;
318
+ if (datasetToUse !== null && datasetToUse !== void 0 && (_datasetToUse$info = datasetToUse.info) !== null && _datasetToUse$info !== void 0 && _datasetToUse$info.id && action.datasetToReplaceId) {
319
+ var replaced = replaceDataInMapUpdater(cleared, {
320
+ payload: {
321
+ datasetToReplaceId: action.datasetToReplaceId,
322
+ datasetToUse: datasetToUse,
323
+ options: {
324
+ deleteOriginalDataset: action.deleteOriginalDataset !== false
325
+ }
326
+ }
327
+ });
328
+ if (replaced !== cleared) {
329
+ if (!remainder.length) {
330
+ return replaced;
331
+ }
332
+ return (0, _composerHelpers.compose_)(remainder.map(function (p) {
333
+ return (0, _composerHelpers.apply_)(addDataToMapUpdater, (0, _composerHelpers.payload_)(p));
334
+ }))(replaced);
335
+ }
336
+ }
337
+ return (0, _composerHelpers.compose_)(payloads.map(function (p) {
338
+ return (0, _composerHelpers.apply_)(addDataToMapUpdater, (0, _composerHelpers.payload_)(p));
339
+ }))(cleared);
340
+ };
188
341
  var addDataToMapComposed = exports.addDataToMapComposed = addDataToMapUpdater;
189
342
 
190
343
  /**
@@ -460,13 +613,16 @@ var defaultReplaceDataToMapOptions = {
460
613
  /**
461
614
  * Updater replace a dataset in state
462
615
  */
463
- var replaceDataInMapUpdater = exports.replaceDataInMapUpdater = function replaceDataInMapUpdater(state, _ref3) {
464
- var payload = _ref3.payload;
616
+ var replaceDataInMapUpdater = exports.replaceDataInMapUpdater = function replaceDataInMapUpdater(state, _ref5) {
617
+ var payload = _ref5.payload;
465
618
  var datasetToReplaceId = payload.datasetToReplaceId,
466
619
  datasetToUse = payload.datasetToUse,
467
620
  _payload$options = payload.options,
468
621
  options = _payload$options === void 0 ? {} : _payload$options;
469
- var addDataToMapOptions = _objectSpread(_objectSpread({}, defaultReplaceDataToMapOptions), options);
622
+ var _options$deleteOrigin = options.deleteOriginalDataset,
623
+ deleteOriginalDataset = _options$deleteOrigin === void 0 ? true : _options$deleteOrigin,
624
+ replaceOptions = (0, _objectWithoutProperties2["default"])(options, _excluded);
625
+ var addDataToMapOptions = _objectSpread(_objectSpread({}, defaultReplaceDataToMapOptions), replaceOptions);
470
626
 
471
627
  // check if dataset is there
472
628
  if (!state.visState.datasets[datasetToReplaceId]) {
@@ -479,7 +635,9 @@ var replaceDataInMapUpdater = exports.replaceDataInMapUpdater = function replace
479
635
  }
480
636
  // remove dataset and put dependencies in toBeMerged
481
637
  var preparedState = _objectSpread(_objectSpread({}, state), {}, {
482
- visState: (0, _visStateUpdaters.prepareStateForDatasetReplace)(state.visState, datasetToReplaceId, dataIdToUse)
638
+ visState: (0, _visStateUpdaters.prepareStateForDatasetReplace)(state.visState, datasetToReplaceId, dataIdToUse, {
639
+ deleteOriginalDataset: deleteOriginalDataset
640
+ })
483
641
  });
484
642
  var nextState = addDataToMapUpdater(preparedState, (0, _composerHelpers.payload_)({
485
643
  datasets: datasetToUse,
@@ -488,4 +646,4 @@ var replaceDataInMapUpdater = exports.replaceDataInMapUpdater = function replace
488
646
  }));
489
647
  return nextState;
490
648
  };
491
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdWlTdGF0ZVVwZGF0ZXJzIiwicmVxdWlyZSIsIl92aXNTdGF0ZVVwZGF0ZXJzIiwiX21hcFN0YXRlVXBkYXRlcnMiLCJfbWFwU3R5bGVVcGRhdGVycyIsIl9wcm9jZXNzb3JzIiwiX2NvbXBvc2VySGVscGVycyIsIl91dGlscyIsIl9kYXRhVXRpbHMiLCJfY29uc3RhbnRzIiwiX2RlY2tnbExheWVycyIsIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiY29tYmluZWRVcGRhdGVycyIsImlzVmFsaWRDb25maWciLCJleHBvcnRzIiwiY29uZmlnIiwiaXNQbGFpbk9iamVjdCIsInZlcnNpb24iLCJkZWZhdWx0QWRkRGF0YVRvTWFwT3B0aW9ucyIsImNlbnRlck1hcCIsImtlZXBFeGlzdGluZ0NvbmZpZyIsImF1dG9DcmVhdGVMYXllcnMiLCJhdXRvQ3JlYXRlVG9vbHRpcHMiLCJhZGREYXRhVG9NYXBVcGRhdGVyIiwic3RhdGUiLCJfcmVmIiwiX2RhdGFzZXRzJCIsIl9kYXRhc2V0cyQyIiwiX2RhdGFzZXRzJDMiLCJwYXlsb2FkIiwiZGF0YXNldHMiLCJpbmZvIiwib3B0aW9ucyIsImlzUHJvZ3Jlc3NpdmVMb2FkaW5nIiwiQXJyYXkiLCJpc0FycmF5IiwiZm9ybWF0IiwiaWQiLCJ2aXNTdGF0ZSIsImNvbXBvc2VfIiwicGlja18iLCJhcHBseV8iLCJ2aXNTdGF0ZVVwZGF0ZVZpc0RhdGFVcGRhdGVyIiwicGFyc2VkQ29uZmlnIiwic2NoZW1hIiwicGFyc2VTYXZlZENvbmZpZyIsIm9sZExheWVycyIsImxheWVycyIsImZpbHRlck5ld2x5QWRkZWRMYXllcnMiLCJubCIsImZpbmQiLCJvbCIsImZpbmRNYXBCb3VuZHNJZkNlbnRlcmVkIiwiYm91bmRzIiwiZmluZE1hcEJvdW5kcyIsInVuZGVmaW5lZCIsImlmXyIsIkJvb2xlYW4iLCJzZXRNYXBJbmZvVXBkYXRlciIsIndpdGhfIiwiX3JlZjIiLCJzdGF0ZU1hcENvbmZpZ1VwZGF0ZXIiLCJwYXlsb2FkXyIsInN0eWxlTWFwQ29uZmlnVXBkYXRlciIsInVpU3RhdGVSZWNlaXZlTWFwQ29uZmlnVXBkYXRlciIsInVpU3RhdGVMb2FkRmlsZXNTdWNjZXNzVXBkYXRlciIsInRvZ2dsZU1vZGFsVXBkYXRlciIsIm1lcmdlXyIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInJlYWRPbmx5IiwibG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXIiLCJhY3Rpb24iLCJwYXlsb2FkcyIsImZpbGVzVG9EYXRhUGF5bG9hZCIsInJlc3VsdCIsIm5leHRTdGF0ZSIsImZpbGVMb2FkaW5nIiwiZmlsZUxvYWRpbmdQcm9ncmVzcyIsInN0YXRlV2l0aERhdGEiLCJtYXAiLCJwIiwiYWRkRGF0YVRvTWFwQ29tcG9zZWQiLCJ1cGRhdGVPdmVybGF5QmxlbmRpbmciLCJvdmVybGF5QmxlbmRpbmciLCJPVkVSTEFZX0JMRU5ESU5HUyIsIm5vcm1hbCIsInZhbHVlIiwidXBkYXRlRGFya0Jhc2VNYXBMYXllcnMiLCJkYXJrQmFzZU1hcEVuYWJsZWQiLCJsYXllcklkIiwibGF5ZXIiLCJ2aXNDb25maWdTZXR0aW5ncyIsInZpc0NvbmZpZyIsInVwZGF0ZUxheWVyQ29uZmlnIiwiY29tYmluZWRNYXBTdHlsZUNoYW5nZVVwZGF0ZXIiLCJfbWFwU3RhdGUkZ2xvYmUiLCJtYXBTdHlsZSIsImdldENvbG9yTW9kZSIsImtleSIsIl9tYXBTdHlsZSRtYXBTdHlsZXMkayIsIm1hcFN0eWxlcyIsImNvbG9yTW9kZSIsInByZXZDb2xvck1vZGUiLCJzdHlsZVR5cGUiLCJuZXh0Q29sb3JNb2RlIiwibWFwU3RhdGUiLCJCQVNFX01BUF9DT0xPUl9NT0RFUyIsIkRBUksiLCJzY3JlZW4iLCJMSUdIVCIsImRhcmtlbiIsImdsb2JlIiwiZW5hYmxlZCIsIk5PX01BUF9JRCIsImJhc2VtYXAiLCJsYWJlbHMiLCJhZG1pbkxpbmVzIiwid2F0ZXIiLCJzeW5jR2xvYmVDb25maWdDb2xvcnNUb1N0eWxlIiwibWFwU3R5bGVDaGFuZ2VVcGRhdGVyIiwiX21hcFN0YXRlJGdsb2JlMiIsIm5leHRTdHlsZU9iaiIsIm5leHRHbG9iZUNvbmZpZyIsInN1cmZhY2VDb2xvciIsIkRFRkFVTFRfQkFTRU1BUF9DT0xPUiIsImJhY2tncm91bmRGaWxsQ29sb3IiLCJ3YXRlckNvbG9yIiwiYmFzZW1hcFdhdGVyRmlsbENvbG9yIiwiYWRtaW5MaW5lc0NvbG9yIiwiYmFzZW1hcEFkbWluTGluZUNvbG9yIiwiYmFzZW1hcENvbG9ycyIsImdldEJhc2VtYXBDb2xvcnNGb3JTdHlsZSIsInN0eWxlIiwibGF5ZXJHcm91cHMiLCJjb21iaW5lZFNldE1hcFZpZXdNb2RlVXBkYXRlciIsIl9tYXBTdGF0ZSRnbG9iZTMiLCJzZXRNYXBWaWV3TW9kZVVwZGF0ZXIiLCJjb21iaW5lZExheWVyVHlwZUNoYW5nZVVwZGF0ZXIiLCJvbGRMYXllckluZGV4IiwiZmluZEluZGV4Iiwib2xkTGF5ZXIiLCJsYXllclR5cGVDaGFuZ2VVcGRhdGVyIiwibmV3TGF5ZXIiLCJ0b2dnbGVTcGxpdE1hcFVwZGF0ZXIiLCJfbmV3U3RhdGUkdWlTdGF0ZSRtYXAiLCJuZXdTdGF0ZSIsInZpc1N0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyIiwidWlTdGF0ZSIsInVpU3RhdGVUb2dnbGVTcGxpdE1hcFVwZGF0ZXIiLCJtYXBTdGF0ZVRvZ2dsZVNwbGl0TWFwVXBkYXRlciIsImlzU3BsaXQiLCJzcGxpdE1hcHMiLCJpc0xlZ2VuZEFjdGl2ZSIsIm1hcENvbnRyb2xzIiwibWFwTGVnZW5kIiwiYWN0aXZlIiwidG9nZ2xlTWFwQ29udHJvbFVwZGF0ZXIiLCJwYW5lbElkIiwiaW5kZXgiLCJzZXRNYXBTcGxpdE1vZGVVcGRhdGVyIiwiX25ld1VpU3RhdGUkbWFwQ29udHJvIiwibWFwU3BsaXRNb2RlIiwicHJldk1vZGUiLCJuZXdNYXBTdGF0ZSIsIm1hcFN0YXRlU2V0TWFwU3BsaXRNb2RlVXBkYXRlciIsIm5ld1Zpc1N0YXRlIiwiTWFwU3BsaXRNb2RlIiwiU0lOR0xFX01BUCIsIkRVQUxfTUFQIiwiU1dJUEVfQ09NUEFSRSIsImNvbXB1dGVTcGxpdE1hcExheWVycyIsImR1cGxpY2F0ZSIsIm5ld1VpU3RhdGUiLCJkZWZhdWx0UmVwbGFjZURhdGFUb01hcE9wdGlvbnMiLCJyZXBsYWNlRGF0YUluTWFwVXBkYXRlciIsIl9yZWYzIiwiZGF0YXNldFRvUmVwbGFjZUlkIiwiZGF0YXNldFRvVXNlIiwiX3BheWxvYWQkb3B0aW9ucyIsImFkZERhdGFUb01hcE9wdGlvbnMiLCJkYXRhSWRUb1VzZSIsInByZXBhcmVkU3RhdGUiLCJwcmVwYXJlU3RhdGVGb3JEYXRhc2V0UmVwbGFjZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21iaW5lZC11cGRhdGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge1xuICB0b2dnbGVNb2RhbFVwZGF0ZXIsXG4gIGxvYWRGaWxlc1N1Y2Nlc3NVcGRhdGVyIGFzIHVpU3RhdGVMb2FkRmlsZXNTdWNjZXNzVXBkYXRlcixcbiAgdG9nZ2xlTWFwQ29udHJvbFVwZGF0ZXIsXG4gIHRvZ2dsZVNwbGl0TWFwVXBkYXRlciBhcyB1aVN0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyLFxuICByZWNlaXZlTWFwQ29uZmlnVXBkYXRlciBhcyB1aVN0YXRlUmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXJcbn0gZnJvbSAnLi91aS1zdGF0ZS11cGRhdGVycyc7XG5pbXBvcnQge1xuICB1cGRhdGVWaXNEYXRhVXBkYXRlciBhcyB2aXNTdGF0ZVVwZGF0ZVZpc0RhdGFVcGRhdGVyLFxuICBzZXRNYXBJbmZvVXBkYXRlcixcbiAgbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcixcbiAgdG9nZ2xlU3BsaXRNYXBVcGRhdGVyIGFzIHZpc1N0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyLFxuICBwcmVwYXJlU3RhdGVGb3JEYXRhc2V0UmVwbGFjZVxufSBmcm9tICcuL3Zpcy1zdGF0ZS11cGRhdGVycyc7XG5pbXBvcnQge1xuICByZWNlaXZlTWFwQ29uZmlnVXBkYXRlciBhcyBzdGF0ZU1hcENvbmZpZ1VwZGF0ZXIsXG4gIHRvZ2dsZVNwbGl0TWFwVXBkYXRlciBhcyBtYXBTdGF0ZVRvZ2dsZVNwbGl0TWFwVXBkYXRlcixcbiAgc2V0TWFwU3BsaXRNb2RlVXBkYXRlciBhcyBtYXBTdGF0ZVNldE1hcFNwbGl0TW9kZVVwZGF0ZXIsXG4gIHNldE1hcFZpZXdNb2RlVXBkYXRlclxufSBmcm9tICcuL21hcC1zdGF0ZS11cGRhdGVycyc7XG5pbXBvcnQge1xuICBtYXBTdHlsZUNoYW5nZVVwZGF0ZXIsXG4gIHJlY2VpdmVNYXBDb25maWdVcGRhdGVyIGFzIHN0eWxlTWFwQ29uZmlnVXBkYXRlclxufSBmcm9tICcuL21hcC1zdHlsZS11cGRhdGVycyc7XG5pbXBvcnQge2ZpbGVzVG9EYXRhUGF5bG9hZH0gZnJvbSAnQGtlcGxlci5nbC9wcm9jZXNzb3JzJztcbmltcG9ydCB7cGF5bG9hZF8sIGFwcGx5Xywgd2l0aF8sIGlmXywgY29tcG9zZV8sIG1lcmdlXywgcGlja199IGZyb20gJy4vY29tcG9zZXItaGVscGVycyc7XG5pbXBvcnQge01hcFN0YXRlLCBVaVN0YXRlLCBBZGREYXRhVG9NYXBQYXlsb2FkLCBQYXJzZWRDb25maWd9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtNYXBTdHlsZX0gZnJvbSAnLi9tYXAtc3R5bGUtdXBkYXRlcnMnO1xuaW1wb3J0IHtQcm92aWRlclN0YXRlfSBmcm9tICcuL3Byb3ZpZGVyLXN0YXRlLXVwZGF0ZXJzJztcbmltcG9ydCB7XG4gIGxvYWRGaWxlc1N1Y2Nlc3NVcGRhdGVyQWN0aW9uLFxuICBNYXBTdHlsZUNoYW5nZVVwZGF0ZXJBY3Rpb24sXG4gIExheWVyVHlwZUNoYW5nZVVwZGF0ZXJBY3Rpb24sXG4gIFRvZ2dsZVNwbGl0TWFwVXBkYXRlckFjdGlvbixcbiAgUmVwbGFjZURhdGFJbk1hcFBheWxvYWQsXG4gIE1hcFN0YXRlQWN0aW9uc1xufSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuaW1wb3J0IHtWaXNTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcbmltcG9ydCB7TGF5ZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7aXNQbGFpbk9iamVjdCwgY29tcHV0ZVNwbGl0TWFwTGF5ZXJzfSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7ZmluZE1hcEJvdW5kc30gZnJvbSAnLi9kYXRhLXV0aWxzJztcbmltcG9ydCB7XG4gIEJBU0VfTUFQX0NPTE9SX01PREVTLFxuICBPVkVSTEFZX0JMRU5ESU5HUyxcbiAgTk9fTUFQX0lELFxuICBNYXBTcGxpdE1vZGVcbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtnZXRCYXNlbWFwQ29sb3JzRm9yU3R5bGUsIERFRkFVTFRfQkFTRU1BUF9DT0xPUn0gZnJvbSAnQGtlcGxlci5nbC9kZWNrZ2wtbGF5ZXJzJztcblxuZXhwb3J0IHR5cGUgS2VwbGVyR2xTdGF0ZSA9IHtcbiAgdmlzU3RhdGU6IFZpc1N0YXRlO1xuICBtYXBTdGF0ZTogTWFwU3RhdGU7XG4gIG1hcFN0eWxlOiBNYXBTdHlsZTtcbiAgdWlTdGF0ZTogVWlTdGF0ZTtcbiAgcHJvdmlkZXJTdGF0ZTogUHJvdmlkZXJTdGF0ZTtcbn07XG5cbi8vIGNvbXBvc2UgYWN0aW9uIHRvIGFwcGx5IHJlc3VsdCBtdWx0aXBsZSByZWR1Y2Vycywgd2l0aCB0aGUgb3V0cHV0IG9mIG9uZVxuXG4vKipcbiAqIFNvbWUgYWN0aW9ucyB3aWxsIGFmZmVjdCB0aGUgZW50aXJlIGtlcGxlci5sZyBpbnN0YW5jZSBzdGF0ZS5cbiAqIFRoZSB1cGRhdGVycyBmb3IgdGhlc2UgYWN0aW9ucyBpcyBleHBvcnRlZCBhcyBgY29tYmluZWRVcGRhdGVyc2AuIFRoZXNlIHVwZGF0ZXIgdGFrZSB0aGUgZW50aXJlIGluc3RhbmNlIHN0YXRlXG4gKiBhcyB0aGUgZmlyc3QgYXJndW1lbnQuIFJlYWQgbW9yZSBhYm91dCBbVXNpbmcgdXBkYXRlcnNdKC4uL2FkdmFuY2VkLXVzYWdlL3VzaW5nLXVwZGF0ZXJzLm1kKVxuICogQHB1YmxpY1xuICogQGV4YW1wbGVcbiAqXG4gKiBpbXBvcnQga2VwbGVyR2xSZWR1Y2VyLCB7Y29tYmluZWRVcGRhdGVyc30gZnJvbSAnQGtlcGxlci5nbC9yZWR1Y2Vycyc7XG4gKiAvLyBSb290IFJlZHVjZXJcbiAqIGNvbnN0IHJlZHVjZXJzID0gY29tYmluZVJlZHVjZXJzKHtcbiAqICBrZXBsZXJHbDoga2VwbGVyR2xSZWR1Y2VyLFxuICogIGFwcDogYXBwUmVkdWNlclxuICogfSk7XG4gKlxuICogY29uc3QgY29tcG9zZWRSZWR1Y2VyID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAqICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gKiAgICAvLyBhZGQgZGF0YSB0byBtYXAgYWZ0ZXIgcmVjZWl2aW5nIGRhdGEgZnJvbSByZW1vdGUgc291cmNlc1xuICogICAgY2FzZSAnTE9BRF9SRU1PVEVfUkVTT1VSQ0VfU1VDQ0VTUyc6XG4gKiAgICAgIHJldHVybiB7XG4gKiAgICAgICAgLi4uc3RhdGUsXG4gKiAgICAgICAga2VwbGVyR2w6IHtcbiAqICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLFxuICogICAgICAgICAgLy8gcGFzcyBpbiBrZXBsZXIuZ2wgaW5zdGFuY2Ugc3RhdGUgdG8gY29tYmluZWRVcGRhdGVyc1xuICogICAgICAgICAgbWFwOiAgY29tYmluZWRVcGRhdGVycy5hZGREYXRhVG9NYXBVcGRhdGVyKFxuICogICAgICAgICAgIHN0YXRlLmtlcGxlckdsLm1hcCxcbiAqICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICBwYXlsb2FkOiB7XG4gKiAgICAgICAgICAgICAgIGRhdGFzZXRzOiBhY3Rpb24uZGF0YXNldHMsXG4gKiAgICAgICAgICAgICAgIG9wdGlvbnM6IHtyZWFkT25seTogdHJ1ZX0sXG4gKiAgICAgICAgICAgICAgIGNvbmZpZzogYWN0aW9uLmNvbmZpZ1xuICogICAgICAgICAgICAgIH1cbiAqICAgICAgICAgICAgfVxuICogICAgICAgICAgKVxuICogICAgICAgIH1cbiAqICAgICAgfTtcbiAqICB9XG4gKiAgcmV0dXJuIHJlZHVjZXJzKHN0YXRlLCBhY3Rpb24pO1xuICogfTtcbiAqXG4gKiBleHBvcnQgZGVmYXVsdCBjb21wb3NlZFJlZHVjZXI7XG4gKi9cblxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG4vLyBAdHMtaWdub3JlXG5jb25zdCBjb21iaW5lZFVwZGF0ZXJzID0gbnVsbDtcbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG5cbmV4cG9ydCBjb25zdCBpc1ZhbGlkQ29uZmlnID0gY29uZmlnID0+XG4gIGlzUGxhaW5PYmplY3QoY29uZmlnKSAmJiBpc1BsYWluT2JqZWN0KGNvbmZpZy5jb25maWcpICYmIGNvbmZpZy52ZXJzaW9uO1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdEFkZERhdGFUb01hcE9wdGlvbnMgPSB7XG4gIGNlbnRlck1hcDogdHJ1ZSxcbiAga2VlcEV4aXN0aW5nQ29uZmlnOiBmYWxzZSxcbiAgYXV0b0NyZWF0ZUxheWVyczogdHJ1ZSxcbiAgYXV0b0NyZWF0ZVRvb2x0aXBzOiB0cnVlXG59O1xuXG4vKipcbiAqIENvbWJpbmUgZGF0YSBhbmQgZnVsbCBjb25maWd1cmF0aW9uIHVwZGF0ZSBpbiBhIHNpbmdsZSBhY3Rpb25cbiAqXG4gKiBAbWVtYmVyb2YgY29tYmluZWRVcGRhdGVyc1xuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlIGtlcGxlci5nbCBpbnN0YW5jZSBzdGF0ZSwgY29udGFpbmluZyBhbGwgc3VicmVkdWNlciBzdGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvblxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvbi5wYXlsb2FkIGB7ZGF0YXNldHMsIG9wdGlvbnMsIGNvbmZpZ31gXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQuZGF0YXNldHMgLSAqKipyZXF1aXJlZCoqIGRhdGFzZXRzIGNhbiBiZSBhIGRhdGFzZXQgb3IgYW4gYXJyYXkgb2YgZGF0YXNldHNcbiAqIEVhY2ggZGF0YXNldCBvYmplY3QgbmVlZHMgdG8gaGF2ZSBgaW5mb2AgYW5kIGBkYXRhYCBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBbYWN0aW9uLnBheWxvYWQub3B0aW9uc10gb3B0aW9uIG9iamVjdCBge2NlbnRlck1hcDogdHJ1ZSwgcGFkZGluZzoge2xlZnQ6IDMwMH19YFxuICogQHBhcmFtIFthY3Rpb24ucGF5bG9hZC5jb25maWddIG1hcCBjb25maWdcbiAqIEBwYXJhbSBbYWN0aW9uLnBheWxvYWQuaW5mb10gbWFwIGluZm8gY29udGFpbnMgdGl0bGUgYW5kIGRlc2NyaXB0aW9uXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEYXRhc2V0XG4gKiBAcHJvcGVydHkgaW5mbyAtaW5mbyBvZiBhIGRhdGFzZXRcbiAqIEBwcm9wZXJ0eSBpbmZvLmlkIC0gaWQgb2YgdGhpcyBkYXRhc2V0LiBJZiBjb25maWcgaXMgZGVmaW5lZCwgYGlkYCBzaG91bGQgbWF0Y2hlcyB0aGUgYGRhdGFJZGAgaW4gY29uZmlnLlxuICogQHByb3BlcnR5IGluZm8ubGFiZWwgLSBBIGRpc3BsYXkgbmFtZSBvZiB0aGlzIGRhdGFzZXRcbiAqIEBwcm9wZXJ0eSBkYXRhIC0gKioqcmVxdWlyZWQqKiBUaGUgZGF0YSBvYmplY3QsIGluIGEgdGFidWxhciBmb3JtYXQgd2l0aCAyIHByb3BlcnRpZXMgYGZpZWxkc2AgYW5kIGByb3dzYFxuICogQHByb3BlcnR5IGRhdGEuZmllbGRzIC0gKioqcmVxdWlyZWQqKiBBcnJheSBvZiBmaWVsZHMsXG4gKiBAcHJvcGVydHkgZGF0YS5maWVsZHMubmFtZSAtICoqKnJlcXVpcmVkKiogTmFtZSBvZiB0aGUgZmllbGQsXG4gKiBAcHJvcGVydHkgZGF0YS5yb3dzIC0gKioqcmVxdWlyZWQqKiBBcnJheSBvZiByb3dzLCBpbiBhIHRhYnVsYXIgZm9ybWF0IHdpdGggYGZpZWxkc2AgYW5kIGByb3dzYFxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZERhdGFUb01hcFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBLZXBsZXJHbFN0YXRlLFxuICB7cGF5bG9hZH06IHtwYXlsb2FkOiBBZGREYXRhVG9NYXBQYXlsb2FkfVxuKTogS2VwbGVyR2xTdGF0ZSA9PiB7XG4gIGNvbnN0IHtkYXRhc2V0cywgY29uZmlnLCBpbmZvfSA9IHBheWxvYWQ7XG5cbiAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAuLi5kZWZhdWx0QWRkRGF0YVRvTWFwT3B0aW9ucyxcbiAgICAuLi5wYXlsb2FkLm9wdGlvbnNcbiAgfTtcblxuICAvLyBjaGVjayBpZiBwcm9ncmVzc2l2ZSBsb2FkaW5nIGRhdGFzZXQgYnkgYmF0Y2hlcywgYW5kIHVwZGF0ZSB2aXNTdGF0ZSBkaXJlY3RseVxuICBjb25zdCBpc1Byb2dyZXNzaXZlTG9hZGluZyA9XG4gICAgQXJyYXkuaXNBcnJheShkYXRhc2V0cykgJiZcbiAgICBkYXRhc2V0c1swXT8uaW5mby5mb3JtYXQgPT09ICdhcnJvdycgJiZcbiAgICBkYXRhc2V0c1swXT8uaW5mby5pZCAmJlxuICAgIGRhdGFzZXRzWzBdPy5pbmZvLmlkIGluIHN0YXRlLnZpc1N0YXRlLmRhdGFzZXRzO1xuICBpZiAoaXNQcm9ncmVzc2l2ZUxvYWRpbmcpIHtcbiAgICByZXR1cm4gY29tcG9zZV88S2VwbGVyR2xTdGF0ZT4oW1xuICAgICAgcGlja18oJ3Zpc1N0YXRlJykoXG4gICAgICAgIGFwcGx5XzxWaXNTdGF0ZSwgYW55Pih2aXNTdGF0ZVVwZGF0ZVZpc0RhdGFVcGRhdGVyLCB7XG4gICAgICAgICAgZGF0YXNldHMsXG4gICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICBjb25maWdcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICBdKShzdGF0ZSk7XG4gIH1cblxuICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gIGxldCBwYXJzZWRDb25maWc6IFBhcnNlZENvbmZpZyA9IGNvbmZpZztcblxuICBpZiAoaXNWYWxpZENvbmZpZyhjb25maWcpKSB7XG4gICAgLy8gaWYgcGFzc2VkIGluIHNhdmVkIGNvbmZpZ1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICBwYXJzZWRDb25maWcgPSBzdGF0ZS52aXNTdGF0ZS5zY2hlbWEucGFyc2VTYXZlZENvbmZpZyhjb25maWcpO1xuICB9XG4gIGNvbnN0IG9sZExheWVycyA9IHN0YXRlLnZpc1N0YXRlLmxheWVycztcbiAgY29uc3QgZmlsdGVyTmV3bHlBZGRlZExheWVycyA9IChsYXllcnM6IExheWVyW10pID0+XG4gICAgbGF5ZXJzLmZpbHRlcihubCA9PiAhb2xkTGF5ZXJzLmZpbmQob2wgPT4gb2wgPT09IG5sKSk7XG5cbiAgLy8gUmV0dXJucyB1bmRlZmluZWQgaWYgbm90IGZvdW5kLCB0byBtYWtlIHR5cGVzY3JpcHQgaGFwcHlcbiAgY29uc3QgZmluZE1hcEJvdW5kc0lmQ2VudGVyZWQgPSAobGF5ZXJzOiBMYXllcltdKSA9PiB7XG4gICAgY29uc3QgYm91bmRzID0gb3B0aW9ucy5jZW50ZXJNYXAgJiYgZmluZE1hcEJvdW5kcyhsYXllcnMpO1xuICAgIHJldHVybiBib3VuZHMgPyBib3VuZHMgOiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgcmV0dXJuIGNvbXBvc2VfPEtlcGxlckdsU3RhdGU+KFtcbiAgICBwaWNrXygndmlzU3RhdGUnKShcbiAgICAgIC8vIHRoaXMgcGFydCBjYW4gYmUgYXN5bmNcbiAgICAgIGFwcGx5XzxWaXNTdGF0ZSwgYW55Pih2aXNTdGF0ZVVwZGF0ZVZpc0RhdGFVcGRhdGVyLCB7XG4gICAgICAgIGRhdGFzZXRzLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICBjb25maWc6IHBhcnNlZENvbmZpZ1xuICAgICAgfSlcbiAgICApLFxuXG4gICAgaWZfKEJvb2xlYW4oaW5mbyksIHBpY2tfKCd2aXNTdGF0ZScpKGFwcGx5XzxWaXNTdGF0ZSwgYW55PihzZXRNYXBJbmZvVXBkYXRlciwge2luZm99KSkpLFxuICAgIC8vIE5vdGUgdGhhdCBmaXQgYm91bmRzIGhlcmUgd29uJ3QgYmUgY2FsbGVkIGluIGNhc2UgZGF0YXNldHMgYXJlIGNyZWF0ZWQgaW4gVGFza3MuXG4gICAgLy8gQSBzZXBhcmF0ZSBUYXNrIHRvIHVwZGF0ZSBib3VuZHMgaXMgY3JlYXRlZCBvbmNlIHRoZSBkYXRhc2V0cyBhcmUgcmVhZHkuXG4gICAgd2l0aF8oKHt2aXNTdGF0ZX0pID0+XG4gICAgICBwaWNrXygnbWFwU3RhdGUnKShcbiAgICAgICAgYXBwbHlfKFxuICAgICAgICAgIHN0YXRlTWFwQ29uZmlnVXBkYXRlcixcbiAgICAgICAgICBwYXlsb2FkXyh7XG4gICAgICAgICAgICBjb25maWc6IHBhcnNlZENvbmZpZyxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBib3VuZHM6IGZpbmRNYXBCb3VuZHNJZkNlbnRlcmVkKGZpbHRlck5ld2x5QWRkZWRMYXllcnModmlzU3RhdGUubGF5ZXJzKSlcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKSxcbiAgICBwaWNrXygnbWFwU3R5bGUnKShhcHBseV8oc3R5bGVNYXBDb25maWdVcGRhdGVyLCBwYXlsb2FkXyh7Y29uZmlnOiBwYXJzZWRDb25maWcsIG9wdGlvbnN9KSkpLFxuICAgIHBpY2tfKCd1aVN0YXRlJykoXG4gICAgICBhcHBseV8odWlTdGF0ZVJlY2VpdmVNYXBDb25maWdVcGRhdGVyLCBwYXlsb2FkXyh7Y29uZmlnOiBwYXJzZWRDb25maWcsIG9wdGlvbnN9KSlcbiAgICApLFxuICAgIHBpY2tfKCd1aVN0YXRlJykoYXBwbHlfKHVpU3RhdGVMb2FkRmlsZXNTdWNjZXNzVXBkYXRlciwgcGF5bG9hZF8obnVsbCkpKSxcblxuICAgIHBpY2tfKCd1aVN0YXRlJykoYXBwbHlfKHRvZ2dsZU1vZGFsVXBkYXRlciwgcGF5bG9hZF8obnVsbCkpKSxcbiAgICBwaWNrXygndWlTdGF0ZScpKFxuICAgICAgbWVyZ2VfKFxuICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgJ3JlYWRPbmx5JylcbiAgICAgICAgICA/IHtyZWFkT25seTogb3B0aW9ucy5yZWFkT25seX1cbiAgICAgICAgICA6IHt9XG4gICAgICApXG4gICAgKVxuICBdKShzdGF0ZSk7XG59O1xuXG5leHBvcnQgY29uc3QgbG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBLZXBsZXJHbFN0YXRlLFxuICBhY3Rpb246IGxvYWRGaWxlc1N1Y2Nlc3NVcGRhdGVyQWN0aW9uXG4pOiBLZXBsZXJHbFN0YXRlID0+IHtcbiAgLy8gc3RpbGwgbW9yZSB0byBsb2FkXG4gIGNvbnN0IHBheWxvYWRzID0gZmlsZXNUb0RhdGFQYXlsb2FkKGFjdGlvbi5yZXN1bHQpO1xuICBjb25zdCBuZXh0U3RhdGUgPSBjb21wb3NlXyhbXG4gICAgcGlja18oJ3Zpc1N0YXRlJykoXG4gICAgICBtZXJnZV8oe1xuICAgICAgICBmaWxlTG9hZGluZzogZmFsc2UsXG4gICAgICAgIGZpbGVMb2FkaW5nUHJvZ3Jlc3M6IHt9XG4gICAgICB9KVxuICAgIClcbiAgXSkoc3RhdGUpO1xuICAvLyBtYWtlIG11bHRpcGxlIGFkZCBkYXRhIHRvIG1hcCBjYWxsc1xuICBjb25zdCBzdGF0ZVdpdGhEYXRhID0gY29tcG9zZV8ocGF5bG9hZHMubWFwKHAgPT4gYXBwbHlfKGFkZERhdGFUb01hcFVwZGF0ZXIsIHBheWxvYWRfKHApKSkpKFxuICAgIG5leHRTdGF0ZVxuICApO1xuICByZXR1cm4gc3RhdGVXaXRoRGF0YSBhcyBLZXBsZXJHbFN0YXRlO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZERhdGFUb01hcENvbXBvc2VkID0gYWRkRGF0YVRvTWFwVXBkYXRlcjtcblxuLyoqXG4gKiBIZWxwZXIgd2hpY2ggdXBkYXRlcyBtYXAgb3ZlcmxheSBibGVuZGluZyBtb2RlIGluIHZpc1N0YXRlLFxuICogYnV0IG9ubHkgaWYgaXQncyBub3QgY3VycmVudGx5IGluIHRoZSBgbm9ybWFsYCBtb2RlLlxuICovXG5jb25zdCB1cGRhdGVPdmVybGF5QmxlbmRpbmcgPSBvdmVybGF5QmxlbmRpbmcgPT4gdmlzU3RhdGUgPT4ge1xuICBpZiAodmlzU3RhdGUub3ZlcmxheUJsZW5kaW5nICE9PSBPVkVSTEFZX0JMRU5ESU5HUy5ub3JtYWwudmFsdWUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4udmlzU3RhdGUsXG4gICAgICBvdmVybGF5QmxlbmRpbmdcbiAgICB9O1xuICB9XG4gIHJldHVybiB2aXNTdGF0ZTtcbn07XG5cbi8qKlxuICogSGVscGVyIHdoaWNoIHVwZGF0ZXMgYGRhcmtCYXNlTWFwRW5hYmxlZGAgaW4gYWxsIHRoZSBsYXllcnMgaW4gdmlzU3RhdGUgd2hpY2hcbiAqIGhhdmUgdGhpcyBjb25maWcgc2V0dGluZyAob3IgaW4gb25lIHNwZWNpZmljIGxheWVyIGlmIHRoZSBgbGF5ZXJJZGAgcGFyYW0gaXMgcHJvdmlkZWQpLlxuICovXG5jb25zdCB1cGRhdGVEYXJrQmFzZU1hcExheWVycyA9XG4gIChkYXJrQmFzZU1hcEVuYWJsZWQ6IGJvb2xlYW4sIGxheWVySWQ6IHN0cmluZyB8IG51bGwgPSBudWxsKSA9PlxuICB2aXNTdGF0ZSA9PiAoe1xuICAgIC4uLnZpc1N0YXRlLFxuICAgIGxheWVyczogdmlzU3RhdGUubGF5ZXJzLm1hcChsYXllciA9PiB7XG4gICAgICBpZiAoIWxheWVySWQgfHwgbGF5ZXIuaWQgPT09IGxheWVySWQpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsYXllci52aXNDb25maWdTZXR0aW5ncywgJ2RhcmtCYXNlTWFwRW5hYmxlZCcpKSB7XG4gICAgICAgICAgY29uc3Qge3Zpc0NvbmZpZ30gPSBsYXllci5jb25maWc7XG4gICAgICAgICAgcmV0dXJuIGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAgIHZpc0NvbmZpZzogey4uLnZpc0NvbmZpZywgZGFya0Jhc2VNYXBFbmFibGVkfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGF5ZXI7XG4gICAgfSlcbiAgfSk7XG5cbi8qKlxuICogVXBkYXRlciB0aGF0IGNoYW5nZXMgdGhlIG1hcCBzdHlsZSBieSBjYWxsaW5nIG1hcFN0eWxlQ2hhbmdlVXBkYXRlciBvbiB2aXNTdGF0ZS5cbiAqIEluIGFkZGl0aW9uIHRvIHRoYXQsIGl0IGRvZXMgdGhlIGZvbGxvd2luZzpcbiAqXG4gKiAgIDEuIFVwZGF0ZSBtYXAgb3ZlcmxheSBibGVuZGluZyBtb2RlIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgY29sb3JNb2RlIG9mIHRoZVxuICogICAgICBiYXNlIG1hcCwgYnV0IG9ubHkgaWYgaXQncyBub3QgaW4gdGhlIGBub3JtYWxgIG1vZGUuXG4gKlxuICogICAyLiBVcGRhdGUgYWxsIHRoZSBsYXllcnMgd2hpY2ggaGF2ZSB0aGUgYGRhcmtCYXNlTWFwRW5hYmxlZGAgY29uZmlnIHNldHRpbmdcbiAqICAgICAgYWRqdXN0aW5nIGl0IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgY29sb3JNb2RlIG9mIHRoZSBiYXNlIG1hcC5cbiAqXG4gKi9cbmV4cG9ydCBjb25zdCBjb21iaW5lZE1hcFN0eWxlQ2hhbmdlVXBkYXRlciA9IChcbiAgc3RhdGU6IEtlcGxlckdsU3RhdGUsXG4gIGFjdGlvbjogTWFwU3R5bGVDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBLZXBsZXJHbFN0YXRlID0+IHtcbiAgY29uc3Qge3BheWxvYWR9ID0gYWN0aW9uO1xuICBjb25zdCB7bWFwU3R5bGV9ID0gc3RhdGU7XG4gIGNvbnN0IGdldENvbG9yTW9kZSA9IGtleSA9PiBtYXBTdHlsZS5tYXBTdHlsZXNba2V5XT8uY29sb3JNb2RlO1xuICBjb25zdCBwcmV2Q29sb3JNb2RlID0gZ2V0Q29sb3JNb2RlKG1hcFN0eWxlLnN0eWxlVHlwZSk7XG4gIGNvbnN0IG5leHRDb2xvck1vZGUgPSBnZXRDb2xvck1vZGUocGF5bG9hZC5zdHlsZVR5cGUpO1xuICBsZXQge3Zpc1N0YXRlLCBtYXBTdGF0ZX0gPSBzdGF0ZTtcbiAgaWYgKG5leHRDb2xvck1vZGUgIT09IHByZXZDb2xvck1vZGUpIHtcbiAgICBzd2l0Y2ggKG5leHRDb2xvck1vZGUpIHtcbiAgICAgIGNhc2UgQkFTRV9NQVBfQ09MT1JfTU9ERVMuREFSSzpcbiAgICAgICAgdmlzU3RhdGUgPSBjb21wb3NlXyhbXG4gICAgICAgICAgdXBkYXRlT3ZlcmxheUJsZW5kaW5nKE9WRVJMQVlfQkxFTkRJTkdTLnNjcmVlbi52YWx1ZSksXG4gICAgICAgICAgdXBkYXRlRGFya0Jhc2VNYXBMYXllcnModHJ1ZSlcbiAgICAgICAgXSkodmlzU3RhdGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQkFTRV9NQVBfQ09MT1JfTU9ERVMuTElHSFQ6XG4gICAgICAgIHZpc1N0YXRlID0gY29tcG9zZV8oW1xuICAgICAgICAgIHVwZGF0ZU92ZXJsYXlCbGVuZGluZyhPVkVSTEFZX0JMRU5ESU5HUy5kYXJrZW4udmFsdWUpLFxuICAgICAgICAgIHVwZGF0ZURhcmtCYXNlTWFwTGF5ZXJzKGZhbHNlKVxuICAgICAgICBdKSh2aXNTdGF0ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9XG4gIH1cblxuICAvLyBVcGRhdGUgZ2xvYmUgY29uZmlnIGNvbG9ycyB3aGVuIHN0eWxlIGNoYW5nZXMgYW5kIGdsb2JlIGlzIGVuYWJsZWRcbiAgaWYgKG1hcFN0YXRlLmdsb2JlPy5lbmFibGVkKSB7XG4gICAgLy8gU3dpdGNoaW5nIGZyb20gXCJObyBCYXNlbWFwXCIgdG8gYSBiYXNlbWFwIC0gcmVzdG9yZSBiYXNlbWFwIHN1Yi10b2dnbGVzXG4gICAgaWYgKHBheWxvYWQuc3R5bGVUeXBlICE9PSBOT19NQVBfSUQgJiYgbWFwU3R5bGUuc3R5bGVUeXBlID09PSBOT19NQVBfSUQpIHtcbiAgICAgIG1hcFN0YXRlID0ge1xuICAgICAgICAuLi5tYXBTdGF0ZSxcbiAgICAgICAgZ2xvYmU6IHtcbiAgICAgICAgICAuLi5tYXBTdGF0ZS5nbG9iZSxcbiAgICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAgIC4uLm1hcFN0YXRlLmdsb2JlLmNvbmZpZyxcbiAgICAgICAgICAgIGJhc2VtYXA6IHRydWUsXG4gICAgICAgICAgICBsYWJlbHM6IHRydWUsXG4gICAgICAgICAgICBhZG1pbkxpbmVzOiB0cnVlLFxuICAgICAgICAgICAgd2F0ZXI6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIG1hcFN0YXRlID0gc3luY0dsb2JlQ29uZmlnQ29sb3JzVG9TdHlsZShtYXBTdGF0ZSwgbWFwU3R5bGUsIHBheWxvYWQuc3R5bGVUeXBlKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgdmlzU3RhdGUsXG4gICAgbWFwU3RhdGUsXG4gICAgbWFwU3R5bGU6IG1hcFN0eWxlQ2hhbmdlVXBkYXRlcihtYXBTdHlsZSwge3BheWxvYWQ6IHsuLi5wYXlsb2FkfX0pXG4gIH07XG59O1xuXG4vKipcbiAqIERlcml2ZSBnbG9iZSBiYXNlbWFwIGNvbG9ycyAoc3VyZmFjZSAvIHdhdGVyIC8gYWRtaW4gbGluZXMpIGZyb20gYSBtYXAgc3R5bGUgYW5kXG4gKiByZXR1cm4gYW4gdXBkYXRlZCBtYXBTdGF0ZSB3aXRoIHRob3NlIGNvbG9ycyB3cml0dGVuIGludG8gYGdsb2JlLmNvbmZpZ2AuIFVzZWQgYm90aFxuICogd2hlbiB0aGUgYmFzZSBtYXAgc3R5bGUgY2hhbmdlcyBhbmQgd2hlbiBlbnRlcmluZyBnbG9iZSBtb2RlLCBzbyB0aGUgZ2xvYmUgYWx3YXlzXG4gKiByZWZsZWN0cyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGJhc2VtYXAgaW5zdGVhZCBvZiB0aGUgc3RhdGljIERFRkFVTFRfR0xPQkVfQ09ORklHLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3luY0dsb2JlQ29uZmlnQ29sb3JzVG9TdHlsZShcbiAgbWFwU3RhdGU6IE1hcFN0YXRlLFxuICBtYXBTdHlsZTogTWFwU3R5bGUsXG4gIHN0eWxlVHlwZTogc3RyaW5nXG4pOiBNYXBTdGF0ZSB7XG4gIGlmICghbWFwU3RhdGUuZ2xvYmU/LmVuYWJsZWQpIHtcbiAgICByZXR1cm4gbWFwU3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXh0U3R5bGVPYmogPSBtYXBTdHlsZS5tYXBTdHlsZXNbc3R5bGVUeXBlXTtcbiAgY29uc3QgbmV4dEdsb2JlQ29uZmlnID0gey4uLm1hcFN0YXRlLmdsb2JlLmNvbmZpZ307XG5cbiAgaWYgKHN0eWxlVHlwZSA9PT0gTk9fTUFQX0lEKSB7XG4gICAgbmV4dEdsb2JlQ29uZmlnLmJhc2VtYXAgPSBmYWxzZTtcbiAgICBuZXh0R2xvYmVDb25maWcubGFiZWxzID0gZmFsc2U7XG4gICAgbmV4dEdsb2JlQ29uZmlnLmFkbWluTGluZXMgPSBmYWxzZTtcbiAgICBuZXh0R2xvYmVDb25maWcud2F0ZXIgPSBmYWxzZTtcbiAgICBuZXh0R2xvYmVDb25maWcuc3VyZmFjZUNvbG9yID0gREVGQVVMVF9CQVNFTUFQX0NPTE9SLmJhY2tncm91bmRGaWxsQ29sb3I7XG4gICAgbmV4dEdsb2JlQ29uZmlnLndhdGVyQ29sb3IgPSBERUZBVUxUX0JBU0VNQVBfQ09MT1IuYmFzZW1hcFdhdGVyRmlsbENvbG9yO1xuICAgIG5leHRHbG9iZUNvbmZpZy5hZG1pbkxpbmVzQ29sb3IgPSBERUZBVUxUX0JBU0VNQVBfQ09MT1IuYmFzZW1hcEFkbWluTGluZUNvbG9yO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGJhc2VtYXBDb2xvcnMgPSBuZXh0U3R5bGVPYmpcbiAgICAgID8gZ2V0QmFzZW1hcENvbG9yc0ZvclN0eWxlKHN0eWxlVHlwZSwge1xuICAgICAgICAgIHN0eWxlOiBuZXh0U3R5bGVPYmouc3R5bGUsXG4gICAgICAgICAgbGF5ZXJHcm91cHM6IG5leHRTdHlsZU9iai5sYXllckdyb3Vwc1xuICAgICAgICB9KVxuICAgICAgOiAvLyBTdHlsZSBvYmplY3Qgbm90IHlldCBsb2FkZWQgLSB1c2Uga25vd24gcHJlc2V0cyBieSBzdHlsZSB0eXBlXG4gICAgICAgIGdldEJhc2VtYXBDb2xvcnNGb3JTdHlsZShzdHlsZVR5cGUpO1xuICAgIG5leHRHbG9iZUNvbmZpZy5zdXJmYWNlQ29sb3IgPSBiYXNlbWFwQ29sb3JzLmJhY2tncm91bmRGaWxsQ29sb3I7XG4gICAgbmV4dEdsb2JlQ29uZmlnLndhdGVyQ29sb3IgPSBiYXNlbWFwQ29sb3JzLmJhc2VtYXBXYXRlckZpbGxDb2xvcjtcbiAgICBuZXh0R2xvYmVDb25maWcuYWRtaW5MaW5lc0NvbG9yID0gYmFzZW1hcENvbG9ycy5iYXNlbWFwQWRtaW5MaW5lQ29sb3I7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLm1hcFN0YXRlLFxuICAgIGdsb2JlOiB7XG4gICAgICAuLi5tYXBTdGF0ZS5nbG9iZSxcbiAgICAgIGNvbmZpZzogbmV4dEdsb2JlQ29uZmlnXG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIFVwZGF0ZXIgdGhhdCBzd2l0Y2hlcyB0aGUgbWFwIHZpZXcgbW9kZSAoMkQgLyAzRCAvIEdsb2JlKS4gUnVucyB0aGUgYmFzZSBtYXAtc3RhdGVcbiAqIHVwZGF0ZXIgYW5kLCB3aGVuIGVudGVyaW5nIGdsb2JlIG1vZGUsIHN5bmNzIHRoZSBnbG9iZSBiYXNlbWFwIGNvbG9ycyB0byB0aGVcbiAqIGN1cnJlbnRseSBzZWxlY3RlZCBtYXAgc3R5bGUgc28gdGhlIGdsb2JlIGRvZXNuJ3Qgc2hvdyBzdGFsZSBkZWZhdWx0IGNvbG9ycy5cbiAqL1xuZXhwb3J0IGNvbnN0IGNvbWJpbmVkU2V0TWFwVmlld01vZGVVcGRhdGVyID0gKFxuICBzdGF0ZTogS2VwbGVyR2xTdGF0ZSxcbiAgYWN0aW9uOiBNYXBTdGF0ZUFjdGlvbnMuU2V0TWFwVmlld01vZGVVcGRhdGVyQWN0aW9uXG4pOiBLZXBsZXJHbFN0YXRlID0+IHtcbiAgbGV0IG1hcFN0YXRlID0gc2V0TWFwVmlld01vZGVVcGRhdGVyKHN0YXRlLm1hcFN0YXRlLCBhY3Rpb24pO1xuXG4gIGlmIChtYXBTdGF0ZS5nbG9iZT8uZW5hYmxlZCkge1xuICAgIG1hcFN0YXRlID0gc3luY0dsb2JlQ29uZmlnQ29sb3JzVG9TdHlsZShtYXBTdGF0ZSwgc3RhdGUubWFwU3R5bGUsIHN0YXRlLm1hcFN0eWxlLnN0eWxlVHlwZSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIG1hcFN0YXRlXG4gIH07XG59O1xuXG4vKipcbiAqIFVwZGF0ZXIgdGhhdCBjaGFuZ2VzIHRoZSBsYXllciB0eXBlIGJ5IGNhbGxpbmcgYGxheWVyVHlwZUNoYW5nZVVwZGF0ZXJgIG9uIHZpc1N0YXRlLlxuICogSW4gYWRkaXRpb24gdG8gdGhhdCwgaWYgdGhlIG5ldyBsYXllciB0eXBlIGhhcyB0aGUgYGRhcmtCYXNlTWFwRW5hYmxlZGAgY29uZmlnXG4gKiBzZXR0aW5nLCB3ZSBhZGp1c3QgaXQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBjb2xvck1vZGUgb2YgdGhlIGJhc2UgbWFwLnNcbiAqL1xuZXhwb3J0IGNvbnN0IGNvbWJpbmVkTGF5ZXJUeXBlQ2hhbmdlVXBkYXRlciA9IChcbiAgc3RhdGU6IEtlcGxlckdsU3RhdGUsXG4gIGFjdGlvbjogTGF5ZXJUeXBlQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogS2VwbGVyR2xTdGF0ZSA9PiB7XG4gIGxldCB7dmlzU3RhdGV9ID0gc3RhdGU7XG4gIGNvbnN0IG9sZExheWVySW5kZXggPSB2aXNTdGF0ZS5sYXllcnMuZmluZEluZGV4KGxheWVyID0+IGxheWVyID09PSBhY3Rpb24ub2xkTGF5ZXIpO1xuICB2aXNTdGF0ZSA9IGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIodmlzU3RhdGUsIGFjdGlvbik7XG4gIGNvbnN0IG5ld0xheWVyID0gdmlzU3RhdGUubGF5ZXJzW29sZExheWVySW5kZXhdO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5ld0xheWVyPy52aXNDb25maWdTZXR0aW5ncywgJ2RhcmtCYXNlTWFwRW5hYmxlZCcpKSB7XG4gICAgY29uc3Qge21hcFN0eWxlfSA9IHN0YXRlO1xuICAgIGNvbnN0IHtjb2xvck1vZGV9ID0gbWFwU3R5bGUubWFwU3R5bGVzW21hcFN0eWxlLnN0eWxlVHlwZV07XG4gICAgY29uc3Qge2RhcmtCYXNlTWFwRW5hYmxlZH0gPSBuZXdMYXllci5jb25maWcudmlzQ29uZmlnO1xuICAgIHN3aXRjaCAoY29sb3JNb2RlKSB7XG4gICAgICBjYXNlIEJBU0VfTUFQX0NPTE9SX01PREVTLkRBUks6XG4gICAgICAgIGlmICghZGFya0Jhc2VNYXBFbmFibGVkKSB7XG4gICAgICAgICAgdmlzU3RhdGUgPSB1cGRhdGVEYXJrQmFzZU1hcExheWVycyh0cnVlLCBuZXdMYXllci5pZCkodmlzU3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBCQVNFX01BUF9DT0xPUl9NT0RFUy5MSUdIVDpcbiAgICAgICAgaWYgKGRhcmtCYXNlTWFwRW5hYmxlZCkge1xuICAgICAgICAgIHZpc1N0YXRlID0gdXBkYXRlRGFya0Jhc2VNYXBMYXllcnMoZmFsc2UsIG5ld0xheWVyLmlkKSh2aXNTdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgLy8gZG8gbm90aGluZ1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHZpc1N0YXRlXG4gIH07XG59O1xuXG4vKipcbiAqIE1ha2UgbWFwTGVnZW5kIGFjdGl2ZSB3aGVuIHRvZ2dsZVNwbGl0TWFwIGFjdGlvbiBpcyBjYWxsZWRcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZVNwbGl0TWFwVXBkYXRlciA9IChcbiAgc3RhdGU6IEtlcGxlckdsU3RhdGUsXG4gIGFjdGlvbjogVG9nZ2xlU3BsaXRNYXBVcGRhdGVyQWN0aW9uXG4pOiBLZXBsZXJHbFN0YXRlID0+IHtcbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgdmlzU3RhdGU6IHZpc1N0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyKHN0YXRlLnZpc1N0YXRlLCBhY3Rpb24pLFxuICAgIHVpU3RhdGU6IHVpU3RhdGVUb2dnbGVTcGxpdE1hcFVwZGF0ZXIoc3RhdGUudWlTdGF0ZSksXG4gICAgbWFwU3RhdGU6IG1hcFN0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyKHN0YXRlLm1hcFN0YXRlKVxuICB9O1xuXG4gIGNvbnN0IGlzU3BsaXQgPSBuZXdTdGF0ZS52aXNTdGF0ZS5zcGxpdE1hcHMubGVuZ3RoICE9PSAwO1xuICBjb25zdCBpc0xlZ2VuZEFjdGl2ZSA9IG5ld1N0YXRlLnVpU3RhdGUubWFwQ29udHJvbHM/Lm1hcExlZ2VuZD8uYWN0aXZlO1xuICBpZiAoaXNTcGxpdCAmJiAhaXNMZWdlbmRBY3RpdmUpIHtcbiAgICBuZXdTdGF0ZS51aVN0YXRlID0gdG9nZ2xlTWFwQ29udHJvbFVwZGF0ZXIobmV3U3RhdGUudWlTdGF0ZSwge1xuICAgICAgcGF5bG9hZDoge3BhbmVsSWQ6ICdtYXBMZWdlbmQnLCBpbmRleDogYWN0aW9uLnBheWxvYWR9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIFNldCBtYXAgc3BsaXQgbW9kZSB1cGRhdGVyIC0gY29vcmRpbmF0ZXMgc3RhdGUgY2hhbmdlcyBhY3Jvc3MgdmlzU3RhdGUsIG1hcFN0YXRlLCBhbmQgdWlTdGF0ZVxuICovXG5leHBvcnQgY29uc3Qgc2V0TWFwU3BsaXRNb2RlVXBkYXRlciA9IChcbiAgc3RhdGU6IEtlcGxlckdsU3RhdGUsXG4gIGFjdGlvbjogTWFwU3RhdGVBY3Rpb25zLlNldE1hcFNwbGl0TW9kZVVwZGF0ZXJBY3Rpb25cbik6IEtlcGxlckdsU3RhdGUgPT4ge1xuICBjb25zdCB7bWFwU3BsaXRNb2RlfSA9IGFjdGlvbi5wYXlsb2FkO1xuICBjb25zdCBwcmV2TW9kZSA9IHN0YXRlLm1hcFN0YXRlLm1hcFNwbGl0TW9kZTtcblxuICBpZiAobWFwU3BsaXRNb2RlID09PSBwcmV2TW9kZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld01hcFN0YXRlID0gbWFwU3RhdGVTZXRNYXBTcGxpdE1vZGVVcGRhdGVyKHN0YXRlLm1hcFN0YXRlLCBhY3Rpb24pO1xuXG4gIGxldCBuZXdWaXNTdGF0ZSA9IHsuLi5zdGF0ZS52aXNTdGF0ZX07XG5cbiAgc3dpdGNoIChtYXBTcGxpdE1vZGUpIHtcbiAgICBjYXNlIE1hcFNwbGl0TW9kZS5TSU5HTEVfTUFQOlxuICAgICAgbmV3VmlzU3RhdGUgPSB7XG4gICAgICAgIC4uLm5ld1Zpc1N0YXRlLFxuICAgICAgICBzcGxpdE1hcHM6IFtdXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBNYXBTcGxpdE1vZGUuRFVBTF9NQVA6XG4gICAgY2FzZSBNYXBTcGxpdE1vZGUuU1dJUEVfQ09NUEFSRTpcbiAgICAgIGlmIChwcmV2TW9kZSA9PT0gTWFwU3BsaXRNb2RlLlNJTkdMRV9NQVApIHtcbiAgICAgICAgbmV3VmlzU3RhdGUgPSB7XG4gICAgICAgICAgLi4ubmV3VmlzU3RhdGUsXG4gICAgICAgICAgc3BsaXRNYXBzOiBjb21wdXRlU3BsaXRNYXBMYXllcnMobmV3VmlzU3RhdGUubGF5ZXJzLCB7XG4gICAgICAgICAgICBkdXBsaWNhdGU6IG1hcFNwbGl0TW9kZSA9PT0gTWFwU3BsaXRNb2RlLlNXSVBFX0NPTVBBUkVcbiAgICAgICAgICB9KVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgbGV0IG5ld1VpU3RhdGUgPSB1aVN0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyKHN0YXRlLnVpU3RhdGUpO1xuXG4gIGNvbnN0IGlzU3BsaXQgPSBuZXdWaXNTdGF0ZS5zcGxpdE1hcHMubGVuZ3RoICE9PSAwO1xuICBjb25zdCBpc0xlZ2VuZEFjdGl2ZSA9IG5ld1VpU3RhdGUubWFwQ29udHJvbHM/Lm1hcExlZ2VuZD8uYWN0aXZlO1xuICBpZiAoaXNTcGxpdCAmJiAhaXNMZWdlbmRBY3RpdmUpIHtcbiAgICBuZXdVaVN0YXRlID0gdG9nZ2xlTWFwQ29udHJvbFVwZGF0ZXIobmV3VWlTdGF0ZSwge1xuICAgICAgcGF5bG9hZDoge3BhbmVsSWQ6ICdtYXBMZWdlbmQnLCBpbmRleDogMH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbWFwU3RhdGU6IG5ld01hcFN0YXRlLFxuICAgIHZpc1N0YXRlOiBuZXdWaXNTdGF0ZSxcbiAgICB1aVN0YXRlOiBuZXdVaVN0YXRlXG4gIH07XG59O1xuXG5jb25zdCBkZWZhdWx0UmVwbGFjZURhdGFUb01hcE9wdGlvbnMgPSB7XG4gIGtlZXBFeGlzdGluZ0NvbmZpZzogdHJ1ZSxcbiAgY2VudGVyTWFwOiB0cnVlLFxuICBhdXRvQ3JlYXRlTGF5ZXJzOiBmYWxzZVxufTtcblxuLyoqXG4gKiBVcGRhdGVyIHJlcGxhY2UgYSBkYXRhc2V0IGluIHN0YXRlXG4gKi9cbmV4cG9ydCBjb25zdCByZXBsYWNlRGF0YUluTWFwVXBkYXRlciA9IChcbiAgc3RhdGU6IEtlcGxlckdsU3RhdGUsXG4gIHtwYXlsb2FkfToge3BheWxvYWQ6IFJlcGxhY2VEYXRhSW5NYXBQYXlsb2FkfVxuKTogS2VwbGVyR2xTdGF0ZSA9PiB7XG4gIGNvbnN0IHtkYXRhc2V0VG9SZXBsYWNlSWQsIGRhdGFzZXRUb1VzZSwgb3B0aW9ucyA9IHt9fSA9IHBheWxvYWQ7XG4gIGNvbnN0IGFkZERhdGFUb01hcE9wdGlvbnMgPSB7Li4uZGVmYXVsdFJlcGxhY2VEYXRhVG9NYXBPcHRpb25zLCAuLi5vcHRpb25zfTtcblxuICAvLyBjaGVjayBpZiBkYXRhc2V0IGlzIHRoZXJlXG4gIGlmICghc3RhdGUudmlzU3RhdGUuZGF0YXNldHNbZGF0YXNldFRvUmVwbGFjZUlkXSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyBkYXRhc2V0VG9Vc2UgaXMgUHJvdG9EYXRhc2V0XG4gIGNvbnN0IGRhdGFJZFRvVXNlID0gZGF0YXNldFRvVXNlLmluZm8uaWQ7XG4gIGlmICghZGF0YUlkVG9Vc2UpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gcmVtb3ZlIGRhdGFzZXQgYW5kIHB1dCBkZXBlbmRlbmNpZXMgaW4gdG9CZU1lcmdlZFxuICBjb25zdCBwcmVwYXJlZFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIHZpc1N0YXRlOiBwcmVwYXJlU3RhdGVGb3JEYXRhc2V0UmVwbGFjZShzdGF0ZS52aXNTdGF0ZSwgZGF0YXNldFRvUmVwbGFjZUlkLCBkYXRhSWRUb1VzZSlcbiAgfTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSBhZGREYXRhVG9NYXBVcGRhdGVyKFxuICAgIHByZXBhcmVkU3RhdGUsXG4gICAgcGF5bG9hZF8oe1xuICAgICAgZGF0YXNldHM6IGRhdGFzZXRUb1VzZSxcbiAgICAgIC8vIHNob3VsZCB6b29tIHRvIG5ldyBkYXRhc2V0XG4gICAgICBvcHRpb25zOiBhZGREYXRhVG9NYXBPcHRpb25zXG4gICAgfSlcbiAgKTtcblxuICByZXR1cm4gbmV4dFN0YXRlO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUdB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
649
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdWlTdGF0ZVVwZGF0ZXJzIiwicmVxdWlyZSIsIl92aXNTdGF0ZVVwZGF0ZXJzIiwiX21hcFN0YXRlVXBkYXRlcnMiLCJfbWFwU3R5bGVVcGRhdGVycyIsIl9wcm9jZXNzb3JzIiwiX2NvbXBvc2VySGVscGVycyIsIl91dGlscyIsIl9kYXRhVXRpbHMiLCJfY29uc3RhbnRzIiwiX2RlY2tnbExheWVycyIsIl9leGNsdWRlZCIsIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiY29tYmluZWRVcGRhdGVycyIsImlzVmFsaWRDb25maWciLCJleHBvcnRzIiwiY29uZmlnIiwiaXNQbGFpbk9iamVjdCIsInZlcnNpb24iLCJkZWZhdWx0QWRkRGF0YVRvTWFwT3B0aW9ucyIsImNlbnRlck1hcCIsImtlZXBFeGlzdGluZ0NvbmZpZyIsImF1dG9DcmVhdGVMYXllcnMiLCJhdXRvQ3JlYXRlVG9vbHRpcHMiLCJhZGREYXRhVG9NYXBVcGRhdGVyIiwic3RhdGUiLCJfcmVmIiwiX2RhdGFzZXRzJCIsIl9kYXRhc2V0cyQyIiwiX2RhdGFzZXRzJDMiLCJwYXlsb2FkIiwiZGF0YXNldHMiLCJpbmZvIiwib3B0aW9ucyIsImlzUHJvZ3Jlc3NpdmVMb2FkaW5nIiwiQXJyYXkiLCJpc0FycmF5IiwiZm9ybWF0IiwiaWQiLCJ2aXNTdGF0ZSIsImNvbXBvc2VfIiwicGlja18iLCJhcHBseV8iLCJ2aXNTdGF0ZVVwZGF0ZVZpc0RhdGFVcGRhdGVyIiwicGFyc2VkQ29uZmlnIiwic2NoZW1hIiwicGFyc2VTYXZlZENvbmZpZyIsIm9sZExheWVycyIsImxheWVycyIsImZpbHRlck5ld2x5QWRkZWRMYXllcnMiLCJubCIsImZpbmQiLCJvbCIsImZpbmRNYXBCb3VuZHNJZkNlbnRlcmVkIiwiYm91bmRzIiwiZmluZE1hcEJvdW5kcyIsInVuZGVmaW5lZCIsImlmXyIsIkJvb2xlYW4iLCJzZXRNYXBJbmZvVXBkYXRlciIsIndpdGhfIiwiX3JlZjIiLCJzdGF0ZU1hcENvbmZpZ1VwZGF0ZXIiLCJwYXlsb2FkXyIsInN0eWxlTWFwQ29uZmlnVXBkYXRlciIsInVpU3RhdGVSZWNlaXZlTWFwQ29uZmlnVXBkYXRlciIsInVpU3RhdGVMb2FkRmlsZXNTdWNjZXNzVXBkYXRlciIsInRvZ2dsZU1vZGFsVXBkYXRlciIsIm1lcmdlXyIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInJlYWRPbmx5IiwibG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXIiLCJhY3Rpb24iLCJpc1N0YWxlRmlsZUxvYWRGaW5pc2giLCJmaWxlTG9hZGluZyIsImxvYWRJZCIsInBheWxvYWRzIiwiZmlsZXNUb0RhdGFQYXlsb2FkIiwicmVzdWx0IiwibmV4dFN0YXRlIiwiZmlsZUxvYWRpbmdQcm9ncmVzcyIsInN0YWdlZFRvQWRkIiwic3RhdGVXaXRoRGF0YSIsIm1hcCIsInAiLCJrZXB0TG9hZEVycm9ycyIsInByb2dyZXNzIiwiZnJvbUVudHJpZXMiLCJlbnRyaWVzIiwiX3JlZjMiLCJfcmVmNCIsIl9zbGljZWRUb0FycmF5MiIsInZhbHVlIiwiZXJyb3IiLCJzdGFnZUxvYWRlZEZpbGVzVXBkYXRlciIsIm1vZGFsT3BlbiIsInVpU3RhdGUiLCJjdXJyZW50TW9kYWwiLCJBRERfREFUQV9JRCIsInByZXZpb3VzIiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsInN0YWdlZEl0ZW1LZXkiLCJpdGVtIiwiX2l0ZW0kbWV0YWRhdGEiLCJfaXRlbSRpbmZvIiwibWV0YWRhdGEiLCJzb3VyY2UiLCJhcHBlbmRTdGFnZWRMb2FkZWRGaWxlc1VwZGF0ZXIiLCJzZWVuIiwiU2V0IiwibmV4dCIsImtleSIsImhhcyIsImFkZCIsInNwbGl0UmVwbGFjZW1lbnRVcGxvYWQiLCJtYXBzIiwibGlzdCIsImRhdGFzZXQiLCJkYXRhc2V0VG9Vc2UiLCJtb3JlIiwic2xpY2UiLCJyZW1haW5kZXIiLCJjb25maXJtUmVwbGFjZURhdGFzZXRVcGRhdGVyIiwiX2RhdGFzZXRUb1VzZSRpbmZvIiwiY2xlYXJlZCIsIl9zcGxpdFJlcGxhY2VtZW50VXBsbyIsImRhdGFzZXRUb1JlcGxhY2VJZCIsInJlcGxhY2VkIiwicmVwbGFjZURhdGFJbk1hcFVwZGF0ZXIiLCJkZWxldGVPcmlnaW5hbERhdGFzZXQiLCJhZGREYXRhVG9NYXBDb21wb3NlZCIsInVwZGF0ZU92ZXJsYXlCbGVuZGluZyIsIm92ZXJsYXlCbGVuZGluZyIsIk9WRVJMQVlfQkxFTkRJTkdTIiwibm9ybWFsIiwidXBkYXRlRGFya0Jhc2VNYXBMYXllcnMiLCJkYXJrQmFzZU1hcEVuYWJsZWQiLCJsYXllcklkIiwibGF5ZXIiLCJ2aXNDb25maWdTZXR0aW5ncyIsInZpc0NvbmZpZyIsInVwZGF0ZUxheWVyQ29uZmlnIiwiY29tYmluZWRNYXBTdHlsZUNoYW5nZVVwZGF0ZXIiLCJfbWFwU3RhdGUkZ2xvYmUiLCJtYXBTdHlsZSIsImdldENvbG9yTW9kZSIsIl9tYXBTdHlsZSRtYXBTdHlsZXMkayIsIm1hcFN0eWxlcyIsImNvbG9yTW9kZSIsInByZXZDb2xvck1vZGUiLCJzdHlsZVR5cGUiLCJuZXh0Q29sb3JNb2RlIiwibWFwU3RhdGUiLCJCQVNFX01BUF9DT0xPUl9NT0RFUyIsIkRBUksiLCJzY3JlZW4iLCJMSUdIVCIsImRhcmtlbiIsImdsb2JlIiwiZW5hYmxlZCIsIk5PX01BUF9JRCIsImJhc2VtYXAiLCJsYWJlbHMiLCJhZG1pbkxpbmVzIiwid2F0ZXIiLCJzeW5jR2xvYmVDb25maWdDb2xvcnNUb1N0eWxlIiwibWFwU3R5bGVDaGFuZ2VVcGRhdGVyIiwiX21hcFN0YXRlJGdsb2JlMiIsIm5leHRTdHlsZU9iaiIsIm5leHRHbG9iZUNvbmZpZyIsInN1cmZhY2VDb2xvciIsIkRFRkFVTFRfQkFTRU1BUF9DT0xPUiIsImJhY2tncm91bmRGaWxsQ29sb3IiLCJ3YXRlckNvbG9yIiwiYmFzZW1hcFdhdGVyRmlsbENvbG9yIiwiYWRtaW5MaW5lc0NvbG9yIiwiYmFzZW1hcEFkbWluTGluZUNvbG9yIiwiYmFzZW1hcENvbG9ycyIsImdldEJhc2VtYXBDb2xvcnNGb3JTdHlsZSIsInN0eWxlIiwibGF5ZXJHcm91cHMiLCJjb21iaW5lZFNldE1hcFZpZXdNb2RlVXBkYXRlciIsIl9tYXBTdGF0ZSRnbG9iZTMiLCJzZXRNYXBWaWV3TW9kZVVwZGF0ZXIiLCJjb21iaW5lZExheWVyVHlwZUNoYW5nZVVwZGF0ZXIiLCJvbGRMYXllckluZGV4IiwiZmluZEluZGV4Iiwib2xkTGF5ZXIiLCJsYXllclR5cGVDaGFuZ2VVcGRhdGVyIiwibmV3TGF5ZXIiLCJ0b2dnbGVTcGxpdE1hcFVwZGF0ZXIiLCJfbmV3U3RhdGUkdWlTdGF0ZSRtYXAiLCJuZXdTdGF0ZSIsInZpc1N0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyIiwidWlTdGF0ZVRvZ2dsZVNwbGl0TWFwVXBkYXRlciIsIm1hcFN0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyIiwiaXNTcGxpdCIsInNwbGl0TWFwcyIsImlzTGVnZW5kQWN0aXZlIiwibWFwQ29udHJvbHMiLCJtYXBMZWdlbmQiLCJhY3RpdmUiLCJ0b2dnbGVNYXBDb250cm9sVXBkYXRlciIsInBhbmVsSWQiLCJpbmRleCIsInNldE1hcFNwbGl0TW9kZVVwZGF0ZXIiLCJfbmV3VWlTdGF0ZSRtYXBDb250cm8iLCJtYXBTcGxpdE1vZGUiLCJwcmV2TW9kZSIsIm5ld01hcFN0YXRlIiwibWFwU3RhdGVTZXRNYXBTcGxpdE1vZGVVcGRhdGVyIiwibmV3VmlzU3RhdGUiLCJNYXBTcGxpdE1vZGUiLCJTSU5HTEVfTUFQIiwiRFVBTF9NQVAiLCJTV0lQRV9DT01QQVJFIiwiY29tcHV0ZVNwbGl0TWFwTGF5ZXJzIiwiZHVwbGljYXRlIiwibmV3VWlTdGF0ZSIsImRlZmF1bHRSZXBsYWNlRGF0YVRvTWFwT3B0aW9ucyIsIl9yZWY1IiwiX3BheWxvYWQkb3B0aW9ucyIsIl9vcHRpb25zJGRlbGV0ZU9yaWdpbiIsInJlcGxhY2VPcHRpb25zIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzMiIsImFkZERhdGFUb01hcE9wdGlvbnMiLCJkYXRhSWRUb1VzZSIsInByZXBhcmVkU3RhdGUiLCJwcmVwYXJlU3RhdGVGb3JEYXRhc2V0UmVwbGFjZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21iaW5lZC11cGRhdGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge1xuICB0b2dnbGVNb2RhbFVwZGF0ZXIsXG4gIGxvYWRGaWxlc1N1Y2Nlc3NVcGRhdGVyIGFzIHVpU3RhdGVMb2FkRmlsZXNTdWNjZXNzVXBkYXRlcixcbiAgdG9nZ2xlTWFwQ29udHJvbFVwZGF0ZXIsXG4gIHRvZ2dsZVNwbGl0TWFwVXBkYXRlciBhcyB1aVN0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyLFxuICByZWNlaXZlTWFwQ29uZmlnVXBkYXRlciBhcyB1aVN0YXRlUmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXJcbn0gZnJvbSAnLi91aS1zdGF0ZS11cGRhdGVycyc7XG5pbXBvcnQge1xuICB1cGRhdGVWaXNEYXRhVXBkYXRlciBhcyB2aXNTdGF0ZVVwZGF0ZVZpc0RhdGFVcGRhdGVyLFxuICBzZXRNYXBJbmZvVXBkYXRlcixcbiAgbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcixcbiAgdG9nZ2xlU3BsaXRNYXBVcGRhdGVyIGFzIHZpc1N0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyLFxuICBwcmVwYXJlU3RhdGVGb3JEYXRhc2V0UmVwbGFjZVxufSBmcm9tICcuL3Zpcy1zdGF0ZS11cGRhdGVycyc7XG5pbXBvcnQge1xuICByZWNlaXZlTWFwQ29uZmlnVXBkYXRlciBhcyBzdGF0ZU1hcENvbmZpZ1VwZGF0ZXIsXG4gIHRvZ2dsZVNwbGl0TWFwVXBkYXRlciBhcyBtYXBTdGF0ZVRvZ2dsZVNwbGl0TWFwVXBkYXRlcixcbiAgc2V0TWFwU3BsaXRNb2RlVXBkYXRlciBhcyBtYXBTdGF0ZVNldE1hcFNwbGl0TW9kZVVwZGF0ZXIsXG4gIHNldE1hcFZpZXdNb2RlVXBkYXRlclxufSBmcm9tICcuL21hcC1zdGF0ZS11cGRhdGVycyc7XG5pbXBvcnQge1xuICBtYXBTdHlsZUNoYW5nZVVwZGF0ZXIsXG4gIHJlY2VpdmVNYXBDb25maWdVcGRhdGVyIGFzIHN0eWxlTWFwQ29uZmlnVXBkYXRlclxufSBmcm9tICcuL21hcC1zdHlsZS11cGRhdGVycyc7XG5pbXBvcnQge2ZpbGVzVG9EYXRhUGF5bG9hZH0gZnJvbSAnQGtlcGxlci5nbC9wcm9jZXNzb3JzJztcbmltcG9ydCB7cGF5bG9hZF8sIGFwcGx5Xywgd2l0aF8sIGlmXywgY29tcG9zZV8sIG1lcmdlXywgcGlja199IGZyb20gJy4vY29tcG9zZXItaGVscGVycyc7XG5pbXBvcnQge01hcFN0YXRlLCBVaVN0YXRlLCBBZGREYXRhVG9NYXBQYXlsb2FkLCBQYXJzZWRDb25maWcsIFByb3RvRGF0YXNldH0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge01hcFN0eWxlfSBmcm9tICcuL21hcC1zdHlsZS11cGRhdGVycyc7XG5pbXBvcnQge1Byb3ZpZGVyU3RhdGV9IGZyb20gJy4vcHJvdmlkZXItc3RhdGUtdXBkYXRlcnMnO1xuaW1wb3J0IHtcbiAgbG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXJBY3Rpb24sXG4gIENvbmZpcm1SZXBsYWNlRGF0YXNldFVwZGF0ZXJBY3Rpb24sXG4gIFN0YWdlTG9hZGVkRmlsZXNVcGRhdGVyQWN0aW9uLFxuICBNYXBTdHlsZUNoYW5nZVVwZGF0ZXJBY3Rpb24sXG4gIExheWVyVHlwZUNoYW5nZVVwZGF0ZXJBY3Rpb24sXG4gIFRvZ2dsZVNwbGl0TWFwVXBkYXRlckFjdGlvbixcbiAgUmVwbGFjZURhdGFJbk1hcFBheWxvYWQsXG4gIE1hcFN0YXRlQWN0aW9uc1xufSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuaW1wb3J0IHtWaXNTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcbmltcG9ydCB7TGF5ZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7aXNQbGFpbk9iamVjdCwgY29tcHV0ZVNwbGl0TWFwTGF5ZXJzfSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7ZmluZE1hcEJvdW5kc30gZnJvbSAnLi9kYXRhLXV0aWxzJztcbmltcG9ydCB7XG4gIEJBU0VfTUFQX0NPTE9SX01PREVTLFxuICBPVkVSTEFZX0JMRU5ESU5HUyxcbiAgTk9fTUFQX0lELFxuICBNYXBTcGxpdE1vZGUsXG4gIEFERF9EQVRBX0lEXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7Z2V0QmFzZW1hcENvbG9yc0ZvclN0eWxlLCBERUZBVUxUX0JBU0VNQVBfQ09MT1J9IGZyb20gJ0BrZXBsZXIuZ2wvZGVja2dsLWxheWVycyc7XG5cbmV4cG9ydCB0eXBlIEtlcGxlckdsU3RhdGUgPSB7XG4gIHZpc1N0YXRlOiBWaXNTdGF0ZTtcbiAgbWFwU3RhdGU6IE1hcFN0YXRlO1xuICBtYXBTdHlsZTogTWFwU3R5bGU7XG4gIHVpU3RhdGU6IFVpU3RhdGU7XG4gIHByb3ZpZGVyU3RhdGU6IFByb3ZpZGVyU3RhdGU7XG59O1xuXG4vLyBjb21wb3NlIGFjdGlvbiB0byBhcHBseSByZXN1bHQgbXVsdGlwbGUgcmVkdWNlcnMsIHdpdGggdGhlIG91dHB1dCBvZiBvbmVcblxuLyoqXG4gKiBTb21lIGFjdGlvbnMgd2lsbCBhZmZlY3QgdGhlIGVudGlyZSBrZXBsZXIubGcgaW5zdGFuY2Ugc3RhdGUuXG4gKiBUaGUgdXBkYXRlcnMgZm9yIHRoZXNlIGFjdGlvbnMgaXMgZXhwb3J0ZWQgYXMgYGNvbWJpbmVkVXBkYXRlcnNgLiBUaGVzZSB1cGRhdGVyIHRha2UgdGhlIGVudGlyZSBpbnN0YW5jZSBzdGF0ZVxuICogYXMgdGhlIGZpcnN0IGFyZ3VtZW50LiBSZWFkIG1vcmUgYWJvdXQgW1VzaW5nIHVwZGF0ZXJzXSguLi9hZHZhbmNlZC11c2FnZS91c2luZy11cGRhdGVycy5tZClcbiAqIEBwdWJsaWNcbiAqIEBleGFtcGxlXG4gKlxuICogaW1wb3J0IGtlcGxlckdsUmVkdWNlciwge2NvbWJpbmVkVXBkYXRlcnN9IGZyb20gJ0BrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuICogLy8gUm9vdCBSZWR1Y2VyXG4gKiBjb25zdCByZWR1Y2VycyA9IGNvbWJpbmVSZWR1Y2Vycyh7XG4gKiAga2VwbGVyR2w6IGtlcGxlckdsUmVkdWNlcixcbiAqICBhcHA6IGFwcFJlZHVjZXJcbiAqIH0pO1xuICpcbiAqIGNvbnN0IGNvbXBvc2VkUmVkdWNlciA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gKiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICogICAgLy8gYWRkIGRhdGEgdG8gbWFwIGFmdGVyIHJlY2VpdmluZyBkYXRhIGZyb20gcmVtb3RlIHNvdXJjZXNcbiAqICAgIGNhc2UgJ0xPQURfUkVNT1RFX1JFU09VUkNFX1NVQ0NFU1MnOlxuICogICAgICByZXR1cm4ge1xuICogICAgICAgIC4uLnN0YXRlLFxuICogICAgICAgIGtlcGxlckdsOiB7XG4gKiAgICAgICAgICAuLi5zdGF0ZS5rZXBsZXJHbCxcbiAqICAgICAgICAgIC8vIHBhc3MgaW4ga2VwbGVyLmdsIGluc3RhbmNlIHN0YXRlIHRvIGNvbWJpbmVkVXBkYXRlcnNcbiAqICAgICAgICAgIG1hcDogIGNvbWJpbmVkVXBkYXRlcnMuYWRkRGF0YVRvTWFwVXBkYXRlcihcbiAqICAgICAgICAgICBzdGF0ZS5rZXBsZXJHbC5tYXAsXG4gKiAgICAgICAgICAge1xuICogICAgICAgICAgICAgcGF5bG9hZDoge1xuICogICAgICAgICAgICAgICBkYXRhc2V0czogYWN0aW9uLmRhdGFzZXRzLFxuICogICAgICAgICAgICAgICBvcHRpb25zOiB7cmVhZE9ubHk6IHRydWV9LFxuICogICAgICAgICAgICAgICBjb25maWc6IGFjdGlvbi5jb25maWdcbiAqICAgICAgICAgICAgICB9XG4gKiAgICAgICAgICAgIH1cbiAqICAgICAgICAgIClcbiAqICAgICAgICB9XG4gKiAgICAgIH07XG4gKiAgfVxuICogIHJldHVybiByZWR1Y2VycyhzdGF0ZSwgYWN0aW9uKTtcbiAqIH07XG4gKlxuICogZXhwb3J0IGRlZmF1bHQgY29tcG9zZWRSZWR1Y2VyO1xuICovXG5cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuLy8gQHRzLWlnbm9yZVxuY29uc3QgY29tYmluZWRVcGRhdGVycyA9IG51bGw7XG4vKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuXG5leHBvcnQgY29uc3QgaXNWYWxpZENvbmZpZyA9IGNvbmZpZyA9PlxuICBpc1BsYWluT2JqZWN0KGNvbmZpZykgJiYgaXNQbGFpbk9iamVjdChjb25maWcuY29uZmlnKSAmJiBjb25maWcudmVyc2lvbjtcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRBZGREYXRhVG9NYXBPcHRpb25zID0ge1xuICBjZW50ZXJNYXA6IHRydWUsXG4gIGtlZXBFeGlzdGluZ0NvbmZpZzogZmFsc2UsXG4gIGF1dG9DcmVhdGVMYXllcnM6IHRydWUsXG4gIGF1dG9DcmVhdGVUb29sdGlwczogdHJ1ZVxufTtcblxuLyoqXG4gKiBDb21iaW5lIGRhdGEgYW5kIGZ1bGwgY29uZmlndXJhdGlvbiB1cGRhdGUgaW4gYSBzaW5nbGUgYWN0aW9uXG4gKlxuICogQG1lbWJlcm9mIGNvbWJpbmVkVXBkYXRlcnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZSBrZXBsZXIuZ2wgaW5zdGFuY2Ugc3RhdGUsIGNvbnRhaW5pbmcgYWxsIHN1YnJlZHVjZXIgc3RhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb24ucGF5bG9hZCBge2RhdGFzZXRzLCBvcHRpb25zLCBjb25maWd9YFxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkLmRhdGFzZXRzIC0gKioqcmVxdWlyZWQqKiBkYXRhc2V0cyBjYW4gYmUgYSBkYXRhc2V0IG9yIGFuIGFycmF5IG9mIGRhdGFzZXRzXG4gKiBFYWNoIGRhdGFzZXQgb2JqZWN0IG5lZWRzIHRvIGhhdmUgYGluZm9gIGFuZCBgZGF0YWAgcHJvcGVydHkuXG4gKiBAcGFyYW0gW2FjdGlvbi5wYXlsb2FkLm9wdGlvbnNdIG9wdGlvbiBvYmplY3QgYHtjZW50ZXJNYXA6IHRydWUsIHBhZGRpbmc6IHtsZWZ0OiAzMDB9fWBcbiAqIEBwYXJhbSBbYWN0aW9uLnBheWxvYWQuY29uZmlnXSBtYXAgY29uZmlnXG4gKiBAcGFyYW0gW2FjdGlvbi5wYXlsb2FkLmluZm9dIG1hcCBpbmZvIGNvbnRhaW5zIHRpdGxlIGFuZCBkZXNjcmlwdGlvblxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gRGF0YXNldFxuICogQHByb3BlcnR5IGluZm8gLWluZm8gb2YgYSBkYXRhc2V0XG4gKiBAcHJvcGVydHkgaW5mby5pZCAtIGlkIG9mIHRoaXMgZGF0YXNldC4gSWYgY29uZmlnIGlzIGRlZmluZWQsIGBpZGAgc2hvdWxkIG1hdGNoZXMgdGhlIGBkYXRhSWRgIGluIGNvbmZpZy5cbiAqIEBwcm9wZXJ0eSBpbmZvLmxhYmVsIC0gQSBkaXNwbGF5IG5hbWUgb2YgdGhpcyBkYXRhc2V0XG4gKiBAcHJvcGVydHkgZGF0YSAtICoqKnJlcXVpcmVkKiogVGhlIGRhdGEgb2JqZWN0LCBpbiBhIHRhYnVsYXIgZm9ybWF0IHdpdGggMiBwcm9wZXJ0aWVzIGBmaWVsZHNgIGFuZCBgcm93c2BcbiAqIEBwcm9wZXJ0eSBkYXRhLmZpZWxkcyAtICoqKnJlcXVpcmVkKiogQXJyYXkgb2YgZmllbGRzLFxuICogQHByb3BlcnR5IGRhdGEuZmllbGRzLm5hbWUgLSAqKipyZXF1aXJlZCoqIE5hbWUgb2YgdGhlIGZpZWxkLFxuICogQHByb3BlcnR5IGRhdGEucm93cyAtICoqKnJlcXVpcmVkKiogQXJyYXkgb2Ygcm93cywgaW4gYSB0YWJ1bGFyIGZvcm1hdCB3aXRoIGBmaWVsZHNgIGFuZCBgcm93c2BcbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGREYXRhVG9NYXBVcGRhdGVyID0gKFxuICBzdGF0ZTogS2VwbGVyR2xTdGF0ZSxcbiAge3BheWxvYWR9OiB7cGF5bG9hZDogQWRkRGF0YVRvTWFwUGF5bG9hZH1cbik6IEtlcGxlckdsU3RhdGUgPT4ge1xuICBjb25zdCB7ZGF0YXNldHMsIGNvbmZpZywgaW5mb30gPSBwYXlsb2FkO1xuXG4gIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgLi4uZGVmYXVsdEFkZERhdGFUb01hcE9wdGlvbnMsXG4gICAgLi4ucGF5bG9hZC5vcHRpb25zXG4gIH07XG5cbiAgLy8gY2hlY2sgaWYgcHJvZ3Jlc3NpdmUgbG9hZGluZyBkYXRhc2V0IGJ5IGJhdGNoZXMsIGFuZCB1cGRhdGUgdmlzU3RhdGUgZGlyZWN0bHlcbiAgY29uc3QgaXNQcm9ncmVzc2l2ZUxvYWRpbmcgPVxuICAgIEFycmF5LmlzQXJyYXkoZGF0YXNldHMpICYmXG4gICAgZGF0YXNldHNbMF0/LmluZm8uZm9ybWF0ID09PSAnYXJyb3cnICYmXG4gICAgZGF0YXNldHNbMF0/LmluZm8uaWQgJiZcbiAgICBkYXRhc2V0c1swXT8uaW5mby5pZCBpbiBzdGF0ZS52aXNTdGF0ZS5kYXRhc2V0cztcbiAgaWYgKGlzUHJvZ3Jlc3NpdmVMb2FkaW5nKSB7XG4gICAgcmV0dXJuIGNvbXBvc2VfPEtlcGxlckdsU3RhdGU+KFtcbiAgICAgIHBpY2tfKCd2aXNTdGF0ZScpKFxuICAgICAgICBhcHBseV88VmlzU3RhdGUsIGFueT4odmlzU3RhdGVVcGRhdGVWaXNEYXRhVXBkYXRlciwge1xuICAgICAgICAgIGRhdGFzZXRzLFxuICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgY29uZmlnXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgXSkoc3RhdGUpO1xuICB9XG5cbiAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICBsZXQgcGFyc2VkQ29uZmlnOiBQYXJzZWRDb25maWcgPSBjb25maWc7XG5cbiAgaWYgKGlzVmFsaWRDb25maWcoY29uZmlnKSkge1xuICAgIC8vIGlmIHBhc3NlZCBpbiBzYXZlZCBjb25maWdcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgcGFyc2VkQ29uZmlnID0gc3RhdGUudmlzU3RhdGUuc2NoZW1hLnBhcnNlU2F2ZWRDb25maWcoY29uZmlnKTtcbiAgfVxuICBjb25zdCBvbGRMYXllcnMgPSBzdGF0ZS52aXNTdGF0ZS5sYXllcnM7XG4gIGNvbnN0IGZpbHRlck5ld2x5QWRkZWRMYXllcnMgPSAobGF5ZXJzOiBMYXllcltdKSA9PlxuICAgIGxheWVycy5maWx0ZXIobmwgPT4gIW9sZExheWVycy5maW5kKG9sID0+IG9sID09PSBubCkpO1xuXG4gIC8vIFJldHVybnMgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZCwgdG8gbWFrZSB0eXBlc2NyaXB0IGhhcHB5XG4gIGNvbnN0IGZpbmRNYXBCb3VuZHNJZkNlbnRlcmVkID0gKGxheWVyczogTGF5ZXJbXSkgPT4ge1xuICAgIGNvbnN0IGJvdW5kcyA9IG9wdGlvbnMuY2VudGVyTWFwICYmIGZpbmRNYXBCb3VuZHMobGF5ZXJzKTtcbiAgICByZXR1cm4gYm91bmRzID8gYm91bmRzIDogdW5kZWZpbmVkO1xuICB9O1xuXG4gIHJldHVybiBjb21wb3NlXzxLZXBsZXJHbFN0YXRlPihbXG4gICAgcGlja18oJ3Zpc1N0YXRlJykoXG4gICAgICAvLyB0aGlzIHBhcnQgY2FuIGJlIGFzeW5jXG4gICAgICBhcHBseV88VmlzU3RhdGUsIGFueT4odmlzU3RhdGVVcGRhdGVWaXNEYXRhVXBkYXRlciwge1xuICAgICAgICBkYXRhc2V0cyxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgY29uZmlnOiBwYXJzZWRDb25maWdcbiAgICAgIH0pXG4gICAgKSxcblxuICAgIGlmXyhCb29sZWFuKGluZm8pLCBwaWNrXygndmlzU3RhdGUnKShhcHBseV88VmlzU3RhdGUsIGFueT4oc2V0TWFwSW5mb1VwZGF0ZXIsIHtpbmZvfSkpKSxcbiAgICAvLyBOb3RlIHRoYXQgZml0IGJvdW5kcyBoZXJlIHdvbid0IGJlIGNhbGxlZCBpbiBjYXNlIGRhdGFzZXRzIGFyZSBjcmVhdGVkIGluIFRhc2tzLlxuICAgIC8vIEEgc2VwYXJhdGUgVGFzayB0byB1cGRhdGUgYm91bmRzIGlzIGNyZWF0ZWQgb25jZSB0aGUgZGF0YXNldHMgYXJlIHJlYWR5LlxuICAgIHdpdGhfKCh7dmlzU3RhdGV9KSA9PlxuICAgICAgcGlja18oJ21hcFN0YXRlJykoXG4gICAgICAgIGFwcGx5XyhcbiAgICAgICAgICBzdGF0ZU1hcENvbmZpZ1VwZGF0ZXIsXG4gICAgICAgICAgcGF5bG9hZF8oe1xuICAgICAgICAgICAgY29uZmlnOiBwYXJzZWRDb25maWcsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgYm91bmRzOiBmaW5kTWFwQm91bmRzSWZDZW50ZXJlZChmaWx0ZXJOZXdseUFkZGVkTGF5ZXJzKHZpc1N0YXRlLmxheWVycykpXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICksXG4gICAgcGlja18oJ21hcFN0eWxlJykoYXBwbHlfKHN0eWxlTWFwQ29uZmlnVXBkYXRlciwgcGF5bG9hZF8oe2NvbmZpZzogcGFyc2VkQ29uZmlnLCBvcHRpb25zfSkpKSxcbiAgICBwaWNrXygndWlTdGF0ZScpKFxuICAgICAgYXBwbHlfKHVpU3RhdGVSZWNlaXZlTWFwQ29uZmlnVXBkYXRlciwgcGF5bG9hZF8oe2NvbmZpZzogcGFyc2VkQ29uZmlnLCBvcHRpb25zfSkpXG4gICAgKSxcbiAgICBwaWNrXygndWlTdGF0ZScpKGFwcGx5Xyh1aVN0YXRlTG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXIsIHBheWxvYWRfKG51bGwpKSksXG5cbiAgICBwaWNrXygndWlTdGF0ZScpKGFwcGx5Xyh0b2dnbGVNb2RhbFVwZGF0ZXIsIHBheWxvYWRfKG51bGwpKSksXG4gICAgcGlja18oJ3VpU3RhdGUnKShcbiAgICAgIG1lcmdlXyhcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMsICdyZWFkT25seScpXG4gICAgICAgICAgPyB7cmVhZE9ubHk6IG9wdGlvbnMucmVhZE9ubHl9XG4gICAgICAgICAgOiB7fVxuICAgICAgKVxuICAgIClcbiAgXSkoc3RhdGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc1N1Y2Nlc3NVcGRhdGVyID0gKFxuICBzdGF0ZTogS2VwbGVyR2xTdGF0ZSxcbiAgYWN0aW9uOiBsb2FkRmlsZXNTdWNjZXNzVXBkYXRlckFjdGlvblxuKTogS2VwbGVyR2xTdGF0ZSA9PiB7XG4gIGlmIChpc1N0YWxlRmlsZUxvYWRGaW5pc2goc3RhdGUudmlzU3RhdGUuZmlsZUxvYWRpbmcsIGFjdGlvbi5sb2FkSWQpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIC8vIHN0aWxsIG1vcmUgdG8gbG9hZFxuICBjb25zdCBwYXlsb2FkcyA9IGZpbGVzVG9EYXRhUGF5bG9hZChhY3Rpb24ucmVzdWx0LCBhY3Rpb24ub3B0aW9ucyk7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IGNvbXBvc2VfKFtcbiAgICBwaWNrXygndmlzU3RhdGUnKShcbiAgICAgIG1lcmdlXyh7XG4gICAgICAgIGZpbGVMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgZmlsZUxvYWRpbmdQcm9ncmVzczoge30sXG4gICAgICAgIHN0YWdlZFRvQWRkOiBudWxsXG4gICAgICB9KVxuICAgIClcbiAgXSkoc3RhdGUpO1xuICAvLyBtYWtlIG11bHRpcGxlIGFkZCBkYXRhIHRvIG1hcCBjYWxsc1xuICBjb25zdCBzdGF0ZVdpdGhEYXRhID0gY29tcG9zZV8ocGF5bG9hZHMubWFwKHAgPT4gYXBwbHlfKGFkZERhdGFUb01hcFVwZGF0ZXIsIHBheWxvYWRfKHApKSkpKFxuICAgIG5leHRTdGF0ZVxuICApO1xuICByZXR1cm4gc3RhdGVXaXRoRGF0YSBhcyBLZXBsZXJHbFN0YXRlO1xufTtcblxuZnVuY3Rpb24ga2VwdExvYWRFcnJvcnMocHJvZ3Jlc3M6IFJlY29yZDxzdHJpbmcsIHtlcnJvcj86IHVua25vd259PiA9IHt9KSB7XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMocHJvZ3Jlc3MpLmZpbHRlcigoWywgdmFsdWVdKSA9PiB2YWx1ZT8uZXJyb3IpKTtcbn1cblxuLyoqIEEgZmluaXNoIGZyb20gdGhlIDIwMG1zIHBhdXNlIGlzIHN0YWxlIG9uY2UgdGhhdCBsb2FkIHdhcyBjYW5jZWxlZCBvciByZXBsYWNlZC4gKi9cbmZ1bmN0aW9uIGlzU3RhbGVGaWxlTG9hZEZpbmlzaChmaWxlTG9hZGluZzoge2xvYWRJZD86IG51bWJlcn0gfCBmYWxzZSwgbG9hZElkPzogbnVtYmVyKTogYm9vbGVhbiB7XG4gIGlmIChsb2FkSWQgPT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gIWZpbGVMb2FkaW5nIHx8IGZpbGVMb2FkaW5nLmxvYWRJZCAhPT0gbG9hZElkO1xufVxuXG4vKipcbiAqIEZpbmlzaCBhIGRlZmVycmVkIGZpbGUgbG9hZDoga2VlcCB0aGUgcGFyc2VkIGNhY2hlLCBjbGVhciB0aGUgbG9hZGluZyBmbGFnLFxuICogYW5kIGxlYXZlIHRoZSBBZGQgRGF0YSBtb2RhbCBvcGVuIHVudGlsIHRoZSB1c2VyIGNvbmZpcm1zLlxuICogQG1lbWJlcm9mIGNvbWJpbmVkVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHN0YWdlTG9hZGVkRmlsZXNVcGRhdGVyID0gKFxuICBzdGF0ZTogS2VwbGVyR2xTdGF0ZSxcbiAgYWN0aW9uOiBTdGFnZUxvYWRlZEZpbGVzVXBkYXRlckFjdGlvblxuKTogS2VwbGVyR2xTdGF0ZSA9PiB7XG4gIGlmIChpc1N0YWxlRmlsZUxvYWRGaW5pc2goc3RhdGUudmlzU3RhdGUuZmlsZUxvYWRpbmcsIGFjdGlvbi5sb2FkSWQpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG1vZGFsT3BlbiA9IHN0YXRlLnVpU3RhdGUuY3VycmVudE1vZGFsID09PSBBRERfREFUQV9JRDtcbiAgY29uc3QgcmVzdWx0ID0gYWN0aW9uLnJlc3VsdCB8fCBbXTtcbiAgY29uc3QgcHJldmlvdXMgPVxuICAgIG1vZGFsT3BlbiAmJiBBcnJheS5pc0FycmF5KHN0YXRlLnZpc1N0YXRlLnN0YWdlZFRvQWRkKSA/IHN0YXRlLnZpc1N0YXRlLnN0YWdlZFRvQWRkIDogW107XG4gIGNvbnN0IHN0YWdlZFRvQWRkID0gWy4uLnByZXZpb3VzLCAuLi5yZXN1bHRdO1xuXG4gIHJldHVybiBjb21wb3NlXzxLZXBsZXJHbFN0YXRlPihbXG4gICAgcGlja18oJ3Zpc1N0YXRlJykoXG4gICAgICBtZXJnZV8oe1xuICAgICAgICBmaWxlTG9hZGluZzogZmFsc2UsXG4gICAgICAgIGZpbGVMb2FkaW5nUHJvZ3Jlc3M6IG1vZGFsT3BlbiA/IGtlcHRMb2FkRXJyb3JzKHN0YXRlLnZpc1N0YXRlLmZpbGVMb2FkaW5nUHJvZ3Jlc3MpIDoge30sXG4gICAgICAgIHN0YWdlZFRvQWRkOiBtb2RhbE9wZW4gJiYgc3RhZ2VkVG9BZGQubGVuZ3RoID8gc3RhZ2VkVG9BZGQgOiBudWxsXG4gICAgICB9KVxuICAgICksXG4gICAgcGlja18oJ3VpU3RhdGUnKShhcHBseV8odWlTdGF0ZUxvYWRGaWxlc1N1Y2Nlc3NVcGRhdGVyLCBwYXlsb2FkXyhudWxsKSkpXG4gIF0pKHN0YXRlKTtcbn07XG5cbmZ1bmN0aW9uIHN0YWdlZEl0ZW1LZXkoaXRlbSk6IHN0cmluZyB7XG4gIHJldHVybiBpdGVtPy5tZXRhZGF0YT8uc291cmNlIHx8IGl0ZW0/LmluZm8/LmlkIHx8ICcnO1xufVxuXG4vKipcbiAqIEFkZCBkYXRhc2V0cyB0byB0aGUgQWRkIERhdGEgbGlzdCB3aXRob3V0IGludGVycnVwdGluZyBhIGZpbGUgdGhhdCBpcyBzdGlsbCBwYXJzaW5nLlxuICogQG1lbWJlcm9mIGNvbWJpbmVkVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFwcGVuZFN0YWdlZExvYWRlZEZpbGVzVXBkYXRlciA9IChcbiAgc3RhdGU6IEtlcGxlckdsU3RhdGUsXG4gIGFjdGlvbjogU3RhZ2VMb2FkZWRGaWxlc1VwZGF0ZXJBY3Rpb25cbik6IEtlcGxlckdsU3RhdGUgPT4ge1xuICBpZiAoc3RhdGUudWlTdGF0ZS5jdXJyZW50TW9kYWwgIT09IEFERF9EQVRBX0lEKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHByZXZpb3VzID0gQXJyYXkuaXNBcnJheShzdGF0ZS52aXNTdGF0ZS5zdGFnZWRUb0FkZCkgPyBzdGF0ZS52aXNTdGF0ZS5zdGFnZWRUb0FkZCA6IFtdO1xuICBjb25zdCBzZWVuID0gbmV3IFNldChwcmV2aW91cy5tYXAoc3RhZ2VkSXRlbUtleSkuZmlsdGVyKEJvb2xlYW4pKTtcbiAgY29uc3QgbmV4dCA9IChhY3Rpb24ucmVzdWx0IHx8IFtdKS5maWx0ZXIoaXRlbSA9PiB7XG4gICAgY29uc3Qga2V5ID0gc3RhZ2VkSXRlbUtleShpdGVtKTtcbiAgICBpZiAoIWtleSB8fCBzZWVuLmhhcyhrZXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHNlZW4uYWRkKGtleSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xuICBpZiAoIW5leHQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiBjb21wb3NlXzxLZXBsZXJHbFN0YXRlPihbXG4gICAgcGlja18oJ3Zpc1N0YXRlJykobWVyZ2VfKHtzdGFnZWRUb0FkZDogWy4uLnByZXZpb3VzLCAuLi5uZXh0XX0pKVxuICBdKShzdGF0ZSk7XG59O1xuXG4vKipcbiAqIFRoZSBmaXJzdCBwbGFpbiBkYXRhc2V0IGluIGEgY29uZmlybWVkIHVwbG9hZCByZXBsYWNlcyB0aGUgc2VsZWN0ZWQgdGFibGUuXG4gKiBBIGtlcGxlci5nbCBtYXAganNvbiBpcyBhZGRlZCBhcyBhIG1hcC4gRnVydGhlciB0YWJsZXMgYXJlIGFkZGVkIGFmdGVyIHRoZSByZXBsYWNlbWVudC5cbiAqL1xuZnVuY3Rpb24gc3BsaXRSZXBsYWNlbWVudFVwbG9hZChwYXlsb2FkczogQWRkRGF0YVRvTWFwUGF5bG9hZFtdKToge1xuICBkYXRhc2V0VG9Vc2U6IFByb3RvRGF0YXNldCB8IG51bGw7XG4gIHJlbWFpbmRlcjogQWRkRGF0YVRvTWFwUGF5bG9hZFtdO1xufSB7XG4gIGNvbnN0IGRhdGFzZXRzOiBQcm90b0RhdGFzZXRbXSA9IFtdO1xuICBjb25zdCBtYXBzOiBBZGREYXRhVG9NYXBQYXlsb2FkW10gPSBbXTtcbiAgcGF5bG9hZHMuZm9yRWFjaChwYXlsb2FkID0+IHtcbiAgICBpZiAocGF5bG9hZC5jb25maWcpIHtcbiAgICAgIG1hcHMucHVzaChwYXlsb2FkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbGlzdCA9IChBcnJheS5pc0FycmF5KHBheWxvYWQuZGF0YXNldHMpID8gcGF5bG9hZC5kYXRhc2V0cyA6IFtwYXlsb2FkLmRhdGFzZXRzXSkuZmlsdGVyKFxuICAgICAgKGRhdGFzZXQpOiBkYXRhc2V0IGlzIFByb3RvRGF0YXNldCA9PiBCb29sZWFuKGRhdGFzZXQpXG4gICAgKTtcbiAgICBkYXRhc2V0cy5wdXNoKC4uLmxpc3QpO1xuICB9KTtcbiAgY29uc3QgW2RhdGFzZXRUb1VzZSwgLi4ubW9yZV0gPSBkYXRhc2V0cztcbiAgcmV0dXJuIHtcbiAgICBkYXRhc2V0VG9Vc2U6IGRhdGFzZXRUb1VzZSA/PyBudWxsLFxuICAgIHJlbWFpbmRlcjogW1xuICAgICAgLi4ubWFwcyxcbiAgICAgIC4uLihtb3JlLmxlbmd0aFxuICAgICAgICA/IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZGF0YXNldHM6IG1vcmUsXG4gICAgICAgICAgICAgIG9wdGlvbnM6IHtrZWVwRXhpc3RpbmdDb25maWc6IHRydWUsIGNlbnRlck1hcDogZmFsc2UsIGF1dG9DcmVhdGVMYXllcnM6IGZhbHNlfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXSlcbiAgICBdXG4gIH07XG59XG5cbi8qKlxuICogVHVybiBhIGNvbmZpcm1lZCBBZGQgRGF0YSBzZWxlY3Rpb24gaW50byBhIGRhdGFzZXQgcmVwbGFjZW1lbnQuXG4gKiBMYXllcnMgYW5kIGZpbHRlcnMgbW92ZSBvbnRvIHRoZSBuZXcgdGFibGUuIFRoZSBvcmlnaW5hbCB0YWJsZSBpcyBkcm9wcGVkIHVubGVzcyBhc2tlZCB0byBzdGF5LlxuICogQG1lbWJlcm9mIGNvbWJpbmVkVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGNvbmZpcm1SZXBsYWNlRGF0YXNldFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBLZXBsZXJHbFN0YXRlLFxuICBhY3Rpb246IENvbmZpcm1SZXBsYWNlRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IEtlcGxlckdsU3RhdGUgPT4ge1xuICBjb25zdCBwYXlsb2FkcyA9IGZpbGVzVG9EYXRhUGF5bG9hZChhY3Rpb24ucmVzdWx0LCB7XG4gICAga2VlcEV4aXN0aW5nQ29uZmlnOiB0cnVlLFxuICAgIGNlbnRlck1hcDogdHJ1ZSxcbiAgICBhdXRvQ3JlYXRlTGF5ZXJzOiBmYWxzZVxuICB9KTtcbiAgY29uc3QgY2xlYXJlZCA9IGNvbXBvc2VfKFtcbiAgICBwaWNrXygndmlzU3RhdGUnKShcbiAgICAgIG1lcmdlXyh7XG4gICAgICAgIGZpbGVMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgZmlsZUxvYWRpbmdQcm9ncmVzczoge30sXG4gICAgICAgIHN0YWdlZFRvQWRkOiBudWxsXG4gICAgICB9KVxuICAgIClcbiAgXSkoc3RhdGUpO1xuXG4gIGNvbnN0IHtkYXRhc2V0VG9Vc2UsIHJlbWFpbmRlcn0gPSBzcGxpdFJlcGxhY2VtZW50VXBsb2FkKHBheWxvYWRzKTtcbiAgaWYgKGRhdGFzZXRUb1VzZT8uaW5mbz8uaWQgJiYgYWN0aW9uLmRhdGFzZXRUb1JlcGxhY2VJZCkge1xuICAgIGNvbnN0IHJlcGxhY2VkID0gcmVwbGFjZURhdGFJbk1hcFVwZGF0ZXIoY2xlYXJlZCwge1xuICAgICAgcGF5bG9hZDoge1xuICAgICAgICBkYXRhc2V0VG9SZXBsYWNlSWQ6IGFjdGlvbi5kYXRhc2V0VG9SZXBsYWNlSWQsXG4gICAgICAgIGRhdGFzZXRUb1VzZSxcbiAgICAgICAgb3B0aW9uczoge2RlbGV0ZU9yaWdpbmFsRGF0YXNldDogYWN0aW9uLmRlbGV0ZU9yaWdpbmFsRGF0YXNldCAhPT0gZmFsc2V9XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHJlcGxhY2VkICE9PSBjbGVhcmVkKSB7XG4gICAgICBpZiAoIXJlbWFpbmRlci5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHJlcGxhY2VkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbXBvc2VfKHJlbWFpbmRlci5tYXAocCA9PiBhcHBseV8oYWRkRGF0YVRvTWFwVXBkYXRlciwgcGF5bG9hZF8ocCkpKSkoXG4gICAgICAgIHJlcGxhY2VkXG4gICAgICApIGFzIEtlcGxlckdsU3RhdGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbXBvc2VfKHBheWxvYWRzLm1hcChwID0+IGFwcGx5XyhhZGREYXRhVG9NYXBVcGRhdGVyLCBwYXlsb2FkXyhwKSkpKShcbiAgICBjbGVhcmVkXG4gICkgYXMgS2VwbGVyR2xTdGF0ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGREYXRhVG9NYXBDb21wb3NlZCA9IGFkZERhdGFUb01hcFVwZGF0ZXI7XG5cbi8qKlxuICogSGVscGVyIHdoaWNoIHVwZGF0ZXMgbWFwIG92ZXJsYXkgYmxlbmRpbmcgbW9kZSBpbiB2aXNTdGF0ZSxcbiAqIGJ1dCBvbmx5IGlmIGl0J3Mgbm90IGN1cnJlbnRseSBpbiB0aGUgYG5vcm1hbGAgbW9kZS5cbiAqL1xuY29uc3QgdXBkYXRlT3ZlcmxheUJsZW5kaW5nID0gb3ZlcmxheUJsZW5kaW5nID0+IHZpc1N0YXRlID0+IHtcbiAgaWYgKHZpc1N0YXRlLm92ZXJsYXlCbGVuZGluZyAhPT0gT1ZFUkxBWV9CTEVORElOR1Mubm9ybWFsLnZhbHVlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZpc1N0YXRlLFxuICAgICAgb3ZlcmxheUJsZW5kaW5nXG4gICAgfTtcbiAgfVxuICByZXR1cm4gdmlzU3RhdGU7XG59O1xuXG4vKipcbiAqIEhlbHBlciB3aGljaCB1cGRhdGVzIGBkYXJrQmFzZU1hcEVuYWJsZWRgIGluIGFsbCB0aGUgbGF5ZXJzIGluIHZpc1N0YXRlIHdoaWNoXG4gKiBoYXZlIHRoaXMgY29uZmlnIHNldHRpbmcgKG9yIGluIG9uZSBzcGVjaWZpYyBsYXllciBpZiB0aGUgYGxheWVySWRgIHBhcmFtIGlzIHByb3ZpZGVkKS5cbiAqL1xuY29uc3QgdXBkYXRlRGFya0Jhc2VNYXBMYXllcnMgPVxuICAoZGFya0Jhc2VNYXBFbmFibGVkOiBib29sZWFuLCBsYXllcklkOiBzdHJpbmcgfCBudWxsID0gbnVsbCkgPT5cbiAgdmlzU3RhdGUgPT4gKHtcbiAgICAuLi52aXNTdGF0ZSxcbiAgICBsYXllcnM6IHZpc1N0YXRlLmxheWVycy5tYXAobGF5ZXIgPT4ge1xuICAgICAgaWYgKCFsYXllcklkIHx8IGxheWVyLmlkID09PSBsYXllcklkKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MsICdkYXJrQmFzZU1hcEVuYWJsZWQnKSkge1xuICAgICAgICAgIGNvbnN0IHt2aXNDb25maWd9ID0gbGF5ZXIuY29uZmlnO1xuICAgICAgICAgIHJldHVybiBsYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgICAgICB2aXNDb25maWc6IHsuLi52aXNDb25maWcsIGRhcmtCYXNlTWFwRW5hYmxlZH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGxheWVyO1xuICAgIH0pXG4gIH0pO1xuXG4vKipcbiAqIFVwZGF0ZXIgdGhhdCBjaGFuZ2VzIHRoZSBtYXAgc3R5bGUgYnkgY2FsbGluZyBtYXBTdHlsZUNoYW5nZVVwZGF0ZXIgb24gdmlzU3RhdGUuXG4gKiBJbiBhZGRpdGlvbiB0byB0aGF0LCBpdCBkb2VzIHRoZSBmb2xsb3dpbmc6XG4gKlxuICogICAxLiBVcGRhdGUgbWFwIG92ZXJsYXkgYmxlbmRpbmcgbW9kZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGNvbG9yTW9kZSBvZiB0aGVcbiAqICAgICAgYmFzZSBtYXAsIGJ1dCBvbmx5IGlmIGl0J3Mgbm90IGluIHRoZSBgbm9ybWFsYCBtb2RlLlxuICpcbiAqICAgMi4gVXBkYXRlIGFsbCB0aGUgbGF5ZXJzIHdoaWNoIGhhdmUgdGhlIGBkYXJrQmFzZU1hcEVuYWJsZWRgIGNvbmZpZyBzZXR0aW5nXG4gKiAgICAgIGFkanVzdGluZyBpdCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGNvbG9yTW9kZSBvZiB0aGUgYmFzZSBtYXAuXG4gKlxuICovXG5leHBvcnQgY29uc3QgY29tYmluZWRNYXBTdHlsZUNoYW5nZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBLZXBsZXJHbFN0YXRlLFxuICBhY3Rpb246IE1hcFN0eWxlQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogS2VwbGVyR2xTdGF0ZSA9PiB7XG4gIGNvbnN0IHtwYXlsb2FkfSA9IGFjdGlvbjtcbiAgY29uc3Qge21hcFN0eWxlfSA9IHN0YXRlO1xuICBjb25zdCBnZXRDb2xvck1vZGUgPSBrZXkgPT4gbWFwU3R5bGUubWFwU3R5bGVzW2tleV0/LmNvbG9yTW9kZTtcbiAgY29uc3QgcHJldkNvbG9yTW9kZSA9IGdldENvbG9yTW9kZShtYXBTdHlsZS5zdHlsZVR5cGUpO1xuICBjb25zdCBuZXh0Q29sb3JNb2RlID0gZ2V0Q29sb3JNb2RlKHBheWxvYWQuc3R5bGVUeXBlKTtcbiAgbGV0IHt2aXNTdGF0ZSwgbWFwU3RhdGV9ID0gc3RhdGU7XG4gIGlmIChuZXh0Q29sb3JNb2RlICE9PSBwcmV2Q29sb3JNb2RlKSB7XG4gICAgc3dpdGNoIChuZXh0Q29sb3JNb2RlKSB7XG4gICAgICBjYXNlIEJBU0VfTUFQX0NPTE9SX01PREVTLkRBUks6XG4gICAgICAgIHZpc1N0YXRlID0gY29tcG9zZV8oW1xuICAgICAgICAgIHVwZGF0ZU92ZXJsYXlCbGVuZGluZyhPVkVSTEFZX0JMRU5ESU5HUy5zY3JlZW4udmFsdWUpLFxuICAgICAgICAgIHVwZGF0ZURhcmtCYXNlTWFwTGF5ZXJzKHRydWUpXG4gICAgICAgIF0pKHZpc1N0YXRlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEJBU0VfTUFQX0NPTE9SX01PREVTLkxJR0hUOlxuICAgICAgICB2aXNTdGF0ZSA9IGNvbXBvc2VfKFtcbiAgICAgICAgICB1cGRhdGVPdmVybGF5QmxlbmRpbmcoT1ZFUkxBWV9CTEVORElOR1MuZGFya2VuLnZhbHVlKSxcbiAgICAgICAgICB1cGRhdGVEYXJrQmFzZU1hcExheWVycyhmYWxzZSlcbiAgICAgICAgXSkodmlzU3RhdGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuICB9XG5cbiAgLy8gVXBkYXRlIGdsb2JlIGNvbmZpZyBjb2xvcnMgd2hlbiBzdHlsZSBjaGFuZ2VzIGFuZCBnbG9iZSBpcyBlbmFibGVkXG4gIGlmIChtYXBTdGF0ZS5nbG9iZT8uZW5hYmxlZCkge1xuICAgIC8vIFN3aXRjaGluZyBmcm9tIFwiTm8gQmFzZW1hcFwiIHRvIGEgYmFzZW1hcCAtIHJlc3RvcmUgYmFzZW1hcCBzdWItdG9nZ2xlc1xuICAgIGlmIChwYXlsb2FkLnN0eWxlVHlwZSAhPT0gTk9fTUFQX0lEICYmIG1hcFN0eWxlLnN0eWxlVHlwZSA9PT0gTk9fTUFQX0lEKSB7XG4gICAgICBtYXBTdGF0ZSA9IHtcbiAgICAgICAgLi4ubWFwU3RhdGUsXG4gICAgICAgIGdsb2JlOiB7XG4gICAgICAgICAgLi4ubWFwU3RhdGUuZ2xvYmUsXG4gICAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgICAuLi5tYXBTdGF0ZS5nbG9iZS5jb25maWcsXG4gICAgICAgICAgICBiYXNlbWFwOiB0cnVlLFxuICAgICAgICAgICAgbGFiZWxzOiB0cnVlLFxuICAgICAgICAgICAgYWRtaW5MaW5lczogdHJ1ZSxcbiAgICAgICAgICAgIHdhdGVyOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICBtYXBTdGF0ZSA9IHN5bmNHbG9iZUNvbmZpZ0NvbG9yc1RvU3R5bGUobWFwU3RhdGUsIG1hcFN0eWxlLCBwYXlsb2FkLnN0eWxlVHlwZSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHZpc1N0YXRlLFxuICAgIG1hcFN0YXRlLFxuICAgIG1hcFN0eWxlOiBtYXBTdHlsZUNoYW5nZVVwZGF0ZXIobWFwU3R5bGUsIHtwYXlsb2FkOiB7Li4ucGF5bG9hZH19KVxuICB9O1xufTtcblxuLyoqXG4gKiBEZXJpdmUgZ2xvYmUgYmFzZW1hcCBjb2xvcnMgKHN1cmZhY2UgLyB3YXRlciAvIGFkbWluIGxpbmVzKSBmcm9tIGEgbWFwIHN0eWxlIGFuZFxuICogcmV0dXJuIGFuIHVwZGF0ZWQgbWFwU3RhdGUgd2l0aCB0aG9zZSBjb2xvcnMgd3JpdHRlbiBpbnRvIGBnbG9iZS5jb25maWdgLiBVc2VkIGJvdGhcbiAqIHdoZW4gdGhlIGJhc2UgbWFwIHN0eWxlIGNoYW5nZXMgYW5kIHdoZW4gZW50ZXJpbmcgZ2xvYmUgbW9kZSwgc28gdGhlIGdsb2JlIGFsd2F5c1xuICogcmVmbGVjdHMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBiYXNlbWFwIGluc3RlYWQgb2YgdGhlIHN0YXRpYyBERUZBVUxUX0dMT0JFX0NPTkZJRy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN5bmNHbG9iZUNvbmZpZ0NvbG9yc1RvU3R5bGUoXG4gIG1hcFN0YXRlOiBNYXBTdGF0ZSxcbiAgbWFwU3R5bGU6IE1hcFN0eWxlLFxuICBzdHlsZVR5cGU6IHN0cmluZ1xuKTogTWFwU3RhdGUge1xuICBpZiAoIW1hcFN0YXRlLmdsb2JlPy5lbmFibGVkKSB7XG4gICAgcmV0dXJuIG1hcFN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV4dFN0eWxlT2JqID0gbWFwU3R5bGUubWFwU3R5bGVzW3N0eWxlVHlwZV07XG4gIGNvbnN0IG5leHRHbG9iZUNvbmZpZyA9IHsuLi5tYXBTdGF0ZS5nbG9iZS5jb25maWd9O1xuXG4gIGlmIChzdHlsZVR5cGUgPT09IE5PX01BUF9JRCkge1xuICAgIG5leHRHbG9iZUNvbmZpZy5iYXNlbWFwID0gZmFsc2U7XG4gICAgbmV4dEdsb2JlQ29uZmlnLmxhYmVscyA9IGZhbHNlO1xuICAgIG5leHRHbG9iZUNvbmZpZy5hZG1pbkxpbmVzID0gZmFsc2U7XG4gICAgbmV4dEdsb2JlQ29uZmlnLndhdGVyID0gZmFsc2U7XG4gICAgbmV4dEdsb2JlQ29uZmlnLnN1cmZhY2VDb2xvciA9IERFRkFVTFRfQkFTRU1BUF9DT0xPUi5iYWNrZ3JvdW5kRmlsbENvbG9yO1xuICAgIG5leHRHbG9iZUNvbmZpZy53YXRlckNvbG9yID0gREVGQVVMVF9CQVNFTUFQX0NPTE9SLmJhc2VtYXBXYXRlckZpbGxDb2xvcjtcbiAgICBuZXh0R2xvYmVDb25maWcuYWRtaW5MaW5lc0NvbG9yID0gREVGQVVMVF9CQVNFTUFQX0NPTE9SLmJhc2VtYXBBZG1pbkxpbmVDb2xvcjtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBiYXNlbWFwQ29sb3JzID0gbmV4dFN0eWxlT2JqXG4gICAgICA/IGdldEJhc2VtYXBDb2xvcnNGb3JTdHlsZShzdHlsZVR5cGUsIHtcbiAgICAgICAgICBzdHlsZTogbmV4dFN0eWxlT2JqLnN0eWxlLFxuICAgICAgICAgIGxheWVyR3JvdXBzOiBuZXh0U3R5bGVPYmoubGF5ZXJHcm91cHNcbiAgICAgICAgfSlcbiAgICAgIDogLy8gU3R5bGUgb2JqZWN0IG5vdCB5ZXQgbG9hZGVkIC0gdXNlIGtub3duIHByZXNldHMgYnkgc3R5bGUgdHlwZVxuICAgICAgICBnZXRCYXNlbWFwQ29sb3JzRm9yU3R5bGUoc3R5bGVUeXBlKTtcbiAgICBuZXh0R2xvYmVDb25maWcuc3VyZmFjZUNvbG9yID0gYmFzZW1hcENvbG9ycy5iYWNrZ3JvdW5kRmlsbENvbG9yO1xuICAgIG5leHRHbG9iZUNvbmZpZy53YXRlckNvbG9yID0gYmFzZW1hcENvbG9ycy5iYXNlbWFwV2F0ZXJGaWxsQ29sb3I7XG4gICAgbmV4dEdsb2JlQ29uZmlnLmFkbWluTGluZXNDb2xvciA9IGJhc2VtYXBDb2xvcnMuYmFzZW1hcEFkbWluTGluZUNvbG9yO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5tYXBTdGF0ZSxcbiAgICBnbG9iZToge1xuICAgICAgLi4ubWFwU3RhdGUuZ2xvYmUsXG4gICAgICBjb25maWc6IG5leHRHbG9iZUNvbmZpZ1xuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBVcGRhdGVyIHRoYXQgc3dpdGNoZXMgdGhlIG1hcCB2aWV3IG1vZGUgKDJEIC8gM0QgLyBHbG9iZSkuIFJ1bnMgdGhlIGJhc2UgbWFwLXN0YXRlXG4gKiB1cGRhdGVyIGFuZCwgd2hlbiBlbnRlcmluZyBnbG9iZSBtb2RlLCBzeW5jcyB0aGUgZ2xvYmUgYmFzZW1hcCBjb2xvcnMgdG8gdGhlXG4gKiBjdXJyZW50bHkgc2VsZWN0ZWQgbWFwIHN0eWxlIHNvIHRoZSBnbG9iZSBkb2Vzbid0IHNob3cgc3RhbGUgZGVmYXVsdCBjb2xvcnMuXG4gKi9cbmV4cG9ydCBjb25zdCBjb21iaW5lZFNldE1hcFZpZXdNb2RlVXBkYXRlciA9IChcbiAgc3RhdGU6IEtlcGxlckdsU3RhdGUsXG4gIGFjdGlvbjogTWFwU3RhdGVBY3Rpb25zLlNldE1hcFZpZXdNb2RlVXBkYXRlckFjdGlvblxuKTogS2VwbGVyR2xTdGF0ZSA9PiB7XG4gIGxldCBtYXBTdGF0ZSA9IHNldE1hcFZpZXdNb2RlVXBkYXRlcihzdGF0ZS5tYXBTdGF0ZSwgYWN0aW9uKTtcblxuICBpZiAobWFwU3RhdGUuZ2xvYmU/LmVuYWJsZWQpIHtcbiAgICBtYXBTdGF0ZSA9IHN5bmNHbG9iZUNvbmZpZ0NvbG9yc1RvU3R5bGUobWFwU3RhdGUsIHN0YXRlLm1hcFN0eWxlLCBzdGF0ZS5tYXBTdHlsZS5zdHlsZVR5cGUpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBtYXBTdGF0ZVxuICB9O1xufTtcblxuLyoqXG4gKiBVcGRhdGVyIHRoYXQgY2hhbmdlcyB0aGUgbGF5ZXIgdHlwZSBieSBjYWxsaW5nIGBsYXllclR5cGVDaGFuZ2VVcGRhdGVyYCBvbiB2aXNTdGF0ZS5cbiAqIEluIGFkZGl0aW9uIHRvIHRoYXQsIGlmIHRoZSBuZXcgbGF5ZXIgdHlwZSBoYXMgdGhlIGBkYXJrQmFzZU1hcEVuYWJsZWRgIGNvbmZpZ1xuICogc2V0dGluZywgd2UgYWRqdXN0IGl0IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgY29sb3JNb2RlIG9mIHRoZSBiYXNlIG1hcC5zXG4gKi9cbmV4cG9ydCBjb25zdCBjb21iaW5lZExheWVyVHlwZUNoYW5nZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBLZXBsZXJHbFN0YXRlLFxuICBhY3Rpb246IExheWVyVHlwZUNoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IEtlcGxlckdsU3RhdGUgPT4ge1xuICBsZXQge3Zpc1N0YXRlfSA9IHN0YXRlO1xuICBjb25zdCBvbGRMYXllckluZGV4ID0gdmlzU3RhdGUubGF5ZXJzLmZpbmRJbmRleChsYXllciA9PiBsYXllciA9PT0gYWN0aW9uLm9sZExheWVyKTtcbiAgdmlzU3RhdGUgPSBsYXllclR5cGVDaGFuZ2VVcGRhdGVyKHZpc1N0YXRlLCBhY3Rpb24pO1xuICBjb25zdCBuZXdMYXllciA9IHZpc1N0YXRlLmxheWVyc1tvbGRMYXllckluZGV4XTtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuZXdMYXllcj8udmlzQ29uZmlnU2V0dGluZ3MsICdkYXJrQmFzZU1hcEVuYWJsZWQnKSkge1xuICAgIGNvbnN0IHttYXBTdHlsZX0gPSBzdGF0ZTtcbiAgICBjb25zdCB7Y29sb3JNb2RlfSA9IG1hcFN0eWxlLm1hcFN0eWxlc1ttYXBTdHlsZS5zdHlsZVR5cGVdO1xuICAgIGNvbnN0IHtkYXJrQmFzZU1hcEVuYWJsZWR9ID0gbmV3TGF5ZXIuY29uZmlnLnZpc0NvbmZpZztcbiAgICBzd2l0Y2ggKGNvbG9yTW9kZSkge1xuICAgICAgY2FzZSBCQVNFX01BUF9DT0xPUl9NT0RFUy5EQVJLOlxuICAgICAgICBpZiAoIWRhcmtCYXNlTWFwRW5hYmxlZCkge1xuICAgICAgICAgIHZpc1N0YXRlID0gdXBkYXRlRGFya0Jhc2VNYXBMYXllcnModHJ1ZSwgbmV3TGF5ZXIuaWQpKHZpc1N0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQkFTRV9NQVBfQ09MT1JfTU9ERVMuTElHSFQ6XG4gICAgICAgIGlmIChkYXJrQmFzZU1hcEVuYWJsZWQpIHtcbiAgICAgICAgICB2aXNTdGF0ZSA9IHVwZGF0ZURhcmtCYXNlTWFwTGF5ZXJzKGZhbHNlLCBuZXdMYXllci5pZCkodmlzU3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICB2aXNTdGF0ZVxuICB9O1xufTtcblxuLyoqXG4gKiBNYWtlIG1hcExlZ2VuZCBhY3RpdmUgd2hlbiB0b2dnbGVTcGxpdE1hcCBhY3Rpb24gaXMgY2FsbGVkXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVTcGxpdE1hcFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBLZXBsZXJHbFN0YXRlLFxuICBhY3Rpb246IFRvZ2dsZVNwbGl0TWFwVXBkYXRlckFjdGlvblxuKTogS2VwbGVyR2xTdGF0ZSA9PiB7XG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIHZpc1N0YXRlOiB2aXNTdGF0ZVRvZ2dsZVNwbGl0TWFwVXBkYXRlcihzdGF0ZS52aXNTdGF0ZSwgYWN0aW9uKSxcbiAgICB1aVN0YXRlOiB1aVN0YXRlVG9nZ2xlU3BsaXRNYXBVcGRhdGVyKHN0YXRlLnVpU3RhdGUpLFxuICAgIG1hcFN0YXRlOiBtYXBTdGF0ZVRvZ2dsZVNwbGl0TWFwVXBkYXRlcihzdGF0ZS5tYXBTdGF0ZSlcbiAgfTtcblxuICBjb25zdCBpc1NwbGl0ID0gbmV3U3RhdGUudmlzU3RhdGUuc3BsaXRNYXBzLmxlbmd0aCAhPT0gMDtcbiAgY29uc3QgaXNMZWdlbmRBY3RpdmUgPSBuZXdTdGF0ZS51aVN0YXRlLm1hcENvbnRyb2xzPy5tYXBMZWdlbmQ/LmFjdGl2ZTtcbiAgaWYgKGlzU3BsaXQgJiYgIWlzTGVnZW5kQWN0aXZlKSB7XG4gICAgbmV3U3RhdGUudWlTdGF0ZSA9IHRvZ2dsZU1hcENvbnRyb2xVcGRhdGVyKG5ld1N0YXRlLnVpU3RhdGUsIHtcbiAgICAgIHBheWxvYWQ6IHtwYW5lbElkOiAnbWFwTGVnZW5kJywgaW5kZXg6IGFjdGlvbi5wYXlsb2FkfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufTtcblxuLyoqXG4gKiBTZXQgbWFwIHNwbGl0IG1vZGUgdXBkYXRlciAtIGNvb3JkaW5hdGVzIHN0YXRlIGNoYW5nZXMgYWNyb3NzIHZpc1N0YXRlLCBtYXBTdGF0ZSwgYW5kIHVpU3RhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IHNldE1hcFNwbGl0TW9kZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBLZXBsZXJHbFN0YXRlLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5TZXRNYXBTcGxpdE1vZGVVcGRhdGVyQWN0aW9uXG4pOiBLZXBsZXJHbFN0YXRlID0+IHtcbiAgY29uc3Qge21hcFNwbGl0TW9kZX0gPSBhY3Rpb24ucGF5bG9hZDtcbiAgY29uc3QgcHJldk1vZGUgPSBzdGF0ZS5tYXBTdGF0ZS5tYXBTcGxpdE1vZGU7XG5cbiAgaWYgKG1hcFNwbGl0TW9kZSA9PT0gcHJldk1vZGUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdNYXBTdGF0ZSA9IG1hcFN0YXRlU2V0TWFwU3BsaXRNb2RlVXBkYXRlcihzdGF0ZS5tYXBTdGF0ZSwgYWN0aW9uKTtcblxuICBsZXQgbmV3VmlzU3RhdGUgPSB7Li4uc3RhdGUudmlzU3RhdGV9O1xuXG4gIHN3aXRjaCAobWFwU3BsaXRNb2RlKSB7XG4gICAgY2FzZSBNYXBTcGxpdE1vZGUuU0lOR0xFX01BUDpcbiAgICAgIG5ld1Zpc1N0YXRlID0ge1xuICAgICAgICAuLi5uZXdWaXNTdGF0ZSxcbiAgICAgICAgc3BsaXRNYXBzOiBbXVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTWFwU3BsaXRNb2RlLkRVQUxfTUFQOlxuICAgIGNhc2UgTWFwU3BsaXRNb2RlLlNXSVBFX0NPTVBBUkU6XG4gICAgICBpZiAocHJldk1vZGUgPT09IE1hcFNwbGl0TW9kZS5TSU5HTEVfTUFQKSB7XG4gICAgICAgIG5ld1Zpc1N0YXRlID0ge1xuICAgICAgICAgIC4uLm5ld1Zpc1N0YXRlLFxuICAgICAgICAgIHNwbGl0TWFwczogY29tcHV0ZVNwbGl0TWFwTGF5ZXJzKG5ld1Zpc1N0YXRlLmxheWVycywge1xuICAgICAgICAgICAgZHVwbGljYXRlOiBtYXBTcGxpdE1vZGUgPT09IE1hcFNwbGl0TW9kZS5TV0lQRV9DT01QQVJFXG4gICAgICAgICAgfSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxuXG4gIGxldCBuZXdVaVN0YXRlID0gdWlTdGF0ZVRvZ2dsZVNwbGl0TWFwVXBkYXRlcihzdGF0ZS51aVN0YXRlKTtcblxuICBjb25zdCBpc1NwbGl0ID0gbmV3VmlzU3RhdGUuc3BsaXRNYXBzLmxlbmd0aCAhPT0gMDtcbiAgY29uc3QgaXNMZWdlbmRBY3RpdmUgPSBuZXdVaVN0YXRlLm1hcENvbnRyb2xzPy5tYXBMZWdlbmQ/LmFjdGl2ZTtcbiAgaWYgKGlzU3BsaXQgJiYgIWlzTGVnZW5kQWN0aXZlKSB7XG4gICAgbmV3VWlTdGF0ZSA9IHRvZ2dsZU1hcENvbnRyb2xVcGRhdGVyKG5ld1VpU3RhdGUsIHtcbiAgICAgIHBheWxvYWQ6IHtwYW5lbElkOiAnbWFwTGVnZW5kJywgaW5kZXg6IDB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIG1hcFN0YXRlOiBuZXdNYXBTdGF0ZSxcbiAgICB2aXNTdGF0ZTogbmV3VmlzU3RhdGUsXG4gICAgdWlTdGF0ZTogbmV3VWlTdGF0ZVxuICB9O1xufTtcblxuY29uc3QgZGVmYXVsdFJlcGxhY2VEYXRhVG9NYXBPcHRpb25zID0ge1xuICBrZWVwRXhpc3RpbmdDb25maWc6IHRydWUsXG4gIGNlbnRlck1hcDogdHJ1ZSxcbiAgYXV0b0NyZWF0ZUxheWVyczogZmFsc2Vcbn07XG5cbi8qKlxuICogVXBkYXRlciByZXBsYWNlIGEgZGF0YXNldCBpbiBzdGF0ZVxuICovXG5leHBvcnQgY29uc3QgcmVwbGFjZURhdGFJbk1hcFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBLZXBsZXJHbFN0YXRlLFxuICB7cGF5bG9hZH06IHtwYXlsb2FkOiBSZXBsYWNlRGF0YUluTWFwUGF5bG9hZH1cbik6IEtlcGxlckdsU3RhdGUgPT4ge1xuICBjb25zdCB7ZGF0YXNldFRvUmVwbGFjZUlkLCBkYXRhc2V0VG9Vc2UsIG9wdGlvbnMgPSB7fX0gPSBwYXlsb2FkO1xuICBjb25zdCB7ZGVsZXRlT3JpZ2luYWxEYXRhc2V0ID0gdHJ1ZSwgLi4ucmVwbGFjZU9wdGlvbnN9ID0gb3B0aW9ucztcbiAgY29uc3QgYWRkRGF0YVRvTWFwT3B0aW9ucyA9IHsuLi5kZWZhdWx0UmVwbGFjZURhdGFUb01hcE9wdGlvbnMsIC4uLnJlcGxhY2VPcHRpb25zfTtcblxuICAvLyBjaGVjayBpZiBkYXRhc2V0IGlzIHRoZXJlXG4gIGlmICghc3RhdGUudmlzU3RhdGUuZGF0YXNldHNbZGF0YXNldFRvUmVwbGFjZUlkXSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyBkYXRhc2V0VG9Vc2UgaXMgUHJvdG9EYXRhc2V0XG4gIGNvbnN0IGRhdGFJZFRvVXNlID0gZGF0YXNldFRvVXNlLmluZm8uaWQ7XG4gIGlmICghZGF0YUlkVG9Vc2UpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gcmVtb3ZlIGRhdGFzZXQgYW5kIHB1dCBkZXBlbmRlbmNpZXMgaW4gdG9CZU1lcmdlZFxuICBjb25zdCBwcmVwYXJlZFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIHZpc1N0YXRlOiBwcmVwYXJlU3RhdGVGb3JEYXRhc2V0UmVwbGFjZShzdGF0ZS52aXNTdGF0ZSwgZGF0YXNldFRvUmVwbGFjZUlkLCBkYXRhSWRUb1VzZSwge1xuICAgICAgZGVsZXRlT3JpZ2luYWxEYXRhc2V0XG4gICAgfSlcbiAgfTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSBhZGREYXRhVG9NYXBVcGRhdGVyKFxuICAgIHByZXBhcmVkU3RhdGUsXG4gICAgcGF5bG9hZF8oe1xuICAgICAgZGF0YXNldHM6IGRhdGFzZXRUb1VzZSxcbiAgICAgIC8vIHNob3VsZCB6b29tIHRvIG5ldyBkYXRhc2V0XG4gICAgICBvcHRpb25zOiBhZGREYXRhVG9NYXBPcHRpb25zXG4gICAgfSlcbiAgKTtcblxuICByZXR1cm4gbmV4dFN0YXRlO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLGdCQUFBLEdBQUFDLE9BQUE7QUFPQSxJQUFBQyxpQkFBQSxHQUFBRCxPQUFBO0FBT0EsSUFBQUUsaUJBQUEsR0FBQUYsT0FBQTtBQU1BLElBQUFHLGlCQUFBLEdBQUFILE9BQUE7QUFJQSxJQUFBSSxXQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxnQkFBQSxH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
@@ -9,14 +9,13 @@ exports["default"] = void 0;
9
9
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
10
  var _actions = require("@kepler.gl/actions");
11
11
  var combinedUpdaters = _interopRequireWildcard(require("./combined-updaters"));
12
- function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
13
- // SPDX-License-Identifier: MIT
12
+ var _actionHandler; // SPDX-License-Identifier: MIT
14
13
  // Copyright contributors to the kepler.gl project
15
-
14
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
16
15
  /**
17
16
  * Important: Do not rename `actionHandler` or the assignment pattern of property value.
18
17
  * It is used to generate documentation
19
18
  */
20
- var actionHandler = (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, _actions.ActionTypes.ADD_DATA_TO_MAP, combinedUpdaters.addDataToMapUpdater), _actions.ActionTypes.MAP_STYLE_CHANGE, combinedUpdaters.combinedMapStyleChangeUpdater), _actions.ActionTypes.SET_MAP_VIEW_MODE, combinedUpdaters.combinedSetMapViewModeUpdater), _actions.ActionTypes.LAYER_TYPE_CHANGE, combinedUpdaters.combinedLayerTypeChangeUpdater), _actions.ActionTypes.LOAD_FILES_SUCCESS, combinedUpdaters.loadFilesSuccessUpdater), _actions.ActionTypes.TOGGLE_SPLIT_MAP, combinedUpdaters.toggleSplitMapUpdater), _actions.ActionTypes.SET_MAP_SPLIT_MODE, combinedUpdaters.setMapSplitModeUpdater), _actions.ActionTypes.REPLACE_DATA_IN_MAP, combinedUpdaters.replaceDataInMapUpdater);
19
+ var actionHandler = (_actionHandler = {}, (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])(_actionHandler, _actions.ActionTypes.ADD_DATA_TO_MAP, combinedUpdaters.addDataToMapUpdater), _actions.ActionTypes.MAP_STYLE_CHANGE, combinedUpdaters.combinedMapStyleChangeUpdater), _actions.ActionTypes.SET_MAP_VIEW_MODE, combinedUpdaters.combinedSetMapViewModeUpdater), _actions.ActionTypes.LAYER_TYPE_CHANGE, combinedUpdaters.combinedLayerTypeChangeUpdater), _actions.ActionTypes.LOAD_FILES_SUCCESS, combinedUpdaters.loadFilesSuccessUpdater), _actions.ActionTypes.CONFIRM_REPLACE_DATASET, combinedUpdaters.confirmReplaceDatasetUpdater), _actions.ActionTypes.STAGE_LOADED_FILES, combinedUpdaters.stageLoadedFilesUpdater), _actions.ActionTypes.APPEND_STAGED_LOADED_FILES, combinedUpdaters.appendStagedLoadedFilesUpdater), _actions.ActionTypes.TOGGLE_SPLIT_MAP, combinedUpdaters.toggleSplitMapUpdater), _actions.ActionTypes.SET_MAP_SPLIT_MODE, combinedUpdaters.setMapSplitModeUpdater), (0, _defineProperty2["default"])(_actionHandler, _actions.ActionTypes.REPLACE_DATA_IN_MAP, combinedUpdaters.replaceDataInMapUpdater));
21
20
  var _default = exports["default"] = actionHandler;
22
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYWN0aW9ucyIsInJlcXVpcmUiLCJjb21iaW5lZFVwZGF0ZXJzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJfdHlwZW9mIiwiaGFzIiwiZ2V0Iiwic2V0IiwiX3QiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImFjdGlvbkhhbmRsZXIiLCJfZGVmaW5lUHJvcGVydHkyIiwiQWN0aW9uVHlwZXMiLCJBRERfREFUQV9UT19NQVAiLCJhZGREYXRhVG9NYXBVcGRhdGVyIiwiTUFQX1NUWUxFX0NIQU5HRSIsImNvbWJpbmVkTWFwU3R5bGVDaGFuZ2VVcGRhdGVyIiwiU0VUX01BUF9WSUVXX01PREUiLCJjb21iaW5lZFNldE1hcFZpZXdNb2RlVXBkYXRlciIsIkxBWUVSX1RZUEVfQ0hBTkdFIiwiY29tYmluZWRMYXllclR5cGVDaGFuZ2VVcGRhdGVyIiwiTE9BRF9GSUxFU19TVUNDRVNTIiwibG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXIiLCJUT0dHTEVfU1BMSVRfTUFQIiwidG9nZ2xlU3BsaXRNYXBVcGRhdGVyIiwiU0VUX01BUF9TUExJVF9NT0RFIiwic2V0TWFwU3BsaXRNb2RlVXBkYXRlciIsIlJFUExBQ0VfREFUQV9JTl9NQVAiLCJyZXBsYWNlRGF0YUluTWFwVXBkYXRlciIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb3NlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtBY3Rpb25UeXBlc30gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcbmltcG9ydCAqIGFzIGNvbWJpbmVkVXBkYXRlcnMgZnJvbSAnLi9jb21iaW5lZC11cGRhdGVycyc7XG5cbi8qKlxuICogSW1wb3J0YW50OiBEbyBub3QgcmVuYW1lIGBhY3Rpb25IYW5kbGVyYCBvciB0aGUgYXNzaWdubWVudCBwYXR0ZXJuIG9mIHByb3BlcnR5IHZhbHVlLlxuICogSXQgaXMgdXNlZCB0byBnZW5lcmF0ZSBkb2N1bWVudGF0aW9uXG4gKi9cbmNvbnN0IGFjdGlvbkhhbmRsZXIgPSB7XG4gIFtBY3Rpb25UeXBlcy5BRERfREFUQV9UT19NQVBdOiBjb21iaW5lZFVwZGF0ZXJzLmFkZERhdGFUb01hcFVwZGF0ZXIsXG4gIFtBY3Rpb25UeXBlcy5NQVBfU1RZTEVfQ0hBTkdFXTogY29tYmluZWRVcGRhdGVycy5jb21iaW5lZE1hcFN0eWxlQ2hhbmdlVXBkYXRlcixcbiAgW0FjdGlvblR5cGVzLlNFVF9NQVBfVklFV19NT0RFXTogY29tYmluZWRVcGRhdGVycy5jb21iaW5lZFNldE1hcFZpZXdNb2RlVXBkYXRlcixcbiAgW0FjdGlvblR5cGVzLkxBWUVSX1RZUEVfQ0hBTkdFXTogY29tYmluZWRVcGRhdGVycy5jb21iaW5lZExheWVyVHlwZUNoYW5nZVVwZGF0ZXIsXG4gIFtBY3Rpb25UeXBlcy5MT0FEX0ZJTEVTX1NVQ0NFU1NdOiBjb21iaW5lZFVwZGF0ZXJzLmxvYWRGaWxlc1N1Y2Nlc3NVcGRhdGVyLFxuICBbQWN0aW9uVHlwZXMuVE9HR0xFX1NQTElUX01BUF06IGNvbWJpbmVkVXBkYXRlcnMudG9nZ2xlU3BsaXRNYXBVcGRhdGVyLFxuICBbQWN0aW9uVHlwZXMuU0VUX01BUF9TUExJVF9NT0RFXTogY29tYmluZWRVcGRhdGVycy5zZXRNYXBTcGxpdE1vZGVVcGRhdGVyLFxuICBbQWN0aW9uVHlwZXMuUkVQTEFDRV9EQVRBX0lOX01BUF06IGNvbWJpbmVkVXBkYXRlcnMucmVwbGFjZURhdGFJbk1hcFVwZGF0ZXJcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGFjdGlvbkhhbmRsZXI7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
21
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYWN0aW9ucyIsInJlcXVpcmUiLCJjb21iaW5lZFVwZGF0ZXJzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfYWN0aW9uSGFuZGxlciIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJzZXQiLCJfdCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiYWN0aW9uSGFuZGxlciIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJBY3Rpb25UeXBlcyIsIkFERF9EQVRBX1RPX01BUCIsImFkZERhdGFUb01hcFVwZGF0ZXIiLCJNQVBfU1RZTEVfQ0hBTkdFIiwiY29tYmluZWRNYXBTdHlsZUNoYW5nZVVwZGF0ZXIiLCJTRVRfTUFQX1ZJRVdfTU9ERSIsImNvbWJpbmVkU2V0TWFwVmlld01vZGVVcGRhdGVyIiwiTEFZRVJfVFlQRV9DSEFOR0UiLCJjb21iaW5lZExheWVyVHlwZUNoYW5nZVVwZGF0ZXIiLCJMT0FEX0ZJTEVTX1NVQ0NFU1MiLCJsb2FkRmlsZXNTdWNjZXNzVXBkYXRlciIsIkNPTkZJUk1fUkVQTEFDRV9EQVRBU0VUIiwiY29uZmlybVJlcGxhY2VEYXRhc2V0VXBkYXRlciIsIlNUQUdFX0xPQURFRF9GSUxFUyIsInN0YWdlTG9hZGVkRmlsZXNVcGRhdGVyIiwiQVBQRU5EX1NUQUdFRF9MT0FERURfRklMRVMiLCJhcHBlbmRTdGFnZWRMb2FkZWRGaWxlc1VwZGF0ZXIiLCJUT0dHTEVfU1BMSVRfTUFQIiwidG9nZ2xlU3BsaXRNYXBVcGRhdGVyIiwiU0VUX01BUF9TUExJVF9NT0RFIiwic2V0TWFwU3BsaXRNb2RlVXBkYXRlciIsIlJFUExBQ0VfREFUQV9JTl9NQVAiLCJyZXBsYWNlRGF0YUluTWFwVXBkYXRlciIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb3NlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtBY3Rpb25UeXBlc30gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcbmltcG9ydCAqIGFzIGNvbWJpbmVkVXBkYXRlcnMgZnJvbSAnLi9jb21iaW5lZC11cGRhdGVycyc7XG5cbi8qKlxuICogSW1wb3J0YW50OiBEbyBub3QgcmVuYW1lIGBhY3Rpb25IYW5kbGVyYCBvciB0aGUgYXNzaWdubWVudCBwYXR0ZXJuIG9mIHByb3BlcnR5IHZhbHVlLlxuICogSXQgaXMgdXNlZCB0byBnZW5lcmF0ZSBkb2N1bWVudGF0aW9uXG4gKi9cbmNvbnN0IGFjdGlvbkhhbmRsZXIgPSB7XG4gIFtBY3Rpb25UeXBlcy5BRERfREFUQV9UT19NQVBdOiBjb21iaW5lZFVwZGF0ZXJzLmFkZERhdGFUb01hcFVwZGF0ZXIsXG4gIFtBY3Rpb25UeXBlcy5NQVBfU1RZTEVfQ0hBTkdFXTogY29tYmluZWRVcGRhdGVycy5jb21iaW5lZE1hcFN0eWxlQ2hhbmdlVXBkYXRlcixcbiAgW0FjdGlvblR5cGVzLlNFVF9NQVBfVklFV19NT0RFXTogY29tYmluZWRVcGRhdGVycy5jb21iaW5lZFNldE1hcFZpZXdNb2RlVXBkYXRlcixcbiAgW0FjdGlvblR5cGVzLkxBWUVSX1RZUEVfQ0hBTkdFXTogY29tYmluZWRVcGRhdGVycy5jb21iaW5lZExheWVyVHlwZUNoYW5nZVVwZGF0ZXIsXG4gIFtBY3Rpb25UeXBlcy5MT0FEX0ZJTEVTX1NVQ0NFU1NdOiBjb21iaW5lZFVwZGF0ZXJzLmxvYWRGaWxlc1N1Y2Nlc3NVcGRhdGVyLFxuICBbQWN0aW9uVHlwZXMuQ09ORklSTV9SRVBMQUNFX0RBVEFTRVRdOiBjb21iaW5lZFVwZGF0ZXJzLmNvbmZpcm1SZXBsYWNlRGF0YXNldFVwZGF0ZXIsXG4gIFtBY3Rpb25UeXBlcy5TVEFHRV9MT0FERURfRklMRVNdOiBjb21iaW5lZFVwZGF0ZXJzLnN0YWdlTG9hZGVkRmlsZXNVcGRhdGVyLFxuICBbQWN0aW9uVHlwZXMuQVBQRU5EX1NUQUdFRF9MT0FERURfRklMRVNdOiBjb21iaW5lZFVwZGF0ZXJzLmFwcGVuZFN0YWdlZExvYWRlZEZpbGVzVXBkYXRlcixcbiAgW0FjdGlvblR5cGVzLlRPR0dMRV9TUExJVF9NQVBdOiBjb21iaW5lZFVwZGF0ZXJzLnRvZ2dsZVNwbGl0TWFwVXBkYXRlcixcbiAgW0FjdGlvblR5cGVzLlNFVF9NQVBfU1BMSVRfTU9ERV06IGNvbWJpbmVkVXBkYXRlcnMuc2V0TWFwU3BsaXRNb2RlVXBkYXRlcixcbiAgW0FjdGlvblR5cGVzLlJFUExBQ0VfREFUQV9JTl9NQVBdOiBjb21iaW5lZFVwZGF0ZXJzLnJlcGxhY2VEYXRhSW5NYXBVcGRhdGVyXG59O1xuXG5leHBvcnQgZGVmYXVsdCBhY3Rpb25IYW5kbGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFHQSxJQUFBQSxRQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxnQkFBQSxHQUFBQyx1QkFBQSxDQUFBRixPQUFBO0FBQXdELElBQUFHLGNBQUEsRUFKeEQ7QUFDQTtBQUFBLFNBQUFELHdCQUFBRSxDQUFBLEVBQUFDLENBQUEsNkJBQUFDLE9BQUEsTUFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBSix1QkFBQSxZQUFBQSx3QkFBQUUsQ0FBQSxFQUFBQyxDQUFBLFNBQUFBLENBQUEsSUFBQUQsQ0FBQSxJQUFBQSxDQUFBLENBQUFLLFVBQUEsU0FBQUwsQ0FBQSxNQUFBTSxDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSxLQUFBQyxTQUFBLG1CQUFBVCxDQUFBLGlCQUFBQSxDQUFBLGdCQUFBVSxPQUFBLENBQUFWLENBQUEsMEJBQUFBLENBQUEsU0FBQVEsQ0FBQSxNQUFBRixDQUFBLEdBQUFMLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLFFBQUFHLENBQUEsQ0FBQUssR0FBQSxDQUFBWCxDQUFBLFVBQUFNLENBQUEsQ0FBQU0sR0FBQSxDQUFBWixDQUFBLEdBQUFNLENBQUEsQ0FBQU8sR0FBQSxDQUFBYixDQUFBLEVBQUFRLENBQUEsY0FBQU0sRUFBQSxJQUFBZCxDQUFBLGdCQUFBYyxFQUFBLE9BQUFDLGNBQUEsQ0FBQUMsSUFBQSxDQUFBaEIsQ0FBQSxFQUFBYyxFQUFBLE9BQUFQLENBQUEsSUFBQUQsQ0FBQSxHQUFBVyxNQUFBLENBQUFDLGNBQUEsS0FBQUQsTUFBQSxDQUFBRSx3QkFBQSxDQUFBbkIsQ0FBQSxFQUFBYyxFQUFBLE9BQUFQLENBQUEsQ0FBQUssR0FBQSxJQUFBTCxDQUFBLENBQUFNLEdBQUEsSUFBQVAsQ0FBQSxDQUFBRSxDQUFBLEVBQUFNLEVBQUEsRUFBQVAsQ0FBQSxJQUFBQyxDQUFBLENBQUFNLEVBQUEsSUFBQWQsQ0FBQSxDQUFBYyxFQUFBLFdBQUFOLENBQUEsS0FBQVIsQ0FBQSxFQUFBQyxDQUFBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFNbUIsYUFBYSxJQUFBckIsY0FBQSxXQUFBc0IsZ0JBQUEsaUJBQUFBLGdCQUFBLGlCQUFBQSxnQkFBQSxpQkFBQUEsZ0JBQUEsaUJBQUFBLGdCQUFBLGlCQUFBQSxnQkFBQSxpQkFBQUEsZ0JBQUEsaUJBQUFBLGdCQUFBLGlCQUFBQSxnQkFBQSxpQkFBQUEsZ0JBQUEsYUFBQXRCLGNBQUEsRUFDaEJ1QixvQkFBVyxDQUFDQyxlQUFlLEVBQUcxQixnQkFBZ0IsQ0FBQzJCLG1CQUFtQixHQUNsRUYsb0JBQVcsQ0FBQ0csZ0JBQWdCLEVBQUc1QixnQkFBZ0IsQ0FBQzZCLDZCQUE2QixHQUM3RUosb0JBQVcsQ0FBQ0ssaUJBQWlCLEVBQUc5QixnQkFBZ0IsQ0FBQytCLDZCQUE2QixHQUM5RU4sb0JBQVcsQ0FBQ08saUJBQWlCLEVBQUdoQyxnQkFBZ0IsQ0FBQ2lDLDhCQUE4QixHQUMvRVIsb0JBQVcsQ0FBQ1Msa0JBQWtCLEVBQUdsQyxnQkFBZ0IsQ0FBQ21DLHVCQUF1QixHQUN6RVYsb0JBQVcsQ0FBQ1csdUJBQXVCLEVBQUdwQyxnQkFBZ0IsQ0FBQ3FDLDRCQUE0QixHQUNuRlosb0JBQVcsQ0FBQ2Esa0JBQWtCLEVBQUd0QyxnQkFBZ0IsQ0FBQ3VDLHVCQUF1QixHQUN6RWQsb0JBQVcsQ0FBQ2UsMEJBQTBCLEVBQUd4QyxnQkFBZ0IsQ0FBQ3lDLDhCQUE4QixHQUN4RmhCLG9CQUFXLENBQUNpQixnQkFBZ0IsRUFBRzFDLGdCQUFnQixDQUFDMkMscUJBQXFCLEdBQ3JFbEIsb0JBQVcsQ0FBQ21CLGtCQUFrQixFQUFHNUMsZ0JBQWdCLENBQUM2QyxzQkFBc0IsT0FBQXJCLGdCQUFBLGFBQUF0QixjQUFBLEVBQ3hFdUIsb0JBQVcsQ0FBQ3FCLG1CQUFtQixFQUFHOUMsZ0JBQWdCLENBQUMrQyx1QkFBdUIsRUFDNUU7QUFBQyxJQUFBQyxRQUFBLEdBQUFDLE9BQUEsY0FFYTFCLGFBQWEiLCJpZ25vcmVMaXN0IjpbXX0=