@kepler.gl/utils 3.0.0-alpha.0 → 3.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/aggregate-utils.js +2 -2
  2. package/dist/color-utils.d.ts +4 -0
  3. package/dist/color-utils.js +28 -3
  4. package/dist/data-container-interface.js +1 -1
  5. package/dist/data-container-utils.js +2 -2
  6. package/dist/data-row.js +2 -2
  7. package/dist/data-scale-utils.js +4 -4
  8. package/dist/data-utils.d.ts +10 -12
  9. package/dist/data-utils.js +120 -44
  10. package/dist/dataset-utils.d.ts +12 -1
  11. package/dist/dataset-utils.js +74 -9
  12. package/dist/dom-to-image.d.ts +14 -14
  13. package/dist/dom-to-image.js +23 -69
  14. package/dist/dom-utils.d.ts +3 -0
  15. package/dist/dom-utils.js +29 -3
  16. package/dist/effect-utils.d.ts +13 -0
  17. package/dist/effect-utils.js +129 -0
  18. package/dist/export-map-html.js +2 -2
  19. package/dist/export-utils.js +13 -4
  20. package/dist/filter-utils.d.ts +11 -9
  21. package/dist/filter-utils.js +66 -36
  22. package/dist/format.d.ts +1 -0
  23. package/dist/format.js +33 -0
  24. package/dist/gl-utils.js +2 -2
  25. package/dist/h3-utils.d.ts +2 -1
  26. package/dist/h3-utils.js +5 -4
  27. package/dist/index.d.ts +14 -9
  28. package/dist/index.js +230 -555
  29. package/dist/indexed-data-container.js +2 -2
  30. package/dist/locale-utils.js +2 -2
  31. package/dist/map-info-utils.js +2 -2
  32. package/dist/map-style-utils/mapbox-gl-style-editor.d.ts +2 -1
  33. package/dist/map-style-utils/mapbox-gl-style-editor.js +9 -3
  34. package/dist/map-style-utils/mapbox-utils.js +2 -2
  35. package/dist/map-utils.d.ts +8 -2
  36. package/dist/map-utils.js +24 -7
  37. package/dist/mapbox-utils.js +2 -2
  38. package/dist/noop.d.ts +1 -0
  39. package/dist/noop.js +29 -0
  40. package/dist/notifications-utils.d.ts +14 -26
  41. package/dist/notifications-utils.js +9 -11
  42. package/dist/observe-dimensions.js +10 -6
  43. package/dist/plot.d.ts +6 -0
  44. package/dist/plot.js +46 -0
  45. package/dist/projection-utils.d.ts +9 -0
  46. package/dist/projection-utils.js +36 -2
  47. package/dist/row-data-container.js +2 -2
  48. package/dist/searcher-utils.js +2 -2
  49. package/dist/split-map-utils.d.ts +4 -1
  50. package/dist/split-map-utils.js +10 -4
  51. package/dist/time.d.ts +16 -0
  52. package/dist/time.js +105 -0
  53. package/dist/utils.d.ts +36 -10
  54. package/dist/utils.js +38 -6
  55. package/package.json +11 -11
@@ -1,4 +1,4 @@
1
- // Copyright (c) 2022 Uber Technologies, Inc.
1
+ // Copyright (c) 2023 Uber Technologies, Inc.
2
2
  //
3
3
  // Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  // of this software and associated documentation files (the "Software"), to deal
@@ -62,6 +62,7 @@ exports.getFilterPlot = getFilterPlot;
62
62
  exports.getIntervalBins = getIntervalBins;
63
63
  exports.isValidTimeDomain = isValidTimeDomain;
64
64
  exports.getTimeWidgetHintFormatter = getTimeWidgetHintFormatter;
65
+ exports.isSideFilter = isSideFilter;
65
66
  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
67
 
