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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/dist/cjs/column-edit-reconcile.js +100 -0
  2. package/dist/cjs/column-edit-updaters.spec.js +840 -0
  3. package/dist/cjs/combined-updaters.js +166 -8
  4. package/dist/cjs/composers.js +4 -5
  5. package/dist/cjs/dataset-ops-updaters.js +375 -0
  6. package/dist/cjs/dataset-ops-updaters.spec.js +382 -0
  7. package/dist/cjs/export-utils.js +118 -46
  8. package/dist/cjs/interaction-utils.js +166 -6
  9. package/dist/cjs/layer-utils.js +135 -9
  10. package/dist/cjs/ui-state-updaters.js +134 -51
  11. package/dist/cjs/ui-state.js +2 -2
  12. package/dist/cjs/vis-state-merger-text-label.spec.js +75 -0
  13. package/dist/cjs/vis-state-merger.js +99 -25
  14. package/dist/cjs/vis-state-selectors.js +5 -4
  15. package/dist/cjs/vis-state-updaters.js +1077 -256
  16. package/dist/cjs/vis-state.js +2 -2
  17. package/dist/column-edit-reconcile.d.ts +4 -0
  18. package/dist/column-edit-updaters.spec.d.ts +1 -0
  19. package/dist/combined-updaters.d.ts +21 -1
  20. package/dist/composers.d.ts +3 -0
  21. package/dist/dataset-ops-updaters.d.ts +21 -0
  22. package/dist/dataset-ops-updaters.spec.d.ts +1 -0
  23. package/dist/esm/column-edit-reconcile.js +95 -0
  24. package/dist/esm/column-edit-updaters.spec.js +839 -0
  25. package/dist/esm/combined-updaters.js +166 -8
  26. package/dist/esm/composers.js +3 -2
  27. package/dist/esm/dataset-ops-updaters.js +357 -0
  28. package/dist/esm/dataset-ops-updaters.spec.js +381 -0
  29. package/dist/esm/export-utils.js +117 -45
  30. package/dist/esm/interaction-utils.js +159 -3
  31. package/dist/esm/layer-utils.js +133 -9
  32. package/dist/esm/ui-state-updaters.js +133 -50
  33. package/dist/esm/ui-state.js +2 -2
  34. package/dist/esm/vis-state-merger-text-label.spec.js +74 -0
  35. package/dist/esm/vis-state-merger.js +99 -26
  36. package/dist/esm/vis-state-selectors.js +5 -4
  37. package/dist/esm/vis-state-updaters.js +1020 -263
  38. package/dist/esm/vis-state.js +2 -2
  39. package/dist/export-utils.d.ts +2 -2
  40. package/dist/interaction-utils.d.ts +25 -2
  41. package/dist/layer-utils.d.ts +17 -0
  42. package/dist/ui-state-updaters.d.ts +30 -0
  43. package/dist/vis-state-merger-text-label.spec.d.ts +1 -0
  44. package/dist/vis-state-merger.d.ts +10 -2
  45. package/dist/vis-state-updaters.d.ts +61 -15
  46. package/dist/vis-state.d.ts +20 -0
  47. package/package.json +17 -17
@@ -1,5 +1,6 @@
1
1
  import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
2
2
  import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
3
+ import _typeof from "@babel/runtime/helpers/esm/typeof";
3
4
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
4
5
  function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
5
6
  function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
@@ -14,6 +15,7 @@ import { GEOCODER_LAYER_ID, LIGHT_AND_SHADOW_EFFECT } from '@kepler.gl/constants
14
15
  import { OVERLAY_TYPE_CONST, getEditorLayer } from '@kepler.gl/layers';
15
16
  import { isFunction, getMapLayersFromSplitMaps, DataRow, isPlainObject } from '@kepler.gl/utils';
16
17
  import { arrayMove, generateHashId } from '@kepler.gl/common-utils';
18
+ import { getLayerZoomOpacityFactor } from './interaction-utils';
17
19
  import { ThreeDBuildingLayer } from '@kepler.gl/deckgl-layers';
