@kepler.gl/reducers 3.3.0-alpha.15 → 3.3.0-alpha.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/combined-updaters.js +166 -8
- package/dist/cjs/composers.js +4 -5
- package/dist/cjs/dataset-ops-updaters.js +289 -0
- package/dist/cjs/dataset-ops-updaters.spec.js +257 -0
- package/dist/cjs/interaction-utils.js +156 -4
- package/dist/cjs/layer-utils.js +133 -8
- package/dist/cjs/ui-state-updaters.js +86 -47
- package/dist/cjs/ui-state.js +2 -2
- package/dist/cjs/vis-state-merger.js +35 -4
- package/dist/cjs/vis-state-selectors.js +5 -4
- package/dist/cjs/vis-state-updaters.js +599 -182
- package/dist/cjs/vis-state.js +2 -2
- package/dist/combined-updaters.d.ts +21 -1
- package/dist/composers.d.ts +3 -0
- package/dist/dataset-ops-updaters.d.ts +18 -0
- package/dist/dataset-ops-updaters.spec.d.ts +1 -0
- package/dist/esm/combined-updaters.js +166 -8
- package/dist/esm/composers.js +3 -2
- package/dist/esm/dataset-ops-updaters.js +274 -0
- package/dist/esm/dataset-ops-updaters.spec.js +256 -0
- package/dist/esm/interaction-utils.js +150 -1
- package/dist/esm/layer-utils.js +131 -8
- package/dist/esm/ui-state-updaters.js +85 -46
- package/dist/esm/ui-state.js +2 -2
- package/dist/esm/vis-state-merger.js +35 -4
- package/dist/esm/vis-state-selectors.js +5 -4
- package/dist/esm/vis-state-updaters.js +557 -186
- package/dist/esm/vis-state.js +2 -2
- package/dist/interaction-utils.d.ts +21 -1
- package/dist/layer-utils.d.ts +16 -0
- package/dist/ui-state-updaters.d.ts +20 -0
- package/dist/vis-state-updaters.d.ts +32 -13
- package/dist/vis-state.d.ts +16 -0
- package/package.json +16 -16
|
@@ -8,18 +8,39 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
8
8
|
exports.addChartUpdater = exports.addAnnotationUpdater = exports.INITIAL_VIS_STATE = exports.DEFAULT_EDITOR = exports.DEFAULT_ANIMATION_CONFIG = exports.ACTION_TASK_FIT_BOUNDS = exports.ACTION_TASK_ADD_NOTIFICATION = void 0;
|
|
9
9
|
exports.addDefaultLayers = addDefaultLayers;
|
|
10
10
|
exports.addDefaultTooltips = addDefaultTooltips;
|
|
11
|
-
exports.
|
|
11
|
+
exports.addFilterUpdater = exports.addEffectUpdater = void 0;
|
|
12
|
+
Object.defineProperty(exports, "addGroupByUpdater", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function get() {
|
|
15
|
+
return _datasetOpsUpdaters.addGroupByUpdater;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
Object.defineProperty(exports, "addJoinUpdater", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
get: function get() {
|
|
21
|
+
return _datasetOpsUpdaters.addJoinUpdater;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
exports.addLayerUpdater = exports.addLayerToLayerGroupUpdater = exports.addLayerGroupUpdater = void 0;
|
|
25
|
+
Object.defineProperty(exports, "addSpatialJoinUpdater", {
|
|
26
|
+
enumerable: true,
|
|
27
|
+
get: function get() {
|
|
28
|
+
return _datasetOpsUpdaters.addSpatialJoinUpdater;
|
|
29
|
+
}
|
|
30
|
+
});
|
|
12
31
|
exports.addToDatasetUpdater = addToDatasetUpdater;
|
|
13
32
|
exports.applyCPUFilterUpdater = void 0;
|
|
14
33
|
exports.applyFilterConfigUpdater = applyFilterConfigUpdater;
|
|
15
34
|
exports.applyLayerConfigUpdater = applyLayerConfigUpdater;
|
|
16
35
|
exports.applyMergersUpdater = applyMergersUpdater;
|
|
36
|
+
exports.clearStagedLoadedFilesUpdater = void 0;
|
|
17
37
|
exports.closeSpecificMapAtIndex = closeSpecificMapAtIndex;
|
|
18
38
|
exports.convertEditorFeaturesToLayerUpdater = convertEditorFeaturesToLayerUpdater;
|
|
19
39
|
exports.copyTableColumnUpdater = copyTableColumnUpdater;
|
|
20
40
|
exports.defaultInteractionConfig = exports.createOrUpdateFilterUpdater = exports.createNewDatasetSuccessUpdater = void 0;
|
|
21
41
|
exports.deleteFeatureUpdater = deleteFeatureUpdater;
|
|
22
42
|
exports.duplicateLayerUpdater = exports.duplicateAnnotationUpdater = void 0;
|
|
43
|
+
exports.expandZipArchiveSuccessUpdater = expandZipArchiveSuccessUpdater;
|
|
23
44
|
exports.extractDataFromFeatureUpdater = extractDataFromFeatureUpdater;
|
|
24
45
|
exports.initialFileLoadingProgress = initialFileLoadingProgress;
|
|
25
46
|
exports.interactionConfigChangeUpdater = interactionConfigChangeUpdater;
|
|
@@ -55,6 +76,12 @@ exports.refreshDatasetProgressUpdater = refreshDatasetProgressUpdater;
|
|
|
55
76
|
exports.refreshDatasetSuccessUpdater = refreshDatasetSuccessUpdater;
|
|
56
77
|
exports.refreshDatasetUpdater = refreshDatasetUpdater;
|
|
57
78
|
exports.removeChartUpdater = exports.removeAnnotationUpdater = void 0;
|
|
79
|
+
Object.defineProperty(exports, "removeDatasetOpUpdater", {
|
|
80
|
+
enumerable: true,
|
|
81
|
+
get: function get() {
|
|
82
|
+
return _datasetOpsUpdaters.removeDatasetOpUpdater;
|
|
83
|
+
}
|
|
84
|
+
});
|
|
58
85
|
exports.removeDatasetUpdater = removeDatasetUpdater;
|
|
59
86
|
exports.removeFilterUpdater = exports.removeEffectUpdater = void 0;
|
|
60
87
|
exports.removeFromDatasetUpdater = removeFromDatasetUpdater;
|
|
@@ -64,6 +91,9 @@ exports.renameDatasetUpdater = renameDatasetUpdater;
|
|
|
64
91
|
exports.reorderLayerUpdater = exports.reorderEffectUpdater = void 0;
|
|
65
92
|
exports.replaceDatasetDepsInState = replaceDatasetDepsInState;
|
|
66
93
|
exports.resetMapConfigUpdater = void 0;
|
|
94
|
+
exports.runGroupByUpdater = runGroupByUpdater;
|
|
95
|
+
exports.runJoinUpdater = runJoinUpdater;
|
|
96
|
+
exports.runSpatialJoinUpdater = runSpatialJoinUpdater;
|
|
67
97
|
exports.setAnimationConfigUpdater = setAnimationConfigUpdater;
|
|
68
98
|
exports.setColumnDisplayFormatUpdater = setColumnDisplayFormatUpdater;
|
|
69
99
|
exports.setEditorFeaturePropertiesUpdater = setEditorFeaturePropertiesUpdater;
|
|
@@ -75,15 +105,32 @@ exports.setFilterAnimationWindowUpdater = setFilterAnimationWindowUpdater;
|
|
|
75
105
|
exports.setFilterPlotUpdater = void 0;
|
|
76
106
|
exports.setFilterUpdater = setFilterUpdater;
|
|
77
107
|
exports.setFilterViewUpdater = void 0;
|
|
108
|
+
Object.defineProperty(exports, "setGroupByConfigUpdater", {
|
|
109
|
+
enumerable: true,
|
|
110
|
+
get: function get() {
|
|
111
|
+
return _datasetOpsUpdaters.setGroupByConfigUpdater;
|
|
112
|
+
}
|
|
113
|
+
});
|
|
78
114
|
exports.setInitialLayerConfig = setInitialLayerConfig;
|
|
115
|
+
Object.defineProperty(exports, "setJoinConfigUpdater", {
|
|
116
|
+
enumerable: true,
|
|
117
|
+
get: function get() {
|
|
118
|
+
return _datasetOpsUpdaters.setJoinConfigUpdater;
|
|
119
|
+
}
|
|
120
|
+
});
|
|
79
121
|
exports.setLayerAnimationTimeConfigUpdater = setLayerAnimationTimeConfigUpdater;
|
|
80
122
|
exports.setLoadingIndicatorUpdater = exports.setLayerAnimationTimeUpdater = void 0;
|
|
81
123
|
exports.setLoadingProgressUpdater = setLoadingProgressUpdater;
|
|
82
124
|
exports.setMapInfoUpdater = void 0;
|
|
83
125
|
exports.setPolygonFilterAllLayersUpdater = setPolygonFilterAllLayersUpdater;
|
|
84
126
|
exports.setPolygonFilterLayerUpdater = setPolygonFilterLayerUpdater;
|
|
85
|
-
exports.setSelectedAnnotationUpdater = void 0;
|
|
86
|
-
exports
|
|
127
|
+
exports.setSelectedFeatureUpdater = exports.setSelectedAnnotationUpdater = void 0;
|
|
128
|
+
Object.defineProperty(exports, "setSpatialJoinConfigUpdater", {
|
|
129
|
+
enumerable: true,
|
|
130
|
+
get: function get() {
|
|
131
|
+
return _datasetOpsUpdaters.setSpatialJoinConfigUpdater;
|
|
132
|
+
}
|
|
133
|
+
});
|
|
87
134
|
exports.setTimeFilterTimelineModeUpdater = setTimeFilterTimelineModeUpdater;
|
|
88
135
|
exports.showDatasetTableUpdater = void 0;
|
|
89
136
|
exports.sortTableColumnUpdater = sortTableColumnUpdater;
|
|
@@ -135,6 +182,7 @@ var _processors = require("@kepler.gl/processors");
|
|
|
135
182
|
var _table = require("@kepler.gl/table");
|
|
136
183
|
var _interactionUtils = require("./interaction-utils");
|
|
137
184
|
var _layerUtils = require("./layer-utils");
|
|
185
|
+
var _datasetOpsUpdaters = require("./dataset-ops-updaters");
|
|
138
186
|
var _effects = require("@kepler.gl/effects");
|
|
139
187
|
var _dataUtils = require("./data-utils");
|
|
140
188
|
var _excluded = ["dataId"],
|
|
@@ -207,6 +255,14 @@ var defaultInteractionConfig = exports.defaultInteractionConfig = {
|
|
|
207
255
|
compareType: _constants.COMPARE_TYPES.ABSOLUTE
|
|
208
256
|
}
|
|
209
257
|
},
|
|
258
|
+
legend: {
|
|
259
|
+
id: 'legend',
|
|
260
|
+
label: 'interactions.legend',
|
|
261
|
+
enabled: false,
|
|
262
|
+
config: {
|
|
263
|
+
hideInvisibleLayers: false
|
|
264
|
+
}
|
|
265
|
+
},
|
|
210
266
|
geocoder: {
|
|
211
267
|
id: 'geocoder',
|
|
212
268
|
label: 'interactions.geocoder',
|
|
@@ -222,7 +278,7 @@ var defaultInteractionConfig = exports.defaultInteractionConfig = {
|
|
|
222
278
|
enabled: false,
|
|
223
279
|
config: {
|
|
224
280
|
// size is in km
|
|
225
|
-
size:
|
|
281
|
+
size: 2.5
|
|
226
282
|
}
|
|
227
283
|
},
|
|
228
284
|
coordinate: {
|
|
@@ -230,6 +286,19 @@ var defaultInteractionConfig = exports.defaultInteractionConfig = {
|
|
|
230
286
|
label: 'interactions.coordinate',
|
|
231
287
|
enabled: false,
|
|
232
288
|
position: null
|
|
289
|
+
},
|
|
290
|
+
annotation: {
|
|
291
|
+
id: 'annotation',
|
|
292
|
+
label: 'interactions.annotation',
|
|
293
|
+
enabled: false
|
|
294
|
+
},
|
|
295
|
+
zoomOpacity: {
|
|
296
|
+
id: 'zoomOpacity',
|
|
297
|
+
label: 'interactions.fadeOnZoom',
|
|
298
|
+
enabled: false,
|
|
299
|
+
config: {
|
|
300
|
+
controllers: []
|
|
301
|
+
}
|
|
233
302
|
}
|
|
234
303
|
};
|
|
235
304
|
var DEFAULT_ANIMATION_CONFIG = exports.DEFAULT_ANIMATION_CONFIG = {
|
|
@@ -275,6 +344,8 @@ var INITIAL_VIS_STATE = exports.INITIAL_VIS_STATE = {
|
|
|
275
344
|
// a collection of multiple dataset
|
|
276
345
|
datasets: {},
|
|
277
346
|
editingDataset: undefined,
|
|
347
|
+
groupBys: [],
|
|
348
|
+
joins: [],
|
|
278
349
|
// effects
|
|
279
350
|
effects: [],
|
|
280
351
|
effectOrder: [],
|
|
@@ -314,9 +385,11 @@ var INITIAL_VIS_STATE = exports.INITIAL_VIS_STATE = {
|
|
|
314
385
|
editor: DEFAULT_EDITOR,
|
|
315
386
|
fileLoading: false,
|
|
316
387
|
fileLoadingProgress: {},
|
|
388
|
+
stagedToAdd: null,
|
|
317
389
|
// for loading datasets
|
|
318
390
|
loadingIndicatorValue: 0,
|
|
319
391
|
loadingProgress: {},
|
|
392
|
+
loadingProcessing: {},
|
|
320
393
|
loaders: [],
|
|
321
394
|
loadOptions: {},
|
|
322
395
|
// visStateMergers
|
|
@@ -883,6 +956,25 @@ function setInitialLayerConfig(layer, datasets, layerClasses) {
|
|
|
883
956
|
}
|
|
884
957
|
return typeof newLayer.setInitialLayerConfig === 'function' ? newLayer.setInitialLayerConfig(dataset) : newLayer;
|
|
885
958
|
}
|
|
959
|
+
/**
|
|
960
|
+
* Fit the map when the layer type dropdown gives an empty layer its first
|
|
961
|
+
* type and that layer already points at a dataset. Later type changes,
|
|
962
|
+
* programmatic `layerTypeChange`, and saved-config applies leave the camera
|
|
963
|
+
* alone. Gated by `enableFitBoundsOnManualLayer`.
|
|
964
|
+
*/
|
|
965
|
+
function maybeFitManualLayerBounds(state, oldLayer, layer, fitBounds) {
|
|
966
|
+
if (!fitBounds || oldLayer.type || !layer.config.dataId || !(0, _utils.getApplicationConfig)().enableFitBoundsOnManualLayer) {
|
|
967
|
+
return state;
|
|
968
|
+
}
|
|
969
|
+
var bounds = (0, _dataUtils.findMapBounds)([layer]);
|
|
970
|
+
if (!bounds) {
|
|
971
|
+
return state;
|
|
972
|
+
}
|
|
973
|
+
return (0, _tasks.withTask)(state, ACTION_TASK_FIT_BOUNDS().map(function () {
|
|
974
|
+
return (0, _actions.fitBounds)(bounds);
|
|
975
|
+
}));
|
|
976
|
+
}
|
|
977
|
+
|
|
886
978
|
/**
|
|
887
979
|
* Update layer type. Previews layer config will be copied if applicable.
|
|
888
980
|
* @memberof visStateUpdaters
|
|
@@ -956,7 +1048,7 @@ function layerTypeChangeUpdater(state, action) {
|
|
|
956
1048
|
newState = _objectSpread(_objectSpread({}, newState), {}, {
|
|
957
1049
|
layerOrder: (0, _layerUtils.replaceLayerEntryInLayerOrder)(newState.layerOrder, oldLayer.id, newLayer.id)
|
|
958
1050
|
});
|
|
959
|
-
return newState;
|
|
1051
|
+
return maybeFitManualLayerBounds(newState, oldLayer, layer, action.fitBounds);
|
|
960
1052
|
}
|
|
961
1053
|
|
|
962
1054
|
/**
|
|
@@ -1163,13 +1255,24 @@ function setFilterAnimationWindowUpdater(state, _ref5) {
|
|
|
1163
1255
|
if (!filter) {
|
|
1164
1256
|
return state;
|
|
1165
1257
|
}
|
|
1166
|
-
var
|
|
1258
|
+
var previousWindow = filter.animationWindow;
|
|
1259
|
+
var nextFilter = _objectSpread(_objectSpread({}, filter), {}, {
|
|
1167
1260
|
animationWindow: animationWindow
|
|
1168
1261
|
});
|
|
1262
|
+
|
|
1263
|
+
// Entering or leaving interval playback snaps the window onto histogram bins.
|
|
1264
|
+
if (filter.type === _constants.FILTER_TYPES.timeRange && (previousWindow === _constants.ANIMATION_WINDOW.interval || animationWindow === _constants.ANIMATION_WINDOW.interval)) {
|
|
1265
|
+
var adjusted = (0, _utils.adjustValueToAnimationWindow)(state, nextFilter);
|
|
1266
|
+
if (Array.isArray(adjusted.value) && adjusted.value.every(function (v) {
|
|
1267
|
+
return Number.isFinite(v);
|
|
1268
|
+
})) {
|
|
1269
|
+
nextFilter = adjusted;
|
|
1270
|
+
}
|
|
1271
|
+
}
|
|
1169
1272
|
var newState = _objectSpread(_objectSpread({}, state), {}, {
|
|
1170
|
-
filters: (0, _composerHelpers.swap_)(
|
|
1273
|
+
filters: (0, _composerHelpers.swap_)(nextFilter)(state.filters)
|
|
1171
1274
|
});
|
|
1172
|
-
var newSyncTimelineMode = getSyncAnimationMode(
|
|
1275
|
+
var newSyncTimelineMode = getSyncAnimationMode(nextFilter);
|
|
1173
1276
|
return setTimeFilterTimelineModeUpdater(newState, {
|
|
1174
1277
|
id: id,
|
|
1175
1278
|
mode: newSyncTimelineMode
|
|
@@ -1448,7 +1551,14 @@ var setFilterPlotUpdater = exports.setFilterPlotUpdater = function setFilterPlot
|
|
|
1448
1551
|
var newFilter = state.filters[idx];
|
|
1449
1552
|
for (var prop in newProp) {
|
|
1450
1553
|
if (prop === 'plotType') {
|
|
1451
|
-
|
|
1554
|
+
var plotTypeUpdate = newProp.plotType;
|
|
1555
|
+
if (plotTypeUpdate && Object.prototype.hasOwnProperty.call(plotTypeUpdate, 'groupBy')) {
|
|
1556
|
+
var _newFilter$plotType;
|
|
1557
|
+
plotTypeUpdate = _objectSpread(_objectSpread({}, plotTypeUpdate), {}, {
|
|
1558
|
+
groupBy: (0, _utils.mergePlotGroupBy)((_newFilter$plotType = newFilter.plotType) === null || _newFilter$plotType === void 0 ? void 0 : _newFilter$plotType.groupBy, plotTypeUpdate.groupBy)
|
|
1559
|
+
});
|
|
1560
|
+
}
|
|
1561
|
+
newFilter = (0, _composerHelpers.pick_)('plotType')((0, _composerHelpers.merge_)(plotTypeUpdate))(newFilter);
|
|
1452
1562
|
} else if (prop === 'yAxis') {
|
|
1453
1563
|
var chartType = newProp.yAxis ? _constants.PLOT_TYPES.lineChart : _constants.PLOT_TYPES.histogram;
|
|
1454
1564
|
newFilter = (0, _composerHelpers.pick_)('plotType')((0, _composerHelpers.merge_)({
|
|
@@ -1790,6 +1900,7 @@ function removeLayerUpdater(state, _ref9) {
|
|
|
1790
1900
|
clicked = state.clicked,
|
|
1791
1901
|
hoverInfo = state.hoverInfo;
|
|
1792
1902
|
var layerToRemove = layers[idx];
|
|
1903
|
+
var interactionConfig = state.interactionConfig ? (0, _interactionUtils.removeLayerFromZoomOpacity)(state.interactionConfig, layerToRemove.id) : state.interactionConfig;
|
|
1793
1904
|
var newState = _objectSpread(_objectSpread({}, state), {}, {
|
|
1794
1905
|
layers: (0, _composerHelpers.filterOutById)(layerToRemove.id)(layers),
|
|
1795
1906
|
layerData: (0, _composerHelpers.removeElementAtIndex)(idx)(layerData),
|
|
@@ -1797,8 +1908,9 @@ function removeLayerUpdater(state, _ref9) {
|
|
|
1797
1908
|
clicked: layerToRemove.isLayerHovered(clicked) ? undefined : clicked,
|
|
1798
1909
|
hoverInfo: layerToRemove.isLayerHovered(hoverInfo) ? undefined : hoverInfo,
|
|
1799
1910
|
splitMaps: (0, _utils.removeLayerFromSplitMaps)(state.splitMaps, layerToRemove)
|
|
1800
|
-
|
|
1801
|
-
|
|
1911
|
+
}, interactionConfig !== state.interactionConfig ? {
|
|
1912
|
+
interactionConfig: interactionConfig
|
|
1913
|
+
} : {});
|
|
1802
1914
|
return updateAnimationDomain(removeChartsAndFilters(newState, function (chart) {
|
|
1803
1915
|
return isLayerChartConfig(chart) && chart.layerId === layerToRemove.id;
|
|
1804
1916
|
}));
|
|
@@ -2333,7 +2445,8 @@ var addChartUpdater = exports.addChartUpdater = function addChartUpdater(state,
|
|
|
2333
2445
|
charts: [].concat((0, _toConsumableArray2["default"])((state.charts || []).map(function (existing) {
|
|
2334
2446
|
return _objectSpread(_objectSpread({}, existing), {}, {
|
|
2335
2447
|
display: _objectSpread(_objectSpread({}, existing.display), {}, {
|
|
2336
|
-
isConfigActive: false
|
|
2448
|
+
isConfigActive: false,
|
|
2449
|
+
isJsonEditorActive: false
|
|
2337
2450
|
})
|
|
2338
2451
|
});
|
|
2339
2452
|
})), [_objectSpread(_objectSpread({}, chart), {}, {
|
|
@@ -2571,25 +2684,31 @@ var setSelectedAnnotationUpdater = exports.setSelectedAnnotationUpdater = functi
|
|
|
2571
2684
|
* @public
|
|
2572
2685
|
*/
|
|
2573
2686
|
function removeDatasetUpdater(state, action) {
|
|
2574
|
-
// extract dataset key
|
|
2575
2687
|
var datasetKey = action.dataId;
|
|
2576
2688
|
var datasets = state.datasets;
|
|
2689
|
+
if (!datasets[datasetKey]) {
|
|
2690
|
+
return state;
|
|
2691
|
+
}
|
|
2577
2692
|
|
|
2578
|
-
//
|
|
2693
|
+
// Derived tables are snapshots: keep them when a source dataset is deleted.
|
|
2694
|
+
// Only drop in-progress group-by / join drafts that referenced this dataset.
|
|
2695
|
+
var nextState = (0, _datasetOpsUpdaters.removeOpsForDatasets)(state, [datasetKey]);
|
|
2696
|
+
return removeSingleDatasetUpdater(nextState, datasetKey);
|
|
2697
|
+
}
|
|
2698
|
+
function removeSingleDatasetUpdater(state, datasetKey) {
|
|
2699
|
+
var datasets = state.datasets;
|
|
2579
2700
|
if (!datasets[datasetKey]) {
|
|
2580
2701
|
return state;
|
|
2581
2702
|
}
|
|
2582
2703
|
var layers = state.layers,
|
|
2583
2704
|
_state$datasets = state.datasets,
|
|
2584
|
-
|
|
2705
|
+
_dataset = _state$datasets[datasetKey],
|
|
2585
2706
|
newDatasets = (0, _objectWithoutProperties2["default"])(_state$datasets, [datasetKey].map(_toPropertyKey));
|
|
2586
2707
|
var layersToRemove = layers.filter(function (l) {
|
|
2587
2708
|
return l.config.dataId === datasetKey;
|
|
2588
2709
|
}).map(function (l) {
|
|
2589
2710
|
return l.id;
|
|
2590
2711
|
});
|
|
2591
|
-
|
|
2592
|
-
// remove layers and datasets
|
|
2593
2712
|
var newState = layersToRemove.reduce(function (accu, id) {
|
|
2594
2713
|
return removeLayerUpdater(accu, {
|
|
2595
2714
|
id: id
|
|
@@ -2597,8 +2716,6 @@ function removeDatasetUpdater(state, action) {
|
|
|
2597
2716
|
}, _objectSpread(_objectSpread({}, state), {}, {
|
|
2598
2717
|
datasets: newDatasets
|
|
2599
2718
|
}));
|
|
2600
|
-
|
|
2601
|
-
// update filters
|
|
2602
2719
|
var filters = [];
|
|
2603
2720
|
var _iterator2 = _createForOfIteratorHelper(newState.filters),
|
|
2604
2721
|
_step2;
|
|
@@ -2607,10 +2724,8 @@ function removeDatasetUpdater(state, action) {
|
|
|
2607
2724
|
var filter = _step2.value;
|
|
2608
2725
|
var valueIndex = filter.dataId.indexOf(datasetKey);
|
|
2609
2726
|
if (valueIndex >= 0 && filter.dataId.length > 1) {
|
|
2610
|
-
// only remove one synced dataset from the filter
|
|
2611
2727
|
filters.push(_removeFilterDataIdAtValueIndex(filter, valueIndex, datasets));
|
|
2612
2728
|
} else if (valueIndex < 0) {
|
|
2613
|
-
// leave the filter as is
|
|
2614
2729
|
filters.push(filter);
|
|
2615
2730
|
}
|
|
2616
2731
|
}
|
|
@@ -2975,7 +3090,7 @@ function createNewDataEntryTask(dataset, datasets) {
|
|
|
2975
3090
|
arg: dataset,
|
|
2976
3091
|
onProgress: function onProgress(progress) {
|
|
2977
3092
|
var _progress$percent;
|
|
2978
|
-
return (0, _actions.setLoadingProgress)(progressId, Math.round(((_progress$percent = progress === null || progress === void 0 ? void 0 : progress.percent) !== null && _progress$percent !== void 0 ? _progress$percent : 0) * 100));
|
|
3093
|
+
return (0, _actions.setLoadingProgress)(progressId, Math.round(((_progress$percent = progress === null || progress === void 0 ? void 0 : progress.percent) !== null && _progress$percent !== void 0 ? _progress$percent : 0) * 100), (progress === null || progress === void 0 ? void 0 : progress.phase) === 'processing' ? 'processing' : undefined);
|
|
2979
3094
|
}
|
|
2980
3095
|
}).chain(function (hydrated) {
|
|
2981
3096
|
var task = (0, _table.createNewDataEntry)(hydrated, datasets);
|
|
@@ -2984,23 +3099,28 @@ function createNewDataEntryTask(dataset, datasets) {
|
|
|
2984
3099
|
}
|
|
2985
3100
|
function clearLoadingProgress(state, ids) {
|
|
2986
3101
|
var current = state.loadingProgress || {};
|
|
2987
|
-
|
|
3102
|
+
var processing = state.loadingProcessing || {};
|
|
3103
|
+
if (!Object.keys(current).length && !Object.keys(processing).length) {
|
|
2988
3104
|
return state;
|
|
2989
3105
|
}
|
|
2990
3106
|
if ((state.loadingIndicatorValue || 0) <= 0) {
|
|
2991
3107
|
return _objectSpread(_objectSpread({}, state), {}, {
|
|
2992
|
-
loadingProgress: {}
|
|
3108
|
+
loadingProgress: {},
|
|
3109
|
+
loadingProcessing: {}
|
|
2993
3110
|
});
|
|
2994
3111
|
}
|
|
2995
3112
|
if (!(ids !== null && ids !== void 0 && ids.length)) {
|
|
2996
3113
|
return state;
|
|
2997
3114
|
}
|
|
2998
3115
|
var next = _objectSpread({}, current);
|
|
3116
|
+
var nextProcessing = _objectSpread({}, processing);
|
|
2999
3117
|
ids.forEach(function (id) {
|
|
3000
3118
|
delete next[id];
|
|
3119
|
+
delete nextProcessing[id];
|
|
3001
3120
|
});
|
|
3002
3121
|
return _objectSpread(_objectSpread({}, state), {}, {
|
|
3003
|
-
loadingProgress: next
|
|
3122
|
+
loadingProgress: next,
|
|
3123
|
+
loadingProcessing: nextProcessing
|
|
3004
3124
|
});
|
|
3005
3125
|
}
|
|
3006
3126
|
function patchDatasetMetadata(dataset, patch) {
|
|
@@ -3363,7 +3483,8 @@ var updateVisDataUpdater = exports.updateVisDataUpdater = function updateVisData
|
|
|
3363
3483
|
if (!datasets.length) {
|
|
3364
3484
|
return updatedState;
|
|
3365
3485
|
}
|
|
3366
|
-
var
|
|
3486
|
+
var readyTasks = [];
|
|
3487
|
+
var remoteTasks = [];
|
|
3367
3488
|
var notificationTasks = [];
|
|
3368
3489
|
var hydrateProgress = {};
|
|
3369
3490
|
datasets.forEach(function (_ref35, datasetIndex) {
|
|
@@ -3373,12 +3494,13 @@ var updateVisDataUpdater = exports.updateVisDataUpdater = function updateVisData
|
|
|
3373
3494
|
var proto = _objectSpread({
|
|
3374
3495
|
info: info
|
|
3375
3496
|
}, rest);
|
|
3376
|
-
|
|
3497
|
+
var remote = needsExternallyHostedHydrate(proto);
|
|
3498
|
+
if (remote) {
|
|
3377
3499
|
hydrateProgress[getDatasetProgressId(proto, datasetIndex)] = 0;
|
|
3378
3500
|
}
|
|
3379
3501
|
var task = createNewDataEntryTask(proto, state.datasets);
|
|
3380
3502
|
if (task) {
|
|
3381
|
-
|
|
3503
|
+
(remote ? remoteTasks : readyTasks).push(task);
|
|
3382
3504
|
} else {
|
|
3383
3505
|
notificationTasks.push(ACTION_TASK_ADD_NOTIFICATION().map(function () {
|
|
3384
3506
|
return (0, _actions.addNotification)((0, _utils.errorNotification)({
|
|
@@ -3388,17 +3510,26 @@ var updateVisDataUpdater = exports.updateVisDataUpdater = function updateVisData
|
|
|
3388
3510
|
}));
|
|
3389
3511
|
}
|
|
3390
3512
|
});
|
|
3513
|
+
|
|
3514
|
+
// Parsed datasets are committed on their own. A remote download in the same
|
|
3515
|
+
// add must not hold them until the URL finishes.
|
|
3391
3516
|
var progressIds = Object.keys(hydrateProgress);
|
|
3392
|
-
var
|
|
3393
|
-
|
|
3394
|
-
|
|
3395
|
-
|
|
3517
|
+
var batches = [];
|
|
3518
|
+
if (readyTasks.length) {
|
|
3519
|
+
batches.push({
|
|
3520
|
+
tasks: readyTasks,
|
|
3521
|
+
progressIds: []
|
|
3522
|
+
});
|
|
3523
|
+
}
|
|
3524
|
+
if (remoteTasks.length) {
|
|
3525
|
+
batches.push({
|
|
3526
|
+
tasks: remoteTasks,
|
|
3396
3527
|
progressIds: progressIds
|
|
3397
3528
|
});
|
|
3398
|
-
}
|
|
3399
|
-
if (
|
|
3529
|
+
}
|
|
3530
|
+
if (batches.length) {
|
|
3400
3531
|
updatedState = setLoadingIndicatorUpdater(updatedState, (0, _composerHelpers.payload_)({
|
|
3401
|
-
change:
|
|
3532
|
+
change: batches.length,
|
|
3402
3533
|
type: ''
|
|
3403
3534
|
}));
|
|
3404
3535
|
if (progressIds.length) {
|
|
@@ -3407,7 +3538,15 @@ var updateVisDataUpdater = exports.updateVisDataUpdater = function updateVisData
|
|
|
3407
3538
|
});
|
|
3408
3539
|
}
|
|
3409
3540
|
}
|
|
3410
|
-
return (0, _tasks.withTask)(updatedState, [].concat((0, _toConsumableArray2["default"])(
|
|
3541
|
+
return (0, _tasks.withTask)(updatedState, [].concat((0, _toConsumableArray2["default"])(batches.map(function (batch) {
|
|
3542
|
+
return _tasks["default"].allSettled(batch.tasks).map(function (results) {
|
|
3543
|
+
return (0, _actions.createNewDatasetSuccess)({
|
|
3544
|
+
results: results,
|
|
3545
|
+
addToMapOptions: options,
|
|
3546
|
+
progressIds: batch.progressIds
|
|
3547
|
+
});
|
|
3548
|
+
});
|
|
3549
|
+
})), notificationTasks));
|
|
3411
3550
|
};
|
|
3412
3551
|
var createNewDatasetSuccessUpdater = exports.createNewDatasetSuccessUpdater = function createNewDatasetSuccessUpdater(state, action) {
|
|
3413
3552
|
var _action$payload = action.payload,
|
|
@@ -3661,9 +3800,16 @@ function updateDatasetPropsUpdater(state, action) {
|
|
|
3661
3800
|
// validate props: just color for now
|
|
3662
3801
|
// we only allow label, color and meta to be updated
|
|
3663
3802
|
// const newTable = copyTableAndUpdate(existing, validatedProps);
|
|
3664
|
-
|
|
3803
|
+
var nextState = _objectSpread(_objectSpread({}, state), {}, {
|
|
3665
3804
|
datasets: _objectSpread(_objectSpread({}, datasets), {}, (0, _defineProperty2["default"])({}, dataId, (0, _table.copyTableAndUpdate)(existing, validatedProps)))
|
|
3666
3805
|
});
|
|
3806
|
+
// A tileset access token is read while formatting layer data. Refresh
|
|
3807
|
+
// only when that field changes so other metadata edits (e.g. refresh
|
|
3808
|
+
// interval) do not rebuild every layer on the dataset.
|
|
3809
|
+
if (props.metadata && 'tile3dAccessToken' in props.metadata) {
|
|
3810
|
+
return updateAllLayerDomainData(nextState, dataId);
|
|
3811
|
+
}
|
|
3812
|
+
return nextState;
|
|
3667
3813
|
}
|
|
3668
3814
|
return state;
|
|
3669
3815
|
}
|
|
@@ -3923,34 +4069,94 @@ function closeSpecificMapAtIndex(state, action) {
|
|
|
3923
4069
|
* @memberof visStateUpdaters
|
|
3924
4070
|
* @public
|
|
3925
4071
|
*/
|
|
4072
|
+
var nextFileLoadId = 1;
|
|
4073
|
+
function createFileLoadId() {
|
|
4074
|
+
var loadId = nextFileLoadId;
|
|
4075
|
+
nextFileLoadId += 1;
|
|
4076
|
+
return loadId;
|
|
4077
|
+
}
|
|
4078
|
+
function finishFileLoad(onFinish, fileCache, options, loadId) {
|
|
4079
|
+
var action = options ? onFinish(fileCache, options) : onFinish(fileCache);
|
|
4080
|
+
return _objectSpread(_objectSpread({}, action), {}, {
|
|
4081
|
+
loadId: loadId
|
|
4082
|
+
});
|
|
4083
|
+
}
|
|
3926
4084
|
var loadFilesUpdater = exports.loadFilesUpdater = function loadFilesUpdater(state, action) {
|
|
4085
|
+
var _state$fileLoading$op;
|
|
3927
4086
|
var files = action.files,
|
|
3928
4087
|
_action$onFinish = action.onFinish,
|
|
3929
|
-
onFinish = _action$onFinish === void 0 ? _actions.loadFilesSuccess : _action$onFinish
|
|
4088
|
+
onFinish = _action$onFinish === void 0 ? _actions.loadFilesSuccess : _action$onFinish,
|
|
4089
|
+
options = action.options;
|
|
3930
4090
|
if (!files.length) {
|
|
3931
4091
|
return state;
|
|
3932
4092
|
}
|
|
3933
4093
|
var companionFiles = Array.from(files);
|
|
3934
4094
|
var filesToLoad = (0, _processors.getFilesToParse)(companionFiles);
|
|
4095
|
+
|
|
4096
|
+
// Another drop while a deferred parse is running must join that load.
|
|
4097
|
+
// Replacing `fileLoading` makes the in-flight file finish against the new
|
|
4098
|
+
// cache and drop the files that were already being parsed.
|
|
4099
|
+
if (state.fileLoading && (_state$fileLoading$op = state.fileLoading.options) !== null && _state$fileLoading$op !== void 0 && _state$fileLoading$op.deferAddToMap && options !== null && options !== void 0 && options.deferAddToMap) {
|
|
4100
|
+
return appendDeferredFileLoad(state, {
|
|
4101
|
+
filesToLoad: filesToLoad,
|
|
4102
|
+
companionFiles: companionFiles
|
|
4103
|
+
});
|
|
4104
|
+
}
|
|
3935
4105
|
if (!filesToLoad.length) {
|
|
3936
4106
|
return state;
|
|
3937
4107
|
}
|
|
4108
|
+
|
|
4109
|
+
// A deferred load is another batch for the same Add Data click. Keep files
|
|
4110
|
+
// already staged, and keep their error cards, instead of starting over.
|
|
4111
|
+
var previousErrors = options !== null && options !== void 0 && options.deferAddToMap && state.fileLoadingProgress ? Object.fromEntries(Object.entries(state.fileLoadingProgress).filter(function (_ref39) {
|
|
4112
|
+
var _ref40 = (0, _slicedToArray2["default"])(_ref39, 2),
|
|
4113
|
+
value = _ref40[1];
|
|
4114
|
+
return value === null || value === void 0 ? void 0 : value.error;
|
|
4115
|
+
})) : {};
|
|
3938
4116
|
var fileLoadingProgress = filesToLoad.reduce(function (accu, f, i) {
|
|
3939
4117
|
return (0, _composerHelpers.merge_)(initialFileLoadingProgress(f, i))(accu);
|
|
3940
|
-
},
|
|
3941
|
-
var fileLoading = {
|
|
4118
|
+
}, previousErrors);
|
|
4119
|
+
var fileLoading = _objectSpread({
|
|
4120
|
+
loadId: createFileLoadId(),
|
|
3942
4121
|
fileCache: [],
|
|
3943
4122
|
filesToLoad: filesToLoad,
|
|
3944
4123
|
companionFiles: companionFiles,
|
|
3945
4124
|
onFinish: onFinish
|
|
3946
|
-
}
|
|
3947
|
-
|
|
4125
|
+
}, options ? {
|
|
4126
|
+
options: options
|
|
4127
|
+
} : {});
|
|
4128
|
+
var nextState = (0, _composerHelpers.merge_)(_objectSpread({
|
|
3948
4129
|
fileLoadingProgress: fileLoadingProgress,
|
|
3949
4130
|
fileLoading: fileLoading
|
|
3950
|
-
}
|
|
4131
|
+
}, options !== null && options !== void 0 && options.deferAddToMap ? {} : {
|
|
4132
|
+
stagedToAdd: null
|
|
4133
|
+
}))(state);
|
|
3951
4134
|
return loadNextFileUpdater(nextState);
|
|
3952
4135
|
};
|
|
3953
4136
|
|
|
4137
|
+
/**
|
|
4138
|
+
* Add a drop to the deferred load that is already parsing.
|
|
4139
|
+
* The current file keeps its cache; the new files run after it.
|
|
4140
|
+
*/
|
|
4141
|
+
function appendDeferredFileLoad(state, _ref41) {
|
|
4142
|
+
var filesToLoad = _ref41.filesToLoad,
|
|
4143
|
+
companionFiles = _ref41.companionFiles;
|
|
4144
|
+
var loading = state.fileLoading;
|
|
4145
|
+
if (!loading || !filesToLoad.length && !companionFiles.length) {
|
|
4146
|
+
return state;
|
|
4147
|
+
}
|
|
4148
|
+
var fileLoadingProgress = filesToLoad.reduce(function (accu, file, index) {
|
|
4149
|
+
return (0, _composerHelpers.merge_)(initialFileLoadingProgress(file, index))(accu);
|
|
4150
|
+
}, state.fileLoadingProgress);
|
|
4151
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
4152
|
+
fileLoadingProgress: fileLoadingProgress,
|
|
4153
|
+
fileLoading: _objectSpread(_objectSpread({}, loading), {}, {
|
|
4154
|
+
filesToLoad: [].concat((0, _toConsumableArray2["default"])(Array.from(loading.filesToLoad)), (0, _toConsumableArray2["default"])(filesToLoad)),
|
|
4155
|
+
companionFiles: [].concat((0, _toConsumableArray2["default"])(loading.companionFiles || []), (0, _toConsumableArray2["default"])(companionFiles))
|
|
4156
|
+
})
|
|
4157
|
+
});
|
|
4158
|
+
}
|
|
4159
|
+
|
|
3954
4160
|
/**
|
|
3955
4161
|
* Sucessfully loaded one file, move on to the next one
|
|
3956
4162
|
* @memberof visStateUpdaters
|
|
@@ -3962,9 +4168,7 @@ function loadFileStepSuccessUpdater(state, action) {
|
|
|
3962
4168
|
}
|
|
3963
4169
|
var fileName = action.fileName,
|
|
3964
4170
|
fileCache = action.fileCache;
|
|
3965
|
-
var
|
|
3966
|
-
filesToLoad = _state$fileLoading.filesToLoad,
|
|
3967
|
-
onFinish = _state$fileLoading.onFinish;
|
|
4171
|
+
var loadId = state.fileLoading.loadId;
|
|
3968
4172
|
var stateWithProgress = updateFileLoadingProgressUpdater(state, {
|
|
3969
4173
|
fileName: fileName,
|
|
3970
4174
|
progress: {
|
|
@@ -3977,8 +4181,11 @@ function loadFileStepSuccessUpdater(state, action) {
|
|
|
3977
4181
|
var stateWithCache = (0, _composerHelpers.pick_)('fileLoading')((0, _composerHelpers.merge_)({
|
|
3978
4182
|
fileCache: fileCache
|
|
3979
4183
|
}))(stateWithProgress);
|
|
3980
|
-
|
|
3981
|
-
|
|
4184
|
+
|
|
4185
|
+
// Decide after the pause, and only for this load. A drop during these
|
|
4186
|
+
// 200ms joins the queue; cancel or a newer load makes this continuation stale.
|
|
4187
|
+
return (0, _tasks.withTask)(stateWithCache, (0, _tasks.DELAY_TASK)(200).map(function () {
|
|
4188
|
+
return (0, _actions.loadNextFile)(loadId);
|
|
3982
4189
|
}));
|
|
3983
4190
|
}
|
|
3984
4191
|
|
|
@@ -3989,11 +4196,22 @@ function loadFileStepSuccessUpdater(state, action) {
|
|
|
3989
4196
|
* @memberof visStateUpdaters
|
|
3990
4197
|
* @public
|
|
3991
4198
|
*/
|
|
3992
|
-
function loadNextFileUpdater(state) {
|
|
3993
|
-
|
|
4199
|
+
function loadNextFileUpdater(state, action) {
|
|
4200
|
+
var loadId = action === null || action === void 0 ? void 0 : action.loadId;
|
|
4201
|
+
if (!state.fileLoading || loadId != null && state.fileLoading.loadId !== loadId) {
|
|
3994
4202
|
return state;
|
|
3995
4203
|
}
|
|
3996
|
-
var
|
|
4204
|
+
var _state$fileLoading = state.fileLoading,
|
|
4205
|
+
filesToLoad = _state$fileLoading.filesToLoad,
|
|
4206
|
+
onFinish = _state$fileLoading.onFinish,
|
|
4207
|
+
fileCache = _state$fileLoading.fileCache,
|
|
4208
|
+
options = _state$fileLoading.options,
|
|
4209
|
+
currentLoadId = _state$fileLoading.loadId;
|
|
4210
|
+
if (!filesToLoad.length) {
|
|
4211
|
+
return (0, _tasks.withTask)(state, (0, _tasks.ACTION_TASK)().map(function () {
|
|
4212
|
+
return finishFileLoad(onFinish, fileCache, options, currentLoadId);
|
|
4213
|
+
}));
|
|
4214
|
+
}
|
|
3997
4215
|
var _filesToLoad = (0, _toArray2["default"])(filesToLoad),
|
|
3998
4216
|
file = _filesToLoad[0],
|
|
3999
4217
|
remainingFilesToLoad = _filesToLoad.slice(1);
|
|
@@ -4011,36 +4229,140 @@ function loadNextFileUpdater(state) {
|
|
|
4011
4229
|
});
|
|
4012
4230
|
var loaders = state.loaders,
|
|
4013
4231
|
loadOptions = state.loadOptions;
|
|
4014
|
-
|
|
4232
|
+
if ((0, _processors.isZipFileName)(file.name)) {
|
|
4233
|
+
return (0, _tasks.withTask)(stateWithProgress, (0, _tasks.EXPAND_ZIP_TASK)({
|
|
4234
|
+
file: file,
|
|
4235
|
+
extensions: datasetExtensionsFromLoaders(loaders)
|
|
4236
|
+
}).bimap(function (expansion) {
|
|
4237
|
+
return (0, _actions.expandZipArchiveSuccess)({
|
|
4238
|
+
loadId: currentLoadId,
|
|
4239
|
+
archiveName: file.name,
|
|
4240
|
+
expansion: expansion
|
|
4241
|
+
});
|
|
4242
|
+
}, function (err) {
|
|
4243
|
+
return (0, _actions.loadFilesErr)(file.name, err, currentLoadId);
|
|
4244
|
+
}));
|
|
4245
|
+
}
|
|
4246
|
+
return (0, _tasks.withTask)(stateWithProgress, makeLoadFileTask(file, nextState.fileLoading && nextState.fileLoading.fileCache, loaders, loadOptions, nextState.fileLoading ? nextState.fileLoading.companionFiles : undefined, options));
|
|
4247
|
+
}
|
|
4248
|
+
function datasetExtensionsFromLoaders() {
|
|
4249
|
+
var loaders = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
4250
|
+
var extensions = [];
|
|
4251
|
+
var seen = new Set();
|
|
4252
|
+
var _iterator4 = _createForOfIteratorHelper(loaders),
|
|
4253
|
+
_step4;
|
|
4254
|
+
try {
|
|
4255
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
4256
|
+
var loader = _step4.value;
|
|
4257
|
+
var _iterator5 = _createForOfIteratorHelper((loader === null || loader === void 0 ? void 0 : loader.extensions) || []),
|
|
4258
|
+
_step5;
|
|
4259
|
+
try {
|
|
4260
|
+
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
|
|
4261
|
+
var extension = _step5.value;
|
|
4262
|
+
var ext = String(extension).replace(/^\./, '').trim().toLowerCase();
|
|
4263
|
+
if (!ext || ext === 'zip' || seen.has(ext)) {
|
|
4264
|
+
continue;
|
|
4265
|
+
}
|
|
4266
|
+
seen.add(ext);
|
|
4267
|
+
extensions.push(ext);
|
|
4268
|
+
}
|
|
4269
|
+
} catch (err) {
|
|
4270
|
+
_iterator5.e(err);
|
|
4271
|
+
} finally {
|
|
4272
|
+
_iterator5.f();
|
|
4273
|
+
}
|
|
4274
|
+
}
|
|
4275
|
+
} catch (err) {
|
|
4276
|
+
_iterator4.e(err);
|
|
4277
|
+
} finally {
|
|
4278
|
+
_iterator4.f();
|
|
4279
|
+
}
|
|
4280
|
+
return extensions;
|
|
4281
|
+
}
|
|
4282
|
+
function companionFilesForArchive(expansion, existing) {
|
|
4283
|
+
var extracted = expansion.kind === 'shapefile' ? [expansion.shapefile].concat((0, _toConsumableArray2["default"])(expansion.companions)) : [].concat((0, _toConsumableArray2["default"])(expansion.datasets), (0, _toConsumableArray2["default"])(expansion.companions));
|
|
4284
|
+
return [].concat((0, _toConsumableArray2["default"])(extracted), (0, _toConsumableArray2["default"])(existing || []));
|
|
4285
|
+
}
|
|
4286
|
+
function withoutFileLoadingProgressEntry(progress, fileName) {
|
|
4287
|
+
if (!progress || !Object.prototype.hasOwnProperty.call(progress, fileName)) {
|
|
4288
|
+
return progress;
|
|
4289
|
+
}
|
|
4290
|
+
var next = _objectSpread({}, progress);
|
|
4291
|
+
delete next[fileName];
|
|
4292
|
+
return next;
|
|
4293
|
+
}
|
|
4294
|
+
|
|
4295
|
+
/**
|
|
4296
|
+
* Apply an unpacked zip. One shapefile keeps the archive name. Any other
|
|
4297
|
+
* mix is queued as one dataset per supported member.
|
|
4298
|
+
*/
|
|
4299
|
+
function expandZipArchiveSuccessUpdater(state, action) {
|
|
4300
|
+
var loading = state.fileLoading;
|
|
4301
|
+
if (!loading || loading.loadId !== action.loadId) {
|
|
4302
|
+
return state;
|
|
4303
|
+
}
|
|
4304
|
+
var archiveName = action.archiveName,
|
|
4305
|
+
expansion = action.expansion;
|
|
4306
|
+
var companionFiles = companionFilesForArchive(expansion, loading.companionFiles);
|
|
4307
|
+
if (expansion.kind === 'shapefile') {
|
|
4308
|
+
var _nextState = (0, _composerHelpers.pick_)('fileLoading')((0, _composerHelpers.merge_)({
|
|
4309
|
+
companionFiles: companionFiles
|
|
4310
|
+
}))(state);
|
|
4311
|
+
var loaders = state.loaders,
|
|
4312
|
+
loadOptions = state.loadOptions;
|
|
4313
|
+
return (0, _tasks.withTask)(_nextState, makeLoadFileTask(expansion.shapefile, _nextState.fileLoading && _nextState.fileLoading.fileCache, loaders, loadOptions, companionFiles, loading.options, archiveName));
|
|
4314
|
+
}
|
|
4315
|
+
var datasets = expansion.datasets;
|
|
4316
|
+
var filesToLoad = [].concat((0, _toConsumableArray2["default"])(datasets), (0, _toConsumableArray2["default"])(Array.from(loading.filesToLoad)));
|
|
4317
|
+
var fileLoadingProgress = datasets.reduce(function (accu, file, index) {
|
|
4318
|
+
return (0, _composerHelpers.merge_)(initialFileLoadingProgress(file, index))(accu);
|
|
4319
|
+
}, withoutFileLoadingProgressEntry(state.fileLoadingProgress, archiveName));
|
|
4320
|
+
var nextState = _objectSpread(_objectSpread({}, state), {}, {
|
|
4321
|
+
fileLoadingProgress: fileLoadingProgress,
|
|
4322
|
+
fileLoading: _objectSpread(_objectSpread({}, loading), {}, {
|
|
4323
|
+
filesToLoad: filesToLoad,
|
|
4324
|
+
companionFiles: companionFiles
|
|
4325
|
+
})
|
|
4326
|
+
});
|
|
4327
|
+
return loadNextFileUpdater(nextState, {
|
|
4328
|
+
loadId: action.loadId
|
|
4329
|
+
});
|
|
4015
4330
|
}
|
|
4016
4331
|
function makeLoadFileTask(file, fileCache) {
|
|
4017
4332
|
var loaders = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
|
|
4018
4333
|
var loadOptions = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
|
|
4019
4334
|
var companionFiles = arguments.length > 4 ? arguments[4] : undefined;
|
|
4020
|
-
|
|
4335
|
+
var addDataOptions = arguments.length > 5 ? arguments[5] : undefined;
|
|
4336
|
+
var fileName = arguments.length > 6 ? arguments[6] : undefined;
|
|
4337
|
+
var displayName = fileName || file.name;
|
|
4338
|
+
return (0, _tasks.LOAD_FILE_TASK)(_objectSpread({
|
|
4021
4339
|
file: file,
|
|
4022
4340
|
fileCache: fileCache,
|
|
4023
4341
|
loaders: loaders,
|
|
4024
4342
|
loadOptions: loadOptions,
|
|
4025
4343
|
companionFiles: companionFiles
|
|
4026
|
-
}
|
|
4344
|
+
}, fileName ? {
|
|
4345
|
+
fileName: fileName
|
|
4346
|
+
} : {})).bimap(
|
|
4027
4347
|
// prettier ignore
|
|
4028
4348
|
// success
|
|
4029
4349
|
function (gen) {
|
|
4030
|
-
return (0, _actions.nextFileBatch)({
|
|
4350
|
+
return (0, _actions.nextFileBatch)(_objectSpread({
|
|
4031
4351
|
gen: gen,
|
|
4032
|
-
fileName:
|
|
4352
|
+
fileName: displayName,
|
|
4033
4353
|
onFinish: function onFinish(result) {
|
|
4034
4354
|
return (0, _actions.processFileContent)({
|
|
4035
4355
|
content: result,
|
|
4036
4356
|
fileCache: fileCache
|
|
4037
4357
|
});
|
|
4038
4358
|
}
|
|
4039
|
-
}
|
|
4359
|
+
}, addDataOptions ? {
|
|
4360
|
+
options: addDataOptions
|
|
4361
|
+
} : {}));
|
|
4040
4362
|
},
|
|
4041
4363
|
// error
|
|
4042
4364
|
function (err) {
|
|
4043
|
-
return (0, _actions.loadFilesErr)(
|
|
4365
|
+
return (0, _actions.loadFilesErr)(displayName, err);
|
|
4044
4366
|
});
|
|
4045
4367
|
}
|
|
4046
4368
|
|
|
@@ -4092,19 +4414,21 @@ function parseProgress() {
|
|
|
4092
4414
|
* @memberof visStateUpdaters
|
|
4093
4415
|
* @public
|
|
4094
4416
|
*/
|
|
4095
|
-
var nextFileBatchUpdater = exports.nextFileBatchUpdater = function nextFileBatchUpdater(state,
|
|
4417
|
+
var nextFileBatchUpdater = exports.nextFileBatchUpdater = function nextFileBatchUpdater(state, _ref42) {
|
|
4096
4418
|
var _accumulated$data;
|
|
4097
|
-
var
|
|
4098
|
-
gen =
|
|
4099
|
-
fileName =
|
|
4100
|
-
progress =
|
|
4101
|
-
accumulated =
|
|
4102
|
-
onFinish =
|
|
4419
|
+
var _ref42$payload = _ref42.payload,
|
|
4420
|
+
gen = _ref42$payload.gen,
|
|
4421
|
+
fileName = _ref42$payload.fileName,
|
|
4422
|
+
progress = _ref42$payload.progress,
|
|
4423
|
+
accumulated = _ref42$payload.accumulated,
|
|
4424
|
+
onFinish = _ref42$payload.onFinish,
|
|
4425
|
+
options = _ref42$payload.options;
|
|
4103
4426
|
var stateWithProgress = updateFileLoadingProgressUpdater(state, {
|
|
4104
4427
|
fileName: fileName,
|
|
4105
4428
|
progress: parseProgress(state.fileLoadingProgress[fileName], progress)
|
|
4106
4429
|
});
|
|
4107
|
-
|
|
4430
|
+
var deferAddToMap = Boolean(options === null || options === void 0 ? void 0 : options.deferAddToMap);
|
|
4431
|
+
return (0, _tasks.withTask)(stateWithProgress, [].concat((0, _toConsumableArray2["default"])((0, _utils.getApplicationConfig)().useArrowProgressiveLoading && !deferAddToMap && fileName.endsWith('arrow') && (accumulated === null || accumulated === void 0 || (_accumulated$data = accumulated.data) === null || _accumulated$data === void 0 ? void 0 : _accumulated$data.length) > 0 ? [
|
|
4108
4432
|
// Skip compaction while batches are still arriving. The completed
|
|
4109
4433
|
// file is compacted once in processFileContent.
|
|
4110
4434
|
(0, _tasks.PROCESS_FILE_DATA)({
|
|
@@ -4113,19 +4437,21 @@ var nextFileBatchUpdater = exports.nextFileBatchUpdater = function nextFileBatch
|
|
|
4113
4437
|
}),
|
|
4114
4438
|
fileCache: []
|
|
4115
4439
|
}).bimap(function (result) {
|
|
4116
|
-
return (0, _actions.loadFilesSuccess)(result);
|
|
4440
|
+
return options ? (0, _actions.loadFilesSuccess)(result, options) : (0, _actions.loadFilesSuccess)(result);
|
|
4117
4441
|
}, function (err) {
|
|
4118
4442
|
return (0, _actions.loadFilesErr)(fileName, err);
|
|
4119
|
-
})] : []), [(0, _tasks.UNWRAP_TASK)(gen.next()).bimap(function (
|
|
4120
|
-
var value =
|
|
4121
|
-
done =
|
|
4122
|
-
return done ? onFinish(accumulated) : (0, _actions.nextFileBatch)({
|
|
4443
|
+
})] : []), [(0, _tasks.UNWRAP_TASK)(gen.next()).bimap(function (_ref43) {
|
|
4444
|
+
var value = _ref43.value,
|
|
4445
|
+
done = _ref43.done;
|
|
4446
|
+
return done ? onFinish(accumulated) : (0, _actions.nextFileBatch)(_objectSpread({
|
|
4123
4447
|
gen: gen,
|
|
4124
4448
|
fileName: fileName,
|
|
4125
4449
|
progress: value.progress,
|
|
4126
4450
|
accumulated: value,
|
|
4127
4451
|
onFinish: onFinish
|
|
4128
|
-
}
|
|
4452
|
+
}, options ? {
|
|
4453
|
+
options: options
|
|
4454
|
+
} : {}));
|
|
4129
4455
|
}, function (err) {
|
|
4130
4456
|
return (0, _actions.loadFilesErr)(fileName, err);
|
|
4131
4457
|
})]));
|
|
@@ -4136,18 +4462,28 @@ var nextFileBatchUpdater = exports.nextFileBatchUpdater = function nextFileBatch
|
|
|
4136
4462
|
* @memberof visStateUpdaters
|
|
4137
4463
|
* @public
|
|
4138
4464
|
*/
|
|
4139
|
-
|
|
4140
|
-
|
|
4141
|
-
|
|
4142
|
-
|
|
4143
|
-
|
|
4144
|
-
|
|
4465
|
+
/**
|
|
4466
|
+
* Drop files waiting on the Add Data button and abort an in-progress modal load.
|
|
4467
|
+
* @memberof visStateUpdaters
|
|
4468
|
+
* @public
|
|
4469
|
+
*/
|
|
4470
|
+
var clearStagedLoadedFilesUpdater = exports.clearStagedLoadedFilesUpdater = function clearStagedLoadedFilesUpdater(state) {
|
|
4471
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
4472
|
+
fileLoading: false,
|
|
4473
|
+
fileLoadingProgress: {},
|
|
4474
|
+
stagedToAdd: null
|
|
4475
|
+
});
|
|
4476
|
+
};
|
|
4477
|
+
var loadFilesErrUpdater = exports.loadFilesErrUpdater = function loadFilesErrUpdater(state, _ref44) {
|
|
4478
|
+
var error = _ref44.error,
|
|
4479
|
+
fileName = _ref44.fileName,
|
|
4480
|
+
errorLoadId = _ref44.loadId;
|
|
4481
|
+
if (!state.fileLoading || errorLoadId != null && state.fileLoading.loadId !== errorLoadId) {
|
|
4145
4482
|
return state;
|
|
4146
4483
|
}
|
|
4147
|
-
|
|
4148
|
-
|
|
4149
|
-
|
|
4150
|
-
fileCache = _state$fileLoading2.fileCache;
|
|
4484
|
+
// update ui with error message
|
|
4485
|
+
_window.console.warn(error);
|
|
4486
|
+
var loadId = state.fileLoading.loadId;
|
|
4151
4487
|
var nextState = updateFileLoadingProgressUpdater(state, {
|
|
4152
4488
|
fileName: fileName,
|
|
4153
4489
|
progress: {
|
|
@@ -4155,9 +4491,9 @@ var loadFilesErrUpdater = exports.loadFilesErrUpdater = function loadFilesErrUpd
|
|
|
4155
4491
|
}
|
|
4156
4492
|
});
|
|
4157
4493
|
|
|
4158
|
-
//
|
|
4159
|
-
return (0, _tasks.withTask)(nextState, (0, _tasks.DELAY_TASK)(200).map(
|
|
4160
|
-
return
|
|
4494
|
+
// Same pause as a successful file. Re-check this load's queue when it ends.
|
|
4495
|
+
return (0, _tasks.withTask)(nextState, (0, _tasks.DELAY_TASK)(200).map(function () {
|
|
4496
|
+
return (0, _actions.loadNextFile)(loadId);
|
|
4161
4497
|
}));
|
|
4162
4498
|
};
|
|
4163
4499
|
|
|
@@ -4166,8 +4502,8 @@ var loadFilesErrUpdater = exports.loadFilesErrUpdater = function loadFilesErrUpd
|
|
|
4166
4502
|
* @memberof visStateUpdaters
|
|
4167
4503
|
* @public
|
|
4168
4504
|
*/
|
|
4169
|
-
var applyCPUFilterUpdater = exports.applyCPUFilterUpdater = function applyCPUFilterUpdater(state,
|
|
4170
|
-
var dataId =
|
|
4505
|
+
var applyCPUFilterUpdater = exports.applyCPUFilterUpdater = function applyCPUFilterUpdater(state, _ref45) {
|
|
4506
|
+
var dataId = _ref45.dataId;
|
|
4171
4507
|
// apply cpuFilter
|
|
4172
4508
|
var dataIds = (0, _commonUtils.toArray)(dataId);
|
|
4173
4509
|
return dataIds.reduce(function (accu, id) {
|
|
@@ -4226,9 +4562,9 @@ function initialFileLoadingProgress(file, index) {
|
|
|
4226
4562
|
error: null
|
|
4227
4563
|
});
|
|
4228
4564
|
}
|
|
4229
|
-
function updateFileLoadingProgressUpdater(state,
|
|
4230
|
-
var fileName =
|
|
4231
|
-
progress =
|
|
4565
|
+
function updateFileLoadingProgressUpdater(state, _ref47) {
|
|
4566
|
+
var fileName = _ref47.fileName,
|
|
4567
|
+
progress = _ref47.progress;
|
|
4232
4568
|
// @ts-expect-error
|
|
4233
4569
|
return (0, _composerHelpers.pick_)('fileLoadingProgress')((0, _composerHelpers.pick_)(fileName)((0, _composerHelpers.merge_)(progress)))(state);
|
|
4234
4570
|
}
|
|
@@ -4320,8 +4656,8 @@ function updateAnimationDomain(state) {
|
|
|
4320
4656
|
* Update the status of the editor
|
|
4321
4657
|
* @memberof visStateUpdaters
|
|
4322
4658
|
*/
|
|
4323
|
-
var setEditorModeUpdater = exports.setEditorModeUpdater = function setEditorModeUpdater(state,
|
|
4324
|
-
var mode =
|
|
4659
|
+
var setEditorModeUpdater = exports.setEditorModeUpdater = function setEditorModeUpdater(state, _ref48) {
|
|
4660
|
+
var mode = _ref48.mode;
|
|
4325
4661
|
var sketchesEnabled = (0, _utils.getApplicationConfig)().enableDrawOnMapSketches;
|
|
4326
4662
|
if (!sketchesEnabled && (mode === _constants.EDITOR_MODES.DRAW_POINT || mode === _constants.EDITOR_MODES.DRAW_LINESTRING)) {
|
|
4327
4663
|
return state;
|
|
@@ -4339,10 +4675,10 @@ var setEditorModeUpdater = exports.setEditorModeUpdater = function setEditorMode
|
|
|
4339
4675
|
* Update editor features
|
|
4340
4676
|
* @memberof visStateUpdaters
|
|
4341
4677
|
*/
|
|
4342
|
-
function setFeaturesUpdater(state,
|
|
4678
|
+
function setFeaturesUpdater(state, _ref49) {
|
|
4343
4679
|
var _lastFeature$properti, _lastFeature$properti2;
|
|
4344
|
-
var
|
|
4345
|
-
features =
|
|
4680
|
+
var _ref49$features = _ref49.features,
|
|
4681
|
+
features = _ref49$features === void 0 ? [] : _ref49$features;
|
|
4346
4682
|
var lastFeature = features.length && features[features.length - 1];
|
|
4347
4683
|
var newState = _objectSpread(_objectSpread({}, state), {}, {
|
|
4348
4684
|
editor: _objectSpread(_objectSpread({}, state.editor), {}, {
|
|
@@ -4415,10 +4751,10 @@ function findEditorFeature(state, feature) {
|
|
|
4415
4751
|
* Set user-facing GeoJSON properties on a sketch or polygon-filter feature.
|
|
4416
4752
|
* @memberof visStateUpdaters
|
|
4417
4753
|
*/
|
|
4418
|
-
function setEditorFeaturePropertiesUpdater(state,
|
|
4754
|
+
function setEditorFeaturePropertiesUpdater(state, _ref50) {
|
|
4419
4755
|
var _state$editor$selecte2;
|
|
4420
|
-
var feature =
|
|
4421
|
-
properties =
|
|
4756
|
+
var feature = _ref50.feature,
|
|
4757
|
+
properties = _ref50.properties;
|
|
4422
4758
|
if (!(0, _utils.getApplicationConfig)().enableDrawOnMapSketches) {
|
|
4423
4759
|
return state;
|
|
4424
4760
|
}
|
|
@@ -4457,9 +4793,9 @@ function setEditorFeaturePropertiesUpdater(state, _ref47) {
|
|
|
4457
4793
|
* Set the current selected feature
|
|
4458
4794
|
* @memberof uiStateUpdaters
|
|
4459
4795
|
*/
|
|
4460
|
-
var setSelectedFeatureUpdater = exports.setSelectedFeatureUpdater = function setSelectedFeatureUpdater(state,
|
|
4461
|
-
var feature =
|
|
4462
|
-
selectionContext =
|
|
4796
|
+
var setSelectedFeatureUpdater = exports.setSelectedFeatureUpdater = function setSelectedFeatureUpdater(state, _ref51) {
|
|
4797
|
+
var feature = _ref51.feature,
|
|
4798
|
+
selectionContext = _ref51.selectionContext;
|
|
4463
4799
|
// add bbox for polygon filter to speed up filtering
|
|
4464
4800
|
var selectedFeature = feature;
|
|
4465
4801
|
if (feature !== null && feature !== void 0 && feature.properties) {
|
|
@@ -4481,8 +4817,8 @@ var setSelectedFeatureUpdater = exports.setSelectedFeatureUpdater = function set
|
|
|
4481
4817
|
* Delete existing feature from filters
|
|
4482
4818
|
* @memberof visStateUpdaters
|
|
4483
4819
|
*/
|
|
4484
|
-
function deleteFeatureUpdater(state,
|
|
4485
|
-
var feature =
|
|
4820
|
+
function deleteFeatureUpdater(state, _ref52) {
|
|
4821
|
+
var feature = _ref52.feature;
|
|
4486
4822
|
if (!feature) {
|
|
4487
4823
|
return state;
|
|
4488
4824
|
}
|
|
@@ -4627,10 +4963,10 @@ function setPolygonFilterAllLayersUpdater(state, payload) {
|
|
|
4627
4963
|
* @memberof visStateUpdaters
|
|
4628
4964
|
* @public
|
|
4629
4965
|
*/
|
|
4630
|
-
function sortTableColumnUpdater(state,
|
|
4631
|
-
var dataId =
|
|
4632
|
-
column =
|
|
4633
|
-
mode =
|
|
4966
|
+
function sortTableColumnUpdater(state, _ref53) {
|
|
4967
|
+
var dataId = _ref53.dataId,
|
|
4968
|
+
column = _ref53.column,
|
|
4969
|
+
mode = _ref53.mode;
|
|
4634
4970
|
var dataset = state.datasets[dataId];
|
|
4635
4971
|
if (!dataset) {
|
|
4636
4972
|
return state;
|
|
@@ -4651,9 +4987,9 @@ function sortTableColumnUpdater(state, _ref50) {
|
|
|
4651
4987
|
* @memberof visStateUpdaters
|
|
4652
4988
|
* @public
|
|
4653
4989
|
*/
|
|
4654
|
-
function pinTableColumnUpdater(state,
|
|
4655
|
-
var dataId =
|
|
4656
|
-
column =
|
|
4990
|
+
function pinTableColumnUpdater(state, _ref54) {
|
|
4991
|
+
var dataId = _ref54.dataId,
|
|
4992
|
+
column = _ref54.column;
|
|
4657
4993
|
var dataset = state.datasets[dataId];
|
|
4658
4994
|
if (!dataset) {
|
|
4659
4995
|
return state;
|
|
@@ -4667,9 +5003,9 @@ function pinTableColumnUpdater(state, _ref51) {
|
|
|
4667
5003
|
* @memberof visStateUpdaters
|
|
4668
5004
|
* @public
|
|
4669
5005
|
*/
|
|
4670
|
-
function copyTableColumnUpdater(state,
|
|
4671
|
-
var dataId =
|
|
4672
|
-
column =
|
|
5006
|
+
function copyTableColumnUpdater(state, _ref55) {
|
|
5007
|
+
var dataId = _ref55.dataId,
|
|
5008
|
+
column = _ref55.column;
|
|
4673
5009
|
var dataset = state.datasets[dataId];
|
|
4674
5010
|
if (!dataset) {
|
|
4675
5011
|
return state;
|
|
@@ -4693,9 +5029,9 @@ function copyTableColumnUpdater(state, _ref52) {
|
|
|
4693
5029
|
* @memberof visStateUpdaters
|
|
4694
5030
|
* @public
|
|
4695
5031
|
*/
|
|
4696
|
-
function setColumnDisplayFormatUpdater(state,
|
|
4697
|
-
var dataId =
|
|
4698
|
-
formats =
|
|
5032
|
+
function setColumnDisplayFormatUpdater(state, _ref56) {
|
|
5033
|
+
var dataId = _ref56.dataId,
|
|
5034
|
+
formats = _ref56.formats;
|
|
4699
5035
|
var dataset = state.datasets[dataId];
|
|
4700
5036
|
if (!dataset) {
|
|
4701
5037
|
return state;
|
|
@@ -4746,12 +5082,12 @@ function requestDatasetColumnStatistics(_x4) {
|
|
|
4746
5082
|
return _requestDatasetColumnStatistics.apply(this, arguments);
|
|
4747
5083
|
}
|
|
4748
5084
|
function _requestDatasetColumnStatistics() {
|
|
4749
|
-
_requestDatasetColumnStatistics = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4(
|
|
5085
|
+
_requestDatasetColumnStatistics = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4(_ref57) {
|
|
4750
5086
|
var dataset, field, filterProps, mappedValue, values, result;
|
|
4751
5087
|
return _regenerator["default"].wrap(function _callee4$(_context4) {
|
|
4752
5088
|
while (1) switch (_context4.prev = _context4.next) {
|
|
4753
5089
|
case 0:
|
|
4754
|
-
dataset =
|
|
5090
|
+
dataset = _ref57.dataset, field = _ref57.field;
|
|
4755
5091
|
_context4.next = 3;
|
|
4756
5092
|
return yieldForPaint();
|
|
4757
5093
|
case 3:
|
|
@@ -4784,9 +5120,9 @@ var LOAD_COLUMN_STATS_TASK = _tasks["default"].fromPromise(requestDatasetColumnS
|
|
|
4784
5120
|
* @memberof visStateUpdaters
|
|
4785
5121
|
* @public
|
|
4786
5122
|
*/
|
|
4787
|
-
function loadColumnStatsUpdater(state,
|
|
4788
|
-
var dataId =
|
|
4789
|
-
fieldName =
|
|
5123
|
+
function loadColumnStatsUpdater(state, _ref58) {
|
|
5124
|
+
var dataId = _ref58.dataId,
|
|
5125
|
+
fieldName = _ref58.fieldName;
|
|
4790
5126
|
var fieldNamesToLoad = (0, _commonUtils.toArray)(fieldName);
|
|
4791
5127
|
var dataset = state.datasets[dataId];
|
|
4792
5128
|
var fieldsToLoad = dataset === null || dataset === void 0 ? void 0 : dataset.fields.filter(function (f) {
|
|
@@ -4807,9 +5143,9 @@ function loadColumnStatsUpdater(state, _ref55) {
|
|
|
4807
5143
|
return LOAD_COLUMN_STATS_TASK({
|
|
4808
5144
|
dataset: newDataset,
|
|
4809
5145
|
field: f
|
|
4810
|
-
}).bimap(function (
|
|
4811
|
-
var result =
|
|
4812
|
-
filterProps =
|
|
5146
|
+
}).bimap(function (_ref59) {
|
|
5147
|
+
var result = _ref59.result,
|
|
5148
|
+
filterProps = _ref59.filterProps;
|
|
4813
5149
|
return (0, _actions.loadColumnStatsSuccess)(newDataset.id, f.name, result, filterProps);
|
|
4814
5150
|
}, function (error) {
|
|
4815
5151
|
return (0, _actions.loadColumnStatsError)(newDataset.id, f.name, error);
|
|
@@ -4824,11 +5160,11 @@ function loadColumnStatsUpdater(state, _ref55) {
|
|
|
4824
5160
|
* @memberof visStateUpdaters
|
|
4825
5161
|
* @public
|
|
4826
5162
|
*/
|
|
4827
|
-
function loadColumnStatsSuccessUpdater(state,
|
|
4828
|
-
var result =
|
|
4829
|
-
filterProps =
|
|
4830
|
-
dataId =
|
|
4831
|
-
fieldName =
|
|
5163
|
+
function loadColumnStatsSuccessUpdater(state, _ref60) {
|
|
5164
|
+
var result = _ref60.result,
|
|
5165
|
+
filterProps = _ref60.filterProps,
|
|
5166
|
+
dataId = _ref60.dataId,
|
|
5167
|
+
fieldName = _ref60.fieldName;
|
|
4832
5168
|
var dataset = state.datasets[dataId];
|
|
4833
5169
|
var field = ((dataset === null || dataset === void 0 ? void 0 : dataset.fields) || []).find(function (f) {
|
|
4834
5170
|
return f.name === fieldName;
|
|
@@ -4856,10 +5192,10 @@ function loadColumnStatsSuccessUpdater(state, _ref57) {
|
|
|
4856
5192
|
* @memberof visStateUpdaters
|
|
4857
5193
|
* @public
|
|
4858
5194
|
*/
|
|
4859
|
-
function loadColumnStatsErrorUpdater(state,
|
|
4860
|
-
var error =
|
|
4861
|
-
dataId =
|
|
4862
|
-
fieldName =
|
|
5195
|
+
function loadColumnStatsErrorUpdater(state, _ref61) {
|
|
5196
|
+
var error = _ref61.error,
|
|
5197
|
+
dataId = _ref61.dataId,
|
|
5198
|
+
fieldName = _ref61.fieldName;
|
|
4863
5199
|
_window.console.error(error);
|
|
4864
5200
|
var dataset = state.datasets[dataId];
|
|
4865
5201
|
var field = ((dataset === null || dataset === void 0 ? void 0 : dataset.fields) || []).find(function (f) {
|
|
@@ -4943,10 +5279,11 @@ _action) {
|
|
|
4943
5279
|
|
|
4944
5280
|
/**
|
|
4945
5281
|
* Copy in-memory rows (or loaded vector-tile features) inside the selected
|
|
4946
|
-
* Draw on Map polygon into a new dataset.
|
|
5282
|
+
* Draw on Map polygon into a new dataset. Raster tiles download a PNG clip and a
|
|
5283
|
+
* GeoJSON sidecar (bbox rectangle + stats) instead of creating a dataset.
|
|
4947
5284
|
*/
|
|
4948
|
-
function extractDataFromFeatureUpdater(state,
|
|
4949
|
-
var layerId =
|
|
5285
|
+
function extractDataFromFeatureUpdater(state, _ref62) {
|
|
5286
|
+
var layerId = _ref62.layerId;
|
|
4950
5287
|
var feature = state.editor.selectedFeature;
|
|
4951
5288
|
var layer = state.layers.find(function (l) {
|
|
4952
5289
|
return l.id === layerId;
|
|
@@ -4956,10 +5293,11 @@ function extractDataFromFeatureUpdater(state, _ref59) {
|
|
|
4956
5293
|
if (!layer || !dataset || !dataId) {
|
|
4957
5294
|
return state;
|
|
4958
5295
|
}
|
|
5296
|
+
var isTiledExtract = (0, _utils.isVectorTileExtractLayer)(layer) || (0, _utils.isRasterTileExtractLayer)(layer);
|
|
4959
5297
|
|
|
4960
5298
|
// GPU range/time filters are not reflected in filteredIndex; evaluate them on CPU
|
|
4961
5299
|
// the same way export data does, then clip the result to the drawing.
|
|
4962
|
-
if (!
|
|
5300
|
+
if (!isTiledExtract) {
|
|
4963
5301
|
state = (0, _utils.filterDatasetCPU)(state, dataId);
|
|
4964
5302
|
dataset = state.datasets[dataId];
|
|
4965
5303
|
if (!dataset) {
|
|
@@ -4988,11 +5326,32 @@ function extractDataFromFeatureUpdater(state, _ref59) {
|
|
|
4988
5326
|
if (!extracted.rowCount) {
|
|
4989
5327
|
return (0, _tasks.withTask)(state, ACTION_TASK_ADD_NOTIFICATION().map(function () {
|
|
4990
5328
|
return (0, _actions.addNotification)((0, _utils.errorNotification)({
|
|
4991
|
-
message: (0, _utils.isVectorTileExtractLayer)(layer) ? 'No loaded vector tile features found inside the selected drawing' : 'No rows found inside the selected drawing',
|
|
5329
|
+
message: (0, _utils.isRasterTileExtractLayer)(layer) ? 'No loaded raster pixels found inside the selected drawing' : (0, _utils.isVectorTileExtractLayer)(layer) ? 'No loaded vector tile features found inside the selected drawing' : 'No rows found inside the selected drawing',
|
|
4992
5330
|
id: 'extract-data-from-feature-empty'
|
|
4993
5331
|
}));
|
|
4994
5332
|
}));
|
|
4995
5333
|
}
|
|
5334
|
+
if ((0, _utils.isRasterTileExtractLayer)(layer)) {
|
|
5335
|
+
var polygon = feature;
|
|
5336
|
+
var download = typeof layer.downloadClip === 'function' ? Promise.resolve(layer.downloadClip(polygon)) : Promise.resolve({
|
|
5337
|
+
png: false,
|
|
5338
|
+
json: false
|
|
5339
|
+
});
|
|
5340
|
+
return (0, _tasks.withTask)(state, (0, _tasks.UNWRAP_TASK)(download).bimap(function (result) {
|
|
5341
|
+
return (0, _actions.addNotification)(result !== null && result !== void 0 && result.png ? (0, _utils.successNotification)({
|
|
5342
|
+
message: 'Downloaded raster clip image and stats file',
|
|
5343
|
+
id: 'extract-raster-clip'
|
|
5344
|
+
}) : (0, _utils.errorNotification)({
|
|
5345
|
+
message: 'Failed to download raster clip image',
|
|
5346
|
+
id: 'extract-raster-clip'
|
|
5347
|
+
}));
|
|
5348
|
+
}, function (err) {
|
|
5349
|
+
return (0, _actions.addNotification)((0, _utils.errorNotification)({
|
|
5350
|
+
message: "Failed to download raster clip: ".concat(err instanceof Error ? err.message : String(err)),
|
|
5351
|
+
id: 'extract-raster-clip'
|
|
5352
|
+
}));
|
|
5353
|
+
}));
|
|
5354
|
+
}
|
|
4996
5355
|
var data;
|
|
4997
5356
|
try {
|
|
4998
5357
|
data = extracted.kind === 'geojson' ? (0, _processors.processGeojson)({
|
|
@@ -5026,9 +5385,9 @@ function extractDataFromFeatureUpdater(state, _ref59) {
|
|
|
5026
5385
|
}
|
|
5027
5386
|
});
|
|
5028
5387
|
}
|
|
5029
|
-
function setFilterAnimationTimeConfigUpdater(state,
|
|
5030
|
-
var idx =
|
|
5031
|
-
config =
|
|
5388
|
+
function setFilterAnimationTimeConfigUpdater(state, _ref63) {
|
|
5389
|
+
var idx = _ref63.idx,
|
|
5390
|
+
config = _ref63.config;
|
|
5032
5391
|
var oldFilter = state.filters[idx];
|
|
5033
5392
|
if (!oldFilter) {
|
|
5034
5393
|
_window.console.error("filters.".concat(idx, " is undefined"));
|
|
@@ -5058,8 +5417,8 @@ function checkTimeConfigArgs(config) {
|
|
|
5058
5417
|
/**
|
|
5059
5418
|
* Update editor
|
|
5060
5419
|
*/
|
|
5061
|
-
function setLayerAnimationTimeConfigUpdater(state,
|
|
5062
|
-
var config =
|
|
5420
|
+
function setLayerAnimationTimeConfigUpdater(state, _ref64) {
|
|
5421
|
+
var config = _ref64.config;
|
|
5063
5422
|
if (!config) {
|
|
5064
5423
|
return state;
|
|
5065
5424
|
}
|
|
@@ -5257,8 +5616,8 @@ function setTimeFilterTimelineModeUpdater(state, action) {
|
|
|
5257
5616
|
* @returns nextState
|
|
5258
5617
|
* @public
|
|
5259
5618
|
*/
|
|
5260
|
-
var setLoadingIndicatorUpdater = exports.setLoadingIndicatorUpdater = function setLoadingIndicatorUpdater(state,
|
|
5261
|
-
var change =
|
|
5619
|
+
var setLoadingIndicatorUpdater = exports.setLoadingIndicatorUpdater = function setLoadingIndicatorUpdater(state, _ref65) {
|
|
5620
|
+
var change = _ref65.payload.change;
|
|
5262
5621
|
var loadingIndicatorValue = state.loadingIndicatorValue;
|
|
5263
5622
|
if (!loadingIndicatorValue) {
|
|
5264
5623
|
loadingIndicatorValue = 0;
|
|
@@ -5266,8 +5625,9 @@ var setLoadingIndicatorUpdater = exports.setLoadingIndicatorUpdater = function s
|
|
|
5266
5625
|
var nextValue = Math.max(loadingIndicatorValue + change, 0);
|
|
5267
5626
|
return _objectSpread(_objectSpread({}, state), {}, {
|
|
5268
5627
|
loadingIndicatorValue: nextValue
|
|
5269
|
-
}, nextValue === 0 && Object.keys(state.loadingProgress || {}).length ? {
|
|
5270
|
-
loadingProgress: {}
|
|
5628
|
+
}, nextValue === 0 && (Object.keys(state.loadingProgress || {}).length || Object.keys(state.loadingProcessing || {}).length) ? {
|
|
5629
|
+
loadingProgress: {},
|
|
5630
|
+
loadingProcessing: {}
|
|
5271
5631
|
} : {});
|
|
5272
5632
|
};
|
|
5273
5633
|
|
|
@@ -5276,20 +5636,24 @@ var setLoadingIndicatorUpdater = exports.setLoadingIndicatorUpdater = function s
|
|
|
5276
5636
|
* @memberof visStateUpdaters
|
|
5277
5637
|
* @public
|
|
5278
5638
|
*/
|
|
5279
|
-
function setLoadingProgressUpdater(state,
|
|
5280
|
-
var _state$loadingProgres;
|
|
5281
|
-
var id =
|
|
5282
|
-
percent =
|
|
5639
|
+
function setLoadingProgressUpdater(state, _ref66) {
|
|
5640
|
+
var _state$loadingProgres, _state$loadingProcess;
|
|
5641
|
+
var id = _ref66.id,
|
|
5642
|
+
percent = _ref66.percent,
|
|
5643
|
+
phase = _ref66.phase;
|
|
5283
5644
|
if ((state.loadingIndicatorValue || 0) <= 0) {
|
|
5284
5645
|
return state;
|
|
5285
5646
|
}
|
|
5286
5647
|
var nextPercent = Number.isFinite(percent) ? Math.max(0, Math.min(100, Math.round(percent))) : 0;
|
|
5287
|
-
|
|
5648
|
+
var processing = phase === 'processing';
|
|
5649
|
+
if (((_state$loadingProgres = state.loadingProgress) === null || _state$loadingProgres === void 0 ? void 0 : _state$loadingProgres[id]) === nextPercent && Boolean((_state$loadingProcess = state.loadingProcessing) === null || _state$loadingProcess === void 0 ? void 0 : _state$loadingProcess[id]) === processing) {
|
|
5288
5650
|
return state;
|
|
5289
5651
|
}
|
|
5290
5652
|
return _objectSpread(_objectSpread({}, state), {}, {
|
|
5291
5653
|
loadingProgress: _objectSpread(_objectSpread({}, state.loadingProgress), {}, (0, _defineProperty2["default"])({}, id, nextPercent))
|
|
5292
|
-
}
|
|
5654
|
+
}, processing ? {
|
|
5655
|
+
loadingProcessing: _objectSpread(_objectSpread({}, state.loadingProcessing), {}, (0, _defineProperty2["default"])({}, id, true))
|
|
5656
|
+
} : {});
|
|
5293
5657
|
}
|
|
5294
5658
|
function adjustAnimationConfigWithFilter(state, filterIdx) {
|
|
5295
5659
|
var filter = state.filters[filterIdx];
|
|
@@ -5393,22 +5757,19 @@ function defaultReplaceParentDatasetIds(value, dataId, dataIdToReplace) {
|
|
|
5393
5757
|
function findChildDatasetIds(value) {
|
|
5394
5758
|
var _value$newDataset;
|
|
5395
5759
|
if (Array.isArray(value)) {
|
|
5396
|
-
// for layers, filters, call defaultReplaceParentDatasetIds on each item in array
|
|
5397
5760
|
var childDataIds = value.map(findChildDatasetIds).filter(function (d) {
|
|
5398
5761
|
return d;
|
|
5399
5762
|
});
|
|
5400
5763
|
return childDataIds.length ? childDataIds : null;
|
|
5401
5764
|
}
|
|
5402
|
-
|
|
5403
|
-
// child data id usually stores in the derived dataset info
|
|
5404
5765
|
return (value === null || value === void 0 || (_value$newDataset = value.newDataset) === null || _value$newDataset === void 0 ? void 0 : _value$newDataset.info.id) || null;
|
|
5405
5766
|
}
|
|
5406
5767
|
|
|
5407
5768
|
// moved unmerged layers, filters, interactions
|
|
5408
|
-
function moveValueToBeMerged(state, propValues,
|
|
5409
|
-
var prop =
|
|
5410
|
-
toMergeProp =
|
|
5411
|
-
saveUnmerged =
|
|
5769
|
+
function moveValueToBeMerged(state, propValues, _ref68) {
|
|
5770
|
+
var prop = _ref68.prop,
|
|
5771
|
+
toMergeProp = _ref68.toMergeProp,
|
|
5772
|
+
saveUnmerged = _ref68.saveUnmerged;
|
|
5412
5773
|
// remove prop value from state
|
|
5413
5774
|
// TODO: should we add remove updater to merger as well?
|
|
5414
5775
|
if (!propValues) {
|
|
@@ -5437,23 +5798,33 @@ function moveValueToBeMerged(state, propValues, _ref65) {
|
|
|
5437
5798
|
return _objectSpread(_objectSpread({}, stateRemoved), toBeMerged);
|
|
5438
5799
|
}
|
|
5439
5800
|
function replaceDatasetAndDeps(state, dataId, dataIdToUse) {
|
|
5801
|
+
var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
|
|
5802
|
+
// The same id means the new table occupies the old slot, so the previous rows have to go.
|
|
5803
|
+
var deleteOriginalDataset = options.deleteOriginalDataset !== false || dataId === dataIdToUse;
|
|
5440
5804
|
return (0, _composerHelpers.compose_)([(0, _composerHelpers.apply_)(replaceDatasetDepsInState, {
|
|
5441
5805
|
dataId: dataId,
|
|
5442
5806
|
dataIdToUse: dataIdToUse
|
|
5443
|
-
}), (0, _composerHelpers.apply_)(removeDatasetUpdater, {
|
|
5807
|
+
}), (0, _composerHelpers.if_)(deleteOriginalDataset, (0, _composerHelpers.apply_)(removeDatasetUpdater, {
|
|
5444
5808
|
dataId: dataId
|
|
5445
|
-
})])(state);
|
|
5809
|
+
}))])(state);
|
|
5446
5810
|
}
|
|
5447
5811
|
function prepareStateForDatasetReplace(state, dataId, dataIdToUse) {
|
|
5448
5812
|
var _nextState$layerToBeM;
|
|
5813
|
+
var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
|
|
5449
5814
|
var serializedState = (0, _visStateMerger.serializeVisState)(state, state.schema);
|
|
5450
|
-
var
|
|
5815
|
+
var deleteOriginalDataset = options.deleteOriginalDataset !== false || dataId === dataIdToUse;
|
|
5816
|
+
var nextState = replaceDatasetAndDeps(state, dataId, dataIdToUse, {
|
|
5817
|
+
deleteOriginalDataset: deleteOriginalDataset
|
|
5818
|
+
});
|
|
5451
5819
|
// make a copy of layerOrder, because layer id will be removed from it by calling removeLayerUpdater
|
|
5452
5820
|
var preserveLayerOrder = (0, _toConsumableArray2["default"])(state.layerOrder);
|
|
5453
5821
|
|
|
5454
|
-
//
|
|
5455
|
-
nextState.preserveDatasetOrder = Object.keys(state.datasets).
|
|
5456
|
-
|
|
5822
|
+
// When the original table stays, the replacement takes its place and the original follows it.
|
|
5823
|
+
nextState.preserveDatasetOrder = Object.keys(state.datasets).flatMap(function (d) {
|
|
5824
|
+
if (d !== dataId) {
|
|
5825
|
+
return [d];
|
|
5826
|
+
}
|
|
5827
|
+
return deleteOriginalDataset ? [dataIdToUse] : [dataIdToUse, d];
|
|
5457
5828
|
});
|
|
5458
5829
|
|
|
5459
5830
|
// preserveLayerOrder
|
|
@@ -5500,17 +5871,17 @@ function preservedOrderWithParked() {
|
|
|
5500
5871
|
});
|
|
5501
5872
|
return [].concat((0, _toConsumableArray2["default"])(ordered), (0, _toConsumableArray2["default"])(rest));
|
|
5502
5873
|
}
|
|
5503
|
-
function replaceDatasetDepsInState(state,
|
|
5504
|
-
var dataId =
|
|
5505
|
-
dataIdToUse =
|
|
5874
|
+
function replaceDatasetDepsInState(state, _ref69) {
|
|
5875
|
+
var dataId = _ref69.dataId,
|
|
5876
|
+
dataIdToUse = _ref69.dataIdToUse;
|
|
5506
5877
|
var serializedState = (0, _visStateMerger.serializeVisState)(state, state.schema);
|
|
5507
|
-
var nextState = state.mergers.reduce(function (accuState,
|
|
5508
|
-
var prop =
|
|
5509
|
-
toMergeProp =
|
|
5510
|
-
replaceParentDatasetIds =
|
|
5511
|
-
getChildDatasetIds =
|
|
5512
|
-
saveUnmerged =
|
|
5513
|
-
preserveOrder =
|
|
5878
|
+
var nextState = state.mergers.reduce(function (accuState, _ref70) {
|
|
5879
|
+
var prop = _ref70.prop,
|
|
5880
|
+
toMergeProp = _ref70.toMergeProp,
|
|
5881
|
+
replaceParentDatasetIds = _ref70.replaceParentDatasetIds,
|
|
5882
|
+
getChildDatasetIds = _ref70.getChildDatasetIds,
|
|
5883
|
+
saveUnmerged = _ref70.saveUnmerged,
|
|
5884
|
+
preserveOrder = _ref70.preserveOrder;
|
|
5514
5885
|
// get dataset ids that are depends on this dataset
|
|
5515
5886
|
var props = (0, _commonUtils.toArray)(prop);
|
|
5516
5887
|
var toMergeProps = (0, _commonUtils.toArray)(toMergeProp);
|
|
@@ -5550,11 +5921,11 @@ function replaceDatasetDepsInState(state, _ref66) {
|
|
|
5550
5921
|
}, state);
|
|
5551
5922
|
return nextState;
|
|
5552
5923
|
}
|
|
5553
|
-
function replacePropValueInState(state, replacedItem,
|
|
5554
|
-
var prop =
|
|
5555
|
-
toMergeProp =
|
|
5556
|
-
getChildDatasetIds =
|
|
5557
|
-
saveUnmerged =
|
|
5924
|
+
function replacePropValueInState(state, replacedItem, _ref71) {
|
|
5925
|
+
var prop = _ref71.prop,
|
|
5926
|
+
toMergeProp = _ref71.toMergeProp,
|
|
5927
|
+
getChildDatasetIds = _ref71.getChildDatasetIds,
|
|
5928
|
+
saveUnmerged = _ref71.saveUnmerged;
|
|
5558
5929
|
// prop is depends on the dataset to be replaced
|
|
5559
5930
|
// remove prop from state, and move it to toBeMerged
|
|
5560
5931
|
var nextState = moveValueToBeMerged(state, replacedItem, {
|
|
@@ -5572,4 +5943,50 @@ function replacePropValueInState(state, replacedItem, _ref68) {
|
|
|
5572
5943
|
}
|
|
5573
5944
|
return nextState;
|
|
5574
5945
|
}
|
|
5575
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYmJveCIsInJlcXVpcmUiLCJfY29weVRvQ2xpcGJvYXJkIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9kZWVwbWVyZ2UiLCJfd2luZG93IiwiX2Nsb25lRGVlcCIsIl9nZXQiLCJfaXNFcXVhbCIsIl9waWNrIiwiX3VuaXEiLCJfeG9yIiwiX3Rhc2tzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfYWN0aW9ucyIsIl91dGlscyIsIl9jb21tb25VdGlscyIsIl9jb25zdGFudHMiLCJfbGF5ZXJzIiwiX2NvbXBvc2VySGVscGVycyIsIl9tZXJnZXJIYW5kbGVyIiwiX3Zpc1N0YXRlTWVyZ2VyIiwiX3NjaGVtYXMiLCJfcHJvY2Vzc29ycyIsIl90YWJsZSIsIl9pbnRlcmFjdGlvblV0aWxzIiwiX2xheWVyVXRpbHMiLCJfZWZmZWN0cyIsIl9kYXRhVXRpbHMiLCJfZXhjbHVkZWQiLCJfZXhjbHVkZWQyIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiX3R5cGVvZjMiLCJoYXMiLCJnZXQiLCJzZXQiLCJfdCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiX3RvUHJvcGVydHlLZXkiLCJfdG9QcmltaXRpdmUiLCJTeW1ib2wiLCJ0b1ByaW1pdGl2ZSIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJsZW5ndGgiLCJfbiIsIkYiLCJzIiwiZG9uZSIsInZhbHVlIiwiYSIsInUiLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRpc2FibGVTdGFja0NhcHR1cmluZyIsInZpc1N0YXRlVXBkYXRlcnMiLCJkZWZhdWx0SW50ZXJhY3Rpb25Db25maWciLCJleHBvcnRzIiwidG9vbHRpcCIsImlkIiwibGFiZWwiLCJlbmFibGVkIiwiY29uZmlnIiwiZmllbGRzVG9TaG93IiwiY29tcGFyZU1vZGUiLCJjb21wYXJlVHlwZSIsIkNPTVBBUkVfVFlQRVMiLCJBQlNPTFVURSIsImdlb2NvZGVyIiwicG9zaXRpb24iLCJsaW1pdFNlYXJjaCIsImJydXNoIiwic2l6ZSIsImNvb3JkaW5hdGUiLCJERUZBVUxUX0FOSU1BVElPTl9DT05GSUciLCJkb21haW4iLCJjdXJyZW50VGltZSIsInNwZWVkIiwiaXNBbmltYXRpbmciLCJ0aW1lU3RlcHMiLCJ0aW1lRm9ybWF0IiwidGltZXpvbmUiLCJkZWZhdWx0VGltZUZvcm1hdCIsImhpZGVDb250cm9sIiwiZHVyYXRpb24iLCJERUZBVUxUX0VESVRPUiIsIm1vZGUiLCJFRElUT1JfTU9ERVMiLCJEUkFXX1BPTFlHT04iLCJmZWF0dXJlcyIsInNlbGVjdGVkRmVhdHVyZSIsInZpc2libGUiLCJJTklUSUFMX1ZJU19TVEFURSIsIm1hcEluZm8iLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwibGF5ZXJzIiwibGF5ZXJEYXRhIiwibGF5ZXJUb0JlTWVyZ2VkIiwibGF5ZXJPcmRlciIsImxheWVyT3JkZXJUb0JlTWVyZ2VkIiwiZmlsdGVycyIsImZpbHRlclRvQmVNZXJnZWQiLCJkYXRhc2V0cyIsImVkaXRpbmdEYXRhc2V0IiwidW5kZWZpbmVkIiwiZWZmZWN0cyIsImVmZmVjdE9yZGVyIiwiY2hhcnRzIiwiY2hhcnRzVG9CZU1lcmdlZCIsImFubm90YXRpb25zIiwiYW5ub3RhdGlvbnNUb0JlTWVyZ2VkIiwic2VsZWN0ZWRBbm5vdGF0aW9uSWQiLCJpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dCIsImludGVyYWN0aW9uQ29uZmlnIiwiaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkIiwibGF5ZXJCbGVuZGluZyIsIm92ZXJsYXlCbGVuZGluZyIsImhvdmVySW5mbyIsImNsaWNrZWQiLCJtb3VzZVBvcyIsIm1heERlZmF1bHRUb29sdGlwcyIsIk1BWF9ERUZBVUxUX1RPT0xUSVBTIiwic3BsaXRNYXBzIiwic3BsaXRNYXBzVG9CZU1lcmdlZCIsImlzTWVyZ2luZ0RhdGFzZXRzIiwibGF5ZXJDbGFzc2VzIiwiTGF5ZXJDbGFzc2VzIiwiYW5pbWF0aW9uQ29uZmlnIiwiZWRpdG9yIiwiZmlsZUxvYWRpbmciLCJmaWxlTG9hZGluZ1Byb2dyZXNzIiwibG9hZGluZ0luZGljYXRvclZhbHVlIiwibG9hZGluZ1Byb2dyZXNzIiwibG9hZGVycyIsImxvYWRPcHRpb25zIiwibWVyZ2VycyIsIlZJU19TVEFURV9NRVJHRVJTIiwic2NoZW1hIiwiS2VwbGVyR0xTY2hlbWEiLCJBQ1RJT05fVEFTS19GSVRfQk9VTkRTIiwiVGFzayIsImZyb21DYWxsYmFjayIsIl8iLCJjYiIsIkFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04iLCJ1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEiLCJzdGF0ZSIsIl9yZWYiLCJsYXllciIsImlkeCIsIm1hcCIsImx5ciIsImQiLCJ1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlIiwibmV3U3RhdGUiLCJpc1Zpc2libGUiLCJhZGROZXdMYXllcnNUb1NwbGl0TWFwIiwicmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzIiwiYW5pbWF0aW9uIiwidXBkYXRlQW5pbWF0aW9uRG9tYWluIiwicGlja0NoYW5nZWRQcm9wcyIsInByZXYiLCJjaGFuZ2VkUHJvcHMiLCJwaWNrUHJvcHNPZiIsIm9iaiIsImtleSIsInByb3RvdHlwZSIsImlzRXF1YWwiLCJWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTIiwiYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIiLCJhY3Rpb24iLCJfc2VyaWFsaXplTGF5ZXIiLCJvbGRMYXllcklkIiwibmV3TGF5ZXJDb25maWciLCJsYXllckluZGV4IiwibmV3UGFyc2VkTGF5ZXIiLCJpc1NhdmVkTGF5ZXJDb25maWdWMSIsInBhcnNlTGF5ZXJDb25maWciLCJvbGRMYXllciIsImZpbmQiLCJsIiwiZGF0YXNldCIsImRhdGFJZCIsIm5ld0xheWVyIiwidmFsaWRhdGVMYXllcldpdGhEYXRhIiwibmV4dFN0YXRlIiwidHlwZSIsIm9sZExheWVySW5kZXgiLCJmaW5kSW5kZXgiLCJsYXllclR5cGVDaGFuZ2VVcGRhdGVyIiwibGF5ZXJUeXBlQ2hhbmdlIiwibmV3TGF5ZXJJZCIsImFwcGx5TGF5ZXJDb25maWciLCJzZXJpYWxpemVkT2xkTGF5ZXIiLCJzZXJpYWxpemVMYXllciIsInNlcmlhbGl6ZWROZXdMYXllciIsImNoYW5nZWQiLCJ2aXNDb25maWciLCJsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsInZpc3VhbENoYW5uZWxzIiwiY2hhbm5lbE5hbWUiLCJjaGFubmVsIiwiY2hhbm5lbFByb3BOYW1lcyIsInByb3AiLCJzb21lIiwibGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlciIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsInBpY2siLCJfaXRlcmF0b3IiLCJfc3RlcCIsImVyciIsImxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlciIsImxheWVyQ29uZmlnQ2hhbmdlIiwidXBkYXRlbGF5ZXJWaXNpYmlsdHkiLCJmaWx0ZXJJbmRleCIsImZpbHRlclN5bmNlZFdpdGhUaW1lbGluZSIsImlzTGF5ZXJBbmltYXRhYmxlIiwic3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZVVwZGF0ZXIiLCJlbmFibGUiLCJnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyIsInByb3BzIiwibmV3Q29uZmlnIiwiX2FjdGlvbiRuZXdDb25maWciLCJyZXN0Q29uZmlnIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzMiIsInN0YXRlV2l0aERhdGFJZCIsImxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlciIsIm5leHRMYXllciIsInVwZGF0ZUxheWVyQ29uZmlnIiwic2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhIiwib2xkTGF5ZXJEYXRhIiwidXBkYXRlTGF5ZXJEYXRhUmVzdWx0IiwiY2FsY3VsYXRlTGF5ZXJEYXRhIiwibGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyIiwiX2NhbGN1bGF0ZUxheWVyRGF0YSIsImxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXIiLCJsYXllcklkIiwic3BsaXRNYXBJZCIsIm1hcEluZGV4Iiwic20iLCJ0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIiLCJ0b2dnbGVMYXllckZvck1hcCIsInN5bmNlZFdpdGhMYXllclRpbWVsaW5lIiwibGF5ZXJTZXRJc1ZhbGlkVXBkYXRlciIsImlzVmFsaWQiLCJsYXllclRvVXBkYXRlIiwibmV3RGF0YSIsIl9jYWxjdWxhdGVMYXllckRhdGEyIiwiYWRkT3JSZW1vdmVUZXh0TGFiZWxzIiwibmV3RmllbGRzIiwidGV4dExhYmVsIiwiZGVmYXVsdFRleHRMYWJlbCIsIkRFRkFVTFRfVEVYVF9MQUJFTCIsIm5ld1RleHRMYWJlbCIsImN1cnJlbnRGaWVsZHMiLCJ0bCIsImZpZWxkIiwiYWRkRmllbGRzIiwiaW5jbHVkZXMiLCJkZWxldGVGaWVsZHMiLCJmZCIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJhZiIsIl90ZXh0TGFiZWwkZmluZCRjb2xsaSIsIl90ZXh0TGFiZWwkZmluZCIsImNvbGxpc2lvbkVuYWJsZWQiLCJCb29sZWFuIiwidXBkYXRlVGV4dExhYmVsUHJvcEFuZFZhbHVlIiwic3BsaWNlIiwibGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyIiwiX29sZExheWVyJGdldERlZmF1bHRMIiwiX29sZExheWVyJGdldERlZmF1bHRMMiIsImdldERlZmF1bHRMYXllckNvbmZpZyIsIl90ZXh0TGFiZWwkIiwidmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEiLCJsb2FkZWRMYXllciIsImFsbG93RW1wdHlDb2x1bW4iLCJpc1ZhbGlkVG9TYXZlIiwidmFsaWRhdGVkIiwib2xkTGF5ZXJUeXBlIiwibmV3RGF0YXNldEZpZWxkcyIsImZpZWxkcyIsInJlbWFwcGVkRmllbGRzIiwidmFsdWVzIiwiX3JlZjIiLCJmaWVsZEtleSIsImN1cnJlbnRGaWVsZCIsIm1hdGNoZWQiLCJfcmVmMyIsInZhbGlkYXRlVmlzdWFsQ2hhbm5lbCIsImlzQ29uZmlnQWN0aXZlIiwidXBkYXRlTGF5ZXJEb21haW4iLCJfY2FsY3VsYXRlTGF5ZXJEYXRhMyIsInNldEluaXRpYWxMYXllckNvbmZpZyIsInJlc3VsdCIsImZpbmREZWZhdWx0TGF5ZXJQcm9wcyIsIm5ld1R5cGUiLCJvbGRJZCIsIkNvbnNvbGUiLCJlcnJvciIsImRlZmF1bHRMYXllclByb3BzIiwiYXNzaWduQ29uZmlnVG9MYXllciIsInZpc0NvbmZpZ1NldHRpbmdzIiwiaXNMYXllckhvdmVyZWQiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNCIsInNldHRpbmdzIiwiX3NldHRpbmdzJGxheWVycyIsIm9sZExheWVyTWFwIiwib3RoZXJMYXllcnMiLCJyZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlciIsInJlc29sdmVWaXN1YWxDaGFubmVsRmllbGRGcm9tRGF0YXNldCIsInZpc3VhbENoYW5uZWwiLCJpbmNvbWluZyIsIl90eXBlb2YyIiwiZm91bmQiLCJuZXdWaXNDb25maWciLCJ1cGRhdGVMYXllclZpc0NvbmZpZyIsInVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbCIsInVwZGF0ZWRTdGF0ZSIsImNoYW5uZWxTY2FsZVR5cGUiLCJDSEFOTkVMX1NDQUxFUyIsImNvbG9yIiwidXBkYXRlTGF5ZXJDb2xvclVJIiwicmFuZ2UiLCJjb2xvclJhbmdlQ29uZmlnIiwiY29sb3JVSSIsImN1c3RvbUJyZWFrcyIsIl9jYWxjdWxhdGVMYXllckRhdGE1Iiwic2NhbGUiLCJTQ0FMRV9UWVBFUyIsImN1c3RvbU9yZGluYWwiLCJjdXN0b21QYWxldHRlIiwiaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlIiwib3JkaW5hbERvbWFpbiIsImNvbG9yQnJlYWtzIiwic2hvd0NvbG9yQ2hhcnQiLCJjaGFubmVsS2V5IiwiamVua3MiLCJlZGl0Qm91bmRzIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTYiLCJzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyIiwiX3JlZjQiLCJyZWR1Y2UiLCJhY2N1Iiwic2V0RmlsdGVyQW5pbWF0aW9uVGltZVVwZGF0ZXIiLCJzZXRGaWx0ZXJVcGRhdGVyIiwic2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlciIsIl9yZWY1IiwiYW5pbWF0aW9uV2luZG93IiwibmV3RmlsdGVyIiwic3dhcF8iLCJuZXdTeW5jVGltZWxpbmVNb2RlIiwiZ2V0U3luY0FuaW1hdGlvbk1vZGUiLCJzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlciIsImFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlciIsIl9zZXJpYWxpemVGaWx0ZXIiLCJmaWx0ZXJJZCIsIm9sZEZpbHRlciIsInNlcmlhbGl6ZWRPbGRGaWx0ZXIiLCJzZXJpYWxpemVGaWx0ZXIiLCJzZXJpYWxpemVkTmV3RmlsdGVyIiwic2V0RmlsdGVyIiwiX2FjdGlvbiR2YWx1ZUluZGV4IiwidmFsdWVJbmRleCIsInRvQXJyYXkiLCJkYXRhc2V0SWRzVG9GaWx0ZXIiLCJfbG9vcCIsInJlcyIsInYiLCJfdXBkYXRlRmlsdGVyUHJvcCIsImVubGFyZ2VkRmlsdGVyIiwidmlldyIsIkZJTFRFUl9WSUVXX1RZUEVTIiwiZW5sYXJnZWQiLCJzaWRlIiwiZmlsdGVyZWREYXRhc2V0cyIsImFwcGx5RmlsdGVyc1RvRGF0YXNldHMiLCJ1bmlxIiwiZmlsdGVyV2l0aFBMb3QiLCJ1cGRhdGVGaWx0ZXJQbG90IiwidXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhIiwiRklMVEVSX1RZUEVTIiwidGltZVJhbmdlIiwiYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlciIsIl91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgiLCJfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4IiwibmV4dFZhbHVlIiwiZ2V0RGVmYXVsdEZpbHRlciIsInJlbW92ZUZpbHRlclBsb3QiLCJfaSIsIl9hcnIiLCJuZXh0VmFsIiwiZG9tYWluU3RlcHMiLCJtZXJnZUZpbHRlckRvbWFpbiIsIm5leHRGaWx0ZXIiLCJzdGVwIiwiYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbiIsImRhdGFzZXRJZHMiLCJGSUxURVJfVVBEQVRFUl9QUk9QUyIsIm9sZERhdGFJZCIsImRhdGFzZXRJZCIsIl9hcHBseUZpbHRlckZpZWxkTmFtZSIsImFwcGx5RmlsdGVyRmllbGROYW1lIiwibWVyZ2VEb21haW4iLCJ1cGRhdGVkRmlsdGVyIiwibmV3RGF0YXNldCIsImdwdSIsInNldEZpbHRlckdwdU1vZGUiLCJhc3NpZ25HcHVDaGFubmVsIiwiZW5kTmFtZSIsIl9hcHBseVRpbWVGaWx0ZXJFbmRGaSIsImFwcGx5VGltZUZpbHRlckVuZEZpZWxkTmFtZSIsImdwdUNoYW5uZWwiLCJncHVFbmRDaGFubmVsIiwibGF5ZXJJZERpZmZlcmVuY2UiLCJ4b3IiLCJsYXllckRhdGFJZHMiLCJsaWQiLCJuZXdEYXRhSWRzIiwic2V0RmlsdGVyUGxvdFVwZGF0ZXIiLCJfcmVmNiIsIm5ld1Byb3AiLCJwaWNrXyIsIm1lcmdlXyIsInBsb3RUeXBlIiwiY2hhcnRUeXBlIiwieUF4aXMiLCJQTE9UX1RZUEVTIiwibGluZUNoYXJ0IiwiaGlzdG9ncmFtIiwiYWRkRmlsdGVyVXBkYXRlciIsImNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlciIsIm9yaWdpbmFsSW5kZXgiLCJpbmRleCIsImxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXIiLCJfcmVmNyIsIm9sZFZpeENvbmZpZyIsInRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXIiLCJpc0ZpbHRlckFuaW1hdGlvbkNvbmZpZyIsInNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXIiLCJpc1NpZGVGaWx0ZXIiLCJhcHBseUZpbHRlckNvbmZpZyIsInRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlciIsInRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXIiLCJ1cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIiLCJ1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlciIsIl9yZWY4Iiwic2V0RmlsdGVyVmlld1VwZGF0ZXIiLCJzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXciLCJ0b2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlciIsImZlYXR1cmVUb0ZpbHRlclZhbHVlIiwicmVtb3ZlRmlsdGVyVXBkYXRlciIsIl9zdGF0ZSRmaWx0ZXJzJGlkeCIsIm5ld0ZpbHRlcnMiLCJuZXdFZGl0b3IiLCJnZXRGaWx0ZXJJZEluRmVhdHVyZSIsImFkZExheWVyVXBkYXRlciIsIm5ld0xheWVyRGF0YSIsImNyZWF0ZUxheWVyRnJvbUNvbmZpZyIsIndhcm4iLCJfYWN0aW9uJGRhdGFzZXRJZCIsImRlZmF1bHREYXRhc2V0IiwiTGF5ZXIiLCJyZW1vdmVMYXllclVwZGF0ZXIiLCJfcmVmOSIsImlzRmluaXRlIiwibGF5ZXJUb1JlbW92ZSIsImZpbHRlck91dEJ5SWQiLCJyZW1vdmVFbGVtZW50QXRJbmRleCIsInJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlciIsInJlbW92ZUNoYXJ0c0FuZEZpbHRlcnMiLCJjaGFydCIsImlzTGF5ZXJDaGFydENvbmZpZyIsInJlb3JkZXJMYXllclVwZGF0ZXIiLCJfcmVmMCIsIm9yZGVyIiwiYWRkTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwIiwiZ2V0TmV3TGF5ZXJHcm91cCIsIm5ld0xheWVyT3JkZXIiLCJhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIiLCJyZW1vdmVMYXllckdyb3VwVXBkYXRlciIsImxheWVyR3JvdXBUb1JlbW92ZSIsImdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlciIsImxheWVySWRzVG9SZW1vdmUiLCJnZXRGbGF0TGF5ZXJPcmRlciIsInVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyIiwib3B0aW9ucyIsIm5ld0xheWVyR3JvdXAiLCJsYXllcklkcyIsImFjYyIsInVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIiLCJhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwSWQiLCJlbnRyeSIsIm5ld0dyb3VwTGF5ZXJPcmRlciIsInJlbW92ZUxheWVyRnJvbUxheWVyR3JvdXBVcGRhdGVyIiwibmV3TGF5ZXJHcm91cE9yZGVyIiwic3dhcExheWVyT3JkZXJFbnRyaWVzVXBkYXRlciIsIm9yaWdpbkxheWVySWQiLCJkZXN0aW5hdGlvbkxheWVySWQiLCJvcmlnaW5MYXllckdyb3VwSWQiLCJkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCIsIm9yaWdpbkluZGV4IiwiZGVzdGluYXRpb25JbmRleCIsImFycmF5TW92ZSIsImRlc3RJbmRleCIsImR1cGxpY2F0ZUxheWVyVXBkYXRlciIsIl9yZWYxIiwib3JpZ2luYWwiLCJvcmlnaW5hbExheWVyT3JkZXJJZHgiLCJnZXRJbmRleEZyb21MYXllckVudHJ5SWQiLCJuZXdMYWJlbCIsInBvc3RmaXgiLCJnZW5lcmF0ZUhhc2hJZCIsIkxBWUVSX0lEX0xFTkdUSCIsInBhcmVudEdyb3VwIiwiZmluZFBhcmVudEdyb3VwRm9yTGF5ZXIiLCJsYXllck9yZGVyV2l0aG91dFByZXBlbmRlZCIsImlkeEluR3JvdXAiLCJhcnJheUluc2VydCIsInVwZGF0ZWRHcm91cCIsImFkZEVmZmVjdFVwZGF0ZXIiLCJfYWN0aW9uJGNvbmZpZyIsIl9hY3Rpb24kY29uZmlnMiIsIl9hY3Rpb24kY29uZmlnMyIsIkxJR0hUX0FORF9TSEFET1dfRUZGRUNUIiwiZWZmZWN0IiwiRElTVEFOQ0VfRk9HX1RZUEUiLCJTVVJGQUNFX0ZPR19UWVBFIiwibmV3RWZmZWN0IiwiY3JlYXRlRWZmZWN0Iiwic2V0UHJvcHMiLCJmaXhFZmZlY3RPcmRlciIsInJlbW92ZUVmZmVjdFVwZGF0ZXIiLCJfcmVmMTAiLCJlZmZlY3RUb1JlbW92ZSIsImVmZmVjdElkIiwicmVvcmRlckVmZmVjdFVwZGF0ZXIiLCJfcmVmMTEiLCJ1cGRhdGVFZmZlY3RVcGRhdGVyIiwiX3JlZjEyIiwiaWR4MiIsImVmZmVjdE9yZGVySWQiLCJuZXh0UGFyYW1zIiwicGFyYW1ldGVycyIsInRpbWVzdGFtcCIsIm5ld0VmZmVjdHMiLCJtZXJnZUNoYXJ0Q29uZmlnIiwiZGlzcGxheSIsImNoYXJ0RGlzcGxheSIsImF4aXNGaWVsZElmUHJlc2VudCIsImF4aXMiLCJmaWVsZE5hbWVzIiwiX2F4aXMkZmllbGQiLCJkcm9wTWlzc2luZ0NoYXJ0RmllbGRzIiwiU2V0IiwieEF4aXMiLCJncm91cEJ5Iiwic2hvdWxkUmVtb3ZlIiwicmVtb3ZlZCIsInJlbW92ZWRJZHMiLCJmaWx0ZXJJZHMiLCJmbGF0TWFwIiwiX2NoYXJ0JGNyb3NzRmlsdGVyIiwiY3Jvc3NGaWx0ZXIiLCJyZWR1Y2VSaWdodCIsImFkZENoYXJ0VXBkYXRlciIsIl9yZWYxMyIsIl9jaGFydCRkaXNwbGF5JGlzQ29uZiIsIl9jaGFydCRkaXNwbGF5IiwiZXhpc3RpbmciLCJ1cGRhdGVDaGFydFVwZGF0ZXIiLCJfcmVmMTQiLCJfbmV4dCRjcm9zc0ZpbHRlcjIiLCJfcHJldiRjcm9zc0ZpbHRlciIsIl9wcmV2JGNyb3NzRmlsdGVyMiIsIl9uZXh0JGNyb3NzRmlsdGVyMyIsImRhdGFJZENoYW5nZWQiLCJsYXllcklkQ2hhbmdlZCIsIl9uZXh0JGNyb3NzRmlsdGVyIiwib3duZWRGaWx0ZXJJZHMiLCJyZW1vdmVDaGFydFVwZGF0ZXIiLCJfcmVmMTUiLCJtYWtlTmV3QW5ub3RhdGlvbiIsIl9jb25maWcka2luZCIsIl9yZWYxNiIsIl9jb25maWckdGV4dFNpZGUiLCJfcmVmMTciLCJfY29uZmlnJHRleHRWZXJ0aWNhbFAiLCJfY29uZmlnJGlkIiwiX2NvbmZpZyRpc1Zpc2libGUiLCJfY29uZmlnJGF1dG9TaXplIiwiX2NvbmZpZyRhdXRvU2l6ZVkiLCJfY29uZmlnJGFuY2hvclBvaW50IiwiX2NvbmZpZyRsYWJlbCIsIl9jb25maWckbGluZUNvbG9yIiwiX2NvbmZpZyRsaW5lV2lkdGgiLCJfY29uZmlnJHRleHRXaWR0aCIsIl9jb25maWckdGV4dEhlaWdodCIsIl9jb25maWckdGV4dFZlcnRpY2FsQSIsIl9hcm1MZW5ndGgiLCJfYXJtTGVuZ3RoMiIsIl9hcm1MZW5ndGgzIiwiX3JhZGl1c0luTWV0ZXJzIiwia2luZCIsIklOSVRJQUxfQU5OT1RBVElPTl9LSU5EIiwicHJvdmlkZWRBbmdsZSIsImFuZ2xlIiwiZGVyaXZlZEZyb21BbmdsZSIsInRleHRQbGFjZW1lbnRGcm9tQW5nbGUiLCJ0ZXh0U2lkZSIsIkFubm90YXRpb25LaW5kIiwiVEVYVCIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX1NJREUiLCJ0ZXh0VmVydGljYWxQb3NpdGlvbiIsInZlcnRpY2FsIiwiSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfVkVSVElDQUxfUE9TSVRJT04iLCJiYXNlIiwiYXV0b1NpemUiLCJhdXRvU2l6ZVkiLCJhbmNob3JQb2ludCIsImxpbmVDb2xvciIsIklOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SIiwibGluZVdpZHRoIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgiLCJ0ZXh0V2lkdGgiLCJJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9XSURUSCIsInRleHRIZWlnaHQiLCJJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9IRUlHSFQiLCJ0ZXh0VmVydGljYWxBbGlnbiIsImRlZmF1bHRBbmdsZSIsIkFOTk9UQVRJT05fQU5HTEVfQllfUExBQ0VNRU5UIiwiSU5JVElBTF9BTk5PVEFUSU9OX0FOR0xFIiwiUE9JTlQiLCJhcm1MZW5ndGgiLCJJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCIsIkFSUk9XIiwiQ0lSQ0xFIiwicmFkaXVzSW5NZXRlcnMiLCJhZGRBbm5vdGF0aW9uVXBkYXRlciIsIm5ld0Fubm90YXRpb24iLCJyZW1vdmVBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYxOCIsInVwZGF0ZUFubm90YXRpb25VcGRhdGVyIiwiX3JlZjE5IiwibmV4dEFubm90YXRpb24iLCJuZXdBbm5vdGF0aW9ucyIsImR1cGxpY2F0ZUFubm90YXRpb25VcGRhdGVyIiwiX3JlZjIwIiwiY2xvbmVEZWVwIiwic2V0U2VsZWN0ZWRBbm5vdGF0aW9uVXBkYXRlciIsIl9yZWYyMSIsImlzRWRpdGluZ1RleHQiLCJyZW1vdmVEYXRhc2V0VXBkYXRlciIsImRhdGFzZXRLZXkiLCJfc3RhdGUkZGF0YXNldHMiLCJuZXdEYXRhc2V0cyIsImxheWVyc1RvUmVtb3ZlIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsImluZGV4T2YiLCJyZW1vdmVEYXRhc2V0RnJvbUludGVyYWN0aW9uQ29uZmlnIiwiX3JlZjIyIiwiX2ludGVyYWN0aW9uQ29uZmlnIiwiX2NvbmZpZyRmaWVsZHNUb1Nob3ciLCJ1cGRhdGVMYXllckJsZW5kaW5nVXBkYXRlciIsInVwZGF0ZU92ZXJsYXlCbGVuZGluZ1VwZGF0ZXIiLCJzaG93RGF0YXNldFRhYmxlVXBkYXRlciIsInVwZGF0ZVRhYmxlQ29sb3JVcGRhdGVyIiwidXBkYXRlRGF0YXNldFByb3BzVXBkYXRlciIsIm5ld0NvbG9yIiwicmVzZXRNYXBDb25maWdVcGRhdGVyIiwiaW5pdGlhbFN0YXRlIiwicmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIiLCJfcmVmMjMiLCJfcmVmMjMkcGF5bG9hZCIsInBheWxvYWQiLCJfcmVmMjMkcGF5bG9hZCRjb25maWciLCJfcmVmMjMkcGF5bG9hZCRvcHRpb24iLCJ2aXNTdGF0ZSIsImtlZXBFeGlzdGluZ0NvbmZpZyIsIm1lcmdlZFN0YXRlIiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsIm1lcmdlciIsImlzVmFsaWRNZXJnZXIiLCJoYXNQcm9wc1RvTWVyZ2UiLCJtZXJnZSIsImdldFByb3BWYWx1ZVRvTWVyZ2VyIiwidG9NZXJnZVByb3AiLCJsYXllckhvdmVyVXBkYXRlciIsImluZm8iLCJpbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJjb250cmFkaWN0IiwiayIsImxheWVyQ2xpY2tVcGRhdGVyIiwicGlubmVkIiwicGlja2VkIiwibWFwQ2xpY2tVcGRhdGVyIiwibW91c2VNb3ZlVXBkYXRlciIsIl9yZWYyNCIsImV2dCIsInBvaW50IiwibW91c2VQb3NpdGlvbiIsImxuZ0xhdCIsInRvZ2dsZVNwbGl0TWFwVXBkYXRlciIsImNvbXB1dGVTcGxpdE1hcExheWVycyIsImR1cGxpY2F0ZSIsImNsb3NlU3BlY2lmaWNNYXBBdEluZGV4IiwiX3JlZjI1IiwiaGFzVGFidWxhckRhdGFzZXREYXRhIiwiZGF0YSIsIl9kYXRhJHJvd3MiLCJfZGF0YSRjb2xzIiwicm93cyIsImNvbHMiLCJhcnJvd1RhYmxlIiwibmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZSIsIl9kYXRhc2V0JGluZm8iLCJfZGF0YXNldCRtZXRhZGF0YSIsIkRhdGFzZXRUeXBlIiwiRVhURVJOQUxMWV9IT1NURUQiLCJtZXRhZGF0YSIsInNvdXJjZSIsImh5ZHJhdGVFeHRlcm5hbGx5SG9zdGVkUHJvdG9EYXRhc2V0IiwiX3giLCJfaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZTIiLCJfcmVmMjYiLCJfZGF0YXNldCRtZXRhZGF0YTciLCJfZGF0YXNldCRtZXRhZGF0YTgiLCJvblByb2dyZXNzIiwibG9hZGVkIiwiX2RhdGFzZXQkbWV0YWRhdGE5Iiwid3JhcCIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsImFyZyIsImFicnVwdCIsImxvYWRFeHRlcm5hbGx5SG9zdGVkRGF0YXNldCIsImZvcm1hdCIsImdldFJlbW90ZVNvdXJjZUZvcm1hdCIsImJ5cGFzc0NhY2hlIiwiZ2V0RGF0YXNldFJlZnJlc2hJbnRlcnZhbE1zIiwic2VudCIsIkVycm9yIiwiZXRhZyIsImxhc3RNb2RpZmllZCIsImxhc3RGZXRjaGVkQXQiLCJEYXRlIiwibm93IiwicmVmcmVzaFN0YXR1cyIsInN0b3AiLCJIWURSQVRFX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSyIsImZyb21Qcm9taXNlV2l0aFByb2dyZXNzIiwiRkFJTF9DUkVBVEVfREFUQVNFVF9UQVNLIiwiZnJvbVByb21pc2UiLCJfcmVmMjciLCJfY2FsbGVlIiwibWVzc2FnZSIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJfeDIiLCJnZXREYXRhc2V0UHJvZ3Jlc3NJZCIsIl9kYXRhc2V0JGluZm8yIiwiX2RhdGFzZXQkbWV0YWRhdGEyIiwiY3JlYXRlTmV3RGF0YUVudHJ5VGFzayIsImNyZWF0ZU5ld0RhdGFFbnRyeSIsInByb2dyZXNzSWQiLCJwcm9ncmVzcyIsIl9wcm9ncmVzcyRwZXJjZW50Iiwic2V0TG9hZGluZ1Byb2dyZXNzIiwiTWF0aCIsInJvdW5kIiwicGVyY2VudCIsImNoYWluIiwiaHlkcmF0ZWQiLCJ0YXNrIiwiY2xlYXJMb2FkaW5nUHJvZ3Jlc3MiLCJpZHMiLCJjdXJyZW50IiwicGF0Y2hEYXRhc2V0TWV0YWRhdGEiLCJwYXRjaCIsImNvcHlUYWJsZUFuZFVwZGF0ZSIsInJlZnJlc2hFeHRlcm5hbGx5SG9zdGVkVGFibGUiLCJfeDMiLCJfcmVmcmVzaEV4dGVybmFsbHlIb3N0ZWRUYWJsZSIsIl9jYWxsZWUzIiwiX3JlZjI4IiwiX2NhbGxlZTMkIiwiX2NvbnRleHQzIiwiUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0siLCJyZWZyZXNoRGF0YXNldFVwZGF0ZXIiLCJfcmVmMjkiLCJfZGF0YXNldCRtZXRhZGF0YTMiLCJfZGF0YXNldCRtZXRhZGF0YTQiLCJuZXh0RGF0YXNldCIsInJlZnJlc2hFcnJvciIsInJlZnJlc2hQcm9ncmVzcyIsIndpdGhUYXNrIiwiX3Byb2dyZXNzJHBlcmNlbnQyIiwicmVmcmVzaERhdGFzZXRQcm9ncmVzcyIsImJpbWFwIiwicmVmcmVzaERhdGFzZXRTdWNjZXNzIiwicmVmcmVzaERhdGFzZXRFcnJvciIsInJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3NVcGRhdGVyIiwiX3JlZjMwIiwiX2RhdGFzZXQkbWV0YWRhdGE1IiwiX2RhdGFzZXQkbWV0YWRhdGE2IiwibmV4dFBlcmNlbnQiLCJtYXgiLCJtaW4iLCJmaWVsZE5hbWVzRXF1YWwiLCJldmVyeSIsInJlYmluZExheWVyc0FuZEZpbHRlcnNBZnRlclNjaGVtYUNoYW5nZSIsIm5leHRMYXllcnMiLCJkcm9wcGVkTGF5ZXJzIiwicmVib3VuZCIsIm5leHRMYXllck9yZGVyIiwibmV4dFNwbGl0TWFwcyIsIm5leHRMYXllckRhdGEiLCJvbGRJZHgiLCJmaWx0ZXJzRm9yRGF0YXNldCIsIm90aGVyRmlsdGVycyIsIl92YWxpZGF0ZUZpbHRlcnNVcGRhdCIsInZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzIiwidXBkYXRlZERhdGFzZXRzIiwibmV4dEZpbHRlcnMiLCJyZWZyZXNoRGF0YXNldFN1Y2Nlc3NVcGRhdGVyIiwiX3JlZjMxIiwiX3Jlc3VsdCRkYXRhIiwibWV0YWRhdGFQYXRjaCIsInNjaGVtYVVuY2hhbmdlZCIsIm5vdE1vZGlmaWVkIiwidXBkYXRlIiwicmVmcmVzaGVkIiwicmVhcHBseUZpbHRlcnNBbmRMYXllckRhdGEiLCJpc0RhdGFzZXRSb3dMaXN0IiwiaXNQbGFpbk9iamVjdCIsInRvQXJyYXlSb3ciLCJyb3ciLCJyZWNvcmQiLCJub3JtYWxpemVEYXRhc2V0Um93cyIsImxpc3QiLCJub3JtYWxpemVkIiwiYXJyYXlSb3ciLCJhZGRUb0RhdGFzZXRVcGRhdGVyIiwiX3JlZjMyIiwiYXBwbGllZCIsInVwc2VydEJ5IiwidXBzZXJ0Um93cyIsImFwcGVuZFJvd3MiLCJyZW1vdmVGcm9tRGF0YXNldFVwZGF0ZXIiLCJfcmVmMzMiLCJyb3dJbmRleGVzIiwiYnlGaWVsZCIsImluZGV4ZXMiLCJmaW5kUm93SW5kZXhlc0J5RmllbGRWYWx1ZXMiLCJyZW1vdmVSb3dzIiwicmVmcmVzaERhdGFzZXRFcnJvclVwZGF0ZXIiLCJfcmVmMzQiLCJ1cGRhdGVWaXNEYXRhVXBkYXRlciIsImNyZWF0ZURhdGFzZXRUYXNrcyIsIm5vdGlmaWNhdGlvblRhc2tzIiwiaHlkcmF0ZVByb2dyZXNzIiwiX3JlZjM1IiwiZGF0YXNldEluZGV4IiwiX3JlZjM1JGluZm8iLCJyZXN0IiwicHJvdG8iLCJhZGROb3RpZmljYXRpb24iLCJlcnJvck5vdGlmaWNhdGlvbiIsInByb2dyZXNzSWRzIiwiZGF0YXNldHNBbGxTZXR0bGVkVGFzayIsImFsbFNldHRsZWQiLCJyZXN1bHRzIiwiY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3MiLCJhZGRUb01hcE9wdGlvbnMiLCJzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlciIsInBheWxvYWRfIiwiY2hhbmdlIiwiY3JlYXRlTmV3RGF0YXNldFN1Y2Nlc3NVcGRhdGVyIiwiX2FjdGlvbiRwYXlsb2FkIiwibmV3RGF0YUVudHJpZXMiLCJzdGF0dXMiLCJBQ1RJT05fVEFTSyIsInJlYXNvbiIsIm1lcmdlRGF0YXNldHNCeU9yZGVyIiwibGF5ZXJNZXJnZXJzIiwibSIsIndhaXRGb3JMYXllckRhdGEiLCJkYXRhc2V0TWVyZ2VycyIsInBvc3RNZXJnZXJQYXlsb2FkIiwiYXBwbHlNZXJnZXJzVXBkYXRlciIsIm1lcmdlU3RhdGVSZXN1bHQiLCJtZXJnZVN0YXRlRnJvbU1lcmdlcnMiLCJhbGxNZXJnZWQiLCJwb3N0TWVyZ2VVcGRhdGVyIiwibGF5ZXJWaXNDb25maWdGcm9tQWRkRGF0YU9wdGlvbnMiLCJsYXllclZpc0NvbmZpZyIsInBvbHlnb25GaWx0ZXJEZXBlbmRzT25MYXllck1ldGEiLCJfbGF5ZXIkY29uZmlnIiwiTEFZRVJfVFlQRVMiLCJnZW9qc29uIiwiY29sdW1uTW9kZSIsImZEYXRhSWQiLCJkYXRhc2V0RmlsdGVyZWQiLCJkYXRhRW1wdHkiLCJuZXdMYXllcnMiLCJhdXRvQ3JlYXRlTGF5ZXJzIiwiYWRkRGVmYXVsdExheWVycyIsImxheWVyc05vdEluU3BsaXRNYXBzIiwibWVyZ2VMYXllclZpc0NvbmZpZ0Zvck5ld0RhdGFzZXRzIiwidG9vbHRpcEZpZWxkcyIsImF1dG9DcmVhdGVUb29sdGlwcyIsImFkZERlZmF1bHRUb29sdGlwcyIsInBvbHlnb25GaWx0ZXJzIiwicG9seWdvbiIsInBvbHlnb25NZXRhRGF0YUlkcyIsIl9mJGxheWVySWQiLCJjZW50ZXJNYXAiLCJib3VuZHMiLCJmaW5kTWFwQm91bmRzIiwicGFkZGluZyIsImZpdEJvdW5kc1Rhc2siLCJmaXRNYXBCb3VuZHMiLCJyZW5hbWVEYXRhc2V0VXBkYXRlciIsIkFMTE9XRURfVVBEQVRFX0RBVEFTRVRfUFJPUFMiLCJ2YWxpZGF0ZURhdGFzZXRVcGRhdGVQcm9wcyIsInZhbGlkYXRlZFByb3BzIiwiZW50cmllcyIsIl9lbnRyeSIsIl9zbGljZWRUb0FycmF5MiIsImlzUmdiQ29sb3IiLCJkZWVwbWVyZ2UiLCJyZWNvbmNpbGVMYXllcldpdGhOZXdTY2hlbWEiLCJyZW5hbWVzIiwibmV3VGFibGUiLCJfbGF5ZXIkY29uZmlnJHRleHRMYWIiLCJjb25maWdQYXRjaCIsImNvbHVtbnNQYXRjaCIsImNvbHVtbnNDaGFuZ2VkIiwiY29sdW1ucyIsIl9yZWYzNiIsIl9yZWYzNyIsImNrZXkiLCJjb2wiLCJfcmVmMzgiLCJmaWVsZENvbmZpZyIsImxheWVyQ29weSIsImFzc2lnbiIsImNyZWF0ZSIsImdldFByb3RvdHlwZU9mIiwiaGFzQWxsQ29sdW1ucyIsInVwZGF0ZURhdGFzZXRVcGRhdGVyIiwiX2ludGVyYWN0aW9uQ29uZmlnMiIsIl90b29sdGlwJGNvbmZpZyIsIl9hY3Rpb24kcmVuYW1lcyIsInVwZGF0ZVNjaGVtYSIsImZpbHRlcmVkSWR4Q1BVIiwiYWxsSW5kZXhlcyIsImZpbHRlclJlY29yZENQVSIsInNvcnRDb2x1bW4iLCJzb3J0T3JkZXIiLCJwaW5uZWRDb2x1bW5zIiwiX3JlbmFtZXMkbmFtZSIsImdldENvbHVtbkZpZWxkSWR4IiwibmV3RmllbGRzQnlOYW1lIiwiX3JlbmFtZXMkb2xkTmFtZSIsIl91cGRhdGVkJHlBeGlzIiwidmkiLCJvbGROYW1lIiwibmV3TmFtZSIsImZpZWxkSWR4IiwiX2FwcGx5RmlsdGVyRmllbGROYW1lMiIsInVwZGF0ZWQiLCJmaWx0ZXJUYWJsZSIsInJlY29uY2lsZWQiLCJuZXh0RmllbGRzVG9TaG93IiwiX3JlbmFtZXMkZiRuYW1lIiwiX3N0YXRlJHNwbGl0TWFwcyRpbmRlIiwiaW5kZXhUb1JldHJpZXZlIiwibWFwTGF5ZXJzIiwibG9hZEZpbGVzVXBkYXRlciIsImZpbGVzIiwiX2FjdGlvbiRvbkZpbmlzaCIsIm9uRmluaXNoIiwibG9hZEZpbGVzU3VjY2VzcyIsImNvbXBhbmlvbkZpbGVzIiwiZmlsZXNUb0xvYWQiLCJnZXRGaWxlc1RvUGFyc2UiLCJpbml0aWFsRmlsZUxvYWRpbmdQcm9ncmVzcyIsImZpbGVDYWNoZSIsImxvYWROZXh0RmlsZVVwZGF0ZXIiLCJsb2FkRmlsZVN0ZXBTdWNjZXNzVXBkYXRlciIsImZpbGVOYW1lIiwiX3N0YXRlJGZpbGVMb2FkaW5nIiwic3RhdGVXaXRoUHJvZ3Jlc3MiLCJ1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlciIsInN0YXRlV2l0aENhY2hlIiwiREVMQVlfVEFTSyIsImxvYWROZXh0RmlsZSIsIl9maWxlc1RvTG9hZCIsIl90b0FycmF5MiIsImZpbGUiLCJyZW1haW5pbmdGaWxlc1RvTG9hZCIsIm1ha2VMb2FkRmlsZVRhc2siLCJMT0FEX0ZJTEVfVEFTSyIsImdlbiIsIm5leHRGaWxlQmF0Y2giLCJwcm9jZXNzRmlsZUNvbnRlbnQiLCJjb250ZW50IiwibG9hZEZpbGVzRXJyIiwicHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlciIsIl9hY3Rpb24kcGF5bG9hZDIiLCJQUk9DRVNTX0ZJTEVfREFUQSIsImxvYWRGaWxlU3RlcFN1Y2Nlc3MiLCJwYXJzZVByb2dyZXNzIiwicHJldlByb2dyZXNzIiwibmV4dEZpbGVCYXRjaFVwZGF0ZXIiLCJfcmVmMzkiLCJfYWNjdW11bGF0ZWQkZGF0YSIsIl9yZWYzOSRwYXlsb2FkIiwiYWNjdW11bGF0ZWQiLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsInVzZUFycm93UHJvZ3Jlc3NpdmVMb2FkaW5nIiwiZW5kc1dpdGgiLCJza2lwQXJyb3dDb21wYWN0IiwiVU5XUkFQX1RBU0siLCJfcmVmNDAiLCJsb2FkRmlsZXNFcnJVcGRhdGVyIiwiX3JlZjQxIiwiX3N0YXRlJGZpbGVMb2FkaW5nMiIsImFwcGx5Q1BVRmlsdGVyVXBkYXRlciIsIl9yZWY0MiIsImRhdGFJZHMiLCJmaWx0ZXJEYXRhc2V0Q1BVIiwic2V0TWFwSW5mb1VwZGF0ZXIiLCJlbXB0eSIsImRlZmF1bHRMYXllcnMiLCJmb3VuZExheWVycyIsImZpbmREZWZhdWx0TGF5ZXIiLCJnZXRMYXllck9yZGVyRnJvbUxheWVycyIsImZpbmRGaWVsZHNUb1Nob3ciLCJtZXJnZWQiLCJfcmVmNDQiLCJmaXhlZERvbWFpbiIsIl9jYWxjdWxhdGVMYXllckRhdGE3IiwiX3N0YXRlJGZpbHRlcnMiLCJhbmltYXRhYmxlTGF5ZXJzIiwibGF5ZXJEb21haW5zIiwibWVyZ2VkRG9tYWluIiwibWVyZ2VUaW1lRG9tYWlucyIsImdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlciIsIm1lcmdlZFRpbWVTdGVwcyIsInNvcnQiLCJCQVNFX1NQRUVEIiwiRlBTIiwic3luY2VkRmlsdGVyIiwibmV3QW5pbWF0aW9uRG9tYWluIiwiaXNJblJhbmdlIiwic2V0RWRpdG9yTW9kZVVwZGF0ZXIiLCJfcmVmNDUiLCJza2V0Y2hlc0VuYWJsZWQiLCJlbmFibGVEcmF3T25NYXBTa2V0Y2hlcyIsIkRSQVdfUE9JTlQiLCJEUkFXX0xJTkVTVFJJTkciLCJzZXRGZWF0dXJlc1VwZGF0ZXIiLCJfcmVmNDYiLCJfbGFzdEZlYXR1cmUkcHJvcGVydGkiLCJfbGFzdEZlYXR1cmUkcHJvcGVydGkyIiwiX3JlZjQ2JGZlYXR1cmVzIiwibGFzdEZlYXR1cmUiLCJwcm9wZXJ0aWVzIiwiaXNDbG9zZWQiLCJzaGFwZSIsIkVESVQiLCJmZWF0dXJlIiwiYmJveCIsImZlYXR1cmVWYWx1ZSIsImZpbHRlcklkeCIsImZpbCIsImZpbmRFZGl0b3JGZWF0dXJlIiwiX3N0YXRlJGVkaXRvciRzZWxlY3RlIiwiZnJvbUVkaXRvciIsIml0ZW0iLCJzZXRFZGl0b3JGZWF0dXJlUHJvcGVydGllc1VwZGF0ZXIiLCJfcmVmNDciLCJfc3RhdGUkZWRpdG9yJHNlbGVjdGUyIiwibmV4dEZlYXR1cmUiLCJtZXJnZVVzZXJGZWF0dXJlUHJvcGVydGllcyIsIm5leHRFZGl0b3IiLCJzZXRTZWxlY3RlZEZlYXR1cmVVcGRhdGVyIiwiX3JlZjQ4Iiwic2VsZWN0aW9uQ29udGV4dCIsImRlbGV0ZUZlYXR1cmVVcGRhdGVyIiwiX3JlZjQ5Iiwic2V0UG9seWdvbkZpbHRlckxheWVyVXBkYXRlciIsIm5vbmVGaWx0ZXJGZWF0dXJlIiwiX2ZpbHRlciRsYXllcklkIiwiaXNMYXllckluY2x1ZGVkIiwic2tldGNoRmVhdHVyZSIsInRvU2tldGNoRmVhdHVyZSIsInN0YXRlV2l0aG91dEZpbHRlciIsImdlbmVyYXRlUG9seWdvbkZpbHRlciIsInNldFBvbHlnb25GaWx0ZXJBbGxMYXllcnNVcGRhdGVyIiwidmlzaWJsZUxheWVySWRzIiwiYWxsTGF5ZXJJZHMiLCJzb3J0VGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjUwIiwiY29sdW1uIiwic29ydE1vZGUiLCJjdXJyZW50TW9kZSIsIlNPUlRfT1JERVIiLCJBU0NFTkRJTkciLCJzb3J0ZWQiLCJzb3J0RGF0YXNldEJ5Q29sdW1uIiwicGluVGFibGVDb2x1bW5VcGRhdGVyIiwiX3JlZjUxIiwicGluVGFibGVDb2x1bW5zIiwiY29weVRhYmxlQ29sdW1uVXBkYXRlciIsIl9yZWY1MiIsInRleHQiLCJkYXRhQ29udGFpbmVyIiwicGFyc2VGaWVsZFZhbHVlIiwidmFsdWVBdCIsImpvaW4iLCJjb3B5Iiwic2V0Q29sdW1uRGlzcGxheUZvcm1hdFVwZGF0ZXIiLCJfcmVmNTMiLCJmb3JtYXRzIiwiZGlzcGxheUZvcm1hdCIsIl9sYXllciRjb25maWcyIiwiY29sb3JGaWVsZCIsImdldE1hcHBlZFZhbHVlIiwiZmlsdGVyUHJvcHMiLCJtYXBwZWRWYWx1ZSIsInlpZWxkRm9yUGFpbnQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInNldFRpbWVvdXQiLCJyZXF1ZXN0RGF0YXNldENvbHVtblN0YXRpc3RpY3MiLCJfeDQiLCJfcmVxdWVzdERhdGFzZXRDb2x1bW5TdGF0aXN0aWNzIiwiX2NhbGxlZTQiLCJfcmVmNTQiLCJfY2FsbGVlNCQiLCJfY29udGV4dDQiLCJnZXRDb2x1bW5GaWx0ZXJQcm9wcyIsImNvbGxlY3RDb2x1bW5WYWx1ZXMiLCJnZXRDb2x1bW5TdGF0aXN0aWNzIiwiZmllbGRUeXBlIiwiTE9BRF9DT0xVTU5fU1RBVFNfVEFTSyIsImxvYWRDb2x1bW5TdGF0c1VwZGF0ZXIiLCJfcmVmNTUiLCJmaWVsZE5hbWUiLCJmaWVsZE5hbWVzVG9Mb2FkIiwiZmllbGRzVG9Mb2FkIiwiaXNMb2FkaW5nU3RhdHMiLCJ0YXNrcyIsIl9yZWY1NiIsImxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3MiLCJsb2FkQ29sdW1uU3RhdHNFcnJvciIsImxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3NVcGRhdGVyIiwiX3JlZjU3IiwibmV3RmlsdGVyUHJvcHMiLCJjb2x1bW5TdGF0cyIsImxvYWRDb2x1bW5TdGF0c0Vycm9yVXBkYXRlciIsIl9yZWY1OCIsInRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyIiwiY29udmVydEVkaXRvckZlYXR1cmVzVG9MYXllclVwZGF0ZXIiLCJfYWN0aW9uIiwicHJvY2Vzc0dlb2pzb24iLCJlZGl0b3JGZWF0dXJlc1RvRmVhdHVyZUNvbGxlY3Rpb24iLCJjbGVhcmVkU3RhdGUiLCJsYWJlbElkIiwiZmxvb3IiLCJyYW5kb20iLCJleHRyYWN0RGF0YUZyb21GZWF0dXJlVXBkYXRlciIsIl9yZWY1OSIsImlzVmVjdG9yVGlsZUV4dHJhY3RMYXllciIsImV4dHJhY3RlZCIsImV4dHJhY3RSb3dzSW5zaWRlRmVhdHVyZSIsInJvd0NvdW50Iiwic2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ1VwZGF0ZXIiLCJfcmVmNjAiLCJ1cGRhdGVzIiwiY2hlY2tUaW1lQ29uZmlnQXJncyIsImFsbG93ZWQiLCJzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyIiwiX3JlZjYxIiwibGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlVXBkYXRlciIsIl9sYXllciRmaWx0ZXJlZEl0ZW1DbyIsImV2ZW50IiwiZGVja2dsTGF5ZXJJZCIsImNvdW50IiwiZmlsdGVyZWRJdGVtQ291bnQiLCJ3bXNGZWF0dXJlSW5mb1VwZGF0ZXIiLCJmZWF0dXJlSW5mbyIsImNvbnNvbGUiLCJvYmplY3QiLCJ3bXNGZWF0dXJlSW5mbyIsIl9uZXdTdGF0ZSRhbmltYXRpb25DbyIsIl9uZXdTdGF0ZSRhbmltYXRpb25DbzIiLCJfYWN0aW9uJGVuYWJsZSIsImludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMiLCJnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzIiwiaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyIiwibmV3RmlsdGVyRG9tYWluIiwiQU5JTUFUSU9OX1dJTkRPVyIsImludGVydmFsIiwiYWRqdXN0VGltZUZpbHRlckludGVydmFsIiwibmV3RmlsdGVyVmFsdWUiLCJzeW5jVGltZWxpbmVNb2RlIiwiU1lOQ19USU1FTElORV9NT0RFUyIsImVuZCIsInZhbGlkYXRlU3luY0FuaW1hdGlvbk1vZGUiLCJfcmVmNjIiLCJzZXRMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyIiwiX3JlZjYzIiwiX3N0YXRlJGxvYWRpbmdQcm9ncmVzIiwidGltZWxpbmVWYWx1ZSIsImdldFRpbWVsaW5lVmFsdWVGcm9tRmlsdGVyIiwic25hcFRvTWFya3MiLCJmcmVlIiwiX2ZpbHRlciRzeW5jVGltZWxpbmVNIiwibmV3TW9kZSIsInN0YXJ0IiwiaW50ZXJ2YWxJbmRleCIsImN1cnJlbnRJbmRleCIsIm1ldGEiLCJ0YXJnZXRUaW1lSW50ZXJ2YWwiLCJuZXdJbmRleCIsIlRJTUVfSU5URVJWQUxTX09SREVSRUQiLCJsYXllclRpbWVJbnRlcnZhbCIsIkxheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWwiLCJnZXREZWZhdWx0VGltZUZvcm1hdCIsInVwZGF0ZWRQbG90VHlwZSIsInVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZSIsImFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3ciLCJkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMiLCJkYXRhSWRUb1JlcGxhY2UiLCJfdmFsdWUkY29uZmlnIiwiX3ZhbHVlJGNvbmZpZzIiLCJyZXBsYWNlZCIsImlzT2JqZWN0IiwiZmluZENoaWxkRGF0YXNldElkcyIsIl92YWx1ZSRuZXdEYXRhc2V0IiwiY2hpbGREYXRhSWRzIiwibW92ZVZhbHVlVG9CZU1lcmdlZCIsInByb3BWYWx1ZXMiLCJfcmVmNjUiLCJzYXZlVW5tZXJnZWQiLCJzdGF0ZVJlbW92ZWQiLCJwcm9wVmFsdWUiLCJwIiwidG9CZU1lcmdlZCIsInJlcGxhY2VEYXRhc2V0QW5kRGVwcyIsImRhdGFJZFRvVXNlIiwiY29tcG9zZV8iLCJhcHBseV8iLCJyZXBsYWNlRGF0YXNldERlcHNJblN0YXRlIiwicHJlcGFyZVN0YXRlRm9yRGF0YXNldFJlcGxhY2UiLCJfbmV4dFN0YXRlJGxheWVyVG9CZU0iLCJzZXJpYWxpemVkU3RhdGUiLCJzZXJpYWxpemVWaXNTdGF0ZSIsInByZXNlcnZlTGF5ZXJPcmRlciIsInByZXNlcnZlRGF0YXNldE9yZGVyIiwiX3NlcmlhbGl6ZWRTdGF0ZSRzcGxpIiwiY29tYmluZVNwbGl0TWFwc0J5SW5kZXgiLCJwcmVzZXJ2ZWRPcmRlcldpdGhQYXJrZWQiLCJwcmV2aW91c09yZGVyIiwicGFya2VkIiwicGFya2VkSWRzIiwia25vd24iLCJvcmRlcmVkIiwiX3JlZjY2IiwiYWNjdVN0YXRlIiwiX3JlZjY3IiwicmVwbGFjZVBhcmVudERhdGFzZXRJZHMiLCJnZXRDaGlsZERhdGFzZXRJZHMiLCJwcmVzZXJ2ZU9yZGVyIiwidG9NZXJnZVByb3BzIiwic2F2ZWRQcm9wcyIsInJlcGxhY2VkU3RhdGUiLCJfcmVwbGFjZWRTdGF0ZSRtZXJnZXIiLCJfcmVwbGFjZWRTdGF0ZSRtZXJnZXIyIiwibWVyZ2VyT3B0aW9ucyIsInBhcmtlZEVsc2V3aGVyZSIsInJlcGxhY2VkSXRlbSIsInJlcGxhY2VQcm9wVmFsdWVJblN0YXRlIiwiX3JlZjY4IiwiY2hpbGREYXRhSWQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdmlzLXN0YXRlLXVwZGF0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7YmJveH0gZnJvbSAnQHR1cmYvYmJveCc7XG5pbXBvcnQgdHlwZSB7QWxsR2VvSlNPTn0gZnJvbSAnQHR1cmYvaGVscGVycyc7XG5pbXBvcnQgY29weSBmcm9tICdjb3B5LXRvLWNsaXBib2FyZCc7XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ2RlZXBtZXJnZSc7XG5pbXBvcnQge2NvbnNvbGUgYXMgQ29uc29sZX0gZnJvbSAnZ2xvYmFsL3dpbmRvdyc7XG5pbXBvcnQgY2xvbmVEZWVwIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L2Nsb25lRGVlcCc7XG5pbXBvcnQgZ2V0IGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L2dldCc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9pc0VxdWFsJztcbmltcG9ydCBwaWNrIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L3BpY2snO1xuaW1wb3J0IHVuaXEgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvdW5pcSc7XG5pbXBvcnQgeG9yIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L3hvcic7XG5pbXBvcnQgVGFzaywge2Rpc2FibGVTdGFja0NhcHR1cmluZywgd2l0aFRhc2t9IGZyb20gJ0BrZXBsZXIuZ2wvdGFza3MnO1xuaW1wb3J0IHR5cGUge1Rhc2tEZXNjcmlwdG9yfSBmcm9tICdAa2VwbGVyLmdsL3Rhc2tzJztcbi8vIFRhc2tzXG5pbXBvcnQge1xuICBERUxBWV9UQVNLLFxuICBBQ1RJT05fVEFTSyxcbiAgTE9BRF9GSUxFX1RBU0ssXG4gIFBST0NFU1NfRklMRV9EQVRBLFxuICBVTldSQVBfVEFTS1xufSBmcm9tICdAa2VwbGVyLmdsL3Rhc2tzJztcbi8vIEFjdGlvbnNcbmltcG9ydCB7XG4gIGFkZE5vdGlmaWNhdGlvbixcbiAgQWN0aW9uVHlwZXMsXG4gIENyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzUGF5bG9hZCxcbiAgTWFwU3RhdGVBY3Rpb25zLFxuICBSZWNlaXZlTWFwQ29uZmlnUGF5bG9hZCxcbiAgVmlzU3RhdGVBY3Rpb25zLFxuICBhcHBseUxheWVyQ29uZmlnLFxuICBjcmVhdGVOZXdEYXRhc2V0U3VjY2VzcyxcbiAgbGF5ZXJDb25maWdDaGFuZ2UsXG4gIGxheWVyVHlwZUNoYW5nZSxcbiAgbGF5ZXJWaXNDb25maWdDaGFuZ2UsXG4gIGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSxcbiAgbG9hZEZpbGVTdGVwU3VjY2VzcyxcbiAgbG9hZEZpbGVzRXJyLFxuICBsb2FkRmlsZXNTdWNjZXNzLFxuICBsb2FkTmV4dEZpbGUsXG4gIG5leHRGaWxlQmF0Y2gsXG4gIHNldEZpbHRlcixcbiAgcHJvY2Vzc0ZpbGVDb250ZW50LFxuICBmaXRCb3VuZHMgYXMgZml0TWFwQm91bmRzLFxuICB0b2dnbGVMYXllckZvck1hcCxcbiAgYXBwbHlGaWx0ZXJDb25maWcsXG4gIFNldExvYWRpbmdJbmRpY2F0b3JQYXlsb2FkLFxuICBsb2FkQ29sdW1uU3RhdHNTdWNjZXNzLFxuICBsb2FkQ29sdW1uU3RhdHNFcnJvcixcbiAgcmVmcmVzaERhdGFzZXRTdWNjZXNzLFxuICByZWZyZXNoRGF0YXNldEVycm9yLFxuICByZWZyZXNoRGF0YXNldFByb2dyZXNzLFxuICBzZXRMb2FkaW5nUHJvZ3Jlc3Ncbn0gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcblxuLy8gVXRpbHNcbmltcG9ydCB7XG4gIEZJTFRFUl9VUERBVEVSX1BST1BTLFxuICBhZGROZXdMYXllcnNUb1NwbGl0TWFwLFxuICBzbmFwVG9NYXJrcyxcbiAgYXBwbHlGaWx0ZXJGaWVsZE5hbWUsXG4gIGFwcGx5VGltZUZpbHRlckVuZEZpZWxkTmFtZSxcbiAgYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyxcbiAgYXJyYXlJbnNlcnQsXG4gIGNvbWJpbmVTcGxpdE1hcHNCeUluZGV4LFxuICBjb21wdXRlU3BsaXRNYXBMYXllcnMsXG4gIGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4sXG4gIGVycm9yTm90aWZpY2F0aW9uLFxuICBlZGl0b3JGZWF0dXJlc1RvRmVhdHVyZUNvbGxlY3Rpb24sXG4gIGV4dHJhY3RSb3dzSW5zaWRlRmVhdHVyZSxcbiAgaXNWZWN0b3JUaWxlRXh0cmFjdExheWVyLFxuICBtZXJnZVVzZXJGZWF0dXJlUHJvcGVydGllcyxcbiAgdG9Ta2V0Y2hGZWF0dXJlLFxuICBmZWF0dXJlVG9GaWx0ZXJWYWx1ZSxcbiAgZmlsdGVyRGF0YXNldENQVSxcbiAgZ2VuZXJhdGVQb2x5Z29uRmlsdGVyLFxuICBnZXREZWZhdWx0RmlsdGVyLFxuICBnZXRGaWx0ZXJJZEluRmVhdHVyZSxcbiAgZ2V0VGltZVdpZGdldFRpdGxlRm9ybWF0dGVyLFxuICBpc0luUmFuZ2UsXG4gIGlzT2JqZWN0LFxuICBpc1BsYWluT2JqZWN0LFxuICBpc1JnYkNvbG9yLFxuICBwYXJzZUZpZWxkVmFsdWUsXG4gIHJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyxcbiAgc2V0LFxuICB1cGRhdGVGaWx0ZXJQbG90LFxuICByZW1vdmVGaWx0ZXJQbG90LFxuICBpc0xheWVyQW5pbWF0YWJsZSxcbiAgaXNTaWRlRmlsdGVyLFxuICBnZXRBcHBsaWNhdGlvbkNvbmZpZyxcbiAgdmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHNcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2dlbmVyYXRlSGFzaElkLCB0b0FycmF5LCBhcnJheU1vdmV9IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcbi8vIE1lcmdlcnNcbmltcG9ydCB7XG4gIEFOSU1BVElPTl9XSU5ET1csXG4gIEJBU0VfU1BFRUQsXG4gIENPTVBBUkVfVFlQRVMsXG4gIERFRkFVTFRfVEVYVF9MQUJFTCxcbiAgRURJVE9SX01PREVTLFxuICBGSUxURVJfVFlQRVMsXG4gIEZJTFRFUl9WSUVXX1RZUEVTLFxuICBMQVlFUl9UWVBFUyxcbiAgRlBTLFxuICBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCxcbiAgRElTVEFOQ0VfRk9HX1RZUEUsXG4gIFNVUkZBQ0VfRk9HX1RZUEUsXG4gIE1BWF9ERUZBVUxUX1RPT0xUSVBTLFxuICBQTE9UX1RZUEVTLFxuICBTT1JUX09SREVSLFxuICBTWU5DX1RJTUVMSU5FX01PREVTLFxuICBDSEFOTkVMX1NDQUxFUyxcbiAgU0NBTEVfVFlQRVMsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9LSU5ELFxuICBJTklUSUFMX0FOTk9UQVRJT05fQU5HTEUsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9BUk1fTEVOR1RILFxuICBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9XSURUSCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfSEVJR0hULFxuICBJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1NJREUsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1ZFUlRJQ0FMX1BPU0lUSU9OLFxuICBBTk5PVEFUSU9OX0FOR0xFX0JZX1BMQUNFTUVOVCxcbiAgdGV4dFBsYWNlbWVudEZyb21BbmdsZSxcbiAgQW5ub3RhdGlvbktpbmQsXG4gIERhdGFzZXRUeXBlLFxuICBnZXREYXRhc2V0UmVmcmVzaEludGVydmFsTXMsXG4gIGdldFJlbW90ZVNvdXJjZUZvcm1hdFxufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge0xBWUVSX0lEX0xFTkdUSCwgTGF5ZXIsIExheWVyQ2xhc3Nlc30gZnJvbSAnQGtlcGxlci5nbC9sYXllcnMnO1xuaW1wb3J0IHtcbiAgYXBwbHlfLFxuICBjb21wb3NlXyxcbiAgZmlsdGVyT3V0QnlJZCxcbiAgbWVyZ2VfLFxuICBwYXlsb2FkXyxcbiAgcGlja18sXG4gIHJlbW92ZUVsZW1lbnRBdEluZGV4LFxuICBzd2FwX1xufSBmcm9tICcuL2NvbXBvc2VyLWhlbHBlcnMnO1xuaW1wb3J0IHtpc1ZhbGlkTWVyZ2VyLCBtZXJnZVN0YXRlRnJvbU1lcmdlcnN9IGZyb20gJy4vbWVyZ2VyLWhhbmRsZXInO1xuaW1wb3J0IHtcbiAgVklTX1NUQVRFX01FUkdFUlMsXG4gIGNyZWF0ZUxheWVyRnJvbUNvbmZpZyxcbiAgaXNTYXZlZExheWVyQ29uZmlnVjEsXG4gIHBhcnNlTGF5ZXJDb25maWcsXG4gIHNlcmlhbGl6ZUZpbHRlcixcbiAgc2VyaWFsaXplTGF5ZXIsXG4gIHNlcmlhbGl6ZVZpc1N0YXRlLFxuICB2YWxpZGF0ZUxheWVyV2l0aERhdGFcbn0gZnJvbSAnLi92aXMtc3RhdGUtbWVyZ2VyJztcblxuaW1wb3J0IEtlcGxlckdMU2NoZW1hLCB7TWVyZ2VyLCBQb3N0TWVyZ2VyUGF5bG9hZCwgVmlzU3RhdGV9IGZyb20gJ0BrZXBsZXIuZ2wvc2NoZW1hcyc7XG5pbXBvcnQge2dldEZpbGVzVG9QYXJzZSwgbG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0LCBwcm9jZXNzR2VvanNvbn0gZnJvbSAnQGtlcGxlci5nbC9wcm9jZXNzb3JzJztcblxuaW1wb3J0IHtcbiAgRmlsdGVyLFxuICBGZWF0dXJlLFxuICBJbnRlcmFjdGlvbkNvbmZpZyxcbiAgQW5pbWF0aW9uQ29uZmlnLFxuICBGaWx0ZXJBbmltYXRpb25Db25maWcsXG4gIEVkaXRvcixcbiAgRmllbGQsXG4gIExheWVyVmlzQ29uZmlnLFxuICBUaW1lUmFuZ2VGaWx0ZXIsXG4gIEFubm90YXRpb24sXG4gIEFubm90YXRpb25Qcm9wc1BhcnRpYWwsXG4gIFByb3RvRGF0YXNldCxcbiAgQ2hhcnRDb25maWcsXG4gIExheWVyQ2hhcnRDb25maWdcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge0xvYWRlcn0gZnJvbSAnQGxvYWRlcnMuZ2wvbG9hZGVyLXV0aWxzJztcblxuaW1wb3J0IHtcbiAgRGF0YXNldHMsXG4gIEtlcGxlclRhYmxlLFxuICBGaWx0ZXJQcm9wcyxcbiAgYXNzaWduR3B1Q2hhbm5lbCxcbiAgY29weVRhYmxlQW5kVXBkYXRlLFxuICBjcmVhdGVOZXdEYXRhRW50cnksXG4gIHBpblRhYmxlQ29sdW1ucyxcbiAgc2V0RmlsdGVyR3B1TW9kZSxcbiAgc29ydERhdGFzZXRCeUNvbHVtblxufSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCB7ZmluZEZpZWxkc1RvU2hvd30gZnJvbSAnLi9pbnRlcmFjdGlvbi11dGlscyc7XG5pbXBvcnQge1xuICBjYWxjdWxhdGVMYXllckRhdGEsXG4gIGZpbmREZWZhdWx0TGF5ZXIsXG4gIGdldExheWVyT3JkZXJGcm9tTGF5ZXJzLFxuICBtZXJnZUxheWVyVmlzQ29uZmlnRm9yTmV3RGF0YXNldHMsXG4gIGdldE5ld0xheWVyR3JvdXAsXG4gIGFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlcixcbiAgcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyLFxuICBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIsXG4gIGZpbmRQYXJlbnRHcm91cEZvckxheWVyLFxuICBnZXRJbmRleEZyb21MYXllckVudHJ5SWQsXG4gIHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIsXG4gIGdldEZsYXRMYXllck9yZGVyLFxuICByZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlclxufSBmcm9tICcuL2xheWVyLXV0aWxzJztcbmltcG9ydCB7Z2V0UHJvcFZhbHVlVG9NZXJnZXIsIGhhc1Byb3BzVG9NZXJnZX0gZnJvbSAnLi9tZXJnZXItaGFuZGxlcic7XG5pbXBvcnQge21lcmdlRGF0YXNldHNCeU9yZGVyfSBmcm9tICcuL3Zpcy1zdGF0ZS1tZXJnZXInO1xuaW1wb3J0IHtcbiAgZml4RWZmZWN0T3JkZXIsXG4gIGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzLFxuICBnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLFxuICBtZXJnZVRpbWVEb21haW5zLFxuICBhZGp1c3RWYWx1ZVRvQW5pbWF0aW9uV2luZG93LFxuICB1cGRhdGVUaW1lRmlsdGVyUGxvdFR5cGUsXG4gIGdldERlZmF1bHRUaW1lRm9ybWF0LFxuICBMYXllclRvRmlsdGVyVGltZUludGVydmFsLFxuICBUSU1FX0lOVEVSVkFMU19PUkRFUkVELFxuICBtZXJnZUZpbHRlckRvbWFpbixcbiAgaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlLFxuICBjb2xsZWN0Q29sdW1uVmFsdWVzLFxuICBnZXRDb2x1bW5TdGF0aXN0aWNzXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtjcmVhdGVFZmZlY3R9IGZyb20gJ0BrZXBsZXIuZ2wvZWZmZWN0cyc7XG5pbXBvcnQge1BheWxvYWRBY3Rpb259IGZyb20gJ0ByZWR1eGpzL3Rvb2xraXQnO1xuXG5pbXBvcnQge2ZpbmRNYXBCb3VuZHN9IGZyb20gJy4vZGF0YS11dGlscyc7XG5cbi8vIGRpc2FibGUgc3RhY2sgY2FwdHVyZSBmb3Igd2l0aFRhc2sgY2FsbHMgdGhhdCBoYXBwZW4gb3V0c2lkZSBzdHJpY3QgcmVkdWNlciBjb250ZXh0XG5kaXNhYmxlU3RhY2tDYXB0dXJpbmcoKTtcblxuLyoqXG4gKiBVcGRhdGVycyBmb3IgYHZpc1N0YXRlYCByZWR1Y2VyLiBDYW4gYmUgdXNlZCBpbiB5b3VyIHJvb3QgcmVkdWNlciB0byBkaXJlY3RseSBtb2RpZnkga2VwbGVyLmdsJ3Mgc3RhdGUuXG4gKiBSZWFkIG1vcmUgYWJvdXQgW1VzaW5nIHVwZGF0ZXJzXSguLi9hZHZhbmNlZC11c2FnZS91c2luZy11cGRhdGVycy5tZClcbiAqXG4gKiBAcHVibGljXG4gKiBAZXhhbXBsZVxuICpcbiAqIGltcG9ydCBrZXBsZXJHbFJlZHVjZXIsIHt2aXNTdGF0ZVVwZGF0ZXJzfSBmcm9tICdAa2VwbGVyLmdsL3JlZHVjZXJzJztcbiAqIC8vIFJvb3QgUmVkdWNlclxuICogY29uc3QgcmVkdWNlcnMgPSBjb21iaW5lUmVkdWNlcnMoe1xuICogIGtlcGxlckdsOiBrZXBsZXJHbFJlZHVjZXIsXG4gKiAgYXBwOiBhcHBSZWR1Y2VyXG4gKiB9KTtcbiAqXG4gKiBjb25zdCBjb21wb3NlZFJlZHVjZXIgPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICogIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAqICAgIGNhc2UgJ0NMSUNLX0JVVFRPTic6XG4gKiAgICAgIHJldHVybiB7XG4gKiAgICAgICAgLi4uc3RhdGUsXG4gKiAgICAgICAga2VwbGVyR2w6IHtcbiAqICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLFxuICogICAgICAgICAgZm9vOiB7XG4gKiAgICAgICAgICAgICAuLi5zdGF0ZS5rZXBsZXJHbC5mb28sXG4gKiAgICAgICAgICAgICB2aXNTdGF0ZTogdmlzU3RhdGVVcGRhdGVycy5lbmxhcmdlRmlsdGVyVXBkYXRlcihcbiAqICAgICAgICAgICAgICAgc3RhdGUua2VwbGVyR2wuZm9vLnZpc1N0YXRlLFxuICogICAgICAgICAgICAgICB7aWR4OiAwfVxuICogICAgICAgICAgICAgKVxuICogICAgICAgICAgfVxuICogICAgICAgIH1cbiAqICAgICAgfTtcbiAqICB9XG4gKiAgcmV0dXJuIHJlZHVjZXJzKHN0YXRlLCBhY3Rpb24pO1xuICogfTtcbiAqXG4gKiBleHBvcnQgZGVmYXVsdCBjb21wb3NlZFJlZHVjZXI7XG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuLy8gQHRzLWlnbm9yZVxuY29uc3QgdmlzU3RhdGVVcGRhdGVycyA9IG51bGw7XG4vKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdEludGVyYWN0aW9uQ29uZmlnOiBJbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgdG9vbHRpcDoge1xuICAgIGlkOiAndG9vbHRpcCcsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMudG9vbHRpcCcsXG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICBjb25maWc6IHtcbiAgICAgIGZpZWxkc1RvU2hvdzoge30sXG4gICAgICBjb21wYXJlTW9kZTogZmFsc2UsXG4gICAgICBjb21wYXJlVHlwZTogQ09NUEFSRV9UWVBFUy5BQlNPTFVURVxuICAgIH1cbiAgfSxcbiAgZ2VvY29kZXI6IHtcbiAgICBpZDogJ2dlb2NvZGVyJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5nZW9jb2RlcicsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgcG9zaXRpb246IG51bGwsXG4gICAgY29uZmlnOiB7XG4gICAgICBsaW1pdFNlYXJjaDogZmFsc2VcbiAgICB9XG4gIH0sXG4gIGJydXNoOiB7XG4gICAgaWQ6ICdicnVzaCcsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuYnJ1c2gnLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIGNvbmZpZzoge1xuICAgICAgLy8gc2l6ZSBpcyBpbiBrbVxuICAgICAgc2l6ZTogMC41XG4gICAgfVxuICB9LFxuICBjb29yZGluYXRlOiB7XG4gICAgaWQ6ICdjb29yZGluYXRlJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5jb29yZGluYXRlJyxcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBwb3NpdGlvbjogbnVsbFxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BTklNQVRJT05fQ09ORklHOiBBbmltYXRpb25Db25maWcgPSB7XG4gIGRvbWFpbjogbnVsbCxcbiAgY3VycmVudFRpbWU6IG51bGwsXG4gIHNwZWVkOiAxLFxuICBpc0FuaW1hdGluZzogZmFsc2UsXG4gIHRpbWVTdGVwczogbnVsbCxcbiAgdGltZUZvcm1hdDogbnVsbCxcbiAgdGltZXpvbmU6IG51bGwsXG4gIGRlZmF1bHRUaW1lRm9ybWF0OiBudWxsLFxuICBoaWRlQ29udHJvbDogZmFsc2UsXG4gIGR1cmF0aW9uOiBudWxsXG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9FRElUT1I6IEVkaXRvciA9IHtcbiAgbW9kZTogRURJVE9SX01PREVTLkRSQVdfUE9MWUdPTixcbiAgZmVhdHVyZXM6IFtdLFxuICBzZWxlY3RlZEZlYXR1cmU6IG51bGwsXG4gIHZpc2libGU6IHRydWVcbn07XG5cbi8qKlxuICogRGVmYXVsdCBpbml0aWFsIGB2aXNTdGF0ZWBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAY29uc3RhbnRcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IElOSVRJQUxfVklTX1NUQVRFOiBWaXNTdGF0ZSA9IHtcbiAgLy8gbWFwIGluZm9cbiAgbWFwSW5mbzoge1xuICAgIHRpdGxlOiAnJyxcbiAgICBkZXNjcmlwdGlvbjogJydcbiAgfSxcbiAgLy8gbGF5ZXJzXG4gIGxheWVyczogW10sXG4gIGxheWVyRGF0YTogW10sXG4gIGxheWVyVG9CZU1lcmdlZDogW10sXG4gIGxheWVyT3JkZXI6IFtdLFxuICBsYXllck9yZGVyVG9CZU1lcmdlZDogbnVsbCxcblxuICAvLyBmaWx0ZXJzXG4gIGZpbHRlcnM6IFtdLFxuICBmaWx0ZXJUb0JlTWVyZ2VkOiBbXSxcblxuICAvLyBhIGNvbGxlY3Rpb24gb2YgbXVsdGlwbGUgZGF0YXNldFxuICBkYXRhc2V0czoge30sXG4gIGVkaXRpbmdEYXRhc2V0OiB1bmRlZmluZWQsXG5cbiAgLy8gZWZmZWN0c1xuICBlZmZlY3RzOiBbXSxcbiAgZWZmZWN0T3JkZXI6IFtdLFxuXG4gIC8vIGNoYXJ0cyAoZW5hYmxlZCBieSBkZWZhdWx0OyBnYXRlZCBieSBlbmFibGVDaGFydHNQYW5lbClcbiAgY2hhcnRzOiBbXSxcbiAgY2hhcnRzVG9CZU1lcmdlZDogW10sXG5cbiAgLy8gYW5ub3RhdGlvbnNcbiAgYW5ub3RhdGlvbnM6IFtdLFxuICBhbm5vdGF0aW9uc1RvQmVNZXJnZWQ6IFtdLFxuICBzZWxlY3RlZEFubm90YXRpb25JZDogbnVsbCxcbiAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6IGZhbHNlLFxuXG4gIGludGVyYWN0aW9uQ29uZmlnOiBkZWZhdWx0SW50ZXJhY3Rpb25Db25maWcsXG4gIGludGVyYWN0aW9uVG9CZU1lcmdlZDoge30sXG5cbiAgbGF5ZXJCbGVuZGluZzogJ25vcm1hbCcsXG4gIG92ZXJsYXlCbGVuZGluZzogJ25vcm1hbCcsXG4gIGhvdmVySW5mbzogdW5kZWZpbmVkLFxuICBjbGlja2VkOiB1bmRlZmluZWQsXG4gIG1vdXNlUG9zOiB7fSxcbiAgbWF4RGVmYXVsdFRvb2x0aXBzOiBNQVhfREVGQVVMVF9UT09MVElQUyxcblxuICAvLyB0aGlzIGlzIHVzZWQgd2hlbiB1c2VyIHNwbGl0IG1hcHNcbiAgc3BsaXRNYXBzOiBbXG4gICAgLy8gdGhpcyB3aWxsIGNvbnRhaW4gYSBsaXN0IG9mIG9iamVjdHMgdG9cbiAgICAvLyBkZXNjcmliZSB0aGUgc3RhdGUgb2YgbGF5ZXIgYXZhaWxhYmlsaXR5IGFuZCB2aXNpYmlsaXR5IGZvciBlYWNoIG1hcFxuICAgIC8vIFtcbiAgICAvLyAgIHtcbiAgICAvLyAgICAgIGxheWVyczoge2xheWVyX2lkOiB0cnVlIHwgZmFsc2V9XG4gICAgLy8gICB9XG4gICAgLy8gXVxuICBdLFxuICBzcGxpdE1hcHNUb0JlTWVyZ2VkOiBbXSxcbiAgaXNNZXJnaW5nRGF0YXNldHM6IHt9LFxuICAvLyBkZWZhdWx0cyBsYXllciBjbGFzc2VzXG4gIGxheWVyQ2xhc3NlczogTGF5ZXJDbGFzc2VzLFxuXG4gIC8vIGRlZmF1bHQgYW5pbWF0aW9uXG4gIC8vIHRpbWUgaW4gdW5peCB0aW1lc3RhbXAgKG1pbGxpc2Vjb25kcykgKHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSB0aGUgVW5peCBFcG9jaClcbiAgYW5pbWF0aW9uQ29uZmlnOiBERUZBVUxUX0FOSU1BVElPTl9DT05GSUcsXG5cbiAgZWRpdG9yOiBERUZBVUxUX0VESVRPUixcblxuICBmaWxlTG9hZGluZzogZmFsc2UsXG4gIGZpbGVMb2FkaW5nUHJvZ3Jlc3M6IHt9LFxuICAvLyBmb3IgbG9hZGluZyBkYXRhc2V0c1xuICBsb2FkaW5nSW5kaWNhdG9yVmFsdWU6IDAsXG4gIGxvYWRpbmdQcm9ncmVzczoge30sXG5cbiAgbG9hZGVyczogW10sXG4gIGxvYWRPcHRpb25zOiB7fSxcblxuICAvLyB2aXNTdGF0ZU1lcmdlcnNcbiAgbWVyZ2VyczogVklTX1NUQVRFX01FUkdFUlMsXG5cbiAgLy8ga2VwbGVyIHNjaGVtYXNcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYVxufTtcblxuZXhwb3J0IGNvbnN0IEFDVElPTl9UQVNLX0ZJVF9CT1VORFMgPSBUYXNrLmZyb21DYWxsYmFjayhcbiAgKF8sIGNiKSA9PiBjYigpLFxuXG4gICdBQ1RJT05fVEFTS19GSVRfQk9VTkRTJ1xuKTtcblxuZXhwb3J0IGNvbnN0IEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04gPSBUYXNrLmZyb21DYWxsYmFjayhcbiAgKF8sIGNiKSA9PiBjYigpLFxuXG4gICdBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OJ1xuKTtcblxudHlwZSBVcGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGFUeXBlID0ge1xuICBsYXllcnM6IExheWVyW107XG4gIGxheWVyRGF0YTogYW55W107XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBzdGF0ZSB3aXRoIHVwZGF0ZWQgbGF5ZXIgYW5kIGxheWVyRGF0YVxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YTxTIGV4dGVuZHMgVXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhVHlwZT4oXG4gIHN0YXRlOiBTLFxuICB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fToge2xheWVyRGF0YT86IGFueTsgbGF5ZXI6IExheWVyOyBpZHg6IG51bWJlcn1cbik6IFMge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3RhdGUubGF5ZXJzLm1hcCgobHlyLCBpKSA9PiAoaSA9PT0gaWR4ID8gbGF5ZXIgOiBseXIpKSxcbiAgICBsYXllckRhdGE6IGxheWVyRGF0YVxuICAgICAgPyBzdGF0ZS5sYXllckRhdGEubWFwKChkLCBpKSA9PiAoaSA9PT0gaWR4ID8gbGF5ZXJEYXRhIDogZCkpXG4gICAgICA6IHN0YXRlLmxheWVyRGF0YVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVPbkxheWVyVmlzaWJpbGl0eUNoYW5nZTxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBsYXllcjogTGF5ZXIpOiBTIHtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGlmIChzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHNwbGl0TWFwczogbGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgICAgICA/IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAoc3RhdGUuc3BsaXRNYXBzLCBsYXllcilcbiAgICAgICAgOiByZW1vdmVMYXllckZyb21TcGxpdE1hcHMoc3RhdGUuc3BsaXRNYXBzLCBsYXllcilcbiAgICB9O1xuICB9XG5cbiAgaWYgKGxheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0d28gb2JqZWN0cyAob3IgYXJyYXlzKSBhbmQgcmV0dXJucyBhIG5ldyBvYmplY3Qgd2l0aCBvbmx5IHRoZVxuICogcHJvcGVydGllcyB0aGF0IGhhdmUgY2hhbmdlZCBiZXR3ZWVuIHRoZSB0d28gb2JqZWN0cy5cbiAqL1xuZnVuY3Rpb24gcGlja0NoYW5nZWRQcm9wczxUPihwcmV2OiBULCBuZXh0OiBUKTogUGFydGlhbDxUPiB7XG4gIGNvbnN0IGNoYW5nZWRQcm9wczogUGFydGlhbDxUPiA9IHt9O1xuICBjb25zdCBwaWNrUHJvcHNPZiA9IG9iaiA9PiB7XG4gICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlZFByb3BzLCBrZXkpICYmXG4gICAgICAgICFpc0VxdWFsKHByZXZba2V5XSwgbmV4dFtrZXldKVxuICAgICAgKSB7XG4gICAgICAgIGNoYW5nZWRQcm9wc1trZXldID0gbmV4dFtrZXldO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBwaWNrUHJvcHNPZihwcmV2KTtcbiAgcGlja1Byb3BzT2YobmV4dCk7XG4gIHJldHVybiBjaGFuZ2VkUHJvcHM7XG59XG5cbmNvbnN0IFZJU1VBTF9DSEFOTkVMX1BST1BfVFlQRVMgPSBbJ2ZpZWxkJywgJ3NjYWxlJywgJ2RvbWFpbicsICdhZ2dyZWdhdGlvbiddO1xuXG4vKipcbiAqIEFwcGx5IGxheWVyIGNvbmZpZ1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eSwgbWF4LXN0YXRlbWVudHNcbmV4cG9ydCBmdW5jdGlvbiBhcHBseUxheWVyQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BcHBseUxheWVyQ29uZmlnVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXJJZCwgbmV3TGF5ZXJDb25maWcsIGxheWVySW5kZXh9ID0gYWN0aW9uO1xuICAvLyBTYXZlZCBjb25maWdzIGhhdmUgYSB2aXN1YWxDaGFubmVscyBzaWJsaW5nOyBwYXJzZWQvZWRpdG9yIEpTT04gZm9sZHMgdGhvc2VcbiAgLy8gZmllbGRzIGludG8gY29uZmlnLiBSZS1wYXJzaW5nIHRoZSBsYXR0ZXIgZHJvcHMgY29sb3JGaWVsZCBhbmQgcmVzZXRzIHRoZSBzY2FsZS5cbiAgY29uc3QgbmV3UGFyc2VkTGF5ZXIgPSBpc1NhdmVkTGF5ZXJDb25maWdWMShuZXdMYXllckNvbmZpZylcbiAgICA/IHBhcnNlTGF5ZXJDb25maWcoc3RhdGUuc2NoZW1hLCBuZXdMYXllckNvbmZpZylcbiAgICA6IG5ld0xheWVyQ29uZmlnO1xuICBjb25zdCBvbGRMYXllciA9IHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXJJZCk7XG4gIGlmICghb2xkTGF5ZXIgfHwgIW5ld1BhcnNlZExheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChsYXllckluZGV4ICE9PSBudWxsICYmIGxheWVySW5kZXggIT09IHVuZGVmaW5lZCAmJiBzdGF0ZS5sYXllcnNbbGF5ZXJJbmRleF0gIT09IG9sZExheWVyKSB7XG4gICAgLy8gbGF5ZXJJbmRleCBpcyBwcm92aWRlZCwgYnV0IGl0IGRvZXNuJ3QgbWF0Y2ggdGhlIG9sZExheWVyXG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tuZXdQYXJzZWRMYXllci5jb25maWcuZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIC8vIE1ha2Ugc3VyZSB0aGUgbGF5ZXIgaXMgdmFsaWQgYW5kIGNvbnZlcnQgaXQgdG8gTGF5ZXJcbiAgY29uc3QgbmV3TGF5ZXIgPSB2YWxpZGF0ZUxheWVyV2l0aERhdGEoZGF0YXNldCwgbmV3UGFyc2VkTGF5ZXIsIHN0YXRlLmxheWVyQ2xhc3Nlcyk7XG4gIGlmICghbmV3TGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgbmV4dFN0YXRlID0gc3RhdGU7XG5cbiAgaWYgKG5ld0xheWVyLnR5cGUgJiYgbmV3TGF5ZXIudHlwZSAhPT0gb2xkTGF5ZXIudHlwZSkge1xuICAgIGNvbnN0IG9sZExheWVySW5kZXggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXJJZCk7XG4gICAgaWYgKG9sZExheWVySW5kZXggPj0gMCkge1xuICAgICAgbmV4dFN0YXRlID0gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcihuZXh0U3RhdGUsIGxheWVyVHlwZUNoYW5nZShvbGRMYXllciwgbmV3TGF5ZXIudHlwZSkpO1xuICAgICAgLy8gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlciBjaGFuZ2VzIHRoZSBpZCBvZiB0aGUgbGF5ZXIsIHNvIHdlIG5lZWQgdG8gb2J0YWluIHRoZSBuZXcgaWRcbiAgICAgIC8vIGJ1dCBmaXJzdCBtYWtlIHN1cmUgdGhhdCB0aGUgbGF5ZXIgd2FzIG5vdCByZW1vdmVkXG4gICAgICBpZiAobmV4dFN0YXRlLmxheWVycy5sZW5ndGggPT09IHN0YXRlLmxheWVycy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgbmV3TGF5ZXJJZCA9IG5leHRTdGF0ZS5sYXllcnNbb2xkTGF5ZXJJbmRleF0uaWQ7XG4gICAgICAgIG5leHRTdGF0ZSA9IGFwcGx5TGF5ZXJDb25maWdVcGRhdGVyKFxuICAgICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgICBhcHBseUxheWVyQ29uZmlnKG5ld0xheWVySWQsIHsuLi5uZXdMYXllckNvbmZpZywgaWQ6IG5ld0xheWVySWR9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV4dFN0YXRlO1xuICB9XG5cbiAgLy8gc2VyaWFsaXplTGF5ZXIoKSBtaWdodCByZXR1cm4gbnVsbCBpZiB0aGUgb2xkIGxheWVyIGlzIG5vdCB2YWxpZCxcbiAgLy8gd2Ugc2hvdWxkIHN0aWxsIGFwcGx5IHRoZSBjaGFuZ2VzIGluIHRoYXQgY2FzZVxuICBjb25zdCBzZXJpYWxpemVkT2xkTGF5ZXIgPSBzZXJpYWxpemVMYXllcihvbGRMYXllciwgc3RhdGUuc2NoZW1hKSA/PyB7Y29uZmlnOiB7fX07XG4gIGNvbnN0IHNlcmlhbGl6ZWROZXdMYXllciA9IHNlcmlhbGl6ZUxheWVyKG5ld0xheWVyLCBzdGF0ZS5zY2hlbWEpO1xuICBpZiAoIXNlcmlhbGl6ZWROZXdMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoIWlzRXF1YWwoc2VyaWFsaXplZE9sZExheWVyLCBzZXJpYWxpemVkTmV3TGF5ZXIpKSB7XG4gICAgY29uc3QgY2hhbmdlZCA9IHBpY2tDaGFuZ2VkUHJvcHMoc2VyaWFsaXplZE9sZExheWVyLmNvbmZpZywgc2VyaWFsaXplZE5ld0xheWVyLmNvbmZpZyk7XG5cbiAgICBpZiAoJ3Zpc0NvbmZpZycgaW4gY2hhbmdlZCkge1xuICAgICAgaWYgKGNoYW5nZWQudmlzQ29uZmlnKSB7XG4gICAgICAgIG5leHRTdGF0ZSA9IGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgbGF5ZXJWaXNDb25maWdDaGFuZ2Uob2xkTGF5ZXIsIGNoYW5nZWQudmlzQ29uZmlnKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgZGVsZXRlIGNoYW5nZWQudmlzQ29uZmlnO1xuICAgIH1cblxuICAgIE9iamVjdC5rZXlzKG9sZExheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKGNoYW5uZWxOYW1lID0+IHtcbiAgICAgIGNvbnN0IGNoYW5uZWwgPSBvbGRMYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsTmFtZV07XG4gICAgICBjb25zdCBjaGFubmVsUHJvcE5hbWVzID0gVklTVUFMX0NIQU5ORUxfUFJPUF9UWVBFUy5tYXAocHJvcCA9PiBjaGFubmVsW3Byb3BdKTtcbiAgICAgIGlmIChjaGFubmVsUHJvcE5hbWVzLnNvbWUocHJvcCA9PiBwcm9wIGluIGNoYW5nZWQpKSB7XG4gICAgICAgIG5leHRTdGF0ZSA9IGxheWVyVmlzdWFsQ2hhbm5lbENoYW5nZVVwZGF0ZXIoXG4gICAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICAgIGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZShcbiAgICAgICAgICAgIG9sZExheWVyLFxuICAgICAgICAgICAgcGljayhuZXdMYXllci5jb25maWcsIGNoYW5uZWxQcm9wTmFtZXMpLFxuICAgICAgICAgICAgY2hhbm5lbE5hbWVcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBjaGFubmVsUHJvcE5hbWVzKSB7XG4gICAgICAgICAgZGVsZXRlIGNoYW5nZWRbcHJvcF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChPYmplY3Qua2V5cyhjaGFuZ2VkKS5sZW5ndGggPiAwKSB7XG4gICAgICBuZXh0U3RhdGUgPSBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgbGF5ZXJDb25maWdDaGFuZ2Uob2xkTGF5ZXIsIHBpY2sobmV3TGF5ZXIuY29uZmlnLCBPYmplY3Qua2V5cyhjaGFuZ2VkKSkpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZWxheWVyVmlzaWJpbHR5KHN0YXRlOiBWaXNTdGF0ZSwgbmV3TGF5ZXI6IExheWVyLCBpc1Zpc2libGU/OiBib29sZWFuKTogVmlzU3RhdGUge1xuICBsZXQgbmV3U3RhdGUgPSB1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlKHN0YXRlLCBuZXdMYXllcik7XG4gIGNvbnN0IGZpbHRlckluZGV4ID0gZmlsdGVyU3luY2VkV2l0aFRpbWVsaW5lKHN0YXRlKTtcbiAgaWYgKGlzTGF5ZXJBbmltYXRhYmxlKG5ld0xheWVyKSAmJiBmaWx0ZXJJbmRleCAhPT0gLTEpIHtcbiAgICAvLyBpZiBsYXllciBpcyBnb2luZyB0byBiZSB2aXNpYmxlIHdlIHN5bmMgd2l0aCBmaWx0ZXIgb3RoZXJ3aXNlIHdlIG5lZWQgdG8gY2hlY2sgd2hldGhlciBvdGhlciBhbmltYXRhYmxlIGxheWVycyBleGlzdHMgYW5kIGFyZSB2aXNpYmxlXG4gICAgbmV3U3RhdGUgPSBzeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWR4OiBmaWx0ZXJJbmRleCxcbiAgICAgIGVuYWJsZTogaXNWaXNpYmxlID8gaXNWaXNpYmxlIDogZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMoc3RhdGUubGF5ZXJzKS5sZW5ndGggPiAwXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBiYXNlIGNvbmZpZzogZGF0YUlkLCBsYWJlbCwgY29sdW1uLCBpc1Zpc2libGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBmdW5jdGlvbiBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllcn0gPSBhY3Rpb247XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGNvbnN0IHByb3BzID0gT2JqZWN0LmtleXMoYWN0aW9uLm5ld0NvbmZpZyk7XG4gIGlmIChcbiAgICB0eXBlb2YgYWN0aW9uLm5ld0NvbmZpZy5kYXRhSWQgPT09ICdzdHJpbmcnICYmXG4gICAgYWN0aW9uLm5ld0NvbmZpZy5kYXRhSWQgIT09IG9sZExheWVyLmNvbmZpZy5kYXRhSWRcbiAgKSB7XG4gICAgY29uc3Qge2RhdGFJZCwgLi4ucmVzdENvbmZpZ30gPSBhY3Rpb24ubmV3Q29uZmlnO1xuICAgIGNvbnN0IHN0YXRlV2l0aERhdGFJZCA9IGxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgICAgb2xkTGF5ZXIsXG4gICAgICBuZXdDb25maWc6IHtkYXRhSWR9XG4gICAgfSk7XG4gICAgY29uc3QgbmV4dExheWVyID0gc3RhdGVXaXRoRGF0YUlkLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICAgIHJldHVybiBuZXh0TGF5ZXIgJiYgT2JqZWN0LmtleXMocmVzdENvbmZpZykubGVuZ3RoXG4gICAgICA/IGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZVdpdGhEYXRhSWQsIHtvbGRMYXllcjogbmV4dExheWVyLCBuZXdDb25maWc6IHJlc3RDb25maWd9KVxuICAgICAgOiBzdGF0ZVdpdGhEYXRhSWQ7XG4gIH1cblxuICBsZXQgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyhhY3Rpb24ubmV3Q29uZmlnKTtcblxuICBsZXQgbGF5ZXJEYXRhO1xuXG4gIGlmIChuZXdMYXllci5zaG91bGRDYWxjdWxhdGVMYXllckRhdGEocHJvcHMpKSB7XG4gICAgY29uc3Qgb2xkTGF5ZXJEYXRhID0gc3RhdGUubGF5ZXJEYXRhW2lkeF07XG5cbiAgICBjb25zdCB1cGRhdGVMYXllckRhdGFSZXN1bHQgPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCBvbGRMYXllckRhdGEpO1xuICAgIG5ld0xheWVyID0gdXBkYXRlTGF5ZXJEYXRhUmVzdWx0LmxheWVyO1xuICAgIGxheWVyRGF0YSA9IHVwZGF0ZUxheWVyRGF0YVJlc3VsdC5sYXllckRhdGE7XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgaWYgKCdpc1Zpc2libGUnIGluIGFjdGlvbi5uZXdDb25maWcpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZWxheWVyVmlzaWJpbHR5KG5ld1N0YXRlLCBuZXdMYXllciwgYWN0aW9uLm5ld0NvbmZpZy5pc1Zpc2libGUpO1xuICB9XG5cbiAgaWYgKCdjb2x1bW5zJyBpbiBhY3Rpb24ubmV3Q29uZmlnICYmIG5ld0xheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIC8vIFRPRE86IFNoYW4sIG1ha2UgdGhlIGFuaW1hdGlvbiBjb25maWcgZnVuY3Rpb24gbW9yZSByb2J1c3RcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5ld1N0YXRlLCB7XG4gICAgbGF5ZXI6IG5ld0xheWVyLFxuICAgIGxheWVyRGF0YSxcbiAgICBpZHhcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXllckFuaW1hdGlvbkNoYW5nZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgYWN0aW9uKTogUyB7XG4gIGNvbnN0IHtvbGRMYXllciwgcHJvcCwgdmFsdWV9ID0gYWN0aW9uO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuXG4gIGNvbnN0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgIGFuaW1hdGlvbjoge1xuICAgICAgLi4ub2xkTGF5ZXIuY29uZmlnLmFuaW1hdGlvbixcbiAgICAgIFtwcm9wXTogdmFsdWVcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIHN0YXRlLmxheWVyRGF0YVtpZHhdKTtcblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVySWQsIGlzVmlzaWJsZSwgc3BsaXRNYXBJZFxuICogaGFuZGxlcyB0d28gY2FzZXM6XG4gKiAxKSB0b2dnbGUgdGhlIHZpc2liaWxpdHkgb2YgbG9jYWwgU3BsaXRNYXAgbGF5ZXIgKHZpc1N0YXRlLnNwbGl0TWFwLmxheWVycylcbiAqIDIpIHRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiBnbG9iYWwgbGF5ZXIgKHZpc1N0YXRlLmxheWVycylcblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJUb2dnbGVWaXNpYmlsaXR5VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclRvZ2dsZVZpc2liaWxpdHlVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtsYXllcklkLCBpc1Zpc2libGUsIHNwbGl0TWFwSWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllciA9IHN0YXRlLmxheWVycy5maW5kKGQgPT4gZC5pZCA9PT0gbGF5ZXJJZCk7XG5cbiAgaWYgKCFsYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuXG4gIGlmIChzcGxpdE1hcElkKSB7XG4gICAgLy8gW2Nhc2UgMV06IHRvZ2dsZSBsb2NhbCBsYXllciB2aXNpYmlsaXR5IGZvciBlYWNoIFNwbGl0TWFwXG4gICAgY29uc3QgbWFwSW5kZXggPSBuZXdTdGF0ZS5zcGxpdE1hcHMuZmluZEluZGV4KHNtID0+IHNtLmlkID09PSBzcGxpdE1hcElkKTtcbiAgICBpZiAoaXNWaXNpYmxlKSB7XG4gICAgICAvLyAxKSBpZiB0aGUgbGF5ZXIgaXMgaW52aXNpYmxlIGdsb2JhbGx5XG4gICAgICAvLyAtPiBzZXQgZ2xvYmFsIHZpc2liaWxpdHkgdG8gdHJ1ZVxuICAgICAgbmV3U3RhdGUgPSBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIobmV3U3RhdGUsIGxheWVyQ29uZmlnQ2hhbmdlKGxheWVyLCB7aXNWaXNpYmxlOiB0cnVlfSkpO1xuXG4gICAgICAvLyAtPiBzZXQgbG9jYWwgdmlzaWJpbGl0eSB0byB0cnVlIGFuZCB0aGUgbG9jYWwgdmlzaWJpbGl0aWVzIG9mIGFsbCBvdGhlciBTcGxpdE1hcHMgdG8gZmFsc2VcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgICBzcGxpdE1hcHM6IG5ld1N0YXRlLnNwbGl0TWFwcy5tYXAoc20gPT5cbiAgICAgICAgICBzbS5pZCAhPT0gc3BsaXRNYXBJZFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgLi4uc20sXG4gICAgICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgICAgICAuLi5zbS5sYXllcnMsXG4gICAgICAgICAgICAgICAgICBbbGF5ZXJJZF06IGZhbHNlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAuLi5zbSxcbiAgICAgICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgICAgIC4uLnNtLmxheWVycyxcbiAgICAgICAgICAgICAgICAgIFtsYXllcklkXTogdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9O1xuICAgIH1cbiAgICAvLyAyKSBlbHNlIHdoZW4gdGhlIGxheWVyIGlzIHZpc2libGUgZ2xvYmFsbHlcbiAgICByZXR1cm4gdG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyKG5ld1N0YXRlLCB0b2dnbGVMYXllckZvck1hcChtYXBJbmRleCwgbGF5ZXJJZCkpO1xuICB9IGVsc2Uge1xuICAgIC8vIFtjYXNlIDJdOiB0b2dnbGUgZ2xvYmFsIGxheWVyIHZpc2liaWxpdHlcbiAgICBjb25zdCBuZXdMYXllciA9IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtpc1Zpc2libGV9KTtcbiAgICBjb25zdCBpZHggPSBuZXdTdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gbGF5ZXJJZCk7XG5cbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZWxheWVyVmlzaWJpbHR5KG5ld1N0YXRlLCBuZXdMYXllciwgaXNWaXNpYmxlKTtcbiAgICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5ld1N0YXRlLCB7XG4gICAgICBsYXllcjogbmV3TGF5ZXIsXG4gICAgICBpZHhcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gc3RhdGVcbiAqIEByZXR1cm5zIGluZGV4IG9mIHRoZSBmaWx0ZXIgc3luY2VkIHRvIHRpbWVsaW5lIG9yIC0xXG4gKi9cbmZ1bmN0aW9uIGZpbHRlclN5bmNlZFdpdGhUaW1lbGluZShzdGF0ZTogVmlzU3RhdGUpOiBudW1iZXIge1xuICByZXR1cm4gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiAoZiBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lKTtcbn1cblxuLyoqXG4gKiBVcGRhdGVzIGlzVmFsaWQgZmxhZyBvZiBhIGxheWVyLlxuICogVXBkYXRlcyBpc1Zpc2libGUgYmFzZWQgb24gdGhlIHZhbHVlIG9mIGlzVmFsaWQuXG4gKiBUcmlnZ2VycyB1cGRhdGUgb2YgZGF0YSBmb3IgdGhlIGxheWVyIGluIG9yZGVyIHRvIGdldCBlcnJvcnMgYWdhaW4gZHVyaW5nIG5leHQgdXBkYXRlIGl0ZXJhdGlvbi5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyU2V0SXNWYWxpZFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJTZXRJc1ZhbGlkVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIGlzVmFsaWR9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGNvbnN0IGxheWVyVG9VcGRhdGUgPSBzdGF0ZS5sYXllcnNbaWR4XTtcbiAgaWYgKGxheWVyVG9VcGRhdGUpIHtcbiAgICBsZXQgbmV3TGF5ZXI7XG4gICAgbGV0IG5ld0RhdGEgPSBudWxsO1xuXG4gICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgIC8vIFRyaWdnZXIgZGF0YSB1cGRhdGUgaW4gb3JkZXIgdG8gc2hvdyBlcnJvcnMgYWdhaW4gaWYgcHJlc2VudC5cbiAgICAgIGNvbnN0IHtsYXllciwgbGF5ZXJEYXRhfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShsYXllclRvVXBkYXRlLCBzdGF0ZSwgdW5kZWZpbmVkKTtcbiAgICAgIG5ld0xheWVyID0gbGF5ZXI7XG4gICAgICBuZXdEYXRhID0gbGF5ZXJEYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllciA9IGxheWVyVG9VcGRhdGUudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICBpc1Zpc2libGU6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIG5ld0xheWVyLmlzVmFsaWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHN0YXRlLCB7aWR4LCBsYXllcjogbmV3TGF5ZXIsIGxheWVyRGF0YTogbmV3RGF0YX0pO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5mdW5jdGlvbiBhZGRPclJlbW92ZVRleHRMYWJlbHMobmV3RmllbGRzLCB0ZXh0TGFiZWwsIGRlZmF1bHRUZXh0TGFiZWwgPSBERUZBVUxUX1RFWFRfTEFCRUwpIHtcbiAgbGV0IG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5zbGljZSgpO1xuXG4gIGNvbnN0IGN1cnJlbnRGaWVsZHMgPSB0ZXh0TGFiZWwubWFwKHRsID0+IHRsLmZpZWxkICYmIHRsLmZpZWxkLm5hbWUpLmZpbHRlcihkID0+IGQpO1xuXG4gIGNvbnN0IGFkZEZpZWxkcyA9IG5ld0ZpZWxkcy5maWx0ZXIoZiA9PiAhY3VycmVudEZpZWxkcy5pbmNsdWRlcyhmLm5hbWUpKTtcbiAgY29uc3QgZGVsZXRlRmllbGRzID0gY3VycmVudEZpZWxkcy5maWx0ZXIoZiA9PiAhbmV3RmllbGRzLmZpbmQoZmQgPT4gZmQubmFtZSA9PT0gZikpO1xuXG4gIC8vIGRlbGV0ZVxuICBuZXdUZXh0TGFiZWwgPSBuZXdUZXh0TGFiZWwuZmlsdGVyKHRsID0+IHRsLmZpZWxkICYmICFkZWxldGVGaWVsZHMuaW5jbHVkZXModGwuZmllbGQubmFtZSkpO1xuICBuZXdUZXh0TGFiZWwgPSAhbmV3VGV4dExhYmVsLmxlbmd0aCA/IFtkZWZhdWx0VGV4dExhYmVsXSA6IG5ld1RleHRMYWJlbDtcblxuICAvLyBhZGRcbiAgbmV3VGV4dExhYmVsID0gW1xuICAgIC4uLm5ld1RleHRMYWJlbC5maWx0ZXIodGwgPT4gdGwuZmllbGQpLFxuICAgIC4uLmFkZEZpZWxkcy5tYXAoYWYgPT4gKHtcbiAgICAgIC4uLmRlZmF1bHRUZXh0TGFiZWwsXG4gICAgICBmaWVsZDogYWYsXG4gICAgICBjb2xsaXNpb25FbmFibGVkOiBCb29sZWFuKFxuICAgICAgICB0ZXh0TGFiZWwuZmluZCh0bCA9PiB0bC5jb2xsaXNpb25FbmFibGVkKT8uY29sbGlzaW9uRW5hYmxlZCA/P1xuICAgICAgICAgIGRlZmF1bHRUZXh0TGFiZWwuY29sbGlzaW9uRW5hYmxlZFxuICAgICAgKVxuICAgIH0pKVxuICBdO1xuXG4gIHJldHVybiBuZXdUZXh0TGFiZWw7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVRleHRMYWJlbFByb3BBbmRWYWx1ZShpZHgsIHByb3AsIHZhbHVlLCB0ZXh0TGFiZWwpIHtcbiAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGV4dExhYmVsW2lkeF0sIHByb3ApKSB7XG4gICAgcmV0dXJuIHRleHRMYWJlbDtcbiAgfVxuXG4gIGxldCBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc2xpY2UoKTtcblxuICBpZiAocHJvcCA9PT0gJ2ZpZWxkJyAmJiB2YWx1ZSA9PT0gbnVsbCAmJiB0ZXh0TGFiZWwubGVuZ3RoID4gMSkge1xuICAgIC8vIHJlbW92ZSBsYWJlbCB3aGVuIGZpZWxkIHZhbHVlIGlzIHNldCB0byBudWxsXG4gICAgbmV3VGV4dExhYmVsLnNwbGljZShpZHgsIDEpO1xuICB9IGVsc2UgaWYgKHByb3ApIHtcbiAgICBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwubWFwKCh0bCwgaSkgPT4gKGkgPT09IGlkeCA/IHsuLi50bCwgW3Byb3BdOiB2YWx1ZX0gOiB0bCkpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1RleHRMYWJlbDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYmFzZSBjb25maWc6IGRhdGFJZCwgbGFiZWwsIGNvbHVtbiwgaXNWaXNpYmxlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgaWR4LCBwcm9wLCB2YWx1ZX0gPSBhY3Rpb247XG4gIGNvbnN0IHt0ZXh0TGFiZWx9ID0gb2xkTGF5ZXIuY29uZmlnO1xuXG4gIC8vIHdoZW4gYWRkaW5nIGEgbmV3IGVtcHR5IHRleHQgbGFiZWwsXG4gIC8vIHJlbHkgb24gdGhlIGxheWVyJ3MgZGVmYXVsdCBjb25maWcsIG9yIHVzZSB0aGUgY29uc3RhbnQgREVGQVVMVF9URVhUX0xBQkVMXG4gIGNvbnN0IGRlZmF1bHRUZXh0TGFiZWwgPVxuICAgIG9sZExheWVyLmdldERlZmF1bHRMYXllckNvbmZpZyh7ZGF0YUlkOiAnJ30pPy50ZXh0TGFiZWw/LlswXSA/PyBERUZBVUxUX1RFWFRfTEFCRUw7XG5cbiAgbGV0IG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5zbGljZSgpO1xuICBpZiAoIXRleHRMYWJlbFtpZHhdICYmIGlkeCA9PT0gdGV4dExhYmVsLmxlbmd0aCkge1xuICAgIC8vIGlmIGlkeCBpcyBzZXQgdG8gbGVuZ3RoLCBhZGQgZW1wdHkgdGV4dCBsYWJlbFxuICAgIG5ld1RleHRMYWJlbCA9IFtcbiAgICAgIC4uLnRleHRMYWJlbCxcbiAgICAgIHtcbiAgICAgICAgLi4uZGVmYXVsdFRleHRMYWJlbCxcbiAgICAgICAgY29sbGlzaW9uRW5hYmxlZDogQm9vbGVhbih0ZXh0TGFiZWxbMF0/LmNvbGxpc2lvbkVuYWJsZWQpXG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIGlmIChpZHggPT09ICdhbGwnICYmIHByb3AgPT09ICdmaWVsZHMnKSB7XG4gICAgbmV3VGV4dExhYmVsID0gYWRkT3JSZW1vdmVUZXh0TGFiZWxzKHZhbHVlLCB0ZXh0TGFiZWwsIGRlZmF1bHRUZXh0TGFiZWwpO1xuICB9IGVsc2UgaWYgKGlkeCA9PT0gJ2FsbCcgJiYgcHJvcCkge1xuICAgIG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5tYXAodGwgPT4gKHsuLi50bCwgW3Byb3BdOiB2YWx1ZX0pKTtcbiAgfSBlbHNlIHtcbiAgICBuZXdUZXh0TGFiZWwgPSB1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUoaWR4LCBwcm9wLCB2YWx1ZSwgbmV3VGV4dExhYmVsKTtcbiAgfVxuICAvLyB1cGRhdGUgdGV4dCBsYWJlbCBwcm9wIGFuZCB2YWx1ZVxuICByZXR1cm4gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKHN0YXRlLCB7XG4gICAgb2xkTGF5ZXIsXG4gICAgbmV3Q29uZmlnOiB7dGV4dExhYmVsOiBuZXdUZXh0TGFiZWx9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBsYXllckNsYXNzZXMsIGxheWVyLCBzY2hlbWEpIHtcbiAgY29uc3QgbG9hZGVkTGF5ZXIgPSBzZXJpYWxpemVMYXllcihsYXllciwgc2NoZW1hKTtcbiAgcmV0dXJuIGxvYWRlZExheWVyXG4gICAgPyB2YWxpZGF0ZUxheWVyV2l0aERhdGEoZGF0YXNldCwgbG9hZGVkTGF5ZXIsIGxheWVyQ2xhc3Nlcywge1xuICAgICAgICBhbGxvd0VtcHR5Q29sdW1uOiB0cnVlXG4gICAgICB9KVxuICAgIDogbnVsbDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgY29uZmlnIGRhdGFJZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJEYXRhSWRDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjoge1xuICAgIG9sZExheWVyOiBMYXllcjtcbiAgICBuZXdDb25maWc6IHtcbiAgICAgIGRhdGFJZDogc3RyaW5nO1xuICAgIH07XG4gIH1cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBuZXdDb25maWd9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YUlkfSA9IG5ld0NvbmZpZztcblxuICBpZiAoIW9sZExheWVyIHx8ICFzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG5cbiAgbGV0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2RhdGFJZH0pO1xuXG4gIC8vIHRoaXMgbWF5IGhhcHBlbiB3aGVuIGEgbGF5ZXIgaXMgbmV3ICh0eXBlOiBudWxsIGFuZCBubyBjb2x1bW5zKSBidXQgaXQncyBub3QgcmVhZHkgdG8gYmUgc2F2ZWRcbiAgaWYgKG5ld0xheWVyLmlzVmFsaWRUb1NhdmUoKSkge1xuICAgIGNvbnN0IHZhbGlkYXRlZCA9IHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKFxuICAgICAgc3RhdGUuZGF0YXNldHNbZGF0YUlkXSxcbiAgICAgIHN0YXRlLmxheWVyQ2xhc3NlcyxcbiAgICAgIG5ld0xheWVyLFxuICAgICAgc3RhdGUuc2NoZW1hXG4gICAgKTtcbiAgICAvLyBpZiBjYW50IHZhbGlkYXRlIGl0IHdpdGggZGF0YSBjcmVhdGUgYSBuZXcgb25lXG4gICAgaWYgKCF2YWxpZGF0ZWQpIHtcbiAgICAgIGNvbnN0IG9sZExheWVyVHlwZSA9IG9sZExheWVyLnR5cGU7XG4gICAgICBpZiAob2xkTGF5ZXJUeXBlKSB7XG4gICAgICAgIG5ld0xheWVyID0gbmV3IHN0YXRlLmxheWVyQ2xhc3Nlc1tvbGRMYXllclR5cGVdKHtkYXRhSWQsIGlkOiBvbGRMYXllci5pZH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllciA9IHZhbGlkYXRlZDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gTGF5ZXIgaXMgbm90IHZhbGlkIHRvIHNhdmUgKGUuZy4gbWlzc2luZyBjb2x1bW5zKSwgYnV0IHdlIHN0aWxsIG5lZWQgdG9cbiAgICAvLyByZW1hcCB2aXN1YWwgY2hhbm5lbCBmaWVsZHMgdG8gdGhlIG5ldyBkYXRhc2V0IHRvIGF2b2lkIHN0YWxlIGZpZWxkIHJlZmVyZW5jZXNcbiAgICAvLyB0aGF0IHBvaW50IHRvIHJvd3MgYmV5b25kIHRoZSBuZXcgZGF0YXNldCdzIGxlbmd0aFxuICAgIGNvbnN0IG5ld0RhdGFzZXRGaWVsZHMgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdLmZpZWxkcztcbiAgICBjb25zdCByZW1hcHBlZEZpZWxkczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgIE9iamVjdC52YWx1ZXMobmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goKHtmaWVsZDogZmllbGRLZXl9KSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50RmllbGQgPSBuZXdMYXllci5jb25maWdbZmllbGRLZXldO1xuICAgICAgaWYgKGN1cnJlbnRGaWVsZCkge1xuICAgICAgICBjb25zdCBtYXRjaGVkID0gbmV3RGF0YXNldEZpZWxkcy5maW5kKGYgPT4gZi5uYW1lID09PSBjdXJyZW50RmllbGQubmFtZSk7XG4gICAgICAgIHJlbWFwcGVkRmllbGRzW2ZpZWxkS2V5XSA9IG1hdGNoZWQgfHwgbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoT2JqZWN0LmtleXMocmVtYXBwZWRGaWVsZHMpLmxlbmd0aCkge1xuICAgICAgbmV3TGF5ZXIgPSBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyhyZW1hcHBlZEZpZWxkcyk7XG4gICAgfVxuICAgIC8vIFZhbGlkYXRlIGZpZWxkIHR5cGUgY29tcGF0aWJpbGl0eSDigJQgY2xlYXJzIGZpZWxkcyB3aG9zZSB0eXBlIGlzIGluY29tcGF0aWJsZVxuICAgIC8vIHdpdGggdGhlIGNoYW5uZWwncyBzdXBwb3J0ZWQgZmllbGQgdHlwZXMgKGUuZy4gc3RyaW5nIGZpZWxkIGZvciBhIG51bWVyaWMgc2NhbGUpXG4gICAgT2JqZWN0LnZhbHVlcyhuZXdMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaCgoe2tleX0pID0+IHtcbiAgICAgIG5ld0xheWVyLnZhbGlkYXRlVmlzdWFsQ2hhbm5lbChrZXkpO1xuICAgIH0pO1xuICB9XG5cbiAgbmV3TGF5ZXIgPSBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgaXNWaXNpYmxlOiBvbGRMYXllci5jb25maWcuaXNWaXNpYmxlLFxuICAgIGlzQ29uZmlnQWN0aXZlOiB0cnVlXG4gIH0pO1xuXG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzKTtcbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgdW5kZWZpbmVkKTtcblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRJbml0aWFsTGF5ZXJDb25maWcobGF5ZXIsIGRhdGFzZXRzLCBsYXllckNsYXNzZXMpOiBMYXllciB7XG4gIGxldCBuZXdMYXllciA9IGxheWVyO1xuICBpZiAoIU9iamVjdC5rZXlzKGRhdGFzZXRzKS5sZW5ndGgpIHtcbiAgICAvLyBubyBkYXRhIGlzIGxvYWRlZFxuICAgIHJldHVybiBsYXllcjtcbiAgfVxuICBpZiAoIWxheWVyLmNvbmZpZy5kYXRhSWQpIHtcbiAgICAvLyBzZXQgbGF5ZXIgZGF0YUlkXG4gICAgbmV3TGF5ZXIgPSBsYXllci51cGRhdGVMYXllckNvbmZpZyh7ZGF0YUlkOiBPYmplY3Qua2V5cyhkYXRhc2V0cylbMF19KTtcbiAgfVxuICBjb25zdCBkYXRhc2V0ID0gZGF0YXNldHNbbmV3TGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBsYXllcjtcbiAgfVxuXG4gIC8vIGZpbmQgZGVmYXV0IGxheWVyIHByb3BzXG4gIGNvbnN0IHJlc3VsdCA9XG4gICAgdHlwZW9mIGxheWVyQ2xhc3Nlc1tuZXdMYXllci50eXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMgPT09ICdmdW5jdGlvbidcbiAgICAgID8gbGF5ZXJDbGFzc2VzW25ld0xheWVyLnR5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyhkYXRhc2V0LCBbXSlcbiAgICAgIDoge3Byb3BzOiBbXX07XG5cbiAgLy8gYW4gYXJyYXkgb2YgcG9zc2libGUgcHJvcHMsIHVzZSAxc3Qgb25lXG4gIGNvbnN0IHByb3BzID0gQXJyYXkuaXNBcnJheShyZXN1bHQpID8gcmVzdWx0IDogcmVzdWx0LnByb3BzIHx8IFtdO1xuXG4gIGlmIChwcm9wcy5sZW5ndGgpIHtcbiAgICBuZXdMYXllciA9IG5ldyBsYXllckNsYXNzZXNbbGF5ZXIudHlwZV0oe1xuICAgICAgLi4ucHJvcHNbMF0sXG4gICAgICBsYWJlbDogbmV3TGF5ZXIuY29uZmlnLmxhYmVsLFxuICAgICAgZGF0YUlkOiBuZXdMYXllci5jb25maWcuZGF0YUlkLFxuICAgICAgaXNDb25maWdBY3RpdmU6IG5ld0xheWVyLmNvbmZpZy5pc0NvbmZpZ0FjdGl2ZSxcbiAgICAgIGlzVmlzaWJsZTogbmV3TGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB0eXBlb2YgbmV3TGF5ZXIuc2V0SW5pdGlhbExheWVyQ29uZmlnID09PSAnZnVuY3Rpb24nXG4gICAgPyBuZXdMYXllci5zZXRJbml0aWFsTGF5ZXJDb25maWcoZGF0YXNldClcbiAgICA6IG5ld0xheWVyO1xufVxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgdHlwZS4gUHJldmlld3MgbGF5ZXIgY29uZmlnIHdpbGwgYmUgY29waWVkIGlmIGFwcGxpY2FibGUuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclR5cGVDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3VHlwZX0gPSBhY3Rpb247XG4gIGlmICghb2xkTGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qgb2xkSWQgPSBvbGRMYXllci5pZDtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZElkKTtcblxuICBpZiAoIXN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXSkge1xuICAgIENvbnNvbGUuZXJyb3IoYCR7bmV3VHlwZX0gaXMgbm90IGEgdmFsaWQgbGF5ZXIgdHlwZWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgbmV3TGF5ZXIgPSBuZXcgc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdKHtcbiAgICAvLyBrZWVwIG9sZCBsYXllciBsYWJsZSBhbmQgaXNDb25maWdBY3RpdmVcbiAgICBsYWJlbDogb2xkTGF5ZXIuY29uZmlnLmxhYmVsLFxuICAgIGlzQ29uZmlnQWN0aXZlOiBvbGRMYXllci5jb25maWcuaXNDb25maWdBY3RpdmUsXG4gICAgZGF0YUlkOiBvbGRMYXllci5jb25maWcuZGF0YUlkXG4gIH0pO1xuXG4gIGlmICghb2xkTGF5ZXIudHlwZSkge1xuICAgIC8vIGlmIHNldHRpbmcgbGF5ZXIgdHlwZSBvbiBhbiBlbXB0eSBsYXllclxuICAgIG5ld0xheWVyID0gc2V0SW5pdGlhbExheWVyQ29uZmlnKG5ld0xheWVyLCBzdGF0ZS5kYXRhc2V0cywgc3RhdGUubGF5ZXJDbGFzc2VzKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBnZXQgYSBtaW50IGxheWVyLCB3aXRoIG5ldyBpZCBhbmQgdHlwZVxuICAgIC8vIGJlY2F1c2UgZGVjay5nbCB1c2VzIGlkIHRvIG1hdGNoIGJldHdlZW4gbmV3IGFuZCBvbGQgbGF5ZXIuXG4gICAgLy8gSWYgdHlwZSBoYXMgY2hhbmdlZCBidXQgaWQgaXMgdGhlIHNhbWUsIGl0IHdpbGwgYnJlYWtcblxuICAgIGNvbnN0IGRlZmF1bHRMYXllclByb3BzID1cbiAgICAgIHR5cGVvZiBzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyhzdGF0ZS5kYXRhc2V0c1tuZXdMYXllci5jb25maWcuZGF0YUlkXSlcbiAgICAgICAgOiBudWxsO1xuXG4gICAgbmV3TGF5ZXIuYXNzaWduQ29uZmlnVG9MYXllcihcbiAgICAgIG9sZExheWVyLmNvbmZpZyxcbiAgICAgIG9sZExheWVyLnZpc0NvbmZpZ1NldHRpbmdzLFxuICAgICAgc3RhdGUuZGF0YXNldHMsXG4gICAgICBkZWZhdWx0TGF5ZXJQcm9wc1xuICAgICk7XG4gICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJEb21haW4oc3RhdGUuZGF0YXNldHMpO1xuICB9XG5cbiAgY29uc3Qge2NsaWNrZWQsIGhvdmVySW5mb30gPSBzdGF0ZTtcblxuICBsZXQgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2xpY2tlZDogb2xkTGF5ZXIuaXNMYXllckhvdmVyZWQoY2xpY2tlZCkgPyB1bmRlZmluZWQgOiBjbGlja2VkLFxuICAgIGhvdmVySW5mbzogb2xkTGF5ZXIuaXNMYXllckhvdmVyZWQoaG92ZXJJbmZvKSA/IHVuZGVmaW5lZCA6IGhvdmVySW5mb1xuICB9O1xuXG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgbmV3U3RhdGUpO1xuICBuZXdTdGF0ZSA9IHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXdTdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xuXG4gIGlmIChsYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQgfHwgb2xkTGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgLy8gdXBkYXRlIHNwbGl0TWFwIGxheWVyIGlkXG4gIGlmIChzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgIHNwbGl0TWFwczogbmV3U3RhdGUuc3BsaXRNYXBzLm1hcChzZXR0aW5ncyA9PiB7XG4gICAgICAgIGNvbnN0IHtbb2xkSWRdOiBvbGRMYXllck1hcCwgLi4ub3RoZXJMYXllcnN9ID0gc2V0dGluZ3MubGF5ZXJzO1xuICAgICAgICByZXR1cm4gb2xkSWQgaW4gc2V0dGluZ3MubGF5ZXJzXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIC4uLnNldHRpbmdzLFxuICAgICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgICAuLi5vdGhlckxheWVycyxcbiAgICAgICAgICAgICAgICBbbGF5ZXIuaWRdOiBvbGRMYXllck1hcFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiBzZXR0aW5ncztcbiAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSBsYXllck9yZGVyIHdpdGggbmV3IGlkXG4gIG5ld1N0YXRlID0ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGxheWVyT3JkZXI6IHJlcGxhY2VMYXllckVudHJ5SW5MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIG9sZExheWVyLmlkLCBuZXdMYXllci5pZClcbiAgfTtcblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogQmluZCB2aXN1YWwgY2hhbm5lbCBmaWVsZHMgdG8gdGhlIGRhdGFzZXQgZmllbGQgb2YgdGhlIHNhbWUgbmFtZS5cbiAqIGBhZGREYXRhVG9NYXBgIGFuZCBgbGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlYCBvZnRlbiBwYXNzIGB7bmFtZSwgdHlwZX1gXG4gKiBvciBwcm9jZXNzb3IgZmllbGRzIHdob3NlIHZhbHVlQWNjZXNzb3IgaXMgbm90IGJvdW5kIHRvIHRoZSBLZXBsZXJUYWJsZSwgd2hpY2hcbiAqIGxlYXZlcyBzdHJva2VDb2xvckRvbWFpbiBhdCBgWzAsIDFdYCAoa2VwbGVyLmdsICMzMDYxKS5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVZpc3VhbENoYW5uZWxGaWVsZEZyb21EYXRhc2V0KFxuICBuZXdDb25maWc6IFZpc1N0YXRlQWN0aW9ucy5MYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uWyduZXdDb25maWcnXSxcbiAgZGF0YXNldDogS2VwbGVyVGFibGUgfCB1bmRlZmluZWQsXG4gIHZpc3VhbENoYW5uZWw6IExheWVyWyd2aXN1YWxDaGFubmVscyddW3N0cmluZ10gfCB1bmRlZmluZWRcbikge1xuICBpZiAoIWRhdGFzZXQgfHwgIXZpc3VhbENoYW5uZWwpIHtcbiAgICByZXR1cm4gbmV3Q29uZmlnO1xuICB9XG4gIGNvbnN0IGluY29taW5nID0gbmV3Q29uZmlnW3Zpc3VhbENoYW5uZWwuZmllbGRdO1xuICBpZiAoIWluY29taW5nIHx8IHR5cGVvZiBpbmNvbWluZyAhPT0gJ29iamVjdCcgfHwgIWluY29taW5nLm5hbWUpIHtcbiAgICByZXR1cm4gbmV3Q29uZmlnO1xuICB9XG4gIGNvbnN0IGZvdW5kID0gZGF0YXNldC5maWVsZHMuZmluZChmZCA9PiBmZC5uYW1lID09PSBpbmNvbWluZy5uYW1lKTtcbiAgaWYgKCFmb3VuZCkge1xuICAgIHJldHVybiBuZXdDb25maWc7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5uZXdDb25maWcsXG4gICAgW3Zpc3VhbENoYW5uZWwuZmllbGRdOiBmb3VuZFxuICB9O1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciB2aXN1YWwgY2hhbm5lbFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3VmlzQ29uZmlnLCBjaGFubmVsfSA9IGFjdGlvbjtcbiAgaWYgKCFvbGRMYXllci5jb25maWcuZGF0YUlkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW29sZExheWVyLmNvbmZpZy5kYXRhSWRdO1xuICBjb25zdCBuZXdDb25maWcgPSByZXNvbHZlVmlzdWFsQ2hhbm5lbEZpZWxkRnJvbURhdGFzZXQoXG4gICAgYWN0aW9uLm5ld0NvbmZpZyxcbiAgICBkYXRhc2V0LFxuICAgIG9sZExheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdXG4gICk7XG5cbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgbGV0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcobmV3Q29uZmlnKTtcbiAgaWYgKG5ld1Zpc0NvbmZpZykgbmV3TGF5ZXIgPSBuZXdMYXllci51cGRhdGVMYXllclZpc0NvbmZpZyhuZXdWaXNDb25maWcpO1xuXG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbChkYXRhc2V0LCBjaGFubmVsKTtcblxuICAvLyBjYWxsaW5nIHVwZGF0ZSBhbmltYXRpb24gZG9tYWluIGZpcnN0IHRvIG1lcmdlIGFsbCBsYXllciBhbmltYXRpb24gZG9tYWluXG4gIGxldCB1cGRhdGVkU3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4oc3RhdGUpO1xuXG4gIGNvbnN0IHZpc3VhbENoYW5uZWwgPSBvbGRMYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcbiAgaWYgKHZpc3VhbENoYW5uZWw/LmNoYW5uZWxTY2FsZVR5cGUgPT09IENIQU5ORUxfU0NBTEVTLmNvbG9yICYmIG5ld0NvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXSkge1xuICAgIC8vIGlmIGNvbG9yIGZpZWxkIGNoYW5nZWQsIHNldCBjdXN0b21CcmVha3MgdG8gZmFsc2VcbiAgICBuZXdMYXllci51cGRhdGVMYXllckNvbG9yVUkodmlzdWFsQ2hhbm5lbC5yYW5nZSwge1xuICAgICAgY29sb3JSYW5nZUNvbmZpZzoge1xuICAgICAgICAuLi5uZXdMYXllci5jb25maWcuY29sb3JVSVt2aXN1YWxDaGFubmVsLnJhbmdlXS5jb2xvclJhbmdlQ29uZmlnLFxuICAgICAgICBjdXN0b21CcmVha3M6IGZhbHNlXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB1cGRhdGVkU3RhdGUgPSB7XG4gICAgICAuLi51cGRhdGVkU3RhdGUsXG4gICAgICBsYXllcnM6IHVwZGF0ZWRTdGF0ZS5sYXllcnMubWFwKGwgPT4gKGwuaWQgPT09IG9sZExheWVyLmlkID8gbmV3TGF5ZXIgOiBsKSlcbiAgICB9O1xuICB9XG5cbiAgY29uc3Qgb2xkTGF5ZXJEYXRhID0gdXBkYXRlZFN0YXRlLmxheWVyRGF0YVtpZHhdO1xuICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHVwZGF0ZWRTdGF0ZSwgb2xkTGF5ZXJEYXRhKTtcblxuICBpZiAoXG4gICAgdmlzdWFsQ2hhbm5lbD8uY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuY29sb3IgJiZcbiAgICBuZXdDb25maWdbdmlzdWFsQ2hhbm5lbD8uc2NhbGVdID09PSBTQ0FMRV9UWVBFUy5jdXN0b21PcmRpbmFsICYmXG4gICAgIW5ld1Zpc0NvbmZpZ1xuICApIHtcbiAgICAvLyB3aGVuIHN3aXRjaGluZyB0byBjdXN0b21PcmRpbmFsIHNjYWxlLCBjcmVhdGUgYSBjdXN0b21QYWxldHRlIGluIGNvbG9yVUkgd2l0aCB1cGRhdGVkIGNvbG9yRG9tYWluXG4gICAgY29uc3QgY3VzdG9tUGFsZXR0ZSA9IGluaXRDdXN0b21QYWxldHRlQnlDdXN0b21TY2FsZSh7XG4gICAgICBzY2FsZTogU0NBTEVfVFlQRVMuY3VzdG9tT3JkaW5hbCxcbiAgICAgIGZpZWxkOiBsYXllci5jb25maWdbdmlzdWFsQ2hhbm5lbC5maWVsZF0sXG4gICAgICBvcmRpbmFsRG9tYWluOiBsYXllci5jb25maWdbbGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF0uZG9tYWluXSxcbiAgICAgIHJhbmdlOiBsYXllci5jb25maWcudmlzQ29uZmlnW3Zpc3VhbENoYW5uZWwucmFuZ2VdLFxuICAgICAgY29sb3JCcmVha3M6IG51bGxcbiAgICB9KTtcbiAgICAvLyB1cGRhdGUgY29sb3JSYW5nZSB3aXRoIG5ldyBjdXN0b21QYWxldHRlXG4gICAgbGF5ZXIudXBkYXRlTGF5ZXJDb2xvclVJKHZpc3VhbENoYW5uZWwucmFuZ2UsIHtcbiAgICAgIHNob3dDb2xvckNoYXJ0OiB0cnVlLFxuICAgICAgY29sb3JSYW5nZUNvbmZpZzoge1xuICAgICAgICAuLi5sYXllci5jb25maWcuY29sb3JVSVt2aXN1YWxDaGFubmVsLnJhbmdlXS5jb2xvclJhbmdlQ29uZmlnLFxuICAgICAgICBjdXN0b21CcmVha3M6IHRydWVcbiAgICAgIH0sXG4gICAgICBjdXN0b21QYWxldHRlXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YSh1cGRhdGVkU3RhdGUsIHtsYXllckRhdGEsIGxheWVyLCBpZHh9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYHZpc0NvbmZpZ2BcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJWaXNDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllcn0gPSBhY3Rpb247XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGNvbnN0IHByb3BzID0gT2JqZWN0LmtleXMoYWN0aW9uLm5ld1Zpc0NvbmZpZyk7XG5cbiAgY29uc3QgbmV3VmlzQ29uZmlnID0ge1xuICAgIC4uLm9sZExheWVyLmNvbmZpZy52aXNDb25maWcsXG4gICAgLi4uYWN0aW9uLm5ld1Zpc0NvbmZpZ1xuICB9O1xuXG4gIGNvbnN0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe3Zpc0NvbmZpZzogbmV3VmlzQ29uZmlnfSk7XG5cbiAgLy8gSmVua3MgYnJlYWtzIGRlcGVuZCBvbiB0aGUgbnVtYmVyIG9mIGNvbG9ycy4gUmVjYWxjdWxhdGUgdGhlIGRvbWFpbiB3aGVuXG4gIC8vIHRoZSBjb2xvciByYW5nZSBvZiBhIEplbmtzIGNoYW5uZWwgY2hhbmdlcy5cbiAgaWYgKG9sZExheWVyLmNvbmZpZy5kYXRhSWQpIHtcbiAgICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbb2xkTGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gICAgaWYgKGRhdGFzZXQpIHtcbiAgICAgIE9iamVjdC5rZXlzKG5ld0xheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKGNoYW5uZWxLZXkgPT4ge1xuICAgICAgICBjb25zdCBjaGFubmVsID0gbmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbEtleV07XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjaGFubmVsPy5zY2FsZSAmJlxuICAgICAgICAgIG5ld0xheWVyLmNvbmZpZ1tjaGFubmVsLnNjYWxlXSA9PT0gU0NBTEVfVFlQRVMuamVua3MgJiZcbiAgICAgICAgICBjaGFubmVsLnJhbmdlICYmXG4gICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFjdGlvbi5uZXdWaXNDb25maWcsIGNoYW5uZWwucmFuZ2UpXG4gICAgICAgICkge1xuICAgICAgICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbChkYXRhc2V0LCBjaGFubmVsS2V5KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbGV0IG5leHRTdGF0ZSA9IHN0YXRlO1xuXG4gIC8vIEV4Y2x1c2l2ZSBiaXRtYXAgZWRpdGluZzogd2hlbiBlZGl0Qm91bmRzIGlzIHR1cm5lZCBvbiBmb3Igb25lIGJpdG1hcCBsYXllcixcbiAgLy8gdHVybiBpdCBvZmYgZm9yIGFsbCBvdGhlciBiaXRtYXAgbGF5ZXJzXG4gIGlmIChuZXdMYXllci50eXBlID09PSAnYml0bWFwJyAmJiBhY3Rpb24ubmV3VmlzQ29uZmlnLmVkaXRCb3VuZHMgPT09IHRydWUpIHtcbiAgICBuZXh0U3RhdGUgPSB7XG4gICAgICAuLi5uZXh0U3RhdGUsXG4gICAgICBsYXllcnM6IG5leHRTdGF0ZS5sYXllcnMubWFwKChsLCBpKSA9PiB7XG4gICAgICAgIGlmIChpICE9PSBpZHggJiYgbC50eXBlID09PSAnYml0bWFwJyAmJiBsLmNvbmZpZy52aXNDb25maWcuZWRpdEJvdW5kcykge1xuICAgICAgICAgIHJldHVybiBsLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAgIHZpc0NvbmZpZzogey4uLmwuY29uZmlnLnZpc0NvbmZpZywgZWRpdEJvdW5kczogZmFsc2V9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGw7XG4gICAgICB9KVxuICAgIH07XG4gIH1cblxuICBpZiAobmV3TGF5ZXIuc2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhKHByb3BzKSkge1xuICAgIGNvbnN0IG9sZExheWVyRGF0YSA9IG5leHRTdGF0ZS5sYXllckRhdGFbaWR4XTtcbiAgICBjb25zdCB7bGF5ZXJEYXRhLCBsYXllcn0gPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIG5leHRTdGF0ZSwgb2xkTGF5ZXJEYXRhKTtcbiAgICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5leHRTdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXh0U3RhdGUsIHtsYXllcjogbmV3TGF5ZXIsIGlkeH0pO1xufVxuXG4vKipcbiAqIFJlc2V0IGFuaW1hdGlvbiBjb25maWcgY3VycmVudCB0aW1lIHRvIGEgc3BlY2lmaWVkIHZhbHVlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICpcbiAqL1xuZXhwb3J0IGNvbnN0IHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIgPSA8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHt2YWx1ZX06IFZpc1N0YXRlQWN0aW9ucy5TZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyQWN0aW9uXG4pOiBTID0+IHtcbiAgY29uc3QgY3VycmVudFRpbWUgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlWzBdIDogdmFsdWU7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIGN1cnJlbnRUaW1lXG4gICAgfVxuICB9O1xuICAvLyB1cGRhdGUgYW5pbWF0aW9uIGNvbmZpZyBmb3IgZWFjaCBsYXllclxuICByZXR1cm4gc3RhdGUubGF5ZXJzLnJlZHVjZSgoYWNjdSwgbCkgPT4ge1xuICAgIGlmIChsLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCAmJiBsLnR5cGUgIT09ICd0cmlwJykge1xuICAgICAgcmV0dXJuIGxheWVyQW5pbWF0aW9uQ2hhbmdlVXBkYXRlcihhY2N1LCB7b2xkTGF5ZXI6IGwsIHByb3A6ICdjdXJyZW50VGltZScsIGN1cnJlbnRUaW1lfSk7XG4gICAgfVxuICAgIHJldHVybiBhY2N1O1xuICB9LCBuZXh0U3RhdGUpO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIHByb3BlcnR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyQW5pbWF0aW9uVGltZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uVGltZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoc3RhdGUsIGFjdGlvbik7XG59XG5cbi8qKlxuICogVXBkYXRlIGZpbHRlciBhbmltYXRpb24gd2luZG93XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAge2lkLCBhbmltYXRpb25XaW5kb3d9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlckFjdGlvblxuKTogUyB7XG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+IGYuaWQgPT09IGlkKTtcblxuICBpZiAoIWZpbHRlcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgYW5pbWF0aW9uV2luZG93XG4gIH07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKHN0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgY29uc3QgbmV3U3luY1RpbWVsaW5lTW9kZSA9IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIpO1xuXG4gIHJldHVybiBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcihuZXdTdGF0ZSwge2lkLCBtb2RlOiBuZXdTeW5jVGltZWxpbmVNb2RlfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtmaWx0ZXJJZCwgbmV3RmlsdGVyfSA9IGFjdGlvbjtcbiAgY29uc3Qgb2xkRmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi5pZCA9PT0gZmlsdGVySWQpO1xuICBpZiAoIW9sZEZpbHRlcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIFNlcmlhbGl6ZSB0aGUgZmlsdGVycyB0byBvbmx5IGNvbXBhcmUgdGhlIHNhdmVkIHByb3BlcnRpZXNcbiAgY29uc3Qgc2VyaWFsaXplZE9sZEZpbHRlciA9IHNlcmlhbGl6ZUZpbHRlcihvbGRGaWx0ZXIsIHN0YXRlLnNjaGVtYSkgPz8ge2NvbmZpZzoge319O1xuICBjb25zdCBzZXJpYWxpemVkTmV3RmlsdGVyID0gc2VyaWFsaXplRmlsdGVyKG5ld0ZpbHRlciwgc3RhdGUuc2NoZW1hKTtcbiAgaWYgKCFzZXJpYWxpemVkTmV3RmlsdGVyIHx8IGlzRXF1YWwoc2VyaWFsaXplZE9sZEZpbHRlciwgc2VyaWFsaXplZE5ld0ZpbHRlcikpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBJZiB0aGVyZSBhcmUgYW55IGNoYW5nZXMgdG8gdGhlIGZpbHRlciwgYXBwbHkgdGhlbVxuICBjb25zdCBjaGFuZ2VkID0gcGlja0NoYW5nZWRQcm9wcyhzZXJpYWxpemVkT2xkRmlsdGVyLCBzZXJpYWxpemVkTmV3RmlsdGVyKTtcbiAgZGVsZXRlIGNoYW5nZWRbJ2lkJ107IC8vIGlkIHNob3VsZCBub3QgYmUgY2hhbmdlZFxuXG4gIGNvbnN0IGZpbHRlckluZGV4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmIChmaWx0ZXJJbmRleCA8IDApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoXG4gICAgc3RhdGUsXG4gICAgc2V0RmlsdGVyKGZpbHRlckluZGV4LCBPYmplY3Qua2V5cyhjaGFuZ2VkKSwgT2JqZWN0LnZhbHVlcyhjaGFuZ2VkKSlcbiAgKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIHByb3BlcnR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyVXBkYXRlckFjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtpZHgsIHZhbHVlSW5kZXggPSAwfSA9IGFjdGlvbjtcbiAgY29uc3Qgb2xkRmlsdGVyID0gc3RhdGUuZmlsdGVyc1tpZHhdO1xuICBpZiAoIW9sZEZpbHRlcikge1xuICAgIENvbnNvbGUuZXJyb3IoYGZpbHRlcnMuJHtpZHh9IGlzIHVuZGVmaW5lZGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoXG4gICAgQXJyYXkuaXNBcnJheShhY3Rpb24ucHJvcCkgJiZcbiAgICAoIUFycmF5LmlzQXJyYXkoYWN0aW9uLnZhbHVlKSB8fCBhY3Rpb24ucHJvcC5sZW5ndGggIT09IGFjdGlvbi52YWx1ZS5sZW5ndGgpXG4gICkge1xuICAgIENvbnNvbGUuZXJyb3IoJ0V4cGVjdGluZyB2YWx1ZSB0byBiZSBhbiBhcnJheSBvZiB0aGUgc2FtZSBsZW5ndGgsIHNpbmNlIHByb3AgaXMgYW4gYXJyYXknKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gY29udmVydCBwcm9wIGFuZCB2YWx1ZSB0byBhcnJheVxuICBjb25zdCBwcm9wcyA9IHRvQXJyYXkoYWN0aW9uLnByb3ApO1xuICBjb25zdCB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KGFjdGlvbi5wcm9wKSA/IHRvQXJyYXkoYWN0aW9uLnZhbHVlKSA6IFthY3Rpb24udmFsdWVdO1xuXG4gIGxldCBuZXdGaWx0ZXIgPSBvbGRGaWx0ZXI7XG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuXG4gIGxldCBkYXRhc2V0SWRzVG9GaWx0ZXI6IHN0cmluZ1tdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBwcm9wID0gcHJvcHNbaV07XG4gICAgY29uc3QgdmFsdWUgPSB2YWx1ZXNbaV07XG4gICAgLy8gV2UgY3VycmVudGx5IGRvIG5vdCBzdXBwb3J0IHBhc3NpbmcgaW4gbmFtZSBhcyBhbiBhcnJheSBpbnRvIF91cGRhdGVGaWx0ZXJQcm9wLCBzbyB3ZSBjYWxsIGl0IG11bHRpcGxlIHRpbWVzIHdpdGggZWFjaCBuYW1lXG4gICAgLy8gU2VlIHRoZSBjb21tZW50IGluIHRoZXJlIGFzIHRvIHdoYXQgc2hvdWxkIGJlIGFkZHJlc3NlZFxuICAgIGxldCByZXM7XG4gICAgaWYgKHByb3AgPT09ICduYW1lJyAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICAgICAgcmVzID0gdmFsdWUucmVkdWNlKChhY2N1LCB2KSA9PiB7XG4gICAgICAgIHJldHVybiBfdXBkYXRlRmlsdGVyUHJvcChhY2N1LCBuZXdGaWx0ZXIsIHByb3AsIHYsIHZhbHVlSW5kZXgpO1xuICAgICAgfSwgbmV3U3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSBfdXBkYXRlRmlsdGVyUHJvcChuZXdTdGF0ZSwgbmV3RmlsdGVyLCBwcm9wLCB2YWx1ZSwgdmFsdWVJbmRleCk7XG4gICAgfVxuICAgIG5ld0ZpbHRlciA9IHJlcy5maWx0ZXI7XG4gICAgbmV3U3RhdGUgPSByZXMuc3RhdGU7XG4gICAgZGF0YXNldElkc1RvRmlsdGVyID0gZGF0YXNldElkc1RvRmlsdGVyLmNvbmNhdChyZXMuZGF0YXNldElkc1RvRmlsdGVyKTtcbiAgfVxuXG4gIGNvbnN0IGVubGFyZ2VkRmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi52aWV3ID09PSBGSUxURVJfVklFV19UWVBFUy5lbmxhcmdlZCk7XG5cbiAgaWYgKGVubGFyZ2VkRmlsdGVyICYmIGVubGFyZ2VkRmlsdGVyLmlkICE9PSBuZXdGaWx0ZXIuaWQpIHtcbiAgICAvLyB0aGVyZSBzaG91bGQgYmUgb25seSBvbmUgZW5sYXJnZWQgZmlsdGVyXG4gICAgbmV3RmlsdGVyLnZpZXcgPSBGSUxURVJfVklFV19UWVBFUy5zaWRlO1xuICB9XG5cbiAgLy8gc2F2ZSBuZXcgZmlsdGVycyB0byBuZXdTdGF0ZVxuICBuZXdTdGF0ZSA9IHNldChbJ2ZpbHRlcnMnLCBpZHhdLCBuZXdGaWx0ZXIsIG5ld1N0YXRlKTtcblxuICAvLyBmaWx0ZXIgZGF0YVxuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICB1bmlxKGRhdGFzZXRJZHNUb0ZpbHRlciksXG4gICAgbmV3U3RhdGUuZGF0YXNldHMsXG4gICAgbmV3U3RhdGUuZmlsdGVycyxcbiAgICBuZXdTdGF0ZS5sYXllcnNcbiAgKTtcblxuICBuZXdTdGF0ZSA9IHNldChbJ2RhdGFzZXRzJ10sIGZpbHRlcmVkRGF0YXNldHMsIG5ld1N0YXRlKTtcblxuICAvLyBuZWVkIHRvIHVwZGF0ZSBmaWx0ZXJQbG90IGFmdGVyIGZpbHRlciBEYXRhc2V0IGZvciBwbG90IHRvIHVwZGF0ZSBvbiBmaWx0ZXJlZCByZXN1bHRcbiAgY29uc3QgZmlsdGVyV2l0aFBMb3QgPSB1cGRhdGVGaWx0ZXJQbG90KG5ld1N0YXRlLmRhdGFzZXRzLCBuZXdTdGF0ZS5maWx0ZXJzW2lkeF0pO1xuXG4gIG5ld1N0YXRlID0gc2V0KFsnZmlsdGVycycsIGlkeF0sIGZpbHRlcldpdGhQTG90LCBuZXdTdGF0ZSk7XG5cbiAgLy8gZGF0YUlkIGlzIGFuIGFycmF5XG4gIC8vIHBhc3Mgb25seSB0aGUgZGF0YXNldCB3ZSBuZWVkIHRvIHVwZGF0ZVxuICBuZXdTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXdTdGF0ZSwgZGF0YXNldElkc1RvRmlsdGVyLCBuZXdGaWx0ZXIpO1xuXG4gIC8vIElmIHRpbWUgcmFuZ2UgZmlsdGVyIHZhbHVlIHdhcyB1cGRhdGVkLCBhZGp1c3QgYW5pbWF0aW9uIGNvbmZpZ1xuICBpZiAobmV3RmlsdGVyLnR5cGUgPT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UgJiYgcHJvcHMuaW5jbHVkZXMoJ3ZhbHVlJykpIHtcbiAgICBuZXdTdGF0ZSA9IGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIobmV3U3RhdGUsIGFjdGlvbi5pZHgpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG5mdW5jdGlvbiBfdXBkYXRlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgdmFsdWUsIGRhdGFzZXRzKSB7XG4gIGxldCBuZXdGaWx0ZXIgPSBmaWx0ZXI7XG4gIGlmIChmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdKSB7XG4gICAgLy8gaWYgZGF0YUlkIGFscmVhZHkgZXhpc3RcbiAgICBuZXdGaWx0ZXIgPSBfcmVtb3ZlRmlsdGVyRGF0YUlkQXRWYWx1ZUluZGV4KGZpbHRlciwgdmFsdWVJbmRleCwgZGF0YXNldHMpO1xuICB9XG4gIGlmICh2YWx1ZSkge1xuICAgIGNvbnN0IG5leHRWYWx1ZSA9IG5ld0ZpbHRlci5kYXRhSWQuc2xpY2UoKTtcbiAgICBuZXh0VmFsdWVbdmFsdWVJbmRleF0gPSB2YWx1ZTtcbiAgICBuZXdGaWx0ZXIgPSBzZXQoWydkYXRhSWQnXSwgbmV4dFZhbHVlLCBuZXdGaWx0ZXIpO1xuICB9XG4gIHJldHVybiBuZXdGaWx0ZXI7XG59XG5cbmZ1bmN0aW9uIF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cykge1xuICBjb25zdCBkYXRhSWQgPSBmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdO1xuXG4gIGlmIChmaWx0ZXIuZGF0YUlkLmxlbmd0aCA9PT0gMSAmJiB2YWx1ZUluZGV4ID09PSAwKSB7XG4gICAgLy8gaWYgcmVtb3ZlIHRoZSBvbmx5IGRhdGFJZCwgY3JlYXRlIGFuIGVtcHR5IGZpbHRlciBpbnN0ZWFkO1xuICAgIHJldHVybiBnZXREZWZhdWx0RmlsdGVyKHtpZDogZmlsdGVyLmlkfSk7XG4gIH1cblxuICBpZiAoZGF0YUlkKSB7XG4gICAgZmlsdGVyID0gcmVtb3ZlRmlsdGVyUGxvdChmaWx0ZXIsIGRhdGFJZCk7XG4gIH1cblxuICBmb3IgKGNvbnN0IHByb3Agb2YgW1xuICAgICdkYXRhSWQnLFxuICAgICduYW1lJyxcbiAgICAnZmllbGRJZHgnLFxuICAgICdncHVDaGFubmVsJyxcbiAgICAnZW5kTmFtZScsXG4gICAgJ2VuZEZpZWxkSWR4JyxcbiAgICAnZW5kTWFwcGVkVmFsdWUnLFxuICAgICdncHVFbmRDaGFubmVsJ1xuICBdKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyW3Byb3BdKSkge1xuICAgICAgY29uc3QgbmV4dFZhbCA9IGZpbHRlcltwcm9wXS5zbGljZSgpO1xuICAgICAgbmV4dFZhbC5zcGxpY2UodmFsdWVJbmRleCwgMSk7XG4gICAgICBmaWx0ZXIgPSBzZXQoW3Byb3BdLCBuZXh0VmFsLCBmaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIG1lcmdlRmllbGREb21haW4gZm9yIHRoZSByZW1haW5pbmcgZmllbGRzXG4gIGNvbnN0IGRvbWFpblN0ZXBzID0gbWVyZ2VGaWx0ZXJEb21haW4oZmlsdGVyLCBkYXRhc2V0cyk7XG5cbiAgY29uc3QgbmV4dEZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgLy8gdmFsdWU6IG5leHRWYWx1ZSxcbiAgICAuLi4oZG9tYWluU3RlcHMgPyB7ZG9tYWluOiBkb21haW5TdGVwcz8uZG9tYWluLCBzdGVwOiBkb21haW5TdGVwcz8uc3RlcH0gOiB7fSlcbiAgfTtcblxuICBjb25zdCBuZXh0VmFsdWUgPSBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluKG5leHRGaWx0ZXIudmFsdWUsIG5leHRGaWx0ZXIpO1xuICByZXR1cm4ge1xuICAgIC4uLm5leHRGaWx0ZXIsXG4gICAgdmFsdWU6IG5leHRWYWx1ZVxuICB9O1xufVxuXG4vKiogKlxuICogVXBkYXRlcyBhIHNpbmdsZSBwcm9wZXJ0eSBvZiBhIGZpbHRlclxuICovXG5mdW5jdGlvbiBfdXBkYXRlRmlsdGVyUHJvcChzdGF0ZSwgZmlsdGVyLCBwcm9wLCB2YWx1ZSwgdmFsdWVJbmRleCwgZGF0YXNldElkcz8pIHtcbiAgbGV0IGRhdGFzZXRJZHNUb0ZpbHRlcjogc3RyaW5nW10gPSBbXTtcbiAgc3dpdGNoIChwcm9wKSB7XG4gICAgLy8gVE9ETzogTmV4dCBQUiBmb3IgVUkgaWYgd2UgdXBkYXRlIGZpbHRlckRhdGFJZCwgd2UgbmVlZCB0byBjb25zaWRlciB0d28gY2FzZXM6XG4gICAgLy8gMS4gZGF0YUlkIGlzIGVtcHR5OiBjcmVhdGUgYSBkZWZhdWx0IGZpbHRlclxuICAgIC8vIDIuIEFkZCBhIG5ldyBkYXRhc2V0IGlkXG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5kYXRhSWQ6IHtcbiAgICAgIGNvbnN0IG9sZERhdGFJZCA9IFsuLi5maWx0ZXIuZGF0YUlkXTtcbiAgICAgIGZpbHRlciA9IF91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCB2YWx1ZSwgc3RhdGUuZGF0YXNldHMpO1xuICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gdW5pcShbLi4ub2xkRGF0YUlkLCAuLi5maWx0ZXIuZGF0YUlkXSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5uYW1lOiB7XG4gICAgICAvLyB3ZSBhcmUgc3VwcG9ydGluZyB0aGUgY3VycmVudCBmdW5jdGlvbmFsaXR5XG4gICAgICAvLyBUT0RPOiBOZXh0IFBSIGZvciBVSSBmaWx0ZXIgbmFtZSB3aWxsIG9ubHkgdXBkYXRlIGZpbHRlciBuYW1lIGJ1dCBpdCB3b24ndCBoYXZlIHNpZGUgZWZmZWN0c1xuICAgICAgLy8gd2UgYXJlIGdvbm5hIHVzZSBwYWlyIG9mIGRhdGFzZXRzIGFuZCBmaWVsZElkeCB0byB1cGRhdGUgdGhlIGZpbHRlclxuICAgICAgY29uc3QgZGF0YXNldElkID0gZmlsdGVyLmRhdGFJZFt2YWx1ZUluZGV4XTtcbiAgICAgIGNvbnN0IHtmaWx0ZXI6IHVwZGF0ZWRGaWx0ZXIsIGRhdGFzZXQ6IG5ld0RhdGFzZXR9ID0gYXBwbHlGaWx0ZXJGaWVsZE5hbWUoXG4gICAgICAgIGZpbHRlcixcbiAgICAgICAgc3RhdGUuZGF0YXNldHMsXG4gICAgICAgIGRhdGFzZXRJZCxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHZhbHVlSW5kZXgsXG4gICAgICAgIHttZXJnZURvbWFpbjogdmFsdWVJbmRleCA+IDB9XG4gICAgICApO1xuICAgICAgaWYgKHVwZGF0ZWRGaWx0ZXIpIHtcbiAgICAgICAgZmlsdGVyID0gdXBkYXRlZEZpbHRlcjtcbiAgICAgICAgaWYgKGZpbHRlci5ncHUpIHtcbiAgICAgICAgICBmaWx0ZXIgPSBzZXRGaWx0ZXJHcHVNb2RlKGZpbHRlciwgc3RhdGUuZmlsdGVycyk7XG4gICAgICAgICAgZmlsdGVyID0gYXNzaWduR3B1Q2hhbm5lbChmaWx0ZXIsIHN0YXRlLmZpbHRlcnMpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlID0gc2V0KFsnZGF0YXNldHMnLCBkYXRhc2V0SWRdLCBuZXdEYXRhc2V0LCBzdGF0ZSk7XG4gICAgICAgIC8vIHJlbW92ZSBmaWx0ZXIgUGxvdCBhdCBkYXRhc2V0SWQsIHNvIGl0IHdpbGwgYmUgcmVjYWxjdWxhdGVkXG4gICAgICAgIGZpbHRlciA9IHJlbW92ZUZpbHRlclBsb3QoZmlsdGVyLCBkYXRhc2V0SWQpO1xuXG4gICAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IHVwZGF0ZWRGaWx0ZXIuZGF0YUlkO1xuICAgICAgfVxuICAgICAgLy8gb25seSBmaWx0ZXIgdGhlIGN1cnJlbnQgZGF0YXNldFxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2FzZSBGSUxURVJfVVBEQVRFUl9QUk9QUy5lbmROYW1lOiB7XG4gICAgICBjb25zdCBkYXRhc2V0SWQgPSBmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdO1xuICAgICAgY29uc3Qge2ZpbHRlcjogdXBkYXRlZEZpbHRlciwgZGF0YXNldDogbmV3RGF0YXNldH0gPSBhcHBseVRpbWVGaWx0ZXJFbmRGaWVsZE5hbWUoXG4gICAgICAgIGZpbHRlcixcbiAgICAgICAgc3RhdGUuZGF0YXNldHMsXG4gICAgICAgIGRhdGFzZXRJZCxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHZhbHVlSW5kZXhcbiAgICAgICk7XG4gICAgICBpZiAodXBkYXRlZEZpbHRlcikge1xuICAgICAgICBmaWx0ZXIgPSB1cGRhdGVkRmlsdGVyO1xuICAgICAgICBmaWx0ZXIgPSBzZXRGaWx0ZXJHcHVNb2RlKGZpbHRlciwgc3RhdGUuZmlsdGVycyk7XG4gICAgICAgIGZpbHRlciA9IGZpbHRlci5ncHVcbiAgICAgICAgICA/IGFzc2lnbkdwdUNoYW5uZWwoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKVxuICAgICAgICAgIDogey4uLmZpbHRlciwgZ3B1Q2hhbm5lbDogdW5kZWZpbmVkLCBncHVFbmRDaGFubmVsOiB1bmRlZmluZWR9O1xuICAgICAgICBzdGF0ZSA9IHNldChbJ2RhdGFzZXRzJywgZGF0YXNldElkXSwgbmV3RGF0YXNldCwgc3RhdGUpO1xuICAgICAgICBmaWx0ZXIgPSByZW1vdmVGaWx0ZXJQbG90KGZpbHRlciwgZGF0YXNldElkKTtcbiAgICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gdXBkYXRlZEZpbHRlci5kYXRhSWQ7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLmxheWVySWQ6IHtcbiAgICAgIC8vIFdlIG5lZWQgdG8gdXBkYXRlIG9ubHkgZGF0YXNldElkL3MgaWYgd2UgaGF2ZSBhZGRlZC9yZW1vdmVkIGxheWVyc1xuICAgICAgLy8gLSBjaGVjayBmb3IgbGF5ZXJJZCBjaGFuZ2VzIChYT1Igd29ya3MgYmVjYXVzZSBvZiBzdHJpbmcgdmFsdWVzKVxuICAgICAgLy8gaWYgbm8gZGlmZmVyZW5jZXMgYmV0d2VlbiBsYXllcklkcywgZG9uJ3QgZG8gYW55IGZpbHRlcmluZ1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgY29uc3QgbGF5ZXJJZERpZmZlcmVuY2UgPSB4b3IodmFsdWUsIGZpbHRlci5sYXllcklkKTtcblxuICAgICAgY29uc3QgbGF5ZXJEYXRhSWRzID0gdW5pcTxzdHJpbmc+KFxuICAgICAgICBsYXllcklkRGlmZmVyZW5jZVxuICAgICAgICAgIC5tYXAobGlkID0+XG4gICAgICAgICAgICBnZXQoXG4gICAgICAgICAgICAgIHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gbGlkKSxcbiAgICAgICAgICAgICAgWydjb25maWcnLCAnZGF0YUlkJ11cbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICAgLmZpbHRlcihkID0+IGQpIGFzIHN0cmluZ1tdXG4gICAgICApO1xuXG4gICAgICAvLyBvbmx5IGZpbHRlciBkYXRhc2V0c0lkc1xuICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gbGF5ZXJEYXRhSWRzO1xuXG4gICAgICAvLyBVcGRhdGUgbmV3RmlsdGVyIGRhdGFJZHNcbiAgICAgIGNvbnN0IG5ld0RhdGFJZHMgPSB1bmlxPHN0cmluZz4oXG4gICAgICAgIHZhbHVlXG4gICAgICAgICAgPy5tYXAobGlkID0+XG4gICAgICAgICAgICBnZXQoXG4gICAgICAgICAgICAgIHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gbGlkKSxcbiAgICAgICAgICAgICAgWydjb25maWcnLCAnZGF0YUlkJ11cbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICAgLmZpbHRlcihkID0+IGQpIGFzIHN0cmluZ1tdXG4gICAgICApO1xuXG4gICAgICBmaWx0ZXIgPSB7XG4gICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgbGF5ZXJJZDogdmFsdWUsXG4gICAgICAgIGRhdGFJZDogbmV3RGF0YUlkc1xuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICBmaWx0ZXIgPSBzZXQoW3Byb3BdLCB2YWx1ZSwgZmlsdGVyKTtcbiAgICAgIGRhdGFzZXRJZHNUb0ZpbHRlciA9IFsuLi5maWx0ZXIuZGF0YUlkXTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIHtmaWx0ZXIsIGRhdGFzZXRJZHMsIGRhdGFzZXRJZHNUb0ZpbHRlciwgc3RhdGV9O1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtc3RhdGVtZW50cyAqL1xuXG4vKipcbiAqIFNldCB0aGUgcHJvcGVydHkgb2YgYSBmaWx0ZXIgcGxvdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEZpbHRlclBsb3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZHgsIG5ld1Byb3B9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyUGxvdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKCFzdGF0ZS5maWx0ZXJzW2lkeF0pIHtcbiAgICBDb25zb2xlLmVycm9yKGBmaWx0ZXJzWyR7aWR4fV0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBuZXdGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG5cbiAgZm9yIChjb25zdCBwcm9wIGluIG5ld1Byb3ApIHtcbiAgICBpZiAocHJvcCA9PT0gJ3Bsb3RUeXBlJykge1xuICAgICAgbmV3RmlsdGVyID0gcGlja18oJ3Bsb3RUeXBlJykobWVyZ2VfKG5ld1Byb3AucGxvdFR5cGUpKShuZXdGaWx0ZXIpO1xuICAgIH0gZWxzZSBpZiAocHJvcCA9PT0gJ3lBeGlzJykge1xuICAgICAgY29uc3QgY2hhcnRUeXBlID0gbmV3UHJvcC55QXhpcyA/IFBMT1RfVFlQRVMubGluZUNoYXJ0IDogUExPVF9UWVBFUy5oaXN0b2dyYW07XG5cbiAgICAgIG5ld0ZpbHRlciA9IHBpY2tfKCdwbG90VHlwZScpKG1lcmdlXyh7dHlwZTogY2hhcnRUeXBlfSkpKG1lcmdlXyhuZXdQcm9wKShuZXdGaWx0ZXIpKTtcbiAgICB9XG4gIH1cblxuICBuZXdGaWx0ZXIgPSB1cGRhdGVGaWx0ZXJQbG90KHN0YXRlLmRhdGFzZXRzLCBuZXdGaWx0ZXIpO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+IChpID09PSBpZHggPyBuZXdGaWx0ZXIgOiBmKSlcbiAgfTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT5cbiAgIWFjdGlvbi5kYXRhSWRcbiAgICA/IHN0YXRlXG4gICAgOiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBmaWx0ZXJzOiBbLi4uc3RhdGUuZmlsdGVycywgZ2V0RGVmYXVsdEZpbHRlcih7ZGF0YUlkOiBhY3Rpb24uZGF0YUlkLCBpZDogYWN0aW9uLmlkfSldXG4gICAgICB9O1xuXG4vKipcbiAqIENyZWF0ZSBvciB1cGRhdGUgYSBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVPclVwZGF0ZUZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQ3JlYXRlT3JVcGRhdGVGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZCwgZGF0YUlkLCBmaWVsZCwgdmFsdWV9ID0gYWN0aW9uO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBjb25zdCBvcmlnaW5hbEluZGV4ID0gbmV3U3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBpZCk7XG4gIGxldCBmaWx0ZXJJbmRleCA9IG9yaWdpbmFsSW5kZXg7XG4gIGlmICghaWQgJiYgIWRhdGFJZCkge1xuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfVxuICBpZiAob3JpZ2luYWxJbmRleCA8IDAgJiYgZGF0YUlkKSB7XG4gICAgbmV3U3RhdGUgPSBhZGRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7ZGF0YUlkfSk7XG4gICAgaWYgKG5ld1N0YXRlLmZpbHRlcnMubGVuZ3RoICE9PSBzdGF0ZS5maWx0ZXJzLmxlbmd0aCArIDEpIHtcbiAgICAgIC8vIE5vIG5ldyBmaWx0ZXIgd2FzIGFkZGVkXG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICAgIC8vIEhlcmUgd2UgYXJlIGFzc3VtaW5nIHRoYXQgdGhlIGZpbHRlciB3YXMgYWRkZWQgYXQgdGhlIGVuZFxuICAgIGZpbHRlckluZGV4ID0gbmV3U3RhdGUuZmlsdGVycy5sZW5ndGggLSAxO1xuICAgIG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySW5kZXhdID0ge1xuICAgICAgLi4ubmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJbmRleF0sXG4gICAgICAuLi4oaWQgPyB7aWR9IDogbnVsbClcbiAgICB9O1xuICB9XG5cbiAgLy8gTm8gbmVlZCB0byB1cGRhdGUgdGhpcyBpZiBpdCdzIGEgbmV3bHkgY3JlYXRlZCBmaWx0ZXJcbiAgLy8gRmlyc3Qgd2UgbWFrZSBzdXJlIGFsbCB0aGUgZGF0YUlkcyB0aGF0IGZpZWxkcyByZWZlciB0byBhcmUgdXBkYXRlZFxuICBpZiAob3JpZ2luYWxJbmRleCA+PSAwICYmIGRhdGFJZCkge1xuICAgIC8vIElmIHRoZSBkYXRhSWQgaXMgYW4gYXJyYXksIHdlIG5lZWQgdG8gdXBkYXRlIGVhY2ggb25lIGluZGl2aWR1YWxseSBhcyB0aGV5IG5lZWQgYSBjb3JyZWN0IHZhbHVlSW5kZXggcGFzc2VkXG4gICAgbmV3U3RhdGUgPSAoQXJyYXkuaXNBcnJheShkYXRhSWQpID8gZGF0YUlkIDogW2RhdGFJZF0pLnJlZHVjZSgoYWNjdSwgZCwgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKGFjY3UsIHtcbiAgICAgICAgaWR4OiBmaWx0ZXJJbmRleCxcbiAgICAgICAgcHJvcDogJ2RhdGFJZCcsXG4gICAgICAgIHZhbHVlOiBkLFxuICAgICAgICB2YWx1ZUluZGV4OiBpbmRleFxuICAgICAgfSk7XG4gICAgfSwgbmV3U3RhdGUpO1xuICB9XG4gIC8vIFRoZW4gd2UgdXBkYXRlIHRoZSBmaWVsZHNcbiAgaWYgKGZpZWxkKSB7XG4gICAgLy8gSWYgdGhlIGZpZWxkIGlzIGFuIGFycmF5LCB3ZSBuZWVkIHRvIHVwZGF0ZSBlYWNoIGZpZWxkIGluZGl2aWR1YWxseSBhcyB0aGV5IG5lZWQgYSBjb3JyZWN0IHZhbHVlSW5kZXggcGFzc2VkXG4gICAgbmV3U3RhdGUgPSAoQXJyYXkuaXNBcnJheShmaWVsZCkgPyBmaWVsZCA6IFtmaWVsZF0pLnJlZHVjZSgoYWNjdSwgZiwgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKGFjY3UsIHtcbiAgICAgICAgaWR4OiBmaWx0ZXJJbmRleCxcbiAgICAgICAgcHJvcDogJ25hbWUnLFxuICAgICAgICB2YWx1ZTogZixcbiAgICAgICAgdmFsdWVJbmRleDogaW5kZXhcbiAgICAgIH0pO1xuICAgIH0sIG5ld1N0YXRlKTtcbiAgfVxuICAvLyBUaGVuIHdlIHVwZGF0ZSB0aGUgdmFsdWUgc2VwYXJhdGVseVxuICBpZiAodmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge2lkeDogZmlsdGVySW5kZXgsIHByb3A6ICd2YWx1ZScsIHZhbHVlfSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIFNldCBsYXllciBjb2xvciBwYWxldHRlIHVpIHN0YXRlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3QgbGF5ZXJDb2xvclVJQ2hhbmdlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7b2xkTGF5ZXIsIHByb3AsIG5ld0NvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5MYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IG9sZFZpeENvbmZpZyA9IG9sZExheWVyLmNvbmZpZy52aXNDb25maWdbcHJvcF07XG4gIGNvbnN0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb2xvclVJKHByb3AsIG5ld0NvbmZpZyk7XG4gIGNvbnN0IG5ld1Zpc0NvbmZpZyA9IG5ld0xheWVyLmNvbmZpZy52aXNDb25maWdbcHJvcF07XG4gIGlmIChvbGRWaXhDb25maWcgIT09IG5ld1Zpc0NvbmZpZykge1xuICAgIHJldHVybiBsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIoc3RhdGUsIHtcbiAgICAgIG9sZExheWVyLFxuICAgICAgbmV3VmlzQ29uZmlnOiB7XG4gICAgICAgIFtwcm9wXTogbmV3VmlzQ29uZmlnXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IHN0YXRlLmxheWVycy5tYXAobCA9PiAobC5pZCA9PT0gb2xkTGF5ZXIuaWQgPyBuZXdMYXllciA6IGwpKVxuICB9O1xufTtcblxuLyoqXG4gKiBTdGFydCBhbmQgZW5kIGZpbHRlciBhbmltYXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVGaWx0ZXJBbmltYXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT4gKGkgPT09IGFjdGlvbi5pZHggPyB7Li4uZiwgaXNBbmltYXRpbmc6ICFmLmlzQW5pbWF0aW5nfSA6IGYpKVxufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ZpbHRlckFuaW1hdGlvbkNvbmZpZyhjb25maWc6IEFuaW1hdGlvbkNvbmZpZyB8IEZpbHRlckFuaW1hdGlvbkNvbmZpZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gJ2RhdGFJZCcgaW4gY29uZmlnICYmICdhbmltYXRpb25XaW5kb3cnIGluIGNvbmZpZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0QW5pbWF0aW9uQ29uZmlnVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7Y29uZmlnfSA9IGFjdGlvbjtcbiAgaWYgKGlzRmlsdGVyQW5pbWF0aW9uQ29uZmlnKGNvbmZpZykpIHtcbiAgICAvLyBGaW5kIGZpbHRlciB1c2VkIGZvciBhbmltYXRpb25cbiAgICAvLyBBc3N1bWluZyB0aGVyZSdzIG9ubHkgb25lIGZpbHRlciB1c2VkIGZvciBhbmltYXRpb24sIHNlZSBzZXRGaWx0ZXJWaWV3VXBkYXRlclxuICAgIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChmID0+ICFpc1NpZGVGaWx0ZXIoZikpO1xuICAgIGlmICghZmlsdGVyKSB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICAgIGNvbnN0IG5ld0ZpbHRlciA9IHsuLi5maWx0ZXIsIC4uLmNvbmZpZ307XG4gICAgcmV0dXJuIGFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlcihzdGF0ZSwgYXBwbHlGaWx0ZXJDb25maWcoZmlsdGVyLmlkLCBuZXdGaWx0ZXIpKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICAuLi5jb25maWdcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICBpc0FuaW1hdGluZzogIXN0YXRlLmFuaW1hdGlvbkNvbmZpZy5pc0FuaW1hdGluZ1xuICB9XG59KTtcblxuLyoqXG4gKiBIaWRlIGFuZCBzaG93IGxheWVyIGFuaW1hdGlvbiBjb250cm9sXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJBbmltYXRpb25Db250cm9sVXBkYXRlciA9IChzdGF0ZTogVmlzU3RhdGUpOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgIGhpZGVDb250cm9sOiAhc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmhpZGVDb250cm9sXG4gIH1cbn0pO1xuXG4vKipcbiAqIENoYW5nZSBmaWx0ZXIgYW5pbWF0aW9uIHNwZWVkXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUZpbHRlckFuaW1hdGlvblNwZWVkVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PiAoaSA9PT0gYWN0aW9uLmlkeCA/IHsuLi5mLCBzcGVlZDogYWN0aW9uLnNwZWVkfSA6IGYpKVxufSk7XG5cbi8qKlxuICogVXBkYXRlIGFuaW1hdGlvbiBzcGVlZCB3aXRoIHRoZSB2ZXJ0aWNhbCBzcGVlZCBzbGlkZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKlxuICovXG5leHBvcnQgY29uc3QgdXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge3NwZWVkfTogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZUxheWVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICBzcGVlZFxuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogU2hvdyBsYXJnZXIgdGltZSBmaWx0ZXIgYXQgYm90dG9tIGZvciB0aW1lIHBsYXliYWNrIChhcHBseSB0byB0aW1lIGZpbHRlciBvbmx5KVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEZpbHRlclZpZXdVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlclZpZXdVcGRhdGVyQWN0aW9uXG4pID0+IHtcbiAgY29uc3Qge3ZpZXcsIGlkeH0gPSBhY3Rpb247XG4gIGNvbnN0IHNob3VsZFJlc2V0T3RoZXJGaWx0ZXJzVmlldyA9IHZpZXcgPT09IEZJTFRFUl9WSUVXX1RZUEVTLmVubGFyZ2VkO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PlxuICAgICAgaSA9PT0gaWR4XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIHZpZXdcbiAgICAgICAgICB9XG4gICAgICAgIDogc2hvdWxkUmVzZXRPdGhlckZpbHRlcnNWaWV3XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIHZpZXc6IEZJTFRFUl9WSUVXX1RZUEVTLnNpZGVcbiAgICAgICAgICB9XG4gICAgICAgIDogZlxuICAgIClcbiAgfTtcbn07XG5cbi8qKlxuICogVG9nZ2xlcyBmaWx0ZXIgZmVhdHVyZSB2aXNpYmlsaXR5XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRmlsdGVyRmVhdHVyZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1thY3Rpb24uaWR4XTtcbiAgY29uc3QgaXNWaXNpYmxlID0gZ2V0KGZpbHRlciwgWyd2YWx1ZScsICdwcm9wZXJ0aWVzJywgJ2lzVmlzaWJsZSddKTtcblxuICBsZXQgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKHN0YXRlLCB7XG4gICAgaWR4OiBhY3Rpb24uaWR4LFxuICAgIHByb3A6ICdlbmFibGVkJyxcbiAgICB2YWx1ZTogIWlzVmlzaWJsZVxuICB9KTtcblxuICBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGFjdGlvbi5pZHgsXG4gICAgcHJvcDogJ3ZhbHVlJyxcbiAgICB2YWx1ZTogZmVhdHVyZVRvRmlsdGVyVmFsdWUoZmlsdGVyLnZhbHVlLCBmaWx0ZXIuaWQsIHtcbiAgICAgIGlzVmlzaWJsZTogIWlzVmlzaWJsZVxuICAgIH0pXG4gIH0pO1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtpZHh9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YUlkLCBpZH0gPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG5cbiAgY29uc3QgbmV3RmlsdGVycyA9IFtcbiAgICAuLi5zdGF0ZS5maWx0ZXJzLnNsaWNlKDAsIGlkeCksXG4gICAgLi4uc3RhdGUuZmlsdGVycy5zbGljZShpZHggKyAxLCBzdGF0ZS5maWx0ZXJzLmxlbmd0aClcbiAgXTtcblxuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhkYXRhSWQsIHN0YXRlLmRhdGFzZXRzLCBuZXdGaWx0ZXJzLCBzdGF0ZS5sYXllcnMpO1xuICBjb25zdCBuZXdFZGl0b3IgPVxuICAgIGdldEZpbHRlcklkSW5GZWF0dXJlKHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmUpID09PSBpZFxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICAgICAgICB9XG4gICAgICA6IHN0YXRlLmVkaXRvcjtcblxuICBsZXQgbmV3U3RhdGUgPSBzZXQoWydmaWx0ZXJzJ10sIG5ld0ZpbHRlcnMsIHN0YXRlKTtcbiAgbmV3U3RhdGUgPSBzZXQoWydkYXRhc2V0cyddLCBmaWx0ZXJlZERhdGFzZXRzLCBuZXdTdGF0ZSk7XG4gIG5ld1N0YXRlID0gc2V0KFsnZWRpdG9yJ10sIG5ld0VkaXRvciwgbmV3U3RhdGUpO1xuXG4gIHJldHVybiB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV3U3RhdGUsIGRhdGFJZCwgdW5kZWZpbmVkKTtcbn07XG5cbi8qKlxuICogQWRkIGEgbmV3IGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkTGF5ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZExheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBsZXQgbmV3TGF5ZXI7XG4gIGxldCBuZXdMYXllckRhdGE7XG4gIGlmIChhY3Rpb24uY29uZmlnKSB7XG4gICAgbmV3TGF5ZXIgPSBjcmVhdGVMYXllckZyb21Db25maWcoc3RhdGUsIGFjdGlvbi5jb25maWcpO1xuICAgIGlmICghbmV3TGF5ZXIpIHtcbiAgICAgIENvbnNvbGUud2FybihcbiAgICAgICAgJ0ZhaWxlZCB0byBjcmVhdGUgbGF5ZXIgZnJvbSBjb25maWcsIGl0IHVzdWFsbHkgbWVhbnMgdGhlIGNvbmZpZyBpcyBub3QgYmUgaW4gY29ycmVjdCBmb3JtYXQnLFxuICAgICAgICBhY3Rpb24uY29uZmlnXG4gICAgICApO1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUpO1xuICAgIG5ld0xheWVyID0gcmVzdWx0LmxheWVyO1xuICAgIG5ld0xheWVyRGF0YSA9IHJlc3VsdC5sYXllckRhdGE7XG4gIH0gZWxzZSB7XG4gICAgLy8gY3JlYXRlIGFuIGVtcHR5IGxheWVyIHdpdGggYSBzcGVjaWZpYyBkYXRhc2V0IG9yIGEgZGVmYXVsdCBvbmVcbiAgICBjb25zdCBkZWZhdWx0RGF0YXNldCA9IGFjdGlvbi5kYXRhc2V0SWQgPz8gT2JqZWN0LmtleXMoc3RhdGUuZGF0YXNldHMpWzBdO1xuICAgIG5ld0xheWVyID0gbmV3IExheWVyKHtcbiAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcbiAgICAgIGlzQ29uZmlnQWN0aXZlOiB0cnVlLFxuICAgICAgZGF0YUlkOiBkZWZhdWx0RGF0YXNldFxuICAgIH0pO1xuICAgIG5ld0xheWVyRGF0YSA9IHt9O1xuICB9XG5cbiAgbGV0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogWy4uLnN0YXRlLmxheWVycywgbmV3TGF5ZXJdLFxuICAgIGxheWVyRGF0YTogWy4uLnN0YXRlLmxheWVyRGF0YSwgbmV3TGF5ZXJEYXRhXSxcbiAgICAvLyBhZGQgbmV3IGxheWVyIGF0IHRoZSB0b3BcbiAgICBsYXllck9yZGVyOiBbbmV3TGF5ZXIuaWQsIC4uLnN0YXRlLmxheWVyT3JkZXJdLFxuICAgIHNwbGl0TWFwczogYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcChzdGF0ZS5zcGxpdE1hcHMsIG5ld0xheWVyKVxuICB9O1xuXG4gIGlmIChuZXdMYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59O1xuXG4vKipcbiAqIHJlbW92ZSBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUxheWVyVXBkYXRlcjxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUxheWVyVXBkYXRlckFjdGlvblxuKTogVCB7XG4gIGNvbnN0IGlkeCA9IE51bWJlci5pc0Zpbml0ZShpZClcbiAgICA/IC8vIHN1cHBvcnQgb2xkZXIgQVBJLCByZW1vdmUgbGF5ZXIgYnkgaWR4XG4gICAgICBOdW1iZXIoaWQpXG4gICAgOiBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gc3RhdGUubGF5ZXJzLmxlbmd0aCkge1xuICAgIC8vIGludmFsaWQgaW5kZXhcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgcmVtb3ZlIGxheWVyIHdpdGggaW52YWxpZCBpZHxpZHggJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7bGF5ZXJzLCBsYXllckRhdGEsIGxheWVyT3JkZXIsIGNsaWNrZWQsIGhvdmVySW5mb30gPSBzdGF0ZTtcbiAgY29uc3QgbGF5ZXJUb1JlbW92ZSA9IGxheWVyc1tpZHhdO1xuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IGZpbHRlck91dEJ5SWQobGF5ZXJUb1JlbW92ZS5pZCkobGF5ZXJzKSxcbiAgICBsYXllckRhdGE6IHJlbW92ZUVsZW1lbnRBdEluZGV4KGlkeCkobGF5ZXJEYXRhKSxcbiAgICBsYXllck9yZGVyOiByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobGF5ZXJPcmRlciwgbGF5ZXJUb1JlbW92ZS5pZCksXG4gICAgY2xpY2tlZDogbGF5ZXJUb1JlbW92ZS5pc0xheWVySG92ZXJlZChjbGlja2VkKSA/IHVuZGVmaW5lZCA6IGNsaWNrZWQsXG4gICAgaG92ZXJJbmZvOiBsYXllclRvUmVtb3ZlLmlzTGF5ZXJIb3ZlcmVkKGhvdmVySW5mbykgPyB1bmRlZmluZWQgOiBob3ZlckluZm8sXG4gICAgc3BsaXRNYXBzOiByZW1vdmVMYXllckZyb21TcGxpdE1hcHMoc3RhdGUuc3BsaXRNYXBzLCBsYXllclRvUmVtb3ZlKVxuICAgIC8vIFRPRE86IHVwZGF0ZSBmaWx0ZXJzLCBjcmVhdGUgaGVscGVyIHRvIHJlbW92ZSBsYXllciBmb3JtIGZpbHRlciAocmVtb3ZlIGxheWVyaWQgYW5kIGRhdGFpZCkgaWYgbWFwcGVkXG4gIH07XG5cbiAgcmV0dXJuIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihcbiAgICByZW1vdmVDaGFydHNBbmRGaWx0ZXJzKFxuICAgICAgbmV3U3RhdGUsXG4gICAgICBjaGFydCA9PiBpc0xheWVyQ2hhcnRDb25maWcoY2hhcnQpICYmIGNoYXJ0LmxheWVySWQgPT09IGxheWVyVG9SZW1vdmUuaWRcbiAgICApXG4gICk7XG59XG5cbi8qKlxuICogUmVvcmRlciBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlb3JkZXJMYXllclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge29yZGVyfTogVmlzU3RhdGVBY3Rpb25zLlJlb3JkZXJMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBsYXllck9yZGVyOiBvcmRlclxufSk7XG5cbi8qKlxuICogQWRkIGEgbmV3IGxheWVyIGdyb3VwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgbGF5ZXJHcm91cCA9IGdldE5ld0xheWVyR3JvdXAoYWN0aW9uKTtcbiAgbGV0IG5ld0xheWVyT3JkZXIgPSBbLi4uc3RhdGUubGF5ZXJPcmRlcl07XG5cbiAgaWYgKGFjdGlvbi5sYXllck9yZGVyKSB7XG4gICAgYWN0aW9uLmxheWVyT3JkZXIuZm9yRWFjaChsYXllcklkID0+IHtcbiAgICAgIG5ld0xheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobmV3TGF5ZXJPcmRlciwgbGF5ZXJJZCBhcyBzdHJpbmcpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllck9yZGVyOiBhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIobmV3TGF5ZXJPcmRlciwgbGF5ZXJHcm91cClcbiAgfTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgbGF5ZXIgZ3JvdXAgYW5kIGFsbCBsYXllcnMgd2l0aGluIGl0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXJHcm91cFRvUmVtb3ZlID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIGlkKTtcbiAgaWYgKCFsYXllckdyb3VwVG9SZW1vdmUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBsYXllcklkc1RvUmVtb3ZlID0gZ2V0RmxhdExheWVyT3JkZXIobGF5ZXJHcm91cFRvUmVtb3ZlLmxheWVyT3JkZXIpO1xuICBsZXQgbmV3U3RhdGUgPSB7Li4uc3RhdGV9O1xuXG4gIGxheWVySWRzVG9SZW1vdmUuZm9yRWFjaChsYXllcklkID0+IHtcbiAgICBjb25zdCBpZHggPSBuZXdTdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gbGF5ZXJJZCk7XG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBuZXdTdGF0ZSA9IHJlbW92ZUxheWVyVXBkYXRlcihuZXdTdGF0ZSwge2lkOiBsYXllcklkfSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBuZXdMYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIGxheWVyR3JvdXBUb1JlbW92ZSk7XG4gIHJldHVybiB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlclxuICB9O1xufTtcblxuLyoqXG4gKiBVcGRhdGUgYSBsYXllciBncm91cCAobGFiZWwsIHZpc2liaWxpdHksIGxheWVyIG1lbWJlcnNoaXApXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkLCBvcHRpb25zfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBpZCk7XG4gIGlmICghbGF5ZXJHcm91cCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHsuLi5zdGF0ZX07XG5cbiAgaWYgKG9wdGlvbnMubGF5ZXJPcmRlcikge1xuICAgIG5ld1N0YXRlLmxheWVyT3JkZXIgPSBbLi4ubGF5ZXJHcm91cC5sYXllck9yZGVyLCAuLi5uZXdTdGF0ZS5sYXllck9yZGVyXTtcbiAgICBvcHRpb25zLmxheWVyT3JkZXIuZm9yRWFjaChsYXllcklkID0+IHtcbiAgICAgIG5ld1N0YXRlLmxheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgbGF5ZXJJZCBhcyBzdHJpbmcpO1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbmV3TGF5ZXJHcm91cCA9IHtcbiAgICAuLi5sYXllckdyb3VwLFxuICAgIC4uLm9wdGlvbnNcbiAgfTtcblxuICBpZiAobmV3TGF5ZXJHcm91cC5pc1Zpc2libGUgIT09IGxheWVyR3JvdXAuaXNWaXNpYmxlKSB7XG4gICAgY29uc3QgbGF5ZXJJZHMgPSBnZXRGbGF0TGF5ZXJPcmRlcihuZXdMYXllckdyb3VwLmxheWVyT3JkZXIpO1xuICAgIG5ld1N0YXRlID0gbmV3U3RhdGUubGF5ZXJzLnJlZHVjZSgoYWNjLCBsYXllcikgPT4ge1xuICAgICAgaWYgKGxheWVySWRzLmluY2x1ZGVzKGxheWVyLmlkKSkge1xuICAgICAgICByZXR1cm4gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKGFjYywge1xuICAgICAgICAgIG9sZExheWVyOiBsYXllcixcbiAgICAgICAgICBuZXdDb25maWc6IHtpc1Zpc2libGU6IG5ld0xheWVyR3JvdXAuaXNWaXNpYmxlfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgbmV3U3RhdGUpO1xuICB9XG5cbiAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgbmV3TGF5ZXJHcm91cCk7XG4gIHJldHVybiB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlclxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgYSBsYXllciB0byBhIGxheWVyIGdyb3VwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZExheWVyVG9MYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7bGF5ZXJHcm91cElkLCBsYXllcklkfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBsYXllckdyb3VwSWQpO1xuICBjb25zdCBsYXllciA9IHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gbGF5ZXJJZCk7XG4gIGlmICghbGF5ZXJHcm91cCB8fCAhbGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBpZiAobGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmQoZW50cnkgPT4gZW50cnkgPT09IGxheWVySWQpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3R3JvdXBMYXllck9yZGVyID0gYWRkTGF5ZXJPckdyb3VwVG9MYXllck9yZGVyKGxheWVyR3JvdXAubGF5ZXJPcmRlciwgbGF5ZXJJZCk7XG4gIHJldHVybiB1cGRhdGVMYXllckdyb3VwVXBkYXRlcihzdGF0ZSwge1xuICAgIGlkOiBsYXllckdyb3VwSWQsXG4gICAgb3B0aW9uczoge2xheWVyT3JkZXI6IG5ld0dyb3VwTGF5ZXJPcmRlcn1cbiAgfSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGxheWVyIGZyb20gYSBsYXllciBncm91cFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUxheWVyRnJvbUxheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUxheWVyRnJvbUxheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtsYXllckdyb3VwSWQsIGxheWVySWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIGxheWVyR3JvdXBJZCk7XG4gIGlmICghbGF5ZXJHcm91cCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0xheWVyR3JvdXBPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihsYXllckdyb3VwLmxheWVyT3JkZXIsIGxheWVySWQpO1xuICByZXR1cm4gdXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXIoc3RhdGUsIHtcbiAgICBpZDogbGF5ZXJHcm91cElkLFxuICAgIG9wdGlvbnM6IHtsYXllck9yZGVyOiBuZXdMYXllckdyb3VwT3JkZXJ9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBTd2FwIGxheWVyIG9yZGVyIGVudHJpZXMgYmV0d2VlbiByb290IGFuZCBncm91cHNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgY29uc3Qgc3dhcExheWVyT3JkZXJFbnRyaWVzVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Td2FwTGF5ZXJPcmRlckVudHJpZXNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtvcmlnaW5MYXllcklkLCBkZXN0aW5hdGlvbkxheWVySWQsIG9yaWdpbkxheWVyR3JvdXBJZCwgZGVzdGluYXRpb25MYXllckdyb3VwSWR9ID0gYWN0aW9uO1xuXG4gIGlmICghb3JpZ2luTGF5ZXJHcm91cElkICYmICFkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgIGNvbnN0IG9yaWdpbkluZGV4ID0gc3RhdGUubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gb3JpZ2luTGF5ZXJJZCA6IGVudHJ5LmlkID09PSBvcmlnaW5MYXllcklkXG4gICAgKTtcbiAgICBpZiAoZGVzdGluYXRpb25MYXllcklkICYmIG9yaWdpbkluZGV4ICE9PSAtMSkge1xuICAgICAgY29uc3QgZGVzdGluYXRpb25JbmRleCA9IHN0YXRlLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+XG4gICAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gZGVzdGluYXRpb25MYXllcklkIDogZW50cnkuaWQgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZFxuICAgICAgKTtcbiAgICAgIGlmIChkZXN0aW5hdGlvbkluZGV4ICE9PSAtMSkge1xuICAgICAgICBjb25zdCBuZXdMYXllck9yZGVyID0gYXJyYXlNb3ZlKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkluZGV4LCBkZXN0aW5hdGlvbkluZGV4KTtcbiAgICAgICAgcmV0dXJuIHsuLi5zdGF0ZSwgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlcn07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKG9yaWdpbkxheWVyR3JvdXBJZCAmJiAhZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICBsZXQgbmV3TGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5MYXllcklkKTtcbiAgICBpZiAoZGVzdGluYXRpb25MYXllcklkKSB7XG4gICAgICBjb25zdCBkZXN0aW5hdGlvbkluZGV4ID0gbmV3TGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBkZXN0aW5hdGlvbkxheWVySWQgOiBmYWxzZVxuICAgICAgKTtcbiAgICAgIG5ld0xheWVyT3JkZXIuc3BsaWNlKGRlc3RpbmF0aW9uSW5kZXggPT09IC0xID8gMCA6IGRlc3RpbmF0aW9uSW5kZXgsIDAsIG9yaWdpbkxheWVySWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllck9yZGVyID0gWy4uLm5ld0xheWVyT3JkZXIsIG9yaWdpbkxheWVySWRdO1xuICAgIH1cbiAgICByZXR1cm4gey4uLnN0YXRlLCBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyfTtcbiAgfVxuXG4gIGlmIChvcmlnaW5MYXllckdyb3VwSWQgJiYgZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICBpZiAob3JpZ2luTGF5ZXJHcm91cElkID09PSBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgICAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5MYXllckdyb3VwSWQpO1xuICAgICAgaWYgKCFsYXllckdyb3VwKSByZXR1cm4gc3RhdGU7XG4gICAgICBjb25zdCBvcmlnaW5JbmRleCA9IGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBvcmlnaW5MYXllcklkIDogZW50cnkuaWQgPT09IG9yaWdpbkxheWVySWRcbiAgICAgICk7XG4gICAgICBpZiAob3JpZ2luSW5kZXggPT09IC0xKSByZXR1cm4gc3RhdGU7XG4gICAgICBpZiAoZGVzdGluYXRpb25MYXllcklkKSB7XG4gICAgICAgIGNvbnN0IGRlc3RJbmRleCA9IGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZCA6IGVudHJ5LmlkID09PSBkZXN0aW5hdGlvbkxheWVySWRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGRlc3RJbmRleCA9PT0gLTEpIHJldHVybiBzdGF0ZTtcbiAgICAgICAgY29uc3QgbmV3R3JvdXBMYXllck9yZGVyID0gYXJyYXlNb3ZlKGxheWVyR3JvdXAubGF5ZXJPcmRlciwgb3JpZ2luSW5kZXgsIGRlc3RJbmRleCk7XG4gICAgICAgIGNvbnN0IG5ld0xheWVyT3JkZXIgPSB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIHtcbiAgICAgICAgICAuLi5sYXllckdyb3VwLFxuICAgICAgICAgIGxheWVyT3JkZXI6IG5ld0dyb3VwTGF5ZXJPcmRlclxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsuLi5zdGF0ZSwgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlcn07XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgLy8gQ3Jvc3MtZ3JvdXAgbW92ZTogcmVtb3ZlIGZyb20gb3JpZ2luLCB0aGVuIGFkZCB0byBkZXN0aW5hdGlvblxuICAgIGNvbnN0IGxheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJJZCk7XG4gICAgbGV0IG5ld1N0YXRlID0gYWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyKFxuICAgICAgey4uLnN0YXRlLCBsYXllck9yZGVyfSxcbiAgICAgIHtsYXllcklkOiBvcmlnaW5MYXllcklkLCBsYXllckdyb3VwSWQ6IGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkfVxuICAgICk7XG5cbiAgICBpZiAoZGVzdGluYXRpb25MYXllcklkKSB7XG4gICAgICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKTtcbiAgICAgIGlmICghbGF5ZXJHcm91cCkgcmV0dXJuIHN0YXRlO1xuICAgICAgY29uc3Qgb3JpZ2luSW5kZXggPSBsYXllckdyb3VwLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+IGVudHJ5ID09PSBvcmlnaW5MYXllcklkKTtcbiAgICAgIGNvbnN0IGRlc3RJbmRleCA9IGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT4gZW50cnkgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZCk7XG4gICAgICBpZiAob3JpZ2luSW5kZXggIT09IC0xICYmIGRlc3RJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgY29uc3QgbmV3R3JvdXBMYXllck9yZGVyID0gYXJyYXlNb3ZlKGxheWVyR3JvdXAubGF5ZXJPcmRlciwgb3JpZ2luSW5kZXgsIGRlc3RJbmRleCk7XG4gICAgICAgIG5ld1N0YXRlID0ge1xuICAgICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgICAgIGxheWVyT3JkZXI6IHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwge1xuICAgICAgICAgICAgLi4ubGF5ZXJHcm91cCxcbiAgICAgICAgICAgIGxheWVyT3JkZXI6IG5ld0dyb3VwTGF5ZXJPcmRlclxuICAgICAgICAgIH0pXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfVxuXG4gIGlmICghb3JpZ2luTGF5ZXJHcm91cElkICYmIGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgY29uc3QgbGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5MYXllcklkKTtcbiAgICByZXR1cm4gYWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyKFxuICAgICAgey4uLnN0YXRlLCBsYXllck9yZGVyfSxcbiAgICAgIHtsYXllcklkOiBvcmlnaW5MYXllcklkLCBsYXllckdyb3VwSWQ6IGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkfVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59O1xuXG4vKipcbiAqIGR1cGxpY2F0ZSBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGR1cGxpY2F0ZUxheWVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuRHVwbGljYXRlTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IE51bWJlci5pc0Zpbml0ZShpZClcbiAgICA/IC8vIHN1cHBvcnQgb2xkZXIgQVBJLCByZW1vdmUgbGF5ZXIgYnkgaWR4XG4gICAgICBOdW1iZXIoaWQpXG4gICAgOiBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCAhc3RhdGUubGF5ZXJzW2lkeF0pIHtcbiAgICBDb25zb2xlLndhcm4oYGxheWVyICR7aWR4fSBub3QgZm91bmQgaW4gbGF5ZXJPcmRlcmApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtsYXllcnN9ID0gc3RhdGU7XG4gIGNvbnN0IG9yaWdpbmFsID0gbGF5ZXJzW2lkeF07XG5cbiAgY29uc3Qgb3JpZ2luYWxMYXllck9yZGVySWR4ID0gZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbmFsLmlkKTtcbiAgbGV0IG5ld0xhYmVsID0gYENvcHkgb2YgJHtvcmlnaW5hbC5jb25maWcubGFiZWx9YDtcbiAgbGV0IHBvc3RmaXggPSAwO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gIHdoaWxlIChsYXllcnMuZmluZChsID0+IGwuY29uZmlnLmxhYmVsID09PSBuZXdMYWJlbCkpIHtcbiAgICBuZXdMYWJlbCA9IGBDb3B5IG9mICR7b3JpZ2luYWwuY29uZmlnLmxhYmVsfSAkeysrcG9zdGZpeH1gO1xuICB9XG5cbiAgLy8gY29sbGVjdCBsYXllciBjb25maWcgZnJvbSBvcmlnaW5hbFxuICBjb25zdCBsb2FkZWRMYXllciA9IHNlcmlhbGl6ZUxheWVyKG9yaWdpbmFsLCBzdGF0ZS5zY2hlbWEpO1xuXG4gIC8vIGFzc2lnbiBuZXcgaWQgYW5kIGxhYmVsIHRvIGNvcGllZCBsYXllclxuICBpZiAoIWxvYWRlZExheWVyPy5jb25maWcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbG9hZGVkTGF5ZXIuY29uZmlnLmxhYmVsID0gbmV3TGFiZWw7XG4gIGxvYWRlZExheWVyLmlkID0gZ2VuZXJhdGVIYXNoSWQoTEFZRVJfSURfTEVOR1RIKTtcblxuICAvLyBhZGQgbGF5ZXIgdG8gc3RhdGVcbiAgbGV0IG5leHRTdGF0ZSA9IGFkZExheWVyVXBkYXRlcihzdGF0ZSwge2NvbmZpZzogbG9hZGVkTGF5ZXJ9KTtcbiAgLy8gcmV0cmlldmUgbmV3bHkgY3JlYXRlZCBsYXllclxuICBjb25zdCBuZXdMYXllciA9IG5leHRTdGF0ZS5sYXllcnNbbmV4dFN0YXRlLmxheWVycy5sZW5ndGggLSAxXTtcblxuICAvLyBDaGVjayBpZiB0aGUgb3JpZ2luYWwgbGF5ZXIgaXMgaW5zaWRlIGEgZ3JvdXBcbiAgY29uc3QgcGFyZW50R3JvdXAgPSBmaW5kUGFyZW50R3JvdXBGb3JMYXllcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5hbC5pZCk7XG5cbiAgaWYgKHBhcmVudEdyb3VwKSB7XG4gICAgLy8gTGF5ZXIgaXMgaW5zaWRlIGEgZ3JvdXAgLSByZW1vdmUgdGhlIHByZXBlbmRlZCBpZCBmcm9tIHJvb3QgYW5kIGluc2VydCBpbnRvIHRoZSBncm91cFxuICAgIGNvbnN0IGxheWVyT3JkZXJXaXRob3V0UHJlcGVuZGVkID0gbmV4dFN0YXRlLmxheWVyT3JkZXIuc2xpY2UoMSk7XG4gICAgY29uc3QgaWR4SW5Hcm91cCA9IHBhcmVudEdyb3VwLmxheWVyT3JkZXIuZmluZEluZGV4KGUgPT4gZSA9PT0gb3JpZ2luYWwuaWQpO1xuICAgIGNvbnN0IG5ld0dyb3VwTGF5ZXJPcmRlciA9IGFycmF5SW5zZXJ0KHBhcmVudEdyb3VwLmxheWVyT3JkZXIsIGlkeEluR3JvdXAsIG5ld0xheWVyLmlkKTtcbiAgICBjb25zdCB1cGRhdGVkR3JvdXAgPSB7Li4ucGFyZW50R3JvdXAsIGxheWVyT3JkZXI6IG5ld0dyb3VwTGF5ZXJPcmRlcn07XG4gICAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIobGF5ZXJPcmRlcldpdGhvdXRQcmVwZW5kZWQsIHVwZGF0ZWRHcm91cCk7XG4gICAgbmV4dFN0YXRlID0gcmVvcmRlckxheWVyVXBkYXRlcihuZXh0U3RhdGUsIHtvcmRlcjogbmV3TGF5ZXJPcmRlcn0pO1xuICB9IGVsc2Uge1xuICAgIC8vIExheWVyIGlzIGF0IHJvb3QgbGV2ZWwgLSB1c2Ugb3JpZ2luYWwgaW5kZXgtYmFzZWQgaW5zZXJ0aW9uXG4gICAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IGFycmF5SW5zZXJ0KFxuICAgICAgbmV4dFN0YXRlLmxheWVyT3JkZXIuc2xpY2UoMSwgbmV4dFN0YXRlLmxheWVyT3JkZXIubGVuZ3RoKSxcbiAgICAgIG9yaWdpbmFsTGF5ZXJPcmRlcklkeCxcbiAgICAgIG5ld0xheWVyLmlkXG4gICAgKTtcbiAgICBuZXh0U3RhdGUgPSByZW9yZGVyTGF5ZXJVcGRhdGVyKG5leHRTdGF0ZSwge29yZGVyOiBuZXdMYXllck9yZGVyfSk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIEFkZCBhIG5ldyBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZEVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKFxuICAgIGFjdGlvbi5jb25maWc/LnR5cGUgPT09IExJR0hUX0FORF9TSEFET1dfRUZGRUNULnR5cGUgJiZcbiAgICBzdGF0ZS5lZmZlY3RzLnNvbWUoZWZmZWN0ID0+IGVmZmVjdC50eXBlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC50eXBlKVxuICApIHtcbiAgICBDb25zb2xlLndhcm4oYENhbid0IGFkZCBtb3JlIHRoYW4gb25lICR7TElHSFRfQU5EX1NIQURPV19FRkZFQ1QubmFtZX0gZWZmZWN0YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgaWYgKFxuICAgIGFjdGlvbi5jb25maWc/LnR5cGUgPT09IERJU1RBTkNFX0ZPR19UWVBFICYmXG4gICAgc3RhdGUuZWZmZWN0cy5zb21lKFxuICAgICAgZWZmZWN0ID0+IGVmZmVjdC50eXBlID09PSBESVNUQU5DRV9GT0dfVFlQRSB8fCBlZmZlY3QudHlwZSA9PT0gU1VSRkFDRV9GT0dfVFlQRVxuICAgIClcbiAgKSB7XG4gICAgQ29uc29sZS53YXJuKFwiQ2FuJ3QgYWRkIG1vcmUgdGhhbiBvbmUgZm9nIGVmZmVjdFwiKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBpZiAoXG4gICAgYWN0aW9uLmNvbmZpZz8udHlwZSA9PT0gU1VSRkFDRV9GT0dfVFlQRSAmJlxuICAgIHN0YXRlLmVmZmVjdHMuc29tZShcbiAgICAgIGVmZmVjdCA9PiBlZmZlY3QudHlwZSA9PT0gU1VSRkFDRV9GT0dfVFlQRSB8fCBlZmZlY3QudHlwZSA9PT0gRElTVEFOQ0VfRk9HX1RZUEVcbiAgICApXG4gICkge1xuICAgIENvbnNvbGUud2FybihcIkNhbid0IGFkZCBtb3JlIHRoYW4gb25lIGZvZyBlZmZlY3RcIik7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RWZmZWN0ID0gY3JlYXRlRWZmZWN0KGFjdGlvbi5jb25maWcpO1xuXG4gIC8vIGNvbGxhcHNlIGNvbmZpZ3VyYXRvcnMgZm9yIG90aGVyIGVmZmVjdHNcbiAgc3RhdGUuZWZmZWN0cy5mb3JFYWNoKGVmZmVjdCA9PiBlZmZlY3Quc2V0UHJvcHMoe2lzQ29uZmlnQWN0aXZlOiBmYWxzZX0pKTtcblxuICBjb25zdCBlZmZlY3RzID0gWy4uLnN0YXRlLmVmZmVjdHMsIG5ld0VmZmVjdF07XG4gIGNvbnN0IGVmZmVjdE9yZGVyID0gZml4RWZmZWN0T3JkZXIoZWZmZWN0cywgW25ld0VmZmVjdC5pZCwgLi4uc3RhdGUuZWZmZWN0T3JkZXJdKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVmZmVjdHMsXG4gICAgZWZmZWN0T3JkZXJcbiAgfTtcbn07XG5cbi8qKlxuICogcmVtb3ZlIGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gc3RhdGUuZWZmZWN0cy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8IGlkeCA+PSBzdGF0ZS5lZmZlY3RzLmxlbmd0aCkge1xuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCByZW1vdmUgZWZmZWN0IHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtlZmZlY3RzLCBlZmZlY3RPcmRlcn0gPSBzdGF0ZTtcbiAgY29uc3QgZWZmZWN0VG9SZW1vdmUgPSBlZmZlY3RzW2lkeF07XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBmaXhlZCBpbiB0c1xuICAgIGVmZmVjdHM6IGZpbHRlck91dEJ5SWQoZWZmZWN0VG9SZW1vdmUuaWQpKGVmZmVjdHMpLFxuICAgIGVmZmVjdE9yZGVyOiBlZmZlY3RPcmRlci5maWx0ZXIoZWZmZWN0SWQgPT4gZWZmZWN0SWQgIT09IGVmZmVjdFRvUmVtb3ZlLmlkKVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW9yZGVyIGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlb3JkZXJFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvcmRlcn06IFZpc1N0YXRlQWN0aW9ucy5SZW9yZGVyRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGVmZmVjdE9yZGVyOiBmaXhFZmZlY3RPcmRlcihzdGF0ZS5lZmZlY3RzLCBbLi4ub3JkZXJdKVxufSk7XG5cbi8qKlxuICogVXBkYXRlIGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkLCBwcm9wc306IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmVmZmVjdHMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gc3RhdGUuZWZmZWN0cy5sZW5ndGgpIHtcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgdXBkYXRlIGVmZmVjdCB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgZWZmZWN0T3JkZXIgPSBzdGF0ZS5lZmZlY3RPcmRlcjtcbiAgaWYgKHByb3BzLmlkICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuaWQgIT09IGlkKSB7XG4gICAgY29uc3QgaWR4MiA9IHN0YXRlLmVmZmVjdHMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gcHJvcHMuaWQpO1xuICAgIGlmIChpZHgyID49IDApIHtcbiAgICAgIENvbnNvbGUud2FybihgY2FuIG5vdCB1cGRhdGUgZWZmZWN0IHdpdGggZXhpc3RpbmcgZWZmZWN0IGlkICR7aWR9YCk7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgZWZmZWN0T3JkZXIgPSBlZmZlY3RPcmRlci5tYXAoZWZmZWN0T3JkZXJJZCA9PlxuICAgICAgZWZmZWN0T3JkZXJJZCA9PT0gaWQgPyAocHJvcHMuaWQgYXMgc3RyaW5nKSA6IGVmZmVjdE9yZGVySWRcbiAgICApO1xuICB9XG5cbiAgY29uc3QgZWZmZWN0ID0gc3RhdGUuZWZmZWN0c1tpZHhdO1xuICBjb25zdCBuZXh0UGFyYW1zID0gcHJvcHMucGFyYW1ldGVycztcbiAgLy8gQSB0aW1lc3RhbXAtb25seSBuby1vcCBzdGlsbCB1c2VkIHRvIGFsbG9jYXRlIGEgbmV3IHZpc1N0YXRlIChzZXRQcm9wc1xuICAvLyBtdXRhdGVzIGluIHBsYWNlKS4gVGhhdCByZXRyaWdnZXJlZCBuZXN0ZWQgcmVhY3QtcmVkdXggY29ubmVjdCBzdWJzY3JpYmVyc1xuICAvLyB3aGlsZSBkcmFnZ2luZyB0aGUgTGlnaHQgJiBTaGFkb3cgZGF5LXRpbWUgc2xpZGVyIHVudGlsIFJlYWN0IHRocmV3XG4gIC8vIFwiTWF4aW11bSB1cGRhdGUgZGVwdGggZXhjZWVkZWRcIi5cbiAgaWYgKFxuICAgIG5leHRQYXJhbXMgJiZcbiAgICBPYmplY3Qua2V5cyhwcm9wcykubGVuZ3RoID09PSAxICYmXG4gICAgT2JqZWN0LmtleXMobmV4dFBhcmFtcykubGVuZ3RoID09PSAxICYmXG4gICAgbmV4dFBhcmFtcy50aW1lc3RhbXAgIT0gbnVsbCAmJlxuICAgIG5leHRQYXJhbXMudGltZXN0YW1wID09PSBlZmZlY3QucGFyYW1ldGVycy50aW1lc3RhbXBcbiAgKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RWZmZWN0cyA9IFsuLi5zdGF0ZS5lZmZlY3RzXTtcbiAgbmV3RWZmZWN0c1tpZHhdLnNldFByb3BzKHByb3BzKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVmZmVjdHM6IG5ld0VmZmVjdHMsXG4gICAgZWZmZWN0T3JkZXJcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGlzTGF5ZXJDaGFydENvbmZpZyhjaGFydDogQ2hhcnRDb25maWcpOiBjaGFydCBpcyBMYXllckNoYXJ0Q29uZmlnIHtcbiAgcmV0dXJuIGNoYXJ0LnR5cGUgPT09ICdsYXllckNoYXJ0Jztcbn1cblxuZnVuY3Rpb24gbWVyZ2VDaGFydENvbmZpZyhjaGFydDogQ2hhcnRDb25maWcsIHByb3BzOiBQYXJ0aWFsPENoYXJ0Q29uZmlnPik6IENoYXJ0Q29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5jaGFydCxcbiAgICAuLi5wcm9wcyxcbiAgICBkaXNwbGF5OiB7XG4gICAgICAuLi5jaGFydC5kaXNwbGF5LFxuICAgICAgLi4uKHByb3BzLmRpc3BsYXkgfHwge30pXG4gICAgfSxcbiAgICBjaGFydERpc3BsYXk6IHtcbiAgICAgIC4uLmNoYXJ0LmNoYXJ0RGlzcGxheSxcbiAgICAgIC4uLigocHJvcHMgYXMgQ2hhcnRDb25maWcpLmNoYXJ0RGlzcGxheSB8fCB7fSlcbiAgICB9XG4gIH0gYXMgQ2hhcnRDb25maWc7XG59XG5cbmZ1bmN0aW9uIGF4aXNGaWVsZElmUHJlc2VudDxUIGV4dGVuZHMge2ZpZWxkPzoge25hbWU6IHN0cmluZ30gfCBudWxsOyB0aXRsZT86IHN0cmluZyB8IG51bGx9PihcbiAgYXhpczogVCB8IHVuZGVmaW5lZCxcbiAgZmllbGROYW1lczogU2V0PHN0cmluZz5cbik6IFQgfCB1bmRlZmluZWQge1xuICBpZiAoIWF4aXM/LmZpZWxkPy5uYW1lIHx8IGZpZWxkTmFtZXMuaGFzKGF4aXMuZmllbGQubmFtZSkpIHtcbiAgICByZXR1cm4gYXhpcztcbiAgfVxuICByZXR1cm4gey4uLmF4aXMsIGZpZWxkOiBudWxsLCB0aXRsZTogbnVsbH07XG59XG5cbmZ1bmN0aW9uIGRyb3BNaXNzaW5nQ2hhcnRGaWVsZHMoXG4gIGNoYXJ0OiBDaGFydENvbmZpZyxcbiAgZGF0YXNldDoge2ZpZWxkcz86IHtuYW1lOiBzdHJpbmd9W119IHwgdW5kZWZpbmVkXG4pOiBDaGFydENvbmZpZyB7XG4gIGNvbnN0IGZpZWxkTmFtZXMgPSBuZXcgU2V0KChkYXRhc2V0Py5maWVsZHMgfHwgW10pLm1hcChmaWVsZCA9PiBmaWVsZC5uYW1lKSk7XG4gIGNvbnN0IG5leHQgPSBjaGFydCBhcyBDaGFydENvbmZpZyAmIHtcbiAgICB4QXhpcz86IHtmaWVsZD86IHtuYW1lOiBzdHJpbmd9IHwgbnVsbH07XG4gICAgeUF4aXM/OiB7ZmllbGQ/OiB7bmFtZTogc3RyaW5nfSB8IG51bGx9O1xuICAgIGF4aXM/OiB7ZmllbGQ/OiB7bmFtZTogc3RyaW5nfSB8IG51bGx9O1xuICAgIGdyb3VwQnk/OiB7ZmllbGQ/OiB7bmFtZTogc3RyaW5nfSB8IG51bGx9O1xuICAgIHZhbHVlPzoge2ZpZWxkPzoge25hbWU6IHN0cmluZ30gfCBudWxsfTtcbiAgfTtcbiAgcmV0dXJuIG1lcmdlQ2hhcnRDb25maWcoY2hhcnQsIHtcbiAgICB4QXhpczogYXhpc0ZpZWxkSWZQcmVzZW50KG5leHQueEF4aXMsIGZpZWxkTmFtZXMpLFxuICAgIHlBeGlzOiBheGlzRmllbGRJZlByZXNlbnQobmV4dC55QXhpcywgZmllbGROYW1lcyksXG4gICAgYXhpczogYXhpc0ZpZWxkSWZQcmVzZW50KG5leHQuYXhpcywgZmllbGROYW1lcyksXG4gICAgZ3JvdXBCeTogYXhpc0ZpZWxkSWZQcmVzZW50KG5leHQuZ3JvdXBCeSwgZmllbGROYW1lcyksXG4gICAgdmFsdWU6IGF4aXNGaWVsZElmUHJlc2VudChuZXh0LnZhbHVlLCBmaWVsZE5hbWVzKVxuICB9IGFzIFBhcnRpYWw8Q2hhcnRDb25maWc+KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ2hhcnRzQW5kRmlsdGVyczxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgc2hvdWxkUmVtb3ZlOiAoY2hhcnQ6IENoYXJ0Q29uZmlnKSA9PiBib29sZWFuXG4pOiBUIHtcbiAgY29uc3QgY2hhcnRzID0gc3RhdGUuY2hhcnRzIHx8IFtdO1xuICBjb25zdCByZW1vdmVkID0gY2hhcnRzLmZpbHRlcihzaG91bGRSZW1vdmUpO1xuICBpZiAoIXJlbW92ZWQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHJlbW92ZWRJZHMgPSBuZXcgU2V0KHJlbW92ZWQubWFwKGNoYXJ0ID0+IGNoYXJ0LmlkKSk7XG4gIGNvbnN0IGZpbHRlcklkcyA9IG5ldyBTZXQoXG4gICAgcmVtb3ZlZC5mbGF0TWFwKGNoYXJ0ID0+IHtcbiAgICAgIGNvbnN0IGlkID0gY2hhcnQuY3Jvc3NGaWx0ZXI/LmZpbHRlcklkO1xuICAgICAgcmV0dXJuIGlkID8gW2lkLCBgJHtpZH0teGAsIGAke2lkfS15YF0gOiBbXTtcbiAgICB9KVxuICApO1xuICBsZXQgbmV4dFN0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjaGFydHM6IGNoYXJ0cy5maWx0ZXIoY2hhcnQgPT4gIXJlbW92ZWRJZHMuaGFzKGNoYXJ0LmlkKSlcbiAgfTtcbiAgaWYgKGZpbHRlcklkcy5zaXplKSB7XG4gICAgbmV4dFN0YXRlID0gbmV4dFN0YXRlLmZpbHRlcnMucmVkdWNlUmlnaHQoKGFjY3UsIGZpbHRlciwgaWR4KSA9PiB7XG4gICAgICByZXR1cm4gZmlsdGVySWRzLmhhcyhmaWx0ZXIuaWQpID8gcmVtb3ZlRmlsdGVyVXBkYXRlcihhY2N1LCB7aWR4fSkgOiBhY2N1O1xuICAgIH0sIG5leHRTdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIG5leHRTdGF0ZSBhcyBUO1xufVxuXG4vKipcbiAqIEFkZCBhIGNoYXJ0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkQ2hhcnRVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtjaGFydH06IFZpc1N0YXRlQWN0aW9ucy5BZGRDaGFydFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKCFjaGFydD8uaWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKChzdGF0ZS5jaGFydHMgfHwgW10pLnNvbWUoZXhpc3RpbmcgPT4gZXhpc3RpbmcuaWQgPT09IGNoYXJ0LmlkKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNoYXJ0czogW1xuICAgICAgLi4uKHN0YXRlLmNoYXJ0cyB8fCBbXSkubWFwKGV4aXN0aW5nID0+ICh7XG4gICAgICAgIC4uLmV4aXN0aW5nLFxuICAgICAgICBkaXNwbGF5OiB7XG4gICAgICAgICAgLi4uZXhpc3RpbmcuZGlzcGxheSxcbiAgICAgICAgICBpc0NvbmZpZ0FjdGl2ZTogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSkpLFxuICAgICAge1xuICAgICAgICAuLi5jaGFydCxcbiAgICAgICAgZGlzcGxheToge1xuICAgICAgICAgIC4uLmNoYXJ0LmRpc3BsYXksXG4gICAgICAgICAgaXNDb25maWdBY3RpdmU6IGNoYXJ0LmRpc3BsYXk/LmlzQ29uZmlnQWN0aXZlID8/IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdXG4gIH07XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBhIGNoYXJ0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlQ2hhcnRVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZCwgcHJvcHN9OiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlQ2hhcnRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IChzdGF0ZS5jaGFydHMgfHwgW10pLmZpbmRJbmRleChjaGFydCA9PiBjaGFydC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBwcmV2ID0gc3RhdGUuY2hhcnRzW2lkeF07XG4gIGNvbnN0IGRhdGFJZENoYW5nZWQgPSB0eXBlb2YgcHJvcHMuZGF0YUlkID09PSAnc3RyaW5nJyAmJiBwcm9wcy5kYXRhSWQgIT09IHByZXYuZGF0YUlkO1xuICBjb25zdCBsYXllcklkQ2hhbmdlZCA9XG4gICAgaXNMYXllckNoYXJ0Q29uZmlnKHByZXYpICYmXG4gICAgdHlwZW9mIChwcm9wcyBhcyBMYXllckNoYXJ0Q29uZmlnKS5sYXllcklkID09PSAnc3RyaW5nJyAmJlxuICAgIChwcm9wcyBhcyBMYXllckNoYXJ0Q29uZmlnKS5sYXllcklkICE9PSBwcmV2LmxheWVySWQ7XG4gIGxldCBuZXh0ID0gbWVyZ2VDaGFydENvbmZpZyhwcmV2LCBwcm9wcyk7XG4gIGlmIChkYXRhSWRDaGFuZ2VkIHx8IGxheWVySWRDaGFuZ2VkKSB7XG4gICAgY29uc3QgZGF0YUlkID0gbmV4dC5kYXRhSWQgfHwgdW5kZWZpbmVkO1xuICAgIG5leHQgPSBkcm9wTWlzc2luZ0NoYXJ0RmllbGRzKG5leHQsIGRhdGFJZCA/IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF0gOiB1bmRlZmluZWQpO1xuICAgIGlmIChuZXh0LmNyb3NzRmlsdGVyPy5lbmFibGVkKSB7XG4gICAgICBuZXh0ID0gbWVyZ2VDaGFydENvbmZpZyhuZXh0LCB7XG4gICAgICAgIGNyb3NzRmlsdGVyOiB7Li4ubmV4dC5jcm9zc0ZpbHRlciwgZW5hYmxlZDogZmFsc2UsIHZhbHVlOiB7fSwgZmllbGROYW1lczoge319XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgY29uc3QgY2hhcnRzID0gWy4uLnN0YXRlLmNoYXJ0c107XG4gIGNoYXJ0c1tpZHhdID0gbmV4dDtcbiAgbGV0IG5leHRTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2hhcnRzXG4gIH07XG4gIGNvbnN0IGZpbHRlcklkID0gbmV4dC5jcm9zc0ZpbHRlcj8uZmlsdGVySWQgfHwgcHJldi5jcm9zc0ZpbHRlcj8uZmlsdGVySWQ7XG4gIGlmIChwcmV2LmNyb3NzRmlsdGVyPy5lbmFibGVkICYmICFuZXh0LmNyb3NzRmlsdGVyPy5lbmFibGVkICYmIGZpbHRlcklkKSB7XG4gICAgY29uc3Qgb3duZWRGaWx0ZXJJZHMgPSBuZXcgU2V0KFtmaWx0ZXJJZCwgYCR7ZmlsdGVySWR9LXhgLCBgJHtmaWx0ZXJJZH0teWBdKTtcbiAgICBuZXh0U3RhdGUgPSBuZXh0U3RhdGUuZmlsdGVycy5yZWR1Y2VSaWdodCgoYWNjdSwgZmlsdGVyLCBpZHgpID0+IHtcbiAgICAgIHJldHVybiBvd25lZEZpbHRlcklkcy5oYXMoZmlsdGVyLmlkKSA/IHJlbW92ZUZpbHRlclVwZGF0ZXIoYWNjdSwge2lkeH0pIDogYWNjdTtcbiAgICB9LCBuZXh0U3RhdGUpO1xuICB9XG4gIHJldHVybiBuZXh0U3RhdGU7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGNoYXJ0IGFuZCBhbnkgY3Jvc3MtZmlsdGVyIGl0IG93bnNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVDaGFydFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUNoYXJ0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gcmVtb3ZlQ2hhcnRzQW5kRmlsdGVycyhzdGF0ZSwgY2hhcnQgPT4gY2hhcnQuaWQgPT09IGlkKTtcblxuLy8gQU5OT1RBVElPTiBVUERBVEVSU1xuXG5mdW5jdGlvbiBtYWtlTmV3QW5ub3RhdGlvbihjb25maWc/OiBBbm5vdGF0aW9uUHJvcHNQYXJ0aWFsKTogQW5ub3RhdGlvbiB7XG4gIGNvbnN0IGtpbmQgPSBjb25maWc/LmtpbmQgPz8gSU5JVElBTF9BTk5PVEFUSU9OX0tJTkQ7XG4gIGNvbnN0IHByb3ZpZGVkQW5nbGUgPSBOdW1iZXIuaXNGaW5pdGUoKGNvbmZpZyBhcyBhbnkpPy5hbmdsZSkgPyAoY29uZmlnIGFzIGFueSkuYW5nbGUgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGRlcml2ZWRGcm9tQW5nbGUgPVxuICAgIHByb3ZpZGVkQW5nbGUgIT0gbnVsbCA/IHRleHRQbGFjZW1lbnRGcm9tQW5nbGUocHJvdmlkZWRBbmdsZSkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHRleHRTaWRlID1cbiAgICBjb25maWc/LnRleHRTaWRlID8/XG4gICAgZGVyaXZlZEZyb21BbmdsZT8uc2lkZSA/P1xuICAgIChraW5kID09PSBBbm5vdGF0aW9uS2luZC5URVhUID8gdW5kZWZpbmVkIDogSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfU0lERSk7XG4gIGNvbnN0IHRleHRWZXJ0aWNhbFBvc2l0aW9uID1cbiAgICBjb25maWc/LnRleHRWZXJ0aWNhbFBvc2l0aW9uID8/XG4gICAgZGVyaXZlZEZyb21BbmdsZT8udmVydGljYWwgPz9cbiAgICAoa2luZCA9PT0gQW5ub3RhdGlvbktpbmQuVEVYVCA/IHVuZGVmaW5lZCA6IElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1ZFUlRJQ0FMX1BPU0lUSU9OKTtcbiAgY29uc3QgYmFzZSA9IHtcbiAgICBpZDogY29uZmlnPy5pZCA/PyBnZW5lcmF0ZUhhc2hJZCg2KSxcbiAgICBraW5kLFxuICAgIGlzVmlzaWJsZTogY29uZmlnPy5pc1Zpc2libGUgPz8gdHJ1ZSxcbiAgICBhdXRvU2l6ZTogY29uZmlnPy5hdXRvU2l6ZSA/PyB0cnVlLFxuICAgIGF1dG9TaXplWTogY29uZmlnPy5hdXRvU2l6ZVkgPz8gdHJ1ZSxcbiAgICBhbmNob3JQb2ludDogY29uZmlnPy5hbmNob3JQb2ludCA/PyAoWzAsIDBdIGFzIFtudW1iZXIsIG51bWJlcl0pLFxuICAgIGxhYmVsOiBjb25maWc/LmxhYmVsID8/ICdOZXcgQW5ub3RhdGlvbicsXG4gICAgbGluZUNvbG9yOiBjb25maWc/LmxpbmVDb2xvciA/PyBJTklUSUFMX0FOTk9UQVRJT05fTElORV9DT0xPUixcbiAgICBsaW5lV2lkdGg6IGNvbmZpZz8ubGluZVdpZHRoID8/IElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX1dJRFRILFxuICAgIHRleHRXaWR0aDogY29uZmlnPy50ZXh0V2lkdGggPz8gSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfV0lEVEgsXG4gICAgdGV4dEhlaWdodDogY29uZmlnPy50ZXh0SGVpZ2h0ID8/IElOSVRJQUxfQU5OT1RBVElPTl9URVhUX0hFSUdIVCxcbiAgICB0ZXh0VmVydGljYWxBbGlnbjogY29uZmlnPy50ZXh0VmVydGljYWxBbGlnbiA/PyAoJ2JvdHRvbScgYXMgY29uc3QpLFxuICAgIC4uLih0ZXh0U2lkZSA/IHt0ZXh0U2lkZX0gOiB7fSksXG4gICAgLi4uKHRleHRWZXJ0aWNhbFBvc2l0aW9uID8ge3RleHRWZXJ0aWNhbFBvc2l0aW9ufSA6IHt9KSxcbiAgICBtYXBJbmRleDogY29uZmlnPy5tYXBJbmRleFxuICB9O1xuXG4gIGNvbnN0IGRlZmF1bHRBbmdsZSA9XG4gICAgdGV4dFNpZGUgJiYgdGV4dFZlcnRpY2FsUG9zaXRpb25cbiAgICAgID8gQU5OT1RBVElPTl9BTkdMRV9CWV9QTEFDRU1FTlRbYCR7dGV4dFNpZGV9LSR7dGV4dFZlcnRpY2FsUG9zaXRpb259YF1cbiAgICAgIDogSU5JVElBTF9BTk5PVEFUSU9OX0FOR0xFO1xuXG4gIHN3aXRjaCAoa2luZCkge1xuICAgIGNhc2UgQW5ub3RhdGlvbktpbmQuUE9JTlQ6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlLFxuICAgICAgICBraW5kOiBBbm5vdGF0aW9uS2luZC5QT0lOVCxcbiAgICAgICAgYXJtTGVuZ3RoOiAoY29uZmlnIGFzIGFueSk/LmFybUxlbmd0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCxcbiAgICAgICAgYW5nbGU6IHByb3ZpZGVkQW5nbGUgPz8gZGVmYXVsdEFuZ2xlXG4gICAgICB9O1xuICAgIGNhc2UgQW5ub3RhdGlvbktpbmQuQVJST1c6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlLFxuICAgICAgICBraW5kOiBBbm5vdGF0aW9uS2luZC5BUlJPVyxcbiAgICAgICAgYXJtTGVuZ3RoOiAoY29uZmlnIGFzIGFueSk/LmFybUxlbmd0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fQVJNX0xFTkdUSCxcbiAgICAgICAgYW5nbGU6IHByb3ZpZGVkQW5nbGUgPz8gZGVmYXVsdEFuZ2xlXG4gICAgICB9O1xuICAgIGNhc2UgQW5ub3RhdGlvbktpbmQuQ0lSQ0xFOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZSxcbiAgICAgICAga2luZDogQW5ub3RhdGlvbktpbmQuQ0lSQ0xFLFxuICAgICAgICBhcm1MZW5ndGg6IChjb25maWcgYXMgYW55KT8uYXJtTGVuZ3RoID8/IElOSVRJQUxfQU5OT1RBVElPTl9BUk1fTEVOR1RILFxuICAgICAgICBhbmdsZTogcHJvdmlkZWRBbmdsZSA/PyBkZWZhdWx0QW5nbGUsXG4gICAgICAgIHJhZGl1c0luTWV0ZXJzOiAoY29uZmlnIGFzIGFueSk/LnJhZGl1c0luTWV0ZXJzID8/IDEwMDBcbiAgICAgIH07XG4gICAgY2FzZSBBbm5vdGF0aW9uS2luZC5URVhUOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlLFxuICAgICAgICBraW5kOiBBbm5vdGF0aW9uS2luZC5URVhUXG4gICAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQWRkIGEgbmV3IGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRBbm5vdGF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBuZXdBbm5vdGF0aW9uID0gbWFrZU5ld0Fubm90YXRpb24oYWN0aW9uLmNvbmZpZyk7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5ub3RhdGlvbnM6IFtuZXdBbm5vdGF0aW9uLCAuLi5zdGF0ZS5hbm5vdGF0aW9uc10sXG4gICAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IG5ld0Fubm90YXRpb24uaWQsXG4gICAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6IHRydWVcbiAgfTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGFuIGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlQW5ub3RhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbm5vdGF0aW9uczogc3RhdGUuYW5ub3RhdGlvbnMuZmlsdGVyKGEgPT4gYS5pZCAhPT0gaWQpLFxuICAgIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBzdGF0ZS5zZWxlY3RlZEFubm90YXRpb25JZCA9PT0gaWQgPyBudWxsIDogc3RhdGUuc2VsZWN0ZWRBbm5vdGF0aW9uSWQsXG4gICAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6XG4gICAgICBzdGF0ZS5zZWxlY3RlZEFubm90YXRpb25JZCA9PT0gaWQgPyBmYWxzZSA6IHN0YXRlLmlzRWRpdGluZ0Fubm90YXRpb25UZXh0XG4gIH07XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBhbiBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkLCBjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlQW5ub3RhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gc3RhdGUuYW5ub3RhdGlvbnMuZmluZEluZGV4KGEgPT4gYS5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCkge1xuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCB1cGRhdGUgYW5ub3RhdGlvbiB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgcHJldiA9IHN0YXRlLmFubm90YXRpb25zW2lkeF07XG4gIGxldCBuZXh0QW5ub3RhdGlvbjogQW5ub3RhdGlvbjtcblxuICBpZiAoY29uZmlnLmtpbmQgJiYgY29uZmlnLmtpbmQgIT09IHByZXYua2luZCkge1xuICAgIG5leHRBbm5vdGF0aW9uID0gbWFrZU5ld0Fubm90YXRpb24oey4uLnByZXYsIC4uLmNvbmZpZ30gYXMgQW5ub3RhdGlvblByb3BzUGFydGlhbCk7XG4gIH0gZWxzZSB7XG4gICAgbmV4dEFubm90YXRpb24gPSB7Li4ucHJldiwgLi4uY29uZmlnfSBhcyBBbm5vdGF0aW9uO1xuICB9XG5cbiAgY29uc3QgbmV3QW5ub3RhdGlvbnMgPSBbLi4uc3RhdGUuYW5ub3RhdGlvbnNdO1xuICBuZXdBbm5vdGF0aW9uc1tpZHhdID0gbmV4dEFubm90YXRpb247XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5ub3RhdGlvbnM6IG5ld0Fubm90YXRpb25zXG4gIH07XG59O1xuXG4vKipcbiAqIER1cGxpY2F0ZSBhbiBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgZHVwbGljYXRlQW5ub3RhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLkR1cGxpY2F0ZUFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IG9yaWdpbmFsID0gc3RhdGUuYW5ub3RhdGlvbnMuZmluZChhID0+IGEuaWQgPT09IGlkKTtcbiAgaWYgKCFvcmlnaW5hbCkge1xuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCBkdXBsaWNhdGUgYW5ub3RhdGlvbiB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbmV3QW5ub3RhdGlvbiA9IHtcbiAgICAuLi5jbG9uZURlZXAob3JpZ2luYWwpLFxuICAgIGlkOiBnZW5lcmF0ZUhhc2hJZCg2KSxcbiAgICBsYWJlbDogYENvcHkgb2YgJHtvcmlnaW5hbC5sYWJlbH1gXG4gIH07XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5ub3RhdGlvbnM6IFtuZXdBbm5vdGF0aW9uLCAuLi5zdGF0ZS5hbm5vdGF0aW9uc10sXG4gICAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IG5ld0Fubm90YXRpb24uaWQsXG4gICAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6IGZhbHNlXG4gIH07XG59O1xuXG4vKipcbiAqIFNldCBzZWxlY3RlZCBhbm5vdGF0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0U2VsZWN0ZWRBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWQsIGlzRWRpdGluZ1RleHR9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0U2VsZWN0ZWRBbm5vdGF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoXG4gICAgaWQgPT09IHN0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbklkICYmXG4gICAgKGlzRWRpdGluZ1RleHQgPz8gZmFsc2UpID09PSBzdGF0ZS5pc0VkaXRpbmdBbm5vdGF0aW9uVGV4dFxuICApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBzZWxlY3RlZEFubm90YXRpb25JZDogaWQsXG4gICAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6IGlzRWRpdGluZ1RleHQgPz8gZmFsc2VcbiAgfTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgZGF0YXNldCBhbmQgYWxsIGxheWVycywgZmlsdGVycywgdG9vbHRpcCBjb25maWdzIHRoYXQgYmFzZWQgb24gaXRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVEYXRhc2V0VXBkYXRlcjxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFQge1xuICAvLyBleHRyYWN0IGRhdGFzZXQga2V5XG4gIGNvbnN0IHtkYXRhSWQ6IGRhdGFzZXRLZXl9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YXNldHN9ID0gc3RhdGU7XG5cbiAgLy8gY2hlY2sgaWYgZGF0YXNldCBpcyBwcmVzZW50XG4gIGlmICghZGF0YXNldHNbZGF0YXNldEtleV0pIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7XG4gICAgbGF5ZXJzLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBkYXRhc2V0czoge1tkYXRhc2V0S2V5XTogZGF0YXNldCwgLi4ubmV3RGF0YXNldHN9XG4gIH0gPSBzdGF0ZTtcblxuICBjb25zdCBsYXllcnNUb1JlbW92ZSA9IGxheWVycy5maWx0ZXIobCA9PiBsLmNvbmZpZy5kYXRhSWQgPT09IGRhdGFzZXRLZXkpLm1hcChsID0+IGwuaWQpO1xuXG4gIC8vIHJlbW92ZSBsYXllcnMgYW5kIGRhdGFzZXRzXG4gIGxldCBuZXdTdGF0ZSA9IGxheWVyc1RvUmVtb3ZlLnJlZHVjZSgoYWNjdSwgaWQpID0+IHJlbW92ZUxheWVyVXBkYXRlcihhY2N1LCB7aWR9KSwge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBuZXdEYXRhc2V0c1xuICB9KTtcblxuICAvLyB1cGRhdGUgZmlsdGVyc1xuICBjb25zdCBmaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGZpbHRlciBvZiBuZXdTdGF0ZS5maWx0ZXJzKSB7XG4gICAgY29uc3QgdmFsdWVJbmRleCA9IGZpbHRlci5kYXRhSWQuaW5kZXhPZihkYXRhc2V0S2V5KTtcbiAgICBpZiAodmFsdWVJbmRleCA+PSAwICYmIGZpbHRlci5kYXRhSWQubGVuZ3RoID4gMSkge1xuICAgICAgLy8gb25seSByZW1vdmUgb25lIHN5bmNlZCBkYXRhc2V0IGZyb20gdGhlIGZpbHRlclxuICAgICAgZmlsdGVycy5wdXNoKF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cykpO1xuICAgIH0gZWxzZSBpZiAodmFsdWVJbmRleCA8IDApIHtcbiAgICAgIC8vIGxlYXZlIHRoZSBmaWx0ZXIgYXMgaXNcbiAgICAgIGZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIG5ld1N0YXRlID0gey4uLm5ld1N0YXRlLCBmaWx0ZXJzfTtcblxuICByZXR1cm4gcmVtb3ZlQ2hhcnRzQW5kRmlsdGVycyhcbiAgICByZW1vdmVEYXRhc2V0RnJvbUludGVyYWN0aW9uQ29uZmlnKG5ld1N0YXRlLCB7ZGF0YUlkOiBkYXRhc2V0S2V5fSksXG4gICAgY2hhcnQgPT4ge1xuICAgICAgaWYgKGNoYXJ0LmRhdGFJZCA9PT0gZGF0YXNldEtleSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0xheWVyQ2hhcnRDb25maWcoY2hhcnQpKSB7XG4gICAgICAgIHJldHVybiBsYXllcnNUb1JlbW92ZS5pbmNsdWRlcyhjaGFydC5sYXllcklkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWcoc3RhdGUsIHtkYXRhSWR9KSB7XG4gIGxldCB7aW50ZXJhY3Rpb25Db25maWd9ID0gc3RhdGU7XG4gIGNvbnN0IHt0b29sdGlwfSA9IGludGVyYWN0aW9uQ29uZmlnO1xuICBpZiAodG9vbHRpcCkge1xuICAgIGNvbnN0IHtjb25maWd9ID0gdG9vbHRpcDtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgY29uc3Qge1tkYXRhSWRdOiBmaWVsZHMsIC4uLmZpZWxkc1RvU2hvd30gPSBjb25maWcuZmllbGRzVG9TaG93O1xuICAgIGludGVyYWN0aW9uQ29uZmlnID0ge1xuICAgICAgLi4uaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICB0b29sdGlwOiB7Li4udG9vbHRpcCwgY29uZmlnOiB7Li4uY29uZmlnLCBmaWVsZHNUb1Nob3d9fVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gey4uLnN0YXRlLCBpbnRlcmFjdGlvbkNvbmZpZ307XG59XG4vKipcbiAqIHVwZGF0ZSBsYXllciBibGVuZGluZyBtb2RlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlTGF5ZXJCbGVuZGluZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlTGF5ZXJCbGVuZGluZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBsYXllckJsZW5kaW5nOiBhY3Rpb24ubW9kZVxufSk7XG5cbi8qKlxuICogdXBkYXRlIG92ZXJsYXkgYmxlbmRpbmcgbW9kZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZU92ZXJsYXlCbGVuZGluZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIG92ZXJsYXlCbGVuZGluZzogYWN0aW9uLm1vZGVcbn0pO1xuXG4vKipcbiAqIERpc3BsYXkgZGF0YXNldCB0YWJsZSBpbiBhIG1vZGFsXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0aW5nRGF0YXNldDogYWN0aW9uLmRhdGFJZFxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgY3VzdG9tIGNvbG9yIGZvciBkYXRhc2V0cyBhbmQgbGF5ZXJzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlVGFibGVDb2xvclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRGF0YXNldENvbG9yVXBkYXRlclxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4gdXBkYXRlRGF0YXNldFByb3BzVXBkYXRlcihzdGF0ZSwge2RhdGFJZDogYWN0aW9uLmRhdGFJZCwgcHJvcHM6IHtjb2xvcjogYWN0aW9uLm5ld0NvbG9yfX0pO1xufTtcblxuLyoqXG4gKiByZXNldCB2aXNTdGF0ZSB0byBpbml0aWFsIFN0YXRlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVzZXRNYXBDb25maWdVcGRhdGVyID0gKHN0YXRlOiBWaXNTdGF0ZSk6IFZpc1N0YXRlID0+ICh7XG4gIC4uLklOSVRJQUxfVklTX1NUQVRFLFxuICAuLi5zdGF0ZS5pbml0aWFsU3RhdGUsXG4gIGluaXRpYWxTdGF0ZTogc3RhdGUuaW5pdGlhbFN0YXRlXG59KTtcblxuLyoqXG4gKiBQcm9wYWdhdGUgYHZpc1N0YXRlYCByZWR1Y2VyIHdpdGggYSBuZXcgY29uZmlndXJhdGlvbi4gQ3VycmVudCBjb25maWcgd2lsbCBiZSBvdmVycmlkZS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZWNlaXZlTWFwQ29uZmlnVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7XG4gICAgcGF5bG9hZDoge2NvbmZpZyA9IHt9LCBvcHRpb25zID0ge319XG4gIH06IHtcbiAgICB0eXBlPzogdHlwZW9mIEFjdGlvblR5cGVzLlJFQ0VJVkVfTUFQX0NPTkZJRztcbiAgICBwYXlsb2FkOiBSZWNlaXZlTWFwQ29uZmlnUGF5bG9hZDtcbiAgfVxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoIWNvbmZpZy52aXNTdGF0ZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtrZWVwRXhpc3RpbmdDb25maWd9ID0gb3B0aW9ucztcblxuICAvLyByZXNldCBjb25maWcgaWYga2VlcEV4aXN0aW5nQ29uZmlnIGlzIGZhbHN5XG4gIGxldCBtZXJnZWRTdGF0ZSA9ICFrZWVwRXhpc3RpbmdDb25maWcgPyByZXNldE1hcENvbmZpZ1VwZGF0ZXIoc3RhdGUpIDogc3RhdGU7XG4gIGZvciAoY29uc3QgbWVyZ2VyIG9mIHN0YXRlLm1lcmdlcnMpIHtcbiAgICBpZiAoaXNWYWxpZE1lcmdlcihtZXJnZXIpICYmIGhhc1Byb3BzVG9NZXJnZShjb25maWcudmlzU3RhdGUsIG1lcmdlci5wcm9wKSkge1xuICAgICAgbWVyZ2VkU3RhdGUgPSBtZXJnZXIubWVyZ2UoXG4gICAgICAgIG1lcmdlZFN0YXRlLFxuICAgICAgICBnZXRQcm9wVmFsdWVUb01lcmdlcihjb25maWcudmlzU3RhdGUsIG1lcmdlci5wcm9wLCBtZXJnZXIudG9NZXJnZVByb3ApLFxuICAgICAgICAvLyBmcm9tQ29uZmlnXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1lcmdlZFN0YXRlO1xufTtcblxuLyoqXG4gKiBUcmlnZ2VyIGxheWVyIGhvdmVyIGV2ZW50IHdpdGggaG92ZXJlZCBvYmplY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckhvdmVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5PbkxheWVySG92ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgaG92ZXJJbmZvOiB7XG4gICAgLy8gZGVjay5nbCBpbmZvIGlzIG11dGFibGVcbiAgICAuLi5hY3Rpb24uaW5mbyxcbiAgICAuLi4oTnVtYmVyLmlzRmluaXRlKGFjdGlvbi5tYXBJbmRleCkgPyB7bWFwSW5kZXg6IGFjdGlvbi5tYXBJbmRleH0gOiB7fSlcbiAgfVxufSk7XG5cbi8qIGVzbGludC1lbmFibGUgbWF4LXN0YXRlbWVudHMgKi9cblxuLyoqXG4gKiBVcGRhdGUgYGludGVyYWN0aW9uQ29uZmlnYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5JbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2NvbmZpZ30gPSBhY3Rpb247XG5cbiAgY29uc3QgaW50ZXJhY3Rpb25Db25maWcgPSB7XG4gICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWcsXG4gICAgLi4ue1tjb25maWcuaWRdOiBjb25maWd9XG4gIH07XG5cbiAgLy8gRG9uJ3QgZW5hYmxlIHRvb2x0aXAgYW5kIGJydXNoIGF0IHRoZSBzYW1lIHRpbWVcbiAgLy8gYnV0IGNvb3JkaW5hdGVzIGNhbiBiZSBzaG93biBhdCBhbGwgdGltZVxuICBjb25zdCBjb250cmFkaWN0ID0gWydicnVzaCcsICd0b29sdGlwJ107XG5cbiAgaWYgKFxuICAgIGNvbnRyYWRpY3QuaW5jbHVkZXMoY29uZmlnLmlkKSAmJlxuICAgIGNvbmZpZy5lbmFibGVkICYmXG4gICAgIXN0YXRlLmludGVyYWN0aW9uQ29uZmlnW2NvbmZpZy5pZF0uZW5hYmxlZFxuICApIHtcbiAgICAvLyBvbmx5IGVuYWJsZSBvbmUgaW50ZXJhY3Rpb24gYXQgYSB0aW1lXG4gICAgY29udHJhZGljdC5mb3JFYWNoKGsgPT4ge1xuICAgICAgaWYgKGsgIT09IGNvbmZpZy5pZCkge1xuICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZ1trXSA9IHsuLi5pbnRlcmFjdGlvbkNvbmZpZ1trXSwgZW5hYmxlZDogZmFsc2V9O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgaW50ZXJhY3Rpb25Db25maWdcbiAgfTtcblxuICBpZiAoY29uZmlnLmlkID09PSAnZ2VvY29kZXInICYmICFjb25maWcuZW5hYmxlZCkge1xuICAgIHJldHVybiByZW1vdmVEYXRhc2V0VXBkYXRlcihuZXdTdGF0ZSwge2RhdGFJZDogJ2dlb2NvZGVyX2RhdGFzZXQnfSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogVHJpZ2dlciBsYXllciBjbGljayBldmVudCB3aXRoIGNsaWNrZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbGF5ZXJDbGlja1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuT25MYXllckNsaWNrVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIG1vdXNlUG9zOiBzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZy5jb29yZGluYXRlLmVuYWJsZWRcbiAgICA/IHtcbiAgICAgICAgLi4uc3RhdGUubW91c2VQb3MsXG4gICAgICAgIHBpbm5lZDogc3RhdGUubW91c2VQb3MucGlubmVkID8gbnVsbCA6IGNsb25lRGVlcChzdGF0ZS5tb3VzZVBvcylcbiAgICAgIH1cbiAgICA6IHN0YXRlLm1vdXNlUG9zLFxuICBjbGlja2VkOiBhY3Rpb24uaW5mbyAmJiBhY3Rpb24uaW5mby5waWNrZWQgPyBhY3Rpb24uaW5mbyA6IG51bGxcbn0pO1xuXG4vKipcbiAqIFRyaWdnZXIgbWFwIGNsaWNrIGV2ZW50LCB1bnNlbGVjdCBjbGlja2VkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG1hcENsaWNrVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLk9uTWFwQ2xpY2tVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2xpY2tlZDogbnVsbFxuICB9O1xufTtcblxuLyoqXG4gKiBUcmlnZ2VyIG1hcCBtb3ZlIGV2ZW50XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbW91c2VNb3ZlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZXZ0fTogVmlzU3RhdGVBY3Rpb25zLk9uTW91c2VNb3ZlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoT2JqZWN0LnZhbHVlcyhzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZykuc29tZShjb25maWcgPT4gY29uZmlnLmVuYWJsZWQpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbW91c2VQb3M6IHtcbiAgICAgICAgLi4uc3RhdGUubW91c2VQb3MsXG4gICAgICAgIC4uLihBcnJheS5pc0FycmF5KGV2dC5wb2ludCkgPyB7bW91c2VQb3NpdGlvbjogWy4uLmV2dC5wb2ludF19IDoge30pLFxuICAgICAgICAuLi4oQXJyYXkuaXNBcnJheShldnQubG5nTGF0KSA/IHtjb29yZGluYXRlOiBbLi4uZXZ0LmxuZ0xhdF19IDoge30pXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn07XG4vKipcbiAqIFRvZ2dsZSB2aXNpYmlsaXR5IG9mIGEgbGF5ZXIgZm9yIGEgc3BsaXQgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlU3BsaXRNYXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogTWFwU3RhdGVBY3Rpb25zLlRvZ2dsZVNwbGl0TWFwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT5cbiAgc3RhdGUuc3BsaXRNYXBzICYmIHN0YXRlLnNwbGl0TWFwcy5sZW5ndGggPT09IDBcbiAgICA/IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIC8vIG1heWJlIHdlIHNob3VsZCB1c2UgYW4gYXJyYXkgdG8gc3RvcmUgc3RhdGUgZm9yIGEgc2luZ2xlIG1hcCBhcyB3ZWxsXG4gICAgICAgIC8vIGlmIGN1cnJlbnQgbWFwcyBsZW5ndGggaXMgZXF1YWwgdG8gMCBpdCBtZWFucyB0aGF0IHdlIGFyZSBhYm91dCB0byBzcGxpdCB0aGUgdmlld1xuICAgICAgICBzcGxpdE1hcHM6IGNvbXB1dGVTcGxpdE1hcExheWVycyhzdGF0ZS5sYXllcnMsIHtkdXBsaWNhdGU6IGZhbHNlfSlcbiAgICAgIH1cbiAgICA6IGNsb3NlU3BlY2lmaWNNYXBBdEluZGV4KHN0YXRlLCBhY3Rpb24pO1xuXG4vKipcbiAqIFRvZ2dsZSB2aXNpYmlsaXR5IG9mIGEgbGF5ZXIgaW4gYSBzcGxpdCBtYXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge21hcEluZGV4LCBsYXllcklkfTogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7c3BsaXRNYXBzfSA9IHN0YXRlO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgc3BsaXRNYXBzOiBzcGxpdE1hcHMubWFwKChzbSwgaSkgPT5cbiAgICAgIGkgPT09IG1hcEluZGV4XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uc3BsaXRNYXBzW2ldLFxuICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgIC4uLnNwbGl0TWFwc1tpXS5sYXllcnMsXG4gICAgICAgICAgICAgIC8vIGlmIGxheWVySWQgbm90IGluIGxheWVycywgc2V0IGl0IHRvIHZpc2libGVcbiAgICAgICAgICAgICAgW2xheWVySWRdOiAhc3BsaXRNYXBzW2ldLmxheWVyc1tsYXllcklkXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgOiBzbVxuICAgIClcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGhhc1RhYnVsYXJEYXRhc2V0RGF0YShkYXRhPzogUHJvdG9EYXRhc2V0WydkYXRhJ10gfCBudWxsKTogYm9vbGVhbiB7XG4gIHJldHVybiBCb29sZWFuKFxuICAgIGRhdGE/LnJvd3M/Lmxlbmd0aCB8fCBkYXRhPy5jb2xzPy5sZW5ndGggfHwgKGRhdGEgYXMge2Fycm93VGFibGU/OiB1bmtub3dufSk/LmFycm93VGFibGVcbiAgKTtcbn1cblxuZnVuY3Rpb24gbmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZShkYXRhc2V0OiBQcm90b0RhdGFzZXQpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBkYXRhc2V0LmluZm8/LnR5cGUgPT09IERhdGFzZXRUeXBlLkVYVEVSTkFMTFlfSE9TVEVEICYmXG4gICAgdHlwZW9mIGRhdGFzZXQubWV0YWRhdGE/LnNvdXJjZSA9PT0gJ3N0cmluZycgJiZcbiAgICAhaGFzVGFidWxhckRhdGFzZXREYXRhKGRhdGFzZXQuZGF0YSlcbiAgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQoe1xuICBhcmc6IGRhdGFzZXQsXG4gIG9uUHJvZ3Jlc3Ncbn06IHtcbiAgYXJnOiBQcm90b0RhdGFzZXQ7XG4gIG9uUHJvZ3Jlc3M6IChwcm9ncmVzczoge2xvYWRlZDogbnVtYmVyOyB0b3RhbD86IG51bWJlcjsgcGVyY2VudDogbnVtYmVyfSkgPT4gdm9pZDtcbn0pOiBQcm9taXNlPFByb3RvRGF0YXNldD4ge1xuICBpZiAoIW5lZWRzRXh0ZXJuYWxseUhvc3RlZEh5ZHJhdGUoZGF0YXNldCkpIHtcbiAgICByZXR1cm4gZGF0YXNldDtcbiAgfVxuICBjb25zdCBsb2FkZWQgPSBhd2FpdCBsb2FkRXh0ZXJuYWxseUhvc3RlZERhdGFzZXQoe1xuICAgIHNvdXJjZTogZGF0YXNldC5tZXRhZGF0YT8uc291cmNlIGFzIHN0cmluZyxcbiAgICBmb3JtYXQ6IGdldFJlbW90ZVNvdXJjZUZvcm1hdChkYXRhc2V0Lm1ldGFkYXRhKSxcbiAgICBzaXplOiB0eXBlb2YgZGF0YXNldC5tZXRhZGF0YT8uc2l6ZSA9PT0gJ251bWJlcicgPyBkYXRhc2V0Lm1ldGFkYXRhLnNpemUgOiB1bmRlZmluZWQsXG4gICAgYnlwYXNzQ2FjaGU6IGdldERhdGFzZXRSZWZyZXNoSW50ZXJ2YWxNcyhkYXRhc2V0Lm1ldGFkYXRhKSA+IDAsXG4gICAgb25Qcm9ncmVzc1xuICB9KTtcbiAgaWYgKCFsb2FkZWQuZGF0YSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gZGF0YSBsb2FkZWQgZnJvbSAke2RhdGFzZXQubWV0YWRhdGE/LnNvdXJjZX1gKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLmRhdGFzZXQsXG4gICAgZGF0YTogbG9hZGVkLmRhdGEsXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgIC4uLmRhdGFzZXQubWV0YWRhdGEsXG4gICAgICBldGFnOiBsb2FkZWQuZXRhZyxcbiAgICAgIGxhc3RNb2RpZmllZDogbG9hZGVkLmxhc3RNb2RpZmllZCxcbiAgICAgIC4uLih0eXBlb2YgbG9hZGVkLnNpemUgPT09ICdudW1iZXInID8ge3NpemU6IGxvYWRlZC5zaXplfSA6IHt9KSxcbiAgICAgIGxhc3RGZXRjaGVkQXQ6IERhdGUubm93KCksXG4gICAgICByZWZyZXNoU3RhdHVzOiAnaWRsZSdcbiAgICB9XG4gIH07XG59XG5cbmNvbnN0IEhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLID0gVGFzay5mcm9tUHJvbWlzZVdpdGhQcm9ncmVzcyhcbiAgaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQsXG4gICdIWURSQVRFX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSydcbik7XG5cbmNvbnN0IEZBSUxfQ1JFQVRFX0RBVEFTRVRfVEFTSyA9IFRhc2suZnJvbVByb21pc2UoYXN5bmMgKG1lc3NhZ2U6IHN0cmluZykgPT4ge1xuICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG59LCAnRkFJTF9DUkVBVEVfREFUQVNFVF9UQVNLJyk7XG5cbmZ1bmN0aW9uIGdldERhdGFzZXRQcm9ncmVzc0lkKGRhdGFzZXQ6IFByb3RvRGF0YXNldCwgaW5kZXggPSAwKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBkYXRhc2V0LmluZm8/LmlkID09PSAnc3RyaW5nJyAmJiBkYXRhc2V0LmluZm8uaWQpIHtcbiAgICByZXR1cm4gZGF0YXNldC5pbmZvLmlkO1xuICB9XG4gIGlmICh0eXBlb2YgZGF0YXNldC5tZXRhZGF0YT8uc291cmNlID09PSAnc3RyaW5nJyAmJiBkYXRhc2V0Lm1ldGFkYXRhLnNvdXJjZSkge1xuICAgIHJldHVybiBkYXRhc2V0Lm1ldGFkYXRhLnNvdXJjZTtcbiAgfVxuICByZXR1cm4gYGRhdGFzZXQtJHtpbmRleH1gO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVOZXdEYXRhRW50cnlUYXNrKGRhdGFzZXQ6IFByb3RvRGF0YXNldCwgZGF0YXNldHM6IERhdGFzZXRzKSB7XG4gIGlmICghbmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZShkYXRhc2V0KSkge1xuICAgIHJldHVybiBjcmVhdGVOZXdEYXRhRW50cnkoZGF0YXNldCwgZGF0YXNldHMpO1xuICB9XG4gIGNvbnN0IHByb2dyZXNzSWQgPSBnZXREYXRhc2V0UHJvZ3Jlc3NJZChkYXRhc2V0KTtcbiAgcmV0dXJuIEhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLKHtcbiAgICBhcmc6IGRhdGFzZXQsXG4gICAgb25Qcm9ncmVzczogcHJvZ3Jlc3MgPT5cbiAgICAgIHNldExvYWRpbmdQcm9ncmVzcyhwcm9ncmVzc0lkLCBNYXRoLnJvdW5kKChwcm9ncmVzcz8ucGVyY2VudCA/PyAwKSAqIDEwMCkpXG4gIH0pLmNoYWluKGh5ZHJhdGVkID0+IHtcbiAgICBjb25zdCB0YXNrID0gY3JlYXRlTmV3RGF0YUVudHJ5KGh5ZHJhdGVkLCBkYXRhc2V0cyk7XG4gICAgcmV0dXJuIChcbiAgICAgIHRhc2sgfHxcbiAgICAgIEZBSUxfQ1JFQVRFX0RBVEFTRVRfVEFTSygnRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBkYXRhc2V0IGR1ZSB0byBkYXRhIHZlcmlmaWNhdGlvbiBlcnJvcnMnKVxuICAgICk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjbGVhckxvYWRpbmdQcm9ncmVzcyhzdGF0ZTogVmlzU3RhdGUsIGlkcz86IHN0cmluZ1tdKTogVmlzU3RhdGUge1xuICBjb25zdCBjdXJyZW50ID0gc3RhdGUubG9hZGluZ1Byb2dyZXNzIHx8IHt9O1xuICBpZiAoIU9iamVjdC5rZXlzKGN1cnJlbnQpLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoKHN0YXRlLmxvYWRpbmdJbmRpY2F0b3JWYWx1ZSB8fCAwKSA8PSAwKSB7XG4gICAgcmV0dXJuIHsuLi5zdGF0ZSwgbG9hZGluZ1Byb2dyZXNzOiB7fX07XG4gIH1cbiAgaWYgKCFpZHM/Lmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBuZXh0ID0gey4uLmN1cnJlbnR9O1xuICBpZHMuZm9yRWFjaChpZCA9PiB7XG4gICAgZGVsZXRlIG5leHRbaWRdO1xuICB9KTtcbiAgcmV0dXJuIHsuLi5zdGF0ZSwgbG9hZGluZ1Byb2dyZXNzOiBuZXh0fTtcbn1cblxuZnVuY3Rpb24gcGF0Y2hEYXRhc2V0TWV0YWRhdGEoZGF0YXNldDogRGF0YXNldHNbc3RyaW5nXSwgcGF0Y2g6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB7XG4gIHJldHVybiBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge1xuICAgIG1ldGFkYXRhOiB7XG4gICAgICAuLi5kYXRhc2V0Lm1ldGFkYXRhLFxuICAgICAgLi4ucGF0Y2hcbiAgICB9XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWZyZXNoRXh0ZXJuYWxseUhvc3RlZFRhYmxlKHtcbiAgYXJnOiBtZXRhZGF0YSxcbiAgb25Qcm9ncmVzc1xufToge1xuICBhcmc6IHtcbiAgICBzb3VyY2U6IHN0cmluZztcbiAgICBmb3JtYXQ/OiBzdHJpbmc7XG4gICAgc2l6ZT86IG51bWJlcjtcbiAgICBldGFnPzogc3RyaW5nO1xuICAgIGxhc3RNb2RpZmllZD86IHN0cmluZztcbiAgfTtcbiAgb25Qcm9ncmVzczogKHByb2dyZXNzOiB7bG9hZGVkOiBudW1iZXI7IHRvdGFsPzogbnVtYmVyOyBwZXJjZW50OiBudW1iZXJ9KSA9PiB2b2lkO1xufSkge1xuICAvLyBGZXRjaCBvbmx5LiBEbyBub3QgbXV0YXRlIHRoZSBSZWR1eCB0YWJsZSBoZXJlOiBwcm9ncmVzcyBldmVudHMgY29weSBpdCwgYW5kXG4gIC8vIHRoZSBzdWNjZXNzIHVwZGF0ZXIgYXBwbGllcyB0aGUgc25hcHNob3QgdG8gd2hhdGV2ZXIgaW5zdGFuY2UgaXMgaW4gdGhlIHN0b3JlLlxuICByZXR1cm4gbG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0KHsuLi5tZXRhZGF0YSwgb25Qcm9ncmVzcywgYnlwYXNzQ2FjaGU6IHRydWV9KTtcbn1cblxuY29uc3QgUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0sgPSBUYXNrLmZyb21Qcm9taXNlV2l0aFByb2dyZXNzKFxuICByZWZyZXNoRXh0ZXJuYWxseUhvc3RlZFRhYmxlLFxuICAnUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0snXG4pO1xuXG4vKipcbiAqIFJlLWZldGNoIGFuIGV4dGVybmFsbHkgaG9zdGVkIGRhdGFzZXQgYW5kIHJlcGxhY2UgaXRzIHRhYmxlIGNvbnRlbnRzIGluIHBsYWNlLlxuICogTGF5ZXJzIGFuZCBmaWx0ZXJzIGFyZSBrZXB0IHdoZW4gZmllbGQgbmFtZXMgbWF0Y2guXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVmcmVzaERhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVmcmVzaERhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoXG4gICAgIWRhdGFzZXQgfHxcbiAgICBkYXRhc2V0LnR5cGUgIT09IERhdGFzZXRUeXBlLkVYVEVSTkFMTFlfSE9TVEVEIHx8XG4gICAgdHlwZW9mIGRhdGFzZXQubWV0YWRhdGE/LnNvdXJjZSAhPT0gJ3N0cmluZydcbiAgKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChkYXRhc2V0Lm1ldGFkYXRhPy5yZWZyZXNoU3RhdHVzID09PSAnbG9hZGluZycpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXh0RGF0YXNldCA9IHBhdGNoRGF0YXNldE1ldGFkYXRhKGRhdGFzZXQsIHtcbiAgICByZWZyZXNoU3RhdHVzOiAnbG9hZGluZycsXG4gICAgcmVmcmVzaEVycm9yOiB1bmRlZmluZWQsXG4gICAgcmVmcmVzaFByb2dyZXNzOiB1bmRlZmluZWRcbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGF0YXNldHM6IHtcbiAgICAgICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgICAgIFtkYXRhSWRdOiBuZXh0RGF0YXNldFxuICAgICAgfVxuICAgIH0sXG4gICAgUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0soe1xuICAgICAgYXJnOiB7XG4gICAgICAgIHNvdXJjZTogbmV4dERhdGFzZXQubWV0YWRhdGEuc291cmNlIGFzIHN0cmluZyxcbiAgICAgICAgZm9ybWF0OiBnZXRSZW1vdGVTb3VyY2VGb3JtYXQobmV4dERhdGFzZXQubWV0YWRhdGEpLFxuICAgICAgICBzaXplOiB0eXBlb2YgbmV4dERhdGFzZXQubWV0YWRhdGEuc2l6ZSA9PT0gJ251bWJlcicgPyBuZXh0RGF0YXNldC5tZXRhZGF0YS5zaXplIDogdW5kZWZpbmVkLFxuICAgICAgICBldGFnOiB0eXBlb2YgbmV4dERhdGFzZXQubWV0YWRhdGEuZXRhZyA9PT0gJ3N0cmluZycgPyBuZXh0RGF0YXNldC5tZXRhZGF0YS5ldGFnIDogdW5kZWZpbmVkLFxuICAgICAgICBsYXN0TW9kaWZpZWQ6XG4gICAgICAgICAgdHlwZW9mIG5leHREYXRhc2V0Lm1ldGFkYXRhLmxhc3RNb2RpZmllZCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgID8gbmV4dERhdGFzZXQubWV0YWRhdGEubGFzdE1vZGlmaWVkXG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgfSxcbiAgICAgIG9uUHJvZ3Jlc3M6IHByb2dyZXNzID0+XG4gICAgICAgIHJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3MoZGF0YUlkLCBNYXRoLnJvdW5kKChwcm9ncmVzcz8ucGVyY2VudCA/PyAwKSAqIDEwMCkpXG4gICAgfSkuYmltYXAoXG4gICAgICByZXN1bHQgPT4gcmVmcmVzaERhdGFzZXRTdWNjZXNzKGRhdGFJZCwgcmVzdWx0KSxcbiAgICAgIChlcnJvcjogRXJyb3IpID0+IHJlZnJlc2hEYXRhc2V0RXJyb3IoZGF0YUlkLCBlcnJvcilcbiAgICApXG4gICk7XG59XG5cbi8qKlxuICogUmVjb3JkIGRvd25sb2FkIHByb2dyZXNzIGZvciBhbiBpbi1mbGlnaHQgcmVtb3RlIGRhdGFzZXQgcmVmcmVzaC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZyZXNoRGF0YXNldFByb2dyZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBwZXJjZW50fTogVmlzU3RhdGVBY3Rpb25zLlJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3NVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQgfHwgZGF0YXNldC5tZXRhZGF0YT8ucmVmcmVzaFN0YXR1cyAhPT0gJ2xvYWRpbmcnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5leHRQZXJjZW50ID0gTnVtYmVyLmlzRmluaXRlKHBlcmNlbnQpXG4gICAgPyBNYXRoLm1heCgwLCBNYXRoLm1pbigxMDAsIE1hdGgucm91bmQocGVyY2VudCkpKVxuICAgIDogMDtcbiAgaWYgKGRhdGFzZXQubWV0YWRhdGE/LnJlZnJlc2hQcm9ncmVzcyA9PT0gbmV4dFBlcmNlbnQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czoge1xuICAgICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgICBbZGF0YUlkXTogcGF0Y2hEYXRhc2V0TWV0YWRhdGEoZGF0YXNldCwge3JlZnJlc2hQcm9ncmVzczogbmV4dFBlcmNlbnR9KVxuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZmllbGROYW1lc0VxdWFsKGN1cnJlbnQ6IHtuYW1lOiBzdHJpbmd9W10sIGluY29taW5nPzoge25hbWU6IHN0cmluZ31bXSB8IG51bGwpOiBib29sZWFuIHtcbiAgaWYgKCFpbmNvbWluZz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGN1cnJlbnQubGVuZ3RoICE9PSBpbmNvbWluZy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGN1cnJlbnQuZXZlcnkoKGZpZWxkLCBpKSA9PiBmaWVsZC5uYW1lID09PSBpbmNvbWluZ1tpXS5uYW1lKTtcbn1cblxuLyoqXG4gKiBXaGVuIGEgcmVtb3RlIHNuYXBzaG90IGNoYW5nZXMgY29sdW1uIG5hbWVzLCBvbGQgbGF5ZXIgZmllbGRJZHggLyBmaWx0ZXIgbmFtZXNcbiAqIGNhbiBwb2ludCBhdCB0aGUgd3JvbmcgY29sdW1uLiBSZS1iaW5kIGJ5IG5hbWUgYW5kIGRyb3AgY29uZmlncyB0aGF0IG5vIGxvbmdlciBmaXQuXG4gKi9cbmZ1bmN0aW9uIHJlYmluZExheWVyc0FuZEZpbHRlcnNBZnRlclNjaGVtYUNoYW5nZShcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YXNldHM6IFZpc1N0YXRlWydkYXRhc2V0cyddXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tkYXRhSWRdO1xuICBjb25zdCBuZXh0TGF5ZXJzOiBMYXllcltdID0gW107XG4gIGNvbnN0IGRyb3BwZWRMYXllcnM6IExheWVyW10gPSBbXTtcblxuICBzdGF0ZS5sYXllcnMuZm9yRWFjaChsYXllciA9PiB7XG4gICAgaWYgKGxheWVyLmNvbmZpZy5kYXRhSWQgIT09IGRhdGFJZCkge1xuICAgICAgbmV4dExheWVycy5wdXNoKGxheWVyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVib3VuZCA9IHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKGRhdGFzZXQsIHN0YXRlLmxheWVyQ2xhc3NlcywgbGF5ZXIsIHN0YXRlLnNjaGVtYSk7XG4gICAgaWYgKHJlYm91bmQ/LmlzVmFsaWRUb1NhdmUoKSkge1xuICAgICAgbmV4dExheWVycy5wdXNoKHJlYm91bmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkcm9wcGVkTGF5ZXJzLnB1c2gobGF5ZXIpO1xuICAgIH1cbiAgfSk7XG5cbiAgbGV0IG5leHRMYXllck9yZGVyID0gc3RhdGUubGF5ZXJPcmRlcjtcbiAgbGV0IG5leHRTcGxpdE1hcHMgPSBzdGF0ZS5zcGxpdE1hcHM7XG4gIGRyb3BwZWRMYXllcnMuZm9yRWFjaChsYXllciA9PiB7XG4gICAgbmV4dExheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobmV4dExheWVyT3JkZXIsIGxheWVyLmlkKTtcbiAgICBuZXh0U3BsaXRNYXBzID0gcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzKG5leHRTcGxpdE1hcHMsIGxheWVyKTtcbiAgfSk7XG5cbiAgY29uc3QgbmV4dExheWVyRGF0YSA9IG5leHRMYXllcnMubWFwKGxheWVyID0+IHtcbiAgICBjb25zdCBvbGRJZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KG9sZExheWVyID0+IG9sZExheWVyLmlkID09PSBsYXllci5pZCk7XG4gICAgcmV0dXJuIG9sZElkeCA+PSAwID8gc3RhdGUubGF5ZXJEYXRhW29sZElkeF0gOiB7fTtcbiAgfSk7XG5cbiAgY29uc3QgZmlsdGVyc0ZvckRhdGFzZXQgPSBzdGF0ZS5maWx0ZXJzLmZpbHRlcihmaWx0ZXIgPT4gdG9BcnJheShmaWx0ZXIuZGF0YUlkKS5pbmNsdWRlcyhkYXRhSWQpKTtcbiAgY29uc3Qgb3RoZXJGaWx0ZXJzID0gc3RhdGUuZmlsdGVycy5maWx0ZXIoZmlsdGVyID0+ICF0b0FycmF5KGZpbHRlci5kYXRhSWQpLmluY2x1ZGVzKGRhdGFJZCkpO1xuXG4gIGNvbnN0IHt2YWxpZGF0ZWQsIHVwZGF0ZWREYXRhc2V0c30gPSB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyhcbiAgICB7Li4uc3RhdGUsIGRhdGFzZXRzLCBsYXllcnM6IG5leHRMYXllcnN9LFxuICAgIGZpbHRlcnNGb3JEYXRhc2V0XG4gICk7XG5cbiAgY29uc3QgbmV4dEZpbHRlcnMgPSBbLi4ub3RoZXJGaWx0ZXJzLCAuLi52YWxpZGF0ZWRdO1xuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICBbZGF0YUlkXSxcbiAgICB1cGRhdGVkRGF0YXNldHMsXG4gICAgbmV4dEZpbHRlcnMsXG4gICAgbmV4dExheWVyc1xuICApO1xuXG4gIGxldCBuZXh0U3RhdGU6IFZpc1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBmaWx0ZXJlZERhdGFzZXRzLFxuICAgIGxheWVyczogbmV4dExheWVycyxcbiAgICBsYXllckRhdGE6IG5leHRMYXllckRhdGEsXG4gICAgbGF5ZXJPcmRlcjogbmV4dExheWVyT3JkZXIsXG4gICAgc3BsaXRNYXBzOiBuZXh0U3BsaXRNYXBzLFxuICAgIGZpbHRlcnM6IG5leHRGaWx0ZXJzXG4gIH07XG4gIG5leHRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXh0U3RhdGUsIFtkYXRhSWRdLCB1bmRlZmluZWQpO1xuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5leHRTdGF0ZSk7XG59XG5cbi8qKlxuICogQXBwbHkgYSBmaW5pc2hlZCByZW1vdGUgcmVmcmVzaDoga2VlcCBsYXllcnMsIHJlLXJ1biBmaWx0ZXJzIGFuZCBsYXllciBkYXRhLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZnJlc2hEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgcmVzdWx0fTogVmlzU3RhdGVBY3Rpb25zLlJlZnJlc2hEYXRhc2V0U3VjY2Vzc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG1ldGFkYXRhUGF0Y2ggPSB7XG4gICAgcmVmcmVzaFN0YXR1czogJ2lkbGUnLFxuICAgIHJlZnJlc2hFcnJvcjogdW5kZWZpbmVkLFxuICAgIHJlZnJlc2hQcm9ncmVzczogdW5kZWZpbmVkLFxuICAgIGxhc3RGZXRjaGVkQXQ6IERhdGUubm93KCksXG4gICAgLy8gQWx3YXlzIHdyaXRlIHZhbGlkYXRvcnMuIEEgMjAwIHRoYXQgb21pdHMgdGhlbSBtdXN0IG5vdCBrZWVwIHRoZSBwcmV2aW91c1xuICAgIC8vIEVUYWcgb3IgYSBsYXRlciAzMDQgY2FuIHNraXAgYSBib2R5IHdlIG5vIGxvbmdlciBoYXZlLlxuICAgIGV0YWc6IHJlc3VsdC5ldGFnLFxuICAgIGxhc3RNb2RpZmllZDogcmVzdWx0Lmxhc3RNb2RpZmllZCxcbiAgICAuLi4odHlwZW9mIHJlc3VsdC5zaXplID09PSAnbnVtYmVyJyA/IHtzaXplOiByZXN1bHQuc2l6ZX0gOiB7fSlcbiAgfTtcblxuICBjb25zdCBzY2hlbWFVbmNoYW5nZWQgPSBmaWVsZE5hbWVzRXF1YWwoZGF0YXNldC5maWVsZHMsIHJlc3VsdC5kYXRhPy5maWVsZHMpO1xuXG4gIC8vIEFwcGx5IHRoZSBzbmFwc2hvdCB0byB0aGUgdGFibGUgY3VycmVudGx5IGluIHRoZSBzdG9yZS4gUHJvZ3Jlc3MgbWF5IGhhdmVcbiAgLy8gY29waWVkIGl0IG9mZiB0aGUgb2JqZWN0IHRoYXQgc3RhcnRlZCB0aGUgZmV0Y2g7IHRoZSB0YXNrIG5ldmVyIG11dGF0ZXMgaXQuXG4gIGlmICghcmVzdWx0Lm5vdE1vZGlmaWVkICYmIHJlc3VsdC5kYXRhKSB7XG4gICAgLy8gS2VwbGVyVGFibGUudXBkYXRlIGlzIGFzeW5jIHNvIER1Y2tEQiBjYW4gYXdhaXQgQXJyb3cgY29udmVyc2lvbi4gVGhlXG4gICAgLy8gQ1NWL0dlb0pTT04gcGF0aCAoYW5kIEtlcGxlclRhYmxlLmltcG9ydERhdGEpIHJ1biBzeW5jaHJvbm91c2x5IGJlZm9yZVxuICAgIC8vIHRoZSBmaXJzdCBhd2FpdCwgc28gdGhlIHN0b3JlIHRhYmxlIGlzIHVwZGF0ZWQgYmVmb3JlIHdlIGNvcHkgaXQgYmVsb3cuXG4gICAgdm9pZCBkYXRhc2V0LnVwZGF0ZShyZXN1bHQuZGF0YSk7XG4gIH1cblxuICBjb25zdCByZWZyZXNoZWQgPSBwYXRjaERhdGFzZXRNZXRhZGF0YShkYXRhc2V0LCBtZXRhZGF0YVBhdGNoKTtcbiAgY29uc3QgZGF0YXNldHMgPSB7XG4gICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgW2RhdGFJZF06IHJlZnJlc2hlZFxuICB9O1xuXG4gIGlmIChyZXN1bHQubm90TW9kaWZpZWQgfHwgIXJlc3VsdC5kYXRhKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGF0YXNldHNcbiAgICB9O1xuICB9XG5cbiAgaWYgKCFzY2hlbWFVbmNoYW5nZWQpIHtcbiAgICByZXR1cm4gcmViaW5kTGF5ZXJzQW5kRmlsdGVyc0FmdGVyU2NoZW1hQ2hhbmdlKHN0YXRlLCBkYXRhSWQsIGRhdGFzZXRzKTtcbiAgfVxuXG4gIHJldHVybiByZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YSh7Li4uc3RhdGUsIGRhdGFzZXRzfSwgZGF0YUlkKTtcbn1cblxuZnVuY3Rpb24gcmVhcHBseUZpbHRlcnNBbmRMYXllckRhdGEoc3RhdGU6IFZpc1N0YXRlLCBkYXRhSWQ6IHN0cmluZyk6IFZpc1N0YXRlIHtcbiAgY29uc3QgZmlsdGVyZWREYXRhc2V0cyA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgW2RhdGFJZF0sXG4gICAgc3RhdGUuZGF0YXNldHMsXG4gICAgc3RhdGUuZmlsdGVycyxcbiAgICBzdGF0ZS5sYXllcnNcbiAgKTtcbiAgbGV0IG5leHRTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IGZpbHRlcmVkRGF0YXNldHNcbiAgfTtcbiAgbmV4dFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5leHRTdGF0ZSwgW2RhdGFJZF0sIHVuZGVmaW5lZCk7XG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4obmV4dFN0YXRlKTtcbn1cblxuZnVuY3Rpb24gaXNEYXRhc2V0Um93TGlzdChcbiAgcm93czogVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3cgfCBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvd1tdXG4pOiByb3dzIGlzIFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93W10ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkocm93cykgfHwgIXJvd3MubGVuZ3RoKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocm93cyk7XG4gIH1cbiAgLy8gQSBzaW5nbGUgY29sdW1uLW9yZGVyZWQgcm93IGlzIGFuIGFycmF5IG9mIHByaW1pdGl2ZXM7IGEgbGlzdCBvZiByb3dzIGlzXG4gIC8vIGFuIGFycmF5IG9mIGFycmF5cyBvciBhbiBhcnJheSBvZiBmaWVsZC1uYW1lIHJlY29yZHMuXG4gIHJldHVybiBBcnJheS5pc0FycmF5KHJvd3NbMF0pIHx8IGlzUGxhaW5PYmplY3Qocm93c1swXSk7XG59XG5cbmZ1bmN0aW9uIHRvQXJyYXlSb3cocm93OiBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvdywgZmllbGRzOiBGaWVsZFtdKTogYW55W10gfCBudWxsIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkocm93KSkge1xuICAgIHJldHVybiByb3cubGVuZ3RoID09PSBmaWVsZHMubGVuZ3RoID8gcm93IDogbnVsbDtcbiAgfVxuICBpZiAoaXNQbGFpbk9iamVjdChyb3cpKSB7XG4gICAgY29uc3QgcmVjb3JkID0gcm93IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHJldHVybiBmaWVsZHMubWFwKGZpZWxkID0+XG4gICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVjb3JkLCBmaWVsZC5uYW1lKSA/IHJlY29yZFtmaWVsZC5uYW1lXSA6IG51bGxcbiAgICApO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVEYXRhc2V0Um93cyhcbiAgcm93czogVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3cgfCBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvd1tdLFxuICBmaWVsZHM6IEZpZWxkW11cbik6IGFueVtdW10gfCBudWxsIHtcbiAgaWYgKCFmaWVsZHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgbGlzdCA9IGlzRGF0YXNldFJvd0xpc3Qocm93cykgPyByb3dzIDogW3Jvd3NdO1xuICBpZiAoIWxpc3QubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3Qgbm9ybWFsaXplZDogYW55W11bXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBhcnJheVJvdyA9IHRvQXJyYXlSb3cobGlzdFtpXSwgZmllbGRzKTtcbiAgICBpZiAoIWFycmF5Um93KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgbm9ybWFsaXplZC5wdXNoKGFycmF5Um93KTtcbiAgfVxuICByZXR1cm4gbm9ybWFsaXplZDtcbn1cblxuLyoqXG4gKiBBcHBlbmQgb3IgdXBzZXJ0IHJvd3Mgb24gYW4gZXhpc3RpbmcgaW4tbWVtb3J5IHJvdyBkYXRhc2V0LiBLZWVwcyBsYXllcnMgYW5kIHJlLXJ1bnMgZmlsdGVycy5cbiAqIEFycm93L0R1Y2tEQiB0YWJsZXMgd2FybiBhbmQgYXJlIGxlZnQgdW5jaGFuZ2VkIChJTlNFUlQgLyBjb25jYXQgbm90IGltcGxlbWVudGVkKS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRUb0RhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIHJvd3MsIG9wdGlvbnN9OiBWaXNTdGF0ZUFjdGlvbnMuQWRkVG9EYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZURhdGFzZXRSb3dzKHJvd3MsIGRhdGFzZXQuZmllbGRzKTtcbiAgaWYgKCFub3JtYWxpemVkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgYXBwbGllZCA9IG9wdGlvbnM/LnVwc2VydEJ5XG4gICAgPyBkYXRhc2V0LnVwc2VydFJvd3Mobm9ybWFsaXplZCwgb3B0aW9ucy51cHNlcnRCeSlcbiAgICA6IGRhdGFzZXQuYXBwZW5kUm93cyhub3JtYWxpemVkKTtcbiAgaWYgKCFhcHBsaWVkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZGF0YXNldHMgPSB7XG4gICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgW2RhdGFJZF06IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7fSlcbiAgfTtcbiAgcmV0dXJuIHJlYXBwbHlGaWx0ZXJzQW5kTGF5ZXJEYXRhKHsuLi5zdGF0ZSwgZGF0YXNldHN9LCBkYXRhSWQpO1xufVxuXG4vKipcbiAqIERlbGV0ZSByb3dzIGJ5IGluZGV4IG9yIGJ5IGZpZWxkIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIGluLW1lbW9yeSByb3cgZGF0YXNldC5cbiAqIEtlZXBzIGxheWVycy4gQXJyb3cvRHVja0RCIHRhYmxlcyB3YXJuIGFuZCBhcmUgbGVmdCB1bmNoYW5nZWQuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRnJvbURhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIHJvd0luZGV4ZXMsIGJ5RmllbGR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRnJvbURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBpbmRleGVzID0gYnlGaWVsZFxuICAgID8gZGF0YXNldC5maW5kUm93SW5kZXhlc0J5RmllbGRWYWx1ZXMoYnlGaWVsZC5maWVsZCwgdG9BcnJheShieUZpZWxkLnZhbHVlcykpXG4gICAgOiB0b0FycmF5KHJvd0luZGV4ZXMgPz8gW10pO1xuICBpZiAoIWluZGV4ZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmICghZGF0YXNldC5yZW1vdmVSb3dzKGluZGV4ZXMpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZGF0YXNldHMgPSB7XG4gICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgW2RhdGFJZF06IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7fSlcbiAgfTtcbiAgcmV0dXJuIHJlYXBwbHlGaWx0ZXJzQW5kTGF5ZXJEYXRhKHsuLi5zdGF0ZSwgZGF0YXNldHN9LCBkYXRhSWQpO1xufVxuXG4vKipcbiAqIFJlY29yZCBhIGZhaWxlZCByZW1vdGUgZGF0YXNldCByZWZyZXNoIHdpdGhvdXQgZHJvcHBpbmcgZXhpc3Rpbmcgcm93cy5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZyZXNoRGF0YXNldEVycm9yVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBlcnJvcn06IFZpc1N0YXRlQWN0aW9ucy5SZWZyZXNoRGF0YXNldEVycm9yVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiB7XG4gICAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICAgIFtkYXRhSWRdOiBwYXRjaERhdGFzZXRNZXRhZGF0YShkYXRhc2V0LCB7XG4gICAgICAgIHJlZnJlc2hTdGF0dXM6ICdlcnJvcicsXG4gICAgICAgIHJlZnJlc2hFcnJvcjogZXJyb3I/Lm1lc3NhZ2UgfHwgU3RyaW5nKGVycm9yKSxcbiAgICAgICAgcmVmcmVzaFByb2dyZXNzOiB1bmRlZmluZWRcbiAgICAgIH0pXG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbi8qKlxuICogQWRkIG5ldyBkYXRhc2V0IHRvIGB2aXNTdGF0ZWAsIHdpdGggb3B0aW9uIHRvIGxvYWQgYSBtYXAgY29uZmlnIGFsb25nIHdpdGggdGhlIGRhdGFzZXRzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGNvbnN0IHVwZGF0ZVZpc0RhdGFVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZVZpc0RhdGFVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIC8vIGRhdGFzZXRzIGNhbiBiZSBhIHNpbmdsZSBkYXRhIGVudHJpZXMgb3IgYW4gYXJyYXkgb2YgbXVsdGlwbGUgZGF0YSBlbnRyaWVzXG4gIGNvbnN0IHtjb25maWcsIG9wdGlvbnN9ID0gYWN0aW9uO1xuXG4gIC8vIGFwcGx5IGNvbmZpZyBpZiBwYXNzZWQgZnJvbSBhY3Rpb25cbiAgLy8gVE9ETzogd2UgZG9uJ3QgaGFuZGxlIGFzeW5jIG1lcmdlcnMgaGVyZSB5ZXRcbiAgbGV0IHVwZGF0ZWRTdGF0ZSA9IGNvbmZpZ1xuICAgID8gcmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIoc3RhdGUsIHtcbiAgICAgICAgcGF5bG9hZDoge2NvbmZpZywgb3B0aW9uc31cbiAgICAgIH0pXG4gICAgOiBzdGF0ZTtcblxuICBjb25zdCBkYXRhc2V0cyA9IHRvQXJyYXkoYWN0aW9uLmRhdGFzZXRzKTtcbiAgaWYgKCFkYXRhc2V0cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdXBkYXRlZFN0YXRlO1xuICB9XG5cbiAgY29uc3QgY3JlYXRlRGF0YXNldFRhc2tzOiBUYXNrRGVzY3JpcHRvcltdID0gW107XG4gIGNvbnN0IG5vdGlmaWNhdGlvblRhc2tzOiBUYXNrRGVzY3JpcHRvcltdID0gW107XG4gIGNvbnN0IGh5ZHJhdGVQcm9ncmVzczogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xuXG4gIGRhdGFzZXRzLmZvckVhY2goKHtpbmZvID0ge30sIC4uLnJlc3R9LCBkYXRhc2V0SW5kZXgpID0+IHtcbiAgICBjb25zdCBwcm90byA9IHtpbmZvLCAuLi5yZXN0fTtcbiAgICBpZiAobmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZShwcm90bykpIHtcbiAgICAgIGh5ZHJhdGVQcm9ncmVzc1tnZXREYXRhc2V0UHJvZ3Jlc3NJZChwcm90bywgZGF0YXNldEluZGV4KV0gPSAwO1xuICAgIH1cbiAgICBjb25zdCB0YXNrID0gY3JlYXRlTmV3RGF0YUVudHJ5VGFzayhwcm90bywgc3RhdGUuZGF0YXNldHMpO1xuICAgIGlmICh0YXNrKSB7XG4gICAgICBjcmVhdGVEYXRhc2V0VGFza3MucHVzaCh0YXNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm90aWZpY2F0aW9uVGFza3MucHVzaChcbiAgICAgICAgQUNUSU9OX1RBU0tfQUREX05PVElGSUNBVElPTigpLm1hcCgoKSA9PlxuICAgICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byBjcmVhdGUgYSBuZXcgZGF0YXNldCBkdWUgdG8gZGF0YSB2ZXJpZmljYXRpb24gZXJyb3JzYCxcbiAgICAgICAgICAgICAgaWQ6IGBkYXRhc2V0LWZhaWxlZC0ke2RhdGFzZXRJbmRleH1gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHByb2dyZXNzSWRzID0gT2JqZWN0LmtleXMoaHlkcmF0ZVByb2dyZXNzKTtcbiAgY29uc3QgZGF0YXNldHNBbGxTZXR0bGVkVGFzayA9IGNyZWF0ZURhdGFzZXRUYXNrcy5sZW5ndGhcbiAgICA/IFRhc2suYWxsU2V0dGxlZChjcmVhdGVEYXRhc2V0VGFza3MpLm1hcChyZXN1bHRzID0+XG4gICAgICAgIGNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzKHtyZXN1bHRzLCBhZGRUb01hcE9wdGlvbnM6IG9wdGlvbnMsIHByb2dyZXNzSWRzfSlcbiAgICAgIClcbiAgICA6IG51bGw7XG5cbiAgaWYgKGRhdGFzZXRzQWxsU2V0dGxlZFRhc2spIHtcbiAgICB1cGRhdGVkU3RhdGUgPSBzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlcih1cGRhdGVkU3RhdGUsIHBheWxvYWRfKHtjaGFuZ2U6IDEsIHR5cGU6ICcnfSkpO1xuICAgIGlmIChwcm9ncmVzc0lkcy5sZW5ndGgpIHtcbiAgICAgIHVwZGF0ZWRTdGF0ZSA9IHtcbiAgICAgICAgLi4udXBkYXRlZFN0YXRlLFxuICAgICAgICBsb2FkaW5nUHJvZ3Jlc3M6IHtcbiAgICAgICAgICAuLi51cGRhdGVkU3RhdGUubG9hZGluZ1Byb2dyZXNzLFxuICAgICAgICAgIC4uLmh5ZHJhdGVQcm9ncmVzc1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB3aXRoVGFzayh1cGRhdGVkU3RhdGUsIFtcbiAgICAuLi4oZGF0YXNldHNBbGxTZXR0bGVkVGFzayA/IFtkYXRhc2V0c0FsbFNldHRsZWRUYXNrXSA6IFtdKSxcbiAgICAuLi5ub3RpZmljYXRpb25UYXNrc1xuICBdKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPENyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzUGF5bG9hZD5cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge3Jlc3VsdHMsIGFkZFRvTWFwT3B0aW9ucywgcHJvZ3Jlc3NJZHN9ID0gYWN0aW9uLnBheWxvYWQ7XG4gIGNvbnN0IG5vdGlmaWNhdGlvblRhc2tzOiBUYXNrRGVzY3JpcHRvcltdID0gW107XG5cbiAgY29uc3QgbmV3RGF0YUVudHJpZXMgPSByZXN1bHRzLnJlZHVjZSgoYWNjdSwgcmVzdWx0LCBpZHgpID0+IHtcbiAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXQgPSByZXN1bHQudmFsdWU7XG4gICAgICByZXR1cm4gey4uLmFjY3UsIFtkYXRhc2V0LmlkXTogZGF0YXNldH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHNob3cgZXJyb3Igbm90aWZpY2F0aW9uIG9uIFVJXG4gICAgICBub3RpZmljYXRpb25UYXNrcy5wdXNoKFxuICAgICAgICBBQ1RJT05fVEFTSygpLm1hcCgoKSA9PlxuICAgICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgICAgbWVzc2FnZTogYERhdGFzZXQgZXJyb3I6IEZhaWxlZCB0byBjcmVhdGUgYSBuZXcgZGF0YXNldDpcbiAgICAgICAgICAgICAgJHtyZXN1bHQucmVhc29uIHx8IChyZXN1bHQgYXMgYW55KS52YWx1ZX1gLFxuICAgICAgICAgICAgICBpZDogYGRhdGFzZXQtY3JlYXRlLWZhaWxlZC0ke2lkeH1gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIHJldHVybiBhY2N1O1xuICAgIH1cbiAgfSwge30gYXMgRGF0YXNldHMpO1xuICAvLyBzYXZlIG5ldyBkYXRhc2V0IGVudHJ5IHRvIHN0YXRlXG4gIGNvbnN0IG1lcmdlZFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBtZXJnZURhdGFzZXRzQnlPcmRlcihzdGF0ZSwgbmV3RGF0YUVudHJpZXMpXG4gIH07XG5cbiAgLy8gbWVyZ2Ugc3RhdGUgd2l0aCBjb25maWcgdG8gYmUgbWVyZ2VkXG4gIGNvbnN0IGxheWVyTWVyZ2VycyA9IHN0YXRlLm1lcmdlcnMuZmlsdGVyKG0gPT4gbS53YWl0Rm9yTGF5ZXJEYXRhKTtcbiAgY29uc3QgZGF0YXNldE1lcmdlcnMgPSBzdGF0ZS5tZXJnZXJzLmZpbHRlcihtID0+ICFsYXllck1lcmdlcnMuaW5jbHVkZXMobSkpO1xuXG4gIGNvbnN0IG5ld0RhdGFJZHMgPSBPYmplY3Qua2V5cyhuZXdEYXRhRW50cmllcyk7XG4gIGNvbnN0IHBvc3RNZXJnZXJQYXlsb2FkID0ge1xuICAgIG5ld0RhdGFJZHMsXG4gICAgb3B0aW9uczogYWRkVG9NYXBPcHRpb25zLFxuICAgIGxheWVyTWVyZ2Vyc1xuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZWRTdGF0ZSA9IGFwcGx5TWVyZ2Vyc1VwZGF0ZXIobWVyZ2VkU3RhdGUsIHtcbiAgICBtZXJnZXJzOiBkYXRhc2V0TWVyZ2VycyxcbiAgICBwb3N0TWVyZ2VyUGF5bG9hZFxuICB9KTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgY2xlYXJMb2FkaW5nUHJvZ3Jlc3MoXG4gICAgICBzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlcih1cGRhdGVkU3RhdGUsIHBheWxvYWRfKHtjaGFuZ2U6IC0xfSkpLFxuICAgICAgcHJvZ3Jlc3NJZHNcbiAgICApLFxuICAgIG5vdGlmaWNhdGlvblRhc2tzXG4gICk7XG59O1xuXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlNZXJnZXJzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IHtcbiAgICBtZXJnZXJzOiBNZXJnZXI8YW55PltdO1xuICAgIHBvc3RNZXJnZXJQYXlsb2FkOiBQb3N0TWVyZ2VyUGF5bG9hZDtcbiAgfVxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7bWVyZ2VycywgcG9zdE1lcmdlclBheWxvYWR9ID0gYWN0aW9uO1xuXG4gIC8vIG1lcmdlIHN0YXRlIHdpdGggY29uZmlnIHRvIGJlIG1lcmdlZFxuICBjb25zdCBtZXJnZVN0YXRlUmVzdWx0ID0gbWVyZ2VTdGF0ZUZyb21NZXJnZXJzKFxuICAgIHN0YXRlLFxuICAgIHtcbiAgICAgIC4uLklOSVRJQUxfVklTX1NUQVRFLFxuICAgICAgLi4uc3RhdGUuaW5pdGlhbFN0YXRlXG4gICAgfSxcbiAgICBtZXJnZXJzLFxuICAgIC8vIG5ld0RhdGFJZHMsXG4gICAgcG9zdE1lcmdlclBheWxvYWRcbiAgKTtcblxuICAvLyBpZiBhbGwgbWVyZ2VkLCBraWNrdXAgcG9zdCBtZXJnZSBwcm9jZXNzXG4gIC8vIGlmIG5vdCB3YWl0XG4gIHJldHVybiBtZXJnZVN0YXRlUmVzdWx0LmFsbE1lcmdlZFxuICAgID8gcG9zdE1lcmdlVXBkYXRlcihtZXJnZVN0YXRlUmVzdWx0Lm1lcmdlZFN0YXRlLCBwb3N0TWVyZ2VyUGF5bG9hZClcbiAgICA6IG1lcmdlU3RhdGVSZXN1bHQubWVyZ2VkU3RhdGU7XG59XG5cbi8qKiBSZWFkcyBgb3B0aW9ucy5sYXllclZpc0NvbmZpZ2AgZnJvbSBhZGQtZGF0YS10by1tYXAgKHNlZSBgQWRkRGF0YVRvTWFwT3B0aW9uc2ApLiAqL1xuZnVuY3Rpb24gbGF5ZXJWaXNDb25maWdGcm9tQWRkRGF0YU9wdGlvbnMoXG4gIG9wdGlvbnM6IFBvc3RNZXJnZXJQYXlsb2FkWydvcHRpb25zJ10gfCB1bmRlZmluZWRcbik6IFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFvcHRpb25zIHx8ICEoJ2xheWVyVmlzQ29uZmlnJyBpbiBvcHRpb25zKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcGF0Y2ggPSAob3B0aW9ucyBhcyB7bGF5ZXJWaXNDb25maWc/OiB1bmtub3dufSkubGF5ZXJWaXNDb25maWc7XG4gIGlmIChwYXRjaCA9PSBudWxsIHx8IHR5cGVvZiBwYXRjaCAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShwYXRjaCkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBwYXRjaCBhcyBQYXJ0aWFsPExheWVyVmlzQ29uZmlnPjtcbn1cblxuLyoqXG4gKiBQb2x5Z29uIGZpbHRlcnMgZm9yIHRoZXNlIGxheWVycyB1c2UgY2VudHJvaWRzIC8gZGF0YVRvRmVhdHVyZSBmcm9tXG4gKiBjYWxjdWxhdGVMYXllckRhdGEuIE90aGVyIHR5cGVzIChsYXQvbG5nIHBvaW50cywgSDMsIGFyY3MpIGNhbiBmaWx0ZXJcbiAqIGZyb20gY29sdW1ucyBvbiB0aGUgZmlyc3QgcGFzcyBhbmQgbXVzdCBub3QgYmUgcmVjYWxjdWxhdGVkIGhlcmUuXG4gKi9cbmZ1bmN0aW9uIHBvbHlnb25GaWx0ZXJEZXBlbmRzT25MYXllck1ldGEobGF5ZXI6IExheWVyKTogYm9vbGVhbiB7XG4gIHJldHVybiBsYXllci50eXBlID09PSBMQVlFUl9UWVBFUy5nZW9qc29uIHx8IGxheWVyLmNvbmZpZz8uY29sdW1uTW9kZSA9PT0gJ2dlb2pzb24nO1xufVxuXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICovXG5mdW5jdGlvbiBwb3N0TWVyZ2VVcGRhdGVyKG1lcmdlZFN0YXRlOiBWaXNTdGF0ZSwgcG9zdE1lcmdlclBheWxvYWQ6IFBvc3RNZXJnZXJQYXlsb2FkKTogVmlzU3RhdGUge1xuICBjb25zdCB7bmV3RGF0YUlkcywgb3B0aW9ucywgbGF5ZXJNZXJnZXJzfSA9IHBvc3RNZXJnZXJQYXlsb2FkO1xuICBjb25zdCBuZXdGaWx0ZXJzID0gbWVyZ2VkU3RhdGUuZmlsdGVycy5maWx0ZXIoZiA9PlxuICAgIGYuZGF0YUlkLmZpbmQoZkRhdGFJZCA9PiBuZXdEYXRhSWRzLmluY2x1ZGVzKGZEYXRhSWQpKVxuICApO1xuICBjb25zdCBkYXRhc2V0RmlsdGVyZWQ6IHN0cmluZ1tdID0gdW5pcShcbiAgICBuZXdGaWx0ZXJzLnJlZHVjZSgoYWNjdSwgZikgPT4gWy4uLmFjY3UsIC4uLmYuZGF0YUlkXSwgW10gYXMgc3RyaW5nW10pXG4gICk7XG4gIGNvbnN0IGRhdGFFbXB0eSA9IG5ld0RhdGFJZHMubGVuZ3RoIDwgMTtcblxuICBsZXQgbmV3TGF5ZXJzID0gIWRhdGFFbXB0eVxuICAgID8gbWVyZ2VkU3RhdGUubGF5ZXJzLmZpbHRlcihsID0+IGwuY29uZmlnLmRhdGFJZCAmJiBuZXdEYXRhSWRzLmluY2x1ZGVzKGwuY29uZmlnLmRhdGFJZCkpXG4gICAgOiBbXTtcblxuICBjb25zdCBuZXdEYXRhRW50cmllcyA9IG5ld0RhdGFJZHMucmVkdWNlKFxuICAgIChhY2N1LCBpZCkgPT4gKHtcbiAgICAgIC4uLmFjY3UsXG4gICAgICBbaWRdOiBtZXJnZWRTdGF0ZS5kYXRhc2V0c1tpZF1cbiAgICB9KSxcbiAgICB7fVxuICApO1xuXG4gIGlmICghbmV3TGF5ZXJzLmxlbmd0aCAmJiAob3B0aW9ucyB8fCB7fSkuYXV0b0NyZWF0ZUxheWVycyAhPT0gZmFsc2UpIHtcbiAgICAvLyBubyBsYXllciBtZXJnZWQsIGZpbmQgZGVmYXVsdHNcbiAgICBjb25zdCByZXN1bHQgPSBhZGREZWZhdWx0TGF5ZXJzKG1lcmdlZFN0YXRlLCBuZXdEYXRhRW50cmllcyk7XG4gICAgbWVyZ2VkU3RhdGUgPSByZXN1bHQuc3RhdGU7XG4gICAgbmV3TGF5ZXJzID0gcmVzdWx0Lm5ld0xheWVycztcbiAgfVxuXG4gIGlmIChtZXJnZWRTdGF0ZS5zcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgLy8gaWYgbWFwIGlzIHNwbGl0LCBhZGQgbmV3IGxheWVycyB0byBzcGxpdE1hcHNcbiAgICBuZXdMYXllcnMgPSBtZXJnZWRTdGF0ZS5sYXllcnMuZmlsdGVyKFxuICAgICAgbCA9PiBsLmNvbmZpZy5kYXRhSWQgJiYgbmV3RGF0YUlkcy5pbmNsdWRlcyhsLmNvbmZpZy5kYXRhSWQpXG4gICAgKTtcbiAgICAvLyBhIGxheWVyIGFscmVhZHkgaW4gYSBwYW5lbCB3YXMgbWVyZ2VkIGZyb20gc3BsaXQgbWFwcywgd2hpY2ggZGVjaWRlIHRoZSBwYW5lbHMgc2hvd2luZyBpdFxuICAgIGNvbnN0IGxheWVyc05vdEluU3BsaXRNYXBzID0gbmV3TGF5ZXJzLmZpbHRlcihcbiAgICAgIGwgPT4gIW1lcmdlZFN0YXRlLnNwbGl0TWFwcy5zb21lKHNtID0+IGwuaWQgaW4gc20ubGF5ZXJzKVxuICAgICk7XG4gICAgbWVyZ2VkU3RhdGUgPSB7XG4gICAgICAuLi5tZXJnZWRTdGF0ZSxcbiAgICAgIHNwbGl0TWFwczogYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcChtZXJnZWRTdGF0ZS5zcGxpdE1hcHMsIGxheWVyc05vdEluU3BsaXRNYXBzKVxuICAgIH07XG4gIH1cblxuICBtZXJnZWRTdGF0ZSA9IG1lcmdlTGF5ZXJWaXNDb25maWdGb3JOZXdEYXRhc2V0cyhcbiAgICBtZXJnZWRTdGF0ZSxcbiAgICBsYXllclZpc0NvbmZpZ0Zyb21BZGREYXRhT3B0aW9ucyhvcHRpb25zKSxcbiAgICBuZXdEYXRhSWRzXG4gICk7XG5cbiAgLy8gaWYgbm8gdG9vbHRpcHMgbWVyZ2VkIGFkZCBkZWZhdWx0IHRvb2x0aXBzXG4gIG5ld0RhdGFJZHMuZm9yRWFjaChkYXRhSWQgPT4ge1xuICAgIGNvbnN0IHRvb2x0aXBGaWVsZHMgPSBtZXJnZWRTdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmNvbmZpZy5maWVsZHNUb1Nob3dbZGF0YUlkXTtcbiAgICAvLyBsb2FkaW5nIGRhdGFzZXQ6IGF1dG9DcmVhdGVUb29sdGlwcyBpcyBmYWxzZSBhbmQgd2UgZG9uJ3Qgd2FudCB0byBydW4gYWRkRGVmYXVsdFRvb2x0aXBzIHdoZW4gdG9vbHRpcEZpZWxkcyBpcyBlbXB0eVxuICAgIGlmIChcbiAgICAgIG9wdGlvbnM/LmF1dG9DcmVhdGVUb29sdGlwcyAhPT0gZmFsc2UgJiZcbiAgICAgICghQXJyYXkuaXNBcnJheSh0b29sdGlwRmllbGRzKSB8fCAhdG9vbHRpcEZpZWxkcy5sZW5ndGgpXG4gICAgKSB7XG4gICAgICAvLyBhZGRpbmcgZGF0YXNldDogYXV0b0NyZWF0ZVRvb2x0aXBzIGlzIHRydWVcbiAgICAgIG1lcmdlZFN0YXRlID0gYWRkRGVmYXVsdFRvb2x0aXBzKG1lcmdlZFN0YXRlLCBuZXdEYXRhRW50cmllc1tkYXRhSWRdKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHVwZGF0ZWREYXRhc2V0cyA9IGRhdGFFbXB0eVxuICAgID8gT2JqZWN0LmtleXMobWVyZ2VkU3RhdGUuZGF0YXNldHMpXG4gICAgOiB1bmlxKE9iamVjdC5rZXlzKG5ld0RhdGFFbnRyaWVzKS5jb25jYXQoZGF0YXNldEZpbHRlcmVkKSk7XG5cbiAgbGV0IHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShtZXJnZWRTdGF0ZSwgdXBkYXRlZERhdGFzZXRzLCB1bmRlZmluZWQpO1xuXG4gIC8vIFBvbHlnb24gcGVyLWxheWVyIGluZGV4ZXMgbmVlZCBjZW50cm9pZHMgLyBkYXRhVG9GZWF0dXJlLCB3aGljaCBhcmUgb25seVxuICAvLyBwb3B1bGF0ZWQgYnkgdGhlIGxheWVyLWRhdGEgcGFzcyBhYm92ZS4gU2tpcCBkYXRhc2V0cyB3aG9zZSB0YXJnZXRlZCBsYXllcnNcbiAgLy8gYWxyZWFkeSBmaWx0ZXJlZCBmcm9tIGNvbHVtbnMgKGUuZy4gbGF0L2xuZyBwb2ludHMpLlxuICBjb25zdCBwb2x5Z29uRmlsdGVycyA9IHVwZGF0ZWRTdGF0ZS5maWx0ZXJzLmZpbHRlcihcbiAgICBmID0+IGYudHlwZSA9PT0gRklMVEVSX1RZUEVTLnBvbHlnb24gJiYgZi5lbmFibGVkICE9PSBmYWxzZVxuICApO1xuICBjb25zdCBwb2x5Z29uTWV0YURhdGFJZHMgPSB1bmlxKFxuICAgIHVwZGF0ZWRTdGF0ZS5sYXllcnNcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIGxheWVyID0+XG4gICAgICAgICAgcG9seWdvbkZpbHRlckRlcGVuZHNPbkxheWVyTWV0YShsYXllcikgJiZcbiAgICAgICAgICBwb2x5Z29uRmlsdGVycy5zb21lKGYgPT4gZi5sYXllcklkPy5pbmNsdWRlcyhsYXllci5pZCkpXG4gICAgICApXG4gICAgICAubWFwKGxheWVyID0+IGxheWVyLmNvbmZpZy5kYXRhSWQpXG4gICAgICAuZmlsdGVyKChpZCk6IGlkIGlzIHN0cmluZyA9PiBCb29sZWFuKGlkKSAmJiB1cGRhdGVkRGF0YXNldHMuaW5jbHVkZXMoaWQpKVxuICApO1xuICBpZiAocG9seWdvbk1ldGFEYXRhSWRzLmxlbmd0aCkge1xuICAgIHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShcbiAgICAgIHtcbiAgICAgICAgLi4udXBkYXRlZFN0YXRlLFxuICAgICAgICBkYXRhc2V0czogYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICAgICAgICBwb2x5Z29uTWV0YURhdGFJZHMsXG4gICAgICAgICAgdXBkYXRlZFN0YXRlLmRhdGFzZXRzLFxuICAgICAgICAgIHVwZGF0ZWRTdGF0ZS5maWx0ZXJzLFxuICAgICAgICAgIHVwZGF0ZWRTdGF0ZS5sYXllcnNcbiAgICAgICAgKVxuICAgICAgfSxcbiAgICAgIHBvbHlnb25NZXRhRGF0YUlkc1xuICAgICk7XG4gIH1cblxuICAvLyByZWdpc3RlciBsYXllciBhbmltYXRpb24gZG9tYWluLFxuICAvLyBuZWVkIHRvIGJlIGNhbGxlZCBhZnRlciBsYXllciBkYXRhIGlzIGNhbGN1bGF0ZWRcbiAgdXBkYXRlZFN0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKHVwZGF0ZWRTdGF0ZSk7XG5cbiAgLy8gdHJ5IHRvIHByb2Nlc3MgbGF5ZXJNZXJnZXJzIGFmdGVyIGRhdGFzZXQrZGF0YXNldE1lcmdlcnNcbiAgdXBkYXRlZFN0YXRlID1cbiAgICBsYXllck1lcmdlcnMgJiYgbGF5ZXJNZXJnZXJzLmxlbmd0aCA+IDBcbiAgICAgID8gYXBwbHlNZXJnZXJzVXBkYXRlcih1cGRhdGVkU3RhdGUsIHtcbiAgICAgICAgICBtZXJnZXJzOiBsYXllck1lcmdlcnMsXG4gICAgICAgICAgcG9zdE1lcmdlclBheWxvYWQ6IHsuLi5wb3N0TWVyZ2VyUGF5bG9hZCwgbGF5ZXJNZXJnZXJzOiBbXX1cbiAgICAgICAgfSlcbiAgICAgIDogdXBkYXRlZFN0YXRlO1xuXG4gIC8vIGNlbnRlciB0aGUgbWFwIG9uY2UgdGhlIGRhdGFzZXQgaXMgY3JlYXRlZFxuICBpZiAobmV3TGF5ZXJzLmxlbmd0aCAmJiAob3B0aW9ucyB8fCB7fSkuY2VudGVyTWFwKSB7XG4gICAgY29uc3QgYm91bmRzID0gZmluZE1hcEJvdW5kcyhuZXdMYXllcnMpO1xuICAgIGlmIChib3VuZHMpIHtcbiAgICAgIGNvbnN0IHBhZGRpbmcgPSBvcHRpb25zPy5wYWRkaW5nO1xuICAgICAgY29uc3QgZml0Qm91bmRzVGFzayA9IEFDVElPTl9UQVNLX0ZJVF9CT1VORFMoKS5tYXAoKCkgPT4ge1xuICAgICAgICByZXR1cm4gZml0TWFwQm91bmRzKGJvdW5kcywgcGFkZGluZyk7XG4gICAgICB9KTtcbiAgICAgIHVwZGF0ZWRTdGF0ZSA9IHdpdGhUYXNrKHVwZGF0ZWRTdGF0ZSwgZml0Qm91bmRzVGFzayk7XG4gICAgfVxuICB9XG5cbiAgLy8gbmVlZCB0byBjZW50ZXIgbWFwIGhlcmUgaWYgd2UgaGF2ZSBuZXcgbGF5ZXJzXG4gIHJldHVybiB1cGRhdGVkU3RhdGU7XG59XG5cbi8qKlxuICogUmVuYW1lIGFuIGV4aXN0aW5nIGRhdGFzZXQgaW4gYHZpc1N0YXRlYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZURhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbmFtZURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIHJldHVybiB1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyKHN0YXRlLCB7ZGF0YUlkOiBhY3Rpb24uZGF0YUlkLCBwcm9wczoge2xhYmVsOiBhY3Rpb24ubGFiZWx9fSk7XG59XG5cbmNvbnN0IEFMTE9XRURfVVBEQVRFX0RBVEFTRVRfUFJPUFMgPSBbJ2xhYmVsJywgJ2NvbG9yJywgJ21ldGFkYXRhJ107XG5cbi8qKlxuICogVmFsaWRhdGVzIHByb3BlcnRpZXMgYmVmb3JlIHVwZGF0aW5nIHRoZSBkYXRhc2V0LlxuICogTWFrZXMgc3VyZSBlYWNoIHByb3BlcnR5IGlzIGluIHRoZSBhbGxvd2VkIGxpc3RcbiAqIE1ha2VzIHN1cmUgY29sb3IgdmFsdWUgaXMgUkdCXG4gKiBQZXJmb3JtcyBkZWVwIG1lcmdlIHdoZW4gdXBkYXRpbmcgbWV0YWRhdGFcbiAqL1xuY29uc3QgdmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMgPSAocHJvcHMsIGRhdGFzZXQpID0+IHtcbiAgY29uc3QgdmFsaWRhdGVkUHJvcHMgPSBPYmplY3QuZW50cmllcyhwcm9wcykucmVkdWNlKChhY2MsIGVudHJ5KSA9PiB7XG4gICAgY29uc3QgW2tleSwgdmFsdWVdID0gZW50cnk7XG4gICAgLy8gaXMgaXQgYWxsb3dlZCA/XG4gICAgaWYgKCFBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgLy8gaWYgd2UgYXJlIGFkZGluZyBhIGNvbG9yIGJ1dCBpdCBpcyBub3QgUkdCIHdlIGRvbid0IGFjY2VwdCB0aGUgdmFsdWVcbiAgICAvLyBpbiB0aGUgZnV0dXJlIGFzIHdlIGFkZCBtb3JlIHByb3BzIHdlIHNob3VsZCBjaGFuZ2UgdGhpcyBpZiBpbnRvIGEgc3dpdGNoXG4gICAgaWYgKGtleSA9PT0gJ2NvbG9yJyAmJiAhaXNSZ2JDb2xvcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgLy8gZG8gd2UgbmVlZCBkZWVwIG1lcmdlID9cbiAgICByZXR1cm4gey4uLmFjYywgW2tleV06IGlzUGxhaW5PYmplY3QodmFsdWUpID8gZGVlcG1lcmdlKGRhdGFzZXRba2V5XSB8fCB7fSwgdmFsdWUpIDogdmFsdWV9O1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIHZhbGlkYXRlZFByb3BzO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgRGF0YXNldCBwcm9wcyAobGFiZWwsIGNvbG9yLCBtZXRhKS4gRG8gbm90IHVzZSB0byB1cGRhdGUgZGF0YSBvciBhbnkgcmVsYXRlZCBwcm9wZXJ0aWVzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRGF0YXNldFByb3BzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtkYXRhSWQsIHByb3BzfSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFzZXRzfSA9IHN0YXRlO1xuICBjb25zdCBleGlzdGluZyA9IGRhdGFzZXRzW2RhdGFJZF07XG5cbiAgaWYgKGV4aXN0aW5nKSB7XG4gICAgY29uc3QgdmFsaWRhdGVkUHJvcHMgPSB2YWxpZGF0ZURhdGFzZXRVcGRhdGVQcm9wcyhwcm9wcywgZXhpc3RpbmcpO1xuICAgIC8vICB2YWxpZGF0ZSBwcm9wczoganVzdCBjb2xvciBmb3Igbm93XG4gICAgLy8gIHdlIG9ubHkgYWxsb3cgbGFiZWwsIGNvbG9yIGFuZCBtZXRhIHRvIGJlIHVwZGF0ZWRcbiAgICAvLyBjb25zdCBuZXdUYWJsZSA9IGNvcHlUYWJsZUFuZFVwZGF0ZShleGlzdGluZywgdmFsaWRhdGVkUHJvcHMpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGRhdGFzZXRzOiB7XG4gICAgICAgIC4uLmRhdGFzZXRzLFxuICAgICAgICBbZGF0YUlkXTogY29weVRhYmxlQW5kVXBkYXRlKGV4aXN0aW5nLCB2YWxpZGF0ZWRQcm9wcylcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIFJlLXZhbGlkYXRlIGEgbGl2ZSBsYXllciBhZ2FpbnN0IGEgdGFibGUgd2hvc2Ugc2NoZW1hIGp1c3QgY2hhbmdlZC5cbiAqXG4gKiBUaGUgbGF5ZXIncyBjb2x1bW5zIC8gdmlzdWFsLWNoYW5uZWwgZmllbGRzIC8gdGV4dC1sYWJlbCBmaWVsZHMgYXJlIGZpcnN0XG4gKiByZW1hcHBlZCB0byB0aGVpciBuZXcgbmFtZXMgKHZpYSBgcmVuYW1lc2ApIHNvIHRoZSBsYXllciBmb2xsb3dzIGEgcmVuYW1lXG4gKiBpbnN0ZWFkIG9mIHRyZWF0aW5nIHRoZSBvbGQgY29sdW1uIGFzIHJlbW92ZWQsIHRoZW4gcmUtdmFsaWRhdGVkIHdpdGhcbiAqIGB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YWAg4oCUIHRoZSBzYW1lIHNlcmlhbGl6ZSArIHZhbGlkYXRlIHBhdGggdXNlZFxuICogd2hlbiBhIHNhdmVkIGNvbmZpZyBpcyBsb2FkZWQgYWdhaW5zdCBuZXcgZGF0YS4gUmV0dXJucyBgbnVsbGAgd2hlbiBhXG4gKiByZXF1aXJlZCBjb2x1bW4gaXMgZ29uZSAodGhlIGxheWVyIGNhbiBubyBsb25nZXIgYmUgYnVpbHQpLlxuICovXG5mdW5jdGlvbiByZWNvbmNpbGVMYXllcldpdGhOZXdTY2hlbWEoXG4gIGxheWVyOiBMYXllcixcbiAgcmVuYW1lczogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgbmV3VGFibGU6IEtlcGxlclRhYmxlLFxuICBzdGF0ZTogVmlzU3RhdGVcbik6IExheWVyIHwgbnVsbCB7XG4gIGNvbnN0IGNvbmZpZ1BhdGNoOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgLy8gZm9sbG93IHJlbmFtZWQgY29sdW1uc1xuICBjb25zdCBjb2x1bW5zUGF0Y2g6IFJlY29yZDxzdHJpbmcsIHt2YWx1ZTogc3RyaW5nIHwgbnVsbDsgZmllbGRJZHg6IG51bWJlcn0+ID0ge307XG4gIGxldCBjb2x1bW5zQ2hhbmdlZCA9IGZhbHNlO1xuICBPYmplY3QuZW50cmllcyhsYXllci5jb25maWcuY29sdW1ucyB8fCB7fSkuZm9yRWFjaCgoW2NrZXksIGNvbF0pID0+IHtcbiAgICBpZiAoY29sPy52YWx1ZSAmJiByZW5hbWVzW2NvbC52YWx1ZV0pIHtcbiAgICAgIGNvbHVtbnNQYXRjaFtja2V5XSA9IHsuLi5jb2wsIHZhbHVlOiByZW5hbWVzW2NvbC52YWx1ZV19O1xuICAgICAgY29sdW1uc0NoYW5nZWQgPSB0cnVlO1xuICAgIH1cbiAgfSk7XG4gIGlmIChjb2x1bW5zQ2hhbmdlZCkge1xuICAgIGNvbmZpZ1BhdGNoLmNvbHVtbnMgPSB7Li4ubGF5ZXIuY29uZmlnLmNvbHVtbnMsIC4uLmNvbHVtbnNQYXRjaH07XG4gIH1cblxuICAvLyBmb2xsb3cgcmVuYW1lZCB2aXN1YWwtY2hhbm5lbCBmaWVsZHMgKGNvbG9yRmllbGQsIHNpemVGaWVsZCwgLi4uKVxuICBPYmplY3QudmFsdWVzKGxheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKCh7ZmllbGR9KSA9PiB7XG4gICAgY29uc3QgZmllbGRDb25maWcgPSBsYXllci5jb25maWdbZmllbGRdO1xuICAgIGlmIChmaWVsZENvbmZpZz8ubmFtZSAmJiByZW5hbWVzW2ZpZWxkQ29uZmlnLm5hbWVdKSB7XG4gICAgICBjb25maWdQYXRjaFtmaWVsZF0gPSB7Li4uZmllbGRDb25maWcsIG5hbWU6IHJlbmFtZXNbZmllbGRDb25maWcubmFtZV19O1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gZm9sbG93IHJlbmFtZWQgdGV4dC1sYWJlbCBmaWVsZHNcbiAgaWYgKGxheWVyLmNvbmZpZy50ZXh0TGFiZWw/Lmxlbmd0aCkge1xuICAgIGNvbnN0IHRleHRMYWJlbCA9IGxheWVyLmNvbmZpZy50ZXh0TGFiZWwubWFwKHRsID0+XG4gICAgICB0bC5maWVsZCAmJiByZW5hbWVzW3RsLmZpZWxkLm5hbWVdXG4gICAgICAgID8gey4uLnRsLCBmaWVsZDogey4uLnRsLmZpZWxkLCBuYW1lOiByZW5hbWVzW3RsLmZpZWxkLm5hbWVdfX1cbiAgICAgICAgOiB0bFxuICAgICk7XG4gICAgaWYgKHRleHRMYWJlbC5zb21lKCh0bCwgaSkgPT4gdGwgIT09IGxheWVyLmNvbmZpZy50ZXh0TGFiZWxbaV0pKSB7XG4gICAgICBjb25maWdQYXRjaC50ZXh0TGFiZWwgPSB0ZXh0TGFiZWw7XG4gICAgfVxuICB9XG5cbiAgLy8gc2hhbGxvdy1jb3B5IHRoZSBsYXllciBzbyB3ZSBuZXZlciBtdXRhdGUgcmVkdXggc3RhdGU7IHRoZSBjb3B5IGtlZXBzIHRoZVxuICAvLyBwcm90b3R5cGUgbWV0aG9kcyAoYHZpc3VhbENoYW5uZWxzYCBnZXR0ZXIsIGBpc1ZhbGlkVG9TYXZlYCkgc28gaXRcbiAgLy8gc2VyaWFsaXplcyBleGFjdGx5IGxpa2UgYSBsaXZlIGxheWVyLlxuICBjb25zdCBsYXllckNvcHkgPSBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKGxheWVyKSksIGxheWVyKTtcbiAgaWYgKE9iamVjdC5rZXlzKGNvbmZpZ1BhdGNoKS5sZW5ndGgpIHtcbiAgICBsYXllckNvcHkuY29uZmlnID0gey4uLmxheWVyLmNvbmZpZywgLi4uY29uZmlnUGF0Y2h9O1xuICB9XG5cbiAgY29uc3QgdmFsaWRhdGVkID0gdmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEoXG4gICAgbmV3VGFibGUsXG4gICAgc3RhdGUubGF5ZXJDbGFzc2VzLFxuICAgIGxheWVyQ29weSxcbiAgICBzdGF0ZS5zY2hlbWFcbiAgKTtcblxuICByZXR1cm4gdmFsaWRhdGVkICYmIHZhbGlkYXRlZC5oYXNBbGxDb2x1bW5zKCkgPyB2YWxpZGF0ZWQgOiBudWxsO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBhbiBleGlzdGluZyBkYXRhc2V0J3Mgc2NoZW1hIChjb2x1bW5zL2ZpZWxkcykgaW4gcGxhY2UgYW5kIHJlY29uY2lsZVxuICogZXZlcnl0aGluZyB0aGF0IHJlZmVyZW5jZWQgdGhlIG9sZCBjb2x1bW5zOiBmaWx0ZXJzLCBsYXllcnMsIHRvb2x0aXAgZmllbGRzLFxuICogcGlubmVkIGNvbHVtbnMgYW5kIHNvcnQgc3RhdGUuIFRoZSBkYXRhc2V0IGtlZXBzIGl0cyBpZC9sYWJlbC9jb2xvci9tZXRhZGF0YS5cbiAqXG4gKiBgYWN0aW9uLmRhdGFgIGlzIHRoZSBzYW1lIHNoYXBlIGBLZXBsZXJUYWJsZS5pbXBvcnREYXRhYCBhY2NlcHRzIChge2NvbHMsXG4gKiBmaWVsZHMsIGFycm93VGFibGV9YCB3aGVuIHJlcGxhY2luZyBjb2x1bW5zKS4gYGFjdGlvbi5yZW5hbWVzYCBpcyBhbiBvcHRpb25hbFxuICogb2xkIOKGkiBuZXcgY29sdW1uLW5hbWUgbWFwIHNvIGxheWVycy9maWx0ZXJzL3Rvb2x0aXBzIGZvbGxvdyBhIHJlbmFtZSBpbnN0ZWFkXG4gKiBvZiB0cmVhdGluZyB0aGUgb2xkIGNvbHVtbiBhcyByZW1vdmVkLlxuICpcbiAqIFJlY29uY2lsaWF0aW9uIGlzIG5hbWUtYmFzZWQg4oCUIHRoZSBzYW1lIHdheSBrZXBsZXIuZ2wgbG9hZHMgYSBzYXZlZCBjb25maWdcbiAqIGFnYWluc3QgY2hhbmdlZCBkYXRhLiBBIGxheWVyIHdob3NlIHJlcXVpcmVkIGNvbHVtbiBpcyBnb25lIGlzIHJlbW92ZWQ7IGFcbiAqIGZpbHRlciBvbiBhIGdvbmUgY29sdW1uIGlzIGRyb3BwZWQgKG9yIHRoZSBkYXRhc2V0IGlzIHNwbGljZWQgb3V0IG9mIGEgc3luY2VkXG4gKiBmaWx0ZXIpOyB0b29sdGlwIGZpZWxkcyBhcmUgcmVtYXBwZWQgLyBkcm9wcGVkLlxuICpcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVEYXRhc2V0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVEYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7ZGF0YUlkLCBkYXRhLCByZW5hbWVzID0ge319ID0gYWN0aW9uO1xuICBjb25zdCBleGlzdGluZyA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZXhpc3RpbmcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyAxLiByZWJ1aWxkIHRoZSB0YWJsZSBzY2hlbWEgaW4gcGxhY2UgKHNhbWUgaWQvbGFiZWwvY29sb3IvbWV0YWRhdGEpXG4gIGNvbnN0IG5ld1RhYmxlID0gY29weVRhYmxlQW5kVXBkYXRlKGV4aXN0aW5nLCB7fSk7XG4gIG5ld1RhYmxlLnVwZGF0ZVNjaGVtYShkYXRhKTtcblxuICAvLyBUaGUgZGF0YSBjb250YWluZXIgaXMgcmVidWlsdCB1bnNvcnRlZCBhbmQgdW5maWx0ZXJlZDsgcmVzZXQgdGhlIHRhYmxlJ3NcbiAgLy8gdmlldyBzdGF0ZSB0aGF0IGluZGV4ZXMgaW50byB0aGUgb2xkIGNvbnRhaW5lci5cbiAgbmV3VGFibGUuZmlsdGVyZWRJZHhDUFUgPSBuZXdUYWJsZS5hbGxJbmRleGVzO1xuICBuZXdUYWJsZS5maWx0ZXJSZWNvcmRDUFUgPSB1bmRlZmluZWQ7XG4gIG5ld1RhYmxlLnNvcnRDb2x1bW4gPSB1bmRlZmluZWQ7XG4gIG5ld1RhYmxlLnNvcnRPcmRlciA9IG51bGw7XG4gIG5ld1RhYmxlLnBpbm5lZENvbHVtbnMgPSAoZXhpc3RpbmcucGlubmVkQ29sdW1ucyB8fCBbXSlcbiAgICAubWFwKG5hbWUgPT4gcmVuYW1lc1tuYW1lXSA/PyBuYW1lKVxuICAgIC5maWx0ZXIobmFtZSA9PiBuZXdUYWJsZS5nZXRDb2x1bW5GaWVsZElkeChuYW1lKSA+IC0xKTtcblxuICBjb25zdCBuZXdGaWVsZHNCeU5hbWUgPSBuZXcgU2V0KG5ld1RhYmxlLmZpZWxkcy5tYXAoZiA9PiBmLm5hbWUpKTtcbiAgY29uc3QgbmV3RGF0YXNldHMgPSB7Li4uc3RhdGUuZGF0YXNldHMsIFtkYXRhSWRdOiBuZXdUYWJsZX07XG5cbiAgLy8gMi4gcmVjb25jaWxlIGZpbHRlcnNcbiAgbGV0IG5ld0ZpbHRlcnMgPSBzdGF0ZS5maWx0ZXJzXG4gICAgLm1hcChmaWx0ZXIgPT4ge1xuICAgICAgY29uc3QgdmkgPSBmaWx0ZXIuZGF0YUlkLmluZGV4T2YoZGF0YUlkKTtcbiAgICAgIGlmICh2aSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlcjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2xkTmFtZSA9IGZpbHRlci5uYW1lW3ZpXTtcbiAgICAgIGNvbnN0IG5ld05hbWUgPSByZW5hbWVzW29sZE5hbWVdID8/IG9sZE5hbWU7XG4gICAgICBjb25zdCBmaWVsZElkeCA9IG5ld1RhYmxlLmdldENvbHVtbkZpZWxkSWR4KG5ld05hbWUpO1xuXG4gICAgICBpZiAoZmllbGRJZHggPT09IC0xKSB7XG4gICAgICAgIC8vIGNvbHVtbiBpcyBnb25lOiBkcm9wIGEgc2luZ2xlLWRhdGFzZXQgZmlsdGVyLCBzcGxpY2UgaXQgb3V0IG9mIGEgc3luY2VkIG9uZVxuICAgICAgICByZXR1cm4gZmlsdGVyLmRhdGFJZC5sZW5ndGggPT09IDFcbiAgICAgICAgICA/IG51bGxcbiAgICAgICAgICA6IF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2aSwgbmV3RGF0YXNldHMpO1xuICAgICAgfVxuXG4gICAgICAvLyBjb2x1bW4gcHJlc2VudCAocG9zc2libHkgcmVuYW1lZCk6IHJlLXJlc29sdmUgbmFtZS9maWVsZElkeC9kb21haW5cbiAgICAgIGNvbnN0IHtmaWx0ZXI6IHVwZGF0ZWR9ID0gYXBwbHlGaWx0ZXJGaWVsZE5hbWUoZmlsdGVyLCBuZXdEYXRhc2V0cywgZGF0YUlkLCBuZXdOYW1lLCB2aSwge1xuICAgICAgICBtZXJnZURvbWFpbjogdmkgPiAwXG4gICAgICB9KTtcbiAgICAgIGlmICghdXBkYXRlZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gYnJ1c2ggZmlsdGVycyBjYXJyeSBhIHNlY29uZCB5LWF4aXMgZmllbGQ7IGZvbGxvdyBhIHJlbmFtZSB0aGVyZSB0b29cbiAgICAgIGNvbnN0IHlBeGlzID1cbiAgICAgICAgdXBkYXRlZC55QXhpcz8ubmFtZSAmJlxuICAgICAgICAocmVuYW1lc1t1cGRhdGVkLnlBeGlzLm5hbWVdXG4gICAgICAgICAgPyB7Li4udXBkYXRlZC55QXhpcywgbmFtZTogcmVuYW1lc1t1cGRhdGVkLnlBeGlzLm5hbWVdfVxuICAgICAgICAgIDogbmV3RmllbGRzQnlOYW1lLmhhcyh1cGRhdGVkLnlBeGlzLm5hbWUpXG4gICAgICAgICAgPyB1cGRhdGVkLnlBeGlzXG4gICAgICAgICAgOiBudWxsKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udXBkYXRlZCxcbiAgICAgICAgeUF4aXMsXG4gICAgICAgIC8vIGNsYW1wIHRoZSB1c2VyJ3MgcHJldmlvdXMgc2VsZWN0aW9uIGludG8gdGhlIG5ldyBkb21haW4gaW5zdGVhZCBvZlxuICAgICAgICAvLyByZXNldHRpbmcgaXQgdG8gdGhlIGZ1bGwgcmFuZ2VcbiAgICAgICAgdmFsdWU6IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4oZmlsdGVyLnZhbHVlLCB1cGRhdGVkKVxuICAgICAgfTtcbiAgICB9KVxuICAgIC5maWx0ZXIoQm9vbGVhbikgYXMgRmlsdGVyW107XG5cbiAgLy8gcmVhc3NpZ24gR1BVIGNoYW5uZWxzIG5vdyB0aGF0IHRoZSBmaWx0ZXIgbGlzdCBpcyBzZXR0bGVkXG4gIG5ld0ZpbHRlcnMgPSBuZXdGaWx0ZXJzLm1hcChmaWx0ZXIgPT5cbiAgICBmaWx0ZXIuZ3B1ID8gYXNzaWduR3B1Q2hhbm5lbChzZXRGaWx0ZXJHcHVNb2RlKGZpbHRlciwgbmV3RmlsdGVycyksIG5ld0ZpbHRlcnMpIDogZmlsdGVyXG4gICk7XG5cbiAgLy8gMy4gcmVidWlsZCB0aGUgdGFibGUncyBmaWx0ZXIgc3RhdGUgKGdwdUZpbHRlciAvIGZpbHRlclJlY29yZCAvIGZpbHRlcmVkSW5kZXgpXG4gIG5ld1RhYmxlLmZpbHRlclRhYmxlKFxuICAgIG5ld0ZpbHRlcnMsXG4gICAgc3RhdGUubGF5ZXJzLmZpbHRlcihsID0+IGwuY29uZmlnLmRhdGFJZCA9PT0gZGF0YUlkKSxcbiAgICB7fVxuICApO1xuXG4gIC8vIDQuIHJlY29uY2lsZSBsYXllcnNcbiAgY29uc3QgbGF5ZXJzVG9SZW1vdmU6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IG5ld0xheWVycyA9IHN0YXRlLmxheWVycy5tYXAobGF5ZXIgPT4ge1xuICAgIGlmIChsYXllci5jb25maWcuZGF0YUlkICE9PSBkYXRhSWQpIHtcbiAgICAgIHJldHVybiBsYXllcjtcbiAgICB9XG4gICAgY29uc3QgcmVjb25jaWxlZCA9IHJlY29uY2lsZUxheWVyV2l0aE5ld1NjaGVtYShsYXllciwgcmVuYW1lcywgbmV3VGFibGUsIHN0YXRlKTtcbiAgICBpZiAocmVjb25jaWxlZCkge1xuICAgICAgcmV0dXJuIHJlY29uY2lsZWQ7XG4gICAgfVxuICAgIGxheWVyc1RvUmVtb3ZlLnB1c2gobGF5ZXIuaWQpO1xuICAgIHJldHVybiBsYXllcjsgLy8gcGxhY2Vob2xkZXIsIGRyb3BwZWQgdmlhIHJlbW92ZUxheWVyVXBkYXRlciBiZWxvd1xuICB9KTtcblxuICAvLyA1LiByZWNvbmNpbGUgdG9vbHRpcCBmaWVsZHNUb1Nob3dcbiAgbGV0IGludGVyYWN0aW9uQ29uZmlnID0gc3RhdGUuaW50ZXJhY3Rpb25Db25maWc7XG4gIGNvbnN0IHRvb2x0aXAgPSBpbnRlcmFjdGlvbkNvbmZpZz8udG9vbHRpcDtcbiAgY29uc3QgZmllbGRzVG9TaG93ID0gdG9vbHRpcD8uY29uZmlnPy5maWVsZHNUb1Nob3c/LltkYXRhSWRdO1xuICBpZiAoZmllbGRzVG9TaG93KSB7XG4gICAgY29uc3QgbmV4dEZpZWxkc1RvU2hvdyA9IGZpZWxkc1RvU2hvdy5mbGF0TWFwKGYgPT4ge1xuICAgICAgY29uc3QgbmFtZSA9IHJlbmFtZXNbZi5uYW1lXSA/PyBmLm5hbWU7XG4gICAgICByZXR1cm4gbmV3RmllbGRzQnlOYW1lLmhhcyhuYW1lKSA/IFt7Li4uZiwgbmFtZX1dIDogW107XG4gICAgfSk7XG4gICAgaW50ZXJhY3Rpb25Db25maWcgPSB7XG4gICAgICAuLi5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgLi4udG9vbHRpcCxcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgLi4udG9vbHRpcC5jb25maWcsXG4gICAgICAgICAgZmllbGRzVG9TaG93OiB7Li4udG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93LCBbZGF0YUlkXTogbmV4dEZpZWxkc1RvU2hvd31cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBsZXQgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBuZXdEYXRhc2V0cyxcbiAgICBmaWx0ZXJzOiBuZXdGaWx0ZXJzLFxuICAgIGxheWVyczogbmV3TGF5ZXJzLFxuICAgIGludGVyYWN0aW9uQ29uZmlnXG4gIH07XG5cbiAgLy8gNi4gZHJvcCBsYXllcnMgdGhhdCBsb3N0IHRoZWlyIHJlcXVpcmVkIGNvbHVtbnNcbiAgbmV4dFN0YXRlID0gbGF5ZXJzVG9SZW1vdmUucmVkdWNlKChhY2N1LCBpZCkgPT4gcmVtb3ZlTGF5ZXJVcGRhdGVyKGFjY3UsIHtpZH0pLCBuZXh0U3RhdGUpO1xuXG4gIC8vIDcuIHJlY29tcHV0ZSBsYXllciBkb21haW5zICsgZGF0YSBmb3IgdGhlIHVwZGF0ZWQgZGF0YXNldFxuICBuZXh0U3RhdGUgPSB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEobmV4dFN0YXRlLCBkYXRhSWQpO1xuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbi8qKlxuICogV2hlbiBhIHVzZXIgY2xpY2tzIG9uIHRoZSBzcGVjaWZpYyBtYXAgY2xvc2luZyBpY29uXG4gKiB0aGUgYXBwbGljYXRpb24gd2lsbCBjbG9zZSB0aGUgc2VsZWN0ZWQgbWFwXG4gKiBhbmQgd2lsbCBtZXJnZSB0aGUgcmVtYWluaW5nIG9uZSB3aXRoIHRoZSBnbG9iYWwgc3RhdGVcbiAqIFRPRE86IGkgdGhpbmsgaW4gdGhlIGZ1dHVyZSB0aGlzIGFjdGlvbiBzaG91bGQgYmUgY2FsbGVkIG1lcmdlIG1hcCBsYXllcnMgd2l0aCBnbG9iYWwgc2V0dGluZ3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZSBgdmlzU3RhdGVgXG4gKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uIGFjdGlvblxuICogQHJldHVybnMge09iamVjdH0gbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbG9zZVNwZWNpZmljTWFwQXRJbmRleDxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBNYXBTdGF0ZUFjdGlvbnMuVG9nZ2xlU3BsaXRNYXBVcGRhdGVyQWN0aW9uXG4pOiBTIHtcbiAgLy8gcmV0cmlldmUgbGF5ZXJzIG1ldGEgZGF0YSBmcm9tIHRoZSByZW1haW5pbmcgbWFwIHRoYXQgd2UgbmVlZCB0byBrZWVwXG4gIGNvbnN0IGluZGV4VG9SZXRyaWV2ZSA9IDEgLSBhY3Rpb24ucGF5bG9hZDtcbiAgY29uc3QgbWFwTGF5ZXJzID0gc3RhdGUuc3BsaXRNYXBzW2luZGV4VG9SZXRyaWV2ZV0/LmxheWVycztcbiAgY29uc3Qge2xheWVyc30gPSBzdGF0ZTtcblxuICAvLyB1cGRhdGUgbGF5ZXIgdmlzaWJpbGl0eVxuICBjb25zdCBuZXdMYXllcnMgPSBsYXllcnMubWFwKGxheWVyID0+XG4gICAgbWFwTGF5ZXJzICYmICFtYXBMYXllcnNbbGF5ZXIuaWRdICYmIGxheWVyLmNvbmZpZy5pc1Zpc2libGVcbiAgICAgID8gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICAgIC8vIGlmIGxheWVyLmlkIGlzIG5vdCBpbiBtYXBMYXllcnMsIGl0IHNob3VsZCBiZSBpblZpc2libGVcbiAgICAgICAgICBpc1Zpc2libGU6IGZhbHNlXG4gICAgICAgIH0pXG4gICAgICA6IGxheWVyXG4gICk7XG5cbiAgLy8gZGVsZXRlIG1hcFxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogbmV3TGF5ZXJzLFxuICAgIHNwbGl0TWFwczogW11cbiAgfTtcbn1cblxuLyoqXG4gKiBUcmlnZ2VyIGZpbGUgbG9hZGluZyBkaXNwYXRjaCBgYWRkRGF0YVRvTWFwYCBpZiBzdWNjZWVkLCBvciBgbG9hZEZpbGVzRXJyYCBpZiBmYWlsZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsb2FkRmlsZXNVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxvYWRGaWxlc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2ZpbGVzLCBvbkZpbmlzaCA9IGxvYWRGaWxlc1N1Y2Nlc3N9ID0gYWN0aW9uO1xuICBpZiAoIWZpbGVzLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGNvbXBhbmlvbkZpbGVzID0gQXJyYXkuZnJvbShmaWxlcyk7XG4gIGNvbnN0IGZpbGVzVG9Mb2FkID0gZ2V0RmlsZXNUb1BhcnNlKGNvbXBhbmlvbkZpbGVzKTtcbiAgaWYgKCFmaWxlc1RvTG9hZC5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBmaWxlTG9hZGluZ1Byb2dyZXNzID0gZmlsZXNUb0xvYWQucmVkdWNlKFxuICAgIChhY2N1LCBmLCBpKSA9PiBtZXJnZV8oaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MoZiwgaSkpKGFjY3UpLFxuICAgIHt9XG4gICk7XG5cbiAgY29uc3QgZmlsZUxvYWRpbmcgPSB7XG4gICAgZmlsZUNhY2hlOiBbXSxcbiAgICBmaWxlc1RvTG9hZCxcbiAgICBjb21wYW5pb25GaWxlcyxcbiAgICBvbkZpbmlzaFxuICB9O1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IG1lcmdlXyh7ZmlsZUxvYWRpbmdQcm9ncmVzcywgZmlsZUxvYWRpbmd9KShzdGF0ZSk7XG5cbiAgcmV0dXJuIGxvYWROZXh0RmlsZVVwZGF0ZXIobmV4dFN0YXRlKTtcbn07XG5cbi8qKlxuICogU3VjZXNzZnVsbHkgbG9hZGVkIG9uZSBmaWxlLCBtb3ZlIG9uIHRvIHRoZSBuZXh0IG9uZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRGaWxlU3RlcFN1Y2Nlc3NVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxvYWRGaWxlU3RlcFN1Y2Nlc3NBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFzdGF0ZS5maWxlTG9hZGluZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7ZmlsZU5hbWUsIGZpbGVDYWNoZX0gPSBhY3Rpb247XG4gIGNvbnN0IHtmaWxlc1RvTG9hZCwgb25GaW5pc2h9ID0gc3RhdGUuZmlsZUxvYWRpbmc7XG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZSxcbiAgICBwcm9ncmVzczoge3BlcmNlbnQ6IDEsIG1lc3NhZ2U6ICdEb25lJ31cbiAgfSk7XG5cbiAgLy8gc2F2ZSBwcm9jZXNzZWQgZmlsZSB0byBmaWxlQ2FjaGVcbiAgY29uc3Qgc3RhdGVXaXRoQ2FjaGUgPSBwaWNrXygnZmlsZUxvYWRpbmcnKShtZXJnZV8oe2ZpbGVDYWNoZX0pKShzdGF0ZVdpdGhQcm9ncmVzcyk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHN0YXRlV2l0aENhY2hlLFxuICAgIERFTEFZX1RBU0soMjAwKS5tYXAoZmlsZXNUb0xvYWQubGVuZ3RoID8gbG9hZE5leHRGaWxlIDogKCkgPT4gb25GaW5pc2goZmlsZUNhY2hlKSlcbiAgKTtcbn1cblxuLy8gd2l0aFRhc2s8VD4oc3RhdGU6IFQsIHRhc2s6IGFueSk6IFRcblxuLyoqXG4gKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWROZXh0RmlsZVVwZGF0ZXIoc3RhdGU6IFZpc1N0YXRlKTogVmlzU3RhdGUge1xuICBpZiAoIXN0YXRlLmZpbGVMb2FkaW5nKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHtmaWxlc1RvTG9hZH0gPSBzdGF0ZS5maWxlTG9hZGluZztcbiAgY29uc3QgW2ZpbGUsIC4uLnJlbWFpbmluZ0ZpbGVzVG9Mb2FkXSA9IGZpbGVzVG9Mb2FkO1xuXG4gIC8vIHNhdmUgZmlsZXNUb0xvYWQgdG8gc3RhdGVcbiAgY29uc3QgbmV4dFN0YXRlID0gcGlja18oJ2ZpbGVMb2FkaW5nJykobWVyZ2VfKHtmaWxlc1RvTG9hZDogcmVtYWluaW5nRmlsZXNUb0xvYWR9KSkoc3RhdGUpO1xuXG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIobmV4dFN0YXRlLCB7XG4gICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcbiAgICBwcm9ncmVzczoge3BlcmNlbnQ6IDAsIG1lc3NhZ2U6ICdsb2FkaW5nLi4uJ31cbiAgfSk7XG5cbiAgY29uc3Qge2xvYWRlcnMsIGxvYWRPcHRpb25zfSA9IHN0YXRlO1xuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGVXaXRoUHJvZ3Jlc3MsXG4gICAgbWFrZUxvYWRGaWxlVGFzayhcbiAgICAgIGZpbGUsXG4gICAgICBuZXh0U3RhdGUuZmlsZUxvYWRpbmcgJiYgbmV4dFN0YXRlLmZpbGVMb2FkaW5nLmZpbGVDYWNoZSxcbiAgICAgIGxvYWRlcnMsXG4gICAgICBsb2FkT3B0aW9ucyxcbiAgICAgIG5leHRTdGF0ZS5maWxlTG9hZGluZyA/IG5leHRTdGF0ZS5maWxlTG9hZGluZy5jb21wYW5pb25GaWxlcyA6IHVuZGVmaW5lZFxuICAgIClcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VMb2FkRmlsZVRhc2soXG4gIGZpbGUsXG4gIGZpbGVDYWNoZSxcbiAgbG9hZGVyczogTG9hZGVyW10gPSBbXSxcbiAgbG9hZE9wdGlvbnMgPSB7fSxcbiAgY29tcGFuaW9uRmlsZXM/OiBGaWxlW11cbikge1xuICByZXR1cm4gTE9BRF9GSUxFX1RBU0soe2ZpbGUsIGZpbGVDYWNoZSwgbG9hZGVycywgbG9hZE9wdGlvbnMsIGNvbXBhbmlvbkZpbGVzfSkuYmltYXAoXG4gICAgLy8gcHJldHRpZXIgaWdub3JlXG4gICAgLy8gc3VjY2Vzc1xuICAgIGdlbiA9PlxuICAgICAgbmV4dEZpbGVCYXRjaCh7XG4gICAgICAgIGdlbixcbiAgICAgICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgb25GaW5pc2g6IHJlc3VsdCA9PlxuICAgICAgICAgIHByb2Nlc3NGaWxlQ29udGVudCh7XG4gICAgICAgICAgICBjb250ZW50OiByZXN1bHQsXG4gICAgICAgICAgICBmaWxlQ2FjaGVcbiAgICAgICAgICB9KVxuICAgICAgfSksXG5cbiAgICAvLyBlcnJvclxuICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoZmlsZS5uYW1lLCBlcnIpXG4gICk7XG59XG5cbi8qKlxuICpcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlByb2Nlc3NGaWxlQ29udGVudFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2NvbnRlbnQsIGZpbGVDYWNoZX0gPSBhY3Rpb24ucGF5bG9hZDtcblxuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWU6IGNvbnRlbnQuZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtwZXJjZW50OiAxLCBtZXNzYWdlOiAncHJvY2Vzc2luZy4uLid9XG4gIH0pO1xuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBzdGF0ZVdpdGhQcm9ncmVzcyxcbiAgICBQUk9DRVNTX0ZJTEVfREFUQSh7Y29udGVudCwgZmlsZUNhY2hlfSkuYmltYXAoXG4gICAgICByZXN1bHQgPT4gbG9hZEZpbGVTdGVwU3VjY2Vzcyh7ZmlsZU5hbWU6IGNvbnRlbnQuZmlsZU5hbWUsIGZpbGVDYWNoZTogcmVzdWx0fSksXG4gICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGNvbnRlbnQuZmlsZU5hbWUsIGVycilcbiAgICApXG4gICk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVByb2dyZXNzKHByZXZQcm9ncmVzcyA9IHt9LCBwcm9ncmVzcykge1xuICAvLyBUaGlzIGhhcHBlbnMgd2hlbiByZWNlaXZpbmcgcXVlcnkgbWV0YWRhdGEgb3Igb3RoZXIgY2FzZXMgd2UgZG9uJ3RcbiAgLy8gaGF2ZSBhbiB1cGRhdGUgZm9yIHRoZSB1c2VyLlxuICBpZiAoIXByb2dyZXNzIHx8ICFwcm9ncmVzcy5wZXJjZW50KSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwZXJjZW50OiBwcm9ncmVzcy5wZXJjZW50XG4gIH07XG59XG5cbi8qKlxuICogZ2V0cyBjYWxsZWQgd2l0aCBwYXlsb2FkID0gQXN5bmNHZW5lcmF0b3I8Pz8/PlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG5leHRGaWxlQmF0Y2hVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtcbiAgICBwYXlsb2FkOiB7Z2VuLCBmaWxlTmFtZSwgcHJvZ3Jlc3MsIGFjY3VtdWxhdGVkLCBvbkZpbmlzaH1cbiAgfTogVmlzU3RhdGVBY3Rpb25zLk5leHRGaWxlQmF0Y2hVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZSxcbiAgICBwcm9ncmVzczogcGFyc2VQcm9ncmVzcyhzdGF0ZS5maWxlTG9hZGluZ1Byb2dyZXNzW2ZpbGVOYW1lXSwgcHJvZ3Jlc3MpXG4gIH0pO1xuXG4gIHJldHVybiB3aXRoVGFzayhzdGF0ZVdpdGhQcm9ncmVzcywgW1xuICAgIC4uLihnZXRBcHBsaWNhdGlvbkNvbmZpZygpLnVzZUFycm93UHJvZ3Jlc3NpdmVMb2FkaW5nICYmXG4gICAgZmlsZU5hbWUuZW5kc1dpdGgoJ2Fycm93JykgJiZcbiAgICBhY2N1bXVsYXRlZD8uZGF0YT8ubGVuZ3RoID4gMFxuICAgICAgPyBbXG4gICAgICAgICAgLy8gU2tpcCBjb21wYWN0aW9uIHdoaWxlIGJhdGNoZXMgYXJlIHN0aWxsIGFycml2aW5nLiBUaGUgY29tcGxldGVkXG4gICAgICAgICAgLy8gZmlsZSBpcyBjb21wYWN0ZWQgb25jZSBpbiBwcm9jZXNzRmlsZUNvbnRlbnQuXG4gICAgICAgICAgUFJPQ0VTU19GSUxFX0RBVEEoe1xuICAgICAgICAgICAgY29udGVudDogey4uLmFjY3VtdWxhdGVkLCBza2lwQXJyb3dDb21wYWN0OiB0cnVlfSxcbiAgICAgICAgICAgIGZpbGVDYWNoZTogW11cbiAgICAgICAgICB9KS5iaW1hcChcbiAgICAgICAgICAgIHJlc3VsdCA9PiBsb2FkRmlsZXNTdWNjZXNzKHJlc3VsdCksXG4gICAgICAgICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGVOYW1lLCBlcnIpXG4gICAgICAgICAgKVxuICAgICAgICBdXG4gICAgICA6IFtdKSxcbiAgICBVTldSQVBfVEFTSyhnZW4ubmV4dCgpKS5iaW1hcChcbiAgICAgICh7dmFsdWUsIGRvbmV9KSA9PiB7XG4gICAgICAgIHJldHVybiBkb25lXG4gICAgICAgICAgPyBvbkZpbmlzaChhY2N1bXVsYXRlZClcbiAgICAgICAgICA6IG5leHRGaWxlQmF0Y2goe1xuICAgICAgICAgICAgICBnZW4sXG4gICAgICAgICAgICAgIGZpbGVOYW1lLFxuICAgICAgICAgICAgICBwcm9ncmVzczogdmFsdWUucHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIGFjY3VtdWxhdGVkOiB2YWx1ZSxcbiAgICAgICAgICAgICAgb25GaW5pc2hcbiAgICAgICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGVyciA9PiBsb2FkRmlsZXNFcnIoZmlsZU5hbWUsIGVycilcbiAgICApXG4gIF0pO1xufTtcblxuLyoqXG4gKiBUcmlnZ2VyIGxvYWRpbmcgZmlsZSBlcnJvclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc0VyclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2Vycm9yLCBmaWxlTmFtZX06IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZXNFcnJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIC8vIHVwZGF0ZSB1aSB3aXRoIGVycm9yIG1lc3NhZ2VcbiAgQ29uc29sZS53YXJuKGVycm9yKTtcbiAgaWYgKCFzdGF0ZS5maWxlTG9hZGluZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7ZmlsZXNUb0xvYWQsIG9uRmluaXNoLCBmaWxlQ2FjaGV9ID0gc3RhdGUuZmlsZUxvYWRpbmc7XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZSxcbiAgICBwcm9ncmVzczoge2Vycm9yfVxuICB9KTtcblxuICAvLyBraWNrIG9mZiBuZXh0IGZpbGUgb3IgZmluaXNoXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBuZXh0U3RhdGUsXG4gICAgREVMQVlfVEFTSygyMDApLm1hcChmaWxlc1RvTG9hZC5sZW5ndGggPyBsb2FkTmV4dEZpbGUgOiAoKSA9PiBvbkZpbmlzaChmaWxlQ2FjaGUpKVxuICApO1xufTtcblxuLyoqXG4gKiBXaGVuIHNlbGVjdCBkYXRhc2V0IGZvciBleHBvcnQsIGFwcGx5IGNwdSBmaWx0ZXIgdG8gc2VsZWN0ZWQgZGF0YXNldFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFwcGx5Q1BVRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkfTogVmlzU3RhdGVBY3Rpb25zLkFwcGx5Q1BVRmlsdGVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyBhcHBseSBjcHVGaWx0ZXJcbiAgY29uc3QgZGF0YUlkcyA9IHRvQXJyYXkoZGF0YUlkKTtcblxuICByZXR1cm4gZGF0YUlkcy5yZWR1Y2UoKGFjY3UsIGlkKSA9PiBmaWx0ZXJEYXRhc2V0Q1BVKGFjY3UsIGlkKSwgc3RhdGUpO1xufTtcblxuLyoqXG4gKiBVc2VyIGlucHV0IHRvIHVwZGF0ZSB0aGUgaW5mbyBvZiB0aGUgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0TWFwSW5mb1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0TWFwSW5mb1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBtYXBJbmZvOiB7XG4gICAgLi4uc3RhdGUubWFwSW5mbyxcbiAgICAuLi5hY3Rpb24uaW5mb1xuICB9XG59KTtcbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIHVwZGF0ZSBBbGwgbGF5ZXIgZG9tYWluIGFuZCBsYXllciBkYXRhIG9mIHN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGREZWZhdWx0TGF5ZXJzKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGRhdGFzZXRzOiBEYXRhc2V0c1xuKToge3N0YXRlOiBWaXNTdGF0ZTsgbmV3TGF5ZXJzOiBMYXllcltdfSB7XG4gIGNvbnN0IGVtcHR5OiBMYXllcltdID0gW107XG4gIGNvbnN0IGRlZmF1bHRMYXllcnMgPSBPYmplY3QudmFsdWVzKGRhdGFzZXRzKS5yZWR1Y2UoKGFjY3U6IExheWVyW10sIGRhdGFzZXQpID0+IHtcbiAgICBjb25zdCBmb3VuZExheWVycyA9IGZpbmREZWZhdWx0TGF5ZXIoZGF0YXNldCwgc3RhdGUubGF5ZXJDbGFzc2VzKTtcbiAgICByZXR1cm4gZm91bmRMYXllcnMgJiYgZm91bmRMYXllcnMubGVuZ3RoID8gYWNjdS5jb25jYXQoZm91bmRMYXllcnMpIDogYWNjdTtcbiAgfSwgZW1wdHkpO1xuXG4gIHJldHVybiB7XG4gICAgc3RhdGU6IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbGF5ZXJzOiBbLi4uc3RhdGUubGF5ZXJzLCAuLi5kZWZhdWx0TGF5ZXJzXSxcbiAgICAgIGxheWVyT3JkZXI6IFtcbiAgICAgICAgLy8gcHV0IG5ldyBsYXllcnMgb24gdG9wIG9mIG9sZCBvbmVzIGluIHJldmVyc2VcbiAgICAgICAgLi4uZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMoZGVmYXVsdExheWVycyksXG4gICAgICAgIC4uLnN0YXRlLmxheWVyT3JkZXJcbiAgICAgIF1cbiAgICB9LFxuICAgIG5ld0xheWVyczogZGVmYXVsdExheWVyc1xuICB9O1xufVxuXG4vKipcbiAqIGhlbHBlciBmdW5jdGlvbiB0byBmaW5kIGRlZmF1bHQgdG9vbHRpcHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFzZXRcbiAqIEByZXR1cm5zIHtPYmplY3R9IG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRGVmYXVsdFRvb2x0aXBzKHN0YXRlLCBkYXRhc2V0KSB7XG4gIGNvbnN0IHRvb2x0aXBGaWVsZHMgPSBmaW5kRmllbGRzVG9TaG93KHtcbiAgICAuLi5kYXRhc2V0LFxuICAgIG1heERlZmF1bHRUb29sdGlwczogc3RhdGUubWF4RGVmYXVsdFRvb2x0aXBzXG4gIH0pO1xuICBjb25zdCBtZXJnZWQgPSB7XG4gICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuZmllbGRzVG9TaG93LFxuICAgIC4uLnRvb2x0aXBGaWVsZHNcbiAgfTtcblxuICByZXR1cm4gc2V0KFsnaW50ZXJhY3Rpb25Db25maWcnLCAndG9vbHRpcCcsICdjb25maWcnLCAnZmllbGRzVG9TaG93J10sIG1lcmdlZCwgc3RhdGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MoZmlsZSwgaW5kZXgpIHtcbiAgY29uc3QgZmlsZU5hbWUgPSBmaWxlLm5hbWUgfHwgYFVudGl0bGVkIEZpbGUgJHtpbmRleH1gO1xuICByZXR1cm4ge1xuICAgIFtmaWxlTmFtZV06IHtcbiAgICAgIC8vIHBlcmNlbnQgb2YgY3VycmVudCBmaWxlXG4gICAgICBwZXJjZW50OiAwLFxuICAgICAgbWVzc2FnZTogJycsXG4gICAgICBmaWxlTmFtZSxcbiAgICAgIGVycm9yOiBudWxsXG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtmaWxlTmFtZSwgcHJvZ3Jlc3N9KSB7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgcmV0dXJuIHBpY2tfKCdmaWxlTG9hZGluZ1Byb2dyZXNzJykocGlja18oZmlsZU5hbWUpKG1lcmdlXyhwcm9ncmVzcykpKShzdGF0ZSk7XG59XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byB1cGRhdGUgbGF5ZXIgZG9tYWlucyBmb3IgYW4gYXJyYXkgb2YgZGF0YXNldHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YTxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgZGF0YUlkOiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgdXBkYXRlZEZpbHRlcj86IEZpbHRlclxuKTogUyB7XG4gIGNvbnN0IGRhdGFJZHMgPSB0eXBlb2YgZGF0YUlkID09PSAnc3RyaW5nJyA/IFtkYXRhSWRdIDogZGF0YUlkO1xuICBjb25zdCBuZXdMYXllcnM6IExheWVyW10gPSBbXTtcbiAgY29uc3QgbmV3TGF5ZXJEYXRhOiBhbnlbXSA9IFtdO1xuXG4gIHN0YXRlLmxheWVycy5mb3JFYWNoKChvbGRMYXllciwgaSkgPT4ge1xuICAgIGlmIChvbGRMYXllci5jb25maWcuZGF0YUlkICYmIGRhdGFJZHMuaW5jbHVkZXMob2xkTGF5ZXIuY29uZmlnLmRhdGFJZCkpIHtcbiAgICAgIC8vIE5vIG5lZWQgdG8gcmVjYWxjdWxhdGUgbGF5ZXIgZG9tYWluIGlmIGZpbHRlciBoYXMgZml4ZWQgZG9tYWluXG4gICAgICBjb25zdCBuZXdMYXllciA9XG4gICAgICAgIHVwZGF0ZWRGaWx0ZXIgJiYgdXBkYXRlZEZpbHRlci5maXhlZERvbWFpblxuICAgICAgICAgID8gb2xkTGF5ZXJcbiAgICAgICAgICA6IG9sZExheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzLCB1cGRhdGVkRmlsdGVyKTtcblxuICAgICAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgc3RhdGUubGF5ZXJEYXRhW2ldKTtcblxuICAgICAgbmV3TGF5ZXJzLnB1c2gobGF5ZXIpO1xuICAgICAgbmV3TGF5ZXJEYXRhLnB1c2gobGF5ZXJEYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3TGF5ZXJzLnB1c2gob2xkTGF5ZXIpO1xuICAgICAgbmV3TGF5ZXJEYXRhLnB1c2goc3RhdGUubGF5ZXJEYXRhW2ldKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogbmV3TGF5ZXJzLFxuICAgIGxheWVyRGF0YTogbmV3TGF5ZXJEYXRhXG4gIH07XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlQW5pbWF0aW9uRG9tYWluPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMpOiBTIHtcbiAgLy8gbWVyZ2UgYWxsIGFuaW1hdGFibGUgbGF5ZXIgZG9tYWluIGFuZCB1cGRhdGUgZ2xvYmFsIGNvbmZpZ1xuICBjb25zdCBhbmltYXRhYmxlTGF5ZXJzID0gZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMoc3RhdGUubGF5ZXJzKTtcblxuICBpZiAoIWFuaW1hdGFibGVMYXllcnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgZG9tYWluOiBudWxsLFxuICAgICAgICBpc0FuaW1hdGluZzogZmFsc2UsXG4gICAgICAgIHRpbWVTdGVwczogbnVsbCxcbiAgICAgICAgZGVmYXVsdFRpbWVGb3JtYXQ6IG51bGxcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgY29uc3QgbGF5ZXJEb21haW5zID0gYW5pbWF0YWJsZUxheWVycy5tYXAobCA9PiBsLmNvbmZpZy5hbmltYXRpb24uZG9tYWluIHx8IFtdKTtcbiAgLy8gQHRzLWlnbm9yZVxuICBjb25zdCBtZXJnZWREb21haW4gPSBtZXJnZVRpbWVEb21haW5zKGxheWVyRG9tYWlucyk7XG4gIGNvbnN0IGRlZmF1bHRUaW1lRm9ybWF0ID0gZ2V0VGltZVdpZGdldFRpdGxlRm9ybWF0dGVyKG1lcmdlZERvbWFpbik7XG5cbiAgLy8gbWVyZ2UgdGltZVN0ZXBzXG4gIGxldCBtZXJnZWRUaW1lU3RlcHM6IG51bWJlcltdIHwgbnVsbCA9IHVuaXE8bnVtYmVyPihcbiAgICBhbmltYXRhYmxlTGF5ZXJzLnJlZHVjZSgoYWNjdSwgbGF5ZXIpID0+IHtcbiAgICAgIGFjY3UucHVzaCguLi4obGF5ZXIuY29uZmlnLmFuaW1hdGlvbi50aW1lU3RlcHMgfHwgW10pKTtcbiAgICAgIHJldHVybiBhY2N1O1xuICAgIH0sIFtdKVxuICApLnNvcnQoKTtcblxuICBtZXJnZWRUaW1lU3RlcHMgPSBtZXJnZWRUaW1lU3RlcHMubGVuZ3RoID8gbWVyZ2VkVGltZVN0ZXBzIDogbnVsbDtcblxuICAvLyBUT0RPOiBiZXR0ZXIgaGFuZGxpbmcgb2YgZHVyYXRpb24gY2FsY3VsYXRpb25cbiAgY29uc3QgZHVyYXRpb24gPSBtZXJnZWRUaW1lU3RlcHNcbiAgICA/IChCQVNFX1NQRUVEICogKDEwMDAgLyBGUFMpKSAvIG1lcmdlZFRpbWVTdGVwcy5sZW5ndGggLyAoc3RhdGUuYW5pbWF0aW9uQ29uZmlnLnNwZWVkIHx8IDEpXG4gICAgOiBudWxsO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIGRvbWFpbjogbWVyZ2VkRG9tYWluLFxuICAgICAgZGVmYXVsdFRpbWVGb3JtYXQsXG4gICAgICBkdXJhdGlvbixcbiAgICAgIHRpbWVTdGVwczogbWVyZ2VkVGltZVN0ZXBzXG4gICAgfVxuICB9O1xuXG4gIC8vIHJlc2V0IGN1cnJlbnRUaW1lIGJhc2VkIG9uIG5ldyBkb21haW5cbiAgY29uc3Qgc3luY2VkRmlsdGVyID0gc3RhdGUuZmlsdGVycz8uZmluZChmID0+IChmIGFzIFRpbWVSYW5nZUZpbHRlcikuc3luY2VkV2l0aExheWVyVGltZWxpbmUpIGFzXG4gICAgfCBUaW1lUmFuZ2VGaWx0ZXJcbiAgICB8IHVuZGVmaW5lZDtcblxuICAvLyBpZiBzeW5jZWQgZmlsdGVyIGV4aXN0IHdlZSBuZWVkIHRvIG1lcmdlIGFuaW1hdGlvbkNvbmZpZyBhbmQgZmlsdGVyIGRvbWFpbnNcbiAgLy8gYW5kIHZhbGlkYXRlIHRoZSBjdXJyZW50IHRpbWUgYWdhaW5zdCB0aGUgbmV3IG1lcmdlZCBkb21haW5cbiAgY29uc3QgbmV3QW5pbWF0aW9uRG9tYWluID0gc3luY2VkRmlsdGVyXG4gICAgPyBtZXJnZVRpbWVEb21haW5zKFttZXJnZWREb21haW4sIHN5bmNlZEZpbHRlci5kb21haW5dKVxuICAgIDogbWVyZ2VkRG9tYWluO1xuICBjb25zdCBjdXJyZW50VGltZSA9IGlzSW5SYW5nZShzdGF0ZS5hbmltYXRpb25Db25maWcuY3VycmVudFRpbWUsIG5ld0FuaW1hdGlvbkRvbWFpbilcbiAgICA/IHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZVxuICAgIDogbmV3QW5pbWF0aW9uRG9tYWluWzBdO1xuXG4gIGlmIChjdXJyZW50VGltZSAhPT0gc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmN1cnJlbnRUaW1lKSB7XG4gICAgLy8gaWYgY3VycmVudFRpbWUgY2hhbmdlZCwgbmVlZCB0byBjYWxsIGFuaW1hdGlvblRpbWVVcGRhdGVyIHRvIHJlIGNhbGwgZm9ybWF0TGF5ZXJEYXRhXG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV4dFN0YXRlLCB7dmFsdWU6IGN1cnJlbnRUaW1lfSk7XG4gIH1cblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG4vKipcbiAqIFVwZGF0ZSB0aGUgc3RhdHVzIG9mIHRoZSBlZGl0b3JcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFZGl0b3JNb2RlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7bW9kZX06IFZpc1N0YXRlQWN0aW9ucy5TZXRFZGl0b3JNb2RlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBza2V0Y2hlc0VuYWJsZWQgPSBnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmVuYWJsZURyYXdPbk1hcFNrZXRjaGVzO1xuICBpZiAoXG4gICAgIXNrZXRjaGVzRW5hYmxlZCAmJlxuICAgIChtb2RlID09PSBFRElUT1JfTU9ERVMuRFJBV19QT0lOVCB8fCBtb2RlID09PSBFRElUT1JfTU9ERVMuRFJBV19MSU5FU1RSSU5HKVxuICApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgbW9kZSxcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICAgIH1cbiAgfTtcbn07XG5cbi8vIGNvbnN0IGZlYXR1cmVUb0ZpbHRlclZhbHVlID0gKGZlYXR1cmUpID0+ICh7Li4uZmVhdHVyZSwgaWQ6IGZlYXR1cmUuaWR9KTtcbi8qKlxuICogVXBkYXRlIGVkaXRvciBmZWF0dXJlc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZlYXR1cmVzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZXMgPSBbXX06IFZpc1N0YXRlQWN0aW9ucy5TZXRGZWF0dXJlc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgbGFzdEZlYXR1cmUgPSBmZWF0dXJlcy5sZW5ndGggJiYgZmVhdHVyZXNbZmVhdHVyZXMubGVuZ3RoIC0gMV07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAvLyBvbmx5IHNhdmUgbm9uZSBmaWx0ZXIgZmVhdHVyZXMgdG8gZWRpdG9yXG4gICAgICBmZWF0dXJlczogZmVhdHVyZXMuZmlsdGVyKGYgPT4gIWdldEZpbHRlcklkSW5GZWF0dXJlKGYpKSxcbiAgICAgIG1vZGU6XG4gICAgICAgIGxhc3RGZWF0dXJlICYmIGxhc3RGZWF0dXJlLnByb3BlcnRpZXM/LmlzQ2xvc2VkXG4gICAgICAgICAgPyBsYXN0RmVhdHVyZS5wcm9wZXJ0aWVzPy5zaGFwZSA9PT0gJ1JlY3RhbmdsZSdcbiAgICAgICAgICAgID8gc3RhdGUuZWRpdG9yLm1vZGVcbiAgICAgICAgICAgIDogRURJVE9SX01PREVTLkVESVRcbiAgICAgICAgICA6IHN0YXRlLmVkaXRvci5tb2RlXG4gICAgfVxuICB9O1xuXG4gIC8vIFJldHJpZXZlIGV4aXN0aW5nIGZlYXR1cmVcbiAgY29uc3Qge3NlbGVjdGVkRmVhdHVyZX0gPSBzdGF0ZS5lZGl0b3I7XG5cbiAgLy8gSWYgbm8gZmVhdHVyZSBpcyBzZWxlY3RlZCB3ZSBjYW4gc2ltcGx5IHJldHVybiBzaW5jZSBubyBvcGVyYXRpb25zXG4gIGlmICghc2VsZWN0ZWRGZWF0dXJlKSB7XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG5cbiAgLy8gVE9ETzogY2hlY2sgaWYgdGhlIGZlYXR1cmUgaGFzIGNoYW5nZWRcbiAgY29uc3QgZmVhdHVyZSA9IGZlYXR1cmVzLmZpbmQoZiA9PiBmLmlkID09PSBzZWxlY3RlZEZlYXR1cmUuaWQpO1xuXG4gIC8vIGlmIGZlYXR1cmUgaXMgcGFydCBvZiBhIGZpbHRlclxuICBjb25zdCBmaWx0ZXJJZCA9IGZlYXR1cmUgJiYgZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSk7XG4gIGlmIChmaWx0ZXJJZCAmJiBmZWF0dXJlKSB7XG4gICAgLy8gYWRkIGJib3ggZm9yIHBvbHlnb24gZmlsdGVyIHRvIHNwZWVkIHVwIGZpbHRlcmluZ1xuICAgIGlmIChmZWF0dXJlLnByb3BlcnRpZXMpIGZlYXR1cmUucHJvcGVydGllcy5iYm94ID0gYmJveChmZWF0dXJlIGFzIHVua25vd24gYXMgQWxsR2VvSlNPTik7XG4gICAgY29uc3QgZmVhdHVyZVZhbHVlID0gZmVhdHVyZVRvRmlsdGVyVmFsdWUoZmVhdHVyZSwgZmlsdGVySWQpO1xuICAgIGNvbnN0IGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGZpbCA9PiBmaWwuaWQgPT09IGZpbHRlcklkKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIGlkeDogZmlsdGVySWR4LFxuICAgICAgcHJvcDogJ3ZhbHVlJyxcbiAgICAgIHZhbHVlOiBmZWF0dXJlVmFsdWVcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuZnVuY3Rpb24gZmluZEVkaXRvckZlYXR1cmUoc3RhdGU6IFZpc1N0YXRlLCBmZWF0dXJlPzogRmVhdHVyZSB8IG51bGwpOiBGZWF0dXJlIHwgbnVsbCB7XG4gIGlmICghZmVhdHVyZT8uaWQpIHtcbiAgICByZXR1cm4gZmVhdHVyZSB8fCBudWxsO1xuICB9XG4gIGlmIChzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlPy5pZCA9PT0gZmVhdHVyZS5pZCkge1xuICAgIHJldHVybiBzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlO1xuICB9XG4gIGNvbnN0IGZyb21FZGl0b3IgPSBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmluZChpdGVtID0+IGl0ZW0uaWQgPT09IGZlYXR1cmUuaWQpO1xuICBpZiAoZnJvbUVkaXRvcikge1xuICAgIHJldHVybiBmcm9tRWRpdG9yO1xuICB9XG4gIGNvbnN0IGZpbHRlcklkID0gZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSk7XG4gIGlmIChmaWx0ZXJJZCkge1xuICAgIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnMuZmluZChpdGVtID0+IGl0ZW0uaWQgPT09IGZpbHRlcklkKTtcbiAgICBpZiAoZmlsdGVyPy52YWx1ZSkge1xuICAgICAgcmV0dXJuIGZpbHRlci52YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZlYXR1cmU7XG59XG5cbi8qKlxuICogU2V0IHVzZXItZmFjaW5nIEdlb0pTT04gcHJvcGVydGllcyBvbiBhIHNrZXRjaCBvciBwb2x5Z29uLWZpbHRlciBmZWF0dXJlLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEVkaXRvckZlYXR1cmVQcm9wZXJ0aWVzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZSwgcHJvcGVydGllc306IFZpc1N0YXRlQWN0aW9ucy5TZXRFZGl0b3JGZWF0dXJlUHJvcGVydGllc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmVuYWJsZURyYXdPbk1hcFNrZXRjaGVzKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qgc291cmNlID0gZmluZEVkaXRvckZlYXR1cmUoc3RhdGUsIGZlYXR1cmUpO1xuICBpZiAoIXNvdXJjZT8uaWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXh0RmVhdHVyZSA9IG1lcmdlVXNlckZlYXR1cmVQcm9wZXJ0aWVzKHNvdXJjZSwgcHJvcGVydGllcyk7XG4gIGNvbnN0IGZpbHRlcklkID0gZ2V0RmlsdGVySWRJbkZlYXR1cmUobmV4dEZlYXR1cmUpO1xuICBjb25zdCBuZXh0RWRpdG9yID0ge1xuICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICBmZWF0dXJlczogZmlsdGVySWRcbiAgICAgID8gc3RhdGUuZWRpdG9yLmZlYXR1cmVzXG4gICAgICA6IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5tYXAoaXRlbSA9PiAoaXRlbS5pZCA9PT0gbmV4dEZlYXR1cmUuaWQgPyBuZXh0RmVhdHVyZSA6IGl0ZW0pKSxcbiAgICBzZWxlY3RlZEZlYXR1cmU6XG4gICAgICBzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlPy5pZCA9PT0gbmV4dEZlYXR1cmUuaWRcbiAgICAgICAgPyBuZXh0RmVhdHVyZVxuICAgICAgICA6IHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmVcbiAgfTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiBuZXh0RWRpdG9yXG4gIH07XG5cbiAgaWYgKCFmaWx0ZXJJZCkge1xuICAgIHJldHVybiBuZXh0U3RhdGU7XG4gIH1cblxuICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlcklkeCA8IDApIHtcbiAgICByZXR1cm4gbmV4dFN0YXRlO1xuICB9XG5cbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV4dFN0YXRlLCB7XG4gICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgcHJvcDogJ3ZhbHVlJyxcbiAgICB2YWx1ZTogZmVhdHVyZVRvRmlsdGVyVmFsdWUobmV4dEZlYXR1cmUsIGZpbHRlcklkKVxuICB9KTtcbn1cblxuLyoqXG4gKiBTZXQgdGhlIGN1cnJlbnQgc2VsZWN0ZWQgZmVhdHVyZVxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3Qgc2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZSwgc2VsZWN0aW9uQ29udGV4dH06IFZpc1N0YXRlQWN0aW9ucy5TZXRTZWxlY3RlZEZlYXR1cmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIC8vIGFkZCBiYm94IGZvciBwb2x5Z29uIGZpbHRlciB0byBzcGVlZCB1cCBmaWx0ZXJpbmdcbiAgbGV0IHNlbGVjdGVkRmVhdHVyZSA9IGZlYXR1cmU7XG4gIGlmIChmZWF0dXJlPy5wcm9wZXJ0aWVzKSB7XG4gICAgc2VsZWN0ZWRGZWF0dXJlID0ge1xuICAgICAgLi4uZmVhdHVyZSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgLi4uZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICBiYm94OiBiYm94KGZlYXR1cmUgYXMgdW5rbm93biBhcyBBbGxHZW9KU09OKVxuICAgICAgfVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIHNlbGVjdGVkRmVhdHVyZSxcbiAgICAgIHNlbGVjdGlvbkNvbnRleHRcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIERlbGV0ZSBleGlzdGluZyBmZWF0dXJlIGZyb20gZmlsdGVyc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGV0ZUZlYXR1cmVVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtmZWF0dXJlfTogVmlzU3RhdGVBY3Rpb25zLkRlbGV0ZUZlYXR1cmVVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghZmVhdHVyZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gICAgfVxuICB9O1xuXG4gIGlmIChnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKSkge1xuICAgIGNvbnN0IGZpbHRlcklkeCA9IG5ld1N0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSkpO1xuXG4gICAgcmV0dXJuIGZpbHRlcklkeCA+IC0xID8gcmVtb3ZlRmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge2lkeDogZmlsdGVySWR4fSkgOiBuZXdTdGF0ZTtcbiAgfVxuXG4gIC8vIG1vZGlmeSBlZGl0b3Igb2JqZWN0XG4gIGNvbnN0IG5ld0VkaXRvciA9IHtcbiAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgZmVhdHVyZXM6IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5maWx0ZXIoZiA9PiBmLmlkICE9PSBmZWF0dXJlLmlkKSxcbiAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjogbmV3RWRpdG9yXG4gIH07XG59XG5cbi8qKlxuICogVG9nZ2xlIGZlYXR1cmUgYXMgbGF5ZXIgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0UG9seWdvbkZpbHRlckxheWVyVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBwYXlsb2FkOiBWaXNTdGF0ZUFjdGlvbnMuU2V0UG9seWdvbkZpbHRlckxheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7bGF5ZXIsIGZlYXR1cmV9ID0gcGF5bG9hZDtcbiAgY29uc3QgZmlsdGVySWQgPSBnZXRGaWx0ZXJJZEluRmVhdHVyZShmZWF0dXJlKTtcblxuICAvLyBsZXQgbmV3RmlsdGVyID0gbnVsbDtcbiAgbGV0IGZpbHRlcklkeDtcbiAgbGV0IG5ld0xheWVySWQgPSBbbGF5ZXIuaWRdO1xuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgLy8gSWYgcG9seWdvbiBmaWx0ZXIgYWxyZWFkeSBleGlzdHMsIHdlIG5lZWQgdG8gZmluZCBvdXQgaWYgdGhlIGN1cnJlbnQgbGF5ZXIgaXMgYWxyZWFkeSBpbmNsdWRlZFxuICBpZiAoZmlsdGVySWQpIHtcbiAgICBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcblxuICAgIGlmICghc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdKSB7XG4gICAgICAvLyB3aGF0IGlmIGZpbHRlciBkb2Vzbid0IGV4aXN0Py4uLiBub3QgcG9zc2libGUuXG4gICAgICAvLyBiZWNhdXNlIGZlYXR1cmVzIGluIHRoZSBlZGl0b3IgaXMgcGFzc2VkIGluIGZyb20gZmlsdGVycyBhbmQgZWRpdG9ycy5cbiAgICAgIC8vIGJ1dCB3ZSB3aWxsIG1vdmUgdGhpcyBmZWF0dXJlIGJhY2sgdG8gZWRpdG9yIGp1c3QgaW4gY2FzZVxuICAgICAgY29uc3Qgbm9uZUZpbHRlckZlYXR1cmUgPSB7XG4gICAgICAgIC4uLmZlYXR1cmUsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAuLi5mZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgICAgICAgZmlsdGVySWQ6IG51bGxcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGVkaXRvcjoge1xuICAgICAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgICAgICBmZWF0dXJlczogWy4uLnN0YXRlLmVkaXRvci5mZWF0dXJlcywgbm9uZUZpbHRlckZlYXR1cmVdLFxuICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZTogbm9uZUZpbHRlckZlYXR1cmVcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdO1xuICAgIGNvbnN0IHtsYXllcklkID0gW119ID0gZmlsdGVyO1xuICAgIGNvbnN0IGlzTGF5ZXJJbmNsdWRlZCA9IGxheWVySWQuaW5jbHVkZXMobGF5ZXIuaWQpO1xuXG4gICAgbmV3TGF5ZXJJZCA9IGlzTGF5ZXJJbmNsdWRlZFxuICAgICAgPyAvLyBpZiBsYXllciBpcyBpbmNsdWRlZCwgcmVtb3ZlIGl0XG4gICAgICAgIGxheWVySWQuZmlsdGVyKGwgPT4gbCAhPT0gbGF5ZXIuaWQpXG4gICAgICA6IFsuLi5sYXllcklkLCBsYXllci5pZF07XG5cbiAgICAvLyBMYXN0IGxheWVyIHJlbW92ZWQ6IHR1cm4gdGhlIGZpbHRlciBwb2x5Z29uIGJhY2sgaW50byBhIHNrZXRjaFxuICAgIGlmICghbmV3TGF5ZXJJZC5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHNrZXRjaEZlYXR1cmUgPSB0b1NrZXRjaEZlYXR1cmUoZmVhdHVyZSk7XG4gICAgICBjb25zdCBzdGF0ZVdpdGhvdXRGaWx0ZXIgPSByZW1vdmVGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWR4OiBmaWx0ZXJJZHh9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlV2l0aG91dEZpbHRlcixcbiAgICAgICAgZWRpdG9yOiB7XG4gICAgICAgICAgLi4uc3RhdGVXaXRob3V0RmlsdGVyLmVkaXRvcixcbiAgICAgICAgICBmZWF0dXJlczogWy4uLnN0YXRlV2l0aG91dEZpbHRlci5lZGl0b3IuZmVhdHVyZXMsIHNrZXRjaEZlYXR1cmVdLFxuICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZTogc2tldGNoRmVhdHVyZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBpZiB3ZSBoYXZlbid0IGNyZWF0ZSB0aGUgcG9seWdvbiBmaWx0ZXIsIGNyZWF0ZSBpdFxuICAgIGNvbnN0IG5ld0ZpbHRlciA9IGdlbmVyYXRlUG9seWdvbkZpbHRlcihbXSwgZmVhdHVyZSk7XG4gICAgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5sZW5ndGg7XG5cbiAgICAvLyBhZGQgZmVhdHVyZSwgcmVtb3ZlIGZlYXR1cmUgZnJvbSBlaWR0b3JcbiAgICBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZmlsdGVyczogWy4uLnN0YXRlLmZpbHRlcnMsIG5ld0ZpbHRlcl0sXG4gICAgICBlZGl0b3I6IHtcbiAgICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgICBmZWF0dXJlczogc3RhdGUuZWRpdG9yLmZlYXR1cmVzLmZpbHRlcihmID0+IGYuaWQgIT09IGZlYXR1cmUuaWQpLFxuICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IG5ld0ZpbHRlci52YWx1ZVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICdsYXllcklkJyxcbiAgICB2YWx1ZTogbmV3TGF5ZXJJZFxuICB9KTtcbn1cblxuLyoqXG4gKiBBcHBseSBwb2x5Z29uIGZpbHRlciB0byBhbGwgdmlzaWJsZSBsYXllcnNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRQb2x5Z29uRmlsdGVyQWxsTGF5ZXJzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBwYXlsb2FkOiBWaXNTdGF0ZUFjdGlvbnMuU2V0UG9seWdvbkZpbHRlckFsbExheWVyc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2ZlYXR1cmV9ID0gcGF5bG9hZDtcblxuICBjb25zdCBuZXdGaWx0ZXIgPSBnZW5lcmF0ZVBvbHlnb25GaWx0ZXIoW10sIGZlYXR1cmUpO1xuICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmxlbmd0aDtcblxuICBjb25zdCBuZXdTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogWy4uLnN0YXRlLmZpbHRlcnMsIG5ld0ZpbHRlcl0sXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBmZWF0dXJlczogc3RhdGUuZWRpdG9yLmZlYXR1cmVzLmZpbHRlcihmID0+IGYuaWQgIT09IGZlYXR1cmUuaWQpLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBuZXdGaWx0ZXIudmFsdWUsXG4gICAgICBtb2RlOiBFRElUT1JfTU9ERVMuRURJVFxuICAgIH1cbiAgfTtcblxuICBjb25zdCB2aXNpYmxlTGF5ZXJJZHMgPSBnZXQocGF5bG9hZCwgJ3Zpc2libGVMYXllcklkcycpO1xuICBjb25zdCBhbGxMYXllcklkcyA9IEFycmF5LmlzQXJyYXkodmlzaWJsZUxheWVySWRzKVxuICAgID8gdmlzaWJsZUxheWVySWRzXG4gICAgOiBzdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuaXNWaXNpYmxlKS5tYXAobCA9PiBsLmlkKTtcblxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICdsYXllcklkJyxcbiAgICB2YWx1ZTogYWxsTGF5ZXJJZHNcbiAgfSk7XG59XG5cbi8qKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvcnRUYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgY29sdW1uLCBtb2RlfTogVmlzU3RhdGVBY3Rpb25zLlNvcnRUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgc29ydE1vZGUgPSBtb2RlO1xuICBpZiAoIXNvcnRNb2RlKSB7XG4gICAgY29uc3QgY3VycmVudE1vZGUgPSBnZXQoZGF0YXNldCwgWydzb3J0Q29sdW1uJywgY29sdW1uXSk7XG4gICAgLy8gQHRzLWlnbm9yZSAtIHNob3VsZCBiZSBmaXhhYmxlIGluIGEgVFMgZmlsZVxuICAgIHNvcnRNb2RlID0gY3VycmVudE1vZGVcbiAgICAgID8gT2JqZWN0LmtleXMoU09SVF9PUkRFUikuZmluZChtID0+IG0gIT09IGN1cnJlbnRNb2RlKVxuICAgICAgOiBTT1JUX09SREVSLkFTQ0VORElORztcbiAgfVxuXG4gIGNvbnN0IHNvcnRlZCA9IHNvcnREYXRhc2V0QnlDb2x1bW4oZGF0YXNldCwgY29sdW1uLCBzb3J0TW9kZSk7XG4gIHJldHVybiBzZXQoWydkYXRhc2V0cycsIGRhdGFJZF0sIHNvcnRlZCwgc3RhdGUpO1xufVxuXG4vKipcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwaW5UYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgY29sdW1ufTogVmlzU3RhdGVBY3Rpb25zLlBpblRhYmxlQ29sdW1uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5ld0RhdGFzZXQgPSBwaW5UYWJsZUNvbHVtbnMoZGF0YXNldCwgY29sdW1uKTtcblxuICByZXR1cm4gc2V0KFsnZGF0YXNldHMnLCBkYXRhSWRdLCBuZXdEYXRhc2V0LCBzdGF0ZSk7XG59XG5cbi8qKlxuICogQ29weSBjb2x1bW4gY29udGVudCBhcyBzdHJpbmdzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29weVRhYmxlQ29sdW1uVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBjb2x1bW59OiBWaXNTdGF0ZUFjdGlvbnMuQ29weVRhYmxlQ29sdW1uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGZpZWxkSWR4ID0gZGF0YXNldC5maWVsZHMuZmluZEluZGV4KGYgPT4gZi5uYW1lID09PSBjb2x1bW4pO1xuICBpZiAoZmllbGRJZHggPCAwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHt0eXBlfSA9IGRhdGFzZXQuZmllbGRzW2ZpZWxkSWR4XTtcbiAgY29uc3QgdGV4dCA9IGRhdGFzZXQuZGF0YUNvbnRhaW5lclxuICAgIC5tYXAocm93ID0+IHBhcnNlRmllbGRWYWx1ZShyb3cudmFsdWVBdChmaWVsZElkeCksIHR5cGUpLCB0cnVlKVxuICAgIC5qb2luKCdcXG4nKTtcblxuICBjb3B5KHRleHQpO1xuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBTZXQgZGlzcGxheSBmb3JtYXQgZnJvbSBjb2x1bW5zIGZyb20gdXNlciBzZWxlY3Rpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBmb3JtYXRzfTogVmlzU3RhdGVBY3Rpb25zLlNldENvbHVtbkRpc3BsYXlGb3JtYXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IG5ld0ZpZWxkcyA9IGRhdGFzZXQuZmllbGRzO1xuICBPYmplY3Qua2V5cyhmb3JtYXRzKS5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgY29uc3QgZmllbGRJZHggPSBkYXRhc2V0LmZpZWxkcy5maW5kSW5kZXgoZiA9PiBmLm5hbWUgPT09IGNvbHVtbik7XG4gICAgaWYgKGZpZWxkSWR4ID49IDApIHtcbiAgICAgIGNvbnN0IGRpc3BsYXlGb3JtYXQgPSBmb3JtYXRzW2NvbHVtbl07XG4gICAgICBjb25zdCBmaWVsZCA9IG5ld0ZpZWxkc1tmaWVsZElkeF07XG4gICAgICBuZXdGaWVsZHMgPSBzd2FwXyhtZXJnZV8oe2Rpc3BsYXlGb3JtYXR9KShmaWVsZCkgYXMge2lkOiBzdHJpbmd9KShcbiAgICAgICAgbmV3RmllbGRzIGFzIHtpZDogc3RyaW5nfVtdXG4gICAgICApIGFzIEZpZWxkW107XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBuZXdEYXRhc2V0ID0gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtmaWVsZHM6IG5ld0ZpZWxkcyBhcyBGaWVsZFtdfSk7XG4gIGxldCBuZXdTdGF0ZSA9IHBpY2tfKCdkYXRhc2V0cycpKG1lcmdlXyh7W2RhdGFJZF06IG5ld0RhdGFzZXR9KSkoc3RhdGUpO1xuXG4gIC8vIHVwZGF0ZSBjb2xvckZpZWxkIGRpc3BsYXlGb3JtYXRcbiAgbmV3U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdTdGF0ZS5sYXllcnMubWFwKGxheWVyID0+XG4gICAgICBsYXllci5jb25maWc/LmNvbG9yRmllbGQ/Lm5hbWUgJiYgbGF5ZXIuY29uZmlnLmNvbG9yRmllbGQubmFtZSBpbiBmb3JtYXRzXG4gICAgICAgID8gbGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICAgICAgY29sb3JGaWVsZDoge1xuICAgICAgICAgICAgICAuLi5sYXllci5jb25maWcuY29sb3JGaWVsZCxcbiAgICAgICAgICAgICAgZGlzcGxheUZvcm1hdDogZm9ybWF0c1tsYXllci5jb25maWcuY29sb3JGaWVsZC5uYW1lXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIDogbGF5ZXJcbiAgICApXG4gIH07XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG50eXBlIExvYWRDb2x1bW5TdGF0c1Rhc2tQYXlsb2FkID0ge1xuICBkYXRhc2V0OiBWaXNTdGF0ZVsnZGF0YXNldHMnXVtzdHJpbmddO1xuICBmaWVsZDogRmllbGQ7XG59O1xuXG5mdW5jdGlvbiBnZXRNYXBwZWRWYWx1ZShmaWx0ZXJQcm9wcz86IEZpbHRlclByb3BzIHwgbnVsbCk6IHVua25vd25bXSB8IHVuZGVmaW5lZCB7XG4gIGlmIChmaWx0ZXJQcm9wcyAmJiAnbWFwcGVkVmFsdWUnIGluIGZpbHRlclByb3BzICYmIEFycmF5LmlzQXJyYXkoZmlsdGVyUHJvcHMubWFwcGVkVmFsdWUpKSB7XG4gICAgcmV0dXJuIGZpbHRlclByb3BzLm1hcHBlZFZhbHVlO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHlpZWxkRm9yUGFpbnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIDApO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVxdWVzdERhdGFzZXRDb2x1bW5TdGF0aXN0aWNzKHtkYXRhc2V0LCBmaWVsZH06IExvYWRDb2x1bW5TdGF0c1Rhc2tQYXlsb2FkKSB7XG4gIC8vIFlpZWxkIHNvIHRoZSBkYXRhIHRhYmxlIGFuZCBwZXItY29sdW1uIGxvYWRpbmcgc3Bpbm5lcnMgY2FuIHBhaW50IGZpcnN0LlxuICBhd2FpdCB5aWVsZEZvclBhaW50KCk7XG4gIGNvbnN0IGZpbHRlclByb3BzID0gZmllbGQuZmlsdGVyUHJvcHMgfHwgZGF0YXNldC5nZXRDb2x1bW5GaWx0ZXJQcm9wcyhmaWVsZC5uYW1lKTtcbiAgY29uc3QgbWFwcGVkVmFsdWUgPSBnZXRNYXBwZWRWYWx1ZShmaWx0ZXJQcm9wcyk7XG4gIGNvbnN0IHZhbHVlcyA9IG1hcHBlZFZhbHVlID8/IGNvbGxlY3RDb2x1bW5WYWx1ZXMoZGF0YXNldC5kYXRhQ29udGFpbmVyLCBmaWVsZC5maWVsZElkeCk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldENvbHVtblN0YXRpc3RpY3Moe1xuICAgIHZhbHVlcyxcbiAgICBmaWVsZFR5cGU6IGZpZWxkLnR5cGVcbiAgfSk7XG5cbiAgcmV0dXJuIHtyZXN1bHQsIGZpbHRlclByb3BzfTtcbn1cblxuY29uc3QgTE9BRF9DT0xVTU5fU1RBVFNfVEFTSyA9IFRhc2suZnJvbVByb21pc2UoXG4gIHJlcXVlc3REYXRhc2V0Q29sdW1uU3RhdGlzdGljcyxcbiAgJ0xPQURfQ09MVU1OX1NUQVRTX1RBU0snXG4pO1xuXG4vKipcbiAqIFN0YXJ0IGxvYWRpbmcgY29sdW1uIHN0YXRpc3RpY3MgZm9yIG9uZSBvciBtb3JlIGZpZWxkcy5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQ29sdW1uU3RhdHNVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGZpZWxkTmFtZX06IFZpc1N0YXRlQWN0aW9ucy5Mb2FkQ29sdW1uU3RhdHNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGZpZWxkTmFtZXNUb0xvYWQgPSB0b0FycmF5KGZpZWxkTmFtZSk7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBjb25zdCBmaWVsZHNUb0xvYWQgPSBkYXRhc2V0Py5maWVsZHMuZmlsdGVyKGYgPT4gZmllbGROYW1lc1RvTG9hZC5pbmNsdWRlcyhmLm5hbWUpKTtcbiAgaWYgKCFkYXRhc2V0IHx8ICFmaWVsZHNUb0xvYWQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmllbGRzID0gZGF0YXNldC5maWVsZHMubWFwKGZpZWxkID0+XG4gICAgZmllbGROYW1lc1RvTG9hZC5pbmNsdWRlcyhmaWVsZC5uYW1lKSA/IHsuLi5maWVsZCwgaXNMb2FkaW5nU3RhdHM6IHRydWV9IDogZmllbGRcbiAgKTtcbiAgY29uc3QgbmV3RGF0YXNldCA9IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7ZmllbGRzOiBuZXdGaWVsZHN9KTtcblxuICBjb25zdCB0YXNrcyA9IGZpZWxkc1RvTG9hZC5tYXAoZiA9PlxuICAgIExPQURfQ09MVU1OX1NUQVRTX1RBU0soe2RhdGFzZXQ6IG5ld0RhdGFzZXQsIGZpZWxkOiBmfSkuYmltYXAoXG4gICAgICAoe3Jlc3VsdCwgZmlsdGVyUHJvcHN9KSA9PiBsb2FkQ29sdW1uU3RhdHNTdWNjZXNzKG5ld0RhdGFzZXQuaWQsIGYubmFtZSwgcmVzdWx0LCBmaWx0ZXJQcm9wcyksXG4gICAgICAoZXJyb3I6IEVycm9yKSA9PiBsb2FkQ29sdW1uU3RhdHNFcnJvcihuZXdEYXRhc2V0LmlkLCBmLm5hbWUsIGVycm9yKVxuICAgIClcbiAgKTtcbiAgY29uc3QgbmV4dFN0YXRlID0gcGlja18oJ2RhdGFzZXRzJykobWVyZ2VfKHtbZGF0YUlkXTogbmV3RGF0YXNldH0pKShzdGF0ZSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKG5leHRTdGF0ZSwgdGFza3MpO1xufVxuXG4vKipcbiAqIFBlcnNpc3QgbG9hZGVkIGNvbHVtbiBzdGF0aXN0aWNzIG9uIHRoZSBmaWVsZC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQ29sdW1uU3RhdHNTdWNjZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7cmVzdWx0LCBmaWx0ZXJQcm9wcywgZGF0YUlkLCBmaWVsZE5hbWV9OiBWaXNTdGF0ZUFjdGlvbnMuTG9hZENvbHVtblN0YXRzU3VjY2Vzc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGNvbnN0IGZpZWxkID0gKGRhdGFzZXQ/LmZpZWxkcyB8fCBbXSkuZmluZChmID0+IGYubmFtZSA9PT0gZmllbGROYW1lKTtcbiAgaWYgKCFkYXRhc2V0IHx8ICFmaWVsZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZpbHRlclByb3BzID0ge1xuICAgIC4uLmZpbHRlclByb3BzLFxuICAgIGNvbHVtblN0YXRzOiByZXN1bHRcbiAgfTtcbiAgY29uc3QgbmV3RmllbGRzID0gZGF0YXNldC5maWVsZHMubWFwKGYgPT5cbiAgICBmLm5hbWUgPT09IGZpZWxkTmFtZSA/IHsuLi5mLCBmaWx0ZXJQcm9wczogbmV3RmlsdGVyUHJvcHMsIGlzTG9hZGluZ1N0YXRzOiBmYWxzZX0gOiBmXG4gICk7XG4gIGNvbnN0IG5ld0RhdGFzZXQgPSBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge2ZpZWxkczogbmV3RmllbGRzfSk7XG4gIHJldHVybiBwaWNrXygnZGF0YXNldHMnKShtZXJnZV8oe1tkYXRhSWRdOiBuZXdEYXRhc2V0fSkpKHN0YXRlKTtcbn1cblxuLyoqXG4gKiBDbGVhciBsb2FkaW5nIGZsYWcgd2hlbiBjb2x1bW4gc3RhdGlzdGljcyBmYWlsLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRDb2x1bW5TdGF0c0Vycm9yVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZXJyb3IsIGRhdGFJZCwgZmllbGROYW1lfTogVmlzU3RhdGVBY3Rpb25zLkxvYWRDb2x1bW5TdGF0c0Vycm9yVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBDb25zb2xlLmVycm9yKGVycm9yKTtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGNvbnN0IGZpZWxkID0gKGRhdGFzZXQ/LmZpZWxkcyB8fCBbXSkuZmluZChmID0+IGYubmFtZSA9PT0gZmllbGROYW1lKTtcbiAgaWYgKCFkYXRhc2V0IHx8ICFmaWVsZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBuZXdGaWVsZHMgPSBkYXRhc2V0LmZpZWxkcy5tYXAoZiA9PlxuICAgIGYubmFtZSA9PT0gZmllbGROYW1lID8gey4uLmYsIGlzTG9hZGluZ1N0YXRzOiBmYWxzZX0gOiBmXG4gICk7XG4gIGNvbnN0IG5ld0RhdGFzZXQgPSBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge2ZpZWxkczogbmV3RmllbGRzfSk7XG4gIHJldHVybiBwaWNrXygnZGF0YXNldHMnKShtZXJnZV8oe1tkYXRhSWRdOiBuZXdEYXRhc2V0fSkpKHN0YXRlKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZWRpdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUVkaXRvclZpc2liaWxpdHlVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICB2aXNpYmxlOiAhc3RhdGUuZWRpdG9yLnZpc2libGVcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogQ29udmVydCBlZGl0b3Igc2tldGNoIGZlYXR1cmVzIGludG8gYSBHZW9KU09OIGRhdGFzZXQvbGF5ZXIgYW5kIGNsZWFyIHRoZSBza2V0Y2hlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRFZGl0b3JGZWF0dXJlc1RvTGF5ZXJVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgX2FjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkNvbnZlcnRFZGl0b3JGZWF0dXJlc1RvTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghZ2V0QXBwbGljYXRpb25Db25maWcoKS5lbmFibGVEcmF3T25NYXBTa2V0Y2hlcykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGZlYXR1cmVzID0gc3RhdGUuZWRpdG9yLmZlYXR1cmVzO1xuICBpZiAoIWZlYXR1cmVzLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBkYXRhO1xuICB0cnkge1xuICAgIGRhdGEgPSBwcm9jZXNzR2VvanNvbihlZGl0b3JGZWF0dXJlc1RvRmVhdHVyZUNvbGxlY3Rpb24oZmVhdHVyZXMpKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICByZXR1cm4gd2l0aFRhc2soXG4gICAgICBzdGF0ZSxcbiAgICAgIEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04oKS5tYXAoKCkgPT5cbiAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gY29udmVydCBkcmF3biBnZW9tZXRyeSB0byBhIGxheWVyOiAke21lc3NhZ2V9YCxcbiAgICAgICAgICAgIGlkOiAnY29udmVydC1lZGl0b3ItZmVhdHVyZXMnXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBjb25zdCBjbGVhcmVkU3RhdGU6IFZpc1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgZmVhdHVyZXM6IFtdLFxuICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsLFxuICAgICAgbW9kZTogRURJVE9SX01PREVTLkVESVRcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgbGFiZWxJZCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDkwKSArIDEwO1xuXG4gIHJldHVybiB1cGRhdGVWaXNEYXRhVXBkYXRlcihjbGVhcmVkU3RhdGUsIHtcbiAgICBkYXRhc2V0czoge1xuICAgICAgaW5mbzoge1xuICAgICAgICBpZDogYGRyYXduLWdlb21ldHJ5LSR7Z2VuZXJhdGVIYXNoSWQoNil9YCxcbiAgICAgICAgbGFiZWw6IGBEcmF3biBHZW9tZXRyeSAke2xhYmVsSWR9YFxuICAgICAgfSxcbiAgICAgIGRhdGFcbiAgICB9LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGtlZXBFeGlzdGluZ0NvbmZpZzogdHJ1ZSxcbiAgICAgIGNlbnRlck1hcDogZmFsc2UsXG4gICAgICBhdXRvQ3JlYXRlTGF5ZXJzOiB0cnVlXG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBDb3B5IGluLW1lbW9yeSByb3dzIChvciBsb2FkZWQgdmVjdG9yLXRpbGUgZmVhdHVyZXMpIGluc2lkZSB0aGUgc2VsZWN0ZWRcbiAqIERyYXcgb24gTWFwIHBvbHlnb24gaW50byBhIG5ldyBkYXRhc2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdERhdGFGcm9tRmVhdHVyZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2xheWVySWR9OiBWaXNTdGF0ZUFjdGlvbnMuRXh0cmFjdERhdGFGcm9tRmVhdHVyZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZmVhdHVyZSA9IHN0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmU7XG4gIGNvbnN0IGxheWVyID0gc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsYXllcklkKTtcbiAgY29uc3QgZGF0YUlkID0gbGF5ZXI/LmNvbmZpZy5kYXRhSWQ7XG4gIGxldCBkYXRhc2V0ID0gZGF0YUlkID8gc3RhdGUuZGF0YXNldHNbZGF0YUlkXSA6IG51bGw7XG5cbiAgaWYgKCFsYXllciB8fCAhZGF0YXNldCB8fCAhZGF0YUlkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gR1BVIHJhbmdlL3RpbWUgZmlsdGVycyBhcmUgbm90IHJlZmxlY3RlZCBpbiBmaWx0ZXJlZEluZGV4OyBldmFsdWF0ZSB0aGVtIG9uIENQVVxuICAvLyB0aGUgc2FtZSB3YXkgZXhwb3J0IGRhdGEgZG9lcywgdGhlbiBjbGlwIHRoZSByZXN1bHQgdG8gdGhlIGRyYXdpbmcuXG4gIGlmICghaXNWZWN0b3JUaWxlRXh0cmFjdExheWVyKGxheWVyKSkge1xuICAgIHN0YXRlID0gZmlsdGVyRGF0YXNldENQVShzdGF0ZSwgZGF0YUlkKTtcbiAgICBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgICBpZiAoIWRhdGFzZXQpIHtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gIH1cblxuICBsZXQgZXh0cmFjdGVkO1xuICB0cnkge1xuICAgIGV4dHJhY3RlZCA9IGV4dHJhY3RSb3dzSW5zaWRlRmVhdHVyZSh7bGF5ZXIsIGRhdGFzZXQsIGZlYXR1cmV9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICByZXR1cm4gd2l0aFRhc2soXG4gICAgICBzdGF0ZSxcbiAgICAgIEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04oKS5tYXAoKCkgPT5cbiAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gZXh0cmFjdCBkYXRhOiAke21lc3NhZ2V9YCxcbiAgICAgICAgICAgIGlkOiAnZXh0cmFjdC1kYXRhLWZyb20tZmVhdHVyZSdcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGlmICghZXh0cmFjdGVkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgaWYgKCFleHRyYWN0ZWQucm93Q291bnQpIHtcbiAgICByZXR1cm4gd2l0aFRhc2soXG4gICAgICBzdGF0ZSxcbiAgICAgIEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04oKS5tYXAoKCkgPT5cbiAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGlzVmVjdG9yVGlsZUV4dHJhY3RMYXllcihsYXllcilcbiAgICAgICAgICAgICAgPyAnTm8gbG9hZGVkIHZlY3RvciB0aWxlIGZlYXR1cmVzIGZvdW5kIGluc2lkZSB0aGUgc2VsZWN0ZWQgZHJhd2luZydcbiAgICAgICAgICAgICAgOiAnTm8gcm93cyBmb3VuZCBpbnNpZGUgdGhlIHNlbGVjdGVkIGRyYXdpbmcnLFxuICAgICAgICAgICAgaWQ6ICdleHRyYWN0LWRhdGEtZnJvbS1mZWF0dXJlLWVtcHR5J1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgbGV0IGRhdGE7XG4gIHRyeSB7XG4gICAgZGF0YSA9XG4gICAgICBleHRyYWN0ZWQua2luZCA9PT0gJ2dlb2pzb24nXG4gICAgICAgID8gcHJvY2Vzc0dlb2pzb24oe1xuICAgICAgICAgICAgdHlwZTogJ0ZlYXR1cmVDb2xsZWN0aW9uJyxcbiAgICAgICAgICAgIGZlYXR1cmVzOiBleHRyYWN0ZWQuZmVhdHVyZXNcbiAgICAgICAgICB9KVxuICAgICAgICA6IHtmaWVsZHM6IGV4dHJhY3RlZC5maWVsZHMsIHJvd3M6IGV4dHJhY3RlZC5yb3dzfTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICByZXR1cm4gd2l0aFRhc2soXG4gICAgICBzdGF0ZSxcbiAgICAgIEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04oKS5tYXAoKCkgPT5cbiAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gZXh0cmFjdCBkYXRhOiAke21lc3NhZ2V9YCxcbiAgICAgICAgICAgIGlkOiAnZXh0cmFjdC1kYXRhLWZyb20tZmVhdHVyZSdcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVWaXNEYXRhVXBkYXRlcihzdGF0ZSwge1xuICAgIGRhdGFzZXRzOiB7XG4gICAgICBpbmZvOiB7XG4gICAgICAgIGlkOiBgZXh0cmFjdC0ke2dlbmVyYXRlSGFzaElkKDYpfWAsXG4gICAgICAgIGxhYmVsOiBgRXh0cmFjdGVkICR7ZGF0YXNldC5sYWJlbH1gXG4gICAgICB9LFxuICAgICAgZGF0YVxuICAgIH0sXG4gICAgb3B0aW9uczoge1xuICAgICAga2VlcEV4aXN0aW5nQ29uZmlnOiB0cnVlLFxuICAgICAgY2VudGVyTWFwOiBmYWxzZSxcbiAgICAgIGF1dG9DcmVhdGVMYXllcnM6IHRydWVcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RmlsdGVyQW5pbWF0aW9uVGltZUNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkeCwgY29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLlNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWdBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qgb2xkRmlsdGVyID0gc3RhdGUuZmlsdGVyc1tpZHhdO1xuICBpZiAoIW9sZEZpbHRlcikge1xuICAgIENvbnNvbGUuZXJyb3IoYGZpbHRlcnMuJHtpZHh9IGlzIHVuZGVmaW5lZGApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAob2xkRmlsdGVyLnR5cGUgIT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UpIHtcbiAgICBDb25zb2xlLmVycm9yKFxuICAgICAgYHNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWcgY2FuIG9ubHkgYmUgY2FsbGVkIHRvIHVwZGF0ZSBhIHRpbWUgZmlsdGVyLiBjaGVjayBmaWx0ZXIudHlwZSA9PT0gJ3RpbWVSYW5nZSdgXG4gICAgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB1cGRhdGVzID0gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpO1xuXG4gIHJldHVybiBwaWNrXygnZmlsdGVycycpKHN3YXBfKG1lcmdlXyh1cGRhdGVzKShvbGRGaWx0ZXIpKSkoc3RhdGUpO1xufVxuXG5mdW5jdGlvbiBjaGVja1RpbWVDb25maWdBcmdzKGNvbmZpZykge1xuICBjb25zdCBhbGxvd2VkID0gWyd0aW1lRm9ybWF0JywgJ3RpbWV6b25lJ107XG4gIHJldHVybiBPYmplY3Qua2V5cyhjb25maWcpLnJlZHVjZSgoYWNjdSwgcHJvcCkgPT4ge1xuICAgIGlmICghYWxsb3dlZC5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgQ29uc29sZS5lcnJvcihcbiAgICAgICAgYHNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZyB0YWtlcyB0aW1lRm9ybWF0IGFuZC9vciB0aW1lem9uZSBhcyBvcHRpb25zLCBmb3VuZCAke3Byb3B9YFxuICAgICAgKTtcbiAgICAgIHJldHVybiBhY2N1O1xuICAgIH1cblxuICAgIC8vIGhlcmUgd2UgYXJlIE5PVCBjaGVja2luZyBpZiB0aW1lem9uZSBvciB0aW1lRm9ybWF0IGlucHV0IGlzIHZhbGlkXG4gICAgYWNjdVtwcm9wXSA9IGNvbmZpZ1twcm9wXTtcbiAgICByZXR1cm4gYWNjdTtcbiAgfSwge30pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBlZGl0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZ1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2NvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5TZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgaWYgKCFjb25maWcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgdXBkYXRlcyA9IGNoZWNrVGltZUNvbmZpZ0FyZ3MoY29uZmlnKTtcbiAgcmV0dXJuIHBpY2tfKCdhbmltYXRpb25Db25maWcnKShtZXJnZV8odXBkYXRlcykpKHN0YXRlKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZWRpdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllckZpbHRlcmVkSXRlbXNDaGFuZ2VVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllckZpbHRlcmVkSXRlbXNDaGFuZ2VBY3Rpb25cbik6IFMge1xuICBjb25zdCB7ZXZlbnQsIGxheWVyfSA9IGFjdGlvbjtcbiAgY29uc3Qge2lkOiBkZWNrZ2xMYXllcklkLCBjb3VudH0gPSBldmVudDtcbiAgaWYgKCFsYXllcikge1xuICAgIENvbnNvbGUud2FybihgbGF5ZXJGaWx0ZXJlZEl0ZW1zIGxheWVyIGRvZXNudCBleGlzdHNgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKGxheWVyLmZpbHRlcmVkSXRlbUNvdW50Py5bZGVja2dsTGF5ZXJJZF0gPT09IGNvdW50KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgbGF5ZXIuZmlsdGVyZWRJdGVtQ291bnQgPSB7XG4gICAgLi4ubGF5ZXIuZmlsdGVyZWRJdGVtQ291bnQsXG4gICAgW2RlY2tnbExheWVySWRdOiBjb3VudFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBzd2FwXyhsYXllcikoc3RhdGUubGF5ZXJzKVxuICB9O1xufVxuXG4vKipcbiAqIFVwZGF0ZSBXTVMgZmVhdHVyZSBpbmZvIGFuZCBwaW4gdG9vbHRpcFxuICovXG5leHBvcnQgZnVuY3Rpb24gd21zRmVhdHVyZUluZm9VcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5XTVNGZWF0dXJlSW5mb0FjdGlvblxuKTogUyB7XG4gIGNvbnN0IHtsYXllciwgZmVhdHVyZUluZm8sIGNvb3JkaW5hdGV9ID0gYWN0aW9uO1xuICBpZiAoIWxheWVyKSB7XG4gICAgY29uc29sZS53YXJuKGBXTVMgZmVhdHVyZSBpbmZvIGxheWVyIGRvZXNuJ3QgZXhpc3RgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBDcmVhdGUgYSBjbGlja2VkIG9iamVjdCBzaW1pbGFyIHRvIGxheWVyQ2xpY2tVcGRhdGVyIHRvIHBpbiB0aGUgdG9vbHRpcFxuICBjb25zdCBjbGlja2VkID0gZmVhdHVyZUluZm9cbiAgICA/IHtcbiAgICAgICAgcGlja2VkOiB0cnVlLFxuICAgICAgICBvYmplY3Q6IHtcbiAgICAgICAgICB3bXNGZWF0dXJlSW5mbzogZmVhdHVyZUluZm9cbiAgICAgICAgfSxcbiAgICAgICAgY29vcmRpbmF0ZTogY29vcmRpbmF0ZSB8fCBbMCwgMF0sXG4gICAgICAgIGxheWVyOiB7XG4gICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgIGlkeDogc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IGxheWVyLmlkKSxcbiAgICAgICAgICAgIGlkOiBsYXllci5pZFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIDogbnVsbDtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNsaWNrZWRcbiAgfTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1zdGF0ZW1lbnRzXG5leHBvcnQgZnVuY3Rpb24gc3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVBY3Rpb25cbik6IFMge1xuICBjb25zdCB7aWR4OiBmaWx0ZXJJZHgsIGVuYWJsZSA9IGZhbHNlfSA9IGFjdGlvbjtcblxuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuICBsZXQgbmV3RmlsdGVyID0gZmlsdGVyO1xuXG4gIC8vIGlmIHdlIGVuYWJsZSBzeW5jIHdlIGFyZSBnb2luZyB0byBtZXJnZSBmaWx0ZXIgYW5kIGFuaW1hdGlvbkNvbmZpZyBkb21haW5zIGFuZCBzdG9yZSBpbnRvIGZpbHRlci5kb21haW5cbiAgaWYgKGVuYWJsZSkge1xuICAgIGNvbnN0IGFuaW1hdGFibGVMYXllcnMgPSBnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyhuZXdTdGF0ZS5sYXllcnMpO1xuICAgIC8vIGlmIG5vIGFuaW1hdGFibGVMYXllcnMgYXJlIHByZXNlbnQgd2Ugc2ltcGx5IHJldHVyblxuICAgIGlmICghYW5pbWF0YWJsZUxheWVycy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzID0gZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyhhbmltYXRhYmxlTGF5ZXJzKTtcbiAgICBjb25zdCBoYXNJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXIgPSBCb29sZWFuKGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMubGVuZ3RoKTtcblxuICAgIGNvbnN0IG5ld0ZpbHRlckRvbWFpbiA9IG1lcmdlVGltZURvbWFpbnMoW2ZpbHRlci5kb21haW4sIG5ld1N0YXRlLmFuaW1hdGlvbkNvbmZpZy5kb21haW5dKTtcblxuICAgIC8vIHdlIG9ubHkgdXBkYXRlIGFuaW1hdGlvbldpbmRvdyBpZiB3ZSBoYXZlIGludGVydmFsIGJhc2VkIGFuaW1hdGlvbiBsYXllcnMgd2l0aCBkZWZpbmVkIGludGVydmFscyBhbmQgdGhlIGN1cnJlbnQgZmlsdGVyIGFuaW1hdGlvbiB3aW5kb3cgaXMgbm90IGludGVydmFsXG4gICAgaWYgKGhhc0ludGVydmFsQmFzZWRBbmltYXRpb25MYXllcikge1xuICAgICAgaWYgKGZpbHRlci5hbmltYXRpb25XaW5kb3cgIT09IEFOSU1BVElPTl9XSU5ET1cuaW50ZXJ2YWwpIHtcbiAgICAgICAgbmV3U3RhdGUgPSBzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICAgICAgaWQ6IGZpbHRlci5pZCxcbiAgICAgICAgICBhbmltYXRpb25XaW5kb3c6IEFOSU1BVElPTl9XSU5ET1cuaW50ZXJ2YWxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAgIC8vIGFkanVzdCB0aW1lIGZpbHRlciBpbnRlcnZhbFxuICAgICAgbmV3RmlsdGVyID0gYWRqdXN0VGltZUZpbHRlckludGVydmFsKG5ld1N0YXRlLCBuZXdGaWx0ZXIpO1xuXG4gICAgICAvLyByZXBsYWNlIGZpbHRlciBpbiBzdGF0ZSB3aXRoIG5ld0ZpbHRlclxuICAgICAgbmV3U3RhdGUgPSB7XG4gICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikobmV3U3RhdGUuZmlsdGVycylcbiAgICAgIH07XG4gICAgfVxuXG4gICAgbmV3RmlsdGVyID0gbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICAgIC8vIGFkanVzdCB2YWx1ZSBiYXNlZCBvbiBuZXcgZG9tYWluXG4gICAgY29uc3QgbmV3RmlsdGVyVmFsdWUgPSBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluKFxuICAgICAgbmV3RmlsdGVyLmFuaW1hdGlvbldpbmRvdyA9PT0gQU5JTUFUSU9OX1dJTkRPVy5pbnRlcnZhbFxuICAgICAgICA/IFtuZXdGaWx0ZXJEb21haW5bMF0sIG5ld0ZpbHRlckRvbWFpblswXV1cbiAgICAgICAgOiBuZXdGaWx0ZXJEb21haW4sXG4gICAgICB7Li4ubmV3RmlsdGVyLCBkb21haW46IG5ld0ZpbHRlckRvbWFpbn1cbiAgICApO1xuXG4gICAgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICBpZHg6IGZpbHRlcklkeCxcbiAgICAgIHByb3A6ICd2YWx1ZScsXG4gICAgICB2YWx1ZTogbmV3RmlsdGVyVmFsdWVcbiAgICB9KTtcblxuICAgIG5ld0ZpbHRlciA9IHtcbiAgICAgIC4uLihuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyKSxcbiAgICAgIHN5bmNlZFdpdGhMYXllclRpbWVsaW5lOiB0cnVlXG4gICAgfTtcblxuICAgIC8vIHJlcGxhY2UgZmlsdGVyIGluIHN0YXRlIHdpdGggbmV3RmlsdGVyXG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgIGZpbHRlcnM6IHN3YXBfPEZpbHRlcj4obmV3RmlsdGVyKShuZXdTdGF0ZS5maWx0ZXJzKVxuICAgIH07XG5cbiAgICBuZXdTdGF0ZSA9IHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgICAgbW9kZTogZ2V0U3luY0FuaW1hdGlvbk1vZGUobmV3RmlsdGVyKVxuICAgIH0pO1xuXG4gICAgbmV3RmlsdGVyID0gbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICAgIC8vIHNldCB0aGUgYW5pbWF0aW9uIGNvbmZpZyB2YWx1ZSB0byBtYXRjaCBmaWx0ZXIgdmFsdWVcbiAgICByZXR1cm4gc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgdmFsdWU6IG5ld0ZpbHRlci52YWx1ZVtuZXdGaWx0ZXIuc3luY1RpbWVsaW5lTW9kZV1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIHNldCBkb21haW4gYW5kIHN0ZXBcbiAgbmV3RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICBzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZTogZmFsc2VcbiAgfTtcblxuICAvLyByZXBsYWNlIGZpbHRlciBpbiBzdGF0ZSB3aXRoIG5ld0ZpbHRlclxuICBuZXdTdGF0ZSA9IHtcbiAgICAuLi5uZXdTdGF0ZSxcbiAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikobmV3U3RhdGUuZmlsdGVycylcbiAgfTtcblxuICAvLyByZXNldCBzeW5jIHRpbWVsaW5lIG1vZGVcbiAgbmV3U3RhdGUgPSBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkOiBuZXdGaWx0ZXIuaWQsXG4gICAgbW9kZTogU1lOQ19USU1FTElORV9NT0RFUy5lbmRcbiAgfSk7XG5cbiAgbmV3RmlsdGVyID0gbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICAvLyByZXNldCBmaWx0ZXIgdmFsdWVcbiAgY29uc3QgbmV3RmlsdGVyVmFsdWUgPSBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluKG5ld0ZpbHRlci5kb21haW4sIG5ld0ZpbHRlcik7XG5cbiAgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgcHJvcDogJ3ZhbHVlJyxcbiAgICB2YWx1ZTogbmV3RmlsdGVyVmFsdWVcbiAgfSk7XG5cbiAgbmV3U3RhdGUgPSBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkOiBuZXdGaWx0ZXIuaWQsXG4gICAgbW9kZTogZ2V0U3luY0FuaW1hdGlvbk1vZGUobmV3RmlsdGVyKVxuICB9KTtcblxuICAvLyByZXNldCBhbmltYXRpb24gY29uZmlnIGN1cnJlbnQgdGltZSB0b1xuICByZXR1cm4gc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIHZhbHVlOiBuZXdTdGF0ZS5hbmltYXRpb25Db25maWcuZG9tYWluPy5bMF0gPz8gbnVsbFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5zZXRUaW1lRmlsdGVyU3luY1RpbWVsaW5lTW9kZUFjdGlvblxuKSB7XG4gIGNvbnN0IHtpZDogZmlsdGVySWQsIG1vZGU6IHN5bmNUaW1lbGluZU1vZGV9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gZmlsdGVySWQpO1xuICBpZiAoZmlsdGVySWR4ID09PSAtMSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgaWYgKCF2YWxpZGF0ZVN5bmNBbmltYXRpb25Nb2RlKGZpbHRlciwgc3luY1RpbWVsaW5lTW9kZSkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIHN5bmNUaW1lbGluZU1vZGVcbiAgfTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikoc3RhdGUuZmlsdGVycylcbiAgfTtcblxuICByZXR1cm4gYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlcihuZXdTdGF0ZSwgZmlsdGVySWR4KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgc3RhdGUgb2YgdGhlIGxvYWRpbmcgaW5kaWNhdG9yLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSB2aXNTdGF0ZVxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIFBheWxvYWQgd2l0aCBjaGFuZ2Ugb2YgbnVtYmVyIG9mIGFjdGl2ZSBsb2FkaW5nIGFjdGlvbnMuXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldExvYWRpbmdJbmRpY2F0b3JVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtwYXlsb2FkOiB7Y2hhbmdlfX06IHtwYXlsb2FkOiBTZXRMb2FkaW5nSW5kaWNhdG9yUGF5bG9hZH1cbik6IFZpc1N0YXRlID0+IHtcbiAgbGV0IHtsb2FkaW5nSW5kaWNhdG9yVmFsdWV9ID0gc3RhdGU7XG4gIGlmICghbG9hZGluZ0luZGljYXRvclZhbHVlKSB7XG4gICAgbG9hZGluZ0luZGljYXRvclZhbHVlID0gMDtcbiAgfVxuXG4gIGNvbnN0IG5leHRWYWx1ZSA9IE1hdGgubWF4KGxvYWRpbmdJbmRpY2F0b3JWYWx1ZSArIGNoYW5nZSwgMCk7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbG9hZGluZ0luZGljYXRvclZhbHVlOiBuZXh0VmFsdWUsXG4gICAgLi4uKG5leHRWYWx1ZSA9PT0gMCAmJiBPYmplY3Qua2V5cyhzdGF0ZS5sb2FkaW5nUHJvZ3Jlc3MgfHwge30pLmxlbmd0aFxuICAgICAgPyB7bG9hZGluZ1Byb2dyZXNzOiB7fX1cbiAgICAgIDoge30pXG4gIH07XG59O1xuXG4vKipcbiAqIFJlY29yZCBkb3dubG9hZCBwcm9ncmVzcyBmb3IgYW4gaW4tZmxpZ2h0IHJlbW90ZSBkYXRhc2V0IGh5ZHJhdGUuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TG9hZGluZ1Byb2dyZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWQsIHBlcmNlbnR9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0TG9hZGluZ1Byb2dyZXNzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoKHN0YXRlLmxvYWRpbmdJbmRpY2F0b3JWYWx1ZSB8fCAwKSA8PSAwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5leHRQZXJjZW50ID0gTnVtYmVyLmlzRmluaXRlKHBlcmNlbnQpXG4gICAgPyBNYXRoLm1heCgwLCBNYXRoLm1pbigxMDAsIE1hdGgucm91bmQocGVyY2VudCkpKVxuICAgIDogMDtcbiAgaWYgKHN0YXRlLmxvYWRpbmdQcm9ncmVzcz8uW2lkXSA9PT0gbmV4dFBlcmNlbnQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsb2FkaW5nUHJvZ3Jlc3M6IHtcbiAgICAgIC4uLnN0YXRlLmxvYWRpbmdQcm9ncmVzcyxcbiAgICAgIFtpZF06IG5leHRQZXJjZW50XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBhZGp1c3RBbmltYXRpb25Db25maWdXaXRoRmlsdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIGZpbHRlcklkeDogbnVtYmVyKTogUyB7XG4gIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XTtcbiAgaWYgKChmaWx0ZXIgYXMgVGltZVJhbmdlRmlsdGVyKS5zeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSkge1xuICAgIGNvbnN0IHRpbWVsaW5lVmFsdWUgPSBnZXRUaW1lbGluZVZhbHVlRnJvbUZpbHRlcihmaWx0ZXIpO1xuICAgIGNvbnN0IHZhbHVlID0gc3RhdGUuYW5pbWF0aW9uQ29uZmlnLnRpbWVTdGVwc1xuICAgICAgPyBzbmFwVG9NYXJrcyh0aW1lbGluZVZhbHVlLCBzdGF0ZS5hbmltYXRpb25Db25maWcudGltZVN0ZXBzKVxuICAgICAgOiB0aW1lbGluZVZhbHVlO1xuICAgIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKHN0YXRlLCB7dmFsdWV9KTtcbiAgfVxuICByZXR1cm4gc3RhdGU7XG59XG5cbmZ1bmN0aW9uIGdldFRpbWVsaW5lVmFsdWVGcm9tRmlsdGVyKGZpbHRlcikge1xuICByZXR1cm4gZmlsdGVyLnZhbHVlW2ZpbHRlci5zeW5jVGltZWxpbmVNb2RlXTtcbn1cblxuZnVuY3Rpb24gZ2V0U3luY0FuaW1hdGlvbk1vZGUoZmlsdGVyOiBUaW1lUmFuZ2VGaWx0ZXIpIHtcbiAgaWYgKGZpbHRlci5hbmltYXRpb25XaW5kb3cgPT09IEFOSU1BVElPTl9XSU5ET1cuZnJlZSkge1xuICAgIHJldHVybiBmaWx0ZXIuc3luY1RpbWVsaW5lTW9kZSA/PyBTWU5DX1RJTUVMSU5FX01PREVTLmVuZDtcbiAgfVxuXG4gIHJldHVybiBTWU5DX1RJTUVMSU5FX01PREVTLmVuZDtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXI6IFRpbWVSYW5nZUZpbHRlciwgbmV3TW9kZTogbnVtYmVyKSB7XG4gIHJldHVybiAhKFxuICAgIGZpbHRlci5hbmltYXRpb25XaW5kb3cgIT09IEFOSU1BVElPTl9XSU5ET1cuZnJlZSAmJiBuZXdNb2RlID09PSBTWU5DX1RJTUVMSU5FX01PREVTLnN0YXJ0XG4gICk7XG59XG5cbmZ1bmN0aW9uIGFkanVzdFRpbWVGaWx0ZXJJbnRlcnZhbChzdGF0ZSwgZmlsdGVyKSB7XG4gIGNvbnN0IGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMgPSBnZXRJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzKHN0YXRlLmxheWVycyk7XG5cbiAgbGV0IGludGVydmFsOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgaWYgKGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMubGVuZ3RoID4gMCkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCBpbnRlcnZhbEluZGV4ID0gaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycy5yZWR1Y2UoKGN1cnJlbnRJbmRleCwgbCkgPT4ge1xuICAgICAgaWYgKGwubWV0YS50YXJnZXRUaW1lSW50ZXJ2YWwpIHtcbiAgICAgICAgY29uc3QgbmV3SW5kZXggPSBUSU1FX0lOVEVSVkFMU19PUkRFUkVELmZpbmRJbmRleChpID0+IGkgPT09IGwubWV0YS50YXJnZXRUaW1lSW50ZXJ2YWwpO1xuICAgICAgICByZXR1cm4gbmV3SW5kZXggPiAtMSAmJiBuZXdJbmRleCA8IGN1cnJlbnRJbmRleCA/IG5ld0luZGV4IDogY3VycmVudEluZGV4O1xuICAgICAgfVxuICAgIH0sIFRJTUVfSU5URVJWQUxTX09SREVSRUQubGVuZ3RoIC0gMSk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGxheWVyVGltZUludGVydmFsID0gVElNRV9JTlRFUlZBTFNfT1JERVJFRFtpbnRlcnZhbEluZGV4XTtcbiAgICBpbnRlcnZhbCA9IExheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWxbbGF5ZXJUaW1lSW50ZXJ2YWxdO1xuICB9XG5cbiAgaWYgKCFpbnRlcnZhbCkge1xuICAgIHJldHVybiBmaWx0ZXI7XG4gIH1cblxuICAvLyBhZGp1c3QgZmlsdGVyXG4gIGNvbnN0IHRpbWVGb3JtYXQgPSBnZXREZWZhdWx0VGltZUZvcm1hdChpbnRlcnZhbCk7XG4gIGNvbnN0IHVwZGF0ZWRQbG90VHlwZSA9IHsuLi5maWx0ZXIucGxvdFR5cGUsIGludGVydmFsLCB0aW1lRm9ybWF0fTtcbiAgY29uc3QgbmV3RmlsdGVyID0gdXBkYXRlVGltZUZpbHRlclBsb3RUeXBlKGZpbHRlciwgdXBkYXRlZFBsb3RUeXBlLCBzdGF0ZS5kYXRhc2V0cyk7XG4gIHJldHVybiBhZGp1c3RWYWx1ZVRvQW5pbWF0aW9uV2luZG93KHN0YXRlLCBuZXdGaWx0ZXIpO1xufVxuXG4vLyBGaW5kIGRhdGFJZCBmcm9tIGEgc2F2ZWQgdmlzU3RhdGUgcHJvcGVydHk6XG4vLyBsYXllcnMsIGZpbHRlcnMsIGludGVyYWN0aW9ucywgbGF5ZXJCbGVuZGluZywgb3ZlcmxheUJsZW5kaW5nLCBzcGxpdE1hcHMsIGFuaW1hdGlvbkNvbmZpZywgZWRpdG9yXG4vLyByZXBsYWNlIGl0IHdpdGggYW5vdGhlciBkYXRhSWRcbmZ1bmN0aW9uIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyh2YWx1ZTogYW55LCBkYXRhSWQ6IHN0cmluZywgZGF0YUlkVG9SZXBsYWNlOiBzdHJpbmcpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBmb3IgbGF5ZXJzLCBmaWx0ZXJzLCBjYWxsIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyBvbiBlYWNoIGl0ZW0gaW4gYXJyYXlcbiAgICBjb25zdCByZXBsYWNlZCA9IHZhbHVlXG4gICAgICAubWFwKHYgPT4gZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzKHYsIGRhdGFJZCwgZGF0YUlkVG9SZXBsYWNlKSlcbiAgICAgIC5maWx0ZXIoZCA9PiBkKTtcbiAgICByZXR1cm4gcmVwbGFjZWQubGVuZ3RoID8gcmVwbGFjZWQgOiBudWxsO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUuZGF0YUlkID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5kYXRhSWQgPT09IGRhdGFJZCkge1xuICAgIC8vIG90aGVyc1xuICAgIHJldHVybiB7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIGRhdGFJZDogZGF0YUlkVG9SZXBsYWNlXG4gICAgfTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlLmRhdGFJZCkgJiYgdmFsdWUuZGF0YUlkLmluY2x1ZGVzKGRhdGFJZCkpIHtcbiAgICAvLyBmaWx0ZXJcbiAgICByZXR1cm4ge1xuICAgICAgLi4udmFsdWUsXG4gICAgICBkYXRhSWQ6IHZhbHVlLmRhdGFJZC5tYXAoZCA9PiAoZCA9PT0gZGF0YUlkID8gZGF0YUlkVG9SZXBsYWNlIDogZCkpXG4gICAgfTtcbiAgfSBlbHNlIGlmICh2YWx1ZS5jb25maWc/LmRhdGFJZCAmJiB2YWx1ZS5jb25maWc/LmRhdGFJZCA9PT0gZGF0YUlkKSB7XG4gICAgLy8gbGF5ZXJcbiAgICByZXR1cm4ge1xuICAgICAgLi4udmFsdWUsXG4gICAgICBjb25maWc6IHtcbiAgICAgICAgLi4udmFsdWUuY29uZmlnLFxuICAgICAgICBkYXRhSWQ6IGRhdGFJZFRvUmVwbGFjZVxuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZSBpZiAoaXNPYmplY3QodmFsdWUpICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgZGF0YUlkKSkge1xuICAgIC8vIGZvciB2YWx1ZSBzYXZlZCBhcyB7W2RhdGFJZF06IHsuLi59fVxuICAgIHJldHVybiB7W2RhdGFJZFRvUmVwbGFjZV06IHZhbHVlW2RhdGFJZF19O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8vIEZpbmQgZGF0YXNldElkcyBkZXJpdmVkIGEgc2F2ZWQgdmlzU3RhdGUgUHJvcGVydHk7XG5mdW5jdGlvbiBmaW5kQ2hpbGREYXRhc2V0SWRzKHZhbHVlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIGZvciBsYXllcnMsIGZpbHRlcnMsIGNhbGwgZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIG9uIGVhY2ggaXRlbSBpbiBhcnJheVxuICAgIGNvbnN0IGNoaWxkRGF0YUlkcyA9IHZhbHVlLm1hcChmaW5kQ2hpbGREYXRhc2V0SWRzKS5maWx0ZXIoZCA9PiBkKTtcbiAgICByZXR1cm4gY2hpbGREYXRhSWRzLmxlbmd0aCA/IGNoaWxkRGF0YUlkcyA6IG51bGw7XG4gIH1cblxuICAvLyBjaGlsZCBkYXRhIGlkIHVzdWFsbHkgc3RvcmVzIGluIHRoZSBkZXJpdmVkIGRhdGFzZXQgaW5mb1xuICByZXR1cm4gdmFsdWU/Lm5ld0RhdGFzZXQ/LmluZm8uaWQgfHwgbnVsbDtcbn1cblxuLy8gbW92ZWQgdW5tZXJnZWQgbGF5ZXJzLCBmaWx0ZXJzLCBpbnRlcmFjdGlvbnNcbmZ1bmN0aW9uIG1vdmVWYWx1ZVRvQmVNZXJnZWQoc3RhdGUsIHByb3BWYWx1ZXMsIHtwcm9wLCB0b01lcmdlUHJvcCwgc2F2ZVVubWVyZ2VkfSkge1xuICAvLyByZW1vdmUgcHJvcCB2YWx1ZSBmcm9tIHN0YXRlXG4gIC8vIFRPRE86IHNob3VsZCB3ZSBhZGQgcmVtb3ZlIHVwZGF0ZXIgdG8gbWVyZ2VyIGFzIHdlbGw/XG4gIGlmICghcHJvcFZhbHVlcykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBzdGF0ZVJlbW92ZWQgPVxuICAgIHByb3AgPT09ICdsYXllcnMnXG4gICAgICA/IHByb3BWYWx1ZXMucmVkdWNlKChhY2N1LCBwcm9wVmFsdWUpID0+IHJlbW92ZUxheWVyVXBkYXRlcihhY2N1LCB7aWQ6IHByb3BWYWx1ZS5pZH0pLCBzdGF0ZSlcbiAgICAgIDogQXJyYXkuaXNBcnJheShzdGF0ZVtwcm9wXSlcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIFtwcm9wXTogc3RhdGVbcHJvcF0uZmlsdGVyKHAgPT4gIXByb3BWYWx1ZXMuZmluZChwcm9wVmFsdWUgPT4gcC5pZCA9PT0gcHJvcFZhbHVlLmlkKSlcbiAgICAgICAgfVxuICAgICAgOiAvLyBpZiBub3QgYXJyYXksIHdlIHdvbid0IHJlbW92ZSBpdCwgcmVtb3ZlIGRhdGFzZXQgc2hvdWxkIGhhbmRsZSBpdFxuICAgICAgICBzdGF0ZTtcblxuICAvLyBtb3ZlIHRvIHN0YXRlVG9CZU1lcmdlZFxuICBjb25zdCB0b0JlTWVyZ2VkID0ge1xuICAgIFt0b01lcmdlUHJvcF06IHNhdmVVbm1lcmdlZFxuICAgICAgPyAvLyBjYWxsIG1lcmdlIHNhdmVVbm1lcmdlZCBtZXRob2RcbiAgICAgICAgc2F2ZVVubWVyZ2VkKHN0YXRlUmVtb3ZlZCwgcHJvcFZhbHVlcylcbiAgICAgIDogLy8gaWYgdG9NZXJnZVByb3AgaXMgYXJhYXksIGFwcGVuZCB0byBpdFxuICAgICAgQXJyYXkuaXNBcnJheShzdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdKVxuICAgICAgPyBbLi4uc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSwgLi4ucHJvcFZhbHVlc11cbiAgICAgIDogLy8gc2F2ZSBwcm9wVmFsdWVzIHRvIHRvTWVyZ2VcbiAgICAgIGlzT2JqZWN0KHN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0pXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdLFxuICAgICAgICAgIC4uLnByb3BWYWx1ZXNcbiAgICAgICAgfVxuICAgICAgOiBzdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZVJlbW92ZWQsXG4gICAgLi4udG9CZU1lcmdlZFxuICB9O1xufVxuXG5mdW5jdGlvbiByZXBsYWNlRGF0YXNldEFuZERlcHM8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhSWRUb1VzZTogc3RyaW5nXG4pOiBUIHtcbiAgcmV0dXJuIGNvbXBvc2VfPFQ+KFtcbiAgICBhcHBseV8ocmVwbGFjZURhdGFzZXREZXBzSW5TdGF0ZSwge2RhdGFJZCwgZGF0YUlkVG9Vc2V9KSxcbiAgICBhcHBseV8ocmVtb3ZlRGF0YXNldFVwZGF0ZXIsIHtkYXRhSWR9KVxuICBdKShzdGF0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlU3RhdGVGb3JEYXRhc2V0UmVwbGFjZTxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFJZFRvVXNlOiBzdHJpbmdcbik6IFQge1xuICBjb25zdCBzZXJpYWxpemVkU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZShzdGF0ZSwgc3RhdGUuc2NoZW1hKTtcbiAgY29uc3QgbmV4dFN0YXRlID0gcmVwbGFjZURhdGFzZXRBbmREZXBzKHN0YXRlLCBkYXRhSWQsIGRhdGFJZFRvVXNlKTtcbiAgLy8gbWFrZSBhIGNvcHkgb2YgbGF5ZXJPcmRlciwgYmVjYXVzZSBsYXllciBpZCB3aWxsIGJlIHJlbW92ZWQgZnJvbSBpdCBieSBjYWxsaW5nIHJlbW92ZUxheWVyVXBkYXRlclxuICBjb25zdCBwcmVzZXJ2ZUxheWVyT3JkZXIgPSBbLi4uc3RhdGUubGF5ZXJPcmRlcl07XG5cbiAgLy8gcHJlc2VydmUgZGF0YXNldCBvcmRlclxuICBuZXh0U3RhdGUucHJlc2VydmVEYXRhc2V0T3JkZXIgPSBPYmplY3Qua2V5cyhzdGF0ZS5kYXRhc2V0cykubWFwKGQgPT5cbiAgICBkID09PSBkYXRhSWQgPyBkYXRhSWRUb1VzZSA6IGRcbiAgKTtcblxuICAvLyBwcmVzZXJ2ZUxheWVyT3JkZXJcbiAgaWYgKG5leHRTdGF0ZS5sYXllclRvQmVNZXJnZWQ/Lmxlbmd0aCkge1xuICAgIC8vIGNvcHkgc3BsaXQgbWFwcyB0byBiZSBtZXJnZWQsIGJlY2F1c2UgaXQgd2lsbCBiZSByZXNldCBpbiByZW1vdmUgbGF5ZXIuXG4gICAgLy8gS2VlcCB0aGUgb25lcyBvZiBhIGRhdGFzZXQgcmVwbGFjZWQgYSBtb21lbnQgZWFybGllciBhbmQgbm90IG1lcmdlZCBiYWNrIHlldDpcbiAgICAvLyBpdHMgbGF5ZXJzIGFyZSBubyBsb25nZXIgaW4gdGhlIGN1cnJlbnQgc3BsaXQgbWFwcy5cbiAgICBuZXh0U3RhdGUuc3BsaXRNYXBzVG9CZU1lcmdlZCA9IGNvbWJpbmVTcGxpdE1hcHNCeUluZGV4KFxuICAgICAgc3RhdGUuc3BsaXRNYXBzVG9CZU1lcmdlZCxcbiAgICAgIHNlcmlhbGl6ZWRTdGF0ZT8uc3BsaXRNYXBzID8/IFtdXG4gICAgKTtcbiAgICBuZXh0U3RhdGUubGF5ZXJPcmRlciA9IFsuLi5wcmVzZXJ2ZUxheWVyT3JkZXJdO1xuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuLyoqXG4gKiBUaGUgb3JkZXIgdG8gcHJlc2VydmUgZm9yIHRoZSBpdGVtcyB0aGF0IHdpbGwgYmUgbWVyZ2VkIGJhY2suXG4gKlxuICogYGlkc2AgY29tZXMgZnJvbSB0aGUgc2VyaWFsaXplZCBzdGF0ZSwgc28gaXQgbGlzdHMgZXZlcnl0aGluZyBidXQgdGhlIGl0ZW1zXG4gKiBhbm90aGVyIGRhdGFzZXQncyByZXBsYWNlbWVudCBwYXJrZWQgYSBtb21lbnQgYWdvOiBhbiBhcHAgcmVmcmVzaGluZyBzZXZlcmFsXG4gKiBkYXRhc2V0cyBpbiBhIHJvdyBwcmVwYXJlcyB0aGUgc2Vjb25kIHJlcGxhY2VtZW50IGJlZm9yZSB0aGUgZmlyc3Qgb25lJ3NcbiAqIGl0ZW1zIGhhdmUgbWVyZ2VkIGJhY2suIFdyaXRpbmcgYGlkc2AgYXMgaXQgaXMgd291bGQgZHJvcCB0aG9zZSwgYW5kXG4gKiBgaW5zZXJ0SXRlbUJhc2VkT25QcmVzZXJ2ZWRPcmRlcmAgcHV0cyBhbiBpdGVtIGl0IGNhbm5vdCBwbGFjZSBhdCB0aGUgZnJvbnQg4oCUXG4gKiBzbyB0aGV5IHdvdWxkIGNvbWUgYmFjayByZXZlcnNlZC4gV2hlcmUgdGhleSBiZWxvbmcgaXMgd2hhdCB0aGUgb3JkZXIgd3JpdHRlblxuICogd2hlbiB0aGV5IHdlcmUgcGFya2VkIGFscmVhZHkgc2F5cywgc28gdGhhdCBvcmRlciBpcyBrZXB0IGZvciB0aGVtLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJlc2VydmVkT3JkZXJXaXRoUGFya2VkKFxuICBwcmV2aW91c09yZGVyOiBzdHJpbmdbXSA9IFtdLFxuICBpZHM6IHN0cmluZ1tdLFxuICBwYXJrZWQ6IHtpZD86IHN0cmluZ31bXVxuKTogc3RyaW5nW10ge1xuICBjb25zdCBwYXJrZWRJZHMgPSBwYXJrZWRcbiAgICAubWFwKGl0ZW0gPT4gaXRlbT8uaWQpXG4gICAgLmZpbHRlcigoaWQpOiBpZCBpcyBzdHJpbmcgPT4gQm9vbGVhbihpZCkgJiYgIWlkcy5pbmNsdWRlcyhpZCBhcyBzdHJpbmcpKTtcblxuICBpZiAoIXBhcmtlZElkcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gaWRzO1xuICB9XG5cbiAgY29uc3Qga25vd24gPSBuZXcgU2V0KFsuLi5pZHMsIC4uLnBhcmtlZElkc10pO1xuICBjb25zdCBvcmRlcmVkID0gKHByZXZpb3VzT3JkZXIgfHwgW10pLmZpbHRlcihpZCA9PiBrbm93bi5oYXMoaWQpKTtcbiAgY29uc3QgcmVzdCA9IFsuLi5pZHMsIC4uLnBhcmtlZElkc10uZmlsdGVyKGlkID0+ICFvcmRlcmVkLmluY2x1ZGVzKGlkKSk7XG5cbiAgcmV0dXJuIFsuLi5vcmRlcmVkLCAuLi5yZXN0XTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VEYXRhc2V0RGVwc0luU3RhdGU8VCBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFQsXG4gIHtkYXRhSWQsIGRhdGFJZFRvVXNlfToge2RhdGFJZDogc3RyaW5nOyBkYXRhSWRUb1VzZTogc3RyaW5nfVxuKTogVCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKHN0YXRlLCBzdGF0ZS5zY2hlbWEpO1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHN0YXRlLm1lcmdlcnMucmVkdWNlKFxuICAgIChcbiAgICAgIGFjY3VTdGF0ZSxcbiAgICAgIHtwcm9wLCB0b01lcmdlUHJvcCwgcmVwbGFjZVBhcmVudERhdGFzZXRJZHMsIGdldENoaWxkRGF0YXNldElkcywgc2F2ZVVubWVyZ2VkLCBwcmVzZXJ2ZU9yZGVyfVxuICAgICkgPT4ge1xuICAgICAgLy8gZ2V0IGRhdGFzZXQgaWRzIHRoYXQgYXJlIGRlcGVuZHMgb24gdGhpcyBkYXRhc2V0XG4gICAgICBjb25zdCBwcm9wcyA9IHRvQXJyYXkocHJvcCk7XG4gICAgICBjb25zdCB0b01lcmdlUHJvcHMgPSB0b0FycmF5KHRvTWVyZ2VQcm9wKTtcbiAgICAgIGNvbnN0IHNhdmVkUHJvcHMgPSBzZXJpYWxpemVkU3RhdGUgPyBwcm9wcy5tYXAocCA9PiBzZXJpYWxpemVkU3RhdGVbcF0pIDogW107XG5cbiAgICAgIGxldCByZXBsYWNlZFN0YXRlID0gYWNjdVN0YXRlO1xuICAgICAgc2F2ZWRQcm9wcy5mb3JFYWNoKChwcm9wVmFsdWUsIGkpID0+IHtcbiAgICAgICAgaWYgKHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1lcmdlck9wdGlvbnMgPSB7XG4gICAgICAgICAgcHJvcDogcHJvcHNbaV0sXG4gICAgICAgICAgdG9NZXJnZVByb3A6IHRvTWVyZ2VQcm9wc1tpXSxcbiAgICAgICAgICBnZXRDaGlsZERhdGFzZXRJZHMsXG4gICAgICAgICAgc2F2ZVVubWVyZ2VkXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gV2hhdCBhbm90aGVyIGRhdGFzZXQncyByZXBsYWNlbWVudCBwYXJrZWQgYSBtb21lbnQgYWdvIGFuZCBoYXMgbm90XG4gICAgICAgIC8vIG1lcmdlZCBiYWNrIHlldCwgcmVhZCBiZWZvcmUgdGhpcyBvbmUgcGFya3MgYW55dGhpbmcgb2YgaXRzIG93bi5cbiAgICAgICAgY29uc3QgcGFya2VkRWxzZXdoZXJlID1cbiAgICAgICAgICBtZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gdG9BcnJheShyZXBsYWNlZFN0YXRlW21lcmdlck9wdGlvbnMudG9NZXJnZVByb3BdID8/IFtdKVxuICAgICAgICAgICAgOiBbXTtcblxuICAgICAgICBjb25zdCByZXBsYWNlZEl0ZW0gPVxuICAgICAgICAgIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzPy4ocHJvcFZhbHVlLCBkYXRhSWQsIGRhdGFJZFRvVXNlKSB8fFxuICAgICAgICAgIGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyhwcm9wVmFsdWUsIGRhdGFJZCwgZGF0YUlkVG9Vc2UpO1xuICAgICAgICByZXBsYWNlZFN0YXRlID0gcmVwbGFjZWRJdGVtXG4gICAgICAgICAgPyByZXBsYWNlUHJvcFZhbHVlSW5TdGF0ZShyZXBsYWNlZFN0YXRlLCByZXBsYWNlZEl0ZW0sIG1lcmdlck9wdGlvbnMpXG4gICAgICAgICAgOiByZXBsYWNlZFN0YXRlO1xuXG4gICAgICAgIC8vIE9ubHkgd2hlbiB0aGlzIGRhdGFzZXQgaGFkIGl0ZW1zIG9mIGl0cyBvd24gdG8gcGFyay4gVGhlIHRvQmVNZXJnZWQgbGlzdFxuICAgICAgICAvLyBjYW4gc3RpbGwgaG9sZCBhbm90aGVyIGRhdGFzZXQncyBpdGVtcywgcmVwbGFjZWQgYSBtb21lbnQgZWFybGllciBhbmRcbiAgICAgICAgLy8gbm90IG1lcmdlZCBiYWNrIHlldDsgb3ZlcndyaXRpbmcgdGhlIG9yZGVyIHRoZXkgd2VyZSBwYXJrZWQgd2l0aCB3b3VsZFxuICAgICAgICAvLyBtZXJnZSB0aGVtIGJhY2sgaW4gcmV2ZXJzZS5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHJlcGxhY2VkSXRlbSAmJlxuICAgICAgICAgIG1lcmdlck9wdGlvbnMudG9NZXJnZVByb3AgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIHJlcGxhY2VkU3RhdGVbbWVyZ2VyT3B0aW9ucy50b01lcmdlUHJvcF0/Lmxlbmd0aCAmJlxuICAgICAgICAgIHByZXNlcnZlT3JkZXJcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVwbGFjZWRTdGF0ZVtwcmVzZXJ2ZU9yZGVyXSA9IHByZXNlcnZlZE9yZGVyV2l0aFBhcmtlZChcbiAgICAgICAgICAgIHJlcGxhY2VkU3RhdGVbcHJlc2VydmVPcmRlcl0sXG4gICAgICAgICAgICBwcm9wVmFsdWUubWFwKGl0ZW0gPT4gaXRlbS5pZCksXG4gICAgICAgICAgICBwYXJrZWRFbHNld2hlcmVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHJlcGxhY2VkU3RhdGU7XG4gICAgfSxcbiAgICBzdGF0ZVxuICApO1xuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VQcm9wVmFsdWVJblN0YXRlKFxuICBzdGF0ZSxcbiAgcmVwbGFjZWRJdGVtLFxuICB7cHJvcCwgdG9NZXJnZVByb3AsIGdldENoaWxkRGF0YXNldElkcywgc2F2ZVVubWVyZ2VkfVxuKSB7XG4gIC8vIHByb3AgaXMgZGVwZW5kcyBvbiB0aGUgZGF0YXNldCB0byBiZSByZXBsYWNlZFxuICAvLyByZW1vdmUgcHJvcCBmcm9tIHN0YXRlLCBhbmQgbW92ZSBpdCB0byB0b0JlTWVyZ2VkXG4gIGxldCBuZXh0U3RhdGUgPSBtb3ZlVmFsdWVUb0JlTWVyZ2VkKHN0YXRlLCByZXBsYWNlZEl0ZW0sIHtwcm9wLCB0b01lcmdlUHJvcCwgc2F2ZVVubWVyZ2VkfSk7XG4gIGNvbnN0IGNoaWxkRGF0YUlkcyA9IGdldENoaWxkRGF0YXNldElkcz8uKHJlcGxhY2VkSXRlbSkgfHwgZmluZENoaWxkRGF0YXNldElkcyhyZXBsYWNlZEl0ZW0pO1xuXG4gIGlmIChjaGlsZERhdGFJZHMpIHtcbiAgICBuZXh0U3RhdGUgPSB0b0FycmF5KGNoaWxkRGF0YUlkcykucmVkdWNlKChhY2N1LCBjaGlsZERhdGFJZCkgPT4ge1xuICAgICAgLy8gc2hvdWxkbid0IG5lZWQgdG8gY2hhbmdlIGNoaWxkIGRhdGFzZXQgaWQsXG4gICAgICAvLyBidXQgc3RpbGwgbmVlZCB0byBtb3ZlIG91dCBvZiBzdGF0ZSBhbmQgbWVyZ2UgYmFjayBpblxuICAgICAgcmV0dXJuIHJlcGxhY2VEYXRhc2V0QW5kRGVwcyhhY2N1LCBjaGlsZERhdGFJZCwgY2hpbGREYXRhSWQpO1xuICAgIH0sIG5leHRTdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxLQUFBLEdBQUFDLE9BQUE7QUFFQSxJQUFBQyxnQkFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsVUFBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUksT0FBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssVUFBQSxHQUFBSCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQU0sSUFBQSxHQUFBSixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQU8sUUFBQSxHQUFBTCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVEsS0FBQSxHQUFBTixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVMsS0FBQSxHQUFBUCxzQkFB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
|
|
5946
|
+
var DATASET_OP_ADD_OPTIONS = {
|
|
5947
|
+
autoCreateLayers: true,
|
|
5948
|
+
centerMap: false,
|
|
5949
|
+
keepExistingConfig: true
|
|
5950
|
+
};
|
|
5951
|
+
function applyDerivedProtoDataset(state, proto) {
|
|
5952
|
+
var resultId = proto.info.id;
|
|
5953
|
+
if (!resultId) {
|
|
5954
|
+
return state;
|
|
5955
|
+
}
|
|
5956
|
+
if (state.datasets[resultId]) {
|
|
5957
|
+
var nextState = updateDatasetUpdater(state, {
|
|
5958
|
+
dataId: resultId,
|
|
5959
|
+
data: proto.data
|
|
5960
|
+
});
|
|
5961
|
+
var existing = nextState.datasets[resultId];
|
|
5962
|
+
if (!existing) {
|
|
5963
|
+
return nextState;
|
|
5964
|
+
}
|
|
5965
|
+
existing.metadata = _objectSpread(_objectSpread({}, existing.metadata), proto.metadata);
|
|
5966
|
+
existing.label = proto.info.label || existing.label;
|
|
5967
|
+
return nextState;
|
|
5968
|
+
}
|
|
5969
|
+
return updateVisDataUpdater(state, {
|
|
5970
|
+
datasets: proto,
|
|
5971
|
+
options: DATASET_OP_ADD_OPTIONS
|
|
5972
|
+
});
|
|
5973
|
+
}
|
|
5974
|
+
function runGroupByUpdater(state, action) {
|
|
5975
|
+
var _executeGroupBy = (0, _datasetOpsUpdaters.executeGroupBy)(state, action),
|
|
5976
|
+
nextState = _executeGroupBy.state,
|
|
5977
|
+
proto = _executeGroupBy.proto;
|
|
5978
|
+
return proto ? applyDerivedProtoDataset(nextState, proto) : nextState;
|
|
5979
|
+
}
|
|
5980
|
+
function runJoinUpdater(state, action) {
|
|
5981
|
+
var _executeJoin = (0, _datasetOpsUpdaters.executeJoin)(state, action),
|
|
5982
|
+
nextState = _executeJoin.state,
|
|
5983
|
+
proto = _executeJoin.proto;
|
|
5984
|
+
return proto ? applyDerivedProtoDataset(nextState, proto) : nextState;
|
|
5985
|
+
}
|
|
5986
|
+
function runSpatialJoinUpdater(state, action) {
|
|
5987
|
+
var _executeSpatialJoin = (0, _datasetOpsUpdaters.executeSpatialJoin)(state, action),
|
|
5988
|
+
nextState = _executeSpatialJoin.state,
|
|
5989
|
+
proto = _executeSpatialJoin.proto;
|
|
5990
|
+
return proto ? applyDerivedProtoDataset(nextState, proto) : nextState;
|
|
5991
|
+
}
|
|
5992
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYmJveCIsInJlcXVpcmUiLCJfY29weVRvQ2xpcGJvYXJkIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9kZWVwbWVyZ2UiLCJfd2luZG93IiwiX2Nsb25lRGVlcCIsIl9nZXQiLCJfaXNFcXVhbCIsIl9waWNrIiwiX3VuaXEiLCJfeG9yIiwiX3Rhc2tzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfYWN0aW9ucyIsIl91dGlscyIsIl9jb21tb25VdGlscyIsIl9jb25zdGFudHMiLCJfbGF5ZXJzIiwiX2NvbXBvc2VySGVscGVycyIsIl9tZXJnZXJIYW5kbGVyIiwiX3Zpc1N0YXRlTWVyZ2VyIiwiX3NjaGVtYXMiLCJfcHJvY2Vzc29ycyIsIl90YWJsZSIsIl9pbnRlcmFjdGlvblV0aWxzIiwiX2xheWVyVXRpbHMiLCJfZGF0YXNldE9wc1VwZGF0ZXJzIiwiX2VmZmVjdHMiLCJfZGF0YVV0aWxzIiwiX2V4Y2x1ZGVkIiwiX2V4Y2x1ZGVkMiIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsIl90eXBlb2YzIiwiaGFzIiwiZ2V0Iiwic2V0IiwiX3QiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIl90b1Byb3BlcnR5S2V5IiwiX3RvUHJpbWl0aXZlIiwiU3ltYm9sIiwidG9QcmltaXRpdmUiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsImRvbmUiLCJ2YWx1ZSIsImEiLCJ1IiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0Iiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkaXNhYmxlU3RhY2tDYXB0dXJpbmciLCJ2aXNTdGF0ZVVwZGF0ZXJzIiwiZGVmYXVsdEludGVyYWN0aW9uQ29uZmlnIiwiZXhwb3J0cyIsInRvb2x0aXAiLCJpZCIsImxhYmVsIiwiZW5hYmxlZCIsImNvbmZpZyIsImZpZWxkc1RvU2hvdyIsImNvbXBhcmVNb2RlIiwiY29tcGFyZVR5cGUiLCJDT01QQVJFX1RZUEVTIiwiQUJTT0xVVEUiLCJsZWdlbmQiLCJoaWRlSW52aXNpYmxlTGF5ZXJzIiwiZ2VvY29kZXIiLCJwb3NpdGlvbiIsImxpbWl0U2VhcmNoIiwiYnJ1c2giLCJzaXplIiwiY29vcmRpbmF0ZSIsImFubm90YXRpb24iLCJ6b29tT3BhY2l0eSIsImNvbnRyb2xsZXJzIiwiREVGQVVMVF9BTklNQVRJT05fQ09ORklHIiwiZG9tYWluIiwiY3VycmVudFRpbWUiLCJzcGVlZCIsImlzQW5pbWF0aW5nIiwidGltZVN0ZXBzIiwidGltZUZvcm1hdCIsInRpbWV6b25lIiwiZGVmYXVsdFRpbWVGb3JtYXQiLCJoaWRlQ29udHJvbCIsImR1cmF0aW9uIiwiREVGQVVMVF9FRElUT1IiLCJtb2RlIiwiRURJVE9SX01PREVTIiwiRFJBV19QT0xZR09OIiwiZmVhdHVyZXMiLCJzZWxlY3RlZEZlYXR1cmUiLCJ2aXNpYmxlIiwiSU5JVElBTF9WSVNfU1RBVEUiLCJtYXBJbmZvIiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsImxheWVycyIsImxheWVyRGF0YSIsImxheWVyVG9CZU1lcmdlZCIsImxheWVyT3JkZXIiLCJsYXllck9yZGVyVG9CZU1lcmdlZCIsImZpbHRlcnMiLCJmaWx0ZXJUb0JlTWVyZ2VkIiwiZGF0YXNldHMiLCJlZGl0aW5nRGF0YXNldCIsInVuZGVmaW5lZCIsImdyb3VwQnlzIiwiam9pbnMiLCJlZmZlY3RzIiwiZWZmZWN0T3JkZXIiLCJjaGFydHMiLCJjaGFydHNUb0JlTWVyZ2VkIiwiYW5ub3RhdGlvbnMiLCJhbm5vdGF0aW9uc1RvQmVNZXJnZWQiLCJzZWxlY3RlZEFubm90YXRpb25JZCIsImlzRWRpdGluZ0Fubm90YXRpb25UZXh0IiwiaW50ZXJhY3Rpb25Db25maWciLCJpbnRlcmFjdGlvblRvQmVNZXJnZWQiLCJsYXllckJsZW5kaW5nIiwib3ZlcmxheUJsZW5kaW5nIiwiaG92ZXJJbmZvIiwiY2xpY2tlZCIsIm1vdXNlUG9zIiwibWF4RGVmYXVsdFRvb2x0aXBzIiwiTUFYX0RFRkFVTFRfVE9PTFRJUFMiLCJzcGxpdE1hcHMiLCJzcGxpdE1hcHNUb0JlTWVyZ2VkIiwiaXNNZXJnaW5nRGF0YXNldHMiLCJsYXllckNsYXNzZXMiLCJMYXllckNsYXNzZXMiLCJhbmltYXRpb25Db25maWciLCJlZGl0b3IiLCJmaWxlTG9hZGluZyIsImZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJzdGFnZWRUb0FkZCIsImxvYWRpbmdJbmRpY2F0b3JWYWx1ZSIsImxvYWRpbmdQcm9ncmVzcyIsImxvYWRpbmdQcm9jZXNzaW5nIiwibG9hZGVycyIsImxvYWRPcHRpb25zIiwibWVyZ2VycyIsIlZJU19TVEFURV9NRVJHRVJTIiwic2NoZW1hIiwiS2VwbGVyR0xTY2hlbWEiLCJBQ1RJT05fVEFTS19GSVRfQk9VTkRTIiwiVGFzayIsImZyb21DYWxsYmFjayIsIl8iLCJjYiIsIkFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04iLCJ1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEiLCJzdGF0ZSIsIl9yZWYiLCJsYXllciIsImlkeCIsIm1hcCIsImx5ciIsImQiLCJ1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlIiwibmV3U3RhdGUiLCJpc1Zpc2libGUiLCJhZGROZXdMYXllcnNUb1NwbGl0TWFwIiwicmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzIiwiYW5pbWF0aW9uIiwidXBkYXRlQW5pbWF0aW9uRG9tYWluIiwicGlja0NoYW5nZWRQcm9wcyIsInByZXYiLCJjaGFuZ2VkUHJvcHMiLCJwaWNrUHJvcHNPZiIsIm9iaiIsImtleSIsInByb3RvdHlwZSIsImlzRXF1YWwiLCJWSVNVQUxfQ0hBTk5FTF9QUk9QX1RZUEVTIiwiYXBwbHlMYXllckNvbmZpZ1VwZGF0ZXIiLCJhY3Rpb24iLCJfc2VyaWFsaXplTGF5ZXIiLCJvbGRMYXllcklkIiwibmV3TGF5ZXJDb25maWciLCJsYXllckluZGV4IiwibmV3UGFyc2VkTGF5ZXIiLCJpc1NhdmVkTGF5ZXJDb25maWdWMSIsInBhcnNlTGF5ZXJDb25maWciLCJvbGRMYXllciIsImZpbmQiLCJsIiwiZGF0YXNldCIsImRhdGFJZCIsIm5ld0xheWVyIiwidmFsaWRhdGVMYXllcldpdGhEYXRhIiwibmV4dFN0YXRlIiwidHlwZSIsIm9sZExheWVySW5kZXgiLCJmaW5kSW5kZXgiLCJsYXllclR5cGVDaGFuZ2VVcGRhdGVyIiwibGF5ZXJUeXBlQ2hhbmdlIiwibmV3TGF5ZXJJZCIsImFwcGx5TGF5ZXJDb25maWciLCJzZXJpYWxpemVkT2xkTGF5ZXIiLCJzZXJpYWxpemVMYXllciIsInNlcmlhbGl6ZWROZXdMYXllciIsImNoYW5nZWQiLCJ2aXNDb25maWciLCJsYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXIiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsInZpc3VhbENoYW5uZWxzIiwiY2hhbm5lbE5hbWUiLCJjaGFubmVsIiwiY2hhbm5lbFByb3BOYW1lcyIsInByb3AiLCJzb21lIiwibGF5ZXJWaXN1YWxDaGFubmVsQ2hhbmdlVXBkYXRlciIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsInBpY2siLCJfaXRlcmF0b3IiLCJfc3RlcCIsImVyciIsImxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlciIsImxheWVyQ29uZmlnQ2hhbmdlIiwidXBkYXRlbGF5ZXJWaXNpYmlsdHkiLCJmaWx0ZXJJbmRleCIsImZpbHRlclN5bmNlZFdpdGhUaW1lbGluZSIsImlzTGF5ZXJBbmltYXRhYmxlIiwic3luY1RpbWVGaWx0ZXJXaXRoTGF5ZXJUaW1lbGluZVVwZGF0ZXIiLCJlbmFibGUiLCJnZXRBbmltYXRhYmxlVmlzaWJsZUxheWVycyIsInByb3BzIiwibmV3Q29uZmlnIiwiX2FjdGlvbiRuZXdDb25maWciLCJyZXN0Q29uZmlnIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzMiIsInN0YXRlV2l0aERhdGFJZCIsImxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlciIsIm5leHRMYXllciIsInVwZGF0ZUxheWVyQ29uZmlnIiwic2hvdWxkQ2FsY3VsYXRlTGF5ZXJEYXRhIiwib2xkTGF5ZXJEYXRhIiwidXBkYXRlTGF5ZXJEYXRhUmVzdWx0IiwiY2FsY3VsYXRlTGF5ZXJEYXRhIiwibGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyIiwiX2NhbGN1bGF0ZUxheWVyRGF0YSIsImxheWVyVG9nZ2xlVmlzaWJpbGl0eVVwZGF0ZXIiLCJsYXllcklkIiwic3BsaXRNYXBJZCIsIm1hcEluZGV4Iiwic20iLCJ0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIiLCJ0b2dnbGVMYXllckZvck1hcCIsInN5bmNlZFdpdGhMYXllclRpbWVsaW5lIiwibGF5ZXJTZXRJc1ZhbGlkVXBkYXRlciIsImlzVmFsaWQiLCJsYXllclRvVXBkYXRlIiwibmV3RGF0YSIsIl9jYWxjdWxhdGVMYXllckRhdGEyIiwiYWRkT3JSZW1vdmVUZXh0TGFiZWxzIiwibmV3RmllbGRzIiwidGV4dExhYmVsIiwiZGVmYXVsdFRleHRMYWJlbCIsIkRFRkFVTFRfVEVYVF9MQUJFTCIsIm5ld1RleHRMYWJlbCIsImN1cnJlbnRGaWVsZHMiLCJ0bCIsImZpZWxkIiwiYWRkRmllbGRzIiwiaW5jbHVkZXMiLCJkZWxldGVGaWVsZHMiLCJmZCIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJhZiIsIl90ZXh0TGFiZWwkZmluZCRjb2xsaSIsIl90ZXh0TGFiZWwkZmluZCIsImNvbGxpc2lvbkVuYWJsZWQiLCJCb29sZWFuIiwidXBkYXRlVGV4dExhYmVsUHJvcEFuZFZhbHVlIiwic3BsaWNlIiwibGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyIiwiX29sZExheWVyJGdldERlZmF1bHRMIiwiX29sZExheWVyJGdldERlZmF1bHRMMiIsImdldERlZmF1bHRMYXllckNvbmZpZyIsIl90ZXh0TGFiZWwkIiwidmFsaWRhdGVFeGlzdGluZ0xheWVyV2l0aERhdGEiLCJsb2FkZWRMYXllciIsImFsbG93RW1wdHlDb2x1bW4iLCJpc1ZhbGlkVG9TYXZlIiwidmFsaWRhdGVkIiwib2xkTGF5ZXJUeXBlIiwibmV3RGF0YXNldEZpZWxkcyIsImZpZWxkcyIsInJlbWFwcGVkRmllbGRzIiwidmFsdWVzIiwiX3JlZjIiLCJmaWVsZEtleSIsImN1cnJlbnRGaWVsZCIsIm1hdGNoZWQiLCJfcmVmMyIsInZhbGlkYXRlVmlzdWFsQ2hhbm5lbCIsImlzQ29uZmlnQWN0aXZlIiwidXBkYXRlTGF5ZXJEb21haW4iLCJfY2FsY3VsYXRlTGF5ZXJEYXRhMyIsInNldEluaXRpYWxMYXllckNvbmZpZyIsInJlc3VsdCIsImZpbmREZWZhdWx0TGF5ZXJQcm9wcyIsIm1heWJlRml0TWFudWFsTGF5ZXJCb3VuZHMiLCJmaXRCb3VuZHMiLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsImVuYWJsZUZpdEJvdW5kc09uTWFudWFsTGF5ZXIiLCJib3VuZHMiLCJmaW5kTWFwQm91bmRzIiwid2l0aFRhc2siLCJmaXRNYXBCb3VuZHMiLCJuZXdUeXBlIiwib2xkSWQiLCJDb25zb2xlIiwiZXJyb3IiLCJkZWZhdWx0TGF5ZXJQcm9wcyIsImFzc2lnbkNvbmZpZ1RvTGF5ZXIiLCJ2aXNDb25maWdTZXR0aW5ncyIsImlzTGF5ZXJIb3ZlcmVkIiwiX2NhbGN1bGF0ZUxheWVyRGF0YTQiLCJzZXR0aW5ncyIsIl9zZXR0aW5ncyRsYXllcnMiLCJvbGRMYXllck1hcCIsIm90aGVyTGF5ZXJzIiwicmVwbGFjZUxheWVyRW50cnlJbkxheWVyT3JkZXIiLCJyZXNvbHZlVmlzdWFsQ2hhbm5lbEZpZWxkRnJvbURhdGFzZXQiLCJ2aXN1YWxDaGFubmVsIiwiaW5jb21pbmciLCJfdHlwZW9mMiIsImZvdW5kIiwibmV3VmlzQ29uZmlnIiwidXBkYXRlTGF5ZXJWaXNDb25maWciLCJ1cGRhdGVMYXllclZpc3VhbENoYW5uZWwiLCJ1cGRhdGVkU3RhdGUiLCJjaGFubmVsU2NhbGVUeXBlIiwiQ0hBTk5FTF9TQ0FMRVMiLCJjb2xvciIsInVwZGF0ZUxheWVyQ29sb3JVSSIsInJhbmdlIiwiY29sb3JSYW5nZUNvbmZpZyIsImNvbG9yVUkiLCJjdXN0b21CcmVha3MiLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNSIsInNjYWxlIiwiU0NBTEVfVFlQRVMiLCJjdXN0b21PcmRpbmFsIiwiY3VzdG9tUGFsZXR0ZSIsImluaXRDdXN0b21QYWxldHRlQnlDdXN0b21TY2FsZSIsIm9yZGluYWxEb21haW4iLCJjb2xvckJyZWFrcyIsInNob3dDb2xvckNoYXJ0IiwiY2hhbm5lbEtleSIsImplbmtzIiwiZWRpdEJvdW5kcyIsIl9jYWxjdWxhdGVMYXllckRhdGE2Iiwic2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlciIsIl9yZWY0IiwicmVkdWNlIiwiYWNjdSIsInNldEZpbHRlckFuaW1hdGlvblRpbWVVcGRhdGVyIiwic2V0RmlsdGVyVXBkYXRlciIsInNldEZpbHRlckFuaW1hdGlvbldpbmRvd1VwZGF0ZXIiLCJfcmVmNSIsImFuaW1hdGlvbldpbmRvdyIsInByZXZpb3VzV2luZG93IiwibmV4dEZpbHRlciIsIkZJTFRFUl9UWVBFUyIsInRpbWVSYW5nZSIsIkFOSU1BVElPTl9XSU5ET1ciLCJpbnRlcnZhbCIsImFkanVzdGVkIiwiYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyIsImV2ZXJ5IiwidiIsImlzRmluaXRlIiwic3dhcF8iLCJuZXdTeW5jVGltZWxpbmVNb2RlIiwiZ2V0U3luY0FuaW1hdGlvbk1vZGUiLCJzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlciIsImFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlciIsIl9zZXJpYWxpemVGaWx0ZXIiLCJmaWx0ZXJJZCIsIm5ld0ZpbHRlciIsIm9sZEZpbHRlciIsInNlcmlhbGl6ZWRPbGRGaWx0ZXIiLCJzZXJpYWxpemVGaWx0ZXIiLCJzZXJpYWxpemVkTmV3RmlsdGVyIiwic2V0RmlsdGVyIiwiX2FjdGlvbiR2YWx1ZUluZGV4IiwidmFsdWVJbmRleCIsInRvQXJyYXkiLCJkYXRhc2V0SWRzVG9GaWx0ZXIiLCJfbG9vcCIsInJlcyIsIl91cGRhdGVGaWx0ZXJQcm9wIiwiZW5sYXJnZWRGaWx0ZXIiLCJ2aWV3IiwiRklMVEVSX1ZJRVdfVFlQRVMiLCJlbmxhcmdlZCIsInNpZGUiLCJmaWx0ZXJlZERhdGFzZXRzIiwiYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyIsInVuaXEiLCJmaWx0ZXJXaXRoUExvdCIsInVwZGF0ZUZpbHRlclBsb3QiLCJ1cGRhdGVBbGxMYXllckRvbWFpbkRhdGEiLCJhZGp1c3RBbmltYXRpb25Db25maWdXaXRoRmlsdGVyIiwiX3VwZGF0ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleCIsIl9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgiLCJuZXh0VmFsdWUiLCJnZXREZWZhdWx0RmlsdGVyIiwicmVtb3ZlRmlsdGVyUGxvdCIsIl9pIiwiX2FyciIsIm5leHRWYWwiLCJkb21haW5TdGVwcyIsIm1lcmdlRmlsdGVyRG9tYWluIiwic3RlcCIsImFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4iLCJkYXRhc2V0SWRzIiwiRklMVEVSX1VQREFURVJfUFJPUFMiLCJvbGREYXRhSWQiLCJkYXRhc2V0SWQiLCJfYXBwbHlGaWx0ZXJGaWVsZE5hbWUiLCJhcHBseUZpbHRlckZpZWxkTmFtZSIsIm1lcmdlRG9tYWluIiwidXBkYXRlZEZpbHRlciIsIm5ld0RhdGFzZXQiLCJncHUiLCJzZXRGaWx0ZXJHcHVNb2RlIiwiYXNzaWduR3B1Q2hhbm5lbCIsImVuZE5hbWUiLCJfYXBwbHlUaW1lRmlsdGVyRW5kRmkiLCJhcHBseVRpbWVGaWx0ZXJFbmRGaWVsZE5hbWUiLCJncHVDaGFubmVsIiwiZ3B1RW5kQ2hhbm5lbCIsImxheWVySWREaWZmZXJlbmNlIiwieG9yIiwibGF5ZXJEYXRhSWRzIiwibGlkIiwibmV3RGF0YUlkcyIsInNldEZpbHRlclBsb3RVcGRhdGVyIiwiX3JlZjYiLCJuZXdQcm9wIiwicGxvdFR5cGVVcGRhdGUiLCJwbG90VHlwZSIsIl9uZXdGaWx0ZXIkcGxvdFR5cGUiLCJncm91cEJ5IiwibWVyZ2VQbG90R3JvdXBCeSIsInBpY2tfIiwibWVyZ2VfIiwiY2hhcnRUeXBlIiwieUF4aXMiLCJQTE9UX1RZUEVTIiwibGluZUNoYXJ0IiwiaGlzdG9ncmFtIiwiYWRkRmlsdGVyVXBkYXRlciIsImNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlciIsIm9yaWdpbmFsSW5kZXgiLCJpbmRleCIsImxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXIiLCJfcmVmNyIsIm9sZFZpeENvbmZpZyIsInRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXIiLCJpc0ZpbHRlckFuaW1hdGlvbkNvbmZpZyIsInNldEFuaW1hdGlvbkNvbmZpZ1VwZGF0ZXIiLCJpc1NpZGVGaWx0ZXIiLCJhcHBseUZpbHRlckNvbmZpZyIsInRvZ2dsZUxheWVyQW5pbWF0aW9uVXBkYXRlciIsInRvZ2dsZUxheWVyQW5pbWF0aW9uQ29udHJvbFVwZGF0ZXIiLCJ1cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIiLCJ1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlciIsIl9yZWY4Iiwic2V0RmlsdGVyVmlld1VwZGF0ZXIiLCJzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXciLCJ0b2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlciIsImZlYXR1cmVUb0ZpbHRlclZhbHVlIiwicmVtb3ZlRmlsdGVyVXBkYXRlciIsIl9zdGF0ZSRmaWx0ZXJzJGlkeCIsIm5ld0ZpbHRlcnMiLCJuZXdFZGl0b3IiLCJnZXRGaWx0ZXJJZEluRmVhdHVyZSIsImFkZExheWVyVXBkYXRlciIsIm5ld0xheWVyRGF0YSIsImNyZWF0ZUxheWVyRnJvbUNvbmZpZyIsIndhcm4iLCJfYWN0aW9uJGRhdGFzZXRJZCIsImRlZmF1bHREYXRhc2V0IiwiTGF5ZXIiLCJyZW1vdmVMYXllclVwZGF0ZXIiLCJfcmVmOSIsImxheWVyVG9SZW1vdmUiLCJyZW1vdmVMYXllckZyb21ab29tT3BhY2l0eSIsImZpbHRlck91dEJ5SWQiLCJyZW1vdmVFbGVtZW50QXRJbmRleCIsInJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlciIsInJlbW92ZUNoYXJ0c0FuZEZpbHRlcnMiLCJjaGFydCIsImlzTGF5ZXJDaGFydENvbmZpZyIsInJlb3JkZXJMYXllclVwZGF0ZXIiLCJfcmVmMCIsIm9yZGVyIiwiYWRkTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwIiwiZ2V0TmV3TGF5ZXJHcm91cCIsIm5ld0xheWVyT3JkZXIiLCJhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIiLCJyZW1vdmVMYXllckdyb3VwVXBkYXRlciIsImxheWVyR3JvdXBUb1JlbW92ZSIsImdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlciIsImxheWVySWRzVG9SZW1vdmUiLCJnZXRGbGF0TGF5ZXJPcmRlciIsInVwZGF0ZUxheWVyR3JvdXBVcGRhdGVyIiwib3B0aW9ucyIsIm5ld0xheWVyR3JvdXAiLCJsYXllcklkcyIsImFjYyIsInVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIiLCJhZGRMYXllclRvTGF5ZXJHcm91cFVwZGF0ZXIiLCJsYXllckdyb3VwSWQiLCJlbnRyeSIsIm5ld0dyb3VwTGF5ZXJPcmRlciIsInJlbW92ZUxheWVyRnJvbUxheWVyR3JvdXBVcGRhdGVyIiwibmV3TGF5ZXJHcm91cE9yZGVyIiwic3dhcExheWVyT3JkZXJFbnRyaWVzVXBkYXRlciIsIm9yaWdpbkxheWVySWQiLCJkZXN0aW5hdGlvbkxheWVySWQiLCJvcmlnaW5MYXllckdyb3VwSWQiLCJkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCIsIm9yaWdpbkluZGV4IiwiZGVzdGluYXRpb25JbmRleCIsImFycmF5TW92ZSIsImRlc3RJbmRleCIsImR1cGxpY2F0ZUxheWVyVXBkYXRlciIsIl9yZWYxIiwib3JpZ2luYWwiLCJvcmlnaW5hbExheWVyT3JkZXJJZHgiLCJnZXRJbmRleEZyb21MYXllckVudHJ5SWQiLCJuZXdMYWJlbCIsInBvc3RmaXgiLCJnZW5lcmF0ZUhhc2hJZCIsIkxBWUVSX0lEX0xFTkdUSCIsInBhcmVudEdyb3VwIiwiZmluZFBhcmVudEdyb3VwRm9yTGF5ZXIiLCJsYXllck9yZGVyV2l0aG91dFByZXBlbmRlZCIsImlkeEluR3JvdXAiLCJhcnJheUluc2VydCIsInVwZGF0ZWRHcm91cCIsImFkZEVmZmVjdFVwZGF0ZXIiLCJfYWN0aW9uJGNvbmZpZyIsIl9hY3Rpb24kY29uZmlnMiIsIl9hY3Rpb24kY29uZmlnMyIsIkxJR0hUX0FORF9TSEFET1dfRUZGRUNUIiwiZWZmZWN0IiwiRElTVEFOQ0VfRk9HX1RZUEUiLCJTVVJGQUNFX0ZPR19UWVBFIiwibmV3RWZmZWN0IiwiY3JlYXRlRWZmZWN0Iiwic2V0UHJvcHMiLCJmaXhFZmZlY3RPcmRlciIsInJlbW92ZUVmZmVjdFVwZGF0ZXIiLCJfcmVmMTAiLCJlZmZlY3RUb1JlbW92ZSIsImVmZmVjdElkIiwicmVvcmRlckVmZmVjdFVwZGF0ZXIiLCJfcmVmMTEiLCJ1cGRhdGVFZmZlY3RVcGRhdGVyIiwiX3JlZjEyIiwiaWR4MiIsImVmZmVjdE9yZGVySWQiLCJuZXh0UGFyYW1zIiwicGFyYW1ldGVycyIsInRpbWVzdGFtcCIsIm5ld0VmZmVjdHMiLCJtZXJnZUNoYXJ0Q29uZmlnIiwiZGlzcGxheSIsImNoYXJ0RGlzcGxheSIsImF4aXNGaWVsZElmUHJlc2VudCIsImF4aXMiLCJmaWVsZE5hbWVzIiwiX2F4aXMkZmllbGQiLCJkcm9wTWlzc2luZ0NoYXJ0RmllbGRzIiwiU2V0IiwieEF4aXMiLCJzaG91bGRSZW1vdmUiLCJyZW1vdmVkIiwicmVtb3ZlZElkcyIsImZpbHRlcklkcyIsImZsYXRNYXAiLCJfY2hhcnQkY3Jvc3NGaWx0ZXIiLCJjcm9zc0ZpbHRlciIsInJlZHVjZVJpZ2h0IiwiYWRkQ2hhcnRVcGRhdGVyIiwiX3JlZjEzIiwiX2NoYXJ0JGRpc3BsYXkkaXNDb25mIiwiX2NoYXJ0JGRpc3BsYXkiLCJleGlzdGluZyIsImlzSnNvbkVkaXRvckFjdGl2ZSIsInVwZGF0ZUNoYXJ0VXBkYXRlciIsIl9yZWYxNCIsIl9uZXh0JGNyb3NzRmlsdGVyMiIsIl9wcmV2JGNyb3NzRmlsdGVyIiwiX3ByZXYkY3Jvc3NGaWx0ZXIyIiwiX25leHQkY3Jvc3NGaWx0ZXIzIiwiZGF0YUlkQ2hhbmdlZCIsImxheWVySWRDaGFuZ2VkIiwiX25leHQkY3Jvc3NGaWx0ZXIiLCJvd25lZEZpbHRlcklkcyIsInJlbW92ZUNoYXJ0VXBkYXRlciIsIl9yZWYxNSIsIm1ha2VOZXdBbm5vdGF0aW9uIiwiX2NvbmZpZyRraW5kIiwiX3JlZjE2IiwiX2NvbmZpZyR0ZXh0U2lkZSIsIl9yZWYxNyIsIl9jb25maWckdGV4dFZlcnRpY2FsUCIsIl9jb25maWckaWQiLCJfY29uZmlnJGlzVmlzaWJsZSIsIl9jb25maWckYXV0b1NpemUiLCJfY29uZmlnJGF1dG9TaXplWSIsIl9jb25maWckYW5jaG9yUG9pbnQiLCJfY29uZmlnJGxhYmVsIiwiX2NvbmZpZyRsaW5lQ29sb3IiLCJfY29uZmlnJGxpbmVXaWR0aCIsIl9jb25maWckdGV4dFdpZHRoIiwiX2NvbmZpZyR0ZXh0SGVpZ2h0IiwiX2NvbmZpZyR0ZXh0VmVydGljYWxBIiwiX2FybUxlbmd0aCIsIl9hcm1MZW5ndGgyIiwiX2FybUxlbmd0aDMiLCJfcmFkaXVzSW5NZXRlcnMiLCJraW5kIiwiSU5JVElBTF9BTk5PVEFUSU9OX0tJTkQiLCJwcm92aWRlZEFuZ2xlIiwiYW5nbGUiLCJkZXJpdmVkRnJvbUFuZ2xlIiwidGV4dFBsYWNlbWVudEZyb21BbmdsZSIsInRleHRTaWRlIiwiQW5ub3RhdGlvbktpbmQiLCJURVhUIiwiSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfU0lERSIsInRleHRWZXJ0aWNhbFBvc2l0aW9uIiwidmVydGljYWwiLCJJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9WRVJUSUNBTF9QT1NJVElPTiIsImJhc2UiLCJhdXRvU2l6ZSIsImF1dG9TaXplWSIsImFuY2hvclBvaW50IiwibGluZUNvbG9yIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IiLCJsaW5lV2lkdGgiLCJJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCIsInRleHRXaWR0aCIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX1dJRFRIIiwidGV4dEhlaWdodCIsIklOSVRJQUxfQU5OT1RBVElPTl9URVhUX0hFSUdIVCIsInRleHRWZXJ0aWNhbEFsaWduIiwiZGVmYXVsdEFuZ2xlIiwiQU5OT1RBVElPTl9BTkdMRV9CWV9QTEFDRU1FTlQiLCJJTklUSUFMX0FOTk9UQVRJT05fQU5HTEUiLCJQT0lOVCIsImFybUxlbmd0aCIsIklOSVRJQUxfQU5OT1RBVElPTl9BUk1fTEVOR1RIIiwiQVJST1ciLCJDSVJDTEUiLCJyYWRpdXNJbk1ldGVycyIsImFkZEFubm90YXRpb25VcGRhdGVyIiwibmV3QW5ub3RhdGlvbiIsInJlbW92ZUFubm90YXRpb25VcGRhdGVyIiwiX3JlZjE4IiwidXBkYXRlQW5ub3RhdGlvblVwZGF0ZXIiLCJfcmVmMTkiLCJuZXh0QW5ub3RhdGlvbiIsIm5ld0Fubm90YXRpb25zIiwiZHVwbGljYXRlQW5ub3RhdGlvblVwZGF0ZXIiLCJfcmVmMjAiLCJjbG9uZURlZXAiLCJzZXRTZWxlY3RlZEFubm90YXRpb25VcGRhdGVyIiwiX3JlZjIxIiwiaXNFZGl0aW5nVGV4dCIsInJlbW92ZURhdGFzZXRVcGRhdGVyIiwiZGF0YXNldEtleSIsInJlbW92ZU9wc0ZvckRhdGFzZXRzIiwicmVtb3ZlU2luZ2xlRGF0YXNldFVwZGF0ZXIiLCJfc3RhdGUkZGF0YXNldHMiLCJfZGF0YXNldCIsIm5ld0RhdGFzZXRzIiwibGF5ZXJzVG9SZW1vdmUiLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwiaW5kZXhPZiIsInJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWciLCJfcmVmMjIiLCJfaW50ZXJhY3Rpb25Db25maWciLCJfY29uZmlnJGZpZWxkc1RvU2hvdyIsInVwZGF0ZUxheWVyQmxlbmRpbmdVcGRhdGVyIiwidXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlciIsInNob3dEYXRhc2V0VGFibGVVcGRhdGVyIiwidXBkYXRlVGFibGVDb2xvclVwZGF0ZXIiLCJ1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyIiwibmV3Q29sb3IiLCJyZXNldE1hcENvbmZpZ1VwZGF0ZXIiLCJpbml0aWFsU3RhdGUiLCJyZWNlaXZlTWFwQ29uZmlnVXBkYXRlciIsIl9yZWYyMyIsIl9yZWYyMyRwYXlsb2FkIiwicGF5bG9hZCIsIl9yZWYyMyRwYXlsb2FkJGNvbmZpZyIsIl9yZWYyMyRwYXlsb2FkJG9wdGlvbiIsInZpc1N0YXRlIiwia2VlcEV4aXN0aW5nQ29uZmlnIiwibWVyZ2VkU3RhdGUiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwibWVyZ2VyIiwiaXNWYWxpZE1lcmdlciIsImhhc1Byb3BzVG9NZXJnZSIsIm1lcmdlIiwiZ2V0UHJvcFZhbHVlVG9NZXJnZXIiLCJ0b01lcmdlUHJvcCIsImxheWVySG92ZXJVcGRhdGVyIiwiaW5mbyIsImludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlciIsImNvbnRyYWRpY3QiLCJrIiwibGF5ZXJDbGlja1VwZGF0ZXIiLCJwaW5uZWQiLCJwaWNrZWQiLCJtYXBDbGlja1VwZGF0ZXIiLCJtb3VzZU1vdmVVcGRhdGVyIiwiX3JlZjI0IiwiZXZ0IiwicG9pbnQiLCJtb3VzZVBvc2l0aW9uIiwibG5nTGF0IiwidG9nZ2xlU3BsaXRNYXBVcGRhdGVyIiwiY29tcHV0ZVNwbGl0TWFwTGF5ZXJzIiwiZHVwbGljYXRlIiwiY2xvc2VTcGVjaWZpY01hcEF0SW5kZXgiLCJfcmVmMjUiLCJoYXNUYWJ1bGFyRGF0YXNldERhdGEiLCJkYXRhIiwiX2RhdGEkcm93cyIsIl9kYXRhJGNvbHMiLCJyb3dzIiwiY29scyIsImFycm93VGFibGUiLCJuZWVkc0V4dGVybmFsbHlIb3N0ZWRIeWRyYXRlIiwiX2RhdGFzZXQkaW5mbyIsIl9kYXRhc2V0JG1ldGFkYXRhIiwiRGF0YXNldFR5cGUiLCJFWFRFUk5BTExZX0hPU1RFRCIsIm1ldGFkYXRhIiwic291cmNlIiwiaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQiLCJfeCIsIl9oeWRyYXRlRXh0ZXJuYWxseUhvc3RlZFByb3RvRGF0YXNldCIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlMiIsIl9yZWYyNiIsIl9kYXRhc2V0JG1ldGFkYXRhNyIsIl9kYXRhc2V0JG1ldGFkYXRhOCIsIm9uUHJvZ3Jlc3MiLCJsb2FkZWQiLCJfZGF0YXNldCRtZXRhZGF0YTkiLCJ3cmFwIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiYXJnIiwiYWJydXB0IiwibG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0IiwiZm9ybWF0IiwiZ2V0UmVtb3RlU291cmNlRm9ybWF0IiwiYnlwYXNzQ2FjaGUiLCJnZXREYXRhc2V0UmVmcmVzaEludGVydmFsTXMiLCJzZW50IiwiRXJyb3IiLCJldGFnIiwibGFzdE1vZGlmaWVkIiwibGFzdEZldGNoZWRBdCIsIkRhdGUiLCJub3ciLCJyZWZyZXNoU3RhdHVzIiwic3RvcCIsIkhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLIiwiZnJvbVByb21pc2VXaXRoUHJvZ3Jlc3MiLCJGQUlMX0NSRUFURV9EQVRBU0VUX1RBU0siLCJmcm9tUHJvbWlzZSIsIl9yZWYyNyIsIl9jYWxsZWUiLCJtZXNzYWdlIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsIl94MiIsImdldERhdGFzZXRQcm9ncmVzc0lkIiwiX2RhdGFzZXQkaW5mbzIiLCJfZGF0YXNldCRtZXRhZGF0YTIiLCJjcmVhdGVOZXdEYXRhRW50cnlUYXNrIiwiY3JlYXRlTmV3RGF0YUVudHJ5IiwicHJvZ3Jlc3NJZCIsInByb2dyZXNzIiwiX3Byb2dyZXNzJHBlcmNlbnQiLCJzZXRMb2FkaW5nUHJvZ3Jlc3MiLCJNYXRoIiwicm91bmQiLCJwZXJjZW50IiwicGhhc2UiLCJjaGFpbiIsImh5ZHJhdGVkIiwidGFzayIsImNsZWFyTG9hZGluZ1Byb2dyZXNzIiwiaWRzIiwiY3VycmVudCIsInByb2Nlc3NpbmciLCJuZXh0UHJvY2Vzc2luZyIsInBhdGNoRGF0YXNldE1ldGFkYXRhIiwicGF0Y2giLCJjb3B5VGFibGVBbmRVcGRhdGUiLCJyZWZyZXNoRXh0ZXJuYWxseUhvc3RlZFRhYmxlIiwiX3gzIiwiX3JlZnJlc2hFeHRlcm5hbGx5SG9zdGVkVGFibGUiLCJfY2FsbGVlMyIsIl9yZWYyOCIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsIlJFRlJFU0hfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLIiwicmVmcmVzaERhdGFzZXRVcGRhdGVyIiwiX3JlZjI5IiwiX2RhdGFzZXQkbWV0YWRhdGEzIiwiX2RhdGFzZXQkbWV0YWRhdGE0IiwibmV4dERhdGFzZXQiLCJyZWZyZXNoRXJyb3IiLCJyZWZyZXNoUHJvZ3Jlc3MiLCJfcHJvZ3Jlc3MkcGVyY2VudDIiLCJyZWZyZXNoRGF0YXNldFByb2dyZXNzIiwiYmltYXAiLCJyZWZyZXNoRGF0YXNldFN1Y2Nlc3MiLCJyZWZyZXNoRGF0YXNldEVycm9yIiwicmVmcmVzaERhdGFzZXRQcm9ncmVzc1VwZGF0ZXIiLCJfcmVmMzAiLCJfZGF0YXNldCRtZXRhZGF0YTUiLCJfZGF0YXNldCRtZXRhZGF0YTYiLCJuZXh0UGVyY2VudCIsIm1heCIsIm1pbiIsImZpZWxkTmFtZXNFcXVhbCIsInJlYmluZExheWVyc0FuZEZpbHRlcnNBZnRlclNjaGVtYUNoYW5nZSIsIm5leHRMYXllcnMiLCJkcm9wcGVkTGF5ZXJzIiwicmVib3VuZCIsIm5leHRMYXllck9yZGVyIiwibmV4dFNwbGl0TWFwcyIsIm5leHRMYXllckRhdGEiLCJvbGRJZHgiLCJmaWx0ZXJzRm9yRGF0YXNldCIsIm90aGVyRmlsdGVycyIsIl92YWxpZGF0ZUZpbHRlcnNVcGRhdCIsInZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzIiwidXBkYXRlZERhdGFzZXRzIiwibmV4dEZpbHRlcnMiLCJyZWZyZXNoRGF0YXNldFN1Y2Nlc3NVcGRhdGVyIiwiX3JlZjMxIiwiX3Jlc3VsdCRkYXRhIiwibWV0YWRhdGFQYXRjaCIsInNjaGVtYVVuY2hhbmdlZCIsIm5vdE1vZGlmaWVkIiwidXBkYXRlIiwicmVmcmVzaGVkIiwicmVhcHBseUZpbHRlcnNBbmRMYXllckRhdGEiLCJpc0RhdGFzZXRSb3dMaXN0IiwiaXNQbGFpbk9iamVjdCIsInRvQXJyYXlSb3ciLCJyb3ciLCJyZWNvcmQiLCJub3JtYWxpemVEYXRhc2V0Um93cyIsImxpc3QiLCJub3JtYWxpemVkIiwiYXJyYXlSb3ciLCJhZGRUb0RhdGFzZXRVcGRhdGVyIiwiX3JlZjMyIiwiYXBwbGllZCIsInVwc2VydEJ5IiwidXBzZXJ0Um93cyIsImFwcGVuZFJvd3MiLCJyZW1vdmVGcm9tRGF0YXNldFVwZGF0ZXIiLCJfcmVmMzMiLCJyb3dJbmRleGVzIiwiYnlGaWVsZCIsImluZGV4ZXMiLCJmaW5kUm93SW5kZXhlc0J5RmllbGRWYWx1ZXMiLCJyZW1vdmVSb3dzIiwicmVmcmVzaERhdGFzZXRFcnJvclVwZGF0ZXIiLCJfcmVmMzQiLCJ1cGRhdGVWaXNEYXRhVXBkYXRlciIsInJlYWR5VGFza3MiLCJyZW1vdGVUYXNrcyIsIm5vdGlmaWNhdGlvblRhc2tzIiwiaHlkcmF0ZVByb2dyZXNzIiwiX3JlZjM1IiwiZGF0YXNldEluZGV4IiwiX3JlZjM1JGluZm8iLCJyZXN0IiwicHJvdG8iLCJyZW1vdGUiLCJhZGROb3RpZmljYXRpb24iLCJlcnJvck5vdGlmaWNhdGlvbiIsInByb2dyZXNzSWRzIiwiYmF0Y2hlcyIsInRhc2tzIiwic2V0TG9hZGluZ0luZGljYXRvclVwZGF0ZXIiLCJwYXlsb2FkXyIsImNoYW5nZSIsImJhdGNoIiwiYWxsU2V0dGxlZCIsInJlc3VsdHMiLCJjcmVhdGVOZXdEYXRhc2V0U3VjY2VzcyIsImFkZFRvTWFwT3B0aW9ucyIsImNyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzVXBkYXRlciIsIl9hY3Rpb24kcGF5bG9hZCIsIm5ld0RhdGFFbnRyaWVzIiwic3RhdHVzIiwiQUNUSU9OX1RBU0siLCJyZWFzb24iLCJtZXJnZURhdGFzZXRzQnlPcmRlciIsImxheWVyTWVyZ2VycyIsIm0iLCJ3YWl0Rm9yTGF5ZXJEYXRhIiwiZGF0YXNldE1lcmdlcnMiLCJwb3N0TWVyZ2VyUGF5bG9hZCIsImFwcGx5TWVyZ2Vyc1VwZGF0ZXIiLCJtZXJnZVN0YXRlUmVzdWx0IiwibWVyZ2VTdGF0ZUZyb21NZXJnZXJzIiwiYWxsTWVyZ2VkIiwicG9zdE1lcmdlVXBkYXRlciIsImxheWVyVmlzQ29uZmlnRnJvbUFkZERhdGFPcHRpb25zIiwibGF5ZXJWaXNDb25maWciLCJwb2x5Z29uRmlsdGVyRGVwZW5kc09uTGF5ZXJNZXRhIiwiX2xheWVyJGNvbmZpZyIsIkxBWUVSX1RZUEVTIiwiZ2VvanNvbiIsImNvbHVtbk1vZGUiLCJmRGF0YUlkIiwiZGF0YXNldEZpbHRlcmVkIiwiZGF0YUVtcHR5IiwibmV3TGF5ZXJzIiwiYXV0b0NyZWF0ZUxheWVycyIsImFkZERlZmF1bHRMYXllcnMiLCJsYXllcnNOb3RJblNwbGl0TWFwcyIsIm1lcmdlTGF5ZXJWaXNDb25maWdGb3JOZXdEYXRhc2V0cyIsInRvb2x0aXBGaWVsZHMiLCJhdXRvQ3JlYXRlVG9vbHRpcHMiLCJhZGREZWZhdWx0VG9vbHRpcHMiLCJwb2x5Z29uRmlsdGVycyIsInBvbHlnb24iLCJwb2x5Z29uTWV0YURhdGFJZHMiLCJfZiRsYXllcklkIiwiY2VudGVyTWFwIiwicGFkZGluZyIsImZpdEJvdW5kc1Rhc2siLCJyZW5hbWVEYXRhc2V0VXBkYXRlciIsIkFMTE9XRURfVVBEQVRFX0RBVEFTRVRfUFJPUFMiLCJ2YWxpZGF0ZURhdGFzZXRVcGRhdGVQcm9wcyIsInZhbGlkYXRlZFByb3BzIiwiZW50cmllcyIsIl9lbnRyeSIsIl9zbGljZWRUb0FycmF5MiIsImlzUmdiQ29sb3IiLCJkZWVwbWVyZ2UiLCJyZWNvbmNpbGVMYXllcldpdGhOZXdTY2hlbWEiLCJyZW5hbWVzIiwibmV3VGFibGUiLCJfbGF5ZXIkY29uZmlnJHRleHRMYWIiLCJjb25maWdQYXRjaCIsImNvbHVtbnNQYXRjaCIsImNvbHVtbnNDaGFuZ2VkIiwiY29sdW1ucyIsIl9yZWYzNiIsIl9yZWYzNyIsImNrZXkiLCJjb2wiLCJfcmVmMzgiLCJmaWVsZENvbmZpZyIsImxheWVyQ29weSIsImFzc2lnbiIsImNyZWF0ZSIsImdldFByb3RvdHlwZU9mIiwiaGFzQWxsQ29sdW1ucyIsInVwZGF0ZURhdGFzZXRVcGRhdGVyIiwiX2ludGVyYWN0aW9uQ29uZmlnMiIsIl90b29sdGlwJGNvbmZpZyIsIl9hY3Rpb24kcmVuYW1lcyIsInVwZGF0ZVNjaGVtYSIsImZpbHRlcmVkSWR4Q1BVIiwiYWxsSW5kZXhlcyIsImZpbHRlclJlY29yZENQVSIsInNvcnRDb2x1bW4iLCJzb3J0T3JkZXIiLCJwaW5uZWRDb2x1bW5zIiwiX3JlbmFtZXMkbmFtZSIsImdldENvbHVtbkZpZWxkSWR4IiwibmV3RmllbGRzQnlOYW1lIiwiX3JlbmFtZXMkb2xkTmFtZSIsIl91cGRhdGVkJHlBeGlzIiwidmkiLCJvbGROYW1lIiwibmV3TmFtZSIsImZpZWxkSWR4IiwiX2FwcGx5RmlsdGVyRmllbGROYW1lMiIsInVwZGF0ZWQiLCJmaWx0ZXJUYWJsZSIsInJlY29uY2lsZWQiLCJuZXh0RmllbGRzVG9TaG93IiwiX3JlbmFtZXMkZiRuYW1lIiwiX3N0YXRlJHNwbGl0TWFwcyRpbmRlIiwiaW5kZXhUb1JldHJpZXZlIiwibWFwTGF5ZXJzIiwibmV4dEZpbGVMb2FkSWQiLCJjcmVhdGVGaWxlTG9hZElkIiwibG9hZElkIiwiZmluaXNoRmlsZUxvYWQiLCJvbkZpbmlzaCIsImZpbGVDYWNoZSIsImxvYWRGaWxlc1VwZGF0ZXIiLCJfc3RhdGUkZmlsZUxvYWRpbmckb3AiLCJmaWxlcyIsIl9hY3Rpb24kb25GaW5pc2giLCJsb2FkRmlsZXNTdWNjZXNzIiwiY29tcGFuaW9uRmlsZXMiLCJmaWxlc1RvTG9hZCIsImdldEZpbGVzVG9QYXJzZSIsImRlZmVyQWRkVG9NYXAiLCJhcHBlbmREZWZlcnJlZEZpbGVMb2FkIiwicHJldmlvdXNFcnJvcnMiLCJmcm9tRW50cmllcyIsIl9yZWYzOSIsIl9yZWY0MCIsImluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzIiwibG9hZE5leHRGaWxlVXBkYXRlciIsIl9yZWY0MSIsImxvYWRpbmciLCJmaWxlIiwibG9hZEZpbGVTdGVwU3VjY2Vzc1VwZGF0ZXIiLCJmaWxlTmFtZSIsInN0YXRlV2l0aFByb2dyZXNzIiwidXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIiLCJzdGF0ZVdpdGhDYWNoZSIsIkRFTEFZX1RBU0siLCJsb2FkTmV4dEZpbGUiLCJfc3RhdGUkZmlsZUxvYWRpbmciLCJjdXJyZW50TG9hZElkIiwiX2ZpbGVzVG9Mb2FkIiwiX3RvQXJyYXkyIiwicmVtYWluaW5nRmlsZXNUb0xvYWQiLCJpc1ppcEZpbGVOYW1lIiwiRVhQQU5EX1pJUF9UQVNLIiwiZXh0ZW5zaW9ucyIsImRhdGFzZXRFeHRlbnNpb25zRnJvbUxvYWRlcnMiLCJleHBhbnNpb24iLCJleHBhbmRaaXBBcmNoaXZlU3VjY2VzcyIsImFyY2hpdmVOYW1lIiwibG9hZEZpbGVzRXJyIiwibWFrZUxvYWRGaWxlVGFzayIsInNlZW4iLCJfaXRlcmF0b3I0IiwiX3N0ZXA0IiwibG9hZGVyIiwiX2l0ZXJhdG9yNSIsIl9zdGVwNSIsImV4dGVuc2lvbiIsImV4dCIsInJlcGxhY2UiLCJ0cmltIiwidG9Mb3dlckNhc2UiLCJhZGQiLCJjb21wYW5pb25GaWxlc0ZvckFyY2hpdmUiLCJleHRyYWN0ZWQiLCJzaGFwZWZpbGUiLCJjb21wYW5pb25zIiwid2l0aG91dEZpbGVMb2FkaW5nUHJvZ3Jlc3NFbnRyeSIsImV4cGFuZFppcEFyY2hpdmVTdWNjZXNzVXBkYXRlciIsImFkZERhdGFPcHRpb25zIiwiZGlzcGxheU5hbWUiLCJMT0FEX0ZJTEVfVEFTSyIsImdlbiIsIm5leHRGaWxlQmF0Y2giLCJwcm9jZXNzRmlsZUNvbnRlbnQiLCJjb250ZW50IiwicHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlciIsIl9hY3Rpb24kcGF5bG9hZDIiLCJQUk9DRVNTX0ZJTEVfREFUQSIsImxvYWRGaWxlU3RlcFN1Y2Nlc3MiLCJwYXJzZVByb2dyZXNzIiwicHJldlByb2dyZXNzIiwibmV4dEZpbGVCYXRjaFVwZGF0ZXIiLCJfcmVmNDIiLCJfYWNjdW11bGF0ZWQkZGF0YSIsIl9yZWY0MiRwYXlsb2FkIiwiYWNjdW11bGF0ZWQiLCJ1c2VBcnJvd1Byb2dyZXNzaXZlTG9hZGluZyIsImVuZHNXaXRoIiwic2tpcEFycm93Q29tcGFjdCIsIlVOV1JBUF9UQVNLIiwiX3JlZjQzIiwiY2xlYXJTdGFnZWRMb2FkZWRGaWxlc1VwZGF0ZXIiLCJsb2FkRmlsZXNFcnJVcGRhdGVyIiwiX3JlZjQ0IiwiZXJyb3JMb2FkSWQiLCJhcHBseUNQVUZpbHRlclVwZGF0ZXIiLCJfcmVmNDUiLCJkYXRhSWRzIiwiZmlsdGVyRGF0YXNldENQVSIsInNldE1hcEluZm9VcGRhdGVyIiwiZW1wdHkiLCJkZWZhdWx0TGF5ZXJzIiwiZm91bmRMYXllcnMiLCJmaW5kRGVmYXVsdExheWVyIiwiZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMiLCJmaW5kRmllbGRzVG9TaG93IiwibWVyZ2VkIiwiX3JlZjQ3IiwiZml4ZWREb21haW4iLCJfY2FsY3VsYXRlTGF5ZXJEYXRhNyIsIl9zdGF0ZSRmaWx0ZXJzIiwiYW5pbWF0YWJsZUxheWVycyIsImxheWVyRG9tYWlucyIsIm1lcmdlZERvbWFpbiIsIm1lcmdlVGltZURvbWFpbnMiLCJnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIiLCJtZXJnZWRUaW1lU3RlcHMiLCJzb3J0IiwiQkFTRV9TUEVFRCIsIkZQUyIsInN5bmNlZEZpbHRlciIsIm5ld0FuaW1hdGlvbkRvbWFpbiIsImlzSW5SYW5nZSIsInNldEVkaXRvck1vZGVVcGRhdGVyIiwiX3JlZjQ4Iiwic2tldGNoZXNFbmFibGVkIiwiZW5hYmxlRHJhd09uTWFwU2tldGNoZXMiLCJEUkFXX1BPSU5UIiwiRFJBV19MSU5FU1RSSU5HIiwic2V0RmVhdHVyZXNVcGRhdGVyIiwiX3JlZjQ5IiwiX2xhc3RGZWF0dXJlJHByb3BlcnRpIiwiX2xhc3RGZWF0dXJlJHByb3BlcnRpMiIsIl9yZWY0OSRmZWF0dXJlcyIsImxhc3RGZWF0dXJlIiwicHJvcGVydGllcyIsImlzQ2xvc2VkIiwic2hhcGUiLCJFRElUIiwiZmVhdHVyZSIsImJib3giLCJmZWF0dXJlVmFsdWUiLCJmaWx0ZXJJZHgiLCJmaWwiLCJmaW5kRWRpdG9yRmVhdHVyZSIsIl9zdGF0ZSRlZGl0b3Ikc2VsZWN0ZSIsImZyb21FZGl0b3IiLCJpdGVtIiwic2V0RWRpdG9yRmVhdHVyZVByb3BlcnRpZXNVcGRhdGVyIiwiX3JlZjUwIiwiX3N0YXRlJGVkaXRvciRzZWxlY3RlMiIsIm5leHRGZWF0dXJlIiwibWVyZ2VVc2VyRmVhdHVyZVByb3BlcnRpZXMiLCJuZXh0RWRpdG9yIiwic2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlciIsIl9yZWY1MSIsInNlbGVjdGlvbkNvbnRleHQiLCJkZWxldGVGZWF0dXJlVXBkYXRlciIsIl9yZWY1MiIsInNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXIiLCJub25lRmlsdGVyRmVhdHVyZSIsIl9maWx0ZXIkbGF5ZXJJZCIsImlzTGF5ZXJJbmNsdWRlZCIsInNrZXRjaEZlYXR1cmUiLCJ0b1NrZXRjaEZlYXR1cmUiLCJzdGF0ZVdpdGhvdXRGaWx0ZXIiLCJnZW5lcmF0ZVBvbHlnb25GaWx0ZXIiLCJzZXRQb2x5Z29uRmlsdGVyQWxsTGF5ZXJzVXBkYXRlciIsInZpc2libGVMYXllcklkcyIsImFsbExheWVySWRzIiwic29ydFRhYmxlQ29sdW1uVXBkYXRlciIsIl9yZWY1MyIsImNvbHVtbiIsInNvcnRNb2RlIiwiY3VycmVudE1vZGUiLCJTT1JUX09SREVSIiwiQVNDRU5ESU5HIiwic29ydGVkIiwic29ydERhdGFzZXRCeUNvbHVtbiIsInBpblRhYmxlQ29sdW1uVXBkYXRlciIsIl9yZWY1NCIsInBpblRhYmxlQ29sdW1ucyIsImNvcHlUYWJsZUNvbHVtblVwZGF0ZXIiLCJfcmVmNTUiLCJ0ZXh0IiwiZGF0YUNvbnRhaW5lciIsInBhcnNlRmllbGRWYWx1ZSIsInZhbHVlQXQiLCJqb2luIiwiY29weSIsInNldENvbHVtbkRpc3BsYXlGb3JtYXRVcGRhdGVyIiwiX3JlZjU2IiwiZm9ybWF0cyIsImRpc3BsYXlGb3JtYXQiLCJfbGF5ZXIkY29uZmlnMiIsImNvbG9yRmllbGQiLCJnZXRNYXBwZWRWYWx1ZSIsImZpbHRlclByb3BzIiwibWFwcGVkVmFsdWUiLCJ5aWVsZEZvclBhaW50IiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXRUaW1lb3V0IiwicmVxdWVzdERhdGFzZXRDb2x1bW5TdGF0aXN0aWNzIiwiX3g0IiwiX3JlcXVlc3REYXRhc2V0Q29sdW1uU3RhdGlzdGljcyIsIl9jYWxsZWU0IiwiX3JlZjU3IiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0IiwiZ2V0Q29sdW1uRmlsdGVyUHJvcHMiLCJjb2xsZWN0Q29sdW1uVmFsdWVzIiwiZ2V0Q29sdW1uU3RhdGlzdGljcyIsImZpZWxkVHlwZSIsIkxPQURfQ09MVU1OX1NUQVRTX1RBU0siLCJsb2FkQ29sdW1uU3RhdHNVcGRhdGVyIiwiX3JlZjU4IiwiZmllbGROYW1lIiwiZmllbGROYW1lc1RvTG9hZCIsImZpZWxkc1RvTG9hZCIsImlzTG9hZGluZ1N0YXRzIiwiX3JlZjU5IiwibG9hZENvbHVtblN0YXRzU3VjY2VzcyIsImxvYWRDb2x1bW5TdGF0c0Vycm9yIiwibG9hZENvbHVtblN0YXRzU3VjY2Vzc1VwZGF0ZXIiLCJfcmVmNjAiLCJuZXdGaWx0ZXJQcm9wcyIsImNvbHVtblN0YXRzIiwibG9hZENvbHVtblN0YXRzRXJyb3JVcGRhdGVyIiwiX3JlZjYxIiwidG9nZ2xlRWRpdG9yVmlzaWJpbGl0eVVwZGF0ZXIiLCJjb252ZXJ0RWRpdG9yRmVhdHVyZXNUb0xheWVyVXBkYXRlciIsIl9hY3Rpb24iLCJwcm9jZXNzR2VvanNvbiIsImVkaXRvckZlYXR1cmVzVG9GZWF0dXJlQ29sbGVjdGlvbiIsImNsZWFyZWRTdGF0ZSIsImxhYmVsSWQiLCJmbG9vciIsInJhbmRvbSIsImV4dHJhY3REYXRhRnJvbUZlYXR1cmVVcGRhdGVyIiwiX3JlZjYyIiwiaXNUaWxlZEV4dHJhY3QiLCJpc1ZlY3RvclRpbGVFeHRyYWN0TGF5ZXIiLCJpc1Jhc3RlclRpbGVFeHRyYWN0TGF5ZXIiLCJleHRyYWN0Um93c0luc2lkZUZlYXR1cmUiLCJyb3dDb3VudCIsImRvd25sb2FkIiwiZG93bmxvYWRDbGlwIiwicG5nIiwianNvbiIsInN1Y2Nlc3NOb3RpZmljYXRpb24iLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnVXBkYXRlciIsIl9yZWY2MyIsInVwZGF0ZXMiLCJjaGVja1RpbWVDb25maWdBcmdzIiwiYWxsb3dlZCIsInNldExheWVyQW5pbWF0aW9uVGltZUNvbmZpZ1VwZGF0ZXIiLCJfcmVmNjQiLCJsYXllckZpbHRlcmVkSXRlbXNDaGFuZ2VVcGRhdGVyIiwiX2xheWVyJGZpbHRlcmVkSXRlbUNvIiwiZXZlbnQiLCJkZWNrZ2xMYXllcklkIiwiY291bnQiLCJmaWx0ZXJlZEl0ZW1Db3VudCIsIndtc0ZlYXR1cmVJbmZvVXBkYXRlciIsImZlYXR1cmVJbmZvIiwiY29uc29sZSIsIm9iamVjdCIsIndtc0ZlYXR1cmVJbmZvIiwiX25ld1N0YXRlJGFuaW1hdGlvbkNvIiwiX25ld1N0YXRlJGFuaW1hdGlvbkNvMiIsIl9hY3Rpb24kZW5hYmxlIiwiaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyIsImdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMiLCJoYXNJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXIiLCJuZXdGaWx0ZXJEb21haW4iLCJhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwiLCJuZXdGaWx0ZXJWYWx1ZSIsInN5bmNUaW1lbGluZU1vZGUiLCJTWU5DX1RJTUVMSU5FX01PREVTIiwiZW5kIiwidmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZSIsIl9yZWY2NSIsInNldExvYWRpbmdQcm9ncmVzc1VwZGF0ZXIiLCJfcmVmNjYiLCJfc3RhdGUkbG9hZGluZ1Byb2dyZXMiLCJfc3RhdGUkbG9hZGluZ1Byb2Nlc3MiLCJ0aW1lbGluZVZhbHVlIiwiZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIiLCJzbmFwVG9NYXJrcyIsImZyZWUiLCJfZmlsdGVyJHN5bmNUaW1lbGluZU0iLCJuZXdNb2RlIiwic3RhcnQiLCJpbnRlcnZhbEluZGV4IiwiY3VycmVudEluZGV4IiwibWV0YSIsInRhcmdldFRpbWVJbnRlcnZhbCIsIm5ld0luZGV4IiwiVElNRV9JTlRFUlZBTFNfT1JERVJFRCIsImxheWVyVGltZUludGVydmFsIiwiTGF5ZXJUb0ZpbHRlclRpbWVJbnRlcnZhbCIsImdldERlZmF1bHRUaW1lRm9ybWF0IiwidXBkYXRlZFBsb3RUeXBlIiwidXBkYXRlVGltZUZpbHRlclBsb3RUeXBlIiwiZGVmYXVsdFJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIiwiZGF0YUlkVG9SZXBsYWNlIiwiX3ZhbHVlJGNvbmZpZyIsIl92YWx1ZSRjb25maWcyIiwicmVwbGFjZWQiLCJpc09iamVjdCIsImZpbmRDaGlsZERhdGFzZXRJZHMiLCJfdmFsdWUkbmV3RGF0YXNldCIsImNoaWxkRGF0YUlkcyIsIm1vdmVWYWx1ZVRvQmVNZXJnZWQiLCJwcm9wVmFsdWVzIiwiX3JlZjY4Iiwic2F2ZVVubWVyZ2VkIiwic3RhdGVSZW1vdmVkIiwicHJvcFZhbHVlIiwicCIsInRvQmVNZXJnZWQiLCJyZXBsYWNlRGF0YXNldEFuZERlcHMiLCJkYXRhSWRUb1VzZSIsImRlbGV0ZU9yaWdpbmFsRGF0YXNldCIsImNvbXBvc2VfIiwiYXBwbHlfIiwicmVwbGFjZURhdGFzZXREZXBzSW5TdGF0ZSIsImlmXyIsInByZXBhcmVTdGF0ZUZvckRhdGFzZXRSZXBsYWNlIiwiX25leHRTdGF0ZSRsYXllclRvQmVNIiwic2VyaWFsaXplZFN0YXRlIiwic2VyaWFsaXplVmlzU3RhdGUiLCJwcmVzZXJ2ZUxheWVyT3JkZXIiLCJwcmVzZXJ2ZURhdGFzZXRPcmRlciIsIl9zZXJpYWxpemVkU3RhdGUkc3BsaSIsImNvbWJpbmVTcGxpdE1hcHNCeUluZGV4IiwicHJlc2VydmVkT3JkZXJXaXRoUGFya2VkIiwicHJldmlvdXNPcmRlciIsInBhcmtlZCIsInBhcmtlZElkcyIsImtub3duIiwib3JkZXJlZCIsIl9yZWY2OSIsImFjY3VTdGF0ZSIsIl9yZWY3MCIsInJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIiwiZ2V0Q2hpbGREYXRhc2V0SWRzIiwicHJlc2VydmVPcmRlciIsInRvTWVyZ2VQcm9wcyIsInNhdmVkUHJvcHMiLCJyZXBsYWNlZFN0YXRlIiwiX3JlcGxhY2VkU3RhdGUkbWVyZ2VyIiwiX3JlcGxhY2VkU3RhdGUkbWVyZ2VyMiIsIm1lcmdlck9wdGlvbnMiLCJwYXJrZWRFbHNld2hlcmUiLCJyZXBsYWNlZEl0ZW0iLCJyZXBsYWNlUHJvcFZhbHVlSW5TdGF0ZSIsIl9yZWY3MSIsImNoaWxkRGF0YUlkIiwiREFUQVNFVF9PUF9BRERfT1BUSU9OUyIsImFwcGx5RGVyaXZlZFByb3RvRGF0YXNldCIsInJlc3VsdElkIiwicnVuR3JvdXBCeVVwZGF0ZXIiLCJfZXhlY3V0ZUdyb3VwQnkiLCJleGVjdXRlR3JvdXBCeSIsInJ1bkpvaW5VcGRhdGVyIiwiX2V4ZWN1dGVKb2luIiwiZXhlY3V0ZUpvaW4iLCJydW5TcGF0aWFsSm9pblVwZGF0ZXIiLCJfZXhlY3V0ZVNwYXRpYWxKb2luIiwiZXhlY3V0ZVNwYXRpYWxKb2luIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Zpcy1zdGF0ZS11cGRhdGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge2Jib3h9IGZyb20gJ0B0dXJmL2Jib3gnO1xuaW1wb3J0IHR5cGUge0FsbEdlb0pTT059IGZyb20gJ0B0dXJmL2hlbHBlcnMnO1xuaW1wb3J0IGNvcHkgZnJvbSAnY29weS10by1jbGlwYm9hcmQnO1xuaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdkZWVwbWVyZ2UnO1xuaW1wb3J0IHtjb25zb2xlIGFzIENvbnNvbGV9IGZyb20gJ2dsb2JhbC93aW5kb3cnO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9jbG9uZURlZXAnO1xuaW1wb3J0IGdldCBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9nZXQnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvaXNFcXVhbCc7XG5pbXBvcnQgcGljayBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9waWNrJztcbmltcG9ydCB1bmlxIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L3VuaXEnO1xuaW1wb3J0IHhvciBmcm9tICdlcy10b29sa2l0L2NvbXBhdC94b3InO1xuaW1wb3J0IFRhc2ssIHtkaXNhYmxlU3RhY2tDYXB0dXJpbmcsIHdpdGhUYXNrfSBmcm9tICdAa2VwbGVyLmdsL3Rhc2tzJztcbmltcG9ydCB0eXBlIHtUYXNrRGVzY3JpcHRvcn0gZnJvbSAnQGtlcGxlci5nbC90YXNrcyc7XG4vLyBUYXNrc1xuaW1wb3J0IHtcbiAgREVMQVlfVEFTSyxcbiAgQUNUSU9OX1RBU0ssXG4gIEVYUEFORF9aSVBfVEFTSyxcbiAgTE9BRF9GSUxFX1RBU0ssXG4gIFBST0NFU1NfRklMRV9EQVRBLFxuICBVTldSQVBfVEFTS1xufSBmcm9tICdAa2VwbGVyLmdsL3Rhc2tzJztcbi8vIEFjdGlvbnNcbmltcG9ydCB7XG4gIGFkZE5vdGlmaWNhdGlvbixcbiAgQWN0aW9uVHlwZXMsXG4gIENyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzUGF5bG9hZCxcbiAgTWFwU3RhdGVBY3Rpb25zLFxuICBSZWNlaXZlTWFwQ29uZmlnUGF5bG9hZCxcbiAgVmlzU3RhdGVBY3Rpb25zLFxuICBhcHBseUxheWVyQ29uZmlnLFxuICBjcmVhdGVOZXdEYXRhc2V0U3VjY2VzcyxcbiAgbGF5ZXJDb25maWdDaGFuZ2UsXG4gIGxheWVyVHlwZUNoYW5nZSxcbiAgbGF5ZXJWaXNDb25maWdDaGFuZ2UsXG4gIGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSxcbiAgbG9hZEZpbGVTdGVwU3VjY2VzcyxcbiAgbG9hZEZpbGVzRXJyLFxuICBsb2FkRmlsZXNTdWNjZXNzLFxuICBsb2FkTmV4dEZpbGUsXG4gIGV4cGFuZFppcEFyY2hpdmVTdWNjZXNzLFxuICBuZXh0RmlsZUJhdGNoLFxuICBzZXRGaWx0ZXIsXG4gIHByb2Nlc3NGaWxlQ29udGVudCxcbiAgZml0Qm91bmRzIGFzIGZpdE1hcEJvdW5kcyxcbiAgdG9nZ2xlTGF5ZXJGb3JNYXAsXG4gIGFwcGx5RmlsdGVyQ29uZmlnLFxuICBTZXRMb2FkaW5nSW5kaWNhdG9yUGF5bG9hZCxcbiAgbG9hZENvbHVtblN0YXRzU3VjY2VzcyxcbiAgbG9hZENvbHVtblN0YXRzRXJyb3IsXG4gIHJlZnJlc2hEYXRhc2V0U3VjY2VzcyxcbiAgcmVmcmVzaERhdGFzZXRFcnJvcixcbiAgcmVmcmVzaERhdGFzZXRQcm9ncmVzcyxcbiAgc2V0TG9hZGluZ1Byb2dyZXNzXG59IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5cbi8vIFV0aWxzXG5pbXBvcnQge1xuICBGSUxURVJfVVBEQVRFUl9QUk9QUyxcbiAgYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcCxcbiAgc25hcFRvTWFya3MsXG4gIGFwcGx5RmlsdGVyRmllbGROYW1lLFxuICBhcHBseVRpbWVGaWx0ZXJFbmRGaWVsZE5hbWUsXG4gIGFwcGx5RmlsdGVyc1RvRGF0YXNldHMsXG4gIGFycmF5SW5zZXJ0LFxuICBjb21iaW5lU3BsaXRNYXBzQnlJbmRleCxcbiAgY29tcHV0ZVNwbGl0TWFwTGF5ZXJzLFxuICBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluLFxuICBlcnJvck5vdGlmaWNhdGlvbixcbiAgc3VjY2Vzc05vdGlmaWNhdGlvbixcbiAgZWRpdG9yRmVhdHVyZXNUb0ZlYXR1cmVDb2xsZWN0aW9uLFxuICBleHRyYWN0Um93c0luc2lkZUZlYXR1cmUsXG4gIGlzUmFzdGVyVGlsZUV4dHJhY3RMYXllcixcbiAgaXNWZWN0b3JUaWxlRXh0cmFjdExheWVyLFxuICBtZXJnZVVzZXJGZWF0dXJlUHJvcGVydGllcyxcbiAgdG9Ta2V0Y2hGZWF0dXJlLFxuICBmZWF0dXJlVG9GaWx0ZXJWYWx1ZSxcbiAgZmlsdGVyRGF0YXNldENQVSxcbiAgZ2VuZXJhdGVQb2x5Z29uRmlsdGVyLFxuICBnZXREZWZhdWx0RmlsdGVyLFxuICBnZXRGaWx0ZXJJZEluRmVhdHVyZSxcbiAgZ2V0VGltZVdpZGdldFRpdGxlRm9ybWF0dGVyLFxuICBpc0luUmFuZ2UsXG4gIGlzT2JqZWN0LFxuICBpc1BsYWluT2JqZWN0LFxuICBpc1JnYkNvbG9yLFxuICBwYXJzZUZpZWxkVmFsdWUsXG4gIHJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyxcbiAgc2V0LFxuICB1cGRhdGVGaWx0ZXJQbG90LFxuICByZW1vdmVGaWx0ZXJQbG90LFxuICBpc0xheWVyQW5pbWF0YWJsZSxcbiAgaXNTaWRlRmlsdGVyLFxuICBnZXRBcHBsaWNhdGlvbkNvbmZpZyxcbiAgdmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHNcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2dlbmVyYXRlSGFzaElkLCB0b0FycmF5LCBhcnJheU1vdmV9IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcbi8vIE1lcmdlcnNcbmltcG9ydCB7XG4gIEFOSU1BVElPTl9XSU5ET1csXG4gIEJBU0VfU1BFRUQsXG4gIENPTVBBUkVfVFlQRVMsXG4gIERFRkFVTFRfVEVYVF9MQUJFTCxcbiAgRURJVE9SX01PREVTLFxuICBGSUxURVJfVFlQRVMsXG4gIEZJTFRFUl9WSUVXX1RZUEVTLFxuICBMQVlFUl9UWVBFUyxcbiAgRlBTLFxuICBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCxcbiAgRElTVEFOQ0VfRk9HX1RZUEUsXG4gIFNVUkZBQ0VfRk9HX1RZUEUsXG4gIE1BWF9ERUZBVUxUX1RPT0xUSVBTLFxuICBQTE9UX1RZUEVTLFxuICBTT1JUX09SREVSLFxuICBTWU5DX1RJTUVMSU5FX01PREVTLFxuICBDSEFOTkVMX1NDQUxFUyxcbiAgU0NBTEVfVFlQRVMsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9LSU5ELFxuICBJTklUSUFMX0FOTk9UQVRJT05fQU5HTEUsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9BUk1fTEVOR1RILFxuICBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9XSURUSCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfSEVJR0hULFxuICBJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1NJREUsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9URVhUX1ZFUlRJQ0FMX1BPU0lUSU9OLFxuICBBTk5PVEFUSU9OX0FOR0xFX0JZX1BMQUNFTUVOVCxcbiAgdGV4dFBsYWNlbWVudEZyb21BbmdsZSxcbiAgQW5ub3RhdGlvbktpbmQsXG4gIERhdGFzZXRUeXBlLFxuICBnZXREYXRhc2V0UmVmcmVzaEludGVydmFsTXMsXG4gIGdldFJlbW90ZVNvdXJjZUZvcm1hdFxufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge0xBWUVSX0lEX0xFTkdUSCwgTGF5ZXIsIExheWVyQ2xhc3Nlc30gZnJvbSAnQGtlcGxlci5nbC9sYXllcnMnO1xuaW1wb3J0IHtcbiAgYXBwbHlfLFxuICBjb21wb3NlXyxcbiAgZmlsdGVyT3V0QnlJZCxcbiAgaWZfLFxuICBtZXJnZV8sXG4gIHBheWxvYWRfLFxuICBwaWNrXyxcbiAgcmVtb3ZlRWxlbWVudEF0SW5kZXgsXG4gIHN3YXBfXG59IGZyb20gJy4vY29tcG9zZXItaGVscGVycyc7XG5pbXBvcnQge2lzVmFsaWRNZXJnZXIsIG1lcmdlU3RhdGVGcm9tTWVyZ2Vyc30gZnJvbSAnLi9tZXJnZXItaGFuZGxlcic7XG5pbXBvcnQge1xuICBWSVNfU1RBVEVfTUVSR0VSUyxcbiAgY3JlYXRlTGF5ZXJGcm9tQ29uZmlnLFxuICBpc1NhdmVkTGF5ZXJDb25maWdWMSxcbiAgcGFyc2VMYXllckNvbmZpZyxcbiAgc2VyaWFsaXplRmlsdGVyLFxuICBzZXJpYWxpemVMYXllcixcbiAgc2VyaWFsaXplVmlzU3RhdGUsXG4gIHZhbGlkYXRlTGF5ZXJXaXRoRGF0YVxufSBmcm9tICcuL3Zpcy1zdGF0ZS1tZXJnZXInO1xuXG5pbXBvcnQgS2VwbGVyR0xTY2hlbWEsIHtNZXJnZXIsIFBvc3RNZXJnZXJQYXlsb2FkLCBWaXNTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcbmltcG9ydCB7XG4gIGdldEZpbGVzVG9QYXJzZSxcbiAgaXNaaXBGaWxlTmFtZSxcbiAgbG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0LFxuICBwcm9jZXNzR2VvanNvbixcbiAgWmlwQXJjaGl2ZUV4cGFuc2lvblxufSBmcm9tICdAa2VwbGVyLmdsL3Byb2Nlc3NvcnMnO1xuXG5pbXBvcnQge1xuICBGaWx0ZXIsXG4gIEZlYXR1cmUsXG4gIEludGVyYWN0aW9uQ29uZmlnLFxuICBBbmltYXRpb25Db25maWcsXG4gIEZpbHRlckFuaW1hdGlvbkNvbmZpZyxcbiAgRWRpdG9yLFxuICBGaWVsZCxcbiAgTGF5ZXJWaXNDb25maWcsXG4gIFRpbWVSYW5nZUZpbHRlcixcbiAgQW5ub3RhdGlvbixcbiAgQW5ub3RhdGlvblByb3BzUGFydGlhbCxcbiAgUHJvdG9EYXRhc2V0LFxuICBDaGFydENvbmZpZyxcbiAgTGF5ZXJDaGFydENvbmZpZ1xufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7TG9hZGVyfSBmcm9tICdAbG9hZGVycy5nbC9sb2FkZXItdXRpbHMnO1xuXG5pbXBvcnQge1xuICBEYXRhc2V0cyxcbiAgS2VwbGVyVGFibGUsXG4gIEZpbHRlclByb3BzLFxuICBhc3NpZ25HcHVDaGFubmVsLFxuICBjb3B5VGFibGVBbmRVcGRhdGUsXG4gIGNyZWF0ZU5ld0RhdGFFbnRyeSxcbiAgcGluVGFibGVDb2x1bW5zLFxuICBzZXRGaWx0ZXJHcHVNb2RlLFxuICBzb3J0RGF0YXNldEJ5Q29sdW1uXG59IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuaW1wb3J0IHtmaW5kRmllbGRzVG9TaG93LCByZW1vdmVMYXllckZyb21ab29tT3BhY2l0eX0gZnJvbSAnLi9pbnRlcmFjdGlvbi11dGlscyc7XG5pbXBvcnQge1xuICBjYWxjdWxhdGVMYXllckRhdGEsXG4gIGZpbmREZWZhdWx0TGF5ZXIsXG4gIGdldExheWVyT3JkZXJGcm9tTGF5ZXJzLFxuICBtZXJnZUxheWVyVmlzQ29uZmlnRm9yTmV3RGF0YXNldHMsXG4gIGdldE5ld0xheWVyR3JvdXAsXG4gIGFkZExheWVyT3JHcm91cFRvTGF5ZXJPcmRlcixcbiAgcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyLFxuICBnZXRMYXllckdyb3VwRnJvbUxheWVyT3JkZXIsXG4gIGZpbmRQYXJlbnRHcm91cEZvckxheWVyLFxuICBnZXRJbmRleEZyb21MYXllckVudHJ5SWQsXG4gIHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIsXG4gIGdldEZsYXRMYXllck9yZGVyLFxuICByZXBsYWNlTGF5ZXJFbnRyeUluTGF5ZXJPcmRlclxufSBmcm9tICcuL2xheWVyLXV0aWxzJztcbmltcG9ydCB7Z2V0UHJvcFZhbHVlVG9NZXJnZXIsIGhhc1Byb3BzVG9NZXJnZX0gZnJvbSAnLi9tZXJnZXItaGFuZGxlcic7XG5pbXBvcnQge21lcmdlRGF0YXNldHNCeU9yZGVyfSBmcm9tICcuL3Zpcy1zdGF0ZS1tZXJnZXInO1xuaW1wb3J0IHtcbiAgYWRkR3JvdXBCeVVwZGF0ZXIsXG4gIGFkZEpvaW5VcGRhdGVyLFxuICBhZGRTcGF0aWFsSm9pblVwZGF0ZXIsXG4gIGV4ZWN1dGVHcm91cEJ5LFxuICBleGVjdXRlSm9pbixcbiAgZXhlY3V0ZVNwYXRpYWxKb2luLFxuICByZW1vdmVEYXRhc2V0T3BVcGRhdGVyLFxuICByZW1vdmVPcHNGb3JEYXRhc2V0cyxcbiAgc2V0R3JvdXBCeUNvbmZpZ1VwZGF0ZXIsXG4gIHNldEpvaW5Db25maWdVcGRhdGVyLFxuICBzZXRTcGF0aWFsSm9pbkNvbmZpZ1VwZGF0ZXJcbn0gZnJvbSAnLi9kYXRhc2V0LW9wcy11cGRhdGVycyc7XG5pbXBvcnQge1xuICBmaXhFZmZlY3RPcmRlcixcbiAgZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMsXG4gIGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMsXG4gIG1lcmdlVGltZURvbWFpbnMsXG4gIGFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3csXG4gIHVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZSxcbiAgbWVyZ2VQbG90R3JvdXBCeSxcbiAgZ2V0RGVmYXVsdFRpbWVGb3JtYXQsXG4gIExheWVyVG9GaWx0ZXJUaW1lSW50ZXJ2YWwsXG4gIFRJTUVfSU5URVJWQUxTX09SREVSRUQsXG4gIG1lcmdlRmlsdGVyRG9tYWluLFxuICBpbml0Q3VzdG9tUGFsZXR0ZUJ5Q3VzdG9tU2NhbGUsXG4gIGNvbGxlY3RDb2x1bW5WYWx1ZXMsXG4gIGdldENvbHVtblN0YXRpc3RpY3Ncbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2NyZWF0ZUVmZmVjdH0gZnJvbSAnQGtlcGxlci5nbC9lZmZlY3RzJztcbmltcG9ydCB7UGF5bG9hZEFjdGlvbn0gZnJvbSAnQHJlZHV4anMvdG9vbGtpdCc7XG5cbmltcG9ydCB7ZmluZE1hcEJvdW5kc30gZnJvbSAnLi9kYXRhLXV0aWxzJztcblxuLy8gZGlzYWJsZSBzdGFjayBjYXB0dXJlIGZvciB3aXRoVGFzayBjYWxscyB0aGF0IGhhcHBlbiBvdXRzaWRlIHN0cmljdCByZWR1Y2VyIGNvbnRleHRcbmRpc2FibGVTdGFja0NhcHR1cmluZygpO1xuXG4vKipcbiAqIFVwZGF0ZXJzIGZvciBgdmlzU3RhdGVgIHJlZHVjZXIuIENhbiBiZSB1c2VkIGluIHlvdXIgcm9vdCByZWR1Y2VyIHRvIGRpcmVjdGx5IG1vZGlmeSBrZXBsZXIuZ2wncyBzdGF0ZS5cbiAqIFJlYWQgbW9yZSBhYm91dCBbVXNpbmcgdXBkYXRlcnNdKC4uL2FkdmFuY2VkLXVzYWdlL3VzaW5nLXVwZGF0ZXJzLm1kKVxuICpcbiAqIEBwdWJsaWNcbiAqIEBleGFtcGxlXG4gKlxuICogaW1wb3J0IGtlcGxlckdsUmVkdWNlciwge3Zpc1N0YXRlVXBkYXRlcnN9IGZyb20gJ0BrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuICogLy8gUm9vdCBSZWR1Y2VyXG4gKiBjb25zdCByZWR1Y2VycyA9IGNvbWJpbmVSZWR1Y2Vycyh7XG4gKiAga2VwbGVyR2w6IGtlcGxlckdsUmVkdWNlcixcbiAqICBhcHA6IGFwcFJlZHVjZXJcbiAqIH0pO1xuICpcbiAqIGNvbnN0IGNvbXBvc2VkUmVkdWNlciA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gKiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICogICAgY2FzZSAnQ0xJQ0tfQlVUVE9OJzpcbiAqICAgICAgcmV0dXJuIHtcbiAqICAgICAgICAuLi5zdGF0ZSxcbiAqICAgICAgICBrZXBsZXJHbDoge1xuICogICAgICAgICAgLi4uc3RhdGUua2VwbGVyR2wsXG4gKiAgICAgICAgICBmb286IHtcbiAqICAgICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLmZvbyxcbiAqICAgICAgICAgICAgIHZpc1N0YXRlOiB2aXNTdGF0ZVVwZGF0ZXJzLmVubGFyZ2VGaWx0ZXJVcGRhdGVyKFxuICogICAgICAgICAgICAgICBzdGF0ZS5rZXBsZXJHbC5mb28udmlzU3RhdGUsXG4gKiAgICAgICAgICAgICAgIHtpZHg6IDB9XG4gKiAgICAgICAgICAgICApXG4gKiAgICAgICAgICB9XG4gKiAgICAgICAgfVxuICogICAgICB9O1xuICogIH1cbiAqICByZXR1cm4gcmVkdWNlcnMoc3RhdGUsIGFjdGlvbik7XG4gKiB9O1xuICpcbiAqIGV4cG9ydCBkZWZhdWx0IGNvbXBvc2VkUmVkdWNlcjtcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG4vLyBAdHMtaWdub3JlXG5jb25zdCB2aXNTdGF0ZVVwZGF0ZXJzID0gbnVsbDtcbi8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0SW50ZXJhY3Rpb25Db25maWc6IEludGVyYWN0aW9uQ29uZmlnID0ge1xuICB0b29sdGlwOiB7XG4gICAgaWQ6ICd0b29sdGlwJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy50b29sdGlwJyxcbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIGNvbmZpZzoge1xuICAgICAgZmllbGRzVG9TaG93OiB7fSxcbiAgICAgIGNvbXBhcmVNb2RlOiBmYWxzZSxcbiAgICAgIGNvbXBhcmVUeXBlOiBDT01QQVJFX1RZUEVTLkFCU09MVVRFXG4gICAgfVxuICB9LFxuICBsZWdlbmQ6IHtcbiAgICBpZDogJ2xlZ2VuZCcsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMubGVnZW5kJyxcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBjb25maWc6IHtcbiAgICAgIGhpZGVJbnZpc2libGVMYXllcnM6IGZhbHNlXG4gICAgfVxuICB9LFxuICBnZW9jb2Rlcjoge1xuICAgIGlkOiAnZ2VvY29kZXInLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmdlb2NvZGVyJyxcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICBwb3NpdGlvbjogbnVsbCxcbiAgICBjb25maWc6IHtcbiAgICAgIGxpbWl0U2VhcmNoOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgYnJ1c2g6IHtcbiAgICBpZDogJ2JydXNoJyxcbiAgICBsYWJlbDogJ2ludGVyYWN0aW9ucy5icnVzaCcsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgY29uZmlnOiB7XG4gICAgICAvLyBzaXplIGlzIGluIGttXG4gICAgICBzaXplOiAyLjVcbiAgICB9XG4gIH0sXG4gIGNvb3JkaW5hdGU6IHtcbiAgICBpZDogJ2Nvb3JkaW5hdGUnLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmNvb3JkaW5hdGUnLFxuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIHBvc2l0aW9uOiBudWxsXG4gIH0sXG4gIGFubm90YXRpb246IHtcbiAgICBpZDogJ2Fubm90YXRpb24nLFxuICAgIGxhYmVsOiAnaW50ZXJhY3Rpb25zLmFubm90YXRpb24nLFxuICAgIGVuYWJsZWQ6IGZhbHNlXG4gIH0sXG4gIHpvb21PcGFjaXR5OiB7XG4gICAgaWQ6ICd6b29tT3BhY2l0eScsXG4gICAgbGFiZWw6ICdpbnRlcmFjdGlvbnMuZmFkZU9uWm9vbScsXG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgY29uZmlnOiB7XG4gICAgICBjb250cm9sbGVyczogW11cbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FOSU1BVElPTl9DT05GSUc6IEFuaW1hdGlvbkNvbmZpZyA9IHtcbiAgZG9tYWluOiBudWxsLFxuICBjdXJyZW50VGltZTogbnVsbCxcbiAgc3BlZWQ6IDEsXG4gIGlzQW5pbWF0aW5nOiBmYWxzZSxcbiAgdGltZVN0ZXBzOiBudWxsLFxuICB0aW1lRm9ybWF0OiBudWxsLFxuICB0aW1lem9uZTogbnVsbCxcbiAgZGVmYXVsdFRpbWVGb3JtYXQ6IG51bGwsXG4gIGhpZGVDb250cm9sOiBmYWxzZSxcbiAgZHVyYXRpb246IG51bGxcbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VESVRPUjogRWRpdG9yID0ge1xuICBtb2RlOiBFRElUT1JfTU9ERVMuRFJBV19QT0xZR09OLFxuICBmZWF0dXJlczogW10sXG4gIHNlbGVjdGVkRmVhdHVyZTogbnVsbCxcbiAgdmlzaWJsZTogdHJ1ZVxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGluaXRpYWwgYHZpc1N0YXRlYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBjb25zdGFudFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgSU5JVElBTF9WSVNfU1RBVEU6IFZpc1N0YXRlID0ge1xuICAvLyBtYXAgaW5mb1xuICBtYXBJbmZvOiB7XG4gICAgdGl0bGU6ICcnLFxuICAgIGRlc2NyaXB0aW9uOiAnJ1xuICB9LFxuICAvLyBsYXllcnNcbiAgbGF5ZXJzOiBbXSxcbiAgbGF5ZXJEYXRhOiBbXSxcbiAgbGF5ZXJUb0JlTWVyZ2VkOiBbXSxcbiAgbGF5ZXJPcmRlcjogW10sXG4gIGxheWVyT3JkZXJUb0JlTWVyZ2VkOiBudWxsLFxuXG4gIC8vIGZpbHRlcnNcbiAgZmlsdGVyczogW10sXG4gIGZpbHRlclRvQmVNZXJnZWQ6IFtdLFxuXG4gIC8vIGEgY29sbGVjdGlvbiBvZiBtdWx0aXBsZSBkYXRhc2V0XG4gIGRhdGFzZXRzOiB7fSxcbiAgZWRpdGluZ0RhdGFzZXQ6IHVuZGVmaW5lZCxcbiAgZ3JvdXBCeXM6IFtdLFxuICBqb2luczogW10sXG5cbiAgLy8gZWZmZWN0c1xuICBlZmZlY3RzOiBbXSxcbiAgZWZmZWN0T3JkZXI6IFtdLFxuXG4gIC8vIGNoYXJ0cyAoZW5hYmxlZCBieSBkZWZhdWx0OyBnYXRlZCBieSBlbmFibGVDaGFydHNQYW5lbClcbiAgY2hhcnRzOiBbXSxcbiAgY2hhcnRzVG9CZU1lcmdlZDogW10sXG5cbiAgLy8gYW5ub3RhdGlvbnNcbiAgYW5ub3RhdGlvbnM6IFtdLFxuICBhbm5vdGF0aW9uc1RvQmVNZXJnZWQ6IFtdLFxuICBzZWxlY3RlZEFubm90YXRpb25JZDogbnVsbCxcbiAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ6IGZhbHNlLFxuXG4gIGludGVyYWN0aW9uQ29uZmlnOiBkZWZhdWx0SW50ZXJhY3Rpb25Db25maWcsXG4gIGludGVyYWN0aW9uVG9CZU1lcmdlZDoge30sXG5cbiAgbGF5ZXJCbGVuZGluZzogJ25vcm1hbCcsXG4gIG92ZXJsYXlCbGVuZGluZzogJ25vcm1hbCcsXG4gIGhvdmVySW5mbzogdW5kZWZpbmVkLFxuICBjbGlja2VkOiB1bmRlZmluZWQsXG4gIG1vdXNlUG9zOiB7fSxcbiAgbWF4RGVmYXVsdFRvb2x0aXBzOiBNQVhfREVGQVVMVF9UT09MVElQUyxcblxuICAvLyB0aGlzIGlzIHVzZWQgd2hlbiB1c2VyIHNwbGl0IG1hcHNcbiAgc3BsaXRNYXBzOiBbXG4gICAgLy8gdGhpcyB3aWxsIGNvbnRhaW4gYSBsaXN0IG9mIG9iamVjdHMgdG9cbiAgICAvLyBkZXNjcmliZSB0aGUgc3RhdGUgb2YgbGF5ZXIgYXZhaWxhYmlsaXR5IGFuZCB2aXNpYmlsaXR5IGZvciBlYWNoIG1hcFxuICAgIC8vIFtcbiAgICAvLyAgIHtcbiAgICAvLyAgICAgIGxheWVyczoge2xheWVyX2lkOiB0cnVlIHwgZmFsc2V9XG4gICAgLy8gICB9XG4gICAgLy8gXVxuICBdLFxuICBzcGxpdE1hcHNUb0JlTWVyZ2VkOiBbXSxcbiAgaXNNZXJnaW5nRGF0YXNldHM6IHt9LFxuICAvLyBkZWZhdWx0cyBsYXllciBjbGFzc2VzXG4gIGxheWVyQ2xhc3NlczogTGF5ZXJDbGFzc2VzLFxuXG4gIC8vIGRlZmF1bHQgYW5pbWF0aW9uXG4gIC8vIHRpbWUgaW4gdW5peCB0aW1lc3RhbXAgKG1pbGxpc2Vjb25kcykgKHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSB0aGUgVW5peCBFcG9jaClcbiAgYW5pbWF0aW9uQ29uZmlnOiBERUZBVUxUX0FOSU1BVElPTl9DT05GSUcsXG5cbiAgZWRpdG9yOiBERUZBVUxUX0VESVRPUixcblxuICBmaWxlTG9hZGluZzogZmFsc2UsXG4gIGZpbGVMb2FkaW5nUHJvZ3Jlc3M6IHt9LFxuICBzdGFnZWRUb0FkZDogbnVsbCxcbiAgLy8gZm9yIGxvYWRpbmcgZGF0YXNldHNcbiAgbG9hZGluZ0luZGljYXRvclZhbHVlOiAwLFxuICBsb2FkaW5nUHJvZ3Jlc3M6IHt9LFxuICBsb2FkaW5nUHJvY2Vzc2luZzoge30sXG5cbiAgbG9hZGVyczogW10sXG4gIGxvYWRPcHRpb25zOiB7fSxcblxuICAvLyB2aXNTdGF0ZU1lcmdlcnNcbiAgbWVyZ2VyczogVklTX1NUQVRFX01FUkdFUlMsXG5cbiAgLy8ga2VwbGVyIHNjaGVtYXNcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYVxufTtcblxuZXhwb3J0IGNvbnN0IEFDVElPTl9UQVNLX0ZJVF9CT1VORFMgPSBUYXNrLmZyb21DYWxsYmFjayhcbiAgKF8sIGNiKSA9PiBjYigpLFxuXG4gICdBQ1RJT05fVEFTS19GSVRfQk9VTkRTJ1xuKTtcblxuZXhwb3J0IGNvbnN0IEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04gPSBUYXNrLmZyb21DYWxsYmFjayhcbiAgKF8sIGNiKSA9PiBjYigpLFxuXG4gICdBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OJ1xuKTtcblxudHlwZSBVcGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGFUeXBlID0ge1xuICBsYXllcnM6IExheWVyW107XG4gIGxheWVyRGF0YTogYW55W107XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBzdGF0ZSB3aXRoIHVwZGF0ZWQgbGF5ZXIgYW5kIGxheWVyRGF0YVxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YTxTIGV4dGVuZHMgVXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhVHlwZT4oXG4gIHN0YXRlOiBTLFxuICB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fToge2xheWVyRGF0YT86IGFueTsgbGF5ZXI6IExheWVyOyBpZHg6IG51bWJlcn1cbik6IFMge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3RhdGUubGF5ZXJzLm1hcCgobHlyLCBpKSA9PiAoaSA9PT0gaWR4ID8gbGF5ZXIgOiBseXIpKSxcbiAgICBsYXllckRhdGE6IGxheWVyRGF0YVxuICAgICAgPyBzdGF0ZS5sYXllckRhdGEubWFwKChkLCBpKSA9PiAoaSA9PT0gaWR4ID8gbGF5ZXJEYXRhIDogZCkpXG4gICAgICA6IHN0YXRlLmxheWVyRGF0YVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3RhdGVPbkxheWVyVmlzaWJpbGl0eUNoYW5nZTxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBsYXllcjogTGF5ZXIpOiBTIHtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGlmIChzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHNwbGl0TWFwczogbGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgICAgICA/IGFkZE5ld0xheWVyc1RvU3BsaXRNYXAoc3RhdGUuc3BsaXRNYXBzLCBsYXllcilcbiAgICAgICAgOiByZW1vdmVMYXllckZyb21TcGxpdE1hcHMoc3RhdGUuc3BsaXRNYXBzLCBsYXllcilcbiAgICB9O1xuICB9XG5cbiAgaWYgKGxheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0d28gb2JqZWN0cyAob3IgYXJyYXlzKSBhbmQgcmV0dXJucyBhIG5ldyBvYmplY3Qgd2l0aCBvbmx5IHRoZVxuICogcHJvcGVydGllcyB0aGF0IGhhdmUgY2hhbmdlZCBiZXR3ZWVuIHRoZSB0d28gb2JqZWN0cy5cbiAqL1xuZnVuY3Rpb24gcGlja0NoYW5nZWRQcm9wczxUPihwcmV2OiBULCBuZXh0OiBUKTogUGFydGlhbDxUPiB7XG4gIGNvbnN0IGNoYW5nZWRQcm9wczogUGFydGlhbDxUPiA9IHt9O1xuICBjb25zdCBwaWNrUHJvcHNPZiA9IG9iaiA9PiB7XG4gICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlZFByb3BzLCBrZXkpICYmXG4gICAgICAgICFpc0VxdWFsKHByZXZba2V5XSwgbmV4dFtrZXldKVxuICAgICAgKSB7XG4gICAgICAgIGNoYW5nZWRQcm9wc1trZXldID0gbmV4dFtrZXldO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBwaWNrUHJvcHNPZihwcmV2KTtcbiAgcGlja1Byb3BzT2YobmV4dCk7XG4gIHJldHVybiBjaGFuZ2VkUHJvcHM7XG59XG5cbmNvbnN0IFZJU1VBTF9DSEFOTkVMX1BST1BfVFlQRVMgPSBbJ2ZpZWxkJywgJ3NjYWxlJywgJ2RvbWFpbicsICdhZ2dyZWdhdGlvbiddO1xuXG4vKipcbiAqIEFwcGx5IGxheWVyIGNvbmZpZ1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eSwgbWF4LXN0YXRlbWVudHNcbmV4cG9ydCBmdW5jdGlvbiBhcHBseUxheWVyQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BcHBseUxheWVyQ29uZmlnVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXJJZCwgbmV3TGF5ZXJDb25maWcsIGxheWVySW5kZXh9ID0gYWN0aW9uO1xuICAvLyBTYXZlZCBjb25maWdzIGhhdmUgYSB2aXN1YWxDaGFubmVscyBzaWJsaW5nOyBwYXJzZWQvZWRpdG9yIEpTT04gZm9sZHMgdGhvc2VcbiAgLy8gZmllbGRzIGludG8gY29uZmlnLiBSZS1wYXJzaW5nIHRoZSBsYXR0ZXIgZHJvcHMgY29sb3JGaWVsZCBhbmQgcmVzZXRzIHRoZSBzY2FsZS5cbiAgY29uc3QgbmV3UGFyc2VkTGF5ZXIgPSBpc1NhdmVkTGF5ZXJDb25maWdWMShuZXdMYXllckNvbmZpZylcbiAgICA/IHBhcnNlTGF5ZXJDb25maWcoc3RhdGUuc2NoZW1hLCBuZXdMYXllckNvbmZpZylcbiAgICA6IG5ld0xheWVyQ29uZmlnO1xuICBjb25zdCBvbGRMYXllciA9IHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXJJZCk7XG4gIGlmICghb2xkTGF5ZXIgfHwgIW5ld1BhcnNlZExheWVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChsYXllckluZGV4ICE9PSBudWxsICYmIGxheWVySW5kZXggIT09IHVuZGVmaW5lZCAmJiBzdGF0ZS5sYXllcnNbbGF5ZXJJbmRleF0gIT09IG9sZExheWVyKSB7XG4gICAgLy8gbGF5ZXJJbmRleCBpcyBwcm92aWRlZCwgYnV0IGl0IGRvZXNuJ3QgbWF0Y2ggdGhlIG9sZExheWVyXG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tuZXdQYXJzZWRMYXllci5jb25maWcuZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIC8vIE1ha2Ugc3VyZSB0aGUgbGF5ZXIgaXMgdmFsaWQgYW5kIGNvbnZlcnQgaXQgdG8gTGF5ZXJcbiAgY29uc3QgbmV3TGF5ZXIgPSB2YWxpZGF0ZUxheWVyV2l0aERhdGEoZGF0YXNldCwgbmV3UGFyc2VkTGF5ZXIsIHN0YXRlLmxheWVyQ2xhc3Nlcyk7XG4gIGlmICghbmV3TGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgbmV4dFN0YXRlID0gc3RhdGU7XG5cbiAgaWYgKG5ld0xheWVyLnR5cGUgJiYgbmV3TGF5ZXIudHlwZSAhPT0gb2xkTGF5ZXIudHlwZSkge1xuICAgIGNvbnN0IG9sZExheWVySW5kZXggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXJJZCk7XG4gICAgaWYgKG9sZExheWVySW5kZXggPj0gMCkge1xuICAgICAgbmV4dFN0YXRlID0gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcihuZXh0U3RhdGUsIGxheWVyVHlwZUNoYW5nZShvbGRMYXllciwgbmV3TGF5ZXIudHlwZSkpO1xuICAgICAgLy8gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlciBjaGFuZ2VzIHRoZSBpZCBvZiB0aGUgbGF5ZXIsIHNvIHdlIG5lZWQgdG8gb2J0YWluIHRoZSBuZXcgaWRcbiAgICAgIC8vIGJ1dCBmaXJzdCBtYWtlIHN1cmUgdGhhdCB0aGUgbGF5ZXIgd2FzIG5vdCByZW1vdmVkXG4gICAgICBpZiAobmV4dFN0YXRlLmxheWVycy5sZW5ndGggPT09IHN0YXRlLmxheWVycy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgbmV3TGF5ZXJJZCA9IG5leHRTdGF0ZS5sYXllcnNbb2xkTGF5ZXJJbmRleF0uaWQ7XG4gICAgICAgIG5leHRTdGF0ZSA9IGFwcGx5TGF5ZXJDb25maWdVcGRhdGVyKFxuICAgICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgICBhcHBseUxheWVyQ29uZmlnKG5ld0xheWVySWQsIHsuLi5uZXdMYXllckNvbmZpZywgaWQ6IG5ld0xheWVySWR9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV4dFN0YXRlO1xuICB9XG5cbiAgLy8gc2VyaWFsaXplTGF5ZXIoKSBtaWdodCByZXR1cm4gbnVsbCBpZiB0aGUgb2xkIGxheWVyIGlzIG5vdCB2YWxpZCxcbiAgLy8gd2Ugc2hvdWxkIHN0aWxsIGFwcGx5IHRoZSBjaGFuZ2VzIGluIHRoYXQgY2FzZVxuICBjb25zdCBzZXJpYWxpemVkT2xkTGF5ZXIgPSBzZXJpYWxpemVMYXllcihvbGRMYXllciwgc3RhdGUuc2NoZW1hKSA/PyB7Y29uZmlnOiB7fX07XG4gIGNvbnN0IHNlcmlhbGl6ZWROZXdMYXllciA9IHNlcmlhbGl6ZUxheWVyKG5ld0xheWVyLCBzdGF0ZS5zY2hlbWEpO1xuICBpZiAoIXNlcmlhbGl6ZWROZXdMYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBpZiAoIWlzRXF1YWwoc2VyaWFsaXplZE9sZExheWVyLCBzZXJpYWxpemVkTmV3TGF5ZXIpKSB7XG4gICAgY29uc3QgY2hhbmdlZCA9IHBpY2tDaGFuZ2VkUHJvcHMoc2VyaWFsaXplZE9sZExheWVyLmNvbmZpZywgc2VyaWFsaXplZE5ld0xheWVyLmNvbmZpZyk7XG5cbiAgICBpZiAoJ3Zpc0NvbmZpZycgaW4gY2hhbmdlZCkge1xuICAgICAgaWYgKGNoYW5nZWQudmlzQ29uZmlnKSB7XG4gICAgICAgIG5leHRTdGF0ZSA9IGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgbGF5ZXJWaXNDb25maWdDaGFuZ2Uob2xkTGF5ZXIsIGNoYW5nZWQudmlzQ29uZmlnKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgZGVsZXRlIGNoYW5nZWQudmlzQ29uZmlnO1xuICAgIH1cblxuICAgIE9iamVjdC5rZXlzKG9sZExheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKGNoYW5uZWxOYW1lID0+IHtcbiAgICAgIGNvbnN0IGNoYW5uZWwgPSBvbGRMYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsTmFtZV07XG4gICAgICBjb25zdCBjaGFubmVsUHJvcE5hbWVzID0gVklTVUFMX0NIQU5ORUxfUFJPUF9UWVBFUy5tYXAocHJvcCA9PiBjaGFubmVsW3Byb3BdKTtcbiAgICAgIGlmIChjaGFubmVsUHJvcE5hbWVzLnNvbWUocHJvcCA9PiBwcm9wIGluIGNoYW5nZWQpKSB7XG4gICAgICAgIG5leHRTdGF0ZSA9IGxheWVyVmlzdWFsQ2hhbm5lbENoYW5nZVVwZGF0ZXIoXG4gICAgICAgICAgbmV4dFN0YXRlLFxuICAgICAgICAgIGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZShcbiAgICAgICAgICAgIG9sZExheWVyLFxuICAgICAgICAgICAgcGljayhuZXdMYXllci5jb25maWcsIGNoYW5uZWxQcm9wTmFtZXMpLFxuICAgICAgICAgICAgY2hhbm5lbE5hbWVcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBjaGFubmVsUHJvcE5hbWVzKSB7XG4gICAgICAgICAgZGVsZXRlIGNoYW5nZWRbcHJvcF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChPYmplY3Qua2V5cyhjaGFuZ2VkKS5sZW5ndGggPiAwKSB7XG4gICAgICBuZXh0U3RhdGUgPSBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gICAgICAgIG5leHRTdGF0ZSxcbiAgICAgICAgbGF5ZXJDb25maWdDaGFuZ2Uob2xkTGF5ZXIsIHBpY2sobmV3TGF5ZXIuY29uZmlnLCBPYmplY3Qua2V5cyhjaGFuZ2VkKSkpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZWxheWVyVmlzaWJpbHR5KHN0YXRlOiBWaXNTdGF0ZSwgbmV3TGF5ZXI6IExheWVyLCBpc1Zpc2libGU/OiBib29sZWFuKTogVmlzU3RhdGUge1xuICBsZXQgbmV3U3RhdGUgPSB1cGRhdGVTdGF0ZU9uTGF5ZXJWaXNpYmlsaXR5Q2hhbmdlKHN0YXRlLCBuZXdMYXllcik7XG4gIGNvbnN0IGZpbHRlckluZGV4ID0gZmlsdGVyU3luY2VkV2l0aFRpbWVsaW5lKHN0YXRlKTtcbiAgaWYgKGlzTGF5ZXJBbmltYXRhYmxlKG5ld0xheWVyKSAmJiBmaWx0ZXJJbmRleCAhPT0gLTEpIHtcbiAgICAvLyBpZiBsYXllciBpcyBnb2luZyB0byBiZSB2aXNpYmxlIHdlIHN5bmMgd2l0aCBmaWx0ZXIgb3RoZXJ3aXNlIHdlIG5lZWQgdG8gY2hlY2sgd2hldGhlciBvdGhlciBhbmltYXRhYmxlIGxheWVycyBleGlzdHMgYW5kIGFyZSB2aXNpYmxlXG4gICAgbmV3U3RhdGUgPSBzeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWR4OiBmaWx0ZXJJbmRleCxcbiAgICAgIGVuYWJsZTogaXNWaXNpYmxlID8gaXNWaXNpYmxlIDogZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMoc3RhdGUubGF5ZXJzKS5sZW5ndGggPiAwXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBiYXNlIGNvbmZpZzogZGF0YUlkLCBsYWJlbCwgY29sdW1uLCBpc1Zpc2libGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBmdW5jdGlvbiBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllcn0gPSBhY3Rpb247XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGNvbnN0IHByb3BzID0gT2JqZWN0LmtleXMoYWN0aW9uLm5ld0NvbmZpZyk7XG4gIGlmIChcbiAgICB0eXBlb2YgYWN0aW9uLm5ld0NvbmZpZy5kYXRhSWQgPT09ICdzdHJpbmcnICYmXG4gICAgYWN0aW9uLm5ld0NvbmZpZy5kYXRhSWQgIT09IG9sZExheWVyLmNvbmZpZy5kYXRhSWRcbiAgKSB7XG4gICAgY29uc3Qge2RhdGFJZCwgLi4ucmVzdENvbmZpZ30gPSBhY3Rpb24ubmV3Q29uZmlnO1xuICAgIGNvbnN0IHN0YXRlV2l0aERhdGFJZCA9IGxheWVyRGF0YUlkQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgICAgb2xkTGF5ZXIsXG4gICAgICBuZXdDb25maWc6IHtkYXRhSWR9XG4gICAgfSk7XG4gICAgY29uc3QgbmV4dExheWVyID0gc3RhdGVXaXRoRGF0YUlkLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICAgIHJldHVybiBuZXh0TGF5ZXIgJiYgT2JqZWN0LmtleXMocmVzdENvbmZpZykubGVuZ3RoXG4gICAgICA/IGxheWVyQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZVdpdGhEYXRhSWQsIHtvbGRMYXllcjogbmV4dExheWVyLCBuZXdDb25maWc6IHJlc3RDb25maWd9KVxuICAgICAgOiBzdGF0ZVdpdGhEYXRhSWQ7XG4gIH1cblxuICBsZXQgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyhhY3Rpb24ubmV3Q29uZmlnKTtcblxuICBsZXQgbGF5ZXJEYXRhO1xuXG4gIGlmIChuZXdMYXllci5zaG91bGRDYWxjdWxhdGVMYXllckRhdGEocHJvcHMpKSB7XG4gICAgY29uc3Qgb2xkTGF5ZXJEYXRhID0gc3RhdGUubGF5ZXJEYXRhW2lkeF07XG5cbiAgICBjb25zdCB1cGRhdGVMYXllckRhdGFSZXN1bHQgPSBjYWxjdWxhdGVMYXllckRhdGEobmV3TGF5ZXIsIHN0YXRlLCBvbGRMYXllckRhdGEpO1xuICAgIG5ld0xheWVyID0gdXBkYXRlTGF5ZXJEYXRhUmVzdWx0LmxheWVyO1xuICAgIGxheWVyRGF0YSA9IHVwZGF0ZUxheWVyRGF0YVJlc3VsdC5sYXllckRhdGE7XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgaWYgKCdpc1Zpc2libGUnIGluIGFjdGlvbi5uZXdDb25maWcpIHtcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZWxheWVyVmlzaWJpbHR5KG5ld1N0YXRlLCBuZXdMYXllciwgYWN0aW9uLm5ld0NvbmZpZy5pc1Zpc2libGUpO1xuICB9XG5cbiAgaWYgKCdjb2x1bW5zJyBpbiBhY3Rpb24ubmV3Q29uZmlnICYmIG5ld0xheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIC8vIFRPRE86IFNoYW4sIG1ha2UgdGhlIGFuaW1hdGlvbiBjb25maWcgZnVuY3Rpb24gbW9yZSByb2J1c3RcbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihuZXdTdGF0ZSk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5ld1N0YXRlLCB7XG4gICAgbGF5ZXI6IG5ld0xheWVyLFxuICAgIGxheWVyRGF0YSxcbiAgICBpZHhcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXllckFuaW1hdGlvbkNoYW5nZVVwZGF0ZXI8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgYWN0aW9uKTogUyB7XG4gIGNvbnN0IHtvbGRMYXllciwgcHJvcCwgdmFsdWV9ID0gYWN0aW9uO1xuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuXG4gIGNvbnN0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgIGFuaW1hdGlvbjoge1xuICAgICAgLi4ub2xkTGF5ZXIuY29uZmlnLmFuaW1hdGlvbixcbiAgICAgIFtwcm9wXTogdmFsdWVcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIHN0YXRlLmxheWVyRGF0YVtpZHhdKTtcblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVySWQsIGlzVmlzaWJsZSwgc3BsaXRNYXBJZFxuICogaGFuZGxlcyB0d28gY2FzZXM6XG4gKiAxKSB0b2dnbGUgdGhlIHZpc2liaWxpdHkgb2YgbG9jYWwgU3BsaXRNYXAgbGF5ZXIgKHZpc1N0YXRlLnNwbGl0TWFwLmxheWVycylcbiAqIDIpIHRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiBnbG9iYWwgbGF5ZXIgKHZpc1N0YXRlLmxheWVycylcblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJUb2dnbGVWaXNpYmlsaXR5VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclRvZ2dsZVZpc2liaWxpdHlVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtsYXllcklkLCBpc1Zpc2libGUsIHNwbGl0TWFwSWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllciA9IHN0YXRlLmxheWVycy5maW5kKGQgPT4gZC5pZCA9PT0gbGF5ZXJJZCk7XG5cbiAgaWYgKCFsYXllcikge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHN0YXRlO1xuXG4gIGlmIChzcGxpdE1hcElkKSB7XG4gICAgLy8gW2Nhc2UgMV06IHRvZ2dsZSBsb2NhbCBsYXllciB2aXNpYmlsaXR5IGZvciBlYWNoIFNwbGl0TWFwXG4gICAgY29uc3QgbWFwSW5kZXggPSBuZXdTdGF0ZS5zcGxpdE1hcHMuZmluZEluZGV4KHNtID0+IHNtLmlkID09PSBzcGxpdE1hcElkKTtcbiAgICBpZiAoaXNWaXNpYmxlKSB7XG4gICAgICAvLyAxKSBpZiB0aGUgbGF5ZXIgaXMgaW52aXNpYmxlIGdsb2JhbGx5XG4gICAgICAvLyAtPiBzZXQgZ2xvYmFsIHZpc2liaWxpdHkgdG8gdHJ1ZVxuICAgICAgbmV3U3RhdGUgPSBsYXllckNvbmZpZ0NoYW5nZVVwZGF0ZXIobmV3U3RhdGUsIGxheWVyQ29uZmlnQ2hhbmdlKGxheWVyLCB7aXNWaXNpYmxlOiB0cnVlfSkpO1xuXG4gICAgICAvLyAtPiBzZXQgbG9jYWwgdmlzaWJpbGl0eSB0byB0cnVlIGFuZCB0aGUgbG9jYWwgdmlzaWJpbGl0aWVzIG9mIGFsbCBvdGhlciBTcGxpdE1hcHMgdG8gZmFsc2VcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgICBzcGxpdE1hcHM6IG5ld1N0YXRlLnNwbGl0TWFwcy5tYXAoc20gPT5cbiAgICAgICAgICBzbS5pZCAhPT0gc3BsaXRNYXBJZFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgLi4uc20sXG4gICAgICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgICAgICAuLi5zbS5sYXllcnMsXG4gICAgICAgICAgICAgICAgICBbbGF5ZXJJZF06IGZhbHNlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAuLi5zbSxcbiAgICAgICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgICAgIC4uLnNtLmxheWVycyxcbiAgICAgICAgICAgICAgICAgIFtsYXllcklkXTogdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9O1xuICAgIH1cbiAgICAvLyAyKSBlbHNlIHdoZW4gdGhlIGxheWVyIGlzIHZpc2libGUgZ2xvYmFsbHlcbiAgICByZXR1cm4gdG9nZ2xlTGF5ZXJGb3JNYXBVcGRhdGVyKG5ld1N0YXRlLCB0b2dnbGVMYXllckZvck1hcChtYXBJbmRleCwgbGF5ZXJJZCkpO1xuICB9IGVsc2Uge1xuICAgIC8vIFtjYXNlIDJdOiB0b2dnbGUgZ2xvYmFsIGxheWVyIHZpc2liaWxpdHlcbiAgICBjb25zdCBuZXdMYXllciA9IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtpc1Zpc2libGV9KTtcbiAgICBjb25zdCBpZHggPSBuZXdTdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gbGF5ZXJJZCk7XG5cbiAgICBuZXdTdGF0ZSA9IHVwZGF0ZWxheWVyVmlzaWJpbHR5KG5ld1N0YXRlLCBuZXdMYXllciwgaXNWaXNpYmxlKTtcbiAgICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5ld1N0YXRlLCB7XG4gICAgICBsYXllcjogbmV3TGF5ZXIsXG4gICAgICBpZHhcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gc3RhdGVcbiAqIEByZXR1cm5zIGluZGV4IG9mIHRoZSBmaWx0ZXIgc3luY2VkIHRvIHRpbWVsaW5lIG9yIC0xXG4gKi9cbmZ1bmN0aW9uIGZpbHRlclN5bmNlZFdpdGhUaW1lbGluZShzdGF0ZTogVmlzU3RhdGUpOiBudW1iZXIge1xuICByZXR1cm4gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiAoZiBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lKTtcbn1cblxuLyoqXG4gKiBVcGRhdGVzIGlzVmFsaWQgZmxhZyBvZiBhIGxheWVyLlxuICogVXBkYXRlcyBpc1Zpc2libGUgYmFzZWQgb24gdGhlIHZhbHVlIG9mIGlzVmFsaWQuXG4gKiBUcmlnZ2VycyB1cGRhdGUgb2YgZGF0YSBmb3IgdGhlIGxheWVyIGluIG9yZGVyIHRvIGdldCBlcnJvcnMgYWdhaW4gZHVyaW5nIG5leHQgdXBkYXRlIGl0ZXJhdGlvbi5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyU2V0SXNWYWxpZFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJTZXRJc1ZhbGlkVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7b2xkTGF5ZXIsIGlzVmFsaWR9ID0gYWN0aW9uO1xuXG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG4gIGNvbnN0IGxheWVyVG9VcGRhdGUgPSBzdGF0ZS5sYXllcnNbaWR4XTtcbiAgaWYgKGxheWVyVG9VcGRhdGUpIHtcbiAgICBsZXQgbmV3TGF5ZXI7XG4gICAgbGV0IG5ld0RhdGEgPSBudWxsO1xuXG4gICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgIC8vIFRyaWdnZXIgZGF0YSB1cGRhdGUgaW4gb3JkZXIgdG8gc2hvdyBlcnJvcnMgYWdhaW4gaWYgcHJlc2VudC5cbiAgICAgIGNvbnN0IHtsYXllciwgbGF5ZXJEYXRhfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShsYXllclRvVXBkYXRlLCBzdGF0ZSwgdW5kZWZpbmVkKTtcbiAgICAgIG5ld0xheWVyID0gbGF5ZXI7XG4gICAgICBuZXdEYXRhID0gbGF5ZXJEYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllciA9IGxheWVyVG9VcGRhdGUudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICBpc1Zpc2libGU6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIG5ld0xheWVyLmlzVmFsaWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHN0YXRlLCB7aWR4LCBsYXllcjogbmV3TGF5ZXIsIGxheWVyRGF0YTogbmV3RGF0YX0pO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5mdW5jdGlvbiBhZGRPclJlbW92ZVRleHRMYWJlbHMobmV3RmllbGRzLCB0ZXh0TGFiZWwsIGRlZmF1bHRUZXh0TGFiZWwgPSBERUZBVUxUX1RFWFRfTEFCRUwpIHtcbiAgbGV0IG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5zbGljZSgpO1xuXG4gIGNvbnN0IGN1cnJlbnRGaWVsZHMgPSB0ZXh0TGFiZWwubWFwKHRsID0+IHRsLmZpZWxkICYmIHRsLmZpZWxkLm5hbWUpLmZpbHRlcihkID0+IGQpO1xuXG4gIGNvbnN0IGFkZEZpZWxkcyA9IG5ld0ZpZWxkcy5maWx0ZXIoZiA9PiAhY3VycmVudEZpZWxkcy5pbmNsdWRlcyhmLm5hbWUpKTtcbiAgY29uc3QgZGVsZXRlRmllbGRzID0gY3VycmVudEZpZWxkcy5maWx0ZXIoZiA9PiAhbmV3RmllbGRzLmZpbmQoZmQgPT4gZmQubmFtZSA9PT0gZikpO1xuXG4gIC8vIGRlbGV0ZVxuICBuZXdUZXh0TGFiZWwgPSBuZXdUZXh0TGFiZWwuZmlsdGVyKHRsID0+IHRsLmZpZWxkICYmICFkZWxldGVGaWVsZHMuaW5jbHVkZXModGwuZmllbGQubmFtZSkpO1xuICBuZXdUZXh0TGFiZWwgPSAhbmV3VGV4dExhYmVsLmxlbmd0aCA/IFtkZWZhdWx0VGV4dExhYmVsXSA6IG5ld1RleHRMYWJlbDtcblxuICAvLyBhZGRcbiAgbmV3VGV4dExhYmVsID0gW1xuICAgIC4uLm5ld1RleHRMYWJlbC5maWx0ZXIodGwgPT4gdGwuZmllbGQpLFxuICAgIC4uLmFkZEZpZWxkcy5tYXAoYWYgPT4gKHtcbiAgICAgIC4uLmRlZmF1bHRUZXh0TGFiZWwsXG4gICAgICBmaWVsZDogYWYsXG4gICAgICBjb2xsaXNpb25FbmFibGVkOiBCb29sZWFuKFxuICAgICAgICB0ZXh0TGFiZWwuZmluZCh0bCA9PiB0bC5jb2xsaXNpb25FbmFibGVkKT8uY29sbGlzaW9uRW5hYmxlZCA/P1xuICAgICAgICAgIGRlZmF1bHRUZXh0TGFiZWwuY29sbGlzaW9uRW5hYmxlZFxuICAgICAgKVxuICAgIH0pKVxuICBdO1xuXG4gIHJldHVybiBuZXdUZXh0TGFiZWw7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVRleHRMYWJlbFByb3BBbmRWYWx1ZShpZHgsIHByb3AsIHZhbHVlLCB0ZXh0TGFiZWwpIHtcbiAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGV4dExhYmVsW2lkeF0sIHByb3ApKSB7XG4gICAgcmV0dXJuIHRleHRMYWJlbDtcbiAgfVxuXG4gIGxldCBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwuc2xpY2UoKTtcblxuICBpZiAocHJvcCA9PT0gJ2ZpZWxkJyAmJiB2YWx1ZSA9PT0gbnVsbCAmJiB0ZXh0TGFiZWwubGVuZ3RoID4gMSkge1xuICAgIC8vIHJlbW92ZSBsYWJlbCB3aGVuIGZpZWxkIHZhbHVlIGlzIHNldCB0byBudWxsXG4gICAgbmV3VGV4dExhYmVsLnNwbGljZShpZHgsIDEpO1xuICB9IGVsc2UgaWYgKHByb3ApIHtcbiAgICBuZXdUZXh0TGFiZWwgPSB0ZXh0TGFiZWwubWFwKCh0bCwgaSkgPT4gKGkgPT09IGlkeCA/IHsuLi50bCwgW3Byb3BdOiB2YWx1ZX0gOiB0bCkpO1xuICB9XG5cbiAgcmV0dXJuIG5ld1RleHRMYWJlbDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgYmFzZSBjb25maWc6IGRhdGFJZCwgbGFiZWwsIGNvbHVtbiwgaXNWaXNpYmxlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclRleHRMYWJlbENoYW5nZVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJUZXh0TGFiZWxDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgaWR4LCBwcm9wLCB2YWx1ZX0gPSBhY3Rpb247XG4gIGNvbnN0IHt0ZXh0TGFiZWx9ID0gb2xkTGF5ZXIuY29uZmlnO1xuXG4gIC8vIHdoZW4gYWRkaW5nIGEgbmV3IGVtcHR5IHRleHQgbGFiZWwsXG4gIC8vIHJlbHkgb24gdGhlIGxheWVyJ3MgZGVmYXVsdCBjb25maWcsIG9yIHVzZSB0aGUgY29uc3RhbnQgREVGQVVMVF9URVhUX0xBQkVMXG4gIGNvbnN0IGRlZmF1bHRUZXh0TGFiZWwgPVxuICAgIG9sZExheWVyLmdldERlZmF1bHRMYXllckNvbmZpZyh7ZGF0YUlkOiAnJ30pPy50ZXh0TGFiZWw/LlswXSA/PyBERUZBVUxUX1RFWFRfTEFCRUw7XG5cbiAgbGV0IG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5zbGljZSgpO1xuICBpZiAoIXRleHRMYWJlbFtpZHhdICYmIGlkeCA9PT0gdGV4dExhYmVsLmxlbmd0aCkge1xuICAgIC8vIGlmIGlkeCBpcyBzZXQgdG8gbGVuZ3RoLCBhZGQgZW1wdHkgdGV4dCBsYWJlbFxuICAgIG5ld1RleHRMYWJlbCA9IFtcbiAgICAgIC4uLnRleHRMYWJlbCxcbiAgICAgIHtcbiAgICAgICAgLi4uZGVmYXVsdFRleHRMYWJlbCxcbiAgICAgICAgY29sbGlzaW9uRW5hYmxlZDogQm9vbGVhbih0ZXh0TGFiZWxbMF0/LmNvbGxpc2lvbkVuYWJsZWQpXG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIGlmIChpZHggPT09ICdhbGwnICYmIHByb3AgPT09ICdmaWVsZHMnKSB7XG4gICAgbmV3VGV4dExhYmVsID0gYWRkT3JSZW1vdmVUZXh0TGFiZWxzKHZhbHVlLCB0ZXh0TGFiZWwsIGRlZmF1bHRUZXh0TGFiZWwpO1xuICB9IGVsc2UgaWYgKGlkeCA9PT0gJ2FsbCcgJiYgcHJvcCkge1xuICAgIG5ld1RleHRMYWJlbCA9IHRleHRMYWJlbC5tYXAodGwgPT4gKHsuLi50bCwgW3Byb3BdOiB2YWx1ZX0pKTtcbiAgfSBlbHNlIHtcbiAgICBuZXdUZXh0TGFiZWwgPSB1cGRhdGVUZXh0TGFiZWxQcm9wQW5kVmFsdWUoaWR4LCBwcm9wLCB2YWx1ZSwgbmV3VGV4dExhYmVsKTtcbiAgfVxuICAvLyB1cGRhdGUgdGV4dCBsYWJlbCBwcm9wIGFuZCB2YWx1ZVxuICByZXR1cm4gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKHN0YXRlLCB7XG4gICAgb2xkTGF5ZXIsXG4gICAgbmV3Q29uZmlnOiB7dGV4dExhYmVsOiBuZXdUZXh0TGFiZWx9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShkYXRhc2V0LCBsYXllckNsYXNzZXMsIGxheWVyLCBzY2hlbWEpIHtcbiAgY29uc3QgbG9hZGVkTGF5ZXIgPSBzZXJpYWxpemVMYXllcihsYXllciwgc2NoZW1hKTtcbiAgcmV0dXJuIGxvYWRlZExheWVyXG4gICAgPyB2YWxpZGF0ZUxheWVyV2l0aERhdGEoZGF0YXNldCwgbG9hZGVkTGF5ZXIsIGxheWVyQ2xhc3Nlcywge1xuICAgICAgICBhbGxvd0VtcHR5Q29sdW1uOiB0cnVlXG4gICAgICB9KVxuICAgIDogbnVsbDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgY29uZmlnIGRhdGFJZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJEYXRhSWRDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjoge1xuICAgIG9sZExheWVyOiBMYXllcjtcbiAgICBuZXdDb25maWc6IHtcbiAgICAgIGRhdGFJZDogc3RyaW5nO1xuICAgIH07XG4gIH1cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBuZXdDb25maWd9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YUlkfSA9IG5ld0NvbmZpZztcblxuICBpZiAoIW9sZExheWVyIHx8ICFzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBvbGRMYXllci5pZCk7XG5cbiAgbGV0IG5ld0xheWVyID0gb2xkTGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe2RhdGFJZH0pO1xuXG4gIC8vIHRoaXMgbWF5IGhhcHBlbiB3aGVuIGEgbGF5ZXIgaXMgbmV3ICh0eXBlOiBudWxsIGFuZCBubyBjb2x1bW5zKSBidXQgaXQncyBub3QgcmVhZHkgdG8gYmUgc2F2ZWRcbiAgaWYgKG5ld0xheWVyLmlzVmFsaWRUb1NhdmUoKSkge1xuICAgIGNvbnN0IHZhbGlkYXRlZCA9IHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKFxuICAgICAgc3RhdGUuZGF0YXNldHNbZGF0YUlkXSxcbiAgICAgIHN0YXRlLmxheWVyQ2xhc3NlcyxcbiAgICAgIG5ld0xheWVyLFxuICAgICAgc3RhdGUuc2NoZW1hXG4gICAgKTtcbiAgICAvLyBpZiBjYW50IHZhbGlkYXRlIGl0IHdpdGggZGF0YSBjcmVhdGUgYSBuZXcgb25lXG4gICAgaWYgKCF2YWxpZGF0ZWQpIHtcbiAgICAgIGNvbnN0IG9sZExheWVyVHlwZSA9IG9sZExheWVyLnR5cGU7XG4gICAgICBpZiAob2xkTGF5ZXJUeXBlKSB7XG4gICAgICAgIG5ld0xheWVyID0gbmV3IHN0YXRlLmxheWVyQ2xhc3Nlc1tvbGRMYXllclR5cGVdKHtkYXRhSWQsIGlkOiBvbGRMYXllci5pZH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllciA9IHZhbGlkYXRlZDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gTGF5ZXIgaXMgbm90IHZhbGlkIHRvIHNhdmUgKGUuZy4gbWlzc2luZyBjb2x1bW5zKSwgYnV0IHdlIHN0aWxsIG5lZWQgdG9cbiAgICAvLyByZW1hcCB2aXN1YWwgY2hhbm5lbCBmaWVsZHMgdG8gdGhlIG5ldyBkYXRhc2V0IHRvIGF2b2lkIHN0YWxlIGZpZWxkIHJlZmVyZW5jZXNcbiAgICAvLyB0aGF0IHBvaW50IHRvIHJvd3MgYmV5b25kIHRoZSBuZXcgZGF0YXNldCdzIGxlbmd0aFxuICAgIGNvbnN0IG5ld0RhdGFzZXRGaWVsZHMgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdLmZpZWxkcztcbiAgICBjb25zdCByZW1hcHBlZEZpZWxkczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgIE9iamVjdC52YWx1ZXMobmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goKHtmaWVsZDogZmllbGRLZXl9KSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50RmllbGQgPSBuZXdMYXllci5jb25maWdbZmllbGRLZXldO1xuICAgICAgaWYgKGN1cnJlbnRGaWVsZCkge1xuICAgICAgICBjb25zdCBtYXRjaGVkID0gbmV3RGF0YXNldEZpZWxkcy5maW5kKGYgPT4gZi5uYW1lID09PSBjdXJyZW50RmllbGQubmFtZSk7XG4gICAgICAgIHJlbWFwcGVkRmllbGRzW2ZpZWxkS2V5XSA9IG1hdGNoZWQgfHwgbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoT2JqZWN0LmtleXMocmVtYXBwZWRGaWVsZHMpLmxlbmd0aCkge1xuICAgICAgbmV3TGF5ZXIgPSBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyhyZW1hcHBlZEZpZWxkcyk7XG4gICAgfVxuICAgIC8vIFZhbGlkYXRlIGZpZWxkIHR5cGUgY29tcGF0aWJpbGl0eSDigJQgY2xlYXJzIGZpZWxkcyB3aG9zZSB0eXBlIGlzIGluY29tcGF0aWJsZVxuICAgIC8vIHdpdGggdGhlIGNoYW5uZWwncyBzdXBwb3J0ZWQgZmllbGQgdHlwZXMgKGUuZy4gc3RyaW5nIGZpZWxkIGZvciBhIG51bWVyaWMgc2NhbGUpXG4gICAgT2JqZWN0LnZhbHVlcyhuZXdMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaCgoe2tleX0pID0+IHtcbiAgICAgIG5ld0xheWVyLnZhbGlkYXRlVmlzdWFsQ2hhbm5lbChrZXkpO1xuICAgIH0pO1xuICB9XG5cbiAgbmV3TGF5ZXIgPSBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgaXNWaXNpYmxlOiBvbGRMYXllci5jb25maWcuaXNWaXNpYmxlLFxuICAgIGlzQ29uZmlnQWN0aXZlOiB0cnVlXG4gIH0pO1xuXG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzKTtcbiAgY29uc3Qge2xheWVyRGF0YSwgbGF5ZXJ9ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSwgdW5kZWZpbmVkKTtcblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRJbml0aWFsTGF5ZXJDb25maWcobGF5ZXIsIGRhdGFzZXRzLCBsYXllckNsYXNzZXMpOiBMYXllciB7XG4gIGxldCBuZXdMYXllciA9IGxheWVyO1xuICBpZiAoIU9iamVjdC5rZXlzKGRhdGFzZXRzKS5sZW5ndGgpIHtcbiAgICAvLyBubyBkYXRhIGlzIGxvYWRlZFxuICAgIHJldHVybiBsYXllcjtcbiAgfVxuICBpZiAoIWxheWVyLmNvbmZpZy5kYXRhSWQpIHtcbiAgICAvLyBzZXQgbGF5ZXIgZGF0YUlkXG4gICAgbmV3TGF5ZXIgPSBsYXllci51cGRhdGVMYXllckNvbmZpZyh7ZGF0YUlkOiBPYmplY3Qua2V5cyhkYXRhc2V0cylbMF19KTtcbiAgfVxuICBjb25zdCBkYXRhc2V0ID0gZGF0YXNldHNbbmV3TGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBsYXllcjtcbiAgfVxuXG4gIC8vIGZpbmQgZGVmYXV0IGxheWVyIHByb3BzXG4gIGNvbnN0IHJlc3VsdCA9XG4gICAgdHlwZW9mIGxheWVyQ2xhc3Nlc1tuZXdMYXllci50eXBlXS5maW5kRGVmYXVsdExheWVyUHJvcHMgPT09ICdmdW5jdGlvbidcbiAgICAgID8gbGF5ZXJDbGFzc2VzW25ld0xheWVyLnR5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyhkYXRhc2V0LCBbXSlcbiAgICAgIDoge3Byb3BzOiBbXX07XG5cbiAgLy8gYW4gYXJyYXkgb2YgcG9zc2libGUgcHJvcHMsIHVzZSAxc3Qgb25lXG4gIGNvbnN0IHByb3BzID0gQXJyYXkuaXNBcnJheShyZXN1bHQpID8gcmVzdWx0IDogcmVzdWx0LnByb3BzIHx8IFtdO1xuXG4gIGlmIChwcm9wcy5sZW5ndGgpIHtcbiAgICBuZXdMYXllciA9IG5ldyBsYXllckNsYXNzZXNbbGF5ZXIudHlwZV0oe1xuICAgICAgLi4ucHJvcHNbMF0sXG4gICAgICBsYWJlbDogbmV3TGF5ZXIuY29uZmlnLmxhYmVsLFxuICAgICAgZGF0YUlkOiBuZXdMYXllci5jb25maWcuZGF0YUlkLFxuICAgICAgaXNDb25maWdBY3RpdmU6IG5ld0xheWVyLmNvbmZpZy5pc0NvbmZpZ0FjdGl2ZSxcbiAgICAgIGlzVmlzaWJsZTogbmV3TGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB0eXBlb2YgbmV3TGF5ZXIuc2V0SW5pdGlhbExheWVyQ29uZmlnID09PSAnZnVuY3Rpb24nXG4gICAgPyBuZXdMYXllci5zZXRJbml0aWFsTGF5ZXJDb25maWcoZGF0YXNldClcbiAgICA6IG5ld0xheWVyO1xufVxuLyoqXG4gKiBGaXQgdGhlIG1hcCB3aGVuIHRoZSBsYXllciB0eXBlIGRyb3Bkb3duIGdpdmVzIGFuIGVtcHR5IGxheWVyIGl0cyBmaXJzdFxuICogdHlwZSBhbmQgdGhhdCBsYXllciBhbHJlYWR5IHBvaW50cyBhdCBhIGRhdGFzZXQuIExhdGVyIHR5cGUgY2hhbmdlcyxcbiAqIHByb2dyYW1tYXRpYyBgbGF5ZXJUeXBlQ2hhbmdlYCwgYW5kIHNhdmVkLWNvbmZpZyBhcHBsaWVzIGxlYXZlIHRoZSBjYW1lcmFcbiAqIGFsb25lLiBHYXRlZCBieSBgZW5hYmxlRml0Qm91bmRzT25NYW51YWxMYXllcmAuXG4gKi9cbmZ1bmN0aW9uIG1heWJlRml0TWFudWFsTGF5ZXJCb3VuZHMoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgb2xkTGF5ZXI6IExheWVyLFxuICBsYXllcjogTGF5ZXIsXG4gIGZpdEJvdW5kcz86IGJvb2xlYW5cbik6IFZpc1N0YXRlIHtcbiAgaWYgKFxuICAgICFmaXRCb3VuZHMgfHxcbiAgICBvbGRMYXllci50eXBlIHx8XG4gICAgIWxheWVyLmNvbmZpZy5kYXRhSWQgfHxcbiAgICAhZ2V0QXBwbGljYXRpb25Db25maWcoKS5lbmFibGVGaXRCb3VuZHNPbk1hbnVhbExheWVyXG4gICkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBib3VuZHMgPSBmaW5kTWFwQm91bmRzKFtsYXllcl0pO1xuICBpZiAoIWJvdW5kcykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGUsXG4gICAgQUNUSU9OX1RBU0tfRklUX0JPVU5EUygpLm1hcCgoKSA9PiBmaXRNYXBCb3VuZHMoYm91bmRzKSlcbiAgKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgbGF5ZXIgdHlwZS4gUHJldmlld3MgbGF5ZXIgY29uZmlnIHdpbGwgYmUgY29waWVkIGlmIGFwcGxpY2FibGUuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJUeXBlQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclR5cGVDaGFuZ2VVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtvbGRMYXllciwgbmV3VHlwZX0gPSBhY3Rpb247XG4gIGlmICghb2xkTGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qgb2xkSWQgPSBvbGRMYXllci5pZDtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZElkKTtcblxuICBpZiAoIXN0YXRlLmxheWVyQ2xhc3Nlc1tuZXdUeXBlXSkge1xuICAgIENvbnNvbGUuZXJyb3IoYCR7bmV3VHlwZX0gaXMgbm90IGEgdmFsaWQgbGF5ZXIgdHlwZWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBsZXQgbmV3TGF5ZXIgPSBuZXcgc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdKHtcbiAgICAvLyBrZWVwIG9sZCBsYXllciBsYWJsZSBhbmQgaXNDb25maWdBY3RpdmVcbiAgICBsYWJlbDogb2xkTGF5ZXIuY29uZmlnLmxhYmVsLFxuICAgIGlzQ29uZmlnQWN0aXZlOiBvbGRMYXllci5jb25maWcuaXNDb25maWdBY3RpdmUsXG4gICAgZGF0YUlkOiBvbGRMYXllci5jb25maWcuZGF0YUlkXG4gIH0pO1xuXG4gIGlmICghb2xkTGF5ZXIudHlwZSkge1xuICAgIC8vIGlmIHNldHRpbmcgbGF5ZXIgdHlwZSBvbiBhbiBlbXB0eSBsYXllclxuICAgIG5ld0xheWVyID0gc2V0SW5pdGlhbExheWVyQ29uZmlnKG5ld0xheWVyLCBzdGF0ZS5kYXRhc2V0cywgc3RhdGUubGF5ZXJDbGFzc2VzKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBnZXQgYSBtaW50IGxheWVyLCB3aXRoIG5ldyBpZCBhbmQgdHlwZVxuICAgIC8vIGJlY2F1c2UgZGVjay5nbCB1c2VzIGlkIHRvIG1hdGNoIGJldHdlZW4gbmV3IGFuZCBvbGQgbGF5ZXIuXG4gICAgLy8gSWYgdHlwZSBoYXMgY2hhbmdlZCBidXQgaWQgaXMgdGhlIHNhbWUsIGl0IHdpbGwgYnJlYWtcblxuICAgIGNvbnN0IGRlZmF1bHRMYXllclByb3BzID1cbiAgICAgIHR5cGVvZiBzdGF0ZS5sYXllckNsYXNzZXNbbmV3VHlwZV0uZmluZERlZmF1bHRMYXllclByb3BzID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gc3RhdGUubGF5ZXJDbGFzc2VzW25ld1R5cGVdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyhzdGF0ZS5kYXRhc2V0c1tuZXdMYXllci5jb25maWcuZGF0YUlkXSlcbiAgICAgICAgOiBudWxsO1xuXG4gICAgbmV3TGF5ZXIuYXNzaWduQ29uZmlnVG9MYXllcihcbiAgICAgIG9sZExheWVyLmNvbmZpZyxcbiAgICAgIG9sZExheWVyLnZpc0NvbmZpZ1NldHRpbmdzLFxuICAgICAgc3RhdGUuZGF0YXNldHMsXG4gICAgICBkZWZhdWx0TGF5ZXJQcm9wc1xuICAgICk7XG4gICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJEb21haW4oc3RhdGUuZGF0YXNldHMpO1xuICB9XG5cbiAgY29uc3Qge2NsaWNrZWQsIGhvdmVySW5mb30gPSBzdGF0ZTtcblxuICBsZXQgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2xpY2tlZDogb2xkTGF5ZXIuaXNMYXllckhvdmVyZWQoY2xpY2tlZCkgPyB1bmRlZmluZWQgOiBjbGlja2VkLFxuICAgIGhvdmVySW5mbzogb2xkTGF5ZXIuaXNMYXllckhvdmVyZWQoaG92ZXJJbmZvKSA/IHVuZGVmaW5lZCA6IGhvdmVySW5mb1xuICB9O1xuXG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgbmV3U3RhdGUpO1xuICBuZXdTdGF0ZSA9IHVwZGF0ZVN0YXRlV2l0aExheWVyQW5kRGF0YShuZXdTdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xuXG4gIGlmIChsYXllci5jb25maWcuYW5pbWF0aW9uLmVuYWJsZWQgfHwgb2xkTGF5ZXIuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkKSB7XG4gICAgbmV3U3RhdGUgPSB1cGRhdGVBbmltYXRpb25Eb21haW4obmV3U3RhdGUpO1xuICB9XG5cbiAgLy8gdXBkYXRlIHNwbGl0TWFwIGxheWVyIGlkXG4gIGlmIChzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgIHNwbGl0TWFwczogbmV3U3RhdGUuc3BsaXRNYXBzLm1hcChzZXR0aW5ncyA9PiB7XG4gICAgICAgIGNvbnN0IHtbb2xkSWRdOiBvbGRMYXllck1hcCwgLi4ub3RoZXJMYXllcnN9ID0gc2V0dGluZ3MubGF5ZXJzO1xuICAgICAgICByZXR1cm4gb2xkSWQgaW4gc2V0dGluZ3MubGF5ZXJzXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIC4uLnNldHRpbmdzLFxuICAgICAgICAgICAgICBsYXllcnM6IHtcbiAgICAgICAgICAgICAgICAuLi5vdGhlckxheWVycyxcbiAgICAgICAgICAgICAgICBbbGF5ZXIuaWRdOiBvbGRMYXllck1hcFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiBzZXR0aW5ncztcbiAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSBsYXllck9yZGVyIHdpdGggbmV3IGlkXG4gIG5ld1N0YXRlID0ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGxheWVyT3JkZXI6IHJlcGxhY2VMYXllckVudHJ5SW5MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIG9sZExheWVyLmlkLCBuZXdMYXllci5pZClcbiAgfTtcblxuICByZXR1cm4gbWF5YmVGaXRNYW51YWxMYXllckJvdW5kcyhuZXdTdGF0ZSwgb2xkTGF5ZXIsIGxheWVyLCBhY3Rpb24uZml0Qm91bmRzKTtcbn1cblxuLyoqXG4gKiBCaW5kIHZpc3VhbCBjaGFubmVsIGZpZWxkcyB0byB0aGUgZGF0YXNldCBmaWVsZCBvZiB0aGUgc2FtZSBuYW1lLlxuICogYGFkZERhdGFUb01hcGAgYW5kIGBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2VgIG9mdGVuIHBhc3MgYHtuYW1lLCB0eXBlfWBcbiAqIG9yIHByb2Nlc3NvciBmaWVsZHMgd2hvc2UgdmFsdWVBY2Nlc3NvciBpcyBub3QgYm91bmQgdG8gdGhlIEtlcGxlclRhYmxlLCB3aGljaFxuICogbGVhdmVzIHN0cm9rZUNvbG9yRG9tYWluIGF0IGBbMCwgMV1gIChrZXBsZXIuZ2wgIzMwNjEpLlxuICovXG5mdW5jdGlvbiByZXNvbHZlVmlzdWFsQ2hhbm5lbEZpZWxkRnJvbURhdGFzZXQoXG4gIG5ld0NvbmZpZzogVmlzU3RhdGVBY3Rpb25zLkxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25bJ25ld0NvbmZpZyddLFxuICBkYXRhc2V0OiBLZXBsZXJUYWJsZSB8IHVuZGVmaW5lZCxcbiAgdmlzdWFsQ2hhbm5lbDogTGF5ZXJbJ3Zpc3VhbENoYW5uZWxzJ11bc3RyaW5nXSB8IHVuZGVmaW5lZFxuKSB7XG4gIGlmICghZGF0YXNldCB8fCAhdmlzdWFsQ2hhbm5lbCkge1xuICAgIHJldHVybiBuZXdDb25maWc7XG4gIH1cbiAgY29uc3QgaW5jb21pbmcgPSBuZXdDb25maWdbdmlzdWFsQ2hhbm5lbC5maWVsZF07XG4gIGlmICghaW5jb21pbmcgfHwgdHlwZW9mIGluY29taW5nICE9PSAnb2JqZWN0JyB8fCAhaW5jb21pbmcubmFtZSkge1xuICAgIHJldHVybiBuZXdDb25maWc7XG4gIH1cbiAgY29uc3QgZm91bmQgPSBkYXRhc2V0LmZpZWxkcy5maW5kKGZkID0+IGZkLm5hbWUgPT09IGluY29taW5nLm5hbWUpO1xuICBpZiAoIWZvdW5kKSB7XG4gICAgcmV0dXJuIG5ld0NvbmZpZztcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLm5ld0NvbmZpZyxcbiAgICBbdmlzdWFsQ2hhbm5lbC5maWVsZF06IGZvdW5kXG4gIH07XG59XG5cbi8qKlxuICogVXBkYXRlIGxheWVyIHZpc3VhbCBjaGFubmVsXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHJldHVybnMge09iamVjdH0gbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXllclZpc3VhbENoYW5uZWxDaGFuZ2VVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyLCBuZXdWaXNDb25maWcsIGNoYW5uZWx9ID0gYWN0aW9uO1xuICBpZiAoIW9sZExheWVyLmNvbmZpZy5kYXRhSWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbb2xkTGF5ZXIuY29uZmlnLmRhdGFJZF07XG4gIGNvbnN0IG5ld0NvbmZpZyA9IHJlc29sdmVWaXN1YWxDaGFubmVsRmllbGRGcm9tRGF0YXNldChcbiAgICBhY3Rpb24ubmV3Q29uZmlnLFxuICAgIGRhdGFzZXQsXG4gICAgb2xkTGF5ZXIudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF1cbiAgKTtcblxuICBjb25zdCBpZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gb2xkTGF5ZXIuaWQpO1xuICBsZXQgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyhuZXdDb25maWcpO1xuICBpZiAobmV3VmlzQ29uZmlnKSBuZXdMYXllciA9IG5ld0xheWVyLnVwZGF0ZUxheWVyVmlzQ29uZmlnKG5ld1Zpc0NvbmZpZyk7XG5cbiAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsKGRhdGFzZXQsIGNoYW5uZWwpO1xuXG4gIC8vIGNhbGxpbmcgdXBkYXRlIGFuaW1hdGlvbiBkb21haW4gZmlyc3QgdG8gbWVyZ2UgYWxsIGxheWVyIGFuaW1hdGlvbiBkb21haW5cbiAgbGV0IHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihzdGF0ZSk7XG5cbiAgY29uc3QgdmlzdWFsQ2hhbm5lbCA9IG9sZExheWVyLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuICBpZiAodmlzdWFsQ2hhbm5lbD8uY2hhbm5lbFNjYWxlVHlwZSA9PT0gQ0hBTk5FTF9TQ0FMRVMuY29sb3IgJiYgbmV3Q29uZmlnW3Zpc3VhbENoYW5uZWwuZmllbGRdKSB7XG4gICAgLy8gaWYgY29sb3IgZmllbGQgY2hhbmdlZCwgc2V0IGN1c3RvbUJyZWFrcyB0byBmYWxzZVxuICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyQ29sb3JVSSh2aXN1YWxDaGFubmVsLnJhbmdlLCB7XG4gICAgICBjb2xvclJhbmdlQ29uZmlnOiB7XG4gICAgICAgIC4uLm5ld0xheWVyLmNvbmZpZy5jb2xvclVJW3Zpc3VhbENoYW5uZWwucmFuZ2VdLmNvbG9yUmFuZ2VDb25maWcsXG4gICAgICAgIGN1c3RvbUJyZWFrczogZmFsc2VcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHVwZGF0ZWRTdGF0ZSA9IHtcbiAgICAgIC4uLnVwZGF0ZWRTdGF0ZSxcbiAgICAgIGxheWVyczogdXBkYXRlZFN0YXRlLmxheWVycy5tYXAobCA9PiAobC5pZCA9PT0gb2xkTGF5ZXIuaWQgPyBuZXdMYXllciA6IGwpKVxuICAgIH07XG4gIH1cblxuICBjb25zdCBvbGRMYXllckRhdGEgPSB1cGRhdGVkU3RhdGUubGF5ZXJEYXRhW2lkeF07XG4gIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgdXBkYXRlZFN0YXRlLCBvbGRMYXllckRhdGEpO1xuXG4gIGlmIChcbiAgICB2aXN1YWxDaGFubmVsPy5jaGFubmVsU2NhbGVUeXBlID09PSBDSEFOTkVMX1NDQUxFUy5jb2xvciAmJlxuICAgIG5ld0NvbmZpZ1t2aXN1YWxDaGFubmVsPy5zY2FsZV0gPT09IFNDQUxFX1RZUEVTLmN1c3RvbU9yZGluYWwgJiZcbiAgICAhbmV3VmlzQ29uZmlnXG4gICkge1xuICAgIC8vIHdoZW4gc3dpdGNoaW5nIHRvIGN1c3RvbU9yZGluYWwgc2NhbGUsIGNyZWF0ZSBhIGN1c3RvbVBhbGV0dGUgaW4gY29sb3JVSSB3aXRoIHVwZGF0ZWQgY29sb3JEb21haW5cbiAgICBjb25zdCBjdXN0b21QYWxldHRlID0gaW5pdEN1c3RvbVBhbGV0dGVCeUN1c3RvbVNjYWxlKHtcbiAgICAgIHNjYWxlOiBTQ0FMRV9UWVBFUy5jdXN0b21PcmRpbmFsLFxuICAgICAgZmllbGQ6IGxheWVyLmNvbmZpZ1t2aXN1YWxDaGFubmVsLmZpZWxkXSxcbiAgICAgIG9yZGluYWxEb21haW46IGxheWVyLmNvbmZpZ1tsYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsXS5kb21haW5dLFxuICAgICAgcmFuZ2U6IGxheWVyLmNvbmZpZy52aXNDb25maWdbdmlzdWFsQ2hhbm5lbC5yYW5nZV0sXG4gICAgICBjb2xvckJyZWFrczogbnVsbFxuICAgIH0pO1xuICAgIC8vIHVwZGF0ZSBjb2xvclJhbmdlIHdpdGggbmV3IGN1c3RvbVBhbGV0dGVcbiAgICBsYXllci51cGRhdGVMYXllckNvbG9yVUkodmlzdWFsQ2hhbm5lbC5yYW5nZSwge1xuICAgICAgc2hvd0NvbG9yQ2hhcnQ6IHRydWUsXG4gICAgICBjb2xvclJhbmdlQ29uZmlnOiB7XG4gICAgICAgIC4uLmxheWVyLmNvbmZpZy5jb2xvclVJW3Zpc3VhbENoYW5uZWwucmFuZ2VdLmNvbG9yUmFuZ2VDb25maWcsXG4gICAgICAgIGN1c3RvbUJyZWFrczogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGN1c3RvbVBhbGV0dGVcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKHVwZGF0ZWRTdGF0ZSwge2xheWVyRGF0YSwgbGF5ZXIsIGlkeH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBsYXllciBgdmlzQ29uZmlnYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5MYXllclZpc0NvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge29sZExheWVyfSA9IGFjdGlvbjtcbiAgY29uc3QgaWR4ID0gc3RhdGUubGF5ZXJzLmZpbmRJbmRleChsID0+IGwuaWQgPT09IG9sZExheWVyLmlkKTtcbiAgY29uc3QgcHJvcHMgPSBPYmplY3Qua2V5cyhhY3Rpb24ubmV3VmlzQ29uZmlnKTtcblxuICBjb25zdCBuZXdWaXNDb25maWcgPSB7XG4gICAgLi4ub2xkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZyxcbiAgICAuLi5hY3Rpb24ubmV3VmlzQ29uZmlnXG4gIH07XG5cbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbmZpZyh7dmlzQ29uZmlnOiBuZXdWaXNDb25maWd9KTtcblxuICAvLyBKZW5rcyBicmVha3MgZGVwZW5kIG9uIHRoZSBudW1iZXIgb2YgY29sb3JzLiBSZWNhbGN1bGF0ZSB0aGUgZG9tYWluIHdoZW5cbiAgLy8gdGhlIGNvbG9yIHJhbmdlIG9mIGEgSmVua3MgY2hhbm5lbCBjaGFuZ2VzLlxuICBpZiAob2xkTGF5ZXIuY29uZmlnLmRhdGFJZCkge1xuICAgIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tvbGRMYXllci5jb25maWcuZGF0YUlkXTtcbiAgICBpZiAoZGF0YXNldCkge1xuICAgICAgT2JqZWN0LmtleXMobmV3TGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goY2hhbm5lbEtleSA9PiB7XG4gICAgICAgIGNvbnN0IGNoYW5uZWwgPSBuZXdMYXllci52aXN1YWxDaGFubmVsc1tjaGFubmVsS2V5XTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNoYW5uZWw/LnNjYWxlICYmXG4gICAgICAgICAgbmV3TGF5ZXIuY29uZmlnW2NoYW5uZWwuc2NhbGVdID09PSBTQ0FMRV9UWVBFUy5qZW5rcyAmJlxuICAgICAgICAgIGNoYW5uZWwucmFuZ2UgJiZcbiAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYWN0aW9uLm5ld1Zpc0NvbmZpZywgY2hhbm5lbC5yYW5nZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsKGRhdGFzZXQsIGNoYW5uZWxLZXkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBsZXQgbmV4dFN0YXRlID0gc3RhdGU7XG5cbiAgLy8gRXhjbHVzaXZlIGJpdG1hcCBlZGl0aW5nOiB3aGVuIGVkaXRCb3VuZHMgaXMgdHVybmVkIG9uIGZvciBvbmUgYml0bWFwIGxheWVyLFxuICAvLyB0dXJuIGl0IG9mZiBmb3IgYWxsIG90aGVyIGJpdG1hcCBsYXllcnNcbiAgaWYgKG5ld0xheWVyLnR5cGUgPT09ICdiaXRtYXAnICYmIGFjdGlvbi5uZXdWaXNDb25maWcuZWRpdEJvdW5kcyA9PT0gdHJ1ZSkge1xuICAgIG5leHRTdGF0ZSA9IHtcbiAgICAgIC4uLm5leHRTdGF0ZSxcbiAgICAgIGxheWVyczogbmV4dFN0YXRlLmxheWVycy5tYXAoKGwsIGkpID0+IHtcbiAgICAgICAgaWYgKGkgIT09IGlkeCAmJiBsLnR5cGUgPT09ICdiaXRtYXAnICYmIGwuY29uZmlnLnZpc0NvbmZpZy5lZGl0Qm91bmRzKSB7XG4gICAgICAgICAgcmV0dXJuIGwudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICAgICAgdmlzQ29uZmlnOiB7Li4ubC5jb25maWcudmlzQ29uZmlnLCBlZGl0Qm91bmRzOiBmYWxzZX1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbDtcbiAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIGlmIChuZXdMYXllci5zaG91bGRDYWxjdWxhdGVMYXllckRhdGEocHJvcHMpKSB7XG4gICAgY29uc3Qgb2xkTGF5ZXJEYXRhID0gbmV4dFN0YXRlLmxheWVyRGF0YVtpZHhdO1xuICAgIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgbmV4dFN0YXRlLCBvbGRMYXllckRhdGEpO1xuICAgIHJldHVybiB1cGRhdGVTdGF0ZVdpdGhMYXllckFuZERhdGEobmV4dFN0YXRlLCB7bGF5ZXJEYXRhLCBsYXllciwgaWR4fSk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlU3RhdGVXaXRoTGF5ZXJBbmREYXRhKG5leHRTdGF0ZSwge2xheWVyOiBuZXdMYXllciwgaWR4fSk7XG59XG5cbi8qKlxuICogUmVzZXQgYW5pbWF0aW9uIGNvbmZpZyBjdXJyZW50IHRpbWUgdG8gYSBzcGVjaWZpZWQgdmFsdWVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKlxuICovXG5leHBvcnQgY29uc3Qgc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlciA9IDxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAge3ZhbHVlfTogVmlzU3RhdGVBY3Rpb25zLlNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXJBY3Rpb25cbik6IFMgPT4ge1xuICBjb25zdCBjdXJyZW50VGltZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWVbMF0gOiB2YWx1ZTtcbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgY3VycmVudFRpbWVcbiAgICB9XG4gIH07XG4gIC8vIHVwZGF0ZSBhbmltYXRpb24gY29uZmlnIGZvciBlYWNoIGxheWVyXG4gIHJldHVybiBzdGF0ZS5sYXllcnMucmVkdWNlKChhY2N1LCBsKSA9PiB7XG4gICAgaWYgKGwuY29uZmlnLmFuaW1hdGlvbi5lbmFibGVkICYmIGwudHlwZSAhPT0gJ3RyaXAnKSB7XG4gICAgICByZXR1cm4gbGF5ZXJBbmltYXRpb25DaGFuZ2VVcGRhdGVyKGFjY3UsIHtvbGRMYXllcjogbCwgcHJvcDogJ2N1cnJlbnRUaW1lJywgY3VycmVudFRpbWV9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY3U7XG4gIH0sIG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgcHJvcGVydHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25UaW1lVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihzdGF0ZSwgYWN0aW9uKTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZmlsdGVyIGFuaW1hdGlvbiB3aW5kb3dcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICB7aWQsIGFuaW1hdGlvbldpbmRvd306IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25XaW5kb3dVcGRhdGVyQWN0aW9uXG4pOiBTIHtcbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gZi5pZCA9PT0gaWQpO1xuXG4gIGlmICghZmlsdGVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgcHJldmlvdXNXaW5kb3cgPSAoZmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcikuYW5pbWF0aW9uV2luZG93O1xuICBsZXQgbmV4dEZpbHRlciA9IHsuLi5maWx0ZXIsIGFuaW1hdGlvbldpbmRvd30gYXMgRmlsdGVyO1xuXG4gIC8vIEVudGVyaW5nIG9yIGxlYXZpbmcgaW50ZXJ2YWwgcGxheWJhY2sgc25hcHMgdGhlIHdpbmRvdyBvbnRvIGhpc3RvZ3JhbSBiaW5zLlxuICBpZiAoXG4gICAgZmlsdGVyLnR5cGUgPT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UgJiZcbiAgICAocHJldmlvdXNXaW5kb3cgPT09IEFOSU1BVElPTl9XSU5ET1cuaW50ZXJ2YWwgfHwgYW5pbWF0aW9uV2luZG93ID09PSBBTklNQVRJT05fV0lORE9XLmludGVydmFsKVxuICApIHtcbiAgICBjb25zdCBhZGp1c3RlZCA9IGFkanVzdFZhbHVlVG9BbmltYXRpb25XaW5kb3coc3RhdGUsIG5leHRGaWx0ZXIgYXMgVGltZVJhbmdlRmlsdGVyKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhZGp1c3RlZC52YWx1ZSkgJiYgYWRqdXN0ZWQudmFsdWUuZXZlcnkodiA9PiBOdW1iZXIuaXNGaW5pdGUodikpKSB7XG4gICAgICBuZXh0RmlsdGVyID0gYWRqdXN0ZWQ7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXh0RmlsdGVyKShzdGF0ZS5maWx0ZXJzKVxuICB9O1xuXG4gIGNvbnN0IG5ld1N5bmNUaW1lbGluZU1vZGUgPSBnZXRTeW5jQW5pbWF0aW9uTW9kZShuZXh0RmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcik7XG5cbiAgcmV0dXJuIHNldFRpbWVGaWx0ZXJUaW1lbGluZU1vZGVVcGRhdGVyKG5ld1N0YXRlLCB7aWQsIG1vZGU6IG5ld1N5bmNUaW1lbGluZU1vZGV9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5RmlsdGVyQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BcHBseUZpbHRlckNvbmZpZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2ZpbHRlcklkLCBuZXdGaWx0ZXJ9ID0gYWN0aW9uO1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gU2VyaWFsaXplIHRoZSBmaWx0ZXJzIHRvIG9ubHkgY29tcGFyZSB0aGUgc2F2ZWQgcHJvcGVydGllc1xuICBjb25zdCBzZXJpYWxpemVkT2xkRmlsdGVyID0gc2VyaWFsaXplRmlsdGVyKG9sZEZpbHRlciwgc3RhdGUuc2NoZW1hKSA/PyB7Y29uZmlnOiB7fX07XG4gIGNvbnN0IHNlcmlhbGl6ZWROZXdGaWx0ZXIgPSBzZXJpYWxpemVGaWx0ZXIobmV3RmlsdGVyLCBzdGF0ZS5zY2hlbWEpO1xuICBpZiAoIXNlcmlhbGl6ZWROZXdGaWx0ZXIgfHwgaXNFcXVhbChzZXJpYWxpemVkT2xkRmlsdGVyLCBzZXJpYWxpemVkTmV3RmlsdGVyKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIElmIHRoZXJlIGFyZSBhbnkgY2hhbmdlcyB0byB0aGUgZmlsdGVyLCBhcHBseSB0aGVtXG4gIGNvbnN0IGNoYW5nZWQgPSBwaWNrQ2hhbmdlZFByb3BzKHNlcmlhbGl6ZWRPbGRGaWx0ZXIsIHNlcmlhbGl6ZWROZXdGaWx0ZXIpO1xuICBkZWxldGUgY2hhbmdlZFsnaWQnXTsgLy8gaWQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkXG5cbiAgY29uc3QgZmlsdGVySW5kZXggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlckluZGV4IDwgMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4gc2V0RmlsdGVyVXBkYXRlcihcbiAgICBzdGF0ZSxcbiAgICBzZXRGaWx0ZXIoZmlsdGVySW5kZXgsIE9iamVjdC5rZXlzKGNoYW5nZWQpLCBPYmplY3QudmFsdWVzKGNoYW5nZWQpKVxuICApO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBmaWx0ZXIgcHJvcGVydHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWx0ZXJVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2lkeCwgdmFsdWVJbmRleCA9IDB9ID0gYWN0aW9uO1xuICBjb25zdCBvbGRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2lkeF07XG4gIGlmICghb2xkRmlsdGVyKSB7XG4gICAgQ29uc29sZS5lcnJvcihgZmlsdGVycy4ke2lkeH0gaXMgdW5kZWZpbmVkYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChcbiAgICBBcnJheS5pc0FycmF5KGFjdGlvbi5wcm9wKSAmJlxuICAgICghQXJyYXkuaXNBcnJheShhY3Rpb24udmFsdWUpIHx8IGFjdGlvbi5wcm9wLmxlbmd0aCAhPT0gYWN0aW9uLnZhbHVlLmxlbmd0aClcbiAgKSB7XG4gICAgQ29uc29sZS5lcnJvcignRXhwZWN0aW5nIHZhbHVlIHRvIGJlIGFuIGFycmF5IG9mIHRoZSBzYW1lIGxlbmd0aCwgc2luY2UgcHJvcCBpcyBhbiBhcnJheScpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyBjb252ZXJ0IHByb3AgYW5kIHZhbHVlIHRvIGFycmF5XG4gIGNvbnN0IHByb3BzID0gdG9BcnJheShhY3Rpb24ucHJvcCk7XG4gIGNvbnN0IHZhbHVlcyA9IEFycmF5LmlzQXJyYXkoYWN0aW9uLnByb3ApID8gdG9BcnJheShhY3Rpb24udmFsdWUpIDogW2FjdGlvbi52YWx1ZV07XG5cbiAgbGV0IG5ld0ZpbHRlciA9IG9sZEZpbHRlcjtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG5cbiAgbGV0IGRhdGFzZXRJZHNUb0ZpbHRlcjogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHByb3AgPSBwcm9wc1tpXTtcbiAgICBjb25zdCB2YWx1ZSA9IHZhbHVlc1tpXTtcbiAgICAvLyBXZSBjdXJyZW50bHkgZG8gbm90IHN1cHBvcnQgcGFzc2luZyBpbiBuYW1lIGFzIGFuIGFycmF5IGludG8gX3VwZGF0ZUZpbHRlclByb3AsIHNvIHdlIGNhbGwgaXQgbXVsdGlwbGUgdGltZXMgd2l0aCBlYWNoIG5hbWVcbiAgICAvLyBTZWUgdGhlIGNvbW1lbnQgaW4gdGhlcmUgYXMgdG8gd2hhdCBzaG91bGQgYmUgYWRkcmVzc2VkXG4gICAgbGV0IHJlcztcbiAgICBpZiAocHJvcCA9PT0gJ25hbWUnICYmIEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gICAgICByZXMgPSB2YWx1ZS5yZWR1Y2UoKGFjY3UsIHYpID0+IHtcbiAgICAgICAgcmV0dXJuIF91cGRhdGVGaWx0ZXJQcm9wKGFjY3UsIG5ld0ZpbHRlciwgcHJvcCwgdiwgdmFsdWVJbmRleCk7XG4gICAgICB9LCBuZXdTdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcyA9IF91cGRhdGVGaWx0ZXJQcm9wKG5ld1N0YXRlLCBuZXdGaWx0ZXIsIHByb3AsIHZhbHVlLCB2YWx1ZUluZGV4KTtcbiAgICB9XG4gICAgbmV3RmlsdGVyID0gcmVzLmZpbHRlcjtcbiAgICBuZXdTdGF0ZSA9IHJlcy5zdGF0ZTtcbiAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBkYXRhc2V0SWRzVG9GaWx0ZXIuY29uY2F0KHJlcy5kYXRhc2V0SWRzVG9GaWx0ZXIpO1xuICB9XG5cbiAgY29uc3QgZW5sYXJnZWRGaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoZiA9PiBmLnZpZXcgPT09IEZJTFRFUl9WSUVXX1RZUEVTLmVubGFyZ2VkKTtcblxuICBpZiAoZW5sYXJnZWRGaWx0ZXIgJiYgZW5sYXJnZWRGaWx0ZXIuaWQgIT09IG5ld0ZpbHRlci5pZCkge1xuICAgIC8vIHRoZXJlIHNob3VsZCBiZSBvbmx5IG9uZSBlbmxhcmdlZCBmaWx0ZXJcbiAgICBuZXdGaWx0ZXIudmlldyA9IEZJTFRFUl9WSUVXX1RZUEVTLnNpZGU7XG4gIH1cblxuICAvLyBzYXZlIG5ldyBmaWx0ZXJzIHRvIG5ld1N0YXRlXG4gIG5ld1N0YXRlID0gc2V0KFsnZmlsdGVycycsIGlkeF0sIG5ld0ZpbHRlciwgbmV3U3RhdGUpO1xuXG4gIC8vIGZpbHRlciBkYXRhXG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIHVuaXEoZGF0YXNldElkc1RvRmlsdGVyKSxcbiAgICBuZXdTdGF0ZS5kYXRhc2V0cyxcbiAgICBuZXdTdGF0ZS5maWx0ZXJzLFxuICAgIG5ld1N0YXRlLmxheWVyc1xuICApO1xuXG4gIG5ld1N0YXRlID0gc2V0KFsnZGF0YXNldHMnXSwgZmlsdGVyZWREYXRhc2V0cywgbmV3U3RhdGUpO1xuXG4gIC8vIG5lZWQgdG8gdXBkYXRlIGZpbHRlclBsb3QgYWZ0ZXIgZmlsdGVyIERhdGFzZXQgZm9yIHBsb3QgdG8gdXBkYXRlIG9uIGZpbHRlcmVkIHJlc3VsdFxuICBjb25zdCBmaWx0ZXJXaXRoUExvdCA9IHVwZGF0ZUZpbHRlclBsb3QobmV3U3RhdGUuZGF0YXNldHMsIG5ld1N0YXRlLmZpbHRlcnNbaWR4XSk7XG5cbiAgbmV3U3RhdGUgPSBzZXQoWydmaWx0ZXJzJywgaWR4XSwgZmlsdGVyV2l0aFBMb3QsIG5ld1N0YXRlKTtcblxuICAvLyBkYXRhSWQgaXMgYW4gYXJyYXlcbiAgLy8gcGFzcyBvbmx5IHRoZSBkYXRhc2V0IHdlIG5lZWQgdG8gdXBkYXRlXG4gIG5ld1N0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5ld1N0YXRlLCBkYXRhc2V0SWRzVG9GaWx0ZXIsIG5ld0ZpbHRlcik7XG5cbiAgLy8gSWYgdGltZSByYW5nZSBmaWx0ZXIgdmFsdWUgd2FzIHVwZGF0ZWQsIGFkanVzdCBhbmltYXRpb24gY29uZmlnXG4gIGlmIChuZXdGaWx0ZXIudHlwZSA9PT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSAmJiBwcm9wcy5pbmNsdWRlcygndmFsdWUnKSkge1xuICAgIG5ld1N0YXRlID0gYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlcihuZXdTdGF0ZSwgYWN0aW9uLmlkeCk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbmZ1bmN0aW9uIF91cGRhdGVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCB2YWx1ZSwgZGF0YXNldHMpIHtcbiAgbGV0IG5ld0ZpbHRlciA9IGZpbHRlcjtcbiAgaWYgKGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF0pIHtcbiAgICAvLyBpZiBkYXRhSWQgYWxyZWFkeSBleGlzdFxuICAgIG5ld0ZpbHRlciA9IF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cyk7XG4gIH1cbiAgaWYgKHZhbHVlKSB7XG4gICAgY29uc3QgbmV4dFZhbHVlID0gbmV3RmlsdGVyLmRhdGFJZC5zbGljZSgpO1xuICAgIG5leHRWYWx1ZVt2YWx1ZUluZGV4XSA9IHZhbHVlO1xuICAgIG5ld0ZpbHRlciA9IHNldChbJ2RhdGFJZCddLCBuZXh0VmFsdWUsIG5ld0ZpbHRlcik7XG4gIH1cbiAgcmV0dXJuIG5ld0ZpbHRlcjtcbn1cblxuZnVuY3Rpb24gX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIGRhdGFzZXRzKSB7XG4gIGNvbnN0IGRhdGFJZCA9IGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF07XG5cbiAgaWYgKGZpbHRlci5kYXRhSWQubGVuZ3RoID09PSAxICYmIHZhbHVlSW5kZXggPT09IDApIHtcbiAgICAvLyBpZiByZW1vdmUgdGhlIG9ubHkgZGF0YUlkLCBjcmVhdGUgYW4gZW1wdHkgZmlsdGVyIGluc3RlYWQ7XG4gICAgcmV0dXJuIGdldERlZmF1bHRGaWx0ZXIoe2lkOiBmaWx0ZXIuaWR9KTtcbiAgfVxuXG4gIGlmIChkYXRhSWQpIHtcbiAgICBmaWx0ZXIgPSByZW1vdmVGaWx0ZXJQbG90KGZpbHRlciwgZGF0YUlkKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgcHJvcCBvZiBbXG4gICAgJ2RhdGFJZCcsXG4gICAgJ25hbWUnLFxuICAgICdmaWVsZElkeCcsXG4gICAgJ2dwdUNoYW5uZWwnLFxuICAgICdlbmROYW1lJyxcbiAgICAnZW5kRmllbGRJZHgnLFxuICAgICdlbmRNYXBwZWRWYWx1ZScsXG4gICAgJ2dwdUVuZENoYW5uZWwnXG4gIF0pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXJbcHJvcF0pKSB7XG4gICAgICBjb25zdCBuZXh0VmFsID0gZmlsdGVyW3Byb3BdLnNsaWNlKCk7XG4gICAgICBuZXh0VmFsLnNwbGljZSh2YWx1ZUluZGV4LCAxKTtcbiAgICAgIGZpbHRlciA9IHNldChbcHJvcF0sIG5leHRWYWwsIGZpbHRlcik7XG4gICAgfVxuICB9XG5cbiAgLy8gbWVyZ2VGaWVsZERvbWFpbiBmb3IgdGhlIHJlbWFpbmluZyBmaWVsZHNcbiAgY29uc3QgZG9tYWluU3RlcHMgPSBtZXJnZUZpbHRlckRvbWFpbihmaWx0ZXIsIGRhdGFzZXRzKTtcblxuICBjb25zdCBuZXh0RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICAvLyB2YWx1ZTogbmV4dFZhbHVlLFxuICAgIC4uLihkb21haW5TdGVwcyA/IHtkb21haW46IGRvbWFpblN0ZXBzPy5kb21haW4sIHN0ZXA6IGRvbWFpblN0ZXBzPy5zdGVwfSA6IHt9KVxuICB9O1xuXG4gIGNvbnN0IG5leHRWYWx1ZSA9IGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4obmV4dEZpbHRlci52YWx1ZSwgbmV4dEZpbHRlcik7XG4gIHJldHVybiB7XG4gICAgLi4ubmV4dEZpbHRlcixcbiAgICB2YWx1ZTogbmV4dFZhbHVlXG4gIH07XG59XG5cbi8qKiAqXG4gKiBVcGRhdGVzIGEgc2luZ2xlIHByb3BlcnR5IG9mIGEgZmlsdGVyXG4gKi9cbmZ1bmN0aW9uIF91cGRhdGVGaWx0ZXJQcm9wKHN0YXRlLCBmaWx0ZXIsIHByb3AsIHZhbHVlLCB2YWx1ZUluZGV4LCBkYXRhc2V0SWRzPykge1xuICBsZXQgZGF0YXNldElkc1RvRmlsdGVyOiBzdHJpbmdbXSA9IFtdO1xuICBzd2l0Y2ggKHByb3ApIHtcbiAgICAvLyBUT0RPOiBOZXh0IFBSIGZvciBVSSBpZiB3ZSB1cGRhdGUgZmlsdGVyRGF0YUlkLCB3ZSBuZWVkIHRvIGNvbnNpZGVyIHR3byBjYXNlczpcbiAgICAvLyAxLiBkYXRhSWQgaXMgZW1wdHk6IGNyZWF0ZSBhIGRlZmF1bHQgZmlsdGVyXG4gICAgLy8gMi4gQWRkIGEgbmV3IGRhdGFzZXQgaWRcbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLmRhdGFJZDoge1xuICAgICAgY29uc3Qgb2xkRGF0YUlkID0gWy4uLmZpbHRlci5kYXRhSWRdO1xuICAgICAgZmlsdGVyID0gX3VwZGF0ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZhbHVlSW5kZXgsIHZhbHVlLCBzdGF0ZS5kYXRhc2V0cyk7XG4gICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSB1bmlxKFsuLi5vbGREYXRhSWQsIC4uLmZpbHRlci5kYXRhSWRdKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLm5hbWU6IHtcbiAgICAgIC8vIHdlIGFyZSBzdXBwb3J0aW5nIHRoZSBjdXJyZW50IGZ1bmN0aW9uYWxpdHlcbiAgICAgIC8vIFRPRE86IE5leHQgUFIgZm9yIFVJIGZpbHRlciBuYW1lIHdpbGwgb25seSB1cGRhdGUgZmlsdGVyIG5hbWUgYnV0IGl0IHdvbid0IGhhdmUgc2lkZSBlZmZlY3RzXG4gICAgICAvLyB3ZSBhcmUgZ29ubmEgdXNlIHBhaXIgb2YgZGF0YXNldHMgYW5kIGZpZWxkSWR4IHRvIHVwZGF0ZSB0aGUgZmlsdGVyXG4gICAgICBjb25zdCBkYXRhc2V0SWQgPSBmaWx0ZXIuZGF0YUlkW3ZhbHVlSW5kZXhdO1xuICAgICAgY29uc3Qge2ZpbHRlcjogdXBkYXRlZEZpbHRlciwgZGF0YXNldDogbmV3RGF0YXNldH0gPSBhcHBseUZpbHRlckZpZWxkTmFtZShcbiAgICAgICAgZmlsdGVyLFxuICAgICAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICAgICAgZGF0YXNldElkLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdmFsdWVJbmRleCxcbiAgICAgICAge21lcmdlRG9tYWluOiB2YWx1ZUluZGV4ID4gMH1cbiAgICAgICk7XG4gICAgICBpZiAodXBkYXRlZEZpbHRlcikge1xuICAgICAgICBmaWx0ZXIgPSB1cGRhdGVkRmlsdGVyO1xuICAgICAgICBpZiAoZmlsdGVyLmdwdSkge1xuICAgICAgICAgIGZpbHRlciA9IHNldEZpbHRlckdwdU1vZGUoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKTtcbiAgICAgICAgICBmaWx0ZXIgPSBhc3NpZ25HcHVDaGFubmVsKGZpbHRlciwgc3RhdGUuZmlsdGVycyk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUgPSBzZXQoWydkYXRhc2V0cycsIGRhdGFzZXRJZF0sIG5ld0RhdGFzZXQsIHN0YXRlKTtcbiAgICAgICAgLy8gcmVtb3ZlIGZpbHRlciBQbG90IGF0IGRhdGFzZXRJZCwgc28gaXQgd2lsbCBiZSByZWNhbGN1bGF0ZWRcbiAgICAgICAgZmlsdGVyID0gcmVtb3ZlRmlsdGVyUGxvdChmaWx0ZXIsIGRhdGFzZXRJZCk7XG5cbiAgICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gdXBkYXRlZEZpbHRlci5kYXRhSWQ7XG4gICAgICB9XG4gICAgICAvLyBvbmx5IGZpbHRlciB0aGUgY3VycmVudCBkYXRhc2V0XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjYXNlIEZJTFRFUl9VUERBVEVSX1BST1BTLmVuZE5hbWU6IHtcbiAgICAgIGNvbnN0IGRhdGFzZXRJZCA9IGZpbHRlci5kYXRhSWRbdmFsdWVJbmRleF07XG4gICAgICBjb25zdCB7ZmlsdGVyOiB1cGRhdGVkRmlsdGVyLCBkYXRhc2V0OiBuZXdEYXRhc2V0fSA9IGFwcGx5VGltZUZpbHRlckVuZEZpZWxkTmFtZShcbiAgICAgICAgZmlsdGVyLFxuICAgICAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICAgICAgZGF0YXNldElkLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdmFsdWVJbmRleFxuICAgICAgKTtcbiAgICAgIGlmICh1cGRhdGVkRmlsdGVyKSB7XG4gICAgICAgIGZpbHRlciA9IHVwZGF0ZWRGaWx0ZXI7XG4gICAgICAgIGZpbHRlciA9IHNldEZpbHRlckdwdU1vZGUoZmlsdGVyLCBzdGF0ZS5maWx0ZXJzKTtcbiAgICAgICAgZmlsdGVyID0gZmlsdGVyLmdwdVxuICAgICAgICAgID8gYXNzaWduR3B1Q2hhbm5lbChmaWx0ZXIsIHN0YXRlLmZpbHRlcnMpXG4gICAgICAgICAgOiB7Li4uZmlsdGVyLCBncHVDaGFubmVsOiB1bmRlZmluZWQsIGdwdUVuZENoYW5uZWw6IHVuZGVmaW5lZH07XG4gICAgICAgIHN0YXRlID0gc2V0KFsnZGF0YXNldHMnLCBkYXRhc2V0SWRdLCBuZXdEYXRhc2V0LCBzdGF0ZSk7XG4gICAgICAgIGZpbHRlciA9IHJlbW92ZUZpbHRlclBsb3QoZmlsdGVyLCBkYXRhc2V0SWQpO1xuICAgICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSB1cGRhdGVkRmlsdGVyLmRhdGFJZDtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNhc2UgRklMVEVSX1VQREFURVJfUFJPUFMubGF5ZXJJZDoge1xuICAgICAgLy8gV2UgbmVlZCB0byB1cGRhdGUgb25seSBkYXRhc2V0SWQvcyBpZiB3ZSBoYXZlIGFkZGVkL3JlbW92ZWQgbGF5ZXJzXG4gICAgICAvLyAtIGNoZWNrIGZvciBsYXllcklkIGNoYW5nZXMgKFhPUiB3b3JrcyBiZWNhdXNlIG9mIHN0cmluZyB2YWx1ZXMpXG4gICAgICAvLyBpZiBubyBkaWZmZXJlbmNlcyBiZXR3ZWVuIGxheWVySWRzLCBkb24ndCBkbyBhbnkgZmlsdGVyaW5nXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBjb25zdCBsYXllcklkRGlmZmVyZW5jZSA9IHhvcih2YWx1ZSwgZmlsdGVyLmxheWVySWQpO1xuXG4gICAgICBjb25zdCBsYXllckRhdGFJZHMgPSB1bmlxPHN0cmluZz4oXG4gICAgICAgIGxheWVySWREaWZmZXJlbmNlXG4gICAgICAgICAgLm1hcChsaWQgPT5cbiAgICAgICAgICAgIGdldChcbiAgICAgICAgICAgICAgc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsaWQpLFxuICAgICAgICAgICAgICBbJ2NvbmZpZycsICdkYXRhSWQnXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKGQgPT4gZCkgYXMgc3RyaW5nW11cbiAgICAgICk7XG5cbiAgICAgIC8vIG9ubHkgZmlsdGVyIGRhdGFzZXRzSWRzXG4gICAgICBkYXRhc2V0SWRzVG9GaWx0ZXIgPSBsYXllckRhdGFJZHM7XG5cbiAgICAgIC8vIFVwZGF0ZSBuZXdGaWx0ZXIgZGF0YUlkc1xuICAgICAgY29uc3QgbmV3RGF0YUlkcyA9IHVuaXE8c3RyaW5nPihcbiAgICAgICAgdmFsdWVcbiAgICAgICAgICA/Lm1hcChsaWQgPT5cbiAgICAgICAgICAgIGdldChcbiAgICAgICAgICAgICAgc3RhdGUubGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBsaWQpLFxuICAgICAgICAgICAgICBbJ2NvbmZpZycsICdkYXRhSWQnXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKGQgPT4gZCkgYXMgc3RyaW5nW11cbiAgICAgICk7XG5cbiAgICAgIGZpbHRlciA9IHtcbiAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICBsYXllcklkOiB2YWx1ZSxcbiAgICAgICAgZGF0YUlkOiBuZXdEYXRhSWRzXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIGZpbHRlciA9IHNldChbcHJvcF0sIHZhbHVlLCBmaWx0ZXIpO1xuICAgICAgZGF0YXNldElkc1RvRmlsdGVyID0gWy4uLmZpbHRlci5kYXRhSWRdO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4ge2ZpbHRlciwgZGF0YXNldElkcywgZGF0YXNldElkc1RvRmlsdGVyLCBzdGF0ZX07XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1zdGF0ZW1lbnRzICovXG5cbi8qKlxuICogU2V0IHRoZSBwcm9wZXJ0eSBvZiBhIGZpbHRlciBwbG90XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RmlsdGVyUGxvdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkeCwgbmV3UHJvcH06IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJQbG90VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoIXN0YXRlLmZpbHRlcnNbaWR4XSkge1xuICAgIENvbnNvbGUuZXJyb3IoYGZpbHRlcnNbJHtpZHh9XSBpcyB1bmRlZmluZWRgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IG5ld0ZpbHRlciA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcblxuICBmb3IgKGNvbnN0IHByb3AgaW4gbmV3UHJvcCkge1xuICAgIGlmIChwcm9wID09PSAncGxvdFR5cGUnKSB7XG4gICAgICBsZXQgcGxvdFR5cGVVcGRhdGUgPSBuZXdQcm9wLnBsb3RUeXBlO1xuICAgICAgaWYgKHBsb3RUeXBlVXBkYXRlICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwbG90VHlwZVVwZGF0ZSwgJ2dyb3VwQnknKSkge1xuICAgICAgICBwbG90VHlwZVVwZGF0ZSA9IHtcbiAgICAgICAgICAuLi5wbG90VHlwZVVwZGF0ZSxcbiAgICAgICAgICBncm91cEJ5OiBtZXJnZVBsb3RHcm91cEJ5KG5ld0ZpbHRlci5wbG90VHlwZT8uZ3JvdXBCeSwgcGxvdFR5cGVVcGRhdGUuZ3JvdXBCeSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIG5ld0ZpbHRlciA9IHBpY2tfKCdwbG90VHlwZScpKG1lcmdlXyhwbG90VHlwZVVwZGF0ZSkpKG5ld0ZpbHRlcik7XG4gICAgfSBlbHNlIGlmIChwcm9wID09PSAneUF4aXMnKSB7XG4gICAgICBjb25zdCBjaGFydFR5cGUgPSBuZXdQcm9wLnlBeGlzID8gUExPVF9UWVBFUy5saW5lQ2hhcnQgOiBQTE9UX1RZUEVTLmhpc3RvZ3JhbTtcblxuICAgICAgbmV3RmlsdGVyID0gcGlja18oJ3Bsb3RUeXBlJykobWVyZ2VfKHt0eXBlOiBjaGFydFR5cGV9KSkobWVyZ2VfKG5ld1Byb3ApKG5ld0ZpbHRlcikpO1xuICAgIH1cbiAgfVxuXG4gIG5ld0ZpbHRlciA9IHVwZGF0ZUZpbHRlclBsb3Qoc3RhdGUuZGF0YXNldHMsIG5ld0ZpbHRlcik7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiBzdGF0ZS5maWx0ZXJzLm1hcCgoZiwgaSkgPT4gKGkgPT09IGlkeCA/IG5ld0ZpbHRlciA6IGYpKVxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgZmlsdGVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5BZGRGaWx0ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PlxuICAhYWN0aW9uLmRhdGFJZFxuICAgID8gc3RhdGVcbiAgICA6IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGZpbHRlcnM6IFsuLi5zdGF0ZS5maWx0ZXJzLCBnZXREZWZhdWx0RmlsdGVyKHtkYXRhSWQ6IGFjdGlvbi5kYXRhSWQsIGlkOiBhY3Rpb24uaWR9KV1cbiAgICAgIH07XG5cbi8qKlxuICogQ3JlYXRlIG9yIHVwZGF0ZSBhIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZU9yVXBkYXRlRmlsdGVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5DcmVhdGVPclVwZGF0ZUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkLCBkYXRhSWQsIGZpZWxkLCB2YWx1ZX0gPSBhY3Rpb247XG5cbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIGNvbnN0IG9yaWdpbmFsSW5kZXggPSBuZXdTdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGlkKTtcbiAgbGV0IGZpbHRlckluZGV4ID0gb3JpZ2luYWxJbmRleDtcbiAgaWYgKCFpZCAmJiAhZGF0YUlkKSB7XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9XG4gIGlmIChvcmlnaW5hbEluZGV4IDwgMCAmJiBkYXRhSWQpIHtcbiAgICBuZXdTdGF0ZSA9IGFkZEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtkYXRhSWR9KTtcbiAgICBpZiAobmV3U3RhdGUuZmlsdGVycy5sZW5ndGggIT09IHN0YXRlLmZpbHRlcnMubGVuZ3RoICsgMSkge1xuICAgICAgLy8gTm8gbmV3IGZpbHRlciB3YXMgYWRkZWRcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgLy8gSGVyZSB3ZSBhcmUgYXNzdW1pbmcgdGhhdCB0aGUgZmlsdGVyIHdhcyBhZGRlZCBhdCB0aGUgZW5kXG4gICAgZmlsdGVySW5kZXggPSBuZXdTdGF0ZS5maWx0ZXJzLmxlbmd0aCAtIDE7XG4gICAgbmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJbmRleF0gPSB7XG4gICAgICAuLi5uZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlckluZGV4XSxcbiAgICAgIC4uLihpZCA/IHtpZH0gOiBudWxsKVxuICAgIH07XG4gIH1cblxuICAvLyBObyBuZWVkIHRvIHVwZGF0ZSB0aGlzIGlmIGl0J3MgYSBuZXdseSBjcmVhdGVkIGZpbHRlclxuICAvLyBGaXJzdCB3ZSBtYWtlIHN1cmUgYWxsIHRoZSBkYXRhSWRzIHRoYXQgZmllbGRzIHJlZmVyIHRvIGFyZSB1cGRhdGVkXG4gIGlmIChvcmlnaW5hbEluZGV4ID49IDAgJiYgZGF0YUlkKSB7XG4gICAgLy8gSWYgdGhlIGRhdGFJZCBpcyBhbiBhcnJheSwgd2UgbmVlZCB0byB1cGRhdGUgZWFjaCBvbmUgaW5kaXZpZHVhbGx5IGFzIHRoZXkgbmVlZCBhIGNvcnJlY3QgdmFsdWVJbmRleCBwYXNzZWRcbiAgICBuZXdTdGF0ZSA9IChBcnJheS5pc0FycmF5KGRhdGFJZCkgPyBkYXRhSWQgOiBbZGF0YUlkXSkucmVkdWNlKChhY2N1LCBkLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoYWNjdSwge1xuICAgICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgICBwcm9wOiAnZGF0YUlkJyxcbiAgICAgICAgdmFsdWU6IGQsXG4gICAgICAgIHZhbHVlSW5kZXg6IGluZGV4XG4gICAgICB9KTtcbiAgICB9LCBuZXdTdGF0ZSk7XG4gIH1cbiAgLy8gVGhlbiB3ZSB1cGRhdGUgdGhlIGZpZWxkc1xuICBpZiAoZmllbGQpIHtcbiAgICAvLyBJZiB0aGUgZmllbGQgaXMgYW4gYXJyYXksIHdlIG5lZWQgdG8gdXBkYXRlIGVhY2ggZmllbGQgaW5kaXZpZHVhbGx5IGFzIHRoZXkgbmVlZCBhIGNvcnJlY3QgdmFsdWVJbmRleCBwYXNzZWRcbiAgICBuZXdTdGF0ZSA9IChBcnJheS5pc0FycmF5KGZpZWxkKSA/IGZpZWxkIDogW2ZpZWxkXSkucmVkdWNlKChhY2N1LCBmLCBpbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIoYWNjdSwge1xuICAgICAgICBpZHg6IGZpbHRlckluZGV4LFxuICAgICAgICBwcm9wOiAnbmFtZScsXG4gICAgICAgIHZhbHVlOiBmLFxuICAgICAgICB2YWx1ZUluZGV4OiBpbmRleFxuICAgICAgfSk7XG4gICAgfSwgbmV3U3RhdGUpO1xuICB9XG4gIC8vIFRoZW4gd2UgdXBkYXRlIHRoZSB2YWx1ZSBzZXBhcmF0ZWx5XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbmV3U3RhdGUgPSBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7aWR4OiBmaWx0ZXJJbmRleCwgcHJvcDogJ3ZhbHVlJywgdmFsdWV9KTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogU2V0IGxheWVyIGNvbG9yIHBhbGV0dGUgdWkgc3RhdGVcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckNvbG9yVUlDaGFuZ2VVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvbGRMYXllciwgcHJvcCwgbmV3Q29uZmlnfTogVmlzU3RhdGVBY3Rpb25zLkxheWVyQ29sb3JVSUNoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgb2xkVml4Q29uZmlnID0gb2xkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1twcm9wXTtcbiAgY29uc3QgbmV3TGF5ZXIgPSBvbGRMYXllci51cGRhdGVMYXllckNvbG9yVUkocHJvcCwgbmV3Q29uZmlnKTtcbiAgY29uc3QgbmV3VmlzQ29uZmlnID0gbmV3TGF5ZXIuY29uZmlnLnZpc0NvbmZpZ1twcm9wXTtcbiAgaWYgKG9sZFZpeENvbmZpZyAhPT0gbmV3VmlzQ29uZmlnKSB7XG4gICAgcmV0dXJuIGxheWVyVmlzQ29uZmlnQ2hhbmdlVXBkYXRlcihzdGF0ZSwge1xuICAgICAgb2xkTGF5ZXIsXG4gICAgICBuZXdWaXNDb25maWc6IHtcbiAgICAgICAgW3Byb3BdOiBuZXdWaXNDb25maWdcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3RhdGUubGF5ZXJzLm1hcChsID0+IChsLmlkID09PSBvbGRMYXllci5pZCA/IG5ld0xheWVyIDogbCkpXG4gIH07XG59O1xuXG4vKipcbiAqIFN0YXJ0IGFuZCBlbmQgZmlsdGVyIGFuaW1hdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUZpbHRlckFuaW1hdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlRmlsdGVyQW5pbWF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGZpbHRlcnM6IHN0YXRlLmZpbHRlcnMubWFwKChmLCBpKSA9PiAoaSA9PT0gYWN0aW9uLmlkeCA/IHsuLi5mLCBpc0FuaW1hdGluZzogIWYuaXNBbmltYXRpbmd9IDogZikpXG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzRmlsdGVyQW5pbWF0aW9uQ29uZmlnKGNvbmZpZzogQW5pbWF0aW9uQ29uZmlnIHwgRmlsdGVyQW5pbWF0aW9uQ29uZmlnKTogYm9vbGVhbiB7XG4gIHJldHVybiAnZGF0YUlkJyBpbiBjb25maWcgJiYgJ2FuaW1hdGlvbldpbmRvdycgaW4gY29uZmlnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QW5pbWF0aW9uQ29uZmlnVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TZXRBbmltYXRpb25Db25maWdVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb25maWd9ID0gYWN0aW9uO1xuICBpZiAoaXNGaWx0ZXJBbmltYXRpb25Db25maWcoY29uZmlnKSkge1xuICAgIC8vIEZpbmQgZmlsdGVyIHVzZWQgZm9yIGFuaW1hdGlvblxuICAgIC8vIEFzc3VtaW5nIHRoZXJlJ3Mgb25seSBvbmUgZmlsdGVyIHVzZWQgZm9yIGFuaW1hdGlvbiwgc2VlIHNldEZpbHRlclZpZXdVcGRhdGVyXG4gICAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVycy5maW5kKGYgPT4gIWlzU2lkZUZpbHRlcihmKSk7XG4gICAgaWYgKCFmaWx0ZXIpIHtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgY29uc3QgbmV3RmlsdGVyID0gey4uLmZpbHRlciwgLi4uY29uZmlnfTtcbiAgICByZXR1cm4gYXBwbHlGaWx0ZXJDb25maWdVcGRhdGVyKHN0YXRlLCBhcHBseUZpbHRlckNvbmZpZyhmaWx0ZXIuaWQsIG5ld0ZpbHRlcikpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICAgIC4uLmNvbmZpZ1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVG9nZ2xlTGF5ZXJBbmltYXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgIGlzQW5pbWF0aW5nOiAhc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmlzQW5pbWF0aW5nXG4gIH1cbn0pO1xuXG4vKipcbiAqIEhpZGUgYW5kIHNob3cgbGF5ZXIgYW5pbWF0aW9uIGNvbnRyb2xcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVMYXllckFuaW1hdGlvbkNvbnRyb2xVcGRhdGVyID0gKHN0YXRlOiBWaXNTdGF0ZSk6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBhbmltYXRpb25Db25maWc6IHtcbiAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgaGlkZUNvbnRyb2w6ICFzdGF0ZS5hbmltYXRpb25Db25maWcuaGlkZUNvbnRyb2xcbiAgfVxufSk7XG5cbi8qKlxuICogQ2hhbmdlIGZpbHRlciBhbmltYXRpb24gc3BlZWRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVGaWx0ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRmlsdGVyQW5pbWF0aW9uU3BlZWRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+IChpID09PSBhY3Rpb24uaWR4ID8gey4uLmYsIHNwZWVkOiBhY3Rpb24uc3BlZWR9IDogZikpXG59KTtcblxuLyoqXG4gKiBVcGRhdGUgYW5pbWF0aW9uIHNwZWVkIHdpdGggdGhlIHZlcnRpY2FsIHNwZWVkIHNsaWRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVMYXllckFuaW1hdGlvblNwZWVkVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7c3BlZWR9OiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlTGF5ZXJBbmltYXRpb25TcGVlZFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgIHNwZWVkXG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBTaG93IGxhcmdlciB0aW1lIGZpbHRlciBhdCBib3R0b20gZm9yIHRpbWUgcGxheWJhY2sgKGFwcGx5IHRvIHRpbWUgZmlsdGVyIG9ubHkpXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RmlsdGVyVmlld1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmlsdGVyVmlld1VwZGF0ZXJBY3Rpb25cbikgPT4ge1xuICBjb25zdCB7dmlldywgaWR4fSA9IGFjdGlvbjtcbiAgY29uc3Qgc2hvdWxkUmVzZXRPdGhlckZpbHRlcnNWaWV3ID0gdmlldyA9PT0gRklMVEVSX1ZJRVdfVFlQRVMuZW5sYXJnZWQ7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3RhdGUuZmlsdGVycy5tYXAoKGYsIGkpID0+XG4gICAgICBpID09PSBpZHhcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgdmlld1xuICAgICAgICAgIH1cbiAgICAgICAgOiBzaG91bGRSZXNldE90aGVyRmlsdGVyc1ZpZXdcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgdmlldzogRklMVEVSX1ZJRVdfVFlQRVMuc2lkZVxuICAgICAgICAgIH1cbiAgICAgICAgOiBmXG4gICAgKVxuICB9O1xufTtcblxuLyoqXG4gKiBUb2dnbGVzIGZpbHRlciBmZWF0dXJlIHZpc2liaWxpdHlcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVGaWx0ZXJGZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2FjdGlvbi5pZHhdO1xuICBjb25zdCBpc1Zpc2libGUgPSBnZXQoZmlsdGVyLCBbJ3ZhbHVlJywgJ3Byb3BlcnRpZXMnLCAnaXNWaXNpYmxlJ10pO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHNldEZpbHRlclVwZGF0ZXIoc3RhdGUsIHtcbiAgICBpZHg6IGFjdGlvbi5pZHgsXG4gICAgcHJvcDogJ2VuYWJsZWQnLFxuICAgIHZhbHVlOiAhaXNWaXNpYmxlXG4gIH0pO1xuXG4gIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogYWN0aW9uLmlkeCxcbiAgICBwcm9wOiAndmFsdWUnLFxuICAgIHZhbHVlOiBmZWF0dXJlVG9GaWx0ZXJWYWx1ZShmaWx0ZXIudmFsdWUsIGZpbHRlci5pZCwge1xuICAgICAgaXNWaXNpYmxlOiAhaXNWaXNpYmxlXG4gICAgfSlcbiAgfSk7XG5cbiAgcmV0dXJuIG5ld1N0YXRlO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBmaWx0ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVGaWx0ZXJVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkeH0gPSBhY3Rpb247XG4gIGNvbnN0IHtkYXRhSWQsIGlkfSA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcblxuICBjb25zdCBuZXdGaWx0ZXJzID0gW1xuICAgIC4uLnN0YXRlLmZpbHRlcnMuc2xpY2UoMCwgaWR4KSxcbiAgICAuLi5zdGF0ZS5maWx0ZXJzLnNsaWNlKGlkeCArIDEsIHN0YXRlLmZpbHRlcnMubGVuZ3RoKVxuICBdO1xuXG4gIGNvbnN0IGZpbHRlcmVkRGF0YXNldHMgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKGRhdGFJZCwgc3RhdGUuZGF0YXNldHMsIG5ld0ZpbHRlcnMsIHN0YXRlLmxheWVycyk7XG4gIGNvbnN0IG5ld0VkaXRvciA9XG4gICAgZ2V0RmlsdGVySWRJbkZlYXR1cmUoc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZSkgPT09IGlkXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gICAgICAgIH1cbiAgICAgIDogc3RhdGUuZWRpdG9yO1xuXG4gIGxldCBuZXdTdGF0ZSA9IHNldChbJ2ZpbHRlcnMnXSwgbmV3RmlsdGVycywgc3RhdGUpO1xuICBuZXdTdGF0ZSA9IHNldChbJ2RhdGFzZXRzJ10sIGZpbHRlcmVkRGF0YXNldHMsIG5ld1N0YXRlKTtcbiAgbmV3U3RhdGUgPSBzZXQoWydlZGl0b3InXSwgbmV3RWRpdG9yLCBuZXdTdGF0ZSk7XG5cbiAgcmV0dXJuIHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXdTdGF0ZSwgZGF0YUlkLCB1bmRlZmluZWQpO1xufTtcblxuLyoqXG4gKiBBZGQgYSBuZXcgbGF5ZXJcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRMYXllclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGxldCBuZXdMYXllcjtcbiAgbGV0IG5ld0xheWVyRGF0YTtcbiAgaWYgKGFjdGlvbi5jb25maWcpIHtcbiAgICBuZXdMYXllciA9IGNyZWF0ZUxheWVyRnJvbUNvbmZpZyhzdGF0ZSwgYWN0aW9uLmNvbmZpZyk7XG4gICAgaWYgKCFuZXdMYXllcikge1xuICAgICAgQ29uc29sZS53YXJuKFxuICAgICAgICAnRmFpbGVkIHRvIGNyZWF0ZSBsYXllciBmcm9tIGNvbmZpZywgaXQgdXN1YWxseSBtZWFucyB0aGUgY29uZmlnIGlzIG5vdCBiZSBpbiBjb3JyZWN0IGZvcm1hdCcsXG4gICAgICAgIGFjdGlvbi5jb25maWdcbiAgICAgICk7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gY2FsY3VsYXRlTGF5ZXJEYXRhKG5ld0xheWVyLCBzdGF0ZSk7XG4gICAgbmV3TGF5ZXIgPSByZXN1bHQubGF5ZXI7XG4gICAgbmV3TGF5ZXJEYXRhID0gcmVzdWx0LmxheWVyRGF0YTtcbiAgfSBlbHNlIHtcbiAgICAvLyBjcmVhdGUgYW4gZW1wdHkgbGF5ZXIgd2l0aCBhIHNwZWNpZmljIGRhdGFzZXQgb3IgYSBkZWZhdWx0IG9uZVxuICAgIGNvbnN0IGRlZmF1bHREYXRhc2V0ID0gYWN0aW9uLmRhdGFzZXRJZCA/PyBPYmplY3Qua2V5cyhzdGF0ZS5kYXRhc2V0cylbMF07XG4gICAgbmV3TGF5ZXIgPSBuZXcgTGF5ZXIoe1xuICAgICAgaXNWaXNpYmxlOiB0cnVlLFxuICAgICAgaXNDb25maWdBY3RpdmU6IHRydWUsXG4gICAgICBkYXRhSWQ6IGRlZmF1bHREYXRhc2V0XG4gICAgfSk7XG4gICAgbmV3TGF5ZXJEYXRhID0ge307XG4gIH1cblxuICBsZXQgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBbLi4uc3RhdGUubGF5ZXJzLCBuZXdMYXllcl0sXG4gICAgbGF5ZXJEYXRhOiBbLi4uc3RhdGUubGF5ZXJEYXRhLCBuZXdMYXllckRhdGFdLFxuICAgIC8vIGFkZCBuZXcgbGF5ZXIgYXQgdGhlIHRvcFxuICAgIGxheWVyT3JkZXI6IFtuZXdMYXllci5pZCwgLi4uc3RhdGUubGF5ZXJPcmRlcl0sXG4gICAgc3BsaXRNYXBzOiBhZGROZXdMYXllcnNUb1NwbGl0TWFwKHN0YXRlLnNwbGl0TWFwcywgbmV3TGF5ZXIpXG4gIH07XG5cbiAgaWYgKG5ld0xheWVyLmNvbmZpZy5hbmltYXRpb24uZW5hYmxlZCkge1xuICAgIG5ld1N0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn07XG5cbi8qKlxuICogcmVtb3ZlIGxheWVyXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlTGF5ZXJVcGRhdGVyPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBUIHtcbiAgY29uc3QgaWR4ID0gTnVtYmVyLmlzRmluaXRlKGlkKVxuICAgID8gLy8gc3VwcG9ydCBvbGRlciBBUEksIHJlbW92ZSBsYXllciBieSBpZHhcbiAgICAgIE51bWJlcihpZClcbiAgICA6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8IGlkeCA+PSBzdGF0ZS5sYXllcnMubGVuZ3RoKSB7XG4gICAgLy8gaW52YWxpZCBpbmRleFxuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCByZW1vdmUgbGF5ZXIgd2l0aCBpbnZhbGlkIGlkfGlkeCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtsYXllcnMsIGxheWVyRGF0YSwgbGF5ZXJPcmRlciwgY2xpY2tlZCwgaG92ZXJJbmZvfSA9IHN0YXRlO1xuICBjb25zdCBsYXllclRvUmVtb3ZlID0gbGF5ZXJzW2lkeF07XG4gIGNvbnN0IGludGVyYWN0aW9uQ29uZmlnID0gc3RhdGUuaW50ZXJhY3Rpb25Db25maWdcbiAgICA/IHJlbW92ZUxheWVyRnJvbVpvb21PcGFjaXR5KHN0YXRlLmludGVyYWN0aW9uQ29uZmlnLCBsYXllclRvUmVtb3ZlLmlkKVxuICAgIDogc3RhdGUuaW50ZXJhY3Rpb25Db25maWc7XG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogZmlsdGVyT3V0QnlJZChsYXllclRvUmVtb3ZlLmlkKShsYXllcnMpLFxuICAgIGxheWVyRGF0YTogcmVtb3ZlRWxlbWVudEF0SW5kZXgoaWR4KShsYXllckRhdGEpLFxuICAgIGxheWVyT3JkZXI6IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihsYXllck9yZGVyLCBsYXllclRvUmVtb3ZlLmlkKSxcbiAgICBjbGlja2VkOiBsYXllclRvUmVtb3ZlLmlzTGF5ZXJIb3ZlcmVkKGNsaWNrZWQpID8gdW5kZWZpbmVkIDogY2xpY2tlZCxcbiAgICBob3ZlckluZm86IGxheWVyVG9SZW1vdmUuaXNMYXllckhvdmVyZWQoaG92ZXJJbmZvKSA/IHVuZGVmaW5lZCA6IGhvdmVySW5mbyxcbiAgICBzcGxpdE1hcHM6IHJlbW92ZUxheWVyRnJvbVNwbGl0TWFwcyhzdGF0ZS5zcGxpdE1hcHMsIGxheWVyVG9SZW1vdmUpLFxuICAgIC8vIE9ubHkgcmVwbGFjZSBpbnRlcmFjdGlvbkNvbmZpZyB3aGVuIGEgY29udHJvbGxlciBhY3R1YWxseSBsaXN0ZWQgdGhpcyBsYXllci5cbiAgICAvLyBQYXJ0aWFsIHRlc3Qgc3RhdGVzIG9taXQgaXQsIGFuZCBhZGRpbmcgdGhlIGtleSB3b3VsZCBjaGFuZ2UgdGhhdCBzaGFwZS5cbiAgICAuLi4oaW50ZXJhY3Rpb25Db25maWcgIT09IHN0YXRlLmludGVyYWN0aW9uQ29uZmlnID8ge2ludGVyYWN0aW9uQ29uZmlnfSA6IHt9KVxuICAgIC8vIFRPRE86IHVwZGF0ZSBmaWx0ZXJzLCBjcmVhdGUgaGVscGVyIHRvIHJlbW92ZSBsYXllciBmb3JtIGZpbHRlciAocmVtb3ZlIGxheWVyaWQgYW5kIGRhdGFpZCkgaWYgbWFwcGVkXG4gIH07XG5cbiAgcmV0dXJuIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbihcbiAgICByZW1vdmVDaGFydHNBbmRGaWx0ZXJzKFxuICAgICAgbmV3U3RhdGUsXG4gICAgICBjaGFydCA9PiBpc0xheWVyQ2hhcnRDb25maWcoY2hhcnQpICYmIGNoYXJ0LmxheWVySWQgPT09IGxheWVyVG9SZW1vdmUuaWRcbiAgICApXG4gICk7XG59XG5cbi8qKlxuICogUmVvcmRlciBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlb3JkZXJMYXllclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge29yZGVyfTogVmlzU3RhdGVBY3Rpb25zLlJlb3JkZXJMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBsYXllck9yZGVyOiBvcmRlclxufSk7XG5cbi8qKlxuICogQWRkIGEgbmV3IGxheWVyIGdyb3VwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuQWRkTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgbGF5ZXJHcm91cCA9IGdldE5ld0xheWVyR3JvdXAoYWN0aW9uKTtcbiAgbGV0IG5ld0xheWVyT3JkZXIgPSBbLi4uc3RhdGUubGF5ZXJPcmRlcl07XG5cbiAgaWYgKGFjdGlvbi5sYXllck9yZGVyKSB7XG4gICAgYWN0aW9uLmxheWVyT3JkZXIuZm9yRWFjaChsYXllcklkID0+IHtcbiAgICAgIG5ld0xheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobmV3TGF5ZXJPcmRlciwgbGF5ZXJJZCBhcyBzdHJpbmcpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllck9yZGVyOiBhZGRMYXllck9yR3JvdXBUb0xheWVyT3JkZXIobmV3TGF5ZXJPcmRlciwgbGF5ZXJHcm91cClcbiAgfTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgbGF5ZXIgZ3JvdXAgYW5kIGFsbCBsYXllcnMgd2l0aGluIGl0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXJHcm91cFRvUmVtb3ZlID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIGlkKTtcbiAgaWYgKCFsYXllckdyb3VwVG9SZW1vdmUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBsYXllcklkc1RvUmVtb3ZlID0gZ2V0RmxhdExheWVyT3JkZXIobGF5ZXJHcm91cFRvUmVtb3ZlLmxheWVyT3JkZXIpO1xuICBsZXQgbmV3U3RhdGUgPSB7Li4uc3RhdGV9O1xuXG4gIGxheWVySWRzVG9SZW1vdmUuZm9yRWFjaChsYXllcklkID0+IHtcbiAgICBjb25zdCBpZHggPSBuZXdTdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gbGF5ZXJJZCk7XG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICBuZXdTdGF0ZSA9IHJlbW92ZUxheWVyVXBkYXRlcihuZXdTdGF0ZSwge2lkOiBsYXllcklkfSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBuZXdMYXllck9yZGVyID0gcmVtb3ZlRWxlbWVudEZyb21MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIGxheWVyR3JvdXBUb1JlbW92ZSk7XG4gIHJldHVybiB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlclxuICB9O1xufTtcblxuLyoqXG4gKiBVcGRhdGUgYSBsYXllciBncm91cCAobGFiZWwsIHZpc2liaWxpdHksIGxheWVyIG1lbWJlcnNoaXApXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge2lkLCBvcHRpb25zfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBpZCk7XG4gIGlmICghbGF5ZXJHcm91cCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxldCBuZXdTdGF0ZSA9IHsuLi5zdGF0ZX07XG5cbiAgaWYgKG9wdGlvbnMubGF5ZXJPcmRlcikge1xuICAgIG5ld1N0YXRlLmxheWVyT3JkZXIgPSBbLi4ubGF5ZXJHcm91cC5sYXllck9yZGVyLCAuLi5uZXdTdGF0ZS5sYXllck9yZGVyXTtcbiAgICBvcHRpb25zLmxheWVyT3JkZXIuZm9yRWFjaChsYXllcklkID0+IHtcbiAgICAgIG5ld1N0YXRlLmxheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgbGF5ZXJJZCBhcyBzdHJpbmcpO1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbmV3TGF5ZXJHcm91cCA9IHtcbiAgICAuLi5sYXllckdyb3VwLFxuICAgIC4uLm9wdGlvbnNcbiAgfTtcblxuICBpZiAobmV3TGF5ZXJHcm91cC5pc1Zpc2libGUgIT09IGxheWVyR3JvdXAuaXNWaXNpYmxlKSB7XG4gICAgY29uc3QgbGF5ZXJJZHMgPSBnZXRGbGF0TGF5ZXJPcmRlcihuZXdMYXllckdyb3VwLmxheWVyT3JkZXIpO1xuICAgIG5ld1N0YXRlID0gbmV3U3RhdGUubGF5ZXJzLnJlZHVjZSgoYWNjLCBsYXllcikgPT4ge1xuICAgICAgaWYgKGxheWVySWRzLmluY2x1ZGVzKGxheWVyLmlkKSkge1xuICAgICAgICByZXR1cm4gbGF5ZXJDb25maWdDaGFuZ2VVcGRhdGVyKGFjYywge1xuICAgICAgICAgIG9sZExheWVyOiBsYXllcixcbiAgICAgICAgICBuZXdDb25maWc6IHtpc1Zpc2libGU6IG5ld0xheWVyR3JvdXAuaXNWaXNpYmxlfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgbmV3U3RhdGUpO1xuICB9XG5cbiAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwgbmV3TGF5ZXJHcm91cCk7XG4gIHJldHVybiB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlclxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgYSBsYXllciB0byBhIGxheWVyIGdyb3VwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZExheWVyVG9MYXllckdyb3VwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7bGF5ZXJHcm91cElkLCBsYXllcklkfSA9IGFjdGlvbjtcbiAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBsYXllckdyb3VwSWQpO1xuICBjb25zdCBsYXllciA9IHN0YXRlLmxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gbGF5ZXJJZCk7XG4gIGlmICghbGF5ZXJHcm91cCB8fCAhbGF5ZXIpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBpZiAobGF5ZXJHcm91cC5sYXllck9yZGVyLmZpbmQoZW50cnkgPT4gZW50cnkgPT09IGxheWVySWQpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3R3JvdXBMYXllck9yZGVyID0gYWRkTGF5ZXJPckdyb3VwVG9MYXllck9yZGVyKGxheWVyR3JvdXAubGF5ZXJPcmRlciwgbGF5ZXJJZCk7XG4gIHJldHVybiB1cGRhdGVMYXllckdyb3VwVXBkYXRlcihzdGF0ZSwge1xuICAgIGlkOiBsYXllckdyb3VwSWQsXG4gICAgb3B0aW9uczoge2xheWVyT3JkZXI6IG5ld0dyb3VwTGF5ZXJPcmRlcn1cbiAgfSk7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIGxheWVyIGZyb20gYSBsYXllciBncm91cFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUxheWVyRnJvbUxheWVyR3JvdXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUxheWVyRnJvbUxheWVyR3JvdXBVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtsYXllckdyb3VwSWQsIGxheWVySWR9ID0gYWN0aW9uO1xuICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIGxheWVyR3JvdXBJZCk7XG4gIGlmICghbGF5ZXJHcm91cCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0xheWVyR3JvdXBPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihsYXllckdyb3VwLmxheWVyT3JkZXIsIGxheWVySWQpO1xuICByZXR1cm4gdXBkYXRlTGF5ZXJHcm91cFVwZGF0ZXIoc3RhdGUsIHtcbiAgICBpZDogbGF5ZXJHcm91cElkLFxuICAgIG9wdGlvbnM6IHtsYXllck9yZGVyOiBuZXdMYXllckdyb3VwT3JkZXJ9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBTd2FwIGxheWVyIG9yZGVyIGVudHJpZXMgYmV0d2VlbiByb290IGFuZCBncm91cHNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgY29uc3Qgc3dhcExheWVyT3JkZXJFbnRyaWVzVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Td2FwTGF5ZXJPcmRlckVudHJpZXNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IHtvcmlnaW5MYXllcklkLCBkZXN0aW5hdGlvbkxheWVySWQsIG9yaWdpbkxheWVyR3JvdXBJZCwgZGVzdGluYXRpb25MYXllckdyb3VwSWR9ID0gYWN0aW9uO1xuXG4gIGlmICghb3JpZ2luTGF5ZXJHcm91cElkICYmICFkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgIGNvbnN0IG9yaWdpbkluZGV4ID0gc3RhdGUubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gb3JpZ2luTGF5ZXJJZCA6IGVudHJ5LmlkID09PSBvcmlnaW5MYXllcklkXG4gICAgKTtcbiAgICBpZiAoZGVzdGluYXRpb25MYXllcklkICYmIG9yaWdpbkluZGV4ICE9PSAtMSkge1xuICAgICAgY29uc3QgZGVzdGluYXRpb25JbmRleCA9IHN0YXRlLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+XG4gICAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgPyBlbnRyeSA9PT0gZGVzdGluYXRpb25MYXllcklkIDogZW50cnkuaWQgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZFxuICAgICAgKTtcbiAgICAgIGlmIChkZXN0aW5hdGlvbkluZGV4ICE9PSAtMSkge1xuICAgICAgICBjb25zdCBuZXdMYXllck9yZGVyID0gYXJyYXlNb3ZlKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbkluZGV4LCBkZXN0aW5hdGlvbkluZGV4KTtcbiAgICAgICAgcmV0dXJuIHsuLi5zdGF0ZSwgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlcn07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKG9yaWdpbkxheWVyR3JvdXBJZCAmJiAhZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICBsZXQgbmV3TGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5MYXllcklkKTtcbiAgICBpZiAoZGVzdGluYXRpb25MYXllcklkKSB7XG4gICAgICBjb25zdCBkZXN0aW5hdGlvbkluZGV4ID0gbmV3TGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBkZXN0aW5hdGlvbkxheWVySWQgOiBmYWxzZVxuICAgICAgKTtcbiAgICAgIG5ld0xheWVyT3JkZXIuc3BsaWNlKGRlc3RpbmF0aW9uSW5kZXggPT09IC0xID8gMCA6IGRlc3RpbmF0aW9uSW5kZXgsIDAsIG9yaWdpbkxheWVySWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMYXllck9yZGVyID0gWy4uLm5ld0xheWVyT3JkZXIsIG9yaWdpbkxheWVySWRdO1xuICAgIH1cbiAgICByZXR1cm4gey4uLnN0YXRlLCBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyfTtcbiAgfVxuXG4gIGlmIChvcmlnaW5MYXllckdyb3VwSWQgJiYgZGVzdGluYXRpb25MYXllckdyb3VwSWQpIHtcbiAgICBpZiAob3JpZ2luTGF5ZXJHcm91cElkID09PSBkZXN0aW5hdGlvbkxheWVyR3JvdXBJZCkge1xuICAgICAgY29uc3QgbGF5ZXJHcm91cCA9IGdldExheWVyR3JvdXBGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5MYXllckdyb3VwSWQpO1xuICAgICAgaWYgKCFsYXllckdyb3VwKSByZXR1cm4gc3RhdGU7XG4gICAgICBjb25zdCBvcmlnaW5JbmRleCA9IGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgICAgdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5ID09PSBvcmlnaW5MYXllcklkIDogZW50cnkuaWQgPT09IG9yaWdpbkxheWVySWRcbiAgICAgICk7XG4gICAgICBpZiAob3JpZ2luSW5kZXggPT09IC0xKSByZXR1cm4gc3RhdGU7XG4gICAgICBpZiAoZGVzdGluYXRpb25MYXllcklkKSB7XG4gICAgICAgIGNvbnN0IGRlc3RJbmRleCA9IGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT5cbiAgICAgICAgICB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnID8gZW50cnkgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZCA6IGVudHJ5LmlkID09PSBkZXN0aW5hdGlvbkxheWVySWRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGRlc3RJbmRleCA9PT0gLTEpIHJldHVybiBzdGF0ZTtcbiAgICAgICAgY29uc3QgbmV3R3JvdXBMYXllck9yZGVyID0gYXJyYXlNb3ZlKGxheWVyR3JvdXAubGF5ZXJPcmRlciwgb3JpZ2luSW5kZXgsIGRlc3RJbmRleCk7XG4gICAgICAgIGNvbnN0IG5ld0xheWVyT3JkZXIgPSB1cGRhdGVMYXllckdyb3VwSW5MYXllck9yZGVyKHN0YXRlLmxheWVyT3JkZXIsIHtcbiAgICAgICAgICAuLi5sYXllckdyb3VwLFxuICAgICAgICAgIGxheWVyT3JkZXI6IG5ld0dyb3VwTGF5ZXJPcmRlclxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsuLi5zdGF0ZSwgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlcn07XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgLy8gQ3Jvc3MtZ3JvdXAgbW92ZTogcmVtb3ZlIGZyb20gb3JpZ2luLCB0aGVuIGFkZCB0byBkZXN0aW5hdGlvblxuICAgIGNvbnN0IGxheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIoc3RhdGUubGF5ZXJPcmRlciwgb3JpZ2luTGF5ZXJJZCk7XG4gICAgbGV0IG5ld1N0YXRlID0gYWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyKFxuICAgICAgey4uLnN0YXRlLCBsYXllck9yZGVyfSxcbiAgICAgIHtsYXllcklkOiBvcmlnaW5MYXllcklkLCBsYXllckdyb3VwSWQ6IGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkfVxuICAgICk7XG5cbiAgICBpZiAoZGVzdGluYXRpb25MYXllcklkKSB7XG4gICAgICBjb25zdCBsYXllckdyb3VwID0gZ2V0TGF5ZXJHcm91cEZyb21MYXllck9yZGVyKG5ld1N0YXRlLmxheWVyT3JkZXIsIGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKTtcbiAgICAgIGlmICghbGF5ZXJHcm91cCkgcmV0dXJuIHN0YXRlO1xuICAgICAgY29uc3Qgb3JpZ2luSW5kZXggPSBsYXllckdyb3VwLmxheWVyT3JkZXIuZmluZEluZGV4KGVudHJ5ID0+IGVudHJ5ID09PSBvcmlnaW5MYXllcklkKTtcbiAgICAgIGNvbnN0IGRlc3RJbmRleCA9IGxheWVyR3JvdXAubGF5ZXJPcmRlci5maW5kSW5kZXgoZW50cnkgPT4gZW50cnkgPT09IGRlc3RpbmF0aW9uTGF5ZXJJZCk7XG4gICAgICBpZiAob3JpZ2luSW5kZXggIT09IC0xICYmIGRlc3RJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgY29uc3QgbmV3R3JvdXBMYXllck9yZGVyID0gYXJyYXlNb3ZlKGxheWVyR3JvdXAubGF5ZXJPcmRlciwgb3JpZ2luSW5kZXgsIGRlc3RJbmRleCk7XG4gICAgICAgIG5ld1N0YXRlID0ge1xuICAgICAgICAgIC4uLm5ld1N0YXRlLFxuICAgICAgICAgIGxheWVyT3JkZXI6IHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIobmV3U3RhdGUubGF5ZXJPcmRlciwge1xuICAgICAgICAgICAgLi4ubGF5ZXJHcm91cCxcbiAgICAgICAgICAgIGxheWVyT3JkZXI6IG5ld0dyb3VwTGF5ZXJPcmRlclxuICAgICAgICAgIH0pXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfVxuXG4gIGlmICghb3JpZ2luTGF5ZXJHcm91cElkICYmIGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkKSB7XG4gICAgY29uc3QgbGF5ZXJPcmRlciA9IHJlbW92ZUVsZW1lbnRGcm9tTGF5ZXJPcmRlcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5MYXllcklkKTtcbiAgICByZXR1cm4gYWRkTGF5ZXJUb0xheWVyR3JvdXBVcGRhdGVyKFxuICAgICAgey4uLnN0YXRlLCBsYXllck9yZGVyfSxcbiAgICAgIHtsYXllcklkOiBvcmlnaW5MYXllcklkLCBsYXllckdyb3VwSWQ6IGRlc3RpbmF0aW9uTGF5ZXJHcm91cElkfVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59O1xuXG4vKipcbiAqIGR1cGxpY2F0ZSBsYXllclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGR1cGxpY2F0ZUxheWVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuRHVwbGljYXRlTGF5ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IE51bWJlci5pc0Zpbml0ZShpZClcbiAgICA/IC8vIHN1cHBvcnQgb2xkZXIgQVBJLCByZW1vdmUgbGF5ZXIgYnkgaWR4XG4gICAgICBOdW1iZXIoaWQpXG4gICAgOiBzdGF0ZS5sYXllcnMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCAhc3RhdGUubGF5ZXJzW2lkeF0pIHtcbiAgICBDb25zb2xlLndhcm4oYGxheWVyICR7aWR4fSBub3QgZm91bmQgaW4gbGF5ZXJPcmRlcmApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtsYXllcnN9ID0gc3RhdGU7XG4gIGNvbnN0IG9yaWdpbmFsID0gbGF5ZXJzW2lkeF07XG5cbiAgY29uc3Qgb3JpZ2luYWxMYXllck9yZGVySWR4ID0gZ2V0SW5kZXhGcm9tTGF5ZXJFbnRyeUlkKHN0YXRlLmxheWVyT3JkZXIsIG9yaWdpbmFsLmlkKTtcbiAgbGV0IG5ld0xhYmVsID0gYENvcHkgb2YgJHtvcmlnaW5hbC5jb25maWcubGFiZWx9YDtcbiAgbGV0IHBvc3RmaXggPSAwO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gIHdoaWxlIChsYXllcnMuZmluZChsID0+IGwuY29uZmlnLmxhYmVsID09PSBuZXdMYWJlbCkpIHtcbiAgICBuZXdMYWJlbCA9IGBDb3B5IG9mICR7b3JpZ2luYWwuY29uZmlnLmxhYmVsfSAkeysrcG9zdGZpeH1gO1xuICB9XG5cbiAgLy8gY29sbGVjdCBsYXllciBjb25maWcgZnJvbSBvcmlnaW5hbFxuICBjb25zdCBsb2FkZWRMYXllciA9IHNlcmlhbGl6ZUxheWVyKG9yaWdpbmFsLCBzdGF0ZS5zY2hlbWEpO1xuXG4gIC8vIGFzc2lnbiBuZXcgaWQgYW5kIGxhYmVsIHRvIGNvcGllZCBsYXllclxuICBpZiAoIWxvYWRlZExheWVyPy5jb25maWcpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbG9hZGVkTGF5ZXIuY29uZmlnLmxhYmVsID0gbmV3TGFiZWw7XG4gIGxvYWRlZExheWVyLmlkID0gZ2VuZXJhdGVIYXNoSWQoTEFZRVJfSURfTEVOR1RIKTtcblxuICAvLyBhZGQgbGF5ZXIgdG8gc3RhdGVcbiAgbGV0IG5leHRTdGF0ZSA9IGFkZExheWVyVXBkYXRlcihzdGF0ZSwge2NvbmZpZzogbG9hZGVkTGF5ZXJ9KTtcbiAgLy8gcmV0cmlldmUgbmV3bHkgY3JlYXRlZCBsYXllclxuICBjb25zdCBuZXdMYXllciA9IG5leHRTdGF0ZS5sYXllcnNbbmV4dFN0YXRlLmxheWVycy5sZW5ndGggLSAxXTtcblxuICAvLyBDaGVjayBpZiB0aGUgb3JpZ2luYWwgbGF5ZXIgaXMgaW5zaWRlIGEgZ3JvdXBcbiAgY29uc3QgcGFyZW50R3JvdXAgPSBmaW5kUGFyZW50R3JvdXBGb3JMYXllcihzdGF0ZS5sYXllck9yZGVyLCBvcmlnaW5hbC5pZCk7XG5cbiAgaWYgKHBhcmVudEdyb3VwKSB7XG4gICAgLy8gTGF5ZXIgaXMgaW5zaWRlIGEgZ3JvdXAgLSByZW1vdmUgdGhlIHByZXBlbmRlZCBpZCBmcm9tIHJvb3QgYW5kIGluc2VydCBpbnRvIHRoZSBncm91cFxuICAgIGNvbnN0IGxheWVyT3JkZXJXaXRob3V0UHJlcGVuZGVkID0gbmV4dFN0YXRlLmxheWVyT3JkZXIuc2xpY2UoMSk7XG4gICAgY29uc3QgaWR4SW5Hcm91cCA9IHBhcmVudEdyb3VwLmxheWVyT3JkZXIuZmluZEluZGV4KGUgPT4gZSA9PT0gb3JpZ2luYWwuaWQpO1xuICAgIGNvbnN0IG5ld0dyb3VwTGF5ZXJPcmRlciA9IGFycmF5SW5zZXJ0KHBhcmVudEdyb3VwLmxheWVyT3JkZXIsIGlkeEluR3JvdXAsIG5ld0xheWVyLmlkKTtcbiAgICBjb25zdCB1cGRhdGVkR3JvdXAgPSB7Li4ucGFyZW50R3JvdXAsIGxheWVyT3JkZXI6IG5ld0dyb3VwTGF5ZXJPcmRlcn07XG4gICAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IHVwZGF0ZUxheWVyR3JvdXBJbkxheWVyT3JkZXIobGF5ZXJPcmRlcldpdGhvdXRQcmVwZW5kZWQsIHVwZGF0ZWRHcm91cCk7XG4gICAgbmV4dFN0YXRlID0gcmVvcmRlckxheWVyVXBkYXRlcihuZXh0U3RhdGUsIHtvcmRlcjogbmV3TGF5ZXJPcmRlcn0pO1xuICB9IGVsc2Uge1xuICAgIC8vIExheWVyIGlzIGF0IHJvb3QgbGV2ZWwgLSB1c2Ugb3JpZ2luYWwgaW5kZXgtYmFzZWQgaW5zZXJ0aW9uXG4gICAgY29uc3QgbmV3TGF5ZXJPcmRlciA9IGFycmF5SW5zZXJ0KFxuICAgICAgbmV4dFN0YXRlLmxheWVyT3JkZXIuc2xpY2UoMSwgbmV4dFN0YXRlLmxheWVyT3JkZXIubGVuZ3RoKSxcbiAgICAgIG9yaWdpbmFsTGF5ZXJPcmRlcklkeCxcbiAgICAgIG5ld0xheWVyLmlkXG4gICAgKTtcbiAgICBuZXh0U3RhdGUgPSByZW9yZGVyTGF5ZXJVcGRhdGVyKG5leHRTdGF0ZSwge29yZGVyOiBuZXdMYXllck9yZGVyfSk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIEFkZCBhIG5ldyBlZmZlY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZEVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKFxuICAgIGFjdGlvbi5jb25maWc/LnR5cGUgPT09IExJR0hUX0FORF9TSEFET1dfRUZGRUNULnR5cGUgJiZcbiAgICBzdGF0ZS5lZmZlY3RzLnNvbWUoZWZmZWN0ID0+IGVmZmVjdC50eXBlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC50eXBlKVxuICApIHtcbiAgICBDb25zb2xlLndhcm4oYENhbid0IGFkZCBtb3JlIHRoYW4gb25lICR7TElHSFRfQU5EX1NIQURPV19FRkZFQ1QubmFtZX0gZWZmZWN0YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgaWYgKFxuICAgIGFjdGlvbi5jb25maWc/LnR5cGUgPT09IERJU1RBTkNFX0ZPR19UWVBFICYmXG4gICAgc3RhdGUuZWZmZWN0cy5zb21lKFxuICAgICAgZWZmZWN0ID0+IGVmZmVjdC50eXBlID09PSBESVNUQU5DRV9GT0dfVFlQRSB8fCBlZmZlY3QudHlwZSA9PT0gU1VSRkFDRV9GT0dfVFlQRVxuICAgIClcbiAgKSB7XG4gICAgQ29uc29sZS53YXJuKFwiQ2FuJ3QgYWRkIG1vcmUgdGhhbiBvbmUgZm9nIGVmZmVjdFwiKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBpZiAoXG4gICAgYWN0aW9uLmNvbmZpZz8udHlwZSA9PT0gU1VSRkFDRV9GT0dfVFlQRSAmJlxuICAgIHN0YXRlLmVmZmVjdHMuc29tZShcbiAgICAgIGVmZmVjdCA9PiBlZmZlY3QudHlwZSA9PT0gU1VSRkFDRV9GT0dfVFlQRSB8fCBlZmZlY3QudHlwZSA9PT0gRElTVEFOQ0VfRk9HX1RZUEVcbiAgICApXG4gICkge1xuICAgIENvbnNvbGUud2FybihcIkNhbid0IGFkZCBtb3JlIHRoYW4gb25lIGZvZyBlZmZlY3RcIik7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RWZmZWN0ID0gY3JlYXRlRWZmZWN0KGFjdGlvbi5jb25maWcpO1xuXG4gIC8vIGNvbGxhcHNlIGNvbmZpZ3VyYXRvcnMgZm9yIG90aGVyIGVmZmVjdHNcbiAgc3RhdGUuZWZmZWN0cy5mb3JFYWNoKGVmZmVjdCA9PiBlZmZlY3Quc2V0UHJvcHMoe2lzQ29uZmlnQWN0aXZlOiBmYWxzZX0pKTtcblxuICBjb25zdCBlZmZlY3RzID0gWy4uLnN0YXRlLmVmZmVjdHMsIG5ld0VmZmVjdF07XG4gIGNvbnN0IGVmZmVjdE9yZGVyID0gZml4RWZmZWN0T3JkZXIoZWZmZWN0cywgW25ld0VmZmVjdC5pZCwgLi4uc3RhdGUuZWZmZWN0T3JkZXJdKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVmZmVjdHMsXG4gICAgZWZmZWN0T3JkZXJcbiAgfTtcbn07XG5cbi8qKlxuICogcmVtb3ZlIGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkfTogVmlzU3RhdGVBY3Rpb25zLlJlbW92ZUVmZmVjdFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gc3RhdGUuZWZmZWN0cy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwIHx8IGlkeCA+PSBzdGF0ZS5lZmZlY3RzLmxlbmd0aCkge1xuICAgIENvbnNvbGUud2FybihgY2FuIG5vdCByZW1vdmUgZWZmZWN0IHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtlZmZlY3RzLCBlZmZlY3RPcmRlcn0gPSBzdGF0ZTtcbiAgY29uc3QgZWZmZWN0VG9SZW1vdmUgPSBlZmZlY3RzW2lkeF07XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBmaXhlZCBpbiB0c1xuICAgIGVmZmVjdHM6IGZpbHRlck91dEJ5SWQoZWZmZWN0VG9SZW1vdmUuaWQpKGVmZmVjdHMpLFxuICAgIGVmZmVjdE9yZGVyOiBlZmZlY3RPcmRlci5maWx0ZXIoZWZmZWN0SWQgPT4gZWZmZWN0SWQgIT09IGVmZmVjdFRvUmVtb3ZlLmlkKVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW9yZGVyIGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlb3JkZXJFZmZlY3RVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtvcmRlcn06IFZpc1N0YXRlQWN0aW9ucy5SZW9yZGVyRWZmZWN0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGVmZmVjdE9yZGVyOiBmaXhFZmZlY3RPcmRlcihzdGF0ZS5lZmZlY3RzLCBbLi4ub3JkZXJdKVxufSk7XG5cbi8qKlxuICogVXBkYXRlIGVmZmVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZUVmZmVjdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkLCBwcm9wc306IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVFZmZlY3RVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IGlkeCA9IHN0YXRlLmVmZmVjdHMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gaWQpO1xuICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gc3RhdGUuZWZmZWN0cy5sZW5ndGgpIHtcbiAgICBDb25zb2xlLndhcm4oYGNhbiBub3QgdXBkYXRlIGVmZmVjdCB3aXRoIGludmFsaWQgaWQgJHtpZH1gKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgZWZmZWN0T3JkZXIgPSBzdGF0ZS5lZmZlY3RPcmRlcjtcbiAgaWYgKHByb3BzLmlkICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuaWQgIT09IGlkKSB7XG4gICAgY29uc3QgaWR4MiA9IHN0YXRlLmVmZmVjdHMuZmluZEluZGV4KGwgPT4gbC5pZCA9PT0gcHJvcHMuaWQpO1xuICAgIGlmIChpZHgyID49IDApIHtcbiAgICAgIENvbnNvbGUud2FybihgY2FuIG5vdCB1cGRhdGUgZWZmZWN0IHdpdGggZXhpc3RpbmcgZWZmZWN0IGlkICR7aWR9YCk7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgZWZmZWN0T3JkZXIgPSBlZmZlY3RPcmRlci5tYXAoZWZmZWN0T3JkZXJJZCA9PlxuICAgICAgZWZmZWN0T3JkZXJJZCA9PT0gaWQgPyAocHJvcHMuaWQgYXMgc3RyaW5nKSA6IGVmZmVjdE9yZGVySWRcbiAgICApO1xuICB9XG5cbiAgY29uc3QgZWZmZWN0ID0gc3RhdGUuZWZmZWN0c1tpZHhdO1xuICBjb25zdCBuZXh0UGFyYW1zID0gcHJvcHMucGFyYW1ldGVycztcbiAgLy8gQSB0aW1lc3RhbXAtb25seSBuby1vcCBzdGlsbCB1c2VkIHRvIGFsbG9jYXRlIGEgbmV3IHZpc1N0YXRlIChzZXRQcm9wc1xuICAvLyBtdXRhdGVzIGluIHBsYWNlKS4gVGhhdCByZXRyaWdnZXJlZCBuZXN0ZWQgcmVhY3QtcmVkdXggY29ubmVjdCBzdWJzY3JpYmVyc1xuICAvLyB3aGlsZSBkcmFnZ2luZyB0aGUgTGlnaHQgJiBTaGFkb3cgZGF5LXRpbWUgc2xpZGVyIHVudGlsIFJlYWN0IHRocmV3XG4gIC8vIFwiTWF4aW11bSB1cGRhdGUgZGVwdGggZXhjZWVkZWRcIi5cbiAgaWYgKFxuICAgIG5leHRQYXJhbXMgJiZcbiAgICBPYmplY3Qua2V5cyhwcm9wcykubGVuZ3RoID09PSAxICYmXG4gICAgT2JqZWN0LmtleXMobmV4dFBhcmFtcykubGVuZ3RoID09PSAxICYmXG4gICAgbmV4dFBhcmFtcy50aW1lc3RhbXAgIT0gbnVsbCAmJlxuICAgIG5leHRQYXJhbXMudGltZXN0YW1wID09PSBlZmZlY3QucGFyYW1ldGVycy50aW1lc3RhbXBcbiAgKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RWZmZWN0cyA9IFsuLi5zdGF0ZS5lZmZlY3RzXTtcbiAgbmV3RWZmZWN0c1tpZHhdLnNldFByb3BzKHByb3BzKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVmZmVjdHM6IG5ld0VmZmVjdHMsXG4gICAgZWZmZWN0T3JkZXJcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGlzTGF5ZXJDaGFydENvbmZpZyhjaGFydDogQ2hhcnRDb25maWcpOiBjaGFydCBpcyBMYXllckNoYXJ0Q29uZmlnIHtcbiAgcmV0dXJuIGNoYXJ0LnR5cGUgPT09ICdsYXllckNoYXJ0Jztcbn1cblxuZnVuY3Rpb24gbWVyZ2VDaGFydENvbmZpZyhjaGFydDogQ2hhcnRDb25maWcsIHByb3BzOiBQYXJ0aWFsPENoYXJ0Q29uZmlnPik6IENoYXJ0Q29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5jaGFydCxcbiAgICAuLi5wcm9wcyxcbiAgICBkaXNwbGF5OiB7XG4gICAgICAuLi5jaGFydC5kaXNwbGF5LFxuICAgICAgLi4uKHByb3BzLmRpc3BsYXkgfHwge30pXG4gICAgfSxcbiAgICBjaGFydERpc3BsYXk6IHtcbiAgICAgIC4uLmNoYXJ0LmNoYXJ0RGlzcGxheSxcbiAgICAgIC4uLigocHJvcHMgYXMgQ2hhcnRDb25maWcpLmNoYXJ0RGlzcGxheSB8fCB7fSlcbiAgICB9XG4gIH0gYXMgQ2hhcnRDb25maWc7XG59XG5cbmZ1bmN0aW9uIGF4aXNGaWVsZElmUHJlc2VudDxUIGV4dGVuZHMge2ZpZWxkPzoge25hbWU6IHN0cmluZ30gfCBudWxsOyB0aXRsZT86IHN0cmluZyB8IG51bGx9PihcbiAgYXhpczogVCB8IHVuZGVmaW5lZCxcbiAgZmllbGROYW1lczogU2V0PHN0cmluZz5cbik6IFQgfCB1bmRlZmluZWQge1xuICBpZiAoIWF4aXM/LmZpZWxkPy5uYW1lIHx8IGZpZWxkTmFtZXMuaGFzKGF4aXMuZmllbGQubmFtZSkpIHtcbiAgICByZXR1cm4gYXhpcztcbiAgfVxuICByZXR1cm4gey4uLmF4aXMsIGZpZWxkOiBudWxsLCB0aXRsZTogbnVsbH07XG59XG5cbmZ1bmN0aW9uIGRyb3BNaXNzaW5nQ2hhcnRGaWVsZHMoXG4gIGNoYXJ0OiBDaGFydENvbmZpZyxcbiAgZGF0YXNldDoge2ZpZWxkcz86IHtuYW1lOiBzdHJpbmd9W119IHwgdW5kZWZpbmVkXG4pOiBDaGFydENvbmZpZyB7XG4gIGNvbnN0IGZpZWxkTmFtZXMgPSBuZXcgU2V0KChkYXRhc2V0Py5maWVsZHMgfHwgW10pLm1hcChmaWVsZCA9PiBmaWVsZC5uYW1lKSk7XG4gIGNvbnN0IG5leHQgPSBjaGFydCBhcyBDaGFydENvbmZpZyAmIHtcbiAgICB4QXhpcz86IHtmaWVsZD86IHtuYW1lOiBzdHJpbmd9IHwgbnVsbH07XG4gICAgeUF4aXM/OiB7ZmllbGQ/OiB7bmFtZTogc3RyaW5nfSB8IG51bGx9O1xuICAgIGF4aXM/OiB7ZmllbGQ/OiB7bmFtZTogc3RyaW5nfSB8IG51bGx9O1xuICAgIGdyb3VwQnk/OiB7ZmllbGQ/OiB7bmFtZTogc3RyaW5nfSB8IG51bGx9O1xuICAgIHZhbHVlPzoge2ZpZWxkPzoge25hbWU6IHN0cmluZ30gfCBudWxsfTtcbiAgfTtcbiAgcmV0dXJuIG1lcmdlQ2hhcnRDb25maWcoY2hhcnQsIHtcbiAgICB4QXhpczogYXhpc0ZpZWxkSWZQcmVzZW50KG5leHQueEF4aXMsIGZpZWxkTmFtZXMpLFxuICAgIHlBeGlzOiBheGlzRmllbGRJZlByZXNlbnQobmV4dC55QXhpcywgZmllbGROYW1lcyksXG4gICAgYXhpczogYXhpc0ZpZWxkSWZQcmVzZW50KG5leHQuYXhpcywgZmllbGROYW1lcyksXG4gICAgZ3JvdXBCeTogYXhpc0ZpZWxkSWZQcmVzZW50KG5leHQuZ3JvdXBCeSwgZmllbGROYW1lcyksXG4gICAgdmFsdWU6IGF4aXNGaWVsZElmUHJlc2VudChuZXh0LnZhbHVlLCBmaWVsZE5hbWVzKVxuICB9IGFzIFBhcnRpYWw8Q2hhcnRDb25maWc+KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ2hhcnRzQW5kRmlsdGVyczxUIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogVCxcbiAgc2hvdWxkUmVtb3ZlOiAoY2hhcnQ6IENoYXJ0Q29uZmlnKSA9PiBib29sZWFuXG4pOiBUIHtcbiAgY29uc3QgY2hhcnRzID0gc3RhdGUuY2hhcnRzIHx8IFtdO1xuICBjb25zdCByZW1vdmVkID0gY2hhcnRzLmZpbHRlcihzaG91bGRSZW1vdmUpO1xuICBpZiAoIXJlbW92ZWQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHJlbW92ZWRJZHMgPSBuZXcgU2V0KHJlbW92ZWQubWFwKGNoYXJ0ID0+IGNoYXJ0LmlkKSk7XG4gIGNvbnN0IGZpbHRlcklkcyA9IG5ldyBTZXQoXG4gICAgcmVtb3ZlZC5mbGF0TWFwKGNoYXJ0ID0+IHtcbiAgICAgIGNvbnN0IGlkID0gY2hhcnQuY3Jvc3NGaWx0ZXI/LmZpbHRlcklkO1xuICAgICAgcmV0dXJuIGlkID8gW2lkLCBgJHtpZH0teGAsIGAke2lkfS15YF0gOiBbXTtcbiAgICB9KVxuICApO1xuICBsZXQgbmV4dFN0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjaGFydHM6IGNoYXJ0cy5maWx0ZXIoY2hhcnQgPT4gIXJlbW92ZWRJZHMuaGFzKGNoYXJ0LmlkKSlcbiAgfTtcbiAgaWYgKGZpbHRlcklkcy5zaXplKSB7XG4gICAgbmV4dFN0YXRlID0gbmV4dFN0YXRlLmZpbHRlcnMucmVkdWNlUmlnaHQoKGFjY3UsIGZpbHRlciwgaWR4KSA9PiB7XG4gICAgICByZXR1cm4gZmlsdGVySWRzLmhhcyhmaWx0ZXIuaWQpID8gcmVtb3ZlRmlsdGVyVXBkYXRlcihhY2N1LCB7aWR4fSkgOiBhY2N1O1xuICAgIH0sIG5leHRTdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIG5leHRTdGF0ZSBhcyBUO1xufVxuXG4vKipcbiAqIEFkZCBhIGNoYXJ0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkQ2hhcnRVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtjaGFydH06IFZpc1N0YXRlQWN0aW9ucy5BZGRDaGFydFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgaWYgKCFjaGFydD8uaWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKChzdGF0ZS5jaGFydHMgfHwgW10pLnNvbWUoZXhpc3RpbmcgPT4gZXhpc3RpbmcuaWQgPT09IGNoYXJ0LmlkKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNoYXJ0czogW1xuICAgICAgLi4uKHN0YXRlLmNoYXJ0cyB8fCBbXSkubWFwKGV4aXN0aW5nID0+ICh7XG4gICAgICAgIC4uLmV4aXN0aW5nLFxuICAgICAgICBkaXNwbGF5OiB7XG4gICAgICAgICAgLi4uZXhpc3RpbmcuZGlzcGxheSxcbiAgICAgICAgICBpc0NvbmZpZ0FjdGl2ZTogZmFsc2UsXG4gICAgICAgICAgaXNKc29uRWRpdG9yQWN0aXZlOiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9KSksXG4gICAgICB7XG4gICAgICAgIC4uLmNoYXJ0LFxuICAgICAgICBkaXNwbGF5OiB7XG4gICAgICAgICAgLi4uY2hhcnQuZGlzcGxheSxcbiAgICAgICAgICBpc0NvbmZpZ0FjdGl2ZTogY2hhcnQuZGlzcGxheT8uaXNDb25maWdBY3RpdmUgPz8gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIF1cbiAgfTtcbn07XG5cbi8qKlxuICogVXBkYXRlIGEgY2hhcnRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVDaGFydFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkLCBwcm9wc306IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVDaGFydFVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3QgaWR4ID0gKHN0YXRlLmNoYXJ0cyB8fCBbXSkuZmluZEluZGV4KGNoYXJ0ID0+IGNoYXJ0LmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHByZXYgPSBzdGF0ZS5jaGFydHNbaWR4XTtcbiAgY29uc3QgZGF0YUlkQ2hhbmdlZCA9IHR5cGVvZiBwcm9wcy5kYXRhSWQgPT09ICdzdHJpbmcnICYmIHByb3BzLmRhdGFJZCAhPT0gcHJldi5kYXRhSWQ7XG4gIGNvbnN0IGxheWVySWRDaGFuZ2VkID1cbiAgICBpc0xheWVyQ2hhcnRDb25maWcocHJldikgJiZcbiAgICB0eXBlb2YgKHByb3BzIGFzIExheWVyQ2hhcnRDb25maWcpLmxheWVySWQgPT09ICdzdHJpbmcnICYmXG4gICAgKHByb3BzIGFzIExheWVyQ2hhcnRDb25maWcpLmxheWVySWQgIT09IHByZXYubGF5ZXJJZDtcbiAgbGV0IG5leHQgPSBtZXJnZUNoYXJ0Q29uZmlnKHByZXYsIHByb3BzKTtcbiAgaWYgKGRhdGFJZENoYW5nZWQgfHwgbGF5ZXJJZENoYW5nZWQpIHtcbiAgICBjb25zdCBkYXRhSWQgPSBuZXh0LmRhdGFJZCB8fCB1bmRlZmluZWQ7XG4gICAgbmV4dCA9IGRyb3BNaXNzaW5nQ2hhcnRGaWVsZHMobmV4dCwgZGF0YUlkID8gc3RhdGUuZGF0YXNldHNbZGF0YUlkXSA6IHVuZGVmaW5lZCk7XG4gICAgaWYgKG5leHQuY3Jvc3NGaWx0ZXI/LmVuYWJsZWQpIHtcbiAgICAgIG5leHQgPSBtZXJnZUNoYXJ0Q29uZmlnKG5leHQsIHtcbiAgICAgICAgY3Jvc3NGaWx0ZXI6IHsuLi5uZXh0LmNyb3NzRmlsdGVyLCBlbmFibGVkOiBmYWxzZSwgdmFsdWU6IHt9LCBmaWVsZE5hbWVzOiB7fX1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBjb25zdCBjaGFydHMgPSBbLi4uc3RhdGUuY2hhcnRzXTtcbiAgY2hhcnRzW2lkeF0gPSBuZXh0O1xuICBsZXQgbmV4dFN0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjaGFydHNcbiAgfTtcbiAgY29uc3QgZmlsdGVySWQgPSBuZXh0LmNyb3NzRmlsdGVyPy5maWx0ZXJJZCB8fCBwcmV2LmNyb3NzRmlsdGVyPy5maWx0ZXJJZDtcbiAgaWYgKHByZXYuY3Jvc3NGaWx0ZXI/LmVuYWJsZWQgJiYgIW5leHQuY3Jvc3NGaWx0ZXI/LmVuYWJsZWQgJiYgZmlsdGVySWQpIHtcbiAgICBjb25zdCBvd25lZEZpbHRlcklkcyA9IG5ldyBTZXQoW2ZpbHRlcklkLCBgJHtmaWx0ZXJJZH0teGAsIGAke2ZpbHRlcklkfS15YF0pO1xuICAgIG5leHRTdGF0ZSA9IG5leHRTdGF0ZS5maWx0ZXJzLnJlZHVjZVJpZ2h0KChhY2N1LCBmaWx0ZXIsIGlkeCkgPT4ge1xuICAgICAgcmV0dXJuIG93bmVkRmlsdGVySWRzLmhhcyhmaWx0ZXIuaWQpID8gcmVtb3ZlRmlsdGVyVXBkYXRlcihhY2N1LCB7aWR4fSkgOiBhY2N1O1xuICAgIH0sIG5leHRTdGF0ZSk7XG4gIH1cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgY2hhcnQgYW5kIGFueSBjcm9zcy1maWx0ZXIgaXQgb3duc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUNoYXJ0VXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlQ2hhcnRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiByZW1vdmVDaGFydHNBbmRGaWx0ZXJzKHN0YXRlLCBjaGFydCA9PiBjaGFydC5pZCA9PT0gaWQpO1xuXG4vLyBBTk5PVEFUSU9OIFVQREFURVJTXG5cbmZ1bmN0aW9uIG1ha2VOZXdBbm5vdGF0aW9uKGNvbmZpZz86IEFubm90YXRpb25Qcm9wc1BhcnRpYWwpOiBBbm5vdGF0aW9uIHtcbiAgY29uc3Qga2luZCA9IGNvbmZpZz8ua2luZCA/PyBJTklUSUFMX0FOTk9UQVRJT05fS0lORDtcbiAgY29uc3QgcHJvdmlkZWRBbmdsZSA9IE51bWJlci5pc0Zpbml0ZSgoY29uZmlnIGFzIGFueSk/LmFuZ2xlKSA/IChjb25maWcgYXMgYW55KS5hbmdsZSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgZGVyaXZlZEZyb21BbmdsZSA9XG4gICAgcHJvdmlkZWRBbmdsZSAhPSBudWxsID8gdGV4dFBsYWNlbWVudEZyb21BbmdsZShwcm92aWRlZEFuZ2xlKSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgdGV4dFNpZGUgPVxuICAgIGNvbmZpZz8udGV4dFNpZGUgPz9cbiAgICBkZXJpdmVkRnJvbUFuZ2xlPy5zaWRlID8/XG4gICAgKGtpbmQgPT09IEFubm90YXRpb25LaW5kLlRFWFQgPyB1bmRlZmluZWQgOiBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9TSURFKTtcbiAgY29uc3QgdGV4dFZlcnRpY2FsUG9zaXRpb24gPVxuICAgIGNvbmZpZz8udGV4dFZlcnRpY2FsUG9zaXRpb24gPz9cbiAgICBkZXJpdmVkRnJvbUFuZ2xlPy52ZXJ0aWNhbCA/P1xuICAgIChraW5kID09PSBBbm5vdGF0aW9uS2luZC5URVhUID8gdW5kZWZpbmVkIDogSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfVkVSVElDQUxfUE9TSVRJT04pO1xuICBjb25zdCBiYXNlID0ge1xuICAgIGlkOiBjb25maWc/LmlkID8/IGdlbmVyYXRlSGFzaElkKDYpLFxuICAgIGtpbmQsXG4gICAgaXNWaXNpYmxlOiBjb25maWc/LmlzVmlzaWJsZSA/PyB0cnVlLFxuICAgIGF1dG9TaXplOiBjb25maWc/LmF1dG9TaXplID8/IHRydWUsXG4gICAgYXV0b1NpemVZOiBjb25maWc/LmF1dG9TaXplWSA/PyB0cnVlLFxuICAgIGFuY2hvclBvaW50OiBjb25maWc/LmFuY2hvclBvaW50ID8/IChbMCwgMF0gYXMgW251bWJlciwgbnVtYmVyXSksXG4gICAgbGFiZWw6IGNvbmZpZz8ubGFiZWwgPz8gJ05ldyBBbm5vdGF0aW9uJyxcbiAgICBsaW5lQ29sb3I6IGNvbmZpZz8ubGluZUNvbG9yID8/IElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SLFxuICAgIGxpbmVXaWR0aDogY29uZmlnPy5saW5lV2lkdGggPz8gSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgsXG4gICAgdGV4dFdpZHRoOiBjb25maWc/LnRleHRXaWR0aCA/PyBJTklUSUFMX0FOTk9UQVRJT05fVEVYVF9XSURUSCxcbiAgICB0ZXh0SGVpZ2h0OiBjb25maWc/LnRleHRIZWlnaHQgPz8gSU5JVElBTF9BTk5PVEFUSU9OX1RFWFRfSEVJR0hULFxuICAgIHRleHRWZXJ0aWNhbEFsaWduOiBjb25maWc/LnRleHRWZXJ0aWNhbEFsaWduID8/ICgnYm90dG9tJyBhcyBjb25zdCksXG4gICAgLi4uKHRleHRTaWRlID8ge3RleHRTaWRlfSA6IHt9KSxcbiAgICAuLi4odGV4dFZlcnRpY2FsUG9zaXRpb24gPyB7dGV4dFZlcnRpY2FsUG9zaXRpb259IDoge30pLFxuICAgIG1hcEluZGV4OiBjb25maWc/Lm1hcEluZGV4XG4gIH07XG5cbiAgY29uc3QgZGVmYXVsdEFuZ2xlID1cbiAgICB0ZXh0U2lkZSAmJiB0ZXh0VmVydGljYWxQb3NpdGlvblxuICAgICAgPyBBTk5PVEFUSU9OX0FOR0xFX0JZX1BMQUNFTUVOVFtgJHt0ZXh0U2lkZX0tJHt0ZXh0VmVydGljYWxQb3NpdGlvbn1gXVxuICAgICAgOiBJTklUSUFMX0FOTk9UQVRJT05fQU5HTEU7XG5cbiAgc3dpdGNoIChraW5kKSB7XG4gICAgY2FzZSBBbm5vdGF0aW9uS2luZC5QT0lOVDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIGtpbmQ6IEFubm90YXRpb25LaW5kLlBPSU5ULFxuICAgICAgICBhcm1MZW5ndGg6IChjb25maWcgYXMgYW55KT8uYXJtTGVuZ3RoID8/IElOSVRJQUxfQU5OT1RBVElPTl9BUk1fTEVOR1RILFxuICAgICAgICBhbmdsZTogcHJvdmlkZWRBbmdsZSA/PyBkZWZhdWx0QW5nbGVcbiAgICAgIH07XG4gICAgY2FzZSBBbm5vdGF0aW9uS2luZC5BUlJPVzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIGtpbmQ6IEFubm90YXRpb25LaW5kLkFSUk9XLFxuICAgICAgICBhcm1MZW5ndGg6IChjb25maWcgYXMgYW55KT8uYXJtTGVuZ3RoID8/IElOSVRJQUxfQU5OT1RBVElPTl9BUk1fTEVOR1RILFxuICAgICAgICBhbmdsZTogcHJvdmlkZWRBbmdsZSA/PyBkZWZhdWx0QW5nbGVcbiAgICAgIH07XG4gICAgY2FzZSBBbm5vdGF0aW9uS2luZC5DSVJDTEU6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlLFxuICAgICAgICBraW5kOiBBbm5vdGF0aW9uS2luZC5DSVJDTEUsXG4gICAgICAgIGFybUxlbmd0aDogKGNvbmZpZyBhcyBhbnkpPy5hcm1MZW5ndGggPz8gSU5JVElBTF9BTk5PVEFUSU9OX0FSTV9MRU5HVEgsXG4gICAgICAgIGFuZ2xlOiBwcm92aWRlZEFuZ2xlID8/IGRlZmF1bHRBbmdsZSxcbiAgICAgICAgcmFkaXVzSW5NZXRlcnM6IChjb25maWcgYXMgYW55KT8ucmFkaXVzSW5NZXRlcnMgPz8gMTAwMFxuICAgICAgfTtcbiAgICBjYXNlIEFubm90YXRpb25LaW5kLlRFWFQ6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmJhc2UsXG4gICAgICAgIGtpbmQ6IEFubm90YXRpb25LaW5kLlRFWFRcbiAgICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBBZGQgYSBuZXcgYW5ub3RhdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEFubm90YXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLkFkZEFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGNvbnN0IG5ld0Fubm90YXRpb24gPSBtYWtlTmV3QW5ub3RhdGlvbihhY3Rpb24uY29uZmlnKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbm5vdGF0aW9uczogW25ld0Fubm90YXRpb24sIC4uLnN0YXRlLmFubm90YXRpb25zXSxcbiAgICBzZWxlY3RlZEFubm90YXRpb25JZDogbmV3QW5ub3RhdGlvbi5pZCxcbiAgICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDogdHJ1ZVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYW4gYW5ub3RhdGlvblxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUFubm90YXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZH06IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVBbm5vdGF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFubm90YXRpb25zOiBzdGF0ZS5hbm5vdGF0aW9ucy5maWx0ZXIoYSA9PiBhLmlkICE9PSBpZCksXG4gICAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ6IHN0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbklkID09PSBpZCA/IG51bGwgOiBzdGF0ZS5zZWxlY3RlZEFubm90YXRpb25JZCxcbiAgICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDpcbiAgICAgIHN0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbklkID09PSBpZCA/IGZhbHNlIDogc3RhdGUuaXNFZGl0aW5nQW5ub3RhdGlvblRleHRcbiAgfTtcbn07XG5cbi8qKlxuICogVXBkYXRlIGFuIGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWQsIGNvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVBbm5vdGF0aW9uVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBpZHggPSBzdGF0ZS5hbm5vdGF0aW9ucy5maW5kSW5kZXgoYSA9PiBhLmlkID09PSBpZCk7XG4gIGlmIChpZHggPCAwKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IHVwZGF0ZSBhbm5vdGF0aW9uIHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBwcmV2ID0gc3RhdGUuYW5ub3RhdGlvbnNbaWR4XTtcbiAgbGV0IG5leHRBbm5vdGF0aW9uOiBBbm5vdGF0aW9uO1xuXG4gIGlmIChjb25maWcua2luZCAmJiBjb25maWcua2luZCAhPT0gcHJldi5raW5kKSB7XG4gICAgbmV4dEFubm90YXRpb24gPSBtYWtlTmV3QW5ub3RhdGlvbih7Li4ucHJldiwgLi4uY29uZmlnfSBhcyBBbm5vdGF0aW9uUHJvcHNQYXJ0aWFsKTtcbiAgfSBlbHNlIHtcbiAgICBuZXh0QW5ub3RhdGlvbiA9IHsuLi5wcmV2LCAuLi5jb25maWd9IGFzIEFubm90YXRpb247XG4gIH1cblxuICBjb25zdCBuZXdBbm5vdGF0aW9ucyA9IFsuLi5zdGF0ZS5hbm5vdGF0aW9uc107XG4gIG5ld0Fubm90YXRpb25zW2lkeF0gPSBuZXh0QW5ub3RhdGlvbjtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbm5vdGF0aW9uczogbmV3QW5ub3RhdGlvbnNcbiAgfTtcbn07XG5cbi8qKlxuICogRHVwbGljYXRlIGFuIGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBkdXBsaWNhdGVBbm5vdGF0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7aWR9OiBWaXNTdGF0ZUFjdGlvbnMuRHVwbGljYXRlQW5ub3RhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgb3JpZ2luYWwgPSBzdGF0ZS5hbm5vdGF0aW9ucy5maW5kKGEgPT4gYS5pZCA9PT0gaWQpO1xuICBpZiAoIW9yaWdpbmFsKSB7XG4gICAgQ29uc29sZS53YXJuKGBjYW4gbm90IGR1cGxpY2F0ZSBhbm5vdGF0aW9uIHdpdGggaW52YWxpZCBpZCAke2lkfWApO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBuZXdBbm5vdGF0aW9uID0ge1xuICAgIC4uLmNsb25lRGVlcChvcmlnaW5hbCksXG4gICAgaWQ6IGdlbmVyYXRlSGFzaElkKDYpLFxuICAgIGxhYmVsOiBgQ29weSBvZiAke29yaWdpbmFsLmxhYmVsfWBcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbm5vdGF0aW9uczogW25ld0Fubm90YXRpb24sIC4uLnN0YXRlLmFubm90YXRpb25zXSxcbiAgICBzZWxlY3RlZEFubm90YXRpb25JZDogbmV3QW5ub3RhdGlvbi5pZCxcbiAgICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDogZmFsc2VcbiAgfTtcbn07XG5cbi8qKlxuICogU2V0IHNlbGVjdGVkIGFubm90YXRpb25cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRTZWxlY3RlZEFubm90YXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZCwgaXNFZGl0aW5nVGV4dH06IFZpc1N0YXRlQWN0aW9ucy5TZXRTZWxlY3RlZEFubm90YXRpb25VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmIChcbiAgICBpZCA9PT0gc3RhdGUuc2VsZWN0ZWRBbm5vdGF0aW9uSWQgJiZcbiAgICAoaXNFZGl0aW5nVGV4dCA/PyBmYWxzZSkgPT09IHN0YXRlLmlzRWRpdGluZ0Fubm90YXRpb25UZXh0XG4gICkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHNlbGVjdGVkQW5ub3RhdGlvbklkOiBpZCxcbiAgICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dDogaXNFZGl0aW5nVGV4dCA/PyBmYWxzZVxuICB9O1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBkYXRhc2V0IGFuZCBhbGwgbGF5ZXJzLCBmaWx0ZXJzLCB0b29sdGlwIGNvbmZpZ3MgdGhhdCBiYXNlZCBvbiBpdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZURhdGFzZXRVcGRhdGVyPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5SZW1vdmVEYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVCB7XG4gIGNvbnN0IHtkYXRhSWQ6IGRhdGFzZXRLZXl9ID0gYWN0aW9uO1xuICBjb25zdCB7ZGF0YXNldHN9ID0gc3RhdGU7XG5cbiAgaWYgKCFkYXRhc2V0c1tkYXRhc2V0S2V5XSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIERlcml2ZWQgdGFibGVzIGFyZSBzbmFwc2hvdHM6IGtlZXAgdGhlbSB3aGVuIGEgc291cmNlIGRhdGFzZXQgaXMgZGVsZXRlZC5cbiAgLy8gT25seSBkcm9wIGluLXByb2dyZXNzIGdyb3VwLWJ5IC8gam9pbiBkcmFmdHMgdGhhdCByZWZlcmVuY2VkIHRoaXMgZGF0YXNldC5cbiAgY29uc3QgbmV4dFN0YXRlID0gcmVtb3ZlT3BzRm9yRGF0YXNldHMoc3RhdGUsIFtkYXRhc2V0S2V5XSkgYXMgVDtcbiAgcmV0dXJuIHJlbW92ZVNpbmdsZURhdGFzZXRVcGRhdGVyKG5leHRTdGF0ZSwgZGF0YXNldEtleSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVNpbmdsZURhdGFzZXRVcGRhdGVyPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFQsIGRhdGFzZXRLZXk6IHN0cmluZyk6IFQge1xuICBjb25zdCB7ZGF0YXNldHN9ID0gc3RhdGU7XG4gIGlmICghZGF0YXNldHNbZGF0YXNldEtleV0pIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7XG4gICAgbGF5ZXJzLFxuICAgIGRhdGFzZXRzOiB7W2RhdGFzZXRLZXldOiBfZGF0YXNldCwgLi4ubmV3RGF0YXNldHN9XG4gIH0gPSBzdGF0ZTtcblxuICBjb25zdCBsYXllcnNUb1JlbW92ZSA9IGxheWVycy5maWx0ZXIobCA9PiBsLmNvbmZpZy5kYXRhSWQgPT09IGRhdGFzZXRLZXkpLm1hcChsID0+IGwuaWQpO1xuXG4gIGxldCBuZXdTdGF0ZSA9IGxheWVyc1RvUmVtb3ZlLnJlZHVjZSgoYWNjdSwgaWQpID0+IHJlbW92ZUxheWVyVXBkYXRlcihhY2N1LCB7aWR9KSwge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBuZXdEYXRhc2V0c1xuICB9KTtcblxuICBjb25zdCBmaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGZpbHRlciBvZiBuZXdTdGF0ZS5maWx0ZXJzKSB7XG4gICAgY29uc3QgdmFsdWVJbmRleCA9IGZpbHRlci5kYXRhSWQuaW5kZXhPZihkYXRhc2V0S2V5KTtcbiAgICBpZiAodmFsdWVJbmRleCA+PSAwICYmIGZpbHRlci5kYXRhSWQubGVuZ3RoID4gMSkge1xuICAgICAgZmlsdGVycy5wdXNoKF9yZW1vdmVGaWx0ZXJEYXRhSWRBdFZhbHVlSW5kZXgoZmlsdGVyLCB2YWx1ZUluZGV4LCBkYXRhc2V0cykpO1xuICAgIH0gZWxzZSBpZiAodmFsdWVJbmRleCA8IDApIHtcbiAgICAgIGZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIG5ld1N0YXRlID0gey4uLm5ld1N0YXRlLCBmaWx0ZXJzfTtcblxuICByZXR1cm4gcmVtb3ZlQ2hhcnRzQW5kRmlsdGVycyhcbiAgICByZW1vdmVEYXRhc2V0RnJvbUludGVyYWN0aW9uQ29uZmlnKG5ld1N0YXRlLCB7ZGF0YUlkOiBkYXRhc2V0S2V5fSksXG4gICAgY2hhcnQgPT4ge1xuICAgICAgaWYgKGNoYXJ0LmRhdGFJZCA9PT0gZGF0YXNldEtleSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0xheWVyQ2hhcnRDb25maWcoY2hhcnQpKSB7XG4gICAgICAgIHJldHVybiBsYXllcnNUb1JlbW92ZS5pbmNsdWRlcyhjaGFydC5sYXllcklkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZURhdGFzZXRGcm9tSW50ZXJhY3Rpb25Db25maWcoc3RhdGUsIHtkYXRhSWR9KSB7XG4gIGxldCB7aW50ZXJhY3Rpb25Db25maWd9ID0gc3RhdGU7XG4gIGNvbnN0IHt0b29sdGlwfSA9IGludGVyYWN0aW9uQ29uZmlnO1xuICBpZiAodG9vbHRpcCkge1xuICAgIGNvbnN0IHtjb25maWd9ID0gdG9vbHRpcDtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgY29uc3Qge1tkYXRhSWRdOiBmaWVsZHMsIC4uLmZpZWxkc1RvU2hvd30gPSBjb25maWcuZmllbGRzVG9TaG93O1xuICAgIGludGVyYWN0aW9uQ29uZmlnID0ge1xuICAgICAgLi4uaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICB0b29sdGlwOiB7Li4udG9vbHRpcCwgY29uZmlnOiB7Li4uY29uZmlnLCBmaWVsZHNUb1Nob3d9fVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gey4uLnN0YXRlLCBpbnRlcmFjdGlvbkNvbmZpZ307XG59XG4vKipcbiAqIHVwZGF0ZSBsYXllciBibGVuZGluZyBtb2RlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlTGF5ZXJCbGVuZGluZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlTGF5ZXJCbGVuZGluZ1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBsYXllckJsZW5kaW5nOiBhY3Rpb24ubW9kZVxufSk7XG5cbi8qKlxuICogdXBkYXRlIG92ZXJsYXkgYmxlbmRpbmcgbW9kZVxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwZGF0ZU92ZXJsYXlCbGVuZGluZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlT3ZlcmxheUJsZW5kaW5nVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIG92ZXJsYXlCbGVuZGluZzogYWN0aW9uLm1vZGVcbn0pO1xuXG4vKipcbiAqIERpc3BsYXkgZGF0YXNldCB0YWJsZSBpbiBhIG1vZGFsXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuU2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0aW5nRGF0YXNldDogYWN0aW9uLmRhdGFJZFxuICB9O1xufTtcblxuLyoqXG4gKiBBZGQgY3VzdG9tIGNvbG9yIGZvciBkYXRhc2V0cyBhbmQgbGF5ZXJzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlVGFibGVDb2xvclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuVXBkYXRlRGF0YXNldENvbG9yVXBkYXRlclxuKTogVmlzU3RhdGUgPT4ge1xuICByZXR1cm4gdXBkYXRlRGF0YXNldFByb3BzVXBkYXRlcihzdGF0ZSwge2RhdGFJZDogYWN0aW9uLmRhdGFJZCwgcHJvcHM6IHtjb2xvcjogYWN0aW9uLm5ld0NvbG9yfX0pO1xufTtcblxuLyoqXG4gKiByZXNldCB2aXNTdGF0ZSB0byBpbml0aWFsIFN0YXRlXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVzZXRNYXBDb25maWdVcGRhdGVyID0gKHN0YXRlOiBWaXNTdGF0ZSk6IFZpc1N0YXRlID0+ICh7XG4gIC4uLklOSVRJQUxfVklTX1NUQVRFLFxuICAuLi5zdGF0ZS5pbml0aWFsU3RhdGUsXG4gIGluaXRpYWxTdGF0ZTogc3RhdGUuaW5pdGlhbFN0YXRlXG59KTtcblxuLyoqXG4gKiBQcm9wYWdhdGUgYHZpc1N0YXRlYCByZWR1Y2VyIHdpdGggYSBuZXcgY29uZmlndXJhdGlvbi4gQ3VycmVudCBjb25maWcgd2lsbCBiZSBvdmVycmlkZS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZWNlaXZlTWFwQ29uZmlnVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7XG4gICAgcGF5bG9hZDoge2NvbmZpZyA9IHt9LCBvcHRpb25zID0ge319XG4gIH06IHtcbiAgICB0eXBlPzogdHlwZW9mIEFjdGlvblR5cGVzLlJFQ0VJVkVfTUFQX0NPTkZJRztcbiAgICBwYXlsb2FkOiBSZWNlaXZlTWFwQ29uZmlnUGF5bG9hZDtcbiAgfVxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoIWNvbmZpZy52aXNTdGF0ZSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHtrZWVwRXhpc3RpbmdDb25maWd9ID0gb3B0aW9ucztcblxuICAvLyByZXNldCBjb25maWcgaWYga2VlcEV4aXN0aW5nQ29uZmlnIGlzIGZhbHN5XG4gIGxldCBtZXJnZWRTdGF0ZSA9ICFrZWVwRXhpc3RpbmdDb25maWcgPyByZXNldE1hcENvbmZpZ1VwZGF0ZXIoc3RhdGUpIDogc3RhdGU7XG4gIGZvciAoY29uc3QgbWVyZ2VyIG9mIHN0YXRlLm1lcmdlcnMpIHtcbiAgICBpZiAoaXNWYWxpZE1lcmdlcihtZXJnZXIpICYmIGhhc1Byb3BzVG9NZXJnZShjb25maWcudmlzU3RhdGUsIG1lcmdlci5wcm9wKSkge1xuICAgICAgbWVyZ2VkU3RhdGUgPSBtZXJnZXIubWVyZ2UoXG4gICAgICAgIG1lcmdlZFN0YXRlLFxuICAgICAgICBnZXRQcm9wVmFsdWVUb01lcmdlcihjb25maWcudmlzU3RhdGUsIG1lcmdlci5wcm9wLCBtZXJnZXIudG9NZXJnZVByb3ApLFxuICAgICAgICAvLyBmcm9tQ29uZmlnXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1lcmdlZFN0YXRlO1xufTtcblxuLyoqXG4gKiBUcmlnZ2VyIGxheWVyIGhvdmVyIGV2ZW50IHdpdGggaG92ZXJlZCBvYmplY3RcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsYXllckhvdmVyVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5PbkxheWVySG92ZXJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgaG92ZXJJbmZvOiB7XG4gICAgLy8gZGVjay5nbCBpbmZvIGlzIG11dGFibGVcbiAgICAuLi5hY3Rpb24uaW5mbyxcbiAgICAuLi4oTnVtYmVyLmlzRmluaXRlKGFjdGlvbi5tYXBJbmRleCkgPyB7bWFwSW5kZXg6IGFjdGlvbi5tYXBJbmRleH0gOiB7fSlcbiAgfVxufSk7XG5cbi8qIGVzbGludC1lbmFibGUgbWF4LXN0YXRlbWVudHMgKi9cblxuLyoqXG4gKiBVcGRhdGUgYGludGVyYWN0aW9uQ29uZmlnYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludGVyYWN0aW9uQ29uZmlnQ2hhbmdlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5JbnRlcmFjdGlvbkNvbmZpZ0NoYW5nZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2NvbmZpZ30gPSBhY3Rpb247XG5cbiAgY29uc3QgaW50ZXJhY3Rpb25Db25maWcgPSB7XG4gICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWcsXG4gICAgLi4ue1tjb25maWcuaWRdOiBjb25maWd9XG4gIH07XG5cbiAgLy8gRG9uJ3QgZW5hYmxlIHRvb2x0aXAgYW5kIGJydXNoIGF0IHRoZSBzYW1lIHRpbWVcbiAgLy8gYnV0IGNvb3JkaW5hdGVzIGNhbiBiZSBzaG93biBhdCBhbGwgdGltZVxuICBjb25zdCBjb250cmFkaWN0ID0gWydicnVzaCcsICd0b29sdGlwJ107XG5cbiAgaWYgKFxuICAgIGNvbnRyYWRpY3QuaW5jbHVkZXMoY29uZmlnLmlkKSAmJlxuICAgIGNvbmZpZy5lbmFibGVkICYmXG4gICAgIXN0YXRlLmludGVyYWN0aW9uQ29uZmlnW2NvbmZpZy5pZF0uZW5hYmxlZFxuICApIHtcbiAgICAvLyBvbmx5IGVuYWJsZSBvbmUgaW50ZXJhY3Rpb24gYXQgYSB0aW1lXG4gICAgY29udHJhZGljdC5mb3JFYWNoKGsgPT4ge1xuICAgICAgaWYgKGsgIT09IGNvbmZpZy5pZCkge1xuICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZ1trXSA9IHsuLi5pbnRlcmFjdGlvbkNvbmZpZ1trXSwgZW5hYmxlZDogZmFsc2V9O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgaW50ZXJhY3Rpb25Db25maWdcbiAgfTtcblxuICBpZiAoY29uZmlnLmlkID09PSAnZ2VvY29kZXInICYmICFjb25maWcuZW5hYmxlZCkge1xuICAgIHJldHVybiByZW1vdmVEYXRhc2V0VXBkYXRlcihuZXdTdGF0ZSwge2RhdGFJZDogJ2dlb2NvZGVyX2RhdGFzZXQnfSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbi8qKlxuICogVHJpZ2dlciBsYXllciBjbGljayBldmVudCB3aXRoIGNsaWNrZWQgb2JqZWN0XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbGF5ZXJDbGlja1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuT25MYXllckNsaWNrVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIG1vdXNlUG9zOiBzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZy5jb29yZGluYXRlLmVuYWJsZWRcbiAgICA/IHtcbiAgICAgICAgLi4uc3RhdGUubW91c2VQb3MsXG4gICAgICAgIHBpbm5lZDogc3RhdGUubW91c2VQb3MucGlubmVkID8gbnVsbCA6IGNsb25lRGVlcChzdGF0ZS5tb3VzZVBvcylcbiAgICAgIH1cbiAgICA6IHN0YXRlLm1vdXNlUG9zLFxuICBjbGlja2VkOiBhY3Rpb24uaW5mbyAmJiBhY3Rpb24uaW5mby5waWNrZWQgPyBhY3Rpb24uaW5mbyA6IG51bGxcbn0pO1xuXG4vKipcbiAqIFRyaWdnZXIgbWFwIGNsaWNrIGV2ZW50LCB1bnNlbGVjdCBjbGlja2VkIG9iamVjdFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG1hcENsaWNrVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLk9uTWFwQ2xpY2tVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2xpY2tlZDogbnVsbFxuICB9O1xufTtcblxuLyoqXG4gKiBUcmlnZ2VyIG1hcCBtb3ZlIGV2ZW50XG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbW91c2VNb3ZlVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZXZ0fTogVmlzU3RhdGVBY3Rpb25zLk9uTW91c2VNb3ZlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBpZiAoT2JqZWN0LnZhbHVlcyhzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZykuc29tZShjb25maWcgPT4gY29uZmlnLmVuYWJsZWQpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbW91c2VQb3M6IHtcbiAgICAgICAgLi4uc3RhdGUubW91c2VQb3MsXG4gICAgICAgIC4uLihBcnJheS5pc0FycmF5KGV2dC5wb2ludCkgPyB7bW91c2VQb3NpdGlvbjogWy4uLmV2dC5wb2ludF19IDoge30pLFxuICAgICAgICAuLi4oQXJyYXkuaXNBcnJheShldnQubG5nTGF0KSA/IHtjb29yZGluYXRlOiBbLi4uZXZ0LmxuZ0xhdF19IDoge30pXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn07XG4vKipcbiAqIFRvZ2dsZSB2aXNpYmlsaXR5IG9mIGEgbGF5ZXIgZm9yIGEgc3BsaXQgbWFwXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlU3BsaXRNYXBVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogTWFwU3RhdGVBY3Rpb25zLlRvZ2dsZVNwbGl0TWFwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT5cbiAgc3RhdGUuc3BsaXRNYXBzICYmIHN0YXRlLnNwbGl0TWFwcy5sZW5ndGggPT09IDBcbiAgICA/IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIC8vIG1heWJlIHdlIHNob3VsZCB1c2UgYW4gYXJyYXkgdG8gc3RvcmUgc3RhdGUgZm9yIGEgc2luZ2xlIG1hcCBhcyB3ZWxsXG4gICAgICAgIC8vIGlmIGN1cnJlbnQgbWFwcyBsZW5ndGggaXMgZXF1YWwgdG8gMCBpdCBtZWFucyB0aGF0IHdlIGFyZSBhYm91dCB0byBzcGxpdCB0aGUgdmlld1xuICAgICAgICBzcGxpdE1hcHM6IGNvbXB1dGVTcGxpdE1hcExheWVycyhzdGF0ZS5sYXllcnMsIHtkdXBsaWNhdGU6IGZhbHNlfSlcbiAgICAgIH1cbiAgICA6IGNsb3NlU3BlY2lmaWNNYXBBdEluZGV4KHN0YXRlLCBhY3Rpb24pO1xuXG4vKipcbiAqIFRvZ2dsZSB2aXNpYmlsaXR5IG9mIGEgbGF5ZXIgaW4gYSBzcGxpdCBtYXBcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVMYXllckZvck1hcFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge21hcEluZGV4LCBsYXllcklkfTogVmlzU3RhdGVBY3Rpb25zLlRvZ2dsZUxheWVyRm9yTWFwVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7c3BsaXRNYXBzfSA9IHN0YXRlO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgc3BsaXRNYXBzOiBzcGxpdE1hcHMubWFwKChzbSwgaSkgPT5cbiAgICAgIGkgPT09IG1hcEluZGV4XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uc3BsaXRNYXBzW2ldLFxuICAgICAgICAgICAgbGF5ZXJzOiB7XG4gICAgICAgICAgICAgIC4uLnNwbGl0TWFwc1tpXS5sYXllcnMsXG4gICAgICAgICAgICAgIC8vIGlmIGxheWVySWQgbm90IGluIGxheWVycywgc2V0IGl0IHRvIHZpc2libGVcbiAgICAgICAgICAgICAgW2xheWVySWRdOiAhc3BsaXRNYXBzW2ldLmxheWVyc1tsYXllcklkXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgOiBzbVxuICAgIClcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGhhc1RhYnVsYXJEYXRhc2V0RGF0YShkYXRhPzogUHJvdG9EYXRhc2V0WydkYXRhJ10gfCBudWxsKTogYm9vbGVhbiB7XG4gIHJldHVybiBCb29sZWFuKFxuICAgIGRhdGE/LnJvd3M/Lmxlbmd0aCB8fCBkYXRhPy5jb2xzPy5sZW5ndGggfHwgKGRhdGEgYXMge2Fycm93VGFibGU/OiB1bmtub3dufSk/LmFycm93VGFibGVcbiAgKTtcbn1cblxuZnVuY3Rpb24gbmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZShkYXRhc2V0OiBQcm90b0RhdGFzZXQpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBkYXRhc2V0LmluZm8/LnR5cGUgPT09IERhdGFzZXRUeXBlLkVYVEVSTkFMTFlfSE9TVEVEICYmXG4gICAgdHlwZW9mIGRhdGFzZXQubWV0YWRhdGE/LnNvdXJjZSA9PT0gJ3N0cmluZycgJiZcbiAgICAhaGFzVGFidWxhckRhdGFzZXREYXRhKGRhdGFzZXQuZGF0YSlcbiAgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQoe1xuICBhcmc6IGRhdGFzZXQsXG4gIG9uUHJvZ3Jlc3Ncbn06IHtcbiAgYXJnOiBQcm90b0RhdGFzZXQ7XG4gIG9uUHJvZ3Jlc3M6IChwcm9ncmVzczoge2xvYWRlZDogbnVtYmVyOyB0b3RhbD86IG51bWJlcjsgcGVyY2VudDogbnVtYmVyfSkgPT4gdm9pZDtcbn0pOiBQcm9taXNlPFByb3RvRGF0YXNldD4ge1xuICBpZiAoIW5lZWRzRXh0ZXJuYWxseUhvc3RlZEh5ZHJhdGUoZGF0YXNldCkpIHtcbiAgICByZXR1cm4gZGF0YXNldDtcbiAgfVxuICBjb25zdCBsb2FkZWQgPSBhd2FpdCBsb2FkRXh0ZXJuYWxseUhvc3RlZERhdGFzZXQoe1xuICAgIHNvdXJjZTogZGF0YXNldC5tZXRhZGF0YT8uc291cmNlIGFzIHN0cmluZyxcbiAgICBmb3JtYXQ6IGdldFJlbW90ZVNvdXJjZUZvcm1hdChkYXRhc2V0Lm1ldGFkYXRhKSxcbiAgICBzaXplOiB0eXBlb2YgZGF0YXNldC5tZXRhZGF0YT8uc2l6ZSA9PT0gJ251bWJlcicgPyBkYXRhc2V0Lm1ldGFkYXRhLnNpemUgOiB1bmRlZmluZWQsXG4gICAgYnlwYXNzQ2FjaGU6IGdldERhdGFzZXRSZWZyZXNoSW50ZXJ2YWxNcyhkYXRhc2V0Lm1ldGFkYXRhKSA+IDAsXG4gICAgb25Qcm9ncmVzc1xuICB9KTtcbiAgaWYgKCFsb2FkZWQuZGF0YSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gZGF0YSBsb2FkZWQgZnJvbSAke2RhdGFzZXQubWV0YWRhdGE/LnNvdXJjZX1gKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLmRhdGFzZXQsXG4gICAgZGF0YTogbG9hZGVkLmRhdGEsXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgIC4uLmRhdGFzZXQubWV0YWRhdGEsXG4gICAgICBldGFnOiBsb2FkZWQuZXRhZyxcbiAgICAgIGxhc3RNb2RpZmllZDogbG9hZGVkLmxhc3RNb2RpZmllZCxcbiAgICAgIC4uLih0eXBlb2YgbG9hZGVkLnNpemUgPT09ICdudW1iZXInID8ge3NpemU6IGxvYWRlZC5zaXplfSA6IHt9KSxcbiAgICAgIGxhc3RGZXRjaGVkQXQ6IERhdGUubm93KCksXG4gICAgICByZWZyZXNoU3RhdHVzOiAnaWRsZSdcbiAgICB9XG4gIH07XG59XG5cbmNvbnN0IEhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLID0gVGFzay5mcm9tUHJvbWlzZVdpdGhQcm9ncmVzcyhcbiAgaHlkcmF0ZUV4dGVybmFsbHlIb3N0ZWRQcm90b0RhdGFzZXQsXG4gICdIWURSQVRFX0VYVEVSTkFMTFlfSE9TVEVEX0RBVEFTRVRfVEFTSydcbik7XG5cbmNvbnN0IEZBSUxfQ1JFQVRFX0RBVEFTRVRfVEFTSyA9IFRhc2suZnJvbVByb21pc2UoYXN5bmMgKG1lc3NhZ2U6IHN0cmluZykgPT4ge1xuICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG59LCAnRkFJTF9DUkVBVEVfREFUQVNFVF9UQVNLJyk7XG5cbmZ1bmN0aW9uIGdldERhdGFzZXRQcm9ncmVzc0lkKGRhdGFzZXQ6IFByb3RvRGF0YXNldCwgaW5kZXggPSAwKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBkYXRhc2V0LmluZm8/LmlkID09PSAnc3RyaW5nJyAmJiBkYXRhc2V0LmluZm8uaWQpIHtcbiAgICByZXR1cm4gZGF0YXNldC5pbmZvLmlkO1xuICB9XG4gIGlmICh0eXBlb2YgZGF0YXNldC5tZXRhZGF0YT8uc291cmNlID09PSAnc3RyaW5nJyAmJiBkYXRhc2V0Lm1ldGFkYXRhLnNvdXJjZSkge1xuICAgIHJldHVybiBkYXRhc2V0Lm1ldGFkYXRhLnNvdXJjZTtcbiAgfVxuICByZXR1cm4gYGRhdGFzZXQtJHtpbmRleH1gO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVOZXdEYXRhRW50cnlUYXNrKGRhdGFzZXQ6IFByb3RvRGF0YXNldCwgZGF0YXNldHM6IERhdGFzZXRzKSB7XG4gIGlmICghbmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZShkYXRhc2V0KSkge1xuICAgIHJldHVybiBjcmVhdGVOZXdEYXRhRW50cnkoZGF0YXNldCwgZGF0YXNldHMpO1xuICB9XG4gIGNvbnN0IHByb2dyZXNzSWQgPSBnZXREYXRhc2V0UHJvZ3Jlc3NJZChkYXRhc2V0KTtcbiAgcmV0dXJuIEhZRFJBVEVfRVhURVJOQUxMWV9IT1NURURfREFUQVNFVF9UQVNLKHtcbiAgICBhcmc6IGRhdGFzZXQsXG4gICAgb25Qcm9ncmVzczogcHJvZ3Jlc3MgPT5cbiAgICAgIHNldExvYWRpbmdQcm9ncmVzcyhcbiAgICAgICAgcHJvZ3Jlc3NJZCxcbiAgICAgICAgTWF0aC5yb3VuZCgocHJvZ3Jlc3M/LnBlcmNlbnQgPz8gMCkgKiAxMDApLFxuICAgICAgICBwcm9ncmVzcz8ucGhhc2UgPT09ICdwcm9jZXNzaW5nJyA/ICdwcm9jZXNzaW5nJyA6IHVuZGVmaW5lZFxuICAgICAgKVxuICB9KS5jaGFpbihoeWRyYXRlZCA9PiB7XG4gICAgY29uc3QgdGFzayA9IGNyZWF0ZU5ld0RhdGFFbnRyeShoeWRyYXRlZCwgZGF0YXNldHMpO1xuICAgIHJldHVybiAoXG4gICAgICB0YXNrIHx8XG4gICAgICBGQUlMX0NSRUFURV9EQVRBU0VUX1RBU0soJ0ZhaWxlZCB0byBjcmVhdGUgYSBuZXcgZGF0YXNldCBkdWUgdG8gZGF0YSB2ZXJpZmljYXRpb24gZXJyb3JzJylcbiAgICApO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY2xlYXJMb2FkaW5nUHJvZ3Jlc3Moc3RhdGU6IFZpc1N0YXRlLCBpZHM/OiBzdHJpbmdbXSk6IFZpc1N0YXRlIHtcbiAgY29uc3QgY3VycmVudCA9IHN0YXRlLmxvYWRpbmdQcm9ncmVzcyB8fCB7fTtcbiAgY29uc3QgcHJvY2Vzc2luZyA9IHN0YXRlLmxvYWRpbmdQcm9jZXNzaW5nIHx8IHt9O1xuICBpZiAoIU9iamVjdC5rZXlzKGN1cnJlbnQpLmxlbmd0aCAmJiAhT2JqZWN0LmtleXMocHJvY2Vzc2luZykubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmICgoc3RhdGUubG9hZGluZ0luZGljYXRvclZhbHVlIHx8IDApIDw9IDApIHtcbiAgICByZXR1cm4gey4uLnN0YXRlLCBsb2FkaW5nUHJvZ3Jlc3M6IHt9LCBsb2FkaW5nUHJvY2Vzc2luZzoge319O1xuICB9XG4gIGlmICghaWRzPy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbmV4dCA9IHsuLi5jdXJyZW50fTtcbiAgY29uc3QgbmV4dFByb2Nlc3NpbmcgPSB7Li4ucHJvY2Vzc2luZ307XG4gIGlkcy5mb3JFYWNoKGlkID0+IHtcbiAgICBkZWxldGUgbmV4dFtpZF07XG4gICAgZGVsZXRlIG5leHRQcm9jZXNzaW5nW2lkXTtcbiAgfSk7XG4gIHJldHVybiB7Li4uc3RhdGUsIGxvYWRpbmdQcm9ncmVzczogbmV4dCwgbG9hZGluZ1Byb2Nlc3Npbmc6IG5leHRQcm9jZXNzaW5nfTtcbn1cblxuZnVuY3Rpb24gcGF0Y2hEYXRhc2V0TWV0YWRhdGEoZGF0YXNldDogRGF0YXNldHNbc3RyaW5nXSwgcGF0Y2g6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB7XG4gIHJldHVybiBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge1xuICAgIG1ldGFkYXRhOiB7XG4gICAgICAuLi5kYXRhc2V0Lm1ldGFkYXRhLFxuICAgICAgLi4ucGF0Y2hcbiAgICB9XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWZyZXNoRXh0ZXJuYWxseUhvc3RlZFRhYmxlKHtcbiAgYXJnOiBtZXRhZGF0YSxcbiAgb25Qcm9ncmVzc1xufToge1xuICBhcmc6IHtcbiAgICBzb3VyY2U6IHN0cmluZztcbiAgICBmb3JtYXQ/OiBzdHJpbmc7XG4gICAgc2l6ZT86IG51bWJlcjtcbiAgICBldGFnPzogc3RyaW5nO1xuICAgIGxhc3RNb2RpZmllZD86IHN0cmluZztcbiAgfTtcbiAgb25Qcm9ncmVzczogKHByb2dyZXNzOiB7bG9hZGVkOiBudW1iZXI7IHRvdGFsPzogbnVtYmVyOyBwZXJjZW50OiBudW1iZXJ9KSA9PiB2b2lkO1xufSkge1xuICAvLyBGZXRjaCBvbmx5LiBEbyBub3QgbXV0YXRlIHRoZSBSZWR1eCB0YWJsZSBoZXJlOiBwcm9ncmVzcyBldmVudHMgY29weSBpdCwgYW5kXG4gIC8vIHRoZSBzdWNjZXNzIHVwZGF0ZXIgYXBwbGllcyB0aGUgc25hcHNob3QgdG8gd2hhdGV2ZXIgaW5zdGFuY2UgaXMgaW4gdGhlIHN0b3JlLlxuICByZXR1cm4gbG9hZEV4dGVybmFsbHlIb3N0ZWREYXRhc2V0KHsuLi5tZXRhZGF0YSwgb25Qcm9ncmVzcywgYnlwYXNzQ2FjaGU6IHRydWV9KTtcbn1cblxuY29uc3QgUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0sgPSBUYXNrLmZyb21Qcm9taXNlV2l0aFByb2dyZXNzKFxuICByZWZyZXNoRXh0ZXJuYWxseUhvc3RlZFRhYmxlLFxuICAnUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0snXG4pO1xuXG4vKipcbiAqIFJlLWZldGNoIGFuIGV4dGVybmFsbHkgaG9zdGVkIGRhdGFzZXQgYW5kIHJlcGxhY2UgaXRzIHRhYmxlIGNvbnRlbnRzIGluIHBsYWNlLlxuICogTGF5ZXJzIGFuZCBmaWx0ZXJzIGFyZSBrZXB0IHdoZW4gZmllbGQgbmFtZXMgbWF0Y2guXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVmcmVzaERhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVmcmVzaERhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoXG4gICAgIWRhdGFzZXQgfHxcbiAgICBkYXRhc2V0LnR5cGUgIT09IERhdGFzZXRUeXBlLkVYVEVSTkFMTFlfSE9TVEVEIHx8XG4gICAgdHlwZW9mIGRhdGFzZXQubWV0YWRhdGE/LnNvdXJjZSAhPT0gJ3N0cmluZydcbiAgKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChkYXRhc2V0Lm1ldGFkYXRhPy5yZWZyZXNoU3RhdHVzID09PSAnbG9hZGluZycpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXh0RGF0YXNldCA9IHBhdGNoRGF0YXNldE1ldGFkYXRhKGRhdGFzZXQsIHtcbiAgICByZWZyZXNoU3RhdHVzOiAnbG9hZGluZycsXG4gICAgcmVmcmVzaEVycm9yOiB1bmRlZmluZWQsXG4gICAgcmVmcmVzaFByb2dyZXNzOiB1bmRlZmluZWRcbiAgfSk7XG5cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGF0YXNldHM6IHtcbiAgICAgICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgICAgIFtkYXRhSWRdOiBuZXh0RGF0YXNldFxuICAgICAgfVxuICAgIH0sXG4gICAgUkVGUkVTSF9FWFRFUk5BTExZX0hPU1RFRF9EQVRBU0VUX1RBU0soe1xuICAgICAgYXJnOiB7XG4gICAgICAgIHNvdXJjZTogbmV4dERhdGFzZXQubWV0YWRhdGEuc291cmNlIGFzIHN0cmluZyxcbiAgICAgICAgZm9ybWF0OiBnZXRSZW1vdGVTb3VyY2VGb3JtYXQobmV4dERhdGFzZXQubWV0YWRhdGEpLFxuICAgICAgICBzaXplOiB0eXBlb2YgbmV4dERhdGFzZXQubWV0YWRhdGEuc2l6ZSA9PT0gJ251bWJlcicgPyBuZXh0RGF0YXNldC5tZXRhZGF0YS5zaXplIDogdW5kZWZpbmVkLFxuICAgICAgICBldGFnOiB0eXBlb2YgbmV4dERhdGFzZXQubWV0YWRhdGEuZXRhZyA9PT0gJ3N0cmluZycgPyBuZXh0RGF0YXNldC5tZXRhZGF0YS5ldGFnIDogdW5kZWZpbmVkLFxuICAgICAgICBsYXN0TW9kaWZpZWQ6XG4gICAgICAgICAgdHlwZW9mIG5leHREYXRhc2V0Lm1ldGFkYXRhLmxhc3RNb2RpZmllZCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgID8gbmV4dERhdGFzZXQubWV0YWRhdGEubGFzdE1vZGlmaWVkXG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgfSxcbiAgICAgIG9uUHJvZ3Jlc3M6IHByb2dyZXNzID0+XG4gICAgICAgIHJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3MoZGF0YUlkLCBNYXRoLnJvdW5kKChwcm9ncmVzcz8ucGVyY2VudCA/PyAwKSAqIDEwMCkpXG4gICAgfSkuYmltYXAoXG4gICAgICByZXN1bHQgPT4gcmVmcmVzaERhdGFzZXRTdWNjZXNzKGRhdGFJZCwgcmVzdWx0KSxcbiAgICAgIChlcnJvcjogRXJyb3IpID0+IHJlZnJlc2hEYXRhc2V0RXJyb3IoZGF0YUlkLCBlcnJvcilcbiAgICApXG4gICk7XG59XG5cbi8qKlxuICogUmVjb3JkIGRvd25sb2FkIHByb2dyZXNzIGZvciBhbiBpbi1mbGlnaHQgcmVtb3RlIGRhdGFzZXQgcmVmcmVzaC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZyZXNoRGF0YXNldFByb2dyZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBwZXJjZW50fTogVmlzU3RhdGVBY3Rpb25zLlJlZnJlc2hEYXRhc2V0UHJvZ3Jlc3NVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQgfHwgZGF0YXNldC5tZXRhZGF0YT8ucmVmcmVzaFN0YXR1cyAhPT0gJ2xvYWRpbmcnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IG5leHRQZXJjZW50ID0gTnVtYmVyLmlzRmluaXRlKHBlcmNlbnQpXG4gICAgPyBNYXRoLm1heCgwLCBNYXRoLm1pbigxMDAsIE1hdGgucm91bmQocGVyY2VudCkpKVxuICAgIDogMDtcbiAgaWYgKGRhdGFzZXQubWV0YWRhdGE/LnJlZnJlc2hQcm9ncmVzcyA9PT0gbmV4dFBlcmNlbnQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkYXRhc2V0czoge1xuICAgICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgICBbZGF0YUlkXTogcGF0Y2hEYXRhc2V0TWV0YWRhdGEoZGF0YXNldCwge3JlZnJlc2hQcm9ncmVzczogbmV4dFBlcmNlbnR9KVxuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZmllbGROYW1lc0VxdWFsKGN1cnJlbnQ6IHtuYW1lOiBzdHJpbmd9W10sIGluY29taW5nPzoge25hbWU6IHN0cmluZ31bXSB8IG51bGwpOiBib29sZWFuIHtcbiAgaWYgKCFpbmNvbWluZz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGN1cnJlbnQubGVuZ3RoICE9PSBpbmNvbWluZy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGN1cnJlbnQuZXZlcnkoKGZpZWxkLCBpKSA9PiBmaWVsZC5uYW1lID09PSBpbmNvbWluZ1tpXS5uYW1lKTtcbn1cblxuLyoqXG4gKiBXaGVuIGEgcmVtb3RlIHNuYXBzaG90IGNoYW5nZXMgY29sdW1uIG5hbWVzLCBvbGQgbGF5ZXIgZmllbGRJZHggLyBmaWx0ZXIgbmFtZXNcbiAqIGNhbiBwb2ludCBhdCB0aGUgd3JvbmcgY29sdW1uLiBSZS1iaW5kIGJ5IG5hbWUgYW5kIGRyb3AgY29uZmlncyB0aGF0IG5vIGxvbmdlciBmaXQuXG4gKi9cbmZ1bmN0aW9uIHJlYmluZExheWVyc0FuZEZpbHRlcnNBZnRlclNjaGVtYUNoYW5nZShcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YXNldHM6IFZpc1N0YXRlWydkYXRhc2V0cyddXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tkYXRhSWRdO1xuICBjb25zdCBuZXh0TGF5ZXJzOiBMYXllcltdID0gW107XG4gIGNvbnN0IGRyb3BwZWRMYXllcnM6IExheWVyW10gPSBbXTtcblxuICBzdGF0ZS5sYXllcnMuZm9yRWFjaChsYXllciA9PiB7XG4gICAgaWYgKGxheWVyLmNvbmZpZy5kYXRhSWQgIT09IGRhdGFJZCkge1xuICAgICAgbmV4dExheWVycy5wdXNoKGxheWVyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVib3VuZCA9IHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhKGRhdGFzZXQsIHN0YXRlLmxheWVyQ2xhc3NlcywgbGF5ZXIsIHN0YXRlLnNjaGVtYSk7XG4gICAgaWYgKHJlYm91bmQ/LmlzVmFsaWRUb1NhdmUoKSkge1xuICAgICAgbmV4dExheWVycy5wdXNoKHJlYm91bmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkcm9wcGVkTGF5ZXJzLnB1c2gobGF5ZXIpO1xuICAgIH1cbiAgfSk7XG5cbiAgbGV0IG5leHRMYXllck9yZGVyID0gc3RhdGUubGF5ZXJPcmRlcjtcbiAgbGV0IG5leHRTcGxpdE1hcHMgPSBzdGF0ZS5zcGxpdE1hcHM7XG4gIGRyb3BwZWRMYXllcnMuZm9yRWFjaChsYXllciA9PiB7XG4gICAgbmV4dExheWVyT3JkZXIgPSByZW1vdmVFbGVtZW50RnJvbUxheWVyT3JkZXIobmV4dExheWVyT3JkZXIsIGxheWVyLmlkKTtcbiAgICBuZXh0U3BsaXRNYXBzID0gcmVtb3ZlTGF5ZXJGcm9tU3BsaXRNYXBzKG5leHRTcGxpdE1hcHMsIGxheWVyKTtcbiAgfSk7XG5cbiAgY29uc3QgbmV4dExheWVyRGF0YSA9IG5leHRMYXllcnMubWFwKGxheWVyID0+IHtcbiAgICBjb25zdCBvbGRJZHggPSBzdGF0ZS5sYXllcnMuZmluZEluZGV4KG9sZExheWVyID0+IG9sZExheWVyLmlkID09PSBsYXllci5pZCk7XG4gICAgcmV0dXJuIG9sZElkeCA+PSAwID8gc3RhdGUubGF5ZXJEYXRhW29sZElkeF0gOiB7fTtcbiAgfSk7XG5cbiAgY29uc3QgZmlsdGVyc0ZvckRhdGFzZXQgPSBzdGF0ZS5maWx0ZXJzLmZpbHRlcihmaWx0ZXIgPT4gdG9BcnJheShmaWx0ZXIuZGF0YUlkKS5pbmNsdWRlcyhkYXRhSWQpKTtcbiAgY29uc3Qgb3RoZXJGaWx0ZXJzID0gc3RhdGUuZmlsdGVycy5maWx0ZXIoZmlsdGVyID0+ICF0b0FycmF5KGZpbHRlci5kYXRhSWQpLmluY2x1ZGVzKGRhdGFJZCkpO1xuXG4gIGNvbnN0IHt2YWxpZGF0ZWQsIHVwZGF0ZWREYXRhc2V0c30gPSB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyhcbiAgICB7Li4uc3RhdGUsIGRhdGFzZXRzLCBsYXllcnM6IG5leHRMYXllcnN9LFxuICAgIGZpbHRlcnNGb3JEYXRhc2V0XG4gICk7XG5cbiAgY29uc3QgbmV4dEZpbHRlcnMgPSBbLi4ub3RoZXJGaWx0ZXJzLCAuLi52YWxpZGF0ZWRdO1xuICBjb25zdCBmaWx0ZXJlZERhdGFzZXRzID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICBbZGF0YUlkXSxcbiAgICB1cGRhdGVkRGF0YXNldHMsXG4gICAgbmV4dEZpbHRlcnMsXG4gICAgbmV4dExheWVyc1xuICApO1xuXG4gIGxldCBuZXh0U3RhdGU6IFZpc1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBmaWx0ZXJlZERhdGFzZXRzLFxuICAgIGxheWVyczogbmV4dExheWVycyxcbiAgICBsYXllckRhdGE6IG5leHRMYXllckRhdGEsXG4gICAgbGF5ZXJPcmRlcjogbmV4dExheWVyT3JkZXIsXG4gICAgc3BsaXRNYXBzOiBuZXh0U3BsaXRNYXBzLFxuICAgIGZpbHRlcnM6IG5leHRGaWx0ZXJzXG4gIH07XG4gIG5leHRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXh0U3RhdGUsIFtkYXRhSWRdLCB1bmRlZmluZWQpO1xuICByZXR1cm4gdXBkYXRlQW5pbWF0aW9uRG9tYWluKG5leHRTdGF0ZSk7XG59XG5cbi8qKlxuICogQXBwbHkgYSBmaW5pc2hlZCByZW1vdGUgcmVmcmVzaDoga2VlcCBsYXllcnMsIHJlLXJ1biBmaWx0ZXJzIGFuZCBsYXllciBkYXRhLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZnJlc2hEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgcmVzdWx0fTogVmlzU3RhdGVBY3Rpb25zLlJlZnJlc2hEYXRhc2V0U3VjY2Vzc1VwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG1ldGFkYXRhUGF0Y2ggPSB7XG4gICAgcmVmcmVzaFN0YXR1czogJ2lkbGUnLFxuICAgIHJlZnJlc2hFcnJvcjogdW5kZWZpbmVkLFxuICAgIHJlZnJlc2hQcm9ncmVzczogdW5kZWZpbmVkLFxuICAgIGxhc3RGZXRjaGVkQXQ6IERhdGUubm93KCksXG4gICAgLy8gQWx3YXlzIHdyaXRlIHZhbGlkYXRvcnMuIEEgMjAwIHRoYXQgb21pdHMgdGhlbSBtdXN0IG5vdCBrZWVwIHRoZSBwcmV2aW91c1xuICAgIC8vIEVUYWcgb3IgYSBsYXRlciAzMDQgY2FuIHNraXAgYSBib2R5IHdlIG5vIGxvbmdlciBoYXZlLlxuICAgIGV0YWc6IHJlc3VsdC5ldGFnLFxuICAgIGxhc3RNb2RpZmllZDogcmVzdWx0Lmxhc3RNb2RpZmllZCxcbiAgICAuLi4odHlwZW9mIHJlc3VsdC5zaXplID09PSAnbnVtYmVyJyA/IHtzaXplOiByZXN1bHQuc2l6ZX0gOiB7fSlcbiAgfTtcblxuICBjb25zdCBzY2hlbWFVbmNoYW5nZWQgPSBmaWVsZE5hbWVzRXF1YWwoZGF0YXNldC5maWVsZHMsIHJlc3VsdC5kYXRhPy5maWVsZHMpO1xuXG4gIC8vIEFwcGx5IHRoZSBzbmFwc2hvdCB0byB0aGUgdGFibGUgY3VycmVudGx5IGluIHRoZSBzdG9yZS4gUHJvZ3Jlc3MgbWF5IGhhdmVcbiAgLy8gY29waWVkIGl0IG9mZiB0aGUgb2JqZWN0IHRoYXQgc3RhcnRlZCB0aGUgZmV0Y2g7IHRoZSB0YXNrIG5ldmVyIG11dGF0ZXMgaXQuXG4gIGlmICghcmVzdWx0Lm5vdE1vZGlmaWVkICYmIHJlc3VsdC5kYXRhKSB7XG4gICAgLy8gS2VwbGVyVGFibGUudXBkYXRlIGlzIGFzeW5jIHNvIER1Y2tEQiBjYW4gYXdhaXQgQXJyb3cgY29udmVyc2lvbi4gVGhlXG4gICAgLy8gQ1NWL0dlb0pTT04gcGF0aCAoYW5kIEtlcGxlclRhYmxlLmltcG9ydERhdGEpIHJ1biBzeW5jaHJvbm91c2x5IGJlZm9yZVxuICAgIC8vIHRoZSBmaXJzdCBhd2FpdCwgc28gdGhlIHN0b3JlIHRhYmxlIGlzIHVwZGF0ZWQgYmVmb3JlIHdlIGNvcHkgaXQgYmVsb3cuXG4gICAgdm9pZCBkYXRhc2V0LnVwZGF0ZShyZXN1bHQuZGF0YSk7XG4gIH1cblxuICBjb25zdCByZWZyZXNoZWQgPSBwYXRjaERhdGFzZXRNZXRhZGF0YShkYXRhc2V0LCBtZXRhZGF0YVBhdGNoKTtcbiAgY29uc3QgZGF0YXNldHMgPSB7XG4gICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgW2RhdGFJZF06IHJlZnJlc2hlZFxuICB9O1xuXG4gIGlmIChyZXN1bHQubm90TW9kaWZpZWQgfHwgIXJlc3VsdC5kYXRhKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGF0YXNldHNcbiAgICB9O1xuICB9XG5cbiAgaWYgKCFzY2hlbWFVbmNoYW5nZWQpIHtcbiAgICByZXR1cm4gcmViaW5kTGF5ZXJzQW5kRmlsdGVyc0FmdGVyU2NoZW1hQ2hhbmdlKHN0YXRlLCBkYXRhSWQsIGRhdGFzZXRzKTtcbiAgfVxuXG4gIHJldHVybiByZWFwcGx5RmlsdGVyc0FuZExheWVyRGF0YSh7Li4uc3RhdGUsIGRhdGFzZXRzfSwgZGF0YUlkKTtcbn1cblxuZnVuY3Rpb24gcmVhcHBseUZpbHRlcnNBbmRMYXllckRhdGEoc3RhdGU6IFZpc1N0YXRlLCBkYXRhSWQ6IHN0cmluZyk6IFZpc1N0YXRlIHtcbiAgY29uc3QgZmlsdGVyZWREYXRhc2V0cyA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgW2RhdGFJZF0sXG4gICAgc3RhdGUuZGF0YXNldHMsXG4gICAgc3RhdGUuZmlsdGVycyxcbiAgICBzdGF0ZS5sYXllcnNcbiAgKTtcbiAgbGV0IG5leHRTdGF0ZTogVmlzU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IGZpbHRlcmVkRGF0YXNldHNcbiAgfTtcbiAgbmV4dFN0YXRlID0gdXBkYXRlQWxsTGF5ZXJEb21haW5EYXRhKG5leHRTdGF0ZSwgW2RhdGFJZF0sIHVuZGVmaW5lZCk7XG4gIHJldHVybiB1cGRhdGVBbmltYXRpb25Eb21haW4obmV4dFN0YXRlKTtcbn1cblxuZnVuY3Rpb24gaXNEYXRhc2V0Um93TGlzdChcbiAgcm93czogVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3cgfCBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvd1tdXG4pOiByb3dzIGlzIFZpc1N0YXRlQWN0aW9ucy5EYXRhc2V0Um93W10ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkocm93cykgfHwgIXJvd3MubGVuZ3RoKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocm93cyk7XG4gIH1cbiAgLy8gQSBzaW5nbGUgY29sdW1uLW9yZGVyZWQgcm93IGlzIGFuIGFycmF5IG9mIHByaW1pdGl2ZXM7IGEgbGlzdCBvZiByb3dzIGlzXG4gIC8vIGFuIGFycmF5IG9mIGFycmF5cyBvciBhbiBhcnJheSBvZiBmaWVsZC1uYW1lIHJlY29yZHMuXG4gIHJldHVybiBBcnJheS5pc0FycmF5KHJvd3NbMF0pIHx8IGlzUGxhaW5PYmplY3Qocm93c1swXSk7XG59XG5cbmZ1bmN0aW9uIHRvQXJyYXlSb3cocm93OiBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvdywgZmllbGRzOiBGaWVsZFtdKTogYW55W10gfCBudWxsIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkocm93KSkge1xuICAgIHJldHVybiByb3cubGVuZ3RoID09PSBmaWVsZHMubGVuZ3RoID8gcm93IDogbnVsbDtcbiAgfVxuICBpZiAoaXNQbGFpbk9iamVjdChyb3cpKSB7XG4gICAgY29uc3QgcmVjb3JkID0gcm93IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHJldHVybiBmaWVsZHMubWFwKGZpZWxkID0+XG4gICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVjb3JkLCBmaWVsZC5uYW1lKSA/IHJlY29yZFtmaWVsZC5uYW1lXSA6IG51bGxcbiAgICApO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVEYXRhc2V0Um93cyhcbiAgcm93czogVmlzU3RhdGVBY3Rpb25zLkRhdGFzZXRSb3cgfCBWaXNTdGF0ZUFjdGlvbnMuRGF0YXNldFJvd1tdLFxuICBmaWVsZHM6IEZpZWxkW11cbik6IGFueVtdW10gfCBudWxsIHtcbiAgaWYgKCFmaWVsZHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgbGlzdCA9IGlzRGF0YXNldFJvd0xpc3Qocm93cykgPyByb3dzIDogW3Jvd3NdO1xuICBpZiAoIWxpc3QubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3Qgbm9ybWFsaXplZDogYW55W11bXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBhcnJheVJvdyA9IHRvQXJyYXlSb3cobGlzdFtpXSwgZmllbGRzKTtcbiAgICBpZiAoIWFycmF5Um93KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgbm9ybWFsaXplZC5wdXNoKGFycmF5Um93KTtcbiAgfVxuICByZXR1cm4gbm9ybWFsaXplZDtcbn1cblxuLyoqXG4gKiBBcHBlbmQgb3IgdXBzZXJ0IHJvd3Mgb24gYW4gZXhpc3RpbmcgaW4tbWVtb3J5IHJvdyBkYXRhc2V0LiBLZWVwcyBsYXllcnMgYW5kIHJlLXJ1bnMgZmlsdGVycy5cbiAqIEFycm93L0R1Y2tEQiB0YWJsZXMgd2FybiBhbmQgYXJlIGxlZnQgdW5jaGFuZ2VkIChJTlNFUlQgLyBjb25jYXQgbm90IGltcGxlbWVudGVkKS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRUb0RhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIHJvd3MsIG9wdGlvbnN9OiBWaXNTdGF0ZUFjdGlvbnMuQWRkVG9EYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZURhdGFzZXRSb3dzKHJvd3MsIGRhdGFzZXQuZmllbGRzKTtcbiAgaWYgKCFub3JtYWxpemVkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgYXBwbGllZCA9IG9wdGlvbnM/LnVwc2VydEJ5XG4gICAgPyBkYXRhc2V0LnVwc2VydFJvd3Mobm9ybWFsaXplZCwgb3B0aW9ucy51cHNlcnRCeSlcbiAgICA6IGRhdGFzZXQuYXBwZW5kUm93cyhub3JtYWxpemVkKTtcbiAgaWYgKCFhcHBsaWVkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZGF0YXNldHMgPSB7XG4gICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgW2RhdGFJZF06IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7fSlcbiAgfTtcbiAgcmV0dXJuIHJlYXBwbHlGaWx0ZXJzQW5kTGF5ZXJEYXRhKHsuLi5zdGF0ZSwgZGF0YXNldHN9LCBkYXRhSWQpO1xufVxuXG4vKipcbiAqIERlbGV0ZSByb3dzIGJ5IGluZGV4IG9yIGJ5IGZpZWxkIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIGluLW1lbW9yeSByb3cgZGF0YXNldC5cbiAqIEtlZXBzIGxheWVycy4gQXJyb3cvRHVja0RCIHRhYmxlcyB3YXJuIGFuZCBhcmUgbGVmdCB1bmNoYW5nZWQuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRnJvbURhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIHJvd0luZGV4ZXMsIGJ5RmllbGR9OiBWaXNTdGF0ZUFjdGlvbnMuUmVtb3ZlRnJvbURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBpbmRleGVzID0gYnlGaWVsZFxuICAgID8gZGF0YXNldC5maW5kUm93SW5kZXhlc0J5RmllbGRWYWx1ZXMoYnlGaWVsZC5maWVsZCwgdG9BcnJheShieUZpZWxkLnZhbHVlcykpXG4gICAgOiB0b0FycmF5KHJvd0luZGV4ZXMgPz8gW10pO1xuICBpZiAoIWluZGV4ZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmICghZGF0YXNldC5yZW1vdmVSb3dzKGluZGV4ZXMpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgZGF0YXNldHMgPSB7XG4gICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgW2RhdGFJZF06IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7fSlcbiAgfTtcbiAgcmV0dXJuIHJlYXBwbHlGaWx0ZXJzQW5kTGF5ZXJEYXRhKHsuLi5zdGF0ZSwgZGF0YXNldHN9LCBkYXRhSWQpO1xufVxuXG4vKipcbiAqIFJlY29yZCBhIGZhaWxlZCByZW1vdGUgZGF0YXNldCByZWZyZXNoIHdpdGhvdXQgZHJvcHBpbmcgZXhpc3Rpbmcgcm93cy5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZyZXNoRGF0YXNldEVycm9yVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBlcnJvcn06IFZpc1N0YXRlQWN0aW9ucy5SZWZyZXNoRGF0YXNldEVycm9yVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiB7XG4gICAgICAuLi5zdGF0ZS5kYXRhc2V0cyxcbiAgICAgIFtkYXRhSWRdOiBwYXRjaERhdGFzZXRNZXRhZGF0YShkYXRhc2V0LCB7XG4gICAgICAgIHJlZnJlc2hTdGF0dXM6ICdlcnJvcicsXG4gICAgICAgIHJlZnJlc2hFcnJvcjogZXJyb3I/Lm1lc3NhZ2UgfHwgU3RyaW5nKGVycm9yKSxcbiAgICAgICAgcmVmcmVzaFByb2dyZXNzOiB1bmRlZmluZWRcbiAgICAgIH0pXG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbi8qKlxuICogQWRkIG5ldyBkYXRhc2V0IHRvIGB2aXNTdGF0ZWAsIHdpdGggb3B0aW9uIHRvIGxvYWQgYSBtYXAgY29uZmlnIGFsb25nIHdpdGggdGhlIGRhdGFzZXRzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGNvbnN0IHVwZGF0ZVZpc0RhdGFVcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZVZpc0RhdGFVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIC8vIGRhdGFzZXRzIGNhbiBiZSBhIHNpbmdsZSBkYXRhIGVudHJpZXMgb3IgYW4gYXJyYXkgb2YgbXVsdGlwbGUgZGF0YSBlbnRyaWVzXG4gIGNvbnN0IHtjb25maWcsIG9wdGlvbnN9ID0gYWN0aW9uO1xuXG4gIC8vIGFwcGx5IGNvbmZpZyBpZiBwYXNzZWQgZnJvbSBhY3Rpb25cbiAgLy8gVE9ETzogd2UgZG9uJ3QgaGFuZGxlIGFzeW5jIG1lcmdlcnMgaGVyZSB5ZXRcbiAgbGV0IHVwZGF0ZWRTdGF0ZSA9IGNvbmZpZ1xuICAgID8gcmVjZWl2ZU1hcENvbmZpZ1VwZGF0ZXIoc3RhdGUsIHtcbiAgICAgICAgcGF5bG9hZDoge2NvbmZpZywgb3B0aW9uc31cbiAgICAgIH0pXG4gICAgOiBzdGF0ZTtcblxuICBjb25zdCBkYXRhc2V0cyA9IHRvQXJyYXkoYWN0aW9uLmRhdGFzZXRzKTtcbiAgaWYgKCFkYXRhc2V0cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gdXBkYXRlZFN0YXRlO1xuICB9XG5cbiAgY29uc3QgcmVhZHlUYXNrczogVGFza0Rlc2NyaXB0b3JbXSA9IFtdO1xuICBjb25zdCByZW1vdGVUYXNrczogVGFza0Rlc2NyaXB0b3JbXSA9IFtdO1xuICBjb25zdCBub3RpZmljYXRpb25UYXNrczogVGFza0Rlc2NyaXB0b3JbXSA9IFtdO1xuICBjb25zdCBoeWRyYXRlUHJvZ3Jlc3M6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcblxuICBkYXRhc2V0cy5mb3JFYWNoKCh7aW5mbyA9IHt9LCAuLi5yZXN0fSwgZGF0YXNldEluZGV4KSA9PiB7XG4gICAgY29uc3QgcHJvdG8gPSB7aW5mbywgLi4ucmVzdH07XG4gICAgY29uc3QgcmVtb3RlID0gbmVlZHNFeHRlcm5hbGx5SG9zdGVkSHlkcmF0ZShwcm90byk7XG4gICAgaWYgKHJlbW90ZSkge1xuICAgICAgaHlkcmF0ZVByb2dyZXNzW2dldERhdGFzZXRQcm9ncmVzc0lkKHByb3RvLCBkYXRhc2V0SW5kZXgpXSA9IDA7XG4gICAgfVxuICAgIGNvbnN0IHRhc2sgPSBjcmVhdGVOZXdEYXRhRW50cnlUYXNrKHByb3RvLCBzdGF0ZS5kYXRhc2V0cyk7XG4gICAgaWYgKHRhc2spIHtcbiAgICAgIChyZW1vdGUgPyByZW1vdGVUYXNrcyA6IHJlYWR5VGFza3MpLnB1c2godGFzayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vdGlmaWNhdGlvblRhc2tzLnB1c2goXG4gICAgICAgIEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04oKS5tYXAoKCkgPT5cbiAgICAgICAgICBhZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGRhdGFzZXQgZHVlIHRvIGRhdGEgdmVyaWZpY2F0aW9uIGVycm9yc2AsXG4gICAgICAgICAgICAgIGlkOiBgZGF0YXNldC1mYWlsZWQtJHtkYXRhc2V0SW5kZXh9YFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9KTtcblxuICAvLyBQYXJzZWQgZGF0YXNldHMgYXJlIGNvbW1pdHRlZCBvbiB0aGVpciBvd24uIEEgcmVtb3RlIGRvd25sb2FkIGluIHRoZSBzYW1lXG4gIC8vIGFkZCBtdXN0IG5vdCBob2xkIHRoZW0gdW50aWwgdGhlIFVSTCBmaW5pc2hlcy5cbiAgY29uc3QgcHJvZ3Jlc3NJZHMgPSBPYmplY3Qua2V5cyhoeWRyYXRlUHJvZ3Jlc3MpO1xuICBjb25zdCBiYXRjaGVzOiBBcnJheTx7dGFza3M6IFRhc2tEZXNjcmlwdG9yW107IHByb2dyZXNzSWRzOiBzdHJpbmdbXX0+ID0gW107XG4gIGlmIChyZWFkeVRhc2tzLmxlbmd0aCkge1xuICAgIGJhdGNoZXMucHVzaCh7dGFza3M6IHJlYWR5VGFza3MsIHByb2dyZXNzSWRzOiBbXX0pO1xuICB9XG4gIGlmIChyZW1vdGVUYXNrcy5sZW5ndGgpIHtcbiAgICBiYXRjaGVzLnB1c2goe3Rhc2tzOiByZW1vdGVUYXNrcywgcHJvZ3Jlc3NJZHN9KTtcbiAgfVxuXG4gIGlmIChiYXRjaGVzLmxlbmd0aCkge1xuICAgIHVwZGF0ZWRTdGF0ZSA9IHNldExvYWRpbmdJbmRpY2F0b3JVcGRhdGVyKFxuICAgICAgdXBkYXRlZFN0YXRlLFxuICAgICAgcGF5bG9hZF8oe2NoYW5nZTogYmF0Y2hlcy5sZW5ndGgsIHR5cGU6ICcnfSlcbiAgICApO1xuICAgIGlmIChwcm9ncmVzc0lkcy5sZW5ndGgpIHtcbiAgICAgIHVwZGF0ZWRTdGF0ZSA9IHtcbiAgICAgICAgLi4udXBkYXRlZFN0YXRlLFxuICAgICAgICBsb2FkaW5nUHJvZ3Jlc3M6IHtcbiAgICAgICAgICAuLi51cGRhdGVkU3RhdGUubG9hZGluZ1Byb2dyZXNzLFxuICAgICAgICAgIC4uLmh5ZHJhdGVQcm9ncmVzc1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB3aXRoVGFzayh1cGRhdGVkU3RhdGUsIFtcbiAgICAuLi5iYXRjaGVzLm1hcChiYXRjaCA9PlxuICAgICAgVGFzay5hbGxTZXR0bGVkKGJhdGNoLnRhc2tzKS5tYXAocmVzdWx0cyA9PlxuICAgICAgICBjcmVhdGVOZXdEYXRhc2V0U3VjY2Vzcyh7XG4gICAgICAgICAgcmVzdWx0cyxcbiAgICAgICAgICBhZGRUb01hcE9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgICAgcHJvZ3Jlc3NJZHM6IGJhdGNoLnByb2dyZXNzSWRzXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgKSxcbiAgICAuLi5ub3RpZmljYXRpb25UYXNrc1xuICBdKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVOZXdEYXRhc2V0U3VjY2Vzc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPENyZWF0ZU5ld0RhdGFzZXRTdWNjZXNzUGF5bG9hZD5cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qge3Jlc3VsdHMsIGFkZFRvTWFwT3B0aW9ucywgcHJvZ3Jlc3NJZHN9ID0gYWN0aW9uLnBheWxvYWQ7XG4gIGNvbnN0IG5vdGlmaWNhdGlvblRhc2tzOiBUYXNrRGVzY3JpcHRvcltdID0gW107XG5cbiAgY29uc3QgbmV3RGF0YUVudHJpZXMgPSByZXN1bHRzLnJlZHVjZSgoYWNjdSwgcmVzdWx0LCBpZHgpID0+IHtcbiAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXQgPSByZXN1bHQudmFsdWU7XG4gICAgICByZXR1cm4gey4uLmFjY3UsIFtkYXRhc2V0LmlkXTogZGF0YXNldH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHNob3cgZXJyb3Igbm90aWZpY2F0aW9uIG9uIFVJXG4gICAgICBub3RpZmljYXRpb25UYXNrcy5wdXNoKFxuICAgICAgICBBQ1RJT05fVEFTSygpLm1hcCgoKSA9PlxuICAgICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgICAgbWVzc2FnZTogYERhdGFzZXQgZXJyb3I6IEZhaWxlZCB0byBjcmVhdGUgYSBuZXcgZGF0YXNldDpcbiAgICAgICAgICAgICAgJHtyZXN1bHQucmVhc29uIHx8IChyZXN1bHQgYXMgYW55KS52YWx1ZX1gLFxuICAgICAgICAgICAgICBpZDogYGRhdGFzZXQtY3JlYXRlLWZhaWxlZC0ke2lkeH1gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIHJldHVybiBhY2N1O1xuICAgIH1cbiAgfSwge30gYXMgRGF0YXNldHMpO1xuICAvLyBzYXZlIG5ldyBkYXRhc2V0IGVudHJ5IHRvIHN0YXRlXG4gIGNvbnN0IG1lcmdlZFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRhdGFzZXRzOiBtZXJnZURhdGFzZXRzQnlPcmRlcihzdGF0ZSwgbmV3RGF0YUVudHJpZXMpXG4gIH07XG5cbiAgLy8gbWVyZ2Ugc3RhdGUgd2l0aCBjb25maWcgdG8gYmUgbWVyZ2VkXG4gIGNvbnN0IGxheWVyTWVyZ2VycyA9IHN0YXRlLm1lcmdlcnMuZmlsdGVyKG0gPT4gbS53YWl0Rm9yTGF5ZXJEYXRhKTtcbiAgY29uc3QgZGF0YXNldE1lcmdlcnMgPSBzdGF0ZS5tZXJnZXJzLmZpbHRlcihtID0+ICFsYXllck1lcmdlcnMuaW5jbHVkZXMobSkpO1xuXG4gIGNvbnN0IG5ld0RhdGFJZHMgPSBPYmplY3Qua2V5cyhuZXdEYXRhRW50cmllcyk7XG4gIGNvbnN0IHBvc3RNZXJnZXJQYXlsb2FkID0ge1xuICAgIG5ld0RhdGFJZHMsXG4gICAgb3B0aW9uczogYWRkVG9NYXBPcHRpb25zLFxuICAgIGxheWVyTWVyZ2Vyc1xuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZWRTdGF0ZSA9IGFwcGx5TWVyZ2Vyc1VwZGF0ZXIobWVyZ2VkU3RhdGUsIHtcbiAgICBtZXJnZXJzOiBkYXRhc2V0TWVyZ2VycyxcbiAgICBwb3N0TWVyZ2VyUGF5bG9hZFxuICB9KTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgY2xlYXJMb2FkaW5nUHJvZ3Jlc3MoXG4gICAgICBzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlcih1cGRhdGVkU3RhdGUsIHBheWxvYWRfKHtjaGFuZ2U6IC0xfSkpLFxuICAgICAgcHJvZ3Jlc3NJZHNcbiAgICApLFxuICAgIG5vdGlmaWNhdGlvblRhc2tzXG4gICk7XG59O1xuXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlNZXJnZXJzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IHtcbiAgICBtZXJnZXJzOiBNZXJnZXI8YW55PltdO1xuICAgIHBvc3RNZXJnZXJQYXlsb2FkOiBQb3N0TWVyZ2VyUGF5bG9hZDtcbiAgfVxuKTogVmlzU3RhdGUge1xuICBjb25zdCB7bWVyZ2VycywgcG9zdE1lcmdlclBheWxvYWR9ID0gYWN0aW9uO1xuXG4gIC8vIG1lcmdlIHN0YXRlIHdpdGggY29uZmlnIHRvIGJlIG1lcmdlZFxuICBjb25zdCBtZXJnZVN0YXRlUmVzdWx0ID0gbWVyZ2VTdGF0ZUZyb21NZXJnZXJzKFxuICAgIHN0YXRlLFxuICAgIHtcbiAgICAgIC4uLklOSVRJQUxfVklTX1NUQVRFLFxuICAgICAgLi4uc3RhdGUuaW5pdGlhbFN0YXRlXG4gICAgfSxcbiAgICBtZXJnZXJzLFxuICAgIC8vIG5ld0RhdGFJZHMsXG4gICAgcG9zdE1lcmdlclBheWxvYWRcbiAgKTtcblxuICAvLyBpZiBhbGwgbWVyZ2VkLCBraWNrdXAgcG9zdCBtZXJnZSBwcm9jZXNzXG4gIC8vIGlmIG5vdCB3YWl0XG4gIHJldHVybiBtZXJnZVN0YXRlUmVzdWx0LmFsbE1lcmdlZFxuICAgID8gcG9zdE1lcmdlVXBkYXRlcihtZXJnZVN0YXRlUmVzdWx0Lm1lcmdlZFN0YXRlLCBwb3N0TWVyZ2VyUGF5bG9hZClcbiAgICA6IG1lcmdlU3RhdGVSZXN1bHQubWVyZ2VkU3RhdGU7XG59XG5cbi8qKiBSZWFkcyBgb3B0aW9ucy5sYXllclZpc0NvbmZpZ2AgZnJvbSBhZGQtZGF0YS10by1tYXAgKHNlZSBgQWRkRGF0YVRvTWFwT3B0aW9uc2ApLiAqL1xuZnVuY3Rpb24gbGF5ZXJWaXNDb25maWdGcm9tQWRkRGF0YU9wdGlvbnMoXG4gIG9wdGlvbnM6IFBvc3RNZXJnZXJQYXlsb2FkWydvcHRpb25zJ10gfCB1bmRlZmluZWRcbik6IFBhcnRpYWw8TGF5ZXJWaXNDb25maWc+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFvcHRpb25zIHx8ICEoJ2xheWVyVmlzQ29uZmlnJyBpbiBvcHRpb25zKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcGF0Y2ggPSAob3B0aW9ucyBhcyB7bGF5ZXJWaXNDb25maWc/OiB1bmtub3dufSkubGF5ZXJWaXNDb25maWc7XG4gIGlmIChwYXRjaCA9PSBudWxsIHx8IHR5cGVvZiBwYXRjaCAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShwYXRjaCkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBwYXRjaCBhcyBQYXJ0aWFsPExheWVyVmlzQ29uZmlnPjtcbn1cblxuLyoqXG4gKiBQb2x5Z29uIGZpbHRlcnMgZm9yIHRoZXNlIGxheWVycyB1c2UgY2VudHJvaWRzIC8gZGF0YVRvRmVhdHVyZSBmcm9tXG4gKiBjYWxjdWxhdGVMYXllckRhdGEuIE90aGVyIHR5cGVzIChsYXQvbG5nIHBvaW50cywgSDMsIGFyY3MpIGNhbiBmaWx0ZXJcbiAqIGZyb20gY29sdW1ucyBvbiB0aGUgZmlyc3QgcGFzcyBhbmQgbXVzdCBub3QgYmUgcmVjYWxjdWxhdGVkIGhlcmUuXG4gKi9cbmZ1bmN0aW9uIHBvbHlnb25GaWx0ZXJEZXBlbmRzT25MYXllck1ldGEobGF5ZXI6IExheWVyKTogYm9vbGVhbiB7XG4gIHJldHVybiBsYXllci50eXBlID09PSBMQVlFUl9UWVBFUy5nZW9qc29uIHx8IGxheWVyLmNvbmZpZz8uY29sdW1uTW9kZSA9PT0gJ2dlb2pzb24nO1xufVxuXG4vKipcbiAqIEFkZCBuZXcgZGF0YXNldCB0byBgdmlzU3RhdGVgLCB3aXRoIG9wdGlvbiB0byBsb2FkIGEgbWFwIGNvbmZpZyBhbG9uZyB3aXRoIHRoZSBkYXRhc2V0c1xuICovXG5mdW5jdGlvbiBwb3N0TWVyZ2VVcGRhdGVyKG1lcmdlZFN0YXRlOiBWaXNTdGF0ZSwgcG9zdE1lcmdlclBheWxvYWQ6IFBvc3RNZXJnZXJQYXlsb2FkKTogVmlzU3RhdGUge1xuICBjb25zdCB7bmV3RGF0YUlkcywgb3B0aW9ucywgbGF5ZXJNZXJnZXJzfSA9IHBvc3RNZXJnZXJQYXlsb2FkO1xuICBjb25zdCBuZXdGaWx0ZXJzID0gbWVyZ2VkU3RhdGUuZmlsdGVycy5maWx0ZXIoZiA9PlxuICAgIGYuZGF0YUlkLmZpbmQoZkRhdGFJZCA9PiBuZXdEYXRhSWRzLmluY2x1ZGVzKGZEYXRhSWQpKVxuICApO1xuICBjb25zdCBkYXRhc2V0RmlsdGVyZWQ6IHN0cmluZ1tdID0gdW5pcShcbiAgICBuZXdGaWx0ZXJzLnJlZHVjZSgoYWNjdSwgZikgPT4gWy4uLmFjY3UsIC4uLmYuZGF0YUlkXSwgW10gYXMgc3RyaW5nW10pXG4gICk7XG4gIGNvbnN0IGRhdGFFbXB0eSA9IG5ld0RhdGFJZHMubGVuZ3RoIDwgMTtcblxuICBsZXQgbmV3TGF5ZXJzID0gIWRhdGFFbXB0eVxuICAgID8gbWVyZ2VkU3RhdGUubGF5ZXJzLmZpbHRlcihsID0+IGwuY29uZmlnLmRhdGFJZCAmJiBuZXdEYXRhSWRzLmluY2x1ZGVzKGwuY29uZmlnLmRhdGFJZCkpXG4gICAgOiBbXTtcblxuICBjb25zdCBuZXdEYXRhRW50cmllcyA9IG5ld0RhdGFJZHMucmVkdWNlKFxuICAgIChhY2N1LCBpZCkgPT4gKHtcbiAgICAgIC4uLmFjY3UsXG4gICAgICBbaWRdOiBtZXJnZWRTdGF0ZS5kYXRhc2V0c1tpZF1cbiAgICB9KSxcbiAgICB7fVxuICApO1xuXG4gIGlmICghbmV3TGF5ZXJzLmxlbmd0aCAmJiAob3B0aW9ucyB8fCB7fSkuYXV0b0NyZWF0ZUxheWVycyAhPT0gZmFsc2UpIHtcbiAgICAvLyBubyBsYXllciBtZXJnZWQsIGZpbmQgZGVmYXVsdHNcbiAgICBjb25zdCByZXN1bHQgPSBhZGREZWZhdWx0TGF5ZXJzKG1lcmdlZFN0YXRlLCBuZXdEYXRhRW50cmllcyk7XG4gICAgbWVyZ2VkU3RhdGUgPSByZXN1bHQuc3RhdGU7XG4gICAgbmV3TGF5ZXJzID0gcmVzdWx0Lm5ld0xheWVycztcbiAgfVxuXG4gIGlmIChtZXJnZWRTdGF0ZS5zcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgLy8gaWYgbWFwIGlzIHNwbGl0LCBhZGQgbmV3IGxheWVycyB0byBzcGxpdE1hcHNcbiAgICBuZXdMYXllcnMgPSBtZXJnZWRTdGF0ZS5sYXllcnMuZmlsdGVyKFxuICAgICAgbCA9PiBsLmNvbmZpZy5kYXRhSWQgJiYgbmV3RGF0YUlkcy5pbmNsdWRlcyhsLmNvbmZpZy5kYXRhSWQpXG4gICAgKTtcbiAgICAvLyBhIGxheWVyIGFscmVhZHkgaW4gYSBwYW5lbCB3YXMgbWVyZ2VkIGZyb20gc3BsaXQgbWFwcywgd2hpY2ggZGVjaWRlIHRoZSBwYW5lbHMgc2hvd2luZyBpdFxuICAgIGNvbnN0IGxheWVyc05vdEluU3BsaXRNYXBzID0gbmV3TGF5ZXJzLmZpbHRlcihcbiAgICAgIGwgPT4gIW1lcmdlZFN0YXRlLnNwbGl0TWFwcy5zb21lKHNtID0+IGwuaWQgaW4gc20ubGF5ZXJzKVxuICAgICk7XG4gICAgbWVyZ2VkU3RhdGUgPSB7XG4gICAgICAuLi5tZXJnZWRTdGF0ZSxcbiAgICAgIHNwbGl0TWFwczogYWRkTmV3TGF5ZXJzVG9TcGxpdE1hcChtZXJnZWRTdGF0ZS5zcGxpdE1hcHMsIGxheWVyc05vdEluU3BsaXRNYXBzKVxuICAgIH07XG4gIH1cblxuICBtZXJnZWRTdGF0ZSA9IG1lcmdlTGF5ZXJWaXNDb25maWdGb3JOZXdEYXRhc2V0cyhcbiAgICBtZXJnZWRTdGF0ZSxcbiAgICBsYXllclZpc0NvbmZpZ0Zyb21BZGREYXRhT3B0aW9ucyhvcHRpb25zKSxcbiAgICBuZXdEYXRhSWRzXG4gICk7XG5cbiAgLy8gaWYgbm8gdG9vbHRpcHMgbWVyZ2VkIGFkZCBkZWZhdWx0IHRvb2x0aXBzXG4gIG5ld0RhdGFJZHMuZm9yRWFjaChkYXRhSWQgPT4ge1xuICAgIGNvbnN0IHRvb2x0aXBGaWVsZHMgPSBtZXJnZWRTdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmNvbmZpZy5maWVsZHNUb1Nob3dbZGF0YUlkXTtcbiAgICAvLyBsb2FkaW5nIGRhdGFzZXQ6IGF1dG9DcmVhdGVUb29sdGlwcyBpcyBmYWxzZSBhbmQgd2UgZG9uJ3Qgd2FudCB0byBydW4gYWRkRGVmYXVsdFRvb2x0aXBzIHdoZW4gdG9vbHRpcEZpZWxkcyBpcyBlbXB0eVxuICAgIGlmIChcbiAgICAgIG9wdGlvbnM/LmF1dG9DcmVhdGVUb29sdGlwcyAhPT0gZmFsc2UgJiZcbiAgICAgICghQXJyYXkuaXNBcnJheSh0b29sdGlwRmllbGRzKSB8fCAhdG9vbHRpcEZpZWxkcy5sZW5ndGgpXG4gICAgKSB7XG4gICAgICAvLyBhZGRpbmcgZGF0YXNldDogYXV0b0NyZWF0ZVRvb2x0aXBzIGlzIHRydWVcbiAgICAgIG1lcmdlZFN0YXRlID0gYWRkRGVmYXVsdFRvb2x0aXBzKG1lcmdlZFN0YXRlLCBuZXdEYXRhRW50cmllc1tkYXRhSWRdKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHVwZGF0ZWREYXRhc2V0cyA9IGRhdGFFbXB0eVxuICAgID8gT2JqZWN0LmtleXMobWVyZ2VkU3RhdGUuZGF0YXNldHMpXG4gICAgOiB1bmlxKE9iamVjdC5rZXlzKG5ld0RhdGFFbnRyaWVzKS5jb25jYXQoZGF0YXNldEZpbHRlcmVkKSk7XG5cbiAgbGV0IHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShtZXJnZWRTdGF0ZSwgdXBkYXRlZERhdGFzZXRzLCB1bmRlZmluZWQpO1xuXG4gIC8vIFBvbHlnb24gcGVyLWxheWVyIGluZGV4ZXMgbmVlZCBjZW50cm9pZHMgLyBkYXRhVG9GZWF0dXJlLCB3aGljaCBhcmUgb25seVxuICAvLyBwb3B1bGF0ZWQgYnkgdGhlIGxheWVyLWRhdGEgcGFzcyBhYm92ZS4gU2tpcCBkYXRhc2V0cyB3aG9zZSB0YXJnZXRlZCBsYXllcnNcbiAgLy8gYWxyZWFkeSBmaWx0ZXJlZCBmcm9tIGNvbHVtbnMgKGUuZy4gbGF0L2xuZyBwb2ludHMpLlxuICBjb25zdCBwb2x5Z29uRmlsdGVycyA9IHVwZGF0ZWRTdGF0ZS5maWx0ZXJzLmZpbHRlcihcbiAgICBmID0+IGYudHlwZSA9PT0gRklMVEVSX1RZUEVTLnBvbHlnb24gJiYgZi5lbmFibGVkICE9PSBmYWxzZVxuICApO1xuICBjb25zdCBwb2x5Z29uTWV0YURhdGFJZHMgPSB1bmlxKFxuICAgIHVwZGF0ZWRTdGF0ZS5sYXllcnNcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIGxheWVyID0+XG4gICAgICAgICAgcG9seWdvbkZpbHRlckRlcGVuZHNPbkxheWVyTWV0YShsYXllcikgJiZcbiAgICAgICAgICBwb2x5Z29uRmlsdGVycy5zb21lKGYgPT4gZi5sYXllcklkPy5pbmNsdWRlcyhsYXllci5pZCkpXG4gICAgICApXG4gICAgICAubWFwKGxheWVyID0+IGxheWVyLmNvbmZpZy5kYXRhSWQpXG4gICAgICAuZmlsdGVyKChpZCk6IGlkIGlzIHN0cmluZyA9PiBCb29sZWFuKGlkKSAmJiB1cGRhdGVkRGF0YXNldHMuaW5jbHVkZXMoaWQpKVxuICApO1xuICBpZiAocG9seWdvbk1ldGFEYXRhSWRzLmxlbmd0aCkge1xuICAgIHVwZGF0ZWRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShcbiAgICAgIHtcbiAgICAgICAgLi4udXBkYXRlZFN0YXRlLFxuICAgICAgICBkYXRhc2V0czogYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICAgICAgICBwb2x5Z29uTWV0YURhdGFJZHMsXG4gICAgICAgICAgdXBkYXRlZFN0YXRlLmRhdGFzZXRzLFxuICAgICAgICAgIHVwZGF0ZWRTdGF0ZS5maWx0ZXJzLFxuICAgICAgICAgIHVwZGF0ZWRTdGF0ZS5sYXllcnNcbiAgICAgICAgKVxuICAgICAgfSxcbiAgICAgIHBvbHlnb25NZXRhRGF0YUlkc1xuICAgICk7XG4gIH1cblxuICAvLyByZWdpc3RlciBsYXllciBhbmltYXRpb24gZG9tYWluLFxuICAvLyBuZWVkIHRvIGJlIGNhbGxlZCBhZnRlciBsYXllciBkYXRhIGlzIGNhbGN1bGF0ZWRcbiAgdXBkYXRlZFN0YXRlID0gdXBkYXRlQW5pbWF0aW9uRG9tYWluKHVwZGF0ZWRTdGF0ZSk7XG5cbiAgLy8gdHJ5IHRvIHByb2Nlc3MgbGF5ZXJNZXJnZXJzIGFmdGVyIGRhdGFzZXQrZGF0YXNldE1lcmdlcnNcbiAgdXBkYXRlZFN0YXRlID1cbiAgICBsYXllck1lcmdlcnMgJiYgbGF5ZXJNZXJnZXJzLmxlbmd0aCA+IDBcbiAgICAgID8gYXBwbHlNZXJnZXJzVXBkYXRlcih1cGRhdGVkU3RhdGUsIHtcbiAgICAgICAgICBtZXJnZXJzOiBsYXllck1lcmdlcnMsXG4gICAgICAgICAgcG9zdE1lcmdlclBheWxvYWQ6IHsuLi5wb3N0TWVyZ2VyUGF5bG9hZCwgbGF5ZXJNZXJnZXJzOiBbXX1cbiAgICAgICAgfSlcbiAgICAgIDogdXBkYXRlZFN0YXRlO1xuXG4gIC8vIGNlbnRlciB0aGUgbWFwIG9uY2UgdGhlIGRhdGFzZXQgaXMgY3JlYXRlZFxuICBpZiAobmV3TGF5ZXJzLmxlbmd0aCAmJiAob3B0aW9ucyB8fCB7fSkuY2VudGVyTWFwKSB7XG4gICAgY29uc3QgYm91bmRzID0gZmluZE1hcEJvdW5kcyhuZXdMYXllcnMpO1xuICAgIGlmIChib3VuZHMpIHtcbiAgICAgIGNvbnN0IHBhZGRpbmcgPSBvcHRpb25zPy5wYWRkaW5nO1xuICAgICAgY29uc3QgZml0Qm91bmRzVGFzayA9IEFDVElPTl9UQVNLX0ZJVF9CT1VORFMoKS5tYXAoKCkgPT4ge1xuICAgICAgICByZXR1cm4gZml0TWFwQm91bmRzKGJvdW5kcywgcGFkZGluZyk7XG4gICAgICB9KTtcbiAgICAgIHVwZGF0ZWRTdGF0ZSA9IHdpdGhUYXNrKHVwZGF0ZWRTdGF0ZSwgZml0Qm91bmRzVGFzayk7XG4gICAgfVxuICB9XG5cbiAgLy8gbmVlZCB0byBjZW50ZXIgbWFwIGhlcmUgaWYgd2UgaGF2ZSBuZXcgbGF5ZXJzXG4gIHJldHVybiB1cGRhdGVkU3RhdGU7XG59XG5cbi8qKlxuICogUmVuYW1lIGFuIGV4aXN0aW5nIGRhdGFzZXQgaW4gYHZpc1N0YXRlYFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZURhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJlbmFtZURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIHJldHVybiB1cGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyKHN0YXRlLCB7ZGF0YUlkOiBhY3Rpb24uZGF0YUlkLCBwcm9wczoge2xhYmVsOiBhY3Rpb24ubGFiZWx9fSk7XG59XG5cbmNvbnN0IEFMTE9XRURfVVBEQVRFX0RBVEFTRVRfUFJPUFMgPSBbJ2xhYmVsJywgJ2NvbG9yJywgJ21ldGFkYXRhJ107XG5cbi8qKlxuICogVmFsaWRhdGVzIHByb3BlcnRpZXMgYmVmb3JlIHVwZGF0aW5nIHRoZSBkYXRhc2V0LlxuICogTWFrZXMgc3VyZSBlYWNoIHByb3BlcnR5IGlzIGluIHRoZSBhbGxvd2VkIGxpc3RcbiAqIE1ha2VzIHN1cmUgY29sb3IgdmFsdWUgaXMgUkdCXG4gKiBQZXJmb3JtcyBkZWVwIG1lcmdlIHdoZW4gdXBkYXRpbmcgbWV0YWRhdGFcbiAqL1xuY29uc3QgdmFsaWRhdGVEYXRhc2V0VXBkYXRlUHJvcHMgPSAocHJvcHMsIGRhdGFzZXQpID0+IHtcbiAgY29uc3QgdmFsaWRhdGVkUHJvcHMgPSBPYmplY3QuZW50cmllcyhwcm9wcykucmVkdWNlKChhY2MsIGVudHJ5KSA9PiB7XG4gICAgY29uc3QgW2tleSwgdmFsdWVdID0gZW50cnk7XG4gICAgLy8gaXMgaXQgYWxsb3dlZCA/XG4gICAgaWYgKCFBTExPV0VEX1VQREFURV9EQVRBU0VUX1BST1BTLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgLy8gaWYgd2UgYXJlIGFkZGluZyBhIGNvbG9yIGJ1dCBpdCBpcyBub3QgUkdCIHdlIGRvbid0IGFjY2VwdCB0aGUgdmFsdWVcbiAgICAvLyBpbiB0aGUgZnV0dXJlIGFzIHdlIGFkZCBtb3JlIHByb3BzIHdlIHNob3VsZCBjaGFuZ2UgdGhpcyBpZiBpbnRvIGEgc3dpdGNoXG4gICAgaWYgKGtleSA9PT0gJ2NvbG9yJyAmJiAhaXNSZ2JDb2xvcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgLy8gZG8gd2UgbmVlZCBkZWVwIG1lcmdlID9cbiAgICByZXR1cm4gey4uLmFjYywgW2tleV06IGlzUGxhaW5PYmplY3QodmFsdWUpID8gZGVlcG1lcmdlKGRhdGFzZXRba2V5XSB8fCB7fSwgdmFsdWUpIDogdmFsdWV9O1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIHZhbGlkYXRlZFByb3BzO1xufTtcblxuLyoqXG4gKiBVcGRhdGUgRGF0YXNldCBwcm9wcyAobGFiZWwsIGNvbG9yLCBtZXRhKS4gRG8gbm90IHVzZSB0byB1cGRhdGUgZGF0YSBvciBhbnkgcmVsYXRlZCBwcm9wZXJ0aWVzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRGF0YXNldFByb3BzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5VcGRhdGVEYXRhc2V0UHJvcHNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtkYXRhSWQsIHByb3BzfSA9IGFjdGlvbjtcbiAgY29uc3Qge2RhdGFzZXRzfSA9IHN0YXRlO1xuICBjb25zdCBleGlzdGluZyA9IGRhdGFzZXRzW2RhdGFJZF07XG5cbiAgaWYgKGV4aXN0aW5nKSB7XG4gICAgY29uc3QgdmFsaWRhdGVkUHJvcHMgPSB2YWxpZGF0ZURhdGFzZXRVcGRhdGVQcm9wcyhwcm9wcywgZXhpc3RpbmcpO1xuICAgIC8vICB2YWxpZGF0ZSBwcm9wczoganVzdCBjb2xvciBmb3Igbm93XG4gICAgLy8gIHdlIG9ubHkgYWxsb3cgbGFiZWwsIGNvbG9yIGFuZCBtZXRhIHRvIGJlIHVwZGF0ZWRcbiAgICAvLyBjb25zdCBuZXdUYWJsZSA9IGNvcHlUYWJsZUFuZFVwZGF0ZShleGlzdGluZywgdmFsaWRhdGVkUHJvcHMpO1xuICAgIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgZGF0YXNldHM6IHtcbiAgICAgICAgLi4uZGF0YXNldHMsXG4gICAgICAgIFtkYXRhSWRdOiBjb3B5VGFibGVBbmRVcGRhdGUoZXhpc3RpbmcsIHZhbGlkYXRlZFByb3BzKVxuICAgICAgfVxuICAgIH07XG4gICAgLy8gQSB0aWxlc2V0IGFjY2VzcyB0b2tlbiBpcyByZWFkIHdoaWxlIGZvcm1hdHRpbmcgbGF5ZXIgZGF0YS4gUmVmcmVzaFxuICAgIC8vIG9ubHkgd2hlbiB0aGF0IGZpZWxkIGNoYW5nZXMgc28gb3RoZXIgbWV0YWRhdGEgZWRpdHMgKGUuZy4gcmVmcmVzaFxuICAgIC8vIGludGVydmFsKSBkbyBub3QgcmVidWlsZCBldmVyeSBsYXllciBvbiB0aGUgZGF0YXNldC5cbiAgICBpZiAocHJvcHMubWV0YWRhdGEgJiYgJ3RpbGUzZEFjY2Vzc1Rva2VuJyBpbiBwcm9wcy5tZXRhZGF0YSkge1xuICAgICAgcmV0dXJuIHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXh0U3RhdGUsIGRhdGFJZCk7XG4gICAgfVxuICAgIHJldHVybiBuZXh0U3RhdGU7XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogUmUtdmFsaWRhdGUgYSBsaXZlIGxheWVyIGFnYWluc3QgYSB0YWJsZSB3aG9zZSBzY2hlbWEganVzdCBjaGFuZ2VkLlxuICpcbiAqIFRoZSBsYXllcidzIGNvbHVtbnMgLyB2aXN1YWwtY2hhbm5lbCBmaWVsZHMgLyB0ZXh0LWxhYmVsIGZpZWxkcyBhcmUgZmlyc3RcbiAqIHJlbWFwcGVkIHRvIHRoZWlyIG5ldyBuYW1lcyAodmlhIGByZW5hbWVzYCkgc28gdGhlIGxheWVyIGZvbGxvd3MgYSByZW5hbWVcbiAqIGluc3RlYWQgb2YgdHJlYXRpbmcgdGhlIG9sZCBjb2x1bW4gYXMgcmVtb3ZlZCwgdGhlbiByZS12YWxpZGF0ZWQgd2l0aFxuICogYHZhbGlkYXRlRXhpc3RpbmdMYXllcldpdGhEYXRhYCDigJQgdGhlIHNhbWUgc2VyaWFsaXplICsgdmFsaWRhdGUgcGF0aCB1c2VkXG4gKiB3aGVuIGEgc2F2ZWQgY29uZmlnIGlzIGxvYWRlZCBhZ2FpbnN0IG5ldyBkYXRhLiBSZXR1cm5zIGBudWxsYCB3aGVuIGFcbiAqIHJlcXVpcmVkIGNvbHVtbiBpcyBnb25lICh0aGUgbGF5ZXIgY2FuIG5vIGxvbmdlciBiZSBidWlsdCkuXG4gKi9cbmZ1bmN0aW9uIHJlY29uY2lsZUxheWVyV2l0aE5ld1NjaGVtYShcbiAgbGF5ZXI6IExheWVyLFxuICByZW5hbWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICBuZXdUYWJsZTogS2VwbGVyVGFibGUsXG4gIHN0YXRlOiBWaXNTdGF0ZVxuKTogTGF5ZXIgfCBudWxsIHtcbiAgY29uc3QgY29uZmlnUGF0Y2g6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICAvLyBmb2xsb3cgcmVuYW1lZCBjb2x1bW5zXG4gIGNvbnN0IGNvbHVtbnNQYXRjaDogUmVjb3JkPHN0cmluZywge3ZhbHVlOiBzdHJpbmcgfCBudWxsOyBmaWVsZElkeDogbnVtYmVyfT4gPSB7fTtcbiAgbGV0IGNvbHVtbnNDaGFuZ2VkID0gZmFsc2U7XG4gIE9iamVjdC5lbnRyaWVzKGxheWVyLmNvbmZpZy5jb2x1bW5zIHx8IHt9KS5mb3JFYWNoKChbY2tleSwgY29sXSkgPT4ge1xuICAgIGlmIChjb2w/LnZhbHVlICYmIHJlbmFtZXNbY29sLnZhbHVlXSkge1xuICAgICAgY29sdW1uc1BhdGNoW2NrZXldID0gey4uLmNvbCwgdmFsdWU6IHJlbmFtZXNbY29sLnZhbHVlXX07XG4gICAgICBjb2x1bW5zQ2hhbmdlZCA9IHRydWU7XG4gICAgfVxuICB9KTtcbiAgaWYgKGNvbHVtbnNDaGFuZ2VkKSB7XG4gICAgY29uZmlnUGF0Y2guY29sdW1ucyA9IHsuLi5sYXllci5jb25maWcuY29sdW1ucywgLi4uY29sdW1uc1BhdGNofTtcbiAgfVxuXG4gIC8vIGZvbGxvdyByZW5hbWVkIHZpc3VhbC1jaGFubmVsIGZpZWxkcyAoY29sb3JGaWVsZCwgc2l6ZUZpZWxkLCAuLi4pXG4gIE9iamVjdC52YWx1ZXMobGF5ZXIudmlzdWFsQ2hhbm5lbHMpLmZvckVhY2goKHtmaWVsZH0pID0+IHtcbiAgICBjb25zdCBmaWVsZENvbmZpZyA9IGxheWVyLmNvbmZpZ1tmaWVsZF07XG4gICAgaWYgKGZpZWxkQ29uZmlnPy5uYW1lICYmIHJlbmFtZXNbZmllbGRDb25maWcubmFtZV0pIHtcbiAgICAgIGNvbmZpZ1BhdGNoW2ZpZWxkXSA9IHsuLi5maWVsZENvbmZpZywgbmFtZTogcmVuYW1lc1tmaWVsZENvbmZpZy5uYW1lXX07XG4gICAgfVxuICB9KTtcblxuICAvLyBmb2xsb3cgcmVuYW1lZCB0ZXh0LWxhYmVsIGZpZWxkc1xuICBpZiAobGF5ZXIuY29uZmlnLnRleHRMYWJlbD8ubGVuZ3RoKSB7XG4gICAgY29uc3QgdGV4dExhYmVsID0gbGF5ZXIuY29uZmlnLnRleHRMYWJlbC5tYXAodGwgPT5cbiAgICAgIHRsLmZpZWxkICYmIHJlbmFtZXNbdGwuZmllbGQubmFtZV1cbiAgICAgICAgPyB7Li4udGwsIGZpZWxkOiB7Li4udGwuZmllbGQsIG5hbWU6IHJlbmFtZXNbdGwuZmllbGQubmFtZV19fVxuICAgICAgICA6IHRsXG4gICAgKTtcbiAgICBpZiAodGV4dExhYmVsLnNvbWUoKHRsLCBpKSA9PiB0bCAhPT0gbGF5ZXIuY29uZmlnLnRleHRMYWJlbFtpXSkpIHtcbiAgICAgIGNvbmZpZ1BhdGNoLnRleHRMYWJlbCA9IHRleHRMYWJlbDtcbiAgICB9XG4gIH1cblxuICAvLyBzaGFsbG93LWNvcHkgdGhlIGxheWVyIHNvIHdlIG5ldmVyIG11dGF0ZSByZWR1eCBzdGF0ZTsgdGhlIGNvcHkga2VlcHMgdGhlXG4gIC8vIHByb3RvdHlwZSBtZXRob2RzIChgdmlzdWFsQ2hhbm5lbHNgIGdldHRlciwgYGlzVmFsaWRUb1NhdmVgKSBzbyBpdFxuICAvLyBzZXJpYWxpemVzIGV4YWN0bHkgbGlrZSBhIGxpdmUgbGF5ZXIuXG4gIGNvbnN0IGxheWVyQ29weSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YobGF5ZXIpKSwgbGF5ZXIpO1xuICBpZiAoT2JqZWN0LmtleXMoY29uZmlnUGF0Y2gpLmxlbmd0aCkge1xuICAgIGxheWVyQ29weS5jb25maWcgPSB7Li4ubGF5ZXIuY29uZmlnLCAuLi5jb25maWdQYXRjaH07XG4gIH1cblxuICBjb25zdCB2YWxpZGF0ZWQgPSB2YWxpZGF0ZUV4aXN0aW5nTGF5ZXJXaXRoRGF0YShcbiAgICBuZXdUYWJsZSxcbiAgICBzdGF0ZS5sYXllckNsYXNzZXMsXG4gICAgbGF5ZXJDb3B5LFxuICAgIHN0YXRlLnNjaGVtYVxuICApO1xuXG4gIHJldHVybiB2YWxpZGF0ZWQgJiYgdmFsaWRhdGVkLmhhc0FsbENvbHVtbnMoKSA/IHZhbGlkYXRlZCA6IG51bGw7XG59XG5cbi8qKlxuICogVXBkYXRlIGFuIGV4aXN0aW5nIGRhdGFzZXQncyBzY2hlbWEgKGNvbHVtbnMvZmllbGRzKSBpbiBwbGFjZSBhbmQgcmVjb25jaWxlXG4gKiBldmVyeXRoaW5nIHRoYXQgcmVmZXJlbmNlZCB0aGUgb2xkIGNvbHVtbnM6IGZpbHRlcnMsIGxheWVycywgdG9vbHRpcCBmaWVsZHMsXG4gKiBwaW5uZWQgY29sdW1ucyBhbmQgc29ydCBzdGF0ZS4gVGhlIGRhdGFzZXQga2VlcHMgaXRzIGlkL2xhYmVsL2NvbG9yL21ldGFkYXRhLlxuICpcbiAqIGBhY3Rpb24uZGF0YWAgaXMgdGhlIHNhbWUgc2hhcGUgYEtlcGxlclRhYmxlLmltcG9ydERhdGFgIGFjY2VwdHMgKGB7Y29scyxcbiAqIGZpZWxkcywgYXJyb3dUYWJsZX1gIHdoZW4gcmVwbGFjaW5nIGNvbHVtbnMpLiBgYWN0aW9uLnJlbmFtZXNgIGlzIGFuIG9wdGlvbmFsXG4gKiBvbGQg4oaSIG5ldyBjb2x1bW4tbmFtZSBtYXAgc28gbGF5ZXJzL2ZpbHRlcnMvdG9vbHRpcHMgZm9sbG93IGEgcmVuYW1lIGluc3RlYWRcbiAqIG9mIHRyZWF0aW5nIHRoZSBvbGQgY29sdW1uIGFzIHJlbW92ZWQuXG4gKlxuICogUmVjb25jaWxpYXRpb24gaXMgbmFtZS1iYXNlZCDigJQgdGhlIHNhbWUgd2F5IGtlcGxlci5nbCBsb2FkcyBhIHNhdmVkIGNvbmZpZ1xuICogYWdhaW5zdCBjaGFuZ2VkIGRhdGEuIEEgbGF5ZXIgd2hvc2UgcmVxdWlyZWQgY29sdW1uIGlzIGdvbmUgaXMgcmVtb3ZlZDsgYVxuICogZmlsdGVyIG9uIGEgZ29uZSBjb2x1bW4gaXMgZHJvcHBlZCAob3IgdGhlIGRhdGFzZXQgaXMgc3BsaWNlZCBvdXQgb2YgYSBzeW5jZWRcbiAqIGZpbHRlcik7IHRvb2x0aXAgZmllbGRzIGFyZSByZW1hcHBlZCAvIGRyb3BwZWQuXG4gKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZURhdGFzZXRVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlVwZGF0ZURhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtkYXRhSWQsIGRhdGEsIHJlbmFtZXMgPSB7fX0gPSBhY3Rpb247XG4gIGNvbnN0IGV4aXN0aW5nID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFleGlzdGluZykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIDEuIHJlYnVpbGQgdGhlIHRhYmxlIHNjaGVtYSBpbiBwbGFjZSAoc2FtZSBpZC9sYWJlbC9jb2xvci9tZXRhZGF0YSlcbiAgY29uc3QgbmV3VGFibGUgPSBjb3B5VGFibGVBbmRVcGRhdGUoZXhpc3RpbmcsIHt9KTtcbiAgbmV3VGFibGUudXBkYXRlU2NoZW1hKGRhdGEpO1xuXG4gIC8vIFRoZSBkYXRhIGNvbnRhaW5lciBpcyByZWJ1aWx0IHVuc29ydGVkIGFuZCB1bmZpbHRlcmVkOyByZXNldCB0aGUgdGFibGUnc1xuICAvLyB2aWV3IHN0YXRlIHRoYXQgaW5kZXhlcyBpbnRvIHRoZSBvbGQgY29udGFpbmVyLlxuICBuZXdUYWJsZS5maWx0ZXJlZElkeENQVSA9IG5ld1RhYmxlLmFsbEluZGV4ZXM7XG4gIG5ld1RhYmxlLmZpbHRlclJlY29yZENQVSA9IHVuZGVmaW5lZDtcbiAgbmV3VGFibGUuc29ydENvbHVtbiA9IHVuZGVmaW5lZDtcbiAgbmV3VGFibGUuc29ydE9yZGVyID0gbnVsbDtcbiAgbmV3VGFibGUucGlubmVkQ29sdW1ucyA9IChleGlzdGluZy5waW5uZWRDb2x1bW5zIHx8IFtdKVxuICAgIC5tYXAobmFtZSA9PiByZW5hbWVzW25hbWVdID8/IG5hbWUpXG4gICAgLmZpbHRlcihuYW1lID0+IG5ld1RhYmxlLmdldENvbHVtbkZpZWxkSWR4KG5hbWUpID4gLTEpO1xuXG4gIGNvbnN0IG5ld0ZpZWxkc0J5TmFtZSA9IG5ldyBTZXQobmV3VGFibGUuZmllbGRzLm1hcChmID0+IGYubmFtZSkpO1xuICBjb25zdCBuZXdEYXRhc2V0cyA9IHsuLi5zdGF0ZS5kYXRhc2V0cywgW2RhdGFJZF06IG5ld1RhYmxlfTtcblxuICAvLyAyLiByZWNvbmNpbGUgZmlsdGVyc1xuICBsZXQgbmV3RmlsdGVycyA9IHN0YXRlLmZpbHRlcnNcbiAgICAubWFwKGZpbHRlciA9PiB7XG4gICAgICBjb25zdCB2aSA9IGZpbHRlci5kYXRhSWQuaW5kZXhPZihkYXRhSWQpO1xuICAgICAgaWYgKHZpID09PSAtMSkge1xuICAgICAgICByZXR1cm4gZmlsdGVyO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvbGROYW1lID0gZmlsdGVyLm5hbWVbdmldO1xuICAgICAgY29uc3QgbmV3TmFtZSA9IHJlbmFtZXNbb2xkTmFtZV0gPz8gb2xkTmFtZTtcbiAgICAgIGNvbnN0IGZpZWxkSWR4ID0gbmV3VGFibGUuZ2V0Q29sdW1uRmllbGRJZHgobmV3TmFtZSk7XG5cbiAgICAgIGlmIChmaWVsZElkeCA9PT0gLTEpIHtcbiAgICAgICAgLy8gY29sdW1uIGlzIGdvbmU6IGRyb3AgYSBzaW5nbGUtZGF0YXNldCBmaWx0ZXIsIHNwbGljZSBpdCBvdXQgb2YgYSBzeW5jZWQgb25lXG4gICAgICAgIHJldHVybiBmaWx0ZXIuZGF0YUlkLmxlbmd0aCA9PT0gMVxuICAgICAgICAgID8gbnVsbFxuICAgICAgICAgIDogX3JlbW92ZUZpbHRlckRhdGFJZEF0VmFsdWVJbmRleChmaWx0ZXIsIHZpLCBuZXdEYXRhc2V0cyk7XG4gICAgICB9XG5cbiAgICAgIC8vIGNvbHVtbiBwcmVzZW50IChwb3NzaWJseSByZW5hbWVkKTogcmUtcmVzb2x2ZSBuYW1lL2ZpZWxkSWR4L2RvbWFpblxuICAgICAgY29uc3Qge2ZpbHRlcjogdXBkYXRlZH0gPSBhcHBseUZpbHRlckZpZWxkTmFtZShmaWx0ZXIsIG5ld0RhdGFzZXRzLCBkYXRhSWQsIG5ld05hbWUsIHZpLCB7XG4gICAgICAgIG1lcmdlRG9tYWluOiB2aSA+IDBcbiAgICAgIH0pO1xuICAgICAgaWYgKCF1cGRhdGVkKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBicnVzaCBmaWx0ZXJzIGNhcnJ5IGEgc2Vjb25kIHktYXhpcyBmaWVsZDsgZm9sbG93IGEgcmVuYW1lIHRoZXJlIHRvb1xuICAgICAgY29uc3QgeUF4aXMgPVxuICAgICAgICB1cGRhdGVkLnlBeGlzPy5uYW1lICYmXG4gICAgICAgIChyZW5hbWVzW3VwZGF0ZWQueUF4aXMubmFtZV1cbiAgICAgICAgICA/IHsuLi51cGRhdGVkLnlBeGlzLCBuYW1lOiByZW5hbWVzW3VwZGF0ZWQueUF4aXMubmFtZV19XG4gICAgICAgICAgOiBuZXdGaWVsZHNCeU5hbWUuaGFzKHVwZGF0ZWQueUF4aXMubmFtZSlcbiAgICAgICAgICA/IHVwZGF0ZWQueUF4aXNcbiAgICAgICAgICA6IG51bGwpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi51cGRhdGVkLFxuICAgICAgICB5QXhpcyxcbiAgICAgICAgLy8gY2xhbXAgdGhlIHVzZXIncyBwcmV2aW91cyBzZWxlY3Rpb24gaW50byB0aGUgbmV3IGRvbWFpbiBpbnN0ZWFkIG9mXG4gICAgICAgIC8vIHJlc2V0dGluZyBpdCB0byB0aGUgZnVsbCByYW5nZVxuICAgICAgICB2YWx1ZTogYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihmaWx0ZXIudmFsdWUsIHVwZGF0ZWQpXG4gICAgICB9O1xuICAgIH0pXG4gICAgLmZpbHRlcihCb29sZWFuKSBhcyBGaWx0ZXJbXTtcblxuICAvLyByZWFzc2lnbiBHUFUgY2hhbm5lbHMgbm93IHRoYXQgdGhlIGZpbHRlciBsaXN0IGlzIHNldHRsZWRcbiAgbmV3RmlsdGVycyA9IG5ld0ZpbHRlcnMubWFwKGZpbHRlciA9PlxuICAgIGZpbHRlci5ncHUgPyBhc3NpZ25HcHVDaGFubmVsKHNldEZpbHRlckdwdU1vZGUoZmlsdGVyLCBuZXdGaWx0ZXJzKSwgbmV3RmlsdGVycykgOiBmaWx0ZXJcbiAgKTtcblxuICAvLyAzLiByZWJ1aWxkIHRoZSB0YWJsZSdzIGZpbHRlciBzdGF0ZSAoZ3B1RmlsdGVyIC8gZmlsdGVyUmVjb3JkIC8gZmlsdGVyZWRJbmRleClcbiAgbmV3VGFibGUuZmlsdGVyVGFibGUoXG4gICAgbmV3RmlsdGVycyxcbiAgICBzdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuZGF0YUlkID09PSBkYXRhSWQpLFxuICAgIHt9XG4gICk7XG5cbiAgLy8gNC4gcmVjb25jaWxlIGxheWVyc1xuICBjb25zdCBsYXllcnNUb1JlbW92ZTogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgbmV3TGF5ZXJzID0gc3RhdGUubGF5ZXJzLm1hcChsYXllciA9PiB7XG4gICAgaWYgKGxheWVyLmNvbmZpZy5kYXRhSWQgIT09IGRhdGFJZCkge1xuICAgICAgcmV0dXJuIGxheWVyO1xuICAgIH1cbiAgICBjb25zdCByZWNvbmNpbGVkID0gcmVjb25jaWxlTGF5ZXJXaXRoTmV3U2NoZW1hKGxheWVyLCByZW5hbWVzLCBuZXdUYWJsZSwgc3RhdGUpO1xuICAgIGlmIChyZWNvbmNpbGVkKSB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlZDtcbiAgICB9XG4gICAgbGF5ZXJzVG9SZW1vdmUucHVzaChsYXllci5pZCk7XG4gICAgcmV0dXJuIGxheWVyOyAvLyBwbGFjZWhvbGRlciwgZHJvcHBlZCB2aWEgcmVtb3ZlTGF5ZXJVcGRhdGVyIGJlbG93XG4gIH0pO1xuXG4gIC8vIDUuIHJlY29uY2lsZSB0b29sdGlwIGZpZWxkc1RvU2hvd1xuICBsZXQgaW50ZXJhY3Rpb25Db25maWcgPSBzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZztcbiAgY29uc3QgdG9vbHRpcCA9IGludGVyYWN0aW9uQ29uZmlnPy50b29sdGlwO1xuICBjb25zdCBmaWVsZHNUb1Nob3cgPSB0b29sdGlwPy5jb25maWc/LmZpZWxkc1RvU2hvdz8uW2RhdGFJZF07XG4gIGlmIChmaWVsZHNUb1Nob3cpIHtcbiAgICBjb25zdCBuZXh0RmllbGRzVG9TaG93ID0gZmllbGRzVG9TaG93LmZsYXRNYXAoZiA9PiB7XG4gICAgICBjb25zdCBuYW1lID0gcmVuYW1lc1tmLm5hbWVdID8/IGYubmFtZTtcbiAgICAgIHJldHVybiBuZXdGaWVsZHNCeU5hbWUuaGFzKG5hbWUpID8gW3suLi5mLCBuYW1lfV0gOiBbXTtcbiAgICB9KTtcbiAgICBpbnRlcmFjdGlvbkNvbmZpZyA9IHtcbiAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgdG9vbHRpcDoge1xuICAgICAgICAuLi50b29sdGlwLFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAuLi50b29sdGlwLmNvbmZpZyxcbiAgICAgICAgICBmaWVsZHNUb1Nob3c6IHsuLi50b29sdGlwLmNvbmZpZy5maWVsZHNUb1Nob3csIFtkYXRhSWRdOiBuZXh0RmllbGRzVG9TaG93fVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGxldCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGF0YXNldHM6IG5ld0RhdGFzZXRzLFxuICAgIGZpbHRlcnM6IG5ld0ZpbHRlcnMsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgaW50ZXJhY3Rpb25Db25maWdcbiAgfTtcblxuICAvLyA2LiBkcm9wIGxheWVycyB0aGF0IGxvc3QgdGhlaXIgcmVxdWlyZWQgY29sdW1uc1xuICBuZXh0U3RhdGUgPSBsYXllcnNUb1JlbW92ZS5yZWR1Y2UoKGFjY3UsIGlkKSA9PiByZW1vdmVMYXllclVwZGF0ZXIoYWNjdSwge2lkfSksIG5leHRTdGF0ZSk7XG5cbiAgLy8gNy4gcmVjb21wdXRlIGxheWVyIGRvbWFpbnMgKyBkYXRhIGZvciB0aGUgdXBkYXRlZCBkYXRhc2V0XG4gIG5leHRTdGF0ZSA9IHVwZGF0ZUFsbExheWVyRG9tYWluRGF0YShuZXh0U3RhdGUsIGRhdGFJZCk7XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuLyoqXG4gKiBXaGVuIGEgdXNlciBjbGlja3Mgb24gdGhlIHNwZWNpZmljIG1hcCBjbG9zaW5nIGljb25cbiAqIHRoZSBhcHBsaWNhdGlvbiB3aWxsIGNsb3NlIHRoZSBzZWxlY3RlZCBtYXBcbiAqIGFuZCB3aWxsIG1lcmdlIHRoZSByZW1haW5pbmcgb25lIHdpdGggdGhlIGdsb2JhbCBzdGF0ZVxuICogVE9ETzogaSB0aGluayBpbiB0aGUgZnV0dXJlIHRoaXMgYWN0aW9uIHNob3VsZCBiZSBjYWxsZWQgbWVyZ2UgbWFwIGxheWVycyB3aXRoIGdsb2JhbCBzZXR0aW5nc1xuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlIGB2aXNTdGF0ZWBcbiAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb24gYWN0aW9uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb3NlU3BlY2lmaWNNYXBBdEluZGV4PFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IE1hcFN0YXRlQWN0aW9ucy5Ub2dnbGVTcGxpdE1hcFVwZGF0ZXJBY3Rpb25cbik6IFMge1xuICAvLyByZXRyaWV2ZSBsYXllcnMgbWV0YSBkYXRhIGZyb20gdGhlIHJlbWFpbmluZyBtYXAgdGhhdCB3ZSBuZWVkIHRvIGtlZXBcbiAgY29uc3QgaW5kZXhUb1JldHJpZXZlID0gMSAtIGFjdGlvbi5wYXlsb2FkO1xuICBjb25zdCBtYXBMYXllcnMgPSBzdGF0ZS5zcGxpdE1hcHNbaW5kZXhUb1JldHJpZXZlXT8ubGF5ZXJzO1xuICBjb25zdCB7bGF5ZXJzfSA9IHN0YXRlO1xuXG4gIC8vIHVwZGF0ZSBsYXllciB2aXNpYmlsaXR5XG4gIGNvbnN0IG5ld0xheWVycyA9IGxheWVycy5tYXAobGF5ZXIgPT5cbiAgICBtYXBMYXllcnMgJiYgIW1hcExheWVyc1tsYXllci5pZF0gJiYgbGF5ZXIuY29uZmlnLmlzVmlzaWJsZVxuICAgICAgPyBsYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgICAgLy8gaWYgbGF5ZXIuaWQgaXMgbm90IGluIG1hcExheWVycywgaXQgc2hvdWxkIGJlIGluVmlzaWJsZVxuICAgICAgICAgIGlzVmlzaWJsZTogZmFsc2VcbiAgICAgICAgfSlcbiAgICAgIDogbGF5ZXJcbiAgKTtcblxuICAvLyBkZWxldGUgbWFwXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgc3BsaXRNYXBzOiBbXVxuICB9O1xufVxuXG4vKipcbiAqIFRyaWdnZXIgZmlsZSBsb2FkaW5nIGRpc3BhdGNoIGBhZGREYXRhVG9NYXBgIGlmIHN1Y2NlZWQsIG9yIGBsb2FkRmlsZXNFcnJgIGlmIGZhaWxlZFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xubGV0IG5leHRGaWxlTG9hZElkID0gMTtcblxuZnVuY3Rpb24gY3JlYXRlRmlsZUxvYWRJZCgpOiBudW1iZXIge1xuICBjb25zdCBsb2FkSWQgPSBuZXh0RmlsZUxvYWRJZDtcbiAgbmV4dEZpbGVMb2FkSWQgKz0gMTtcbiAgcmV0dXJuIGxvYWRJZDtcbn1cblxuZnVuY3Rpb24gZmluaXNoRmlsZUxvYWQoXG4gIG9uRmluaXNoOiAocGF5bG9hZDogYW55LCBvcHRpb25zPzogVmlzU3RhdGVBY3Rpb25zLkxvYWRGaWxlc09wdGlvbnMpID0+IGFueSxcbiAgZmlsZUNhY2hlOiBhbnlbXSxcbiAgb3B0aW9uczogVmlzU3RhdGVBY3Rpb25zLkxvYWRGaWxlc09wdGlvbnMgfCB1bmRlZmluZWQsXG4gIGxvYWRJZDogbnVtYmVyXG4pIHtcbiAgY29uc3QgYWN0aW9uID0gb3B0aW9ucyA/IG9uRmluaXNoKGZpbGVDYWNoZSwgb3B0aW9ucykgOiBvbkZpbmlzaChmaWxlQ2FjaGUpO1xuICByZXR1cm4gey4uLmFjdGlvbiwgbG9hZElkfTtcbn1cblxuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCB7ZmlsZXMsIG9uRmluaXNoID0gbG9hZEZpbGVzU3VjY2Vzcywgb3B0aW9uc30gPSBhY3Rpb247XG4gIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgY29tcGFuaW9uRmlsZXMgPSBBcnJheS5mcm9tKGZpbGVzKTtcbiAgY29uc3QgZmlsZXNUb0xvYWQgPSBnZXRGaWxlc1RvUGFyc2UoY29tcGFuaW9uRmlsZXMpO1xuXG4gIC8vIEFub3RoZXIgZHJvcCB3aGlsZSBhIGRlZmVycmVkIHBhcnNlIGlzIHJ1bm5pbmcgbXVzdCBqb2luIHRoYXQgbG9hZC5cbiAgLy8gUmVwbGFjaW5nIGBmaWxlTG9hZGluZ2AgbWFrZXMgdGhlIGluLWZsaWdodCBmaWxlIGZpbmlzaCBhZ2FpbnN0IHRoZSBuZXdcbiAgLy8gY2FjaGUgYW5kIGRyb3AgdGhlIGZpbGVzIHRoYXQgd2VyZSBhbHJlYWR5IGJlaW5nIHBhcnNlZC5cbiAgaWYgKHN0YXRlLmZpbGVMb2FkaW5nICYmIHN0YXRlLmZpbGVMb2FkaW5nLm9wdGlvbnM/LmRlZmVyQWRkVG9NYXAgJiYgb3B0aW9ucz8uZGVmZXJBZGRUb01hcCkge1xuICAgIHJldHVybiBhcHBlbmREZWZlcnJlZEZpbGVMb2FkKHN0YXRlLCB7ZmlsZXNUb0xvYWQsIGNvbXBhbmlvbkZpbGVzfSk7XG4gIH1cblxuICBpZiAoIWZpbGVzVG9Mb2FkLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIEEgZGVmZXJyZWQgbG9hZCBpcyBhbm90aGVyIGJhdGNoIGZvciB0aGUgc2FtZSBBZGQgRGF0YSBjbGljay4gS2VlcCBmaWxlc1xuICAvLyBhbHJlYWR5IHN0YWdlZCwgYW5kIGtlZXAgdGhlaXIgZXJyb3IgY2FyZHMsIGluc3RlYWQgb2Ygc3RhcnRpbmcgb3Zlci5cbiAgY29uc3QgcHJldmlvdXNFcnJvcnMgPVxuICAgIG9wdGlvbnM/LmRlZmVyQWRkVG9NYXAgJiYgc3RhdGUuZmlsZUxvYWRpbmdQcm9ncmVzc1xuICAgICAgPyBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgICAgT2JqZWN0LmVudHJpZXMoc3RhdGUuZmlsZUxvYWRpbmdQcm9ncmVzcykuZmlsdGVyKChbLCB2YWx1ZV0pID0+IHZhbHVlPy5lcnJvcilcbiAgICAgICAgKVxuICAgICAgOiB7fTtcblxuICBjb25zdCBmaWxlTG9hZGluZ1Byb2dyZXNzID0gZmlsZXNUb0xvYWQucmVkdWNlKFxuICAgIChhY2N1LCBmLCBpKSA9PiBtZXJnZV8oaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MoZiwgaSkpKGFjY3UpLFxuICAgIHByZXZpb3VzRXJyb3JzXG4gICk7XG5cbiAgY29uc3QgZmlsZUxvYWRpbmcgPSB7XG4gICAgbG9hZElkOiBjcmVhdGVGaWxlTG9hZElkKCksXG4gICAgZmlsZUNhY2hlOiBbXSxcbiAgICBmaWxlc1RvTG9hZCxcbiAgICBjb21wYW5pb25GaWxlcyxcbiAgICBvbkZpbmlzaCxcbiAgICAuLi4ob3B0aW9ucyA/IHtvcHRpb25zfSA6IHt9KVxuICB9O1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IG1lcmdlXyh7XG4gICAgZmlsZUxvYWRpbmdQcm9ncmVzcyxcbiAgICBmaWxlTG9hZGluZyxcbiAgICAuLi4ob3B0aW9ucz8uZGVmZXJBZGRUb01hcCA/IHt9IDoge3N0YWdlZFRvQWRkOiBudWxsfSlcbiAgfSkoc3RhdGUpO1xuXG4gIHJldHVybiBsb2FkTmV4dEZpbGVVcGRhdGVyKG5leHRTdGF0ZSk7XG59O1xuXG4vKipcbiAqIEFkZCBhIGRyb3AgdG8gdGhlIGRlZmVycmVkIGxvYWQgdGhhdCBpcyBhbHJlYWR5IHBhcnNpbmcuXG4gKiBUaGUgY3VycmVudCBmaWxlIGtlZXBzIGl0cyBjYWNoZTsgdGhlIG5ldyBmaWxlcyBydW4gYWZ0ZXIgaXQuXG4gKi9cbmZ1bmN0aW9uIGFwcGVuZERlZmVycmVkRmlsZUxvYWQoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge1xuICAgIGZpbGVzVG9Mb2FkLFxuICAgIGNvbXBhbmlvbkZpbGVzXG4gIH06IHtcbiAgICBmaWxlc1RvTG9hZDogRmlsZVtdO1xuICAgIGNvbXBhbmlvbkZpbGVzOiBGaWxlW107XG4gIH1cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgbG9hZGluZyA9IHN0YXRlLmZpbGVMb2FkaW5nO1xuICBpZiAoIWxvYWRpbmcgfHwgKCFmaWxlc1RvTG9hZC5sZW5ndGggJiYgIWNvbXBhbmlvbkZpbGVzLmxlbmd0aCkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBmaWxlTG9hZGluZ1Byb2dyZXNzID0gZmlsZXNUb0xvYWQucmVkdWNlKFxuICAgIChhY2N1LCBmaWxlLCBpbmRleCkgPT4gbWVyZ2VfKGluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzKGZpbGUsIGluZGV4KSkoYWNjdSksXG4gICAgc3RhdGUuZmlsZUxvYWRpbmdQcm9ncmVzc1xuICApO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsZUxvYWRpbmdQcm9ncmVzcyxcbiAgICBmaWxlTG9hZGluZzoge1xuICAgICAgLi4ubG9hZGluZyxcbiAgICAgIGZpbGVzVG9Mb2FkOiBbLi4uQXJyYXkuZnJvbShsb2FkaW5nLmZpbGVzVG9Mb2FkKSwgLi4uZmlsZXNUb0xvYWRdLFxuICAgICAgY29tcGFuaW9uRmlsZXM6IFsuLi4obG9hZGluZy5jb21wYW5pb25GaWxlcyB8fCBbXSksIC4uLmNvbXBhbmlvbkZpbGVzXVxuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBTdWNlc3NmdWxseSBsb2FkZWQgb25lIGZpbGUsIG1vdmUgb24gdG8gdGhlIG5leHQgb25lXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEZpbGVTdGVwU3VjY2Vzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVTdGVwU3VjY2Vzc0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIXN0YXRlLmZpbGVMb2FkaW5nKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHtmaWxlTmFtZSwgZmlsZUNhY2hlfSA9IGFjdGlvbjtcbiAgY29uc3QgbG9hZElkID0gc3RhdGUuZmlsZUxvYWRpbmcubG9hZElkO1xuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHtwZXJjZW50OiAxLCBtZXNzYWdlOiAnRG9uZSd9XG4gIH0pO1xuXG4gIC8vIHNhdmUgcHJvY2Vzc2VkIGZpbGUgdG8gZmlsZUNhY2hlXG4gIGNvbnN0IHN0YXRlV2l0aENhY2hlID0gcGlja18oJ2ZpbGVMb2FkaW5nJykobWVyZ2VfKHtmaWxlQ2FjaGV9KSkoc3RhdGVXaXRoUHJvZ3Jlc3MpO1xuXG4gIC8vIERlY2lkZSBhZnRlciB0aGUgcGF1c2UsIGFuZCBvbmx5IGZvciB0aGlzIGxvYWQuIEEgZHJvcCBkdXJpbmcgdGhlc2VcbiAgLy8gMjAwbXMgam9pbnMgdGhlIHF1ZXVlOyBjYW5jZWwgb3IgYSBuZXdlciBsb2FkIG1ha2VzIHRoaXMgY29udGludWF0aW9uIHN0YWxlLlxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGVXaXRoQ2FjaGUsXG4gICAgREVMQVlfVEFTSygyMDApLm1hcCgoKSA9PiBsb2FkTmV4dEZpbGUobG9hZElkKSlcbiAgKTtcbn1cblxuLy8gd2l0aFRhc2s8VD4oc3RhdGU6IFQsIHRhc2s6IGFueSk6IFRcblxuLyoqXG4gKlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWROZXh0RmlsZVVwZGF0ZXIoc3RhdGU6IFZpc1N0YXRlLCBhY3Rpb24/OiB7bG9hZElkPzogbnVtYmVyfSk6IFZpc1N0YXRlIHtcbiAgY29uc3QgbG9hZElkID0gYWN0aW9uPy5sb2FkSWQ7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcgfHwgKGxvYWRJZCAhPSBudWxsICYmIHN0YXRlLmZpbGVMb2FkaW5nLmxvYWRJZCAhPT0gbG9hZElkKSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7ZmlsZXNUb0xvYWQsIG9uRmluaXNoLCBmaWxlQ2FjaGUsIG9wdGlvbnMsIGxvYWRJZDogY3VycmVudExvYWRJZH0gPSBzdGF0ZS5maWxlTG9hZGluZztcbiAgaWYgKCFmaWxlc1RvTG9hZC5sZW5ndGgpIHtcbiAgICByZXR1cm4gd2l0aFRhc2soXG4gICAgICBzdGF0ZSxcbiAgICAgIEFDVElPTl9UQVNLKCkubWFwKCgpID0+IGZpbmlzaEZpbGVMb2FkKG9uRmluaXNoLCBmaWxlQ2FjaGUsIG9wdGlvbnMsIGN1cnJlbnRMb2FkSWQpKVxuICAgICk7XG4gIH1cbiAgY29uc3QgW2ZpbGUsIC4uLnJlbWFpbmluZ0ZpbGVzVG9Mb2FkXSA9IGZpbGVzVG9Mb2FkO1xuXG4gIC8vIHNhdmUgZmlsZXNUb0xvYWQgdG8gc3RhdGVcbiAgY29uc3QgbmV4dFN0YXRlID0gcGlja18oJ2ZpbGVMb2FkaW5nJykobWVyZ2VfKHtmaWxlc1RvTG9hZDogcmVtYWluaW5nRmlsZXNUb0xvYWR9KSkoc3RhdGUpO1xuXG4gIGNvbnN0IHN0YXRlV2l0aFByb2dyZXNzID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIobmV4dFN0YXRlLCB7XG4gICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcbiAgICBwcm9ncmVzczoge3BlcmNlbnQ6IDAsIG1lc3NhZ2U6ICdsb2FkaW5nLi4uJ31cbiAgfSk7XG5cbiAgY29uc3Qge2xvYWRlcnMsIGxvYWRPcHRpb25zfSA9IHN0YXRlO1xuICBpZiAoaXNaaXBGaWxlTmFtZShmaWxlLm5hbWUpKSB7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGVXaXRoUHJvZ3Jlc3MsXG4gICAgICBFWFBBTkRfWklQX1RBU0soe2ZpbGUsIGV4dGVuc2lvbnM6IGRhdGFzZXRFeHRlbnNpb25zRnJvbUxvYWRlcnMobG9hZGVycyl9KS5iaW1hcChcbiAgICAgICAgZXhwYW5zaW9uID0+XG4gICAgICAgICAgZXhwYW5kWmlwQXJjaGl2ZVN1Y2Nlc3Moe1xuICAgICAgICAgICAgbG9hZElkOiBjdXJyZW50TG9hZElkLFxuICAgICAgICAgICAgYXJjaGl2ZU5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgICAgIGV4cGFuc2lvblxuICAgICAgICAgIH0pLFxuICAgICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGUubmFtZSwgZXJyLCBjdXJyZW50TG9hZElkKVxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHdpdGhUYXNrKFxuICAgIHN0YXRlV2l0aFByb2dyZXNzLFxuICAgIG1ha2VMb2FkRmlsZVRhc2soXG4gICAgICBmaWxlLFxuICAgICAgbmV4dFN0YXRlLmZpbGVMb2FkaW5nICYmIG5leHRTdGF0ZS5maWxlTG9hZGluZy5maWxlQ2FjaGUsXG4gICAgICBsb2FkZXJzLFxuICAgICAgbG9hZE9wdGlvbnMsXG4gICAgICBuZXh0U3RhdGUuZmlsZUxvYWRpbmcgPyBuZXh0U3RhdGUuZmlsZUxvYWRpbmcuY29tcGFuaW9uRmlsZXMgOiB1bmRlZmluZWQsXG4gICAgICBvcHRpb25zXG4gICAgKVxuICApO1xufVxuXG5mdW5jdGlvbiBkYXRhc2V0RXh0ZW5zaW9uc0Zyb21Mb2FkZXJzKFxuICBsb2FkZXJzOiBBcnJheTx7ZXh0ZW5zaW9ucz86IHJlYWRvbmx5IHN0cmluZ1tdfT4gPSBbXVxuKTogc3RyaW5nW10ge1xuICBjb25zdCBleHRlbnNpb25zOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3QgbG9hZGVyIG9mIGxvYWRlcnMpIHtcbiAgICBmb3IgKGNvbnN0IGV4dGVuc2lvbiBvZiBsb2FkZXI/LmV4dGVuc2lvbnMgfHwgW10pIHtcbiAgICAgIGNvbnN0IGV4dCA9IFN0cmluZyhleHRlbnNpb24pLnJlcGxhY2UoL15cXC4vLCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAoIWV4dCB8fCBleHQgPT09ICd6aXAnIHx8IHNlZW4uaGFzKGV4dCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBzZWVuLmFkZChleHQpO1xuICAgICAgZXh0ZW5zaW9ucy5wdXNoKGV4dCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBleHRlbnNpb25zO1xufVxuXG5mdW5jdGlvbiBjb21wYW5pb25GaWxlc0ZvckFyY2hpdmUoZXhwYW5zaW9uOiBaaXBBcmNoaXZlRXhwYW5zaW9uLCBleGlzdGluZz86IEZpbGVbXSk6IEZpbGVbXSB7XG4gIGNvbnN0IGV4dHJhY3RlZCA9XG4gICAgZXhwYW5zaW9uLmtpbmQgPT09ICdzaGFwZWZpbGUnXG4gICAgICA/IFtleHBhbnNpb24uc2hhcGVmaWxlLCAuLi5leHBhbnNpb24uY29tcGFuaW9uc11cbiAgICAgIDogWy4uLmV4cGFuc2lvbi5kYXRhc2V0cywgLi4uZXhwYW5zaW9uLmNvbXBhbmlvbnNdO1xuICByZXR1cm4gWy4uLmV4dHJhY3RlZCwgLi4uKGV4aXN0aW5nIHx8IFtdKV07XG59XG5cbmZ1bmN0aW9uIHdpdGhvdXRGaWxlTG9hZGluZ1Byb2dyZXNzRW50cnkoXG4gIHByb2dyZXNzOiBWaXNTdGF0ZVsnZmlsZUxvYWRpbmdQcm9ncmVzcyddLFxuICBmaWxlTmFtZTogc3RyaW5nXG4pOiBWaXNTdGF0ZVsnZmlsZUxvYWRpbmdQcm9ncmVzcyddIHtcbiAgaWYgKCFwcm9ncmVzcyB8fCAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHByb2dyZXNzLCBmaWxlTmFtZSkpIHtcbiAgICByZXR1cm4gcHJvZ3Jlc3M7XG4gIH1cbiAgY29uc3QgbmV4dCA9IHsuLi5wcm9ncmVzc307XG4gIGRlbGV0ZSBuZXh0W2ZpbGVOYW1lXTtcbiAgcmV0dXJuIG5leHQ7XG59XG5cbi8qKlxuICogQXBwbHkgYW4gdW5wYWNrZWQgemlwLiBPbmUgc2hhcGVmaWxlIGtlZXBzIHRoZSBhcmNoaXZlIG5hbWUuIEFueSBvdGhlclxuICogbWl4IGlzIHF1ZXVlZCBhcyBvbmUgZGF0YXNldCBwZXIgc3VwcG9ydGVkIG1lbWJlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4cGFuZFppcEFyY2hpdmVTdWNjZXNzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5FeHBhbmRaaXBBcmNoaXZlU3VjY2Vzc0FjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBsb2FkaW5nID0gc3RhdGUuZmlsZUxvYWRpbmc7XG4gIGlmICghbG9hZGluZyB8fCBsb2FkaW5nLmxvYWRJZCAhPT0gYWN0aW9uLmxvYWRJZCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7YXJjaGl2ZU5hbWUsIGV4cGFuc2lvbn0gPSBhY3Rpb247XG4gIGNvbnN0IGNvbXBhbmlvbkZpbGVzID0gY29tcGFuaW9uRmlsZXNGb3JBcmNoaXZlKGV4cGFuc2lvbiwgbG9hZGluZy5jb21wYW5pb25GaWxlcyk7XG5cbiAgaWYgKGV4cGFuc2lvbi5raW5kID09PSAnc2hhcGVmaWxlJykge1xuICAgIGNvbnN0IG5leHRTdGF0ZSA9IHBpY2tfKCdmaWxlTG9hZGluZycpKG1lcmdlXyh7Y29tcGFuaW9uRmlsZXN9KSkoc3RhdGUpO1xuICAgIGNvbnN0IHtsb2FkZXJzLCBsb2FkT3B0aW9uc30gPSBzdGF0ZTtcbiAgICByZXR1cm4gd2l0aFRhc2soXG4gICAgICBuZXh0U3RhdGUsXG4gICAgICBtYWtlTG9hZEZpbGVUYXNrKFxuICAgICAgICBleHBhbnNpb24uc2hhcGVmaWxlLFxuICAgICAgICBuZXh0U3RhdGUuZmlsZUxvYWRpbmcgJiYgbmV4dFN0YXRlLmZpbGVMb2FkaW5nLmZpbGVDYWNoZSxcbiAgICAgICAgbG9hZGVycyxcbiAgICAgICAgbG9hZE9wdGlvbnMsXG4gICAgICAgIGNvbXBhbmlvbkZpbGVzLFxuICAgICAgICBsb2FkaW5nLm9wdGlvbnMsXG4gICAgICAgIGFyY2hpdmVOYW1lXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGRhdGFzZXRzID0gZXhwYW5zaW9uLmRhdGFzZXRzO1xuICBjb25zdCBmaWxlc1RvTG9hZCA9IFsuLi5kYXRhc2V0cywgLi4uQXJyYXkuZnJvbShsb2FkaW5nLmZpbGVzVG9Mb2FkKV07XG4gIGNvbnN0IGZpbGVMb2FkaW5nUHJvZ3Jlc3MgPSBkYXRhc2V0cy5yZWR1Y2UoXG4gICAgKGFjY3UsIGZpbGUsIGluZGV4KSA9PiBtZXJnZV8oaW5pdGlhbEZpbGVMb2FkaW5nUHJvZ3Jlc3MoZmlsZSwgaW5kZXgpKShhY2N1KSxcbiAgICB3aXRob3V0RmlsZUxvYWRpbmdQcm9ncmVzc0VudHJ5KHN0YXRlLmZpbGVMb2FkaW5nUHJvZ3Jlc3MsIGFyY2hpdmVOYW1lKVxuICApO1xuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsZUxvYWRpbmdQcm9ncmVzcyxcbiAgICBmaWxlTG9hZGluZzoge1xuICAgICAgLi4ubG9hZGluZyxcbiAgICAgIGZpbGVzVG9Mb2FkLFxuICAgICAgY29tcGFuaW9uRmlsZXNcbiAgICB9XG4gIH07XG4gIHJldHVybiBsb2FkTmV4dEZpbGVVcGRhdGVyKG5leHRTdGF0ZSwge2xvYWRJZDogYWN0aW9uLmxvYWRJZH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZUxvYWRGaWxlVGFzayhcbiAgZmlsZSxcbiAgZmlsZUNhY2hlLFxuICBsb2FkZXJzOiBMb2FkZXJbXSA9IFtdLFxuICBsb2FkT3B0aW9ucyA9IHt9LFxuICBjb21wYW5pb25GaWxlcz86IEZpbGVbXSxcbiAgYWRkRGF0YU9wdGlvbnM/OiBWaXNTdGF0ZUFjdGlvbnMuTG9hZEZpbGVzT3B0aW9ucyxcbiAgZmlsZU5hbWU/OiBzdHJpbmdcbikge1xuICBjb25zdCBkaXNwbGF5TmFtZSA9IGZpbGVOYW1lIHx8IGZpbGUubmFtZTtcbiAgcmV0dXJuIExPQURfRklMRV9UQVNLKHtcbiAgICBmaWxlLFxuICAgIGZpbGVDYWNoZSxcbiAgICBsb2FkZXJzLFxuICAgIGxvYWRPcHRpb25zLFxuICAgIGNvbXBhbmlvbkZpbGVzLFxuICAgIC4uLihmaWxlTmFtZSA/IHtmaWxlTmFtZX0gOiB7fSlcbiAgfSkuYmltYXAoXG4gICAgLy8gcHJldHRpZXIgaWdub3JlXG4gICAgLy8gc3VjY2Vzc1xuICAgIGdlbiA9PlxuICAgICAgbmV4dEZpbGVCYXRjaCh7XG4gICAgICAgIGdlbixcbiAgICAgICAgZmlsZU5hbWU6IGRpc3BsYXlOYW1lLFxuICAgICAgICBvbkZpbmlzaDogcmVzdWx0ID0+XG4gICAgICAgICAgcHJvY2Vzc0ZpbGVDb250ZW50KHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IHJlc3VsdCxcbiAgICAgICAgICAgIGZpbGVDYWNoZVxuICAgICAgICAgIH0pLFxuICAgICAgICAuLi4oYWRkRGF0YU9wdGlvbnMgPyB7b3B0aW9uczogYWRkRGF0YU9wdGlvbnN9IDoge30pXG4gICAgICB9KSxcblxuICAgIC8vIGVycm9yXG4gICAgZXJyID0+IGxvYWRGaWxlc0VycihkaXNwbGF5TmFtZSwgZXJyKVxuICApO1xufVxuXG4vKipcbiAqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0ZpbGVDb250ZW50VXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Qcm9jZXNzRmlsZUNvbnRlbnRVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtjb250ZW50LCBmaWxlQ2FjaGV9ID0gYWN0aW9uLnBheWxvYWQ7XG5cbiAgY29uc3Qgc3RhdGVXaXRoUHJvZ3Jlc3MgPSB1cGRhdGVGaWxlTG9hZGluZ1Byb2dyZXNzVXBkYXRlcihzdGF0ZSwge1xuICAgIGZpbGVOYW1lOiBjb250ZW50LmZpbGVOYW1lLFxuICAgIHByb2dyZXNzOiB7cGVyY2VudDogMSwgbWVzc2FnZTogJ3Byb2Nlc3NpbmcuLi4nfVxuICB9KTtcblxuICByZXR1cm4gd2l0aFRhc2soXG4gICAgc3RhdGVXaXRoUHJvZ3Jlc3MsXG4gICAgUFJPQ0VTU19GSUxFX0RBVEEoe2NvbnRlbnQsIGZpbGVDYWNoZX0pLmJpbWFwKFxuICAgICAgcmVzdWx0ID0+IGxvYWRGaWxlU3RlcFN1Y2Nlc3Moe2ZpbGVOYW1lOiBjb250ZW50LmZpbGVOYW1lLCBmaWxlQ2FjaGU6IHJlc3VsdH0pLFxuICAgICAgZXJyID0+IGxvYWRGaWxlc0Vycihjb250ZW50LmZpbGVOYW1lLCBlcnIpXG4gICAgKVxuICApO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQcm9ncmVzcyhwcmV2UHJvZ3Jlc3MgPSB7fSwgcHJvZ3Jlc3MpIHtcbiAgLy8gVGhpcyBoYXBwZW5zIHdoZW4gcmVjZWl2aW5nIHF1ZXJ5IG1ldGFkYXRhIG9yIG90aGVyIGNhc2VzIHdlIGRvbid0XG4gIC8vIGhhdmUgYW4gdXBkYXRlIGZvciB0aGUgdXNlci5cbiAgaWYgKCFwcm9ncmVzcyB8fCAhcHJvZ3Jlc3MucGVyY2VudCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcGVyY2VudDogcHJvZ3Jlc3MucGVyY2VudFxuICB9O1xufVxuXG4vKipcbiAqIGdldHMgY2FsbGVkIHdpdGggcGF5bG9hZCA9IEFzeW5jR2VuZXJhdG9yPD8/Pz5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBuZXh0RmlsZUJhdGNoVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7XG4gICAgcGF5bG9hZDoge2dlbiwgZmlsZU5hbWUsIHByb2dyZXNzLCBhY2N1bXVsYXRlZCwgb25GaW5pc2gsIG9wdGlvbnN9XG4gIH06IFZpc1N0YXRlQWN0aW9ucy5OZXh0RmlsZUJhdGNoVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICBjb25zdCBzdGF0ZVdpdGhQcm9ncmVzcyA9IHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7XG4gICAgZmlsZU5hbWUsXG4gICAgcHJvZ3Jlc3M6IHBhcnNlUHJvZ3Jlc3Moc3RhdGUuZmlsZUxvYWRpbmdQcm9ncmVzc1tmaWxlTmFtZV0sIHByb2dyZXNzKVxuICB9KTtcblxuICBjb25zdCBkZWZlckFkZFRvTWFwID0gQm9vbGVhbihvcHRpb25zPy5kZWZlckFkZFRvTWFwKTtcblxuICByZXR1cm4gd2l0aFRhc2soc3RhdGVXaXRoUHJvZ3Jlc3MsIFtcbiAgICAuLi4oZ2V0QXBwbGljYXRpb25Db25maWcoKS51c2VBcnJvd1Byb2dyZXNzaXZlTG9hZGluZyAmJlxuICAgICFkZWZlckFkZFRvTWFwICYmXG4gICAgZmlsZU5hbWUuZW5kc1dpdGgoJ2Fycm93JykgJiZcbiAgICBhY2N1bXVsYXRlZD8uZGF0YT8ubGVuZ3RoID4gMFxuICAgICAgPyBbXG4gICAgICAgICAgLy8gU2tpcCBjb21wYWN0aW9uIHdoaWxlIGJhdGNoZXMgYXJlIHN0aWxsIGFycml2aW5nLiBUaGUgY29tcGxldGVkXG4gICAgICAgICAgLy8gZmlsZSBpcyBjb21wYWN0ZWQgb25jZSBpbiBwcm9jZXNzRmlsZUNvbnRlbnQuXG4gICAgICAgICAgUFJPQ0VTU19GSUxFX0RBVEEoe1xuICAgICAgICAgICAgY29udGVudDogey4uLmFjY3VtdWxhdGVkLCBza2lwQXJyb3dDb21wYWN0OiB0cnVlfSxcbiAgICAgICAgICAgIGZpbGVDYWNoZTogW11cbiAgICAgICAgICB9KS5iaW1hcChcbiAgICAgICAgICAgIHJlc3VsdCA9PiAob3B0aW9ucyA/IGxvYWRGaWxlc1N1Y2Nlc3MocmVzdWx0LCBvcHRpb25zKSA6IGxvYWRGaWxlc1N1Y2Nlc3MocmVzdWx0KSksXG4gICAgICAgICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGVOYW1lLCBlcnIpXG4gICAgICAgICAgKVxuICAgICAgICBdXG4gICAgICA6IFtdKSxcbiAgICBVTldSQVBfVEFTSyhnZW4ubmV4dCgpKS5iaW1hcChcbiAgICAgICh7dmFsdWUsIGRvbmV9KSA9PiB7XG4gICAgICAgIHJldHVybiBkb25lXG4gICAgICAgICAgPyBvbkZpbmlzaChhY2N1bXVsYXRlZClcbiAgICAgICAgICA6IG5leHRGaWxlQmF0Y2goe1xuICAgICAgICAgICAgICBnZW4sXG4gICAgICAgICAgICAgIGZpbGVOYW1lLFxuICAgICAgICAgICAgICBwcm9ncmVzczogdmFsdWUucHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIGFjY3VtdWxhdGVkOiB2YWx1ZSxcbiAgICAgICAgICAgICAgb25GaW5pc2gsXG4gICAgICAgICAgICAgIC4uLihvcHRpb25zID8ge29wdGlvbnN9IDoge30pXG4gICAgICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBlcnIgPT4gbG9hZEZpbGVzRXJyKGZpbGVOYW1lLCBlcnIpXG4gICAgKVxuICBdKTtcbn07XG5cbi8qKlxuICogVHJpZ2dlciBsb2FkaW5nIGZpbGUgZXJyb3JcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbi8qKlxuICogRHJvcCBmaWxlcyB3YWl0aW5nIG9uIHRoZSBBZGQgRGF0YSBidXR0b24gYW5kIGFib3J0IGFuIGluLXByb2dyZXNzIG1vZGFsIGxvYWQuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgY2xlYXJTdGFnZWRMb2FkZWRGaWxlc1VwZGF0ZXIgPSAoc3RhdGU6IFZpc1N0YXRlKTogVmlzU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGZpbGVMb2FkaW5nOiBmYWxzZSxcbiAgZmlsZUxvYWRpbmdQcm9ncmVzczoge30sXG4gIHN0YWdlZFRvQWRkOiBudWxsXG59KTtcblxuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc0VyclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2Vycm9yLCBmaWxlTmFtZSwgbG9hZElkOiBlcnJvckxvYWRJZH06IFZpc1N0YXRlQWN0aW9ucy5Mb2FkRmlsZXNFcnJVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGlmICghc3RhdGUuZmlsZUxvYWRpbmcgfHwgKGVycm9yTG9hZElkICE9IG51bGwgJiYgc3RhdGUuZmlsZUxvYWRpbmcubG9hZElkICE9PSBlcnJvckxvYWRJZCkpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gdXBkYXRlIHVpIHdpdGggZXJyb3IgbWVzc2FnZVxuICBDb25zb2xlLndhcm4oZXJyb3IpO1xuICBjb25zdCBsb2FkSWQgPSBzdGF0ZS5maWxlTG9hZGluZy5sb2FkSWQ7XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gdXBkYXRlRmlsZUxvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoc3RhdGUsIHtcbiAgICBmaWxlTmFtZSxcbiAgICBwcm9ncmVzczoge2Vycm9yfVxuICB9KTtcblxuICAvLyBTYW1lIHBhdXNlIGFzIGEgc3VjY2Vzc2Z1bCBmaWxlLiBSZS1jaGVjayB0aGlzIGxvYWQncyBxdWV1ZSB3aGVuIGl0IGVuZHMuXG4gIHJldHVybiB3aXRoVGFzayhcbiAgICBuZXh0U3RhdGUsXG4gICAgREVMQVlfVEFTSygyMDApLm1hcCgoKSA9PiBsb2FkTmV4dEZpbGUobG9hZElkKSlcbiAgKTtcbn07XG5cbi8qKlxuICogV2hlbiBzZWxlY3QgZGF0YXNldCBmb3IgZXhwb3J0LCBhcHBseSBjcHUgZmlsdGVyIHRvIHNlbGVjdGVkIGRhdGFzZXRcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhcHBseUNQVUZpbHRlclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZH06IFZpc1N0YXRlQWN0aW9ucy5BcHBseUNQVUZpbHRlclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgLy8gYXBwbHkgY3B1RmlsdGVyXG4gIGNvbnN0IGRhdGFJZHMgPSB0b0FycmF5KGRhdGFJZCk7XG5cbiAgcmV0dXJuIGRhdGFJZHMucmVkdWNlKChhY2N1LCBpZCkgPT4gZmlsdGVyRGF0YXNldENQVShhY2N1LCBpZCksIHN0YXRlKTtcbn07XG5cbi8qKlxuICogVXNlciBpbnB1dCB0byB1cGRhdGUgdGhlIGluZm8gb2YgdGhlIG1hcFxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldE1hcEluZm9VcGRhdGVyID0gKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlNldE1hcEluZm9VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbWFwSW5mbzoge1xuICAgIC4uLnN0YXRlLm1hcEluZm8sXG4gICAgLi4uYWN0aW9uLmluZm9cbiAgfVxufSk7XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byB1cGRhdGUgQWxsIGxheWVyIGRvbWFpbiBhbmQgbGF5ZXIgZGF0YSBvZiBzdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRGVmYXVsdExheWVycyhcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICBkYXRhc2V0czogRGF0YXNldHNcbik6IHtzdGF0ZTogVmlzU3RhdGU7IG5ld0xheWVyczogTGF5ZXJbXX0ge1xuICBjb25zdCBlbXB0eTogTGF5ZXJbXSA9IFtdO1xuICBjb25zdCBkZWZhdWx0TGF5ZXJzID0gT2JqZWN0LnZhbHVlcyhkYXRhc2V0cykucmVkdWNlKChhY2N1OiBMYXllcltdLCBkYXRhc2V0KSA9PiB7XG4gICAgY29uc3QgZm91bmRMYXllcnMgPSBmaW5kRGVmYXVsdExheWVyKGRhdGFzZXQsIHN0YXRlLmxheWVyQ2xhc3Nlcyk7XG4gICAgcmV0dXJuIGZvdW5kTGF5ZXJzICYmIGZvdW5kTGF5ZXJzLmxlbmd0aCA/IGFjY3UuY29uY2F0KGZvdW5kTGF5ZXJzKSA6IGFjY3U7XG4gIH0sIGVtcHR5KTtcblxuICByZXR1cm4ge1xuICAgIHN0YXRlOiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxheWVyczogWy4uLnN0YXRlLmxheWVycywgLi4uZGVmYXVsdExheWVyc10sXG4gICAgICBsYXllck9yZGVyOiBbXG4gICAgICAgIC8vIHB1dCBuZXcgbGF5ZXJzIG9uIHRvcCBvZiBvbGQgb25lcyBpbiByZXZlcnNlXG4gICAgICAgIC4uLmdldExheWVyT3JkZXJGcm9tTGF5ZXJzKGRlZmF1bHRMYXllcnMpLFxuICAgICAgICAuLi5zdGF0ZS5sYXllck9yZGVyXG4gICAgICBdXG4gICAgfSxcbiAgICBuZXdMYXllcnM6IGRlZmF1bHRMYXllcnNcbiAgfTtcbn1cblxuLyoqXG4gKiBoZWxwZXIgZnVuY3Rpb24gdG8gZmluZCBkZWZhdWx0IHRvb2x0aXBzXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhc2V0XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZERlZmF1bHRUb29sdGlwcyhzdGF0ZSwgZGF0YXNldCkge1xuICBjb25zdCB0b29sdGlwRmllbGRzID0gZmluZEZpZWxkc1RvU2hvdyh7XG4gICAgLi4uZGF0YXNldCxcbiAgICBtYXhEZWZhdWx0VG9vbHRpcHM6IHN0YXRlLm1heERlZmF1bHRUb29sdGlwc1xuICB9KTtcbiAgY29uc3QgbWVyZ2VkID0ge1xuICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuY29uZmlnLmZpZWxkc1RvU2hvdyxcbiAgICAuLi50b29sdGlwRmllbGRzXG4gIH07XG5cbiAgcmV0dXJuIHNldChbJ2ludGVyYWN0aW9uQ29uZmlnJywgJ3Rvb2x0aXAnLCAnY29uZmlnJywgJ2ZpZWxkc1RvU2hvdyddLCBtZXJnZWQsIHN0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxGaWxlTG9hZGluZ1Byb2dyZXNzKGZpbGUsIGluZGV4KSB7XG4gIGNvbnN0IGZpbGVOYW1lID0gZmlsZS5uYW1lIHx8IGBVbnRpdGxlZCBGaWxlICR7aW5kZXh9YDtcbiAgcmV0dXJuIHtcbiAgICBbZmlsZU5hbWVdOiB7XG4gICAgICAvLyBwZXJjZW50IG9mIGN1cnJlbnQgZmlsZVxuICAgICAgcGVyY2VudDogMCxcbiAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgZmlsZU5hbWUsXG4gICAgICBlcnJvcjogbnVsbFxuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUZpbGVMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyKHN0YXRlLCB7ZmlsZU5hbWUsIHByb2dyZXNzfSkge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gIHJldHVybiBwaWNrXygnZmlsZUxvYWRpbmdQcm9ncmVzcycpKHBpY2tfKGZpbGVOYW1lKShtZXJnZV8ocHJvZ3Jlc3MpKSkoc3RhdGUpO1xufVxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gdXBkYXRlIGxheWVyIGRvbWFpbnMgZm9yIGFuIGFycmF5IG9mIGRhdGFzZXRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVBbGxMYXllckRvbWFpbkRhdGE8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGRhdGFJZDogc3RyaW5nIHwgc3RyaW5nW10sXG4gIHVwZGF0ZWRGaWx0ZXI/OiBGaWx0ZXJcbik6IFMge1xuICBjb25zdCBkYXRhSWRzID0gdHlwZW9mIGRhdGFJZCA9PT0gJ3N0cmluZycgPyBbZGF0YUlkXSA6IGRhdGFJZDtcbiAgY29uc3QgbmV3TGF5ZXJzOiBMYXllcltdID0gW107XG4gIGNvbnN0IG5ld0xheWVyRGF0YTogYW55W10gPSBbXTtcblxuICBzdGF0ZS5sYXllcnMuZm9yRWFjaCgob2xkTGF5ZXIsIGkpID0+IHtcbiAgICBpZiAob2xkTGF5ZXIuY29uZmlnLmRhdGFJZCAmJiBkYXRhSWRzLmluY2x1ZGVzKG9sZExheWVyLmNvbmZpZy5kYXRhSWQpKSB7XG4gICAgICAvLyBObyBuZWVkIHRvIHJlY2FsY3VsYXRlIGxheWVyIGRvbWFpbiBpZiBmaWx0ZXIgaGFzIGZpeGVkIGRvbWFpblxuICAgICAgY29uc3QgbmV3TGF5ZXIgPVxuICAgICAgICB1cGRhdGVkRmlsdGVyICYmIHVwZGF0ZWRGaWx0ZXIuZml4ZWREb21haW5cbiAgICAgICAgICA/IG9sZExheWVyXG4gICAgICAgICAgOiBvbGRMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cywgdXBkYXRlZEZpbHRlcik7XG5cbiAgICAgIGNvbnN0IHtsYXllckRhdGEsIGxheWVyfSA9IGNhbGN1bGF0ZUxheWVyRGF0YShuZXdMYXllciwgc3RhdGUsIHN0YXRlLmxheWVyRGF0YVtpXSk7XG5cbiAgICAgIG5ld0xheWVycy5wdXNoKGxheWVyKTtcbiAgICAgIG5ld0xheWVyRGF0YS5wdXNoKGxheWVyRGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0xheWVycy5wdXNoKG9sZExheWVyKTtcbiAgICAgIG5ld0xheWVyRGF0YS5wdXNoKHN0YXRlLmxheWVyRGF0YVtpXSk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IG5ld0xheWVycyxcbiAgICBsYXllckRhdGE6IG5ld0xheWVyRGF0YVxuICB9O1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUFuaW1hdGlvbkRvbWFpbjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTKTogUyB7XG4gIC8vIG1lcmdlIGFsbCBhbmltYXRhYmxlIGxheWVyIGRvbWFpbiBhbmQgdXBkYXRlIGdsb2JhbCBjb25maWdcbiAgY29uc3QgYW5pbWF0YWJsZUxheWVycyA9IGdldEFuaW1hdGFibGVWaXNpYmxlTGF5ZXJzKHN0YXRlLmxheWVycyk7XG5cbiAgaWYgKCFhbmltYXRhYmxlTGF5ZXJzLmxlbmd0aCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICAgIGRvbWFpbjogbnVsbCxcbiAgICAgICAgaXNBbmltYXRpbmc6IGZhbHNlLFxuICAgICAgICB0aW1lU3RlcHM6IG51bGwsXG4gICAgICAgIGRlZmF1bHRUaW1lRm9ybWF0OiBudWxsXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGxheWVyRG9tYWlucyA9IGFuaW1hdGFibGVMYXllcnMubWFwKGwgPT4gbC5jb25maWcuYW5pbWF0aW9uLmRvbWFpbiB8fCBbXSk7XG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgbWVyZ2VkRG9tYWluID0gbWVyZ2VUaW1lRG9tYWlucyhsYXllckRvbWFpbnMpO1xuICBjb25zdCBkZWZhdWx0VGltZUZvcm1hdCA9IGdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlcihtZXJnZWREb21haW4pO1xuXG4gIC8vIG1lcmdlIHRpbWVTdGVwc1xuICBsZXQgbWVyZ2VkVGltZVN0ZXBzOiBudW1iZXJbXSB8IG51bGwgPSB1bmlxPG51bWJlcj4oXG4gICAgYW5pbWF0YWJsZUxheWVycy5yZWR1Y2UoKGFjY3UsIGxheWVyKSA9PiB7XG4gICAgICBhY2N1LnB1c2goLi4uKGxheWVyLmNvbmZpZy5hbmltYXRpb24udGltZVN0ZXBzIHx8IFtdKSk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9LCBbXSlcbiAgKS5zb3J0KCk7XG5cbiAgbWVyZ2VkVGltZVN0ZXBzID0gbWVyZ2VkVGltZVN0ZXBzLmxlbmd0aCA/IG1lcmdlZFRpbWVTdGVwcyA6IG51bGw7XG5cbiAgLy8gVE9ETzogYmV0dGVyIGhhbmRsaW5nIG9mIGR1cmF0aW9uIGNhbGN1bGF0aW9uXG4gIGNvbnN0IGR1cmF0aW9uID0gbWVyZ2VkVGltZVN0ZXBzXG4gICAgPyAoQkFTRV9TUEVFRCAqICgxMDAwIC8gRlBTKSkgLyBtZXJnZWRUaW1lU3RlcHMubGVuZ3RoIC8gKHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5zcGVlZCB8fCAxKVxuICAgIDogbnVsbDtcblxuICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICBkb21haW46IG1lcmdlZERvbWFpbixcbiAgICAgIGRlZmF1bHRUaW1lRm9ybWF0LFxuICAgICAgZHVyYXRpb24sXG4gICAgICB0aW1lU3RlcHM6IG1lcmdlZFRpbWVTdGVwc1xuICAgIH1cbiAgfTtcblxuICAvLyByZXNldCBjdXJyZW50VGltZSBiYXNlZCBvbiBuZXcgZG9tYWluXG4gIGNvbnN0IHN5bmNlZEZpbHRlciA9IHN0YXRlLmZpbHRlcnM/LmZpbmQoZiA9PiAoZiBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN5bmNlZFdpdGhMYXllclRpbWVsaW5lKSBhc1xuICAgIHwgVGltZVJhbmdlRmlsdGVyXG4gICAgfCB1bmRlZmluZWQ7XG5cbiAgLy8gaWYgc3luY2VkIGZpbHRlciBleGlzdCB3ZWUgbmVlZCB0byBtZXJnZSBhbmltYXRpb25Db25maWcgYW5kIGZpbHRlciBkb21haW5zXG4gIC8vIGFuZCB2YWxpZGF0ZSB0aGUgY3VycmVudCB0aW1lIGFnYWluc3QgdGhlIG5ldyBtZXJnZWQgZG9tYWluXG4gIGNvbnN0IG5ld0FuaW1hdGlvbkRvbWFpbiA9IHN5bmNlZEZpbHRlclxuICAgID8gbWVyZ2VUaW1lRG9tYWlucyhbbWVyZ2VkRG9tYWluLCBzeW5jZWRGaWx0ZXIuZG9tYWluXSlcbiAgICA6IG1lcmdlZERvbWFpbjtcbiAgY29uc3QgY3VycmVudFRpbWUgPSBpc0luUmFuZ2Uoc3RhdGUuYW5pbWF0aW9uQ29uZmlnLmN1cnJlbnRUaW1lLCBuZXdBbmltYXRpb25Eb21haW4pXG4gICAgPyBzdGF0ZS5hbmltYXRpb25Db25maWcuY3VycmVudFRpbWVcbiAgICA6IG5ld0FuaW1hdGlvbkRvbWFpblswXTtcblxuICBpZiAoY3VycmVudFRpbWUgIT09IHN0YXRlLmFuaW1hdGlvbkNvbmZpZy5jdXJyZW50VGltZSkge1xuICAgIC8vIGlmIGN1cnJlbnRUaW1lIGNoYW5nZWQsIG5lZWQgdG8gY2FsbCBhbmltYXRpb25UaW1lVXBkYXRlciB0byByZSBjYWxsIGZvcm1hdExheWVyRGF0YVxuICAgIHJldHVybiBzZXRMYXllckFuaW1hdGlvblRpbWVVcGRhdGVyKG5leHRTdGF0ZSwge3ZhbHVlOiBjdXJyZW50VGltZX0pO1xuICB9XG5cbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgdGhlIHN0YXR1cyBvZiB0aGUgZWRpdG9yXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgY29uc3Qgc2V0RWRpdG9yTW9kZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge21vZGV9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RWRpdG9yTW9kZVVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlID0+IHtcbiAgY29uc3Qgc2tldGNoZXNFbmFibGVkID0gZ2V0QXBwbGljYXRpb25Db25maWcoKS5lbmFibGVEcmF3T25NYXBTa2V0Y2hlcztcbiAgaWYgKFxuICAgICFza2V0Y2hlc0VuYWJsZWQgJiZcbiAgICAobW9kZSA9PT0gRURJVE9SX01PREVTLkRSQVdfUE9JTlQgfHwgbW9kZSA9PT0gRURJVE9SX01PREVTLkRSQVdfTElORVNUUklORylcbiAgKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIG1vZGUsXG4gICAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGxcbiAgICB9XG4gIH07XG59O1xuXG4vLyBjb25zdCBmZWF0dXJlVG9GaWx0ZXJWYWx1ZSA9IChmZWF0dXJlKSA9PiAoey4uLmZlYXR1cmUsIGlkOiBmZWF0dXJlLmlkfSk7XG4vKipcbiAqIFVwZGF0ZSBlZGl0b3IgZmVhdHVyZXNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGZWF0dXJlc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2ZlYXR1cmVzID0gW119OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RmVhdHVyZXNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGxhc3RGZWF0dXJlID0gZmVhdHVyZXMubGVuZ3RoICYmIGZlYXR1cmVzW2ZlYXR1cmVzLmxlbmd0aCAtIDFdO1xuXG4gIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgLy8gb25seSBzYXZlIG5vbmUgZmlsdGVyIGZlYXR1cmVzIHRvIGVkaXRvclxuICAgICAgZmVhdHVyZXM6IGZlYXR1cmVzLmZpbHRlcihmID0+ICFnZXRGaWx0ZXJJZEluRmVhdHVyZShmKSksXG4gICAgICBtb2RlOlxuICAgICAgICBsYXN0RmVhdHVyZSAmJiBsYXN0RmVhdHVyZS5wcm9wZXJ0aWVzPy5pc0Nsb3NlZFxuICAgICAgICAgID8gbGFzdEZlYXR1cmUucHJvcGVydGllcz8uc2hhcGUgPT09ICdSZWN0YW5nbGUnXG4gICAgICAgICAgICA/IHN0YXRlLmVkaXRvci5tb2RlXG4gICAgICAgICAgICA6IEVESVRPUl9NT0RFUy5FRElUXG4gICAgICAgICAgOiBzdGF0ZS5lZGl0b3IubW9kZVxuICAgIH1cbiAgfTtcblxuICAvLyBSZXRyaWV2ZSBleGlzdGluZyBmZWF0dXJlXG4gIGNvbnN0IHtzZWxlY3RlZEZlYXR1cmV9ID0gc3RhdGUuZWRpdG9yO1xuXG4gIC8vIElmIG5vIGZlYXR1cmUgaXMgc2VsZWN0ZWQgd2UgY2FuIHNpbXBseSByZXR1cm4gc2luY2Ugbm8gb3BlcmF0aW9uc1xuICBpZiAoIXNlbGVjdGVkRmVhdHVyZSkge1xuICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgfVxuXG4gIC8vIFRPRE86IGNoZWNrIGlmIHRoZSBmZWF0dXJlIGhhcyBjaGFuZ2VkXG4gIGNvbnN0IGZlYXR1cmUgPSBmZWF0dXJlcy5maW5kKGYgPT4gZi5pZCA9PT0gc2VsZWN0ZWRGZWF0dXJlLmlkKTtcblxuICAvLyBpZiBmZWF0dXJlIGlzIHBhcnQgb2YgYSBmaWx0ZXJcbiAgY29uc3QgZmlsdGVySWQgPSBmZWF0dXJlICYmIGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpO1xuICBpZiAoZmlsdGVySWQgJiYgZmVhdHVyZSkge1xuICAgIC8vIGFkZCBiYm94IGZvciBwb2x5Z29uIGZpbHRlciB0byBzcGVlZCB1cCBmaWx0ZXJpbmdcbiAgICBpZiAoZmVhdHVyZS5wcm9wZXJ0aWVzKSBmZWF0dXJlLnByb3BlcnRpZXMuYmJveCA9IGJib3goZmVhdHVyZSBhcyB1bmtub3duIGFzIEFsbEdlb0pTT04pO1xuICAgIGNvbnN0IGZlYXR1cmVWYWx1ZSA9IGZlYXR1cmVUb0ZpbHRlclZhbHVlKGZlYXR1cmUsIGZpbHRlcklkKTtcbiAgICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmaWwgPT4gZmlsLmlkID09PSBmaWx0ZXJJZCk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKG5ld1N0YXRlLCB7XG4gICAgICBpZHg6IGZpbHRlcklkeCxcbiAgICAgIHByb3A6ICd2YWx1ZScsXG4gICAgICB2YWx1ZTogZmVhdHVyZVZhbHVlXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbmZ1bmN0aW9uIGZpbmRFZGl0b3JGZWF0dXJlKHN0YXRlOiBWaXNTdGF0ZSwgZmVhdHVyZT86IEZlYXR1cmUgfCBudWxsKTogRmVhdHVyZSB8IG51bGwge1xuICBpZiAoIWZlYXR1cmU/LmlkKSB7XG4gICAgcmV0dXJuIGZlYXR1cmUgfHwgbnVsbDtcbiAgfVxuICBpZiAoc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZT8uaWQgPT09IGZlYXR1cmUuaWQpIHtcbiAgICByZXR1cm4gc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZTtcbiAgfVxuICBjb25zdCBmcm9tRWRpdG9yID0gc3RhdGUuZWRpdG9yLmZlYXR1cmVzLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBmZWF0dXJlLmlkKTtcbiAgaWYgKGZyb21FZGl0b3IpIHtcbiAgICByZXR1cm4gZnJvbUVkaXRvcjtcbiAgfVxuICBjb25zdCBmaWx0ZXJJZCA9IGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpO1xuICBpZiAoZmlsdGVySWQpIHtcbiAgICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBmaWx0ZXJJZCk7XG4gICAgaWYgKGZpbHRlcj8udmFsdWUpIHtcbiAgICAgIHJldHVybiBmaWx0ZXIudmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmZWF0dXJlO1xufVxuXG4vKipcbiAqIFNldCB1c2VyLWZhY2luZyBHZW9KU09OIHByb3BlcnRpZXMgb24gYSBza2V0Y2ggb3IgcG9seWdvbi1maWx0ZXIgZmVhdHVyZS5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRFZGl0b3JGZWF0dXJlUHJvcGVydGllc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2ZlYXR1cmUsIHByb3BlcnRpZXN9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0RWRpdG9yRmVhdHVyZVByb3BlcnRpZXNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghZ2V0QXBwbGljYXRpb25Db25maWcoKS5lbmFibGVEcmF3T25NYXBTa2V0Y2hlcykge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHNvdXJjZSA9IGZpbmRFZGl0b3JGZWF0dXJlKHN0YXRlLCBmZWF0dXJlKTtcbiAgaWYgKCFzb3VyY2U/LmlkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV4dEZlYXR1cmUgPSBtZXJnZVVzZXJGZWF0dXJlUHJvcGVydGllcyhzb3VyY2UsIHByb3BlcnRpZXMpO1xuICBjb25zdCBmaWx0ZXJJZCA9IGdldEZpbHRlcklkSW5GZWF0dXJlKG5leHRGZWF0dXJlKTtcbiAgY29uc3QgbmV4dEVkaXRvciA9IHtcbiAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgZmVhdHVyZXM6IGZpbHRlcklkXG4gICAgICA/IHN0YXRlLmVkaXRvci5mZWF0dXJlc1xuICAgICAgOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMubWFwKGl0ZW0gPT4gKGl0ZW0uaWQgPT09IG5leHRGZWF0dXJlLmlkID8gbmV4dEZlYXR1cmUgOiBpdGVtKSksXG4gICAgc2VsZWN0ZWRGZWF0dXJlOlxuICAgICAgc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZT8uaWQgPT09IG5leHRGZWF0dXJlLmlkXG4gICAgICAgID8gbmV4dEZlYXR1cmVcbiAgICAgICAgOiBzdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlXG4gIH07XG5cbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjogbmV4dEVkaXRvclxuICB9O1xuXG4gIGlmICghZmlsdGVySWQpIHtcbiAgICByZXR1cm4gbmV4dFN0YXRlO1xuICB9XG5cbiAgY29uc3QgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSBmaWx0ZXJJZCk7XG4gIGlmIChmaWx0ZXJJZHggPCAwKSB7XG4gICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgfVxuXG4gIHJldHVybiBzZXRGaWx0ZXJVcGRhdGVyKG5leHRTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICd2YWx1ZScsXG4gICAgdmFsdWU6IGZlYXR1cmVUb0ZpbHRlclZhbHVlKG5leHRGZWF0dXJlLCBmaWx0ZXJJZClcbiAgfSk7XG59XG5cbi8qKlxuICogU2V0IHRoZSBjdXJyZW50IHNlbGVjdGVkIGZlYXR1cmVcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldFNlbGVjdGVkRmVhdHVyZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2ZlYXR1cmUsIHNlbGVjdGlvbkNvbnRleHR9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0U2VsZWN0ZWRGZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUgPT4ge1xuICAvLyBhZGQgYmJveCBmb3IgcG9seWdvbiBmaWx0ZXIgdG8gc3BlZWQgdXAgZmlsdGVyaW5nXG4gIGxldCBzZWxlY3RlZEZlYXR1cmUgPSBmZWF0dXJlO1xuICBpZiAoZmVhdHVyZT8ucHJvcGVydGllcykge1xuICAgIHNlbGVjdGVkRmVhdHVyZSA9IHtcbiAgICAgIC4uLmZlYXR1cmUsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIC4uLmZlYXR1cmUucHJvcGVydGllcyxcbiAgICAgICAgYmJveDogYmJveChmZWF0dXJlIGFzIHVua25vd24gYXMgQWxsR2VvSlNPTilcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBzZWxlY3RlZEZlYXR1cmUsXG4gICAgICBzZWxlY3Rpb25Db250ZXh0XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBEZWxldGUgZXhpc3RpbmcgZmVhdHVyZSBmcm9tIGZpbHRlcnNcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxldGVGZWF0dXJlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZmVhdHVyZX06IFZpc1N0YXRlQWN0aW9ucy5EZWxldGVGZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWZlYXR1cmUpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbFxuICAgIH1cbiAgfTtcblxuICBpZiAoZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSkpIHtcbiAgICBjb25zdCBmaWx0ZXJJZHggPSBuZXdTdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGdldEZpbHRlcklkSW5GZWF0dXJlKGZlYXR1cmUpKTtcblxuICAgIHJldHVybiBmaWx0ZXJJZHggPiAtMSA/IHJlbW92ZUZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtpZHg6IGZpbHRlcklkeH0pIDogbmV3U3RhdGU7XG4gIH1cblxuICAvLyBtb2RpZnkgZWRpdG9yIG9iamVjdFxuICBjb25zdCBuZXdFZGl0b3IgPSB7XG4gICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgIGZlYXR1cmVzOiBzdGF0ZS5lZGl0b3IuZmVhdHVyZXMuZmlsdGVyKGYgPT4gZi5pZCAhPT0gZmVhdHVyZS5pZCksXG4gICAgc2VsZWN0ZWRGZWF0dXJlOiBudWxsXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IG5ld0VkaXRvclxuICB9O1xufVxuXG4vKipcbiAqIFRvZ2dsZSBmZWF0dXJlIGFzIGxheWVyIGZpbHRlclxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgcGF5bG9hZDogVmlzU3RhdGVBY3Rpb25zLlNldFBvbHlnb25GaWx0ZXJMYXllclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge2xheWVyLCBmZWF0dXJlfSA9IHBheWxvYWQ7XG4gIGNvbnN0IGZpbHRlcklkID0gZ2V0RmlsdGVySWRJbkZlYXR1cmUoZmVhdHVyZSk7XG5cbiAgLy8gbGV0IG5ld0ZpbHRlciA9IG51bGw7XG4gIGxldCBmaWx0ZXJJZHg7XG4gIGxldCBuZXdMYXllcklkID0gW2xheWVyLmlkXTtcbiAgbGV0IG5ld1N0YXRlID0gc3RhdGU7XG4gIC8vIElmIHBvbHlnb24gZmlsdGVyIGFscmVhZHkgZXhpc3RzLCB3ZSBuZWVkIHRvIGZpbmQgb3V0IGlmIHRoZSBjdXJyZW50IGxheWVyIGlzIGFscmVhZHkgaW5jbHVkZWRcbiAgaWYgKGZpbHRlcklkKSB7XG4gICAgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBmaWx0ZXJJZCk7XG5cbiAgICBpZiAoIXN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSkge1xuICAgICAgLy8gd2hhdCBpZiBmaWx0ZXIgZG9lc24ndCBleGlzdD8uLi4gbm90IHBvc3NpYmxlLlxuICAgICAgLy8gYmVjYXVzZSBmZWF0dXJlcyBpbiB0aGUgZWRpdG9yIGlzIHBhc3NlZCBpbiBmcm9tIGZpbHRlcnMgYW5kIGVkaXRvcnMuXG4gICAgICAvLyBidXQgd2Ugd2lsbCBtb3ZlIHRoaXMgZmVhdHVyZSBiYWNrIHRvIGVkaXRvciBqdXN0IGluIGNhc2VcbiAgICAgIGNvbnN0IG5vbmVGaWx0ZXJGZWF0dXJlID0ge1xuICAgICAgICAuLi5mZWF0dXJlLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgLi4uZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgIGZpbHRlcklkOiBudWxsXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBlZGl0b3I6IHtcbiAgICAgICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICAgICAgZmVhdHVyZXM6IFsuLi5zdGF0ZS5lZGl0b3IuZmVhdHVyZXMsIG5vbmVGaWx0ZXJGZWF0dXJlXSxcbiAgICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IG5vbmVGaWx0ZXJGZWF0dXJlXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGZpbHRlciA9IHN0YXRlLmZpbHRlcnNbZmlsdGVySWR4XTtcbiAgICBjb25zdCB7bGF5ZXJJZCA9IFtdfSA9IGZpbHRlcjtcbiAgICBjb25zdCBpc0xheWVySW5jbHVkZWQgPSBsYXllcklkLmluY2x1ZGVzKGxheWVyLmlkKTtcblxuICAgIG5ld0xheWVySWQgPSBpc0xheWVySW5jbHVkZWRcbiAgICAgID8gLy8gaWYgbGF5ZXIgaXMgaW5jbHVkZWQsIHJlbW92ZSBpdFxuICAgICAgICBsYXllcklkLmZpbHRlcihsID0+IGwgIT09IGxheWVyLmlkKVxuICAgICAgOiBbLi4ubGF5ZXJJZCwgbGF5ZXIuaWRdO1xuXG4gICAgLy8gTGFzdCBsYXllciByZW1vdmVkOiB0dXJuIHRoZSBmaWx0ZXIgcG9seWdvbiBiYWNrIGludG8gYSBza2V0Y2hcbiAgICBpZiAoIW5ld0xheWVySWQubGVuZ3RoKSB7XG4gICAgICBjb25zdCBza2V0Y2hGZWF0dXJlID0gdG9Ta2V0Y2hGZWF0dXJlKGZlYXR1cmUpO1xuICAgICAgY29uc3Qgc3RhdGVXaXRob3V0RmlsdGVyID0gcmVtb3ZlRmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge2lkeDogZmlsdGVySWR4fSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZVdpdGhvdXRGaWx0ZXIsXG4gICAgICAgIGVkaXRvcjoge1xuICAgICAgICAgIC4uLnN0YXRlV2l0aG91dEZpbHRlci5lZGl0b3IsXG4gICAgICAgICAgZmVhdHVyZXM6IFsuLi5zdGF0ZVdpdGhvdXRGaWx0ZXIuZWRpdG9yLmZlYXR1cmVzLCBza2V0Y2hGZWF0dXJlXSxcbiAgICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IHNrZXRjaEZlYXR1cmVcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gaWYgd2UgaGF2ZW4ndCBjcmVhdGUgdGhlIHBvbHlnb24gZmlsdGVyLCBjcmVhdGUgaXRcbiAgICBjb25zdCBuZXdGaWx0ZXIgPSBnZW5lcmF0ZVBvbHlnb25GaWx0ZXIoW10sIGZlYXR1cmUpO1xuICAgIGZpbHRlcklkeCA9IHN0YXRlLmZpbHRlcnMubGVuZ3RoO1xuXG4gICAgLy8gYWRkIGZlYXR1cmUsIHJlbW92ZSBmZWF0dXJlIGZyb20gZWlkdG9yXG4gICAgbmV3U3RhdGUgPSB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGZpbHRlcnM6IFsuLi5zdGF0ZS5maWx0ZXJzLCBuZXdGaWx0ZXJdLFxuICAgICAgZWRpdG9yOiB7XG4gICAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgICAgZmVhdHVyZXM6IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5maWx0ZXIoZiA9PiBmLmlkICE9PSBmZWF0dXJlLmlkKSxcbiAgICAgICAgc2VsZWN0ZWRGZWF0dXJlOiBuZXdGaWx0ZXIudmFsdWVcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGZpbHRlcklkeCxcbiAgICBwcm9wOiAnbGF5ZXJJZCcsXG4gICAgdmFsdWU6IG5ld0xheWVySWRcbiAgfSk7XG59XG5cbi8qKlxuICogQXBwbHkgcG9seWdvbiBmaWx0ZXIgdG8gYWxsIHZpc2libGUgbGF5ZXJzXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0UG9seWdvbkZpbHRlckFsbExheWVyc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgcGF5bG9hZDogVmlzU3RhdGVBY3Rpb25zLlNldFBvbHlnb25GaWx0ZXJBbGxMYXllcnNVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtmZWF0dXJlfSA9IHBheWxvYWQ7XG5cbiAgY29uc3QgbmV3RmlsdGVyID0gZ2VuZXJhdGVQb2x5Z29uRmlsdGVyKFtdLCBmZWF0dXJlKTtcbiAgY29uc3QgZmlsdGVySWR4ID0gc3RhdGUuZmlsdGVycy5sZW5ndGg7XG5cbiAgY29uc3QgbmV3U3RhdGU6IFZpc1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IFsuLi5zdGF0ZS5maWx0ZXJzLCBuZXdGaWx0ZXJdLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgZmVhdHVyZXM6IHN0YXRlLmVkaXRvci5mZWF0dXJlcy5maWx0ZXIoZiA9PiBmLmlkICE9PSBmZWF0dXJlLmlkKSxcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbmV3RmlsdGVyLnZhbHVlLFxuICAgICAgbW9kZTogRURJVE9SX01PREVTLkVESVRcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgdmlzaWJsZUxheWVySWRzID0gZ2V0KHBheWxvYWQsICd2aXNpYmxlTGF5ZXJJZHMnKTtcbiAgY29uc3QgYWxsTGF5ZXJJZHMgPSBBcnJheS5pc0FycmF5KHZpc2libGVMYXllcklkcylcbiAgICA/IHZpc2libGVMYXllcklkc1xuICAgIDogc3RhdGUubGF5ZXJzLmZpbHRlcihsID0+IGwuY29uZmlnLmlzVmlzaWJsZSkubWFwKGwgPT4gbC5pZCk7XG5cbiAgcmV0dXJuIHNldEZpbHRlclVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZHg6IGZpbHRlcklkeCxcbiAgICBwcm9wOiAnbGF5ZXJJZCcsXG4gICAgdmFsdWU6IGFsbExheWVySWRzXG4gIH0pO1xufVxuXG4vKipcbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb3J0VGFibGVDb2x1bW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGNvbHVtbiwgbW9kZX06IFZpc1N0YXRlQWN0aW9ucy5Tb3J0VGFibGVDb2x1bW5VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBpZiAoIWRhdGFzZXQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgbGV0IHNvcnRNb2RlID0gbW9kZTtcbiAgaWYgKCFzb3J0TW9kZSkge1xuICAgIGNvbnN0IGN1cnJlbnRNb2RlID0gZ2V0KGRhdGFzZXQsIFsnc29ydENvbHVtbicsIGNvbHVtbl0pO1xuICAgIC8vIEB0cy1pZ25vcmUgLSBzaG91bGQgYmUgZml4YWJsZSBpbiBhIFRTIGZpbGVcbiAgICBzb3J0TW9kZSA9IGN1cnJlbnRNb2RlXG4gICAgICA/IE9iamVjdC5rZXlzKFNPUlRfT1JERVIpLmZpbmQobSA9PiBtICE9PSBjdXJyZW50TW9kZSlcbiAgICAgIDogU09SVF9PUkRFUi5BU0NFTkRJTkc7XG4gIH1cblxuICBjb25zdCBzb3J0ZWQgPSBzb3J0RGF0YXNldEJ5Q29sdW1uKGRhdGFzZXQsIGNvbHVtbiwgc29ydE1vZGUpO1xuICByZXR1cm4gc2V0KFsnZGF0YXNldHMnLCBkYXRhSWRdLCBzb3J0ZWQsIHN0YXRlKTtcbn1cblxuLyoqXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGluVGFibGVDb2x1bW5VcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtkYXRhSWQsIGNvbHVtbn06IFZpc1N0YXRlQWN0aW9ucy5QaW5UYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBuZXdEYXRhc2V0ID0gcGluVGFibGVDb2x1bW5zKGRhdGFzZXQsIGNvbHVtbik7XG5cbiAgcmV0dXJuIHNldChbJ2RhdGFzZXRzJywgZGF0YUlkXSwgbmV3RGF0YXNldCwgc3RhdGUpO1xufVxuXG4vKipcbiAqIENvcHkgY29sdW1uIGNvbnRlbnQgYXMgc3RyaW5nc1xuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHlUYWJsZUNvbHVtblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgY29sdW1ufTogVmlzU3RhdGVBY3Rpb25zLkNvcHlUYWJsZUNvbHVtblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBmaWVsZElkeCA9IGRhdGFzZXQuZmllbGRzLmZpbmRJbmRleChmID0+IGYubmFtZSA9PT0gY29sdW1uKTtcbiAgaWYgKGZpZWxkSWR4IDwgMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCB7dHlwZX0gPSBkYXRhc2V0LmZpZWxkc1tmaWVsZElkeF07XG4gIGNvbnN0IHRleHQgPSBkYXRhc2V0LmRhdGFDb250YWluZXJcbiAgICAubWFwKHJvdyA9PiBwYXJzZUZpZWxkVmFsdWUocm93LnZhbHVlQXQoZmllbGRJZHgpLCB0eXBlKSwgdHJ1ZSlcbiAgICAuam9pbignXFxuJyk7XG5cbiAgY29weSh0ZXh0KTtcblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogU2V0IGRpc3BsYXkgZm9ybWF0IGZyb20gY29sdW1ucyBmcm9tIHVzZXIgc2VsZWN0aW9uXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0Q29sdW1uRGlzcGxheUZvcm1hdFVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2RhdGFJZCwgZm9ybWF0c306IFZpc1N0YXRlQWN0aW9ucy5TZXRDb2x1bW5EaXNwbGF5Rm9ybWF0VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGxldCBuZXdGaWVsZHMgPSBkYXRhc2V0LmZpZWxkcztcbiAgT2JqZWN0LmtleXMoZm9ybWF0cykuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgIGNvbnN0IGZpZWxkSWR4ID0gZGF0YXNldC5maWVsZHMuZmluZEluZGV4KGYgPT4gZi5uYW1lID09PSBjb2x1bW4pO1xuICAgIGlmIChmaWVsZElkeCA+PSAwKSB7XG4gICAgICBjb25zdCBkaXNwbGF5Rm9ybWF0ID0gZm9ybWF0c1tjb2x1bW5dO1xuICAgICAgY29uc3QgZmllbGQgPSBuZXdGaWVsZHNbZmllbGRJZHhdO1xuICAgICAgbmV3RmllbGRzID0gc3dhcF8obWVyZ2VfKHtkaXNwbGF5Rm9ybWF0fSkoZmllbGQpIGFzIHtpZDogc3RyaW5nfSkoXG4gICAgICAgIG5ld0ZpZWxkcyBhcyB7aWQ6IHN0cmluZ31bXVxuICAgICAgKSBhcyBGaWVsZFtdO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgbmV3RGF0YXNldCA9IGNvcHlUYWJsZUFuZFVwZGF0ZShkYXRhc2V0LCB7ZmllbGRzOiBuZXdGaWVsZHMgYXMgRmllbGRbXX0pO1xuICBsZXQgbmV3U3RhdGUgPSBwaWNrXygnZGF0YXNldHMnKShtZXJnZV8oe1tkYXRhSWRdOiBuZXdEYXRhc2V0fSkpKHN0YXRlKTtcblxuICAvLyB1cGRhdGUgY29sb3JGaWVsZCBkaXNwbGF5Rm9ybWF0XG4gIG5ld1N0YXRlID0ge1xuICAgIC4uLm5ld1N0YXRlLFxuICAgIGxheWVyczogbmV3U3RhdGUubGF5ZXJzLm1hcChsYXllciA9PlxuICAgICAgbGF5ZXIuY29uZmlnPy5jb2xvckZpZWxkPy5uYW1lICYmIGxheWVyLmNvbmZpZy5jb2xvckZpZWxkLm5hbWUgaW4gZm9ybWF0c1xuICAgICAgICA/IGxheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICAgICAgICAgIGNvbG9yRmllbGQ6IHtcbiAgICAgICAgICAgICAgLi4ubGF5ZXIuY29uZmlnLmNvbG9yRmllbGQsXG4gICAgICAgICAgICAgIGRpc3BsYXlGb3JtYXQ6IGZvcm1hdHNbbGF5ZXIuY29uZmlnLmNvbG9yRmllbGQubmFtZV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICA6IGxheWVyXG4gICAgKVxuICB9O1xuXG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxudHlwZSBMb2FkQ29sdW1uU3RhdHNUYXNrUGF5bG9hZCA9IHtcbiAgZGF0YXNldDogVmlzU3RhdGVbJ2RhdGFzZXRzJ11bc3RyaW5nXTtcbiAgZmllbGQ6IEZpZWxkO1xufTtcblxuZnVuY3Rpb24gZ2V0TWFwcGVkVmFsdWUoZmlsdGVyUHJvcHM/OiBGaWx0ZXJQcm9wcyB8IG51bGwpOiB1bmtub3duW10gfCB1bmRlZmluZWQge1xuICBpZiAoZmlsdGVyUHJvcHMgJiYgJ21hcHBlZFZhbHVlJyBpbiBmaWx0ZXJQcm9wcyAmJiBBcnJheS5pc0FycmF5KGZpbHRlclByb3BzLm1hcHBlZFZhbHVlKSkge1xuICAgIHJldHVybiBmaWx0ZXJQcm9wcy5tYXBwZWRWYWx1ZTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiB5aWVsZEZvclBhaW50KCk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCAwKTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlcXVlc3REYXRhc2V0Q29sdW1uU3RhdGlzdGljcyh7ZGF0YXNldCwgZmllbGR9OiBMb2FkQ29sdW1uU3RhdHNUYXNrUGF5bG9hZCkge1xuICAvLyBZaWVsZCBzbyB0aGUgZGF0YSB0YWJsZSBhbmQgcGVyLWNvbHVtbiBsb2FkaW5nIHNwaW5uZXJzIGNhbiBwYWludCBmaXJzdC5cbiAgYXdhaXQgeWllbGRGb3JQYWludCgpO1xuICBjb25zdCBmaWx0ZXJQcm9wcyA9IGZpZWxkLmZpbHRlclByb3BzIHx8IGRhdGFzZXQuZ2V0Q29sdW1uRmlsdGVyUHJvcHMoZmllbGQubmFtZSk7XG4gIGNvbnN0IG1hcHBlZFZhbHVlID0gZ2V0TWFwcGVkVmFsdWUoZmlsdGVyUHJvcHMpO1xuICBjb25zdCB2YWx1ZXMgPSBtYXBwZWRWYWx1ZSA/PyBjb2xsZWN0Q29sdW1uVmFsdWVzKGRhdGFzZXQuZGF0YUNvbnRhaW5lciwgZmllbGQuZmllbGRJZHgpO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRDb2x1bW5TdGF0aXN0aWNzKHtcbiAgICB2YWx1ZXMsXG4gICAgZmllbGRUeXBlOiBmaWVsZC50eXBlXG4gIH0pO1xuXG4gIHJldHVybiB7cmVzdWx0LCBmaWx0ZXJQcm9wc307XG59XG5cbmNvbnN0IExPQURfQ09MVU1OX1NUQVRTX1RBU0sgPSBUYXNrLmZyb21Qcm9taXNlKFxuICByZXF1ZXN0RGF0YXNldENvbHVtblN0YXRpc3RpY3MsXG4gICdMT0FEX0NPTFVNTl9TVEFUU19UQVNLJ1xuKTtcblxuLyoqXG4gKiBTdGFydCBsb2FkaW5nIGNvbHVtbiBzdGF0aXN0aWNzIGZvciBvbmUgb3IgbW9yZSBmaWVsZHMuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZENvbHVtblN0YXRzVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7ZGF0YUlkLCBmaWVsZE5hbWV9OiBWaXNTdGF0ZUFjdGlvbnMuTG9hZENvbHVtblN0YXRzVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBmaWVsZE5hbWVzVG9Mb2FkID0gdG9BcnJheShmaWVsZE5hbWUpO1xuICBjb25zdCBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgY29uc3QgZmllbGRzVG9Mb2FkID0gZGF0YXNldD8uZmllbGRzLmZpbHRlcihmID0+IGZpZWxkTmFtZXNUb0xvYWQuaW5jbHVkZXMoZi5uYW1lKSk7XG4gIGlmICghZGF0YXNldCB8fCAhZmllbGRzVG9Mb2FkLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IG5ld0ZpZWxkcyA9IGRhdGFzZXQuZmllbGRzLm1hcChmaWVsZCA9PlxuICAgIGZpZWxkTmFtZXNUb0xvYWQuaW5jbHVkZXMoZmllbGQubmFtZSkgPyB7Li4uZmllbGQsIGlzTG9hZGluZ1N0YXRzOiB0cnVlfSA6IGZpZWxkXG4gICk7XG4gIGNvbnN0IG5ld0RhdGFzZXQgPSBjb3B5VGFibGVBbmRVcGRhdGUoZGF0YXNldCwge2ZpZWxkczogbmV3RmllbGRzfSk7XG5cbiAgY29uc3QgdGFza3MgPSBmaWVsZHNUb0xvYWQubWFwKGYgPT5cbiAgICBMT0FEX0NPTFVNTl9TVEFUU19UQVNLKHtkYXRhc2V0OiBuZXdEYXRhc2V0LCBmaWVsZDogZn0pLmJpbWFwKFxuICAgICAgKHtyZXN1bHQsIGZpbHRlclByb3BzfSkgPT4gbG9hZENvbHVtblN0YXRzU3VjY2VzcyhuZXdEYXRhc2V0LmlkLCBmLm5hbWUsIHJlc3VsdCwgZmlsdGVyUHJvcHMpLFxuICAgICAgKGVycm9yOiBFcnJvcikgPT4gbG9hZENvbHVtblN0YXRzRXJyb3IobmV3RGF0YXNldC5pZCwgZi5uYW1lLCBlcnJvcilcbiAgICApXG4gICk7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IHBpY2tfKCdkYXRhc2V0cycpKG1lcmdlXyh7W2RhdGFJZF06IG5ld0RhdGFzZXR9KSkoc3RhdGUpO1xuXG4gIHJldHVybiB3aXRoVGFzayhuZXh0U3RhdGUsIHRhc2tzKTtcbn1cblxuLyoqXG4gKiBQZXJzaXN0IGxvYWRlZCBjb2x1bW4gc3RhdGlzdGljcyBvbiB0aGUgZmllbGQuXG4gKiBAbWVtYmVyb2YgdmlzU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZENvbHVtblN0YXRzU3VjY2Vzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge3Jlc3VsdCwgZmlsdGVyUHJvcHMsIGRhdGFJZCwgZmllbGROYW1lfTogVmlzU3RhdGVBY3Rpb25zLkxvYWRDb2x1bW5TdGF0c1N1Y2Nlc3NVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBjb25zdCBmaWVsZCA9IChkYXRhc2V0Py5maWVsZHMgfHwgW10pLmZpbmQoZiA9PiBmLm5hbWUgPT09IGZpZWxkTmFtZSk7XG4gIGlmICghZGF0YXNldCB8fCAhZmllbGQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBuZXdGaWx0ZXJQcm9wcyA9IHtcbiAgICAuLi5maWx0ZXJQcm9wcyxcbiAgICBjb2x1bW5TdGF0czogcmVzdWx0XG4gIH07XG4gIGNvbnN0IG5ld0ZpZWxkcyA9IGRhdGFzZXQuZmllbGRzLm1hcChmID0+XG4gICAgZi5uYW1lID09PSBmaWVsZE5hbWUgPyB7Li4uZiwgZmlsdGVyUHJvcHM6IG5ld0ZpbHRlclByb3BzLCBpc0xvYWRpbmdTdGF0czogZmFsc2V9IDogZlxuICApO1xuICBjb25zdCBuZXdEYXRhc2V0ID0gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtmaWVsZHM6IG5ld0ZpZWxkc30pO1xuICByZXR1cm4gcGlja18oJ2RhdGFzZXRzJykobWVyZ2VfKHtbZGF0YUlkXTogbmV3RGF0YXNldH0pKShzdGF0ZSk7XG59XG5cbi8qKlxuICogQ2xlYXIgbG9hZGluZyBmbGFnIHdoZW4gY29sdW1uIHN0YXRpc3RpY3MgZmFpbC5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQ29sdW1uU3RhdHNFcnJvclVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2Vycm9yLCBkYXRhSWQsIGZpZWxkTmFtZX06IFZpc1N0YXRlQWN0aW9ucy5Mb2FkQ29sdW1uU3RhdHNFcnJvclVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgQ29uc29sZS5lcnJvcihlcnJvcik7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuICBjb25zdCBmaWVsZCA9IChkYXRhc2V0Py5maWVsZHMgfHwgW10pLmZpbmQoZiA9PiBmLm5hbWUgPT09IGZpZWxkTmFtZSk7XG4gIGlmICghZGF0YXNldCB8fCAhZmllbGQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbmV3RmllbGRzID0gZGF0YXNldC5maWVsZHMubWFwKGYgPT5cbiAgICBmLm5hbWUgPT09IGZpZWxkTmFtZSA/IHsuLi5mLCBpc0xvYWRpbmdTdGF0czogZmFsc2V9IDogZlxuICApO1xuICBjb25zdCBuZXdEYXRhc2V0ID0gY29weVRhYmxlQW5kVXBkYXRlKGRhdGFzZXQsIHtmaWVsZHM6IG5ld0ZpZWxkc30pO1xuICByZXR1cm4gcGlja18oJ2RhdGFzZXRzJykobWVyZ2VfKHtbZGF0YUlkXTogbmV3RGF0YXNldH0pKShzdGF0ZSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9nZ2xlRWRpdG9yVmlzaWJpbGl0eVVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Ub2dnbGVFZGl0b3JWaXNpYmlsaXR5VXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVkaXRvcjoge1xuICAgICAgLi4uc3RhdGUuZWRpdG9yLFxuICAgICAgdmlzaWJsZTogIXN0YXRlLmVkaXRvci52aXNpYmxlXG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIENvbnZlcnQgZWRpdG9yIHNrZXRjaCBmZWF0dXJlcyBpbnRvIGEgR2VvSlNPTiBkYXRhc2V0L2xheWVyIGFuZCBjbGVhciB0aGUgc2tldGNoZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0RWRpdG9yRmVhdHVyZXNUb0xheWVyVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIF9hY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5Db252ZXJ0RWRpdG9yRmVhdHVyZXNUb0xheWVyVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBpZiAoIWdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZW5hYmxlRHJhd09uTWFwU2tldGNoZXMpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBmZWF0dXJlcyA9IHN0YXRlLmVkaXRvci5mZWF0dXJlcztcbiAgaWYgKCFmZWF0dXJlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBsZXQgZGF0YTtcbiAgdHJ5IHtcbiAgICBkYXRhID0gcHJvY2Vzc0dlb2pzb24oZWRpdG9yRmVhdHVyZXNUb0ZlYXR1cmVDb2xsZWN0aW9uKGZlYXR1cmVzKSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGUsXG4gICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGNvbnZlcnQgZHJhd24gZ2VvbWV0cnkgdG8gYSBsYXllcjogJHttZXNzYWdlfWAsXG4gICAgICAgICAgICBpZDogJ2NvbnZlcnQtZWRpdG9yLWZlYXR1cmVzJ1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgY29uc3QgY2xlYXJlZFN0YXRlOiBWaXNTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIGZlYXR1cmVzOiBbXSxcbiAgICAgIHNlbGVjdGVkRmVhdHVyZTogbnVsbCxcbiAgICAgIG1vZGU6IEVESVRPUl9NT0RFUy5FRElUXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGxhYmVsSWQgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA5MCkgKyAxMDtcblxuICByZXR1cm4gdXBkYXRlVmlzRGF0YVVwZGF0ZXIoY2xlYXJlZFN0YXRlLCB7XG4gICAgZGF0YXNldHM6IHtcbiAgICAgIGluZm86IHtcbiAgICAgICAgaWQ6IGBkcmF3bi1nZW9tZXRyeS0ke2dlbmVyYXRlSGFzaElkKDYpfWAsXG4gICAgICAgIGxhYmVsOiBgRHJhd24gR2VvbWV0cnkgJHtsYWJlbElkfWBcbiAgICAgIH0sXG4gICAgICBkYXRhXG4gICAgfSxcbiAgICBvcHRpb25zOiB7XG4gICAgICBrZWVwRXhpc3RpbmdDb25maWc6IHRydWUsXG4gICAgICBjZW50ZXJNYXA6IGZhbHNlLFxuICAgICAgYXV0b0NyZWF0ZUxheWVyczogdHJ1ZVxuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogQ29weSBpbi1tZW1vcnkgcm93cyAob3IgbG9hZGVkIHZlY3Rvci10aWxlIGZlYXR1cmVzKSBpbnNpZGUgdGhlIHNlbGVjdGVkXG4gKiBEcmF3IG9uIE1hcCBwb2x5Z29uIGludG8gYSBuZXcgZGF0YXNldC4gUmFzdGVyIHRpbGVzIGRvd25sb2FkIGEgUE5HIGNsaXAgYW5kIGFcbiAqIEdlb0pTT04gc2lkZWNhciAoYmJveCByZWN0YW5nbGUgKyBzdGF0cykgaW5zdGVhZCBvZiBjcmVhdGluZyBhIGRhdGFzZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0RGF0YUZyb21GZWF0dXJlVXBkYXRlcihcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7bGF5ZXJJZH06IFZpc1N0YXRlQWN0aW9ucy5FeHRyYWN0RGF0YUZyb21GZWF0dXJlVXBkYXRlckFjdGlvblxuKTogVmlzU3RhdGUge1xuICBjb25zdCBmZWF0dXJlID0gc3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZTtcbiAgY29uc3QgbGF5ZXIgPSBzdGF0ZS5sYXllcnMuZmluZChsID0+IGwuaWQgPT09IGxheWVySWQpO1xuICBjb25zdCBkYXRhSWQgPSBsYXllcj8uY29uZmlnLmRhdGFJZDtcbiAgbGV0IGRhdGFzZXQgPSBkYXRhSWQgPyBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdIDogbnVsbDtcblxuICBpZiAoIWxheWVyIHx8ICFkYXRhc2V0IHx8ICFkYXRhSWQpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBpc1RpbGVkRXh0cmFjdCA9IGlzVmVjdG9yVGlsZUV4dHJhY3RMYXllcihsYXllcikgfHwgaXNSYXN0ZXJUaWxlRXh0cmFjdExheWVyKGxheWVyKTtcblxuICAvLyBHUFUgcmFuZ2UvdGltZSBmaWx0ZXJzIGFyZSBub3QgcmVmbGVjdGVkIGluIGZpbHRlcmVkSW5kZXg7IGV2YWx1YXRlIHRoZW0gb24gQ1BVXG4gIC8vIHRoZSBzYW1lIHdheSBleHBvcnQgZGF0YSBkb2VzLCB0aGVuIGNsaXAgdGhlIHJlc3VsdCB0byB0aGUgZHJhd2luZy5cbiAgaWYgKCFpc1RpbGVkRXh0cmFjdCkge1xuICAgIHN0YXRlID0gZmlsdGVyRGF0YXNldENQVShzdGF0ZSwgZGF0YUlkKTtcbiAgICBkYXRhc2V0ID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXTtcbiAgICBpZiAoIWRhdGFzZXQpIHtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gIH1cblxuICBsZXQgZXh0cmFjdGVkO1xuICB0cnkge1xuICAgIGV4dHJhY3RlZCA9IGV4dHJhY3RSb3dzSW5zaWRlRmVhdHVyZSh7bGF5ZXIsIGRhdGFzZXQsIGZlYXR1cmV9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICByZXR1cm4gd2l0aFRhc2soXG4gICAgICBzdGF0ZSxcbiAgICAgIEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04oKS5tYXAoKCkgPT5cbiAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gZXh0cmFjdCBkYXRhOiAke21lc3NhZ2V9YCxcbiAgICAgICAgICAgIGlkOiAnZXh0cmFjdC1kYXRhLWZyb20tZmVhdHVyZSdcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGlmICghZXh0cmFjdGVkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgaWYgKCFleHRyYWN0ZWQucm93Q291bnQpIHtcbiAgICByZXR1cm4gd2l0aFRhc2soXG4gICAgICBzdGF0ZSxcbiAgICAgIEFDVElPTl9UQVNLX0FERF9OT1RJRklDQVRJT04oKS5tYXAoKCkgPT5cbiAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGlzUmFzdGVyVGlsZUV4dHJhY3RMYXllcihsYXllcilcbiAgICAgICAgICAgICAgPyAnTm8gbG9hZGVkIHJhc3RlciBwaXhlbHMgZm91bmQgaW5zaWRlIHRoZSBzZWxlY3RlZCBkcmF3aW5nJ1xuICAgICAgICAgICAgICA6IGlzVmVjdG9yVGlsZUV4dHJhY3RMYXllcihsYXllcilcbiAgICAgICAgICAgICAgPyAnTm8gbG9hZGVkIHZlY3RvciB0aWxlIGZlYXR1cmVzIGZvdW5kIGluc2lkZSB0aGUgc2VsZWN0ZWQgZHJhd2luZydcbiAgICAgICAgICAgICAgOiAnTm8gcm93cyBmb3VuZCBpbnNpZGUgdGhlIHNlbGVjdGVkIGRyYXdpbmcnLFxuICAgICAgICAgICAgaWQ6ICdleHRyYWN0LWRhdGEtZnJvbS1mZWF0dXJlLWVtcHR5J1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgaWYgKGlzUmFzdGVyVGlsZUV4dHJhY3RMYXllcihsYXllcikpIHtcbiAgICBjb25zdCBwb2x5Z29uID0gZmVhdHVyZTtcbiAgICBjb25zdCBkb3dubG9hZCA9XG4gICAgICB0eXBlb2YgKGxheWVyIGFzIGFueSkuZG93bmxvYWRDbGlwID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gUHJvbWlzZS5yZXNvbHZlKChsYXllciBhcyBhbnkpLmRvd25sb2FkQ2xpcChwb2x5Z29uKSlcbiAgICAgICAgOiBQcm9taXNlLnJlc29sdmUoe3BuZzogZmFsc2UsIGpzb246IGZhbHNlfSk7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGUsXG4gICAgICBVTldSQVBfVEFTSyhkb3dubG9hZCkuYmltYXAoXG4gICAgICAgIChyZXN1bHQ6IHtwbmc/OiBib29sZWFufSB8IG51bGwpID0+XG4gICAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgcmVzdWx0Py5wbmdcbiAgICAgICAgICAgICAgPyBzdWNjZXNzTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdEb3dubG9hZGVkIHJhc3RlciBjbGlwIGltYWdlIGFuZCBzdGF0cyBmaWxlJyxcbiAgICAgICAgICAgICAgICAgIGlkOiAnZXh0cmFjdC1yYXN0ZXItY2xpcCdcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICA6IGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdGYWlsZWQgdG8gZG93bmxvYWQgcmFzdGVyIGNsaXAgaW1hZ2UnLFxuICAgICAgICAgICAgICAgICAgaWQ6ICdleHRyYWN0LXJhc3Rlci1jbGlwJ1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgKSxcbiAgICAgICAgZXJyID0+XG4gICAgICAgICAgYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGRvd25sb2FkIHJhc3RlciBjbGlwOiAke1xuICAgICAgICAgICAgICAgIGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKVxuICAgICAgICAgICAgICB9YCxcbiAgICAgICAgICAgICAgaWQ6ICdleHRyYWN0LXJhc3Rlci1jbGlwJ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGxldCBkYXRhO1xuICB0cnkge1xuICAgIGRhdGEgPVxuICAgICAgZXh0cmFjdGVkLmtpbmQgPT09ICdnZW9qc29uJ1xuICAgICAgICA/IHByb2Nlc3NHZW9qc29uKHtcbiAgICAgICAgICAgIHR5cGU6ICdGZWF0dXJlQ29sbGVjdGlvbicsXG4gICAgICAgICAgICBmZWF0dXJlczogZXh0cmFjdGVkLmZlYXR1cmVzXG4gICAgICAgICAgfSlcbiAgICAgICAgOiB7ZmllbGRzOiBleHRyYWN0ZWQuZmllbGRzLCByb3dzOiBleHRyYWN0ZWQucm93c307XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgcmV0dXJuIHdpdGhUYXNrKFxuICAgICAgc3RhdGUsXG4gICAgICBBQ1RJT05fVEFTS19BRERfTk9USUZJQ0FUSU9OKCkubWFwKCgpID0+XG4gICAgICAgIGFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIGV4dHJhY3QgZGF0YTogJHttZXNzYWdlfWAsXG4gICAgICAgICAgICBpZDogJ2V4dHJhY3QtZGF0YS1mcm9tLWZlYXR1cmUnXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlVmlzRGF0YVVwZGF0ZXIoc3RhdGUsIHtcbiAgICBkYXRhc2V0czoge1xuICAgICAgaW5mbzoge1xuICAgICAgICBpZDogYGV4dHJhY3QtJHtnZW5lcmF0ZUhhc2hJZCg2KX1gLFxuICAgICAgICBsYWJlbDogYEV4dHJhY3RlZCAke2RhdGFzZXQubGFiZWx9YFxuICAgICAgfSxcbiAgICAgIGRhdGFcbiAgICB9LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGtlZXBFeGlzdGluZ0NvbmZpZzogdHJ1ZSxcbiAgICAgIGNlbnRlck1hcDogZmFsc2UsXG4gICAgICBhdXRvQ3JlYXRlTGF5ZXJzOiB0cnVlXG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtpZHgsIGNvbmZpZ306IFZpc1N0YXRlQWN0aW9ucy5TZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IG9sZEZpbHRlciA9IHN0YXRlLmZpbHRlcnNbaWR4XTtcbiAgaWYgKCFvbGRGaWx0ZXIpIHtcbiAgICBDb25zb2xlLmVycm9yKGBmaWx0ZXJzLiR7aWR4fSBpcyB1bmRlZmluZWRgKTtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgaWYgKG9sZEZpbHRlci50eXBlICE9PSBGSUxURVJfVFlQRVMudGltZVJhbmdlKSB7XG4gICAgQ29uc29sZS5lcnJvcihcbiAgICAgIGBzZXRGaWx0ZXJBbmltYXRpb25UaW1lQ29uZmlnIGNhbiBvbmx5IGJlIGNhbGxlZCB0byB1cGRhdGUgYSB0aW1lIGZpbHRlci4gY2hlY2sgZmlsdGVyLnR5cGUgPT09ICd0aW1lUmFuZ2UnYFxuICAgICk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgdXBkYXRlcyA9IGNoZWNrVGltZUNvbmZpZ0FyZ3MoY29uZmlnKTtcblxuICByZXR1cm4gcGlja18oJ2ZpbHRlcnMnKShzd2FwXyhtZXJnZV8odXBkYXRlcykob2xkRmlsdGVyKSkpKHN0YXRlKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tUaW1lQ29uZmlnQXJncyhjb25maWcpIHtcbiAgY29uc3QgYWxsb3dlZCA9IFsndGltZUZvcm1hdCcsICd0aW1lem9uZSddO1xuICByZXR1cm4gT2JqZWN0LmtleXMoY29uZmlnKS5yZWR1Y2UoKGFjY3UsIHByb3ApID0+IHtcbiAgICBpZiAoIWFsbG93ZWQuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWcgdGFrZXMgdGltZUZvcm1hdCBhbmQvb3IgdGltZXpvbmUgYXMgb3B0aW9ucywgZm91bmQgJHtwcm9wfWBcbiAgICAgICk7XG4gICAgICByZXR1cm4gYWNjdTtcbiAgICB9XG5cbiAgICAvLyBoZXJlIHdlIGFyZSBOT1QgY2hlY2tpbmcgaWYgdGltZXpvbmUgb3IgdGltZUZvcm1hdCBpbnB1dCBpcyB2YWxpZFxuICAgIGFjY3VbcHJvcF0gPSBjb25maWdbcHJvcF07XG4gICAgcmV0dXJuIGFjY3U7XG4gIH0sIHt9KTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZWRpdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRMYXllckFuaW1hdGlvblRpbWVDb25maWdVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHtjb25maWd9OiBWaXNTdGF0ZUFjdGlvbnMuU2V0TGF5ZXJBbmltYXRpb25UaW1lQ29uZmlnQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICghY29uZmlnKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IHVwZGF0ZXMgPSBjaGVja1RpbWVDb25maWdBcmdzKGNvbmZpZyk7XG4gIHJldHVybiBwaWNrXygnYW5pbWF0aW9uQ29uZmlnJykobWVyZ2VfKHVwZGF0ZXMpKShzdGF0ZSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGVkaXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuTGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2V2ZW50LCBsYXllcn0gPSBhY3Rpb247XG4gIGNvbnN0IHtpZDogZGVja2dsTGF5ZXJJZCwgY291bnR9ID0gZXZlbnQ7XG4gIGlmICghbGF5ZXIpIHtcbiAgICBDb25zb2xlLndhcm4oYGxheWVyRmlsdGVyZWRJdGVtcyBsYXllciBkb2VzbnQgZXhpc3RzYCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChsYXllci5maWx0ZXJlZEl0ZW1Db3VudD8uW2RlY2tnbExheWVySWRdID09PSBjb3VudCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGxheWVyLmZpbHRlcmVkSXRlbUNvdW50ID0ge1xuICAgIC4uLmxheWVyLmZpbHRlcmVkSXRlbUNvdW50LFxuICAgIFtkZWNrZ2xMYXllcklkXTogY291bnRcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogc3dhcF8obGF5ZXIpKHN0YXRlLmxheWVycylcbiAgfTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgV01TIGZlYXR1cmUgaW5mbyBhbmQgcGluIHRvb2x0aXBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdtc0ZlYXR1cmVJbmZvVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuV01TRmVhdHVyZUluZm9BY3Rpb25cbik6IFMge1xuICBjb25zdCB7bGF5ZXIsIGZlYXR1cmVJbmZvLCBjb29yZGluYXRlfSA9IGFjdGlvbjtcbiAgaWYgKCFsYXllcikge1xuICAgIGNvbnNvbGUud2FybihgV01TIGZlYXR1cmUgaW5mbyBsYXllciBkb2Vzbid0IGV4aXN0YCk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gQ3JlYXRlIGEgY2xpY2tlZCBvYmplY3Qgc2ltaWxhciB0byBsYXllckNsaWNrVXBkYXRlciB0byBwaW4gdGhlIHRvb2x0aXBcbiAgY29uc3QgY2xpY2tlZCA9IGZlYXR1cmVJbmZvXG4gICAgPyB7XG4gICAgICAgIHBpY2tlZDogdHJ1ZSxcbiAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgd21zRmVhdHVyZUluZm86IGZlYXR1cmVJbmZvXG4gICAgICAgIH0sXG4gICAgICAgIGNvb3JkaW5hdGU6IGNvb3JkaW5hdGUgfHwgWzAsIDBdLFxuICAgICAgICBsYXllcjoge1xuICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICBpZHg6IHN0YXRlLmxheWVycy5maW5kSW5kZXgobCA9PiBsLmlkID09PSBsYXllci5pZCksXG4gICAgICAgICAgICBpZDogbGF5ZXIuaWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICA6IG51bGw7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjbGlja2VkXG4gIH07XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50c1xuZXhwb3J0IGZ1bmN0aW9uIHN5bmNUaW1lRmlsdGVyV2l0aExheWVyVGltZWxpbmVVcGRhdGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhY3Rpb246IFZpc1N0YXRlQWN0aW9ucy5TeW5jVGltZUZpbHRlcldpdGhMYXllclRpbWVsaW5lQWN0aW9uXG4pOiBTIHtcbiAgY29uc3Qge2lkeDogZmlsdGVySWR4LCBlbmFibGUgPSBmYWxzZX0gPSBhY3Rpb247XG5cbiAgY29uc3QgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlcjtcblxuICBsZXQgbmV3U3RhdGUgPSBzdGF0ZTtcbiAgbGV0IG5ld0ZpbHRlciA9IGZpbHRlcjtcblxuICAvLyBpZiB3ZSBlbmFibGUgc3luYyB3ZSBhcmUgZ29pbmcgdG8gbWVyZ2UgZmlsdGVyIGFuZCBhbmltYXRpb25Db25maWcgZG9tYWlucyBhbmQgc3RvcmUgaW50byBmaWx0ZXIuZG9tYWluXG4gIGlmIChlbmFibGUpIHtcbiAgICBjb25zdCBhbmltYXRhYmxlTGF5ZXJzID0gZ2V0QW5pbWF0YWJsZVZpc2libGVMYXllcnMobmV3U3RhdGUubGF5ZXJzKTtcbiAgICAvLyBpZiBubyBhbmltYXRhYmxlTGF5ZXJzIGFyZSBwcmVzZW50IHdlIHNpbXBseSByZXR1cm5cbiAgICBpZiAoIWFuaW1hdGFibGVMYXllcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmV3U3RhdGU7XG4gICAgfVxuXG4gICAgY29uc3QgaW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyA9IGdldEludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMoYW5pbWF0YWJsZUxheWVycyk7XG4gICAgY29uc3QgaGFzSW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVyID0gQm9vbGVhbihpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLmxlbmd0aCk7XG5cbiAgICBjb25zdCBuZXdGaWx0ZXJEb21haW4gPSBtZXJnZVRpbWVEb21haW5zKFtmaWx0ZXIuZG9tYWluLCBuZXdTdGF0ZS5hbmltYXRpb25Db25maWcuZG9tYWluXSk7XG5cbiAgICAvLyB3ZSBvbmx5IHVwZGF0ZSBhbmltYXRpb25XaW5kb3cgaWYgd2UgaGF2ZSBpbnRlcnZhbCBiYXNlZCBhbmltYXRpb24gbGF5ZXJzIHdpdGggZGVmaW5lZCBpbnRlcnZhbHMgYW5kIHRoZSBjdXJyZW50IGZpbHRlciBhbmltYXRpb24gd2luZG93IGlzIG5vdCBpbnRlcnZhbFxuICAgIGlmIChoYXNJbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXIpIHtcbiAgICAgIGlmIChmaWx0ZXIuYW5pbWF0aW9uV2luZG93ICE9PSBBTklNQVRJT05fV0lORE9XLmludGVydmFsKSB7XG4gICAgICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyQW5pbWF0aW9uV2luZG93VXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgICAgIGlkOiBmaWx0ZXIuaWQsXG4gICAgICAgICAgYW5pbWF0aW9uV2luZG93OiBBTklNQVRJT05fV0lORE9XLmludGVydmFsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBuZXdGaWx0ZXIgPSBuZXdTdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gICAgICAvLyBhZGp1c3QgdGltZSBmaWx0ZXIgaW50ZXJ2YWxcbiAgICAgIG5ld0ZpbHRlciA9IGFkanVzdFRpbWVGaWx0ZXJJbnRlcnZhbChuZXdTdGF0ZSwgbmV3RmlsdGVyKTtcblxuICAgICAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgICAgIG5ld1N0YXRlID0ge1xuICAgICAgICAuLi5uZXdTdGF0ZSxcbiAgICAgICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gICAgICB9O1xuICAgIH1cblxuICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAvLyBhZGp1c3QgdmFsdWUgYmFzZWQgb24gbmV3IGRvbWFpblxuICAgIGNvbnN0IG5ld0ZpbHRlclZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihcbiAgICAgIG5ld0ZpbHRlci5hbmltYXRpb25XaW5kb3cgPT09IEFOSU1BVElPTl9XSU5ET1cuaW50ZXJ2YWxcbiAgICAgICAgPyBbbmV3RmlsdGVyRG9tYWluWzBdLCBuZXdGaWx0ZXJEb21haW5bMF1dXG4gICAgICAgIDogbmV3RmlsdGVyRG9tYWluLFxuICAgICAgey4uLm5ld0ZpbHRlciwgZG9tYWluOiBuZXdGaWx0ZXJEb21haW59XG4gICAgKTtcblxuICAgIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWR4OiBmaWx0ZXJJZHgsXG4gICAgICBwcm9wOiAndmFsdWUnLFxuICAgICAgdmFsdWU6IG5ld0ZpbHRlclZhbHVlXG4gICAgfSk7XG5cbiAgICBuZXdGaWx0ZXIgPSB7XG4gICAgICAuLi4obmV3U3RhdGUuZmlsdGVyc1tmaWx0ZXJJZHhdIGFzIFRpbWVSYW5nZUZpbHRlciksXG4gICAgICBzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZTogdHJ1ZVxuICAgIH07XG5cbiAgICAvLyByZXBsYWNlIGZpbHRlciBpbiBzdGF0ZSB3aXRoIG5ld0ZpbHRlclxuICAgIG5ld1N0YXRlID0ge1xuICAgICAgLi4ubmV3U3RhdGUsXG4gICAgICBmaWx0ZXJzOiBzd2FwXzxGaWx0ZXI+KG5ld0ZpbHRlcikobmV3U3RhdGUuZmlsdGVycylcbiAgICB9O1xuXG4gICAgbmV3U3RhdGUgPSBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgICAgaWQ6IG5ld0ZpbHRlci5pZCxcbiAgICAgIG1vZGU6IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlcilcbiAgICB9KTtcblxuICAgIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgICAvLyBzZXQgdGhlIGFuaW1hdGlvbiBjb25maWcgdmFsdWUgdG8gbWF0Y2ggZmlsdGVyIHZhbHVlXG4gICAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICAgIHZhbHVlOiBuZXdGaWx0ZXIudmFsdWVbbmV3RmlsdGVyLnN5bmNUaW1lbGluZU1vZGVdXG4gICAgfSk7XG4gIH1cblxuICAvLyBzZXQgZG9tYWluIGFuZCBzdGVwXG4gIG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgc3luY2VkV2l0aExheWVyVGltZWxpbmU6IGZhbHNlXG4gIH07XG5cbiAgLy8gcmVwbGFjZSBmaWx0ZXIgaW4gc3RhdGUgd2l0aCBuZXdGaWx0ZXJcbiAgbmV3U3RhdGUgPSB7XG4gICAgLi4ubmV3U3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKG5ld1N0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgLy8gcmVzZXQgc3luYyB0aW1lbGluZSBtb2RlXG4gIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgIG1vZGU6IFNZTkNfVElNRUxJTkVfTU9ERVMuZW5kXG4gIH0pO1xuXG4gIG5ld0ZpbHRlciA9IG5ld1N0YXRlLmZpbHRlcnNbZmlsdGVySWR4XSBhcyBUaW1lUmFuZ2VGaWx0ZXI7XG5cbiAgLy8gcmVzZXQgZmlsdGVyIHZhbHVlXG4gIGNvbnN0IG5ld0ZpbHRlclZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihuZXdGaWx0ZXIuZG9tYWluLCBuZXdGaWx0ZXIpO1xuXG4gIG5ld1N0YXRlID0gc2V0RmlsdGVyVXBkYXRlcihuZXdTdGF0ZSwge1xuICAgIGlkeDogZmlsdGVySWR4LFxuICAgIHByb3A6ICd2YWx1ZScsXG4gICAgdmFsdWU6IG5ld0ZpbHRlclZhbHVlXG4gIH0pO1xuXG4gIG5ld1N0YXRlID0gc2V0VGltZUZpbHRlclRpbWVsaW5lTW9kZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICBpZDogbmV3RmlsdGVyLmlkLFxuICAgIG1vZGU6IGdldFN5bmNBbmltYXRpb25Nb2RlKG5ld0ZpbHRlcilcbiAgfSk7XG5cbiAgLy8gcmVzZXQgYW5pbWF0aW9uIGNvbmZpZyBjdXJyZW50IHRpbWUgdG9cbiAgcmV0dXJuIHNldExheWVyQW5pbWF0aW9uVGltZVVwZGF0ZXIobmV3U3RhdGUsIHtcbiAgICB2YWx1ZTogbmV3U3RhdGUuYW5pbWF0aW9uQ29uZmlnLmRvbWFpbj8uWzBdID8/IG51bGxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRUaW1lRmlsdGVyVGltZWxpbmVNb2RlVXBkYXRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuc2V0VGltZUZpbHRlclN5bmNUaW1lbGluZU1vZGVBY3Rpb25cbikge1xuICBjb25zdCB7aWQ6IGZpbHRlcklkLCBtb2RlOiBzeW5jVGltZWxpbmVNb2RlfSA9IGFjdGlvbjtcblxuICBjb25zdCBmaWx0ZXJJZHggPSBzdGF0ZS5maWx0ZXJzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IGZpbHRlcklkKTtcbiAgaWYgKGZpbHRlcklkeCA9PT0gLTEpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF0gYXMgVGltZVJhbmdlRmlsdGVyO1xuXG4gIGlmICghdmFsaWRhdGVTeW5jQW5pbWF0aW9uTW9kZShmaWx0ZXIsIHN5bmNUaW1lbGluZU1vZGUpKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgbmV3RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICBzeW5jVGltZWxpbmVNb2RlXG4gIH07XG5cbiAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogc3dhcF88RmlsdGVyPihuZXdGaWx0ZXIpKHN0YXRlLmZpbHRlcnMpXG4gIH07XG5cbiAgcmV0dXJuIGFkanVzdEFuaW1hdGlvbkNvbmZpZ1dpdGhGaWx0ZXIobmV3U3RhdGUsIGZpbHRlcklkeCk7XG59XG5cbi8qKlxuICogVXBkYXRlIHN0YXRlIG9mIHRoZSBsb2FkaW5nIGluZGljYXRvci5cbiAqIEBtZW1iZXJvZiB2aXNTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgdmlzU3RhdGVcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBQYXlsb2FkIHdpdGggY2hhbmdlIG9mIG51bWJlciBvZiBhY3RpdmUgbG9hZGluZyBhY3Rpb25zLlxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRMb2FkaW5nSW5kaWNhdG9yVXBkYXRlciA9IChcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB7cGF5bG9hZDoge2NoYW5nZX19OiB7cGF5bG9hZDogU2V0TG9hZGluZ0luZGljYXRvclBheWxvYWR9XG4pOiBWaXNTdGF0ZSA9PiB7XG4gIGxldCB7bG9hZGluZ0luZGljYXRvclZhbHVlfSA9IHN0YXRlO1xuICBpZiAoIWxvYWRpbmdJbmRpY2F0b3JWYWx1ZSkge1xuICAgIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZSA9IDA7XG4gIH1cblxuICBjb25zdCBuZXh0VmFsdWUgPSBNYXRoLm1heChsb2FkaW5nSW5kaWNhdG9yVmFsdWUgKyBjaGFuZ2UsIDApO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxvYWRpbmdJbmRpY2F0b3JWYWx1ZTogbmV4dFZhbHVlLFxuICAgIC4uLihuZXh0VmFsdWUgPT09IDAgJiZcbiAgICAoT2JqZWN0LmtleXMoc3RhdGUubG9hZGluZ1Byb2dyZXNzIHx8IHt9KS5sZW5ndGggfHxcbiAgICAgIE9iamVjdC5rZXlzKHN0YXRlLmxvYWRpbmdQcm9jZXNzaW5nIHx8IHt9KS5sZW5ndGgpXG4gICAgICA/IHtsb2FkaW5nUHJvZ3Jlc3M6IHt9LCBsb2FkaW5nUHJvY2Vzc2luZzoge319XG4gICAgICA6IHt9KVxuICB9O1xufTtcblxuLyoqXG4gKiBSZWNvcmQgZG93bmxvYWQgcHJvZ3Jlc3MgZm9yIGFuIGluLWZsaWdodCByZW1vdGUgZGF0YXNldCBoeWRyYXRlLlxuICogQG1lbWJlcm9mIHZpc1N0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldExvYWRpbmdQcm9ncmVzc1VwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAge2lkLCBwZXJjZW50LCBwaGFzZX06IFZpc1N0YXRlQWN0aW9ucy5TZXRMb2FkaW5nUHJvZ3Jlc3NVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGlmICgoc3RhdGUubG9hZGluZ0luZGljYXRvclZhbHVlIHx8IDApIDw9IDApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgbmV4dFBlcmNlbnQgPSBOdW1iZXIuaXNGaW5pdGUocGVyY2VudClcbiAgICA/IE1hdGgubWF4KDAsIE1hdGgubWluKDEwMCwgTWF0aC5yb3VuZChwZXJjZW50KSkpXG4gICAgOiAwO1xuICBjb25zdCBwcm9jZXNzaW5nID0gcGhhc2UgPT09ICdwcm9jZXNzaW5nJztcbiAgaWYgKFxuICAgIHN0YXRlLmxvYWRpbmdQcm9ncmVzcz8uW2lkXSA9PT0gbmV4dFBlcmNlbnQgJiZcbiAgICBCb29sZWFuKHN0YXRlLmxvYWRpbmdQcm9jZXNzaW5nPy5baWRdKSA9PT0gcHJvY2Vzc2luZ1xuICApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsb2FkaW5nUHJvZ3Jlc3M6IHtcbiAgICAgIC4uLnN0YXRlLmxvYWRpbmdQcm9ncmVzcyxcbiAgICAgIFtpZF06IG5leHRQZXJjZW50XG4gICAgfSxcbiAgICAuLi4ocHJvY2Vzc2luZ1xuICAgICAgPyB7XG4gICAgICAgICAgbG9hZGluZ1Byb2Nlc3Npbmc6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLmxvYWRpbmdQcm9jZXNzaW5nLFxuICAgICAgICAgICAgW2lkXTogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgOiB7fSlcbiAgfTtcbn1cblxuZnVuY3Rpb24gYWRqdXN0QW5pbWF0aW9uQ29uZmlnV2l0aEZpbHRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBmaWx0ZXJJZHg6IG51bWJlcik6IFMge1xuICBjb25zdCBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2ZpbHRlcklkeF07XG4gIGlmICgoZmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcikuc3luY2VkV2l0aExheWVyVGltZWxpbmUpIHtcbiAgICBjb25zdCB0aW1lbGluZVZhbHVlID0gZ2V0VGltZWxpbmVWYWx1ZUZyb21GaWx0ZXIoZmlsdGVyKTtcbiAgICBjb25zdCB2YWx1ZSA9IHN0YXRlLmFuaW1hdGlvbkNvbmZpZy50aW1lU3RlcHNcbiAgICAgID8gc25hcFRvTWFya3ModGltZWxpbmVWYWx1ZSwgc3RhdGUuYW5pbWF0aW9uQ29uZmlnLnRpbWVTdGVwcylcbiAgICAgIDogdGltZWxpbmVWYWx1ZTtcbiAgICByZXR1cm4gc2V0TGF5ZXJBbmltYXRpb25UaW1lVXBkYXRlcihzdGF0ZSwge3ZhbHVlfSk7XG4gIH1cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5mdW5jdGlvbiBnZXRUaW1lbGluZVZhbHVlRnJvbUZpbHRlcihmaWx0ZXIpIHtcbiAgcmV0dXJuIGZpbHRlci52YWx1ZVtmaWx0ZXIuc3luY1RpbWVsaW5lTW9kZV07XG59XG5cbmZ1bmN0aW9uIGdldFN5bmNBbmltYXRpb25Nb2RlKGZpbHRlcjogVGltZVJhbmdlRmlsdGVyKSB7XG4gIGlmIChmaWx0ZXIuYW5pbWF0aW9uV2luZG93ID09PSBBTklNQVRJT05fV0lORE9XLmZyZWUpIHtcbiAgICByZXR1cm4gZmlsdGVyLnN5bmNUaW1lbGluZU1vZGUgPz8gU1lOQ19USU1FTElORV9NT0RFUy5lbmQ7XG4gIH1cblxuICByZXR1cm4gU1lOQ19USU1FTElORV9NT0RFUy5lbmQ7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3luY0FuaW1hdGlvbk1vZGUoZmlsdGVyOiBUaW1lUmFuZ2VGaWx0ZXIsIG5ld01vZGU6IG51bWJlcikge1xuICByZXR1cm4gIShcbiAgICBmaWx0ZXIuYW5pbWF0aW9uV2luZG93ICE9PSBBTklNQVRJT05fV0lORE9XLmZyZWUgJiYgbmV3TW9kZSA9PT0gU1lOQ19USU1FTElORV9NT0RFUy5zdGFydFxuICApO1xufVxuXG5mdW5jdGlvbiBhZGp1c3RUaW1lRmlsdGVySW50ZXJ2YWwoc3RhdGUsIGZpbHRlcikge1xuICBjb25zdCBpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzID0gZ2V0SW50ZXJ2YWxCYXNlZEFuaW1hdGlvbkxheWVycyhzdGF0ZS5sYXllcnMpO1xuXG4gIGxldCBpbnRlcnZhbDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGlmIChpbnRlcnZhbEJhc2VkQW5pbWF0aW9uTGF5ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgaW50ZXJ2YWxJbmRleCA9IGludGVydmFsQmFzZWRBbmltYXRpb25MYXllcnMucmVkdWNlKChjdXJyZW50SW5kZXgsIGwpID0+IHtcbiAgICAgIGlmIChsLm1ldGEudGFyZ2V0VGltZUludGVydmFsKSB7XG4gICAgICAgIGNvbnN0IG5ld0luZGV4ID0gVElNRV9JTlRFUlZBTFNfT1JERVJFRC5maW5kSW5kZXgoaSA9PiBpID09PSBsLm1ldGEudGFyZ2V0VGltZUludGVydmFsKTtcbiAgICAgICAgcmV0dXJuIG5ld0luZGV4ID4gLTEgJiYgbmV3SW5kZXggPCBjdXJyZW50SW5kZXggPyBuZXdJbmRleCA6IGN1cnJlbnRJbmRleDtcbiAgICAgIH1cbiAgICB9LCBUSU1FX0lOVEVSVkFMU19PUkRFUkVELmxlbmd0aCAtIDEpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCBsYXllclRpbWVJbnRlcnZhbCA9IFRJTUVfSU5URVJWQUxTX09SREVSRURbaW50ZXJ2YWxJbmRleF07XG4gICAgaW50ZXJ2YWwgPSBMYXllclRvRmlsdGVyVGltZUludGVydmFsW2xheWVyVGltZUludGVydmFsXTtcbiAgfVxuXG4gIGlmICghaW50ZXJ2YWwpIHtcbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgLy8gYWRqdXN0IGZpbHRlclxuICBjb25zdCB0aW1lRm9ybWF0ID0gZ2V0RGVmYXVsdFRpbWVGb3JtYXQoaW50ZXJ2YWwpO1xuICBjb25zdCB1cGRhdGVkUGxvdFR5cGUgPSB7Li4uZmlsdGVyLnBsb3RUeXBlLCBpbnRlcnZhbCwgdGltZUZvcm1hdH07XG4gIGNvbnN0IG5ld0ZpbHRlciA9IHVwZGF0ZVRpbWVGaWx0ZXJQbG90VHlwZShmaWx0ZXIsIHVwZGF0ZWRQbG90VHlwZSwgc3RhdGUuZGF0YXNldHMpO1xuICByZXR1cm4gYWRqdXN0VmFsdWVUb0FuaW1hdGlvbldpbmRvdyhzdGF0ZSwgbmV3RmlsdGVyKTtcbn1cblxuLy8gRmluZCBkYXRhSWQgZnJvbSBhIHNhdmVkIHZpc1N0YXRlIHByb3BlcnR5OlxuLy8gbGF5ZXJzLCBmaWx0ZXJzLCBpbnRlcmFjdGlvbnMsIGxheWVyQmxlbmRpbmcsIG92ZXJsYXlCbGVuZGluZywgc3BsaXRNYXBzLCBhbmltYXRpb25Db25maWcsIGVkaXRvclxuLy8gcmVwbGFjZSBpdCB3aXRoIGFub3RoZXIgZGF0YUlkXG5mdW5jdGlvbiBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHModmFsdWU6IGFueSwgZGF0YUlkOiBzdHJpbmcsIGRhdGFJZFRvUmVwbGFjZTogc3RyaW5nKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gZm9yIGxheWVycywgZmlsdGVycywgY2FsbCBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMgb24gZWFjaCBpdGVtIGluIGFycmF5XG4gICAgY29uc3QgcmVwbGFjZWQgPSB2YWx1ZVxuICAgICAgLm1hcCh2ID0+IGRlZmF1bHRSZXBsYWNlUGFyZW50RGF0YXNldElkcyh2LCBkYXRhSWQsIGRhdGFJZFRvUmVwbGFjZSkpXG4gICAgICAuZmlsdGVyKGQgPT4gZCk7XG4gICAgcmV0dXJuIHJlcGxhY2VkLmxlbmd0aCA/IHJlcGxhY2VkIDogbnVsbDtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlLmRhdGFJZCA9PT0gJ3N0cmluZycgJiYgdmFsdWUuZGF0YUlkID09PSBkYXRhSWQpIHtcbiAgICAvLyBvdGhlcnNcbiAgICByZXR1cm4ge1xuICAgICAgLi4udmFsdWUsXG4gICAgICBkYXRhSWQ6IGRhdGFJZFRvUmVwbGFjZVxuICAgIH07XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZS5kYXRhSWQpICYmIHZhbHVlLmRhdGFJZC5pbmNsdWRlcyhkYXRhSWQpKSB7XG4gICAgLy8gZmlsdGVyXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgZGF0YUlkOiB2YWx1ZS5kYXRhSWQubWFwKGQgPT4gKGQgPT09IGRhdGFJZCA/IGRhdGFJZFRvUmVwbGFjZSA6IGQpKVxuICAgIH07XG4gIH0gZWxzZSBpZiAodmFsdWUuY29uZmlnPy5kYXRhSWQgJiYgdmFsdWUuY29uZmlnPy5kYXRhSWQgPT09IGRhdGFJZCkge1xuICAgIC8vIGxheWVyXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIC4uLnZhbHVlLmNvbmZpZyxcbiAgICAgICAgZGF0YUlkOiBkYXRhSWRUb1JlcGxhY2VcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2UgaWYgKGlzT2JqZWN0KHZhbHVlKSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGRhdGFJZCkpIHtcbiAgICAvLyBmb3IgdmFsdWUgc2F2ZWQgYXMge1tkYXRhSWRdOiB7Li4ufX1cbiAgICByZXR1cm4ge1tkYXRhSWRUb1JlcGxhY2VdOiB2YWx1ZVtkYXRhSWRdfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vLyBGaW5kIGRhdGFzZXRJZHMgZGVyaXZlZCBhIHNhdmVkIHZpc1N0YXRlIFByb3BlcnR5O1xuZnVuY3Rpb24gZmluZENoaWxkRGF0YXNldElkcyh2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBjb25zdCBjaGlsZERhdGFJZHMgPSB2YWx1ZS5tYXAoZmluZENoaWxkRGF0YXNldElkcykuZmlsdGVyKGQgPT4gZCk7XG4gICAgcmV0dXJuIGNoaWxkRGF0YUlkcy5sZW5ndGggPyBjaGlsZERhdGFJZHMgOiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlPy5uZXdEYXRhc2V0Py5pbmZvLmlkIHx8IG51bGw7XG59XG5cbi8vIG1vdmVkIHVubWVyZ2VkIGxheWVycywgZmlsdGVycywgaW50ZXJhY3Rpb25zXG5mdW5jdGlvbiBtb3ZlVmFsdWVUb0JlTWVyZ2VkKHN0YXRlLCBwcm9wVmFsdWVzLCB7cHJvcCwgdG9NZXJnZVByb3AsIHNhdmVVbm1lcmdlZH0pIHtcbiAgLy8gcmVtb3ZlIHByb3AgdmFsdWUgZnJvbSBzdGF0ZVxuICAvLyBUT0RPOiBzaG91bGQgd2UgYWRkIHJlbW92ZSB1cGRhdGVyIHRvIG1lcmdlciBhcyB3ZWxsP1xuICBpZiAoIXByb3BWYWx1ZXMpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3Qgc3RhdGVSZW1vdmVkID1cbiAgICBwcm9wID09PSAnbGF5ZXJzJ1xuICAgICAgPyBwcm9wVmFsdWVzLnJlZHVjZSgoYWNjdSwgcHJvcFZhbHVlKSA9PiByZW1vdmVMYXllclVwZGF0ZXIoYWNjdSwge2lkOiBwcm9wVmFsdWUuaWR9KSwgc3RhdGUpXG4gICAgICA6IEFycmF5LmlzQXJyYXkoc3RhdGVbcHJvcF0pXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBbcHJvcF06IHN0YXRlW3Byb3BdLmZpbHRlcihwID0+ICFwcm9wVmFsdWVzLmZpbmQocHJvcFZhbHVlID0+IHAuaWQgPT09IHByb3BWYWx1ZS5pZCkpXG4gICAgICAgIH1cbiAgICAgIDogLy8gaWYgbm90IGFycmF5LCB3ZSB3b24ndCByZW1vdmUgaXQsIHJlbW92ZSBkYXRhc2V0IHNob3VsZCBoYW5kbGUgaXRcbiAgICAgICAgc3RhdGU7XG5cbiAgLy8gbW92ZSB0byBzdGF0ZVRvQmVNZXJnZWRcbiAgY29uc3QgdG9CZU1lcmdlZCA9IHtcbiAgICBbdG9NZXJnZVByb3BdOiBzYXZlVW5tZXJnZWRcbiAgICAgID8gLy8gY2FsbCBtZXJnZSBzYXZlVW5tZXJnZWQgbWV0aG9kXG4gICAgICAgIHNhdmVVbm1lcmdlZChzdGF0ZVJlbW92ZWQsIHByb3BWYWx1ZXMpXG4gICAgICA6IC8vIGlmIHRvTWVyZ2VQcm9wIGlzIGFyYWF5LCBhcHBlbmQgdG8gaXRcbiAgICAgIEFycmF5LmlzQXJyYXkoc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSlcbiAgICAgID8gWy4uLnN0YXRlUmVtb3ZlZFt0b01lcmdlUHJvcF0sIC4uLnByb3BWYWx1ZXNdXG4gICAgICA6IC8vIHNhdmUgcHJvcFZhbHVlcyB0byB0b01lcmdlXG4gICAgICBpc09iamVjdChzdGF0ZVJlbW92ZWRbdG9NZXJnZVByb3BdKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4uc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXSxcbiAgICAgICAgICAuLi5wcm9wVmFsdWVzXG4gICAgICAgIH1cbiAgICAgIDogc3RhdGVSZW1vdmVkW3RvTWVyZ2VQcm9wXVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGVSZW1vdmVkLFxuICAgIC4uLnRvQmVNZXJnZWRcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZURhdGFzZXRBbmREZXBzPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YUlkVG9Vc2U6IHN0cmluZyxcbiAgb3B0aW9uczoge2RlbGV0ZU9yaWdpbmFsRGF0YXNldD86IGJvb2xlYW59ID0ge31cbik6IFQge1xuICAvLyBUaGUgc2FtZSBpZCBtZWFucyB0aGUgbmV3IHRhYmxlIG9jY3VwaWVzIHRoZSBvbGQgc2xvdCwgc28gdGhlIHByZXZpb3VzIHJvd3MgaGF2ZSB0byBnby5cbiAgY29uc3QgZGVsZXRlT3JpZ2luYWxEYXRhc2V0ID0gb3B0aW9ucy5kZWxldGVPcmlnaW5hbERhdGFzZXQgIT09IGZhbHNlIHx8IGRhdGFJZCA9PT0gZGF0YUlkVG9Vc2U7XG4gIHJldHVybiBjb21wb3NlXzxUPihbXG4gICAgYXBwbHlfKHJlcGxhY2VEYXRhc2V0RGVwc0luU3RhdGUsIHtkYXRhSWQsIGRhdGFJZFRvVXNlfSksXG4gICAgaWZfKGRlbGV0ZU9yaWdpbmFsRGF0YXNldCwgYXBwbHlfKHJlbW92ZURhdGFzZXRVcGRhdGVyLCB7ZGF0YUlkfSkpXG4gIF0pKHN0YXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVTdGF0ZUZvckRhdGFzZXRSZXBsYWNlPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YUlkVG9Vc2U6IHN0cmluZyxcbiAgb3B0aW9uczoge2RlbGV0ZU9yaWdpbmFsRGF0YXNldD86IGJvb2xlYW59ID0ge31cbik6IFQge1xuICBjb25zdCBzZXJpYWxpemVkU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZShzdGF0ZSwgc3RhdGUuc2NoZW1hKTtcbiAgY29uc3QgZGVsZXRlT3JpZ2luYWxEYXRhc2V0ID0gb3B0aW9ucy5kZWxldGVPcmlnaW5hbERhdGFzZXQgIT09IGZhbHNlIHx8IGRhdGFJZCA9PT0gZGF0YUlkVG9Vc2U7XG4gIGNvbnN0IG5leHRTdGF0ZSA9IHJlcGxhY2VEYXRhc2V0QW5kRGVwcyhzdGF0ZSwgZGF0YUlkLCBkYXRhSWRUb1VzZSwge2RlbGV0ZU9yaWdpbmFsRGF0YXNldH0pO1xuICAvLyBtYWtlIGEgY29weSBvZiBsYXllck9yZGVyLCBiZWNhdXNlIGxheWVyIGlkIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGl0IGJ5IGNhbGxpbmcgcmVtb3ZlTGF5ZXJVcGRhdGVyXG4gIGNvbnN0IHByZXNlcnZlTGF5ZXJPcmRlciA9IFsuLi5zdGF0ZS5sYXllck9yZGVyXTtcblxuICAvLyBXaGVuIHRoZSBvcmlnaW5hbCB0YWJsZSBzdGF5cywgdGhlIHJlcGxhY2VtZW50IHRha2VzIGl0cyBwbGFjZSBhbmQgdGhlIG9yaWdpbmFsIGZvbGxvd3MgaXQuXG4gIG5leHRTdGF0ZS5wcmVzZXJ2ZURhdGFzZXRPcmRlciA9IE9iamVjdC5rZXlzKHN0YXRlLmRhdGFzZXRzKS5mbGF0TWFwKGQgPT4ge1xuICAgIGlmIChkICE9PSBkYXRhSWQpIHtcbiAgICAgIHJldHVybiBbZF07XG4gICAgfVxuICAgIHJldHVybiBkZWxldGVPcmlnaW5hbERhdGFzZXQgPyBbZGF0YUlkVG9Vc2VdIDogW2RhdGFJZFRvVXNlLCBkXTtcbiAgfSk7XG5cbiAgLy8gcHJlc2VydmVMYXllck9yZGVyXG4gIGlmIChuZXh0U3RhdGUubGF5ZXJUb0JlTWVyZ2VkPy5sZW5ndGgpIHtcbiAgICAvLyBjb3B5IHNwbGl0IG1hcHMgdG8gYmUgbWVyZ2VkLCBiZWNhdXNlIGl0IHdpbGwgYmUgcmVzZXQgaW4gcmVtb3ZlIGxheWVyLlxuICAgIC8vIEtlZXAgdGhlIG9uZXMgb2YgYSBkYXRhc2V0IHJlcGxhY2VkIGEgbW9tZW50IGVhcmxpZXIgYW5kIG5vdCBtZXJnZWQgYmFjayB5ZXQ6XG4gICAgLy8gaXRzIGxheWVycyBhcmUgbm8gbG9uZ2VyIGluIHRoZSBjdXJyZW50IHNwbGl0IG1hcHMuXG4gICAgbmV4dFN0YXRlLnNwbGl0TWFwc1RvQmVNZXJnZWQgPSBjb21iaW5lU3BsaXRNYXBzQnlJbmRleChcbiAgICAgIHN0YXRlLnNwbGl0TWFwc1RvQmVNZXJnZWQsXG4gICAgICBzZXJpYWxpemVkU3RhdGU/LnNwbGl0TWFwcyA/PyBbXVxuICAgICk7XG4gICAgbmV4dFN0YXRlLmxheWVyT3JkZXIgPSBbLi4ucHJlc2VydmVMYXllck9yZGVyXTtcbiAgfVxuXG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbi8qKlxuICogVGhlIG9yZGVyIHRvIHByZXNlcnZlIGZvciB0aGUgaXRlbXMgdGhhdCB3aWxsIGJlIG1lcmdlZCBiYWNrLlxuICpcbiAqIGBpZHNgIGNvbWVzIGZyb20gdGhlIHNlcmlhbGl6ZWQgc3RhdGUsIHNvIGl0IGxpc3RzIGV2ZXJ5dGhpbmcgYnV0IHRoZSBpdGVtc1xuICogYW5vdGhlciBkYXRhc2V0J3MgcmVwbGFjZW1lbnQgcGFya2VkIGEgbW9tZW50IGFnbzogYW4gYXBwIHJlZnJlc2hpbmcgc2V2ZXJhbFxuICogZGF0YXNldHMgaW4gYSByb3cgcHJlcGFyZXMgdGhlIHNlY29uZCByZXBsYWNlbWVudCBiZWZvcmUgdGhlIGZpcnN0IG9uZSdzXG4gKiBpdGVtcyBoYXZlIG1lcmdlZCBiYWNrLiBXcml0aW5nIGBpZHNgIGFzIGl0IGlzIHdvdWxkIGRyb3AgdGhvc2UsIGFuZFxuICogYGluc2VydEl0ZW1CYXNlZE9uUHJlc2VydmVkT3JkZXJgIHB1dHMgYW4gaXRlbSBpdCBjYW5ub3QgcGxhY2UgYXQgdGhlIGZyb250IOKAlFxuICogc28gdGhleSB3b3VsZCBjb21lIGJhY2sgcmV2ZXJzZWQuIFdoZXJlIHRoZXkgYmVsb25nIGlzIHdoYXQgdGhlIG9yZGVyIHdyaXR0ZW5cbiAqIHdoZW4gdGhleSB3ZXJlIHBhcmtlZCBhbHJlYWR5IHNheXMsIHNvIHRoYXQgb3JkZXIgaXMga2VwdCBmb3IgdGhlbS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXNlcnZlZE9yZGVyV2l0aFBhcmtlZChcbiAgcHJldmlvdXNPcmRlcjogc3RyaW5nW10gPSBbXSxcbiAgaWRzOiBzdHJpbmdbXSxcbiAgcGFya2VkOiB7aWQ/OiBzdHJpbmd9W11cbik6IHN0cmluZ1tdIHtcbiAgY29uc3QgcGFya2VkSWRzID0gcGFya2VkXG4gICAgLm1hcChpdGVtID0+IGl0ZW0/LmlkKVxuICAgIC5maWx0ZXIoKGlkKTogaWQgaXMgc3RyaW5nID0+IEJvb2xlYW4oaWQpICYmICFpZHMuaW5jbHVkZXMoaWQgYXMgc3RyaW5nKSk7XG5cbiAgaWYgKCFwYXJrZWRJZHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGlkcztcbiAgfVxuXG4gIGNvbnN0IGtub3duID0gbmV3IFNldChbLi4uaWRzLCAuLi5wYXJrZWRJZHNdKTtcbiAgY29uc3Qgb3JkZXJlZCA9IChwcmV2aW91c09yZGVyIHx8IFtdKS5maWx0ZXIoaWQgPT4ga25vd24uaGFzKGlkKSk7XG4gIGNvbnN0IHJlc3QgPSBbLi4uaWRzLCAuLi5wYXJrZWRJZHNdLmZpbHRlcihpZCA9PiAhb3JkZXJlZC5pbmNsdWRlcyhpZCkpO1xuXG4gIHJldHVybiBbLi4ub3JkZXJlZCwgLi4ucmVzdF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlRGF0YXNldERlcHNJblN0YXRlPFQgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBULFxuICB7ZGF0YUlkLCBkYXRhSWRUb1VzZX06IHtkYXRhSWQ6IHN0cmluZzsgZGF0YUlkVG9Vc2U6IHN0cmluZ31cbik6IFQge1xuICBjb25zdCBzZXJpYWxpemVkU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZShzdGF0ZSwgc3RhdGUuc2NoZW1hKTtcblxuICBjb25zdCBuZXh0U3RhdGUgPSBzdGF0ZS5tZXJnZXJzLnJlZHVjZShcbiAgICAoXG4gICAgICBhY2N1U3RhdGUsXG4gICAgICB7cHJvcCwgdG9NZXJnZVByb3AsIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzLCBnZXRDaGlsZERhdGFzZXRJZHMsIHNhdmVVbm1lcmdlZCwgcHJlc2VydmVPcmRlcn1cbiAgICApID0+IHtcbiAgICAgIC8vIGdldCBkYXRhc2V0IGlkcyB0aGF0IGFyZSBkZXBlbmRzIG9uIHRoaXMgZGF0YXNldFxuICAgICAgY29uc3QgcHJvcHMgPSB0b0FycmF5KHByb3ApO1xuICAgICAgY29uc3QgdG9NZXJnZVByb3BzID0gdG9BcnJheSh0b01lcmdlUHJvcCk7XG4gICAgICBjb25zdCBzYXZlZFByb3BzID0gc2VyaWFsaXplZFN0YXRlID8gcHJvcHMubWFwKHAgPT4gc2VyaWFsaXplZFN0YXRlW3BdKSA6IFtdO1xuXG4gICAgICBsZXQgcmVwbGFjZWRTdGF0ZSA9IGFjY3VTdGF0ZTtcbiAgICAgIHNhdmVkUHJvcHMuZm9yRWFjaCgocHJvcFZhbHVlLCBpKSA9PiB7XG4gICAgICAgIGlmIChwcm9wVmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtZXJnZXJPcHRpb25zID0ge1xuICAgICAgICAgIHByb3A6IHByb3BzW2ldLFxuICAgICAgICAgIHRvTWVyZ2VQcm9wOiB0b01lcmdlUHJvcHNbaV0sXG4gICAgICAgICAgZ2V0Q2hpbGREYXRhc2V0SWRzLFxuICAgICAgICAgIHNhdmVVbm1lcmdlZFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFdoYXQgYW5vdGhlciBkYXRhc2V0J3MgcmVwbGFjZW1lbnQgcGFya2VkIGEgbW9tZW50IGFnbyBhbmQgaGFzIG5vdFxuICAgICAgICAvLyBtZXJnZWQgYmFjayB5ZXQsIHJlYWQgYmVmb3JlIHRoaXMgb25lIHBhcmtzIGFueXRoaW5nIG9mIGl0cyBvd24uXG4gICAgICAgIGNvbnN0IHBhcmtlZEVsc2V3aGVyZSA9XG4gICAgICAgICAgbWVyZ2VyT3B0aW9ucy50b01lcmdlUHJvcCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHRvQXJyYXkocmVwbGFjZWRTdGF0ZVttZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wXSA/PyBbXSlcbiAgICAgICAgICAgIDogW107XG5cbiAgICAgICAgY29uc3QgcmVwbGFjZWRJdGVtID1cbiAgICAgICAgICByZXBsYWNlUGFyZW50RGF0YXNldElkcz8uKHByb3BWYWx1ZSwgZGF0YUlkLCBkYXRhSWRUb1VzZSkgfHxcbiAgICAgICAgICBkZWZhdWx0UmVwbGFjZVBhcmVudERhdGFzZXRJZHMocHJvcFZhbHVlLCBkYXRhSWQsIGRhdGFJZFRvVXNlKTtcbiAgICAgICAgcmVwbGFjZWRTdGF0ZSA9IHJlcGxhY2VkSXRlbVxuICAgICAgICAgID8gcmVwbGFjZVByb3BWYWx1ZUluU3RhdGUocmVwbGFjZWRTdGF0ZSwgcmVwbGFjZWRJdGVtLCBtZXJnZXJPcHRpb25zKVxuICAgICAgICAgIDogcmVwbGFjZWRTdGF0ZTtcblxuICAgICAgICAvLyBPbmx5IHdoZW4gdGhpcyBkYXRhc2V0IGhhZCBpdGVtcyBvZiBpdHMgb3duIHRvIHBhcmsuIFRoZSB0b0JlTWVyZ2VkIGxpc3RcbiAgICAgICAgLy8gY2FuIHN0aWxsIGhvbGQgYW5vdGhlciBkYXRhc2V0J3MgaXRlbXMsIHJlcGxhY2VkIGEgbW9tZW50IGVhcmxpZXIgYW5kXG4gICAgICAgIC8vIG5vdCBtZXJnZWQgYmFjayB5ZXQ7IG92ZXJ3cml0aW5nIHRoZSBvcmRlciB0aGV5IHdlcmUgcGFya2VkIHdpdGggd291bGRcbiAgICAgICAgLy8gbWVyZ2UgdGhlbSBiYWNrIGluIHJldmVyc2UuXG4gICAgICAgIGlmIChcbiAgICAgICAgICByZXBsYWNlZEl0ZW0gJiZcbiAgICAgICAgICBtZXJnZXJPcHRpb25zLnRvTWVyZ2VQcm9wICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICByZXBsYWNlZFN0YXRlW21lcmdlck9wdGlvbnMudG9NZXJnZVByb3BdPy5sZW5ndGggJiZcbiAgICAgICAgICBwcmVzZXJ2ZU9yZGVyXG4gICAgICAgICkge1xuICAgICAgICAgIHJlcGxhY2VkU3RhdGVbcHJlc2VydmVPcmRlcl0gPSBwcmVzZXJ2ZWRPcmRlcldpdGhQYXJrZWQoXG4gICAgICAgICAgICByZXBsYWNlZFN0YXRlW3ByZXNlcnZlT3JkZXJdLFxuICAgICAgICAgICAgcHJvcFZhbHVlLm1hcChpdGVtID0+IGl0ZW0uaWQpLFxuICAgICAgICAgICAgcGFya2VkRWxzZXdoZXJlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByZXBsYWNlZFN0YXRlO1xuICAgIH0sXG4gICAgc3RhdGVcbiAgKTtcblxuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlUHJvcFZhbHVlSW5TdGF0ZShcbiAgc3RhdGUsXG4gIHJlcGxhY2VkSXRlbSxcbiAge3Byb3AsIHRvTWVyZ2VQcm9wLCBnZXRDaGlsZERhdGFzZXRJZHMsIHNhdmVVbm1lcmdlZH1cbikge1xuICAvLyBwcm9wIGlzIGRlcGVuZHMgb24gdGhlIGRhdGFzZXQgdG8gYmUgcmVwbGFjZWRcbiAgLy8gcmVtb3ZlIHByb3AgZnJvbSBzdGF0ZSwgYW5kIG1vdmUgaXQgdG8gdG9CZU1lcmdlZFxuICBsZXQgbmV4dFN0YXRlID0gbW92ZVZhbHVlVG9CZU1lcmdlZChzdGF0ZSwgcmVwbGFjZWRJdGVtLCB7cHJvcCwgdG9NZXJnZVByb3AsIHNhdmVVbm1lcmdlZH0pO1xuICBjb25zdCBjaGlsZERhdGFJZHMgPSBnZXRDaGlsZERhdGFzZXRJZHM/LihyZXBsYWNlZEl0ZW0pIHx8IGZpbmRDaGlsZERhdGFzZXRJZHMocmVwbGFjZWRJdGVtKTtcblxuICBpZiAoY2hpbGREYXRhSWRzKSB7XG4gICAgbmV4dFN0YXRlID0gdG9BcnJheShjaGlsZERhdGFJZHMpLnJlZHVjZSgoYWNjdSwgY2hpbGREYXRhSWQpID0+IHtcbiAgICAgIC8vIHNob3VsZG4ndCBuZWVkIHRvIGNoYW5nZSBjaGlsZCBkYXRhc2V0IGlkLFxuICAgICAgLy8gYnV0IHN0aWxsIG5lZWQgdG8gbW92ZSBvdXQgb2Ygc3RhdGUgYW5kIG1lcmdlIGJhY2sgaW5cbiAgICAgIHJldHVybiByZXBsYWNlRGF0YXNldEFuZERlcHMoYWNjdSwgY2hpbGREYXRhSWQsIGNoaWxkRGF0YUlkKTtcbiAgICB9LCBuZXh0U3RhdGUpO1xuICB9XG4gIHJldHVybiBuZXh0U3RhdGU7XG59XG5cbmNvbnN0IERBVEFTRVRfT1BfQUREX09QVElPTlMgPSB7XG4gIGF1dG9DcmVhdGVMYXllcnM6IHRydWUsXG4gIGNlbnRlck1hcDogZmFsc2UsXG4gIGtlZXBFeGlzdGluZ0NvbmZpZzogdHJ1ZVxufTtcblxuZnVuY3Rpb24gYXBwbHlEZXJpdmVkUHJvdG9EYXRhc2V0KHN0YXRlOiBWaXNTdGF0ZSwgcHJvdG86IFByb3RvRGF0YXNldCk6IFZpc1N0YXRlIHtcbiAgY29uc3QgcmVzdWx0SWQgPSBwcm90by5pbmZvLmlkO1xuICBpZiAoIXJlc3VsdElkKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGlmIChzdGF0ZS5kYXRhc2V0c1tyZXN1bHRJZF0pIHtcbiAgICBjb25zdCBuZXh0U3RhdGUgPSB1cGRhdGVEYXRhc2V0VXBkYXRlcihzdGF0ZSwge2RhdGFJZDogcmVzdWx0SWQsIGRhdGE6IHByb3RvLmRhdGF9KTtcbiAgICBjb25zdCBleGlzdGluZyA9IG5leHRTdGF0ZS5kYXRhc2V0c1tyZXN1bHRJZF07XG4gICAgaWYgKCFleGlzdGluZykge1xuICAgICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgICB9XG4gICAgZXhpc3RpbmcubWV0YWRhdGEgPSB7XG4gICAgICAuLi5leGlzdGluZy5tZXRhZGF0YSxcbiAgICAgIC4uLnByb3RvLm1ldGFkYXRhXG4gICAgfTtcbiAgICBleGlzdGluZy5sYWJlbCA9IHByb3RvLmluZm8ubGFiZWwgfHwgZXhpc3RpbmcubGFiZWw7XG4gICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgfVxuICByZXR1cm4gdXBkYXRlVmlzRGF0YVVwZGF0ZXIoc3RhdGUsIHtcbiAgICBkYXRhc2V0czogcHJvdG8sXG4gICAgb3B0aW9uczogREFUQVNFVF9PUF9BRERfT1BUSU9OU1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bkdyb3VwQnlVcGRhdGVyKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIGFjdGlvbjogVmlzU3RhdGVBY3Rpb25zLlJ1bkdyb3VwQnlVcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtzdGF0ZTogbmV4dFN0YXRlLCBwcm90b30gPSBleGVjdXRlR3JvdXBCeShzdGF0ZSwgYWN0aW9uKTtcbiAgcmV0dXJuIHByb3RvID8gYXBwbHlEZXJpdmVkUHJvdG9EYXRhc2V0KG5leHRTdGF0ZSwgcHJvdG8pIDogbmV4dFN0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVuSm9pblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUnVuSm9pblVwZGF0ZXJBY3Rpb25cbik6IFZpc1N0YXRlIHtcbiAgY29uc3Qge3N0YXRlOiBuZXh0U3RhdGUsIHByb3RvfSA9IGV4ZWN1dGVKb2luKHN0YXRlLCBhY3Rpb24pO1xuICByZXR1cm4gcHJvdG8gPyBhcHBseURlcml2ZWRQcm90b0RhdGFzZXQobmV4dFN0YXRlLCBwcm90bykgOiBuZXh0U3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydW5TcGF0aWFsSm9pblVwZGF0ZXIoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgYWN0aW9uOiBWaXNTdGF0ZUFjdGlvbnMuUnVuU3BhdGlhbEpvaW5VcGRhdGVyQWN0aW9uXG4pOiBWaXNTdGF0ZSB7XG4gIGNvbnN0IHtzdGF0ZTogbmV4dFN0YXRlLCBwcm90b30gPSBleGVjdXRlU3BhdGlhbEpvaW4oc3RhdGUsIGFjdGlvbik7XG4gIHJldHVybiBwcm90byA/IGFwcGx5RGVyaXZlZFByb3RvRGF0YXNldChuZXh0U3RhdGUsIHByb3RvKSA6IG5leHRTdGF0ZTtcbn1cblxuZXhwb3J0IHtcbiAgYWRkR3JvdXBCeVVwZGF0ZXIsXG4gIGFkZEpvaW5VcGRhdGVyLFxuICBhZGRTcGF0aWFsSm9pblVwZGF0ZXIsXG4gIHJlbW92ZURhdGFzZXRPcFVwZGF0ZXIsXG4gIHNldEdyb3VwQnlDb25maWdVcGRhdGVyLFxuICBzZXRKb2luQ29uZmlnVXBkYXRlcixcbiAgc2V0U3BhdGlhbEpvaW5Db25maWdVcGRhdGVyXG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsS0FBQSxHQUFBQyxPQUFBO0FBRUEsSUFBQUMsZ0JBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLFVBQUEsR0FBQUQsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFJLE9BQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFVBQUEsR0FBQUgsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFNLElBQUEsR0FBQUosc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFPLFFBQUEsR0FBQUwsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFRLEtBQUEsR0FBQU4sc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFTLEtBQUEsR0FBQVAsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFVLElBQUEsR0FBQVIsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFXLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQVosT0FBQTtBQVlBLElBQUFhLFFBQUEsR0FBQWIsT0FBQTtBQWtDQSxJQUFBYyxNQUFBLEdBQUFkLE9BQUE7QUF1Q0EsSUFBQWUsWUFBQSxHQUFBZixPQUFBO0FBRUEsSUFBQWdCLFVBQUEsR0FBQWhCLE9BQUE7QUFtQ0EsSUFBQWlCLE9BQUEsR0FBQWpCLE9BQUE7QUFD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
|