@kepler.gl/reducers 3.3.0-alpha.0 → 3.3.0-alpha.1

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.
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _typeof = require("@babel/runtime/helpers/typeof");
4
+ var _typeof3 = require("@babel/runtime/helpers/typeof");
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.INITIAL_VIS_STATE = exports.DEFAULT_EDITOR = exports.DEFAULT_ANIMATION_CONFIG = exports.ACTION_TASK_FIT_BOUNDS = exports.ACTION_TASK_ADD_NOTIFICATION = void 0;
8
+ exports.addAnnotationUpdater = exports.INITIAL_VIS_STATE = exports.DEFAULT_EDITOR = exports.DEFAULT_ANIMATION_CONFIG = exports.ACTION_TASK_FIT_BOUNDS = exports.ACTION_TASK_ADD_NOTIFICATION = void 0;
9
9
  exports.addDefaultLayers = addDefaultLayers;
10
10
  exports.addDefaultTooltips = addDefaultTooltips;
11
11
  exports.applyCPUFilterUpdater = exports.addLayerUpdater = exports.addFilterUpdater = exports.addEffectUpdater = void 0;
@@ -16,7 +16,7 @@ exports.closeSpecificMapAtIndex = closeSpecificMapAtIndex;
16
16
  exports.copyTableColumnUpdater = copyTableColumnUpdater;
17
17
  exports.defaultInteractionConfig = exports.createOrUpdateFilterUpdater = exports.createNewDatasetSuccessUpdater = void 0;
18
18
  exports.deleteFeatureUpdater = deleteFeatureUpdater;
19
- exports.duplicateLayerUpdater = void 0;
19
+ exports.duplicateLayerUpdater = exports.duplicateAnnotationUpdater = void 0;
20
20
  exports.initialFileLoadingProgress = initialFileLoadingProgress;
21
21
  exports.interactionConfigChangeUpdater = interactionConfigChangeUpdater;
22
22
  exports.isFilterAnimationConfig = isFilterAnimationConfig;
@@ -41,7 +41,7 @@ exports.parseProgress = parseProgress;
41
41
  exports.pinTableColumnUpdater = pinTableColumnUpdater;
42
42
  exports.prepareStateForDatasetReplace = prepareStateForDatasetReplace;
43
43
  exports.processFileContentUpdater = processFileContentUpdater;
44
- exports.receiveMapConfigUpdater = void 0;
44
+ exports.removeAnnotationUpdater = exports.receiveMapConfigUpdater = void 0;
45
45
  exports.removeDatasetUpdater = removeDatasetUpdater;
46
46
  exports.removeFilterUpdater = exports.removeEffectUpdater = void 0;
47
47
  exports.removeLayerUpdater = removeLayerUpdater;
@@ -62,8 +62,9 @@ exports.setFilterViewUpdater = void 0;
62
62
  exports.setInitialLayerConfig = setInitialLayerConfig;
63
63
  exports.setLayerAnimationTimeConfigUpdater = setLayerAnimationTimeConfigUpdater;
64
64
  exports.setMapInfoUpdater = exports.setLoadingIndicatorUpdater = exports.setLayerAnimationTimeUpdater = void 0;
65
+ exports.setPolygonFilterAllLayersUpdater = setPolygonFilterAllLayersUpdater;
65
66
  exports.setPolygonFilterLayerUpdater = setPolygonFilterLayerUpdater;
66
- exports.setSelectedFeatureUpdater = void 0;
67
+ exports.setSelectedFeatureUpdater = exports.setSelectedAnnotationUpdater = void 0;
67
68
  exports.setTimeFilterTimelineModeUpdater = setTimeFilterTimelineModeUpdater;
68
69
  exports.showDatasetTableUpdater = void 0;
69
70
  exports.sortTableColumnUpdater = sortTableColumnUpdater;
@@ -72,16 +73,19 @@ exports.toggleEditorVisibilityUpdater = toggleEditorVisibilityUpdater;
72
73
  exports.toggleSplitMapUpdater = exports.toggleLayerForMapUpdater = exports.toggleLayerAnimationUpdater = exports.toggleLayerAnimationControlUpdater = exports.toggleFilterFeatureUpdater = exports.toggleFilterAnimationUpdater = void 0;
73
74
  exports.updateAllLayerDomainData = updateAllLayerDomainData;
74
75
  exports.updateAnimationDomain = updateAnimationDomain;
76
+ exports.updateAnnotationUpdater = void 0;
75
77
  exports.updateDatasetPropsUpdater = updateDatasetPropsUpdater;
76
78
  exports.updateEffectUpdater = void 0;
77
79
  exports.updateFileLoadingProgressUpdater = updateFileLoadingProgressUpdater;
78
- exports.updateOverlayBlendingUpdater = exports.updateLayerBlendingUpdater = exports.updateLayerAnimationSpeedUpdater = exports.updateFilterAnimationSpeedUpdater = void 0;
80
+ exports.updateLayerAnimationSpeedUpdater = exports.updateFilterAnimationSpeedUpdater = void 0;
81
+ exports.updateOverlayBlendingUpdater = exports.updateLayerBlendingUpdater = void 0;
79
82
  exports.updateStateOnLayerVisibilityChange = updateStateOnLayerVisibilityChange;
80
83
  exports.updateStateWithLayerAndData = updateStateWithLayerAndData;
81
84
  exports.updateVisDataUpdater = exports.updateTableColorUpdater = void 0;
82
85
  exports.wmsFeatureInfoUpdater = wmsFeatureInfoUpdater;
83
86
  var _toArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toArray"));
84
87
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
88
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
85
89
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
86
90
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
87
91
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
@@ -114,9 +118,9 @@ var _dataUtils = require("./data-utils");
114
118
  var _excluded = ["dataId"],
115
119
  _excluded2 = ["info"];
116
120
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
117
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
118
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
119
- function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
121
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof3(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
122
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof3(i) ? i : i + ""; }
123
+ function _toPrimitive(t, r) { if ("object" != _typeof3(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof3(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
120
124
  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; } } }; }
121
125
  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; } }
122
126
  function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
@@ -187,7 +191,10 @@ var defaultInteractionConfig = exports.defaultInteractionConfig = {
187
191
  id: 'geocoder',
188
192
  label: 'interactions.geocoder',
189
193
  enabled: false,
190
- position: null
194
+ position: null,
195
+ config: {
196
+ limitSearch: false
197
+ }
191
198
  },
192
199
  brush: {
193
200
  id: 'brush',
@@ -250,6 +257,11 @@ var INITIAL_VIS_STATE = exports.INITIAL_VIS_STATE = {
250
257
  // effects
251
258
  effects: [],
252
259
  effectOrder: [],
260
+ // annotations
261
+ annotations: [],
262
+ annotationsToBeMerged: [],
263
+ selectedAnnotationId: null,
264
+ isEditingAnnotationText: false,
253
265
  interactionConfig: defaultInteractionConfig,
254
266
  interactionToBeMerged: {},
255
267
  layerBlending: 'normal',
@@ -761,6 +773,31 @@ function layerDataIdChangeUpdater(state, action) {
761
773
  } else {
762
774
  newLayer = validated;
763
775
  }
776
+ } else {
777
+ // Layer is not valid to save (e.g. missing columns), but we still need to
778
+ // remap visual channel fields to the new dataset to avoid stale field references
779
+ // that point to rows beyond the new dataset's length
780
+ var newDatasetFields = state.datasets[dataId].fields;
781
+ var remappedFields = {};
782
+ Object.values(newLayer.visualChannels).forEach(function (_ref2) {
783
+ var fieldKey = _ref2.field;
784
+ var currentField = newLayer.config[fieldKey];
785
+ if (currentField) {
786
+ var matched = newDatasetFields.find(function (f) {
787
+ return f.name === currentField.name;
788
+ });
789
+ remappedFields[fieldKey] = matched || null;
790
+ }
791
+ });
792
+ if (Object.keys(remappedFields).length) {
793
+ newLayer = newLayer.updateLayerConfig(remappedFields);
794
+ }
795
+ // Validate field type compatibility — clears fields whose type is incompatible
796
+ // with the channel's supported field types (e.g. string field for a numeric scale)
797
+ Object.values(newLayer.visualChannels).forEach(function (_ref3) {
798
+ var key = _ref3.key;
799
+ newLayer.validateVisualChannel(key);
800
+ });
764
801
  }
765
802
  newLayer = newLayer.updateLayerConfig({
766
803
  isVisible: oldLayer.config.isVisible,
@@ -970,18 +1007,36 @@ function layerVisConfigChangeUpdater(state, action) {
970
1007
  var newLayer = oldLayer.updateLayerConfig({
971
1008
  visConfig: newVisConfig
972
1009
  });
1010
+ var nextState = state;
1011
+
1012
+ // Exclusive bitmap editing: when editBounds is turned on for one bitmap layer,
1013
+ // turn it off for all other bitmap layers
1014
+ if (newLayer.type === 'bitmap' && action.newVisConfig.editBounds === true) {
1015
+ nextState = _objectSpread(_objectSpread({}, nextState), {}, {
1016
+ layers: nextState.layers.map(function (l, i) {
1017
+ if (i !== idx && l.type === 'bitmap' && l.config.visConfig.editBounds) {
1018
+ return l.updateLayerConfig({
1019
+ visConfig: _objectSpread(_objectSpread({}, l.config.visConfig), {}, {
1020
+ editBounds: false
1021
+ })
1022
+ });
1023
+ }
1024
+ return l;
1025
+ })
1026
+ });
1027
+ }
973
1028
  if (newLayer.shouldCalculateLayerData(props)) {
974
- var oldLayerData = state.layerData[idx];
975
- var _calculateLayerData6 = (0, _layerUtils.calculateLayerData)(newLayer, state, oldLayerData),
1029
+ var oldLayerData = nextState.layerData[idx];
1030
+ var _calculateLayerData6 = (0, _layerUtils.calculateLayerData)(newLayer, nextState, oldLayerData),
976
1031
  layerData = _calculateLayerData6.layerData,
977
1032
  layer = _calculateLayerData6.layer;
978
- return updateStateWithLayerAndData(state, {
1033
+ return updateStateWithLayerAndData(nextState, {
979
1034
  layerData: layerData,
980
1035
  layer: layer,
981
1036
  idx: idx
982
1037
  });
983
1038
  }
984
- return updateStateWithLayerAndData(state, {
1039
+ return updateStateWithLayerAndData(nextState, {
985
1040
  layer: newLayer,
986
1041
  idx: idx
987
1042
  });
@@ -993,8 +1048,8 @@ function layerVisConfigChangeUpdater(state, action) {
993
1048
  * @public
994
1049
  *
995
1050
  */
996
- var setLayerAnimationTimeUpdater = exports.setLayerAnimationTimeUpdater = function setLayerAnimationTimeUpdater(state, _ref2) {
997
- var value = _ref2.value;
1051
+ var setLayerAnimationTimeUpdater = exports.setLayerAnimationTimeUpdater = function setLayerAnimationTimeUpdater(state, _ref4) {
1052
+ var value = _ref4.value;
998
1053
  var currentTime = Array.isArray(value) ? value[0] : value;
999
1054
  var nextState = _objectSpread(_objectSpread({}, state), {}, {
1000
1055
  animationConfig: _objectSpread(_objectSpread({}, state.animationConfig), {}, {
@@ -1028,9 +1083,9 @@ function setFilterAnimationTimeUpdater(state, action) {
1028
1083
  * @memberof visStateUpdaters
1029
1084
  * @public
1030
1085
  */
1031
- function setFilterAnimationWindowUpdater(state, _ref3) {
1032
- var id = _ref3.id,
1033
- animationWindow = _ref3.animationWindow;
1086
+ function setFilterAnimationWindowUpdater(state, _ref5) {
1087
+ var id = _ref5.id,
1088
+ animationWindow = _ref5.animationWindow;
1034
1089
  var filter = state.filters.find(function (f) {
1035
1090
  return f.id === id;
1036
1091
  });
@@ -1293,9 +1348,9 @@ function _updateFilterProp(state, filter, prop, value, valueIndex, datasetIds) {
1293
1348
  * @memberof visStateUpdaters
1294
1349
  * @public
1295
1350
  */
1296
- var setFilterPlotUpdater = exports.setFilterPlotUpdater = function setFilterPlotUpdater(state, _ref4) {
1297
- var idx = _ref4.idx,
1298
- newProp = _ref4.newProp;
1351
+ var setFilterPlotUpdater = exports.setFilterPlotUpdater = function setFilterPlotUpdater(state, _ref6) {
1352
+ var idx = _ref6.idx,
1353
+ newProp = _ref6.newProp;
1299
1354
  if (!state.filters[idx]) {
1300
1355
  _window.console.error("filters[".concat(idx, "] is undefined"));
1301
1356
  return state;
@@ -1406,10 +1461,10 @@ var createOrUpdateFilterUpdater = exports.createOrUpdateFilterUpdater = function
1406
1461
  * Set layer color palette ui state
1407
1462
  * @memberof visStateUpdaters
1408
1463
  */
1409
- var layerColorUIChangeUpdater = exports.layerColorUIChangeUpdater = function layerColorUIChangeUpdater(state, _ref5) {
1410
- var oldLayer = _ref5.oldLayer,
1411
- prop = _ref5.prop,
1412
- newConfig = _ref5.newConfig;
1464
+ var layerColorUIChangeUpdater = exports.layerColorUIChangeUpdater = function layerColorUIChangeUpdater(state, _ref7) {
1465
+ var oldLayer = _ref7.oldLayer,
1466
+ prop = _ref7.prop,
1467
+ newConfig = _ref7.newConfig;
1413
1468
  var oldVixConfig = oldLayer.config.visConfig[prop];
1414
1469
  var newLayer = oldLayer.updateLayerColorUI(prop, newConfig);
1415
1470
  var newVisConfig = newLayer.config.visConfig[prop];
@@ -1509,8 +1564,8 @@ var updateFilterAnimationSpeedUpdater = exports.updateFilterAnimationSpeedUpdate
1509
1564
  * @public
1510
1565
  *
1511
1566
  */
1512
- var updateLayerAnimationSpeedUpdater = exports.updateLayerAnimationSpeedUpdater = function updateLayerAnimationSpeedUpdater(state, _ref6) {
1513
- var speed = _ref6.speed;
1567
+ var updateLayerAnimationSpeedUpdater = exports.updateLayerAnimationSpeedUpdater = function updateLayerAnimationSpeedUpdater(state, _ref8) {
1568
+ var speed = _ref8.speed;
1514
1569
  return _objectSpread(_objectSpread({}, state), {}, {
1515
1570
  animationConfig: _objectSpread(_objectSpread({}, state.animationConfig), {}, {
1516
1571
  speed: speed
@@ -1627,8 +1682,8 @@ var addLayerUpdater = exports.addLayerUpdater = function addLayerUpdater(state,
1627
1682
  * @memberof visStateUpdaters
1628
1683
  * @public
1629
1684
  */
1630
- function removeLayerUpdater(state, _ref7) {
1631
- var id = _ref7.id;
1685
+ function removeLayerUpdater(state, _ref9) {
1686
+ var id = _ref9.id;
1632
1687
  var idx = Number.isFinite(id) ?
1633
1688
  // support older API, remove layer by idx
1634
1689
  Number(id) : state.layers.findIndex(function (l) {
@@ -1664,8 +1719,8 @@ function removeLayerUpdater(state, _ref7) {
1664
1719
  * @memberof visStateUpdaters
1665
1720
  * @public
1666
1721
  */
1667
- var reorderLayerUpdater = exports.reorderLayerUpdater = function reorderLayerUpdater(state, _ref8) {
1668
- var order = _ref8.order;
1722
+ var reorderLayerUpdater = exports.reorderLayerUpdater = function reorderLayerUpdater(state, _ref10) {
1723
+ var order = _ref10.order;
1669
1724
  return _objectSpread(_objectSpread({}, state), {}, {
1670
1725
  layerOrder: order
1671
1726
  });
@@ -1676,8 +1731,8 @@ var reorderLayerUpdater = exports.reorderLayerUpdater = function reorderLayerUpd
1676
1731
  * @memberof visStateUpdaters
1677
1732
  * @public
1678
1733
  */
1679
- var duplicateLayerUpdater = exports.duplicateLayerUpdater = function duplicateLayerUpdater(state, _ref9) {
1680
- var id = _ref9.id;
1734
+ var duplicateLayerUpdater = exports.duplicateLayerUpdater = function duplicateLayerUpdater(state, _ref11) {
1735
+ var id = _ref11.id;
1681
1736
  var idx = Number.isFinite(id) ?
1682
1737
  // support older API, remove layer by idx
1683
1738
  Number(id) : state.layers.findIndex(function (l) {
@@ -1771,8 +1826,8 @@ var addEffectUpdater = exports.addEffectUpdater = function addEffectUpdater(stat
1771
1826
  * @memberof visStateUpdaters
1772
1827
  * @public
1773
1828
  */
1774
- var removeEffectUpdater = exports.removeEffectUpdater = function removeEffectUpdater(state, _ref10) {
1775
- var id = _ref10.id;
1829
+ var removeEffectUpdater = exports.removeEffectUpdater = function removeEffectUpdater(state, _ref12) {
1830
+ var id = _ref12.id;
1776
1831
  var idx = state.effects.findIndex(function (l) {
1777
1832
  return l.id === id;
1778
1833
  });
@@ -1797,8 +1852,8 @@ var removeEffectUpdater = exports.removeEffectUpdater = function removeEffectUpd
1797
1852
  * @memberof visStateUpdaters
1798
1853
  * @public
1799
1854
  */
1800
- var reorderEffectUpdater = exports.reorderEffectUpdater = function reorderEffectUpdater(state, _ref11) {
1801
- var order = _ref11.order;
1855
+ var reorderEffectUpdater = exports.reorderEffectUpdater = function reorderEffectUpdater(state, _ref13) {
1856
+ var order = _ref13.order;
1802
1857
  return _objectSpread(_objectSpread({}, state), {}, {
1803
1858
  effectOrder: (0, _utils.fixEffectOrder)(state.effects, (0, _toConsumableArray2["default"])(order))
1804
1859
  });
@@ -1809,9 +1864,9 @@ var reorderEffectUpdater = exports.reorderEffectUpdater = function reorderEffect
1809
1864
  * @memberof visStateUpdaters
1810
1865
  * @public
1811
1866
  */
1812
- var updateEffectUpdater = exports.updateEffectUpdater = function updateEffectUpdater(state, _ref12) {
1813
- var id = _ref12.id,
1814
- props = _ref12.props;
1867
+ var updateEffectUpdater = exports.updateEffectUpdater = function updateEffectUpdater(state, _ref14) {
1868
+ var id = _ref14.id,
1869
+ props = _ref14.props;
1815
1870
  var idx = state.effects.findIndex(function (l) {
1816
1871
  return l.id === id;
1817
1872
  });
@@ -1840,6 +1895,155 @@ var updateEffectUpdater = exports.updateEffectUpdater = function updateEffectUpd
1840
1895
  });
1841
1896
  };
1842
1897
 
1898
+ // ANNOTATION UPDATERS
1899
+
1900
+ function makeNewAnnotation(config) {
1901
+ var _config$kind, _config$id, _config$isVisible, _config$autoSize, _config$autoSizeY, _config$anchorPoint, _config$label, _config$lineColor, _config$lineWidth, _config$textWidth, _config$textHeight, _config$textVerticalA, _armLength, _angle, _armLength2, _angle2, _armLength3, _angle3, _radiusInMeters;
1902
+ var kind = (_config$kind = config === null || config === void 0 ? void 0 : config.kind) !== null && _config$kind !== void 0 ? _config$kind : _constants.INITIAL_ANNOTATION_KIND;
1903
+ var base = {
1904
+ id: (_config$id = config === null || config === void 0 ? void 0 : config.id) !== null && _config$id !== void 0 ? _config$id : (0, _commonUtils.generateHashId)(6),
1905
+ kind: kind,
1906
+ isVisible: (_config$isVisible = config === null || config === void 0 ? void 0 : config.isVisible) !== null && _config$isVisible !== void 0 ? _config$isVisible : true,
1907
+ autoSize: (_config$autoSize = config === null || config === void 0 ? void 0 : config.autoSize) !== null && _config$autoSize !== void 0 ? _config$autoSize : true,
1908
+ autoSizeY: (_config$autoSizeY = config === null || config === void 0 ? void 0 : config.autoSizeY) !== null && _config$autoSizeY !== void 0 ? _config$autoSizeY : true,
1909
+ anchorPoint: (_config$anchorPoint = config === null || config === void 0 ? void 0 : config.anchorPoint) !== null && _config$anchorPoint !== void 0 ? _config$anchorPoint : [0, 0],
1910
+ label: (_config$label = config === null || config === void 0 ? void 0 : config.label) !== null && _config$label !== void 0 ? _config$label : 'New Annotation',
1911
+ lineColor: (_config$lineColor = config === null || config === void 0 ? void 0 : config.lineColor) !== null && _config$lineColor !== void 0 ? _config$lineColor : _constants.INITIAL_ANNOTATION_LINE_COLOR,
1912
+ lineWidth: (_config$lineWidth = config === null || config === void 0 ? void 0 : config.lineWidth) !== null && _config$lineWidth !== void 0 ? _config$lineWidth : _constants.INITIAL_ANNOTATION_LINE_WIDTH,
1913
+ textWidth: (_config$textWidth = config === null || config === void 0 ? void 0 : config.textWidth) !== null && _config$textWidth !== void 0 ? _config$textWidth : _constants.INITIAL_ANNOTATION_TEXT_WIDTH,
1914
+ textHeight: (_config$textHeight = config === null || config === void 0 ? void 0 : config.textHeight) !== null && _config$textHeight !== void 0 ? _config$textHeight : _constants.INITIAL_ANNOTATION_TEXT_HEIGHT,
1915
+ textVerticalAlign: (_config$textVerticalA = config === null || config === void 0 ? void 0 : config.textVerticalAlign) !== null && _config$textVerticalA !== void 0 ? _config$textVerticalA : 'bottom',
1916
+ mapIndex: config === null || config === void 0 ? void 0 : config.mapIndex
1917
+ };
1918
+ switch (kind) {
1919
+ case _constants.AnnotationKind.POINT:
1920
+ return _objectSpread(_objectSpread({}, base), {}, {
1921
+ kind: _constants.AnnotationKind.POINT,
1922
+ armLength: (_armLength = config === null || config === void 0 ? void 0 : config.armLength) !== null && _armLength !== void 0 ? _armLength : _constants.INITIAL_ANNOTATION_ARM_LENGTH,
1923
+ angle: (_angle = config === null || config === void 0 ? void 0 : config.angle) !== null && _angle !== void 0 ? _angle : _constants.INITIAL_ANNOTATION_ANGLE
1924
+ });
1925
+ case _constants.AnnotationKind.ARROW:
1926
+ return _objectSpread(_objectSpread({}, base), {}, {
1927
+ kind: _constants.AnnotationKind.ARROW,
1928
+ armLength: (_armLength2 = config === null || config === void 0 ? void 0 : config.armLength) !== null && _armLength2 !== void 0 ? _armLength2 : _constants.INITIAL_ANNOTATION_ARM_LENGTH,
1929
+ angle: (_angle2 = config === null || config === void 0 ? void 0 : config.angle) !== null && _angle2 !== void 0 ? _angle2 : _constants.INITIAL_ANNOTATION_ANGLE
1930
+ });
1931
+ case _constants.AnnotationKind.CIRCLE:
1932
+ return _objectSpread(_objectSpread({}, base), {}, {
1933
+ kind: _constants.AnnotationKind.CIRCLE,
1934
+ armLength: (_armLength3 = config === null || config === void 0 ? void 0 : config.armLength) !== null && _armLength3 !== void 0 ? _armLength3 : _constants.INITIAL_ANNOTATION_ARM_LENGTH,
1935
+ angle: (_angle3 = config === null || config === void 0 ? void 0 : config.angle) !== null && _angle3 !== void 0 ? _angle3 : _constants.INITIAL_ANNOTATION_ANGLE,
1936
+ radiusInMeters: (_radiusInMeters = config === null || config === void 0 ? void 0 : config.radiusInMeters) !== null && _radiusInMeters !== void 0 ? _radiusInMeters : 1000
1937
+ });
1938
+ case _constants.AnnotationKind.TEXT:
1939
+ default:
1940
+ return _objectSpread(_objectSpread({}, base), {}, {
1941
+ kind: _constants.AnnotationKind.TEXT
1942
+ });
1943
+ }
1944
+ }
1945
+
1946
+ /**
1947
+ * Add a new annotation
1948
+ * @memberof visStateUpdaters
1949
+ * @public
1950
+ */
1951
+ var addAnnotationUpdater = exports.addAnnotationUpdater = function addAnnotationUpdater(state, action) {
1952
+ var newAnnotation = makeNewAnnotation(action.config);
1953
+ return _objectSpread(_objectSpread({}, state), {}, {
1954
+ annotations: [newAnnotation].concat((0, _toConsumableArray2["default"])(state.annotations)),
1955
+ selectedAnnotationId: newAnnotation.id,
1956
+ isEditingAnnotationText: true
1957
+ });
1958
+ };
1959
+
1960
+ /**
1961
+ * Remove an annotation
1962
+ * @memberof visStateUpdaters
1963
+ * @public
1964
+ */
1965
+ var removeAnnotationUpdater = exports.removeAnnotationUpdater = function removeAnnotationUpdater(state, _ref15) {
1966
+ var id = _ref15.id;
1967
+ return _objectSpread(_objectSpread({}, state), {}, {
1968
+ annotations: state.annotations.filter(function (a) {
1969
+ return a.id !== id;
1970
+ }),
1971
+ selectedAnnotationId: state.selectedAnnotationId === id ? null : state.selectedAnnotationId,
1972
+ isEditingAnnotationText: state.selectedAnnotationId === id ? false : state.isEditingAnnotationText
1973
+ });
1974
+ };
1975
+
1976
+ /**
1977
+ * Update an annotation
1978
+ * @memberof visStateUpdaters
1979
+ * @public
1980
+ */
1981
+ var updateAnnotationUpdater = exports.updateAnnotationUpdater = function updateAnnotationUpdater(state, _ref16) {
1982
+ var id = _ref16.id,
1983
+ config = _ref16.config;
1984
+ var idx = state.annotations.findIndex(function (a) {
1985
+ return a.id === id;
1986
+ });
1987
+ if (idx < 0) {
1988
+ _window.console.warn("can not update annotation with invalid id ".concat(id));
1989
+ return state;
1990
+ }
1991
+ var prev = state.annotations[idx];
1992
+ var nextAnnotation;
1993
+ if (config.kind && config.kind !== prev.kind) {
1994
+ nextAnnotation = makeNewAnnotation(_objectSpread(_objectSpread({}, prev), config));
1995
+ } else {
1996
+ nextAnnotation = _objectSpread(_objectSpread({}, prev), config);
1997
+ }
1998
+ var newAnnotations = (0, _toConsumableArray2["default"])(state.annotations);
1999
+ newAnnotations[idx] = nextAnnotation;
2000
+ return _objectSpread(_objectSpread({}, state), {}, {
2001
+ annotations: newAnnotations
2002
+ });
2003
+ };
2004
+
2005
+ /**
2006
+ * Duplicate an annotation
2007
+ * @memberof visStateUpdaters
2008
+ * @public
2009
+ */
2010
+ var duplicateAnnotationUpdater = exports.duplicateAnnotationUpdater = function duplicateAnnotationUpdater(state, _ref17) {
2011
+ var id = _ref17.id;
2012
+ var original = state.annotations.find(function (a) {
2013
+ return a.id === id;
2014
+ });
2015
+ if (!original) {
2016
+ _window.console.warn("can not duplicate annotation with invalid id ".concat(id));
2017
+ return state;
2018
+ }
2019
+ var newAnnotation = _objectSpread(_objectSpread({}, (0, _cloneDeep["default"])(original)), {}, {
2020
+ id: (0, _commonUtils.generateHashId)(6),
2021
+ label: "Copy of ".concat(original.label)
2022
+ });
2023
+ return _objectSpread(_objectSpread({}, state), {}, {
2024
+ annotations: [newAnnotation].concat((0, _toConsumableArray2["default"])(state.annotations)),
2025
+ selectedAnnotationId: newAnnotation.id,
2026
+ isEditingAnnotationText: false
2027
+ });
2028
+ };
2029
+
2030
+ /**
2031
+ * Set selected annotation
2032
+ * @memberof visStateUpdaters
2033
+ * @public
2034
+ */
2035
+ var setSelectedAnnotationUpdater = exports.setSelectedAnnotationUpdater = function setSelectedAnnotationUpdater(state, _ref18) {
2036
+ var id = _ref18.id,
2037
+ isEditingText = _ref18.isEditingText;
2038
+ if (id === state.selectedAnnotationId && (isEditingText !== null && isEditingText !== void 0 ? isEditingText : false) === state.isEditingAnnotationText) {
2039
+ return state;
2040
+ }
2041
+ return _objectSpread(_objectSpread({}, state), {}, {
2042
+ selectedAnnotationId: id,
2043
+ isEditingAnnotationText: isEditingText !== null && isEditingText !== void 0 ? isEditingText : false
2044
+ });
2045
+ };
2046
+
1843
2047
  /**
1844
2048
  * Remove a dataset and all layers, filters, tooltip configs that based on it
1845
2049
  * @memberof visStateUpdaters
@@ -1901,8 +2105,8 @@ function removeDatasetUpdater(state, action) {
1901
2105
  dataId: datasetKey
1902
2106
  });
1903
2107
  }
1904
- function removeDatasetFromInteractionConfig(state, _ref13) {
1905
- var dataId = _ref13.dataId;
2108
+ function removeDatasetFromInteractionConfig(state, _ref19) {
2109
+ var dataId = _ref19.dataId;
1906
2110
  var interactionConfig = state.interactionConfig;
1907
2111
  var _interactionConfig = interactionConfig,
1908
2112
  tooltip = _interactionConfig.tooltip;
@@ -1987,12 +2191,12 @@ var resetMapConfigUpdater = exports.resetMapConfigUpdater = function resetMapCon
1987
2191
  * @memberof visStateUpdaters
1988
2192
  * @public
1989
2193
  */
1990
- var receiveMapConfigUpdater = exports.receiveMapConfigUpdater = function receiveMapConfigUpdater(state, _ref14) {
1991
- var _ref14$payload = _ref14.payload,
1992
- _ref14$payload$config = _ref14$payload.config,
1993
- config = _ref14$payload$config === void 0 ? {} : _ref14$payload$config,
1994
- _ref14$payload$option = _ref14$payload.options,
1995
- options = _ref14$payload$option === void 0 ? {} : _ref14$payload$option;
2194
+ var receiveMapConfigUpdater = exports.receiveMapConfigUpdater = function receiveMapConfigUpdater(state, _ref20) {
2195
+ var _ref20$payload = _ref20.payload,
2196
+ _ref20$payload$config = _ref20$payload.config,
2197
+ config = _ref20$payload$config === void 0 ? {} : _ref20$payload$config,
2198
+ _ref20$payload$option = _ref20$payload.options,
2199
+ options = _ref20$payload$option === void 0 ? {} : _ref20$payload$option;
1996
2200
  if (!config.visState) {
1997
2201
  return state;
1998
2202
  }
@@ -2097,8 +2301,8 @@ var mapClickUpdater = exports.mapClickUpdater = function mapClickUpdater(state,
2097
2301
  * @memberof visStateUpdaters
2098
2302
  * @public
2099
2303
  */
2100
- var mouseMoveUpdater = exports.mouseMoveUpdater = function mouseMoveUpdater(state, _ref15) {
2101
- var evt = _ref15.evt;
2304
+ var mouseMoveUpdater = exports.mouseMoveUpdater = function mouseMoveUpdater(state, _ref21) {
2305
+ var evt = _ref21.evt;
2102
2306
  if (Object.values(state.interactionConfig).some(function (config) {
2103
2307
  return config.enabled;
2104
2308
  })) {
@@ -2132,9 +2336,9 @@ var toggleSplitMapUpdater = exports.toggleSplitMapUpdater = function toggleSplit
2132
2336
  * @memberof visStateUpdaters
2133
2337
  * @public
2134
2338
  */
2135
- var toggleLayerForMapUpdater = exports.toggleLayerForMapUpdater = function toggleLayerForMapUpdater(state, _ref16) {
2136
- var mapIndex = _ref16.mapIndex,
2137
- layerId = _ref16.layerId;
2339
+ var toggleLayerForMapUpdater = exports.toggleLayerForMapUpdater = function toggleLayerForMapUpdater(state, _ref22) {
2340
+ var mapIndex = _ref22.mapIndex,
2341
+ layerId = _ref22.layerId;
2138
2342
  var splitMaps = state.splitMaps;
2139
2343
  return _objectSpread(_objectSpread({}, state), {}, {
2140
2344
  splitMaps: splitMaps.map(function (sm, i) {
@@ -2170,10 +2374,10 @@ var updateVisDataUpdater = exports.updateVisDataUpdater = function updateVisData
2170
2374
  }
2171
2375
  var createDatasetTasks = [];
2172
2376
  var notificationTasks = [];
2173
- datasets.forEach(function (_ref17, datasetIndex) {
2174
- var _ref17$info = _ref17.info,
2175
- info = _ref17$info === void 0 ? {} : _ref17$info,
2176
- rest = (0, _objectWithoutProperties2["default"])(_ref17, _excluded2);
2377
+ datasets.forEach(function (_ref23, datasetIndex) {
2378
+ var _ref23$info = _ref23.info,
2379
+ info = _ref23$info === void 0 ? {} : _ref23$info,
2380
+ rest = (0, _objectWithoutProperties2["default"])(_ref23, _excluded2);
2177
2381
  var task = (0, _table.createNewDataEntry)(_objectSpread({
2178
2382
  info: info
2179
2383
  }, rest), state.datasets);
@@ -2266,6 +2470,18 @@ function applyMergersUpdater(state, action) {
2266
2470
  return mergeStateResult.allMerged ? postMergeUpdater(mergeStateResult.mergedState, postMergerPayload) : mergeStateResult.mergedState;
2267
2471
  }
2268
2472
 
2473
+ /** Reads `options.layerVisConfig` from add-data-to-map (see `AddDataToMapOptions`). */
2474
+ function layerVisConfigFromAddDataOptions(options) {
2475
+ if (!options || !('layerVisConfig' in options)) {
2476
+ return undefined;
2477
+ }
2478
+ var patch = options.layerVisConfig;
2479
+ if (patch == null || (0, _typeof2["default"])(patch) !== 'object' || Array.isArray(patch)) {
2480
+ return undefined;
2481
+ }
2482
+ return patch;
2483
+ }
2484
+
2269
2485
  /**
2270
2486
  * Add new dataset to `visState`, with option to load a map config along with the datasets
2271
2487
  */
@@ -2303,6 +2519,7 @@ function postMergeUpdater(mergedState, postMergerPayload) {
2303
2519
  splitMaps: (0, _utils.addNewLayersToSplitMap)(mergedState.splitMaps, newLayers)
2304
2520
  });
2305
2521
  }
2522
+ mergedState = (0, _layerUtils.mergeLayerVisConfigForNewDatasets)(mergedState, layerVisConfigFromAddDataOptions(options), newDataIds);
2306
2523
 
2307
2524
  // if no tooltips merged add default tooltips
2308
2525
  newDataIds.forEach(function (dataId) {
@@ -2605,14 +2822,14 @@ function parseProgress() {
2605
2822
  * @memberof visStateUpdaters
2606
2823
  * @public
2607
2824
  */
2608
- var nextFileBatchUpdater = exports.nextFileBatchUpdater = function nextFileBatchUpdater(state, _ref18) {
2825
+ var nextFileBatchUpdater = exports.nextFileBatchUpdater = function nextFileBatchUpdater(state, _ref24) {
2609
2826
  var _accumulated$data;
2610
- var _ref18$payload = _ref18.payload,
2611
- gen = _ref18$payload.gen,
2612
- fileName = _ref18$payload.fileName,
2613
- progress = _ref18$payload.progress,
2614
- accumulated = _ref18$payload.accumulated,
2615
- onFinish = _ref18$payload.onFinish;
2827
+ var _ref24$payload = _ref24.payload,
2828
+ gen = _ref24$payload.gen,
2829
+ fileName = _ref24$payload.fileName,
2830
+ progress = _ref24$payload.progress,
2831
+ accumulated = _ref24$payload.accumulated,
2832
+ onFinish = _ref24$payload.onFinish;
2616
2833
  var stateWithProgress = updateFileLoadingProgressUpdater(state, {
2617
2834
  fileName: fileName,
2618
2835
  progress: parseProgress(state.fileLoadingProgress[fileName], progress)
@@ -2624,9 +2841,9 @@ var nextFileBatchUpdater = exports.nextFileBatchUpdater = function nextFileBatch
2624
2841
  return (0, _actions.loadFilesSuccess)(result);
2625
2842
  }, function (err) {
2626
2843
  return (0, _actions.loadFilesErr)(fileName, err);
2627
- })] : []), [(0, _tasks2.UNWRAP_TASK)(gen.next()).bimap(function (_ref19) {
2628
- var value = _ref19.value,
2629
- done = _ref19.done;
2844
+ })] : []), [(0, _tasks2.UNWRAP_TASK)(gen.next()).bimap(function (_ref25) {
2845
+ var value = _ref25.value,
2846
+ done = _ref25.done;
2630
2847
  return done ? onFinish(accumulated) : (0, _actions.nextFileBatch)({
2631
2848
  gen: gen,
2632
2849
  fileName: fileName,
@@ -2644,9 +2861,9 @@ var nextFileBatchUpdater = exports.nextFileBatchUpdater = function nextFileBatch
2644
2861
  * @memberof visStateUpdaters
2645
2862
  * @public
2646
2863
  */
2647
- var loadFilesErrUpdater = exports.loadFilesErrUpdater = function loadFilesErrUpdater(state, _ref20) {
2648
- var error = _ref20.error,
2649
- fileName = _ref20.fileName;
2864
+ var loadFilesErrUpdater = exports.loadFilesErrUpdater = function loadFilesErrUpdater(state, _ref26) {
2865
+ var error = _ref26.error,
2866
+ fileName = _ref26.fileName;
2650
2867
  // update ui with error message
2651
2868
  _window.console.warn(error);
2652
2869
  if (!state.fileLoading) {
@@ -2674,8 +2891,8 @@ var loadFilesErrUpdater = exports.loadFilesErrUpdater = function loadFilesErrUpd
2674
2891
  * @memberof visStateUpdaters
2675
2892
  * @public
2676
2893
  */
2677
- var applyCPUFilterUpdater = exports.applyCPUFilterUpdater = function applyCPUFilterUpdater(state, _ref21) {
2678
- var dataId = _ref21.dataId;
2894
+ var applyCPUFilterUpdater = exports.applyCPUFilterUpdater = function applyCPUFilterUpdater(state, _ref27) {
2895
+ var dataId = _ref27.dataId;
2679
2896
  // apply cpuFilter
2680
2897
  var dataIds = (0, _commonUtils.toArray)(dataId);
2681
2898
  return dataIds.reduce(function (accu, id) {
@@ -2734,9 +2951,9 @@ function initialFileLoadingProgress(file, index) {
2734
2951
  error: null
2735
2952
  });
2736
2953
  }
2737
- function updateFileLoadingProgressUpdater(state, _ref23) {
2738
- var fileName = _ref23.fileName,
2739
- progress = _ref23.progress;
2954
+ function updateFileLoadingProgressUpdater(state, _ref29) {
2955
+ var fileName = _ref29.fileName,
2956
+ progress = _ref29.progress;
2740
2957
  // @ts-expect-error
2741
2958
  return (0, _composerHelpers.pick_)('fileLoadingProgress')((0, _composerHelpers.pick_)(fileName)((0, _composerHelpers.merge_)(progress)))(state);
2742
2959
  }
@@ -2828,8 +3045,8 @@ function updateAnimationDomain(state) {
2828
3045
  * Update the status of the editor
2829
3046
  * @memberof visStateUpdaters
2830
3047
  */
2831
- var setEditorModeUpdater = exports.setEditorModeUpdater = function setEditorModeUpdater(state, _ref24) {
2832
- var mode = _ref24.mode;
3048
+ var setEditorModeUpdater = exports.setEditorModeUpdater = function setEditorModeUpdater(state, _ref30) {
3049
+ var mode = _ref30.mode;
2833
3050
  return _objectSpread(_objectSpread({}, state), {}, {
2834
3051
  editor: _objectSpread(_objectSpread({}, state.editor), {}, {
2835
3052
  mode: mode,
@@ -2843,10 +3060,10 @@ var setEditorModeUpdater = exports.setEditorModeUpdater = function setEditorMode
2843
3060
  * Update editor features
2844
3061
  * @memberof visStateUpdaters
2845
3062
  */
2846
- function setFeaturesUpdater(state, _ref25) {
2847
- var _lastFeature$properti;
2848
- var _ref25$features = _ref25.features,
2849
- features = _ref25$features === void 0 ? [] : _ref25$features;
3063
+ function setFeaturesUpdater(state, _ref31) {
3064
+ var _lastFeature$properti, _lastFeature$properti2;
3065
+ var _ref31$features = _ref31.features,
3066
+ features = _ref31$features === void 0 ? [] : _ref31$features;
2850
3067
  var lastFeature = features.length && features[features.length - 1];
2851
3068
  var newState = _objectSpread(_objectSpread({}, state), {}, {
2852
3069
  editor: _objectSpread(_objectSpread({}, state.editor), {}, {
@@ -2854,7 +3071,7 @@ function setFeaturesUpdater(state, _ref25) {
2854
3071
  features: features.filter(function (f) {
2855
3072
  return !(0, _utils.getFilterIdInFeature)(f);
2856
3073
  }),
2857
- mode: lastFeature && (_lastFeature$properti = lastFeature.properties) !== null && _lastFeature$properti !== void 0 && _lastFeature$properti.isClosed ? _constants.EDITOR_MODES.EDIT : state.editor.mode
3074
+ mode: lastFeature && (_lastFeature$properti = lastFeature.properties) !== null && _lastFeature$properti !== void 0 && _lastFeature$properti.isClosed ? ((_lastFeature$properti2 = lastFeature.properties) === null || _lastFeature$properti2 === void 0 ? void 0 : _lastFeature$properti2.shape) === 'Rectangle' ? state.editor.mode : _constants.EDITOR_MODES.EDIT : state.editor.mode
2858
3075
  })
2859
3076
  });
2860
3077
 
@@ -2894,9 +3111,9 @@ function setFeaturesUpdater(state, _ref25) {
2894
3111
  * Set the current selected feature
2895
3112
  * @memberof uiStateUpdaters
2896
3113
  */
2897
- var setSelectedFeatureUpdater = exports.setSelectedFeatureUpdater = function setSelectedFeatureUpdater(state, _ref26) {
2898
- var feature = _ref26.feature,
2899
- selectionContext = _ref26.selectionContext;
3114
+ var setSelectedFeatureUpdater = exports.setSelectedFeatureUpdater = function setSelectedFeatureUpdater(state, _ref32) {
3115
+ var feature = _ref32.feature,
3116
+ selectionContext = _ref32.selectionContext;
2900
3117
  // add bbox for polygon filter to speed up filtering
2901
3118
  var selectedFeature = feature;
2902
3119
  if (feature !== null && feature !== void 0 && feature.properties) {
@@ -2918,8 +3135,8 @@ var setSelectedFeatureUpdater = exports.setSelectedFeatureUpdater = function set
2918
3135
  * Delete existing feature from filters
2919
3136
  * @memberof visStateUpdaters
2920
3137
  */
2921
- function deleteFeatureUpdater(state, _ref27) {
2922
- var feature = _ref27.feature;
3138
+ function deleteFeatureUpdater(state, _ref33) {
3139
+ var feature = _ref33.feature;
2923
3140
  if (!feature) {
2924
3141
  return state;
2925
3142
  }
@@ -3015,14 +3232,45 @@ function setPolygonFilterLayerUpdater(state, payload) {
3015
3232
  });
3016
3233
  }
3017
3234
 
3235
+ /**
3236
+ * Apply polygon filter to all visible layers
3237
+ * @memberof visStateUpdaters
3238
+ */
3239
+ function setPolygonFilterAllLayersUpdater(state, payload) {
3240
+ var feature = payload.feature;
3241
+ var newFilter = (0, _utils.generatePolygonFilter)([], feature);
3242
+ var filterIdx = state.filters.length;
3243
+ var newState = _objectSpread(_objectSpread({}, state), {}, {
3244
+ filters: [].concat((0, _toConsumableArray2["default"])(state.filters), [newFilter]),
3245
+ editor: _objectSpread(_objectSpread({}, state.editor), {}, {
3246
+ features: state.editor.features.filter(function (f) {
3247
+ return f.id !== feature.id;
3248
+ }),
3249
+ selectedFeature: newFilter.value,
3250
+ mode: _constants.EDITOR_MODES.EDIT
3251
+ })
3252
+ });
3253
+ var visibleLayerIds = (0, _get["default"])(payload, 'visibleLayerIds');
3254
+ var allLayerIds = Array.isArray(visibleLayerIds) ? visibleLayerIds : state.layers.filter(function (l) {
3255
+ return l.config.isVisible;
3256
+ }).map(function (l) {
3257
+ return l.id;
3258
+ });
3259
+ return setFilterUpdater(newState, {
3260
+ idx: filterIdx,
3261
+ prop: 'layerId',
3262
+ value: allLayerIds
3263
+ });
3264
+ }
3265
+
3018
3266
  /**
3019
3267
  * @memberof visStateUpdaters
3020
3268
  * @public
3021
3269
  */
3022
- function sortTableColumnUpdater(state, _ref28) {
3023
- var dataId = _ref28.dataId,
3024
- column = _ref28.column,
3025
- mode = _ref28.mode;
3270
+ function sortTableColumnUpdater(state, _ref34) {
3271
+ var dataId = _ref34.dataId,
3272
+ column = _ref34.column,
3273
+ mode = _ref34.mode;
3026
3274
  var dataset = state.datasets[dataId];
3027
3275
  if (!dataset) {
3028
3276
  return state;
@@ -3043,9 +3291,9 @@ function sortTableColumnUpdater(state, _ref28) {
3043
3291
  * @memberof visStateUpdaters
3044
3292
  * @public
3045
3293
  */
3046
- function pinTableColumnUpdater(state, _ref29) {
3047
- var dataId = _ref29.dataId,
3048
- column = _ref29.column;
3294
+ function pinTableColumnUpdater(state, _ref35) {
3295
+ var dataId = _ref35.dataId,
3296
+ column = _ref35.column;
3049
3297
  var dataset = state.datasets[dataId];
3050
3298
  if (!dataset) {
3051
3299
  return state;
@@ -3059,9 +3307,9 @@ function pinTableColumnUpdater(state, _ref29) {
3059
3307
  * @memberof visStateUpdaters
3060
3308
  * @public
3061
3309
  */
3062
- function copyTableColumnUpdater(state, _ref30) {
3063
- var dataId = _ref30.dataId,
3064
- column = _ref30.column;
3310
+ function copyTableColumnUpdater(state, _ref36) {
3311
+ var dataId = _ref36.dataId,
3312
+ column = _ref36.column;
3065
3313
  var dataset = state.datasets[dataId];
3066
3314
  if (!dataset) {
3067
3315
  return state;
@@ -3085,9 +3333,9 @@ function copyTableColumnUpdater(state, _ref30) {
3085
3333
  * @memberof visStateUpdaters
3086
3334
  * @public
3087
3335
  */
3088
- function setColumnDisplayFormatUpdater(state, _ref31) {
3089
- var dataId = _ref31.dataId,
3090
- formats = _ref31.formats;
3336
+ function setColumnDisplayFormatUpdater(state, _ref37) {
3337
+ var dataId = _ref37.dataId,
3338
+ formats = _ref37.formats;
3091
3339
  var dataset = state.datasets[dataId];
3092
3340
  if (!dataset) {
3093
3341
  return state;
@@ -3136,9 +3384,9 @@ action) {
3136
3384
  })
3137
3385
  });
3138
3386
  }
3139
- function setFilterAnimationTimeConfigUpdater(state, _ref32) {
3140
- var idx = _ref32.idx,
3141
- config = _ref32.config;
3387
+ function setFilterAnimationTimeConfigUpdater(state, _ref38) {
3388
+ var idx = _ref38.idx,
3389
+ config = _ref38.config;
3142
3390
  var oldFilter = state.filters[idx];
3143
3391
  if (!oldFilter) {
3144
3392
  _window.console.error("filters.".concat(idx, " is undefined"));
@@ -3168,8 +3416,8 @@ function checkTimeConfigArgs(config) {
3168
3416
  /**
3169
3417
  * Update editor
3170
3418
  */
3171
- function setLayerAnimationTimeConfigUpdater(state, _ref33) {
3172
- var config = _ref33.config;
3419
+ function setLayerAnimationTimeConfigUpdater(state, _ref39) {
3420
+ var config = _ref39.config;
3173
3421
  if (!config) {
3174
3422
  return state;
3175
3423
  }
@@ -3367,8 +3615,8 @@ function setTimeFilterTimelineModeUpdater(state, action) {
3367
3615
  * @returns nextState
3368
3616
  * @public
3369
3617
  */
3370
- var setLoadingIndicatorUpdater = exports.setLoadingIndicatorUpdater = function setLoadingIndicatorUpdater(state, _ref34) {
3371
- var change = _ref34.payload.change;
3618
+ var setLoadingIndicatorUpdater = exports.setLoadingIndicatorUpdater = function setLoadingIndicatorUpdater(state, _ref40) {
3619
+ var change = _ref40.payload.change;
3372
3620
  var loadingIndicatorValue = state.loadingIndicatorValue;
3373
3621
  if (!loadingIndicatorValue) {
3374
3622
  loadingIndicatorValue = 0;
@@ -3488,10 +3736,10 @@ function findChildDatasetIds(value) {
3488
3736
  }
3489
3737
 
3490
3738
  // moved unmerged layers, filters, interactions
3491
- function moveValueToBeMerged(state, propValues, _ref36) {
3492
- var prop = _ref36.prop,
3493
- toMergeProp = _ref36.toMergeProp,
3494
- saveUnmerged = _ref36.saveUnmerged;
3739
+ function moveValueToBeMerged(state, propValues, _ref42) {
3740
+ var prop = _ref42.prop,
3741
+ toMergeProp = _ref42.toMergeProp,
3742
+ saveUnmerged = _ref42.saveUnmerged;
3495
3743
  // remove prop value from state
3496
3744
  // TODO: should we add remove updater to merger as well?
3497
3745
  if (!propValues) {
@@ -3548,17 +3796,17 @@ function prepareStateForDatasetReplace(state, dataId, dataIdToUse) {
3548
3796
  }
3549
3797
  return nextState;
3550
3798
  }
3551
- function replaceDatasetDepsInState(state, _ref37) {
3552
- var dataId = _ref37.dataId,
3553
- dataIdToUse = _ref37.dataIdToUse;
3799
+ function replaceDatasetDepsInState(state, _ref43) {
3800
+ var dataId = _ref43.dataId,
3801
+ dataIdToUse = _ref43.dataIdToUse;
3554
3802
  var serializedState = (0, _visStateMerger.serializeVisState)(state, state.schema);
3555
- var nextState = state.mergers.reduce(function (accuState, _ref38) {
3556
- var prop = _ref38.prop,
3557
- toMergeProp = _ref38.toMergeProp,
3558
- replaceParentDatasetIds = _ref38.replaceParentDatasetIds,
3559
- getChildDatasetIds = _ref38.getChildDatasetIds,
3560
- saveUnmerged = _ref38.saveUnmerged,
3561
- preserveOrder = _ref38.preserveOrder;
3803
+ var nextState = state.mergers.reduce(function (accuState, _ref44) {
3804
+ var prop = _ref44.prop,
3805
+ toMergeProp = _ref44.toMergeProp,
3806
+ replaceParentDatasetIds = _ref44.replaceParentDatasetIds,
3807
+ getChildDatasetIds = _ref44.getChildDatasetIds,
3808
+ saveUnmerged = _ref44.saveUnmerged,
3809
+ preserveOrder = _ref44.preserveOrder;
3562
3810
  // get dataset ids that are depends on this dataset
3563
3811
  var props = (0, _commonUtils.toArray)(prop);
3564
3812
  var toMergeProps = (0, _commonUtils.toArray)(toMergeProp);
@@ -3586,11 +3834,11 @@ function replaceDatasetDepsInState(state, _ref37) {
3586
3834
  }, state);
3587
3835
  return nextState;
3588
3836
  }
3589
- function replacePropValueInState(state, replacedItem, _ref39) {
3590
- var prop = _ref39.prop,
3591
- toMergeProp = _ref39.toMergeProp,
3592
- getChildDatasetIds = _ref39.getChildDatasetIds,
3593
- saveUnmerged = _ref39.saveUnmerged;
3837
+ function replacePropValueInState(state, replacedItem, _ref45) {
3838
+ var prop = _ref45.prop,
3839
+ toMergeProp = _ref45.toMergeProp,
3840
+ getChildDatasetIds = _ref45.getChildDatasetIds,
3841
+ saveUnmerged = _ref45.saveUnmerged;
3594
3842
  // prop is depends on the dataset to be replaced
3595
3843
  // remove prop from state, and move it to toBeMerged
3596
3844
  var nextState = moveValueToBeMerged(state, replacedItem, {
@@ -3608,4 +3856,4 @@ function replacePropValueInState(state, replacedItem, _ref39) {
3608
3856
  }
3609
3857
  return nextState;
3610
3858
  }
3611
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYmJveCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2NvcHlUb0NsaXBib2FyZCIsIl9kZWVwbWVyZ2UiLCJfd2luZG93IiwiX2Nsb25lRGVlcCIsIl9nZXQiLCJfaXNFcXVhbCIsIl9waWNrIiwiX3VuaXEiLCJfeG9yIiwiX3Rhc2tzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfdGFza3MyIiwiX2FjdGlvbnMiLCJfdXRpbHMiLCJfY29tbW9uVXRpbHMiLCJfY29uc3RhbnRzIiwiX2xheWVycyIsIl9jb21wb3NlckhlbHBlcnMiLCJfbWVyZ2VySGFuZGxlciIsIl92aXNTdGF0ZU1lcmdlciIsIl9zY2hlbWFzIiwiX3RhYmxlIiwiX2ludGVyYWN0aW9uVXRpbHMiLCJfbGF5ZXJVdGlscyIsIl9lZmZlY3RzIiwiX2RhdGFVdGlscyIsIl9leGNsdWRlZCIsIl9leGNsdWRlZDIiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJfdG9Qcm9wZXJ0eUtleSIsIl90b1ByaW1pdGl2ZSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwiVHlwZUVycm9yIiwiU3RyaW5nIiwiTnVtYmVyIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJkb25lIiwidmFsdWUiLCJmIiwibyIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGlzYWJsZVN0YWNrQ2FwdHVyaW5nIiwidmlzU3RhdGVVcGRhdGVycyIsImRlZmF1bHRJbnRlcmFjdGlvbkNvbmZpZyIsImV4cG9ydHMiLCJ0b29sdGlwIiwiaWQiLCJsYWJlbCIsImVuYWJsZWQiLCJjb25maWciLCJmaWVsZHNUb1Nob3ciLCJjb21wYXJlTW9kZSIsImNvbXBhcmVUeXBlIiwiQ09NUEFSRV9UWVBFUyIsIkFCU09MVVRFIiwiZ2VvY29kZXIiLCJwb3NpdGlvbiIsImJydXNoIiwic2l6ZSIsImNvb3JkaW5hdGUiLCJERUZBVUxUX0FOSU1BVElPTl9DT05GSUciLCJkb21haW4iLCJjdXJyZW50VGltZSIsInNwZWVkIiwiaXNBbmltYXRpbmciLCJ0aW1lU3RlcHMiLCJ0aW1lRm9ybWF0IiwidGltZXpvbmUiLCJkZWZhdWx0VGltZUZvcm1hdCIsImhpZGVDb250cm9sIiwiZHVyYXRpb24iLCJERUZBVUxUX0VESVRPUiIsIm1vZGUiLCJFRElUT1JfTU9ERVMiLCJEUkFXX1BPTFlHT04iLCJmZWF0dXJlcyIsInNlbGVjdGVkRmVhdHVyZSIsInZpc2libGUiLCJJTklUSUFMX1ZJU19TVEFURSIsIm1hcEluZm8iLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwibGF5ZXJzIiwibGF5ZXJEYXRhIiwibGF5ZXJUb0JlTWVyZ2VkIiwibGF5ZXJPcmRlciIsImZpbHRlcnMiLCJmaWx0ZXJUb0JlTWVyZ2VkIiwiZGF0YXNldHMiLCJlZGl0aW5nRGF0YXNldCIsInVuZGVmaW5lZCIsImVmZmVjdHMiLCJlZmZlY3RPcmRlciIsImludGVyYWN0aW9uQ29uZmlnIiwiaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkIiwibGF5ZXJCbGVuZGluZyIsIm92ZXJsYXlCbGVuZGluZyIsImhvdmVySW5mbyIsImNsaWNrZWQiLCJtb3VzZVBvcyIsIm1heERlZmF1bHRUb29sdGlwcyIsIk1BWF9ERUZBVUxUX1RPT0xUSVBTIiwic3BsaXRNYXBzIiwic3BsaXRNYXBzVG9CZU1lcmdlZCIsImlzTWVyZ2luZ0RhdGFzZXRzIiwibGF5ZXJDbGFzc2VzIiwiTGF5ZXJDbGFzc2VzIiwiYW5pbWF0aW9uQ29uZmlnIiwiZWRpdG9yIiwiZmlsZUxvYWRpbmciLCJmaWxlTG9hZGluZ1Byb2dyZXNzIiwibG9hZGluZ0luZGljYXRvclZhbHVlIiwibG9hZGVycyIsImxvYWRPcHRpb25zIiwibWVyZ2VycyIsIlZJU19TVEFURV9NRVJHRVJTIiwic2NoZW1hIiwiS2VwbGVyR0xTY2hlbWEiLCJBQ1RJT05fVEFTS19GSVRfQk9VTkRTIiwiVGFzayIsImZyb21DYWxsYmFjayIsIl8iLCJjYiIsIkFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04iLCJ1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEiLCJzdGF0ZSIsIl9yZWYiLCJsYXllciIsImlkeCIsIm1hcCIsImx5ciIsImQiLCJ1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlIiwibmV3U3RhdGUiLCJpc1Zpc2libGUiLCJhZGROZXdMYXllcnNUb1NwbGl0TWFwIiwicmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzIiwiYW5pbWF0aW9uIiwidXBkYXRlQW5pbWF0aW9uRG9tYWluIiwicGlja0NoYW5nZWRQcm9wcyIsInByZXYiLCJjaGFuZ2VkUHJvcHMiLCJwaWNrUHJvcHNPZiIsIm9iaiIsImtleSIsInByb3RvdHlwZSIsImlzRXF1YWwiLCJWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTIiwiYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIiLCJhY3Rpb24iLCJfc2VyaWFsaXplTGF5ZXIiLCJvbGRMYXllcklkIiwibmV3TGF5ZXJDb25maWciLCJsYXllckluZGV4IiwibmV3UGFyc2VkTGF5ZXIiLCJwYXJzZUxheWVyQ29uZmlnIiwib2xkTGF5ZXIiLCJmaW5kIiwibCIsImRhdGFzZXQiLCJkYXRhSWQiLCJuZXdMYXllciIsInZhbGlkYXRlTGF5ZXJXaXRoRGF0YSIsIm5leHRTdGF0ZSIsInR5cGUiLCJvbGRMYXllckluZGV4IiwiZmluZEluZGV4IiwibGF5ZXJUeXBlQ2hhbmdlVXBkYXRlciIsImxheWVyVHlwZUNoYW5nZSIsIm5ld0xheWVySWQiLCJhcHBseUxheWVyQ29uZmlnIiwic2VyaWFsaXplZE9sZExheWVyIiwic2VyaWFsaXplTGF5ZXIiLCJzZXJpYWxpemVkTmV3TGF5ZXIiLCJjaGFuZ2VkIiwidmlzQ29uZmlnIiwibGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyIiwibGF5ZXJWaXNDb25maWdDaGFuZ2UiLCJ2aXN1YWxDaGFubmVscyIsImNoYW5uZWxOYW1lIiwiY2hhbm5lbCIsImNoYW5uZWxQcm9wTmFtZXMiLCJwcm9wIiwic29tZSIsImxheWVyVmlzdWFsQ2hhbm5lbENoYW5nZVVwZGF0ZXIiLCJsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UiLCJwaWNrIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJlcnIiLCJsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJsYXllckNvbmZpZ0NoYW5nZSIsInVwZGF0ZWxheWVyVmlzaWJpbHR5IiwiZmlsdGVySW5kZXgiLCJmaWx0ZXJTeW5jZWRXaXRoVGltZWxpbmUiLCJpc0xheWVyQW5pbWF0YWJsZSIsInN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyIiwiZW5hYmxlIiwiZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMiLCJwcm9wcyIsIm5ld0NvbmZpZyIsIl9hY3Rpb24kbmV3Q29uZmlnIiwicmVzdENvbmZpZyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllczIiLCJzdGF0ZVdpdGhEYXRhSWQiLCJsYXllckRhdGFJZENoYW5nZVVwZGF0ZXIiLCJuZXh0TGF5ZXIiLCJ1cGRhdGVMYXllckNvbmZpZyIsInNob3VsZENhbGN1bGF0ZUxheWVyRGF0YSIsIm9sZExheWVyRGF0YSIsInVwZGF0ZUxheWVyRGF0YVJlc3VsdCIsImNhbGN1bGF0ZUxheWVyRGF0YSIsImxheWVyQW5pbWF0aW9uQ2hhbmdlVXBkYXRlciIsIl9jYWxjdWxhdGVMYXllckRhdGEiLCJsYXllclRvZ2dsZVZpc2liaWxpdHlVcGRhdGVyIiwibGF5ZXJJZCIsInNwbGl0TWFwSWQiLCJtYXBJbmRleCIsInNtIiwidG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyIiwidG9nZ2xlTGF5ZXJGb3JNYXAiLCJzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSIsImxheWVyU2V0SXNWYWxpZFVwZGF0ZXIiLCJpc1ZhbGlkIiwibGF5ZXJUb1VwZGF0ZSIsIm5ld0RhdGEiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhMiIsImFkZE9yUmVtb3ZlVGV4dExhYmVscyIsIm5ld0ZpZWxkcyIsInRleHRMYWJlbCIsImRlZmF1bHRUZXh0TGFiZWwiLCJERUZBVUxUX1RFWFRfTEFCRUwiLCJuZXdUZXh0TGFiZWwiLCJjdXJyZW50RmllbGRzIiwidGwiLCJmaWVsZCIsImFkZEZpZWxkcyIsImluY2x1ZGVzIiwiZGVsZXRlRmllbGRzIiwiZmQiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwiYWYiLCJ1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUiLCJzcGxpY2UiLCJsYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXIiLCJfb2xkTGF5ZXIkZ2V0RGVmYXVsdEwiLCJfb2xkTGF5ZXIkZ2V0RGVmYXVsdEwyIiwiZ2V0RGVmYXVsdExheWVyQ29uZmlnIiwidmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEiLCJsb2FkZWRMYXllciIsImFsbG93RW1wdHlDb2x1bW4iLCJpc1ZhbGlkVG9TYXZlIiwidmFsaWRhdGVkIiwib2xkTGF5ZXJUeXBlIiwiaXNDb25maWdBY3RpdmUiLCJ1cGRhdGVMYXllckRvbWFpbiIsIl9jYWxjdWxhdGVMYXllckRhdGEzIiwic2V0SW5pdGlhbExheWVyQ29uZmlnIiwicmVzdWx0IiwiZmluZERlZmF1bHRMYXllclByb3BzIiwibmV3VHlwZSIsIm9sZElkIiwiQ29uc29sZSIsImVycm9yIiwiZGVmYXVsdExheWVyUHJvcHMiLCJhc3NpZ25Db25maWdUb0xheWVyIiwidmlzQ29uZmlnU2V0dGluZ3MiLCJpc0xheWVySG92ZXJlZCIsIl9jYWxjdWxhdGVMYXllckRhdGE0Iiwic2V0dGluZ3MiLCJfc2V0dGluZ3MkbGF5ZXJzIiwib2xkTGF5ZXJNYXAiLCJvdGhlckxheWVycyIsIm5ld1Zpc0NvbmZpZyIsInVwZGF0ZUxheWVyVmlzQ29uZmlnIiwidXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsIiwidXBkYXRlZFN0YXRlIiwidmlzdWFsQ2hhbm5lbCIsImNoYW5uZWxTY2FsZVR5cGUiLCJDSEFOTkVMX1NDQUxFUyIsImNvbG9yIiwidXBkYXRlTGF5ZXJDb2xvclVJIiwicmFuZ2UiLCJjb2xvclJhbmdlQ29uZmlnIiwiY29sb3JVSSIsImN1c3RvbUJyZWFrcyIsIl9jYWxjdWxhdGVMYXllckRhdGE1Iiwic2NhbGUiLCJTQ0FMRV9UWVBFUyIsImN1c3RvbU9yZGluYWwiLCJjdXN0b21QYWxldHRlIiwiaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlIiwib3JkaW5hbERvbWFpbiIsImNvbG9yQnJlYWtzIiwic2hvd0NvbG9yQ2hhcnQiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNiIsInNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIiLCJfcmVmMiIsInJlZHVjZSIsImFjY3UiLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlciIsInNldEZpbHRlclVwZGF0ZXIiLCJzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyIiwiX3JlZjMiLCJhbmltYXRpb25XaW5kb3ciLCJuZXdGaWx0ZXIiLCJzd2FwXyIsIm5ld1N5bmNUaW1lbGluZU1vZGUiLCJnZXRTeW5jQW5pbWF0aW9uTW9kZSIsInNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyIiwiYXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyIiwiX3NlcmlhbGl6ZUZpbHRlciIsImZpbHRlcklkIiwib2xkRmlsdGVyIiwic2VyaWFsaXplZE9sZEZpbHRlciIsInNlcmlhbGl6ZUZpbHRlciIsInNlcmlhbGl6ZWROZXdGaWx0ZXIiLCJzZXRGaWx0ZXIiLCJ2YWx1ZXMiLCJfYWN0aW9uJHZhbHVlSW5kZXgiLCJ2YWx1ZUluZGV4IiwidG9BcnJheSIsImRhdGFzZXRJZHNUb0ZpbHRlciIsIl9sb29wIiwicmVzIiwidiIsIl91cGRhdGVGaWx0ZXJQcm9wIiwiZW5sYXJnZWRGaWx0ZXIiLCJ2aWV3IiwiRklMVEVSX1ZJRVdfVFlQRVMiLCJlbmxhcmdlZCIsInNpZGUiLCJmaWx0ZXJlZERhdGFzZXRzIiwiYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyIsInVuaXEiLCJmaWx0ZXJXaXRoUExvdCIsInVwZGF0ZUZpbHRlclBsb3QiLCJ1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEiLCJGSUxURVJfVFlQRVMiLCJ0aW1lUmFuZ2UiLCJhZGp1c3RBbmltYXRpb25Db25maWdXaXRoRmlsdGVyIiwiX3VwZGF0ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleCIsIl9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgiLCJuZXh0VmFsdWUiLCJnZXREZWZhdWx0RmlsdGVyIiwicmVtb3ZlRmlsdGVyUGxvdCIsIl9pIiwiX2FyciIsIm5leHRWYWwiLCJkb21haW5TdGVwcyIsIm1lcmdlRmlsdGVyRG9tYWluIiwibmV4dEZpbHRlciIsInN0ZXAiLCJhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluIiwiZGF0YXNldElkcyIsIkZJTFRFUl9VUERBVEVSX1BST1BTIiwib2xkRGF0YUlkIiwiZGF0YXNldElkIiwiX2FwcGx5RmlsdGVyRmllbGROYW1lIiwiYXBwbHlGaWx0ZXJGaWVsZE5hbWUiLCJtZXJnZURvbWFpbiIsInVwZGF0ZWRGaWx0ZXIiLCJuZXdEYXRhc2V0IiwiZ3B1Iiwic2V0RmlsdGVyR3B1TW9kZSIsImFzc2lnbkdwdUNoYW5uZWwiLCJsYXllcklkRGlmZmVyZW5jZSIsInhvciIsImxheWVyRGF0YUlkcyIsImxpZCIsIm5ld0RhdGFJZHMiLCJzZXRGaWx0ZXJQbG90VXBkYXRlciIsIl9yZWY0IiwibmV3UHJvcCIsInBpY2tfIiwibWVyZ2VfIiwicGxvdFR5cGUiLCJjaGFydFR5cGUiLCJ5QXhpcyIsIlBMT1RfVFlQRVMiLCJsaW5lQ2hhcnQiLCJoaXN0b2dyYW0iLCJhZGRGaWx0ZXJVcGRhdGVyIiwiY3JlYXRlT3JVcGRhdGVGaWx0ZXJVcGRhdGVyIiwib3JpZ2luYWxJbmRleCIsImluZGV4IiwibGF5ZXJDb2xvclVJQ2hhbmdlVXBkYXRlciIsIl9yZWY1Iiwib2xkVml4Q29uZmlnIiwidG9nZ2xlRmlsdGVyQW5pbWF0aW9uVXBkYXRlciIsImlzRmlsdGVyQW5pbWF0aW9uQ29uZmlnIiwic2V0QW5pbWF0aW9uQ29uZmlnVXBkYXRlciIsImlzU2lkZUZpbHRlciIsImFwcGx5RmlsdGVyQ29uZmlnIiwidG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyIiwidG9nZ2xlTGF5ZXJBbmltYXRpb25Db250cm9sVXBkYXRlciIsInVwZGF0ZUZpbHRlckFuaW1hdGlvblNwZWVkVXBkYXRlciIsInVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyIiwiX3JlZjYiLCJzZXRGaWx0ZXJWaWV3VXBkYXRlciIsInNob3VsZFJlc2V0T3RoZXJGaWx0ZXJzVmlldyIsInRvZ2dsZUZpbHRlckZlYXR1cmVVcGRhdGVyIiwiZmVhdHVyZVRvRmlsdGVyVmFsdWUiLCJyZW1vdmVGaWx0ZXJVcGRhdGVyIiwiX3N0YXRlJGZpbHRlcnMkaWR4IiwibmV3RmlsdGVycyIsIm5ld0VkaXRvciIsImdldEZpbHRlcklkSW5GZWF0dXJlIiwiYWRkTGF5ZXJVcGRhdGVyIiwibmV3TGF5ZXJEYXRhIiwiY3JlYXRlTGF5ZXJGcm9tQ29uZmlnIiwid2FybiIsIl9hY3Rpb24kZGF0YXNldElkIiwiZGVmYXVsdERhdGFzZXQiLCJMYXllciIsInJlbW92ZUxheWVyVXBkYXRlciIsIl9yZWY3IiwiaXNGaW5pdGUiLCJsYXllclRvUmVtb3ZlIiwiZmlsdGVyT3V0QnlJZCIsInJlbW92ZUVsZW1lbnRBdEluZGV4IiwicmVvcmRlckxheWVyVXBkYXRlciIsIl9yZWY4Iiwib3JkZXIiLCJkdXBsaWNhdGVMYXllclVwZGF0ZXIiLCJfcmVmOSIsIm9yaWdpbmFsIiwib3JpZ2luYWxMYXllck9yZGVySWR4IiwibmV3TGFiZWwiLCJwb3N0Zml4IiwiZ2VuZXJhdGVIYXNoSWQiLCJMQVlFUl9JRF9MRU5HVEgiLCJuZXdMYXllck9yZGVyIiwiYXJyYXlJbnNlcnQiLCJhZGRFZmZlY3RVcGRhdGVyIiwiX2FjdGlvbiRjb25maWciLCJfYWN0aW9uJGNvbmZpZzIiLCJfYWN0aW9uJGNvbmZpZzMiLCJMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCIsImVmZmVjdCIsIkRJU1RBTkNFX0ZPR19UWVBFIiwiU1VSRkFDRV9GT0dfVFlQRSIsIm5ld0VmZmVjdCIsImNyZWF0ZUVmZmVjdCIsInNldFByb3BzIiwiZml4RWZmZWN0T3JkZXIiLCJyZW1vdmVFZmZlY3RVcGRhdGVyIiwiX3JlZjEwIiwiZWZmZWN0VG9SZW1vdmUiLCJlZmZlY3RJZCIsInJlb3JkZXJFZmZlY3RVcGRhdGVyIiwiX3JlZjExIiwidXBkYXRlRWZmZWN0VXBkYXRlciIsIl9yZWYxMiIsImlkeDIiLCJlZmZlY3RPcmRlcklkIiwibmV3RWZmZWN0cyIsInJlbW92ZURhdGFzZXRVcGRhdGVyIiwiZGF0YXNldEtleSIsIl9zdGF0ZSRkYXRhc2V0cyIsIm5ld0RhdGFzZXRzIiwibGF5ZXJzVG9SZW1vdmUiLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwiaW5kZXhPZiIsInJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWciLCJfcmVmMTMiLCJfaW50ZXJhY3Rpb25Db25maWciLCJfY29uZmlnJGZpZWxkc1RvU2hvdyIsImZpZWxkcyIsInVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyIiwidXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlciIsInNob3dEYXRhc2V0VGFibGVVcGRhdGVyIiwidXBkYXRlVGFibGVDb2xvclVwZGF0ZXIiLCJ1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyIiwibmV3Q29sb3IiLCJyZXNldE1hcENvbmZpZ1VwZGF0ZXIiLCJpbml0aWFsU3RhdGUiLCJyZWNlaXZlTWFwQ29uZmlnVXBkYXRlciIsIl9yZWYxNCIsIl9yZWYxNCRwYXlsb2FkIiwicGF5bG9hZCIsIl9yZWYxNCRwYXlsb2FkJGNvbmZpZyIsIl9yZWYxNCRwYXlsb2FkJG9wdGlvbiIsIm9wdGlvbnMiLCJ2aXNTdGF0ZSIsImtlZXBFeGlzdGluZ0NvbmZpZyIsIm1lcmdlZFN0YXRlIiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsIm1lcmdlciIsImlzVmFsaWRNZXJnZXIiLCJoYXNQcm9wc1RvTWVyZ2UiLCJtZXJnZSIsImdldFByb3BWYWx1ZVRvTWVyZ2VyIiwidG9NZXJnZVByb3AiLCJsYXllckhvdmVyVXBkYXRlciIsImluZm8iLCJpbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJjb250cmFkaWN0IiwiayIsImxheWVyQ2xpY2tVcGRhdGVyIiwicGlubmVkIiwiY2xvbmVEZWVwIiwicGlja2VkIiwibWFwQ2xpY2tVcGRhdGVyIiwibW91c2VNb3ZlVXBkYXRlciIsIl9yZWYxNSIsImV2dCIsInBvaW50IiwibW91c2VQb3NpdGlvbiIsImxuZ0xhdCIsInRvZ2dsZVNwbGl0TWFwVXBkYXRlciIsImNvbXB1dGVTcGxpdE1hcExheWVycyIsImR1cGxpY2F0ZSIsImNsb3NlU3BlY2lmaWNNYXBBdEluZGV4IiwiX3JlZjE2IiwidXBkYXRlVmlzRGF0YVVwZGF0ZXIiLCJjcmVhdGVEYXRhc2V0VGFza3MiLCJub3RpZmljYXRpb25UYXNrcyIsIl9yZWYxNyIsImRhdGFzZXRJbmRleCIsIl9yZWYxNyRpbmZvIiwicmVzdCIsInRhc2siLCJjcmVhdGVOZXdEYXRhRW50cnkiLCJhZGROb3RpZmljYXRpb24iLCJlcnJvck5vdGlmaWNhdGlvbiIsIm1lc3NhZ2UiLCJkYXRhc2V0c0FsbFNldHRsZWRUYXNrIiwiYWxsU2V0dGxlZCIsInJlc3VsdHMiLCJjcmVhdGVOZXdEYXRhc2V0U3VjY2VzcyIsImFkZFRvTWFwT3B0aW9ucyIsInNldExvYWRpbmdJbmRpY2F0b3JVcGRhdGVyIiwicGF5bG9hZF8iLCJjaGFuZ2UiLCJ3aXRoVGFzayIsImNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzVXBkYXRlciIsIl9hY3Rpb24kcGF5bG9hZCIsIm5ld0RhdGFFbnRyaWVzIiwic3RhdHVzIiwiQUNUSU9OX1RBU0siLCJyZWFzb24iLCJtZXJnZURhdGFzZXRzQnlPcmRlciIsImxheWVyTWVyZ2VycyIsIm0iLCJ3YWl0Rm9yTGF5ZXJEYXRhIiwiZGF0YXNldE1lcmdlcnMiLCJwb3N0TWVyZ2VyUGF5bG9hZCIsImFwcGx5TWVyZ2Vyc1VwZGF0ZXIiLCJtZXJnZVN0YXRlUmVzdWx0IiwibWVyZ2VTdGF0ZUZyb21NZXJnZXJzIiwiYWxsTWVyZ2VkIiwicG9zdE1lcmdlVXBkYXRlciIsImZEYXRhSWQiLCJkYXRhc2V0RmlsdGVyZWQiLCJkYXRhRW1wdHkiLCJuZXdMYXllcnMiLCJhdXRvQ3JlYXRlTGF5ZXJzIiwiYWRkRGVmYXVsdExheWVycyIsInRvb2x0aXBGaWVsZHMiLCJhdXRvQ3JlYXRlVG9vbHRpcHMiLCJhZGREZWZhdWx0VG9vbHRpcHMiLCJ1cGRhdGVkRGF0YXNldHMiLCJjZW50ZXJNYXAiLCJib3VuZHMiLCJmaW5kTWFwQm91bmRzIiwiZml0Qm91bmRzVGFzayIsImZpdE1hcEJvdW5kcyIsInJlbmFtZURhdGFzZXRVcGRhdGVyIiwiQUxMT1dFRF9VUERBVEVfREFUQVNFVF9QUk9QUyIsInZhbGlkYXRlRGF0YXNldFVwZGF0ZVByb3BzIiwidmFsaWRhdGVkUHJvcHMiLCJlbnRyaWVzIiwiYWNjIiwiZW50cnkiLCJfZW50cnkiLCJfc2xpY2VkVG9BcnJheTIiLCJpc1JnYkNvbG9yIiwiaXNQbGFpbk9iamVjdCIsImRlZXBtZXJnZSIsImV4aXN0aW5nIiwiY29weVRhYmxlQW5kVXBkYXRlIiwiX3N0YXRlJHNwbGl0TWFwcyRpbmRlIiwiaW5kZXhUb1JldHJpZXZlIiwibWFwTGF5ZXJzIiwibG9hZEZpbGVzVXBkYXRlciIsImZpbGVzIiwiX2FjdGlvbiRvbkZpbmlzaCIsIm9uRmluaXNoIiwibG9hZEZpbGVzU3VjY2VzcyIsImluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzIiwiZmlsZUNhY2hlIiwiZmlsZXNUb0xvYWQiLCJsb2FkTmV4dEZpbGVVcGRhdGVyIiwibG9hZEZpbGVTdGVwU3VjY2Vzc1VwZGF0ZXIiLCJmaWxlTmFtZSIsIl9zdGF0ZSRmaWxlTG9hZGluZyIsInN0YXRlV2l0aFByb2dyZXNzIiwidXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIiLCJwcm9ncmVzcyIsInBlcmNlbnQiLCJzdGF0ZVdpdGhDYWNoZSIsIkRFTEFZX1RBU0siLCJsb2FkTmV4dEZpbGUiLCJfZmlsZXNUb0xvYWQiLCJfdG9BcnJheTIiLCJmaWxlIiwicmVtYWluaW5nRmlsZXNUb0xvYWQiLCJtYWtlTG9hZEZpbGVUYXNrIiwiTE9BRF9GSUxFX1RBU0siLCJiaW1hcCIsImdlbiIsIm5leHRGaWxlQmF0Y2giLCJwcm9jZXNzRmlsZUNvbnRlbnQiLCJjb250ZW50IiwibG9hZEZpbGVzRXJyIiwicHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlciIsIl9hY3Rpb24kcGF5bG9hZDIiLCJQUk9DRVNTX0ZJTEVfREFUQSIsImxvYWRGaWxlU3RlcFN1Y2Nlc3MiLCJwYXJzZVByb2dyZXNzIiwicHJldlByb2dyZXNzIiwibmV4dEZpbGVCYXRjaFVwZGF0ZXIiLCJfcmVmMTgiLCJfYWNjdW11bGF0ZWQkZGF0YSIsIl9yZWYxOCRwYXlsb2FkIiwiYWNjdW11bGF0ZWQiLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsInVzZUFycm93UHJvZ3Jlc3NpdmVMb2FkaW5nIiwiZW5kc1dpdGgiLCJkYXRhIiwiVU5XUkFQX1RBU0siLCJfcmVmMTkiLCJsb2FkRmlsZXNFcnJVcGRhdGVyIiwiX3JlZjIwIiwiX3N0YXRlJGZpbGVMb2FkaW5nMiIsImFwcGx5Q1BVRmlsdGVyVXBkYXRlciIsIl9yZWYyMSIsImRhdGFJZHMiLCJmaWx0ZXJEYXRhc2V0Q1BVIiwic2V0TWFwSW5mb1VwZGF0ZXIiLCJlbXB0eSIsImRlZmF1bHRMYXllcnMiLCJmb3VuZExheWVycyIsImZpbmREZWZhdWx0TGF5ZXIiLCJnZXRMYXllck9yZGVyRnJvbUxheWVycyIsImZpbmRGaWVsZHNUb1Nob3ciLCJtZXJnZWQiLCJfcmVmMjMiLCJmaXhlZERvbWFpbiIsIl9jYWxjdWxhdGVMYXllckRhdGE3IiwiX3N0YXRlJGZpbHRlcnMiLCJhbmltYXRhYmxlTGF5ZXJzIiwibGF5ZXJEb21haW5zIiwibWVyZ2VkRG9tYWluIiwibWVyZ2VUaW1lRG9tYWlucyIsImdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlciIsIm1lcmdlZFRpbWVTdGVwcyIsInNvcnQiLCJCQVNFX1NQRUVEIiwiRlBTIiwic3luY2VkRmlsdGVyIiwibmV3QW5pbWF0aW9uRG9tYWluIiwiaXNJblJhbmdlIiwic2V0RWRpdG9yTW9kZVVwZGF0ZXIiLCJfcmVmMjQiLCJzZXRGZWF0dXJlc1VwZGF0ZXIiLCJfcmVmMjUiLCJfbGFzdEZlYXR1cmUkcHJvcGVydGkiLCJfcmVmMjUkZmVhdHVyZXMiLCJsYXN0RmVhdHVyZSIsInByb3BlcnRpZXMiLCJpc0Nsb3NlZCIsIkVESVQiLCJmZWF0dXJlIiwiYmJveCIsImZlYXR1cmVWYWx1ZSIsImZpbHRlcklkeCIsImZpbCIsInNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXIiLCJfcmVmMjYiLCJzZWxlY3Rpb25Db250ZXh0IiwiZGVsZXRlRmVhdHVyZVVwZGF0ZXIiLCJfcmVmMjciLCJzZXRQb2x5Z29uRmlsdGVyTGF5ZXJVcGRhdGVyIiwibm9uZUZpbHRlckZlYXR1cmUiLCJfZmlsdGVyJGxheWVySWQiLCJpc0xheWVySW5jbHVkZWQiLCJnZW5lcmF0ZVBvbHlnb25GaWx0ZXIiLCJzb3J0VGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjI4IiwiY29sdW1uIiwic29ydE1vZGUiLCJjdXJyZW50TW9kZSIsIlNPUlRfT1JERVIiLCJBU0NFTkRJTkciLCJzb3J0ZWQiLCJzb3J0RGF0YXNldEJ5Q29sdW1uIiwicGluVGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjI5IiwicGluVGFibGVDb2x1bW5zIiwiY29weVRhYmxlQ29sdW1uVXBkYXRlciIsIl9yZWYzMCIsImZpZWxkSWR4IiwidGV4dCIsImRhdGFDb250YWluZXIiLCJyb3ciLCJwYXJzZUZpZWxkVmFsdWUiLCJ2YWx1ZUF0Iiwiam9pbiIsImNvcHkiLCJzZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlciIsIl9yZWYzMSIsImZvcm1hdHMiLCJkaXNwbGF5Rm9ybWF0IiwiX2xheWVyJGNvbmZpZyIsImNvbG9yRmllbGQiLCJ0b2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlciIsInNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyIiwiX3JlZjMyIiwidXBkYXRlcyIsImNoZWNrVGltZUNvbmZpZ0FyZ3MiLCJhbGxvd2VkIiwic2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlciIsIl9yZWYzMyIsImxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZVVwZGF0ZXIiLCJfbGF5ZXIkZmlsdGVyZWRJdGVtQ28iLCJldmVudCIsImRlY2tnbExheWVySWQiLCJjb3VudCIsImZpbHRlcmVkSXRlbUNvdW50Iiwid21zRmVhdHVyZUluZm9VcGRhdGVyIiwiZmVhdHVyZUluZm8iLCJjb25zb2xlIiwib2JqZWN0Iiwid21zRmVhdHVyZUluZm8iLCJfbmV3U3RhdGUkYW5pbWF0aW9uQ28iLCJfbmV3U3RhdGUkYW5pbWF0aW9uQ28yIiwiX2FjdGlvbiRlbmFibGUiLCJpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzIiwiZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyIsImhhc0ludGVydmFsQmFzZWRBbmltYXRpb25MYXllciIsIkJvb2xlYW4iLCJuZXdGaWx0ZXJEb21haW4iLCJBTklNQVRJT05fV0lORE9XIiwiaW50ZXJ2YWwiLCJhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwiLCJuZXdGaWx0ZXJWYWx1ZSIsInN5bmNUaW1lbGluZU1vZGUiLCJTWU5DX1RJTUVMSU5FX01PREVTIiwiZW5kIiwidmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZSIsIl9yZWYzNCIsIk1hdGgiLCJtYXgiLCJ0aW1lbGluZVZhbHVlIiwiZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIiLCJzbmFwVG9NYXJrcyIsImZyZWUiLCJfZmlsdGVyJHN5bmNUaW1lbGluZU0iLCJuZXdNb2RlIiwic3RhcnQiLCJpbnRlcnZhbEluZGV4IiwiY3VycmVudEluZGV4IiwibWV0YSIsInRhcmdldFRpbWVJbnRlcnZhbCIsIm5ld0luZGV4IiwiVElNRV9JTlRFUlZBTFNfT1JERVJFRCIsImhleFRpbGVJbnRlcnZhbCIsIkxheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWwiLCJnZXREZWZhdWx0VGltZUZvcm1hdCIsInVwZGF0ZWRQbG90VHlwZSIsInVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZSIsImFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3ciLCJkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMiLCJkYXRhSWRUb1JlcGxhY2UiLCJfdmFsdWUkY29uZmlnIiwiX3ZhbHVlJGNvbmZpZzIiLCJyZXBsYWNlZCIsImlzT2JqZWN0IiwiZmluZENoaWxkRGF0YXNldElkcyIsIl92YWx1ZSRuZXdEYXRhc2V0IiwiY2hpbGREYXRhSWRzIiwibW92ZVZhbHVlVG9CZU1lcmdlZCIsInByb3BWYWx1ZXMiLCJfcmVmMzYiLCJzYXZlVW5tZXJnZWQiLCJzdGF0ZVJlbW92ZWQiLCJwcm9wVmFsdWUiLCJwIiwidG9CZU1lcmdlZCIsInJlcGxhY2VEYXRhc2V0QW5kRGVwcyIsImRhdGFJZFRvVXNlIiwiY29tcG9zZV8iLCJhcHBseV8iLCJyZXBsYWNlRGF0YXNldERlcHNJblN0YXRlIiwicHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2UiLCJfbmV4dFN0YXRlJGxheWVyVG9CZU0iLCJzZXJpYWxpemVkU3RhdGUiLCJzZXJpYWxpemVWaXNTdGF0ZSIsInByZXNlcnZlTGF5ZXJPcmRlciIsInByZXNlcnZlRGF0YXNldE9yZGVyIiwiX3NlcmlhbGl6ZWRTdGF0ZSRzcGxpIiwiX3JlZjM3IiwiYWNjdVN0YXRlIiwiX3JlZjM4IiwicmVwbGFjZVBhcmVudERhdGFzZXRJZHMiLCJnZXRDaGlsZERhdGFzZXRJZHMiLCJwcmVzZXJ2ZU9yZGVyIiwidG9NZXJnZVByb3BzIiwic2F2ZWRQcm9wcyIsInJlcGxhY2VkU3RhdGUiLCJfcmVwbGFjZWRTdGF0ZSRtZXJnZXIiLCJtZXJnZXJPcHRpb25zIiwicmVwbGFjZWRJdGVtIiwicmVwbGFjZVByb3BWYWx1ZUluU3RhdGUiLCJpdGVtIiwiX3JlZjM5IiwiY2hpbGREYXRhSWQiXSwic291cmNlcyI6WyIuLi9zcmMvdmlzLXN0YXRlLXVwZGF0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBiYm94IGZyb20gJ0B0dXJmL2Jib3gnO1xuaW1wb3J0IGNvcHkgZnJvbSAnY29weS10by1jbGlwYm9hcmQnO1xuaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdkZWVwbWVyZ2UnO1xuaW1wb3J0IHtjb25zb2xlIGFzIENvbnNvbGV9IGZyb20gJ2dsb2JhbC93aW5kb3cnO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdsb2Rhc2gvY2xvbmVEZWVwJztcbmltcG9ydCBnZXQgZnJvbSAnbG9kYXNoL2dldCc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2gvaXNFcXVhbCc7XG5pbXBvcnQgcGljayBmcm9tICdsb2Rhc2gvcGljayc7XG5pbXBvcnQgdW5pcSBmcm9tICdsb2Rhc2gvdW5pcSc7XG5pbXBvcnQgeG9yIGZyb20gJ2xvZGFzaC94b3InO1xuaW1wb3J0IFRhc2ssIHtkaXNhYmxlU3RhY2tDYXB0dXJpbmcsIHdpdGhUYXNrfSBmcm9tICdyZWFjdC1wYWxtL3Rhc2tzJztcbi8vIFRhc2tzXG5pbXBvcnQge1xuICBERUxBWV9UQVNLLFxuICBBQ1RJT05fVEFTSyxcbiAgTE9BRF9GSUxFX1RBU0ssXG4gIFBST0NFU1NfRklMRV9EQVRBLFxuICBVTldSQVBfVEFTS1xufSBmcm9tICdAa2VwbGVyLmdsL3Rhc2tzJztcbi8vIEFjdGlvbnNcbmltcG9ydCB7XG4gIGFkZE5vdGlmaWNhdGlvbixcbiAgQWN0aW9uVHlwZXMsXG4gIENyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzUGF5bG9hZCxcbiAgTWFwU3RhdGVBY3Rpb25zLFxuICBSZWNlaXZlTWFwQ29uZmlnUGF5bG9hZCxcbiAgVmlzU3RhdGVBY3Rpb25zLFxuICBhcHBseUxheWVyQ29uZmlnLFxuICBjcmVhdGVOZXdEYXRhc2V0U3VjY2VzcyxcbiAgbGF5ZXJDb25maWdDaGFuZ2UsXG4gIGxheWVyVHlwZUNoYW5nZSxcbiAgbGF5ZXJWaXNDb25maWdDaGFuZ2UsXG4gIGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSxcbiAgbG9hZEZpbGVTdGVwU3VjY2VzcyxcbiAgbG9hZEZpbGVzRXJyLFxuICBsb2FkRmlsZXNTdWNjZXNzLFxuICBsb2FkTmV4dEZpbGUsXG4gIG5leHRGaWxlQmF0Y2gsXG4gIHNldEZpbHRlcixcbiAgcHJvY2Vzc0ZpbGVDb250ZW50LFxuICBmaXRCb3VuZHMgYXMgZml0TWFwQm91bmRzLFxuICB0b2dnbGVMYXllckZvck1hcCxcbiAgYXBwbHlGaWx0ZXJDb25maWcsXG4gIFNldExvYWRpbmdJbmRpY2F0b3JQYXlsb2FkXG59IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5cbi8vIFV0aWxzXG5pbXBvcnQge1xuICBGSUxURVJfVVBEQVRFUl9QUk9QUyxcbiAgYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcCxcbiAgc25hcFRvTWFya3MsXG4gIGFwcGx5RmlsdGVyRmllbGROYW1lLFxuICBhcHBseUZpbHRlcnNUb0RhdGFzZXRzLFxuICBhcnJheUluc2VydCxcbiAgY29tcHV0ZVNwbGl0TWFwTGF5ZXJzLFxuICBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluLFxuICBlcnJvck5vdGlmaWNhdGlvbixcbiAgZmVhdHVyZVRvRmlsdGVyVmFsdWUsXG4gIGZpbHRlckRhdGFzZXRDUFUsXG4gIGdlbmVyYXRlUG9seWdvbkZpbHRlcixcbiAgZ2V0RGVmYXVsdEZpbHRlcixcbiAgZ2V0RmlsdGVySWRJbkZlYXR1cmUsXG4gIGdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlcixcbiAgaXNJblJhbmdlLFxuICBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdCxcbiAgaXNSZ2JDb2xvcixcbiAgcGFyc2VGaWVsZFZhbHVlLFxuICByZW1vdmVMYXllckZyb21TcGxpdE1hcHMsXG4gIHNldCxcbiAgdXBkYXRlRmlsdGVyUGxvdCxcbiAgcmVtb3ZlRmlsdGVyUGxvdCxcbiAgaXNMYXllckFuaW1hdGFibGUsXG4gIGlzU2lkZUZpbHRlcixcbiAgZ2V0QXBwbGljYXRpb25Db25maWdcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2dlbmVyYXRlSGFzaElkLCB0b0FycmF5fSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG4vLyBNZXJnZXJzXG5pbXBvcnQge1xuICBBTklNQVRJT05fV0lORE9XLFxuICBCQVNFX1NQRUVELFxuICBDT01QQVJFX1RZUEVTLFxuICBERUZBVUxUX1RFWFRfTEFCRUwsXG4gIEVESVRPUl9NT0RFUyxcbiAgRklMVEVSX1RZUEVTLFxuICBGSUxURVJfVklFV19UWVBFUyxcbiAgRlBTLFxuICBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCxcbiAgRElTVEFOQ0VfRk9HX1RZUEUsXG4gIFNVUkZBQ0VfRk9HX1RZUEUsXG4gIE1BWF9ERUZBVUxUX1RPT0xUSVBTLFxuICBQTE9UX1RZUEVTLFxuICBTT1JUX09SREVSLFxuICBTWU5DX1RJTUVMSU5FX01PREVTLFxuICBDSEFOTkVMX1NDQUxFUyxcbiAgU0NBTEVfVFlQRVNcbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtMQVlFUl9JRF9MRU5HVEgsIExheWVyLCBMYXllckNsYXNzZXN9IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7XG4gIGFwcGx5XyxcbiAgY29tcG9zZV8sXG4gIGZpbHRlck91dEJ5SWQsXG4gIG1lcmdlXyxcbiAgcGF5bG9hZF8sXG4gIHBpY2tfLFxuICByZW1vdmVFbGVtZW50QXRJbmRleCxcbiAgc3dhcF9cbn0gZnJvbSAnLi9jb21wb3Nlci1oZWxwZXJzJztcbmltcG9ydCB7aXNWYWxpZE1lcmdlciwgbWVyZ2VTdGF0ZUZyb21NZXJnZXJzfSBmcm9tICcuL21lcmdlci1oYW5kbGVyJztcbmltcG9ydCB7XG4gIFZJU19TVEFURV9NRVJHRVJTLFxuICBjcmVhdGVMYXllckZyb21Db25maWcsXG4gIHBhcnNlTGF5ZXJDb25maWcsXG4gIHNlcmlhbGl6ZUZpbHRlcixcbiAgc2VyaWFsaXplTGF5ZXIsXG4gIHNlcmlhbGl6ZVZpc1N0YXRlLFxuICB2YWxpZGF0ZUxheWVyV2l0aERhdGFcbn0gZnJvbSAnLi92aXMtc3RhdGUtbWVyZ2VyJztcblxuaW1wb3J0IEtlcGxlckdMU2NoZW1hLCB7TWVyZ2VyLCBQb3N0TWVyZ2VyUGF5bG9hZCwgVmlzU3RhdGV9IGZyb20gJ0BrZXBsZXIuZ2wvc2NoZW1hcyc7XG5cbmltcG9ydCB7XG4gIEZpbHRlcixcbiAgSW50ZXJhY3Rpb25Db25maWcsXG4gIEFuaW1hdGlvbkNvbmZpZyxcbiAgRmlsdGVyQW5pbWF0aW9uQ29uZmlnLFxuICBFZGl0b3IsXG4gIEZpZWxkLFxuICBUaW1lUmFuZ2VGaWx0ZXJcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge0xvYWRlcn0gZnJvbSAnQGxvYWRlcnMuZ2wvbG9hZGVyLXV0aWxzJztcblxuaW1wb3J0IHtcbiAgRGF0YXNldHMsXG4gIGFzc2lnbkdwdUNoYW5uZWwsXG4gIGNvcHlUYWJsZUFuZFVwZGF0ZSxcbiAgY3JlYXRlTmV3RGF0YUVudHJ5LFxuICBwaW5UYWJsZUNvbHVtbnMsXG4gIHNldEZpbHRlckdwdU1vZGUsXG4gIHNvcnREYXRhc2V0QnlDb2x1bW5cbn0gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5pbXBvcnQge2ZpbmRGaWVsZHNUb1Nob3d9IGZyb20gJy4vaW50ZXJhY3Rpb24tdXRpbHMnO1xuaW1wb3J0IHtjYWxjdWxhdGVMYXllckRhdGEsIGZpbmREZWZhdWx0TGF5ZXIsIGdldExheWVyT3JkZXJGcm9tTGF5ZXJzfSBmcm9tICcuL2xheWVyLXV0aWxzJztcbmltcG9ydCB7Z2V0UHJvcFZhbHVlVG9NZXJnZXIsIGhhc1Byb3BzVG9NZXJnZX0gZnJvbSAnLi9tZXJnZXItaGFuZGxlcic7XG5pbXBvcnQge21lcmdlRGF0YXNldHNCeU9yZGVyfSBmcm9tICcuL3Zpcy1zdGF0ZS1tZXJnZXInO1xuaW1wb3J0IHtcbiAgZml4RWZmZWN0T3JkZXIsXG4gIGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzLFxuICBnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLFxuICBtZXJnZVRpbWVEb21haW5zLFxuICBhZGp1c3RWYWx1ZVRvQW5pbWF0aW9uV2luZG93LFxuICB1cGRhdGVUaW1lRmlsdGVyUGxvdFR5cGUsXG4gIGdldERlZmF1bHRUaW1lRm9ybWF0LFxuICBMYXllclRvRmlsdGVyVGltZUludGVydmFsLFxuICBUSU1FX0lOVEVSVkFMU19PUkRFUkVELFxuICBtZXJnZUZpbHRlckRvbWFpbixcbiAgaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtjcmVhdGVFZmZlY3R9IGZyb20gJ0BrZXBsZXIuZ2wvZWZmZWN0cyc7XG5pbXBvcnQge1BheWxvYWRBY3Rpb259IGZyb20gJ0ByZWR1eGpzL3Rvb2xraXQnO1xuXG5pbXBvcnQge2ZpbmRNYXBCb3VuZHN9IGZyb20gJy4vZGF0YS11dGlscyc7XG5cbi8vIHJlYWN0LXBhbG1cbi8vIGRpc2FibGUgY2FwdHVyZSBleGNlcHRpb24gZm9yIHJlYWN0LXBhbG0gY2FsbCB0byB3aXRoVGFza1xuZGlzYWJsZVN0YWNrQ2FwdHVyaW5nKCk7XG5cbi8qKlxuICogVXBkYXRlcnMgZm9yIGB2aXNTdGF0ZWAgcmVkdWNlci4gQ2FuIGJlIHVzZWQgaW4geW91ciByb290IHJlZHVjZXIgdG8gZGlyZWN0bHkgbW9kaWZ5IGtlcGxlci5nbCdzIHN0YXRlLlxuICogUmVhZCBtb3JlIGFib3V0IFtVc2luZyB1cGRhdGVyc10oLi4vYWR2YW5jZWQtdXNhZ2UvdXNpbmctdXBkYXRlcnMubWQpXG4gKlxuICogQHB1YmxpY1xuICogQGV4YW1wbGVcbiAqXG4gKiBpbXBvcnQga2VwbGVyR2xSZWR1Y2VyLCB7dmlzU3RhdGVVcGRhdGVyc30gZnJvbSAnQGtlcGxlci5nbC9yZWR1Y2Vycyc7XG4gKiAvLyBSb290IFJlZHVjZXJcbiAqIGNvbnN0IHJlZHVjZXJzID0gY29tYmluZVJlZHVjZXJzKHtcbiAqICBrZXBsZXJHbDoga2VwbGVyR2xSZWR1Y2VyLFxuICogIGFwcDogYXBwUmVkdWNlclxuICogfSk7XG4gKlxuICogY29uc3QgY29tcG9zZWRSZWR1Y2VyID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAqICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gKiAgICBjYXNlICdDTElDS19CVVRUT04nOlxuICogICAgICByZXR1cm4ge1xuICogICAgICAgIC4uLnN0YXRlLFxuICogICAgICAgIGtlcGxlckdsOiB7XG4gKiAgICAgICAgICAuLi5zdGF0ZS5rZXBsZXJHbCxcbiAqICAgICAgICAgIGZvbzoge1xuICogICAgICAgICAgICAgLi4uc3RhdGUua2VwbGVyR2wuZm9vLFxuICogICAgICAgICAgICAgdmlzU3RhdGU6IHZpc1N0YXRlVXBkYXRlcnMuZW5sYXJnZUZpbHRlclVwZGF0ZXIoXG4gKiAgICAgICAgICAgICAgIHN0YXRlLmtlcGxlckdsLmZvby52aXNTdGF0ZSxcbiAqICAgICAgICAgICAgICAge2lkeDogMH1cbiAqICAgICAgICAgICAgIClcbiAqICAgICAgICAgIH1cbiAqICAgICAgICB9XG4gKiAgICAgIH07XG4gKiAgfVxuICogIHJldHVybiByZWR1Y2VycyhzdGF0ZSwgYWN0aW9uKTtcbiAqIH07XG4gKlxuICogZXhwb3J0IGRlZmF1bHQgY29tcG9zZWRSZWR1Y2VyO1xuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbi8vIEB0cy1pZ25vcmVcbmNvbnN0IHZpc1N0YXRlVXBkYXRlcnMgPSBudWxsO1xuLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRJbnRlcmFjdGlvbkNvbmZpZzogSW50ZXJhY3Rpb25Db25maWcgPSB7XG4gIHRvb2x0aXA6IHtcbiAgICBpZDogJ3Rvb2x0aXAnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLnRvb2x0aXAnLFxuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgY29uZmlnOiB7XG4gICAgICBmaWVsZHNUb1Nob3c6IHt9LFxuICAgICAgY29tcGFyZU1vZGU6IGZhbHNlLFxuICAgICAgY29tcGFyZVR5cGU6IENPTVBBUkVfVFlQRVMuQUJTT0xVVEVcbiAgICB9XG4gIH0sXG4gIGdlb2NvZGVyOiB7XG4gICAgaWQ6ICdnZW9jb2RlcicsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuZ2VvY29kZXInLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIHBvc2l0aW9uOiBudWxsXG4gIH0sXG4gIGJydXNoOiB7XG4gICAgaWQ6ICdicnVzaCcsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuYnJ1c2gnLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIGNvbmZpZzoge1xuICAgICAgLy8gc2l6ZSBpcyBpbiBrbVxuICAgICAgc2l6ZTogMC41XG4gICAgfVxuICB9LFxuICBjb29yZGluYXRlOiB7XG4gICAgaWQ6ICdjb29yZGluYXRlJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5jb29yZGluYXRlJyxcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBwb3NpdGlvbjogbnVsbFxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BTklNQVRJT05fQ09ORklHOiBBbmltYXRpb25Db25maWcgPSB7XG4gIGRvbWFpbjogbnVsbCxcbiAgY3VycmVudFRpbWU6IG51bGwsXG4gIHNwZWVkOiAxLFxuICBpc0FuaW1hdGluZzogZmFsc2UsXG4gIHRpbWVTdGVwczogbnVsbCxcbiAgdGltZUZvcm1hdDogbnVsbCxcbiAgdGltZXpvbmU6IG51bGwsXG4gIGRlZmF1bHRUaW1lRm9ybWF0OiBudWxsLFxuICBoaWRlQ29udHJvbDogZmFsc2UsXG4gIGR1cmF0aW9uOiBudWxsXG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9FRElUT1I6IEVkaXRvciA9IHtcbiAgbW9kZTogRURJVE9SX01PREVTLkRSQVdfUE9MWUdPTixcbiAgZmVhdHVyZXM6IFtdLFxuICBzZWxlY3RlZEZlYXR1cmU6IG51bGwsXG4gIHZpc2libGU6IHRydWVcbn07XG5cbi8qKlxuICogRGVmYXVsdCBpbml0aWFsIGB2aXNTdGF0ZWBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAY29uc3RhbnRcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IElOSVRJQUxfVklTX1NUQVRFOiBWaXNTdGF0ZSA9IHtcbiAgLy8gbWFwIGluZm9cbiAgbWFwSW5mbzoge1xuICAgIHRpdGxlOiAnJyxcbiAgICBkZXNjcmlwdGlvbjogJydcbiAgfSxcbiAgLy8gbGF5ZXJzXG4gIGxheWVyczogW10sXG4gIGxheWVyRGF0YTogW10sXG4gIGxheWVyVG9CZU1lcmdlZDogW10sXG4gIGxheWVyT3JkZXI6IFtdLFxuXG4gIC8vIGZpbHRlcnNcbiAgZmlsdGVyczogW10sXG4gIGZpbHRlclRvQmVNZXJnZWQ6IFtdLFxuXG4gIC8vIGEgY29sbGVjdGlvbiBvZiBtdWx0aXBsZSBkYXRhc2V0XG4gIGRhdGFzZXRzOiB7fSxcbiAgZWRpdGluZ0RhdGFzZXQ6IHVuZGVmaW5lZCxcblxuICAvLyBlZmZlY3RzXG4gIGVmZmVjdHM6IFtdLFxuICBlZmZlY3RPcmRlcjogW10sXG5cbiAgaW50ZXJhY3Rpb25Db25maWc6IGRlZmF1bHRJbnRlcmFjdGlvbkNvbmZpZyxcbiAgaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkOiB7fSxcblxuICBsYXllckJsZW5kaW5nOiAnbm9ybWFsJyxcbiAgb3ZlcmxheUJsZW5kaW5nOiAnbm9ybWFsJyxcbiAgaG92ZXJJbmZvOiB1bmRlZmluZWQsXG4gIGNsaWNrZWQ6IHVuZGVmaW5lZCxcbiAgbW91c2VQb3M6IHt9LFxuICBtYXhEZWZhdWx0VG9vbHRpcHM6IE1BWF9ERUZBVUxUX1RPT0xUSVBTLFxuXG4gIC8vIHRoaXMgaXMgdXNlZCB3aGVuIHVzZXIgc3BsaXQgbWFwc1xuICBzcGxpdE1hcHM6IFtcbiAgICAvLyB0aGlzIHdpbGwgY29udGFpbiBhIGxpc3Qgb2Ygb2JqZWN0cyB0b1xuICAgIC8vIGRlc2NyaWJlIHRoZSBzdGF0ZSBvZiBsYXllciBhdmFpbGFiaWxpdHkgYW5kIHZpc2liaWxpdHkgZm9yIGVhY2ggbWFwXG4gICAgLy8gW1xuICAgIC8vICAge1xuICAgIC8vICAgICAgbGF5ZXJzOiB7bGF5ZXJfaWQ6IHRydWUgfCBmYWxzZX1cbiAgICAvLyAgIH1cbiAgICAvLyBdXG4gIF0sXG4gIHNwbGl0TWFwc1RvQmVNZXJnZWQ6IFtdLFxuICBpc01lcmdpbmdEYXRhc2V0czoge30sXG4gIC8vIGRlZmF1bHRzIGxheWVyIGNsYXNzZXNcbiAgbGF5ZXJDbGFzc2VzOiBMYXllckNsYXNzZXMsXG5cbiAgLy8gZGVmYXVsdCBhbmltYXRpb25cbiAgLy8gdGltZSBpbiB1bml4IHRpbWVzdGFtcCAobWlsbGlzZWNvbmRzKSAodGhlIG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIHRoZSBVbml4IEVwb2NoKVxuICBhbmltYXRpb25Db25maWc6IERFRkFVTFRfQU5JTUFUSU9OX0NPTkZJRyxcblxuICBlZGl0b3I6IERFRkFVTFRfRURJVE9SLFxuXG4gIGZpbGVMb2FkaW5nOiBmYWxzZSxcbiAgZmlsZUxvYWRpbmdQcm9ncmVzczoge30sXG4gIC8vIGZvciBsb2FkaW5nIGRhdGFzZXRzXG4gIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZTogMCxcblxuICBsb2FkZXJzOiBbXSxcbiAgbG9hZE9wdGlvbnM6IHt9LFxuXG4gIC8vIHZpc1N0YXRlTWVyZ2Vyc1xuICBtZXJnZXJzOiBWSVNfU1RBVEVfTUVSR0VSUyxcblxuICAvLyBrZXBsZXIgc2NoZW1hc1xuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hXG59O1xuXG5leHBvcnQgY29uc3QgQUNUSU9OX1RBU0tfRklUX0JPVU5EUyA9IFRhc2suZnJvbUNhbGxiYWNrKFxuICAoXywgY2IpID0+IGNiKCksXG5cbiAgJ0FDVElPTl9UQVNLX0ZJVF9CT1VORFMnXG4pO1xuXG5leHBvcnQgY29uc3QgQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTiA9IFRhc2suZnJvbUNhbGxiYWNrKFxuICAoXywgY2IpID0+IGNiKCksXG5cbiAgJ0FDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04nXG4pO1xuXG50eXBlIFVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YVR5cGUgPSB7XG4gIGxheWVyczogTGF5ZXJbXTtcbiAgbGF5ZXJEYXRhOiBhbnlbXTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHN0YXRlIHdpdGggdXBkYXRlZCBsYXllciBhbmQgbGF5ZXJEYXRhXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhPFMgZXh0ZW5kcyBVcGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGFUeXBlPihcbiAgc3RhdGU6IFMsXG4gIHtsYXllckRhdGEsIGxheWVyLCBpZHh9OiB7bGF5ZXJEYXRhPzogYW55OyBsYXllcjogTGF5ZXI7IGlkeDogbnVtYmVyfVxuKTogUyB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBzdGF0ZS5sYXllcnMubWFwKChseXIsIGkpID0+IChpID09PSBpZHggPyBsYXllciA6IGx5cikpLFxuICAgIGxheWVyRGF0YTogbGF5ZXJEYXRhXG4gICAgICA/IHN0YXRlLmxheWVyRGF0YS5tYXAoKGQsIGkpID0+IChpID09PSBpZHggPyBsYXllckRhdGEgOiBkKSlcbiAgICAgIDogc3RhdGUubGF5ZXJEYXRhXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIGxheWVyOiBMYXllcik6IFMge1xuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgaWYgKHN0YXRlLnNwbGl0TWFwcy5sZW5ndGgpIHtcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgc3BsaXRNYXBzOiBsYXllci5jb25maWcuaXNWaXNpYmxlXG4gICAgICAgID8gYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcChzdGF0ZS5zcGxpdE1hcHMsIGxheWVyKVxuICAgICAgICA6IHJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyhzdGF0ZS5zcGxpdE1hcHMsIGxheWVyKVxuICAgIH07XG4gIH1cblxuICBpZiAobGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIENvbXBhcmVzIHR3byBvYmplY3RzIChvciBhcnJheXMpIGFuZCByZXR1cm5zIGEgbmV3IG9iamVjdCB3aXRoIG9ubHkgdGhlXG4gKiBwcm9wZXJ0aWVzIHRoYXQgaGF2ZSBjaGFuZ2VkIGJldHdlZW4gdGhlIHR3byBvYmplY3RzLlxuICovXG5mdW5jdGlvbiBwaWNrQ2hhbmdlZFByb3BzPFQ+KHByZXY6IFQsIG5leHQ6IFQpOiBQYXJ0aWFsPFQ+IHtcbiAgY29uc3QgY2hhbmdlZFByb3BzOiBQYXJ0aWFsPFQ+ID0ge307XG4gIGNvbnN0IHBpY2tQcm9wc09mID0gb2JqID0+IHtcbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VkUHJvcHMsIGtleSkgJiZcbiAgICAgICAgIWlzRXF1YWwocHJldltrZXldLCBuZXh0W2tleV0pXG4gICAgICApIHtcbiAgICAgICAgY2hhbmdlZFByb3BzW2tleV0gPSBuZXh0W2tleV07XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIHBpY2tQcm9wc09mKHByZXYpO1xuICBwaWNrUHJvcHNPZihuZXh0KTtcbiAgcmV0dXJuIGNoYW5nZWRQcm9wcztcbn1cblxuY29uc3QgVklTVUFMX0NIQU5ORUxfUFJPUF9UWVBFUyA9IFsnZmllbGQnLCAnc2NhbGUnLCAnZG9tYWluJywgJ2FnZ3JlZ2F0aW9uJ107XG5cbi8qKlxuICogQXBwbHkgbGF5ZXIgY29uZmlnXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5LCBtYXgtc3RhdGVtZW50c1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5TGF5ZXJDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFwcGx5TGF5ZXJDb25maWdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllcklkLCBuZXdMYXllckNvbmZpZywgbGF5ZXJJbmRleH0gPSBhY3Rpb247XG4gIGNvbnN0IG5ld1BhcnNlZExheWVyID1cbiAgICAvLyB3aWxsIG1vdmUgdmlzdWFsQ2hhbm5lbHMgdG8gdGhlIGNvbmZpZyBwcm9wXG4gICAgcGFyc2VMYXllckNvbmZpZyhzdGF0ZS5zY2hlbWEsIG5ld0xheWVyQ29uZmlnKTtcbiAgY29uc3Qgb2xkTGF5ZXIgPSBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IG9sZExheWVySWQpO1xuICBpZiAoIW9sZExheWVyIHx8ICFuZXdQYXJzZWRMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAobGF5ZXJJbmRleCAhPT0gbnVsbCAmJiBsYXllckluZGV4ICE9PSB1bmRlZmluZWQgJiYgc3RhdGUubGF5ZXJzW2xheWVySW5kZXhdICE9PSBvbGRMYXllcikge1xuICAgIC8vIGxheWVySW5kZXggaXMgcHJvdmlkZWQsIGJ1dCBpdCBkb2Vzbid0IG1hdGNoIHRoZSBvbGRMYXllclxuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbbmV3UGFyc2VkTGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyIGlzIHZhbGlkIGFuZCBjb252ZXJ0IGl0IHRvIExheWVyXG4gIGNvbnN0IG5ld0xheWVyID0gdmFsaWRhdGVMYXllcldpdGhEYXRhKGRhdGFzZXQsIG5ld1BhcnNlZExheWVyLCBzdGF0ZS5sYXllckNsYXNzZXMpO1xuICBpZiAoIW5ld0xheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IG5leHRTdGF0ZSA9IHN0YXRlO1xuXG4gIGlmIChuZXdMYXllci50eXBlICYmIG5ld0xheWVyLnR5cGUgIT09IG9sZExheWVyLnR5cGUpIHtcbiAgICBjb25zdCBvbGRMYXllckluZGV4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVySWQpO1xuICAgIGlmIChvbGRMYXllckluZGV4ID49IDApIHtcbiAgICAgIG5leHRTdGF0ZSA9IGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIobmV4dFN0YXRlLCBsYXllclR5cGVDaGFuZ2Uob2xkTGF5ZXIsIG5ld0xheWVyLnR5cGUpKTtcbiAgICAgIC8vIGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIgY2hhbmdlcyB0aGUgaWQgb2YgdGhlIGxheWVyLCBzbyB3ZSBuZWVkIHRvIG9idGFpbiB0aGUgbmV3IGlkXG4gICAgICAvLyBidXQgZmlyc3QgbWFrZSBzdXJlIHRoYXQgdGhlIGxheWVyIHdhcyBub3QgcmVtb3ZlZFxuICAgICAgaWYgKG5leHRTdGF0ZS5sYXllcnMubGVuZ3RoID09PSBzdGF0ZS5sYXllcnMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IG5ld0xheWVySWQgPSBuZXh0U3RhdGUubGF5ZXJzW29sZExheWVySW5kZXhdLmlkO1xuICAgICAgICBuZXh0U3RhdGUgPSBhcHBseUxheWVyQ29uZmlnVXBkYXRlcihcbiAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgYXBwbHlMYXllckNvbmZpZyhuZXdMYXllcklkLCB7Li4ubmV3TGF5ZXJDb25maWcsIGlkOiBuZXdMYXllcklkfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgfVxuXG4gIC8vIHNlcmlhbGl6ZUxheWVyKCkgbWlnaHQgcmV0dXJuIG51bGwgaWYgdGhlIG9sZCBsYXllciBpcyBub3QgdmFsaWQsXG4gIC8vIHdlIHNob3VsZCBzdGlsbCBhcHBseSB0aGUgY2hhbmdlcyBpbiB0aGF0IGNhc2VcbiAgY29uc3Qgc2VyaWFsaXplZE9sZExheWVyID0gc2VyaWFsaXplTGF5ZXIob2xkTGF5ZXIsIHN0YXRlLnNjaGVtYSkgPz8ge2NvbmZpZzoge319O1xuICBjb25zdCBzZXJpYWxpemVkTmV3TGF5ZXIgPSBzZXJpYWxpemVMYXllcihuZXdMYXllciwgc3RhdGUuc2NoZW1hKTtcbiAgaWYgKCFzZXJpYWxpemVkTmV3TGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKCFpc0VxdWFsKHNlcmlhbGl6ZWRPbGRMYXllciwgc2VyaWFsaXplZE5ld0xheWVyKSkge1xuICAgIGNvbnN0IGNoYW5nZWQgPSBwaWNrQ2hhbmdlZFByb3BzKHNlcmlhbGl6ZWRPbGRMYXllci5jb25maWcsIHNlcmlhbGl6ZWROZXdMYXllci5jb25maWcpO1xuXG4gICAgaWYgKCd2aXNDb25maWcnIGluIGNoYW5nZWQpIHtcbiAgICAgIGlmIChjaGFuZ2VkLnZpc0NvbmZpZykge1xuICAgICAgICBuZXh0U3RhdGUgPSBsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gICAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICAgIGxheWVyVmlzQ29uZmlnQ2hhbmdlKG9sZExheWVyLCBjaGFuZ2VkLnZpc0NvbmZpZylcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGRlbGV0ZSBjaGFuZ2VkLnZpc0NvbmZpZztcbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyhvbGRMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaChjaGFubmVsTmFtZSA9PiB7XG4gICAgICBjb25zdCBjaGFubmVsID0gb2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbE5hbWVdO1xuICAgICAgY29uc3QgY2hhbm5lbFByb3BOYW1lcyA9IFZJU1VBTF9DSEFOTkVMX1BST1BfVFlQRVMubWFwKHByb3AgPT4gY2hhbm5lbFtwcm9wXSk7XG4gICAgICBpZiAoY2hhbm5lbFByb3BOYW1lcy5zb21lKHByb3AgPT4gcHJvcCBpbiBjaGFuZ2VkKSkge1xuICAgICAgICBuZXh0U3RhdGUgPSBsYXllclZpc3VhbENoYW5uZWxDaGFuZ2VVcGRhdGVyKFxuICAgICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgICBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UoXG4gICAgICAgICAgICBvbGRMYXllcixcbiAgICAgICAgICAgIHBpY2sobmV3TGF5ZXIuY29uZmlnLCBjaGFubmVsUHJvcE5hbWVzKSxcbiAgICAgICAgICAgIGNoYW5uZWxOYW1lXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgY2hhbm5lbFByb3BOYW1lcykge1xuICAgICAgICAgIGRlbGV0ZSBjaGFuZ2VkW3Byb3BdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoT2JqZWN0LmtleXMoY2hhbmdlZCkubGVuZ3RoID4gMCkge1xuICAgICAgbmV4dFN0YXRlID0gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKFxuICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgIGxheWVyQ29uZmlnQ2hhbmdlKG9sZExheWVyLCBwaWNrKG5ld0xheWVyLmNvbmZpZywgT2JqZWN0LmtleXMoY2hhbmdlZCkpKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVsYXllclZpc2liaWx0eShzdGF0ZTogVmlzU3RhdGUsIG5ld0xheWVyOiBMYXllciwgaXNWaXNpYmxlPzogYm9vbGVhbik6IFZpc1N0YXRlIHtcbiAgbGV0IG5ld1N0YXRlID0gdXBkYXRlU3RhdGVPbkxheWVyVmlzaWJpbGl0eUNoYW5nZShzdGF0ZSwgbmV3TGF5ZXIpO1xuICBjb25zdCBmaWx0ZXJJbmRleCA9IGZpbHRlclN5bmNlZFdpdGhUaW1lbGluZShzdGF0ZSk7XG4gIGlmIChpc0xheWVyQW5pbWF0YWJsZShuZXdMYXllcikgJiYgZmlsdGVySW5kZXggIT09IC0xKSB7XG4gICAgLy8gaWYgbGF5ZXIgaXMgZ29pbmcgdG8gYmUgdmlzaWJsZSB3ZSBzeW5jIHdpdGggZmlsdGVyIG90aGVyd2lzZSB3ZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgb3RoZXIgYW5pbWF0YWJsZSBsYXllcnMgZXhpc3RzIGFuZCBhcmUgdmlzaWJsZVxuICAgIG5ld1N0YXRlID0gc3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkeDogZmlsdGVySW5kZXgsXG4gICAgICBlbmFibGU6IGlzVmlzaWJsZSA/IGlzVmlzaWJsZSA6IGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKHN0YXRlLmxheWVycykubGVuZ3RoID4gMFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYmFzZSBjb25maWc6IGRhdGFJZCwgbGFiZWwsIGNvbHVtbiwgaXNWaXNpYmxlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBjb25zdCBwcm9wcyA9IE9iamVjdC5rZXlzKGFjdGlvbi5uZXdDb25maWcpO1xuICBpZiAoXG4gICAgdHlwZW9mIGFjdGlvbi5uZXdDb25maWcuZGF0YUlkID09PSAnc3RyaW5nJyAmJlxuICAgIGFjdGlvbi5uZXdDb25maWcuZGF0YUlkICE9PSBvbGRMYXllci5jb25maWcuZGF0YUlkXG4gICkge1xuICAgIGNvbnN0IHtkYXRhSWQsIC4uLnJlc3RDb25maWd9ID0gYWN0aW9uLm5ld0NvbmZpZztcbiAgICBjb25zdCBzdGF0ZVdpdGhEYXRhSWQgPSBsYXllckRhdGFJZENoYW5nZVVwZGF0ZXIoc3RhdGUsIHtcbiAgICAgIG9sZExheWVyLFxuICAgICAgbmV3Q29uZmlnOiB7ZGF0YUlkfVxuICAgIH0pO1xuICAgIGNvbnN0IG5leHRMYXllciA9IHN0YXRlV2l0aERhdGFJZC5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgICByZXR1cm4gbmV4dExheWVyICYmIE9iamVjdC5rZXlzKHJlc3RDb25maWcpLmxlbmd0aFxuICAgICAgPyBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoc3RhdGVXaXRoRGF0YUlkLCB7b2xkTGF5ZXI6IG5leHRMYXllciwgbmV3Q29uZmlnOiByZXN0Q29uZmlnfSlcbiAgICAgIDogc3RhdGVXaXRoRGF0YUlkO1xuICB9XG5cbiAgbGV0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoYWN0aW9uLm5ld0NvbmZpZyk7XG5cbiAgbGV0IGxheWVyRGF0YTtcblxuICBpZiAobmV3TGF5ZXIuc2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhKHByb3BzKSkge1xuICAgIGNvbnN0IG9sZExheWVyRGF0YSA9IHN0YXRlLmxheWVyRGF0YVtpZHhdO1xuXG4gICAgY29uc3QgdXBkYXRlTGF5ZXJEYXRhUmVzdWx0ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgb2xkTGF5ZXJEYXRhKTtcbiAgICBuZXdMYXllciA9IHVwZGF0ZUxheWVyRGF0YVJlc3VsdC5sYXllcjtcbiAgICBsYXllckRhdGEgPSB1cGRhdGVMYXllckRhdGFSZXN1bHQubGF5ZXJEYXRhO1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGlmICgnaXNWaXNpYmxlJyBpbiBhY3Rpb24ubmV3Q29uZmlnKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVsYXllclZpc2liaWx0eShuZXdTdGF0ZSwgbmV3TGF5ZXIsIGFjdGlvbi5uZXdDb25maWcuaXNWaXNpYmxlKTtcbiAgfVxuXG4gIGlmICgnY29sdW1ucycgaW4gYWN0aW9uLm5ld0NvbmZpZyAmJiBuZXdMYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICAvLyBUT0RPOiBTaGFuLCBtYWtlIHRoZSBhbmltYXRpb24gY29uZmlnIGZ1bmN0aW9uIG1vcmUgcm9idXN0XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXdTdGF0ZSwge1xuICAgIGxheWVyOiBuZXdMYXllcixcbiAgICBsYXllckRhdGEsXG4gICAgaWR4XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIGFjdGlvbik6IFMge1xuICBjb25zdCB7b2xkTGF5ZXIsIHByb3AsIHZhbHVlfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcblxuICBjb25zdCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICBhbmltYXRpb246IHtcbiAgICAgIC4uLm9sZExheWVyLmNvbmZpZy5hbmltYXRpb24sXG4gICAgICBbcHJvcF06IHZhbHVlXG4gICAgfVxuICB9KTtcblxuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCBzdGF0ZS5sYXllckRhdGFbaWR4XSk7XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllcklkLCBpc1Zpc2libGUsIHNwbGl0TWFwSWRcbiAqIGhhbmRsZXMgdHdvIGNhc2VzOlxuICogMSkgdG9nZ2xlIHRoZSB2aXNpYmlsaXR5IG9mIGxvY2FsIFNwbGl0TWFwIGxheWVyICh2aXNTdGF0ZS5zcGxpdE1hcC5sYXllcnMpXG4gKiAyKSB0b2dnbGUgdGhlIHZpc2liaWxpdHkgb2YgZ2xvYmFsIGxheWVyICh2aXNTdGF0ZS5sYXllcnMpXG5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUb2dnbGVWaXNpYmlsaXR5VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7bGF5ZXJJZCwgaXNWaXNpYmxlLCBzcGxpdE1hcElkfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXIgPSBzdGF0ZS5sYXllcnMuZmluZChkID0+IGQuaWQgPT09IGxheWVySWQpO1xuXG4gIGlmICghbGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcblxuICBpZiAoc3BsaXRNYXBJZCkge1xuICAgIC8vIFtjYXNlIDFdOiB0b2dnbGUgbG9jYWwgbGF5ZXIgdmlzaWJpbGl0eSBmb3IgZWFjaCBTcGxpdE1hcFxuICAgIGNvbnN0IG1hcEluZGV4ID0gbmV3U3RhdGUuc3BsaXRNYXBzLmZpbmRJbmRleChzbSA9PiBzbS5pZCA9PT0gc3BsaXRNYXBJZCk7XG4gICAgaWYgKGlzVmlzaWJsZSkge1xuICAgICAgLy8gMSkgaWYgdGhlIGxheWVyIGlzIGludmlzaWJsZSBnbG9iYWxseVxuICAgICAgLy8gLT4gc2V0IGdsb2JhbCB2aXNpYmlsaXR5IHRvIHRydWVcbiAgICAgIG5ld1N0YXRlID0gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKG5ld1N0YXRlLCBsYXllckNvbmZpZ0NoYW5nZShsYXllciwge2lzVmlzaWJsZTogdHJ1ZX0pKTtcblxuICAgICAgLy8gLT4gc2V0IGxvY2FsIHZpc2liaWxpdHkgdG8gdHJ1ZSBhbmQgdGhlIGxvY2FsIHZpc2liaWxpdGllcyBvZiBhbGwgb3RoZXIgU3BsaXRNYXBzIHRvIGZhbHNlXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgc3BsaXRNYXBzOiBuZXdTdGF0ZS5zcGxpdE1hcHMubWFwKHNtID0+XG4gICAgICAgICAgc20uaWQgIT09IHNwbGl0TWFwSWRcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIC4uLnNtLFxuICAgICAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAgICAgLi4uc20ubGF5ZXJzLFxuICAgICAgICAgICAgICAgICAgW2xheWVySWRdOiBmYWxzZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgLi4uc20sXG4gICAgICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgICAgICAuLi5zbS5sYXllcnMsXG4gICAgICAgICAgICAgICAgICBbbGF5ZXJJZF06IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfTtcbiAgICB9XG4gICAgLy8gMikgZWxzZSB3aGVuIHRoZSBsYXllciBpcyB2aXNpYmxlIGdsb2JhbGx5XG4gICAgcmV0dXJuIHRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlcihuZXdTdGF0ZSwgdG9nZ2xlTGF5ZXJGb3JNYXAobWFwSW5kZXgsIGxheWVySWQpKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBbY2FzZSAyXTogdG9nZ2xlIGdsb2JhbCBsYXllciB2aXNpYmlsaXR5XG4gICAgY29uc3QgbmV3TGF5ZXIgPSBsYXllci51cGRhdGVMYXllckNvbmZpZyh7aXNWaXNpYmxlfSk7XG4gICAgY29uc3QgaWR4ID0gbmV3U3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGxheWVySWQpO1xuXG4gICAgbmV3U3RhdGUgPSB1cGRhdGVsYXllclZpc2liaWx0eShuZXdTdGF0ZSwgbmV3TGF5ZXIsIGlzVmlzaWJsZSk7XG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXdTdGF0ZSwge1xuICAgICAgbGF5ZXI6IG5ld0xheWVyLFxuICAgICAgaWR4XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHN0YXRlXG4gKiBAcmV0dXJucyBpbmRleCBvZiB0aGUgZmlsdGVyIHN5bmNlZCB0byB0aW1lbGluZSBvciAtMVxuICovXG5mdW5jdGlvbiBmaWx0ZXJTeW5jZWRXaXRoVGltZWxpbmUoc3RhdGU6IFZpc1N0YXRlKTogbnVtYmVyIHtcbiAgcmV0dXJuIHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gKGYgYXMgVGltZVJhbmdlRmlsdGVyKS5zeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSk7XG59XG5cbi8qKlxuICogVXBkYXRlcyBpc1ZhbGlkIGZsYWcgb2YgYSBsYXllci5cbiAqIFVwZGF0ZXMgaXNWaXNpYmxlIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiBpc1ZhbGlkLlxuICogVHJpZ2dlcnMgdXBkYXRlIG9mIGRhdGEgZm9yIHRoZSBsYXllciBpbiBvcmRlciB0byBnZXQgZXJyb3JzIGFnYWluIGR1cmluZyBuZXh0IHVwZGF0ZSBpdGVyYXRpb24uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclNldElzVmFsaWRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyU2V0SXNWYWxpZFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBpc1ZhbGlkfSA9IGFjdGlvbjtcblxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBjb25zdCBsYXllclRvVXBkYXRlID0gc3RhdGUubGF5ZXJzW2lkeF07XG4gIGlmIChsYXllclRvVXBkYXRlKSB7XG4gICAgbGV0IG5ld0xheWVyO1xuICAgIGxldCBuZXdEYXRhID0gbnVsbDtcblxuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAvLyBUcmlnZ2VyIGRhdGEgdXBkYXRlIGluIG9yZGVyIHRvIHNob3cgZXJyb3JzIGFnYWluIGlmIHByZXNlbnQuXG4gICAgICBjb25zdCB7bGF5ZXIsIGxheWVyRGF0YX0gPSBjYWxjdWxhdGVMYXllckRhdGEobGF5ZXJUb1VwZGF0ZSwgc3RhdGUsIHVuZGVmaW5lZCk7XG4gICAgICBuZXdMYXllciA9IGxheWVyO1xuICAgICAgbmV3RGF0YSA9IGxheWVyRGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXIgPSBsYXllclRvVXBkYXRlLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgaXNWaXNpYmxlOiBmYWxzZVxuICAgICAgfSk7XG4gICAgICBuZXdMYXllci5pc1ZhbGlkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2lkeCwgbGF5ZXI6IG5ld0xheWVyLCBsYXllckRhdGE6IG5ld0RhdGF9KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gYWRkT3JSZW1vdmVUZXh0TGFiZWxzKG5ld0ZpZWxkcywgdGV4dExhYmVsLCBkZWZhdWx0VGV4dExhYmVsID0gREVGQVVMVF9URVhUX0xBQkVMKSB7XG4gIGxldCBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc2xpY2UoKTtcblxuICBjb25zdCBjdXJyZW50RmllbGRzID0gdGV4dExhYmVsLm1hcCh0bCA9PiB0bC5maWVsZCAmJiB0bC5maWVsZC5uYW1lKS5maWx0ZXIoZCA9PiBkKTtcblxuICBjb25zdCBhZGRGaWVsZHMgPSBuZXdGaWVsZHMuZmlsdGVyKGYgPT4gIWN1cnJlbnRGaWVsZHMuaW5jbHVkZXMoZi5uYW1lKSk7XG4gIGNvbnN0IGRlbGV0ZUZpZWxkcyA9IGN1cnJlbnRGaWVsZHMuZmlsdGVyKGYgPT4gIW5ld0ZpZWxkcy5maW5kKGZkID0+IGZkLm5hbWUgPT09IGYpKTtcblxuICAvLyBkZWxldGVcbiAgbmV3VGV4dExhYmVsID0gbmV3VGV4dExhYmVsLmZpbHRlcih0bCA9PiB0bC5maWVsZCAmJiAhZGVsZXRlRmllbGRzLmluY2x1ZGVzKHRsLmZpZWxkLm5hbWUpKTtcbiAgbmV3VGV4dExhYmVsID0gIW5ld1RleHRMYWJlbC5sZW5ndGggPyBbZGVmYXVsdFRleHRMYWJlbF0gOiBuZXdUZXh0TGFiZWw7XG5cbiAgLy8gYWRkXG4gIG5ld1RleHRMYWJlbCA9IFtcbiAgICAuLi5uZXdUZXh0TGFiZWwuZmlsdGVyKHRsID0+IHRsLmZpZWxkKSxcbiAgICAuLi5hZGRGaWVsZHMubWFwKGFmID0+ICh7XG4gICAgICAuLi5kZWZhdWx0VGV4dExhYmVsLFxuICAgICAgZmllbGQ6IGFmXG4gICAgfSkpXG4gIF07XG5cbiAgcmV0dXJuIG5ld1RleHRMYWJlbDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlVGV4dExhYmVsUHJvcEFuZFZhbHVlKGlkeCwgcHJvcCwgdmFsdWUsIHRleHRMYWJlbCkge1xuICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0ZXh0TGFiZWxbaWR4XSwgcHJvcCkpIHtcbiAgICByZXR1cm4gdGV4dExhYmVsO1xuICB9XG5cbiAgbGV0IG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5zbGljZSgpO1xuXG4gIGlmIChwcm9wID09PSAnZmllbGQnICYmIHZhbHVlID09PSBudWxsICYmIHRleHRMYWJlbC5sZW5ndGggPiAxKSB7XG4gICAgLy8gcmVtb3ZlIGxhYmVsIHdoZW4gZmllbGQgdmFsdWUgaXMgc2V0IHRvIG51bGxcbiAgICBuZXdUZXh0TGFiZWwuc3BsaWNlKGlkeCwgMSk7XG4gIH0gZWxzZSBpZiAocHJvcCkge1xuICAgIG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5tYXAoKHRsLCBpKSA9PiAoaSA9PT0gaWR4ID8gey4uLnRsLCBbcHJvcF06IHZhbHVlfSA6IHRsKSk7XG4gIH1cblxuICByZXR1cm4gbmV3VGV4dExhYmVsO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBiYXNlIGNvbmZpZzogZGF0YUlkLCBsYWJlbCwgY29sdW1uLCBpc1Zpc2libGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBpZHgsIHByb3AsIHZhbHVlfSA9IGFjdGlvbjtcbiAgY29uc3Qge3RleHRMYWJlbH0gPSBvbGRMYXllci5jb25maWc7XG5cbiAgLy8gd2hlbiBhZGRpbmcgYSBuZXcgZW1wdHkgdGV4dCBsYWJlbCxcbiAgLy8gcmVseSBvbiB0aGUgbGF5ZXIncyBkZWZhdWx0IGNvbmZpZywgb3IgdXNlIHRoZSBjb25zdGFudCBERUZBVUxUX1RFWFRfTEFCRUxcbiAgY29uc3QgZGVmYXVsdFRleHRMYWJlbCA9XG4gICAgb2xkTGF5ZXIuZ2V0RGVmYXVsdExheWVyQ29uZmlnKHtkYXRhSWQ6ICcnfSk/LnRleHRMYWJlbD8uWzBdID8/IERFRkFVTFRfVEVYVF9MQUJFTDtcblxuICBsZXQgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLnNsaWNlKCk7XG4gIGlmICghdGV4dExhYmVsW2lkeF0gJiYgaWR4ID09PSB0ZXh0TGFiZWwubGVuZ3RoKSB7XG4gICAgLy8gaWYgaWR4IGlzIHNldCB0byBsZW5ndGgsIGFkZCBlbXB0eSB0ZXh0IGxhYmVsXG4gICAgbmV3VGV4dExhYmVsID0gWy4uLnRleHRMYWJlbCwgZGVmYXVsdFRleHRMYWJlbF07XG4gIH1cblxuICBpZiAoaWR4ID09PSAnYWxsJyAmJiBwcm9wID09PSAnZmllbGRzJykge1xuICAgIG5ld1RleHRMYWJlbCA9IGFkZE9yUmVtb3ZlVGV4dExhYmVscyh2YWx1ZSwgdGV4dExhYmVsLCBkZWZhdWx0VGV4dExhYmVsKTtcbiAgfSBlbHNlIHtcbiAgICBuZXdUZXh0TGFiZWwgPSB1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUoaWR4LCBwcm9wLCB2YWx1ZSwgbmV3VGV4dExhYmVsKTtcbiAgfVxuICAvLyB1cGRhdGUgdGV4dCBsYWJlbCBwcm9wIGFuZCB2YWx1ZVxuICByZXR1cm4gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKHN0YXRlLCB7XG4gICAgb2xkTGF5ZXIsXG4gICAgbmV3Q29uZmlnOiB7dGV4dExhYmVsOiBuZXdUZXh0TGFiZWx9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBsYXllckNsYXNzZXMsIGxheWVyLCBzY2hlbWEpIHtcbiAgY29uc3QgbG9hZGVkTGF5ZXIgPSBzZXJpYWxpemVMYXllcihsYXllciwgc2NoZW1hKTtcbiAgcmV0dXJuIGxvYWRlZExheWVyXG4gICAgPyB2YWxpZGF0ZUxheWVyV2l0aERhdGEoZGF0YXNldCwgbG9hZGVkTGF5ZXIsIGxheWVyQ2xhc3Nlcywge1xuICAgICAgICBhbGxvd0VtcHR5Q29sdW1uOiB0cnVlXG4gICAgICB9KVxuICAgIDogbnVsbDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgY29uZmlnIGRhdGFJZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJEYXRhSWRDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjoge1xuICAgIG9sZExheWVyOiBMYXllcjtcbiAgICBuZXdDb25maWc6IHtcbiAgICAgIGRhdGFJZDogc3RyaW5nO1xuICAgIH07XG4gIH1cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBuZXdDb25maWd9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YUlkfSA9IG5ld0NvbmZpZztcblxuICBpZiAoIW9sZExheWVyIHx8ICFzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG5cbiAgbGV0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2RhdGFJZH0pO1xuXG4gIC8vIHRoaXMgbWF5IGhhcHBlbiB3aGVuIGEgbGF5ZXIgaXMgbmV3ICh0eXBlOiBudWxsIGFuZCBubyBjb2x1bW5zKSBidXQgaXQncyBub3QgcmVhZHkgdG8gYmUgc2F2ZWRcbiAgaWYgKG5ld0xheWVyLmlzVmFsaWRUb1NhdmUoKSkge1xuICAgIGNvbnN0IHZhbGlkYXRlZCA9IHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKFxuICAgICAgc3RhdGUuZGF0YXNldHNbZGF0YUlkXSxcbiAgICAgIHN0YXRlLmxheWVyQ2xhc3NlcyxcbiAgICAgIG5ld0xheWVyLFxuICAgICAgc3RhdGUuc2NoZW1hXG4gICAgKTtcbiAgICAvLyBpZiBjYW50IHZhbGlkYXRlIGl0IHdpdGggZGF0YSBjcmVhdGUgYSBuZXcgb25lXG4gICAgaWYgKCF2YWxpZGF0ZWQpIHtcbiAgICAgIGNvbnN0IG9sZExheWVyVHlwZSA9IG9sZExheWVyLnR5cGU7XG4gICAgICBpZiAob2xkTGF5ZXJUeXBlKSB7XG4gICAgICAgIG5ld0xheWVyID0gbmV3IHN0YXRlLmxheWVyQ2xhc3Nlc1tvbGRMYXllclR5cGVdKHtkYXRhSWQsIGlkOiBvbGRMYXllci5pZH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllciA9IHZhbGlkYXRlZDtcbiAgICB9XG4gIH1cblxuICBuZXdMYXllciA9IG5ld0xheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICBpc1Zpc2libGU6IG9sZExheWVyLmNvbmZpZy5pc1Zpc2libGUsXG4gICAgaXNDb25maWdBY3RpdmU6IHRydWVcbiAgfSk7XG5cbiAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJEb21haW4oc3RhdGUuZGF0YXNldHMpO1xuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCB1bmRlZmluZWQpO1xuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEoc3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEluaXRpYWxMYXllckNvbmZpZyhsYXllciwgZGF0YXNldHMsIGxheWVyQ2xhc3Nlcyk6IExheWVyIHtcbiAgbGV0IG5ld0xheWVyID0gbGF5ZXI7XG4gIGlmICghT2JqZWN0LmtleXMoZGF0YXNldHMpLmxlbmd0aCkge1xuICAgIC8vIG5vIGRhdGEgaXMgbG9hZGVkXG4gICAgcmV0dXJuIGxheWVyO1xuICB9XG4gIGlmICghbGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgIC8vIHNldCBsYXllciBkYXRhSWRcbiAgICBuZXdMYXllciA9IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtkYXRhSWQ6IE9iamVjdC5rZXlzKGRhdGFzZXRzKVswXX0pO1xuICB9XG4gIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tuZXdMYXllci5jb25maWcuZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIGxheWVyO1xuICB9XG5cbiAgLy8gZmluZCBkZWZhdXQgbGF5ZXIgcHJvcHNcbiAgY29uc3QgcmVzdWx0ID1cbiAgICB0eXBlb2YgbGF5ZXJDbGFzc2VzW25ld0xheWVyLnR5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBsYXllckNsYXNzZXNbbmV3TGF5ZXIudHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzKGRhdGFzZXQsIFtdKVxuICAgICAgOiB7cHJvcHM6IFtdfTtcblxuICAvLyBhbiBhcnJheSBvZiBwb3NzaWJsZSBwcm9wcywgdXNlIDFzdCBvbmVcbiAgY29uc3QgcHJvcHMgPSBBcnJheS5pc0FycmF5KHJlc3VsdCkgPyByZXN1bHQgOiByZXN1bHQucHJvcHMgfHwgW107XG5cbiAgaWYgKHByb3BzLmxlbmd0aCkge1xuICAgIG5ld0xheWVyID0gbmV3IGxheWVyQ2xhc3Nlc1tsYXllci50eXBlXSh7XG4gICAgICAuLi5wcm9wc1swXSxcbiAgICAgIGxhYmVsOiBuZXdMYXllci5jb25maWcubGFiZWwsXG4gICAgICBkYXRhSWQ6IG5ld0xheWVyLmNvbmZpZy5kYXRhSWQsXG4gICAgICBpc0NvbmZpZ0FjdGl2ZTogbmV3TGF5ZXIuY29uZmlnLmlzQ29uZmlnQWN0aXZlLFxuICAgICAgaXNWaXNpYmxlOiBuZXdMYXllci5jb25maWcuaXNWaXNpYmxlXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHR5cGVvZiBuZXdMYXllci5zZXRJbml0aWFsTGF5ZXJDb25maWcgPT09ICdmdW5jdGlvbidcbiAgICA/IG5ld0xheWVyLnNldEluaXRpYWxMYXllckNvbmZpZyhkYXRhc2V0KVxuICAgIDogbmV3TGF5ZXI7XG59XG4vKipcbiAqIFVwZGF0ZSBsYXllciB0eXBlLiBQcmV2aWV3cyBsYXllciBjb25maWcgd2lsbCBiZSBjb3BpZWQgaWYgYXBwbGljYWJsZS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclR5cGVDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVHlwZUNoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBuZXdUeXBlfSA9IGFjdGlvbjtcbiAgaWYgKCFvbGRMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBvbGRJZCA9IG9sZExheWVyLmlkO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkSWQpO1xuXG4gIGlmICghc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdKSB7XG4gICAgQ29uc29sZS5lcnJvcihgJHtuZXdUeXBlfSBpcyBub3QgYSB2YWxpZCBsYXllciB0eXBlYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBuZXdMYXllciA9IG5ldyBzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0oe1xuICAgIC8vIGtlZXAgb2xkIGxheWVyIGxhYmxlIGFuZCBpc0NvbmZpZ0FjdGl2ZVxuICAgIGxhYmVsOiBvbGRMYXllci5jb25maWcubGFiZWwsXG4gICAgaXNDb25maWdBY3RpdmU6IG9sZExheWVyLmNvbmZpZy5pc0NvbmZpZ0FjdGl2ZSxcbiAgICBkYXRhSWQ6IG9sZExheWVyLmNvbmZpZy5kYXRhSWRcbiAgfSk7XG5cbiAgaWYgKCFvbGRMYXllci50eXBlKSB7XG4gICAgLy8gaWYgc2V0dGluZyBsYXllciB0eXBlIG9uIGFuIGVtcHR5IGxheWVyXG4gICAgbmV3TGF5ZXIgPSBzZXRJbml0aWFsTGF5ZXJDb25maWcobmV3TGF5ZXIsIHN0YXRlLmRhdGFzZXRzLCBzdGF0ZS5sYXllckNsYXNzZXMpO1xuICB9IGVsc2Uge1xuICAgIC8vIGdldCBhIG1pbnQgbGF5ZXIsIHdpdGggbmV3IGlkIGFuZCB0eXBlXG4gICAgLy8gYmVjYXVzZSBkZWNrLmdsIHVzZXMgaWQgdG8gbWF0Y2ggYmV0d2VlbiBuZXcgYW5kIG9sZCBsYXllci5cbiAgICAvLyBJZiB0eXBlIGhhcyBjaGFuZ2VkIGJ1dCBpZCBpcyB0aGUgc2FtZSwgaXQgd2lsbCBicmVha1xuXG4gICAgY29uc3QgZGVmYXVsdExheWVyUHJvcHMgPVxuICAgICAgdHlwZW9mIHN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzKHN0YXRlLmRhdGFzZXRzW25ld0xheWVyLmNvbmZpZy5kYXRhSWRdKVxuICAgICAgICA6IG51bGw7XG5cbiAgICBuZXdMYXllci5hc3NpZ25Db25maWdUb0xheWVyKFxuICAgICAgb2xkTGF5ZXIuY29uZmlnLFxuICAgICAgb2xkTGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MsXG4gICAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICAgIGRlZmF1bHRMYXllclByb3BzXG4gICAgKTtcbiAgICBuZXdMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cyk7XG4gIH1cblxuICBjb25zdCB7Y2xpY2tlZCwgaG92ZXJJbmZvfSA9IHN0YXRlO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjbGlja2VkOiBvbGRMYXllci5pc0xheWVySG92ZXJlZChjbGlja2VkKSA/IHVuZGVmaW5lZCA6IGNsaWNrZWQsXG4gICAgaG92ZXJJbmZvOiBvbGRMYXllci5pc0xheWVySG92ZXJlZChob3ZlckluZm8pID8gdW5kZWZpbmVkIDogaG92ZXJJbmZvXG4gIH07XG5cbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBuZXdTdGF0ZSk7XG4gIG5ld1N0YXRlID0gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5ld1N0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG5cbiAgaWYgKGxheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCB8fCBvbGRMYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICAvLyB1cGRhdGUgc3BsaXRNYXAgbGF5ZXIgaWRcbiAgaWYgKHN0YXRlLnNwbGl0TWFwcy5sZW5ndGgpIHtcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgc3BsaXRNYXBzOiBuZXdTdGF0ZS5zcGxpdE1hcHMubWFwKHNldHRpbmdzID0+IHtcbiAgICAgICAgY29uc3Qge1tvbGRJZF06IG9sZExheWVyTWFwLCAuLi5vdGhlckxheWVyc30gPSBzZXR0aW5ncy5sYXllcnM7XG4gICAgICAgIHJldHVybiBvbGRJZCBpbiBzZXR0aW5ncy5sYXllcnNcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgLi4uc2V0dGluZ3MsXG4gICAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAgIC4uLm90aGVyTGF5ZXJzLFxuICAgICAgICAgICAgICAgIFtsYXllci5pZF06IG9sZExheWVyTWFwXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHNldHRpbmdzO1xuICAgICAgfSlcbiAgICB9O1xuICB9XG5cbiAgLy8gdXBkYXRlIGxheWVyT3JkZXIgd2l0aCBuZXcgaWRcbiAgbmV3U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogbmV3U3RhdGUubGF5ZXJPcmRlci5tYXAobGF5ZXJJZCA9PlxuICAgICAgbGF5ZXJJZCA9PT0gb2xkTGF5ZXIuaWQgPyBuZXdMYXllci5pZCA6IGxheWVySWRcbiAgICApXG4gIH07XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciB2aXN1YWwgY2hhbm5lbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3Q29uZmlnLCBuZXdWaXNDb25maWcsIGNoYW5uZWx9ID0gYWN0aW9uO1xuICBpZiAoIW9sZExheWVyLmNvbmZpZy5kYXRhSWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbb2xkTGF5ZXIuY29uZmlnLmRhdGFJZF07XG5cbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgbGV0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcobmV3Q29uZmlnKTtcbiAgaWYgKG5ld1Zpc0NvbmZpZykgbmV3TGF5ZXIgPSBuZXdMYXllci51cGRhdGVMYXllclZpc0NvbmZpZyhuZXdWaXNDb25maWcpO1xuXG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbChkYXRhc2V0LCBjaGFubmVsKTtcblxuICAvLyBjYWxsaW5nIHVwZGF0ZSBhbmltYXRpb24gZG9tYWluIGZpcnN0IHRvIG1lcmdlIGFsbCBsYXllciBhbmltYXRpb24gZG9tYWluXG4gIGxldCB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4oc3RhdGUpO1xuXG4gIGNvbnN0IHZpc3VhbENoYW5uZWwgPSBvbGRMYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcbiAgaWYgKHZpc3VhbENoYW5uZWw/LmNoYW5uZWxTY2FsZVR5cGUgPT09IENIQU5ORUxfU0NBTEVTLmNvbG9yICYmIG5ld0NvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXSkge1xuICAgIC8vIGlmIGNvbG9yIGZpZWxkIGNoYW5nZWQsIHNldCBjdXN0b21CcmVha3MgdG8gZmFsc2VcbiAgICBuZXdMYXllci51cGRhdGVMYXllckNvbG9yVUkodmlzdWFsQ2hhbm5lbC5yYW5nZSwge1xuICAgICAgY29sb3JSYW5nZUNvbmZpZzoge1xuICAgICAgICAuLi5uZXdMYXllci5jb25maWcuY29sb3JVSVt2aXN1YWxDaGFubmVsLnJhbmdlXS5jb2xvclJhbmdlQ29uZmlnLFxuICAgICAgICBjdXN0b21CcmVha3M6IGZhbHNlXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB1cGRhdGVkU3RhdGUgPSB7XG4gICAgICAuLi51cGRhdGVkU3RhdGUsXG4gICAgICBsYXllcnM6IHVwZGF0ZWRTdGF0ZS5sYXllcnMubWFwKGwgPT4gKGwuaWQgPT09IG9sZExheWVyLmlkID8gbmV3TGF5ZXIgOiBsKSlcbiAgICB9O1xuICB9XG5cbiAgY29uc3Qgb2xkTGF5ZXJEYXRhID0gdXBkYXRlZFN0YXRlLmxheWVyRGF0YVtpZHhdO1xuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHVwZGF0ZWRTdGF0ZSwgb2xkTGF5ZXJEYXRhKTtcblxuICBpZiAoXG4gICAgdmlzdWFsQ2hhbm5lbD8uY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuY29sb3IgJiZcbiAgICBuZXdDb25maWdbdmlzdWFsQ2hhbm5lbD8uc2NhbGVdID09PSBTQ0FMRV9UWVBFUy5jdXN0b21PcmRpbmFsICYmXG4gICAgIW5ld1Zpc0NvbmZpZ1xuICApIHtcbiAgICAvLyB3aGVuIHN3aXRjaGluZyB0byBjdXN0b21PcmRpbmFsIHNjYWxlLCBjcmVhdGUgYSBjdXN0b21QYWxldHRlIGluIGNvbG9yVUkgd2l0aCB1cGRhdGVkIGNvbG9yRG9tYWluXG4gICAgY29uc3QgY3VzdG9tUGFsZXR0ZSA9IGluaXRDdXN0b21QYWxldHRlQnlDdXN0b21TY2FsZSh7XG4gICAgICBzY2FsZTogU0NBTEVfVFlQRVMuY3VzdG9tT3JkaW5hbCxcbiAgICAgIGZpZWxkOiBsYXllci5jb25maWdbdmlzdWFsQ2hhbm5lbC5maWVsZF0sXG4gICAgICBvcmRpbmFsRG9tYWluOiBsYXllci5jb25maWdbbGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF0uZG9tYWluXSxcbiAgICAgIHJhbmdlOiBsYXllci5jb25maWcudmlzQ29uZmlnW3Zpc3VhbENoYW5uZWwucmFuZ2VdLFxuICAgICAgY29sb3JCcmVha3M6IG51bGxcbiAgICB9KTtcbiAgICAvLyB1cGRhdGUgY29sb3JSYW5nZSB3aXRoIG5ldyBjdXN0b21QYWxldHRlXG4gICAgbGF5ZXIudXBkYXRlTGF5ZXJDb2xvclVJKHZpc3VhbENoYW5uZWwucmFuZ2UsIHtcbiAgICAgIHNob3dDb2xvckNoYXJ0OiB0cnVlLFxuICAgICAgY29sb3JSYW5nZUNvbmZpZzoge1xuICAgICAgICAuLi5sYXllci5jb25maWcuY29sb3JVSVt2aXN1YWxDaGFubmVsLnJhbmdlXS5jb2xvclJhbmdlQ29uZmlnLFxuICAgICAgICBjdXN0b21CcmVha3M6IHRydWVcbiAgICAgIH0sXG4gICAgICBjdXN0b21QYWxldHRlXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YSh1cGRhdGVkU3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYHZpc0NvbmZpZ2BcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllcn0gPSBhY3Rpb247XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGNvbnN0IHByb3BzID0gT2JqZWN0LmtleXMoYWN0aW9uLm5ld1Zpc0NvbmZpZyk7XG5cbiAgY29uc3QgbmV3VmlzQ29uZmlnID0ge1xuICAgIC4uLm9sZExheWVyLmNvbmZpZy52aXNDb25maWcsXG4gICAgLi4uYWN0aW9uLm5ld1Zpc0NvbmZpZ1xuICB9O1xuXG4gIGNvbnN0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe3Zpc0NvbmZpZzogbmV3VmlzQ29uZmlnfSk7XG5cbiAgaWYgKG5ld0xheWVyLnNob3VsZENhbGN1bGF0ZUxheWVyRGF0YShwcm9wcykpIHtcbiAgICBjb25zdCBvbGRMYXllckRhdGEgPSBzdGF0ZS5sYXllckRhdGFbaWR4XTtcbiAgICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCBvbGRMYXllckRhdGEpO1xuICAgIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEoc3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEoc3RhdGUsIHtsYXllcjogbmV3TGF5ZXIsIGlkeH0pO1xufVxuXG4vKipcbiAqIFJlc2V0IGFuaW1hdGlvbiBjb25maWcgY3VycmVudCB0aW1lIHRvIGEgc3BlY2lmaWVkIHZhbHVlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICpcbiAqL1xuZXhwb3J0IGNvbnN0IHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIgPSA8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHt2YWx1ZX06IFZpc1N0YXRlQWN0aW9ucy5TZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyQWN0aW9uXG4pOiBTID0+IHtcbiAgY29uc3QgY3VycmVudFRpbWUgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlWzBdIDogdmFsdWU7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIGN1cnJlbnRUaW1lXG4gICAgfVxuICB9O1xuICAvLyB1cGRhdGUgYW5pbWF0aW9uIGNvbmZpZyBmb3IgZWFjaCBsYXllclxuICByZXR1cm4gc3RhdGUubGF5ZXJzLnJlZHVjZSgoYWNjdSwgbCkgPT4ge1xuICAgIGlmIChsLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCAmJiBsLnR5cGUgIT09ICd0cmlwJykge1xuICAgICAgcmV0dXJuIGxheWVyQW5pbWF0aW9uQ2hhbmdlVXBkYXRlcihhY2N1LCB7b2xkTGF5ZXI6IGwsIHByb3A6ICdjdXJyZW50VGltZScsIGN1cnJlbnRUaW1lfSk7XG4gICAgfVxuICAgIHJldHVybiBhY2N1O1xuICB9LCBuZXh0U3RhdGUpO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIHByb3BlcnR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyQW5pbWF0aW9uVGltZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uVGltZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoc3RhdGUsIGFjdGlvbik7XG59XG5cbi8qKlxuICogVXBkYXRlIGZpbHRlciBhbmltYXRpb24gd2luZG93XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAge2lkLCBhbmltYXRpb25XaW5kb3d9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlckFjdGlvblxuKTogUyB7XG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+IGYuaWQgPT09IGlkKTtcblxuICBpZiAoIWZpbHRlcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgYW5pbWF0aW9uV2luZG93XG4gIH07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKHN0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgY29uc3QgbmV3U3luY1RpbWVsaW5lTW9kZSA9IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIpO1xuXG4gIHJldHVybiBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcihuZXdTdGF0ZSwge2lkLCBtb2RlOiBuZXdTeW5jVGltZWxpbmVNb2RlfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtmaWx0ZXJJZCwgbmV3RmlsdGVyfSA9IGFjdGlvbjtcbiAgY29uc3Qgb2xkRmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi5pZCA9PT0gZmlsdGVySWQpO1xuICBpZiAoIW9sZEZpbHRlcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIFNlcmlhbGl6ZSB0aGUgZmlsdGVycyB0byBvbmx5IGNvbXBhcmUgdGhlIHNhdmVkIHByb3BlcnRpZXNcbiAgY29uc3Qgc2VyaWFsaXplZE9sZEZpbHRlciA9IHNlcmlhbGl6ZUZpbHRlcihvbGRGaWx0ZXIsIHN0YXRlLnNjaGVtYSkgPz8ge2NvbmZpZzoge319O1xuICBjb25zdCBzZXJpYWxpemVkTmV3RmlsdGVyID0gc2VyaWFsaXplRmlsdGVyKG5ld0ZpbHRlciwgc3RhdGUuc2NoZW1hKTtcbiAgaWYgKCFzZXJpYWxpemVkTmV3RmlsdGVyIHx8IGlzRXF1YWwoc2VyaWFsaXplZE9sZEZpbHRlciwgc2VyaWFsaXplZE5ld0ZpbHRlcikpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBJZiB0aGVyZSBhcmUgYW55IGNoYW5nZXMgdG8gdGhlIGZpbHRlciwgYXBwbHkgdGhlbVxuICBjb25zdCBjaGFuZ2VkID0gcGlja0NoYW5nZWRQcm9wcyhzZXJpYWxpemVkT2xkRmlsdGVyLCBzZXJpYWxpemVkTmV3RmlsdGVyKTtcbiAgZGVsZXRlIGNoYW5nZWRbJ2lkJ107IC8vIGlkIHNob3VsZCBub3QgYmUgY2hhbmdlZFxuXG4gIGNvbnN0IGZpbHRlckluZGV4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmIChmaWx0ZXJJbmRleCA8IDApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoXG4gICAgc3RhdGUsXG4gICAgc2V0RmlsdGVyKGZpbHRlckluZGV4LCBPYmplY3Qua2V5cyhjaGFuZ2VkKSwgT2JqZWN0LnZhbHVlcyhjaGFuZ2VkKSlcbiAgKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIHByb3BlcnR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyVXBkYXRlckFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtpZHgsIHZhbHVlSW5kZXggPSAwfSA9IGFjdGlvbjtcbiAgY29uc3Qgb2xkRmlsdGVyID0gc3RhdGUuZmlsdGVyc1tpZHhdO1xuICBpZiAoIW9sZEZpbHRlcikge1xuICAgIENvbnNvbGUuZXJyb3IoYGZpbHRlcnMuJHtpZHh9IGlzIHVuZGVmaW5lZGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoXG4gICAgQXJyYXkuaXNBcnJheShhY3Rpb24ucHJvcCkgJiZcbiAgICAoIUFycmF5LmlzQXJyYXkoYWN0aW9uLnZhbHVlKSB8fCBhY3Rpb24ucHJvcC5sZW5ndGggIT09IGFjdGlvbi52YWx1ZS5sZW5ndGgpXG4gICkge1xuICAgIENvbnNvbGUuZXJyb3IoJ0V4cGVjdGluZyB2YWx1ZSB0byBiZSBhbiBhcnJheSBvZiB0aGUgc2FtZSBsZW5ndGgsIHNpbmNlIHByb3AgaXMgYW4gYXJyYXknKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gY29udmVydCBwcm9wIGFuZCB2YWx1ZSB0byBhcnJheVxuICBjb25zdCBwcm9wcyA9IHRvQXJyYXkoYWN0aW9uLnByb3ApO1xuICBjb25zdCB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KGFjdGlvbi5wcm9wKSA/IHRvQXJyYXkoYWN0aW9uLnZhbHVlKSA6IFthY3Rpb24udmFsdWVdO1xuXG4gIGxldCBuZXdGaWx0ZXIgPSBvbGRGaWx0ZXI7XG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuXG4gIGxldCBkYXRhc2V0SWRzVG9GaWx0ZXI6IHN0cmluZ1tdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBwcm9wID0gcHJvcHNbaV07XG4gICAgY29uc3QgdmFsdWUgPSB2YWx1ZXNbaV07XG4gICAgLy8gV2UgY3VycmVudGx5IGRvIG5vdCBzdXBwb3J0IHBhc3NpbmcgaW4gbmFtZSBhcyBhbiBhcnJheSBpbnRvIF91cGRhdGVGaWx0ZXJQcm9wLCBzbyB3ZSBjYWxsIGl0IG11bHRpcGxlIHRpbWVzIHdpdGggZWFjaCBuYW1lXG4gICAgLy8gU2VlIHRoZSBjb21tZW50IGluIHRoZXJlIGFzIHRvIHdoYXQgc2hvdWxkIGJlIGFkZHJlc3NlZFxuICAgIGxldCByZXM7XG4gICAgaWYgKHByb3AgPT09ICduYW1lJyAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICAgICAgcmVzID0gdmFsdWUucmVkdWNlKChhY2N1LCB2KSA9PiB7XG4gICAgICAgIHJldHVybiBfdXBkYXRlRmlsdGVyUHJvcChhY2N1LCBuZXdGaWx0ZXIsIHByb3AsIHYsIHZhbHVlSW5kZXgpO1xuICAgICAgfSwgbmV3U3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSBfdXBkYXRlRmlsdGVyUHJvcChuZXdTdGF0ZSwgbmV3RmlsdGVyLCBwcm9wLCB2YWx1ZSwgdmFsdWVJbmRleCk7XG4gICAgfVxuICAgIG5ld0ZpbHRlciA9IHJlcy5maWx0ZXI7XG4gICAgbmV3U3RhdGUgPSByZXMuc3RhdGU7XG4gICAgZGF0YXNldElkc1RvRmlsdGVyID0gZGF0YXNldElkc1RvRmlsdGVyLmNvbmNhdChyZXMuZGF0YXNldElkc1RvRmlsdGVyKTtcbiAgfVxuXG4gIGNvbnN0IGVubGFyZ2VkRmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi52aWV3ID09PSBGSUxURVJfVklFV19UWVBFUy5lbmxhcmdlZCk7XG5cbiAgaWYgKGVubGFyZ2VkRmlsdGVyICYmIGVubGFyZ2VkRmlsdGVyLmlkICE9PSBuZXdGaWx0ZXIuaWQpIHtcbiAgICAvLyB0aGVyZSBzaG91bGQgYmUgb25seSBvbmUgZW5sYXJnZWQgZmlsdGVyXG4gICAgbmV3RmlsdGVyLnZpZXcgPSBGSUxURVJfVklFV19UWVBFUy5zaWRlO1xuICB9XG5cbiAgLy8gc2F2ZSBuZXcgZmlsdGVycyB0byBuZXdTdGF0ZVxuICBuZXdTdGF0ZSA9IHNldChbJ2ZpbHRlcnMnLCBpZHhdLCBuZXdGaWx0ZXIsIG5ld1N0YXRlKTtcblxuICAvLyBmaWx0ZXIgZGF0YVxuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICB1bmlxKGRhdGFzZXRJZHNUb0ZpbHRlciksXG4gICAgbmV3U3RhdGUuZGF0YXNldHMsXG4gICAgbmV3U3RhdGUuZmlsdGVycyxcbiAgICBuZXdTdGF0ZS5sYXllcnNcbiAgKTtcblxuICBuZXdTdGF0ZSA9IHNldChbJ2RhdGFzZXRzJ10sIGZpbHRlcmVkRGF0YXNldHMsIG5ld1N0YXRlKTtcblxuICAvLyBuZWVkIHRvIHVwZGF0ZSBmaWx0ZXJQbG90IGFmdGVyIGZpbHRlciBEYXRhc2V0IGZvciBwbG90IHRvIHVwZGF0ZSBvbiBmaWx0ZXJlZCByZXN1bHRcbiAgY29uc3QgZmlsdGVyV2l0aFBMb3QgPSB1cGRhdGVGaWx0ZXJQbG90KG5ld1N0YXRlLmRhdGFzZXRzLCBuZXdTdGF0ZS5maWx0ZXJzW2lkeF0pO1xuXG4gIG5ld1N0YXRlID0gc2V0KFsnZmlsdGVycycsIGlkeF0sIGZpbHRlcldpdGhQTG90LCBuZXdTdGF0ZSk7XG5cbiAgLy8gZGF0YUlkIGlzIGFuIGFycmF5XG4gIC8vIHBhc3Mgb25seSB0aGUgZGF0YXNldCB3ZSBuZWVkIHRvIHVwZGF0ZVxuICBuZXdTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXdTdGF0ZSwgZGF0YXNldElkc1RvRmlsdGVyLCBuZXdGaWx0ZXIpO1xuXG4gIC8vIElmIHRpbWUgcmFuZ2UgZmlsdGVyIHZhbHVlIHdhcyB1cGRhdGVkLCBhZGp1c3QgYW5pbWF0aW9uIGNvbmZpZ1xuICBpZiAobmV3RmlsdGVyLnR5cGUgPT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UgJiYgcHJvcHMuaW5jbHVkZXMoJ3ZhbHVlJykpIHtcbiAgICBuZXdTdGF0ZSA9IGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIobmV3U3RhdGUsIGFjdGlvbi5pZHgpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG5mdW5jdGlvbiBfdXBkYXRlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgdmFsdWUsIGRhdGFzZXRzKSB7XG4gIGxldCBuZXdGaWx0ZXIgPSBmaWx0ZXI7XG4gIGlmIChmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdKSB7XG4gICAgLy8gaWYgZGF0YUlkIGFscmVhZHkgZXhpc3RcbiAgICBuZXdGaWx0ZXIgPSBfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgZGF0YXNldHMpO1xuICB9XG4gIGlmICh2YWx1ZSkge1xuICAgIGNvbnN0IG5leHRWYWx1ZSA9IG5ld0ZpbHRlci5kYXRhSWQuc2xpY2UoKTtcbiAgICBuZXh0VmFsdWVbdmFsdWVJbmRleF0gPSB2YWx1ZTtcbiAgICBuZXdGaWx0ZXIgPSBzZXQoWydkYXRhSWQnXSwgbmV4dFZhbHVlLCBuZXdGaWx0ZXIpO1xuICB9XG4gIHJldHVybiBuZXdGaWx0ZXI7XG59XG5cbmZ1bmN0aW9uIF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cykge1xuICBjb25zdCBkYXRhSWQgPSBmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdO1xuXG4gIGlmIChmaWx0ZXIuZGF0YUlkLmxlbmd0aCA9PT0gMSAmJiB2YWx1ZUluZGV4ID09PSAwKSB7XG4gICAgLy8gaWYgcmVtb3ZlIHRoZSBvbmx5IGRhdGFJZCwgY3JlYXRlIGFuIGVtcHR5IGZpbHRlciBpbnN0ZWFkO1xuICAgIHJldHVybiBnZXREZWZhdWx0RmlsdGVyKHtpZDogZmlsdGVyLmlkfSk7XG4gIH1cblxuICBpZiAoZGF0YUlkKSB7XG4gICAgZmlsdGVyID0gcmVtb3ZlRmlsdGVyUGxvdChmaWx0ZXIsIGRhdGFJZCk7XG4gIH1cblxuICBmb3IgKGNvbnN0IHByb3Agb2YgWydkYXRhSWQnLCAnbmFtZScsICdmaWVsZElkeCcsICdncHVDaGFubmVsJ10pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXJbcHJvcF0pKSB7XG4gICAgICBjb25zdCBuZXh0VmFsID0gZmlsdGVyW3Byb3BdLnNsaWNlKCk7XG4gICAgICBuZXh0VmFsLnNwbGljZSh2YWx1ZUluZGV4LCAxKTtcbiAgICAgIGZpbHRlciA9IHNldChbcHJvcF0sIG5leHRWYWwsIGZpbHRlcik7XG4gICAgfVxuICB9XG5cbiAgLy8gbWVyZ2VGaWVsZERvbWFpbiBmb3IgdGhlIHJlbWFpbmluZyBmaWVsZHNcbiAgY29uc3QgZG9tYWluU3RlcHMgPSBtZXJnZUZpbHRlckRvbWFpbihmaWx0ZXIsIGRhdGFzZXRzKTtcblxuICBjb25zdCBuZXh0RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICAvLyB2YWx1ZTogbmV4dFZhbHVlLFxuICAgIC4uLihkb21haW5TdGVwcyA/IHtkb21haW46IGRvbWFpblN0ZXBzPy5kb21haW4sIHN0ZXA6IGRvbWFpblN0ZXBzPy5zdGVwfSA6IHt9KVxuICB9O1xuXG4gIGNvbnN0IG5leHRWYWx1ZSA9IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4obmV4dEZpbHRlci52YWx1ZSwgbmV4dEZpbHRlcik7XG4gIHJldHVybiB7XG4gICAgLi4ubmV4dEZpbHRlcixcbiAgICB2YWx1ZTogbmV4dFZhbHVlXG4gIH07XG59XG5cbi8qKiAqXG4gKiBVcGRhdGVzIGEgc2luZ2xlIHByb3BlcnR5IG9mIGEgZmlsdGVyXG4gKi9cbmZ1bmN0aW9uIF91cGRhdGVGaWx0ZXJQcm9wKHN0YXRlLCBmaWx0ZXIsIHByb3AsIHZhbHVlLCB2YWx1ZUluZGV4LCBkYXRhc2V0SWRzPykge1xuICBsZXQgZGF0YXNldElkc1RvRmlsdGVyOiBzdHJpbmdbXSA9IFtdO1xuICBzd2l0Y2ggKHByb3ApIHtcbiAgICAvLyBUT0RPOiBOZXh0IFBSIGZvciBVSSBpZiB3ZSB1cGRhdGUgZmlsdGVyRGF0YUlkLCB3ZSBuZWVkIHRvIGNvbnNpZGVyIHR3byBjYXNlczpcbiAgICAvLyAxLiBkYXRhSWQgaXMgZW1wdHk6IGNyZWF0ZSBhIGRlZmF1bHQgZmlsdGVyXG4gICAgLy8gMi4gQWRkIGEgbmV3IGRhdGFzZXQgaWRcbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLmRhdGFJZDoge1xuICAgICAgY29uc3Qgb2xkRGF0YUlkID0gWy4uLmZpbHRlci5kYXRhSWRdO1xuICAgICAgZmlsdGVyID0gX3VwZGF0ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIHZhbHVlLCBzdGF0ZS5kYXRhc2V0cyk7XG4gICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSB1bmlxKFsuLi5vbGREYXRhSWQsIC4uLmZpbHRlci5kYXRhSWRdKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLm5hbWU6IHtcbiAgICAgIC8vIHdlIGFyZSBzdXBwb3J0aW5nIHRoZSBjdXJyZW50IGZ1bmN0aW9uYWxpdHlcbiAgICAgIC8vIFRPRE86IE5leHQgUFIgZm9yIFVJIGZpbHRlciBuYW1lIHdpbGwgb25seSB1cGRhdGUgZmlsdGVyIG5hbWUgYnV0IGl0IHdvbid0IGhhdmUgc2lkZSBlZmZlY3RzXG4gICAgICAvLyB3ZSBhcmUgZ29ubmEgdXNlIHBhaXIgb2YgZGF0YXNldHMgYW5kIGZpZWxkSWR4IHRvIHVwZGF0ZSB0aGUgZmlsdGVyXG4gICAgICBjb25zdCBkYXRhc2V0SWQgPSBmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdO1xuICAgICAgY29uc3Qge2ZpbHRlcjogdXBkYXRlZEZpbHRlciwgZGF0YXNldDogbmV3RGF0YXNldH0gPSBhcHBseUZpbHRlckZpZWxkTmFtZShcbiAgICAgICAgZmlsdGVyLFxuICAgICAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICAgICAgZGF0YXNldElkLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdmFsdWVJbmRleCxcbiAgICAgICAge21lcmdlRG9tYWluOiB2YWx1ZUluZGV4ID4gMH1cbiAgICAgICk7XG4gICAgICBpZiAodXBkYXRlZEZpbHRlcikge1xuICAgICAgICBmaWx0ZXIgPSB1cGRhdGVkRmlsdGVyO1xuICAgICAgICBpZiAoZmlsdGVyLmdwdSkge1xuICAgICAgICAgIGZpbHRlciA9IHNldEZpbHRlckdwdU1vZGUoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKTtcbiAgICAgICAgICBmaWx0ZXIgPSBhc3NpZ25HcHVDaGFubmVsKGZpbHRlciwgc3RhdGUuZmlsdGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUgPSBzZXQoWydkYXRhc2V0cycsIGRhdGFzZXRJZF0sIG5ld0RhdGFzZXQsIHN0YXRlKTtcbiAgICAgICAgLy8gcmVtb3ZlIGZpbHRlciBQbG90IGF0IGRhdGFzZXRJZCwgc28gaXQgd2lsbCBiZSByZWNhbGN1bGF0ZWRcbiAgICAgICAgZmlsdGVyID0gcmVtb3ZlRmlsdGVyUGxvdChmaWx0ZXIsIGRhdGFzZXRJZCk7XG5cbiAgICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gdXBkYXRlZEZpbHRlci5kYXRhSWQ7XG4gICAgICB9XG4gICAgICAvLyBvbmx5IGZpbHRlciB0aGUgY3VycmVudCBkYXRhc2V0XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLmxheWVySWQ6IHtcbiAgICAgIC8vIFdlIG5lZWQgdG8gdXBkYXRlIG9ubHkgZGF0YXNldElkL3MgaWYgd2UgaGF2ZSBhZGRlZC9yZW1vdmVkIGxheWVyc1xuICAgICAgLy8gLSBjaGVjayBmb3IgbGF5ZXJJZCBjaGFuZ2VzIChYT1Igd29ya3MgYmVjYXVzZSBvZiBzdHJpbmcgdmFsdWVzKVxuICAgICAgLy8gaWYgbm8gZGlmZmVyZW5jZXMgYmV0d2VlbiBsYXllcklkcywgZG9uJ3QgZG8gYW55IGZpbHRlcmluZ1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgY29uc3QgbGF5ZXJJZERpZmZlcmVuY2UgPSB4b3IodmFsdWUsIGZpbHRlci5sYXllcklkKTtcblxuICAgICAgY29uc3QgbGF5ZXJEYXRhSWRzID0gdW5pcTxzdHJpbmc+KFxuICAgICAgICBsYXllcklkRGlmZmVyZW5jZVxuICAgICAgICAgIC5tYXAobGlkID0+XG4gICAgICAgICAgICBnZXQoXG4gICAgICAgICAgICAgIHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gbGlkKSxcbiAgICAgICAgICAgICAgWydjb25maWcnLCAnZGF0YUlkJ11cbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICAgLmZpbHRlcihkID0+IGQpIGFzIHN0cmluZ1tdXG4gICAgICApO1xuXG4gICAgICAvLyBvbmx5IGZpbHRlciBkYXRhc2V0c0lkc1xuICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gbGF5ZXJEYXRhSWRzO1xuXG4gICAgICAvLyBVcGRhdGUgbmV3RmlsdGVyIGRhdGFJZHNcbiAgICAgIGNvbnN0IG5ld0RhdGFJZHMgPSB1bmlxPHN0cmluZz4oXG4gICAgICAgIHZhbHVlXG4gICAgICAgICAgPy5tYXAobGlkID0+XG4gICAgICAgICAgICBnZXQoXG4gICAgICAgICAgICAgIHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gbGlkKSxcbiAgICAgICAgICAgICAgWydjb25maWcnLCAnZGF0YUlkJ11cbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICAgLmZpbHRlcihkID0+IGQpIGFzIHN0cmluZ1tdXG4gICAgICApO1xuXG4gICAgICBmaWx0ZXIgPSB7XG4gICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgbGF5ZXJJZDogdmFsdWUsXG4gICAgICAgIGRhdGFJZDogbmV3RGF0YUlkc1xuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICBmaWx0ZXIgPSBzZXQoW3Byb3BdLCB2YWx1ZSwgZmlsdGVyKTtcbiAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IFsuLi5maWx0ZXIuZGF0YUlkXTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIHtmaWx0ZXIsIGRhdGFzZXRJZHMsIGRhdGFzZXRJZHNUb0ZpbHRlciwgc3RhdGV9O1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtc3RhdGVtZW50cyAqL1xuXG4vKipcbiAqIFNldCB0aGUgcHJvcGVydHkgb2YgYSBmaWx0ZXIgcGxvdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEZpbHRlclBsb3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZHgsIG5ld1Byb3B9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyUGxvdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKCFzdGF0ZS5maWx0ZXJzW2lkeF0pIHtcbiAgICBDb25zb2xlLmVycm9yKGBmaWx0ZXJzWyR7aWR4fV0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBuZXdGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG5cbiAgZm9yIChjb25zdCBwcm9wIGluIG5ld1Byb3ApIHtcbiAgICBpZiAocHJvcCA9PT0gJ3Bsb3RUeXBlJykge1xuICAgICAgbmV3RmlsdGVyID0gcGlja18oJ3Bsb3RUeXBlJykobWVyZ2VfKG5ld1Byb3AucGxvdFR5cGUpKShuZXdGaWx0ZXIpO1xuICAgIH0gZWxzZSBpZiAocHJvcCA9PT0gJ3lBeGlzJykge1xuICAgICAgY29uc3QgY2hhcnRUeXBlID0gbmV3UHJvcC55QXhpcyA/IFBMT1RfVFlQRVMubGluZUNoYXJ0IDogUExPVF9UWVBFUy5oaXN0b2dyYW07XG5cbiAgICAgIG5ld0ZpbHRlciA9IHBpY2tfKCdwbG90VHlwZScpKG1lcmdlXyh7dHlwZTogY2hhcnRUeXBlfSkpKG1lcmdlXyhuZXdQcm9wKShuZXdGaWx0ZXIpKTtcbiAgICB9XG4gIH1cblxuICBuZXdGaWx0ZXIgPSB1cGRhdGVGaWx0ZXJQbG90KHN0YXRlLmRhdGFzZXRzLCBuZXdGaWx0ZXIpO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+IChpID09PSBpZHggPyBuZXdGaWx0ZXIgOiBmKSlcbiAgfTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT5cbiAgIWFjdGlvbi5kYXRhSWRcbiAgICA/IHN0YXRlXG4gICAgOiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBmaWx0ZXJzOiBbLi4uc3RhdGUuZmlsdGVycywgZ2V0RGVmYXVsdEZpbHRlcih7ZGF0YUlkOiBhY3Rpb24uZGF0YUlkLCBpZDogYWN0aW9uLmlkfSldXG4gICAgICB9O1xuXG4vKipcbiAqIENyZWF0ZSBvciB1cGRhdGUgYSBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVPclVwZGF0ZUZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQ3JlYXRlT3JVcGRhdGVGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZCwgZGF0YUlkLCBmaWVsZCwgdmFsdWV9ID0gYWN0aW9uO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBjb25zdCBvcmlnaW5hbEluZGV4ID0gbmV3U3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBpZCk7XG4gIGxldCBmaWx0ZXJJbmRleCA9IG9yaWdpbmFsSW5kZXg7XG4gIGlmICghaWQgJiYgIWRhdGFJZCkge1xuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfVxuICBpZiAob3JpZ2luYWxJbmRleCA8IDAgJiYgZGF0YUlkKSB7XG4gICAgbmV3U3RhdGUgPSBhZGRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7ZGF0YUlkfSk7XG4gICAgaWYgKG5ld1N0YXRlLmZpbHRlcnMubGVuZ3RoICE9PSBzdGF0ZS5maWx0ZXJzLmxlbmd0aCArIDEpIHtcbiAgICAgIC8vIE5vIG5ldyBmaWx0ZXIgd2FzIGFkZGVkXG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICAgIC8vIEhlcmUgd2UgYXJlIGFzc3VtaW5nIHRoYXQgdGhlIGZpbHRlciB3YXMgYWRkZWQgYXQgdGhlIGVuZFxuICAgIGZpbHRlckluZGV4ID0gbmV3U3RhdGUuZmlsdGVycy5sZW5ndGggLSAxO1xuICAgIG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySW5kZXhdID0ge1xuICAgICAgLi4ubmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJbmRleF0sXG4gICAgICAuLi4oaWQgPyB7aWR9IDogbnVsbClcbiAgICB9O1xuICB9XG5cbiAgLy8gTm8gbmVlZCB0byB1cGRhdGUgdGhpcyBpZiBpdCdzIGEgbmV3bHkgY3JlYXRlZCBmaWx0ZXJcbiAgLy8gRmlyc3Qgd2UgbWFrZSBzdXJlIGFsbCB0aGUgZGF0YUlkcyB0aGF0IGZpZWxkcyByZWZlciB0byBhcmUgdXBkYXRlZFxuICBpZiAob3JpZ2luYWxJbmRleCA+PSAwICYmIGRhdGFJZCkge1xuICAgIC8vIElmIHRoZSBkYXRhSWQgaXMgYW4gYXJyYXksIHdlIG5lZWQgdG8gdXBkYXRlIGVhY2ggb25lIGluZGl2aWR1YWxseSBhcyB0aGV5IG5lZWQgYSBjb3JyZWN0IHZhbHVlSW5kZXggcGFzc2VkXG4gICAgbmV3U3RhdGUgPSAoQXJyYXkuaXNBcnJheShkYXRhSWQpID8gZGF0YUlkIDogW2RhdGFJZF0pLnJlZHVjZSgoYWNjdSwgZCwgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKGFjY3UsIHtcbiAgICAgICAgaWR4OiBmaWx0ZXJJbmRleCxcbiAgICAgICAgcHJvcDogJ2RhdGFJZCcsXG4gICAgICAgIHZhbHVlOiBkLFxuICAgICAgICB2YWx1ZUluZGV4OiBpbmRleFxuICAgICAgfSk7XG4gICAgfSwgbmV3U3RhdGUpO1xuICB9XG4gIC8vIFRoZW4gd2UgdXBkYXRlIHRoZSBmaWVsZHNcbiAgaWYgKGZpZWxkKSB7XG4gICAgLy8gSWYgdGhlIGZpZWxkIGlzIGFuIGFycmF5LCB3ZSBuZWVkIHRvIHVwZGF0ZSBlYWNoIGZpZWxkIGluZGl2aWR1YWxseSBhcyB0aGV5IG5lZWQgYSBjb3JyZWN0IHZhbHVlSW5kZXggcGFzc2VkXG4gICAgbmV3U3RhdGUgPSAoQXJyYXkuaXNBcnJheShmaWVsZCkgPyBmaWVsZCA6IFtmaWVsZF0pLnJlZHVjZSgoYWNjdSwgZiwgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKGFjY3UsIHtcbiAgICAgICAgaWR4OiBmaWx0ZXJJbmRleCxcbiAgICAgICAgcHJvcDogJ25hbWUnLFxuICAgICAgICB2YWx1ZTogZixcbiAgICAgICAgdmFsdWVJbmRleDogaW5kZXhcbiAgICAgIH0pO1xuICAgIH0sIG5ld1N0YXRlKTtcbiAgfVxuICAvLyBUaGVuIHdlIHVwZGF0ZSB0aGUgdmFsdWUgc2VwYXJhdGVseVxuICBpZiAodmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge2lkeDogZmlsdGVySW5kZXgsIHByb3A6ICd2YWx1ZScsIHZhbHVlfSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIFNldCBsYXllciBjb2xvciBwYWxldHRlIHVpIHN0YXRlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3QgbGF5ZXJDb2xvclVJQ2hhbmdlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7b2xkTGF5ZXIsIHByb3AsIG5ld0NvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5MYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IG9sZFZpeENvbmZpZyA9IG9sZExheWVyLmNvbmZpZy52aXNDb25maWdbcHJvcF07XG4gIGNvbnN0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb2xvclVJKHByb3AsIG5ld0NvbmZpZyk7XG4gIGNvbnN0IG5ld1Zpc0NvbmZpZyA9IG5ld0xheWVyLmNvbmZpZy52aXNDb25maWdbcHJvcF07XG4gIGlmIChvbGRWaXhDb25maWcgIT09IG5ld1Zpc0NvbmZpZykge1xuICAgIHJldHVybiBsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIoc3RhdGUsIHtcbiAgICAgIG9sZExheWVyLFxuICAgICAgbmV3VmlzQ29uZmlnOiB7XG4gICAgICAgIFtwcm9wXTogbmV3VmlzQ29uZmlnXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN0YXRlLmxheWVycy5tYXAobCA9PiAobC5pZCA9PT0gb2xkTGF5ZXIuaWQgPyBuZXdMYXllciA6IGwpKVxuICB9O1xufTtcblxuLyoqXG4gKiBTdGFydCBhbmQgZW5kIGZpbHRlciBhbmltYXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVGaWx0ZXJBbmltYXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT4gKGkgPT09IGFjdGlvbi5pZHggPyB7Li4uZiwgaXNBbmltYXRpbmc6ICFmLmlzQW5pbWF0aW5nfSA6IGYpKVxufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ZpbHRlckFuaW1hdGlvbkNvbmZpZyhjb25maWc6IEFuaW1hdGlvbkNvbmZpZyB8IEZpbHRlckFuaW1hdGlvbkNvbmZpZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gJ2RhdGFJZCcgaW4gY29uZmlnICYmICdhbmltYXRpb25XaW5kb3cnIGluIGNvbmZpZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0QW5pbWF0aW9uQ29uZmlnVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7Y29uZmlnfSA9IGFjdGlvbjtcbiAgaWYgKGlzRmlsdGVyQW5pbWF0aW9uQ29uZmlnKGNvbmZpZykpIHtcbiAgICAvLyBGaW5kIGZpbHRlciB1c2VkIGZvciBhbmltYXRpb25cbiAgICAvLyBBc3N1bWluZyB0aGVyZSdzIG9ubHkgb25lIGZpbHRlciB1c2VkIGZvciBhbmltYXRpb24sIHNlZSBzZXRGaWx0ZXJWaWV3VXBkYXRlclxuICAgIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+ICFpc1NpZGVGaWx0ZXIoZikpO1xuICAgIGlmICghZmlsdGVyKSB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICAgIGNvbnN0IG5ld0ZpbHRlciA9IHsuLi5maWx0ZXIsIC4uLmNvbmZpZ307XG4gICAgcmV0dXJuIGFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlcihzdGF0ZSwgYXBwbHlGaWx0ZXJDb25maWcoZmlsdGVyLmlkLCBuZXdGaWx0ZXIpKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICAuLi5jb25maWdcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICBpc0FuaW1hdGluZzogIXN0YXRlLmFuaW1hdGlvbkNvbmZpZy5pc0FuaW1hdGluZ1xuICB9XG59KTtcblxuLyoqXG4gKiBIaWRlIGFuZCBzaG93IGxheWVyIGFuaW1hdGlvbiBjb250cm9sXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJBbmltYXRpb25Db250cm9sVXBkYXRlciA9IChzdGF0ZTogVmlzU3RhdGUpOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgIGhpZGVDb250cm9sOiAhc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmhpZGVDb250cm9sXG4gIH1cbn0pO1xuXG4vKipcbiAqIENoYW5nZSBmaWx0ZXIgYW5pbWF0aW9uIHNwZWVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUZpbHRlckFuaW1hdGlvblNwZWVkVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PiAoaSA9PT0gYWN0aW9uLmlkeCA/IHsuLi5mLCBzcGVlZDogYWN0aW9uLnNwZWVkfSA6IGYpKVxufSk7XG5cbi8qKlxuICogVXBkYXRlIGFuaW1hdGlvbiBzcGVlZCB3aXRoIHRoZSB2ZXJ0aWNhbCBzcGVlZCBzbGlkZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKlxuICovXG5leHBvcnQgY29uc3QgdXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge3NwZWVkfTogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICBzcGVlZFxuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogU2hvdyBsYXJnZXIgdGltZSBmaWx0ZXIgYXQgYm90dG9tIGZvciB0aW1lIHBsYXliYWNrIChhcHBseSB0byB0aW1lIGZpbHRlciBvbmx5KVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEZpbHRlclZpZXdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlclZpZXdVcGRhdGVyQWN0aW9uXG4pID0+IHtcbiAgY29uc3Qge3ZpZXcsIGlkeH0gPSBhY3Rpb247XG4gIGNvbnN0IHNob3VsZFJlc2V0T3RoZXJGaWx0ZXJzVmlldyA9IHZpZXcgPT09IEZJTFRFUl9WSUVXX1RZUEVTLmVubGFyZ2VkO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PlxuICAgICAgaSA9PT0gaWR4XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIHZpZXdcbiAgICAgICAgICB9XG4gICAgICAgIDogc2hvdWxkUmVzZXRPdGhlckZpbHRlcnNWaWV3XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIHZpZXc6IEZJTFRFUl9WSUVXX1RZUEVTLnNpZGVcbiAgICAgICAgICB9XG4gICAgICAgIDogZlxuICAgIClcbiAgfTtcbn07XG5cbi8qKlxuICogVG9nZ2xlcyBmaWx0ZXIgZmVhdHVyZSB2aXNpYmlsaXR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1thY3Rpb24uaWR4XTtcbiAgY29uc3QgaXNWaXNpYmxlID0gZ2V0KGZpbHRlciwgWyd2YWx1ZScsICdwcm9wZXJ0aWVzJywgJ2lzVmlzaWJsZSddKTtcblxuICBsZXQgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKHN0YXRlLCB7XG4gICAgaWR4OiBhY3Rpb24uaWR4LFxuICAgIHByb3A6ICdlbmFibGVkJyxcbiAgICB2YWx1ZTogIWlzVmlzaWJsZVxuICB9KTtcblxuICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGFjdGlvbi5pZHgsXG4gICAgcHJvcDogJ3ZhbHVlJyxcbiAgICB2YWx1ZTogZmVhdHVyZVRvRmlsdGVyVmFsdWUoZmlsdGVyLnZhbHVlLCBmaWx0ZXIuaWQsIHtcbiAgICAgIGlzVmlzaWJsZTogIWlzVmlzaWJsZVxuICAgIH0pXG4gIH0pO1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZHh9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YUlkLCBpZH0gPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG5cbiAgY29uc3QgbmV3RmlsdGVycyA9IFtcbiAgICAuLi5zdGF0ZS5maWx0ZXJzLnNsaWNlKDAsIGlkeCksXG4gICAgLi4uc3RhdGUuZmlsdGVycy5zbGljZShpZHggKyAxLCBzdGF0ZS5maWx0ZXJzLmxlbmd0aClcbiAgXTtcblxuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhkYXRhSWQsIHN0YXRlLmRhdGFzZXRzLCBuZXdGaWx0ZXJzLCBzdGF0ZS5sYXllcnMpO1xuICBjb25zdCBuZXdFZGl0b3IgPVxuICAgIGdldEZpbHRlcklkSW5GZWF0dXJlKHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmUpID09PSBpZFxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICAgICAgICB9XG4gICAgICA6IHN0YXRlLmVkaXRvcjtcblxuICBsZXQgbmV3U3RhdGUgPSBzZXQoWydmaWx0ZXJzJ10sIG5ld0ZpbHRlcnMsIHN0YXRlKTtcbiAgbmV3U3RhdGUgPSBzZXQoWydkYXRhc2V0cyddLCBmaWx0ZXJlZERhdGFzZXRzLCBuZXdTdGF0ZSk7XG4gIG5ld1N0YXRlID0gc2V0KFsnZWRpdG9yJ10sIG5ld0VkaXRvciwgbmV3U3RhdGUpO1xuXG4gIHJldHVybiB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV3U3RhdGUsIGRhdGFJZCwgdW5kZWZpbmVkKTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkTGF5ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZExheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBsZXQgbmV3TGF5ZXI7XG4gIGxldCBuZXdMYXllckRhdGE7XG4gIGlmIChhY3Rpb24uY29uZmlnKSB7XG4gICAgbmV3TGF5ZXIgPSBjcmVhdGVMYXllckZyb21Db25maWcoc3RhdGUsIGFjdGlvbi5jb25maWcpO1xuICAgIGlmICghbmV3TGF5ZXIpIHtcbiAgICAgIENvbnNvbGUud2FybihcbiAgICAgICAgJ0ZhaWxlZCB0byBjcmVhdGUgbGF5ZXIgZnJvbSBjb25maWcsIGl0IHVzdWFsbHkgbWVhbnMgdGhlIGNvbmZpZyBpcyBub3QgYmUgaW4gY29ycmVjdCBmb3JtYXQnLFxuICAgICAgICBhY3Rpb24uY29uZmlnXG4gICAgICApO1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUpO1xuICAgIG5ld0xheWVyID0gcmVzdWx0LmxheWVyO1xuICAgIG5ld0xheWVyRGF0YSA9IHJlc3VsdC5sYXllckRhdGE7XG4gIH0gZWxzZSB7XG4gICAgLy8gY3JlYXRlIGFuIGVtcHR5IGxheWVyIHdpdGggYSBzcGVjaWZpYyBkYXRhc2V0IG9yIGEgZGVmYXVsdCBvbmVcbiAgICBjb25zdCBkZWZhdWx0RGF0YXNldCA9IGFjdGlvbi5kYXRhc2V0SWQgPz8gT2JqZWN0LmtleXMoc3RhdGUuZGF0YXNldHMpWzBdO1xuICAgIG5ld0xheWVyID0gbmV3IExheWVyKHtcbiAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcbiAgICAgIGlzQ29uZmlnQWN0aXZlOiB0cnVlLFxuICAgICAgZGF0YUlkOiBkZWZhdWx0RGF0YXNldFxuICAgIH0pO1xuICAgIG5ld0xheWVyRGF0YSA9IHt9O1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogWy4uLnN0YXRlLmxheWVycywgbmV3TGF5ZXJdLFxuICAgIGxheWVyRGF0YTogWy4uLnN0YXRlLmxheWVyRGF0YSwgbmV3TGF5ZXJEYXRhXSxcbiAgICAvLyBhZGQgbmV3IGxheWVyIGF0IHRoZSB0b3BcbiAgICBsYXllck9yZGVyOiBbbmV3TGF5ZXIuaWQsIC4uLnN0YXRlLmxheWVyT3JkZXJdLFxuICAgIHNwbGl0TWFwczogYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcChzdGF0ZS5zcGxpdE1hcHMsIG5ld0xheWVyKVxuICB9O1xuXG4gIGlmIChuZXdMYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIHJlbW92ZSBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUxheWVyVXBkYXRlcjxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUxheWVyVXBkYXRlckFjdGlvblxuKTogVCB7XG4gIGNvbnN0IGlkeCA9IE51bWJlci5pc0Zpbml0ZShpZClcbiAgICA/IC8vIHN1cHBvcnQgb2xkZXIgQVBJLCByZW1vdmUgbGF5ZXIgYnkgaWR4XG4gICAgICBOdW1iZXIoaWQpXG4gICAgOiBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gc3RhdGUubGF5ZXJzLmxlbmd0aCkge1xuICAgIC8vIGludmFsaWQgaW5kZXhcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgcmVtb3ZlIGxheWVyIHdpdGggaW52YWxpZCBpZHxpZHggJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7bGF5ZXJzLCBsYXllckRhdGEsIGxheWVyT3JkZXIsIGNsaWNrZWQsIGhvdmVySW5mb30gPSBzdGF0ZTtcbiAgY29uc3QgbGF5ZXJUb1JlbW92ZSA9IGxheWVyc1tpZHhdO1xuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IGZpbHRlck91dEJ5SWQobGF5ZXJUb1JlbW92ZS5pZCkobGF5ZXJzKSxcbiAgICBsYXllckRhdGE6IHJlbW92ZUVsZW1lbnRBdEluZGV4KGlkeCkobGF5ZXJEYXRhKSxcbiAgICBsYXllck9yZGVyOiBsYXllck9yZGVyLmZpbHRlcihsYXllcklkID0+IGxheWVySWQgIT09IGxheWVyVG9SZW1vdmUuaWQpLFxuICAgIGNsaWNrZWQ6IGxheWVyVG9SZW1vdmUuaXNMYXllckhvdmVyZWQoY2xpY2tlZCkgPyB1bmRlZmluZWQgOiBjbGlja2VkLFxuICAgIGhvdmVySW5mbzogbGF5ZXJUb1JlbW92ZS5pc0xheWVySG92ZXJlZChob3ZlckluZm8pID8gdW5kZWZpbmVkIDogaG92ZXJJbmZvLFxuICAgIHNwbGl0TWFwczogcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzKHN0YXRlLnNwbGl0TWFwcywgbGF5ZXJUb1JlbW92ZSlcbiAgICAvLyBUT0RPOiB1cGRhdGUgZmlsdGVycywgY3JlYXRlIGhlbHBlciB0byByZW1vdmUgbGF5ZXIgZm9ybSBmaWx0ZXIgKHJlbW92ZSBsYXllcmlkIGFuZCBkYXRhaWQpIGlmIG1hcHBlZFxuICB9O1xuXG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xufVxuXG4vKipcbiAqIFJlb3JkZXIgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW9yZGVyTGF5ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvcmRlcn06IFZpc1N0YXRlQWN0aW9ucy5SZW9yZGVyTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbGF5ZXJPcmRlcjogb3JkZXJcbn0pO1xuXG4vKipcbiAqIGR1cGxpY2F0ZSBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGR1cGxpY2F0ZUxheWVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuRHVwbGljYXRlTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IE51bWJlci5pc0Zpbml0ZShpZClcbiAgICA/IC8vIHN1cHBvcnQgb2xkZXIgQVBJLCByZW1vdmUgbGF5ZXIgYnkgaWR4XG4gICAgICBOdW1iZXIoaWQpXG4gICAgOiBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCAhc3RhdGUubGF5ZXJzW2lkeF0pIHtcbiAgICBDb25zb2xlLndhcm4oYGxheWVyICR7aWR4fSBub3QgZm91bmQgaW4gbGF5ZXJPcmRlcmApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtsYXllcnN9ID0gc3RhdGU7XG4gIGNvbnN0IG9yaWdpbmFsID0gbGF5ZXJzW2lkeF07XG5cbiAgY29uc3Qgb3JpZ2luYWxMYXllck9yZGVySWR4ID0gc3RhdGUubGF5ZXJPcmRlci5maW5kSW5kZXgobGlkID0+IGxpZCA9PT0gb3JpZ2luYWwuaWQpO1xuICBsZXQgbmV3TGFiZWwgPSBgQ29weSBvZiAke29yaWdpbmFsLmNvbmZpZy5sYWJlbH1gO1xuICBsZXQgcG9zdGZpeCA9IDA7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgd2hpbGUgKGxheWVycy5maW5kKGwgPT4gbC5jb25maWcubGFiZWwgPT09IG5ld0xhYmVsKSkge1xuICAgIG5ld0xhYmVsID0gYENvcHkgb2YgJHtvcmlnaW5hbC5jb25maWcubGFiZWx9ICR7Kytwb3N0Zml4fWA7XG4gIH1cblxuICAvLyBjb2xsZWN0IGxheWVyIGNvbmZpZyBmcm9tIG9yaWdpbmFsXG4gIGNvbnN0IGxvYWRlZExheWVyID0gc2VyaWFsaXplTGF5ZXIob3JpZ2luYWwsIHN0YXRlLnNjaGVtYSk7XG5cbiAgLy8gYXNzaWduIG5ldyBpZCBhbmQgbGFiZWwgdG8gY29waWVkIGxheWVyXG4gIGlmICghbG9hZGVkTGF5ZXI/LmNvbmZpZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsb2FkZWRMYXllci5jb25maWcubGFiZWwgPSBuZXdMYWJlbDtcbiAgbG9hZGVkTGF5ZXIuaWQgPSBnZW5lcmF0ZUhhc2hJZChMQVlFUl9JRF9MRU5HVEgpO1xuXG4gIC8vIGFkZCBsYXllciB0byBzdGF0ZVxuICBsZXQgbmV4dFN0YXRlID0gYWRkTGF5ZXJVcGRhdGVyKHN0YXRlLCB7Y29uZmlnOiBsb2FkZWRMYXllcn0pO1xuICAvLyByZXRyaWV2ZSBuZXdseSBjcmVhdGVkIGxheWVyXG4gIGNvbnN0IG5ld0xheWVyID0gbmV4dFN0YXRlLmxheWVyc1tuZXh0U3RhdGUubGF5ZXJzLmxlbmd0aCAtIDFdO1xuICAvLyB1cGRhdGUgbGF5ZXIgb3JkZXIgd2l0aCBuZXdMeWFlci5pZFxuICBjb25zdCBuZXdMYXllck9yZGVyID0gYXJyYXlJbnNlcnQoXG4gICAgbmV4dFN0YXRlLmxheWVyT3JkZXIuc2xpY2UoMSwgbmV4dFN0YXRlLmxheWVyT3JkZXIubGVuZ3RoKSxcbiAgICBvcmlnaW5hbExheWVyT3JkZXJJZHgsXG4gICAgbmV3TGF5ZXIuaWRcbiAgKTtcblxuICBuZXh0U3RhdGUgPSByZW9yZGVyTGF5ZXJVcGRhdGVyKG5leHRTdGF0ZSwge29yZGVyOiBuZXdMYXllck9yZGVyfSk7XG5cbiAgcmV0dXJuIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXh0U3RhdGUpO1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmIChcbiAgICBhY3Rpb24uY29uZmlnPy50eXBlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC50eXBlICYmXG4gICAgc3RhdGUuZWZmZWN0cy5zb21lKGVmZmVjdCA9PiBlZmZlY3QudHlwZSA9PT0gTElHSFRfQU5EX1NIQURPV19FRkZFQ1QudHlwZSlcbiAgKSB7XG4gICAgQ29uc29sZS53YXJuKGBDYW4ndCBhZGQgbW9yZSB0aGFuIG9uZSAke0xJR0hUX0FORF9TSEFET1dfRUZGRUNULm5hbWV9IGVmZmVjdGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGlmIChcbiAgICBhY3Rpb24uY29uZmlnPy50eXBlID09PSBESVNUQU5DRV9GT0dfVFlQRSAmJlxuICAgIHN0YXRlLmVmZmVjdHMuc29tZShcbiAgICAgIGVmZmVjdCA9PiBlZmZlY3QudHlwZSA9PT0gRElTVEFOQ0VfRk9HX1RZUEUgfHwgZWZmZWN0LnR5cGUgPT09IFNVUkZBQ0VfRk9HX1RZUEVcbiAgICApXG4gICkge1xuICAgIENvbnNvbGUud2FybihcIkNhbid0IGFkZCBtb3JlIHRoYW4gb25lIGZvZyBlZmZlY3RcIik7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgaWYgKFxuICAgIGFjdGlvbi5jb25maWc/LnR5cGUgPT09IFNVUkZBQ0VfRk9HX1RZUEUgJiZcbiAgICBzdGF0ZS5lZmZlY3RzLnNvbWUoXG4gICAgICBlZmZlY3QgPT4gZWZmZWN0LnR5cGUgPT09IFNVUkZBQ0VfRk9HX1RZUEUgfHwgZWZmZWN0LnR5cGUgPT09IERJU1RBTkNFX0ZPR19UWVBFXG4gICAgKVxuICApIHtcbiAgICBDb25zb2xlLndhcm4oXCJDYW4ndCBhZGQgbW9yZSB0aGFuIG9uZSBmb2cgZWZmZWN0XCIpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0VmZmVjdCA9IGNyZWF0ZUVmZmVjdChhY3Rpb24uY29uZmlnKTtcblxuICAvLyBjb2xsYXBzZSBjb25maWd1cmF0b3JzIGZvciBvdGhlciBlZmZlY3RzXG4gIHN0YXRlLmVmZmVjdHMuZm9yRWFjaChlZmZlY3QgPT4gZWZmZWN0LnNldFByb3BzKHtpc0NvbmZpZ0FjdGl2ZTogZmFsc2V9KSk7XG5cbiAgY29uc3QgZWZmZWN0cyA9IFsuLi5zdGF0ZS5lZmZlY3RzLCBuZXdFZmZlY3RdO1xuICBjb25zdCBlZmZlY3RPcmRlciA9IGZpeEVmZmVjdE9yZGVyKGVmZmVjdHMsIFtuZXdFZmZlY3QuaWQsIC4uLnN0YXRlLmVmZmVjdE9yZGVyXSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZmZlY3RzLFxuICAgIGVmZmVjdE9yZGVyXG4gIH07XG59O1xuXG4vKipcbiAqIHJlbW92ZSBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmVmZmVjdHMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gc3RhdGUuZWZmZWN0cy5sZW5ndGgpIHtcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgcmVtb3ZlIGVmZmVjdCB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7ZWZmZWN0cywgZWZmZWN0T3JkZXJ9ID0gc3RhdGU7XG4gIGNvbnN0IGVmZmVjdFRvUmVtb3ZlID0gZWZmZWN0c1tpZHhdO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgZml4ZWQgaW4gdHNcbiAgICBlZmZlY3RzOiBmaWx0ZXJPdXRCeUlkKGVmZmVjdFRvUmVtb3ZlLmlkKShlZmZlY3RzKSxcbiAgICBlZmZlY3RPcmRlcjogZWZmZWN0T3JkZXIuZmlsdGVyKGVmZmVjdElkID0+IGVmZmVjdElkICE9PSBlZmZlY3RUb1JlbW92ZS5pZClcbiAgfTtcbn07XG5cbi8qKlxuICogUmVvcmRlciBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW9yZGVyRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7b3JkZXJ9OiBWaXNTdGF0ZUFjdGlvbnMuUmVvcmRlckVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBlZmZlY3RPcmRlcjogZml4RWZmZWN0T3JkZXIoc3RhdGUuZWZmZWN0cywgWy4uLm9yZGVyXSlcbn0pO1xuXG4vKipcbiAqIFVwZGF0ZSBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZCwgcHJvcHN9OiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSBzdGF0ZS5lZmZlY3RzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IHN0YXRlLmVmZmVjdHMubGVuZ3RoKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHVwZGF0ZSBlZmZlY3Qgd2l0aCBpbnZhbGlkIGlkICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IGVmZmVjdE9yZGVyID0gc3RhdGUuZWZmZWN0T3JkZXI7XG4gIGlmIChwcm9wcy5pZCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmlkICE9PSBpZCkge1xuICAgIGNvbnN0IGlkeDIgPSBzdGF0ZS5lZmZlY3RzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IHByb3BzLmlkKTtcbiAgICBpZiAoaWR4MiA+PSAwKSB7XG4gICAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgdXBkYXRlIGVmZmVjdCB3aXRoIGV4aXN0aW5nIGVmZmVjdCBpZCAke2lkfWApO1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIGVmZmVjdE9yZGVyID0gZWZmZWN0T3JkZXIubWFwKGVmZmVjdE9yZGVySWQgPT5cbiAgICAgIGVmZmVjdE9yZGVySWQgPT09IGlkID8gKHByb3BzLmlkIGFzIHN0cmluZykgOiBlZmZlY3RPcmRlcklkXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IG5ld0VmZmVjdHMgPSBbLi4uc3RhdGUuZWZmZWN0c107XG4gIG5ld0VmZmVjdHNbaWR4XS5zZXRQcm9wcyhwcm9wcyk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZmZlY3RzOiBuZXdFZmZlY3RzLFxuICAgIGVmZmVjdE9yZGVyXG4gIH07XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGRhdGFzZXQgYW5kIGFsbCBsYXllcnMsIGZpbHRlcnMsIHRvb2x0aXAgY29uZmlncyB0aGF0IGJhc2VkIG9uIGl0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRGF0YXNldFVwZGF0ZXI8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBUIHtcbiAgLy8gZXh0cmFjdCBkYXRhc2V0IGtleVxuICBjb25zdCB7ZGF0YUlkOiBkYXRhc2V0S2V5fSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFzZXRzfSA9IHN0YXRlO1xuXG4gIC8vIGNoZWNrIGlmIGRhdGFzZXQgaXMgcHJlc2VudFxuICBpZiAoIWRhdGFzZXRzW2RhdGFzZXRLZXldKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGxheWVycyxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgZGF0YXNldHM6IHtbZGF0YXNldEtleV06IGRhdGFzZXQsIC4uLm5ld0RhdGFzZXRzfVxuICB9ID0gc3RhdGU7XG5cbiAgY29uc3QgbGF5ZXJzVG9SZW1vdmUgPSBsYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuZGF0YUlkID09PSBkYXRhc2V0S2V5KS5tYXAobCA9PiBsLmlkKTtcblxuICAvLyByZW1vdmUgbGF5ZXJzIGFuZCBkYXRhc2V0c1xuICBsZXQgbmV3U3RhdGUgPSBsYXllcnNUb1JlbW92ZS5yZWR1Y2UoKGFjY3UsIGlkKSA9PiByZW1vdmVMYXllclVwZGF0ZXIoYWNjdSwge2lkfSksIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogbmV3RGF0YXNldHNcbiAgfSk7XG5cbiAgLy8gdXBkYXRlIGZpbHRlcnNcbiAgY29uc3QgZmlsdGVyczogRmlsdGVyW10gPSBbXTtcbiAgZm9yIChjb25zdCBmaWx0ZXIgb2YgbmV3U3RhdGUuZmlsdGVycykge1xuICAgIGNvbnN0IHZhbHVlSW5kZXggPSBmaWx0ZXIuZGF0YUlkLmluZGV4T2YoZGF0YXNldEtleSk7XG4gICAgaWYgKHZhbHVlSW5kZXggPj0gMCAmJiBmaWx0ZXIuZGF0YUlkLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIG9ubHkgcmVtb3ZlIG9uZSBzeW5jZWQgZGF0YXNldCBmcm9tIHRoZSBmaWx0ZXJcbiAgICAgIGZpbHRlcnMucHVzaChfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgZGF0YXNldHMpKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlSW5kZXggPCAwKSB7XG4gICAgICAvLyBsZWF2ZSB0aGUgZmlsdGVyIGFzIGlzXG4gICAgICBmaWx0ZXJzLnB1c2goZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICBuZXdTdGF0ZSA9IHsuLi5uZXdTdGF0ZSwgZmlsdGVyc307XG5cbiAgcmV0dXJuIHJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWcobmV3U3RhdGUsIHtkYXRhSWQ6IGRhdGFzZXRLZXl9KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlRGF0YXNldEZyb21JbnRlcmFjdGlvbkNvbmZpZyhzdGF0ZSwge2RhdGFJZH0pIHtcbiAgbGV0IHtpbnRlcmFjdGlvbkNvbmZpZ30gPSBzdGF0ZTtcbiAgY29uc3Qge3Rvb2x0aXB9ID0gaW50ZXJhY3Rpb25Db25maWc7XG4gIGlmICh0b29sdGlwKSB7XG4gICAgY29uc3Qge2NvbmZpZ30gPSB0b29sdGlwO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBjb25zdCB7W2RhdGFJZF06IGZpZWxkcywgLi4uZmllbGRzVG9TaG93fSA9IGNvbmZpZy5maWVsZHNUb1Nob3c7XG4gICAgaW50ZXJhY3Rpb25Db25maWcgPSB7XG4gICAgICAuLi5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgIHRvb2x0aXA6IHsuLi50b29sdGlwLCBjb25maWc6IHsuLi5jb25maWcsIGZpZWxkc1RvU2hvd319XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7Li4uc3RhdGUsIGludGVyYWN0aW9uQ29uZmlnfTtcbn1cbi8qKlxuICogdXBkYXRlIGxheWVyIGJsZW5kaW5nIG1vZGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVMYXllckJsZW5kaW5nVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVMYXllckJsZW5kaW5nVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGxheWVyQmxlbmRpbmc6IGFjdGlvbi5tb2RlXG59KTtcblxuLyoqXG4gKiB1cGRhdGUgb3ZlcmxheSBibGVuZGluZyBtb2RlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVPdmVybGF5QmxlbmRpbmdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgb3ZlcmxheUJsZW5kaW5nOiBhY3Rpb24ubW9kZVxufSk7XG5cbi8qKlxuICogRGlzcGxheSBkYXRhc2V0IHRhYmxlIGluIGEgbW9kYWxcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzaG93RGF0YXNldFRhYmxlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TaG93RGF0YXNldFRhYmxlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRpbmdEYXRhc2V0OiBhY3Rpb24uZGF0YUlkXG4gIH07XG59O1xuXG4vKipcbiAqIEFkZCBjdXN0b20gY29sb3IgZm9yIGRhdGFzZXRzIGFuZCBsYXllcnNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVUYWJsZUNvbG9yVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVEYXRhc2V0Q29sb3JVcGRhdGVyXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyKHN0YXRlLCB7ZGF0YUlkOiBhY3Rpb24uZGF0YUlkLCBwcm9wczoge2NvbG9yOiBhY3Rpb24ubmV3Q29sb3J9fSk7XG59O1xuXG4vKipcbiAqIHJlc2V0IHZpc1N0YXRlIHRvIGluaXRpYWwgU3RhdGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZXNldE1hcENvbmZpZ1VwZGF0ZXIgPSAoc3RhdGU6IFZpc1N0YXRlKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uSU5JVElBTF9WSVNfU1RBVEUsXG4gIC4uLnN0YXRlLmluaXRpYWxTdGF0ZSxcbiAgaW5pdGlhbFN0YXRlOiBzdGF0ZS5pbml0aWFsU3RhdGVcbn0pO1xuXG4vKipcbiAqIFByb3BhZ2F0ZSBgdmlzU3RhdGVgIHJlZHVjZXIgd2l0aCBhIG5ldyBjb25maWd1cmF0aW9uLiBDdXJyZW50IGNvbmZpZyB3aWxsIGJlIG92ZXJyaWRlLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlY2VpdmVNYXBDb25maWdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtcbiAgICBwYXlsb2FkOiB7Y29uZmlnID0ge30sIG9wdGlvbnMgPSB7fX1cbiAgfToge1xuICAgIHR5cGU/OiB0eXBlb2YgQWN0aW9uVHlwZXMuUkVDRUlWRV9NQVBfQ09ORklHO1xuICAgIHBheWxvYWQ6IFJlY2VpdmVNYXBDb25maWdQYXlsb2FkO1xuICB9XG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmICghY29uZmlnLnZpc1N0YXRlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2tlZXBFeGlzdGluZ0NvbmZpZ30gPSBvcHRpb25zO1xuXG4gIC8vIHJlc2V0IGNvbmZpZyBpZiBrZWVwRXhpc3RpbmdDb25maWcgaXMgZmFsc3lcbiAgbGV0IG1lcmdlZFN0YXRlID0gIWtlZXBFeGlzdGluZ0NvbmZpZyA/IHJlc2V0TWFwQ29uZmlnVXBkYXRlcihzdGF0ZSkgOiBzdGF0ZTtcbiAgZm9yIChjb25zdCBtZXJnZXIgb2Ygc3RhdGUubWVyZ2Vycykge1xuICAgIGlmIChpc1ZhbGlkTWVyZ2VyKG1lcmdlcikgJiYgaGFzUHJvcHNUb01lcmdlKGNvbmZpZy52aXNTdGF0ZSwgbWVyZ2VyLnByb3ApKSB7XG4gICAgICBtZXJnZWRTdGF0ZSA9IG1lcmdlci5tZXJnZShcbiAgICAgICAgbWVyZ2VkU3RhdGUsXG4gICAgICAgIGdldFByb3BWYWx1ZVRvTWVyZ2VyKGNvbmZpZy52aXNTdGF0ZSwgbWVyZ2VyLnByb3AsIG1lcmdlci50b01lcmdlUHJvcCksXG4gICAgICAgIC8vIGZyb21Db25maWdcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWVyZ2VkU3RhdGU7XG59O1xuXG4vKipcbiAqIFRyaWdnZXIgbGF5ZXIgaG92ZXIgZXZlbnQgd2l0aCBob3ZlcmVkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxheWVySG92ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLk9uTGF5ZXJIb3ZlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBob3ZlckluZm86IHtcbiAgICAvLyBkZWNrLmdsIGluZm8gaXMgbXV0YWJsZVxuICAgIC4uLmFjdGlvbi5pbmZvLFxuICAgIC4uLihOdW1iZXIuaXNGaW5pdGUoYWN0aW9uLm1hcEluZGV4KSA/IHttYXBJbmRleDogYWN0aW9uLm1hcEluZGV4fSA6IHt9KVxuICB9XG59KTtcblxuLyogZXNsaW50LWVuYWJsZSBtYXgtc3RhdGVtZW50cyAqL1xuXG4vKipcbiAqIFVwZGF0ZSBgaW50ZXJhY3Rpb25Db25maWdgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gaW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7Y29uZmlnfSA9IGFjdGlvbjtcblxuICBjb25zdCBpbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAuLi57W2NvbmZpZy5pZF06IGNvbmZpZ31cbiAgfTtcblxuICAvLyBEb24ndCBlbmFibGUgdG9vbHRpcCBhbmQgYnJ1c2ggYXQgdGhlIHNhbWUgdGltZVxuICAvLyBidXQgY29vcmRpbmF0ZXMgY2FuIGJlIHNob3duIGF0IGFsbCB0aW1lXG4gIGNvbnN0IGNvbnRyYWRpY3QgPSBbJ2JydXNoJywgJ3Rvb2x0aXAnXTtcblxuICBpZiAoXG4gICAgY29udHJhZGljdC5pbmNsdWRlcyhjb25maWcuaWQpICYmXG4gICAgY29uZmlnLmVuYWJsZWQgJiZcbiAgICAhc3RhdGUuaW50ZXJhY3Rpb25Db25maWdbY29uZmlnLmlkXS5lbmFibGVkXG4gICkge1xuICAgIC8vIG9ubHkgZW5hYmxlIG9uZSBpbnRlcmFjdGlvbiBhdCBhIHRpbWVcbiAgICBjb250cmFkaWN0LmZvckVhY2goayA9PiB7XG4gICAgICBpZiAoayAhPT0gY29uZmlnLmlkKSB7XG4gICAgICAgIGludGVyYWN0aW9uQ29uZmlnW2tdID0gey4uLmludGVyYWN0aW9uQ29uZmlnW2tdLCBlbmFibGVkOiBmYWxzZX07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZ1xuICB9O1xuXG4gIGlmIChjb25maWcuaWQgPT09ICdnZW9jb2RlcicgJiYgIWNvbmZpZy5lbmFibGVkKSB7XG4gICAgcmV0dXJuIHJlbW92ZURhdGFzZXRVcGRhdGVyKG5ld1N0YXRlLCB7ZGF0YUlkOiAnZ2VvY29kZXJfZGF0YXNldCd9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBUcmlnZ2VyIGxheWVyIGNsaWNrIGV2ZW50IHdpdGggY2xpY2tlZCBvYmplY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckNsaWNrVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5PbkxheWVyQ2xpY2tVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbW91c2VQb3M6IHN0YXRlLmludGVyYWN0aW9uQ29uZmlnLmNvb3JkaW5hdGUuZW5hYmxlZFxuICAgID8ge1xuICAgICAgICAuLi5zdGF0ZS5tb3VzZVBvcyxcbiAgICAgICAgcGlubmVkOiBzdGF0ZS5tb3VzZVBvcy5waW5uZWQgPyBudWxsIDogY2xvbmVEZWVwKHN0YXRlLm1vdXNlUG9zKVxuICAgICAgfVxuICAgIDogc3RhdGUubW91c2VQb3MsXG4gIGNsaWNrZWQ6IGFjdGlvbi5pbmZvICYmIGFjdGlvbi5pbmZvLnBpY2tlZCA/IGFjdGlvbi5pbmZvIDogbnVsbFxufSk7XG5cbi8qKlxuICogVHJpZ2dlciBtYXAgY2xpY2sgZXZlbnQsIHVuc2VsZWN0IGNsaWNrZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbWFwQ2xpY2tVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuT25NYXBDbGlja1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjbGlja2VkOiBudWxsXG4gIH07XG59O1xuXG4vKipcbiAqIFRyaWdnZXIgbWFwIG1vdmUgZXZlbnRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBtb3VzZU1vdmVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtldnR9OiBWaXNTdGF0ZUFjdGlvbnMuT25Nb3VzZU1vdmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmIChPYmplY3QudmFsdWVzKHN0YXRlLmludGVyYWN0aW9uQ29uZmlnKS5zb21lKGNvbmZpZyA9PiBjb25maWcuZW5hYmxlZCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBtb3VzZVBvczoge1xuICAgICAgICAuLi5zdGF0ZS5tb3VzZVBvcyxcbiAgICAgICAgLi4uKEFycmF5LmlzQXJyYXkoZXZ0LnBvaW50KSA/IHttb3VzZVBvc2l0aW9uOiBbLi4uZXZ0LnBvaW50XX0gOiB7fSksXG4gICAgICAgIC4uLihBcnJheS5pc0FycmF5KGV2dC5sbmdMYXQpID8ge2Nvb3JkaW5hdGU6IFsuLi5ldnQubG5nTGF0XX0gOiB7fSlcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufTtcbi8qKlxuICogVG9nZ2xlIHZpc2liaWxpdHkgb2YgYSBsYXllciBmb3IgYSBzcGxpdCBtYXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVTcGxpdE1hcFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBNYXBTdGF0ZUFjdGlvbnMuVG9nZ2xlU3BsaXRNYXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PlxuICBzdGF0ZS5zcGxpdE1hcHMgJiYgc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCA9PT0gMFxuICAgID8ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgLy8gbWF5YmUgd2Ugc2hvdWxkIHVzZSBhbiBhcnJheSB0byBzdG9yZSBzdGF0ZSBmb3IgYSBzaW5nbGUgbWFwIGFzIHdlbGxcbiAgICAgICAgLy8gaWYgY3VycmVudCBtYXBzIGxlbmd0aCBpcyBlcXVhbCB0byAwIGl0IG1lYW5zIHRoYXQgd2UgYXJlIGFib3V0IHRvIHNwbGl0IHRoZSB2aWV3XG4gICAgICAgIHNwbGl0TWFwczogY29tcHV0ZVNwbGl0TWFwTGF5ZXJzKHN0YXRlLmxheWVycywge2R1cGxpY2F0ZTogZmFsc2V9KVxuICAgICAgfVxuICAgIDogY2xvc2VTcGVjaWZpY01hcEF0SW5kZXgoc3RhdGUsIGFjdGlvbik7XG5cbi8qKlxuICogVG9nZ2xlIHZpc2liaWxpdHkgb2YgYSBsYXllciBpbiBhIHNwbGl0IG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7bWFwSW5kZXgsIGxheWVySWR9OiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtzcGxpdE1hcHN9ID0gc3RhdGU7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBzcGxpdE1hcHM6IHNwbGl0TWFwcy5tYXAoKHNtLCBpKSA9PlxuICAgICAgaSA9PT0gbWFwSW5kZXhcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5zcGxpdE1hcHNbaV0sXG4gICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgLi4uc3BsaXRNYXBzW2ldLmxheWVycyxcbiAgICAgICAgICAgICAgLy8gaWYgbGF5ZXJJZCBub3QgaW4gbGF5ZXJzLCBzZXQgaXQgdG8gdmlzaWJsZVxuICAgICAgICAgICAgICBbbGF5ZXJJZF06ICFzcGxpdE1hcHNbaV0ubGF5ZXJzW2xheWVySWRdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA6IHNtXG4gICAgKVxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgbmV3IGRhdGFzZXQgdG8gYHZpc1N0YXRlYCwgd2l0aCBvcHRpb24gdG8gbG9hZCBhIG1hcCBjb25maWcgYWxvbmcgd2l0aCB0aGUgZGF0YXNldHNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgY29uc3QgdXBkYXRlVmlzRGF0YVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlVmlzRGF0YVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gZGF0YXNldHMgY2FuIGJlIGEgc2luZ2xlIGRhdGEgZW50cmllcyBvciBhbiBhcnJheSBvZiBtdWx0aXBsZSBkYXRhIGVudHJpZXNcbiAgY29uc3Qge2NvbmZpZywgb3B0aW9uc30gPSBhY3Rpb247XG5cbiAgLy8gYXBwbHkgY29uZmlnIGlmIHBhc3NlZCBmcm9tIGFjdGlvblxuICAvLyBUT0RPOiB3ZSBkb24ndCBoYW5kbGUgYXN5bmMgbWVyZ2VycyBoZXJlIHlldFxuICBsZXQgdXBkYXRlZFN0YXRlID0gY29uZmlnXG4gICAgPyByZWNlaXZlTWFwQ29uZmlnVXBkYXRlcihzdGF0ZSwge1xuICAgICAgICBwYXlsb2FkOiB7Y29uZmlnLCBvcHRpb25zfVxuICAgICAgfSlcbiAgICA6IHN0YXRlO1xuXG4gIGNvbnN0IGRhdGFzZXRzID0gdG9BcnJheShhY3Rpb24uZGF0YXNldHMpO1xuICBpZiAoIWRhdGFzZXRzLmxlbmd0aCkge1xuICAgIHJldHVybiB1cGRhdGVkU3RhdGU7XG4gIH1cblxuICBjb25zdCBjcmVhdGVEYXRhc2V0VGFza3M6IFRhc2tbXSA9IFtdO1xuICBjb25zdCBub3RpZmljYXRpb25UYXNrczogVGFza1tdID0gW107XG5cbiAgZGF0YXNldHMuZm9yRWFjaCgoe2luZm8gPSB7fSwgLi4ucmVzdH0sIGRhdGFzZXRJbmRleCkgPT4ge1xuICAgIGNvbnN0IHRhc2sgPSBjcmVhdGVOZXdEYXRhRW50cnkoe2luZm8sIC4uLnJlc3R9LCBzdGF0ZS5kYXRhc2V0cyk7XG4gICAgaWYgKHRhc2spIHtcbiAgICAgIGNyZWF0ZURhdGFzZXRUYXNrcy5wdXNoKHRhc2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBub3RpZmljYXRpb25UYXNrcy5wdXNoKFxuICAgICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBkYXRhc2V0IGR1ZSB0byBkYXRhIHZlcmlmaWNhdGlvbiBlcnJvcnNgLFxuICAgICAgICAgICAgICBpZDogYGRhdGFzZXQtZmFpbGVkLSR7ZGF0YXNldEluZGV4fWBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgZGF0YXNldHNBbGxTZXR0bGVkVGFzayA9IGNyZWF0ZURhdGFzZXRUYXNrcy5sZW5ndGhcbiAgICA/IFRhc2suYWxsU2V0dGxlZChjcmVhdGVEYXRhc2V0VGFza3MpLm1hcChyZXN1bHRzID0+XG4gICAgICAgIGNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzKHtyZXN1bHRzLCBhZGRUb01hcE9wdGlvbnM6IG9wdGlvbnN9KVxuICAgICAgKVxuICAgIDogbnVsbDtcblxuICBpZiAoZGF0YXNldHNBbGxTZXR0bGVkVGFzaykge1xuICAgIHVwZGF0ZWRTdGF0ZSA9IHNldExvYWRpbmdJbmRpY2F0b3JVcGRhdGVyKHVwZGF0ZWRTdGF0ZSwgcGF5bG9hZF8oe2NoYW5nZTogMSwgdHlwZTogJyd9KSk7XG4gIH1cblxuICByZXR1cm4gd2l0aFRhc2sodXBkYXRlZFN0YXRlLCBbXG4gICAgLi4uKGRhdGFzZXRzQWxsU2V0dGxlZFRhc2sgPyBbZGF0YXNldHNBbGxTZXR0bGVkVGFza10gOiBbXSksXG4gICAgLi4ubm90aWZpY2F0aW9uVGFza3NcbiAgXSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxDcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1BheWxvYWQ+XG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtyZXN1bHRzLCBhZGRUb01hcE9wdGlvbnN9ID0gYWN0aW9uLnBheWxvYWQ7XG4gIGNvbnN0IG5vdGlmaWNhdGlvblRhc2tzOiBUYXNrW10gPSBbXTtcblxuICBjb25zdCBuZXdEYXRhRW50cmllcyA9IHJlc3VsdHMucmVkdWNlKChhY2N1LCByZXN1bHQsIGlkeCkgPT4ge1xuICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSAnZnVsZmlsbGVkJykge1xuICAgICAgY29uc3QgZGF0YXNldCA9IHJlc3VsdC52YWx1ZTtcbiAgICAgIHJldHVybiB7Li4uYWNjdSwgW2RhdGFzZXQuaWRdOiBkYXRhc2V0fTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gc2hvdyBlcnJvciBub3RpZmljYXRpb24gb24gVUlcbiAgICAgIG5vdGlmaWNhdGlvblRhc2tzLnB1c2goXG4gICAgICAgIEFDVElPTl9UQVNLKCkubWFwKCgpID0+XG4gICAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgICBtZXNzYWdlOiBgRGF0YXNldCBlcnJvcjogRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBkYXRhc2V0OlxuICAgICAgICAgICAgICAke3Jlc3VsdC5yZWFzb24gfHwgKHJlc3VsdCBhcyBhbnkpLnZhbHVlfWAsXG4gICAgICAgICAgICAgIGlkOiBgZGF0YXNldC1jcmVhdGUtZmFpbGVkLSR7aWR4fWBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFjY3U7XG4gICAgfVxuICB9LCB7fSBhcyBEYXRhc2V0cyk7XG4gIC8vIHNhdmUgbmV3IGRhdGFzZXQgZW50cnkgdG8gc3RhdGVcbiAgY29uc3QgbWVyZ2VkU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IG1lcmdlRGF0YXNldHNCeU9yZGVyKHN0YXRlLCBuZXdEYXRhRW50cmllcylcbiAgfTtcblxuICAvLyBtZXJnZSBzdGF0ZSB3aXRoIGNvbmZpZyB0byBiZSBtZXJnZWRcbiAgY29uc3QgbGF5ZXJNZXJnZXJzID0gc3RhdGUubWVyZ2Vycy5maWx0ZXIobSA9PiBtLndhaXRGb3JMYXllckRhdGEpO1xuICBjb25zdCBkYXRhc2V0TWVyZ2VycyA9IHN0YXRlLm1lcmdlcnMuZmlsdGVyKG0gPT4gIWxheWVyTWVyZ2Vycy5pbmNsdWRlcyhtKSk7XG5cbiAgY29uc3QgbmV3RGF0YUlkcyA9IE9iamVjdC5rZXlzKG5ld0RhdGFFbnRyaWVzKTtcbiAgY29uc3QgcG9zdE1lcmdlclBheWxvYWQgPSB7XG4gICAgbmV3RGF0YUlkcyxcbiAgICBvcHRpb25zOiBhZGRUb01hcE9wdGlvbnMsXG4gICAgbGF5ZXJNZXJnZXJzXG4gIH07XG5cbiAgY29uc3QgdXBkYXRlZFN0YXRlID0gYXBwbHlNZXJnZXJzVXBkYXRlcihtZXJnZWRTdGF0ZSwge1xuICAgIG1lcmdlcnM6IGRhdGFzZXRNZXJnZXJzLFxuICAgIHBvc3RNZXJnZXJQYXlsb2FkXG4gIH0pO1xuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlcih1cGRhdGVkU3RhdGUsIHBheWxvYWRfKHtjaGFuZ2U6IC0xfSkpLFxuICAgIG5vdGlmaWNhdGlvblRhc2tzXG4gICk7XG59O1xuXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlNZXJnZXJzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IHtcbiAgICBtZXJnZXJzOiBNZXJnZXI8YW55PltdO1xuICAgIHBvc3RNZXJnZXJQYXlsb2FkOiBQb3N0TWVyZ2VyUGF5bG9hZDtcbiAgfVxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7bWVyZ2VycywgcG9zdE1lcmdlclBheWxvYWR9ID0gYWN0aW9uO1xuXG4gIC8vIG1lcmdlIHN0YXRlIHdpdGggY29uZmlnIHRvIGJlIG1lcmdlZFxuICBjb25zdCBtZXJnZVN0YXRlUmVzdWx0ID0gbWVyZ2VTdGF0ZUZyb21NZXJnZXJzKFxuICAgIHN0YXRlLFxuICAgIHtcbiAgICAgIC4uLklOSVRJQUxfVklTX1NUQVRFLFxuICAgICAgLi4uc3RhdGUuaW5pdGlhbFN0YXRlXG4gICAgfSxcbiAgICBtZXJnZXJzLFxuICAgIC8vIG5ld0RhdGFJZHMsXG4gICAgcG9zdE1lcmdlclBheWxvYWRcbiAgKTtcblxuICAvLyBpZiBhbGwgbWVyZ2VkLCBraWNrdXAgcG9zdCBtZXJnZSBwcm9jZXNzXG4gIC8vIGlmIG5vdCB3YWl0XG4gIHJldHVybiBtZXJnZVN0YXRlUmVzdWx0LmFsbE1lcmdlZFxuICAgID8gcG9zdE1lcmdlVXBkYXRlcihtZXJnZVN0YXRlUmVzdWx0Lm1lcmdlZFN0YXRlLCBwb3N0TWVyZ2VyUGF5bG9hZClcbiAgICA6IG1lcmdlU3RhdGVSZXN1bHQubWVyZ2VkU3RhdGU7XG59XG5cbi8qKlxuICogQWRkIG5ldyBkYXRhc2V0IHRvIGB2aXNTdGF0ZWAsIHdpdGggb3B0aW9uIHRvIGxvYWQgYSBtYXAgY29uZmlnIGFsb25nIHdpdGggdGhlIGRhdGFzZXRzXG4gKi9cbmZ1bmN0aW9uIHBvc3RNZXJnZVVwZGF0ZXIobWVyZ2VkU3RhdGU6IFZpc1N0YXRlLCBwb3N0TWVyZ2VyUGF5bG9hZDogUG9zdE1lcmdlclBheWxvYWQpOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtuZXdEYXRhSWRzLCBvcHRpb25zLCBsYXllck1lcmdlcnN9ID0gcG9zdE1lcmdlclBheWxvYWQ7XG4gIGNvbnN0IG5ld0ZpbHRlcnMgPSBtZXJnZWRTdGF0ZS5maWx0ZXJzLmZpbHRlcihmID0+XG4gICAgZi5kYXRhSWQuZmluZChmRGF0YUlkID0+IG5ld0RhdGFJZHMuaW5jbHVkZXMoZkRhdGFJZCkpXG4gICk7XG4gIGNvbnN0IGRhdGFzZXRGaWx0ZXJlZDogc3RyaW5nW10gPSB1bmlxKFxuICAgIG5ld0ZpbHRlcnMucmVkdWNlKChhY2N1LCBmKSA9PiBbLi4uYWNjdSwgLi4uZi5kYXRhSWRdLCBbXSBhcyBzdHJpbmdbXSlcbiAgKTtcbiAgY29uc3QgZGF0YUVtcHR5ID0gbmV3RGF0YUlkcy5sZW5ndGggPCAxO1xuXG4gIGxldCBuZXdMYXllcnMgPSAhZGF0YUVtcHR5XG4gICAgPyBtZXJnZWRTdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuZGF0YUlkICYmIG5ld0RhdGFJZHMuaW5jbHVkZXMobC5jb25maWcuZGF0YUlkKSlcbiAgICA6IFtdO1xuXG4gIGNvbnN0IG5ld0RhdGFFbnRyaWVzID0gbmV3RGF0YUlkcy5yZWR1Y2UoXG4gICAgKGFjY3UsIGlkKSA9PiAoe1xuICAgICAgLi4uYWNjdSxcbiAgICAgIFtpZF06IG1lcmdlZFN0YXRlLmRhdGFzZXRzW2lkXVxuICAgIH0pLFxuICAgIHt9XG4gICk7XG5cbiAgaWYgKCFuZXdMYXllcnMubGVuZ3RoICYmIChvcHRpb25zIHx8IHt9KS5hdXRvQ3JlYXRlTGF5ZXJzICE9PSBmYWxzZSkge1xuICAgIC8vIG5vIGxheWVyIG1lcmdlZCwgZmluZCBkZWZhdWx0c1xuICAgIGNvbnN0IHJlc3VsdCA9IGFkZERlZmF1bHRMYXllcnMobWVyZ2VkU3RhdGUsIG5ld0RhdGFFbnRyaWVzKTtcbiAgICBtZXJnZWRTdGF0ZSA9IHJlc3VsdC5zdGF0ZTtcbiAgICBuZXdMYXllcnMgPSByZXN1bHQubmV3TGF5ZXJzO1xuICB9XG5cbiAgaWYgKG1lcmdlZFN0YXRlLnNwbGl0TWFwcy5sZW5ndGgpIHtcbiAgICAvLyBpZiBtYXAgaXMgc3BsaXQsIGFkZCBuZXcgbGF5ZXJzIHRvIHNwbGl0TWFwc1xuICAgIG5ld0xheWVycyA9IG1lcmdlZFN0YXRlLmxheWVycy5maWx0ZXIoXG4gICAgICBsID0+IGwuY29uZmlnLmRhdGFJZCAmJiBuZXdEYXRhSWRzLmluY2x1ZGVzKGwuY29uZmlnLmRhdGFJZClcbiAgICApO1xuICAgIG1lcmdlZFN0YXRlID0ge1xuICAgICAgLi4ubWVyZ2VkU3RhdGUsXG4gICAgICBzcGxpdE1hcHM6IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAobWVyZ2VkU3RhdGUuc3BsaXRNYXBzLCBuZXdMYXllcnMpXG4gICAgfTtcbiAgfVxuXG4gIC8vIGlmIG5vIHRvb2x0aXBzIG1lcmdlZCBhZGQgZGVmYXVsdCB0b29sdGlwc1xuICBuZXdEYXRhSWRzLmZvckVhY2goZGF0YUlkID0+IHtcbiAgICBjb25zdCB0b29sdGlwRmllbGRzID0gbWVyZ2VkU3RhdGUuaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF07XG4gICAgLy8gbG9hZGluZyBkYXRhc2V0OiBhdXRvQ3JlYXRlVG9vbHRpcHMgaXMgZmFsc2UgYW5kIHdlIGRvbid0IHdhbnQgdG8gcnVuIGFkZERlZmF1bHRUb29sdGlwcyB3aGVuIHRvb2x0aXBGaWVsZHMgaXMgZW1wdHlcbiAgICBpZiAoXG4gICAgICBvcHRpb25zPy5hdXRvQ3JlYXRlVG9vbHRpcHMgIT09IGZhbHNlICYmXG4gICAgICAoIUFycmF5LmlzQXJyYXkodG9vbHRpcEZpZWxkcykgfHwgIXRvb2x0aXBGaWVsZHMubGVuZ3RoKVxuICAgICkge1xuICAgICAgLy8gYWRkaW5nIGRhdGFzZXQ6IGF1dG9DcmVhdGVUb29sdGlwcyBpcyB0cnVlXG4gICAgICBtZXJnZWRTdGF0ZSA9IGFkZERlZmF1bHRUb29sdGlwcyhtZXJnZWRTdGF0ZSwgbmV3RGF0YUVudHJpZXNbZGF0YUlkXSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCB1cGRhdGVkRGF0YXNldHMgPSBkYXRhRW1wdHlcbiAgICA/IE9iamVjdC5rZXlzKG1lcmdlZFN0YXRlLmRhdGFzZXRzKVxuICAgIDogdW5pcShPYmplY3Qua2V5cyhuZXdEYXRhRW50cmllcykuY29uY2F0KGRhdGFzZXRGaWx0ZXJlZCkpO1xuXG4gIGxldCB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobWVyZ2VkU3RhdGUsIHVwZGF0ZWREYXRhc2V0cywgdW5kZWZpbmVkKTtcblxuICAvLyByZWdpc3RlciBsYXllciBhbmltYXRpb24gZG9tYWluLFxuICAvLyBuZWVkIHRvIGJlIGNhbGxlZCBhZnRlciBsYXllciBkYXRhIGlzIGNhbGN1bGF0ZWRcbiAgdXBkYXRlZFN0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKHVwZGF0ZWRTdGF0ZSk7XG5cbiAgLy8gdHJ5IHRvIHByb2Nlc3MgbGF5ZXJNZXJnZXJzIGFmdGVyIGRhdGFzZXQrZGF0YXNldE1lcmdlcnNcbiAgdXBkYXRlZFN0YXRlID1cbiAgICBsYXllck1lcmdlcnMgJiYgbGF5ZXJNZXJnZXJzLmxlbmd0aCA+IDBcbiAgICAgID8gYXBwbHlNZXJnZXJzVXBkYXRlcih1cGRhdGVkU3RhdGUsIHtcbiAgICAgICAgICBtZXJnZXJzOiBsYXllck1lcmdlcnMsXG4gICAgICAgICAgcG9zdE1lcmdlclBheWxvYWQ6IHsuLi5wb3N0TWVyZ2VyUGF5bG9hZCwgbGF5ZXJNZXJnZXJzOiBbXX1cbiAgICAgICAgfSlcbiAgICAgIDogdXBkYXRlZFN0YXRlO1xuXG4gIC8vIGNlbnRlciB0aGUgbWFwIG9uY2UgdGhlIGRhdGFzZXQgaXMgY3JlYXRlZFxuICBpZiAobmV3TGF5ZXJzLmxlbmd0aCAmJiAob3B0aW9ucyB8fCB7fSkuY2VudGVyTWFwKSB7XG4gICAgY29uc3QgYm91bmRzID0gZmluZE1hcEJvdW5kcyhuZXdMYXllcnMpO1xuICAgIGlmIChib3VuZHMpIHtcbiAgICAgIGNvbnN0IGZpdEJvdW5kc1Rhc2sgPSBBQ1RJT05fVEFTS19GSVRfQk9VTkRTKCkubWFwKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIGZpdE1hcEJvdW5kcyhib3VuZHMpO1xuICAgICAgfSk7XG4gICAgICB1cGRhdGVkU3RhdGUgPSB3aXRoVGFzayh1cGRhdGVkU3RhdGUsIGZpdEJvdW5kc1Rhc2spO1xuICAgIH1cbiAgfVxuXG4gIC8vIG5lZWQgdG8gY2VudGVyIG1hcCBoZXJlIGlmIHdlIGhhdmUgbmV3IGxheWVyc1xuICByZXR1cm4gdXBkYXRlZFN0YXRlO1xufVxuXG4vKipcbiAqIFJlbmFtZSBhbiBleGlzdGluZyBkYXRhc2V0IGluIGB2aXNTdGF0ZWBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5hbWVEYXRhc2V0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW5hbWVEYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4gdXBkYXRlRGF0YXNldFByb3BzVXBkYXRlcihzdGF0ZSwge2RhdGFJZDogYWN0aW9uLmRhdGFJZCwgcHJvcHM6IHtsYWJlbDogYWN0aW9uLmxhYmVsfX0pO1xufVxuXG5jb25zdCBBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTID0gWydsYWJlbCcsICdjb2xvcicsICdtZXRhZGF0YSddO1xuXG4vKipcbiAqIFZhbGlkYXRlcyBwcm9wZXJ0aWVzIGJlZm9yZSB1cGRhdGluZyB0aGUgZGF0YXNldC5cbiAqIE1ha2VzIHN1cmUgZWFjaCBwcm9wZXJ0eSBpcyBpbiB0aGUgYWxsb3dlZCBsaXN0XG4gKiBNYWtlcyBzdXJlIGNvbG9yIHZhbHVlIGlzIFJHQlxuICogUGVyZm9ybXMgZGVlcCBtZXJnZSB3aGVuIHVwZGF0aW5nIG1ldGFkYXRhXG4gKi9cbmNvbnN0IHZhbGlkYXRlRGF0YXNldFVwZGF0ZVByb3BzID0gKHByb3BzLCBkYXRhc2V0KSA9PiB7XG4gIGNvbnN0IHZhbGlkYXRlZFByb3BzID0gT2JqZWN0LmVudHJpZXMocHJvcHMpLnJlZHVjZSgoYWNjLCBlbnRyeSkgPT4ge1xuICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGVudHJ5O1xuICAgIC8vIGlzIGl0IGFsbG93ZWQgP1xuICAgIGlmICghQUxMT1dFRF9VUERBVEVfREFUQVNFVF9QUk9QUy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cblxuICAgIC8vIGlmIHdlIGFyZSBhZGRpbmcgYSBjb2xvciBidXQgaXQgaXMgbm90IFJHQiB3ZSBkb24ndCBhY2NlcHQgdGhlIHZhbHVlXG4gICAgLy8gaW4gdGhlIGZ1dHVyZSBhcyB3ZSBhZGQgbW9yZSBwcm9wcyB3ZSBzaG91bGQgY2hhbmdlIHRoaXMgaWYgaW50byBhIHN3aXRjaFxuICAgIGlmIChrZXkgPT09ICdjb2xvcicgJiYgIWlzUmdiQ29sb3IodmFsdWUpKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cblxuICAgIC8vIGRvIHdlIG5lZWQgZGVlcCBtZXJnZSA/XG4gICAgcmV0dXJuIHsuLi5hY2MsIFtrZXldOiBpc1BsYWluT2JqZWN0KHZhbHVlKSA/IGRlZXBtZXJnZShkYXRhc2V0W2tleV0gfHwge30sIHZhbHVlKSA6IHZhbHVlfTtcbiAgfSwge30pO1xuXG4gIHJldHVybiB2YWxpZGF0ZWRQcm9wcztcbn07XG5cbi8qKlxuICogVXBkYXRlIERhdGFzZXQgcHJvcHMgKGxhYmVsLCBjb2xvciwgbWV0YSkuIERvIG5vdCB1c2UgdG8gdXBkYXRlIGRhdGEgb3IgYW55IHJlbGF0ZWQgcHJvcGVydGllc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRGF0YXNldFByb3BzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZGF0YUlkLCBwcm9wc30gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhc2V0c30gPSBzdGF0ZTtcbiAgY29uc3QgZXhpc3RpbmcgPSBkYXRhc2V0c1tkYXRhSWRdO1xuXG4gIGlmIChleGlzdGluZykge1xuICAgIGNvbnN0IHZhbGlkYXRlZFByb3BzID0gdmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMocHJvcHMsIGV4aXN0aW5nKTtcbiAgICAvLyAgdmFsaWRhdGUgcHJvcHM6IGp1c3QgY29sb3IgZm9yIG5vd1xuICAgIC8vICB3ZSBvbmx5IGFsbG93IGxhYmVsLCBjb2xvciBhbmQgbWV0YSB0byBiZSB1cGRhdGVkXG4gICAgLy8gY29uc3QgbmV3VGFibGUgPSBjb3B5VGFibGVBbmRVcGRhdGUoZXhpc3RpbmcsIHZhbGlkYXRlZFByb3BzKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkYXRhc2V0czoge1xuICAgICAgICAuLi5kYXRhc2V0cyxcbiAgICAgICAgW2RhdGFJZF06IGNvcHlUYWJsZUFuZFVwZGF0ZShleGlzdGluZywgdmFsaWRhdGVkUHJvcHMpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBXaGVuIGEgdXNlciBjbGlja3Mgb24gdGhlIHNwZWNpZmljIG1hcCBjbG9zaW5nIGljb25cbiAqIHRoZSBhcHBsaWNhdGlvbiB3aWxsIGNsb3NlIHRoZSBzZWxlY3RlZCBtYXBcbiAqIGFuZCB3aWxsIG1lcmdlIHRoZSByZW1haW5pbmcgb25lIHdpdGggdGhlIGdsb2JhbCBzdGF0ZVxuICogVE9ETzogaSB0aGluayBpbiB0aGUgZnV0dXJlIHRoaXMgYWN0aW9uIHNob3VsZCBiZSBjYWxsZWQgbWVyZ2UgbWFwIGxheWVycyB3aXRoIGdsb2JhbCBzZXR0aW5nc1xuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlIGB2aXNTdGF0ZWBcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb24gYWN0aW9uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb3NlU3BlY2lmaWNNYXBBdEluZGV4PFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5Ub2dnbGVTcGxpdE1hcFVwZGF0ZXJBY3Rpb25cbik6IFMge1xuICAvLyByZXRyaWV2ZSBsYXllcnMgbWV0YSBkYXRhIGZyb20gdGhlIHJlbWFpbmluZyBtYXAgdGhhdCB3ZSBuZWVkIHRvIGtlZXBcbiAgY29uc3QgaW5kZXhUb1JldHJpZXZlID0gMSAtIGFjdGlvbi5wYXlsb2FkO1xuICBjb25zdCBtYXBMYXllcnMgPSBzdGF0ZS5zcGxpdE1hcHNbaW5kZXhUb1JldHJpZXZlXT8ubGF5ZXJzO1xuICBjb25zdCB7bGF5ZXJzfSA9IHN0YXRlO1xuXG4gIC8vIHVwZGF0ZSBsYXllciB2aXNpYmlsaXR5XG4gIGNvbnN0IG5ld0xheWVycyA9IGxheWVycy5tYXAobGF5ZXIgPT5cbiAgICBtYXBMYXllcnMgJiYgIW1hcExheWVyc1tsYXllci5pZF0gJiYgbGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgICAgPyBsYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgICAgLy8gaWYgbGF5ZXIuaWQgaXMgbm90IGluIG1hcExheWVycywgaXQgc2hvdWxkIGJlIGluVmlzaWJsZVxuICAgICAgICAgIGlzVmlzaWJsZTogZmFsc2VcbiAgICAgICAgfSlcbiAgICAgIDogbGF5ZXJcbiAgKTtcblxuICAvLyBkZWxldGUgbWFwXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgc3BsaXRNYXBzOiBbXVxuICB9O1xufVxuXG4vKipcbiAqIFRyaWdnZXIgZmlsZSBsb2FkaW5nIGRpc3BhdGNoIGBhZGREYXRhVG9NYXBgIGlmIHN1Y2NlZWQsIG9yIGBsb2FkRmlsZXNFcnJgIGlmIGZhaWxlZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7ZmlsZXMsIG9uRmluaXNoID0gbG9hZEZpbGVzU3VjY2Vzc30gPSBhY3Rpb247XG4gIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmlsZUxvYWRpbmdQcm9ncmVzcyA9IEFycmF5LmZyb20oZmlsZXMpLnJlZHVjZShcbiAgICAoYWNjdSwgZiwgaSkgPT4gbWVyZ2VfKGluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzKGYsIGkpKShhY2N1KSxcbiAgICB7fVxuICApO1xuXG4gIGNvbnN0IGZpbGVMb2FkaW5nID0ge1xuICAgIGZpbGVDYWNoZTogW10sXG4gICAgZmlsZXNUb0xvYWQ6IGZpbGVzLFxuICAgIG9uRmluaXNoXG4gIH07XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gbWVyZ2VfKHtmaWxlTG9hZGluZ1Byb2dyZXNzLCBmaWxlTG9hZGluZ30pKHN0YXRlKTtcblxuICByZXR1cm4gbG9hZE5leHRGaWxlVXBkYXRlcihuZXh0U3RhdGUpO1xufTtcblxuLyoqXG4gKiBTdWNlc3NmdWxseSBsb2FkZWQgb25lIGZpbGUsIG1vdmUgb24gdG8gdGhlIG5leHQgb25lXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEZpbGVTdGVwU3VjY2Vzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVTdGVwU3VjY2Vzc0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIXN0YXRlLmZpbGVMb2FkaW5nKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHtmaWxlTmFtZSwgZmlsZUNhY2hlfSA9IGFjdGlvbjtcbiAgY29uc3Qge2ZpbGVzVG9Mb2FkLCBvbkZpbmlzaH0gPSBzdGF0ZS5maWxlTG9hZGluZztcbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMSwgbWVzc2FnZTogJ0RvbmUnfVxuICB9KTtcblxuICAvLyBzYXZlIHByb2Nlc3NlZCBmaWxlIHRvIGZpbGVDYWNoZVxuICBjb25zdCBzdGF0ZVdpdGhDYWNoZSA9IHBpY2tfKCdmaWxlTG9hZGluZycpKG1lcmdlXyh7ZmlsZUNhY2hlfSkpKHN0YXRlV2l0aFByb2dyZXNzKTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGVXaXRoQ2FjaGUsXG4gICAgREVMQVlfVEFTSygyMDApLm1hcChmaWxlc1RvTG9hZC5sZW5ndGggPyBsb2FkTmV4dEZpbGUgOiAoKSA9PiBvbkZpbmlzaChmaWxlQ2FjaGUpKVxuICApO1xufVxuXG4vLyB3aXRoVGFzazxUPihzdGF0ZTogVCwgdGFzazogYW55KTogVFxuXG4vKipcbiAqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZE5leHRGaWxlVXBkYXRlcihzdGF0ZTogVmlzU3RhdGUpOiBWaXNTdGF0ZSB7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge2ZpbGVzVG9Mb2FkfSA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuICBjb25zdCBbZmlsZSwgLi4ucmVtYWluaW5nRmlsZXNUb0xvYWRdID0gZmlsZXNUb0xvYWQ7XG5cbiAgLy8gc2F2ZSBmaWxlc1RvTG9hZCB0byBzdGF0ZVxuICBjb25zdCBuZXh0U3RhdGUgPSBwaWNrXygnZmlsZUxvYWRpbmcnKShtZXJnZV8oe2ZpbGVzVG9Mb2FkOiByZW1haW5pbmdGaWxlc1RvTG9hZH0pKShzdGF0ZSk7XG5cbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihuZXh0U3RhdGUsIHtcbiAgICBmaWxlTmFtZTogZmlsZS5uYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMCwgbWVzc2FnZTogJ2xvYWRpbmcuLi4nfVxuICB9KTtcblxuICBjb25zdCB7bG9hZGVycywgbG9hZE9wdGlvbnN9ID0gc3RhdGU7XG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzdGF0ZVdpdGhQcm9ncmVzcyxcbiAgICBtYWtlTG9hZEZpbGVUYXNrKFxuICAgICAgZmlsZSxcbiAgICAgIG5leHRTdGF0ZS5maWxlTG9hZGluZyAmJiBuZXh0U3RhdGUuZmlsZUxvYWRpbmcuZmlsZUNhY2hlLFxuICAgICAgbG9hZGVycyxcbiAgICAgIGxvYWRPcHRpb25zXG4gICAgKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZUxvYWRGaWxlVGFzayhmaWxlLCBmaWxlQ2FjaGUsIGxvYWRlcnM6IExvYWRlcltdID0gW10sIGxvYWRPcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIExPQURfRklMRV9UQVNLKHtmaWxlLCBmaWxlQ2FjaGUsIGxvYWRlcnMsIGxvYWRPcHRpb25zfSkuYmltYXAoXG4gICAgLy8gcHJldHRpZXIgaWdub3JlXG4gICAgLy8gc3VjY2Vzc1xuICAgIGdlbiA9PlxuICAgICAgbmV4dEZpbGVCYXRjaCh7XG4gICAgICAgIGdlbixcbiAgICAgICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgb25GaW5pc2g6IHJlc3VsdCA9PlxuICAgICAgICAgIHByb2Nlc3NGaWxlQ29udGVudCh7XG4gICAgICAgICAgICBjb250ZW50OiByZXN1bHQsXG4gICAgICAgICAgICBmaWxlQ2FjaGVcbiAgICAgICAgICB9KVxuICAgICAgfSksXG5cbiAgICAvLyBlcnJvclxuICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoZmlsZS5uYW1lLCBlcnIpXG4gICk7XG59XG5cbi8qKlxuICpcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlByb2Nlc3NGaWxlQ29udGVudFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2NvbnRlbnQsIGZpbGVDYWNoZX0gPSBhY3Rpb24ucGF5bG9hZDtcblxuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWU6IGNvbnRlbnQuZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtwZXJjZW50OiAxLCBtZXNzYWdlOiAncHJvY2Vzc2luZy4uLid9XG4gIH0pO1xuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzdGF0ZVdpdGhQcm9ncmVzcyxcbiAgICBQUk9DRVNTX0ZJTEVfREFUQSh7Y29udGVudCwgZmlsZUNhY2hlfSkuYmltYXAoXG4gICAgICByZXN1bHQgPT4gbG9hZEZpbGVTdGVwU3VjY2Vzcyh7ZmlsZU5hbWU6IGNvbnRlbnQuZmlsZU5hbWUsIGZpbGVDYWNoZTogcmVzdWx0fSksXG4gICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGNvbnRlbnQuZmlsZU5hbWUsIGVycilcbiAgICApXG4gICk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVByb2dyZXNzKHByZXZQcm9ncmVzcyA9IHt9LCBwcm9ncmVzcykge1xuICAvLyBUaGlzIGhhcHBlbnMgd2hlbiByZWNlaXZpbmcgcXVlcnkgbWV0YWRhdGEgb3Igb3RoZXIgY2FzZXMgd2UgZG9uJ3RcbiAgLy8gaGF2ZSBhbiB1cGRhdGUgZm9yIHRoZSB1c2VyLlxuICBpZiAoIXByb2dyZXNzIHx8ICFwcm9ncmVzcy5wZXJjZW50KSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwZXJjZW50OiBwcm9ncmVzcy5wZXJjZW50XG4gIH07XG59XG5cbi8qKlxuICogZ2V0cyBjYWxsZWQgd2l0aCBwYXlsb2FkID0gQXN5bmNHZW5lcmF0b3I8Pz8/PlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG5leHRGaWxlQmF0Y2hVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtcbiAgICBwYXlsb2FkOiB7Z2VuLCBmaWxlTmFtZSwgcHJvZ3Jlc3MsIGFjY3VtdWxhdGVkLCBvbkZpbmlzaH1cbiAgfTogVmlzU3RhdGVBY3Rpb25zLk5leHRGaWxlQmF0Y2hVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZSxcbiAgICBwcm9ncmVzczogcGFyc2VQcm9ncmVzcyhzdGF0ZS5maWxlTG9hZGluZ1Byb2dyZXNzW2ZpbGVOYW1lXSwgcHJvZ3Jlc3MpXG4gIH0pO1xuXG4gIHJldHVybiB3aXRoVGFzayhzdGF0ZVdpdGhQcm9ncmVzcywgW1xuICAgIC4uLihnZXRBcHBsaWNhdGlvbkNvbmZpZygpLnVzZUFycm93UHJvZ3Jlc3NpdmVMb2FkaW5nICYmXG4gICAgZmlsZU5hbWUuZW5kc1dpdGgoJ2Fycm93JykgJiZcbiAgICBhY2N1bXVsYXRlZD8uZGF0YT8ubGVuZ3RoID4gMFxuICAgICAgPyBbXG4gICAgICAgICAgUFJPQ0VTU19GSUxFX0RBVEEoe2NvbnRlbnQ6IGFjY3VtdWxhdGVkLCBmaWxlQ2FjaGU6IFtdfSkuYmltYXAoXG4gICAgICAgICAgICByZXN1bHQgPT4gbG9hZEZpbGVzU3VjY2VzcyhyZXN1bHQpLFxuICAgICAgICAgICAgZXJyID0+IGxvYWRGaWxlc0VycihmaWxlTmFtZSwgZXJyKVxuICAgICAgICAgIClcbiAgICAgICAgXVxuICAgICAgOiBbXSksXG4gICAgVU5XUkFQX1RBU0soZ2VuLm5leHQoKSkuYmltYXAoXG4gICAgICAoe3ZhbHVlLCBkb25lfSkgPT4ge1xuICAgICAgICByZXR1cm4gZG9uZVxuICAgICAgICAgID8gb25GaW5pc2goYWNjdW11bGF0ZWQpXG4gICAgICAgICAgOiBuZXh0RmlsZUJhdGNoKHtcbiAgICAgICAgICAgICAgZ2VuLFxuICAgICAgICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgICAgICAgcHJvZ3Jlc3M6IHZhbHVlLnByb2dyZXNzLFxuICAgICAgICAgICAgICBhY2N1bXVsYXRlZDogdmFsdWUsXG4gICAgICAgICAgICAgIG9uRmluaXNoXG4gICAgICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGVOYW1lLCBlcnIpXG4gICAgKVxuICBdKTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBsb2FkaW5nIGZpbGUgZXJyb3JcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsb2FkRmlsZXNFcnJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtlcnJvciwgZmlsZU5hbWV9OiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVzRXJyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyB1cGRhdGUgdWkgd2l0aCBlcnJvciBtZXNzYWdlXG4gIENvbnNvbGUud2FybihlcnJvcik7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge2ZpbGVzVG9Mb2FkLCBvbkZpbmlzaCwgZmlsZUNhY2hlfSA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtlcnJvcn1cbiAgfSk7XG5cbiAgLy8ga2ljayBvZmYgbmV4dCBmaWxlIG9yIGZpbmlzaFxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgbmV4dFN0YXRlLFxuICAgIERFTEFZX1RBU0soMjAwKS5tYXAoZmlsZXNUb0xvYWQubGVuZ3RoID8gbG9hZE5leHRGaWxlIDogKCkgPT4gb25GaW5pc2goZmlsZUNhY2hlKSlcbiAgKTtcbn07XG5cbi8qKlxuICogV2hlbiBzZWxlY3QgZGF0YXNldCBmb3IgZXhwb3J0LCBhcHBseSBjcHUgZmlsdGVyIHRvIHNlbGVjdGVkIGRhdGFzZXRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhcHBseUNQVUZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZH06IFZpc1N0YXRlQWN0aW9ucy5BcHBseUNQVUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gYXBwbHkgY3B1RmlsdGVyXG4gIGNvbnN0IGRhdGFJZHMgPSB0b0FycmF5KGRhdGFJZCk7XG5cbiAgcmV0dXJuIGRhdGFJZHMucmVkdWNlKChhY2N1LCBpZCkgPT4gZmlsdGVyRGF0YXNldENQVShhY2N1LCBpZCksIHN0YXRlKTtcbn07XG5cbi8qKlxuICogVXNlciBpbnB1dCB0byB1cGRhdGUgdGhlIGluZm8gb2YgdGhlIG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldE1hcEluZm9VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldE1hcEluZm9VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbWFwSW5mbzoge1xuICAgIC4uLnN0YXRlLm1hcEluZm8sXG4gICAgLi4uYWN0aW9uLmluZm9cbiAgfVxufSk7XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byB1cGRhdGUgQWxsIGxheWVyIGRvbWFpbiBhbmQgbGF5ZXIgZGF0YSBvZiBzdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRGVmYXVsdExheWVycyhcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBkYXRhc2V0czogRGF0YXNldHNcbik6IHtzdGF0ZTogVmlzU3RhdGU7IG5ld0xheWVyczogTGF5ZXJbXX0ge1xuICBjb25zdCBlbXB0eTogTGF5ZXJbXSA9IFtdO1xuICBjb25zdCBkZWZhdWx0TGF5ZXJzID0gT2JqZWN0LnZhbHVlcyhkYXRhc2V0cykucmVkdWNlKChhY2N1OiBMYXllcltdLCBkYXRhc2V0KSA9PiB7XG4gICAgY29uc3QgZm91bmRMYXllcnMgPSBmaW5kRGVmYXVsdExheWVyKGRhdGFzZXQsIHN0YXRlLmxheWVyQ2xhc3Nlcyk7XG4gICAgcmV0dXJuIGZvdW5kTGF5ZXJzICYmIGZvdW5kTGF5ZXJzLmxlbmd0aCA/IGFjY3UuY29uY2F0KGZvdW5kTGF5ZXJzKSA6IGFjY3U7XG4gIH0sIGVtcHR5KTtcblxuICByZXR1cm4ge1xuICAgIHN0YXRlOiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxheWVyczogWy4uLnN0YXRlLmxheWVycywgLi4uZGVmYXVsdExheWVyc10sXG4gICAgICBsYXllck9yZGVyOiBbXG4gICAgICAgIC8vIHB1dCBuZXcgbGF5ZXJzIG9uIHRvcCBvZiBvbGQgb25lcyBpbiByZXZlcnNlXG4gICAgICAgIC4uLmdldExheWVyT3JkZXJGcm9tTGF5ZXJzKGRlZmF1bHRMYXllcnMpLFxuICAgICAgICAuLi5zdGF0ZS5sYXllck9yZGVyXG4gICAgICBdXG4gICAgfSxcbiAgICBuZXdMYXllcnM6IGRlZmF1bHRMYXllcnNcbiAgfTtcbn1cblxuLyoqXG4gKiBoZWxwZXIgZnVuY3Rpb24gdG8gZmluZCBkZWZhdWx0IHRvb2x0aXBzXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhc2V0XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZERlZmF1bHRUb29sdGlwcyhzdGF0ZSwgZGF0YXNldCkge1xuICBjb25zdCB0b29sdGlwRmllbGRzID0gZmluZEZpZWxkc1RvU2hvdyh7XG4gICAgLi4uZGF0YXNldCxcbiAgICBtYXhEZWZhdWx0VG9vbHRpcHM6IHN0YXRlLm1heERlZmF1bHRUb29sdGlwc1xuICB9KTtcbiAgY29uc3QgbWVyZ2VkID0ge1xuICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuY29uZmlnLmZpZWxkc1RvU2hvdyxcbiAgICAuLi50b29sdGlwRmllbGRzXG4gIH07XG5cbiAgcmV0dXJuIHNldChbJ2ludGVyYWN0aW9uQ29uZmlnJywgJ3Rvb2x0aXAnLCAnY29uZmlnJywgJ2ZpZWxkc1RvU2hvdyddLCBtZXJnZWQsIHN0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzKGZpbGUsIGluZGV4KSB7XG4gIGNvbnN0IGZpbGVOYW1lID0gZmlsZS5uYW1lIHx8IGBVbnRpdGxlZCBGaWxlICR7aW5kZXh9YDtcbiAgcmV0dXJuIHtcbiAgICBbZmlsZU5hbWVdOiB7XG4gICAgICAvLyBwZXJjZW50IG9mIGN1cnJlbnQgZmlsZVxuICAgICAgcGVyY2VudDogMCxcbiAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgZmlsZU5hbWUsXG4gICAgICBlcnJvcjogbnVsbFxuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7ZmlsZU5hbWUsIHByb2dyZXNzfSkge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gIHJldHVybiBwaWNrXygnZmlsZUxvYWRpbmdQcm9ncmVzcycpKHBpY2tfKGZpbGVOYW1lKShtZXJnZV8ocHJvZ3Jlc3MpKSkoc3RhdGUpO1xufVxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gdXBkYXRlIGxheWVyIGRvbWFpbnMgZm9yIGFuIGFycmF5IG9mIGRhdGFzZXRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGE8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGRhdGFJZDogc3RyaW5nIHwgc3RyaW5nW10sXG4gIHVwZGF0ZWRGaWx0ZXI/OiBGaWx0ZXJcbik6IFMge1xuICBjb25zdCBkYXRhSWRzID0gdHlwZW9mIGRhdGFJZCA9PT0gJ3N0cmluZycgPyBbZGF0YUlkXSA6IGRhdGFJZDtcbiAgY29uc3QgbmV3TGF5ZXJzOiBMYXllcltdID0gW107XG4gIGNvbnN0IG5ld0xheWVyRGF0YTogYW55W10gPSBbXTtcblxuICBzdGF0ZS5sYXllcnMuZm9yRWFjaCgob2xkTGF5ZXIsIGkpID0+IHtcbiAgICBpZiAob2xkTGF5ZXIuY29uZmlnLmRhdGFJZCAmJiBkYXRhSWRzLmluY2x1ZGVzKG9sZExheWVyLmNvbmZpZy5kYXRhSWQpKSB7XG4gICAgICAvLyBObyBuZWVkIHRvIHJlY2FsY3VsYXRlIGxheWVyIGRvbWFpbiBpZiBmaWx0ZXIgaGFzIGZpeGVkIGRvbWFpblxuICAgICAgY29uc3QgbmV3TGF5ZXIgPVxuICAgICAgICB1cGRhdGVkRmlsdGVyICYmIHVwZGF0ZWRGaWx0ZXIuZml4ZWREb21haW5cbiAgICAgICAgICA/IG9sZExheWVyXG4gICAgICAgICAgOiBvbGRMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cywgdXBkYXRlZEZpbHRlcik7XG5cbiAgICAgIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIHN0YXRlLmxheWVyRGF0YVtpXSk7XG5cbiAgICAgIG5ld0xheWVycy5wdXNoKGxheWVyKTtcbiAgICAgIG5ld0xheWVyRGF0YS5wdXNoKGxheWVyRGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVycy5wdXNoKG9sZExheWVyKTtcbiAgICAgIG5ld0xheWVyRGF0YS5wdXNoKHN0YXRlLmxheWVyRGF0YVtpXSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IG5ld0xheWVycyxcbiAgICBsYXllckRhdGE6IG5ld0xheWVyRGF0YVxuICB9O1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTKTogUyB7XG4gIC8vIG1lcmdlIGFsbCBhbmltYXRhYmxlIGxheWVyIGRvbWFpbiBhbmQgdXBkYXRlIGdsb2JhbCBjb25maWdcbiAgY29uc3QgYW5pbWF0YWJsZUxheWVycyA9IGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKHN0YXRlLmxheWVycyk7XG5cbiAgaWYgKCFhbmltYXRhYmxlTGF5ZXJzLmxlbmd0aCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICAgIGRvbWFpbjogbnVsbCxcbiAgICAgICAgaXNBbmltYXRpbmc6IGZhbHNlLFxuICAgICAgICB0aW1lU3RlcHM6IG51bGwsXG4gICAgICAgIGRlZmF1bHRUaW1lRm9ybWF0OiBudWxsXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGxheWVyRG9tYWlucyA9IGFuaW1hdGFibGVMYXllcnMubWFwKGwgPT4gbC5jb25maWcuYW5pbWF0aW9uLmRvbWFpbiB8fCBbXSk7XG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgbWVyZ2VkRG9tYWluID0gbWVyZ2VUaW1lRG9tYWlucyhsYXllckRvbWFpbnMpO1xuICBjb25zdCBkZWZhdWx0VGltZUZvcm1hdCA9IGdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlcihtZXJnZWREb21haW4pO1xuXG4gIC8vIG1lcmdlIHRpbWVTdGVwc1xuICBsZXQgbWVyZ2VkVGltZVN0ZXBzOiBudW1iZXJbXSB8IG51bGwgPSB1bmlxPG51bWJlcj4oXG4gICAgYW5pbWF0YWJsZUxheWVycy5yZWR1Y2UoKGFjY3UsIGxheWVyKSA9PiB7XG4gICAgICBhY2N1LnB1c2goLi4uKGxheWVyLmNvbmZpZy5hbmltYXRpb24udGltZVN0ZXBzIHx8IFtdKSk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9LCBbXSlcbiAgKS5zb3J0KCk7XG5cbiAgbWVyZ2VkVGltZVN0ZXBzID0gbWVyZ2VkVGltZVN0ZXBzLmxlbmd0aCA/IG1lcmdlZFRpbWVTdGVwcyA6IG51bGw7XG5cbiAgLy8gVE9ETzogYmV0dGVyIGhhbmRsaW5nIG9mIGR1cmF0aW9uIGNhbGN1bGF0aW9uXG4gIGNvbnN0IGR1cmF0aW9uID0gbWVyZ2VkVGltZVN0ZXBzXG4gICAgPyAoQkFTRV9TUEVFRCAqICgxMDAwIC8gRlBTKSkgLyBtZXJnZWRUaW1lU3RlcHMubGVuZ3RoIC8gKHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5zcGVlZCB8fCAxKVxuICAgIDogbnVsbDtcblxuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICBkb21haW46IG1lcmdlZERvbWFpbixcbiAgICAgIGRlZmF1bHRUaW1lRm9ybWF0LFxuICAgICAgZHVyYXRpb24sXG4gICAgICB0aW1lU3RlcHM6IG1lcmdlZFRpbWVTdGVwc1xuICAgIH1cbiAgfTtcblxuICAvLyByZXNldCBjdXJyZW50VGltZSBiYXNlZCBvbiBuZXcgZG9tYWluXG4gIGNvbnN0IHN5bmNlZEZpbHRlciA9IHN0YXRlLmZpbHRlcnM/LmZpbmQoZiA9PiAoZiBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lKSBhc1xuICAgIHwgVGltZVJhbmdlRmlsdGVyXG4gICAgfCB1bmRlZmluZWQ7XG5cbiAgLy8gaWYgc3luY2VkIGZpbHRlciBleGlzdCB3ZWUgbmVlZCB0byBtZXJnZSBhbmltYXRpb25Db25maWcgYW5kIGZpbHRlciBkb21haW5zXG4gIC8vIGFuZCB2YWxpZGF0ZSB0aGUgY3VycmVudCB0aW1lIGFnYWluc3QgdGhlIG5ldyBtZXJnZWQgZG9tYWluXG4gIGNvbnN0IG5ld0FuaW1hdGlvbkRvbWFpbiA9IHN5bmNlZEZpbHRlclxuICAgID8gbWVyZ2VUaW1lRG9tYWlucyhbbWVyZ2VkRG9tYWluLCBzeW5jZWRGaWx0ZXIuZG9tYWluXSlcbiAgICA6IG1lcmdlZERvbWFpbjtcbiAgY29uc3QgY3VycmVudFRpbWUgPSBpc0luUmFuZ2Uoc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmN1cnJlbnRUaW1lLCBuZXdBbmltYXRpb25Eb21haW4pXG4gICAgPyBzdGF0ZS5hbmltYXRpb25Db25maWcuY3VycmVudFRpbWVcbiAgICA6IG5ld0FuaW1hdGlvbkRvbWFpblswXTtcblxuICBpZiAoY3VycmVudFRpbWUgIT09IHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZSkge1xuICAgIC8vIGlmIGN1cnJlbnRUaW1lIGNoYW5nZWQsIG5lZWQgdG8gY2FsbCBhbmltYXRpb25UaW1lVXBkYXRlciB0byByZSBjYWxsIGZvcm1hdExheWVyRGF0YVxuICAgIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKG5leHRTdGF0ZSwge3ZhbHVlOiBjdXJyZW50VGltZX0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgdGhlIHN0YXR1cyBvZiB0aGUgZWRpdG9yXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3Qgc2V0RWRpdG9yTW9kZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge21vZGV9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RWRpdG9yTW9kZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBlZGl0b3I6IHtcbiAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgbW9kZSxcbiAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgfVxufSk7XG5cbi8vIGNvbnN0IGZlYXR1cmVUb0ZpbHRlclZhbHVlID0gKGZlYXR1cmUpID0+ICh7Li4uZmVhdHVyZSwgaWQ6IGZlYXR1cmUuaWR9KTtcbi8qKlxuICogVXBkYXRlIGVkaXRvciBmZWF0dXJlc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZlYXR1cmVzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZXMgPSBbXX06IFZpc1N0YXRlQWN0aW9ucy5TZXRGZWF0dXJlc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgbGFzdEZlYXR1cmUgPSBmZWF0dXJlcy5sZW5ndGggJiYgZmVhdHVyZXNbZmVhdHVyZXMubGVuZ3RoIC0gMV07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAvLyBvbmx5IHNhdmUgbm9uZSBmaWx0ZXIgZmVhdHVyZXMgdG8gZWRpdG9yXG4gICAgICBmZWF0dXJlczogZmVhdHVyZXMuZmlsdGVyKGYgPT4gIWdldEZpbHRlcklkSW5GZWF0dXJlKGYpKSxcbiAgICAgIG1vZGU6IGxhc3RGZWF0dXJlICYmIGxhc3RGZWF0dXJlLnByb3BlcnRpZXM/LmlzQ2xvc2VkID8gRURJVE9SX01PREVTLkVESVQgOiBzdGF0ZS5lZGl0b3IubW9kZVxuICAgIH1cbiAgfTtcblxuICAvLyBSZXRyaWV2ZSBleGlzdGluZyBmZWF0dXJlXG4gIGNvbnN0IHtzZWxlY3RlZEZlYXR1cmV9ID0gc3RhdGUuZWRpdG9yO1xuXG4gIC8vIElmIG5vIGZlYXR1cmUgaXMgc2VsZWN0ZWQgd2UgY2FuIHNpbXBseSByZXR1cm4gc2luY2Ugbm8gb3BlcmF0aW9uc1xuICBpZiAoIXNlbGVjdGVkRmVhdHVyZSkge1xuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfVxuXG4gIC8vIFRPRE86IGNoZWNrIGlmIHRoZSBmZWF0dXJlIGhhcyBjaGFuZ2VkXG4gIGNvbnN0IGZlYXR1cmUgPSBmZWF0dXJlcy5maW5kKGYgPT4gZi5pZCA9PT0gc2VsZWN0ZWRGZWF0dXJlLmlkKTtcblxuICAvLyBpZiBmZWF0dXJlIGlzIHBhcnQgb2YgYSBmaWx0ZXJcbiAgY29uc3QgZmlsdGVySWQgPSBmZWF0dXJlICYmIGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpO1xuICBpZiAoZmlsdGVySWQgJiYgZmVhdHVyZSkge1xuICAgIC8vIGFkZCBiYm94IGZvciBwb2x5Z29uIGZpbHRlciB0byBzcGVlZCB1cCBmaWx0ZXJpbmdcbiAgICBpZiAoZmVhdHVyZS5wcm9wZXJ0aWVzKSBmZWF0dXJlLnByb3BlcnRpZXMuYmJveCA9IGJib3goZmVhdHVyZSk7XG4gICAgY29uc3QgZmVhdHVyZVZhbHVlID0gZmVhdHVyZVRvRmlsdGVyVmFsdWUoZmVhdHVyZSwgZmlsdGVySWQpO1xuICAgIGNvbnN0IGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGZpbCA9PiBmaWwuaWQgPT09IGZpbHRlcklkKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkeDogZmlsdGVySWR4LFxuICAgICAgcHJvcDogJ3ZhbHVlJyxcbiAgICAgIHZhbHVlOiBmZWF0dXJlVmFsdWVcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBTZXQgdGhlIGN1cnJlbnQgc2VsZWN0ZWQgZmVhdHVyZVxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3Qgc2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZSwgc2VsZWN0aW9uQ29udGV4dH06IFZpc1N0YXRlQWN0aW9ucy5TZXRTZWxlY3RlZEZlYXR1cmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIC8vIGFkZCBiYm94IGZvciBwb2x5Z29uIGZpbHRlciB0byBzcGVlZCB1cCBmaWx0ZXJpbmdcbiAgbGV0IHNlbGVjdGVkRmVhdHVyZSA9IGZlYXR1cmU7XG4gIGlmIChmZWF0dXJlPy5wcm9wZXJ0aWVzKSB7XG4gICAgc2VsZWN0ZWRGZWF0dXJlID0ge1xuICAgICAgLi4uZmVhdHVyZSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgLi4uZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICBiYm94OiBiYm94KGZlYXR1cmUpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlLFxuICAgICAgc2VsZWN0aW9uQ29udGV4dFxuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogRGVsZXRlIGV4aXN0aW5nIGZlYXR1cmUgZnJvbSBmaWx0ZXJzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsZXRlRmVhdHVyZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2ZlYXR1cmV9OiBWaXNTdGF0ZUFjdGlvbnMuRGVsZXRlRmVhdHVyZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFmZWF0dXJlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgICB9XG4gIH07XG5cbiAgaWYgKGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpKSB7XG4gICAgY29uc3QgZmlsdGVySWR4ID0gbmV3U3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKSk7XG5cbiAgICByZXR1cm4gZmlsdGVySWR4ID4gLTEgPyByZW1vdmVGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWR4OiBmaWx0ZXJJZHh9KSA6IG5ld1N0YXRlO1xuICB9XG5cbiAgLy8gbW9kaWZ5IGVkaXRvciBvYmplY3RcbiAgY29uc3QgbmV3RWRpdG9yID0ge1xuICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICBmZWF0dXJlczogc3RhdGUuZWRpdG9yLmZlYXR1cmVzLmZpbHRlcihmID0+IGYuaWQgIT09IGZlYXR1cmUuaWQpLFxuICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiBuZXdFZGl0b3JcbiAgfTtcbn1cblxuLyoqXG4gKiBUb2dnbGUgZmVhdHVyZSBhcyBsYXllciBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRQb2x5Z29uRmlsdGVyTGF5ZXJVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHBheWxvYWQ6IFZpc1N0YXRlQWN0aW9ucy5TZXRQb2x5Z29uRmlsdGVyTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtsYXllciwgZmVhdHVyZX0gPSBwYXlsb2FkO1xuICBjb25zdCBmaWx0ZXJJZCA9IGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpO1xuXG4gIC8vIGxldCBuZXdGaWx0ZXIgPSBudWxsO1xuICBsZXQgZmlsdGVySWR4O1xuICBsZXQgbmV3TGF5ZXJJZCA9IFtsYXllci5pZF07XG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICAvLyBJZiBwb2x5Z29uIGZpbHRlciBhbHJlYWR5IGV4aXN0cywgd2UgbmVlZCB0byBmaW5kIG91dCBpZiB0aGUgY3VycmVudCBsYXllciBpcyBhbHJlYWR5IGluY2x1ZGVkXG4gIGlmIChmaWx0ZXJJZCkge1xuICAgIGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gZmlsdGVySWQpO1xuXG4gICAgaWYgKCFzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0pIHtcbiAgICAgIC8vIHdoYXQgaWYgZmlsdGVyIGRvZXNuJ3QgZXhpc3Q/Li4uIG5vdCBwb3NzaWJsZS5cbiAgICAgIC8vIGJlY2F1c2UgZmVhdHVyZXMgaW4gdGhlIGVkaXRvciBpcyBwYXNzZWQgaW4gZnJvbSBmaWx0ZXJzIGFuZCBlZGl0b3JzLlxuICAgICAgLy8gYnV0IHdlIHdpbGwgbW92ZSB0aGlzIGZlYXR1cmUgYmFjayB0byBlZGl0b3IganVzdCBpbiBjYXNlXG4gICAgICBjb25zdCBub25lRmlsdGVyRmVhdHVyZSA9IHtcbiAgICAgICAgLi4uZmVhdHVyZSxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIC4uLmZlYXR1cmUucHJvcGVydGllcyxcbiAgICAgICAgICBmaWx0ZXJJZDogbnVsbFxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgZWRpdG9yOiB7XG4gICAgICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgICAgIGZlYXR1cmVzOiBbLi4uc3RhdGUuZWRpdG9yLmZlYXR1cmVzLCBub25lRmlsdGVyRmVhdHVyZV0sXG4gICAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBub25lRmlsdGVyRmVhdHVyZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF07XG4gICAgY29uc3Qge2xheWVySWQgPSBbXX0gPSBmaWx0ZXI7XG4gICAgY29uc3QgaXNMYXllckluY2x1ZGVkID0gbGF5ZXJJZC5pbmNsdWRlcyhsYXllci5pZCk7XG5cbiAgICBuZXdMYXllcklkID0gaXNMYXllckluY2x1ZGVkXG4gICAgICA/IC8vIGlmIGxheWVyIGlzIGluY2x1ZGVkLCByZW1vdmUgaXRcbiAgICAgICAgbGF5ZXJJZC5maWx0ZXIobCA9PiBsICE9PSBsYXllci5pZClcbiAgICAgIDogWy4uLmxheWVySWQsIGxheWVyLmlkXTtcbiAgfSBlbHNlIHtcbiAgICAvLyBpZiB3ZSBoYXZlbid0IGNyZWF0ZSB0aGUgcG9seWdvbiBmaWx0ZXIsIGNyZWF0ZSBpdFxuICAgIGNvbnN0IG5ld0ZpbHRlciA9IGdlbmVyYXRlUG9seWdvbkZpbHRlcihbXSwgZmVhdHVyZSk7XG4gICAgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5sZW5ndGg7XG5cbiAgICAvLyBhZGQgZmVhdHVyZSwgcmVtb3ZlIGZlYXR1cmUgZnJvbSBlaWR0b3JcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZmlsdGVyczogWy4uLnN0YXRlLmZpbHRlcnMsIG5ld0ZpbHRlcl0sXG4gICAgICBlZGl0b3I6IHtcbiAgICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgICBmZWF0dXJlczogc3RhdGUuZWRpdG9yLmZlYXR1cmVzLmZpbHRlcihmID0+IGYuaWQgIT09IGZlYXR1cmUuaWQpLFxuICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IG5ld0ZpbHRlci52YWx1ZVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICdsYXllcklkJyxcbiAgICB2YWx1ZTogbmV3TGF5ZXJJZFxuICB9KTtcbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc29ydFRhYmxlQ29sdW1uVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBjb2x1bW4sIG1vZGV9OiBWaXNTdGF0ZUFjdGlvbnMuU29ydFRhYmxlQ29sdW1uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBzb3J0TW9kZSA9IG1vZGU7XG4gIGlmICghc29ydE1vZGUpIHtcbiAgICBjb25zdCBjdXJyZW50TW9kZSA9IGdldChkYXRhc2V0LCBbJ3NvcnRDb2x1bW4nLCBjb2x1bW5dKTtcbiAgICAvLyBAdHMtaWdub3JlIC0gc2hvdWxkIGJlIGZpeGFibGUgaW4gYSBUUyBmaWxlXG4gICAgc29ydE1vZGUgPSBjdXJyZW50TW9kZVxuICAgICAgPyBPYmplY3Qua2V5cyhTT1JUX09SREVSKS5maW5kKG0gPT4gbSAhPT0gY3VycmVudE1vZGUpXG4gICAgICA6IFNPUlRfT1JERVIuQVNDRU5ESU5HO1xuICB9XG5cbiAgY29uc3Qgc29ydGVkID0gc29ydERhdGFzZXRCeUNvbHVtbihkYXRhc2V0LCBjb2x1bW4sIHNvcnRNb2RlKTtcbiAgcmV0dXJuIHNldChbJ2RhdGFzZXRzJywgZGF0YUlkXSwgc29ydGVkLCBzdGF0ZSk7XG59XG5cbi8qKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBpblRhYmxlQ29sdW1uVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBjb2x1bW59OiBWaXNTdGF0ZUFjdGlvbnMuUGluVGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbmV3RGF0YXNldCA9IHBpblRhYmxlQ29sdW1ucyhkYXRhc2V0LCBjb2x1bW4pO1xuXG4gIHJldHVybiBzZXQoWydkYXRhc2V0cycsIGRhdGFJZF0sIG5ld0RhdGFzZXQsIHN0YXRlKTtcbn1cblxuLyoqXG4gKiBDb3B5IGNvbHVtbiBjb250ZW50IGFzIHN0cmluZ3NcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb3B5VGFibGVDb2x1bW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGNvbHVtbn06IFZpc1N0YXRlQWN0aW9ucy5Db3B5VGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgZmllbGRJZHggPSBkYXRhc2V0LmZpZWxkcy5maW5kSW5kZXgoZiA9PiBmLm5hbWUgPT09IGNvbHVtbik7XG4gIGlmIChmaWVsZElkeCA8IDApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge3R5cGV9ID0gZGF0YXNldC5maWVsZHNbZmllbGRJZHhdO1xuICBjb25zdCB0ZXh0ID0gZGF0YXNldC5kYXRhQ29udGFpbmVyXG4gICAgLm1hcChyb3cgPT4gcGFyc2VGaWVsZFZhbHVlKHJvdy52YWx1ZUF0KGZpZWxkSWR4KSwgdHlwZSksIHRydWUpXG4gICAgLmpvaW4oJ1xcbicpO1xuXG4gIGNvcHkodGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIFNldCBkaXNwbGF5IGZvcm1hdCBmcm9tIGNvbHVtbnMgZnJvbSB1c2VyIHNlbGVjdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldENvbHVtbkRpc3BsYXlGb3JtYXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGZvcm1hdHN9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0Q29sdW1uRGlzcGxheUZvcm1hdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgbmV3RmllbGRzID0gZGF0YXNldC5maWVsZHM7XG4gIE9iamVjdC5rZXlzKGZvcm1hdHMpLmZvckVhY2goY29sdW1uID0+IHtcbiAgICBjb25zdCBmaWVsZElkeCA9IGRhdGFzZXQuZmllbGRzLmZpbmRJbmRleChmID0+IGYubmFtZSA9PT0gY29sdW1uKTtcbiAgICBpZiAoZmllbGRJZHggPj0gMCkge1xuICAgICAgY29uc3QgZGlzcGxheUZvcm1hdCA9IGZvcm1hdHNbY29sdW1uXTtcbiAgICAgIGNvbnN0IGZpZWxkID0gbmV3RmllbGRzW2ZpZWxkSWR4XTtcbiAgICAgIG5ld0ZpZWxkcyA9IHN3YXBfKG1lcmdlXyh7ZGlzcGxheUZvcm1hdH0pKGZpZWxkKSBhcyB7aWQ6IHN0cmluZ30pKFxuICAgICAgICBuZXdGaWVsZHMgYXMge2lkOiBzdHJpbmd9W11cbiAgICAgICkgYXMgRmllbGRbXTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IG5ld0RhdGFzZXQgPSBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge2ZpZWxkczogbmV3RmllbGRzIGFzIEZpZWxkW119KTtcbiAgbGV0IG5ld1N0YXRlID0gcGlja18oJ2RhdGFzZXRzJykobWVyZ2VfKHtbZGF0YUlkXTogbmV3RGF0YXNldH0pKShzdGF0ZSk7XG5cbiAgLy8gdXBkYXRlIGNvbG9yRmllbGQgZGlzcGxheUZvcm1hdFxuICBuZXdTdGF0ZSA9IHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllcnM6IG5ld1N0YXRlLmxheWVycy5tYXAobGF5ZXIgPT5cbiAgICAgIGxheWVyLmNvbmZpZz8uY29sb3JGaWVsZD8ubmFtZSAmJiBsYXllci5jb25maWcuY29sb3JGaWVsZC5uYW1lIGluIGZvcm1hdHNcbiAgICAgICAgPyBsYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgICAgICBjb2xvckZpZWxkOiB7XG4gICAgICAgICAgICAgIC4uLmxheWVyLmNvbmZpZy5jb2xvckZpZWxkLFxuICAgICAgICAgICAgICBkaXNwbGF5Rm9ybWF0OiBmb3JtYXRzW2xheWVyLmNvbmZpZy5jb2xvckZpZWxkLm5hbWVdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgOiBsYXllclxuICAgIClcbiAgfTtcblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9nZ2xlRWRpdG9yVmlzaWJpbGl0eVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgdmlzaWJsZTogIXN0YXRlLmVkaXRvci52aXNpYmxlXG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkeCwgY29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWdBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qgb2xkRmlsdGVyID0gc3RhdGUuZmlsdGVyc1tpZHhdO1xuICBpZiAoIW9sZEZpbHRlcikge1xuICAgIENvbnNvbGUuZXJyb3IoYGZpbHRlcnMuJHtpZHh9IGlzIHVuZGVmaW5lZGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAob2xkRmlsdGVyLnR5cGUgIT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UpIHtcbiAgICBDb25zb2xlLmVycm9yKFxuICAgICAgYHNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWcgY2FuIG9ubHkgYmUgY2FsbGVkIHRvIHVwZGF0ZSBhIHRpbWUgZmlsdGVyLiBjaGVjayBmaWx0ZXIudHlwZSA9PT0gJ3RpbWVSYW5nZSdgXG4gICAgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB1cGRhdGVzID0gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpO1xuXG4gIHJldHVybiBwaWNrXygnZmlsdGVycycpKHN3YXBfKG1lcmdlXyh1cGRhdGVzKShvbGRGaWx0ZXIpKSkoc3RhdGUpO1xufVxuXG5mdW5jdGlvbiBjaGVja1RpbWVDb25maWdBcmdzKGNvbmZpZykge1xuICBjb25zdCBhbGxvd2VkID0gWyd0aW1lRm9ybWF0JywgJ3RpbWV6b25lJ107XG4gIHJldHVybiBPYmplY3Qua2V5cyhjb25maWcpLnJlZHVjZSgoYWNjdSwgcHJvcCkgPT4ge1xuICAgIGlmICghYWxsb3dlZC5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgQ29uc29sZS5lcnJvcihcbiAgICAgICAgYHNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZyB0YWtlcyB0aW1lRm9ybWF0IGFuZC9vciB0aW1lem9uZSBhcyBvcHRpb25zLCBmb3VuZCAke3Byb3B9YFxuICAgICAgKTtcbiAgICAgIHJldHVybiBhY2N1O1xuICAgIH1cblxuICAgIC8vIGhlcmUgd2UgYXJlIE5PVCBjaGVja2luZyBpZiB0aW1lem9uZSBvciB0aW1lRm9ybWF0IGlucHV0IGlzIHZhbGlkXG4gICAgYWNjdVtwcm9wXSA9IGNvbmZpZ1twcm9wXTtcbiAgICByZXR1cm4gYWNjdTtcbiAgfSwge30pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBlZGl0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2NvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5TZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFjb25maWcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgdXBkYXRlcyA9IGNoZWNrVGltZUNvbmZpZ0FyZ3MoY29uZmlnKTtcbiAgcmV0dXJuIHBpY2tfKCdhbmltYXRpb25Db25maWcnKShtZXJnZV8odXBkYXRlcykpKHN0YXRlKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZWRpdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllckZpbHRlcmVkSXRlbXNDaGFuZ2VVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllckZpbHRlcmVkSXRlbXNDaGFuZ2VBY3Rpb25cbik6IFMge1xuICBjb25zdCB7ZXZlbnQsIGxheWVyfSA9IGFjdGlvbjtcbiAgY29uc3Qge2lkOiBkZWNrZ2xMYXllcklkLCBjb3VudH0gPSBldmVudDtcbiAgaWYgKCFsYXllcikge1xuICAgIENvbnNvbGUud2FybihgbGF5ZXJGaWx0ZXJlZEl0ZW1zIGxheWVyIGRvZXNudCBleGlzdHNgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKGxheWVyLmZpbHRlcmVkSXRlbUNvdW50Py5bZGVja2dsTGF5ZXJJZF0gPT09IGNvdW50KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGF5ZXIuZmlsdGVyZWRJdGVtQ291bnQgPSB7XG4gICAgLi4ubGF5ZXIuZmlsdGVyZWRJdGVtQ291bnQsXG4gICAgW2RlY2tnbExheWVySWRdOiBjb3VudFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBzd2FwXyhsYXllcikoc3RhdGUubGF5ZXJzKVxuICB9O1xufVxuXG4vKipcbiAqIFVwZGF0ZSBXTVMgZmVhdHVyZSBpbmZvIGFuZCBwaW4gdG9vbHRpcFxuICovXG5leHBvcnQgZnVuY3Rpb24gd21zRmVhdHVyZUluZm9VcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5XTVNGZWF0dXJlSW5mb0FjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtsYXllciwgZmVhdHVyZUluZm8sIGNvb3JkaW5hdGV9ID0gYWN0aW9uO1xuICBpZiAoIWxheWVyKSB7XG4gICAgY29uc29sZS53YXJuKGBXTVMgZmVhdHVyZSBpbmZvIGxheWVyIGRvZXNuJ3QgZXhpc3RgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBDcmVhdGUgYSBjbGlja2VkIG9iamVjdCBzaW1pbGFyIHRvIGxheWVyQ2xpY2tVcGRhdGVyIHRvIHBpbiB0aGUgdG9vbHRpcFxuICBjb25zdCBjbGlja2VkID0gZmVhdHVyZUluZm9cbiAgICA/IHtcbiAgICAgICAgcGlja2VkOiB0cnVlLFxuICAgICAgICBvYmplY3Q6IHtcbiAgICAgICAgICB3bXNGZWF0dXJlSW5mbzogZmVhdHVyZUluZm9cbiAgICAgICAgfSxcbiAgICAgICAgY29vcmRpbmF0ZTogY29vcmRpbmF0ZSB8fCBbMCwgMF0sXG4gICAgICAgIGxheWVyOiB7XG4gICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgIGlkeDogc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGxheWVyLmlkKSxcbiAgICAgICAgICAgIGlkOiBsYXllci5pZFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIDogbnVsbDtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNsaWNrZWRcbiAgfTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1zdGF0ZW1lbnRzXG5leHBvcnQgZnVuY3Rpb24gc3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVBY3Rpb25cbik6IFMge1xuICBjb25zdCB7aWR4OiBmaWx0ZXJJZHgsIGVuYWJsZSA9IGZhbHNlfSA9IGFjdGlvbjtcblxuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBsZXQgbmV3RmlsdGVyID0gZmlsdGVyO1xuXG4gIC8vIGlmIHdlIGVuYWJsZSBzeW5jIHdlIGFyZSBnb2luZyB0byBtZXJnZSBmaWx0ZXIgYW5kIGFuaW1hdGlvbkNvbmZpZyBkb21haW5zIGFuZCBzdG9yZSBpbnRvIGZpbHRlci5kb21haW5cbiAgaWYgKGVuYWJsZSkge1xuICAgIGNvbnN0IGFuaW1hdGFibGVMYXllcnMgPSBnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyhuZXdTdGF0ZS5sYXllcnMpO1xuICAgIC8vIGlmIG5vIGFuaW1hdGFibGVMYXllcnMgYXJlIHByZXNlbnQgd2Ugc2ltcGx5IHJldHVyblxuICAgIGlmICghYW5pbWF0YWJsZUxheWVycy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzID0gZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyhhbmltYXRhYmxlTGF5ZXJzKTtcbiAgICBjb25zdCBoYXNJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXIgPSBCb29sZWFuKGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMubGVuZ3RoKTtcblxuICAgIGNvbnN0IG5ld0ZpbHRlckRvbWFpbiA9IG1lcmdlVGltZURvbWFpbnMoW2ZpbHRlci5kb21haW4sIG5ld1N0YXRlLmFuaW1hdGlvbkNvbmZpZy5kb21haW5dKTtcblxuICAgIC8vIHdlIG9ubHkgdXBkYXRlIGFuaW1hdGlvbldpbmRvdyBpZiB3ZSBoYXZlIGludGVydmFsIGJhc2VkIGFuaW1hdGlvbiBsYXllcnMgd2l0aCBkZWZpbmVkIGludGVydmFscyBhbmQgdGhlIGN1cnJlbnQgZmlsdGVyIGFuaW1hdGlvbiB3aW5kb3cgaXMgbm90IGludGVydmFsXG4gICAgaWYgKGhhc0ludGVydmFsQmFzZWRBbmltYXRpb25MYXllcikge1xuICAgICAgaWYgKGZpbHRlci5hbmltYXRpb25XaW5kb3cgIT09IEFOSU1BVElPTl9XSU5ET1cuaW50ZXJ2YWwpIHtcbiAgICAgICAgbmV3U3RhdGUgPSBzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICAgICAgaWQ6IGZpbHRlci5pZCxcbiAgICAgICAgICBhbmltYXRpb25XaW5kb3c6IEFOSU1BVElPTl9XSU5ET1cuaW50ZXJ2YWxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAgIC8vIGFkanVzdCB0aW1lIGZpbHRlciBpbnRlcnZhbFxuICAgICAgbmV3RmlsdGVyID0gYWRqdXN0VGltZUZpbHRlckludGVydmFsKG5ld1N0YXRlLCBuZXdGaWx0ZXIpO1xuXG4gICAgICAvLyByZXBsYWNlIGZpbHRlciBpbiBzdGF0ZSB3aXRoIG5ld0ZpbHRlclxuICAgICAgbmV3U3RhdGUgPSB7XG4gICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikobmV3U3RhdGUuZmlsdGVycylcbiAgICAgIH07XG4gICAgfVxuXG4gICAgbmV3RmlsdGVyID0gbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICAgIC8vIGFkanVzdCB2YWx1ZSBiYXNlZCBvbiBuZXcgZG9tYWluXG4gICAgY29uc3QgbmV3RmlsdGVyVmFsdWUgPSBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluKFxuICAgICAgbmV3RmlsdGVyLmFuaW1hdGlvbldpbmRvdyA9PT0gQU5JTUFUSU9OX1dJTkRPVy5pbnRlcnZhbFxuICAgICAgICA/IFtuZXdGaWx0ZXJEb21haW5bMF0sIG5ld0ZpbHRlckRvbWFpblswXV1cbiAgICAgICAgOiBuZXdGaWx0ZXJEb21haW4sXG4gICAgICB7Li4ubmV3RmlsdGVyLCBkb21haW46IG5ld0ZpbHRlckRvbWFpbn1cbiAgICApO1xuXG4gICAgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICBpZHg6IGZpbHRlcklkeCxcbiAgICAgIHByb3A6ICd2YWx1ZScsXG4gICAgICB2YWx1ZTogbmV3RmlsdGVyVmFsdWVcbiAgICB9KTtcblxuICAgIG5ld0ZpbHRlciA9IHtcbiAgICAgIC4uLihuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyKSxcbiAgICAgIHN5bmNlZFdpdGhMYXllclRpbWVsaW5lOiB0cnVlXG4gICAgfTtcblxuICAgIC8vIHJlcGxhY2UgZmlsdGVyIGluIHN0YXRlIHdpdGggbmV3RmlsdGVyXG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShuZXdTdGF0ZS5maWx0ZXJzKVxuICAgIH07XG5cbiAgICBuZXdTdGF0ZSA9IHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgICAgbW9kZTogZ2V0U3luY0FuaW1hdGlvbk1vZGUobmV3RmlsdGVyKVxuICAgIH0pO1xuXG4gICAgbmV3RmlsdGVyID0gbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICAgIC8vIHNldCB0aGUgYW5pbWF0aW9uIGNvbmZpZyB2YWx1ZSB0byBtYXRjaCBmaWx0ZXIgdmFsdWVcbiAgICByZXR1cm4gc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgdmFsdWU6IG5ld0ZpbHRlci52YWx1ZVtuZXdGaWx0ZXIuc3luY1RpbWVsaW5lTW9kZV1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIHNldCBkb21haW4gYW5kIHN0ZXBcbiAgbmV3RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICBzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZTogZmFsc2VcbiAgfTtcblxuICAvLyByZXBsYWNlIGZpbHRlciBpbiBzdGF0ZSB3aXRoIG5ld0ZpbHRlclxuICBuZXdTdGF0ZSA9IHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikobmV3U3RhdGUuZmlsdGVycylcbiAgfTtcblxuICAvLyByZXNldCBzeW5jIHRpbWVsaW5lIG1vZGVcbiAgbmV3U3RhdGUgPSBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkOiBuZXdGaWx0ZXIuaWQsXG4gICAgbW9kZTogU1lOQ19USU1FTElORV9NT0RFUy5lbmRcbiAgfSk7XG5cbiAgbmV3RmlsdGVyID0gbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICAvLyByZXNldCBmaWx0ZXIgdmFsdWVcbiAgY29uc3QgbmV3RmlsdGVyVmFsdWUgPSBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluKG5ld0ZpbHRlci5kb21haW4sIG5ld0ZpbHRlcik7XG5cbiAgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgcHJvcDogJ3ZhbHVlJyxcbiAgICB2YWx1ZTogbmV3RmlsdGVyVmFsdWVcbiAgfSk7XG5cbiAgbmV3U3RhdGUgPSBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkOiBuZXdGaWx0ZXIuaWQsXG4gICAgbW9kZTogZ2V0U3luY0FuaW1hdGlvbk1vZGUobmV3RmlsdGVyKVxuICB9KTtcblxuICAvLyByZXNldCBhbmltYXRpb24gY29uZmlnIGN1cnJlbnQgdGltZSB0b1xuICByZXR1cm4gc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIHZhbHVlOiBuZXdTdGF0ZS5hbmltYXRpb25Db25maWcuZG9tYWluPy5bMF0gPz8gbnVsbFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5zZXRUaW1lRmlsdGVyU3luY1RpbWVsaW5lTW9kZUFjdGlvblxuKSB7XG4gIGNvbnN0IHtpZDogZmlsdGVySWQsIG1vZGU6IHN5bmNUaW1lbGluZU1vZGV9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gZmlsdGVySWQpO1xuICBpZiAoZmlsdGVySWR4ID09PSAtMSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgaWYgKCF2YWxpZGF0ZVN5bmNBbmltYXRpb25Nb2RlKGZpbHRlciwgc3luY1RpbWVsaW5lTW9kZSkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIHN5bmNUaW1lbGluZU1vZGVcbiAgfTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikoc3RhdGUuZmlsdGVycylcbiAgfTtcblxuICByZXR1cm4gYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlcihuZXdTdGF0ZSwgZmlsdGVySWR4KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgc3RhdGUgb2YgdGhlIGxvYWRpbmcgaW5kaWNhdG9yLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSB2aXNTdGF0ZVxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIFBheWxvYWQgd2l0aCBjaGFuZ2Ugb2YgbnVtYmVyIG9mIGFjdGl2ZSBsb2FkaW5nIGFjdGlvbnMuXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldExvYWRpbmdJbmRpY2F0b3JVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtwYXlsb2FkOiB7Y2hhbmdlfX06IHtwYXlsb2FkOiBTZXRMb2FkaW5nSW5kaWNhdG9yUGF5bG9hZH1cbik6IFZpc1N0YXRlID0+IHtcbiAgbGV0IHtsb2FkaW5nSW5kaWNhdG9yVmFsdWV9ID0gc3RhdGU7XG4gIGlmICghbG9hZGluZ0luZGljYXRvclZhbHVlKSB7XG4gICAgbG9hZGluZ0luZGljYXRvclZhbHVlID0gMDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbG9hZGluZ0luZGljYXRvclZhbHVlOiBNYXRoLm1heChsb2FkaW5nSW5kaWNhdG9yVmFsdWUgKyBjaGFuZ2UsIDApXG4gIH07XG59O1xuXG5mdW5jdGlvbiBhZGp1c3RBbmltYXRpb25Db25maWdXaXRoRmlsdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIGZpbHRlcklkeDogbnVtYmVyKTogUyB7XG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XTtcbiAgaWYgKChmaWx0ZXIgYXMgVGltZVJhbmdlRmlsdGVyKS5zeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSkge1xuICAgIGNvbnN0IHRpbWVsaW5lVmFsdWUgPSBnZXRUaW1lbGluZVZhbHVlRnJvbUZpbHRlcihmaWx0ZXIpO1xuICAgIGNvbnN0IHZhbHVlID0gc3RhdGUuYW5pbWF0aW9uQ29uZmlnLnRpbWVTdGVwc1xuICAgICAgPyBzbmFwVG9NYXJrcyh0aW1lbGluZVZhbHVlLCBzdGF0ZS5hbmltYXRpb25Db25maWcudGltZVN0ZXBzKVxuICAgICAgOiB0aW1lbGluZVZhbHVlO1xuICAgIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKHN0YXRlLCB7dmFsdWV9KTtcbiAgfVxuICByZXR1cm4gc3RhdGU7XG59XG5cbmZ1bmN0aW9uIGdldFRpbWVsaW5lVmFsdWVGcm9tRmlsdGVyKGZpbHRlcikge1xuICByZXR1cm4gZmlsdGVyLnZhbHVlW2ZpbHRlci5zeW5jVGltZWxpbmVNb2RlXTtcbn1cblxuZnVuY3Rpb24gZ2V0U3luY0FuaW1hdGlvbk1vZGUoZmlsdGVyOiBUaW1lUmFuZ2VGaWx0ZXIpIHtcbiAgaWYgKGZpbHRlci5hbmltYXRpb25XaW5kb3cgPT09IEFOSU1BVElPTl9XSU5ET1cuZnJlZSkge1xuICAgIHJldHVybiBmaWx0ZXIuc3luY1RpbWVsaW5lTW9kZSA/PyBTWU5DX1RJTUVMSU5FX01PREVTLmVuZDtcbiAgfVxuXG4gIHJldHVybiBTWU5DX1RJTUVMSU5FX01PREVTLmVuZDtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXI6IFRpbWVSYW5nZUZpbHRlciwgbmV3TW9kZTogbnVtYmVyKSB7XG4gIHJldHVybiAhKFxuICAgIGZpbHRlci5hbmltYXRpb25XaW5kb3cgIT09IEFOSU1BVElPTl9XSU5ET1cuZnJlZSAmJiBuZXdNb2RlID09PSBTWU5DX1RJTUVMSU5FX01PREVTLnN0YXJ0XG4gICk7XG59XG5cbmZ1bmN0aW9uIGFkanVzdFRpbWVGaWx0ZXJJbnRlcnZhbChzdGF0ZSwgZmlsdGVyKSB7XG4gIGNvbnN0IGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMgPSBnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzKHN0YXRlLmxheWVycyk7XG5cbiAgbGV0IGludGVydmFsOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgaWYgKGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMubGVuZ3RoID4gMCkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCBpbnRlcnZhbEluZGV4ID0gaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycy5yZWR1Y2UoKGN1cnJlbnRJbmRleCwgbCkgPT4ge1xuICAgICAgaWYgKGwubWV0YS50YXJnZXRUaW1lSW50ZXJ2YWwpIHtcbiAgICAgICAgY29uc3QgbmV3SW5kZXggPSBUSU1FX0lOVEVSVkFMU19PUkRFUkVELmZpbmRJbmRleChpID0+IGkgPT09IGwubWV0YS50YXJnZXRUaW1lSW50ZXJ2YWwpO1xuICAgICAgICByZXR1cm4gbmV3SW5kZXggPiAtMSAmJiBuZXdJbmRleCA8IGN1cnJlbnRJbmRleCA/IG5ld0luZGV4IDogY3VycmVudEluZGV4O1xuICAgICAgfVxuICAgIH0sIFRJTUVfSU5URVJWQUxTX09SREVSRUQubGVuZ3RoIC0gMSk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGhleFRpbGVJbnRlcnZhbCA9IFRJTUVfSU5URVJWQUxTX09SREVSRURbaW50ZXJ2YWxJbmRleF07XG4gICAgaW50ZXJ2YWwgPSBMYXllclRvRmlsdGVyVGltZUludGVydmFsW2hleFRpbGVJbnRlcnZhbF07XG4gIH1cblxuICBpZiAoIWludGVydmFsKSB7XG4gICAgcmV0dXJuIGZpbHRlcjtcbiAgfVxuXG4gIC8vIGFkanVzdCBmaWx0ZXJcbiAgY29uc3QgdGltZUZvcm1hdCA9IGdldERlZmF1bHRUaW1lRm9ybWF0KGludGVydmFsKTtcbiAgY29uc3QgdXBkYXRlZFBsb3RUeXBlID0gey4uLmZpbHRlci5wbG90VHlwZSwgaW50ZXJ2YWwsIHRpbWVGb3JtYXR9O1xuICBjb25zdCBuZXdGaWx0ZXIgPSB1cGRhdGVUaW1lRmlsdGVyUGxvdFR5cGUoZmlsdGVyLCB1cGRhdGVkUGxvdFR5cGUsIHN0YXRlLmRhdGFzZXRzKTtcbiAgcmV0dXJuIGFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3coc3RhdGUsIG5ld0ZpbHRlcik7XG59XG5cbi8vIEZpbmQgZGF0YUlkIGZyb20gYSBzYXZlZCB2aXNTdGF0ZSBwcm9wZXJ0eTpcbi8vIGxheWVycywgZmlsdGVycywgaW50ZXJhY3Rpb25zLCBsYXllckJsZW5kaW5nLCBvdmVybGF5QmxlbmRpbmcsIHNwbGl0TWFwcywgYW5pbWF0aW9uQ29uZmlnLCBlZGl0b3Jcbi8vIHJlcGxhY2UgaXQgd2l0aCBhbm90aGVyIGRhdGFJZFxuZnVuY3Rpb24gZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzKHZhbHVlOiBhbnksIGRhdGFJZDogc3RyaW5nLCBkYXRhSWRUb1JlcGxhY2U6IHN0cmluZykge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBmb3IgbGF5ZXJzLCBmaWx0ZXJzLCBjYWxsIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyBvbiBlYWNoIGl0ZW0gaW4gYXJyYXlcbiAgICBjb25zdCByZXBsYWNlZCA9IHZhbHVlXG4gICAgICAubWFwKHYgPT4gZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzKHYsIGRhdGFJZCwgZGF0YUlkVG9SZXBsYWNlKSlcbiAgICAgIC5maWx0ZXIoZCA9PiBkKTtcbiAgICByZXR1cm4gcmVwbGFjZWQubGVuZ3RoID8gcmVwbGFjZWQgOiBudWxsO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUuZGF0YUlkID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5kYXRhSWQgPT09IGRhdGFJZCkge1xuICAgIC8vIG90aGVyc1xuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIGRhdGFJZDogZGF0YUlkVG9SZXBsYWNlXG4gICAgfTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlLmRhdGFJZCkgJiYgdmFsdWUuZGF0YUlkLmluY2x1ZGVzKGRhdGFJZCkpIHtcbiAgICAvLyBmaWx0ZXJcbiAgICByZXR1cm4ge1xuICAgICAgLi4udmFsdWUsXG4gICAgICBkYXRhSWQ6IHZhbHVlLmRhdGFJZC5tYXAoZCA9PiAoZCA9PT0gZGF0YUlkID8gZGF0YUlkVG9SZXBsYWNlIDogZCkpXG4gICAgfTtcbiAgfSBlbHNlIGlmICh2YWx1ZS5jb25maWc/LmRhdGFJZCAmJiB2YWx1ZS5jb25maWc/LmRhdGFJZCA9PT0gZGF0YUlkKSB7XG4gICAgLy8gbGF5ZXJcbiAgICByZXR1cm4ge1xuICAgICAgLi4udmFsdWUsXG4gICAgICBjb25maWc6IHtcbiAgICAgICAgLi4udmFsdWUuY29uZmlnLFxuICAgICAgICBkYXRhSWQ6IGRhdGFJZFRvUmVwbGFjZVxuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZSBpZiAoaXNPYmplY3QodmFsdWUpICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgZGF0YUlkKSkge1xuICAgIC8vIGZvciB2YWx1ZSBzYXZlZCBhcyB7W2RhdGFJZF06IHsuLi59fVxuICAgIHJldHVybiB7W2RhdGFJZFRvUmVwbGFjZV06IHZhbHVlW2RhdGFJZF19O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8vIEZpbmQgZGF0YXNldElkcyBkZXJpdmVkIGEgc2F2ZWQgdmlzU3RhdGUgUHJvcGVydHk7XG5mdW5jdGlvbiBmaW5kQ2hpbGREYXRhc2V0SWRzKHZhbHVlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIGZvciBsYXllcnMsIGZpbHRlcnMsIGNhbGwgZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIG9uIGVhY2ggaXRlbSBpbiBhcnJheVxuICAgIGNvbnN0IGNoaWxkRGF0YUlkcyA9IHZhbHVlLm1hcChmaW5kQ2hpbGREYXRhc2V0SWRzKS5maWx0ZXIoZCA9PiBkKTtcbiAgICByZXR1cm4gY2hpbGREYXRhSWRzLmxlbmd0aCA/IGNoaWxkRGF0YUlkcyA6IG51bGw7XG4gIH1cblxuICAvLyBjaGlsZCBkYXRhIGlkIHVzdWFsbHkgc3RvcmVzIGluIHRoZSBkZXJpdmVkIGRhdGFzZXQgaW5mb1xuICByZXR1cm4gdmFsdWU/Lm5ld0RhdGFzZXQ/LmluZm8uaWQgfHwgbnVsbDtcbn1cblxuLy8gbW92ZWQgdW5tZXJnZWQgbGF5ZXJzLCBmaWx0ZXJzLCBpbnRlcmFjdGlvbnNcbmZ1bmN0aW9uIG1vdmVWYWx1ZVRvQmVNZXJnZWQoc3RhdGUsIHByb3BWYWx1ZXMsIHtwcm9wLCB0b01lcmdlUHJvcCwgc2F2ZVVubWVyZ2VkfSkge1xuICAvLyByZW1vdmUgcHJvcCB2YWx1ZSBmcm9tIHN0YXRlXG4gIC8vIFRPRE86IHNob3VsZCB3ZSBhZGQgcmVtb3ZlIHVwZGF0ZXIgdG8gbWVyZ2VyIGFzIHdlbGw/XG4gIGlmICghcHJvcFZhbHVlcykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBzdGF0ZVJlbW92ZWQgPVxuICAgIHByb3AgPT09ICdsYXllcnMnXG4gICAgICA/IHByb3BWYWx1ZXMucmVkdWNlKChhY2N1LCBwcm9wVmFsdWUpID0+IHJlbW92ZUxheWVyVXBkYXRlcihhY2N1LCB7aWQ6IHByb3BWYWx1ZS5pZH0pLCBzdGF0ZSlcbiAgICAgIDogQXJyYXkuaXNBcnJheShzdGF0ZVtwcm9wXSlcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIFtwcm9wXTogc3RhdGVbcHJvcF0uZmlsdGVyKHAgPT4gIXByb3BWYWx1ZXMuZmluZChwcm9wVmFsdWUgPT4gcC5pZCA9PT0gcHJvcFZhbHVlLmlkKSlcbiAgICAgICAgfVxuICAgICAgOiAvLyBpZiBub3QgYXJyYXksIHdlIHdvbid0IHJlbW92ZSBpdCwgcmVtb3ZlIGRhdGFzZXQgc2hvdWxkIGhhbmRsZSBpdFxuICAgICAgICBzdGF0ZTtcblxuICAvLyBtb3ZlIHRvIHN0YXRlVG9CZU1lcmdlZFxuICBjb25zdCB0b0JlTWVyZ2VkID0ge1xuICAgIFt0b01lcmdlUHJvcF06IHNhdmVVbm1lcmdlZFxuICAgICAgPyAvLyBjYWxsIG1lcmdlIHNhdmVVbm1lcmdlZCBtZXRob2RcbiAgICAgICAgc2F2ZVVubWVyZ2VkKHN0YXRlUmVtb3ZlZCwgcHJvcFZhbHVlcylcbiAgICAgIDogLy8gaWYgdG9NZXJnZVByb3AgaXMgYXJhYXksIGFwcGVuZCB0byBpdFxuICAgICAgQXJyYXkuaXNBcnJheShzdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdKVxuICAgICAgPyBbLi4uc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSwgLi4ucHJvcFZhbHVlc11cbiAgICAgIDogLy8gc2F2ZSBwcm9wVmFsdWVzIHRvIHRvTWVyZ2VcbiAgICAgIGlzT2JqZWN0KHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0pXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdLFxuICAgICAgICAgIC4uLnByb3BWYWx1ZXNcbiAgICAgICAgfVxuICAgICAgOiBzdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZVJlbW92ZWQsXG4gICAgLi4udG9CZU1lcmdlZFxuICB9O1xufVxuXG5mdW5jdGlvbiByZXBsYWNlRGF0YXNldEFuZERlcHM8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhSWRUb1VzZTogc3RyaW5nXG4pOiBUIHtcbiAgcmV0dXJuIGNvbXBvc2VfPFQ+KFtcbiAgICBhcHBseV8ocmVwbGFjZURhdGFzZXREZXBzSW5TdGF0ZSwge2RhdGFJZCwgZGF0YUlkVG9Vc2V9KSxcbiAgICBhcHBseV8ocmVtb3ZlRGF0YXNldFVwZGF0ZXIsIHtkYXRhSWR9KVxuICBdKShzdGF0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlU3RhdGVGb3JEYXRhc2V0UmVwbGFjZTxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFJZFRvVXNlOiBzdHJpbmdcbik6IFQge1xuICBjb25zdCBzZXJpYWxpemVkU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZShzdGF0ZSwgc3RhdGUuc2NoZW1hKTtcbiAgY29uc3QgbmV4dFN0YXRlID0gcmVwbGFjZURhdGFzZXRBbmREZXBzKHN0YXRlLCBkYXRhSWQsIGRhdGFJZFRvVXNlKTtcbiAgLy8gbWFrZSBhIGNvcHkgb2YgbGF5ZXJPcmRlciwgYmVjYXVzZSBsYXllciBpZCB3aWxsIGJlIHJlbW92ZWQgZnJvbSBpdCBieSBjYWxsaW5nIHJlbW92ZUxheWVyVXBkYXRlclxuICBjb25zdCBwcmVzZXJ2ZUxheWVyT3JkZXIgPSBbLi4uc3RhdGUubGF5ZXJPcmRlcl07XG5cbiAgLy8gcHJlc2VydmUgZGF0YXNldCBvcmRlclxuICBuZXh0U3RhdGUucHJlc2VydmVEYXRhc2V0T3JkZXIgPSBPYmplY3Qua2V5cyhzdGF0ZS5kYXRhc2V0cykubWFwKGQgPT5cbiAgICBkID09PSBkYXRhSWQgPyBkYXRhSWRUb1VzZSA6IGRcbiAgKTtcblxuICAvLyBwcmVzZXJ2ZUxheWVyT3JkZXJcbiAgaWYgKG5leHRTdGF0ZS5sYXllclRvQmVNZXJnZWQ/Lmxlbmd0aCkge1xuICAgIC8vIGNvcHkgc3BsaXQgbWFwcyB0byBiZSBtZXJnZWQsIGJlY2F1c2UgaXQgd2lsbCBiZSByZXNldCBpbiByZW1vdmUgbGF5ZXJcbiAgICBuZXh0U3RhdGUuc3BsaXRNYXBzVG9CZU1lcmdlZCA9IHNlcmlhbGl6ZWRTdGF0ZT8uc3BsaXRNYXBzID8/IFtdO1xuICAgIG5leHRTdGF0ZS5sYXllck9yZGVyID0gWy4uLnByZXNlcnZlTGF5ZXJPcmRlcl07XG4gIH1cblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZURhdGFzZXREZXBzSW5TdGF0ZTxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAge2RhdGFJZCwgZGF0YUlkVG9Vc2V9OiB7ZGF0YUlkOiBzdHJpbmc7IGRhdGFJZFRvVXNlOiBzdHJpbmd9XG4pOiBUIHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoc3RhdGUsIHN0YXRlLnNjaGVtYSk7XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gc3RhdGUubWVyZ2Vycy5yZWR1Y2UoXG4gICAgKFxuICAgICAgYWNjdVN0YXRlLFxuICAgICAge3Byb3AsIHRvTWVyZ2VQcm9wLCByZXBsYWNlUGFyZW50RGF0YXNldElkcywgZ2V0Q2hpbGREYXRhc2V0SWRzLCBzYXZlVW5tZXJnZWQsIHByZXNlcnZlT3JkZXJ9XG4gICAgKSA9PiB7XG4gICAgICAvLyBnZXQgZGF0YXNldCBpZHMgdGhhdCBhcmUgZGVwZW5kcyBvbiB0aGlzIGRhdGFzZXRcbiAgICAgIGNvbnN0IHByb3BzID0gdG9BcnJheShwcm9wKTtcbiAgICAgIGNvbnN0IHRvTWVyZ2VQcm9wcyA9IHRvQXJyYXkodG9NZXJnZVByb3ApO1xuICAgICAgY29uc3Qgc2F2ZWRQcm9wcyA9IHNlcmlhbGl6ZWRTdGF0ZSA/IHByb3BzLm1hcChwID0+IHNlcmlhbGl6ZWRTdGF0ZVtwXSkgOiBbXTtcblxuICAgICAgbGV0IHJlcGxhY2VkU3RhdGUgPSBhY2N1U3RhdGU7XG4gICAgICBzYXZlZFByb3BzLmZvckVhY2goKHByb3BWYWx1ZSwgaSkgPT4ge1xuICAgICAgICBjb25zdCBtZXJnZXJPcHRpb25zID0ge1xuICAgICAgICAgIHByb3A6IHByb3BzW2ldLFxuICAgICAgICAgIHRvTWVyZ2VQcm9wOiB0b01lcmdlUHJvcHNbaV0sXG4gICAgICAgICAgZ2V0Q2hpbGREYXRhc2V0SWRzLFxuICAgICAgICAgIHNhdmVVbm1lcmdlZFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlcGxhY2VkSXRlbSA9XG4gICAgICAgICAgcmVwbGFjZVBhcmVudERhdGFzZXRJZHM/Lihwcm9wVmFsdWUsIGRhdGFJZCwgZGF0YUlkVG9Vc2UpIHx8XG4gICAgICAgICAgZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzKHByb3BWYWx1ZSwgZGF0YUlkLCBkYXRhSWRUb1VzZSk7XG4gICAgICAgIHJlcGxhY2VkU3RhdGUgPSByZXBsYWNlZEl0ZW1cbiAgICAgICAgICA/IHJlcGxhY2VQcm9wVmFsdWVJblN0YXRlKHJlcGxhY2VkU3RhdGUsIHJlcGxhY2VkSXRlbSwgbWVyZ2VyT3B0aW9ucylcbiAgICAgICAgICA6IHJlcGxhY2VkU3RhdGU7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIG1lcmdlck9wdGlvbnMudG9NZXJnZVByb3AgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIHJlcGxhY2VkU3RhdGVbbWVyZ2VyT3B0aW9ucy50b01lcmdlUHJvcF0/Lmxlbmd0aCAmJlxuICAgICAgICAgIHByZXNlcnZlT3JkZXJcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVwbGFjZWRTdGF0ZVtwcmVzZXJ2ZU9yZGVyXSA9IHByb3BWYWx1ZS5tYXAoaXRlbSA9PiBpdGVtLmlkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByZXBsYWNlZFN0YXRlO1xuICAgIH0sXG4gICAgc3RhdGVcbiAgKTtcblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlUHJvcFZhbHVlSW5TdGF0ZShcbiAgc3RhdGUsXG4gIHJlcGxhY2VkSXRlbSxcbiAge3Byb3AsIHRvTWVyZ2VQcm9wLCBnZXRDaGlsZERhdGFzZXRJZHMsIHNhdmVVbm1lcmdlZH1cbikge1xuICAvLyBwcm9wIGlzIGRlcGVuZHMgb24gdGhlIGRhdGFzZXQgdG8gYmUgcmVwbGFjZWRcbiAgLy8gcmVtb3ZlIHByb3AgZnJvbSBzdGF0ZSwgYW5kIG1vdmUgaXQgdG8gdG9CZU1lcmdlZFxuICBsZXQgbmV4dFN0YXRlID0gbW92ZVZhbHVlVG9CZU1lcmdlZChzdGF0ZSwgcmVwbGFjZWRJdGVtLCB7cHJvcCwgdG9NZXJnZVByb3AsIHNhdmVVbm1lcmdlZH0pO1xuICBjb25zdCBjaGlsZERhdGFJZHMgPSBnZXRDaGlsZERhdGFzZXRJZHM/LihyZXBsYWNlZEl0ZW0pIHx8IGZpbmRDaGlsZERhdGFzZXRJZHMocmVwbGFjZWRJdGVtKTtcblxuICBpZiAoY2hpbGREYXRhSWRzKSB7XG4gICAgbmV4dFN0YXRlID0gdG9BcnJheShjaGlsZERhdGFJZHMpLnJlZHVjZSgoYWNjdSwgY2hpbGREYXRhSWQpID0+IHtcbiAgICAgIC8vIHNob3VsZG4ndCBuZWVkIHRvIGNoYW5nZSBjaGlsZCBkYXRhc2V0IGlkLFxuICAgICAgLy8gYnV0IHN0aWxsIG5lZWQgdG8gbW92ZSBvdXQgb2Ygc3RhdGUgYW5kIG1lcmdlIGJhY2sgaW5cbiAgICAgIHJldHVybiByZXBsYWNlRGF0YXNldEFuZERlcHMoYWNjdSwgY2hpbGREYXRhSWQsIGNoaWxkRGF0YUlkKTtcbiAgICB9LCBuZXh0U3RhdGUpO1xuICB9XG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLEtBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGdCQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxVQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxPQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxVQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxJQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTSxRQUFBLEdBQUFQLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTyxLQUFBLEdBQUFSLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBUSxLQUFBLEdBQUFULHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBUyxJQUFBLEdBQUFWLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBVSxNQUFBLEdBQUFDLHVCQUFBLENBQUFYLE9BQUE7QUFFQSxJQUFBWSxPQUFBLEdBQUFaLE9BQUE7QUFRQSxJQUFBYSxRQUFBLEdBQUFiLE9BQUE7QUEyQkEsSUFBQWMsTUFBQSxHQUFBZCxPQUFBO0FBNkJBLElBQUFlLFlBQUEsR0FBQWYsT0FBQTtBQUVBLElBQUFnQixVQUFBLEdBQUFoQixPQUFBO0FBbUJBLElBQUFpQixPQUFBLEdBQUFqQixPQUFBO0FBQ0EsSUFBQWtCLGdCQUFBLEdBQUFsQixPQUFBO0FBVUEsSUFBQW1CLGNBQUEsR0FBQW5CLE9BQUE7QUFDQSxJQUFBb0IsZUFBQSxHQUFBcEIsT0FBQTtBQVVBLElBQUFxQixRQUFBLEdBQUF0QixzQkFBQSxDQUFBQyxPQUFB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
3859
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYmJveCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2NvcHlUb0NsaXBib2FyZCIsIl9kZWVwbWVyZ2UiLCJfd2luZG93IiwiX2Nsb25lRGVlcCIsIl9nZXQiLCJfaXNFcXVhbCIsIl9waWNrIiwiX3VuaXEiLCJfeG9yIiwiX3Rhc2tzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfdGFza3MyIiwiX2FjdGlvbnMiLCJfdXRpbHMiLCJfY29tbW9uVXRpbHMiLCJfY29uc3RhbnRzIiwiX2xheWVycyIsIl9jb21wb3NlckhlbHBlcnMiLCJfbWVyZ2VySGFuZGxlciIsIl92aXNTdGF0ZU1lcmdlciIsIl9zY2hlbWFzIiwiX3RhYmxlIiwiX2ludGVyYWN0aW9uVXRpbHMiLCJfbGF5ZXJVdGlscyIsIl9lZmZlY3RzIiwiX2RhdGFVdGlscyIsIl9leGNsdWRlZCIsIl9leGNsdWRlZDIiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YzIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiX3RvUHJvcGVydHlLZXkiLCJfdG9QcmltaXRpdmUiLCJTeW1ib2wiLCJ0b1ByaW1pdGl2ZSIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJsZW5ndGgiLCJfbiIsIkYiLCJzIiwiZG9uZSIsInZhbHVlIiwiZiIsIm8iLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRpc2FibGVTdGFja0NhcHR1cmluZyIsInZpc1N0YXRlVXBkYXRlcnMiLCJkZWZhdWx0SW50ZXJhY3Rpb25Db25maWciLCJleHBvcnRzIiwidG9vbHRpcCIsImlkIiwibGFiZWwiLCJlbmFibGVkIiwiY29uZmlnIiwiZmllbGRzVG9TaG93IiwiY29tcGFyZU1vZGUiLCJjb21wYXJlVHlwZSIsIkNPTVBBUkVfVFlQRVMiLCJBQlNPTFVURSIsImdlb2NvZGVyIiwicG9zaXRpb24iLCJsaW1pdFNlYXJjaCIsImJydXNoIiwic2l6ZSIsImNvb3JkaW5hdGUiLCJERUZBVUxUX0FOSU1BVElPTl9DT05GSUciLCJkb21haW4iLCJjdXJyZW50VGltZSIsInNwZWVkIiwiaXNBbmltYXRpbmciLCJ0aW1lU3RlcHMiLCJ0aW1lRm9ybWF0IiwidGltZXpvbmUiLCJkZWZhdWx0VGltZUZvcm1hdCIsImhpZGVDb250cm9sIiwiZHVyYXRpb24iLCJERUZBVUxUX0VESVRPUiIsIm1vZGUiLCJFRElUT1JfTU9ERVMiLCJEUkFXX1BPTFlHT04iLCJmZWF0dXJlcyIsInNlbGVjdGVkRmVhdHVyZSIsInZpc2libGUiLCJJTklUSUFMX1ZJU19TVEFURSIsIm1hcEluZm8iLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwibGF5ZXJzIiwibGF5ZXJEYXRhIiwibGF5ZXJUb0JlTWVyZ2VkIiwibGF5ZXJPcmRlciIsImZpbHRlcnMiLCJmaWx0ZXJUb0JlTWVyZ2VkIiwiZGF0YXNldHMiLCJlZGl0aW5nRGF0YXNldCIsInVuZGVmaW5lZCIsImVmZmVjdHMiLCJlZmZlY3RPcmRlciIsImFubm90YXRpb25zIiwiYW5ub3RhdGlvbnNUb0JlTWVyZ2VkIiwic2VsZWN0ZWRBbm5vdGF0aW9uSWQiLCJpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dCIsImludGVyYWN0aW9uQ29uZmlnIiwiaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkIiwibGF5ZXJCbGVuZGluZyIsIm92ZXJsYXlCbGVuZGluZyIsImhvdmVySW5mbyIsImNsaWNrZWQiLCJtb3VzZVBvcyIsIm1heERlZmF1bHRUb29sdGlwcyIsIk1BWF9ERUZBVUxUX1RPT0xUSVBTIiwic3BsaXRNYXBzIiwic3BsaXRNYXBzVG9CZU1lcmdlZCIsImlzTWVyZ2luZ0RhdGFzZXRzIiwibGF5ZXJDbGFzc2VzIiwiTGF5ZXJDbGFzc2VzIiwiYW5pbWF0aW9uQ29uZmlnIiwiZWRpdG9yIiwiZmlsZUxvYWRpbmciLCJmaWxlTG9hZGluZ1Byb2dyZXNzIiwibG9hZGluZ0luZGljYXRvclZhbHVlIiwibG9hZGVycyIsImxvYWRPcHRpb25zIiwibWVyZ2VycyIsIlZJU19TVEFURV9NRVJHRVJTIiwic2NoZW1hIiwiS2VwbGVyR0xTY2hlbWEiLCJBQ1RJT05fVEFTS19GSVRfQk9VTkRTIiwiVGFzayIsImZyb21DYWxsYmFjayIsIl8iLCJjYiIsIkFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04iLCJ1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEiLCJzdGF0ZSIsIl9yZWYiLCJsYXllciIsImlkeCIsIm1hcCIsImx5ciIsImQiLCJ1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlIiwibmV3U3RhdGUiLCJpc1Zpc2libGUiLCJhZGROZXdMYXllcnNUb1NwbGl0TWFwIiwicmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzIiwiYW5pbWF0aW9uIiwidXBkYXRlQW5pbWF0aW9uRG9tYWluIiwicGlja0NoYW5nZWRQcm9wcyIsInByZXYiLCJjaGFuZ2VkUHJvcHMiLCJwaWNrUHJvcHNPZiIsIm9iaiIsImtleSIsInByb3RvdHlwZSIsImlzRXF1YWwiLCJWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTIiwiYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIiLCJhY3Rpb24iLCJfc2VyaWFsaXplTGF5ZXIiLCJvbGRMYXllcklkIiwibmV3TGF5ZXJDb25maWciLCJsYXllckluZGV4IiwibmV3UGFyc2VkTGF5ZXIiLCJwYXJzZUxheWVyQ29uZmlnIiwib2xkTGF5ZXIiLCJmaW5kIiwibCIsImRhdGFzZXQiLCJkYXRhSWQiLCJuZXdMYXllciIsInZhbGlkYXRlTGF5ZXJXaXRoRGF0YSIsIm5leHRTdGF0ZSIsInR5cGUiLCJvbGRMYXllckluZGV4IiwiZmluZEluZGV4IiwibGF5ZXJUeXBlQ2hhbmdlVXBkYXRlciIsImxheWVyVHlwZUNoYW5nZSIsIm5ld0xheWVySWQiLCJhcHBseUxheWVyQ29uZmlnIiwic2VyaWFsaXplZE9sZExheWVyIiwic2VyaWFsaXplTGF5ZXIiLCJzZXJpYWxpemVkTmV3TGF5ZXIiLCJjaGFuZ2VkIiwidmlzQ29uZmlnIiwibGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyIiwibGF5ZXJWaXNDb25maWdDaGFuZ2UiLCJ2aXN1YWxDaGFubmVscyIsImNoYW5uZWxOYW1lIiwiY2hhbm5lbCIsImNoYW5uZWxQcm9wTmFtZXMiLCJwcm9wIiwic29tZSIsImxheWVyVmlzdWFsQ2hhbm5lbENoYW5nZVVwZGF0ZXIiLCJsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UiLCJwaWNrIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJlcnIiLCJsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJsYXllckNvbmZpZ0NoYW5nZSIsInVwZGF0ZWxheWVyVmlzaWJpbHR5IiwiZmlsdGVySW5kZXgiLCJmaWx0ZXJTeW5jZWRXaXRoVGltZWxpbmUiLCJpc0xheWVyQW5pbWF0YWJsZSIsInN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyIiwiZW5hYmxlIiwiZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMiLCJwcm9wcyIsIm5ld0NvbmZpZyIsIl9hY3Rpb24kbmV3Q29uZmlnIiwicmVzdENvbmZpZyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllczIiLCJzdGF0ZVdpdGhEYXRhSWQiLCJsYXllckRhdGFJZENoYW5nZVVwZGF0ZXIiLCJuZXh0TGF5ZXIiLCJ1cGRhdGVMYXllckNvbmZpZyIsInNob3VsZENhbGN1bGF0ZUxheWVyRGF0YSIsIm9sZExheWVyRGF0YSIsInVwZGF0ZUxheWVyRGF0YVJlc3VsdCIsImNhbGN1bGF0ZUxheWVyRGF0YSIsImxheWVyQW5pbWF0aW9uQ2hhbmdlVXBkYXRlciIsIl9jYWxjdWxhdGVMYXllckRhdGEiLCJsYXllclRvZ2dsZVZpc2liaWxpdHlVcGRhdGVyIiwibGF5ZXJJZCIsInNwbGl0TWFwSWQiLCJtYXBJbmRleCIsInNtIiwidG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyIiwidG9nZ2xlTGF5ZXJGb3JNYXAiLCJzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSIsImxheWVyU2V0SXNWYWxpZFVwZGF0ZXIiLCJpc1ZhbGlkIiwibGF5ZXJUb1VwZGF0ZSIsIm5ld0RhdGEiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhMiIsImFkZE9yUmVtb3ZlVGV4dExhYmVscyIsIm5ld0ZpZWxkcyIsInRleHRMYWJlbCIsImRlZmF1bHRUZXh0TGFiZWwiLCJERUZBVUxUX1RFWFRfTEFCRUwiLCJuZXdUZXh0TGFiZWwiLCJjdXJyZW50RmllbGRzIiwidGwiLCJmaWVsZCIsImFkZEZpZWxkcyIsImluY2x1ZGVzIiwiZGVsZXRlRmllbGRzIiwiZmQiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwiYWYiLCJ1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUiLCJzcGxpY2UiLCJsYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXIiLCJfb2xkTGF5ZXIkZ2V0RGVmYXVsdEwiLCJfb2xkTGF5ZXIkZ2V0RGVmYXVsdEwyIiwiZ2V0RGVmYXVsdExheWVyQ29uZmlnIiwidmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEiLCJsb2FkZWRMYXllciIsImFsbG93RW1wdHlDb2x1bW4iLCJpc1ZhbGlkVG9TYXZlIiwidmFsaWRhdGVkIiwib2xkTGF5ZXJUeXBlIiwibmV3RGF0YXNldEZpZWxkcyIsImZpZWxkcyIsInJlbWFwcGVkRmllbGRzIiwidmFsdWVzIiwiX3JlZjIiLCJmaWVsZEtleSIsImN1cnJlbnRGaWVsZCIsIm1hdGNoZWQiLCJfcmVmMyIsInZhbGlkYXRlVmlzdWFsQ2hhbm5lbCIsImlzQ29uZmlnQWN0aXZlIiwidXBkYXRlTGF5ZXJEb21haW4iLCJfY2FsY3VsYXRlTGF5ZXJEYXRhMyIsInNldEluaXRpYWxMYXllckNvbmZpZyIsInJlc3VsdCIsImZpbmREZWZhdWx0TGF5ZXJQcm9wcyIsIm5ld1R5cGUiLCJvbGRJZCIsIkNvbnNvbGUiLCJlcnJvciIsImRlZmF1bHRMYXllclByb3BzIiwiYXNzaWduQ29uZmlnVG9MYXllciIsInZpc0NvbmZpZ1NldHRpbmdzIiwiaXNMYXllckhvdmVyZWQiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNCIsInNldHRpbmdzIiwiX3NldHRpbmdzJGxheWVycyIsIm9sZExheWVyTWFwIiwib3RoZXJMYXllcnMiLCJuZXdWaXNDb25maWciLCJ1cGRhdGVMYXllclZpc0NvbmZpZyIsInVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbCIsInVwZGF0ZWRTdGF0ZSIsInZpc3VhbENoYW5uZWwiLCJjaGFubmVsU2NhbGVUeXBlIiwiQ0hBTk5FTF9TQ0FMRVMiLCJjb2xvciIsInVwZGF0ZUxheWVyQ29sb3JVSSIsInJhbmdlIiwiY29sb3JSYW5nZUNvbmZpZyIsImNvbG9yVUkiLCJjdXN0b21CcmVha3MiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNSIsInNjYWxlIiwiU0NBTEVfVFlQRVMiLCJjdXN0b21PcmRpbmFsIiwiY3VzdG9tUGFsZXR0ZSIsImluaXRDdXN0b21QYWxldHRlQnlDdXN0b21TY2FsZSIsIm9yZGluYWxEb21haW4iLCJjb2xvckJyZWFrcyIsInNob3dDb2xvckNoYXJ0IiwiZWRpdEJvdW5kcyIsIl9jYWxjdWxhdGVMYXllckRhdGE2Iiwic2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlciIsIl9yZWY0IiwicmVkdWNlIiwiYWNjdSIsInNldEZpbHRlckFuaW1hdGlvblRpbWVVcGRhdGVyIiwic2V0RmlsdGVyVXBkYXRlciIsInNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXIiLCJfcmVmNSIsImFuaW1hdGlvbldpbmRvdyIsIm5ld0ZpbHRlciIsInN3YXBfIiwibmV3U3luY1RpbWVsaW5lTW9kZSIsImdldFN5bmNBbmltYXRpb25Nb2RlIiwic2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIiLCJhcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXIiLCJfc2VyaWFsaXplRmlsdGVyIiwiZmlsdGVySWQiLCJvbGRGaWx0ZXIiLCJzZXJpYWxpemVkT2xkRmlsdGVyIiwic2VyaWFsaXplRmlsdGVyIiwic2VyaWFsaXplZE5ld0ZpbHRlciIsInNldEZpbHRlciIsIl9hY3Rpb24kdmFsdWVJbmRleCIsInZhbHVlSW5kZXgiLCJ0b0FycmF5IiwiZGF0YXNldElkc1RvRmlsdGVyIiwiX2xvb3AiLCJyZXMiLCJ2IiwiX3VwZGF0ZUZpbHRlclByb3AiLCJlbmxhcmdlZEZpbHRlciIsInZpZXciLCJGSUxURVJfVklFV19UWVBFUyIsImVubGFyZ2VkIiwic2lkZSIsImZpbHRlcmVkRGF0YXNldHMiLCJhcHBseUZpbHRlcnNUb0RhdGFzZXRzIiwidW5pcSIsImZpbHRlcldpdGhQTG90IiwidXBkYXRlRmlsdGVyUGxvdCIsInVwZGF0ZUFsbExheWVyRG9tYWluRGF0YSIsIkZJTFRFUl9UWVBFUyIsInRpbWVSYW5nZSIsImFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIiLCJfdXBkYXRlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4IiwiX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleCIsIm5leHRWYWx1ZSIsImdldERlZmF1bHRGaWx0ZXIiLCJyZW1vdmVGaWx0ZXJQbG90IiwiX2kiLCJfYXJyIiwibmV4dFZhbCIsImRvbWFpblN0ZXBzIiwibWVyZ2VGaWx0ZXJEb21haW4iLCJuZXh0RmlsdGVyIiwic3RlcCIsImFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4iLCJkYXRhc2V0SWRzIiwiRklMVEVSX1VQREFURVJfUFJPUFMiLCJvbGREYXRhSWQiLCJkYXRhc2V0SWQiLCJfYXBwbHlGaWx0ZXJGaWVsZE5hbWUiLCJhcHBseUZpbHRlckZpZWxkTmFtZSIsIm1lcmdlRG9tYWluIiwidXBkYXRlZEZpbHRlciIsIm5ld0RhdGFzZXQiLCJncHUiLCJzZXRGaWx0ZXJHcHVNb2RlIiwiYXNzaWduR3B1Q2hhbm5lbCIsImxheWVySWREaWZmZXJlbmNlIiwieG9yIiwibGF5ZXJEYXRhSWRzIiwibGlkIiwibmV3RGF0YUlkcyIsInNldEZpbHRlclBsb3RVcGRhdGVyIiwiX3JlZjYiLCJuZXdQcm9wIiwicGlja18iLCJtZXJnZV8iLCJwbG90VHlwZSIsImNoYXJ0VHlwZSIsInlBeGlzIiwiUExPVF9UWVBFUyIsImxpbmVDaGFydCIsImhpc3RvZ3JhbSIsImFkZEZpbHRlclVwZGF0ZXIiLCJjcmVhdGVPclVwZGF0ZUZpbHRlclVwZGF0ZXIiLCJvcmlnaW5hbEluZGV4IiwiaW5kZXgiLCJsYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyIiwiX3JlZjciLCJvbGRWaXhDb25maWciLCJ0b2dnbGVGaWx0ZXJBbmltYXRpb25VcGRhdGVyIiwiaXNGaWx0ZXJBbmltYXRpb25Db25maWciLCJzZXRBbmltYXRpb25Db25maWdVcGRhdGVyIiwiaXNTaWRlRmlsdGVyIiwiYXBwbHlGaWx0ZXJDb25maWciLCJ0b2dnbGVMYXllckFuaW1hdGlvblVwZGF0ZXIiLCJ0b2dnbGVMYXllckFuaW1hdGlvbkNvbnRyb2xVcGRhdGVyIiwidXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyIiwidXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIiLCJfcmVmOCIsInNldEZpbHRlclZpZXdVcGRhdGVyIiwic2hvdWxkUmVzZXRPdGhlckZpbHRlcnNWaWV3IiwidG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXIiLCJmZWF0dXJlVG9GaWx0ZXJWYWx1ZSIsInJlbW92ZUZpbHRlclVwZGF0ZXIiLCJfc3RhdGUkZmlsdGVycyRpZHgiLCJuZXdGaWx0ZXJzIiwibmV3RWRpdG9yIiwiZ2V0RmlsdGVySWRJbkZlYXR1cmUiLCJhZGRMYXllclVwZGF0ZXIiLCJuZXdMYXllckRhdGEiLCJjcmVhdGVMYXllckZyb21Db25maWciLCJ3YXJuIiwiX2FjdGlvbiRkYXRhc2V0SWQiLCJkZWZhdWx0RGF0YXNldCIsIkxheWVyIiwicmVtb3ZlTGF5ZXJVcGRhdGVyIiwiX3JlZjkiLCJpc0Zpbml0ZSIsImxheWVyVG9SZW1vdmUiLCJmaWx0ZXJPdXRCeUlkIiwicmVtb3ZlRWxlbWVudEF0SW5kZXgiLCJyZW9yZGVyTGF5ZXJVcGRhdGVyIiwiX3JlZjEwIiwib3JkZXIiLCJkdXBsaWNhdGVMYXllclVwZGF0ZXIiLCJfcmVmMTEiLCJvcmlnaW5hbCIsIm9yaWdpbmFsTGF5ZXJPcmRlcklkeCIsIm5ld0xhYmVsIiwicG9zdGZpeCIsImdlbmVyYXRlSGFzaElkIiwiTEFZRVJfSURfTEVOR1RIIiwibmV3TGF5ZXJPcmRlciIsImFycmF5SW5zZXJ0IiwiYWRkRWZmZWN0VXBkYXRlciIsIl9hY3Rpb24kY29uZmlnIiwiX2FjdGlvbiRjb25maWcyIiwiX2FjdGlvbiRjb25maWczIiwiTElHSFRfQU5EX1NIQURPV19FRkZFQ1QiLCJlZmZlY3QiLCJESVNUQU5DRV9GT0dfVFlQRSIsIlNVUkZBQ0VfRk9HX1RZUEUiLCJuZXdFZmZlY3QiLCJjcmVhdGVFZmZlY3QiLCJzZXRQcm9wcyIsImZpeEVmZmVjdE9yZGVyIiwicmVtb3ZlRWZmZWN0VXBkYXRlciIsIl9yZWYxMiIsImVmZmVjdFRvUmVtb3ZlIiwiZWZmZWN0SWQiLCJyZW9yZGVyRWZmZWN0VXBkYXRlciIsIl9yZWYxMyIsInVwZGF0ZUVmZmVjdFVwZGF0ZXIiLCJfcmVmMTQiLCJpZHgyIiwiZWZmZWN0T3JkZXJJZCIsIm5ld0VmZmVjdHMiLCJtYWtlTmV3QW5ub3RhdGlvbiIsIl9jb25maWcka2luZCIsIl9jb25maWckaWQiLCJfY29uZmlnJGlzVmlzaWJsZSIsIl9jb25maWckYXV0b1NpemUiLCJfY29uZmlnJGF1dG9TaXplWSIsIl9jb25maWckYW5jaG9yUG9pbnQiLCJfY29uZmlnJGxhYmVsIiwiX2NvbmZpZyRsaW5lQ29sb3IiLCJfY29uZmlnJGxpbmVXaWR0aCIsIl9jb25maWckdGV4dFdpZHRoIiwiX2NvbmZpZyR0ZXh0SGVpZ2h0IiwiX2NvbmZpZyR0ZXh0VmVydGljYWxBIiwiX2FybUxlbmd0aCIsIl9hbmdsZSIsIl9hcm1MZW5ndGgyIiwiX2FuZ2xlMiIsIl9hcm1MZW5ndGgzIiwiX2FuZ2xlMyIsIl9yYWRpdXNJbk1ldGVycyIsImtpbmQiLCJJTklUSUFMX0FOTk9UQVRJT05fS0lORCIsImJhc2UiLCJhdXRvU2l6ZSIsImF1dG9TaXplWSIsImFuY2hvclBvaW50IiwibGluZUNvbG9yIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IiLCJsaW5lV2lkdGgiLCJJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCIsInRleHRXaWR0aCIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX1dJRFRIIiwidGV4dEhlaWdodCIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX0hFSUdIVCIsInRleHRWZXJ0aWNhbEFsaWduIiwiQW5ub3RhdGlvbktpbmQiLCJQT0lOVCIsImFybUxlbmd0aCIsIklOSVRJQUxfQU5OT1RBVElPTl9BUk1fTEVOR1RIIiwiYW5nbGUiLCJJTklUSUFMX0FOTk9UQVRJT05fQU5HTEUiLCJBUlJPVyIsIkNJUkNMRSIsInJhZGl1c0luTWV0ZXJzIiwiVEVYVCIsImFkZEFubm90YXRpb25VcGRhdGVyIiwibmV3QW5ub3RhdGlvbiIsInJlbW92ZUFubm90YXRpb25VcGRhdGVyIiwiX3JlZjE1IiwidXBkYXRlQW5ub3RhdGlvblVwZGF0ZXIiLCJfcmVmMTYiLCJuZXh0QW5ub3RhdGlvbiIsIm5ld0Fubm90YXRpb25zIiwiZHVwbGljYXRlQW5ub3RhdGlvblVwZGF0ZXIiLCJfcmVmMTciLCJjbG9uZURlZXAiLCJzZXRTZWxlY3RlZEFubm90YXRpb25VcGRhdGVyIiwiX3JlZjE4IiwiaXNFZGl0aW5nVGV4dCIsInJlbW92ZURhdGFzZXRVcGRhdGVyIiwiZGF0YXNldEtleSIsIl9zdGF0ZSRkYXRhc2V0cyIsIm5ld0RhdGFzZXRzIiwibGF5ZXJzVG9SZW1vdmUiLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwiaW5kZXhPZiIsInJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWciLCJfcmVmMTkiLCJfaW50ZXJhY3Rpb25Db25maWciLCJfY29uZmlnJGZpZWxkc1RvU2hvdyIsInVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyIiwidXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlciIsInNob3dEYXRhc2V0VGFibGVVcGRhdGVyIiwidXBkYXRlVGFibGVDb2xvclVwZGF0ZXIiLCJ1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyIiwibmV3Q29sb3IiLCJyZXNldE1hcENvbmZpZ1VwZGF0ZXIiLCJpbml0aWFsU3RhdGUiLCJyZWNlaXZlTWFwQ29uZmlnVXBkYXRlciIsIl9yZWYyMCIsIl9yZWYyMCRwYXlsb2FkIiwicGF5bG9hZCIsIl9yZWYyMCRwYXlsb2FkJGNvbmZpZyIsIl9yZWYyMCRwYXlsb2FkJG9wdGlvbiIsIm9wdGlvbnMiLCJ2aXNTdGF0ZSIsImtlZXBFeGlzdGluZ0NvbmZpZyIsIm1lcmdlZFN0YXRlIiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsIm1lcmdlciIsImlzVmFsaWRNZXJnZXIiLCJoYXNQcm9wc1RvTWVyZ2UiLCJtZXJnZSIsImdldFByb3BWYWx1ZVRvTWVyZ2VyIiwidG9NZXJnZVByb3AiLCJsYXllckhvdmVyVXBkYXRlciIsImluZm8iLCJpbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJjb250cmFkaWN0IiwiayIsImxheWVyQ2xpY2tVcGRhdGVyIiwicGlubmVkIiwicGlja2VkIiwibWFwQ2xpY2tVcGRhdGVyIiwibW91c2VNb3ZlVXBkYXRlciIsIl9yZWYyMSIsImV2dCIsInBvaW50IiwibW91c2VQb3NpdGlvbiIsImxuZ0xhdCIsInRvZ2dsZVNwbGl0TWFwVXBkYXRlciIsImNvbXB1dGVTcGxpdE1hcExheWVycyIsImR1cGxpY2F0ZSIsImNsb3NlU3BlY2lmaWNNYXBBdEluZGV4IiwiX3JlZjIyIiwidXBkYXRlVmlzRGF0YVVwZGF0ZXIiLCJjcmVhdGVEYXRhc2V0VGFza3MiLCJub3RpZmljYXRpb25UYXNrcyIsIl9yZWYyMyIsImRhdGFzZXRJbmRleCIsIl9yZWYyMyRpbmZvIiwicmVzdCIsInRhc2siLCJjcmVhdGVOZXdEYXRhRW50cnkiLCJhZGROb3RpZmljYXRpb24iLCJlcnJvck5vdGlmaWNhdGlvbiIsIm1lc3NhZ2UiLCJkYXRhc2V0c0FsbFNldHRsZWRUYXNrIiwiYWxsU2V0dGxlZCIsInJlc3VsdHMiLCJjcmVhdGVOZXdEYXRhc2V0U3VjY2VzcyIsImFkZFRvTWFwT3B0aW9ucyIsInNldExvYWRpbmdJbmRpY2F0b3JVcGRhdGVyIiwicGF5bG9hZF8iLCJjaGFuZ2UiLCJ3aXRoVGFzayIsImNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzVXBkYXRlciIsIl9hY3Rpb24kcGF5bG9hZCIsIm5ld0RhdGFFbnRyaWVzIiwic3RhdHVzIiwiQUNUSU9OX1RBU0siLCJyZWFzb24iLCJtZXJnZURhdGFzZXRzQnlPcmRlciIsImxheWVyTWVyZ2VycyIsIm0iLCJ3YWl0Rm9yTGF5ZXJEYXRhIiwiZGF0YXNldE1lcmdlcnMiLCJwb3N0TWVyZ2VyUGF5bG9hZCIsImFwcGx5TWVyZ2Vyc1VwZGF0ZXIiLCJtZXJnZVN0YXRlUmVzdWx0IiwibWVyZ2VTdGF0ZUZyb21NZXJnZXJzIiwiYWxsTWVyZ2VkIiwicG9zdE1lcmdlVXBkYXRlciIsImxheWVyVmlzQ29uZmlnRnJvbUFkZERhdGFPcHRpb25zIiwicGF0Y2giLCJsYXllclZpc0NvbmZpZyIsIl90eXBlb2YyIiwiZkRhdGFJZCIsImRhdGFzZXRGaWx0ZXJlZCIsImRhdGFFbXB0eSIsIm5ld0xheWVycyIsImF1dG9DcmVhdGVMYXllcnMiLCJhZGREZWZhdWx0TGF5ZXJzIiwibWVyZ2VMYXllclZpc0NvbmZpZ0Zvck5ld0RhdGFzZXRzIiwidG9vbHRpcEZpZWxkcyIsImF1dG9DcmVhdGVUb29sdGlwcyIsImFkZERlZmF1bHRUb29sdGlwcyIsInVwZGF0ZWREYXRhc2V0cyIsImNlbnRlck1hcCIsImJvdW5kcyIsImZpbmRNYXBCb3VuZHMiLCJmaXRCb3VuZHNUYXNrIiwiZml0TWFwQm91bmRzIiwicmVuYW1lRGF0YXNldFVwZGF0ZXIiLCJBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTIiwidmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMiLCJ2YWxpZGF0ZWRQcm9wcyIsImVudHJpZXMiLCJhY2MiLCJlbnRyeSIsIl9lbnRyeSIsIl9zbGljZWRUb0FycmF5MiIsImlzUmdiQ29sb3IiLCJpc1BsYWluT2JqZWN0IiwiZGVlcG1lcmdlIiwiZXhpc3RpbmciLCJjb3B5VGFibGVBbmRVcGRhdGUiLCJfc3RhdGUkc3BsaXRNYXBzJGluZGUiLCJpbmRleFRvUmV0cmlldmUiLCJtYXBMYXllcnMiLCJsb2FkRmlsZXNVcGRhdGVyIiwiZmlsZXMiLCJfYWN0aW9uJG9uRmluaXNoIiwib25GaW5pc2giLCJsb2FkRmlsZXNTdWNjZXNzIiwiaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJmaWxlQ2FjaGUiLCJmaWxlc1RvTG9hZCIsImxvYWROZXh0RmlsZVVwZGF0ZXIiLCJsb2FkRmlsZVN0ZXBTdWNjZXNzVXBkYXRlciIsImZpbGVOYW1lIiwiX3N0YXRlJGZpbGVMb2FkaW5nIiwic3RhdGVXaXRoUHJvZ3Jlc3MiLCJ1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlciIsInByb2dyZXNzIiwicGVyY2VudCIsInN0YXRlV2l0aENhY2hlIiwiREVMQVlfVEFTSyIsImxvYWROZXh0RmlsZSIsIl9maWxlc1RvTG9hZCIsIl90b0FycmF5MiIsImZpbGUiLCJyZW1haW5pbmdGaWxlc1RvTG9hZCIsIm1ha2VMb2FkRmlsZVRhc2siLCJMT0FEX0ZJTEVfVEFTSyIsImJpbWFwIiwiZ2VuIiwibmV4dEZpbGVCYXRjaCIsInByb2Nlc3NGaWxlQ29udGVudCIsImNvbnRlbnQiLCJsb2FkRmlsZXNFcnIiLCJwcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyIiwiX2FjdGlvbiRwYXlsb2FkMiIsIlBST0NFU1NfRklMRV9EQVRBIiwibG9hZEZpbGVTdGVwU3VjY2VzcyIsInBhcnNlUHJvZ3Jlc3MiLCJwcmV2UHJvZ3Jlc3MiLCJuZXh0RmlsZUJhdGNoVXBkYXRlciIsIl9yZWYyNCIsIl9hY2N1bXVsYXRlZCRkYXRhIiwiX3JlZjI0JHBheWxvYWQiLCJhY2N1bXVsYXRlZCIsImdldEFwcGxpY2F0aW9uQ29uZmlnIiwidXNlQXJyb3dQcm9ncmVzc2l2ZUxvYWRpbmciLCJlbmRzV2l0aCIsImRhdGEiLCJVTldSQVBfVEFTSyIsIl9yZWYyNSIsImxvYWRGaWxlc0VyclVwZGF0ZXIiLCJfcmVmMjYiLCJfc3RhdGUkZmlsZUxvYWRpbmcyIiwiYXBwbHlDUFVGaWx0ZXJVcGRhdGVyIiwiX3JlZjI3IiwiZGF0YUlkcyIsImZpbHRlckRhdGFzZXRDUFUiLCJzZXRNYXBJbmZvVXBkYXRlciIsImVtcHR5IiwiZGVmYXVsdExheWVycyIsImZvdW5kTGF5ZXJzIiwiZmluZERlZmF1bHRMYXllciIsImdldExheWVyT3JkZXJGcm9tTGF5ZXJzIiwiZmluZEZpZWxkc1RvU2hvdyIsIm1lcmdlZCIsIl9yZWYyOSIsImZpeGVkRG9tYWluIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTciLCJfc3RhdGUkZmlsdGVycyIsImFuaW1hdGFibGVMYXllcnMiLCJsYXllckRvbWFpbnMiLCJtZXJnZWREb21haW4iLCJtZXJnZVRpbWVEb21haW5zIiwiZ2V0VGltZVdpZGdldFRpdGxlRm9ybWF0dGVyIiwibWVyZ2VkVGltZVN0ZXBzIiwic29ydCIsIkJBU0VfU1BFRUQiLCJGUFMiLCJzeW5jZWRGaWx0ZXIiLCJuZXdBbmltYXRpb25Eb21haW4iLCJpc0luUmFuZ2UiLCJzZXRFZGl0b3JNb2RlVXBkYXRlciIsIl9yZWYzMCIsInNldEZlYXR1cmVzVXBkYXRlciIsIl9yZWYzMSIsIl9sYXN0RmVhdHVyZSRwcm9wZXJ0aSIsIl9sYXN0RmVhdHVyZSRwcm9wZXJ0aTIiLCJfcmVmMzEkZmVhdHVyZXMiLCJsYXN0RmVhdHVyZSIsInByb3BlcnRpZXMiLCJpc0Nsb3NlZCIsInNoYXBlIiwiRURJVCIsImZlYXR1cmUiLCJiYm94IiwiZmVhdHVyZVZhbHVlIiwiZmlsdGVySWR4IiwiZmlsIiwic2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlciIsIl9yZWYzMiIsInNlbGVjdGlvbkNvbnRleHQiLCJkZWxldGVGZWF0dXJlVXBkYXRlciIsIl9yZWYzMyIsInNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXIiLCJub25lRmlsdGVyRmVhdHVyZSIsIl9maWx0ZXIkbGF5ZXJJZCIsImlzTGF5ZXJJbmNsdWRlZCIsImdlbmVyYXRlUG9seWdvbkZpbHRlciIsInNldFBvbHlnb25GaWx0ZXJBbGxMYXllcnNVcGRhdGVyIiwidmlzaWJsZUxheWVySWRzIiwiYWxsTGF5ZXJJZHMiLCJzb3J0VGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjM0IiwiY29sdW1uIiwic29ydE1vZGUiLCJjdXJyZW50TW9kZSIsIlNPUlRfT1JERVIiLCJBU0NFTkRJTkciLCJzb3J0ZWQiLCJzb3J0RGF0YXNldEJ5Q29sdW1uIiwicGluVGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjM1IiwicGluVGFibGVDb2x1bW5zIiwiY29weVRhYmxlQ29sdW1uVXBkYXRlciIsIl9yZWYzNiIsImZpZWxkSWR4IiwidGV4dCIsImRhdGFDb250YWluZXIiLCJyb3ciLCJwYXJzZUZpZWxkVmFsdWUiLCJ2YWx1ZUF0Iiwiam9pbiIsImNvcHkiLCJzZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlciIsIl9yZWYzNyIsImZvcm1hdHMiLCJkaXNwbGF5Rm9ybWF0IiwiX2xheWVyJGNvbmZpZyIsImNvbG9yRmllbGQiLCJ0b2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlciIsInNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyIiwiX3JlZjM4IiwidXBkYXRlcyIsImNoZWNrVGltZUNvbmZpZ0FyZ3MiLCJhbGxvd2VkIiwic2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlciIsIl9yZWYzOSIsImxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZVVwZGF0ZXIiLCJfbGF5ZXIkZmlsdGVyZWRJdGVtQ28iLCJldmVudCIsImRlY2tnbExheWVySWQiLCJjb3VudCIsImZpbHRlcmVkSXRlbUNvdW50Iiwid21zRmVhdHVyZUluZm9VcGRhdGVyIiwiZmVhdHVyZUluZm8iLCJjb25zb2xlIiwib2JqZWN0Iiwid21zRmVhdHVyZUluZm8iLCJfbmV3U3RhdGUkYW5pbWF0aW9uQ28iLCJfbmV3U3RhdGUkYW5pbWF0aW9uQ28yIiwiX2FjdGlvbiRlbmFibGUiLCJpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzIiwiZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyIsImhhc0ludGVydmFsQmFzZWRBbmltYXRpb25MYXllciIsIkJvb2xlYW4iLCJuZXdGaWx0ZXJEb21haW4iLCJBTklNQVRJT05fV0lORE9XIiwiaW50ZXJ2YWwiLCJhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwiLCJuZXdGaWx0ZXJWYWx1ZSIsInN5bmNUaW1lbGluZU1vZGUiLCJTWU5DX1RJTUVMSU5FX01PREVTIiwiZW5kIiwidmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZSIsIl9yZWY0MCIsIk1hdGgiLCJtYXgiLCJ0aW1lbGluZVZhbHVlIiwiZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIiLCJzbmFwVG9NYXJrcyIsImZyZWUiLCJfZmlsdGVyJHN5bmNUaW1lbGluZU0iLCJuZXdNb2RlIiwic3RhcnQiLCJpbnRlcnZhbEluZGV4IiwiY3VycmVudEluZGV4IiwibWV0YSIsInRhcmdldFRpbWVJbnRlcnZhbCIsIm5ld0luZGV4IiwiVElNRV9JTlRFUlZBTFNfT1JERVJFRCIsImhleFRpbGVJbnRlcnZhbCIsIkxheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWwiLCJnZXREZWZhdWx0VGltZUZvcm1hdCIsInVwZGF0ZWRQbG90VHlwZSIsInVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZSIsImFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3ciLCJkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMiLCJkYXRhSWRUb1JlcGxhY2UiLCJfdmFsdWUkY29uZmlnIiwiX3ZhbHVlJGNvbmZpZzIiLCJyZXBsYWNlZCIsImlzT2JqZWN0IiwiZmluZENoaWxkRGF0YXNldElkcyIsIl92YWx1ZSRuZXdEYXRhc2V0IiwiY2hpbGREYXRhSWRzIiwibW92ZVZhbHVlVG9CZU1lcmdlZCIsInByb3BWYWx1ZXMiLCJfcmVmNDIiLCJzYXZlVW5tZXJnZWQiLCJzdGF0ZVJlbW92ZWQiLCJwcm9wVmFsdWUiLCJwIiwidG9CZU1lcmdlZCIsInJlcGxhY2VEYXRhc2V0QW5kRGVwcyIsImRhdGFJZFRvVXNlIiwiY29tcG9zZV8iLCJhcHBseV8iLCJyZXBsYWNlRGF0YXNldERlcHNJblN0YXRlIiwicHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2UiLCJfbmV4dFN0YXRlJGxheWVyVG9CZU0iLCJzZXJpYWxpemVkU3RhdGUiLCJzZXJpYWxpemVWaXNTdGF0ZSIsInByZXNlcnZlTGF5ZXJPcmRlciIsInByZXNlcnZlRGF0YXNldE9yZGVyIiwiX3NlcmlhbGl6ZWRTdGF0ZSRzcGxpIiwiX3JlZjQzIiwiYWNjdVN0YXRlIiwiX3JlZjQ0IiwicmVwbGFjZVBhcmVudERhdGFzZXRJZHMiLCJnZXRDaGlsZERhdGFzZXRJZHMiLCJwcmVzZXJ2ZU9yZGVyIiwidG9NZXJnZVByb3BzIiwic2F2ZWRQcm9wcyIsInJlcGxhY2VkU3RhdGUiLCJfcmVwbGFjZWRTdGF0ZSRtZXJnZXIiLCJtZXJnZXJPcHRpb25zIiwicmVwbGFjZWRJdGVtIiwicmVwbGFjZVByb3BWYWx1ZUluU3RhdGUiLCJpdGVtIiwiX3JlZjQ1IiwiY2hpbGREYXRhSWQiXSwic291cmNlcyI6WyIuLi9zcmMvdmlzLXN0YXRlLXVwZGF0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBiYm94IGZyb20gJ0B0dXJmL2Jib3gnO1xuaW1wb3J0IGNvcHkgZnJvbSAnY29weS10by1jbGlwYm9hcmQnO1xuaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdkZWVwbWVyZ2UnO1xuaW1wb3J0IHtjb25zb2xlIGFzIENvbnNvbGV9IGZyb20gJ2dsb2JhbC93aW5kb3cnO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdsb2Rhc2gvY2xvbmVEZWVwJztcbmltcG9ydCBnZXQgZnJvbSAnbG9kYXNoL2dldCc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2gvaXNFcXVhbCc7XG5pbXBvcnQgcGljayBmcm9tICdsb2Rhc2gvcGljayc7XG5pbXBvcnQgdW5pcSBmcm9tICdsb2Rhc2gvdW5pcSc7XG5pbXBvcnQgeG9yIGZyb20gJ2xvZGFzaC94b3InO1xuaW1wb3J0IFRhc2ssIHtkaXNhYmxlU3RhY2tDYXB0dXJpbmcsIHdpdGhUYXNrfSBmcm9tICdyZWFjdC1wYWxtL3Rhc2tzJztcbi8vIFRhc2tzXG5pbXBvcnQge1xuICBERUxBWV9UQVNLLFxuICBBQ1RJT05fVEFTSyxcbiAgTE9BRF9GSUxFX1RBU0ssXG4gIFBST0NFU1NfRklMRV9EQVRBLFxuICBVTldSQVBfVEFTS1xufSBmcm9tICdAa2VwbGVyLmdsL3Rhc2tzJztcbi8vIEFjdGlvbnNcbmltcG9ydCB7XG4gIGFkZE5vdGlmaWNhdGlvbixcbiAgQWN0aW9uVHlwZXMsXG4gIENyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzUGF5bG9hZCxcbiAgTWFwU3RhdGVBY3Rpb25zLFxuICBSZWNlaXZlTWFwQ29uZmlnUGF5bG9hZCxcbiAgVmlzU3RhdGVBY3Rpb25zLFxuICBhcHBseUxheWVyQ29uZmlnLFxuICBjcmVhdGVOZXdEYXRhc2V0U3VjY2VzcyxcbiAgbGF5ZXJDb25maWdDaGFuZ2UsXG4gIGxheWVyVHlwZUNoYW5nZSxcbiAgbGF5ZXJWaXNDb25maWdDaGFuZ2UsXG4gIGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSxcbiAgbG9hZEZpbGVTdGVwU3VjY2VzcyxcbiAgbG9hZEZpbGVzRXJyLFxuICBsb2FkRmlsZXNTdWNjZXNzLFxuICBsb2FkTmV4dEZpbGUsXG4gIG5leHRGaWxlQmF0Y2gsXG4gIHNldEZpbHRlcixcbiAgcHJvY2Vzc0ZpbGVDb250ZW50LFxuICBmaXRCb3VuZHMgYXMgZml0TWFwQm91bmRzLFxuICB0b2dnbGVMYXllckZvck1hcCxcbiAgYXBwbHlGaWx0ZXJDb25maWcsXG4gIFNldExvYWRpbmdJbmRpY2F0b3JQYXlsb2FkXG59IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5cbi8vIFV0aWxzXG5pbXBvcnQge1xuICBGSUxURVJfVVBEQVRFUl9QUk9QUyxcbiAgYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcCxcbiAgc25hcFRvTWFya3MsXG4gIGFwcGx5RmlsdGVyRmllbGROYW1lLFxuICBhcHBseUZpbHRlcnNUb0RhdGFzZXRzLFxuICBhcnJheUluc2VydCxcbiAgY29tcHV0ZVNwbGl0TWFwTGF5ZXJzLFxuICBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluLFxuICBlcnJvck5vdGlmaWNhdGlvbixcbiAgZmVhdHVyZVRvRmlsdGVyVmFsdWUsXG4gIGZpbHRlckRhdGFzZXRDUFUsXG4gIGdlbmVyYXRlUG9seWdvbkZpbHRlcixcbiAgZ2V0RGVmYXVsdEZpbHRlcixcbiAgZ2V0RmlsdGVySWRJbkZlYXR1cmUsXG4gIGdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlcixcbiAgaXNJblJhbmdlLFxuICBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdCxcbiAgaXNSZ2JDb2xvcixcbiAgcGFyc2VGaWVsZFZhbHVlLFxuICByZW1vdmVMYXllckZyb21TcGxpdE1hcHMsXG4gIHNldCxcbiAgdXBkYXRlRmlsdGVyUGxvdCxcbiAgcmVtb3ZlRmlsdGVyUGxvdCxcbiAgaXNMYXllckFuaW1hdGFibGUsXG4gIGlzU2lkZUZpbHRlcixcbiAgZ2V0QXBwbGljYXRpb25Db25maWdcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2dlbmVyYXRlSGFzaElkLCB0b0FycmF5fSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG4vLyBNZXJnZXJzXG5pbXBvcnQge1xuICBBTklNQVRJT05fV0lORE9XLFxuICBCQVNFX1NQRUVELFxuICBDT01QQVJFX1RZUEVTLFxuICBERUZBVUxUX1RFWFRfTEFCRUwsXG4gIEVESVRPUl9NT0RFUyxcbiAgRklMVEVSX1RZUEVTLFxuICBGSUxURVJfVklFV19UWVBFUyxcbiAgRlBTLFxuICBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCxcbiAgRElTVEFOQ0VfRk9HX1RZUEUsXG4gIFNVUkZBQ0VfRk9HX1RZUEUsXG4gIE1BWF9ERUZBVUxUX1RPT0xUSVBTLFxuICBQTE9UX1RZUEVTLFxuICBTT1JUX09SREVSLFxuICBTWU5DX1RJTUVMSU5FX01PREVTLFxuICBDSEFOTkVMX1NDQUxFUyxcbiAgU0NBTEVfVFlQRVMsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9LSU5ELFxuICBJTklUSUFMX0FOTk9UQVRJT05fQU5HTEUsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9BUk1fTEVOR1RILFxuICBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9XSURUSCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfSEVJR0hULFxuICBJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IsXG4gIEFubm90YXRpb25LaW5kXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7TEFZRVJfSURfTEVOR1RILCBMYXllciwgTGF5ZXJDbGFzc2VzfSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5pbXBvcnQge1xuICBhcHBseV8sXG4gIGNvbXBvc2VfLFxuICBmaWx0ZXJPdXRCeUlkLFxuICBtZXJnZV8sXG4gIHBheWxvYWRfLFxuICBwaWNrXyxcbiAgcmVtb3ZlRWxlbWVudEF0SW5kZXgsXG4gIHN3YXBfXG59IGZyb20gJy4vY29tcG9zZXItaGVscGVycyc7XG5pbXBvcnQge2lzVmFsaWRNZXJnZXIsIG1lcmdlU3RhdGVGcm9tTWVyZ2Vyc30gZnJvbSAnLi9tZXJnZXItaGFuZGxlcic7XG5pbXBvcnQge1xuICBWSVNfU1RBVEVfTUVSR0VSUyxcbiAgY3JlYXRlTGF5ZXJGcm9tQ29uZmlnLFxuICBwYXJzZUxheWVyQ29uZmlnLFxuICBzZXJpYWxpemVGaWx0ZXIsXG4gIHNlcmlhbGl6ZUxheWVyLFxuICBzZXJpYWxpemVWaXNTdGF0ZSxcbiAgdmFsaWRhdGVMYXllcldpdGhEYXRhXG59IGZyb20gJy4vdmlzLXN0YXRlLW1lcmdlcic7XG5cbmltcG9ydCBLZXBsZXJHTFNjaGVtYSwge01lcmdlciwgUG9zdE1lcmdlclBheWxvYWQsIFZpc1N0YXRlfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuXG5pbXBvcnQge1xuICBGaWx0ZXIsXG4gIEludGVyYWN0aW9uQ29uZmlnLFxuICBBbmltYXRpb25Db25maWcsXG4gIEZpbHRlckFuaW1hdGlvbkNvbmZpZyxcbiAgRWRpdG9yLFxuICBGaWVsZCxcbiAgTGF5ZXJWaXNDb25maWcsXG4gIFRpbWVSYW5nZUZpbHRlcixcbiAgQW5ub3RhdGlvbixcbiAgQW5ub3RhdGlvblByb3BzUGFydGlhbFxufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7TG9hZGVyfSBmcm9tICdAbG9hZGVycy5nbC9sb2FkZXItdXRpbHMnO1xuXG5pbXBvcnQge1xuICBEYXRhc2V0cyxcbiAgYXNzaWduR3B1Q2hhbm5lbCxcbiAgY29weVRhYmxlQW5kVXBkYXRlLFxuICBjcmVhdGVOZXdEYXRhRW50cnksXG4gIHBpblRhYmxlQ29sdW1ucyxcbiAgc2V0RmlsdGVyR3B1TW9kZSxcbiAgc29ydERhdGFzZXRCeUNvbHVtblxufSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCB7ZmluZEZpZWxkc1RvU2hvd30gZnJvbSAnLi9pbnRlcmFjdGlvbi11dGlscyc7XG5pbXBvcnQge1xuICBjYWxjdWxhdGVMYXllckRhdGEsXG4gIGZpbmREZWZhdWx0TGF5ZXIsXG4gIGdldExheWVyT3JkZXJGcm9tTGF5ZXJzLFxuICBtZXJnZUxheWVyVmlzQ29uZmlnRm9yTmV3RGF0YXNldHNcbn0gZnJvbSAnLi9sYXllci11dGlscyc7XG5pbXBvcnQge2dldFByb3BWYWx1ZVRvTWVyZ2VyLCBoYXNQcm9wc1RvTWVyZ2V9IGZyb20gJy4vbWVyZ2VyLWhhbmRsZXInO1xuaW1wb3J0IHttZXJnZURhdGFzZXRzQnlPcmRlcn0gZnJvbSAnLi92aXMtc3RhdGUtbWVyZ2VyJztcbmltcG9ydCB7XG4gIGZpeEVmZmVjdE9yZGVyLFxuICBnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyxcbiAgZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyxcbiAgbWVyZ2VUaW1lRG9tYWlucyxcbiAgYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyxcbiAgdXBkYXRlVGltZUZpbHRlclBsb3RUeXBlLFxuICBnZXREZWZhdWx0VGltZUZvcm1hdCxcbiAgTGF5ZXJUb0ZpbHRlclRpbWVJbnRlcnZhbCxcbiAgVElNRV9JTlRFUlZBTFNfT1JERVJFRCxcbiAgbWVyZ2VGaWx0ZXJEb21haW4sXG4gIGluaXRDdXN0b21QYWxldHRlQnlDdXN0b21TY2FsZVxufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7Y3JlYXRlRWZmZWN0fSBmcm9tICdAa2VwbGVyLmdsL2VmZmVjdHMnO1xuaW1wb3J0IHtQYXlsb2FkQWN0aW9ufSBmcm9tICdAcmVkdXhqcy90b29sa2l0JztcblxuaW1wb3J0IHtmaW5kTWFwQm91bmRzfSBmcm9tICcuL2RhdGEtdXRpbHMnO1xuXG4vLyByZWFjdC1wYWxtXG4vLyBkaXNhYmxlIGNhcHR1cmUgZXhjZXB0aW9uIGZvciByZWFjdC1wYWxtIGNhbGwgdG8gd2l0aFRhc2tcbmRpc2FibGVTdGFja0NhcHR1cmluZygpO1xuXG4vKipcbiAqIFVwZGF0ZXJzIGZvciBgdmlzU3RhdGVgIHJlZHVjZXIuIENhbiBiZSB1c2VkIGluIHlvdXIgcm9vdCByZWR1Y2VyIHRvIGRpcmVjdGx5IG1vZGlmeSBrZXBsZXIuZ2wncyBzdGF0ZS5cbiAqIFJlYWQgbW9yZSBhYm91dCBbVXNpbmcgdXBkYXRlcnNdKC4uL2FkdmFuY2VkLXVzYWdlL3VzaW5nLXVwZGF0ZXJzLm1kKVxuICpcbiAqIEBwdWJsaWNcbiAqIEBleGFtcGxlXG4gKlxuICogaW1wb3J0IGtlcGxlckdsUmVkdWNlciwge3Zpc1N0YXRlVXBkYXRlcnN9IGZyb20gJ0BrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuICogLy8gUm9vdCBSZWR1Y2VyXG4gKiBjb25zdCByZWR1Y2VycyA9IGNvbWJpbmVSZWR1Y2Vycyh7XG4gKiAga2VwbGVyR2w6IGtlcGxlckdsUmVkdWNlcixcbiAqICBhcHA6IGFwcFJlZHVjZXJcbiAqIH0pO1xuICpcbiAqIGNvbnN0IGNvbXBvc2VkUmVkdWNlciA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gKiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICogICAgY2FzZSAnQ0xJQ0tfQlVUVE9OJzpcbiAqICAgICAgcmV0dXJuIHtcbiAqICAgICAgICAuLi5zdGF0ZSxcbiAqICAgICAgICBrZXBsZXJHbDoge1xuICogICAgICAgICAgLi4uc3RhdGUua2VwbGVyR2wsXG4gKiAgICAgICAgICBmb286IHtcbiAqICAgICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLmZvbyxcbiAqICAgICAgICAgICAgIHZpc1N0YXRlOiB2aXNTdGF0ZVVwZGF0ZXJzLmVubGFyZ2VGaWx0ZXJVcGRhdGVyKFxuICogICAgICAgICAgICAgICBzdGF0ZS5rZXBsZXJHbC5mb28udmlzU3RhdGUsXG4gKiAgICAgICAgICAgICAgIHtpZHg6IDB9XG4gKiAgICAgICAgICAgICApXG4gKiAgICAgICAgICB9XG4gKiAgICAgICAgfVxuICogICAgICB9O1xuICogIH1cbiAqICByZXR1cm4gcmVkdWNlcnMoc3RhdGUsIGFjdGlvbik7XG4gKiB9O1xuICpcbiAqIGV4cG9ydCBkZWZhdWx0IGNvbXBvc2VkUmVkdWNlcjtcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG4vLyBAdHMtaWdub3JlXG5jb25zdCB2aXNTdGF0ZVVwZGF0ZXJzID0gbnVsbDtcbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0SW50ZXJhY3Rpb25Db25maWc6IEludGVyYWN0aW9uQ29uZmlnID0ge1xuICB0b29sdGlwOiB7XG4gICAgaWQ6ICd0b29sdGlwJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy50b29sdGlwJyxcbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIGNvbmZpZzoge1xuICAgICAgZmllbGRzVG9TaG93OiB7fSxcbiAgICAgIGNvbXBhcmVNb2RlOiBmYWxzZSxcbiAgICAgIGNvbXBhcmVUeXBlOiBDT01QQVJFX1RZUEVTLkFCU09MVVRFXG4gICAgfVxuICB9LFxuICBnZW9jb2Rlcjoge1xuICAgIGlkOiAnZ2VvY29kZXInLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmdlb2NvZGVyJyxcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBwb3NpdGlvbjogbnVsbCxcbiAgICBjb25maWc6IHtcbiAgICAgIGxpbWl0U2VhcmNoOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgYnJ1c2g6IHtcbiAgICBpZDogJ2JydXNoJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5icnVzaCcsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgY29uZmlnOiB7XG4gICAgICAvLyBzaXplIGlzIGluIGttXG4gICAgICBzaXplOiAwLjVcbiAgICB9XG4gIH0sXG4gIGNvb3JkaW5hdGU6IHtcbiAgICBpZDogJ2Nvb3JkaW5hdGUnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmNvb3JkaW5hdGUnLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIHBvc2l0aW9uOiBudWxsXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FOSU1BVElPTl9DT05GSUc6IEFuaW1hdGlvbkNvbmZpZyA9IHtcbiAgZG9tYWluOiBudWxsLFxuICBjdXJyZW50VGltZTogbnVsbCxcbiAgc3BlZWQ6IDEsXG4gIGlzQW5pbWF0aW5nOiBmYWxzZSxcbiAgdGltZVN0ZXBzOiBudWxsLFxuICB0aW1lRm9ybWF0OiBudWxsLFxuICB0aW1lem9uZTogbnVsbCxcbiAgZGVmYXVsdFRpbWVGb3JtYXQ6IG51bGwsXG4gIGhpZGVDb250cm9sOiBmYWxzZSxcbiAgZHVyYXRpb246IG51bGxcbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VESVRPUjogRWRpdG9yID0ge1xuICBtb2RlOiBFRElUT1JfTU9ERVMuRFJBV19QT0xZR09OLFxuICBmZWF0dXJlczogW10sXG4gIHNlbGVjdGVkRmVhdHVyZTogbnVsbCxcbiAgdmlzaWJsZTogdHJ1ZVxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGluaXRpYWwgYHZpc1N0YXRlYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBjb25zdGFudFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgSU5JVElBTF9WSVNfU1RBVEU6IFZpc1N0YXRlID0ge1xuICAvLyBtYXAgaW5mb1xuICBtYXBJbmZvOiB7XG4gICAgdGl0bGU6ICcnLFxuICAgIGRlc2NyaXB0aW9uOiAnJ1xuICB9LFxuICAvLyBsYXllcnNcbiAgbGF5ZXJzOiBbXSxcbiAgbGF5ZXJEYXRhOiBbXSxcbiAgbGF5ZXJUb0JlTWVyZ2VkOiBbXSxcbiAgbGF5ZXJPcmRlcjogW10sXG5cbiAgLy8gZmlsdGVyc1xuICBmaWx0ZXJzOiBbXSxcbiAgZmlsdGVyVG9CZU1lcmdlZDogW10sXG5cbiAgLy8gYSBjb2xsZWN0aW9uIG9mIG11bHRpcGxlIGRhdGFzZXRcbiAgZGF0YXNldHM6IHt9LFxuICBlZGl0aW5nRGF0YXNldDogdW5kZWZpbmVkLFxuXG4gIC8vIGVmZmVjdHNcbiAgZWZmZWN0czogW10sXG4gIGVmZmVjdE9yZGVyOiBbXSxcblxuICAvLyBhbm5vdGF0aW9uc1xuICBhbm5vdGF0aW9uczogW10sXG4gIGFubm90YXRpb25zVG9CZU1lcmdlZDogW10sXG4gIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBudWxsLFxuICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDogZmFsc2UsXG5cbiAgaW50ZXJhY3Rpb25Db25maWc6IGRlZmF1bHRJbnRlcmFjdGlvbkNvbmZpZyxcbiAgaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkOiB7fSxcblxuICBsYXllckJsZW5kaW5nOiAnbm9ybWFsJyxcbiAgb3ZlcmxheUJsZW5kaW5nOiAnbm9ybWFsJyxcbiAgaG92ZXJJbmZvOiB1bmRlZmluZWQsXG4gIGNsaWNrZWQ6IHVuZGVmaW5lZCxcbiAgbW91c2VQb3M6IHt9LFxuICBtYXhEZWZhdWx0VG9vbHRpcHM6IE1BWF9ERUZBVUxUX1RPT0xUSVBTLFxuXG4gIC8vIHRoaXMgaXMgdXNlZCB3aGVuIHVzZXIgc3BsaXQgbWFwc1xuICBzcGxpdE1hcHM6IFtcbiAgICAvLyB0aGlzIHdpbGwgY29udGFpbiBhIGxpc3Qgb2Ygb2JqZWN0cyB0b1xuICAgIC8vIGRlc2NyaWJlIHRoZSBzdGF0ZSBvZiBsYXllciBhdmFpbGFiaWxpdHkgYW5kIHZpc2liaWxpdHkgZm9yIGVhY2ggbWFwXG4gICAgLy8gW1xuICAgIC8vICAge1xuICAgIC8vICAgICAgbGF5ZXJzOiB7bGF5ZXJfaWQ6IHRydWUgfCBmYWxzZX1cbiAgICAvLyAgIH1cbiAgICAvLyBdXG4gIF0sXG4gIHNwbGl0TWFwc1RvQmVNZXJnZWQ6IFtdLFxuICBpc01lcmdpbmdEYXRhc2V0czoge30sXG4gIC8vIGRlZmF1bHRzIGxheWVyIGNsYXNzZXNcbiAgbGF5ZXJDbGFzc2VzOiBMYXllckNsYXNzZXMsXG5cbiAgLy8gZGVmYXVsdCBhbmltYXRpb25cbiAgLy8gdGltZSBpbiB1bml4IHRpbWVzdGFtcCAobWlsbGlzZWNvbmRzKSAodGhlIG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIHRoZSBVbml4IEVwb2NoKVxuICBhbmltYXRpb25Db25maWc6IERFRkFVTFRfQU5JTUFUSU9OX0NPTkZJRyxcblxuICBlZGl0b3I6IERFRkFVTFRfRURJVE9SLFxuXG4gIGZpbGVMb2FkaW5nOiBmYWxzZSxcbiAgZmlsZUxvYWRpbmdQcm9ncmVzczoge30sXG4gIC8vIGZvciBsb2FkaW5nIGRhdGFzZXRzXG4gIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZTogMCxcblxuICBsb2FkZXJzOiBbXSxcbiAgbG9hZE9wdGlvbnM6IHt9LFxuXG4gIC8vIHZpc1N0YXRlTWVyZ2Vyc1xuICBtZXJnZXJzOiBWSVNfU1RBVEVfTUVSR0VSUyxcblxuICAvLyBrZXBsZXIgc2NoZW1hc1xuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hXG59O1xuXG5leHBvcnQgY29uc3QgQUNUSU9OX1RBU0tfRklUX0JPVU5EUyA9IFRhc2suZnJvbUNhbGxiYWNrKFxuICAoXywgY2IpID0+IGNiKCksXG5cbiAgJ0FDVElPTl9UQVNLX0ZJVF9CT1VORFMnXG4pO1xuXG5leHBvcnQgY29uc3QgQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTiA9IFRhc2suZnJvbUNhbGxiYWNrKFxuICAoXywgY2IpID0+IGNiKCksXG5cbiAgJ0FDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04nXG4pO1xuXG50eXBlIFVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YVR5cGUgPSB7XG4gIGxheWVyczogTGF5ZXJbXTtcbiAgbGF5ZXJEYXRhOiBhbnlbXTtcbn07XG5cbi8qKlxuICogVXBkYXRlIHN0YXRlIHdpdGggdXBkYXRlZCBsYXllciBhbmQgbGF5ZXJEYXRhXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhPFMgZXh0ZW5kcyBVcGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGFUeXBlPihcbiAgc3RhdGU6IFMsXG4gIHtsYXllckRhdGEsIGxheWVyLCBpZHh9OiB7bGF5ZXJEYXRhPzogYW55OyBsYXllcjogTGF5ZXI7IGlkeDogbnVtYmVyfVxuKTogUyB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBzdGF0ZS5sYXllcnMubWFwKChseXIsIGkpID0+IChpID09PSBpZHggPyBsYXllciA6IGx5cikpLFxuICAgIGxheWVyRGF0YTogbGF5ZXJEYXRhXG4gICAgICA/IHN0YXRlLmxheWVyRGF0YS5tYXAoKGQsIGkpID0+IChpID09PSBpZHggPyBsYXllckRhdGEgOiBkKSlcbiAgICAgIDogc3RhdGUubGF5ZXJEYXRhXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIGxheWVyOiBMYXllcik6IFMge1xuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgaWYgKHN0YXRlLnNwbGl0TWFwcy5sZW5ndGgpIHtcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgc3BsaXRNYXBzOiBsYXllci5jb25maWcuaXNWaXNpYmxlXG4gICAgICAgID8gYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcChzdGF0ZS5zcGxpdE1hcHMsIGxheWVyKVxuICAgICAgICA6IHJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyhzdGF0ZS5zcGxpdE1hcHMsIGxheWVyKVxuICAgIH07XG4gIH1cblxuICBpZiAobGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIENvbXBhcmVzIHR3byBvYmplY3RzIChvciBhcnJheXMpIGFuZCByZXR1cm5zIGEgbmV3IG9iamVjdCB3aXRoIG9ubHkgdGhlXG4gKiBwcm9wZXJ0aWVzIHRoYXQgaGF2ZSBjaGFuZ2VkIGJldHdlZW4gdGhlIHR3byBvYmplY3RzLlxuICovXG5mdW5jdGlvbiBwaWNrQ2hhbmdlZFByb3BzPFQ+KHByZXY6IFQsIG5leHQ6IFQpOiBQYXJ0aWFsPFQ+IHtcbiAgY29uc3QgY2hhbmdlZFByb3BzOiBQYXJ0aWFsPFQ+ID0ge307XG4gIGNvbnN0IHBpY2tQcm9wc09mID0gb2JqID0+IHtcbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VkUHJvcHMsIGtleSkgJiZcbiAgICAgICAgIWlzRXF1YWwocHJldltrZXldLCBuZXh0W2tleV0pXG4gICAgICApIHtcbiAgICAgICAgY2hhbmdlZFByb3BzW2tleV0gPSBuZXh0W2tleV07XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIHBpY2tQcm9wc09mKHByZXYpO1xuICBwaWNrUHJvcHNPZihuZXh0KTtcbiAgcmV0dXJuIGNoYW5nZWRQcm9wcztcbn1cblxuY29uc3QgVklTVUFMX0NIQU5ORUxfUFJPUF9UWVBFUyA9IFsnZmllbGQnLCAnc2NhbGUnLCAnZG9tYWluJywgJ2FnZ3JlZ2F0aW9uJ107XG5cbi8qKlxuICogQXBwbHkgbGF5ZXIgY29uZmlnXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5LCBtYXgtc3RhdGVtZW50c1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5TGF5ZXJDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFwcGx5TGF5ZXJDb25maWdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllcklkLCBuZXdMYXllckNvbmZpZywgbGF5ZXJJbmRleH0gPSBhY3Rpb247XG4gIGNvbnN0IG5ld1BhcnNlZExheWVyID1cbiAgICAvLyB3aWxsIG1vdmUgdmlzdWFsQ2hhbm5lbHMgdG8gdGhlIGNvbmZpZyBwcm9wXG4gICAgcGFyc2VMYXllckNvbmZpZyhzdGF0ZS5zY2hlbWEsIG5ld0xheWVyQ29uZmlnKTtcbiAgY29uc3Qgb2xkTGF5ZXIgPSBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IG9sZExheWVySWQpO1xuICBpZiAoIW9sZExheWVyIHx8ICFuZXdQYXJzZWRMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAobGF5ZXJJbmRleCAhPT0gbnVsbCAmJiBsYXllckluZGV4ICE9PSB1bmRlZmluZWQgJiYgc3RhdGUubGF5ZXJzW2xheWVySW5kZXhdICE9PSBvbGRMYXllcikge1xuICAgIC8vIGxheWVySW5kZXggaXMgcHJvdmlkZWQsIGJ1dCBpdCBkb2Vzbid0IG1hdGNoIHRoZSBvbGRMYXllclxuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbbmV3UGFyc2VkTGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyBNYWtlIHN1cmUgdGhlIGxheWVyIGlzIHZhbGlkIGFuZCBjb252ZXJ0IGl0IHRvIExheWVyXG4gIGNvbnN0IG5ld0xheWVyID0gdmFsaWRhdGVMYXllcldpdGhEYXRhKGRhdGFzZXQsIG5ld1BhcnNlZExheWVyLCBzdGF0ZS5sYXllckNsYXNzZXMpO1xuICBpZiAoIW5ld0xheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IG5leHRTdGF0ZSA9IHN0YXRlO1xuXG4gIGlmIChuZXdMYXllci50eXBlICYmIG5ld0xheWVyLnR5cGUgIT09IG9sZExheWVyLnR5cGUpIHtcbiAgICBjb25zdCBvbGRMYXllckluZGV4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVySWQpO1xuICAgIGlmIChvbGRMYXllckluZGV4ID49IDApIHtcbiAgICAgIG5leHRTdGF0ZSA9IGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIobmV4dFN0YXRlLCBsYXllclR5cGVDaGFuZ2Uob2xkTGF5ZXIsIG5ld0xheWVyLnR5cGUpKTtcbiAgICAgIC8vIGxheWVyVHlwZUNoYW5nZVVwZGF0ZXIgY2hhbmdlcyB0aGUgaWQgb2YgdGhlIGxheWVyLCBzbyB3ZSBuZWVkIHRvIG9idGFpbiB0aGUgbmV3IGlkXG4gICAgICAvLyBidXQgZmlyc3QgbWFrZSBzdXJlIHRoYXQgdGhlIGxheWVyIHdhcyBub3QgcmVtb3ZlZFxuICAgICAgaWYgKG5leHRTdGF0ZS5sYXllcnMubGVuZ3RoID09PSBzdGF0ZS5sYXllcnMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IG5ld0xheWVySWQgPSBuZXh0U3RhdGUubGF5ZXJzW29sZExheWVySW5kZXhdLmlkO1xuICAgICAgICBuZXh0U3RhdGUgPSBhcHBseUxheWVyQ29uZmlnVXBkYXRlcihcbiAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgYXBwbHlMYXllckNvbmZpZyhuZXdMYXllcklkLCB7Li4ubmV3TGF5ZXJDb25maWcsIGlkOiBuZXdMYXllcklkfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgfVxuXG4gIC8vIHNlcmlhbGl6ZUxheWVyKCkgbWlnaHQgcmV0dXJuIG51bGwgaWYgdGhlIG9sZCBsYXllciBpcyBub3QgdmFsaWQsXG4gIC8vIHdlIHNob3VsZCBzdGlsbCBhcHBseSB0aGUgY2hhbmdlcyBpbiB0aGF0IGNhc2VcbiAgY29uc3Qgc2VyaWFsaXplZE9sZExheWVyID0gc2VyaWFsaXplTGF5ZXIob2xkTGF5ZXIsIHN0YXRlLnNjaGVtYSkgPz8ge2NvbmZpZzoge319O1xuICBjb25zdCBzZXJpYWxpemVkTmV3TGF5ZXIgPSBzZXJpYWxpemVMYXllcihuZXdMYXllciwgc3RhdGUuc2NoZW1hKTtcbiAgaWYgKCFzZXJpYWxpemVkTmV3TGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKCFpc0VxdWFsKHNlcmlhbGl6ZWRPbGRMYXllciwgc2VyaWFsaXplZE5ld0xheWVyKSkge1xuICAgIGNvbnN0IGNoYW5nZWQgPSBwaWNrQ2hhbmdlZFByb3BzKHNlcmlhbGl6ZWRPbGRMYXllci5jb25maWcsIHNlcmlhbGl6ZWROZXdMYXllci5jb25maWcpO1xuXG4gICAgaWYgKCd2aXNDb25maWcnIGluIGNoYW5nZWQpIHtcbiAgICAgIGlmIChjaGFuZ2VkLnZpc0NvbmZpZykge1xuICAgICAgICBuZXh0U3RhdGUgPSBsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gICAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICAgIGxheWVyVmlzQ29uZmlnQ2hhbmdlKG9sZExheWVyLCBjaGFuZ2VkLnZpc0NvbmZpZylcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGRlbGV0ZSBjaGFuZ2VkLnZpc0NvbmZpZztcbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyhvbGRMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaChjaGFubmVsTmFtZSA9PiB7XG4gICAgICBjb25zdCBjaGFubmVsID0gb2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbE5hbWVdO1xuICAgICAgY29uc3QgY2hhbm5lbFByb3BOYW1lcyA9IFZJU1VBTF9DSEFOTkVMX1BST1BfVFlQRVMubWFwKHByb3AgPT4gY2hhbm5lbFtwcm9wXSk7XG4gICAgICBpZiAoY2hhbm5lbFByb3BOYW1lcy5zb21lKHByb3AgPT4gcHJvcCBpbiBjaGFuZ2VkKSkge1xuICAgICAgICBuZXh0U3RhdGUgPSBsYXllclZpc3VhbENoYW5uZWxDaGFuZ2VVcGRhdGVyKFxuICAgICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgICBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UoXG4gICAgICAgICAgICBvbGRMYXllcixcbiAgICAgICAgICAgIHBpY2sobmV3TGF5ZXIuY29uZmlnLCBjaGFubmVsUHJvcE5hbWVzKSxcbiAgICAgICAgICAgIGNoYW5uZWxOYW1lXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgY2hhbm5lbFByb3BOYW1lcykge1xuICAgICAgICAgIGRlbGV0ZSBjaGFuZ2VkW3Byb3BdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoT2JqZWN0LmtleXMoY2hhbmdlZCkubGVuZ3RoID4gMCkge1xuICAgICAgbmV4dFN0YXRlID0gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKFxuICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgIGxheWVyQ29uZmlnQ2hhbmdlKG9sZExheWVyLCBwaWNrKG5ld0xheWVyLmNvbmZpZywgT2JqZWN0LmtleXMoY2hhbmdlZCkpKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVsYXllclZpc2liaWx0eShzdGF0ZTogVmlzU3RhdGUsIG5ld0xheWVyOiBMYXllciwgaXNWaXNpYmxlPzogYm9vbGVhbik6IFZpc1N0YXRlIHtcbiAgbGV0IG5ld1N0YXRlID0gdXBkYXRlU3RhdGVPbkxheWVyVmlzaWJpbGl0eUNoYW5nZShzdGF0ZSwgbmV3TGF5ZXIpO1xuICBjb25zdCBmaWx0ZXJJbmRleCA9IGZpbHRlclN5bmNlZFdpdGhUaW1lbGluZShzdGF0ZSk7XG4gIGlmIChpc0xheWVyQW5pbWF0YWJsZShuZXdMYXllcikgJiYgZmlsdGVySW5kZXggIT09IC0xKSB7XG4gICAgLy8gaWYgbGF5ZXIgaXMgZ29pbmcgdG8gYmUgdmlzaWJsZSB3ZSBzeW5jIHdpdGggZmlsdGVyIG90aGVyd2lzZSB3ZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgb3RoZXIgYW5pbWF0YWJsZSBsYXllcnMgZXhpc3RzIGFuZCBhcmUgdmlzaWJsZVxuICAgIG5ld1N0YXRlID0gc3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkeDogZmlsdGVySW5kZXgsXG4gICAgICBlbmFibGU6IGlzVmlzaWJsZSA/IGlzVmlzaWJsZSA6IGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKHN0YXRlLmxheWVycykubGVuZ3RoID4gMFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYmFzZSBjb25maWc6IGRhdGFJZCwgbGFiZWwsIGNvbHVtbiwgaXNWaXNpYmxlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBjb25zdCBwcm9wcyA9IE9iamVjdC5rZXlzKGFjdGlvbi5uZXdDb25maWcpO1xuICBpZiAoXG4gICAgdHlwZW9mIGFjdGlvbi5uZXdDb25maWcuZGF0YUlkID09PSAnc3RyaW5nJyAmJlxuICAgIGFjdGlvbi5uZXdDb25maWcuZGF0YUlkICE9PSBvbGRMYXllci5jb25maWcuZGF0YUlkXG4gICkge1xuICAgIGNvbnN0IHtkYXRhSWQsIC4uLnJlc3RDb25maWd9ID0gYWN0aW9uLm5ld0NvbmZpZztcbiAgICBjb25zdCBzdGF0ZVdpdGhEYXRhSWQgPSBsYXllckRhdGFJZENoYW5nZVVwZGF0ZXIoc3RhdGUsIHtcbiAgICAgIG9sZExheWVyLFxuICAgICAgbmV3Q29uZmlnOiB7ZGF0YUlkfVxuICAgIH0pO1xuICAgIGNvbnN0IG5leHRMYXllciA9IHN0YXRlV2l0aERhdGFJZC5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgICByZXR1cm4gbmV4dExheWVyICYmIE9iamVjdC5rZXlzKHJlc3RDb25maWcpLmxlbmd0aFxuICAgICAgPyBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoc3RhdGVXaXRoRGF0YUlkLCB7b2xkTGF5ZXI6IG5leHRMYXllciwgbmV3Q29uZmlnOiByZXN0Q29uZmlnfSlcbiAgICAgIDogc3RhdGVXaXRoRGF0YUlkO1xuICB9XG5cbiAgbGV0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoYWN0aW9uLm5ld0NvbmZpZyk7XG5cbiAgbGV0IGxheWVyRGF0YTtcblxuICBpZiAobmV3TGF5ZXIuc2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhKHByb3BzKSkge1xuICAgIGNvbnN0IG9sZExheWVyRGF0YSA9IHN0YXRlLmxheWVyRGF0YVtpZHhdO1xuXG4gICAgY29uc3QgdXBkYXRlTGF5ZXJEYXRhUmVzdWx0ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgb2xkTGF5ZXJEYXRhKTtcbiAgICBuZXdMYXllciA9IHVwZGF0ZUxheWVyRGF0YVJlc3VsdC5sYXllcjtcbiAgICBsYXllckRhdGEgPSB1cGRhdGVMYXllckRhdGFSZXN1bHQubGF5ZXJEYXRhO1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGlmICgnaXNWaXNpYmxlJyBpbiBhY3Rpb24ubmV3Q29uZmlnKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVsYXllclZpc2liaWx0eShuZXdTdGF0ZSwgbmV3TGF5ZXIsIGFjdGlvbi5uZXdDb25maWcuaXNWaXNpYmxlKTtcbiAgfVxuXG4gIGlmICgnY29sdW1ucycgaW4gYWN0aW9uLm5ld0NvbmZpZyAmJiBuZXdMYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICAvLyBUT0RPOiBTaGFuLCBtYWtlIHRoZSBhbmltYXRpb24gY29uZmlnIGZ1bmN0aW9uIG1vcmUgcm9idXN0XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXdTdGF0ZSwge1xuICAgIGxheWVyOiBuZXdMYXllcixcbiAgICBsYXllckRhdGEsXG4gICAgaWR4XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIGFjdGlvbik6IFMge1xuICBjb25zdCB7b2xkTGF5ZXIsIHByb3AsIHZhbHVlfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcblxuICBjb25zdCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICBhbmltYXRpb246IHtcbiAgICAgIC4uLm9sZExheWVyLmNvbmZpZy5hbmltYXRpb24sXG4gICAgICBbcHJvcF06IHZhbHVlXG4gICAgfVxuICB9KTtcblxuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCBzdGF0ZS5sYXllckRhdGFbaWR4XSk7XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllcklkLCBpc1Zpc2libGUsIHNwbGl0TWFwSWRcbiAqIGhhbmRsZXMgdHdvIGNhc2VzOlxuICogMSkgdG9nZ2xlIHRoZSB2aXNpYmlsaXR5IG9mIGxvY2FsIFNwbGl0TWFwIGxheWVyICh2aXNTdGF0ZS5zcGxpdE1hcC5sYXllcnMpXG4gKiAyKSB0b2dnbGUgdGhlIHZpc2liaWxpdHkgb2YgZ2xvYmFsIGxheWVyICh2aXNTdGF0ZS5sYXllcnMpXG5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUb2dnbGVWaXNpYmlsaXR5VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7bGF5ZXJJZCwgaXNWaXNpYmxlLCBzcGxpdE1hcElkfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXIgPSBzdGF0ZS5sYXllcnMuZmluZChkID0+IGQuaWQgPT09IGxheWVySWQpO1xuXG4gIGlmICghbGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcblxuICBpZiAoc3BsaXRNYXBJZCkge1xuICAgIC8vIFtjYXNlIDFdOiB0b2dnbGUgbG9jYWwgbGF5ZXIgdmlzaWJpbGl0eSBmb3IgZWFjaCBTcGxpdE1hcFxuICAgIGNvbnN0IG1hcEluZGV4ID0gbmV3U3RhdGUuc3BsaXRNYXBzLmZpbmRJbmRleChzbSA9PiBzbS5pZCA9PT0gc3BsaXRNYXBJZCk7XG4gICAgaWYgKGlzVmlzaWJsZSkge1xuICAgICAgLy8gMSkgaWYgdGhlIGxheWVyIGlzIGludmlzaWJsZSBnbG9iYWxseVxuICAgICAgLy8gLT4gc2V0IGdsb2JhbCB2aXNpYmlsaXR5IHRvIHRydWVcbiAgICAgIG5ld1N0YXRlID0gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKG5ld1N0YXRlLCBsYXllckNvbmZpZ0NoYW5nZShsYXllciwge2lzVmlzaWJsZTogdHJ1ZX0pKTtcblxuICAgICAgLy8gLT4gc2V0IGxvY2FsIHZpc2liaWxpdHkgdG8gdHJ1ZSBhbmQgdGhlIGxvY2FsIHZpc2liaWxpdGllcyBvZiBhbGwgb3RoZXIgU3BsaXRNYXBzIHRvIGZhbHNlXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgc3BsaXRNYXBzOiBuZXdTdGF0ZS5zcGxpdE1hcHMubWFwKHNtID0+XG4gICAgICAgICAgc20uaWQgIT09IHNwbGl0TWFwSWRcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIC4uLnNtLFxuICAgICAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAgICAgLi4uc20ubGF5ZXJzLFxuICAgICAgICAgICAgICAgICAgW2xheWVySWRdOiBmYWxzZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgLi4uc20sXG4gICAgICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgICAgICAuLi5zbS5sYXllcnMsXG4gICAgICAgICAgICAgICAgICBbbGF5ZXJJZF06IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfTtcbiAgICB9XG4gICAgLy8gMikgZWxzZSB3aGVuIHRoZSBsYXllciBpcyB2aXNpYmxlIGdsb2JhbGx5XG4gICAgcmV0dXJuIHRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlcihuZXdTdGF0ZSwgdG9nZ2xlTGF5ZXJGb3JNYXAobWFwSW5kZXgsIGxheWVySWQpKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBbY2FzZSAyXTogdG9nZ2xlIGdsb2JhbCBsYXllciB2aXNpYmlsaXR5XG4gICAgY29uc3QgbmV3TGF5ZXIgPSBsYXllci51cGRhdGVMYXllckNvbmZpZyh7aXNWaXNpYmxlfSk7XG4gICAgY29uc3QgaWR4ID0gbmV3U3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGxheWVySWQpO1xuXG4gICAgbmV3U3RhdGUgPSB1cGRhdGVsYXllclZpc2liaWx0eShuZXdTdGF0ZSwgbmV3TGF5ZXIsIGlzVmlzaWJsZSk7XG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXdTdGF0ZSwge1xuICAgICAgbGF5ZXI6IG5ld0xheWVyLFxuICAgICAgaWR4XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHN0YXRlXG4gKiBAcmV0dXJucyBpbmRleCBvZiB0aGUgZmlsdGVyIHN5bmNlZCB0byB0aW1lbGluZSBvciAtMVxuICovXG5mdW5jdGlvbiBmaWx0ZXJTeW5jZWRXaXRoVGltZWxpbmUoc3RhdGU6IFZpc1N0YXRlKTogbnVtYmVyIHtcbiAgcmV0dXJuIHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gKGYgYXMgVGltZVJhbmdlRmlsdGVyKS5zeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSk7XG59XG5cbi8qKlxuICogVXBkYXRlcyBpc1ZhbGlkIGZsYWcgb2YgYSBsYXllci5cbiAqIFVwZGF0ZXMgaXNWaXNpYmxlIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiBpc1ZhbGlkLlxuICogVHJpZ2dlcnMgdXBkYXRlIG9mIGRhdGEgZm9yIHRoZSBsYXllciBpbiBvcmRlciB0byBnZXQgZXJyb3JzIGFnYWluIGR1cmluZyBuZXh0IHVwZGF0ZSBpdGVyYXRpb24uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclNldElzVmFsaWRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyU2V0SXNWYWxpZFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBpc1ZhbGlkfSA9IGFjdGlvbjtcblxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBjb25zdCBsYXllclRvVXBkYXRlID0gc3RhdGUubGF5ZXJzW2lkeF07XG4gIGlmIChsYXllclRvVXBkYXRlKSB7XG4gICAgbGV0IG5ld0xheWVyO1xuICAgIGxldCBuZXdEYXRhID0gbnVsbDtcblxuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAvLyBUcmlnZ2VyIGRhdGEgdXBkYXRlIGluIG9yZGVyIHRvIHNob3cgZXJyb3JzIGFnYWluIGlmIHByZXNlbnQuXG4gICAgICBjb25zdCB7bGF5ZXIsIGxheWVyRGF0YX0gPSBjYWxjdWxhdGVMYXllckRhdGEobGF5ZXJUb1VwZGF0ZSwgc3RhdGUsIHVuZGVmaW5lZCk7XG4gICAgICBuZXdMYXllciA9IGxheWVyO1xuICAgICAgbmV3RGF0YSA9IGxheWVyRGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXIgPSBsYXllclRvVXBkYXRlLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgaXNWaXNpYmxlOiBmYWxzZVxuICAgICAgfSk7XG4gICAgICBuZXdMYXllci5pc1ZhbGlkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShzdGF0ZSwge2lkeCwgbGF5ZXI6IG5ld0xheWVyLCBsYXllckRhdGE6IG5ld0RhdGF9KTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gYWRkT3JSZW1vdmVUZXh0TGFiZWxzKG5ld0ZpZWxkcywgdGV4dExhYmVsLCBkZWZhdWx0VGV4dExhYmVsID0gREVGQVVMVF9URVhUX0xBQkVMKSB7XG4gIGxldCBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc2xpY2UoKTtcblxuICBjb25zdCBjdXJyZW50RmllbGRzID0gdGV4dExhYmVsLm1hcCh0bCA9PiB0bC5maWVsZCAmJiB0bC5maWVsZC5uYW1lKS5maWx0ZXIoZCA9PiBkKTtcblxuICBjb25zdCBhZGRGaWVsZHMgPSBuZXdGaWVsZHMuZmlsdGVyKGYgPT4gIWN1cnJlbnRGaWVsZHMuaW5jbHVkZXMoZi5uYW1lKSk7XG4gIGNvbnN0IGRlbGV0ZUZpZWxkcyA9IGN1cnJlbnRGaWVsZHMuZmlsdGVyKGYgPT4gIW5ld0ZpZWxkcy5maW5kKGZkID0+IGZkLm5hbWUgPT09IGYpKTtcblxuICAvLyBkZWxldGVcbiAgbmV3VGV4dExhYmVsID0gbmV3VGV4dExhYmVsLmZpbHRlcih0bCA9PiB0bC5maWVsZCAmJiAhZGVsZXRlRmllbGRzLmluY2x1ZGVzKHRsLmZpZWxkLm5hbWUpKTtcbiAgbmV3VGV4dExhYmVsID0gIW5ld1RleHRMYWJlbC5sZW5ndGggPyBbZGVmYXVsdFRleHRMYWJlbF0gOiBuZXdUZXh0TGFiZWw7XG5cbiAgLy8gYWRkXG4gIG5ld1RleHRMYWJlbCA9IFtcbiAgICAuLi5uZXdUZXh0TGFiZWwuZmlsdGVyKHRsID0+IHRsLmZpZWxkKSxcbiAgICAuLi5hZGRGaWVsZHMubWFwKGFmID0+ICh7XG4gICAgICAuLi5kZWZhdWx0VGV4dExhYmVsLFxuICAgICAgZmllbGQ6IGFmXG4gICAgfSkpXG4gIF07XG5cbiAgcmV0dXJuIG5ld1RleHRMYWJlbDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlVGV4dExhYmVsUHJvcEFuZFZhbHVlKGlkeCwgcHJvcCwgdmFsdWUsIHRleHRMYWJlbCkge1xuICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0ZXh0TGFiZWxbaWR4XSwgcHJvcCkpIHtcbiAgICByZXR1cm4gdGV4dExhYmVsO1xuICB9XG5cbiAgbGV0IG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5zbGljZSgpO1xuXG4gIGlmIChwcm9wID09PSAnZmllbGQnICYmIHZhbHVlID09PSBudWxsICYmIHRleHRMYWJlbC5sZW5ndGggPiAxKSB7XG4gICAgLy8gcmVtb3ZlIGxhYmVsIHdoZW4gZmllbGQgdmFsdWUgaXMgc2V0IHRvIG51bGxcbiAgICBuZXdUZXh0TGFiZWwuc3BsaWNlKGlkeCwgMSk7XG4gIH0gZWxzZSBpZiAocHJvcCkge1xuICAgIG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5tYXAoKHRsLCBpKSA9PiAoaSA9PT0gaWR4ID8gey4uLnRsLCBbcHJvcF06IHZhbHVlfSA6IHRsKSk7XG4gIH1cblxuICByZXR1cm4gbmV3VGV4dExhYmVsO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBiYXNlIGNvbmZpZzogZGF0YUlkLCBsYWJlbCwgY29sdW1uLCBpc1Zpc2libGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBpZHgsIHByb3AsIHZhbHVlfSA9IGFjdGlvbjtcbiAgY29uc3Qge3RleHRMYWJlbH0gPSBvbGRMYXllci5jb25maWc7XG5cbiAgLy8gd2hlbiBhZGRpbmcgYSBuZXcgZW1wdHkgdGV4dCBsYWJlbCxcbiAgLy8gcmVseSBvbiB0aGUgbGF5ZXIncyBkZWZhdWx0IGNvbmZpZywgb3IgdXNlIHRoZSBjb25zdGFudCBERUZBVUxUX1RFWFRfTEFCRUxcbiAgY29uc3QgZGVmYXVsdFRleHRMYWJlbCA9XG4gICAgb2xkTGF5ZXIuZ2V0RGVmYXVsdExheWVyQ29uZmlnKHtkYXRhSWQ6ICcnfSk/LnRleHRMYWJlbD8uWzBdID8/IERFRkFVTFRfVEVYVF9MQUJFTDtcblxuICBsZXQgbmV3VGV4dExhYmVsID0gdGV4dExhYmVsLnNsaWNlKCk7XG4gIGlmICghdGV4dExhYmVsW2lkeF0gJiYgaWR4ID09PSB0ZXh0TGFiZWwubGVuZ3RoKSB7XG4gICAgLy8gaWYgaWR4IGlzIHNldCB0byBsZW5ndGgsIGFkZCBlbXB0eSB0ZXh0IGxhYmVsXG4gICAgbmV3VGV4dExhYmVsID0gWy4uLnRleHRMYWJlbCwgZGVmYXVsdFRleHRMYWJlbF07XG4gIH1cblxuICBpZiAoaWR4ID09PSAnYWxsJyAmJiBwcm9wID09PSAnZmllbGRzJykge1xuICAgIG5ld1RleHRMYWJlbCA9IGFkZE9yUmVtb3ZlVGV4dExhYmVscyh2YWx1ZSwgdGV4dExhYmVsLCBkZWZhdWx0VGV4dExhYmVsKTtcbiAgfSBlbHNlIHtcbiAgICBuZXdUZXh0TGFiZWwgPSB1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUoaWR4LCBwcm9wLCB2YWx1ZSwgbmV3VGV4dExhYmVsKTtcbiAgfVxuICAvLyB1cGRhdGUgdGV4dCBsYWJlbCBwcm9wIGFuZCB2YWx1ZVxuICByZXR1cm4gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKHN0YXRlLCB7XG4gICAgb2xkTGF5ZXIsXG4gICAgbmV3Q29uZmlnOiB7dGV4dExhYmVsOiBuZXdUZXh0TGFiZWx9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBsYXllckNsYXNzZXMsIGxheWVyLCBzY2hlbWEpIHtcbiAgY29uc3QgbG9hZGVkTGF5ZXIgPSBzZXJpYWxpemVMYXllcihsYXllciwgc2NoZW1hKTtcbiAgcmV0dXJuIGxvYWRlZExheWVyXG4gICAgPyB2YWxpZGF0ZUxheWVyV2l0aERhdGEoZGF0YXNldCwgbG9hZGVkTGF5ZXIsIGxheWVyQ2xhc3Nlcywge1xuICAgICAgICBhbGxvd0VtcHR5Q29sdW1uOiB0cnVlXG4gICAgICB9KVxuICAgIDogbnVsbDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgY29uZmlnIGRhdGFJZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJEYXRhSWRDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjoge1xuICAgIG9sZExheWVyOiBMYXllcjtcbiAgICBuZXdDb25maWc6IHtcbiAgICAgIGRhdGFJZDogc3RyaW5nO1xuICAgIH07XG4gIH1cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBuZXdDb25maWd9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YUlkfSA9IG5ld0NvbmZpZztcblxuICBpZiAoIW9sZExheWVyIHx8ICFzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG5cbiAgbGV0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2RhdGFJZH0pO1xuXG4gIC8vIHRoaXMgbWF5IGhhcHBlbiB3aGVuIGEgbGF5ZXIgaXMgbmV3ICh0eXBlOiBudWxsIGFuZCBubyBjb2x1bW5zKSBidXQgaXQncyBub3QgcmVhZHkgdG8gYmUgc2F2ZWRcbiAgaWYgKG5ld0xheWVyLmlzVmFsaWRUb1NhdmUoKSkge1xuICAgIGNvbnN0IHZhbGlkYXRlZCA9IHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKFxuICAgICAgc3RhdGUuZGF0YXNldHNbZGF0YUlkXSxcbiAgICAgIHN0YXRlLmxheWVyQ2xhc3NlcyxcbiAgICAgIG5ld0xheWVyLFxuICAgICAgc3RhdGUuc2NoZW1hXG4gICAgKTtcbiAgICAvLyBpZiBjYW50IHZhbGlkYXRlIGl0IHdpdGggZGF0YSBjcmVhdGUgYSBuZXcgb25lXG4gICAgaWYgKCF2YWxpZGF0ZWQpIHtcbiAgICAgIGNvbnN0IG9sZExheWVyVHlwZSA9IG9sZExheWVyLnR5cGU7XG4gICAgICBpZiAob2xkTGF5ZXJUeXBlKSB7XG4gICAgICAgIG5ld0xheWVyID0gbmV3IHN0YXRlLmxheWVyQ2xhc3Nlc1tvbGRMYXllclR5cGVdKHtkYXRhSWQsIGlkOiBvbGRMYXllci5pZH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllciA9IHZhbGlkYXRlZDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gTGF5ZXIgaXMgbm90IHZhbGlkIHRvIHNhdmUgKGUuZy4gbWlzc2luZyBjb2x1bW5zKSwgYnV0IHdlIHN0aWxsIG5lZWQgdG9cbiAgICAvLyByZW1hcCB2aXN1YWwgY2hhbm5lbCBmaWVsZHMgdG8gdGhlIG5ldyBkYXRhc2V0IHRvIGF2b2lkIHN0YWxlIGZpZWxkIHJlZmVyZW5jZXNcbiAgICAvLyB0aGF0IHBvaW50IHRvIHJvd3MgYmV5b25kIHRoZSBuZXcgZGF0YXNldCdzIGxlbmd0aFxuICAgIGNvbnN0IG5ld0RhdGFzZXRGaWVsZHMgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdLmZpZWxkcztcbiAgICBjb25zdCByZW1hcHBlZEZpZWxkczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgIE9iamVjdC52YWx1ZXMobmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goKHtmaWVsZDogZmllbGRLZXl9KSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50RmllbGQgPSBuZXdMYXllci5jb25maWdbZmllbGRLZXldO1xuICAgICAgaWYgKGN1cnJlbnRGaWVsZCkge1xuICAgICAgICBjb25zdCBtYXRjaGVkID0gbmV3RGF0YXNldEZpZWxkcy5maW5kKGYgPT4gZi5uYW1lID09PSBjdXJyZW50RmllbGQubmFtZSk7XG4gICAgICAgIHJlbWFwcGVkRmllbGRzW2ZpZWxkS2V5XSA9IG1hdGNoZWQgfHwgbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoT2JqZWN0LmtleXMocmVtYXBwZWRGaWVsZHMpLmxlbmd0aCkge1xuICAgICAgbmV3TGF5ZXIgPSBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyhyZW1hcHBlZEZpZWxkcyk7XG4gICAgfVxuICAgIC8vIFZhbGlkYXRlIGZpZWxkIHR5cGUgY29tcGF0aWJpbGl0eSDigJQgY2xlYXJzIGZpZWxkcyB3aG9zZSB0eXBlIGlzIGluY29tcGF0aWJsZVxuICAgIC8vIHdpdGggdGhlIGNoYW5uZWwncyBzdXBwb3J0ZWQgZmllbGQgdHlwZXMgKGUuZy4gc3RyaW5nIGZpZWxkIGZvciBhIG51bWVyaWMgc2NhbGUpXG4gICAgT2JqZWN0LnZhbHVlcyhuZXdMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaCgoe2tleX0pID0+IHtcbiAgICAgIG5ld0xheWVyLnZhbGlkYXRlVmlzdWFsQ2hhbm5lbChrZXkpO1xuICAgIH0pO1xuICB9XG5cbiAgbmV3TGF5ZXIgPSBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgaXNWaXNpYmxlOiBvbGRMYXllci5jb25maWcuaXNWaXNpYmxlLFxuICAgIGlzQ29uZmlnQWN0aXZlOiB0cnVlXG4gIH0pO1xuXG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzKTtcbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgdW5kZWZpbmVkKTtcblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRJbml0aWFsTGF5ZXJDb25maWcobGF5ZXIsIGRhdGFzZXRzLCBsYXllckNsYXNzZXMpOiBMYXllciB7XG4gIGxldCBuZXdMYXllciA9IGxheWVyO1xuICBpZiAoIU9iamVjdC5rZXlzKGRhdGFzZXRzKS5sZW5ndGgpIHtcbiAgICAvLyBubyBkYXRhIGlzIGxvYWRlZFxuICAgIHJldHVybiBsYXllcjtcbiAgfVxuICBpZiAoIWxheWVyLmNvbmZpZy5kYXRhSWQpIHtcbiAgICAvLyBzZXQgbGF5ZXIgZGF0YUlkXG4gICAgbmV3TGF5ZXIgPSBsYXllci51cGRhdGVMYXllckNvbmZpZyh7ZGF0YUlkOiBPYmplY3Qua2V5cyhkYXRhc2V0cylbMF19KTtcbiAgfVxuICBjb25zdCBkYXRhc2V0ID0gZGF0YXNldHNbbmV3TGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBsYXllcjtcbiAgfVxuXG4gIC8vIGZpbmQgZGVmYXV0IGxheWVyIHByb3BzXG4gIGNvbnN0IHJlc3VsdCA9XG4gICAgdHlwZW9mIGxheWVyQ2xhc3Nlc1tuZXdMYXllci50eXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMgPT09ICdmdW5jdGlvbidcbiAgICAgID8gbGF5ZXJDbGFzc2VzW25ld0xheWVyLnR5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyhkYXRhc2V0LCBbXSlcbiAgICAgIDoge3Byb3BzOiBbXX07XG5cbiAgLy8gYW4gYXJyYXkgb2YgcG9zc2libGUgcHJvcHMsIHVzZSAxc3Qgb25lXG4gIGNvbnN0IHByb3BzID0gQXJyYXkuaXNBcnJheShyZXN1bHQpID8gcmVzdWx0IDogcmVzdWx0LnByb3BzIHx8IFtdO1xuXG4gIGlmIChwcm9wcy5sZW5ndGgpIHtcbiAgICBuZXdMYXllciA9IG5ldyBsYXllckNsYXNzZXNbbGF5ZXIudHlwZV0oe1xuICAgICAgLi4ucHJvcHNbMF0sXG4gICAgICBsYWJlbDogbmV3TGF5ZXIuY29uZmlnLmxhYmVsLFxuICAgICAgZGF0YUlkOiBuZXdMYXllci5jb25maWcuZGF0YUlkLFxuICAgICAgaXNDb25maWdBY3RpdmU6IG5ld0xheWVyLmNvbmZpZy5pc0NvbmZpZ0FjdGl2ZSxcbiAgICAgIGlzVmlzaWJsZTogbmV3TGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB0eXBlb2YgbmV3TGF5ZXIuc2V0SW5pdGlhbExheWVyQ29uZmlnID09PSAnZnVuY3Rpb24nXG4gICAgPyBuZXdMYXllci5zZXRJbml0aWFsTGF5ZXJDb25maWcoZGF0YXNldClcbiAgICA6IG5ld0xheWVyO1xufVxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgdHlwZS4gUHJldmlld3MgbGF5ZXIgY29uZmlnIHdpbGwgYmUgY29waWVkIGlmIGFwcGxpY2FibGUuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclR5cGVDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3VHlwZX0gPSBhY3Rpb247XG4gIGlmICghb2xkTGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qgb2xkSWQgPSBvbGRMYXllci5pZDtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZElkKTtcblxuICBpZiAoIXN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXSkge1xuICAgIENvbnNvbGUuZXJyb3IoYCR7bmV3VHlwZX0gaXMgbm90IGEgdmFsaWQgbGF5ZXIgdHlwZWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgbmV3TGF5ZXIgPSBuZXcgc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdKHtcbiAgICAvLyBrZWVwIG9sZCBsYXllciBsYWJsZSBhbmQgaXNDb25maWdBY3RpdmVcbiAgICBsYWJlbDogb2xkTGF5ZXIuY29uZmlnLmxhYmVsLFxuICAgIGlzQ29uZmlnQWN0aXZlOiBvbGRMYXllci5jb25maWcuaXNDb25maWdBY3RpdmUsXG4gICAgZGF0YUlkOiBvbGRMYXllci5jb25maWcuZGF0YUlkXG4gIH0pO1xuXG4gIGlmICghb2xkTGF5ZXIudHlwZSkge1xuICAgIC8vIGlmIHNldHRpbmcgbGF5ZXIgdHlwZSBvbiBhbiBlbXB0eSBsYXllclxuICAgIG5ld0xheWVyID0gc2V0SW5pdGlhbExheWVyQ29uZmlnKG5ld0xheWVyLCBzdGF0ZS5kYXRhc2V0cywgc3RhdGUubGF5ZXJDbGFzc2VzKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBnZXQgYSBtaW50IGxheWVyLCB3aXRoIG5ldyBpZCBhbmQgdHlwZVxuICAgIC8vIGJlY2F1c2UgZGVjay5nbCB1c2VzIGlkIHRvIG1hdGNoIGJldHdlZW4gbmV3IGFuZCBvbGQgbGF5ZXIuXG4gICAgLy8gSWYgdHlwZSBoYXMgY2hhbmdlZCBidXQgaWQgaXMgdGhlIHNhbWUsIGl0IHdpbGwgYnJlYWtcblxuICAgIGNvbnN0IGRlZmF1bHRMYXllclByb3BzID1cbiAgICAgIHR5cGVvZiBzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyhzdGF0ZS5kYXRhc2V0c1tuZXdMYXllci5jb25maWcuZGF0YUlkXSlcbiAgICAgICAgOiBudWxsO1xuXG4gICAgbmV3TGF5ZXIuYXNzaWduQ29uZmlnVG9MYXllcihcbiAgICAgIG9sZExheWVyLmNvbmZpZyxcbiAgICAgIG9sZExheWVyLnZpc0NvbmZpZ1NldHRpbmdzLFxuICAgICAgc3RhdGUuZGF0YXNldHMsXG4gICAgICBkZWZhdWx0TGF5ZXJQcm9wc1xuICAgICk7XG4gICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJEb21haW4oc3RhdGUuZGF0YXNldHMpO1xuICB9XG5cbiAgY29uc3Qge2NsaWNrZWQsIGhvdmVySW5mb30gPSBzdGF0ZTtcblxuICBsZXQgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2xpY2tlZDogb2xkTGF5ZXIuaXNMYXllckhvdmVyZWQoY2xpY2tlZCkgPyB1bmRlZmluZWQgOiBjbGlja2VkLFxuICAgIGhvdmVySW5mbzogb2xkTGF5ZXIuaXNMYXllckhvdmVyZWQoaG92ZXJJbmZvKSA/IHVuZGVmaW5lZCA6IGhvdmVySW5mb1xuICB9O1xuXG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgbmV3U3RhdGUpO1xuICBuZXdTdGF0ZSA9IHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXdTdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xuXG4gIGlmIChsYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQgfHwgb2xkTGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgLy8gdXBkYXRlIHNwbGl0TWFwIGxheWVyIGlkXG4gIGlmIChzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgIHNwbGl0TWFwczogbmV3U3RhdGUuc3BsaXRNYXBzLm1hcChzZXR0aW5ncyA9PiB7XG4gICAgICAgIGNvbnN0IHtbb2xkSWRdOiBvbGRMYXllck1hcCwgLi4ub3RoZXJMYXllcnN9ID0gc2V0dGluZ3MubGF5ZXJzO1xuICAgICAgICByZXR1cm4gb2xkSWQgaW4gc2V0dGluZ3MubGF5ZXJzXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIC4uLnNldHRpbmdzLFxuICAgICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgICAuLi5vdGhlckxheWVycyxcbiAgICAgICAgICAgICAgICBbbGF5ZXIuaWRdOiBvbGRMYXllck1hcFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiBzZXR0aW5ncztcbiAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSBsYXllck9yZGVyIHdpdGggbmV3IGlkXG4gIG5ld1N0YXRlID0ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGxheWVyT3JkZXI6IG5ld1N0YXRlLmxheWVyT3JkZXIubWFwKGxheWVySWQgPT5cbiAgICAgIGxheWVySWQgPT09IG9sZExheWVyLmlkID8gbmV3TGF5ZXIuaWQgOiBsYXllcklkXG4gICAgKVxuICB9O1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgdmlzdWFsIGNoYW5uZWxcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVmlzdWFsQ2hhbm5lbENoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIG5ld0NvbmZpZywgbmV3VmlzQ29uZmlnLCBjaGFubmVsfSA9IGFjdGlvbjtcbiAgaWYgKCFvbGRMYXllci5jb25maWcuZGF0YUlkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW29sZExheWVyLmNvbmZpZy5kYXRhSWRdO1xuXG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGxldCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKG5ld0NvbmZpZyk7XG4gIGlmIChuZXdWaXNDb25maWcpIG5ld0xheWVyID0gbmV3TGF5ZXIudXBkYXRlTGF5ZXJWaXNDb25maWcobmV3VmlzQ29uZmlnKTtcblxuICBuZXdMYXllci51cGRhdGVMYXllclZpc3VhbENoYW5uZWwoZGF0YXNldCwgY2hhbm5lbCk7XG5cbiAgLy8gY2FsbGluZyB1cGRhdGUgYW5pbWF0aW9uIGRvbWFpbiBmaXJzdCB0byBtZXJnZSBhbGwgbGF5ZXIgYW5pbWF0aW9uIGRvbWFpblxuICBsZXQgdXBkYXRlZFN0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKHN0YXRlKTtcblxuICBjb25zdCB2aXN1YWxDaGFubmVsID0gb2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF07XG4gIGlmICh2aXN1YWxDaGFubmVsPy5jaGFubmVsU2NhbGVUeXBlID09PSBDSEFOTkVMX1NDQUxFUy5jb2xvciAmJiBuZXdDb25maWdbdmlzdWFsQ2hhbm5lbC5maWVsZF0pIHtcbiAgICAvLyBpZiBjb2xvciBmaWVsZCBjaGFuZ2VkLCBzZXQgY3VzdG9tQnJlYWtzIHRvIGZhbHNlXG4gICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb2xvclVJKHZpc3VhbENoYW5uZWwucmFuZ2UsIHtcbiAgICAgIGNvbG9yUmFuZ2VDb25maWc6IHtcbiAgICAgICAgLi4ubmV3TGF5ZXIuY29uZmlnLmNvbG9yVUlbdmlzdWFsQ2hhbm5lbC5yYW5nZV0uY29sb3JSYW5nZUNvbmZpZyxcbiAgICAgICAgY3VzdG9tQnJlYWtzOiBmYWxzZVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdXBkYXRlZFN0YXRlID0ge1xuICAgICAgLi4udXBkYXRlZFN0YXRlLFxuICAgICAgbGF5ZXJzOiB1cGRhdGVkU3RhdGUubGF5ZXJzLm1hcChsID0+IChsLmlkID09PSBvbGRMYXllci5pZCA/IG5ld0xheWVyIDogbCkpXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IG9sZExheWVyRGF0YSA9IHVwZGF0ZWRTdGF0ZS5sYXllckRhdGFbaWR4XTtcbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCB1cGRhdGVkU3RhdGUsIG9sZExheWVyRGF0YSk7XG5cbiAgaWYgKFxuICAgIHZpc3VhbENoYW5uZWw/LmNoYW5uZWxTY2FsZVR5cGUgPT09IENIQU5ORUxfU0NBTEVTLmNvbG9yICYmXG4gICAgbmV3Q29uZmlnW3Zpc3VhbENoYW5uZWw/LnNjYWxlXSA9PT0gU0NBTEVfVFlQRVMuY3VzdG9tT3JkaW5hbCAmJlxuICAgICFuZXdWaXNDb25maWdcbiAgKSB7XG4gICAgLy8gd2hlbiBzd2l0Y2hpbmcgdG8gY3VzdG9tT3JkaW5hbCBzY2FsZSwgY3JlYXRlIGEgY3VzdG9tUGFsZXR0ZSBpbiBjb2xvclVJIHdpdGggdXBkYXRlZCBjb2xvckRvbWFpblxuICAgIGNvbnN0IGN1c3RvbVBhbGV0dGUgPSBpbml0Q3VzdG9tUGFsZXR0ZUJ5Q3VzdG9tU2NhbGUoe1xuICAgICAgc2NhbGU6IFNDQUxFX1RZUEVTLmN1c3RvbU9yZGluYWwsXG4gICAgICBmaWVsZDogbGF5ZXIuY29uZmlnW3Zpc3VhbENoYW5uZWwuZmllbGRdLFxuICAgICAgb3JkaW5hbERvbWFpbjogbGF5ZXIuY29uZmlnW2xheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdLmRvbWFpbl0sXG4gICAgICByYW5nZTogbGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1t2aXN1YWxDaGFubmVsLnJhbmdlXSxcbiAgICAgIGNvbG9yQnJlYWtzOiBudWxsXG4gICAgfSk7XG4gICAgLy8gdXBkYXRlIGNvbG9yUmFuZ2Ugd2l0aCBuZXcgY3VzdG9tUGFsZXR0ZVxuICAgIGxheWVyLnVwZGF0ZUxheWVyQ29sb3JVSSh2aXN1YWxDaGFubmVsLnJhbmdlLCB7XG4gICAgICBzaG93Q29sb3JDaGFydDogdHJ1ZSxcbiAgICAgIGNvbG9yUmFuZ2VDb25maWc6IHtcbiAgICAgICAgLi4ubGF5ZXIuY29uZmlnLmNvbG9yVUlbdmlzdWFsQ2hhbm5lbC5yYW5nZV0uY29sb3JSYW5nZUNvbmZpZyxcbiAgICAgICAgY3VzdG9tQnJlYWtzOiB0cnVlXG4gICAgICB9LFxuICAgICAgY3VzdG9tUGFsZXR0ZVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEodXBkYXRlZFN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIGB2aXNDb25maWdgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBjb25zdCBwcm9wcyA9IE9iamVjdC5rZXlzKGFjdGlvbi5uZXdWaXNDb25maWcpO1xuXG4gIGNvbnN0IG5ld1Zpc0NvbmZpZyA9IHtcbiAgICAuLi5vbGRMYXllci5jb25maWcudmlzQ29uZmlnLFxuICAgIC4uLmFjdGlvbi5uZXdWaXNDb25maWdcbiAgfTtcblxuICBjb25zdCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHt2aXNDb25maWc6IG5ld1Zpc0NvbmZpZ30pO1xuXG4gIGxldCBuZXh0U3RhdGUgPSBzdGF0ZTtcblxuICAvLyBFeGNsdXNpdmUgYml0bWFwIGVkaXRpbmc6IHdoZW4gZWRpdEJvdW5kcyBpcyB0dXJuZWQgb24gZm9yIG9uZSBiaXRtYXAgbGF5ZXIsXG4gIC8vIHR1cm4gaXQgb2ZmIGZvciBhbGwgb3RoZXIgYml0bWFwIGxheWVyc1xuICBpZiAoXG4gICAgbmV3TGF5ZXIudHlwZSA9PT0gJ2JpdG1hcCcgJiZcbiAgICBhY3Rpb24ubmV3VmlzQ29uZmlnLmVkaXRCb3VuZHMgPT09IHRydWVcbiAgKSB7XG4gICAgbmV4dFN0YXRlID0ge1xuICAgICAgLi4ubmV4dFN0YXRlLFxuICAgICAgbGF5ZXJzOiBuZXh0U3RhdGUubGF5ZXJzLm1hcCgobCwgaSkgPT4ge1xuICAgICAgICBpZiAoaSAhPT0gaWR4ICYmIGwudHlwZSA9PT0gJ2JpdG1hcCcgJiYgbC5jb25maWcudmlzQ29uZmlnLmVkaXRCb3VuZHMpIHtcbiAgICAgICAgICByZXR1cm4gbC51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgICAgICB2aXNDb25maWc6IHsuLi5sLmNvbmZpZy52aXNDb25maWcsIGVkaXRCb3VuZHM6IGZhbHNlfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsO1xuICAgICAgfSlcbiAgICB9O1xuICB9XG5cbiAgaWYgKG5ld0xheWVyLnNob3VsZENhbGN1bGF0ZUxheWVyRGF0YShwcm9wcykpIHtcbiAgICBjb25zdCBvbGRMYXllckRhdGEgPSBuZXh0U3RhdGUubGF5ZXJEYXRhW2lkeF07XG4gICAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBuZXh0U3RhdGUsIG9sZExheWVyRGF0YSk7XG4gICAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXh0U3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV4dFN0YXRlLCB7bGF5ZXI6IG5ld0xheWVyLCBpZHh9KTtcbn1cblxuLyoqXG4gKiBSZXNldCBhbmltYXRpb24gY29uZmlnIGN1cnJlbnQgdGltZSB0byBhIHNwZWNpZmllZCB2YWx1ZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyID0gPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICB7dmFsdWV9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvblxuKTogUyA9PiB7XG4gIGNvbnN0IGN1cnJlbnRUaW1lID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZVswXSA6IHZhbHVlO1xuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICBjdXJyZW50VGltZVxuICAgIH1cbiAgfTtcbiAgLy8gdXBkYXRlIGFuaW1hdGlvbiBjb25maWcgZm9yIGVhY2ggbGF5ZXJcbiAgcmV0dXJuIHN0YXRlLmxheWVycy5yZWR1Y2UoKGFjY3UsIGwpID0+IHtcbiAgICBpZiAobC5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQgJiYgbC50eXBlICE9PSAndHJpcCcpIHtcbiAgICAgIHJldHVybiBsYXllckFuaW1hdGlvbkNoYW5nZVVwZGF0ZXIoYWNjdSwge29sZExheWVyOiBsLCBwcm9wOiAnY3VycmVudFRpbWUnLCBjdXJyZW50VGltZX0pO1xuICAgIH1cbiAgICByZXR1cm4gYWNjdTtcbiAgfSwgbmV4dFN0YXRlKTtcbn07XG5cbi8qKlxuICogVXBkYXRlIGZpbHRlciBwcm9wZXJ0eVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWVVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlckFuaW1hdGlvblRpbWVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKHN0YXRlLCBhY3Rpb24pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgYW5pbWF0aW9uIHdpbmRvd1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHtpZCwgYW5pbWF0aW9uV2luZG93fTogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXJBY3Rpb25cbik6IFMge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLmlkID09PSBpZCk7XG5cbiAgaWYgKCFmaWx0ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIGFuaW1hdGlvbldpbmRvd1xuICB9O1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShzdGF0ZS5maWx0ZXJzKVxuICB9O1xuXG4gIGNvbnN0IG5ld1N5bmNUaW1lbGluZU1vZGUgPSBnZXRTeW5jQW5pbWF0aW9uTW9kZShuZXdGaWx0ZXIgYXMgVGltZVJhbmdlRmlsdGVyKTtcblxuICByZXR1cm4gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtpZCwgbW9kZTogbmV3U3luY1RpbWVsaW5lTW9kZX0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZmlsdGVySWQsIG5ld0ZpbHRlcn0gPSBhY3Rpb247XG4gIGNvbnN0IG9sZEZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKCFvbGRGaWx0ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBTZXJpYWxpemUgdGhlIGZpbHRlcnMgdG8gb25seSBjb21wYXJlIHRoZSBzYXZlZCBwcm9wZXJ0aWVzXG4gIGNvbnN0IHNlcmlhbGl6ZWRPbGRGaWx0ZXIgPSBzZXJpYWxpemVGaWx0ZXIob2xkRmlsdGVyLCBzdGF0ZS5zY2hlbWEpID8/IHtjb25maWc6IHt9fTtcbiAgY29uc3Qgc2VyaWFsaXplZE5ld0ZpbHRlciA9IHNlcmlhbGl6ZUZpbHRlcihuZXdGaWx0ZXIsIHN0YXRlLnNjaGVtYSk7XG4gIGlmICghc2VyaWFsaXplZE5ld0ZpbHRlciB8fCBpc0VxdWFsKHNlcmlhbGl6ZWRPbGRGaWx0ZXIsIHNlcmlhbGl6ZWROZXdGaWx0ZXIpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gSWYgdGhlcmUgYXJlIGFueSBjaGFuZ2VzIHRvIHRoZSBmaWx0ZXIsIGFwcGx5IHRoZW1cbiAgY29uc3QgY2hhbmdlZCA9IHBpY2tDaGFuZ2VkUHJvcHMoc2VyaWFsaXplZE9sZEZpbHRlciwgc2VyaWFsaXplZE5ld0ZpbHRlcik7XG4gIGRlbGV0ZSBjaGFuZ2VkWydpZCddOyAvLyBpZCBzaG91bGQgbm90IGJlIGNoYW5nZWRcblxuICBjb25zdCBmaWx0ZXJJbmRleCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gZmlsdGVySWQpO1xuICBpZiAoZmlsdGVySW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKFxuICAgIHN0YXRlLFxuICAgIHNldEZpbHRlcihmaWx0ZXJJbmRleCwgT2JqZWN0LmtleXMoY2hhbmdlZCksIE9iamVjdC52YWx1ZXMoY2hhbmdlZCkpXG4gICk7XG59XG5cbi8qKlxuICogVXBkYXRlIGZpbHRlciBwcm9wZXJ0eVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlclVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFMge1xuICBjb25zdCB7aWR4LCB2YWx1ZUluZGV4ID0gMH0gPSBhY3Rpb247XG4gIGNvbnN0IG9sZEZpbHRlciA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcbiAgaWYgKCFvbGRGaWx0ZXIpIHtcbiAgICBDb25zb2xlLmVycm9yKGBmaWx0ZXJzLiR7aWR4fSBpcyB1bmRlZmluZWRgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKFxuICAgIEFycmF5LmlzQXJyYXkoYWN0aW9uLnByb3ApICYmXG4gICAgKCFBcnJheS5pc0FycmF5KGFjdGlvbi52YWx1ZSkgfHwgYWN0aW9uLnByb3AubGVuZ3RoICE9PSBhY3Rpb24udmFsdWUubGVuZ3RoKVxuICApIHtcbiAgICBDb25zb2xlLmVycm9yKCdFeHBlY3RpbmcgdmFsdWUgdG8gYmUgYW4gYXJyYXkgb2YgdGhlIHNhbWUgbGVuZ3RoLCBzaW5jZSBwcm9wIGlzIGFuIGFycmF5Jyk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIC8vIGNvbnZlcnQgcHJvcCBhbmQgdmFsdWUgdG8gYXJyYXlcbiAgY29uc3QgcHJvcHMgPSB0b0FycmF5KGFjdGlvbi5wcm9wKTtcbiAgY29uc3QgdmFsdWVzID0gQXJyYXkuaXNBcnJheShhY3Rpb24ucHJvcCkgPyB0b0FycmF5KGFjdGlvbi52YWx1ZSkgOiBbYWN0aW9uLnZhbHVlXTtcblxuICBsZXQgbmV3RmlsdGVyID0gb2xkRmlsdGVyO1xuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcblxuICBsZXQgZGF0YXNldElkc1RvRmlsdGVyOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgcHJvcCA9IHByb3BzW2ldO1xuICAgIGNvbnN0IHZhbHVlID0gdmFsdWVzW2ldO1xuICAgIC8vIFdlIGN1cnJlbnRseSBkbyBub3Qgc3VwcG9ydCBwYXNzaW5nIGluIG5hbWUgYXMgYW4gYXJyYXkgaW50byBfdXBkYXRlRmlsdGVyUHJvcCwgc28gd2UgY2FsbCBpdCBtdWx0aXBsZSB0aW1lcyB3aXRoIGVhY2ggbmFtZVxuICAgIC8vIFNlZSB0aGUgY29tbWVudCBpbiB0aGVyZSBhcyB0byB3aGF0IHNob3VsZCBiZSBhZGRyZXNzZWRcbiAgICBsZXQgcmVzO1xuICAgIGlmIChwcm9wID09PSAnbmFtZScgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgICAgIHJlcyA9IHZhbHVlLnJlZHVjZSgoYWNjdSwgdikgPT4ge1xuICAgICAgICByZXR1cm4gX3VwZGF0ZUZpbHRlclByb3AoYWNjdSwgbmV3RmlsdGVyLCBwcm9wLCB2LCB2YWx1ZUluZGV4KTtcbiAgICAgIH0sIG5ld1N0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzID0gX3VwZGF0ZUZpbHRlclByb3AobmV3U3RhdGUsIG5ld0ZpbHRlciwgcHJvcCwgdmFsdWUsIHZhbHVlSW5kZXgpO1xuICAgIH1cbiAgICBuZXdGaWx0ZXIgPSByZXMuZmlsdGVyO1xuICAgIG5ld1N0YXRlID0gcmVzLnN0YXRlO1xuICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IGRhdGFzZXRJZHNUb0ZpbHRlci5jb25jYXQocmVzLmRhdGFzZXRJZHNUb0ZpbHRlcik7XG4gIH1cblxuICBjb25zdCBlbmxhcmdlZEZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+IGYudmlldyA9PT0gRklMVEVSX1ZJRVdfVFlQRVMuZW5sYXJnZWQpO1xuXG4gIGlmIChlbmxhcmdlZEZpbHRlciAmJiBlbmxhcmdlZEZpbHRlci5pZCAhPT0gbmV3RmlsdGVyLmlkKSB7XG4gICAgLy8gdGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lIGVubGFyZ2VkIGZpbHRlclxuICAgIG5ld0ZpbHRlci52aWV3ID0gRklMVEVSX1ZJRVdfVFlQRVMuc2lkZTtcbiAgfVxuXG4gIC8vIHNhdmUgbmV3IGZpbHRlcnMgdG8gbmV3U3RhdGVcbiAgbmV3U3RhdGUgPSBzZXQoWydmaWx0ZXJzJywgaWR4XSwgbmV3RmlsdGVyLCBuZXdTdGF0ZSk7XG5cbiAgLy8gZmlsdGVyIGRhdGFcbiAgY29uc3QgZmlsdGVyZWREYXRhc2V0cyA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgdW5pcShkYXRhc2V0SWRzVG9GaWx0ZXIpLFxuICAgIG5ld1N0YXRlLmRhdGFzZXRzLFxuICAgIG5ld1N0YXRlLmZpbHRlcnMsXG4gICAgbmV3U3RhdGUubGF5ZXJzXG4gICk7XG5cbiAgbmV3U3RhdGUgPSBzZXQoWydkYXRhc2V0cyddLCBmaWx0ZXJlZERhdGFzZXRzLCBuZXdTdGF0ZSk7XG5cbiAgLy8gbmVlZCB0byB1cGRhdGUgZmlsdGVyUGxvdCBhZnRlciBmaWx0ZXIgRGF0YXNldCBmb3IgcGxvdCB0byB1cGRhdGUgb24gZmlsdGVyZWQgcmVzdWx0XG4gIGNvbnN0IGZpbHRlcldpdGhQTG90ID0gdXBkYXRlRmlsdGVyUGxvdChuZXdTdGF0ZS5kYXRhc2V0cywgbmV3U3RhdGUuZmlsdGVyc1tpZHhdKTtcblxuICBuZXdTdGF0ZSA9IHNldChbJ2ZpbHRlcnMnLCBpZHhdLCBmaWx0ZXJXaXRoUExvdCwgbmV3U3RhdGUpO1xuXG4gIC8vIGRhdGFJZCBpcyBhbiBhcnJheVxuICAvLyBwYXNzIG9ubHkgdGhlIGRhdGFzZXQgd2UgbmVlZCB0byB1cGRhdGVcbiAgbmV3U3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV3U3RhdGUsIGRhdGFzZXRJZHNUb0ZpbHRlciwgbmV3RmlsdGVyKTtcblxuICAvLyBJZiB0aW1lIHJhbmdlIGZpbHRlciB2YWx1ZSB3YXMgdXBkYXRlZCwgYWRqdXN0IGFuaW1hdGlvbiBjb25maWdcbiAgaWYgKG5ld0ZpbHRlci50eXBlID09PSBGSUxURVJfVFlQRVMudGltZVJhbmdlICYmIHByb3BzLmluY2x1ZGVzKCd2YWx1ZScpKSB7XG4gICAgbmV3U3RhdGUgPSBhZGp1c3RBbmltYXRpb25Db25maWdXaXRoRmlsdGVyKG5ld1N0YXRlLCBhY3Rpb24uaWR4KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuZnVuY3Rpb24gX3VwZGF0ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIHZhbHVlLCBkYXRhc2V0cykge1xuICBsZXQgbmV3RmlsdGVyID0gZmlsdGVyO1xuICBpZiAoZmlsdGVyLmRhdGFJZFt2YWx1ZUluZGV4XSkge1xuICAgIC8vIGlmIGRhdGFJZCBhbHJlYWR5IGV4aXN0XG4gICAgbmV3RmlsdGVyID0gX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIGRhdGFzZXRzKTtcbiAgfVxuICBpZiAodmFsdWUpIHtcbiAgICBjb25zdCBuZXh0VmFsdWUgPSBuZXdGaWx0ZXIuZGF0YUlkLnNsaWNlKCk7XG4gICAgbmV4dFZhbHVlW3ZhbHVlSW5kZXhdID0gdmFsdWU7XG4gICAgbmV3RmlsdGVyID0gc2V0KFsnZGF0YUlkJ10sIG5leHRWYWx1ZSwgbmV3RmlsdGVyKTtcbiAgfVxuICByZXR1cm4gbmV3RmlsdGVyO1xufVxuXG5mdW5jdGlvbiBfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgZGF0YXNldHMpIHtcbiAgY29uc3QgZGF0YUlkID0gZmlsdGVyLmRhdGFJZFt2YWx1ZUluZGV4XTtcblxuICBpZiAoZmlsdGVyLmRhdGFJZC5sZW5ndGggPT09IDEgJiYgdmFsdWVJbmRleCA9PT0gMCkge1xuICAgIC8vIGlmIHJlbW92ZSB0aGUgb25seSBkYXRhSWQsIGNyZWF0ZSBhbiBlbXB0eSBmaWx0ZXIgaW5zdGVhZDtcbiAgICByZXR1cm4gZ2V0RGVmYXVsdEZpbHRlcih7aWQ6IGZpbHRlci5pZH0pO1xuICB9XG5cbiAgaWYgKGRhdGFJZCkge1xuICAgIGZpbHRlciA9IHJlbW92ZUZpbHRlclBsb3QoZmlsdGVyLCBkYXRhSWQpO1xuICB9XG5cbiAgZm9yIChjb25zdCBwcm9wIG9mIFsnZGF0YUlkJywgJ25hbWUnLCAnZmllbGRJZHgnLCAnZ3B1Q2hhbm5lbCddKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyW3Byb3BdKSkge1xuICAgICAgY29uc3QgbmV4dFZhbCA9IGZpbHRlcltwcm9wXS5zbGljZSgpO1xuICAgICAgbmV4dFZhbC5zcGxpY2UodmFsdWVJbmRleCwgMSk7XG4gICAgICBmaWx0ZXIgPSBzZXQoW3Byb3BdLCBuZXh0VmFsLCBmaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIG1lcmdlRmllbGREb21haW4gZm9yIHRoZSByZW1haW5pbmcgZmllbGRzXG4gIGNvbnN0IGRvbWFpblN0ZXBzID0gbWVyZ2VGaWx0ZXJEb21haW4oZmlsdGVyLCBkYXRhc2V0cyk7XG5cbiAgY29uc3QgbmV4dEZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgLy8gdmFsdWU6IG5leHRWYWx1ZSxcbiAgICAuLi4oZG9tYWluU3RlcHMgPyB7ZG9tYWluOiBkb21haW5TdGVwcz8uZG9tYWluLCBzdGVwOiBkb21haW5TdGVwcz8uc3RlcH0gOiB7fSlcbiAgfTtcblxuICBjb25zdCBuZXh0VmFsdWUgPSBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluKG5leHRGaWx0ZXIudmFsdWUsIG5leHRGaWx0ZXIpO1xuICByZXR1cm4ge1xuICAgIC4uLm5leHRGaWx0ZXIsXG4gICAgdmFsdWU6IG5leHRWYWx1ZVxuICB9O1xufVxuXG4vKiogKlxuICogVXBkYXRlcyBhIHNpbmdsZSBwcm9wZXJ0eSBvZiBhIGZpbHRlclxuICovXG5mdW5jdGlvbiBfdXBkYXRlRmlsdGVyUHJvcChzdGF0ZSwgZmlsdGVyLCBwcm9wLCB2YWx1ZSwgdmFsdWVJbmRleCwgZGF0YXNldElkcz8pIHtcbiAgbGV0IGRhdGFzZXRJZHNUb0ZpbHRlcjogc3RyaW5nW10gPSBbXTtcbiAgc3dpdGNoIChwcm9wKSB7XG4gICAgLy8gVE9ETzogTmV4dCBQUiBmb3IgVUkgaWYgd2UgdXBkYXRlIGZpbHRlckRhdGFJZCwgd2UgbmVlZCB0byBjb25zaWRlciB0d28gY2FzZXM6XG4gICAgLy8gMS4gZGF0YUlkIGlzIGVtcHR5OiBjcmVhdGUgYSBkZWZhdWx0IGZpbHRlclxuICAgIC8vIDIuIEFkZCBhIG5ldyBkYXRhc2V0IGlkXG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5kYXRhSWQ6IHtcbiAgICAgIGNvbnN0IG9sZERhdGFJZCA9IFsuLi5maWx0ZXIuZGF0YUlkXTtcbiAgICAgIGZpbHRlciA9IF91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCB2YWx1ZSwgc3RhdGUuZGF0YXNldHMpO1xuICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gdW5pcShbLi4ub2xkRGF0YUlkLCAuLi5maWx0ZXIuZGF0YUlkXSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5uYW1lOiB7XG4gICAgICAvLyB3ZSBhcmUgc3VwcG9ydGluZyB0aGUgY3VycmVudCBmdW5jdGlvbmFsaXR5XG4gICAgICAvLyBUT0RPOiBOZXh0IFBSIGZvciBVSSBmaWx0ZXIgbmFtZSB3aWxsIG9ubHkgdXBkYXRlIGZpbHRlciBuYW1lIGJ1dCBpdCB3b24ndCBoYXZlIHNpZGUgZWZmZWN0c1xuICAgICAgLy8gd2UgYXJlIGdvbm5hIHVzZSBwYWlyIG9mIGRhdGFzZXRzIGFuZCBmaWVsZElkeCB0byB1cGRhdGUgdGhlIGZpbHRlclxuICAgICAgY29uc3QgZGF0YXNldElkID0gZmlsdGVyLmRhdGFJZFt2YWx1ZUluZGV4XTtcbiAgICAgIGNvbnN0IHtmaWx0ZXI6IHVwZGF0ZWRGaWx0ZXIsIGRhdGFzZXQ6IG5ld0RhdGFzZXR9ID0gYXBwbHlGaWx0ZXJGaWVsZE5hbWUoXG4gICAgICAgIGZpbHRlcixcbiAgICAgICAgc3RhdGUuZGF0YXNldHMsXG4gICAgICAgIGRhdGFzZXRJZCxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHZhbHVlSW5kZXgsXG4gICAgICAgIHttZXJnZURvbWFpbjogdmFsdWVJbmRleCA+IDB9XG4gICAgICApO1xuICAgICAgaWYgKHVwZGF0ZWRGaWx0ZXIpIHtcbiAgICAgICAgZmlsdGVyID0gdXBkYXRlZEZpbHRlcjtcbiAgICAgICAgaWYgKGZpbHRlci5ncHUpIHtcbiAgICAgICAgICBmaWx0ZXIgPSBzZXRGaWx0ZXJHcHVNb2RlKGZpbHRlciwgc3RhdGUuZmlsdGVycyk7XG4gICAgICAgICAgZmlsdGVyID0gYXNzaWduR3B1Q2hhbm5lbChmaWx0ZXIsIHN0YXRlLmZpbHRlcnMpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlID0gc2V0KFsnZGF0YXNldHMnLCBkYXRhc2V0SWRdLCBuZXdEYXRhc2V0LCBzdGF0ZSk7XG4gICAgICAgIC8vIHJlbW92ZSBmaWx0ZXIgUGxvdCBhdCBkYXRhc2V0SWQsIHNvIGl0IHdpbGwgYmUgcmVjYWxjdWxhdGVkXG4gICAgICAgIGZpbHRlciA9IHJlbW92ZUZpbHRlclBsb3QoZmlsdGVyLCBkYXRhc2V0SWQpO1xuXG4gICAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IHVwZGF0ZWRGaWx0ZXIuZGF0YUlkO1xuICAgICAgfVxuICAgICAgLy8gb25seSBmaWx0ZXIgdGhlIGN1cnJlbnQgZGF0YXNldFxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5sYXllcklkOiB7XG4gICAgICAvLyBXZSBuZWVkIHRvIHVwZGF0ZSBvbmx5IGRhdGFzZXRJZC9zIGlmIHdlIGhhdmUgYWRkZWQvcmVtb3ZlZCBsYXllcnNcbiAgICAgIC8vIC0gY2hlY2sgZm9yIGxheWVySWQgY2hhbmdlcyAoWE9SIHdvcmtzIGJlY2F1c2Ugb2Ygc3RyaW5nIHZhbHVlcylcbiAgICAgIC8vIGlmIG5vIGRpZmZlcmVuY2VzIGJldHdlZW4gbGF5ZXJJZHMsIGRvbid0IGRvIGFueSBmaWx0ZXJpbmdcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGNvbnN0IGxheWVySWREaWZmZXJlbmNlID0geG9yKHZhbHVlLCBmaWx0ZXIubGF5ZXJJZCk7XG5cbiAgICAgIGNvbnN0IGxheWVyRGF0YUlkcyA9IHVuaXE8c3RyaW5nPihcbiAgICAgICAgbGF5ZXJJZERpZmZlcmVuY2VcbiAgICAgICAgICAubWFwKGxpZCA9PlxuICAgICAgICAgICAgZ2V0KFxuICAgICAgICAgICAgICBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGxpZCksXG4gICAgICAgICAgICAgIFsnY29uZmlnJywgJ2RhdGFJZCddXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICAgIC5maWx0ZXIoZCA9PiBkKSBhcyBzdHJpbmdbXVxuICAgICAgKTtcblxuICAgICAgLy8gb25seSBmaWx0ZXIgZGF0YXNldHNJZHNcbiAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IGxheWVyRGF0YUlkcztcblxuICAgICAgLy8gVXBkYXRlIG5ld0ZpbHRlciBkYXRhSWRzXG4gICAgICBjb25zdCBuZXdEYXRhSWRzID0gdW5pcTxzdHJpbmc+KFxuICAgICAgICB2YWx1ZVxuICAgICAgICAgID8ubWFwKGxpZCA9PlxuICAgICAgICAgICAgZ2V0KFxuICAgICAgICAgICAgICBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGxpZCksXG4gICAgICAgICAgICAgIFsnY29uZmlnJywgJ2RhdGFJZCddXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICAgIC5maWx0ZXIoZCA9PiBkKSBhcyBzdHJpbmdbXVxuICAgICAgKTtcblxuICAgICAgZmlsdGVyID0ge1xuICAgICAgICAuLi5maWx0ZXIsXG4gICAgICAgIGxheWVySWQ6IHZhbHVlLFxuICAgICAgICBkYXRhSWQ6IG5ld0RhdGFJZHNcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAgZmlsdGVyID0gc2V0KFtwcm9wXSwgdmFsdWUsIGZpbHRlcik7XG4gICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBbLi4uZmlsdGVyLmRhdGFJZF07XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiB7ZmlsdGVyLCBkYXRhc2V0SWRzLCBkYXRhc2V0SWRzVG9GaWx0ZXIsIHN0YXRlfTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LXN0YXRlbWVudHMgKi9cblxuLyoqXG4gKiBTZXQgdGhlIHByb3BlcnR5IG9mIGEgZmlsdGVyIHBsb3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRGaWx0ZXJQbG90VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR4LCBuZXdQcm9wfTogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlclBsb3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmICghc3RhdGUuZmlsdGVyc1tpZHhdKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVyc1ske2lkeH1dIGlzIHVuZGVmaW5lZGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgbmV3RmlsdGVyID0gc3RhdGUuZmlsdGVyc1tpZHhdO1xuXG4gIGZvciAoY29uc3QgcHJvcCBpbiBuZXdQcm9wKSB7XG4gICAgaWYgKHByb3AgPT09ICdwbG90VHlwZScpIHtcbiAgICAgIG5ld0ZpbHRlciA9IHBpY2tfKCdwbG90VHlwZScpKG1lcmdlXyhuZXdQcm9wLnBsb3RUeXBlKSkobmV3RmlsdGVyKTtcbiAgICB9IGVsc2UgaWYgKHByb3AgPT09ICd5QXhpcycpIHtcbiAgICAgIGNvbnN0IGNoYXJ0VHlwZSA9IG5ld1Byb3AueUF4aXMgPyBQTE9UX1RZUEVTLmxpbmVDaGFydCA6IFBMT1RfVFlQRVMuaGlzdG9ncmFtO1xuXG4gICAgICBuZXdGaWx0ZXIgPSBwaWNrXygncGxvdFR5cGUnKShtZXJnZV8oe3R5cGU6IGNoYXJ0VHlwZX0pKShtZXJnZV8obmV3UHJvcCkobmV3RmlsdGVyKSk7XG4gICAgfVxuICB9XG5cbiAgbmV3RmlsdGVyID0gdXBkYXRlRmlsdGVyUGxvdChzdGF0ZS5kYXRhc2V0cywgbmV3RmlsdGVyKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PiAoaSA9PT0gaWR4ID8gbmV3RmlsdGVyIDogZikpXG4gIH07XG59O1xuXG4vKipcbiAqIEFkZCBhIG5ldyBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRGaWx0ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZEZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+XG4gICFhY3Rpb24uZGF0YUlkXG4gICAgPyBzdGF0ZVxuICAgIDoge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgZmlsdGVyczogWy4uLnN0YXRlLmZpbHRlcnMsIGdldERlZmF1bHRGaWx0ZXIoe2RhdGFJZDogYWN0aW9uLmRhdGFJZCwgaWQ6IGFjdGlvbi5pZH0pXVxuICAgICAgfTtcblxuLyoqXG4gKiBDcmVhdGUgb3IgdXBkYXRlIGEgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgY3JlYXRlT3JVcGRhdGVGaWx0ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7aWQsIGRhdGFJZCwgZmllbGQsIHZhbHVlfSA9IGFjdGlvbjtcblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgY29uc3Qgb3JpZ2luYWxJbmRleCA9IG5ld1N0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gaWQpO1xuICBsZXQgZmlsdGVySW5kZXggPSBvcmlnaW5hbEluZGV4O1xuICBpZiAoIWlkICYmICFkYXRhSWQpIHtcbiAgICByZXR1cm4gbmV3U3RhdGU7XG4gIH1cbiAgaWYgKG9yaWdpbmFsSW5kZXggPCAwICYmIGRhdGFJZCkge1xuICAgIG5ld1N0YXRlID0gYWRkRmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge2RhdGFJZH0pO1xuICAgIGlmIChuZXdTdGF0ZS5maWx0ZXJzLmxlbmd0aCAhPT0gc3RhdGUuZmlsdGVycy5sZW5ndGggKyAxKSB7XG4gICAgICAvLyBObyBuZXcgZmlsdGVyIHdhcyBhZGRlZFxuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgICAvLyBIZXJlIHdlIGFyZSBhc3N1bWluZyB0aGF0IHRoZSBmaWx0ZXIgd2FzIGFkZGVkIGF0IHRoZSBlbmRcbiAgICBmaWx0ZXJJbmRleCA9IG5ld1N0YXRlLmZpbHRlcnMubGVuZ3RoIC0gMTtcbiAgICBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlckluZGV4XSA9IHtcbiAgICAgIC4uLm5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySW5kZXhdLFxuICAgICAgLi4uKGlkID8ge2lkfSA6IG51bGwpXG4gICAgfTtcbiAgfVxuXG4gIC8vIE5vIG5lZWQgdG8gdXBkYXRlIHRoaXMgaWYgaXQncyBhIG5ld2x5IGNyZWF0ZWQgZmlsdGVyXG4gIC8vIEZpcnN0IHdlIG1ha2Ugc3VyZSBhbGwgdGhlIGRhdGFJZHMgdGhhdCBmaWVsZHMgcmVmZXIgdG8gYXJlIHVwZGF0ZWRcbiAgaWYgKG9yaWdpbmFsSW5kZXggPj0gMCAmJiBkYXRhSWQpIHtcbiAgICAvLyBJZiB0aGUgZGF0YUlkIGlzIGFuIGFycmF5LCB3ZSBuZWVkIHRvIHVwZGF0ZSBlYWNoIG9uZSBpbmRpdmlkdWFsbHkgYXMgdGhleSBuZWVkIGEgY29ycmVjdCB2YWx1ZUluZGV4IHBhc3NlZFxuICAgIG5ld1N0YXRlID0gKEFycmF5LmlzQXJyYXkoZGF0YUlkKSA/IGRhdGFJZCA6IFtkYXRhSWRdKS5yZWR1Y2UoKGFjY3UsIGQsIGluZGV4KSA9PiB7XG4gICAgICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihhY2N1LCB7XG4gICAgICAgIGlkeDogZmlsdGVySW5kZXgsXG4gICAgICAgIHByb3A6ICdkYXRhSWQnLFxuICAgICAgICB2YWx1ZTogZCxcbiAgICAgICAgdmFsdWVJbmRleDogaW5kZXhcbiAgICAgIH0pO1xuICAgIH0sIG5ld1N0YXRlKTtcbiAgfVxuICAvLyBUaGVuIHdlIHVwZGF0ZSB0aGUgZmllbGRzXG4gIGlmIChmaWVsZCkge1xuICAgIC8vIElmIHRoZSBmaWVsZCBpcyBhbiBhcnJheSwgd2UgbmVlZCB0byB1cGRhdGUgZWFjaCBmaWVsZCBpbmRpdmlkdWFsbHkgYXMgdGhleSBuZWVkIGEgY29ycmVjdCB2YWx1ZUluZGV4IHBhc3NlZFxuICAgIG5ld1N0YXRlID0gKEFycmF5LmlzQXJyYXkoZmllbGQpID8gZmllbGQgOiBbZmllbGRdKS5yZWR1Y2UoKGFjY3UsIGYsIGluZGV4KSA9PiB7XG4gICAgICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihhY2N1LCB7XG4gICAgICAgIGlkeDogZmlsdGVySW5kZXgsXG4gICAgICAgIHByb3A6ICduYW1lJyxcbiAgICAgICAgdmFsdWU6IGYsXG4gICAgICAgIHZhbHVlSW5kZXg6IGluZGV4XG4gICAgICB9KTtcbiAgICB9LCBuZXdTdGF0ZSk7XG4gIH1cbiAgLy8gVGhlbiB3ZSB1cGRhdGUgdGhlIHZhbHVlIHNlcGFyYXRlbHlcbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtpZHg6IGZpbHRlckluZGV4LCBwcm9wOiAndmFsdWUnLCB2YWx1ZX0pO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufTtcblxuLyoqXG4gKiBTZXQgbGF5ZXIgY29sb3IgcGFsZXR0ZSB1aSBzdGF0ZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IGxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge29sZExheWVyLCBwcm9wLCBuZXdDb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJDb2xvclVJQ2hhbmdlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBvbGRWaXhDb25maWcgPSBvbGRMYXllci5jb25maWcudmlzQ29uZmlnW3Byb3BdO1xuICBjb25zdCBuZXdMYXllciA9IG9sZExheWVyLnVwZGF0ZUxheWVyQ29sb3JVSShwcm9wLCBuZXdDb25maWcpO1xuICBjb25zdCBuZXdWaXNDb25maWcgPSBuZXdMYXllci5jb25maWcudmlzQ29uZmlnW3Byb3BdO1xuICBpZiAob2xkVml4Q29uZmlnICE9PSBuZXdWaXNDb25maWcpIHtcbiAgICByZXR1cm4gbGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyKHN0YXRlLCB7XG4gICAgICBvbGRMYXllcixcbiAgICAgIG5ld1Zpc0NvbmZpZzoge1xuICAgICAgICBbcHJvcF06IG5ld1Zpc0NvbmZpZ1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBzdGF0ZS5sYXllcnMubWFwKGwgPT4gKGwuaWQgPT09IG9sZExheWVyLmlkID8gbmV3TGF5ZXIgOiBsKSlcbiAgfTtcbn07XG5cbi8qKlxuICogU3RhcnQgYW5kIGVuZCBmaWx0ZXIgYW5pbWF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlRmlsdGVyQW5pbWF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVGaWx0ZXJBbmltYXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+IChpID09PSBhY3Rpb24uaWR4ID8gey4uLmYsIGlzQW5pbWF0aW5nOiAhZi5pc0FuaW1hdGluZ30gOiBmKSlcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNGaWx0ZXJBbmltYXRpb25Db25maWcoY29uZmlnOiBBbmltYXRpb25Db25maWcgfCBGaWx0ZXJBbmltYXRpb25Db25maWcpOiBib29sZWFuIHtcbiAgcmV0dXJuICdkYXRhSWQnIGluIGNvbmZpZyAmJiAnYW5pbWF0aW9uV2luZG93JyBpbiBjb25maWc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRBbmltYXRpb25Db25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2NvbmZpZ30gPSBhY3Rpb247XG4gIGlmIChpc0ZpbHRlckFuaW1hdGlvbkNvbmZpZyhjb25maWcpKSB7XG4gICAgLy8gRmluZCBmaWx0ZXIgdXNlZCBmb3IgYW5pbWF0aW9uXG4gICAgLy8gQXNzdW1pbmcgdGhlcmUncyBvbmx5IG9uZSBmaWx0ZXIgdXNlZCBmb3IgYW5pbWF0aW9uLCBzZWUgc2V0RmlsdGVyVmlld1VwZGF0ZXJcbiAgICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiAhaXNTaWRlRmlsdGVyKGYpKTtcbiAgICBpZiAoIWZpbHRlcikge1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgICBjb25zdCBuZXdGaWx0ZXIgPSB7Li4uZmlsdGVyLCAuLi5jb25maWd9O1xuICAgIHJldHVybiBhcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXIoc3RhdGUsIGFwcGx5RmlsdGVyQ29uZmlnKGZpbHRlci5pZCwgbmV3RmlsdGVyKSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgLi4uY29uZmlnXG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVMYXllckFuaW1hdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVMYXllckFuaW1hdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBhbmltYXRpb25Db25maWc6IHtcbiAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgaXNBbmltYXRpbmc6ICFzdGF0ZS5hbmltYXRpb25Db25maWcuaXNBbmltYXRpbmdcbiAgfVxufSk7XG5cbi8qKlxuICogSGlkZSBhbmQgc2hvdyBsYXllciBhbmltYXRpb24gY29udHJvbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXIgPSAoc3RhdGU6IFZpc1N0YXRlKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICBoaWRlQ29udHJvbDogIXN0YXRlLmFuaW1hdGlvbkNvbmZpZy5oaWRlQ29udHJvbFxuICB9XG59KTtcblxuLyoqXG4gKiBDaGFuZ2UgZmlsdGVyIGFuaW1hdGlvbiBzcGVlZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUZpbHRlckFuaW1hdGlvblNwZWVkVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT4gKGkgPT09IGFjdGlvbi5pZHggPyB7Li4uZiwgc3BlZWQ6IGFjdGlvbi5zcGVlZH0gOiBmKSlcbn0pO1xuXG4vKipcbiAqIFVwZGF0ZSBhbmltYXRpb24gc3BlZWQgd2l0aCB0aGUgdmVydGljYWwgc3BlZWQgc2xpZGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICpcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtzcGVlZH06IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgc3BlZWRcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIFNob3cgbGFyZ2VyIHRpbWUgZmlsdGVyIGF0IGJvdHRvbSBmb3IgdGltZSBwbGF5YmFjayAoYXBwbHkgdG8gdGltZSBmaWx0ZXIgb25seSlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRGaWx0ZXJWaWV3VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJWaWV3VXBkYXRlckFjdGlvblxuKSA9PiB7XG4gIGNvbnN0IHt2aWV3LCBpZHh9ID0gYWN0aW9uO1xuICBjb25zdCBzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXcgPSB2aWV3ID09PSBGSUxURVJfVklFV19UWVBFUy5lbmxhcmdlZDtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT5cbiAgICAgIGkgPT09IGlkeFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLmYsXG4gICAgICAgICAgICB2aWV3XG4gICAgICAgICAgfVxuICAgICAgICA6IHNob3VsZFJlc2V0T3RoZXJGaWx0ZXJzVmlld1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLmYsXG4gICAgICAgICAgICB2aWV3OiBGSUxURVJfVklFV19UWVBFUy5zaWRlXG4gICAgICAgICAgfVxuICAgICAgICA6IGZcbiAgICApXG4gIH07XG59O1xuXG4vKipcbiAqIFRvZ2dsZXMgZmlsdGVyIGZlYXR1cmUgdmlzaWJpbGl0eVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUZpbHRlckZlYXR1cmVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUZpbHRlckZlYXR1cmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbYWN0aW9uLmlkeF07XG4gIGNvbnN0IGlzVmlzaWJsZSA9IGdldChmaWx0ZXIsIFsndmFsdWUnLCAncHJvcGVydGllcycsICdpc1Zpc2libGUnXSk7XG5cbiAgbGV0IG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihzdGF0ZSwge1xuICAgIGlkeDogYWN0aW9uLmlkeCxcbiAgICBwcm9wOiAnZW5hYmxlZCcsXG4gICAgdmFsdWU6ICFpc1Zpc2libGVcbiAgfSk7XG5cbiAgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWR4OiBhY3Rpb24uaWR4LFxuICAgIHByb3A6ICd2YWx1ZScsXG4gICAgdmFsdWU6IGZlYXR1cmVUb0ZpbHRlclZhbHVlKGZpbHRlci52YWx1ZSwgZmlsdGVyLmlkLCB7XG4gICAgICBpc1Zpc2libGU6ICFpc1Zpc2libGVcbiAgICB9KVxuICB9KTtcblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7aWR4fSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFJZCwgaWR9ID0gc3RhdGUuZmlsdGVyc1tpZHhdO1xuXG4gIGNvbnN0IG5ld0ZpbHRlcnMgPSBbXG4gICAgLi4uc3RhdGUuZmlsdGVycy5zbGljZSgwLCBpZHgpLFxuICAgIC4uLnN0YXRlLmZpbHRlcnMuc2xpY2UoaWR4ICsgMSwgc3RhdGUuZmlsdGVycy5sZW5ndGgpXG4gIF07XG5cbiAgY29uc3QgZmlsdGVyZWREYXRhc2V0cyA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoZGF0YUlkLCBzdGF0ZS5kYXRhc2V0cywgbmV3RmlsdGVycywgc3RhdGUubGF5ZXJzKTtcbiAgY29uc3QgbmV3RWRpdG9yID1cbiAgICBnZXRGaWx0ZXJJZEluRmVhdHVyZShzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlKSA9PT0gaWRcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgICAgICAgfVxuICAgICAgOiBzdGF0ZS5lZGl0b3I7XG5cbiAgbGV0IG5ld1N0YXRlID0gc2V0KFsnZmlsdGVycyddLCBuZXdGaWx0ZXJzLCBzdGF0ZSk7XG4gIG5ld1N0YXRlID0gc2V0KFsnZGF0YXNldHMnXSwgZmlsdGVyZWREYXRhc2V0cywgbmV3U3RhdGUpO1xuICBuZXdTdGF0ZSA9IHNldChbJ2VkaXRvciddLCBuZXdFZGl0b3IsIG5ld1N0YXRlKTtcblxuICByZXR1cm4gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5ld1N0YXRlLCBkYXRhSWQsIHVuZGVmaW5lZCk7XG59O1xuXG4vKipcbiAqIEFkZCBhIG5ldyBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZExheWVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgbGV0IG5ld0xheWVyO1xuICBsZXQgbmV3TGF5ZXJEYXRhO1xuICBpZiAoYWN0aW9uLmNvbmZpZykge1xuICAgIG5ld0xheWVyID0gY3JlYXRlTGF5ZXJGcm9tQ29uZmlnKHN0YXRlLCBhY3Rpb24uY29uZmlnKTtcbiAgICBpZiAoIW5ld0xheWVyKSB7XG4gICAgICBDb25zb2xlLndhcm4oXG4gICAgICAgICdGYWlsZWQgdG8gY3JlYXRlIGxheWVyIGZyb20gY29uZmlnLCBpdCB1c3VhbGx5IG1lYW5zIHRoZSBjb25maWcgaXMgbm90IGJlIGluIGNvcnJlY3QgZm9ybWF0JyxcbiAgICAgICAgYWN0aW9uLmNvbmZpZ1xuICAgICAgKTtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlKTtcbiAgICBuZXdMYXllciA9IHJlc3VsdC5sYXllcjtcbiAgICBuZXdMYXllckRhdGEgPSByZXN1bHQubGF5ZXJEYXRhO1xuICB9IGVsc2Uge1xuICAgIC8vIGNyZWF0ZSBhbiBlbXB0eSBsYXllciB3aXRoIGEgc3BlY2lmaWMgZGF0YXNldCBvciBhIGRlZmF1bHQgb25lXG4gICAgY29uc3QgZGVmYXVsdERhdGFzZXQgPSBhY3Rpb24uZGF0YXNldElkID8/IE9iamVjdC5rZXlzKHN0YXRlLmRhdGFzZXRzKVswXTtcbiAgICBuZXdMYXllciA9IG5ldyBMYXllcih7XG4gICAgICBpc1Zpc2libGU6IHRydWUsXG4gICAgICBpc0NvbmZpZ0FjdGl2ZTogdHJ1ZSxcbiAgICAgIGRhdGFJZDogZGVmYXVsdERhdGFzZXRcbiAgICB9KTtcbiAgICBuZXdMYXllckRhdGEgPSB7fTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IFsuLi5zdGF0ZS5sYXllcnMsIG5ld0xheWVyXSxcbiAgICBsYXllckRhdGE6IFsuLi5zdGF0ZS5sYXllckRhdGEsIG5ld0xheWVyRGF0YV0sXG4gICAgLy8gYWRkIG5ldyBsYXllciBhdCB0aGUgdG9wXG4gICAgbGF5ZXJPcmRlcjogW25ld0xheWVyLmlkLCAuLi5zdGF0ZS5sYXllck9yZGVyXSxcbiAgICBzcGxpdE1hcHM6IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAoc3RhdGUuc3BsaXRNYXBzLCBuZXdMYXllcilcbiAgfTtcblxuICBpZiAobmV3TGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufTtcblxuLyoqXG4gKiByZW1vdmUgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVMYXllclVwZGF0ZXI8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVMYXllclVwZGF0ZXJBY3Rpb25cbik6IFQge1xuICBjb25zdCBpZHggPSBOdW1iZXIuaXNGaW5pdGUoaWQpXG4gICAgPyAvLyBzdXBwb3J0IG9sZGVyIEFQSSwgcmVtb3ZlIGxheWVyIGJ5IGlkeFxuICAgICAgTnVtYmVyKGlkKVxuICAgIDogc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IHN0YXRlLmxheWVycy5sZW5ndGgpIHtcbiAgICAvLyBpbnZhbGlkIGluZGV4XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHJlbW92ZSBsYXllciB3aXRoIGludmFsaWQgaWR8aWR4ICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2xheWVycywgbGF5ZXJEYXRhLCBsYXllck9yZGVyLCBjbGlja2VkLCBob3ZlckluZm99ID0gc3RhdGU7XG4gIGNvbnN0IGxheWVyVG9SZW1vdmUgPSBsYXllcnNbaWR4XTtcbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBmaWx0ZXJPdXRCeUlkKGxheWVyVG9SZW1vdmUuaWQpKGxheWVycyksXG4gICAgbGF5ZXJEYXRhOiByZW1vdmVFbGVtZW50QXRJbmRleChpZHgpKGxheWVyRGF0YSksXG4gICAgbGF5ZXJPcmRlcjogbGF5ZXJPcmRlci5maWx0ZXIobGF5ZXJJZCA9PiBsYXllcklkICE9PSBsYXllclRvUmVtb3ZlLmlkKSxcbiAgICBjbGlja2VkOiBsYXllclRvUmVtb3ZlLmlzTGF5ZXJIb3ZlcmVkKGNsaWNrZWQpID8gdW5kZWZpbmVkIDogY2xpY2tlZCxcbiAgICBob3ZlckluZm86IGxheWVyVG9SZW1vdmUuaXNMYXllckhvdmVyZWQoaG92ZXJJbmZvKSA/IHVuZGVmaW5lZCA6IGhvdmVySW5mbyxcbiAgICBzcGxpdE1hcHM6IHJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyhzdGF0ZS5zcGxpdE1hcHMsIGxheWVyVG9SZW1vdmUpXG4gICAgLy8gVE9ETzogdXBkYXRlIGZpbHRlcnMsIGNyZWF0ZSBoZWxwZXIgdG8gcmVtb3ZlIGxheWVyIGZvcm0gZmlsdGVyIChyZW1vdmUgbGF5ZXJpZCBhbmQgZGF0YWlkKSBpZiBtYXBwZWRcbiAgfTtcblxuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbn1cblxuLyoqXG4gKiBSZW9yZGVyIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVvcmRlckxheWVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7b3JkZXJ9OiBWaXNTdGF0ZUFjdGlvbnMuUmVvcmRlckxheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGxheWVyT3JkZXI6IG9yZGVyXG59KTtcblxuLyoqXG4gKiBkdXBsaWNhdGUgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBkdXBsaWNhdGVMYXllclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLkR1cGxpY2F0ZUxheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSBOdW1iZXIuaXNGaW5pdGUoaWQpXG4gICAgPyAvLyBzdXBwb3J0IG9sZGVyIEFQSSwgcmVtb3ZlIGxheWVyIGJ5IGlkeFxuICAgICAgTnVtYmVyKGlkKVxuICAgIDogc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgIXN0YXRlLmxheWVyc1tpZHhdKSB7XG4gICAgQ29uc29sZS53YXJuKGBsYXllciAke2lkeH0gbm90IGZvdW5kIGluIGxheWVyT3JkZXJgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7bGF5ZXJzfSA9IHN0YXRlO1xuICBjb25zdCBvcmlnaW5hbCA9IGxheWVyc1tpZHhdO1xuXG4gIGNvbnN0IG9yaWdpbmFsTGF5ZXJPcmRlcklkeCA9IHN0YXRlLmxheWVyT3JkZXIuZmluZEluZGV4KGxpZCA9PiBsaWQgPT09IG9yaWdpbmFsLmlkKTtcbiAgbGV0IG5ld0xhYmVsID0gYENvcHkgb2YgJHtvcmlnaW5hbC5jb25maWcubGFiZWx9YDtcbiAgbGV0IHBvc3RmaXggPSAwO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gIHdoaWxlIChsYXllcnMuZmluZChsID0+IGwuY29uZmlnLmxhYmVsID09PSBuZXdMYWJlbCkpIHtcbiAgICBuZXdMYWJlbCA9IGBDb3B5IG9mICR7b3JpZ2luYWwuY29uZmlnLmxhYmVsfSAkeysrcG9zdGZpeH1gO1xuICB9XG5cbiAgLy8gY29sbGVjdCBsYXllciBjb25maWcgZnJvbSBvcmlnaW5hbFxuICBjb25zdCBsb2FkZWRMYXllciA9IHNlcmlhbGl6ZUxheWVyKG9yaWdpbmFsLCBzdGF0ZS5zY2hlbWEpO1xuXG4gIC8vIGFzc2lnbiBuZXcgaWQgYW5kIGxhYmVsIHRvIGNvcGllZCBsYXllclxuICBpZiAoIWxvYWRlZExheWVyPy5jb25maWcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbG9hZGVkTGF5ZXIuY29uZmlnLmxhYmVsID0gbmV3TGFiZWw7XG4gIGxvYWRlZExheWVyLmlkID0gZ2VuZXJhdGVIYXNoSWQoTEFZRVJfSURfTEVOR1RIKTtcblxuICAvLyBhZGQgbGF5ZXIgdG8gc3RhdGVcbiAgbGV0IG5leHRTdGF0ZSA9IGFkZExheWVyVXBkYXRlcihzdGF0ZSwge2NvbmZpZzogbG9hZGVkTGF5ZXJ9KTtcbiAgLy8gcmV0cmlldmUgbmV3bHkgY3JlYXRlZCBsYXllclxuICBjb25zdCBuZXdMYXllciA9IG5leHRTdGF0ZS5sYXllcnNbbmV4dFN0YXRlLmxheWVycy5sZW5ndGggLSAxXTtcbiAgLy8gdXBkYXRlIGxheWVyIG9yZGVyIHdpdGggbmV3THlhZXIuaWRcbiAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IGFycmF5SW5zZXJ0KFxuICAgIG5leHRTdGF0ZS5sYXllck9yZGVyLnNsaWNlKDEsIG5leHRTdGF0ZS5sYXllck9yZGVyLmxlbmd0aCksXG4gICAgb3JpZ2luYWxMYXllck9yZGVySWR4LFxuICAgIG5ld0xheWVyLmlkXG4gICk7XG5cbiAgbmV4dFN0YXRlID0gcmVvcmRlckxheWVyVXBkYXRlcihuZXh0U3RhdGUsIHtvcmRlcjogbmV3TGF5ZXJPcmRlcn0pO1xuXG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4obmV4dFN0YXRlKTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoXG4gICAgYWN0aW9uLmNvbmZpZz8udHlwZSA9PT0gTElHSFRfQU5EX1NIQURPV19FRkZFQ1QudHlwZSAmJlxuICAgIHN0YXRlLmVmZmVjdHMuc29tZShlZmZlY3QgPT4gZWZmZWN0LnR5cGUgPT09IExJR0hUX0FORF9TSEFET1dfRUZGRUNULnR5cGUpXG4gICkge1xuICAgIENvbnNvbGUud2FybihgQ2FuJ3QgYWRkIG1vcmUgdGhhbiBvbmUgJHtMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC5uYW1lfSBlZmZlY3RgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBpZiAoXG4gICAgYWN0aW9uLmNvbmZpZz8udHlwZSA9PT0gRElTVEFOQ0VfRk9HX1RZUEUgJiZcbiAgICBzdGF0ZS5lZmZlY3RzLnNvbWUoXG4gICAgICBlZmZlY3QgPT4gZWZmZWN0LnR5cGUgPT09IERJU1RBTkNFX0ZPR19UWVBFIHx8IGVmZmVjdC50eXBlID09PSBTVVJGQUNFX0ZPR19UWVBFXG4gICAgKVxuICApIHtcbiAgICBDb25zb2xlLndhcm4oXCJDYW4ndCBhZGQgbW9yZSB0aGFuIG9uZSBmb2cgZWZmZWN0XCIpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGlmIChcbiAgICBhY3Rpb24uY29uZmlnPy50eXBlID09PSBTVVJGQUNFX0ZPR19UWVBFICYmXG4gICAgc3RhdGUuZWZmZWN0cy5zb21lKFxuICAgICAgZWZmZWN0ID0+IGVmZmVjdC50eXBlID09PSBTVVJGQUNFX0ZPR19UWVBFIHx8IGVmZmVjdC50eXBlID09PSBESVNUQU5DRV9GT0dfVFlQRVxuICAgIClcbiAgKSB7XG4gICAgQ29uc29sZS53YXJuKFwiQ2FuJ3QgYWRkIG1vcmUgdGhhbiBvbmUgZm9nIGVmZmVjdFwiKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdFZmZlY3QgPSBjcmVhdGVFZmZlY3QoYWN0aW9uLmNvbmZpZyk7XG5cbiAgLy8gY29sbGFwc2UgY29uZmlndXJhdG9ycyBmb3Igb3RoZXIgZWZmZWN0c1xuICBzdGF0ZS5lZmZlY3RzLmZvckVhY2goZWZmZWN0ID0+IGVmZmVjdC5zZXRQcm9wcyh7aXNDb25maWdBY3RpdmU6IGZhbHNlfSkpO1xuXG4gIGNvbnN0IGVmZmVjdHMgPSBbLi4uc3RhdGUuZWZmZWN0cywgbmV3RWZmZWN0XTtcbiAgY29uc3QgZWZmZWN0T3JkZXIgPSBmaXhFZmZlY3RPcmRlcihlZmZlY3RzLCBbbmV3RWZmZWN0LmlkLCAuLi5zdGF0ZS5lZmZlY3RPcmRlcl0pO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWZmZWN0cyxcbiAgICBlZmZlY3RPcmRlclxuICB9O1xufTtcblxuLyoqXG4gKiByZW1vdmUgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSBzdGF0ZS5lZmZlY3RzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGlkKTtcbiAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IHN0YXRlLmVmZmVjdHMubGVuZ3RoKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHJlbW92ZSBlZmZlY3Qgd2l0aCBpbnZhbGlkIGlkICR7aWR9YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2VmZmVjdHMsIGVmZmVjdE9yZGVyfSA9IHN0YXRlO1xuICBjb25zdCBlZmZlY3RUb1JlbW92ZSA9IGVmZmVjdHNbaWR4XTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGZpeGVkIGluIHRzXG4gICAgZWZmZWN0czogZmlsdGVyT3V0QnlJZChlZmZlY3RUb1JlbW92ZS5pZCkoZWZmZWN0cyksXG4gICAgZWZmZWN0T3JkZXI6IGVmZmVjdE9yZGVyLmZpbHRlcihlZmZlY3RJZCA9PiBlZmZlY3RJZCAhPT0gZWZmZWN0VG9SZW1vdmUuaWQpXG4gIH07XG59O1xuXG4vKipcbiAqIFJlb3JkZXIgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVvcmRlckVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge29yZGVyfTogVmlzU3RhdGVBY3Rpb25zLlJlb3JkZXJFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZWZmZWN0T3JkZXI6IGZpeEVmZmVjdE9yZGVyKHN0YXRlLmVmZmVjdHMsIFsuLi5vcmRlcl0pXG59KTtcblxuLyoqXG4gKiBVcGRhdGUgZWZmZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlRWZmZWN0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWQsIHByb3BzfTogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gc3RhdGUuZWZmZWN0cy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8IGlkeCA+PSBzdGF0ZS5lZmZlY3RzLmxlbmd0aCkge1xuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCB1cGRhdGUgZWZmZWN0IHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBlZmZlY3RPcmRlciA9IHN0YXRlLmVmZmVjdE9yZGVyO1xuICBpZiAocHJvcHMuaWQgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5pZCAhPT0gaWQpIHtcbiAgICBjb25zdCBpZHgyID0gc3RhdGUuZWZmZWN0cy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBwcm9wcy5pZCk7XG4gICAgaWYgKGlkeDIgPj0gMCkge1xuICAgICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHVwZGF0ZSBlZmZlY3Qgd2l0aCBleGlzdGluZyBlZmZlY3QgaWQgJHtpZH1gKTtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICBlZmZlY3RPcmRlciA9IGVmZmVjdE9yZGVyLm1hcChlZmZlY3RPcmRlcklkID0+XG4gICAgICBlZmZlY3RPcmRlcklkID09PSBpZCA/IChwcm9wcy5pZCBhcyBzdHJpbmcpIDogZWZmZWN0T3JkZXJJZFxuICAgICk7XG4gIH1cblxuICBjb25zdCBuZXdFZmZlY3RzID0gWy4uLnN0YXRlLmVmZmVjdHNdO1xuICBuZXdFZmZlY3RzW2lkeF0uc2V0UHJvcHMocHJvcHMpO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWZmZWN0czogbmV3RWZmZWN0cyxcbiAgICBlZmZlY3RPcmRlclxuICB9O1xufTtcblxuLy8gQU5OT1RBVElPTiBVUERBVEVSU1xuXG5mdW5jdGlvbiBtYWtlTmV3QW5ub3RhdGlvbihjb25maWc/OiBBbm5vdGF0aW9uUHJvcHNQYXJ0aWFsKTogQW5ub3RhdGlvbiB7XG4gIGNvbnN0IGtpbmQgPSBjb25maWc/LmtpbmQgPz8gSU5JVElBTF9BTk5PVEFUSU9OX0tJTkQ7XG4gIGNvbnN0IGJhc2UgPSB7XG4gICAgaWQ6IGNvbmZpZz8uaWQgPz8gZ2VuZXJhdGVIYXNoSWQoNiksXG4gICAga2luZCxcbiAgICBpc1Zpc2libGU6IGNvbmZpZz8uaXNWaXNpYmxlID8/IHRydWUsXG4gICAgYXV0b1NpemU6IGNvbmZpZz8uYXV0b1NpemUgPz8gdHJ1ZSxcbiAgICBhdXRvU2l6ZVk6IGNvbmZpZz8uYXV0b1NpemVZID8/IHRydWUsXG4gICAgYW5jaG9yUG9pbnQ6IGNvbmZpZz8uYW5jaG9yUG9pbnQgPz8gKFswLCAwXSBhcyBbbnVtYmVyLCBudW1iZXJdKSxcbiAgICBsYWJlbDogY29uZmlnPy5sYWJlbCA/PyAnTmV3IEFubm90YXRpb24nLFxuICAgIGxpbmVDb2xvcjogY29uZmlnPy5saW5lQ29sb3IgPz8gSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IsXG4gICAgbGluZVdpZHRoOiBjb25maWc/LmxpbmVXaWR0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCxcbiAgICB0ZXh0V2lkdGg6IGNvbmZpZz8udGV4dFdpZHRoID8/IElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1dJRFRILFxuICAgIHRleHRIZWlnaHQ6IGNvbmZpZz8udGV4dEhlaWdodCA/PyBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9IRUlHSFQsXG4gICAgdGV4dFZlcnRpY2FsQWxpZ246IGNvbmZpZz8udGV4dFZlcnRpY2FsQWxpZ24gPz8gKCdib3R0b20nIGFzIGNvbnN0KSxcbiAgICBtYXBJbmRleDogY29uZmlnPy5tYXBJbmRleFxuICB9O1xuXG4gIHN3aXRjaCAoa2luZCkge1xuICAgIGNhc2UgQW5ub3RhdGlvbktpbmQuUE9JTlQ6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlLFxuICAgICAgICBraW5kOiBBbm5vdGF0aW9uS2luZC5QT0lOVCxcbiAgICAgICAgYXJtTGVuZ3RoOiAoY29uZmlnIGFzIGFueSk/LmFybUxlbmd0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCxcbiAgICAgICAgYW5nbGU6IChjb25maWcgYXMgYW55KT8uYW5nbGUgPz8gSU5JVElBTF9BTk5PVEFUSU9OX0FOR0xFXG4gICAgICB9O1xuICAgIGNhc2UgQW5ub3RhdGlvbktpbmQuQVJST1c6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlLFxuICAgICAgICBraW5kOiBBbm5vdGF0aW9uS2luZC5BUlJPVyxcbiAgICAgICAgYXJtTGVuZ3RoOiAoY29uZmlnIGFzIGFueSk/LmFybUxlbmd0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCxcbiAgICAgICAgYW5nbGU6IChjb25maWcgYXMgYW55KT8uYW5nbGUgPz8gSU5JVElBTF9BTk5PVEFUSU9OX0FOR0xFXG4gICAgICB9O1xuICAgIGNhc2UgQW5ub3RhdGlvbktpbmQuQ0lSQ0xFOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAga2luZDogQW5ub3RhdGlvbktpbmQuQ0lSQ0xFLFxuICAgICAgICBhcm1MZW5ndGg6IChjb25maWcgYXMgYW55KT8uYXJtTGVuZ3RoID8/IElOSVRJQUxfQU5OT1RBVElPTl9BUk1fTEVOR1RILFxuICAgICAgICBhbmdsZTogKGNvbmZpZyBhcyBhbnkpPy5hbmdsZSA/PyBJTklUSUFMX0FOTk9UQVRJT05fQU5HTEUsXG4gICAgICAgIHJhZGl1c0luTWV0ZXJzOiAoY29uZmlnIGFzIGFueSk/LnJhZGl1c0luTWV0ZXJzID8/IDEwMDBcbiAgICAgIH07XG4gICAgY2FzZSBBbm5vdGF0aW9uS2luZC5URVhUOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlLFxuICAgICAgICBraW5kOiBBbm5vdGF0aW9uS2luZC5URVhUXG4gICAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQWRkIGEgbmV3IGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRBbm5vdGF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBuZXdBbm5vdGF0aW9uID0gbWFrZU5ld0Fubm90YXRpb24oYWN0aW9uLmNvbmZpZyk7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5ub3RhdGlvbnM6IFtuZXdBbm5vdGF0aW9uLCAuLi5zdGF0ZS5hbm5vdGF0aW9uc10sXG4gICAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IG5ld0Fubm90YXRpb24uaWQsXG4gICAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6IHRydWVcbiAgfTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFuIGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlQW5ub3RhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbm5vdGF0aW9uczogc3RhdGUuYW5ub3RhdGlvbnMuZmlsdGVyKGEgPT4gYS5pZCAhPT0gaWQpLFxuICAgIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBzdGF0ZS5zZWxlY3RlZEFubm90YXRpb25JZCA9PT0gaWQgPyBudWxsIDogc3RhdGUuc2VsZWN0ZWRBbm5vdGF0aW9uSWQsXG4gICAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6XG4gICAgICBzdGF0ZS5zZWxlY3RlZEFubm90YXRpb25JZCA9PT0gaWQgPyBmYWxzZSA6IHN0YXRlLmlzRWRpdGluZ0Fubm90YXRpb25UZXh0XG4gIH07XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBhbiBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkLCBjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlQW5ub3RhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gc3RhdGUuYW5ub3RhdGlvbnMuZmluZEluZGV4KGEgPT4gYS5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCkge1xuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCB1cGRhdGUgYW5ub3RhdGlvbiB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgcHJldiA9IHN0YXRlLmFubm90YXRpb25zW2lkeF07XG4gIGxldCBuZXh0QW5ub3RhdGlvbjogQW5ub3RhdGlvbjtcblxuICBpZiAoY29uZmlnLmtpbmQgJiYgY29uZmlnLmtpbmQgIT09IHByZXYua2luZCkge1xuICAgIG5leHRBbm5vdGF0aW9uID0gbWFrZU5ld0Fubm90YXRpb24oey4uLnByZXYsIC4uLmNvbmZpZ30gYXMgQW5ub3RhdGlvblByb3BzUGFydGlhbCk7XG4gIH0gZWxzZSB7XG4gICAgbmV4dEFubm90YXRpb24gPSB7Li4ucHJldiwgLi4uY29uZmlnfSBhcyBBbm5vdGF0aW9uO1xuICB9XG5cbiAgY29uc3QgbmV3QW5ub3RhdGlvbnMgPSBbLi4uc3RhdGUuYW5ub3RhdGlvbnNdO1xuICBuZXdBbm5vdGF0aW9uc1tpZHhdID0gbmV4dEFubm90YXRpb247XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5ub3RhdGlvbnM6IG5ld0Fubm90YXRpb25zXG4gIH07XG59O1xuXG4vKipcbiAqIER1cGxpY2F0ZSBhbiBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgZHVwbGljYXRlQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLkR1cGxpY2F0ZUFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IG9yaWdpbmFsID0gc3RhdGUuYW5ub3RhdGlvbnMuZmluZChhID0+IGEuaWQgPT09IGlkKTtcbiAgaWYgKCFvcmlnaW5hbCkge1xuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCBkdXBsaWNhdGUgYW5ub3RhdGlvbiB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbmV3QW5ub3RhdGlvbiA9IHtcbiAgICAuLi5jbG9uZURlZXAob3JpZ2luYWwpLFxuICAgIGlkOiBnZW5lcmF0ZUhhc2hJZCg2KSxcbiAgICBsYWJlbDogYENvcHkgb2YgJHtvcmlnaW5hbC5sYWJlbH1gXG4gIH07XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5ub3RhdGlvbnM6IFtuZXdBbm5vdGF0aW9uLCAuLi5zdGF0ZS5hbm5vdGF0aW9uc10sXG4gICAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IG5ld0Fubm90YXRpb24uaWQsXG4gICAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6IGZhbHNlXG4gIH07XG59O1xuXG4vKipcbiAqIFNldCBzZWxlY3RlZCBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0U2VsZWN0ZWRBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWQsIGlzRWRpdGluZ1RleHR9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0U2VsZWN0ZWRBbm5vdGF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoXG4gICAgaWQgPT09IHN0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbklkICYmXG4gICAgKGlzRWRpdGluZ1RleHQgPz8gZmFsc2UpID09PSBzdGF0ZS5pc0VkaXRpbmdBbm5vdGF0aW9uVGV4dFxuICApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBzZWxlY3RlZEFubm90YXRpb25JZDogaWQsXG4gICAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6IGlzRWRpdGluZ1RleHQgPz8gZmFsc2VcbiAgfTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgZGF0YXNldCBhbmQgYWxsIGxheWVycywgZmlsdGVycywgdG9vbHRpcCBjb25maWdzIHRoYXQgYmFzZWQgb24gaXRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVEYXRhc2V0VXBkYXRlcjxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFQge1xuICAvLyBleHRyYWN0IGRhdGFzZXQga2V5XG4gIGNvbnN0IHtkYXRhSWQ6IGRhdGFzZXRLZXl9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YXNldHN9ID0gc3RhdGU7XG5cbiAgLy8gY2hlY2sgaWYgZGF0YXNldCBpcyBwcmVzZW50XG4gIGlmICghZGF0YXNldHNbZGF0YXNldEtleV0pIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7XG4gICAgbGF5ZXJzLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBkYXRhc2V0czoge1tkYXRhc2V0S2V5XTogZGF0YXNldCwgLi4ubmV3RGF0YXNldHN9XG4gIH0gPSBzdGF0ZTtcblxuICBjb25zdCBsYXllcnNUb1JlbW92ZSA9IGxheWVycy5maWx0ZXIobCA9PiBsLmNvbmZpZy5kYXRhSWQgPT09IGRhdGFzZXRLZXkpLm1hcChsID0+IGwuaWQpO1xuXG4gIC8vIHJlbW92ZSBsYXllcnMgYW5kIGRhdGFzZXRzXG4gIGxldCBuZXdTdGF0ZSA9IGxheWVyc1RvUmVtb3ZlLnJlZHVjZSgoYWNjdSwgaWQpID0+IHJlbW92ZUxheWVyVXBkYXRlcihhY2N1LCB7aWR9KSwge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBuZXdEYXRhc2V0c1xuICB9KTtcblxuICAvLyB1cGRhdGUgZmlsdGVyc1xuICBjb25zdCBmaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGZpbHRlciBvZiBuZXdTdGF0ZS5maWx0ZXJzKSB7XG4gICAgY29uc3QgdmFsdWVJbmRleCA9IGZpbHRlci5kYXRhSWQuaW5kZXhPZihkYXRhc2V0S2V5KTtcbiAgICBpZiAodmFsdWVJbmRleCA+PSAwICYmIGZpbHRlci5kYXRhSWQubGVuZ3RoID4gMSkge1xuICAgICAgLy8gb25seSByZW1vdmUgb25lIHN5bmNlZCBkYXRhc2V0IGZyb20gdGhlIGZpbHRlclxuICAgICAgZmlsdGVycy5wdXNoKF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cykpO1xuICAgIH0gZWxzZSBpZiAodmFsdWVJbmRleCA8IDApIHtcbiAgICAgIC8vIGxlYXZlIHRoZSBmaWx0ZXIgYXMgaXNcbiAgICAgIGZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIG5ld1N0YXRlID0gey4uLm5ld1N0YXRlLCBmaWx0ZXJzfTtcblxuICByZXR1cm4gcmVtb3ZlRGF0YXNldEZyb21JbnRlcmFjdGlvbkNvbmZpZyhuZXdTdGF0ZSwge2RhdGFJZDogZGF0YXNldEtleX0pO1xufVxuXG5mdW5jdGlvbiByZW1vdmVEYXRhc2V0RnJvbUludGVyYWN0aW9uQ29uZmlnKHN0YXRlLCB7ZGF0YUlkfSkge1xuICBsZXQge2ludGVyYWN0aW9uQ29uZmlnfSA9IHN0YXRlO1xuICBjb25zdCB7dG9vbHRpcH0gPSBpbnRlcmFjdGlvbkNvbmZpZztcbiAgaWYgKHRvb2x0aXApIHtcbiAgICBjb25zdCB7Y29uZmlnfSA9IHRvb2x0aXA7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGNvbnN0IHtbZGF0YUlkXTogZmllbGRzLCAuLi5maWVsZHNUb1Nob3d9ID0gY29uZmlnLmZpZWxkc1RvU2hvdztcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgdG9vbHRpcDogey4uLnRvb2x0aXAsIGNvbmZpZzogey4uLmNvbmZpZywgZmllbGRzVG9TaG93fX1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHsuLi5zdGF0ZSwgaW50ZXJhY3Rpb25Db25maWd9O1xufVxuLyoqXG4gKiB1cGRhdGUgbGF5ZXIgYmxlbmRpbmcgbW9kZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbGF5ZXJCbGVuZGluZzogYWN0aW9uLm1vZGVcbn0pO1xuXG4vKipcbiAqIHVwZGF0ZSBvdmVybGF5IGJsZW5kaW5nIG1vZGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVPdmVybGF5QmxlbmRpbmdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZU92ZXJsYXlCbGVuZGluZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBvdmVybGF5QmxlbmRpbmc6IGFjdGlvbi5tb2RlXG59KTtcblxuLyoqXG4gKiBEaXNwbGF5IGRhdGFzZXQgdGFibGUgaW4gYSBtb2RhbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNob3dEYXRhc2V0VGFibGVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNob3dEYXRhc2V0VGFibGVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdGluZ0RhdGFzZXQ6IGFjdGlvbi5kYXRhSWRcbiAgfTtcbn07XG5cbi8qKlxuICogQWRkIGN1c3RvbSBjb2xvciBmb3IgZGF0YXNldHMgYW5kIGxheWVyc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZVRhYmxlQ29sb3JVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZURhdGFzZXRDb2xvclVwZGF0ZXJcbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIoc3RhdGUsIHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIHByb3BzOiB7Y29sb3I6IGFjdGlvbi5uZXdDb2xvcn19KTtcbn07XG5cbi8qKlxuICogcmVzZXQgdmlzU3RhdGUgdG8gaW5pdGlhbCBTdGF0ZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlc2V0TWFwQ29uZmlnVXBkYXRlciA9IChzdGF0ZTogVmlzU3RhdGUpOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5JTklUSUFMX1ZJU19TVEFURSxcbiAgLi4uc3RhdGUuaW5pdGlhbFN0YXRlLFxuICBpbml0aWFsU3RhdGU6IHN0YXRlLmluaXRpYWxTdGF0ZVxufSk7XG5cbi8qKlxuICogUHJvcGFnYXRlIGB2aXNTdGF0ZWAgcmVkdWNlciB3aXRoIGEgbmV3IGNvbmZpZ3VyYXRpb24uIEN1cnJlbnQgY29uZmlnIHdpbGwgYmUgb3ZlcnJpZGUuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge1xuICAgIHBheWxvYWQ6IHtjb25maWcgPSB7fSwgb3B0aW9ucyA9IHt9fVxuICB9OiB7XG4gICAgdHlwZT86IHR5cGVvZiBBY3Rpb25UeXBlcy5SRUNFSVZFX01BUF9DT05GSUc7XG4gICAgcGF5bG9hZDogUmVjZWl2ZU1hcENvbmZpZ1BheWxvYWQ7XG4gIH1cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKCFjb25maWcudmlzU3RhdGUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7a2VlcEV4aXN0aW5nQ29uZmlnfSA9IG9wdGlvbnM7XG5cbiAgLy8gcmVzZXQgY29uZmlnIGlmIGtlZXBFeGlzdGluZ0NvbmZpZyBpcyBmYWxzeVxuICBsZXQgbWVyZ2VkU3RhdGUgPSAha2VlcEV4aXN0aW5nQ29uZmlnID8gcmVzZXRNYXBDb25maWdVcGRhdGVyKHN0YXRlKSA6IHN0YXRlO1xuICBmb3IgKGNvbnN0IG1lcmdlciBvZiBzdGF0ZS5tZXJnZXJzKSB7XG4gICAgaWYgKGlzVmFsaWRNZXJnZXIobWVyZ2VyKSAmJiBoYXNQcm9wc1RvTWVyZ2UoY29uZmlnLnZpc1N0YXRlLCBtZXJnZXIucHJvcCkpIHtcbiAgICAgIG1lcmdlZFN0YXRlID0gbWVyZ2VyLm1lcmdlKFxuICAgICAgICBtZXJnZWRTdGF0ZSxcbiAgICAgICAgZ2V0UHJvcFZhbHVlVG9NZXJnZXIoY29uZmlnLnZpc1N0YXRlLCBtZXJnZXIucHJvcCwgbWVyZ2VyLnRvTWVyZ2VQcm9wKSxcbiAgICAgICAgLy8gZnJvbUNvbmZpZ1xuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXJnZWRTdGF0ZTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBsYXllciBob3ZlciBldmVudCB3aXRoIGhvdmVyZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbGF5ZXJIb3ZlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuT25MYXllckhvdmVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGhvdmVySW5mbzoge1xuICAgIC8vIGRlY2suZ2wgaW5mbyBpcyBtdXRhYmxlXG4gICAgLi4uYWN0aW9uLmluZm8sXG4gICAgLi4uKE51bWJlci5pc0Zpbml0ZShhY3Rpb24ubWFwSW5kZXgpID8ge21hcEluZGV4OiBhY3Rpb24ubWFwSW5kZXh9IDoge30pXG4gIH1cbn0pO1xuXG4vKiBlc2xpbnQtZW5hYmxlIG1heC1zdGF0ZW1lbnRzICovXG5cbi8qKlxuICogVXBkYXRlIGBpbnRlcmFjdGlvbkNvbmZpZ2BcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuSW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb25maWd9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGludGVyYWN0aW9uQ29uZmlnID0ge1xuICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnLFxuICAgIC4uLntbY29uZmlnLmlkXTogY29uZmlnfVxuICB9O1xuXG4gIC8vIERvbid0IGVuYWJsZSB0b29sdGlwIGFuZCBicnVzaCBhdCB0aGUgc2FtZSB0aW1lXG4gIC8vIGJ1dCBjb29yZGluYXRlcyBjYW4gYmUgc2hvd24gYXQgYWxsIHRpbWVcbiAgY29uc3QgY29udHJhZGljdCA9IFsnYnJ1c2gnLCAndG9vbHRpcCddO1xuXG4gIGlmIChcbiAgICBjb250cmFkaWN0LmluY2x1ZGVzKGNvbmZpZy5pZCkgJiZcbiAgICBjb25maWcuZW5hYmxlZCAmJlxuICAgICFzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1tjb25maWcuaWRdLmVuYWJsZWRcbiAgKSB7XG4gICAgLy8gb25seSBlbmFibGUgb25lIGludGVyYWN0aW9uIGF0IGEgdGltZVxuICAgIGNvbnRyYWRpY3QuZm9yRWFjaChrID0+IHtcbiAgICAgIGlmIChrICE9PSBjb25maWcuaWQpIHtcbiAgICAgICAgaW50ZXJhY3Rpb25Db25maWdba10gPSB7Li4uaW50ZXJhY3Rpb25Db25maWdba10sIGVuYWJsZWQ6IGZhbHNlfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGludGVyYWN0aW9uQ29uZmlnXG4gIH07XG5cbiAgaWYgKGNvbmZpZy5pZCA9PT0gJ2dlb2NvZGVyJyAmJiAhY29uZmlnLmVuYWJsZWQpIHtcbiAgICByZXR1cm4gcmVtb3ZlRGF0YXNldFVwZGF0ZXIobmV3U3RhdGUsIHtkYXRhSWQ6ICdnZW9jb2Rlcl9kYXRhc2V0J30pO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIFRyaWdnZXIgbGF5ZXIgY2xpY2sgZXZlbnQgd2l0aCBjbGlja2VkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxheWVyQ2xpY2tVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLk9uTGF5ZXJDbGlja1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBtb3VzZVBvczogc3RhdGUuaW50ZXJhY3Rpb25Db25maWcuY29vcmRpbmF0ZS5lbmFibGVkXG4gICAgPyB7XG4gICAgICAgIC4uLnN0YXRlLm1vdXNlUG9zLFxuICAgICAgICBwaW5uZWQ6IHN0YXRlLm1vdXNlUG9zLnBpbm5lZCA/IG51bGwgOiBjbG9uZURlZXAoc3RhdGUubW91c2VQb3MpXG4gICAgICB9XG4gICAgOiBzdGF0ZS5tb3VzZVBvcyxcbiAgY2xpY2tlZDogYWN0aW9uLmluZm8gJiYgYWN0aW9uLmluZm8ucGlja2VkID8gYWN0aW9uLmluZm8gOiBudWxsXG59KTtcblxuLyoqXG4gKiBUcmlnZ2VyIG1hcCBjbGljayBldmVudCwgdW5zZWxlY3QgY2xpY2tlZCBvYmplY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBtYXBDbGlja1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Pbk1hcENsaWNrVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNsaWNrZWQ6IG51bGxcbiAgfTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBtYXAgbW92ZSBldmVudFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG1vdXNlTW92ZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2V2dH06IFZpc1N0YXRlQWN0aW9ucy5Pbk1vdXNlTW92ZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKE9iamVjdC52YWx1ZXMoc3RhdGUuaW50ZXJhY3Rpb25Db25maWcpLnNvbWUoY29uZmlnID0+IGNvbmZpZy5lbmFibGVkKSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIG1vdXNlUG9zOiB7XG4gICAgICAgIC4uLnN0YXRlLm1vdXNlUG9zLFxuICAgICAgICAuLi4oQXJyYXkuaXNBcnJheShldnQucG9pbnQpID8ge21vdXNlUG9zaXRpb246IFsuLi5ldnQucG9pbnRdfSA6IHt9KSxcbiAgICAgICAgLi4uKEFycmF5LmlzQXJyYXkoZXZ0LmxuZ0xhdCkgPyB7Y29vcmRpbmF0ZTogWy4uLmV2dC5sbmdMYXRdfSA6IHt9KVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59O1xuLyoqXG4gKiBUb2dnbGUgdmlzaWJpbGl0eSBvZiBhIGxheWVyIGZvciBhIHNwbGl0IG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZVNwbGl0TWFwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5Ub2dnbGVTcGxpdE1hcFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+XG4gIHN0YXRlLnNwbGl0TWFwcyAmJiBzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoID09PSAwXG4gICAgPyB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAvLyBtYXliZSB3ZSBzaG91bGQgdXNlIGFuIGFycmF5IHRvIHN0b3JlIHN0YXRlIGZvciBhIHNpbmdsZSBtYXAgYXMgd2VsbFxuICAgICAgICAvLyBpZiBjdXJyZW50IG1hcHMgbGVuZ3RoIGlzIGVxdWFsIHRvIDAgaXQgbWVhbnMgdGhhdCB3ZSBhcmUgYWJvdXQgdG8gc3BsaXQgdGhlIHZpZXdcbiAgICAgICAgc3BsaXRNYXBzOiBjb21wdXRlU3BsaXRNYXBMYXllcnMoc3RhdGUubGF5ZXJzLCB7ZHVwbGljYXRlOiBmYWxzZX0pXG4gICAgICB9XG4gICAgOiBjbG9zZVNwZWNpZmljTWFwQXRJbmRleChzdGF0ZSwgYWN0aW9uKTtcblxuLyoqXG4gKiBUb2dnbGUgdmlzaWJpbGl0eSBvZiBhIGxheWVyIGluIGEgc3BsaXQgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHttYXBJbmRleCwgbGF5ZXJJZH06IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVMYXllckZvck1hcFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge3NwbGl0TWFwc30gPSBzdGF0ZTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHNwbGl0TWFwczogc3BsaXRNYXBzLm1hcCgoc20sIGkpID0+XG4gICAgICBpID09PSBtYXBJbmRleFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLnNwbGl0TWFwc1tpXSxcbiAgICAgICAgICAgIGxheWVyczoge1xuICAgICAgICAgICAgICAuLi5zcGxpdE1hcHNbaV0ubGF5ZXJzLFxuICAgICAgICAgICAgICAvLyBpZiBsYXllcklkIG5vdCBpbiBsYXllcnMsIHNldCBpdCB0byB2aXNpYmxlXG4gICAgICAgICAgICAgIFtsYXllcklkXTogIXNwbGl0TWFwc1tpXS5sYXllcnNbbGF5ZXJJZF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDogc21cbiAgICApXG4gIH07XG59O1xuXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBjb25zdCB1cGRhdGVWaXNEYXRhVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVWaXNEYXRhVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyBkYXRhc2V0cyBjYW4gYmUgYSBzaW5nbGUgZGF0YSBlbnRyaWVzIG9yIGFuIGFycmF5IG9mIG11bHRpcGxlIGRhdGEgZW50cmllc1xuICBjb25zdCB7Y29uZmlnLCBvcHRpb25zfSA9IGFjdGlvbjtcblxuICAvLyBhcHBseSBjb25maWcgaWYgcGFzc2VkIGZyb20gYWN0aW9uXG4gIC8vIFRPRE86IHdlIGRvbid0IGhhbmRsZSBhc3luYyBtZXJnZXJzIGhlcmUgeWV0XG4gIGxldCB1cGRhdGVkU3RhdGUgPSBjb25maWdcbiAgICA/IHJlY2VpdmVNYXBDb25maWdVcGRhdGVyKHN0YXRlLCB7XG4gICAgICAgIHBheWxvYWQ6IHtjb25maWcsIG9wdGlvbnN9XG4gICAgICB9KVxuICAgIDogc3RhdGU7XG5cbiAgY29uc3QgZGF0YXNldHMgPSB0b0FycmF5KGFjdGlvbi5kYXRhc2V0cyk7XG4gIGlmICghZGF0YXNldHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVwZGF0ZWRTdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGNyZWF0ZURhdGFzZXRUYXNrczogVGFza1tdID0gW107XG4gIGNvbnN0IG5vdGlmaWNhdGlvblRhc2tzOiBUYXNrW10gPSBbXTtcblxuICBkYXRhc2V0cy5mb3JFYWNoKCh7aW5mbyA9IHt9LCAuLi5yZXN0fSwgZGF0YXNldEluZGV4KSA9PiB7XG4gICAgY29uc3QgdGFzayA9IGNyZWF0ZU5ld0RhdGFFbnRyeSh7aW5mbywgLi4ucmVzdH0sIHN0YXRlLmRhdGFzZXRzKTtcbiAgICBpZiAodGFzaykge1xuICAgICAgY3JlYXRlRGF0YXNldFRhc2tzLnB1c2godGFzayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vdGlmaWNhdGlvblRhc2tzLnB1c2goXG4gICAgICAgIEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04oKS5tYXAoKCkgPT5cbiAgICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGRhdGFzZXQgZHVlIHRvIGRhdGEgdmVyaWZpY2F0aW9uIGVycm9yc2AsXG4gICAgICAgICAgICAgIGlkOiBgZGF0YXNldC1mYWlsZWQtJHtkYXRhc2V0SW5kZXh9YFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBkYXRhc2V0c0FsbFNldHRsZWRUYXNrID0gY3JlYXRlRGF0YXNldFRhc2tzLmxlbmd0aFxuICAgID8gVGFzay5hbGxTZXR0bGVkKGNyZWF0ZURhdGFzZXRUYXNrcykubWFwKHJlc3VsdHMgPT5cbiAgICAgICAgY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3Moe3Jlc3VsdHMsIGFkZFRvTWFwT3B0aW9uczogb3B0aW9uc30pXG4gICAgICApXG4gICAgOiBudWxsO1xuXG4gIGlmIChkYXRhc2V0c0FsbFNldHRsZWRUYXNrKSB7XG4gICAgdXBkYXRlZFN0YXRlID0gc2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIodXBkYXRlZFN0YXRlLCBwYXlsb2FkXyh7Y2hhbmdlOiAxLCB0eXBlOiAnJ30pKTtcbiAgfVxuXG4gIHJldHVybiB3aXRoVGFzayh1cGRhdGVkU3RhdGUsIFtcbiAgICAuLi4oZGF0YXNldHNBbGxTZXR0bGVkVGFzayA/IFtkYXRhc2V0c0FsbFNldHRsZWRUYXNrXSA6IFtdKSxcbiAgICAuLi5ub3RpZmljYXRpb25UYXNrc1xuICBdKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPENyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzUGF5bG9hZD5cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge3Jlc3VsdHMsIGFkZFRvTWFwT3B0aW9uc30gPSBhY3Rpb24ucGF5bG9hZDtcbiAgY29uc3Qgbm90aWZpY2F0aW9uVGFza3M6IFRhc2tbXSA9IFtdO1xuXG4gIGNvbnN0IG5ld0RhdGFFbnRyaWVzID0gcmVzdWx0cy5yZWR1Y2UoKGFjY3UsIHJlc3VsdCwgaWR4KSA9PiB7XG4gICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdmdWxmaWxsZWQnKSB7XG4gICAgICBjb25zdCBkYXRhc2V0ID0gcmVzdWx0LnZhbHVlO1xuICAgICAgcmV0dXJuIHsuLi5hY2N1LCBbZGF0YXNldC5pZF06IGRhdGFzZXR9O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBzaG93IGVycm9yIG5vdGlmaWNhdGlvbiBvbiBVSVxuICAgICAgbm90aWZpY2F0aW9uVGFza3MucHVzaChcbiAgICAgICAgQUNUSU9OX1RBU0soKS5tYXAoKCkgPT5cbiAgICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGBEYXRhc2V0IGVycm9yOiBGYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGRhdGFzZXQ6XG4gICAgICAgICAgICAgICR7cmVzdWx0LnJlYXNvbiB8fCAocmVzdWx0IGFzIGFueSkudmFsdWV9YCxcbiAgICAgICAgICAgICAgaWQ6IGBkYXRhc2V0LWNyZWF0ZS1mYWlsZWQtJHtpZHh9YFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9XG4gIH0sIHt9IGFzIERhdGFzZXRzKTtcbiAgLy8gc2F2ZSBuZXcgZGF0YXNldCBlbnRyeSB0byBzdGF0ZVxuICBjb25zdCBtZXJnZWRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czogbWVyZ2VEYXRhc2V0c0J5T3JkZXIoc3RhdGUsIG5ld0RhdGFFbnRyaWVzKVxuICB9O1xuXG4gIC8vIG1lcmdlIHN0YXRlIHdpdGggY29uZmlnIHRvIGJlIG1lcmdlZFxuICBjb25zdCBsYXllck1lcmdlcnMgPSBzdGF0ZS5tZXJnZXJzLmZpbHRlcihtID0+IG0ud2FpdEZvckxheWVyRGF0YSk7XG4gIGNvbnN0IGRhdGFzZXRNZXJnZXJzID0gc3RhdGUubWVyZ2Vycy5maWx0ZXIobSA9PiAhbGF5ZXJNZXJnZXJzLmluY2x1ZGVzKG0pKTtcblxuICBjb25zdCBuZXdEYXRhSWRzID0gT2JqZWN0LmtleXMobmV3RGF0YUVudHJpZXMpO1xuICBjb25zdCBwb3N0TWVyZ2VyUGF5bG9hZCA9IHtcbiAgICBuZXdEYXRhSWRzLFxuICAgIG9wdGlvbnM6IGFkZFRvTWFwT3B0aW9ucyxcbiAgICBsYXllck1lcmdlcnNcbiAgfTtcblxuICBjb25zdCB1cGRhdGVkU3RhdGUgPSBhcHBseU1lcmdlcnNVcGRhdGVyKG1lcmdlZFN0YXRlLCB7XG4gICAgbWVyZ2VyczogZGF0YXNldE1lcmdlcnMsXG4gICAgcG9zdE1lcmdlclBheWxvYWRcbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHNldExvYWRpbmdJbmRpY2F0b3JVcGRhdGVyKHVwZGF0ZWRTdGF0ZSwgcGF5bG9hZF8oe2NoYW5nZTogLTF9KSksXG4gICAgbm90aWZpY2F0aW9uVGFza3NcbiAgKTtcbn07XG5cbi8qKlxuICogQWRkIG5ldyBkYXRhc2V0IHRvIGB2aXNTdGF0ZWAsIHdpdGggb3B0aW9uIHRvIGxvYWQgYSBtYXAgY29uZmlnIGFsb25nIHdpdGggdGhlIGRhdGFzZXRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseU1lcmdlcnNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjoge1xuICAgIG1lcmdlcnM6IE1lcmdlcjxhbnk+W107XG4gICAgcG9zdE1lcmdlclBheWxvYWQ6IFBvc3RNZXJnZXJQYXlsb2FkO1xuICB9XG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHttZXJnZXJzLCBwb3N0TWVyZ2VyUGF5bG9hZH0gPSBhY3Rpb247XG5cbiAgLy8gbWVyZ2Ugc3RhdGUgd2l0aCBjb25maWcgdG8gYmUgbWVyZ2VkXG4gIGNvbnN0IG1lcmdlU3RhdGVSZXN1bHQgPSBtZXJnZVN0YXRlRnJvbU1lcmdlcnMoXG4gICAgc3RhdGUsXG4gICAge1xuICAgICAgLi4uSU5JVElBTF9WSVNfU1RBVEUsXG4gICAgICAuLi5zdGF0ZS5pbml0aWFsU3RhdGVcbiAgICB9LFxuICAgIG1lcmdlcnMsXG4gICAgLy8gbmV3RGF0YUlkcyxcbiAgICBwb3N0TWVyZ2VyUGF5bG9hZFxuICApO1xuXG4gIC8vIGlmIGFsbCBtZXJnZWQsIGtpY2t1cCBwb3N0IG1lcmdlIHByb2Nlc3NcbiAgLy8gaWYgbm90IHdhaXRcbiAgcmV0dXJuIG1lcmdlU3RhdGVSZXN1bHQuYWxsTWVyZ2VkXG4gICAgPyBwb3N0TWVyZ2VVcGRhdGVyKG1lcmdlU3RhdGVSZXN1bHQubWVyZ2VkU3RhdGUsIHBvc3RNZXJnZXJQYXlsb2FkKVxuICAgIDogbWVyZ2VTdGF0ZVJlc3VsdC5tZXJnZWRTdGF0ZTtcbn1cblxuLyoqIFJlYWRzIGBvcHRpb25zLmxheWVyVmlzQ29uZmlnYCBmcm9tIGFkZC1kYXRhLXRvLW1hcCAoc2VlIGBBZGREYXRhVG9NYXBPcHRpb25zYCkuICovXG5mdW5jdGlvbiBsYXllclZpc0NvbmZpZ0Zyb21BZGREYXRhT3B0aW9ucyhcbiAgb3B0aW9uczogUG9zdE1lcmdlclBheWxvYWRbJ29wdGlvbnMnXSB8IHVuZGVmaW5lZFxuKTogUGFydGlhbDxMYXllclZpc0NvbmZpZz4gfCB1bmRlZmluZWQge1xuICBpZiAoIW9wdGlvbnMgfHwgISgnbGF5ZXJWaXNDb25maWcnIGluIG9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBwYXRjaCA9IChvcHRpb25zIGFzIHtsYXllclZpc0NvbmZpZz86IHVua25vd259KS5sYXllclZpc0NvbmZpZztcbiAgaWYgKHBhdGNoID09IG51bGwgfHwgdHlwZW9mIHBhdGNoICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHBhdGNoKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIHBhdGNoIGFzIFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+O1xufVxuXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICovXG5mdW5jdGlvbiBwb3N0TWVyZ2VVcGRhdGVyKG1lcmdlZFN0YXRlOiBWaXNTdGF0ZSwgcG9zdE1lcmdlclBheWxvYWQ6IFBvc3RNZXJnZXJQYXlsb2FkKTogVmlzU3RhdGUge1xuICBjb25zdCB7bmV3RGF0YUlkcywgb3B0aW9ucywgbGF5ZXJNZXJnZXJzfSA9IHBvc3RNZXJnZXJQYXlsb2FkO1xuICBjb25zdCBuZXdGaWx0ZXJzID0gbWVyZ2VkU3RhdGUuZmlsdGVycy5maWx0ZXIoZiA9PlxuICAgIGYuZGF0YUlkLmZpbmQoZkRhdGFJZCA9PiBuZXdEYXRhSWRzLmluY2x1ZGVzKGZEYXRhSWQpKVxuICApO1xuICBjb25zdCBkYXRhc2V0RmlsdGVyZWQ6IHN0cmluZ1tdID0gdW5pcShcbiAgICBuZXdGaWx0ZXJzLnJlZHVjZSgoYWNjdSwgZikgPT4gWy4uLmFjY3UsIC4uLmYuZGF0YUlkXSwgW10gYXMgc3RyaW5nW10pXG4gICk7XG4gIGNvbnN0IGRhdGFFbXB0eSA9IG5ld0RhdGFJZHMubGVuZ3RoIDwgMTtcblxuICBsZXQgbmV3TGF5ZXJzID0gIWRhdGFFbXB0eVxuICAgID8gbWVyZ2VkU3RhdGUubGF5ZXJzLmZpbHRlcihsID0+IGwuY29uZmlnLmRhdGFJZCAmJiBuZXdEYXRhSWRzLmluY2x1ZGVzKGwuY29uZmlnLmRhdGFJZCkpXG4gICAgOiBbXTtcblxuICBjb25zdCBuZXdEYXRhRW50cmllcyA9IG5ld0RhdGFJZHMucmVkdWNlKFxuICAgIChhY2N1LCBpZCkgPT4gKHtcbiAgICAgIC4uLmFjY3UsXG4gICAgICBbaWRdOiBtZXJnZWRTdGF0ZS5kYXRhc2V0c1tpZF1cbiAgICB9KSxcbiAgICB7fVxuICApO1xuXG4gIGlmICghbmV3TGF5ZXJzLmxlbmd0aCAmJiAob3B0aW9ucyB8fCB7fSkuYXV0b0NyZWF0ZUxheWVycyAhPT0gZmFsc2UpIHtcbiAgICAvLyBubyBsYXllciBtZXJnZWQsIGZpbmQgZGVmYXVsdHNcbiAgICBjb25zdCByZXN1bHQgPSBhZGREZWZhdWx0TGF5ZXJzKG1lcmdlZFN0YXRlLCBuZXdEYXRhRW50cmllcyk7XG4gICAgbWVyZ2VkU3RhdGUgPSByZXN1bHQuc3RhdGU7XG4gICAgbmV3TGF5ZXJzID0gcmVzdWx0Lm5ld0xheWVycztcbiAgfVxuXG4gIGlmIChtZXJnZWRTdGF0ZS5zcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgLy8gaWYgbWFwIGlzIHNwbGl0LCBhZGQgbmV3IGxheWVycyB0byBzcGxpdE1hcHNcbiAgICBuZXdMYXllcnMgPSBtZXJnZWRTdGF0ZS5sYXllcnMuZmlsdGVyKFxuICAgICAgbCA9PiBsLmNvbmZpZy5kYXRhSWQgJiYgbmV3RGF0YUlkcy5pbmNsdWRlcyhsLmNvbmZpZy5kYXRhSWQpXG4gICAgKTtcbiAgICBtZXJnZWRTdGF0ZSA9IHtcbiAgICAgIC4uLm1lcmdlZFN0YXRlLFxuICAgICAgc3BsaXRNYXBzOiBhZGROZXdMYXllcnNUb1NwbGl0TWFwKG1lcmdlZFN0YXRlLnNwbGl0TWFwcywgbmV3TGF5ZXJzKVxuICAgIH07XG4gIH1cblxuICBtZXJnZWRTdGF0ZSA9IG1lcmdlTGF5ZXJWaXNDb25maWdGb3JOZXdEYXRhc2V0cyhcbiAgICBtZXJnZWRTdGF0ZSxcbiAgICBsYXllclZpc0NvbmZpZ0Zyb21BZGREYXRhT3B0aW9ucyhvcHRpb25zKSxcbiAgICBuZXdEYXRhSWRzXG4gICk7XG5cbiAgLy8gaWYgbm8gdG9vbHRpcHMgbWVyZ2VkIGFkZCBkZWZhdWx0IHRvb2x0aXBzXG4gIG5ld0RhdGFJZHMuZm9yRWFjaChkYXRhSWQgPT4ge1xuICAgIGNvbnN0IHRvb2x0aXBGaWVsZHMgPSBtZXJnZWRTdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmNvbmZpZy5maWVsZHNUb1Nob3dbZGF0YUlkXTtcbiAgICAvLyBsb2FkaW5nIGRhdGFzZXQ6IGF1dG9DcmVhdGVUb29sdGlwcyBpcyBmYWxzZSBhbmQgd2UgZG9uJ3Qgd2FudCB0byBydW4gYWRkRGVmYXVsdFRvb2x0aXBzIHdoZW4gdG9vbHRpcEZpZWxkcyBpcyBlbXB0eVxuICAgIGlmIChcbiAgICAgIG9wdGlvbnM/LmF1dG9DcmVhdGVUb29sdGlwcyAhPT0gZmFsc2UgJiZcbiAgICAgICghQXJyYXkuaXNBcnJheSh0b29sdGlwRmllbGRzKSB8fCAhdG9vbHRpcEZpZWxkcy5sZW5ndGgpXG4gICAgKSB7XG4gICAgICAvLyBhZGRpbmcgZGF0YXNldDogYXV0b0NyZWF0ZVRvb2x0aXBzIGlzIHRydWVcbiAgICAgIG1lcmdlZFN0YXRlID0gYWRkRGVmYXVsdFRvb2x0aXBzKG1lcmdlZFN0YXRlLCBuZXdEYXRhRW50cmllc1tkYXRhSWRdKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHVwZGF0ZWREYXRhc2V0cyA9IGRhdGFFbXB0eVxuICAgID8gT2JqZWN0LmtleXMobWVyZ2VkU3RhdGUuZGF0YXNldHMpXG4gICAgOiB1bmlxKE9iamVjdC5rZXlzKG5ld0RhdGFFbnRyaWVzKS5jb25jYXQoZGF0YXNldEZpbHRlcmVkKSk7XG5cbiAgbGV0IHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShtZXJnZWRTdGF0ZSwgdXBkYXRlZERhdGFzZXRzLCB1bmRlZmluZWQpO1xuXG4gIC8vIHJlZ2lzdGVyIGxheWVyIGFuaW1hdGlvbiBkb21haW4sXG4gIC8vIG5lZWQgdG8gYmUgY2FsbGVkIGFmdGVyIGxheWVyIGRhdGEgaXMgY2FsY3VsYXRlZFxuICB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4odXBkYXRlZFN0YXRlKTtcblxuICAvLyB0cnkgdG8gcHJvY2VzcyBsYXllck1lcmdlcnMgYWZ0ZXIgZGF0YXNldCtkYXRhc2V0TWVyZ2Vyc1xuICB1cGRhdGVkU3RhdGUgPVxuICAgIGxheWVyTWVyZ2VycyAmJiBsYXllck1lcmdlcnMubGVuZ3RoID4gMFxuICAgICAgPyBhcHBseU1lcmdlcnNVcGRhdGVyKHVwZGF0ZWRTdGF0ZSwge1xuICAgICAgICAgIG1lcmdlcnM6IGxheWVyTWVyZ2VycyxcbiAgICAgICAgICBwb3N0TWVyZ2VyUGF5bG9hZDogey4uLnBvc3RNZXJnZXJQYXlsb2FkLCBsYXllck1lcmdlcnM6IFtdfVxuICAgICAgICB9KVxuICAgICAgOiB1cGRhdGVkU3RhdGU7XG5cbiAgLy8gY2VudGVyIHRoZSBtYXAgb25jZSB0aGUgZGF0YXNldCBpcyBjcmVhdGVkXG4gIGlmIChuZXdMYXllcnMubGVuZ3RoICYmIChvcHRpb25zIHx8IHt9KS5jZW50ZXJNYXApIHtcbiAgICBjb25zdCBib3VuZHMgPSBmaW5kTWFwQm91bmRzKG5ld0xheWVycyk7XG4gICAgaWYgKGJvdW5kcykge1xuICAgICAgY29uc3QgZml0Qm91bmRzVGFzayA9IEFDVElPTl9UQVNLX0ZJVF9CT1VORFMoKS5tYXAoKCkgPT4ge1xuICAgICAgICByZXR1cm4gZml0TWFwQm91bmRzKGJvdW5kcyk7XG4gICAgICB9KTtcbiAgICAgIHVwZGF0ZWRTdGF0ZSA9IHdpdGhUYXNrKHVwZGF0ZWRTdGF0ZSwgZml0Qm91bmRzVGFzayk7XG4gICAgfVxuICB9XG5cbiAgLy8gbmVlZCB0byBjZW50ZXIgbWFwIGhlcmUgaWYgd2UgaGF2ZSBuZXcgbGF5ZXJzXG4gIHJldHVybiB1cGRhdGVkU3RhdGU7XG59XG5cbi8qKlxuICogUmVuYW1lIGFuIGV4aXN0aW5nIGRhdGFzZXQgaW4gYHZpc1N0YXRlYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZURhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbmFtZURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIHJldHVybiB1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyKHN0YXRlLCB7ZGF0YUlkOiBhY3Rpb24uZGF0YUlkLCBwcm9wczoge2xhYmVsOiBhY3Rpb24ubGFiZWx9fSk7XG59XG5cbmNvbnN0IEFMTE9XRURfVVBEQVRFX0RBVEFTRVRfUFJPUFMgPSBbJ2xhYmVsJywgJ2NvbG9yJywgJ21ldGFkYXRhJ107XG5cbi8qKlxuICogVmFsaWRhdGVzIHByb3BlcnRpZXMgYmVmb3JlIHVwZGF0aW5nIHRoZSBkYXRhc2V0LlxuICogTWFrZXMgc3VyZSBlYWNoIHByb3BlcnR5IGlzIGluIHRoZSBhbGxvd2VkIGxpc3RcbiAqIE1ha2VzIHN1cmUgY29sb3IgdmFsdWUgaXMgUkdCXG4gKiBQZXJmb3JtcyBkZWVwIG1lcmdlIHdoZW4gdXBkYXRpbmcgbWV0YWRhdGFcbiAqL1xuY29uc3QgdmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMgPSAocHJvcHMsIGRhdGFzZXQpID0+IHtcbiAgY29uc3QgdmFsaWRhdGVkUHJvcHMgPSBPYmplY3QuZW50cmllcyhwcm9wcykucmVkdWNlKChhY2MsIGVudHJ5KSA9PiB7XG4gICAgY29uc3QgW2tleSwgdmFsdWVdID0gZW50cnk7XG4gICAgLy8gaXMgaXQgYWxsb3dlZCA/XG4gICAgaWYgKCFBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgLy8gaWYgd2UgYXJlIGFkZGluZyBhIGNvbG9yIGJ1dCBpdCBpcyBub3QgUkdCIHdlIGRvbid0IGFjY2VwdCB0aGUgdmFsdWVcbiAgICAvLyBpbiB0aGUgZnV0dXJlIGFzIHdlIGFkZCBtb3JlIHByb3BzIHdlIHNob3VsZCBjaGFuZ2UgdGhpcyBpZiBpbnRvIGEgc3dpdGNoXG4gICAgaWYgKGtleSA9PT0gJ2NvbG9yJyAmJiAhaXNSZ2JDb2xvcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgLy8gZG8gd2UgbmVlZCBkZWVwIG1lcmdlID9cbiAgICByZXR1cm4gey4uLmFjYywgW2tleV06IGlzUGxhaW5PYmplY3QodmFsdWUpID8gZGVlcG1lcmdlKGRhdGFzZXRba2V5XSB8fCB7fSwgdmFsdWUpIDogdmFsdWV9O1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIHZhbGlkYXRlZFByb3BzO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgRGF0YXNldCBwcm9wcyAobGFiZWwsIGNvbG9yLCBtZXRhKS4gRG8gbm90IHVzZSB0byB1cGRhdGUgZGF0YSBvciBhbnkgcmVsYXRlZCBwcm9wZXJ0aWVzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRGF0YXNldFByb3BzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtkYXRhSWQsIHByb3BzfSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFzZXRzfSA9IHN0YXRlO1xuICBjb25zdCBleGlzdGluZyA9IGRhdGFzZXRzW2RhdGFJZF07XG5cbiAgaWYgKGV4aXN0aW5nKSB7XG4gICAgY29uc3QgdmFsaWRhdGVkUHJvcHMgPSB2YWxpZGF0ZURhdGFzZXRVcGRhdGVQcm9wcyhwcm9wcywgZXhpc3RpbmcpO1xuICAgIC8vICB2YWxpZGF0ZSBwcm9wczoganVzdCBjb2xvciBmb3Igbm93XG4gICAgLy8gIHdlIG9ubHkgYWxsb3cgbGFiZWwsIGNvbG9yIGFuZCBtZXRhIHRvIGJlIHVwZGF0ZWRcbiAgICAvLyBjb25zdCBuZXdUYWJsZSA9IGNvcHlUYWJsZUFuZFVwZGF0ZShleGlzdGluZywgdmFsaWRhdGVkUHJvcHMpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGRhdGFzZXRzOiB7XG4gICAgICAgIC4uLmRhdGFzZXRzLFxuICAgICAgICBbZGF0YUlkXTogY29weVRhYmxlQW5kVXBkYXRlKGV4aXN0aW5nLCB2YWxpZGF0ZWRQcm9wcylcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIFdoZW4gYSB1c2VyIGNsaWNrcyBvbiB0aGUgc3BlY2lmaWMgbWFwIGNsb3NpbmcgaWNvblxuICogdGhlIGFwcGxpY2F0aW9uIHdpbGwgY2xvc2UgdGhlIHNlbGVjdGVkIG1hcFxuICogYW5kIHdpbGwgbWVyZ2UgdGhlIHJlbWFpbmluZyBvbmUgd2l0aCB0aGUgZ2xvYmFsIHN0YXRlXG4gKiBUT0RPOiBpIHRoaW5rIGluIHRoZSBmdXR1cmUgdGhpcyBhY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBtZXJnZSBtYXAgbGF5ZXJzIHdpdGggZ2xvYmFsIHNldHRpbmdzXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGUgYHZpc1N0YXRlYFxuICogQHBhcmFtIHtPYmplY3R9IGFjdGlvbiBhY3Rpb25cbiAqIEByZXR1cm5zIHtPYmplY3R9IG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xvc2VTcGVjaWZpY01hcEF0SW5kZXg8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogTWFwU3RhdGVBY3Rpb25zLlRvZ2dsZVNwbGl0TWFwVXBkYXRlckFjdGlvblxuKTogUyB7XG4gIC8vIHJldHJpZXZlIGxheWVycyBtZXRhIGRhdGEgZnJvbSB0aGUgcmVtYWluaW5nIG1hcCB0aGF0IHdlIG5lZWQgdG8ga2VlcFxuICBjb25zdCBpbmRleFRvUmV0cmlldmUgPSAxIC0gYWN0aW9uLnBheWxvYWQ7XG4gIGNvbnN0IG1hcExheWVycyA9IHN0YXRlLnNwbGl0TWFwc1tpbmRleFRvUmV0cmlldmVdPy5sYXllcnM7XG4gIGNvbnN0IHtsYXllcnN9ID0gc3RhdGU7XG5cbiAgLy8gdXBkYXRlIGxheWVyIHZpc2liaWxpdHlcbiAgY29uc3QgbmV3TGF5ZXJzID0gbGF5ZXJzLm1hcChsYXllciA9PlxuICAgIG1hcExheWVycyAmJiAhbWFwTGF5ZXJzW2xheWVyLmlkXSAmJiBsYXllci5jb25maWcuaXNWaXNpYmxlXG4gICAgICA/IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAvLyBpZiBsYXllci5pZCBpcyBub3QgaW4gbWFwTGF5ZXJzLCBpdCBzaG91bGQgYmUgaW5WaXNpYmxlXG4gICAgICAgICAgaXNWaXNpYmxlOiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgOiBsYXllclxuICApO1xuXG4gIC8vIGRlbGV0ZSBtYXBcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IG5ld0xheWVycyxcbiAgICBzcGxpdE1hcHM6IFtdXG4gIH07XG59XG5cbi8qKlxuICogVHJpZ2dlciBmaWxlIGxvYWRpbmcgZGlzcGF0Y2ggYGFkZERhdGFUb01hcGAgaWYgc3VjY2VlZCwgb3IgYGxvYWRGaWxlc0VycmAgaWYgZmFpbGVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbG9hZEZpbGVzVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZXNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtmaWxlcywgb25GaW5pc2ggPSBsb2FkRmlsZXNTdWNjZXNzfSA9IGFjdGlvbjtcbiAgaWYgKCFmaWxlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBmaWxlTG9hZGluZ1Byb2dyZXNzID0gQXJyYXkuZnJvbShmaWxlcykucmVkdWNlKFxuICAgIChhY2N1LCBmLCBpKSA9PiBtZXJnZV8oaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MoZiwgaSkpKGFjY3UpLFxuICAgIHt9XG4gICk7XG5cbiAgY29uc3QgZmlsZUxvYWRpbmcgPSB7XG4gICAgZmlsZUNhY2hlOiBbXSxcbiAgICBmaWxlc1RvTG9hZDogZmlsZXMsXG4gICAgb25GaW5pc2hcbiAgfTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSBtZXJnZV8oe2ZpbGVMb2FkaW5nUHJvZ3Jlc3MsIGZpbGVMb2FkaW5nfSkoc3RhdGUpO1xuXG4gIHJldHVybiBsb2FkTmV4dEZpbGVVcGRhdGVyKG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIFN1Y2Vzc2Z1bGx5IGxvYWRlZCBvbmUgZmlsZSwgbW92ZSBvbiB0byB0aGUgbmV4dCBvbmVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmlsZVN0ZXBTdWNjZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZVN0ZXBTdWNjZXNzQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qge2ZpbGVOYW1lLCBmaWxlQ2FjaGV9ID0gYWN0aW9uO1xuICBjb25zdCB7ZmlsZXNUb0xvYWQsIG9uRmluaXNofSA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtwZXJjZW50OiAxLCBtZXNzYWdlOiAnRG9uZSd9XG4gIH0pO1xuXG4gIC8vIHNhdmUgcHJvY2Vzc2VkIGZpbGUgdG8gZmlsZUNhY2hlXG4gIGNvbnN0IHN0YXRlV2l0aENhY2hlID0gcGlja18oJ2ZpbGVMb2FkaW5nJykobWVyZ2VfKHtmaWxlQ2FjaGV9KSkoc3RhdGVXaXRoUHJvZ3Jlc3MpO1xuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzdGF0ZVdpdGhDYWNoZSxcbiAgICBERUxBWV9UQVNLKDIwMCkubWFwKGZpbGVzVG9Mb2FkLmxlbmd0aCA/IGxvYWROZXh0RmlsZSA6ICgpID0+IG9uRmluaXNoKGZpbGVDYWNoZSkpXG4gICk7XG59XG5cbi8vIHdpdGhUYXNrPFQ+KHN0YXRlOiBULCB0YXNrOiBhbnkpOiBUXG5cbi8qKlxuICpcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkTmV4dEZpbGVVcGRhdGVyKHN0YXRlOiBWaXNTdGF0ZSk6IFZpc1N0YXRlIHtcbiAgaWYgKCFzdGF0ZS5maWxlTG9hZGluZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7ZmlsZXNUb0xvYWR9ID0gc3RhdGUuZmlsZUxvYWRpbmc7XG4gIGNvbnN0IFtmaWxlLCAuLi5yZW1haW5pbmdGaWxlc1RvTG9hZF0gPSBmaWxlc1RvTG9hZDtcblxuICAvLyBzYXZlIGZpbGVzVG9Mb2FkIHRvIHN0YXRlXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHBpY2tfKCdmaWxlTG9hZGluZycpKG1lcmdlXyh7ZmlsZXNUb0xvYWQ6IHJlbWFpbmluZ0ZpbGVzVG9Mb2FkfSkpKHN0YXRlKTtcblxuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKG5leHRTdGF0ZSwge1xuICAgIGZpbGVOYW1lOiBmaWxlLm5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtwZXJjZW50OiAwLCBtZXNzYWdlOiAnbG9hZGluZy4uLid9XG4gIH0pO1xuXG4gIGNvbnN0IHtsb2FkZXJzLCBsb2FkT3B0aW9uc30gPSBzdGF0ZTtcbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHN0YXRlV2l0aFByb2dyZXNzLFxuICAgIG1ha2VMb2FkRmlsZVRhc2soXG4gICAgICBmaWxlLFxuICAgICAgbmV4dFN0YXRlLmZpbGVMb2FkaW5nICYmIG5leHRTdGF0ZS5maWxlTG9hZGluZy5maWxlQ2FjaGUsXG4gICAgICBsb2FkZXJzLFxuICAgICAgbG9hZE9wdGlvbnNcbiAgICApXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlTG9hZEZpbGVUYXNrKGZpbGUsIGZpbGVDYWNoZSwgbG9hZGVyczogTG9hZGVyW10gPSBbXSwgbG9hZE9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4gTE9BRF9GSUxFX1RBU0soe2ZpbGUsIGZpbGVDYWNoZSwgbG9hZGVycywgbG9hZE9wdGlvbnN9KS5iaW1hcChcbiAgICAvLyBwcmV0dGllciBpZ25vcmVcbiAgICAvLyBzdWNjZXNzXG4gICAgZ2VuID0+XG4gICAgICBuZXh0RmlsZUJhdGNoKHtcbiAgICAgICAgZ2VuLFxuICAgICAgICBmaWxlTmFtZTogZmlsZS5uYW1lLFxuICAgICAgICBvbkZpbmlzaDogcmVzdWx0ID0+XG4gICAgICAgICAgcHJvY2Vzc0ZpbGVDb250ZW50KHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IHJlc3VsdCxcbiAgICAgICAgICAgIGZpbGVDYWNoZVxuICAgICAgICAgIH0pXG4gICAgICB9KSxcblxuICAgIC8vIGVycm9yXG4gICAgZXJyID0+IGxvYWRGaWxlc0VycihmaWxlLm5hbWUsIGVycilcbiAgKTtcbn1cblxuLyoqXG4gKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NGaWxlQ29udGVudFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7Y29udGVudCwgZmlsZUNhY2hlfSA9IGFjdGlvbi5wYXlsb2FkO1xuXG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZTogY29udGVudC5maWxlTmFtZSxcbiAgICBwcm9ncmVzczoge3BlcmNlbnQ6IDEsIG1lc3NhZ2U6ICdwcm9jZXNzaW5nLi4uJ31cbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHN0YXRlV2l0aFByb2dyZXNzLFxuICAgIFBST0NFU1NfRklMRV9EQVRBKHtjb250ZW50LCBmaWxlQ2FjaGV9KS5iaW1hcChcbiAgICAgIHJlc3VsdCA9PiBsb2FkRmlsZVN0ZXBTdWNjZXNzKHtmaWxlTmFtZTogY29udGVudC5maWxlTmFtZSwgZmlsZUNhY2hlOiByZXN1bHR9KSxcbiAgICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoY29udGVudC5maWxlTmFtZSwgZXJyKVxuICAgIClcbiAgKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUHJvZ3Jlc3MocHJldlByb2dyZXNzID0ge30sIHByb2dyZXNzKSB7XG4gIC8vIFRoaXMgaGFwcGVucyB3aGVuIHJlY2VpdmluZyBxdWVyeSBtZXRhZGF0YSBvciBvdGhlciBjYXNlcyB3ZSBkb24ndFxuICAvLyBoYXZlIGFuIHVwZGF0ZSBmb3IgdGhlIHVzZXIuXG4gIGlmICghcHJvZ3Jlc3MgfHwgIXByb2dyZXNzLnBlcmNlbnQpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBlcmNlbnQ6IHByb2dyZXNzLnBlcmNlbnRcbiAgfTtcbn1cblxuLyoqXG4gKiBnZXRzIGNhbGxlZCB3aXRoIHBheWxvYWQgPSBBc3luY0dlbmVyYXRvcjw/Pz8+XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbmV4dEZpbGVCYXRjaFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge1xuICAgIHBheWxvYWQ6IHtnZW4sIGZpbGVOYW1lLCBwcm9ncmVzcywgYWNjdW11bGF0ZWQsIG9uRmluaXNofVxuICB9OiBWaXNTdGF0ZUFjdGlvbnMuTmV4dEZpbGVCYXRjaFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiBwYXJzZVByb2dyZXNzKHN0YXRlLmZpbGVMb2FkaW5nUHJvZ3Jlc3NbZmlsZU5hbWVdLCBwcm9ncmVzcylcbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKHN0YXRlV2l0aFByb2dyZXNzLCBbXG4gICAgLi4uKGdldEFwcGxpY2F0aW9uQ29uZmlnKCkudXNlQXJyb3dQcm9ncmVzc2l2ZUxvYWRpbmcgJiZcbiAgICBmaWxlTmFtZS5lbmRzV2l0aCgnYXJyb3cnKSAmJlxuICAgIGFjY3VtdWxhdGVkPy5kYXRhPy5sZW5ndGggPiAwXG4gICAgICA/IFtcbiAgICAgICAgICBQUk9DRVNTX0ZJTEVfREFUQSh7Y29udGVudDogYWNjdW11bGF0ZWQsIGZpbGVDYWNoZTogW119KS5iaW1hcChcbiAgICAgICAgICAgIHJlc3VsdCA9PiBsb2FkRmlsZXNTdWNjZXNzKHJlc3VsdCksXG4gICAgICAgICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGVOYW1lLCBlcnIpXG4gICAgICAgICAgKVxuICAgICAgICBdXG4gICAgICA6IFtdKSxcbiAgICBVTldSQVBfVEFTSyhnZW4ubmV4dCgpKS5iaW1hcChcbiAgICAgICh7dmFsdWUsIGRvbmV9KSA9PiB7XG4gICAgICAgIHJldHVybiBkb25lXG4gICAgICAgICAgPyBvbkZpbmlzaChhY2N1bXVsYXRlZClcbiAgICAgICAgICA6IG5leHRGaWxlQmF0Y2goe1xuICAgICAgICAgICAgICBnZW4sXG4gICAgICAgICAgICAgIGZpbGVOYW1lLFxuICAgICAgICAgICAgICBwcm9ncmVzczogdmFsdWUucHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIGFjY3VtdWxhdGVkOiB2YWx1ZSxcbiAgICAgICAgICAgICAgb25GaW5pc2hcbiAgICAgICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoZmlsZU5hbWUsIGVycilcbiAgICApXG4gIF0pO1xufTtcblxuLyoqXG4gKiBUcmlnZ2VyIGxvYWRpbmcgZmlsZSBlcnJvclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc0VyclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2Vycm9yLCBmaWxlTmFtZX06IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZXNFcnJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIC8vIHVwZGF0ZSB1aSB3aXRoIGVycm9yIG1lc3NhZ2VcbiAgQ29uc29sZS53YXJuKGVycm9yKTtcbiAgaWYgKCFzdGF0ZS5maWxlTG9hZGluZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7ZmlsZXNUb0xvYWQsIG9uRmluaXNoLCBmaWxlQ2FjaGV9ID0gc3RhdGUuZmlsZUxvYWRpbmc7XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZSxcbiAgICBwcm9ncmVzczoge2Vycm9yfVxuICB9KTtcblxuICAvLyBraWNrIG9mZiBuZXh0IGZpbGUgb3IgZmluaXNoXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBuZXh0U3RhdGUsXG4gICAgREVMQVlfVEFTSygyMDApLm1hcChmaWxlc1RvTG9hZC5sZW5ndGggPyBsb2FkTmV4dEZpbGUgOiAoKSA9PiBvbkZpbmlzaChmaWxlQ2FjaGUpKVxuICApO1xufTtcblxuLyoqXG4gKiBXaGVuIHNlbGVjdCBkYXRhc2V0IGZvciBleHBvcnQsIGFwcGx5IGNwdSBmaWx0ZXIgdG8gc2VsZWN0ZWQgZGF0YXNldFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFwcGx5Q1BVRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkfTogVmlzU3RhdGVBY3Rpb25zLkFwcGx5Q1BVRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyBhcHBseSBjcHVGaWx0ZXJcbiAgY29uc3QgZGF0YUlkcyA9IHRvQXJyYXkoZGF0YUlkKTtcblxuICByZXR1cm4gZGF0YUlkcy5yZWR1Y2UoKGFjY3UsIGlkKSA9PiBmaWx0ZXJEYXRhc2V0Q1BVKGFjY3UsIGlkKSwgc3RhdGUpO1xufTtcblxuLyoqXG4gKiBVc2VyIGlucHV0IHRvIHVwZGF0ZSB0aGUgaW5mbyBvZiB0aGUgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0TWFwSW5mb1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0TWFwSW5mb1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBtYXBJbmZvOiB7XG4gICAgLi4uc3RhdGUubWFwSW5mbyxcbiAgICAuLi5hY3Rpb24uaW5mb1xuICB9XG59KTtcbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIHVwZGF0ZSBBbGwgbGF5ZXIgZG9tYWluIGFuZCBsYXllciBkYXRhIG9mIHN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGREZWZhdWx0TGF5ZXJzKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGRhdGFzZXRzOiBEYXRhc2V0c1xuKToge3N0YXRlOiBWaXNTdGF0ZTsgbmV3TGF5ZXJzOiBMYXllcltdfSB7XG4gIGNvbnN0IGVtcHR5OiBMYXllcltdID0gW107XG4gIGNvbnN0IGRlZmF1bHRMYXllcnMgPSBPYmplY3QudmFsdWVzKGRhdGFzZXRzKS5yZWR1Y2UoKGFjY3U6IExheWVyW10sIGRhdGFzZXQpID0+IHtcbiAgICBjb25zdCBmb3VuZExheWVycyA9IGZpbmREZWZhdWx0TGF5ZXIoZGF0YXNldCwgc3RhdGUubGF5ZXJDbGFzc2VzKTtcbiAgICByZXR1cm4gZm91bmRMYXllcnMgJiYgZm91bmRMYXllcnMubGVuZ3RoID8gYWNjdS5jb25jYXQoZm91bmRMYXllcnMpIDogYWNjdTtcbiAgfSwgZW1wdHkpO1xuXG4gIHJldHVybiB7XG4gICAgc3RhdGU6IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbGF5ZXJzOiBbLi4uc3RhdGUubGF5ZXJzLCAuLi5kZWZhdWx0TGF5ZXJzXSxcbiAgICAgIGxheWVyT3JkZXI6IFtcbiAgICAgICAgLy8gcHV0IG5ldyBsYXllcnMgb24gdG9wIG9mIG9sZCBvbmVzIGluIHJldmVyc2VcbiAgICAgICAgLi4uZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMoZGVmYXVsdExheWVycyksXG4gICAgICAgIC4uLnN0YXRlLmxheWVyT3JkZXJcbiAgICAgIF1cbiAgICB9LFxuICAgIG5ld0xheWVyczogZGVmYXVsdExheWVyc1xuICB9O1xufVxuXG4vKipcbiAqIGhlbHBlciBmdW5jdGlvbiB0byBmaW5kIGRlZmF1bHQgdG9vbHRpcHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFzZXRcbiAqIEByZXR1cm5zIHtPYmplY3R9IG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRGVmYXVsdFRvb2x0aXBzKHN0YXRlLCBkYXRhc2V0KSB7XG4gIGNvbnN0IHRvb2x0aXBGaWVsZHMgPSBmaW5kRmllbGRzVG9TaG93KHtcbiAgICAuLi5kYXRhc2V0LFxuICAgIG1heERlZmF1bHRUb29sdGlwczogc3RhdGUubWF4RGVmYXVsdFRvb2x0aXBzXG4gIH0pO1xuICBjb25zdCBtZXJnZWQgPSB7XG4gICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93LFxuICAgIC4uLnRvb2x0aXBGaWVsZHNcbiAgfTtcblxuICByZXR1cm4gc2V0KFsnaW50ZXJhY3Rpb25Db25maWcnLCAndG9vbHRpcCcsICdjb25maWcnLCAnZmllbGRzVG9TaG93J10sIG1lcmdlZCwgc3RhdGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MoZmlsZSwgaW5kZXgpIHtcbiAgY29uc3QgZmlsZU5hbWUgPSBmaWxlLm5hbWUgfHwgYFVudGl0bGVkIEZpbGUgJHtpbmRleH1gO1xuICByZXR1cm4ge1xuICAgIFtmaWxlTmFtZV06IHtcbiAgICAgIC8vIHBlcmNlbnQgb2YgY3VycmVudCBmaWxlXG4gICAgICBwZXJjZW50OiAwLFxuICAgICAgbWVzc2FnZTogJycsXG4gICAgICBmaWxlTmFtZSxcbiAgICAgIGVycm9yOiBudWxsXG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtmaWxlTmFtZSwgcHJvZ3Jlc3N9KSB7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgcmV0dXJuIHBpY2tfKCdmaWxlTG9hZGluZ1Byb2dyZXNzJykocGlja18oZmlsZU5hbWUpKG1lcmdlXyhwcm9ncmVzcykpKShzdGF0ZSk7XG59XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byB1cGRhdGUgbGF5ZXIgZG9tYWlucyBmb3IgYW4gYXJyYXkgb2YgZGF0YXNldHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YTxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgZGF0YUlkOiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgdXBkYXRlZEZpbHRlcj86IEZpbHRlclxuKTogUyB7XG4gIGNvbnN0IGRhdGFJZHMgPSB0eXBlb2YgZGF0YUlkID09PSAnc3RyaW5nJyA/IFtkYXRhSWRdIDogZGF0YUlkO1xuICBjb25zdCBuZXdMYXllcnM6IExheWVyW10gPSBbXTtcbiAgY29uc3QgbmV3TGF5ZXJEYXRhOiBhbnlbXSA9IFtdO1xuXG4gIHN0YXRlLmxheWVycy5mb3JFYWNoKChvbGRMYXllciwgaSkgPT4ge1xuICAgIGlmIChvbGRMYXllci5jb25maWcuZGF0YUlkICYmIGRhdGFJZHMuaW5jbHVkZXMob2xkTGF5ZXIuY29uZmlnLmRhdGFJZCkpIHtcbiAgICAgIC8vIE5vIG5lZWQgdG8gcmVjYWxjdWxhdGUgbGF5ZXIgZG9tYWluIGlmIGZpbHRlciBoYXMgZml4ZWQgZG9tYWluXG4gICAgICBjb25zdCBuZXdMYXllciA9XG4gICAgICAgIHVwZGF0ZWRGaWx0ZXIgJiYgdXBkYXRlZEZpbHRlci5maXhlZERvbWFpblxuICAgICAgICAgID8gb2xkTGF5ZXJcbiAgICAgICAgICA6IG9sZExheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzLCB1cGRhdGVkRmlsdGVyKTtcblxuICAgICAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgc3RhdGUubGF5ZXJEYXRhW2ldKTtcblxuICAgICAgbmV3TGF5ZXJzLnB1c2gobGF5ZXIpO1xuICAgICAgbmV3TGF5ZXJEYXRhLnB1c2gobGF5ZXJEYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXJzLnB1c2gob2xkTGF5ZXIpO1xuICAgICAgbmV3TGF5ZXJEYXRhLnB1c2goc3RhdGUubGF5ZXJEYXRhW2ldKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogbmV3TGF5ZXJzLFxuICAgIGxheWVyRGF0YTogbmV3TGF5ZXJEYXRhXG4gIH07XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlQW5pbWF0aW9uRG9tYWluPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMpOiBTIHtcbiAgLy8gbWVyZ2UgYWxsIGFuaW1hdGFibGUgbGF5ZXIgZG9tYWluIGFuZCB1cGRhdGUgZ2xvYmFsIGNvbmZpZ1xuICBjb25zdCBhbmltYXRhYmxlTGF5ZXJzID0gZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMoc3RhdGUubGF5ZXJzKTtcblxuICBpZiAoIWFuaW1hdGFibGVMYXllcnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgZG9tYWluOiBudWxsLFxuICAgICAgICBpc0FuaW1hdGluZzogZmFsc2UsXG4gICAgICAgIHRpbWVTdGVwczogbnVsbCxcbiAgICAgICAgZGVmYXVsdFRpbWVGb3JtYXQ6IG51bGxcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgY29uc3QgbGF5ZXJEb21haW5zID0gYW5pbWF0YWJsZUxheWVycy5tYXAobCA9PiBsLmNvbmZpZy5hbmltYXRpb24uZG9tYWluIHx8IFtdKTtcbiAgLy8gQHRzLWlnbm9yZVxuICBjb25zdCBtZXJnZWREb21haW4gPSBtZXJnZVRpbWVEb21haW5zKGxheWVyRG9tYWlucyk7XG4gIGNvbnN0IGRlZmF1bHRUaW1lRm9ybWF0ID0gZ2V0VGltZVdpZGdldFRpdGxlRm9ybWF0dGVyKG1lcmdlZERvbWFpbik7XG5cbiAgLy8gbWVyZ2UgdGltZVN0ZXBzXG4gIGxldCBtZXJnZWRUaW1lU3RlcHM6IG51bWJlcltdIHwgbnVsbCA9IHVuaXE8bnVtYmVyPihcbiAgICBhbmltYXRhYmxlTGF5ZXJzLnJlZHVjZSgoYWNjdSwgbGF5ZXIpID0+IHtcbiAgICAgIGFjY3UucHVzaCguLi4obGF5ZXIuY29uZmlnLmFuaW1hdGlvbi50aW1lU3RlcHMgfHwgW10pKTtcbiAgICAgIHJldHVybiBhY2N1O1xuICAgIH0sIFtdKVxuICApLnNvcnQoKTtcblxuICBtZXJnZWRUaW1lU3RlcHMgPSBtZXJnZWRUaW1lU3RlcHMubGVuZ3RoID8gbWVyZ2VkVGltZVN0ZXBzIDogbnVsbDtcblxuICAvLyBUT0RPOiBiZXR0ZXIgaGFuZGxpbmcgb2YgZHVyYXRpb24gY2FsY3VsYXRpb25cbiAgY29uc3QgZHVyYXRpb24gPSBtZXJnZWRUaW1lU3RlcHNcbiAgICA/IChCQVNFX1NQRUVEICogKDEwMDAgLyBGUFMpKSAvIG1lcmdlZFRpbWVTdGVwcy5sZW5ndGggLyAoc3RhdGUuYW5pbWF0aW9uQ29uZmlnLnNwZWVkIHx8IDEpXG4gICAgOiBudWxsO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIGRvbWFpbjogbWVyZ2VkRG9tYWluLFxuICAgICAgZGVmYXVsdFRpbWVGb3JtYXQsXG4gICAgICBkdXJhdGlvbixcbiAgICAgIHRpbWVTdGVwczogbWVyZ2VkVGltZVN0ZXBzXG4gICAgfVxuICB9O1xuXG4gIC8vIHJlc2V0IGN1cnJlbnRUaW1lIGJhc2VkIG9uIG5ldyBkb21haW5cbiAgY29uc3Qgc3luY2VkRmlsdGVyID0gc3RhdGUuZmlsdGVycz8uZmluZChmID0+IChmIGFzIFRpbWVSYW5nZUZpbHRlcikuc3luY2VkV2l0aExheWVyVGltZWxpbmUpIGFzXG4gICAgfCBUaW1lUmFuZ2VGaWx0ZXJcbiAgICB8IHVuZGVmaW5lZDtcblxuICAvLyBpZiBzeW5jZWQgZmlsdGVyIGV4aXN0IHdlZSBuZWVkIHRvIG1lcmdlIGFuaW1hdGlvbkNvbmZpZyBhbmQgZmlsdGVyIGRvbWFpbnNcbiAgLy8gYW5kIHZhbGlkYXRlIHRoZSBjdXJyZW50IHRpbWUgYWdhaW5zdCB0aGUgbmV3IG1lcmdlZCBkb21haW5cbiAgY29uc3QgbmV3QW5pbWF0aW9uRG9tYWluID0gc3luY2VkRmlsdGVyXG4gICAgPyBtZXJnZVRpbWVEb21haW5zKFttZXJnZWREb21haW4sIHN5bmNlZEZpbHRlci5kb21haW5dKVxuICAgIDogbWVyZ2VkRG9tYWluO1xuICBjb25zdCBjdXJyZW50VGltZSA9IGlzSW5SYW5nZShzdGF0ZS5hbmltYXRpb25Db25maWcuY3VycmVudFRpbWUsIG5ld0FuaW1hdGlvbkRvbWFpbilcbiAgICA/IHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZVxuICAgIDogbmV3QW5pbWF0aW9uRG9tYWluWzBdO1xuXG4gIGlmIChjdXJyZW50VGltZSAhPT0gc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmN1cnJlbnRUaW1lKSB7XG4gICAgLy8gaWYgY3VycmVudFRpbWUgY2hhbmdlZCwgbmVlZCB0byBjYWxsIGFuaW1hdGlvblRpbWVVcGRhdGVyIHRvIHJlIGNhbGwgZm9ybWF0TGF5ZXJEYXRhXG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV4dFN0YXRlLCB7dmFsdWU6IGN1cnJlbnRUaW1lfSk7XG4gIH1cblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG4vKipcbiAqIFVwZGF0ZSB0aGUgc3RhdHVzIG9mIHRoZSBlZGl0b3JcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFZGl0b3JNb2RlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7bW9kZX06IFZpc1N0YXRlQWN0aW9ucy5TZXRFZGl0b3JNb2RlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGVkaXRvcjoge1xuICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICBtb2RlLFxuICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICB9XG59KTtcblxuLy8gY29uc3QgZmVhdHVyZVRvRmlsdGVyVmFsdWUgPSAoZmVhdHVyZSkgPT4gKHsuLi5mZWF0dXJlLCBpZDogZmVhdHVyZS5pZH0pO1xuLyoqXG4gKiBVcGRhdGUgZWRpdG9yIGZlYXR1cmVzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmVhdHVyZXNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtmZWF0dXJlcyA9IFtdfTogVmlzU3RhdGVBY3Rpb25zLlNldEZlYXR1cmVzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBsYXN0RmVhdHVyZSA9IGZlYXR1cmVzLmxlbmd0aCAmJiBmZWF0dXJlc1tmZWF0dXJlcy5sZW5ndGggLSAxXTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIC8vIG9ubHkgc2F2ZSBub25lIGZpbHRlciBmZWF0dXJlcyB0byBlZGl0b3JcbiAgICAgIGZlYXR1cmVzOiBmZWF0dXJlcy5maWx0ZXIoZiA9PiAhZ2V0RmlsdGVySWRJbkZlYXR1cmUoZikpLFxuICAgICAgbW9kZTpcbiAgICAgICAgbGFzdEZlYXR1cmUgJiYgbGFzdEZlYXR1cmUucHJvcGVydGllcz8uaXNDbG9zZWRcbiAgICAgICAgICA/IGxhc3RGZWF0dXJlLnByb3BlcnRpZXM/LnNoYXBlID09PSAnUmVjdGFuZ2xlJ1xuICAgICAgICAgICAgPyBzdGF0ZS5lZGl0b3IubW9kZVxuICAgICAgICAgICAgOiBFRElUT1JfTU9ERVMuRURJVFxuICAgICAgICAgIDogc3RhdGUuZWRpdG9yLm1vZGVcbiAgICB9XG4gIH07XG5cbiAgLy8gUmV0cmlldmUgZXhpc3RpbmcgZmVhdHVyZVxuICBjb25zdCB7c2VsZWN0ZWRGZWF0dXJlfSA9IHN0YXRlLmVkaXRvcjtcblxuICAvLyBJZiBubyBmZWF0dXJlIGlzIHNlbGVjdGVkIHdlIGNhbiBzaW1wbHkgcmV0dXJuIHNpbmNlIG5vIG9wZXJhdGlvbnNcbiAgaWYgKCFzZWxlY3RlZEZlYXR1cmUpIHtcbiAgICByZXR1cm4gbmV3U3RhdGU7XG4gIH1cblxuICAvLyBUT0RPOiBjaGVjayBpZiB0aGUgZmVhdHVyZSBoYXMgY2hhbmdlZFxuICBjb25zdCBmZWF0dXJlID0gZmVhdHVyZXMuZmluZChmID0+IGYuaWQgPT09IHNlbGVjdGVkRmVhdHVyZS5pZCk7XG5cbiAgLy8gaWYgZmVhdHVyZSBpcyBwYXJ0IG9mIGEgZmlsdGVyXG4gIGNvbnN0IGZpbHRlcklkID0gZmVhdHVyZSAmJiBnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKTtcbiAgaWYgKGZpbHRlcklkICYmIGZlYXR1cmUpIHtcbiAgICAvLyBhZGQgYmJveCBmb3IgcG9seWdvbiBmaWx0ZXIgdG8gc3BlZWQgdXAgZmlsdGVyaW5nXG4gICAgaWYgKGZlYXR1cmUucHJvcGVydGllcykgZmVhdHVyZS5wcm9wZXJ0aWVzLmJib3ggPSBiYm94KGZlYXR1cmUpO1xuICAgIGNvbnN0IGZlYXR1cmVWYWx1ZSA9IGZlYXR1cmVUb0ZpbHRlclZhbHVlKGZlYXR1cmUsIGZpbHRlcklkKTtcbiAgICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmaWwgPT4gZmlsLmlkID09PSBmaWx0ZXJJZCk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICBpZHg6IGZpbHRlcklkeCxcbiAgICAgIHByb3A6ICd2YWx1ZScsXG4gICAgICB2YWx1ZTogZmVhdHVyZVZhbHVlXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogU2V0IHRoZSBjdXJyZW50IHNlbGVjdGVkIGZlYXR1cmVcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2ZlYXR1cmUsIHNlbGVjdGlvbkNvbnRleHR9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyBhZGQgYmJveCBmb3IgcG9seWdvbiBmaWx0ZXIgdG8gc3BlZWQgdXAgZmlsdGVyaW5nXG4gIGxldCBzZWxlY3RlZEZlYXR1cmUgPSBmZWF0dXJlO1xuICBpZiAoZmVhdHVyZT8ucHJvcGVydGllcykge1xuICAgIHNlbGVjdGVkRmVhdHVyZSA9IHtcbiAgICAgIC4uLmZlYXR1cmUsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIC4uLmZlYXR1cmUucHJvcGVydGllcyxcbiAgICAgICAgYmJveDogYmJveChmZWF0dXJlKVxuICAgICAgfVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIHNlbGVjdGVkRmVhdHVyZSxcbiAgICAgIHNlbGVjdGlvbkNvbnRleHRcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIERlbGV0ZSBleGlzdGluZyBmZWF0dXJlIGZyb20gZmlsdGVyc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGV0ZUZlYXR1cmVVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtmZWF0dXJlfTogVmlzU3RhdGVBY3Rpb25zLkRlbGV0ZUZlYXR1cmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghZmVhdHVyZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gICAgfVxuICB9O1xuXG4gIGlmIChnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKSkge1xuICAgIGNvbnN0IGZpbHRlcklkeCA9IG5ld1N0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSkpO1xuXG4gICAgcmV0dXJuIGZpbHRlcklkeCA+IC0xID8gcmVtb3ZlRmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge2lkeDogZmlsdGVySWR4fSkgOiBuZXdTdGF0ZTtcbiAgfVxuXG4gIC8vIG1vZGlmeSBlZGl0b3Igb2JqZWN0XG4gIGNvbnN0IG5ld0VkaXRvciA9IHtcbiAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgZmVhdHVyZXM6IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5maWx0ZXIoZiA9PiBmLmlkICE9PSBmZWF0dXJlLmlkKSxcbiAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjogbmV3RWRpdG9yXG4gIH07XG59XG5cbi8qKlxuICogVG9nZ2xlIGZlYXR1cmUgYXMgbGF5ZXIgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0UG9seWdvbkZpbHRlckxheWVyVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBwYXlsb2FkOiBWaXNTdGF0ZUFjdGlvbnMuU2V0UG9seWdvbkZpbHRlckxheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7bGF5ZXIsIGZlYXR1cmV9ID0gcGF5bG9hZDtcbiAgY29uc3QgZmlsdGVySWQgPSBnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKTtcblxuICAvLyBsZXQgbmV3RmlsdGVyID0gbnVsbDtcbiAgbGV0IGZpbHRlcklkeDtcbiAgbGV0IG5ld0xheWVySWQgPSBbbGF5ZXIuaWRdO1xuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgLy8gSWYgcG9seWdvbiBmaWx0ZXIgYWxyZWFkeSBleGlzdHMsIHdlIG5lZWQgdG8gZmluZCBvdXQgaWYgdGhlIGN1cnJlbnQgbGF5ZXIgaXMgYWxyZWFkeSBpbmNsdWRlZFxuICBpZiAoZmlsdGVySWQpIHtcbiAgICBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcblxuICAgIGlmICghc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdKSB7XG4gICAgICAvLyB3aGF0IGlmIGZpbHRlciBkb2Vzbid0IGV4aXN0Py4uLiBub3QgcG9zc2libGUuXG4gICAgICAvLyBiZWNhdXNlIGZlYXR1cmVzIGluIHRoZSBlZGl0b3IgaXMgcGFzc2VkIGluIGZyb20gZmlsdGVycyBhbmQgZWRpdG9ycy5cbiAgICAgIC8vIGJ1dCB3ZSB3aWxsIG1vdmUgdGhpcyBmZWF0dXJlIGJhY2sgdG8gZWRpdG9yIGp1c3QgaW4gY2FzZVxuICAgICAgY29uc3Qgbm9uZUZpbHRlckZlYXR1cmUgPSB7XG4gICAgICAgIC4uLmZlYXR1cmUsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAuLi5mZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgICAgICAgZmlsdGVySWQ6IG51bGxcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGVkaXRvcjoge1xuICAgICAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgICAgICBmZWF0dXJlczogWy4uLnN0YXRlLmVkaXRvci5mZWF0dXJlcywgbm9uZUZpbHRlckZlYXR1cmVdLFxuICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZTogbm9uZUZpbHRlckZlYXR1cmVcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdO1xuICAgIGNvbnN0IHtsYXllcklkID0gW119ID0gZmlsdGVyO1xuICAgIGNvbnN0IGlzTGF5ZXJJbmNsdWRlZCA9IGxheWVySWQuaW5jbHVkZXMobGF5ZXIuaWQpO1xuXG4gICAgbmV3TGF5ZXJJZCA9IGlzTGF5ZXJJbmNsdWRlZFxuICAgICAgPyAvLyBpZiBsYXllciBpcyBpbmNsdWRlZCwgcmVtb3ZlIGl0XG4gICAgICAgIGxheWVySWQuZmlsdGVyKGwgPT4gbCAhPT0gbGF5ZXIuaWQpXG4gICAgICA6IFsuLi5sYXllcklkLCBsYXllci5pZF07XG4gIH0gZWxzZSB7XG4gICAgLy8gaWYgd2UgaGF2ZW4ndCBjcmVhdGUgdGhlIHBvbHlnb24gZmlsdGVyLCBjcmVhdGUgaXRcbiAgICBjb25zdCBuZXdGaWx0ZXIgPSBnZW5lcmF0ZVBvbHlnb25GaWx0ZXIoW10sIGZlYXR1cmUpO1xuICAgIGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMubGVuZ3RoO1xuXG4gICAgLy8gYWRkIGZlYXR1cmUsIHJlbW92ZSBmZWF0dXJlIGZyb20gZWlkdG9yXG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGZpbHRlcnM6IFsuLi5zdGF0ZS5maWx0ZXJzLCBuZXdGaWx0ZXJdLFxuICAgICAgZWRpdG9yOiB7XG4gICAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgICAgZmVhdHVyZXM6IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5maWx0ZXIoZiA9PiBmLmlkICE9PSBmZWF0dXJlLmlkKSxcbiAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBuZXdGaWx0ZXIudmFsdWVcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGZpbHRlcklkeCxcbiAgICBwcm9wOiAnbGF5ZXJJZCcsXG4gICAgdmFsdWU6IG5ld0xheWVySWRcbiAgfSk7XG59XG5cbi8qKlxuICogQXBwbHkgcG9seWdvbiBmaWx0ZXIgdG8gYWxsIHZpc2libGUgbGF5ZXJzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0UG9seWdvbkZpbHRlckFsbExheWVyc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgcGF5bG9hZDogVmlzU3RhdGVBY3Rpb25zLlNldFBvbHlnb25GaWx0ZXJBbGxMYXllcnNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtmZWF0dXJlfSA9IHBheWxvYWQ7XG5cbiAgY29uc3QgbmV3RmlsdGVyID0gZ2VuZXJhdGVQb2x5Z29uRmlsdGVyKFtdLCBmZWF0dXJlKTtcbiAgY29uc3QgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5sZW5ndGg7XG5cbiAgY29uc3QgbmV3U3RhdGU6IFZpc1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IFsuLi5zdGF0ZS5maWx0ZXJzLCBuZXdGaWx0ZXJdLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgZmVhdHVyZXM6IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5maWx0ZXIoZiA9PiBmLmlkICE9PSBmZWF0dXJlLmlkKSxcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbmV3RmlsdGVyLnZhbHVlLFxuICAgICAgbW9kZTogRURJVE9SX01PREVTLkVESVRcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgdmlzaWJsZUxheWVySWRzID0gZ2V0KHBheWxvYWQsICd2aXNpYmxlTGF5ZXJJZHMnKTtcbiAgY29uc3QgYWxsTGF5ZXJJZHMgPSBBcnJheS5pc0FycmF5KHZpc2libGVMYXllcklkcylcbiAgICA/IHZpc2libGVMYXllcklkc1xuICAgIDogc3RhdGUubGF5ZXJzLmZpbHRlcihsID0+IGwuY29uZmlnLmlzVmlzaWJsZSkubWFwKGwgPT4gbC5pZCk7XG5cbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGZpbHRlcklkeCxcbiAgICBwcm9wOiAnbGF5ZXJJZCcsXG4gICAgdmFsdWU6IGFsbExheWVySWRzXG4gIH0pO1xufVxuXG4vKipcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb3J0VGFibGVDb2x1bW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGNvbHVtbiwgbW9kZX06IFZpc1N0YXRlQWN0aW9ucy5Tb3J0VGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IHNvcnRNb2RlID0gbW9kZTtcbiAgaWYgKCFzb3J0TW9kZSkge1xuICAgIGNvbnN0IGN1cnJlbnRNb2RlID0gZ2V0KGRhdGFzZXQsIFsnc29ydENvbHVtbicsIGNvbHVtbl0pO1xuICAgIC8vIEB0cy1pZ25vcmUgLSBzaG91bGQgYmUgZml4YWJsZSBpbiBhIFRTIGZpbGVcbiAgICBzb3J0TW9kZSA9IGN1cnJlbnRNb2RlXG4gICAgICA/IE9iamVjdC5rZXlzKFNPUlRfT1JERVIpLmZpbmQobSA9PiBtICE9PSBjdXJyZW50TW9kZSlcbiAgICAgIDogU09SVF9PUkRFUi5BU0NFTkRJTkc7XG4gIH1cblxuICBjb25zdCBzb3J0ZWQgPSBzb3J0RGF0YXNldEJ5Q29sdW1uKGRhdGFzZXQsIGNvbHVtbiwgc29ydE1vZGUpO1xuICByZXR1cm4gc2V0KFsnZGF0YXNldHMnLCBkYXRhSWRdLCBzb3J0ZWQsIHN0YXRlKTtcbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGluVGFibGVDb2x1bW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGNvbHVtbn06IFZpc1N0YXRlQWN0aW9ucy5QaW5UYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBuZXdEYXRhc2V0ID0gcGluVGFibGVDb2x1bW5zKGRhdGFzZXQsIGNvbHVtbik7XG5cbiAgcmV0dXJuIHNldChbJ2RhdGFzZXRzJywgZGF0YUlkXSwgbmV3RGF0YXNldCwgc3RhdGUpO1xufVxuXG4vKipcbiAqIENvcHkgY29sdW1uIGNvbnRlbnQgYXMgc3RyaW5nc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHlUYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgY29sdW1ufTogVmlzU3RhdGVBY3Rpb25zLkNvcHlUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBmaWVsZElkeCA9IGRhdGFzZXQuZmllbGRzLmZpbmRJbmRleChmID0+IGYubmFtZSA9PT0gY29sdW1uKTtcbiAgaWYgKGZpZWxkSWR4IDwgMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7dHlwZX0gPSBkYXRhc2V0LmZpZWxkc1tmaWVsZElkeF07XG4gIGNvbnN0IHRleHQgPSBkYXRhc2V0LmRhdGFDb250YWluZXJcbiAgICAubWFwKHJvdyA9PiBwYXJzZUZpZWxkVmFsdWUocm93LnZhbHVlQXQoZmllbGRJZHgpLCB0eXBlKSwgdHJ1ZSlcbiAgICAuam9pbignXFxuJyk7XG5cbiAgY29weSh0ZXh0KTtcblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogU2V0IGRpc3BsYXkgZm9ybWF0IGZyb20gY29sdW1ucyBmcm9tIHVzZXIgc2VsZWN0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0Q29sdW1uRGlzcGxheUZvcm1hdFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgZm9ybWF0c306IFZpc1N0YXRlQWN0aW9ucy5TZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBuZXdGaWVsZHMgPSBkYXRhc2V0LmZpZWxkcztcbiAgT2JqZWN0LmtleXMoZm9ybWF0cykuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgIGNvbnN0IGZpZWxkSWR4ID0gZGF0YXNldC5maWVsZHMuZmluZEluZGV4KGYgPT4gZi5uYW1lID09PSBjb2x1bW4pO1xuICAgIGlmIChmaWVsZElkeCA+PSAwKSB7XG4gICAgICBjb25zdCBkaXNwbGF5Rm9ybWF0ID0gZm9ybWF0c1tjb2x1bW5dO1xuICAgICAgY29uc3QgZmllbGQgPSBuZXdGaWVsZHNbZmllbGRJZHhdO1xuICAgICAgbmV3RmllbGRzID0gc3dhcF8obWVyZ2VfKHtkaXNwbGF5Rm9ybWF0fSkoZmllbGQpIGFzIHtpZDogc3RyaW5nfSkoXG4gICAgICAgIG5ld0ZpZWxkcyBhcyB7aWQ6IHN0cmluZ31bXVxuICAgICAgKSBhcyBGaWVsZFtdO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgbmV3RGF0YXNldCA9IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7ZmllbGRzOiBuZXdGaWVsZHMgYXMgRmllbGRbXX0pO1xuICBsZXQgbmV3U3RhdGUgPSBwaWNrXygnZGF0YXNldHMnKShtZXJnZV8oe1tkYXRhSWRdOiBuZXdEYXRhc2V0fSkpKHN0YXRlKTtcblxuICAvLyB1cGRhdGUgY29sb3JGaWVsZCBkaXNwbGF5Rm9ybWF0XG4gIG5ld1N0YXRlID0ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGxheWVyczogbmV3U3RhdGUubGF5ZXJzLm1hcChsYXllciA9PlxuICAgICAgbGF5ZXIuY29uZmlnPy5jb2xvckZpZWxkPy5uYW1lICYmIGxheWVyLmNvbmZpZy5jb2xvckZpZWxkLm5hbWUgaW4gZm9ybWF0c1xuICAgICAgICA/IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAgIGNvbG9yRmllbGQ6IHtcbiAgICAgICAgICAgICAgLi4ubGF5ZXIuY29uZmlnLmNvbG9yRmllbGQsXG4gICAgICAgICAgICAgIGRpc3BsYXlGb3JtYXQ6IGZvcm1hdHNbbGF5ZXIuY29uZmlnLmNvbG9yRmllbGQubmFtZV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICA6IGxheWVyXG4gICAgKVxuICB9O1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZWRpdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICB2aXNpYmxlOiAhc3RhdGUuZWRpdG9yLnZpc2libGVcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR4LCBjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVycy4ke2lkeH0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChvbGRGaWx0ZXIudHlwZSAhPT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSkge1xuICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICBgc2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZyBjYW4gb25seSBiZSBjYWxsZWQgdG8gdXBkYXRlIGEgdGltZSBmaWx0ZXIuIGNoZWNrIGZpbHRlci50eXBlID09PSAndGltZVJhbmdlJ2BcbiAgICApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZXMgPSBjaGVja1RpbWVDb25maWdBcmdzKGNvbmZpZyk7XG5cbiAgcmV0dXJuIHBpY2tfKCdmaWx0ZXJzJykoc3dhcF8obWVyZ2VfKHVwZGF0ZXMpKG9sZEZpbHRlcikpKShzdGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrVGltZUNvbmZpZ0FyZ3MoY29uZmlnKSB7XG4gIGNvbnN0IGFsbG93ZWQgPSBbJ3RpbWVGb3JtYXQnLCAndGltZXpvbmUnXTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGNvbmZpZykucmVkdWNlKChhY2N1LCBwcm9wKSA9PiB7XG4gICAgaWYgKCFhbGxvd2VkLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICBDb25zb2xlLmVycm9yKFxuICAgICAgICBgc2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnIHRha2VzIHRpbWVGb3JtYXQgYW5kL29yIHRpbWV6b25lIGFzIG9wdGlvbnMsIGZvdW5kICR7cHJvcH1gXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFjY3U7XG4gICAgfVxuXG4gICAgLy8gaGVyZSB3ZSBhcmUgTk9UIGNoZWNraW5nIGlmIHRpbWV6b25lIG9yIHRpbWVGb3JtYXQgaW5wdXQgaXMgdmFsaWRcbiAgICBhY2N1W3Byb3BdID0gY29uZmlnW3Byb3BdO1xuICAgIHJldHVybiBhY2N1O1xuICB9LCB7fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7Y29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLlNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZ0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWNvbmZpZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB1cGRhdGVzID0gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpO1xuICByZXR1cm4gcGlja18oJ2FuaW1hdGlvbkNvbmZpZycpKG1lcmdlXyh1cGRhdGVzKSkoc3RhdGUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBlZGl0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZUFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtldmVudCwgbGF5ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCB7aWQ6IGRlY2tnbExheWVySWQsIGNvdW50fSA9IGV2ZW50O1xuICBpZiAoIWxheWVyKSB7XG4gICAgQ29uc29sZS53YXJuKGBsYXllckZpbHRlcmVkSXRlbXMgbGF5ZXIgZG9lc250IGV4aXN0c2ApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAobGF5ZXIuZmlsdGVyZWRJdGVtQ291bnQ/LltkZWNrZ2xMYXllcklkXSA9PT0gY291bnQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsYXllci5maWx0ZXJlZEl0ZW1Db3VudCA9IHtcbiAgICAuLi5sYXllci5maWx0ZXJlZEl0ZW1Db3VudCxcbiAgICBbZGVja2dsTGF5ZXJJZF06IGNvdW50XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN3YXBfKGxheWVyKShzdGF0ZS5sYXllcnMpXG4gIH07XG59XG5cbi8qKlxuICogVXBkYXRlIFdNUyBmZWF0dXJlIGluZm8gYW5kIHBpbiB0b29sdGlwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3bXNGZWF0dXJlSW5mb1VwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLldNU0ZlYXR1cmVJbmZvQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2xheWVyLCBmZWF0dXJlSW5mbywgY29vcmRpbmF0ZX0gPSBhY3Rpb247XG4gIGlmICghbGF5ZXIpIHtcbiAgICBjb25zb2xlLndhcm4oYFdNUyBmZWF0dXJlIGluZm8gbGF5ZXIgZG9lc24ndCBleGlzdGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIENyZWF0ZSBhIGNsaWNrZWQgb2JqZWN0IHNpbWlsYXIgdG8gbGF5ZXJDbGlja1VwZGF0ZXIgdG8gcGluIHRoZSB0b29sdGlwXG4gIGNvbnN0IGNsaWNrZWQgPSBmZWF0dXJlSW5mb1xuICAgID8ge1xuICAgICAgICBwaWNrZWQ6IHRydWUsXG4gICAgICAgIG9iamVjdDoge1xuICAgICAgICAgIHdtc0ZlYXR1cmVJbmZvOiBmZWF0dXJlSW5mb1xuICAgICAgICB9LFxuICAgICAgICBjb29yZGluYXRlOiBjb29yZGluYXRlIHx8IFswLCAwXSxcbiAgICAgICAgbGF5ZXI6IHtcbiAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgaWR4OiBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gbGF5ZXIuaWQpLFxuICAgICAgICAgICAgaWQ6IGxheWVyLmlkXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgOiBudWxsO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2xpY2tlZFxuICB9O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LXN0YXRlbWVudHNcbmV4cG9ydCBmdW5jdGlvbiBzeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZUFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtpZHg6IGZpbHRlcklkeCwgZW5hYmxlID0gZmFsc2V9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGxldCBuZXdGaWx0ZXIgPSBmaWx0ZXI7XG5cbiAgLy8gaWYgd2UgZW5hYmxlIHN5bmMgd2UgYXJlIGdvaW5nIHRvIG1lcmdlIGZpbHRlciBhbmQgYW5pbWF0aW9uQ29uZmlnIGRvbWFpbnMgYW5kIHN0b3JlIGludG8gZmlsdGVyLmRvbWFpblxuICBpZiAoZW5hYmxlKSB7XG4gICAgY29uc3QgYW5pbWF0YWJsZUxheWVycyA9IGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKG5ld1N0YXRlLmxheWVycyk7XG4gICAgLy8gaWYgbm8gYW5pbWF0YWJsZUxheWVycyBhcmUgcHJlc2VudCB3ZSBzaW1wbHkgcmV0dXJuXG4gICAgaWYgKCFhbmltYXRhYmxlTGF5ZXJzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG5ld1N0YXRlO1xuICAgIH1cblxuICAgIGNvbnN0IGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMgPSBnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzKGFuaW1hdGFibGVMYXllcnMpO1xuICAgIGNvbnN0IGhhc0ludGVydmFsQmFzZWRBbmltYXRpb25MYXllciA9IEJvb2xlYW4oaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycy5sZW5ndGgpO1xuXG4gICAgY29uc3QgbmV3RmlsdGVyRG9tYWluID0gbWVyZ2VUaW1lRG9tYWlucyhbZmlsdGVyLmRvbWFpbiwgbmV3U3RhdGUuYW5pbWF0aW9uQ29uZmlnLmRvbWFpbl0pO1xuXG4gICAgLy8gd2Ugb25seSB1cGRhdGUgYW5pbWF0aW9uV2luZG93IGlmIHdlIGhhdmUgaW50ZXJ2YWwgYmFzZWQgYW5pbWF0aW9uIGxheWVycyB3aXRoIGRlZmluZWQgaW50ZXJ2YWxzIGFuZCB0aGUgY3VycmVudCBmaWx0ZXIgYW5pbWF0aW9uIHdpbmRvdyBpcyBub3QgaW50ZXJ2YWxcbiAgICBpZiAoaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyKSB7XG4gICAgICBpZiAoZmlsdGVyLmFuaW1hdGlvbldpbmRvdyAhPT0gQU5JTUFUSU9OX1dJTkRPVy5pbnRlcnZhbCkge1xuICAgICAgICBuZXdTdGF0ZSA9IHNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgICAgICBpZDogZmlsdGVyLmlkLFxuICAgICAgICAgIGFuaW1hdGlvbldpbmRvdzogQU5JTUFUSU9OX1dJTkRPVy5pbnRlcnZhbFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgbmV3RmlsdGVyID0gbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICAgICAgLy8gYWRqdXN0IHRpbWUgZmlsdGVyIGludGVydmFsXG4gICAgICBuZXdGaWx0ZXIgPSBhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwobmV3U3RhdGUsIG5ld0ZpbHRlcik7XG5cbiAgICAgIC8vIHJlcGxhY2UgZmlsdGVyIGluIHN0YXRlIHdpdGggbmV3RmlsdGVyXG4gICAgICBuZXdTdGF0ZSA9IHtcbiAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShuZXdTdGF0ZS5maWx0ZXJzKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgLy8gYWRqdXN0IHZhbHVlIGJhc2VkIG9uIG5ldyBkb21haW5cbiAgICBjb25zdCBuZXdGaWx0ZXJWYWx1ZSA9IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4oXG4gICAgICBuZXdGaWx0ZXIuYW5pbWF0aW9uV2luZG93ID09PSBBTklNQVRJT05fV0lORE9XLmludGVydmFsXG4gICAgICAgID8gW25ld0ZpbHRlckRvbWFpblswXSwgbmV3RmlsdGVyRG9tYWluWzBdXVxuICAgICAgICA6IG5ld0ZpbHRlckRvbWFpbixcbiAgICAgIHsuLi5uZXdGaWx0ZXIsIGRvbWFpbjogbmV3RmlsdGVyRG9tYWlufVxuICAgICk7XG5cbiAgICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkeDogZmlsdGVySWR4LFxuICAgICAgcHJvcDogJ3ZhbHVlJyxcbiAgICAgIHZhbHVlOiBuZXdGaWx0ZXJWYWx1ZVxuICAgIH0pO1xuXG4gICAgbmV3RmlsdGVyID0ge1xuICAgICAgLi4uKG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXIpLFxuICAgICAgc3luY2VkV2l0aExheWVyVGltZWxpbmU6IHRydWVcbiAgICB9O1xuXG4gICAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gICAgfTtcblxuICAgIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkOiBuZXdGaWx0ZXIuaWQsXG4gICAgICBtb2RlOiBnZXRTeW5jQW5pbWF0aW9uTW9kZShuZXdGaWx0ZXIpXG4gICAgfSk7XG5cbiAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgLy8gc2V0IHRoZSBhbmltYXRpb24gY29uZmlnIHZhbHVlIHRvIG1hdGNoIGZpbHRlciB2YWx1ZVxuICAgIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICB2YWx1ZTogbmV3RmlsdGVyLnZhbHVlW25ld0ZpbHRlci5zeW5jVGltZWxpbmVNb2RlXVxuICAgIH0pO1xuICB9XG5cbiAgLy8gc2V0IGRvbWFpbiBhbmQgc3RlcFxuICBuZXdGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIHN5bmNlZFdpdGhMYXllclRpbWVsaW5lOiBmYWxzZVxuICB9O1xuXG4gIC8vIHJlcGxhY2UgZmlsdGVyIGluIHN0YXRlIHdpdGggbmV3RmlsdGVyXG4gIG5ld1N0YXRlID0ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShuZXdTdGF0ZS5maWx0ZXJzKVxuICB9O1xuXG4gIC8vIHJlc2V0IHN5bmMgdGltZWxpbmUgbW9kZVxuICBuZXdTdGF0ZSA9IHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICBtb2RlOiBTWU5DX1RJTUVMSU5FX01PREVTLmVuZFxuICB9KTtcblxuICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gIC8vIHJlc2V0IGZpbHRlciB2YWx1ZVxuICBjb25zdCBuZXdGaWx0ZXJWYWx1ZSA9IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4obmV3RmlsdGVyLmRvbWFpbiwgbmV3RmlsdGVyKTtcblxuICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGZpbHRlcklkeCxcbiAgICBwcm9wOiAndmFsdWUnLFxuICAgIHZhbHVlOiBuZXdGaWx0ZXJWYWx1ZVxuICB9KTtcblxuICBuZXdTdGF0ZSA9IHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICBtb2RlOiBnZXRTeW5jQW5pbWF0aW9uTW9kZShuZXdGaWx0ZXIpXG4gIH0pO1xuXG4gIC8vIHJlc2V0IGFuaW1hdGlvbiBjb25maWcgY3VycmVudCB0aW1lIHRvXG4gIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgdmFsdWU6IG5ld1N0YXRlLmFuaW1hdGlvbkNvbmZpZy5kb21haW4/LlswXSA/PyBudWxsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLnNldFRpbWVGaWx0ZXJTeW5jVGltZWxpbmVNb2RlQWN0aW9uXG4pIHtcbiAgY29uc3Qge2lkOiBmaWx0ZXJJZCwgbW9kZTogc3luY1RpbWVsaW5lTW9kZX0gPSBhY3Rpb247XG5cbiAgY29uc3QgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmIChmaWx0ZXJJZHggPT09IC0xKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICBpZiAoIXZhbGlkYXRlU3luY0FuaW1hdGlvbk1vZGUoZmlsdGVyLCBzeW5jVGltZWxpbmVNb2RlKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgc3luY1RpbWVsaW5lTW9kZVxuICB9O1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShzdGF0ZS5maWx0ZXJzKVxuICB9O1xuXG4gIHJldHVybiBhZGp1c3RBbmltYXRpb25Db25maWdXaXRoRmlsdGVyKG5ld1N0YXRlLCBmaWx0ZXJJZHgpO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBzdGF0ZSBvZiB0aGUgbG9hZGluZyBpbmRpY2F0b3IuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIHZpc1N0YXRlXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgUGF5bG9hZCB3aXRoIGNoYW5nZSBvZiBudW1iZXIgb2YgYWN0aXZlIGxvYWRpbmcgYWN0aW9ucy5cbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge3BheWxvYWQ6IHtjaGFuZ2V9fToge3BheWxvYWQ6IFNldExvYWRpbmdJbmRpY2F0b3JQYXlsb2FkfVxuKTogVmlzU3RhdGUgPT4ge1xuICBsZXQge2xvYWRpbmdJbmRpY2F0b3JWYWx1ZX0gPSBzdGF0ZTtcbiAgaWYgKCFsb2FkaW5nSW5kaWNhdG9yVmFsdWUpIHtcbiAgICBsb2FkaW5nSW5kaWNhdG9yVmFsdWUgPSAwO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsb2FkaW5nSW5kaWNhdG9yVmFsdWU6IE1hdGgubWF4KGxvYWRpbmdJbmRpY2F0b3JWYWx1ZSArIGNoYW5nZSwgMClcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgZmlsdGVySWR4OiBudW1iZXIpOiBTIHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdO1xuICBpZiAoKGZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lKSB7XG4gICAgY29uc3QgdGltZWxpbmVWYWx1ZSA9IGdldFRpbWVsaW5lVmFsdWVGcm9tRmlsdGVyKGZpbHRlcik7XG4gICAgY29uc3QgdmFsdWUgPSBzdGF0ZS5hbmltYXRpb25Db25maWcudGltZVN0ZXBzXG4gICAgICA/IHNuYXBUb01hcmtzKHRpbWVsaW5lVmFsdWUsIHN0YXRlLmFuaW1hdGlvbkNvbmZpZy50aW1lU3RlcHMpXG4gICAgICA6IHRpbWVsaW5lVmFsdWU7XG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIoc3RhdGUsIHt2YWx1ZX0pO1xuICB9XG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIoZmlsdGVyKSB7XG4gIHJldHVybiBmaWx0ZXIudmFsdWVbZmlsdGVyLnN5bmNUaW1lbGluZU1vZGVdO1xufVxuXG5mdW5jdGlvbiBnZXRTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXI6IFRpbWVSYW5nZUZpbHRlcikge1xuICBpZiAoZmlsdGVyLmFuaW1hdGlvbldpbmRvdyA9PT0gQU5JTUFUSU9OX1dJTkRPVy5mcmVlKSB7XG4gICAgcmV0dXJuIGZpbHRlci5zeW5jVGltZWxpbmVNb2RlID8/IFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kO1xuICB9XG5cbiAgcmV0dXJuIFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN5bmNBbmltYXRpb25Nb2RlKGZpbHRlcjogVGltZVJhbmdlRmlsdGVyLCBuZXdNb2RlOiBudW1iZXIpIHtcbiAgcmV0dXJuICEoXG4gICAgZmlsdGVyLmFuaW1hdGlvbldpbmRvdyAhPT0gQU5JTUFUSU9OX1dJTkRPVy5mcmVlICYmIG5ld01vZGUgPT09IFNZTkNfVElNRUxJTkVfTU9ERVMuc3RhcnRcbiAgKTtcbn1cblxuZnVuY3Rpb24gYWRqdXN0VGltZUZpbHRlckludGVydmFsKHN0YXRlLCBmaWx0ZXIpIHtcbiAgY29uc3QgaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyA9IGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMoc3RhdGUubGF5ZXJzKTtcblxuICBsZXQgaW50ZXJ2YWw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBpZiAoaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycy5sZW5ndGggPiAwKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGludGVydmFsSW5kZXggPSBpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLnJlZHVjZSgoY3VycmVudEluZGV4LCBsKSA9PiB7XG4gICAgICBpZiAobC5tZXRhLnRhcmdldFRpbWVJbnRlcnZhbCkge1xuICAgICAgICBjb25zdCBuZXdJbmRleCA9IFRJTUVfSU5URVJWQUxTX09SREVSRUQuZmluZEluZGV4KGkgPT4gaSA9PT0gbC5tZXRhLnRhcmdldFRpbWVJbnRlcnZhbCk7XG4gICAgICAgIHJldHVybiBuZXdJbmRleCA+IC0xICYmIG5ld0luZGV4IDwgY3VycmVudEluZGV4ID8gbmV3SW5kZXggOiBjdXJyZW50SW5kZXg7XG4gICAgICB9XG4gICAgfSwgVElNRV9JTlRFUlZBTFNfT1JERVJFRC5sZW5ndGggLSAxKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgaGV4VGlsZUludGVydmFsID0gVElNRV9JTlRFUlZBTFNfT1JERVJFRFtpbnRlcnZhbEluZGV4XTtcbiAgICBpbnRlcnZhbCA9IExheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWxbaGV4VGlsZUludGVydmFsXTtcbiAgfVxuXG4gIGlmICghaW50ZXJ2YWwpIHtcbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgLy8gYWRqdXN0IGZpbHRlclxuICBjb25zdCB0aW1lRm9ybWF0ID0gZ2V0RGVmYXVsdFRpbWVGb3JtYXQoaW50ZXJ2YWwpO1xuICBjb25zdCB1cGRhdGVkUGxvdFR5cGUgPSB7Li4uZmlsdGVyLnBsb3RUeXBlLCBpbnRlcnZhbCwgdGltZUZvcm1hdH07XG4gIGNvbnN0IG5ld0ZpbHRlciA9IHVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZShmaWx0ZXIsIHVwZGF0ZWRQbG90VHlwZSwgc3RhdGUuZGF0YXNldHMpO1xuICByZXR1cm4gYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyhzdGF0ZSwgbmV3RmlsdGVyKTtcbn1cblxuLy8gRmluZCBkYXRhSWQgZnJvbSBhIHNhdmVkIHZpc1N0YXRlIHByb3BlcnR5OlxuLy8gbGF5ZXJzLCBmaWx0ZXJzLCBpbnRlcmFjdGlvbnMsIGxheWVyQmxlbmRpbmcsIG92ZXJsYXlCbGVuZGluZywgc3BsaXRNYXBzLCBhbmltYXRpb25Db25maWcsIGVkaXRvclxuLy8gcmVwbGFjZSBpdCB3aXRoIGFub3RoZXIgZGF0YUlkXG5mdW5jdGlvbiBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHModmFsdWU6IGFueSwgZGF0YUlkOiBzdHJpbmcsIGRhdGFJZFRvUmVwbGFjZTogc3RyaW5nKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIGZvciBsYXllcnMsIGZpbHRlcnMsIGNhbGwgZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIG9uIGVhY2ggaXRlbSBpbiBhcnJheVxuICAgIGNvbnN0IHJlcGxhY2VkID0gdmFsdWVcbiAgICAgIC5tYXAodiA9PiBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHModiwgZGF0YUlkLCBkYXRhSWRUb1JlcGxhY2UpKVxuICAgICAgLmZpbHRlcihkID0+IGQpO1xuICAgIHJldHVybiByZXBsYWNlZC5sZW5ndGggPyByZXBsYWNlZCA6IG51bGw7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZS5kYXRhSWQgPT09ICdzdHJpbmcnICYmIHZhbHVlLmRhdGFJZCA9PT0gZGF0YUlkKSB7XG4gICAgLy8gb3RoZXJzXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgZGF0YUlkOiBkYXRhSWRUb1JlcGxhY2VcbiAgICB9O1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUuZGF0YUlkKSAmJiB2YWx1ZS5kYXRhSWQuaW5jbHVkZXMoZGF0YUlkKSkge1xuICAgIC8vIGZpbHRlclxuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIGRhdGFJZDogdmFsdWUuZGF0YUlkLm1hcChkID0+IChkID09PSBkYXRhSWQgPyBkYXRhSWRUb1JlcGxhY2UgOiBkKSlcbiAgICB9O1xuICB9IGVsc2UgaWYgKHZhbHVlLmNvbmZpZz8uZGF0YUlkICYmIHZhbHVlLmNvbmZpZz8uZGF0YUlkID09PSBkYXRhSWQpIHtcbiAgICAvLyBsYXllclxuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICAuLi52YWx1ZS5jb25maWcsXG4gICAgICAgIGRhdGFJZDogZGF0YUlkVG9SZXBsYWNlXG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBkYXRhSWQpKSB7XG4gICAgLy8gZm9yIHZhbHVlIHNhdmVkIGFzIHtbZGF0YUlkXTogey4uLn19XG4gICAgcmV0dXJuIHtbZGF0YUlkVG9SZXBsYWNlXTogdmFsdWVbZGF0YUlkXX07XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLy8gRmluZCBkYXRhc2V0SWRzIGRlcml2ZWQgYSBzYXZlZCB2aXNTdGF0ZSBQcm9wZXJ0eTtcbmZ1bmN0aW9uIGZpbmRDaGlsZERhdGFzZXRJZHModmFsdWUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gZm9yIGxheWVycywgZmlsdGVycywgY2FsbCBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMgb24gZWFjaCBpdGVtIGluIGFycmF5XG4gICAgY29uc3QgY2hpbGREYXRhSWRzID0gdmFsdWUubWFwKGZpbmRDaGlsZERhdGFzZXRJZHMpLmZpbHRlcihkID0+IGQpO1xuICAgIHJldHVybiBjaGlsZERhdGFJZHMubGVuZ3RoID8gY2hpbGREYXRhSWRzIDogbnVsbDtcbiAgfVxuXG4gIC8vIGNoaWxkIGRhdGEgaWQgdXN1YWxseSBzdG9yZXMgaW4gdGhlIGRlcml2ZWQgZGF0YXNldCBpbmZvXG4gIHJldHVybiB2YWx1ZT8ubmV3RGF0YXNldD8uaW5mby5pZCB8fCBudWxsO1xufVxuXG4vLyBtb3ZlZCB1bm1lcmdlZCBsYXllcnMsIGZpbHRlcnMsIGludGVyYWN0aW9uc1xuZnVuY3Rpb24gbW92ZVZhbHVlVG9CZU1lcmdlZChzdGF0ZSwgcHJvcFZhbHVlcywge3Byb3AsIHRvTWVyZ2VQcm9wLCBzYXZlVW5tZXJnZWR9KSB7XG4gIC8vIHJlbW92ZSBwcm9wIHZhbHVlIGZyb20gc3RhdGVcbiAgLy8gVE9ETzogc2hvdWxkIHdlIGFkZCByZW1vdmUgdXBkYXRlciB0byBtZXJnZXIgYXMgd2VsbD9cbiAgaWYgKCFwcm9wVmFsdWVzKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHN0YXRlUmVtb3ZlZCA9XG4gICAgcHJvcCA9PT0gJ2xheWVycydcbiAgICAgID8gcHJvcFZhbHVlcy5yZWR1Y2UoKGFjY3UsIHByb3BWYWx1ZSkgPT4gcmVtb3ZlTGF5ZXJVcGRhdGVyKGFjY3UsIHtpZDogcHJvcFZhbHVlLmlkfSksIHN0YXRlKVxuICAgICAgOiBBcnJheS5pc0FycmF5KHN0YXRlW3Byb3BdKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgW3Byb3BdOiBzdGF0ZVtwcm9wXS5maWx0ZXIocCA9PiAhcHJvcFZhbHVlcy5maW5kKHByb3BWYWx1ZSA9PiBwLmlkID09PSBwcm9wVmFsdWUuaWQpKVxuICAgICAgICB9XG4gICAgICA6IC8vIGlmIG5vdCBhcnJheSwgd2Ugd29uJ3QgcmVtb3ZlIGl0LCByZW1vdmUgZGF0YXNldCBzaG91bGQgaGFuZGxlIGl0XG4gICAgICAgIHN0YXRlO1xuXG4gIC8vIG1vdmUgdG8gc3RhdGVUb0JlTWVyZ2VkXG4gIGNvbnN0IHRvQmVNZXJnZWQgPSB7XG4gICAgW3RvTWVyZ2VQcm9wXTogc2F2ZVVubWVyZ2VkXG4gICAgICA/IC8vIGNhbGwgbWVyZ2Ugc2F2ZVVubWVyZ2VkIG1ldGhvZFxuICAgICAgICBzYXZlVW5tZXJnZWQoc3RhdGVSZW1vdmVkLCBwcm9wVmFsdWVzKVxuICAgICAgOiAvLyBpZiB0b01lcmdlUHJvcCBpcyBhcmFheSwgYXBwZW5kIHRvIGl0XG4gICAgICBBcnJheS5pc0FycmF5KHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0pXG4gICAgICA/IFsuLi5zdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdLCAuLi5wcm9wVmFsdWVzXVxuICAgICAgOiAvLyBzYXZlIHByb3BWYWx1ZXMgdG8gdG9NZXJnZVxuICAgICAgaXNPYmplY3Qoc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSlcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0sXG4gICAgICAgICAgLi4ucHJvcFZhbHVlc1xuICAgICAgICB9XG4gICAgICA6IHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlUmVtb3ZlZCxcbiAgICAuLi50b0JlTWVyZ2VkXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VEYXRhc2V0QW5kRGVwczxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFJZFRvVXNlOiBzdHJpbmdcbik6IFQge1xuICByZXR1cm4gY29tcG9zZV88VD4oW1xuICAgIGFwcGx5XyhyZXBsYWNlRGF0YXNldERlcHNJblN0YXRlLCB7ZGF0YUlkLCBkYXRhSWRUb1VzZX0pLFxuICAgIGFwcGx5XyhyZW1vdmVEYXRhc2V0VXBkYXRlciwge2RhdGFJZH0pXG4gIF0pKHN0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVTdGF0ZUZvckRhdGFzZXRSZXBsYWNlPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YUlkVG9Vc2U6IHN0cmluZ1xuKTogVCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKHN0YXRlLCBzdGF0ZS5zY2hlbWEpO1xuICBjb25zdCBuZXh0U3RhdGUgPSByZXBsYWNlRGF0YXNldEFuZERlcHMoc3RhdGUsIGRhdGFJZCwgZGF0YUlkVG9Vc2UpO1xuICAvLyBtYWtlIGEgY29weSBvZiBsYXllck9yZGVyLCBiZWNhdXNlIGxheWVyIGlkIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGl0IGJ5IGNhbGxpbmcgcmVtb3ZlTGF5ZXJVcGRhdGVyXG4gIGNvbnN0IHByZXNlcnZlTGF5ZXJPcmRlciA9IFsuLi5zdGF0ZS5sYXllck9yZGVyXTtcblxuICAvLyBwcmVzZXJ2ZSBkYXRhc2V0IG9yZGVyXG4gIG5leHRTdGF0ZS5wcmVzZXJ2ZURhdGFzZXRPcmRlciA9IE9iamVjdC5rZXlzKHN0YXRlLmRhdGFzZXRzKS5tYXAoZCA9PlxuICAgIGQgPT09IGRhdGFJZCA/IGRhdGFJZFRvVXNlIDogZFxuICApO1xuXG4gIC8vIHByZXNlcnZlTGF5ZXJPcmRlclxuICBpZiAobmV4dFN0YXRlLmxheWVyVG9CZU1lcmdlZD8ubGVuZ3RoKSB7XG4gICAgLy8gY29weSBzcGxpdCBtYXBzIHRvIGJlIG1lcmdlZCwgYmVjYXVzZSBpdCB3aWxsIGJlIHJlc2V0IGluIHJlbW92ZSBsYXllclxuICAgIG5leHRTdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkID0gc2VyaWFsaXplZFN0YXRlPy5zcGxpdE1hcHMgPz8gW107XG4gICAgbmV4dFN0YXRlLmxheWVyT3JkZXIgPSBbLi4ucHJlc2VydmVMYXllck9yZGVyXTtcbiAgfVxuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlRGF0YXNldERlcHNJblN0YXRlPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICB7ZGF0YUlkLCBkYXRhSWRUb1VzZX06IHtkYXRhSWQ6IHN0cmluZzsgZGF0YUlkVG9Vc2U6IHN0cmluZ31cbik6IFQge1xuICBjb25zdCBzZXJpYWxpemVkU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZShzdGF0ZSwgc3RhdGUuc2NoZW1hKTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSBzdGF0ZS5tZXJnZXJzLnJlZHVjZShcbiAgICAoXG4gICAgICBhY2N1U3RhdGUsXG4gICAgICB7cHJvcCwgdG9NZXJnZVByb3AsIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzLCBnZXRDaGlsZERhdGFzZXRJZHMsIHNhdmVVbm1lcmdlZCwgcHJlc2VydmVPcmRlcn1cbiAgICApID0+IHtcbiAgICAgIC8vIGdldCBkYXRhc2V0IGlkcyB0aGF0IGFyZSBkZXBlbmRzIG9uIHRoaXMgZGF0YXNldFxuICAgICAgY29uc3QgcHJvcHMgPSB0b0FycmF5KHByb3ApO1xuICAgICAgY29uc3QgdG9NZXJnZVByb3BzID0gdG9BcnJheSh0b01lcmdlUHJvcCk7XG4gICAgICBjb25zdCBzYXZlZFByb3BzID0gc2VyaWFsaXplZFN0YXRlID8gcHJvcHMubWFwKHAgPT4gc2VyaWFsaXplZFN0YXRlW3BdKSA6IFtdO1xuXG4gICAgICBsZXQgcmVwbGFjZWRTdGF0ZSA9IGFjY3VTdGF0ZTtcbiAgICAgIHNhdmVkUHJvcHMuZm9yRWFjaCgocHJvcFZhbHVlLCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lcmdlck9wdGlvbnMgPSB7XG4gICAgICAgICAgcHJvcDogcHJvcHNbaV0sXG4gICAgICAgICAgdG9NZXJnZVByb3A6IHRvTWVyZ2VQcm9wc1tpXSxcbiAgICAgICAgICBnZXRDaGlsZERhdGFzZXRJZHMsXG4gICAgICAgICAgc2F2ZVVubWVyZ2VkXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVwbGFjZWRJdGVtID1cbiAgICAgICAgICByZXBsYWNlUGFyZW50RGF0YXNldElkcz8uKHByb3BWYWx1ZSwgZGF0YUlkLCBkYXRhSWRUb1VzZSkgfHxcbiAgICAgICAgICBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMocHJvcFZhbHVlLCBkYXRhSWQsIGRhdGFJZFRvVXNlKTtcbiAgICAgICAgcmVwbGFjZWRTdGF0ZSA9IHJlcGxhY2VkSXRlbVxuICAgICAgICAgID8gcmVwbGFjZVByb3BWYWx1ZUluU3RhdGUocmVwbGFjZWRTdGF0ZSwgcmVwbGFjZWRJdGVtLCBtZXJnZXJPcHRpb25zKVxuICAgICAgICAgIDogcmVwbGFjZWRTdGF0ZTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgbWVyZ2VyT3B0aW9ucy50b01lcmdlUHJvcCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgcmVwbGFjZWRTdGF0ZVttZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wXT8ubGVuZ3RoICYmXG4gICAgICAgICAgcHJlc2VydmVPcmRlclxuICAgICAgICApIHtcbiAgICAgICAgICByZXBsYWNlZFN0YXRlW3ByZXNlcnZlT3JkZXJdID0gcHJvcFZhbHVlLm1hcChpdGVtID0+IGl0ZW0uaWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHJlcGxhY2VkU3RhdGU7XG4gICAgfSxcbiAgICBzdGF0ZVxuICApO1xuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VQcm9wVmFsdWVJblN0YXRlKFxuICBzdGF0ZSxcbiAgcmVwbGFjZWRJdGVtLFxuICB7cHJvcCwgdG9NZXJnZVByb3AsIGdldENoaWxkRGF0YXNldElkcywgc2F2ZVVubWVyZ2VkfVxuKSB7XG4gIC8vIHByb3AgaXMgZGVwZW5kcyBvbiB0aGUgZGF0YXNldCB0byBiZSByZXBsYWNlZFxuICAvLyByZW1vdmUgcHJvcCBmcm9tIHN0YXRlLCBhbmQgbW92ZSBpdCB0byB0b0JlTWVyZ2VkXG4gIGxldCBuZXh0U3RhdGUgPSBtb3ZlVmFsdWVUb0JlTWVyZ2VkKHN0YXRlLCByZXBsYWNlZEl0ZW0sIHtwcm9wLCB0b01lcmdlUHJvcCwgc2F2ZVVubWVyZ2VkfSk7XG4gIGNvbnN0IGNoaWxkRGF0YUlkcyA9IGdldENoaWxkRGF0YXNldElkcz8uKHJlcGxhY2VkSXRlbSkgfHwgZmluZENoaWxkRGF0YXNldElkcyhyZXBsYWNlZEl0ZW0pO1xuXG4gIGlmIChjaGlsZERhdGFJZHMpIHtcbiAgICBuZXh0U3RhdGUgPSB0b0FycmF5KGNoaWxkRGF0YUlkcykucmVkdWNlKChhY2N1LCBjaGlsZERhdGFJZCkgPT4ge1xuICAgICAgLy8gc2hvdWxkbid0IG5lZWQgdG8gY2hhbmdlIGNoaWxkIGRhdGFzZXQgaWQsXG4gICAgICAvLyBidXQgc3RpbGwgbmVlZCB0byBtb3ZlIG91dCBvZiBzdGF0ZSBhbmQgbWVyZ2UgYmFjayBpblxuICAgICAgcmV0dXJuIHJlcGxhY2VEYXRhc2V0QW5kRGVwcyhhY2N1LCBjaGlsZERhdGFJZCwgY2hpbGREYXRhSWQpO1xuICAgIH0sIG5leHRTdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLEtBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGdCQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxVQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxPQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxVQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxJQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTSxRQUFBLEdBQUFQLHNCQUFB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