18
20
  /**
19
21
  * Find default layers from fields
@@ -167,12 +169,74 @@ export function getLayerHoverProp(_ref) {
167
169
  fields: fields,
168
170
  fieldsToShow: fieldsToShow,
169
171
  layer: layer,
170
- currentTime: animationConfig.currentTime
172
+ currentTime: animationConfig.currentTime,
173
+ timezone: interactionConfig.tooltip.config.timezone
171
174
  };
172
175
  }
173
176
  }
174
177
  return null;
175
178
  }
179
+ var ZOOM_OPACITY_PROP_KEYS = ['opacity', 'lineOpacity', 'strokeOpacity'];
180
+
181
+ /** Stroke and outline props replace the parent opacity, so they need the same factor. */
182
+ function scaleZoomOpacitySubLayerProps(subLayerProps, factor) {
183
+ if (!subLayerProps) {
184
+ return undefined;
185
+ }
186
+ var changed = false;
187
+ var next = {};
188
+ for (var _i = 0, _Object$keys = Object.keys(subLayerProps); _i < _Object$keys.length; _i++) {
189
+ var id = _Object$keys[_i];
190
+ var sublayer = subLayerProps[id];
191
+ if (!sublayer || _typeof(sublayer) !== 'object') {
192
+ next[id] = sublayer;
193
+ continue;
194
+ }
195
+ var scaled = _objectSpread({}, sublayer);
196
+ var sublayerChanged = false;
197
+ var _iterator = _createForOfIteratorHelper(ZOOM_OPACITY_PROP_KEYS),
198
+ _step;
199
+ try {
200
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
201
+ var key = _step.value;
202
+ if (typeof sublayer[key] === 'number') {
203
+ scaled[key] = sublayer[key] * factor;
204
+ sublayerChanged = true;
205
+ }
206
+ }
207
+ } catch (err) {
208
+ _iterator.e(err);
209
+ } finally {
210
+ _iterator.f();
211
+ }
212
+ next[id] = sublayerChanged ? scaled : sublayer;
213
+ if (sublayerChanged) {
214
+ changed = true;
215
+ }
216
+ }
217
+ return changed ? next : undefined;
218
+ }
219
+ function applyZoomOpacityToDeckLayer(deckLayer, factor) {
220
+ var _deckLayer$props, _deckLayer$props2, _deckLayer$props3;
221
+ if (Array.isArray(deckLayer)) {
222
+ return deckLayer.map(function (layer) {
223
+ return applyZoomOpacityToDeckLayer(layer, factor);
224
+ });
225
+ }
226
+ if (!deckLayer || factor === 1 || typeof deckLayer.clone !== 'function') {
227
+ return deckLayer;
228
+ }
229
+ var baseOpacity = (_deckLayer$props = deckLayer.props) === null || _deckLayer$props === void 0 ? void 0 : _deckLayer$props.opacity;
230
+ var opacity = (typeof baseOpacity === 'number' ? baseOpacity : 1) * factor;
231
+ var subLayerProps = scaleZoomOpacitySubLayerProps((_deckLayer$props2 = deckLayer.props) === null || _deckLayer$props2 === void 0 ? void 0 : _deckLayer$props2._subLayerProps, factor);
232
+ return deckLayer.clone(_objectSpread({
233
+ opacity: opacity,
234
+ // Fully faded layers are not pickable.
235
+ visible: ((_deckLayer$props3 = deckLayer.props) === null || _deckLayer$props3 === void 0 ? void 0 : _deckLayer$props3.visible) !== false && factor > 0
236
+ }, subLayerProps ? {
237
+ _subLayerProps: subLayerProps
238
+ } : {}));
239
+ }
176
240
  export function renderDeckGlLayer(props, layerCallbacks) {
177
241
  var datasets = props.datasets,
178
242
  layer = props.layer,
@@ -193,7 +257,7 @@ export function renderDeckGlLayer(props, layerCallbacks) {
193
257
  // instead of leaking undefined into deck.gl's visible prop
194
258
  var visible = !mapLayers || Boolean(mapLayers[layer.id]);
195
259
  // Layer is Layer class
196
- return layer.renderLayer({
260
+ var rendered = layer.renderLayer({
197
261
  data: data,
198
262
  gpuFilter: gpuFilter,
199
263
  idx: layerIndex,
@@ -206,6 +270,8 @@ export function renderDeckGlLayer(props, layerCallbacks) {
206
270
  dataset: dataset,
207
271
  experimentalContext: experimentalContext
208
272
  });
273
+ var factor = getLayerZoomOpacityFactor(layer.id, mapState === null || mapState === void 0 ? void 0 : mapState.zoom, interactionConfig);
274
+ return applyZoomOpacityToDeckLayer(rendered, factor);
209
275
  }
210
276
  export function isLayerRenderable(layer, layerData) {
211
277
  return layer.id !== GEOCODER_LAYER_ID && layer.shouldRenderLayer(layerData);
@@ -464,16 +530,74 @@ export function getLayerGroupFromLayerOrder(layerOrder, layerGroupId) {
464
530
  return group;
465
531
  }
466
532
 
533
+ /**
534
+ * Groups that contain `entryId`, nearest parent first.
535
+ * `entryId` may be a layer id or a nested group id.
536
+ */
537
+ export function getAncestorLayerGroups(layerOrder, entryId) {
538
+ var ancestors = [];
539
+ var _visit = function visit(entries) {
540
+ var _iterator2 = _createForOfIteratorHelper(entries),
541
+ _step2;
542
+ try {
543
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
544
+ var entry = _step2.value;
545
+ if (typeof entry === 'string') {
546
+ if (entry === entryId) {
547
+ return true;
548
+ }
549
+ continue;
550
+ }
551
+ if (!isPlainObject(entry)) {
552
+ continue;
553
+ }
554
+ var group = entry;
555
+ if (group.id === entryId) {
556
+ return true;
557
+ }
558
+ if (_visit(group.layerOrder)) {
559
+ ancestors.push(group);
560
+ return true;
561
+ }
562
+ }
563
+ } catch (err) {
564
+ _iterator2.e(err);
565
+ } finally {
566
+ _iterator2.f();
567
+ }
568
+ return false;
569
+ };
570
+ _visit(layerOrder);
571
+ return ancestors;
572
+ }
573
+
574
+ /**
575
+ * Whether a layer should be drawn in the map legend.
576
+ * A layer stays on the map when this is false. Missing flags count as included.
577
+ * An ancestor group with `isIncludedInLegend: false` hides the layer as well.
578
+ */
579
+ export function isLayerShownInLegend(layer, layerOrder) {
580
+ if (layer.config.isIncludedInLegend === false) {
581
+ return false;
582
+ }
583
+ if (!(layerOrder !== null && layerOrder !== void 0 && layerOrder.length)) {
584
+ return true;
585
+ }
586
+ return getAncestorLayerGroups(layerOrder, layer.id).every(function (group) {
587
+ return group.isIncludedInLegend !== false;
588
+ });
589
+ }
590
+
467
591
  /**
468
592
  * Find the parent group that contains a given layer ID.
469
593
  * Returns undefined if the layer is at the root level.
470
594
  */
471
595
  export function findParentGroupForLayer(layerOrder, layerId) {
472
- var _iterator = _createForOfIteratorHelper(layerOrder),
473
- _step;
596
+ var _iterator3 = _createForOfIteratorHelper(layerOrder),
597
+ _step3;
474
598
  try {
475
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
476
- var entry = _step.value;
599
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
600
+ var entry = _step3.value;
477
601
  if (isPlainObject(entry)) {
478
602
  var group = entry;
479
603
  if (group.layerOrder.some(function (e) {
@@ -486,9 +610,9 @@ export function findParentGroupForLayer(layerOrder, layerId) {
486
610
  }
487
611
  }
488
612
  } catch (err) {
489
- _iterator.e(err);
613
+ _iterator3.e(err);
490
614
  } finally {
491
- _iterator.f();
615
+ _iterator3.f();
492
616
  }
493
617
  return undefined;
494
618
  }
@@ -607,4 +731,4 @@ export function areAnyDeckLayersLoading(layers) {
607
731
  return layer.internalState && !layer.isLoaded;
608
732
  });
609
733
  }
610
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb25zb2xlIiwiR0VPQ09ERVJfTEFZRVJfSUQiLCJMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCIsIk9WRVJMQVlfVFlQRV9DT05TVCIsImdldEVkaXRvckxheWVyIiwiaXNGdW5jdGlvbiIsImdldE1hcExheWVyc0Zyb21TcGxpdE1hcHMiLCJEYXRhUm93IiwiaXNQbGFpbk9iamVjdCIsImFycmF5TW92ZSIsImdlbmVyYXRlSGFzaElkIiwiVGhyZWVEQnVpbGRpbmdMYXllciIsImZpbmREZWZhdWx0TGF5ZXIiLCJkYXRhc2V0IiwibGF5ZXJDbGFzc2VzIiwibGF5ZXJQcm9wcyIsIk9iamVjdCIsImtleXMiLCJyZWR1Y2UiLCJwcmV2aW91cyIsImxjIiwicmVzdWx0IiwiZmluZERlZmF1bHRMYXllclByb3BzIiwicHJvcHMiLCJBcnJheSIsImlzQXJyYXkiLCJmb3VuZExheWVycyIsImNvbmNhdCIsIm1hcCIsInAiLCJfb2JqZWN0U3ByZWFkIiwidHlwZSIsImRhdGFJZCIsImlkIiwiaXNWaXNpYmxlIiwibGF5ZXIiLCJzZXRJbml0aWFsTGF5ZXJDb25maWciLCJkYXRhQ29udGFpbmVyIiwibWVyZ2VMYXllclZpc0NvbmZpZ0Zvck5ld0RhdGFzZXRzIiwic3RhdGUiLCJwYXRjaCIsImRhdGFzZXRJZHNUb1BhdGNoIiwibGVuZ3RoIiwiaGFzRGVmaW5lZFBhdGNoVmFsdWUiLCJzb21lIiwia2V5IiwidW5kZWZpbmVkIiwiZGF0YXNldElkU2V0IiwiU2V0IiwibGF5ZXJzIiwiY29uZmlnIiwiaGFzIiwic2V0dGluZ3MiLCJ2aXNDb25maWdTZXR0aW5ncyIsImFsbG93ZWRLZXlzIiwiZmlsdGVyIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwicGFydGlhbCIsImFjYyIsInVwZGF0ZUxheWVyVmlzQ29uZmlnIiwiY2FsY3VsYXRlTGF5ZXJEYXRhIiwib2xkTGF5ZXJEYXRhIiwibGF5ZXJEYXRhIiwiaXNWYWxpZCIsIl9vbGREYXRhVXBkYXRlVHJpZ2dlcnMiLCJoYXNBbGxDb2x1bW5zIiwiZm9ybWF0TGF5ZXJEYXRhIiwiZGF0YXNldHMiLCJ1cGRhdGVMYXllckNvbmZpZyIsImVycm9yTWVzc2FnZSIsImVyciIsImVycm9yIiwiRXJyb3IiLCJtZXNzYWdlIiwic3Vic3RyaW5nIiwiZ2V0TGF5ZXJIb3ZlclByb3AiLCJfcmVmIiwiYW5pbWF0aW9uQ29uZmlnIiwiaW50ZXJhY3Rpb25Db25maWciLCJob3ZlckluZm8iLCJsYXllcnNUb1JlbmRlciIsInRvb2x0aXAiLCJlbmFibGVkIiwicGlja2VkIiwib2JqZWN0Iiwib3ZlcmxheSIsImlkeCIsImluZGV4IiwiZ2V0SG92ZXJEYXRhIiwiX2RhdGFzZXRzJGRhdGFJZCIsImZpZWxkcyIsImRhdGEiLCJmaWVsZHNUb1Nob3ciLCJjdXJyZW50VGltZSIsInJlbmRlckRlY2tHbExheWVyIiwibGF5ZXJDYWxsYmFja3MiLCJsYXllckluZGV4IiwiY2xpY2tlZCIsIm1hcFN0YXRlIiwibWFwTGF5ZXJzIiwiZXhwZXJpbWVudGFsQ29udGV4dCIsIl9yZWYyIiwiZ3B1RmlsdGVyIiwib2JqZWN0SG92ZXJlZCIsInZpc2libGUiLCJCb29sZWFuIiwicmVuZGVyTGF5ZXIiLCJpc0xheWVyUmVuZGVyYWJsZSIsInNob3VsZFJlbmRlckxheWVyIiwiaXNMYXllclZpc2libGUiLCJwcmVwYXJlTGF5ZXJzRm9yRGVjayIsImFjY3UiLCJfZGVmaW5lUHJvcGVydHkiLCJvdmVybGF5VHlwZSIsImRlY2tnbCIsInByZXBhcmVMYXllcnNUb1JlbmRlciIsImdldEN1c3RvbURlY2tMYXllcnMiLCJkZWNrR2xQcm9wcyIsImJvdHRvbURlY2tMYXllcnMiLCJ0b3BEZWNrTGF5ZXJzIiwidG9wTGF5ZXJzIiwiYmluZExheWVyQ2FsbGJhY2tzIiwiYXJndW1lbnRzIiwidmFsIiwiY29tcHV0ZURlY2tMYXllcnNGcm9tTGF5ZXJPcmRlciIsImxheWVyT3JkZXIiLCJjdXJyZW50TGF5ZXJzRm9yRGVjayIsInJlbmRlclByb3BzIiwiaGFzU2hhZG93RWZmZWN0IiwiaXNBbm5vdGF0aW9uTW9kZSIsInNsaWNlIiwicmV2ZXJzZSIsIm92ZXJsYXlzIiwiZWxlbWVudCIsImxheWVyR3JvdXAiLCJsYXllcklkIiwiZmluZEluZGV4IiwiX3JlZjMiLCJiaW5kZWRMYXllckNhbGxiYWNrcyIsImxheWVyT3ZlcmxheSIsImNvbXB1dGVEZWNrTGF5ZXJzIiwiX3JlZjQiLCJvcHRpb25zIiwidmlzU3RhdGUiLCJtYXBTdHlsZSIsImVmZmVjdHMiLCJzcGxpdE1hcHMiLCJfcmVmNSIsIm1hcEluZGV4IiwibWFwYm94QXBpQWNjZXNzVG9rZW4iLCJtYXBib3hBcGlVcmwiLCJwcmltYXJ5TWFwIiwibGF5ZXJzRm9yRGVjayIsImVkaXRvckluZm8iLCJkYXRhTGF5ZXJzIiwiZWZmZWN0IiwiX3JlZjYiLCJ2aXNpYmxlTGF5ZXJHcm91cHMiLCJwdXNoIiwidGhyZWVEQnVpbGRpbmdDb2xvciIsInBpY2thYmxlIiwidXBkYXRlVHJpZ2dlcnMiLCJnZXRGaWxsQ29sb3IiLCJfZ2V0Q3VzdG9tRGVja0xheWVycyIsIl9nZXRDdXN0b21EZWNrTGF5ZXJzMiIsIl9zbGljZWRUb0FycmF5IiwiY3VzdG9tQm90dG9tRGVja0xheWVycyIsImN1c3RvbVRvcERlY2tMYXllcnMiLCJlZGl0b3JMYXllciIsIl90b0NvbnN1bWFibGVBcnJheSIsImdldExheWVyT3JkZXJGcm9tTGF5ZXJzIiwiX3JlZjciLCJnZXROZXdMYXllckdyb3VwIiwiX3Byb3BzJGlkIiwiX3Byb3BzJGxhYmVsIiwiX3Byb3BzJGlzVmlzaWJsZSIsIl9wcm9wcyRsYXllck9yZGVyIiwiX3Byb3BzJGlzSW5jbHVkZWRJbkxlIiwibGFiZWwiLCJpc0luY2x1ZGVkSW5MZWdlbmQiLCJhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIiLCJhdEluZGV4Iiwic3BsaWNlIiwicmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyIiwiZWxlbWVudElkIiwibmV3TGF5ZXJPcmRlciIsImVudHJ5IiwiZ3JvdXAiLCJnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIiLCJsYXllckdyb3VwSWQiLCJpIiwiZ3JwIiwiZmluZFBhcmVudEdyb3VwRm9yTGF5ZXIiLCJfaXRlcmF0b3IiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIl9zdGVwIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJlIiwibmVzdGVkIiwiZiIsImdldEluZGV4RnJvbUxheWVyRW50cnlJZCIsImxheWVyRW50cnlJZCIsImlzTGF5ZXJQcmVzZW50SW5MYXllck9yZGVyIiwiZm91bmQiLCJyZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlciIsIm9sZEVudHJ5IiwibmV3RW50cnkiLCJvbGRFbnRyeUlkIiwidXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlciIsIm5ld0xheWVyR3JvdXAiLCJnZXRGbGF0TGF5ZXJPcmRlciIsIm9yZGVyRW50cnkiLCJidWlsZExheWVyT3JkZXJIaWVyYXJjaHkiLCJ2YWxpZExheWVycyIsImZpbmQiLCJsIiwiaGlkZGVuIiwicmVtb3ZlR2hvc3RMYXllckZyb21MYXllck9yZGVyIiwicmVvcmRlckxheWVyT3JkZXIiLCJvcmlnaW5MYXllcklkIiwiZGVzdGluYXRpb25MYXllcklkIiwiYWN0aXZlSW5kZXgiLCJvdmVySW5kZXgiLCJhZGRMYXllclRvTGF5ZXJPcmRlciIsImdldExheWVySG92ZXJQcm9wVmFsdWUiLCJmaWVsZEluZGV4IiwidmFsdWVBdCIsImFyZUFueURlY2tMYXllcnNMb2FkaW5nIiwiaW50ZXJuYWxTdGF0ZSIsImlzTG9hZGVkIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xheWVyLXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBDb25zb2xlIGZyb20gJ2dsb2JhbC9jb25zb2xlJztcblxuaW1wb3J0IHtHRU9DT0RFUl9MQVlFUl9JRCwgTElHSFRfQU5EX1NIQURPV19FRkZFQ1R9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7TGF5ZXIgYXMgRGVja0xheWVyfSBmcm9tICdAZGVjay5nbC9jb3JlJztcbnR5cGUgRGVja0xheWVyUHJvcHMgPSBhbnk7XG5pbXBvcnQge1xuICBGaWVsZCxcbiAgTGF5ZXJWaXNDb25maWcsXG4gIFRvb2x0aXBGaWVsZCxcbiAgQ29tcGFyZVR5cGUsXG4gIFNwbGl0TWFwTGF5ZXJzLFxuICBFZGl0b3IsXG4gIEZlYXR1cmUsXG4gIEZlYXR1cmVTZWxlY3Rpb25Db250ZXh0LFxuICBCaW5kZWRMYXllckNhbGxiYWNrcyxcbiAgTGF5ZXJDYWxsYmFja3MsXG4gIFZpZXdwb3J0LFxuICBMYXllck9yZGVyR3JvdXAsXG4gIExheWVyT3JkZXIsXG4gIExheWVyT3JkZXJFbnRyeSxcbiAgRmxhdExheWVyT3JkZXIsXG4gIExheWVyT3JkZXJIaWVyYXJjaHlcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge1xuICBGaW5kRGVmYXVsdExheWVyUHJvcHNSZXR1cm5WYWx1ZSxcbiAgRmluZERlZmF1bHRMYXllclByb3BzLFxuICBMYXllcixcbiAgTGF5ZXJDbGFzc2VzVHlwZSxcbiAgT1ZFUkxBWV9UWVBFX0NPTlNULFxuICBnZXRFZGl0b3JMYXllclxufSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5cbmltcG9ydCBLZXBsZXJUYWJsZSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCB7VmlzU3RhdGV9IGZyb20gJ0BrZXBsZXIuZ2wvc2NoZW1hcyc7XG5pbXBvcnQge2lzRnVuY3Rpb24sIGdldE1hcExheWVyc0Zyb21TcGxpdE1hcHMsIERhdGFSb3csIGlzUGxhaW5PYmplY3R9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHthcnJheU1vdmUsIGdlbmVyYXRlSGFzaElkfSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG5cbmltcG9ydCB7VGhyZWVEQnVpbGRpbmdMYXllcn0gZnJvbSAnQGtlcGxlci5nbC9kZWNrZ2wtbGF5ZXJzJztcblxuZXhwb3J0IHR5cGUgTGF5ZXJzVG9SZW5kZXIgPSB7XG4gIFtsYXllcklkOiBzdHJpbmddOiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQWdncmVnYXRpb25MYXllckhvdmVyRGF0YSA9IHtcbiAgcG9pbnRzOiBhbnlbXTtcbiAgY29sb3JWYWx1ZT86IGFueTtcbiAgZWxldmF0aW9uVmFsdWU/OiBhbnk7XG4gIGFnZ3JlZ2F0ZWREYXRhPzogUmVjb3JkPFxuICAgIHN0cmluZyxcbiAgICB7XG4gICAgICBtZWFzdXJlOiBzdHJpbmc7XG4gICAgICB2YWx1ZT86IGFueTtcbiAgICB9XG4gID47XG59O1xuXG5leHBvcnQgdHlwZSBMYXllckhvdmVyUHJvcCA9IHtcbiAgZGF0YTogRGF0YVJvdyB8IEFnZ3JlZ2F0aW9uTGF5ZXJIb3ZlckRhdGEgfCBhbnlbXSB8IG51bGw7XG4gIGZpZWxkczogRmllbGRbXTtcbiAgZmllbGRzVG9TaG93OiBUb29sdGlwRmllbGRbXTtcbiAgbGF5ZXI6IExheWVyO1xuICBwcmltYXJ5RGF0YT86IERhdGFSb3cgfCBBZ2dyZWdhdGlvbkxheWVySG92ZXJEYXRhIHwgYW55W10gfCBudWxsO1xuICBjb21wYXJlVHlwZT86IENvbXBhcmVUeXBlO1xuICBjdXJyZW50VGltZT86IFZpc1N0YXRlWydhbmltYXRpb25Db25maWcnXVsnY3VycmVudFRpbWUnXTtcbn07XG5cbi8qKlxuICogRmluZCBkZWZhdWx0IGxheWVycyBmcm9tIGZpZWxkc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZERlZmF1bHRMYXllcihkYXRhc2V0OiBLZXBsZXJUYWJsZSwgbGF5ZXJDbGFzc2VzOiBMYXllckNsYXNzZXNUeXBlKTogTGF5ZXJbXSB7XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IGxheWVyUHJvcHMgPSAoT2JqZWN0LmtleXMobGF5ZXJDbGFzc2VzKSBhcyBBcnJheTxrZXlvZiBMYXllckNsYXNzZXNUeXBlPikucmVkdWNlKFxuICAgIChwcmV2aW91cywgbGMpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdDogRmluZERlZmF1bHRMYXllclByb3BzUmV0dXJuVmFsdWUgPVxuICAgICAgICB0eXBlb2YgbGF5ZXJDbGFzc2VzW2xjXS5maW5kRGVmYXVsdExheWVyUHJvcHMgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICA/IGxheWVyQ2xhc3Nlc1tsY10uZmluZERlZmF1bHRMYXllclByb3BzKGRhdGFzZXQsIHByZXZpb3VzKVxuICAgICAgICAgIDoge3Byb3BzOiBbXX07XG5cbiAgICAgIGNvbnN0IHByb3BzID0gQXJyYXkuaXNBcnJheShyZXN1bHQpID8gcmVzdWx0IDogcmVzdWx0LnByb3BzIHx8IFtdO1xuICAgICAgY29uc3QgZm91bmRMYXllcnMgPSByZXN1bHQuZm91bmRMYXllcnMgfHwgcHJldmlvdXM7XG5cbiAgICAgIHJldHVybiBmb3VuZExheWVycy5jb25jYXQoXG4gICAgICAgIHByb3BzLm1hcChwID0+ICh7XG4gICAgICAgICAgLi4ucCxcbiAgICAgICAgICB0eXBlOiBsYyxcbiAgICAgICAgICBkYXRhSWQ6IGRhdGFzZXQuaWQsXG4gICAgICAgICAgLy8gc2V0IGFyYyBsYXllciBpbml0aWFsIHZpc2libGl0eSB0byBmYWxzZSwgYmVjYXVzZSBhcmNzIHRlbmQgdG8gYmUgdG9vIG11c3lcbiAgICAgICAgICAuLi4obGMgPT09ICdhcmMnIHx8IGxjID09PSAnbGluZScgPyB7aXNWaXNpYmxlOiBmYWxzZX0gOiB7fSlcbiAgICAgICAgfSkpXG4gICAgICApO1xuICAgIH0sXG4gICAgW10gYXMgKEZpbmREZWZhdWx0TGF5ZXJQcm9wcyAmIHt0eXBlOiBzdHJpbmd9KVtdXG4gICk7XG5cbiAgLy8gZ28gdGhyb3VnaCBhbGwgbGF5ZXJQcm9wcyB0byBjcmVhdGUgbGF5ZXJcbiAgcmV0dXJuIGxheWVyUHJvcHMubWFwKHByb3BzID0+IHtcbiAgICBjb25zdCBsYXllciA9IG5ldyBsYXllckNsYXNzZXNbcHJvcHMudHlwZV0ocHJvcHMpO1xuICAgIHJldHVybiB0eXBlb2YgbGF5ZXIuc2V0SW5pdGlhbExheWVyQ29uZmlnID09PSAnZnVuY3Rpb24nICYmIGRhdGFzZXQuZGF0YUNvbnRhaW5lclxuICAgICAgPyBsYXllci5zZXRJbml0aWFsTGF5ZXJDb25maWcoZGF0YXNldClcbiAgICAgIDogbGF5ZXI7XG4gIH0pO1xufVxuXG4vKipcbiAqIEFwcGxpZXMgYHBhdGNoYCB0byBgY29uZmlnLnZpc0NvbmZpZ2Agb25seSBmb3IgbGF5ZXJzIHdob3NlIGBkYXRhSWRgIGlzIGluIGBkYXRhc2V0SWRzVG9QYXRjaGAuXG4gKiBMYXllcnMgZm9yIGRhdGFzZXRzIHRoYXQgd2VyZSBhbHJlYWR5IG9uIHRoZSBtYXAgYXJlIGxlZnQgdW5jaGFuZ2VkIOKAlCBgYWRkRGF0YVRvTWFwYFxuICogS2V5cyB3aG9zZSBwYXRjaCB2YWx1ZSBpcyBgdW5kZWZpbmVkYCBhcmUgc2tpcHBlZCBzbyBleGlzdGluZyB2aXNDb25maWcgaXMgbm90IGNsZWFyZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUxheWVyVmlzQ29uZmlnRm9yTmV3RGF0YXNldHMoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgcGF0Y2g6IFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+IHwgdW5kZWZpbmVkLFxuICBkYXRhc2V0SWRzVG9QYXRjaDogc3RyaW5nW11cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFwYXRjaCB8fCAhT2JqZWN0LmtleXMocGF0Y2gpLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGhhc0RlZmluZWRQYXRjaFZhbHVlID0gKE9iamVjdC5rZXlzKHBhdGNoKSBhcyBBcnJheTxrZXlvZiBMYXllclZpc0NvbmZpZz4pLnNvbWUoXG4gICAga2V5ID0+IHBhdGNoW2tleV0gIT09IHVuZGVmaW5lZFxuICApO1xuICBpZiAoIWhhc0RlZmluZWRQYXRjaFZhbHVlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZGF0YXNldElkU2V0ID0gbmV3IFNldChkYXRhc2V0SWRzVG9QYXRjaCk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN0YXRlLmxheWVycy5tYXAobGF5ZXIgPT4ge1xuICAgICAgaWYgKCFsYXllci5jb25maWcuZGF0YUlkIHx8ICFkYXRhc2V0SWRTZXQuaGFzKGxheWVyLmNvbmZpZy5kYXRhSWQpKSB7XG4gICAgICAgIHJldHVybiBsYXllcjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNldHRpbmdzID0gbGF5ZXIudmlzQ29uZmlnU2V0dGluZ3M7XG4gICAgICBpZiAoIXNldHRpbmdzKSB7XG4gICAgICAgIHJldHVybiBsYXllcjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFsbG93ZWRLZXlzID0gKE9iamVjdC5rZXlzKHBhdGNoKSBhcyBBcnJheTxrZXlvZiBMYXllclZpc0NvbmZpZz4pLmZpbHRlcihcbiAgICAgICAga2V5ID0+IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzZXR0aW5ncywga2V5KSAmJiBwYXRjaFtrZXldICE9PSB1bmRlZmluZWRcbiAgICAgICk7XG4gICAgICBpZiAoIWFsbG93ZWRLZXlzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gbGF5ZXI7XG4gICAgICB9XG4gICAgICBjb25zdCBwYXJ0aWFsID0gYWxsb3dlZEtleXMucmVkdWNlPFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+PigoYWNjLCBrZXkpID0+IHtcbiAgICAgICAgYWNjW2tleV0gPSBwYXRjaFtrZXldO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge30pO1xuICAgICAgcmV0dXJuIGxheWVyLnVwZGF0ZUxheWVyVmlzQ29uZmlnKHBhcnRpYWwpO1xuICAgIH0pXG4gIH07XG59XG5cbnR5cGUgTWluVmlzU3RhdGVGb3JMYXllckRhdGEgPSB7XG4gIGRhdGFzZXRzOiBWaXNTdGF0ZVsnZGF0YXNldHMnXTtcbiAgYW5pbWF0aW9uQ29uZmlnOiBWaXNTdGF0ZVsnYW5pbWF0aW9uQ29uZmlnJ107XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZSBsYXllciBkYXRhIGJhc2VkIG9uIGxheWVyIHR5cGUsIGNvbCBDb25maWcsXG4gKiByZXR1cm4gdXBkYXRlZCBsYXllciBpZiBjb2xvckRvbWFpbiwgZGF0YU1hcCBoYXMgY2hhbmdlZC5cbiAqIEFsc28sIHJldHVybnMgdXBkYXRlZCBsYXllciBpbiBjYXNlIHRoZSBpbnB1dCBsYXllciB3YXMgaW4gaW52YWxpZCBzdGF0ZS5cbiAqIEFkZHMgYW4gZXJyb3IgbWVzc2FnZSB0byB0aGUgbGF5ZXIgaW4gY2FzZSBvZiBhbiBleGNlcHRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVMYXllckRhdGE8UyBleHRlbmRzIE1pblZpc1N0YXRlRm9yTGF5ZXJEYXRhPihcbiAgbGF5ZXI6IExheWVyLFxuICBzdGF0ZTogUyxcbiAgb2xkTGF5ZXJEYXRhPzogYW55XG4pOiB7XG4gIGxheWVyRGF0YTogYW55O1xuICBsYXllcjogTGF5ZXI7XG59IHtcbiAgbGV0IGxheWVyRGF0YTtcbiAgdHJ5IHtcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyIHVwZGF0ZXMgZGF0YSBhZnRlciBhbiBlcnJvclxuICAgIGlmICghbGF5ZXIuaXNWYWxpZCkge1xuICAgICAgbGF5ZXIuX29sZERhdGFVcGRhdGVUcmlnZ2VycyA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoIWxheWVyLnR5cGUgfHwgIWxheWVyLmhhc0FsbENvbHVtbnMoKSB8fCAhbGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgICAgcmV0dXJuIHtsYXllciwgbGF5ZXJEYXRhOiB7fX07XG4gICAgfVxuXG4gICAgbGF5ZXJEYXRhID0gbGF5ZXIuZm9ybWF0TGF5ZXJEYXRhKHN0YXRlLmRhdGFzZXRzLCBvbGRMYXllckRhdGEpO1xuXG4gICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgZGF0YSBmb3IgdGhlIGxheWVyIGlzIHVwZGF0ZWQgd2l0aG91dCBlcnJvcnNcbiAgICBpZiAoIWxheWVyLmlzVmFsaWQpIHtcbiAgICAgIC8vIFN3aXRjaCB0byB2aXNpYmxlIGFmdGVyIGFuIGVycm9yXG4gICAgICBsYXllciA9IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgaXNWaXNpYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gICAgbGF5ZXIuaXNWYWxpZCA9IHRydWU7XG4gICAgbGF5ZXIuZXJyb3JNZXNzYWdlID0gbnVsbDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgQ29uc29sZS5lcnJvcihlcnIpO1xuICAgIGxheWVyID0gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgaXNWaXNpYmxlOiBmYWxzZVxuICAgIH0pO1xuICAgIGxheWVyLmlzVmFsaWQgPSBmYWxzZTtcblxuICAgIGxheWVyLmVycm9yTWVzc2FnZSA9XG4gICAgICBlcnIgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnIubWVzc2FnZSA/IGVyci5tZXNzYWdlLnN1YnN0cmluZygwLCAxMDApIDogJ1Vua25vd24gZXJyb3InO1xuXG4gICAgbGF5ZXJEYXRhID0ge307XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxheWVyLFxuICAgIGxheWVyRGF0YVxuICB9O1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZSBwcm9wcyBwYXNzZWQgdG8gTGF5ZXJIb3ZlckluZm9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExheWVySG92ZXJQcm9wKHtcbiAgYW5pbWF0aW9uQ29uZmlnLFxuICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgaG92ZXJJbmZvLFxuICBsYXllcnMsXG4gIGxheWVyc1RvUmVuZGVyLFxuICBkYXRhc2V0c1xufToge1xuICBpbnRlcmFjdGlvbkNvbmZpZzogVmlzU3RhdGVbJ2ludGVyYWN0aW9uQ29uZmlnJ107XG4gIGFuaW1hdGlvbkNvbmZpZzogVmlzU3RhdGVbJ2FuaW1hdGlvbkNvbmZpZyddO1xuICBob3ZlckluZm86IFZpc1N0YXRlWydob3ZlckluZm8nXTtcbiAgbGF5ZXJzOiBWaXNTdGF0ZVsnbGF5ZXJzJ107XG4gIGxheWVyc1RvUmVuZGVyOiBMYXllcnNUb1JlbmRlcjtcbiAgZGF0YXNldHM6IFZpc1N0YXRlWydkYXRhc2V0cyddO1xufSk6IExheWVySG92ZXJQcm9wIHwgbnVsbCB7XG4gIGlmIChpbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmVuYWJsZWQgJiYgaG92ZXJJbmZvICYmIGhvdmVySW5mby5waWNrZWQpIHtcbiAgICAvLyBpZiBhbnl0aGluZyBob3ZlcmVkXG4gICAgY29uc3Qge29iamVjdCwgbGF5ZXI6IG92ZXJsYXl9ID0gaG92ZXJJbmZvO1xuXG4gICAgLy8gZGVja2dsIGxheWVyIHRvIGtlcGxlci1nbCBsYXllclxuICAgIGNvbnN0IGxheWVyID0gbGF5ZXJzW292ZXJsYXkucHJvcHMuaWR4XTtcblxuICAgIC8vIE5PVEU6IGZvciBiaW5hcnkgZm9ybWF0IEdlb2pzb25MYXllciwgZGVjayB3aWxsIHJldHVybiBvYmplY3Q9bnVsbCBidXQgaG92ZXJJbmZvLmluZGV4ID49IDBcbiAgICBpZiAoXG4gICAgICAob2JqZWN0IHx8IGhvdmVySW5mby5pbmRleCA+PSAwKSAmJlxuICAgICAgbGF5ZXIgJiZcbiAgICAgIGxheWVyLmdldEhvdmVyRGF0YSAmJlxuICAgICAgbGF5ZXJzVG9SZW5kZXJbbGF5ZXIuaWRdXG4gICAgKSB7XG4gICAgICAvLyBpZiBsYXllciBpcyB2aXNpYmxlIGFuZCBoYXZlIGhvdmVyZWQgZGF0YVxuICAgICAgY29uc3Qge1xuICAgICAgICBjb25maWc6IHtkYXRhSWR9XG4gICAgICB9ID0gbGF5ZXI7XG4gICAgICBpZiAoIWRhdGFJZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHtkYXRhQ29udGFpbmVyLCBmaWVsZHN9ID0gZGF0YXNldHNbZGF0YUlkXTtcbiAgICAgIGNvbnN0IGRhdGE6IERhdGFSb3cgfCBudWxsID0gbGF5ZXIuZ2V0SG92ZXJEYXRhKFxuICAgICAgICBvYmplY3QgfHwgaG92ZXJJbmZvLmluZGV4LFxuICAgICAgICBkYXRhQ29udGFpbmVyLFxuICAgICAgICBmaWVsZHMsXG4gICAgICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgaG92ZXJJbmZvXG4gICAgICApO1xuICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgZmllbGRzVG9TaG93ID0gaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGEsXG4gICAgICAgIGZpZWxkcyxcbiAgICAgICAgZmllbGRzVG9TaG93LFxuICAgICAgICBsYXllcixcbiAgICAgICAgY3VycmVudFRpbWU6IGFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckRlY2tHbExheWVyKHByb3BzOiBhbnksIGxheWVyQ2FsbGJhY2tzOiB7W2tleTogc3RyaW5nXTogYW55fSkge1xuICBjb25zdCB7XG4gICAgZGF0YXNldHMsXG4gICAgbGF5ZXIsXG4gICAgbGF5ZXJJbmRleCxcbiAgICBkYXRhLFxuICAgIGhvdmVySW5mbyxcbiAgICBjbGlja2VkLFxuICAgIG1hcFN0YXRlLFxuICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICBtYXBMYXllcnMsXG4gICAgZXhwZXJpbWVudGFsQ29udGV4dFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tsYXllci5jb25maWcuZGF0YUlkXTtcbiAgY29uc3Qge2dwdUZpbHRlcn0gPSBkYXRhc2V0IHx8IHt9O1xuICBjb25zdCBvYmplY3RIb3ZlcmVkID0gY2xpY2tlZCB8fCBob3ZlckluZm87XG4gIC8vIGluIHNwbGl0IG1vZGUgYSBsYXllciBtaXNzaW5nIGZyb20gbWFwTGF5ZXJzIGlzIGhpZGRlbiwgc28gY29lcmNlIHRvIGEgYm9vbGVhblxuICAvLyBpbnN0ZWFkIG9mIGxlYWtpbmcgdW5kZWZpbmVkIGludG8gZGVjay5nbCdzIHZpc2libGUgcHJvcFxuICBjb25zdCB2aXNpYmxlID0gIW1hcExheWVycyB8fCBCb29sZWFuKG1hcExheWVyc1tsYXllci5pZF0pO1xuICAvLyBMYXllciBpcyBMYXllciBjbGFzc1xuICByZXR1cm4gbGF5ZXIucmVuZGVyTGF5ZXIoe1xuICAgIGRhdGEsXG4gICAgZ3B1RmlsdGVyLFxuICAgIGlkeDogbGF5ZXJJbmRleCxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICBsYXllckNhbGxiYWNrcyxcbiAgICBtYXBTdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWcsXG4gICAgb2JqZWN0SG92ZXJlZCxcbiAgICB2aXNpYmxlLFxuICAgIGRhdGFzZXQsXG4gICAgZXhwZXJpbWVudGFsQ29udGV4dFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGF5ZXJSZW5kZXJhYmxlKGxheWVyOiBMYXllciwgbGF5ZXJEYXRhKSB7XG4gIHJldHVybiBsYXllci5pZCAhPT0gR0VPQ09ERVJfTEFZRVJfSUQgJiYgbGF5ZXIuc2hvdWxkUmVuZGVyTGF5ZXIobGF5ZXJEYXRhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGF5ZXJWaXNpYmxlKGxheWVyLCBtYXBMYXllcnMpIHtcbiAgcmV0dXJuIChcbiAgICBsYXllci5jb25maWcuaXNWaXNpYmxlICYmXG4gICAgLy8gaWYgbGF5ZXIuaWQgaXMgbm90IGluIG1hcExheWVycywgZG9uJ3QgcmVuZGVyIGl0XG4gICAgKCFtYXBMYXllcnMgfHwgKG1hcExheWVycyAmJiBtYXBMYXllcnNbbGF5ZXIuaWRdKSlcbiAgKTtcbn1cblxuLy8gUHJlcGFyZSBhIGRpY3Qgb2YgbGF5ZXJzIHJlbmRlcmVkIGJ5IHRoZSBkZWNrLmdsXG4vLyBOb3RlLCBpc1Zpc2libGU6IGZhbHNlIGxheWVyIGlzIHBhc3NlZCB0byBkZWNrLmdsIGhlcmVcbi8vIHJldHVybiB7W2lkXTogdHJ1ZSBcXCBmYWxzZX1cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlTGF5ZXJzRm9yRGVjayhcbiAgbGF5ZXJzOiBMYXllcltdLFxuICBsYXllckRhdGE6IFZpc1N0YXRlWydsYXllckRhdGEnXVxuKToge1xuICBba2V5OiBzdHJpbmddOiBib29sZWFuO1xufSB7XG4gIHJldHVybiBsYXllcnMucmVkdWNlKFxuICAgIChhY2N1LCBsYXllciwgaWR4KSA9PiAoe1xuICAgICAgLi4uYWNjdSxcbiAgICAgIFtsYXllci5pZF06XG4gICAgICAgIGlzTGF5ZXJSZW5kZXJhYmxlKGxheWVyLCBsYXllckRhdGFbaWR4XSkgJiYgbGF5ZXIub3ZlcmxheVR5cGUgPT09IE9WRVJMQVlfVFlQRV9DT05TVC5kZWNrZ2xcbiAgICB9KSxcbiAgICB7fVxuICApO1xufVxuXG4vLyBQcmVwYXJlIGEgZGljdCBvZiByZW5kZXJlZCBsYXllcnMgcmVuZGVyZWQgaW4gdGhlIG1hcFxuLy8gVGhpcyBpbmNsdWRlcyBvbmx5IHRoZSB2aXNpYmlsZSBsYXllcnMgZm9yIHNpbmdsZSBtYXAgdmlldyBhbmQgc3BsaXQgbWFwIHZpZXdcbi8vIHJldHVybiB7W2lkXTogdHJ1ZSBcXCBmYWxzZX1cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlTGF5ZXJzVG9SZW5kZXIoXG4gIGxheWVyczogTGF5ZXJbXSxcbiAgbGF5ZXJEYXRhOiBWaXNTdGF0ZVsnbGF5ZXJEYXRhJ10sXG4gIG1hcExheWVycz86IFNwbGl0TWFwTGF5ZXJzIHwgdW5kZWZpbmVkIHwgbnVsbFxuKTogTGF5ZXJzVG9SZW5kZXIge1xuICByZXR1cm4gbGF5ZXJzLnJlZHVjZShcbiAgICAoYWNjdSwgbGF5ZXIsIGlkeCkgPT4gKHtcbiAgICAgIC4uLmFjY3UsXG4gICAgICBbbGF5ZXIuaWRdOiBpc0xheWVyUmVuZGVyYWJsZShsYXllciwgbGF5ZXJEYXRhW2lkeF0pICYmIGlzTGF5ZXJWaXNpYmxlKGxheWVyLCBtYXBMYXllcnMpXG4gICAgfSksXG4gICAge31cbiAgKTtcbn1cblxudHlwZSBDdXN0b21EZWNrTGF5ZXIgPSBEZWNrTGF5ZXI8RGVja0xheWVyUHJvcHM+O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VzdG9tRGVja0xheWVycyhkZWNrR2xQcm9wcz86IGFueSk6IFtDdXN0b21EZWNrTGF5ZXJbXSwgQ3VzdG9tRGVja0xheWVyW11dIHtcbiAgY29uc3QgYm90dG9tRGVja0xheWVycyA9IEFycmF5LmlzQXJyYXkoZGVja0dsUHJvcHM/LmxheWVycylcbiAgICA/IGRlY2tHbFByb3BzPy5sYXllcnNcbiAgICA6IGlzRnVuY3Rpb24oZGVja0dsUHJvcHM/LmxheWVycylcbiAgICA/IGRlY2tHbFByb3BzPy5sYXllcnMoKVxuICAgIDogW107XG4gIGNvbnN0IHRvcERlY2tMYXllcnMgPSBBcnJheS5pc0FycmF5KGRlY2tHbFByb3BzPy50b3BMYXllcnMpXG4gICAgPyBkZWNrR2xQcm9wcz8udG9wTGF5ZXJzXG4gICAgOiBpc0Z1bmN0aW9uKGRlY2tHbFByb3BzPy50b3BMYXllcnMpXG4gICAgPyBkZWNrR2xQcm9wcz8udG9wTGF5ZXJzKClcbiAgICA6IFtdO1xuXG4gIHJldHVybiBbYm90dG9tRGVja0xheWVycywgdG9wRGVja0xheWVyc107XG59XG5cbmV4cG9ydCB0eXBlIENvbXB1dGVEZWNrTGF5ZXJzUHJvcHMgPSB7XG4gIG1hcEluZGV4PzogbnVtYmVyO1xuICBtYXBib3hBcGlBY2Nlc3NUb2tlbj86IHN0cmluZztcbiAgbWFwYm94QXBpVXJsPzogc3RyaW5nO1xuICBwcmltYXJ5TWFwPzogYm9vbGVhbjtcbiAgaXNBbm5vdGF0aW9uTW9kZT86IGJvb2xlYW47XG4gIGxheWVyc0ZvckRlY2s/OiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn07XG4gIGVkaXRvckluZm8/OiB7XG4gICAgZWRpdG9yOiBFZGl0b3I7XG4gICAgZWRpdG9yTWVudUFjdGl2ZTogYm9vbGVhbjtcbiAgICBvblNldEZlYXR1cmVzOiAoZmVhdHVyZXM6IEZlYXR1cmVbXSkgPT4gYW55O1xuICAgIHNldFNlbGVjdGVkRmVhdHVyZTogKFxuICAgICAgZmVhdHVyZTogRmVhdHVyZSB8IG51bGwsXG4gICAgICBzZWxlY3Rpb25Db250ZXh0PzogRmVhdHVyZVNlbGVjdGlvbkNvbnRleHRcbiAgICApID0+IGFueTtcbiAgICBvbkFwcGx5UG9seWdvbkZpbHRlckFsbD86IChmZWF0dXJlOiBGZWF0dXJlKSA9PiBhbnk7XG4gICAgZmVhdHVyZUNvbGxlY3Rpb246IHtcbiAgICAgIHR5cGU6IHN0cmluZztcbiAgICAgIGZlYXR1cmVzOiBGZWF0dXJlW107XG4gICAgfTtcbiAgICBzZWxlY3RlZEZlYXR1cmVJbmRleGVzOiBudW1iZXJbXTtcbiAgICB2aWV3cG9ydDogVmlld3BvcnQ7XG4gIH07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gYmluZExheWVyQ2FsbGJhY2tzKFxuICBsYXllckNhbGxiYWNrczogTGF5ZXJDYWxsYmFja3MgPSB7fSxcbiAgaWR4OiBudW1iZXJcbik6IEJpbmRlZExheWVyQ2FsbGJhY2tzIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGxheWVyQ2FsbGJhY2tzKS5yZWR1Y2UoXG4gICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgIC4uLmFjY3UsXG4gICAgICBba2V5XTogdmFsID0+IGxheWVyQ2FsbGJhY2tzW2tleV0oaWR4LCB2YWwpXG4gICAgfSksXG4gICAge30gYXMgUmVjb3JkPHN0cmluZywgKHZhbDogdW5rbm93bikgPT4gdm9pZD5cbiAgKTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZURlY2tMYXllcnNGcm9tTGF5ZXJPcmRlcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgbGF5ZXJzOiBMYXllcltdLFxuICBsYXllckRhdGE6IGFueVtdLFxuICBjdXJyZW50TGF5ZXJzRm9yRGVjazoge1trZXk6IHN0cmluZ106IGJvb2xlYW59LFxuICByZW5kZXJQcm9wczoge1xuICAgIGRhdGFzZXRzOiBhbnk7XG4gICAgaG92ZXJJbmZvOiBhbnk7XG4gICAgY2xpY2tlZDogYW55O1xuICAgIG1hcFN0YXRlOiBhbnk7XG4gICAgaW50ZXJhY3Rpb25Db25maWc6IGFueTtcbiAgICBhbmltYXRpb25Db25maWc6IGFueTtcbiAgICBtYXBMYXllcnM6IGFueTtcbiAgICBoYXNTaGFkb3dFZmZlY3Q6IGJvb2xlYW47XG4gICAgaXNBbm5vdGF0aW9uTW9kZT86IGJvb2xlYW47XG4gIH0sXG4gIGxheWVyQ2FsbGJhY2tzPzogYW55XG4pOiBhbnlbXSB7XG4gIGNvbnN0IHtcbiAgICBkYXRhc2V0cyxcbiAgICBob3ZlckluZm8sXG4gICAgY2xpY2tlZCxcbiAgICBtYXBTdGF0ZSxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICBhbmltYXRpb25Db25maWcsXG4gICAgbWFwTGF5ZXJzLFxuICAgIGhhc1NoYWRvd0VmZmVjdCxcbiAgICBpc0Fubm90YXRpb25Nb2RlXG4gIH0gPSByZW5kZXJQcm9wcztcbiAgcmV0dXJuIGxheWVyT3JkZXJcbiAgICAuc2xpY2UoKVxuICAgIC5yZXZlcnNlKClcbiAgICAucmVkdWNlKChvdmVybGF5cywgZWxlbWVudCkgPT4ge1xuICAgICAgaWYgKGlzUGxhaW5PYmplY3QoZWxlbWVudCkpIHtcbiAgICAgICAgY29uc3QgbGF5ZXJHcm91cCA9IGVsZW1lbnQgYXMgTGF5ZXJPcmRlckdyb3VwO1xuICAgICAgICBpZiAoIWxheWVyR3JvdXAuaXNWaXNpYmxlKSB7XG4gICAgICAgICAgcmV0dXJuIG92ZXJsYXlzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdmVybGF5cy5jb25jYXQoXG4gICAgICAgICAgY29tcHV0ZURlY2tMYXllcnNGcm9tTGF5ZXJPcmRlcihcbiAgICAgICAgICAgIGxheWVyR3JvdXAubGF5ZXJPcmRlcixcbiAgICAgICAgICAgIGxheWVycyxcbiAgICAgICAgICAgIGxheWVyRGF0YSxcbiAgICAgICAgICAgIGN1cnJlbnRMYXllcnNGb3JEZWNrLFxuICAgICAgICAgICAgcmVuZGVyUHJvcHMsXG4gICAgICAgICAgICBsYXllckNhbGxiYWNrc1xuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxheWVySWQgPSBlbGVtZW50IGFzIHN0cmluZztcbiAgICAgIGlmICghY3VycmVudExheWVyc0ZvckRlY2tbbGF5ZXJJZF0pIHtcbiAgICAgICAgcmV0dXJuIG92ZXJsYXlzO1xuICAgICAgfVxuICAgICAgY29uc3QgbGF5ZXJJbmRleCA9IGxheWVycy5maW5kSW5kZXgoKHtpZH0pID0+IGlkID09PSBsYXllcklkKTtcbiAgICAgIGlmIChsYXllckluZGV4ID09PSAtMSkge1xuICAgICAgICByZXR1cm4gb3ZlcmxheXM7XG4gICAgICB9XG4gICAgICBjb25zdCBiaW5kZWRMYXllckNhbGxiYWNrcyA9IGxheWVyQ2FsbGJhY2tzXG4gICAgICAgID8gYmluZExheWVyQ2FsbGJhY2tzKGxheWVyQ2FsbGJhY2tzLCBsYXllckluZGV4KVxuICAgICAgICA6IHt9O1xuICAgICAgY29uc3QgbGF5ZXIgPSBsYXllcnNbbGF5ZXJJbmRleF07XG4gICAgICBjb25zdCBkYXRhID0gbGF5ZXJEYXRhW2xheWVySW5kZXhdO1xuICAgICAgY29uc3QgbGF5ZXJPdmVybGF5ID0gcmVuZGVyRGVja0dsTGF5ZXIoXG4gICAgICAgIHtcbiAgICAgICAgICBkYXRhc2V0cyxcbiAgICAgICAgICBsYXllcixcbiAgICAgICAgICBsYXllckluZGV4LFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgaG92ZXJJbmZvLFxuICAgICAgICAgIGNsaWNrZWQsXG4gICAgICAgICAgbWFwU3RhdGUsXG4gICAgICAgICAgaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICAgICAgYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICAgIG1hcExheWVycyxcbiAgICAgICAgICBleHBlcmltZW50YWxDb250ZXh0OiB7XG4gICAgICAgICAgICBoYXNTaGFkb3dFZmZlY3QsXG4gICAgICAgICAgICBpc0Fubm90YXRpb25Nb2RlXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBiaW5kZWRMYXllckNhbGxiYWNrc1xuICAgICAgKTtcbiAgICAgIHJldHVybiBvdmVybGF5cy5jb25jYXQobGF5ZXJPdmVybGF5IHx8IFtdKTtcbiAgICB9LCBbXSBhcyBhbnlbXSk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZURlY2tMYXllcnMoXG4gIHt2aXNTdGF0ZSwgbWFwU3RhdGUsIG1hcFN0eWxlfTogYW55LFxuICBvcHRpb25zPzogQ29tcHV0ZURlY2tMYXllcnNQcm9wcyxcbiAgbGF5ZXJDYWxsYmFja3M/OiBMYXllckNhbGxiYWNrcyxcbiAgZGVja0dsUHJvcHM/OiBhbnlcbik6IExheWVyW10ge1xuICBjb25zdCB7XG4gICAgZGF0YXNldHMsXG4gICAgZWZmZWN0cyxcbiAgICBsYXllcnMsXG4gICAgbGF5ZXJPcmRlcixcbiAgICBsYXllckRhdGEsXG4gICAgaG92ZXJJbmZvLFxuICAgIGNsaWNrZWQsXG4gICAgaW50ZXJhY3Rpb25Db25maWcsXG4gICAgYW5pbWF0aW9uQ29uZmlnLFxuICAgIHNwbGl0TWFwc1xuICB9ID0gdmlzU3RhdGU7XG5cbiAgY29uc3Qge1xuICAgIG1hcEluZGV4LFxuICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICAgIG1hcGJveEFwaVVybCxcbiAgICBwcmltYXJ5TWFwLFxuICAgIGxheWVyc0ZvckRlY2ssXG4gICAgZWRpdG9ySW5mbyxcbiAgICBpc0Fubm90YXRpb25Nb2RlXG4gIH0gPSBvcHRpb25zIHx8IHt9O1xuXG4gIGxldCBkYXRhTGF5ZXJzOiBhbnlbXSA9IFtdO1xuXG4gIGNvbnN0IGhhc1NoYWRvd0VmZmVjdCA9IGVmZmVjdHMuc29tZShlZmZlY3QgPT4ge1xuICAgIHJldHVybiBlZmZlY3QudHlwZSA9PT0gTElHSFRfQU5EX1NIQURPV19FRkZFQ1QudHlwZTtcbiAgfSk7XG5cbiAgaWYgKGxheWVyRGF0YSAmJiBsYXllckRhdGEubGVuZ3RoKSB7XG4gICAgY29uc3QgbWFwTGF5ZXJzID0gZ2V0TWFwTGF5ZXJzRnJvbVNwbGl0TWFwcyhzcGxpdE1hcHMsIG1hcEluZGV4IHx8IDApO1xuXG4gICAgY29uc3QgY3VycmVudExheWVyc0ZvckRlY2sgPSBsYXllcnNGb3JEZWNrIHx8IHByZXBhcmVMYXllcnNGb3JEZWNrKGxheWVycywgbGF5ZXJEYXRhKTtcblxuICAgIGRhdGFMYXllcnMgPSBsYXllck9yZGVyXG4gICAgICAuc2xpY2UoKVxuICAgICAgLnJldmVyc2UoKVxuICAgICAgLnJlZHVjZSgob3ZlcmxheXMsIGVsZW1lbnQpID0+IHtcbiAgICAgICAgaWYgKGlzUGxhaW5PYmplY3QoZWxlbWVudCkpIHtcbiAgICAgICAgICBjb25zdCBsYXllckdyb3VwID0gZWxlbWVudCBhcyBMYXllck9yZGVyR3JvdXA7XG4gICAgICAgICAgaWYgKCFsYXllckdyb3VwLmlzVmlzaWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIG92ZXJsYXlzO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gb3ZlcmxheXMuY29uY2F0KFxuICAgICAgICAgICAgY29tcHV0ZURlY2tMYXllcnNGcm9tTGF5ZXJPcmRlcihcbiAgICAgICAgICAgICAgbGF5ZXJHcm91cC5sYXllck9yZGVyLFxuICAgICAgICAgICAgICBsYXllcnMsXG4gICAgICAgICAgICAgIGxheWVyRGF0YSxcbiAgICAgICAgICAgICAgY3VycmVudExheWVyc0ZvckRlY2ssXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkYXRhc2V0cyxcbiAgICAgICAgICAgICAgICBob3ZlckluZm8sXG4gICAgICAgICAgICAgICAgY2xpY2tlZCxcbiAgICAgICAgICAgICAgICBtYXBTdGF0ZSxcbiAgICAgICAgICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgICAgICAgICAgICBhbmltYXRpb25Db25maWcsXG4gICAgICAgICAgICAgICAgbWFwTGF5ZXJzLFxuICAgICAgICAgICAgICAgIGhhc1NoYWRvd0VmZmVjdCxcbiAgICAgICAgICAgICAgICBpc0Fubm90YXRpb25Nb2RlXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGxheWVyQ2FsbGJhY2tzXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsYXllcklkID0gZWxlbWVudCBhcyBzdHJpbmc7XG4gICAgICAgIGlmICghY3VycmVudExheWVyc0ZvckRlY2tbbGF5ZXJJZF0pIHtcbiAgICAgICAgICByZXR1cm4gb3ZlcmxheXM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGF5ZXJJbmRleCA9IGxheWVycy5maW5kSW5kZXgoKHtpZH0pID0+IGlkID09PSBsYXllcklkKTtcbiAgICAgICAgaWYgKGxheWVySW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgcmV0dXJuIG92ZXJsYXlzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJpbmRlZExheWVyQ2FsbGJhY2tzID0gbGF5ZXJDYWxsYmFja3NcbiAgICAgICAgICA/IGJpbmRMYXllckNhbGxiYWNrcyhsYXllckNhbGxiYWNrcywgbGF5ZXJJbmRleClcbiAgICAgICAgICA6IHt9O1xuICAgICAgICBjb25zdCBsYXllciA9IGxheWVyc1tsYXllckluZGV4XTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGxheWVyRGF0YVtsYXllckluZGV4XTtcbiAgICAgICAgY29uc3QgbGF5ZXJPdmVybGF5ID0gcmVuZGVyRGVja0dsTGF5ZXIoXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGF0YXNldHMsXG4gICAgICAgICAgICBsYXllcixcbiAgICAgICAgICAgIGxheWVySW5kZXgsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgaG92ZXJJbmZvLFxuICAgICAgICAgICAgY2xpY2tlZCxcbiAgICAgICAgICAgIG1hcFN0YXRlLFxuICAgICAgICAgICAgaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICAgICAgICBhbmltYXRpb25Db25maWcsXG4gICAgICAgICAgICBtYXBMYXllcnMsXG4gICAgICAgICAgICBleHBlcmltZW50YWxDb250ZXh0OiB7XG4gICAgICAgICAgICAgIGhhc1NoYWRvd0VmZmVjdCxcbiAgICAgICAgICAgICAgaXNBbm5vdGF0aW9uTW9kZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgYmluZGVkTGF5ZXJDYWxsYmFja3NcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIG92ZXJsYXlzLmNvbmNhdChsYXllck92ZXJsYXkgfHwgW10pO1xuICAgICAgfSwgW10pO1xuICB9XG5cbiAgaWYgKCFwcmltYXJ5TWFwKSB7XG4gICAgcmV0dXJuIGRhdGFMYXllcnM7XG4gIH1cblxuICBpZiAoXG4gICAgbWFwU3R5bGU/LnZpc2libGVMYXllckdyb3Vwc1snM2QgYnVpbGRpbmcnXSAmJlxuICAgIHByaW1hcnlNYXAgJiZcbiAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbiAmJlxuICAgIG1hcGJveEFwaVVybFxuICApIHtcbiAgICBkYXRhTGF5ZXJzLnB1c2goXG4gICAgICBuZXcgVGhyZWVEQnVpbGRpbmdMYXllcih7XG4gICAgICAgIGlkOiAnX2tlcGxlcmdsXzNkLWJ1aWxkaW5nJyxcbiAgICAgICAgbWFwYm94QXBpQWNjZXNzVG9rZW4sXG4gICAgICAgIG1hcGJveEFwaVVybCxcbiAgICAgICAgdGhyZWVEQnVpbGRpbmdDb2xvcjogbWFwU3R5bGUudGhyZWVEQnVpbGRpbmdDb2xvcixcbiAgICAgICAgcGlja2FibGU6IEJvb2xlYW4oaXNBbm5vdGF0aW9uTW9kZSksXG4gICAgICAgIHVwZGF0ZVRyaWdnZXJzOiB7XG4gICAgICAgICAgZ2V0RmlsbENvbG9yOiBtYXBTdHlsZS50aHJlZURCdWlsZGluZ0NvbG9yXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IFtjdXN0b21Cb3R0b21EZWNrTGF5ZXJzLCBjdXN0b21Ub3BEZWNrTGF5ZXJzXSA9IGdldEN1c3RvbURlY2tMYXllcnMoZGVja0dsUHJvcHMpO1xuXG4gIGNvbnN0IGVkaXRvckxheWVyOiBhbnlbXSA9IFtdO1xuICBpZiAoZWRpdG9ySW5mbykge1xuICAgIGVkaXRvckxheWVyLnB1c2goXG4gICAgICBnZXRFZGl0b3JMYXllcih7XG4gICAgICAgIC4uLmVkaXRvckluZm8sXG4gICAgICAgIG1hcFN0YXRlXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gWy4uLmN1c3RvbUJvdHRvbURlY2tMYXllcnMsIC4uLmRhdGFMYXllcnMsIC4uLmN1c3RvbVRvcERlY2tMYXllcnMsIC4uLmVkaXRvckxheWVyXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExheWVyT3JkZXJGcm9tTGF5ZXJzPFQgZXh0ZW5kcyB7aWQ6IHN0cmluZ30+KGxheWVyczogVFtdKTogc3RyaW5nW10ge1xuICByZXR1cm4gbGF5ZXJzLm1hcCgoe2lkfSkgPT4gaWQpO1xufVxuXG4vLyAtLS0gTGF5ZXIgR3JvdXAgVXRpbGl0aWVzIC0tLVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV3TGF5ZXJHcm91cChwcm9wcz86IFBhcnRpYWw8TGF5ZXJPcmRlckdyb3VwPik6IExheWVyT3JkZXJHcm91cCB7XG4gIHJldHVybiB7XG4gICAgaWQ6IHByb3BzPy5pZCA/PyBnZW5lcmF0ZUhhc2hJZCg2KSxcbiAgICBsYWJlbDogcHJvcHM/LmxhYmVsID8/ICdOZXcgZ3JvdXAnLFxuICAgIGlzVmlzaWJsZTogcHJvcHM/LmlzVmlzaWJsZSA/PyB0cnVlLFxuICAgIGxheWVyT3JkZXI6IHByb3BzPy5sYXllck9yZGVyID8/IFtdLFxuICAgIGlzSW5jbHVkZWRJbkxlZ2VuZDogcHJvcHM/LmlzSW5jbHVkZWRJbkxlZ2VuZCA/PyB0cnVlXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIoXG4gIGxheWVyT3JkZXI6IExheWVyT3JkZXIsXG4gIGVsZW1lbnQ6IExheWVyT3JkZXJFbnRyeSxcbiAgYXRJbmRleD86IG51bWJlclxuKTogTGF5ZXJPcmRlciB7XG4gIGNvbnN0IGlkeCA9IGF0SW5kZXggPz8gMDtcbiAgY29uc3QgcmVzdWx0ID0gWy4uLmxheWVyT3JkZXJdO1xuICByZXN1bHQuc3BsaWNlKGlkeCwgMCwgZWxlbWVudCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIoXG4gIGxheWVyT3JkZXI6IExheWVyT3JkZXIsXG4gIGVsZW1lbnQ6IExheWVyT3JkZXJFbnRyeVxuKTogTGF5ZXJPcmRlciB7XG4gIGlmICghbGF5ZXJPcmRlcikgcmV0dXJuIFtdO1xuICBjb25zdCBlbGVtZW50SWQgPSB0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycgPyBlbGVtZW50IDogZWxlbWVudC5pZDtcbiAgbGV0IG5ld0xheWVyT3JkZXIgPSBsYXllck9yZGVyLmZpbHRlcihlbnRyeSA9PiB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICByZXR1cm4gKGVudHJ5IGFzIExheWVyT3JkZXJHcm91cCkuaWQgIT09IGVsZW1lbnRJZDtcbiAgICB9XG4gICAgcmV0dXJuIGVudHJ5ICE9PSBlbGVtZW50SWQ7XG4gIH0pO1xuXG4gIG5ld0xheWVyT3JkZXIgPSBuZXdMYXllck9yZGVyLm1hcChlbnRyeSA9PiB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICBjb25zdCBncm91cCA9IGVudHJ5IGFzIExheWVyT3JkZXJHcm91cDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmdyb3VwLFxuICAgICAgICBsYXllck9yZGVyOiByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIoZ3JvdXAubGF5ZXJPcmRlciwgZWxlbWVudElkKVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGVudHJ5O1xuICB9KTtcblxuICByZXR1cm4gbmV3TGF5ZXJPcmRlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgbGF5ZXJHcm91cElkOiBzdHJpbmdcbik6IExheWVyT3JkZXJHcm91cCB8IHVuZGVmaW5lZCB7XG4gIGxldCBncm91cDogTGF5ZXJPcmRlckdyb3VwIHwgdW5kZWZpbmVkO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxheWVyT3JkZXIubGVuZ3RoICYmICFncm91cDsgaSsrKSB7XG4gICAgY29uc3QgZW50cnkgPSBsYXllck9yZGVyW2ldO1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGVudHJ5KSkge1xuICAgICAgY29uc3QgZ3JwID0gZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwO1xuICAgICAgZ3JvdXAgPVxuICAgICAgICBncnAuaWQgPT09IGxheWVyR3JvdXBJZCA/IGdycCA6IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihncnAubGF5ZXJPcmRlciwgbGF5ZXJHcm91cElkKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGdyb3VwO1xufVxuXG4vKipcbiAqIEZpbmQgdGhlIHBhcmVudCBncm91cCB0aGF0IGNvbnRhaW5zIGEgZ2l2ZW4gbGF5ZXIgSUQuXG4gKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgbGF5ZXIgaXMgYXQgdGhlIHJvb3QgbGV2ZWwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kUGFyZW50R3JvdXBGb3JMYXllcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgbGF5ZXJJZDogc3RyaW5nXG4pOiBMYXllck9yZGVyR3JvdXAgfCB1bmRlZmluZWQge1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGxheWVyT3JkZXIpIHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgIGNvbnN0IGdyb3VwID0gZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwO1xuICAgICAgaWYgKGdyb3VwLmxheWVyT3JkZXIuc29tZShlID0+IHR5cGVvZiBlID09PSAnc3RyaW5nJyAmJiBlID09PSBsYXllcklkKSkge1xuICAgICAgICByZXR1cm4gZ3JvdXA7XG4gICAgICB9XG4gICAgICBjb25zdCBuZXN0ZWQgPSBmaW5kUGFyZW50R3JvdXBGb3JMYXllcihncm91cC5sYXllck9yZGVyLCBsYXllcklkKTtcbiAgICAgIGlmIChuZXN0ZWQpIHJldHVybiBuZXN0ZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbmRleEZyb21MYXllckVudHJ5SWQobGF5ZXJPcmRlcjogTGF5ZXJPcmRlciwgbGF5ZXJFbnRyeUlkOiBzdHJpbmcpOiBudW1iZXIge1xuICByZXR1cm4gbGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICBpc1BsYWluT2JqZWN0KGVudHJ5KSA/IChlbnRyeSBhcyBMYXllck9yZGVyR3JvdXApLmlkID09PSBsYXllckVudHJ5SWQgOiBlbnRyeSA9PT0gbGF5ZXJFbnRyeUlkXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xheWVyUHJlc2VudEluTGF5ZXJPcmRlcihsYXllck9yZGVyOiBMYXllck9yZGVyLCBsYXllcklkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgbGV0IGZvdW5kID0gZmFsc2U7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGF5ZXJPcmRlci5sZW5ndGggJiYgIWZvdW5kOyBpKyspIHtcbiAgICBjb25zdCBlbnRyeSA9IGxheWVyT3JkZXJbaV07XG4gICAgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICBmb3VuZCA9IGlzTGF5ZXJQcmVzZW50SW5MYXllck9yZGVyKChlbnRyeSBhcyBMYXllck9yZGVyR3JvdXApLmxheWVyT3JkZXIsIGxheWVySWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3VuZCA9IGxheWVySWQgPT09IGVudHJ5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gZm91bmQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgb2xkRW50cnk6IExheWVyT3JkZXJFbnRyeSxcbiAgbmV3RW50cnk6IExheWVyT3JkZXJFbnRyeVxuKTogTGF5ZXJPcmRlciB7XG4gIGNvbnN0IG9sZEVudHJ5SWQgPSB0eXBlb2Ygb2xkRW50cnkgPT09ICdzdHJpbmcnID8gb2xkRW50cnkgOiBvbGRFbnRyeS5pZDtcbiAgcmV0dXJuIGxheWVyT3JkZXIubWFwKGVudHJ5ID0+IHtcbiAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGVudHJ5ID09PSBvbGRFbnRyeUlkID8gbmV3RW50cnkgOiBlbnRyeTtcbiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICBjb25zdCBncnAgPSBlbnRyeSBhcyBMYXllck9yZGVyR3JvdXA7XG4gICAgICBpZiAoZ3JwLmlkID09PSBvbGRFbnRyeUlkKSB7XG4gICAgICAgIHJldHVybiBuZXdFbnRyeTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmdycCxcbiAgICAgICAgbGF5ZXJPcmRlcjogcmVwbGFjZUxheWVyRW50cnlJbkxheWVyT3JkZXIoZ3JwLmxheWVyT3JkZXIsIG9sZEVudHJ5LCBuZXdFbnRyeSlcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBlbnRyeTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyKFxuICBsYXllck9yZGVyOiBMYXllck9yZGVyLFxuICBuZXdMYXllckdyb3VwOiBMYXllck9yZGVyR3JvdXBcbik6IExheWVyT3JkZXIge1xuICByZXR1cm4gbGF5ZXJPcmRlci5tYXAoZW50cnkgPT4ge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGVudHJ5KSkge1xuICAgICAgY29uc3QgZ3JwID0gZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwO1xuICAgICAgaWYgKGdycC5pZCA9PT0gbmV3TGF5ZXJHcm91cC5pZCkge1xuICAgICAgICByZXR1cm4gbmV3TGF5ZXJHcm91cDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmdycCxcbiAgICAgICAgbGF5ZXJPcmRlcjogdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihncnAubGF5ZXJPcmRlciwgbmV3TGF5ZXJHcm91cClcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBlbnRyeTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGbGF0TGF5ZXJPcmRlcihsYXllck9yZGVyOiBMYXllck9yZGVyKTogRmxhdExheWVyT3JkZXIge1xuICByZXR1cm4gbGF5ZXJPcmRlci5yZWR1Y2UoKGFjYywgb3JkZXJFbnRyeSkgPT4ge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KG9yZGVyRW50cnkpKSB7XG4gICAgICByZXR1cm4gWy4uLmFjYywgLi4uZ2V0RmxhdExheWVyT3JkZXIoKG9yZGVyRW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwKS5sYXllck9yZGVyKV07XG4gICAgfVxuICAgIHJldHVybiBbLi4uYWNjLCBvcmRlckVudHJ5IGFzIHN0cmluZ107XG4gIH0sIFtdIGFzIEZsYXRMYXllck9yZGVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkTGF5ZXJPcmRlckhpZXJhcmNoeShcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgbGF5ZXJzPzogTGF5ZXJbXSB8IHJlYWRvbmx5IExheWVyW11cbik6IExheWVyT3JkZXJIaWVyYXJjaHkge1xuICBjb25zdCB2YWxpZExheWVycyA9IGxheWVycz8uZmlsdGVyKEJvb2xlYW4pO1xuICByZXR1cm4gbGF5ZXJPcmRlci5yZWR1Y2UoKGFjYywgZWxlbWVudCkgPT4ge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gWy4uLmFjYywgWydsYXllckdyb3VwJywgZWxlbWVudCBhcyBMYXllck9yZGVyR3JvdXBdIGFzIGNvbnN0XTtcbiAgICB9XG4gICAgY29uc3QgbGF5ZXIgPSB2YWxpZExheWVycz8uZmluZChsID0+IGwuaWQgPT09IGVsZW1lbnQpO1xuICAgIGlmICghbGF5ZXIgfHwgbGF5ZXIuY29uZmlnLmhpZGRlbikge1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG4gICAgcmV0dXJuIFsuLi5hY2MsIFsnbGF5ZXInLCBsYXllcl0gYXMgY29uc3RdO1xuICB9LCBbXSBhcyBMYXllck9yZGVySGllcmFyY2h5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUdob3N0TGF5ZXJGcm9tTGF5ZXJPcmRlcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgbGF5ZXJzOiB7aWQ6IHN0cmluZ31bXVxuKTogTGF5ZXJPcmRlciB7XG4gIHJldHVybiBsYXllck9yZGVyLnJlZHVjZSgoYWNjLCBlbnRyeSkgPT4ge1xuICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAobGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBlbnRyeSkpIHtcbiAgICAgICAgYWNjLnB1c2goZW50cnkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBncnAgPSBlbnRyeSBhcyBMYXllck9yZGVyR3JvdXA7XG4gICAgICBpZiAoZ3JwLmxheWVyT3JkZXIpIHtcbiAgICAgICAgYWNjLnB1c2goe1xuICAgICAgICAgIC4uLmdycCxcbiAgICAgICAgICBsYXllck9yZGVyOiByZW1vdmVHaG9zdExheWVyRnJvbUxheWVyT3JkZXIoZ3JwLmxheWVyT3JkZXIsIGxheWVycylcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdIGFzIExheWVyT3JkZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVvcmRlckxheWVyT3JkZXIoXG4gIGxheWVyT3JkZXI6IFZpc1N0YXRlWydsYXllck9yZGVyJ10sXG4gIG9yaWdpbkxheWVySWQ6IHN0cmluZyxcbiAgZGVzdGluYXRpb25MYXllcklkOiBzdHJpbmdcbik6IFZpc1N0YXRlWydsYXllck9yZGVyJ10ge1xuICBjb25zdCBhY3RpdmVJbmRleCA9IGdldEluZGV4RnJvbUxheWVyRW50cnlJZChsYXllck9yZGVyLCBvcmlnaW5MYXllcklkKTtcbiAgY29uc3Qgb3ZlckluZGV4ID0gZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkKGxheWVyT3JkZXIsIGRlc3RpbmF0aW9uTGF5ZXJJZCk7XG5cbiAgaWYgKGFjdGl2ZUluZGV4ID09PSAtMSB8fCBvdmVySW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuIGxheWVyT3JkZXI7XG4gIH1cbiAgcmV0dXJuIGFycmF5TW92ZShsYXllck9yZGVyLCBhY3RpdmVJbmRleCwgb3ZlckluZGV4KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZExheWVyVG9MYXllck9yZGVyKFxuICBsYXllck9yZGVyOiBWaXNTdGF0ZVsnbGF5ZXJPcmRlciddLFxuICBsYXllcklkOiBzdHJpbmdcbik6IExheWVyT3JkZXIge1xuICByZXR1cm4gW2xheWVySWQsIC4uLmxheWVyT3JkZXJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGF5ZXJIb3ZlclByb3BWYWx1ZShcbiAgZGF0YTogRGF0YVJvdyB8IEFnZ3JlZ2F0aW9uTGF5ZXJIb3ZlckRhdGEgfCBhbnlbXSB8IG51bGwgfCB1bmRlZmluZWQsXG4gIGZpZWxkSW5kZXg6IG51bWJlclxuKSB7XG4gIGlmICghZGF0YSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBEYXRhUm93KSByZXR1cm4gZGF0YS52YWx1ZUF0KGZpZWxkSW5kZXgpO1xuICByZXR1cm4gZGF0YVtmaWVsZEluZGV4XTtcbn1cblxuLyoqIENoZWNrcyBpZiBhbnkgRGVjayBsYXllcnMgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGxvYWRpbmcuICovXG5leHBvcnQgZnVuY3Rpb24gYXJlQW55RGVja0xheWVyc0xvYWRpbmcobGF5ZXJzOiBEZWNrTGF5ZXJbXSk6IGJvb2xlYW4ge1xuICByZXR1cm4gbGF5ZXJzLnNvbWUoXG4gICAgLy8gbGF5ZXIuaXNMb2FkZWQgY2hhbmdlcyBmcmVxdWVudGx5IGluIERlY2sgKGV2ZW4gb24gaG92ZXIpIHNvIHdlIGNoZWNrIGFkZGl0aW9uYWwgcHJvcGVydGllc1xuICAgIGxheWVyID0+IGxheWVyLmludGVybmFsU3RhdGUgJiYgIWxheWVyLmlzTG9hZGVkXG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTs7QUFFQSxPQUFPQSxPQUFPLE1BQU0sZ0JBQWdCO0FBRXBDLFNBQVFDLGlCQUFpQixFQUFFQyx1QkFBdUIsUUFBTyxzQkFBc0I7QUFxQi9FLFNBS0VDLGtCQUFrQixFQUNsQkMsY0FBYyxRQUNULG1CQUFtQjtBQUkxQixTQUFRQyxVQUFVLEVBQUVDLHlCQUF5QixFQUFFQyxPQUFPLEVBQUVDLGFBQWEsUUFBTyxrQkFBa0I7QUFDOUYsU0FBUUMsU0FBUyxFQUFFQyxjQUFjLFFBQU8seUJBQXlCO0FBRWpFLFNBQVFDLG1CQUFtQixRQUFPLDBCQUEwQjtBQTZCNUQ7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTQyxnQkFBZ0JBLENBQUNDLE9BQW9CLEVBQUVDLFlBQThCLEVBQVc7RUFDOUYsSUFBSSxDQUFDRCxPQUFPLEVBQUU7SUFDWixPQUFPLEVBQUU7RUFDWDtFQUVBLElBQU1FLFVBQVUsR0FBSUMsTUFBTSxDQUFDQyxJQUFJLENBQUNILFlBQVksQ0FBQyxDQUFtQ0ksTUFBTSxDQUNwRixVQUFDQyxRQUFRLEVBQUVDLEVBQUUsRUFBSztJQUNoQixJQUFNQyxNQUF3QyxHQUM1QyxPQUFPUCxZQUFZLENBQUNNLEVBQUUsQ0FB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QUFNO01BQ0wsSUFBTUssR0FBRyxHQUFHTCxLQUF3QjtNQUNwQyxJQUFJSyxHQUFHLENBQUNsRSxVQUFVLEVBQUU7UUFDbEJuRSxHQUFHLENBQUNvRyxJQUFJLENBQUFsSSxhQUFBLENBQUFBLGFBQUEsS0FDSG1LLEdBQUc7VUFDTmxFLFVBQVUsRUFBRStGLDhCQUE4QixDQUFDN0IsR0FBRyxDQUFDbEUsVUFBVSxFQUFFOUUsTUFBTTtRQUFDLEVBQ25FLENBQUM7TUFDSjtJQUNGO0lBQ0EsT0FBT1csR0FBRztFQUNaLENBQUMsRUFBRSxFQUFnQixDQUFDO0FBQ3RCO0FBRUEsT0FBTyxTQUFTbUssaUJBQWlCQSxDQUMvQmhHLFVBQWtDLEVBQ2xDaUcsYUFBcUIsRUFDckJDLGtCQUEwQixFQUNGO0VBQ3hCLElBQU1DLFdBQVcsR0FBR3JCLHdCQUF3QixDQUFDOUUsVUFBVSxFQUFFaUcsYUFBYSxDQUFDO0VBQ3ZFLElBQU1HLFNBQVMsR0FBR3RCLHdCQUF3QixDQUFDOUUsVUFBVSxFQUFFa0csa0JBQWtCLENBQUM7RUFFMUUsSUFBSUMsV0FBVyxLQUFLLENBQUMsQ0FBQyxJQUFJQyxTQUFTLEtBQUssQ0FBQyxDQUFDLEVBQUU7SUFDMUMsT0FBT3BHLFVBQVU7RUFDbkI7RUFDQSxPQUFPdEgsU0FBUyxDQUFDc0gsVUFBVSxFQUFFbUcsV0FBVyxFQUFFQyxTQUFTLENBQUM7QUFDdEQ7QUFFQSxPQUFPLFNBQVNDLG9CQUFvQkEsQ0FDbENyRyxVQUFrQyxFQUNsQ1UsT0FBZSxFQUNIO0VBQ1osUUFBUUEsT0FBTyxFQUFBOUcsTUFBQSxDQUFBZ0osa0JBQUEsQ0FBSzVDLFVBQVU7QUFDaEM7QUFFQSxPQUFPLFNBQVNzRyxzQkFBc0JBLENBQ3BDeEksSUFBb0UsRUFDcEV5SSxVQUFrQixFQUNsQjtFQUNBLElBQUksQ0FBQ3pJLElBQUksRUFBRSxPQUFPL0MsU0FBUztFQUMzQixJQUFJK0MsSUFBSSxZQUFZdEYsT0FBTyxFQUFFLE9BQU9zRixJQUFJLENBQUMwSSxPQUFPLENBQUNELFVBQVUsQ0FBQztFQUM1RCxPQUFPekksSUFBSSxDQUFDeUksVUFBVSxDQUFDO0FBQ3pCOztBQUVBO0FBQ0EsT0FBTyxTQUFTRSx1QkFBdUJBLENBQUN2TCxNQUFtQixFQUFXO0VBQ3BFLE9BQU9BLE1BQU0sQ0FBQ0wsSUFBSTtFQUNoQjtFQUNBLFVBQUFULEtBQUs7SUFBQSxPQUFJQSxLQUFLLENBQUNzTSxhQUFhLElBQUksQ0FBQ3RNLEtBQUssQ0FBQ3VNLFFBQVE7RUFBQSxDQUNqRCxDQUFDO0FBQ0giLCJpZ25vcmVMaXN0IjpbXX0=
734
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb25zb2xlIiwiR0VPQ09ERVJfTEFZRVJfSUQiLCJMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCIsIk9WRVJMQVlfVFlQRV9DT05TVCIsImdldEVkaXRvckxheWVyIiwiaXNGdW5jdGlvbiIsImdldE1hcExheWVyc0Zyb21TcGxpdE1hcHMiLCJEYXRhUm93IiwiaXNQbGFpbk9iamVjdCIsImFycmF5TW92ZSIsImdlbmVyYXRlSGFzaElkIiwiZ2V0TGF5ZXJab29tT3BhY2l0eUZhY3RvciIsIlRocmVlREJ1aWxkaW5nTGF5ZXIiLCJmaW5kRGVmYXVsdExheWVyIiwiZGF0YXNldCIsImxheWVyQ2xhc3NlcyIsImxheWVyUHJvcHMiLCJPYmplY3QiLCJrZXlzIiwicmVkdWNlIiwicHJldmlvdXMiLCJsYyIsInJlc3VsdCIsImZpbmREZWZhdWx0TGF5ZXJQcm9wcyIsInByb3BzIiwiQXJyYXkiLCJpc0FycmF5IiwiZm91bmRMYXllcnMiLCJjb25jYXQiLCJtYXAiLCJwIiwiX29iamVjdFNwcmVhZCIsInR5cGUiLCJkYXRhSWQiLCJpZCIsImlzVmlzaWJsZSIsImxheWVyIiwic2V0SW5pdGlhbExheWVyQ29uZmlnIiwiZGF0YUNvbnRhaW5lciIsIm1lcmdlTGF5ZXJWaXNDb25maWdGb3JOZXdEYXRhc2V0cyIsInN0YXRlIiwicGF0Y2giLCJkYXRhc2V0SWRzVG9QYXRjaCIsImxlbmd0aCIsImhhc0RlZmluZWRQYXRjaFZhbHVlIiwic29tZSIsImtleSIsInVuZGVmaW5lZCIsImRhdGFzZXRJZFNldCIsIlNldCIsImxheWVycyIsImNvbmZpZyIsImhhcyIsInNldHRpbmdzIiwidmlzQ29uZmlnU2V0dGluZ3MiLCJhbGxvd2VkS2V5cyIsImZpbHRlciIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInBhcnRpYWwiLCJhY2MiLCJ1cGRhdGVMYXllclZpc0NvbmZpZyIsImNhbGN1bGF0ZUxheWVyRGF0YSIsIm9sZExheWVyRGF0YSIsImxheWVyRGF0YSIsImlzVmFsaWQiLCJfb2xkRGF0YVVwZGF0ZVRyaWdnZXJzIiwiaGFzQWxsQ29sdW1ucyIsImZvcm1hdExheWVyRGF0YSIsImRhdGFzZXRzIiwidXBkYXRlTGF5ZXJDb25maWciLCJlcnJvck1lc3NhZ2UiLCJlcnIiLCJlcnJvciIsIkVycm9yIiwibWVzc2FnZSIsInN1YnN0cmluZyIsImdldExheWVySG92ZXJQcm9wIiwiX3JlZiIsImFuaW1hdGlvbkNvbmZpZyIsImludGVyYWN0aW9uQ29uZmlnIiwiaG92ZXJJbmZvIiwibGF5ZXJzVG9SZW5kZXIiLCJ0b29sdGlwIiwiZW5hYmxlZCIsInBpY2tlZCIsIm9iamVjdCIsIm92ZXJsYXkiLCJpZHgiLCJpbmRleCIsImdldEhvdmVyRGF0YSIsIl9kYXRhc2V0cyRkYXRhSWQiLCJmaWVsZHMiLCJkYXRhIiwiZmllbGRzVG9TaG93IiwiY3VycmVudFRpbWUiLCJ0aW1lem9uZSIsIlpPT01fT1BBQ0lUWV9QUk9QX0tFWVMiLCJzY2FsZVpvb21PcGFjaXR5U3ViTGF5ZXJQcm9wcyIsInN1YkxheWVyUHJvcHMiLCJmYWN0b3IiLCJjaGFuZ2VkIiwibmV4dCIsIl9pIiwiX09iamVjdCRrZXlzIiwic3VibGF5ZXIiLCJfdHlwZW9mIiwic2NhbGVkIiwic3VibGF5ZXJDaGFuZ2VkIiwiX2l0ZXJhdG9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfc3RlcCIsInMiLCJuIiwiZG9uZSIsInZhbHVlIiwiZSIsImYiLCJhcHBseVpvb21PcGFjaXR5VG9EZWNrTGF5ZXIiLCJkZWNrTGF5ZXIiLCJfZGVja0xheWVyJHByb3BzIiwiX2RlY2tMYXllciRwcm9wczIiLCJfZGVja0xheWVyJHByb3BzMyIsImNsb25lIiwiYmFzZU9wYWNpdHkiLCJvcGFjaXR5IiwiX3N1YkxheWVyUHJvcHMiLCJ2aXNpYmxlIiwicmVuZGVyRGVja0dsTGF5ZXIiLCJsYXllckNhbGxiYWNrcyIsImxheWVySW5kZXgiLCJjbGlja2VkIiwibWFwU3RhdGUiLCJtYXBMYXllcnMiLCJleHBlcmltZW50YWxDb250ZXh0IiwiX3JlZjIiLCJncHVGaWx0ZXIiLCJvYmplY3RIb3ZlcmVkIiwiQm9vbGVhbiIsInJlbmRlcmVkIiwicmVuZGVyTGF5ZXIiLCJ6b29tIiwiaXNMYXllclJlbmRlcmFibGUiLCJzaG91bGRSZW5kZXJMYXllciIsImlzTGF5ZXJWaXNpYmxlIiwicHJlcGFyZUxheWVyc0ZvckRlY2siLCJhY2N1IiwiX2RlZmluZVByb3BlcnR5Iiwib3ZlcmxheVR5cGUiLCJkZWNrZ2wiLCJwcmVwYXJlTGF5ZXJzVG9SZW5kZXIiLCJnZXRDdXN0b21EZWNrTGF5ZXJzIiwiZGVja0dsUHJvcHMiLCJib3R0b21EZWNrTGF5ZXJzIiwidG9wRGVja0xheWVycyIsInRvcExheWVycyIsImJpbmRMYXllckNhbGxiYWNrcyIsImFyZ3VtZW50cyIsInZhbCIsImNvbXB1dGVEZWNrTGF5ZXJzRnJvbUxheWVyT3JkZXIiLCJsYXllck9yZGVyIiwiY3VycmVudExheWVyc0ZvckRlY2siLCJyZW5kZXJQcm9wcyIsImhhc1NoYWRvd0VmZmVjdCIsImlzQW5ub3RhdGlvbk1vZGUiLCJzbGljZSIsInJldmVyc2UiLCJvdmVybGF5cyIsImVsZW1lbnQiLCJsYXllckdyb3VwIiwibGF5ZXJJZCIsImZpbmRJbmRleCIsIl9yZWYzIiwiYmluZGVkTGF5ZXJDYWxsYmFja3MiLCJsYXllck92ZXJsYXkiLCJjb21wdXRlRGVja0xheWVycyIsIl9yZWY0Iiwib3B0aW9ucyIsInZpc1N0YXRlIiwibWFwU3R5bGUiLCJlZmZlY3RzIiwic3BsaXRNYXBzIiwiX3JlZjUiLCJtYXBJbmRleCIsIm1hcGJveEFwaUFjY2Vzc1Rva2VuIiwibWFwYm94QXBpVXJsIiwicHJpbWFyeU1hcCIsImxheWVyc0ZvckRlY2siLCJlZGl0b3JJbmZvIiwiZGF0YUxheWVycyIsImVmZmVjdCIsIl9yZWY2IiwidmlzaWJsZUxheWVyR3JvdXBzIiwicHVzaCIsInRocmVlREJ1aWxkaW5nQ29sb3IiLCJwaWNrYWJsZSIsInVwZGF0ZVRyaWdnZXJzIiwiZ2V0RmlsbENvbG9yIiwiX2dldEN1c3RvbURlY2tMYXllcnMiLCJfZ2V0Q3VzdG9tRGVja0xheWVyczIiLCJfc2xpY2VkVG9BcnJheSIsImN1c3RvbUJvdHRvbURlY2tMYXllcnMiLCJjdXN0b21Ub3BEZWNrTGF5ZXJzIiwiZWRpdG9yTGF5ZXIiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJnZXRMYXllck9yZGVyRnJvbUxheWVycyIsIl9yZWY3IiwiZ2V0TmV3TGF5ZXJHcm91cCIsIl9wcm9wcyRpZCIsIl9wcm9wcyRsYWJlbCIsIl9wcm9wcyRpc1Zpc2libGUiLCJfcHJvcHMkbGF5ZXJPcmRlciIsIl9wcm9wcyRpc0luY2x1ZGVkSW5MZSIsImxhYmVsIiwiaXNJbmNsdWRlZEluTGVnZW5kIiwiYWRkTGF5ZXJPckdyb3VwVG9MYXllck9yZGVyIiwiYXRJbmRleCIsInNwbGljZSIsInJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlciIsImVsZW1lbnRJZCIsIm5ld0xheWVyT3JkZXIiLCJlbnRyeSIsImdyb3VwIiwiZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyIiwibGF5ZXJHcm91cElkIiwiaSIsImdycCIsImdldEFuY2VzdG9yTGF5ZXJHcm91cHMiLCJlbnRyeUlkIiwiYW5jZXN0b3JzIiwidmlzaXQiLCJlbnRyaWVzIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsImlzTGF5ZXJTaG93bkluTGVnZW5kIiwiZXZlcnkiLCJmaW5kUGFyZW50R3JvdXBGb3JMYXllciIsIl9pdGVyYXRvcjMiLCJfc3RlcDMiLCJuZXN0ZWQiLCJnZXRJbmRleEZyb21MYXllckVudHJ5SWQiLCJsYXllckVudHJ5SWQiLCJpc0xheWVyUHJlc2VudEluTGF5ZXJPcmRlciIsImZvdW5kIiwicmVwbGFjZUxheWVyRW50cnlJbkxheWVyT3JkZXIiLCJvbGRFbnRyeSIsIm5ld0VudHJ5Iiwib2xkRW50cnlJZCIsInVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIiLCJuZXdMYXllckdyb3VwIiwiZ2V0RmxhdExheWVyT3JkZXIiLCJvcmRlckVudHJ5IiwiYnVpbGRMYXllck9yZGVySGllcmFyY2h5IiwidmFsaWRMYXllcnMiLCJmaW5kIiwibCIsImhpZGRlbiIsInJlbW92ZUdob3N0TGF5ZXJGcm9tTGF5ZXJPcmRlciIsInJlb3JkZXJMYXllck9yZGVyIiwib3JpZ2luTGF5ZXJJZCIsImRlc3RpbmF0aW9uTGF5ZXJJZCIsImFjdGl2ZUluZGV4Iiwib3ZlckluZGV4IiwiYWRkTGF5ZXJUb0xheWVyT3JkZXIiLCJnZXRMYXllckhvdmVyUHJvcFZhbHVlIiwiZmllbGRJbmRleCIsInZhbHVlQXQiLCJhcmVBbnlEZWNrTGF5ZXJzTG9hZGluZyIsImludGVybmFsU3RhdGUiLCJpc0xvYWRlZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sYXllci11dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgQ29uc29sZSBmcm9tICdnbG9iYWwvY29uc29sZSc7XG5cbmltcG9ydCB7R0VPQ09ERVJfTEFZRVJfSUQsIExJR0hUX0FORF9TSEFET1dfRUZGRUNUfSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge0xheWVyIGFzIERlY2tMYXllcn0gZnJvbSAnQGRlY2suZ2wvY29yZSc7XG50eXBlIERlY2tMYXllclByb3BzID0gYW55O1xuaW1wb3J0IHtcbiAgRmllbGQsXG4gIExheWVyVmlzQ29uZmlnLFxuICBUb29sdGlwRmllbGQsXG4gIENvbXBhcmVUeXBlLFxuICBTcGxpdE1hcExheWVycyxcbiAgRWRpdG9yLFxuICBGZWF0dXJlLFxuICBGZWF0dXJlU2VsZWN0aW9uQ29udGV4dCxcbiAgQmluZGVkTGF5ZXJDYWxsYmFja3MsXG4gIExheWVyQ2FsbGJhY2tzLFxuICBWaWV3cG9ydCxcbiAgTGF5ZXJPcmRlckdyb3VwLFxuICBMYXllck9yZGVyLFxuICBMYXllck9yZGVyRW50cnksXG4gIEZsYXRMYXllck9yZGVyLFxuICBMYXllck9yZGVySGllcmFyY2h5XG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtcbiAgRmluZERlZmF1bHRMYXllclByb3BzUmV0dXJuVmFsdWUsXG4gIEZpbmREZWZhdWx0TGF5ZXJQcm9wcyxcbiAgTGF5ZXIsXG4gIExheWVyQ2xhc3Nlc1R5cGUsXG4gIE9WRVJMQVlfVFlQRV9DT05TVCxcbiAgZ2V0RWRpdG9yTGF5ZXJcbn0gZnJvbSAnQGtlcGxlci5nbC9sYXllcnMnO1xuXG5pbXBvcnQgS2VwbGVyVGFibGUgZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5pbXBvcnQge1Zpc1N0YXRlfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuaW1wb3J0IHtpc0Z1bmN0aW9uLCBnZXRNYXBMYXllcnNGcm9tU3BsaXRNYXBzLCBEYXRhUm93LCBpc1BsYWluT2JqZWN0fSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7YXJyYXlNb3ZlLCBnZW5lcmF0ZUhhc2hJZH0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuaW1wb3J0IHtnZXRMYXllclpvb21PcGFjaXR5RmFjdG9yfSBmcm9tICcuL2ludGVyYWN0aW9uLXV0aWxzJztcblxuaW1wb3J0IHtUaHJlZURCdWlsZGluZ0xheWVyfSBmcm9tICdAa2VwbGVyLmdsL2RlY2tnbC1sYXllcnMnO1xuXG5leHBvcnQgdHlwZSBMYXllcnNUb1JlbmRlciA9IHtcbiAgW2xheWVySWQ6IHN0cmluZ106IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBBZ2dyZWdhdGlvbkxheWVySG92ZXJEYXRhID0ge1xuICBwb2ludHM6IGFueVtdO1xuICBjb2xvclZhbHVlPzogYW55O1xuICBlbGV2YXRpb25WYWx1ZT86IGFueTtcbiAgYWdncmVnYXRlZERhdGE/OiBSZWNvcmQ8XG4gICAgc3RyaW5nLFxuICAgIHtcbiAgICAgIG1lYXN1cmU6IHN0cmluZztcbiAgICAgIHZhbHVlPzogYW55O1xuICAgIH1cbiAgPjtcbn07XG5cbmV4cG9ydCB0eXBlIExheWVySG92ZXJQcm9wID0ge1xuICBkYXRhOiBEYXRhUm93IHwgQWdncmVnYXRpb25MYXllckhvdmVyRGF0YSB8IGFueVtdIHwgbnVsbDtcbiAgZmllbGRzOiBGaWVsZFtdO1xuICBmaWVsZHNUb1Nob3c6IFRvb2x0aXBGaWVsZFtdO1xuICBsYXllcjogTGF5ZXI7XG4gIHByaW1hcnlEYXRhPzogRGF0YVJvdyB8IEFnZ3JlZ2F0aW9uTGF5ZXJIb3ZlckRhdGEgfCBhbnlbXSB8IG51bGw7XG4gIGNvbXBhcmVUeXBlPzogQ29tcGFyZVR5cGU7XG4gIGN1cnJlbnRUaW1lPzogVmlzU3RhdGVbJ2FuaW1hdGlvbkNvbmZpZyddWydjdXJyZW50VGltZSddO1xuICB0aW1lem9uZT86IHN0cmluZyB8IG51bGw7XG59O1xuXG4vKipcbiAqIEZpbmQgZGVmYXVsdCBsYXllcnMgZnJvbSBmaWVsZHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmREZWZhdWx0TGF5ZXIoZGF0YXNldDogS2VwbGVyVGFibGUsIGxheWVyQ2xhc3NlczogTGF5ZXJDbGFzc2VzVHlwZSk6IExheWVyW10ge1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBsYXllclByb3BzID0gKE9iamVjdC5rZXlzKGxheWVyQ2xhc3NlcykgYXMgQXJyYXk8a2V5b2YgTGF5ZXJDbGFzc2VzVHlwZT4pLnJlZHVjZShcbiAgICAocHJldmlvdXMsIGxjKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQ6IEZpbmREZWZhdWx0TGF5ZXJQcm9wc1JldHVyblZhbHVlID1cbiAgICAgICAgdHlwZW9mIGxheWVyQ2xhc3Nlc1tsY10uZmluZERlZmF1bHRMYXllclByb3BzID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgPyBsYXllckNsYXNzZXNbbGNdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyhkYXRhc2V0LCBwcmV2aW91cylcbiAgICAgICAgICA6IHtwcm9wczogW119O1xuXG4gICAgICBjb25zdCBwcm9wcyA9IEFycmF5LmlzQXJyYXkocmVzdWx0KSA/IHJlc3VsdCA6IHJlc3VsdC5wcm9wcyB8fCBbXTtcbiAgICAgIGNvbnN0IGZvdW5kTGF5ZXJzID0gcmVzdWx0LmZvdW5kTGF5ZXJzIHx8IHByZXZpb3VzO1xuXG4gICAgICByZXR1cm4gZm91bmRMYXllcnMuY29uY2F0KFxuICAgICAgICBwcm9wcy5tYXAocCA9PiAoe1xuICAgICAgICAgIC4uLnAsXG4gICAgICAgICAgdHlwZTogbGMsXG4gICAgICAgICAgZGF0YUlkOiBkYXRhc2V0LmlkLFxuICAgICAgICAgIC8vIHNldCBhcmMgbGF5ZXIgaW5pdGlhbCB2aXNpYmxpdHkgdG8gZmFsc2UsIGJlY2F1c2UgYXJjcyB0ZW5kIHRvIGJlIHRvbyBtdXN5XG4gICAgICAgICAgLi4uKGxjID09PSAnYXJjJyB8fCBsYyA9PT0gJ2xpbmUnID8ge2lzVmlzaWJsZTogZmFsc2V9IDoge30pXG4gICAgICAgIH0pKVxuICAgICAgKTtcbiAgICB9LFxuICAgIFtdIGFzIChGaW5kRGVmYXVsdExheWVyUHJvcHMgJiB7dHlwZTogc3RyaW5nfSlbXVxuICApO1xuXG4gIC8vIGdvIHRocm91Z2ggYWxsIGxheWVyUHJvcHMgdG8gY3JlYXRlIGxheWVyXG4gIHJldHVybiBsYXllclByb3BzLm1hcChwcm9wcyA9PiB7XG4gICAgY29uc3QgbGF5ZXIgPSBuZXcgbGF5ZXJDbGFzc2VzW3Byb3BzLnR5cGVdKHByb3BzKTtcbiAgICByZXR1cm4gdHlwZW9mIGxheWVyLnNldEluaXRpYWxMYXllckNvbmZpZyA9PT0gJ2Z1bmN0aW9uJyAmJiBkYXRhc2V0LmRhdGFDb250YWluZXJcbiAgICAgID8gbGF5ZXIuc2V0SW5pdGlhbExheWVyQ29uZmlnKGRhdGFzZXQpXG4gICAgICA6IGxheWVyO1xuICB9KTtcbn1cblxuLyoqXG4gKiBBcHBsaWVzIGBwYXRjaGAgdG8gYGNvbmZpZy52aXNDb25maWdgIG9ubHkgZm9yIGxheWVycyB3aG9zZSBgZGF0YUlkYCBpcyBpbiBgZGF0YXNldElkc1RvUGF0Y2hgLlxuICogTGF5ZXJzIGZvciBkYXRhc2V0cyB0aGF0IHdlcmUgYWxyZWFkeSBvbiB0aGUgbWFwIGFyZSBsZWZ0IHVuY2hhbmdlZCDigJQgYGFkZERhdGFUb01hcGBcbiAqIEtleXMgd2hvc2UgcGF0Y2ggdmFsdWUgaXMgYHVuZGVmaW5lZGAgYXJlIHNraXBwZWQgc28gZXhpc3RpbmcgdmlzQ29uZmlnIGlzIG5vdCBjbGVhcmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VMYXllclZpc0NvbmZpZ0Zvck5ld0RhdGFzZXRzKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHBhdGNoOiBQYXJ0aWFsPExheWVyVmlzQ29uZmlnPiB8IHVuZGVmaW5lZCxcbiAgZGF0YXNldElkc1RvUGF0Y2g6IHN0cmluZ1tdXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghcGF0Y2ggfHwgIU9iamVjdC5rZXlzKHBhdGNoKS5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBoYXNEZWZpbmVkUGF0Y2hWYWx1ZSA9IChPYmplY3Qua2V5cyhwYXRjaCkgYXMgQXJyYXk8a2V5b2YgTGF5ZXJWaXNDb25maWc+KS5zb21lKFxuICAgIGtleSA9PiBwYXRjaFtrZXldICE9PSB1bmRlZmluZWRcbiAgKTtcbiAgaWYgKCFoYXNEZWZpbmVkUGF0Y2hWYWx1ZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGRhdGFzZXRJZFNldCA9IG5ldyBTZXQoZGF0YXNldElkc1RvUGF0Y2gpO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBzdGF0ZS5sYXllcnMubWFwKGxheWVyID0+IHtcbiAgICAgIGlmICghbGF5ZXIuY29uZmlnLmRhdGFJZCB8fCAhZGF0YXNldElkU2V0LmhhcyhsYXllci5jb25maWcuZGF0YUlkKSkge1xuICAgICAgICByZXR1cm4gbGF5ZXI7XG4gICAgICB9XG4gICAgICBjb25zdCBzZXR0aW5ncyA9IGxheWVyLnZpc0NvbmZpZ1NldHRpbmdzO1xuICAgICAgaWYgKCFzZXR0aW5ncykge1xuICAgICAgICByZXR1cm4gbGF5ZXI7XG4gICAgICB9XG4gICAgICBjb25zdCBhbGxvd2VkS2V5cyA9IChPYmplY3Qua2V5cyhwYXRjaCkgYXMgQXJyYXk8a2V5b2YgTGF5ZXJWaXNDb25maWc+KS5maWx0ZXIoXG4gICAgICAgIGtleSA9PiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc2V0dGluZ3MsIGtleSkgJiYgcGF0Y2hba2V5XSAhPT0gdW5kZWZpbmVkXG4gICAgICApO1xuICAgICAgaWYgKCFhbGxvd2VkS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGxheWVyO1xuICAgICAgfVxuICAgICAgY29uc3QgcGFydGlhbCA9IGFsbG93ZWRLZXlzLnJlZHVjZTxQYXJ0aWFsPExheWVyVmlzQ29uZmlnPj4oKGFjYywga2V5KSA9PiB7XG4gICAgICAgIGFjY1trZXldID0gcGF0Y2hba2V5XTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIHt9KTtcbiAgICAgIHJldHVybiBsYXllci51cGRhdGVMYXllclZpc0NvbmZpZyhwYXJ0aWFsKTtcbiAgICB9KVxuICB9O1xufVxuXG50eXBlIE1pblZpc1N0YXRlRm9yTGF5ZXJEYXRhID0ge1xuICBkYXRhc2V0czogVmlzU3RhdGVbJ2RhdGFzZXRzJ107XG4gIGFuaW1hdGlvbkNvbmZpZzogVmlzU3RhdGVbJ2FuaW1hdGlvbkNvbmZpZyddO1xufTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgbGF5ZXIgZGF0YSBiYXNlZCBvbiBsYXllciB0eXBlLCBjb2wgQ29uZmlnLFxuICogcmV0dXJuIHVwZGF0ZWQgbGF5ZXIgaWYgY29sb3JEb21haW4sIGRhdGFNYXAgaGFzIGNoYW5nZWQuXG4gKiBBbHNvLCByZXR1cm5zIHVwZGF0ZWQgbGF5ZXIgaW4gY2FzZSB0aGUgaW5wdXQgbGF5ZXIgd2FzIGluIGludmFsaWQgc3RhdGUuXG4gKiBBZGRzIGFuIGVycm9yIG1lc3NhZ2UgdG8gdGhlIGxheWVyIGluIGNhc2Ugb2YgYW4gZXhjZXB0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlTGF5ZXJEYXRhPFMgZXh0ZW5kcyBNaW5WaXNTdGF0ZUZvckxheWVyRGF0YT4oXG4gIGxheWVyOiBMYXllcixcbiAgc3RhdGU6IFMsXG4gIG9sZExheWVyRGF0YT86IGFueVxuKToge1xuICBsYXllckRhdGE6IGFueTtcbiAgbGF5ZXI6IExheWVyO1xufSB7XG4gIGxldCBsYXllckRhdGE7XG4gIHRyeSB7XG4gICAgLy8gTWFrZSBzdXJlIHRoZSBsYXllciB1cGRhdGVzIGRhdGEgYWZ0ZXIgYW4gZXJyb3JcbiAgICBpZiAoIWxheWVyLmlzVmFsaWQpIHtcbiAgICAgIGxheWVyLl9vbGREYXRhVXBkYXRlVHJpZ2dlcnMgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKCFsYXllci50eXBlIHx8ICFsYXllci5oYXNBbGxDb2x1bW5zKCkgfHwgIWxheWVyLmNvbmZpZy5kYXRhSWQpIHtcbiAgICAgIHJldHVybiB7bGF5ZXIsIGxheWVyRGF0YToge319O1xuICAgIH1cblxuICAgIGxheWVyRGF0YSA9IGxheWVyLmZvcm1hdExheWVyRGF0YShzdGF0ZS5kYXRhc2V0cywgb2xkTGF5ZXJEYXRhKTtcblxuICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlIGRhdGEgZm9yIHRoZSBsYXllciBpcyB1cGRhdGVkIHdpdGhvdXQgZXJyb3JzXG4gICAgaWYgKCFsYXllci5pc1ZhbGlkKSB7XG4gICAgICAvLyBTd2l0Y2ggdG8gdmlzaWJsZSBhZnRlciBhbiBlcnJvclxuICAgICAgbGF5ZXIgPSBsYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgIGlzVmlzaWJsZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuICAgIGxheWVyLmlzVmFsaWQgPSB0cnVlO1xuICAgIGxheWVyLmVycm9yTWVzc2FnZSA9IG51bGw7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIENvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICBsYXllciA9IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgIGlzVmlzaWJsZTogZmFsc2VcbiAgICB9KTtcbiAgICBsYXllci5pc1ZhbGlkID0gZmFsc2U7XG5cbiAgICBsYXllci5lcnJvck1lc3NhZ2UgPVxuICAgICAgZXJyIGluc3RhbmNlb2YgRXJyb3IgJiYgZXJyLm1lc3NhZ2UgPyBlcnIubWVzc2FnZS5zdWJzdHJpbmcoMCwgMTAwKSA6ICdVbmtub3duIGVycm9yJztcblxuICAgIGxheWVyRGF0YSA9IHt9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBsYXllcixcbiAgICBsYXllckRhdGFcbiAgfTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGUgcHJvcHMgcGFzc2VkIHRvIExheWVySG92ZXJJbmZvXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXllckhvdmVyUHJvcCh7XG4gIGFuaW1hdGlvbkNvbmZpZyxcbiAgaW50ZXJhY3Rpb25Db25maWcsXG4gIGhvdmVySW5mbyxcbiAgbGF5ZXJzLFxuICBsYXllcnNUb1JlbmRlcixcbiAgZGF0YXNldHNcbn06IHtcbiAgaW50ZXJhY3Rpb25Db25maWc6IFZpc1N0YXRlWydpbnRlcmFjdGlvbkNvbmZpZyddO1xuICBhbmltYXRpb25Db25maWc6IFZpc1N0YXRlWydhbmltYXRpb25Db25maWcnXTtcbiAgaG92ZXJJbmZvOiBWaXNTdGF0ZVsnaG92ZXJJbmZvJ107XG4gIGxheWVyczogVmlzU3RhdGVbJ2xheWVycyddO1xuICBsYXllcnNUb1JlbmRlcjogTGF5ZXJzVG9SZW5kZXI7XG4gIGRhdGFzZXRzOiBWaXNTdGF0ZVsnZGF0YXNldHMnXTtcbn0pOiBMYXllckhvdmVyUHJvcCB8IG51bGwge1xuICBpZiAoaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5lbmFibGVkICYmIGhvdmVySW5mbyAmJiBob3ZlckluZm8ucGlja2VkKSB7XG4gICAgLy8gaWYgYW55dGhpbmcgaG92ZXJlZFxuICAgIGNvbnN0IHtvYmplY3QsIGxheWVyOiBvdmVybGF5fSA9IGhvdmVySW5mbztcblxuICAgIC8vIGRlY2tnbCBsYXllciB0byBrZXBsZXItZ2wgbGF5ZXJcbiAgICBjb25zdCBsYXllciA9IGxheWVyc1tvdmVybGF5LnByb3BzLmlkeF07XG5cbiAgICAvLyBOT1RFOiBmb3IgYmluYXJ5IGZvcm1hdCBHZW9qc29uTGF5ZXIsIGRlY2sgd2lsbCByZXR1cm4gb2JqZWN0PW51bGwgYnV0IGhvdmVySW5mby5pbmRleCA+PSAwXG4gICAgaWYgKFxuICAgICAgKG9iamVjdCB8fCBob3ZlckluZm8uaW5kZXggPj0gMCkgJiZcbiAgICAgIGxheWVyICYmXG4gICAgICBsYXllci5nZXRIb3ZlckRhdGEgJiZcbiAgICAgIGxheWVyc1RvUmVuZGVyW2xheWVyLmlkXVxuICAgICkge1xuICAgICAgLy8gaWYgbGF5ZXIgaXMgdmlzaWJsZSBhbmQgaGF2ZSBob3ZlcmVkIGRhdGFcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY29uZmlnOiB7ZGF0YUlkfVxuICAgICAgfSA9IGxheWVyO1xuICAgICAgaWYgKCFkYXRhSWQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCB7ZGF0YUNvbnRhaW5lciwgZmllbGRzfSA9IGRhdGFzZXRzW2RhdGFJZF07XG4gICAgICBjb25zdCBkYXRhOiBEYXRhUm93IHwgbnVsbCA9IGxheWVyLmdldEhvdmVyRGF0YShcbiAgICAgICAgb2JqZWN0IHx8IGhvdmVySW5mby5pbmRleCxcbiAgICAgICAgZGF0YUNvbnRhaW5lcixcbiAgICAgICAgZmllbGRzLFxuICAgICAgICBhbmltYXRpb25Db25maWcsXG4gICAgICAgIGhvdmVySW5mb1xuICAgICAgKTtcbiAgICAgIGlmICghZGF0YSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZpZWxkc1RvU2hvdyA9IGludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuY29uZmlnLmZpZWxkc1RvU2hvd1tkYXRhSWRdO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhLFxuICAgICAgICBmaWVsZHMsXG4gICAgICAgIGZpZWxkc1RvU2hvdyxcbiAgICAgICAgbGF5ZXIsXG4gICAgICAgIGN1cnJlbnRUaW1lOiBhbmltYXRpb25Db25maWcuY3VycmVudFRpbWUsXG4gICAgICAgIHRpbWV6b25lOiBpbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmNvbmZpZy50aW1lem9uZVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuY29uc3QgWk9PTV9PUEFDSVRZX1BST1BfS0VZUyA9IFsnb3BhY2l0eScsICdsaW5lT3BhY2l0eScsICdzdHJva2VPcGFjaXR5J107XG5cbi8qKiBTdHJva2UgYW5kIG91dGxpbmUgcHJvcHMgcmVwbGFjZSB0aGUgcGFyZW50IG9wYWNpdHksIHNvIHRoZXkgbmVlZCB0aGUgc2FtZSBmYWN0b3IuICovXG5mdW5jdGlvbiBzY2FsZVpvb21PcGFjaXR5U3ViTGF5ZXJQcm9wcyhcbiAgc3ViTGF5ZXJQcm9wczogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCxcbiAgZmFjdG9yOiBudW1iZXJcbik6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAoIXN1YkxheWVyUHJvcHMpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGxldCBjaGFuZ2VkID0gZmFsc2U7XG4gIGNvbnN0IG5leHQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgZm9yIChjb25zdCBpZCBvZiBPYmplY3Qua2V5cyhzdWJMYXllclByb3BzKSkge1xuICAgIGNvbnN0IHN1YmxheWVyID0gc3ViTGF5ZXJQcm9wc1tpZF07XG4gICAgaWYgKCFzdWJsYXllciB8fCB0eXBlb2Ygc3VibGF5ZXIgIT09ICdvYmplY3QnKSB7XG4gICAgICBuZXh0W2lkXSA9IHN1YmxheWVyO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHNjYWxlZCA9IHsuLi5zdWJsYXllcn07XG4gICAgbGV0IHN1YmxheWVyQ2hhbmdlZCA9IGZhbHNlO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIFpPT01fT1BBQ0lUWV9QUk9QX0tFWVMpIHtcbiAgICAgIGlmICh0eXBlb2Ygc3VibGF5ZXJba2V5XSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgc2NhbGVkW2tleV0gPSBzdWJsYXllcltrZXldICogZmFjdG9yO1xuICAgICAgICBzdWJsYXllckNoYW5nZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBuZXh0W2lkXSA9IHN1YmxheWVyQ2hhbmdlZCA/IHNjYWxlZCA6IHN1YmxheWVyO1xuICAgIGlmIChzdWJsYXllckNoYW5nZWQpIHtcbiAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY2hhbmdlZCA/IG5leHQgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGFwcGx5Wm9vbU9wYWNpdHlUb0RlY2tMYXllcihkZWNrTGF5ZXI6IGFueSwgZmFjdG9yOiBudW1iZXIpOiBhbnkge1xuICBpZiAoQXJyYXkuaXNBcnJheShkZWNrTGF5ZXIpKSB7XG4gICAgcmV0dXJuIGRlY2tMYXllci5tYXAobGF5ZXIgPT4gYXBwbHlab29tT3BhY2l0eVRvRGVja0xheWVyKGxheWVyLCBmYWN0b3IpKTtcbiAgfVxuICBpZiAoIWRlY2tMYXllciB8fCBmYWN0b3IgPT09IDEgfHwgdHlwZW9mIGRlY2tMYXllci5jbG9uZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBkZWNrTGF5ZXI7XG4gIH1cbiAgY29uc3QgYmFzZU9wYWNpdHkgPSBkZWNrTGF5ZXIucHJvcHM/Lm9wYWNpdHk7XG4gIGNvbnN0IG9wYWNpdHkgPSAodHlwZW9mIGJhc2VPcGFjaXR5ID09PSAnbnVtYmVyJyA/IGJhc2VPcGFjaXR5IDogMSkgKiBmYWN0b3I7XG4gIGNvbnN0IHN1YkxheWVyUHJvcHMgPSBzY2FsZVpvb21PcGFjaXR5U3ViTGF5ZXJQcm9wcyhkZWNrTGF5ZXIucHJvcHM/Ll9zdWJMYXllclByb3BzLCBmYWN0b3IpO1xuICByZXR1cm4gZGVja0xheWVyLmNsb25lKHtcbiAgICBvcGFjaXR5LFxuICAgIC8vIEZ1bGx5IGZhZGVkIGxheWVycyBhcmUgbm90IHBpY2thYmxlLlxuICAgIHZpc2libGU6IGRlY2tMYXllci5wcm9wcz8udmlzaWJsZSAhPT0gZmFsc2UgJiYgZmFjdG9yID4gMCxcbiAgICAuLi4oc3ViTGF5ZXJQcm9wcyA/IHtfc3ViTGF5ZXJQcm9wczogc3ViTGF5ZXJQcm9wc30gOiB7fSlcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJEZWNrR2xMYXllcihwcm9wczogYW55LCBsYXllckNhbGxiYWNrczoge1trZXk6IHN0cmluZ106IGFueX0pIHtcbiAgY29uc3Qge1xuICAgIGRhdGFzZXRzLFxuICAgIGxheWVyLFxuICAgIGxheWVySW5kZXgsXG4gICAgZGF0YSxcbiAgICBob3ZlckluZm8sXG4gICAgY2xpY2tlZCxcbiAgICBtYXBTdGF0ZSxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICBhbmltYXRpb25Db25maWcsXG4gICAgbWFwTGF5ZXJzLFxuICAgIGV4cGVyaW1lbnRhbENvbnRleHRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBkYXRhc2V0ID0gZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gIGNvbnN0IHtncHVGaWx0ZXJ9ID0gZGF0YXNldCB8fCB7fTtcbiAgY29uc3Qgb2JqZWN0SG92ZXJlZCA9IGNsaWNrZWQgfHwgaG92ZXJJbmZvO1xuICAvLyBpbiBzcGxpdCBtb2RlIGEgbGF5ZXIgbWlzc2luZyBmcm9tIG1hcExheWVycyBpcyBoaWRkZW4sIHNvIGNvZXJjZSB0byBhIGJvb2xlYW5cbiAgLy8gaW5zdGVhZCBvZiBsZWFraW5nIHVuZGVmaW5lZCBpbnRvIGRlY2suZ2wncyB2aXNpYmxlIHByb3BcbiAgY29uc3QgdmlzaWJsZSA9ICFtYXBMYXllcnMgfHwgQm9vbGVhbihtYXBMYXllcnNbbGF5ZXIuaWRdKTtcbiAgLy8gTGF5ZXIgaXMgTGF5ZXIgY2xhc3NcbiAgY29uc3QgcmVuZGVyZWQgPSBsYXllci5yZW5kZXJMYXllcih7XG4gICAgZGF0YSxcbiAgICBncHVGaWx0ZXIsXG4gICAgaWR4OiBsYXllckluZGV4LFxuICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgIGxheWVyQ2FsbGJhY2tzLFxuICAgIG1hcFN0YXRlLFxuICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICBvYmplY3RIb3ZlcmVkLFxuICAgIHZpc2libGUsXG4gICAgZGF0YXNldCxcbiAgICBleHBlcmltZW50YWxDb250ZXh0XG4gIH0pO1xuICBjb25zdCBmYWN0b3IgPSBnZXRMYXllclpvb21PcGFjaXR5RmFjdG9yKGxheWVyLmlkLCBtYXBTdGF0ZT8uem9vbSwgaW50ZXJhY3Rpb25Db25maWcpO1xuICByZXR1cm4gYXBwbHlab29tT3BhY2l0eVRvRGVja0xheWVyKHJlbmRlcmVkLCBmYWN0b3IpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMYXllclJlbmRlcmFibGUobGF5ZXI6IExheWVyLCBsYXllckRhdGEpIHtcbiAgcmV0dXJuIGxheWVyLmlkICE9PSBHRU9DT0RFUl9MQVlFUl9JRCAmJiBsYXllci5zaG91bGRSZW5kZXJMYXllcihsYXllckRhdGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMYXllclZpc2libGUobGF5ZXIsIG1hcExheWVycykge1xuICByZXR1cm4gKFxuICAgIGxheWVyLmNvbmZpZy5pc1Zpc2libGUgJiZcbiAgICAvLyBpZiBsYXllci5pZCBpcyBub3QgaW4gbWFwTGF5ZXJzLCBkb24ndCByZW5kZXIgaXRcbiAgICAoIW1hcExheWVycyB8fCAobWFwTGF5ZXJzICYmIG1hcExheWVyc1tsYXllci5pZF0pKVxuICApO1xufVxuXG4vLyBQcmVwYXJlIGEgZGljdCBvZiBsYXllcnMgcmVuZGVyZWQgYnkgdGhlIGRlY2suZ2xcbi8vIE5vdGUsIGlzVmlzaWJsZTogZmFsc2UgbGF5ZXIgaXMgcGFzc2VkIHRvIGRlY2suZ2wgaGVyZVxuLy8gcmV0dXJuIHtbaWRdOiB0cnVlIFxcIGZhbHNlfVxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVMYXllcnNGb3JEZWNrKFxuICBsYXllcnM6IExheWVyW10sXG4gIGxheWVyRGF0YTogVmlzU3RhdGVbJ2xheWVyRGF0YSddXG4pOiB7XG4gIFtrZXk6IHN0cmluZ106IGJvb2xlYW47XG59IHtcbiAgcmV0dXJuIGxheWVycy5yZWR1Y2UoXG4gICAgKGFjY3UsIGxheWVyLCBpZHgpID0+ICh7XG4gICAgICAuLi5hY2N1LFxuICAgICAgW2xheWVyLmlkXTpcbiAgICAgICAgaXNMYXllclJlbmRlcmFibGUobGF5ZXIsIGxheWVyRGF0YVtpZHhdKSAmJiBsYXllci5vdmVybGF5VHlwZSA9PT0gT1ZFUkxBWV9UWVBFX0NPTlNULmRlY2tnbFxuICAgIH0pLFxuICAgIHt9XG4gICk7XG59XG5cbi8vIFByZXBhcmUgYSBkaWN0IG9mIHJlbmRlcmVkIGxheWVycyByZW5kZXJlZCBpbiB0aGUgbWFwXG4vLyBUaGlzIGluY2x1ZGVzIG9ubHkgdGhlIHZpc2liaWxlIGxheWVycyBmb3Igc2luZ2xlIG1hcCB2aWV3IGFuZCBzcGxpdCBtYXAgdmlld1xuLy8gcmV0dXJuIHtbaWRdOiB0cnVlIFxcIGZhbHNlfVxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVMYXllcnNUb1JlbmRlcihcbiAgbGF5ZXJzOiBMYXllcltdLFxuICBsYXllckRhdGE6IFZpc1N0YXRlWydsYXllckRhdGEnXSxcbiAgbWFwTGF5ZXJzPzogU3BsaXRNYXBMYXllcnMgfCB1bmRlZmluZWQgfCBudWxsXG4pOiBMYXllcnNUb1JlbmRlciB7XG4gIHJldHVybiBsYXllcnMucmVkdWNlKFxuICAgIChhY2N1LCBsYXllciwgaWR4KSA9PiAoe1xuICAgICAgLi4uYWNjdSxcbiAgICAgIFtsYXllci5pZF06IGlzTGF5ZXJSZW5kZXJhYmxlKGxheWVyLCBsYXllckRhdGFbaWR4XSkgJiYgaXNMYXllclZpc2libGUobGF5ZXIsIG1hcExheWVycylcbiAgICB9KSxcbiAgICB7fVxuICApO1xufVxuXG50eXBlIEN1c3RvbURlY2tMYXllciA9IERlY2tMYXllcjxEZWNrTGF5ZXJQcm9wcz47XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXN0b21EZWNrTGF5ZXJzKGRlY2tHbFByb3BzPzogYW55KTogW0N1c3RvbURlY2tMYXllcltdLCBDdXN0b21EZWNrTGF5ZXJbXV0ge1xuICBjb25zdCBib3R0b21EZWNrTGF5ZXJzID0gQXJyYXkuaXNBcnJheShkZWNrR2xQcm9wcz8ubGF5ZXJzKVxuICAgID8gZGVja0dsUHJvcHM/LmxheWVyc1xuICAgIDogaXNGdW5jdGlvbihkZWNrR2xQcm9wcz8ubGF5ZXJzKVxuICAgID8gZGVja0dsUHJvcHM/LmxheWVycygpXG4gICAgOiBbXTtcbiAgY29uc3QgdG9wRGVja0xheWVycyA9IEFycmF5LmlzQXJyYXkoZGVja0dsUHJvcHM/LnRvcExheWVycylcbiAgICA/IGRlY2tHbFByb3BzPy50b3BMYXllcnNcbiAgICA6IGlzRnVuY3Rpb24oZGVja0dsUHJvcHM/LnRvcExheWVycylcbiAgICA/IGRlY2tHbFByb3BzPy50b3BMYXllcnMoKVxuICAgIDogW107XG5cbiAgcmV0dXJuIFtib3R0b21EZWNrTGF5ZXJzLCB0b3BEZWNrTGF5ZXJzXTtcbn1cblxuZXhwb3J0IHR5cGUgQ29tcHV0ZURlY2tMYXllcnNQcm9wcyA9IHtcbiAgbWFwSW5kZXg/OiBudW1iZXI7XG4gIG1hcGJveEFwaUFjY2Vzc1Rva2VuPzogc3RyaW5nO1xuICBtYXBib3hBcGlVcmw/OiBzdHJpbmc7XG4gIHByaW1hcnlNYXA/OiBib29sZWFuO1xuICBpc0Fubm90YXRpb25Nb2RlPzogYm9vbGVhbjtcbiAgbGF5ZXJzRm9yRGVjaz86IHtba2V5OiBzdHJpbmddOiBib29sZWFufTtcbiAgZWRpdG9ySW5mbz86IHtcbiAgICBlZGl0b3I6IEVkaXRvcjtcbiAgICBlZGl0b3JNZW51QWN0aXZlOiBib29sZWFuO1xuICAgIG9uU2V0RmVhdHVyZXM6IChmZWF0dXJlczogRmVhdHVyZVtdKSA9PiBhbnk7XG4gICAgc2V0U2VsZWN0ZWRGZWF0dXJlOiAoXG4gICAgICBmZWF0dXJlOiBGZWF0dXJlIHwgbnVsbCxcbiAgICAgIHNlbGVjdGlvbkNvbnRleHQ/OiBGZWF0dXJlU2VsZWN0aW9uQ29udGV4dFxuICAgICkgPT4gYW55O1xuICAgIG9uQXBwbHlQb2x5Z29uRmlsdGVyQWxsPzogKGZlYXR1cmU6IEZlYXR1cmUpID0+IGFueTtcbiAgICBmZWF0dXJlQ29sbGVjdGlvbjoge1xuICAgICAgdHlwZTogc3RyaW5nO1xuICAgICAgZmVhdHVyZXM6IEZlYXR1cmVbXTtcbiAgICB9O1xuICAgIHNlbGVjdGVkRmVhdHVyZUluZGV4ZXM6IG51bWJlcltdO1xuICAgIHZpZXdwb3J0OiBWaWV3cG9ydDtcbiAgfTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBiaW5kTGF5ZXJDYWxsYmFja3MoXG4gIGxheWVyQ2FsbGJhY2tzOiBMYXllckNhbGxiYWNrcyA9IHt9LFxuICBpZHg6IG51bWJlclxuKTogQmluZGVkTGF5ZXJDYWxsYmFja3Mge1xuICByZXR1cm4gT2JqZWN0LmtleXMobGF5ZXJDYWxsYmFja3MpLnJlZHVjZShcbiAgICAoYWNjdSwga2V5KSA9PiAoe1xuICAgICAgLi4uYWNjdSxcbiAgICAgIFtrZXldOiB2YWwgPT4gbGF5ZXJDYWxsYmFja3Nba2V5XShpZHgsIHZhbClcbiAgICB9KSxcbiAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCAodmFsOiB1bmtub3duKSA9PiB2b2lkPlxuICApO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlRGVja0xheWVyc0Zyb21MYXllck9yZGVyKFxuICBsYXllck9yZGVyOiBMYXllck9yZGVyLFxuICBsYXllcnM6IExheWVyW10sXG4gIGxheWVyRGF0YTogYW55W10sXG4gIGN1cnJlbnRMYXllcnNGb3JEZWNrOiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn0sXG4gIHJlbmRlclByb3BzOiB7XG4gICAgZGF0YXNldHM6IGFueTtcbiAgICBob3ZlckluZm86IGFueTtcbiAgICBjbGlja2VkOiBhbnk7XG4gICAgbWFwU3RhdGU6IGFueTtcbiAgICBpbnRlcmFjdGlvbkNvbmZpZzogYW55O1xuICAgIGFuaW1hdGlvbkNvbmZpZzogYW55O1xuICAgIG1hcExheWVyczogYW55O1xuICAgIGhhc1NoYWRvd0VmZmVjdDogYm9vbGVhbjtcbiAgICBpc0Fubm90YXRpb25Nb2RlPzogYm9vbGVhbjtcbiAgfSxcbiAgbGF5ZXJDYWxsYmFja3M/OiBhbnlcbik6IGFueVtdIHtcbiAgY29uc3Qge1xuICAgIGRhdGFzZXRzLFxuICAgIGhvdmVySW5mbyxcbiAgICBjbGlja2VkLFxuICAgIG1hcFN0YXRlLFxuICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICBtYXBMYXllcnMsXG4gICAgaGFzU2hhZG93RWZmZWN0LFxuICAgIGlzQW5ub3RhdGlvbk1vZGVcbiAgfSA9IHJlbmRlclByb3BzO1xuICByZXR1cm4gbGF5ZXJPcmRlclxuICAgIC5zbGljZSgpXG4gICAgLnJldmVyc2UoKVxuICAgIC5yZWR1Y2UoKG92ZXJsYXlzLCBlbGVtZW50KSA9PiB7XG4gICAgICBpZiAoaXNQbGFpbk9iamVjdChlbGVtZW50KSkge1xuICAgICAgICBjb25zdCBsYXllckdyb3VwID0gZWxlbWVudCBhcyBMYXllck9yZGVyR3JvdXA7XG4gICAgICAgIGlmICghbGF5ZXJHcm91cC5pc1Zpc2libGUpIHtcbiAgICAgICAgICByZXR1cm4gb3ZlcmxheXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG92ZXJsYXlzLmNvbmNhdChcbiAgICAgICAgICBjb21wdXRlRGVja0xheWVyc0Zyb21MYXllck9yZGVyKFxuICAgICAgICAgICAgbGF5ZXJHcm91cC5sYXllck9yZGVyLFxuICAgICAgICAgICAgbGF5ZXJzLFxuICAgICAgICAgICAgbGF5ZXJEYXRhLFxuICAgICAgICAgICAgY3VycmVudExheWVyc0ZvckRlY2ssXG4gICAgICAgICAgICByZW5kZXJQcm9wcyxcbiAgICAgICAgICAgIGxheWVyQ2FsbGJhY2tzXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29uc3QgbGF5ZXJJZCA9IGVsZW1lbnQgYXMgc3RyaW5nO1xuICAgICAgaWYgKCFjdXJyZW50TGF5ZXJzRm9yRGVja1tsYXllcklkXSkge1xuICAgICAgICByZXR1cm4gb3ZlcmxheXM7XG4gICAgICB9XG4gICAgICBjb25zdCBsYXllckluZGV4ID0gbGF5ZXJzLmZpbmRJbmRleCgoe2lkfSkgPT4gaWQgPT09IGxheWVySWQpO1xuICAgICAgaWYgKGxheWVySW5kZXggPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBvdmVybGF5cztcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJpbmRlZExheWVyQ2FsbGJhY2tzID0gbGF5ZXJDYWxsYmFja3NcbiAgICAgICAgPyBiaW5kTGF5ZXJDYWxsYmFja3MobGF5ZXJDYWxsYmFja3MsIGxheWVySW5kZXgpXG4gICAgICAgIDoge307XG4gICAgICBjb25zdCBsYXllciA9IGxheWVyc1tsYXllckluZGV4XTtcbiAgICAgIGNvbnN0IGRhdGEgPSBsYXllckRhdGFbbGF5ZXJJbmRleF07XG4gICAgICBjb25zdCBsYXllck92ZXJsYXkgPSByZW5kZXJEZWNrR2xMYXllcihcbiAgICAgICAge1xuICAgICAgICAgIGRhdGFzZXRzLFxuICAgICAgICAgIGxheWVyLFxuICAgICAgICAgIGxheWVySW5kZXgsXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBob3ZlckluZm8sXG4gICAgICAgICAgY2xpY2tlZCxcbiAgICAgICAgICBtYXBTdGF0ZSxcbiAgICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgICAgICBhbmltYXRpb25Db25maWcsXG4gICAgICAgICAgbWFwTGF5ZXJzLFxuICAgICAgICAgIGV4cGVyaW1lbnRhbENvbnRleHQ6IHtcbiAgICAgICAgICAgIGhhc1NoYWRvd0VmZmVjdCxcbiAgICAgICAgICAgIGlzQW5ub3RhdGlvbk1vZGVcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGJpbmRlZExheWVyQ2FsbGJhY2tzXG4gICAgICApO1xuICAgICAgcmV0dXJuIG92ZXJsYXlzLmNvbmNhdChsYXllck92ZXJsYXkgfHwgW10pO1xuICAgIH0sIFtdIGFzIGFueVtdKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlRGVja0xheWVycyhcbiAge3Zpc1N0YXRlLCBtYXBTdGF0ZSwgbWFwU3R5bGV9OiBhbnksXG4gIG9wdGlvbnM/OiBDb21wdXRlRGVja0xheWVyc1Byb3BzLFxuICBsYXllckNhbGxiYWNrcz86IExheWVyQ2FsbGJhY2tzLFxuICBkZWNrR2xQcm9wcz86IGFueVxuKTogTGF5ZXJbXSB7XG4gIGNvbnN0IHtcbiAgICBkYXRhc2V0cyxcbiAgICBlZmZlY3RzLFxuICAgIGxheWVycyxcbiAgICBsYXllck9yZGVyLFxuICAgIGxheWVyRGF0YSxcbiAgICBob3ZlckluZm8sXG4gICAgY2xpY2tlZCxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICBhbmltYXRpb25Db25maWcsXG4gICAgc3BsaXRNYXBzXG4gIH0gPSB2aXNTdGF0ZTtcblxuICBjb25zdCB7XG4gICAgbWFwSW5kZXgsXG4gICAgbWFwYm94QXBpQWNjZXNzVG9rZW4sXG4gICAgbWFwYm94QXBpVXJsLFxuICAgIHByaW1hcnlNYXAsXG4gICAgbGF5ZXJzRm9yRGVjayxcbiAgICBlZGl0b3JJbmZvLFxuICAgIGlzQW5ub3RhdGlvbk1vZGVcbiAgfSA9IG9wdGlvbnMgfHwge307XG5cbiAgbGV0IGRhdGFMYXllcnM6IGFueVtdID0gW107XG5cbiAgY29uc3QgaGFzU2hhZG93RWZmZWN0ID0gZWZmZWN0cy5zb21lKGVmZmVjdCA9PiB7XG4gICAgcmV0dXJuIGVmZmVjdC50eXBlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC50eXBlO1xuICB9KTtcblxuICBpZiAobGF5ZXJEYXRhICYmIGxheWVyRGF0YS5sZW5ndGgpIHtcbiAgICBjb25zdCBtYXBMYXllcnMgPSBnZXRNYXBMYXllcnNGcm9tU3BsaXRNYXBzKHNwbGl0TWFwcywgbWFwSW5kZXggfHwgMCk7XG5cbiAgICBjb25zdCBjdXJyZW50TGF5ZXJzRm9yRGVjayA9IGxheWVyc0ZvckRlY2sgfHwgcHJlcGFyZUxheWVyc0ZvckRlY2sobGF5ZXJzLCBsYXllckRhdGEpO1xuXG4gICAgZGF0YUxheWVycyA9IGxheWVyT3JkZXJcbiAgICAgIC5zbGljZSgpXG4gICAgICAucmV2ZXJzZSgpXG4gICAgICAucmVkdWNlKChvdmVybGF5cywgZWxlbWVudCkgPT4ge1xuICAgICAgICBpZiAoaXNQbGFpbk9iamVjdChlbGVtZW50KSkge1xuICAgICAgICAgIGNvbnN0IGxheWVyR3JvdXAgPSBlbGVtZW50IGFzIExheWVyT3JkZXJHcm91cDtcbiAgICAgICAgICBpZiAoIWxheWVyR3JvdXAuaXNWaXNpYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gb3ZlcmxheXM7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvdmVybGF5cy5jb25jYXQoXG4gICAgICAgICAgICBjb21wdXRlRGVja0xheWVyc0Zyb21MYXllck9yZGVyKFxuICAgICAgICAgICAgICBsYXllckdyb3VwLmxheWVyT3JkZXIsXG4gICAgICAgICAgICAgIGxheWVycyxcbiAgICAgICAgICAgICAgbGF5ZXJEYXRhLFxuICAgICAgICAgICAgICBjdXJyZW50TGF5ZXJzRm9yRGVjayxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRhdGFzZXRzLFxuICAgICAgICAgICAgICAgIGhvdmVySW5mbyxcbiAgICAgICAgICAgICAgICBjbGlja2VkLFxuICAgICAgICAgICAgICAgIG1hcFN0YXRlLFxuICAgICAgICAgICAgICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgICAgICAgICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgICAgICAgICBtYXBMYXllcnMsXG4gICAgICAgICAgICAgICAgaGFzU2hhZG93RWZmZWN0LFxuICAgICAgICAgICAgICAgIGlzQW5ub3RhdGlvbk1vZGVcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbGF5ZXJDYWxsYmFja3NcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxheWVySWQgPSBlbGVtZW50IGFzIHN0cmluZztcbiAgICAgICAgaWYgKCFjdXJyZW50TGF5ZXJzRm9yRGVja1tsYXllcklkXSkge1xuICAgICAgICAgIHJldHVybiBvdmVybGF5cztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsYXllckluZGV4ID0gbGF5ZXJzLmZpbmRJbmRleCgoe2lkfSkgPT4gaWQgPT09IGxheWVySWQpO1xuICAgICAgICBpZiAobGF5ZXJJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICByZXR1cm4gb3ZlcmxheXM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYmluZGVkTGF5ZXJDYWxsYmFja3MgPSBsYXllckNhbGxiYWNrc1xuICAgICAgICAgID8gYmluZExheWVyQ2FsbGJhY2tzKGxheWVyQ2FsbGJhY2tzLCBsYXllckluZGV4KVxuICAgICAgICAgIDoge307XG4gICAgICAgIGNvbnN0IGxheWVyID0gbGF5ZXJzW2xheWVySW5kZXhdO1xuICAgICAgICBjb25zdCBkYXRhID0gbGF5ZXJEYXRhW2xheWVySW5kZXhdO1xuICAgICAgICBjb25zdCBsYXllck92ZXJsYXkgPSByZW5kZXJEZWNrR2xMYXllcihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkYXRhc2V0cyxcbiAgICAgICAgICAgIGxheWVyLFxuICAgICAgICAgICAgbGF5ZXJJbmRleCxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBob3ZlckluZm8sXG4gICAgICAgICAgICBjbGlja2VkLFxuICAgICAgICAgICAgbWFwU3RhdGUsXG4gICAgICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgICAgICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgICAgIG1hcExheWVycyxcbiAgICAgICAgICAgIGV4cGVyaW1lbnRhbENvbnRleHQ6IHtcbiAgICAgICAgICAgICAgaGFzU2hhZG93RWZmZWN0LFxuICAgICAgICAgICAgICBpc0Fubm90YXRpb25Nb2RlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBiaW5kZWRMYXllckNhbGxiYWNrc1xuICAgICAgICApO1xuICAgICAgICByZXR1cm4gb3ZlcmxheXMuY29uY2F0KGxheWVyT3ZlcmxheSB8fCBbXSk7XG4gICAgICB9LCBbXSk7XG4gIH1cblxuICBpZiAoIXByaW1hcnlNYXApIHtcbiAgICByZXR1cm4gZGF0YUxheWVycztcbiAgfVxuXG4gIGlmIChcbiAgICBtYXBTdHlsZT8udmlzaWJsZUxheWVyR3JvdXBzWyczZCBidWlsZGluZyddICYmXG4gICAgcHJpbWFyeU1hcCAmJlxuICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuICYmXG4gICAgbWFwYm94QXBpVXJsXG4gICkge1xuICAgIGRhdGFMYXllcnMucHVzaChcbiAgICAgIG5ldyBUaHJlZURCdWlsZGluZ0xheWVyKHtcbiAgICAgICAgaWQ6ICdfa2VwbGVyZ2xfM2QtYnVpbGRpbmcnLFxuICAgICAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgICAgICAgbWFwYm94QXBpVXJsLFxuICAgICAgICB0aHJlZURCdWlsZGluZ0NvbG9yOiBtYXBTdHlsZS50aHJlZURCdWlsZGluZ0NvbG9yLFxuICAgICAgICBwaWNrYWJsZTogQm9vbGVhbihpc0Fubm90YXRpb25Nb2RlKSxcbiAgICAgICAgdXBkYXRlVHJpZ2dlcnM6IHtcbiAgICAgICAgICBnZXRGaWxsQ29sb3I6IG1hcFN0eWxlLnRocmVlREJ1aWxkaW5nQ29sb3JcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgY29uc3QgW2N1c3RvbUJvdHRvbURlY2tMYXllcnMsIGN1c3RvbVRvcERlY2tMYXllcnNdID0gZ2V0Q3VzdG9tRGVja0xheWVycyhkZWNrR2xQcm9wcyk7XG5cbiAgY29uc3QgZWRpdG9yTGF5ZXI6IGFueVtdID0gW107XG4gIGlmIChlZGl0b3JJbmZvKSB7XG4gICAgZWRpdG9yTGF5ZXIucHVzaChcbiAgICAgIGdldEVkaXRvckxheWVyKHtcbiAgICAgICAgLi4uZWRpdG9ySW5mbyxcbiAgICAgICAgbWFwU3RhdGVcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBbLi4uY3VzdG9tQm90dG9tRGVja0xheWVycywgLi4uZGF0YUxheWVycywgLi4uY3VzdG9tVG9wRGVja0xheWVycywgLi4uZWRpdG9yTGF5ZXJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGF5ZXJPcmRlckZyb21MYXllcnM8VCBleHRlbmRzIHtpZDogc3RyaW5nfT4obGF5ZXJzOiBUW10pOiBzdHJpbmdbXSB7XG4gIHJldHVybiBsYXllcnMubWFwKCh7aWR9KSA9PiBpZCk7XG59XG5cbi8vIC0tLSBMYXllciBHcm91cCBVdGlsaXRpZXMgLS0tXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXdMYXllckdyb3VwKHByb3BzPzogUGFydGlhbDxMYXllck9yZGVyR3JvdXA+KTogTGF5ZXJPcmRlckdyb3VwIHtcbiAgcmV0dXJuIHtcbiAgICBpZDogcHJvcHM/LmlkID8/IGdlbmVyYXRlSGFzaElkKDYpLFxuICAgIGxhYmVsOiBwcm9wcz8ubGFiZWwgPz8gJ05ldyBncm91cCcsXG4gICAgaXNWaXNpYmxlOiBwcm9wcz8uaXNWaXNpYmxlID8/IHRydWUsXG4gICAgbGF5ZXJPcmRlcjogcHJvcHM/LmxheWVyT3JkZXIgPz8gW10sXG4gICAgaXNJbmNsdWRlZEluTGVnZW5kOiBwcm9wcz8uaXNJbmNsdWRlZEluTGVnZW5kID8/IHRydWVcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgZWxlbWVudDogTGF5ZXJPcmRlckVudHJ5LFxuICBhdEluZGV4PzogbnVtYmVyXG4pOiBMYXllck9yZGVyIHtcbiAgY29uc3QgaWR4ID0gYXRJbmRleCA/PyAwO1xuICBjb25zdCByZXN1bHQgPSBbLi4ubGF5ZXJPcmRlcl07XG4gIHJlc3VsdC5zcGxpY2UoaWR4LCAwLCBlbGVtZW50KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgZWxlbWVudDogTGF5ZXJPcmRlckVudHJ5XG4pOiBMYXllck9yZGVyIHtcbiAgaWYgKCFsYXllck9yZGVyKSByZXR1cm4gW107XG4gIGNvbnN0IGVsZW1lbnRJZCA9IHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJyA/IGVsZW1lbnQgOiBlbGVtZW50LmlkO1xuICBsZXQgbmV3TGF5ZXJPcmRlciA9IGxheWVyT3JkZXIuZmlsdGVyKGVudHJ5ID0+IHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgIHJldHVybiAoZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwKS5pZCAhPT0gZWxlbWVudElkO1xuICAgIH1cbiAgICByZXR1cm4gZW50cnkgIT09IGVsZW1lbnRJZDtcbiAgfSk7XG5cbiAgbmV3TGF5ZXJPcmRlciA9IG5ld0xheWVyT3JkZXIubWFwKGVudHJ5ID0+IHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgIGNvbnN0IGdyb3VwID0gZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZ3JvdXAsXG4gICAgICAgIGxheWVyT3JkZXI6IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihncm91cC5sYXllck9yZGVyLCBlbGVtZW50SWQpXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZW50cnk7XG4gIH0pO1xuXG4gIHJldHVybiBuZXdMYXllck9yZGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKFxuICBsYXllck9yZGVyOiBMYXllck9yZGVyLFxuICBsYXllckdyb3VwSWQ6IHN0cmluZ1xuKTogTGF5ZXJPcmRlckdyb3VwIHwgdW5kZWZpbmVkIHtcbiAgbGV0IGdyb3VwOiBMYXllck9yZGVyR3JvdXAgfCB1bmRlZmluZWQ7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGF5ZXJPcmRlci5sZW5ndGggJiYgIWdyb3VwOyBpKyspIHtcbiAgICBjb25zdCBlbnRyeSA9IGxheWVyT3JkZXJbaV07XG4gICAgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICBjb25zdCBncnAgPSBlbnRyeSBhcyBMYXllck9yZGVyR3JvdXA7XG4gICAgICBncm91cCA9XG4gICAgICAgIGdycC5pZCA9PT0gbGF5ZXJHcm91cElkID8gZ3JwIDogZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKGdycC5sYXllck9yZGVyLCBsYXllckdyb3VwSWQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZ3JvdXA7XG59XG5cbi8qKlxuICogR3JvdXBzIHRoYXQgY29udGFpbiBgZW50cnlJZGAsIG5lYXJlc3QgcGFyZW50IGZpcnN0LlxuICogYGVudHJ5SWRgIG1heSBiZSBhIGxheWVyIGlkIG9yIGEgbmVzdGVkIGdyb3VwIGlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QW5jZXN0b3JMYXllckdyb3VwcyhsYXllck9yZGVyOiBMYXllck9yZGVyLCBlbnRyeUlkOiBzdHJpbmcpOiBMYXllck9yZGVyR3JvdXBbXSB7XG4gIGNvbnN0IGFuY2VzdG9yczogTGF5ZXJPcmRlckdyb3VwW10gPSBbXTtcblxuICBjb25zdCB2aXNpdCA9IChlbnRyaWVzOiBMYXllck9yZGVyKTogYm9vbGVhbiA9PiB7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAoZW50cnkgPT09IGVudHJ5SWQpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBncm91cCA9IGVudHJ5IGFzIExheWVyT3JkZXJHcm91cDtcbiAgICAgIGlmIChncm91cC5pZCA9PT0gZW50cnlJZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh2aXNpdChncm91cC5sYXllck9yZGVyKSkge1xuICAgICAgICBhbmNlc3RvcnMucHVzaChncm91cCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgdmlzaXQobGF5ZXJPcmRlcik7XG4gIHJldHVybiBhbmNlc3RvcnM7XG59XG5cbi8qKlxuICogV2hldGhlciBhIGxheWVyIHNob3VsZCBiZSBkcmF3biBpbiB0aGUgbWFwIGxlZ2VuZC5cbiAqIEEgbGF5ZXIgc3RheXMgb24gdGhlIG1hcCB3aGVuIHRoaXMgaXMgZmFsc2UuIE1pc3NpbmcgZmxhZ3MgY291bnQgYXMgaW5jbHVkZWQuXG4gKiBBbiBhbmNlc3RvciBncm91cCB3aXRoIGBpc0luY2x1ZGVkSW5MZWdlbmQ6IGZhbHNlYCBoaWRlcyB0aGUgbGF5ZXIgYXMgd2VsbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTGF5ZXJTaG93bkluTGVnZW5kKFxuICBsYXllcjoge2lkOiBzdHJpbmc7IGNvbmZpZzoge2lzSW5jbHVkZWRJbkxlZ2VuZD86IGJvb2xlYW59fSxcbiAgbGF5ZXJPcmRlcj86IExheWVyT3JkZXJcbik6IGJvb2xlYW4ge1xuICBpZiAobGF5ZXIuY29uZmlnLmlzSW5jbHVkZWRJbkxlZ2VuZCA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKCFsYXllck9yZGVyPy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZ2V0QW5jZXN0b3JMYXllckdyb3VwcyhsYXllck9yZGVyLCBsYXllci5pZCkuZXZlcnkoXG4gICAgZ3JvdXAgPT4gZ3JvdXAuaXNJbmNsdWRlZEluTGVnZW5kICE9PSBmYWxzZVxuICApO1xufVxuXG4vKipcbiAqIEZpbmQgdGhlIHBhcmVudCBncm91cCB0aGF0IGNvbnRhaW5zIGEgZ2l2ZW4gbGF5ZXIgSUQuXG4gKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgbGF5ZXIgaXMgYXQgdGhlIHJvb3QgbGV2ZWwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kUGFyZW50R3JvdXBGb3JMYXllcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgbGF5ZXJJZDogc3RyaW5nXG4pOiBMYXllck9yZGVyR3JvdXAgfCB1bmRlZmluZWQge1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGxheWVyT3JkZXIpIHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgIGNvbnN0IGdyb3VwID0gZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwO1xuICAgICAgaWYgKGdyb3VwLmxheWVyT3JkZXIuc29tZShlID0+IHR5cGVvZiBlID09PSAnc3RyaW5nJyAmJiBlID09PSBsYXllcklkKSkge1xuICAgICAgICByZXR1cm4gZ3JvdXA7XG4gICAgICB9XG4gICAgICBjb25zdCBuZXN0ZWQgPSBmaW5kUGFyZW50R3JvdXBGb3JMYXllcihncm91cC5sYXllck9yZGVyLCBsYXllcklkKTtcbiAgICAgIGlmIChuZXN0ZWQpIHJldHVybiBuZXN0ZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbmRleEZyb21MYXllckVudHJ5SWQobGF5ZXJPcmRlcjogTGF5ZXJPcmRlciwgbGF5ZXJFbnRyeUlkOiBzdHJpbmcpOiBudW1iZXIge1xuICByZXR1cm4gbGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICBpc1BsYWluT2JqZWN0KGVudHJ5KSA/IChlbnRyeSBhcyBMYXllck9yZGVyR3JvdXApLmlkID09PSBsYXllckVudHJ5SWQgOiBlbnRyeSA9PT0gbGF5ZXJFbnRyeUlkXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xheWVyUHJlc2VudEluTGF5ZXJPcmRlcihsYXllck9yZGVyOiBMYXllck9yZGVyLCBsYXllcklkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgbGV0IGZvdW5kID0gZmFsc2U7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGF5ZXJPcmRlci5sZW5ndGggJiYgIWZvdW5kOyBpKyspIHtcbiAgICBjb25zdCBlbnRyeSA9IGxheWVyT3JkZXJbaV07XG4gICAgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICBmb3VuZCA9IGlzTGF5ZXJQcmVzZW50SW5MYXllck9yZGVyKChlbnRyeSBhcyBMYXllck9yZGVyR3JvdXApLmxheWVyT3JkZXIsIGxheWVySWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3VuZCA9IGxheWVySWQgPT09IGVudHJ5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gZm91bmQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgb2xkRW50cnk6IExheWVyT3JkZXJFbnRyeSxcbiAgbmV3RW50cnk6IExheWVyT3JkZXJFbnRyeVxuKTogTGF5ZXJPcmRlciB7XG4gIGNvbnN0IG9sZEVudHJ5SWQgPSB0eXBlb2Ygb2xkRW50cnkgPT09ICdzdHJpbmcnID8gb2xkRW50cnkgOiBvbGRFbnRyeS5pZDtcbiAgcmV0dXJuIGxheWVyT3JkZXIubWFwKGVudHJ5ID0+IHtcbiAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGVudHJ5ID09PSBvbGRFbnRyeUlkID8gbmV3RW50cnkgOiBlbnRyeTtcbiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICBjb25zdCBncnAgPSBlbnRyeSBhcyBMYXllck9yZGVyR3JvdXA7XG4gICAgICBpZiAoZ3JwLmlkID09PSBvbGRFbnRyeUlkKSB7XG4gICAgICAgIHJldHVybiBuZXdFbnRyeTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmdycCxcbiAgICAgICAgbGF5ZXJPcmRlcjogcmVwbGFjZUxheWVyRW50cnlJbkxheWVyT3JkZXIoZ3JwLmxheWVyT3JkZXIsIG9sZEVudHJ5LCBuZXdFbnRyeSlcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBlbnRyeTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyKFxuICBsYXllck9yZGVyOiBMYXllck9yZGVyLFxuICBuZXdMYXllckdyb3VwOiBMYXllck9yZGVyR3JvdXBcbik6IExheWVyT3JkZXIge1xuICByZXR1cm4gbGF5ZXJPcmRlci5tYXAoZW50cnkgPT4ge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGVudHJ5KSkge1xuICAgICAgY29uc3QgZ3JwID0gZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwO1xuICAgICAgaWYgKGdycC5pZCA9PT0gbmV3TGF5ZXJHcm91cC5pZCkge1xuICAgICAgICByZXR1cm4gbmV3TGF5ZXJHcm91cDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmdycCxcbiAgICAgICAgbGF5ZXJPcmRlcjogdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihncnAubGF5ZXJPcmRlciwgbmV3TGF5ZXJHcm91cClcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBlbnRyeTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGbGF0TGF5ZXJPcmRlcihsYXllck9yZGVyOiBMYXllck9yZGVyKTogRmxhdExheWVyT3JkZXIge1xuICByZXR1cm4gbGF5ZXJPcmRlci5yZWR1Y2UoKGFjYywgb3JkZXJFbnRyeSkgPT4ge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KG9yZGVyRW50cnkpKSB7XG4gICAgICByZXR1cm4gWy4uLmFjYywgLi4uZ2V0RmxhdExheWVyT3JkZXIoKG9yZGVyRW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwKS5sYXllck9yZGVyKV07XG4gICAgfVxuICAgIHJldHVybiBbLi4uYWNjLCBvcmRlckVudHJ5IGFzIHN0cmluZ107XG4gIH0sIFtdIGFzIEZsYXRMYXllck9yZGVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkTGF5ZXJPcmRlckhpZXJhcmNoeShcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgbGF5ZXJzPzogTGF5ZXJbXSB8IHJlYWRvbmx5IExheWVyW11cbik6IExheWVyT3JkZXJIaWVyYXJjaHkge1xuICBjb25zdCB2YWxpZExheWVycyA9IGxheWVycz8uZmlsdGVyKEJvb2xlYW4pO1xuICByZXR1cm4gbGF5ZXJPcmRlci5yZWR1Y2UoKGFjYywgZWxlbWVudCkgPT4ge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gWy4uLmFjYywgWydsYXllckdyb3VwJywgZWxlbWVudCBhcyBMYXllck9yZGVyR3JvdXBdIGFzIGNvbnN0XTtcbiAgICB9XG4gICAgY29uc3QgbGF5ZXIgPSB2YWxpZExheWVycz8uZmluZChsID0+IGwuaWQgPT09IGVsZW1lbnQpO1xuICAgIGlmICghbGF5ZXIgfHwgbGF5ZXIuY29uZmlnLmhpZGRlbikge1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG4gICAgcmV0dXJuIFsuLi5hY2MsIFsnbGF5ZXInLCBsYXllcl0gYXMgY29uc3RdO1xuICB9LCBbXSBhcyBMYXllck9yZGVySGllcmFyY2h5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUdob3N0TGF5ZXJGcm9tTGF5ZXJPcmRlcihcbiAgbGF5ZXJPcmRlcjogTGF5ZXJPcmRlcixcbiAgbGF5ZXJzOiB7aWQ6IHN0cmluZ31bXVxuKTogTGF5ZXJPcmRlciB7XG4gIHJldHVybiBsYXllck9yZGVyLnJlZHVjZSgoYWNjLCBlbnRyeSkgPT4ge1xuICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAobGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBlbnRyeSkpIHtcbiAgICAgICAgYWNjLnB1c2goZW50cnkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBncnAgPSBlbnRyeSBhcyBMYXllck9yZGVyR3JvdXA7XG4gICAgICBpZiAoZ3JwLmxheWVyT3JkZXIpIHtcbiAgICAgICAgYWNjLnB1c2goe1xuICAgICAgICAgIC4uLmdycCxcbiAgICAgICAgICBsYXllck9yZGVyOiByZW1vdmVHaG9zdExheWVyRnJvbUxheWVyT3JkZXIoZ3JwLmxheWVyT3JkZXIsIGxheWVycylcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdIGFzIExheWVyT3JkZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVvcmRlckxheWVyT3JkZXIoXG4gIGxheWVyT3JkZXI6IFZpc1N0YXRlWydsYXllck9yZGVyJ10sXG4gIG9yaWdpbkxheWVySWQ6IHN0cmluZyxcbiAgZGVzdGluYXRpb25MYXllcklkOiBzdHJpbmdcbik6IFZpc1N0YXRlWydsYXllck9yZGVyJ10ge1xuICBjb25zdCBhY3RpdmVJbmRleCA9IGdldEluZGV4RnJvbUxheWVyRW50cnlJZChsYXllck9yZGVyLCBvcmlnaW5MYXllcklkKTtcbiAgY29uc3Qgb3ZlckluZGV4ID0gZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkKGxheWVyT3JkZXIsIGRlc3RpbmF0aW9uTGF5ZXJJZCk7XG5cbiAgaWYgKGFjdGl2ZUluZGV4ID09PSAtMSB8fCBvdmVySW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuIGxheWVyT3JkZXI7XG4gIH1cbiAgcmV0dXJuIGFycmF5TW92ZShsYXllck9yZGVyLCBhY3RpdmVJbmRleCwgb3ZlckluZGV4KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZExheWVyVG9MYXllck9yZGVyKFxuICBsYXllck9yZGVyOiBWaXNTdGF0ZVsnbGF5ZXJPcmRlciddLFxuICBsYXllcklkOiBzdHJpbmdcbik6IExheWVyT3JkZXIge1xuICByZXR1cm4gW2xheWVySWQsIC4uLmxheWVyT3JkZXJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGF5ZXJIb3ZlclByb3BWYWx1ZShcbiAgZGF0YTogRGF0YVJvdyB8IEFnZ3JlZ2F0aW9uTGF5ZXJIb3ZlckRhdGEgfCBhbnlbXSB8IG51bGwgfCB1bmRlZmluZWQsXG4gIGZpZWxkSW5kZXg6IG51bWJlclxuKSB7XG4gIGlmICghZGF0YSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBEYXRhUm93KSByZXR1cm4gZGF0YS52YWx1ZUF0KGZpZWxkSW5kZXgpO1xuICByZXR1cm4gZGF0YVtmaWVsZEluZGV4XTtcbn1cblxuLyoqIENoZWNrcyBpZiBhbnkgRGVjayBsYXllcnMgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGxvYWRpbmcuICovXG5leHBvcnQgZnVuY3Rpb24gYXJlQW55RGVja0xheWVyc0xvYWRpbmcobGF5ZXJzOiBEZWNrTGF5ZXJbXSk6IGJvb2xlYW4ge1xuICByZXR1cm4gbGF5ZXJzLnNvbWUoXG4gICAgLy8gbGF5ZXIuaXNMb2FkZWQgY2hhbmdlcyBmcmVxdWVudGx5IGluIERlY2sgKGV2ZW4gb24gaG92ZXIpIHNvIHdlIGNoZWNrIGFkZGl0aW9uYWwgcHJvcGVydGllc1xuICAgIGxheWVyID0+IGxheWVyLmludGVybmFsU3RhdGUgJiYgIWxheWVyLmlzTG9hZGVkXG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBO0FBQ0E7O0FB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