@kepler.gl/reducers 3.3.0-alpha.3 → 3.3.0-alpha.4

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.
@@ -117,8 +117,7 @@ var _effects = require("@kepler.gl/effects");
117
117
  var _dataUtils = require("./data-utils");
118
118
  var _excluded = ["dataId"],
119
119
  _excluded2 = ["info"];
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); }
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; }
120
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof3(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
122
121
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof3(i) ? i : i + ""; }
123
122
  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); }
124
123
  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; } } }; }
@@ -1716,8 +1715,8 @@ function removeLayerUpdater(state, _ref9) {
1716
1715
  * @memberof visStateUpdaters
1717
1716
  * @public
1718
1717
  */
1719
- var reorderLayerUpdater = exports.reorderLayerUpdater = function reorderLayerUpdater(state, _ref10) {
1720
- var order = _ref10.order;
1718
+ var reorderLayerUpdater = exports.reorderLayerUpdater = function reorderLayerUpdater(state, _ref0) {
1719
+ var order = _ref0.order;
1721
1720
  return _objectSpread(_objectSpread({}, state), {}, {
1722
1721
  layerOrder: order
1723
1722
  });
@@ -1970,8 +1969,8 @@ var swapLayerOrderEntriesUpdater = exports.swapLayerOrderEntriesUpdater = functi
1970
1969
  * @memberof visStateUpdaters
1971
1970
  * @public
1972
1971
  */
1973
- var duplicateLayerUpdater = exports.duplicateLayerUpdater = function duplicateLayerUpdater(state, _ref11) {
1974
- var id = _ref11.id;
1972
+ var duplicateLayerUpdater = exports.duplicateLayerUpdater = function duplicateLayerUpdater(state, _ref1) {
1973
+ var id = _ref1.id;
1975
1974
  var idx = Number.isFinite(id) ?
1976
1975
  // support older API, remove layer by idx
1977
1976
  Number(id) : state.layers.findIndex(function (l) {
@@ -2082,8 +2081,8 @@ var addEffectUpdater = exports.addEffectUpdater = function addEffectUpdater(stat
2082
2081
  * @memberof visStateUpdaters
2083
2082
  * @public
2084
2083
  */
2085
- var removeEffectUpdater = exports.removeEffectUpdater = function removeEffectUpdater(state, _ref12) {
2086
- var id = _ref12.id;
2084
+ var removeEffectUpdater = exports.removeEffectUpdater = function removeEffectUpdater(state, _ref10) {
2085
+ var id = _ref10.id;
2087
2086
  var idx = state.effects.findIndex(function (l) {
2088
2087
  return l.id === id;
2089
2088
  });
@@ -2108,8 +2107,8 @@ var removeEffectUpdater = exports.removeEffectUpdater = function removeEffectUpd
2108
2107
  * @memberof visStateUpdaters
2109
2108
  * @public
2110
2109
  */
2111
- var reorderEffectUpdater = exports.reorderEffectUpdater = function reorderEffectUpdater(state, _ref13) {
2112
- var order = _ref13.order;
2110
+ var reorderEffectUpdater = exports.reorderEffectUpdater = function reorderEffectUpdater(state, _ref11) {
2111
+ var order = _ref11.order;
2113
2112
  return _objectSpread(_objectSpread({}, state), {}, {
2114
2113
  effectOrder: (0, _utils.fixEffectOrder)(state.effects, (0, _toConsumableArray2["default"])(order))
2115
2114
  });
@@ -2120,9 +2119,9 @@ var reorderEffectUpdater = exports.reorderEffectUpdater = function reorderEffect
2120
2119
  * @memberof visStateUpdaters
2121
2120
  * @public
2122
2121
  */
2123
- var updateEffectUpdater = exports.updateEffectUpdater = function updateEffectUpdater(state, _ref14) {
2124
- var id = _ref14.id,
2125
- props = _ref14.props;
2122
+ var updateEffectUpdater = exports.updateEffectUpdater = function updateEffectUpdater(state, _ref12) {
2123
+ var id = _ref12.id,
2124
+ props = _ref12.props;
2126
2125
  var idx = state.effects.findIndex(function (l) {
2127
2126
  return l.id === id;
2128
2127
  });
@@ -2218,8 +2217,8 @@ var addAnnotationUpdater = exports.addAnnotationUpdater = function addAnnotation
2218
2217
  * @memberof visStateUpdaters
2219
2218
  * @public
2220
2219
  */
2221
- var removeAnnotationUpdater = exports.removeAnnotationUpdater = function removeAnnotationUpdater(state, _ref15) {
2222
- var id = _ref15.id;
2220
+ var removeAnnotationUpdater = exports.removeAnnotationUpdater = function removeAnnotationUpdater(state, _ref13) {
2221
+ var id = _ref13.id;
2223
2222
  return _objectSpread(_objectSpread({}, state), {}, {
2224
2223
  annotations: state.annotations.filter(function (a) {
2225
2224
  return a.id !== id;
@@ -2234,9 +2233,9 @@ var removeAnnotationUpdater = exports.removeAnnotationUpdater = function removeA
2234
2233
  * @memberof visStateUpdaters
2235
2234
  * @public
2236
2235
  */
2237
- var updateAnnotationUpdater = exports.updateAnnotationUpdater = function updateAnnotationUpdater(state, _ref16) {
2238
- var id = _ref16.id,
2239
- config = _ref16.config;
2236
+ var updateAnnotationUpdater = exports.updateAnnotationUpdater = function updateAnnotationUpdater(state, _ref14) {
2237
+ var id = _ref14.id,
2238
+ config = _ref14.config;
2240
2239
  var idx = state.annotations.findIndex(function (a) {
2241
2240
  return a.id === id;
2242
2241
  });
@@ -2263,8 +2262,8 @@ var updateAnnotationUpdater = exports.updateAnnotationUpdater = function updateA
2263
2262
  * @memberof visStateUpdaters
2264
2263
  * @public
2265
2264
  */
2266
- var duplicateAnnotationUpdater = exports.duplicateAnnotationUpdater = function duplicateAnnotationUpdater(state, _ref17) {
2267
- var id = _ref17.id;
2265
+ var duplicateAnnotationUpdater = exports.duplicateAnnotationUpdater = function duplicateAnnotationUpdater(state, _ref15) {
2266
+ var id = _ref15.id;
2268
2267
  var original = state.annotations.find(function (a) {
2269
2268
  return a.id === id;
2270
2269
  });
@@ -2288,9 +2287,9 @@ var duplicateAnnotationUpdater = exports.duplicateAnnotationUpdater = function d
2288
2287
  * @memberof visStateUpdaters
2289
2288
  * @public
2290
2289
  */
2291
- var setSelectedAnnotationUpdater = exports.setSelectedAnnotationUpdater = function setSelectedAnnotationUpdater(state, _ref18) {
2292
- var id = _ref18.id,
2293
- isEditingText = _ref18.isEditingText;
2290
+ var setSelectedAnnotationUpdater = exports.setSelectedAnnotationUpdater = function setSelectedAnnotationUpdater(state, _ref16) {
2291
+ var id = _ref16.id,
2292
+ isEditingText = _ref16.isEditingText;
2294
2293
  if (id === state.selectedAnnotationId && (isEditingText !== null && isEditingText !== void 0 ? isEditingText : false) === state.isEditingAnnotationText) {
2295
2294
  return state;
2296
2295
  }
@@ -2361,8 +2360,8 @@ function removeDatasetUpdater(state, action) {
2361
2360
  dataId: datasetKey
2362
2361
  });
2363
2362
  }
2364
- function removeDatasetFromInteractionConfig(state, _ref19) {
2365
- var dataId = _ref19.dataId;
2363
+ function removeDatasetFromInteractionConfig(state, _ref17) {
2364
+ var dataId = _ref17.dataId;
2366
2365
  var interactionConfig = state.interactionConfig;
2367
2366
  var _interactionConfig = interactionConfig,
2368
2367
  tooltip = _interactionConfig.tooltip;
@@ -2447,12 +2446,12 @@ var resetMapConfigUpdater = exports.resetMapConfigUpdater = function resetMapCon
2447
2446
  * @memberof visStateUpdaters
2448
2447
  * @public
2449
2448
  */
2450
- var receiveMapConfigUpdater = exports.receiveMapConfigUpdater = function receiveMapConfigUpdater(state, _ref20) {
2451
- var _ref20$payload = _ref20.payload,
2452
- _ref20$payload$config = _ref20$payload.config,
2453
- config = _ref20$payload$config === void 0 ? {} : _ref20$payload$config,
2454
- _ref20$payload$option = _ref20$payload.options,
2455
- options = _ref20$payload$option === void 0 ? {} : _ref20$payload$option;
2449
+ var receiveMapConfigUpdater = exports.receiveMapConfigUpdater = function receiveMapConfigUpdater(state, _ref18) {
2450
+ var _ref18$payload = _ref18.payload,
2451
+ _ref18$payload$config = _ref18$payload.config,
2452
+ config = _ref18$payload$config === void 0 ? {} : _ref18$payload$config,
2453
+ _ref18$payload$option = _ref18$payload.options,
2454
+ options = _ref18$payload$option === void 0 ? {} : _ref18$payload$option;
2456
2455
  if (!config.visState) {
2457
2456
  return state;
2458
2457
  }
@@ -2557,8 +2556,8 @@ var mapClickUpdater = exports.mapClickUpdater = function mapClickUpdater(state,
2557
2556
  * @memberof visStateUpdaters
2558
2557
  * @public
2559
2558
  */
2560
- var mouseMoveUpdater = exports.mouseMoveUpdater = function mouseMoveUpdater(state, _ref21) {
2561
- var evt = _ref21.evt;
2559
+ var mouseMoveUpdater = exports.mouseMoveUpdater = function mouseMoveUpdater(state, _ref19) {
2560
+ var evt = _ref19.evt;
2562
2561
  if (Object.values(state.interactionConfig).some(function (config) {
2563
2562
  return config.enabled;
2564
2563
  })) {
@@ -2592,9 +2591,9 @@ var toggleSplitMapUpdater = exports.toggleSplitMapUpdater = function toggleSplit
2592
2591
  * @memberof visStateUpdaters
2593
2592
  * @public
2594
2593
  */
2595
- var toggleLayerForMapUpdater = exports.toggleLayerForMapUpdater = function toggleLayerForMapUpdater(state, _ref22) {
2596
- var mapIndex = _ref22.mapIndex,
2597
- layerId = _ref22.layerId;
2594
+ var toggleLayerForMapUpdater = exports.toggleLayerForMapUpdater = function toggleLayerForMapUpdater(state, _ref20) {
2595
+ var mapIndex = _ref20.mapIndex,
2596
+ layerId = _ref20.layerId;
2598
2597
  var splitMaps = state.splitMaps;
2599
2598
  return _objectSpread(_objectSpread({}, state), {}, {
2600
2599
  splitMaps: splitMaps.map(function (sm, i) {
@@ -2630,10 +2629,10 @@ var updateVisDataUpdater = exports.updateVisDataUpdater = function updateVisData
2630
2629
  }
2631
2630
  var createDatasetTasks = [];
2632
2631
  var notificationTasks = [];
2633
- datasets.forEach(function (_ref23, datasetIndex) {
2634
- var _ref23$info = _ref23.info,
2635
- info = _ref23$info === void 0 ? {} : _ref23$info,
2636
- rest = (0, _objectWithoutProperties2["default"])(_ref23, _excluded2);
2632
+ datasets.forEach(function (_ref21, datasetIndex) {
2633
+ var _ref21$info = _ref21.info,
2634
+ info = _ref21$info === void 0 ? {} : _ref21$info,
2635
+ rest = (0, _objectWithoutProperties2["default"])(_ref21, _excluded2);
2637
2636
  var task = (0, _table.createNewDataEntry)(_objectSpread({
2638
2637
  info: info
2639
2638
  }, rest), state.datasets);
@@ -3078,14 +3077,14 @@ function parseProgress() {
3078
3077
  * @memberof visStateUpdaters
3079
3078
  * @public
3080
3079
  */
3081
- var nextFileBatchUpdater = exports.nextFileBatchUpdater = function nextFileBatchUpdater(state, _ref24) {
3080
+ var nextFileBatchUpdater = exports.nextFileBatchUpdater = function nextFileBatchUpdater(state, _ref22) {
3082
3081
  var _accumulated$data;
3083
- var _ref24$payload = _ref24.payload,
3084
- gen = _ref24$payload.gen,
3085
- fileName = _ref24$payload.fileName,
3086
- progress = _ref24$payload.progress,
3087
- accumulated = _ref24$payload.accumulated,
3088
- onFinish = _ref24$payload.onFinish;
3082
+ var _ref22$payload = _ref22.payload,
3083
+ gen = _ref22$payload.gen,
3084
+ fileName = _ref22$payload.fileName,
3085
+ progress = _ref22$payload.progress,
3086
+ accumulated = _ref22$payload.accumulated,
3087
+ onFinish = _ref22$payload.onFinish;
3089
3088
  var stateWithProgress = updateFileLoadingProgressUpdater(state, {
3090
3089
  fileName: fileName,
3091
3090
  progress: parseProgress(state.fileLoadingProgress[fileName], progress)
@@ -3097,9 +3096,9 @@ var nextFileBatchUpdater = exports.nextFileBatchUpdater = function nextFileBatch
3097
3096
  return (0, _actions.loadFilesSuccess)(result);
3098
3097
  }, function (err) {
3099
3098
  return (0, _actions.loadFilesErr)(fileName, err);
3100
- })] : []), [(0, _tasks2.UNWRAP_TASK)(gen.next()).bimap(function (_ref25) {
3101
- var value = _ref25.value,
3102
- done = _ref25.done;
3099
+ })] : []), [(0, _tasks2.UNWRAP_TASK)(gen.next()).bimap(function (_ref23) {
3100
+ var value = _ref23.value,
3101
+ done = _ref23.done;
3103
3102
  return done ? onFinish(accumulated) : (0, _actions.nextFileBatch)({
3104
3103
  gen: gen,
3105
3104
  fileName: fileName,
@@ -3117,9 +3116,9 @@ var nextFileBatchUpdater = exports.nextFileBatchUpdater = function nextFileBatch
3117
3116
  * @memberof visStateUpdaters
3118
3117
  * @public
3119
3118
  */
3120
- var loadFilesErrUpdater = exports.loadFilesErrUpdater = function loadFilesErrUpdater(state, _ref26) {
3121
- var error = _ref26.error,
3122
- fileName = _ref26.fileName;
3119
+ var loadFilesErrUpdater = exports.loadFilesErrUpdater = function loadFilesErrUpdater(state, _ref24) {
3120
+ var error = _ref24.error,
3121
+ fileName = _ref24.fileName;
3123
3122
  // update ui with error message
3124
3123
  _window.console.warn(error);
3125
3124
  if (!state.fileLoading) {
@@ -3147,8 +3146,8 @@ var loadFilesErrUpdater = exports.loadFilesErrUpdater = function loadFilesErrUpd
3147
3146
  * @memberof visStateUpdaters
3148
3147
  * @public
3149
3148
  */
3150
- var applyCPUFilterUpdater = exports.applyCPUFilterUpdater = function applyCPUFilterUpdater(state, _ref27) {
3151
- var dataId = _ref27.dataId;
3149
+ var applyCPUFilterUpdater = exports.applyCPUFilterUpdater = function applyCPUFilterUpdater(state, _ref25) {
3150
+ var dataId = _ref25.dataId;
3152
3151
  // apply cpuFilter
3153
3152
  var dataIds = (0, _commonUtils.toArray)(dataId);
3154
3153
  return dataIds.reduce(function (accu, id) {
@@ -3207,9 +3206,9 @@ function initialFileLoadingProgress(file, index) {
3207
3206
  error: null
3208
3207
  });
3209
3208
  }
3210
- function updateFileLoadingProgressUpdater(state, _ref29) {
3211
- var fileName = _ref29.fileName,
3212
- progress = _ref29.progress;
3209
+ function updateFileLoadingProgressUpdater(state, _ref27) {
3210
+ var fileName = _ref27.fileName,
3211
+ progress = _ref27.progress;
3213
3212
  // @ts-expect-error
3214
3213
  return (0, _composerHelpers.pick_)('fileLoadingProgress')((0, _composerHelpers.pick_)(fileName)((0, _composerHelpers.merge_)(progress)))(state);
3215
3214
  }
@@ -3301,8 +3300,8 @@ function updateAnimationDomain(state) {
3301
3300
  * Update the status of the editor
3302
3301
  * @memberof visStateUpdaters
3303
3302
  */
3304
- var setEditorModeUpdater = exports.setEditorModeUpdater = function setEditorModeUpdater(state, _ref30) {
3305
- var mode = _ref30.mode;
3303
+ var setEditorModeUpdater = exports.setEditorModeUpdater = function setEditorModeUpdater(state, _ref28) {
3304
+ var mode = _ref28.mode;
3306
3305
  return _objectSpread(_objectSpread({}, state), {}, {
3307
3306
  editor: _objectSpread(_objectSpread({}, state.editor), {}, {
3308
3307
  mode: mode,
@@ -3316,10 +3315,10 @@ var setEditorModeUpdater = exports.setEditorModeUpdater = function setEditorMode
3316
3315
  * Update editor features
3317
3316
  * @memberof visStateUpdaters
3318
3317
  */
3319
- function setFeaturesUpdater(state, _ref31) {
3318
+ function setFeaturesUpdater(state, _ref29) {
3320
3319
  var _lastFeature$properti, _lastFeature$properti2;
3321
- var _ref31$features = _ref31.features,
3322
- features = _ref31$features === void 0 ? [] : _ref31$features;
3320
+ var _ref29$features = _ref29.features,
3321
+ features = _ref29$features === void 0 ? [] : _ref29$features;
3323
3322
  var lastFeature = features.length && features[features.length - 1];
3324
3323
  var newState = _objectSpread(_objectSpread({}, state), {}, {
3325
3324
  editor: _objectSpread(_objectSpread({}, state.editor), {}, {
@@ -3367,9 +3366,9 @@ function setFeaturesUpdater(state, _ref31) {
3367
3366
  * Set the current selected feature
3368
3367
  * @memberof uiStateUpdaters
3369
3368
  */
3370
- var setSelectedFeatureUpdater = exports.setSelectedFeatureUpdater = function setSelectedFeatureUpdater(state, _ref32) {
3371
- var feature = _ref32.feature,
3372
- selectionContext = _ref32.selectionContext;
3369
+ var setSelectedFeatureUpdater = exports.setSelectedFeatureUpdater = function setSelectedFeatureUpdater(state, _ref30) {
3370
+ var feature = _ref30.feature,
3371
+ selectionContext = _ref30.selectionContext;
3373
3372
  // add bbox for polygon filter to speed up filtering
3374
3373
  var selectedFeature = feature;
3375
3374
  if (feature !== null && feature !== void 0 && feature.properties) {
@@ -3391,8 +3390,8 @@ var setSelectedFeatureUpdater = exports.setSelectedFeatureUpdater = function set
3391
3390
  * Delete existing feature from filters
3392
3391
  * @memberof visStateUpdaters
3393
3392
  */
3394
- function deleteFeatureUpdater(state, _ref33) {
3395
- var feature = _ref33.feature;
3393
+ function deleteFeatureUpdater(state, _ref31) {
3394
+ var feature = _ref31.feature;
3396
3395
  if (!feature) {
3397
3396
  return state;
3398
3397
  }
@@ -3523,10 +3522,10 @@ function setPolygonFilterAllLayersUpdater(state, payload) {
3523
3522
  * @memberof visStateUpdaters
3524
3523
  * @public
3525
3524
  */
3526
- function sortTableColumnUpdater(state, _ref34) {
3527
- var dataId = _ref34.dataId,
3528
- column = _ref34.column,
3529
- mode = _ref34.mode;
3525
+ function sortTableColumnUpdater(state, _ref32) {
3526
+ var dataId = _ref32.dataId,
3527
+ column = _ref32.column,
3528
+ mode = _ref32.mode;
3530
3529
  var dataset = state.datasets[dataId];
3531
3530
  if (!dataset) {
3532
3531
  return state;
@@ -3547,9 +3546,9 @@ function sortTableColumnUpdater(state, _ref34) {
3547
3546
  * @memberof visStateUpdaters
3548
3547
  * @public
3549
3548
  */
3550
- function pinTableColumnUpdater(state, _ref35) {
3551
- var dataId = _ref35.dataId,
3552
- column = _ref35.column;
3549
+ function pinTableColumnUpdater(state, _ref33) {
3550
+ var dataId = _ref33.dataId,
3551
+ column = _ref33.column;
3553
3552
  var dataset = state.datasets[dataId];
3554
3553
  if (!dataset) {
3555
3554
  return state;
@@ -3563,9 +3562,9 @@ function pinTableColumnUpdater(state, _ref35) {
3563
3562
  * @memberof visStateUpdaters
3564
3563
  * @public
3565
3564
  */
3566
- function copyTableColumnUpdater(state, _ref36) {
3567
- var dataId = _ref36.dataId,
3568
- column = _ref36.column;
3565
+ function copyTableColumnUpdater(state, _ref34) {
3566
+ var dataId = _ref34.dataId,
3567
+ column = _ref34.column;
3569
3568
  var dataset = state.datasets[dataId];
3570
3569
  if (!dataset) {
3571
3570
  return state;
@@ -3589,9 +3588,9 @@ function copyTableColumnUpdater(state, _ref36) {
3589
3588
  * @memberof visStateUpdaters
3590
3589
  * @public
3591
3590
  */
3592
- function setColumnDisplayFormatUpdater(state, _ref37) {
3593
- var dataId = _ref37.dataId,
3594
- formats = _ref37.formats;
3591
+ function setColumnDisplayFormatUpdater(state, _ref35) {
3592
+ var dataId = _ref35.dataId,
3593
+ formats = _ref35.formats;
3595
3594
  var dataset = state.datasets[dataId];
3596
3595
  if (!dataset) {
3597
3596
  return state;
@@ -3640,9 +3639,9 @@ action) {
3640
3639
  })
3641
3640
  });
3642
3641
  }
3643
- function setFilterAnimationTimeConfigUpdater(state, _ref38) {
3644
- var idx = _ref38.idx,
3645
- config = _ref38.config;
3642
+ function setFilterAnimationTimeConfigUpdater(state, _ref36) {
3643
+ var idx = _ref36.idx,
3644
+ config = _ref36.config;
3646
3645
  var oldFilter = state.filters[idx];
3647
3646
  if (!oldFilter) {
3648
3647
  _window.console.error("filters.".concat(idx, " is undefined"));
@@ -3672,8 +3671,8 @@ function checkTimeConfigArgs(config) {
3672
3671
  /**
3673
3672
  * Update editor
3674
3673
  */
3675
- function setLayerAnimationTimeConfigUpdater(state, _ref39) {
3676
- var config = _ref39.config;
3674
+ function setLayerAnimationTimeConfigUpdater(state, _ref37) {
3675
+ var config = _ref37.config;
3677
3676
  if (!config) {
3678
3677
  return state;
3679
3678
  }
@@ -3871,8 +3870,8 @@ function setTimeFilterTimelineModeUpdater(state, action) {
3871
3870
  * @returns nextState
3872
3871
  * @public
3873
3872
  */
3874
- var setLoadingIndicatorUpdater = exports.setLoadingIndicatorUpdater = function setLoadingIndicatorUpdater(state, _ref40) {
3875
- var change = _ref40.payload.change;
3873
+ var setLoadingIndicatorUpdater = exports.setLoadingIndicatorUpdater = function setLoadingIndicatorUpdater(state, _ref38) {
3874
+ var change = _ref38.payload.change;
3876
3875
  var loadingIndicatorValue = state.loadingIndicatorValue;
3877
3876
  if (!loadingIndicatorValue) {
3878
3877
  loadingIndicatorValue = 0;
@@ -3992,10 +3991,10 @@ function findChildDatasetIds(value) {
3992
3991
  }
3993
3992
 
3994
3993
  // moved unmerged layers, filters, interactions
3995
- function moveValueToBeMerged(state, propValues, _ref42) {
3996
- var prop = _ref42.prop,
3997
- toMergeProp = _ref42.toMergeProp,
3998
- saveUnmerged = _ref42.saveUnmerged;
3994
+ function moveValueToBeMerged(state, propValues, _ref40) {
3995
+ var prop = _ref40.prop,
3996
+ toMergeProp = _ref40.toMergeProp,
3997
+ saveUnmerged = _ref40.saveUnmerged;
3999
3998
  // remove prop value from state
4000
3999
  // TODO: should we add remove updater to merger as well?
4001
4000
  if (!propValues) {
@@ -4052,17 +4051,17 @@ function prepareStateForDatasetReplace(state, dataId, dataIdToUse) {
4052
4051
  }
4053
4052
  return nextState;
4054
4053
  }
4055
- function replaceDatasetDepsInState(state, _ref43) {
4056
- var dataId = _ref43.dataId,
4057
- dataIdToUse = _ref43.dataIdToUse;
4054
+ function replaceDatasetDepsInState(state, _ref41) {
4055
+ var dataId = _ref41.dataId,
4056
+ dataIdToUse = _ref41.dataIdToUse;
4058
4057
  var serializedState = (0, _visStateMerger.serializeVisState)(state, state.schema);
4059
- var nextState = state.mergers.reduce(function (accuState, _ref44) {
4060
- var prop = _ref44.prop,
4061
- toMergeProp = _ref44.toMergeProp,
4062
- replaceParentDatasetIds = _ref44.replaceParentDatasetIds,
4063
- getChildDatasetIds = _ref44.getChildDatasetIds,
4064
- saveUnmerged = _ref44.saveUnmerged,
4065
- preserveOrder = _ref44.preserveOrder;
4058
+ var nextState = state.mergers.reduce(function (accuState, _ref42) {
4059
+ var prop = _ref42.prop,
4060
+ toMergeProp = _ref42.toMergeProp,
4061
+ replaceParentDatasetIds = _ref42.replaceParentDatasetIds,
4062
+ getChildDatasetIds = _ref42.getChildDatasetIds,
4063
+ saveUnmerged = _ref42.saveUnmerged,
4064
+ preserveOrder = _ref42.preserveOrder;
4066
4065
  // get dataset ids that are depends on this dataset
4067
4066
  var props = (0, _commonUtils.toArray)(prop);
4068
4067
  var toMergeProps = (0, _commonUtils.toArray)(toMergeProp);
@@ -4090,11 +4089,11 @@ function replaceDatasetDepsInState(state, _ref43) {
4090
4089
  }, state);
4091
4090
  return nextState;
4092
4091
  }
4093
- function replacePropValueInState(state, replacedItem, _ref45) {
4094
- var prop = _ref45.prop,
4095
- toMergeProp = _ref45.toMergeProp,
4096
- getChildDatasetIds = _ref45.getChildDatasetIds,
4097
- saveUnmerged = _ref45.saveUnmerged;
4092
+ function replacePropValueInState(state, replacedItem, _ref43) {
4093
+ var prop = _ref43.prop,
4094
+ toMergeProp = _ref43.toMergeProp,
4095
+ getChildDatasetIds = _ref43.getChildDatasetIds,
4096
+ saveUnmerged = _ref43.saveUnmerged;
4098
4097
  // prop is depends on the dataset to be replaced
4099
4098
  // remove prop from state, and move it to toBeMerged
4100
4099
  var nextState = moveValueToBeMerged(state, replacedItem, {
@@ -4112,4 +4111,4 @@ function replacePropValueInState(state, replacedItem, _ref45) {
4112
4111
  }
4113
4112
  return nextState;
4114
4113
  }
4115
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYmJveCIsInJlcXVpcmUiLCJfY29weVRvQ2xpcGJvYXJkIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9kZWVwbWVyZ2UiLCJfd2luZG93IiwiX2Nsb25lRGVlcCIsIl9nZXQiLCJfaXNFcXVhbCIsIl9waWNrIiwiX3VuaXEiLCJfeG9yIiwiX3Rhc2tzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfdGFza3MyIiwiX2FjdGlvbnMiLCJfdXRpbHMiLCJfY29tbW9uVXRpbHMiLCJfY29uc3RhbnRzIiwiX2xheWVycyIsIl9jb21wb3NlckhlbHBlcnMiLCJfbWVyZ2VySGFuZGxlciIsIl92aXNTdGF0ZU1lcmdlciIsIl9zY2hlbWFzIiwiX3RhYmxlIiwiX2ludGVyYWN0aW9uVXRpbHMiLCJfbGF5ZXJVdGlscyIsIl9lZmZlY3RzIiwiX2RhdGFVdGlscyIsIl9leGNsdWRlZCIsIl9leGNsdWRlZDIiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YzIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiX3RvUHJvcGVydHlLZXkiLCJfdG9QcmltaXRpdmUiLCJTeW1ib2wiLCJ0b1ByaW1pdGl2ZSIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJsZW5ndGgiLCJfbiIsIkYiLCJzIiwiZG9uZSIsInZhbHVlIiwiZiIsIm8iLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRpc2FibGVTdGFja0NhcHR1cmluZyIsInZpc1N0YXRlVXBkYXRlcnMiLCJkZWZhdWx0SW50ZXJhY3Rpb25Db25maWciLCJleHBvcnRzIiwidG9vbHRpcCIsImlkIiwibGFiZWwiLCJlbmFibGVkIiwiY29uZmlnIiwiZmllbGRzVG9TaG93IiwiY29tcGFyZU1vZGUiLCJjb21wYXJlVHlwZSIsIkNPTVBBUkVfVFlQRVMiLCJBQlNPTFVURSIsImdlb2NvZGVyIiwicG9zaXRpb24iLCJsaW1pdFNlYXJjaCIsImJydXNoIiwic2l6ZSIsImNvb3JkaW5hdGUiLCJERUZBVUxUX0FOSU1BVElPTl9DT05GSUciLCJkb21haW4iLCJjdXJyZW50VGltZSIsInNwZWVkIiwiaXNBbmltYXRpbmciLCJ0aW1lU3RlcHMiLCJ0aW1lRm9ybWF0IiwidGltZXpvbmUiLCJkZWZhdWx0VGltZUZvcm1hdCIsImhpZGVDb250cm9sIiwiZHVyYXRpb24iLCJERUZBVUxUX0VESVRPUiIsIm1vZGUiLCJFRElUT1JfTU9ERVMiLCJEUkFXX1BPTFlHT04iLCJmZWF0dXJlcyIsInNlbGVjdGVkRmVhdHVyZSIsInZpc2libGUiLCJJTklUSUFMX1ZJU19TVEFURSIsIm1hcEluZm8iLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwibGF5ZXJzIiwibGF5ZXJEYXRhIiwibGF5ZXJUb0JlTWVyZ2VkIiwibGF5ZXJPcmRlciIsImxheWVyT3JkZXJUb0JlTWVyZ2VkIiwiZmlsdGVycyIsImZpbHRlclRvQmVNZXJnZWQiLCJkYXRhc2V0cyIsImVkaXRpbmdEYXRhc2V0IiwidW5kZWZpbmVkIiwiZWZmZWN0cyIsImVmZmVjdE9yZGVyIiwiYW5ub3RhdGlvbnMiLCJhbm5vdGF0aW9uc1RvQmVNZXJnZWQiLCJzZWxlY3RlZEFubm90YXRpb25JZCIsImlzRWRpdGluZ0Fubm90YXRpb25UZXh0IiwiaW50ZXJhY3Rpb25Db25maWciLCJpbnRlcmFjdGlvblRvQmVNZXJnZWQiLCJsYXllckJsZW5kaW5nIiwib3ZlcmxheUJsZW5kaW5nIiwiaG92ZXJJbmZvIiwiY2xpY2tlZCIsIm1vdXNlUG9zIiwibWF4RGVmYXVsdFRvb2x0aXBzIiwiTUFYX0RFRkFVTFRfVE9PTFRJUFMiLCJzcGxpdE1hcHMiLCJzcGxpdE1hcHNUb0JlTWVyZ2VkIiwiaXNNZXJnaW5nRGF0YXNldHMiLCJsYXllckNsYXNzZXMiLCJMYXllckNsYXNzZXMiLCJhbmltYXRpb25Db25maWciLCJlZGl0b3IiLCJmaWxlTG9hZGluZyIsImZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJsb2FkaW5nSW5kaWNhdG9yVmFsdWUiLCJsb2FkZXJzIiwibG9hZE9wdGlvbnMiLCJtZXJnZXJzIiwiVklTX1NUQVRFX01FUkdFUlMiLCJzY2hlbWEiLCJLZXBsZXJHTFNjaGVtYSIsIkFDVElPTl9UQVNLX0ZJVF9CT1VORFMiLCJUYXNrIiwiZnJvbUNhbGxiYWNrIiwiXyIsImNiIiwiQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTiIsInVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YSIsInN0YXRlIiwiX3JlZiIsImxheWVyIiwiaWR4IiwibWFwIiwibHlyIiwiZCIsInVwZGF0ZVN0YXRlT25MYXllclZpc2liaWxpdHlDaGFuZ2UiLCJuZXdTdGF0ZSIsImlzVmlzaWJsZSIsImFkZE5ld0xheWVyc1RvU3BsaXRNYXAiLCJyZW1vdmVMYXllckZyb21TcGxpdE1hcHMiLCJhbmltYXRpb24iLCJ1cGRhdGVBbmltYXRpb25Eb21haW4iLCJwaWNrQ2hhbmdlZFByb3BzIiwicHJldiIsImNoYW5nZWRQcm9wcyIsInBpY2tQcm9wc09mIiwib2JqIiwia2V5IiwicHJvdG90eXBlIiwiaXNFcXVhbCIsIlZJU1VBTF9DSEFOTkVMX1BST1BfVFlQRVMiLCJhcHBseUxheWVyQ29uZmlnVXBkYXRlciIsImFjdGlvbiIsIl9zZXJpYWxpemVMYXllciIsIm9sZExheWVySWQiLCJuZXdMYXllckNvbmZpZyIsImxheWVySW5kZXgiLCJuZXdQYXJzZWRMYXllciIsInBhcnNlTGF5ZXJDb25maWciLCJvbGRMYXllciIsImZpbmQiLCJsIiwiZGF0YXNldCIsImRhdGFJZCIsIm5ld0xheWVyIiwidmFsaWRhdGVMYXllcldpdGhEYXRhIiwibmV4dFN0YXRlIiwidHlwZSIsIm9sZExheWVySW5kZXgiLCJmaW5kSW5kZXgiLCJsYXllclR5cGVDaGFuZ2VVcGRhdGVyIiwibGF5ZXJUeXBlQ2hhbmdlIiwibmV3TGF5ZXJJZCIsImFwcGx5TGF5ZXJDb25maWciLCJzZXJpYWxpemVkT2xkTGF5ZXIiLCJzZXJpYWxpemVMYXllciIsInNlcmlhbGl6ZWROZXdMYXllciIsImNoYW5nZWQiLCJ2aXNDb25maWciLCJsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsInZpc3VhbENoYW5uZWxzIiwiY2hhbm5lbE5hbWUiLCJjaGFubmVsIiwiY2hhbm5lbFByb3BOYW1lcyIsInByb3AiLCJzb21lIiwibGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlciIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsInBpY2siLCJfaXRlcmF0b3IiLCJfc3RlcCIsImVyciIsImxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlciIsImxheWVyQ29uZmlnQ2hhbmdlIiwidXBkYXRlbGF5ZXJWaXNpYmlsdHkiLCJmaWx0ZXJJbmRleCIsImZpbHRlclN5bmNlZFdpdGhUaW1lbGluZSIsImlzTGF5ZXJBbmltYXRhYmxlIiwic3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZVVwZGF0ZXIiLCJlbmFibGUiLCJnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyIsInByb3BzIiwibmV3Q29uZmlnIiwiX2FjdGlvbiRuZXdDb25maWciLCJyZXN0Q29uZmlnIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzMiIsInN0YXRlV2l0aERhdGFJZCIsImxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlciIsIm5leHRMYXllciIsInVwZGF0ZUxheWVyQ29uZmlnIiwic2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhIiwib2xkTGF5ZXJEYXRhIiwidXBkYXRlTGF5ZXJEYXRhUmVzdWx0IiwiY2FsY3VsYXRlTGF5ZXJEYXRhIiwibGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyIiwiX2NhbGN1bGF0ZUxheWVyRGF0YSIsImxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXIiLCJsYXllcklkIiwic3BsaXRNYXBJZCIsIm1hcEluZGV4Iiwic20iLCJ0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIiLCJ0b2dnbGVMYXllckZvck1hcCIsInN5bmNlZFdpdGhMYXllclRpbWVsaW5lIiwibGF5ZXJTZXRJc1ZhbGlkVXBkYXRlciIsImlzVmFsaWQiLCJsYXllclRvVXBkYXRlIiwibmV3RGF0YSIsIl9jYWxjdWxhdGVMYXllckRhdGEyIiwiYWRkT3JSZW1vdmVUZXh0TGFiZWxzIiwibmV3RmllbGRzIiwidGV4dExhYmVsIiwiZGVmYXVsdFRleHRMYWJlbCIsIkRFRkFVTFRfVEVYVF9MQUJFTCIsIm5ld1RleHRMYWJlbCIsImN1cnJlbnRGaWVsZHMiLCJ0bCIsImZpZWxkIiwiYWRkRmllbGRzIiwiaW5jbHVkZXMiLCJkZWxldGVGaWVsZHMiLCJmZCIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJhZiIsInVwZGF0ZVRleHRMYWJlbFByb3BBbmRWYWx1ZSIsInNwbGljZSIsImxheWVyVGV4dExhYmVsQ2hhbmdlVXBkYXRlciIsIl9vbGRMYXllciRnZXREZWZhdWx0TCIsIl9vbGRMYXllciRnZXREZWZhdWx0TDIiLCJnZXREZWZhdWx0TGF5ZXJDb25maWciLCJ2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YSIsImxvYWRlZExheWVyIiwiYWxsb3dFbXB0eUNvbHVtbiIsImlzVmFsaWRUb1NhdmUiLCJ2YWxpZGF0ZWQiLCJvbGRMYXllclR5cGUiLCJuZXdEYXRhc2V0RmllbGRzIiwiZmllbGRzIiwicmVtYXBwZWRGaWVsZHMiLCJ2YWx1ZXMiLCJfcmVmMiIsImZpZWxkS2V5IiwiY3VycmVudEZpZWxkIiwibWF0Y2hlZCIsIl9yZWYzIiwidmFsaWRhdGVWaXN1YWxDaGFubmVsIiwiaXNDb25maWdBY3RpdmUiLCJ1cGRhdGVMYXllckRvbWFpbiIsIl9jYWxjdWxhdGVMYXllckRhdGEzIiwic2V0SW5pdGlhbExheWVyQ29uZmlnIiwicmVzdWx0IiwiZmluZERlZmF1bHRMYXllclByb3BzIiwibmV3VHlwZSIsIm9sZElkIiwiQ29uc29sZSIsImVycm9yIiwiZGVmYXVsdExheWVyUHJvcHMiLCJhc3NpZ25Db25maWdUb0xheWVyIiwidmlzQ29uZmlnU2V0dGluZ3MiLCJpc0xheWVySG92ZXJlZCIsIl9jYWxjdWxhdGVMYXllckRhdGE0Iiwic2V0dGluZ3MiLCJfc2V0dGluZ3MkbGF5ZXJzIiwib2xkTGF5ZXJNYXAiLCJvdGhlckxheWVycyIsInJlcGxhY2VMYXllckVudHJ5SW5MYXllck9yZGVyIiwibmV3VmlzQ29uZmlnIiwidXBkYXRlTGF5ZXJWaXNDb25maWciLCJ1cGRhdGVMYXllclZpc3VhbENoYW5uZWwiLCJ1cGRhdGVkU3RhdGUiLCJ2aXN1YWxDaGFubmVsIiwiY2hhbm5lbFNjYWxlVHlwZSIsIkNIQU5ORUxfU0NBTEVTIiwiY29sb3IiLCJ1cGRhdGVMYXllckNvbG9yVUkiLCJyYW5nZSIsImNvbG9yUmFuZ2VDb25maWciLCJjb2xvclVJIiwiY3VzdG9tQnJlYWtzIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTUiLCJzY2FsZSIsIlNDQUxFX1RZUEVTIiwiY3VzdG9tT3JkaW5hbCIsImN1c3RvbVBhbGV0dGUiLCJpbml0Q3VzdG9tUGFsZXR0ZUJ5Q3VzdG9tU2NhbGUiLCJvcmRpbmFsRG9tYWluIiwiY29sb3JCcmVha3MiLCJzaG93Q29sb3JDaGFydCIsImVkaXRCb3VuZHMiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNiIsInNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIiLCJfcmVmNCIsInJlZHVjZSIsImFjY3UiLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlciIsInNldEZpbHRlclVwZGF0ZXIiLCJzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyIiwiX3JlZjUiLCJhbmltYXRpb25XaW5kb3ciLCJuZXdGaWx0ZXIiLCJzd2FwXyIsIm5ld1N5bmNUaW1lbGluZU1vZGUiLCJnZXRTeW5jQW5pbWF0aW9uTW9kZSIsInNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyIiwiYXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyIiwiX3NlcmlhbGl6ZUZpbHRlciIsImZpbHRlcklkIiwib2xkRmlsdGVyIiwic2VyaWFsaXplZE9sZEZpbHRlciIsInNlcmlhbGl6ZUZpbHRlciIsInNlcmlhbGl6ZWROZXdGaWx0ZXIiLCJzZXRGaWx0ZXIiLCJfYWN0aW9uJHZhbHVlSW5kZXgiLCJ2YWx1ZUluZGV4IiwidG9BcnJheSIsImRhdGFzZXRJZHNUb0ZpbHRlciIsIl9sb29wIiwicmVzIiwidiIsIl91cGRhdGVGaWx0ZXJQcm9wIiwiZW5sYXJnZWRGaWx0ZXIiLCJ2aWV3IiwiRklMVEVSX1ZJRVdfVFlQRVMiLCJlbmxhcmdlZCIsInNpZGUiLCJmaWx0ZXJlZERhdGFzZXRzIiwiYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyIsInVuaXEiLCJmaWx0ZXJXaXRoUExvdCIsInVwZGF0ZUZpbHRlclBsb3QiLCJ1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEiLCJGSUxURVJfVFlQRVMiLCJ0aW1lUmFuZ2UiLCJhZGp1c3RBbmltYXRpb25Db25maWdXaXRoRmlsdGVyIiwiX3VwZGF0ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleCIsIl9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgiLCJuZXh0VmFsdWUiLCJnZXREZWZhdWx0RmlsdGVyIiwicmVtb3ZlRmlsdGVyUGxvdCIsIl9pIiwiX2FyciIsIm5leHRWYWwiLCJkb21haW5TdGVwcyIsIm1lcmdlRmlsdGVyRG9tYWluIiwibmV4dEZpbHRlciIsInN0ZXAiLCJhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluIiwiZGF0YXNldElkcyIsIkZJTFRFUl9VUERBVEVSX1BST1BTIiwib2xkRGF0YUlkIiwiZGF0YXNldElkIiwiX2FwcGx5RmlsdGVyRmllbGROYW1lIiwiYXBwbHlGaWx0ZXJGaWVsZE5hbWUiLCJtZXJnZURvbWFpbiIsInVwZGF0ZWRGaWx0ZXIiLCJuZXdEYXRhc2V0IiwiZ3B1Iiwic2V0RmlsdGVyR3B1TW9kZSIsImFzc2lnbkdwdUNoYW5uZWwiLCJsYXllcklkRGlmZmVyZW5jZSIsInhvciIsImxheWVyRGF0YUlkcyIsImxpZCIsIm5ld0RhdGFJZHMiLCJzZXRGaWx0ZXJQbG90VXBkYXRlciIsIl9yZWY2IiwibmV3UHJvcCIsInBpY2tfIiwibWVyZ2VfIiwicGxvdFR5cGUiLCJjaGFydFR5cGUiLCJ5QXhpcyIsIlBMT1RfVFlQRVMiLCJsaW5lQ2hhcnQiLCJoaXN0b2dyYW0iLCJhZGRGaWx0ZXJVcGRhdGVyIiwiY3JlYXRlT3JVcGRhdGVGaWx0ZXJVcGRhdGVyIiwib3JpZ2luYWxJbmRleCIsImluZGV4IiwibGF5ZXJDb2xvclVJQ2hhbmdlVXBkYXRlciIsIl9yZWY3Iiwib2xkVml4Q29uZmlnIiwidG9nZ2xlRmlsdGVyQW5pbWF0aW9uVXBkYXRlciIsImlzRmlsdGVyQW5pbWF0aW9uQ29uZmlnIiwic2V0QW5pbWF0aW9uQ29uZmlnVXBkYXRlciIsImlzU2lkZUZpbHRlciIsImFwcGx5RmlsdGVyQ29uZmlnIiwidG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyIiwidG9nZ2xlTGF5ZXJBbmltYXRpb25Db250cm9sVXBkYXRlciIsInVwZGF0ZUZpbHRlckFuaW1hdGlvblNwZWVkVXBkYXRlciIsInVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyIiwiX3JlZjgiLCJzZXRGaWx0ZXJWaWV3VXBkYXRlciIsInNob3VsZFJlc2V0T3RoZXJGaWx0ZXJzVmlldyIsInRvZ2dsZUZpbHRlckZlYXR1cmVVcGRhdGVyIiwiZmVhdHVyZVRvRmlsdGVyVmFsdWUiLCJyZW1vdmVGaWx0ZXJVcGRhdGVyIiwiX3N0YXRlJGZpbHRlcnMkaWR4IiwibmV3RmlsdGVycyIsIm5ld0VkaXRvciIsImdldEZpbHRlcklkSW5GZWF0dXJlIiwiYWRkTGF5ZXJVcGRhdGVyIiwibmV3TGF5ZXJEYXRhIiwiY3JlYXRlTGF5ZXJGcm9tQ29uZmlnIiwid2FybiIsIl9hY3Rpb24kZGF0YXNldElkIiwiZGVmYXVsdERhdGFzZXQiLCJMYXllciIsInJlbW92ZUxheWVyVXBkYXRlciIsIl9yZWY5IiwiaXNGaW5pdGUiLCJsYXllclRvUmVtb3ZlIiwiZmlsdGVyT3V0QnlJZCIsInJlbW92ZUVsZW1lbnRBdEluZGV4IiwicmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyIiwicmVvcmRlckxheWVyVXBkYXRlciIsIl9yZWYxMCIsIm9yZGVyIiwiYWRkTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwIiwiZ2V0TmV3TGF5ZXJHcm91cCIsIm5ld0xheWVyT3JkZXIiLCJhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIiLCJyZW1vdmVMYXllckdyb3VwVXBkYXRlciIsImxheWVyR3JvdXBUb1JlbW92ZSIsImdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlciIsImxheWVySWRzVG9SZW1vdmUiLCJnZXRGbGF0TGF5ZXJPcmRlciIsInVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyIiwib3B0aW9ucyIsIm5ld0xheWVyR3JvdXAiLCJsYXllcklkcyIsImFjYyIsInVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIiLCJhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwSWQiLCJlbnRyeSIsIm5ld0dyb3VwTGF5ZXJPcmRlciIsInJlbW92ZUxheWVyRnJvbUxheWVyR3JvdXBVcGRhdGVyIiwibmV3TGF5ZXJHcm91cE9yZGVyIiwic3dhcExheWVyT3JkZXJFbnRyaWVzVXBkYXRlciIsIm9yaWdpbkxheWVySWQiLCJkZXN0aW5hdGlvbkxheWVySWQiLCJvcmlnaW5MYXllckdyb3VwSWQiLCJkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCIsIm9yaWdpbkluZGV4IiwiZGVzdGluYXRpb25JbmRleCIsImFycmF5TW92ZSIsImRlc3RJbmRleCIsImR1cGxpY2F0ZUxheWVyVXBkYXRlciIsIl9yZWYxMSIsIm9yaWdpbmFsIiwib3JpZ2luYWxMYXllck9yZGVySWR4IiwiZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkIiwibmV3TGFiZWwiLCJwb3N0Zml4IiwiZ2VuZXJhdGVIYXNoSWQiLCJMQVlFUl9JRF9MRU5HVEgiLCJwYXJlbnRHcm91cCIsImZpbmRQYXJlbnRHcm91cEZvckxheWVyIiwibGF5ZXJPcmRlcldpdGhvdXRQcmVwZW5kZWQiLCJpZHhJbkdyb3VwIiwiYXJyYXlJbnNlcnQiLCJ1cGRhdGVkR3JvdXAiLCJhZGRFZmZlY3RVcGRhdGVyIiwiX2FjdGlvbiRjb25maWciLCJfYWN0aW9uJGNvbmZpZzIiLCJfYWN0aW9uJGNvbmZpZzMiLCJMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCIsImVmZmVjdCIsIkRJU1RBTkNFX0ZPR19UWVBFIiwiU1VSRkFDRV9GT0dfVFlQRSIsIm5ld0VmZmVjdCIsImNyZWF0ZUVmZmVjdCIsInNldFByb3BzIiwiZml4RWZmZWN0T3JkZXIiLCJyZW1vdmVFZmZlY3RVcGRhdGVyIiwiX3JlZjEyIiwiZWZmZWN0VG9SZW1vdmUiLCJlZmZlY3RJZCIsInJlb3JkZXJFZmZlY3RVcGRhdGVyIiwiX3JlZjEzIiwidXBkYXRlRWZmZWN0VXBkYXRlciIsIl9yZWYxNCIsImlkeDIiLCJlZmZlY3RPcmRlcklkIiwibmV3RWZmZWN0cyIsIm1ha2VOZXdBbm5vdGF0aW9uIiwiX2NvbmZpZyRraW5kIiwiX2NvbmZpZyRpZCIsIl9jb25maWckaXNWaXNpYmxlIiwiX2NvbmZpZyRhdXRvU2l6ZSIsIl9jb25maWckYXV0b1NpemVZIiwiX2NvbmZpZyRhbmNob3JQb2ludCIsIl9jb25maWckbGFiZWwiLCJfY29uZmlnJGxpbmVDb2xvciIsIl9jb25maWckbGluZVdpZHRoIiwiX2NvbmZpZyR0ZXh0V2lkdGgiLCJfY29uZmlnJHRleHRIZWlnaHQiLCJfY29uZmlnJHRleHRWZXJ0aWNhbEEiLCJfYXJtTGVuZ3RoIiwiX2FuZ2xlIiwiX2FybUxlbmd0aDIiLCJfYW5nbGUyIiwiX2FybUxlbmd0aDMiLCJfYW5nbGUzIiwiX3JhZGl1c0luTWV0ZXJzIiwia2luZCIsIklOSVRJQUxfQU5OT1RBVElPTl9LSU5EIiwiYmFzZSIsImF1dG9TaXplIiwiYXV0b1NpemVZIiwiYW5jaG9yUG9pbnQiLCJsaW5lQ29sb3IiLCJJTklUSUFMX0FOTk9UQVRJT05fTElORV9DT0xPUiIsImxpbmVXaWR0aCIsIklOSVRJQUxfQU5OT1RBVElPTl9MSU5FX1dJRFRIIiwidGV4dFdpZHRoIiwiSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfV0lEVEgiLCJ0ZXh0SGVpZ2h0IiwiSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfSEVJR0hUIiwidGV4dFZlcnRpY2FsQWxpZ24iLCJBbm5vdGF0aW9uS2luZCIsIlBPSU5UIiwiYXJtTGVuZ3RoIiwiSU5JVElBTF9BTk5PVEFUSU9OX0FSTV9MRU5HVEgiLCJhbmdsZSIsIklOSVRJQUxfQU5OT1RBVElPTl9BTkdMRSIsIkFSUk9XIiwiQ0lSQ0xFIiwicmFkaXVzSW5NZXRlcnMiLCJURVhUIiwiYWRkQW5ub3RhdGlvblVwZGF0ZXIiLCJuZXdBbm5vdGF0aW9uIiwicmVtb3ZlQW5ub3RhdGlvblVwZGF0ZXIiLCJfcmVmMTUiLCJ1cGRhdGVBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYxNiIsIm5leHRBbm5vdGF0aW9uIiwibmV3QW5ub3RhdGlvbnMiLCJkdXBsaWNhdGVBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYxNyIsImNsb25lRGVlcCIsInNldFNlbGVjdGVkQW5ub3RhdGlvblVwZGF0ZXIiLCJfcmVmMTgiLCJpc0VkaXRpbmdUZXh0IiwicmVtb3ZlRGF0YXNldFVwZGF0ZXIiLCJkYXRhc2V0S2V5IiwiX3N0YXRlJGRhdGFzZXRzIiwibmV3RGF0YXNldHMiLCJsYXllcnNUb1JlbW92ZSIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJpbmRleE9mIiwicmVtb3ZlRGF0YXNldEZyb21JbnRlcmFjdGlvbkNvbmZpZyIsIl9yZWYxOSIsIl9pbnRlcmFjdGlvbkNvbmZpZyIsIl9jb25maWckZmllbGRzVG9TaG93IiwidXBkYXRlTGF5ZXJCbGVuZGluZ1VwZGF0ZXIiLCJ1cGRhdGVPdmVybGF5QmxlbmRpbmdVcGRhdGVyIiwic2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXIiLCJ1cGRhdGVUYWJsZUNvbG9yVXBkYXRlciIsInVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIiLCJuZXdDb2xvciIsInJlc2V0TWFwQ29uZmlnVXBkYXRlciIsImluaXRpYWxTdGF0ZSIsInJlY2VpdmVNYXBDb25maWdVcGRhdGVyIiwiX3JlZjIwIiwiX3JlZjIwJHBheWxvYWQiLCJwYXlsb2FkIiwiX3JlZjIwJHBheWxvYWQkY29uZmlnIiwiX3JlZjIwJHBheWxvYWQkb3B0aW9uIiwidmlzU3RhdGUiLCJrZWVwRXhpc3RpbmdDb25maWciLCJtZXJnZWRTdGF0ZSIsIl9pdGVyYXRvcjMiLCJfc3RlcDMiLCJtZXJnZXIiLCJpc1ZhbGlkTWVyZ2VyIiwiaGFzUHJvcHNUb01lcmdlIiwibWVyZ2UiLCJnZXRQcm9wVmFsdWVUb01lcmdlciIsInRvTWVyZ2VQcm9wIiwibGF5ZXJIb3ZlclVwZGF0ZXIiLCJpbmZvIiwiaW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyIiwiY29udHJhZGljdCIsImsiLCJsYXllckNsaWNrVXBkYXRlciIsInBpbm5lZCIsInBpY2tlZCIsIm1hcENsaWNrVXBkYXRlciIsIm1vdXNlTW92ZVVwZGF0ZXIiLCJfcmVmMjEiLCJldnQiLCJwb2ludCIsIm1vdXNlUG9zaXRpb24iLCJsbmdMYXQiLCJ0b2dnbGVTcGxpdE1hcFVwZGF0ZXIiLCJjb21wdXRlU3BsaXRNYXBMYXllcnMiLCJkdXBsaWNhdGUiLCJjbG9zZVNwZWNpZmljTWFwQXRJbmRleCIsIl9yZWYyMiIsInVwZGF0ZVZpc0RhdGFVcGRhdGVyIiwiY3JlYXRlRGF0YXNldFRhc2tzIiwibm90aWZpY2F0aW9uVGFza3MiLCJfcmVmMjMiLCJkYXRhc2V0SW5kZXgiLCJfcmVmMjMkaW5mbyIsInJlc3QiLCJ0YXNrIiwiY3JlYXRlTmV3RGF0YUVudHJ5IiwiYWRkTm90aWZpY2F0aW9uIiwiZXJyb3JOb3RpZmljYXRpb24iLCJtZXNzYWdlIiwiZGF0YXNldHNBbGxTZXR0bGVkVGFzayIsImFsbFNldHRsZWQiLCJyZXN1bHRzIiwiY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3MiLCJhZGRUb01hcE9wdGlvbnMiLCJzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlciIsInBheWxvYWRfIiwiY2hhbmdlIiwid2l0aFRhc2siLCJjcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIiLCJfYWN0aW9uJHBheWxvYWQiLCJuZXdEYXRhRW50cmllcyIsInN0YXR1cyIsIkFDVElPTl9UQVNLIiwicmVhc29uIiwibWVyZ2VEYXRhc2V0c0J5T3JkZXIiLCJsYXllck1lcmdlcnMiLCJtIiwid2FpdEZvckxheWVyRGF0YSIsImRhdGFzZXRNZXJnZXJzIiwicG9zdE1lcmdlclBheWxvYWQiLCJhcHBseU1lcmdlcnNVcGRhdGVyIiwibWVyZ2VTdGF0ZVJlc3VsdCIsIm1lcmdlU3RhdGVGcm9tTWVyZ2VycyIsImFsbE1lcmdlZCIsInBvc3RNZXJnZVVwZGF0ZXIiLCJsYXllclZpc0NvbmZpZ0Zyb21BZGREYXRhT3B0aW9ucyIsInBhdGNoIiwibGF5ZXJWaXNDb25maWciLCJfdHlwZW9mMiIsImZEYXRhSWQiLCJkYXRhc2V0RmlsdGVyZWQiLCJkYXRhRW1wdHkiLCJuZXdMYXllcnMiLCJhdXRvQ3JlYXRlTGF5ZXJzIiwiYWRkRGVmYXVsdExheWVycyIsIm1lcmdlTGF5ZXJWaXNDb25maWdGb3JOZXdEYXRhc2V0cyIsInRvb2x0aXBGaWVsZHMiLCJhdXRvQ3JlYXRlVG9vbHRpcHMiLCJhZGREZWZhdWx0VG9vbHRpcHMiLCJ1cGRhdGVkRGF0YXNldHMiLCJjZW50ZXJNYXAiLCJib3VuZHMiLCJmaW5kTWFwQm91bmRzIiwiZml0Qm91bmRzVGFzayIsImZpdE1hcEJvdW5kcyIsInJlbmFtZURhdGFzZXRVcGRhdGVyIiwiQUxMT1dFRF9VUERBVEVfREFUQVNFVF9QUk9QUyIsInZhbGlkYXRlRGF0YXNldFVwZGF0ZVByb3BzIiwidmFsaWRhdGVkUHJvcHMiLCJlbnRyaWVzIiwiX2VudHJ5IiwiX3NsaWNlZFRvQXJyYXkyIiwiaXNSZ2JDb2xvciIsImlzUGxhaW5PYmplY3QiLCJkZWVwbWVyZ2UiLCJleGlzdGluZyIsImNvcHlUYWJsZUFuZFVwZGF0ZSIsIl9zdGF0ZSRzcGxpdE1hcHMkaW5kZSIsImluZGV4VG9SZXRyaWV2ZSIsIm1hcExheWVycyIsImxvYWRGaWxlc1VwZGF0ZXIiLCJmaWxlcyIsIl9hY3Rpb24kb25GaW5pc2giLCJvbkZpbmlzaCIsImxvYWRGaWxlc1N1Y2Nlc3MiLCJpbml0aWFsRmlsZUxvYWRpbmdQcm9ncmVzcyIsImZpbGVDYWNoZSIsImZpbGVzVG9Mb2FkIiwibG9hZE5leHRGaWxlVXBkYXRlciIsImxvYWRGaWxlU3RlcFN1Y2Nlc3NVcGRhdGVyIiwiZmlsZU5hbWUiLCJfc3RhdGUkZmlsZUxvYWRpbmciLCJzdGF0ZVdpdGhQcm9ncmVzcyIsInVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyIiwicHJvZ3Jlc3MiLCJwZXJjZW50Iiwic3RhdGVXaXRoQ2FjaGUiLCJERUxBWV9UQVNLIiwibG9hZE5leHRGaWxlIiwiX2ZpbGVzVG9Mb2FkIiwiX3RvQXJyYXkyIiwiZmlsZSIsInJlbWFpbmluZ0ZpbGVzVG9Mb2FkIiwibWFrZUxvYWRGaWxlVGFzayIsIkxPQURfRklMRV9UQVNLIiwiYmltYXAiLCJnZW4iLCJuZXh0RmlsZUJhdGNoIiwicHJvY2Vzc0ZpbGVDb250ZW50IiwiY29udGVudCIsImxvYWRGaWxlc0VyciIsInByb2Nlc3NGaWxlQ29udGVudFVwZGF0ZXIiLCJfYWN0aW9uJHBheWxvYWQyIiwiUFJPQ0VTU19GSUxFX0RBVEEiLCJsb2FkRmlsZVN0ZXBTdWNjZXNzIiwicGFyc2VQcm9ncmVzcyIsInByZXZQcm9ncmVzcyIsIm5leHRGaWxlQmF0Y2hVcGRhdGVyIiwiX3JlZjI0IiwiX2FjY3VtdWxhdGVkJGRhdGEiLCJfcmVmMjQkcGF5bG9hZCIsImFjY3VtdWxhdGVkIiwiZ2V0QXBwbGljYXRpb25Db25maWciLCJ1c2VBcnJvd1Byb2dyZXNzaXZlTG9hZGluZyIsImVuZHNXaXRoIiwiZGF0YSIsIlVOV1JBUF9UQVNLIiwiX3JlZjI1IiwibG9hZEZpbGVzRXJyVXBkYXRlciIsIl9yZWYyNiIsIl9zdGF0ZSRmaWxlTG9hZGluZzIiLCJhcHBseUNQVUZpbHRlclVwZGF0ZXIiLCJfcmVmMjciLCJkYXRhSWRzIiwiZmlsdGVyRGF0YXNldENQVSIsInNldE1hcEluZm9VcGRhdGVyIiwiZW1wdHkiLCJkZWZhdWx0TGF5ZXJzIiwiZm91bmRMYXllcnMiLCJmaW5kRGVmYXVsdExheWVyIiwiZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMiLCJmaW5kRmllbGRzVG9TaG93IiwibWVyZ2VkIiwiX3JlZjI5IiwiZml4ZWREb21haW4iLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNyIsIl9zdGF0ZSRmaWx0ZXJzIiwiYW5pbWF0YWJsZUxheWVycyIsImxheWVyRG9tYWlucyIsIm1lcmdlZERvbWFpbiIsIm1lcmdlVGltZURvbWFpbnMiLCJnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIiLCJtZXJnZWRUaW1lU3RlcHMiLCJzb3J0IiwiQkFTRV9TUEVFRCIsIkZQUyIsInN5bmNlZEZpbHRlciIsIm5ld0FuaW1hdGlvbkRvbWFpbiIsImlzSW5SYW5nZSIsInNldEVkaXRvck1vZGVVcGRhdGVyIiwiX3JlZjMwIiwic2V0RmVhdHVyZXNVcGRhdGVyIiwiX3JlZjMxIiwiX2xhc3RGZWF0dXJlJHByb3BlcnRpIiwiX2xhc3RGZWF0dXJlJHByb3BlcnRpMiIsIl9yZWYzMSRmZWF0dXJlcyIsImxhc3RGZWF0dXJlIiwicHJvcGVydGllcyIsImlzQ2xvc2VkIiwic2hhcGUiLCJFRElUIiwiZmVhdHVyZSIsImJib3giLCJmZWF0dXJlVmFsdWUiLCJmaWx0ZXJJZHgiLCJmaWwiLCJzZXRTZWxlY3RlZEZlYXR1cmVVcGRhdGVyIiwiX3JlZjMyIiwic2VsZWN0aW9uQ29udGV4dCIsImRlbGV0ZUZlYXR1cmVVcGRhdGVyIiwiX3JlZjMzIiwic2V0UG9seWdvbkZpbHRlckxheWVyVXBkYXRlciIsIm5vbmVGaWx0ZXJGZWF0dXJlIiwiX2ZpbHRlciRsYXllcklkIiwiaXNMYXllckluY2x1ZGVkIiwiZ2VuZXJhdGVQb2x5Z29uRmlsdGVyIiwic2V0UG9seWdvbkZpbHRlckFsbExheWVyc1VwZGF0ZXIiLCJ2aXNpYmxlTGF5ZXJJZHMiLCJhbGxMYXllcklkcyIsInNvcnRUYWJsZUNvbHVtblVwZGF0ZXIiLCJfcmVmMzQiLCJjb2x1bW4iLCJzb3J0TW9kZSIsImN1cnJlbnRNb2RlIiwiU09SVF9PUkRFUiIsIkFTQ0VORElORyIsInNvcnRlZCIsInNvcnREYXRhc2V0QnlDb2x1bW4iLCJwaW5UYWJsZUNvbHVtblVwZGF0ZXIiLCJfcmVmMzUiLCJwaW5UYWJsZUNvbHVtbnMiLCJjb3B5VGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjM2IiwiZmllbGRJZHgiLCJ0ZXh0IiwiZGF0YUNvbnRhaW5lciIsInJvdyIsInBhcnNlRmllbGRWYWx1ZSIsInZhbHVlQXQiLCJqb2luIiwiY29weSIsInNldENvbHVtbkRpc3BsYXlGb3JtYXRVcGRhdGVyIiwiX3JlZjM3IiwiZm9ybWF0cyIsImRpc3BsYXlGb3JtYXQiLCJfbGF5ZXIkY29uZmlnIiwiY29sb3JGaWVsZCIsInRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyIiwic2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ1VwZGF0ZXIiLCJfcmVmMzgiLCJ1cGRhdGVzIiwiY2hlY2tUaW1lQ29uZmlnQXJncyIsImFsbG93ZWQiLCJzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyIiwiX3JlZjM5IiwibGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlVXBkYXRlciIsIl9sYXllciRmaWx0ZXJlZEl0ZW1DbyIsImV2ZW50IiwiZGVja2dsTGF5ZXJJZCIsImNvdW50IiwiZmlsdGVyZWRJdGVtQ291bnQiLCJ3bXNGZWF0dXJlSW5mb1VwZGF0ZXIiLCJmZWF0dXJlSW5mbyIsImNvbnNvbGUiLCJvYmplY3QiLCJ3bXNGZWF0dXJlSW5mbyIsIl9uZXdTdGF0ZSRhbmltYXRpb25DbyIsIl9uZXdTdGF0ZSRhbmltYXRpb25DbzIiLCJfYWN0aW9uJGVuYWJsZSIsImludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMiLCJnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzIiwiaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyIiwiQm9vbGVhbiIsIm5ld0ZpbHRlckRvbWFpbiIsIkFOSU1BVElPTl9XSU5ET1ciLCJpbnRlcnZhbCIsImFkanVzdFRpbWVGaWx0ZXJJbnRlcnZhbCIsIm5ld0ZpbHRlclZhbHVlIiwic3luY1RpbWVsaW5lTW9kZSIsIlNZTkNfVElNRUxJTkVfTU9ERVMiLCJlbmQiLCJ2YWxpZGF0ZVN5bmNBbmltYXRpb25Nb2RlIiwiX3JlZjQwIiwiTWF0aCIsIm1heCIsInRpbWVsaW5lVmFsdWUiLCJnZXRUaW1lbGluZVZhbHVlRnJvbUZpbHRlciIsInNuYXBUb01hcmtzIiwiZnJlZSIsIl9maWx0ZXIkc3luY1RpbWVsaW5lTSIsIm5ld01vZGUiLCJzdGFydCIsImludGVydmFsSW5kZXgiLCJjdXJyZW50SW5kZXgiLCJtZXRhIiwidGFyZ2V0VGltZUludGVydmFsIiwibmV3SW5kZXgiLCJUSU1FX0lOVEVSVkFMU19PUkRFUkVEIiwiaGV4VGlsZUludGVydmFsIiwiTGF5ZXJUb0ZpbHRlclRpbWVJbnRlcnZhbCIsImdldERlZmF1bHRUaW1lRm9ybWF0IiwidXBkYXRlZFBsb3RUeXBlIiwidXBkYXRlVGltZUZpbHRlclBsb3RUeXBlIiwiYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyIsImRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyIsImRhdGFJZFRvUmVwbGFjZSIsIl92YWx1ZSRjb25maWciLCJfdmFsdWUkY29uZmlnMiIsInJlcGxhY2VkIiwiaXNPYmplY3QiLCJmaW5kQ2hpbGREYXRhc2V0SWRzIiwiX3ZhbHVlJG5ld0RhdGFzZXQiLCJjaGlsZERhdGFJZHMiLCJtb3ZlVmFsdWVUb0JlTWVyZ2VkIiwicHJvcFZhbHVlcyIsIl9yZWY0MiIsInNhdmVVbm1lcmdlZCIsInN0YXRlUmVtb3ZlZCIsInByb3BWYWx1ZSIsInAiLCJ0b0JlTWVyZ2VkIiwicmVwbGFjZURhdGFzZXRBbmREZXBzIiwiZGF0YUlkVG9Vc2UiLCJjb21wb3NlXyIsImFwcGx5XyIsInJlcGxhY2VEYXRhc2V0RGVwc0luU3RhdGUiLCJwcmVwYXJlU3RhdGVGb3JEYXRhc2V0UmVwbGFjZSIsIl9uZXh0U3RhdGUkbGF5ZXJUb0JlTSIsInNlcmlhbGl6ZWRTdGF0ZSIsInNlcmlhbGl6ZVZpc1N0YXRlIiwicHJlc2VydmVMYXllck9yZGVyIiwicHJlc2VydmVEYXRhc2V0T3JkZXIiLCJfc2VyaWFsaXplZFN0YXRlJHNwbGkiLCJfcmVmNDMiLCJhY2N1U3RhdGUiLCJfcmVmNDQiLCJyZXBsYWNlUGFyZW50RGF0YXNldElkcyIsImdldENoaWxkRGF0YXNldElkcyIsInByZXNlcnZlT3JkZXIiLCJ0b01lcmdlUHJvcHMiLCJzYXZlZFByb3BzIiwicmVwbGFjZWRTdGF0ZSIsIl9yZXBsYWNlZFN0YXRlJG1lcmdlciIsIm1lcmdlck9wdGlvbnMiLCJyZXBsYWNlZEl0ZW0iLCJyZXBsYWNlUHJvcFZhbHVlSW5TdGF0ZSIsIml0ZW0iLCJfcmVmNDUiLCJjaGlsZERhdGFJZCJdLCJzb3VyY2VzIjpbIi4uL3NyYy92aXMtc3RhdGUtdXBkYXRlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtiYm94fSBmcm9tICdAdHVyZi9iYm94JztcbmltcG9ydCB0eXBlIHtBbGxHZW9KU09OfSBmcm9tICdAdHVyZi9oZWxwZXJzJztcbmltcG9ydCBjb3B5IGZyb20gJ2NvcHktdG8tY2xpcGJvYXJkJztcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnZGVlcG1lcmdlJztcbmltcG9ydCB7Y29uc29sZSBhcyBDb25zb2xlfSBmcm9tICdnbG9iYWwvd2luZG93JztcbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnbG9kYXNoL2Nsb25lRGVlcCc7XG5pbXBvcnQgZ2V0IGZyb20gJ2xvZGFzaC9nZXQnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoL2lzRXF1YWwnO1xuaW1wb3J0IHBpY2sgZnJvbSAnbG9kYXNoL3BpY2snO1xuaW1wb3J0IHVuaXEgZnJvbSAnbG9kYXNoL3VuaXEnO1xuaW1wb3J0IHhvciBmcm9tICdsb2Rhc2gveG9yJztcbmltcG9ydCBUYXNrLCB7ZGlzYWJsZVN0YWNrQ2FwdHVyaW5nLCB3aXRoVGFza30gZnJvbSAncmVhY3QtcGFsbS90YXNrcyc7XG4vLyBUYXNrc1xuaW1wb3J0IHtcbiAgREVMQVlfVEFTSyxcbiAgQUNUSU9OX1RBU0ssXG4gIExPQURfRklMRV9UQVNLLFxuICBQUk9DRVNTX0ZJTEVfREFUQSxcbiAgVU5XUkFQX1RBU0tcbn0gZnJvbSAnQGtlcGxlci5nbC90YXNrcyc7XG4vLyBBY3Rpb25zXG5pbXBvcnQge1xuICBhZGROb3RpZmljYXRpb24sXG4gIEFjdGlvblR5cGVzLFxuICBDcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1BheWxvYWQsXG4gIE1hcFN0YXRlQWN0aW9ucyxcbiAgUmVjZWl2ZU1hcENvbmZpZ1BheWxvYWQsXG4gIFZpc1N0YXRlQWN0aW9ucyxcbiAgYXBwbHlMYXllckNvbmZpZyxcbiAgY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3MsXG4gIGxheWVyQ29uZmlnQ2hhbmdlLFxuICBsYXllclR5cGVDaGFuZ2UsXG4gIGxheWVyVmlzQ29uZmlnQ2hhbmdlLFxuICBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UsXG4gIGxvYWRGaWxlU3RlcFN1Y2Nlc3MsXG4gIGxvYWRGaWxlc0VycixcbiAgbG9hZEZpbGVzU3VjY2VzcyxcbiAgbG9hZE5leHRGaWxlLFxuICBuZXh0RmlsZUJhdGNoLFxuICBzZXRGaWx0ZXIsXG4gIHByb2Nlc3NGaWxlQ29udGVudCxcbiAgZml0Qm91bmRzIGFzIGZpdE1hcEJvdW5kcyxcbiAgdG9nZ2xlTGF5ZXJGb3JNYXAsXG4gIGFwcGx5RmlsdGVyQ29uZmlnLFxuICBTZXRMb2FkaW5nSW5kaWNhdG9yUGF5bG9hZFxufSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuXG4vLyBVdGlsc1xuaW1wb3J0IHtcbiAgRklMVEVSX1VQREFURVJfUFJPUFMsXG4gIGFkZE5ld0xheWVyc1RvU3BsaXRNYXAsXG4gIHNuYXBUb01hcmtzLFxuICBhcHBseUZpbHRlckZpZWxkTmFtZSxcbiAgYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyxcbiAgYXJyYXlJbnNlcnQsXG4gIGNvbXB1dGVTcGxpdE1hcExheWVycyxcbiAgYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbixcbiAgZXJyb3JOb3RpZmljYXRpb24sXG4gIGZlYXR1cmVUb0ZpbHRlclZhbHVlLFxuICBmaWx0ZXJEYXRhc2V0Q1BVLFxuICBnZW5lcmF0ZVBvbHlnb25GaWx0ZXIsXG4gIGdldERlZmF1bHRGaWx0ZXIsXG4gIGdldEZpbHRlcklkSW5GZWF0dXJlLFxuICBnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIsXG4gIGlzSW5SYW5nZSxcbiAgaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3QsXG4gIGlzUmdiQ29sb3IsXG4gIHBhcnNlRmllbGRWYWx1ZSxcbiAgcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzLFxuICBzZXQsXG4gIHVwZGF0ZUZpbHRlclBsb3QsXG4gIHJlbW92ZUZpbHRlclBsb3QsXG4gIGlzTGF5ZXJBbmltYXRhYmxlLFxuICBpc1NpZGVGaWx0ZXIsXG4gIGdldEFwcGxpY2F0aW9uQ29uZmlnXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtnZW5lcmF0ZUhhc2hJZCwgdG9BcnJheSwgYXJyYXlNb3ZlfSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG4vLyBNZXJnZXJzXG5pbXBvcnQge1xuICBBTklNQVRJT05fV0lORE9XLFxuICBCQVNFX1NQRUVELFxuICBDT01QQVJFX1RZUEVTLFxuICBERUZBVUxUX1RFWFRfTEFCRUwsXG4gIEVESVRPUl9NT0RFUyxcbiAgRklMVEVSX1RZUEVTLFxuICBGSUxURVJfVklFV19UWVBFUyxcbiAgRlBTLFxuICBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCxcbiAgRElTVEFOQ0VfRk9HX1RZUEUsXG4gIFNVUkZBQ0VfRk9HX1RZUEUsXG4gIE1BWF9ERUZBVUxUX1RPT0xUSVBTLFxuICBQTE9UX1RZUEVTLFxuICBTT1JUX09SREVSLFxuICBTWU5DX1RJTUVMSU5FX01PREVTLFxuICBDSEFOTkVMX1NDQUxFUyxcbiAgU0NBTEVfVFlQRVMsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9LSU5ELFxuICBJTklUSUFMX0FOTk9UQVRJT05fQU5HTEUsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9BUk1fTEVOR1RILFxuICBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9XSURUSCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfSEVJR0hULFxuICBJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IsXG4gIEFubm90YXRpb25LaW5kXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7TEFZRVJfSURfTEVOR1RILCBMYXllciwgTGF5ZXJDbGFzc2VzfSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5pbXBvcnQge1xuICBhcHBseV8sXG4gIGNvbXBvc2VfLFxuICBmaWx0ZXJPdXRCeUlkLFxuICBtZXJnZV8sXG4gIHBheWxvYWRfLFxuICBwaWNrXyxcbiAgcmVtb3ZlRWxlbWVudEF0SW5kZXgsXG4gIHN3YXBfXG59IGZyb20gJy4vY29tcG9zZXItaGVscGVycyc7XG5pbXBvcnQge2lzVmFsaWRNZXJnZXIsIG1lcmdlU3RhdGVGcm9tTWVyZ2Vyc30gZnJvbSAnLi9tZXJnZXItaGFuZGxlcic7XG5pbXBvcnQge1xuICBWSVNfU1RBVEVfTUVSR0VSUyxcbiAgY3JlYXRlTGF5ZXJGcm9tQ29uZmlnLFxuICBwYXJzZUxheWVyQ29uZmlnLFxuICBzZXJpYWxpemVGaWx0ZXIsXG4gIHNlcmlhbGl6ZUxheWVyLFxuICBzZXJpYWxpemVWaXNTdGF0ZSxcbiAgdmFsaWRhdGVMYXllcldpdGhEYXRhXG59IGZyb20gJy4vdmlzLXN0YXRlLW1lcmdlcic7XG5cbmltcG9ydCBLZXBsZXJHTFNjaGVtYSwge01lcmdlciwgUG9zdE1lcmdlclBheWxvYWQsIFZpc1N0YXRlfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuXG5pbXBvcnQge1xuICBGaWx0ZXIsXG4gIEludGVyYWN0aW9uQ29uZmlnLFxuICBBbmltYXRpb25Db25maWcsXG4gIEZpbHRlckFuaW1hdGlvbkNvbmZpZyxcbiAgRWRpdG9yLFxuICBGaWVsZCxcbiAgTGF5ZXJWaXNDb25maWcsXG4gIFRpbWVSYW5nZUZpbHRlcixcbiAgQW5ub3RhdGlvbixcbiAgQW5ub3RhdGlvblByb3BzUGFydGlhbFxufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7TG9hZGVyfSBmcm9tICdAbG9hZGVycy5nbC9sb2FkZXItdXRpbHMnO1xuXG5pbXBvcnQge1xuICBEYXRhc2V0cyxcbiAgYXNzaWduR3B1Q2hhbm5lbCxcbiAgY29weVRhYmxlQW5kVXBkYXRlLFxuICBjcmVhdGVOZXdEYXRhRW50cnksXG4gIHBpblRhYmxlQ29sdW1ucyxcbiAgc2V0RmlsdGVyR3B1TW9kZSxcbiAgc29ydERhdGFzZXRCeUNvbHVtblxufSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCB7ZmluZEZpZWxkc1RvU2hvd30gZnJvbSAnLi9pbnRlcmFjdGlvbi11dGlscyc7XG5pbXBvcnQge1xuICBjYWxjdWxhdGVMYXllckRhdGEsXG4gIGZpbmREZWZhdWx0TGF5ZXIsXG4gIGdldExheWVyT3JkZXJGcm9tTGF5ZXJzLFxuICBtZXJnZUxheWVyVmlzQ29uZmlnRm9yTmV3RGF0YXNldHMsXG4gIGdldE5ld0xheWVyR3JvdXAsXG4gIGFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlcixcbiAgcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyLFxuICBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIsXG4gIGZpbmRQYXJlbnRHcm91cEZvckxheWVyLFxuICBnZXRJbmRleEZyb21MYXllckVudHJ5SWQsXG4gIHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIsXG4gIGdldEZsYXRMYXllck9yZGVyLFxuICByZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlclxufSBmcm9tICcuL2xheWVyLXV0aWxzJztcbmltcG9ydCB7Z2V0UHJvcFZhbHVlVG9NZXJnZXIsIGhhc1Byb3BzVG9NZXJnZX0gZnJvbSAnLi9tZXJnZXItaGFuZGxlcic7XG5pbXBvcnQge21lcmdlRGF0YXNldHNCeU9yZGVyfSBmcm9tICcuL3Zpcy1zdGF0ZS1tZXJnZXInO1xuaW1wb3J0IHtcbiAgZml4RWZmZWN0T3JkZXIsXG4gIGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzLFxuICBnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLFxuICBtZXJnZVRpbWVEb21haW5zLFxuICBhZGp1c3RWYWx1ZVRvQW5pbWF0aW9uV2luZG93LFxuICB1cGRhdGVUaW1lRmlsdGVyUGxvdFR5cGUsXG4gIGdldERlZmF1bHRUaW1lRm9ybWF0LFxuICBMYXllclRvRmlsdGVyVGltZUludGVydmFsLFxuICBUSU1FX0lOVEVSVkFMU19PUkRFUkVELFxuICBtZXJnZUZpbHRlckRvbWFpbixcbiAgaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtjcmVhdGVFZmZlY3R9IGZyb20gJ0BrZXBsZXIuZ2wvZWZmZWN0cyc7XG5pbXBvcnQge1BheWxvYWRBY3Rpb259IGZyb20gJ0ByZWR1eGpzL3Rvb2xraXQnO1xuXG5pbXBvcnQge2ZpbmRNYXBCb3VuZHN9IGZyb20gJy4vZGF0YS11dGlscyc7XG5cbi8vIHJlYWN0LXBhbG1cbi8vIGRpc2FibGUgY2FwdHVyZSBleGNlcHRpb24gZm9yIHJlYWN0LXBhbG0gY2FsbCB0byB3aXRoVGFza1xuZGlzYWJsZVN0YWNrQ2FwdHVyaW5nKCk7XG5cbi8qKlxuICogVXBkYXRlcnMgZm9yIGB2aXNTdGF0ZWAgcmVkdWNlci4gQ2FuIGJlIHVzZWQgaW4geW91ciByb290IHJlZHVjZXIgdG8gZGlyZWN0bHkgbW9kaWZ5IGtlcGxlci5nbCdzIHN0YXRlLlxuICogUmVhZCBtb3JlIGFib3V0IFtVc2luZyB1cGRhdGVyc10oLi4vYWR2YW5jZWQtdXNhZ2UvdXNpbmctdXBkYXRlcnMubWQpXG4gKlxuICogQHB1YmxpY1xuICogQGV4YW1wbGVcbiAqXG4gKiBpbXBvcnQga2VwbGVyR2xSZWR1Y2VyLCB7dmlzU3RhdGVVcGRhdGVyc30gZnJvbSAnQGtlcGxlci5nbC9yZWR1Y2Vycyc7XG4gKiAvLyBSb290IFJlZHVjZXJcbiAqIGNvbnN0IHJlZHVjZXJzID0gY29tYmluZVJlZHVjZXJzKHtcbiAqICBrZXBsZXJHbDoga2VwbGVyR2xSZWR1Y2VyLFxuICogIGFwcDogYXBwUmVkdWNlclxuICogfSk7XG4gKlxuICogY29uc3QgY29tcG9zZWRSZWR1Y2VyID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAqICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gKiAgICBjYXNlICdDTElDS19CVVRUT04nOlxuICogICAgICByZXR1cm4ge1xuICogICAgICAgIC4uLnN0YXRlLFxuICogICAgICAgIGtlcGxlckdsOiB7XG4gKiAgICAgICAgICAuLi5zdGF0ZS5rZXBsZXJHbCxcbiAqICAgICAgICAgIGZvbzoge1xuICogICAgICAgICAgICAgLi4uc3RhdGUua2VwbGVyR2wuZm9vLFxuICogICAgICAgICAgICAgdmlzU3RhdGU6IHZpc1N0YXRlVXBkYXRlcnMuZW5sYXJnZUZpbHRlclVwZGF0ZXIoXG4gKiAgICAgICAgICAgICAgIHN0YXRlLmtlcGxlckdsLmZvby52aXNTdGF0ZSxcbiAqICAgICAgICAgICAgICAge2lkeDogMH1cbiAqICAgICAgICAgICAgIClcbiAqICAgICAgICAgIH1cbiAqICAgICAgICB9XG4gKiAgICAgIH07XG4gKiAgfVxuICogIHJldHVybiByZWR1Y2VycyhzdGF0ZSwgYWN0aW9uKTtcbiAqIH07XG4gKlxuICogZXhwb3J0IGRlZmF1bHQgY29tcG9zZWRSZWR1Y2VyO1xuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbi8vIEB0cy1pZ25vcmVcbmNvbnN0IHZpc1N0YXRlVXBkYXRlcnMgPSBudWxsO1xuLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRJbnRlcmFjdGlvbkNvbmZpZzogSW50ZXJhY3Rpb25Db25maWcgPSB7XG4gIHRvb2x0aXA6IHtcbiAgICBpZDogJ3Rvb2x0aXAnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLnRvb2x0aXAnLFxuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgY29uZmlnOiB7XG4gICAgICBmaWVsZHNUb1Nob3c6IHt9LFxuICAgICAgY29tcGFyZU1vZGU6IGZhbHNlLFxuICAgICAgY29tcGFyZVR5cGU6IENPTVBBUkVfVFlQRVMuQUJTT0xVVEVcbiAgICB9XG4gIH0sXG4gIGdlb2NvZGVyOiB7XG4gICAgaWQ6ICdnZW9jb2RlcicsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuZ2VvY29kZXInLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIHBvc2l0aW9uOiBudWxsLFxuICAgIGNvbmZpZzoge1xuICAgICAgbGltaXRTZWFyY2g6IGZhbHNlXG4gICAgfVxuICB9LFxuICBicnVzaDoge1xuICAgIGlkOiAnYnJ1c2gnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmJydXNoJyxcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBjb25maWc6IHtcbiAgICAgIC8vIHNpemUgaXMgaW4ga21cbiAgICAgIHNpemU6IDAuNVxuICAgIH1cbiAgfSxcbiAgY29vcmRpbmF0ZToge1xuICAgIGlkOiAnY29vcmRpbmF0ZScsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuY29vcmRpbmF0ZScsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgcG9zaXRpb246IG51bGxcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQU5JTUFUSU9OX0NPTkZJRzogQW5pbWF0aW9uQ29uZmlnID0ge1xuICBkb21haW46IG51bGwsXG4gIGN1cnJlbnRUaW1lOiBudWxsLFxuICBzcGVlZDogMSxcbiAgaXNBbmltYXRpbmc6IGZhbHNlLFxuICB0aW1lU3RlcHM6IG51bGwsXG4gIHRpbWVGb3JtYXQ6IG51bGwsXG4gIHRpbWV6b25lOiBudWxsLFxuICBkZWZhdWx0VGltZUZvcm1hdDogbnVsbCxcbiAgaGlkZUNvbnRyb2w6IGZhbHNlLFxuICBkdXJhdGlvbjogbnVsbFxufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfRURJVE9SOiBFZGl0b3IgPSB7XG4gIG1vZGU6IEVESVRPUl9NT0RFUy5EUkFXX1BPTFlHT04sXG4gIGZlYXR1cmVzOiBbXSxcbiAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsLFxuICB2aXNpYmxlOiB0cnVlXG59O1xuXG4vKipcbiAqIERlZmF1bHQgaW5pdGlhbCBgdmlzU3RhdGVgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQGNvbnN0YW50XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBJTklUSUFMX1ZJU19TVEFURTogVmlzU3RhdGUgPSB7XG4gIC8vIG1hcCBpbmZvXG4gIG1hcEluZm86IHtcbiAgICB0aXRsZTogJycsXG4gICAgZGVzY3JpcHRpb246ICcnXG4gIH0sXG4gIC8vIGxheWVyc1xuICBsYXllcnM6IFtdLFxuICBsYXllckRhdGE6IFtdLFxuICBsYXllclRvQmVNZXJnZWQ6IFtdLFxuICBsYXllck9yZGVyOiBbXSxcbiAgbGF5ZXJPcmRlclRvQmVNZXJnZWQ6IG51bGwsXG5cbiAgLy8gZmlsdGVyc1xuICBmaWx0ZXJzOiBbXSxcbiAgZmlsdGVyVG9CZU1lcmdlZDogW10sXG5cbiAgLy8gYSBjb2xsZWN0aW9uIG9mIG11bHRpcGxlIGRhdGFzZXRcbiAgZGF0YXNldHM6IHt9LFxuICBlZGl0aW5nRGF0YXNldDogdW5kZWZpbmVkLFxuXG4gIC8vIGVmZmVjdHNcbiAgZWZmZWN0czogW10sXG4gIGVmZmVjdE9yZGVyOiBbXSxcblxuICAvLyBhbm5vdGF0aW9uc1xuICBhbm5vdGF0aW9uczogW10sXG4gIGFubm90YXRpb25zVG9CZU1lcmdlZDogW10sXG4gIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBudWxsLFxuICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDogZmFsc2UsXG5cbiAgaW50ZXJhY3Rpb25Db25maWc6IGRlZmF1bHRJbnRlcmFjdGlvbkNvbmZpZyxcbiAgaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkOiB7fSxcblxuICBsYXllckJsZW5kaW5nOiAnbm9ybWFsJyxcbiAgb3ZlcmxheUJsZW5kaW5nOiAnbm9ybWFsJyxcbiAgaG92ZXJJbmZvOiB1bmRlZmluZWQsXG4gIGNsaWNrZWQ6IHVuZGVmaW5lZCxcbiAgbW91c2VQb3M6IHt9LFxuICBtYXhEZWZhdWx0VG9vbHRpcHM6IE1BWF9ERUZBVUxUX1RPT0xUSVBTLFxuXG4gIC8vIHRoaXMgaXMgdXNlZCB3aGVuIHVzZXIgc3BsaXQgbWFwc1xuICBzcGxpdE1hcHM6IFtcbiAgICAvLyB0aGlzIHdpbGwgY29udGFpbiBhIGxpc3Qgb2Ygb2JqZWN0cyB0b1xuICAgIC8vIGRlc2NyaWJlIHRoZSBzdGF0ZSBvZiBsYXllciBhdmFpbGFiaWxpdHkgYW5kIHZpc2liaWxpdHkgZm9yIGVhY2ggbWFwXG4gICAgLy8gW1xuICAgIC8vICAge1xuICAgIC8vICAgICAgbGF5ZXJzOiB7bGF5ZXJfaWQ6IHRydWUgfCBmYWxzZX1cbiAgICAvLyAgIH1cbiAgICAvLyBdXG4gIF0sXG4gIHNwbGl0TWFwc1RvQmVNZXJnZWQ6IFtdLFxuICBpc01lcmdpbmdEYXRhc2V0czoge30sXG4gIC8vIGRlZmF1bHRzIGxheWVyIGNsYXNzZXNcbiAgbGF5ZXJDbGFzc2VzOiBMYXllckNsYXNzZXMsXG5cbiAgLy8gZGVmYXVsdCBhbmltYXRpb25cbiAgLy8gdGltZSBpbiB1bml4IHRpbWVzdGFtcCAobWlsbGlzZWNvbmRzKSAodGhlIG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIHRoZSBVbml4IEVwb2NoKVxuICBhbmltYXRpb25Db25maWc6IERFRkFVTFRfQU5JTUFUSU9OX0NPTkZJRyxcblxuICBlZGl0b3I6IERFRkFVTFRfRURJVE9SLFxuXG4gIGZpbGVMb2FkaW5nOiBmYWxzZSxcbiAgZmlsZUxvYWRpbmdQcm9ncmVzczoge30sXG4gIC8vIGZvciBsb2FkaW5nIGRhdGFzZXRzXG4gIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZTogMCxcblxuICBsb2FkZXJzOiBbXSxcbiAgbG9hZE9wdGlvbnM6IHt9LFxuXG4gIC8vIHZpc1N0YXRlTWVyZ2Vyc1xuICBtZXJnZXJzOiBWSVNfU1RBVEVfTUVSR0VSUyxcblxuICAvLyBrZXBsZXIgc2NoZW1hc1xuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hXG59O1xuXG5leHBvcnQgY29uc3QgQUNUSU9OX1RBU0tfRklUX0JPVU5EUyA9IFRhc2suZnJvbUNhbGxiYWNrKFxuICAoXywgY2IpID0+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/IHVuZGVmaW5lZCA6IGhvdmVySW5mb1xuICB9O1xuXG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgbmV3U3RhdGUpO1xuICBuZXdTdGF0ZSA9IHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXdTdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xuXG4gIGlmIChsYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQgfHwgb2xkTGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgLy8gdXBkYXRlIHNwbGl0TWFwIGxheWVyIGlkXG4gIGlmIChzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgIHNwbGl0TWFwczogbmV3U3RhdGUuc3BsaXRNYXBzLm1hcChzZXR0aW5ncyA9PiB7XG4gICAgICAgIGNvbnN0IHtbb2xkSWRdOiBvbGRMYXllck1hcCwgLi4ub3RoZXJMYXllcnN9ID0gc2V0dGluZ3MubGF5ZXJzO1xuICAgICAgICByZXR1cm4gb2xkSWQgaW4gc2V0dGluZ3MubGF5ZXJzXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIC4uLnNldHRpbmdzLFxuICAgICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgICAuLi5vdGhlckxheWVycyxcbiAgICAgICAgICAgICAgICBbbGF5ZXIuaWRdOiBvbGRMYXllck1hcFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiBzZXR0aW5ncztcbiAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSBsYXllck9yZGVyIHdpdGggbmV3IGlkXG4gIG5ld1N0YXRlID0ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGxheWVyT3JkZXI6IHJlcGxhY2VMYXllckVudHJ5SW5MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIG9sZExheWVyLmlkLCBuZXdMYXllci5pZClcbiAgfTtcblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIHZpc3VhbCBjaGFubmVsXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMge09iamVjdH0gbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclZpc3VhbENoYW5uZWxDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBuZXdDb25maWcsIG5ld1Zpc0NvbmZpZywgY2hhbm5lbH0gPSBhY3Rpb247XG4gIGlmICghb2xkTGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tvbGRMYXllci5jb25maWcuZGF0YUlkXTtcblxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBsZXQgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyhuZXdDb25maWcpO1xuICBpZiAobmV3VmlzQ29uZmlnKSBuZXdMYXllciA9IG5ld0xheWVyLnVwZGF0ZUxheWVyVmlzQ29uZmlnKG5ld1Zpc0NvbmZpZyk7XG5cbiAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsKGRhdGFzZXQsIGNoYW5uZWwpO1xuXG4gIC8vIGNhbGxpbmcgdXBkYXRlIGFuaW1hdGlvbiBkb21haW4gZmlyc3QgdG8gbWVyZ2UgYWxsIGxheWVyIGFuaW1hdGlvbiBkb21haW5cbiAgbGV0IHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihzdGF0ZSk7XG5cbiAgY29uc3QgdmlzdWFsQ2hhbm5lbCA9IG9sZExheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuICBpZiAodmlzdWFsQ2hhbm5lbD8uY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuY29sb3IgJiYgbmV3Q29uZmlnW3Zpc3VhbENoYW5uZWwuZmllbGRdKSB7XG4gICAgLy8gaWYgY29sb3IgZmllbGQgY2hhbmdlZCwgc2V0IGN1c3RvbUJyZWFrcyB0byBmYWxzZVxuICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyQ29sb3JVSSh2aXN1YWxDaGFubmVsLnJhbmdlLCB7XG4gICAgICBjb2xvclJhbmdlQ29uZmlnOiB7XG4gICAgICAgIC4uLm5ld0xheWVyLmNvbmZpZy5jb2xvclVJW3Zpc3VhbENoYW5uZWwucmFuZ2VdLmNvbG9yUmFuZ2VDb25maWcsXG4gICAgICAgIGN1c3RvbUJyZWFrczogZmFsc2VcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHVwZGF0ZWRTdGF0ZSA9IHtcbiAgICAgIC4uLnVwZGF0ZWRTdGF0ZSxcbiAgICAgIGxheWVyczogdXBkYXRlZFN0YXRlLmxheWVycy5tYXAobCA9PiAobC5pZCA9PT0gb2xkTGF5ZXIuaWQgPyBuZXdMYXllciA6IGwpKVxuICAgIH07XG4gIH1cblxuICBjb25zdCBvbGRMYXllckRhdGEgPSB1cGRhdGVkU3RhdGUubGF5ZXJEYXRhW2lkeF07XG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgdXBkYXRlZFN0YXRlLCBvbGRMYXllckRhdGEpO1xuXG4gIGlmIChcbiAgICB2aXN1YWxDaGFubmVsPy5jaGFubmVsU2NhbGVUeXBlID09PSBDSEFOTkVMX1NDQUxFUy5jb2xvciAmJlxuICAgIG5ld0NvbmZpZ1t2aXN1YWxDaGFubmVsPy5zY2FsZV0gPT09IFNDQUxFX1RZUEVTLmN1c3RvbU9yZGluYWwgJiZcbiAgICAhbmV3VmlzQ29uZmlnXG4gICkge1xuICAgIC8vIHdoZW4gc3dpdGNoaW5nIHRvIGN1c3RvbU9yZGluYWwgc2NhbGUsIGNyZWF0ZSBhIGN1c3RvbVBhbGV0dGUgaW4gY29sb3JVSSB3aXRoIHVwZGF0ZWQgY29sb3JEb21haW5cbiAgICBjb25zdCBjdXN0b21QYWxldHRlID0gaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlKHtcbiAgICAgIHNjYWxlOiBTQ0FMRV9UWVBFUy5jdXN0b21PcmRpbmFsLFxuICAgICAgZmllbGQ6IGxheWVyLmNvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXSxcbiAgICAgIG9yZGluYWxEb21haW46IGxheWVyLmNvbmZpZ1tsYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsXS5kb21haW5dLFxuICAgICAgcmFuZ2U6IGxheWVyLmNvbmZpZy52aXNDb25maWdbdmlzdWFsQ2hhbm5lbC5yYW5nZV0sXG4gICAgICBjb2xvckJyZWFrczogbnVsbFxuICAgIH0pO1xuICAgIC8vIHVwZGF0ZSBjb2xvclJhbmdlIHdpdGggbmV3IGN1c3RvbVBhbGV0dGVcbiAgICBsYXllci51cGRhdGVMYXllckNvbG9yVUkodmlzdWFsQ2hhbm5lbC5yYW5nZSwge1xuICAgICAgc2hvd0NvbG9yQ2hhcnQ6IHRydWUsXG4gICAgICBjb2xvclJhbmdlQ29uZmlnOiB7XG4gICAgICAgIC4uLmxheWVyLmNvbmZpZy5jb2xvclVJW3Zpc3VhbENoYW5uZWwucmFuZ2VdLmNvbG9yUmFuZ2VDb25maWcsXG4gICAgICAgIGN1c3RvbUJyZWFrczogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGN1c3RvbVBhbGV0dGVcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHVwZGF0ZWRTdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBgdmlzQ29uZmlnYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgcHJvcHMgPSBPYmplY3Qua2V5cyhhY3Rpb24ubmV3VmlzQ29uZmlnKTtcblxuICBjb25zdCBuZXdWaXNDb25maWcgPSB7XG4gICAgLi4ub2xkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZyxcbiAgICAuLi5hY3Rpb24ubmV3VmlzQ29uZmlnXG4gIH07XG5cbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyh7dmlzQ29uZmlnOiBuZXdWaXNDb25maWd9KTtcblxuICBsZXQgbmV4dFN0YXRlID0gc3RhdGU7XG5cbiAgLy8gRXhjbHVzaXZlIGJpdG1hcCBlZGl0aW5nOiB3aGVuIGVkaXRCb3VuZHMgaXMgdHVybmVkIG9uIGZvciBvbmUgYml0bWFwIGxheWVyLFxuICAvLyB0dXJuIGl0IG9mZiBmb3IgYWxsIG90aGVyIGJpdG1hcCBsYXllcnNcbiAgaWYgKFxuICAgIG5ld0xheWVyLnR5cGUgPT09ICdiaXRtYXAnICYmXG4gICAgYWN0aW9uLm5ld1Zpc0NvbmZpZy5lZGl0Qm91bmRzID09PSB0cnVlXG4gICkge1xuICAgIG5leHRTdGF0ZSA9IHtcbiAgICAgIC4uLm5leHRTdGF0ZSxcbiAgICAgIGxheWVyczogbmV4dFN0YXRlLmxheWVycy5tYXAoKGwsIGkpID0+IHtcbiAgICAgICAgaWYgKGkgIT09IGlkeCAmJiBsLnR5cGUgPT09ICdiaXRtYXAnICYmIGwuY29uZmlnLnZpc0NvbmZpZy5lZGl0Qm91bmRzKSB7XG4gICAgICAgICAgcmV0dXJuIGwudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICAgICAgdmlzQ29uZmlnOiB7Li4ubC5jb25maWcudmlzQ29uZmlnLCBlZGl0Qm91bmRzOiBmYWxzZX1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbDtcbiAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIGlmIChuZXdMYXllci5zaG91bGRDYWxjdWxhdGVMYXllckRhdGEocHJvcHMpKSB7XG4gICAgY29uc3Qgb2xkTGF5ZXJEYXRhID0gbmV4dFN0YXRlLmxheWVyRGF0YVtpZHhdO1xuICAgIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgbmV4dFN0YXRlLCBvbGRMYXllckRhdGEpO1xuICAgIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV4dFN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5leHRTdGF0ZSwge2xheWVyOiBuZXdMYXllciwgaWR4fSk7XG59XG5cbi8qKlxuICogUmVzZXQgYW5pbWF0aW9uIGNvbmZpZyBjdXJyZW50IHRpbWUgdG8gYSBzcGVjaWZpZWQgdmFsdWVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKlxuICovXG5leHBvcnQgY29uc3Qgc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlciA9IDxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAge3ZhbHVlfTogVmlzU3RhdGVBY3Rpb25zLlNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXJBY3Rpb25cbik6IFMgPT4ge1xuICBjb25zdCBjdXJyZW50VGltZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWVbMF0gOiB2YWx1ZTtcbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgY3VycmVudFRpbWVcbiAgICB9XG4gIH07XG4gIC8vIHVwZGF0ZSBhbmltYXRpb24gY29uZmlnIGZvciBlYWNoIGxheWVyXG4gIHJldHVybiBzdGF0ZS5sYXllcnMucmVkdWNlKChhY2N1LCBsKSA9PiB7XG4gICAgaWYgKGwuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkICYmIGwudHlwZSAhPT0gJ3RyaXAnKSB7XG4gICAgICByZXR1cm4gbGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyKGFjY3UsIHtvbGRMYXllcjogbCwgcHJvcDogJ2N1cnJlbnRUaW1lJywgY3VycmVudFRpbWV9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY3U7XG4gIH0sIG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgcHJvcGVydHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihzdGF0ZSwgYWN0aW9uKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIGFuaW1hdGlvbiB3aW5kb3dcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICB7aWQsIGFuaW1hdGlvbldpbmRvd306IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyQWN0aW9uXG4pOiBTIHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi5pZCA9PT0gaWQpO1xuXG4gIGlmICghZmlsdGVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICBhbmltYXRpb25XaW5kb3dcbiAgfTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikoc3RhdGUuZmlsdGVycylcbiAgfTtcblxuICBjb25zdCBuZXdTeW5jVGltZWxpbmVNb2RlID0gZ2V0U3luY0FuaW1hdGlvbk1vZGUobmV3RmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcik7XG5cbiAgcmV0dXJuIHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7aWQsIG1vZGU6IG5ld1N5bmNUaW1lbGluZU1vZGV9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2ZpbHRlcklkLCBuZXdGaWx0ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gU2VyaWFsaXplIHRoZSBmaWx0ZXJzIHRvIG9ubHkgY29tcGFyZSB0aGUgc2F2ZWQgcHJvcGVydGllc1xuICBjb25zdCBzZXJpYWxpemVkT2xkRmlsdGVyID0gc2VyaWFsaXplRmlsdGVyKG9sZEZpbHRlciwgc3RhdGUuc2NoZW1hKSA/PyB7Y29uZmlnOiB7fX07XG4gIGNvbnN0IHNlcmlhbGl6ZWROZXdGaWx0ZXIgPSBzZXJpYWxpemVGaWx0ZXIobmV3RmlsdGVyLCBzdGF0ZS5zY2hlbWEpO1xuICBpZiAoIXNlcmlhbGl6ZWROZXdGaWx0ZXIgfHwgaXNFcXVhbChzZXJpYWxpemVkT2xkRmlsdGVyLCBzZXJpYWxpemVkTmV3RmlsdGVyKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIElmIHRoZXJlIGFyZSBhbnkgY2hhbmdlcyB0byB0aGUgZmlsdGVyLCBhcHBseSB0aGVtXG4gIGNvbnN0IGNoYW5nZWQgPSBwaWNrQ2hhbmdlZFByb3BzKHNlcmlhbGl6ZWRPbGRGaWx0ZXIsIHNlcmlhbGl6ZWROZXdGaWx0ZXIpO1xuICBkZWxldGUgY2hhbmdlZFsnaWQnXTsgLy8gaWQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkXG5cbiAgY29uc3QgZmlsdGVySW5kZXggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlckluZGV4IDwgMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihcbiAgICBzdGF0ZSxcbiAgICBzZXRGaWx0ZXIoZmlsdGVySW5kZXgsIE9iamVjdC5rZXlzKGNoYW5nZWQpLCBPYmplY3QudmFsdWVzKGNoYW5nZWQpKVxuICApO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgcHJvcGVydHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2lkeCwgdmFsdWVJbmRleCA9IDB9ID0gYWN0aW9uO1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVycy4ke2lkeH0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChcbiAgICBBcnJheS5pc0FycmF5KGFjdGlvbi5wcm9wKSAmJlxuICAgICghQXJyYXkuaXNBcnJheShhY3Rpb24udmFsdWUpIHx8IGFjdGlvbi5wcm9wLmxlbmd0aCAhPT0gYWN0aW9uLnZhbHVlLmxlbmd0aClcbiAgKSB7XG4gICAgQ29uc29sZS5lcnJvcignRXhwZWN0aW5nIHZhbHVlIHRvIGJlIGFuIGFycmF5IG9mIHRoZSBzYW1lIGxlbmd0aCwgc2luY2UgcHJvcCBpcyBhbiBhcnJheScpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyBjb252ZXJ0IHByb3AgYW5kIHZhbHVlIHRvIGFycmF5XG4gIGNvbnN0IHByb3BzID0gdG9BcnJheShhY3Rpb24ucHJvcCk7XG4gIGNvbnN0IHZhbHVlcyA9IEFycmF5LmlzQXJyYXkoYWN0aW9uLnByb3ApID8gdG9BcnJheShhY3Rpb24udmFsdWUpIDogW2FjdGlvbi52YWx1ZV07XG5cbiAgbGV0IG5ld0ZpbHRlciA9IG9sZEZpbHRlcjtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG5cbiAgbGV0IGRhdGFzZXRJZHNUb0ZpbHRlcjogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHByb3AgPSBwcm9wc1tpXTtcbiAgICBjb25zdCB2YWx1ZSA9IHZhbHVlc1tpXTtcbiAgICAvLyBXZSBjdXJyZW50bHkgZG8gbm90IHN1cHBvcnQgcGFzc2luZyBpbiBuYW1lIGFzIGFuIGFycmF5IGludG8gX3VwZGF0ZUZpbHRlclByb3AsIHNvIHdlIGNhbGwgaXQgbXVsdGlwbGUgdGltZXMgd2l0aCBlYWNoIG5hbWVcbiAgICAvLyBTZWUgdGhlIGNvbW1lbnQgaW4gdGhlcmUgYXMgdG8gd2hhdCBzaG91bGQgYmUgYWRkcmVzc2VkXG4gICAgbGV0IHJlcztcbiAgICBpZiAocHJvcCA9PT0gJ25hbWUnICYmIEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gICAgICByZXMgPSB2YWx1ZS5yZWR1Y2UoKGFjY3UsIHYpID0+IHtcbiAgICAgICAgcmV0dXJuIF91cGRhdGVGaWx0ZXJQcm9wKGFjY3UsIG5ld0ZpbHRlciwgcHJvcCwgdiwgdmFsdWVJbmRleCk7XG4gICAgICB9LCBuZXdTdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcyA9IF91cGRhdGVGaWx0ZXJQcm9wKG5ld1N0YXRlLCBuZXdGaWx0ZXIsIHByb3AsIHZhbHVlLCB2YWx1ZUluZGV4KTtcbiAgICB9XG4gICAgbmV3RmlsdGVyID0gcmVzLmZpbHRlcjtcbiAgICBuZXdTdGF0ZSA9IHJlcy5zdGF0ZTtcbiAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBkYXRhc2V0SWRzVG9GaWx0ZXIuY29uY2F0KHJlcy5kYXRhc2V0SWRzVG9GaWx0ZXIpO1xuICB9XG5cbiAgY29uc3QgZW5sYXJnZWRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLnZpZXcgPT09IEZJTFRFUl9WSUVXX1RZUEVTLmVubGFyZ2VkKTtcblxuICBpZiAoZW5sYXJnZWRGaWx0ZXIgJiYgZW5sYXJnZWRGaWx0ZXIuaWQgIT09IG5ld0ZpbHRlci5pZCkge1xuICAgIC8vIHRoZXJlIHNob3VsZCBiZSBvbmx5IG9uZSBlbmxhcmdlZCBmaWx0ZXJcbiAgICBuZXdGaWx0ZXIudmlldyA9IEZJTFRFUl9WSUVXX1RZUEVTLnNpZGU7XG4gIH1cblxuICAvLyBzYXZlIG5ldyBmaWx0ZXJzIHRvIG5ld1N0YXRlXG4gIG5ld1N0YXRlID0gc2V0KFsnZmlsdGVycycsIGlkeF0sIG5ld0ZpbHRlciwgbmV3U3RhdGUpO1xuXG4gIC8vIGZpbHRlciBkYXRhXG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIHVuaXEoZGF0YXNldElkc1RvRmlsdGVyKSxcbiAgICBuZXdTdGF0ZS5kYXRhc2V0cyxcbiAgICBuZXdTdGF0ZS5maWx0ZXJzLFxuICAgIG5ld1N0YXRlLmxheWVyc1xuICApO1xuXG4gIG5ld1N0YXRlID0gc2V0KFsnZGF0YXNldHMnXSwgZmlsdGVyZWREYXRhc2V0cywgbmV3U3RhdGUpO1xuXG4gIC8vIG5lZWQgdG8gdXBkYXRlIGZpbHRlclBsb3QgYWZ0ZXIgZmlsdGVyIERhdGFzZXQgZm9yIHBsb3QgdG8gdXBkYXRlIG9uIGZpbHRlcmVkIHJlc3VsdFxuICBjb25zdCBmaWx0ZXJXaXRoUExvdCA9IHVwZGF0ZUZpbHRlclBsb3QobmV3U3RhdGUuZGF0YXNldHMsIG5ld1N0YXRlLmZpbHRlcnNbaWR4XSk7XG5cbiAgbmV3U3RhdGUgPSBzZXQoWydmaWx0ZXJzJywgaWR4XSwgZmlsdGVyV2l0aFBMb3QsIG5ld1N0YXRlKTtcblxuICAvLyBkYXRhSWQgaXMgYW4gYXJyYXlcbiAgLy8gcGFzcyBvbmx5IHRoZSBkYXRhc2V0IHdlIG5lZWQgdG8gdXBkYXRlXG4gIG5ld1N0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5ld1N0YXRlLCBkYXRhc2V0SWRzVG9GaWx0ZXIsIG5ld0ZpbHRlcik7XG5cbiAgLy8gSWYgdGltZSByYW5nZSBmaWx0ZXIgdmFsdWUgd2FzIHVwZGF0ZWQsIGFkanVzdCBhbmltYXRpb24gY29uZmlnXG4gIGlmIChuZXdGaWx0ZXIudHlwZSA9PT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSAmJiBwcm9wcy5pbmNsdWRlcygndmFsdWUnKSkge1xuICAgIG5ld1N0YXRlID0gYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlcihuZXdTdGF0ZSwgYWN0aW9uLmlkeCk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbmZ1bmN0aW9uIF91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCB2YWx1ZSwgZGF0YXNldHMpIHtcbiAgbGV0IG5ld0ZpbHRlciA9IGZpbHRlcjtcbiAgaWYgKGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF0pIHtcbiAgICAvLyBpZiBkYXRhSWQgYWxyZWFkeSBleGlzdFxuICAgIG5ld0ZpbHRlciA9IF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cyk7XG4gIH1cbiAgaWYgKHZhbHVlKSB7XG4gICAgY29uc3QgbmV4dFZhbHVlID0gbmV3RmlsdGVyLmRhdGFJZC5zbGljZSgpO1xuICAgIG5leHRWYWx1ZVt2YWx1ZUluZGV4XSA9IHZhbHVlO1xuICAgIG5ld0ZpbHRlciA9IHNldChbJ2RhdGFJZCddLCBuZXh0VmFsdWUsIG5ld0ZpbHRlcik7XG4gIH1cbiAgcmV0dXJuIG5ld0ZpbHRlcjtcbn1cblxuZnVuY3Rpb24gX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIGRhdGFzZXRzKSB7XG4gIGNvbnN0IGRhdGFJZCA9IGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF07XG5cbiAgaWYgKGZpbHRlci5kYXRhSWQubGVuZ3RoID09PSAxICYmIHZhbHVlSW5kZXggPT09IDApIHtcbiAgICAvLyBpZiByZW1vdmUgdGhlIG9ubHkgZGF0YUlkLCBjcmVhdGUgYW4gZW1wdHkgZmlsdGVyIGluc3RlYWQ7XG4gICAgcmV0dXJuIGdldERlZmF1bHRGaWx0ZXIoe2lkOiBmaWx0ZXIuaWR9KTtcbiAgfVxuXG4gIGlmIChkYXRhSWQpIHtcbiAgICBmaWx0ZXIgPSByZW1vdmVGaWx0ZXJQbG90KGZpbHRlciwgZGF0YUlkKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgcHJvcCBvZiBbJ2RhdGFJZCcsICduYW1lJywgJ2ZpZWxkSWR4JywgJ2dwdUNoYW5uZWwnXSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGZpbHRlcltwcm9wXSkpIHtcbiAgICAgIGNvbnN0IG5leHRWYWwgPSBmaWx0ZXJbcHJvcF0uc2xpY2UoKTtcbiAgICAgIG5leHRWYWwuc3BsaWNlKHZhbHVlSW5kZXgsIDEpO1xuICAgICAgZmlsdGVyID0gc2V0KFtwcm9wXSwgbmV4dFZhbCwgZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICAvLyBtZXJnZUZpZWxkRG9tYWluIGZvciB0aGUgcmVtYWluaW5nIGZpZWxkc1xuICBjb25zdCBkb21haW5TdGVwcyA9IG1lcmdlRmlsdGVyRG9tYWluKGZpbHRlciwgZGF0YXNldHMpO1xuXG4gIGNvbnN0IG5leHRGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIC8vIHZhbHVlOiBuZXh0VmFsdWUsXG4gICAgLi4uKGRvbWFpblN0ZXBzID8ge2RvbWFpbjogZG9tYWluU3RlcHM/LmRvbWFpbiwgc3RlcDogZG9tYWluU3RlcHM/LnN0ZXB9IDoge30pXG4gIH07XG5cbiAgY29uc3QgbmV4dFZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihuZXh0RmlsdGVyLnZhbHVlLCBuZXh0RmlsdGVyKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5uZXh0RmlsdGVyLFxuICAgIHZhbHVlOiBuZXh0VmFsdWVcbiAgfTtcbn1cblxuLyoqICpcbiAqIFVwZGF0ZXMgYSBzaW5nbGUgcHJvcGVydHkgb2YgYSBmaWx0ZXJcbiAqL1xuZnVuY3Rpb24gX3VwZGF0ZUZpbHRlclByb3Aoc3RhdGUsIGZpbHRlciwgcHJvcCwgdmFsdWUsIHZhbHVlSW5kZXgsIGRhdGFzZXRJZHM/KSB7XG4gIGxldCBkYXRhc2V0SWRzVG9GaWx0ZXI6IHN0cmluZ1tdID0gW107XG4gIHN3aXRjaCAocHJvcCkge1xuICAgIC8vIFRPRE86IE5leHQgUFIgZm9yIFVJIGlmIHdlIHVwZGF0ZSBmaWx0ZXJEYXRhSWQsIHdlIG5lZWQgdG8gY29uc2lkZXIgdHdvIGNhc2VzOlxuICAgIC8vIDEuIGRhdGFJZCBpcyBlbXB0eTogY3JlYXRlIGEgZGVmYXVsdCBmaWx0ZXJcbiAgICAvLyAyLiBBZGQgYSBuZXcgZGF0YXNldCBpZFxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMuZGF0YUlkOiB7XG4gICAgICBjb25zdCBvbGREYXRhSWQgPSBbLi4uZmlsdGVyLmRhdGFJZF07XG4gICAgICBmaWx0ZXIgPSBfdXBkYXRlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgdmFsdWUsIHN0YXRlLmRhdGFzZXRzKTtcbiAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IHVuaXEoWy4uLm9sZERhdGFJZCwgLi4uZmlsdGVyLmRhdGFJZF0pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMubmFtZToge1xuICAgICAgLy8gd2UgYXJlIHN1cHBvcnRpbmcgdGhlIGN1cnJlbnQgZnVuY3Rpb25hbGl0eVxuICAgICAgLy8gVE9ETzogTmV4dCBQUiBmb3IgVUkgZmlsdGVyIG5hbWUgd2lsbCBvbmx5IHVwZGF0ZSBmaWx0ZXIgbmFtZSBidXQgaXQgd29uJ3QgaGF2ZSBzaWRlIGVmZmVjdHNcbiAgICAgIC8vIHdlIGFyZSBnb25uYSB1c2UgcGFpciBvZiBkYXRhc2V0cyBhbmQgZmllbGRJZHggdG8gdXBkYXRlIHRoZSBmaWx0ZXJcbiAgICAgIGNvbnN0IGRhdGFzZXRJZCA9IGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF07XG4gICAgICBjb25zdCB7ZmlsdGVyOiB1cGRhdGVkRmlsdGVyLCBkYXRhc2V0OiBuZXdEYXRhc2V0fSA9IGFwcGx5RmlsdGVyRmllbGROYW1lKFxuICAgICAgICBmaWx0ZXIsXG4gICAgICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgICAgICBkYXRhc2V0SWQsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB2YWx1ZUluZGV4LFxuICAgICAgICB7bWVyZ2VEb21haW46IHZhbHVlSW5kZXggPiAwfVxuICAgICAgKTtcbiAgICAgIGlmICh1cGRhdGVkRmlsdGVyKSB7XG4gICAgICAgIGZpbHRlciA9IHVwZGF0ZWRGaWx0ZXI7XG4gICAgICAgIGlmIChmaWx0ZXIuZ3B1KSB7XG4gICAgICAgICAgZmlsdGVyID0gc2V0RmlsdGVyR3B1TW9kZShmaWx0ZXIsIHN0YXRlLmZpbHRlcnMpO1xuICAgICAgICAgIGZpbHRlciA9IGFzc2lnbkdwdUNoYW5uZWwoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZSA9IHNldChbJ2RhdGFzZXRzJywgZGF0YXNldElkXSwgbmV3RGF0YXNldCwgc3RhdGUpO1xuICAgICAgICAvLyByZW1vdmUgZmlsdGVyIFBsb3QgYXQgZGF0YXNldElkLCBzbyBpdCB3aWxsIGJlIHJlY2FsY3VsYXRlZFxuICAgICAgICBmaWx0ZXIgPSByZW1vdmVGaWx0ZXJQbG90KGZpbHRlciwgZGF0YXNldElkKTtcblxuICAgICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSB1cGRhdGVkRmlsdGVyLmRhdGFJZDtcbiAgICAgIH1cbiAgICAgIC8vIG9ubHkgZmlsdGVyIHRoZSBjdXJyZW50IGRhdGFzZXRcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMubGF5ZXJJZDoge1xuICAgICAgLy8gV2UgbmVlZCB0byB1cGRhdGUgb25seSBkYXRhc2V0SWQvcyBpZiB3ZSBoYXZlIGFkZGVkL3JlbW92ZWQgbGF5ZXJzXG4gICAgICAvLyAtIGNoZWNrIGZvciBsYXllcklkIGNoYW5nZXMgKFhPUiB3b3JrcyBiZWNhdXNlIG9mIHN0cmluZyB2YWx1ZXMpXG4gICAgICAvLyBpZiBubyBkaWZmZXJlbmNlcyBiZXR3ZWVuIGxheWVySWRzLCBkb24ndCBkbyBhbnkgZmlsdGVyaW5nXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBjb25zdCBsYXllcklkRGlmZmVyZW5jZSA9IHhvcih2YWx1ZSwgZmlsdGVyLmxheWVySWQpO1xuXG4gICAgICBjb25zdCBsYXllckRhdGFJZHMgPSB1bmlxPHN0cmluZz4oXG4gICAgICAgIGxheWVySWREaWZmZXJlbmNlXG4gICAgICAgICAgLm1hcChsaWQgPT5cbiAgICAgICAgICAgIGdldChcbiAgICAgICAgICAgICAgc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsaWQpLFxuICAgICAgICAgICAgICBbJ2NvbmZpZycsICdkYXRhSWQnXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKGQgPT4gZCkgYXMgc3RyaW5nW11cbiAgICAgICk7XG5cbiAgICAgIC8vIG9ubHkgZmlsdGVyIGRhdGFzZXRzSWRzXG4gICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBsYXllckRhdGFJZHM7XG5cbiAgICAgIC8vIFVwZGF0ZSBuZXdGaWx0ZXIgZGF0YUlkc1xuICAgICAgY29uc3QgbmV3RGF0YUlkcyA9IHVuaXE8c3RyaW5nPihcbiAgICAgICAgdmFsdWVcbiAgICAgICAgICA/Lm1hcChsaWQgPT5cbiAgICAgICAgICAgIGdldChcbiAgICAgICAgICAgICAgc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsaWQpLFxuICAgICAgICAgICAgICBbJ2NvbmZpZycsICdkYXRhSWQnXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKGQgPT4gZCkgYXMgc3RyaW5nW11cbiAgICAgICk7XG5cbiAgICAgIGZpbHRlciA9IHtcbiAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICBsYXllcklkOiB2YWx1ZSxcbiAgICAgICAgZGF0YUlkOiBuZXdEYXRhSWRzXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIGZpbHRlciA9IHNldChbcHJvcF0sIHZhbHVlLCBmaWx0ZXIpO1xuICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gWy4uLmZpbHRlci5kYXRhSWRdO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4ge2ZpbHRlciwgZGF0YXNldElkcywgZGF0YXNldElkc1RvRmlsdGVyLCBzdGF0ZX07XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1zdGF0ZW1lbnRzICovXG5cbi8qKlxuICogU2V0IHRoZSBwcm9wZXJ0eSBvZiBhIGZpbHRlciBwbG90XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RmlsdGVyUGxvdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkeCwgbmV3UHJvcH06IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJQbG90VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoIXN0YXRlLmZpbHRlcnNbaWR4XSkge1xuICAgIENvbnNvbGUuZXJyb3IoYGZpbHRlcnNbJHtpZHh9XSBpcyB1bmRlZmluZWRgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IG5ld0ZpbHRlciA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcblxuICBmb3IgKGNvbnN0IHByb3AgaW4gbmV3UHJvcCkge1xuICAgIGlmIChwcm9wID09PSAncGxvdFR5cGUnKSB7XG4gICAgICBuZXdGaWx0ZXIgPSBwaWNrXygncGxvdFR5cGUnKShtZXJnZV8obmV3UHJvcC5wbG90VHlwZSkpKG5ld0ZpbHRlcik7XG4gICAgfSBlbHNlIGlmIChwcm9wID09PSAneUF4aXMnKSB7XG4gICAgICBjb25zdCBjaGFydFR5cGUgPSBuZXdQcm9wLnlBeGlzID8gUExPVF9UWVBFUy5saW5lQ2hhcnQgOiBQTE9UX1RZUEVTLmhpc3RvZ3JhbTtcblxuICAgICAgbmV3RmlsdGVyID0gcGlja18oJ3Bsb3RUeXBlJykobWVyZ2VfKHt0eXBlOiBjaGFydFR5cGV9KSkobWVyZ2VfKG5ld1Byb3ApKG5ld0ZpbHRlcikpO1xuICAgIH1cbiAgfVxuXG4gIG5ld0ZpbHRlciA9IHVwZGF0ZUZpbHRlclBsb3Qoc3RhdGUuZGF0YXNldHMsIG5ld0ZpbHRlcik7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT4gKGkgPT09IGlkeCA/IG5ld0ZpbHRlciA6IGYpKVxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PlxuICAhYWN0aW9uLmRhdGFJZFxuICAgID8gc3RhdGVcbiAgICA6IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGZpbHRlcnM6IFsuLi5zdGF0ZS5maWx0ZXJzLCBnZXREZWZhdWx0RmlsdGVyKHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIGlkOiBhY3Rpb24uaWR9KV1cbiAgICAgIH07XG5cbi8qKlxuICogQ3JlYXRlIG9yIHVwZGF0ZSBhIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5DcmVhdGVPclVwZGF0ZUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkLCBkYXRhSWQsIGZpZWxkLCB2YWx1ZX0gPSBhY3Rpb247XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGNvbnN0IG9yaWdpbmFsSW5kZXggPSBuZXdTdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGlkKTtcbiAgbGV0IGZpbHRlckluZGV4ID0gb3JpZ2luYWxJbmRleDtcbiAgaWYgKCFpZCAmJiAhZGF0YUlkKSB7XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG4gIGlmIChvcmlnaW5hbEluZGV4IDwgMCAmJiBkYXRhSWQpIHtcbiAgICBuZXdTdGF0ZSA9IGFkZEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtkYXRhSWR9KTtcbiAgICBpZiAobmV3U3RhdGUuZmlsdGVycy5sZW5ndGggIT09IHN0YXRlLmZpbHRlcnMubGVuZ3RoICsgMSkge1xuICAgICAgLy8gTm8gbmV3IGZpbHRlciB3YXMgYWRkZWRcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgLy8gSGVyZSB3ZSBhcmUgYXNzdW1pbmcgdGhhdCB0aGUgZmlsdGVyIHdhcyBhZGRlZCBhdCB0aGUgZW5kXG4gICAgZmlsdGVySW5kZXggPSBuZXdTdGF0ZS5maWx0ZXJzLmxlbmd0aCAtIDE7XG4gICAgbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJbmRleF0gPSB7XG4gICAgICAuLi5uZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlckluZGV4XSxcbiAgICAgIC4uLihpZCA/IHtpZH0gOiBudWxsKVxuICAgIH07XG4gIH1cblxuICAvLyBObyBuZWVkIHRvIHVwZGF0ZSB0aGlzIGlmIGl0J3MgYSBuZXdseSBjcmVhdGVkIGZpbHRlclxuICAvLyBGaXJzdCB3ZSBtYWtlIHN1cmUgYWxsIHRoZSBkYXRhSWRzIHRoYXQgZmllbGRzIHJlZmVyIHRvIGFyZSB1cGRhdGVkXG4gIGlmIChvcmlnaW5hbEluZGV4ID49IDAgJiYgZGF0YUlkKSB7XG4gICAgLy8gSWYgdGhlIGRhdGFJZCBpcyBhbiBhcnJheSwgd2UgbmVlZCB0byB1cGRhdGUgZWFjaCBvbmUgaW5kaXZpZHVhbGx5IGFzIHRoZXkgbmVlZCBhIGNvcnJlY3QgdmFsdWVJbmRleCBwYXNzZWRcbiAgICBuZXdTdGF0ZSA9IChBcnJheS5pc0FycmF5KGRhdGFJZCkgPyBkYXRhSWQgOiBbZGF0YUlkXSkucmVkdWNlKChhY2N1LCBkLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoYWNjdSwge1xuICAgICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgICBwcm9wOiAnZGF0YUlkJyxcbiAgICAgICAgdmFsdWU6IGQsXG4gICAgICAgIHZhbHVlSW5kZXg6IGluZGV4XG4gICAgICB9KTtcbiAgICB9LCBuZXdTdGF0ZSk7XG4gIH1cbiAgLy8gVGhlbiB3ZSB1cGRhdGUgdGhlIGZpZWxkc1xuICBpZiAoZmllbGQpIHtcbiAgICAvLyBJZiB0aGUgZmllbGQgaXMgYW4gYXJyYXksIHdlIG5lZWQgdG8gdXBkYXRlIGVhY2ggZmllbGQgaW5kaXZpZHVhbGx5IGFzIHRoZXkgbmVlZCBhIGNvcnJlY3QgdmFsdWVJbmRleCBwYXNzZWRcbiAgICBuZXdTdGF0ZSA9IChBcnJheS5pc0FycmF5KGZpZWxkKSA/IGZpZWxkIDogW2ZpZWxkXSkucmVkdWNlKChhY2N1LCBmLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoYWNjdSwge1xuICAgICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgICBwcm9wOiAnbmFtZScsXG4gICAgICAgIHZhbHVlOiBmLFxuICAgICAgICB2YWx1ZUluZGV4OiBpbmRleFxuICAgICAgfSk7XG4gICAgfSwgbmV3U3RhdGUpO1xuICB9XG4gIC8vIFRoZW4gd2UgdXBkYXRlIHRoZSB2YWx1ZSBzZXBhcmF0ZWx5XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWR4OiBmaWx0ZXJJbmRleCwgcHJvcDogJ3ZhbHVlJywgdmFsdWV9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogU2V0IGxheWVyIGNvbG9yIHBhbGV0dGUgdWkgc3RhdGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvbGRMYXllciwgcHJvcCwgbmV3Q29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLkxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgb2xkVml4Q29uZmlnID0gb2xkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1twcm9wXTtcbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbG9yVUkocHJvcCwgbmV3Q29uZmlnKTtcbiAgY29uc3QgbmV3VmlzQ29uZmlnID0gbmV3TGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1twcm9wXTtcbiAgaWYgKG9sZFZpeENvbmZpZyAhPT0gbmV3VmlzQ29uZmlnKSB7XG4gICAgcmV0dXJuIGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgICAgb2xkTGF5ZXIsXG4gICAgICBuZXdWaXNDb25maWc6IHtcbiAgICAgICAgW3Byb3BdOiBuZXdWaXNDb25maWdcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3RhdGUubGF5ZXJzLm1hcChsID0+IChsLmlkID09PSBvbGRMYXllci5pZCA/IG5ld0xheWVyIDogbCkpXG4gIH07XG59O1xuXG4vKipcbiAqIFN0YXJ0IGFuZCBlbmQgZmlsdGVyIGFuaW1hdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRmlsdGVyQW5pbWF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PiAoaSA9PT0gYWN0aW9uLmlkeCA/IHsuLi5mLCBpc0FuaW1hdGluZzogIWYuaXNBbmltYXRpbmd9IDogZikpXG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRmlsdGVyQW5pbWF0aW9uQ29uZmlnKGNvbmZpZzogQW5pbWF0aW9uQ29uZmlnIHwgRmlsdGVyQW5pbWF0aW9uQ29uZmlnKTogYm9vbGVhbiB7XG4gIHJldHVybiAnZGF0YUlkJyBpbiBjb25maWcgJiYgJ2FuaW1hdGlvbldpbmRvdycgaW4gY29uZmlnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QW5pbWF0aW9uQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRBbmltYXRpb25Db25maWdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb25maWd9ID0gYWN0aW9uO1xuICBpZiAoaXNGaWx0ZXJBbmltYXRpb25Db25maWcoY29uZmlnKSkge1xuICAgIC8vIEZpbmQgZmlsdGVyIHVzZWQgZm9yIGFuaW1hdGlvblxuICAgIC8vIEFzc3VtaW5nIHRoZXJlJ3Mgb25seSBvbmUgZmlsdGVyIHVzZWQgZm9yIGFuaW1hdGlvbiwgc2VlIHNldEZpbHRlclZpZXdVcGRhdGVyXG4gICAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gIWlzU2lkZUZpbHRlcihmKSk7XG4gICAgaWYgKCFmaWx0ZXIpIHtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgY29uc3QgbmV3RmlsdGVyID0gey4uLmZpbHRlciwgLi4uY29uZmlnfTtcbiAgICByZXR1cm4gYXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyKHN0YXRlLCBhcHBseUZpbHRlckNvbmZpZyhmaWx0ZXIuaWQsIG5ld0ZpbHRlcikpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICAgIC4uLmNvbmZpZ1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgIGlzQW5pbWF0aW5nOiAhc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmlzQW5pbWF0aW5nXG4gIH1cbn0pO1xuXG4vKipcbiAqIEhpZGUgYW5kIHNob3cgbGF5ZXIgYW5pbWF0aW9uIGNvbnRyb2xcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVMYXllckFuaW1hdGlvbkNvbnRyb2xVcGRhdGVyID0gKHN0YXRlOiBWaXNTdGF0ZSk6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBhbmltYXRpb25Db25maWc6IHtcbiAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgaGlkZUNvbnRyb2w6ICFzdGF0ZS5hbmltYXRpb25Db25maWcuaGlkZUNvbnRyb2xcbiAgfVxufSk7XG5cbi8qKlxuICogQ2hhbmdlIGZpbHRlciBhbmltYXRpb24gc3BlZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+IChpID09PSBhY3Rpb24uaWR4ID8gey4uLmYsIHNwZWVkOiBhY3Rpb24uc3BlZWR9IDogZikpXG59KTtcblxuLyoqXG4gKiBVcGRhdGUgYW5pbWF0aW9uIHNwZWVkIHdpdGggdGhlIHZlcnRpY2FsIHNwZWVkIHNsaWRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7c3BlZWR9OiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIHNwZWVkXG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBTaG93IGxhcmdlciB0aW1lIGZpbHRlciBhdCBib3R0b20gZm9yIHRpbWUgcGxheWJhY2sgKGFwcGx5IHRvIHRpbWUgZmlsdGVyIG9ubHkpXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RmlsdGVyVmlld1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyVmlld1VwZGF0ZXJBY3Rpb25cbikgPT4ge1xuICBjb25zdCB7dmlldywgaWR4fSA9IGFjdGlvbjtcbiAgY29uc3Qgc2hvdWxkUmVzZXRPdGhlckZpbHRlcnNWaWV3ID0gdmlldyA9PT0gRklMVEVSX1ZJRVdfVFlQRVMuZW5sYXJnZWQ7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+XG4gICAgICBpID09PSBpZHhcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgdmlld1xuICAgICAgICAgIH1cbiAgICAgICAgOiBzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXdcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgdmlldzogRklMVEVSX1ZJRVdfVFlQRVMuc2lkZVxuICAgICAgICAgIH1cbiAgICAgICAgOiBmXG4gICAgKVxuICB9O1xufTtcblxuLyoqXG4gKiBUb2dnbGVzIGZpbHRlciBmZWF0dXJlIHZpc2liaWxpdHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2FjdGlvbi5pZHhdO1xuICBjb25zdCBpc1Zpc2libGUgPSBnZXQoZmlsdGVyLCBbJ3ZhbHVlJywgJ3Byb3BlcnRpZXMnLCAnaXNWaXNpYmxlJ10pO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIoc3RhdGUsIHtcbiAgICBpZHg6IGFjdGlvbi5pZHgsXG4gICAgcHJvcDogJ2VuYWJsZWQnLFxuICAgIHZhbHVlOiAhaXNWaXNpYmxlXG4gIH0pO1xuXG4gIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogYWN0aW9uLmlkeCxcbiAgICBwcm9wOiAndmFsdWUnLFxuICAgIHZhbHVlOiBmZWF0dXJlVG9GaWx0ZXJWYWx1ZShmaWx0ZXIudmFsdWUsIGZpbHRlci5pZCwge1xuICAgICAgaXNWaXNpYmxlOiAhaXNWaXNpYmxlXG4gICAgfSlcbiAgfSk7XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVGaWx0ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkeH0gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhSWQsIGlkfSA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcblxuICBjb25zdCBuZXdGaWx0ZXJzID0gW1xuICAgIC4uLnN0YXRlLmZpbHRlcnMuc2xpY2UoMCwgaWR4KSxcbiAgICAuLi5zdGF0ZS5maWx0ZXJzLnNsaWNlKGlkeCArIDEsIHN0YXRlLmZpbHRlcnMubGVuZ3RoKVxuICBdO1xuXG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKGRhdGFJZCwgc3RhdGUuZGF0YXNldHMsIG5ld0ZpbHRlcnMsIHN0YXRlLmxheWVycyk7XG4gIGNvbnN0IG5ld0VkaXRvciA9XG4gICAgZ2V0RmlsdGVySWRJbkZlYXR1cmUoc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZSkgPT09IGlkXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gICAgICAgIH1cbiAgICAgIDogc3RhdGUuZWRpdG9yO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHNldChbJ2ZpbHRlcnMnXSwgbmV3RmlsdGVycywgc3RhdGUpO1xuICBuZXdTdGF0ZSA9IHNldChbJ2RhdGFzZXRzJ10sIGZpbHRlcmVkRGF0YXNldHMsIG5ld1N0YXRlKTtcbiAgbmV3U3RhdGUgPSBzZXQoWydlZGl0b3InXSwgbmV3RWRpdG9yLCBuZXdTdGF0ZSk7XG5cbiAgcmV0dXJuIHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXdTdGF0ZSwgZGF0YUlkLCB1bmRlZmluZWQpO1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRMYXllclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGxldCBuZXdMYXllcjtcbiAgbGV0IG5ld0xheWVyRGF0YTtcbiAgaWYgKGFjdGlvbi5jb25maWcpIHtcbiAgICBuZXdMYXllciA9IGNyZWF0ZUxheWVyRnJvbUNvbmZpZyhzdGF0ZSwgYWN0aW9uLmNvbmZpZyk7XG4gICAgaWYgKCFuZXdMYXllcikge1xuICAgICAgQ29uc29sZS53YXJuKFxuICAgICAgICAnRmFpbGVkIHRvIGNyZWF0ZSBsYXllciBmcm9tIGNvbmZpZywgaXQgdXN1YWxseSBtZWFucyB0aGUgY29uZmlnIGlzIG5vdCBiZSBpbiBjb3JyZWN0IGZvcm1hdCcsXG4gICAgICAgIGFjdGlvbi5jb25maWdcbiAgICAgICk7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSk7XG4gICAgbmV3TGF5ZXIgPSByZXN1bHQubGF5ZXI7XG4gICAgbmV3TGF5ZXJEYXRhID0gcmVzdWx0LmxheWVyRGF0YTtcbiAgfSBlbHNlIHtcbiAgICAvLyBjcmVhdGUgYW4gZW1wdHkgbGF5ZXIgd2l0aCBhIHNwZWNpZmljIGRhdGFzZXQgb3IgYSBkZWZhdWx0IG9uZVxuICAgIGNvbnN0IGRlZmF1bHREYXRhc2V0ID0gYWN0aW9uLmRhdGFzZXRJZCA/PyBPYmplY3Qua2V5cyhzdGF0ZS5kYXRhc2V0cylbMF07XG4gICAgbmV3TGF5ZXIgPSBuZXcgTGF5ZXIoe1xuICAgICAgaXNWaXNpYmxlOiB0cnVlLFxuICAgICAgaXNDb25maWdBY3RpdmU6IHRydWUsXG4gICAgICBkYXRhSWQ6IGRlZmF1bHREYXRhc2V0XG4gICAgfSk7XG4gICAgbmV3TGF5ZXJEYXRhID0ge307XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBbLi4uc3RhdGUubGF5ZXJzLCBuZXdMYXllcl0sXG4gICAgbGF5ZXJEYXRhOiBbLi4uc3RhdGUubGF5ZXJEYXRhLCBuZXdMYXllckRhdGFdLFxuICAgIC8vIGFkZCBuZXcgbGF5ZXIgYXQgdGhlIHRvcFxuICAgIGxheWVyT3JkZXI6IFtuZXdMYXllci5pZCwgLi4uc3RhdGUubGF5ZXJPcmRlcl0sXG4gICAgc3BsaXRNYXBzOiBhZGROZXdMYXllcnNUb1NwbGl0TWFwKHN0YXRlLnNwbGl0TWFwcywgbmV3TGF5ZXIpXG4gIH07XG5cbiAgaWYgKG5ld0xheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogcmVtb3ZlIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlTGF5ZXJVcGRhdGVyPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBUIHtcbiAgY29uc3QgaWR4ID0gTnVtYmVyLmlzRmluaXRlKGlkKVxuICAgID8gLy8gc3VwcG9ydCBvbGRlciBBUEksIHJlbW92ZSBsYXllciBieSBpZHhcbiAgICAgIE51bWJlcihpZClcbiAgICA6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8IGlkeCA+PSBzdGF0ZS5sYXllcnMubGVuZ3RoKSB7XG4gICAgLy8gaW52YWxpZCBpbmRleFxuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCByZW1vdmUgbGF5ZXIgd2l0aCBpbnZhbGlkIGlkfGlkeCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtsYXllcnMsIGxheWVyRGF0YSwgbGF5ZXJPcmRlciwgY2xpY2tlZCwgaG92ZXJJbmZvfSA9IHN0YXRlO1xuICBjb25zdCBsYXllclRvUmVtb3ZlID0gbGF5ZXJzW2lkeF07XG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogZmlsdGVyT3V0QnlJZChsYXllclRvUmVtb3ZlLmlkKShsYXllcnMpLFxuICAgIGxheWVyRGF0YTogcmVtb3ZlRWxlbWVudEF0SW5kZXgoaWR4KShsYXllckRhdGEpLFxuICAgIGxheWVyT3JkZXI6IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihsYXllck9yZGVyLCBsYXllclRvUmVtb3ZlLmlkKSxcbiAgICBjbGlja2VkOiBsYXllclRvUmVtb3ZlLmlzTGF5ZXJIb3ZlcmVkKGNsaWNrZWQpID8gdW5kZWZpbmVkIDogY2xpY2tlZCxcbiAgICBob3ZlckluZm86IGxheWVyVG9SZW1vdmUuaXNMYXllckhvdmVyZWQoaG92ZXJJbmZvKSA/IHVuZGVmaW5lZCA6IGhvdmVySW5mbyxcbiAgICBzcGxpdE1hcHM6IHJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyhzdGF0ZS5zcGxpdE1hcHMsIGxheWVyVG9SZW1vdmUpXG4gICAgLy8gVE9ETzogdXBkYXRlIGZpbHRlcnMsIGNyZWF0ZSBoZWxwZXIgdG8gcmVtb3ZlIGxheWVyIGZvcm0gZmlsdGVyIChyZW1vdmUgbGF5ZXJpZCBhbmQgZGF0YWlkKSBpZiBtYXBwZWRcbiAgfTtcblxuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbn1cblxuLyoqXG4gKiBSZW9yZGVyIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVvcmRlckxheWVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7b3JkZXJ9OiBWaXNTdGF0ZUFjdGlvbnMuUmVvcmRlckxheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGxheWVyT3JkZXI6IG9yZGVyXG59KTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgbGF5ZXIgZ3JvdXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRMYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRMYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TmV3TGF5ZXJHcm91cChhY3Rpb24pO1xuICBsZXQgbmV3TGF5ZXJPcmRlciA9IFsuLi5zdGF0ZS5sYXllck9yZGVyXTtcblxuICBpZiAoYWN0aW9uLmxheWVyT3JkZXIpIHtcbiAgICBhY3Rpb24ubGF5ZXJPcmRlci5mb3JFYWNoKGxheWVySWQgPT4ge1xuICAgICAgbmV3TGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihuZXdMYXllck9yZGVyLCBsYXllcklkIGFzIHN0cmluZyk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyT3JkZXI6IGFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlcihuZXdMYXllck9yZGVyLCBsYXllckdyb3VwKVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBsYXllciBncm91cCBhbmQgYWxsIGxheWVycyB3aXRoaW4gaXRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVMYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVMYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7aWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwVG9SZW1vdmUgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgaWQpO1xuICBpZiAoIWxheWVyR3JvdXBUb1JlbW92ZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGxheWVySWRzVG9SZW1vdmUgPSBnZXRGbGF0TGF5ZXJPcmRlcihsYXllckdyb3VwVG9SZW1vdmUubGF5ZXJPcmRlcik7XG4gIGxldCBuZXdTdGF0ZSA9IHsuLi5zdGF0ZX07XG5cbiAgbGF5ZXJJZHNUb1JlbW92ZS5mb3JFYWNoKGxheWVySWQgPT4ge1xuICAgIGNvbnN0IGlkeCA9IG5ld1N0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBsYXllcklkKTtcbiAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgIG5ld1N0YXRlID0gcmVtb3ZlTGF5ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWQ6IGxheWVySWR9KTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IG5ld0xheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgbGF5ZXJHcm91cFRvUmVtb3ZlKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyXG4gIH07XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBhIGxheWVyIGdyb3VwIChsYWJlbCwgdmlzaWJpbGl0eSwgbGF5ZXIgbWVtYmVyc2hpcClcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVMYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVMYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7aWQsIG9wdGlvbnN9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIGlkKTtcbiAgaWYgKCFsYXllckdyb3VwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0gey4uLnN0YXRlfTtcblxuICBpZiAob3B0aW9ucy5sYXllck9yZGVyKSB7XG4gICAgbmV3U3RhdGUubGF5ZXJPcmRlciA9IFsuLi5sYXllckdyb3VwLmxheWVyT3JkZXIsIC4uLm5ld1N0YXRlLmxheWVyT3JkZXJdO1xuICAgIG9wdGlvbnMubGF5ZXJPcmRlci5mb3JFYWNoKGxheWVySWQgPT4ge1xuICAgICAgbmV3U3RhdGUubGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihcbiAgICAgICAgbmV3U3RhdGUubGF5ZXJPcmRlcixcbiAgICAgICAgbGF5ZXJJZCBhcyBzdHJpbmdcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBuZXdMYXllckdyb3VwID0ge1xuICAgIC4uLmxheWVyR3JvdXAsXG4gICAgLi4ub3B0aW9uc1xuICB9O1xuXG4gIGlmIChuZXdMYXllckdyb3VwLmlzVmlzaWJsZSAhPT0gbGF5ZXJHcm91cC5pc1Zpc2libGUpIHtcbiAgICBjb25zdCBsYXllcklkcyA9IGdldEZsYXRMYXllck9yZGVyKG5ld0xheWVyR3JvdXAubGF5ZXJPcmRlcik7XG4gICAgbmV3U3RhdGUgPSBuZXdTdGF0ZS5sYXllcnMucmVkdWNlKChhY2MsIGxheWVyKSA9PiB7XG4gICAgICBpZiAobGF5ZXJJZHMuaW5jbHVkZXMobGF5ZXIuaWQpKSB7XG4gICAgICAgIHJldHVybiBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoYWNjLCB7XG4gICAgICAgICAgb2xkTGF5ZXI6IGxheWVyLFxuICAgICAgICAgIG5ld0NvbmZpZzoge2lzVmlzaWJsZTogbmV3TGF5ZXJHcm91cC5pc1Zpc2libGV9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBuZXdTdGF0ZSk7XG4gIH1cblxuICBjb25zdCBuZXdMYXllck9yZGVyID0gdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBuZXdMYXllckdyb3VwKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyXG4gIH07XG59O1xuXG4vKipcbiAqIEFkZCBhIGxheWVyIHRvIGEgbGF5ZXIgZ3JvdXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtsYXllckdyb3VwSWQsIGxheWVySWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIGxheWVyR3JvdXBJZCk7XG4gIGNvbnN0IGxheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsYXllcklkKTtcbiAgaWYgKCFsYXllckdyb3VwIHx8ICFsYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGlmIChsYXllckdyb3VwLmxheWVyT3JkZXIuZmluZChlbnRyeSA9PiBlbnRyeSA9PT0gbGF5ZXJJZCkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdHcm91cExheWVyT3JkZXIgPSBhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIobGF5ZXJHcm91cC5sYXllck9yZGVyLCBsYXllcklkKTtcbiAgcmV0dXJuIHVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyKHN0YXRlLCB7XG4gICAgaWQ6IGxheWVyR3JvdXBJZCxcbiAgICBvcHRpb25zOiB7bGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyfVxuICB9KTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgbGF5ZXIgZnJvbSBhIGxheWVyIGdyb3VwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlTGF5ZXJGcm9tTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlTGF5ZXJGcm9tTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2xheWVyR3JvdXBJZCwgbGF5ZXJJZH0gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgbGF5ZXJHcm91cElkKTtcbiAgaWYgKCFsYXllckdyb3VwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3TGF5ZXJHcm91cE9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKGxheWVyR3JvdXAubGF5ZXJPcmRlciwgbGF5ZXJJZCk7XG4gIHJldHVybiB1cGRhdGVMYXllckdyb3VwVXBkYXRlcihzdGF0ZSwge1xuICAgIGlkOiBsYXllckdyb3VwSWQsXG4gICAgb3B0aW9uczoge2xheWVyT3JkZXI6IG5ld0xheWVyR3JvdXBPcmRlcn1cbiAgfSk7XG59O1xuXG4vKipcbiAqIFN3YXAgbGF5ZXIgb3JkZXIgZW50cmllcyBiZXR3ZWVuIHJvb3QgYW5kIGdyb3Vwc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBjb25zdCBzd2FwTGF5ZXJPcmRlckVudHJpZXNVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlN3YXBMYXllck9yZGVyRW50cmllc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge29yaWdpbkxheWVySWQsIGRlc3RpbmF0aW9uTGF5ZXJJZCwgb3JpZ2luTGF5ZXJHcm91cElkLCBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZH0gPSBhY3Rpb247XG5cbiAgaWYgKCFvcmlnaW5MYXllckdyb3VwSWQgJiYgIWRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgY29uc3Qgb3JpZ2luSW5kZXggPSBzdGF0ZS5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBvcmlnaW5MYXllcklkIDogZW50cnkuaWQgPT09IG9yaWdpbkxheWVySWRcbiAgICApO1xuICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQgJiYgb3JpZ2luSW5kZXggIT09IC0xKSB7XG4gICAgICBjb25zdCBkZXN0aW5hdGlvbkluZGV4ID0gc3RhdGUubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBkZXN0aW5hdGlvbkxheWVySWQgOiBlbnRyeS5pZCA9PT0gZGVzdGluYXRpb25MYXllcklkXG4gICAgICApO1xuICAgICAgaWYgKGRlc3RpbmF0aW9uSW5kZXggIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IG5ld0xheWVyT3JkZXIgPSBhcnJheU1vdmUoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luSW5kZXgsIGRlc3RpbmF0aW9uSW5kZXgpO1xuICAgICAgICByZXR1cm4gey4uLnN0YXRlLCBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAob3JpZ2luTGF5ZXJHcm91cElkICYmICFkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgIGxldCBuZXdMYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkxheWVySWQpO1xuICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQpIHtcbiAgICAgIGNvbnN0IGRlc3RpbmF0aW9uSW5kZXggPSBuZXdMYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZCA6IGZhbHNlXG4gICAgICApO1xuICAgICAgbmV3TGF5ZXJPcmRlci5zcGxpY2UoZGVzdGluYXRpb25JbmRleCA9PT0gLTEgPyAwIDogZGVzdGluYXRpb25JbmRleCwgMCwgb3JpZ2luTGF5ZXJJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVyT3JkZXIgPSBbLi4ubmV3TGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJJZF07XG4gICAgfVxuICAgIHJldHVybiB7Li4uc3RhdGUsIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXJ9O1xuICB9XG5cbiAgaWYgKG9yaWdpbkxheWVyR3JvdXBJZCAmJiBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgIGlmIChvcmlnaW5MYXllckdyb3VwSWQgPT09IGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkxheWVyR3JvdXBJZCk7XG4gICAgICBpZiAoIWxheWVyR3JvdXApIHJldHVybiBzdGF0ZTtcbiAgICAgIGNvbnN0IG9yaWdpbkluZGV4ID0gbGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IG9yaWdpbkxheWVySWQgOiBlbnRyeS5pZCA9PT0gb3JpZ2luTGF5ZXJJZFxuICAgICAgKTtcbiAgICAgIGlmIChvcmlnaW5JbmRleCA9PT0gLTEpIHJldHVybiBzdGF0ZTtcbiAgICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQpIHtcbiAgICAgICAgY29uc3QgZGVzdEluZGV4ID0gbGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gZGVzdGluYXRpb25MYXllcklkIDogZW50cnkuaWQgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZFxuICAgICAgICApO1xuICAgICAgICBpZiAoZGVzdEluZGV4ID09PSAtMSkgcmV0dXJuIHN0YXRlO1xuICAgICAgICBjb25zdCBuZXdHcm91cExheWVyT3JkZXIgPSBhcnJheU1vdmUobGF5ZXJHcm91cC5sYXllck9yZGVyLCBvcmlnaW5JbmRleCwgZGVzdEluZGV4KTtcbiAgICAgICAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwge1xuICAgICAgICAgIC4uLmxheWVyR3JvdXAsXG4gICAgICAgICAgbGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gey4uLnN0YXRlLCBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICAvLyBDcm9zcy1ncm91cCBtb3ZlOiByZW1vdmUgZnJvbSBvcmlnaW4sIHRoZW4gYWRkIHRvIGRlc3RpbmF0aW9uXG4gICAgY29uc3QgbGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5MYXllcklkKTtcbiAgICBsZXQgbmV3U3RhdGUgPSBhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIoXG4gICAgICB7Li4uc3RhdGUsIGxheWVyT3JkZXJ9LFxuICAgICAge2xheWVySWQ6IG9yaWdpbkxheWVySWQsIGxheWVyR3JvdXBJZDogZGVzdGluYXRpb25MYXllckdyb3VwSWR9XG4gICAgKTtcblxuICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQpIHtcbiAgICAgIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgZGVzdGluYXRpb25MYXllckdyb3VwSWQpO1xuICAgICAgaWYgKCFsYXllckdyb3VwKSByZXR1cm4gc3RhdGU7XG4gICAgICBjb25zdCBvcmlnaW5JbmRleCA9IGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT4gZW50cnkgPT09IG9yaWdpbkxheWVySWQpO1xuICAgICAgY29uc3QgZGVzdEluZGV4ID0gbGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PiBlbnRyeSA9PT0gZGVzdGluYXRpb25MYXllcklkKTtcbiAgICAgIGlmIChvcmlnaW5JbmRleCAhPT0gLTEgJiYgZGVzdEluZGV4ICE9PSAtMSkge1xuICAgICAgICBjb25zdCBuZXdHcm91cExheWVyT3JkZXIgPSBhcnJheU1vdmUobGF5ZXJHcm91cC5sYXllck9yZGVyLCBvcmlnaW5JbmRleCwgZGVzdEluZGV4KTtcbiAgICAgICAgbmV3U3RhdGUgPSB7XG4gICAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgICAgbGF5ZXJPcmRlcjogdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCB7XG4gICAgICAgICAgICAuLi5sYXllckdyb3VwLFxuICAgICAgICAgICAgbGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyXG4gICAgICAgICAgfSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG5cbiAgaWYgKCFvcmlnaW5MYXllckdyb3VwSWQgJiYgZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICBjb25zdCBsYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkxheWVySWQpO1xuICAgIHJldHVybiBhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIoXG4gICAgICB7Li4uc3RhdGUsIGxheWVyT3JkZXJ9LFxuICAgICAge2xheWVySWQ6IG9yaWdpbkxheWVySWQsIGxheWVyR3JvdXBJZDogZGVzdGluYXRpb25MYXllckdyb3VwSWR9XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn07XG5cbi8qKlxuICogZHVwbGljYXRlIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgZHVwbGljYXRlTGF5ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5EdXBsaWNhdGVMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gTnVtYmVyLmlzRmluaXRlKGlkKVxuICAgID8gLy8gc3VwcG9ydCBvbGRlciBBUEksIHJlbW92ZSBsYXllciBieSBpZHhcbiAgICAgIE51bWJlcihpZClcbiAgICA6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8ICFzdGF0ZS5sYXllcnNbaWR4XSkge1xuICAgIENvbnNvbGUud2FybihgbGF5ZXIgJHtpZHh9IG5vdCBmb3VuZCBpbiBsYXllck9yZGVyYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2xheWVyc30gPSBzdGF0ZTtcbiAgY29uc3Qgb3JpZ2luYWwgPSBsYXllcnNbaWR4XTtcblxuICBjb25zdCBvcmlnaW5hbExheWVyT3JkZXJJZHggPSBnZXRJbmRleEZyb21MYXllckVudHJ5SWQoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luYWwuaWQpO1xuICBsZXQgbmV3TGFiZWwgPSBgQ29weSBvZiAke29yaWdpbmFsLmNvbmZpZy5sYWJlbH1gO1xuICBsZXQgcG9zdGZpeCA9IDA7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgd2hpbGUgKGxheWVycy5maW5kKGwgPT4gbC5jb25maWcubGFiZWwgPT09IG5ld0xhYmVsKSkge1xuICAgIG5ld0xhYmVsID0gYENvcHkgb2YgJHtvcmlnaW5hbC5jb25maWcubGFiZWx9ICR7Kytwb3N0Zml4fWA7XG4gIH1cblxuICAvLyBjb2xsZWN0IGxheWVyIGNvbmZpZyBmcm9tIG9yaWdpbmFsXG4gIGNvbnN0IGxvYWRlZExheWVyID0gc2VyaWFsaXplTGF5ZXIob3JpZ2luYWwsIHN0YXRlLnNjaGVtYSk7XG5cbiAgLy8gYXNzaWduIG5ldyBpZCBhbmQgbGFiZWwgdG8gY29waWVkIGxheWVyXG4gIGlmICghbG9hZGVkTGF5ZXI/LmNvbmZpZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsb2FkZWRMYXllci5jb25maWcubGFiZWwgPSBuZXdMYWJlbDtcbiAgbG9hZGVkTGF5ZXIuaWQgPSBnZW5lcmF0ZUhhc2hJZChMQVlFUl9JRF9MRU5HVEgpO1xuXG4gIC8vIGFkZCBsYXllciB0byBzdGF0ZVxuICBsZXQgbmV4dFN0YXRlID0gYWRkTGF5ZXJVcGRhdGVyKHN0YXRlLCB7Y29uZmlnOiBsb2FkZWRMYXllcn0pO1xuICAvLyByZXRyaWV2ZSBuZXdseSBjcmVhdGVkIGxheWVyXG4gIGNvbnN0IG5ld0xheWVyID0gbmV4dFN0YXRlLmxheWVyc1tuZXh0U3RhdGUubGF5ZXJzLmxlbmd0aCAtIDFdO1xuXG4gIC8vIENoZWNrIGlmIHRoZSBvcmlnaW5hbCBsYXllciBpcyBpbnNpZGUgYSBncm91cFxuICBjb25zdCBwYXJlbnRHcm91cCA9IGZpbmRQYXJlbnRHcm91cEZvckxheWVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbmFsLmlkKTtcblxuICBpZiAocGFyZW50R3JvdXApIHtcbiAgICAvLyBMYXllciBpcyBpbnNpZGUgYSBncm91cCAtIHJlbW92ZSB0aGUgcHJlcGVuZGVkIGlkIGZyb20gcm9vdCBhbmQgaW5zZXJ0IGludG8gdGhlIGdyb3VwXG4gICAgY29uc3QgbGF5ZXJPcmRlcldpdGhvdXRQcmVwZW5kZWQgPSBuZXh0U3RhdGUubGF5ZXJPcmRlci5zbGljZSgxKTtcbiAgICBjb25zdCBpZHhJbkdyb3VwID0gcGFyZW50R3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZSA9PiBlID09PSBvcmlnaW5hbC5pZCk7XG4gICAgY29uc3QgbmV3R3JvdXBMYXllck9yZGVyID0gYXJyYXlJbnNlcnQocGFyZW50R3JvdXAubGF5ZXJPcmRlciwgaWR4SW5Hcm91cCwgbmV3TGF5ZXIuaWQpO1xuICAgIGNvbnN0IHVwZGF0ZWRHcm91cCA9IHsuLi5wYXJlbnRHcm91cCwgbGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyfTtcbiAgICBjb25zdCBuZXdMYXllck9yZGVyID0gdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihcbiAgICAgIGxheWVyT3JkZXJXaXRob3V0UHJlcGVuZGVkLFxuICAgICAgdXBkYXRlZEdyb3VwXG4gICAgKTtcbiAgICBuZXh0U3RhdGUgPSByZW9yZGVyTGF5ZXJVcGRhdGVyKG5leHRTdGF0ZSwge29yZGVyOiBuZXdMYXllck9yZGVyfSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gTGF5ZXIgaXMgYXQgcm9vdCBsZXZlbCAtIHVzZSBvcmlnaW5hbCBpbmRleC1iYXNlZCBpbnNlcnRpb25cbiAgICBjb25zdCBuZXdMYXllck9yZGVyID0gYXJyYXlJbnNlcnQoXG4gICAgICBuZXh0U3RhdGUubGF5ZXJPcmRlci5zbGljZSgxLCBuZXh0U3RhdGUubGF5ZXJPcmRlci5sZW5ndGgpLFxuICAgICAgb3JpZ2luYWxMYXllck9yZGVySWR4LFxuICAgICAgbmV3TGF5ZXIuaWRcbiAgICApO1xuICAgIG5leHRTdGF0ZSA9IHJlb3JkZXJMYXllclVwZGF0ZXIobmV4dFN0YXRlLCB7b3JkZXI6IG5ld0xheWVyT3JkZXJ9KTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4obmV4dFN0YXRlKTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoXG4gICAgYWN0aW9uLmNvbmZpZz8udHlwZSA9PT0gTElHSFRfQU5EX1NIQURPV19FRkZFQ1QudHlwZSAmJlxuICAgIHN0YXRlLmVmZmVjdHMuc29tZShlZmZlY3QgPT4gZWZmZWN0LnR5cGUgPT09IExJR0hUX0FORF9TSEFET1dfRUZGRUNULnR5cGUpXG4gICkge1xuICAgIENvbnNvbGUud2FybihgQ2FuJ3QgYWRkIG1vcmUgdGhhbiBvbmUgJHtMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC5uYW1lfSBlZmZlY3RgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBpZiAoXG4gICAgYWN0aW9uLmNvbmZpZz8udHlwZSA9PT0gRElTVEFOQ0VfRk9HX1RZUEUgJiZcbiAgICBzdGF0ZS5lZmZlY3RzLnNvbWUoXG4gICAgICBlZmZlY3QgPT4gZWZmZWN0LnR5cGUgPT09IERJU1RBTkNFX0ZPR19UWVBFIHx8IGVmZmVjdC50eXBlID09PSBTVVJGQUNFX0ZPR19UWVBFXG4gICAgKVxuICApIHtcbiAgICBDb25zb2xlLndhcm4oXCJDYW4ndCBhZGQgbW9yZSB0aGFuIG9uZSBmb2cgZWZmZWN0XCIpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGlmIChcbiAgICBhY3Rpb24uY29uZmlnPy50eXBlID09PSBTVVJGQUNFX0ZPR19UWVBFICYmXG4gICAgc3RhdGUuZWZmZWN0cy5zb21lKFxuICAgICAgZWZmZWN0ID0+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+IGYuaWQgPT09IHNlbGVjdGVkRmVhdHVyZS5pZCk7XG5cbiAgLy8gaWYgZmVhdHVyZSBpcyBwYXJ0IG9mIGEgZmlsdGVyXG4gIGNvbnN0IGZpbHRlcklkID0gZmVhdHVyZSAmJiBnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKTtcbiAgaWYgKGZpbHRlcklkICYmIGZlYXR1cmUpIHtcbiAgICAvLyBhZGQgYmJveCBmb3IgcG9seWdvbiBmaWx0ZXIgdG8gc3BlZWQgdXAgZmlsdGVyaW5nXG4gICAgaWYgKGZlYXR1cmUucHJvcGVydGllcykgZmVhdHVyZS5wcm9wZXJ0aWVzLmJib3ggPSBiYm94KGZlYXR1cmUgYXMgdW5rbm93biBhcyBBbGxHZW9KU09OKTtcbiAgICBjb25zdCBmZWF0dXJlVmFsdWUgPSBmZWF0dXJlVG9GaWx0ZXJWYWx1ZShmZWF0dXJlLCBmaWx0ZXJJZCk7XG4gICAgY29uc3QgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZmlsID0+IGZpbC5pZCA9PT0gZmlsdGVySWQpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgICBwcm9wOiAndmFsdWUnLFxuICAgICAgdmFsdWU6IGZlYXR1cmVWYWx1ZVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIFNldCB0aGUgY3VycmVudCBzZWxlY3RlZCBmZWF0dXJlXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRTZWxlY3RlZEZlYXR1cmVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtmZWF0dXJlLCBzZWxlY3Rpb25Db250ZXh0fTogVmlzU3RhdGVBY3Rpb25zLlNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gYWRkIGJib3ggZm9yIHBvbHlnb24gZmlsdGVyIHRvIHNwZWVkIHVwIGZpbHRlcmluZ1xuICBsZXQgc2VsZWN0ZWRGZWF0dXJlID0gZmVhdHVyZTtcbiAgaWYgKGZlYXR1cmU/LnByb3BlcnRpZXMpIHtcbiAgICBzZWxlY3RlZEZlYXR1cmUgPSB7XG4gICAgICAuLi5mZWF0dXJlLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAuLi5mZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgICAgIGJib3g6IGJib3goZmVhdHVyZSBhcyB1bmtub3duIGFzIEFsbEdlb0pTT04pXG4gICAgICB9XG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlLFxuICAgICAgc2VsZWN0aW9uQ29udGV4dFxuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogRGVsZXRlIGV4aXN0aW5nIGZlYXR1cmUgZnJvbSBmaWx0ZXJzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsZXRlRmVhdHVyZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2ZlYXR1cmV9OiBWaXNTdGF0ZUFjdGlvbnMuRGVsZXRlRmVhdHVyZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFmZWF0dXJlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgICB9XG4gIH07XG5cbiAgaWYgKGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpKSB7XG4gICAgY29uc3QgZmlsdGVySWR4ID0gbmV3U3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKSk7XG5cbiAgICByZXR1cm4gZmlsdGVySWR4ID4gLTEgPyByZW1vdmVGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWR4OiBmaWx0ZXJJZHh9KSA6IG5ld1N0YXRlO1xuICB9XG5cbiAgLy8gbW9kaWZ5IGVkaXRvciBvYmplY3RcbiAgY29uc3QgbmV3RWRpdG9yID0ge1xuICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICBmZWF0dXJlczogc3RhdGUuZWRpdG9yLmZlYXR1cmVzLmZpbHRlcihmID0+IGYuaWQgIT09IGZlYXR1cmUuaWQpLFxuICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiBuZXdFZGl0b3JcbiAgfTtcbn1cblxuLyoqXG4gKiBUb2dnbGUgZmVhdHVyZSBhcyBsYXllciBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRQb2x5Z29uRmlsdGVyTGF5ZXJVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHBheWxvYWQ6IFZpc1N0YXRlQWN0aW9ucy5TZXRQb2x5Z29uRmlsdGVyTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtsYXllciwgZmVhdHVyZX0gPSBwYXlsb2FkO1xuICBjb25zdCBmaWx0ZXJJZCA9IGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpO1xuXG4gIC8vIGxldCBuZXdGaWx0ZXIgPSBudWxsO1xuICBsZXQgZmlsdGVySWR4O1xuICBsZXQgbmV3TGF5ZXJJZCA9IFtsYXllci5pZF07XG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICAvLyBJZiBwb2x5Z29uIGZpbHRlciBhbHJlYWR5IGV4aXN0cywgd2UgbmVlZCB0byBmaW5kIG91dCBpZiB0aGUgY3VycmVudCBsYXllciBpcyBhbHJlYWR5IGluY2x1ZGVkXG4gIGlmIChmaWx0ZXJJZCkge1xuICAgIGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gZmlsdGVySWQpO1xuXG4gICAgaWYgKCFzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0pIHtcbiAgICAgIC8vIHdoYXQgaWYgZmlsdGVyIGRvZXNuJ3QgZXhpc3Q/Li4uIG5vdCBwb3NzaWJsZS5cbiAgICAgIC8vIGJlY2F1c2UgZmVhdHVyZXMgaW4gdGhlIGVkaXRvciBpcyBwYXNzZWQgaW4gZnJvbSBmaWx0ZXJzIGFuZCBlZGl0b3JzLlxuICAgICAgLy8gYnV0IHdlIHdpbGwgbW92ZSB0aGlzIGZlYXR1cmUgYmFjayB0byBlZGl0b3IganVzdCBpbiBjYXNlXG4gICAgICBjb25zdCBub25lRmlsdGVyRmVhdHVyZSA9IHtcbiAgICAgICAgLi4uZmVhdHVyZSxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIC4uLmZlYXR1cmUucHJvcGVydGllcyxcbiAgICAgICAgICBmaWx0ZXJJZDogbnVsbFxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgZWRpdG9yOiB7XG4gICAgICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgICAgIGZlYXR1cmVzOiBbLi4uc3RhdGUuZWRpdG9yLmZlYXR1cmVzLCBub25lRmlsdGVyRmVhdHVyZV0sXG4gICAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBub25lRmlsdGVyRmVhdHVyZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF07XG4gICAgY29uc3Qge2xheWVySWQgPSBbXX0gPSBmaWx0ZXI7XG4gICAgY29uc3QgaXNMYXllckluY2x1ZGVkID0gbGF5ZXJJZC5pbmNsdWRlcyhsYXllci5pZCk7XG5cbiAgICBuZXdMYXllcklkID0gaXNMYXllckluY2x1ZGVkXG4gICAgICA/IC8vIGlmIGxheWVyIGlzIGluY2x1ZGVkLCByZW1vdmUgaXRcbiAgICAgICAgbGF5ZXJJZC5maWx0ZXIobCA9PiBsICE9PSBsYXllci5pZClcbiAgICAgIDogWy4uLmxheWVySWQsIGxheWVyLmlkXTtcbiAgfSBlbHNlIHtcbiAgICAvLyBpZiB3ZSBoYXZlbid0IGNyZWF0ZSB0aGUgcG9seWdvbiBmaWx0ZXIsIGNyZWF0ZSBpdFxuICAgIGNvbnN0IG5ld0ZpbHRlciA9IGdlbmVyYXRlUG9seWdvbkZpbHRlcihbXSwgZmVhdHVyZSk7XG4gICAgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5sZW5ndGg7XG5cbiAgICAvLyBhZGQgZmVhdHVyZSwgcmVtb3ZlIGZlYXR1cmUgZnJvbSBlaWR0b3JcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZmlsdGVyczogWy4uLnN0YXRlLmZpbHRlcnMsIG5ld0ZpbHRlcl0sXG4gICAgICBlZGl0b3I6IHtcbiAgICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgICBmZWF0dXJlczogc3RhdGUuZWRpdG9yLmZlYXR1cmVzLmZpbHRlcihmID0+IGYuaWQgIT09IGZlYXR1cmUuaWQpLFxuICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IG5ld0ZpbHRlci52YWx1ZVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICdsYXllcklkJyxcbiAgICB2YWx1ZTogbmV3TGF5ZXJJZFxuICB9KTtcbn1cblxuLyoqXG4gKiBBcHBseSBwb2x5Z29uIGZpbHRlciB0byBhbGwgdmlzaWJsZSBsYXllcnNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRQb2x5Z29uRmlsdGVyQWxsTGF5ZXJzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBwYXlsb2FkOiBWaXNTdGF0ZUFjdGlvbnMuU2V0UG9seWdvbkZpbHRlckFsbExheWVyc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2ZlYXR1cmV9ID0gcGF5bG9hZDtcblxuICBjb25zdCBuZXdGaWx0ZXIgPSBnZW5lcmF0ZVBvbHlnb25GaWx0ZXIoW10sIGZlYXR1cmUpO1xuICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmxlbmd0aDtcblxuICBjb25zdCBuZXdTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogWy4uLnN0YXRlLmZpbHRlcnMsIG5ld0ZpbHRlcl0sXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBmZWF0dXJlczogc3RhdGUuZWRpdG9yLmZlYXR1cmVzLmZpbHRlcihmID0+IGYuaWQgIT09IGZlYXR1cmUuaWQpLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBuZXdGaWx0ZXIudmFsdWUsXG4gICAgICBtb2RlOiBFRElUT1JfTU9ERVMuRURJVFxuICAgIH1cbiAgfTtcblxuICBjb25zdCB2aXNpYmxlTGF5ZXJJZHMgPSBnZXQocGF5bG9hZCwgJ3Zpc2libGVMYXllcklkcycpO1xuICBjb25zdCBhbGxMYXllcklkcyA9IEFycmF5LmlzQXJyYXkodmlzaWJsZUxheWVySWRzKVxuICAgID8gdmlzaWJsZUxheWVySWRzXG4gICAgOiBzdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuaXNWaXNpYmxlKS5tYXAobCA9PiBsLmlkKTtcblxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICdsYXllcklkJyxcbiAgICB2YWx1ZTogYWxsTGF5ZXJJZHNcbiAgfSk7XG59XG5cbi8qKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvcnRUYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgY29sdW1uLCBtb2RlfTogVmlzU3RhdGVBY3Rpb25zLlNvcnRUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgc29ydE1vZGUgPSBtb2RlO1xuICBpZiAoIXNvcnRNb2RlKSB7XG4gICAgY29uc3QgY3VycmVudE1vZGUgPSBnZXQoZGF0YXNldCwgWydzb3J0Q29sdW1uJywgY29sdW1uXSk7XG4gICAgLy8gQHRzLWlnbm9yZSAtIHNob3VsZCBiZSBmaXhhYmxlIGluIGEgVFMgZmlsZVxuICAgIHNvcnRNb2RlID0gY3VycmVudE1vZGVcbiAgICAgID8gT2JqZWN0LmtleXMoU09SVF9PUkRFUikuZmluZChtID0+IG0gIT09IGN1cnJlbnRNb2RlKVxuICAgICAgOiBTT1JUX09SREVSLkFTQ0VORElORztcbiAgfVxuXG4gIGNvbnN0IHNvcnRlZCA9IHNvcnREYXRhc2V0QnlDb2x1bW4oZGF0YXNldCwgY29sdW1uLCBzb3J0TW9kZSk7XG4gIHJldHVybiBzZXQoWydkYXRhc2V0cycsIGRhdGFJZF0sIHNvcnRlZCwgc3RhdGUpO1xufVxuXG4vKipcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwaW5UYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgY29sdW1ufTogVmlzU3RhdGVBY3Rpb25zLlBpblRhYmxlQ29sdW1uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5ld0RhdGFzZXQgPSBwaW5UYWJsZUNvbHVtbnMoZGF0YXNldCwgY29sdW1uKTtcblxuICByZXR1cm4gc2V0KFsnZGF0YXNldHMnLCBkYXRhSWRdLCBuZXdEYXRhc2V0LCBzdGF0ZSk7XG59XG5cbi8qKlxuICogQ29weSBjb2x1bW4gY29udGVudCBhcyBzdHJpbmdzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29weVRhYmxlQ29sdW1uVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBjb2x1bW59OiBWaXNTdGF0ZUFjdGlvbnMuQ29weVRhYmxlQ29sdW1uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGZpZWxkSWR4ID0gZGF0YXNldC5maWVsZHMuZmluZEluZGV4KGYgPT4gZi5uYW1lID09PSBjb2x1bW4pO1xuICBpZiAoZmllbGRJZHggPCAwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHt0eXBlfSA9IGRhdGFzZXQuZmllbGRzW2ZpZWxkSWR4XTtcbiAgY29uc3QgdGV4dCA9IGRhdGFzZXQuZGF0YUNvbnRhaW5lclxuICAgIC5tYXAocm93ID0+IHBhcnNlRmllbGRWYWx1ZShyb3cudmFsdWVBdChmaWVsZElkeCksIHR5cGUpLCB0cnVlKVxuICAgIC5qb2luKCdcXG4nKTtcblxuICBjb3B5KHRleHQpO1xuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBTZXQgZGlzcGxheSBmb3JtYXQgZnJvbSBjb2x1bW5zIGZyb20gdXNlciBzZWxlY3Rpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBmb3JtYXRzfTogVmlzU3RhdGVBY3Rpb25zLlNldENvbHVtbkRpc3BsYXlGb3JtYXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IG5ld0ZpZWxkcyA9IGRhdGFzZXQuZmllbGRzO1xuICBPYmplY3Qua2V5cyhmb3JtYXRzKS5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgY29uc3QgZmllbGRJZHggPSBkYXRhc2V0LmZpZWxkcy5maW5kSW5kZXgoZiA9PiBmLm5hbWUgPT09IGNvbHVtbik7XG4gICAgaWYgKGZpZWxkSWR4ID49IDApIHtcbiAgICAgIGNvbnN0IGRpc3BsYXlGb3JtYXQgPSBmb3JtYXRzW2NvbHVtbl07XG4gICAgICBjb25zdCBmaWVsZCA9IG5ld0ZpZWxkc1tmaWVsZElkeF07XG4gICAgICBuZXdGaWVsZHMgPSBzd2FwXyhtZXJnZV8oe2Rpc3BsYXlGb3JtYXR9KShmaWVsZCkgYXMge2lkOiBzdHJpbmd9KShcbiAgICAgICAgbmV3RmllbGRzIGFzIHtpZDogc3RyaW5nfVtdXG4gICAgICApIGFzIEZpZWxkW107XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBuZXdEYXRhc2V0ID0gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtmaWVsZHM6IG5ld0ZpZWxkcyBhcyBGaWVsZFtdfSk7XG4gIGxldCBuZXdTdGF0ZSA9IHBpY2tfKCdkYXRhc2V0cycpKG1lcmdlXyh7W2RhdGFJZF06IG5ld0RhdGFzZXR9KSkoc3RhdGUpO1xuXG4gIC8vIHVwZGF0ZSBjb2xvckZpZWxkIGRpc3BsYXlGb3JtYXRcbiAgbmV3U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdTdGF0ZS5sYXllcnMubWFwKGxheWVyID0+XG4gICAgICBsYXllci5jb25maWc/LmNvbG9yRmllbGQ/Lm5hbWUgJiYgbGF5ZXIuY29uZmlnLmNvbG9yRmllbGQubmFtZSBpbiBmb3JtYXRzXG4gICAgICAgID8gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICAgICAgY29sb3JGaWVsZDoge1xuICAgICAgICAgICAgICAuLi5sYXllci5jb25maWcuY29sb3JGaWVsZCxcbiAgICAgICAgICAgICAgZGlzcGxheUZvcm1hdDogZm9ybWF0c1tsYXllci5jb25maWcuY29sb3JGaWVsZC5uYW1lXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIDogbGF5ZXJcbiAgICApXG4gIH07XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBlZGl0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRWRpdG9yVmlzaWJpbGl0eVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIHZpc2libGU6ICFzdGF0ZS5lZGl0b3IudmlzaWJsZVxuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZHgsIGNvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IG9sZEZpbHRlciA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcbiAgaWYgKCFvbGRGaWx0ZXIpIHtcbiAgICBDb25zb2xlLmVycm9yKGBmaWx0ZXJzLiR7aWR4fSBpcyB1bmRlZmluZWRgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKG9sZEZpbHRlci50eXBlICE9PSBGSUxURVJfVFlQRVMudGltZVJhbmdlKSB7XG4gICAgQ29uc29sZS5lcnJvcihcbiAgICAgIGBzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnIGNhbiBvbmx5IGJlIGNhbGxlZCB0byB1cGRhdGUgYSB0aW1lIGZpbHRlci4gY2hlY2sgZmlsdGVyLnR5cGUgPT09ICd0aW1lUmFuZ2UnYFxuICAgICk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgdXBkYXRlcyA9IGNoZWNrVGltZUNvbmZpZ0FyZ3MoY29uZmlnKTtcblxuICByZXR1cm4gcGlja18oJ2ZpbHRlcnMnKShzd2FwXyhtZXJnZV8odXBkYXRlcykob2xkRmlsdGVyKSkpKHN0YXRlKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpIHtcbiAgY29uc3QgYWxsb3dlZCA9IFsndGltZUZvcm1hdCcsICd0aW1lem9uZSddO1xuICByZXR1cm4gT2JqZWN0LmtleXMoY29uZmlnKS5yZWR1Y2UoKGFjY3UsIHByb3ApID0+IHtcbiAgICBpZiAoIWFsbG93ZWQuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWcgdGFrZXMgdGltZUZvcm1hdCBhbmQvb3IgdGltZXpvbmUgYXMgb3B0aW9ucywgZm91bmQgJHtwcm9wfWBcbiAgICAgICk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9XG5cbiAgICAvLyBoZXJlIHdlIGFyZSBOT1QgY2hlY2tpbmcgaWYgdGltZXpvbmUgb3IgdGltZUZvcm1hdCBpbnB1dCBpcyB2YWxpZFxuICAgIGFjY3VbcHJvcF0gPSBjb25maWdbcHJvcF07XG4gICAgcmV0dXJuIGFjY3U7XG4gIH0sIHt9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZWRpdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghY29uZmlnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHVwZGF0ZXMgPSBjaGVja1RpbWVDb25maWdBcmdzKGNvbmZpZyk7XG4gIHJldHVybiBwaWNrXygnYW5pbWF0aW9uQ29uZmlnJykobWVyZ2VfKHVwZGF0ZXMpKShzdGF0ZSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2V2ZW50LCBsYXllcn0gPSBhY3Rpb247XG4gIGNvbnN0IHtpZDogZGVja2dsTGF5ZXJJZCwgY291bnR9ID0gZXZlbnQ7XG4gIGlmICghbGF5ZXIpIHtcbiAgICBDb25zb2xlLndhcm4oYGxheWVyRmlsdGVyZWRJdGVtcyBsYXllciBkb2VzbnQgZXhpc3RzYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChsYXllci5maWx0ZXJlZEl0ZW1Db3VudD8uW2RlY2tnbExheWVySWRdID09PSBjb3VudCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxheWVyLmZpbHRlcmVkSXRlbUNvdW50ID0ge1xuICAgIC4uLmxheWVyLmZpbHRlcmVkSXRlbUNvdW50LFxuICAgIFtkZWNrZ2xMYXllcklkXTogY291bnRcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3dhcF8obGF5ZXIpKHN0YXRlLmxheWVycylcbiAgfTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgV01TIGZlYXR1cmUgaW5mbyBhbmQgcGluIHRvb2x0aXBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdtc0ZlYXR1cmVJbmZvVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuV01TRmVhdHVyZUluZm9BY3Rpb25cbik6IFMge1xuICBjb25zdCB7bGF5ZXIsIGZlYXR1cmVJbmZvLCBjb29yZGluYXRlfSA9IGFjdGlvbjtcbiAgaWYgKCFsYXllcikge1xuICAgIGNvbnNvbGUud2FybihgV01TIGZlYXR1cmUgaW5mbyBsYXllciBkb2Vzbid0IGV4aXN0YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gQ3JlYXRlIGEgY2xpY2tlZCBvYmplY3Qgc2ltaWxhciB0byBsYXllckNsaWNrVXBkYXRlciB0byBwaW4gdGhlIHRvb2x0aXBcbiAgY29uc3QgY2xpY2tlZCA9IGZlYXR1cmVJbmZvXG4gICAgPyB7XG4gICAgICAgIHBpY2tlZDogdHJ1ZSxcbiAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgd21zRmVhdHVyZUluZm86IGZlYXR1cmVJbmZvXG4gICAgICAgIH0sXG4gICAgICAgIGNvb3JkaW5hdGU6IGNvb3JkaW5hdGUgfHwgWzAsIDBdLFxuICAgICAgICBsYXllcjoge1xuICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICBpZHg6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBsYXllci5pZCksXG4gICAgICAgICAgICBpZDogbGF5ZXIuaWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICA6IG51bGw7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjbGlja2VkXG4gIH07XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50c1xuZXhwb3J0IGZ1bmN0aW9uIHN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2lkeDogZmlsdGVySWR4LCBlbmFibGUgPSBmYWxzZX0gPSBhY3Rpb247XG5cbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgbGV0IG5ld0ZpbHRlciA9IGZpbHRlcjtcblxuICAvLyBpZiB3ZSBlbmFibGUgc3luYyB3ZSBhcmUgZ29pbmcgdG8gbWVyZ2UgZmlsdGVyIGFuZCBhbmltYXRpb25Db25maWcgZG9tYWlucyBhbmQgc3RvcmUgaW50byBmaWx0ZXIuZG9tYWluXG4gIGlmIChlbmFibGUpIHtcbiAgICBjb25zdCBhbmltYXRhYmxlTGF5ZXJzID0gZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMobmV3U3RhdGUubGF5ZXJzKTtcbiAgICAvLyBpZiBubyBhbmltYXRhYmxlTGF5ZXJzIGFyZSBwcmVzZW50IHdlIHNpbXBseSByZXR1cm5cbiAgICBpZiAoIWFuaW1hdGFibGVMYXllcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmV3U3RhdGU7XG4gICAgfVxuXG4gICAgY29uc3QgaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyA9IGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMoYW5pbWF0YWJsZUxheWVycyk7XG4gICAgY29uc3QgaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyID0gQm9vbGVhbihpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLmxlbmd0aCk7XG5cbiAgICBjb25zdCBuZXdGaWx0ZXJEb21haW4gPSBtZXJnZVRpbWVEb21haW5zKFtmaWx0ZXIuZG9tYWluLCBuZXdTdGF0ZS5hbmltYXRpb25Db25maWcuZG9tYWluXSk7XG5cbiAgICAvLyB3ZSBvbmx5IHVwZGF0ZSBhbmltYXRpb25XaW5kb3cgaWYgd2UgaGF2ZSBpbnRlcnZhbCBiYXNlZCBhbmltYXRpb24gbGF5ZXJzIHdpdGggZGVmaW5lZCBpbnRlcnZhbHMgYW5kIHRoZSBjdXJyZW50IGZpbHRlciBhbmltYXRpb24gd2luZG93IGlzIG5vdCBpbnRlcnZhbFxuICAgIGlmIChoYXNJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXIpIHtcbiAgICAgIGlmIChmaWx0ZXIuYW5pbWF0aW9uV2luZG93ICE9PSBBTklNQVRJT05fV0lORE9XLmludGVydmFsKSB7XG4gICAgICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgICAgIGlkOiBmaWx0ZXIuaWQsXG4gICAgICAgICAgYW5pbWF0aW9uV2luZG93OiBBTklNQVRJT05fV0lORE9XLmludGVydmFsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgICAvLyBhZGp1c3QgdGltZSBmaWx0ZXIgaW50ZXJ2YWxcbiAgICAgIG5ld0ZpbHRlciA9IGFkanVzdFRpbWVGaWx0ZXJJbnRlcnZhbChuZXdTdGF0ZSwgbmV3RmlsdGVyKTtcblxuICAgICAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgICAgIG5ld1N0YXRlID0ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gICAgICB9O1xuICAgIH1cblxuICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAvLyBhZGp1c3QgdmFsdWUgYmFzZWQgb24gbmV3IGRvbWFpblxuICAgIGNvbnN0IG5ld0ZpbHRlclZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihcbiAgICAgIG5ld0ZpbHRlci5hbmltYXRpb25XaW5kb3cgPT09IEFOSU1BVElPTl9XSU5ET1cuaW50ZXJ2YWxcbiAgICAgICAgPyBbbmV3RmlsdGVyRG9tYWluWzBdLCBuZXdGaWx0ZXJEb21haW5bMF1dXG4gICAgICAgIDogbmV3RmlsdGVyRG9tYWluLFxuICAgICAgey4uLm5ld0ZpbHRlciwgZG9tYWluOiBuZXdGaWx0ZXJEb21haW59XG4gICAgKTtcblxuICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgICBwcm9wOiAndmFsdWUnLFxuICAgICAgdmFsdWU6IG5ld0ZpbHRlclZhbHVlXG4gICAgfSk7XG5cbiAgICBuZXdGaWx0ZXIgPSB7XG4gICAgICAuLi4obmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlciksXG4gICAgICBzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZTogdHJ1ZVxuICAgIH07XG5cbiAgICAvLyByZXBsYWNlIGZpbHRlciBpbiBzdGF0ZSB3aXRoIG5ld0ZpbHRlclxuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikobmV3U3RhdGUuZmlsdGVycylcbiAgICB9O1xuXG4gICAgbmV3U3RhdGUgPSBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICAgIG1vZGU6IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlcilcbiAgICB9KTtcblxuICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAvLyBzZXQgdGhlIGFuaW1hdGlvbiBjb25maWcgdmFsdWUgdG8gbWF0Y2ggZmlsdGVyIHZhbHVlXG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIHZhbHVlOiBuZXdGaWx0ZXIudmFsdWVbbmV3RmlsdGVyLnN5bmNUaW1lbGluZU1vZGVdXG4gICAgfSk7XG4gIH1cblxuICAvLyBzZXQgZG9tYWluIGFuZCBzdGVwXG4gIG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgc3luY2VkV2l0aExheWVyVGltZWxpbmU6IGZhbHNlXG4gIH07XG5cbiAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgbmV3U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgLy8gcmVzZXQgc3luYyB0aW1lbGluZSBtb2RlXG4gIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgIG1vZGU6IFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kXG4gIH0pO1xuXG4gIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgLy8gcmVzZXQgZmlsdGVyIHZhbHVlXG4gIGNvbnN0IG5ld0ZpbHRlclZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihuZXdGaWx0ZXIuZG9tYWluLCBuZXdGaWx0ZXIpO1xuXG4gIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICd2YWx1ZScsXG4gICAgdmFsdWU6IG5ld0ZpbHRlclZhbHVlXG4gIH0pO1xuXG4gIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgIG1vZGU6IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlcilcbiAgfSk7XG5cbiAgLy8gcmVzZXQgYW5pbWF0aW9uIGNvbmZpZyBjdXJyZW50IHRpbWUgdG9cbiAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICB2YWx1ZTogbmV3U3RhdGUuYW5pbWF0aW9uQ29uZmlnLmRvbWFpbj8uWzBdID8/IG51bGxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuc2V0VGltZUZpbHRlclN5bmNUaW1lbGluZU1vZGVBY3Rpb25cbikge1xuICBjb25zdCB7aWQ6IGZpbHRlcklkLCBtb2RlOiBzeW5jVGltZWxpbmVNb2RlfSA9IGFjdGlvbjtcblxuICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlcklkeCA9PT0gLTEpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gIGlmICghdmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXIsIHN5bmNUaW1lbGluZU1vZGUpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICBzeW5jVGltZWxpbmVNb2RlXG4gIH07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKHN0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgcmV0dXJuIGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIobmV3U3RhdGUsIGZpbHRlcklkeCk7XG59XG5cbi8qKlxuICogVXBkYXRlIHN0YXRlIG9mIHRoZSBsb2FkaW5nIGluZGljYXRvci5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgdmlzU3RhdGVcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBQYXlsb2FkIHdpdGggY2hhbmdlIG9mIG51bWJlciBvZiBhY3RpdmUgbG9hZGluZyBhY3Rpb25zLlxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7cGF5bG9hZDoge2NoYW5nZX19OiB7cGF5bG9hZDogU2V0TG9hZGluZ0luZGljYXRvclBheWxvYWR9XG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGxldCB7bG9hZGluZ0luZGljYXRvclZhbHVlfSA9IHN0YXRlO1xuICBpZiAoIWxvYWRpbmdJbmRpY2F0b3JWYWx1ZSkge1xuICAgIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZSA9IDA7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZTogTWF0aC5tYXgobG9hZGluZ0luZGljYXRvclZhbHVlICsgY2hhbmdlLCAwKVxuICB9O1xufTtcblxuZnVuY3Rpb24gYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBmaWx0ZXJJZHg6IG51bWJlcik6IFMge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF07XG4gIGlmICgoZmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcikuc3luY2VkV2l0aExheWVyVGltZWxpbmUpIHtcbiAgICBjb25zdCB0aW1lbGluZVZhbHVlID0gZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIoZmlsdGVyKTtcbiAgICBjb25zdCB2YWx1ZSA9IHN0YXRlLmFuaW1hdGlvbkNvbmZpZy50aW1lU3RlcHNcbiAgICAgID8gc25hcFRvTWFya3ModGltZWxpbmVWYWx1ZSwgc3RhdGUuYW5pbWF0aW9uQ29uZmlnLnRpbWVTdGVwcylcbiAgICAgIDogdGltZWxpbmVWYWx1ZTtcbiAgICByZXR1cm4gc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlcihzdGF0ZSwge3ZhbHVlfSk7XG4gIH1cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5mdW5jdGlvbiBnZXRUaW1lbGluZVZhbHVlRnJvbUZpbHRlcihmaWx0ZXIpIHtcbiAgcmV0dXJuIGZpbHRlci52YWx1ZVtmaWx0ZXIuc3luY1RpbWVsaW5lTW9kZV07XG59XG5cbmZ1bmN0aW9uIGdldFN5bmNBbmltYXRpb25Nb2RlKGZpbHRlcjogVGltZVJhbmdlRmlsdGVyKSB7XG4gIGlmIChmaWx0ZXIuYW5pbWF0aW9uV2luZG93ID09PSBBTklNQVRJT05fV0lORE9XLmZyZWUpIHtcbiAgICByZXR1cm4gZmlsdGVyLnN5bmNUaW1lbGluZU1vZGUgPz8gU1lOQ19USU1FTElORV9NT0RFUy5lbmQ7XG4gIH1cblxuICByZXR1cm4gU1lOQ19USU1FTElORV9NT0RFUy5lbmQ7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3luY0FuaW1hdGlvbk1vZGUoZmlsdGVyOiBUaW1lUmFuZ2VGaWx0ZXIsIG5ld01vZGU6IG51bWJlcikge1xuICByZXR1cm4gIShcbiAgICBmaWx0ZXIuYW5pbWF0aW9uV2luZG93ICE9PSBBTklNQVRJT05fV0lORE9XLmZyZWUgJiYgbmV3TW9kZSA9PT0gU1lOQ19USU1FTElORV9NT0RFUy5zdGFydFxuICApO1xufVxuXG5mdW5jdGlvbiBhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwoc3RhdGUsIGZpbHRlcikge1xuICBjb25zdCBpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzID0gZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyhzdGF0ZS5sYXllcnMpO1xuXG4gIGxldCBpbnRlcnZhbDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGlmIChpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgaW50ZXJ2YWxJbmRleCA9IGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMucmVkdWNlKChjdXJyZW50SW5kZXgsIGwpID0+IHtcbiAgICAgIGlmIChsLm1ldGEudGFyZ2V0VGltZUludGVydmFsKSB7XG4gICAgICAgIGNvbnN0IG5ld0luZGV4ID0gVElNRV9JTlRFUlZBTFNfT1JERVJFRC5maW5kSW5kZXgoaSA9PiBpID09PSBsLm1ldGEudGFyZ2V0VGltZUludGVydmFsKTtcbiAgICAgICAgcmV0dXJuIG5ld0luZGV4ID4gLTEgJiYgbmV3SW5kZXggPCBjdXJyZW50SW5kZXggPyBuZXdJbmRleCA6IGN1cnJlbnRJbmRleDtcbiAgICAgIH1cbiAgICB9LCBUSU1FX0lOVEVSVkFMU19PUkRFUkVELmxlbmd0aCAtIDEpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCBoZXhUaWxlSW50ZXJ2YWwgPSBUSU1FX0lOVEVSVkFMU19PUkRFUkVEW2ludGVydmFsSW5kZXhdO1xuICAgIGludGVydmFsID0gTGF5ZXJUb0ZpbHRlclRpbWVJbnRlcnZhbFtoZXhUaWxlSW50ZXJ2YWxdO1xuICB9XG5cbiAgaWYgKCFpbnRlcnZhbCkge1xuICAgIHJldHVybiBmaWx0ZXI7XG4gIH1cblxuICAvLyBhZGp1c3QgZmlsdGVyXG4gIGNvbnN0IHRpbWVGb3JtYXQgPSBnZXREZWZhdWx0VGltZUZvcm1hdChpbnRlcnZhbCk7XG4gIGNvbnN0IHVwZGF0ZWRQbG90VHlwZSA9IHsuLi5maWx0ZXIucGxvdFR5cGUsIGludGVydmFsLCB0aW1lRm9ybWF0fTtcbiAgY29uc3QgbmV3RmlsdGVyID0gdXBkYXRlVGltZUZpbHRlclBsb3RUeXBlKGZpbHRlciwgdXBkYXRlZFBsb3RUeXBlLCBzdGF0ZS5kYXRhc2V0cyk7XG4gIHJldHVybiBhZGp1c3RWYWx1ZVRvQW5pbWF0aW9uV2luZG93KHN0YXRlLCBuZXdGaWx0ZXIpO1xufVxuXG4vLyBGaW5kIGRhdGFJZCBmcm9tIGEgc2F2ZWQgdmlzU3RhdGUgcHJvcGVydHk6XG4vLyBsYXllcnMsIGZpbHRlcnMsIGludGVyYWN0aW9ucywgbGF5ZXJCbGVuZGluZywgb3ZlcmxheUJsZW5kaW5nLCBzcGxpdE1hcHMsIGFuaW1hdGlvbkNvbmZpZywgZWRpdG9yXG4vLyByZXBsYWNlIGl0IHdpdGggYW5vdGhlciBkYXRhSWRcbmZ1bmN0aW9uIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyh2YWx1ZTogYW55LCBkYXRhSWQ6IHN0cmluZywgZGF0YUlkVG9SZXBsYWNlOiBzdHJpbmcpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gZm9yIGxheWVycywgZmlsdGVycywgY2FsbCBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMgb24gZWFjaCBpdGVtIGluIGFycmF5XG4gICAgY29uc3QgcmVwbGFjZWQgPSB2YWx1ZVxuICAgICAgLm1hcCh2ID0+IGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyh2LCBkYXRhSWQsIGRhdGFJZFRvUmVwbGFjZSkpXG4gICAgICAuZmlsdGVyKGQgPT4gZCk7XG4gICAgcmV0dXJuIHJlcGxhY2VkLmxlbmd0aCA/IHJlcGxhY2VkIDogbnVsbDtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlLmRhdGFJZCA9PT0gJ3N0cmluZycgJiYgdmFsdWUuZGF0YUlkID09PSBkYXRhSWQpIHtcbiAgICAvLyBvdGhlcnNcbiAgICByZXR1cm4ge1xuICAgICAgLi4udmFsdWUsXG4gICAgICBkYXRhSWQ6IGRhdGFJZFRvUmVwbGFjZVxuICAgIH07XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZS5kYXRhSWQpICYmIHZhbHVlLmRhdGFJZC5pbmNsdWRlcyhkYXRhSWQpKSB7XG4gICAgLy8gZmlsdGVyXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgZGF0YUlkOiB2YWx1ZS5kYXRhSWQubWFwKGQgPT4gKGQgPT09IGRhdGFJZCA/IGRhdGFJZFRvUmVwbGFjZSA6IGQpKVxuICAgIH07XG4gIH0gZWxzZSBpZiAodmFsdWUuY29uZmlnPy5kYXRhSWQgJiYgdmFsdWUuY29uZmlnPy5kYXRhSWQgPT09IGRhdGFJZCkge1xuICAgIC8vIGxheWVyXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIC4uLnZhbHVlLmNvbmZpZyxcbiAgICAgICAgZGF0YUlkOiBkYXRhSWRUb1JlcGxhY2VcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2UgaWYgKGlzT2JqZWN0KHZhbHVlKSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGRhdGFJZCkpIHtcbiAgICAvLyBmb3IgdmFsdWUgc2F2ZWQgYXMge1tkYXRhSWRdOiB7Li4ufX1cbiAgICByZXR1cm4ge1tkYXRhSWRUb1JlcGxhY2VdOiB2YWx1ZVtkYXRhSWRdfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vLyBGaW5kIGRhdGFzZXRJZHMgZGVyaXZlZCBhIHNhdmVkIHZpc1N0YXRlIFByb3BlcnR5O1xuZnVuY3Rpb24gZmluZENoaWxkRGF0YXNldElkcyh2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBmb3IgbGF5ZXJzLCBmaWx0ZXJzLCBjYWxsIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyBvbiBlYWNoIGl0ZW0gaW4gYXJyYXlcbiAgICBjb25zdCBjaGlsZERhdGFJZHMgPSB2YWx1ZS5tYXAoZmluZENoaWxkRGF0YXNldElkcykuZmlsdGVyKGQgPT4gZCk7XG4gICAgcmV0dXJuIGNoaWxkRGF0YUlkcy5sZW5ndGggPyBjaGlsZERhdGFJZHMgOiBudWxsO1xuICB9XG5cbiAgLy8gY2hpbGQgZGF0YSBpZCB1c3VhbGx5IHN0b3JlcyBpbiB0aGUgZGVyaXZlZCBkYXRhc2V0IGluZm9cbiAgcmV0dXJuIHZhbHVlPy5uZXdEYXRhc2V0Py5pbmZvLmlkIHx8IG51bGw7XG59XG5cbi8vIG1vdmVkIHVubWVyZ2VkIGxheWVycywgZmlsdGVycywgaW50ZXJhY3Rpb25zXG5mdW5jdGlvbiBtb3ZlVmFsdWVUb0JlTWVyZ2VkKHN0YXRlLCBwcm9wVmFsdWVzLCB7cHJvcCwgdG9NZXJnZVByb3AsIHNhdmVVbm1lcmdlZH0pIHtcbiAgLy8gcmVtb3ZlIHByb3AgdmFsdWUgZnJvbSBzdGF0ZVxuICAvLyBUT0RPOiBzaG91bGQgd2UgYWRkIHJlbW92ZSB1cGRhdGVyIHRvIG1lcmdlciBhcyB3ZWxsP1xuICBpZiAoIXByb3BWYWx1ZXMpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qgc3RhdGVSZW1vdmVkID1cbiAgICBwcm9wID09PSAnbGF5ZXJzJ1xuICAgICAgPyBwcm9wVmFsdWVzLnJlZHVjZSgoYWNjdSwgcHJvcFZhbHVlKSA9PiByZW1vdmVMYXllclVwZGF0ZXIoYWNjdSwge2lkOiBwcm9wVmFsdWUuaWR9KSwgc3RhdGUpXG4gICAgICA6IEFycmF5LmlzQXJyYXkoc3RhdGVbcHJvcF0pXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBbcHJvcF06IHN0YXRlW3Byb3BdLmZpbHRlcihwID0+ICFwcm9wVmFsdWVzLmZpbmQocHJvcFZhbHVlID0+IHAuaWQgPT09IHByb3BWYWx1ZS5pZCkpXG4gICAgICAgIH1cbiAgICAgIDogLy8gaWYgbm90IGFycmF5LCB3ZSB3b24ndCByZW1vdmUgaXQsIHJlbW92ZSBkYXRhc2V0IHNob3VsZCBoYW5kbGUgaXRcbiAgICAgICAgc3RhdGU7XG5cbiAgLy8gbW92ZSB0byBzdGF0ZVRvQmVNZXJnZWRcbiAgY29uc3QgdG9CZU1lcmdlZCA9IHtcbiAgICBbdG9NZXJnZVByb3BdOiBzYXZlVW5tZXJnZWRcbiAgICAgID8gLy8gY2FsbCBtZXJnZSBzYXZlVW5tZXJnZWQgbWV0aG9kXG4gICAgICAgIHNhdmVVbm1lcmdlZChzdGF0ZVJlbW92ZWQsIHByb3BWYWx1ZXMpXG4gICAgICA6IC8vIGlmIHRvTWVyZ2VQcm9wIGlzIGFyYWF5LCBhcHBlbmQgdG8gaXRcbiAgICAgIEFycmF5LmlzQXJyYXkoc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSlcbiAgICAgID8gWy4uLnN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0sIC4uLnByb3BWYWx1ZXNdXG4gICAgICA6IC8vIHNhdmUgcHJvcFZhbHVlcyB0byB0b01lcmdlXG4gICAgICBpc09iamVjdChzdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSxcbiAgICAgICAgICAuLi5wcm9wVmFsdWVzXG4gICAgICAgIH1cbiAgICAgIDogc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGVSZW1vdmVkLFxuICAgIC4uLnRvQmVNZXJnZWRcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZURhdGFzZXRBbmREZXBzPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YUlkVG9Vc2U6IHN0cmluZ1xuKTogVCB7XG4gIHJldHVybiBjb21wb3NlXzxUPihbXG4gICAgYXBwbHlfKHJlcGxhY2VEYXRhc2V0RGVwc0luU3RhdGUsIHtkYXRhSWQsIGRhdGFJZFRvVXNlfSksXG4gICAgYXBwbHlfKHJlbW92ZURhdGFzZXRVcGRhdGVyLCB7ZGF0YUlkfSlcbiAgXSkoc3RhdGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2U8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhSWRUb1VzZTogc3RyaW5nXG4pOiBUIHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoc3RhdGUsIHN0YXRlLnNjaGVtYSk7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IHJlcGxhY2VEYXRhc2V0QW5kRGVwcyhzdGF0ZSwgZGF0YUlkLCBkYXRhSWRUb1VzZSk7XG4gIC8vIG1ha2UgYSBjb3B5IG9mIGxheWVyT3JkZXIsIGJlY2F1c2UgbGF5ZXIgaWQgd2lsbCBiZSByZW1vdmVkIGZyb20gaXQgYnkgY2FsbGluZyByZW1vdmVMYXllclVwZGF0ZXJcbiAgY29uc3QgcHJlc2VydmVMYXllck9yZGVyID0gWy4uLnN0YXRlLmxheWVyT3JkZXJdO1xuXG4gIC8vIHByZXNlcnZlIGRhdGFzZXQgb3JkZXJcbiAgbmV4dFN0YXRlLnByZXNlcnZlRGF0YXNldE9yZGVyID0gT2JqZWN0LmtleXMoc3RhdGUuZGF0YXNldHMpLm1hcChkID0+XG4gICAgZCA9PT0gZGF0YUlkID8gZGF0YUlkVG9Vc2UgOiBkXG4gICk7XG5cbiAgLy8gcHJlc2VydmVMYXllck9yZGVyXG4gIGlmIChuZXh0U3RhdGUubGF5ZXJUb0JlTWVyZ2VkPy5sZW5ndGgpIHtcbiAgICAvLyBjb3B5IHNwbGl0IG1hcHMgdG8gYmUgbWVyZ2VkLCBiZWNhdXNlIGl0IHdpbGwgYmUgcmVzZXQgaW4gcmVtb3ZlIGxheWVyXG4gICAgbmV4dFN0YXRlLnNwbGl0TWFwc1RvQmVNZXJnZWQgPSBzZXJpYWxpemVkU3RhdGU/LnNwbGl0TWFwcyA/PyBbXTtcbiAgICBuZXh0U3RhdGUubGF5ZXJPcmRlciA9IFsuLi5wcmVzZXJ2ZUxheWVyT3JkZXJdO1xuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VEYXRhc2V0RGVwc0luU3RhdGU8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIHtkYXRhSWQsIGRhdGFJZFRvVXNlfToge2RhdGFJZDogc3RyaW5nOyBkYXRhSWRUb1VzZTogc3RyaW5nfVxuKTogVCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKHN0YXRlLCBzdGF0ZS5zY2hlbWEpO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHN0YXRlLm1lcmdlcnMucmVkdWNlKFxuICAgIChcbiAgICAgIGFjY3VTdGF0ZSxcbiAgICAgIHtwcm9wLCB0b01lcmdlUHJvcCwgcmVwbGFjZVBhcmVudERhdGFzZXRJZHMsIGdldENoaWxkRGF0YXNldElkcywgc2F2ZVVubWVyZ2VkLCBwcmVzZXJ2ZU9yZGVyfVxuICAgICkgPT4ge1xuICAgICAgLy8gZ2V0IGRhdGFzZXQgaWRzIHRoYXQgYXJlIGRlcGVuZHMgb24gdGhpcyBkYXRhc2V0XG4gICAgICBjb25zdCBwcm9wcyA9IHRvQXJyYXkocHJvcCk7XG4gICAgICBjb25zdCB0b01lcmdlUHJvcHMgPSB0b0FycmF5KHRvTWVyZ2VQcm9wKTtcbiAgICAgIGNvbnN0IHNhdmVkUHJvcHMgPSBzZXJpYWxpemVkU3RhdGUgPyBwcm9wcy5tYXAocCA9PiBzZXJpYWxpemVkU3RhdGVbcF0pIDogW107XG5cbiAgICAgIGxldCByZXBsYWNlZFN0YXRlID0gYWNjdVN0YXRlO1xuICAgICAgc2F2ZWRQcm9wcy5mb3JFYWNoKChwcm9wVmFsdWUsIGkpID0+IHtcbiAgICAgICAgY29uc3QgbWVyZ2VyT3B0aW9ucyA9IHtcbiAgICAgICAgICBwcm9wOiBwcm9wc1tpXSxcbiAgICAgICAgICB0b01lcmdlUHJvcDogdG9NZXJnZVByb3BzW2ldLFxuICAgICAgICAgIGdldENoaWxkRGF0YXNldElkcyxcbiAgICAgICAgICBzYXZlVW5tZXJnZWRcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXBsYWNlZEl0ZW0gPVxuICAgICAgICAgIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzPy4ocHJvcFZhbHVlLCBkYXRhSWQsIGRhdGFJZFRvVXNlKSB8fFxuICAgICAgICAgIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyhwcm9wVmFsdWUsIGRhdGFJZCwgZGF0YUlkVG9Vc2UpO1xuICAgICAgICByZXBsYWNlZFN0YXRlID0gcmVwbGFjZWRJdGVtXG4gICAgICAgICAgPyByZXBsYWNlUHJvcFZhbHVlSW5TdGF0ZShyZXBsYWNlZFN0YXRlLCByZXBsYWNlZEl0ZW0sIG1lcmdlck9wdGlvbnMpXG4gICAgICAgICAgOiByZXBsYWNlZFN0YXRlO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBtZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICByZXBsYWNlZFN0YXRlW21lcmdlck9wdGlvbnMudG9NZXJnZVByb3BdPy5sZW5ndGggJiZcbiAgICAgICAgICBwcmVzZXJ2ZU9yZGVyXG4gICAgICAgICkge1xuICAgICAgICAgIHJlcGxhY2VkU3RhdGVbcHJlc2VydmVPcmRlcl0gPSBwcm9wVmFsdWUubWFwKGl0ZW0gPT4gaXRlbS5pZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVwbGFjZWRTdGF0ZTtcbiAgICB9LFxuICAgIHN0YXRlXG4gICk7XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZVByb3BWYWx1ZUluU3RhdGUoXG4gIHN0YXRlLFxuICByZXBsYWNlZEl0ZW0sXG4gIHtwcm9wLCB0b01lcmdlUHJvcCwgZ2V0Q2hpbGREYXRhc2V0SWRzLCBzYXZlVW5tZXJnZWR9XG4pIHtcbiAgLy8gcHJvcCBpcyBkZXBlbmRzIG9uIHRoZSBkYXRhc2V0IHRvIGJlIHJlcGxhY2VkXG4gIC8vIHJlbW92ZSBwcm9wIGZyb20gc3RhdGUsIGFuZCBtb3ZlIGl0IHRvIHRvQmVNZXJnZWRcbiAgbGV0IG5leHRTdGF0ZSA9IG1vdmVWYWx1ZVRvQmVNZXJnZWQoc3RhdGUsIHJlcGxhY2VkSXRlbSwge3Byb3AsIHRvTWVyZ2VQcm9wLCBzYXZlVW5tZXJnZWR9KTtcbiAgY29uc3QgY2hpbGREYXRhSWRzID0gZ2V0Q2hpbGREYXRhc2V0SWRzPy4ocmVwbGFjZWRJdGVtKSB8fCBmaW5kQ2hpbGREYXRhc2V0SWRzKHJlcGxhY2VkSXRlbSk7XG5cbiAgaWYgKGNoaWxkRGF0YUlkcykge1xuICAgIG5leHRTdGF0ZSA9IHRvQXJyYXkoY2hpbGREYXRhSWRzKS5yZWR1Y2UoKGFjY3UsIGNoaWxkRGF0YUlkKSA9PiB7XG4gICAgICAvLyBzaG91bGRuJ3QgbmVlZCB0byBjaGFuZ2UgY2hpbGQgZGF0YXNldCBpZCxcbiAgICAgIC8vIGJ1dCBzdGlsbCBuZWVkIHRvIG1vdmUgb3V0IG9mIHN0YXRlIGFuZCBtZXJnZSBiYWNrIGluXG4gICAgICByZXR1cm4gcmVwbGFjZURhdGFzZXRBbmREZXBzKGFjY3UsIGNoaWxkRGF0YUlkLCBjaGlsZERhdGFJZCk7XG4gICAgfSwgbmV4dFN0YXRlKTtcbiAgfVxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsS0FBQSxHQUFBQyxPQUFBO0FBRUEsSUFBQUMsZ0JBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLFVBQUEsR0FBQUQsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFJLE9BQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFVBQUEsR0FBQUgsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFNLElBQUEsR0FBQUosc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFPLFFBQUEsR0FBQUwsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFRLEtBQUEsR0FBQU4sc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFTLEtBQUEsR0FBQVAsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFVLElBQUEsR0FBQVIsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFXLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQVosT0FBQTtBQUVBLElBQUFhLE9BQUEsR0FBQWIsT0FBQTtBQVFBLElBQUFjLFFBQUEsR0FBQWQsT0FBQTtBQTJCQSxJQUFBZSxNQUFBLEdBQUFmLE9BQUE7QUE2QkEsSUFBQWdCLFlBQUEsR0FBQWhCLE9BQUE7QUFFQSxJQUFBaUIsVUFBQSxHQUFBakIsT0FBQTtBQTJCQSxJQUFBa0IsT0FBQSxHQUFBbEIsT0FBQTtBQUNBLElBQUFtQixnQkFBQSxHQUFBbkIsT0FBQTtBQVVBLElBQUFvQixjQUFBLEdBQUFwQixPQUFBO0FBQ0EsSUFBQXFCLGVBQUEsR0FBQXJCLE9BQUE7QUFVQSxJQUFBc0IsUUFB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
4114
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYmJveCIsInJlcXVpcmUiLCJfY29weVRvQ2xpcGJvYXJkIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9kZWVwbWVyZ2UiLCJfd2luZG93IiwiX2Nsb25lRGVlcCIsIl9nZXQiLCJfaXNFcXVhbCIsIl9waWNrIiwiX3VuaXEiLCJfeG9yIiwiX3Rhc2tzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfdGFza3MyIiwiX2FjdGlvbnMiLCJfdXRpbHMiLCJfY29tbW9uVXRpbHMiLCJfY29uc3RhbnRzIiwiX2xheWVycyIsIl9jb21wb3NlckhlbHBlcnMiLCJfbWVyZ2VySGFuZGxlciIsIl92aXNTdGF0ZU1lcmdlciIsIl9zY2hlbWFzIiwiX3RhYmxlIiwiX2ludGVyYWN0aW9uVXRpbHMiLCJfbGF5ZXJVdGlscyIsIl9lZmZlY3RzIiwiX2RhdGFVdGlscyIsIl9leGNsdWRlZCIsIl9leGNsdWRlZDIiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJfdHlwZW9mMyIsImhhcyIsImdldCIsInNldCIsIl90IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJfdG9Qcm9wZXJ0eUtleSIsIl90b1ByaW1pdGl2ZSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwiVHlwZUVycm9yIiwiU3RyaW5nIiwiTnVtYmVyIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJkb25lIiwidmFsdWUiLCJhIiwidSIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGlzYWJsZVN0YWNrQ2FwdHVyaW5nIiwidmlzU3RhdGVVcGRhdGVycyIsImRlZmF1bHRJbnRlcmFjdGlvbkNvbmZpZyIsImV4cG9ydHMiLCJ0b29sdGlwIiwiaWQiLCJsYWJlbCIsImVuYWJsZWQiLCJjb25maWciLCJmaWVsZHNUb1Nob3ciLCJjb21wYXJlTW9kZSIsImNvbXBhcmVUeXBlIiwiQ09NUEFSRV9UWVBFUyIsIkFCU09MVVRFIiwiZ2VvY29kZXIiLCJwb3NpdGlvbiIsImxpbWl0U2VhcmNoIiwiYnJ1c2giLCJzaXplIiwiY29vcmRpbmF0ZSIsIkRFRkFVTFRfQU5JTUFUSU9OX0NPTkZJRyIsImRvbWFpbiIsImN1cnJlbnRUaW1lIiwic3BlZWQiLCJpc0FuaW1hdGluZyIsInRpbWVTdGVwcyIsInRpbWVGb3JtYXQiLCJ0aW1lem9uZSIsImRlZmF1bHRUaW1lRm9ybWF0IiwiaGlkZUNvbnRyb2wiLCJkdXJhdGlvbiIsIkRFRkFVTFRfRURJVE9SIiwibW9kZSIsIkVESVRPUl9NT0RFUyIsIkRSQVdfUE9MWUdPTiIsImZlYXR1cmVzIiwic2VsZWN0ZWRGZWF0dXJlIiwidmlzaWJsZSIsIklOSVRJQUxfVklTX1NUQVRFIiwibWFwSW5mbyIsInRpdGxlIiwiZGVzY3JpcHRpb24iLCJsYXllcnMiLCJsYXllckRhdGEiLCJsYXllclRvQmVNZXJnZWQiLCJsYXllck9yZGVyIiwibGF5ZXJPcmRlclRvQmVNZXJnZWQiLCJmaWx0ZXJzIiwiZmlsdGVyVG9CZU1lcmdlZCIsImRhdGFzZXRzIiwiZWRpdGluZ0RhdGFzZXQiLCJ1bmRlZmluZWQiLCJlZmZlY3RzIiwiZWZmZWN0T3JkZXIiLCJhbm5vdGF0aW9ucyIsImFubm90YXRpb25zVG9CZU1lcmdlZCIsInNlbGVjdGVkQW5ub3RhdGlvbklkIiwiaXNFZGl0aW5nQW5ub3RhdGlvblRleHQiLCJpbnRlcmFjdGlvbkNvbmZpZyIsImludGVyYWN0aW9uVG9CZU1lcmdlZCIsImxheWVyQmxlbmRpbmciLCJvdmVybGF5QmxlbmRpbmciLCJob3ZlckluZm8iLCJjbGlja2VkIiwibW91c2VQb3MiLCJtYXhEZWZhdWx0VG9vbHRpcHMiLCJNQVhfREVGQVVMVF9UT09MVElQUyIsInNwbGl0TWFwcyIsInNwbGl0TWFwc1RvQmVNZXJnZWQiLCJpc01lcmdpbmdEYXRhc2V0cyIsImxheWVyQ2xhc3NlcyIsIkxheWVyQ2xhc3NlcyIsImFuaW1hdGlvbkNvbmZpZyIsImVkaXRvciIsImZpbGVMb2FkaW5nIiwiZmlsZUxvYWRpbmdQcm9ncmVzcyIsImxvYWRpbmdJbmRpY2F0b3JWYWx1ZSIsImxvYWRlcnMiLCJsb2FkT3B0aW9ucyIsIm1lcmdlcnMiLCJWSVNfU1RBVEVfTUVSR0VSUyIsInNjaGVtYSIsIktlcGxlckdMU2NoZW1hIiwiQUNUSU9OX1RBU0tfRklUX0JPVU5EUyIsIlRhc2siLCJmcm9tQ2FsbGJhY2siLCJfIiwiY2IiLCJBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OIiwidXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhIiwic3RhdGUiLCJfcmVmIiwibGF5ZXIiLCJpZHgiLCJtYXAiLCJseXIiLCJkIiwidXBkYXRlU3RhdGVPbkxheWVyVmlzaWJpbGl0eUNoYW5nZSIsIm5ld1N0YXRlIiwiaXNWaXNpYmxlIiwiYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcCIsInJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyIsImFuaW1hdGlvbiIsInVwZGF0ZUFuaW1hdGlvbkRvbWFpbiIsInBpY2tDaGFuZ2VkUHJvcHMiLCJwcmV2IiwiY2hhbmdlZFByb3BzIiwicGlja1Byb3BzT2YiLCJvYmoiLCJrZXkiLCJwcm90b3R5cGUiLCJpc0VxdWFsIiwiVklTVUFMX0NIQU5ORUxfUFJPUF9UWVBFUyIsImFwcGx5TGF5ZXJDb25maWdVcGRhdGVyIiwiYWN0aW9uIiwiX3NlcmlhbGl6ZUxheWVyIiwib2xkTGF5ZXJJZCIsIm5ld0xheWVyQ29uZmlnIiwibGF5ZXJJbmRleCIsIm5ld1BhcnNlZExheWVyIiwicGFyc2VMYXllckNvbmZpZyIsIm9sZExheWVyIiwiZmluZCIsImwiLCJkYXRhc2V0IiwiZGF0YUlkIiwibmV3TGF5ZXIiLCJ2YWxpZGF0ZUxheWVyV2l0aERhdGEiLCJuZXh0U3RhdGUiLCJ0eXBlIiwib2xkTGF5ZXJJbmRleCIsImZpbmRJbmRleCIsImxheWVyVHlwZUNoYW5nZVVwZGF0ZXIiLCJsYXllclR5cGVDaGFuZ2UiLCJuZXdMYXllcklkIiwiYXBwbHlMYXllckNvbmZpZyIsInNlcmlhbGl6ZWRPbGRMYXllciIsInNlcmlhbGl6ZUxheWVyIiwic2VyaWFsaXplZE5ld0xheWVyIiwiY2hhbmdlZCIsInZpc0NvbmZpZyIsImxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlciIsImxheWVyVmlzQ29uZmlnQ2hhbmdlIiwidmlzdWFsQ2hhbm5lbHMiLCJjaGFubmVsTmFtZSIsImNoYW5uZWwiLCJjaGFubmVsUHJvcE5hbWVzIiwicHJvcCIsInNvbWUiLCJsYXllclZpc3VhbENoYW5uZWxDaGFuZ2VVcGRhdGVyIiwibGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlIiwicGljayIsIl9pdGVyYXRvciIsIl9zdGVwIiwiZXJyIiwibGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyIiwibGF5ZXJDb25maWdDaGFuZ2UiLCJ1cGRhdGVsYXllclZpc2liaWx0eSIsImZpbHRlckluZGV4IiwiZmlsdGVyU3luY2VkV2l0aFRpbWVsaW5lIiwiaXNMYXllckFuaW1hdGFibGUiLCJzeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lVXBkYXRlciIsImVuYWJsZSIsImdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzIiwicHJvcHMiLCJuZXdDb25maWciLCJfYWN0aW9uJG5ld0NvbmZpZyIsInJlc3RDb25maWciLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMyIiwic3RhdGVXaXRoRGF0YUlkIiwibGF5ZXJEYXRhSWRDaGFuZ2VVcGRhdGVyIiwibmV4dExheWVyIiwidXBkYXRlTGF5ZXJDb25maWciLCJzaG91bGRDYWxjdWxhdGVMYXllckRhdGEiLCJvbGRMYXllckRhdGEiLCJ1cGRhdGVMYXllckRhdGFSZXN1bHQiLCJjYWxjdWxhdGVMYXllckRhdGEiLCJsYXllckFuaW1hdGlvbkNoYW5nZVVwZGF0ZXIiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhIiwibGF5ZXJUb2dnbGVWaXNpYmlsaXR5VXBkYXRlciIsImxheWVySWQiLCJzcGxpdE1hcElkIiwibWFwSW5kZXgiLCJzbSIsInRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlciIsInRvZ2dsZUxheWVyRm9yTWFwIiwic3luY2VkV2l0aExheWVyVGltZWxpbmUiLCJsYXllclNldElzVmFsaWRVcGRhdGVyIiwiaXNWYWxpZCIsImxheWVyVG9VcGRhdGUiLCJuZXdEYXRhIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTIiLCJhZGRPclJlbW92ZVRleHRMYWJlbHMiLCJuZXdGaWVsZHMiLCJ0ZXh0TGFiZWwiLCJkZWZhdWx0VGV4dExhYmVsIiwiREVGQVVMVF9URVhUX0xBQkVMIiwibmV3VGV4dExhYmVsIiwiY3VycmVudEZpZWxkcyIsInRsIiwiZmllbGQiLCJhZGRGaWVsZHMiLCJpbmNsdWRlcyIsImRlbGV0ZUZpZWxkcyIsImZkIiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsImFmIiwidXBkYXRlVGV4dExhYmVsUHJvcEFuZFZhbHVlIiwic3BsaWNlIiwibGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyIiwiX29sZExheWVyJGdldERlZmF1bHRMIiwiX29sZExheWVyJGdldERlZmF1bHRMMiIsImdldERlZmF1bHRMYXllckNvbmZpZyIsInZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhIiwibG9hZGVkTGF5ZXIiLCJhbGxvd0VtcHR5Q29sdW1uIiwiaXNWYWxpZFRvU2F2ZSIsInZhbGlkYXRlZCIsIm9sZExheWVyVHlwZSIsIm5ld0RhdGFzZXRGaWVsZHMiLCJmaWVsZHMiLCJyZW1hcHBlZEZpZWxkcyIsInZhbHVlcyIsIl9yZWYyIiwiZmllbGRLZXkiLCJjdXJyZW50RmllbGQiLCJtYXRjaGVkIiwiX3JlZjMiLCJ2YWxpZGF0ZVZpc3VhbENoYW5uZWwiLCJpc0NvbmZpZ0FjdGl2ZSIsInVwZGF0ZUxheWVyRG9tYWluIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTMiLCJzZXRJbml0aWFsTGF5ZXJDb25maWciLCJyZXN1bHQiLCJmaW5kRGVmYXVsdExheWVyUHJvcHMiLCJuZXdUeXBlIiwib2xkSWQiLCJDb25zb2xlIiwiZXJyb3IiLCJkZWZhdWx0TGF5ZXJQcm9wcyIsImFzc2lnbkNvbmZpZ1RvTGF5ZXIiLCJ2aXNDb25maWdTZXR0aW5ncyIsImlzTGF5ZXJIb3ZlcmVkIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTQiLCJzZXR0aW5ncyIsIl9zZXR0aW5ncyRsYXllcnMiLCJvbGRMYXllck1hcCIsIm90aGVyTGF5ZXJzIiwicmVwbGFjZUxheWVyRW50cnlJbkxheWVyT3JkZXIiLCJuZXdWaXNDb25maWciLCJ1cGRhdGVMYXllclZpc0NvbmZpZyIsInVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbCIsInVwZGF0ZWRTdGF0ZSIsInZpc3VhbENoYW5uZWwiLCJjaGFubmVsU2NhbGVUeXBlIiwiQ0hBTk5FTF9TQ0FMRVMiLCJjb2xvciIsInVwZGF0ZUxheWVyQ29sb3JVSSIsInJhbmdlIiwiY29sb3JSYW5nZUNvbmZpZyIsImNvbG9yVUkiLCJjdXN0b21CcmVha3MiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNSIsInNjYWxlIiwiU0NBTEVfVFlQRVMiLCJjdXN0b21PcmRpbmFsIiwiY3VzdG9tUGFsZXR0ZSIsImluaXRDdXN0b21QYWxldHRlQnlDdXN0b21TY2FsZSIsIm9yZGluYWxEb21haW4iLCJjb2xvckJyZWFrcyIsInNob3dDb2xvckNoYXJ0IiwiZWRpdEJvdW5kcyIsIl9jYWxjdWxhdGVMYXllckRhdGE2Iiwic2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlciIsIl9yZWY0IiwicmVkdWNlIiwiYWNjdSIsInNldEZpbHRlckFuaW1hdGlvblRpbWVVcGRhdGVyIiwic2V0RmlsdGVyVXBkYXRlciIsInNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXIiLCJfcmVmNSIsImFuaW1hdGlvbldpbmRvdyIsIm5ld0ZpbHRlciIsInN3YXBfIiwibmV3U3luY1RpbWVsaW5lTW9kZSIsImdldFN5bmNBbmltYXRpb25Nb2RlIiwic2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIiLCJhcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXIiLCJfc2VyaWFsaXplRmlsdGVyIiwiZmlsdGVySWQiLCJvbGRGaWx0ZXIiLCJzZXJpYWxpemVkT2xkRmlsdGVyIiwic2VyaWFsaXplRmlsdGVyIiwic2VyaWFsaXplZE5ld0ZpbHRlciIsInNldEZpbHRlciIsIl9hY3Rpb24kdmFsdWVJbmRleCIsInZhbHVlSW5kZXgiLCJ0b0FycmF5IiwiZGF0YXNldElkc1RvRmlsdGVyIiwiX2xvb3AiLCJyZXMiLCJ2IiwiX3VwZGF0ZUZpbHRlclByb3AiLCJlbmxhcmdlZEZpbHRlciIsInZpZXciLCJGSUxURVJfVklFV19UWVBFUyIsImVubGFyZ2VkIiwic2lkZSIsImZpbHRlcmVkRGF0YXNldHMiLCJhcHBseUZpbHRlcnNUb0RhdGFzZXRzIiwidW5pcSIsImZpbHRlcldpdGhQTG90IiwidXBkYXRlRmlsdGVyUGxvdCIsInVwZGF0ZUFsbExheWVyRG9tYWluRGF0YSIsIkZJTFRFUl9UWVBFUyIsInRpbWVSYW5nZSIsImFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIiLCJfdXBkYXRlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4IiwiX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleCIsIm5leHRWYWx1ZSIsImdldERlZmF1bHRGaWx0ZXIiLCJyZW1vdmVGaWx0ZXJQbG90IiwiX2kiLCJfYXJyIiwibmV4dFZhbCIsImRvbWFpblN0ZXBzIiwibWVyZ2VGaWx0ZXJEb21haW4iLCJuZXh0RmlsdGVyIiwic3RlcCIsImFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4iLCJkYXRhc2V0SWRzIiwiRklMVEVSX1VQREFURVJfUFJPUFMiLCJvbGREYXRhSWQiLCJkYXRhc2V0SWQiLCJfYXBwbHlGaWx0ZXJGaWVsZE5hbWUiLCJhcHBseUZpbHRlckZpZWxkTmFtZSIsIm1lcmdlRG9tYWluIiwidXBkYXRlZEZpbHRlciIsIm5ld0RhdGFzZXQiLCJncHUiLCJzZXRGaWx0ZXJHcHVNb2RlIiwiYXNzaWduR3B1Q2hhbm5lbCIsImxheWVySWREaWZmZXJlbmNlIiwieG9yIiwibGF5ZXJEYXRhSWRzIiwibGlkIiwibmV3RGF0YUlkcyIsInNldEZpbHRlclBsb3RVcGRhdGVyIiwiX3JlZjYiLCJuZXdQcm9wIiwicGlja18iLCJtZXJnZV8iLCJwbG90VHlwZSIsImNoYXJ0VHlwZSIsInlBeGlzIiwiUExPVF9UWVBFUyIsImxpbmVDaGFydCIsImhpc3RvZ3JhbSIsImFkZEZpbHRlclVwZGF0ZXIiLCJjcmVhdGVPclVwZGF0ZUZpbHRlclVwZGF0ZXIiLCJvcmlnaW5hbEluZGV4IiwiaW5kZXgiLCJsYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyIiwiX3JlZjciLCJvbGRWaXhDb25maWciLCJ0b2dnbGVGaWx0ZXJBbmltYXRpb25VcGRhdGVyIiwiaXNGaWx0ZXJBbmltYXRpb25Db25maWciLCJzZXRBbmltYXRpb25Db25maWdVcGRhdGVyIiwiaXNTaWRlRmlsdGVyIiwiYXBwbHlGaWx0ZXJDb25maWciLCJ0b2dnbGVMYXllckFuaW1hdGlvblVwZGF0ZXIiLCJ0b2dnbGVMYXllckFuaW1hdGlvbkNvbnRyb2xVcGRhdGVyIiwidXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyIiwidXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIiLCJfcmVmOCIsInNldEZpbHRlclZpZXdVcGRhdGVyIiwic2hvdWxkUmVzZXRPdGhlckZpbHRlcnNWaWV3IiwidG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXIiLCJmZWF0dXJlVG9GaWx0ZXJWYWx1ZSIsInJlbW92ZUZpbHRlclVwZGF0ZXIiLCJfc3RhdGUkZmlsdGVycyRpZHgiLCJuZXdGaWx0ZXJzIiwibmV3RWRpdG9yIiwiZ2V0RmlsdGVySWRJbkZlYXR1cmUiLCJhZGRMYXllclVwZGF0ZXIiLCJuZXdMYXllckRhdGEiLCJjcmVhdGVMYXllckZyb21Db25maWciLCJ3YXJuIiwiX2FjdGlvbiRkYXRhc2V0SWQiLCJkZWZhdWx0RGF0YXNldCIsIkxheWVyIiwicmVtb3ZlTGF5ZXJVcGRhdGVyIiwiX3JlZjkiLCJpc0Zpbml0ZSIsImxheWVyVG9SZW1vdmUiLCJmaWx0ZXJPdXRCeUlkIiwicmVtb3ZlRWxlbWVudEF0SW5kZXgiLCJyZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIiLCJyZW9yZGVyTGF5ZXJVcGRhdGVyIiwiX3JlZjAiLCJvcmRlciIsImFkZExheWVyR3JvdXBVcGRhdGVyIiwibGF5ZXJHcm91cCIsImdldE5ld0xheWVyR3JvdXAiLCJuZXdMYXllck9yZGVyIiwiYWRkTGF5ZXJPckdyb3VwVG9MYXllck9yZGVyIiwicmVtb3ZlTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwVG9SZW1vdmUiLCJnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIiLCJsYXllcklkc1RvUmVtb3ZlIiwiZ2V0RmxhdExheWVyT3JkZXIiLCJ1cGRhdGVMYXllckdyb3VwVXBkYXRlciIsIm9wdGlvbnMiLCJuZXdMYXllckdyb3VwIiwibGF5ZXJJZHMiLCJhY2MiLCJ1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyIiwiYWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyIiwibGF5ZXJHcm91cElkIiwiZW50cnkiLCJuZXdHcm91cExheWVyT3JkZXIiLCJyZW1vdmVMYXllckZyb21MYXllckdyb3VwVXBkYXRlciIsIm5ld0xheWVyR3JvdXBPcmRlciIsInN3YXBMYXllck9yZGVyRW50cmllc1VwZGF0ZXIiLCJvcmlnaW5MYXllcklkIiwiZGVzdGluYXRpb25MYXllcklkIiwib3JpZ2luTGF5ZXJHcm91cElkIiwiZGVzdGluYXRpb25MYXllckdyb3VwSWQiLCJvcmlnaW5JbmRleCIsImRlc3RpbmF0aW9uSW5kZXgiLCJhcnJheU1vdmUiLCJkZXN0SW5kZXgiLCJkdXBsaWNhdGVMYXllclVwZGF0ZXIiLCJfcmVmMSIsIm9yaWdpbmFsIiwib3JpZ2luYWxMYXllck9yZGVySWR4IiwiZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkIiwibmV3TGFiZWwiLCJwb3N0Zml4IiwiZ2VuZXJhdGVIYXNoSWQiLCJMQVlFUl9JRF9MRU5HVEgiLCJwYXJlbnRHcm91cCIsImZpbmRQYXJlbnRHcm91cEZvckxheWVyIiwibGF5ZXJPcmRlcldpdGhvdXRQcmVwZW5kZWQiLCJpZHhJbkdyb3VwIiwiYXJyYXlJbnNlcnQiLCJ1cGRhdGVkR3JvdXAiLCJhZGRFZmZlY3RVcGRhdGVyIiwiX2FjdGlvbiRjb25maWciLCJfYWN0aW9uJGNvbmZpZzIiLCJfYWN0aW9uJGNvbmZpZzMiLCJMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCIsImVmZmVjdCIsIkRJU1RBTkNFX0ZPR19UWVBFIiwiU1VSRkFDRV9GT0dfVFlQRSIsIm5ld0VmZmVjdCIsImNyZWF0ZUVmZmVjdCIsInNldFByb3BzIiwiZml4RWZmZWN0T3JkZXIiLCJyZW1vdmVFZmZlY3RVcGRhdGVyIiwiX3JlZjEwIiwiZWZmZWN0VG9SZW1vdmUiLCJlZmZlY3RJZCIsInJlb3JkZXJFZmZlY3RVcGRhdGVyIiwiX3JlZjExIiwidXBkYXRlRWZmZWN0VXBkYXRlciIsIl9yZWYxMiIsImlkeDIiLCJlZmZlY3RPcmRlcklkIiwibmV3RWZmZWN0cyIsIm1ha2VOZXdBbm5vdGF0aW9uIiwiX2NvbmZpZyRraW5kIiwiX2NvbmZpZyRpZCIsIl9jb25maWckaXNWaXNpYmxlIiwiX2NvbmZpZyRhdXRvU2l6ZSIsIl9jb25maWckYXV0b1NpemVZIiwiX2NvbmZpZyRhbmNob3JQb2ludCIsIl9jb25maWckbGFiZWwiLCJfY29uZmlnJGxpbmVDb2xvciIsIl9jb25maWckbGluZVdpZHRoIiwiX2NvbmZpZyR0ZXh0V2lkdGgiLCJfY29uZmlnJHRleHRIZWlnaHQiLCJfY29uZmlnJHRleHRWZXJ0aWNhbEEiLCJfYXJtTGVuZ3RoIiwiX2FuZ2xlIiwiX2FybUxlbmd0aDIiLCJfYW5nbGUyIiwiX2FybUxlbmd0aDMiLCJfYW5nbGUzIiwiX3JhZGl1c0luTWV0ZXJzIiwia2luZCIsIklOSVRJQUxfQU5OT1RBVElPTl9LSU5EIiwiYmFzZSIsImF1dG9TaXplIiwiYXV0b1NpemVZIiwiYW5jaG9yUG9pbnQiLCJsaW5lQ29sb3IiLCJJTklUSUFMX0FOTk9UQVRJT05fTElORV9DT0xPUiIsImxpbmVXaWR0aCIsIklOSVRJQUxfQU5OT1RBVElPTl9MSU5FX1dJRFRIIiwidGV4dFdpZHRoIiwiSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfV0lEVEgiLCJ0ZXh0SGVpZ2h0IiwiSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfSEVJR0hUIiwidGV4dFZlcnRpY2FsQWxpZ24iLCJBbm5vdGF0aW9uS2luZCIsIlBPSU5UIiwiYXJtTGVuZ3RoIiwiSU5JVElBTF9BTk5PVEFUSU9OX0FSTV9MRU5HVEgiLCJhbmdsZSIsIklOSVRJQUxfQU5OT1RBVElPTl9BTkdMRSIsIkFSUk9XIiwiQ0lSQ0xFIiwicmFkaXVzSW5NZXRlcnMiLCJURVhUIiwiYWRkQW5ub3RhdGlvblVwZGF0ZXIiLCJuZXdBbm5vdGF0aW9uIiwicmVtb3ZlQW5ub3RhdGlvblVwZGF0ZXIiLCJfcmVmMTMiLCJ1cGRhdGVBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYxNCIsIm5leHRBbm5vdGF0aW9uIiwibmV3QW5ub3RhdGlvbnMiLCJkdXBsaWNhdGVBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYxNSIsImNsb25lRGVlcCIsInNldFNlbGVjdGVkQW5ub3RhdGlvblVwZGF0ZXIiLCJfcmVmMTYiLCJpc0VkaXRpbmdUZXh0IiwicmVtb3ZlRGF0YXNldFVwZGF0ZXIiLCJkYXRhc2V0S2V5IiwiX3N0YXRlJGRhdGFzZXRzIiwibmV3RGF0YXNldHMiLCJsYXllcnNUb1JlbW92ZSIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJpbmRleE9mIiwicmVtb3ZlRGF0YXNldEZyb21JbnRlcmFjdGlvbkNvbmZpZyIsIl9yZWYxNyIsIl9pbnRlcmFjdGlvbkNvbmZpZyIsIl9jb25maWckZmllbGRzVG9TaG93IiwidXBkYXRlTGF5ZXJCbGVuZGluZ1VwZGF0ZXIiLCJ1cGRhdGVPdmVybGF5QmxlbmRpbmdVcGRhdGVyIiwic2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXIiLCJ1cGRhdGVUYWJsZUNvbG9yVXBkYXRlciIsInVwZGF0ZURhdGFzZXRQcm9wc1VwZGF0ZXIiLCJuZXdDb2xvciIsInJlc2V0TWFwQ29uZmlnVXBkYXRlciIsImluaXRpYWxTdGF0ZSIsInJlY2VpdmVNYXBDb25maWdVcGRhdGVyIiwiX3JlZjE4IiwiX3JlZjE4JHBheWxvYWQiLCJwYXlsb2FkIiwiX3JlZjE4JHBheWxvYWQkY29uZmlnIiwiX3JlZjE4JHBheWxvYWQkb3B0aW9uIiwidmlzU3RhdGUiLCJrZWVwRXhpc3RpbmdDb25maWciLCJtZXJnZWRTdGF0ZSIsIl9pdGVyYXRvcjMiLCJfc3RlcDMiLCJtZXJnZXIiLCJpc1ZhbGlkTWVyZ2VyIiwiaGFzUHJvcHNUb01lcmdlIiwibWVyZ2UiLCJnZXRQcm9wVmFsdWVUb01lcmdlciIsInRvTWVyZ2VQcm9wIiwibGF5ZXJIb3ZlclVwZGF0ZXIiLCJpbmZvIiwiaW50ZXJhY3Rpb25Db25maWdDaGFuZ2VVcGRhdGVyIiwiY29udHJhZGljdCIsImsiLCJsYXllckNsaWNrVXBkYXRlciIsInBpbm5lZCIsInBpY2tlZCIsIm1hcENsaWNrVXBkYXRlciIsIm1vdXNlTW92ZVVwZGF0ZXIiLCJfcmVmMTkiLCJldnQiLCJwb2ludCIsIm1vdXNlUG9zaXRpb24iLCJsbmdMYXQiLCJ0b2dnbGVTcGxpdE1hcFVwZGF0ZXIiLCJjb21wdXRlU3BsaXRNYXBMYXllcnMiLCJkdXBsaWNhdGUiLCJjbG9zZVNwZWNpZmljTWFwQXRJbmRleCIsIl9yZWYyMCIsInVwZGF0ZVZpc0RhdGFVcGRhdGVyIiwiY3JlYXRlRGF0YXNldFRhc2tzIiwibm90aWZpY2F0aW9uVGFza3MiLCJfcmVmMjEiLCJkYXRhc2V0SW5kZXgiLCJfcmVmMjEkaW5mbyIsInJlc3QiLCJ0YXNrIiwiY3JlYXRlTmV3RGF0YUVudHJ5IiwiYWRkTm90aWZpY2F0aW9uIiwiZXJyb3JOb3RpZmljYXRpb24iLCJtZXNzYWdlIiwiZGF0YXNldHNBbGxTZXR0bGVkVGFzayIsImFsbFNldHRsZWQiLCJyZXN1bHRzIiwiY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3MiLCJhZGRUb01hcE9wdGlvbnMiLCJzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlciIsInBheWxvYWRfIiwiY2hhbmdlIiwid2l0aFRhc2siLCJjcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIiLCJfYWN0aW9uJHBheWxvYWQiLCJuZXdEYXRhRW50cmllcyIsInN0YXR1cyIsIkFDVElPTl9UQVNLIiwicmVhc29uIiwibWVyZ2VEYXRhc2V0c0J5T3JkZXIiLCJsYXllck1lcmdlcnMiLCJtIiwid2FpdEZvckxheWVyRGF0YSIsImRhdGFzZXRNZXJnZXJzIiwicG9zdE1lcmdlclBheWxvYWQiLCJhcHBseU1lcmdlcnNVcGRhdGVyIiwibWVyZ2VTdGF0ZVJlc3VsdCIsIm1lcmdlU3RhdGVGcm9tTWVyZ2VycyIsImFsbE1lcmdlZCIsInBvc3RNZXJnZVVwZGF0ZXIiLCJsYXllclZpc0NvbmZpZ0Zyb21BZGREYXRhT3B0aW9ucyIsInBhdGNoIiwibGF5ZXJWaXNDb25maWciLCJfdHlwZW9mMiIsImZEYXRhSWQiLCJkYXRhc2V0RmlsdGVyZWQiLCJkYXRhRW1wdHkiLCJuZXdMYXllcnMiLCJhdXRvQ3JlYXRlTGF5ZXJzIiwiYWRkRGVmYXVsdExheWVycyIsIm1lcmdlTGF5ZXJWaXNDb25maWdGb3JOZXdEYXRhc2V0cyIsInRvb2x0aXBGaWVsZHMiLCJhdXRvQ3JlYXRlVG9vbHRpcHMiLCJhZGREZWZhdWx0VG9vbHRpcHMiLCJ1cGRhdGVkRGF0YXNldHMiLCJjZW50ZXJNYXAiLCJib3VuZHMiLCJmaW5kTWFwQm91bmRzIiwiZml0Qm91bmRzVGFzayIsImZpdE1hcEJvdW5kcyIsInJlbmFtZURhdGFzZXRVcGRhdGVyIiwiQUxMT1dFRF9VUERBVEVfREFUQVNFVF9QUk9QUyIsInZhbGlkYXRlRGF0YXNldFVwZGF0ZVByb3BzIiwidmFsaWRhdGVkUHJvcHMiLCJlbnRyaWVzIiwiX2VudHJ5IiwiX3NsaWNlZFRvQXJyYXkyIiwiaXNSZ2JDb2xvciIsImlzUGxhaW5PYmplY3QiLCJkZWVwbWVyZ2UiLCJleGlzdGluZyIsImNvcHlUYWJsZUFuZFVwZGF0ZSIsIl9zdGF0ZSRzcGxpdE1hcHMkaW5kZSIsImluZGV4VG9SZXRyaWV2ZSIsIm1hcExheWVycyIsImxvYWRGaWxlc1VwZGF0ZXIiLCJmaWxlcyIsIl9hY3Rpb24kb25GaW5pc2giLCJvbkZpbmlzaCIsImxvYWRGaWxlc1N1Y2Nlc3MiLCJpbml0aWFsRmlsZUxvYWRpbmdQcm9ncmVzcyIsImZpbGVDYWNoZSIsImZpbGVzVG9Mb2FkIiwibG9hZE5leHRGaWxlVXBkYXRlciIsImxvYWRGaWxlU3RlcFN1Y2Nlc3NVcGRhdGVyIiwiZmlsZU5hbWUiLCJfc3RhdGUkZmlsZUxvYWRpbmciLCJzdGF0ZVdpdGhQcm9ncmVzcyIsInVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyIiwicHJvZ3Jlc3MiLCJwZXJjZW50Iiwic3RhdGVXaXRoQ2FjaGUiLCJERUxBWV9UQVNLIiwibG9hZE5leHRGaWxlIiwiX2ZpbGVzVG9Mb2FkIiwiX3RvQXJyYXkyIiwiZmlsZSIsInJlbWFpbmluZ0ZpbGVzVG9Mb2FkIiwibWFrZUxvYWRGaWxlVGFzayIsIkxPQURfRklMRV9UQVNLIiwiYmltYXAiLCJnZW4iLCJuZXh0RmlsZUJhdGNoIiwicHJvY2Vzc0ZpbGVDb250ZW50IiwiY29udGVudCIsImxvYWRGaWxlc0VyciIsInByb2Nlc3NGaWxlQ29udGVudFVwZGF0ZXIiLCJfYWN0aW9uJHBheWxvYWQyIiwiUFJPQ0VTU19GSUxFX0RBVEEiLCJsb2FkRmlsZVN0ZXBTdWNjZXNzIiwicGFyc2VQcm9ncmVzcyIsInByZXZQcm9ncmVzcyIsIm5leHRGaWxlQmF0Y2hVcGRhdGVyIiwiX3JlZjIyIiwiX2FjY3VtdWxhdGVkJGRhdGEiLCJfcmVmMjIkcGF5bG9hZCIsImFjY3VtdWxhdGVkIiwiZ2V0QXBwbGljYXRpb25Db25maWciLCJ1c2VBcnJvd1Byb2dyZXNzaXZlTG9hZGluZyIsImVuZHNXaXRoIiwiZGF0YSIsIlVOV1JBUF9UQVNLIiwiX3JlZjIzIiwibG9hZEZpbGVzRXJyVXBkYXRlciIsIl9yZWYyNCIsIl9zdGF0ZSRmaWxlTG9hZGluZzIiLCJhcHBseUNQVUZpbHRlclVwZGF0ZXIiLCJfcmVmMjUiLCJkYXRhSWRzIiwiZmlsdGVyRGF0YXNldENQVSIsInNldE1hcEluZm9VcGRhdGVyIiwiZW1wdHkiLCJkZWZhdWx0TGF5ZXJzIiwiZm91bmRMYXllcnMiLCJmaW5kRGVmYXVsdExheWVyIiwiZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMiLCJmaW5kRmllbGRzVG9TaG93IiwibWVyZ2VkIiwiX3JlZjI3IiwiZml4ZWREb21haW4iLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNyIsIl9zdGF0ZSRmaWx0ZXJzIiwiYW5pbWF0YWJsZUxheWVycyIsImxheWVyRG9tYWlucyIsIm1lcmdlZERvbWFpbiIsIm1lcmdlVGltZURvbWFpbnMiLCJnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIiLCJtZXJnZWRUaW1lU3RlcHMiLCJzb3J0IiwiQkFTRV9TUEVFRCIsIkZQUyIsInN5bmNlZEZpbHRlciIsIm5ld0FuaW1hdGlvbkRvbWFpbiIsImlzSW5SYW5nZSIsInNldEVkaXRvck1vZGVVcGRhdGVyIiwiX3JlZjI4Iiwic2V0RmVhdHVyZXNVcGRhdGVyIiwiX3JlZjI5IiwiX2xhc3RGZWF0dXJlJHByb3BlcnRpIiwiX2xhc3RGZWF0dXJlJHByb3BlcnRpMiIsIl9yZWYyOSRmZWF0dXJlcyIsImxhc3RGZWF0dXJlIiwicHJvcGVydGllcyIsImlzQ2xvc2VkIiwic2hhcGUiLCJFRElUIiwiZmVhdHVyZSIsImJib3giLCJmZWF0dXJlVmFsdWUiLCJmaWx0ZXJJZHgiLCJmaWwiLCJzZXRTZWxlY3RlZEZlYXR1cmVVcGRhdGVyIiwiX3JlZjMwIiwic2VsZWN0aW9uQ29udGV4dCIsImRlbGV0ZUZlYXR1cmVVcGRhdGVyIiwiX3JlZjMxIiwic2V0UG9seWdvbkZpbHRlckxheWVyVXBkYXRlciIsIm5vbmVGaWx0ZXJGZWF0dXJlIiwiX2ZpbHRlciRsYXllcklkIiwiaXNMYXllckluY2x1ZGVkIiwiZ2VuZXJhdGVQb2x5Z29uRmlsdGVyIiwic2V0UG9seWdvbkZpbHRlckFsbExheWVyc1VwZGF0ZXIiLCJ2aXNpYmxlTGF5ZXJJZHMiLCJhbGxMYXllcklkcyIsInNvcnRUYWJsZUNvbHVtblVwZGF0ZXIiLCJfcmVmMzIiLCJjb2x1bW4iLCJzb3J0TW9kZSIsImN1cnJlbnRNb2RlIiwiU09SVF9PUkRFUiIsIkFTQ0VORElORyIsInNvcnRlZCIsInNvcnREYXRhc2V0QnlDb2x1bW4iLCJwaW5UYWJsZUNvbHVtblVwZGF0ZXIiLCJfcmVmMzMiLCJwaW5UYWJsZUNvbHVtbnMiLCJjb3B5VGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjM0IiwiZmllbGRJZHgiLCJ0ZXh0IiwiZGF0YUNvbnRhaW5lciIsInJvdyIsInBhcnNlRmllbGRWYWx1ZSIsInZhbHVlQXQiLCJqb2luIiwiY29weSIsInNldENvbHVtbkRpc3BsYXlGb3JtYXRVcGRhdGVyIiwiX3JlZjM1IiwiZm9ybWF0cyIsImRpc3BsYXlGb3JtYXQiLCJfbGF5ZXIkY29uZmlnIiwiY29sb3JGaWVsZCIsInRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyIiwic2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ1VwZGF0ZXIiLCJfcmVmMzYiLCJ1cGRhdGVzIiwiY2hlY2tUaW1lQ29uZmlnQXJncyIsImFsbG93ZWQiLCJzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyIiwiX3JlZjM3IiwibGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlVXBkYXRlciIsIl9sYXllciRmaWx0ZXJlZEl0ZW1DbyIsImV2ZW50IiwiZGVja2dsTGF5ZXJJZCIsImNvdW50IiwiZmlsdGVyZWRJdGVtQ291bnQiLCJ3bXNGZWF0dXJlSW5mb1VwZGF0ZXIiLCJmZWF0dXJlSW5mbyIsImNvbnNvbGUiLCJvYmplY3QiLCJ3bXNGZWF0dXJlSW5mbyIsIl9uZXdTdGF0ZSRhbmltYXRpb25DbyIsIl9uZXdTdGF0ZSRhbmltYXRpb25DbzIiLCJfYWN0aW9uJGVuYWJsZSIsImludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMiLCJnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzIiwiaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyIiwiQm9vbGVhbiIsIm5ld0ZpbHRlckRvbWFpbiIsIkFOSU1BVElPTl9XSU5ET1ciLCJpbnRlcnZhbCIsImFkanVzdFRpbWVGaWx0ZXJJbnRlcnZhbCIsIm5ld0ZpbHRlclZhbHVlIiwic3luY1RpbWVsaW5lTW9kZSIsIlNZTkNfVElNRUxJTkVfTU9ERVMiLCJlbmQiLCJ2YWxpZGF0ZVN5bmNBbmltYXRpb25Nb2RlIiwiX3JlZjM4IiwiTWF0aCIsIm1heCIsInRpbWVsaW5lVmFsdWUiLCJnZXRUaW1lbGluZVZhbHVlRnJvbUZpbHRlciIsInNuYXBUb01hcmtzIiwiZnJlZSIsIl9maWx0ZXIkc3luY1RpbWVsaW5lTSIsIm5ld01vZGUiLCJzdGFydCIsImludGVydmFsSW5kZXgiLCJjdXJyZW50SW5kZXgiLCJtZXRhIiwidGFyZ2V0VGltZUludGVydmFsIiwibmV3SW5kZXgiLCJUSU1FX0lOVEVSVkFMU19PUkRFUkVEIiwiaGV4VGlsZUludGVydmFsIiwiTGF5ZXJUb0ZpbHRlclRpbWVJbnRlcnZhbCIsImdldERlZmF1bHRUaW1lRm9ybWF0IiwidXBkYXRlZFBsb3RUeXBlIiwidXBkYXRlVGltZUZpbHRlclBsb3RUeXBlIiwiYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyIsImRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyIsImRhdGFJZFRvUmVwbGFjZSIsIl92YWx1ZSRjb25maWciLCJfdmFsdWUkY29uZmlnMiIsInJlcGxhY2VkIiwiaXNPYmplY3QiLCJmaW5kQ2hpbGREYXRhc2V0SWRzIiwiX3ZhbHVlJG5ld0RhdGFzZXQiLCJjaGlsZERhdGFJZHMiLCJtb3ZlVmFsdWVUb0JlTWVyZ2VkIiwicHJvcFZhbHVlcyIsIl9yZWY0MCIsInNhdmVVbm1lcmdlZCIsInN0YXRlUmVtb3ZlZCIsInByb3BWYWx1ZSIsInAiLCJ0b0JlTWVyZ2VkIiwicmVwbGFjZURhdGFzZXRBbmREZXBzIiwiZGF0YUlkVG9Vc2UiLCJjb21wb3NlXyIsImFwcGx5XyIsInJlcGxhY2VEYXRhc2V0RGVwc0luU3RhdGUiLCJwcmVwYXJlU3RhdGVGb3JEYXRhc2V0UmVwbGFjZSIsIl9uZXh0U3RhdGUkbGF5ZXJUb0JlTSIsInNlcmlhbGl6ZWRTdGF0ZSIsInNlcmlhbGl6ZVZpc1N0YXRlIiwicHJlc2VydmVMYXllck9yZGVyIiwicHJlc2VydmVEYXRhc2V0T3JkZXIiLCJfc2VyaWFsaXplZFN0YXRlJHNwbGkiLCJfcmVmNDEiLCJhY2N1U3RhdGUiLCJfcmVmNDIiLCJyZXBsYWNlUGFyZW50RGF0YXNldElkcyIsImdldENoaWxkRGF0YXNldElkcyIsInByZXNlcnZlT3JkZXIiLCJ0b01lcmdlUHJvcHMiLCJzYXZlZFByb3BzIiwicmVwbGFjZWRTdGF0ZSIsIl9yZXBsYWNlZFN0YXRlJG1lcmdlciIsIm1lcmdlck9wdGlvbnMiLCJyZXBsYWNlZEl0ZW0iLCJyZXBsYWNlUHJvcFZhbHVlSW5TdGF0ZSIsIml0ZW0iLCJfcmVmNDMiLCJjaGlsZERhdGFJZCJdLCJzb3VyY2VzIjpbIi4uL3NyYy92aXMtc3RhdGUtdXBkYXRlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtiYm94fSBmcm9tICdAdHVyZi9iYm94JztcbmltcG9ydCB0eXBlIHtBbGxHZW9KU09OfSBmcm9tICdAdHVyZi9oZWxwZXJzJztcbmltcG9ydCBjb3B5IGZyb20gJ2NvcHktdG8tY2xpcGJvYXJkJztcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnZGVlcG1lcmdlJztcbmltcG9ydCB7Y29uc29sZSBhcyBDb25zb2xlfSBmcm9tICdnbG9iYWwvd2luZG93JztcbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnbG9kYXNoL2Nsb25lRGVlcCc7XG5pbXBvcnQgZ2V0IGZyb20gJ2xvZGFzaC9nZXQnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoL2lzRXF1YWwnO1xuaW1wb3J0IHBpY2sgZnJvbSAnbG9kYXNoL3BpY2snO1xuaW1wb3J0IHVuaXEgZnJvbSAnbG9kYXNoL3VuaXEnO1xuaW1wb3J0IHhvciBmcm9tICdsb2Rhc2gveG9yJztcbmltcG9ydCBUYXNrLCB7ZGlzYWJsZVN0YWNrQ2FwdHVyaW5nLCB3aXRoVGFza30gZnJvbSAncmVhY3QtcGFsbS90YXNrcyc7XG4vLyBUYXNrc1xuaW1wb3J0IHtcbiAgREVMQVlfVEFTSyxcbiAgQUNUSU9OX1RBU0ssXG4gIExPQURfRklMRV9UQVNLLFxuICBQUk9DRVNTX0ZJTEVfREFUQSxcbiAgVU5XUkFQX1RBU0tcbn0gZnJvbSAnQGtlcGxlci5nbC90YXNrcyc7XG4vLyBBY3Rpb25zXG5pbXBvcnQge1xuICBhZGROb3RpZmljYXRpb24sXG4gIEFjdGlvblR5cGVzLFxuICBDcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1BheWxvYWQsXG4gIE1hcFN0YXRlQWN0aW9ucyxcbiAgUmVjZWl2ZU1hcENvbmZpZ1BheWxvYWQsXG4gIFZpc1N0YXRlQWN0aW9ucyxcbiAgYXBwbHlMYXllckNvbmZpZyxcbiAgY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3MsXG4gIGxheWVyQ29uZmlnQ2hhbmdlLFxuICBsYXllclR5cGVDaGFuZ2UsXG4gIGxheWVyVmlzQ29uZmlnQ2hhbmdlLFxuICBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2UsXG4gIGxvYWRGaWxlU3RlcFN1Y2Nlc3MsXG4gIGxvYWRGaWxlc0VycixcbiAgbG9hZEZpbGVzU3VjY2VzcyxcbiAgbG9hZE5leHRGaWxlLFxuICBuZXh0RmlsZUJhdGNoLFxuICBzZXRGaWx0ZXIsXG4gIHByb2Nlc3NGaWxlQ29udGVudCxcbiAgZml0Qm91bmRzIGFzIGZpdE1hcEJvdW5kcyxcbiAgdG9nZ2xlTGF5ZXJGb3JNYXAsXG4gIGFwcGx5RmlsdGVyQ29uZmlnLFxuICBTZXRMb2FkaW5nSW5kaWNhdG9yUGF5bG9hZFxufSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuXG4vLyBVdGlsc1xuaW1wb3J0IHtcbiAgRklMVEVSX1VQREFURVJfUFJPUFMsXG4gIGFkZE5ld0xheWVyc1RvU3BsaXRNYXAsXG4gIHNuYXBUb01hcmtzLFxuICBhcHBseUZpbHRlckZpZWxkTmFtZSxcbiAgYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyxcbiAgYXJyYXlJbnNlcnQsXG4gIGNvbXB1dGVTcGxpdE1hcExheWVycyxcbiAgYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbixcbiAgZXJyb3JOb3RpZmljYXRpb24sXG4gIGZlYXR1cmVUb0ZpbHRlclZhbHVlLFxuICBmaWx0ZXJEYXRhc2V0Q1BVLFxuICBnZW5lcmF0ZVBvbHlnb25GaWx0ZXIsXG4gIGdldERlZmF1bHRGaWx0ZXIsXG4gIGdldEZpbHRlcklkSW5GZWF0dXJlLFxuICBnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIsXG4gIGlzSW5SYW5nZSxcbiAgaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3QsXG4gIGlzUmdiQ29sb3IsXG4gIHBhcnNlRmllbGRWYWx1ZSxcbiAgcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzLFxuICBzZXQsXG4gIHVwZGF0ZUZpbHRlclBsb3QsXG4gIHJlbW92ZUZpbHRlclBsb3QsXG4gIGlzTGF5ZXJBbmltYXRhYmxlLFxuICBpc1NpZGVGaWx0ZXIsXG4gIGdldEFwcGxpY2F0aW9uQ29uZmlnXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtnZW5lcmF0ZUhhc2hJZCwgdG9BcnJheSwgYXJyYXlNb3ZlfSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG4vLyBNZXJnZXJzXG5pbXBvcnQge1xuICBBTklNQVRJT05fV0lORE9XLFxuICBCQVNFX1NQRUVELFxuICBDT01QQVJFX1RZUEVTLFxuICBERUZBVUxUX1RFWFRfTEFCRUwsXG4gIEVESVRPUl9NT0RFUyxcbiAgRklMVEVSX1RZUEVTLFxuICBGSUxURVJfVklFV19UWVBFUyxcbiAgRlBTLFxuICBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCxcbiAgRElTVEFOQ0VfRk9HX1RZUEUsXG4gIFNVUkZBQ0VfRk9HX1RZUEUsXG4gIE1BWF9ERUZBVUxUX1RPT0xUSVBTLFxuICBQTE9UX1RZUEVTLFxuICBTT1JUX09SREVSLFxuICBTWU5DX1RJTUVMSU5FX01PREVTLFxuICBDSEFOTkVMX1NDQUxFUyxcbiAgU0NBTEVfVFlQRVMsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9LSU5ELFxuICBJTklUSUFMX0FOTk9UQVRJT05fQU5HTEUsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9BUk1fTEVOR1RILFxuICBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9XSURUSCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfSEVJR0hULFxuICBJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IsXG4gIEFubm90YXRpb25LaW5kXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7TEFZRVJfSURfTEVOR1RILCBMYXllciwgTGF5ZXJDbGFzc2VzfSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5pbXBvcnQge1xuICBhcHBseV8sXG4gIGNvbXBvc2VfLFxuICBmaWx0ZXJPdXRCeUlkLFxuICBtZXJnZV8sXG4gIHBheWxvYWRfLFxuICBwaWNrXyxcbiAgcmVtb3ZlRWxlbWVudEF0SW5kZXgsXG4gIHN3YXBfXG59IGZyb20gJy4vY29tcG9zZXItaGVscGVycyc7XG5pbXBvcnQge2lzVmFsaWRNZXJnZXIsIG1lcmdlU3RhdGVGcm9tTWVyZ2Vyc30gZnJvbSAnLi9tZXJnZXItaGFuZGxlcic7XG5pbXBvcnQge1xuICBWSVNfU1RBVEVfTUVSR0VSUyxcbiAgY3JlYXRlTGF5ZXJGcm9tQ29uZmlnLFxuICBwYXJzZUxheWVyQ29uZmlnLFxuICBzZXJpYWxpemVGaWx0ZXIsXG4gIHNlcmlhbGl6ZUxheWVyLFxuICBzZXJpYWxpemVWaXNTdGF0ZSxcbiAgdmFsaWRhdGVMYXllcldpdGhEYXRhXG59IGZyb20gJy4vdmlzLXN0YXRlLW1lcmdlcic7XG5cbmltcG9ydCBLZXBsZXJHTFNjaGVtYSwge01lcmdlciwgUG9zdE1lcmdlclBheWxvYWQsIFZpc1N0YXRlfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuXG5pbXBvcnQge1xuICBGaWx0ZXIsXG4gIEludGVyYWN0aW9uQ29uZmlnLFxuICBBbmltYXRpb25Db25maWcsXG4gIEZpbHRlckFuaW1hdGlvbkNvbmZpZyxcbiAgRWRpdG9yLFxuICBGaWVsZCxcbiAgTGF5ZXJWaXNDb25maWcsXG4gIFRpbWVSYW5nZUZpbHRlcixcbiAgQW5ub3RhdGlvbixcbiAgQW5ub3RhdGlvblByb3BzUGFydGlhbFxufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7TG9hZGVyfSBmcm9tICdAbG9hZGVycy5nbC9sb2FkZXItdXRpbHMnO1xuXG5pbXBvcnQge1xuICBEYXRhc2V0cyxcbiAgYXNzaWduR3B1Q2hhbm5lbCxcbiAgY29weVRhYmxlQW5kVXBkYXRlLFxuICBjcmVhdGVOZXdEYXRhRW50cnksXG4gIHBpblRhYmxlQ29sdW1ucyxcbiAgc2V0RmlsdGVyR3B1TW9kZSxcbiAgc29ydERhdGFzZXRCeUNvbHVtblxufSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCB7ZmluZEZpZWxkc1RvU2hvd30gZnJvbSAnLi9pbnRlcmFjdGlvbi11dGlscyc7XG5pbXBvcnQge1xuICBjYWxjdWxhdGVMYXllckRhdGEsXG4gIGZpbmREZWZhdWx0TGF5ZXIsXG4gIGdldExheWVyT3JkZXJGcm9tTGF5ZXJzLFxuICBtZXJnZUxheWVyVmlzQ29uZmlnRm9yTmV3RGF0YXNldHMsXG4gIGdldE5ld0xheWVyR3JvdXAsXG4gIGFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlcixcbiAgcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyLFxuICBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIsXG4gIGZpbmRQYXJlbnRHcm91cEZvckxheWVyLFxuICBnZXRJbmRleEZyb21MYXllckVudHJ5SWQsXG4gIHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIsXG4gIGdldEZsYXRMYXllck9yZGVyLFxuICByZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlclxufSBmcm9tICcuL2xheWVyLXV0aWxzJztcbmltcG9ydCB7Z2V0UHJvcFZhbHVlVG9NZXJnZXIsIGhhc1Byb3BzVG9NZXJnZX0gZnJvbSAnLi9tZXJnZXItaGFuZGxlcic7XG5pbXBvcnQge21lcmdlRGF0YXNldHNCeU9yZGVyfSBmcm9tICcuL3Zpcy1zdGF0ZS1tZXJnZXInO1xuaW1wb3J0IHtcbiAgZml4RWZmZWN0T3JkZXIsXG4gIGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzLFxuICBnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLFxuICBtZXJnZVRpbWVEb21haW5zLFxuICBhZGp1c3RWYWx1ZVRvQW5pbWF0aW9uV2luZG93LFxuICB1cGRhdGVUaW1lRmlsdGVyUGxvdFR5cGUsXG4gIGdldERlZmF1bHRUaW1lRm9ybWF0LFxuICBMYXllclRvRmlsdGVyVGltZUludGVydmFsLFxuICBUSU1FX0lOVEVSVkFMU19PUkRFUkVELFxuICBtZXJnZUZpbHRlckRvbWFpbixcbiAgaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtjcmVhdGVFZmZlY3R9IGZyb20gJ0BrZXBsZXIuZ2wvZWZmZWN0cyc7XG5pbXBvcnQge1BheWxvYWRBY3Rpb259IGZyb20gJ0ByZWR1eGpzL3Rvb2xraXQnO1xuXG5pbXBvcnQge2ZpbmRNYXBCb3VuZHN9IGZyb20gJy4vZGF0YS11dGlscyc7XG5cbi8vIHJlYWN0LXBhbG1cbi8vIGRpc2FibGUgY2FwdHVyZSBleGNlcHRpb24gZm9yIHJlYWN0LXBhbG0gY2FsbCB0byB3aXRoVGFza1xuZGlzYWJsZVN0YWNrQ2FwdHVyaW5nKCk7XG5cbi8qKlxuICogVXBkYXRlcnMgZm9yIGB2aXNTdGF0ZWAgcmVkdWNlci4gQ2FuIGJlIHVzZWQgaW4geW91ciByb290IHJlZHVjZXIgdG8gZGlyZWN0bHkgbW9kaWZ5IGtlcGxlci5nbCdzIHN0YXRlLlxuICogUmVhZCBtb3JlIGFib3V0IFtVc2luZyB1cGRhdGVyc10oLi4vYWR2YW5jZWQtdXNhZ2UvdXNpbmctdXBkYXRlcnMubWQpXG4gKlxuICogQHB1YmxpY1xuICogQGV4YW1wbGVcbiAqXG4gKiBpbXBvcnQga2VwbGVyR2xSZWR1Y2VyLCB7dmlzU3RhdGVVcGRhdGVyc30gZnJvbSAnQGtlcGxlci5nbC9yZWR1Y2Vycyc7XG4gKiAvLyBSb290IFJlZHVjZXJcbiAqIGNvbnN0IHJlZHVjZXJzID0gY29tYmluZVJlZHVjZXJzKHtcbiAqICBrZXBsZXJHbDoga2VwbGVyR2xSZWR1Y2VyLFxuICogIGFwcDogYXBwUmVkdWNlclxuICogfSk7XG4gKlxuICogY29uc3QgY29tcG9zZWRSZWR1Y2VyID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAqICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gKiAgICBjYXNlICdDTElDS19CVVRUT04nOlxuICogICAgICByZXR1cm4ge1xuICogICAgICAgIC4uLnN0YXRlLFxuICogICAgICAgIGtlcGxlckdsOiB7XG4gKiAgICAgICAgICAuLi5zdGF0ZS5rZXBsZXJHbCxcbiAqICAgICAgICAgIGZvbzoge1xuICogICAgICAgICAgICAgLi4uc3RhdGUua2VwbGVyR2wuZm9vLFxuICogICAgICAgICAgICAgdmlzU3RhdGU6IHZpc1N0YXRlVXBkYXRlcnMuZW5sYXJnZUZpbHRlclVwZGF0ZXIoXG4gKiAgICAgICAgICAgICAgIHN0YXRlLmtlcGxlckdsLmZvby52aXNTdGF0ZSxcbiAqICAgICAgICAgICAgICAge2lkeDogMH1cbiAqICAgICAgICAgICAgIClcbiAqICAgICAgICAgIH1cbiAqICAgICAgICB9XG4gKiAgICAgIH07XG4gKiAgfVxuICogIHJldHVybiByZWR1Y2VycyhzdGF0ZSwgYWN0aW9uKTtcbiAqIH07XG4gKlxuICogZXhwb3J0IGRlZmF1bHQgY29tcG9zZWRSZWR1Y2VyO1xuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbi8vIEB0cy1pZ25vcmVcbmNvbnN0IHZpc1N0YXRlVXBkYXRlcnMgPSBudWxsO1xuLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRJbnRlcmFjdGlvbkNvbmZpZzogSW50ZXJhY3Rpb25Db25maWcgPSB7XG4gIHRvb2x0aXA6IHtcbiAgICBpZDogJ3Rvb2x0aXAnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLnRvb2x0aXAnLFxuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgY29uZmlnOiB7XG4gICAgICBmaWVsZHNUb1Nob3c6IHt9LFxuICAgICAgY29tcGFyZU1vZGU6IGZhbHNlLFxuICAgICAgY29tcGFyZVR5cGU6IENPTVBBUkVfVFlQRVMuQUJTT0xVVEVcbiAgICB9XG4gIH0sXG4gIGdlb2NvZGVyOiB7XG4gICAgaWQ6ICdnZW9jb2RlcicsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuZ2VvY29kZXInLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIHBvc2l0aW9uOiBudWxsLFxuICAgIGNvbmZpZzoge1xuICAgICAgbGltaXRTZWFyY2g6IGZhbHNlXG4gICAgfVxuICB9LFxuICBicnVzaDoge1xuICAgIGlkOiAnYnJ1c2gnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmJydXNoJyxcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBjb25maWc6IHtcbiAgICAgIC8vIHNpemUgaXMgaW4ga21cbiAgICAgIHNpemU6IDAuNVxuICAgIH1cbiAgfSxcbiAgY29vcmRpbmF0ZToge1xuICAgIGlkOiAnY29vcmRpbmF0ZScsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuY29vcmRpbmF0ZScsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgcG9zaXRpb246IG51bGxcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQU5JTUFUSU9OX0NPTkZJRzogQW5pbWF0aW9uQ29uZmlnID0ge1xuICBkb21haW46IG51bGwsXG4gIGN1cnJlbnRUaW1lOiBudWxsLFxuICBzcGVlZDogMSxcbiAgaXNBbmltYXRpbmc6IGZhbHNlLFxuICB0aW1lU3RlcHM6IG51bGwsXG4gIHRpbWVGb3JtYXQ6IG51bGwsXG4gIHRpbWV6b25lOiBudWxsLFxuICBkZWZhdWx0VGltZUZvcm1hdDogbnVsbCxcbiAgaGlkZUNvbnRyb2w6IGZhbHNlLFxuICBkdXJhdGlvbjogbnVsbFxufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfRURJVE9SOiBFZGl0b3IgPSB7XG4gIG1vZGU6IEVESVRPUl9NT0RFUy5EUkFXX1BPTFlHT04sXG4gIGZlYXR1cmVzOiBbXSxcbiAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsLFxuICB2aXNpYmxlOiB0cnVlXG59O1xuXG4vKipcbiAqIERlZmF1bHQgaW5pdGlhbCBgdmlzU3RhdGVgXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQGNvbnN0YW50XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBJTklUSUFMX1ZJU19TVEFURTogVmlzU3RhdGUgPSB7XG4gIC8vIG1hcCBpbmZvXG4gIG1hcEluZm86IHtcbiAgICB0aXRsZTogJycsXG4gICAgZGVzY3JpcHRpb246ICcnXG4gIH0sXG4gIC8vIGxheWVyc1xuICBsYXllcnM6IFtdLFxuICBsYXllckRhdGE6IFtdLFxuICBsYXllclRvQmVNZXJnZWQ6IFtdLFxuICBsYXllck9yZGVyOiBbXSxcbiAgbGF5ZXJPcmRlclRvQmVNZXJnZWQ6IG51bGwsXG5cbiAgLy8gZmlsdGVyc1xuICBmaWx0ZXJzOiBbXSxcbiAgZmlsdGVyVG9CZU1lcmdlZDogW10sXG5cbiAgLy8gYSBjb2xsZWN0aW9uIG9mIG11bHRpcGxlIGRhdGFzZXRcbiAgZGF0YXNldHM6IHt9LFxuICBlZGl0aW5nRGF0YXNldDogdW5kZWZpbmVkLFxuXG4gIC8vIGVmZmVjdHNcbiAgZWZmZWN0czogW10sXG4gIGVmZmVjdE9yZGVyOiBbXSxcblxuICAvLyBhbm5vdGF0aW9uc1xuICBhbm5vdGF0aW9uczogW10sXG4gIGFubm90YXRpb25zVG9CZU1lcmdlZDogW10sXG4gIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBudWxsLFxuICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDogZmFsc2UsXG5cbiAgaW50ZXJhY3Rpb25Db25maWc6IGRlZmF1bHRJbnRlcmFjdGlvbkNvbmZpZyxcbiAgaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkOiB7fSxcblxuICBsYXllckJsZW5kaW5nOiAnbm9ybWFsJyxcbiAgb3ZlcmxheUJsZW5kaW5nOiAnbm9ybWFsJyxcbiAgaG92ZXJJbmZvOiB1bmRlZmluZWQsXG4gIGNsaWNrZWQ6IHVuZGVmaW5lZCxcbiAgbW91c2VQb3M6IHt9LFxuICBtYXhEZWZhdWx0VG9vbHRpcHM6IE1BWF9ERUZBVUxUX1RPT0xUSVBTLFxuXG4gIC8vIHRoaXMgaXMgdXNlZCB3aGVuIHVzZXIgc3BsaXQgbWFwc1xuICBzcGxpdE1hcHM6IFtcbiAgICAvLyB0aGlzIHdpbGwgY29udGFpbiBhIGxpc3Qgb2Ygb2JqZWN0cyB0b1xuICAgIC8vIGRlc2NyaWJlIHRoZSBzdGF0ZSBvZiBsYXllciBhdmFpbGFiaWxpdHkgYW5kIHZpc2liaWxpdHkgZm9yIGVhY2ggbWFwXG4gICAgLy8gW1xuICAgIC8vICAge1xuICAgIC8vICAgICAgbGF5ZXJzOiB7bGF5ZXJfaWQ6IHRydWUgfCBmYWxzZX1cbiAgICAvLyAgIH1cbiAgICAvLyBdXG4gIF0sXG4gIHNwbGl0TWFwc1RvQmVNZXJnZWQ6IFtdLFxuICBpc01lcmdpbmdEYXRhc2V0czoge30sXG4gIC8vIGRlZmF1bHRzIGxheWVyIGNsYXNzZXNcbiAgbGF5ZXJDbGFzc2VzOiBMYXllckNsYXNzZXMsXG5cbiAgLy8gZGVmYXVsdCBhbmltYXRpb25cbiAgLy8gdGltZSBpbiB1bml4IHRpbWVzdGFtcCAobWlsbGlzZWNvbmRzKSAodGhlIG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIHRoZSBVbml4IEVwb2NoKVxuICBhbmltYXRpb25Db25maWc6IERFRkFVTFRfQU5JTUFUSU9OX0NPTkZJRyxcblxuICBlZGl0b3I6IERFRkFVTFRfRURJVE9SLFxuXG4gIGZpbGVMb2FkaW5nOiBmYWxzZSxcbiAgZmlsZUxvYWRpbmdQcm9ncmVzczoge30sXG4gIC8vIGZvciBsb2FkaW5nIGRhdGFzZXRzXG4gIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZTogMCxcblxuICBsb2FkZXJzOiBbXSxcbiAgbG9hZE9wdGlvbnM6IHt9LFxuXG4gIC8vIHZpc1N0YXRlTWVyZ2Vyc1xuICBtZXJnZXJzOiBWSVNfU1RBVEVfTUVSR0VSUyxcblxuICAvLyBrZXBsZXIgc2NoZW1hc1xuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hXG59O1xuXG5leHBvcnQgY29uc3QgQUNUSU9OX1RBU0tfRklUX0JPVU5EUyA9IFRhc2suZnJvbUNhbGxiYWNrKFxuICAoXywgY2IpID0+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/IHVuZGVmaW5lZCA6IGhvdmVySW5mb1xuICB9O1xuXG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgbmV3U3RhdGUpO1xuICBuZXdTdGF0ZSA9IHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXdTdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xuXG4gIGlmIChsYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQgfHwgb2xkTGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgLy8gdXBkYXRlIHNwbGl0TWFwIGxheWVyIGlkXG4gIGlmIChzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgIHNwbGl0TWFwczogbmV3U3RhdGUuc3BsaXRNYXBzLm1hcChzZXR0aW5ncyA9PiB7XG4gICAgICAgIGNvbnN0IHtbb2xkSWRdOiBvbGRMYXllck1hcCwgLi4ub3RoZXJMYXllcnN9ID0gc2V0dGluZ3MubGF5ZXJzO1xuICAgICAgICByZXR1cm4gb2xkSWQgaW4gc2V0dGluZ3MubGF5ZXJzXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIC4uLnNldHRpbmdzLFxuICAgICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgICAuLi5vdGhlckxheWVycyxcbiAgICAgICAgICAgICAgICBbbGF5ZXIuaWRdOiBvbGRMYXllck1hcFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiBzZXR0aW5ncztcbiAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSBsYXllck9yZGVyIHdpdGggbmV3IGlkXG4gIG5ld1N0YXRlID0ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGxheWVyT3JkZXI6IHJlcGxhY2VMYXllckVudHJ5SW5MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIG9sZExheWVyLmlkLCBuZXdMYXllci5pZClcbiAgfTtcblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIHZpc3VhbCBjaGFubmVsXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMge09iamVjdH0gbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclZpc3VhbENoYW5uZWxDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBuZXdDb25maWcsIG5ld1Zpc0NvbmZpZywgY2hhbm5lbH0gPSBhY3Rpb247XG4gIGlmICghb2xkTGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tvbGRMYXllci5jb25maWcuZGF0YUlkXTtcblxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBsZXQgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyhuZXdDb25maWcpO1xuICBpZiAobmV3VmlzQ29uZmlnKSBuZXdMYXllciA9IG5ld0xheWVyLnVwZGF0ZUxheWVyVmlzQ29uZmlnKG5ld1Zpc0NvbmZpZyk7XG5cbiAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsKGRhdGFzZXQsIGNoYW5uZWwpO1xuXG4gIC8vIGNhbGxpbmcgdXBkYXRlIGFuaW1hdGlvbiBkb21haW4gZmlyc3QgdG8gbWVyZ2UgYWxsIGxheWVyIGFuaW1hdGlvbiBkb21haW5cbiAgbGV0IHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihzdGF0ZSk7XG5cbiAgY29uc3QgdmlzdWFsQ2hhbm5lbCA9IG9sZExheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuICBpZiAodmlzdWFsQ2hhbm5lbD8uY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuY29sb3IgJiYgbmV3Q29uZmlnW3Zpc3VhbENoYW5uZWwuZmllbGRdKSB7XG4gICAgLy8gaWYgY29sb3IgZmllbGQgY2hhbmdlZCwgc2V0IGN1c3RvbUJyZWFrcyB0byBmYWxzZVxuICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyQ29sb3JVSSh2aXN1YWxDaGFubmVsLnJhbmdlLCB7XG4gICAgICBjb2xvclJhbmdlQ29uZmlnOiB7XG4gICAgICAgIC4uLm5ld0xheWVyLmNvbmZpZy5jb2xvclVJW3Zpc3VhbENoYW5uZWwucmFuZ2VdLmNvbG9yUmFuZ2VDb25maWcsXG4gICAgICAgIGN1c3RvbUJyZWFrczogZmFsc2VcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHVwZGF0ZWRTdGF0ZSA9IHtcbiAgICAgIC4uLnVwZGF0ZWRTdGF0ZSxcbiAgICAgIGxheWVyczogdXBkYXRlZFN0YXRlLmxheWVycy5tYXAobCA9PiAobC5pZCA9PT0gb2xkTGF5ZXIuaWQgPyBuZXdMYXllciA6IGwpKVxuICAgIH07XG4gIH1cblxuICBjb25zdCBvbGRMYXllckRhdGEgPSB1cGRhdGVkU3RhdGUubGF5ZXJEYXRhW2lkeF07XG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgdXBkYXRlZFN0YXRlLCBvbGRMYXllckRhdGEpO1xuXG4gIGlmIChcbiAgICB2aXN1YWxDaGFubmVsPy5jaGFubmVsU2NhbGVUeXBlID09PSBDSEFOTkVMX1NDQUxFUy5jb2xvciAmJlxuICAgIG5ld0NvbmZpZ1t2aXN1YWxDaGFubmVsPy5zY2FsZV0gPT09IFNDQUxFX1RZUEVTLmN1c3RvbU9yZGluYWwgJiZcbiAgICAhbmV3VmlzQ29uZmlnXG4gICkge1xuICAgIC8vIHdoZW4gc3dpdGNoaW5nIHRvIGN1c3RvbU9yZGluYWwgc2NhbGUsIGNyZWF0ZSBhIGN1c3RvbVBhbGV0dGUgaW4gY29sb3JVSSB3aXRoIHVwZGF0ZWQgY29sb3JEb21haW5cbiAgICBjb25zdCBjdXN0b21QYWxldHRlID0gaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlKHtcbiAgICAgIHNjYWxlOiBTQ0FMRV9UWVBFUy5jdXN0b21PcmRpbmFsLFxuICAgICAgZmllbGQ6IGxheWVyLmNvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXSxcbiAgICAgIG9yZGluYWxEb21haW46IGxheWVyLmNvbmZpZ1tsYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsXS5kb21haW5dLFxuICAgICAgcmFuZ2U6IGxheWVyLmNvbmZpZy52aXNDb25maWdbdmlzdWFsQ2hhbm5lbC5yYW5nZV0sXG4gICAgICBjb2xvckJyZWFrczogbnVsbFxuICAgIH0pO1xuICAgIC8vIHVwZGF0ZSBjb2xvclJhbmdlIHdpdGggbmV3IGN1c3RvbVBhbGV0dGVcbiAgICBsYXllci51cGRhdGVMYXllckNvbG9yVUkodmlzdWFsQ2hhbm5lbC5yYW5nZSwge1xuICAgICAgc2hvd0NvbG9yQ2hhcnQ6IHRydWUsXG4gICAgICBjb2xvclJhbmdlQ29uZmlnOiB7XG4gICAgICAgIC4uLmxheWVyLmNvbmZpZy5jb2xvclVJW3Zpc3VhbENoYW5uZWwucmFuZ2VdLmNvbG9yUmFuZ2VDb25maWcsXG4gICAgICAgIGN1c3RvbUJyZWFrczogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGN1c3RvbVBhbGV0dGVcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHVwZGF0ZWRTdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBgdmlzQ29uZmlnYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgcHJvcHMgPSBPYmplY3Qua2V5cyhhY3Rpb24ubmV3VmlzQ29uZmlnKTtcblxuICBjb25zdCBuZXdWaXNDb25maWcgPSB7XG4gICAgLi4ub2xkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZyxcbiAgICAuLi5hY3Rpb24ubmV3VmlzQ29uZmlnXG4gIH07XG5cbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyh7dmlzQ29uZmlnOiBuZXdWaXNDb25maWd9KTtcblxuICBsZXQgbmV4dFN0YXRlID0gc3RhdGU7XG5cbiAgLy8gRXhjbHVzaXZlIGJpdG1hcCBlZGl0aW5nOiB3aGVuIGVkaXRCb3VuZHMgaXMgdHVybmVkIG9uIGZvciBvbmUgYml0bWFwIGxheWVyLFxuICAvLyB0dXJuIGl0IG9mZiBmb3IgYWxsIG90aGVyIGJpdG1hcCBsYXllcnNcbiAgaWYgKFxuICAgIG5ld0xheWVyLnR5cGUgPT09ICdiaXRtYXAnICYmXG4gICAgYWN0aW9uLm5ld1Zpc0NvbmZpZy5lZGl0Qm91bmRzID09PSB0cnVlXG4gICkge1xuICAgIG5leHRTdGF0ZSA9IHtcbiAgICAgIC4uLm5leHRTdGF0ZSxcbiAgICAgIGxheWVyczogbmV4dFN0YXRlLmxheWVycy5tYXAoKGwsIGkpID0+IHtcbiAgICAgICAgaWYgKGkgIT09IGlkeCAmJiBsLnR5cGUgPT09ICdiaXRtYXAnICYmIGwuY29uZmlnLnZpc0NvbmZpZy5lZGl0Qm91bmRzKSB7XG4gICAgICAgICAgcmV0dXJuIGwudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICAgICAgdmlzQ29uZmlnOiB7Li4ubC5jb25maWcudmlzQ29uZmlnLCBlZGl0Qm91bmRzOiBmYWxzZX1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbDtcbiAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIGlmIChuZXdMYXllci5zaG91bGRDYWxjdWxhdGVMYXllckRhdGEocHJvcHMpKSB7XG4gICAgY29uc3Qgb2xkTGF5ZXJEYXRhID0gbmV4dFN0YXRlLmxheWVyRGF0YVtpZHhdO1xuICAgIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgbmV4dFN0YXRlLCBvbGRMYXllckRhdGEpO1xuICAgIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV4dFN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5leHRTdGF0ZSwge2xheWVyOiBuZXdMYXllciwgaWR4fSk7XG59XG5cbi8qKlxuICogUmVzZXQgYW5pbWF0aW9uIGNvbmZpZyBjdXJyZW50IHRpbWUgdG8gYSBzcGVjaWZpZWQgdmFsdWVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKlxuICovXG5leHBvcnQgY29uc3Qgc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlciA9IDxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAge3ZhbHVlfTogVmlzU3RhdGVBY3Rpb25zLlNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXJBY3Rpb25cbik6IFMgPT4ge1xuICBjb25zdCBjdXJyZW50VGltZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWVbMF0gOiB2YWx1ZTtcbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgY3VycmVudFRpbWVcbiAgICB9XG4gIH07XG4gIC8vIHVwZGF0ZSBhbmltYXRpb24gY29uZmlnIGZvciBlYWNoIGxheWVyXG4gIHJldHVybiBzdGF0ZS5sYXllcnMucmVkdWNlKChhY2N1LCBsKSA9PiB7XG4gICAgaWYgKGwuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkICYmIGwudHlwZSAhPT0gJ3RyaXAnKSB7XG4gICAgICByZXR1cm4gbGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyKGFjY3UsIHtvbGRMYXllcjogbCwgcHJvcDogJ2N1cnJlbnRUaW1lJywgY3VycmVudFRpbWV9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY3U7XG4gIH0sIG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgcHJvcGVydHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihzdGF0ZSwgYWN0aW9uKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIGFuaW1hdGlvbiB3aW5kb3dcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICB7aWQsIGFuaW1hdGlvbldpbmRvd306IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyQWN0aW9uXG4pOiBTIHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi5pZCA9PT0gaWQpO1xuXG4gIGlmICghZmlsdGVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICBhbmltYXRpb25XaW5kb3dcbiAgfTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikoc3RhdGUuZmlsdGVycylcbiAgfTtcblxuICBjb25zdCBuZXdTeW5jVGltZWxpbmVNb2RlID0gZ2V0U3luY0FuaW1hdGlvbk1vZGUobmV3RmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcik7XG5cbiAgcmV0dXJuIHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7aWQsIG1vZGU6IG5ld1N5bmNUaW1lbGluZU1vZGV9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2ZpbHRlcklkLCBuZXdGaWx0ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gU2VyaWFsaXplIHRoZSBmaWx0ZXJzIHRvIG9ubHkgY29tcGFyZSB0aGUgc2F2ZWQgcHJvcGVydGllc1xuICBjb25zdCBzZXJpYWxpemVkT2xkRmlsdGVyID0gc2VyaWFsaXplRmlsdGVyKG9sZEZpbHRlciwgc3RhdGUuc2NoZW1hKSA/PyB7Y29uZmlnOiB7fX07XG4gIGNvbnN0IHNlcmlhbGl6ZWROZXdGaWx0ZXIgPSBzZXJpYWxpemVGaWx0ZXIobmV3RmlsdGVyLCBzdGF0ZS5zY2hlbWEpO1xuICBpZiAoIXNlcmlhbGl6ZWROZXdGaWx0ZXIgfHwgaXNFcXVhbChzZXJpYWxpemVkT2xkRmlsdGVyLCBzZXJpYWxpemVkTmV3RmlsdGVyKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIElmIHRoZXJlIGFyZSBhbnkgY2hhbmdlcyB0byB0aGUgZmlsdGVyLCBhcHBseSB0aGVtXG4gIGNvbnN0IGNoYW5nZWQgPSBwaWNrQ2hhbmdlZFByb3BzKHNlcmlhbGl6ZWRPbGRGaWx0ZXIsIHNlcmlhbGl6ZWROZXdGaWx0ZXIpO1xuICBkZWxldGUgY2hhbmdlZFsnaWQnXTsgLy8gaWQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkXG5cbiAgY29uc3QgZmlsdGVySW5kZXggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlckluZGV4IDwgMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihcbiAgICBzdGF0ZSxcbiAgICBzZXRGaWx0ZXIoZmlsdGVySW5kZXgsIE9iamVjdC5rZXlzKGNoYW5nZWQpLCBPYmplY3QudmFsdWVzKGNoYW5nZWQpKVxuICApO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgcHJvcGVydHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2lkeCwgdmFsdWVJbmRleCA9IDB9ID0gYWN0aW9uO1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVycy4ke2lkeH0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChcbiAgICBBcnJheS5pc0FycmF5KGFjdGlvbi5wcm9wKSAmJlxuICAgICghQXJyYXkuaXNBcnJheShhY3Rpb24udmFsdWUpIHx8IGFjdGlvbi5wcm9wLmxlbmd0aCAhPT0gYWN0aW9uLnZhbHVlLmxlbmd0aClcbiAgKSB7XG4gICAgQ29uc29sZS5lcnJvcignRXhwZWN0aW5nIHZhbHVlIHRvIGJlIGFuIGFycmF5IG9mIHRoZSBzYW1lIGxlbmd0aCwgc2luY2UgcHJvcCBpcyBhbiBhcnJheScpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyBjb252ZXJ0IHByb3AgYW5kIHZhbHVlIHRvIGFycmF5XG4gIGNvbnN0IHByb3BzID0gdG9BcnJheShhY3Rpb24ucHJvcCk7XG4gIGNvbnN0IHZhbHVlcyA9IEFycmF5LmlzQXJyYXkoYWN0aW9uLnByb3ApID8gdG9BcnJheShhY3Rpb24udmFsdWUpIDogW2FjdGlvbi52YWx1ZV07XG5cbiAgbGV0IG5ld0ZpbHRlciA9IG9sZEZpbHRlcjtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG5cbiAgbGV0IGRhdGFzZXRJZHNUb0ZpbHRlcjogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHByb3AgPSBwcm9wc1tpXTtcbiAgICBjb25zdCB2YWx1ZSA9IHZhbHVlc1tpXTtcbiAgICAvLyBXZSBjdXJyZW50bHkgZG8gbm90IHN1cHBvcnQgcGFzc2luZyBpbiBuYW1lIGFzIGFuIGFycmF5IGludG8gX3VwZGF0ZUZpbHRlclByb3AsIHNvIHdlIGNhbGwgaXQgbXVsdGlwbGUgdGltZXMgd2l0aCBlYWNoIG5hbWVcbiAgICAvLyBTZWUgdGhlIGNvbW1lbnQgaW4gdGhlcmUgYXMgdG8gd2hhdCBzaG91bGQgYmUgYWRkcmVzc2VkXG4gICAgbGV0IHJlcztcbiAgICBpZiAocHJvcCA9PT0gJ25hbWUnICYmIEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gICAgICByZXMgPSB2YWx1ZS5yZWR1Y2UoKGFjY3UsIHYpID0+IHtcbiAgICAgICAgcmV0dXJuIF91cGRhdGVGaWx0ZXJQcm9wKGFjY3UsIG5ld0ZpbHRlciwgcHJvcCwgdiwgdmFsdWVJbmRleCk7XG4gICAgICB9LCBuZXdTdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcyA9IF91cGRhdGVGaWx0ZXJQcm9wKG5ld1N0YXRlLCBuZXdGaWx0ZXIsIHByb3AsIHZhbHVlLCB2YWx1ZUluZGV4KTtcbiAgICB9XG4gICAgbmV3RmlsdGVyID0gcmVzLmZpbHRlcjtcbiAgICBuZXdTdGF0ZSA9IHJlcy5zdGF0ZTtcbiAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBkYXRhc2V0SWRzVG9GaWx0ZXIuY29uY2F0KHJlcy5kYXRhc2V0SWRzVG9GaWx0ZXIpO1xuICB9XG5cbiAgY29uc3QgZW5sYXJnZWRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLnZpZXcgPT09IEZJTFRFUl9WSUVXX1RZUEVTLmVubGFyZ2VkKTtcblxuICBpZiAoZW5sYXJnZWRGaWx0ZXIgJiYgZW5sYXJnZWRGaWx0ZXIuaWQgIT09IG5ld0ZpbHRlci5pZCkge1xuICAgIC8vIHRoZXJlIHNob3VsZCBiZSBvbmx5IG9uZSBlbmxhcmdlZCBmaWx0ZXJcbiAgICBuZXdGaWx0ZXIudmlldyA9IEZJTFRFUl9WSUVXX1RZUEVTLnNpZGU7XG4gIH1cblxuICAvLyBzYXZlIG5ldyBmaWx0ZXJzIHRvIG5ld1N0YXRlXG4gIG5ld1N0YXRlID0gc2V0KFsnZmlsdGVycycsIGlkeF0sIG5ld0ZpbHRlciwgbmV3U3RhdGUpO1xuXG4gIC8vIGZpbHRlciBkYXRhXG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIHVuaXEoZGF0YXNldElkc1RvRmlsdGVyKSxcbiAgICBuZXdTdGF0ZS5kYXRhc2V0cyxcbiAgICBuZXdTdGF0ZS5maWx0ZXJzLFxuICAgIG5ld1N0YXRlLmxheWVyc1xuICApO1xuXG4gIG5ld1N0YXRlID0gc2V0KFsnZGF0YXNldHMnXSwgZmlsdGVyZWREYXRhc2V0cywgbmV3U3RhdGUpO1xuXG4gIC8vIG5lZWQgdG8gdXBkYXRlIGZpbHRlclBsb3QgYWZ0ZXIgZmlsdGVyIERhdGFzZXQgZm9yIHBsb3QgdG8gdXBkYXRlIG9uIGZpbHRlcmVkIHJlc3VsdFxuICBjb25zdCBmaWx0ZXJXaXRoUExvdCA9IHVwZGF0ZUZpbHRlclBsb3QobmV3U3RhdGUuZGF0YXNldHMsIG5ld1N0YXRlLmZpbHRlcnNbaWR4XSk7XG5cbiAgbmV3U3RhdGUgPSBzZXQoWydmaWx0ZXJzJywgaWR4XSwgZmlsdGVyV2l0aFBMb3QsIG5ld1N0YXRlKTtcblxuICAvLyBkYXRhSWQgaXMgYW4gYXJyYXlcbiAgLy8gcGFzcyBvbmx5IHRoZSBkYXRhc2V0IHdlIG5lZWQgdG8gdXBkYXRlXG4gIG5ld1N0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5ld1N0YXRlLCBkYXRhc2V0SWRzVG9GaWx0ZXIsIG5ld0ZpbHRlcik7XG5cbiAgLy8gSWYgdGltZSByYW5nZSBmaWx0ZXIgdmFsdWUgd2FzIHVwZGF0ZWQsIGFkanVzdCBhbmltYXRpb24gY29uZmlnXG4gIGlmIChuZXdGaWx0ZXIudHlwZSA9PT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSAmJiBwcm9wcy5pbmNsdWRlcygndmFsdWUnKSkge1xuICAgIG5ld1N0YXRlID0gYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlcihuZXdTdGF0ZSwgYWN0aW9uLmlkeCk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbmZ1bmN0aW9uIF91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCB2YWx1ZSwgZGF0YXNldHMpIHtcbiAgbGV0IG5ld0ZpbHRlciA9IGZpbHRlcjtcbiAgaWYgKGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF0pIHtcbiAgICAvLyBpZiBkYXRhSWQgYWxyZWFkeSBleGlzdFxuICAgIG5ld0ZpbHRlciA9IF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cyk7XG4gIH1cbiAgaWYgKHZhbHVlKSB7XG4gICAgY29uc3QgbmV4dFZhbHVlID0gbmV3RmlsdGVyLmRhdGFJZC5zbGljZSgpO1xuICAgIG5leHRWYWx1ZVt2YWx1ZUluZGV4XSA9IHZhbHVlO1xuICAgIG5ld0ZpbHRlciA9IHNldChbJ2RhdGFJZCddLCBuZXh0VmFsdWUsIG5ld0ZpbHRlcik7XG4gIH1cbiAgcmV0dXJuIG5ld0ZpbHRlcjtcbn1cblxuZnVuY3Rpb24gX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIGRhdGFzZXRzKSB7XG4gIGNvbnN0IGRhdGFJZCA9IGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF07XG5cbiAgaWYgKGZpbHRlci5kYXRhSWQubGVuZ3RoID09PSAxICYmIHZhbHVlSW5kZXggPT09IDApIHtcbiAgICAvLyBpZiByZW1vdmUgdGhlIG9ubHkgZGF0YUlkLCBjcmVhdGUgYW4gZW1wdHkgZmlsdGVyIGluc3RlYWQ7XG4gICAgcmV0dXJuIGdldERlZmF1bHRGaWx0ZXIoe2lkOiBmaWx0ZXIuaWR9KTtcbiAgfVxuXG4gIGlmIChkYXRhSWQpIHtcbiAgICBmaWx0ZXIgPSByZW1vdmVGaWx0ZXJQbG90KGZpbHRlciwgZGF0YUlkKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgcHJvcCBvZiBbJ2RhdGFJZCcsICduYW1lJywgJ2ZpZWxkSWR4JywgJ2dwdUNoYW5uZWwnXSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGZpbHRlcltwcm9wXSkpIHtcbiAgICAgIGNvbnN0IG5leHRWYWwgPSBmaWx0ZXJbcHJvcF0uc2xpY2UoKTtcbiAgICAgIG5leHRWYWwuc3BsaWNlKHZhbHVlSW5kZXgsIDEpO1xuICAgICAgZmlsdGVyID0gc2V0KFtwcm9wXSwgbmV4dFZhbCwgZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICAvLyBtZXJnZUZpZWxkRG9tYWluIGZvciB0aGUgcmVtYWluaW5nIGZpZWxkc1xuICBjb25zdCBkb21haW5TdGVwcyA9IG1lcmdlRmlsdGVyRG9tYWluKGZpbHRlciwgZGF0YXNldHMpO1xuXG4gIGNvbnN0IG5leHRGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIC8vIHZhbHVlOiBuZXh0VmFsdWUsXG4gICAgLi4uKGRvbWFpblN0ZXBzID8ge2RvbWFpbjogZG9tYWluU3RlcHM/LmRvbWFpbiwgc3RlcDogZG9tYWluU3RlcHM/LnN0ZXB9IDoge30pXG4gIH07XG5cbiAgY29uc3QgbmV4dFZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihuZXh0RmlsdGVyLnZhbHVlLCBuZXh0RmlsdGVyKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5uZXh0RmlsdGVyLFxuICAgIHZhbHVlOiBuZXh0VmFsdWVcbiAgfTtcbn1cblxuLyoqICpcbiAqIFVwZGF0ZXMgYSBzaW5nbGUgcHJvcGVydHkgb2YgYSBmaWx0ZXJcbiAqL1xuZnVuY3Rpb24gX3VwZGF0ZUZpbHRlclByb3Aoc3RhdGUsIGZpbHRlciwgcHJvcCwgdmFsdWUsIHZhbHVlSW5kZXgsIGRhdGFzZXRJZHM/KSB7XG4gIGxldCBkYXRhc2V0SWRzVG9GaWx0ZXI6IHN0cmluZ1tdID0gW107XG4gIHN3aXRjaCAocHJvcCkge1xuICAgIC8vIFRPRE86IE5leHQgUFIgZm9yIFVJIGlmIHdlIHVwZGF0ZSBmaWx0ZXJEYXRhSWQsIHdlIG5lZWQgdG8gY29uc2lkZXIgdHdvIGNhc2VzOlxuICAgIC8vIDEuIGRhdGFJZCBpcyBlbXB0eTogY3JlYXRlIGEgZGVmYXVsdCBmaWx0ZXJcbiAgICAvLyAyLiBBZGQgYSBuZXcgZGF0YXNldCBpZFxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMuZGF0YUlkOiB7XG4gICAgICBjb25zdCBvbGREYXRhSWQgPSBbLi4uZmlsdGVyLmRhdGFJZF07XG4gICAgICBmaWx0ZXIgPSBfdXBkYXRlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgdmFsdWUsIHN0YXRlLmRhdGFzZXRzKTtcbiAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IHVuaXEoWy4uLm9sZERhdGFJZCwgLi4uZmlsdGVyLmRhdGFJZF0pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMubmFtZToge1xuICAgICAgLy8gd2UgYXJlIHN1cHBvcnRpbmcgdGhlIGN1cnJlbnQgZnVuY3Rpb25hbGl0eVxuICAgICAgLy8gVE9ETzogTmV4dCBQUiBmb3IgVUkgZmlsdGVyIG5hbWUgd2lsbCBvbmx5IHVwZGF0ZSBmaWx0ZXIgbmFtZSBidXQgaXQgd29uJ3QgaGF2ZSBzaWRlIGVmZmVjdHNcbiAgICAgIC8vIHdlIGFyZSBnb25uYSB1c2UgcGFpciBvZiBkYXRhc2V0cyBhbmQgZmllbGRJZHggdG8gdXBkYXRlIHRoZSBmaWx0ZXJcbiAgICAgIGNvbnN0IGRhdGFzZXRJZCA9IGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF07XG4gICAgICBjb25zdCB7ZmlsdGVyOiB1cGRhdGVkRmlsdGVyLCBkYXRhc2V0OiBuZXdEYXRhc2V0fSA9IGFwcGx5RmlsdGVyRmllbGROYW1lKFxuICAgICAgICBmaWx0ZXIsXG4gICAgICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgICAgICBkYXRhc2V0SWQsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB2YWx1ZUluZGV4LFxuICAgICAgICB7bWVyZ2VEb21haW46IHZhbHVlSW5kZXggPiAwfVxuICAgICAgKTtcbiAgICAgIGlmICh1cGRhdGVkRmlsdGVyKSB7XG4gICAgICAgIGZpbHRlciA9IHVwZGF0ZWRGaWx0ZXI7XG4gICAgICAgIGlmIChmaWx0ZXIuZ3B1KSB7XG4gICAgICAgICAgZmlsdGVyID0gc2V0RmlsdGVyR3B1TW9kZShmaWx0ZXIsIHN0YXRlLmZpbHRlcnMpO1xuICAgICAgICAgIGZpbHRlciA9IGFzc2lnbkdwdUNoYW5uZWwoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZSA9IHNldChbJ2RhdGFzZXRzJywgZGF0YXNldElkXSwgbmV3RGF0YXNldCwgc3RhdGUpO1xuICAgICAgICAvLyByZW1vdmUgZmlsdGVyIFBsb3QgYXQgZGF0YXNldElkLCBzbyBpdCB3aWxsIGJlIHJlY2FsY3VsYXRlZFxuICAgICAgICBmaWx0ZXIgPSByZW1vdmVGaWx0ZXJQbG90KGZpbHRlciwgZGF0YXNldElkKTtcblxuICAgICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSB1cGRhdGVkRmlsdGVyLmRhdGFJZDtcbiAgICAgIH1cbiAgICAgIC8vIG9ubHkgZmlsdGVyIHRoZSBjdXJyZW50IGRhdGFzZXRcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMubGF5ZXJJZDoge1xuICAgICAgLy8gV2UgbmVlZCB0byB1cGRhdGUgb25seSBkYXRhc2V0SWQvcyBpZiB3ZSBoYXZlIGFkZGVkL3JlbW92ZWQgbGF5ZXJzXG4gICAgICAvLyAtIGNoZWNrIGZvciBsYXllcklkIGNoYW5nZXMgKFhPUiB3b3JrcyBiZWNhdXNlIG9mIHN0cmluZyB2YWx1ZXMpXG4gICAgICAvLyBpZiBubyBkaWZmZXJlbmNlcyBiZXR3ZWVuIGxheWVySWRzLCBkb24ndCBkbyBhbnkgZmlsdGVyaW5nXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBjb25zdCBsYXllcklkRGlmZmVyZW5jZSA9IHhvcih2YWx1ZSwgZmlsdGVyLmxheWVySWQpO1xuXG4gICAgICBjb25zdCBsYXllckRhdGFJZHMgPSB1bmlxPHN0cmluZz4oXG4gICAgICAgIGxheWVySWREaWZmZXJlbmNlXG4gICAgICAgICAgLm1hcChsaWQgPT5cbiAgICAgICAgICAgIGdldChcbiAgICAgICAgICAgICAgc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsaWQpLFxuICAgICAgICAgICAgICBbJ2NvbmZpZycsICdkYXRhSWQnXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKGQgPT4gZCkgYXMgc3RyaW5nW11cbiAgICAgICk7XG5cbiAgICAgIC8vIG9ubHkgZmlsdGVyIGRhdGFzZXRzSWRzXG4gICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBsYXllckRhdGFJZHM7XG5cbiAgICAgIC8vIFVwZGF0ZSBuZXdGaWx0ZXIgZGF0YUlkc1xuICAgICAgY29uc3QgbmV3RGF0YUlkcyA9IHVuaXE8c3RyaW5nPihcbiAgICAgICAgdmFsdWVcbiAgICAgICAgICA/Lm1hcChsaWQgPT5cbiAgICAgICAgICAgIGdldChcbiAgICAgICAgICAgICAgc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsaWQpLFxuICAgICAgICAgICAgICBbJ2NvbmZpZycsICdkYXRhSWQnXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKGQgPT4gZCkgYXMgc3RyaW5nW11cbiAgICAgICk7XG5cbiAgICAgIGZpbHRlciA9IHtcbiAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICBsYXllcklkOiB2YWx1ZSxcbiAgICAgICAgZGF0YUlkOiBuZXdEYXRhSWRzXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIGZpbHRlciA9IHNldChbcHJvcF0sIHZhbHVlLCBmaWx0ZXIpO1xuICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gWy4uLmZpbHRlci5kYXRhSWRdO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4ge2ZpbHRlciwgZGF0YXNldElkcywgZGF0YXNldElkc1RvRmlsdGVyLCBzdGF0ZX07XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1zdGF0ZW1lbnRzICovXG5cbi8qKlxuICogU2V0IHRoZSBwcm9wZXJ0eSBvZiBhIGZpbHRlciBwbG90XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RmlsdGVyUGxvdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkeCwgbmV3UHJvcH06IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJQbG90VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoIXN0YXRlLmZpbHRlcnNbaWR4XSkge1xuICAgIENvbnNvbGUuZXJyb3IoYGZpbHRlcnNbJHtpZHh9XSBpcyB1bmRlZmluZWRgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IG5ld0ZpbHRlciA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcblxuICBmb3IgKGNvbnN0IHByb3AgaW4gbmV3UHJvcCkge1xuICAgIGlmIChwcm9wID09PSAncGxvdFR5cGUnKSB7XG4gICAgICBuZXdGaWx0ZXIgPSBwaWNrXygncGxvdFR5cGUnKShtZXJnZV8obmV3UHJvcC5wbG90VHlwZSkpKG5ld0ZpbHRlcik7XG4gICAgfSBlbHNlIGlmIChwcm9wID09PSAneUF4aXMnKSB7XG4gICAgICBjb25zdCBjaGFydFR5cGUgPSBuZXdQcm9wLnlBeGlzID8gUExPVF9UWVBFUy5saW5lQ2hhcnQgOiBQTE9UX1RZUEVTLmhpc3RvZ3JhbTtcblxuICAgICAgbmV3RmlsdGVyID0gcGlja18oJ3Bsb3RUeXBlJykobWVyZ2VfKHt0eXBlOiBjaGFydFR5cGV9KSkobWVyZ2VfKG5ld1Byb3ApKG5ld0ZpbHRlcikpO1xuICAgIH1cbiAgfVxuXG4gIG5ld0ZpbHRlciA9IHVwZGF0ZUZpbHRlclBsb3Qoc3RhdGUuZGF0YXNldHMsIG5ld0ZpbHRlcik7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT4gKGkgPT09IGlkeCA/IG5ld0ZpbHRlciA6IGYpKVxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PlxuICAhYWN0aW9uLmRhdGFJZFxuICAgID8gc3RhdGVcbiAgICA6IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGZpbHRlcnM6IFsuLi5zdGF0ZS5maWx0ZXJzLCBnZXREZWZhdWx0RmlsdGVyKHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIGlkOiBhY3Rpb24uaWR9KV1cbiAgICAgIH07XG5cbi8qKlxuICogQ3JlYXRlIG9yIHVwZGF0ZSBhIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5DcmVhdGVPclVwZGF0ZUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkLCBkYXRhSWQsIGZpZWxkLCB2YWx1ZX0gPSBhY3Rpb247XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGNvbnN0IG9yaWdpbmFsSW5kZXggPSBuZXdTdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGlkKTtcbiAgbGV0IGZpbHRlckluZGV4ID0gb3JpZ2luYWxJbmRleDtcbiAgaWYgKCFpZCAmJiAhZGF0YUlkKSB7XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG4gIGlmIChvcmlnaW5hbEluZGV4IDwgMCAmJiBkYXRhSWQpIHtcbiAgICBuZXdTdGF0ZSA9IGFkZEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtkYXRhSWR9KTtcbiAgICBpZiAobmV3U3RhdGUuZmlsdGVycy5sZW5ndGggIT09IHN0YXRlLmZpbHRlcnMubGVuZ3RoICsgMSkge1xuICAgICAgLy8gTm8gbmV3IGZpbHRlciB3YXMgYWRkZWRcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgLy8gSGVyZSB3ZSBhcmUgYXNzdW1pbmcgdGhhdCB0aGUgZmlsdGVyIHdhcyBhZGRlZCBhdCB0aGUgZW5kXG4gICAgZmlsdGVySW5kZXggPSBuZXdTdGF0ZS5maWx0ZXJzLmxlbmd0aCAtIDE7XG4gICAgbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJbmRleF0gPSB7XG4gICAgICAuLi5uZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlckluZGV4XSxcbiAgICAgIC4uLihpZCA/IHtpZH0gOiBudWxsKVxuICAgIH07XG4gIH1cblxuICAvLyBObyBuZWVkIHRvIHVwZGF0ZSB0aGlzIGlmIGl0J3MgYSBuZXdseSBjcmVhdGVkIGZpbHRlclxuICAvLyBGaXJzdCB3ZSBtYWtlIHN1cmUgYWxsIHRoZSBkYXRhSWRzIHRoYXQgZmllbGRzIHJlZmVyIHRvIGFyZSB1cGRhdGVkXG4gIGlmIChvcmlnaW5hbEluZGV4ID49IDAgJiYgZGF0YUlkKSB7XG4gICAgLy8gSWYgdGhlIGRhdGFJZCBpcyBhbiBhcnJheSwgd2UgbmVlZCB0byB1cGRhdGUgZWFjaCBvbmUgaW5kaXZpZHVhbGx5IGFzIHRoZXkgbmVlZCBhIGNvcnJlY3QgdmFsdWVJbmRleCBwYXNzZWRcbiAgICBuZXdTdGF0ZSA9IChBcnJheS5pc0FycmF5KGRhdGFJZCkgPyBkYXRhSWQgOiBbZGF0YUlkXSkucmVkdWNlKChhY2N1LCBkLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoYWNjdSwge1xuICAgICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgICBwcm9wOiAnZGF0YUlkJyxcbiAgICAgICAgdmFsdWU6IGQsXG4gICAgICAgIHZhbHVlSW5kZXg6IGluZGV4XG4gICAgICB9KTtcbiAgICB9LCBuZXdTdGF0ZSk7XG4gIH1cbiAgLy8gVGhlbiB3ZSB1cGRhdGUgdGhlIGZpZWxkc1xuICBpZiAoZmllbGQpIHtcbiAgICAvLyBJZiB0aGUgZmllbGQgaXMgYW4gYXJyYXksIHdlIG5lZWQgdG8gdXBkYXRlIGVhY2ggZmllbGQgaW5kaXZpZHVhbGx5IGFzIHRoZXkgbmVlZCBhIGNvcnJlY3QgdmFsdWVJbmRleCBwYXNzZWRcbiAgICBuZXdTdGF0ZSA9IChBcnJheS5pc0FycmF5KGZpZWxkKSA/IGZpZWxkIDogW2ZpZWxkXSkucmVkdWNlKChhY2N1LCBmLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoYWNjdSwge1xuICAgICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgICBwcm9wOiAnbmFtZScsXG4gICAgICAgIHZhbHVlOiBmLFxuICAgICAgICB2YWx1ZUluZGV4OiBpbmRleFxuICAgICAgfSk7XG4gICAgfSwgbmV3U3RhdGUpO1xuICB9XG4gIC8vIFRoZW4gd2UgdXBkYXRlIHRoZSB2YWx1ZSBzZXBhcmF0ZWx5XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWR4OiBmaWx0ZXJJbmRleCwgcHJvcDogJ3ZhbHVlJywgdmFsdWV9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogU2V0IGxheWVyIGNvbG9yIHBhbGV0dGUgdWkgc3RhdGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvbGRMYXllciwgcHJvcCwgbmV3Q29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLkxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgb2xkVml4Q29uZmlnID0gb2xkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1twcm9wXTtcbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbG9yVUkocHJvcCwgbmV3Q29uZmlnKTtcbiAgY29uc3QgbmV3VmlzQ29uZmlnID0gbmV3TGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1twcm9wXTtcbiAgaWYgKG9sZFZpeENvbmZpZyAhPT0gbmV3VmlzQ29uZmlnKSB7XG4gICAgcmV0dXJuIGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgICAgb2xkTGF5ZXIsXG4gICAgICBuZXdWaXNDb25maWc6IHtcbiAgICAgICAgW3Byb3BdOiBuZXdWaXNDb25maWdcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3RhdGUubGF5ZXJzLm1hcChsID0+IChsLmlkID09PSBvbGRMYXllci5pZCA/IG5ld0xheWVyIDogbCkpXG4gIH07XG59O1xuXG4vKipcbiAqIFN0YXJ0IGFuZCBlbmQgZmlsdGVyIGFuaW1hdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRmlsdGVyQW5pbWF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PiAoaSA9PT0gYWN0aW9uLmlkeCA/IHsuLi5mLCBpc0FuaW1hdGluZzogIWYuaXNBbmltYXRpbmd9IDogZikpXG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRmlsdGVyQW5pbWF0aW9uQ29uZmlnKGNvbmZpZzogQW5pbWF0aW9uQ29uZmlnIHwgRmlsdGVyQW5pbWF0aW9uQ29uZmlnKTogYm9vbGVhbiB7XG4gIHJldHVybiAnZGF0YUlkJyBpbiBjb25maWcgJiYgJ2FuaW1hdGlvbldpbmRvdycgaW4gY29uZmlnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QW5pbWF0aW9uQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRBbmltYXRpb25Db25maWdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb25maWd9ID0gYWN0aW9uO1xuICBpZiAoaXNGaWx0ZXJBbmltYXRpb25Db25maWcoY29uZmlnKSkge1xuICAgIC8vIEZpbmQgZmlsdGVyIHVzZWQgZm9yIGFuaW1hdGlvblxuICAgIC8vIEFzc3VtaW5nIHRoZXJlJ3Mgb25seSBvbmUgZmlsdGVyIHVzZWQgZm9yIGFuaW1hdGlvbiwgc2VlIHNldEZpbHRlclZpZXdVcGRhdGVyXG4gICAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gIWlzU2lkZUZpbHRlcihmKSk7XG4gICAgaWYgKCFmaWx0ZXIpIHtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgY29uc3QgbmV3RmlsdGVyID0gey4uLmZpbHRlciwgLi4uY29uZmlnfTtcbiAgICByZXR1cm4gYXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyKHN0YXRlLCBhcHBseUZpbHRlckNvbmZpZyhmaWx0ZXIuaWQsIG5ld0ZpbHRlcikpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICAgIC4uLmNvbmZpZ1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgIGlzQW5pbWF0aW5nOiAhc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmlzQW5pbWF0aW5nXG4gIH1cbn0pO1xuXG4vKipcbiAqIEhpZGUgYW5kIHNob3cgbGF5ZXIgYW5pbWF0aW9uIGNvbnRyb2xcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVMYXllckFuaW1hdGlvbkNvbnRyb2xVcGRhdGVyID0gKHN0YXRlOiBWaXNTdGF0ZSk6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBhbmltYXRpb25Db25maWc6IHtcbiAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgaGlkZUNvbnRyb2w6ICFzdGF0ZS5hbmltYXRpb25Db25maWcuaGlkZUNvbnRyb2xcbiAgfVxufSk7XG5cbi8qKlxuICogQ2hhbmdlIGZpbHRlciBhbmltYXRpb24gc3BlZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+IChpID09PSBhY3Rpb24uaWR4ID8gey4uLmYsIHNwZWVkOiBhY3Rpb24uc3BlZWR9IDogZikpXG59KTtcblxuLyoqXG4gKiBVcGRhdGUgYW5pbWF0aW9uIHNwZWVkIHdpdGggdGhlIHZlcnRpY2FsIHNwZWVkIHNsaWRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7c3BlZWR9OiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIHNwZWVkXG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBTaG93IGxhcmdlciB0aW1lIGZpbHRlciBhdCBib3R0b20gZm9yIHRpbWUgcGxheWJhY2sgKGFwcGx5IHRvIHRpbWUgZmlsdGVyIG9ubHkpXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RmlsdGVyVmlld1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyVmlld1VwZGF0ZXJBY3Rpb25cbikgPT4ge1xuICBjb25zdCB7dmlldywgaWR4fSA9IGFjdGlvbjtcbiAgY29uc3Qgc2hvdWxkUmVzZXRPdGhlckZpbHRlcnNWaWV3ID0gdmlldyA9PT0gRklMVEVSX1ZJRVdfVFlQRVMuZW5sYXJnZWQ7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+XG4gICAgICBpID09PSBpZHhcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgdmlld1xuICAgICAgICAgIH1cbiAgICAgICAgOiBzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXdcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgdmlldzogRklMVEVSX1ZJRVdfVFlQRVMuc2lkZVxuICAgICAgICAgIH1cbiAgICAgICAgOiBmXG4gICAgKVxuICB9O1xufTtcblxuLyoqXG4gKiBUb2dnbGVzIGZpbHRlciBmZWF0dXJlIHZpc2liaWxpdHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2FjdGlvbi5pZHhdO1xuICBjb25zdCBpc1Zpc2libGUgPSBnZXQoZmlsdGVyLCBbJ3ZhbHVlJywgJ3Byb3BlcnRpZXMnLCAnaXNWaXNpYmxlJ10pO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIoc3RhdGUsIHtcbiAgICBpZHg6IGFjdGlvbi5pZHgsXG4gICAgcHJvcDogJ2VuYWJsZWQnLFxuICAgIHZhbHVlOiAhaXNWaXNpYmxlXG4gIH0pO1xuXG4gIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogYWN0aW9uLmlkeCxcbiAgICBwcm9wOiAndmFsdWUnLFxuICAgIHZhbHVlOiBmZWF0dXJlVG9GaWx0ZXJWYWx1ZShmaWx0ZXIudmFsdWUsIGZpbHRlci5pZCwge1xuICAgICAgaXNWaXNpYmxlOiAhaXNWaXNpYmxlXG4gICAgfSlcbiAgfSk7XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVGaWx0ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkeH0gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhSWQsIGlkfSA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcblxuICBjb25zdCBuZXdGaWx0ZXJzID0gW1xuICAgIC4uLnN0YXRlLmZpbHRlcnMuc2xpY2UoMCwgaWR4KSxcbiAgICAuLi5zdGF0ZS5maWx0ZXJzLnNsaWNlKGlkeCArIDEsIHN0YXRlLmZpbHRlcnMubGVuZ3RoKVxuICBdO1xuXG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKGRhdGFJZCwgc3RhdGUuZGF0YXNldHMsIG5ld0ZpbHRlcnMsIHN0YXRlLmxheWVycyk7XG4gIGNvbnN0IG5ld0VkaXRvciA9XG4gICAgZ2V0RmlsdGVySWRJbkZlYXR1cmUoc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZSkgPT09IGlkXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gICAgICAgIH1cbiAgICAgIDogc3RhdGUuZWRpdG9yO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHNldChbJ2ZpbHRlcnMnXSwgbmV3RmlsdGVycywgc3RhdGUpO1xuICBuZXdTdGF0ZSA9IHNldChbJ2RhdGFzZXRzJ10sIGZpbHRlcmVkRGF0YXNldHMsIG5ld1N0YXRlKTtcbiAgbmV3U3RhdGUgPSBzZXQoWydlZGl0b3InXSwgbmV3RWRpdG9yLCBuZXdTdGF0ZSk7XG5cbiAgcmV0dXJuIHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXdTdGF0ZSwgZGF0YUlkLCB1bmRlZmluZWQpO1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRMYXllclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGxldCBuZXdMYXllcjtcbiAgbGV0IG5ld0xheWVyRGF0YTtcbiAgaWYgKGFjdGlvbi5jb25maWcpIHtcbiAgICBuZXdMYXllciA9IGNyZWF0ZUxheWVyRnJvbUNvbmZpZyhzdGF0ZSwgYWN0aW9uLmNvbmZpZyk7XG4gICAgaWYgKCFuZXdMYXllcikge1xuICAgICAgQ29uc29sZS53YXJuKFxuICAgICAgICAnRmFpbGVkIHRvIGNyZWF0ZSBsYXllciBmcm9tIGNvbmZpZywgaXQgdXN1YWxseSBtZWFucyB0aGUgY29uZmlnIGlzIG5vdCBiZSBpbiBjb3JyZWN0IGZvcm1hdCcsXG4gICAgICAgIGFjdGlvbi5jb25maWdcbiAgICAgICk7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSk7XG4gICAgbmV3TGF5ZXIgPSByZXN1bHQubGF5ZXI7XG4gICAgbmV3TGF5ZXJEYXRhID0gcmVzdWx0LmxheWVyRGF0YTtcbiAgfSBlbHNlIHtcbiAgICAvLyBjcmVhdGUgYW4gZW1wdHkgbGF5ZXIgd2l0aCBhIHNwZWNpZmljIGRhdGFzZXQgb3IgYSBkZWZhdWx0IG9uZVxuICAgIGNvbnN0IGRlZmF1bHREYXRhc2V0ID0gYWN0aW9uLmRhdGFzZXRJZCA/PyBPYmplY3Qua2V5cyhzdGF0ZS5kYXRhc2V0cylbMF07XG4gICAgbmV3TGF5ZXIgPSBuZXcgTGF5ZXIoe1xuICAgICAgaXNWaXNpYmxlOiB0cnVlLFxuICAgICAgaXNDb25maWdBY3RpdmU6IHRydWUsXG4gICAgICBkYXRhSWQ6IGRlZmF1bHREYXRhc2V0XG4gICAgfSk7XG4gICAgbmV3TGF5ZXJEYXRhID0ge307XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBbLi4uc3RhdGUubGF5ZXJzLCBuZXdMYXllcl0sXG4gICAgbGF5ZXJEYXRhOiBbLi4uc3RhdGUubGF5ZXJEYXRhLCBuZXdMYXllckRhdGFdLFxuICAgIC8vIGFkZCBuZXcgbGF5ZXIgYXQgdGhlIHRvcFxuICAgIGxheWVyT3JkZXI6IFtuZXdMYXllci5pZCwgLi4uc3RhdGUubGF5ZXJPcmRlcl0sXG4gICAgc3BsaXRNYXBzOiBhZGROZXdMYXllcnNUb1NwbGl0TWFwKHN0YXRlLnNwbGl0TWFwcywgbmV3TGF5ZXIpXG4gIH07XG5cbiAgaWYgKG5ld0xheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogcmVtb3ZlIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlTGF5ZXJVcGRhdGVyPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBUIHtcbiAgY29uc3QgaWR4ID0gTnVtYmVyLmlzRmluaXRlKGlkKVxuICAgID8gLy8gc3VwcG9ydCBvbGRlciBBUEksIHJlbW92ZSBsYXllciBieSBpZHhcbiAgICAgIE51bWJlcihpZClcbiAgICA6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8IGlkeCA+PSBzdGF0ZS5sYXllcnMubGVuZ3RoKSB7XG4gICAgLy8gaW52YWxpZCBpbmRleFxuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCByZW1vdmUgbGF5ZXIgd2l0aCBpbnZhbGlkIGlkfGlkeCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtsYXllcnMsIGxheWVyRGF0YSwgbGF5ZXJPcmRlciwgY2xpY2tlZCwgaG92ZXJJbmZvfSA9IHN0YXRlO1xuICBjb25zdCBsYXllclRvUmVtb3ZlID0gbGF5ZXJzW2lkeF07XG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogZmlsdGVyT3V0QnlJZChsYXllclRvUmVtb3ZlLmlkKShsYXllcnMpLFxuICAgIGxheWVyRGF0YTogcmVtb3ZlRWxlbWVudEF0SW5kZXgoaWR4KShsYXllckRhdGEpLFxuICAgIGxheWVyT3JkZXI6IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihsYXllck9yZGVyLCBsYXllclRvUmVtb3ZlLmlkKSxcbiAgICBjbGlja2VkOiBsYXllclRvUmVtb3ZlLmlzTGF5ZXJIb3ZlcmVkKGNsaWNrZWQpID8gdW5kZWZpbmVkIDogY2xpY2tlZCxcbiAgICBob3ZlckluZm86IGxheWVyVG9SZW1vdmUuaXNMYXllckhvdmVyZWQoaG92ZXJJbmZvKSA/IHVuZGVmaW5lZCA6IGhvdmVySW5mbyxcbiAgICBzcGxpdE1hcHM6IHJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyhzdGF0ZS5zcGxpdE1hcHMsIGxheWVyVG9SZW1vdmUpXG4gICAgLy8gVE9ETzogdXBkYXRlIGZpbHRlcnMsIGNyZWF0ZSBoZWxwZXIgdG8gcmVtb3ZlIGxheWVyIGZvcm0gZmlsdGVyIChyZW1vdmUgbGF5ZXJpZCBhbmQgZGF0YWlkKSBpZiBtYXBwZWRcbiAgfTtcblxuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbn1cblxuLyoqXG4gKiBSZW9yZGVyIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVvcmRlckxheWVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7b3JkZXJ9OiBWaXNTdGF0ZUFjdGlvbnMuUmVvcmRlckxheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGxheWVyT3JkZXI6IG9yZGVyXG59KTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgbGF5ZXIgZ3JvdXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRMYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRMYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TmV3TGF5ZXJHcm91cChhY3Rpb24pO1xuICBsZXQgbmV3TGF5ZXJPcmRlciA9IFsuLi5zdGF0ZS5sYXllck9yZGVyXTtcblxuICBpZiAoYWN0aW9uLmxheWVyT3JkZXIpIHtcbiAgICBhY3Rpb24ubGF5ZXJPcmRlci5mb3JFYWNoKGxheWVySWQgPT4ge1xuICAgICAgbmV3TGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihuZXdMYXllck9yZGVyLCBsYXllcklkIGFzIHN0cmluZyk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyT3JkZXI6IGFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlcihuZXdMYXllck9yZGVyLCBsYXllckdyb3VwKVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBsYXllciBncm91cCBhbmQgYWxsIGxheWVycyB3aXRoaW4gaXRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVMYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVMYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7aWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwVG9SZW1vdmUgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgaWQpO1xuICBpZiAoIWxheWVyR3JvdXBUb1JlbW92ZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGxheWVySWRzVG9SZW1vdmUgPSBnZXRGbGF0TGF5ZXJPcmRlcihsYXllckdyb3VwVG9SZW1vdmUubGF5ZXJPcmRlcik7XG4gIGxldCBuZXdTdGF0ZSA9IHsuLi5zdGF0ZX07XG5cbiAgbGF5ZXJJZHNUb1JlbW92ZS5mb3JFYWNoKGxheWVySWQgPT4ge1xuICAgIGNvbnN0IGlkeCA9IG5ld1N0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBsYXllcklkKTtcbiAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgIG5ld1N0YXRlID0gcmVtb3ZlTGF5ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWQ6IGxheWVySWR9KTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IG5ld0xheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgbGF5ZXJHcm91cFRvUmVtb3ZlKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyXG4gIH07XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBhIGxheWVyIGdyb3VwIChsYWJlbCwgdmlzaWJpbGl0eSwgbGF5ZXIgbWVtYmVyc2hpcClcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVMYXllckdyb3VwVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVMYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7aWQsIG9wdGlvbnN9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIGlkKTtcbiAgaWYgKCFsYXllckdyb3VwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0gey4uLnN0YXRlfTtcblxuICBpZiAob3B0aW9ucy5sYXllck9yZGVyKSB7XG4gICAgbmV3U3RhdGUubGF5ZXJPcmRlciA9IFsuLi5sYXllckdyb3VwLmxheWVyT3JkZXIsIC4uLm5ld1N0YXRlLmxheWVyT3JkZXJdO1xuICAgIG9wdGlvbnMubGF5ZXJPcmRlci5mb3JFYWNoKGxheWVySWQgPT4ge1xuICAgICAgbmV3U3RhdGUubGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihcbiAgICAgICAgbmV3U3RhdGUubGF5ZXJPcmRlcixcbiAgICAgICAgbGF5ZXJJZCBhcyBzdHJpbmdcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBuZXdMYXllckdyb3VwID0ge1xuICAgIC4uLmxheWVyR3JvdXAsXG4gICAgLi4ub3B0aW9uc1xuICB9O1xuXG4gIGlmIChuZXdMYXllckdyb3VwLmlzVmlzaWJsZSAhPT0gbGF5ZXJHcm91cC5pc1Zpc2libGUpIHtcbiAgICBjb25zdCBsYXllcklkcyA9IGdldEZsYXRMYXllck9yZGVyKG5ld0xheWVyR3JvdXAubGF5ZXJPcmRlcik7XG4gICAgbmV3U3RhdGUgPSBuZXdTdGF0ZS5sYXllcnMucmVkdWNlKChhY2MsIGxheWVyKSA9PiB7XG4gICAgICBpZiAobGF5ZXJJZHMuaW5jbHVkZXMobGF5ZXIuaWQpKSB7XG4gICAgICAgIHJldHVybiBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoYWNjLCB7XG4gICAgICAgICAgb2xkTGF5ZXI6IGxheWVyLFxuICAgICAgICAgIG5ld0NvbmZpZzoge2lzVmlzaWJsZTogbmV3TGF5ZXJHcm91cC5pc1Zpc2libGV9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBuZXdTdGF0ZSk7XG4gIH1cblxuICBjb25zdCBuZXdMYXllck9yZGVyID0gdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCBuZXdMYXllckdyb3VwKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyXG4gIH07XG59O1xuXG4vKipcbiAqIEFkZCBhIGxheWVyIHRvIGEgbGF5ZXIgZ3JvdXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtsYXllckdyb3VwSWQsIGxheWVySWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIGxheWVyR3JvdXBJZCk7XG4gIGNvbnN0IGxheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsYXllcklkKTtcbiAgaWYgKCFsYXllckdyb3VwIHx8ICFsYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGlmIChsYXllckdyb3VwLmxheWVyT3JkZXIuZmluZChlbnRyeSA9PiBlbnRyeSA9PT0gbGF5ZXJJZCkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdHcm91cExheWVyT3JkZXIgPSBhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIobGF5ZXJHcm91cC5sYXllck9yZGVyLCBsYXllcklkKTtcbiAgcmV0dXJuIHVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyKHN0YXRlLCB7XG4gICAgaWQ6IGxheWVyR3JvdXBJZCxcbiAgICBvcHRpb25zOiB7bGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyfVxuICB9KTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgbGF5ZXIgZnJvbSBhIGxheWVyIGdyb3VwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlTGF5ZXJGcm9tTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlTGF5ZXJGcm9tTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2xheWVyR3JvdXBJZCwgbGF5ZXJJZH0gPSBhY3Rpb247XG4gIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgbGF5ZXJHcm91cElkKTtcbiAgaWYgKCFsYXllckdyb3VwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3TGF5ZXJHcm91cE9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKGxheWVyR3JvdXAubGF5ZXJPcmRlciwgbGF5ZXJJZCk7XG4gIHJldHVybiB1cGRhdGVMYXllckdyb3VwVXBkYXRlcihzdGF0ZSwge1xuICAgIGlkOiBsYXllckdyb3VwSWQsXG4gICAgb3B0aW9uczoge2xheWVyT3JkZXI6IG5ld0xheWVyR3JvdXBPcmRlcn1cbiAgfSk7XG59O1xuXG4vKipcbiAqIFN3YXAgbGF5ZXIgb3JkZXIgZW50cmllcyBiZXR3ZWVuIHJvb3QgYW5kIGdyb3Vwc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBjb25zdCBzd2FwTGF5ZXJPcmRlckVudHJpZXNVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlN3YXBMYXllck9yZGVyRW50cmllc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge29yaWdpbkxheWVySWQsIGRlc3RpbmF0aW9uTGF5ZXJJZCwgb3JpZ2luTGF5ZXJHcm91cElkLCBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZH0gPSBhY3Rpb247XG5cbiAgaWYgKCFvcmlnaW5MYXllckdyb3VwSWQgJiYgIWRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgY29uc3Qgb3JpZ2luSW5kZXggPSBzdGF0ZS5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBvcmlnaW5MYXllcklkIDogZW50cnkuaWQgPT09IG9yaWdpbkxheWVySWRcbiAgICApO1xuICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQgJiYgb3JpZ2luSW5kZXggIT09IC0xKSB7XG4gICAgICBjb25zdCBkZXN0aW5hdGlvbkluZGV4ID0gc3RhdGUubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBkZXN0aW5hdGlvbkxheWVySWQgOiBlbnRyeS5pZCA9PT0gZGVzdGluYXRpb25MYXllcklkXG4gICAgICApO1xuICAgICAgaWYgKGRlc3RpbmF0aW9uSW5kZXggIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IG5ld0xheWVyT3JkZXIgPSBhcnJheU1vdmUoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luSW5kZXgsIGRlc3RpbmF0aW9uSW5kZXgpO1xuICAgICAgICByZXR1cm4gey4uLnN0YXRlLCBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAob3JpZ2luTGF5ZXJHcm91cElkICYmICFkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgIGxldCBuZXdMYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkxheWVySWQpO1xuICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQpIHtcbiAgICAgIGNvbnN0IGRlc3RpbmF0aW9uSW5kZXggPSBuZXdMYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZCA6IGZhbHNlXG4gICAgICApO1xuICAgICAgbmV3TGF5ZXJPcmRlci5zcGxpY2UoZGVzdGluYXRpb25JbmRleCA9PT0gLTEgPyAwIDogZGVzdGluYXRpb25JbmRleCwgMCwgb3JpZ2luTGF5ZXJJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVyT3JkZXIgPSBbLi4ubmV3TGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJJZF07XG4gICAgfVxuICAgIHJldHVybiB7Li4uc3RhdGUsIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXJ9O1xuICB9XG5cbiAgaWYgKG9yaWdpbkxheWVyR3JvdXBJZCAmJiBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgIGlmIChvcmlnaW5MYXllckdyb3VwSWQgPT09IGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkxheWVyR3JvdXBJZCk7XG4gICAgICBpZiAoIWxheWVyR3JvdXApIHJldHVybiBzdGF0ZTtcbiAgICAgIGNvbnN0IG9yaWdpbkluZGV4ID0gbGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IG9yaWdpbkxheWVySWQgOiBlbnRyeS5pZCA9PT0gb3JpZ2luTGF5ZXJJZFxuICAgICAgKTtcbiAgICAgIGlmIChvcmlnaW5JbmRleCA9PT0gLTEpIHJldHVybiBzdGF0ZTtcbiAgICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQpIHtcbiAgICAgICAgY29uc3QgZGVzdEluZGV4ID0gbGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PlxuICAgICAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gZGVzdGluYXRpb25MYXllcklkIDogZW50cnkuaWQgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZFxuICAgICAgICApO1xuICAgICAgICBpZiAoZGVzdEluZGV4ID09PSAtMSkgcmV0dXJuIHN0YXRlO1xuICAgICAgICBjb25zdCBuZXdHcm91cExheWVyT3JkZXIgPSBhcnJheU1vdmUobGF5ZXJHcm91cC5sYXllck9yZGVyLCBvcmlnaW5JbmRleCwgZGVzdEluZGV4KTtcbiAgICAgICAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwge1xuICAgICAgICAgIC4uLmxheWVyR3JvdXAsXG4gICAgICAgICAgbGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gey4uLnN0YXRlLCBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICAvLyBDcm9zcy1ncm91cCBtb3ZlOiByZW1vdmUgZnJvbSBvcmlnaW4sIHRoZW4gYWRkIHRvIGRlc3RpbmF0aW9uXG4gICAgY29uc3QgbGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5MYXllcklkKTtcbiAgICBsZXQgbmV3U3RhdGUgPSBhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIoXG4gICAgICB7Li4uc3RhdGUsIGxheWVyT3JkZXJ9LFxuICAgICAge2xheWVySWQ6IG9yaWdpbkxheWVySWQsIGxheWVyR3JvdXBJZDogZGVzdGluYXRpb25MYXllckdyb3VwSWR9XG4gICAgKTtcblxuICAgIGlmIChkZXN0aW5hdGlvbkxheWVySWQpIHtcbiAgICAgIGNvbnN0IGxheWVyR3JvdXAgPSBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgZGVzdGluYXRpb25MYXllckdyb3VwSWQpO1xuICAgICAgaWYgKCFsYXllckdyb3VwKSByZXR1cm4gc3RhdGU7XG4gICAgICBjb25zdCBvcmlnaW5JbmRleCA9IGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT4gZW50cnkgPT09IG9yaWdpbkxheWVySWQpO1xuICAgICAgY29uc3QgZGVzdEluZGV4ID0gbGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmRJbmRleChlbnRyeSA9PiBlbnRyeSA9PT0gZGVzdGluYXRpb25MYXllcklkKTtcbiAgICAgIGlmIChvcmlnaW5JbmRleCAhPT0gLTEgJiYgZGVzdEluZGV4ICE9PSAtMSkge1xuICAgICAgICBjb25zdCBuZXdHcm91cExheWVyT3JkZXIgPSBhcnJheU1vdmUobGF5ZXJHcm91cC5sYXllck9yZGVyLCBvcmlnaW5JbmRleCwgZGVzdEluZGV4KTtcbiAgICAgICAgbmV3U3RhdGUgPSB7XG4gICAgICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICAgICAgbGF5ZXJPcmRlcjogdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihuZXdTdGF0ZS5sYXllck9yZGVyLCB7XG4gICAgICAgICAgICAuLi5sYXllckdyb3VwLFxuICAgICAgICAgICAgbGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyXG4gICAgICAgICAgfSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG5cbiAgaWYgKCFvcmlnaW5MYXllckdyb3VwSWQgJiYgZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICBjb25zdCBsYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkxheWVySWQpO1xuICAgIHJldHVybiBhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIoXG4gICAgICB7Li4uc3RhdGUsIGxheWVyT3JkZXJ9LFxuICAgICAge2xheWVySWQ6IG9yaWdpbkxheWVySWQsIGxheWVyR3JvdXBJZDogZGVzdGluYXRpb25MYXllckdyb3VwSWR9XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn07XG5cbi8qKlxuICogZHVwbGljYXRlIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgZHVwbGljYXRlTGF5ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5EdXBsaWNhdGVMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gTnVtYmVyLmlzRmluaXRlKGlkKVxuICAgID8gLy8gc3VwcG9ydCBvbGRlciBBUEksIHJlbW92ZSBsYXllciBieSBpZHhcbiAgICAgIE51bWJlcihpZClcbiAgICA6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8ICFzdGF0ZS5sYXllcnNbaWR4XSkge1xuICAgIENvbnNvbGUud2FybihgbGF5ZXIgJHtpZHh9IG5vdCBmb3VuZCBpbiBsYXllck9yZGVyYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge2xheWVyc30gPSBzdGF0ZTtcbiAgY29uc3Qgb3JpZ2luYWwgPSBsYXllcnNbaWR4XTtcblxuICBjb25zdCBvcmlnaW5hbExheWVyT3JkZXJJZHggPSBnZXRJbmRleEZyb21MYXllckVudHJ5SWQoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luYWwuaWQpO1xuICBsZXQgbmV3TGFiZWwgPSBgQ29weSBvZiAke29yaWdpbmFsLmNvbmZpZy5sYWJlbH1gO1xuICBsZXQgcG9zdGZpeCA9IDA7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgd2hpbGUgKGxheWVycy5maW5kKGwgPT4gbC5jb25maWcubGFiZWwgPT09IG5ld0xhYmVsKSkge1xuICAgIG5ld0xhYmVsID0gYENvcHkgb2YgJHtvcmlnaW5hbC5jb25maWcubGFiZWx9ICR7Kytwb3N0Zml4fWA7XG4gIH1cblxuICAvLyBjb2xsZWN0IGxheWVyIGNvbmZpZyBmcm9tIG9yaWdpbmFsXG4gIGNvbnN0IGxvYWRlZExheWVyID0gc2VyaWFsaXplTGF5ZXIob3JpZ2luYWwsIHN0YXRlLnNjaGVtYSk7XG5cbiAgLy8gYXNzaWduIG5ldyBpZCBhbmQgbGFiZWwgdG8gY29waWVkIGxheWVyXG4gIGlmICghbG9hZGVkTGF5ZXI/LmNvbmZpZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsb2FkZWRMYXllci5jb25maWcubGFiZWwgPSBuZXdMYWJlbDtcbiAgbG9hZGVkTGF5ZXIuaWQgPSBnZW5lcmF0ZUhhc2hJZChMQVlFUl9JRF9MRU5HVEgpO1xuXG4gIC8vIGFkZCBsYXllciB0byBzdGF0ZVxuICBsZXQgbmV4dFN0YXRlID0gYWRkTGF5ZXJVcGRhdGVyKHN0YXRlLCB7Y29uZmlnOiBsb2FkZWRMYXllcn0pO1xuICAvLyByZXRyaWV2ZSBuZXdseSBjcmVhdGVkIGxheWVyXG4gIGNvbnN0IG5ld0xheWVyID0gbmV4dFN0YXRlLmxheWVyc1tuZXh0U3RhdGUubGF5ZXJzLmxlbmd0aCAtIDFdO1xuXG4gIC8vIENoZWNrIGlmIHRoZSBvcmlnaW5hbCBsYXllciBpcyBpbnNpZGUgYSBncm91cFxuICBjb25zdCBwYXJlbnRHcm91cCA9IGZpbmRQYXJlbnRHcm91cEZvckxheWVyKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbmFsLmlkKTtcblxuICBpZiAocGFyZW50R3JvdXApIHtcbiAgICAvLyBMYXllciBpcyBpbnNpZGUgYSBncm91cCAtIHJlbW92ZSB0aGUgcHJlcGVuZGVkIGlkIGZyb20gcm9vdCBhbmQgaW5zZXJ0IGludG8gdGhlIGdyb3VwXG4gICAgY29uc3QgbGF5ZXJPcmRlcldpdGhvdXRQcmVwZW5kZWQgPSBuZXh0U3RhdGUubGF5ZXJPcmRlci5zbGljZSgxKTtcbiAgICBjb25zdCBpZHhJbkdyb3VwID0gcGFyZW50R3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZSA9PiBlID09PSBvcmlnaW5hbC5pZCk7XG4gICAgY29uc3QgbmV3R3JvdXBMYXllck9yZGVyID0gYXJyYXlJbnNlcnQocGFyZW50R3JvdXAubGF5ZXJPcmRlciwgaWR4SW5Hcm91cCwgbmV3TGF5ZXIuaWQpO1xuICAgIGNvbnN0IHVwZGF0ZWRHcm91cCA9IHsuLi5wYXJlbnRHcm91cCwgbGF5ZXJPcmRlcjogbmV3R3JvdXBMYXllck9yZGVyfTtcbiAgICBjb25zdCBuZXdMYXllck9yZGVyID0gdXBkYXRlTGF5ZXJHcm91cEluTGF5ZXJPcmRlcihcbiAgICAgIGxheWVyT3JkZXJXaXRob3V0UHJlcGVuZGVkLFxuICAgICAgdXBkYXRlZEdyb3VwXG4gICAgKTtcbiAgICBuZXh0U3RhdGUgPSByZW9yZGVyTGF5ZXJVcGRhdGVyKG5leHRTdGF0ZSwge29yZGVyOiBuZXdMYXllck9yZGVyfSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gTGF5ZXIgaXMgYXQgcm9vdCBsZXZlbCAtIHVzZSBvcmlnaW5hbCBpbmRleC1iYXNlZCBpbnNlcnRpb25cbiAgICBjb25zdCBuZXdMYXllck9yZGVyID0gYXJyYXlJbnNlcnQoXG4gICAgICBuZXh0U3RhdGUubGF5ZXJPcmRlci5zbGljZSgxLCBuZXh0U3RhdGUubGF5ZXJPcmRlci5sZW5ndGgpLFxuICAgICAgb3JpZ2luYWxMYXllck9yZGVySWR4LFxuICAgICAgbmV3TGF5ZXIuaWRcbiAgICApO1xuICAgIG5leHRTdGF0ZSA9IHJlb3JkZXJMYXllclVwZGF0ZXIobmV4dFN0YXRlLCB7b3JkZXI6IG5ld0xheWVyT3JkZXJ9KTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4obmV4dFN0YXRlKTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoXG4gICAgYWN0aW9uLmNvbmZpZz8udHlwZSA9PT0gTElHSFRfQU5EX1NIQURPV19FRkZFQ1QudHlwZSAmJlxuICAgIHN0YXRlLmVmZmVjdHMuc29tZShlZmZlY3QgPT4gZWZmZWN0LnR5cGUgPT09IExJR0hUX0FORF9TSEFET1dfRUZGRUNULnR5cGUpXG4gICkge1xuICAgIENvbnNvbGUud2FybihgQ2FuJ3QgYWRkIG1vcmUgdGhhbiBvbmUgJHtMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC5uYW1lfSBlZmZlY3RgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBpZiAoXG4gICAgYWN0aW9uLmNvbmZpZz8udHlwZSA9PT0gRElTVEFOQ0VfRk9HX1RZUEUgJiZcbiAgICBzdGF0ZS5lZmZlY3RzLnNvbWUoXG4gICAgICBlZmZlY3QgPT4gZWZmZWN0LnR5cGUgPT09IERJU1RBTkNFX0ZPR19UWVBFIHx8IGVmZmVjdC50eXBlID09PSBTVVJGQUNFX0ZPR19UWVBFXG4gICAgKVxuICApIHtcbiAgICBDb25zb2xlLndhcm4oXCJDYW4ndCBhZGQgbW9yZSB0aGFuIG9uZSBmb2cgZWZmZWN0XCIpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGlmIChcbiAgICBhY3Rpb24uY29uZmlnPy50eXBlID09PSBTVVJGQUNFX0ZPR19UWVBFICYmXG4gICAgc3RhdGUuZWZmZWN0cy5zb21lKFxuICAgICAgZWZmZWN0ID0+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+IGYuaWQgPT09IHNlbGVjdGVkRmVhdHVyZS5pZCk7XG5cbiAgLy8gaWYgZmVhdHVyZSBpcyBwYXJ0IG9mIGEgZmlsdGVyXG4gIGNvbnN0IGZpbHRlcklkID0gZmVhdHVyZSAmJiBnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKTtcbiAgaWYgKGZpbHRlcklkICYmIGZlYXR1cmUpIHtcbiAgICAvLyBhZGQgYmJveCBmb3IgcG9seWdvbiBmaWx0ZXIgdG8gc3BlZWQgdXAgZmlsdGVyaW5nXG4gICAgaWYgKGZlYXR1cmUucHJvcGVydGllcykgZmVhdHVyZS5wcm9wZXJ0aWVzLmJib3ggPSBiYm94KGZlYXR1cmUgYXMgdW5rbm93biBhcyBBbGxHZW9KU09OKTtcbiAgICBjb25zdCBmZWF0dXJlVmFsdWUgPSBmZWF0dXJlVG9GaWx0ZXJWYWx1ZShmZWF0dXJlLCBmaWx0ZXJJZCk7XG4gICAgY29uc3QgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZmlsID0+IGZpbC5pZCA9PT0gZmlsdGVySWQpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgICBwcm9wOiAndmFsdWUnLFxuICAgICAgdmFsdWU6IGZlYXR1cmVWYWx1ZVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIFNldCB0aGUgY3VycmVudCBzZWxlY3RlZCBmZWF0dXJlXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRTZWxlY3RlZEZlYXR1cmVVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtmZWF0dXJlLCBzZWxlY3Rpb25Db250ZXh0fTogVmlzU3RhdGVBY3Rpb25zLlNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gYWRkIGJib3ggZm9yIHBvbHlnb24gZmlsdGVyIHRvIHNwZWVkIHVwIGZpbHRlcmluZ1xuICBsZXQgc2VsZWN0ZWRGZWF0dXJlID0gZmVhdHVyZTtcbiAgaWYgKGZlYXR1cmU/LnByb3BlcnRpZXMpIHtcbiAgICBzZWxlY3RlZEZlYXR1cmUgPSB7XG4gICAgICAuLi5mZWF0dXJlLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAuLi5mZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgICAgIGJib3g6IGJib3goZmVhdHVyZSBhcyB1bmtub3duIGFzIEFsbEdlb0pTT04pXG4gICAgICB9XG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlLFxuICAgICAgc2VsZWN0aW9uQ29udGV4dFxuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogRGVsZXRlIGV4aXN0aW5nIGZlYXR1cmUgZnJvbSBmaWx0ZXJzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsZXRlRmVhdHVyZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2ZlYXR1cmV9OiBWaXNTdGF0ZUFjdGlvbnMuRGVsZXRlRmVhdHVyZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFmZWF0dXJlKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgICB9XG4gIH07XG5cbiAgaWYgKGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpKSB7XG4gICAgY29uc3QgZmlsdGVySWR4ID0gbmV3U3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKSk7XG5cbiAgICByZXR1cm4gZmlsdGVySWR4ID4gLTEgPyByZW1vdmVGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWR4OiBmaWx0ZXJJZHh9KSA6IG5ld1N0YXRlO1xuICB9XG5cbiAgLy8gbW9kaWZ5IGVkaXRvciBvYmplY3RcbiAgY29uc3QgbmV3RWRpdG9yID0ge1xuICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICBmZWF0dXJlczogc3RhdGUuZWRpdG9yLmZlYXR1cmVzLmZpbHRlcihmID0+IGYuaWQgIT09IGZlYXR1cmUuaWQpLFxuICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiBuZXdFZGl0b3JcbiAgfTtcbn1cblxuLyoqXG4gKiBUb2dnbGUgZmVhdHVyZSBhcyBsYXllciBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRQb2x5Z29uRmlsdGVyTGF5ZXJVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHBheWxvYWQ6IFZpc1N0YXRlQWN0aW9ucy5TZXRQb2x5Z29uRmlsdGVyTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtsYXllciwgZmVhdHVyZX0gPSBwYXlsb2FkO1xuICBjb25zdCBmaWx0ZXJJZCA9IGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpO1xuXG4gIC8vIGxldCBuZXdGaWx0ZXIgPSBudWxsO1xuICBsZXQgZmlsdGVySWR4O1xuICBsZXQgbmV3TGF5ZXJJZCA9IFtsYXllci5pZF07XG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICAvLyBJZiBwb2x5Z29uIGZpbHRlciBhbHJlYWR5IGV4aXN0cywgd2UgbmVlZCB0byBmaW5kIG91dCBpZiB0aGUgY3VycmVudCBsYXllciBpcyBhbHJlYWR5IGluY2x1ZGVkXG4gIGlmIChmaWx0ZXJJZCkge1xuICAgIGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gZmlsdGVySWQpO1xuXG4gICAgaWYgKCFzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0pIHtcbiAgICAgIC8vIHdoYXQgaWYgZmlsdGVyIGRvZXNuJ3QgZXhpc3Q/Li4uIG5vdCBwb3NzaWJsZS5cbiAgICAgIC8vIGJlY2F1c2UgZmVhdHVyZXMgaW4gdGhlIGVkaXRvciBpcyBwYXNzZWQgaW4gZnJvbSBmaWx0ZXJzIGFuZCBlZGl0b3JzLlxuICAgICAgLy8gYnV0IHdlIHdpbGwgbW92ZSB0aGlzIGZlYXR1cmUgYmFjayB0byBlZGl0b3IganVzdCBpbiBjYXNlXG4gICAgICBjb25zdCBub25lRmlsdGVyRmVhdHVyZSA9IHtcbiAgICAgICAgLi4uZmVhdHVyZSxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIC4uLmZlYXR1cmUucHJvcGVydGllcyxcbiAgICAgICAgICBmaWx0ZXJJZDogbnVsbFxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgZWRpdG9yOiB7XG4gICAgICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgICAgIGZlYXR1cmVzOiBbLi4uc3RhdGUuZWRpdG9yLmZlYXR1cmVzLCBub25lRmlsdGVyRmVhdHVyZV0sXG4gICAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBub25lRmlsdGVyRmVhdHVyZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF07XG4gICAgY29uc3Qge2xheWVySWQgPSBbXX0gPSBmaWx0ZXI7XG4gICAgY29uc3QgaXNMYXllckluY2x1ZGVkID0gbGF5ZXJJZC5pbmNsdWRlcyhsYXllci5pZCk7XG5cbiAgICBuZXdMYXllcklkID0gaXNMYXllckluY2x1ZGVkXG4gICAgICA/IC8vIGlmIGxheWVyIGlzIGluY2x1ZGVkLCByZW1vdmUgaXRcbiAgICAgICAgbGF5ZXJJZC5maWx0ZXIobCA9PiBsICE9PSBsYXllci5pZClcbiAgICAgIDogWy4uLmxheWVySWQsIGxheWVyLmlkXTtcbiAgfSBlbHNlIHtcbiAgICAvLyBpZiB3ZSBoYXZlbid0IGNyZWF0ZSB0aGUgcG9seWdvbiBmaWx0ZXIsIGNyZWF0ZSBpdFxuICAgIGNvbnN0IG5ld0ZpbHRlciA9IGdlbmVyYXRlUG9seWdvbkZpbHRlcihbXSwgZmVhdHVyZSk7XG4gICAgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5sZW5ndGg7XG5cbiAgICAvLyBhZGQgZmVhdHVyZSwgcmVtb3ZlIGZlYXR1cmUgZnJvbSBlaWR0b3JcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZmlsdGVyczogWy4uLnN0YXRlLmZpbHRlcnMsIG5ld0ZpbHRlcl0sXG4gICAgICBlZGl0b3I6IHtcbiAgICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgICBmZWF0dXJlczogc3RhdGUuZWRpdG9yLmZlYXR1cmVzLmZpbHRlcihmID0+IGYuaWQgIT09IGZlYXR1cmUuaWQpLFxuICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IG5ld0ZpbHRlci52YWx1ZVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICdsYXllcklkJyxcbiAgICB2YWx1ZTogbmV3TGF5ZXJJZFxuICB9KTtcbn1cblxuLyoqXG4gKiBBcHBseSBwb2x5Z29uIGZpbHRlciB0byBhbGwgdmlzaWJsZSBsYXllcnNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRQb2x5Z29uRmlsdGVyQWxsTGF5ZXJzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBwYXlsb2FkOiBWaXNTdGF0ZUFjdGlvbnMuU2V0UG9seWdvbkZpbHRlckFsbExheWVyc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2ZlYXR1cmV9ID0gcGF5bG9hZDtcblxuICBjb25zdCBuZXdGaWx0ZXIgPSBnZW5lcmF0ZVBvbHlnb25GaWx0ZXIoW10sIGZlYXR1cmUpO1xuICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmxlbmd0aDtcblxuICBjb25zdCBuZXdTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogWy4uLnN0YXRlLmZpbHRlcnMsIG5ld0ZpbHRlcl0sXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBmZWF0dXJlczogc3RhdGUuZWRpdG9yLmZlYXR1cmVzLmZpbHRlcihmID0+IGYuaWQgIT09IGZlYXR1cmUuaWQpLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBuZXdGaWx0ZXIudmFsdWUsXG4gICAgICBtb2RlOiBFRElUT1JfTU9ERVMuRURJVFxuICAgIH1cbiAgfTtcblxuICBjb25zdCB2aXNpYmxlTGF5ZXJJZHMgPSBnZXQocGF5bG9hZCwgJ3Zpc2libGVMYXllcklkcycpO1xuICBjb25zdCBhbGxMYXllcklkcyA9IEFycmF5LmlzQXJyYXkodmlzaWJsZUxheWVySWRzKVxuICAgID8gdmlzaWJsZUxheWVySWRzXG4gICAgOiBzdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuaXNWaXNpYmxlKS5tYXAobCA9PiBsLmlkKTtcblxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICdsYXllcklkJyxcbiAgICB2YWx1ZTogYWxsTGF5ZXJJZHNcbiAgfSk7XG59XG5cbi8qKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvcnRUYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgY29sdW1uLCBtb2RlfTogVmlzU3RhdGVBY3Rpb25zLlNvcnRUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgc29ydE1vZGUgPSBtb2RlO1xuICBpZiAoIXNvcnRNb2RlKSB7XG4gICAgY29uc3QgY3VycmVudE1vZGUgPSBnZXQoZGF0YXNldCwgWydzb3J0Q29sdW1uJywgY29sdW1uXSk7XG4gICAgLy8gQHRzLWlnbm9yZSAtIHNob3VsZCBiZSBmaXhhYmxlIGluIGEgVFMgZmlsZVxuICAgIHNvcnRNb2RlID0gY3VycmVudE1vZGVcbiAgICAgID8gT2JqZWN0LmtleXMoU09SVF9PUkRFUikuZmluZChtID0+IG0gIT09IGN1cnJlbnRNb2RlKVxuICAgICAgOiBTT1JUX09SREVSLkFTQ0VORElORztcbiAgfVxuXG4gIGNvbnN0IHNvcnRlZCA9IHNvcnREYXRhc2V0QnlDb2x1bW4oZGF0YXNldCwgY29sdW1uLCBzb3J0TW9kZSk7XG4gIHJldHVybiBzZXQoWydkYXRhc2V0cycsIGRhdGFJZF0sIHNvcnRlZCwgc3RhdGUpO1xufVxuXG4vKipcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwaW5UYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgY29sdW1ufTogVmlzU3RhdGVBY3Rpb25zLlBpblRhYmxlQ29sdW1uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5ld0RhdGFzZXQgPSBwaW5UYWJsZUNvbHVtbnMoZGF0YXNldCwgY29sdW1uKTtcblxuICByZXR1cm4gc2V0KFsnZGF0YXNldHMnLCBkYXRhSWRdLCBuZXdEYXRhc2V0LCBzdGF0ZSk7XG59XG5cbi8qKlxuICogQ29weSBjb2x1bW4gY29udGVudCBhcyBzdHJpbmdzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29weVRhYmxlQ29sdW1uVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBjb2x1bW59OiBWaXNTdGF0ZUFjdGlvbnMuQ29weVRhYmxlQ29sdW1uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGZpZWxkSWR4ID0gZGF0YXNldC5maWVsZHMuZmluZEluZGV4KGYgPT4gZi5uYW1lID09PSBjb2x1bW4pO1xuICBpZiAoZmllbGRJZHggPCAwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHt0eXBlfSA9IGRhdGFzZXQuZmllbGRzW2ZpZWxkSWR4XTtcbiAgY29uc3QgdGV4dCA9IGRhdGFzZXQuZGF0YUNvbnRhaW5lclxuICAgIC5tYXAocm93ID0+IHBhcnNlRmllbGRWYWx1ZShyb3cudmFsdWVBdChmaWVsZElkeCksIHR5cGUpLCB0cnVlKVxuICAgIC5qb2luKCdcXG4nKTtcblxuICBjb3B5KHRleHQpO1xuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBTZXQgZGlzcGxheSBmb3JtYXQgZnJvbSBjb2x1bW5zIGZyb20gdXNlciBzZWxlY3Rpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBmb3JtYXRzfTogVmlzU3RhdGVBY3Rpb25zLlNldENvbHVtbkRpc3BsYXlGb3JtYXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IG5ld0ZpZWxkcyA9IGRhdGFzZXQuZmllbGRzO1xuICBPYmplY3Qua2V5cyhmb3JtYXRzKS5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgY29uc3QgZmllbGRJZHggPSBkYXRhc2V0LmZpZWxkcy5maW5kSW5kZXgoZiA9PiBmLm5hbWUgPT09IGNvbHVtbik7XG4gICAgaWYgKGZpZWxkSWR4ID49IDApIHtcbiAgICAgIGNvbnN0IGRpc3BsYXlGb3JtYXQgPSBmb3JtYXRzW2NvbHVtbl07XG4gICAgICBjb25zdCBmaWVsZCA9IG5ld0ZpZWxkc1tmaWVsZElkeF07XG4gICAgICBuZXdGaWVsZHMgPSBzd2FwXyhtZXJnZV8oe2Rpc3BsYXlGb3JtYXR9KShmaWVsZCkgYXMge2lkOiBzdHJpbmd9KShcbiAgICAgICAgbmV3RmllbGRzIGFzIHtpZDogc3RyaW5nfVtdXG4gICAgICApIGFzIEZpZWxkW107XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBuZXdEYXRhc2V0ID0gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtmaWVsZHM6IG5ld0ZpZWxkcyBhcyBGaWVsZFtdfSk7XG4gIGxldCBuZXdTdGF0ZSA9IHBpY2tfKCdkYXRhc2V0cycpKG1lcmdlXyh7W2RhdGFJZF06IG5ld0RhdGFzZXR9KSkoc3RhdGUpO1xuXG4gIC8vIHVwZGF0ZSBjb2xvckZpZWxkIGRpc3BsYXlGb3JtYXRcbiAgbmV3U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdTdGF0ZS5sYXllcnMubWFwKGxheWVyID0+XG4gICAgICBsYXllci5jb25maWc/LmNvbG9yRmllbGQ/Lm5hbWUgJiYgbGF5ZXIuY29uZmlnLmNvbG9yRmllbGQubmFtZSBpbiBmb3JtYXRzXG4gICAgICAgID8gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICAgICAgY29sb3JGaWVsZDoge1xuICAgICAgICAgICAgICAuLi5sYXllci5jb25maWcuY29sb3JGaWVsZCxcbiAgICAgICAgICAgICAgZGlzcGxheUZvcm1hdDogZm9ybWF0c1tsYXllci5jb25maWcuY29sb3JGaWVsZC5uYW1lXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIDogbGF5ZXJcbiAgICApXG4gIH07XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBlZGl0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRWRpdG9yVmlzaWJpbGl0eVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIHZpc2libGU6ICFzdGF0ZS5lZGl0b3IudmlzaWJsZVxuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZHgsIGNvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IG9sZEZpbHRlciA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcbiAgaWYgKCFvbGRGaWx0ZXIpIHtcbiAgICBDb25zb2xlLmVycm9yKGBmaWx0ZXJzLiR7aWR4fSBpcyB1bmRlZmluZWRgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKG9sZEZpbHRlci50eXBlICE9PSBGSUxURVJfVFlQRVMudGltZVJhbmdlKSB7XG4gICAgQ29uc29sZS5lcnJvcihcbiAgICAgIGBzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnIGNhbiBvbmx5IGJlIGNhbGxlZCB0byB1cGRhdGUgYSB0aW1lIGZpbHRlci4gY2hlY2sgZmlsdGVyLnR5cGUgPT09ICd0aW1lUmFuZ2UnYFxuICAgICk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgdXBkYXRlcyA9IGNoZWNrVGltZUNvbmZpZ0FyZ3MoY29uZmlnKTtcblxuICByZXR1cm4gcGlja18oJ2ZpbHRlcnMnKShzd2FwXyhtZXJnZV8odXBkYXRlcykob2xkRmlsdGVyKSkpKHN0YXRlKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpIHtcbiAgY29uc3QgYWxsb3dlZCA9IFsndGltZUZvcm1hdCcsICd0aW1lem9uZSddO1xuICByZXR1cm4gT2JqZWN0LmtleXMoY29uZmlnKS5yZWR1Y2UoKGFjY3UsIHByb3ApID0+IHtcbiAgICBpZiAoIWFsbG93ZWQuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWcgdGFrZXMgdGltZUZvcm1hdCBhbmQvb3IgdGltZXpvbmUgYXMgb3B0aW9ucywgZm91bmQgJHtwcm9wfWBcbiAgICAgICk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9XG5cbiAgICAvLyBoZXJlIHdlIGFyZSBOT1QgY2hlY2tpbmcgaWYgdGltZXpvbmUgb3IgdGltZUZvcm1hdCBpbnB1dCBpcyB2YWxpZFxuICAgIGFjY3VbcHJvcF0gPSBjb25maWdbcHJvcF07XG4gICAgcmV0dXJuIGFjY3U7XG4gIH0sIHt9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZWRpdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghY29uZmlnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHVwZGF0ZXMgPSBjaGVja1RpbWVDb25maWdBcmdzKGNvbmZpZyk7XG4gIHJldHVybiBwaWNrXygnYW5pbWF0aW9uQ29uZmlnJykobWVyZ2VfKHVwZGF0ZXMpKShzdGF0ZSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2V2ZW50LCBsYXllcn0gPSBhY3Rpb247XG4gIGNvbnN0IHtpZDogZGVja2dsTGF5ZXJJZCwgY291bnR9ID0gZXZlbnQ7XG4gIGlmICghbGF5ZXIpIHtcbiAgICBDb25zb2xlLndhcm4oYGxheWVyRmlsdGVyZWRJdGVtcyBsYXllciBkb2VzbnQgZXhpc3RzYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChsYXllci5maWx0ZXJlZEl0ZW1Db3VudD8uW2RlY2tnbExheWVySWRdID09PSBjb3VudCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxheWVyLmZpbHRlcmVkSXRlbUNvdW50ID0ge1xuICAgIC4uLmxheWVyLmZpbHRlcmVkSXRlbUNvdW50LFxuICAgIFtkZWNrZ2xMYXllcklkXTogY291bnRcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3dhcF8obGF5ZXIpKHN0YXRlLmxheWVycylcbiAgfTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgV01TIGZlYXR1cmUgaW5mbyBhbmQgcGluIHRvb2x0aXBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdtc0ZlYXR1cmVJbmZvVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuV01TRmVhdHVyZUluZm9BY3Rpb25cbik6IFMge1xuICBjb25zdCB7bGF5ZXIsIGZlYXR1cmVJbmZvLCBjb29yZGluYXRlfSA9IGFjdGlvbjtcbiAgaWYgKCFsYXllcikge1xuICAgIGNvbnNvbGUud2FybihgV01TIGZlYXR1cmUgaW5mbyBsYXllciBkb2Vzbid0IGV4aXN0YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gQ3JlYXRlIGEgY2xpY2tlZCBvYmplY3Qgc2ltaWxhciB0byBsYXllckNsaWNrVXBkYXRlciB0byBwaW4gdGhlIHRvb2x0aXBcbiAgY29uc3QgY2xpY2tlZCA9IGZlYXR1cmVJbmZvXG4gICAgPyB7XG4gICAgICAgIHBpY2tlZDogdHJ1ZSxcbiAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgd21zRmVhdHVyZUluZm86IGZlYXR1cmVJbmZvXG4gICAgICAgIH0sXG4gICAgICAgIGNvb3JkaW5hdGU6IGNvb3JkaW5hdGUgfHwgWzAsIDBdLFxuICAgICAgICBsYXllcjoge1xuICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICBpZHg6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBsYXllci5pZCksXG4gICAgICAgICAgICBpZDogbGF5ZXIuaWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICA6IG51bGw7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjbGlja2VkXG4gIH07XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50c1xuZXhwb3J0IGZ1bmN0aW9uIHN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2lkeDogZmlsdGVySWR4LCBlbmFibGUgPSBmYWxzZX0gPSBhY3Rpb247XG5cbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgbGV0IG5ld0ZpbHRlciA9IGZpbHRlcjtcblxuICAvLyBpZiB3ZSBlbmFibGUgc3luYyB3ZSBhcmUgZ29pbmcgdG8gbWVyZ2UgZmlsdGVyIGFuZCBhbmltYXRpb25Db25maWcgZG9tYWlucyBhbmQgc3RvcmUgaW50byBmaWx0ZXIuZG9tYWluXG4gIGlmIChlbmFibGUpIHtcbiAgICBjb25zdCBhbmltYXRhYmxlTGF5ZXJzID0gZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMobmV3U3RhdGUubGF5ZXJzKTtcbiAgICAvLyBpZiBubyBhbmltYXRhYmxlTGF5ZXJzIGFyZSBwcmVzZW50IHdlIHNpbXBseSByZXR1cm5cbiAgICBpZiAoIWFuaW1hdGFibGVMYXllcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmV3U3RhdGU7XG4gICAgfVxuXG4gICAgY29uc3QgaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyA9IGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMoYW5pbWF0YWJsZUxheWVycyk7XG4gICAgY29uc3QgaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyID0gQm9vbGVhbihpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLmxlbmd0aCk7XG5cbiAgICBjb25zdCBuZXdGaWx0ZXJEb21haW4gPSBtZXJnZVRpbWVEb21haW5zKFtmaWx0ZXIuZG9tYWluLCBuZXdTdGF0ZS5hbmltYXRpb25Db25maWcuZG9tYWluXSk7XG5cbiAgICAvLyB3ZSBvbmx5IHVwZGF0ZSBhbmltYXRpb25XaW5kb3cgaWYgd2UgaGF2ZSBpbnRlcnZhbCBiYXNlZCBhbmltYXRpb24gbGF5ZXJzIHdpdGggZGVmaW5lZCBpbnRlcnZhbHMgYW5kIHRoZSBjdXJyZW50IGZpbHRlciBhbmltYXRpb24gd2luZG93IGlzIG5vdCBpbnRlcnZhbFxuICAgIGlmIChoYXNJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXIpIHtcbiAgICAgIGlmIChmaWx0ZXIuYW5pbWF0aW9uV2luZG93ICE9PSBBTklNQVRJT05fV0lORE9XLmludGVydmFsKSB7XG4gICAgICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgICAgIGlkOiBmaWx0ZXIuaWQsXG4gICAgICAgICAgYW5pbWF0aW9uV2luZG93OiBBTklNQVRJT05fV0lORE9XLmludGVydmFsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgICAvLyBhZGp1c3QgdGltZSBmaWx0ZXIgaW50ZXJ2YWxcbiAgICAgIG5ld0ZpbHRlciA9IGFkanVzdFRpbWVGaWx0ZXJJbnRlcnZhbChuZXdTdGF0ZSwgbmV3RmlsdGVyKTtcblxuICAgICAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgICAgIG5ld1N0YXRlID0ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gICAgICB9O1xuICAgIH1cblxuICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAvLyBhZGp1c3QgdmFsdWUgYmFzZWQgb24gbmV3IGRvbWFpblxuICAgIGNvbnN0IG5ld0ZpbHRlclZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihcbiAgICAgIG5ld0ZpbHRlci5hbmltYXRpb25XaW5kb3cgPT09IEFOSU1BVElPTl9XSU5ET1cuaW50ZXJ2YWxcbiAgICAgICAgPyBbbmV3RmlsdGVyRG9tYWluWzBdLCBuZXdGaWx0ZXJEb21haW5bMF1dXG4gICAgICAgIDogbmV3RmlsdGVyRG9tYWluLFxuICAgICAgey4uLm5ld0ZpbHRlciwgZG9tYWluOiBuZXdGaWx0ZXJEb21haW59XG4gICAgKTtcblxuICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgICBwcm9wOiAndmFsdWUnLFxuICAgICAgdmFsdWU6IG5ld0ZpbHRlclZhbHVlXG4gICAgfSk7XG5cbiAgICBuZXdGaWx0ZXIgPSB7XG4gICAgICAuLi4obmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlciksXG4gICAgICBzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZTogdHJ1ZVxuICAgIH07XG5cbiAgICAvLyByZXBsYWNlIGZpbHRlciBpbiBzdGF0ZSB3aXRoIG5ld0ZpbHRlclxuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikobmV3U3RhdGUuZmlsdGVycylcbiAgICB9O1xuXG4gICAgbmV3U3RhdGUgPSBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICAgIG1vZGU6IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlcilcbiAgICB9KTtcblxuICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAvLyBzZXQgdGhlIGFuaW1hdGlvbiBjb25maWcgdmFsdWUgdG8gbWF0Y2ggZmlsdGVyIHZhbHVlXG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIHZhbHVlOiBuZXdGaWx0ZXIudmFsdWVbbmV3RmlsdGVyLnN5bmNUaW1lbGluZU1vZGVdXG4gICAgfSk7XG4gIH1cblxuICAvLyBzZXQgZG9tYWluIGFuZCBzdGVwXG4gIG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgc3luY2VkV2l0aExheWVyVGltZWxpbmU6IGZhbHNlXG4gIH07XG5cbiAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgbmV3U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgLy8gcmVzZXQgc3luYyB0aW1lbGluZSBtb2RlXG4gIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgIG1vZGU6IFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kXG4gIH0pO1xuXG4gIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgLy8gcmVzZXQgZmlsdGVyIHZhbHVlXG4gIGNvbnN0IG5ld0ZpbHRlclZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihuZXdGaWx0ZXIuZG9tYWluLCBuZXdGaWx0ZXIpO1xuXG4gIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICd2YWx1ZScsXG4gICAgdmFsdWU6IG5ld0ZpbHRlclZhbHVlXG4gIH0pO1xuXG4gIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgIG1vZGU6IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlcilcbiAgfSk7XG5cbiAgLy8gcmVzZXQgYW5pbWF0aW9uIGNvbmZpZyBjdXJyZW50IHRpbWUgdG9cbiAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICB2YWx1ZTogbmV3U3RhdGUuYW5pbWF0aW9uQ29uZmlnLmRvbWFpbj8uWzBdID8/IG51bGxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuc2V0VGltZUZpbHRlclN5bmNUaW1lbGluZU1vZGVBY3Rpb25cbikge1xuICBjb25zdCB7aWQ6IGZpbHRlcklkLCBtb2RlOiBzeW5jVGltZWxpbmVNb2RlfSA9IGFjdGlvbjtcblxuICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlcklkeCA9PT0gLTEpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gIGlmICghdmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXIsIHN5bmNUaW1lbGluZU1vZGUpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICBzeW5jVGltZWxpbmVNb2RlXG4gIH07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKHN0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgcmV0dXJuIGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIobmV3U3RhdGUsIGZpbHRlcklkeCk7XG59XG5cbi8qKlxuICogVXBkYXRlIHN0YXRlIG9mIHRoZSBsb2FkaW5nIGluZGljYXRvci5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgdmlzU3RhdGVcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBQYXlsb2FkIHdpdGggY2hhbmdlIG9mIG51bWJlciBvZiBhY3RpdmUgbG9hZGluZyBhY3Rpb25zLlxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7cGF5bG9hZDoge2NoYW5nZX19OiB7cGF5bG9hZDogU2V0TG9hZGluZ0luZGljYXRvclBheWxvYWR9XG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGxldCB7bG9hZGluZ0luZGljYXRvclZhbHVlfSA9IHN0YXRlO1xuICBpZiAoIWxvYWRpbmdJbmRpY2F0b3JWYWx1ZSkge1xuICAgIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZSA9IDA7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZTogTWF0aC5tYXgobG9hZGluZ0luZGljYXRvclZhbHVlICsgY2hhbmdlLCAwKVxuICB9O1xufTtcblxuZnVuY3Rpb24gYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBmaWx0ZXJJZHg6IG51bWJlcik6IFMge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF07XG4gIGlmICgoZmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcikuc3luY2VkV2l0aExheWVyVGltZWxpbmUpIHtcbiAgICBjb25zdCB0aW1lbGluZVZhbHVlID0gZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIoZmlsdGVyKTtcbiAgICBjb25zdCB2YWx1ZSA9IHN0YXRlLmFuaW1hdGlvbkNvbmZpZy50aW1lU3RlcHNcbiAgICAgID8gc25hcFRvTWFya3ModGltZWxpbmVWYWx1ZSwgc3RhdGUuYW5pbWF0aW9uQ29uZmlnLnRpbWVTdGVwcylcbiAgICAgIDogdGltZWxpbmVWYWx1ZTtcbiAgICByZXR1cm4gc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlcihzdGF0ZSwge3ZhbHVlfSk7XG4gIH1cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5mdW5jdGlvbiBnZXRUaW1lbGluZVZhbHVlRnJvbUZpbHRlcihmaWx0ZXIpIHtcbiAgcmV0dXJuIGZpbHRlci52YWx1ZVtmaWx0ZXIuc3luY1RpbWVsaW5lTW9kZV07XG59XG5cbmZ1bmN0aW9uIGdldFN5bmNBbmltYXRpb25Nb2RlKGZpbHRlcjogVGltZVJhbmdlRmlsdGVyKSB7XG4gIGlmIChmaWx0ZXIuYW5pbWF0aW9uV2luZG93ID09PSBBTklNQVRJT05fV0lORE9XLmZyZWUpIHtcbiAgICByZXR1cm4gZmlsdGVyLnN5bmNUaW1lbGluZU1vZGUgPz8gU1lOQ19USU1FTElORV9NT0RFUy5lbmQ7XG4gIH1cblxuICByZXR1cm4gU1lOQ19USU1FTElORV9NT0RFUy5lbmQ7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3luY0FuaW1hdGlvbk1vZGUoZmlsdGVyOiBUaW1lUmFuZ2VGaWx0ZXIsIG5ld01vZGU6IG51bWJlcikge1xuICByZXR1cm4gIShcbiAgICBmaWx0ZXIuYW5pbWF0aW9uV2luZG93ICE9PSBBTklNQVRJT05fV0lORE9XLmZyZWUgJiYgbmV3TW9kZSA9PT0gU1lOQ19USU1FTElORV9NT0RFUy5zdGFydFxuICApO1xufVxuXG5mdW5jdGlvbiBhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwoc3RhdGUsIGZpbHRlcikge1xuICBjb25zdCBpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzID0gZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyhzdGF0ZS5sYXllcnMpO1xuXG4gIGxldCBpbnRlcnZhbDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGlmIChpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgaW50ZXJ2YWxJbmRleCA9IGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMucmVkdWNlKChjdXJyZW50SW5kZXgsIGwpID0+IHtcbiAgICAgIGlmIChsLm1ldGEudGFyZ2V0VGltZUludGVydmFsKSB7XG4gICAgICAgIGNvbnN0IG5ld0luZGV4ID0gVElNRV9JTlRFUlZBTFNfT1JERVJFRC5maW5kSW5kZXgoaSA9PiBpID09PSBsLm1ldGEudGFyZ2V0VGltZUludGVydmFsKTtcbiAgICAgICAgcmV0dXJuIG5ld0luZGV4ID4gLTEgJiYgbmV3SW5kZXggPCBjdXJyZW50SW5kZXggPyBuZXdJbmRleCA6IGN1cnJlbnRJbmRleDtcbiAgICAgIH1cbiAgICB9LCBUSU1FX0lOVEVSVkFMU19PUkRFUkVELmxlbmd0aCAtIDEpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCBoZXhUaWxlSW50ZXJ2YWwgPSBUSU1FX0lOVEVSVkFMU19PUkRFUkVEW2ludGVydmFsSW5kZXhdO1xuICAgIGludGVydmFsID0gTGF5ZXJUb0ZpbHRlclRpbWVJbnRlcnZhbFtoZXhUaWxlSW50ZXJ2YWxdO1xuICB9XG5cbiAgaWYgKCFpbnRlcnZhbCkge1xuICAgIHJldHVybiBmaWx0ZXI7XG4gIH1cblxuICAvLyBhZGp1c3QgZmlsdGVyXG4gIGNvbnN0IHRpbWVGb3JtYXQgPSBnZXREZWZhdWx0VGltZUZvcm1hdChpbnRlcnZhbCk7XG4gIGNvbnN0IHVwZGF0ZWRQbG90VHlwZSA9IHsuLi5maWx0ZXIucGxvdFR5cGUsIGludGVydmFsLCB0aW1lRm9ybWF0fTtcbiAgY29uc3QgbmV3RmlsdGVyID0gdXBkYXRlVGltZUZpbHRlclBsb3RUeXBlKGZpbHRlciwgdXBkYXRlZFBsb3RUeXBlLCBzdGF0ZS5kYXRhc2V0cyk7XG4gIHJldHVybiBhZGp1c3RWYWx1ZVRvQW5pbWF0aW9uV2luZG93KHN0YXRlLCBuZXdGaWx0ZXIpO1xufVxuXG4vLyBGaW5kIGRhdGFJZCBmcm9tIGEgc2F2ZWQgdmlzU3RhdGUgcHJvcGVydHk6XG4vLyBsYXllcnMsIGZpbHRlcnMsIGludGVyYWN0aW9ucywgbGF5ZXJCbGVuZGluZywgb3ZlcmxheUJsZW5kaW5nLCBzcGxpdE1hcHMsIGFuaW1hdGlvbkNvbmZpZywgZWRpdG9yXG4vLyByZXBsYWNlIGl0IHdpdGggYW5vdGhlciBkYXRhSWRcbmZ1bmN0aW9uIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyh2YWx1ZTogYW55LCBkYXRhSWQ6IHN0cmluZywgZGF0YUlkVG9SZXBsYWNlOiBzdHJpbmcpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gZm9yIGxheWVycywgZmlsdGVycywgY2FsbCBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMgb24gZWFjaCBpdGVtIGluIGFycmF5XG4gICAgY29uc3QgcmVwbGFjZWQgPSB2YWx1ZVxuICAgICAgLm1hcCh2ID0+IGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyh2LCBkYXRhSWQsIGRhdGFJZFRvUmVwbGFjZSkpXG4gICAgICAuZmlsdGVyKGQgPT4gZCk7XG4gICAgcmV0dXJuIHJlcGxhY2VkLmxlbmd0aCA/IHJlcGxhY2VkIDogbnVsbDtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlLmRhdGFJZCA9PT0gJ3N0cmluZycgJiYgdmFsdWUuZGF0YUlkID09PSBkYXRhSWQpIHtcbiAgICAvLyBvdGhlcnNcbiAgICByZXR1cm4ge1xuICAgICAgLi4udmFsdWUsXG4gICAgICBkYXRhSWQ6IGRhdGFJZFRvUmVwbGFjZVxuICAgIH07XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZS5kYXRhSWQpICYmIHZhbHVlLmRhdGFJZC5pbmNsdWRlcyhkYXRhSWQpKSB7XG4gICAgLy8gZmlsdGVyXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgZGF0YUlkOiB2YWx1ZS5kYXRhSWQubWFwKGQgPT4gKGQgPT09IGRhdGFJZCA/IGRhdGFJZFRvUmVwbGFjZSA6IGQpKVxuICAgIH07XG4gIH0gZWxzZSBpZiAodmFsdWUuY29uZmlnPy5kYXRhSWQgJiYgdmFsdWUuY29uZmlnPy5kYXRhSWQgPT09IGRhdGFJZCkge1xuICAgIC8vIGxheWVyXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIC4uLnZhbHVlLmNvbmZpZyxcbiAgICAgICAgZGF0YUlkOiBkYXRhSWRUb1JlcGxhY2VcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2UgaWYgKGlzT2JqZWN0KHZhbHVlKSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGRhdGFJZCkpIHtcbiAgICAvLyBmb3IgdmFsdWUgc2F2ZWQgYXMge1tkYXRhSWRdOiB7Li4ufX1cbiAgICByZXR1cm4ge1tkYXRhSWRUb1JlcGxhY2VdOiB2YWx1ZVtkYXRhSWRdfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vLyBGaW5kIGRhdGFzZXRJZHMgZGVyaXZlZCBhIHNhdmVkIHZpc1N0YXRlIFByb3BlcnR5O1xuZnVuY3Rpb24gZmluZENoaWxkRGF0YXNldElkcyh2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBmb3IgbGF5ZXJzLCBmaWx0ZXJzLCBjYWxsIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyBvbiBlYWNoIGl0ZW0gaW4gYXJyYXlcbiAgICBjb25zdCBjaGlsZERhdGFJZHMgPSB2YWx1ZS5tYXAoZmluZENoaWxkRGF0YXNldElkcykuZmlsdGVyKGQgPT4gZCk7XG4gICAgcmV0dXJuIGNoaWxkRGF0YUlkcy5sZW5ndGggPyBjaGlsZERhdGFJZHMgOiBudWxsO1xuICB9XG5cbiAgLy8gY2hpbGQgZGF0YSBpZCB1c3VhbGx5IHN0b3JlcyBpbiB0aGUgZGVyaXZlZCBkYXRhc2V0IGluZm9cbiAgcmV0dXJuIHZhbHVlPy5uZXdEYXRhc2V0Py5pbmZvLmlkIHx8IG51bGw7XG59XG5cbi8vIG1vdmVkIHVubWVyZ2VkIGxheWVycywgZmlsdGVycywgaW50ZXJhY3Rpb25zXG5mdW5jdGlvbiBtb3ZlVmFsdWVUb0JlTWVyZ2VkKHN0YXRlLCBwcm9wVmFsdWVzLCB7cHJvcCwgdG9NZXJnZVByb3AsIHNhdmVVbm1lcmdlZH0pIHtcbiAgLy8gcmVtb3ZlIHByb3AgdmFsdWUgZnJvbSBzdGF0ZVxuICAvLyBUT0RPOiBzaG91bGQgd2UgYWRkIHJlbW92ZSB1cGRhdGVyIHRvIG1lcmdlciBhcyB3ZWxsP1xuICBpZiAoIXByb3BWYWx1ZXMpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qgc3RhdGVSZW1vdmVkID1cbiAgICBwcm9wID09PSAnbGF5ZXJzJ1xuICAgICAgPyBwcm9wVmFsdWVzLnJlZHVjZSgoYWNjdSwgcHJvcFZhbHVlKSA9PiByZW1vdmVMYXllclVwZGF0ZXIoYWNjdSwge2lkOiBwcm9wVmFsdWUuaWR9KSwgc3RhdGUpXG4gICAgICA6IEFycmF5LmlzQXJyYXkoc3RhdGVbcHJvcF0pXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBbcHJvcF06IHN0YXRlW3Byb3BdLmZpbHRlcihwID0+ICFwcm9wVmFsdWVzLmZpbmQocHJvcFZhbHVlID0+IHAuaWQgPT09IHByb3BWYWx1ZS5pZCkpXG4gICAgICAgIH1cbiAgICAgIDogLy8gaWYgbm90IGFycmF5LCB3ZSB3b24ndCByZW1vdmUgaXQsIHJlbW92ZSBkYXRhc2V0IHNob3VsZCBoYW5kbGUgaXRcbiAgICAgICAgc3RhdGU7XG5cbiAgLy8gbW92ZSB0byBzdGF0ZVRvQmVNZXJnZWRcbiAgY29uc3QgdG9CZU1lcmdlZCA9IHtcbiAgICBbdG9NZXJnZVByb3BdOiBzYXZlVW5tZXJnZWRcbiAgICAgID8gLy8gY2FsbCBtZXJnZSBzYXZlVW5tZXJnZWQgbWV0aG9kXG4gICAgICAgIHNhdmVVbm1lcmdlZChzdGF0ZVJlbW92ZWQsIHByb3BWYWx1ZXMpXG4gICAgICA6IC8vIGlmIHRvTWVyZ2VQcm9wIGlzIGFyYWF5LCBhcHBlbmQgdG8gaXRcbiAgICAgIEFycmF5LmlzQXJyYXkoc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSlcbiAgICAgID8gWy4uLnN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0sIC4uLnByb3BWYWx1ZXNdXG4gICAgICA6IC8vIHNhdmUgcHJvcFZhbHVlcyB0byB0b01lcmdlXG4gICAgICBpc09iamVjdChzdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSxcbiAgICAgICAgICAuLi5wcm9wVmFsdWVzXG4gICAgICAgIH1cbiAgICAgIDogc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGVSZW1vdmVkLFxuICAgIC4uLnRvQmVNZXJnZWRcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZURhdGFzZXRBbmREZXBzPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YUlkVG9Vc2U6IHN0cmluZ1xuKTogVCB7XG4gIHJldHVybiBjb21wb3NlXzxUPihbXG4gICAgYXBwbHlfKHJlcGxhY2VEYXRhc2V0RGVwc0luU3RhdGUsIHtkYXRhSWQsIGRhdGFJZFRvVXNlfSksXG4gICAgYXBwbHlfKHJlbW92ZURhdGFzZXRVcGRhdGVyLCB7ZGF0YUlkfSlcbiAgXSkoc3RhdGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2U8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhSWRUb1VzZTogc3RyaW5nXG4pOiBUIHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoc3RhdGUsIHN0YXRlLnNjaGVtYSk7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IHJlcGxhY2VEYXRhc2V0QW5kRGVwcyhzdGF0ZSwgZGF0YUlkLCBkYXRhSWRUb1VzZSk7XG4gIC8vIG1ha2UgYSBjb3B5IG9mIGxheWVyT3JkZXIsIGJlY2F1c2UgbGF5ZXIgaWQgd2lsbCBiZSByZW1vdmVkIGZyb20gaXQgYnkgY2FsbGluZyByZW1vdmVMYXllclVwZGF0ZXJcbiAgY29uc3QgcHJlc2VydmVMYXllck9yZGVyID0gWy4uLnN0YXRlLmxheWVyT3JkZXJdO1xuXG4gIC8vIHByZXNlcnZlIGRhdGFzZXQgb3JkZXJcbiAgbmV4dFN0YXRlLnByZXNlcnZlRGF0YXNldE9yZGVyID0gT2JqZWN0LmtleXMoc3RhdGUuZGF0YXNldHMpLm1hcChkID0+XG4gICAgZCA9PT0gZGF0YUlkID8gZGF0YUlkVG9Vc2UgOiBkXG4gICk7XG5cbiAgLy8gcHJlc2VydmVMYXllck9yZGVyXG4gIGlmIChuZXh0U3RhdGUubGF5ZXJUb0JlTWVyZ2VkPy5sZW5ndGgpIHtcbiAgICAvLyBjb3B5IHNwbGl0IG1hcHMgdG8gYmUgbWVyZ2VkLCBiZWNhdXNlIGl0IHdpbGwgYmUgcmVzZXQgaW4gcmVtb3ZlIGxheWVyXG4gICAgbmV4dFN0YXRlLnNwbGl0TWFwc1RvQmVNZXJnZWQgPSBzZXJpYWxpemVkU3RhdGU/LnNwbGl0TWFwcyA/PyBbXTtcbiAgICBuZXh0U3RhdGUubGF5ZXJPcmRlciA9IFsuLi5wcmVzZXJ2ZUxheWVyT3JkZXJdO1xuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VEYXRhc2V0RGVwc0luU3RhdGU8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIHtkYXRhSWQsIGRhdGFJZFRvVXNlfToge2RhdGFJZDogc3RyaW5nOyBkYXRhSWRUb1VzZTogc3RyaW5nfVxuKTogVCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKHN0YXRlLCBzdGF0ZS5zY2hlbWEpO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHN0YXRlLm1lcmdlcnMucmVkdWNlKFxuICAgIChcbiAgICAgIGFjY3VTdGF0ZSxcbiAgICAgIHtwcm9wLCB0b01lcmdlUHJvcCwgcmVwbGFjZVBhcmVudERhdGFzZXRJZHMsIGdldENoaWxkRGF0YXNldElkcywgc2F2ZVVubWVyZ2VkLCBwcmVzZXJ2ZU9yZGVyfVxuICAgICkgPT4ge1xuICAgICAgLy8gZ2V0IGRhdGFzZXQgaWRzIHRoYXQgYXJlIGRlcGVuZHMgb24gdGhpcyBkYXRhc2V0XG4gICAgICBjb25zdCBwcm9wcyA9IHRvQXJyYXkocHJvcCk7XG4gICAgICBjb25zdCB0b01lcmdlUHJvcHMgPSB0b0FycmF5KHRvTWVyZ2VQcm9wKTtcbiAgICAgIGNvbnN0IHNhdmVkUHJvcHMgPSBzZXJpYWxpemVkU3RhdGUgPyBwcm9wcy5tYXAocCA9PiBzZXJpYWxpemVkU3RhdGVbcF0pIDogW107XG5cbiAgICAgIGxldCByZXBsYWNlZFN0YXRlID0gYWNjdVN0YXRlO1xuICAgICAgc2F2ZWRQcm9wcy5mb3JFYWNoKChwcm9wVmFsdWUsIGkpID0+IHtcbiAgICAgICAgY29uc3QgbWVyZ2VyT3B0aW9ucyA9IHtcbiAgICAgICAgICBwcm9wOiBwcm9wc1tpXSxcbiAgICAgICAgICB0b01lcmdlUHJvcDogdG9NZXJnZVByb3BzW2ldLFxuICAgICAgICAgIGdldENoaWxkRGF0YXNldElkcyxcbiAgICAgICAgICBzYXZlVW5tZXJnZWRcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXBsYWNlZEl0ZW0gPVxuICAgICAgICAgIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzPy4ocHJvcFZhbHVlLCBkYXRhSWQsIGRhdGFJZFRvVXNlKSB8fFxuICAgICAgICAgIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyhwcm9wVmFsdWUsIGRhdGFJZCwgZGF0YUlkVG9Vc2UpO1xuICAgICAgICByZXBsYWNlZFN0YXRlID0gcmVwbGFjZWRJdGVtXG4gICAgICAgICAgPyByZXBsYWNlUHJvcFZhbHVlSW5TdGF0ZShyZXBsYWNlZFN0YXRlLCByZXBsYWNlZEl0ZW0sIG1lcmdlck9wdGlvbnMpXG4gICAgICAgICAgOiByZXBsYWNlZFN0YXRlO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBtZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICByZXBsYWNlZFN0YXRlW21lcmdlck9wdGlvbnMudG9NZXJnZVByb3BdPy5sZW5ndGggJiZcbiAgICAgICAgICBwcmVzZXJ2ZU9yZGVyXG4gICAgICAgICkge1xuICAgICAgICAgIHJlcGxhY2VkU3RhdGVbcHJlc2VydmVPcmRlcl0gPSBwcm9wVmFsdWUubWFwKGl0ZW0gPT4gaXRlbS5pZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVwbGFjZWRTdGF0ZTtcbiAgICB9LFxuICAgIHN0YXRlXG4gICk7XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZVByb3BWYWx1ZUluU3RhdGUoXG4gIHN0YXRlLFxuICByZXBsYWNlZEl0ZW0sXG4gIHtwcm9wLCB0b01lcmdlUHJvcCwgZ2V0Q2hpbGREYXRhc2V0SWRzLCBzYXZlVW5tZXJnZWR9XG4pIHtcbiAgLy8gcHJvcCBpcyBkZXBlbmRzIG9uIHRoZSBkYXRhc2V0IHRvIGJlIHJlcGxhY2VkXG4gIC8vIHJlbW92ZSBwcm9wIGZyb20gc3RhdGUsIGFuZCBtb3ZlIGl0IHRvIHRvQmVNZXJnZWRcbiAgbGV0IG5leHRTdGF0ZSA9IG1vdmVWYWx1ZVRvQmVNZXJnZWQoc3RhdGUsIHJlcGxhY2VkSXRlbSwge3Byb3AsIHRvTWVyZ2VQcm9wLCBzYXZlVW5tZXJnZWR9KTtcbiAgY29uc3QgY2hpbGREYXRhSWRzID0gZ2V0Q2hpbGREYXRhc2V0SWRzPy4ocmVwbGFjZWRJdGVtKSB8fCBmaW5kQ2hpbGREYXRhc2V0SWRzKHJlcGxhY2VkSXRlbSk7XG5cbiAgaWYgKGNoaWxkRGF0YUlkcykge1xuICAgIG5leHRTdGF0ZSA9IHRvQXJyYXkoY2hpbGREYXRhSWRzKS5yZWR1Y2UoKGFjY3UsIGNoaWxkRGF0YUlkKSA9PiB7XG4gICAgICAvLyBzaG91bGRuJ3QgbmVlZCB0byBjaGFuZ2UgY2hpbGQgZGF0YXNldCBpZCxcbiAgICAgIC8vIGJ1dCBzdGlsbCBuZWVkIHRvIG1vdmUgb3V0IG9mIHN0YXRlIGFuZCBtZXJnZSBiYWNrIGluXG4gICAgICByZXR1cm4gcmVwbGFjZURhdGFzZXRBbmREZXBzKGFjY3UsIGNoaWxkRGF0YUlkLCBjaGlsZERhdGFJZCk7XG4gICAgfSwgbmV4dFN0YXRlKTtcbiAgfVxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsS0FBQSxHQUFBQyxPQUFBO0FBRUEsSUFBQUMsZ0JBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLFVBQUEsR0FBQUQsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFJLE9BQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFVBQUEsR0FBQUgsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFNLElBQUEsR0FBQUosc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFPLFFBQUEsR0FBQUwsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFRLEtBQUEsR0FBQU4sc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFTLEtBQUEsR0FBQVAsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFVLElBQUEsR0FBQVIsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFXLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQVosT0FBQTtBQUVBLElBQUFhLE9BQUEsR0FBQWIsT0FBQTtBQVFBLElBQUFjLFFBQUEsR0FBQWQsT0FBQTtBQTJCQSxJQUFBZSxNQUFBLEdBQUFmLE9BQUE7QUE2QkEsSUFBQWdCLFlBQUEsR0FBQWhCLE9BQUE7QUFFQSxJQUFBaUIsVUFBQSxHQUFBakIsT0FBQTtBQTJCQSxJQUFBa0IsT0FBQSxHQUFBbEIsT0FBQTtBQUNBLElBQUFtQixnQkFBQSxHQUFBbkIsT0FBQTtBQVVBLElBQUFvQixjQUFBLEdBQUFwQixPQUFBO0FBQ0EsSUFBQXFCLGVBQUEsR0FBQXJCLE9BQUE7QUFVQSxJQUFBc0IsUUFBQSxHQUFBcEIsc0JBQUEsQ0FBQUYsT0FBQTtBQWdCQSxJQUFBdUIsTUFBQSxHQUFBdkIsT0FBQTtBQVNBLElBQUF3QixpQkFBQSxHQUFBeEIsT0FBQTtBQUNBLElBQUF5QixXQUFBLEdBQUF6QixPQUFBO0FBOEJBLElBQUEwQixRQUFBLEdBQUExQixPQUFBO0FBR0EsSUFBQTJCLFVBQUEsR0FBQTNCLE9BQUE7QUFBMkMsSUFBQTRCLFNBQUE7RUFBQUMsVUFBQTtBQUFBLFNBQUFqQix3QkFBQWtCLENBQUEsRUFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFwQix1QkFBQSxZQUFBQSx3QkFBQWtCLENBQUEsRUFBQUMsQ0FBQSxTQUFBQSxDQUFBLElBQUFELENBQUEsSUFBQUEsQ0FBQSxDQUFBSyxVQUFBLFNBQUFMLENBQUEsTUFBQU0sQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsS0FBQUMsU0FBQSxtQkFBQVQsQ0FBQSxpQkFBQUEsQ0FBQSxnQkFBQVUsUUFBQSxDQUFBVixDQUFBLDBCQUFBQSxDQUFBLFNBQUFRLENBQUEsTUFBQUYsQ0FBQSxHQUFBTCxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxRQUFBRyxDQUFBLENBQUFLLEdBQUEsQ0FBQVgsQ0FBQSxVQUFBTSxDQUFBLENBQUFNLEdBQUEsQ0FBQVosQ0FBQSxHQUFBTSxDQUFBLENBQUFPLEdBQUEsQ0FBQWIsQ0FBQSxFQUFBUSxDQUFBLGNBQUFNLEVBQUEsSUFBQWQsQ0FBQSxnQkFBQWMsRUFBQSxPQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQWhCLENBQUEsRUFBQWMsRUFBQSxPQUFBUCxDQUFBLElBQUFELENBQUEsR0FBQVcsTUFBQSxDQUFBQyxjQUFBLEtBQUFELE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQW5CLENBQUEsRUFBQWMsRUFBQSxPQUFBUCxDQUFBLENBQUFLLEdBQUEsSUFBQUwsQ0FBQSxDQUFBTSxHQUFBLElBQUFQLENBQUEsQ0FBQUUsQ0FBQSxFQUFBTSxFQUFBLEVBQUFQLENBQUEsSUFBQUMsQ0FBQSxDQUFBTSxFQUFBLElBQUFkLENBQUEsQ0FBQWMsRUFBQSxXQUFBTixDQUFBLEtBQUFSLENBQUEsRUFBQUMsQ0FBQTtBQUFBLFNBQUFtQixlQUFBbkIsQ0FBQSxRQUFBTSxDQUFBLEdBQUFjLFlBQUEsQ0FBQXBCLENBQUEsZ0NBQUFTLFFBQUEsQ0FBQUgsQ0FBQSxJQUFBQSxDQUFBLEdBQUFBLENBQUE7QUFBQSxTQUFBYyxhQUFBcEIsQ0FBQSxFQUFBRSxDQUFBLG9CQUFBTyxRQUFBLENBQUFULENBQUEsTUFBQUEsQ0FBQSxTQUFBQSxDQUFBLE1BQUFELENBQUEsR0FBQUMsQ0FBQSxDQUFBcUIsTUFBQSxDQUFBQyxXQUFBLGtCQUFBdkIsQ0FBQSxRQUFBTyxDQUFBLEdBQUFQLENBQUEsQ0FBQWdCLElBQUEsQ0FBQWYsQ0FBQSxFQUFBRSxDQUFBLGdDQUFBTyxRQUFBLENBQUFILENBQUEsVUFBQUEsQ0FBQSxZQUFBaUIsU0FBQSx5RUFBQXJCLENBQUEsR0FBQXNCLE1BQUEsR0FBQUMsTUFBQSxFQUFBekIsQ0FBQTtBQUFBLFNBQUEwQiwyQkFBQXhCLENBQUEsRUFBQUgsQ0FBQSxRQUFBQyxDQUFBLHlCQUFBcUIsTUFBQSxJQUFBbkIsQ0FBQSxDQUFBbUIsTUFBQSxDQUFBTSxRQUFBLEtBQUF6QixDQUFBLHFCQUFBRixDQUFBLFFBQUE0QixLQUFBLENBQUFDLE9BQUEsQ0FBQTNCLENBQUEsTUFBQUYsQ0FBQSxHQUFBOEIsMkJBQUEsQ0FBQTVCLENBQUEsTUFBQUgsQ0FBQSxJQUFBRyxDQUFBLHVCQUFBQSxDQUFBLENBQUE2QixNQUFBLElBQUEvQixDQUFBLEtBQUFFLENBQUEsR0FBQUYsQ0FBQSxPQUFBZ0MsRUFBQSxNQUFBQyxDQUFBLFlBQUFBLEVBQUEsZUFBQUMsQ0FBQSxFQUFBRCxDQUFBLEVBQUE5QixDQUFBLFdBQUFBLEVBQUEsV0FBQTZCLEVBQUEsSUFBQTlCLENBQUEsQ0FBQTZCLE1BQUEsS0FBQUksSUFBQSxXQUFBQSxJQUFBLE1BQUFDLEtBQUEsRUFBQWxDLENBQUEsQ0FBQThCLEVBQUEsVUFBQWpDLENBQUEsV0FBQUEsRUFBQUcsQ0FBQSxVQUFBQSxDQUFBLEtBQUFLLENBQUEsRUFBQTBCLENBQUEsZ0JBQUFWLFNBQUEsaUpBQUFsQixDQUFBLEVBQUFnQyxDQUFBLE9BQUFDLENBQUEsZ0JBQUFKLENBQUEsV0FBQUEsRUFBQSxJQUFBbEMsQ0FBQSxHQUFBQSxDQUFBLENBQUFlLElBQUEsQ0FBQWIsQ0FBQSxNQUFBQyxDQUFBLFdBQUFBLEVBQUEsUUFBQUQsQ0FBQSxHQUFBRixDQUFBLENBQUF1QyxJQUFBLFdBQUFGLENBQUEsR0FBQW5DLENBQUEsQ0FBQWlDLElBQUEsRUFBQWpDLENBQUEsS0FBQUgsQ0FBQSxXQUFBQSxFQUFBRyxDQUFBLElBQUFvQyxDQUFBLE9BQUFqQyxDQUFBLEdBQUFILENBQUEsS0FBQUssQ0FBQSxXQUFBQSxFQUFBLFVBQUE4QixDQUFBLFlBQUFyQyxDQUFBLGNBQUFBLENBQUEsOEJBQUFzQyxDQUFBLFFBQUFqQyxDQUFBO0FBQUEsU0FBQXlCLDRCQUFBNUIsQ0FBQSxFQUFBbUMsQ0FBQSxRQUFBbkMsQ0FBQSwyQkFBQUEsQ0FBQSxTQUFBc0MsaUJBQUEsQ0FBQXRDLENBQUEsRUFBQW1DLENBQUEsT0FBQXJDLENBQUEsTUFBQXlDLFFBQUEsQ0FBQTFCLElBQUEsQ0FBQWIsQ0FBQSxFQUFBd0MsS0FBQSw2QkFBQTFDLENBQUEsSUFBQUUsQ0FBQSxDQUFBeUMsV0FBQSxLQUFBM0MsQ0FBQSxHQUFBRSxDQUFBLENBQUF5QyxXQUFBLENBQUFDLElBQUEsYUFBQTVDLENBQUEsY0FBQUEsQ0FBQSxHQUFBNEIsS0FBQSxDQUFBaUIsSUFBQSxDQUFBM0MsQ0FBQSxvQkFBQUYsQ0FBQSwrQ0FBQThDLElBQUEsQ0FBQTlDLENBQUEsSUFBQXdDLGlCQUFBLENBQUF0QyxDQUFBLEVBQUFtQyxDQUFBO0FBQUEsU0FBQUcsa0JBQUF0QyxDQUFBLEVBQUFtQyxDQUFBLGFBQUFBLENBQUEsSUFBQUEsQ0FBQSxHQUFBbkMsQ0FBQSxDQUFBNkIsTUFBQSxNQUFBTSxDQUFBLEdBQUFuQyxDQUFBLENBQUE2QixNQUFBLFlBQUFoQyxDQUFBLE1BQUFJLENBQUEsR0FBQXlCLEtBQUEsQ0FBQVMsQ0FBQSxHQUFBdEMsQ0FBQSxHQUFBc0MsQ0FBQSxFQUFBdEMsQ0FBQSxJQUFBSSxDQUFBLENBQUFKLENBQUEsSUFBQUcsQ0FBQSxDQUFBSCxDQUFBLFVBQUFJLENBQUE7QUFBQSxTQUFBNEMsUUFBQWhELENBQUEsRUFBQUcsQ0FBQSxRQUFBRixDQUFBLEdBQUFnQixNQUFBLENBQUFnQyxJQUFBLENBQUFqRCxDQUFBLE9BQUFpQixNQUFBLENBQUFpQyxxQkFBQSxRQUFBNUMsQ0FBQSxHQUFBVyxNQUFBLENBQUFpQyxxQkFBQSxDQUFBbEQsQ0FBQSxHQUFBRyxDQUFBLEtBQUFHLENBQUEsR0FBQUEsQ0FBQSxDQUFBNkMsTUFBQSxXQUFBaEQsQ0FBQSxXQUFBYyxNQUFBLENBQUFFLHdCQUFBLENBQUFuQixDQUFBLEVBQUFHLENBQUEsRUFBQWlELFVBQUEsT0FBQW5ELENBQUEsQ0FBQW9ELElBQUEsQ0FBQUMsS0FBQSxDQUFBckQsQ0FBQSxFQUFBSyxDQUFBLFlBQUFMLENBQUE7QUFBQSxTQUFBc0QsY0FBQXZELENBQUEsYUFBQUcsQ0FBQSxNQUFBQSxDQUFBLEdBQUFxRCxTQUFBLENBQUF4QixNQUFBLEVBQUE3QixDQUFBLFVBQUFGLENBQUEsV0FBQXVELFNBQUEsQ0FBQXJELENBQUEsSUFBQXFELFNBQUEsQ0FBQXJELENBQUEsUUFBQUEsQ0FBQSxPQUFBNkMsT0FBQSxDQUFBL0IsTUFBQSxDQUFBaEIsQ0FBQSxPQUFBd0QsT0FBQSxXQUFBdEQsQ0FBQSxRQUFBdUQsZ0JBQUEsYUFBQTFELENBQUEsRUFBQUcsQ0FBQSxFQUFBRixDQUFBLENBQUFFLENBQUEsU0FBQWMsTUFBQSxDQUFBMEMseUJBQUEsR0FBQTFDLE1BQUEsQ0FBQTJDLGdCQUFBLENBQUE1RCxDQUFBLEVBQUFpQixNQUFBLENBQUEwQyx5QkFBQSxDQUFBMUQsQ0FBQSxLQUFBK0MsT0FBQSxDQUFBL0IsTUFBQSxDQUFBaEIsQ0FBQSxHQUFBd0QsT0FBQSxXQUFBdEQsQ0FBQSxJQUFBYyxNQUFBLENBQUFDLGNBQUEsQ0FBQWxCLENBQUEsRUFBQUcsQ0FBQSxFQUFBYyxNQUFBLENBQUFFLHdCQUFBLENBQUFsQixDQUFBLEVBQUFFLENBQUEsaUJBQUFILENBQUEsSUE5TDNDO0FBQ0E7QUFjQTtBQVFBO0FBMkJBO0FBK0JBO0FBK0dBO0FBQ0E7QUFDQSxJQUFBNkQsNEJBQXFCLEVBQUMsQ0FBQzs7QUFFdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQU1DLGdCQUFnQixHQUFHLElBQUk7QUFDN0I7O0FBRU8sSUFBTUMsd0JBQTJDLEdBQUFDLE9BQUEsQ0FBQUQsd0JBQUEsR0FBRztFQUN6REUsT0FBTyxFQUFFO0lBQ1BDLEVBQUUsRUFBRSxTQUFTO0lBQ2JDLEtBQUssRUFBRSxzQkFBc0I7SUFDN0JDLE9BQU8sRUFBRSxJQUFJO0lBQ2JDLE1BQU0sRUFBRTtNQUNOQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO01BQ2hCQyxXQUFXLEVBQUUsS0FBSztNQUNsQkMsV0FBVyxFQUFFQyx3QkFBYSxDQUFDQztJQUM3QjtFQUNGLENBQUM7RUFDREMsUUFBUSxFQUFFO0lBQ1JULEVBQUUsRUFBRSxVQUFVO0lBQ2RDLEtBQUssRUFBRSx1QkFBdUI7SUFDOUJDLE9BQU8sRUFBRSxLQUFLO0lBQ2RRLFFBQVEsRUFBRSxJQUFJO0lBQ2RQLE1BQU0sRUFBRTtNQUNOUSxXQUFXLEVBQUU7SUFDZjtFQUNGLENBQUM7RUFDREMsS0FBSyxFQUFFO0lBQ0xaLEVBQUUsRUFBRSxPQUFPO0lBQ1hDLEtBQUssRUFBRSxvQkFBb0I7SUFDM0JDLE9BQU8sRUFBRSxLQUFLO0lBQ2RDLE1BQU0sRUFBRTtNQUNOO01BQ0FVLElBQUksRUFBRTtJQUNSO0VBQ0YsQ0FBQztFQUNEQyxVQUFVLEVBQUU7SUFDVmQsRUFBRSxFQUFFLFlBQVk7SUFDaEJDLEtBQUssRUFBRSx5QkFBeUI7SUFDaENDLE9BQU8sRUFBRSxLQUFLO0lBQ2RRLFFBQVEsRUFBRTtFQUNaO0FBQ0YsQ0FBQztBQUVNLElBQU1LLHdCQUF5QyxHQUFBakIsT0FBQSxDQUFBaUIsd0JBQUEsR0FBRztFQUN2REMsTUFBTSxFQUFFLElBQUk7RUFDWkMsV0FBVyxFQUFFLElBQUk7RUFDakJDLEtBQUssRUFBRSxDQUFDO0VBQ1JDLFdBQVcsRUFBRSxLQUFLO0VBQ2xCQyxTQUFTLEVBQUUsSUFBSTtFQUNmQyxVQUFVLEVBQUUsSUFBSTtFQUNoQkMsUUFBUSxFQUFFLElBQUk7RUFDZEMsaUJBQWlCLEVBQUUsSUFBSTtFQUN2QkMsV0FBVyxFQUFFLEtBQUs7RUFDbEJDLFFBQVEsRUFBRTtBQUNaLENBQUM7QUFFTSxJQUFNQyxjQUFzQixHQUFBNUIsT0FBQSxDQUFBNEIsY0FBQSxHQUFHO0VBQ3BDQyxJQUFJLEVBQUVDLHVCQUFZLENBQUNDLFlBQVk7RUFDL0JDLFFBQVEsRUFBRSxFQUFFO0VBQ1pDLGVBQWUsRUFBRSxJQUFJO0VBQ3JCQyxPQUFPLEVBQUU7QUFDWCxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1DLGlCQUEyQixHQUFBbkMsT0FBQSxDQUFBbUMsaUJBQUEsR0FBRztFQUN6QztFQUNBQyxPQUFPLEVBQUU7SUFDUEMsS0FBSyxFQUFFLEVBQUU7SUFDVEMsV0FBVyxFQUFFO0VBQ2YsQ0FBQztFQUNEO0VBQ0FDLE1BQU0sRUFBRSxFQUFFO0VBQ1ZDLFNBQVMsRUFBRSxFQUFFO0VBQ2JDLGVBQWUsRUFBRSxFQUFFO0VBQ25CQyxVQUFVLEVBQUUsRUFBRTtFQUNkQyxvQkFBb0IsRUFBRSxJQUFJO0VBRTFCO0VBQ0FDLE9BQU8sRUFBRSxFQUFFO0VBQ1hDLGdCQUFnQixFQUFFLEVBQUU7RUFFcEI7RUFDQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztFQUNaQyxjQUFjLEVBQUVDLFNBQVM7RUFFekI7RUFDQUMsT0FBTyxFQUFFLEVBQUU7RUFDWEMsV0FBVyxFQUFFLEVBQUU7RUFFZjtFQUNBQyxXQUFXLEVBQUUsRUFBRTtFQUNmQyxxQkFBcUIsRUFBRSxFQUFFO0VBQ3pCQyxvQkFBb0IsRUFBRSxJQUFJO0VBQzFCQyx1QkFBdUIsRUFBRSxLQUFLO0VBRTlCQyxpQkFBaUIsRUFBRXhELHdCQUF3QjtFQUMzQ3lELHFCQUFxQixFQUFFLENBQUMsQ0FBQztFQUV6QkMsYUFBYSxFQUFFLFFBQVE7RUFDdkJDLGVBQWUsRUFBRSxRQUFRO0VBQ3pCQyxTQUFTLEVBQUVYLFNBQVM7RUFDcEJZLE9BQU8sRUFBRVosU0FBUztFQUNsQmEsUUFBUSxFQUFFLENBQUMsQ0FBQztFQUNaQyxrQkFBa0IsRUFBRUMsK0JBQW9CO0VBRXhDO0VBQ0FDLFNBQVMsRUFBRTtJQUNUO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0VBQUEsQ0FDRDtFQUNEQyxtQkFBbUIsRUFBRSxFQUFFO0VBQ3ZCQyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7RUFDckI7RUFDQUMsWUFBWSxFQUFFQyxvQkFBWTtFQUUxQjtFQUNBO0VBQ0FDLGVBQWUsRUFBRXBELHdCQUF3QjtFQUV6Q3FELE1BQU0sRUFBRTFDLGNBQWM7RUFFdEIyQyxXQUFXLEVBQUUsS0FBSztFQUNsQkMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0VBQ3ZCO0VBQ0FDLHFCQUFxQixFQUFFLENBQUM7RUFFeEJDLE9BQU8sRUFBRSxFQUFFO0VBQ1hDLFdBQVcsRUFBRSxDQUFDLENBQUM7RUFFZjtFQUNBQyxPQUFPLEVBQUVDLGlDQUFpQjtFQUUxQjtFQUNBQyxNQUFNLEVBQUVDO0FBQ1YsQ0FBQztBQUVNLElBQU1DLHNCQUFzQixHQUFBaEYsT0FBQSxDQUFBZ0Ysc0JBQUEsR0FBR0MsaUJBQUksQ0FBQ0MsWUFBWSxDQUNyRCxVQUFDQyxDQUFDLEVBQUVDLEVBQUU7RUFBQSxPQUFLQSxFQUFFLENBQUMsQ0FBQztBQUFBLEdBRWYsd0JBQ0YsQ0FBQztBQUVNLElBQU1DLDRCQUE0QixHQUFBckYsT0FBQSxDQUFBcUYsNEJBQUEsR0FBR0osaUJBQUksQ0FBQ0MsWUFBWSxDQUMzRCxVQUFDQyxDQUFDLEVBQUVDLEVBQUU7RUFBQSxPQUFLQSxFQUFFLENBQUMsQ0FBQztBQUFBLEdBRWYsOEJBQ0YsQ0FBQztBQU9EO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0UsMkJBQTJCQSxDQUN6Q0MsS0FBUSxFQUFBQyxJQUFBLEVBRUw7RUFBQSxJQURGaEQsU0FBUyxHQUFBZ0QsSUFBQSxDQUFUaEQsU0FBUztJQUFFaUQsS0FBSyxHQUFBRCxJQUFBLENBQUxDLEtBQUs7SUFBRUMsR0FBRyxHQUFBRixJQUFBLENBQUhFLEdBQUc7RUFFdEIsT0FBQW5HLGFBQUEsQ0FBQUEsYUFBQSxLQUNLZ0csS0FBSztJQUNSaEQsTUFBTSxFQUFFZ0QsS0FBSyxDQUFDaEQsTUFBTSxDQUFDb0QsR0FBRyxDQUFDLFVBQUNDLEdBQUcsRUFBRXJKLENBQUM7TUFBQSxPQUFNQSxDQUFDLEtBQUttSixHQUFHLEdBQUdELEtBQUssR0FBR0csR0FBRztJQUFBLENBQUMsQ0FBQztJQUMvRHBELFNBQVMsRUFBRUEsU0FBUyxHQUNoQitDLEtBQUssQ0FBQy9DLFNBQVMsQ0FBQ21ELEdBQUcsQ0FBQyxVQUFDRSxDQUFDLEVBQUV0SixDQUFDO01BQUEsT0FBTUEsQ0FBQyxLQUFLbUosR0FBRyxHQUFHbEQsU0FBUyxHQUFHcUQsQ0FBQztJQUFBLENBQUMsQ0FBQyxHQUMxRE4sS0FBSyxDQUFDL0M7RUFBUztBQUV2QjtBQUVPLFNBQVNzRCxrQ0FBa0NBLENBQXFCUCxLQUFRLEVBQUVFLEtBQVksRUFBSztFQUNoRyxJQUFJTSxRQUFRLEdBQUdSLEtBQUs7RUFDcEIsSUFBSUEsS0FBSyxDQUFDdkIsU0FBUyxDQUFDaEcsTUFBTSxFQUFFO0lBQzFCK0gsUUFBUSxHQUFBeEcsYUFBQSxDQUFBQSxhQUFBLEtBQ0hnRyxLQUFLO01BQ1J2QixTQUFTLEVBQUV5QixLQUFLLENBQUNwRixNQUFNLENBQUMyRixTQUFTLEdBQzdCLElBQUFDLDZCQUFzQixFQUFDVixLQUFLLENBQUN2QixTQUFTLEVBQUV5QixLQUFLLENBQUMsR0FDOUMsSUFBQVMsK0JBQXdCLEVBQUNYLEtBQUssQ0FBQ3ZCLFNBQVMsRUFBRXlCLEtBQUs7SUFBQyxFQUNyRDtFQUNIO0VBRUEsSUFBSUEsS0FBSyxDQUFDcEYsTUFBTSxDQUFDOEYsU0FBUyxDQUFDL0YsT0FBTyxFQUFFO0lBQ2xDMkYsUUFBUSxHQUFHSyxxQkFBcUIsQ0FBQ0wsUUFBUSxDQUFDO0VBQzVDO0VBRUEsT0FBT0EsUUFBUTtBQUNqQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNNLGdCQUFnQkEsQ0FBSUMsSUFBTyxFQUFFOUgsSUFBTyxFQUFjO0VBQ3pELElBQU0rSCxZQUF3QixHQUFHLENBQUMsQ0FBQztFQUNuQyxJQUFNQyxXQUFXLEdBQUcsU0FBZEEsV0FBV0EsQ0FBR0MsR0FBRyxFQUFJO0lBQ3pCeEosTUFBTSxDQUFDZ0MsSUFBSSxDQUFDd0gsR0FBRyxDQUFDLENBQUNoSCxPQUFPLENBQUMsVUFBQWlILEdBQUcsRUFBSTtNQUM5QixJQUNFLENBQUN6SixNQUFNLENBQUMwSixTQUFTLENBQUM1SixjQUFjLENBQUNDLElBQUksQ0FBQ3VKLFlBQVksRUFBRUcsR0FBRyxDQUFDLElBQ3hELENBQUMsSUFBQUUsbUJBQU8sRUFBQ04sSUFBSSxDQUFDSSxHQUFHLENBQUMsRUFBRWxJLElBQUksQ0FBQ2tJLEdBQUcsQ0FBQyxDQUFDLEVBQzlCO1FBQ0FILFlBQVksQ0FBQ0csR0FBRyxDQUFDLEdBQUdsSSxJQUFJLENBQUNrSSxHQUFHLENBQUM7TUFDL0I7SUFDRixDQUFDLENBQUM7RUFDSixDQUFDO0VBQ0RGLFdBQVcsQ0FBQ0YsSUFBSSxDQUFDO0VBQ2pCRSxXQUFXLENBQUNoSSxJQUFJLENBQUM7RUFDakIsT0FBTytILFlBQVk7QUFDckI7QUFFQSxJQUFNTSx5QkFBeUIsR0FBRyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLGFBQWEsQ0FBQzs7QUFFN0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsdUJBQXVCQSxDQUNyQ3ZCLEtBQWUsRUFDZndCLE1BQXFELEVBQzNDO0VBQUEsSUFBQUMsZUFBQTtFQUNWLElBQU9DLFVBQVUsR0FBZ0NGLE1BQU0sQ0FBaERFLFVBQVU7SUFBRUMsY0FBYyxHQUFnQkgsTUFBTSxDQUFwQ0csY0FBYztJQUFFQyxVQUFVLEdBQUlKLE1BQU0sQ0FBcEJJLFVBQVU7RUFDN0MsSUFBTUMsY0FBYztFQUNsQjtFQUNBLElBQUFDLGdDQUFnQixFQUFDOUIsS0FBSyxDQUFDVCxNQUFNLEVBQUVvQyxjQUFjLENBQUM7RUFDaEQsSUFBTUksUUFBUSxHQUFHL0IsS0FBSyxDQUFDaEQsTUFBTSxDQUFDZ0YsSUFBSSxDQUFDLFVBQUFDLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUN0SCxFQUFFLEtBQUsrRyxVQUFVO0VBQUEsRUFBQztFQUM1RCxJQUFJLENBQUNLLFFBQVEsSUFBSSxDQUFDRixjQUFjLEVBQUU7SUFDaEMsT0FBTzdCLEtBQUs7RUFDZDtFQUNBLElBQUk0QixVQUFVLEtBQUssSUFBSSxJQUFJQSxVQUFVLEtBQUtuRSxTQUFTLElBQUl1QyxLQUFLLENBQUNoRCxNQUFNLENBQUM0RSxVQUFVLENBQUMsS0FBS0csUUFBUSxFQUFFO0lBQzVGO0lBQ0EsT0FBTy9CLEtBQUs7RUFDZDtFQUNBLElBQU1rQyxPQUFPLEdBQUdsQyxLQUFLLENBQUN6QyxRQUFRLENBQUNzRSxjQUFjLENBQUMvRyxNQUFNLENBQUNxSCxNQUFNLENBQUM7RUFDNUQsSUFBSSxDQUFDRCxPQUFPLEVBQUU7SUFDWixPQUFPbEMsS0FBSztFQUNkO0VBQ0E7RUFDQSxJQUFNb0MsUUFBUSxHQUFHLElBQUFDLHFDQUFxQixFQUFDSCxPQUFPLEVBQUVMLGNBQWMsRUFBRTdCLEtBQUssQ0FBQ3BCLFlBQVksQ0FBQztFQUNuRixJQUFJLENBQUN3RCxRQUFRLEVBQUU7SUFDYixPQUFPcEMsS0FBSztFQUNkO0VBRUEsSUFBSXNDLFNBQVMsR0FBR3RDLEtBQUs7RUFFckIsSUFBSW9DLFFBQVEsQ0FBQ0csSUFBSSxJQUFJSCxRQUFRLENBQUNHLElBQUksS0FBS1IsUUFBUSxDQUFDUSxJQUFJLEVBQUU7SUFDcEQsSUFBTUMsYUFBYSxHQUFHeEMsS0FBSyxDQUFDaEQsTUFBTSxDQUFDeUYsU0FBUyxDQUFDLFVBQUFSLENBQUM7TUFBQSxPQUFJQSxDQUFDLENBQUN0SCxFQUFFLEtBQUsrRyxVQUFVO0lBQUEsRUFBQztJQUN0RSxJQUFJYyxhQUFhLElBQUksQ0FBQyxFQUFFO01BQ3RCRixTQUFTLEdBQUdJLHNCQUFzQixDQUFDSixTQUFTLEVBQUUsSUFBQUssd0JBQWUsRUFBQ1osUUFBUSxFQUFFSyxRQUFRLENBQUNHLElBQUksQ0FBQyxDQUFDO01BQ3ZGO01BQ0E7TUFDQSxJQUFJRCxTQUFTLENBQUN0RixNQUFNLENBQUN2RSxNQUFNLEtBQUt1SCxLQUFLLENBQUNoRCxNQUFNLENBQUN2RSxNQUFNLEVBQUU7UUFDbkQsSUFBTW1LLFVBQVUsR0FBR04sU0FBUyxDQUFDdEYsTUFBTSxDQUFDd0YsYUFBYSxDQUFDLENBQUM3SCxFQUFFO1FBQ3JEMkgsU0FBUyxHQUFHZix1QkFBdUIsQ0FDakNlLFNBQVMsRUFDVCxJQUFBTyx5QkFBZ0IsRUFBQ0QsVUFBVSxFQUFBNUksYUFBQSxDQUFBQSxhQUFBLEtBQU0ySCxjQUFjO1VBQUVoSCxFQUFFLEVBQUVpSTtRQUFVLEVBQUMsQ0FDbEUsQ0FBQztNQUNIO0lBQ0Y7SUFDQSxPQUFPTixTQUFTO0VBQ2xCOztFQUVBO0VBQ0E7RUFDQSxJQUFNUSxrQkFBa0IsSUFBQXJCLGVBQUEsR0FBRyxJQUFBc0IsOEJBQWMsRUFBQ2hCLFFBQVEsRUFBRS9CLEtBQUssQ0FBQ1QsTUFBTSxDQUFDLGNBQUFrQyxlQUFBLGNBQUFBLGVBQUEsR0FBSTtJQUFDM0csTUFBTSxFQUFFLENBQUM7RUFBQyxDQUFDO0VBQ2pGLElBQU1rSSxrQkFBa0IsR0FBRyxJQUFBRCw4QkFBYyxFQUFDWCxRQUFRLEVBQUVwQyxLQUFLLENBQUNULE1BQU0sQ0FBQztFQUNqRSxJQUFJLENBQUN5RCxrQkFBa0IsRUFBRTtJQUN2QixPQUFPaEQsS0FBSztFQUNkO0VBQ0EsSUFBSSxDQUFDLElBQUFxQixtQkFBTyxFQUFDeUIsa0JBQWtCLEVBQUVFLGtCQUFrQixDQUFDLEVBQUU7SUFDcEQsSUFBTUMsT0FBTyxHQUFHbkMsZ0JBQWdCLENBQUNnQyxrQkFBa0IsQ0FBQ2hJLE1BQU0sRUFBRWtJLGtCQUFrQixDQUFDbEksTUFBTSxDQUFDO0lBRXRGLElBQUksV0FBVyxJQUFJbUksT0FBTyxFQUFFO01BQzFCLElBQUlBLE9BQU8sQ0FBQ0MsU0FBUyxFQUFFO1FBQ3JCWixTQUFTLEdBQUdhLDJCQUEyQixDQUNyQ2IsU0FBUyxFQUNULElBQUFjLDZCQUFvQixFQUFDckIsUUFBUSxFQUFFa0IsT0FBTyxDQUFDQyxTQUFTLENBQ2xELENBQUM7TUFDSDtNQUNBLE9BQU9ELE9BQU8sQ0FBQ0MsU0FBUztJQUMxQjtJQUVBeEwsTUFBTSxDQUFDZ0MsSUFBSSxDQUFDcUksUUFBUSxDQUFDc0IsY0FBYyxDQUFDLENBQUNuSixPQUFPLENBQUMsVUFBQW9KLFdBQVcsRUFBSTtNQUMxRCxJQUFNQyxPQUFPLEdBQUd4QixRQUFRLENBQUNzQixjQUFjLENBQUNDLFdBQVcsQ0FBQztNQUNwRCxJQUFNRSxnQkFBZ0IsR0FBR2xDLHlCQUF5QixDQUFDbEIsR0FBRyxDQUFDLFVBQUFxRCxJQUFJO1FBQUEsT0FBSUYsT0FBTyxDQUFDRSxJQUFJLENBQUM7TUFBQSxFQUFDO01BQzdFLElBQUlELGdCQUFnQixDQUFDRSxJQUFJLENBQUMsVUFBQUQsSUFBSTtRQUFBLE9BQUlBLElBQUksSUFBSVIsT0FBTztNQUFBLEVBQUMsRUFBRTtRQUNsRFgsU0FBUyxHQUFHcUIsK0JBQStCLENBQ3pDckIsU0FBUyxFQUNULElBQUFzQix1Q0FBOEIsRUFDNUI3QixRQUFRLEVBQ1IsSUFBQThCLGdCQUFJLEVBQUN6QixRQUFRLENBQUN0SCxNQUFNLEVBQUUwSSxnQkFBZ0IsQ0FBQyxFQUN2Q0YsV0FDRixDQUNGLENBQUM7UUFBQyxJQUFBUSxTQUFBLEdBQUExTCwwQkFBQSxDQUNpQm9MLGdCQUFnQjtVQUFBTyxLQUFBO1FBQUE7VUFBbkMsS0FBQUQsU0FBQSxDQUFBbEwsQ0FBQSxNQUFBbUwsS0FBQSxHQUFBRCxTQUFBLENBQUFqTixDQUFBLElBQUFnQyxJQUFBLEdBQXFDO1lBQUEsSUFBMUI0SyxJQUFJLEdBQUFNLEtBQUEsQ0FBQWpMLEtBQUE7WUFDYixPQUFPbUssT0FBTyxDQUFDUSxJQUFJLENBQUM7VUFDdEI7UUFBQyxTQUFBTyxHQUFBO1VBQUFGLFNBQUEsQ0FBQXJOLENBQUEsQ0FBQXVOLEdBQUE7UUFBQTtVQUFBRixTQUFBLENBQUE3TSxDQUFBO1FBQUE7TUFDSDtJQUNGLENBQUMsQ0FBQztJQUVGLElBQUlTLE1BQU0sQ0FBQ2dDLElBQUksQ0FBQ3VKLE9BQU8sQ0FBQyxDQUFDeEssTUFBTSxHQUFHLENBQUMsRUFBRTtNQUNuQzZKLFNBQVMsR0FBRzJCLHdCQUF3QixDQUNsQzNCLFNBQVMsRUFDVCxJQUFBNEIsMEJBQWlCLEVBQUNuQyxRQUFRLEVBQUUsSUFBQThCLGdCQUFJLEVBQUN6QixRQUFRLENBQUN0SCxNQUFNLEVBQUVwRCxNQUFNLENBQUNnQyxJQUFJLENBQUN1SixPQUFPLENBQUMsQ0FBQyxDQUN6RSxDQUFDO0lBQ0g7RUFDRjtFQUVBLE9BQU9YLFNBQVM7QUFDbEI7QUFFQSxTQUFTNkIsb0JBQW9CQSxDQUFDbkUsS0FBZSxFQUFFb0MsUUFBZSxFQUFFM0IsU0FBbUIsRUFBWTtFQUM3RixJQUFJRCxRQUFRLEdBQUdELGtDQUFrQyxDQUFDUCxLQUFLLEVBQUVvQyxRQUFRLENBQUM7RUFDbEUsSUFBTWdDLFdBQVcsR0FBR0Msd0JBQXdCLENBQUNyRSxLQUFLLENBQUM7RUFDbkQsSUFBSSxJQUFBc0Usd0JBQWlCLEVBQUNsQyxRQUFRLENBQUMsSUFBSWdDLFdBQVcsS0FBSyxDQUFDLENBQUMsRUFBRTtJQUNyRDtJQUNBNUQsUUFBUSxHQUFHK0Qsc0NBQXNDLENBQUMvRCxRQUFRLEVBQUU7TUFDMURMLEdBQUcsRUFBRWlFLFdBQVc7TUFDaEJJLE1BQU0sRUFBRS9ELFNBQVMsR0FBR0EsU0FBUyxHQUFHLElBQUFnRSxpQ0FBMEIsRUFBQ3pFLEtBQUssQ0FBQ2hELE1BQU0sQ0FBQyxDQUFDdkUsTUFBTSxHQUFHO0lBQ3BGLENBQUMsQ0FBQztFQUNKO0VBQ0EsT0FBTytILFFBQVE7QUFDakI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU3lELHdCQUF3QkEsQ0FDdENqRSxLQUFlLEVBQ2Z3QixNQUFzRCxFQUM1QztFQUNWLElBQU9PLFFBQVEsR0FBSVAsTUFBTSxDQUFsQk8sUUFBUTtFQUNmLElBQU01QixHQUFHLEdBQUdILEtBQUssQ0FBQ2hELE1BQU0sQ0FBQ3lGLFNBQVMsQ0FBQyxVQUFBUixDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDdEgsRUFBRSxLQUFLb0gsUUFBUSxDQUFDcEgsRUFBRTtFQUFBLEVBQUM7RUFDN0QsSUFBTStKLEtBQUssR0FBR2hOLE1BQU0sQ0FBQ2dDLElBQUksQ0FBQzhILE1BQU0sQ0FBQ21ELFNBQVMsQ0FBQztFQUMzQyxJQUNFLE9BQU9uRCxNQUFNLENBQUNtRCxTQUFTLENBQUN4QyxNQUFNLEtBQUssUUFBUSxJQUMzQ1gsTUFBTSxDQUFDbUQsU0FBUyxDQUFDeEMsTUFBTSxLQUFLSixRQUFRLENBQUNqSCxNQUFNLENBQUNxSCxNQUFNLEVBQ2xEO0lBQ0EsSUFBQXlDLGlCQUFBLEdBQWdDcEQsTUFBTSxDQUFDbUQsU0FBUztNQUF6Q3hDLE1BQU0sR0FBQXlDLGlCQUFBLENBQU56QyxNQUFNO01BQUswQyxVQUFVLE9BQUFDLHlCQUFBLGFBQUFGLGlCQUFBLEVBQUFyTyxTQUFBO0lBQzVCLElBQU13TyxlQUFlLEdBQUdDLHdCQUF3QixDQUFDaEYsS0FBSyxFQUFFO01BQ3REK0IsUUFBUSxFQUFSQSxRQUFRO01BQ1I0QyxTQUFTLEVBQUU7UUFBQ3hDLE1BQU0sRUFBTkE7TUFBTTtJQUNwQixDQUFDLENBQUM7SUFDRixJQUFNOEMsU0FBUyxHQUFHRixlQUFlLENBQUMvSCxNQUFNLENBQUNnRixJQUFJLENBQUMsVUFBQUMsQ0FBQztNQUFBLE9BQUlBLENBQUMsQ0FBQ3RILEVBQUUsS0FBS29ILFFBQVEsQ0FBQ3BILEVBQUU7SUFBQSxFQUFDO0lBQ3hFLE9BQU9zSyxTQUFTLElBQUl2TixNQUFNLENBQUNnQyxJQUFJLENBQUNtTCxVQUFVLENBQUMsQ0FBQ3BNLE1BQU0sR0FDOUN3TCx3QkFBd0IsQ0FBQ2MsZUFBZSxFQUFFO01BQUNoRCxRQUFRLEVBQUVrRCxTQUFTO01BQUVOLFNBQVMsRUFBRUU7SUFBVSxDQUFDLENBQUMsR0FDdkZFLGVBQWU7RUFDckI7RUFFQSxJQUFJM0MsUUFBUSxHQUFHTCxRQUFRLENBQUNtRCxpQkFBaUIsQ0FBQzFELE1BQU0sQ0FBQ21ELFNBQVMsQ0FBQztFQUUzRCxJQUFJMUgsU0FBUztFQUViLElBQUltRixRQUFRLENBQUMrQyx3QkFBd0IsQ0FBQ1QsS0FBSyxDQUFDLEVBQUU7SUFDNUMsSUFBTVUsWUFBWSxHQUFHcEYsS0FBSyxDQUFDL0MsU0FBUyxDQUFDa0QsR0FBRyxDQUFDO0lBRXpDLElBQU1rRixxQkFBcUIsR0FBRyxJQUFBQyw4QkFBa0IsRUFBQ2xELFFBQVEsRUFBRXBDLEtBQUssRUFBRW9GLFlBQVksQ0FBQztJQUMvRWhELFFBQVEsR0FBR2lELHFCQUFxQixDQUFDbkYsS0FBSztJQUN0Q2pELFNBQVMsR0FBR29JLHFCQUFxQixDQUFDcEksU0FBUztFQUM3QztFQUVBLElBQUl1RCxRQUFRLEdBQUdSLEtBQUs7RUFDcEIsSUFBSSxXQUFXLElBQUl3QixNQUFNLENBQUNtRCxTQUFTLEVBQUU7SUFDbkNuRSxRQUFRLEdBQUcyRCxvQkFBb0IsQ0FBQzNELFFBQVEsRUFBRTRCLFFBQVEsRUFBRVosTUFBTSxDQUFDbUQsU0FBUyxDQUFDbEUsU0FBUyxDQUFDO0VBQ2pGO0VBRUEsSUFBSSxTQUFTLElBQUllLE1BQU0sQ0FBQ21ELFNBQVMsSUFBSXZDLFFBQVEsQ0FBQ3RILE1BQU0sQ0FBQzhGLFNBQVMsQ0FBQy9GLE9BQU8sRUFBRTtJQUN0RTtJQUNBMkYsUUFBUSxHQUFHSyxxQkFBcUIsQ0FBQ0wsUUFBUSxDQUFDO0VBQzVDO0VBRUEsT0FBT1QsMkJBQTJCLENBQUNTLFFBQVEsRUFBRTtJQUMzQ04sS0FBSyxFQUFFa0MsUUFBUTtJQUNmbkYsU0FBUyxFQUFUQSxTQUFTO0lBQ1RrRCxHQUFHLEVBQUhBO0VBQ0YsQ0FBQyxDQUFDO0FBQ0o7QUFFTyxTQUFTb0YsMkJBQTJCQSxDQUFxQnZGLEtBQVEsRUFBRXdCLE1BQU0sRUFBSztFQUNuRixJQUFPTyxRQUFRLEdBQWlCUCxNQUFNLENBQS9CTyxRQUFRO0lBQUUwQixJQUFJLEdBQVdqQyxNQUFNLENBQXJCaUMsSUFBSTtJQUFFM0ssS0FBSyxHQUFJMEksTUFBTSxDQUFmMUksS0FBSztFQUM1QixJQUFNcUgsR0FBRyxHQUFHSCxLQUFLLENBQUNoRCxNQUFNLENBQUN5RixTQUFTLENBQUMsVUFBQVIsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ3RILEVBQUUsS0FBS29ILFFBQVEsQ0FBQ3BILEVBQUU7RUFBQSxFQUFDO0VBRTdELElBQU15SCxRQUFRLEdBQUdMLFFBQVEsQ0FBQ21ELGlCQUFpQixDQUFDO0lBQzFDdEUsU0FBUyxFQUFBNUcsYUFBQSxDQUFBQSxhQUFBLEtBQ0orSCxRQUFRLENBQUNqSCxNQUFNLENBQUM4RixTQUFTLFdBQUF6RyxnQkFBQSxpQkFDM0JzSixJQUFJLEVBQUczSyxLQUFLO0VBRWpCLENBQUMsQ0FBQztFQUVGLElBQUEwTSxtQkFBQSxHQUEyQixJQUFBRiw4QkFBa0IsRUFBQ2xELFFBQVEsRUFBRXBDLEtBQUssRUFBRUEsS0FBSyxDQUFDL0MsU0FBUyxDQUFDa0QsR0FBRyxDQUFDLENBQUM7SUFBN0VsRCxTQUFTLEdBQUF1SSxtQkFBQSxDQUFUdkksU0FBUztJQUFFaUQsS0FBSyxHQUFBc0YsbUJBQUEsQ0FBTHRGLEtBQUs7RUFFdkIsT0FBT0gsMkJBQTJCLENBQUNDLEtBQUssRUFBRTtJQUFDL0MsU0FBUyxFQUFUQSxTQUFTO0lBQUVpRCxLQUFLLEVBQUxBLEtBQUs7SUFBRUMsR0FBRyxFQUFIQTtFQUFHLENBQUMsQ0FBQztBQUNwRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTc0YsNEJBQTRCQSxDQUMxQ3pGLEtBQWUsRUFDZndCLE1BQTBELEVBQ2hEO0VBQ1YsSUFBT2tFLE9BQU8sR0FBMkJsRSxNQUFNLENBQXhDa0UsT0FBTztJQUFFakYsU0FBUyxHQUFnQmUsTUFBTSxDQUEvQmYsU0FBUztJQUFFa0YsVUFBVSxHQUFJbkUsTUFBTSxDQUFwQm1FLFVBQVU7RUFDckMsSUFBTXpGLEtBQUssR0FBR0YsS0FBSyxDQUFDaEQsTUFBTSxDQUFDZ0YsSUFBSSxDQUFDLFVBQUExQixDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDM0YsRUFBRSxLQUFLK0ssT0FBTztFQUFBLEVBQUM7RUFFdEQsSUFBSSxDQUFDeEYsS0FBSyxFQUFFO0lBQ1YsT0FBT0YsS0FBSztFQUNkO0VBRUEsSUFBSVEsUUFBUSxHQUFHUixLQUFLO0VBRXBCLElBQUkyRixVQUFVLEVBQUU7SUFDZDtJQUNBLElBQU1DLFFBQVEsR0FBR3BGLFFBQVEsQ0FBQy9CLFNBQVMsQ0FBQ2dFLFNBQVMsQ0FBQyxVQUFBb0QsRUFBRTtNQUFBLE9BQUlBLEVBQUUsQ0FBQ2xMLEVBQUUsS0FBS2dMLFVBQVU7SUFBQSxFQUFDO0lBQ3pFLElBQUlsRixTQUFTLEVBQUU7TUFDYjtNQUNBO01BQ0FELFFBQVEsR0FBR3lELHdCQUF3QixDQUFDekQsUUFBUSxFQUFFLElBQUEwRCwwQkFBaUIsRUFBQ2hFLEtBQUssRUFBRTtRQUFDTyxTQUFTLEVBQUU7TUFBSSxDQUFDLENBQUMsQ0FBQzs7TUFFMUY7TUFDQSxPQUFBekcsYUFBQSxDQUFBQSxhQUFBLEtBQ0t3RyxRQUFRO1FBQ1gvQixTQUFTLEVBQUUrQixRQUFRLENBQUMvQixTQUFTLENBQUMyQixHQUFHLENBQUMsVUFBQXlGLEVBQUU7VUFBQSxPQUNsQ0EsRUFBRSxDQUFDbEwsRUFBRSxLQUFLZ0wsVUFBVSxHQUFBM0wsYUFBQSxDQUFBQSxhQUFBLEtBRVg2TCxFQUFFO1lBQ0w3SSxNQUFNLEVBQUFoRCxhQUFBLENBQUFBLGFBQUEsS0FDRDZMLEVBQUUsQ0FBQzdJLE1BQU0sV0FBQTdDLGdCQUFBLGlCQUNYdUwsT0FBTyxFQUFHLEtBQUs7VUFDakIsS0FBQTFMLGFBQUEsQ0FBQUEsYUFBQSxLQUdFNkwsRUFBRTtZQUNMN0ksTUFBTSxFQUFBaEQsYUFBQSxDQUFBQSxhQUFBLEtBQ0Q2TCxFQUFFLENBQUM3SSxNQUFNLFdBQUE3QyxnQkFBQSxpQkFDWHVMLE9BQU8sRUFBRyxJQUFJO1VBQ2hCLEVBQ0Y7UUFBQSxDQUNQO01BQUM7SUFFTDtJQUNBO0lBQ0EsT0FBT0ksd0JBQXdCLENBQUN0RixRQUFRLEVBQUUsSUFBQXVGLDBCQUFpQixFQUFDSCxRQUFRLEVBQUVGLE9BQU8sQ0FBQyxDQUFDO0VBQ2pGLENBQUMsTUFBTTtJQUNMO0lBQ0EsSUFBTXRELFFBQVEsR0FBR2xDLEtBQUssQ0FBQ2dGLGlCQUFpQixDQUFDO01BQUN6RSxTQUFTLEVBQVRBO0lBQVMsQ0FBQyxDQUFDO0lBQ3JELElBQU1OLEdBQUcsR0FBR0ssUUFBUSxDQUFDeEQsTUFBTSxDQUFDeUYsU0FBUyxDQUFDLFVBQUFSLENBQUM7TUFBQSxPQUFJQSxDQUFDLENBQUN0SCxFQUFFLEtBQUsrSyxPQUFPO0lBQUEsRUFBQztJQUU1RGxGLFFBQVEsR0FBRzJELG9CQUFvQixDQUFDM0QsUUFBUSxFQUFFNEIsUUFBUSxFQUFFM0IsU0FBUyxDQUFDO0lBQzlELE9BQU9WLDJCQUEyQixDQUFDUyxRQUFRLEVBQUU7TUFDM0NOLEtBQUssRUFBRWtDLFFBQVE7TUFDZmpDLEdBQUcsRUFBSEE7SUFDRixDQUFDLENBQUM7RUFDSjtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTa0Usd0JBQXdCQSxDQUFDckUsS0FBZSxFQUFVO0VBQ3pELE9BQU9BLEtBQUssQ0FBQzNDLE9BQU8sQ0FBQ29GLFNBQVMsQ0FBQyxVQUFBeEwsQ0FBQztJQUFBLE9BQUtBLENBQUMsQ0FBcUIrTyx1QkFBdUI7RUFBQSxFQUFDO0FBQ3JGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0Msc0JBQXNCQSxDQUNwQ2pHLEtBQWUsRUFDZndCLE1BQW9ELEVBQzFDO0VBQ1YsSUFBT08sUUFBUSxHQUFhUCxNQUFNLENBQTNCTyxRQUFRO0lBQUVtRSxPQUFPLEdBQUkxRSxNQUFNLENBQWpCMEUsT0FBTztFQUV4QixJQUFNL0YsR0FBRyxHQUFHSCxLQUFLLENBQUNoRCxNQUFNLENBQUN5RixTQUFTLENBQUMsVUFBQVIsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ3RILEVBQUUsS0FBS29ILFFBQVEsQ0FBQ3BILEVBQUU7RUFBQSxFQUFDO0VBQzdELElBQU13TCxhQUFhLEdBQUduRyxLQUFLLENBQUNoRCxNQUFNLENBQUNtRCxHQUFHLENBQUM7RUFDdkMsSUFBSWdHLGFBQWEsRUFBRTtJQUNqQixJQUFJL0QsUUFBUTtJQUNaLElBQUlnRSxPQUFPLEdBQUcsSUFBSTtJQUVsQixJQUFJRixPQUFPLEVBQUU7TUFDWDtNQUNBLElBQUFHLG9CQUFBLEdBQTJCLElBQUFmLDhCQUFrQixFQUFDYSxhQUFhLEVBQUVuRyxLQUFLLEVBQUV2QyxTQUFTLENBQUM7UUFBdkV5QyxLQUFLLEdBQUFtRyxvQkFBQSxDQUFMbkcsS0FBSztRQUFFakQsU0FBUyxHQUFBb0osb0JBQUEsQ0FBVHBKLFNBQVM7TUFDdkJtRixRQUFRLEdBQUdsQyxLQUFLO01BQ2hCa0csT0FBTyxHQUFHbkosU0FBUztJQUNyQixDQUFDLE1BQU07TUFDTG1GLFFBQVEsR0FBRytELGFBQWEsQ0FBQ2pCLGlCQUFpQixDQUFDO1FBQ3pDekUsU0FBUyxFQUFFO01BQ2IsQ0FBQyxDQUFDO01BQ0YyQixRQUFRLENBQUM4RCxPQUFPLEdBQUcsS0FBSztJQUMxQjtJQUVBLE9BQU9uRywyQkFBMkIsQ0FBQ0MsS0FBSyxFQUFFO01BQUNHLEdBQUcsRUFBSEEsR0FBRztNQUFFRCxLQUFLLEVBQUVrQyxRQUFRO01BQUVuRixTQUFTLEVBQUVtSjtJQUFPLENBQUMsQ0FBQztFQUN2RjtFQUVBLE9BQU9wRyxLQUFLO0FBQ2Q7QUFFQSxTQUFTc0cscUJBQXFCQSxDQUFDQyxTQUFTLEVBQUVDLFNBQVMsRUFBeUM7RUFBQSxJQUF2Q0MsZ0JBQWdCLEdBQUF4TSxTQUFBLENBQUF4QixNQUFBLFFBQUF3QixTQUFBLFFBQUF3RCxTQUFBLEdBQUF4RCxTQUFBLE1BQUd5TSw2QkFBa0I7RUFDeEYsSUFBSUMsWUFBWSxHQUFHSCxTQUFTLENBQUNwTixLQUFLLENBQUMsQ0FBQztFQUVwQyxJQUFNd04sYUFBYSxHQUFHSixTQUFTLENBQUNwRyxHQUFHLENBQUMsVUFBQXlHLEVBQUU7SUFBQSxPQUFJQSxFQUFFLENBQUNDLEtBQUssSUFBSUQsRUFBRSxDQUFDQyxLQUFLLENBQUN4TixJQUFJO0VBQUEsRUFBQyxDQUFDTSxNQUFNLENBQUMsVUFBQTBHLENBQUM7SUFBQSxPQUFJQSxDQUFDO0VBQUEsRUFBQztFQUVuRixJQUFNeUcsU0FBUyxHQUFHUixTQUFTLENBQUMzTSxNQUFNLENBQUMsVUFBQTNDLENBQUM7SUFBQSxPQUFJLENBQUMyUCxhQUFhLENBQUNJLFFBQVEsQ0FBQy9QLENBQUMsQ0FBQ3FDLElBQUksQ0FBQztFQUFBLEVBQUM7RUFDeEUsSUFBTTJOLFlBQVksR0FBR0wsYUFBYSxDQUFDaE4sTUFBTSxDQUFDLFVBQUEzQyxDQUFDO0lBQUEsT0FBSSxDQUFDc1AsU0FBUyxDQUFDdkUsSUFBSSxDQUFDLFVBQUFrRixFQUFFO01BQUEsT0FBSUEsRUFBRSxDQUFDNU4sSUFBSSxLQUFLckMsQ0FBQztJQUFBLEVBQUM7RUFBQSxFQUFDOztFQUVwRjtFQUNBMFAsWUFBWSxHQUFHQSxZQUFZLENBQUMvTSxNQUFNLENBQUMsVUFBQWlOLEVBQUU7SUFBQSxPQUFJQSxFQUFFLENBQUNDLEtBQUssSUFBSSxDQUFDRyxZQUFZLENBQUNELFFBQVEsQ0FBQ0gsRUFBRSxDQUFDQyxLQUFLLENBQUN4TixJQUFJLENBQUM7RUFBQSxFQUFDO0VBQzNGcU4sWUFBWSxHQUFHLENBQUNBLFlBQVksQ0FBQ2xPLE1BQU0sR0FBRyxDQUFDZ08sZ0JBQWdCLENBQUMsR0FBR0UsWUFBWTs7RUFFdkU7RUFDQUEsWUFBWSxNQUFBUSxNQUFBLEtBQUFDLG1CQUFBLGFBQ1BULFlBQVksQ0FBQy9NLE1BQU0sQ0FBQyxVQUFBaU4sRUFBRTtJQUFBLE9BQUlBLEVBQUUsQ0FBQ0MsS0FBSztFQUFBLEVBQUMsT0FBQU0sbUJBQUEsYUFDbkNMLFNBQVMsQ0FBQzNHLEdBQUcsQ0FBQyxVQUFBaUgsRUFBRTtJQUFBLE9BQUFyTixhQUFBLENBQUFBLGFBQUEsS0FDZHlNLGdCQUFnQjtNQUNuQkssS0FBSyxFQUFFTztJQUFFO0VBQUEsQ0FDVCxDQUFDLEVBQ0o7RUFFRCxPQUFPVixZQUFZO0FBQ3JCO0FBRUEsU0FBU1csMkJBQTJCQSxDQUFDbkgsR0FBRyxFQUFFc0QsSUFBSSxFQUFFM0ssS0FBSyxFQUFFME4sU0FBUyxFQUFFO0VBQ2hFLElBQUksQ0FBQzlPLE1BQU0sQ0FBQzBKLFNBQVMsQ0FBQzVKLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDK08sU0FBUyxDQUFDckcsR0FBRyxDQUFDLEVBQUVzRCxJQUFJLENBQUMsRUFBRTtJQUMvRCxPQUFPK0MsU0FBUztFQUNsQjtFQUVBLElBQUlHLFlBQVksR0FBR0gsU0FBUyxDQUFDcE4sS0FBSyxDQUFDLENBQUM7RUFFcEMsSUFBSXFLLElBQUksS0FBSyxPQUFPLElBQUkzSyxLQUFLLEtBQUssSUFBSSxJQUFJME4sU0FBUyxDQUFDL04sTUFBTSxHQUFHLENBQUMsRUFBRTtJQUM5RDtJQUNBa08sWUFBWSxDQUFDWSxNQUFNLENBQUNwSCxHQUFHLEVBQUUsQ0FBQyxDQUFDO0VBQzdCLENBQUMsTUFBTSxJQUFJc0QsSUFBSSxFQUFFO0lBQ2ZrRCxZQUFZLEdBQUdILFNBQVMsQ0FBQ3BHLEdBQUcsQ0FBQyxVQUFDeUcsRUFBRSxFQUFFN1AsQ0FBQztNQUFBLE9BQU1BLENBQUMsS0FBS21KLEdBQUcsR0FBQW5HLGFBQUEsQ0FBQUEsYUFBQSxLQUFPNk0sRUFBRSxXQUFBMU0sZ0JBQUEsaUJBQUdzSixJQUFJLEVBQUczSyxLQUFLLEtBQUkrTixFQUFFO0lBQUEsQ0FBQyxDQUFDO0VBQ3BGO0VBRUEsT0FBT0YsWUFBWTtBQUNyQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU2EsMkJBQTJCQSxDQUN6Q3hILEtBQWUsRUFDZndCLE1BQXlELEVBQy9DO0VBQUEsSUFBQWlHLHFCQUFBLEVBQUFDLHNCQUFBO0VBQ1YsSUFBTzNGLFFBQVEsR0FBc0JQLE1BQU0sQ0FBcENPLFFBQVE7SUFBRTVCLEdBQUcsR0FBaUJxQixNQUFNLENBQTFCckIsR0FBRztJQUFFc0QsSUFBSSxHQUFXakMsTUFBTSxDQUFyQmlDLElBQUk7SUFBRTNLLEtBQUssR0FBSTBJLE1BQU0sQ0FBZjFJLEtBQUs7RUFDakMsSUFBTzBOLFNBQVMsR0FBSXpFLFFBQVEsQ0FBQ2pILE1BQU0sQ0FBNUIwTCxTQUFTOztFQUVoQjtFQUNBO0VBQ0EsSUFBTUMsZ0JBQWdCLElBQUFnQixxQkFBQSxJQUFBQyxzQkFBQSxHQUNwQjNGLFFBQVEsQ0FBQzRGLHFCQUFxQixDQUFDO0lBQUN4RixNQUFNLEVBQUU7RUFBRSxDQUFDLENBQUMsY0FBQXVGLHNCQUFBLGdCQUFBQSxzQkFBQSxHQUE1Q0Esc0JBQUEsQ0FBOENsQixTQUFTLGNBQUFrQixzQkFBQSx1QkFBdkRBLHNCQUFBLENBQTBELENBQUMsQ0FBQyxjQUFBRCxxQkFBQSxjQUFBQSxxQkFBQSxHQUFJZiw2QkFBa0I7RUFFcEYsSUFBSUMsWUFBWSxHQUFHSCxTQUFTLENBQUNwTixLQUFLLENBQUMsQ0FBQztFQUNwQyxJQUFJLENBQUNvTixTQUFTLENBQUNyRyxHQUFHLENBQUMsSUFBSUEsR0FBRyxLQUFLcUcsU0FBUyxDQUFDL04sTUFBTSxFQUFFO0lBQy9DO0lBQ0FrTyxZQUFZLE1BQUFRLE1BQUEsS0FBQUMsbUJBQUEsYUFBT1osU0FBUyxJQUFFQyxnQkFBZ0IsRUFBQztFQUNqRDtFQUVBLElBQUl0RyxHQUFHLEtBQUssS0FBSyxJQUFJc0QsSUFBSSxLQUFLLFFBQVEsRUFBRTtJQUN0Q2tELFlBQVksR0FBR0wscUJBQXFCLENBQUN4TixLQUFLLEVBQUUwTixTQUFTLEVBQUVDLGdCQUFnQixDQUFDO0VBQzFFLENBQUMsTUFBTTtJQUNMRSxZQUFZLEdBQUdXLDJCQUEyQixDQUFDbkgsR0FBRyxFQUFFc0QsSUFBSSxFQUFFM0ssS0FBSyxFQUFFNk4sWUFBWSxDQUFDO0VBQzVFO0VBQ0E7RUFDQSxPQUFPMUMsd0JBQXdCLENBQUNqRSxLQUFLLEVBQUU7SUFDckMrQixRQUFRLEVBQVJBLFFBQVE7SUFDUjRDLFNBQVMsRUFBRTtNQUFDNkIsU0FBUyxFQUFFRztJQUFZO0VBQ3JDLENBQUMsQ0FBQztBQUNKO0FBRUEsU0FBU2lCLDZCQUE2QkEsQ0FBQzFGLE9BQU8sRUFBRXRELFlBQVksRUFBRXNCLEtBQUssRUFBRVgsTUFBTSxFQUFFO0VBQzNFLElBQU1zSSxXQUFXLEdBQUcsSUFBQTlFLDhCQUFjLEVBQUM3QyxLQUFLLEVBQUVYLE1BQU0sQ0FBQztFQUNqRCxPQUFPc0ksV0FBVyxHQUNkLElBQUF4RixxQ0FBcUIsRUFBQ0gsT0FBTyxFQUFFMkYsV0FBVyxFQUFFakosWUFBWSxFQUFFO0lBQ3hEa0osZ0JBQWdCLEVBQUU7RUFDcEIsQ0FBQyxDQUFDLEdBQ0YsSUFBSTtBQUNWOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTOUMsd0JBQXdCQSxDQUN0Q2hGLEtBQWUsRUFDZndCLE1BS0MsRUFDUztFQUNWLElBQU9PLFFBQVEsR0FBZVAsTUFBTSxDQUE3Qk8sUUFBUTtJQUFFNEMsU0FBUyxHQUFJbkQsTUFBTSxDQUFuQm1ELFNBQVM7RUFDMUIsSUFBT3hDLE1BQU0sR0FBSXdDLFNBQVMsQ0FBbkJ4QyxNQUFNO0VBRWIsSUFBSSxDQUFDSixRQUFRLElBQUksQ0FBQy9CLEtBQUssQ0FBQ3pDLFFBQVEsQ0FBQzRFLE1BQU0sQ0FBQyxFQUFFO0lBQ3hDLE9BQU9uQyxLQUFLO0VBQ2Q7RUFDQSxJQUFNRyxHQUFHLEdBQUdILEtBQUssQ0FBQ2hELE1BQU0sQ0FBQ3lGLFNBQVMsQ0FBQyxVQUFBUixDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDdEgsRUFBRSxLQUFLb0gsUUFBUSxDQUFDcEgsRUFBRTtFQUFBLEVBQUM7RUFFN0QsSUFBSXlILFFBQVEsR0FBR0wsUUFBUSxDQUFDbUQsaUJBQWlCLENBQUM7SUFBQy9DLE1BQU0sRUFBTkE7RUFBTSxDQUFDLENBQUM7O0VBRW5EO0VBQ0EsSUFBSUMsUUFBUSxDQUFDMkYsYUFBYSxDQUFDLENBQUMsRUFBRTtJQUM1QixJQUFNQyxTQUFTLEdBQUdKLDZCQUE2QixDQUM3QzVILEtBQUssQ0FBQ3pDLFFBQVEsQ0FBQzRFLE1BQU0sQ0FBQyxFQUN0Qm5DLEtBQUssQ0FBQ3BCLFlBQVksRUFDbEJ3RCxRQUFRLEVBQ1JwQyxLQUFLLENBQUNULE1BQ1IsQ0FBQztJQUNEO0lBQ0EsSUFBSSxDQUFDeUksU0FBUyxFQUFFO01BQ2QsSUFBTUMsWUFBWSxHQUFHbEcsUUFBUSxDQUFDUSxJQUFJO01BQ2xDLElBQUkwRixZQUFZLEVBQUU7UUFDaEI3RixRQUFRLEdBQUcsSUFBSXBDLEtBQUssQ0FBQ3BCLFlBQVksQ0FBQ3FKLFlBQVksQ0FBQyxDQUFDO1VBQUM5RixNQUFNLEVBQU5BLE1BQU07VUFBRXhILEVBQUUsRUFBRW9ILFFBQVEsQ0FBQ3BIO1FBQUUsQ0FBQyxDQUFDO01BQzVFO0lBQ0YsQ0FBQyxNQUFNO01BQ0x5SCxRQUFRLEdBQUc0RixTQUFTO0lBQ3RCO0VBQ0YsQ0FBQyxNQUFNO0lBQ0w7SUFDQTtJQUNBO0lBQ0EsSUFBTUUsZ0JBQWdCLEdBQUdsSSxLQUFLLENBQUN6QyxRQUFRLENBQUM0RSxNQUFNLENBQUMsQ0FBQ2dHLE1BQU07SUFDdEQsSUFBTUMsY0FBbUMsR0FBRyxDQUFDLENBQUM7SUFDOUMxUSxNQUFNLENBQUMyUSxNQUFNLENBQUNqRyxRQUFRLENBQUNpQixjQUFjLENBQUMsQ0FBQ25KLE9BQU8sQ0FBQyxVQUFBb08sS0FBQSxFQUF1QjtNQUFBLElBQWRDLFFBQVEsR0FBQUQsS0FBQSxDQUFmeEIsS0FBSztNQUNwRCxJQUFNMEIsWUFBWSxHQUFHcEcsUUFBUSxDQUFDdEgsTUFBTSxDQUFDeU4sUUFBUSxDQUFDO01BQzlDLElBQUlDLFlBQVksRUFBRTtRQUNoQixJQUFNQyxPQUFPLEdBQUdQLGdCQUFnQixDQUFDbEcsSUFBSSxDQUFDLFVBQUEvSyxDQUFDO1VBQUEsT0FBSUEsQ0FBQyxDQUFDcUMsSUFBSSxLQUFLa1AsWUFBWSxDQUFDbFAsSUFBSTtRQUFBLEVBQUM7UUFDeEU4TyxjQUFjLENBQUNHLFFBQVEsQ0FBQyxHQUFHRSxPQUFPLElBQUksSUFBSTtNQUM1QztJQUNGLENBQUMsQ0FBQztJQUNGLElBQUkvUSxNQUFNLENBQUNnQyxJQUFJLENBQUMwTyxjQUFjLENBQUMsQ0FBQzNQLE1BQU0sRUFBRTtNQUN0QzJKLFFBQVEsR0FBR0EsUUFBUSxDQUFDOEMsaUJBQWlCLENBQUNrRCxjQUFjLENBQUM7SUFDdkQ7SUFDQTtJQUNBO0lBQ0ExUSxNQUFNLENBQUMyUSxNQUFNLENBQUNqRyxRQUFRLENBQUNpQixjQUFjLENBQUMsQ0FBQ25KLE9BQU8sQ0FBQyxVQUFBd08sS0FBQSxFQUFXO01BQUEsSUFBVHZILEdBQUcsR0FBQXVILEtBQUEsQ0FBSHZILEdBQUc7TUFDbERpQixRQUFRLENBQUN1RyxxQkFBcUIsQ0FBQ3hILEdBQUcsQ0FBQztJQUNyQyxDQUFDLENBQUM7RUFDSjtFQUVBaUIsUUFBUSxHQUFHQSxRQUFRLENBQUM4QyxpQkFBaUIsQ0FBQztJQUNwQ3pFLFNBQVMsRUFBRXNCLFFBQVEsQ0FBQ2pILE1BQU0sQ0FBQzJGLFNBQVM7SUFDcENtSSxjQUFjLEVBQUU7RUFDbEIsQ0FBQyxDQUFDO0VBRUZ4RyxRQUFRLENBQUN5RyxpQkFBaUIsQ0FBQzdJLEtBQUssQ0FBQ3pDLFFBQVEsQ0FBQztFQUMxQyxJQUFBdUwsb0JBQUEsR0FBMkIsSUFBQXhELDhCQUFrQixFQUFDbEQsUUFBUSxFQUFFcEMsS0FBSyxFQUFFdkMsU0FBUyxDQUFDO0lBQWxFUixTQUFTLEdBQUE2TCxvQkFBQSxDQUFUN0wsU0FBUztJQUFFaUQsS0FBSyxHQUFBNEksb0JBQUEsQ0FBTDVJLEtBQUs7RUFFdkIsT0FBT0gsMkJBQTJCLENBQUNDLEtBQUssRUFBRTtJQUFDL0MsU0FBUyxFQUFUQSxTQUFTO0lBQUVpRCxLQUFLLEVBQUxBLEtBQUs7SUFBRUMsR0FBRyxFQUFIQTtFQUFHLENBQUMsQ0FBQztBQUNwRTtBQUVPLFNBQVM0SSxxQkFBcUJBLENBQUM3SSxLQUFLLEVBQUUzQyxRQUFRLEVBQUVxQixZQUFZLEVBQVM7RUFDMUUsSUFBSXdELFFBQVEsR0FBR2xDLEtBQUs7RUFDcEIsSUFBSSxDQUFDeEksTUFBTSxDQUFDZ0MsSUFBSSxDQUFDNkQsUUFBUSxDQUFDLENBQUM5RSxNQUFNLEVBQUU7SUFDakM7SUFDQSxPQUFPeUgsS0FBSztFQUNkO0VBQ0EsSUFBSSxDQUFDQSxLQUFLLENBQUNwRixNQUFNLENBQUNxSCxNQUFNLEVBQUU7SUFDeEI7SUFDQUMsUUFBUSxHQUFHbEMsS0FBSyxDQUFDZ0YsaUJBQWlCLENBQUM7TUFBQy9DLE1BQU0sRUFBRXpLLE1BQU0sQ0FBQ2dDLElBQUksQ0FBQzZELFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFBQyxDQUFDLENBQUM7RUFDeEU7RUFDQSxJQUFNMkUsT0FBTyxHQUFHM0UsUUFBUSxDQUFDNkUsUUFBUSxDQUFDdEgsTUFBTSxDQUFDcUgsTUFBTSxDQUFDO0VBQ2hELElBQUksQ0FBQ0QsT0FBTyxFQUFFO0lBQ1osT0FBT2hDLEtBQUs7RUFDZDs7RUFFQTtFQUNBLElBQU04SSxNQUFNLEdBQ1YsT0FBT3BLLFlBQVksQ0FBQ3dELFFBQVEsQ0FBQ0csSUFBSSxDQUFDLENBQUMwRyxxQkFBcUIsS0FBSyxVQUFVLEdBQ25FckssWUFBWSxDQUFDd0QsUUFBUSxDQUFDRyxJQUFJLENBQUMsQ0FBQzBHLHFCQUFxQixDQUFDL0csT0FBTyxFQUFFLEVBQUUsQ0FBQyxHQUM5RDtJQUFDd0MsS0FBSyxFQUFFO0VBQUUsQ0FBQzs7RUFFakI7RUFDQSxJQUFNQSxLQUFLLEdBQUdwTSxLQUFLLENBQUNDLE9BQU8sQ0FBQ3lRLE1BQU0sQ0FBQyxHQUFHQSxNQUFNLEdBQUdBLE1BQU0sQ0FBQ3RFLEtBQUssSUFBSSxFQUFFO0VBRWpFLElBQUlBLEtBQUssQ0FBQ2pNLE1BQU0sRUFBRTtJQUNoQjJKLFFBQVEsR0FBRyxJQUFJeEQsWUFBWSxDQUFDc0IsS0FBSyxDQUFDcUMsSUFBSSxDQUFDLENBQUF2SSxhQUFBLENBQUFBLGFBQUEsS0FDbEMwSyxLQUFLLENBQUMsQ0FBQyxDQUFDO01BQ1g5SixLQUFLLEVBQUV3SCxRQUFRLENBQUN0SCxNQUFNLENBQUNGLEtBQUs7TUFDNUJ1SCxNQUFNLEVBQUVDLFFBQVEsQ0FBQ3RILE1BQU0sQ0FBQ3FILE1BQU07TUFDOUJ5RyxjQUFjLEVBQUV4RyxRQUFRLENBQUN0SCxNQUFNLENBQUM4TixjQUFjO01BQzlDbkksU0FBUyxFQUFFMkIsUUFBUSxDQUFDdEgsTUFBTSxDQUFDMkY7SUFBUyxFQUNyQyxDQUFDO0VBQ0o7RUFDQSxPQUFPLE9BQU8yQixRQUFRLENBQUMyRyxxQkFBcUIsS0FBSyxVQUFVLEdBQ3ZEM0csUUFBUSxDQUFDMkcscUJBQXFCLENBQUM3RyxPQUFPLENBQUMsR0FDdkNFLFFBQVE7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTTSxzQkFBc0JBLENBQ3BDMUMsS0FBZSxFQUNmd0IsTUFBb0QsRUFDMUM7RUFDVixJQUFPTyxRQUFRLEdBQWFQLE1BQU0sQ0FBM0JPLFFBQVE7SUFBRW1ILE9BQU8sR0FBSTFILE1BQU0sQ0FBakIwSCxPQUFPO0VBQ3hCLElBQUksQ0FBQ25ILFFBQVEsRUFBRTtJQUNiLE9BQU8vQixLQUFLO0VBQ2Q7RUFDQSxJQUFNbUosS0FBSyxHQUFHcEgsUUFBUSxDQUFDcEgsRUFBRTtFQUN6QixJQUFNd0YsR0FBRyxHQUFHSCxLQUFLLENBQUNoRCxNQUFNLENBQUN5RixTQUFTLENBQUMsVUFBQVIsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ3RILEVBQUUsS0FBS3dPLEtBQUs7RUFBQSxFQUFDO0VBRXZELElBQUksQ0FBQ25KLEtBQUssQ0FBQ3BCLFlBQVksQ0FBQ3NLLE9BQU8sQ0FBQyxFQUFFO0lBQ2hDRSxlQUFPLENBQUNDLEtBQUssSUFBQWxDLE1BQUEsQ0FBSStCLE9BQU8sK0JBQTRCLENBQUM7SUFDckQsT0FBT2xKLEtBQUs7RUFDZDtFQUNBLElBQUlvQyxRQUFRLEdBQUcsSUFBSXBDLEtBQUssQ0FBQ3BCLFlBQVksQ0FBQ3NLLE9BQU8sQ0FBQyxDQUFDO0lBQzdDO0lBQ0F0TyxLQUFLLEVBQUVtSCxRQUFRLENBQUNqSCxNQUFNLENBQUNGLEtBQUs7SUFDNUJnTyxjQUFjLEVBQUU3RyxRQUFRLENBQUNqSCxNQUFNLENBQUM4TixjQUFjO0lBQzlDekcsTUFBTSxFQUFFSixRQUFRLENBQUNqSCxNQUFNLENBQUNxSDtFQUMxQixDQUFDLENBQUM7RUFFRixJQUFJLENBQUNKLFFBQVEsQ0FBQ1EsSUFBSSxFQUFFO0lBQ2xCO0lBQ0FILFFBQVEsR0FBRzJHLHFCQUFxQixDQUFDM0csUUFBUSxFQUFFcEMsS0FBSyxDQUFDekMsUUFBUSxFQUFFeUMsS0FBSyxDQUFDcEIsWUFBWSxDQUFDO0VBQ2hGLENBQUMsTUFBTTtJQUNMO0lBQ0E7SUFDQTs7SUFFQSxJQUFNMEssaUJBQWlCLEdBQ3JCLE9BQU90SixLQUFLLENBQUNwQixZQUFZLENBQUNzSyxPQUFPLENBQUMsQ0FBQ0QscUJBQXFCLEtBQUssVUFBVSxHQUNuRWpKLEtBQUssQ0FBQ3BCLFlBQVksQ0FBQ3NLLE9BQU8sQ0FBQyxDQUFDRCxxQkFBcUIsQ0FBQ2pKLEtBQUssQ0FBQ3pDLFFBQVEsQ0FBQzZFLFFBQVEsQ0FBQ3RILE1BQU0sQ0FBQ3FILE1BQU0sQ0FBQyxDQUFDLEdBQ3pGLElBQUk7SUFFVkMsUUFBUSxDQUFDbUgsbUJBQW1CLENBQzFCeEgsUUFBUSxDQUFDakgsTUFBTSxFQUNmaUgsUUFBUSxDQUFDeUgsaUJBQWlCLEVBQzFCeEosS0FBSyxDQUFDekMsUUFBUSxFQUNkK0wsaUJBQ0YsQ0FBQztJQUNEbEgsUUFBUSxDQUFDeUcsaUJBQWlCLENBQUM3SSxLQUFLLENBQUN6QyxRQUFRLENBQUM7RUFDNUM7RUFFQSxJQUFPYyxPQUFPLEdBQWUyQixLQUFLLENBQTNCM0IsT0FBTztJQUFFRCxTQUFTLEdBQUk0QixLQUFLLENBQWxCNUIsU0FBUztFQUV6QixJQUFJb0MsUUFBUSxHQUFBeEcsYUFBQSxDQUFBQSxhQUFBLEtBQ1BnRyxLQUFLO0lBQ1IzQixPQUFPLEVBQUUwRCxRQUFRLENBQUMwSCxjQUFjLENBQUNwTCxPQUFPLENBQUMsR0FBR1osU0FBUyxHQUFHWSxPQUFPO0lBQy9ERCxTQUFTLEVBQUUyRCxRQUFRLENBQUMwSCxjQUFjLENBQUNyTCxTQUFTLENBQUMsR0FBR1gsU0FBUyxHQUFHVztFQUFTLEVBQ3RFO0VBRUQsSUFBQXNMLG9CQUFBLEdBQTJCLElBQUFwRSw4QkFBa0IsRUFBQ2xELFFBQVEsRUFBRTVCLFFBQVEsQ0FBQztJQUExRHZELFNBQVMsR0FBQXlNLG9CQUFBLENBQVR6TSxTQUFTO0lBQUVpRCxLQUFLLEdBQUF3SixvQkFBQSxDQUFMeEosS0FBSztFQUN2Qk0sUUFBUSxHQUFHVCwyQkFBMkIsQ0FBQ1MsUUFBUSxFQUFFO0lBQUN2RCxTQUFTLEVBQVRBLFNBQVM7SUFBRWlELEtBQUssRUFBTEEsS0FBSztJQUFFQyxHQUFHLEVBQUhBO0VBQUcsQ0FBQyxDQUFDO0VBRXpFLElBQUlELEtBQUssQ0FBQ3BGLE1BQU0sQ0FBQzhGLFNBQVMsQ0FBQy9GLE9BQU8sSUFBSWtILFFBQVEsQ0FBQ2pILE1BQU0sQ0FBQzhGLFNBQVMsQ0FBQy9GLE9BQU8sRUFBRTtJQUN2RTJGLFFBQVEsR0FBR0sscUJBQXFCLENBQUNMLFFBQVEsQ0FBQztFQUM1Qzs7RUFFQTtFQUNBLElBQUlSLEtBQUssQ0FBQ3ZCLFNBQVMsQ0FBQ2hHLE1BQU0sRUFBRTtJQUMxQitILFFBQVEsR0FBQXhHLGFBQUEsQ0FBQUEsYUFBQSxLQUNId0csUUFBUTtNQUNYL0IsU0FBUyxFQUFFK0IsUUFBUSxDQUFDL0IsU0FBUyxDQUFDMkIsR0FBRyxDQUFDLFVBQUF1SixRQUFRLEVBQUk7UUFDNUMsSUFBQUMsZ0JBQUEsR0FBK0NELFFBQVEsQ0FBQzNNLE1BQU07VUFBOUM2TSxXQUFXLEdBQUFELGdCQUFBLENBQW5CVCxLQUFLO1VBQW1CVyxXQUFXLE9BQUFoRix5QkFBQSxhQUFBOEUsZ0JBQUEsR0FBbkNULEtBQUssRUFBQS9JLEdBQUEsQ0FBQXZJLGNBQUE7UUFDYixPQUFPc1IsS0FBSyxJQUFJUSxRQUFRLENBQUMzTSxNQUFNLEdBQUFoRCxhQUFBLENBQUFBLGFBQUEsS0FFdEIyUCxRQUFRO1VBQ1gzTSxNQUFNLEVBQUFoRCxhQUFBLENBQUFBLGFBQUEsS0FDRDhQLFdBQVcsV0FBQTNQLGdCQUFBLGlCQUNiK0YsS0FBSyxDQUFDdkYsRUFBRSxFQUFHa1AsV0FBVztRQUN4QixLQUVIRixRQUFRO01BQ2QsQ0FBQztJQUFDLEVBQ0g7RUFDSDs7RUFFQTtFQUNBbkosUUFBUSxHQUFBeEcsYUFBQSxDQUFBQSxhQUFBLEtBQ0h3RyxRQUFRO0lBQ1hyRCxVQUFVLEVBQUUsSUFBQTRNLHlDQUE2QixFQUFDdkosUUFBUSxDQUFDckQsVUFBVSxFQUFFNEUsUUFBUSxDQUFDcEgsRUFBRSxFQUFFeUgsUUFBUSxDQUFDekgsRUFBRTtFQUFDLEVBQ3pGO0VBRUQsT0FBTzZGLFFBQVE7QUFDakI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU21ELCtCQUErQkEsQ0FDN0MzRCxLQUFlLEVBQ2Z3QixNQUFtRSxFQUN6RDtFQUNWLElBQU9PLFFBQVEsR0FBc0NQLE1BQU0sQ0FBcERPLFFBQVE7SUFBRTRDLFNBQVMsR0FBMkJuRCxNQUFNLENBQTFDbUQsU0FBUztJQUFFcUYsWUFBWSxHQUFheEksTUFBTSxDQUEvQndJLFlBQVk7SUFBRXpHLE9BQU8sR0FBSS9CLE1BQU0sQ0FBakIrQixPQUFPO0VBQ2pELElBQUksQ0FBQ3hCLFFBQVEsQ0FBQ2pILE1BQU0sQ0FBQ3FILE1BQU0sRUFBRTtJQUMzQixPQUFPbkMsS0FBSztFQUNkO0VBRUEsSUFBTWtDLE9BQU8sR0FBR2xDLEtBQUssQ0FBQ3pDLFFBQVEsQ0FBQ3dFLFFBQVEsQ0FBQ2pILE1BQU0sQ0FBQ3FILE1BQU0sQ0FBQztFQUV0RCxJQUFNaEMsR0FBRyxHQUFHSCxLQUFLLENBQUNoRCxNQUFNLENBQUN5RixTQUFTLENBQUMsVUFBQVIsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ3RILEVBQUUsS0FBS29ILFFBQVEsQ0FBQ3BILEVBQUU7RUFBQSxFQUFDO0VBQzdELElBQUl5SCxRQUFRLEdBQUdMLFFBQVEsQ0FBQ21ELGlCQUFpQixDQUFDUCxTQUFTLENBQUM7RUFDcEQsSUFBSXFGLFlBQVksRUFBRTVILFFBQVEsR0FBR0EsUUFBUSxDQUFDNkgsb0JBQW9CLENBQUNELFlBQVksQ0FBQztFQUV4RTVILFFBQVEsQ0FBQzhILHdCQUF3QixDQUFDaEksT0FBTyxFQUFFcUIsT0FBTyxDQUFDOztFQUVuRDtFQUNBLElBQUk0RyxZQUFZLEdBQUd0SixxQkFBcUIsQ0FBQ2IsS0FBSyxDQUFDO0VBRS9DLElBQU1vSyxhQUFhLEdBQUdySSxRQUFRLENBQUNzQixjQUFjLENBQUNFLE9BQU8sQ0FBQztFQUN0RCxJQUFJLENBQUE2RyxhQUFhLGFBQWJBLGFBQWEsdUJBQWJBLGFBQWEsQ0FBRUMsZ0JBQWdCLE1BQUtDLHlCQUFjLENBQUNDLEtBQUssSUFBSTVGLFNBQVMsQ0FBQ3lGLGFBQWEsQ0FBQ3RELEtBQUssQ0FBQyxFQUFFO0lBQzlGO0lBQ0ExRSxRQUFRLENBQUNvSSxrQkFBa0IsQ0FBQ0osYUFBYSxDQUFDSyxLQUFLLEVBQUU7TUFDL0NDLGdCQUFnQixFQUFBMVEsYUFBQSxDQUFBQSxhQUFBLEtBQ1hvSSxRQUFRLENBQUN0SCxNQUFNLENBQUM2UCxPQUFPLENBQUNQLGFBQWEsQ0FBQ0ssS0FBSyxDQUFDLENBQUNDLGdCQUFnQjtRQUNoRUUsWUFBWSxFQUFFO01BQUs7SUFFdkIsQ0FBQyxDQUFDO0lBRUZULFlBQVksR0FBQW5RLGFBQUEsQ0FBQUEsYUFBQSxLQUNQbVEsWUFBWTtNQUNmbk4sTUFBTSxFQUFFbU4sWUFBWSxDQUFDbk4sTUFBTSxDQUFDb0QsR0FBRyxDQUFDLFVBQUE2QixDQUFDO1FBQUEsT0FBS0EsQ0FBQyxDQUFDdEgsRUFBRSxLQUFLb0gsUUFBUSxDQUFDcEgsRUFBRSxHQUFHeUgsUUFBUSxHQUFHSCxDQUFDO01BQUEsQ0FBQztJQUFDLEVBQzVFO0VBQ0g7RUFFQSxJQUFNbUQsWUFBWSxHQUFHK0UsWUFBWSxDQUFDbE4sU0FBUyxDQUFDa0QsR0FBRyxDQUFDO0VBQ2hELElBQUEwSyxvQkFBQSxHQUEyQixJQUFBdkYsOEJBQWtCLEVBQUNsRCxRQUFRLEVBQUUrSCxZQUFZLEVBQUUvRSxZQUFZLENBQUM7SUFBNUVuSSxTQUFTLEdBQUE0TixvQkFBQSxDQUFUNU4sU0FBUztJQUFFaUQsS0FBSyxHQUFBMkssb0JBQUEsQ0FBTDNLLEtBQUs7RUFFdkIsSUFDRSxDQUFBa0ssYUFBYSxhQUFiQSxhQUFhLHVCQUFiQSxhQUFhLENBQUVDLGdCQUFnQixNQUFLQyx5QkFBYyxDQUFDQyxLQUFLLElBQ3hENUYsU0FBUyxDQUFDeUYsYUFBYSxhQUFiQSxhQUFhLHVCQUFiQSxhQUFhLENBQUVVLEtBQUssQ0FBQyxLQUFLQyxzQkFBVyxDQUFDQyxhQUFhLElBQzdELENBQUNoQixZQUFZLEVBQ2I7SUFDQTtJQUNBLElBQU1pQixhQUFhLEdBQUcsSUFBQUMscUNBQThCLEVBQUM7TUFDbkRKLEtBQUssRUFBRUMsc0JBQVcsQ0FBQ0MsYUFBYTtNQUNoQ2xFLEtBQUssRUFBRTVHLEtBQUssQ0FBQ3BGLE1BQU0sQ0FBQ3NQLGFBQWEsQ0FBQ3RELEtBQUssQ0FBQztNQUN4Q3FFLGFBQWEsRUFBRWpMLEtBQUssQ0FBQ3BGLE1BQU0sQ0FBQ29GLEtBQUssQ0FBQ21ELGNBQWMsQ0FBQ0UsT0FBTyxDQUFDLENBQUM1SCxNQUFNLENBQUM7TUFDakU4TyxLQUFLLEVBQUV2SyxLQUFLLENBQUNwRixNQUFNLENBQUNvSSxTQUFTLENBQUNrSCxhQUFhLENBQUNLLEtBQUssQ0FBQztNQUNsRFcsV0FBVyxFQUFFO0lBQ2YsQ0FBQyxDQUFDO0lBQ0Y7SUFDQWxMLEtBQUssQ0FBQ3NLLGtCQUFrQixDQUFDSixhQUFhLENBQUNLLEtBQUssRUFBRTtNQUM1Q1ksY0FBYyxFQUFFLElBQUk7TUFDcEJYLGdCQUFnQixFQUFBMVEsYUFBQSxDQUFBQSxhQUFBLEtBQ1hrRyxLQUFLLENBQUNwRixNQUFNLENBQUM2UCxPQUFPLENBQUNQLGFBQWEsQ0FBQ0ssS0FBSyxDQUFDLENBQUNDLGdCQUFnQjtRQUM3REUsWUFBWSxFQUFFO01BQUksRUFDbkI7TUFDREssYUFBYSxFQUFiQTtJQUNGLENBQUMsQ0FBQztFQUNKO0VBQ0EsT0FBT2xMLDJCQUEyQixDQUFDb0ssWUFBWSxFQUFFO0lBQUNsTixTQUFTLEVBQVRBLFNBQVM7SUFBRWlELEtBQUssRUFBTEEsS0FBSztJQUFFQyxHQUFHLEVBQUhBO0VBQUcsQ0FBQyxDQUFDO0FBQzNFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTZ0QsMkJBQTJCQSxDQUN6Q25ELEtBQWUsRUFDZndCLE1BQXlELEVBQy9DO0VBQ1YsSUFBT08sUUFBUSxHQUFJUCxNQUFNLENBQWxCTyxRQUFRO0VBQ2YsSUFBTTVCLEdBQUcsR0FBR0gsS0FBSyxDQUFDaEQsTUFBTSxDQUFDeUYsU0FBUyxDQUFDLFVBQUFSLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUN0SCxFQUFFLEtBQUtvSCxRQUFRLENBQUNwSCxFQUFFO0VBQUEsRUFBQztFQUM3RCxJQUFNK0osS0FBSyxHQUFHaE4sTUFBTSxDQUFDZ0MsSUFBSSxDQUFDOEgsTUFBTSxDQUFDd0ksWUFBWSxDQUFDO0VBRTlDLElBQU1BLFlBQVksR0FBQWhRLGFBQUEsQ0FBQUEsYUFBQSxLQUNiK0gsUUFBUSxDQUFDakgsTUFBTSxDQUFDb0ksU0FBUyxHQUN6QjFCLE1BQU0sQ0FBQ3dJLFlBQVksQ0FDdkI7RUFFRCxJQUFNNUgsUUFBUSxHQUFHTCxRQUFRLENBQUNtRCxpQkFBaUIsQ0FBQztJQUFDaEMsU0FBUyxFQUFFOEc7RUFBWSxDQUFDLENBQUM7RUFFdEUsSUFBSTFILFNBQVMsR0FBR3RDLEtBQUs7O0VBRXJCO0VBQ0E7RUFDQSxJQUNFb0MsUUFBUSxDQUFDRyxJQUFJLEtBQUssUUFBUSxJQUMxQmYsTUFBTSxDQUFDd0ksWUFBWSxDQUFDc0IsVUFBVSxLQUFLLElBQUksRUFDdkM7SUFDQWhKLFNBQVMsR0FBQXRJLGFBQUEsQ0FBQUEsYUFBQSxLQUNKc0ksU0FBUztNQUNadEYsTUFBTSxFQUFFc0YsU0FBUyxDQUFDdEYsTUFBTSxDQUFDb0QsR0FBRyxDQUFDLFVBQUM2QixDQUFDLEVBQUVqTCxDQUFDLEVBQUs7UUFDckMsSUFBSUEsQ0FBQyxLQUFLbUosR0FBRyxJQUFJOEIsQ0FBQyxDQUFDTSxJQUFJLEtBQUssUUFBUSxJQUFJTixDQUFDLENBQUNuSCxNQUFNLENBQUNvSSxTQUFTLENBQUNvSSxVQUFVLEVBQUU7VUFDckUsT0FBT3JKLENBQUMsQ0FBQ2lELGlCQUFpQixDQUFDO1lBQ3pCaEMsU0FBUyxFQUFBbEosYUFBQSxDQUFBQSxhQUFBLEtBQU1pSSxDQUFDLENBQUNuSCxNQUFNLENBQUNvSSxTQUFTO2NBQUVvSSxVQUFVLEVBQUU7WUFBSztVQUN0RCxDQUFDLENBQUM7UUFDSjtRQUNBLE9BQU9ySixDQUFDO01BQ1YsQ0FBQztJQUFDLEVBQ0g7RUFDSDtFQUVBLElBQUlHLFFBQVEsQ0FBQytDLHdCQUF3QixDQUFDVCxLQUFLLENBQUMsRUFBRTtJQUM1QyxJQUFNVSxZQUFZLEdBQUc5QyxTQUFTLENBQUNyRixTQUFTLENBQUNrRCxHQUFHLENBQUM7SUFDN0MsSUFBQW9MLG9CQUFBLEdBQTJCLElBQUFqRyw4QkFBa0IsRUFBQ2xELFFBQVEsRUFBRUUsU0FBUyxFQUFFOEMsWUFBWSxDQUFDO01BQXpFbkksU0FBUyxHQUFBc08sb0JBQUEsQ0FBVHRPLFNBQVM7TUFBRWlELEtBQUssR0FBQXFMLG9CQUFBLENBQUxyTCxLQUFLO0lBQ3ZCLE9BQU9ILDJCQUEyQixDQUFDdUMsU0FBUyxFQUFFO01BQUNyRixTQUFTLEVBQVRBLFNBQVM7TUFBRWlELEtBQUssRUFBTEEsS0FBSztNQUFFQyxHQUFHLEVBQUhBO0lBQUcsQ0FBQyxDQUFDO0VBQ3hFO0VBRUEsT0FBT0osMkJBQTJCLENBQUN1QyxTQUFTLEVBQUU7SUFBQ3BDLEtBQUssRUFBRWtDLFFBQVE7SUFBRWpDLEdBQUcsRUFBSEE7RUFBRyxDQUFDLENBQUM7QUFDdkU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTXFMLDRCQUE0QixHQUFBL1EsT0FBQSxDQUFBK1EsNEJBQUEsR0FBRyxTQUEvQkEsNEJBQTRCQSxDQUN2Q3hMLEtBQVEsRUFBQXlMLEtBQUEsRUFFRjtFQUFBLElBREwzUyxLQUFLLEdBQUEyUyxLQUFBLENBQUwzUyxLQUFLO0VBRU4sSUFBTThDLFdBQVcsR0FBR3RELEtBQUssQ0FBQ0MsT0FBTyxDQUFDTyxLQUFLLENBQUMsR0FBR0EsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxLQUFLO0VBQzNELElBQU13SixTQUFTLEdBQUF0SSxhQUFBLENBQUFBLGFBQUEsS0FDVmdHLEtBQUs7SUFDUmxCLGVBQWUsRUFBQTlFLGFBQUEsQ0FBQUEsYUFBQSxLQUNWZ0csS0FBSyxDQUFDbEIsZUFBZTtNQUN4QmxELFdBQVcsRUFBWEE7SUFBVztFQUNaLEVBQ0Y7RUFDRDtFQUNBLE9BQU9vRSxLQUFLLENBQUNoRCxNQUFNLENBQUMwTyxNQUFNLENBQUMsVUFBQ0MsSUFBSSxFQUFFMUosQ0FBQyxFQUFLO0lBQ3RDLElBQUlBLENBQUMsQ0FBQ25ILE1BQU0sQ0FBQzhGLFNBQVMsQ0FBQy9GLE9BQU8sSUFBSW9ILENBQUMsQ0FBQ00sSUFBSSxLQUFLLE1BQU0sRUFBRTtNQUNuRCxPQUFPZ0QsMkJBQTJCLENBQUNvRyxJQUFJLEVBQUU7UUFBQzVKLFFBQVEsRUFBRUUsQ0FBQztRQUFFd0IsSUFBSSxFQUFFLGFBQWE7UUFBRTdILFdBQVcsRUFBWEE7TUFBVyxDQUFDLENBQUM7SUFDM0Y7SUFDQSxPQUFPK1AsSUFBSTtFQUNiLENBQUMsRUFBRXJKLFNBQVMsQ0FBQztBQUNmLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNzSiw2QkFBNkJBLENBQzNDNUwsS0FBZSxFQUNmd0IsTUFBMkQsRUFDakQ7RUFDVixPQUFPcUssZ0JBQWdCLENBQUM3TCxLQUFLLEVBQUV3QixNQUFNLENBQUM7QUFDeEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNzSywrQkFBK0JBLENBQzdDOUwsS0FBUSxFQUFBK0wsS0FBQSxFQUVMO0VBQUEsSUFERnBSLEVBQUUsR0FBQW9SLEtBQUEsQ0FBRnBSLEVBQUU7SUFBRXFSLGVBQWUsR0FBQUQsS0FBQSxDQUFmQyxlQUFlO0VBRXBCLElBQU1wUyxNQUFNLEdBQUdvRyxLQUFLLENBQUMzQyxPQUFPLENBQUMyRSxJQUFJLENBQUMsVUFBQS9LLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUMwRCxFQUFFLEtBQUtBLEVBQUU7RUFBQSxFQUFDO0VBRW5ELElBQUksQ0FBQ2YsTUFBTSxFQUFFO0lBQ1gsT0FBT29HLEtBQUs7RUFDZDtFQUVBLElBQU1pTSxTQUFTLEdBQUFqUyxhQUFBLENBQUFBLGFBQUEsS0FDVkosTUFBTTtJQUNUb1MsZUFBZSxFQUFmQTtFQUFlLEVBQ2hCO0VBRUQsSUFBTXhMLFFBQVEsR0FBQXhHLGFBQUEsQ0FBQUEsYUFBQSxLQUNUZ0csS0FBSztJQUNSM0MsT0FBTyxFQUFFLElBQUE2TyxzQkFBSyxFQUFTRCxTQUFTLENBQUMsQ0FBQ2pNLEtBQUssQ0FBQzNDLE9BQU87RUFBQyxFQUNqRDtFQUVELElBQU04TyxtQkFBbUIsR0FBR0Msb0JBQW9CLENBQUNILFNBQTRCLENBQUM7RUFFOUUsT0FBT0ksZ0NBQWdDLENBQUM3TCxRQUFRLEVBQUU7SUFBQzdGLEVBQUUsRUFBRkEsRUFBRTtJQUFFMkIsSUFBSSxFQUFFNlA7RUFBbUIsQ0FBQyxDQUFDO0FBQ3BGO0FBRU8sU0FBU0csd0JBQXdCQSxDQUN0Q3RNLEtBQWUsRUFDZndCLE1BQXNELEVBQzVDO0VBQUEsSUFBQStLLGdCQUFBO0VBQ1YsSUFBT0MsUUFBUSxHQUFlaEwsTUFBTSxDQUE3QmdMLFFBQVE7SUFBRVAsU0FBUyxHQUFJekssTUFBTSxDQUFuQnlLLFNBQVM7RUFDMUIsSUFBTVEsU0FBUyxHQUFHek0sS0FBSyxDQUFDM0MsT0FBTyxDQUFDMkUsSUFBSSxDQUFDLFVBQUEvSyxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDMEQsRUFBRSxLQUFLNlIsUUFBUTtFQUFBLEVBQUM7RUFDNUQsSUFBSSxDQUFDQyxTQUFTLEVBQUU7SUFDZCxPQUFPek0sS0FBSztFQUNkOztFQUVBO0VBQ0EsSUFBTTBNLG1CQUFtQixJQUFBSCxnQkFBQSxHQUFHLElBQUFJLCtCQUFlLEVBQUNGLFNBQVMsRUFBRXpNLEtBQUssQ0FBQ1QsTUFBTSxDQUFDLGNBQUFnTixnQkFBQSxjQUFBQSxnQkFBQSxHQUFJO0lBQUN6UixNQUFNLEVBQUUsQ0FBQztFQUFDLENBQUM7RUFDcEYsSUFBTThSLG1CQUFtQixHQUFHLElBQUFELCtCQUFlLEVBQUNWLFNBQVMsRUFBRWpNLEtBQUssQ0FBQ1QsTUFBTSxDQUFDO0VBQ3BFLElBQUksQ0FBQ3FOLG1CQUFtQixJQUFJLElBQUF2TCxtQkFBTyxFQUFDcUwsbUJBQW1CLEVBQUVFLG1CQUFtQixDQUFDLEVBQUU7SUFDN0UsT0FBTzVNLEtBQUs7RUFDZDs7RUFFQTtFQUNBLElBQU1pRCxPQUFPLEdBQUduQyxnQkFBZ0IsQ0FBQzRMLG1CQUFtQixFQUFFRSxtQkFBbUIsQ0FBQztFQUMxRSxPQUFPM0osT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7O0VBRXRCLElBQU1tQixXQUFXLEdBQUdwRSxLQUFLLENBQUMzQyxPQUFPLENBQUNvRixTQUFTLENBQUMsVUFBQXhMLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUMwRCxFQUFFLEtBQUs2UixRQUFRO0VBQUEsRUFBQztFQUNuRSxJQUFJcEksV0FBVyxHQUFHLENBQUMsRUFBRTtJQUNuQixPQUFPcEUsS0FBSztFQUNkO0VBQ0EsT0FBTzZMLGdCQUFnQixDQUNyQjdMLEtBQUssRUFDTCxJQUFBNk0sa0JBQVMsRUFBQ3pJLFdBQVcsRUFBRTFNLE1BQU0sQ0FBQ2dDLElBQUksQ0FBQ3VKLE9BQU8sQ0FBQyxFQUFFdkwsTUFBTSxDQUFDMlEsTUFBTSxDQUFDcEYsT0FBTyxDQUFDLENBQ3JFLENBQUM7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUzRJLGdCQUFnQkEsQ0FDOUI3TCxLQUFRLEVBQ1J3QixNQUE4QyxFQUMzQztFQUNILElBQU9yQixHQUFHLEdBQW9CcUIsTUFBTSxDQUE3QnJCLEdBQUc7SUFBQTJNLGtCQUFBLEdBQW9CdEwsTUFBTSxDQUF4QnVMLFVBQVU7SUFBVkEsVUFBVSxHQUFBRCxrQkFBQSxjQUFHLENBQUMsR0FBQUEsa0JBQUE7RUFDMUIsSUFBTUwsU0FBUyxHQUFHek0sS0FBSyxDQUFDM0MsT0FBTyxDQUFDOEMsR0FBRyxDQUFDO0VBQ3BDLElBQUksQ0FBQ3NNLFNBQVMsRUFBRTtJQUNkckQsZUFBTyxDQUFDQyxLQUFLLFlBQUFsQyxNQUFBLENBQVloSCxHQUFHLGtCQUFlLENBQUM7SUFDNUMsT0FBT0gsS0FBSztFQUNkO0VBQ0EsSUFDRTFILEtBQUssQ0FBQ0MsT0FBTyxDQUFDaUosTUFBTSxDQUFDaUMsSUFBSSxDQUFDLEtBQ3pCLENBQUNuTCxLQUFLLENBQUNDLE9BQU8sQ0FBQ2lKLE1BQU0sQ0FBQzFJLEtBQUssQ0FBQyxJQUFJMEksTUFBTSxDQUFDaUMsSUFBSSxDQUFDaEwsTUFBTSxLQUFLK0ksTUFBTSxDQUFDMUksS0FBSyxDQUFDTCxNQUFNLENBQUMsRUFDNUU7SUFDQTJRLGVBQU8sQ0FBQ0MsS0FBSyxDQUFDLDJFQUEyRSxDQUFDO0lBQzFGLE9BQU9ySixLQUFLO0VBQ2Q7RUFDQTtFQUNBLElBQU0wRSxLQUFLLEdBQUcsSUFBQXNJLG9CQUFPLEVBQUN4TCxNQUFNLENBQUNpQyxJQUFJLENBQUM7RUFDbEMsSUFBTTRFLE1BQU0sR0FBRy9QLEtBQUssQ0FBQ0MsT0FBTyxDQUFDaUosTUFBTSxDQUFDaUMsSUFBSSxDQUFDLEdBQUcsSUFBQXVKLG9CQUFPLEVBQUN4TCxNQUFNLENBQUMxSSxLQUFLLENBQUMsR0FBRyxDQUFDMEksTUFBTSxDQUFDMUksS0FBSyxDQUFDO0VBRWxGLElBQUltVCxTQUFTLEdBQUdRLFNBQVM7RUFDekIsSUFBSWpNLFFBQVEsR0FBR1IsS0FBSztFQUVwQixJQUFJaU4sa0JBQTRCLEdBQUcsRUFBRTtFQUFDLElBQUFDLEtBQUEsWUFBQUEsTUFBQSxFQUNDO0lBQ3JDLElBQU16SixJQUFJLEdBQUdpQixLQUFLLENBQUMxTixDQUFDLENBQUM7SUFDckIsSUFBTThCLEtBQUssR0FBR3VQLE1BQU0sQ0FBQ3JSLENBQUMsQ0FBQztJQUN2QjtJQUNBO0lBQ0EsSUFBSW1XLEdBQUc7SUFDUCxJQUFJMUosSUFBSSxLQUFLLE1BQU0sSUFBSW5MLEtBQUssQ0FBQ0MsT0FBTyxDQUFDTyxLQUFLLENBQUMsRUFBRTtNQUMzQztNQUNBcVUsR0FBRyxHQUFHclUsS0FBSyxDQUFDNFMsTUFBTSxDQUFDLFVBQUNDLElBQUksRUFBRXlCLENBQUMsRUFBSztRQUM5QixPQUFPQyxpQkFBaUIsQ0FBQzFCLElBQUksRUFBRU0sU0FBUyxFQUFFeEksSUFBSSxFQUFFMkosQ0FBQyxFQUFFTCxVQUFVLENBQUM7TUFDaEUsQ0FBQyxFQUFFdk0sUUFBUSxDQUFDO0lBQ2QsQ0FBQyxNQUFNO01BQ0wyTSxHQUFHLEdBQUdFLGlCQUFpQixDQUFDN00sUUFBUSxFQUFFeUwsU0FBUyxFQUFFeEksSUFBSSxFQUFFM0ssS0FBSyxFQUFFaVUsVUFBVSxDQUFDO0lBQ3ZFO0lBQ0FkLFNBQVMsR0FBR2tCLEdBQUcsQ0FBQ3ZULE1BQU07SUFDdEI0RyxRQUFRLEdBQUcyTSxHQUFHLENBQUNuTixLQUFLO0lBQ3BCaU4sa0JBQWtCLEdBQUdBLGtCQUFrQixDQUFDOUYsTUFBTSxDQUFDZ0csR0FBRyxDQUFDRixrQkFBa0IsQ0FBQztFQUN4RSxDQUFDO0VBakJELEtBQUssSUFBSWpXLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRzBOLEtBQUssQ0FBQ2pNLE1BQU0sRUFBRXpCLENBQUMsRUFBRTtJQUFBa1csS0FBQTtFQUFBO0VBbUJyQyxJQUFNSSxjQUFjLEdBQUd0TixLQUFLLENBQUMzQyxPQUFPLENBQUMyRSxJQUFJLENBQUMsVUFBQS9LLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUNzVyxJQUFJLEtBQUtDLDRCQUFpQixDQUFDQyxRQUFRO0VBQUEsRUFBQztFQUVyRixJQUFJSCxjQUFjLElBQUlBLGNBQWMsQ0FBQzNTLEVBQUUsS0FBS3NSLFNBQVMsQ0FBQ3RSLEVBQUUsRUFBRTtJQUN4RDtJQUNBc1IsU0FBUyxDQUFDc0IsSUFBSSxHQUFHQyw0QkFBaUIsQ0FBQ0UsSUFBSTtFQUN6Qzs7RUFFQTtFQUNBbE4sUUFBUSxHQUFHLElBQUFsSixVQUFHLEVBQUMsQ0FBQyxTQUFTLEVBQUU2SSxHQUFHLENBQUMsRUFBRThMLFNBQVMsRUFBRXpMLFFBQVEsQ0FBQzs7RUFFckQ7RUFDQSxJQUFNbU4sZ0JBQWdCLEdBQUcsSUFBQUMsNkJBQXNCLEVBQzdDLElBQUFDLGdCQUFJLEVBQUNaLGtCQUFrQixDQUFDLEVBQ3hCek0sUUFBUSxDQUFDakQsUUFBUSxFQUNqQmlELFFBQVEsQ0FBQ25ELE9BQU8sRUFDaEJtRCxRQUFRLENBQUN4RCxNQUNYLENBQUM7RUFFRHdELFFBQVEsR0FBRyxJQUFBbEosVUFBRyxFQUFDLENBQUMsVUFBVSxDQUFDLEVBQUVxVyxnQkFBZ0IsRUFBRW5OLFFBQVEsQ0FBQzs7RUFFeEQ7RUFDQSxJQUFNc04sY0FBYyxHQUFHLElBQUFDLHVCQUFnQixFQUFDdk4sUUFBUSxDQUFDakQsUUFBUSxFQUFFaUQsUUFBUSxDQUFDbkQsT0FBTyxDQUFDOEMsR0FBRyxDQUFDLENBQUM7RUFFakZLLFFBQVEsR0FBRyxJQUFBbEosVUFBRyxFQUFDLENBQUMsU0FBUyxFQUFFNkksR0FBRyxDQUFDLEVBQUUyTixjQUFjLEVBQUV0TixRQUFRLENBQUM7O0VBRTFEO0VBQ0E7RUFDQUEsUUFBUSxHQUFHd04sd0JBQXdCLENBQUN4TixRQUFRLEVBQUV5TSxrQkFBa0IsRUFBRWhCLFNBQVMsQ0FBQzs7RUFFNUU7RUFDQSxJQUFJQSxTQUFTLENBQUMxSixJQUFJLEtBQUswTCx1QkFBWSxDQUFDQyxTQUFTLElBQUl4SixLQUFLLENBQUNzQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7SUFDeEV4RyxRQUFRLEdBQUcyTiwrQkFBK0IsQ0FBQzNOLFFBQVEsRUFBRWdCLE1BQU0sQ0FBQ3JCLEdBQUcsQ0FBQztFQUNsRTtFQUVBLE9BQU9LLFFBQVE7QUFDakI7QUFFQSxTQUFTNE4sK0JBQStCQSxDQUFDeFUsTUFBTSxFQUFFbVQsVUFBVSxFQUFFalUsS0FBSyxFQUFFeUUsUUFBUSxFQUFFO0VBQzVFLElBQUkwTyxTQUFTLEdBQUdyUyxNQUFNO0VBQ3RCLElBQUlBLE1BQU0sQ0FBQ3VJLE1BQU0sQ0FBQzRLLFVBQVUsQ0FBQyxFQUFFO0lBQzdCO0lBQ0FkLFNBQVMsR0FBR29DLCtCQUErQixDQUFDelUsTUFBTSxFQUFFbVQsVUFBVSxFQUFFeFAsUUFBUSxDQUFDO0VBQzNFO0VBQ0EsSUFBSXpFLEtBQUssRUFBRTtJQUNULElBQU13VixTQUFTLEdBQUdyQyxTQUFTLENBQUM5SixNQUFNLENBQUMvSSxLQUFLLENBQUMsQ0FBQztJQUMxQ2tWLFNBQVMsQ0FBQ3ZCLFVBQVUsQ0FBQyxHQUFHalUsS0FBSztJQUM3Qm1ULFNBQVMsR0FBRyxJQUFBM1UsVUFBRyxFQUFDLENBQUMsUUFBUSxDQUFDLEVBQUVnWCxTQUFTLEVBQUVyQyxTQUFTLENBQUM7RUFDbkQ7RUFDQSxPQUFPQSxTQUFTO0FBQ2xCO0FBRUEsU0FBU29DLCtCQUErQkEsQ0FBQ3pVLE1BQU0sRUFBRW1ULFVBQVUsRUFBRXhQLFFBQVEsRUFBRTtFQUNyRSxJQUFNNEUsTUFBTSxHQUFHdkksTUFBTSxDQUFDdUksTUFBTSxDQUFDNEssVUFBVSxDQUFDO0VBRXhDLElBQUluVCxNQUFNLENBQUN1SSxNQUFNLENBQUMxSixNQUFNLEtBQUssQ0FBQyxJQUFJc1UsVUFBVSxLQUFLLENBQUMsRUFBRTtJQUNsRDtJQUNBLE9BQU8sSUFBQXdCLHVCQUFnQixFQUFDO01BQUM1VCxFQUFFLEVBQUVmLE1BQU0sQ0FBQ2U7SUFBRSxDQUFDLENBQUM7RUFDMUM7RUFFQSxJQUFJd0gsTUFBTSxFQUFFO0lBQ1Z2SSxNQUFNLEdBQUcsSUFBQTRVLHVCQUFnQixFQUFDNVUsTUFBTSxFQUFFdUksTUFBTSxDQUFDO0VBQzNDO0VBRUEsU0FBQXNNLEVBQUEsTUFBQUMsSUFBQSxHQUFtQixDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFlBQVksQ0FBQyxFQUFBRCxFQUFBLEdBQUFDLElBQUEsQ0FBQWpXLE1BQUEsRUFBQWdXLEVBQUEsSUFBRTtJQUE1RCxJQUFNaEwsSUFBSSxHQUFBaUwsSUFBQSxDQUFBRCxFQUFBO0lBQ2IsSUFBSW5XLEtBQUssQ0FBQ0MsT0FBTyxDQUFDcUIsTUFBTSxDQUFDNkosSUFBSSxDQUFDLENBQUMsRUFBRTtNQUMvQixJQUFNa0wsT0FBTyxHQUFHL1UsTUFBTSxDQUFDNkosSUFBSSxDQUFDLENBQUNySyxLQUFLLENBQUMsQ0FBQztNQUNwQ3VWLE9BQU8sQ0FBQ3BILE1BQU0sQ0FBQ3dGLFVBQVUsRUFBRSxDQUFDLENBQUM7TUFDN0JuVCxNQUFNLEdBQUcsSUFBQXRDLFVBQUcsRUFBQyxDQUFDbU0sSUFBSSxDQUFDLEVBQUVrTCxPQUFPLEVBQUUvVSxNQUFNLENBQUM7SUFDdkM7RUFDRjs7RUFFQTtFQUNBLElBQU1nVixXQUFXLEdBQUcsSUFBQUMsd0JBQWlCLEVBQUNqVixNQUFNLEVBQUUyRCxRQUFRLENBQUM7RUFFdkQsSUFBTXVSLFVBQVUsR0FBQTlVLGFBQUEsQ0FBQUEsYUFBQSxLQUNYSixNQUFNLEdBRUxnVixXQUFXLEdBQUc7SUFBQ2pULE1BQU0sRUFBRWlULFdBQVcsYUFBWEEsV0FBVyx1QkFBWEEsV0FBVyxDQUFFalQsTUFBTTtJQUFFb1QsSUFBSSxFQUFFSCxXQUFXLGFBQVhBLFdBQVcsdUJBQVhBLFdBQVcsQ0FBRUc7RUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQzlFO0VBRUQsSUFBTVQsU0FBUyxHQUFHLElBQUFVLGdDQUF5QixFQUFDRixVQUFVLENBQUNoVyxLQUFLLEVBQUVnVyxVQUFVLENBQUM7RUFDekUsT0FBQTlVLGFBQUEsQ0FBQUEsYUFBQSxLQUNLOFUsVUFBVTtJQUNiaFcsS0FBSyxFQUFFd1Y7RUFBUztBQUVwQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTakIsaUJBQWlCQSxDQUFDck4sS0FBSyxFQUFFcEcsTUFBTSxFQUFFNkosSUFBSSxFQUFFM0ssS0FBSyxFQUFFaVUsVUFBVSxFQUFFa0MsVUFBVyxFQUFFO0VBQzlFLElBQUloQyxrQkFBNEIsR0FBRyxFQUFFO0VBQ3JDLFFBQVF4SixJQUFJO0lBQ1Y7SUFDQTtJQUNBO0lBQ0EsS0FBS3lMLDJCQUFvQixDQUFDL00sTUFBTTtNQUFFO1FBQ2hDLElBQU1nTixTQUFTLE9BQUEvSCxtQkFBQSxhQUFPeE4sTUFBTSxDQUFDdUksTUFBTSxDQUFDO1FBQ3BDdkksTUFBTSxHQUFHd1UsK0JBQStCLENBQUN4VSxNQUFNLEVBQUVtVCxVQUFVLEVBQUVqVSxLQUFLLEVBQUVrSCxLQUFLLENBQUN6QyxRQUFRLENBQUM7UUFDbkYwUCxrQkFBa0IsR0FBRyxJQUFBWSxnQkFBSSxLQUFBMUcsTUFBQSxLQUFBQyxtQkFBQSxhQUFLK0gsU0FBUyxPQUFBL0gsbUJBQUEsYUFBS3hOLE1BQU0sQ0FBQ3VJLE1BQU0sRUFBQyxDQUFDO1FBQzNEO01BQ0Y7SUFDQSxLQUFLK00sMkJBQW9CLENBQUM1VixJQUFJO01BQUU7UUFDOUI7UUFDQTtRQUNBO1FBQ0EsSUFBTThWLFNBQVMsR0FBR3hWLE1BQU0sQ0FBQ3VJLE1BQU0sQ0FBQzRLLFVBQVUsQ0FBQztRQUMzQyxJQUFBc0MscUJBQUEsR0FBcUQsSUFBQUMsMkJBQW9CLEVBQ3ZFMVYsTUFBTSxFQUNOb0csS0FBSyxDQUFDekMsUUFBUSxFQUNkNlIsU0FBUyxFQUNUdFcsS0FBSyxFQUNMaVUsVUFBVSxFQUNWO1lBQUN3QyxXQUFXLEVBQUV4QyxVQUFVLEdBQUc7VUFBQyxDQUM5QixDQUFDO1VBUGN5QyxhQUFhLEdBQUFILHFCQUFBLENBQXJCelYsTUFBTTtVQUEwQjZWLFVBQVUsR0FBQUoscUJBQUEsQ0FBbkJuTixPQUFPO1FBUXJDLElBQUlzTixhQUFhLEVBQUU7VUFDakI1VixNQUFNLEdBQUc0VixhQUFhO1VBQ3RCLElBQUk1VixNQUFNLENBQUM4VixHQUFHLEVBQUU7WUFDZDlWLE1BQU0sR0FBRyxJQUFBK1YsdUJBQWdCLEVBQUMvVixNQUFNLEVBQUVvRyxLQUFLLENBQUMzQyxPQUFPLENBQUM7WUFDaER6RCxNQUFNLEdBQUcsSUFBQWdXLHVCQUFnQixFQUFDaFcsTUFBTSxFQUFFb0csS0FBSyxDQUFDM0MsT0FBTyxDQUFDO1VBQ2xEO1VBQ0EyQyxLQUFLLEdBQUcsSUFBQTFJLFVBQUcsRUFBQyxDQUFDLFVBQVUsRUFBRThYLFNBQVMsQ0FBQyxFQUFFSyxVQUFVLEVBQUV6UCxLQUFLLENBQUM7VUFDdkQ7VUFDQXBHLE1BQU0sR0FBRyxJQUFBNFUsdUJBQWdCLEVBQUM1VSxNQUFNLEVBQUV3VixTQUFTLENBQUM7VUFFNUNuQyxrQkFBa0IsR0FBR3VDLGFBQWEsQ0FBQ3JOLE1BQU07UUFDM0M7UUFDQTtRQUNBO01BQ0Y7SUFFQSxLQUFLK00sMkJBQW9CLENBQUN4SixPQUFPO01BQUU7UUFDakM7UUFDQTtRQUNBO1FBQ0E7UUFDQSxJQUFNbUssaUJBQWlCLEdBQUcsSUFBQUMsZUFBRyxFQUFDaFgsS0FBSyxFQUFFYyxNQUFNLENBQUM4TCxPQUFPLENBQUM7UUFFcEQsSUFBTXFLLFlBQVksR0FBRyxJQUFBbEMsZ0JBQUksRUFDdkJnQyxpQkFBaUIsQ0FDZHpQLEdBQUcsQ0FBQyxVQUFBNFAsR0FBRztVQUFBLE9BQ04sSUFBQTNZLGVBQUcsRUFDRDJJLEtBQUssQ0FBQ2hELE1BQU0sQ0FBQ2dGLElBQUksQ0FBQyxVQUFBQyxDQUFDO1lBQUEsT0FBSUEsQ0FBQyxDQUFDdEgsRUFBRSxLQUFLcVYsR0FBRztVQUFBLEVBQUMsRUFDcEMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUNyQixDQUFDO1FBQUEsQ0FDSCxDQUFDLENBQ0FwVyxNQUFNLENBQUMsVUFBQTBHLENBQUM7VUFBQSxPQUFJQSxDQUFDO1FBQUEsRUFDbEIsQ0FBQzs7UUFFRDtRQUNBMk0sa0JBQWtCLEdBQUc4QyxZQUFZOztRQUVqQztRQUNBLElBQU1FLFVBQVUsR0FBRyxJQUFBcEMsZ0JBQUksRUFDckIvVSxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FDRHNILEdBQUcsQ0FBQyxVQUFBNFAsR0FBRztVQUFBLE9BQ1AsSUFBQTNZLGVBQUcsRUFDRDJJLEtBQUssQ0FBQ2hELE1BQU0sQ0FBQ2dGLElBQUksQ0FBQyxVQUFBQyxDQUFDO1lBQUEsT0FBSUEsQ0FBQyxDQUFDdEgsRUFBRSxLQUFLcVYsR0FBRztVQUFBLEVBQUMsRUFDcEMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUNyQixDQUFDO1FBQUEsQ0FDSCxDQUFDLENBQ0FwVyxNQUFNLENBQUMsVUFBQTBHLENBQUM7VUFBQSxPQUFJQSxDQUFDO1FBQUEsRUFDbEIsQ0FBQztRQUVEMUcsTUFBTSxHQUFBSSxhQUFBLENBQUFBLGFBQUEsS0FDREosTUFBTTtVQUNUOEwsT0FBTyxFQUFFNU0sS0FBSztVQUNkcUosTUFBTSxFQUFFOE47UUFBVSxFQUNuQjtRQUNEO01BQ0Y7SUFFQTtNQUNFclcsTUFBTSxHQUFHLElBQUF0QyxVQUFHLEVBQUMsQ0FBQ21NLElBQUksQ0FBQyxFQUFFM0ssS0FBSyxFQUFFYyxNQUFNLENBQUM7TUFDbkNxVCxrQkFBa0IsT0FBQTdGLG1CQUFBLGFBQU94TixNQUFNLENBQUN1SSxNQUFNLENBQUM7TUFDdkM7RUFDSjtFQUVBLE9BQU87SUFBQ3ZJLE1BQU0sRUFBTkEsTUFBTTtJQUFFcVYsVUFBVSxFQUFWQSxVQUFVO0lBQUVoQyxrQkFBa0IsRUFBbEJBLGtCQUFrQjtJQUFFak4sS0FBSyxFQUFMQTtFQUFLLENBQUM7QUFDeEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTWtRLG9CQUFvQixHQUFBelYsT0FBQSxDQUFBeVYsb0JBQUEsR0FBRyxTQUF2QkEsb0JBQW9CQSxDQUMvQmxRLEtBQWUsRUFBQW1RLEtBQUEsRUFFRjtFQUFBLElBRFpoUSxHQUFHLEdBQUFnUSxLQUFBLENBQUhoUSxHQUFHO0lBQUVpUSxPQUFPLEdBQUFELEtBQUEsQ0FBUEMsT0FBTztFQUViLElBQUksQ0FBQ3BRLEtBQUssQ0FBQzNDLE9BQU8sQ0FBQzhDLEdBQUcsQ0FBQyxFQUFFO0lBQ3ZCaUosZUFBTyxDQUFDQyxLQUFLLFlBQUFsQyxNQUFBLENBQVloSCxHQUFHLG1CQUFnQixDQUFDO0lBQzdDLE9BQU9ILEtBQUs7RUFDZDtFQUNBLElBQUlpTSxTQUFTLEdBQUdqTSxLQUFLLENBQUMzQyxPQUFPLENBQUM4QyxHQUFHLENBQUM7RUFFbEMsS0FBSyxJQUFNc0QsSUFBSSxJQUFJMk0sT0FBTyxFQUFFO0lBQzFCLElBQUkzTSxJQUFJLEtBQUssVUFBVSxFQUFFO01BQ3ZCd0ksU0FBUyxHQUFHLElBQUFvRSxzQkFBSyxFQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUFDLHVCQUFNLEVBQUNGLE9BQU8sQ0FBQ0csUUFBUSxDQUFDLENBQUMsQ0FBQ3RFLFNBQVMsQ0FBQztJQUNwRSxDQUFDLE1BQU0sSUFBSXhJLElBQUksS0FBSyxPQUFPLEVBQUU7TUFDM0IsSUFBTStNLFNBQVMsR0FBR0osT0FBTyxDQUFDSyxLQUFLLEdBQUdDLHFCQUFVLENBQUNDLFNBQVMsR0FBR0QscUJBQVUsQ0FBQ0UsU0FBUztNQUU3RTNFLFNBQVMsR0FBRyxJQUFBb0Usc0JBQUssRUFBQyxVQUFVLENBQUMsQ0FBQyxJQUFBQyx1QkFBTSxFQUFDO1FBQUMvTixJQUFJLEVBQUVpTztNQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBQUYsdUJBQU0sRUFBQ0YsT0FBTyxDQUFDLENBQUNuRSxTQUFTLENBQUMsQ0FBQztJQUN0RjtFQUNGO0VBRUFBLFNBQVMsR0FBRyxJQUFBOEIsdUJBQWdCLEVBQUMvTixLQUFLLENBQUN6QyxRQUFRLEVBQUUwTyxTQUFTLENBQUM7RUFFdkQsT0FBQWpTLGFBQUEsQ0FBQUEsYUFBQSxLQUNLZ0csS0FBSztJQUNSM0MsT0FBTyxFQUFFMkMsS0FBSyxDQUFDM0MsT0FBTyxDQUFDK0MsR0FBRyxDQUFDLFVBQUNuSixDQUFDLEVBQUVELENBQUM7TUFBQSxPQUFNQSxDQUFDLEtBQUttSixHQUFHLEdBQUc4TCxTQUFTLEdBQUdoVixDQUFDO0lBQUEsQ0FBQztFQUFDO0FBRXJFLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU00WixnQkFBZ0IsR0FBQXBXLE9BQUEsQ0FBQW9XLGdCQUFBLEdBQUcsU0FBbkJBLGdCQUFnQkEsQ0FDM0I3USxLQUFlLEVBQ2Z3QixNQUE4QztFQUFBLE9BRTlDLENBQUNBLE1BQU0sQ0FBQ1csTUFBTSxHQUNWbkMsS0FBSyxHQUFBaEcsYUFBQSxDQUFBQSxhQUFBLEtBRUFnRyxLQUFLO0lBQ1IzQyxPQUFPLEtBQUE4SixNQUFBLEtBQUFDLG1CQUFBLGFBQU1wSCxLQUFLLENBQUMzQyxPQUFPLElBQUUsSUFBQWtSLHVCQUFnQixFQUFDO01BQUNwTSxNQUFNLEVBQUVYLE1BQU0sQ0FBQ1csTUFBTTtNQUFFeEgsRUFBRSxFQUFFNkcsTUFBTSxDQUFDN0c7SUFBRSxDQUFDLENBQUM7RUFBQyxFQUN0RjtBQUFBOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNbVcsMkJBQTJCLEdBQUFyVyxPQUFBLENBQUFxVywyQkFBQSxHQUFHLFNBQTlCQSwyQkFBMkJBLENBQ3RDOVEsS0FBZSxFQUNmd0IsTUFBeUQsRUFDNUM7RUFDYixJQUFPN0csRUFBRSxHQUEwQjZHLE1BQU0sQ0FBbEM3RyxFQUFFO0lBQUV3SCxNQUFNLEdBQWtCWCxNQUFNLENBQTlCVyxNQUFNO0lBQUUyRSxLQUFLLEdBQVd0RixNQUFNLENBQXRCc0YsS0FBSztJQUFFaE8sS0FBSyxHQUFJMEksTUFBTSxDQUFmMUksS0FBSztFQUUvQixJQUFJMEgsUUFBUSxHQUFHUixLQUFLO0VBQ3BCLElBQU0rUSxhQUFhLEdBQUd2USxRQUFRLENBQUNuRCxPQUFPLENBQUNvRixTQUFTLENBQUMsVUFBQXhMLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUMwRCxFQUFFLEtBQUtBLEVBQUU7RUFBQSxFQUFDO0VBQ2xFLElBQUl5SixXQUFXLEdBQUcyTSxhQUFhO0VBQy9CLElBQUksQ0FBQ3BXLEVBQUUsSUFBSSxDQUFDd0gsTUFBTSxFQUFFO0lBQ2xCLE9BQU8zQixRQUFRO0VBQ2pCO0VBQ0EsSUFBSXVRLGFBQWEsR0FBRyxDQUFDLElBQUk1TyxNQUFNLEVBQUU7SUFDL0IzQixRQUFRLEdBQUdxUSxnQkFBZ0IsQ0FBQ3JRLFFBQVEsRUFBRTtNQUFDMkIsTUFBTSxFQUFOQTtJQUFNLENBQUMsQ0FBQztJQUMvQyxJQUFJM0IsUUFBUSxDQUFDbkQsT0FBTyxDQUFDNUUsTUFBTSxLQUFLdUgsS0FBSyxDQUFDM0MsT0FBTyxDQUFDNUUsTUFBTSxHQUFHLENBQUMsRUFBRTtNQUN4RDtNQUNBLE9BQU91SCxLQUFLO0lBQ2Q7SUFDQTtJQUNBb0UsV0FBVyxHQUFHNUQsUUFBUSxDQUFDbkQsT0FBTyxDQUFDNUUsTUFBTSxHQUFHLENBQUM7SUFDekMrSCxRQUFRLENBQUNuRCxPQUFPLENBQUMrRyxXQUFXLENBQUMsR0FBQXBLLGFBQUEsQ0FBQUEsYUFBQSxLQUN4QndHLFFBQVEsQ0FBQ25ELE9BQU8sQ0FBQytHLFdBQVcsQ0FBQyxHQUM1QnpKLEVBQUUsR0FBRztNQUFDQSxFQUFFLEVBQUZBO0lBQUUsQ0FBQyxHQUFHLElBQUksQ0FDckI7RUFDSDs7RUFFQTtFQUNBO0VBQ0EsSUFBSW9XLGFBQWEsSUFBSSxDQUFDLElBQUk1TyxNQUFNLEVBQUU7SUFDaEM7SUFDQTNCLFFBQVEsR0FBRyxDQUFDbEksS0FBSyxDQUFDQyxPQUFPLENBQUM0SixNQUFNLENBQUMsR0FBR0EsTUFBTSxHQUFHLENBQUNBLE1BQU0sQ0FBQyxFQUFFdUosTUFBTSxDQUFDLFVBQUNDLElBQUksRUFBRXJMLENBQUMsRUFBRTBRLEtBQUssRUFBSztNQUNoRixPQUFPbkYsZ0JBQWdCLENBQUNGLElBQUksRUFBRTtRQUM1QnhMLEdBQUcsRUFBRWlFLFdBQVc7UUFDaEJYLElBQUksRUFBRSxRQUFRO1FBQ2QzSyxLQUFLLEVBQUV3SCxDQUFDO1FBQ1J5TSxVQUFVLEVBQUVpRTtNQUNkLENBQUMsQ0FBQztJQUNKLENBQUMsRUFBRXhRLFFBQVEsQ0FBQztFQUNkO0VBQ0E7RUFDQSxJQUFJc0csS0FBSyxFQUFFO0lBQ1Q7SUFDQXRHLFFBQVEsR0FBRyxDQUFDbEksS0FBSyxDQUFDQyxPQUFPLENBQUN1TyxLQUFLLENBQUMsR0FBR0EsS0FBSyxHQUFHLENBQUNBLEtBQUssQ0FBQyxFQUFFNEUsTUFBTSxDQUFDLFVBQUNDLElBQUksRUFBRTFVLENBQUMsRUFBRStaLEtBQUssRUFBSztNQUM3RSxPQUFPbkYsZ0JBQWdCLENBQUNGLElBQUksRUFBRTtRQUM1QnhMLEdBQUcsRUFBRWlFLFdBQVc7UUFDaEJYLElBQUksRUFBRSxNQUFNO1FBQ1ozSyxLQUFLLEVBQUU3QixDQUFDO1FBQ1I4VixVQUFVLEVBQUVpRTtNQUNkLENBQUMsQ0FBQztJQUNKLENBQUMsRUFBRXhRLFFBQVEsQ0FBQztFQUNkO0VBQ0E7RUFDQSxJQUFJMUgsS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPQSxLQUFLLEtBQUssV0FBVyxFQUFFO0lBQ2xEMEgsUUFBUSxHQUFHcUwsZ0JBQWdCLENBQUNyTCxRQUFRLEVBQUU7TUFBQ0wsR0FBRyxFQUFFaUUsV0FBVztNQUFFWCxJQUFJLEVBQUUsT0FBTztNQUFFM0ssS0FBSyxFQUFMQTtJQUFLLENBQUMsQ0FBQztFQUNqRjtFQUVBLE9BQU8wSCxRQUFRO0FBQ2pCLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNeVEseUJBQXlCLEdBQUF4VyxPQUFBLENBQUF3Vyx5QkFBQSxHQUFHLFNBQTVCQSx5QkFBeUJBLENBQ3BDalIsS0FBZSxFQUFBa1IsS0FBQSxFQUVGO0VBQUEsSUFEWm5QLFFBQVEsR0FBQW1QLEtBQUEsQ0FBUm5QLFFBQVE7SUFBRTBCLElBQUksR0FBQXlOLEtBQUEsQ0FBSnpOLElBQUk7SUFBRWtCLFNBQVMsR0FBQXVNLEtBQUEsQ0FBVHZNLFNBQVM7RUFFMUIsSUFBTXdNLFlBQVksR0FBR3BQLFFBQVEsQ0FBQ2pILE1BQU0sQ0FBQ29JLFNBQVMsQ0FBQ08sSUFBSSxDQUFDO0VBQ3BELElBQU1yQixRQUFRLEdBQUdMLFFBQVEsQ0FBQ3lJLGtCQUFrQixDQUFDL0csSUFBSSxFQUFFa0IsU0FBUyxDQUFDO0VBQzdELElBQU1xRixZQUFZLEdBQUc1SCxRQUFRLENBQUN0SCxNQUFNLENBQUNvSSxTQUFTLENBQUNPLElBQUksQ0FBQztFQUNwRCxJQUFJME4sWUFBWSxLQUFLbkgsWUFBWSxFQUFFO0lBQ2pDLE9BQU83RywyQkFBMkIsQ0FBQ25ELEtBQUssRUFBRTtNQUN4QytCLFFBQVEsRUFBUkEsUUFBUTtNQUNSaUksWUFBWSxNQUFBN1AsZ0JBQUEsaUJBQ1RzSixJQUFJLEVBQUd1RyxZQUFZO0lBRXhCLENBQUMsQ0FBQztFQUNKO0VBQ0EsT0FBQWhRLGFBQUEsQ0FBQUEsYUFBQSxLQUNLZ0csS0FBSztJQUNSaEQsTUFBTSxFQUFFZ0QsS0FBSyxDQUFDaEQsTUFBTSxDQUFDb0QsR0FBRyxDQUFDLFVBQUE2QixDQUFDO01BQUEsT0FBS0EsQ0FBQyxDQUFDdEgsRUFBRSxLQUFLb0gsUUFBUSxDQUFDcEgsRUFBRSxHQUFHeUgsUUFBUSxHQUFHSCxDQUFDO0lBQUEsQ0FBQztFQUFDO0FBRXhFLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1tUCw0QkFBNEIsR0FBQTNXLE9BQUEsQ0FBQTJXLDRCQUFBLEdBQUcsU0FBL0JBLDRCQUE0QkEsQ0FDdkNwUixLQUFlLEVBQ2Z3QixNQUEwRDtFQUFBLE9BQUF4SCxhQUFBLENBQUFBLGFBQUEsS0FFdkRnRyxLQUFLO0lBQ1IzQyxPQUFPLEVBQUUyQyxLQUFLLENBQUMzQyxPQUFPLENBQUMrQyxHQUFHLENBQUMsVUFBQ25KLENBQUMsRUFBRUQsQ0FBQztNQUFBLE9BQU1BLENBQUMsS0FBS3dLLE1BQU0sQ0FBQ3JCLEdBQUcsR0FBQW5HLGFBQUEsQ0FBQUEsYUFBQSxLQUFPL0MsQ0FBQztRQUFFNkUsV0FBVyxFQUFFLENBQUM3RSxDQUFDLENBQUM2RTtNQUFXLEtBQUk3RSxDQUFDO0lBQUEsQ0FBQztFQUFDO0FBQUEsQ0FDbEc7QUFFSyxTQUFTb2EsdUJBQXVCQSxDQUFDdlcsTUFBK0MsRUFBVztFQUNoRyxPQUFPLFFBQVEsSUFBSUEsTUFBTSxJQUFJLGlCQUFpQixJQUFJQSxNQUFNO0FBQzFEO0FBRU8sU0FBU3dXLHlCQUF5QkEsQ0FDdkN0UixLQUFlLEVBQ2Z3QixNQUF1RCxFQUM3QztFQUNWLElBQU8xRyxNQUFNLEdBQUkwRyxNQUFNLENBQWhCMUcsTUFBTTtFQUNiLElBQUl1Vyx1QkFBdUIsQ0FBQ3ZXLE1BQU0sQ0FBQyxFQUFFO0lBQ25DO0lBQ0E7SUFDQSxJQUFNbEIsTUFBTSxHQUFHb0csS0FBSyxDQUFDM0MsT0FBTyxDQUFDMkUsSUFBSSxDQUFDLFVBQUEvSyxDQUFDO01BQUEsT0FBSSxDQUFDLElBQUFzYSxtQkFBWSxFQUFDdGEsQ0FBQyxDQUFDO0lBQUEsRUFBQztJQUN4RCxJQUFJLENBQUMyQyxNQUFNLEVBQUU7TUFDWCxPQUFPb0csS0FBSztJQUNkO0lBQ0EsSUFBTWlNLFNBQVMsR0FBQWpTLGFBQUEsQ0FBQUEsYUFBQSxLQUFPSixNQUFNLEdBQUtrQixNQUFNLENBQUM7SUFDeEMsT0FBT3dSLHdCQUF3QixDQUFDdE0sS0FBSyxFQUFFLElBQUF3UiwwQkFBaUIsRUFBQzVYLE1BQU0sQ0FBQ2UsRUFBRSxFQUFFc1IsU0FBUyxDQUFDLENBQUM7RUFDakYsQ0FBQyxNQUFNO0lBQ0wsT0FBQWpTLGFBQUEsQ0FBQUEsYUFBQSxLQUNLZ0csS0FBSztNQUNSbEIsZUFBZSxFQUFBOUUsYUFBQSxDQUFBQSxhQUFBLEtBQ1ZnRyxLQUFLLENBQUNsQixlQUFlLEdBQ3JCaEUsTUFBTTtJQUNWO0VBRUw7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU0yVywyQkFBMkIsR0FBQWhYLE9BQUEsQ0FBQWdYLDJCQUFBLEdBQUcsU0FBOUJBLDJCQUEyQkEsQ0FDdEN6UixLQUFlLEVBRWZ3QixNQUF5RDtFQUFBLE9BQUF4SCxhQUFBLENBQUFBLGFBQUEsS0FFdERnRyxLQUFLO0lBQ1JsQixlQUFlLEVBQUE5RSxhQUFBLENBQUFBLGFBQUEsS0FDVmdHLEtBQUssQ0FBQ2xCLGVBQWU7TUFDeEJoRCxXQUFXLEVBQUUsQ0FBQ2tFLEtBQUssQ0FBQ2xCLGVBQWUsQ0FBQ2hEO0lBQVc7RUFDaEQ7QUFBQSxDQUNEOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNNFYsa0NBQWtDLEdBQUFqWCxPQUFBLENBQUFpWCxrQ0FBQSxHQUFHLFNBQXJDQSxrQ0FBa0NBLENBQUkxUixLQUFlO0VBQUEsT0FBQWhHLGFBQUEsQ0FBQUEsYUFBQSxLQUM3RGdHLEtBQUs7SUFDUmxCLGVBQWUsRUFBQTlFLGFBQUEsQ0FBQUEsYUFBQSxLQUNWZ0csS0FBSyxDQUFDbEIsZUFBZTtNQUN4QjNDLFdBQVcsRUFBRSxDQUFDNkQsS0FBSyxDQUFDbEIsZUFBZSxDQUFDM0M7SUFBVztFQUNoRDtBQUFBLENBQ0Q7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU13VixpQ0FBaUMsR0FBQWxYLE9BQUEsQ0FBQWtYLGlDQUFBLEdBQUcsU0FBcENBLGlDQUFpQ0EsQ0FDNUMzUixLQUFlLEVBQ2Z3QixNQUErRDtFQUFBLE9BQUF4SCxhQUFBLENBQUFBLGFBQUEsS0FFNURnRyxLQUFLO0lBQ1IzQyxPQUFPLEVBQUUyQyxLQUFLLENBQUMzQyxPQUFPLENBQUMrQyxHQUFHLENBQUMsVUFBQ25KLENBQUMsRUFBRUQsQ0FBQztNQUFBLE9BQU1BLENBQUMsS0FBS3dLLE1BQU0sQ0FBQ3JCLEdBQUcsR0FBQW5HLGFBQUEsQ0FBQUEsYUFBQSxLQUFPL0MsQ0FBQztRQUFFNEUsS0FBSyxFQUFFMkYsTUFBTSxDQUFDM0Y7TUFBSyxLQUFJNUUsQ0FBQztJQUFBLENBQUM7RUFBQztBQUFBLENBQzFGOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU0yYSxnQ0FBZ0MsR0FBQW5YLE9BQUEsQ0FBQW1YLGdDQUFBLEdBQUcsU0FBbkNBLGdDQUFnQ0EsQ0FDM0M1UixLQUFlLEVBQUE2UixLQUFBLEVBRUY7RUFBQSxJQURaaFcsS0FBSyxHQUFBZ1csS0FBQSxDQUFMaFcsS0FBSztFQUVOLE9BQUE3QixhQUFBLENBQUFBLGFBQUEsS0FDS2dHLEtBQUs7SUFDUmxCLGVBQWUsRUFBQTlFLGFBQUEsQ0FBQUEsYUFBQSxLQUNWZ0csS0FBSyxDQUFDbEIsZUFBZTtNQUN4QmpELEtBQUssRUFBTEE7SUFBSztFQUNOO0FBRUwsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTWlXLG9CQUFvQixHQUFBclgsT0FBQSxDQUFBcVgsb0JBQUEsR0FBRyxTQUF2QkEsb0JBQW9CQSxDQUMvQjlSLEtBQWUsRUFDZndCLE1BQWtELEVBQy9DO0VBQ0gsSUFBTytMLElBQUksR0FBUy9MLE1BQU0sQ0FBbkIrTCxJQUFJO0lBQUVwTixHQUFHLEdBQUlxQixNQUFNLENBQWJyQixHQUFHO0VBQ2hCLElBQU00UiwyQkFBMkIsR0FBR3hFLElBQUksS0FBS0MsNEJBQWlCLENBQUNDLFFBQVE7RUFDdkUsT0FBQXpULGFBQUEsQ0FBQUEsYUFBQSxLQUNLZ0csS0FBSztJQUNSM0MsT0FBTyxFQUFFMkMsS0FBSyxDQUFDM0MsT0FBTyxDQUFDK0MsR0FBRyxDQUFDLFVBQUNuSixDQUFDLEVBQUVELENBQUM7TUFBQSxPQUM5QkEsQ0FBQyxLQUFLbUosR0FBRyxHQUFBbkcsYUFBQSxDQUFBQSxhQUFBLEtBRUEvQyxDQUFDO1FBQ0pzVyxJQUFJLEVBQUpBO01BQUksS0FFTndFLDJCQUEyQixHQUFBL1gsYUFBQSxDQUFBQSxhQUFBLEtBRXRCL0MsQ0FBQztRQUNKc1csSUFBSSxFQUFFQyw0QkFBaUIsQ0FBQ0U7TUFBSSxLQUU5QnpXLENBQUM7SUFBQSxDQUNQO0VBQUM7QUFFTCxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTSthLDBCQUEwQixHQUFBdlgsT0FBQSxDQUFBdVgsMEJBQUEsR0FBRyxTQUE3QkEsMEJBQTBCQSxDQUNyQ2hTLEtBQWUsRUFDZndCLE1BQXdELEVBQzNDO0VBQ2IsSUFBTTVILE1BQU0sR0FBR29HLEtBQUssQ0FBQzNDLE9BQU8sQ0FBQ21FLE1BQU0sQ0FBQ3JCLEdBQUcsQ0FBQztFQUN4QyxJQUFNTSxTQUFTLEdBQUcsSUFBQXBKLGVBQUcsRUFBQ3VDLE1BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUM7RUFFbkUsSUFBSTRHLFFBQVEsR0FBR3FMLGdCQUFnQixDQUFDN0wsS0FBSyxFQUFFO0lBQ3JDRyxHQUFHLEVBQUVxQixNQUFNLENBQUNyQixHQUFHO0lBQ2ZzRCxJQUFJLEVBQUUsU0FBUztJQUNmM0ssS0FBSyxFQUFFLENBQUMySDtFQUNWLENBQUMsQ0FBQztFQUVGRCxRQUFRLEdBQUdxTCxnQkFBZ0IsQ0FBQ3JMLFFBQVEsRUFBRTtJQUNwQ0wsR0FBRyxFQUFFcUIsTUFBTSxDQUFDckIsR0FBRztJQUNmc0QsSUFBSSxFQUFFLE9BQU87SUFDYjNLLEtBQUssRUFBRSxJQUFBbVosMkJBQW9CLEVBQUNyWSxNQUFNLENBQUNkLEtBQUssRUFBRWMsTUFBTSxDQUFDZSxFQUFFLEVBQUU7TUFDbkQ4RixTQUFTLEVBQUUsQ0FBQ0E7SUFDZCxDQUFDO0VBQ0gsQ0FBQyxDQUFDO0VBRUYsT0FBT0QsUUFBUTtBQUNqQixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNMFIsbUJBQW1CLEdBQUF6WCxPQUFBLENBQUF5WCxtQkFBQSxHQUFHLFNBQXRCQSxtQkFBbUJBLENBQzlCbFMsS0FBZSxFQUNmd0IsTUFBaUQsRUFDcEM7RUFDYixJQUFPckIsR0FBRyxHQUFJcUIsTUFBTSxDQUFickIsR0FBRztFQUNWLElBQUFnUyxrQkFBQSxHQUFxQm5TLEtBQUssQ0FBQzNDLE9BQU8sQ0FBQzhDLEdBQUcsQ0FBQztJQUFoQ2dDLE1BQU0sR0FBQWdRLGtCQUFBLENBQU5oUSxNQUFNO0lBQUV4SCxFQUFFLEdBQUF3WCxrQkFBQSxDQUFGeFgsRUFBRTtFQUVqQixJQUFNeVgsVUFBVSxNQUFBakwsTUFBQSxLQUFBQyxtQkFBQSxhQUNYcEgsS0FBSyxDQUFDM0MsT0FBTyxDQUFDakUsS0FBSyxDQUFDLENBQUMsRUFBRStHLEdBQUcsQ0FBQyxPQUFBaUgsbUJBQUEsYUFDM0JwSCxLQUFLLENBQUMzQyxPQUFPLENBQUNqRSxLQUFLLENBQUMrRyxHQUFHLEdBQUcsQ0FBQyxFQUFFSCxLQUFLLENBQUMzQyxPQUFPLENBQUM1RSxNQUFNLENBQUMsRUFDdEQ7RUFFRCxJQUFNa1YsZ0JBQWdCLEdBQUcsSUFBQUMsNkJBQXNCLEVBQUN6TCxNQUFNLEVBQUVuQyxLQUFLLENBQUN6QyxRQUFRLEVBQUU2VSxVQUFVLEVBQUVwUyxLQUFLLENBQUNoRCxNQUFNLENBQUM7RUFDakcsSUFBTXFWLFNBQVMsR0FDYixJQUFBQywyQkFBb0IsRUFBQ3RTLEtBQUssQ0FBQ2pCLE1BQU0sQ0FBQ3JDLGVBQWUsQ0FBQyxLQUFLL0IsRUFBRSxHQUFBWCxhQUFBLENBQUFBLGFBQUEsS0FFaERnRyxLQUFLLENBQUNqQixNQUFNO0lBQ2ZyQyxlQUFlLEVBQUU7RUFBSSxLQUV2QnNELEtBQUssQ0FBQ2pCLE1BQU07RUFFbEIsSUFBSXlCLFFBQVEsR0FBRyxJQUFBbEosVUFBRyxFQUFDLENBQUMsU0FBUyxDQUFDLEVBQUU4YSxVQUFVLEVBQUVwUyxLQUFLLENBQUM7RUFDbERRLFFBQVEsR0FBRyxJQUFBbEosVUFBRyxFQUFDLENBQUMsVUFBVSxDQUFDLEVBQUVxVyxnQkFBZ0IsRUFBRW5OLFFBQVEsQ0FBQztFQUN4REEsUUFBUSxHQUFHLElBQUFsSixVQUFHLEVBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSthLFNBQVMsRUFBRTdSLFFBQVEsQ0FBQztFQUUvQyxPQUFPd04sd0JBQXdCLENBQUN4TixRQUFRLEVBQUUyQixNQUFNLEVBQUUxRSxTQUFTLENBQUM7QUFDOUQsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTThVLGVBQWUsR0FBQTlYLE9BQUEsQ0FBQThYLGVBQUEsR0FBRyxTQUFsQkEsZUFBZUEsQ0FDMUJ2UyxLQUFlLEVBQ2Z3QixNQUE2QyxFQUNoQztFQUNiLElBQUlZLFFBQVE7RUFDWixJQUFJb1EsWUFBWTtFQUNoQixJQUFJaFIsTUFBTSxDQUFDMUcsTUFBTSxFQUFFO0lBQ2pCc0gsUUFBUSxHQUFHLElBQUFxUSxxQ0FBcUIsRUFBQ3pTLEtBQUssRUFBRXdCLE1BQU0sQ0FBQzFHLE1BQU0sQ0FBQztJQUN0RCxJQUFJLENBQUNzSCxRQUFRLEVBQUU7TUFDYmdILGVBQU8sQ0FBQ3NKLElBQUksQ0FDViw2RkFBNkYsRUFDN0ZsUixNQUFNLENBQUMxRyxNQUNULENBQUM7TUFDRCxPQUFPa0YsS0FBSztJQUNkO0lBRUEsSUFBTWdKLE1BQU0sR0FBRyxJQUFBMUQsOEJBQWtCLEVBQUNsRCxRQUFRLEVBQUVwQyxLQUFLLENBQUM7SUFDbERvQyxRQUFRLEdBQUc0RyxNQUFNLENBQUM5SSxLQUFLO0lBQ3ZCc1MsWUFBWSxHQUFHeEosTUFBTSxDQUFDL0wsU0FBUztFQUNqQyxDQUFDLE1BQU07SUFBQSxJQUFBMFYsaUJBQUE7SUFDTDtJQUNBLElBQU1DLGNBQWMsSUFBQUQsaUJBQUEsR0FBR25SLE1BQU0sQ0FBQzROLFNBQVMsY0FBQXVELGlCQUFBLGNBQUFBLGlCQUFBLEdBQUlqYixNQUFNLENBQUNnQyxJQUFJLENBQUNzRyxLQUFLLENBQUN6QyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekU2RSxRQUFRLEdBQUcsSUFBSXlRLGFBQUssQ0FBQztNQUNuQnBTLFNBQVMsRUFBRSxJQUFJO01BQ2ZtSSxjQUFjLEVBQUUsSUFBSTtNQUNwQnpHLE1BQU0sRUFBRXlRO0lBQ1YsQ0FBQyxDQUFDO0lBQ0ZKLFlBQVksR0FBRyxDQUFDLENBQUM7RUFDbkI7RUFFQSxJQUFJaFMsUUFBUSxHQUFBeEcsYUFBQSxDQUFBQSxhQUFBLEtBQ1BnRyxLQUFLO0lBQ1JoRCxNQUFNLEtBQUFtSyxNQUFBLEtBQUFDLG1CQUFBLGFBQU1wSCxLQUFLLENBQUNoRCxNQUFNLElBQUVvRixRQUFRLEVBQUM7SUFDbkNuRixTQUFTLEtBQUFrSyxNQUFBLEtBQUFDLG1CQUFBLGFBQU1wSCxLQUFLLENBQUMvQyxTQUFTLElBQUV1VixZQUFZLEVBQUM7SUFDN0M7SUFDQXJWLFVBQVUsR0FBR2lGLFFBQVEsQ0FBQ3pILEVBQUUsRUFBQXdNLE1BQUEsS0FBQUMsbUJBQUEsYUFBS3BILEtBQUssQ0FBQzdDLFVBQVUsRUFBQztJQUM5Q3NCLFNBQVMsRUFBRSxJQUFBaUMsNkJBQXNCLEVBQUNWLEtBQUssQ0FBQ3ZCLFNBQVMsRUFBRTJELFFBQVE7RUFBQyxFQUM3RDtFQUVELElBQUlBLFFBQVEsQ0FBQ3RILE1BQU0sQ0FBQzhGLFNBQVMsQ0FBQy9GLE9BQU8sRUFBRTtJQUNyQzJGLFFBQVEsR0FBR0sscUJBQXFCLENBQUNMLFFBQVEsQ0FBQztFQUM1QztFQUVBLE9BQU9BLFFBQVE7QUFDakIsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU3NTLGtCQUFrQkEsQ0FDaEM5UyxLQUFRLEVBQUErUyxLQUFBLEVBRUw7RUFBQSxJQURGcFksRUFBRSxHQUFBb1ksS0FBQSxDQUFGcFksRUFBRTtFQUVILElBQU13RixHQUFHLEdBQUdoSSxNQUFNLENBQUM2YSxRQUFRLENBQUNyWSxFQUFFLENBQUM7RUFDM0I7RUFDQXhDLE1BQU0sQ0FBQ3dDLEVBQUUsQ0FBQyxHQUNWcUYsS0FBSyxDQUFDaEQsTUFBTSxDQUFDeUYsU0FBUyxDQUFDLFVBQUFSLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUN0SCxFQUFFLEtBQUtBLEVBQUU7RUFBQSxFQUFDO0VBQzVDLElBQUl3RixHQUFHLEdBQUcsQ0FBQyxJQUFJQSxHQUFHLElBQUlILEtBQUssQ0FBQ2hELE1BQU0sQ0FBQ3ZFLE1BQU0sRUFBRTtJQUN6QztJQUNBMlEsZUFBTyxDQUFDc0osSUFBSSw2Q0FBQXZMLE1BQUEsQ0FBNkN4TSxFQUFFLENBQUUsQ0FBQztJQUM5RCxPQUFPcUYsS0FBSztFQUNkO0VBRUEsSUFBT2hELE1BQU0sR0FBK0NnRCxLQUFLLENBQTFEaEQsTUFBTTtJQUFFQyxTQUFTLEdBQW9DK0MsS0FBSyxDQUFsRC9DLFNBQVM7SUFBRUUsVUFBVSxHQUF3QjZDLEtBQUssQ0FBdkM3QyxVQUFVO0lBQUVrQixPQUFPLEdBQWUyQixLQUFLLENBQTNCM0IsT0FBTztJQUFFRCxTQUFTLEdBQUk0QixLQUFLLENBQWxCNUIsU0FBUztFQUN4RCxJQUFNNlUsYUFBYSxHQUFHalcsTUFBTSxDQUFDbUQsR0FBRyxDQUFDO0VBQ2pDLElBQU1LLFFBQVEsR0FBQXhHLGFBQUEsQ0FBQUEsYUFBQSxLQUNUZ0csS0FBSztJQUNSaEQsTUFBTSxFQUFFLElBQUFrVyw4QkFBYSxFQUFDRCxhQUFhLENBQUN0WSxFQUFFLENBQUMsQ0FBQ3FDLE1BQU0sQ0FBQztJQUMvQ0MsU0FBUyxFQUFFLElBQUFrVyxxQ0FBb0IsRUFBQ2hULEdBQUcsQ0FBQyxDQUFDbEQsU0FBUyxDQUFDO0lBQy9DRSxVQUFVLEVBQUUsSUFBQWlXLHVDQUEyQixFQUFDalcsVUFBVSxFQUFFOFYsYUFBYSxDQUFDdFksRUFBRSxDQUFDO0lBQ3JFMEQsT0FBTyxFQUFFNFUsYUFBYSxDQUFDeEosY0FBYyxDQUFDcEwsT0FBTyxDQUFDLEdBQUdaLFNBQVMsR0FBR1ksT0FBTztJQUNwRUQsU0FBUyxFQUFFNlUsYUFBYSxDQUFDeEosY0FBYyxDQUFDckwsU0FBUyxDQUFDLEdBQUdYLFNBQVMsR0FBR1csU0FBUztJQUMxRUssU0FBUyxFQUFFLElBQUFrQywrQkFBd0IsRUFBQ1gsS0FBSyxDQUFDdkIsU0FBUyxFQUFFd1UsYUFBYTtJQUNsRTtFQUFBLEVBQ0Q7RUFFRCxPQUFPcFMscUJBQXFCLENBQUNMLFFBQVEsQ0FBQztBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTTZTLG1CQUFtQixHQUFBNVksT0FBQSxDQUFBNFksbUJBQUEsR0FBRyxTQUF0QkEsbUJBQW1CQSxDQUM5QnJULEtBQWUsRUFBQXNULEtBQUE7RUFBQSxJQUNkQyxLQUFLLEdBQUFELEtBQUEsQ0FBTEMsS0FBSztFQUFBLE9BQUF2WixhQUFBLENBQUFBLGFBQUEsS0FFSGdHLEtBQUs7SUFDUjdDLFVBQVUsRUFBRW9XO0VBQUs7QUFBQSxDQUNqQjs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUMsb0JBQW9CLEdBQUEvWSxPQUFBLENBQUErWSxvQkFBQSxHQUFHLFNBQXZCQSxvQkFBb0JBLENBQy9CeFQsS0FBZSxFQUNmd0IsTUFBa0QsRUFDckM7RUFDYixJQUFNaVMsVUFBVSxHQUFHLElBQUFDLDRCQUFnQixFQUFDbFMsTUFBTSxDQUFDO0VBQzNDLElBQUltUyxhQUFhLE9BQUF2TSxtQkFBQSxhQUFPcEgsS0FBSyxDQUFDN0MsVUFBVSxDQUFDO0VBRXpDLElBQUlxRSxNQUFNLENBQUNyRSxVQUFVLEVBQUU7SUFDckJxRSxNQUFNLENBQUNyRSxVQUFVLENBQUNqRCxPQUFPLENBQUMsVUFBQXdMLE9BQU8sRUFBSTtNQUNuQ2lPLGFBQWEsR0FBRyxJQUFBUCx1Q0FBMkIsRUFBQ08sYUFBYSxFQUFFak8sT0FBaUIsQ0FBQztJQUMvRSxDQUFDLENBQUM7RUFDSjtFQUVBLE9BQUExTCxhQUFBLENBQUFBLGFBQUEsS0FDS2dHLEtBQUs7SUFDUjdDLFVBQVUsRUFBRSxJQUFBeVcsdUNBQTJCLEVBQUNELGFBQWEsRUFBRUYsVUFBVTtFQUFDO0FBRXRFLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1JLHVCQUF1QixHQUFBcFosT0FBQSxDQUFBb1osdUJBQUEsR0FBRyxTQUExQkEsdUJBQXVCQSxDQUNsQzdULEtBQWUsRUFDZndCLE1BQXFELEVBQ3hDO0VBQ2IsSUFBTzdHLEVBQUUsR0FBSTZHLE1BQU0sQ0FBWjdHLEVBQUU7RUFDVCxJQUFNbVosa0JBQWtCLEdBQUcsSUFBQUMsdUNBQTJCLEVBQUMvVCxLQUFLLENBQUM3QyxVQUFVLEVBQUV4QyxFQUFFLENBQUM7RUFDNUUsSUFBSSxDQUFDbVosa0JBQWtCLEVBQUU7SUFDdkIsT0FBTzlULEtBQUs7RUFDZDtFQUVBLElBQU1nVSxnQkFBZ0IsR0FBRyxJQUFBQyw2QkFBaUIsRUFBQ0gsa0JBQWtCLENBQUMzVyxVQUFVLENBQUM7RUFDekUsSUFBSXFELFFBQVEsR0FBQXhHLGFBQUEsS0FBT2dHLEtBQUssQ0FBQztFQUV6QmdVLGdCQUFnQixDQUFDOVosT0FBTyxDQUFDLFVBQUF3TCxPQUFPLEVBQUk7SUFDbEMsSUFBTXZGLEdBQUcsR0FBR0ssUUFBUSxDQUFDeEQsTUFBTSxDQUFDeUYsU0FBUyxDQUFDLFVBQUFSLENBQUM7TUFBQSxPQUFJQSxDQUFDLENBQUN0SCxFQUFFLEtBQUsrSyxPQUFPO0lBQUEsRUFBQztJQUM1RCxJQUFJdkYsR0FBRyxJQUFJLENBQUMsRUFBRTtNQUNaSyxRQUFRLEdBQUdzUyxrQkFBa0IsQ0FBQ3RTLFFBQVEsRUFBRTtRQUFDN0YsRUFBRSxFQUFFK0s7TUFBTyxDQUFDLENBQUM7SUFDeEQ7RUFDRixDQUFDLENBQUM7RUFFRixJQUFNaU8sYUFBYSxHQUFHLElBQUFQLHVDQUEyQixFQUFDNVMsUUFBUSxDQUFDckQsVUFBVSxFQUFFMlcsa0JBQWtCLENBQUM7RUFDMUYsT0FBQTlaLGFBQUEsQ0FBQUEsYUFBQSxLQUNLd0csUUFBUTtJQUNYckQsVUFBVSxFQUFFd1c7RUFBYTtBQUU3QixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNTyx1QkFBdUIsR0FBQXpaLE9BQUEsQ0FBQXlaLHVCQUFBLEdBQUcsU0FBMUJBLHVCQUF1QkEsQ0FDbENsVSxLQUFlLEVBQ2Z3QixNQUFxRCxFQUN4QztFQUNiLElBQU83RyxFQUFFLEdBQWE2RyxNQUFNLENBQXJCN0csRUFBRTtJQUFFd1osT0FBTyxHQUFJM1MsTUFBTSxDQUFqQjJTLE9BQU87RUFDbEIsSUFBTVYsVUFBVSxHQUFHLElBQUFNLHVDQUEyQixFQUFDL1QsS0FBSyxDQUFDN0MsVUFBVSxFQUFFeEMsRUFBRSxDQUFDO0VBQ3BFLElBQUksQ0FBQzhZLFVBQVUsRUFBRTtJQUNmLE9BQU96VCxLQUFLO0VBQ2Q7RUFFQSxJQUFJUSxRQUFRLEdBQUF4RyxhQUFBLEtBQU9nRyxLQUFLLENBQUM7RUFFekIsSUFBSW1VLE9BQU8sQ0FBQ2hYLFVBQVUsRUFBRTtJQUN0QnFELFFBQVEsQ0FBQ3JELFVBQVUsTUFBQWdLLE1BQUEsS0FBQUMsbUJBQUEsYUFBT3FNLFVBQVUsQ0FBQ3RXLFVBQVUsT0FBQWlLLG1CQUFBLGFBQUs1RyxRQUFRLENBQUNyRCxVQUFVLEVBQUM7SUFDeEVnWCxPQUFPLENBQUNoWCxVQUFVLENBQUNqRCxPQUFPLENBQUMsVUFBQXdMLE9BQU8sRUFBSTtNQUNwQ2xGLFFBQVEsQ0FBQ3JELFVBQVUsR0FBRyxJQUFBaVcsdUNBQTJCLEVBQy9DNVMsUUFBUSxDQUFDckQsVUFBVSxFQUNuQnVJLE9BQ0YsQ0FBQztJQUNILENBQUMsQ0FBQztFQUNKO0VBRUEsSUFBTTBPLGFBQWEsR0FBQXBhLGFBQUEsQ0FBQUEsYUFBQSxLQUNkeVosVUFBVSxHQUNWVSxPQUFPLENBQ1g7RUFFRCxJQUFJQyxhQUFhLENBQUMzVCxTQUFTLEtBQUtnVCxVQUFVLENBQUNoVCxTQUFTLEVBQUU7SUFDcEQsSUFBTTRULFFBQVEsR0FBRyxJQUFBSiw2QkFBaUIsRUFBQ0csYUFBYSxDQUFDalgsVUFBVSxDQUFDO0lBQzVEcUQsUUFBUSxHQUFHQSxRQUFRLENBQUN4RCxNQUFNLENBQUMwTyxNQUFNLENBQUMsVUFBQzRJLEdBQUcsRUFBRXBVLEtBQUssRUFBSztNQUNoRCxJQUFJbVUsUUFBUSxDQUFDck4sUUFBUSxDQUFDOUcsS0FBSyxDQUFDdkYsRUFBRSxDQUFDLEVBQUU7UUFDL0IsT0FBT3NKLHdCQUF3QixDQUFDcVEsR0FBRyxFQUFFO1VBQ25DdlMsUUFBUSxFQUFFN0IsS0FBSztVQUNmeUUsU0FBUyxFQUFFO1lBQUNsRSxTQUFTLEVBQUUyVCxhQUFhLENBQUMzVDtVQUFTO1FBQ2hELENBQUMsQ0FBQztNQUNKO01BQ0EsT0FBTzZULEdBQUc7SUFDWixDQUFDLEVBQUU5VCxRQUFRLENBQUM7RUFDZDtFQUVBLElBQU1tVCxhQUFhLEdBQUcsSUFBQVksd0NBQTRCLEVBQUMvVCxRQUFRLENBQUNyRCxVQUFVLEVBQUVpWCxhQUFhLENBQUM7RUFDdEYsT0FBQXBhLGFBQUEsQ0FBQUEsYUFBQSxLQUNLd0csUUFBUTtJQUNYckQsVUFBVSxFQUFFd1c7RUFBYTtBQUU3QixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNYSwyQkFBMkIsR0FBQS9aLE9BQUEsQ0FBQStaLDJCQUFBLEdBQUcsU0FBOUJBLDJCQUEyQkEsQ0FDdEN4VSxLQUFlLEVBQ2Z3QixNQUF5RCxFQUM1QztFQUNiLElBQU9pVCxZQUFZLEdBQWFqVCxNQUFNLENBQS9CaVQsWUFBWTtJQUFFL08sT0FBTyxHQUFJbEUsTUFBTSxDQUFqQmtFLE9BQU87RUFDNUIsSUFBTStOLFVBQVUsR0FBRyxJQUFBTSx1Q0FBMkIsRUFBQy9ULEtBQUssQ0FBQzdDLFVBQVUsRUFBRXNYLFlBQVksQ0FBQztFQUM5RSxJQUFNdlUsS0FBSyxHQUFHRixLQUFLLENBQUNoRCxNQUFNLENBQUNnRixJQUFJLENBQUMsVUFBQUMsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ3RILEVBQUUsS0FBSytLLE9BQU87RUFBQSxFQUFDO0VBQ3RELElBQUksQ0FBQytOLFVBQVUsSUFBSSxDQUFDdlQsS0FBSyxFQUFFO0lBQ3pCLE9BQU9GLEtBQUs7RUFDZDtFQUVBLElBQUl5VCxVQUFVLENBQUN0VyxVQUFVLENBQUM2RSxJQUFJLENBQUMsVUFBQTBTLEtBQUs7SUFBQSxPQUFJQSxLQUFLLEtBQUtoUCxPQUFPO0VBQUEsRUFBQyxFQUFFO0lBQzFELE9BQU8xRixLQUFLO0VBQ2Q7RUFFQSxJQUFNMlUsa0JBQWtCLEdBQUcsSUFBQWYsdUNBQTJCLEVBQUNILFVBQVUsQ0FBQ3RXLFVBQVUsRUFBRXVJLE9BQU8sQ0FBQztFQUN0RixPQUFPd08sdUJBQXVCLENBQUNsVSxLQUFLLEVBQUU7SUFDcENyRixFQUFFLEVBQUU4WixZQUFZO0lBQ2hCTixPQUFPLEVBQUU7TUFBQ2hYLFVBQVUsRUFBRXdYO0lBQWtCO0VBQzFDLENBQUMsQ0FBQztBQUNKLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1DLGdDQUFnQyxHQUFBbmEsT0FBQSxDQUFBbWEsZ0NBQUEsR0FBRyxTQUFuQ0EsZ0NBQWdDQSxDQUMzQzVVLEtBQWUsRUFDZndCLE1BQThELEVBQ2pEO0VBQ2IsSUFBT2lULFlBQVksR0FBYWpULE1BQU0sQ0FBL0JpVCxZQUFZO0lBQUUvTyxPQUFPLEdBQUlsRSxNQUFNLENBQWpCa0UsT0FBTztFQUM1QixJQUFNK04sVUFBVSxHQUFHLElBQUFNLHVDQUEyQixFQUFDL1QsS0FBSyxDQUFDN0MsVUFBVSxFQUFFc1gsWUFBWSxDQUFDO0VBQzlFLElBQUksQ0FBQ2hCLFVBQVUsRUFBRTtJQUNmLE9BQU96VCxLQUFLO0VBQ2Q7RUFFQSxJQUFNNlUsa0JBQWtCLEdBQUcsSUFBQXpCLHVDQUEyQixFQUFDSyxVQUFVLENBQUN0VyxVQUFVLEVBQUV1SSxPQUFPLENBQUM7RUFDdEYsT0FBT3dPLHVCQUF1QixDQUFDbFUsS0FBSyxFQUFFO0lBQ3BDckYsRUFBRSxFQUFFOFosWUFBWTtJQUNoQk4sT0FBTyxFQUFFO01BQUNoWCxVQUFVLEVBQUUwWDtJQUFrQjtFQUMxQyxDQUFDLENBQUM7QUFDSixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1DLDRCQUE0QixHQUFBcmEsT0FBQSxDQUFBcWEsNEJBQUEsR0FBRyxTQUEvQkEsNEJBQTRCQSxDQUN2QzlVLEtBQWUsRUFDZndCLE1BQTBELEVBQzdDO0VBQ2IsSUFBT3VULGFBQWEsR0FBcUV2VCxNQUFNLENBQXhGdVQsYUFBYTtJQUFFQyxrQkFBa0IsR0FBaUR4VCxNQUFNLENBQXpFd1Qsa0JBQWtCO0lBQUVDLGtCQUFrQixHQUE2QnpULE1BQU0sQ0FBckR5VCxrQkFBa0I7SUFBRUMsdUJBQXVCLEdBQUkxVCxNQUFNLENBQWpDMFQsdUJBQXVCO0VBRXJGLElBQUksQ0FBQ0Qsa0JBQWtCLElBQUksQ0FBQ0MsdUJBQXVCLEVBQUU7SUFDbkQsSUFBTUMsV0FBVyxHQUFHblYsS0FBSyxDQUFDN0MsVUFBVSxDQUFDc0YsU0FBUyxDQUFDLFVBQUFpUyxLQUFLO01BQUEsT0FDbEQsT0FBT0EsS0FBSyxLQUFLLFFBQVEsR0FBR0EsS0FBSyxLQUFLSyxhQUFhLEdBQUdMLEtBQUssQ0FBQy9aLEVBQUUsS0FBS29hLGFBQWE7SUFBQSxDQUNsRixDQUFDO0lBQ0QsSUFBSUMsa0JBQWtCLElBQUlHLFdBQVcsS0FBSyxDQUFDLENBQUMsRUFBRTtNQUM1QyxJQUFNQyxnQkFBZ0IsR0FBR3BWLEtBQUssQ0FBQzdDLFVBQVUsQ0FBQ3NGLFNBQVMsQ0FBQyxVQUFBaVMsS0FBSztRQUFBLE9BQ3ZELE9BQU9BLEtBQUssS0FBSyxRQUFRLEdBQUdBLEtBQUssS0FBS00sa0JBQWtCLEdBQUdOLEtBQUssQ0FBQy9aLEVBQUUsS0FBS3FhLGtCQUFrQjtNQUFBLENBQzVGLENBQUM7TUFDRCxJQUFJSSxnQkFBZ0IsS0FBSyxDQUFDLENBQUMsRUFBRTtRQUMzQixJQUFNekIsYUFBYSxHQUFHLElBQUEwQixzQkFBUyxFQUFDclYsS0FBSyxDQUFDN0MsVUFBVSxFQUFFZ1ksV0FBVyxFQUFFQyxnQkFBZ0IsQ0FBQztRQUNoRixPQUFBcGIsYUFBQSxDQUFBQSxhQUFBLEtBQVdnRyxLQUFLO1VBQUU3QyxVQUFVLEVBQUV3VztRQUFhO01BQzdDO0lBQ0Y7RUFDRjtFQUVBLElBQUlzQixrQkFBa0IsSUFBSSxDQUFDQyx1QkFBdUIsRUFBRTtJQUNsRCxJQUFJdkIsY0FBYSxHQUFHLElBQUFQLHVDQUEyQixFQUFDcFQsS0FBSyxDQUFDN0MsVUFBVSxFQUFFNFgsYUFBYSxDQUFDO0lBQ2hGLElBQUlDLGtCQUFrQixFQUFFO01BQ3RCLElBQU1JLGlCQUFnQixHQUFHekIsY0FBYSxDQUFDbFIsU0FBUyxDQUFDLFVBQUFpUyxLQUFLO1FBQUEsT0FDcEQsT0FBT0EsS0FBSyxLQUFLLFFBQVEsR0FBR0EsS0FBSyxLQUFLTSxrQkFBa0IsR0FBRyxLQUFLO01BQUEsQ0FDbEUsQ0FBQztNQUNEckIsY0FBYSxDQUFDcE0sTUFBTSxDQUFDNk4saUJBQWdCLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHQSxpQkFBZ0IsRUFBRSxDQUFDLEVBQUVMLGFBQWEsQ0FBQztJQUN4RixDQUFDLE1BQU07TUFDTHBCLGNBQWEsTUFBQXhNLE1BQUEsS0FBQUMsbUJBQUEsYUFBT3VNLGNBQWEsSUFBRW9CLGFBQWEsRUFBQztJQUNuRDtJQUNBLE9BQUEvYSxhQUFBLENBQUFBLGFBQUEsS0FBV2dHLEtBQUs7TUFBRTdDLFVBQVUsRUFBRXdXO0lBQWE7RUFDN0M7RUFFQSxJQUFJc0Isa0JBQWtCLElBQUlDLHVCQUF1QixFQUFFO0lBQ2pELElBQUlELGtCQUFrQixLQUFLQyx1QkFBdUIsRUFBRTtNQUNsRCxJQUFNekIsVUFBVSxHQUFHLElBQUFNLHVDQUEyQixFQUFDL1QsS0FBSyxDQUFDN0MsVUFBVSxFQUFFOFgsa0JBQWtCLENBQUM7TUFDcEYsSUFBSSxDQUFDeEIsVUFBVSxFQUFFLE9BQU96VCxLQUFLO01BQzdCLElBQU1tVixZQUFXLEdBQUcxQixVQUFVLENBQUN0VyxVQUFVLENBQUNzRixTQUFTLENBQUMsVUFBQWlTLEtBQUs7UUFBQSxPQUN2RCxPQUFPQSxLQUFLLEtBQUssUUFBUSxHQUFHQSxLQUFLLEtBQUtLLGFBQWEsR0FBR0wsS0FBSyxDQUFDL1osRUFBRSxLQUFLb2EsYUFBYTtNQUFBLENBQ2xGLENBQUM7TUFDRCxJQUFJSSxZQUFXLEtBQUssQ0FBQyxDQUFDLEVBQUUsT0FBT25WLEtBQUs7TUFDcEMsSUFBSWdWLGtCQUFrQixFQUFFO1FBQ3RCLElBQU1NLFNBQVMsR0FBRzdCLFVBQVUsQ0FBQ3RXLFVBQVUsQ0FBQ3NGLFNBQVMsQ0FBQyxVQUFBaVMsS0FBSztVQUFBLE9BQ3JELE9BQU9BLEtBQUssS0FBSyxRQUFRLEdBQUdBLEtBQUssS0FBS00sa0JBQWtCLEdBQUdOLEtBQUssQ0FBQy9aLEVBQUUsS0FBS3FhLGtCQUFrQjtRQUFBLENBQzVGLENBQUM7UUFDRCxJQUFJTSxTQUFTLEtBQUssQ0FBQyxDQUFDLEVBQUUsT0FBT3RWLEtBQUs7UUFDbEMsSUFBTTJVLGtCQUFrQixHQUFHLElBQUFVLHNCQUFTLEVBQUM1QixVQUFVLENBQUN0VyxVQUFVLEVBQUVnWSxZQUFXLEVBQUVHLFNBQVMsQ0FBQztRQUNuRixJQUFNM0IsZUFBYSxHQUFHLElBQUFZLHdDQUE0QixFQUFDdlUsS0FBSyxDQUFDN0MsVUFBVSxFQUFBbkQsYUFBQSxDQUFBQSxhQUFBLEtBQzlEeVosVUFBVTtVQUNidFcsVUFBVSxFQUFFd1g7UUFBa0IsRUFDL0IsQ0FBQztRQUNGLE9BQUEzYSxhQUFBLENBQUFBLGFBQUEsS0FBV2dHLEtBQUs7VUFBRTdDLFVBQVUsRUFBRXdXO1FBQWE7TUFDN0M7TUFDQSxPQUFPM1QsS0FBSztJQUNkOztJQUVBO0lBQ0EsSUFBTTdDLFVBQVUsR0FBRyxJQUFBaVcsdUNBQTJCLEVBQUNwVCxLQUFLLENBQUM3QyxVQUFVLEVBQUU0WCxhQUFhLENBQUM7SUFDL0UsSUFBSXZVLFFBQVEsR0FBR2dVLDJCQUEyQixDQUFBeGEsYUFBQSxDQUFBQSxhQUFBLEtBQ3BDZ0csS0FBSztNQUFFN0MsVUFBVSxFQUFWQTtJQUFVLElBQ3JCO01BQUN1SSxPQUFPLEVBQUVxUCxhQUFhO01BQUVOLFlBQVksRUFBRVM7SUFBdUIsQ0FDaEUsQ0FBQztJQUVELElBQUlGLGtCQUFrQixFQUFFO01BQ3RCLElBQU12QixXQUFVLEdBQUcsSUFBQU0sdUNBQTJCLEVBQUN2VCxRQUFRLENBQUNyRCxVQUFVLEVBQUUrWCx1QkFBdUIsQ0FBQztNQUM1RixJQUFJLENBQUN6QixXQUFVLEVBQUUsT0FBT3pULEtBQUs7TUFDN0IsSUFBTW1WLGFBQVcsR0FBRzFCLFdBQVUsQ0FBQ3RXLFVBQVUsQ0FBQ3NGLFNBQVMsQ0FBQyxVQUFBaVMsS0FBSztRQUFBLE9BQUlBLEtBQUssS0FBS0ssYUFBYTtNQUFBLEVBQUM7TUFDckYsSUFBTU8sVUFBUyxHQUFHN0IsV0FBVSxDQUFDdFcsVUFBVSxDQUFDc0YsU0FBUyxDQUFDLFVBQUFpUyxLQUFLO1FBQUEsT0FBSUEsS0FBSyxLQUFLTSxrQkFBa0I7TUFBQSxFQUFDO01BQ3hGLElBQUlHLGFBQVcsS0FBSyxDQUFDLENBQUMsSUFBSUcsVUFBUyxLQUFLLENBQUMsQ0FBQyxFQUFFO1FBQzFDLElBQU1YLG1CQUFrQixHQUFHLElBQUFVLHNCQUFTLEVBQUM1QixXQUFVLENBQUN0VyxVQUFVLEVBQUVnWSxhQUFXLEVBQUVHLFVBQVMsQ0FBQztRQUNuRjlVLFFBQVEsR0FBQXhHLGFBQUEsQ0FBQUEsYUFBQSxLQUNId0csUUFBUTtVQUNYckQsVUFBVSxFQUFFLElBQUFvWCx3Q0FBNEIsRUFBQy9ULFFBQVEsQ0FBQ3JELFVBQVUsRUFBQW5ELGFBQUEsQ0FBQUEsYUFBQSxLQUN2RHlaLFdBQVU7WUFDYnRXLFVBQVUsRUFBRXdYO1VBQWtCLEVBQy9CO1FBQUMsRUFDSDtNQUNIO0lBQ0Y7SUFDQSxPQUFPblUsUUFBUTtFQUNqQjtFQUVBLElBQUksQ0FBQ3lVLGtCQUFrQixJQUFJQyx1QkFBdUIsRUFBRTtJQUNsRCxJQUFNL1gsV0FBVSxHQUFHLElBQUFpVyx1Q0FBMkIsRUFBQ3BULEtBQUssQ0FBQzdDLFVBQVUsRUFBRTRYLGFBQWEsQ0FBQztJQUMvRSxPQUFPUCwyQkFBMkIsQ0FBQXhhLGFBQUEsQ0FBQUEsYUFBQSxLQUM1QmdHLEtBQUs7TUFBRTdDLFVBQVUsRUFBVkE7SUFBVSxJQUNyQjtNQUFDdUksT0FBTyxFQUFFcVAsYUFBYTtNQUFFTixZQUFZLEVBQUVTO0lBQXVCLENBQ2hFLENBQUM7RUFDSDtFQUVBLE9BQU9sVixLQUFLO0FBQ2QsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTXVWLHFCQUFxQixHQUFBOWEsT0FBQSxDQUFBOGEscUJBQUEsR0FBRyxTQUF4QkEscUJBQXFCQSxDQUNoQ3ZWLEtBQWUsRUFBQXdWLEtBQUEsRUFFRjtFQUFBLElBRFo3YSxFQUFFLEdBQUE2YSxLQUFBLENBQUY3YSxFQUFFO0VBRUgsSUFBTXdGLEdBQUcsR0FBR2hJLE1BQU0sQ0FBQzZhLFFBQVEsQ0FBQ3JZLEVBQUUsQ0FBQztFQUMzQjtFQUNBeEMsTUFBTSxDQUFDd0MsRUFBRSxDQUFDLEdBQ1ZxRixLQUFLLENBQUNoRCxNQUFNLENBQUN5RixTQUFTLENBQUMsVUFBQVIsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ3RILEVBQUUsS0FBS0EsRUFBRTtFQUFBLEVBQUM7RUFDNUMsSUFBSXdGLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQ0gsS0FBSyxDQUFDaEQsTUFBTSxDQUFDbUQsR0FBRyxDQUFDLEVBQUU7SUFDakNpSixlQUFPLENBQUNzSixJQUFJLFVBQUF2TCxNQUFBLENBQVVoSCxHQUFHLDZCQUEwQixDQUFDO0lBQ3BELE9BQU9ILEtBQUs7RUFDZDtFQUVBLElBQU9oRCxNQUFNLEdBQUlnRCxLQUFLLENBQWZoRCxNQUFNO0VBQ2IsSUFBTXlZLFFBQVEsR0FBR3pZLE1BQU0sQ0FBQ21ELEdBQUcsQ0FBQztFQUU1QixJQUFNdVYscUJBQXFCLEdBQUcsSUFBQUMsb0NBQXdCLEVBQUMzVixLQUFLLENBQUM3QyxVQUFVLEVBQUVzWSxRQUFRLENBQUM5YSxFQUFFLENBQUM7RUFDckYsSUFBSWliLFFBQVEsY0FBQXpPLE1BQUEsQ0FBY3NPLFFBQVEsQ0FBQzNhLE1BQU0sQ0FBQ0YsS0FBSyxDQUFFO0VBQ2pELElBQUlpYixPQUFPLEdBQUcsQ0FBQztFQUNmO0VBQ0EsT0FBTzdZLE1BQU0sQ0FBQ2dGLElBQUksQ0FBQyxVQUFBQyxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDbkgsTUFBTSxDQUFDRixLQUFLLEtBQUtnYixRQUFRO0VBQUEsRUFBQyxFQUFFO0lBQ3BEQSxRQUFRLGNBQUF6TyxNQUFBLENBQWNzTyxRQUFRLENBQUMzYSxNQUFNLENBQUNGLEtBQUssT0FBQXVNLE1BQUEsQ0FBSSxFQUFFME8sT0FBTyxDQUFFO0VBQzVEOztFQUVBO0VBQ0EsSUFBTWhPLFdBQVcsR0FBRyxJQUFBOUUsOEJBQWMsRUFBQzBTLFFBQVEsRUFBRXpWLEtBQUssQ0FBQ1QsTUFBTSxDQUFDOztFQUUxRDtFQUNBLElBQUksRUFBQ3NJLFdBQVcsYUFBWEEsV0FBVyxlQUFYQSxXQUFXLENBQUUvTSxNQUFNLEdBQUU7SUFDeEIsT0FBT2tGLEtBQUs7RUFDZDtFQUNBNkgsV0FBVyxDQUFDL00sTUFBTSxDQUFDRixLQUFLLEdBQUdnYixRQUFRO0VBQ25DL04sV0FBVyxDQUFDbE4sRUFBRSxHQUFHLElBQUFtYiwyQkFBYyxFQUFDQyx1QkFBZSxDQUFDOztFQUVoRDtFQUNBLElBQUl6VCxTQUFTLEdBQUdpUSxlQUFlLENBQUN2UyxLQUFLLEVBQUU7SUFBQ2xGLE1BQU0sRUFBRStNO0VBQVcsQ0FBQyxDQUFDO0VBQzdEO0VBQ0EsSUFBTXpGLFFBQVEsR0FBR0UsU0FBUyxDQUFDdEYsTUFBTSxDQUFDc0YsU0FBUyxDQUFDdEYsTUFBTSxDQUFDdkUsTUFBTSxHQUFHLENBQUMsQ0FBQzs7RUFFOUQ7RUFDQSxJQUFNdWQsV0FBVyxHQUFHLElBQUFDLG1DQUF1QixFQUFDalcsS0FBSyxDQUFDN0MsVUFBVSxFQUFFc1ksUUFBUSxDQUFDOWEsRUFBRSxDQUFDO0VBRTFFLElBQUlxYixXQUFXLEVBQUU7SUFDZjtJQUNBLElBQU1FLDBCQUEwQixHQUFHNVQsU0FBUyxDQUFDbkYsVUFBVSxDQUFDL0QsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNoRSxJQUFNK2MsVUFBVSxHQUFHSCxXQUFXLENBQUM3WSxVQUFVLENBQUNzRixTQUFTLENBQUMsVUFBQWhNLENBQUM7TUFBQSxPQUFJQSxDQUFDLEtBQUtnZixRQUFRLENBQUM5YSxFQUFFO0lBQUEsRUFBQztJQUMzRSxJQUFNZ2Esa0JBQWtCLEdBQUcsSUFBQXlCLGtCQUFXLEVBQUNKLFdBQVcsQ0FBQzdZLFVBQVUsRUFBRWdaLFVBQVUsRUFBRS9ULFFBQVEsQ0FBQ3pILEVBQUUsQ0FBQztJQUN2RixJQUFNMGIsWUFBWSxHQUFBcmMsYUFBQSxDQUFBQSxhQUFBLEtBQU9nYyxXQUFXO01BQUU3WSxVQUFVLEVBQUV3WDtJQUFrQixFQUFDO0lBQ3JFLElBQU1oQixhQUFhLEdBQUcsSUFBQVksd0NBQTRCLEVBQ2hEMkIsMEJBQTBCLEVBQzFCRyxZQUNGLENBQUM7SUFDRC9ULFNBQVMsR0FBRytRLG1CQUFtQixDQUFDL1EsU0FBUyxFQUFFO01BQUNpUixLQUFLLEVBQUVJO0lBQWEsQ0FBQyxDQUFDO0VBQ3BFLENBQUMsTUFBTTtJQUNMO0lBQ0EsSUFBTUEsZUFBYSxHQUFHLElBQUF5QyxrQkFBVyxFQUMvQjlULFNBQVMsQ0FBQ25GLFVBQVUsQ0FBQy9ELEtBQUssQ0FBQyxDQUFDLEVBQUVrSixTQUFTLENBQUNuRixVQUFVLENBQUMxRSxNQUFNLENBQUMsRUFDMURpZCxxQkFBcUIsRUFDckJ0VCxRQUFRLENBQUN6SCxFQUNYLENBQUM7SUFDRDJILFNBQVMsR0FBRytRLG1CQUFtQixDQUFDL1EsU0FBUyxFQUFFO01BQUNpUixLQUFLLEVBQUVJO0lBQWEsQ0FBQyxDQUFDO0VBQ3BFO0VBRUEsT0FBTzlTLHFCQUFxQixDQUFDeUIsU0FBUyxDQUFDO0FBQ3pDLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1nVSxnQkFBZ0IsR0FBQTdiLE9BQUEsQ0FBQTZiLGdCQUFBLEdBQUcsU0FBbkJBLGdCQUFnQkEsQ0FDM0J0VyxLQUFlLEVBQ2Z3QixNQUE4QyxFQUNqQztFQUFBLElBQUErVSxjQUFBLEVBQUFDLGVBQUEsRUFBQUMsZUFBQTtFQUNiLElBQ0UsRUFBQUYsY0FBQSxHQUFBL1UsTUFBTSxDQUFDMUcsTUFBTSxjQUFBeWIsY0FBQSx1QkFBYkEsY0FBQSxDQUFlaFUsSUFBSSxNQUFLbVUsa0NBQXVCLENBQUNuVSxJQUFJLElBQ3BEdkMsS0FBSyxDQUFDdEMsT0FBTyxDQUFDZ0csSUFBSSxDQUFDLFVBQUFpVCxNQUFNO0lBQUEsT0FBSUEsTUFBTSxDQUFDcFUsSUFBSSxLQUFLbVUsa0NBQXVCLENBQUNuVSxJQUFJO0VBQUEsRUFBQyxFQUMxRTtJQUNBNkcsZUFBTyxDQUFDc0osSUFBSSw0QkFBQXZMLE1BQUEsQ0FBNEJ1UCxrQ0FBdUIsQ0FBQ3BkLElBQUksWUFBUyxDQUFDO0lBQzlFLE9BQU8wRyxLQUFLO0VBQ2Q7RUFFQSxJQUNFLEVBQUF3VyxlQUFBLEdBQUFoVixNQUFNLENBQUMxRyxNQUFNLGNBQUEwYixlQUFBLHVCQUFiQSxlQUFBLENBQWVqVSxJQUFJLE1BQUtxVSw0QkFBaUIsSUFDekM1VyxLQUFLLENBQUN0QyxPQUFPLENBQUNnRyxJQUFJLENBQ2hCLFVBQUFpVCxNQUFNO0lBQUEsT0FBSUEsTUFBTSxDQUFDcFUsSUFBSSxLQUFLcVUsNEJBQWlCLElBQUlELE1BQU0sQ0FBQ3BVLElBQUksS0FBS3NVLDJCQUFnQjtFQUFBLENBQ2pGLENBQUMsRUFDRDtJQUNBek4sZUFBTyxDQUFDc0osSUFBSSxDQUFDLG9DQUFvQyxDQUFDO0lBQ2xELE9BQU8xUyxLQUFLO0VBQ2Q7RUFFQSxJQUNFLEVBQUF5VyxlQUFBLEdBQUFqVixNQUFNLENBQUMxRyxNQUFNLGNBQUEyYixlQUFBLHVCQUFiQSxlQUFBLENBQWVsVSxJQUFJLE1BQUtzVSwyQkFBZ0IsSUFDeEM3VyxLQUFLLENBQUN0QyxPQUFPLENBQUNnRyxJQUFJLENBQ2hCLFVBQUFpVCxNQUFNO0lBQUEsT0FBSUEsTUFBTSxDQUFDcFUsSUFBSSxLQUFLc1UsMkJBQWdCLElBQUlGLE1BQU0sQ0FBQ3BVLElBQUksS0FBS3FVLDRCQUFpQjtFQUFBLENBQ2pGLENBQUMsRUFDRDtJQUNBeE4sZUFBTyxDQUFDc0osSUFBSSxDQUFDLG9DQUFvQyxDQUFDO0lBQ2xELE9BQU8xUyxLQUFLO0VBQ2Q7RUFFQSxJQUFNOFcsU0FBUyxHQUFHLElBQUFDLHFCQUFZLEVBQUN2VixNQUFNLENBQUMxRyxNQUFNLENBQUM7O0VBRTdDO0VBQ0FrRixLQUFLLENBQUN0QyxPQUFPLENBQUN4RCxPQUFPLENBQUMsVUFBQXljLE1BQU07SUFBQSxPQUFJQSxNQUFNLENBQUNLLFFBQVEsQ0FBQztNQUFDcE8sY0FBYyxFQUFFO0lBQUssQ0FBQyxDQUFDO0VBQUEsRUFBQztFQUV6RSxJQUFNbEwsT0FBTyxNQUFBeUosTUFBQSxLQUFBQyxtQkFBQSxhQUFPcEgsS0FBSyxDQUFDdEMsT0FBTyxJQUFFb1osU0FBUyxFQUFDO0VBQzdDLElBQU1uWixXQUFXLEdBQUcsSUFBQXNaLHFCQUFjLEVBQUN2WixPQUFPLEdBQUdvWixTQUFTLENBQUNuYyxFQUFFLEVBQUF3TSxNQUFBLEtBQUFDLG1CQUFBLGFBQUtwSCxLQUFLLENBQUNyQyxXQUFXLEVBQUMsQ0FBQztFQUVqRixPQUFBM0QsYUFBQSxDQUFBQSxhQUFBLEtBQ0tnRyxLQUFLO0lBQ1J0QyxPQUFPLEVBQVBBLE9BQU87SUFDUEMsV0FBVyxFQUFYQTtFQUFXO0FBRWYsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTXVaLG1CQUFtQixHQUFBemMsT0FBQSxDQUFBeWMsbUJBQUEsR0FBRyxTQUF0QkEsbUJBQW1CQSxDQUM5QmxYLEtBQWUsRUFBQW1YLE1BQUEsRUFFRjtFQUFBLElBRFp4YyxFQUFFLEdBQUF3YyxNQUFBLENBQUZ4YyxFQUFFO0VBRUgsSUFBTXdGLEdBQUcsR0FBR0gsS0FBSyxDQUFDdEMsT0FBTyxDQUFDK0UsU0FBUyxDQUFDLFVBQUFSLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUN0SCxFQUFFLEtBQUtBLEVBQUU7RUFBQSxFQUFDO0VBQ3JELElBQUl3RixHQUFHLEdBQUcsQ0FBQyxJQUFJQSxHQUFHLElBQUlILEtBQUssQ0FBQ3RDLE9BQU8sQ0FBQ2pGLE1BQU0sRUFBRTtJQUMxQzJRLGVBQU8sQ0FBQ3NKLElBQUksMENBQUF2TCxNQUFBLENBQTBDeE0sRUFBRSxDQUFFLENBQUM7SUFDM0QsT0FBT3FGLEtBQUs7RUFDZDtFQUVBLElBQU90QyxPQUFPLEdBQWlCc0MsS0FBSyxDQUE3QnRDLE9BQU87SUFBRUMsV0FBVyxHQUFJcUMsS0FBSyxDQUFwQnJDLFdBQVc7RUFDM0IsSUFBTXlaLGNBQWMsR0FBRzFaLE9BQU8sQ0FBQ3lDLEdBQUcsQ0FBQztFQUNuQyxPQUFBbkcsYUFBQSxDQUFBQSxhQUFBLEtBQ0tnRyxLQUFLO0lBQ1I7SUFDQXRDLE9BQU8sRUFBRSxJQUFBd1YsOEJBQWEsRUFBQ2tFLGNBQWMsQ0FBQ3pjLEVBQUUsQ0FBQyxDQUFDK0MsT0FBTyxDQUFDO0lBQ2xEQyxXQUFXLEVBQUVBLFdBQVcsQ0FBQy9ELE1BQU0sQ0FBQyxVQUFBeWQsUUFBUTtNQUFBLE9BQUlBLFFBQVEsS0FBS0QsY0FBYyxDQUFDemMsRUFBRTtJQUFBO0VBQUM7QUFFL0UsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTTJjLG9CQUFvQixHQUFBN2MsT0FBQSxDQUFBNmMsb0JBQUEsR0FBRyxTQUF2QkEsb0JBQW9CQSxDQUMvQnRYLEtBQWUsRUFBQXVYLE1BQUE7RUFBQSxJQUNkaEUsS0FBSyxHQUFBZ0UsTUFBQSxDQUFMaEUsS0FBSztFQUFBLE9BQUF2WixhQUFBLENBQUFBLGFBQUEsS0FFSGdHLEtBQUs7SUFDUnJDLFdBQVcsRUFBRSxJQUFBc1oscUJBQWMsRUFBQ2pYLEtBQUssQ0FBQ3RDLE9BQU8sTUFBQTBKLG1CQUFBLGFBQU1tTSxLQUFLLENBQUM7RUFBQztBQUFBLENBQ3REOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNaUUsbUJBQW1CLEdBQUEvYyxPQUFBLENBQUErYyxtQkFBQSxHQUFHLFNBQXRCQSxtQkFBbUJBLENBQzlCeFgsS0FBZSxFQUFBeVgsTUFBQSxFQUVGO0VBQUEsSUFEWjljLEVBQUUsR0FBQThjLE1BQUEsQ0FBRjljLEVBQUU7SUFBRStKLEtBQUssR0FBQStTLE1BQUEsQ0FBTC9TLEtBQUs7RUFFVixJQUFNdkUsR0FBRyxHQUFHSCxLQUFLLENBQUN0QyxPQUFPLENBQUMrRSxTQUFTLENBQUMsVUFBQVIsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ3RILEVBQUUsS0FBS0EsRUFBRTtFQUFBLEVBQUM7RUFDckQsSUFBSXdGLEdBQUcsR0FBRyxDQUFDLElBQUlBLEdBQUcsSUFBSUgsS0FBSyxDQUFDdEMsT0FBTyxDQUFDakYsTUFBTSxFQUFFO0lBQzFDMlEsZUFBTyxDQUFDc0osSUFBSSwwQ0FBQXZMLE1BQUEsQ0FBMEN4TSxFQUFFLENBQUUsQ0FBQztJQUMzRCxPQUFPcUYsS0FBSztFQUNkO0VBRUEsSUFBSXJDLFdBQVcsR0FBR3FDLEtBQUssQ0FBQ3JDLFdBQVc7RUFDbkMsSUFBSStHLEtBQUssQ0FBQy9KLEVBQUUsS0FBSzhDLFNBQVMsSUFBSWlILEtBQUssQ0FBQy9KLEVBQUUsS0FBS0EsRUFBRSxFQUFFO0lBQzdDLElBQU0rYyxJQUFJLEdBQUcxWCxLQUFLLENBQUN0QyxPQUFPLENBQUMrRSxTQUFTLENBQUMsVUFBQVIsQ0FBQztNQUFBLE9BQUlBLENBQUMsQ0FBQ3RILEVBQUUsS0FBSytKLEtBQUssQ0FBQy9KLEVBQUU7SUFBQSxFQUFDO0lBQzVELElBQUkrYyxJQUFJLElBQUksQ0FBQyxFQUFFO01BQ2J0TyxlQUFPLENBQUNzSixJQUFJLGtEQUFBdkwsTUFBQSxDQUFrRHhNLEVBQUUsQ0FBRSxDQUFDO01BQ25FLE9BQU9xRixLQUFLO0lBQ2Q7SUFFQXJDLFdBQVcsR0FBR0EsV0FBVyxDQUFDeUMsR0FBRyxDQUFDLFVBQUF1WCxhQUFhO01BQUEsT0FDekNBLGFBQWEsS0FBS2hkLEVBQUUsR0FBSStKLEtBQUssQ0FBQy9KLEVBQUUsR0FBY2dkLGFBQWE7SUFBQSxDQUM3RCxDQUFDO0VBQ0g7RUFFQSxJQUFNQyxVQUFVLE9BQUF4USxtQkFBQSxhQUFPcEgsS0FBSyxDQUFDdEMsT0FBTyxDQUFDO0VBQ3JDa2EsVUFBVSxDQUFDelgsR0FBRyxDQUFDLENBQUM2VyxRQUFRLENBQUN0UyxLQUFLLENBQUM7RUFFL0IsT0FBQTFLLGFBQUEsQ0FBQUEsYUFBQSxLQUNLZ0csS0FBSztJQUNSdEMsT0FBTyxFQUFFa2EsVUFBVTtJQUNuQmphLFdBQVcsRUFBWEE7RUFBVztBQUVmLENBQUM7O0FBRUQ7O0FBRUEsU0FBU2thLGlCQUFpQkEsQ0FBQy9jLE1BQStCLEVBQWM7RUFBQSxJQUFBZ2QsWUFBQSxFQUFBQyxVQUFBLEVBQUFDLGlCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGlCQUFBLEVBQUFDLG1CQUFBLEVBQUFDLGFBQUEsRUFBQUMsaUJBQUEsRUFBQUMsaUJBQUEsRUFBQUMsaUJBQUEsRUFBQUMsa0JBQUEsRUFBQUMscUJBQUEsRUFBQUMsVUFBQSxFQUFBQyxNQUFBLEVBQUFDLFdBQUEsRUFBQUMsT0FBQSxFQUFBQyxXQUFBLEVBQUFDLE9BQUEsRUFBQUMsZUFBQTtFQUN0RSxJQUFNQyxJQUFJLElBQUFuQixZQUFBLEdBQUdoZCxNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBRW1lLElBQUksY0FBQW5CLFlBQUEsY0FBQUEsWUFBQSxHQUFJb0Isa0NBQXVCO0VBQ3BELElBQU1DLElBQUksR0FBRztJQUNYeGUsRUFBRSxHQUFBb2QsVUFBQSxHQUFFamQsTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQUVILEVBQUUsY0FBQW9kLFVBQUEsY0FBQUEsVUFBQSxHQUFJLElBQUFqQywyQkFBYyxFQUFDLENBQUMsQ0FBQztJQUNuQ21ELElBQUksRUFBSkEsSUFBSTtJQUNKeFksU0FBUyxHQUFBdVgsaUJBQUEsR0FBRWxkLE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFFMkYsU0FBUyxjQUFBdVgsaUJBQUEsY0FBQUEsaUJBQUEsR0FBSSxJQUFJO0lBQ3BDb0IsUUFBUSxHQUFBbkIsZ0JBQUEsR0FBRW5kLE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFFc2UsUUFBUSxjQUFBbkIsZ0JBQUEsY0FBQUEsZ0JBQUEsR0FBSSxJQUFJO0lBQ2xDb0IsU0FBUyxHQUFBbkIsaUJBQUEsR0FBRXBkLE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFFdWUsU0FBUyxjQUFBbkIsaUJBQUEsY0FBQUEsaUJBQUEsR0FBSSxJQUFJO0lBQ3BDb0IsV0FBVyxHQUFBbkIsbUJBQUEsR0FBRXJkLE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFFd2UsV0FBVyxjQUFBbkIsbUJBQUEsY0FBQUEsbUJBQUEsR0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQXNCO0lBQ2hFdmQsS0FBSyxHQUFBd2QsYUFBQSxHQUFFdGQsTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQUVGLEtBQUssY0FBQXdkLGFBQUEsY0FBQUEsYUFBQSxHQUFJLGdCQUFnQjtJQUN4Q21CLFNBQVMsR0FBQWxCLGlCQUFBLEdBQUV2ZCxNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBRXllLFNBQVMsY0FBQWxCLGlCQUFBLGNBQUFBLGlCQUFBLEdBQUltQix3Q0FBNkI7SUFDN0RDLFNBQVMsR0FBQW5CLGlCQUFBLEdBQUV4ZCxNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBRTJlLFNBQVMsY0FBQW5CLGlCQUFBLGNBQUFBLGlCQUFBLEdBQUlvQix3Q0FBNkI7SUFDN0RDLFNBQVMsR0FBQXBCLGlCQUFBLEdBQUV6ZCxNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBRTZlLFNBQVMsY0FBQXBCLGlCQUFBLGNBQUFBLGlCQUFBLEdBQUlxQix3Q0FBNkI7SUFDN0RDLFVBQVUsR0FBQXJCLGtCQUFBLEdBQUUxZCxNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBRStlLFVBQVUsY0FBQXJCLGtCQUFBLGNBQUFBLGtCQUFBLEdBQUlzQix5Q0FBOEI7SUFDaEVDLGlCQUFpQixHQUFBdEIscUJBQUEsR0FBRTNkLE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFFaWYsaUJBQWlCLGNBQUF0QixxQkFBQSxjQUFBQSxxQkFBQSxHQUFLLFFBQWtCO0lBQ25FN1MsUUFBUSxFQUFFOUssTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQUU4SztFQUNwQixDQUFDO0VBRUQsUUFBUXFULElBQUk7SUFDVixLQUFLZSx5QkFBYyxDQUFDQyxLQUFLO01BQ3ZCLE9BQUFqZ0IsYUFBQSxDQUFBQSxhQUFBLEtBQ0ttZixJQUFJO1FBQ1BGLElBQUksRUFBRWUseUJBQWMsQ0FBQ0MsS0FBSztRQUMxQkMsU0FBUyxHQUFBeEIsVUFBQSxHQUFHNWQsTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQVVvZixTQUFTLGNBQUF4QixVQUFBLGNBQUFBLFVBQUEsR0FBSXlCLHdDQUE2QjtRQUN0RUMsS0FBSyxHQUFBekIsTUFBQSxHQUFHN2QsTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQVVzZixLQUFLLGNBQUF6QixNQUFBLGNBQUFBLE1BQUEsR0FBSTBCO01BQXdCO0lBRTdELEtBQUtMLHlCQUFjLENBQUNNLEtBQUs7TUFDdkIsT0FBQXRnQixhQUFBLENBQUFBLGFBQUEsS0FDS21mLElBQUk7UUFDUEYsSUFBSSxFQUFFZSx5QkFBYyxDQUFDTSxLQUFLO1FBQzFCSixTQUFTLEdBQUF0QixXQUFBLEdBQUc5ZCxNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBVW9mLFNBQVMsY0FBQXRCLFdBQUEsY0FBQUEsV0FBQSxHQUFJdUIsd0NBQTZCO1FBQ3RFQyxLQUFLLEdBQUF2QixPQUFBLEdBQUcvZCxNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBVXNmLEtBQUssY0FBQXZCLE9BQUEsY0FBQUEsT0FBQSxHQUFJd0I7TUFBd0I7SUFFN0QsS0FBS0wseUJBQWMsQ0FBQ08sTUFBTTtNQUN4QixPQUFBdmdCLGFBQUEsQ0FBQUEsYUFBQSxLQUNLbWYsSUFBSTtRQUNQRixJQUFJLEVBQUVlLHlCQUFjLENBQUNPLE1BQU07UUFDM0JMLFNBQVMsR0FBQXBCLFdBQUEsR0FBR2hlLE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFVb2YsU0FBUyxjQUFBcEIsV0FBQSxjQUFBQSxXQUFBLEdBQUlxQix3Q0FBNkI7UUFDdEVDLEtBQUssR0FBQXJCLE9BQUEsR0FBR2plLE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFVc2YsS0FBSyxjQUFBckIsT0FBQSxjQUFBQSxPQUFBLEdBQUlzQixtQ0FBd0I7UUFDekRHLGNBQWMsR0FBQXhCLGVBQUEsR0FBR2xlLE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFVMGYsY0FBYyxjQUFBeEIsZUFBQSxjQUFBQSxlQUFBLEdBQUk7TUFBSTtJQUUzRCxLQUFLZ0IseUJBQWMsQ0FBQ1MsSUFBSTtJQUN4QjtNQUNFLE9BQUF6Z0IsYUFBQSxDQUFBQSxhQUFBLEtBQ0ttZixJQUFJO1FBQ1BGLElBQUksRUFBRWUseUJBQWMsQ0FBQ1M7TUFBSTtFQUUvQjtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNQyxvQkFBb0IsR0FBQWpnQixPQUFBLENBQUFpZ0Isb0JBQUEsR0FBRyxTQUF2QkEsb0JBQW9CQSxDQUMvQjFhLEtBQWUsRUFDZndCLE1BQWtELEVBQ3JDO0VBQ2IsSUFBTW1aLGFBQWEsR0FBRzlDLGlCQUFpQixDQUFDclcsTUFBTSxDQUFDMUcsTUFBTSxDQUFDO0VBQ3RELE9BQUFkLGFBQUEsQ0FBQUEsYUFBQSxLQUNLZ0csS0FBSztJQUNScEMsV0FBVyxHQUFHK2MsYUFBYSxFQUFBeFQsTUFBQSxLQUFBQyxtQkFBQSxhQUFLcEgsS0FBSyxDQUFDcEMsV0FBVyxFQUFDO0lBQ2xERSxvQkFBb0IsRUFBRTZjLGFBQWEsQ0FBQ2hnQixFQUFFO0lBQ3RDb0QsdUJBQXVCLEVBQUU7RUFBSTtBQUVqQyxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNNmMsdUJBQXVCLEdBQUFuZ0IsT0FBQSxDQUFBbWdCLHVCQUFBLEdBQUcsU0FBMUJBLHVCQUF1QkEsQ0FDbEM1YSxLQUFlLEVBQUE2YSxNQUFBLEVBRUY7RUFBQSxJQURabGdCLEVBQUUsR0FBQWtnQixNQUFBLENBQUZsZ0IsRUFBRTtFQUVILE9BQUFYLGFBQUEsQ0FBQUEsYUFBQSxLQUNLZ0csS0FBSztJQUNScEMsV0FBVyxFQUFFb0MsS0FBSyxDQUFDcEMsV0FBVyxDQUFDaEUsTUFBTSxDQUFDLFVBQUFiLENBQUM7TUFBQSxPQUFJQSxDQUFDLENBQUM0QixFQUFFLEtBQUtBLEVBQUU7SUFBQSxFQUFDO0lBQ3ZEbUQsb0JBQW9CLEVBQUVrQyxLQUFLLENBQUNsQyxvQkFBb0IsS0FBS25ELEVBQUUsR0FBRyxJQUFJLEdBQUdxRixLQUFLLENBQUNsQyxvQkFBb0I7SUFDM0ZDLHVCQUF1QixFQUNyQmlDLEtBQUssQ0FBQ2xDLG9CQUFvQixLQUFLbkQsRUFBRSxHQUFHLEtBQUssR0FBR3FGLEtBQUssQ0FBQ2pDO0VBQXVCO0FBRS9FLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU0rYyx1QkFBdUIsR0FBQXJnQixPQUFBLENBQUFxZ0IsdUJBQUEsR0FBRyxTQUExQkEsdUJBQXVCQSxDQUNsQzlhLEtBQWUsRUFBQSthLE1BQUEsRUFFRjtFQUFBLElBRFpwZ0IsRUFBRSxHQUFBb2dCLE1BQUEsQ0FBRnBnQixFQUFFO0lBQUVHLE1BQU0sR0FBQWlnQixNQUFBLENBQU5qZ0IsTUFBTTtFQUVYLElBQU1xRixHQUFHLEdBQUdILEtBQUssQ0FBQ3BDLFdBQVcsQ0FBQzZFLFNBQVMsQ0FBQyxVQUFBMUosQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQzRCLEVBQUUsS0FBS0EsRUFBRTtFQUFBLEVBQUM7RUFDekQsSUFBSXdGLEdBQUcsR0FBRyxDQUFDLEVBQUU7SUFDWGlKLGVBQU8sQ0FBQ3NKLElBQUksOENBQUF2TCxNQUFBLENBQThDeE0sRUFBRSxDQUFFLENBQUM7SUFDL0QsT0FBT3FGLEtBQUs7RUFDZDtFQUNBLElBQU1lLElBQUksR0FBR2YsS0FBSyxDQUFDcEMsV0FBVyxDQUFDdUMsR0FBRyxDQUFDO0VBQ25DLElBQUk2YSxjQUEwQjtFQUU5QixJQUFJbGdCLE1BQU0sQ0FBQ21lLElBQUksSUFBSW5lLE1BQU0sQ0FBQ21lLElBQUksS0FBS2xZLElBQUksQ0FBQ2tZLElBQUksRUFBRTtJQUM1QytCLGNBQWMsR0FBR25ELGlCQUFpQixDQUFBN2QsYUFBQSxDQUFBQSxhQUFBLEtBQUsrRyxJQUFJLEdBQUtqRyxNQUFNLENBQTJCLENBQUM7RUFDcEYsQ0FBQyxNQUFNO0lBQ0xrZ0IsY0FBYyxHQUFBaGhCLGFBQUEsQ0FBQUEsYUFBQSxLQUFPK0csSUFBSSxHQUFLakcsTUFBTSxDQUFlO0VBQ3JEO0VBRUEsSUFBTW1nQixjQUFjLE9BQUE3VCxtQkFBQSxhQUFPcEgsS0FBSyxDQUFDcEMsV0FBVyxDQUFDO0VBQzdDcWQsY0FBYyxDQUFDOWEsR0FBRyxDQUFDLEdBQUc2YSxjQUFjO0VBQ3BDLE9BQUFoaEIsYUFBQSxDQUFBQSxhQUFBLEtBQ0tnRyxLQUFLO0lBQ1JwQyxXQUFXLEVBQUVxZDtFQUFjO0FBRS9CLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1DLDBCQUEwQixHQUFBemdCLE9BQUEsQ0FBQXlnQiwwQkFBQSxHQUFHLFNBQTdCQSwwQkFBMEJBLENBQ3JDbGIsS0FBZSxFQUFBbWIsTUFBQSxFQUVGO0VBQUEsSUFEWnhnQixFQUFFLEdBQUF3Z0IsTUFBQSxDQUFGeGdCLEVBQUU7RUFFSCxJQUFNOGEsUUFBUSxHQUFHelYsS0FBSyxDQUFDcEMsV0FBVyxDQUFDb0UsSUFBSSxDQUFDLFVBQUFqSixDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDNEIsRUFBRSxLQUFLQSxFQUFFO0VBQUEsRUFBQztFQUN6RCxJQUFJLENBQUM4YSxRQUFRLEVBQUU7SUFDYnJNLGVBQU8sQ0FBQ3NKLElBQUksaURBQUF2TCxNQUFBLENBQWlEeE0sRUFBRSxDQUFFLENBQUM7SUFDbEUsT0FBT3FGLEtBQUs7RUFDZDtFQUNBLElBQU0yYSxhQUFhLEdBQUEzZ0IsYUFBQSxDQUFBQSxhQUFBLEtBQ2QsSUFBQW9oQixxQkFBUyxFQUFDM0YsUUFBUSxDQUFDO0lBQ3RCOWEsRUFBRSxFQUFFLElBQUFtYiwyQkFBYyxFQUFDLENBQUMsQ0FBQztJQUNyQmxiLEtBQUssYUFBQXVNLE1BQUEsQ0FBYXNPLFFBQVEsQ0FBQzdhLEtBQUs7RUFBRSxFQUNuQztFQUNELE9BQUFaLGFBQUEsQ0FBQUEsYUFBQSxLQUNLZ0csS0FBSztJQUNScEMsV0FBVyxHQUFHK2MsYUFBYSxFQUFBeFQsTUFBQSxLQUFBQyxtQkFBQSxhQUFLcEgsS0FBSyxDQUFDcEMsV0FBVyxFQUFDO0lBQ2xERSxvQkFBb0IsRUFBRTZjLGFBQWEsQ0FBQ2hnQixFQUFFO0lBQ3RDb0QsdUJBQXVCLEVBQUU7RUFBSztBQUVsQyxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNc2QsNEJBQTRCLEdBQUE1Z0IsT0FBQSxDQUFBNGdCLDRCQUFBLEdBQUcsU0FBL0JBLDRCQUE0QkEsQ0FDdkNyYixLQUFlLEVBQUFzYixNQUFBLEVBRUY7RUFBQSxJQURaM2dCLEVBQUUsR0FBQTJnQixNQUFBLENBQUYzZ0IsRUFBRTtJQUFFNGdCLGFBQWEsR0FBQUQsTUFBQSxDQUFiQyxhQUFhO0VBRWxCLElBQ0U1Z0IsRUFBRSxLQUFLcUYsS0FBSyxDQUFDbEMsb0JBQW9CLElBQ2pDLENBQUN5ZCxhQUFhLGFBQWJBLGFBQWEsY0FBYkEsYUFBYSxHQUFJLEtBQUssTUFBTXZiLEtBQUssQ0FBQ2pDLHVCQUF1QixFQUMxRDtJQUNBLE9BQU9pQyxLQUFLO0VBQ2Q7RUFDQSxPQUFBaEcsYUFBQSxDQUFBQSxhQUFBLEtBQ0tnRyxLQUFLO0lBQ1JsQyxvQkFBb0IsRUFBRW5ELEVBQUU7SUFDeEJvRCx1QkFBdUIsRUFBRXdkLGFBQWEsYUFBYkEsYUFBYSxjQUFiQSxhQUFhLEdBQUk7RUFBSztBQUVuRCxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxvQkFBb0JBLENBQ2xDeGIsS0FBUSxFQUNSd0IsTUFBa0QsRUFDL0M7RUFDSDtFQUNBLElBQWVpYSxVQUFVLEdBQUlqYSxNQUFNLENBQTVCVyxNQUFNO0VBQ2IsSUFBTzVFLFFBQVEsR0FBSXlDLEtBQUssQ0FBakJ6QyxRQUFROztFQUVmO0VBQ0EsSUFBSSxDQUFDQSxRQUFRLENBQUNrZSxVQUFVLENBQUMsRUFBRTtJQUN6QixPQUFPemIsS0FBSztFQUNkO0VBRUEsSUFDRWhELE1BQU0sR0FHSmdELEtBQUssQ0FIUGhELE1BQU07SUFBQTBlLGVBQUEsR0FHSjFiLEtBQUssQ0FEUHpDLFFBQVE7SUFBaUIyRSxPQUFPLEdBQUF3WixlQUFBLENBQXBCRCxVQUFVO0lBQWVFLFdBQVcsT0FBQTdXLHlCQUFBLGFBQUE0VyxlQUFBLEdBQXBDRCxVQUFVLEVBQUFyYixHQUFBLENBQUF2SSxjQUFBO0VBR3hCLElBQU0rakIsY0FBYyxHQUFHNWUsTUFBTSxDQUFDcEQsTUFBTSxDQUFDLFVBQUFxSSxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDbkgsTUFBTSxDQUFDcUgsTUFBTSxLQUFLc1osVUFBVTtFQUFBLEVBQUMsQ0FBQ3JiLEdBQUcsQ0FBQyxVQUFBNkIsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ3RILEVBQUU7RUFBQSxFQUFDOztFQUV4RjtFQUNBLElBQUk2RixRQUFRLEdBQUdvYixjQUFjLENBQUNsUSxNQUFNLENBQUMsVUFBQ0MsSUFBSSxFQUFFaFIsRUFBRTtJQUFBLE9BQUttWSxrQkFBa0IsQ0FBQ25ILElBQUksRUFBRTtNQUFDaFIsRUFBRSxFQUFGQTtJQUFFLENBQUMsQ0FBQztFQUFBLEdBQUFYLGFBQUEsQ0FBQUEsYUFBQSxLQUM1RWdHLEtBQUs7SUFDUnpDLFFBQVEsRUFBRW9lO0VBQVcsRUFDdEIsQ0FBQzs7RUFFRjtFQUNBLElBQU10ZSxPQUFpQixHQUFHLEVBQUU7RUFBQyxJQUFBd2UsVUFBQSxHQUFBempCLDBCQUFBLENBQ1JvSSxRQUFRLENBQUNuRCxPQUFPO0lBQUF5ZSxNQUFBO0VBQUE7SUFBckMsS0FBQUQsVUFBQSxDQUFBampCLENBQUEsTUFBQWtqQixNQUFBLEdBQUFELFVBQUEsQ0FBQWhsQixDQUFBLElBQUFnQyxJQUFBLEdBQXVDO01BQUEsSUFBNUJlLE1BQU0sR0FBQWtpQixNQUFBLENBQUFoakIsS0FBQTtNQUNmLElBQU1pVSxVQUFVLEdBQUduVCxNQUFNLENBQUN1SSxNQUFNLENBQUM0WixPQUFPLENBQUNOLFVBQVUsQ0FBQztNQUNwRCxJQUFJMU8sVUFBVSxJQUFJLENBQUMsSUFBSW5ULE1BQU0sQ0FBQ3VJLE1BQU0sQ0FBQzFKLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDL0M7UUFDQTRFLE9BQU8sQ0FBQ3ZELElBQUksQ0FBQ3VVLCtCQUErQixDQUFDelUsTUFBTSxFQUFFbVQsVUFBVSxFQUFFeFAsUUFBUSxDQUFDLENBQUM7TUFDN0UsQ0FBQyxNQUFNLElBQUl3UCxVQUFVLEdBQUcsQ0FBQyxFQUFFO1FBQ3pCO1FBQ0ExUCxPQUFPLENBQUN2RCxJQUFJLENBQUNGLE1BQU0sQ0FBQztNQUN0QjtJQUNGO0VBQUMsU0FBQW9LLEdBQUE7SUFBQTZYLFVBQUEsQ0FBQXBsQixDQUFBLENBQUF1TixHQUFBO0VBQUE7SUFBQTZYLFVBQUEsQ0FBQTVrQixDQUFBO0VBQUE7RUFFRHVKLFFBQVEsR0FBQXhHLGFBQUEsQ0FBQUEsYUFBQSxLQUFPd0csUUFBUTtJQUFFbkQsT0FBTyxFQUFQQTtFQUFPLEVBQUM7RUFFakMsT0FBTzJlLGtDQUFrQyxDQUFDeGIsUUFBUSxFQUFFO0lBQUMyQixNQUFNLEVBQUVzWjtFQUFVLENBQUMsQ0FBQztBQUMzRTtBQUVBLFNBQVNPLGtDQUFrQ0EsQ0FBQ2hjLEtBQUssRUFBQWljLE1BQUEsRUFBWTtFQUFBLElBQVQ5WixNQUFNLEdBQUE4WixNQUFBLENBQU45WixNQUFNO0VBQ3hELElBQUtuRSxpQkFBaUIsR0FBSWdDLEtBQUssQ0FBMUJoQyxpQkFBaUI7RUFDdEIsSUFBQWtlLGtCQUFBLEdBQWtCbGUsaUJBQWlCO0lBQTVCdEQsT0FBTyxHQUFBd2hCLGtCQUFBLENBQVB4aEIsT0FBTztFQUNkLElBQUlBLE9BQU8sRUFBRTtJQUNYLElBQU9JLE1BQU0sR0FBSUosT0FBTyxDQUFqQkksTUFBTTtJQUNiO0lBQ0EsSUFBQXFoQixvQkFBQSxHQUE0Q3JoQixNQUFNLENBQUNDLFlBQVk7TUFBOUNvTixNQUFNLEdBQUFnVSxvQkFBQSxDQUFmaGEsTUFBTTtNQUFjcEgsWUFBWSxPQUFBK0oseUJBQUEsYUFBQXFYLG9CQUFBLEdBQWhDaGEsTUFBTSxFQUFBL0IsR0FBQSxDQUFBdkksY0FBQTtJQUNkbUcsaUJBQWlCLEdBQUFoRSxhQUFBLENBQUFBLGFBQUEsS0FDWmdFLGlCQUFpQjtNQUNwQnRELE9BQU8sRUFBQVYsYUFBQSxDQUFBQSxhQUFBLEtBQU1VLE9BQU87UUFBRUksTUFBTSxFQUFBZCxhQUFBLENBQUFBLGFBQUEsS0FBTWMsTUFBTTtVQUFFQyxZQUFZLEVBQVpBO1FBQVk7TUFBQztJQUFDLEVBQ3pEO0VBQ0g7RUFFQSxPQUFBZixhQUFBLENBQUFBLGFBQUEsS0FBV2dHLEtBQUs7SUFBRWhDLGlCQUFpQixFQUFqQkE7RUFBaUI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTW9lLDBCQUEwQixHQUFBM2hCLE9BQUEsQ0FBQTJoQiwwQkFBQSxHQUFHLFNBQTdCQSwwQkFBMEJBLENBQ3JDcGMsS0FBZSxFQUNmd0IsTUFBd0Q7RUFBQSxPQUFBeEgsYUFBQSxDQUFBQSxhQUFBLEtBRXJEZ0csS0FBSztJQUNSOUIsYUFBYSxFQUFFc0QsTUFBTSxDQUFDbEY7RUFBSTtBQUFBLENBQzFCOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNK2YsNEJBQTRCLEdBQUE1aEIsT0FBQSxDQUFBNGhCLDRCQUFBLEdBQUcsU0FBL0JBLDRCQUE0QkEsQ0FDdkNyYyxLQUFlLEVBQ2Z3QixNQUEwRDtFQUFBLE9BQUF4SCxhQUFBLENBQUFBLGFBQUEsS0FFdkRnRyxLQUFLO0lBQ1I3QixlQUFlLEVBQUVxRCxNQUFNLENBQUNsRjtFQUFJO0FBQUEsQ0FDNUI7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1nZ0IsdUJBQXVCLEdBQUE3aEIsT0FBQSxDQUFBNmhCLHVCQUFBLEdBQUcsU0FBMUJBLHVCQUF1QkEsQ0FDbEN0YyxLQUFlLEVBQ2Z3QixNQUFxRCxFQUN4QztFQUNiLE9BQUF4SCxhQUFBLENBQUFBLGFBQUEsS0FDS2dHLEtBQUs7SUFDUnhDLGNBQWMsRUFBRWdFLE1BQU0sQ0FBQ1c7RUFBTTtBQUVqQyxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNb2EsdUJBQXVCLEdBQUE5aEIsT0FBQSxDQUFBOGhCLHVCQUFBLEdBQUcsU0FBMUJBLHVCQUF1QkEsQ0FDbEN2YyxLQUFlLEVBQ2Z3QixNQUFpRCxFQUNwQztFQUNiLE9BQU9nYix5QkFBeUIsQ0FBQ3hjLEtBQUssRUFBRTtJQUFDbUMsTUFBTSxFQUFFWCxNQUFNLENBQUNXLE1BQU07SUFBRXVDLEtBQUssRUFBRTtNQUFDNkYsS0FBSyxFQUFFL0ksTUFBTSxDQUFDaWI7SUFBUTtFQUFDLENBQUMsQ0FBQztBQUNuRyxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNQyxxQkFBcUIsR0FBQWppQixPQUFBLENBQUFpaUIscUJBQUEsR0FBRyxTQUF4QkEscUJBQXFCQSxDQUFJMWMsS0FBZTtFQUFBLE9BQUFoRyxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxLQUNoRDRDLGlCQUFpQixHQUNqQm9ELEtBQUssQ0FBQzJjLFlBQVk7SUFDckJBLFlBQVksRUFBRTNjLEtBQUssQ0FBQzJjO0VBQVk7QUFBQSxDQUNoQzs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUMsdUJBQXVCLEdBQUFuaUIsT0FBQSxDQUFBbWlCLHVCQUFBLEdBQUcsU0FBMUJBLHVCQUF1QkEsQ0FDbEM1YyxLQUFlLEVBQUE2YyxNQUFBLEVBT0Y7RUFBQSxJQUFBQyxjQUFBLEdBQUFELE1BQUEsQ0FMWEUsT0FBTztJQUFBQyxxQkFBQSxHQUFBRixjQUFBLENBQUdoaUIsTUFBTTtJQUFOQSxNQUFNLEdBQUFraUIscUJBQUEsY0FBRyxDQUFDLENBQUMsR0FBQUEscUJBQUE7SUFBQUMscUJBQUEsR0FBQUgsY0FBQSxDQUFFM0ksT0FBTztJQUFQQSxPQUFPLEdBQUE4SSxxQkFBQSxjQUFHLENBQUMsQ0FBQyxHQUFBQSxxQkFBQTtFQU1yQyxJQUFJLENBQUNuaUIsTUFBTSxDQUFDb2lCLFFBQVEsRUFBRTtJQUNwQixPQUFPbGQsS0FBSztFQUNkO0VBRUEsSUFBT21kLGtCQUFrQixHQUFJaEosT0FBTyxDQUE3QmdKLGtCQUFrQjs7RUFFekI7RUFDQSxJQUFJQyxXQUFXLEdBQUcsQ0FBQ0Qsa0JBQWtCLEdBQUdULHFCQUFxQixDQUFDMWMsS0FBSyxDQUFDLEdBQUdBLEtBQUs7RUFBQyxJQUFBcWQsVUFBQSxHQUFBamxCLDBCQUFBLENBQ3hENEgsS0FBSyxDQUFDWCxPQUFPO0lBQUFpZSxNQUFBO0VBQUE7SUFBbEMsS0FBQUQsVUFBQSxDQUFBemtCLENBQUEsTUFBQTBrQixNQUFBLEdBQUFELFVBQUEsQ0FBQXhtQixDQUFBLElBQUFnQyxJQUFBLEdBQW9DO01BQUEsSUFBekIwa0IsTUFBTSxHQUFBRCxNQUFBLENBQUF4a0IsS0FBQTtNQUNmLElBQUksSUFBQTBrQiw0QkFBYSxFQUFDRCxNQUFNLENBQUMsSUFBSSxJQUFBRSw4QkFBZSxFQUFDM2lCLE1BQU0sQ0FBQ29pQixRQUFRLEVBQUVLLE1BQU0sQ0FBQzlaLElBQUksQ0FBQyxFQUFFO1FBQzFFMlosV0FBVyxHQUFHRyxNQUFNLENBQUNHLEtBQUssQ0FDeEJOLFdBQVcsRUFDWCxJQUFBTyxtQ0FBb0IsRUFBQzdpQixNQUFNLENBQUNvaUIsUUFBUSxFQUFFSyxNQUFNLENBQUM5WixJQUFJLEVBQUU4WixNQUFNLENBQUNLLFdBQVcsQ0FBQztRQUN0RTtRQUNBLElBQ0YsQ0FBQztNQUNIO0lBQ0Y7RUFBQyxTQUFBNVosR0FBQTtJQUFBcVosVUFBQSxDQUFBNW1CLENBQUEsQ0FBQXVOLEdBQUE7RUFBQTtJQUFBcVosVUFBQSxDQUFBcG1CLENBQUE7RUFBQTtFQUVELE9BQU9tbUIsV0FBVztBQUNwQixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNUyxpQkFBaUIsR0FBQXBqQixPQUFBLENBQUFvakIsaUJBQUEsR0FBRyxTQUFwQkEsaUJBQWlCQSxDQUM1QjdkLEtBQWUsRUFDZndCLE1BQWlEO0VBQUEsT0FBQXhILGFBQUEsQ0FBQUEsYUFBQSxLQUU5Q2dHLEtBQUs7SUFDUjVCLFNBQVMsRUFBQXBFLGFBQUEsQ0FBQUEsYUFBQSxLQUVKd0gsTUFBTSxDQUFDc2MsSUFBSSxHQUNWM2xCLE1BQU0sQ0FBQzZhLFFBQVEsQ0FBQ3hSLE1BQU0sQ0FBQ29FLFFBQVEsQ0FBQyxHQUFHO01BQUNBLFFBQVEsRUFBRXBFLE1BQU0sQ0FBQ29FO0lBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN4RTtBQUFBLENBQ0Q7O0FBRUY7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNtWSw4QkFBOEJBLENBQzVDL2QsS0FBZSxFQUNmd0IsTUFBNEQsRUFDbEQ7RUFDVixJQUFPMUcsTUFBTSxHQUFJMEcsTUFBTSxDQUFoQjFHLE1BQU07RUFFYixJQUFNa0QsaUJBQWlCLEdBQUFoRSxhQUFBLENBQUFBLGFBQUEsS0FDbEJnRyxLQUFLLENBQUNoQyxpQkFBaUIsT0FBQTdELGdCQUFBLGlCQUNyQlcsTUFBTSxDQUFDSCxFQUFFLEVBQUdHLE1BQU0sRUFDeEI7O0VBRUQ7RUFDQTtFQUNBLElBQU1rakIsVUFBVSxHQUFHLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQztFQUV2QyxJQUNFQSxVQUFVLENBQUNoWCxRQUFRLENBQUNsTSxNQUFNLENBQUNILEVBQUUsQ0FBQyxJQUM5QkcsTUFBTSxDQUFDRCxPQUFPLElBQ2QsQ0FBQ21GLEtBQUssQ0FBQ2hDLGlCQUFpQixDQUFDbEQsTUFBTSxDQUFDSCxFQUFFLENBQUMsQ0FBQ0UsT0FBTyxFQUMzQztJQUNBO0lBQ0FtakIsVUFBVSxDQUFDOWpCLE9BQU8sQ0FBQyxVQUFBK2pCLENBQUMsRUFBSTtNQUN0QixJQUFJQSxDQUFDLEtBQUtuakIsTUFBTSxDQUFDSCxFQUFFLEVBQUU7UUFDbkJxRCxpQkFBaUIsQ0FBQ2lnQixDQUFDLENBQUMsR0FBQWprQixhQUFBLENBQUFBLGFBQUEsS0FBT2dFLGlCQUFpQixDQUFDaWdCLENBQUMsQ0FBQztVQUFFcGpCLE9BQU8sRUFBRTtRQUFLLEVBQUM7TUFDbEU7SUFDRixDQUFDLENBQUM7RUFDSjtFQUVBLElBQU0yRixRQUFRLEdBQUF4RyxhQUFBLENBQUFBLGFBQUEsS0FDVGdHLEtBQUs7SUFDUmhDLGlCQUFpQixFQUFqQkE7RUFBaUIsRUFDbEI7RUFFRCxJQUFJbEQsTUFBTSxDQUFDSCxFQUFFLEtBQUssVUFBVSxJQUFJLENBQUNHLE1BQU0sQ0FBQ0QsT0FBTyxFQUFFO0lBQy9DLE9BQU8yZ0Isb0JBQW9CLENBQUNoYixRQUFRLEVBQUU7TUFBQzJCLE1BQU0sRUFBRTtJQUFrQixDQUFDLENBQUM7RUFDckU7RUFFQSxPQUFPM0IsUUFBUTtBQUNqQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTTBkLGlCQUFpQixHQUFBempCLE9BQUEsQ0FBQXlqQixpQkFBQSxHQUFHLFNBQXBCQSxpQkFBaUJBLENBQzVCbGUsS0FBZSxFQUNmd0IsTUFBaUQ7RUFBQSxPQUFBeEgsYUFBQSxDQUFBQSxhQUFBLEtBRTlDZ0csS0FBSztJQUNSMUIsUUFBUSxFQUFFMEIsS0FBSyxDQUFDaEMsaUJBQWlCLENBQUN2QyxVQUFVLENBQUNaLE9BQU8sR0FBQWIsYUFBQSxDQUFBQSxhQUFBLEtBRTNDZ0csS0FBSyxDQUFDMUIsUUFBUTtNQUNqQjZmLE1BQU0sRUFBRW5lLEtBQUssQ0FBQzFCLFFBQVEsQ0FBQzZmLE1BQU0sR0FBRyxJQUFJLEdBQUcsSUFBQS9DLHFCQUFTLEVBQUNwYixLQUFLLENBQUMxQixRQUFRO0lBQUMsS0FFbEUwQixLQUFLLENBQUMxQixRQUFRO0lBQ2xCRCxPQUFPLEVBQUVtRCxNQUFNLENBQUNzYyxJQUFJLElBQUl0YyxNQUFNLENBQUNzYyxJQUFJLENBQUNNLE1BQU0sR0FBRzVjLE1BQU0sQ0FBQ3NjLElBQUksR0FBRztFQUFJO0FBQUEsQ0FDL0Q7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1PLGVBQWUsR0FBQTVqQixPQUFBLENBQUE0akIsZUFBQSxHQUFHLFNBQWxCQSxlQUFlQSxDQUMxQnJlLEtBQWUsRUFFZndCLE1BQStDLEVBQ2xDO0VBQ2IsT0FBQXhILGFBQUEsQ0FBQUEsYUFBQSxLQUNLZ0csS0FBSztJQUNSM0IsT0FBTyxFQUFFO0VBQUk7QUFFakIsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTWlnQixnQkFBZ0IsR0FBQTdqQixPQUFBLENBQUE2akIsZ0JBQUEsR0FBRyxTQUFuQkEsZ0JBQWdCQSxDQUMzQnRlLEtBQWUsRUFBQXVlLE1BQUEsRUFFRjtFQUFBLElBRFpDLEdBQUcsR0FBQUQsTUFBQSxDQUFIQyxHQUFHO0VBRUosSUFBSTltQixNQUFNLENBQUMyUSxNQUFNLENBQUNySSxLQUFLLENBQUNoQyxpQkFBaUIsQ0FBQyxDQUFDMEYsSUFBSSxDQUFDLFVBQUE1SSxNQUFNO0lBQUEsT0FBSUEsTUFBTSxDQUFDRCxPQUFPO0VBQUEsRUFBQyxFQUFFO0lBQ3pFLE9BQUFiLGFBQUEsQ0FBQUEsYUFBQSxLQUNLZ0csS0FBSztNQUNSMUIsUUFBUSxFQUFBdEUsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsS0FDSGdHLEtBQUssQ0FBQzFCLFFBQVEsR0FDYmhHLEtBQUssQ0FBQ0MsT0FBTyxDQUFDaW1CLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDLEdBQUc7UUFBQ0MsYUFBYSxNQUFBdFgsbUJBQUEsYUFBTW9YLEdBQUcsQ0FBQ0MsS0FBSztNQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDL0RubUIsS0FBSyxDQUFDQyxPQUFPLENBQUNpbUIsR0FBRyxDQUFDRyxNQUFNLENBQUMsR0FBRztRQUFDbGpCLFVBQVUsTUFBQTJMLG1CQUFBLGFBQU1vWCxHQUFHLENBQUNHLE1BQU07TUFBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25FO0VBRUw7RUFFQSxPQUFPM2UsS0FBSztBQUNkLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTTRlLHFCQUFxQixHQUFBbmtCLE9BQUEsQ0FBQW1rQixxQkFBQSxHQUFHLFNBQXhCQSxxQkFBcUJBLENBQ2hDNWUsS0FBZSxFQUNmd0IsTUFBbUQ7RUFBQSxPQUVuRHhCLEtBQUssQ0FBQ3ZCLFNBQVMsSUFBSXVCLEtBQUssQ0FBQ3ZCLFNBQVMsQ0FBQ2hHLE1BQU0sS0FBSyxDQUFDLEdBQUF1QixhQUFBLENBQUFBLGFBQUEsS0FFdENnRyxLQUFLO0lBQ1I7SUFDQTtJQUNBdkIsU0FBUyxFQUFFLElBQUFvZ0IsNEJBQXFCLEVBQUM3ZSxLQUFLLENBQUNoRCxNQUFNLEVBQUU7TUFBQzhoQixTQUFTLEVBQUU7SUFBSyxDQUFDO0VBQUMsS0FFcEVDLHVCQUF1QixDQUFDL2UsS0FBSyxFQUFFd0IsTUFBTSxDQUFDO0FBQUE7O0FBRTVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNc0Usd0JBQXdCLEdBQUFyTCxPQUFBLENBQUFxTCx3QkFBQSxHQUFHLFNBQTNCQSx3QkFBd0JBLENBQ25DOUYsS0FBZSxFQUFBZ2YsTUFBQSxFQUVGO0VBQUEsSUFEWnBaLFFBQVEsR0FBQW9aLE1BQUEsQ0FBUnBaLFFBQVE7SUFBRUYsT0FBTyxHQUFBc1osTUFBQSxDQUFQdFosT0FBTztFQUVsQixJQUFPakgsU0FBUyxHQUFJdUIsS0FBSyxDQUFsQnZCLFNBQVM7RUFFaEIsT0FBQXpFLGFBQUEsQ0FBQUEsYUFBQSxLQUNLZ0csS0FBSztJQUNSdkIsU0FBUyxFQUFFQSxTQUFTLENBQUMyQixHQUFHLENBQUMsVUFBQ3lGLEVBQUUsRUFBRTdPLENBQUM7TUFBQSxPQUM3QkEsQ0FBQyxLQUFLNE8sUUFBUSxHQUFBNUwsYUFBQSxDQUFBQSxhQUFBLEtBRUx5RSxTQUFTLENBQUN6SCxDQUFDLENBQUM7UUFDZmdHLE1BQU0sRUFBQWhELGFBQUEsQ0FBQUEsYUFBQSxLQUNEeUUsU0FBUyxDQUFDekgsQ0FBQyxDQUFDLENBQUNnRyxNQUFNLFdBQUE3QyxnQkFBQSxpQkFFckJ1TCxPQUFPLEVBQUcsQ0FBQ2pILFNBQVMsQ0FBQ3pILENBQUMsQ0FBQyxDQUFDZ0csTUFBTSxDQUFDMEksT0FBTyxDQUFDO01BQ3pDLEtBRUhHLEVBQUU7SUFBQSxDQUNSO0VBQUM7QUFFTCxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1vWixvQkFBb0IsR0FBQXhrQixPQUFBLENBQUF3a0Isb0JBQUEsR0FBRyxTQUF2QkEsb0JBQW9CQSxDQUMvQmpmLEtBQWUsRUFDZndCLE1BQWtELEVBQ3JDO0VBQ2I7RUFDQSxJQUFPMUcsTUFBTSxHQUFhMEcsTUFBTSxDQUF6QjFHLE1BQU07SUFBRXFaLE9BQU8sR0FBSTNTLE1BQU0sQ0FBakIyUyxPQUFPOztFQUV0QjtFQUNBO0VBQ0EsSUFBSWhLLFlBQVksR0FBR3JQLE1BQU0sR0FDckI4aEIsdUJBQXVCLENBQUM1YyxLQUFLLEVBQUU7SUFDN0IrYyxPQUFPLEVBQUU7TUFBQ2ppQixNQUFNLEVBQU5BLE1BQU07TUFBRXFaLE9BQU8sRUFBUEE7SUFBTztFQUMzQixDQUFDLENBQUMsR0FDRm5VLEtBQUs7RUFFVCxJQUFNekMsUUFBUSxHQUFHLElBQUF5UCxvQkFBTyxFQUFDeEwsTUFBTSxDQUFDakUsUUFBUSxDQUFDO0VBQ3pDLElBQUksQ0FBQ0EsUUFBUSxDQUFDOUUsTUFBTSxFQUFFO0lBQ3BCLE9BQU8wUixZQUFZO0VBQ3JCO0VBRUEsSUFBTStVLGtCQUEwQixHQUFHLEVBQUU7RUFDckMsSUFBTUMsaUJBQXlCLEdBQUcsRUFBRTtFQUVwQzVoQixRQUFRLENBQUNyRCxPQUFPLENBQUMsVUFBQWtsQixNQUFBLEVBQXVCQyxZQUFZLEVBQUs7SUFBQSxJQUFBQyxXQUFBLEdBQUFGLE1BQUEsQ0FBdEN0QixJQUFJO01BQUpBLElBQUksR0FBQXdCLFdBQUEsY0FBRyxDQUFDLENBQUMsR0FBQUEsV0FBQTtNQUFLQyxJQUFJLE9BQUF6YSx5QkFBQSxhQUFBc2EsTUFBQSxFQUFBNW9CLFVBQUE7SUFDbkMsSUFBTWdwQixJQUFJLEdBQUcsSUFBQUMseUJBQWtCLEVBQUF6bEIsYUFBQTtNQUFFOGpCLElBQUksRUFBSkE7SUFBSSxHQUFLeUIsSUFBSSxHQUFHdmYsS0FBSyxDQUFDekMsUUFBUSxDQUFDO0lBQ2hFLElBQUlpaUIsSUFBSSxFQUFFO01BQ1JOLGtCQUFrQixDQUFDcGxCLElBQUksQ0FBQzBsQixJQUFJLENBQUM7SUFDL0IsQ0FBQyxNQUFNO01BQ0xMLGlCQUFpQixDQUFDcmxCLElBQUksQ0FDcEJnRyw0QkFBNEIsQ0FBQyxDQUFDLENBQUNNLEdBQUcsQ0FBQztRQUFBLE9BQ2pDLElBQUFzZix3QkFBZSxFQUNiLElBQUFDLHdCQUFpQixFQUFDO1VBQ2hCQyxPQUFPLGtFQUFrRTtVQUN6RWpsQixFQUFFLG9CQUFBd00sTUFBQSxDQUFvQmtZLFlBQVk7UUFDcEMsQ0FBQyxDQUNILENBQUM7TUFBQSxDQUNILENBQ0YsQ0FBQztJQUNIO0VBQ0YsQ0FBQyxDQUFDO0VBRUYsSUFBTVEsc0JBQXNCLEdBQUdYLGtCQUFrQixDQUFDem1CLE1BQU0sR0FDcERpSCxpQkFBSSxDQUFDb2dCLFVBQVUsQ0FBQ1osa0JBQWtCLENBQUMsQ0FBQzllLEdBQUcsQ0FBQyxVQUFBMmYsT0FBTztJQUFBLE9BQzdDLElBQUFDLGdDQUF1QixFQUFDO01BQUNELE9BQU8sRUFBUEEsT0FBTztNQUFFRSxlQUFlLEVBQUU5TDtJQUFPLENBQUMsQ0FBQztFQUFBLENBQzlELENBQUMsR0FDRCxJQUFJO0VBRVIsSUFBSTBMLHNCQUFzQixFQUFFO0lBQzFCMVYsWUFBWSxHQUFHK1YsMEJBQTBCLENBQUMvVixZQUFZLEVBQUUsSUFBQWdXLHlCQUFRLEVBQUM7TUFBQ0MsTUFBTSxFQUFFLENBQUM7TUFBRTdkLElBQUksRUFBRTtJQUFFLENBQUMsQ0FBQyxDQUFDO0VBQzFGO0VBRUEsT0FBTyxJQUFBOGQsZUFBUSxFQUFDbFcsWUFBWSxLQUFBaEQsTUFBQSxLQUFBQyxtQkFBQSxhQUN0QnlZLHNCQUFzQixHQUFHLENBQUNBLHNCQUFzQixDQUFDLEdBQUcsRUFBRSxHQUN2RFYsaUJBQWlCLENBQ3JCLENBQUM7QUFDSixDQUFDO0FBRU0sSUFBTW1CLDhCQUE4QixHQUFBN2xCLE9BQUEsQ0FBQTZsQiw4QkFBQSxHQUFHLFNBQWpDQSw4QkFBOEJBLENBQ3pDdGdCLEtBQWUsRUFDZndCLE1BQXFELEVBQ3hDO0VBQ2IsSUFBQStlLGVBQUEsR0FBbUMvZSxNQUFNLENBQUN1YixPQUFPO0lBQTFDZ0QsT0FBTyxHQUFBUSxlQUFBLENBQVBSLE9BQU87SUFBRUUsZUFBZSxHQUFBTSxlQUFBLENBQWZOLGVBQWU7RUFDL0IsSUFBTWQsaUJBQXlCLEdBQUcsRUFBRTtFQUVwQyxJQUFNcUIsY0FBYyxHQUFHVCxPQUFPLENBQUNyVSxNQUFNLENBQUMsVUFBQ0MsSUFBSSxFQUFFM0MsTUFBTSxFQUFFN0ksR0FBRyxFQUFLO0lBQzNELElBQUk2SSxNQUFNLENBQUN5WCxNQUFNLEtBQUssV0FBVyxFQUFFO01BQ2pDLElBQU12ZSxPQUFPLEdBQUc4RyxNQUFNLENBQUNsUSxLQUFLO01BQzVCLE9BQUFrQixhQUFBLENBQUFBLGFBQUEsS0FBVzJSLElBQUksV0FBQXhSLGdCQUFBLGlCQUFHK0gsT0FBTyxDQUFDdkgsRUFBRSxFQUFHdUgsT0FBTztJQUN4QyxDQUFDLE1BQU07TUFDTDtNQUNBaWQsaUJBQWlCLENBQUNybEIsSUFBSSxDQUNwQixJQUFBNG1CLG1CQUFXLEVBQUMsQ0FBQyxDQUFDdGdCLEdBQUcsQ0FBQztRQUFBLE9BQ2hCLElBQUFzZix3QkFBZSxFQUNiLElBQUFDLHdCQUFpQixFQUFDO1VBQ2hCQyxPQUFPLG1FQUFBelksTUFBQSxDQUNMNkIsTUFBTSxDQUFDMlgsTUFBTSxJQUFLM1gsTUFBTSxDQUFTbFEsS0FBSyxDQUFFO1VBQzFDNkIsRUFBRSwyQkFBQXdNLE1BQUEsQ0FBMkJoSCxHQUFHO1FBQ2xDLENBQUMsQ0FDSCxDQUFDO01BQUEsQ0FDSCxDQUNGLENBQUM7TUFDRCxPQUFPd0wsSUFBSTtJQUNiO0VBQ0YsQ0FBQyxFQUFFLENBQUMsQ0FBYSxDQUFDO0VBQ2xCO0VBQ0EsSUFBTXlSLFdBQVcsR0FBQXBqQixhQUFBLENBQUFBLGFBQUEsS0FDWmdHLEtBQUs7SUFDUnpDLFFBQVEsRUFBRSxJQUFBcWpCLG9DQUFvQixFQUFDNWdCLEtBQUssRUFBRXdnQixjQUFjO0VBQUMsRUFDdEQ7O0VBRUQ7RUFDQSxJQUFNSyxZQUFZLEdBQUc3Z0IsS0FBSyxDQUFDWCxPQUFPLENBQUN6RixNQUFNLENBQUMsVUFBQWtuQixDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDQyxnQkFBZ0I7RUFBQSxFQUFDO0VBQ2xFLElBQU1DLGNBQWMsR0FBR2hoQixLQUFLLENBQUNYLE9BQU8sQ0FBQ3pGLE1BQU0sQ0FBQyxVQUFBa25CLENBQUM7SUFBQSxPQUFJLENBQUNELFlBQVksQ0FBQzdaLFFBQVEsQ0FBQzhaLENBQUMsQ0FBQztFQUFBLEVBQUM7RUFFM0UsSUFBTTdRLFVBQVUsR0FBR3ZZLE1BQU0sQ0FBQ2dDLElBQUksQ0FBQzhtQixjQUFjLENBQUM7RUFDOUMsSUFBTVMsaUJBQWlCLEdBQUc7SUFDeEJoUixVQUFVLEVBQVZBLFVBQVU7SUFDVmtFLE9BQU8sRUFBRThMLGVBQWU7SUFDeEJZLFlBQVksRUFBWkE7RUFDRixDQUFDO0VBRUQsSUFBTTFXLFlBQVksR0FBRytXLG1CQUFtQixDQUFDOUQsV0FBVyxFQUFFO0lBQ3BEL2QsT0FBTyxFQUFFMmhCLGNBQWM7SUFDdkJDLGlCQUFpQixFQUFqQkE7RUFDRixDQUFDLENBQUM7RUFFRixPQUFPLElBQUFaLGVBQVEsRUFDYkgsMEJBQTBCLENBQUMvVixZQUFZLEVBQUUsSUFBQWdXLHlCQUFRLEVBQUM7SUFBQ0MsTUFBTSxFQUFFLENBQUM7RUFBQyxDQUFDLENBQUMsQ0FBQyxFQUNoRWpCLGlCQUNGLENBQUM7QUFDSCxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNPLFNBQVMrQixtQkFBbUJBLENBQ2pDbGhCLEtBQWUsRUFDZndCLE1BR0MsRUFDUztFQUNWLElBQU9uQyxPQUFPLEdBQXVCbUMsTUFBTSxDQUFwQ25DLE9BQU87SUFBRTRoQixpQkFBaUIsR0FBSXpmLE1BQU0sQ0FBM0J5ZixpQkFBaUI7O0VBRWpDO0VBQ0EsSUFBTUUsZ0JBQWdCLEdBQUcsSUFBQUMsb0NBQXFCLEVBQzVDcGhCLEtBQUssRUFBQWhHLGFBQUEsQ0FBQUEsYUFBQSxLQUVBNEMsaUJBQWlCLEdBQ2pCb0QsS0FBSyxDQUFDMmMsWUFBWSxHQUV2QnRkLE9BQU87RUFDUDtFQUNBNGhCLGlCQUNGLENBQUM7O0VBRUQ7RUFDQTtFQUNBLE9BQU9FLGdCQUFnQixDQUFDRSxTQUFTLEdBQzdCQyxnQkFBZ0IsQ0FBQ0gsZ0JBQWdCLENBQUMvRCxXQUFXLEVBQUU2RCxpQkFBaUIsQ0FBQyxHQUNqRUUsZ0JBQWdCLENBQUMvRCxXQUFXO0FBQ2xDOztBQUVBO0FBQ0EsU0FBU21FLGdDQUFnQ0EsQ0FDdkNwTixPQUFpRCxFQUNaO0VBQ3JDLElBQUksQ0FBQ0EsT0FBTyxJQUFJLEVBQUUsZ0JBQWdCLElBQUlBLE9BQU8sQ0FBQyxFQUFFO0lBQzlDLE9BQU8xVyxTQUFTO0VBQ2xCO0VBQ0EsSUFBTStqQixLQUFLLEdBQUlyTixPQUFPLENBQWdDc04sY0FBYztFQUNwRSxJQUFJRCxLQUFLLElBQUksSUFBSSxJQUFJLElBQUFFLFFBQUEsYUFBT0YsS0FBSyxNQUFLLFFBQVEsSUFBSWxwQixLQUFLLENBQUNDLE9BQU8sQ0FBQ2lwQixLQUFLLENBQUMsRUFBRTtJQUN0RSxPQUFPL2pCLFNBQVM7RUFDbEI7RUFDQSxPQUFPK2pCLEtBQUs7QUFDZDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTRixnQkFBZ0JBLENBQUNsRSxXQUFxQixFQUFFNkQsaUJBQW9DLEVBQVk7RUFDL0YsSUFBT2hSLFVBQVUsR0FBMkJnUixpQkFBaUIsQ0FBdERoUixVQUFVO0lBQUVrRSxPQUFPLEdBQWtCOE0saUJBQWlCLENBQTFDOU0sT0FBTztJQUFFME0sWUFBWSxHQUFJSSxpQkFBaUIsQ0FBakNKLFlBQVk7RUFDeEMsSUFBTXpPLFVBQVUsR0FBR2dMLFdBQVcsQ0FBQy9mLE9BQU8sQ0FBQ3pELE1BQU0sQ0FBQyxVQUFBM0MsQ0FBQztJQUFBLE9BQzdDQSxDQUFDLENBQUNrTCxNQUFNLENBQUNILElBQUksQ0FBQyxVQUFBMmYsT0FBTztNQUFBLE9BQUkxUixVQUFVLENBQUNqSixRQUFRLENBQUMyYSxPQUFPLENBQUM7SUFBQSxFQUFDO0VBQUEsQ0FDeEQsQ0FBQztFQUNELElBQU1DLGVBQXlCLEdBQUcsSUFBQS9ULGdCQUFJLEVBQ3BDdUUsVUFBVSxDQUFDMUcsTUFBTSxDQUFDLFVBQUNDLElBQUksRUFBRTFVLENBQUM7SUFBQSxVQUFBa1EsTUFBQSxLQUFBQyxtQkFBQSxhQUFTdUUsSUFBSSxPQUFBdkUsbUJBQUEsYUFBS25RLENBQUMsQ0FBQ2tMLE1BQU07RUFBQSxDQUFDLEVBQUUsRUFBYyxDQUN2RSxDQUFDO0VBQ0QsSUFBTTBmLFNBQVMsR0FBRzVSLFVBQVUsQ0FBQ3hYLE1BQU0sR0FBRyxDQUFDO0VBRXZDLElBQUlxcEIsU0FBUyxHQUFHLENBQUNELFNBQVMsR0FDdEJ6RSxXQUFXLENBQUNwZ0IsTUFBTSxDQUFDcEQsTUFBTSxDQUFDLFVBQUFxSSxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDbkgsTUFBTSxDQUFDcUgsTUFBTSxJQUFJOE4sVUFBVSxDQUFDakosUUFBUSxDQUFDL0UsQ0FBQyxDQUFDbkgsTUFBTSxDQUFDcUgsTUFBTSxDQUFDO0VBQUEsRUFBQyxHQUN2RixFQUFFO0VBRU4sSUFBTXFlLGNBQWMsR0FBR3ZRLFVBQVUsQ0FBQ3ZFLE1BQU0sQ0FDdEMsVUFBQ0MsSUFBSSxFQUFFaFIsRUFBRTtJQUFBLE9BQUFYLGFBQUEsQ0FBQUEsYUFBQSxLQUNKMlIsSUFBSSxXQUFBeFIsZ0JBQUEsaUJBQ05RLEVBQUUsRUFBR3lpQixXQUFXLENBQUM3ZixRQUFRLENBQUM1QyxFQUFFLENBQUM7RUFBQSxDQUM5QixFQUNGLENBQUMsQ0FDSCxDQUFDO0VBRUQsSUFBSSxDQUFDbW5CLFNBQVMsQ0FBQ3JwQixNQUFNLElBQUksQ0FBQzBiLE9BQU8sSUFBSSxDQUFDLENBQUMsRUFBRTROLGdCQUFnQixLQUFLLEtBQUssRUFBRTtJQUNuRTtJQUNBLElBQU0vWSxNQUFNLEdBQUdnWixnQkFBZ0IsQ0FBQzVFLFdBQVcsRUFBRW9ELGNBQWMsQ0FBQztJQUM1RHBELFdBQVcsR0FBR3BVLE1BQU0sQ0FBQ2hKLEtBQUs7SUFDMUI4aEIsU0FBUyxHQUFHOVksTUFBTSxDQUFDOFksU0FBUztFQUM5QjtFQUVBLElBQUkxRSxXQUFXLENBQUMzZSxTQUFTLENBQUNoRyxNQUFNLEVBQUU7SUFDaEM7SUFDQXFwQixTQUFTLEdBQUcxRSxXQUFXLENBQUNwZ0IsTUFBTSxDQUFDcEQsTUFBTSxDQUNuQyxVQUFBcUksQ0FBQztNQUFBLE9BQUlBLENBQUMsQ0FBQ25ILE1BQU0sQ0FBQ3FILE1BQU0sSUFBSThOLFVBQVUsQ0FBQ2pKLFFBQVEsQ0FBQy9FLENBQUMsQ0FBQ25ILE1BQU0sQ0FBQ3FILE1BQU0sQ0FBQztJQUFBLENBQzlELENBQUM7SUFDRGliLFdBQVcsR0FBQXBqQixhQUFBLENBQUFBLGFBQUEsS0FDTm9qQixXQUFXO01BQ2QzZSxTQUFTLEVBQUUsSUFBQWlDLDZCQUFzQixFQUFDMGMsV0FBVyxDQUFDM2UsU0FBUyxFQUFFcWpCLFNBQVM7SUFBQyxFQUNwRTtFQUNIO0VBRUExRSxXQUFXLEdBQUcsSUFBQTZFLDZDQUFpQyxFQUM3QzdFLFdBQVcsRUFDWG1FLGdDQUFnQyxDQUFDcE4sT0FBTyxDQUFDLEVBQ3pDbEUsVUFDRixDQUFDOztFQUVEO0VBQ0FBLFVBQVUsQ0FBQy9WLE9BQU8sQ0FBQyxVQUFBaUksTUFBTSxFQUFJO0lBQzNCLElBQU0rZixhQUFhLEdBQUc5RSxXQUFXLENBQUNwZixpQkFBaUIsQ0FBQ3RELE9BQU8sQ0FBQ0ksTUFBTSxDQUFDQyxZQUFZLENBQUNvSCxNQUFNLENBQUM7SUFDdkY7SUFDQSxJQUNFLENBQUFnUyxPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRWdPLGtCQUFrQixNQUFLLEtBQUssS0FDcEMsQ0FBQzdwQixLQUFLLENBQUNDLE9BQU8sQ0FBQzJwQixhQUFhLENBQUMsSUFBSSxDQUFDQSxhQUFhLENBQUN6cEIsTUFBTSxDQUFDLEVBQ3hEO01BQ0E7TUFDQTJrQixXQUFXLEdBQUdnRixrQkFBa0IsQ0FBQ2hGLFdBQVcsRUFBRW9ELGNBQWMsQ0FBQ3JlLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZFO0VBQ0YsQ0FBQyxDQUFDO0VBRUYsSUFBTWtnQixlQUFlLEdBQUdSLFNBQVMsR0FDN0JucUIsTUFBTSxDQUFDZ0MsSUFBSSxDQUFDMGpCLFdBQVcsQ0FBQzdmLFFBQVEsQ0FBQyxHQUNqQyxJQUFBc1EsZ0JBQUksRUFBQ25XLE1BQU0sQ0FBQ2dDLElBQUksQ0FBQzhtQixjQUFjLENBQUMsQ0FBQ3JaLE1BQU0sQ0FBQ3lhLGVBQWUsQ0FBQyxDQUFDO0VBRTdELElBQUl6WCxZQUFZLEdBQUc2RCx3QkFBd0IsQ0FBQ29QLFdBQVcsRUFBRWlGLGVBQWUsRUFBRTVrQixTQUFTLENBQUM7O0VBRXBGO0VBQ0E7RUFDQTBNLFlBQVksR0FBR3RKLHFCQUFxQixDQUFDc0osWUFBWSxDQUFDOztFQUVsRDtFQUNBQSxZQUFZLEdBQ1YwVyxZQUFZLElBQUlBLFlBQVksQ0FBQ3BvQixNQUFNLEdBQUcsQ0FBQyxHQUNuQ3lvQixtQkFBbUIsQ0FBQy9XLFlBQVksRUFBRTtJQUNoQzlLLE9BQU8sRUFBRXdoQixZQUFZO0lBQ3JCSSxpQkFBaUIsRUFBQWpuQixhQUFBLENBQUFBLGFBQUEsS0FBTWluQixpQkFBaUI7TUFBRUosWUFBWSxFQUFFO0lBQUU7RUFDNUQsQ0FBQyxDQUFDLEdBQ0YxVyxZQUFZOztFQUVsQjtFQUNBLElBQUkyWCxTQUFTLENBQUNycEIsTUFBTSxJQUFJLENBQUMwYixPQUFPLElBQUksQ0FBQyxDQUFDLEVBQUVtTyxTQUFTLEVBQUU7SUFDakQsSUFBTUMsTUFBTSxHQUFHLElBQUFDLHdCQUFhLEVBQUNWLFNBQVMsQ0FBQztJQUN2QyxJQUFJUyxNQUFNLEVBQUU7TUFDVixJQUFNRSxhQUFhLEdBQUdoakIsc0JBQXNCLENBQUMsQ0FBQyxDQUFDVyxHQUFHLENBQUMsWUFBTTtRQUN2RCxPQUFPLElBQUFzaUIsa0JBQVksRUFBQ0gsTUFBTSxDQUFDO01BQzdCLENBQUMsQ0FBQztNQUNGcFksWUFBWSxHQUFHLElBQUFrVyxlQUFRLEVBQUNsVyxZQUFZLEVBQUVzWSxhQUFhLENBQUM7SUFDdEQ7RUFDRjs7RUFFQTtFQUNBLE9BQU90WSxZQUFZO0FBQ3JCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTd1ksb0JBQW9CQSxDQUNsQzNpQixLQUFlLEVBQ2Z3QixNQUFrRCxFQUN4QztFQUNWLE9BQU9nYix5QkFBeUIsQ0FBQ3hjLEtBQUssRUFBRTtJQUFDbUMsTUFBTSxFQUFFWCxNQUFNLENBQUNXLE1BQU07SUFBRXVDLEtBQUssRUFBRTtNQUFDOUosS0FBSyxFQUFFNEcsTUFBTSxDQUFDNUc7SUFBSztFQUFDLENBQUMsQ0FBQztBQUNoRztBQUVBLElBQU1nb0IsNEJBQTRCLEdBQUcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQzs7QUFFbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBTUMsMEJBQTBCLEdBQUcsU0FBN0JBLDBCQUEwQkEsQ0FBSW5lLEtBQUssRUFBRXhDLE9BQU8sRUFBSztFQUNyRCxJQUFNNGdCLGNBQWMsR0FBR3ByQixNQUFNLENBQUNxckIsT0FBTyxDQUFDcmUsS0FBSyxDQUFDLENBQUNnSCxNQUFNLENBQUMsVUFBQzRJLEdBQUcsRUFBRUksS0FBSyxFQUFLO0lBQ2xFLElBQUFzTyxNQUFBLE9BQUFDLGVBQUEsYUFBcUJ2TyxLQUFLO01BQW5CdlQsR0FBRyxHQUFBNmhCLE1BQUE7TUFBRWxxQixLQUFLLEdBQUFrcUIsTUFBQTtJQUNqQjtJQUNBLElBQUksQ0FBQ0osNEJBQTRCLENBQUM1YixRQUFRLENBQUM3RixHQUFHLENBQUMsRUFBRTtNQUMvQyxPQUFPbVQsR0FBRztJQUNaOztJQUVBO0lBQ0E7SUFDQSxJQUFJblQsR0FBRyxLQUFLLE9BQU8sSUFBSSxDQUFDLElBQUEraEIsaUJBQVUsRUFBQ3BxQixLQUFLLENBQUMsRUFBRTtNQUN6QyxPQUFPd2IsR0FBRztJQUNaOztJQUVBO0lBQ0EsT0FBQXRhLGFBQUEsQ0FBQUEsYUFBQSxLQUFXc2EsR0FBRyxXQUFBbmEsZ0JBQUEsaUJBQUdnSCxHQUFHLEVBQUcsSUFBQWdpQixvQkFBYSxFQUFDcnFCLEtBQUssQ0FBQyxHQUFHLElBQUFzcUIscUJBQVMsRUFBQ2xoQixPQUFPLENBQUNmLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFckksS0FBSyxDQUFDLEdBQUdBLEtBQUs7RUFDNUYsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBRU4sT0FBT2dxQixjQUFjO0FBQ3ZCLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVN0Ryx5QkFBeUJBLENBQ3ZDeGMsS0FBZSxFQUNmd0IsTUFBdUQsRUFDN0M7RUFDVixJQUFPVyxNQUFNLEdBQVdYLE1BQU0sQ0FBdkJXLE1BQU07SUFBRXVDLEtBQUssR0FBSWxELE1BQU0sQ0FBZmtELEtBQUs7RUFDcEIsSUFBT25ILFFBQVEsR0FBSXlDLEtBQUssQ0FBakJ6QyxRQUFRO0VBQ2YsSUFBTThsQixRQUFRLEdBQUc5bEIsUUFBUSxDQUFDNEUsTUFBTSxDQUFDO0VBRWpDLElBQUlraEIsUUFBUSxFQUFFO0lBQ1osSUFBTVAsY0FBYyxHQUFHRCwwQkFBMEIsQ0FBQ25lLEtBQUssRUFBRTJlLFFBQVEsQ0FBQztJQUNsRTtJQUNBO0lBQ0E7SUFDQSxPQUFBcnBCLGFBQUEsQ0FBQUEsYUFBQSxLQUNLZ0csS0FBSztNQUNSekMsUUFBUSxFQUFBdkQsYUFBQSxDQUFBQSxhQUFBLEtBQ0h1RCxRQUFRLFdBQUFwRCxnQkFBQSxpQkFDVmdJLE1BQU0sRUFBRyxJQUFBbWhCLHlCQUFrQixFQUFDRCxRQUFRLEVBQUVQLGNBQWMsQ0FBQztJQUN2RDtFQUVMO0VBRUEsT0FBTzlpQixLQUFLO0FBQ2Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUytlLHVCQUF1QkEsQ0FDckMvZSxLQUFRLEVBQ1J3QixNQUFtRCxFQUNoRDtFQUFBLElBQUEraEIscUJBQUE7RUFDSDtFQUNBLElBQU1DLGVBQWUsR0FBRyxDQUFDLEdBQUdoaUIsTUFBTSxDQUFDdWIsT0FBTztFQUMxQyxJQUFNMEcsU0FBUyxJQUFBRixxQkFBQSxHQUFHdmpCLEtBQUssQ0FBQ3ZCLFNBQVMsQ0FBQytrQixlQUFlLENBQUMsY0FBQUQscUJBQUEsdUJBQWhDQSxxQkFBQSxDQUFrQ3ZtQixNQUFNO0VBQzFELElBQU9BLE1BQU0sR0FBSWdELEtBQUssQ0FBZmhELE1BQU07O0VBRWI7RUFDQSxJQUFNOGtCLFNBQVMsR0FBRzlrQixNQUFNLENBQUNvRCxHQUFHLENBQUMsVUFBQUYsS0FBSztJQUFBLE9BQ2hDdWpCLFNBQVMsSUFBSSxDQUFDQSxTQUFTLENBQUN2akIsS0FBSyxDQUFDdkYsRUFBRSxDQUFDLElBQUl1RixLQUFLLENBQUNwRixNQUFNLENBQUMyRixTQUFTLEdBQ3ZEUCxLQUFLLENBQUNnRixpQkFBaUIsQ0FBQztNQUN0QjtNQUNBekUsU0FBUyxFQUFFO0lBQ2IsQ0FBQyxDQUFDLEdBQ0ZQLEtBQUs7RUFBQSxDQUNYLENBQUM7O0VBRUQ7RUFDQSxPQUFBbEcsYUFBQSxDQUFBQSxhQUFBLEtBQ0tnRyxLQUFLO0lBQ1JoRCxNQUFNLEVBQUU4a0IsU0FBUztJQUNqQnJqQixTQUFTLEVBQUU7RUFBRTtBQUVqQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTWlsQixnQkFBZ0IsR0FBQWpwQixPQUFBLENBQUFpcEIsZ0JBQUEsR0FBRyxTQUFuQkEsZ0JBQWdCQSxDQUMzQjFqQixLQUFlLEVBQ2Z3QixNQUE4QyxFQUNqQztFQUNiLElBQU9taUIsS0FBSyxHQUFpQ25pQixNQUFNLENBQTVDbWlCLEtBQUs7SUFBQUMsZ0JBQUEsR0FBaUNwaUIsTUFBTSxDQUFyQ3FpQixRQUFRO0lBQVJBLFFBQVEsR0FBQUQsZ0JBQUEsY0FBR0UseUJBQWdCLEdBQUFGLGdCQUFBO0VBQ3pDLElBQUksQ0FBQ0QsS0FBSyxDQUFDbHJCLE1BQU0sRUFBRTtJQUNqQixPQUFPdUgsS0FBSztFQUNkO0VBRUEsSUFBTWYsbUJBQW1CLEdBQUczRyxLQUFLLENBQUNpQixJQUFJLENBQUNvcUIsS0FBSyxDQUFDLENBQUNqWSxNQUFNLENBQ2xELFVBQUNDLElBQUksRUFBRTFVLENBQUMsRUFBRUQsQ0FBQztJQUFBLE9BQUssSUFBQXNaLHVCQUFNLEVBQUN5VCwwQkFBMEIsQ0FBQzlzQixDQUFDLEVBQUVELENBQUMsQ0FBQyxDQUFDLENBQUMyVSxJQUFJLENBQUM7RUFBQSxHQUM5RCxDQUFDLENBQ0gsQ0FBQztFQUVELElBQU0zTSxXQUFXLEdBQUc7SUFDbEJnbEIsU0FBUyxFQUFFLEVBQUU7SUFDYkMsV0FBVyxFQUFFTixLQUFLO0lBQ2xCRSxRQUFRLEVBQVJBO0VBQ0YsQ0FBQztFQUVELElBQU12aEIsU0FBUyxHQUFHLElBQUFnTyx1QkFBTSxFQUFDO0lBQUNyUixtQkFBbUIsRUFBbkJBLG1CQUFtQjtJQUFFRCxXQUFXLEVBQVhBO0VBQVcsQ0FBQyxDQUFDLENBQUNnQixLQUFLLENBQUM7RUFFbkUsT0FBT2trQixtQkFBbUIsQ0FBQzVoQixTQUFTLENBQUM7QUFDdkMsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUzZoQiwwQkFBMEJBLENBQ3hDbmtCLEtBQWUsRUFDZndCLE1BQWlELEVBQ3ZDO0VBQ1YsSUFBSSxDQUFDeEIsS0FBSyxDQUFDaEIsV0FBVyxFQUFFO0lBQ3RCLE9BQU9nQixLQUFLO0VBQ2Q7RUFDQSxJQUFPb2tCLFFBQVEsR0FBZTVpQixNQUFNLENBQTdCNGlCLFFBQVE7SUFBRUosU0FBUyxHQUFJeGlCLE1BQU0sQ0FBbkJ3aUIsU0FBUztFQUMxQixJQUFBSyxrQkFBQSxHQUFnQ3JrQixLQUFLLENBQUNoQixXQUFXO0lBQTFDaWxCLFdBQVcsR0FBQUksa0JBQUEsQ0FBWEosV0FBVztJQUFFSixRQUFRLEdBQUFRLGtCQUFBLENBQVJSLFFBQVE7RUFDNUIsSUFBTVMsaUJBQWlCLEdBQUdDLGdDQUFnQyxDQUFDdmtCLEtBQUssRUFBRTtJQUNoRW9rQixRQUFRLEVBQVJBLFFBQVE7SUFDUkksUUFBUSxFQUFFO01BQUNDLE9BQU8sRUFBRSxDQUFDO01BQUU3RSxPQUFPLEVBQUU7SUFBTTtFQUN4QyxDQUFDLENBQUM7O0VBRUY7RUFDQSxJQUFNOEUsY0FBYyxHQUFHLElBQUFyVSxzQkFBSyxFQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUFDLHVCQUFNLEVBQUM7SUFBQzBULFNBQVMsRUFBVEE7RUFBUyxDQUFDLENBQUMsQ0FBQyxDQUFDTSxpQkFBaUIsQ0FBQztFQUVuRixPQUFPLElBQUFqRSxlQUFRLEVBQ2JxRSxjQUFjLEVBQ2QsSUFBQUMsa0JBQVUsRUFBQyxHQUFHLENBQUMsQ0FBQ3ZrQixHQUFHLENBQUM2akIsV0FBVyxDQUFDeHJCLE1BQU0sR0FBR21zQixxQkFBWSxHQUFHO0lBQUEsT0FBTWYsUUFBUSxDQUFDRyxTQUFTLENBQUM7RUFBQSxFQUNuRixDQUFDO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNFLG1CQUFtQkEsQ0FBQ2xrQixLQUFlLEVBQVk7RUFDN0QsSUFBSSxDQUFDQSxLQUFLLENBQUNoQixXQUFXLEVBQUU7SUFDdEIsT0FBT2dCLEtBQUs7RUFDZDtFQUNBLElBQU9pa0IsV0FBVyxHQUFJamtCLEtBQUssQ0FBQ2hCLFdBQVcsQ0FBaENpbEIsV0FBVztFQUNsQixJQUFBWSxZQUFBLE9BQUFDLFNBQUEsYUFBd0NiLFdBQVc7SUFBNUNjLElBQUksR0FBQUYsWUFBQTtJQUFLRyxvQkFBb0IsR0FBQUgsWUFBQSxDQUFBenJCLEtBQUE7O0VBRXBDO0VBQ0EsSUFBTWtKLFNBQVMsR0FBRyxJQUFBK04sc0JBQUssRUFBQyxhQUFhLENBQUMsQ0FBQyxJQUFBQyx1QkFBTSxFQUFDO0lBQUMyVCxXQUFXLEVBQUVlO0VBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUNobEIsS0FBSyxDQUFDO0VBRTFGLElBQU1za0IsaUJBQWlCLEdBQUdDLGdDQUFnQyxDQUFDamlCLFNBQVMsRUFBRTtJQUNwRThoQixRQUFRLEVBQUVXLElBQUksQ0FBQ3pyQixJQUFJO0lBQ25Ca3JCLFFBQVEsRUFBRTtNQUFDQyxPQUFPLEVBQUUsQ0FBQztNQUFFN0UsT0FBTyxFQUFFO0lBQVk7RUFDOUMsQ0FBQyxDQUFDO0VBRUYsSUFBT3pnQixPQUFPLEdBQWlCYSxLQUFLLENBQTdCYixPQUFPO0lBQUVDLFdBQVcsR0FBSVksS0FBSyxDQUFwQlosV0FBVztFQUMzQixPQUFPLElBQUFpaEIsZUFBUSxFQUNiaUUsaUJBQWlCLEVBQ2pCVyxnQkFBZ0IsQ0FDZEYsSUFBSSxFQUNKemlCLFNBQVMsQ0FBQ3RELFdBQVcsSUFBSXNELFNBQVMsQ0FBQ3RELFdBQVcsQ0FBQ2dsQixTQUFTLEVBQ3hEN2tCLE9BQU8sRUFDUEMsV0FDRixDQUNGLENBQUM7QUFDSDtBQUVPLFNBQVM2bEIsZ0JBQWdCQSxDQUFDRixJQUFJLEVBQUVmLFNBQVMsRUFBNEM7RUFBQSxJQUExQzdrQixPQUFpQixHQUFBbEYsU0FBQSxDQUFBeEIsTUFBQSxRQUFBd0IsU0FBQSxRQUFBd0QsU0FBQSxHQUFBeEQsU0FBQSxNQUFHLEVBQUU7RUFBQSxJQUFFbUYsV0FBVyxHQUFBbkYsU0FBQSxDQUFBeEIsTUFBQSxRQUFBd0IsU0FBQSxRQUFBd0QsU0FBQSxHQUFBeEQsU0FBQSxNQUFHLENBQUMsQ0FBQztFQUN4RixPQUFPLElBQUFpckIsc0JBQWMsRUFBQztJQUFDSCxJQUFJLEVBQUpBLElBQUk7SUFBRWYsU0FBUyxFQUFUQSxTQUFTO0lBQUU3a0IsT0FBTyxFQUFQQSxPQUFPO0lBQUVDLFdBQVcsRUFBWEE7RUFBVyxDQUFDLENBQUMsQ0FBQytsQixLQUFLO0VBQ2xFO0VBQ0E7RUFDQSxVQUFBQyxHQUFHO0lBQUEsT0FDRCxJQUFBQyxzQkFBYSxFQUFDO01BQ1pELEdBQUcsRUFBSEEsR0FBRztNQUNIaEIsUUFBUSxFQUFFVyxJQUFJLENBQUN6ckIsSUFBSTtNQUNuQnVxQixRQUFRLEVBQUUsU0FBVkEsUUFBUUEsQ0FBRTdhLE1BQU07UUFBQSxPQUNkLElBQUFzYywyQkFBa0IsRUFBQztVQUNqQkMsT0FBTyxFQUFFdmMsTUFBTTtVQUNmZ2IsU0FBUyxFQUFUQTtRQUNGLENBQUMsQ0FBQztNQUFBO0lBQ04sQ0FBQyxDQUFDO0VBQUE7RUFFSjtFQUNBLFVBQUFoZ0IsR0FBRztJQUFBLE9BQUksSUFBQXdoQixxQkFBWSxFQUFDVCxJQUFJLENBQUN6ckIsSUFBSSxFQUFFMEssR0FBRyxDQUFDO0VBQUEsQ0FDckMsQ0FBQztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTeWhCLHlCQUF5QkEsQ0FDdkN6bEIsS0FBZSxFQUNmd0IsTUFBdUQsRUFDN0M7RUFDVixJQUFBa2tCLGdCQUFBLEdBQTZCbGtCLE1BQU0sQ0FBQ3ViLE9BQU87SUFBcEN3SSxPQUFPLEdBQUFHLGdCQUFBLENBQVBILE9BQU87SUFBRXZCLFNBQVMsR0FBQTBCLGdCQUFBLENBQVQxQixTQUFTO0VBRXpCLElBQU1NLGlCQUFpQixHQUFHQyxnQ0FBZ0MsQ0FBQ3ZrQixLQUFLLEVBQUU7SUFDaEVva0IsUUFBUSxFQUFFbUIsT0FBTyxDQUFDbkIsUUFBUTtJQUMxQkksUUFBUSxFQUFFO01BQUNDLE9BQU8sRUFBRSxDQUFDO01BQUU3RSxPQUFPLEVBQUU7SUFBZTtFQUNqRCxDQUFDLENBQUM7RUFFRixPQUFPLElBQUFTLGVBQVEsRUFDYmlFLGlCQUFpQixFQUNqQixJQUFBcUIseUJBQWlCLEVBQUM7SUFBQ0osT0FBTyxFQUFQQSxPQUFPO0lBQUV2QixTQUFTLEVBQVRBO0VBQVMsQ0FBQyxDQUFDLENBQUNtQixLQUFLLENBQzNDLFVBQUFuYyxNQUFNO0lBQUEsT0FBSSxJQUFBNGMsNEJBQW1CLEVBQUM7TUFBQ3hCLFFBQVEsRUFBRW1CLE9BQU8sQ0FBQ25CLFFBQVE7TUFBRUosU0FBUyxFQUFFaGI7SUFBTSxDQUFDLENBQUM7RUFBQSxHQUM5RSxVQUFBaEYsR0FBRztJQUFBLE9BQUksSUFBQXdoQixxQkFBWSxFQUFDRCxPQUFPLENBQUNuQixRQUFRLEVBQUVwZ0IsR0FBRyxDQUFDO0VBQUEsQ0FDNUMsQ0FDRixDQUFDO0FBQ0g7O0FBRUE7QUFDTyxTQUFTNmhCLGFBQWFBLENBQUEsRUFBOEI7RUFBQSxJQUE3QkMsWUFBWSxHQUFBN3JCLFNBQUEsQ0FBQXhCLE1BQUEsUUFBQXdCLFNBQUEsUUFBQXdELFNBQUEsR0FBQXhELFNBQUEsTUFBRyxDQUFDLENBQUM7RUFBQSxJQUFFdXFCLFFBQVEsR0FBQXZxQixTQUFBLENBQUF4QixNQUFBLE9BQUF3QixTQUFBLE1BQUF3RCxTQUFBO0VBQ3ZEO0VBQ0E7RUFDQSxJQUFJLENBQUMrbUIsUUFBUSxJQUFJLENBQUNBLFFBQVEsQ0FBQ0MsT0FBTyxFQUFFO0lBQ2xDLE9BQU8sQ0FBQyxDQUFDO0VBQ1g7RUFFQSxPQUFPO0lBQ0xBLE9BQU8sRUFBRUQsUUFBUSxDQUFDQztFQUNwQixDQUFDO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1zQixvQkFBb0IsR0FBQXRyQixPQUFBLENBQUFzckIsb0JBQUEsR0FBRyxTQUF2QkEsb0JBQW9CQSxDQUMvQi9sQixLQUFlLEVBQUFnbUIsTUFBQSxFQUlGO0VBQUEsSUFBQUMsaUJBQUE7RUFBQSxJQUFBQyxjQUFBLEdBQUFGLE1BQUEsQ0FGWGpKLE9BQU87SUFBR3FJLEdBQUcsR0FBQWMsY0FBQSxDQUFIZCxHQUFHO0lBQUVoQixRQUFRLEdBQUE4QixjQUFBLENBQVI5QixRQUFRO0lBQUVJLFFBQVEsR0FBQTBCLGNBQUEsQ0FBUjFCLFFBQVE7SUFBRTJCLFdBQVcsR0FBQUQsY0FBQSxDQUFYQyxXQUFXO0lBQUV0QyxRQUFRLEdBQUFxQyxjQUFBLENBQVJyQyxRQUFRO0VBRzFELElBQU1TLGlCQUFpQixHQUFHQyxnQ0FBZ0MsQ0FBQ3ZrQixLQUFLLEVBQUU7SUFDaEVva0IsUUFBUSxFQUFSQSxRQUFRO0lBQ1JJLFFBQVEsRUFBRXFCLGFBQWEsQ0FBQzdsQixLQUFLLENBQUNmLG1CQUFtQixDQUFDbWxCLFFBQVEsQ0FBQyxFQUFFSSxRQUFRO0VBQ3ZFLENBQUMsQ0FBQztFQUVGLE9BQU8sSUFBQW5FLGVBQVEsRUFBQ2lFLGlCQUFpQixLQUFBbmQsTUFBQSxLQUFBQyxtQkFBQSxhQUMzQixJQUFBZ2YsMkJBQW9CLEVBQUMsQ0FBQyxDQUFDQywwQkFBMEIsSUFDckRqQyxRQUFRLENBQUNrQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQzFCLENBQUFILFdBQVcsYUFBWEEsV0FBVyxnQkFBQUYsaUJBQUEsR0FBWEUsV0FBVyxDQUFFSSxJQUFJLGNBQUFOLGlCQUFBLHVCQUFqQkEsaUJBQUEsQ0FBbUJ4dEIsTUFBTSxJQUFHLENBQUMsR0FDekIsQ0FDRSxJQUFBa3RCLHlCQUFpQixFQUFDO0lBQUNKLE9BQU8sRUFBRVksV0FBVztJQUFFbkMsU0FBUyxFQUFFO0VBQUUsQ0FBQyxDQUFDLENBQUNtQixLQUFLLENBQzVELFVBQUFuYyxNQUFNO0lBQUEsT0FBSSxJQUFBOGEseUJBQWdCLEVBQUM5YSxNQUFNLENBQUM7RUFBQSxHQUNsQyxVQUFBaEYsR0FBRztJQUFBLE9BQUksSUFBQXdoQixxQkFBWSxFQUFDcEIsUUFBUSxFQUFFcGdCLEdBQUcsQ0FBQztFQUFBLENBQ3BDLENBQUMsQ0FDRixHQUNELEVBQUUsSUFDTixJQUFBd2lCLG1CQUFXLEVBQUNwQixHQUFHLENBQUNuc0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDa3NCLEtBQUssQ0FDM0IsVUFBQXNCLE1BQUEsRUFBbUI7SUFBQSxJQUFqQjN0QixLQUFLLEdBQUEydEIsTUFBQSxDQUFMM3RCLEtBQUs7TUFBRUQsSUFBSSxHQUFBNHRCLE1BQUEsQ0FBSjV0QixJQUFJO0lBQ1gsT0FBT0EsSUFBSSxHQUNQZ3JCLFFBQVEsQ0FBQ3NDLFdBQVcsQ0FBQyxHQUNyQixJQUFBZCxzQkFBYSxFQUFDO01BQ1pELEdBQUcsRUFBSEEsR0FBRztNQUNIaEIsUUFBUSxFQUFSQSxRQUFRO01BQ1JJLFFBQVEsRUFBRTFyQixLQUFLLENBQUMwckIsUUFBUTtNQUN4QjJCLFdBQVcsRUFBRXJ0QixLQUFLO01BQ2xCK3FCLFFBQVEsRUFBUkE7SUFDRixDQUFDLENBQUM7RUFDUixDQUFDLEVBQ0QsVUFBQTdmLEdBQUc7SUFBQSxPQUFJLElBQUF3aEIscUJBQVksRUFBQ3BCLFFBQVEsRUFBRXBnQixHQUFHLENBQUM7RUFBQSxDQUNwQyxDQUFDLEVBQ0YsQ0FBQztBQUNKLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU0waUIsbUJBQW1CLEdBQUFqc0IsT0FBQSxDQUFBaXNCLG1CQUFBLEdBQUcsU0FBdEJBLG1CQUFtQkEsQ0FDOUIxbUIsS0FBZSxFQUFBMm1CLE1BQUEsRUFFRjtFQUFBLElBRFp0ZCxLQUFLLEdBQUFzZCxNQUFBLENBQUx0ZCxLQUFLO0lBQUUrYSxRQUFRLEdBQUF1QyxNQUFBLENBQVJ2QyxRQUFRO0VBRWhCO0VBQ0FoYixlQUFPLENBQUNzSixJQUFJLENBQUNySixLQUFLLENBQUM7RUFDbkIsSUFBSSxDQUFDckosS0FBSyxDQUFDaEIsV0FBVyxFQUFFO0lBQ3RCLE9BQU9nQixLQUFLO0VBQ2Q7RUFDQSxJQUFBNG1CLG1CQUFBLEdBQTJDNW1CLEtBQUssQ0FBQ2hCLFdBQVc7SUFBckRpbEIsV0FBVyxHQUFBMkMsbUJBQUEsQ0FBWDNDLFdBQVc7SUFBRUosUUFBUSxHQUFBK0MsbUJBQUEsQ0FBUi9DLFFBQVE7SUFBRUcsU0FBUyxHQUFBNEMsbUJBQUEsQ0FBVDVDLFNBQVM7RUFFdkMsSUFBTTFoQixTQUFTLEdBQUdpaUIsZ0NBQWdDLENBQUN2a0IsS0FBSyxFQUFFO0lBQ3hEb2tCLFFBQVEsRUFBUkEsUUFBUTtJQUNSSSxRQUFRLEVBQUU7TUFBQ25iLEtBQUssRUFBTEE7SUFBSztFQUNsQixDQUFDLENBQUM7O0VBRUY7RUFDQSxPQUFPLElBQUFnWCxlQUFRLEVBQ2IvZCxTQUFTLEVBQ1QsSUFBQXFpQixrQkFBVSxFQUFDLEdBQUcsQ0FBQyxDQUFDdmtCLEdBQUcsQ0FBQzZqQixXQUFXLENBQUN4ckIsTUFBTSxHQUFHbXNCLHFCQUFZLEdBQUc7SUFBQSxPQUFNZixRQUFRLENBQUNHLFNBQVMsQ0FBQztFQUFBLEVBQ25GLENBQUM7QUFDSCxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNNkMscUJBQXFCLEdBQUFwc0IsT0FBQSxDQUFBb3NCLHFCQUFBLEdBQUcsU0FBeEJBLHFCQUFxQkEsQ0FDaEM3bUIsS0FBZSxFQUFBOG1CLE1BQUEsRUFFRjtFQUFBLElBRFoza0IsTUFBTSxHQUFBMmtCLE1BQUEsQ0FBTjNrQixNQUFNO0VBRVA7RUFDQSxJQUFNNGtCLE9BQU8sR0FBRyxJQUFBL1osb0JBQU8sRUFBQzdLLE1BQU0sQ0FBQztFQUUvQixPQUFPNGtCLE9BQU8sQ0FBQ3JiLE1BQU0sQ0FBQyxVQUFDQyxJQUFJLEVBQUVoUixFQUFFO0lBQUEsT0FBSyxJQUFBcXNCLHVCQUFnQixFQUFDcmIsSUFBSSxFQUFFaFIsRUFBRSxDQUFDO0VBQUEsR0FBRXFGLEtBQUssQ0FBQztBQUN4RSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNaW5CLGlCQUFpQixHQUFBeHNCLE9BQUEsQ0FBQXdzQixpQkFBQSxHQUFHLFNBQXBCQSxpQkFBaUJBLENBQzVCam5CLEtBQWUsRUFDZndCLE1BQStDO0VBQUEsT0FBQXhILGFBQUEsQ0FBQUEsYUFBQSxLQUU1Q2dHLEtBQUs7SUFDUm5ELE9BQU8sRUFBQTdDLGFBQUEsQ0FBQUEsYUFBQSxLQUNGZ0csS0FBSyxDQUFDbkQsT0FBTyxHQUNiMkUsTUFBTSxDQUFDc2MsSUFBSTtFQUNmO0FBQUEsQ0FDRDtBQUNGO0FBQ0E7QUFDQTtBQUNPLFNBQVNrRSxnQkFBZ0JBLENBQzlCaGlCLEtBQWUsRUFDZnpDLFFBQWtCLEVBQ3FCO0VBQ3ZDLElBQU0ycEIsS0FBYyxHQUFHLEVBQUU7RUFDekIsSUFBTUMsYUFBYSxHQUFHenZCLE1BQU0sQ0FBQzJRLE1BQU0sQ0FBQzlLLFFBQVEsQ0FBQyxDQUFDbU8sTUFBTSxDQUFDLFVBQUNDLElBQWEsRUFBRXpKLE9BQU8sRUFBSztJQUMvRSxJQUFNa2xCLFdBQVcsR0FBRyxJQUFBQyw0QkFBZ0IsRUFBQ25sQixPQUFPLEVBQUVsQyxLQUFLLENBQUNwQixZQUFZLENBQUM7SUFDakUsT0FBT3dvQixXQUFXLElBQUlBLFdBQVcsQ0FBQzN1QixNQUFNLEdBQUdrVCxJQUFJLENBQUN4RSxNQUFNLENBQUNpZ0IsV0FBVyxDQUFDLEdBQUd6YixJQUFJO0VBQzVFLENBQUMsRUFBRXViLEtBQUssQ0FBQztFQUVULE9BQU87SUFDTGxuQixLQUFLLEVBQUFoRyxhQUFBLENBQUFBLGFBQUEsS0FDQWdHLEtBQUs7TUFDUmhELE1BQU0sS0FBQW1LLE1BQUEsS0FBQUMsbUJBQUEsYUFBTXBILEtBQUssQ0FBQ2hELE1BQU0sT0FBQW9LLG1CQUFBLGFBQUsrZixhQUFhLEVBQUM7TUFDM0NocUIsVUFBVSxLQUFBZ0ssTUFBQSxLQUFBQyxtQkFBQSxhQUVMLElBQUFrZ0IsbUNBQXVCLEVBQUNILGFBQWEsQ0FBQyxPQUFBL2YsbUJBQUEsYUFDdENwSCxLQUFLLENBQUM3QyxVQUFVO0lBQ3BCLEVBQ0Y7SUFDRDJrQixTQUFTLEVBQUVxRjtFQUNiLENBQUM7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTL0Usa0JBQWtCQSxDQUFDcGlCLEtBQUssRUFBRWtDLE9BQU8sRUFBRTtFQUNqRCxJQUFNZ2dCLGFBQWEsR0FBRyxJQUFBcUYsa0NBQWdCLEVBQUF2dEIsYUFBQSxDQUFBQSxhQUFBLEtBQ2pDa0ksT0FBTztJQUNWM0Qsa0JBQWtCLEVBQUV5QixLQUFLLENBQUN6QjtFQUFrQixFQUM3QyxDQUFDO0VBQ0YsSUFBTWlwQixNQUFNLEdBQUF4dEIsYUFBQSxDQUFBQSxhQUFBLEtBQ1BnRyxLQUFLLENBQUNoQyxpQkFBaUIsQ0FBQ3RELE9BQU8sQ0FBQ0ksTUFBTSxDQUFDQyxZQUFZLEdBQ25EbW5CLGFBQWEsQ0FDakI7RUFFRCxPQUFPLElBQUE1cUIsVUFBRyxFQUFDLENBQUMsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsRUFBRWt3QixNQUFNLEVBQUV4bkIsS0FBSyxDQUFDO0FBQ3ZGO0FBRU8sU0FBUytqQiwwQkFBMEJBLENBQUNnQixJQUFJLEVBQUUvVCxLQUFLLEVBQUU7RUFDdEQsSUFBTW9ULFFBQVEsR0FBR1csSUFBSSxDQUFDenJCLElBQUkscUJBQUE2TixNQUFBLENBQXFCNkosS0FBSyxDQUFFO0VBQ3RELFdBQUE3VyxnQkFBQSxpQkFDR2lxQixRQUFRLEVBQUc7SUFDVjtJQUNBSyxPQUFPLEVBQUUsQ0FBQztJQUNWN0UsT0FBTyxFQUFFLEVBQUU7SUFDWHdFLFFBQVEsRUFBUkEsUUFBUTtJQUNSL2EsS0FBSyxFQUFFO0VBQ1QsQ0FBQztBQUVMO0FBRU8sU0FBU2tiLGdDQUFnQ0EsQ0FBQ3ZrQixLQUFLLEVBQUF5bkIsTUFBQSxFQUF3QjtFQUFBLElBQXJCckQsUUFBUSxHQUFBcUQsTUFBQSxDQUFSckQsUUFBUTtJQUFFSSxRQUFRLEdBQUFpRCxNQUFBLENBQVJqRCxRQUFRO0VBQ3pFO0VBQ0EsT0FBTyxJQUFBblUsc0JBQUssRUFBQyxxQkFBcUIsQ0FBQyxDQUFDLElBQUFBLHNCQUFLLEVBQUMrVCxRQUFRLENBQUMsQ0FBQyxJQUFBOVQsdUJBQU0sRUFBQ2tVLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ3hrQixLQUFLLENBQUM7QUFDL0U7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTZ08sd0JBQXdCQSxDQUN0Q2hPLEtBQVEsRUFDUm1DLE1BQXlCLEVBQ3pCcU4sYUFBc0IsRUFDbkI7RUFDSCxJQUFNdVgsT0FBTyxHQUFHLE9BQU81a0IsTUFBTSxLQUFLLFFBQVEsR0FBRyxDQUFDQSxNQUFNLENBQUMsR0FBR0EsTUFBTTtFQUM5RCxJQUFNMmYsU0FBa0IsR0FBRyxFQUFFO0VBQzdCLElBQU10UCxZQUFtQixHQUFHLEVBQUU7RUFFOUJ4UyxLQUFLLENBQUNoRCxNQUFNLENBQUM5QyxPQUFPLENBQUMsVUFBQzZILFFBQVEsRUFBRS9LLENBQUMsRUFBSztJQUNwQyxJQUFJK0ssUUFBUSxDQUFDakgsTUFBTSxDQUFDcUgsTUFBTSxJQUFJNGtCLE9BQU8sQ0FBQy9mLFFBQVEsQ0FBQ2pGLFFBQVEsQ0FBQ2pILE1BQU0sQ0FBQ3FILE1BQU0sQ0FBQyxFQUFFO01BQ3RFO01BQ0EsSUFBTUMsUUFBUSxHQUNab04sYUFBYSxJQUFJQSxhQUFhLENBQUNrWSxXQUFXLEdBQ3RDM2xCLFFBQVEsR0FDUkEsUUFBUSxDQUFDOEcsaUJBQWlCLENBQUM3SSxLQUFLLENBQUN6QyxRQUFRLEVBQUVpUyxhQUFhLENBQUM7TUFFL0QsSUFBQW1ZLG9CQUFBLEdBQTJCLElBQUFyaUIsOEJBQWtCLEVBQUNsRCxRQUFRLEVBQUVwQyxLQUFLLEVBQUVBLEtBQUssQ0FBQy9DLFNBQVMsQ0FBQ2pHLENBQUMsQ0FBQyxDQUFDO1FBQTNFaUcsU0FBUyxHQUFBMHFCLG9CQUFBLENBQVQxcUIsU0FBUztRQUFFaUQsS0FBSyxHQUFBeW5CLG9CQUFBLENBQUx6bkIsS0FBSztNQUV2QjRoQixTQUFTLENBQUNob0IsSUFBSSxDQUFDb0csS0FBSyxDQUFDO01BQ3JCc1MsWUFBWSxDQUFDMVksSUFBSSxDQUFDbUQsU0FBUyxDQUFDO0lBQzlCLENBQUMsTUFBTTtNQUNMNmtCLFNBQVMsQ0FBQ2hvQixJQUFJLENBQUNpSSxRQUFRLENBQUM7TUFDeEJ5USxZQUFZLENBQUMxWSxJQUFJLENBQUNrRyxLQUFLLENBQUMvQyxTQUFTLENBQUNqRyxDQUFDLENBQUMsQ0FBQztJQUN2QztFQUNGLENBQUMsQ0FBQztFQUVGLElBQU13SixRQUFRLEdBQUF4RyxhQUFBLENBQUFBLGFBQUEsS0FDVGdHLEtBQUs7SUFDUmhELE1BQU0sRUFBRThrQixTQUFTO0lBQ2pCN2tCLFNBQVMsRUFBRXVWO0VBQVksRUFDeEI7RUFFRCxPQUFPaFMsUUFBUTtBQUNqQjtBQUVPLFNBQVNLLHFCQUFxQkEsQ0FBcUJiLEtBQVEsRUFBSztFQUFBLElBQUE0bkIsY0FBQTtFQUNyRTtFQUNBLElBQU1DLGdCQUFnQixHQUFHLElBQUFwakIsaUNBQTBCLEVBQUN6RSxLQUFLLENBQUNoRCxNQUFNLENBQUM7RUFFakUsSUFBSSxDQUFDNnFCLGdCQUFnQixDQUFDcHZCLE1BQU0sRUFBRTtJQUM1QixPQUFBdUIsYUFBQSxDQUFBQSxhQUFBLEtBQ0tnRyxLQUFLO01BQ1JsQixlQUFlLEVBQUE5RSxhQUFBLENBQUFBLGFBQUEsS0FDVmdHLEtBQUssQ0FBQ2xCLGVBQWU7UUFDeEJuRCxNQUFNLEVBQUUsSUFBSTtRQUNaRyxXQUFXLEVBQUUsS0FBSztRQUNsQkMsU0FBUyxFQUFFLElBQUk7UUFDZkcsaUJBQWlCLEVBQUU7TUFBSTtJQUN4QjtFQUVMO0VBRUEsSUFBTTRyQixZQUFZLEdBQUdELGdCQUFnQixDQUFDem5CLEdBQUcsQ0FBQyxVQUFBNkIsQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQ25ILE1BQU0sQ0FBQzhGLFNBQVMsQ0FBQ2pGLE1BQU0sSUFBSSxFQUFFO0VBQUEsRUFBQztFQUMvRTtFQUNBLElBQU1vc0IsWUFBWSxHQUFHLElBQUFDLHVCQUFnQixFQUFDRixZQUFZLENBQUM7RUFDbkQsSUFBTTVyQixpQkFBaUIsR0FBRyxJQUFBK3JCLGtDQUEyQixFQUFDRixZQUFZLENBQUM7O0VBRW5FO0VBQ0EsSUFBSUcsZUFBZ0MsR0FBRyxJQUFBcmEsZ0JBQUksRUFDekNnYSxnQkFBZ0IsQ0FBQ25jLE1BQU0sQ0FBQyxVQUFDQyxJQUFJLEVBQUV6TCxLQUFLLEVBQUs7SUFDdkN5TCxJQUFJLENBQUM3UixJQUFJLENBQUFDLEtBQUEsQ0FBVDRSLElBQUksTUFBQXZFLG1CQUFBLGFBQVVsSCxLQUFLLENBQUNwRixNQUFNLENBQUM4RixTQUFTLENBQUM3RSxTQUFTLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdEQsT0FBTzRQLElBQUk7RUFDYixDQUFDLEVBQUUsRUFBRSxDQUNQLENBQUMsQ0FBQ3djLElBQUksQ0FBQyxDQUFDO0VBRVJELGVBQWUsR0FBR0EsZUFBZSxDQUFDenZCLE1BQU0sR0FBR3l2QixlQUFlLEdBQUcsSUFBSTs7RUFFakU7RUFDQSxJQUFNOXJCLFFBQVEsR0FBRzhyQixlQUFlLEdBQzNCRSxxQkFBVSxJQUFJLElBQUksR0FBR0MsY0FBRyxDQUFDLEdBQUlILGVBQWUsQ0FBQ3p2QixNQUFNLElBQUl1SCxLQUFLLENBQUNsQixlQUFlLENBQUNqRCxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQ3pGLElBQUk7RUFFUixJQUFNeUcsU0FBUyxHQUFBdEksYUFBQSxDQUFBQSxhQUFBLEtBQ1ZnRyxLQUFLO0lBQ1JsQixlQUFlLEVBQUE5RSxhQUFBLENBQUFBLGFBQUEsS0FDVmdHLEtBQUssQ0FBQ2xCLGVBQWU7TUFDeEJuRCxNQUFNLEVBQUVvc0IsWUFBWTtNQUNwQjdyQixpQkFBaUIsRUFBakJBLGlCQUFpQjtNQUNqQkUsUUFBUSxFQUFSQSxRQUFRO01BQ1JMLFNBQVMsRUFBRW1zQjtJQUFlO0VBQzNCLEVBQ0Y7O0VBRUQ7RUFDQSxJQUFNSSxZQUFZLElBQUFWLGNBQUEsR0FBRzVuQixLQUFLLENBQUMzQyxPQUFPLGNBQUF1cUIsY0FBQSx1QkFBYkEsY0FBQSxDQUFlNWxCLElBQUksQ0FBQyxVQUFBL0ssQ0FBQztJQUFBLE9BQUtBLENBQUMsQ0FBcUIrTyx1QkFBdUI7RUFBQSxFQUUvRTs7RUFFYjtFQUNBO0VBQ0EsSUFBTXVpQixrQkFBa0IsR0FBR0QsWUFBWSxHQUNuQyxJQUFBTix1QkFBZ0IsRUFBQyxDQUFDRCxZQUFZLEVBQUVPLFlBQVksQ0FBQzNzQixNQUFNLENBQUMsQ0FBQyxHQUNyRG9zQixZQUFZO0VBQ2hCLElBQU1uc0IsV0FBVyxHQUFHLElBQUE0c0IsZ0JBQVMsRUFBQ3hvQixLQUFLLENBQUNsQixlQUFlLENBQUNsRCxXQUFXLEVBQUUyc0Isa0JBQWtCLENBQUMsR0FDaEZ2b0IsS0FBSyxDQUFDbEIsZUFBZSxDQUFDbEQsV0FBVyxHQUNqQzJzQixrQkFBa0IsQ0FBQyxDQUFDLENBQUM7RUFFekIsSUFBSTNzQixXQUFXLEtBQUtvRSxLQUFLLENBQUNsQixlQUFlLENBQUNsRCxXQUFXLEVBQUU7SUFDckQ7SUFDQSxPQUFPNFAsNEJBQTRCLENBQUNsSixTQUFTLEVBQUU7TUFBQ3hKLEtBQUssRUFBRThDO0lBQVcsQ0FBQyxDQUFDO0VBQ3RFO0VBRUEsT0FBTzBHLFNBQVM7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNbW1CLG9CQUFvQixHQUFBaHVCLE9BQUEsQ0FBQWd1QixvQkFBQSxHQUFHLFNBQXZCQSxvQkFBb0JBLENBQy9Cem9CLEtBQWUsRUFBQTBvQixNQUFBO0VBQUEsSUFDZHBzQixJQUFJLEdBQUFvc0IsTUFBQSxDQUFKcHNCLElBQUk7RUFBQSxPQUFBdEMsYUFBQSxDQUFBQSxhQUFBLEtBRUZnRyxLQUFLO0lBQ1JqQixNQUFNLEVBQUEvRSxhQUFBLENBQUFBLGFBQUEsS0FDRGdHLEtBQUssQ0FBQ2pCLE1BQU07TUFDZnpDLElBQUksRUFBSkEsSUFBSTtNQUNKSSxlQUFlLEVBQUU7SUFBSTtFQUN0QjtBQUFBLENBQ0Q7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNpc0Isa0JBQWtCQSxDQUNoQzNvQixLQUFlLEVBQUE0b0IsTUFBQSxFQUVMO0VBQUEsSUFBQUMscUJBQUEsRUFBQUMsc0JBQUE7RUFBQSxJQUFBQyxlQUFBLEdBQUFILE1BQUEsQ0FEVG5zQixRQUFRO0lBQVJBLFFBQVEsR0FBQXNzQixlQUFBLGNBQUcsRUFBRSxHQUFBQSxlQUFBO0VBRWQsSUFBTUMsV0FBVyxHQUFHdnNCLFFBQVEsQ0FBQ2hFLE1BQU0sSUFBSWdFLFFBQVEsQ0FBQ0EsUUFBUSxDQUFDaEUsTUFBTSxHQUFHLENBQUMsQ0FBQztFQUVwRSxJQUFNK0gsUUFBUSxHQUFBeEcsYUFBQSxDQUFBQSxhQUFBLEtBQ1RnRyxLQUFLO0lBQ1JqQixNQUFNLEVBQUEvRSxhQUFBLENBQUFBLGFBQUEsS0FDRGdHLEtBQUssQ0FBQ2pCLE1BQU07TUFDZjtNQUNBdEMsUUFBUSxFQUFFQSxRQUFRLENBQUM3QyxNQUFNLENBQUMsVUFBQTNDLENBQUM7UUFBQSxPQUFJLENBQUMsSUFBQXFiLDJCQUFvQixFQUFDcmIsQ0FBQyxDQUFDO01BQUEsRUFBQztNQUN4RHFGLElBQUksRUFDRjBzQixXQUFXLEtBQUFILHFCQUFBLEdBQUlHLFdBQVcsQ0FBQ0MsVUFBVSxjQUFBSixxQkFBQSxlQUF0QkEscUJBQUEsQ0FBd0JLLFFBQVEsR0FDM0MsRUFBQUosc0JBQUEsR0FBQUUsV0FBVyxDQUFDQyxVQUFVLGNBQUFILHNCQUFBLHVCQUF0QkEsc0JBQUEsQ0FBd0JLLEtBQUssTUFBSyxXQUFXLEdBQzNDbnBCLEtBQUssQ0FBQ2pCLE1BQU0sQ0FBQ3pDLElBQUksR0FDakJDLHVCQUFZLENBQUM2c0IsSUFBSSxHQUNuQnBwQixLQUFLLENBQUNqQixNQUFNLENBQUN6QztJQUFJO0VBQ3hCLEVBQ0Y7O0VBRUQ7RUFDQSxJQUFPSSxlQUFlLEdBQUlzRCxLQUFLLENBQUNqQixNQUFNLENBQS9CckMsZUFBZTs7RUFFdEI7RUFDQSxJQUFJLENBQUNBLGVBQWUsRUFBRTtJQUNwQixPQUFPOEQsUUFBUTtFQUNqQjs7RUFFQTtFQUNBLElBQU02b0IsT0FBTyxHQUFHNXNCLFFBQVEsQ0FBQ3VGLElBQUksQ0FBQyxVQUFBL0ssQ0FBQztJQUFBLE9BQUlBLENBQUMsQ0FBQzBELEVBQUUsS0FBSytCLGVBQWUsQ0FBQy9CLEVBQUU7RUFBQSxFQUFDOztFQUUvRDtFQUNBLElBQU02UixRQUFRLEdBQUc2YyxPQUFPLElBQUksSUFBQS9XLDJCQUFvQixFQUFDK1csT0FBTyxDQUFDO0VBQ3pELElBQUk3YyxRQUFRLElBQUk2YyxPQUFPLEVBQUU7SUFDdkI7SUFDQSxJQUFJQSxPQUFPLENBQUNKLFVBQVUsRUFBRUksT0FBTyxDQUFDSixVQUFVLENBQUNLLElBQUksR0FBRyxJQUFBQSxVQUFJLEVBQUNELE9BQWdDLENBQUM7SUFDeEYsSUFBTUUsWUFBWSxHQUFHLElBQUF0WCwyQkFBb0IsRUFBQ29YLE9BQU8sRUFBRTdjLFFBQVEsQ0FBQztJQUM1RCxJQUFNZ2QsU0FBUyxHQUFHeHBCLEtBQUssQ0FBQzNDLE9BQU8sQ0FBQ29GLFNBQVMsQ0FBQyxVQUFBZ25CLEdBQUc7TUFBQSxPQUFJQSxHQUFHLENBQUM5dUIsRUFBRSxLQUFLNlIsUUFBUTtJQUFBLEVBQUM7SUFDckU7SUFDQSxPQUFPWCxnQkFBZ0IsQ0FBQ3JMLFFBQVEsRUFBRTtNQUNoQ0wsR0FBRyxFQUFFcXBCLFNBQVM7TUFDZC9sQixJQUFJLEVBQUUsT0FBTztNQUNiM0ssS0FBSyxFQUFFeXdCO0lBQ1QsQ0FBQyxDQUFDO0VBQ0o7RUFFQSxPQUFPL29CLFFBQVE7QUFDakI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNa3BCLHlCQUF5QixHQUFBanZCLE9BQUEsQ0FBQWl2Qix5QkFBQSxHQUFHLFNBQTVCQSx5QkFBeUJBLENBQ3BDMXBCLEtBQWUsRUFBQTJwQixNQUFBLEVBRUY7RUFBQSxJQURaTixPQUFPLEdBQUFNLE1BQUEsQ0FBUE4sT0FBTztJQUFFTyxnQkFBZ0IsR0FBQUQsTUFBQSxDQUFoQkMsZ0JBQWdCO0VBRTFCO0VBQ0EsSUFBSWx0QixlQUFlLEdBQUcyc0IsT0FBTztFQUM3QixJQUFJQSxPQUFPLGFBQVBBLE9BQU8sZUFBUEEsT0FBTyxDQUFFSixVQUFVLEVBQUU7SUFDdkJ2c0IsZUFBZSxHQUFBMUMsYUFBQSxDQUFBQSxhQUFBLEtBQ1ZxdkIsT0FBTztNQUNWSixVQUFVLEVBQUFqdkIsYUFBQSxDQUFBQSxhQUFBLEtBQ0xxdkIsT0FBTyxDQUFDSixVQUFVO1FBQ3JCSyxJQUFJLEVBQUUsSUFBQUEsVUFBSSxFQUFDRCxPQUFnQztNQUFDO0lBQzdDLEVBQ0Y7RUFDSDtFQUNBLE9BQUFydkIsYUFBQSxDQUFBQSxhQUFBLEtBQ0tnRyxLQUFLO0lBQ1JqQixNQUFNLEVBQUEvRSxhQUFBLENBQUFBLGFBQUEsS0FDRGdHLEtBQUssQ0FBQ2pCLE1BQU07TUFDZnJDLGVBQWUsRUFBZkEsZUFBZTtNQUNma3RCLGdCQUFnQixFQUFoQkE7SUFBZ0I7RUFDakI7QUFFTCxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0Msb0JBQW9CQSxDQUNsQzdwQixLQUFlLEVBQUE4cEIsTUFBQSxFQUVMO0VBQUEsSUFEVFQsT0FBTyxHQUFBUyxNQUFBLENBQVBULE9BQU87RUFFUixJQUFJLENBQUNBLE9BQU8sRUFBRTtJQUNaLE9BQU9ycEIsS0FBSztFQUNkO0VBRUEsSUFBTVEsUUFBUSxHQUFBeEcsYUFBQSxDQUFBQSxhQUFBLEtBQ1RnRyxLQUFLO0lBQ1JqQixNQUFNLEVBQUEvRSxhQUFBLENBQUFBLGFBQUEsS0FDRGdHLEtBQUssQ0FBQ2pCLE1BQU07TUFDZnJDLGVBQWUsRUFBRTtJQUFJO0VBQ3RCLEVBQ0Y7RUFFRCxJQUFJLElBQUE0ViwyQkFBb0IsRUFBQytXLE9BQU8sQ0FBQyxFQUFFO0lBQ2pDLElBQU1HLFNBQVMsR0FBR2hwQixRQUFRLENBQUNuRCxPQUFPLENBQUNvRixTQUFTLENBQUMsVUFBQXhMLENBQUM7TUFBQSxPQUFJQSxDQUFDLENBQUMwRCxFQUFFLEtBQUssSUFBQTJYLDJCQUFvQixFQUFDK1csT0FBTyxDQUFDO0lBQUEsRUFBQztJQUV6RixPQUFPRyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUd0WCxtQkFBbUIsQ0FBQzFSLFFBQVEsRUFBRTtNQUFDTCxHQUFHLEVBQUVxcEI7SUFBUyxDQUFDLENBQUMsR0FBR2hwQixRQUFRO0VBQ3BGOztFQUVBO0VBQ0EsSUFBTTZSLFNBQVMsR0FBQXJZLGFBQUEsQ0FBQUEsYUFBQSxLQUNWZ0csS0FBSyxDQUFDakIsTUFBTTtJQUNmdEMsUUFBUSxFQUFFdUQsS0FBSyxDQUFDakIsTUFBTSxDQUFDdEMsUUFBUSxDQUFDN0MsTUFBTSxDQUFDLFVBQUEzQyxDQUFDO01BQUEsT0FBSUEsQ0FBQyxDQUFDMEQsRUFBRSxLQUFLMHVCLE9BQU8sQ0FBQzF1QixFQUFFO0lBQUEsRUFBQztJQUNoRStCLGVBQWUsRUFBRTtFQUFJLEVBQ3RCO0VBRUQsT0FBQTFDLGFBQUEsQ0FBQUEsYUFBQSxLQUNLZ0csS0FBSztJQUNSakIsTUFBTSxFQUFFc1Q7RUFBUztBQUVyQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVMwWCw0QkFBNEJBLENBQzFDL3BCLEtBQWUsRUFDZitjLE9BQTJELEVBQ2pEO0VBQ1YsSUFBTzdjLEtBQUssR0FBYTZjLE9BQU8sQ0FBekI3YyxLQUFLO0lBQUVtcEIsT0FBTyxHQUFJdE0sT0FBTyxDQUFsQnNNLE9BQU87RUFDckIsSUFBTTdjLFFBQVEsR0FBRyxJQUFBOEYsMkJBQW9CLEVBQUMrVyxPQUFPLENBQUM7O0VBRTlDO0VBQ0EsSUFBSUcsU0FBUztFQUNiLElBQUk1bUIsVUFBVSxHQUFHLENBQUMxQyxLQUFLLENBQUN2RixFQUFFLENBQUM7RUFDM0IsSUFBSTZGLFFBQVEsR0FBR1IsS0FBSztFQUNwQjtFQUNBLElBQUl3TSxRQUFRLEVBQUU7SUFDWmdkLFNBQVMsR0FBR3hwQixLQUFLLENBQUMzQyxPQUFPLENBQUNvRixTQUFTLENBQUMsVUFBQXhMLENBQUM7TUFBQSxPQUFJQSxDQUFDLENBQUMwRCxFQUFFLEtBQUs2UixRQUFRO0lBQUEsRUFBQztJQUUzRCxJQUFJLENBQUN4TSxLQUFLLENBQUMzQyxPQUFPLENBQUNtc0IsU0FBUyxDQUFDLEVBQUU7TUFDN0I7TUFDQTtNQUNBO01BQ0EsSUFBTVEsaUJBQWlCLEdBQUFod0IsYUFBQSxDQUFBQSxhQUFBLEtBQ2xCcXZCLE9BQU87UUFDVkosVUFBVSxFQUFBanZCLGFBQUEsQ0FBQUEsYUFBQSxLQUNMcXZCLE9BQU8sQ0FBQ0osVUFBVTtVQUNyQnpjLFFBQVEsRUFBRTtRQUFJO01BQ2YsRUFDRjtNQUVELE9BQUF4UyxhQUFBLENBQUFBLGFBQUEsS0FDS2dHLEtBQUs7UUFDUmpCLE1BQU0sRUFBQS9FLGFBQUEsQ0FBQUEsYUFBQSxLQUNEZ0csS0FBSyxDQUFDakIsTUFBTTtVQUNmdEMsUUFBUSxLQUFBMEssTUFBQSxLQUFBQyxtQkFBQSxhQUFNcEgsS0FBSyxDQUFDakIsTUFBTSxDQUFDdEMsUUFBUSxJQUFFdXRCLGlCQUFpQixFQUFDO1VBQ3ZEdHRCLGVBQWUsRUFBRXN0QjtRQUFpQjtNQUNuQztJQUVMO0lBQ0EsSUFBTXB3QixNQUFNLEdBQUdvRyxLQUFLLENBQUMzQyxPQUFPLENBQUNtc0IsU0FBUyxDQUFDO0lBQ3ZDLElBQUFTLGVBQUEsR0FBdUJyd0IsTUFBTSxDQUF0QjhMLE9BQU87TUFBUEEsT0FBTyxHQUFBdWtCLGVBQUEsY0FBRyxFQUFFLEdBQUFBLGVBQUE7SUFDbkIsSUFBTUMsZUFBZSxHQUFHeGtCLE9BQU8sQ0FBQ3NCLFFBQVEsQ0FBQzlHLEtBQUssQ0FBQ3ZGLEVBQUUsQ0FBQztJQUVsRGlJLFVBQVUsR0FBR3NuQixlQUFlO0lBQ3hCO0lBQ0F4a0IsT0FBTyxDQUFDOUwsTUFBTSxDQUFDLFVBQUFxSSxDQUFDO01BQUEsT0FBSUEsQ0FBQyxLQUFLL0IsS0FBSyxDQUFDdkYsRUFBRTtJQUFBLEVBQUMsTUFBQXdNLE1BQUEsS0FBQUMsbUJBQUEsYUFDL0IxQixPQUFPLElBQUV4RixLQUFLLENBQUN2RixFQUFFLEVBQUM7RUFDNUIsQ0FBQyxNQUFNO0lBQ0w7SUFDQSxJQUFNc1IsU0FBUyxHQUFHLElBQUFrZSw0QkFBcUIsRUFBQyxFQUFFLEVBQUVkLE9BQU8sQ0FBQztJQUNwREcsU0FBUyxHQUFHeHBCLEtBQUssQ0FBQzNDLE9BQU8sQ0FBQzVFLE1BQU07O0lBRWhDO0lBQ0ErSCxRQUFRLEdBQUF4RyxhQUFBLENBQUFBLGFBQUEsS0FDSGdHLEtBQUs7TUFDUjNDLE9BQU8sS0FBQThKLE1BQUEsS0FBQUMsbUJBQUEsYUFBTXBILEtBQUssQ0FBQzNDLE9BQU8sSUFBRTRPLFNBQVMsRUFBQztNQUN0Q2xOLE1BQU0sRUFBQS9FLGFBQUEsQ0FBQUEsYUFBQSxLQUNEZ0csS0FBSyxDQUFDakIsTUFBTTtRQUNmdEMsUUFBUSxFQUFFdUQsS0FBSyxDQUFDakIsTUFBTSxDQUFDdEMsUUFBUSxDQUFDN0MsTUFBTSxDQUFDLFVBQUEzQyxDQUFDO1VBQUEsT0FBSUEsQ0FBQyxDQUFDMEQsRUFBRSxLQUFLMHVCLE9BQU8sQ0FBQzF1QixFQUFFO1FBQUEsRUFBQztRQUNoRStCLGVBQWUsRUFBRXVQLFNBQVMsQ0FBQ25UO01BQUs7SUFDakMsRUFDRjtFQUNIO0VBRUEsT0FBTytTLGdCQUFnQixDQUFDckwsUUFBUSxFQUFFO0lBQ2hDTCxHQUFHLEVBQUVxcEIsU0FBUztJQUNkL2xCLElBQUksRUFBRSxTQUFTO0lBQ2YzSyxLQUFLLEVBQUU4SjtFQUNULENBQUMsQ0FBQztBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU3duQixnQ0FBZ0NBLENBQzlDcHFCLEtBQWUsRUFDZitjLE9BQStELEVBQ3JEO0VBQ1YsSUFBT3NNLE9BQU8sR0FBSXRNLE9BQU8sQ0FBbEJzTSxPQUFPO0VBRWQsSUFBTXBkLFNBQVMsR0FBRyxJQUFBa2UsNEJBQXFCLEVBQUMsRUFBRSxFQUFFZCxPQUFPLENBQUM7RUFDcEQsSUFBTUcsU0FBUyxHQUFHeHBCLEtBQUssQ0FBQzNDLE9BQU8sQ0FBQzVFLE1BQU07RUFFdEMsSUFBTStILFFBQWtCLEdBQUF4RyxhQUFBLENBQUFBLGFBQUEsS0FDbkJnRyxLQUFLO0lBQ1IzQyxPQUFPLEtBQUE4SixNQUFBLEtBQUFDLG1CQUFBLGFBQU1wSCxLQUFLLENBQUMzQyxPQUFPLElBQUU0TyxTQUFTLEVBQUM7SUFDdENsTixNQUFNLEVBQUEvRSxhQUFBLENBQUFBLGFBQUEsS0FDRGdHLEtBQUssQ0FBQ2pCLE1BQU07TUFDZnRDLFFBQVEsRUFBRXVELEtBQUssQ0FBQ2pCLE1BQU0sQ0FBQ3RDLFFBQVEsQ0FBQzdDLE1BQU0sQ0FBQyxVQUFBM0MsQ0FBQztRQUFBLE9BQUlBLENBQUMsQ0FBQzBELEVBQUUsS0FBSzB1QixPQUFPLENBQUMxdUIsRUFBRTtNQUFBLEVBQUM7TUFDaEUrQixlQUFlLEVBQUV1UCxTQUFTLENBQUNuVCxLQUFLO01BQ2hDd0QsSUFBSSxFQUFFQyx1QkFBWSxDQUFDNnNCO0lBQUk7RUFDeEIsRUFDRjtFQUVELElBQU1pQixlQUFlLEdBQUcsSUFBQWh6QixlQUFHLEVBQUMwbEIsT0FBTyxFQUFFLGlCQUFpQixDQUFDO0VBQ3ZELElBQU11TixXQUFXLEdBQUdoeUIsS0FBSyxDQUFDQyxPQUFPLENBQUM4eEIsZUFBZSxDQUFDLEdBQzlDQSxlQUFlLEdBQ2ZycUIsS0FBSyxDQUFDaEQsTUFBTSxDQUFDcEQsTUFBTSxDQUFDLFVBQUFxSSxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDbkgsTUFBTSxDQUFDMkYsU0FBUztFQUFBLEVBQUMsQ0FBQ0wsR0FBRyxDQUFDLFVBQUE2QixDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDdEgsRUFBRTtFQUFBLEVBQUM7RUFFL0QsT0FBT2tSLGdCQUFnQixDQUFDckwsUUFBUSxFQUFFO0lBQ2hDTCxHQUFHLEVBQUVxcEIsU0FBUztJQUNkL2xCLElBQUksRUFBRSxTQUFTO0lBQ2YzSyxLQUFLLEVBQUV3eEI7RUFDVCxDQUFDLENBQUM7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLHNCQUFzQkEsQ0FDcEN2cUIsS0FBZSxFQUFBd3FCLE1BQUEsRUFFTDtFQUFBLElBRFRyb0IsTUFBTSxHQUFBcW9CLE1BQUEsQ0FBTnJvQixNQUFNO0lBQUVzb0IsTUFBTSxHQUFBRCxNQUFBLENBQU5DLE1BQU07SUFBRW51QixJQUFJLEdBQUFrdUIsTUFBQSxDQUFKbHVCLElBQUk7RUFFckIsSUFBTTRGLE9BQU8sR0FBR2xDLEtBQUssQ0FBQ3pDLFFBQVEsQ0FBQzRFLE1BQU0sQ0FBQztFQUN0QyxJQUFJLENBQUNELE9BQU8sRUFBRTtJQUNaLE9BQU9sQyxLQUFLO0VBQ2Q7RUFDQSxJQUFJMHFCLFFBQVEsR0FBR3B1QixJQUFJO0VBQ25CLElBQUksQ0FBQ291QixRQUFRLEVBQUU7SUFDYixJQUFNQyxXQUFXLEdBQUcsSUFBQXR6QixlQUFHLEVBQUM2SyxPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUV1b0IsTUFBTSxDQUFDLENBQUM7SUFDeEQ7SUFDQUMsUUFBUSxHQUFHQyxXQUFXLEdBQ2xCanpCLE1BQU0sQ0FBQ2dDLElBQUksQ0FBQ2t4QixxQkFBVSxDQUFDLENBQUM1b0IsSUFBSSxDQUFDLFVBQUE4ZSxDQUFDO01BQUEsT0FBSUEsQ0FBQyxLQUFLNkosV0FBVztJQUFBLEVBQUMsR0FDcERDLHFCQUFVLENBQUNDLFNBQVM7RUFDMUI7RUFFQSxJQUFNQyxNQUFNLEdBQUcsSUFBQUMsMEJBQW1CLEVBQUM3b0IsT0FBTyxFQUFFdW9CLE1BQU0sRUFBRUMsUUFBUSxDQUFDO0VBQzdELE9BQU8sSUFBQXB6QixVQUFHLEVBQUMsQ0FBQyxVQUFVLEVBQUU2SyxNQUFNLENBQUMsRUFBRTJvQixNQUFNLEVBQUU5cUIsS0FBSyxDQUFDO0FBQ2pEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU2dyQixxQkFBcUJBLENBQ25DaHJCLEtBQWUsRUFBQWlyQixNQUFBLEVBRUw7RUFBQSxJQURUOW9CLE1BQU0sR0FBQThvQixNQUFBLENBQU45b0IsTUFBTTtJQUFFc29CLE1BQU0sR0FBQVEsTUFBQSxDQUFOUixNQUFNO0VBRWYsSUFBTXZvQixPQUFPLEdBQUdsQyxLQUFLLENBQUN6QyxRQUFRLENBQUM0RSxNQUFNLENBQUM7RUFDdEMsSUFBSSxDQUFDRCxPQUFPLEVBQUU7SUFDWixPQUFPbEMsS0FBSztFQUNkO0VBQ0EsSUFBTXlQLFVBQVUsR0FBRyxJQUFBeWIsc0JBQWUsRUFBQ2hwQixPQUFPLEVBQUV1b0IsTUFBTSxDQUFDO0VBRW5ELE9BQU8sSUFBQW56QixVQUFHLEVBQUMsQ0FBQyxVQUFVLEVBQUU2SyxNQUFNLENBQUMsRUFBRXNOLFVBQVUsRUFBRXpQLEtBQUssQ0FBQztBQUNyRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU21yQixzQkFBc0JBLENBQ3BDbnJCLEtBQWUsRUFBQW9yQixNQUFBLEVBRUw7RUFBQSxJQURUanBCLE1BQU0sR0FBQWlwQixNQUFBLENBQU5qcEIsTUFBTTtJQUFFc29CLE1BQU0sR0FBQVcsTUFBQSxDQUFOWCxNQUFNO0VBRWYsSUFBTXZvQixPQUFPLEdBQUdsQyxLQUFLLENBQUN6QyxRQUFRLENBQUM0RSxNQUFNLENBQUM7RUFDdEMsSUFBSSxDQUFDRCxPQUFPLEVBQUU7SUFDWixPQUFPbEMsS0FBSztFQUNkO0VBQ0EsSUFBTXFyQixRQUFRLEdBQUducEIsT0FBTyxDQUFDaUcsTUFBTSxDQUFDMUYsU0FBUyxDQUFDLFVBQUF4TCxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDcUMsSUFBSSxLQUFLbXhCLE1BQU07RUFBQSxFQUFDO0VBQ2pFLElBQUlZLFFBQVEsR0FBRyxDQUFDLEVBQUU7SUFDaEIsT0FBT3JyQixLQUFLO0VBQ2Q7RUFDQSxJQUFPdUMsSUFBSSxHQUFJTCxPQUFPLENBQUNpRyxNQUFNLENBQUNrakIsUUFBUSxDQUFDLENBQWhDOW9CLElBQUk7RUFDWCxJQUFNK29CLElBQUksR0FBR3BwQixPQUFPLENBQUNxcEIsYUFBYSxDQUMvQm5yQixHQUFHLENBQUMsVUFBQW9yQixHQUFHO0lBQUEsT0FBSSxJQUFBQyxzQkFBZSxFQUFDRCxHQUFHLENBQUNFLE9BQU8sQ0FBQ0wsUUFBUSxDQUFDLEVBQUU5b0IsSUFBSSxDQUFDO0VBQUEsR0FBRSxJQUFJLENBQUMsQ0FDOURvcEIsSUFBSSxDQUFDLElBQUksQ0FBQztFQUViLElBQUFDLDJCQUFJLEVBQUNOLElBQUksQ0FBQztFQUVWLE9BQU90ckIsS0FBSztBQUNkOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTNnJCLDZCQUE2QkEsQ0FDM0M3ckIsS0FBZSxFQUFBOHJCLE1BQUEsRUFFTDtFQUFBLElBRFQzcEIsTUFBTSxHQUFBMnBCLE1BQUEsQ0FBTjNwQixNQUFNO0lBQUU0cEIsT0FBTyxHQUFBRCxNQUFBLENBQVBDLE9BQU87RUFFaEIsSUFBTTdwQixPQUFPLEdBQUdsQyxLQUFLLENBQUN6QyxRQUFRLENBQUM0RSxNQUFNLENBQUM7RUFDdEMsSUFBSSxDQUFDRCxPQUFPLEVBQUU7SUFDWixPQUFPbEMsS0FBSztFQUNkO0VBQ0EsSUFBSXVHLFNBQVMsR0FBR3JFLE9BQU8sQ0FBQ2lHLE1BQU07RUFDOUJ6USxNQUFNLENBQUNnQyxJQUFJLENBQUNxeUIsT0FBTyxDQUFDLENBQUM3eEIsT0FBTyxDQUFDLFVBQUF1d0IsTUFBTSxFQUFJO0lBQ3JDLElBQU1ZLFFBQVEsR0FBR25wQixPQUFPLENBQUNpRyxNQUFNLENBQUMxRixTQUFTLENBQUMsVUFBQXhMLENBQUM7TUFBQSxPQUFJQSxDQUFDLENBQUNxQyxJQUFJLEtBQUtteEIsTUFBTTtJQUFBLEVBQUM7SUFDakUsSUFBSVksUUFBUSxJQUFJLENBQUMsRUFBRTtNQUNqQixJQUFNVyxhQUFhLEdBQUdELE9BQU8sQ0FBQ3RCLE1BQU0sQ0FBQztNQUNyQyxJQUFNM2pCLEtBQUssR0FBR1AsU0FBUyxDQUFDOGtCLFFBQVEsQ0FBQztNQUNqQzlrQixTQUFTLEdBQUcsSUFBQTJGLHNCQUFLLEVBQUMsSUFBQW9FLHVCQUFNLEVBQUM7UUFBQzBiLGFBQWEsRUFBYkE7TUFBYSxDQUFDLENBQUMsQ0FBQ2xsQixLQUFLLENBQWlCLENBQUMsQ0FDL0RQLFNBQ0YsQ0FBWTtJQUNkO0VBQ0YsQ0FBQyxDQUFDO0VBRUYsSUFBTWtKLFVBQVUsR0FBRyxJQUFBNlQseUJBQWtCLEVBQUNwaEIsT0FBTyxFQUFFO0lBQUNpRyxNQUFNLEVBQUU1QjtFQUFvQixDQUFDLENBQUM7RUFDOUUsSUFBSS9GLFFBQVEsR0FBRyxJQUFBNlAsc0JBQUssRUFBQyxVQUFVLENBQUMsQ0FBQyxJQUFBQyx1QkFBTSxNQUFBblcsZ0JBQUEsaUJBQUdnSSxNQUFNLEVBQUdzTixVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUN6UCxLQUFLLENBQUM7O0VBRXZFO0VBQ0FRLFFBQVEsR0FBQXhHLGFBQUEsQ0FBQUEsYUFBQSxLQUNId0csUUFBUTtJQUNYeEQsTUFBTSxFQUFFd0QsUUFBUSxDQUFDeEQsTUFBTSxDQUFDb0QsR0FBRyxDQUFDLFVBQUFGLEtBQUs7TUFBQSxJQUFBK3JCLGFBQUE7TUFBQSxPQUMvQixDQUFBQSxhQUFBLEdBQUEvckIsS0FBSyxDQUFDcEYsTUFBTSxjQUFBbXhCLGFBQUEsZ0JBQUFBLGFBQUEsR0FBWkEsYUFBQSxDQUFjQyxVQUFVLGNBQUFELGFBQUEsZUFBeEJBLGFBQUEsQ0FBMEIzeUIsSUFBSSxJQUFJNEcsS0FBSyxDQUFDcEYsTUFBTSxDQUFDb3hCLFVBQVUsQ0FBQzV5QixJQUFJLElBQUl5eUIsT0FBTyxHQUNyRTdyQixLQUFLLENBQUNnRixpQkFBaUIsQ0FBQztRQUN0QmduQixVQUFVLEVBQUFseUIsYUFBQSxDQUFBQSxhQUFBLEtBQ0xrRyxLQUFLLENBQUNwRixNQUFNLENBQUNveEIsVUFBVTtVQUMxQkYsYUFBYSxFQUFFRCxPQUFPLENBQUM3ckIsS0FBSyxDQUFDcEYsTUFBTSxDQUFDb3hCLFVBQVUsQ0FBQzV5QixJQUFJO1FBQUM7TUFFeEQsQ0FBQyxDQUFDLEdBQ0Y0RyxLQUFLO0lBQUEsQ0FDWDtFQUFDLEVBQ0Y7RUFFRCxPQUFPTSxRQUFRO0FBQ2pCOztBQUVBO0FBQ0E7QUFDQTtBQUNPLFNBQVMyckIsNkJBQTZCQSxDQUMzQ25zQixLQUFlO0FBQ2Y7QUFDQXdCLE1BQTJELEVBQ2pEO0VBQ1YsT0FBQXhILGFBQUEsQ0FBQUEsYUFBQSxLQUNLZ0csS0FBSztJQUNSakIsTUFBTSxFQUFBL0UsYUFBQSxDQUFBQSxhQUFBLEtBQ0RnRyxLQUFLLENBQUNqQixNQUFNO01BQ2ZwQyxPQUFPLEVBQUUsQ0FBQ3FELEtBQUssQ0FBQ2pCLE1BQU0sQ0FBQ3BDO0lBQU87RUFDL0I7QUFFTDtBQUVPLFNBQVN5dkIsbUNBQW1DQSxDQUNqRHBzQixLQUFlLEVBQUFxc0IsTUFBQSxFQUVMO0VBQUEsSUFEVGxzQixHQUFHLEdBQUFrc0IsTUFBQSxDQUFIbHNCLEdBQUc7SUFBRXJGLE1BQU0sR0FBQXV4QixNQUFBLENBQU52eEIsTUFBTTtFQUVaLElBQU0yUixTQUFTLEdBQUd6TSxLQUFLLENBQUMzQyxPQUFPLENBQUM4QyxHQUFHLENBQUM7RUFDcEMsSUFBSSxDQUFDc00sU0FBUyxFQUFFO0lBQ2RyRCxlQUFPLENBQUNDLEtBQUssWUFBQWxDLE1BQUEsQ0FBWWhILEdBQUcsa0JBQWUsQ0FBQztJQUM1QyxPQUFPSCxLQUFLO0VBQ2Q7RUFDQSxJQUFJeU0sU0FBUyxDQUFDbEssSUFBSSxLQUFLMEwsdUJBQVksQ0FBQ0MsU0FBUyxFQUFFO0lBQzdDOUUsZUFBTyxDQUFDQyxLQUFLLDZHQUViLENBQUM7SUFDRCxPQUFPckosS0FBSztFQUNkO0VBRUEsSUFBTXNzQixPQUFPLEdBQUdDLG1CQUFtQixDQUFDenhCLE1BQU0sQ0FBQztFQUUzQyxPQUFPLElBQUF1VixzQkFBSyxFQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUFuRSxzQkFBSyxFQUFDLElBQUFvRSx1QkFBTSxFQUFDZ2MsT0FBTyxDQUFDLENBQUM3ZixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUN6TSxLQUFLLENBQUM7QUFDbkU7QUFFQSxTQUFTdXNCLG1CQUFtQkEsQ0FBQ3p4QixNQUFNLEVBQUU7RUFDbkMsSUFBTTB4QixPQUFPLEdBQUcsQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDO0VBQzFDLE9BQU85MEIsTUFBTSxDQUFDZ0MsSUFBSSxDQUFDb0IsTUFBTSxDQUFDLENBQUM0USxNQUFNLENBQUMsVUFBQ0MsSUFBSSxFQUFFbEksSUFBSSxFQUFLO0lBQ2hELElBQUksQ0FBQytvQixPQUFPLENBQUN4bEIsUUFBUSxDQUFDdkQsSUFBSSxDQUFDLEVBQUU7TUFDM0IyRixlQUFPLENBQUNDLEtBQUssbUZBQUFsQyxNQUFBLENBQ3VFMUQsSUFBSSxDQUN4RixDQUFDO01BQ0QsT0FBT2tJLElBQUk7SUFDYjs7SUFFQTtJQUNBQSxJQUFJLENBQUNsSSxJQUFJLENBQUMsR0FBRzNJLE1BQU0sQ0FBQzJJLElBQUksQ0FBQztJQUN6QixPQUFPa0ksSUFBSTtFQUNiLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNSOztBQUVBO0FBQ0E7QUFDQTtBQUNPLFNBQVM4Z0Isa0NBQWtDQSxDQUNoRHpzQixLQUFlLEVBQUEwc0IsTUFBQSxFQUVMO0VBQUEsSUFEVDV4QixNQUFNLEdBQUE0eEIsTUFBQSxDQUFONXhCLE1BQU07RUFFUCxJQUFJLENBQUNBLE1BQU0sRUFBRTtJQUNYLE9BQU9rRixLQUFLO0VBQ2Q7RUFDQSxJQUFNc3NCLE9BQU8sR0FBR0MsbUJBQW1CLENBQUN6eEIsTUFBTSxDQUFDO0VBQzNDLE9BQU8sSUFBQXVWLHNCQUFLLEVBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFBQyx1QkFBTSxFQUFDZ2MsT0FBTyxDQUFDLENBQUMsQ0FBQ3RzQixLQUFLLENBQUM7QUFDekQ7O0FBRUE7QUFDQTtBQUNBO0FBQ08sU0FBUzJzQiwrQkFBK0JBLENBQzdDM3NCLEtBQVEsRUFDUndCLE1BQXNELEVBQ25EO0VBQUEsSUFBQW9yQixxQkFBQTtFQUNILElBQU9DLEtBQUssR0FBV3JyQixNQUFNLENBQXRCcXJCLEtBQUs7SUFBRTNzQixLQUFLLEdBQUlzQixNQUFNLENBQWZ0QixLQUFLO0VBQ25CLElBQVc0c0IsYUFBYSxHQUFXRCxLQUFLLENBQWpDbHlCLEVBQUU7SUFBaUJveUIsS0FBSyxHQUFJRixLQUFLLENBQWRFLEtBQUs7RUFDL0IsSUFBSSxDQUFDN3NCLEtBQUssRUFBRTtJQUNWa0osZUFBTyxDQUFDc0osSUFBSSx5Q0FBeUMsQ0FBQztJQUN0RCxPQUFPMVMsS0FBSztFQUNkO0VBQ0EsSUFBSSxFQUFBNHNCLHFCQUFBLEdBQUExc0IsS0FBSyxDQUFDOHNCLGlCQUFpQixjQUFBSixxQkFBQSx1QkFBdkJBLHFCQUFBLENBQTBCRSxhQUFhLENBQUMsTUFBS0MsS0FBSyxFQUFFO0lBQ3RELE9BQU8vc0IsS0FBSztFQUNkO0VBRUFFLEtBQUssQ0FBQzhzQixpQkFBaUIsR0FBQWh6QixhQUFBLENBQUFBLGFBQUEsS0FDbEJrRyxLQUFLLENBQUM4c0IsaUJBQWlCLFdBQUE3eUIsZ0JBQUEsaUJBQ3pCMnlCLGFBQWEsRUFBR0MsS0FBSyxFQUN2QjtFQUVELE9BQUEveUIsYUFBQSxDQUFBQSxhQUFBLEtBQ0tnRyxLQUFLO0lBQ1JoRCxNQUFNLEVBQUUsSUFBQWtQLHNCQUFLLEVBQUNoTSxLQUFLLENBQUMsQ0FBQ0YsS0FBSyxDQUFDaEQsTUFBTTtFQUFDO0FBRXRDOztBQUVBO0FBQ0E7QUFDQTtBQUNPLFNBQVNpd0IscUJBQXFCQSxDQUNuQ2p0QixLQUFRLEVBQ1J3QixNQUE0QyxFQUN6QztFQUNILElBQU90QixLQUFLLEdBQTZCc0IsTUFBTSxDQUF4Q3RCLEtBQUs7SUFBRWd0QixXQUFXLEdBQWdCMXJCLE1BQU0sQ0FBakMwckIsV0FBVztJQUFFenhCLFVBQVUsR0FBSStGLE1BQU0sQ0FBcEIvRixVQUFVO0VBQ3JDLElBQUksQ0FBQ3lFLEtBQUssRUFBRTtJQUNWaXRCLE9BQU8sQ0FBQ3phLElBQUksdUNBQXVDLENBQUM7SUFDcEQsT0FBTzFTLEtBQUs7RUFDZDs7RUFFQTtFQUNBLElBQU0zQixPQUFPLEdBQUc2dUIsV0FBVyxHQUN2QjtJQUNFOU8sTUFBTSxFQUFFLElBQUk7SUFDWmdQLE1BQU0sRUFBRTtNQUNOQyxjQUFjLEVBQUVIO0lBQ2xCLENBQUM7SUFDRHp4QixVQUFVLEVBQUVBLFVBQVUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEN5RSxLQUFLLEVBQUU7TUFDTHdFLEtBQUssRUFBRTtRQUNMdkUsR0FBRyxFQUFFSCxLQUFLLENBQUNoRCxNQUFNLENBQUN5RixTQUFTLENBQUMsVUFBQVIsQ0FBQztVQUFBLE9BQUlBLENBQUMsQ0FBQ3RILEVBQUUsS0FBS3VGLEtBQUssQ0FBQ3ZGLEVBQUU7UUFBQSxFQUFDO1FBQ25EQSxFQUFFLEVBQUV1RixLQUFLLENBQUN2RjtNQUNaO0lBQ0Y7RUFDRixDQUFDLEdBQ0QsSUFBSTtFQUVSLE9BQUFYLGFBQUEsQ0FBQUEsYUFBQSxLQUNLZ0csS0FBSztJQUNSM0IsT0FBTyxFQUFQQTtFQUFPO0FBRVg7O0FBRUE7QUFDTyxTQUFTa0csc0NBQXNDQSxDQUNwRHZFLEtBQVEsRUFDUndCLE1BQTZELEVBQzFEO0VBQUEsSUFBQThyQixxQkFBQSxFQUFBQyxzQkFBQTtFQUNILElBQVkvRCxTQUFTLEdBQW9CaG9CLE1BQU0sQ0FBeENyQixHQUFHO0lBQUFxdEIsY0FBQSxHQUErQmhzQixNQUFNLENBQXhCZ0QsTUFBTTtJQUFOQSxNQUFNLEdBQUFncEIsY0FBQSxjQUFHLEtBQUssR0FBQUEsY0FBQTtFQUVyQyxJQUFNNXpCLE1BQU0sR0FBR29HLEtBQUssQ0FBQzNDLE9BQU8sQ0FBQ21zQixTQUFTLENBQW9CO0VBRTFELElBQUlocEIsUUFBUSxHQUFHUixLQUFLO0VBQ3BCLElBQUlpTSxTQUFTLEdBQUdyUyxNQUFNOztFQUV0QjtFQUNBLElBQUk0SyxNQUFNLEVBQUU7SUFDVixJQUFNcWpCLGdCQUFnQixHQUFHLElBQUFwakIsaUNBQTBCLEVBQUNqRSxRQUFRLENBQUN4RCxNQUFNLENBQUM7SUFDcEU7SUFDQSxJQUFJLENBQUM2cUIsZ0JBQWdCLENBQUNwdkIsTUFBTSxFQUFFO01BQzVCLE9BQU8rSCxRQUFRO0lBQ2pCO0lBRUEsSUFBTWl0Qiw0QkFBNEIsR0FBRyxJQUFBQyxzQ0FBK0IsRUFBQzdGLGdCQUFnQixDQUFDO0lBQ3RGLElBQU04Riw4QkFBOEIsR0FBR0MsT0FBTyxDQUFDSCw0QkFBNEIsQ0FBQ2gxQixNQUFNLENBQUM7SUFFbkYsSUFBTW8xQixlQUFlLEdBQUcsSUFBQTdGLHVCQUFnQixFQUFDLENBQUNwdUIsTUFBTSxDQUFDK0IsTUFBTSxFQUFFNkUsUUFBUSxDQUFDMUIsZUFBZSxDQUFDbkQsTUFBTSxDQUFDLENBQUM7O0lBRTFGO0lBQ0EsSUFBSWd5Qiw4QkFBOEIsRUFBRTtNQUNsQyxJQUFJL3pCLE1BQU0sQ0FBQ29TLGVBQWUsS0FBSzhoQiwyQkFBZ0IsQ0FBQ0MsUUFBUSxFQUFFO1FBQ3hEdnRCLFFBQVEsR0FBR3NMLCtCQUErQixDQUFDdEwsUUFBUSxFQUFFO1VBQ25EN0YsRUFBRSxFQUFFZixNQUFNLENBQUNlLEVBQUU7VUFDYnFSLGVBQWUsRUFBRThoQiwyQkFBZ0IsQ0FBQ0M7UUFDcEMsQ0FBQyxDQUFDO01BQ0o7TUFFQTloQixTQUFTLEdBQUd6TCxRQUFRLENBQUNuRCxPQUFPLENBQUNtc0IsU0FBUyxDQUFvQjs7TUFFMUQ7TUFDQXZkLFNBQVMsR0FBRytoQix3QkFBd0IsQ0FBQ3h0QixRQUFRLEVBQUV5TCxTQUFTLENBQUM7O01BRXpEO01BQ0F6TCxRQUFRLEdBQUF4RyxhQUFBLENBQUFBLGFBQUEsS0FDSHdHLFFBQVE7UUFDWG5ELE9BQU8sRUFBRSxJQUFBNk8sc0JBQUssRUFBU0QsU0FBUyxDQUFDLENBQUN6TCxRQUFRLENBQUNuRCxPQUFPO01BQUMsRUFDcEQ7SUFDSDtJQUVBNE8sU0FBUyxHQUFHekwsUUFBUSxDQUFDbkQsT0FBTyxDQUFDbXNCLFNBQVMsQ0FBb0I7O0lBRTFEO0lBQ0EsSUFBTXlFLGVBQWMsR0FBRyxJQUFBamYsZ0NBQXlCLEVBQzlDL0MsU0FBUyxDQUFDRCxlQUFlLEtBQUs4aEIsMkJBQWdCLENBQUNDLFFBQVEsR0FDbkQsQ0FBQ0YsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFQSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FDeENBLGVBQWUsRUFBQTd6QixhQUFBLENBQUFBLGFBQUEsS0FDZmlTLFNBQVM7TUFBRXRRLE1BQU0sRUFBRWt5QjtJQUFlLEVBQ3hDLENBQUM7SUFFRHJ0QixRQUFRLEdBQUdxTCxnQkFBZ0IsQ0FBQ3JMLFFBQVEsRUFBRTtNQUNwQ0wsR0FBRyxFQUFFcXBCLFNBQVM7TUFDZC9sQixJQUFJLEVBQUUsT0FBTztNQUNiM0ssS0FBSyxFQUFFbTFCO0lBQ1QsQ0FBQyxDQUFDO0lBRUZoaUIsU0FBUyxHQUFBalMsYUFBQSxDQUFBQSxhQUFBLEtBQ0h3RyxRQUFRLENBQUNuRCxPQUFPLENBQUNtc0IsU0FBUyxDQUFDO01BQy9CeGpCLHVCQUF1QixFQUFFO0lBQUksRUFDOUI7O0lBRUQ7SUFDQXhGLFFBQVEsR0FBQXhHLGFBQUEsQ0FBQUEsYUFBQSxLQUNId0csUUFBUTtNQUNYbkQsT0FBTyxFQUFFLElBQUE2TyxzQkFBSyxFQUFTRCxTQUFTLENBQUMsQ0FBQ3pMLFFBQVEsQ0FBQ25ELE9BQU87SUFBQyxFQUNwRDtJQUVEbUQsUUFBUSxHQUFHNkwsZ0NBQWdDLENBQUM3TCxRQUFRLEVBQUU7TUFDcEQ3RixFQUFFLEVBQUVzUixTQUFTLENBQUN0UixFQUFFO01BQ2hCMkIsSUFBSSxFQUFFOFAsb0JBQW9CLENBQUNILFNBQVM7SUFDdEMsQ0FBQyxDQUFDO0lBRUZBLFNBQVMsR0FBR3pMLFFBQVEsQ0FBQ25ELE9BQU8sQ0FBQ21zQixTQUFTLENBQW9COztJQUUxRDtJQUNBLE9BQU9oZSw0QkFBNEIsQ0FBQ2hMLFFBQVEsRUFBRTtNQUM1QzFILEtBQUssRUFBRW1ULFNBQVMsQ0FBQ25ULEtBQUssQ0FBQ21ULFNBQVMsQ0FBQ2lpQixnQkFBZ0I7SUFDbkQsQ0FBQyxDQUFDO0VBQ0o7O0VBRUE7RUFDQWppQixTQUFTLEdBQUFqUyxhQUFBLENBQUFBLGFBQUEsS0FDSkosTUFBTTtJQUNUb00sdUJBQXVCLEVBQUU7RUFBSyxFQUMvQjs7RUFFRDtFQUNBeEYsUUFBUSxHQUFBeEcsYUFBQSxDQUFBQSxhQUFBLEtBQ0h3RyxRQUFRO0lBQ1huRCxPQUFPLEVBQUUsSUFBQTZPLHNCQUFLLEVBQVNELFNBQVMsQ0FBQyxDQUFDekwsUUFBUSxDQUFDbkQsT0FBTztFQUFDLEVBQ3BEOztFQUVEO0VBQ0FtRCxRQUFRLEdBQUc2TCxnQ0FBZ0MsQ0FBQzdMLFFBQVEsRUFBRTtJQUNwRDdGLEVBQUUsRUFBRXNSLFNBQVMsQ0FBQ3RSLEVBQUU7SUFDaEIyQixJQUFJLEVBQUU2eEIsOEJBQW1CLENBQUNDO0VBQzVCLENBQUMsQ0FBQztFQUVGbmlCLFNBQVMsR0FBR3pMLFFBQVEsQ0FBQ25ELE9BQU8sQ0FBQ21zQixTQUFTLENBQW9COztFQUUxRDtFQUNBLElBQU15RSxjQUFjLEdBQUcsSUFBQWpmLGdDQUF5QixFQUFDL0MsU0FBUyxDQUFDdFEsTUFBTSxFQUFFc1EsU0FBUyxDQUFDO0VBRTdFekwsUUFBUSxHQUFHcUwsZ0JBQWdCLENBQUNyTCxRQUFRLEVBQUU7SUFDcENMLEdBQUcsRUFBRXFwQixTQUFTO0lBQ2QvbEIsSUFBSSxFQUFFLE9BQU87SUFDYjNLLEtBQUssRUFBRW0xQjtFQUNULENBQUMsQ0FBQztFQUVGenRCLFFBQVEsR0FBRzZMLGdDQUFnQyxDQUFDN0wsUUFBUSxFQUFFO0lBQ3BEN0YsRUFBRSxFQUFFc1IsU0FBUyxDQUFDdFIsRUFBRTtJQUNoQjJCLElBQUksRUFBRThQLG9CQUFvQixDQUFDSCxTQUFTO0VBQ3RDLENBQUMsQ0FBQzs7RUFFRjtFQUNBLE9BQU9ULDRCQUE0QixDQUFDaEwsUUFBUSxFQUFFO0lBQzVDMUgsS0FBSyxHQUFBdzBCLHFCQUFBLElBQUFDLHNCQUFBLEdBQUUvc0IsUUFBUSxDQUFDMUIsZUFBZSxDQUFDbkQsTUFBTSxjQUFBNHhCLHNCQUFBLHVCQUEvQkEsc0JBQUEsQ0FBa0MsQ0FBQyxDQUFDLGNBQUFELHFCQUFBLGNBQUFBLHFCQUFBLEdBQUk7RUFDakQsQ0FBQyxDQUFDO0FBQ0o7QUFFTyxTQUFTamhCLGdDQUFnQ0EsQ0FDOUNyTSxLQUFRLEVBQ1J3QixNQUEyRCxFQUMzRDtFQUNBLElBQVdnTCxRQUFRLEdBQTRCaEwsTUFBTSxDQUE5QzdHLEVBQUU7SUFBa0J1ekIsZ0JBQWdCLEdBQUkxc0IsTUFBTSxDQUFoQ2xGLElBQUk7RUFFekIsSUFBTWt0QixTQUFTLEdBQUd4cEIsS0FBSyxDQUFDM0MsT0FBTyxDQUFDb0YsU0FBUyxDQUFDLFVBQUF4TCxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDMEQsRUFBRSxLQUFLNlIsUUFBUTtFQUFBLEVBQUM7RUFDakUsSUFBSWdkLFNBQVMsS0FBSyxDQUFDLENBQUMsRUFBRTtJQUNwQixPQUFPeHBCLEtBQUs7RUFDZDtFQUVBLElBQU1wRyxNQUFNLEdBQUdvRyxLQUFLLENBQUMzQyxPQUFPLENBQUNtc0IsU0FBUyxDQUFvQjtFQUUxRCxJQUFJLENBQUM2RSx5QkFBeUIsQ0FBQ3owQixNQUFNLEVBQUVzMEIsZ0JBQWdCLENBQUMsRUFBRTtJQUN4RCxPQUFPbHVCLEtBQUs7RUFDZDtFQUVBLElBQU1pTSxTQUFTLEdBQUFqUyxhQUFBLENBQUFBLGFBQUEsS0FDVkosTUFBTTtJQUNUczBCLGdCQUFnQixFQUFoQkE7RUFBZ0IsRUFDakI7RUFFRCxJQUFNMXRCLFFBQVEsR0FBQXhHLGFBQUEsQ0FBQUEsYUFBQSxLQUNUZ0csS0FBSztJQUNSM0MsT0FBTyxFQUFFLElBQUE2TyxzQkFBSyxFQUFTRCxTQUFTLENBQUMsQ0FBQ2pNLEtBQUssQ0FBQzNDLE9BQU87RUFBQyxFQUNqRDtFQUVELE9BQU84USwrQkFBK0IsQ0FBQzNOLFFBQVEsRUFBRWdwQixTQUFTLENBQUM7QUFDN0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTXRKLDBCQUEwQixHQUFBemxCLE9BQUEsQ0FBQXlsQiwwQkFBQSxHQUFHLFNBQTdCQSwwQkFBMEJBLENBQ3JDbGdCLEtBQWUsRUFBQXN1QixNQUFBLEVBRUY7RUFBQSxJQURGbE8sTUFBTSxHQUFBa08sTUFBQSxDQUFoQnZSLE9BQU8sQ0FBR3FELE1BQU07RUFFakIsSUFBS2xoQixxQkFBcUIsR0FBSWMsS0FBSyxDQUE5QmQscUJBQXFCO0VBQzFCLElBQUksQ0FBQ0EscUJBQXFCLEVBQUU7SUFDMUJBLHFCQUFxQixHQUFHLENBQUM7RUFDM0I7RUFFQSxPQUFBbEYsYUFBQSxDQUFBQSxhQUFBLEtBQ0tnRyxLQUFLO0lBQ1JkLHFCQUFxQixFQUFFcXZCLElBQUksQ0FBQ0MsR0FBRyxDQUFDdHZCLHFCQUFxQixHQUFHa2hCLE1BQU0sRUFBRSxDQUFDO0VBQUM7QUFFdEUsQ0FBQztBQUVELFNBQVNqUywrQkFBK0JBLENBQXFCbk8sS0FBUSxFQUFFd3BCLFNBQWlCLEVBQUs7RUFDM0YsSUFBTTV2QixNQUFNLEdBQUdvRyxLQUFLLENBQUMzQyxPQUFPLENBQUNtc0IsU0FBUyxDQUFDO0VBQ3ZDLElBQUs1dkIsTUFBTSxDQUFxQm9NLHVCQUF1QixFQUFFO0lBQ3ZELElBQU15b0IsYUFBYSxHQUFHQywwQkFBMEIsQ0FBQzkwQixNQUFNLENBQUM7SUFDeEQsSUFBTWQsS0FBSyxHQUFHa0gsS0FBSyxDQUFDbEIsZUFBZSxDQUFDL0MsU0FBUyxHQUN6QyxJQUFBNHlCLGtCQUFXLEVBQUNGLGFBQWEsRUFBRXp1QixLQUFLLENBQUNsQixlQUFlLENBQUMvQyxTQUFTLENBQUMsR0FDM0QweUIsYUFBYTtJQUNqQixPQUFPampCLDRCQUE0QixDQUFDeEwsS0FBSyxFQUFFO01BQUNsSCxLQUFLLEVBQUxBO0lBQUssQ0FBQyxDQUFDO0VBQ3JEO0VBQ0EsT0FBT2tILEtBQUs7QUFDZDtBQUVBLFNBQVMwdUIsMEJBQTBCQSxDQUFDOTBCLE1BQU0sRUFBRTtFQUMxQyxPQUFPQSxNQUFNLENBQUNkLEtBQUssQ0FBQ2MsTUFBTSxDQUFDczBCLGdCQUFnQixDQUFDO0FBQzlDO0FBRUEsU0FBUzloQixvQkFBb0JBLENBQUN4UyxNQUF1QixFQUFFO0VBQ3JELElBQUlBLE1BQU0sQ0FBQ29TLGVBQWUsS0FBSzhoQiwyQkFBZ0IsQ0FBQ2MsSUFBSSxFQUFFO0lBQUEsSUFBQUMscUJBQUE7SUFDcEQsUUFBQUEscUJBQUEsR0FBT2oxQixNQUFNLENBQUNzMEIsZ0JBQWdCLGNBQUFXLHFCQUFBLGNBQUFBLHFCQUFBLEdBQUlWLDhCQUFtQixDQUFDQyxHQUFHO0VBQzNEO0VBRUEsT0FBT0QsOEJBQW1CLENBQUNDLEdBQUc7QUFDaEM7QUFFQSxTQUFTQyx5QkFBeUJBLENBQUN6MEIsTUFBdUIsRUFBRWsxQixPQUFlLEVBQUU7RUFDM0UsT0FBTyxFQUNMbDFCLE1BQU0sQ0FBQ29TLGVBQWUsS0FBSzhoQiwyQkFBZ0IsQ0FBQ2MsSUFBSSxJQUFJRSxPQUFPLEtBQUtYLDhCQUFtQixDQUFDWSxLQUFLLENBQzFGO0FBQ0g7QUFFQSxTQUFTZix3QkFBd0JBLENBQUNodUIsS0FBSyxFQUFFcEcsTUFBTSxFQUFFO0VBQy9DLElBQU02ekIsNEJBQTRCLEdBQUcsSUFBQUMsc0NBQStCLEVBQUMxdEIsS0FBSyxDQUFDaEQsTUFBTSxDQUFDO0VBRWxGLElBQUkrd0IsUUFBdUIsR0FBRyxJQUFJO0VBQ2xDLElBQUlOLDRCQUE0QixDQUFDaDFCLE1BQU0sR0FBRyxDQUFDLEVBQUU7SUFDM0M7SUFDQSxJQUFNdTJCLGFBQWEsR0FBR3ZCLDRCQUE0QixDQUFDL2hCLE1BQU0sQ0FBQyxVQUFDdWpCLFlBQVksRUFBRWh0QixDQUFDLEVBQUs7TUFDN0UsSUFBSUEsQ0FBQyxDQUFDaXRCLElBQUksQ0FBQ0Msa0JBQWtCLEVBQUU7UUFDN0IsSUFBTUMsUUFBUSxHQUFHQyw2QkFBc0IsQ0FBQzVzQixTQUFTLENBQUMsVUFBQXpMLENBQUM7VUFBQSxPQUFJQSxDQUFDLEtBQUtpTCxDQUFDLENBQUNpdEIsSUFBSSxDQUFDQyxrQkFBa0I7UUFBQSxFQUFDO1FBQ3ZGLE9BQU9DLFFBQVEsR0FBRyxDQUFDLENBQUMsSUFBSUEsUUFBUSxHQUFHSCxZQUFZLEdBQUdHLFFBQVEsR0FBR0gsWUFBWTtNQUMzRTtJQUNGLENBQUMsRUFBRUksNkJBQXNCLENBQUM1MkIsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNyQztJQUNBLElBQU02MkIsZUFBZSxHQUFHRCw2QkFBc0IsQ0FBQ0wsYUFBYSxDQUFDO0lBQzdEakIsUUFBUSxHQUFHd0IsZ0NBQXlCLENBQUNELGVBQWUsQ0FBQztFQUN2RDtFQUVBLElBQUksQ0FBQ3ZCLFFBQVEsRUFBRTtJQUNiLE9BQU9uMEIsTUFBTTtFQUNmOztFQUVBO0VBQ0EsSUFBTW9DLFVBQVUsR0FBRyxJQUFBd3pCLDJCQUFvQixFQUFDekIsUUFBUSxDQUFDO0VBQ2pELElBQU0wQixlQUFlLEdBQUF6MUIsYUFBQSxDQUFBQSxhQUFBLEtBQU9KLE1BQU0sQ0FBQzJXLFFBQVE7SUFBRXdkLFFBQVEsRUFBUkEsUUFBUTtJQUFFL3hCLFVBQVUsRUFBVkE7RUFBVSxFQUFDO0VBQ2xFLElBQU1pUSxTQUFTLEdBQUcsSUFBQXlqQiwrQkFBd0IsRUFBQzkxQixNQUFNLEVBQUU2MUIsZUFBZSxFQUFFenZCLEtBQUssQ0FBQ3pDLFFBQVEsQ0FBQztFQUNuRixPQUFPLElBQUFveUIsbUNBQTRCLEVBQUMzdkIsS0FBSyxFQUFFaU0sU0FBUyxDQUFDO0FBQ3ZEOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVMyakIsOEJBQThCQSxDQUFDOTJCLEtBQVUsRUFBRXFKLE1BQWMsRUFBRTB0QixlQUF1QixFQUFFO0VBQUEsSUFBQUMsYUFBQSxFQUFBQyxjQUFBO0VBQzNGLElBQUl6M0IsS0FBSyxDQUFDQyxPQUFPLENBQUNPLEtBQUssQ0FBQyxFQUFFO0lBQ3hCO0lBQ0EsSUFBTWszQixRQUFRLEdBQUdsM0IsS0FBSyxDQUNuQnNILEdBQUcsQ0FBQyxVQUFBZ04sQ0FBQztNQUFBLE9BQUl3aUIsOEJBQThCLENBQUN4aUIsQ0FBQyxFQUFFakwsTUFBTSxFQUFFMHRCLGVBQWUsQ0FBQztJQUFBLEVBQUMsQ0FDcEVqMkIsTUFBTSxDQUFDLFVBQUEwRyxDQUFDO01BQUEsT0FBSUEsQ0FBQztJQUFBLEVBQUM7SUFDakIsT0FBTzB2QixRQUFRLENBQUN2M0IsTUFBTSxHQUFHdTNCLFFBQVEsR0FBRyxJQUFJO0VBQzFDO0VBQ0EsSUFBSSxPQUFPbDNCLEtBQUssQ0FBQ3FKLE1BQU0sS0FBSyxRQUFRLElBQUlySixLQUFLLENBQUNxSixNQUFNLEtBQUtBLE1BQU0sRUFBRTtJQUMvRDtJQUNBLE9BQUFuSSxhQUFBLENBQUFBLGFBQUEsS0FDS2xCLEtBQUs7TUFDUnFKLE1BQU0sRUFBRTB0QjtJQUFlO0VBRTNCLENBQUMsTUFBTSxJQUFJdjNCLEtBQUssQ0FBQ0MsT0FBTyxDQUFDTyxLQUFLLENBQUNxSixNQUFNLENBQUMsSUFBSXJKLEtBQUssQ0FBQ3FKLE1BQU0sQ0FBQzZFLFFBQVEsQ0FBQzdFLE1BQU0sQ0FBQyxFQUFFO0lBQ3ZFO0lBQ0EsT0FBQW5JLGFBQUEsQ0FBQUEsYUFBQSxLQUNLbEIsS0FBSztNQUNScUosTUFBTSxFQUFFckosS0FBSyxDQUFDcUosTUFBTSxDQUFDL0IsR0FBRyxDQUFDLFVBQUFFLENBQUM7UUFBQSxPQUFLQSxDQUFDLEtBQUs2QixNQUFNLEdBQUcwdEIsZUFBZSxHQUFHdnZCLENBQUM7TUFBQSxDQUFDO0lBQUM7RUFFdkUsQ0FBQyxNQUFNLElBQUksQ0FBQXd2QixhQUFBLEdBQUFoM0IsS0FBSyxDQUFDZ0MsTUFBTSxjQUFBZzFCLGFBQUEsZUFBWkEsYUFBQSxDQUFjM3RCLE1BQU0sSUFBSSxFQUFBNHRCLGNBQUEsR0FBQWozQixLQUFLLENBQUNnQyxNQUFNLGNBQUFpMUIsY0FBQSx1QkFBWkEsY0FBQSxDQUFjNXRCLE1BQU0sTUFBS0EsTUFBTSxFQUFFO0lBQ2xFO0lBQ0EsT0FBQW5JLGFBQUEsQ0FBQUEsYUFBQSxLQUNLbEIsS0FBSztNQUNSZ0MsTUFBTSxFQUFBZCxhQUFBLENBQUFBLGFBQUEsS0FDRGxCLEtBQUssQ0FBQ2dDLE1BQU07UUFDZnFILE1BQU0sRUFBRTB0QjtNQUFlO0lBQ3hCO0VBRUwsQ0FBQyxNQUFNLElBQUksSUFBQUksZUFBUSxFQUFDbjNCLEtBQUssQ0FBQyxJQUFJcEIsTUFBTSxDQUFDMEosU0FBUyxDQUFDNUosY0FBYyxDQUFDQyxJQUFJLENBQUNxQixLQUFLLEVBQUVxSixNQUFNLENBQUMsRUFBRTtJQUNqRjtJQUNBLFdBQUFoSSxnQkFBQSxpQkFBUzAxQixlQUFlLEVBQUcvMkIsS0FBSyxDQUFDcUosTUFBTSxDQUFDO0VBQzFDO0VBRUEsT0FBTyxJQUFJO0FBQ2I7O0FBRUE7QUFDQSxTQUFTK3RCLG1CQUFtQkEsQ0FBQ3AzQixLQUFLLEVBQUU7RUFBQSxJQUFBcTNCLGlCQUFBO0VBQ2xDLElBQUk3M0IsS0FBSyxDQUFDQyxPQUFPLENBQUNPLEtBQUssQ0FBQyxFQUFFO0lBQ3hCO0lBQ0EsSUFBTXMzQixZQUFZLEdBQUd0M0IsS0FBSyxDQUFDc0gsR0FBRyxDQUFDOHZCLG1CQUFtQixDQUFDLENBQUN0MkIsTUFBTSxDQUFDLFVBQUEwRyxDQUFDO01BQUEsT0FBSUEsQ0FBQztJQUFBLEVBQUM7SUFDbEUsT0FBTzh2QixZQUFZLENBQUMzM0IsTUFBTSxHQUFHMjNCLFlBQVksR0FBRyxJQUFJO0VBQ2xEOztFQUVBO0VBQ0EsT0FBTyxDQUFBdDNCLEtBQUssYUFBTEEsS0FBSyxnQkFBQXEzQixpQkFBQSxHQUFMcjNCLEtBQUssQ0FBRTJXLFVBQVUsY0FBQTBnQixpQkFBQSx1QkFBakJBLGlCQUFBLENBQW1CclMsSUFBSSxDQUFDbmpCLEVBQUUsS0FBSSxJQUFJO0FBQzNDOztBQUVBO0FBQ0EsU0FBUzAxQixtQkFBbUJBLENBQUNyd0IsS0FBSyxFQUFFc3dCLFVBQVUsRUFBQUMsTUFBQSxFQUFxQztFQUFBLElBQWxDOXNCLElBQUksR0FBQThzQixNQUFBLENBQUo5c0IsSUFBSTtJQUFFbWEsV0FBVyxHQUFBMlMsTUFBQSxDQUFYM1MsV0FBVztJQUFFNFMsWUFBWSxHQUFBRCxNQUFBLENBQVpDLFlBQVk7RUFDOUU7RUFDQTtFQUNBLElBQUksQ0FBQ0YsVUFBVSxFQUFFO0lBQ2YsT0FBT3R3QixLQUFLO0VBQ2Q7RUFDQSxJQUFNeXdCLFlBQVksR0FDaEJodEIsSUFBSSxLQUFLLFFBQVEsR0FDYjZzQixVQUFVLENBQUM1a0IsTUFBTSxDQUFDLFVBQUNDLElBQUksRUFBRStrQixTQUFTO0lBQUEsT0FBSzVkLGtCQUFrQixDQUFDbkgsSUFBSSxFQUFFO01BQUNoUixFQUFFLEVBQUUrMUIsU0FBUyxDQUFDLzFCO0lBQUUsQ0FBQyxDQUFDO0VBQUEsR0FBRXFGLEtBQUssQ0FBQyxHQUMzRjFILEtBQUssQ0FBQ0MsT0FBTyxDQUFDeUgsS0FBSyxDQUFDeUQsSUFBSSxDQUFDLENBQUMsR0FBQXpKLGFBQUEsQ0FBQUEsYUFBQSxLQUVyQmdHLEtBQUssV0FBQTdGLGdCQUFBLGlCQUNQc0osSUFBSSxFQUFHekQsS0FBSyxDQUFDeUQsSUFBSSxDQUFDLENBQUM3SixNQUFNLENBQUMsVUFBQSsyQixDQUFDO0lBQUEsT0FBSSxDQUFDTCxVQUFVLENBQUN0dUIsSUFBSSxDQUFDLFVBQUEwdUIsU0FBUztNQUFBLE9BQUlDLENBQUMsQ0FBQ2gyQixFQUFFLEtBQUsrMUIsU0FBUyxDQUFDLzFCLEVBQUU7SUFBQSxFQUFDO0VBQUEsRUFBQztFQUV2RjtFQUNBcUYsS0FBSzs7RUFFWDtFQUNBLElBQU00d0IsVUFBVSxPQUFBejJCLGdCQUFBLGlCQUNieWpCLFdBQVcsRUFBRzRTLFlBQVk7RUFDdkI7RUFDQUEsWUFBWSxDQUFDQyxZQUFZLEVBQUVILFVBQVUsQ0FBQztFQUN0QztFQUNGaDRCLEtBQUssQ0FBQ0MsT0FBTyxDQUFDazRCLFlBQVksQ0FBQzdTLFdBQVcsQ0FBQyxDQUFDLE1BQUF6VyxNQUFBLEtBQUFDLG1CQUFBLGFBQ2xDcXBCLFlBQVksQ0FBQzdTLFdBQVcsQ0FBQyxPQUFBeFcsbUJBQUEsYUFBS2twQixVQUFVO0VBQzVDO0VBQ0YsSUFBQUwsZUFBUSxFQUFDUSxZQUFZLENBQUM3UyxXQUFXLENBQUMsQ0FBQyxHQUFBNWpCLGFBQUEsQ0FBQUEsYUFBQSxLQUU1QnkyQixZQUFZLENBQUM3UyxXQUFXLENBQUMsR0FDekIwUyxVQUFVLElBRWZHLFlBQVksQ0FBQzdTLFdBQVcsQ0FBQyxDQUM5QjtFQUVELE9BQUE1akIsYUFBQSxDQUFBQSxhQUFBLEtBQ0t5MkIsWUFBWSxHQUNaRyxVQUFVO0FBRWpCO0FBRUEsU0FBU0MscUJBQXFCQSxDQUM1Qjd3QixLQUFRLEVBQ1JtQyxNQUFjLEVBQ2QydUIsV0FBbUIsRUFDaEI7RUFDSCxPQUFPLElBQUFDLHlCQUFRLEVBQUksQ0FDakIsSUFBQUMsdUJBQU0sRUFBQ0MseUJBQXlCLEVBQUU7SUFBQzl1QixNQUFNLEVBQU5BLE1BQU07SUFBRTJ1QixXQUFXLEVBQVhBO0VBQVcsQ0FBQyxDQUFDLEVBQ3hELElBQUFFLHVCQUFNLEVBQUN4VixvQkFBb0IsRUFBRTtJQUFDclosTUFBTSxFQUFOQTtFQUFNLENBQUMsQ0FBQyxDQUN2QyxDQUFDLENBQUNuQyxLQUFLLENBQUM7QUFDWDtBQUVPLFNBQVNreEIsNkJBQTZCQSxDQUMzQ2x4QixLQUFRLEVBQ1JtQyxNQUFjLEVBQ2QydUIsV0FBbUIsRUFDaEI7RUFBQSxJQUFBSyxxQkFBQTtFQUNILElBQU1DLGVBQWUsR0FBRyxJQUFBQyxpQ0FBaUIsRUFBQ3J4QixLQUFLLEVBQUVBLEtBQUssQ0FBQ1QsTUFBTSxDQUFDO0VBQzlELElBQU0rQyxTQUFTLEdBQUd1dUIscUJBQXFCLENBQUM3d0IsS0FBSyxFQUFFbUMsTUFBTSxFQUFFMnVCLFdBQVcsQ0FBQztFQUNuRTtFQUNBLElBQU1RLGtCQUFrQixPQUFBbHFCLG1CQUFBLGFBQU9wSCxLQUFLLENBQUM3QyxVQUFVLENBQUM7O0VBRWhEO0VBQ0FtRixTQUFTLENBQUNpdkIsb0JBQW9CLEdBQUc3NUIsTUFBTSxDQUFDZ0MsSUFBSSxDQUFDc0csS0FBSyxDQUFDekMsUUFBUSxDQUFDLENBQUM2QyxHQUFHLENBQUMsVUFBQUUsQ0FBQztJQUFBLE9BQ2hFQSxDQUFDLEtBQUs2QixNQUFNLEdBQUcydUIsV0FBVyxHQUFHeHdCLENBQUM7RUFBQSxDQUNoQyxDQUFDOztFQUVEO0VBQ0EsS0FBQTZ3QixxQkFBQSxHQUFJN3VCLFNBQVMsQ0FBQ3BGLGVBQWUsY0FBQWkwQixxQkFBQSxlQUF6QkEscUJBQUEsQ0FBMkIxNEIsTUFBTSxFQUFFO0lBQUEsSUFBQSs0QixxQkFBQTtJQUNyQztJQUNBbHZCLFNBQVMsQ0FBQzVELG1CQUFtQixJQUFBOHlCLHFCQUFBLEdBQUdKLGVBQWUsYUFBZkEsZUFBZSx1QkFBZkEsZUFBZSxDQUFFM3lCLFNBQVMsY0FBQSt5QixxQkFBQSxjQUFBQSxxQkFBQSxHQUFJLEVBQUU7SUFDaEVsdkIsU0FBUyxDQUFDbkYsVUFBVSxPQUFBaUssbUJBQUEsYUFBT2txQixrQkFBa0IsQ0FBQztFQUNoRDtFQUVBLE9BQU9odkIsU0FBUztBQUNsQjtBQUVPLFNBQVMydUIseUJBQXlCQSxDQUN2Q2p4QixLQUFRLEVBQUF5eEIsTUFBQSxFQUVMO0VBQUEsSUFERnR2QixNQUFNLEdBQUFzdkIsTUFBQSxDQUFOdHZCLE1BQU07SUFBRTJ1QixXQUFXLEdBQUFXLE1BQUEsQ0FBWFgsV0FBVztFQUVwQixJQUFNTSxlQUFlLEdBQUcsSUFBQUMsaUNBQWlCLEVBQUNyeEIsS0FBSyxFQUFFQSxLQUFLLENBQUNULE1BQU0sQ0FBQztFQUU5RCxJQUFNK0MsU0FBUyxHQUFHdEMsS0FBSyxDQUFDWCxPQUFPLENBQUNxTSxNQUFNLENBQ3BDLFVBQ0VnbUIsU0FBUyxFQUFBQyxNQUFBLEVBRU47SUFBQSxJQURGbHVCLElBQUksR0FBQWt1QixNQUFBLENBQUpsdUIsSUFBSTtNQUFFbWEsV0FBVyxHQUFBK1QsTUFBQSxDQUFYL1QsV0FBVztNQUFFZ1UsdUJBQXVCLEdBQUFELE1BQUEsQ0FBdkJDLHVCQUF1QjtNQUFFQyxrQkFBa0IsR0FBQUYsTUFBQSxDQUFsQkUsa0JBQWtCO01BQUVyQixZQUFZLEdBQUFtQixNQUFBLENBQVpuQixZQUFZO01BQUVzQixhQUFhLEdBQUFILE1BQUEsQ0FBYkcsYUFBYTtJQUU1RjtJQUNBLElBQU1wdEIsS0FBSyxHQUFHLElBQUFzSSxvQkFBTyxFQUFDdkosSUFBSSxDQUFDO0lBQzNCLElBQU1zdUIsWUFBWSxHQUFHLElBQUEva0Isb0JBQU8sRUFBQzRRLFdBQVcsQ0FBQztJQUN6QyxJQUFNb1UsVUFBVSxHQUFHWixlQUFlLEdBQUcxc0IsS0FBSyxDQUFDdEUsR0FBRyxDQUFDLFVBQUF1d0IsQ0FBQztNQUFBLE9BQUlTLGVBQWUsQ0FBQ1QsQ0FBQyxDQUFDO0lBQUEsRUFBQyxHQUFHLEVBQUU7SUFFNUUsSUFBSXNCLGFBQWEsR0FBR1AsU0FBUztJQUM3Qk0sVUFBVSxDQUFDOTNCLE9BQU8sQ0FBQyxVQUFDdzJCLFNBQVMsRUFBRTE1QixDQUFDLEVBQUs7TUFBQSxJQUFBazdCLHFCQUFBO01BQ25DLElBQU1DLGFBQWEsR0FBRztRQUNwQjF1QixJQUFJLEVBQUVpQixLQUFLLENBQUMxTixDQUFDLENBQUM7UUFDZDRtQixXQUFXLEVBQUVtVSxZQUFZLENBQUMvNkIsQ0FBQyxDQUFDO1FBQzVCNjZCLGtCQUFrQixFQUFsQkEsa0JBQWtCO1FBQ2xCckIsWUFBWSxFQUFaQTtNQUNGLENBQUM7TUFFRCxJQUFNNEIsWUFBWSxHQUNoQixDQUFBUix1QkFBdUIsYUFBdkJBLHVCQUF1Qix1QkFBdkJBLHVCQUF1QixDQUFHbEIsU0FBUyxFQUFFdnVCLE1BQU0sRUFBRTJ1QixXQUFXLENBQUMsS0FDekRsQiw4QkFBOEIsQ0FBQ2MsU0FBUyxFQUFFdnVCLE1BQU0sRUFBRTJ1QixXQUFXLENBQUM7TUFDaEVtQixhQUFhLEdBQUdHLFlBQVksR0FDeEJDLHVCQUF1QixDQUFDSixhQUFhLEVBQUVHLFlBQVksRUFBRUQsYUFBYSxDQUFDLEdBQ25FRixhQUFhO01BRWpCLElBQ0VFLGFBQWEsQ0FBQ3ZVLFdBQVcsS0FBS25nQixTQUFTLEtBQUF5MEIscUJBQUEsR0FDdkNELGFBQWEsQ0FBQ0UsYUFBYSxDQUFDdlUsV0FBVyxDQUFDLGNBQUFzVSxxQkFBQSxlQUF4Q0EscUJBQUEsQ0FBMEN6NUIsTUFBTSxJQUNoRHE1QixhQUFhLEVBQ2I7UUFDQUcsYUFBYSxDQUFDSCxhQUFhLENBQUMsR0FBR3BCLFNBQVMsQ0FBQ3R3QixHQUFHLENBQUMsVUFBQWt5QixJQUFJO1VBQUEsT0FBSUEsSUFBSSxDQUFDMzNCLEVBQUU7UUFBQSxFQUFDO01BQy9EO0lBQ0YsQ0FBQyxDQUFDO0lBRUYsT0FBT3MzQixhQUFhO0VBQ3RCLENBQUMsRUFDRGp5QixLQUNGLENBQUM7RUFFRCxPQUFPc0MsU0FBUztBQUNsQjtBQUVBLFNBQVMrdkIsdUJBQXVCQSxDQUM5QnJ5QixLQUFLLEVBQ0xveUIsWUFBWSxFQUFBRyxNQUFBLEVBRVo7RUFBQSxJQURDOXVCLElBQUksR0FBQTh1QixNQUFBLENBQUo5dUIsSUFBSTtJQUFFbWEsV0FBVyxHQUFBMlUsTUFBQSxDQUFYM1UsV0FBVztJQUFFaVUsa0JBQWtCLEdBQUFVLE1BQUEsQ0FBbEJWLGtCQUFrQjtJQUFFckIsWUFBWSxHQUFBK0IsTUFBQSxDQUFaL0IsWUFBWTtFQUVwRDtFQUNBO0VBQ0EsSUFBSWx1QixTQUFTLEdBQUcrdEIsbUJBQW1CLENBQUNyd0IsS0FBSyxFQUFFb3lCLFlBQVksRUFBRTtJQUFDM3VCLElBQUksRUFBSkEsSUFBSTtJQUFFbWEsV0FBVyxFQUFYQSxXQUFXO0lBQUU0UyxZQUFZLEVBQVpBO0VBQVksQ0FBQyxDQUFDO0VBQzNGLElBQU1KLFlBQVksR0FBRyxDQUFBeUIsa0JBQWtCLGFBQWxCQSxrQkFBa0IsdUJBQWxCQSxrQkFBa0IsQ0FBR08sWUFBWSxDQUFDLEtBQUlsQyxtQkFBbUIsQ0FBQ2tDLFlBQVksQ0FBQztFQUU1RixJQUFJaEMsWUFBWSxFQUFFO0lBQ2hCOXRCLFNBQVMsR0FBRyxJQUFBMEssb0JBQU8sRUFBQ29qQixZQUFZLENBQUMsQ0FBQzFrQixNQUFNLENBQUMsVUFBQ0MsSUFBSSxFQUFFNm1CLFdBQVcsRUFBSztNQUM5RDtNQUNBO01BQ0EsT0FBTzNCLHFCQUFxQixDQUFDbGxCLElBQUksRUFBRTZtQixXQUFXLEVBQUVBLFdBQVcsQ0FBQztJQUM5RCxDQUFDLEVBQUVsd0IsU0FBUyxDQUFDO0VBQ2Y7RUFDQSxPQUFPQSxTQUFTO0FBQ2xCIiwiaWdub3JlTGlzdCI6W119