67
68
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
@@ -167,9 +168,10 @@ var DEFAULT_FILTER_STRUCTURE = {
167
168
  // [string]
168
169
  freeze: false,
169
170
  id: null,
171
+ enabled: true,
170
172
  // time range filter specific
171
173
  fixedDomain: false,
172
- enlarged: false,
174
+ view: _constants.FILTER_VIEW_TYPES.side,
173
175
  isAnimating: false,
174
176
  animationWindow: _constants.ANIMATION_WINDOW.free,
175
177
  speed: 1,
@@ -198,11 +200,15 @@ var LAYER_FILTERS = [_constants.FILTER_TYPES.polygon];
198
200
 
199
201
  exports.LAYER_FILTERS = LAYER_FILTERS;
200
202
 
201
- function getDefaultFilter(dataId) {
203
+ function getDefaultFilter() {
204
+ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
205
+ dataId = _ref.dataId,
206
+ id = _ref.id;
207
+
202
208
  return _objectSpread(_objectSpread({}, DEFAULT_FILTER_STRUCTURE), {}, {
203
209
  // 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)
210
+ dataId: dataId ? (0, _utils.toArray)(dataId) : [],
211
+ id: id || (0, _utils.generateHashId)(FILTER_ID_LENGTH)
206
212
  });
207
213
  }
208
214
  /**
@@ -275,6 +281,8 @@ var filterValidators = (0, _defineProperty2["default"])({}, _constants.FILTER_TY
275
281
  */
276
282
 
277
283
  function validateFilter(dataset, filter) {
284
+ var _filter$view;
285
+
278
286
  // match filter.dataId
279
287
  var failed = {
280
288
  dataset: dataset,
@@ -288,7 +296,9 @@ function validateFilter(dataset, filter) {
288
296
  return failed;
289
297
  }
290
298
 
291
- var initializeFilter = _objectSpread(_objectSpread(_objectSpread({}, getDefaultFilter(filter.dataId)), filter), {}, {
299
+ var initializeFilter = _objectSpread(_objectSpread(_objectSpread({}, getDefaultFilter({
300
+ dataId: filter.dataId
301
+ })), filter), {}, {
292
302
  dataId: filterDataId,
293
303
  name: (0, _utils.toArray)(filter.name)
294
304
  });
@@ -306,7 +316,7 @@ function validateFilter(dataset, filter) {
306
316
  }
307
317
 
308
318
  updatedFilter.value = adjustValueToFilterDomain(filter.value, updatedFilter);
309
- updatedFilter.enlarged = typeof filter.enlarged === 'boolean' ? filter.enlarged : updatedFilter.enlarged;
319
+ updatedFilter.view = (_filter$view = filter.view) !== null && _filter$view !== void 0 ? _filter$view : updatedFilter.view;
310
320
 
311
321
  if (updatedFilter.value === null) {
312
322
  // cannot adjust saved value to filter
@@ -347,9 +357,9 @@ function validateFilterYAxis(filter, dataset) {
347
357
  yAxis = _filter.yAxis; // TODO: validate yAxis against other datasets
348
358
 
349
359
  if (yAxis) {
350
- var matchedAxis = fields.find(function (_ref) {
351
- var name = _ref.name,
352
- type = _ref.type;
360
+ var matchedAxis = fields.find(function (_ref2) {
361
+ var name = _ref2.name,
362
+ type = _ref2.type;
353
363
  return name === yAxis.name && type === yAxis.type;
354
364
  });
355
365
  filter = matchedAxis ? _objectSpread(_objectSpread({}, filter), {}, {
@@ -372,7 +382,8 @@ function validateFilterYAxis(filter, dataset) {
372
382
 
373
383
  function getFilterProps(field, fieldDomain) {
374
384
  var filterProps = _objectSpread(_objectSpread({}, fieldDomain), {}, {
375
- fieldType: field.type
385
+ fieldType: field.type,
386
+ view: _constants.FILTER_VIEW_TYPES.side
376
387
  });
377
388
 
378
389
  switch (field.type) {
@@ -407,7 +418,7 @@ function getFilterProps(field, fieldDomain) {
407
418
  // @ts-expect-error
408
419
  return _objectSpread(_objectSpread({}, filterProps), {}, {
409
420
  type: _constants.FILTER_TYPES.timeRange,
410
- enlarged: true,
421
+ view: _constants.FILTER_VIEW_TYPES.enlarged,
411
422
  fixedDomain: true,
412
423
  value: filterProps.domain,
413
424
  gpu: true
@@ -496,6 +507,10 @@ function getFilterFunction(field, dataId, filter, layers, dataContainer) {
496
507
  return true;
497
508
  };
498
509
 
510
+ if (filter.enabled === false) {
511
+ return defaultFunc;
512
+ }
513
+
499
514
  switch (filter.type) {
500
515
  case _constants.FILTER_TYPES.range:
501
516
  return function (data) {
@@ -553,13 +568,15 @@ function getFilterFunction(field, dataId, filter, layers, dataContainer) {
553
568
  }
554
569
 
555
570
  function updateFilterDataId(dataId) {
556
- return getDefaultFilter(dataId);
571
+ return getDefaultFilter({
572
+ dataId: dataId
573
+ });
557
574
  }
558
575
 
559
- function filterDataByFilterTypes(_ref2, dataContainer) {
560
- var dynamicDomainFilters = _ref2.dynamicDomainFilters,
561
- cpuFilters = _ref2.cpuFilters,
562
- filterFuncs = _ref2.filterFuncs;
576
+ function filterDataByFilterTypes(_ref3, dataContainer) {
577
+ var dynamicDomainFilters = _ref3.dynamicDomainFilters,
578
+ cpuFilters = _ref3.cpuFilters,
579
+ filterFuncs = _ref3.filterFuncs;
563
580
  var filteredIndexForDomain = [];
564
581
  var filteredIndex = [];
565
582
  var filterContext = {
@@ -623,10 +640,10 @@ function getFilterRecord(dataId, filters) {
623
640
  function diffFilters(filterRecord) {
624
641
  var oldFilterRecord = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
625
642
  var filterChanged = {};
626
- Object.entries(filterRecord).forEach(function (_ref3) {
627
- var _ref4 = (0, _slicedToArray2["default"])(_ref3, 2),
628
- record = _ref4[0],
629
- items = _ref4[1];
643
+ Object.entries(filterRecord).forEach(function (_ref4) {
644
+ var _ref5 = (0, _slicedToArray2["default"])(_ref4, 2),
645
+ record = _ref5[0],
646
+ items = _ref5[1];
630
647
 
631
648
  items.forEach(function (filter) {
632
649
  var oldFilter = (oldFilterRecord[record] || []).find(function (f) {
@@ -671,9 +688,9 @@ function diffFilters(filterRecord) {
671
688
  // eslint-disable-next-line complexity
672
689
 
673
690
 
674
- function adjustValueToFilterDomain(value, _ref5) {
675
- var domain = _ref5.domain,
676
- type = _ref5.type;
691
+ function adjustValueToFilterDomain(value, _ref6) {
692
+ var domain = _ref6.domain,
693
+ type = _ref6.type;
677
694
 
678
695
  if (!type) {
679
696
  return false;
@@ -795,7 +812,12 @@ function getTimestampFieldDomain(dataContainer, valueAccessor) {
795
812
  var domain = ScaleUtils.getLinearDomain(mappedValue);
796
813
  var defaultTimeFormat = getTimeWidgetTitleFormatter(domain);
797
814
  var step = 0.01;
798
- var diff = domain[1] - domain[0];
815
+ var diff = domain[1] - domain[0]; // in case equal timestamp add 1 second padding to prevent break
816
+
817
+ if (!diff) {
818
+ domain[1] = domain[0] + 1000;
819
+ }
820
+
799
821
  var entry = TimestampStepMap.find(function (f) {
800
822
  return f.max >= diff;
801
823
  });
@@ -896,7 +918,7 @@ function getTimeWidgetTitleFormatter(domain) {
896
918
 
897
919
 
898
920
  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)) && isValidFilterValue(filter === null || filter === void 0 ? void 0 : filter.type, filter === null || filter === void 0 ? void 0 : filter.value);
921
+ 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
922
  }
901
923
  /**
902
924
  * Sanity check on filters to prepare for save
@@ -962,9 +984,9 @@ function getColumnFilterProps(filter, dataset) {
962
984
  x: mappedValue[rowIndex],
963
985
  y: row.valueAt(fieldIdx)
964
986
  };
965
- }, true).filter(function (_ref6) {
966
- var x = _ref6.x,
967
- y = _ref6.y;
987
+ }, true).filter(function (_ref7) {
988
+ var x = _ref7.x,
989
+ y = _ref7.y;
968
990
  return Number.isFinite(x) && Number.isFinite(y);
969
991
  }).sort(function (a, b) {
970
992
  return (0, _d3Array.ascending)(a.x, b.x);
@@ -1144,7 +1166,9 @@ function generatePolygonFilter(layers, feature) {
1144
1166
  var name = layers.map(function (l) {
1145
1167
  return l.config.label;
1146
1168
  });
1147
- var filter = getDefaultFilter(dataId);
1169
+ var filter = getDefaultFilter({
1170
+ dataId: dataId
1171
+ });
1148
1172
  return _objectSpread(_objectSpread({}, filter), {}, {
1149
1173
  fixedDomain: true,
1150
1174
  type: _constants.FILTER_TYPES.polygon,
@@ -1191,7 +1215,7 @@ function validateFiltersUpdateDatasets(state) {
1191
1215
  var datasetIds = (0, _utils.toArray)(filter.dataId); // we can merge a filter only if all datasets in filter.dataId are loaded
1192
1216
 
1193
1217
  if (datasetIds.every(function (d) {
1194
- return datasets[d];
1218
+ return datasets[d] && !state.isMergingDatasets[d];
1195
1219
  })) {
1196
1220
  // all datasetIds in filter must be present the state datasets
1197
1221
  var _datasetIds$reduce = datasetIds.reduce(function (acc, datasetId) {
@@ -1207,7 +1231,7 @@ function validateFiltersUpdateDatasets(state) {
1207
1231
  if (updatedFilter) {
1208
1232
  return _objectSpread(_objectSpread({}, acc), {}, {
1209
1233
  // merge filter props
1210
- filter: acc.filter ? _objectSpread(_objectSpread({}, acc.filter), mergeFilterDomainStep(acc, updatedFilter)) : updatedFilter,
1234
+ filter: acc.filter ? _objectSpread(_objectSpread({}, acc.filter), mergeFilterDomainStep(acc.filter, updatedFilter)) : updatedFilter,
1211
1235
  applyToDatasets: [].concat((0, _toConsumableArray2["default"])(acc.applyToDatasets), [datasetId]),
1212
1236
  augmentedDatasets: _objectSpread(_objectSpread({}, acc.augmentedDatasets), {}, (0, _defineProperty2["default"])({}, datasetId, updatedDataset))
1213
1237
  });
@@ -1226,6 +1250,8 @@ function validateFiltersUpdateDatasets(state) {
1226
1250
  if (validatedFilter && (0, _lodash2["default"])(datasetIds, applyToDatasets)) {
1227
1251
  validated.push(validatedFilter);
1228
1252
  updatedDatasets = _objectSpread(_objectSpread({}, updatedDatasets), augmentedDatasets);
1253
+ } else {
1254
+ failed.push(filter);
1229
1255
  }
1230
1256
  } else {
1231
1257
  failed.push(filter);
@@ -1264,9 +1290,9 @@ function getFilterPlot(filter, dataset) {
1264
1290
  x: mappedValue[rowIndex],
1265
1291
  y: row.valueAt(fieldIdx)
1266
1292
  };
1267
- }, true).filter(function (_ref7) {
1268
- var x = _ref7.x,
1269
- y = _ref7.y;
1293
+ }, true).filter(function (_ref8) {
1294
+ var x = _ref8.x,
1295
+ y = _ref8.y;
1270
1296
  return Number.isFinite(x) && Number.isFinite(y);
1271
1297
  }).sort(function (a, b) {
1272
1298
  return (0, _d3Array.ascending)(a.x, b.x);
@@ -1315,4 +1341,8 @@ function getTimeWidgetHintFormatter(domain) {
1315
1341
  var diff = domain[1] - domain[0];
1316
1342
  return diff > durationWeek ? 'L' : diff > durationDay ? 'L LT' : diff > durationHour ? 'LT' : 'LTS';
1317
1343
  }
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
1344
+
1345
+ function isSideFilter(filter) {
1346
+ return filter.view === _constants.FILTER_VIEW_TYPES.side;
1347
+ }
1348
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9maWx0ZXItdXRpbHMudHMiXSwibmFtZXMiOlsiZHVyYXRpb25TZWNvbmQiLCJkdXJhdGlvbk1pbnV0ZSIsImR1cmF0aW9uSG91ciIsImR1cmF0aW9uRGF5IiwiZHVyYXRpb25XZWVrIiwiZHVyYXRpb25ZZWFyIiwiVGltZXN0YW1wU3RlcE1hcCIsIm1heCIsInN0ZXAiLCJOdW1iZXIiLCJQT1NJVElWRV9JTkZJTklUWSIsImhpc3RvZ3JhbUJpbnMiLCJlbmxhcmdlZEhpc3RvZ3JhbUJpbnMiLCJGSUxURVJfVVBEQVRFUl9QUk9QUyIsImRhdGFJZCIsIm5hbWUiLCJsYXllcklkIiwiTElNSVRFRF9GSUxURVJfRUZGRUNUX1BST1BTIiwiU3VwcG9ydGVkUGxvdFR5cGUiLCJGSUxURVJfVFlQRVMiLCJ0aW1lUmFuZ2UiLCJBTExfRklFTERfVFlQRVMiLCJpbnRlZ2VyIiwicmVhbCIsInJhbmdlIiwiRklMVEVSX0NPTVBPTkVOVFMiLCJzZWxlY3QiLCJtdWx0aVNlbGVjdCIsInBvbHlnb24iLCJERUZBVUxUX0ZJTFRFUl9TVFJVQ1RVUkUiLCJmcmVlemUiLCJpZCIsImVuYWJsZWQiLCJmaXhlZERvbWFpbiIsInZpZXciLCJGSUxURVJfVklFV19UWVBFUyIsInNpZGUiLCJpc0FuaW1hdGluZyIsImFuaW1hdGlvbldpbmRvdyIsIkFOSU1BVElPTl9XSU5ET1ciLCJmcmVlIiwic3BlZWQiLCJ0eXBlIiwiZmllbGRJZHgiLCJkb21haW4iLCJ2YWx1ZSIsInBsb3RUeXBlIiwiUExPVF9UWVBFUyIsImhpc3RvZ3JhbSIsInlBeGlzIiwiaW50ZXJ2YWwiLCJncHUiLCJGSUxURVJfSURfTEVOR1RIIiwiTEFZRVJfRklMVEVSUyIsImdldERlZmF1bHRGaWx0ZXIiLCJzaG91bGRBcHBseUZpbHRlciIsImZpbHRlciIsImRhdGFzZXRJZCIsImRhdGFJZHMiLCJpbmNsdWRlcyIsInZhbGlkYXRlUG9seWdvbkZpbHRlciIsImRhdGFzZXQiLCJsYXllcnMiLCJmYWlsZWQiLCJpc1ZhbGlkRmlsdGVyVmFsdWUiLCJpc1ZhbGlkRGF0YXNldCIsImxheWVyIiwiZmluZCIsImwiLCJmaWx0ZXJWYWxpZGF0b3JzIiwidmFsaWRhdGVGaWx0ZXIiLCJmaWx0ZXJEYXRhSWQiLCJmaWx0ZXJEYXRhc2V0SW5kZXgiLCJpbmRleE9mIiwiaW5pdGlhbGl6ZUZpbHRlciIsImZpZWxkTmFtZSIsImFwcGx5RmlsdGVyRmllbGROYW1lIiwibWVyZ2VEb21haW4iLCJ1cGRhdGVkRmlsdGVyIiwidXBkYXRlZERhdGFzZXQiLCJhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluIiwidmFsaWRhdGVGaWx0ZXJZQXhpcyIsInZhbGlkYXRlRmlsdGVyV2l0aERhdGEiLCJoYXNPd25Qcm9wZXJ0eSIsImZpZWxkcyIsIm1hdGNoZWRBeGlzIiwiZ2V0RmlsdGVyUGxvdCIsImdldEZpbHRlclByb3BzIiwiZmllbGQiLCJmaWVsZERvbWFpbiIsImZpbHRlclByb3BzIiwiZmllbGRUeXBlIiwidHlwZU9wdGlvbnMiLCJzdHJpbmciLCJkYXRlIiwidGltZXN0YW1wIiwiZW5sYXJnZWQiLCJnZXRQb2x5Z29uRmlsdGVyRnVuY3RvciIsImRhdGFDb250YWluZXIiLCJnZXRQb3NpdGlvbiIsImdldFBvc2l0aW9uQWNjZXNzb3IiLCJMQVlFUl9UWVBFUyIsInBvaW50IiwiaWNvbiIsImRhdGEiLCJwb3MiLCJldmVyeSIsImlzRmluaXRlIiwiaXNJblBvbHlnb24iLCJhcmMiLCJsaW5lIiwiaGV4YWdvbklkIiwiZGF0YVRvRmVhdHVyZSIsImNlbnRyb2lkcyIsImNlbnRyb2lkIiwiaW5kZXgiLCJnZXRGaWx0ZXJGdW5jdGlvbiIsInZhbHVlQWNjZXNzb3IiLCJkZWZhdWx0RnVuYyIsImQiLCJpc0luUmFuZ2UiLCJtYXBwZWRWYWx1ZSIsImFjY2Vzc29yIiwiQXJyYXkiLCJpc0FycmF5IiwiZm9ybWF0IiwibGVuZ3RoIiwibGF5ZXJGaWx0ZXJGdW5jdGlvbnMiLCJtYXAiLCJjb25maWciLCJmaWx0ZXJGdW5jIiwidXBkYXRlRmlsdGVyRGF0YUlkIiwiZmlsdGVyRGF0YUJ5RmlsdGVyVHlwZXMiLCJkeW5hbWljRG9tYWluRmlsdGVycyIsImNwdUZpbHRlcnMiLCJmaWx0ZXJGdW5jcyIsImZpbHRlcmVkSW5kZXhGb3JEb21haW4iLCJmaWx0ZXJlZEluZGV4IiwiZmlsdGVyQ29udGV4dCIsImZpbHRlckZ1bmNDYWxsZXIiLCJudW1Sb3dzIiwiaSIsIm1hdGNoRm9yRG9tYWluIiwicHVzaCIsIm1hdGNoRm9yUmVuZGVyIiwiZ2V0RmlsdGVyUmVjb3JkIiwiZmlsdGVycyIsIm9wdCIsImZpbHRlclJlY29yZCIsImR5bmFtaWNEb21haW4iLCJjcHUiLCJmb3JFYWNoIiwiZiIsImlnbm9yZURvbWFpbiIsImNwdU9ubHkiLCJkaWZmRmlsdGVycyIsIm9sZEZpbHRlclJlY29yZCIsImZpbHRlckNoYW5nZWQiLCJPYmplY3QiLCJlbnRyaWVzIiwicmVjb3JkIiwiaXRlbXMiLCJvbGRGaWx0ZXIiLCJwcm9wIiwiZmlsdGVyZWRWYWx1ZSIsImdldE51bWVyaWNGaWVsZERvbWFpbiIsIm1hcEluZGV4IiwiU2NhbGVVdGlscyIsImdldExpbmVhckRvbWFpbiIsImRpZmYiLCJnZXROdW1lcmljU3RlcFNpemUiLCJmb3JtYXROdW1iZXJCeVN0ZXAiLCJnZXRIaXN0b2dyYW0iLCJlbmxhcmdlZEhpc3RvZ3JhbSIsIk1hdGgiLCJhYnMiLCJ4IiwiZXhwb25lbnRpYWxGb3JtIiwidG9FeHBvbmVudGlhbCIsImV4cG9uZW50IiwicGFyc2VGbG9hdCIsInNwbGl0IiwiRGVjaW1hbCIsInBvdyIsInRvTnVtYmVyIiwiZ2V0VGltZXN0YW1wRmllbGREb21haW4iLCJkZWZhdWx0VGltZUZvcm1hdCIsImdldFRpbWVXaWRnZXRUaXRsZUZvcm1hdHRlciIsImVudHJ5IiwiaGlzdG9ncmFtQ29uc3RydWN0IiwiYmlucyIsInRocmVzaG9sZHMiLCJiaW4iLCJjb3VudCIsIngwIiwieDEiLCJ2YWwiLCJib3VuZCIsImZsb29yIiwiY2VpbCIsImlzVmFsaWRUaW1lRG9tYWluIiwiaXNGaWx0ZXJWYWxpZFRvU2F2ZSIsInYiLCJpc05hTiIsIkJvb2xlYW4iLCJpbnB1dCIsImNvb3JkaW5hdGVzIiwiZ2V0Q29sdW1uRmlsdGVyUHJvcHMiLCJnZXRDb2x1bW5GaWVsZElkeCIsIkNvbnNvbGUiLCJ3YXJuIiwibGluZUNoYXJ0Iiwic2VyaWVzIiwicm93Iiwicm93SW5kZXgiLCJ5IiwidmFsdWVBdCIsInNvcnQiLCJhIiwiYiIsInlEb21haW4iLCJ4RG9tYWluIiwiZ2V0RGVmYXVsdEZpbHRlclBsb3RUeXBlIiwiZmlsdGVyUGxvdFR5cGVzIiwiYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyIsImRhdGFzZXRJZHMiLCJkYXRhc2V0cyIsInJlZHVjZSIsImFjYyIsImxheWVyc1RvRmlsdGVyIiwiYXBwbGllZEZpbHRlcnMiLCJ0YWJsZSIsImZpbHRlclRhYmxlIiwib3B0aW9uIiwiZmllbGRJbmRleCIsIm5ld0ZpbHRlciIsIm1lcmdlRmlsdGVyRG9tYWluU3RlcCIsImFzc2lnbiIsImNvbWJpbmVkRG9tYWluIiwiZmVhdHVyZVRvRmlsdGVyVmFsdWUiLCJmZWF0dXJlIiwiZmlsdGVySWQiLCJwcm9wZXJ0aWVzIiwiZ2V0RmlsdGVySWRJbkZlYXR1cmUiLCJnZW5lcmF0ZVBvbHlnb25GaWx0ZXIiLCJub3ROdWxsb3JVbmRlZmluZWQiLCJsYWJlbCIsImlzVmlzaWJsZSIsImZpbHRlckRhdGFzZXRDUFUiLCJzdGF0ZSIsImRhdGFzZXRGaWx0ZXJzIiwiY3B1RmlsdGVyZWREYXRhc2V0IiwiZmlsdGVyVGFibGVDUFUiLCJ2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyIsImZpbHRlcnNUb1ZhbGlkYXRlIiwidmFsaWRhdGVkIiwidXBkYXRlZERhdGFzZXRzIiwiaXNNZXJnaW5nRGF0YXNldHMiLCJhdWdtZW50ZWREYXRhc2V0cyIsImFwcGx5VG9EYXRhc2V0cyIsInZhbGlkYXRlZEZpbHRlciIsImdldEludGVydmFsQmlucyIsImtleXMiLCJ2YWx1ZXMiLCJnZXRUaW1l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QUNBLElBREEsR0FFQSxLQU5KO0FBT0Q7O0FBRU0sU0FBU3dRLFlBQVQsQ0FBc0JsTixNQUF0QixFQUErQztBQUNwRCxTQUFPQSxNQUFNLENBQUN0QixJQUFQLEtBQWdCQyw2QkFBa0JDLElBQXpDO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjMgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQge2FzY2VuZGluZywgZXh0ZW50LCBoaXN0b2dyYW0gYXMgZDNIaXN0b2dyYW0sIHRpY2tzfSBmcm9tICdkMy1hcnJheSc7XG5pbXBvcnQga2V5TWlycm9yIGZyb20gJ2tleW1pcnJvcic7XG5pbXBvcnQgQ29uc29sZSBmcm9tICdnbG9iYWwvY29uc29sZSc7XG5pbXBvcnQgZ2V0IGZyb20gJ2xvZGFzaC5nZXQnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoLmlzZXF1YWwnO1xuXG5pbXBvcnQgYm9vbGVhbldpdGhpbiBmcm9tICdAdHVyZi9ib29sZWFuLXdpdGhpbic7XG5pbXBvcnQge3BvaW50IGFzIHR1cmZQb2ludH0gZnJvbSAnQHR1cmYvaGVscGVycyc7XG5pbXBvcnQge0RlY2ltYWx9IGZyb20gJ2RlY2ltYWwuanMnO1xuaW1wb3J0IHtcbiAgQUxMX0ZJRUxEX1RZUEVTLFxuICBGSUxURVJfVFlQRVMsXG4gIEFOSU1BVElPTl9XSU5ET1csXG4gIFBMT1RfVFlQRVMsXG4gIExBWUVSX1RZUEVTLFxuICBGSUxURVJfVklFV19UWVBFU1xufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge1Zpc1N0YXRlfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuaW1wb3J0ICogYXMgU2NhbGVVdGlscyBmcm9tICcuL2RhdGEtc2NhbGUtdXRpbHMnO1xuaW1wb3J0IHtoM0lzVmFsaWR9IGZyb20gJ2gzLWpzJztcblxuaW1wb3J0IHtcbiAgTWlsbGlzZWNvbmQsXG4gIEVudHJpZXMsXG4gIEZpZWxkLFxuICBQYXJzZWRGaWx0ZXIsXG4gIEZpbHRlcixcbiAgRmlsdGVyQmFzZSxcbiAgUG9seWdvbkZpbHRlcixcbiAgRmllbGREb21haW4sXG4gIFRpbWVSYW5nZUZpZWxkRG9tYWluLFxuICBIaXN0b2dyYW1CaW4sXG4gIEZlYXR1cmUsXG4gIEZlYXR1cmVWYWx1ZSxcbiAgTGluZUNoYXJ0LFxuICBUaW1lUmFuZ2VGaWx0ZXIsXG4gIFJhbmdlRmllbGREb21haW4sXG4gIEZpbHRlckRhdGFzZXRPcHQsXG4gIEZpbHRlclJlY29yZFxufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcblxuaW1wb3J0IHtEYXRhQ29udGFpbmVySW50ZXJmYWNlfSBmcm9tICcuL2RhdGEtY29udGFpbmVyLWludGVyZmFjZSc7XG5pbXBvcnQge2dlbmVyYXRlSGFzaElkLCBzZXQsIHRvQXJyYXl9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHtub3ROdWxsb3JVbmRlZmluZWQsIHRpbWVUb1VuaXhNaWxsaSwgdW5pcXVlfSBmcm9tICcuL2RhdGEtdXRpbHMnO1xuaW1wb3J0IHtnZXRDZW50cm9pZH0gZnJvbSAnLi9oMy11dGlscyc7XG5cbmV4cG9ydCBjb25zdCBkdXJhdGlvblNlY29uZCA9IDEwMDA7XG5leHBvcnQgY29uc3QgZHVyYXRpb25NaW51dGUgPSBkdXJhdGlvblNlY29uZCAqIDYwO1xuZXhwb3J0IGNvbnN0IGR1cmF0aW9uSG91ciA9IGR1cmF0aW9uTWludXRlICogNjA7XG5leHBvcnQgY29uc3QgZHVyYXRpb25EYXkgPSBkdXJhdGlvbkhvdXIgKiAyNDtcbmV4cG9ydCBjb25zdCBkdXJhdGlvbldlZWsgPSBkdXJhdGlvbkRheSAqIDc7XG5leHBvcnQgY29uc3QgZHVyYXRpb25ZZWFyID0gZHVyYXRpb25EYXkgKiAzNjU7XG5cbmV4cG9ydCB0eXBlIEZpbHRlclJlc3VsdCA9IHtcbiAgZmlsdGVyZWRJbmRleEZvckRvbWFpbj86IG51bWJlcltdO1xuICBmaWx0ZXJlZEluZGV4PzogbnVtYmVyW107XG59O1xuXG5leHBvcnQgdHlwZSBGaWx0ZXJDaGFuZ2VkID0ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgW2tleSBpbiBrZXlvZiBGaWx0ZXJSZWNvcmRdOiB7XG4gICAgW2tleTogc3RyaW5nXTogJ2FkZGVkJyB8ICdkZWxldGVkJyB8ICduYW1lX2NoYW5nZWQnIHwgJ3ZhbHVlX2NoYW5nZWQnIHwgJ2RhdGFJZF9jaGFuZ2VkJztcbiAgfSB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBkYXRhVmFsdWVBY2Nlc3NvciA9IChkYXRhOiB7aW5kZXg6IG51bWJlcn0pID0+IG51bWJlciB8IG51bGw7XG5cbmV4cG9ydCBjb25zdCBUaW1lc3RhbXBTdGVwTWFwID0gW1xuICB7bWF4OiAxLCBzdGVwOiAwLjA1fSxcbiAge21heDogMTAsIHN0ZXA6IDAuMX0sXG4gIHttYXg6IDEwMCwgc3RlcDogMX0sXG4gIHttYXg6IDUwMCwgc3RlcDogNX0sXG4gIHttYXg6IDEwMDAsIHN0ZXA6IDEwfSxcbiAge21heDogNTAwMCwgc3RlcDogNTB9LFxuICB7bWF4OiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksIHN0ZXA6IDEwMDB9XG5dO1xuXG5leHBvcnQgY29uc3QgaGlzdG9ncmFtQmlucyA9IDMwO1xuZXhwb3J0IGNvbnN0IGVubGFyZ2VkSGlzdG9ncmFtQmlucyA9IDEwMDtcblxuZXhwb3J0IGNvbnN0IEZJTFRFUl9VUERBVEVSX1BST1BTID0ga2V5TWlycm9yKHtcbiAgZGF0YUlkOiBudWxsLFxuICBuYW1lOiBudWxsLFxuICBsYXllcklkOiBudWxsXG59KTtcblxuZXhwb3J0IGNvbnN0IExJTUlURURfRklMVEVSX0VGRkVDVF9QUk9QUyA9IGtleU1pcnJvcih7XG4gIFtGSUxURVJfVVBEQVRFUl9QUk9QUy5uYW1lXTogbnVsbFxufSk7XG4vKipcbiAqIE1heCBudW1iZXIgb2YgZmlsdGVyIHZhbHVlIGJ1ZmZlcnMgdGhhdCBkZWNrLmdsIHByb3ZpZGVzXG4gKi9cblxuY29uc3QgU3VwcG9ydGVkUGxvdFR5cGUgPSB7XG4gIFtGSUxURVJfVFlQRVMudGltZVJhbmdlXToge1xuICAgIGRlZmF1bHQ6ICdoaXN0b2dyYW0nLFxuICAgIFtBTExfRklFTERfVFlQRVMuaW50ZWdlcl06ICdsaW5lQ2hhcnQnLFxuICAgIFtBTExfRklFTERfVFlQRVMucmVhbF06ICdsaW5lQ2hhcnQnXG4gIH0sXG4gIFtGSUxURVJfVFlQRVMucmFuZ2VdOiB7XG4gICAgZGVmYXVsdDogJ2hpc3RvZ3JhbScsXG4gICAgW0FMTF9GSUVMRF9UWVBFUy5pbnRlZ2VyXTogJ2xpbmVDaGFydCcsXG4gICAgW0FMTF9GSUVMRF9UWVBFUy5yZWFsXTogJ2xpbmVDaGFydCdcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IEZJTFRFUl9DT01QT05FTlRTID0ge1xuICBbRklMVEVSX1RZUEVTLnNlbGVjdF06ICdTaW5nbGVTZWxlY3RGaWx0ZXInLFxuICBbRklMVEVSX1RZUEVTLm11bHRpU2VsZWN0XTogJ011bHRpU2VsZWN0RmlsdGVyJyxcbiAgW0ZJTFRFUl9UWVBFUy50aW1lUmFuZ2VdOiAnVGltZVJhbmdlRmlsdGVyJyxcbiAgW0ZJTFRFUl9UWVBFUy5yYW5nZV06ICdSYW5nZUZpbHRlcicsXG4gIFtGSUxURVJfVFlQRVMucG9seWdvbl06ICdQb2x5Z29uRmlsdGVyJ1xufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfRklMVEVSX1NUUlVDVFVSRSA9IHtcbiAgZGF0YUlkOiBbXSwgLy8gW3N0cmluZ11cbiAgZnJlZXplOiBmYWxzZSxcbiAgaWQ6IG51bGwsXG4gIGVuYWJsZWQ6IHRydWUsXG5cbiAgLy8gdGltZSByYW5nZSBmaWx0ZXIgc3BlY2lmaWNcbiAgZml4ZWREb21haW46IGZhbHNlLFxuICB2aWV3OiBGSUxURVJfVklFV19UWVBFUy5zaWRlLFxuICBpc0FuaW1hdGluZzogZmFsc2UsXG4gIGFuaW1hdGlvbldpbmRvdzogQU5JTUFUSU9OX1dJTkRPVy5mcmVlLFxuICBzcGVlZDogMSxcblxuICAvLyBmaWVsZCBzcGVjaWZpY1xuICBuYW1lOiBbXSwgLy8gc3RyaW5nXG4gIHR5cGU6IG51bGwsXG4gIGZpZWxkSWR4OiBbXSwgLy8gW2ludGVnZXJdXG4gIGRvbWFpbjogbnVsbCxcbiAgdmFsdWU6IG51bGwsXG5cbiAgLy8gcGxvdFxuICBwbG90VHlwZTogUExPVF9UWVBFUy5oaXN0b2dyYW0sXG4gIHlBeGlzOiBudWxsLFxuICBpbnRlcnZhbDogbnVsbCxcblxuICAvLyBtb2RlXG4gIGdwdTogZmFsc2Vcbn07XG5cbmV4cG9ydCBjb25zdCBGSUxURVJfSURfTEVOR1RIID0gNDtcblxuZXhwb3J0IGNvbnN0IExBWUVSX0ZJTFRFUlMgPSBbRklMVEVSX1RZUEVTLnBvbHlnb25dO1xuXG4vKipcbiAqIEdlbmVyYXRlcyBhIGZpbHRlciB3aXRoIGEgZGF0YXNldCBpZCBhcyBkYXRhSWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRGaWx0ZXIoe1xuICBkYXRhSWQsXG4gIGlkXG59OiB7XG4gIGRhdGFJZD86IHN0cmluZyB8IG51bGwgfCBzdHJpbmdbXTtcbiAgaWQ/OiBzdHJpbmc7XG59ID0ge30pOiBGaWx0ZXJCYXNlPExpbmVDaGFydD4ge1xuICByZXR1cm4ge1xuICAgIC4uLkRFRkFVTFRfRklMVEVSX1NUUlVDVFVSRSxcbiAgICAvLyBzdG9yZSBpdCBhcyBkYXRhSWQgYW5kIGl0IGNvdWxkIGJlIG9uZSBvciBtYW55XG4gICAgZGF0YUlkOiBkYXRhSWQgPyB0b0FycmF5KGRhdGFJZCkgOiBbXSxcbiAgICBpZDogaWQgfHwgZ2VuZXJhdGVIYXNoSWQoRklMVEVSX0lEX0xFTkdUSClcbiAgfTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIGZpbHRlciBpcyB2YWxpZCBiYXNlZCBvbiB0aGUgZ2l2ZW4gZGF0YUlkXG4gKiBAcGFyYW0gIGZpbHRlciB0byB2YWxpZGF0ZVxuICogQHBhcmFtICBkYXRhc2V0SWQgaWQgdG8gdmFsaWRhdGUgZmlsdGVyIGFnYWluc3RcbiAqIEByZXR1cm4gdHJ1ZSBpZiBhIGZpbHRlciBpcyB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRBcHBseUZpbHRlcihmaWx0ZXI6IEZpbHRlciwgZGF0YXNldElkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgZGF0YUlkcyA9IHRvQXJyYXkoZmlsdGVyLmRhdGFJZCk7XG4gIHJldHVybiBkYXRhSWRzLmluY2x1ZGVzKGRhdGFzZXRJZCkgJiYgZmlsdGVyLnZhbHVlICE9PSBudWxsO1xufVxuXG5pbnRlcmZhY2UgS2VwbGVyVGFibGVNb2RlbDxLLCBMPiB7XG4gIGlkOiBzdHJpbmc7XG4gIGdldENvbHVtbkZpZWxkSWR4KGNvbHVtbk5hbWU6IHN0cmluZyk6IG51bWJlcjtcbiAgZmlsdGVyVGFibGUoZmlsdGVyczogRmlsdGVyW10sIGxheWVyczogTFtdLCBvcHQ/OiBGaWx0ZXJEYXRhc2V0T3B0KTogSztcbiAgZ2V0Q29sdW1uRmlsdGVyUHJvcHMoY29sdW1uTmFtZTogc3RyaW5nKTogRmllbGRbJ2ZpbHRlclByb3BzJ10gfCBudWxsIHwgdW5kZWZpbmVkO1xuICBkYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlO1xuICBmaWx0ZXJUYWJsZUNQVShmaWx0ZXJzOiBGaWx0ZXJbXSwgbGF5ZXJzOiBMW10pOiBLO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBhbmQgbW9kaWZpZXMgcG9seWdvbiBmaWx0ZXIgc3RydWN0dXJlXG4gKiBAcGFyYW0gZGF0YXNldFxuICogQHBhcmFtIGZpbHRlclxuICogQHBhcmFtIGxheWVyc1xuICogQHJldHVybiAtIHtmaWx0ZXIsIGRhdGFzZXR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVBvbHlnb25GaWx0ZXI8SyBleHRlbmRzIEtlcGxlclRhYmxlTW9kZWw8SywgTD4sIEwgZXh0ZW5kcyB7aWQ6IHN0cmluZ30+KFxuICBkYXRhc2V0OiBLLFxuICBmaWx0ZXI6IFBvbHlnb25GaWx0ZXIsXG4gIGxheWVyczogTFtdXG4pOiB7ZmlsdGVyOiBQb2x5Z29uRmlsdGVyIHwgbnVsbDsgZGF0YXNldDogS30ge1xuICBjb25zdCBmYWlsZWQgPSB7ZGF0YXNldCwgZmlsdGVyOiBudWxsfTtcbiAgY29uc3Qge3ZhbHVlLCBsYXllcklkLCB0eXBlLCBkYXRhSWR9ID0gZmlsdGVyO1xuXG4gIGlmICghbGF5ZXJJZCB8fCAhaXNWYWxpZEZpbHRlclZhbHVlKHR5cGUsIHZhbHVlKSkge1xuICAgIHJldHVybiBmYWlsZWQ7XG4gIH1cblxuICBjb25zdCBpc1ZhbGlkRGF0YXNldCA9IGRhdGFJZC5pbmNsdWRlcyhkYXRhc2V0LmlkKTtcblxuICBpZiAoIWlzVmFsaWREYXRhc2V0KSB7XG4gICAgcmV0dXJuIGZhaWxlZDtcbiAgfVxuXG4gIGNvbnN0IGxheWVyID0gbGF5ZXJzLmZpbmQobCA9PiBsYXllcklkLmluY2x1ZGVzKGwuaWQpKTtcblxuICBpZiAoIWxheWVyKSB7XG4gICAgcmV0dXJuIGZhaWxlZDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZmlsdGVyOiB7XG4gICAgICAuLi5maWx0ZXIsXG4gICAgICBmcmVlemU6IHRydWUsXG4gICAgICBmaWVsZElkeDogW11cbiAgICB9LFxuICAgIGRhdGFzZXRcbiAgfTtcbn1cblxuLyoqXG4gKiBDdXN0b20gZmlsdGVyIHZhbGlkYXRvcnNcbiAqL1xuY29uc3QgZmlsdGVyVmFsaWRhdG9ycyA9IHtcbiAgW0ZJTFRFUl9UWVBFUy5wb2x5Z29uXTogdmFsaWRhdGVQb2x5Z29uRmlsdGVyXG59O1xuXG4vKipcbiAqIERlZmF1bHQgdmFsaWRhdGUgZmlsdGVyIGZ1bmN0aW9uXG4gKiBAcGFyYW0gZGF0YXNldFxuICogQHBhcmFtIGZpbHRlclxuICogQHJldHVybiAtIHtmaWx0ZXIsIGRhdGFzZXR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUZpbHRlcjxLIGV4dGVuZHMgS2VwbGVyVGFibGVNb2RlbDxLLCBMPiwgTD4oXG4gIGRhdGFzZXQ6IEssXG4gIGZpbHRlcjogUGFyc2VkRmlsdGVyXG4pOiB7ZmlsdGVyOiBGaWx0ZXIgfCBudWxsOyBkYXRhc2V0OiBLfSB7XG4gIC8vIG1hdGNoIGZpbHRlci5kYXRhSWRcbiAgY29uc3QgZmFpbGVkID0ge2RhdGFzZXQsIGZpbHRlcjogbnVsbH07XG4gIGNvbnN0IGZpbHRlckRhdGFJZCA9IHRvQXJyYXkoZmlsdGVyLmRhdGFJZCk7XG5cbiAgY29uc3QgZmlsdGVyRGF0YXNldEluZGV4ID0gZmlsdGVyRGF0YUlkLmluZGV4T2YoZGF0YXNldC5pZCk7XG4gIGlmIChmaWx0ZXJEYXRhc2V0SW5kZXggPCAwIHx8ICF0b0FycmF5KGZpbHRlci5uYW1lKVtmaWx0ZXJEYXRhc2V0SW5kZXhdKSB7XG4gICAgLy8gdGhlIGN1cnJlbnQgZmlsdGVyIGlzIG5vdCBtYXBwZWQgYWdhaW5zdCB0aGUgY3VycmVudCBkYXRhc2V0XG4gICAgcmV0dXJuIGZhaWxlZDtcbiAgfVxuXG4gIGNvbnN0IGluaXRpYWxpemVGaWx0ZXI6IEZpbHRlciA9IHtcbiAgICAuLi5nZXREZWZhdWx0RmlsdGVyKHtkYXRhSWQ6IGZpbHRlci5kYXRhSWR9KSxcbiAgICAuLi5maWx0ZXIsXG4gICAgZGF0YUlkOiBmaWx0ZXJEYXRhSWQsXG4gICAgbmFtZTogdG9BcnJheShmaWx0ZXIubmFtZSlcbiAgfTtcblxuICBjb25zdCBmaWVsZE5hbWUgPSBpbml0aWFsaXplRmlsdGVyLm5hbWVbZmlsdGVyRGF0YXNldEluZGV4XTtcbiAgY29uc3Qge2ZpbHRlcjogdXBkYXRlZEZpbHRlciwgZGF0YXNldDogdXBkYXRlZERhdGFzZXR9ID0gYXBwbHlGaWx0ZXJGaWVsZE5hbWUoXG4gICAgaW5pdGlhbGl6ZUZpbHRlcixcbiAgICBkYXRhc2V0LFxuICAgIGZpZWxkTmFtZSxcbiAgICBmaWx0ZXJEYXRhc2V0SW5kZXgsXG4gICAge21lcmdlRG9tYWluOiB0cnVlfVxuICApO1xuXG4gIGlmICghdXBkYXRlZEZpbHRlcikge1xuICAgIHJldHVybiBmYWlsZWQ7XG4gIH1cblxuICB1cGRhdGVkRmlsdGVyLnZhbHVlID0gYWRqdXN0VmFsdWVUb0ZpbHRlckRvbWFpbihmaWx0ZXIudmFsdWUsIHVwZGF0ZWRGaWx0ZXIpO1xuICB1cGRhdGVkRmlsdGVyLnZpZXcgPSBmaWx0ZXIudmlldyA/PyB1cGRhdGVkRmlsdGVyLnZpZXc7XG5cbiAgaWYgKHVwZGF0ZWRGaWx0ZXIudmFsdWUgPT09IG51bGwpIHtcbiAgICAvLyBjYW5ub3QgYWRqdXN0IHNhdmVkIHZhbHVlIHRvIGZpbHRlclxuICAgIHJldHVybiBmYWlsZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGZpbHRlcjogdmFsaWRhdGVGaWx0ZXJZQXhpcyh1cGRhdGVkRmlsdGVyLCB1cGRhdGVkRGF0YXNldCksXG4gICAgZGF0YXNldDogdXBkYXRlZERhdGFzZXRcbiAgfTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCBmaWx0ZXIgY29uZmlnIHdpdGggbmV3IGRhdGEsXG4gKiBjYWxjdWxhdGUgZG9tYWluIGFuZCBmaWVsZElkeCBiYXNlZCBuZXcgZmllbGRzIGFuZCBkYXRhXG4gKlxuICogQHBhcmFtIGRhdGFzZXRcbiAqIEBwYXJhbSBmaWx0ZXIgLSBmaWx0ZXIgdG8gYmUgdmFsaWRhdGVcbiAqIEBwYXJhbSBsYXllcnMgLSBsYXllcnNcbiAqIEByZXR1cm4gdmFsaWRhdGVkIGZpbHRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVGaWx0ZXJXaXRoRGF0YTxLIGV4dGVuZHMgS2VwbGVyVGFibGVNb2RlbDxLLCBMPiwgTD4oXG4gIGRhdGFzZXQ6IEssXG4gIGZpbHRlcjogUGFyc2VkRmlsdGVyLFxuICBsYXllcnM6IExbXVxuKToge2ZpbHRlcjogRmlsdGVyOyBkYXRhc2V0OiBLfSB7XG4gIHJldHVybiBmaWx0ZXIudHlwZSAmJiBmaWx0ZXJWYWxpZGF0b3JzLmhhc093blByb3BlcnR5KGZpbHRlci50eXBlKVxuICAgID8gZmlsdGVyVmFsaWRhdG9yc1tmaWx0ZXIudHlwZV0oZGF0YXNldCwgZmlsdGVyLCBsYXllcnMpXG4gICAgOiB2YWxpZGF0ZUZpbHRlcihkYXRhc2V0LCBmaWx0ZXIpO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIFlBeGlzXG4gKiBAcGFyYW0gZmlsdGVyXG4gKiBAcGFyYW0gZGF0YXNldFxuICogQHJldHVybiB7Kn1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVGaWx0ZXJZQXhpcyhmaWx0ZXIsIGRhdGFzZXQpIHtcbiAgLy8gVE9ETzogdmFsaWRhdGUgeUF4aXMgYWdhaW5zdCBvdGhlciBkYXRhc2V0c1xuXG4gIGNvbnN0IHtmaWVsZHN9ID0gZGF0YXNldDtcbiAgY29uc3Qge3lBeGlzfSA9IGZpbHRlcjtcbiAgLy8gVE9ETzogdmFsaWRhdGUgeUF4aXMgYWdhaW5zdCBvdGhlciBkYXRhc2V0c1xuICBpZiAoeUF4aXMpIHtcbiAgICBjb25zdCBtYXRjaGVkQXhpcyA9IGZpZWxkcy5maW5kKCh7bmFtZSwgdHlwZX0pID0+IG5hbWUgPT09IHlBeGlzLm5hbWUgJiYgdHlwZSA9PT0geUF4aXMudHlwZSk7XG5cbiAgICBmaWx0ZXIgPSBtYXRjaGVkQXhpc1xuICAgICAgPyB7XG4gICAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICAgIHlBeGlzOiBtYXRjaGVkQXhpcyxcbiAgICAgICAgICAuLi5nZXRGaWx0ZXJQbG90KHsuLi5maWx0ZXIsIHlBeGlzOiBtYXRjaGVkQXhpc30sIGRhdGFzZXQpXG4gICAgICAgIH1cbiAgICAgIDogZmlsdGVyO1xuICB9XG5cbiAgcmV0dXJuIGZpbHRlcjtcbn1cblxuLyoqXG4gKiBHZXQgZGVmYXVsdCBmaWx0ZXIgcHJvcCBiYXNlZCBvbiBmaWVsZCB0eXBlXG4gKlxuICogQHBhcmFtIGZpZWxkXG4gKiBAcGFyYW0gZmllbGREb21haW5cbiAqIEByZXR1cm5zIGRlZmF1bHQgZmlsdGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWx0ZXJQcm9wcyhcbiAgZmllbGQ6IEZpZWxkLFxuICBmaWVsZERvbWFpbjogRmllbGREb21haW5cbik6IFBhcnRpYWw8RmlsdGVyPiAmIHtmaWVsZFR5cGU6IHN0cmluZ30ge1xuICBjb25zdCBmaWx0ZXJQcm9wcyA9IHtcbiAgICAuLi5maWVsZERvbWFpbixcbiAgICBmaWVsZFR5cGU6IGZpZWxkLnR5cGUsXG4gICAgdmlldzogRklMVEVSX1ZJRVdfVFlQRVMuc2lkZVxuICB9O1xuXG4gIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnJlYWw6XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMuaW50ZWdlcjpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmZpbHRlclByb3BzLFxuICAgICAgICB2YWx1ZTogZmllbGREb21haW4uZG9tYWluLFxuICAgICAgICB0eXBlOiBGSUxURVJfVFlQRVMucmFuZ2UsXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgdHlwZU9wdGlvbnM6IFtGSUxURVJfVFlQRVMucmFuZ2VdLFxuICAgICAgICBncHU6IHRydWVcbiAgICAgIH07XG5cbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5ib29sZWFuOlxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZmlsdGVyUHJvcHMsXG4gICAgICAgIHR5cGU6IEZJTFRFUl9UWVBFUy5zZWxlY3QsXG4gICAgICAgIHZhbHVlOiB0cnVlLFxuICAgICAgICBncHU6IGZhbHNlXG4gICAgICB9O1xuXG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMuc3RyaW5nOlxuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmRhdGU6XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5maWx0ZXJQcm9wcyxcbiAgICAgICAgdHlwZTogRklMVEVSX1RZUEVTLm11bHRpU2VsZWN0LFxuICAgICAgICB2YWx1ZTogW10sXG4gICAgICAgIGdwdTogZmFsc2VcbiAgICAgIH07XG5cbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy50aW1lc3RhbXA6XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5maWx0ZXJQcm9wcyxcbiAgICAgICAgdHlwZTogRklMVEVSX1RZUEVTLnRpbWVSYW5nZSxcbiAgICAgICAgdmlldzogRklMVEVSX1ZJRVdfVFlQRVMuZW5sYXJnZWQsXG4gICAgICAgIGZpeGVkRG9tYWluOiB0cnVlLFxuICAgICAgICB2YWx1ZTogZmlsdGVyUHJvcHMuZG9tYWluLFxuICAgICAgICBncHU6IHRydWVcbiAgICAgIH07XG5cbiAgICBkZWZhdWx0OlxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgcmV0dXJuIHt9O1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBnZXRQb2x5Z29uRmlsdGVyRnVuY3RvciA9IChsYXllciwgZmlsdGVyLCBkYXRhQ29udGFpbmVyKSA9PiB7XG4gIGNvbnN0IGdldFBvc2l0aW9uID0gbGF5ZXIuZ2V0UG9zaXRpb25BY2Nlc3NvcihkYXRhQ29udGFpbmVyKTtcblxuICBzd2l0Y2ggKGxheWVyLnR5cGUpIHtcbiAgICBjYXNlIExBWUVSX1RZUEVTLnBvaW50OlxuICAgIGNhc2UgTEFZRVJfVFlQRVMuaWNvbjpcbiAgICAgIHJldHVybiBkYXRhID0+IHtcbiAgICAgICAgY29uc3QgcG9zID0gZ2V0UG9zaXRpb24oZGF0YSk7XG4gICAgICAgIHJldHVybiBwb3MuZXZlcnkoTnVtYmVyLmlzRmluaXRlKSAmJiBpc0luUG9seWdvbihwb3MsIGZpbHRlci52YWx1ZSk7XG4gICAgICB9O1xuICAgIGNhc2UgTEFZRVJfVFlQRVMuYXJjOlxuICAgIGNhc2UgTEFZRVJfVFlQRVMubGluZTpcbiAgICAgIHJldHVybiBkYXRhID0+IHtcbiAgICAgICAgY29uc3QgcG9zID0gZ2V0UG9zaXRpb24oZGF0YSk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgcG9zLmV2ZXJ5KE51bWJlci5pc0Zpbml0ZSkgJiZcbiAgICAgICAgICBbXG4gICAgICAgICAgICBbcG9zWzBdLCBwb3NbMV1dLFxuICAgICAgICAgICAgW3Bvc1szXSwgcG9zWzRdXVxuICAgICAgICAgIF0uZXZlcnkocG9pbnQgPT4gaXNJblBvbHlnb24ocG9pbnQsIGZpbHRlci52YWx1ZSkpXG4gICAgICAgICk7XG4gICAgICB9O1xuICAgIGNhc2UgTEFZRVJfVFlQRVMuaGV4YWdvbklkOlxuICAgICAgaWYgKGxheWVyLmRhdGFUb0ZlYXR1cmUgJiYgbGF5ZXIuZGF0YVRvRmVhdHVyZS5jZW50cm9pZHMpIHtcbiAgICAgICAgcmV0dXJuIGRhdGEgPT4ge1xuICAgICAgICAgIC8vIG51bGwgb3IgZ2V0Q2VudHJvaWQoe2lkfSlcbiAgICAgICAgICBjb25zdCBjZW50cm9pZCA9IGxheWVyLmRhdGFUb0ZlYXR1cmUuY2VudHJvaWRzW2RhdGEuaW5kZXhdO1xuICAgICAgICAgIHJldHVybiBjZW50cm9pZCAmJiBpc0luUG9seWdvbihjZW50cm9pZCwgZmlsdGVyLnZhbHVlKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhID0+IHtcbiAgICAgICAgY29uc3QgaWQgPSBnZXRQb3NpdGlvbihkYXRhKTtcbiAgICAgICAgaWYgKCFoM0lzVmFsaWQoaWQpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBvcyA9IGdldENlbnRyb2lkKHtpZH0pO1xuICAgICAgICByZXR1cm4gcG9zLmV2ZXJ5KE51bWJlci5pc0Zpbml0ZSkgJiYgaXNJblBvbHlnb24ocG9zLCBmaWx0ZXIudmFsdWUpO1xuICAgICAgfTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICgpID0+IHRydWU7XG4gIH1cbn07XG5cbi8qKlxuICogQHBhcmFtIHBhcmFtIEFuIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgYSByb3cgcmVjb3JkLlxuICogQHBhcmFtIHBhcmFtLmluZGV4IEluZGV4IG9mIHRoZSByb3cgaW4gZGF0YSBjb250YWluZXIuXG4gKiBAcmV0dXJucyBSZXR1cm5zIHRydWUgdG8ga2VlcCB0aGUgZWxlbWVudCwgb3IgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG50eXBlIGZpbHRlckZ1bmN0aW9uID0gKGRhdGE6IHtpbmRleDogbnVtYmVyfSkgPT4gYm9vbGVhbjtcbi8qKlxuICogQHBhcmFtIGZpZWxkIGRhdGFzZXQgRmllbGRcbiAqIEBwYXJhbSBkYXRhSWQgRGF0YXNldCBpZFxuICogQHBhcmFtIGZpbHRlciBGaWx0ZXIgb2JqZWN0XG4gKiBAcGFyYW0gbGF5ZXJzIGxpc3Qgb2YgbGF5ZXJzIHRvIGZpbHRlciB1cG9uXG4gKiBAcGFyYW0gZGF0YUNvbnRhaW5lciBEYXRhIGNvbnRhaW5lclxuICogQHJldHVybiBmaWx0ZXJGdW5jdGlvblxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsdGVyRnVuY3Rpb248TCBleHRlbmRzIHtjb25maWc6IHtkYXRhSWQ6IHN0cmluZyB8IG51bGx9OyBpZDogc3RyaW5nfT4oXG4gIGZpZWxkOiBGaWVsZCB8IG51bGwsXG4gIGRhdGFJZDogc3RyaW5nLFxuICBmaWx0ZXI6IEZpbHRlcixcbiAgbGF5ZXJzOiBMW10sXG4gIGRhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2Vcbik6IGZpbHRlckZ1bmN0aW9uIHtcbiAgLy8gZmllbGQgY291bGQgYmUgbnVsbCBpbiBwb2x5Z29uIGZpbHRlclxuICBjb25zdCB2YWx1ZUFjY2Vzc29yID0gZmllbGQgPyBmaWVsZC52YWx1ZUFjY2Vzc29yIDogZGF0YSA9PiBudWxsO1xuICBjb25zdCBkZWZhdWx0RnVuYyA9IGQgPT4gdHJ1ZTtcblxuICBpZiAoZmlsdGVyLmVuYWJsZWQgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRGdW5jO1xuICB9XG5cbiAgc3dpdGNoIChmaWx0ZXIudHlwZSkge1xuICAgIGNhc2UgRklMVEVSX1RZUEVTLnJhbmdlOlxuICAgICAgcmV0dXJuIGRhdGEgPT4gaXNJblJhbmdlKHZhbHVlQWNjZXNzb3IoZGF0YSksIGZpbHRlci52YWx1ZSk7XG4gICAgY2FzZSBGSUxURVJfVFlQRVMubXVsdGlTZWxlY3Q6XG4gICAgICByZXR1cm4gZGF0YSA9PiBmaWx0ZXIudmFsdWUuaW5jbHVkZXModmFsdWVBY2Nlc3NvcihkYXRhKSk7XG4gICAgY2FzZSBGSUxURVJfVFlQRVMuc2VsZWN0OlxuICAgICAgcmV0dXJuIGRhdGEgPT4gdmFsdWVBY2Nlc3NvcihkYXRhKSA9PT0gZmlsdGVyLnZhbHVlO1xuICAgIGNhc2UgRklMVEVSX1RZUEVTLnRpbWVSYW5nZTpcbiAgICAgIGlmICghZmllbGQpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRGdW5jO1xuICAgICAgfVxuICAgICAgY29uc3QgbWFwcGVkVmFsdWUgPSBnZXQoZmllbGQsIFsnZmlsdGVyUHJvcHMnLCAnbWFwcGVkVmFsdWUnXSk7XG4gICAgICBjb25zdCBhY2Nlc3NvciA9IEFycmF5LmlzQXJyYXkobWFwcGVkVmFsdWUpXG4gICAgICAgID8gZGF0YSA9PiBtYXBwZWRWYWx1ZVtkYXRhLmluZGV4XVxuICAgICAgICA6IGRhdGEgPT4gdGltZVRvVW5peE1pbGxpKHZhbHVlQWNjZXNzb3IoZGF0YSksIGZpZWxkLmZvcm1hdCk7XG4gICAgICByZXR1cm4gZGF0YSA9PiBpc0luUmFuZ2UoYWNjZXNzb3IoZGF0YSksIGZpbHRlci52YWx1ZSk7XG4gICAgY2FzZSBGSUxURVJfVFlQRVMucG9seWdvbjpcbiAgICAgIGlmICghbGF5ZXJzIHx8ICFsYXllcnMubGVuZ3RoIHx8ICFmaWx0ZXIubGF5ZXJJZCkge1xuICAgICAgICByZXR1cm4gZGVmYXVsdEZ1bmM7XG4gICAgICB9XG4gICAgICBjb25zdCBsYXllckZpbHRlckZ1bmN0aW9ucyA9IGZpbHRlci5sYXllcklkXG4gICAgICAgIC5tYXAoaWQgPT4gbGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSBpZCkpXG4gICAgICAgIC5maWx0ZXIobCA9PiBsICYmIGwuY29uZmlnLmRhdGFJZCA9PT0gZGF0YUlkKVxuICAgICAgICAubWFwKGxheWVyID0+IGdldFBvbHlnb25GaWx0ZXJGdW5jdG9yKGxheWVyLCBmaWx0ZXIsIGRhdGFDb250YWluZXIpKTtcblxuICAgICAgcmV0dXJuIGRhdGEgPT4gbGF5ZXJGaWx0ZXJGdW5jdGlvbnMuZXZlcnkoZmlsdGVyRnVuYyA9PiBmaWx0ZXJGdW5jKGRhdGEpKTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGRlZmF1bHRGdW5jO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVGaWx0ZXJEYXRhSWQoZGF0YUlkOiBzdHJpbmcgfCBzdHJpbmdbXSk6IEZpbHRlckJhc2U8TGluZUNoYXJ0PiB7XG4gIHJldHVybiBnZXREZWZhdWx0RmlsdGVyKHtkYXRhSWR9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckRhdGFCeUZpbHRlclR5cGVzKFxuICB7XG4gICAgZHluYW1pY0RvbWFpbkZpbHRlcnMsXG4gICAgY3B1RmlsdGVycyxcbiAgICBmaWx0ZXJGdW5jc1xuICB9OiB7XG4gICAgZHluYW1pY0RvbWFpbkZpbHRlcnM6IEZpbHRlcltdIHwgbnVsbDtcbiAgICBjcHVGaWx0ZXJzOiBGaWx0ZXJbXSB8IG51bGw7XG4gICAgZmlsdGVyRnVuY3M6IHtcbiAgICAgIFtrZXk6IHN0cmluZ106IGZpbHRlckZ1bmN0aW9uO1xuICAgIH07XG4gIH0sXG4gIGRhdGFDb250YWluZXI6IERhdGFDb250YWluZXJJbnRlcmZhY2Vcbik6IEZpbHRlclJlc3VsdCB7XG4gIGNvbnN0IGZpbHRlcmVkSW5kZXhGb3JEb21haW46IG51bWJlcltdID0gW107XG4gIGNvbnN0IGZpbHRlcmVkSW5kZXg6IG51bWJlcltdID0gW107XG5cbiAgY29uc3QgZmlsdGVyQ29udGV4dCA9IHtpbmRleDogLTEsIGRhdGFDb250YWluZXJ9O1xuICBjb25zdCBmaWx0ZXJGdW5jQ2FsbGVyID0gKGZpbHRlcjogRmlsdGVyKSA9PiBmaWx0ZXJGdW5jc1tmaWx0ZXIuaWRdKGZpbHRlckNvbnRleHQpO1xuXG4gIGNvbnN0IG51bVJvd3MgPSBkYXRhQ29udGFpbmVyLm51bVJvd3MoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1Sb3dzOyArK2kpIHtcbiAgICBmaWx0ZXJDb250ZXh0LmluZGV4ID0gaTtcblxuICAgIGNvbnN0IG1hdGNoRm9yRG9tYWluID0gZHluYW1pY0RvbWFpbkZpbHRlcnMgJiYgZHluYW1pY0RvbWFpbkZpbHRlcnMuZXZlcnkoZmlsdGVyRnVuY0NhbGxlcik7XG4gICAgaWYgKG1hdGNoRm9yRG9tYWluKSB7XG4gICAgICBmaWx0ZXJlZEluZGV4Rm9yRG9tYWluLnB1c2goZmlsdGVyQ29udGV4dC5pbmRleCk7XG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2hGb3JSZW5kZXIgPSBjcHVGaWx0ZXJzICYmIGNwdUZpbHRlcnMuZXZlcnkoZmlsdGVyRnVuY0NhbGxlcik7XG4gICAgaWYgKG1hdGNoRm9yUmVuZGVyKSB7XG4gICAgICBmaWx0ZXJlZEluZGV4LnB1c2goZmlsdGVyQ29udGV4dC5pbmRleCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi4oZHluYW1pY0RvbWFpbkZpbHRlcnMgPyB7ZmlsdGVyZWRJbmRleEZvckRvbWFpbn0gOiB7fSksXG4gICAgLi4uKGNwdUZpbHRlcnMgPyB7ZmlsdGVyZWRJbmRleH0gOiB7fSlcbiAgfTtcbn1cblxuLyoqXG4gKiBHZXQgYSByZWNvcmQgb2YgZmlsdGVycyBiYXNlZCBvbiBkb21haW4gdHlwZSBhbmQgZ3B1IC8gY3B1XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWx0ZXJSZWNvcmQoXG4gIGRhdGFJZDogc3RyaW5nLFxuICBmaWx0ZXJzOiBGaWx0ZXJbXSxcbiAgb3B0OiBGaWx0ZXJEYXRhc2V0T3B0ID0ge31cbik6IEZpbHRlclJlY29yZCB7XG4gIGNvbnN0IGZpbHRlclJlY29yZDogRmlsdGVyUmVjb3JkID0ge1xuICAgIGR5bmFtaWNEb21haW46IFtdLFxuICAgIGZpeGVkRG9tYWluOiBbXSxcbiAgICBjcHU6IFtdLFxuICAgIGdwdTogW11cbiAgfTtcblxuICBmaWx0ZXJzLmZvckVhY2goZiA9PiB7XG4gICAgaWYgKGlzVmFsaWRGaWx0ZXJWYWx1ZShmLnR5cGUsIGYudmFsdWUpICYmIHRvQXJyYXkoZi5kYXRhSWQpLmluY2x1ZGVzKGRhdGFJZCkpIHtcbiAgICAgIChmLmZpeGVkRG9tYWluIHx8IG9wdC5pZ25vcmVEb21haW5cbiAgICAgICAgPyBmaWx0ZXJSZWNvcmQuZml4ZWREb21haW5cbiAgICAgICAgOiBmaWx0ZXJSZWNvcmQuZHluYW1pY0RvbWFpblxuICAgICAgKS5wdXNoKGYpO1xuXG4gICAgICAoZi5ncHUgJiYgIW9wdC5jcHVPbmx5ID8gZmlsdGVyUmVjb3JkLmdwdSA6IGZpbHRlclJlY29yZC5jcHUpLnB1c2goZik7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZmlsdGVyUmVjb3JkO1xufVxuXG4vKipcbiAqIENvbXBhcmUgZmlsdGVyIHJlY29yZHMgdG8gZ2V0IHdoYXQgaGFzIGNoYW5nZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpZmZGaWx0ZXJzKFxuICBmaWx0ZXJSZWNvcmQ6IEZpbHRlclJlY29yZCxcbiAgb2xkRmlsdGVyUmVjb3JkOiBGaWx0ZXJSZWNvcmQgfCB7fSA9IHt9XG4pOiBGaWx0ZXJDaGFuZ2VkIHtcbiAgbGV0IGZpbHRlckNoYW5nZWQ6IFBhcnRpYWw8RmlsdGVyQ2hhbmdlZD4gPSB7fTtcblxuICAoT2JqZWN0LmVudHJpZXMoZmlsdGVyUmVjb3JkKSBhcyBFbnRyaWVzPEZpbHRlclJlY29yZD4pLmZvckVhY2goKFtyZWNvcmQsIGl0ZW1zXSkgPT4ge1xuICAgIGl0ZW1zLmZvckVhY2goZmlsdGVyID0+IHtcbiAgICAgIGNvbnN0IG9sZEZpbHRlcjogRmlsdGVyID0gKG9sZEZpbHRlclJlY29yZFtyZWNvcmRdIHx8IFtdKS5maW5kKFxuICAgICAgICAoZjogRmlsdGVyKSA9PiBmLmlkID09PSBmaWx0ZXIuaWRcbiAgICAgICk7XG5cbiAgICAgIGlmICghb2xkRmlsdGVyKSB7XG4gICAgICAgIC8vIGFkZGVkXG4gICAgICAgIGZpbHRlckNoYW5nZWQgPSBzZXQoW3JlY29yZCwgZmlsdGVyLmlkXSwgJ2FkZGVkJywgZmlsdGVyQ2hhbmdlZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjaGVjayAgd2hhdCBoYXMgY2hhbmdlZFxuICAgICAgICBbJ25hbWUnLCAndmFsdWUnLCAnZGF0YUlkJ10uZm9yRWFjaChwcm9wID0+IHtcbiAgICAgICAgICBpZiAoZmlsdGVyW3Byb3BdICE9PSBvbGRGaWx0ZXJbcHJvcF0pIHtcbiAgICAgICAgICAgIGZpbHRlckNoYW5nZWQgPSBzZXQoW3JlY29yZCwgZmlsdGVyLmlkXSwgYCR7cHJvcH1fY2hhbmdlZGAsIGZpbHRlckNoYW5nZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAob2xkRmlsdGVyUmVjb3JkW3JlY29yZF0gfHwgW10pLmZvckVhY2goKG9sZEZpbHRlcjogRmlsdGVyKSA9PiB7XG4gICAgICAvLyBkZWxldGVkXG4gICAgICBpZiAoIWl0ZW1zLmZpbmQoZiA9PiBmLmlkID09PSBvbGRGaWx0ZXIuaWQpKSB7XG4gICAgICAgIGZpbHRlckNoYW5nZWQgPSBzZXQoW3JlY29yZCwgb2xkRmlsdGVyLmlkXSwgJ2RlbGV0ZWQnLCBmaWx0ZXJDaGFuZ2VkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHsuLi57ZHluYW1pY0RvbWFpbjogbnVsbCwgZml4ZWREb21haW46IG51bGwsIGNwdTogbnVsbCwgZ3B1OiBudWxsfSwgLi4uZmlsdGVyQ2hhbmdlZH07XG59XG4vKipcbiAqIENhbGwgYnkgcGFyc2luZyBmaWx0ZXJzIGZyb20gVVJMXG4gKiBDaGVjayBpZiB2YWx1ZSBvZiBmaWx0ZXIgd2l0aGluIGZpbHRlciBkb21haW4sIGlmIG5vdCBhZGp1c3QgaXQgdG8gbWF0Y2hcbiAqIGZpbHRlciBkb21haW5cbiAqXG4gKiBAcmV0dXJucyB2YWx1ZSAtIGFkanVzdGVkIHZhbHVlIHRvIG1hdGNoIGZpbHRlciBvciBudWxsIHRvIHJlbW92ZSBmaWx0ZXJcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBmdW5jdGlvbiBhZGp1c3RWYWx1ZVRvRmlsdGVyRG9tYWluKHZhbHVlOiBGaWx0ZXJbJ3ZhbHVlJ10sIHtkb21haW4sIHR5cGV9KSB7XG4gIGlmICghdHlwZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBpZiB0aGUgY3VycmVudCBmaWx0ZXIgaXMgYSBwb2x5Z29uIGl0IHdpbGwgbm90IGhhdmUgYW55IGRvbWFpblxuICAvLyBhbGwgb3RoZXIgZmlsdGVyIHR5cGVzIHJlcXVpcmUgZG9tYWluXG4gIGlmICh0eXBlICE9PSBGSUxURVJfVFlQRVMucG9seWdvbiAmJiAhZG9tYWluKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBGSUxURVJfVFlQRVMucmFuZ2U6XG4gICAgY2FzZSBGSUxURVJfVFlQRVMudGltZVJhbmdlOlxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSB8fCB2YWx1ZS5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgcmV0dXJuIGRvbWFpbi5tYXAoZCA9PiBkKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlLm1hcCgoZCwgaSkgPT4gKG5vdE51bGxvclVuZGVmaW5lZChkKSAmJiBpc0luUmFuZ2UoZCwgZG9tYWluKSA/IGQgOiBkb21haW5baV0pKTtcblxuICAgIGNhc2UgRklMVEVSX1RZUEVTLm11bHRpU2VsZWN0OlxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBjb25zdCBmaWx0ZXJlZFZhbHVlID0gdmFsdWUuZmlsdGVyKGQgPT4gZG9tYWluLmluY2x1ZGVzKGQpKTtcbiAgICAgIHJldHVybiBmaWx0ZXJlZFZhbHVlLmxlbmd0aCA/IGZpbHRlcmVkVmFsdWUgOiBbXTtcblxuICAgIGNhc2UgRklMVEVSX1RZUEVTLnNlbGVjdDpcbiAgICAgIHJldHVybiBkb21haW4uaW5jbHVkZXModmFsdWUpID8gdmFsdWUgOiB0cnVlO1xuICAgIGNhc2UgRklMVEVSX1RZUEVTLnBvbHlnb246XG4gICAgICByZXR1cm4gdmFsdWU7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbi8qIGVzbGludC1lbmFibGUgY29tcGxleGl0eSAqL1xuXG4vKipcbiAqIENhbGN1bGF0ZSBudW1lcmljIGRvbWFpbiBhbmQgc3VpdGFibGUgc3RlcFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TnVtZXJpY0ZpZWxkRG9tYWluKFxuICBkYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlLFxuICB2YWx1ZUFjY2Vzc29yOiBkYXRhVmFsdWVBY2Nlc3NvclxuKTogUmFuZ2VGaWVsZERvbWFpbiB7XG4gIGxldCBkb21haW46IFtudW1iZXIsIG51bWJlcl0gPSBbMCwgMV07XG4gIGxldCBzdGVwID0gMC4xO1xuXG4gIGNvbnN0IG1hcHBlZFZhbHVlID0gZGF0YUNvbnRhaW5lci5tYXBJbmRleCh2YWx1ZUFjY2Vzc29yKTtcblxuICBpZiAoZGF0YUNvbnRhaW5lci5udW1Sb3dzKCkgPiAxKSB7XG4gICAgZG9tYWluID0gU2NhbGVVdGlscy5nZXRMaW5lYXJEb21haW4obWFwcGVkVmFsdWUpO1xuICAgIGNvbnN0IGRpZmYgPSBkb21haW5bMV0gLSBkb21haW5bMF07XG5cbiAgICAvLyBpbiBjYXNlIGVxdWFsIGRvbWFpbiwgWzk2LCA5Nl0sIHdoaWNoIHdpbGwgYnJlYWsgcXVhbnRpemUgc2NhbGVcbiAgICBpZiAoIWRpZmYpIHtcbiAgICAgIGRvbWFpblsxXSA9IGRvbWFpblswXSArIDE7XG4gICAgfVxuXG4gICAgc3RlcCA9IGdldE51bWVyaWNTdGVwU2l6ZShkaWZmKSB8fCBzdGVwO1xuICAgIGRvbWFpblswXSA9IGZvcm1hdE51bWJlckJ5U3RlcChkb21haW5bMF0sIHN0ZXAsICdmbG9vcicpO1xuICAgIGRvbWFpblsxXSA9IGZvcm1hdE51bWJlckJ5U3RlcChkb21haW5bMV0sIHN0ZXAsICdjZWlsJyk7XG4gIH1cblxuICBjb25zdCB7aGlzdG9ncmFtLCBlbmxhcmdlZEhpc3RvZ3JhbX0gPSBnZXRIaXN0b2dyYW0oZG9tYWluLCBtYXBwZWRWYWx1ZSk7XG5cbiAgcmV0dXJuIHtkb21haW4sIHN0ZXAsIGhpc3RvZ3JhbSwgZW5sYXJnZWRIaXN0b2dyYW19O1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZSBzdGVwIHNpemUgZm9yIHJhbmdlIGFuZCB0aW1lcmFuZ2UgZmlsdGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROdW1lcmljU3RlcFNpemUoZGlmZjogbnVtYmVyKTogbnVtYmVyIHtcbiAgZGlmZiA9IE1hdGguYWJzKGRpZmYpO1xuXG4gIGlmIChkaWZmID4gMTAwKSB7XG4gICAgcmV0dXJuIDE7XG4gIH0gZWxzZSBpZiAoZGlmZiA+IDMpIHtcbiAgICByZXR1cm4gMC4wMTtcbiAgfSBlbHNlIGlmIChkaWZmID4gMSkge1xuICAgIHJldHVybiAwLjAwMTtcbiAgfVxuICAvLyBUcnkgdG8gZ2V0IGF0IGxlYXN0IDEwMDAgc3RlcHMgLSBhbmQga2VlcCB0aGUgc3RlcCBzaXplIGJlbG93IHRoYXQgb2ZcbiAgLy8gdGhlIChkaWZmID4gMSkgY2FzZS5cbiAgY29uc3QgeCA9IGRpZmYgLyAxMDAwO1xuICAvLyBGaW5kIHRoZSBleHBvbmVudCBhbmQgdHJ1bmNhdGUgdG8gMTAgdG8gdGhlIHBvd2VyIG9mIHRoYXQgZXhwb25lbnRcblxuICBjb25zdCBleHBvbmVudGlhbEZvcm0gPSB4LnRvRXhwb25lbnRpYWwoKTtcbiAgY29uc3QgZXhwb25lbnQgPSBwYXJzZUZsb2F0KGV4cG9uZW50aWFsRm9ybS5zcGxpdCgnZScpWzFdKTtcblxuICAvLyBHZXR0aW5nIHJlYWR5IGZvciBub2RlIDEyXG4gIC8vIHRoaXMgaXMgd2h5IHdlIG5lZWQgZGVjaW1hbC5qc1xuICAvLyBNYXRoLnBvdygxMCwgLTUpID0gMC4wMDAwMDk5OTk5OTk5OTk5OTk5OTlcbiAgLy8gdGhlIGFib3ZlIHJlc3VsdCBzaG93cyBpbiBicm93c2VyIGFuZCBub2RlIDEwXG4gIC8vIG5vZGUgMTIgYmVoYXZlcyBjb3JyZWN0bHlcbiAgcmV0dXJuIG5ldyBEZWNpbWFsKDEwKS5wb3coZXhwb25lbnQpLnRvTnVtYmVyKCk7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIHRpbWVzdGFtcCBkb21haW4gYW5kIHN1aXRhYmxlIHN0ZXBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRpbWVzdGFtcEZpZWxkRG9tYWluKFxuICBkYXRhQ29udGFpbmVyOiBEYXRhQ29udGFpbmVySW50ZXJmYWNlLFxuICB2YWx1ZUFjY2Vzc29yOiBkYXRhVmFsdWVBY2Nlc3NvclxuKTogVGltZVJhbmdlRmllbGREb21haW4ge1xuICAvLyB0byBhdm9pZCBjb252ZXJ0aW5nIHN0cmluZyBmb3JtYXQgdGltZSB0byBlcG9jaFxuICAvLyBldmVyeSB0aW1lIHdlIGNvbXBhcmUgd2Ugc3RvcmUgYSB2YWx1ZSBtYXBwZWQgdG8gaW50IGluIGZpbHRlciBkb21haW5cblxuICBjb25zdCBtYXBwZWRWYWx1ZSA9IGRhdGFDb250YWluZXIubWFwSW5kZXgodmFsdWVBY2Nlc3Nvcik7XG4gIGNvbnN0IGRvbWFpbiA9IFNjYWxlVXRpbHMuZ2V0TGluZWFyRG9tYWluKG1hcHBlZFZhbHVlKTtcbiAgY29uc3QgZGVmYXVsdFRpbWVGb3JtYXQgPSBnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIoZG9tYWluKTtcblxuICBsZXQgc3RlcCA9IDAuMDE7XG5cbiAgY29uc3QgZGlmZiA9IGRvbWFpblsxXSAtIGRvbWFpblswXTtcbiAgLy8gaW4gY2FzZSBlcXVhbCB0aW1lc3RhbXAgYWRkIDEgc2Vjb25kIHBhZGRpbmcgdG8gcHJldmVudCBicmVha1xuICBpZiAoIWRpZmYpIHtcbiAgICBkb21haW5bMV0gPSBkb21haW5bMF0gKyAxMDAwO1xuICB9XG4gIGNvbnN0IGVudHJ5ID0gVGltZXN0YW1wU3RlcE1hcC5maW5kKGYgPT4gZi5tYXggPj0gZGlmZik7XG4gIGlmIChlbnRyeSkge1xuICAgIHN0ZXAgPSBlbnRyeS5zdGVwO1xuICB9XG5cbiAgY29uc3Qge2hpc3RvZ3JhbSwgZW5sYXJnZWRIaXN0b2dyYW19ID0gZ2V0SGlzdG9ncmFtKGRvbWFpbiwgbWFwcGVkVmFsdWUpO1xuXG4gIHJldHVybiB7XG4gICAgZG9tYWluLFxuICAgIHN0ZXAsXG4gICAgbWFwcGVkVmFsdWUsXG4gICAgaGlzdG9ncmFtLFxuICAgIGVubGFyZ2VkSGlzdG9ncmFtLFxuICAgIGRlZmF1bHRUaW1lRm9ybWF0XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoaXN0b2dyYW1Db25zdHJ1Y3QoXG4gIGRvbWFpbjogW251bWJlciwgbnVtYmVyXSxcbiAgbWFwcGVkVmFsdWU6IChNaWxsaXNlY29uZCB8IG51bWJlcilbXSxcbiAgYmluczogbnVtYmVyXG4pOiBIaXN0b2dyYW1CaW5bXSB7XG4gIHJldHVybiBkM0hpc3RvZ3JhbSgpXG4gICAgLnRocmVzaG9sZHModGlja3MoZG9tYWluWzBdLCBkb21haW5bMV0sIGJpbnMpKVxuICAgIC5kb21haW4oZG9tYWluKShtYXBwZWRWYWx1ZSlcbiAgICAubWFwKGJpbiA9PiAoe1xuICAgICAgY291bnQ6IGJpbi5sZW5ndGgsXG4gICAgICBiaW4sXG4gICAgICB4MDogYmluLngwLFxuICAgICAgeDE6IGJpbi54MVxuICAgIH0pKTtcbn1cbi8qKlxuICogQ2FsY3VsYXRlIGhpc3RvZ3JhbSBmcm9tIGRvbWFpbiBhbmQgYXJyYXkgb2YgdmFsdWVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRIaXN0b2dyYW0oXG4gIGRvbWFpbjogW251bWJlciwgbnVtYmVyXSxcbiAgbWFwcGVkVmFsdWU6IChNaWxsaXNlY29uZCB8IG51bWJlcilbXVxuKToge2hpc3RvZ3JhbTogSGlzdG9ncmFtQmluW107IGVubGFyZ2VkSGlzdG9ncmFtOiBIaXN0b2dyYW1CaW5bXX0ge1xuICBjb25zdCBoaXN0b2dyYW0gPSBoaXN0b2dyYW1Db25zdHJ1Y3QoZG9tYWluLCBtYXBwZWRWYWx1ZSwgaGlzdG9ncmFtQmlucyk7XG4gIGNvbnN0IGVubGFyZ2VkSGlzdG9ncmFtID0gaGlzdG9ncmFtQ29uc3RydWN0KGRvbWFpbiwgbWFwcGVkVmFsdWUsIGVubGFyZ2VkSGlzdG9ncmFtQmlucyk7XG5cbiAgcmV0dXJuIHtoaXN0b2dyYW0sIGVubGFyZ2VkSGlzdG9ncmFtfTtcbn1cblxuLyoqXG4gKiByb3VuZCBudW1iZXIgYmFzZWQgb24gc3RlcFxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSB2YWxcbiAqIEBwYXJhbSB7TnVtYmVyfSBzdGVwXG4gKiBAcGFyYW0ge3N0cmluZ30gYm91bmRcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHJvdW5kZWQgbnVtYmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXROdW1iZXJCeVN0ZXAodmFsOiBudW1iZXIsIHN0ZXA6IG51bWJlciwgYm91bmQ6ICdmbG9vcicgfCAnY2VpbCcpOiBudW1iZXIge1xuICBpZiAoYm91bmQgPT09ICdmbG9vcicpIHtcbiAgICByZXR1cm4gTWF0aC5mbG9vcih2YWwgKiAoMSAvIHN0ZXApKSAvICgxIC8gc3RlcCk7XG4gIH1cblxuICByZXR1cm4gTWF0aC5jZWlsKHZhbCAqICgxIC8gc3RlcCkpIC8gKDEgLyBzdGVwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW5SYW5nZSh2YWw6IGFueSwgZG9tYWluOiBudW1iZXJbXSk6IGJvb2xlYW4ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoZG9tYWluKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB2YWwgPj0gZG9tYWluWzBdICYmIHZhbCA8PSBkb21haW5bMV07XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgcG9pbnQgaXMgd2l0aGluIHRoZSBwcm92aWRlZCBwb2x5Z29uXG4gKlxuICogQHBhcmFtIHBvaW50IGFzIGlucHV0IHNlYXJjaCBbbGF0LCBsbmddXG4gKiBAcGFyYW0gcG9seWdvbiBQb2ludHMgbXVzdCBiZSB3aXRoaW4gdGhlc2UgKE11bHRpKVBvbHlnb24ocylcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0luUG9seWdvbihwb2ludDogbnVtYmVyW10sIHBvbHlnb246IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gYm9vbGVhbldpdGhpbih0dXJmUG9pbnQocG9pbnQpLCBwb2x5Z29uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRUaW1lV2lkZ2V0VGl0bGVGb3JtYXR0ZXIoZG9tYWluOiBbbnVtYmVyLCBudW1iZXJdKTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmICghaXNWYWxpZFRpbWVEb21haW4oZG9tYWluKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgZGlmZiA9IGRvbWFpblsxXSAtIGRvbWFpblswXTtcblxuICAvLyBMb2NhbCBhd2FyZSBmb3JtYXRzXG4gIC8vIGh0dHBzOi8vbW9tZW50anMuY29tL2RvY3MvIy9wYXJzaW5nL3N0cmluZy1mb3JtYXRcbiAgcmV0dXJuIGRpZmYgPiBkdXJhdGlvblllYXIgPyAnTCcgOiBkaWZmID4gZHVyYXRpb25EYXkgPyAnTCBMVCcgOiAnTCBMVFMnO1xufVxuXG4vKipcbiAqIFNhbml0eSBjaGVjayBvbiBmaWx0ZXJzIHRvIHByZXBhcmUgZm9yIHNhdmVcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL2ZpbHRlci11dGlscycpLmlzRmlsdGVyVmFsaWRUb1NhdmV9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0ZpbHRlclZhbGlkVG9TYXZlKGZpbHRlcjogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgZmlsdGVyPy50eXBlICYmIEFycmF5LmlzQXJyYXkoZmlsdGVyPy5uYW1lKSAmJiAoZmlsdGVyPy5uYW1lLmxlbmd0aCB8fCBmaWx0ZXI/LmxheWVySWQubGVuZ3RoKVxuICApO1xufVxuXG4vKipcbiAqIFNhbml0eSBjaGVjayBvbiBmaWx0ZXJzIHRvIHByZXBhcmUgZm9yIHNhdmVcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KCcuL2ZpbHRlci11dGlscycpLmlzVmFsaWRGaWx0ZXJWYWx1ZX1cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRGaWx0ZXJWYWx1ZSh0eXBlOiBzdHJpbmcgfCBudWxsLCB2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gIGlmICghdHlwZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIEZJTFRFUl9UWVBFUy5zZWxlY3Q6XG4gICAgICByZXR1cm4gdmFsdWUgPT09IHRydWUgfHwgdmFsdWUgPT09IGZhbHNlO1xuXG4gICAgY2FzZSBGSUxURVJfVFlQRVMucmFuZ2U6XG4gICAgY2FzZSBGSUxURVJfVFlQRVMudGltZVJhbmdlOlxuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmV2ZXJ5KHYgPT4gdiAhPT0gbnVsbCAmJiAhaXNOYU4odikpO1xuXG4gICAgY2FzZSBGSUxURVJfVFlQRVMubXVsdGlTZWxlY3Q6XG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgQm9vbGVhbih2YWx1ZS5sZW5ndGgpO1xuXG4gICAgY2FzZSBGSUxURVJfVFlQRVMuaW5wdXQ6XG4gICAgICByZXR1cm4gQm9vbGVhbih2YWx1ZS5sZW5ndGgpO1xuXG4gICAgY2FzZSBGSUxURVJfVFlQRVMucG9seWdvbjpcbiAgICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gZ2V0KHZhbHVlLCBbJ2dlb21ldHJ5JywgJ2Nvb3JkaW5hdGVzJ10pO1xuICAgICAgcmV0dXJuIEJvb2xlYW4odmFsdWUgJiYgdmFsdWUuaWQgJiYgY29vcmRpbmF0ZXMpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2x1bW5GaWx0ZXJQcm9wczxLIGV4dGVuZHMgS2VwbGVyVGFibGVNb2RlbDxLLCBMPiwgTD4oXG4gIGZpbHRlcjogRmlsdGVyLFxuICBkYXRhc2V0OiBLXG4pOiB7bGluZUNoYXJ0OiBMaW5lQ2hhcnQ7IHlBeHM6IEZpZWxkfSB8IHt9IHtcbiAgaWYgKGZpbHRlci5wbG90VHlwZSA9PT0gUExPVF9UWVBFUy5oaXN0b2dyYW0gfHwgIWZpbHRlci55QXhpcykge1xuICAgIC8vIGhpc3RvZ3JhbSBzaG91bGQgYmUgY2FsY3VsYXRlZCB3aGVuIGNyZWF0ZSBmaWx0ZXJcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCB7bWFwcGVkVmFsdWUgPSBbXX0gPSBmaWx0ZXI7XG4gIGNvbnN0IHt5QXhpc30gPSBmaWx0ZXI7XG4gIGNvbnN0IGZpZWxkSWR4ID0gZGF0YXNldC5nZXRDb2x1bW5GaWVsZElkeCh5QXhpcy5uYW1lKTtcbiAgaWYgKGZpZWxkSWR4IDwgMCkge1xuICAgIENvbnNvbGUud2FybihgeUF4aXMgJHt5QXhpcy5uYW1lfSBkb2VzIG5vdCBleGlzdCBpbiBkYXRhc2V0YCk7XG4gICAgcmV0dXJuIHtsaW5lQ2hhcnQ6IHt9LCB5QXhpc307XG4gIH1cblxuICAvLyByZXR1cm4gbGluZUNoYXJ0XG4gIGNvbnN0IHNlcmllcyA9IGRhdGFzZXQuZGF0YUNvbnRhaW5lclxuICAgIC5tYXAoXG4gICAgICAocm93LCByb3dJbmRleCkgPT4gKHtcbiAgICAgICAgeDogbWFwcGVkVmFsdWVbcm93SW5kZXhdLFxuICAgICAgICB5OiByb3cudmFsdWVBdChmaWVsZElkeClcbiAgICAgIH0pLFxuICAgICAgdHJ1ZVxuICAgIClcbiAgICAuZmlsdGVyKCh7eCwgeX0pID0+IE51bWJlci5pc0Zpbml0ZSh4KSAmJiBOdW1iZXIuaXNGaW5pdGUoeSkpXG4gICAgLnNvcnQoKGEsIGIpID0+IGFzY2VuZGluZyhhLngsIGIueCkpO1xuXG4gIGNvbnN0IHlEb21haW4gPSBleHRlbnQoc2VyaWVzLCBkID0+IGQueSk7XG4gIGNvbnN0IHhEb21haW4gPSBbc2VyaWVzWzBdLngsIHNlcmllc1tzZXJpZXMubGVuZ3RoIC0gMV0ueF07XG5cbiAgcmV0dXJuIHtsaW5lQ2hhcnQ6IHtzZXJpZXMsIHlEb21haW4sIHhEb21haW59LCB5QXhpc307XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0RmlsdGVyUGxvdFR5cGUoZmlsdGVyOiBGaWx0ZXIpOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgZmlsdGVyUGxvdFR5cGVzOiB0eXBlb2YgU3VwcG9ydGVkUGxvdFR5cGVba2V5b2YgdHlwZW9mIFN1cHBvcnRlZFBsb3RUeXBlXSB8IG51bGwgPVxuICAgIGZpbHRlci50eXBlICYmIFN1cHBvcnRlZFBsb3RUeXBlW2ZpbHRlci50eXBlXTtcbiAgaWYgKCFmaWx0ZXJQbG90VHlwZXMpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICghZmlsdGVyLnlBeGlzKSB7XG4gICAgcmV0dXJuIGZpbHRlclBsb3RUeXBlcy5kZWZhdWx0O1xuICB9XG5cbiAgcmV0dXJuIGZpbHRlclBsb3RUeXBlc1tmaWx0ZXIueUF4aXMudHlwZV0gfHwgbnVsbDtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIGRhdGFzZXRJZHMgbGlzdCBvZiBkYXRhc2V0IGlkcyB0byBiZSBmaWx0ZXJlZFxuICogQHBhcmFtIGRhdGFzZXRzIGFsbCBkYXRhc2V0c1xuICogQHBhcmFtIGZpbHRlcnMgYWxsIGZpbHRlcnMgdG8gYmUgYXBwbGllZCB0byBkYXRhc2V0c1xuICogQHJldHVybiBkYXRhc2V0cyAtIG5ldyB1cGRhdGVkIGRhdGFzZXRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUZpbHRlcnNUb0RhdGFzZXRzPFxuICBLIGV4dGVuZHMgS2VwbGVyVGFibGVNb2RlbDxLLCBMPixcbiAgTCBleHRlbmRzIHtjb25maWc6IHtkYXRhSWQ6IHN0cmluZyB8IG51bGx9fVxuPihcbiAgZGF0YXNldElkczogc3RyaW5nW10sXG4gIGRhdGFzZXRzOiB7W2lkOiBzdHJpbmddOiBLfSxcbiAgZmlsdGVyczogRmlsdGVyW10sXG4gIGxheWVycz86IExbXVxuKToge1tpZDogc3RyaW5nXTogS30ge1xuICBjb25zdCBkYXRhSWRzID0gdG9BcnJheShkYXRhc2V0SWRzKTtcbiAgcmV0dXJuIGRhdGFJZHMucmVkdWNlKChhY2MsIGRhdGFJZCkgPT4ge1xuICAgIGNvbnN0IGxheWVyc1RvRmlsdGVyID0gKGxheWVycyB8fCBbXSkuZmlsdGVyKGwgPT4gbC5jb25maWcuZGF0YUlkID09PSBkYXRhSWQpO1xuICAgIGNvbnN0IGFwcGxpZWRGaWx0ZXJzID0gZmlsdGVycy5maWx0ZXIoZCA9PiBzaG91bGRBcHBseUZpbHRlcihkLCBkYXRhSWQpKTtcbiAgICBjb25zdCB0YWJsZSA9IGRhdGFzZXRzW2RhdGFJZF07XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uYWNjLFxuICAgICAgW2RhdGFJZF06IHRhYmxlLmZpbHRlclRhYmxlKGFwcGxpZWRGaWx0ZXJzLCBsYXllcnNUb0ZpbHRlciwge30pXG4gICAgfTtcbiAgfSwgZGF0YXNldHMpO1xufVxuXG4vKipcbiAqIEFwcGxpZXMgYSBuZXcgZmllbGQgbmFtZSB2YWx1ZSB0byBmaWVsdGVyIGFuZCB1cGRhdGUgYm90aCBmaWx0ZXIgYW5kIGRhdGFzZXRcbiAqIEBwYXJhbSBmaWx0ZXIgLSB0byBiZSBhcHBsaWVkIHRoZSBuZXcgZmllbGQgbmFtZSBvblxuICogQHBhcmFtIGRhdGFzZXQgLSBkYXRhc2V0IHRoZSBmaWVsZCBiZWxvbmdzIHRvXG4gKiBAcGFyYW0gZmllbGROYW1lIC0gZmllbGQubmFtZVxuICogQHBhcmFtIGZpbHRlckRhdGFzZXRJbmRleCAtIGZpZWxkLm5hbWVcbiAqIEBwYXJhbSBvcHRpb25cbiAqIEByZXR1cm4gLSB7ZmlsdGVyLCBkYXRhc2V0c31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5RmlsdGVyRmllbGROYW1lPEsgZXh0ZW5kcyBLZXBsZXJUYWJsZU1vZGVsPEssIEw+LCBMPihcbiAgZmlsdGVyOiBGaWx0ZXIsXG4gIGRhdGFzZXQ6IEssXG4gIGZpZWxkTmFtZTogc3RyaW5nLFxuICBmaWx0ZXJEYXRhc2V0SW5kZXggPSAwLFxuICBvcHRpb24/OiB7bWVyZ2VEb21haW46IGJvb2xlYW59XG4pOiB7XG4gIGZpbHRlcjogRmlsdGVyIHwgbnVsbDtcbiAgZGF0YXNldDogSztcbn0ge1xuICAvLyB1c2luZyBmaWx0ZXJEYXRhc2V0SW5kZXggd2UgY2FuIGZpbHRlciBvbmx5IHRoZSBzcGVjaWZpZWQgZGF0YXNldFxuICBjb25zdCBtZXJnZURvbWFpbiA9IG9wdGlvbiAmJiBvcHRpb24uaGFzT3duUHJvcGVydHkoJ21lcmdlRG9tYWluJykgPyBvcHRpb24ubWVyZ2VEb21haW4gOiBmYWxzZTtcblxuICBjb25zdCBmaWVsZEluZGV4ID0gZGF0YXNldC5nZXRDb2x1bW5GaWVsZElkeChmaWVsZE5hbWUpO1xuICAvLyBpZiBubyBmaWVsZCB3aXRoIHNhbWUgbmFtZSBpcyBmb3VuZCwgbW92ZSB0byB0aGUgbmV4dCBkYXRhc2V0c1xuICBpZiAoZmllbGRJbmRleCA9PT0gLTEpIHtcbiAgICAvLyB0aHJvdyBuZXcgRXJyb3IoYGZpZWxkSW5kZXggbm90IGZvdW5kLiBEYXRhc2V0IG11c3QgY29udGFpbiBhIHByb3BlcnR5IHdpdGggbmFtZTogJHtmaWVsZE5hbWV9YCk7XG4gICAgcmV0dXJuIHtmaWx0ZXI6IG51bGwsIGRhdGFzZXR9O1xuICB9XG5cbiAgLy8gVE9ETzogdmFsaWRhdGUgZmllbGQgdHlwZVxuICBjb25zdCBmaWx0ZXJQcm9wcyA9IGRhdGFzZXQuZ2V0Q29sdW1uRmlsdGVyUHJvcHMoZmllbGROYW1lKTtcblxuICBjb25zdCBuZXdGaWx0ZXIgPSB7XG4gICAgLi4uKG1lcmdlRG9tYWluID8gbWVyZ2VGaWx0ZXJEb21haW5TdGVwKGZpbHRlciwgZmlsdGVyUHJvcHMpIDogey4uLmZpbHRlciwgLi4uZmlsdGVyUHJvcHN9KSxcbiAgICBuYW1lOiBPYmplY3QuYXNzaWduKFsuLi50b0FycmF5KGZpbHRlci5uYW1lKV0sIHtbZmlsdGVyRGF0YXNldEluZGV4XTogZmllbGROYW1lfSksXG4gICAgZmllbGRJZHg6IE9iamVjdC5hc3NpZ24oWy4uLnRvQXJyYXkoZmlsdGVyLmZpZWxkSWR4KV0sIHtcbiAgICAgIFtmaWx0ZXJEYXRhc2V0SW5kZXhdOiBmaWVsZEluZGV4XG4gICAgfSksXG4gICAgLy8gVE9ETywgc2luY2Ugd2UgYWxsb3cgdG8gYWRkIG11bHRpcGxlIGZpZWxkcyB0byBhIGZpbHRlciB3ZSBjYW4gbm8gbG9uZ2VyIGZyZWV6ZSB0aGUgZmlsdGVyXG4gICAgZnJlZXplOiB0cnVlXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBmaWx0ZXI6IG5ld0ZpbHRlcixcbiAgICBkYXRhc2V0XG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2Ugb25lIGZpbHRlciB3aXRoIG90aGVyIGZpbHRlciBwcm9wIGRvbWFpblxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VGaWx0ZXJEb21haW5TdGVwKFxuICBmaWx0ZXI6IEZpbHRlcixcbiAgZmlsdGVyUHJvcHM/OiBQYXJ0aWFsPEZpbHRlcj5cbik6IChGaWx0ZXIgJiB7c3RlcD86IG51bWJlcn0pIHwgbnVsbCB7XG4gIGlmICghZmlsdGVyKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoIWZpbHRlclByb3BzKSB7XG4gICAgcmV0dXJuIGZpbHRlcjtcbiAgfVxuXG4gIGlmICgoZmlsdGVyLmZpZWxkVHlwZSAmJiBmaWx0ZXIuZmllbGRUeXBlICE9PSBmaWx0ZXJQcm9wcy5maWVsZFR5cGUpIHx8ICFmaWx0ZXJQcm9wcy5kb21haW4pIHtcbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgY29uc3QgY29tYmluZWREb21haW4gPSAhZmlsdGVyLmRvbWFpblxuICAgID8gZmlsdGVyUHJvcHMuZG9tYWluXG4gICAgOiBbLi4uKGZpbHRlci5kb21haW4gfHwgW10pLCAuLi4oZmlsdGVyUHJvcHMuZG9tYWluIHx8IFtdKV0uc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuXG4gIGNvbnN0IG5ld0ZpbHRlciA9IHtcbiAgICAuLi5maWx0ZXIsXG4gICAgLi4uZmlsdGVyUHJvcHMsXG4gICAgZG9tYWluOiBbY29tYmluZWREb21haW5bMF0sIGNvbWJpbmVkRG9tYWluW2NvbWJpbmVkRG9tYWluLmxlbmd0aCAtIDFdXVxuICB9O1xuXG4gIHN3aXRjaCAoZmlsdGVyUHJvcHMuZmllbGRUeXBlKSB7XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMuc3RyaW5nOlxuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmRhdGU6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5uZXdGaWx0ZXIsXG4gICAgICAgIGRvbWFpbjogdW5pcXVlKGNvbWJpbmVkRG9tYWluKS5zb3J0KClcbiAgICAgIH07XG5cbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy50aW1lc3RhbXA6XG4gICAgICBjb25zdCBzdGVwID1cbiAgICAgICAgKGZpbHRlciBhcyBUaW1lUmFuZ2VGaWx0ZXIpLnN0ZXAgPCAoZmlsdGVyUHJvcHMgYXMgVGltZVJhbmdlRmllbGREb21haW4pLnN0ZXBcbiAgICAgICAgICA/IChmaWx0ZXIgYXMgVGltZVJhbmdlRmlsdGVyKS5zdGVwXG4gICAgICAgICAgOiAoZmlsdGVyUHJvcHMgYXMgVGltZVJhbmdlRmllbGREb21haW4pLnN0ZXA7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm5ld0ZpbHRlcixcbiAgICAgICAgc3RlcFxuICAgICAgfTtcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5yZWFsOlxuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmludGVnZXI6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBuZXdGaWx0ZXI7XG4gIH1cbn1cbi8qIGVzbGludC1lbmFibGUgY29tcGxleGl0eSAqL1xuXG4vKipcbiAqIEdlbmVyYXRlcyBwb2x5Z29uIGZpbHRlclxuICovXG5leHBvcnQgY29uc3QgZmVhdHVyZVRvRmlsdGVyVmFsdWUgPSAoXG4gIGZlYXR1cmU6IEZlYXR1cmUsXG4gIGZpbHRlcklkOiBzdHJpbmcsXG4gIHByb3BlcnRpZXM/OiB7fVxuKTogRmVhdHVyZVZhbHVlID0+ICh7XG4gIC4uLmZlYXR1cmUsXG4gIGlkOiBmZWF0dXJlLmlkLFxuICBwcm9wZXJ0aWVzOiB7XG4gICAgLi4uZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgIC4uLnByb3BlcnRpZXMsXG4gICAgZmlsdGVySWRcbiAgfVxufSk7XG5cbmV4cG9ydCBjb25zdCBnZXRGaWx0ZXJJZEluRmVhdHVyZSA9IChmOiBGZWF0dXJlVmFsdWUpOiBzdHJpbmcgPT4gZ2V0KGYsIFsncHJvcGVydGllcycsICdmaWx0ZXJJZCddKTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgcG9seWdvbiBmaWx0ZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlUG9seWdvbkZpbHRlcjxcbiAgTCBleHRlbmRzIHtjb25maWc6IHtkYXRhSWQ6IHN0cmluZyB8IG51bGw7IGxhYmVsOiBzdHJpbmd9OyBpZDogc3RyaW5nfVxuPihsYXllcnM6IExbXSwgZmVhdHVyZTogRmVhdHVyZSk6IFBvbHlnb25GaWx0ZXIge1xuICBjb25zdCBkYXRhSWQgPSBsYXllcnMubWFwKGwgPT4gbC5jb25maWcuZGF0YUlkKS5maWx0ZXIobm90TnVsbG9yVW5kZWZpbmVkKTtcbiAgY29uc3QgbGF5ZXJJZCA9IGxheWVycy5tYXAobCA9PiBsLmlkKTtcbiAgY29uc3QgbmFtZSA9IGxheWVycy5tYXAobCA9PiBsLmNvbmZpZy5sYWJlbCk7XG4gIGNvbnN0IGZpbHRlciA9IGdldERlZmF1bHRGaWx0ZXIoe2RhdGFJZH0pO1xuICByZXR1cm4ge1xuICAgIC4uLmZpbHRlcixcbiAgICBmaXhlZERvbWFpbjogdHJ1ZSxcbiAgICB0eXBlOiBGSUxURVJfVFlQRVMucG9seWdvbixcbiAgICBuYW1lLFxuICAgIGxheWVySWQsXG4gICAgdmFsdWU6IGZlYXR1cmVUb0ZpbHRlclZhbHVlKGZlYXR1cmUsIGZpbHRlci5pZCwge2lzVmlzaWJsZTogdHJ1ZX0pXG4gIH07XG59XG5cbi8qKlxuICogUnVuIGZpbHRlciBlbnRpcmVseSBvbiBDUFVcbiAqL1xuaW50ZXJmYWNlIFN0YXRlVHlwZTxLIGV4dGVuZHMgS2VwbGVyVGFibGVNb2RlbDxLLCBMPiwgTD4ge1xuICBsYXllcnM6IExbXTtcbiAgZmlsdGVyczogRmlsdGVyW107XG4gIGRhdGFzZXRzOiB7W2lkOiBzdHJpbmddOiBLfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckRhdGFzZXRDUFU8VCBleHRlbmRzIFN0YXRlVHlwZTxLLCBMPiwgSyBleHRlbmRzIEtlcGxlclRhYmxlTW9kZWw8SywgTD4sIEw+KFxuICBzdGF0ZTogVCxcbiAgZGF0YUlkOiBzdHJpbmdcbik6IFQge1xuICBjb25zdCBkYXRhc2V0RmlsdGVycyA9IHN0YXRlLmZpbHRlcnMuZmlsdGVyKGYgPT4gZi5kYXRhSWQuaW5jbHVkZXMoZGF0YUlkKSk7XG4gIGNvbnN0IGRhdGFzZXQgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdO1xuXG4gIGlmICghZGF0YXNldCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGNwdUZpbHRlcmVkRGF0YXNldCA9IGRhdGFzZXQuZmlsdGVyVGFibGVDUFUoZGF0YXNldEZpbHRlcnMsIHN0YXRlLmxheWVycyk7XG5cbiAgcmV0dXJuIHNldChbJ2RhdGFzZXRzJywgZGF0YUlkXSwgY3B1RmlsdGVyZWREYXRhc2V0LCBzdGF0ZSk7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgcGFyc2VkIGZpbHRlcnMgd2l0aCBkYXRhc2V0cyBhbmQgYWRkIGZpbHRlclByb3BzIHRvIGZpZWxkXG4gKi9cbnR5cGUgTWluVmlzU3RhdGVGb3JGaWx0ZXIgPSBQaWNrPFZpc1N0YXRlLCAnbGF5ZXJzJyB8ICdkYXRhc2V0cycgfCAnaXNNZXJnaW5nRGF0YXNldHMnPjtcbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0czxcbiAgUyBleHRlbmRzIE1pblZpc1N0YXRlRm9yRmlsdGVyLFxuICBLIGV4dGVuZHMgS2VwbGVyVGFibGVNb2RlbDxLLCBMPixcbiAgTCBleHRlbmRzIHtjb25maWc6IHtkYXRhSWQ6IHN0cmluZyB8IG51bGw7IGxhYmVsOiBzdHJpbmd9OyBpZDogc3RyaW5nfVxuPihcbiAgc3RhdGU6IFMsXG4gIGZpbHRlcnNUb1ZhbGlkYXRlOiBQYXJzZWRGaWx0ZXJbXSA9IFtdXG4pOiB7XG4gIHZhbGlkYXRlZDogRmlsdGVyW107XG4gIGZhaWxlZDogRmlsdGVyW107XG4gIHVwZGF0ZWREYXRhc2V0czogU1snZGF0YXNldHMnXTtcbn0ge1xuICAvLyBUT0RPIEJldHRlciBUeXBpbmdzIGhlcmVcbiAgY29uc3QgdmFsaWRhdGVkOiBhbnlbXSA9IFtdO1xuICBjb25zdCBmYWlsZWQ6IGFueVtdID0gW107XG4gIGNvbnN0IHtkYXRhc2V0c30gPSBzdGF0ZTtcbiAgbGV0IHVwZGF0ZWREYXRhc2V0cyA9IGRhdGFzZXRzO1xuXG4gIC8vIG1lcmdlIGZpbHRlcnNcbiAgZmlsdGVyc1RvVmFsaWRhdGUuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgIC8vIHdlIGNhbiBvbmx5IGxvb2sgZm9yIGRhdGFzZXRzIGRlZmluZSBpbiB0aGUgZmlsdGVyIGRhdGFJZFxuICAgIGNvbnN0IGRhdGFzZXRJZHMgPSB0b0FycmF5KGZpbHRlci5kYXRhSWQpO1xuXG4gICAgLy8gd2UgY2FuIG1lcmdlIGEgZmlsdGVyIG9ubHkgaWYgYWxsIGRhdGFzZXRzIGluIGZpbHRlci5kYXRhSWQgYXJlIGxvYWRlZFxuICAgIGlmIChkYXRhc2V0SWRzLmV2ZXJ5KGQgPT4gZGF0YXNldHNbZF0gJiYgIXN0YXRlLmlzTWVyZ2luZ0RhdGFzZXRzW2RdKSkge1xuICAgICAgLy8gYWxsIGRhdGFzZXRJZHMgaW4gZmlsdGVyIG11c3QgYmUgcHJlc2VudCB0aGUgc3RhdGUgZGF0YXNldHNcbiAgICAgIGNvbnN0IHtmaWx0ZXI6IHZhbGlkYXRlZEZpbHRlciwgYXBwbHlUb0RhdGFzZXRzLCBhdWdtZW50ZWREYXRhc2V0c30gPSBkYXRhc2V0SWRzLnJlZHVjZTx7XG4gICAgICAgIGZpbHRlcjogRmlsdGVyIHwgbnVsbDtcbiAgICAgICAgYXBwbHlUb0RhdGFzZXRzOiBzdHJpbmdbXTtcbiAgICAgICAgYXVnbWVudGVkRGF0YXNldHM6IHtbZGF0YXNldElkOiBzdHJpbmddOiBhbnl9O1xuICAgICAgfT4oXG4gICAgICAgIChhY2MsIGRhdGFzZXRJZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRhdGFzZXQgPSB1cGRhdGVkRGF0YXNldHNbZGF0YXNldElkXTtcbiAgICAgICAgICBjb25zdCBsYXllcnMgPSBzdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gbC5jb25maWcuZGF0YUlkID09PSBkYXRhc2V0LmlkKTtcbiAgICAgICAgICBjb25zdCB7ZmlsdGVyOiB1cGRhdGVkRmlsdGVyLCBkYXRhc2V0OiB1cGRhdGVkRGF0YXNldH0gPSB2YWxpZGF0ZUZpbHRlcldpdGhEYXRhKFxuICAgICAgICAgICAgYWNjLmF1Z21lbnRlZERhdGFzZXRzW2RhdGFzZXRJZF0gfHwgZGF0YXNldCxcbiAgICAgICAgICAgIGZpbHRlcixcbiAgICAgICAgICAgIGxheWVyc1xuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAodXBkYXRlZEZpbHRlcikge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uYWNjLFxuICAgICAgICAgICAgICAvLyBtZXJnZSBmaWx0ZXIgcHJvcHNcbiAgICAgICAgICAgICAgZmlsdGVyOiBhY2MuZmlsdGVyXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmFjYy5maWx0ZXIsXG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE8gY2hlY2s6IGNoYW5nZWQgZnJvbSBhY2MgdG8gYWNjLmZpbHRlciB0byBmaXggdHlwZXNcbiAgICAgICAgICAgICAgICAgICAgLi4ubWVyZ2VGaWx0ZXJEb21haW5TdGVwKGFjYy5maWx0ZXIsIHVwZGF0ZWRGaWx0ZXIpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB1cGRhdGVkRmlsdGVyLFxuXG4gICAgICAgICAgICAgIGFwcGx5VG9EYXRhc2V0czogWy4uLmFjYy5hcHBseVRvRGF0YXNldHMsIGRhdGFzZXRJZF0sXG5cbiAgICAgICAgICAgICAgYXVnbWVudGVkRGF0YXNldHM6IHtcbiAgICAgICAgICAgICAgICAuLi5hY2MuYXVnbWVudGVkRGF0YXNldHMsXG4gICAgICAgICAgICAgICAgW2RhdGFzZXRJZF06IHVwZGF0ZWREYXRhc2V0XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGZpbHRlcjogbnVsbCxcbiAgICAgICAgICBhcHBseVRvRGF0YXNldHM6IFtdLFxuICAgICAgICAgIGF1Z21lbnRlZERhdGFzZXRzOiB7fVxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICBpZiAodmFsaWRhdGVkRmlsdGVyICYmIGlzRXF1YWwoZGF0YXNldElkcywgYXBwbHlUb0RhdGFzZXRzKSkge1xuICAgICAgICB2YWxpZGF0ZWQucHVzaCh2YWxpZGF0ZWRGaWx0ZXIpO1xuICAgICAgICB1cGRhdGVkRGF0YXNldHMgPSB7XG4gICAgICAgICAgLi4udXBkYXRlZERhdGFzZXRzLFxuICAgICAgICAgIC4uLmF1Z21lbnRlZERhdGFzZXRzXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmYWlsZWQucHVzaChmaWx0ZXIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmYWlsZWQucHVzaChmaWx0ZXIpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHt2YWxpZGF0ZWQsIGZhaWxlZCwgdXBkYXRlZERhdGFzZXRzfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbHRlclBsb3Q8SyBleHRlbmRzIEtlcGxlclRhYmxlTW9kZWw8SywgTD4sIEw+KFxuICBmaWx0ZXI6IEZpbHRlcixcbiAgZGF0YXNldDogS1xuKToge2xpbmVDaGFydDogTGluZUNoYXJ0OyB5QXhzOiBGaWVsZH0gfCB7fSB7XG4gIGlmIChmaWx0ZXIucGxvdFR5cGUgPT09IFBMT1RfVFlQRVMuaGlzdG9ncmFtIHx8ICFmaWx0ZXIueUF4aXMpIHtcbiAgICAvLyBoaXN0b2dyYW0gc2hvdWxkIGJlIGNhbGN1bGF0ZWQgd2hlbiBjcmVhdGUgZmlsdGVyXG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgY29uc3Qge21hcHBlZFZhbHVlID0gW119ID0gZmlsdGVyO1xuICBjb25zdCB7eUF4aXN9ID0gZmlsdGVyO1xuICBjb25zdCBmaWVsZElkeCA9IGRhdGFzZXQuZ2V0Q29sdW1uRmllbGRJZHgoeUF4aXMubmFtZSk7XG4gIGlmIChmaWVsZElkeCA8IDApIHtcbiAgICBDb25zb2xlLndhcm4oYHlBeGlzICR7eUF4aXMubmFtZX0gZG9lcyBub3QgZXhpc3QgaW4gZGF0YXNldGApO1xuICAgIHJldHVybiB7bGluZUNoYXJ0OiB7fSwgeUF4aXN9O1xuICB9XG5cbiAgLy8gcmV0dXJuIGxpbmVDaGFydFxuICBjb25zdCBzZXJpZXMgPSBkYXRhc2V0LmRhdGFDb250YWluZXJcbiAgICAubWFwKFxuICAgICAgKHJvdywgcm93SW5kZXgpID0+ICh7XG4gICAgICAgIHg6IG1hcHBlZFZhbHVlW3Jvd0luZGV4XSxcbiAgICAgICAgeTogcm93LnZhbHVlQXQoZmllbGRJZHgpXG4gICAgICB9KSxcbiAgICAgIHRydWVcbiAgICApXG4gICAgLmZpbHRlcigoe3gsIHl9KSA9PiBOdW1iZXIuaXNGaW5pdGUoeCkgJiYgTnVtYmVyLmlzRmluaXRlKHkpKVxuICAgIC5zb3J0KChhLCBiKSA9PiBhc2NlbmRpbmcoYS54LCBiLngpKTtcblxuICBjb25zdCB5RG9tYWluID0gZXh0ZW50KHNlcmllcywgZCA9PiBkLnkpO1xuICBjb25zdCB4RG9tYWluID0gW3Nlcmllc1swXS54LCBzZXJpZXNbc2VyaWVzLmxlbmd0aCAtIDFdLnhdO1xuXG4gIHJldHVybiB7bGluZUNoYXJ0OiB7c2VyaWVzLCB5RG9tYWluLCB4RG9tYWlufSwgeUF4aXN9O1xufVxuXG4vKipcbiAqIFJldHJpZXZlIGludGVydmFsIGJpbnMgZm9yIHRpbWUgZmlsdGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnRlcnZhbEJpbnMoZmlsdGVyOiBUaW1lUmFuZ2VGaWx0ZXIpIHtcbiAgY29uc3Qge2JpbnN9ID0gZmlsdGVyO1xuICBjb25zdCBpbnRlcnZhbCA9IGZpbHRlci5wbG90VHlwZT8uaW50ZXJ2YWw7XG4gIGlmICghaW50ZXJ2YWwgfHwgIWJpbnMgfHwgT2JqZWN0LmtleXMoYmlucykubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgdmFsdWVzID0gT2JqZWN0LnZhbHVlcyhiaW5zKTtcbiAgcmV0dXJuIHZhbHVlc1swXSA/IHZhbHVlc1swXVtpbnRlcnZhbF0gOiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFRpbWVEb21haW4oZG9tYWluKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGRvbWFpbikgJiYgZG9tYWluLmV2ZXJ5KE51bWJlci5pc0Zpbml0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUaW1lV2lkZ2V0SGludEZvcm1hdHRlcihkb21haW46IFtudW1iZXIsIG51bWJlcl0pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIWlzVmFsaWRUaW1lRG9tYWluKGRvbWFpbikpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgZGlmZiA9IGRvbWFpblsxXSAtIGRvbWFpblswXTtcbiAgcmV0dXJuIGRpZmYgPiBkdXJhdGlvbldlZWtcbiAgICA/ICdMJ1xuICAgIDogZGlmZiA+IGR1cmF0aW9uRGF5XG4gICAgPyAnTCBMVCdcbiAgICA6IGRpZmYgPiBkdXJhdGlvbkhvdXJcbiAgICA/ICdMVCdcbiAgICA6ICdMVFMnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTaWRlRmlsdGVyKGZpbHRlcjogRmlsdGVyKTogYm9vbGVhbiB7XG4gIHJldHVybiBmaWx0ZXIudmlldyA9PT0gRklMVEVSX1ZJRVdfVFlQRVMuc2lkZTtcbn1cbiJdfQ==