@kepler.gl/utils 3.0.0-alpha.0 → 3.0.0-alpha.2
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/aggregate-utils.js +1 -21
- package/dist/arrow-data-container.d.ts +54 -0
- package/dist/arrow-data-container.js +360 -0
- package/dist/color-utils.d.ts +8 -0
- package/dist/color-utils.js +38 -22
- package/dist/data-container-interface.d.ts +18 -0
- package/dist/data-container-interface.js +0 -20
- package/dist/data-container-utils.d.ts +1 -0
- package/dist/data-container-utils.js +10 -22
- package/dist/data-row.js +7 -22
- package/dist/data-scale-utils.js +7 -22
- package/dist/data-utils.d.ts +10 -12
- package/dist/data-utils.js +121 -63
- package/dist/dataset-utils.d.ts +13 -2
- package/dist/dataset-utils.js +85 -33
- package/dist/dom-to-image.d.ts +14 -14
- package/dist/dom-to-image.js +28 -89
- package/dist/dom-utils.d.ts +3 -0
- package/dist/dom-utils.js +33 -23
- package/dist/effect-utils.d.ts +23 -0
- package/dist/effect-utils.js +196 -0
- package/dist/export-map-html.js +7 -23
- package/dist/export-utils.js +12 -23
- package/dist/filter-utils.d.ts +11 -9
- package/dist/filter-utils.js +70 -55
- package/dist/format.d.ts +1 -0
- package/dist/format.js +17 -0
- package/dist/gl-utils.js +1 -21
- package/dist/h3-utils.d.ts +2 -1
- package/dist/h3-utils.js +9 -24
- package/dist/index.d.ts +16 -10
- package/dist/index.js +250 -558
- package/dist/indexed-data-container.js +1 -21
- package/dist/locale-utils.js +1 -21
- package/dist/map-info-utils.js +6 -22
- package/dist/map-style-utils/mapbox-gl-style-editor.d.ts +2 -1
- package/dist/map-style-utils/mapbox-gl-style-editor.js +8 -22
- package/dist/map-style-utils/mapbox-utils.js +7 -22
- package/dist/map-utils.d.ts +8 -2
- package/dist/map-utils.js +23 -26
- package/dist/mapbox-utils.js +7 -22
- package/dist/noop.d.ts +1 -0
- package/dist/noop.js +11 -0
- package/dist/notifications-utils.d.ts +14 -26
- package/dist/notifications-utils.js +8 -30
- package/dist/observe-dimensions.d.ts +1 -1
- package/dist/observe-dimensions.js +13 -29
- package/dist/plot.d.ts +6 -0
- package/dist/plot.js +31 -0
- package/dist/projection-utils.d.ts +9 -0
- package/dist/projection-utils.js +40 -22
- package/dist/row-data-container.js +1 -21
- package/dist/searcher-utils.js +7 -22
- package/dist/split-map-utils.d.ts +4 -1
- package/dist/split-map-utils.js +9 -23
- package/dist/time.d.ts +16 -0
- package/dist/time.js +89 -0
- package/dist/utils.d.ts +42 -10
- package/dist/utils.js +64 -26
- package/package.json +14 -13
package/dist/filter-utils.js
CHANGED
@@ -1,23 +1,3 @@
|
|
1
|
-
// Copyright (c) 2022 Uber Technologies, Inc.
|
2
|
-
//
|
3
|
-
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
-
// of this software and associated documentation files (the "Software"), to deal
|
5
|
-
// in the Software without restriction, including without limitation the rights
|
6
|
-
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
-
// copies of the Software, and to permit persons to whom the Software is
|
8
|
-
// furnished to do so, subject to the following conditions:
|
9
|
-
//
|
10
|
-
// The above copyright notice and this permission notice shall be included in
|
11
|
-
// all copies or substantial portions of the Software.
|
12
|
-
//
|
13
|
-
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
-
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
-
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
-
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
-
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
-
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
-
// THE SOFTWARE.
|
20
|
-
|
21
1
|
"use strict";
|
22
2
|
|
23
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
@@ -62,6 +42,7 @@ exports.getFilterPlot = getFilterPlot;
|
|
62
42
|
exports.getIntervalBins = getIntervalBins;
|
63
43
|
exports.isValidTimeDomain = isValidTimeDomain;
|
64
44
|
exports.getTimeWidgetHintFormatter = getTimeWidgetHintFormatter;
|
45
|
+
exports.isSideFilter = isSideFilter;
|
65
46
|
exports.getFilterIdInFeature = exports.featureToFilterValue = exports.getPolygonFilterFunctor = exports.LAYER_FILTERS = exports.FILTER_ID_LENGTH = exports.DEFAULT_FILTER_STRUCTURE = exports.FILTER_COMPONENTS = exports.LIMITED_FILTER_EFFECT_PROPS = exports.FILTER_UPDATER_PROPS = exports.enlargedHistogramBins = exports.histogramBins = exports.TimestampStepMap = exports.durationYear = exports.durationWeek = exports.durationDay = exports.durationHour = exports.durationMinute = exports.durationSecond = void 0;
|
66
47
|
|
67
48
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
@@ -167,9 +148,10 @@ var DEFAULT_FILTER_STRUCTURE = {
|
|
167
148
|
// [string]
|
168
149
|
freeze: false,
|
169
150
|
id: null,
|
151
|
+
enabled: true,
|
170
152
|
// time range filter specific
|
171
153
|
fixedDomain: false,
|
172
|
-
|
154
|
+
view: _constants.FILTER_VIEW_TYPES.side,
|
173
155
|
isAnimating: false,
|
174
156
|
animationWindow: _constants.ANIMATION_WINDOW.free,
|
175
157
|
speed: 1,
|
@@ -198,11 +180,15 @@ var LAYER_FILTERS = [_constants.FILTER_TYPES.polygon];
|
|
198
180
|
|
199
181
|
exports.LAYER_FILTERS = LAYER_FILTERS;
|
200
182
|
|
201
|
-
function getDefaultFilter(
|
183
|
+
function getDefaultFilter() {
|
184
|
+
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
185
|
+
dataId = _ref.dataId,
|
186
|
+
id = _ref.id;
|
187
|
+
|
202
188
|
return _objectSpread(_objectSpread({}, DEFAULT_FILTER_STRUCTURE), {}, {
|
203
189
|
// store it as dataId and it could be one or many
|
204
|
-
dataId: (0, _utils.toArray)(dataId),
|
205
|
-
id: (0, _utils.generateHashId)(FILTER_ID_LENGTH)
|
190
|
+
dataId: dataId ? (0, _utils.toArray)(dataId) : [],
|
191
|
+
id: id || (0, _utils.generateHashId)(FILTER_ID_LENGTH)
|
206
192
|
});
|
207
193
|
}
|
208
194
|
/**
|
@@ -275,6 +261,8 @@ var filterValidators = (0, _defineProperty2["default"])({}, _constants.FILTER_TY
|
|
275
261
|
*/
|
276
262
|
|
277
263
|
function validateFilter(dataset, filter) {
|
264
|
+
var _filter$view;
|
265
|
+
|
278
266
|
// match filter.dataId
|
279
267
|
var failed = {
|
280
268
|
dataset: dataset,
|
@@ -288,7 +276,9 @@ function validateFilter(dataset, filter) {
|
|
288
276
|
return failed;
|
289
277
|
}
|
290
278
|
|
291
|
-
var initializeFilter = _objectSpread(_objectSpread(_objectSpread({}, getDefaultFilter(
|
279
|
+
var initializeFilter = _objectSpread(_objectSpread(_objectSpread({}, getDefaultFilter({
|
280
|
+
dataId: filter.dataId
|
281
|
+
})), filter), {}, {
|
292
282
|
dataId: filterDataId,
|
293
283
|
name: (0, _utils.toArray)(filter.name)
|
294
284
|
});
|
@@ -306,7 +296,7 @@ function validateFilter(dataset, filter) {
|
|
306
296
|
}
|
307
297
|
|
308
298
|
updatedFilter.value = adjustValueToFilterDomain(filter.value, updatedFilter);
|
309
|
-
updatedFilter.
|
299
|
+
updatedFilter.view = (_filter$view = filter.view) !== null && _filter$view !== void 0 ? _filter$view : updatedFilter.view;
|
310
300
|
|
311
301
|
if (updatedFilter.value === null) {
|
312
302
|
// cannot adjust saved value to filter
|
@@ -347,9 +337,9 @@ function validateFilterYAxis(filter, dataset) {
|
|
347
337
|
yAxis = _filter.yAxis; // TODO: validate yAxis against other datasets
|
348
338
|
|
349
339
|
if (yAxis) {
|
350
|
-
var matchedAxis = fields.find(function (
|
351
|
-
var name =
|
352
|
-
type =
|
340
|
+
var matchedAxis = fields.find(function (_ref2) {
|
341
|
+
var name = _ref2.name,
|
342
|
+
type = _ref2.type;
|
353
343
|
return name === yAxis.name && type === yAxis.type;
|
354
344
|
});
|
355
345
|
filter = matchedAxis ? _objectSpread(_objectSpread({}, filter), {}, {
|
@@ -372,7 +362,8 @@ function validateFilterYAxis(filter, dataset) {
|
|
372
362
|
|
373
363
|
function getFilterProps(field, fieldDomain) {
|
374
364
|
var filterProps = _objectSpread(_objectSpread({}, fieldDomain), {}, {
|
375
|
-
fieldType: field.type
|
365
|
+
fieldType: field.type,
|
366
|
+
view: _constants.FILTER_VIEW_TYPES.side
|
376
367
|
});
|
377
368
|
|
378
369
|
switch (field.type) {
|
@@ -407,7 +398,7 @@ function getFilterProps(field, fieldDomain) {
|
|
407
398
|
// @ts-expect-error
|
408
399
|
return _objectSpread(_objectSpread({}, filterProps), {}, {
|
409
400
|
type: _constants.FILTER_TYPES.timeRange,
|
410
|
-
|
401
|
+
view: _constants.FILTER_VIEW_TYPES.enlarged,
|
411
402
|
fixedDomain: true,
|
412
403
|
value: filterProps.domain,
|
413
404
|
gpu: true
|
@@ -461,6 +452,11 @@ var getPolygonFilterFunctor = function getPolygonFilterFunctor(layer, filter, da
|
|
461
452
|
return pos.every(Number.isFinite) && isInPolygon(pos, filter.value);
|
462
453
|
};
|
463
454
|
|
455
|
+
case _constants.LAYER_TYPES.geojson:
|
456
|
+
return function (data) {
|
457
|
+
return layer.isInPolygon(data, data.index, filter.value);
|
458
|
+
};
|
459
|
+
|
464
460
|
default:
|
465
461
|
return function () {
|
466
462
|
return true;
|
@@ -496,6 +492,10 @@ function getFilterFunction(field, dataId, filter, layers, dataContainer) {
|
|
496
492
|
return true;
|
497
493
|
};
|
498
494
|
|
495
|
+
if (filter.enabled === false) {
|
496
|
+
return defaultFunc;
|
497
|
+
}
|
498
|
+
|
499
499
|
switch (filter.type) {
|
500
500
|
case _constants.FILTER_TYPES.range:
|
501
501
|
return function (data) {
|
@@ -553,13 +553,15 @@ function getFilterFunction(field, dataId, filter, layers, dataContainer) {
|
|
553
553
|
}
|
554
554
|
|
555
555
|
function updateFilterDataId(dataId) {
|
556
|
-
return getDefaultFilter(
|
556
|
+
return getDefaultFilter({
|
557
|
+
dataId: dataId
|
558
|
+
});
|
557
559
|
}
|
558
560
|
|
559
|
-
function filterDataByFilterTypes(
|
560
|
-
var dynamicDomainFilters =
|
561
|
-
cpuFilters =
|
562
|
-
filterFuncs =
|
561
|
+
function filterDataByFilterTypes(_ref3, dataContainer) {
|
562
|
+
var dynamicDomainFilters = _ref3.dynamicDomainFilters,
|
563
|
+
cpuFilters = _ref3.cpuFilters,
|
564
|
+
filterFuncs = _ref3.filterFuncs;
|
563
565
|
var filteredIndexForDomain = [];
|
564
566
|
var filteredIndex = [];
|
565
567
|
var filterContext = {
|
@@ -623,10 +625,10 @@ function getFilterRecord(dataId, filters) {
|
|
623
625
|
function diffFilters(filterRecord) {
|
624
626
|
var oldFilterRecord = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
625
627
|
var filterChanged = {};
|
626
|
-
Object.entries(filterRecord).forEach(function (
|
627
|
-
var
|
628
|
-
record =
|
629
|
-
items =
|
628
|
+
Object.entries(filterRecord).forEach(function (_ref4) {
|
629
|
+
var _ref5 = (0, _slicedToArray2["default"])(_ref4, 2),
|
630
|
+
record = _ref5[0],
|
631
|
+
items = _ref5[1];
|
630
632
|
|
631
633
|
items.forEach(function (filter) {
|
632
634
|
var oldFilter = (oldFilterRecord[record] || []).find(function (f) {
|
@@ -671,9 +673,9 @@ function diffFilters(filterRecord) {
|
|
671
673
|
// eslint-disable-next-line complexity
|
672
674
|
|
673
675
|
|
674
|
-
function adjustValueToFilterDomain(value,
|
675
|
-
var domain =
|
676
|
-
type =
|
676
|
+
function adjustValueToFilterDomain(value, _ref6) {
|
677
|
+
var domain = _ref6.domain,
|
678
|
+
type = _ref6.type;
|
677
679
|
|
678
680
|
if (!type) {
|
679
681
|
return false;
|
@@ -795,7 +797,12 @@ function getTimestampFieldDomain(dataContainer, valueAccessor) {
|
|
795
797
|
var domain = ScaleUtils.getLinearDomain(mappedValue);
|
796
798
|
var defaultTimeFormat = getTimeWidgetTitleFormatter(domain);
|
797
799
|
var step = 0.01;
|
798
|
-
var diff = domain[1] - domain[0];
|
800
|
+
var diff = domain[1] - domain[0]; // in case equal timestamp add 1 second padding to prevent break
|
801
|
+
|
802
|
+
if (!diff) {
|
803
|
+
domain[1] = domain[0] + 1000;
|
804
|
+
}
|
805
|
+
|
799
806
|
var entry = TimestampStepMap.find(function (f) {
|
800
807
|
return f.max >= diff;
|
801
808
|
});
|
@@ -896,7 +903,7 @@ function getTimeWidgetTitleFormatter(domain) {
|
|
896
903
|
|
897
904
|
|
898
905
|
function isFilterValidToSave(filter) {
|
899
|
-
return (filter === null || filter === void 0 ? void 0 : filter.type) && Array.isArray(filter === null || filter === void 0 ? void 0 : filter.name) && ((filter === null || filter === void 0 ? void 0 : filter.name.length) || (filter === null || filter === void 0 ? void 0 : filter.layerId.length))
|
906
|
+
return (filter === null || filter === void 0 ? void 0 : filter.type) && Array.isArray(filter === null || filter === void 0 ? void 0 : filter.name) && ((filter === null || filter === void 0 ? void 0 : filter.name.length) || (filter === null || filter === void 0 ? void 0 : filter.layerId.length));
|
900
907
|
}
|
901
908
|
/**
|
902
909
|
* Sanity check on filters to prepare for save
|
@@ -962,9 +969,9 @@ function getColumnFilterProps(filter, dataset) {
|
|
962
969
|
x: mappedValue[rowIndex],
|
963
970
|
y: row.valueAt(fieldIdx)
|
964
971
|
};
|
965
|
-
}, true).filter(function (
|
966
|
-
var x =
|
967
|
-
y =
|
972
|
+
}, true).filter(function (_ref7) {
|
973
|
+
var x = _ref7.x,
|
974
|
+
y = _ref7.y;
|
968
975
|
return Number.isFinite(x) && Number.isFinite(y);
|
969
976
|
}).sort(function (a, b) {
|
970
977
|
return (0, _d3Array.ascending)(a.x, b.x);
|
@@ -1144,7 +1151,9 @@ function generatePolygonFilter(layers, feature) {
|
|
1144
1151
|
var name = layers.map(function (l) {
|
1145
1152
|
return l.config.label;
|
1146
1153
|
});
|
1147
|
-
var filter = getDefaultFilter(
|
1154
|
+
var filter = getDefaultFilter({
|
1155
|
+
dataId: dataId
|
1156
|
+
});
|
1148
1157
|
return _objectSpread(_objectSpread({}, filter), {}, {
|
1149
1158
|
fixedDomain: true,
|
1150
1159
|
type: _constants.FILTER_TYPES.polygon,
|
@@ -1191,7 +1200,7 @@ function validateFiltersUpdateDatasets(state) {
|
|
1191
1200
|
var datasetIds = (0, _utils.toArray)(filter.dataId); // we can merge a filter only if all datasets in filter.dataId are loaded
|
1192
1201
|
|
1193
1202
|
if (datasetIds.every(function (d) {
|
1194
|
-
return datasets[d];
|
1203
|
+
return datasets[d] && !state.isMergingDatasets[d];
|
1195
1204
|
})) {
|
1196
1205
|
// all datasetIds in filter must be present the state datasets
|
1197
1206
|
var _datasetIds$reduce = datasetIds.reduce(function (acc, datasetId) {
|
@@ -1207,7 +1216,7 @@ function validateFiltersUpdateDatasets(state) {
|
|
1207
1216
|
if (updatedFilter) {
|
1208
1217
|
return _objectSpread(_objectSpread({}, acc), {}, {
|
1209
1218
|
// merge filter props
|
1210
|
-
filter: acc.filter ? _objectSpread(_objectSpread({}, acc.filter), mergeFilterDomainStep(acc, updatedFilter)) : updatedFilter,
|
1219
|
+
filter: acc.filter ? _objectSpread(_objectSpread({}, acc.filter), mergeFilterDomainStep(acc.filter, updatedFilter)) : updatedFilter,
|
1211
1220
|
applyToDatasets: [].concat((0, _toConsumableArray2["default"])(acc.applyToDatasets), [datasetId]),
|
1212
1221
|
augmentedDatasets: _objectSpread(_objectSpread({}, acc.augmentedDatasets), {}, (0, _defineProperty2["default"])({}, datasetId, updatedDataset))
|
1213
1222
|
});
|
@@ -1226,6 +1235,8 @@ function validateFiltersUpdateDatasets(state) {
|
|
1226
1235
|
if (validatedFilter && (0, _lodash2["default"])(datasetIds, applyToDatasets)) {
|
1227
1236
|
validated.push(validatedFilter);
|
1228
1237
|
updatedDatasets = _objectSpread(_objectSpread({}, updatedDatasets), augmentedDatasets);
|
1238
|
+
} else {
|
1239
|
+
failed.push(filter);
|
1229
1240
|
}
|
1230
1241
|
} else {
|
1231
1242
|
failed.push(filter);
|
@@ -1264,9 +1275,9 @@ function getFilterPlot(filter, dataset) {
|
|
1264
1275
|
x: mappedValue[rowIndex],
|
1265
1276
|
y: row.valueAt(fieldIdx)
|
1266
1277
|
};
|
1267
|
-
}, true).filter(function (
|
1268
|
-
var x =
|
1269
|
-
y =
|
1278
|
+
}, true).filter(function (_ref8) {
|
1279
|
+
var x = _ref8.x,
|
1280
|
+
y = _ref8.y;
|
1270
1281
|
return Number.isFinite(x) && Number.isFinite(y);
|
1271
1282
|
}).sort(function (a, b) {
|
1272
1283
|
return (0, _d3Array.ascending)(a.x, b.x);
|
@@ -1315,4 +1326,8 @@ function getTimeWidgetHintFormatter(domain) {
|
|
1315
1326
|
var diff = domain[1] - domain[0];
|
1316
1327
|
return diff > durationWeek ? 'L' : diff > durationDay ? 'L LT' : diff > durationHour ? 'LT' : 'LTS';
|
1317
1328
|
}
|
1318
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9maWx0ZXItdXRpbHMudHMiXSwibmFtZXMiOlsiZHVyYXRpb25TZWNvbmQiLCJkdXJhdGlvbk1pbnV0ZSIsImR1cmF0aW9uSG91ciIsImR1cmF0aW9uRGF5IiwiZHVyYXRpb25XZWVrIiwiZHVyYXRpb25ZZWFyIiwiVGltZXN0YW1wU3RlcE1hcCIsIm1heCIsInN0ZXAiLCJOdW1iZXIiLCJQT1NJVElWRV9JTkZJTklUWSIsImhpc3RvZ3JhbUJpbnMiLCJlbmxhcmdlZEhpc3RvZ3JhbUJpbnMiLCJGSUxURVJfVVBEQVRFUl9QUk9QUyIsImRhdGFJZCIsIm5hbWUiLCJsYXllcklkIiwiTElNSVRFRF9GSUxURVJfRUZGRUNUX1BST1BTIiwiU3VwcG9ydGVkUGxvdFR5cGUiLCJGSUxURVJfVFlQRVMiLCJ0aW1lUmFuZ2UiLCJBTExfRklFTERfVFlQRVMiLCJpbnRlZ2VyIiwicmVhbCIsInJhbmdlIiwiRklMVEVSX0NPTVBPTkVOVFMiLCJzZWxlY3QiLCJtdWx0aVNlbGVjdCIsInBvbHlnb24iLCJERUZBVUxUX0ZJTFRFUl9TVFJVQ1RVUkUiLCJmcmVlemUiLCJpZCIsImZpeGVkRG9tYWluIiwiZW5sYXJnZWQiLCJpc0FuaW1hdGluZyIsImFuaW1hdGlvbldpbmRvdyIsIkFOSU1BVElPTl9XSU5ET1ciLCJmcmVlIiwic3BlZWQiLCJ0eXBlIiwiZmllbGRJZHgiLCJkb21haW4iLCJ2YWx1ZSIsInBsb3RUeXBlIiwiUExPVF9UWVBFUyIsImhpc3RvZ3JhbSIsInlBeGlzIiwiaW50ZXJ2YWwiLCJncHUiLCJGSUxURVJfSURfTEVOR1RIIiwiTEFZRVJfRklMVEVSUyIsImdldERlZmF1bHRGaWx0ZXIiLCJzaG91bGRBcHBseUZpbHRlciIsImZpbHRlciIsImRhdGFzZXRJZCIsImRhdGFJZHMiLCJpbmNsdWRlcyIsInZhbGlkYXRlUG9seWdvbkZpbHRlciIsImRhdGFzZXQiLCJsYXllcnMiLCJmYWlsZWQiLCJpc1ZhbGlkRmlsdGVyVmFsdWUiLCJpc1ZhbGlkRGF0YXNldCIsImxheWVyIiwiZmluZCIsImwiLCJmaWx0ZXJWYWxpZGF0b3JzIiwidmFsaWRhdGVGaWx0ZXIiLCJmaWx0ZXJEYXRhSWQiLCJmaWx0ZXJEYXRhc2V0SW5kZXgiLCJpbmRleE9mIiwiaW5pdGlhbGl6ZUZpbHRlciIsImZpZWxkTmFtZSIsImFwcGx5RmlsdGVyRmllbGROYW1lIiwibWVyZ2VEb21haW4iLCJ1cGRhdGVkRmlsdGVyIiwidXBkYXRlZERhdGFzZXQiLCJhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluIiwidmFsaWRhdGVGaWx0ZXJZQXhpcyIsInZhbGlkYXRlRmlsdGVyV2l0aERhdGEiLCJoYXNPd25Qcm9wZXJ0eSIsImZpZWxkcyIsIm1hdGNoZWRBeGlzIiwiZ2V0RmlsdGVyUGxvdCIsImdldEZpbHRlclByb3BzIiwiZmllbGQiLCJmaWVsZERvbWFpbiIsImZpbHRlclByb3BzIiwiZmllbGRUeXBlIiwidHlwZU9wdGlvbnMiLCJzdHJpbmciLCJkYXRlIiwidGltZXN0YW1wIiwiZ2V0UG9seWdvbkZpbHRlckZ1bmN0b3IiLCJkYXRhQ29udGFpbmVyIiwiZ2V0UG9zaXRpb24iLCJnZXRQb3NpdGlvbkFjY2Vzc29yIiwiTEFZRVJfVFlQRVMiLCJwb2ludCIsImljb24iLCJkYXRhIiwicG9zIiwiZXZlcnkiLCJpc0Zpbml0ZSIsImlzSW5Qb2x5Z29uIiwiYXJjIiwibGluZSIsImhleGFnb25JZCIsImRhdGFUb0ZlYXR1cmUiLCJjZW50cm9pZHMiLCJjZW50cm9pZCIsImluZGV4IiwiZ2V0RmlsdGVyRnVuY3Rpb24iLCJ2YWx1ZUFjY2Vzc29yIiwiZGVmYXVsdEZ1bmMiLCJkIiwiaXNJblJhbmdlIiwibWFwcGVkVmFsdWUiLCJhY2Nlc3NvciIsIkFycmF5IiwiaXNBcnJheSIsImZvcm1hdCIsImxlbmd0aCIsImxheWVyRmlsdGVyRnVuY3Rpb25zIiwibWFwIiwiY29uZmlnIiwiZmlsdGVyRnVuYyIsInVwZGF0ZUZpbHRlckRhdGFJZCIsImZpbHRlckRhdGFCeUZpbHRlclR5cGVzIiwiZHluYW1pY0RvbWFpbkZpbHRlcnMiLCJjcHVGaWx0ZXJzIiwiZmlsdGVyRnVuY3MiLCJmaWx0ZXJlZEluZGV4Rm9yRG9tYWluIiwiZmlsdGVyZWRJbmRleCIsImZpbHRlckNvbnRleHQiLCJmaWx0ZXJGdW5jQ2FsbGVyIiwibnVtUm93cyIsImkiLCJtYXRjaEZvckRvbWFpbiIsInB1c2giLCJtYXRjaEZvclJlbmRlciIsImdldEZpbHRlclJlY29yZCIsImZpbHRlcnMiLCJvcHQiLCJmaWx0ZXJSZWNvcmQiLCJkeW5hbWljRG9tYWluIiwiY3B1IiwiZm9yRWFjaCIsImYiLCJpZ25vcmVEb21haW4iLCJjcHVPbmx5IiwiZGlmZkZpbHRlcnMiLCJvbGRGaWx0ZXJSZWNvcmQiLCJmaWx0ZXJDaGFuZ2VkIiwiT2JqZWN0IiwiZW50cmllcyIsInJlY29yZCIsIml0ZW1zIiwib2xkRmlsdGVyIiwicHJvcCIsImZpbHRlcmVkVmFsdWUiLCJnZXROdW1lcmljRmllbGREb21haW4iLCJtYXBJbmRleCIsIlNjYWxlVXRpbHMiLCJnZXRMaW5lYXJEb21haW4iLCJkaWZmIiwiZ2V0TnVtZXJpY1N0ZXBTaXplIiwiZm9ybWF0TnVtYmVyQnlTdGVwIiwiZ2V0SGlzdG9ncmFtIiwiZW5sYXJnZWRIaXN0b2dyYW0iLCJNYXRoIiwiYWJzIiwieCIsImV4cG9uZW50aWFsRm9ybSIsInRvRXhwb25lbnRpYWwiLCJleHBvbmVudCIsInBhcnNlRmxvYXQiLCJzcGxpdCIsIkRlY2ltYWwiLCJwb3ciLCJ0b051bWJlciIsImdldFRpbWVzdGFtcEZpZWxkRG9tYWluIiwiZGVmYXVsdFRpbWVGb3JtYXQiLCJnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIiLCJlbnRyeSIsImhpc3RvZ3JhbUNvbnN0cnVjdCIsImJpbnMiLCJ0aHJlc2hvbGRzIiwiYmluIiwiY291bnQiLCJ4MCIsIngxIiwidmFsIiwiYm91bmQiLCJmbG9vciIsImNlaWwiLCJpc1ZhbGlkVGltZURvbWFpbiIsImlzRmlsdGVyVmFsaWRUb1NhdmUiLCJ2IiwiaXNOYU4iLCJCb29sZWFuIiwiaW5wdXQiLCJjb29yZGluYXRlcyIsImdldENvbHVtbkZpbHRlclByb3BzIiwiZ2V0Q29sdW1uRmllbGRJZHgiLCJDb25zb2xlIiwid2FybiIsImxpbmVDaGFydCIsInNlcmllcyIsInJvdyIsInJvd0luZGV4IiwieSIsInZhbHVlQXQiLCJzb3J0IiwiYSIsImIiLCJ5RG9tYWluIiwieERvbWFpbiIsImdldERlZmF1bHRGaWx0ZXJQbG90VHlwZSIsImZpbHRlclBsb3RUeXBlcyIsImFwcGx5RmlsdGVyc1RvRGF0YXNldHMiLCJkYXRhc2V0SWRzIiwiZGF0YXNldHMiLCJyZWR1Y2UiLCJhY2MiLCJsYXllcnNUb0ZpbHRlciIsImFwcGxpZWRGaWx0ZXJzIiwidGFibGUiLCJmaWx0ZXJUYWJsZSIsIm9wdGlvbiIsImZpZWxkSW5kZXgiLCJuZXdGaWx0ZXIiLCJtZXJnZUZpbHRlckRvbWFpblN0ZXAiLCJhc3NpZ24iLCJjb21iaW5lZERvbWFpbiIsImZlYXR1cmVUb0ZpbHRlclZhbHVlIiwiZmVhdHVyZSIsImZpbHRlcklkIiwicHJvcGVydGllcyIsImdldEZpbHRlcklkSW5GZWF0dXJlIiwiZ2VuZXJhdGVQb2x5Z29uRmlsdGVyIiwibm90TnVsbG9yVW5kZWZpbmVkIiwibGFiZWwiLCJpc1Zpc2libGUiLCJmaWx0ZXJEYXRhc2V0Q1BVIiwic3RhdGUiLCJkYXRhc2V0RmlsdGVycyIsImNwdUZpbHRlcmVkRGF0YXNldCIsImZpbHRlclRhYmxlQ1BVIiwidmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMiLCJmaWx0ZXJzVG9WYWxpZGF0ZSIsInZhbGlkYXRlZCIsInVwZGF0ZWREYXRhc2V0cyIsImF1Z21lbnRlZERhdGFzZXRzIiwiYXBwbHlUb0RhdGFzZXRzIiwidmFsaWRhdGVkRmlsdGVyIiwiZ2V0SW50ZXJ2YWxCaW5zIiwia2V5cyIsInZhbHVlcyIsImdldFRpbWVXaWRnZXRIaW50Rm9ybWF0dGVyIiwidW5kZWZpbmVkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7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Q0FBQ0MsT0FBTixDQUFjL0UsTUFBZCxLQUF5QkEsTUFBTSxDQUFDNkQsS0FBUCxDQUFhN0YsTUFBTSxDQUFDOEYsUUFBcEIsQ0FBaEM7QUFDRDs7QUFFTSxTQUFTNEosMEJBQVQsQ0FBb0MxTixNQUFwQyxFQUFrRjtBQUN2RixNQUFJLENBQUMySixpQkFBaUIsQ0FBQzNKLE1BQUQsQ0FBdEIsRUFBZ0M7QUFDOUIsV0FBTzJOLFNBQVA7QUFDRDs7QUFFRCxNQUFNL0YsSUFBSSxHQUFHNUgsTUFBTSxDQUFDLENBQUQsQ0FBTixHQUFZQSxNQUFNLENBQUMsQ0FBRCxDQUEvQjtBQUNBLFNBQU80SCxJQUFJLEdBQUdqSyxZQUFQLEdBQ0gsR0FERyxHQUVIaUssSUFBSSxHQUFHbEssV0FBUCxHQUNBLE1BREEsR0FFQWtLLElBQUksR0FBR25LLFlBQVAsR0FDQSxJQURBLEdBRUEsS0FOSjtBQU9EIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIyIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHthc2NlbmRpbmcsIGV4dGVudCwgaGlzdG9ncmFtIGFzIGQzSGlzdG9ncmFtLCB0aWNrc30gZnJvbSAnZDMtYXJyYXknO1xuaW1wb3J0IGtleU1pcnJvciBmcm9tICdrZXltaXJyb3InO1xuaW1wb3J0IENvbnNvbGUgZnJvbSAnZ2xvYmFsL2NvbnNvbGUnO1xuaW1wb3J0IGdldCBmcm9tICdsb2Rhc2guZ2V0JztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC5pc2VxdWFsJztcblxuaW1wb3J0IGJvb2xlYW5XaXRoaW4gZnJvbSAnQHR1cmYvYm9vbGVhbi13aXRoaW4nO1xuaW1wb3J0IHtwb2ludCBhcyB0dXJmUG9pbnR9IGZyb20gJ0B0dXJmL2hlbHBlcnMnO1xuaW1wb3J0IHtEZWNpbWFsfSBmcm9tICdkZWNpbWFsLmpzJztcbmltcG9ydCB7XG4gIEFMTF9GSUVMRF9UWVBFUyxcbiAgRklMVEVSX1RZUEVTLFxuICBBTklNQVRJT05fV0lORE9XLFxuICBQTE9UX1RZUEVTLFxuICBMQVlFUl9UWVBFU1xufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQgKiBhcyBTY2FsZVV0aWxzIGZyb20gJy4vZGF0YS1zY2FsZS11dGlscyc7XG5pbXBvcnQge2gzSXNWYWxpZH0gZnJvbSAnaDMtanMnO1xuXG5pbXBvcnQge1xuICBNaWxsaXNlY29uZCxcbiAgRW50cmllcyxcbiAgRmllbGQsXG4gIFBhcnNlZEZpbHRlcixcbiAgRmlsdGVyLFxuICBGaWx0ZXJCYXNlLFxuICBQb2x5Z29uRmlsdGVyLFxuICBGaWVsZERvbWFpbixcbiAgVGltZVJhbmdlRmllbGREb21haW4sXG4gIEhpc3RvZ3JhbUJpbixcbiAgRmVhdHVyZSxcbiAgRmVhdHVyZVZhbHVlLFxuICBMaW5lQ2hhcnQsXG4gIFRpbWVSYW5nZUZpbHRlcixcbiAgUmFuZ2VGaWVsZERvbWFpbixcbiAgRmlsdGVyRGF0YXNldE9wdCxcbiAgRmlsdGVyUmVjb3JkXG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuXG5pbXBvcnQge0RhdGFDb250YWluZXJJbnRlcmZhY2V9IGZyb20gJy4vZGF0YS1jb250YWluZXItaW50ZXJmYWNlJztcbmltcG9ydCB7Z2VuZXJhdGVIYXNoSWQsIHNldCwgdG9BcnJheX0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQge25vdE51bGxvclVuZGVmaW5lZCwgdGltZVRvVW5peE1pbGxpLCB1bmlxdWV9IGZyb20gJy4vZGF0YS11dGlscyc7XG5pbXBvcnQge2dldENlbnRyb2lkfSBmcm9tICcuL2gzLXV0aWxzJztcblxuZXhwb3J0IGNvbnN0IGR1cmF0aW9uU2Vjb25kID0gMTAwMDtcbmV4cG9ydCBjb25zdCBkdXJhdGlvbk1pbnV0ZSA9IGR1cmF0aW9uU2Vjb25kICogNjA7XG5leHBvcnQgY29uc3QgZHVyYXRpb25Ib3VyID0gZHVyYXRpb25NaW51dGUgKiA2MDtcbmV4cG9ydCBjb25zdCBkdXJhdGlvbkRheSA9IGR1cmF0aW9uSG91ciAqIDI0O1xuZXhwb3J0IGNvbnN0IGR1cmF0aW9uV2VlayA9IGR1cmF0aW9uRGF5ICogNztcbmV4cG9ydCBjb25zdCBkdXJhdGlvblllYXIgPSBkdXJhdGlvbkRheSAqIDM2NTtcblxuZXhwb3J0IHR5cGUgRmlsdGVyUmVzdWx0ID0ge1xuICBmaWx0ZXJlZEluZGV4Rm9yRG9tYWluPzogbnVtYmVyW107XG4gIGZpbHRlcmVkSW5kZXg/OiBudW1iZXJbXTtcbn07XG5cbmV4cG9ydCB0eXBlIEZpbHRlckNoYW5nZWQgPSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBba2V5IGluIGtleW9mIEZpbHRlclJlY29yZF06IHtcbiAgICBba2V5OiBzdHJpbmddOiAnYWRkZWQnIHwgJ2RlbGV0ZWQnIHwgJ25hbWVfY2hhbmdlZCcgfCAndmFsdWVfY2hhbmdlZCcgfCAnZGF0YUlkX2NoYW5nZWQnO1xuICB9IHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIGRhdGFWYWx1ZUFjY2Vzc29yID0gKGRhdGE6IHtpbmRleDogbnVtYmVyfSkgPT4gbnVtYmVyIHwgbnVsbDtcblxuZXhwb3J0IGNvbnN0IFRpbWVzdGFtcFN0ZXBNYXAgPSBbXG4gIHttYXg6IDEsIHN0ZXA6IDAuMDV9LFxuICB7bWF4OiAxMCwgc3RlcDogMC4xfSxcbiAge21heDogMTAwLCBzdGVwOiAxfSxcbiAge21heDogNTAwLCBzdGVwOiA1fSxcbiAge21heDogMTAwMCwgc3RlcDogMTB9LFxuICB7bWF4OiA1MDAwLCBzdGVwOiA1MH0sXG4gIHttYXg6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSwgc3RlcDogMTAwMH1cbl07XG5cbmV4cG9ydCBjb25zdCBoaXN0b2dyYW1CaW5zID0gMzA7XG5leHBvcnQgY29uc3QgZW5sYXJnZWRIaXN0b2dyYW1CaW5zID0gMTAwO1xuXG5leHBvcnQgY29uc3QgRklMVEVSX1VQREFURVJfUFJPUFMgPSBrZXlNaXJyb3Ioe1xuICBkYXRhSWQ6IG51bGwsXG4gIG5hbWU6IG51bGwsXG4gIGxheWVySWQ6IG51bGxcbn0pO1xuXG5leHBvcnQgY29uc3QgTElNSVRFRF9GSUxURVJfRUZGRUNUX1BST1BTID0ga2V5TWlycm9yKHtcbiAgW0ZJTFRFUl9VUERBVEVSX1BST1BTLm5hbWVdOiBudWxsXG59KTtcbi8qKlxuICogTWF4IG51bWJlciBvZiBmaWx0ZXIgdmFsdWUgYnVmZmVycyB0aGF0IGRlY2suZ2wgcHJvdmlkZXNcbiAqL1xuXG5jb25zdCBTdXBwb3J0ZWRQbG90VHlwZSA9IHtcbiAgW0ZJTFRFUl9UWVBFUy50aW1lUmFuZ2VdOiB7XG4gICAgZGVmYXVsdDogJ2hpc3RvZ3JhbScsXG4gICAgW0FMTF9GSUVMRF9UWVBFUy5pbnRlZ2VyXTogJ2xpbmVDaGFydCcsXG4gICAgW0FMTF9GSUVMRF9UWVBFUy5yZWFsXTogJ2xpbmVDaGFydCdcbiAgfSxcbiAgW0ZJTFRFUl9UWVBFUy5yYW5nZV06IHtcbiAgICBkZWZhdWx0OiAnaGlzdG9ncmFtJyxcbiAgICBbQUxMX0ZJRUxEX1RZUEVTLmludGVnZXJdOiAnbGluZUNoYXJ0JyxcbiAgICBbQUxMX0ZJRUxEX1RZUEVTLnJlYWxdOiAnbGluZUNoYXJ0J1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgRklMVEVSX0NPTVBPTkVOVFMgPSB7XG4gIFtGSUxURVJfVFlQRVMuc2VsZWN0XTogJ1NpbmdsZVNlbGVjdEZpbHRlcicsXG4gIFtGSUxURVJfVFlQRVMubXVsdGlTZWxlY3RdOiAnTXVsdGlTZWxlY3RGaWx0ZXInLFxuICBbRklMVEVSX1RZUEVTLnRpbWVSYW5nZV06ICdUaW1lUmFuZ2VGaWx0ZXInLFxuICBbRklMVEVSX1RZUEVTLnJhbmdlXTogJ1JhbmdlRmlsdGVyJyxcbiAgW0ZJTFRFUl9UWVBFUy5wb2x5Z29uXTogJ1BvbHlnb25GaWx0ZXInXG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9GSUxURVJfU1RSVUNUVVJFID0ge1xuICBkYXRhSWQ6IFtdLCAvLyBbc3RyaW5nXVxuICBmcmVlemU6IGZhbHNlLFxuICBpZDogbnVsbCxcblxuICAvLyB0aW1lIHJhbmdlIGZpbHRlciBzcGVjaWZpY1xuICBmaXhlZERvbWFpbjogZmFsc2UsXG4gIGVubGFyZ2VkOiBmYWxzZSxcbiAgaXNBbmltYXRpbmc6IGZhbHNlLFxuICBhbmltYXRpb25XaW5kb3c6IEFOSU1BVElPTl9XSU5ET1cuZnJlZSxcbiAgc3BlZWQ6IDEsXG5cbiAgLy8gZmllbGQgc3BlY2lmaWNcbiAgbmFtZTogW10sIC8vIHN0cmluZ1xuICB0eXBlOiBudWxsLFxuICBmaWVsZElkeDogW10sIC8vIFtpbnRlZ2VyXVxuICBkb21haW46IG51bGwsXG4gIHZhbHVlOiBudWxsLFxuXG4gIC8vIHBsb3RcbiAgcGxvdFR5cGU6IFBMT1RfVFlQRVMuaGlzdG9ncmFtLFxuICB5QXhpczogbnVsbCxcbiAgaW50ZXJ2YWw6IG51bGwsXG5cbiAgLy8gbW9kZVxuICBncHU6IGZhbHNlXG59O1xuXG5leHBvcnQgY29uc3QgRklMVEVSX0lEX0xFTkdUSCA9IDQ7XG5cbmV4cG9ydCBjb25zdCBMQVlFUl9GSUxURVJTID0gW0ZJTFRFUl9UWVBFUy5wb2x5Z29uXTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBmaWx0ZXIgd2l0aCBhIGRhdGFzZXQgaWQgYXMgZGF0YUlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0RmlsdGVyKGRhdGFJZDogc3RyaW5nIHwgbnVsbCB8IHN0cmluZ1tdKTogRmlsdGVyQmFzZTxMaW5lQ2hhcnQ+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5ERUZBVUxUX0ZJTFRFUl9TVFJVQ1RVUkUsXG4gICAgLy8gc3RvcmUgaXQgYXMgZGF0YUlkIGFuZCBpdCBjb3VsZCBiZSBvbmUgb3IgbWFueVxuICAgIGRhdGFJZDogdG9BcnJheShkYXRhSWQpLFxuICAgIGlkOiBnZW5lcmF0ZUhhc2hJZChGSUxURVJfSURfTEVOR1RIKVxuICB9O1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGEgZmlsdGVyIGlzIHZhbGlkIGJhc2VkIG9uIHRoZSBnaXZlbiBkYXRhSWRcbiAqIEBwYXJhbSAgZmlsdGVyIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gIGRhdGFzZXRJZCBpZCB0byB2YWxpZGF0ZSBmaWx0ZXIgYWdhaW5zdFxuICogQHJldHVybiB0cnVlIGlmIGEgZmlsdGVyIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZEFwcGx5RmlsdGVyKGZpbHRlcjogRmlsdGVyLCBkYXRhc2V0SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBkYXRhSWRzID0gdG9BcnJheShmaWx0ZXIuZGF0YUlkKTtcbiAgcmV0dXJuIGRhdGFJZHMuaW5jbHVkZXMoZGF0YXNldElkKSAmJiBmaWx0ZXIudmFsdWUgIT09IG51bGw7XG59XG5cbmludGVyZmFjZSBLZXBsZXJUYWJsZU1vZGVsPEssIEw+IHtcbiAgaWQ6IHN0cmluZztcbiAgZ2V0Q29sdW1uRmllbGRJZHgoY29sdW1uTmFtZTogc3RyaW5nKTogbnVtYmVyO1xuICBmaWx0ZXJUYWJsZShmaWx0ZXJzOiBGaWx0ZXJbXSwgbGF5ZXJzOiBMW10sIG9wdD86IEZpbHRlckRhdGFzZXRPcHQpOiBLO1xuICBnZXRDb2x1bW5GaWx0ZXJQcm9wcyhjb2x1bW5OYW1lOiBzdHJpbmcpOiBGaWVsZFsnZmlsdGVyUHJvcHMnXSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGRhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2U7XG4gIGZpbHRlclRhYmxlQ1BVKGZpbHRlcnM6IEZpbHRlcltdLCBsYXllcnM6IExbXSk6IEs7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGFuZCBtb2RpZmllcyBwb2x5Z29uIGZpbHRlciBzdHJ1Y3R1cmVcbiAqIEBwYXJhbSBkYXRhc2V0XG4gKiBAcGFyYW0gZmlsdGVyXG4gKiBAcGFyYW0gbGF5ZXJzXG4gKiBAcmV0dXJuIC0ge2ZpbHRlciwgZGF0YXNldH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUG9seWdvbkZpbHRlcjxLIGV4dGVuZHMgS2VwbGVyVGFibGVNb2RlbDxLLCBMPiwgTCBleHRlbmRzIHtpZDogc3RyaW5nfT4oXG4gIGRhdGFzZXQ6IEssXG4gIGZpbHRlcjogUG9seWdvbkZpbHRlcixcbiAgbGF5ZXJzOiBMW11cbik6IHtmaWx0ZXI6IFBvbHlnb25GaWx0ZXIgfCBudWxsOyBkYXRhc2V0OiBLfSB7XG4gIGNvbnN0IGZhaWxlZCA9IHtkYXRhc2V0LCBmaWx0ZXI6IG51bGx9O1xuICBjb25zdCB7dmFsdWUsIGxheWVySWQsIHR5cGUsIGRhdGFJZH0gPSBmaWx0ZXI7XG5cbiAgaWYgKCFsYXllcklkIHx8ICFpc1ZhbGlkRmlsdGVyVmFsdWUodHlwZSwgdmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhaWxlZDtcbiAgfVxuXG4gIGNvbnN0IGlzVmFsaWREYXRhc2V0ID0gZGF0YUlkLmluY2x1ZGVzKGRhdGFzZXQuaWQpO1xuXG4gIGlmICghaXNWYWxpZERhdGFzZXQpIHtcbiAgICByZXR1cm4gZmFpbGVkO1xuICB9XG5cbiAgY29uc3QgbGF5ZXIgPSBsYXllcnMuZmluZChsID0+IGxheWVySWQuaW5jbHVkZXMobC5pZCkpO1xuXG4gIGlmICghbGF5ZXIpIHtcbiAgICByZXR1cm4gZmFpbGVkO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBmaWx0ZXI6IHtcbiAgICAgIC4uLmZpbHRlcixcbiAgICAgIGZyZWV6ZTogdHJ1ZSxcbiAgICAgIGZpZWxkSWR4OiBbXVxuICAgIH0sXG4gICAgZGF0YXNldFxuICB9O1xufVxuXG4vKipcbiAqIEN1c3RvbSBmaWx0ZXIgdmFsaWRhdG9yc1xuICovXG5jb25zdCBmaWx0ZXJWYWxpZGF0b3JzID0ge1xuICBbRklMVEVSX1RZUEVTLnBvbHlnb25dOiB2YWxpZGF0ZVBvbHlnb25GaWx0ZXJcbn07XG5cbi8qKlxuICogRGVmYXVsdCB2YWxpZGF0ZSBmaWx0ZXIgZnVuY3Rpb25cbiAqIEBwYXJhbSBkYXRhc2V0XG4gKiBAcGFyYW0gZmlsdGVyXG4gKiBAcmV0dXJuIC0ge2ZpbHRlciwgZGF0YXNldH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRmlsdGVyPEsgZXh0ZW5kcyBLZXBsZXJUYWJsZU1vZGVsPEssIEw+LCBMPihcbiAgZGF0YXNldDogSyxcbiAgZmlsdGVyOiBQYXJzZWRGaWx0ZXJcbik6IHtmaWx0ZXI6IEZpbHRlciB8IG51bGw7IGRhdGFzZXQ6IEt9IHtcbiAgLy8gbWF0Y2ggZmlsdGVyLmRhdGFJZFxuICBjb25zdCBmYWlsZWQgPSB7ZGF0YXNldCwgZmlsdGVyOiBudWxsfTtcbiAgY29uc3QgZmlsdGVyRGF0YUlkID0gdG9BcnJheShmaWx0ZXIuZGF0YUlkKTtcblxuICBjb25zdCBmaWx0ZXJEYXRhc2V0SW5kZXggPSBmaWx0ZXJEYXRhSWQuaW5kZXhPZihkYXRhc2V0LmlkKTtcbiAgaWYgKGZpbHRlckRhdGFzZXRJbmRleCA8IDAgfHwgIXRvQXJyYXkoZmlsdGVyLm5hbWUpW2ZpbHRlckRhdGFzZXRJbmRleF0pIHtcbiAgICAvLyB0aGUgY3VycmVudCBmaWx0ZXIgaXMgbm90IG1hcHBlZCBhZ2FpbnN0IHRoZSBjdXJyZW50IGRhdGFzZXRcbiAgICByZXR1cm4gZmFpbGVkO1xuICB9XG5cbiAgY29uc3QgaW5pdGlhbGl6ZUZpbHRlcjogRmlsdGVyID0ge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAuLi5nZXREZWZhdWx0RmlsdGVyKGZpbHRlci5kYXRhSWQpLFxuICAgIC4uLmZpbHRlcixcbiAgICBkYXRhSWQ6IGZpbHRlckRhdGFJZCxcbiAgICBuYW1lOiB0b0FycmF5KGZpbHRlci5uYW1lKVxuICB9O1xuXG4gIGNvbnN0IGZpZWxkTmFtZSA9IGluaXRpYWxpemVGaWx0ZXIubmFtZVtmaWx0ZXJEYXRhc2V0SW5kZXhdO1xuICBjb25zdCB7ZmlsdGVyOiB1cGRhdGVkRmlsdGVyLCBkYXRhc2V0OiB1cGRhdGVkRGF0YXNldH0gPSBhcHBseUZpbHRlckZpZWxkTmFtZShcbiAgICBpbml0aWFsaXplRmlsdGVyLFxuICAgIGRhdGFzZXQsXG4gICAgZmllbGROYW1lLFxuICAgIGZpbHRlckRhdGFzZXRJbmRleCxcbiAgICB7bWVyZ2VEb21haW46IHRydWV9XG4gICk7XG5cbiAgaWYgKCF1cGRhdGVkRmlsdGVyKSB7XG4gICAgcmV0dXJuIGZhaWxlZDtcbiAgfVxuXG4gIHVwZGF0ZWRGaWx0ZXIudmFsdWUgPSBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluKGZpbHRlci52YWx1ZSwgdXBkYXRlZEZpbHRlcik7XG4gIHVwZGF0ZWRGaWx0ZXIuZW5sYXJnZWQgPVxuICAgIHR5cGVvZiBmaWx0ZXIuZW5sYXJnZWQgPT09ICdib29sZWFuJyA/IGZpbHRlci5lbmxhcmdlZCA6IHVwZGF0ZWRGaWx0ZXIuZW5sYXJnZWQ7XG5cbiAgaWYgKHVwZGF0ZWRGaWx0ZXIudmFsdWUgPT09IG51bGwpIHtcbiAgICAvLyBjYW5ub3QgYWRqdXN0IHNhdmVkIHZhbHVlIHRvIGZpbHRlclxuICAgIHJldHVybiBmYWlsZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGZpbHRlcjogdmFsaWRhdGVGaWx0ZXJZQXhpcyh1cGRhdGVkRmlsdGVyLCB1cGRhdGVkRGF0YXNldCksXG4gICAgZGF0YXNldDogdXBkYXRlZERhdGFzZXRcbiAgfTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCBmaWx0ZXIgY29uZmlnIHdpdGggbmV3IGRhdGEsXG4gKiBjYWxjdWxhdGUgZG9tYWluIGFuZCBmaWVsZElkeCBiYXNlZCBuZXcgZmllbGRzIGFuZCBkYXRhXG4gKlxuICogQHBhcmFtIGRhdGFzZXRcbiAqIEBwYXJhbSBmaWx0ZXIgLSBmaWx0ZXIgdG8gYmUgdmFsaWRhdGVcbiAqIEBwYXJhbSBsYXllcnMgLSBsYXllcnNcbiAqIEByZXR1cm4gdmFsaWRhdGVkIGZpbHRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVGaWx0ZXJXaXRoRGF0YTxLIGV4dGVuZHMgS2VwbGVyVGFibGVNb2RlbDxLLCBMPiwgTD4oXG4gIGRhdGFzZXQ6IEssXG4gIGZpbHRlcjogUGFyc2VkRmlsdGVyLFxuICBsYXllcnM6IExbXVxuKToge2ZpbHRlcjogRmlsdGVyOyBkYXRhc2V0OiBLfSB7XG4gIHJldHVybiBmaWx0ZXIudHlwZSAmJiBmaWx0ZXJWYWxpZGF0b3JzLmhhc093blByb3BlcnR5KGZpbHRlci50eXBlKVxuICAgID8gZmlsdGVyVmFsaWRhdG9yc1tmaWx0ZXIudHlwZV0oZGF0YXNldCwgZmlsdGVyLCBsYXllcnMpXG4gICAgOiB2YWxpZGF0ZUZpbHRlcihkYXRhc2V0LCBmaWx0ZXIpO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIFlBeGlzXG4gKiBAcGFyYW0gZmlsdGVyXG4gKiBAcGFyYW0gZGF0YXNldFxuICogQHJldHVybiB7Kn1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVGaWx0ZXJZQXhpcyhmaWx0ZXIsIGRhdGFzZXQpIHtcbiAgLy8gVE9ETzogdmFsaWRhdGUgeUF4aXMgYWdhaW5zdCBvdGhlciBkYXRhc2V0c1xuXG4gIGNvbnN0IHtmaWVsZHN9ID0gZGF0YXNldDtcbiAgY29uc3Qge3lBeGlzfSA9IGZpbHRlcjtcbiAgLy8gVE9ETzogdmFsaWRhdGUgeUF4aXMgYWdhaW5zdCBvdGhlciBkYXRhc2V0c1xuICBpZiAoeUF4aXMpIHtcbiAgICBjb25zdCBtYXRjaGVkQXhpcyA9IGZpZWxkcy5maW5kKCh7bmFtZSwgdHlwZX0pID0+IG5hbWUgPT09IHlBeGlzLm5hbWUgJiYgdHlwZSA9PT0geUF4aXMudHlwZSk7XG5cbiAgICBmaWx0ZXIgPSBtYXRjaGVkQXhpc1xuICAgICAgPyB7XG4gICAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICAgIHlBeGlzOiBtYXRjaGVkQXhpcyxcbiAgICAgICAgICAuLi5nZXRGaWx0ZXJQbG90KHsuLi5maWx0ZXIsIHlBeGlzOiBtYXRjaGVkQXhpc30sIGRhdGFzZXQpXG4gICAgICAgIH1cbiAgICAgIDogZmlsdGVyO1xuICB9XG5cbiAgcmV0dXJuIGZpbHRlcjtcbn1cblxuLyoqXG4gKiBHZXQgZGVmYXVsdCBmaWx0ZXIgcHJvcCBiYXNlZCBvbiBmaWVsZCB0eXBlXG4gKlxuICogQHBhcmFtIGZpZWxkXG4gKiBAcGFyYW0gZmllbGREb21haW5cbiAqIEByZXR1cm5zIGRlZmF1bHQgZmlsdGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWx0ZXJQcm9wcyhcbiAgZmllbGQ6IEZpZWxkLFxuICBmaWVsZERvbWFpbjogRmllbGREb21haW5cbik6IFBhcnRpYWw8RmlsdGVyPiAmIHtmaWVsZFR5cGU6IHN0cmluZ30ge1xuICBjb25zdCBmaWx0ZXJQcm9wcyA9IHtcbiAgICAuLi5maWVsZERvbWFpbixcbiAgICBmaWVsZFR5cGU6IGZpZWxkLnR5cGVcbiAgfTtcblxuICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5yZWFsOlxuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmludGVnZXI6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5maWx0ZXJQcm9wcyxcbiAgICAgICAgdmFsdWU6IGZpZWxkRG9tYWluLmRvbWFpbixcbiAgICAgICAgdHlwZTogRklMVEVSX1RZUEVTLnJhbmdlLFxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIHR5cGVPcHRpb25zOiBbRklMVEVSX1RZUEVTLnJhbmdlXSxcbiAgICAgICAgZ3B1OiB0cnVlXG4gICAgICB9O1xuXG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMuYm9vbGVhbjpcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmZpbHRlclByb3BzLFxuICAgICAgICB0eXBlOiBGSUxURVJfVFlQRVMuc2VsZWN0LFxuICAgICAgICB2YWx1ZTogdHJ1ZSxcbiAgICAgICAgZ3B1OiBmYWxzZVxuICAgICAgfTtcblxuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnN0cmluZzpcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5kYXRlOlxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZmlsdGVyUHJvcHMsXG4gICAgICAgIHR5cGU6IEZJTFRFUl9UWVBFUy5tdWx0aVNlbGVjdCxcbiAgICAgICAgdmFsdWU6IFtdLFxuICAgICAgICBncHU6IGZhbHNlXG4gICAgICB9O1xuXG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMudGltZXN0YW1wOlxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZmlsdGVyUHJvcHMsXG4gICAgICAgIHR5cGU6IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UsXG4gICAgICAgIGVubGFyZ2VkOiB0cnVlLFxuICAgICAgICBmaXhlZERvbWFpbjogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGZpbHRlclByb3BzLmRvbWFpbixcbiAgICAgICAgZ3B1OiB0cnVlXG4gICAgICB9O1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZ2V0UG9seWdvbkZpbHRlckZ1bmN0b3IgPSAobGF5ZXIsIGZpbHRlciwgZGF0YUNvbnRhaW5lcikgPT4ge1xuICBjb25zdCBnZXRQb3NpdGlvbiA9IGxheWVyLmdldFBvc2l0aW9uQWNjZXNzb3IoZGF0YUNvbnRhaW5lcik7XG5cbiAgc3dpdGNoIChsYXllci50eXBlKSB7XG4gICAgY2FzZSBMQVlFUl9UWVBFUy5wb2ludDpcbiAgICBjYXNlIExBWUVSX1RZUEVTLmljb246XG4gICAgICByZXR1cm4gZGF0YSA9PiB7XG4gICAgICAgIGNvbnN0IHBvcyA9IGdldFBvc2l0aW9uKGRhdGEpO1xuICAgICAgICByZXR1cm4gcG9zLmV2ZXJ5KE51bWJlci5pc0Zpbml0ZSkgJiYgaXNJblBvbHlnb24ocG9zLCBmaWx0ZXIudmFsdWUpO1xuICAgICAgfTtcbiAgICBjYXNlIExBWUVSX1RZUEVTLmFyYzpcbiAgICBjYXNlIExBWUVSX1RZUEVTLmxpbmU6XG4gICAgICByZXR1cm4gZGF0YSA9PiB7XG4gICAgICAgIGNvbnN0IHBvcyA9IGdldFBvc2l0aW9uKGRhdGEpO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHBvcy5ldmVyeShOdW1iZXIuaXNGaW5pdGUpICYmXG4gICAgICAgICAgW1xuICAgICAgICAgICAgW3Bvc1swXSwgcG9zWzFdXSxcbiAgICAgICAgICAgIFtwb3NbM10sIHBvc1s0XV1cbiAgICAgICAgICBdLmV2ZXJ5KHBvaW50ID0+IGlzSW5Qb2x5Z29uKHBvaW50LCBmaWx0ZXIudmFsdWUpKVxuICAgICAgICApO1xuICAgICAgfTtcbiAgICBjYXNlIExBWUVSX1RZUEVTLmhleGFnb25JZDpcbiAgICAgIGlmIChsYXllci5kYXRhVG9GZWF0dXJlICYmIGxheWVyLmRhdGFUb0ZlYXR1cmUuY2VudHJvaWRzKSB7XG4gICAgICAgIHJldHVybiBkYXRhID0+IHtcbiAgICAgICAgICAvLyBudWxsIG9yIGdldENlbnRyb2lkKHtpZH0pXG4gICAgICAgICAgY29uc3QgY2VudHJvaWQgPSBsYXllci5kYXRhVG9GZWF0dXJlLmNlbnRyb2lkc1tkYXRhLmluZGV4XTtcbiAgICAgICAgICByZXR1cm4gY2VudHJvaWQgJiYgaXNJblBvbHlnb24oY2VudHJvaWQsIGZpbHRlci52YWx1ZSk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YSA9PiB7XG4gICAgICAgIGNvbnN0IGlkID0gZ2V0UG9zaXRpb24oZGF0YSk7XG4gICAgICAgIGlmICghaDNJc1ZhbGlkKGlkKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwb3MgPSBnZXRDZW50cm9pZCh7aWR9KTtcbiAgICAgICAgcmV0dXJuIHBvcy5ldmVyeShOdW1iZXIuaXNGaW5pdGUpICYmIGlzSW5Qb2x5Z29uKHBvcywgZmlsdGVyLnZhbHVlKTtcbiAgICAgIH07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAoKSA9PiB0cnVlO1xuICB9XG59O1xuXG4vKipcbiAqIEBwYXJhbSBwYXJhbSBBbiBvYmplY3QgdGhhdCByZXByZXNlbnRzIGEgcm93IHJlY29yZC5cbiAqIEBwYXJhbSBwYXJhbS5pbmRleCBJbmRleCBvZiB0aGUgcm93IGluIGRhdGEgY29udGFpbmVyLlxuICogQHJldHVybnMgUmV0dXJucyB0cnVlIHRvIGtlZXAgdGhlIGVsZW1lbnQsIG9yIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xudHlwZSBmaWx0ZXJGdW5jdGlvbiA9IChkYXRhOiB7aW5kZXg6IG51bWJlcn0pID0+IGJvb2xlYW47XG4vKipcbiAqIEBwYXJhbSBmaWVsZCBkYXRhc2V0IEZpZWxkXG4gKiBAcGFyYW0gZGF0YUlkIERhdGFzZXQgaWRcbiAqIEBwYXJhbSBmaWx0ZXIgRmlsdGVyIG9iamVjdFxuICogQHBhcmFtIGxheWVycyBsaXN0IG9mIGxheWVycyB0byBmaWx0ZXIgdXBvblxuICogQHBhcmFtIGRhdGFDb250YWluZXIgRGF0YSBjb250YWluZXJcbiAqIEByZXR1cm4gZmlsdGVyRnVuY3Rpb25cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbHRlckZ1bmN0aW9uPEwgZXh0ZW5kcyB7Y29uZmlnOiB7ZGF0YUlkOiBzdHJpbmcgfCBudWxsfTsgaWQ6IHN0cmluZ30+KFxuICBmaWVsZDogRmllbGQgfCBudWxsLFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZmlsdGVyOiBGaWx0ZXIsXG4gIGxheWVyczogTFtdLFxuICBkYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlXG4pOiBmaWx0ZXJGdW5jdGlvbiB7XG4gIC8vIGZpZWxkIGNvdWxkIGJlIG51bGwgaW4gcG9seWdvbiBmaWx0ZXJcbiAgY29uc3QgdmFsdWVBY2Nlc3NvciA9IGZpZWxkID8gZmllbGQudmFsdWVBY2Nlc3NvciA6IGRhdGEgPT4gbnVsbDtcbiAgY29uc3QgZGVmYXVsdEZ1bmMgPSBkID0+IHRydWU7XG5cbiAgc3dpdGNoIChmaWx0ZXIudHlwZSkge1xuICAgIGNhc2UgRklMVEVSX1RZUEVTLnJhbmdlOlxuICAgICAgcmV0dXJuIGRhdGEgPT4gaXNJblJhbmdlKHZhbHVlQWNjZXNzb3IoZGF0YSksIGZpbHRlci52YWx1ZSk7XG4gICAgY2FzZSBGSUxURVJfVFlQRVMubXVsdGlTZWxlY3Q6XG4gICAgICByZXR1cm4gZGF0YSA9PiBmaWx0ZXIudmFsdWUuaW5jbHVkZXModmFsdWVBY2Nlc3NvcihkYXRhKSk7XG4gICAgY2FzZSBGSUxURVJfVFlQRVMuc2VsZWN0OlxuICAgICAgcmV0dXJuIGRhdGEgPT4gdmFsdWVBY2Nlc3NvcihkYXRhKSA9PT0gZmlsdGVyLnZhbHVlO1xuICAgIGNhc2UgRklMVEVSX1RZUEVTLnRpbWVSYW5nZTpcbiAgICAgIGlmICghZmllbGQpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRGdW5jO1xuICAgICAgfVxuICAgICAgY29uc3QgbWFwcGVkVmFsdWUgPSBnZXQoZmllbGQsIFsnZmlsdGVyUHJvcHMnLCAnbWFwcGVkVmFsdWUnXSk7XG4gICAgICBjb25zdCBhY2Nlc3NvciA9IEFycmF5LmlzQXJyYXkobWFwcGVkVmFsdWUpXG4gICAgICAgID8gZGF0YSA9PiBtYXBwZWRWYWx1ZVtkYXRhLmluZGV4XVxuICAgICAgICA6IGRhdGEgPT4gdGltZVRvVW5peE1pbGxpKHZhbHVlQWNjZXNzb3IoZGF0YSksIGZpZWxkLmZvcm1hdCk7XG4gICAgICByZXR1cm4gZGF0YSA9PiBpc0luUmFuZ2UoYWNjZXNzb3IoZGF0YSksIGZpbHRlci52YWx1ZSk7XG4gICAgY2FzZSBGSUxURVJfVFlQRVMucG9seWdvbjpcbiAgICAgIGlmICghbGF5ZXJzIHx8ICFsYXllcnMubGVuZ3RoIHx8ICFmaWx0ZXIubGF5ZXJJZCkge1xuICAgICAgICByZXR1cm4gZGVmYXVsdEZ1bmM7XG4gICAgICB9XG4gICAgICBjb25zdCBsYXllckZpbHRlckZ1bmN0aW9ucyA9IGZpbHRlci5sYXllcklkXG4gICAgICAgIC5tYXAoaWQgPT4gbGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBpZCkpXG4gICAgICAgIC5maWx0ZXIobCA9PiBsICYmIGwuY29uZmlnLmRhdGFJZCA9PT0gZGF0YUlkKVxuICAgICAgICAubWFwKGxheWVyID0+IGdldFBvbHlnb25GaWx0ZXJGdW5jdG9yKGxheWVyLCBmaWx0ZXIsIGRhdGFDb250YWluZXIpKTtcblxuICAgICAgcmV0dXJuIGRhdGEgPT4gbGF5ZXJGaWx0ZXJGdW5jdGlvbnMuZXZlcnkoZmlsdGVyRnVuYyA9PiBmaWx0ZXJGdW5jKGRhdGEpKTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGRlZmF1bHRGdW5jO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVGaWx0ZXJEYXRhSWQoZGF0YUlkOiBzdHJpbmcpOiBGaWx0ZXJCYXNlPExpbmVDaGFydD4ge1xuICByZXR1cm4gZ2V0RGVmYXVsdEZpbHRlcihkYXRhSWQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyRGF0YUJ5RmlsdGVyVHlwZXMoXG4gIHtcbiAgICBkeW5hbWljRG9tYWluRmlsdGVycyxcbiAgICBjcHVGaWx0ZXJzLFxuICAgIGZpbHRlckZ1bmNzXG4gIH06IHtcbiAgICBkeW5hbWljRG9tYWluRmlsdGVyczogRmlsdGVyW10gfCBudWxsO1xuICAgIGNwdUZpbHRlcnM6IEZpbHRlcltdIHwgbnVsbDtcbiAgICBmaWx0ZXJGdW5jczoge1xuICAgICAgW2tleTogc3RyaW5nXTogZmlsdGVyRnVuY3Rpb247XG4gICAgfTtcbiAgfSxcbiAgZGF0YUNvbnRhaW5lcjogRGF0YUNvbnRhaW5lckludGVyZmFjZVxuKTogRmlsdGVyUmVzdWx0IHtcbiAgY29uc3QgZmlsdGVyZWRJbmRleEZvckRvbWFpbjogbnVtYmVyW10gPSBbXTtcbiAgY29uc3QgZmlsdGVyZWRJbmRleDogbnVtYmVyW10gPSBbXTtcblxuICBjb25zdCBmaWx0ZXJDb250ZXh0ID0ge2luZGV4OiAtMSwgZGF0YUNvbnRhaW5lcn07XG4gIGNvbnN0IGZpbHRlckZ1bmNDYWxsZXIgPSAoZmlsdGVyOiBGaWx0ZXIpID0+IGZpbHRlckZ1bmNzW2ZpbHRlci5pZF0oZmlsdGVyQ29udGV4dCk7XG5cbiAgY29uc3QgbnVtUm93cyA9IGRhdGFDb250YWluZXIubnVtUm93cygpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVJvd3M7ICsraSkge1xuICAgIGZpbHRlckNvbnRleHQuaW5kZXggPSBpO1xuXG4gICAgY29uc3QgbWF0Y2hGb3JEb21haW4gPSBkeW5hbWljRG9tYWluRmlsdGVycyAmJiBkeW5hbWljRG9tYWluRmlsdGVycy5ldmVyeShmaWx0ZXJGdW5jQ2FsbGVyKTtcbiAgICBpZiAobWF0Y2hGb3JEb21haW4pIHtcbiAgICAgIGZpbHRlcmVkSW5kZXhGb3JEb21haW4ucHVzaChmaWx0ZXJDb250ZXh0LmluZGV4KTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXRjaEZvclJlbmRlciA9IGNwdUZpbHRlcnMgJiYgY3B1RmlsdGVycy5ldmVyeShmaWx0ZXJGdW5jQ2FsbGVyKTtcbiAgICBpZiAobWF0Y2hGb3JSZW5kZXIpIHtcbiAgICAgIGZpbHRlcmVkSW5kZXgucHVzaChmaWx0ZXJDb250ZXh0LmluZGV4KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLihkeW5hbWljRG9tYWluRmlsdGVycyA/IHtmaWx0ZXJlZEluZGV4Rm9yRG9tYWlufSA6IHt9KSxcbiAgICAuLi4oY3B1RmlsdGVycyA/IHtmaWx0ZXJlZEluZGV4fSA6IHt9KVxuICB9O1xufVxuXG4vKipcbiAqIEdldCBhIHJlY29yZCBvZiBmaWx0ZXJzIGJhc2VkIG9uIGRvbWFpbiB0eXBlIGFuZCBncHUgLyBjcHVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbHRlclJlY29yZChcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGZpbHRlcnM6IEZpbHRlcltdLFxuICBvcHQ6IEZpbHRlckRhdGFzZXRPcHQgPSB7fVxuKTogRmlsdGVyUmVjb3JkIHtcbiAgY29uc3QgZmlsdGVyUmVjb3JkOiBGaWx0ZXJSZWNvcmQgPSB7XG4gICAgZHluYW1pY0RvbWFpbjogW10sXG4gICAgZml4ZWREb21haW46IFtdLFxuICAgIGNwdTogW10sXG4gICAgZ3B1OiBbXVxuICB9O1xuXG4gIGZpbHRlcnMuZm9yRWFjaChmID0+IHtcbiAgICBpZiAoaXNWYWxpZEZpbHRlclZhbHVlKGYudHlwZSwgZi52YWx1ZSkgJiYgdG9BcnJheShmLmRhdGFJZCkuaW5jbHVkZXMoZGF0YUlkKSkge1xuICAgICAgKGYuZml4ZWREb21haW4gfHwgb3B0Lmlnbm9yZURvbWFpblxuICAgICAgICA/IGZpbHRlclJlY29yZC5maXhlZERvbWFpblxuICAgICAgICA6IGZpbHRlclJlY29yZC5keW5hbWljRG9tYWluXG4gICAgICApLnB1c2goZik7XG5cbiAgICAgIChmLmdwdSAmJiAhb3B0LmNwdU9ubHkgPyBmaWx0ZXJSZWNvcmQuZ3B1IDogZmlsdGVyUmVjb3JkLmNwdSkucHVzaChmKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBmaWx0ZXJSZWNvcmQ7XG59XG5cbi8qKlxuICogQ29tcGFyZSBmaWx0ZXIgcmVjb3JkcyB0byBnZXQgd2hhdCBoYXMgY2hhbmdlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlmZkZpbHRlcnMoXG4gIGZpbHRlclJlY29yZDogRmlsdGVyUmVjb3JkLFxuICBvbGRGaWx0ZXJSZWNvcmQ6IEZpbHRlclJlY29yZCB8IHt9ID0ge31cbik6IEZpbHRlckNoYW5nZWQge1xuICBsZXQgZmlsdGVyQ2hhbmdlZDogUGFydGlhbDxGaWx0ZXJDaGFuZ2VkPiA9IHt9O1xuXG4gIChPYmplY3QuZW50cmllcyhmaWx0ZXJSZWNvcmQpIGFzIEVudHJpZXM8RmlsdGVyUmVjb3JkPikuZm9yRWFjaCgoW3JlY29yZCwgaXRlbXNdKSA9PiB7XG4gICAgaXRlbXMuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgICAgY29uc3Qgb2xkRmlsdGVyOiBGaWx0ZXIgPSAob2xkRmlsdGVyUmVjb3JkW3JlY29yZF0gfHwgW10pLmZpbmQoXG4gICAgICAgIChmOiBGaWx0ZXIpID0+IGYuaWQgPT09IGZpbHRlci5pZFxuICAgICAgKTtcblxuICAgICAgaWYgKCFvbGRGaWx0ZXIpIHtcbiAgICAgICAgLy8gYWRkZWRcbiAgICAgICAgZmlsdGVyQ2hhbmdlZCA9IHNldChbcmVjb3JkLCBmaWx0ZXIuaWRdLCAnYWRkZWQnLCBmaWx0ZXJDaGFuZ2VkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGNoZWNrICB3aGF0IGhhcyBjaGFuZ2VkXG4gICAgICAgIFsnbmFtZScsICd2YWx1ZScsICdkYXRhSWQnXS5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXJbcHJvcF0gIT09IG9sZEZpbHRlcltwcm9wXSkge1xuICAgICAgICAgICAgZmlsdGVyQ2hhbmdlZCA9IHNldChbcmVjb3JkLCBmaWx0ZXIuaWRdLCBgJHtwcm9wfV9jaGFuZ2VkYCwgZmlsdGVyQ2hhbmdlZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIChvbGRGaWx0ZXJSZWNvcmRbcmVjb3JkXSB8fCBbXSkuZm9yRWFjaCgob2xkRmlsdGVyOiBGaWx0ZXIpID0+IHtcbiAgICAgIC8vIGRlbGV0ZWRcbiAgICAgIGlmICghaXRlbXMuZmluZChmID0+IGYuaWQgPT09IG9sZEZpbHRlci5pZCkpIHtcbiAgICAgICAgZmlsdGVyQ2hhbmdlZCA9IHNldChbcmVjb3JkLCBvbGRGaWx0ZXIuaWRdLCAnZGVsZXRlZCcsIGZpbHRlckNoYW5nZWQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gey4uLntkeW5hbWljRG9tYWluOiBudWxsLCBmaXhlZERvbWFpbjogbnVsbCwgY3B1OiBudWxsLCBncHU6IG51bGx9LCAuLi5maWx0ZXJDaGFuZ2VkfTtcbn1cbi8qKlxuICogQ2FsbCBieSBwYXJzaW5nIGZpbHRlcnMgZnJvbSBVUkxcbiAqIENoZWNrIGlmIHZhbHVlIG9mIGZpbHRlciB3aXRoaW4gZmlsdGVyIGRvbWFpbiwgaWYgbm90IGFkanVzdCBpdCB0byBtYXRjaFxuICogZmlsdGVyIGRvbWFpblxuICpcbiAqIEByZXR1cm5zIHZhbHVlIC0gYWRqdXN0ZWQgdmFsdWUgdG8gbWF0Y2ggZmlsdGVyIG9yIG51bGwgdG8gcmVtb3ZlIGZpbHRlclxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGZ1bmN0aW9uIGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4odmFsdWU6IEZpbHRlclsndmFsdWUnXSwge2RvbWFpbiwgdHlwZX0pIHtcbiAgaWYgKCF0eXBlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIGlmIHRoZSBjdXJyZW50IGZpbHRlciBpcyBhIHBvbHlnb24gaXQgd2lsbCBub3QgaGF2ZSBhbnkgZG9tYWluXG4gIC8vIGFsbCBvdGhlciBmaWx0ZXIgdHlwZXMgcmVxdWlyZSBkb21haW5cbiAgaWYgKHR5cGUgIT09IEZJTFRFUl9UWVBFUy5wb2x5Z29uICYmICFkb21haW4pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIEZJTFRFUl9UWVBFUy5yYW5nZTpcbiAgICBjYXNlIEZJTFRFUl9UWVBFUy50aW1lUmFuZ2U6XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpIHx8IHZhbHVlLmxlbmd0aCAhPT0gMikge1xuICAgICAgICByZXR1cm4gZG9tYWluLm1hcChkID0+IGQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWUubWFwKChkLCBpKSA9PiAobm90TnVsbG9yVW5kZWZpbmVkKGQpICYmIGlzSW5SYW5nZShkLCBkb21haW4pID8gZCA6IGRvbWFpbltpXSkpO1xuXG4gICAgY2FzZSBGSUxURVJfVFlQRVMubXVsdGlTZWxlY3Q6XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZpbHRlcmVkVmFsdWUgPSB2YWx1ZS5maWx0ZXIoZCA9PiBkb21haW4uaW5jbHVkZXMoZCkpO1xuICAgICAgcmV0dXJuIGZpbHRlcmVkVmFsdWUubGVuZ3RoID8gZmlsdGVyZWRWYWx1ZSA6IFtdO1xuXG4gICAgY2FzZSBGSUxURVJfVFlQRVMuc2VsZWN0OlxuICAgICAgcmV0dXJuIGRvbWFpbi5pbmNsdWRlcyh2YWx1ZSkgPyB2YWx1ZSA6IHRydWU7XG4gICAgY2FzZSBGSUxURVJfVFlQRVMucG9seWdvbjpcbiAgICAgIHJldHVybiB2YWx1ZTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuLyogZXNsaW50LWVuYWJsZSBjb21wbGV4aXR5ICovXG5cbi8qKlxuICogQ2FsY3VsYXRlIG51bWVyaWMgZG9tYWluIGFuZCBzdWl0YWJsZSBzdGVwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROdW1lcmljRmllbGREb21haW4oXG4gIGRhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2UsXG4gIHZhbHVlQWNjZXNzb3I6IGRhdGFWYWx1ZUFjY2Vzc29yXG4pOiBSYW5nZUZpZWxkRG9tYWluIHtcbiAgbGV0IGRvbWFpbjogW251bWJlciwgbnVtYmVyXSA9IFswLCAxXTtcbiAgbGV0IHN0ZXAgPSAwLjE7XG5cbiAgY29uc3QgbWFwcGVkVmFsdWUgPSBkYXRhQ29udGFpbmVyLm1hcEluZGV4KHZhbHVlQWNjZXNzb3IpO1xuXG4gIGlmIChkYXRhQ29udGFpbmVyLm51bVJvd3MoKSA+IDEpIHtcbiAgICBkb21haW4gPSBTY2FsZVV0aWxzLmdldExpbmVhckRvbWFpbihtYXBwZWRWYWx1ZSk7XG4gICAgY29uc3QgZGlmZiA9IGRvbWFpblsxXSAtIGRvbWFpblswXTtcblxuICAgIC8vIGluIGNhc2UgZXF1YWwgZG9tYWluLCBbOTYsIDk2XSwgd2hpY2ggd2lsbCBicmVhayBxdWFudGl6ZSBzY2FsZVxuICAgIGlmICghZGlmZikge1xuICAgICAgZG9tYWluWzFdID0gZG9tYWluWzBdICsgMTtcbiAgICB9XG5cbiAgICBzdGVwID0gZ2V0TnVtZXJpY1N0ZXBTaXplKGRpZmYpIHx8IHN0ZXA7XG4gICAgZG9tYWluWzBdID0gZm9ybWF0TnVtYmVyQnlTdGVwKGRvbWFpblswXSwgc3RlcCwgJ2Zsb29yJyk7XG4gICAgZG9tYWluWzFdID0gZm9ybWF0TnVtYmVyQnlTdGVwKGRvbWFpblsxXSwgc3RlcCwgJ2NlaWwnKTtcbiAgfVxuXG4gIGNvbnN0IHtoaXN0b2dyYW0sIGVubGFyZ2VkSGlzdG9ncmFtfSA9IGdldEhpc3RvZ3JhbShkb21haW4sIG1hcHBlZFZhbHVlKTtcblxuICByZXR1cm4ge2RvbWFpbiwgc3RlcCwgaGlzdG9ncmFtLCBlbmxhcmdlZEhpc3RvZ3JhbX07XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIHN0ZXAgc2l6ZSBmb3IgcmFuZ2UgYW5kIHRpbWVyYW5nZSBmaWx0ZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE51bWVyaWNTdGVwU2l6ZShkaWZmOiBudW1iZXIpOiBudW1iZXIge1xuICBkaWZmID0gTWF0aC5hYnMoZGlmZik7XG5cbiAgaWYgKGRpZmYgPiAxMDApIHtcbiAgICByZXR1cm4gMTtcbiAgfSBlbHNlIGlmIChkaWZmID4gMykge1xuICAgIHJldHVybiAwLjAxO1xuICB9IGVsc2UgaWYgKGRpZmYgPiAxKSB7XG4gICAgcmV0dXJuIDAuMDAxO1xuICB9XG4gIC8vIFRyeSB0byBnZXQgYXQgbGVhc3QgMTAwMCBzdGVwcyAtIGFuZCBrZWVwIHRoZSBzdGVwIHNpemUgYmVsb3cgdGhhdCBvZlxuICAvLyB0aGUgKGRpZmYgPiAxKSBjYXNlLlxuICBjb25zdCB4ID0gZGlmZiAvIDEwMDA7XG4gIC8vIEZpbmQgdGhlIGV4cG9uZW50IGFuZCB0cnVuY2F0ZSB0byAxMCB0byB0aGUgcG93ZXIgb2YgdGhhdCBleHBvbmVudFxuXG4gIGNvbnN0IGV4cG9uZW50aWFsRm9ybSA9IHgudG9FeHBvbmVudGlhbCgpO1xuICBjb25zdCBleHBvbmVudCA9IHBhcnNlRmxvYXQoZXhwb25lbnRpYWxGb3JtLnNwbGl0KCdlJylbMV0pO1xuXG4gIC8vIEdldHRpbmcgcmVhZHkgZm9yIG5vZGUgMTJcbiAgLy8gdGhpcyBpcyB3aHkgd2UgbmVlZCBkZWNpbWFsLmpzXG4gIC8vIE1hdGgucG93KDEwLCAtNSkgPSAwLjAwMDAwOTk5OTk5OTk5OTk5OTk5OVxuICAvLyB0aGUgYWJvdmUgcmVzdWx0IHNob3dzIGluIGJyb3dzZXIgYW5kIG5vZGUgMTBcbiAgLy8gbm9kZSAxMiBiZWhhdmVzIGNvcnJlY3RseVxuICByZXR1cm4gbmV3IERlY2ltYWwoMTApLnBvdyhleHBvbmVudCkudG9OdW1iZXIoKTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGUgdGltZXN0YW1wIGRvbWFpbiBhbmQgc3VpdGFibGUgc3RlcFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGltZXN0YW1wRmllbGREb21haW4oXG4gIGRhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2UsXG4gIHZhbHVlQWNjZXNzb3I6IGRhdGFWYWx1ZUFjY2Vzc29yXG4pOiBUaW1lUmFuZ2VGaWVsZERvbWFpbiB7XG4gIC8vIHRvIGF2b2lkIGNvbnZlcnRpbmcgc3RyaW5nIGZvcm1hdCB0aW1lIHRvIGVwb2NoXG4gIC8vIGV2ZXJ5IHRpbWUgd2UgY29tcGFyZSB3ZSBzdG9yZSBhIHZhbHVlIG1hcHBlZCB0byBpbnQgaW4gZmlsdGVyIGRvbWFpblxuXG4gIGNvbnN0IG1hcHBlZFZhbHVlID0gZGF0YUNvbnRhaW5lci5tYXBJbmRleCh2YWx1ZUFjY2Vzc29yKTtcbiAgY29uc3QgZG9tYWluID0gU2NhbGVVdGlscy5nZXRMaW5lYXJEb21haW4obWFwcGVkVmFsdWUpO1xuICBjb25zdCBkZWZhdWx0VGltZUZvcm1hdCA9IGdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlcihkb21haW4pO1xuXG4gIGxldCBzdGVwID0gMC4wMTtcblxuICBjb25zdCBkaWZmID0gZG9tYWluWzFdIC0gZG9tYWluWzBdO1xuICBjb25zdCBlbnRyeSA9IFRpbWVzdGFtcFN0ZXBNYXAuZmluZChmID0+IGYubWF4ID49IGRpZmYpO1xuICBpZiAoZW50cnkpIHtcbiAgICBzdGVwID0gZW50cnkuc3RlcDtcbiAgfVxuXG4gIGNvbnN0IHtoaXN0b2dyYW0sIGVubGFyZ2VkSGlzdG9ncmFtfSA9IGdldEhpc3RvZ3JhbShkb21haW4sIG1hcHBlZFZhbHVlKTtcblxuICByZXR1cm4ge1xuICAgIGRvbWFpbixcbiAgICBzdGVwLFxuICAgIG1hcHBlZFZhbHVlLFxuICAgIGhpc3RvZ3JhbSxcbiAgICBlbmxhcmdlZEhpc3RvZ3JhbSxcbiAgICBkZWZhdWx0VGltZUZvcm1hdFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGlzdG9ncmFtQ29uc3RydWN0KFxuICBkb21haW46IFtudW1iZXIsIG51bWJlcl0sXG4gIG1hcHBlZFZhbHVlOiAoTWlsbGlzZWNvbmQgfCBudW1iZXIpW10sXG4gIGJpbnM6IG51bWJlclxuKTogSGlzdG9ncmFtQmluW10ge1xuICByZXR1cm4gZDNIaXN0b2dyYW0oKVxuICAgIC50aHJlc2hvbGRzKHRpY2tzKGRvbWFpblswXSwgZG9tYWluWzFdLCBiaW5zKSlcbiAgICAuZG9tYWluKGRvbWFpbikobWFwcGVkVmFsdWUpXG4gICAgLm1hcChiaW4gPT4gKHtcbiAgICAgIGNvdW50OiBiaW4ubGVuZ3RoLFxuICAgICAgYmluLFxuICAgICAgeDA6IGJpbi54MCxcbiAgICAgIHgxOiBiaW4ueDFcbiAgICB9KSk7XG59XG4vKipcbiAqIENhbGN1bGF0ZSBoaXN0b2dyYW0gZnJvbSBkb21haW4gYW5kIGFycmF5IG9mIHZhbHVlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGlzdG9ncmFtKFxuICBkb21haW46IFtudW1iZXIsIG51bWJlcl0sXG4gIG1hcHBlZFZhbHVlOiAoTWlsbGlzZWNvbmQgfCBudW1iZXIpW11cbik6IHtoaXN0b2dyYW06IEhpc3RvZ3JhbUJpbltdOyBlbmxhcmdlZEhpc3RvZ3JhbTogSGlzdG9ncmFtQmluW119IHtcbiAgY29uc3QgaGlzdG9ncmFtID0gaGlzdG9ncmFtQ29uc3RydWN0KGRvbWFpbiwgbWFwcGVkVmFsdWUsIGhpc3RvZ3JhbUJpbnMpO1xuICBjb25zdCBlbmxhcmdlZEhpc3RvZ3JhbSA9IGhpc3RvZ3JhbUNvbnN0cnVjdChkb21haW4sIG1hcHBlZFZhbHVlLCBlbmxhcmdlZEhpc3RvZ3JhbUJpbnMpO1xuXG4gIHJldHVybiB7aGlzdG9ncmFtLCBlbmxhcmdlZEhpc3RvZ3JhbX07XG59XG5cbi8qKlxuICogcm91bmQgbnVtYmVyIGJhc2VkIG9uIHN0ZXBcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gdmFsXG4gKiBAcGFyYW0ge051bWJlcn0gc3RlcFxuICogQHBhcmFtIHtzdHJpbmd9IGJvdW5kXG4gKiBAcmV0dXJucyB7TnVtYmVyfSByb3VuZGVkIG51bWJlclxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0TnVtYmVyQnlTdGVwKHZhbDogbnVtYmVyLCBzdGVwOiBudW1iZXIsIGJvdW5kOiAnZmxvb3InIHwgJ2NlaWwnKTogbnVtYmVyIHtcbiAgaWYgKGJvdW5kID09PSAnZmxvb3InKSB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IodmFsICogKDEgLyBzdGVwKSkgLyAoMSAvIHN0ZXApO1xuICB9XG5cbiAgcmV0dXJuIE1hdGguY2VpbCh2YWwgKiAoMSAvIHN0ZXApKSAvICgxIC8gc3RlcCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0luUmFuZ2UodmFsOiBhbnksIGRvbWFpbjogbnVtYmVyW10pOiBib29sZWFuIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGRvbWFpbikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdmFsID49IGRvbWFpblswXSAmJiB2YWwgPD0gZG9tYWluWzFdO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhIHBvaW50IGlzIHdpdGhpbiB0aGUgcHJvdmlkZWQgcG9seWdvblxuICpcbiAqIEBwYXJhbSBwb2ludCBhcyBpbnB1dCBzZWFyY2ggW2xhdCwgbG5nXVxuICogQHBhcmFtIHBvbHlnb24gUG9pbnRzIG11c3QgYmUgd2l0aGluIHRoZXNlIChNdWx0aSlQb2x5Z29uKHMpXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJblBvbHlnb24ocG9pbnQ6IG51bWJlcltdLCBwb2x5Z29uOiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIGJvb2xlYW5XaXRoaW4odHVyZlBvaW50KHBvaW50KSwgcG9seWdvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0VGltZVdpZGdldFRpdGxlRm9ybWF0dGVyKGRvbWFpbjogW251bWJlciwgbnVtYmVyXSk6IHN0cmluZyB8IG51bGwge1xuICBpZiAoIWlzVmFsaWRUaW1lRG9tYWluKGRvbWFpbikpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGRpZmYgPSBkb21haW5bMV0gLSBkb21haW5bMF07XG5cbiAgLy8gTG9jYWwgYXdhcmUgZm9ybWF0c1xuICAvLyBodHRwczovL21vbWVudGpzLmNvbS9kb2NzLyMvcGFyc2luZy9zdHJpbmctZm9ybWF0XG4gIHJldHVybiBkaWZmID4gZHVyYXRpb25ZZWFyID8gJ0wnIDogZGlmZiA+IGR1cmF0aW9uRGF5ID8gJ0wgTFQnIDogJ0wgTFRTJztcbn1cblxuLyoqXG4gKiBTYW5pdHkgY2hlY2sgb24gZmlsdGVycyB0byBwcmVwYXJlIGZvciBzYXZlXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnLi9maWx0ZXItdXRpbHMnKS5pc0ZpbHRlclZhbGlkVG9TYXZlfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNGaWx0ZXJWYWxpZFRvU2F2ZShmaWx0ZXI6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIGZpbHRlcj8udHlwZSAmJlxuICAgIEFycmF5LmlzQXJyYXkoZmlsdGVyPy5uYW1lKSAmJlxuICAgIChmaWx0ZXI/Lm5hbWUubGVuZ3RoIHx8IGZpbHRlcj8ubGF5ZXJJZC5sZW5ndGgpICYmXG4gICAgaXNWYWxpZEZpbHRlclZhbHVlKGZpbHRlcj8udHlwZSwgZmlsdGVyPy52YWx1ZSlcbiAgKTtcbn1cblxuLyoqXG4gKiBTYW5pdHkgY2hlY2sgb24gZmlsdGVycyB0byBwcmVwYXJlIGZvciBzYXZlXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnLi9maWx0ZXItdXRpbHMnKS5pc1ZhbGlkRmlsdGVyVmFsdWV9XG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkRmlsdGVyVmFsdWUodHlwZTogc3RyaW5nIHwgbnVsbCwgdmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICBpZiAoIXR5cGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBGSUxURVJfVFlQRVMuc2VsZWN0OlxuICAgICAgcmV0dXJuIHZhbHVlID09PSB0cnVlIHx8IHZhbHVlID09PSBmYWxzZTtcblxuICAgIGNhc2UgRklMVEVSX1RZUEVTLnJhbmdlOlxuICAgIGNhc2UgRklMVEVSX1RZUEVTLnRpbWVSYW5nZTpcbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5ldmVyeSh2ID0+IHYgIT09IG51bGwgJiYgIWlzTmFOKHYpKTtcblxuICAgIGNhc2UgRklMVEVSX1RZUEVTLm11bHRpU2VsZWN0OlxuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpICYmIEJvb2xlYW4odmFsdWUubGVuZ3RoKTtcblxuICAgIGNhc2UgRklMVEVSX1RZUEVTLmlucHV0OlxuICAgICAgcmV0dXJuIEJvb2xlYW4odmFsdWUubGVuZ3RoKTtcblxuICAgIGNhc2UgRklMVEVSX1RZUEVTLnBvbHlnb246XG4gICAgICBjb25zdCBjb29yZGluYXRlcyA9IGdldCh2YWx1ZSwgWydnZW9tZXRyeScsICdjb29yZGluYXRlcyddKTtcbiAgICAgIHJldHVybiBCb29sZWFuKHZhbHVlICYmIHZhbHVlLmlkICYmIGNvb3JkaW5hdGVzKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29sdW1uRmlsdGVyUHJvcHM8SyBleHRlbmRzIEtlcGxlclRhYmxlTW9kZWw8SywgTD4sIEw+KFxuICBmaWx0ZXI6IEZpbHRlcixcbiAgZGF0YXNldDogS1xuKToge2xpbmVDaGFydDogTGluZUNoYXJ0OyB5QXhzOiBGaWVsZH0gfCB7fSB7XG4gIGlmIChmaWx0ZXIucGxvdFR5cGUgPT09IFBMT1RfVFlQRVMuaGlzdG9ncmFtIHx8ICFmaWx0ZXIueUF4aXMpIHtcbiAgICAvLyBoaXN0b2dyYW0gc2hvdWxkIGJlIGNhbGN1bGF0ZWQgd2hlbiBjcmVhdGUgZmlsdGVyXG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgY29uc3Qge21hcHBlZFZhbHVlID0gW119ID0gZmlsdGVyO1xuICBjb25zdCB7eUF4aXN9ID0gZmlsdGVyO1xuICBjb25zdCBmaWVsZElkeCA9IGRhdGFzZXQuZ2V0Q29sdW1uRmllbGRJZHgoeUF4aXMubmFtZSk7XG4gIGlmIChmaWVsZElkeCA8IDApIHtcbiAgICBDb25zb2xlLndhcm4oYHlBeGlzICR7eUF4aXMubmFtZX0gZG9lcyBub3QgZXhpc3QgaW4gZGF0YXNldGApO1xuICAgIHJldHVybiB7bGluZUNoYXJ0OiB7fSwgeUF4aXN9O1xuICB9XG5cbiAgLy8gcmV0dXJuIGxpbmVDaGFydFxuICBjb25zdCBzZXJpZXMgPSBkYXRhc2V0LmRhdGFDb250YWluZXJcbiAgICAubWFwKFxuICAgICAgKHJvdywgcm93SW5kZXgpID0+ICh7XG4gICAgICAgIHg6IG1hcHBlZFZhbHVlW3Jvd0luZGV4XSxcbiAgICAgICAgeTogcm93LnZhbHVlQXQoZmllbGRJZHgpXG4gICAgICB9KSxcbiAgICAgIHRydWVcbiAgICApXG4gICAgLmZpbHRlcigoe3gsIHl9KSA9PiBOdW1iZXIuaXNGaW5pdGUoeCkgJiYgTnVtYmVyLmlzRmluaXRlKHkpKVxuICAgIC5zb3J0KChhLCBiKSA9PiBhc2NlbmRpbmcoYS54LCBiLngpKTtcblxuICBjb25zdCB5RG9tYWluID0gZXh0ZW50KHNlcmllcywgZCA9PiBkLnkpO1xuICBjb25zdCB4RG9tYWluID0gW3Nlcmllc1swXS54LCBzZXJpZXNbc2VyaWVzLmxlbmd0aCAtIDFdLnhdO1xuXG4gIHJldHVybiB7bGluZUNoYXJ0OiB7c2VyaWVzLCB5RG9tYWluLCB4RG9tYWlufSwgeUF4aXN9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdEZpbHRlclBsb3RUeXBlKGZpbHRlcjogRmlsdGVyKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IGZpbHRlclBsb3RUeXBlczogdHlwZW9mIFN1cHBvcnRlZFBsb3RUeXBlW2tleW9mIHR5cGVvZiBTdXBwb3J0ZWRQbG90VHlwZV0gfCBudWxsID1cbiAgICBmaWx0ZXIudHlwZSAmJiBTdXBwb3J0ZWRQbG90VHlwZVtmaWx0ZXIudHlwZV07XG4gIGlmICghZmlsdGVyUGxvdFR5cGVzKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoIWZpbHRlci55QXhpcykge1xuICAgIHJldHVybiBmaWx0ZXJQbG90VHlwZXMuZGVmYXVsdDtcbiAgfVxuXG4gIHJldHVybiBmaWx0ZXJQbG90VHlwZXNbZmlsdGVyLnlBeGlzLnR5cGVdIHx8IG51bGw7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBkYXRhc2V0SWRzIGxpc3Qgb2YgZGF0YXNldCBpZHMgdG8gYmUgZmlsdGVyZWRcbiAqIEBwYXJhbSBkYXRhc2V0cyBhbGwgZGF0YXNldHNcbiAqIEBwYXJhbSBmaWx0ZXJzIGFsbCBmaWx0ZXJzIHRvIGJlIGFwcGxpZWQgdG8gZGF0YXNldHNcbiAqIEByZXR1cm4gZGF0YXNldHMgLSBuZXcgdXBkYXRlZCBkYXRhc2V0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0czxcbiAgSyBleHRlbmRzIEtlcGxlclRhYmxlTW9kZWw8SywgTD4sXG4gIEwgZXh0ZW5kcyB7Y29uZmlnOiB7ZGF0YUlkOiBzdHJpbmcgfCBudWxsfX1cbj4oXG4gIGRhdGFzZXRJZHM6IHN0cmluZ1tdLFxuICBkYXRhc2V0czoge1tpZDogc3RyaW5nXTogS30sXG4gIGZpbHRlcnM6IEZpbHRlcltdLFxuICBsYXllcnM/OiBMW11cbik6IHtbaWQ6IHN0cmluZ106IEt9IHtcbiAgY29uc3QgZGF0YUlkcyA9IHRvQXJyYXkoZGF0YXNldElkcyk7XG4gIHJldHVybiBkYXRhSWRzLnJlZHVjZSgoYWNjLCBkYXRhSWQpID0+IHtcbiAgICBjb25zdCBsYXllcnNUb0ZpbHRlciA9IChsYXllcnMgfHwgW10pLmZpbHRlcihsID0+IGwuY29uZmlnLmRhdGFJZCA9PT0gZGF0YUlkKTtcbiAgICBjb25zdCBhcHBsaWVkRmlsdGVycyA9IGZpbHRlcnMuZmlsdGVyKGQgPT4gc2hvdWxkQXBwbHlGaWx0ZXIoZCwgZGF0YUlkKSk7XG4gICAgY29uc3QgdGFibGUgPSBkYXRhc2V0c1tkYXRhSWRdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmFjYyxcbiAgICAgIFtkYXRhSWRdOiB0YWJsZS5maWx0ZXJUYWJsZShhcHBsaWVkRmlsdGVycywgbGF5ZXJzVG9GaWx0ZXIsIHt9KVxuICAgIH07XG4gIH0sIGRhdGFzZXRzKTtcbn1cblxuLyoqXG4gKiBBcHBsaWVzIGEgbmV3IGZpZWxkIG5hbWUgdmFsdWUgdG8gZmllbHRlciBhbmQgdXBkYXRlIGJvdGggZmlsdGVyIGFuZCBkYXRhc2V0XG4gKiBAcGFyYW0gZmlsdGVyIC0gdG8gYmUgYXBwbGllZCB0aGUgbmV3IGZpZWxkIG5hbWUgb25cbiAqIEBwYXJhbSBkYXRhc2V0IC0gZGF0YXNldCB0aGUgZmllbGQgYmVsb25ncyB0b1xuICogQHBhcmFtIGZpZWxkTmFtZSAtIGZpZWxkLm5hbWVcbiAqIEBwYXJhbSBmaWx0ZXJEYXRhc2V0SW5kZXggLSBmaWVsZC5uYW1lXG4gKiBAcGFyYW0gb3B0aW9uXG4gKiBAcmV0dXJuIC0ge2ZpbHRlciwgZGF0YXNldHN9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUZpbHRlckZpZWxkTmFtZTxLIGV4dGVuZHMgS2VwbGVyVGFibGVNb2RlbDxLLCBMPiwgTD4oXG4gIGZpbHRlcjogRmlsdGVyLFxuICBkYXRhc2V0OiBLLFxuICBmaWVsZE5hbWU6IHN0cmluZyxcbiAgZmlsdGVyRGF0YXNldEluZGV4ID0gMCxcbiAgb3B0aW9uPzoge21lcmdlRG9tYWluOiBib29sZWFufVxuKToge1xuICBmaWx0ZXI6IEZpbHRlciB8IG51bGw7XG4gIGRhdGFzZXQ6IEs7XG59IHtcbiAgLy8gdXNpbmcgZmlsdGVyRGF0YXNldEluZGV4IHdlIGNhbiBmaWx0ZXIgb25seSB0aGUgc3BlY2lmaWVkIGRhdGFzZXRcbiAgY29uc3QgbWVyZ2VEb21haW4gPSBvcHRpb24gJiYgb3B0aW9uLmhhc093blByb3BlcnR5KCdtZXJnZURvbWFpbicpID8gb3B0aW9uLm1lcmdlRG9tYWluIDogZmFsc2U7XG5cbiAgY29uc3QgZmllbGRJbmRleCA9IGRhdGFzZXQuZ2V0Q29sdW1uRmllbGRJZHgoZmllbGROYW1lKTtcbiAgLy8gaWYgbm8gZmllbGQgd2l0aCBzYW1lIG5hbWUgaXMgZm91bmQsIG1vdmUgdG8gdGhlIG5leHQgZGF0YXNldHNcbiAgaWYgKGZpZWxkSW5kZXggPT09IC0xKSB7XG4gICAgLy8gdGhyb3cgbmV3IEVycm9yKGBmaWVsZEluZGV4IG5vdCBmb3VuZC4gRGF0YXNldCBtdXN0IGNvbnRhaW4gYSBwcm9wZXJ0eSB3aXRoIG5hbWU6ICR7ZmllbGROYW1lfWApO1xuICAgIHJldHVybiB7ZmlsdGVyOiBudWxsLCBkYXRhc2V0fTtcbiAgfVxuXG4gIC8vIFRPRE86IHZhbGlkYXRlIGZpZWxkIHR5cGVcbiAgY29uc3QgZmlsdGVyUHJvcHMgPSBkYXRhc2V0LmdldENvbHVtbkZpbHRlclByb3BzKGZpZWxkTmFtZSk7XG5cbiAgY29uc3QgbmV3RmlsdGVyID0ge1xuICAgIC4uLihtZXJnZURvbWFpbiA/IG1lcmdlRmlsdGVyRG9tYWluU3RlcChmaWx0ZXIsIGZpbHRlclByb3BzKSA6IHsuLi5maWx0ZXIsIC4uLmZpbHRlclByb3BzfSksXG4gICAgbmFtZTogT2JqZWN0LmFzc2lnbihbLi4udG9BcnJheShmaWx0ZXIubmFtZSldLCB7W2ZpbHRlckRhdGFzZXRJbmRleF06IGZpZWxkTmFtZX0pLFxuICAgIGZpZWxkSWR4OiBPYmplY3QuYXNzaWduKFsuLi50b0FycmF5KGZpbHRlci5maWVsZElkeCldLCB7XG4gICAgICBbZmlsdGVyRGF0YXNldEluZGV4XTogZmllbGRJbmRleFxuICAgIH0pLFxuICAgIC8vIFRPRE8sIHNpbmNlIHdlIGFsbG93IHRvIGFkZCBtdWx0aXBsZSBmaWVsZHMgdG8gYSBmaWx0ZXIgd2UgY2FuIG5vIGxvbmdlciBmcmVlemUgdGhlIGZpbHRlclxuICAgIGZyZWV6ZTogdHJ1ZVxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgZmlsdGVyOiBuZXdGaWx0ZXIsXG4gICAgZGF0YXNldFxuICB9O1xufVxuXG4vKipcbiAqIE1lcmdlIG9uZSBmaWx0ZXIgd2l0aCBvdGhlciBmaWx0ZXIgcHJvcCBkb21haW5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRmlsdGVyRG9tYWluU3RlcChcbiAgZmlsdGVyOiBGaWx0ZXIsXG4gIGZpbHRlclByb3BzPzogUGFydGlhbDxGaWx0ZXI+XG4pOiAoRmlsdGVyICYge3N0ZXA/OiBudW1iZXJ9KSB8IG51bGwge1xuICBpZiAoIWZpbHRlcikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKCFmaWx0ZXJQcm9wcykge1xuICAgIHJldHVybiBmaWx0ZXI7XG4gIH1cblxuICBpZiAoKGZpbHRlci5maWVsZFR5cGUgJiYgZmlsdGVyLmZpZWxkVHlwZSAhPT0gZmlsdGVyUHJvcHMuZmllbGRUeXBlKSB8fCAhZmlsdGVyUHJvcHMuZG9tYWluKSB7XG4gICAgcmV0dXJuIGZpbHRlcjtcbiAgfVxuXG4gIGNvbnN0IGNvbWJpbmVkRG9tYWluID0gIWZpbHRlci5kb21haW5cbiAgICA/IGZpbHRlclByb3BzLmRvbWFpblxuICAgIDogWy4uLihmaWx0ZXIuZG9tYWluIHx8IFtdKSwgLi4uKGZpbHRlclByb3BzLmRvbWFpbiB8fCBbXSldLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcblxuICBjb25zdCBuZXdGaWx0ZXIgPSB7XG4gICAgLi4uZmlsdGVyLFxuICAgIC4uLmZpbHRlclByb3BzLFxuICAgIGRvbWFpbjogW2NvbWJpbmVkRG9tYWluWzBdLCBjb21iaW5lZERvbWFpbltjb21iaW5lZERvbWFpbi5sZW5ndGggLSAxXV1cbiAgfTtcblxuICBzd2l0Y2ggKGZpbHRlclByb3BzLmZpZWxkVHlwZSkge1xuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnN0cmluZzpcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5kYXRlOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubmV3RmlsdGVyLFxuICAgICAgICBkb21haW46IHVuaXF1ZShjb21iaW5lZERvbWFpbikuc29ydCgpXG4gICAgICB9O1xuXG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMudGltZXN0YW1wOlxuICAgICAgY29uc3Qgc3RlcCA9XG4gICAgICAgIChmaWx0ZXIgYXMgVGltZVJhbmdlRmlsdGVyKS5zdGVwIDwgKGZpbHRlclByb3BzIGFzIFRpbWVSYW5nZUZpZWxkRG9tYWluKS5zdGVwXG4gICAgICAgICAgPyAoZmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcikuc3RlcFxuICAgICAgICAgIDogKGZpbHRlclByb3BzIGFzIFRpbWVSYW5nZUZpZWxkRG9tYWluKS5zdGVwO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5uZXdGaWx0ZXIsXG4gICAgICAgIHN0ZXBcbiAgICAgIH07XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMucmVhbDpcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5pbnRlZ2VyOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbmV3RmlsdGVyO1xuICB9XG59XG4vKiBlc2xpbnQtZW5hYmxlIGNvbXBsZXhpdHkgKi9cblxuLyoqXG4gKiBHZW5lcmF0ZXMgcG9seWdvbiBmaWx0ZXJcbiAqL1xuZXhwb3J0IGNvbnN0IGZlYXR1cmVUb0ZpbHRlclZhbHVlID0gKFxuICBmZWF0dXJlOiBGZWF0dXJlLFxuICBmaWx0ZXJJZDogc3RyaW5nLFxuICBwcm9wZXJ0aWVzPzoge31cbik6IEZlYXR1cmVWYWx1ZSA9PiAoe1xuICAuLi5mZWF0dXJlLFxuICBpZDogZmVhdHVyZS5pZCxcbiAgcHJvcGVydGllczoge1xuICAgIC4uLmZlYXR1cmUucHJvcGVydGllcyxcbiAgICAuLi5wcm9wZXJ0aWVzLFxuICAgIGZpbHRlcklkXG4gIH1cbn0pO1xuXG5leHBvcnQgY29uc3QgZ2V0RmlsdGVySWRJbkZlYXR1cmUgPSAoZjogRmVhdHVyZVZhbHVlKTogc3RyaW5nID0+IGdldChmLCBbJ3Byb3BlcnRpZXMnLCAnZmlsdGVySWQnXSk7XG5cbi8qKlxuICogR2VuZXJhdGVzIHBvbHlnb24gZmlsdGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVBvbHlnb25GaWx0ZXI8XG4gIEwgZXh0ZW5kcyB7Y29uZmlnOiB7ZGF0YUlkOiBzdHJpbmcgfCBudWxsOyBsYWJlbDogc3RyaW5nfTsgaWQ6IHN0cmluZ31cbj4obGF5ZXJzOiBMW10sIGZlYXR1cmU6IEZlYXR1cmUpOiBQb2x5Z29uRmlsdGVyIHtcbiAgY29uc3QgZGF0YUlkID0gbGF5ZXJzLm1hcChsID0+IGwuY29uZmlnLmRhdGFJZCkuZmlsdGVyKG5vdE51bGxvclVuZGVmaW5lZCk7XG4gIGNvbnN0IGxheWVySWQgPSBsYXllcnMubWFwKGwgPT4gbC5pZCk7XG4gIGNvbnN0IG5hbWUgPSBsYXllcnMubWFwKGwgPT4gbC5jb25maWcubGFiZWwpO1xuICBjb25zdCBmaWx0ZXIgPSBnZXREZWZhdWx0RmlsdGVyKGRhdGFJZCk7XG4gIHJldHVybiB7XG4gICAgLi4uZmlsdGVyLFxuICAgIGZpeGVkRG9tYWluOiB0cnVlLFxuICAgIHR5cGU6IEZJTFRFUl9UWVBFUy5wb2x5Z29uLFxuICAgIG5hbWUsXG4gICAgbGF5ZXJJZCxcbiAgICB2YWx1ZTogZmVhdHVyZVRvRmlsdGVyVmFsdWUoZmVhdHVyZSwgZmlsdGVyLmlkLCB7aXNWaXNpYmxlOiB0cnVlfSlcbiAgfTtcbn1cblxuLyoqXG4gKiBSdW4gZmlsdGVyIGVudGlyZWx5IG9uIENQVVxuICovXG5pbnRlcmZhY2UgU3RhdGVUeXBlPEsgZXh0ZW5kcyBLZXBsZXJUYWJsZU1vZGVsPEssIEw+LCBMPiB7XG4gIGxheWVyczogTFtdO1xuICBmaWx0ZXJzOiBGaWx0ZXJbXTtcbiAgZGF0YXNldHM6IHtbaWQ6IHN0cmluZ106IEt9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyRGF0YXNldENQVTxUIGV4dGVuZHMgU3RhdGVUeXBlPEssIEw+LCBLIGV4dGVuZHMgS2VwbGVyVGFibGVNb2RlbDxLLCBMPiwgTD4oXG4gIHN0YXRlOiBULFxuICBkYXRhSWQ6IHN0cmluZ1xuKTogVCB7XG4gIGNvbnN0IGRhdGFzZXRGaWx0ZXJzID0gc3RhdGUuZmlsdGVycy5maWx0ZXIoZiA9PiBmLmRhdGFJZC5pbmNsdWRlcyhkYXRhSWQpKTtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG5cbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgY3B1RmlsdGVyZWREYXRhc2V0ID0gZGF0YXNldC5maWx0ZXJUYWJsZUNQVShkYXRhc2V0RmlsdGVycywgc3RhdGUubGF5ZXJzKTtcblxuICByZXR1cm4gc2V0KFsnZGF0YXNldHMnLCBkYXRhSWRdLCBjcHVGaWx0ZXJlZERhdGFzZXQsIHN0YXRlKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBwYXJzZWQgZmlsdGVycyB3aXRoIGRhdGFzZXRzIGFuZCBhZGQgZmlsdGVyUHJvcHMgdG8gZmllbGRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzPFxuICBTIGV4dGVuZHMge2RhdGFzZXRzOiB7W2lkOiBzdHJpbmddOiBLfTsgbGF5ZXJzOiBMW119LFxuICBLIGV4dGVuZHMgS2VwbGVyVGFibGVNb2RlbDxLLCBMPixcbiAgTCBleHRlbmRzIHtjb25maWc6IHtkYXRhSWQ6IHN0cmluZyB8IG51bGw7IGxhYmVsOiBzdHJpbmd9OyBpZDogc3RyaW5nfVxuPihcbiAgc3RhdGU6IFMsXG4gIGZpbHRlcnNUb1ZhbGlkYXRlOiBQYXJzZWRGaWx0ZXJbXSA9IFtdXG4pOiB7XG4gIHZhbGlkYXRlZDogRmlsdGVyW107XG4gIGZhaWxlZDogRmlsdGVyW107XG4gIHVwZGF0ZWREYXRhc2V0czogU1snZGF0YXNldHMnXTtcbn0ge1xuICAvLyBUT0RPIEJldHRlciBUeXBpbmdzIGhlcmVcbiAgY29uc3QgdmFsaWRhdGVkOiBhbnlbXSA9IFtdO1xuICBjb25zdCBmYWlsZWQ6IGFueVtdID0gW107XG4gIGNvbnN0IHtkYXRhc2V0c30gPSBzdGF0ZTtcbiAgbGV0IHVwZGF0ZWREYXRhc2V0cyA9IGRhdGFzZXRzO1xuXG4gIC8vIG1lcmdlIGZpbHRlcnNcbiAgZmlsdGVyc1RvVmFsaWRhdGUuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgIC8vIHdlIGNhbiBvbmx5IGxvb2sgZm9yIGRhdGFzZXRzIGRlZmluZSBpbiB0aGUgZmlsdGVyIGRhdGFJZFxuICAgIGNvbnN0IGRhdGFzZXRJZHMgPSB0b0FycmF5KGZpbHRlci5kYXRhSWQpO1xuXG4gICAgLy8gd2UgY2FuIG1lcmdlIGEgZmlsdGVyIG9ubHkgaWYgYWxsIGRhdGFzZXRzIGluIGZpbHRlci5kYXRhSWQgYXJlIGxvYWRlZFxuICAgIGlmIChkYXRhc2V0SWRzLmV2ZXJ5KGQgPT4gZGF0YXNldHNbZF0pKSB7XG4gICAgICAvLyBhbGwgZGF0YXNldElkcyBpbiBmaWx0ZXIgbXVzdCBiZSBwcmVzZW50IHRoZSBzdGF0ZSBkYXRhc2V0c1xuICAgICAgY29uc3Qge2ZpbHRlcjogdmFsaWRhdGVkRmlsdGVyLCBhcHBseVRvRGF0YXNldHMsIGF1Z21lbnRlZERhdGFzZXRzfSA9IGRhdGFzZXRJZHMucmVkdWNlKFxuICAgICAgICAoYWNjLCBkYXRhc2V0SWQpID0+IHtcbiAgICAgICAgICBjb25zdCBkYXRhc2V0ID0gdXBkYXRlZERhdGFzZXRzW2RhdGFzZXRJZF07XG4gICAgICAgICAgY29uc3QgbGF5ZXJzID0gc3RhdGUubGF5ZXJzLmZpbHRlcihsID0+IGwuY29uZmlnLmRhdGFJZCA9PT0gZGF0YXNldC5pZCk7XG4gICAgICAgICAgY29uc3Qge2ZpbHRlcjogdXBkYXRlZEZpbHRlciwgZGF0YXNldDogdXBkYXRlZERhdGFzZXR9ID0gdmFsaWRhdGVGaWx0ZXJXaXRoRGF0YShcbiAgICAgICAgICAgIGFjYy5hdWdtZW50ZWREYXRhc2V0c1tkYXRhc2V0SWRdIHx8IGRhdGFzZXQsXG4gICAgICAgICAgICBmaWx0ZXIsXG4gICAgICAgICAgICBsYXllcnNcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKHVwZGF0ZWRGaWx0ZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmFjYyxcbiAgICAgICAgICAgICAgLy8gbWVyZ2UgZmlsdGVyIHByb3BzXG4gICAgICAgICAgICAgIGZpbHRlcjogYWNjLmZpbHRlclxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAuLi5hY2MuZmlsdGVyLFxuICAgICAgICAgICAgICAgICAgICAuLi5tZXJnZUZpbHRlckRvbWFpblN0ZXAoYWNjLCB1cGRhdGVkRmlsdGVyKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogdXBkYXRlZEZpbHRlcixcblxuICAgICAgICAgICAgICBhcHBseVRvRGF0YXNldHM6IFsuLi5hY2MuYXBwbHlUb0RhdGFzZXRzLCBkYXRhc2V0SWRdLFxuXG4gICAgICAgICAgICAgIGF1Z21lbnRlZERhdGFzZXRzOiB7XG4gICAgICAgICAgICAgICAgLi4uYWNjLmF1Z21lbnRlZERhdGFzZXRzLFxuICAgICAgICAgICAgICAgIFtkYXRhc2V0SWRdOiB1cGRhdGVkRGF0YXNldFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBmaWx0ZXI6IG51bGwsXG4gICAgICAgICAgYXBwbHlUb0RhdGFzZXRzOiBbXSxcbiAgICAgICAgICBhdWdtZW50ZWREYXRhc2V0czoge31cbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgaWYgKHZhbGlkYXRlZEZpbHRlciAmJiBpc0VxdWFsKGRhdGFzZXRJZHMsIGFwcGx5VG9EYXRhc2V0cykpIHtcbiAgICAgICAgdmFsaWRhdGVkLnB1c2godmFsaWRhdGVkRmlsdGVyKTtcbiAgICAgICAgdXBkYXRlZERhdGFzZXRzID0ge1xuICAgICAgICAgIC4uLnVwZGF0ZWREYXRhc2V0cyxcbiAgICAgICAgICAuLi5hdWdtZW50ZWREYXRhc2V0c1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmYWlsZWQucHVzaChmaWx0ZXIpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHt2YWxpZGF0ZWQsIGZhaWxlZCwgdXBkYXRlZERhdGFzZXRzfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbHRlclBsb3Q8SyBleHRlbmRzIEtlcGxlclRhYmxlTW9kZWw8SywgTD4sIEw+KFxuICBmaWx0ZXI6IEZpbHRlcixcbiAgZGF0YXNldDogS1xuKToge2xpbmVDaGFydDogTGluZUNoYXJ0OyB5QXhzOiBGaWVsZH0gfCB7fSB7XG4gIGlmIChmaWx0ZXIucGxvdFR5cGUgPT09IFBMT1RfVFlQRVMuaGlzdG9ncmFtIHx8ICFmaWx0ZXIueUF4aXMpIHtcbiAgICAvLyBoaXN0b2dyYW0gc2hvdWxkIGJlIGNhbGN1bGF0ZWQgd2hlbiBjcmVhdGUgZmlsdGVyXG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgY29uc3Qge21hcHBlZFZhbHVlID0gW119ID0gZmlsdGVyO1xuICBjb25zdCB7eUF4aXN9ID0gZmlsdGVyO1xuICBjb25zdCBmaWVsZElkeCA9IGRhdGFzZXQuZ2V0Q29sdW1uRmllbGRJZHgoeUF4aXMubmFtZSk7XG4gIGlmIChmaWVsZElkeCA8IDApIHtcbiAgICBDb25zb2xlLndhcm4oYHlBeGlzICR7eUF4aXMubmFtZX0gZG9lcyBub3QgZXhpc3QgaW4gZGF0YXNldGApO1xuICAgIHJldHVybiB7bGluZUNoYXJ0OiB7fSwgeUF4aXN9O1xuICB9XG5cbiAgLy8gcmV0dXJuIGxpbmVDaGFydFxuICBjb25zdCBzZXJpZXMgPSBkYXRhc2V0LmRhdGFDb250YWluZXJcbiAgICAubWFwKFxuICAgICAgKHJvdywgcm93SW5kZXgpID0+ICh7XG4gICAgICAgIHg6IG1hcHBlZFZhbHVlW3Jvd0luZGV4XSxcbiAgICAgICAgeTogcm93LnZhbHVlQXQoZmllbGRJZHgpXG4gICAgICB9KSxcbiAgICAgIHRydWVcbiAgICApXG4gICAgLmZpbHRlcigoe3gsIHl9KSA9PiBOdW1iZXIuaXNGaW5pdGUoeCkgJiYgTnVtYmVyLmlzRmluaXRlKHkpKVxuICAgIC5zb3J0KChhLCBiKSA9PiBhc2NlbmRpbmcoYS54LCBiLngpKTtcblxuICBjb25zdCB5RG9tYWluID0gZXh0ZW50KHNlcmllcywgZCA9PiBkLnkpO1xuICBjb25zdCB4RG9tYWluID0gW3Nlcmllc1swXS54LCBzZXJpZXNbc2VyaWVzLmxlbmd0aCAtIDFdLnhdO1xuXG4gIHJldHVybiB7bGluZUNoYXJ0OiB7c2VyaWVzLCB5RG9tYWluLCB4RG9tYWlufSwgeUF4aXN9O1xufVxuXG4vKipcbiAqIFJldHJpZXZlIGludGVydmFsIGJpbnMgZm9yIHRpbWUgZmlsdGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnRlcnZhbEJpbnMoZmlsdGVyOiBUaW1lUmFuZ2VGaWx0ZXIpIHtcbiAgY29uc3Qge2JpbnN9ID0gZmlsdGVyO1xuICBjb25zdCBpbnRlcnZhbCA9IGZpbHRlci5wbG90VHlwZT8uaW50ZXJ2YWw7XG4gIGlmICghaW50ZXJ2YWwgfHwgIWJpbnMgfHwgT2JqZWN0LmtleXMoYmlucykubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgdmFsdWVzID0gT2JqZWN0LnZhbHVlcyhiaW5zKTtcbiAgcmV0dXJuIHZhbHVlc1swXSA/IHZhbHVlc1swXVtpbnRlcnZhbF0gOiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFRpbWVEb21haW4oZG9tYWluKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGRvbWFpbikgJiYgZG9tYWluLmV2ZXJ5KE51bWJlci5pc0Zpbml0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUaW1lV2lkZ2V0SGludEZvcm1hdHRlcihkb21haW46IFtudW1iZXIsIG51bWJlcl0pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIWlzVmFsaWRUaW1lRG9tYWluKGRvbWFpbikpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgZGlmZiA9IGRvbWFpblsxXSAtIGRvbWFpblswXTtcbiAgcmV0dXJuIGRpZmYgPiBkdXJhdGlvbldlZWtcbiAgICA/ICdMJ1xuICAgIDogZGlmZiA+IGR1cmF0aW9uRGF5XG4gICAgPyAnTCBMVCdcbiAgICA6IGRpZmYgPiBkdXJhdGlvbkhvdXJcbiAgICA/ICdMVCdcbiAgICA6ICdMVFMnO1xufVxuIl19
|
1329
|
+
|
1330
|
+
function isSideFilter(filter) {
|
1331
|
+
return filter.view === _constants.FILTER_VIEW_TYPES.side;
|
1332
|
+
}
|
1333
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9maWx0ZXItdXRpbHMudHMiXSwibmFtZXMiOlsiZHVyYXRpb25TZWNvbmQiLCJkdXJhdGlvbk1pbnV0ZSIsImR1cmF0aW9uSG91ciIsImR1cmF0aW9uRGF5IiwiZHVyYXRpb25XZWVrIiwiZHVyYXRpb25ZZWFyIiwiVGltZXN0YW1wU3RlcE1hcCIsIm1heCIsInN0ZXAiLCJOdW1iZXIiLCJQT1NJVElWRV9JTkZJTklUWSIsImhpc3RvZ3JhbUJpbnMiLCJlbmxhcmdlZEhpc3RvZ3JhbUJpbnMiLCJGSUxURVJfVVBEQVRFUl9QUk9QUyIsImRhdGFJZCIsIm5hbWUiLCJsYXllcklkIiwiTElNSVRFRF9GSUxURVJfRUZGRUNUX1BST1BTIiwiU3VwcG9ydGVkUGxvdFR5cGUiLCJGSUxURVJfVFlQRVMiLCJ0aW1lUmFuZ2UiLCJBTExfRklFTERfVFlQRVMiLCJpbnRlZ2VyIiwicmVhbCIsInJhbmdlIiwiRklMVEVSX0NPTVBPTkVOVFMiLCJzZWxlY3QiLCJtdWx0aVNlbGVjdCIsInBvbHlnb24iLCJERUZBVUxUX0ZJTFRFUl9TVFJVQ1RVUkUiLCJmcmVlemUiLCJpZCIsImVuYWJsZWQiLCJmaXhlZERvbWFpbiIsInZpZXciLCJGSUxURVJfVklFV19UWVBFUyIsInNpZGUiLCJpc0FuaW1hdGluZyIsImFuaW1hdGlvbldpbmRvdyIsIkFOSU1BVElPTl9XSU5ET1ciLCJmcmVlIiwic3BlZWQiLCJ0eXBlIiwiZmllbGRJZHgiLCJkb21haW4iLCJ2YWx1ZSIsInBsb3RUeXBlIiwiUExPVF9UWVBFUyIsImhpc3RvZ3JhbSIsInlBeGlzIiwiaW50ZXJ2YWwiLCJncHUiLCJGSUxURVJfSURfTEVOR1RIIiwiTEFZRVJfRklMVEVSUyIsImdldERlZmF1bHRGaWx0ZXIiLCJzaG91bGRBcHBseUZpbHRlciIsImZpbHRlciIsImRhdGFzZXRJZCIsImRhdGFJZHMiLCJpbmNsdWRlcyIsInZhbGlkYXRlUG9seWdvbkZpbHRlciIsImRhdGFzZXQiLCJsYXllcnMiLCJmYWlsZWQiLCJpc1ZhbGlkRmlsdGVyVmFsdWUiLCJpc1ZhbGlkRGF0YXNldCIsImxheWVyIiwiZmluZCIsImwiLCJmaWx0ZXJWYWxpZGF0b3JzIiwidmFsaWRhdGVGaWx0ZXIiLCJmaWx0ZXJEYXRhSWQiLCJmaWx0ZXJEYXRhc2V0SW5kZXgiLCJpbmRleE9mIiwiaW5pdGlhbGl6ZUZpbHRlciIsImZpZWxkTmFtZSIsImFwcGx5RmlsdGVyRmllbGROYW1lIiwibWVyZ2VEb21haW4iLCJ1cGRhdGVkRmlsdGVyIiwidXBkYXRlZERhdGFzZXQiLCJhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluIiwidmFsaWRhdGVGaWx0ZXJZQXhpcyIsInZhbGlkYXRlRmlsdGVyV2l0aERhdGEiLCJoYXNPd25Qcm9wZXJ0eSIsImZpZWxkcyIsIm1hdGNoZWRBeGlzIiwiZ2V0RmlsdGVyUGxvdCIsImdldEZpbHRlclByb3BzIiwiZmllbGQiLCJmaWVsZERvbWFpbiIsImZpbHRlclByb3BzIiwiZmllbGRUeXBlIiwidHlwZU9wdGlvbnMiLCJzdHJpbmciLCJkYXRlIiwidGltZXN0YW1wIiwiZW5sYXJnZWQiLCJnZXRQb2x5Z29uRmlsdGVyRnVuY3RvciIsImRhdGFDb250YWluZXIiLCJnZXRQb3NpdGlvbiIsImdldFBvc2l0aW9uQWNjZXNzb3IiLCJMQVlFUl9UWVBFUyIsInBvaW50IiwiaWNvbiIsImRhdGEiLCJwb3MiLCJldmVyeSIsImlzRmluaXRlIiwiaXNJblBvbHlnb24iLCJhcmMiLCJsaW5lIiwiaGV4YWdvbklkIiwiZGF0YVRvRmVhdHVyZSIsImNlbnRyb2lkcyIsImNlbnRyb2lkIiwiaW5kZXgiLCJnZW9qc29uIiwiZ2V0RmlsdGVyRnVuY3Rpb24iLCJ2YWx1ZUFjY2Vzc29yIiwiZGVmYXVsdEZ1bmMiLCJkIiwiaXNJblJhbmdlIiwibWFwcGVkVmFsdWUiLCJhY2Nlc3NvciIsIkFycmF5IiwiaXNBcnJheSIsImZvcm1hdCIsImxlbmd0aCIsImxheWVyRmlsdGVyRnVuY3Rpb25zIiwibWFwIiwiY29uZmlnIiwiZmlsdGVyRnVuYyIsInVwZGF0ZUZpbHRlckRhdGFJZCIsImZpbHRlckRhdGFCeUZpbHRlclR5cGVzIiwiZHluYW1pY0RvbWFpbkZpbHRlcnMiLCJjcHVGaWx0ZXJzIiwiZmlsdGVyRnVuY3MiLCJmaWx0ZXJlZEluZGV4Rm9yRG9tYWluIiwiZmlsdGVyZWRJbmRleCIsImZpbHRlckNvbnRleHQiLCJmaWx0ZXJGdW5jQ2FsbGVyIiwibnVtUm93cyIsImkiLCJtYXRjaEZvckRvbWFpbiIsInB1c2giLCJtYXRjaEZvclJlbmRlciIsImdldEZpbHRlclJlY29yZCIsImZpbHRlcnMiLCJvcHQiLCJmaWx0ZXJSZWNvcmQiLCJkeW5hbWljRG9tYWluIiwiY3B1IiwiZm9yRWFjaCIsImYiLCJpZ25vcmVEb21haW4iLCJjcHVPbmx5IiwiZGlmZkZpbHRlcnMiLCJvbGRGaWx0ZXJSZWNvcmQiLCJmaWx0ZXJDaGFuZ2VkIiwiT2JqZWN0IiwiZW50cmllcyIsInJlY29yZCIsIml0ZW1zIiwib2xkRmlsdGVyIiwicHJvcCIsImZpbHRlcmVkVmFsdWUiLCJnZXROdW1lcmljRmllbGREb21haW4iLCJtYXBJbmRleCIsIlNjYWxlVXRpbHMiLCJnZXRMaW5lYXJEb21haW4iLCJkaWZmIiwiZ2V0TnVtZXJpY1N0ZXBTaXplIiwiZm9ybWF0TnVtYmVyQnlTdGVwIiwiZ2V0SGlzdG9ncmFtIiwiZW5sYXJnZWRIaXN0b2dyYW0iLCJNYXRoIiwiYWJzIiwieCIsImV4cG9uZW50aWFsRm9ybSIsInRvRXhwb25lbnRpYWwiLCJleHBvbmVudCIsInBhcnNlRmxvYXQiLCJzcGxpdCIsIkRlY2ltYWwiLCJwb3ciLCJ0b051bWJlciIsImdldFRpbWVzdGFtcEZpZWxkRG9tYWluIiwiZGVmYXVsdFRpbWVGb3JtYXQiLCJnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIiLCJlbnRyeSIsImhpc3RvZ3JhbUNvbnN0cnVjdCIsImJpbnMiLCJ0aHJlc2hvbGRzIiwiYmluIiwiY291bnQiLCJ4MCIsIngxIiwidmFsIiwiYm91bmQiLCJmbG9vciIsImNlaWwiLCJpc1ZhbGlkVGltZURvbWFpbiIsImlzRmlsdGVyVmFsaWRUb1NhdmUiLCJ2IiwiaXNOYU4iLCJCb29sZWFuIiwiaW5wdXQiLCJjb29yZGluYXRlcyIsImdldENvbHVtbkZpbHRlclByb3BzIiwiZ2V0Q29sdW1uRmllbGRJZHgiLCJDb25zb2xlIiwid2FybiIsImxpbmVDaGFydCIsInNlcmllcyIsInJvdyIsInJvd0luZGV4IiwieSIsInZhbHVlQXQiLCJzb3J0IiwiYSIsImIiLCJ5RG9tYWluIiwieERvbWFpbiIsImdldERlZmF1bHRGaWx0ZXJQbG90VHlwZSIsImZpbHRlclBsb3RUeXBlcyIsImFwcGx5RmlsdGVyc1RvRGF0YXNldHMiLCJkYXRhc2V0SWRzIiwiZGF0YXNldHMiLCJyZWR1Y2UiLCJhY2MiLCJsYXllcnNUb0ZpbHRlciIsImFwcGxpZWRGaWx0ZXJzIiwidGFibGUiLCJmaWx0ZXJUYWJsZSIsIm9wdGlvbiIsImZpZWxkSW5kZXgiLCJuZXdGaWx0ZXIiLCJtZXJnZUZpbHRlckRvbWFpblN0ZXAiLCJhc3NpZ24iLCJjb21iaW5lZERvbWFpbiIsImZlYXR1cmVUb0ZpbHRlclZhbHVlIiwiZmVhdHVyZSIsImZpbHRlcklkIiwicHJvcGVydGllcyIsImdldEZpbHRlcklkSW5GZWF0dXJlIiwiZ2VuZXJhdGVQb2x5Z29uRmlsdGVyIiwibm90TnVsbG9yVW5kZWZpbmVkIiwibGFiZWwiLCJpc1Zpc2libGUiLCJmaWx0ZXJEYXRhc2V0Q1BVIiwic3RhdGUiLCJkYXRhc2V0RmlsdGVycyIsImNwdUZpbHRlcmVkRGF0YXNldCIsImZpbHRlclRhYmxlQ1BVIiwidmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMiLCJmaWx0ZXJzVG9WYWxpZGF0ZSIsInZhbGlkYXRlZCIsInVwZGF0ZWREYXRhc2V0cyIsImlzTWVyZ2luZ0RhdGFzZXRzIiwiYXVnbWVudGVkRGF0YXNldHMiLCJhcHBseVRvRGF0YXNldHMiLCJ2YWxpZGF0ZWRGaWx0ZXIiLCJnZXRJbnRlcnZhbEJpbnMiLCJrZXlzIiwidmFsdWVzIiwiZ2V0VGltZVdpZGdldEhpbnRGb3JtYXR0ZXIiLCJ1bmRlZmluZWQiLCJpc1NpZGVGaWx0ZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBU0E7O0FBQ0E7O0FBdUJBOztBQUNBOztBQUNBOzs7Ozs7OztBQUVPLElBQU1BLGNBQWMsR0FBRyxJQUF2Qjs7QUFDQSxJQUFNQyxjQUFjLEdBQUdELGNBQWMsR0FBRyxFQUF4Qzs7QUFDQSxJQUFNRSxZQUFZLEdBQUdELGNBQWMsR0FBRyxFQUF0Qzs7QUFDQSxJQUFNRSxXQUFXLEdBQUdELFlBQVksR0FBRyxFQUFuQzs7QUFDQSxJQUFNRSxZQUFZLEdBQUdELFdBQVcsR0FBRyxDQUFuQzs7QUFDQSxJQUFNRSxZQUFZLEdBQUdGLFdBQVcsR0FBRyxHQUFuQzs7QUFnQkEsSUFBTUcsZ0JBQWdCLEdBQUcsQ0FDOUI7QUFBQ0MsRUFBQUEsR0FBRyxFQUFFLENBQU47QUFBU0MsRUFBQUEsSUFBSSxFQUFFO0FBQWYsQ0FEOEIsRUFFOUI7QUFBQ0QsRUFBQUEsR0FBRyxFQUFFLEVBQU47QUFBVUMsRUFBQUEsSUFBSSxFQUFFO0FBQWhCLENBRjhCLEVBRzlCO0FBQUNELEVBQUFBLEdBQUcsRUFBRSxHQUFOO0FBQVdDLEVBQUFBLElBQUksRUFBRTtBQUFqQixDQUg4QixFQUk5QjtBQUFDRCxFQUFBQSxHQUFHLEVBQUUsR0FBTjtBQUFXQyxFQUFBQSxJQUFJLEVBQUU7QUFBakIsQ0FKOEIsRUFLOUI7QUFBQ0QsRUFBQUEsR0FBRyxFQUFFLElBQU47QUFBWUMsRUFBQUEsSUFBSSxFQUFFO0FBQWxCLENBTDhCLEVBTTlCO0FBQUNELEVBQUFBLEdBQUcsRUFBRSxJQUFOO0FBQVlDLEVBQUFBLElBQUksRUFBRTtBQUFsQixDQU44QixFQU85QjtBQUFDRCxFQUFBQSxHQUFHLEVBQUVFLE1BQU0sQ0FB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RUQsTUFBTWhHLElBQUksR0FBRzlILE1BQU0sQ0FBQyxDQUFELENBQU4sR0FBWUEsTUFBTSxDQUFDLENBQUQsQ0FBL0I7QUFDQSxTQUFPOEgsSUFBSSxHQUFHdEssWUFBUCxHQUNILEdBREcsR0FFSHNLLElBQUksR0FBR3ZLLFdBQVAsR0FDQSxNQURBLEdBRUF1SyxJQUFJLEdBQUd4SyxZQUFQLEdBQ0EsSUFEQSxHQUVBLEtBTko7QUFPRDs7QUFFTSxTQUFTeVEsWUFBVCxDQUFzQm5OLE1BQXRCLEVBQStDO0FBQ3BELFNBQU9BLE1BQU0sQ0FBQ3RCLElBQVAsS0FBZ0JDLDZCQUFrQkMsSUFBekM7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7YXNjZW5kaW5nLCBleHRlbnQsIGhpc3RvZ3JhbSBhcyBkM0hpc3RvZ3JhbSwgdGlja3N9IGZyb20gJ2QzLWFycmF5JztcbmltcG9ydCBrZXlNaXJyb3IgZnJvbSAna2V5bWlycm9yJztcbmltcG9ydCBDb25zb2xlIGZyb20gJ2dsb2JhbC9jb25zb2xlJztcbmltcG9ydCBnZXQgZnJvbSAnbG9kYXNoLmdldCc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2guaXNlcXVhbCc7XG5cbmltcG9ydCBib29sZWFuV2l0aGluIGZyb20gJ0B0dXJmL2Jvb2xlYW4td2l0aGluJztcbmltcG9ydCB7cG9pbnQgYXMgdHVyZlBvaW50fSBmcm9tICdAdHVyZi9oZWxwZXJzJztcbmltcG9ydCB7RGVjaW1hbH0gZnJvbSAnZGVjaW1hbC5qcyc7XG5pbXBvcnQge1xuICBBTExfRklFTERfVFlQRVMsXG4gIEZJTFRFUl9UWVBFUyxcbiAgQU5JTUFUSU9OX1dJTkRPVyxcbiAgUExPVF9UWVBFUyxcbiAgTEFZRVJfVFlQRVMsXG4gIEZJTFRFUl9WSUVXX1RZUEVTXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7VmlzU3RhdGV9IGZyb20gJ0BrZXBsZXIuZ2wvc2NoZW1hcyc7XG5pbXBvcnQgKiBhcyBTY2FsZVV0aWxzIGZyb20gJy4vZGF0YS1zY2FsZS11dGlscyc7XG5pbXBvcnQge2gzSXNWYWxpZH0gZnJvbSAnaDMtanMnO1xuXG5pbXBvcnQge1xuICBNaWxsaXNlY29uZCxcbiAgRW50cmllcyxcbiAgRmllbGQsXG4gIFBhcnNlZEZpbHRlcixcbiAgRmlsdGVyLFxuICBGaWx0ZXJCYXNlLFxuICBQb2x5Z29uRmlsdGVyLFxuICBGaWVsZERvbWFpbixcbiAgVGltZVJhbmdlRmllbGREb21haW4sXG4gIEhpc3RvZ3JhbUJpbixcbiAgRmVhdHVyZSxcbiAgRmVhdHVyZVZhbHVlLFxuICBMaW5lQ2hhcnQsXG4gIFRpbWVSYW5nZUZpbHRlcixcbiAgUmFuZ2VGaWVsZERvbWFpbixcbiAgRmlsdGVyRGF0YXNldE9wdCxcbiAgRmlsdGVyUmVjb3JkXG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuXG5pbXBvcnQge0RhdGFDb250YWluZXJJbnRlcmZhY2V9IGZyb20gJy4vZGF0YS1jb250YWluZXItaW50ZXJmYWNlJztcbmltcG9ydCB7Z2VuZXJhdGVIYXNoSWQsIHNldCwgdG9BcnJheX0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQge25vdE51bGxvclVuZGVmaW5lZCwgdGltZVRvVW5peE1pbGxpLCB1bmlxdWV9IGZyb20gJy4vZGF0YS11dGlscyc7XG5pbXBvcnQge2dldENlbnRyb2lkfSBmcm9tICcuL2gzLXV0aWxzJztcblxuZXhwb3J0IGNvbnN0IGR1cmF0aW9uU2Vjb25kID0gMTAwMDtcbmV4cG9ydCBjb25zdCBkdXJhdGlvbk1pbnV0ZSA9IGR1cmF0aW9uU2Vjb25kICogNjA7XG5leHBvcnQgY29uc3QgZHVyYXRpb25Ib3VyID0gZHVyYXRpb25NaW51dGUgKiA2MDtcbmV4cG9ydCBjb25zdCBkdXJhdGlvbkRheSA9IGR1cmF0aW9uSG91ciAqIDI0O1xuZXhwb3J0IGNvbnN0IGR1cmF0aW9uV2VlayA9IGR1cmF0aW9uRGF5ICogNztcbmV4cG9ydCBjb25zdCBkdXJhdGlvblllYXIgPSBkdXJhdGlvbkRheSAqIDM2NTtcblxuZXhwb3J0IHR5cGUgRmlsdGVyUmVzdWx0ID0ge1xuICBmaWx0ZXJlZEluZGV4Rm9yRG9tYWluPzogbnVtYmVyW107XG4gIGZpbHRlcmVkSW5kZXg/OiBudW1iZXJbXTtcbn07XG5cbmV4cG9ydCB0eXBlIEZpbHRlckNoYW5nZWQgPSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBba2V5IGluIGtleW9mIEZpbHRlclJlY29yZF06IHtcbiAgICBba2V5OiBzdHJpbmddOiAnYWRkZWQnIHwgJ2RlbGV0ZWQnIHwgJ25hbWVfY2hhbmdlZCcgfCAndmFsdWVfY2hhbmdlZCcgfCAnZGF0YUlkX2NoYW5nZWQnO1xuICB9IHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIGRhdGFWYWx1ZUFjY2Vzc29yID0gKGRhdGE6IHtpbmRleDogbnVtYmVyfSkgPT4gbnVtYmVyIHwgbnVsbDtcblxuZXhwb3J0IGNvbnN0IFRpbWVzdGFtcFN0ZXBNYXAgPSBbXG4gIHttYXg6IDEsIHN0ZXA6IDAuMDV9LFxuICB7bWF4OiAxMCwgc3RlcDogMC4xfSxcbiAge21heDogMTAwLCBzdGVwOiAxfSxcbiAge21heDogNTAwLCBzdGVwOiA1fSxcbiAge21heDogMTAwMCwgc3RlcDogMTB9LFxuICB7bWF4OiA1MDAwLCBzdGVwOiA1MH0sXG4gIHttYXg6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSwgc3RlcDogMTAwMH1cbl07XG5cbmV4cG9ydCBjb25zdCBoaXN0b2dyYW1CaW5zID0gMzA7XG5leHBvcnQgY29uc3QgZW5sYXJnZWRIaXN0b2dyYW1CaW5zID0gMTAwO1xuXG5leHBvcnQgY29uc3QgRklMVEVSX1VQREFURVJfUFJPUFMgPSBrZXlNaXJyb3Ioe1xuICBkYXRhSWQ6IG51bGwsXG4gIG5hbWU6IG51bGwsXG4gIGxheWVySWQ6IG51bGxcbn0pO1xuXG5leHBvcnQgY29uc3QgTElNSVRFRF9GSUxURVJfRUZGRUNUX1BST1BTID0ga2V5TWlycm9yKHtcbiAgW0ZJTFRFUl9VUERBVEVSX1BST1BTLm5hbWVdOiBudWxsXG59KTtcbi8qKlxuICogTWF4IG51bWJlciBvZiBmaWx0ZXIgdmFsdWUgYnVmZmVycyB0aGF0IGRlY2suZ2wgcHJvdmlkZXNcbiAqL1xuXG5jb25zdCBTdXBwb3J0ZWRQbG90VHlwZSA9IHtcbiAgW0ZJTFRFUl9UWVBFUy50aW1lUmFuZ2VdOiB7XG4gICAgZGVmYXVsdDogJ2hpc3RvZ3JhbScsXG4gICAgW0FMTF9GSUVMRF9UWVBFUy5pbnRlZ2VyXTogJ2xpbmVDaGFydCcsXG4gICAgW0FMTF9GSUVMRF9UWVBFUy5yZWFsXTogJ2xpbmVDaGFydCdcbiAgfSxcbiAgW0ZJTFRFUl9UWVBFUy5yYW5nZV06IHtcbiAgICBkZWZhdWx0OiAnaGlzdG9ncmFtJyxcbiAgICBbQUxMX0ZJRUxEX1RZUEVTLmludGVnZXJdOiAnbGluZUNoYXJ0JyxcbiAgICBbQUxMX0ZJRUxEX1RZUEVTLnJlYWxdOiAnbGluZUNoYXJ0J1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgRklMVEVSX0NPTVBPTkVOVFMgPSB7XG4gIFtGSUxURVJfVFlQRVMuc2VsZWN0XTogJ1NpbmdsZVNlbGVjdEZpbHRlcicsXG4gIFtGSUxURVJfVFlQRVMubXVsdGlTZWxlY3RdOiAnTXVsdGlTZWxlY3RGaWx0ZXInLFxuICBbRklMVEVSX1RZUEVTLnRpbWVSYW5nZV06ICdUaW1lUmFuZ2VGaWx0ZXInLFxuICBbRklMVEVSX1RZUEVTLnJhbmdlXTogJ1JhbmdlRmlsdGVyJyxcbiAgW0ZJTFRFUl9UWVBFUy5wb2x5Z29uXTogJ1BvbHlnb25GaWx0ZXInXG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9GSUxURVJfU1RSVUNUVVJFID0ge1xuICBkYXRhSWQ6IFtdLCAvLyBbc3RyaW5nXVxuICBmcmVlemU6IGZhbHNlLFxuICBpZDogbnVsbCxcbiAgZW5hYmxlZDogdHJ1ZSxcblxuICAvLyB0aW1lIHJhbmdlIGZpbHRlciBzcGVjaWZpY1xuICBmaXhlZERvbWFpbjogZmFsc2UsXG4gIHZpZXc6IEZJTFRFUl9WSUVXX1RZUEVTLnNpZGUsXG4gIGlzQW5pbWF0aW5nOiBmYWxzZSxcbiAgYW5pbWF0aW9uV2luZG93OiBBTklNQVRJT05fV0lORE9XLmZyZWUsXG4gIHNwZWVkOiAxLFxuXG4gIC8vIGZpZWxkIHNwZWNpZmljXG4gIG5hbWU6IFtdLCAvLyBzdHJpbmdcbiAgdHlwZTogbnVsbCxcbiAgZmllbGRJZHg6IFtdLCAvLyBbaW50ZWdlcl1cbiAgZG9tYWluOiBudWxsLFxuICB2YWx1ZTogbnVsbCxcblxuICAvLyBwbG90XG4gIHBsb3RUeXBlOiBQTE9UX1RZUEVTLmhpc3RvZ3JhbSxcbiAgeUF4aXM6IG51bGwsXG4gIGludGVydmFsOiBudWxsLFxuXG4gIC8vIG1vZGVcbiAgZ3B1OiBmYWxzZVxufTtcblxuZXhwb3J0IGNvbnN0IEZJTFRFUl9JRF9MRU5HVEggPSA0O1xuXG5leHBvcnQgY29uc3QgTEFZRVJfRklMVEVSUyA9IFtGSUxURVJfVFlQRVMucG9seWdvbl07XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgZmlsdGVyIHdpdGggYSBkYXRhc2V0IGlkIGFzIGRhdGFJZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdEZpbHRlcih7XG4gIGRhdGFJZCxcbiAgaWRcbn06IHtcbiAgZGF0YUlkPzogc3RyaW5nIHwgbnVsbCB8IHN0cmluZ1tdO1xuICBpZD86IHN0cmluZztcbn0gPSB7fSk6IEZpbHRlckJhc2U8TGluZUNoYXJ0PiB7XG4gIHJldHVybiB7XG4gICAgLi4uREVGQVVMVF9GSUxURVJfU1RSVUNUVVJFLFxuICAgIC8vIHN0b3JlIGl0IGFzIGRhdGFJZCBhbmQgaXQgY291bGQgYmUgb25lIG9yIG1hbnlcbiAgICBkYXRhSWQ6IGRhdGFJZCA/IHRvQXJyYXkoZGF0YUlkKSA6IFtdLFxuICAgIGlkOiBpZCB8fCBnZW5lcmF0ZUhhc2hJZChGSUxURVJfSURfTEVOR1RIKVxuICB9O1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGEgZmlsdGVyIGlzIHZhbGlkIGJhc2VkIG9uIHRoZSBnaXZlbiBkYXRhSWRcbiAqIEBwYXJhbSAgZmlsdGVyIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0gIGRhdGFzZXRJZCBpZCB0byB2YWxpZGF0ZSBmaWx0ZXIgYWdhaW5zdFxuICogQHJldHVybiB0cnVlIGlmIGEgZmlsdGVyIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNob3VsZEFwcGx5RmlsdGVyKGZpbHRlcjogRmlsdGVyLCBkYXRhc2V0SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBkYXRhSWRzID0gdG9BcnJheShmaWx0ZXIuZGF0YUlkKTtcbiAgcmV0dXJuIGRhdGFJZHMuaW5jbHVkZXMoZGF0YXNldElkKSAmJiBmaWx0ZXIudmFsdWUgIT09IG51bGw7XG59XG5cbmludGVyZmFjZSBLZXBsZXJUYWJsZU1vZGVsPEssIEw+IHtcbiAgaWQ6IHN0cmluZztcbiAgZ2V0Q29sdW1uRmllbGRJZHgoY29sdW1uTmFtZTogc3RyaW5nKTogbnVtYmVyO1xuICBmaWx0ZXJUYWJsZShmaWx0ZXJzOiBGaWx0ZXJbXSwgbGF5ZXJzOiBMW10sIG9wdD86IEZpbHRlckRhdGFzZXRPcHQpOiBLO1xuICBnZXRDb2x1bW5GaWx0ZXJQcm9wcyhjb2x1bW5OYW1lOiBzdHJpbmcpOiBGaWVsZFsnZmlsdGVyUHJvcHMnXSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGRhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2U7XG4gIGZpbHRlclRhYmxlQ1BVKGZpbHRlcnM6IEZpbHRlcltdLCBsYXllcnM6IExbXSk6IEs7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGFuZCBtb2RpZmllcyBwb2x5Z29uIGZpbHRlciBzdHJ1Y3R1cmVcbiAqIEBwYXJhbSBkYXRhc2V0XG4gKiBAcGFyYW0gZmlsdGVyXG4gKiBAcGFyYW0gbGF5ZXJzXG4gKiBAcmV0dXJuIC0ge2ZpbHRlciwgZGF0YXNldH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUG9seWdvbkZpbHRlcjxLIGV4dGVuZHMgS2VwbGVyVGFibGVNb2RlbDxLLCBMPiwgTCBleHRlbmRzIHtpZDogc3RyaW5nfT4oXG4gIGRhdGFzZXQ6IEssXG4gIGZpbHRlcjogUG9seWdvbkZpbHRlcixcbiAgbGF5ZXJzOiBMW11cbik6IHtmaWx0ZXI6IFBvbHlnb25GaWx0ZXIgfCBudWxsOyBkYXRhc2V0OiBLfSB7XG4gIGNvbnN0IGZhaWxlZCA9IHtkYXRhc2V0LCBmaWx0ZXI6IG51bGx9O1xuICBjb25zdCB7dmFsdWUsIGxheWVySWQsIHR5cGUsIGRhdGFJZH0gPSBmaWx0ZXI7XG5cbiAgaWYgKCFsYXllcklkIHx8ICFpc1ZhbGlkRmlsdGVyVmFsdWUodHlwZSwgdmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhaWxlZDtcbiAgfVxuXG4gIGNvbnN0IGlzVmFsaWREYXRhc2V0ID0gZGF0YUlkLmluY2x1ZGVzKGRhdGFzZXQuaWQpO1xuXG4gIGlmICghaXNWYWxpZERhdGFzZXQpIHtcbiAgICByZXR1cm4gZmFpbGVkO1xuICB9XG5cbiAgY29uc3QgbGF5ZXIgPSBsYXllcnMuZmluZChsID0+IGxheWVySWQuaW5jbHVkZXMobC5pZCkpO1xuXG4gIGlmICghbGF5ZXIpIHtcbiAgICByZXR1cm4gZmFpbGVkO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBmaWx0ZXI6IHtcbiAgICAgIC4uLmZpbHRlcixcbiAgICAgIGZyZWV6ZTogdHJ1ZSxcbiAgICAgIGZpZWxkSWR4OiBbXVxuICAgIH0sXG4gICAgZGF0YXNldFxuICB9O1xufVxuXG4vKipcbiAqIEN1c3RvbSBmaWx0ZXIgdmFsaWRhdG9yc1xuICovXG5jb25zdCBmaWx0ZXJWYWxpZGF0b3JzID0ge1xuICBbRklMVEVSX1RZUEVTLnBvbHlnb25dOiB2YWxpZGF0ZVBvbHlnb25GaWx0ZXJcbn07XG5cbi8qKlxuICogRGVmYXVsdCB2YWxpZGF0ZSBmaWx0ZXIgZnVuY3Rpb25cbiAqIEBwYXJhbSBkYXRhc2V0XG4gKiBAcGFyYW0gZmlsdGVyXG4gKiBAcmV0dXJuIC0ge2ZpbHRlciwgZGF0YXNldH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRmlsdGVyPEsgZXh0ZW5kcyBLZXBsZXJUYWJsZU1vZGVsPEssIEw+LCBMPihcbiAgZGF0YXNldDogSyxcbiAgZmlsdGVyOiBQYXJzZWRGaWx0ZXJcbik6IHtmaWx0ZXI6IEZpbHRlciB8IG51bGw7IGRhdGFzZXQ6IEt9IHtcbiAgLy8gbWF0Y2ggZmlsdGVyLmRhdGFJZFxuICBjb25zdCBmYWlsZWQgPSB7ZGF0YXNldCwgZmlsdGVyOiBudWxsfTtcbiAgY29uc3QgZmlsdGVyRGF0YUlkID0gdG9BcnJheShmaWx0ZXIuZGF0YUlkKTtcblxuICBjb25zdCBmaWx0ZXJEYXRhc2V0SW5kZXggPSBmaWx0ZXJEYXRhSWQuaW5kZXhPZihkYXRhc2V0LmlkKTtcbiAgaWYgKGZpbHRlckRhdGFzZXRJbmRleCA8IDAgfHwgIXRvQXJyYXkoZmlsdGVyLm5hbWUpW2ZpbHRlckRhdGFzZXRJbmRleF0pIHtcbiAgICAvLyB0aGUgY3VycmVudCBmaWx0ZXIgaXMgbm90IG1hcHBlZCBhZ2FpbnN0IHRoZSBjdXJyZW50IGRhdGFzZXRcbiAgICByZXR1cm4gZmFpbGVkO1xuICB9XG5cbiAgY29uc3QgaW5pdGlhbGl6ZUZpbHRlcjogRmlsdGVyID0ge1xuICAgIC4uLmdldERlZmF1bHRGaWx0ZXIoe2RhdGFJZDogZmlsdGVyLmRhdGFJZH0pLFxuICAgIC4uLmZpbHRlcixcbiAgICBkYXRhSWQ6IGZpbHRlckRhdGFJZCxcbiAgICBuYW1lOiB0b0FycmF5KGZpbHRlci5uYW1lKVxuICB9O1xuXG4gIGNvbnN0IGZpZWxkTmFtZSA9IGluaXRpYWxpemVGaWx0ZXIubmFtZVtmaWx0ZXJEYXRhc2V0SW5kZXhdO1xuICBjb25zdCB7ZmlsdGVyOiB1cGRhdGVkRmlsdGVyLCBkYXRhc2V0OiB1cGRhdGVkRGF0YXNldH0gPSBhcHBseUZpbHRlckZpZWxkTmFtZShcbiAgICBpbml0aWFsaXplRmlsdGVyLFxuICAgIGRhdGFzZXQsXG4gICAgZmllbGROYW1lLFxuICAgIGZpbHRlckRhdGFzZXRJbmRleCxcbiAgICB7bWVyZ2VEb21haW46IHRydWV9XG4gICk7XG5cbiAgaWYgKCF1cGRhdGVkRmlsdGVyKSB7XG4gICAgcmV0dXJuIGZhaWxlZDtcbiAgfVxuXG4gIHVwZGF0ZWRGaWx0ZXIudmFsdWUgPSBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluKGZpbHRlci52YWx1ZSwgdXBkYXRlZEZpbHRlcik7XG4gIHVwZGF0ZWRGaWx0ZXIudmlldyA9IGZpbHRlci52aWV3ID8/IHVwZGF0ZWRGaWx0ZXIudmlldztcblxuICBpZiAodXBkYXRlZEZpbHRlci52YWx1ZSA9PT0gbnVsbCkge1xuICAgIC8vIGNhbm5vdCBhZGp1c3Qgc2F2ZWQgdmFsdWUgdG8gZmlsdGVyXG4gICAgcmV0dXJuIGZhaWxlZDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZmlsdGVyOiB2YWxpZGF0ZUZpbHRlcllBeGlzKHVwZGF0ZWRGaWx0ZXIsIHVwZGF0ZWREYXRhc2V0KSxcbiAgICBkYXRhc2V0OiB1cGRhdGVkRGF0YXNldFxuICB9O1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIGZpbHRlciBjb25maWcgd2l0aCBuZXcgZGF0YSxcbiAqIGNhbGN1bGF0ZSBkb21haW4gYW5kIGZpZWxkSWR4IGJhc2VkIG5ldyBmaWVsZHMgYW5kIGRhdGFcbiAqXG4gKiBAcGFyYW0gZGF0YXNldFxuICogQHBhcmFtIGZpbHRlciAtIGZpbHRlciB0byBiZSB2YWxpZGF0ZVxuICogQHBhcmFtIGxheWVycyAtIGxheWVyc1xuICogQHJldHVybiB2YWxpZGF0ZWQgZmlsdGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUZpbHRlcldpdGhEYXRhPEsgZXh0ZW5kcyBLZXBsZXJUYWJsZU1vZGVsPEssIEw+LCBMPihcbiAgZGF0YXNldDogSyxcbiAgZmlsdGVyOiBQYXJzZWRGaWx0ZXIsXG4gIGxheWVyczogTFtdXG4pOiB7ZmlsdGVyOiBGaWx0ZXI7IGRhdGFzZXQ6IEt9IHtcbiAgcmV0dXJuIGZpbHRlci50eXBlICYmIGZpbHRlclZhbGlkYXRvcnMuaGFzT3duUHJvcGVydHkoZmlsdGVyLnR5cGUpXG4gICAgPyBmaWx0ZXJWYWxpZGF0b3JzW2ZpbHRlci50eXBlXShkYXRhc2V0LCBmaWx0ZXIsIGxheWVycylcbiAgICA6IHZhbGlkYXRlRmlsdGVyKGRhdGFzZXQsIGZpbHRlcik7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgWUF4aXNcbiAqIEBwYXJhbSBmaWx0ZXJcbiAqIEBwYXJhbSBkYXRhc2V0XG4gKiBAcmV0dXJuIHsqfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUZpbHRlcllBeGlzKGZpbHRlciwgZGF0YXNldCkge1xuICAvLyBUT0RPOiB2YWxpZGF0ZSB5QXhpcyBhZ2FpbnN0IG90aGVyIGRhdGFzZXRzXG5cbiAgY29uc3Qge2ZpZWxkc30gPSBkYXRhc2V0O1xuICBjb25zdCB7eUF4aXN9ID0gZmlsdGVyO1xuICAvLyBUT0RPOiB2YWxpZGF0ZSB5QXhpcyBhZ2FpbnN0IG90aGVyIGRhdGFzZXRzXG4gIGlmICh5QXhpcykge1xuICAgIGNvbnN0IG1hdGNoZWRBeGlzID0gZmllbGRzLmZpbmQoKHtuYW1lLCB0eXBlfSkgPT4gbmFtZSA9PT0geUF4aXMubmFtZSAmJiB0eXBlID09PSB5QXhpcy50eXBlKTtcblxuICAgIGZpbHRlciA9IG1hdGNoZWRBeGlzXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5maWx0ZXIsXG4gICAgICAgICAgeUF4aXM6IG1hdGNoZWRBeGlzLFxuICAgICAgICAgIC4uLmdldEZpbHRlclBsb3Qoey4uLmZpbHRlciwgeUF4aXM6IG1hdGNoZWRBeGlzfSwgZGF0YXNldClcbiAgICAgICAgfVxuICAgICAgOiBmaWx0ZXI7XG4gIH1cblxuICByZXR1cm4gZmlsdGVyO1xufVxuXG4vKipcbiAqIEdldCBkZWZhdWx0IGZpbHRlciBwcm9wIGJhc2VkIG9uIGZpZWxkIHR5cGVcbiAqXG4gKiBAcGFyYW0gZmllbGRcbiAqIEBwYXJhbSBmaWVsZERvbWFpblxuICogQHJldHVybnMgZGVmYXVsdCBmaWx0ZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbHRlclByb3BzKFxuICBmaWVsZDogRmllbGQsXG4gIGZpZWxkRG9tYWluOiBGaWVsZERvbWFpblxuKTogUGFydGlhbDxGaWx0ZXI+ICYge2ZpZWxkVHlwZTogc3RyaW5nfSB7XG4gIGNvbnN0IGZpbHRlclByb3BzID0ge1xuICAgIC4uLmZpZWxkRG9tYWluLFxuICAgIGZpZWxkVHlwZTogZmllbGQudHlwZSxcbiAgICB2aWV3OiBGSUxURVJfVklFV19UWVBFUy5zaWRlXG4gIH07XG5cbiAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMucmVhbDpcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5pbnRlZ2VyOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZmlsdGVyUHJvcHMsXG4gICAgICAgIHZhbHVlOiBmaWVsZERvbWFpbi5kb21haW4sXG4gICAgICAgIHR5cGU6IEZJTFRFUl9UWVBFUy5yYW5nZSxcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICB0eXBlT3B0aW9uczogW0ZJTFRFUl9UWVBFUy5yYW5nZV0sXG4gICAgICAgIGdwdTogdHJ1ZVxuICAgICAgfTtcblxuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmJvb2xlYW46XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5maWx0ZXJQcm9wcyxcbiAgICAgICAgdHlwZTogRklMVEVSX1RZUEVTLnNlbGVjdCxcbiAgICAgICAgdmFsdWU6IHRydWUsXG4gICAgICAgIGdwdTogZmFsc2VcbiAgICAgIH07XG5cbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5zdHJpbmc6XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMuZGF0ZTpcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmZpbHRlclByb3BzLFxuICAgICAgICB0eXBlOiBGSUxURVJfVFlQRVMubXVsdGlTZWxlY3QsXG4gICAgICAgIHZhbHVlOiBbXSxcbiAgICAgICAgZ3B1OiBmYWxzZVxuICAgICAgfTtcblxuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnRpbWVzdGFtcDpcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmZpbHRlclByb3BzLFxuICAgICAgICB0eXBlOiBGSUxURVJfVFlQRVMudGltZVJhbmdlLFxuICAgICAgICB2aWV3OiBGSUxURVJfVklFV19UWVBFUy5lbmxhcmdlZCxcbiAgICAgICAgZml4ZWREb21haW46IHRydWUsXG4gICAgICAgIHZhbHVlOiBmaWx0ZXJQcm9wcy5kb21haW4sXG4gICAgICAgIGdwdTogdHJ1ZVxuICAgICAgfTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICByZXR1cm4ge307XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGdldFBvbHlnb25GaWx0ZXJGdW5jdG9yID0gKGxheWVyLCBmaWx0ZXIsIGRhdGFDb250YWluZXIpID0+IHtcbiAgY29uc3QgZ2V0UG9zaXRpb24gPSBsYXllci5nZXRQb3NpdGlvbkFjY2Vzc29yKGRhdGFDb250YWluZXIpO1xuXG4gIHN3aXRjaCAobGF5ZXIudHlwZSkge1xuICAgIGNhc2UgTEFZRVJfVFlQRVMucG9pbnQ6XG4gICAgY2FzZSBMQVlFUl9UWVBFUy5pY29uOlxuICAgICAgcmV0dXJuIGRhdGEgPT4ge1xuICAgICAgICBjb25zdCBwb3MgPSBnZXRQb3NpdGlvbihkYXRhKTtcbiAgICAgICAgcmV0dXJuIHBvcy5ldmVyeShOdW1iZXIuaXNGaW5pdGUpICYmIGlzSW5Qb2x5Z29uKHBvcywgZmlsdGVyLnZhbHVlKTtcbiAgICAgIH07XG4gICAgY2FzZSBMQVlFUl9UWVBFUy5hcmM6XG4gICAgY2FzZSBMQVlFUl9UWVBFUy5saW5lOlxuICAgICAgcmV0dXJuIGRhdGEgPT4ge1xuICAgICAgICBjb25zdCBwb3MgPSBnZXRQb3NpdGlvbihkYXRhKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBwb3MuZXZlcnkoTnVtYmVyLmlzRmluaXRlKSAmJlxuICAgICAgICAgIFtcbiAgICAgICAgICAgIFtwb3NbMF0sIHBvc1sxXV0sXG4gICAgICAgICAgICBbcG9zWzNdLCBwb3NbNF1dXG4gICAgICAgICAgXS5ldmVyeShwb2ludCA9PiBpc0luUG9seWdvbihwb2ludCwgZmlsdGVyLnZhbHVlKSlcbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgY2FzZSBMQVlFUl9UWVBFUy5oZXhhZ29uSWQ6XG4gICAgICBpZiAobGF5ZXIuZGF0YVRvRmVhdHVyZSAmJiBsYXllci5kYXRhVG9GZWF0dXJlLmNlbnRyb2lkcykge1xuICAgICAgICByZXR1cm4gZGF0YSA9PiB7XG4gICAgICAgICAgLy8gbnVsbCBvciBnZXRDZW50cm9pZCh7aWR9KVxuICAgICAgICAgIGNvbnN0IGNlbnRyb2lkID0gbGF5ZXIuZGF0YVRvRmVhdHVyZS5jZW50cm9pZHNbZGF0YS5pbmRleF07XG4gICAgICAgICAgcmV0dXJuIGNlbnRyb2lkICYmIGlzSW5Qb2x5Z29uKGNlbnRyb2lkLCBmaWx0ZXIudmFsdWUpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGEgPT4ge1xuICAgICAgICBjb25zdCBpZCA9IGdldFBvc2l0aW9uKGRhdGEpO1xuICAgICAgICBpZiAoIWgzSXNWYWxpZChpZCkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcG9zID0gZ2V0Q2VudHJvaWQoe2lkfSk7XG4gICAgICAgIHJldHVybiBwb3MuZXZlcnkoTnVtYmVyLmlzRmluaXRlKSAmJiBpc0luUG9seWdvbihwb3MsIGZpbHRlci52YWx1ZSk7XG4gICAgICB9O1xuICAgIGNhc2UgTEFZRVJfVFlQRVMuZ2VvanNvbjpcbiAgICAgIHJldHVybiBkYXRhID0+IHtcbiAgICAgICAgcmV0dXJuIGxheWVyLmlzSW5Qb2x5Z29uKGRhdGEsIGRhdGEuaW5kZXgsIGZpbHRlci52YWx1ZSk7XG4gICAgICB9O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gKCkgPT4gdHJ1ZTtcbiAgfVxufTtcblxuLyoqXG4gKiBAcGFyYW0gcGFyYW0gQW4gb2JqZWN0IHRoYXQgcmVwcmVzZW50cyBhIHJvdyByZWNvcmQuXG4gKiBAcGFyYW0gcGFyYW0uaW5kZXggSW5kZXggb2YgdGhlIHJvdyBpbiBkYXRhIGNvbnRhaW5lci5cbiAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSB0byBrZWVwIHRoZSBlbGVtZW50LCBvciBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbnR5cGUgZmlsdGVyRnVuY3Rpb24gPSAoZGF0YToge2luZGV4OiBudW1iZXJ9KSA9PiBib29sZWFuO1xuLyoqXG4gKiBAcGFyYW0gZmllbGQgZGF0YXNldCBGaWVsZFxuICogQHBhcmFtIGRhdGFJZCBEYXRhc2V0IGlkXG4gKiBAcGFyYW0gZmlsdGVyIEZpbHRlciBvYmplY3RcbiAqIEBwYXJhbSBsYXllcnMgbGlzdCBvZiBsYXllcnMgdG8gZmlsdGVyIHVwb25cbiAqIEBwYXJhbSBkYXRhQ29udGFpbmVyIERhdGEgY29udGFpbmVyXG4gKiBAcmV0dXJuIGZpbHRlckZ1bmN0aW9uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWx0ZXJGdW5jdGlvbjxMIGV4dGVuZHMge2NvbmZpZzoge2RhdGFJZDogc3RyaW5nIHwgbnVsbH07IGlkOiBzdHJpbmd9PihcbiAgZmllbGQ6IEZpZWxkIHwgbnVsbCxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGZpbHRlcjogRmlsdGVyLFxuICBsYXllcnM6IExbXSxcbiAgZGF0YUNvbnRhaW5lcjogRGF0YUNvbnRhaW5lckludGVyZmFjZVxuKTogZmlsdGVyRnVuY3Rpb24ge1xuICAvLyBmaWVsZCBjb3VsZCBiZSBudWxsIGluIHBvbHlnb24gZmlsdGVyXG4gIGNvbnN0IHZhbHVlQWNjZXNzb3IgPSBmaWVsZCA/IGZpZWxkLnZhbHVlQWNjZXNzb3IgOiBkYXRhID0+IG51bGw7XG4gIGNvbnN0IGRlZmF1bHRGdW5jID0gZCA9PiB0cnVlO1xuXG4gIGlmIChmaWx0ZXIuZW5hYmxlZCA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gZGVmYXVsdEZ1bmM7XG4gIH1cblxuICBzd2l0Y2ggKGZpbHRlci50eXBlKSB7XG4gICAgY2FzZSBGSUxURVJfVFlQRVMucmFuZ2U6XG4gICAgICByZXR1cm4gZGF0YSA9PiBpc0luUmFuZ2UodmFsdWVBY2Nlc3NvcihkYXRhKSwgZmlsdGVyLnZhbHVlKTtcbiAgICBjYXNlIEZJTFRFUl9UWVBFUy5tdWx0aVNlbGVjdDpcbiAgICAgIHJldHVybiBkYXRhID0+IGZpbHRlci52YWx1ZS5pbmNsdWRlcyh2YWx1ZUFjY2Vzc29yKGRhdGEpKTtcbiAgICBjYXNlIEZJTFRFUl9UWVBFUy5zZWxlY3Q6XG4gICAgICByZXR1cm4gZGF0YSA9PiB2YWx1ZUFjY2Vzc29yKGRhdGEpID09PSBmaWx0ZXIudmFsdWU7XG4gICAgY2FzZSBGSUxURVJfVFlQRVMudGltZVJhbmdlOlxuICAgICAgaWYgKCFmaWVsZCkge1xuICAgICAgICByZXR1cm4gZGVmYXVsdEZ1bmM7XG4gICAgICB9XG4gICAgICBjb25zdCBtYXBwZWRWYWx1ZSA9IGdldChmaWVsZCwgWydmaWx0ZXJQcm9wcycsICdtYXBwZWRWYWx1ZSddKTtcbiAgICAgIGNvbnN0IGFjY2Vzc29yID0gQXJyYXkuaXNBcnJheShtYXBwZWRWYWx1ZSlcbiAgICAgICAgPyBkYXRhID0+IG1hcHBlZFZhbHVlW2RhdGEuaW5kZXhdXG4gICAgICAgIDogZGF0YSA9PiB0aW1lVG9Vbml4TWlsbGkodmFsdWVBY2Nlc3NvcihkYXRhKSwgZmllbGQuZm9ybWF0KTtcbiAgICAgIHJldHVybiBkYXRhID0+IGlzSW5SYW5nZShhY2Nlc3NvcihkYXRhKSwgZmlsdGVyLnZhbHVlKTtcbiAgICBjYXNlIEZJTFRFUl9UWVBFUy5wb2x5Z29uOlxuICAgICAgaWYgKCFsYXllcnMgfHwgIWxheWVycy5sZW5ndGggfHwgIWZpbHRlci5sYXllcklkKSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0RnVuYztcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxheWVyRmlsdGVyRnVuY3Rpb25zID0gZmlsdGVyLmxheWVySWRcbiAgICAgICAgLm1hcChpZCA9PiBsYXllcnMuZmluZChsID0+IGwuaWQgPT09IGlkKSlcbiAgICAgICAgLmZpbHRlcihsID0+IGwgJiYgbC5jb25maWcuZGF0YUlkID09PSBkYXRhSWQpXG4gICAgICAgIC5tYXAobGF5ZXIgPT4gZ2V0UG9seWdvbkZpbHRlckZ1bmN0b3IobGF5ZXIsIGZpbHRlciwgZGF0YUNvbnRhaW5lcikpO1xuXG4gICAgICByZXR1cm4gZGF0YSA9PiBsYXllckZpbHRlckZ1bmN0aW9ucy5ldmVyeShmaWx0ZXJGdW5jID0+IGZpbHRlckZ1bmMoZGF0YSkpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZGVmYXVsdEZ1bmM7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUZpbHRlckRhdGFJZChkYXRhSWQ6IHN0cmluZyB8IHN0cmluZ1tdKTogRmlsdGVyQmFzZTxMaW5lQ2hhcnQ+IHtcbiAgcmV0dXJuIGdldERlZmF1bHRGaWx0ZXIoe2RhdGFJZH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyRGF0YUJ5RmlsdGVyVHlwZXMoXG4gIHtcbiAgICBkeW5hbWljRG9tYWluRmlsdGVycyxcbiAgICBjcHVGaWx0ZXJzLFxuICAgIGZpbHRlckZ1bmNzXG4gIH06IHtcbiAgICBkeW5hbWljRG9tYWluRmlsdGVyczogRmlsdGVyW10gfCBudWxsO1xuICAgIGNwdUZpbHRlcnM6IEZpbHRlcltdIHwgbnVsbDtcbiAgICBmaWx0ZXJGdW5jczoge1xuICAgICAgW2tleTogc3RyaW5nXTogZmlsdGVyRnVuY3Rpb247XG4gICAgfTtcbiAgfSxcbiAgZGF0YUNvbnRhaW5lcjogRGF0YUNvbnRhaW5lckludGVyZmFjZVxuKTogRmlsdGVyUmVzdWx0IHtcbiAgY29uc3QgZmlsdGVyZWRJbmRleEZvckRvbWFpbjogbnVtYmVyW10gPSBbXTtcbiAgY29uc3QgZmlsdGVyZWRJbmRleDogbnVtYmVyW10gPSBbXTtcblxuICBjb25zdCBmaWx0ZXJDb250ZXh0ID0ge2luZGV4OiAtMSwgZGF0YUNvbnRhaW5lcn07XG4gIGNvbnN0IGZpbHRlckZ1bmNDYWxsZXIgPSAoZmlsdGVyOiBGaWx0ZXIpID0+IGZpbHRlckZ1bmNzW2ZpbHRlci5pZF0oZmlsdGVyQ29udGV4dCk7XG5cbiAgY29uc3QgbnVtUm93cyA9IGRhdGFDb250YWluZXIubnVtUm93cygpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVJvd3M7ICsraSkge1xuICAgIGZpbHRlckNvbnRleHQuaW5kZXggPSBpO1xuXG4gICAgY29uc3QgbWF0Y2hGb3JEb21haW4gPSBkeW5hbWljRG9tYWluRmlsdGVycyAmJiBkeW5hbWljRG9tYWluRmlsdGVycy5ldmVyeShmaWx0ZXJGdW5jQ2FsbGVyKTtcbiAgICBpZiAobWF0Y2hGb3JEb21haW4pIHtcbiAgICAgIGZpbHRlcmVkSW5kZXhGb3JEb21haW4ucHVzaChmaWx0ZXJDb250ZXh0LmluZGV4KTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXRjaEZvclJlbmRlciA9IGNwdUZpbHRlcnMgJiYgY3B1RmlsdGVycy5ldmVyeShmaWx0ZXJGdW5jQ2FsbGVyKTtcbiAgICBpZiAobWF0Y2hGb3JSZW5kZXIpIHtcbiAgICAgIGZpbHRlcmVkSW5kZXgucHVzaChmaWx0ZXJDb250ZXh0LmluZGV4KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLihkeW5hbWljRG9tYWluRmlsdGVycyA/IHtmaWx0ZXJlZEluZGV4Rm9yRG9tYWlufSA6IHt9KSxcbiAgICAuLi4oY3B1RmlsdGVycyA/IHtmaWx0ZXJlZEluZGV4fSA6IHt9KVxuICB9O1xufVxuXG4vKipcbiAqIEdldCBhIHJlY29yZCBvZiBmaWx0ZXJzIGJhc2VkIG9uIGRvbWFpbiB0eXBlIGFuZCBncHUgLyBjcHVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbHRlclJlY29yZChcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGZpbHRlcnM6IEZpbHRlcltdLFxuICBvcHQ6IEZpbHRlckRhdGFzZXRPcHQgPSB7fVxuKTogRmlsdGVyUmVjb3JkIHtcbiAgY29uc3QgZmlsdGVyUmVjb3JkOiBGaWx0ZXJSZWNvcmQgPSB7XG4gICAgZHluYW1pY0RvbWFpbjogW10sXG4gICAgZml4ZWREb21haW46IFtdLFxuICAgIGNwdTogW10sXG4gICAgZ3B1OiBbXVxuICB9O1xuXG4gIGZpbHRlcnMuZm9yRWFjaChmID0+IHtcbiAgICBpZiAoaXNWYWxpZEZpbHRlclZhbHVlKGYudHlwZSwgZi52YWx1ZSkgJiYgdG9BcnJheShmLmRhdGFJZCkuaW5jbHVkZXMoZGF0YUlkKSkge1xuICAgICAgKGYuZml4ZWREb21haW4gfHwgb3B0Lmlnbm9yZURvbWFpblxuICAgICAgICA/IGZpbHRlclJlY29yZC5maXhlZERvbWFpblxuICAgICAgICA6IGZpbHRlclJlY29yZC5keW5hbWljRG9tYWluXG4gICAgICApLnB1c2goZik7XG5cbiAgICAgIChmLmdwdSAmJiAhb3B0LmNwdU9ubHkgPyBmaWx0ZXJSZWNvcmQuZ3B1IDogZmlsdGVyUmVjb3JkLmNwdSkucHVzaChmKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBmaWx0ZXJSZWNvcmQ7XG59XG5cbi8qKlxuICogQ29tcGFyZSBmaWx0ZXIgcmVjb3JkcyB0byBnZXQgd2hhdCBoYXMgY2hhbmdlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlmZkZpbHRlcnMoXG4gIGZpbHRlclJlY29yZDogRmlsdGVyUmVjb3JkLFxuICBvbGRGaWx0ZXJSZWNvcmQ6IEZpbHRlclJlY29yZCB8IHt9ID0ge31cbik6IEZpbHRlckNoYW5nZWQge1xuICBsZXQgZmlsdGVyQ2hhbmdlZDogUGFydGlhbDxGaWx0ZXJDaGFuZ2VkPiA9IHt9O1xuXG4gIChPYmplY3QuZW50cmllcyhmaWx0ZXJSZWNvcmQpIGFzIEVudHJpZXM8RmlsdGVyUmVjb3JkPikuZm9yRWFjaCgoW3JlY29yZCwgaXRlbXNdKSA9PiB7XG4gICAgaXRlbXMuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgICAgY29uc3Qgb2xkRmlsdGVyOiBGaWx0ZXIgPSAob2xkRmlsdGVyUmVjb3JkW3JlY29yZF0gfHwgW10pLmZpbmQoXG4gICAgICAgIChmOiBGaWx0ZXIpID0+IGYuaWQgPT09IGZpbHRlci5pZFxuICAgICAgKTtcblxuICAgICAgaWYgKCFvbGRGaWx0ZXIpIHtcbiAgICAgICAgLy8gYWRkZWRcbiAgICAgICAgZmlsdGVyQ2hhbmdlZCA9IHNldChbcmVjb3JkLCBmaWx0ZXIuaWRdLCAnYWRkZWQnLCBmaWx0ZXJDaGFuZ2VkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGNoZWNrICB3aGF0IGhhcyBjaGFuZ2VkXG4gICAgICAgIFsnbmFtZScsICd2YWx1ZScsICdkYXRhSWQnXS5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXJbcHJvcF0gIT09IG9sZEZpbHRlcltwcm9wXSkge1xuICAgICAgICAgICAgZmlsdGVyQ2hhbmdlZCA9IHNldChbcmVjb3JkLCBmaWx0ZXIuaWRdLCBgJHtwcm9wfV9jaGFuZ2VkYCwgZmlsdGVyQ2hhbmdlZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIChvbGRGaWx0ZXJSZWNvcmRbcmVjb3JkXSB8fCBbXSkuZm9yRWFjaCgob2xkRmlsdGVyOiBGaWx0ZXIpID0+IHtcbiAgICAgIC8vIGRlbGV0ZWRcbiAgICAgIGlmICghaXRlbXMuZmluZChmID0+IGYuaWQgPT09IG9sZEZpbHRlci5pZCkpIHtcbiAgICAgICAgZmlsdGVyQ2hhbmdlZCA9IHNldChbcmVjb3JkLCBvbGRGaWx0ZXIuaWRdLCAnZGVsZXRlZCcsIGZpbHRlckNoYW5nZWQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gey4uLntkeW5hbWljRG9tYWluOiBudWxsLCBmaXhlZERvbWFpbjogbnVsbCwgY3B1OiBudWxsLCBncHU6IG51bGx9LCAuLi5maWx0ZXJDaGFuZ2VkfTtcbn1cbi8qKlxuICogQ2FsbCBieSBwYXJzaW5nIGZpbHRlcnMgZnJvbSBVUkxcbiAqIENoZWNrIGlmIHZhbHVlIG9mIGZpbHRlciB3aXRoaW4gZmlsdGVyIGRvbWFpbiwgaWYgbm90IGFkanVzdCBpdCB0byBtYXRjaFxuICogZmlsdGVyIGRvbWFpblxuICpcbiAqIEByZXR1cm5zIHZhbHVlIC0gYWRqdXN0ZWQgdmFsdWUgdG8gbWF0Y2ggZmlsdGVyIG9yIG51bGwgdG8gcmVtb3ZlIGZpbHRlclxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGZ1bmN0aW9uIGFkanVzdFZhbHVlVG9GaWx0ZXJEb21haW4odmFsdWU6IEZpbHRlclsndmFsdWUnXSwge2RvbWFpbiwgdHlwZX0pIHtcbiAgaWYgKCF0eXBlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIGlmIHRoZSBjdXJyZW50IGZpbHRlciBpcyBhIHBvbHlnb24gaXQgd2lsbCBub3QgaGF2ZSBhbnkgZG9tYWluXG4gIC8vIGFsbCBvdGhlciBmaWx0ZXIgdHlwZXMgcmVxdWlyZSBkb21haW5cbiAgaWYgKHR5cGUgIT09IEZJTFRFUl9UWVBFUy5wb2x5Z29uICYmICFkb21haW4pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIEZJTFRFUl9UWVBFUy5yYW5nZTpcbiAgICBjYXNlIEZJTFRFUl9UWVBFUy50aW1lUmFuZ2U6XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpIHx8IHZhbHVlLmxlbmd0aCAhPT0gMikge1xuICAgICAgICByZXR1cm4gZG9tYWluLm1hcChkID0+IGQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWUubWFwKChkLCBpKSA9PiAobm90TnVsbG9yVW5kZWZpbmVkKGQpICYmIGlzSW5SYW5nZShkLCBkb21haW4pID8gZCA6IGRvbWFpbltpXSkpO1xuXG4gICAgY2FzZSBGSUxURVJfVFlQRVMubXVsdGlTZWxlY3Q6XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZpbHRlcmVkVmFsdWUgPSB2YWx1ZS5maWx0ZXIoZCA9PiBkb21haW4uaW5jbHVkZXMoZCkpO1xuICAgICAgcmV0dXJuIGZpbHRlcmVkVmFsdWUubGVuZ3RoID8gZmlsdGVyZWRWYWx1ZSA6IFtdO1xuXG4gICAgY2FzZSBGSUxURVJfVFlQRVMuc2VsZWN0OlxuICAgICAgcmV0dXJuIGRvbWFpbi5pbmNsdWRlcyh2YWx1ZSkgPyB2YWx1ZSA6IHRydWU7XG4gICAgY2FzZSBGSUxURVJfVFlQRVMucG9seWdvbjpcbiAgICAgIHJldHVybiB2YWx1ZTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuLyogZXNsaW50LWVuYWJsZSBjb21wbGV4aXR5ICovXG5cbi8qKlxuICogQ2FsY3VsYXRlIG51bWVyaWMgZG9tYWluIGFuZCBzdWl0YWJsZSBzdGVwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROdW1lcmljRmllbGREb21haW4oXG4gIGRhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2UsXG4gIHZhbHVlQWNjZXNzb3I6IGRhdGFWYWx1ZUFjY2Vzc29yXG4pOiBSYW5nZUZpZWxkRG9tYWluIHtcbiAgbGV0IGRvbWFpbjogW251bWJlciwgbnVtYmVyXSA9IFswLCAxXTtcbiAgbGV0IHN0ZXAgPSAwLjE7XG5cbiAgY29uc3QgbWFwcGVkVmFsdWUgPSBkYXRhQ29udGFpbmVyLm1hcEluZGV4KHZhbHVlQWNjZXNzb3IpO1xuXG4gIGlmIChkYXRhQ29udGFpbmVyLm51bVJvd3MoKSA+IDEpIHtcbiAgICBkb21haW4gPSBTY2FsZVV0aWxzLmdldExpbmVhckRvbWFpbihtYXBwZWRWYWx1ZSk7XG4gICAgY29uc3QgZGlmZiA9IGRvbWFpblsxXSAtIGRvbWFpblswXTtcblxuICAgIC8vIGluIGNhc2UgZXF1YWwgZG9tYWluLCBbOTYsIDk2XSwgd2hpY2ggd2lsbCBicmVhayBxdWFudGl6ZSBzY2FsZVxuICAgIGlmICghZGlmZikge1xuICAgICAgZG9tYWluWzFdID0gZG9tYWluWzBdICsgMTtcbiAgICB9XG5cbiAgICBzdGVwID0gZ2V0TnVtZXJpY1N0ZXBTaXplKGRpZmYpIHx8IHN0ZXA7XG4gICAgZG9tYWluWzBdID0gZm9ybWF0TnVtYmVyQnlTdGVwKGRvbWFpblswXSwgc3RlcCwgJ2Zsb29yJyk7XG4gICAgZG9tYWluWzFdID0gZm9ybWF0TnVtYmVyQnlTdGVwKGRvbWFpblsxXSwgc3RlcCwgJ2NlaWwnKTtcbiAgfVxuXG4gIGNvbnN0IHtoaXN0b2dyYW0sIGVubGFyZ2VkSGlzdG9ncmFtfSA9IGdldEhpc3RvZ3JhbShkb21haW4sIG1hcHBlZFZhbHVlKTtcblxuICByZXR1cm4ge2RvbWFpbiwgc3RlcCwgaGlzdG9ncmFtLCBlbmxhcmdlZEhpc3RvZ3JhbX07XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIHN0ZXAgc2l6ZSBmb3IgcmFuZ2UgYW5kIHRpbWVyYW5nZSBmaWx0ZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE51bWVyaWNTdGVwU2l6ZShkaWZmOiBudW1iZXIpOiBudW1iZXIge1xuICBkaWZmID0gTWF0aC5hYnMoZGlmZik7XG5cbiAgaWYgKGRpZmYgPiAxMDApIHtcbiAgICByZXR1cm4gMTtcbiAgfSBlbHNlIGlmIChkaWZmID4gMykge1xuICAgIHJldHVybiAwLjAxO1xuICB9IGVsc2UgaWYgKGRpZmYgPiAxKSB7XG4gICAgcmV0dXJuIDAuMDAxO1xuICB9XG4gIC8vIFRyeSB0byBnZXQgYXQgbGVhc3QgMTAwMCBzdGVwcyAtIGFuZCBrZWVwIHRoZSBzdGVwIHNpemUgYmVsb3cgdGhhdCBvZlxuICAvLyB0aGUgKGRpZmYgPiAxKSBjYXNlLlxuICBjb25zdCB4ID0gZGlmZiAvIDEwMDA7XG4gIC8vIEZpbmQgdGhlIGV4cG9uZW50IGFuZCB0cnVuY2F0ZSB0byAxMCB0byB0aGUgcG93ZXIgb2YgdGhhdCBleHBvbmVudFxuXG4gIGNvbnN0IGV4cG9uZW50aWFsRm9ybSA9IHgudG9FeHBvbmVudGlhbCgpO1xuICBjb25zdCBleHBvbmVudCA9IHBhcnNlRmxvYXQoZXhwb25lbnRpYWxGb3JtLnNwbGl0KCdlJylbMV0pO1xuXG4gIC8vIEdldHRpbmcgcmVhZHkgZm9yIG5vZGUgMTJcbiAgLy8gdGhpcyBpcyB3aHkgd2UgbmVlZCBkZWNpbWFsLmpzXG4gIC8vIE1hdGgucG93KDEwLCAtNSkgPSAwLjAwMDAwOTk5OTk5OTk5OTk5OTk5OVxuICAvLyB0aGUgYWJvdmUgcmVzdWx0IHNob3dzIGluIGJyb3dzZXIgYW5kIG5vZGUgMTBcbiAgLy8gbm9kZSAxMiBiZWhhdmVzIGNvcnJlY3RseVxuICByZXR1cm4gbmV3IERlY2ltYWwoMTApLnBvdyhleHBvbmVudCkudG9OdW1iZXIoKTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGUgdGltZXN0YW1wIGRvbWFpbiBhbmQgc3VpdGFibGUgc3RlcFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGltZXN0YW1wRmllbGREb21haW4oXG4gIGRhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2UsXG4gIHZhbHVlQWNjZXNzb3I6IGRhdGFWYWx1ZUFjY2Vzc29yXG4pOiBUaW1lUmFuZ2VGaWVsZERvbWFpbiB7XG4gIC8vIHRvIGF2b2lkIGNvbnZlcnRpbmcgc3RyaW5nIGZvcm1hdCB0aW1lIHRvIGVwb2NoXG4gIC8vIGV2ZXJ5IHRpbWUgd2UgY29tcGFyZSB3ZSBzdG9yZSBhIHZhbHVlIG1hcHBlZCB0byBpbnQgaW4gZmlsdGVyIGRvbWFpblxuXG4gIGNvbnN0IG1hcHBlZFZhbHVlID0gZGF0YUNvbnRhaW5lci5tYXBJbmRleCh2YWx1ZUFjY2Vzc29yKTtcbiAgY29uc3QgZG9tYWluID0gU2NhbGVVdGlscy5nZXRMaW5lYXJEb21haW4obWFwcGVkVmFsdWUpO1xuICBjb25zdCBkZWZhdWx0VGltZUZvcm1hdCA9IGdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlcihkb21haW4pO1xuXG4gIGxldCBzdGVwID0gMC4wMTtcblxuICBjb25zdCBkaWZmID0gZG9tYWluWzFdIC0gZG9tYWluWzBdO1xuICAvLyBpbiBjYXNlIGVxdWFsIHRpbWVzdGFtcCBhZGQgMSBzZWNvbmQgcGFkZGluZyB0byBwcmV2ZW50IGJyZWFrXG4gIGlmICghZGlmZikge1xuICAgIGRvbWFpblsxXSA9IGRvbWFpblswXSArIDEwMDA7XG4gIH1cbiAgY29uc3QgZW50cnkgPSBUaW1lc3RhbXBTdGVwTWFwLmZpbmQoZiA9PiBmLm1heCA+PSBkaWZmKTtcbiAgaWYgKGVudHJ5KSB7XG4gICAgc3RlcCA9IGVudHJ5LnN0ZXA7XG4gIH1cblxuICBjb25zdCB7aGlzdG9ncmFtLCBlbmxhcmdlZEhpc3RvZ3JhbX0gPSBnZXRIaXN0b2dyYW0oZG9tYWluLCBtYXBwZWRWYWx1ZSk7XG5cbiAgcmV0dXJuIHtcbiAgICBkb21haW4sXG4gICAgc3RlcCxcbiAgICBtYXBwZWRWYWx1ZSxcbiAgICBoaXN0b2dyYW0sXG4gICAgZW5sYXJnZWRIaXN0b2dyYW0sXG4gICAgZGVmYXVsdFRpbWVGb3JtYXRcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhpc3RvZ3JhbUNvbnN0cnVjdChcbiAgZG9tYWluOiBbbnVtYmVyLCBudW1iZXJdLFxuICBtYXBwZWRWYWx1ZTogKE1pbGxpc2Vjb25kIHwgbnVtYmVyKVtdLFxuICBiaW5zOiBudW1iZXJcbik6IEhpc3RvZ3JhbUJpbltdIHtcbiAgcmV0dXJuIGQzSGlzdG9ncmFtKClcbiAgICAudGhyZXNob2xkcyh0aWNrcyhkb21haW5bMF0sIGRvbWFpblsxXSwgYmlucykpXG4gICAgLmRvbWFpbihkb21haW4pKG1hcHBlZFZhbHVlKVxuICAgIC5tYXAoYmluID0+ICh7XG4gICAgICBjb3VudDogYmluLmxlbmd0aCxcbiAgICAgIGJpbixcbiAgICAgIHgwOiBiaW4ueDAsXG4gICAgICB4MTogYmluLngxXG4gICAgfSkpO1xufVxuLyoqXG4gKiBDYWxjdWxhdGUgaGlzdG9ncmFtIGZyb20gZG9tYWluIGFuZCBhcnJheSBvZiB2YWx1ZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEhpc3RvZ3JhbShcbiAgZG9tYWluOiBbbnVtYmVyLCBudW1iZXJdLFxuICBtYXBwZWRWYWx1ZTogKE1pbGxpc2Vjb25kIHwgbnVtYmVyKVtdXG4pOiB7aGlzdG9ncmFtOiBIaXN0b2dyYW1CaW5bXTsgZW5sYXJnZWRIaXN0b2dyYW06IEhpc3RvZ3JhbUJpbltdfSB7XG4gIGNvbnN0IGhpc3RvZ3JhbSA9IGhpc3RvZ3JhbUNvbnN0cnVjdChkb21haW4sIG1hcHBlZFZhbHVlLCBoaXN0b2dyYW1CaW5zKTtcbiAgY29uc3QgZW5sYXJnZWRIaXN0b2dyYW0gPSBoaXN0b2dyYW1Db25zdHJ1Y3QoZG9tYWluLCBtYXBwZWRWYWx1ZSwgZW5sYXJnZWRIaXN0b2dyYW1CaW5zKTtcblxuICByZXR1cm4ge2hpc3RvZ3JhbSwgZW5sYXJnZWRIaXN0b2dyYW19O1xufVxuXG4vKipcbiAqIHJvdW5kIG51bWJlciBiYXNlZCBvbiBzdGVwXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IHZhbFxuICogQHBhcmFtIHtOdW1iZXJ9IHN0ZXBcbiAqIEBwYXJhbSB7c3RyaW5nfSBib3VuZFxuICogQHJldHVybnMge051bWJlcn0gcm91bmRlZCBudW1iZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdE51bWJlckJ5U3RlcCh2YWw6IG51bWJlciwgc3RlcDogbnVtYmVyLCBib3VuZDogJ2Zsb29yJyB8ICdjZWlsJyk6IG51bWJlciB7XG4gIGlmIChib3VuZCA9PT0gJ2Zsb29yJykge1xuICAgIHJldHVybiBNYXRoLmZsb29yKHZhbCAqICgxIC8gc3RlcCkpIC8gKDEgLyBzdGVwKTtcbiAgfVxuXG4gIHJldHVybiBNYXRoLmNlaWwodmFsICogKDEgLyBzdGVwKSkgLyAoMSAvIHN0ZXApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNJblJhbmdlKHZhbDogYW55LCBkb21haW46IG51bWJlcltdKTogYm9vbGVhbiB7XG4gIGlmICghQXJyYXkuaXNBcnJheShkb21haW4pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHZhbCA+PSBkb21haW5bMF0gJiYgdmFsIDw9IGRvbWFpblsxXTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBwb2ludCBpcyB3aXRoaW4gdGhlIHByb3ZpZGVkIHBvbHlnb25cbiAqXG4gKiBAcGFyYW0gcG9pbnQgYXMgaW5wdXQgc2VhcmNoIFtsYXQsIGxuZ11cbiAqIEBwYXJhbSBwb2x5Z29uIFBvaW50cyBtdXN0IGJlIHdpdGhpbiB0aGVzZSAoTXVsdGkpUG9seWdvbihzKVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSW5Qb2x5Z29uKHBvaW50OiBudW1iZXJbXSwgcG9seWdvbjogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiBib29sZWFuV2l0aGluKHR1cmZQb2ludChwb2ludCksIHBvbHlnb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlcihkb21haW46IFtudW1iZXIsIG51bWJlcl0pOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKCFpc1ZhbGlkVGltZURvbWFpbihkb21haW4pKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBkaWZmID0gZG9tYWluWzFdIC0gZG9tYWluWzBdO1xuXG4gIC8vIExvY2FsIGF3YXJlIGZvcm1hdHNcbiAgLy8gaHR0cHM6Ly9tb21lbnRqcy5jb20vZG9jcy8jL3BhcnNpbmcvc3RyaW5nLWZvcm1hdFxuICByZXR1cm4gZGlmZiA+IGR1cmF0aW9uWWVhciA/ICdMJyA6IGRpZmYgPiBkdXJhdGlvbkRheSA/ICdMIExUJyA6ICdMIExUUyc7XG59XG5cbi8qKlxuICogU2FuaXR5IGNoZWNrIG9uIGZpbHRlcnMgdG8gcHJlcGFyZSBmb3Igc2F2ZVxuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vZmlsdGVyLXV0aWxzJykuaXNGaWx0ZXJWYWxpZFRvU2F2ZX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRmlsdGVyVmFsaWRUb1NhdmUoZmlsdGVyOiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBmaWx0ZXI/LnR5cGUgJiYgQXJyYXkuaXNBcnJheShmaWx0ZXI/Lm5hbWUpICYmIChmaWx0ZXI/Lm5hbWUubGVuZ3RoIHx8IGZpbHRlcj8ubGF5ZXJJZC5sZW5ndGgpXG4gICk7XG59XG5cbi8qKlxuICogU2FuaXR5IGNoZWNrIG9uIGZpbHRlcnMgdG8gcHJlcGFyZSBmb3Igc2F2ZVxuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4vZmlsdGVyLXV0aWxzJykuaXNWYWxpZEZpbHRlclZhbHVlfVxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEZpbHRlclZhbHVlKHR5cGU6IHN0cmluZyB8IG51bGwsIHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgaWYgKCF0eXBlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgRklMVEVSX1RZUEVTLnNlbGVjdDpcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gZmFsc2U7XG5cbiAgICBjYXNlIEZJTFRFUl9UWVBFUy5yYW5nZTpcbiAgICBjYXNlIEZJTFRFUl9UWVBFUy50aW1lUmFuZ2U6XG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUuZXZlcnkodiA9PiB2ICE9PSBudWxsICYmICFpc05hTih2KSk7XG5cbiAgICBjYXNlIEZJTFRFUl9UWVBFUy5tdWx0aVNlbGVjdDpcbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiBCb29sZWFuKHZhbHVlLmxlbmd0aCk7XG5cbiAgICBjYXNlIEZJTFRFUl9UWVBFUy5pbnB1dDpcbiAgICAgIHJldHVybiBCb29sZWFuKHZhbHVlLmxlbmd0aCk7XG5cbiAgICBjYXNlIEZJTFRFUl9UWVBFUy5wb2x5Z29uOlxuICAgICAgY29uc3QgY29vcmRpbmF0ZXMgPSBnZXQodmFsdWUsIFsnZ2VvbWV0cnknLCAnY29vcmRpbmF0ZXMnXSk7XG4gICAgICByZXR1cm4gQm9vbGVhbih2YWx1ZSAmJiB2YWx1ZS5pZCAmJiBjb29yZGluYXRlcyk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbHVtbkZpbHRlclByb3BzPEsgZXh0ZW5kcyBLZXBsZXJUYWJsZU1vZGVsPEssIEw+LCBMPihcbiAgZmlsdGVyOiBGaWx0ZXIsXG4gIGRhdGFzZXQ6IEtcbik6IHtsaW5lQ2hhcnQ6IExpbmVDaGFydDsgeUF4czogRmllbGR9IHwge30ge1xuICBpZiAoZmlsdGVyLnBsb3RUeXBlID09PSBQTE9UX1RZUEVTLmhpc3RvZ3JhbSB8fCAhZmlsdGVyLnlBeGlzKSB7XG4gICAgLy8gaGlzdG9ncmFtIHNob3VsZCBiZSBjYWxjdWxhdGVkIHdoZW4gY3JlYXRlIGZpbHRlclxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IHttYXBwZWRWYWx1ZSA9IFtdfSA9IGZpbHRlcjtcbiAgY29uc3Qge3lBeGlzfSA9IGZpbHRlcjtcbiAgY29uc3QgZmllbGRJZHggPSBkYXRhc2V0LmdldENvbHVtbkZpZWxkSWR4KHlBeGlzLm5hbWUpO1xuICBpZiAoZmllbGRJZHggPCAwKSB7XG4gICAgQ29uc29sZS53YXJuKGB5QXhpcyAke3lBeGlzLm5hbWV9IGRvZXMgbm90IGV4aXN0IGluIGRhdGFzZXRgKTtcbiAgICByZXR1cm4ge2xpbmVDaGFydDoge30sIHlBeGlzfTtcbiAgfVxuXG4gIC8vIHJldHVybiBsaW5lQ2hhcnRcbiAgY29uc3Qgc2VyaWVzID0gZGF0YXNldC5kYXRhQ29udGFpbmVyXG4gICAgLm1hcChcbiAgICAgIChyb3csIHJvd0luZGV4KSA9PiAoe1xuICAgICAgICB4OiBtYXBwZWRWYWx1ZVtyb3dJbmRleF0sXG4gICAgICAgIHk6IHJvdy52YWx1ZUF0KGZpZWxkSWR4KVxuICAgICAgfSksXG4gICAgICB0cnVlXG4gICAgKVxuICAgIC5maWx0ZXIoKHt4LCB5fSkgPT4gTnVtYmVyLmlzRmluaXRlKHgpICYmIE51bWJlci5pc0Zpbml0ZSh5KSlcbiAgICAuc29ydCgoYSwgYikgPT4gYXNjZW5kaW5nKGEueCwgYi54KSk7XG5cbiAgY29uc3QgeURvbWFpbiA9IGV4dGVudChzZXJpZXMsIGQgPT4gZC55KTtcbiAgY29uc3QgeERvbWFpbiA9IFtzZXJpZXNbMF0ueCwgc2VyaWVzW3Nlcmllcy5sZW5ndGggLSAxXS54XTtcblxuICByZXR1cm4ge2xpbmVDaGFydDoge3NlcmllcywgeURvbWFpbiwgeERvbWFpbn0sIHlBeGlzfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRGaWx0ZXJQbG90VHlwZShmaWx0ZXI6IEZpbHRlcik6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBmaWx0ZXJQbG90VHlwZXM6IHR5cGVvZiBTdXBwb3J0ZWRQbG90VHlwZVtrZXlvZiB0eXBlb2YgU3VwcG9ydGVkUGxvdFR5cGVdIHwgbnVsbCA9XG4gICAgZmlsdGVyLnR5cGUgJiYgU3VwcG9ydGVkUGxvdFR5cGVbZmlsdGVyLnR5cGVdO1xuICBpZiAoIWZpbHRlclBsb3RUeXBlcykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKCFmaWx0ZXIueUF4aXMpIHtcbiAgICByZXR1cm4gZmlsdGVyUGxvdFR5cGVzLmRlZmF1bHQ7XG4gIH1cblxuICByZXR1cm4gZmlsdGVyUGxvdFR5cGVzW2ZpbHRlci55QXhpcy50eXBlXSB8fCBudWxsO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gZGF0YXNldElkcyBsaXN0IG9mIGRhdGFzZXQgaWRzIHRvIGJlIGZpbHRlcmVkXG4gKiBAcGFyYW0gZGF0YXNldHMgYWxsIGRhdGFzZXRzXG4gKiBAcGFyYW0gZmlsdGVycyBhbGwgZmlsdGVycyB0byBiZSBhcHBsaWVkIHRvIGRhdGFzZXRzXG4gKiBAcmV0dXJuIGRhdGFzZXRzIC0gbmV3IHVwZGF0ZWQgZGF0YXNldHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5RmlsdGVyc1RvRGF0YXNldHM8XG4gIEsgZXh0ZW5kcyBLZXBsZXJUYWJsZU1vZGVsPEssIEw+LFxuICBMIGV4dGVuZHMge2NvbmZpZzoge2RhdGFJZDogc3RyaW5nIHwgbnVsbH19XG4+KFxuICBkYXRhc2V0SWRzOiBzdHJpbmdbXSxcbiAgZGF0YXNldHM6IHtbaWQ6IHN0cmluZ106IEt9LFxuICBmaWx0ZXJzOiBGaWx0ZXJbXSxcbiAgbGF5ZXJzPzogTFtdXG4pOiB7W2lkOiBzdHJpbmddOiBLfSB7XG4gIGNvbnN0IGRhdGFJZHMgPSB0b0FycmF5KGRhdGFzZXRJZHMpO1xuICByZXR1cm4gZGF0YUlkcy5yZWR1Y2UoKGFjYywgZGF0YUlkKSA9PiB7XG4gICAgY29uc3QgbGF5ZXJzVG9GaWx0ZXIgPSAobGF5ZXJzIHx8IFtdKS5maWx0ZXIobCA9PiBsLmNvbmZpZy5kYXRhSWQgPT09IGRhdGFJZCk7XG4gICAgY29uc3QgYXBwbGllZEZpbHRlcnMgPSBmaWx0ZXJzLmZpbHRlcihkID0+IHNob3VsZEFwcGx5RmlsdGVyKGQsIGRhdGFJZCkpO1xuICAgIGNvbnN0IHRhYmxlID0gZGF0YXNldHNbZGF0YUlkXTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5hY2MsXG4gICAgICBbZGF0YUlkXTogdGFibGUuZmlsdGVyVGFibGUoYXBwbGllZEZpbHRlcnMsIGxheWVyc1RvRmlsdGVyLCB7fSlcbiAgICB9O1xuICB9LCBkYXRhc2V0cyk7XG59XG5cbi8qKlxuICogQXBwbGllcyBhIG5ldyBmaWVsZCBuYW1lIHZhbHVlIHRvIGZpZWx0ZXIgYW5kIHVwZGF0ZSBib3RoIGZpbHRlciBhbmQgZGF0YXNldFxuICogQHBhcmFtIGZpbHRlciAtIHRvIGJlIGFwcGxpZWQgdGhlIG5ldyBmaWVsZCBuYW1lIG9uXG4gKiBAcGFyYW0gZGF0YXNldCAtIGRhdGFzZXQgdGhlIGZpZWxkIGJlbG9uZ3MgdG9cbiAqIEBwYXJhbSBmaWVsZE5hbWUgLSBmaWVsZC5uYW1lXG4gKiBAcGFyYW0gZmlsdGVyRGF0YXNldEluZGV4IC0gZmllbGQubmFtZVxuICogQHBhcmFtIG9wdGlvblxuICogQHJldHVybiAtIHtmaWx0ZXIsIGRhdGFzZXRzfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlGaWx0ZXJGaWVsZE5hbWU8SyBleHRlbmRzIEtlcGxlclRhYmxlTW9kZWw8SywgTD4sIEw+KFxuICBmaWx0ZXI6IEZpbHRlcixcbiAgZGF0YXNldDogSyxcbiAgZmllbGROYW1lOiBzdHJpbmcsXG4gIGZpbHRlckRhdGFzZXRJbmRleCA9IDAsXG4gIG9wdGlvbj86IHttZXJnZURvbWFpbjogYm9vbGVhbn1cbik6IHtcbiAgZmlsdGVyOiBGaWx0ZXIgfCBudWxsO1xuICBkYXRhc2V0OiBLO1xufSB7XG4gIC8vIHVzaW5nIGZpbHRlckRhdGFzZXRJbmRleCB3ZSBjYW4gZmlsdGVyIG9ubHkgdGhlIHNwZWNpZmllZCBkYXRhc2V0XG4gIGNvbnN0IG1lcmdlRG9tYWluID0gb3B0aW9uICYmIG9wdGlvbi5oYXNPd25Qcm9wZXJ0eSgnbWVyZ2VEb21haW4nKSA/IG9wdGlvbi5tZXJnZURvbWFpbiA6IGZhbHNlO1xuXG4gIGNvbnN0IGZpZWxkSW5kZXggPSBkYXRhc2V0LmdldENvbHVtbkZpZWxkSWR4KGZpZWxkTmFtZSk7XG4gIC8vIGlmIG5vIGZpZWxkIHdpdGggc2FtZSBuYW1lIGlzIGZvdW5kLCBtb3ZlIHRvIHRoZSBuZXh0IGRhdGFzZXRzXG4gIGlmIChmaWVsZEluZGV4ID09PSAtMSkge1xuICAgIC8vIHRocm93IG5ldyBFcnJvcihgZmllbGRJbmRleCBub3QgZm91bmQuIERhdGFzZXQgbXVzdCBjb250YWluIGEgcHJvcGVydHkgd2l0aCBuYW1lOiAke2ZpZWxkTmFtZX1gKTtcbiAgICByZXR1cm4ge2ZpbHRlcjogbnVsbCwgZGF0YXNldH07XG4gIH1cblxuICAvLyBUT0RPOiB2YWxpZGF0ZSBmaWVsZCB0eXBlXG4gIGNvbnN0IGZpbHRlclByb3BzID0gZGF0YXNldC5nZXRDb2x1bW5GaWx0ZXJQcm9wcyhmaWVsZE5hbWUpO1xuXG4gIGNvbnN0IG5ld0ZpbHRlciA9IHtcbiAgICAuLi4obWVyZ2VEb21haW4gPyBtZXJnZUZpbHRlckRvbWFpblN0ZXAoZmlsdGVyLCBmaWx0ZXJQcm9wcykgOiB7Li4uZmlsdGVyLCAuLi5maWx0ZXJQcm9wc30pLFxuICAgIG5hbWU6IE9iamVjdC5hc3NpZ24oWy4uLnRvQXJyYXkoZmlsdGVyLm5hbWUpXSwge1tmaWx0ZXJEYXRhc2V0SW5kZXhdOiBmaWVsZE5hbWV9KSxcbiAgICBmaWVsZElkeDogT2JqZWN0LmFzc2lnbihbLi4udG9BcnJheShmaWx0ZXIuZmllbGRJZHgpXSwge1xuICAgICAgW2ZpbHRlckRhdGFzZXRJbmRleF06IGZpZWxkSW5kZXhcbiAgICB9KSxcbiAgICAvLyBUT0RPLCBzaW5jZSB3ZSBhbGxvdyB0byBhZGQgbXVsdGlwbGUgZmllbGRzIHRvIGEgZmlsdGVyIHdlIGNhbiBubyBsb25nZXIgZnJlZXplIHRoZSBmaWx0ZXJcbiAgICBmcmVlemU6IHRydWVcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGZpbHRlcjogbmV3RmlsdGVyLFxuICAgIGRhdGFzZXRcbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBvbmUgZmlsdGVyIHdpdGggb3RoZXIgZmlsdGVyIHByb3AgZG9tYWluXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUZpbHRlckRvbWFpblN0ZXAoXG4gIGZpbHRlcjogRmlsdGVyLFxuICBmaWx0ZXJQcm9wcz86IFBhcnRpYWw8RmlsdGVyPlxuKTogKEZpbHRlciAmIHtzdGVwPzogbnVtYmVyfSkgfCBudWxsIHtcbiAgaWYgKCFmaWx0ZXIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICghZmlsdGVyUHJvcHMpIHtcbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgaWYgKChmaWx0ZXIuZmllbGRUeXBlICYmIGZpbHRlci5maWVsZFR5cGUgIT09IGZpbHRlclByb3BzLmZpZWxkVHlwZSkgfHwgIWZpbHRlclByb3BzLmRvbWFpbikge1xuICAgIHJldHVybiBmaWx0ZXI7XG4gIH1cblxuICBjb25zdCBjb21iaW5lZERvbWFpbiA9ICFmaWx0ZXIuZG9tYWluXG4gICAgPyBmaWx0ZXJQcm9wcy5kb21haW5cbiAgICA6IFsuLi4oZmlsdGVyLmRvbWFpbiB8fCBbXSksIC4uLihmaWx0ZXJQcm9wcy5kb21haW4gfHwgW10pXS5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG5cbiAgY29uc3QgbmV3RmlsdGVyID0ge1xuICAgIC4uLmZpbHRlcixcbiAgICAuLi5maWx0ZXJQcm9wcyxcbiAgICBkb21haW46IFtjb21iaW5lZERvbWFpblswXSwgY29tYmluZWREb21haW5bY29tYmluZWREb21haW4ubGVuZ3RoIC0gMV1dXG4gIH07XG5cbiAgc3dpdGNoIChmaWx0ZXJQcm9wcy5maWVsZFR5cGUpIHtcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5zdHJpbmc6XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMuZGF0ZTpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm5ld0ZpbHRlcixcbiAgICAgICAgZG9tYWluOiB1bmlxdWUoY29tYmluZWREb21haW4pLnNvcnQoKVxuICAgICAgfTtcblxuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnRpbWVzdGFtcDpcbiAgICAgIGNvbnN0IHN0ZXAgPVxuICAgICAgICAoZmlsdGVyIGFzIFRpbWVSYW5nZUZpbHRlcikuc3RlcCA8IChmaWx0ZXJQcm9wcyBhcyBUaW1lUmFuZ2VGaWVsZERvbWFpbikuc3RlcFxuICAgICAgICAgID8gKGZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN0ZXBcbiAgICAgICAgICA6IChmaWx0ZXJQcm9wcyBhcyBUaW1lUmFuZ2VGaWVsZERvbWFpbikuc3RlcDtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubmV3RmlsdGVyLFxuICAgICAgICBzdGVwXG4gICAgICB9O1xuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnJlYWw6XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMuaW50ZWdlcjpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG5ld0ZpbHRlcjtcbiAgfVxufVxuLyogZXNsaW50LWVuYWJsZSBjb21wbGV4aXR5ICovXG5cbi8qKlxuICogR2VuZXJhdGVzIHBvbHlnb24gZmlsdGVyXG4gKi9cbmV4cG9ydCBjb25zdCBmZWF0dXJlVG9GaWx0ZXJWYWx1ZSA9IChcbiAgZmVhdHVyZTogRmVhdHVyZSxcbiAgZmlsdGVySWQ6IHN0cmluZyxcbiAgcHJvcGVydGllcz86IHt9XG4pOiBGZWF0dXJlVmFsdWUgPT4gKHtcbiAgLi4uZmVhdHVyZSxcbiAgaWQ6IGZlYXR1cmUuaWQsXG4gIHByb3BlcnRpZXM6IHtcbiAgICAuLi5mZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgLi4ucHJvcGVydGllcyxcbiAgICBmaWx0ZXJJZFxuICB9XG59KTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbHRlcklkSW5GZWF0dXJlID0gKGY6IEZlYXR1cmVWYWx1ZSk6IHN0cmluZyA9PiBnZXQoZiwgWydwcm9wZXJ0aWVzJywgJ2ZpbHRlcklkJ10pO1xuXG4vKipcbiAqIEdlbmVyYXRlcyBwb2x5Z29uIGZpbHRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVQb2x5Z29uRmlsdGVyPFxuICBMIGV4dGVuZHMge2NvbmZpZzoge2RhdGFJZDogc3RyaW5nIHwgbnVsbDsgbGFiZWw6IHN0cmluZ307IGlkOiBzdHJpbmd9XG4+KGxheWVyczogTFtdLCBmZWF0dXJlOiBGZWF0dXJlKTogUG9seWdvbkZpbHRlciB7XG4gIGNvbnN0IGRhdGFJZCA9IGxheWVycy5tYXAobCA9PiBsLmNvbmZpZy5kYXRhSWQpLmZpbHRlcihub3ROdWxsb3JVbmRlZmluZWQpO1xuICBjb25zdCBsYXllcklkID0gbGF5ZXJzLm1hcChsID0+IGwuaWQpO1xuICBjb25zdCBuYW1lID0gbGF5ZXJzLm1hcChsID0+IGwuY29uZmlnLmxhYmVsKTtcbiAgY29uc3QgZmlsdGVyID0gZ2V0RGVmYXVsdEZpbHRlcih7ZGF0YUlkfSk7XG4gIHJldHVybiB7XG4gICAgLi4uZmlsdGVyLFxuICAgIGZpeGVkRG9tYWluOiB0cnVlLFxuICAgIHR5cGU6IEZJTFRFUl9UWVBFUy5wb2x5Z29uLFxuICAgIG5hbWUsXG4gICAgbGF5ZXJJZCxcbiAgICB2YWx1ZTogZmVhdHVyZVRvRmlsdGVyVmFsdWUoZmVhdHVyZSwgZmlsdGVyLmlkLCB7aXNWaXNpYmxlOiB0cnVlfSlcbiAgfTtcbn1cblxuLyoqXG4gKiBSdW4gZmlsdGVyIGVudGlyZWx5IG9uIENQVVxuICovXG5pbnRlcmZhY2UgU3RhdGVUeXBlPEsgZXh0ZW5kcyBLZXBsZXJUYWJsZU1vZGVsPEssIEw+LCBMPiB7XG4gIGxheWVyczogTFtdO1xuICBmaWx0ZXJzOiBGaWx0ZXJbXTtcbiAgZGF0YXNldHM6IHtbaWQ6IHN0cmluZ106IEt9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyRGF0YXNldENQVTxUIGV4dGVuZHMgU3RhdGVUeXBlPEssIEw+LCBLIGV4dGVuZHMgS2VwbGVyVGFibGVNb2RlbDxLLCBMPiwgTD4oXG4gIHN0YXRlOiBULFxuICBkYXRhSWQ6IHN0cmluZ1xuKTogVCB7XG4gIGNvbnN0IGRhdGFzZXRGaWx0ZXJzID0gc3RhdGUuZmlsdGVycy5maWx0ZXIoZiA9PiBmLmRhdGFJZC5pbmNsdWRlcyhkYXRhSWQpKTtcbiAgY29uc3QgZGF0YXNldCA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF07XG5cbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3QgY3B1RmlsdGVyZWREYXRhc2V0ID0gZGF0YXNldC5maWx0ZXJUYWJsZUNQVShkYXRhc2V0RmlsdGVycywgc3RhdGUubGF5ZXJzKTtcblxuICByZXR1cm4gc2V0KFsnZGF0YXNldHMnLCBkYXRhSWRdLCBjcHVGaWx0ZXJlZERhdGFzZXQsIHN0YXRlKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBwYXJzZWQgZmlsdGVycyB3aXRoIGRhdGFzZXRzIGFuZCBhZGQgZmlsdGVyUHJvcHMgdG8gZmllbGRcbiAqL1xudHlwZSBNaW5WaXNTdGF0ZUZvckZpbHRlciA9IFBpY2s8VmlzU3RhdGUsICdsYXllcnMnIHwgJ2RhdGFzZXRzJyB8ICdpc01lcmdpbmdEYXRhc2V0cyc+O1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzPFxuICBTIGV4dGVuZHMgTWluVmlzU3RhdGVGb3JGaWx0ZXIsXG4gIEsgZXh0ZW5kcyBLZXBsZXJUYWJsZU1vZGVsPEssIEw+LFxuICBMIGV4dGVuZHMge2NvbmZpZzoge2RhdGFJZDogc3RyaW5nIHwgbnVsbDsgbGFiZWw6IHN0cmluZ307IGlkOiBzdHJpbmd9XG4+KFxuICBzdGF0ZTogUyxcbiAgZmlsdGVyc1RvVmFsaWRhdGU6IFBhcnNlZEZpbHRlcltdID0gW11cbik6IHtcbiAgdmFsaWRhdGVkOiBGaWx0ZXJbXTtcbiAgZmFpbGVkOiBGaWx0ZXJbXTtcbiAgdXBkYXRlZERhdGFzZXRzOiBTWydkYXRhc2V0cyddO1xufSB7XG4gIC8vIFRPRE8gQmV0dGVyIFR5cGluZ3MgaGVyZVxuICBjb25zdCB2YWxpZGF0ZWQ6IGFueVtdID0gW107XG4gIGNvbnN0IGZhaWxlZDogYW55W10gPSBbXTtcbiAgY29uc3Qge2RhdGFzZXRzfSA9IHN0YXRlO1xuICBsZXQgdXBkYXRlZERhdGFzZXRzID0gZGF0YXNldHM7XG5cbiAgLy8gbWVyZ2UgZmlsdGVyc1xuICBmaWx0ZXJzVG9WYWxpZGF0ZS5mb3JFYWNoKGZpbHRlciA9PiB7XG4gICAgLy8gd2UgY2FuIG9ubHkgbG9vayBmb3IgZGF0YXNldHMgZGVmaW5lIGluIHRoZSBmaWx0ZXIgZGF0YUlkXG4gICAgY29uc3QgZGF0YXNldElkcyA9IHRvQXJyYXkoZmlsdGVyLmRhdGFJZCk7XG5cbiAgICAvLyB3ZSBjYW4gbWVyZ2UgYSBmaWx0ZXIgb25seSBpZiBhbGwgZGF0YXNldHMgaW4gZmlsdGVyLmRhdGFJZCBhcmUgbG9hZGVkXG4gICAgaWYgKGRhdGFzZXRJZHMuZXZlcnkoZCA9PiBkYXRhc2V0c1tkXSAmJiAhc3RhdGUuaXNNZXJnaW5nRGF0YXNldHNbZF0pKSB7XG4gICAgICAvLyBhbGwgZGF0YXNldElkcyBpbiBmaWx0ZXIgbXVzdCBiZSBwcmVzZW50IHRoZSBzdGF0ZSBkYXRhc2V0c1xuICAgICAgY29uc3Qge2ZpbHRlcjogdmFsaWRhdGVkRmlsdGVyLCBhcHBseVRvRGF0YXNldHMsIGF1Z21lbnRlZERhdGFzZXRzfSA9IGRhdGFzZXRJZHMucmVkdWNlPHtcbiAgICAgICAgZmlsdGVyOiBGaWx0ZXIgfCBudWxsO1xuICAgICAgICBhcHBseVRvRGF0YXNldHM6IHN0cmluZ1tdO1xuICAgICAgICBhdWdtZW50ZWREYXRhc2V0czoge1tkYXRhc2V0SWQ6IHN0cmluZ106IGFueX07XG4gICAgICB9PihcbiAgICAgICAgKGFjYywgZGF0YXNldElkKSA9PiB7XG4gICAgICAgICAgY29uc3QgZGF0YXNldCA9IHVwZGF0ZWREYXRhc2V0c1tkYXRhc2V0SWRdO1xuICAgICAgICAgIGNvbnN0IGxheWVycyA9IHN0YXRlLmxheWVycy5maWx0ZXIobCA9PiBsLmNvbmZpZy5kYXRhSWQgPT09IGRhdGFzZXQuaWQpO1xuICAgICAgICAgIGNvbnN0IHtmaWx0ZXI6IHVwZGF0ZWRGaWx0ZXIsIGRhdGFzZXQ6IHVwZGF0ZWREYXRhc2V0fSA9IHZhbGlkYXRlRmlsdGVyV2l0aERhdGEoXG4gICAgICAgICAgICBhY2MuYXVnbWVudGVkRGF0YXNldHNbZGF0YXNldElkXSB8fCBkYXRhc2V0LFxuICAgICAgICAgICAgZmlsdGVyLFxuICAgICAgICAgICAgbGF5ZXJzXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmICh1cGRhdGVkRmlsdGVyKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgICAgIC8vIG1lcmdlIGZpbHRlciBwcm9wc1xuICAgICAgICAgICAgICBmaWx0ZXI6IGFjYy5maWx0ZXJcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uYWNjLmZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyBjaGVjazogY2hhbmdlZCBmcm9tIGFjYyB0byBhY2MuZmlsdGVyIHRvIGZpeCB0eXBlc1xuICAgICAgICAgICAgICAgICAgICAuLi5tZXJnZUZpbHRlckRvbWFpblN0ZXAoYWNjLmZpbHRlciwgdXBkYXRlZEZpbHRlcilcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IHVwZGF0ZWRGaWx0ZXIsXG5cbiAgICAgICAgICAgICAgYXBwbHlUb0RhdGFzZXRzOiBbLi4uYWNjLmFwcGx5VG9EYXRhc2V0cywgZGF0YXNldElkXSxcblxuICAgICAgICAgICAgICBhdWdtZW50ZWREYXRhc2V0czoge1xuICAgICAgICAgICAgICAgIC4uLmFjYy5hdWdtZW50ZWREYXRhc2V0cyxcbiAgICAgICAgICAgICAgICBbZGF0YXNldElkXTogdXBkYXRlZERhdGFzZXRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZmlsdGVyOiBudWxsLFxuICAgICAgICAgIGFwcGx5VG9EYXRhc2V0czogW10sXG4gICAgICAgICAgYXVnbWVudGVkRGF0YXNldHM6IHt9XG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICAgIGlmICh2YWxpZGF0ZWRGaWx0ZXIgJiYgaXNFcXVhbChkYXRhc2V0SWRzLCBhcHBseVRvRGF0YXNldHMpKSB7XG4gICAgICAgIHZhbGlkYXRlZC5wdXNoKHZhbGlkYXRlZEZpbHRlcik7XG4gICAgICAgIHVwZGF0ZWREYXRhc2V0cyA9IHtcbiAgICAgICAgICAuLi51cGRhdGVkRGF0YXNldHMsXG4gICAgICAgICAgLi4uYXVnbWVudGVkRGF0YXNldHNcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZhaWxlZC5wdXNoKGZpbHRlcik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZhaWxlZC5wdXNoKGZpbHRlcik7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4ge3ZhbGlkYXRlZCwgZmFpbGVkLCB1cGRhdGVkRGF0YXNldHN9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsdGVyUGxvdDxLIGV4dGVuZHMgS2VwbGVyVGFibGVNb2RlbDxLLCBMPiwgTD4oXG4gIGZpbHRlcjogRmlsdGVyLFxuICBkYXRhc2V0OiBLXG4pOiB7bGluZUNoYXJ0OiBMaW5lQ2hhcnQ7IHlBeHM6IEZpZWxkfSB8IHt9IHtcbiAgaWYgKGZpbHRlci5wbG90VHlwZSA9PT0gUExPVF9UWVBFUy5oaXN0b2dyYW0gfHwgIWZpbHRlci55QXhpcykge1xuICAgIC8vIGhpc3RvZ3JhbSBzaG91bGQgYmUgY2FsY3VsYXRlZCB3aGVuIGNyZWF0ZSBmaWx0ZXJcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCB7bWFwcGVkVmFsdWUgPSBbXX0gPSBmaWx0ZXI7XG4gIGNvbnN0IHt5QXhpc30gPSBmaWx0ZXI7XG4gIGNvbnN0IGZpZWxkSWR4ID0gZGF0YXNldC5nZXRDb2x1bW5GaWVsZElkeCh5QXhpcy5uYW1lKTtcbiAgaWYgKGZpZWxkSWR4IDwgMCkge1xuICAgIENvbnNvbGUud2FybihgeUF4aXMgJHt5QXhpcy5uYW1lfSBkb2VzIG5vdCBleGlzdCBpbiBkYXRhc2V0YCk7XG4gICAgcmV0dXJuIHtsaW5lQ2hhcnQ6IHt9LCB5QXhpc307XG4gIH1cblxuICAvLyByZXR1cm4gbGluZUNoYXJ0XG4gIGNvbnN0IHNlcmllcyA9IGRhdGFzZXQuZGF0YUNvbnRhaW5lclxuICAgIC5tYXAoXG4gICAgICAocm93LCByb3dJbmRleCkgPT4gKHtcbiAgICAgICAgeDogbWFwcGVkVmFsdWVbcm93SW5kZXhdLFxuICAgICAgICB5OiByb3cudmFsdWVBdChmaWVsZElkeClcbiAgICAgIH0pLFxuICAgICAgdHJ1ZVxuICAgIClcbiAgICAuZmlsdGVyKCh7eCwgeX0pID0+IE51bWJlci5pc0Zpbml0ZSh4KSAmJiBOdW1iZXIuaXNGaW5pdGUoeSkpXG4gICAgLnNvcnQoKGEsIGIpID0+IGFzY2VuZGluZyhhLngsIGIueCkpO1xuXG4gIGNvbnN0IHlEb21haW4gPSBleHRlbnQoc2VyaWVzLCBkID0+IGQueSk7XG4gIGNvbnN0IHhEb21haW4gPSBbc2VyaWVzWzBdLngsIHNlcmllc1tzZXJpZXMubGVuZ3RoIC0gMV0ueF07XG5cbiAgcmV0dXJuIHtsaW5lQ2hhcnQ6IHtzZXJpZXMsIHlEb21haW4sIHhEb21haW59LCB5QXhpc307XG59XG5cbi8qKlxuICogUmV0cmlldmUgaW50ZXJ2YWwgYmlucyBmb3IgdGltZSBmaWx0ZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEludGVydmFsQmlucyhmaWx0ZXI6IFRpbWVSYW5nZUZpbHRlcikge1xuICBjb25zdCB7Ymluc30gPSBmaWx0ZXI7XG4gIGNvbnN0IGludGVydmFsID0gZmlsdGVyLnBsb3RUeXBlPy5pbnRlcnZhbDtcbiAgaWYgKCFpbnRlcnZhbCB8fCAhYmlucyB8fCBPYmplY3Qua2V5cyhiaW5zKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCB2YWx1ZXMgPSBPYmplY3QudmFsdWVzKGJpbnMpO1xuICByZXR1cm4gdmFsdWVzWzBdID8gdmFsdWVzWzBdW2ludGVydmFsXSA6IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkVGltZURvbWFpbihkb21haW4pIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZG9tYWluKSAmJiBkb21haW4uZXZlcnkoTnVtYmVyLmlzRmluaXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRpbWVXaWRnZXRIaW50Rm9ybWF0dGVyKGRvbWFpbjogW251bWJlciwgbnVtYmVyXSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghaXNWYWxpZFRpbWVEb21haW4oZG9tYWluKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBkaWZmID0gZG9tYWluWzFdIC0gZG9tYWluWzBdO1xuICByZXR1cm4gZGlmZiA+IGR1cmF0aW9uV2Vla1xuICAgID8gJ0wnXG4gICAgOiBkaWZmID4gZHVyYXRpb25EYXlcbiAgICA/ICdMIExUJ1xuICAgIDogZGlmZiA+IGR1cmF0aW9uSG91clxuICAgID8gJ0xUJ1xuICAgIDogJ0xUUyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NpZGVGaWx0ZXIoZmlsdGVyOiBGaWx0ZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIGZpbHRlci52aWV3ID09PSBGSUxURVJfVklFV19UWVBFUy5zaWRlO1xufVxuIl19
|