@kepler.gl/reducers 3.3.0-alpha.15 → 3.3.0-alpha.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -20,12 +20,14 @@ import pick from 'es-toolkit/compat/pick';
20
20
  import flattenDeep from 'es-toolkit/compat/flattenDeep';
21
21
  import deepmerge from 'deepmerge';
22
22
  import { arrayInsert, combineSplitMapsByIndex, getInitialMapLayersForSplitMap, applyFiltersToDatasets, validateFiltersUpdateDatasets, findById, aggregate, isPlainObject } from '@kepler.gl/utils';
23
+ import { migrateLegacyScenegraphVisConfig } from '@kepler.gl/layers';
23
24
  import { createEffect } from '@kepler.gl/effects';
24
25
  import { notNullorUndefined } from '@kepler.gl/common-utils';
25
26
  import { AGGREGATION_TYPES, LAYER_BLENDINGS, OVERLAY_BLENDINGS, isAnnotationKind, INITIAL_ANNOTATION_LINE_COLOR, INITIAL_ANNOTATION_LINE_WIDTH } from '@kepler.gl/constants';
26
27
  import { CURRENT_VERSION } from '@kepler.gl/schemas';
27
28
  import { assignGpuChannels, resetFilterGpuMode } from '@kepler.gl/table';
28
29
  import { getLayerOrderFromLayers } from './layer-utils';
30
+ import { combineZoomOpacityControllers } from './interaction-utils';
29
31
 
30
32
  /**
31
33
  * Merge loaded filters with current state, if no fields or data are loaded
@@ -448,7 +450,7 @@ export function mergeInteractions(state, interactionToBeMerged) {
448
450
  if (!state.interactionConfig[key]) {
449
451
  return;
450
452
  }
451
- var currentConfig = key === 'tooltip' || key === 'brush' || key === 'geocoder' ? state.interactionConfig[key].config : null;
453
+ var currentConfig = key === 'tooltip' || key === 'brush' || key === 'geocoder' || key === 'legend' || key === 'zoomOpacity' ? state.interactionConfig[key].config : null;
452
454
  var _ref2 = interactionToBeMerged[key] || {},
453
455
  enabled = _ref2.enabled,
454
456
  configSaved = _objectWithoutProperties(_ref2, _excluded);
@@ -485,6 +487,24 @@ export function mergeInteractions(state, interactionToBeMerged) {
485
487
  }
486
488
  function combineInteractionConfigs(configs) {
487
489
  var combined = _objectSpread({}, configs[0]);
490
+ // `legend` is optional on older saved maps; seed it so a later config is not dropped.
491
+ if (!combined.legend) {
492
+ var withLegend = configs.find(function (c) {
493
+ return c.legend;
494
+ });
495
+ if (withLegend !== null && withLegend !== void 0 && withLegend.legend) {
496
+ combined.legend = withLegend.legend;
497
+ }
498
+ }
499
+ // Same for fade-on-zoom: an older config in front must not drop controllers from a later one.
500
+ if (!combined.zoomOpacity) {
501
+ var withZoomOpacity = configs.find(function (c) {
502
+ return c.zoomOpacity;
503
+ });
504
+ if (withZoomOpacity !== null && withZoomOpacity !== void 0 && withZoomOpacity.zoomOpacity) {
505
+ combined.zoomOpacity = withZoomOpacity.zoomOpacity;
506
+ }
507
+ }
488
508
  // handle each property key of an `InteractionConfig`, e.g. tooltip, geocoder, brush, coordinate
489
509
  // by combining values for each among all passed in configs
490
510
  var _loop2 = function _loop2(key) {
@@ -552,6 +572,14 @@ function combineInteractionConfigs(configs) {
552
572
  return p === null || p === void 0 ? void 0 : p.limitSearch;
553
573
  });
554
574
  }
575
+ if (key === 'legend') {
576
+ combined[key].hideInvisibleLayers = toBeCombinedProps.some(function (p) {
577
+ return p === null || p === void 0 ? void 0 : p.hideInvisibleLayers;
578
+ });
579
+ }
580
+ if (key === 'zoomOpacity' && combined.zoomOpacity) {
581
+ combined.zoomOpacity.controllers = combineZoomOpacityControllers(toBeCombinedProps);
582
+ }
555
583
  };
556
584
  for (var key in combined) {
557
585
  _loop2(key);
@@ -673,7 +701,8 @@ export function mergeCharts(state, charts, fromConfig) {
673
701
  // Older configs omit `pinned`; keep charts visible like the legend.
674
702
  pinned: chart.pinned !== false,
675
703
  display: _objectSpread(_objectSpread({}, chart.display), {}, {
676
- isConfigActive: false
704
+ isConfigActive: false,
705
+ isJsonEditorActive: false
677
706
  })
678
707
  }) : chart;
679
708
  if (normalized.dataId && (!state.datasets[normalized.dataId] || state.isMergingDatasets[normalized.dataId])) {
@@ -1124,6 +1153,7 @@ export function validateLayerWithData(dataset, savedLayer, layerClasses) {
1124
1153
  color: savedLayer.config.color,
1125
1154
  isVisible: savedLayer.config.isVisible,
1126
1155
  hidden: savedLayer.config.hidden,
1156
+ isIncludedInLegend: savedLayer.config.isIncludedInLegend,
1127
1157
  columnMode: savedLayer.config.columnMode,
1128
1158
  highlightColor: savedLayer.config.highlightColor
1129
1159
  });
@@ -1141,7 +1171,8 @@ export function validateLayerWithData(dataset, savedLayer, layerClasses) {
1141
1171
  var textLabel = savedLayer.config.textLabel && newLayer.config.textLabel ? validateSavedTextLabel(fields, newLayer.config.textLabel, savedLayer.config.textLabel, options) : newLayer.config.textLabel;
1142
1172
 
1143
1173
  // copy visConfig over to emptyLayer to make sure it has all the props
1144
- var copiedVisConfig = newLayer.copyLayerConfig(newLayer.config.visConfig, savedLayer.config.visConfig || {}, {
1174
+ var savedVisConfig = savedLayer.type === '3D' ? migrateLegacyScenegraphVisConfig(savedLayer.config.visConfig) : savedLayer.config.visConfig;
1175
+ var copiedVisConfig = newLayer.copyLayerConfig(newLayer.config.visConfig, savedVisConfig || {}, {
1145
1176
  shallowCopy: ['colorRange', 'strokeColorRange']
1146
1177
  });
1147
1178
 
@@ -1290,4 +1321,4 @@ export var VIS_STATE_MERGERS = [{
1290
1321
  prop: 'editor',
1291
1322
  combineConfigs: combineEditorConfigs
1292
1323
  }];
1293
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1bmlxIiwicGljayIsImZsYXR0ZW5EZWVwIiwiZGVlcG1lcmdlIiwiYXJyYXlJbnNlcnQiLCJjb21iaW5lU3BsaXRNYXBzQnlJbmRleCIsImdldEluaXRpYWxNYXBMYXllcnNGb3JTcGxpdE1hcCIsImFwcGx5RmlsdGVyc1RvRGF0YXNldHMiLCJ2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyIsImZpbmRCeUlkIiwiYWdncmVnYXRlIiwiaXNQbGFpbk9iamVjdCIsImNyZWF0ZUVmZmVjdCIsIm5vdE51bGxvclVuZGVmaW5lZCIsIkFHR1JFR0FUSU9OX1RZUEVTIiwiTEFZRVJfQkxFTkRJTkdTIiwiT1ZFUkxBWV9CTEVORElOR1MiLCJpc0Fubm90YXRpb25LaW5kIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IiLCJJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCIsIkNVUlJFTlRfVkVSU0lPTiIsImFzc2lnbkdwdUNoYW5uZWxzIiwicmVzZXRGaWx0ZXJHcHVNb2RlIiwiZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMiLCJtZXJnZUZpbHRlcnMiLCJzdGF0ZSIsImZpbHRlcnNUb01lcmdlIiwiZnJvbUNvbmZpZyIsInByZXNlcnZlRmlsdGVyT3JkZXIiLCJtYXAiLCJsIiwiaWQiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJfdmFsaWRhdGVGaWx0ZXJzVXBkYXQiLCJ2YWxpZGF0ZWQiLCJmYWlsZWQiLCJ1cGRhdGVkRGF0YXNldHMiLCJ1cGRhdGVkRmlsdGVycyIsImluc2VydEl0ZW1CYXNlZE9uUHJlc2VydmVkT3JkZXIiLCJmaWx0ZXJzIiwiZGF0YXNldHNUb0ZpbHRlciIsImYiLCJkYXRhSWQiLCJmaWx0ZXJlZCIsImxheWVycyIsIl9vYmplY3RTcHJlYWQiLCJkYXRhc2V0cyIsImZpbHRlclRvQmVNZXJnZWQiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJyZXBsYWNlRmlsdGVyRGF0YXNldElkcyIsInNhdmVkRmlsdGVyIiwiZGF0YUlkVG9Vc2UiLCJyZXBsYWNlZCIsImZvckVhY2giLCJmaWx0ZXIiLCJpbmNsdWRlcyIsIl9maWx0ZXIkcGxvdFR5cGUiLCJuZXdEYXRhSWQiLCJkIiwicGxvdFR5cGUiLCJjb2xvcnNCeURhdGFJZCIsIl9maWx0ZXIkcGxvdFR5cGUyIiwiX3JlZiIsImNvbG9yIiwicmVzdCIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIl90b1Byb3BlcnR5S2V5IiwiX2RlZmluZVByb3BlcnR5IiwicHVzaCIsImlzU2F2ZWRMYXllckNvbmZpZ1YxIiwibGF5ZXJDb25maWciLCJ2aXN1YWxDaGFubmVscyIsInBhcnNlTGF5ZXJDb25maWciLCJzY2hlbWEiLCJfc2NoZW1hJHBhcnNlU2F2ZWRDb24iLCJzYXZlZENvbmZpZyIsInZlcnNpb24iLCJjb25maWciLCJ2aXNTdGF0ZSIsImxheWVyT3JkZXIiLCJwYXJzZVNhdmVkQ29uZmlnIiwiY3VycmVudEl0ZW1zIiwiaXRlbXMiLCJwcmVzZXJ2ZWRPcmRlciIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsImRlZmF1bHRTdGFydCIsIm5ld0l0ZW1zIiwiX2l0ZXJhdG9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfc3RlcCIsInMiLCJuIiwiZG9uZSIsIml0ZW0iLCJ2YWx1ZSIsImV4cGVjdGVkSWR4IiwiaW5kZXhPZiIsImluc2VydEF0IiwiaSIsInByZWNlZWRJZHgiLCJfbG9vcCIsInByZWNlZWRJdGVtSWQiLCJmaW5kSW5kZXgiLCJlcnIiLCJlIiwiY3JlYXRlTGF5ZXJGcm9tQ29uZmlnIiwicGFyc2VkTGF5ZXJDb25maWciLCJfdmFsaWRhdGVMYXllcnNCeURhdGEiLCJ2YWxpZGF0ZUxheWVyc0J5RGF0YXNldHMiLCJsYXllckNsYXNzZXMiLCJhbGxvd0VtcHR5Q29sdW1uIiwibmV3TGF5ZXIiLCJ1cGRhdGVMYXllckRvbWFpbiIsInNlcmlhbGl6ZUZpbHRlciIsIm5ld0ZpbHRlciIsIl9zZXJpYWxpemVkVmlzU3RhdGUkZiIsInNlcmlhbGl6ZWRWaXNTdGF0ZSIsInNlcmlhbGl6ZVZpc1N0YXRlIiwic2VyaWFsaXplTGF5ZXIiLCJfc2VyaWFsaXplZFZpc1N0YXRlJGwiLCJzZXJpYWxpemVFZmZlY3QiLCJuZXdFZmZlY3QiLCJfc2VyaWFsaXplZFZpc1N0YXRlJGUiLCJlZmZlY3RzIiwiZWZmZWN0T3JkZXIiLCJfc2NoZW1hJHBhcnNlU2F2ZWRDb24yIiwic2F2ZWRTdGF0ZSIsImdldENvbmZpZ1RvU2F2ZSIsIm1lcmdlTGF5ZXJzIiwibGF5ZXJzVG9NZXJnZSIsInByZXNlcnZlTGF5ZXJPcmRlciIsInVubWVyZ2VkIiwidG9NZXJnZSIsIl9sJGNvbmZpZyIsImlzTWVyZ2luZ0RhdGFzZXRzIiwiX3ZhbGlkYXRlTGF5ZXJzQnlEYXRhMiIsIm1lcmdlZExheWVyIiwiYXBwbHkiLCJfaW5zZXJ0TGF5ZXJBdFJpZ2h0T3IiLCJpbnNlcnRMYXllckF0UmlnaHRPcmRlciIsIm5ld0xheWVyT3JkZXIiLCJuZXdMYXllcnMiLCJtZXJnZWRTdGF0ZSIsImxheWVyVG9CZU1lcmdlZCIsImxheWVyT3JkZXJUb0JlTWVyZ2VkIiwic2F2ZWRPcmRlciIsIm1lcmdlTGF5ZXJPcmRlciIsImN1cnJlbnRMYXllcnMiLCJsYXllcnNUb0luc2VydCIsImN1cnJlbnRPcmRlciIsImN1cnJlbnRMYXllclF1ZXVlIiwiZW50cnkiLCJsYXllciIsIkJvb2xlYW4iLCJuZXdMYXllck9yZGVyUXVldWUiLCJuZXdGbGF0TGF5ZXJPcmRlciIsImhhc0dyb3VwcyIsInNvbWUiLCJleGlzdGluZ0ZsYXRJZHMiLCJTZXQiLCJuZXdJbnNlcnRlZElkcyIsImhhcyIsInJlc3VsdCIsImZsYXRRdWV1ZSIsImZsYXRJZHgiLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwic2F2ZWRMYXllck9yZGVyIiwidmFsaWRMYXllcklkcyIsImZpbHRlckxheWVyT3JkZXIiLCJvcmRlciIsIl9pdGVyYXRvcjMiLCJfc3RlcDMiLCJncm91cCIsImZpbHRlcmVkR3JvdXBPcmRlciIsInJlc3RvcmVkTGF5ZXJPcmRlciIsImxheWVySWRzSW5SZXN0b3JlZCIsImNvbGxlY3RJZHMiLCJfaXRlcmF0b3I0IiwiX3N0ZXA0IiwiYWRkIiwibWlzc2luZ0xheWVycyIsIm1lcmdlSW50ZXJhY3Rpb25zIiwiaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkIiwibWVyZ2VkIiwiT2JqZWN0Iiwia2V5cyIsImtleSIsImludGVyYWN0aW9uQ29uZmlnIiwiY3VycmVudENvbmZpZyIsIl9yZWYyIiwiZW5hYmxlZCIsImNvbmZpZ1NhdmVkIiwiX2V4Y2x1ZGVkIiwiY29uZmlnVG9NZXJnZSIsIl9tZXJnZUludGVyYWN0aW9uVG9vbCIsIm1lcmdlSW50ZXJhY3Rpb25Ub29sdGlwQ29uZmlnIiwibWVyZ2VkVG9vbHRpcCIsInVubWVyZ2VkVG9vbHRpcCIsImZpZWxkc1RvU2hvdyIsInRvb2x0aXAiLCJuZXh0U3RhdGUiLCJzYXZlZFVubWVyZ2VkSW50ZXJhY3Rpb24iLCJjb21iaW5lSW50ZXJhY3Rpb25Db25maWdzIiwiY29uZmlncyIsImNvbWJpbmVkIiwiX2xvb3AyIiwidG9CZUNvbWJpbmVkUHJvcHMiLCJjIiwicCIsImNvbXBhcmVNb2RlIiwiY29tcGFyZVR5cGUiLCJnZXRWYWx1ZVdpdGhIaWdoZXN0T2NjdXJyZW5jZSIsInJlZHVjZSIsImFjYyIsIm5leHRGaWVsZHNUb1Nob3ciLCJfbG9vcDMiLCJuZXh0RGF0YUlkS2V5IiwibmV4dFRvb2x0aXBGaWVsZHMiLCJuZXh0VEYiLCJmaW5kIiwiX3JlZjMiLCJuYW1lIiwiX2FnZ3JlZ2F0ZSIsInNpemUiLCJtYXhpbXVtIiwibGltaXRTZWFyY2giLCJfdW5tZXJnZWQkdG9vbHRpcCIsIl91bm1lcmdlZCR0b29sdGlwMiIsIl9zdGF0ZSRpbnRlcmFjdGlvblRvQiIsIl91bm1lcmdlZCR0b29sdGlwMyIsInJlcGxhY2VJbnRlcmFjdGlvbkRhdGFzZXRJZHMiLCJkYXRhSWRUb1JlcGxhY2UiLCJfaW50ZXJhY3Rpb25Db25maWckdG8iLCJfaW50ZXJhY3Rpb25Db25maWckdG8yIiwibWVyZ2VTcGxpdE1hcHMiLCJzcGxpdE1hcHMiLCJsYXllckV4aXN0cyIsImNyZWF0ZVBhbmVscyIsInNtIiwiaWRzIiwiZW50cmllcyIsInBhbmVsIiwiZnJvbUVudHJpZXMiLCJfcmVmNCIsIl9yZWY1IiwiX3NsaWNlZFRvQXJyYXkiLCJfcmVmNiIsIl9yZWY3Iiwic3BsaXRNYXBzVG9CZU1lcmdlZCIsIm1lcmdlQ2hhcnRzIiwiY2hhcnRzIiwiaW5jb21pbmdJZHMiLCJjaGFydCIsImV4aXN0aW5nSWRzIiwibmV4dENoYXJ0cyIsIm5vcm1hbGl6ZWQiLCJwaW5uZWQiLCJkaXNwbGF5IiwiaXNDb25maWdBY3RpdmUiLCJjaGFydHNUb0JlTWVyZ2VkIiwicmVwbGFjZUNoYXJ0RGF0YXNldElkcyIsInNhdmVkQ2hhcnRzIiwibWVyZ2VFZmZlY3RzIiwibmV3RWZmZWN0cyIsImVmZmVjdCIsImFsbCIsImlzVmFsaWRUb1NhdmUiLCJtZXJnZUFubm90YXRpb25zIiwiYW5ub3RhdGlvbnMiLCJhIiwidmFsaWRBbm5vdGF0aW9ucyIsImtpbmQiLCJhbmNob3JQb2ludCIsImV2ZXJ5IiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJpc1Zpc2libGUiLCJhdXRvU2l6ZSIsImF1dG9TaXplWSIsImxhYmVsIiwibGluZUNvbG9yIiwibGluZVdpZHRoIiwidGV4dFdpZHRoIiwidGV4dEhlaWdodCIsInRvb2x0aXBDb25maWciLCJfbG9vcDQiLCJhbGxGaWVsZHMiLCJmaWVsZHMiLCJmb3VuZEZpZWxkc1RvU2hvdyIsImZpZWxkIiwibWVyZ2VMYXllckJsZW5kaW5nIiwibGF5ZXJCbGVuZGluZyIsImNvbWJpbmVMYXllckJsZW5kaW5nQ29uZmlncyIsIm1lcmdlT3ZlcmxheUJsZW5kaW5nIiwib3ZlcmxheUJsZW5kaW5nIiwiY29tYmluZU92ZXJsYXlCbGVuZGluZ0NvbmZpZ3MiLCJtZXJnZUFuaW1hdGlvbkNvbmZpZyIsImFuaW1hdGlvbiIsImN1cnJlbnRUaW1lIiwiYW5pbWF0aW9uQ29uZmlnIiwiZG9tYWluIiwiY29tYmluZUFuaW1hdGlvbkNvbmZpZ3MiLCJfYWdncmVnYXRlMiIsIl9hZ2dyZWdhdGUzIiwibWluaW11bSIsInNwZWVkIiwidGltZUZvcm1hdCIsInRpbWV6b25lIiwidmFsaWRhdGVTYXZlZExheWVyQ29sdW1ucyIsInNhdmVkQ29scyIsImVtcHR5Q29scyIsIm9wdGlvbnMiLCJjb2x1bW5zIiwiX2xvb3A1IiwiX09iamVjdCRrZXlzIiwiX2kiLCJzYXZlZCIsImZpZWxkSWR4IiwiX3JlZjgiLCJhbGxDb2xGb3VuZCIsInZhbGlkYXRlQ29sdW1uIiwicnYiLCJ0aHJvd09uRXJyb3IiLCJyZXF1aXJlZENvbHVtbnMiLCJrIiwib3B0aW9uYWwiLCJtaXNzaW5nQ29sdW1ucyIsIkVycm9yIiwiam9pbiIsImNvbmZpZ0NvbHVtbnMiLCJpbnZhbGlkQ29sdW1ucyIsIl9jb2x1bW5zJGsiLCJjb2x1bW4iLCJ2YWxpZGF0b3IiLCJ2YWxpZGF0ZVNhdmVkVGV4dExhYmVsIiwiX3JlZjkiLCJzYXZlZFRleHRMYWJlbCIsIl9yZWYwIiwibGF5ZXJUZXh0TGFiZWwiLCJzYXZlZFRleHRMYWJlbHMiLCJ0ZXh0TGFiZWwiLCJmZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJhY2N1IiwiZ2V0U2F2ZWRWaXN1YWxDaGFubmVsVmFsdWUiLCJzYXZlZExheWVyIiwiY2hhbm5lbHMiLCJfdHlwZW9mIiwidmFsaWRhdGVTYXZlZFZpc3VhbENoYW5uZWxzIiwidmFsdWVzIiwiX3JlZjEiLCJzY2FsZSIsInNhdmVkRmllbGQiLCJzYXZlZFNjYWxlIiwiZm91bmRGaWVsZCIsImZvdW5kQ2hhbm5lbCIsInVwZGF0ZUxheWVyQ29uZmlnIiwidmFsaWRhdGVWaXN1YWxDaGFubmVsIiwiX25ld0xheWVyJGNvbmZpZyRmaWVsIiwiZmllbGROYW1lIiwiX2xheWVyJGNvbmZpZyIsInZhbGlkYXRlTGF5ZXIiLCJ2YWxpZGF0ZUxheWVyV2l0aERhdGEiLCJfZ2V0Q29sdW1uQ29uZmlnRm9yVmFsaWRhdGlvbiIsImNvbHVtbkNvbmZpZyIsImdldExheWVyQ29sdW1ucyIsImNvbE1vZGVDb25maWciLCJjb2x1bW5Nb2RlIiwic3VwcG9ydGVkQ29sdW1uTW9kZXMiLCJjb2xNb2RlIiwiZ3JvdXBDb2x1bW5zIiwiY29sdW1uR3JvdXBzIiwiZmxhdE1hcCIsInJlcXVpcmVkS2V5cyIsIm9wdGlvbmFsQ29sdW1ucyIsImNvbCIsIl9vcHRpb25hbCIsInJlcXVpcmVkQ29sIiwiX2V4Y2x1ZGVkMiIsImRhdGFzZXQiLCJ0eXBlIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaGlkZGVuIiwiaGlnaGxpZ2h0Q29sb3IiLCJjb3BpZWRWaXNDb25maWciLCJjb3B5TGF5ZXJDb25maWciLCJ2aXNDb25maWciLCJzaGFsbG93Q29weSIsInZhbGlkYXRlVmlzQ29uZmlnIiwibWVyZ2VFZGl0b3IiLCJzYXZlZEVkaXRvciIsIl9zYXZlZEVkaXRvciR2aXNpYmxlIiwiZWRpdG9yIiwiZmVhdHVyZXMiLCJ2aXNpYmxlIiwiY29tYmluZUVkaXRvckNvbmZpZ3MiLCJuZXh0Q29uZmlnIiwibWVyZ2VEYXRhc2V0c0J5T3JkZXIiLCJuZXdEYXRhRW50cmllcyIsInByZXNlcnZlRGF0YXNldE9yZGVyIiwibmV3RGF0YXNldElkcyIsIl9zdGF0ZSRwcmVzZXJ2ZURhdGFzZSIsImFyciIsIl9yZWYxMyIsInRhbGx5cyIsIk1hcCIsInNldCIsImdldCIsIm5leHQiLCJWSVNfU1RBVEVfTUVSR0VSUyIsIm1lcmdlIiwicHJvcCIsInRvTWVyZ2VQcm9wIiwicHJlc2VydmVPcmRlciIsInJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIiwic2F2ZVVubWVyZ2VkIiwiY29tYmluZUNvbmZpZ3MiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdmlzLXN0YXRlLW1lcmdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgdW5pcSBmcm9tICdlcy10b29sa2l0L2NvbXBhdC91bmlxJztcbmltcG9ydCBwaWNrIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L3BpY2snO1xuaW1wb3J0IGZsYXR0ZW5EZWVwIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L2ZsYXR0ZW5EZWVwJztcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnZGVlcG1lcmdlJztcbmltcG9ydCB7XG4gIGFycmF5SW5zZXJ0LFxuICBjb21iaW5lU3BsaXRNYXBzQnlJbmRleCxcbiAgZ2V0SW5pdGlhbE1hcExheWVyc0ZvclNwbGl0TWFwLFxuICBhcHBseUZpbHRlcnNUb0RhdGFzZXRzLFxuICB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyxcbiAgZmluZEJ5SWQsXG4gIGFnZ3JlZ2F0ZSxcbiAgaXNQbGFpbk9iamVjdFxufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcblxuaW1wb3J0IHtMYXllcn0gZnJvbSAnQGtlcGxlci5nbC9sYXllcnMnO1xuaW1wb3J0IHtjcmVhdGVFZmZlY3R9IGZyb20gJ0BrZXBsZXIuZ2wvZWZmZWN0cyc7XG5pbXBvcnQge25vdE51bGxvclVuZGVmaW5lZH0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuaW1wb3J0IHtcbiAgQUdHUkVHQVRJT05fVFlQRVMsXG4gIExBWUVSX0JMRU5ESU5HUyxcbiAgT1ZFUkxBWV9CTEVORElOR1MsXG4gIGlzQW5ub3RhdGlvbktpbmQsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SLFxuICBJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSFxufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge0NVUlJFTlRfVkVSU0lPTiwgVmlzU3RhdGUsIFZpc1N0YXRlTWVyZ2VycywgS2VwbGVyR0xTY2hlbWFDbGFzc30gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcblxuaW1wb3J0IHtcbiAgUGFyc2VkTGF5ZXIsXG4gIFBhcnNlZFZpc1N0YXRlLFxuICBTYXZlZEludGVyYWN0aW9uQ29uZmlnLFxuICBUb29sdGlwSW5mbyxcbiAgU2F2ZWRFZGl0b3IsXG4gIFBhcnNlZENvbmZpZyxcbiAgRmlsdGVyLFxuICBFZmZlY3QgYXMgRWZmZWN0VHlwZSxcbiAgUGFyc2VkRWZmZWN0LFxuICBMYXllckNvbHVtbnMsXG4gIExheWVyQ29sdW1uLFxuICBQYXJzZWRGaWx0ZXIsXG4gIE5lc3RlZFBhcnRpYWwsXG4gIFNhdmVkQW5pbWF0aW9uQ29uZmlnLFxuICBMYXllck9yZGVyLFxuICBMYXllck9yZGVyR3JvdXAsXG4gIENoYXJ0Q29uZmlnXG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtLZXBsZXJUYWJsZSwgRGF0YXNldHMsIGFzc2lnbkdwdUNoYW5uZWxzLCByZXNldEZpbHRlckdwdU1vZGV9IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuXG5pbXBvcnQge2dldExheWVyT3JkZXJGcm9tTGF5ZXJzfSBmcm9tICcuL2xheWVyLXV0aWxzJztcblxuLyoqXG4gKiBNZXJnZSBsb2FkZWQgZmlsdGVycyB3aXRoIGN1cnJlbnQgc3RhdGUsIGlmIG5vIGZpZWxkcyBvciBkYXRhIGFyZSBsb2FkZWRcbiAqIHNhdmUgaXQgZm9yIGxhdGVyXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VGaWx0ZXJzPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBmaWx0ZXJzVG9NZXJnZTogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnZmlsdGVycyddLFxuICBmcm9tQ29uZmlnPzogYm9vbGVhblxuKTogUyB7XG4gIGNvbnN0IHByZXNlcnZlRmlsdGVyT3JkZXIgPSBmcm9tQ29uZmlnXG4gICAgPyBmaWx0ZXJzVG9NZXJnZT8ubWFwKGwgPT4gbC5pZClcbiAgICA6IHN0YXRlLnByZXNlcnZlRmlsdGVyT3JkZXI7XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KGZpbHRlcnNUb01lcmdlKSB8fCAhZmlsdGVyc1RvTWVyZ2UubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge3ZhbGlkYXRlZCwgZmFpbGVkLCB1cGRhdGVkRGF0YXNldHN9ID0gdmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMoc3RhdGUsIGZpbHRlcnNUb01lcmdlKTtcbiAgbGV0IHVwZGF0ZWRGaWx0ZXJzID0gaW5zZXJ0SXRlbUJhc2VkT25QcmVzZXJ2ZWRPcmRlcihcbiAgICBzdGF0ZS5maWx0ZXJzLFxuICAgIHZhbGlkYXRlZCxcbiAgICBwcmVzZXJ2ZUZpbHRlck9yZGVyXG4gICk7XG5cbiAgLy8gbWVyZ2UgZmlsdGVyIHdpdGggZXhpc3RpbmdcbiAgdXBkYXRlZEZpbHRlcnMgPSByZXNldEZpbHRlckdwdU1vZGUodXBkYXRlZEZpbHRlcnMpO1xuICB1cGRhdGVkRmlsdGVycyA9IGFzc2lnbkdwdUNoYW5uZWxzKHVwZGF0ZWRGaWx0ZXJzKTtcbiAgLy8gZmlsdGVyIGRhdGFcbiAgY29uc3QgZGF0YXNldHNUb0ZpbHRlciA9IHVuaXEoZmxhdHRlbkRlZXAodmFsaWRhdGVkLm1hcChmID0+IGYuZGF0YUlkKSkpO1xuXG4gIGNvbnN0IGZpbHRlcmVkID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICBkYXRhc2V0c1RvRmlsdGVyLFxuICAgIHVwZGF0ZWREYXRhc2V0cyxcbiAgICB1cGRhdGVkRmlsdGVycyxcbiAgICBzdGF0ZS5sYXllcnNcbiAgKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHVwZGF0ZWRGaWx0ZXJzLFxuICAgIGRhdGFzZXRzOiBmaWx0ZXJlZCxcbiAgICBwcmVzZXJ2ZUZpbHRlck9yZGVyLFxuICAgIGZpbHRlclRvQmVNZXJnZWQ6IFsuLi5zdGF0ZS5maWx0ZXJUb0JlTWVyZ2VkLCAuLi5mYWlsZWRdXG4gIH07XG59XG5cbi8vIHJlcGxhY2UgZGF0YUlkIGluIHNhdmVkIEZpbHRlclxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VGaWx0ZXJEYXRhc2V0SWRzKFxuICBzYXZlZEZpbHRlcjogRmlsdGVyW10sXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhSWRUb1VzZTogc3RyaW5nXG4pIHtcbiAgY29uc3QgcmVwbGFjZWQ6IEZpbHRlcltdID0gW107XG4gIHNhdmVkRmlsdGVyLmZvckVhY2goZmlsdGVyID0+IHtcbiAgICBpZiAoZmlsdGVyLmRhdGFJZC5pbmNsdWRlcyhkYXRhSWQpKSB7XG4gICAgICBjb25zdCBuZXdEYXRhSWQgPSBmaWx0ZXIuZGF0YUlkLm1hcChkID0+IChkID09PSBkYXRhSWQgPyBkYXRhSWRUb1VzZSA6IGQpKTtcbiAgICAgIGxldCBwbG90VHlwZTtcbiAgICAgIC8vIFRPRE86IG1vcmUgZ2VuZXJpYyBhcHByb2FjaCB0byBzYXZlIHBsb3RUeXBlLmNvbG9yc0J5RGF0YUlkXG4gICAgICBpZiAoZmlsdGVyLnBsb3RUeXBlPy5jb2xvcnNCeURhdGFJZD8uW2RhdGFJZF0pIHtcbiAgICAgICAgLy8gcmVwbGFjZSBjb2xvckJ5RGF0YUlkIGluIGZpbHRlci5wbG90VHlwZVxuICAgICAgICBjb25zdCB7W2RhdGFJZF06IGNvbG9yLCAuLi5yZXN0fSA9IGZpbHRlci5wbG90VHlwZT8uY29sb3JzQnlEYXRhSWQgfHwge307XG4gICAgICAgIHBsb3RUeXBlID0ge1xuICAgICAgICAgIC4uLmZpbHRlci5wbG90VHlwZSxcbiAgICAgICAgICBjb2xvcnNCeURhdGFJZDoge1xuICAgICAgICAgICAgLi4ucmVzdCxcbiAgICAgICAgICAgIFtkYXRhSWRUb1VzZV06IGNvbG9yXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmVwbGFjZWQucHVzaCh7XG4gICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgZGF0YUlkOiBuZXdEYXRhSWQsXG4gICAgICAgIC4uLihwbG90VHlwZSA/IHtwbG90VHlwZX0gOiB7fSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXBsYWNlZC5sZW5ndGggPyByZXBsYWNlZCA6IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NhdmVkTGF5ZXJDb25maWdWMShsYXllckNvbmZpZzogYW55KTogYm9vbGVhbiB7XG4gIC8vIGV4cG9ydGVkIGxheWVyIGNvbmZpZ3VyYXRpb24gY29udGFpbnMgdmlzdWFsQ2hhbm5lbHMgcHJvcGVydHlcbiAgcmV0dXJuIGxheWVyQ29uZmlnPy52aXN1YWxDaGFubmVscztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTGF5ZXJDb25maWcoXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFDbGFzcyxcbiAgbGF5ZXJDb25maWc6IGFueVxuKTogUGFyc2VkTGF5ZXIgfCB1bmRlZmluZWQge1xuICAvLyBhc3N1bWUgdGhlIGxheWVyIGNvbmZpZyBpcyBjdXJyZW50IHZlcnNpb25cbiAgY29uc3Qgc2F2ZWRDb25maWcgPSB7XG4gICAgdmVyc2lvbjogQ1VSUkVOVF9WRVJTSU9OLFxuICAgIGNvbmZpZzoge1xuICAgICAgdmlzU3RhdGU6IHtsYXllcnM6IFtsYXllckNvbmZpZ10sIGxheWVyT3JkZXI6IFtsYXllckNvbmZpZy5pZF19XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBzY2hlbWEucGFyc2VTYXZlZENvbmZpZyhzYXZlZENvbmZpZyk/LnZpc1N0YXRlPy5sYXllcnM/LlswXTtcbn1cblxuZnVuY3Rpb24gaW5zZXJ0SXRlbUJhc2VkT25QcmVzZXJ2ZWRPcmRlcihcbiAgY3VycmVudEl0ZW1zOiBGaWx0ZXJbXSxcbiAgaXRlbXM6IEZpbHRlcltdLFxuICBwcmVzZXJ2ZWRPcmRlcjogYW55W10gPSBbXSxcbiAgZGVmYXVsdFN0YXJ0PzogYm9vbGVhblxuKSB7XG4gIGxldCBuZXdJdGVtcyA9IFsuLi5jdXJyZW50SXRlbXNdO1xuXG4gIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgIGNvbnN0IGV4cGVjdGVkSWR4ID0gcHJlc2VydmVkT3JkZXIuaW5kZXhPZihpdGVtLmlkKTtcbiAgICAvLyBpbnNlcnRBdCB0aGUgZW5kIGJ5IGRlZmF1bHRcbiAgICBsZXQgaW5zZXJ0QXQgPSBkZWZhdWx0U3RhcnQgPyAwIDogbmV3SXRlbXMubGVuZ3RoO1xuICAgIGlmIChleHBlY3RlZElkeCA+IDApIHtcbiAgICAgIC8vIGxvb2sgZm9yIGxheWVyIHRvIGluc2VydCBhZnRlclxuICAgICAgbGV0IGkgPSBleHBlY3RlZElkeCArIDE7XG4gICAgICBsZXQgcHJlY2VlZElkeCA9IC0xO1xuICAgICAgd2hpbGUgKGktLSA+IDAgJiYgcHJlY2VlZElkeCA8IDApIHtcbiAgICAgICAgLy8ga2VlcCBsb29raW5nIGZvciBwcmVjZWVkIGxheWVyIHRoYXQgaXMgYWxyZWFkeSBsb2FkZWRcbiAgICAgICAgY29uc3QgcHJlY2VlZEl0ZW1JZCA9IHByZXNlcnZlZE9yZGVyW2kgLSAxXTtcbiAgICAgICAgcHJlY2VlZElkeCA9IG5ld0l0ZW1zLmZpbmRJbmRleChkID0+IGQuaWQgPT09IHByZWNlZWRJdGVtSWQpO1xuICAgICAgfVxuICAgICAgaWYgKHByZWNlZWRJZHggPiAtMSkge1xuICAgICAgICAvLyBpZiBmb3VuZFxuICAgICAgICBpbnNlcnRBdCA9IHByZWNlZWRJZHggKyAxO1xuICAgICAgfVxuICAgIH1cbiAgICBuZXdJdGVtcyA9IGFycmF5SW5zZXJ0KG5ld0l0ZW1zLCBpbnNlcnRBdCwgaXRlbSk7XG4gIH1cbiAgcmV0dXJuIG5ld0l0ZW1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTGF5ZXJGcm9tQ29uZmlnKHN0YXRlOiBWaXNTdGF0ZSwgbGF5ZXJDb25maWc6IGFueSk6IExheWVyIHwgbnVsbCB7XG4gIC8vIGNoZWNrIGlmIHRoZSBsYXllciBjb25maWcgaXMgcGFyc2VkXG4gIGNvbnN0IHBhcnNlZExheWVyQ29uZmlnID0gaXNTYXZlZExheWVyQ29uZmlnVjEobGF5ZXJDb25maWcpXG4gICAgPyBwYXJzZUxheWVyQ29uZmlnKHN0YXRlLnNjaGVtYSwgbGF5ZXJDb25maWcpXG4gICAgOiBsYXllckNvbmZpZztcblxuICBpZiAoIXBhcnNlZExheWVyQ29uZmlnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLy8gZmlyc3QgdmFsaWRhdGUgY29uZmlnIGFnYWluc3QgZGF0YXNldFxuICBjb25zdCB7dmFsaWRhdGVkLCBmYWlsZWR9ID0gdmFsaWRhdGVMYXllcnNCeURhdGFzZXRzKFxuICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgIHN0YXRlLmxheWVyQ2xhc3NlcyxcbiAgICBbcGFyc2VkTGF5ZXJDb25maWddLFxuICAgIHthbGxvd0VtcHR5Q29sdW1uOiB0cnVlfVxuICApO1xuXG4gIGlmIChmYWlsZWQ/Lmxlbmd0aCB8fCAhdmFsaWRhdGVkLmxlbmd0aCkge1xuICAgIC8vIGZhaWxlZFxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgbmV3TGF5ZXIgPSB2YWxpZGF0ZWRbMF07XG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzKTtcbiAgcmV0dXJuIG5ld0xheWVyO1xufVxuXG4vKipcbiAqIEdldCBsb2FkZWQgZmlsdGVyIGZyb20gc3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUZpbHRlcihcbiAgbmV3RmlsdGVyOiBGaWx0ZXIsXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFDbGFzc1xuKTogUGFyc2VkRmlsdGVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2VyaWFsaXplZFZpc1N0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoe2ZpbHRlcnM6IFtuZXdGaWx0ZXJdfSwgc2NoZW1hKTtcbiAgcmV0dXJuIHNlcmlhbGl6ZWRWaXNTdGF0ZT8uZmlsdGVycz8uWzBdO1xufVxuXG4vKipcbiAqIEdldCBsb2FkZWQgbGF5ZXIgZnJvbSBzdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplTGF5ZXIoXG4gIG5ld0xheWVyOiBMYXllcixcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYUNsYXNzXG4pOiBQYXJzZWRMYXllciB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRWaXNTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKFxuICAgIHtsYXllcnM6IFtuZXdMYXllcl0sIGxheWVyT3JkZXI6IFtuZXdMYXllci5pZF19LFxuICAgIHNjaGVtYVxuICApO1xuICByZXR1cm4gc2VyaWFsaXplZFZpc1N0YXRlPy5sYXllcnM/LlswXTtcbn1cblxuLyoqXG4gKiBHZXQgbG9hZGVkIGVmZmVjdCBmcm9tIHN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVFZmZlY3QoXG4gIG5ld0VmZmVjdDogRWZmZWN0VHlwZSxcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYUNsYXNzXG4pOiBQYXJzZWRFZmZlY3QgfCB1bmRlZmluZWQge1xuICBjb25zdCBzZXJpYWxpemVkVmlzU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZShcbiAgICB7ZWZmZWN0czogW25ld0VmZmVjdF0sIGVmZmVjdE9yZGVyOiBbbmV3RWZmZWN0LmlkXX0sXG4gICAgc2NoZW1hXG4gICk7XG4gIHJldHVybiBzZXJpYWxpemVkVmlzU3RhdGU/LmVmZmVjdHM/LlswXTtcbn1cblxuLyoqXG4gKiBHZXQgdmlzIHN0YXRlIGNvbmZpZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplVmlzU3RhdGUoXG4gIHZpc1N0YXRlOiBQYXJ0aWFsPFZpc1N0YXRlPixcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYUNsYXNzXG4pOiBQYXJzZWRWaXNTdGF0ZSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHNhdmVkU3RhdGUgPSBzY2hlbWEuZ2V0Q29uZmlnVG9TYXZlKHtcbiAgICB2aXNTdGF0ZVxuICB9KTtcbiAgcmV0dXJuIHNhdmVkU3RhdGUgPyBzY2hlbWEucGFyc2VTYXZlZENvbmZpZyhzYXZlZFN0YXRlKT8udmlzU3RhdGUgOiB1bmRlZmluZWQ7XG59XG4vKipcbiAqIE1lcmdlIGxheWVycyBmcm9tIGRlLXNlcmlhbGl6ZWQgc3RhdGUsIGlmIG5vIGZpZWxkcyBvciBkYXRhIGFyZSBsb2FkZWRcbiAqIHNhdmUgaXQgZm9yIGxhdGVyXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VMYXllcnM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGxheWVyc1RvTWVyZ2U6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2xheWVycyddID0gW10sXG4gIGZyb21Db25maWc/OiBib29sZWFuXG4pOiBTIHtcbiAgY29uc3QgcHJlc2VydmVMYXllck9yZGVyID0gZnJvbUNvbmZpZ1xuICAgID8gZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMobGF5ZXJzVG9NZXJnZSlcbiAgICA6IHN0YXRlLnByZXNlcnZlTGF5ZXJPcmRlcjtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGxheWVyc1RvTWVyZ2UpIHx8ICFsYXllcnNUb01lcmdlLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyBkb24ndCBtZXJnZSBsYXllciBpZiBkYXRhc2V0IGlzIGJlaW5nIG1lcmdlZFxuICBjb25zdCB1bm1lcmdlZDogUGFyc2VkTGF5ZXJbXSA9IFtdO1xuICBjb25zdCB0b01lcmdlOiBQYXJzZWRMYXllcltdID0gW107XG4gIGxheWVyc1RvTWVyZ2UuZm9yRWFjaCgobDogUGFyc2VkTGF5ZXIpID0+IHtcbiAgICBpZiAobD8uY29uZmlnPy5kYXRhSWQgJiYgc3RhdGUuaXNNZXJnaW5nRGF0YXNldHNbbC5jb25maWcuZGF0YUlkXSkge1xuICAgICAgdW5tZXJnZWQucHVzaChsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdG9NZXJnZS5wdXNoKGwpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3Qge3ZhbGlkYXRlZDogbWVyZ2VkTGF5ZXIsIGZhaWxlZH0gPSB2YWxpZGF0ZUxheWVyc0J5RGF0YXNldHMoXG4gICAgc3RhdGUuZGF0YXNldHMsXG4gICAgc3RhdGUubGF5ZXJDbGFzc2VzLFxuICAgIHRvTWVyZ2VcbiAgKTtcbiAgdW5tZXJnZWQucHVzaCguLi5mYWlsZWQpO1xuICAvLyBwdXQgbmV3IGxheWVycyBpbiBmcm9udCBvZiBjdXJyZW50IGxheWVyc1xuICBjb25zdCB7bmV3TGF5ZXJPcmRlciwgbmV3TGF5ZXJzfSA9IGluc2VydExheWVyQXRSaWdodE9yZGVyKFxuICAgIHN0YXRlLmxheWVycyxcbiAgICBtZXJnZWRMYXllcixcbiAgICBzdGF0ZS5sYXllck9yZGVyLFxuICAgIHByZXNlcnZlTGF5ZXJPcmRlclxuICApO1xuXG4gIGxldCBtZXJnZWRTdGF0ZTogUyA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IG5ld0xheWVycyxcbiAgICBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyLFxuICAgIHByZXNlcnZlTGF5ZXJPcmRlcixcbiAgICBsYXllclRvQmVNZXJnZWQ6IFsuLi5zdGF0ZS5sYXllclRvQmVNZXJnZWQsIC4uLnVubWVyZ2VkXVxuICB9O1xuXG4gIC8vIEFwcGx5IHBlbmRpbmcgbGF5ZXJPcmRlciB3aXRoIGdyb3VwcyBpZiBsYXllcnMgYXJlIG5vdyBhdmFpbGFibGVcbiAgaWYgKG1lcmdlZFN0YXRlLmxheWVyT3JkZXJUb0JlTWVyZ2VkICYmIG1lcmdlZFN0YXRlLmxheWVycy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgc2F2ZWRPcmRlciA9IG1lcmdlZFN0YXRlLmxheWVyT3JkZXJUb0JlTWVyZ2VkO1xuICAgIG1lcmdlZFN0YXRlID0gbWVyZ2VMYXllck9yZGVyKG1lcmdlZFN0YXRlLCBzYXZlZE9yZGVyKTtcbiAgICAvLyBLZWVwIHNhdmVkTGF5ZXJPcmRlciBhdmFpbGFibGUgZm9yIGZ1dHVyZSBkZWZlcnJlZCBsYXllcnNcbiAgICBpZiAobWVyZ2VkU3RhdGUubGF5ZXJUb0JlTWVyZ2VkLmxlbmd0aCA+IDApIHtcbiAgICAgIG1lcmdlZFN0YXRlID0gey4uLm1lcmdlZFN0YXRlLCBsYXllck9yZGVyVG9CZU1lcmdlZDogc2F2ZWRPcmRlcn07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1lcmdlZFN0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0TGF5ZXJBdFJpZ2h0T3JkZXIoXG4gIGN1cnJlbnRMYXllcnMsXG4gIGxheWVyc1RvSW5zZXJ0LFxuICBjdXJyZW50T3JkZXIsXG4gIHByZXNlcnZlZE9yZGVyOiBzdHJpbmdbXSA9IFtdXG4pIHtcbiAgaWYgKCFsYXllcnNUb0luc2VydD8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHtuZXdMYXllcnM6IGN1cnJlbnRMYXllcnMsIG5ld0xheWVyT3JkZXI6IGN1cnJlbnRPcmRlcn07XG4gIH1cblxuICBjb25zdCBjdXJyZW50TGF5ZXJRdWV1ZSA9IGN1cnJlbnRPcmRlclxuICAgIC5maWx0ZXIoZW50cnkgPT4gdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJylcbiAgICAubWFwKGlkID0+IGZpbmRCeUlkKGlkKShjdXJyZW50TGF5ZXJzKSlcbiAgICAuZmlsdGVyKGxheWVyID0+IEJvb2xlYW4obGF5ZXIpKTtcbiAgY29uc3QgbmV3TGF5ZXJzID0gY3VycmVudExheWVycy5jb25jYXQobGF5ZXJzVG9JbnNlcnQpO1xuICBjb25zdCBuZXdMYXllck9yZGVyUXVldWUgPSBpbnNlcnRJdGVtQmFzZWRPblByZXNlcnZlZE9yZGVyKFxuICAgIGN1cnJlbnRMYXllclF1ZXVlLFxuICAgIGxheWVyc1RvSW5zZXJ0LFxuICAgIHByZXNlcnZlZE9yZGVyLFxuICAgIHRydWVcbiAgKTtcblxuICBjb25zdCBuZXdGbGF0TGF5ZXJPcmRlciA9IGdldExheWVyT3JkZXJGcm9tTGF5ZXJzKG5ld0xheWVyT3JkZXJRdWV1ZSk7XG5cbiAgLy8gSWYgbm8gZ3JvdXBzIGV4aXN0IGluIGN1cnJlbnQgb3JkZXIsIGp1c3QgdXNlIHRoZSBuZXcgZmxhdCBvcmRlclxuICBjb25zdCBoYXNHcm91cHMgPSBjdXJyZW50T3JkZXIuc29tZShlbnRyeSA9PiBpc1BsYWluT2JqZWN0KGVudHJ5KSk7XG4gIGlmICghaGFzR3JvdXBzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5ld0xheWVyT3JkZXI6IG5ld0ZsYXRMYXllck9yZGVyLFxuICAgICAgbmV3TGF5ZXJzXG4gICAgfTtcbiAgfVxuXG4gIC8vIFJlYnVpbGQgbGF5ZXJPcmRlciBwcmVzZXJ2aW5nIGdyb3VwcyBpbiB0aGVpciByZWxhdGl2ZSBwb3NpdGlvbnMuXG4gIC8vIFJlcGxhY2UgZWFjaCBzdHJpbmcgZW50cnkgd2l0aCBpdHMgdXBkYXRlZCBwb3NpdGlvbiBmcm9tIG5ld0ZsYXRMYXllck9yZGVyLFxuICAvLyBhbmQga2VlcCBncm91cHMgYXMtaXMuXG4gIGNvbnN0IGV4aXN0aW5nRmxhdElkcyA9IG5ldyBTZXQoXG4gICAgY3VycmVudE9yZGVyLmZpbHRlcihlbnRyeSA9PiB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSBhcyBzdHJpbmdbXVxuICApO1xuICBjb25zdCBuZXdJbnNlcnRlZElkcyA9IG5ld0ZsYXRMYXllck9yZGVyLmZpbHRlcihpZCA9PiAhZXhpc3RpbmdGbGF0SWRzLmhhcyhpZCkpO1xuXG4gIC8vIFJlYnVpbGQ6IHdhbGsgdGhyb3VnaCBjdXJyZW50T3JkZXIsIHJlcGxhY2Ugc3RyaW5nIGVudHJpZXMgd2l0aCB0aGVpclxuICAvLyBuZXcgcG9zaXRpb24gZXF1aXZhbGVudHMgZnJvbSBuZXdGbGF0TGF5ZXJPcmRlciwgdGhlbiBhcHBlbmQgYW55IG5ld2x5IGluc2VydGVkIGxheWVyc1xuICBjb25zdCByZXN1bHQ6IExheWVyT3JkZXIgPSBbXTtcbiAgY29uc3QgZmxhdFF1ZXVlID0gWy4uLm5ld0ZsYXRMYXllck9yZGVyLmZpbHRlcihpZCA9PiBleGlzdGluZ0ZsYXRJZHMuaGFzKGlkKSldO1xuICBsZXQgZmxhdElkeCA9IDA7XG5cbiAgZm9yIChjb25zdCBlbnRyeSBvZiBjdXJyZW50T3JkZXIpIHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGVudHJ5IGFzIExheWVyT3JkZXJHcm91cCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlcGxhY2Ugd2l0aCBjb3JyZXNwb25kaW5nIGVudHJ5IGZyb20gcmVvcmRlcmVkIGZsYXQgbGlzdFxuICAgICAgaWYgKGZsYXRJZHggPCBmbGF0UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGZsYXRRdWV1ZVtmbGF0SWR4XSk7XG4gICAgICAgIGZsYXRJZHgrKztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBBcHBlbmQgYW55IG5ld2x5IGluc2VydGVkIGxheWVycyBhdCB0aGUgZnJvbnQgKHRoZXkgYXJlIG5ldylcbiAgcmV0dXJuIHtcbiAgICBuZXdMYXllck9yZGVyOiBbLi4ubmV3SW5zZXJ0ZWRJZHMsIC4uLnJlc3VsdF0sXG4gICAgbmV3TGF5ZXJzXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2Ugc2F2ZWQgbGF5ZXJPcmRlciB3aXRoIGN1cnJlbnQgc3RhdGUgdG8gcmVzdG9yZSBsYXllciBncm91cHMuXG4gKiBDYWxsZWQgYWZ0ZXIgbGF5ZXJzIGhhdmUgYmVlbiBtZXJnZWQuIElmIHRoZSBzYXZlZCBjb25maWcgY29udGFpbnMgYSBsYXllck9yZGVyXG4gKiB3aXRoIGdyb3VwcywgdGhpcyByZXBsYWNlcyB0aGUgZmxhdCBsYXllck9yZGVyIHdpdGggdGhlIHNhdmVkIGhpZXJhcmNoaWNhbCBvbmUsXG4gKiBmaWx0ZXJpbmcgb3V0IGFueSBsYXllciBJRHMgdGhhdCBkb24ndCBleGlzdCBpbiB0aGUgY3VycmVudCBzdGF0ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlTGF5ZXJPcmRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgc2F2ZWRMYXllck9yZGVyPzogYW55W10sXG4gIGZyb21Db25maWc/OiBib29sZWFuXG4pOiBTIHtcbiAgaWYgKCFzYXZlZExheWVyT3JkZXIgfHwgIUFycmF5LmlzQXJyYXkoc2F2ZWRMYXllck9yZGVyKSB8fCBzYXZlZExheWVyT3JkZXIubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIHNhdmVkIGxheWVyT3JkZXIgY29udGFpbnMgYW55IGdyb3Vwc1xuICBjb25zdCBoYXNHcm91cHMgPSBzYXZlZExheWVyT3JkZXIuc29tZShlbnRyeSA9PiBpc1BsYWluT2JqZWN0KGVudHJ5KSk7XG4gIGlmICghaGFzR3JvdXBzKSB7XG4gICAgLy8gTm8gZ3JvdXBzIC0gdGhlIGxheWVyIG1lcmdlciBhbHJlYWR5IGhhbmRsZWQgb3JkZXJpbmcgdmlhIHByZXNlcnZlTGF5ZXJPcmRlclxuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIElmIGxheWVycyBoYXZlbid0IGJlZW4gbWVyZ2VkIHlldCwgc3RvcmUgZm9yIGxhdGVyXG4gIGlmIChzdGF0ZS5sYXllcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbGF5ZXJPcmRlclRvQmVNZXJnZWQ6IHNhdmVkTGF5ZXJPcmRlclxuICAgIH07XG4gIH1cblxuICAvLyBCdWlsZCBhIHNldCBvZiB2YWxpZCBsYXllciBJRHMgZnJvbSBjdXJyZW50IHN0YXRlXG4gIGNvbnN0IHZhbGlkTGF5ZXJJZHMgPSBuZXcgU2V0KHN0YXRlLmxheWVycy5tYXAobCA9PiBsLmlkKSk7XG5cbiAgLy8gUmVjdXJzaXZlbHkgZmlsdGVyIHRoZSBzYXZlZCBsYXllck9yZGVyIHRvIG9ubHkgaW5jbHVkZSB2YWxpZCBsYXllcnNcbiAgZnVuY3Rpb24gZmlsdGVyTGF5ZXJPcmRlcihvcmRlcjogYW55W10pOiBMYXllck9yZGVyIHtcbiAgICBjb25zdCByZXN1bHQ6IExheWVyT3JkZXIgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIG9yZGVyKSB7XG4gICAgICBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgICAgY29uc3QgZ3JvdXAgPSBlbnRyeSBhcyBMYXllck9yZGVyR3JvdXA7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkR3JvdXBPcmRlciA9IGZpbHRlckxheWVyT3JkZXIoZ3JvdXAubGF5ZXJPcmRlcik7XG4gICAgICAgIC8vIEtlZXAgdGhlIGdyb3VwIGV2ZW4gaWYgZW1wdHkgKHVzZXIgbWF5IHdhbnQgdGhlIGVtcHR5IGdyb3VwKVxuICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgLi4uZ3JvdXAsXG4gICAgICAgICAgbGF5ZXJPcmRlcjogZmlsdGVyZWRHcm91cE9yZGVyXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnICYmIHZhbGlkTGF5ZXJJZHMuaGFzKGVudHJ5KSkge1xuICAgICAgICByZXN1bHQucHVzaChlbnRyeSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBjb25zdCByZXN0b3JlZExheWVyT3JkZXIgPSBmaWx0ZXJMYXllck9yZGVyKHNhdmVkTGF5ZXJPcmRlcik7XG5cbiAgLy8gRmluZCBhbnkgbGF5ZXJzIGluIHRoZSBjdXJyZW50IHN0YXRlIHRoYXQgYXJlbid0IGluIHRoZSByZXN0b3JlZCBvcmRlclxuICAvLyAoY291bGQgaGFwcGVuIGlmIGxheWVycyB3ZXJlIGFkZGVkIGJldHdlZW4gc2F2ZSBhbmQgbG9hZClcbiAgY29uc3QgbGF5ZXJJZHNJblJlc3RvcmVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZ1bmN0aW9uIGNvbGxlY3RJZHMob3JkZXI6IGFueVtdKSB7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBvcmRlcikge1xuICAgICAgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICAgIGNvbGxlY3RJZHMoKGVudHJ5IGFzIExheWVyT3JkZXJHcm91cCkubGF5ZXJPcmRlcik7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgbGF5ZXJJZHNJblJlc3RvcmVkLmFkZChlbnRyeSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbGxlY3RJZHMocmVzdG9yZWRMYXllck9yZGVyKTtcblxuICAvLyBBZGQgYW55IG1pc3NpbmcgbGF5ZXJzIGF0IHRoZSB0b3BcbiAgY29uc3QgbWlzc2luZ0xheWVycyA9IHN0YXRlLmxheWVycy5maWx0ZXIobCA9PiAhbGF5ZXJJZHNJblJlc3RvcmVkLmhhcyhsLmlkKSkubWFwKGwgPT4gbC5pZCk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllck9yZGVyOiBbLi4ubWlzc2luZ0xheWVycywgLi4ucmVzdG9yZWRMYXllck9yZGVyXSxcbiAgICBsYXllck9yZGVyVG9CZU1lcmdlZDogbnVsbFxuICB9O1xufVxuXG4vKipcbiAqIE1lcmdlIGludGVyYWN0aW9ucyB3aXRoIHNhdmVkIGNvbmZpZ1xuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlSW50ZXJhY3Rpb25zPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBpbnRlcmFjdGlvblRvQmVNZXJnZWQ6IFBhcnRpYWw8U2F2ZWRJbnRlcmFjdGlvbkNvbmZpZz4gfCB1bmRlZmluZWRcbik6IFMge1xuICBjb25zdCBtZXJnZWQ6IE5lc3RlZFBhcnRpYWw8U2F2ZWRJbnRlcmFjdGlvbkNvbmZpZz4gPSB7fTtcbiAgY29uc3QgdW5tZXJnZWQ6IFBhcnRpYWw8U2F2ZWRJbnRlcmFjdGlvbkNvbmZpZz4gPSB7fTtcblxuICBpZiAoaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkKSB7XG4gICAgKE9iamVjdC5rZXlzKGludGVyYWN0aW9uVG9CZU1lcmdlZCkgYXMgQXJyYXk8a2V5b2YgU2F2ZWRJbnRlcmFjdGlvbkNvbmZpZz4pLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmICghc3RhdGUuaW50ZXJhY3Rpb25Db25maWdba2V5XSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRDb25maWcgPVxuICAgICAgICBrZXkgPT09ICd0b29sdGlwJyB8fCBrZXkgPT09ICdicnVzaCcgfHwga2V5ID09PSAnZ2VvY29kZXInXG4gICAgICAgICAgPyBzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1trZXldLmNvbmZpZ1xuICAgICAgICAgIDogbnVsbDtcblxuICAgICAgY29uc3Qge2VuYWJsZWQsIC4uLmNvbmZpZ1NhdmVkfSA9IGludGVyYWN0aW9uVG9CZU1lcmdlZFtrZXldIHx8IHt9O1xuXG4gICAgICBsZXQgY29uZmlnVG9NZXJnZSA9IGNvbmZpZ1NhdmVkO1xuXG4gICAgICBpZiAoa2V5ID09PSAndG9vbHRpcCcpIHtcbiAgICAgICAgY29uc3Qge21lcmdlZFRvb2x0aXAsIHVubWVyZ2VkVG9vbHRpcH0gPSBtZXJnZUludGVyYWN0aW9uVG9vbHRpcENvbmZpZyhcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBjb25maWdTYXZlZCBhcyBTYXZlZEludGVyYWN0aW9uQ29uZmlnWyd0b29sdGlwJ11cbiAgICAgICAgKTtcblxuICAgICAgICAvLyBtZXJnZSBuZXcgZGF0YXNldCB0b29sdGlwcyB3aXRoIG9yaWdpbmFsIGRhdGFzZXQgdG9vbHRpcHNcbiAgICAgICAgY29uZmlnVG9NZXJnZSA9IHtcbiAgICAgICAgICBmaWVsZHNUb1Nob3c6IHtcbiAgICAgICAgICAgIC4uLihjdXJyZW50Q29uZmlnIGFzIFRvb2x0aXBJbmZvWydjb25maWcnXSkuZmllbGRzVG9TaG93LFxuICAgICAgICAgICAgLi4ubWVyZ2VkVG9vbHRpcFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoT2JqZWN0LmtleXModW5tZXJnZWRUb29sdGlwKS5sZW5ndGgpIHtcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgdW5tZXJnZWQudG9vbHRpcCA9IHtmaWVsZHNUb1Nob3c6IHVubWVyZ2VkVG9vbHRpcCwgZW5hYmxlZDogQm9vbGVhbihlbmFibGVkKX07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbWVyZ2VkW2tleV0gPSB7XG4gICAgICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnW2tleV0sXG4gICAgICAgIGVuYWJsZWQ6IEJvb2xlYW4oZW5hYmxlZCksXG4gICAgICAgIC4uLihjdXJyZW50Q29uZmlnXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGNvbmZpZzogcGljayhcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAuLi5jdXJyZW50Q29uZmlnLFxuICAgICAgICAgICAgICAgICAgLi4uY29uZmlnVG9NZXJnZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoY3VycmVudENvbmZpZylcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge30pXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGludGVyYWN0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgIC4uLm1lcmdlZFxuICAgIH0sXG4gICAgaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkOiBzYXZlZFVubWVyZ2VkSW50ZXJhY3Rpb24oc3RhdGUsIHVubWVyZ2VkKVxuICB9O1xuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG5mdW5jdGlvbiBjb21iaW5lSW50ZXJhY3Rpb25Db25maWdzKGNvbmZpZ3M6IFNhdmVkSW50ZXJhY3Rpb25Db25maWdbXSk6IFNhdmVkSW50ZXJhY3Rpb25Db25maWcge1xuICBjb25zdCBjb21iaW5lZCA9IHsuLi5jb25maWdzWzBdfTtcbiAgLy8gaGFuZGxlIGVhY2ggcHJvcGVydHkga2V5IG9mIGFuIGBJbnRlcmFjdGlvbkNvbmZpZ2AsIGUuZy4gdG9vbHRpcCwgZ2VvY29kZXIsIGJydXNoLCBjb29yZGluYXRlXG4gIC8vIGJ5IGNvbWJpbmluZyB2YWx1ZXMgZm9yIGVhY2ggYW1vbmcgYWxsIHBhc3NlZCBpbiBjb25maWdzXG5cbiAgZm9yIChjb25zdCBrZXkgaW4gY29tYmluZWQpIHtcbiAgICBjb25zdCB0b0JlQ29tYmluZWRQcm9wcyA9IGNvbmZpZ3MubWFwKGMgPT4gY1trZXldKTtcblxuICAgIC8vIGFsbCBvZiB0aGVzZSBoYXZlIGFuIGVuYWJsZWQgYm9vbGVhblxuICAgIGNvbWJpbmVkW2tleV0gPSB7XG4gICAgICAvLyBhcmUgYW55IG9mIHRoZSBjb25maWdzJyBlbmFibGVkIHZhbHVlcyB0cnVlP1xuICAgICAgZW5hYmxlZDogdG9CZUNvbWJpbmVkUHJvcHMuc29tZShwID0+IHA/LmVuYWJsZWQpXG4gICAgfTtcblxuICAgIGlmIChrZXkgPT09ICd0b29sdGlwJykge1xuICAgICAgLy8gYXJlIGFueSBvZiB0aGUgY29uZmlncycgY29tcGFyZU1vZGUgdmFsdWVzIHRydWU/XG4gICAgICBjb21iaW5lZFtrZXldLmNvbXBhcmVNb2RlID0gdG9CZUNvbWJpbmVkUHJvcHMuc29tZShwID0+IHA/LmNvbXBhcmVNb2RlKTtcblxuICAgICAgLy8gcmV0dXJuIHRoZSBjb21wYXJlIHR5cGUgbW9kZSwgaXQgd2lsbCBiZSBlaXRoZXIgYWJzb2x1dGUgb3IgcmVsYXRpdmVcbiAgICAgIGNvbWJpbmVkW2tleV0uY29tcGFyZVR5cGUgPSBnZXRWYWx1ZVdpdGhIaWdoZXN0T2NjdXJyZW5jZShcbiAgICAgICAgdG9CZUNvbWJpbmVkUHJvcHMubWFwKHAgPT4gcC5jb21wYXJlVHlwZSlcbiAgICAgICk7XG5cbiAgICAgIC8vIGNvbWJpbmUgZmllbGRzVG9TaG93IGFtb25nIGFsbCBkYXRhc2V0IGlkc1xuICAgICAgY29tYmluZWRba2V5XS5maWVsZHNUb1Nob3cgPSB0b0JlQ29tYmluZWRQcm9wc1xuICAgICAgICAubWFwKHAgPT4gcC5maWVsZHNUb1Nob3cpXG4gICAgICAgIC5yZWR1Y2UoKGFjYywgbmV4dEZpZWxkc1RvU2hvdykgPT4ge1xuICAgICAgICAgIGZvciAoY29uc3QgbmV4dERhdGFJZEtleSBpbiBuZXh0RmllbGRzVG9TaG93KSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0VG9vbHRpcEZpZWxkcyA9IG5leHRGaWVsZHNUb1Nob3dbbmV4dERhdGFJZEtleV07XG4gICAgICAgICAgICBpZiAoIWFjY1tuZXh0RGF0YUlkS2V5XSkge1xuICAgICAgICAgICAgICAvLyBpZiB0aGUgZGF0YXNldCBpZCBpcyBub3QgcHJlc2VudCBpbiB0aGUgYWNjdW11bGF0b3JcbiAgICAgICAgICAgICAgLy8gdGhlbiBhZGQgaXQgd2l0aCBpdHMgdG9vbHRpcCBmaWVsZHNcbiAgICAgICAgICAgICAgYWNjW25leHREYXRhSWRLZXldID0gbmV4dFRvb2x0aXBGaWVsZHM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBvdGhlcndpc2UgdGhlIGRhdGFzZXQgaWQgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBhY2N1bXVsYXRvclxuICAgICAgICAgICAgICAvLyBzbyBvbmx5IGFkZCB0aGUgbmV4dCB0b29sdGlwIGZpZWxkcyBmb3IgdGhpcyBkYXRhc2V0J3MgYXJyYXkgaWYgdGhleSBhcmUgbm90IGFscmVhZHkgcHJlc2VudCxcbiAgICAgICAgICAgICAgLy8gdXNpbmcgdGhlIHRvb2x0aXBGaWVsZC5uYW1lIHByb3BlcnR5IGZvciB1bmlxdWVuZXNzXG4gICAgICAgICAgICAgIG5leHRUb29sdGlwRmllbGRzLmZvckVhY2gobmV4dFRGID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWFjY1tuZXh0RGF0YUlkS2V5XS5maW5kKCh7bmFtZX0pID0+IG5leHRURi5uYW1lID09PSBuYW1lKSkge1xuICAgICAgICAgICAgICAgICAgYWNjW25leHREYXRhSWRLZXldLnB1c2gobmV4dFRGKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCB7fSk7XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2JydXNoJykge1xuICAgICAgLy8ga2VlcCB0aGUgYmlnZ2VzdCBicnVzaCBzaXplXG4gICAgICBjb21iaW5lZFtrZXldLnNpemUgPVxuICAgICAgICBhZ2dyZWdhdGUodG9CZUNvbWJpbmVkUHJvcHMsIEFHR1JFR0FUSU9OX1RZUEVTLm1heGltdW0sIHAgPT4gcC5zaXplKSA/PyBudWxsO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdnZW9jb2RlcicpIHtcbiAgICAgIGNvbWJpbmVkW2tleV0ubGltaXRTZWFyY2ggPSB0b0JlQ29tYmluZWRQcm9wcy5zb21lKHAgPT4gcD8ubGltaXRTZWFyY2gpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb21iaW5lZDtcbn1cblxuZnVuY3Rpb24gc2F2ZWRVbm1lcmdlZEludGVyYWN0aW9uPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICB1bm1lcmdlZDogUGFydGlhbDxTYXZlZEludGVyYWN0aW9uQ29uZmlnPlxuKSB7XG4gIGlmICghdW5tZXJnZWQ/LnRvb2x0aXA/LmZpZWxkc1RvU2hvdykge1xuICAgIHJldHVybiBzdGF0ZS5pbnRlcmFjdGlvblRvQmVNZXJnZWQ7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB0b29sdGlwOiB7XG4gICAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvblRvQmVNZXJnZWQudG9vbHRpcCxcbiAgICAgIC4uLih0eXBlb2YgdW5tZXJnZWQ/LnRvb2x0aXA/LmVuYWJsZWQgPT09ICdib29sZWFuJ1xuICAgICAgICA/IHtlbmFibGVkOiB1bm1lcmdlZC50b29sdGlwLmVuYWJsZWR9XG4gICAgICAgIDoge30pLFxuICAgICAgZmllbGRzVG9TaG93OiB7XG4gICAgICAgIC4uLnN0YXRlLmludGVyYWN0aW9uVG9CZU1lcmdlZD8udG9vbHRpcD8uZmllbGRzVG9TaG93LFxuICAgICAgICAuLi51bm1lcmdlZD8udG9vbHRpcD8uZmllbGRzVG9TaG93XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiByZXBsYWNlSW50ZXJhY3Rpb25EYXRhc2V0SWRzKGludGVyYWN0aW9uQ29uZmlnLCBkYXRhSWQ6IHN0cmluZywgZGF0YUlkVG9SZXBsYWNlOiBzdHJpbmcpIHtcbiAgaWYgKGludGVyYWN0aW9uQ29uZmlnPy50b29sdGlwPy5maWVsZHNUb1Nob3dbZGF0YUlkXSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgLi4uaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcCxcbiAgICAgICAgZmllbGRzVG9TaG93OiB7XG4gICAgICAgICAgW2RhdGFJZFRvUmVwbGFjZV06IGludGVyYWN0aW9uQ29uZmlnPy50b29sdGlwPy5maWVsZHNUb1Nob3dbZGF0YUlkXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBNZXJnZSBzcGxpdE1hcHMgY29uZmlnIHdpdGggY3VycmVudCB2aXNTdGV0ZS5cbiAqIFBhbmVscyBhcmUgbWF0Y2hlZCBieSBpbmRleDogaW5kZXggaSBvZiBgc3BsaXRNYXBzYCwgYHN0YXRlLnNwbGl0TWFwc2AgYW5kXG4gKiBgc3RhdGUuc3BsaXRNYXBzVG9CZU1lcmdlZGAgaXMgdGhlIHNhbWUgbWFwIHBhbmVsLlxuICogMS4gaWYgY3VycmVudCBtYXAgaXMgc3BsaXQsIGJ1dCBzcGxpdE1hcCBET0VTTk9UIGNvbnRhaW4gbWFwc1xuICogICAgOiBkb24ndCBtZXJnZSBhbnl0aGluZ1xuICogMi4gaWYgY3VycmVudCBtYXAgaXMgTk9UIHNwbGl0LCBidXQgc3BsaXRNYXBzIGNvbnRhaW4gbWFwc1xuICogICAgOiBhZGQgdG8gc3BsaXRNYXBzLCBhbmQgYWRkIGN1cnJlbnQgbGF5ZXJzIHRvIHNwbGl0TWFwcy5cbiAqICAgICAgUGFuZWxzIGFyZSBjcmVhdGVkIG9uY2Ugb25lIG9mIHRoZW0gY2FuIGJlIG1lcmdlZDogaXQgaGFzIG5vIGxheWVycywgb3Igb25lIG9mIGl0cyBsYXllcnMgZXhpc3RzXG4gKiAzLiBsYXllcnMgdGhhdCBkb24ndCBleGlzdCB5ZXRcbiAqICAgIDogc2F2ZSB0byBzcGxpdE1hcHNUb0JlTWVyZ2VkLCBpbiB0aGUgcGFuZWwgYXQgdGhlIHNhbWUgaW5kZXhcbiAqIEEgbGF5ZXIgbGlzdGVkIGluIHNwbGl0TWFwcyBvbmx5IHNob3dzIGluIHRoZSBwYW5lbHMgdGhhdCBsaXN0IGl0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VTcGxpdE1hcHM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHNwbGl0TWFwczogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnc3BsaXRNYXBzJ10gPSBbXVxuKTogUyB7XG4gIGNvbnN0IGxheWVyRXhpc3RzID0gKGlkOiBzdHJpbmcpID0+IHN0YXRlLmxheWVycy5zb21lKGwgPT4gbC5pZCA9PT0gaWQpO1xuICBjb25zdCBjcmVhdGVQYW5lbHMgPVxuICAgIHN0YXRlLnNwbGl0TWFwcy5sZW5ndGggPiAwIHx8XG4gICAgc3BsaXRNYXBzLnNvbWUoc20gPT4ge1xuICAgICAgY29uc3QgaWRzID0gT2JqZWN0LmtleXMoc20ubGF5ZXJzKTtcbiAgICAgIHJldHVybiAhaWRzLmxlbmd0aCB8fCBpZHMuc29tZShsYXllckV4aXN0cyk7XG4gICAgfSk7XG4gIGNvbnN0IGN1cnJlbnRMYXllcnMgPSBnZXRJbml0aWFsTWFwTGF5ZXJzRm9yU3BsaXRNYXAoXG4gICAgc3RhdGUubGF5ZXJzLmZpbHRlcihsID0+ICFzcGxpdE1hcHMuc29tZShzbSA9PiBsLmlkIGluIHNtLmxheWVycykpXG4gICk7XG5cbiAgY29uc3QgbWVyZ2VkID0gWy4uLnN0YXRlLnNwbGl0TWFwc107XG4gIGNvbnN0IHVubWVyZ2VkOiB0eXBlb2Ygc3BsaXRNYXBzID0gW107XG4gIHNwbGl0TWFwcy5mb3JFYWNoKChzbSwgaSkgPT4ge1xuICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhzbS5sYXllcnMpO1xuICAgIGlmIChjcmVhdGVQYW5lbHMpIHtcbiAgICAgIC8vIGNyZWF0ZSBtYXAgcGFuZWwgaWYgY3VycmVudCBtYXAgaXMgbm90IHNwbGl0LCBrZWVwIGlkXG4gICAgICBjb25zdCBwYW5lbCA9IG1lcmdlZFtpXSB8fCB7Li4uc20sIGxheWVyczogY3VycmVudExheWVyc307XG4gICAgICBtZXJnZWRbaV0gPSB7XG4gICAgICAgIC4uLnBhbmVsLFxuICAgICAgICBsYXllcnM6IHsuLi5wYW5lbC5sYXllcnMsIC4uLk9iamVjdC5mcm9tRW50cmllcyhlbnRyaWVzLmZpbHRlcigoW2lkXSkgPT4gbGF5ZXJFeGlzdHMoaWQpKSl9XG4gICAgICB9O1xuICAgIH1cbiAgICB1bm1lcmdlZFtpXSA9IHsuLi5zbSwgbGF5ZXJzOiBPYmplY3QuZnJvbUVudHJpZXMoZW50cmllcy5maWx0ZXIoKFtpZF0pID0+ICFsYXllckV4aXN0cyhpZCkpKX07XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgc3BsaXRNYXBzOiBtZXJnZWQsXG4gICAgc3BsaXRNYXBzVG9CZU1lcmdlZDogdW5tZXJnZWQuc29tZShzbSA9PiBPYmplY3Qua2V5cyhzbS5sYXllcnMpLmxlbmd0aClcbiAgICAgID8gY29tYmluZVNwbGl0TWFwc0J5SW5kZXgoc3RhdGUuc3BsaXRNYXBzVG9CZU1lcmdlZCwgdW5tZXJnZWQpXG4gICAgICA6IHN0YXRlLnNwbGl0TWFwc1RvQmVNZXJnZWRcbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBjaGFydHMgd2l0aCBzYXZlZCBjb25maWcuIENoYXJ0cyB3aG9zZSBkYXRhc2V0IGlzIG5vdCBsb2FkZWQgeWV0IGFyZVxuICogcGFya2VkIG9uIGBjaGFydHNUb0JlTWVyZ2VkYCAoc2FtZSBhcyBmaWx0ZXJzKSBzbyBkYXRhc2V0IHJlcGxhY2UgY2FuIHJlbWFwXG4gKiBgZGF0YUlkYCBhbmQgcmVzdG9yZSB0aGVtIGFmdGVyIHRoZSBuZXcgdGFibGUgbGFuZHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUNoYXJ0czxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgY2hhcnRzOiBDaGFydENvbmZpZ1tdIHwgdW5kZWZpbmVkLFxuICBmcm9tQ29uZmlnPzogYm9vbGVhblxuKTogUyB7XG4gIGlmICghQXJyYXkuaXNBcnJheShjaGFydHMpIHx8ICFjaGFydHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGluY29taW5nSWRzID0gbmV3IFNldChcbiAgICBjaGFydHMubWFwKGNoYXJ0ID0+IGNoYXJ0Py5pZCkuZmlsdGVyKChpZCk6IGlkIGlzIHN0cmluZyA9PiBCb29sZWFuKGlkKSlcbiAgKTtcbiAgY29uc3QgZXhpc3RpbmdJZHMgPSBuZXcgU2V0KChzdGF0ZS5jaGFydHMgfHwgW10pLm1hcChjaGFydCA9PiBjaGFydC5pZCkpO1xuICBjb25zdCBuZXh0Q2hhcnRzOiBDaGFydENvbmZpZ1tdID0gW107XG4gIGNvbnN0IGZhaWxlZDogQ2hhcnRDb25maWdbXSA9IFtdO1xuICBjaGFydHMuZm9yRWFjaChjaGFydCA9PiB7XG4gICAgaWYgKCFjaGFydCB8fCAhY2hhcnQuaWQgfHwgZXhpc3RpbmdJZHMuaGFzKGNoYXJ0LmlkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBub3JtYWxpemVkOiBDaGFydENvbmZpZyA9IGZyb21Db25maWdcbiAgICAgID8ge1xuICAgICAgICAgIC4uLmNoYXJ0LFxuICAgICAgICAgIC8vIE9sZGVyIGNvbmZpZ3Mgb21pdCBgcGlubmVkYDsga2VlcCBjaGFydHMgdmlzaWJsZSBsaWtlIHRoZSBsZWdlbmQuXG4gICAgICAgICAgcGlubmVkOiBjaGFydC5waW5uZWQgIT09IGZhbHNlLFxuICAgICAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgICAgIC4uLmNoYXJ0LmRpc3BsYXksXG4gICAgICAgICAgICBpc0NvbmZpZ0FjdGl2ZTogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDogY2hhcnQ7XG4gICAgaWYgKFxuICAgICAgbm9ybWFsaXplZC5kYXRhSWQgJiZcbiAgICAgICghc3RhdGUuZGF0YXNldHNbbm9ybWFsaXplZC5kYXRhSWRdIHx8IHN0YXRlLmlzTWVyZ2luZ0RhdGFzZXRzW25vcm1hbGl6ZWQuZGF0YUlkXSlcbiAgICApIHtcbiAgICAgIGZhaWxlZC5wdXNoKG5vcm1hbGl6ZWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBleGlzdGluZ0lkcy5hZGQobm9ybWFsaXplZC5pZCk7XG4gICAgbmV4dENoYXJ0cy5wdXNoKG5vcm1hbGl6ZWQpO1xuICB9KTtcbiAgaWYgKCFuZXh0Q2hhcnRzLmxlbmd0aCAmJiAhZmFpbGVkLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNoYXJ0czogbmV4dENoYXJ0cy5sZW5ndGggPyBbLi4uKHN0YXRlLmNoYXJ0cyB8fCBbXSksIC4uLm5leHRDaGFydHNdIDogc3RhdGUuY2hhcnRzLFxuICAgIGNoYXJ0c1RvQmVNZXJnZWQ6IFtcbiAgICAgIC4uLihzdGF0ZS5jaGFydHNUb0JlTWVyZ2VkIHx8IFtdKS5maWx0ZXIoY2hhcnQgPT4gIWluY29taW5nSWRzLmhhcyhjaGFydC5pZCkpLFxuICAgICAgLi4uZmFpbGVkXG4gICAgXVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUNoYXJ0RGF0YXNldElkcyhcbiAgc2F2ZWRDaGFydHM6IENoYXJ0Q29uZmlnW10gfCB1bmRlZmluZWQsXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhSWRUb1VzZTogc3RyaW5nXG4pOiBDaGFydENvbmZpZ1tdIHwgbnVsbCB7XG4gIGlmICghQXJyYXkuaXNBcnJheShzYXZlZENoYXJ0cykgfHwgIXNhdmVkQ2hhcnRzLmxlbmd0aCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHJlcGxhY2VkID0gc2F2ZWRDaGFydHNcbiAgICAuZmlsdGVyKGNoYXJ0ID0+IGNoYXJ0Py5kYXRhSWQgPT09IGRhdGFJZClcbiAgICAubWFwKGNoYXJ0ID0+ICh7Li4uY2hhcnQsIGRhdGFJZDogZGF0YUlkVG9Vc2V9KSk7XG4gIHJldHVybiByZXBsYWNlZC5sZW5ndGggPyByZXBsYWNlZCA6IG51bGw7XG59XG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VFZmZlY3RzPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBlZmZlY3RzOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydlZmZlY3RzJ10sXG4gIGZyb21Db25maWc/OiBib29sZWFuXG4pOiBTIHtcbiAgY29uc3QgbmV3RWZmZWN0cyA9IFtcbiAgICAuLi5zdGF0ZS5lZmZlY3RzLFxuICAgIC4uLihlZmZlY3RzIHx8IFtdKVxuICAgICAgLm1hcChlZmZlY3QgPT4ge1xuICAgICAgICByZXR1cm4gZnJvbUNvbmZpZ1xuICAgICAgICAgID8gY3JlYXRlRWZmZWN0KFxuICAgICAgICAgICAgICBkZWVwbWVyZ2UuYWxsKFtcbiAgICAgICAgICAgICAgICBlZmZlY3QsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgLy8gY29sbGFwc2UgYWxsIHBhbmVscyB3aGVuIGxvYWRpbmcgZWZmZWN0c1xuICAgICAgICAgICAgICAgICAgaXNDb25maWdBY3RpdmU6IGZhbHNlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogKGVmZmVjdCBhcyBFZmZlY3RUeXBlKTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKGVmZmVjdCA9PiB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKGVmZmVjdCAmJiBlZmZlY3QuaXNWYWxpZFRvU2F2ZSgpKTtcbiAgICAgIH0pXG4gIF07XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWZmZWN0czogbmV3RWZmZWN0cyxcbiAgICBlZmZlY3RPcmRlcjogbmV3RWZmZWN0cy5tYXAoZWZmZWN0ID0+IGVmZmVjdC5pZClcbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBhbm5vdGF0aW9ucyB3aXRoIHNhdmVkIGNvbmZpZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VBbm5vdGF0aW9uczxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBhbm5vdGF0aW9uczogYW55W10pOiBTIHtcbiAgaWYgKCFhbm5vdGF0aW9ucyB8fCAhYW5ub3RhdGlvbnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGV4aXN0aW5nSWRzID0gbmV3IFNldChzdGF0ZS5hbm5vdGF0aW9ucy5tYXAoYSA9PiBhLmlkKSk7XG4gIGNvbnN0IHZhbGlkQW5ub3RhdGlvbnMgPSBhbm5vdGF0aW9uc1xuICAgIC5maWx0ZXIoXG4gICAgICBhID0+XG4gICAgICAgIGEgJiZcbiAgICAgICAgYS5pZCAmJlxuICAgICAgICAhZXhpc3RpbmdJZHMuaGFzKGEuaWQpICYmXG4gICAgICAgIGlzQW5ub3RhdGlvbktpbmQoYS5raW5kKSAmJlxuICAgICAgICBBcnJheS5pc0FycmF5KGEuYW5jaG9yUG9pbnQpICYmXG4gICAgICAgIChhLmFuY2hvclBvaW50Lmxlbmd0aCA9PT0gMiB8fCBhLmFuY2hvclBvaW50Lmxlbmd0aCA9PT0gMykgJiZcbiAgICAgICAgYS5hbmNob3JQb2ludC5ldmVyeSh2YWx1ZSA9PiBOdW1iZXIuaXNGaW5pdGUodmFsdWUpKVxuICAgIClcbiAgICAubWFwKGEgPT4gKHtcbiAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcbiAgICAgIGF1dG9TaXplOiB0cnVlLFxuICAgICAgYXV0b1NpemVZOiB0cnVlLFxuICAgICAgbGFiZWw6ICcnLFxuICAgICAgbGluZUNvbG9yOiBJTklUSUFMX0FOTk9UQVRJT05fTElORV9DT0xPUixcbiAgICAgIGxpbmVXaWR0aDogSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgsXG4gICAgICB0ZXh0V2lkdGg6IDAsXG4gICAgICB0ZXh0SGVpZ2h0OiAwLFxuICAgICAgLi4uYVxuICAgIH0pKTtcbiAgaWYgKCF2YWxpZEFubm90YXRpb25zLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGFubm90YXRpb25zOiBbLi4uc3RhdGUuYW5ub3RhdGlvbnMsIC4uLnZhbGlkQW5ub3RhdGlvbnNdXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2UgaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcCB3aXRoIHNhdmVkIGNvbmZpZyxcbiAqIHZhbGlkYXRlIGZpZWxkc1RvU2hvd1xuICpcbiAqIEBwYXJhbSBzdGF0ZVxuICogQHBhcmFtIHRvb2x0aXBDb25maWdcbiAqIEByZXR1cm4gLSB7bWVyZ2VkVG9vbHRpcDoge30sIHVubWVyZ2VkVG9vbHRpcDoge319XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUludGVyYWN0aW9uVG9vbHRpcENvbmZpZyhcbiAgc3RhdGU6IFZpc1N0YXRlLFxuICB0b29sdGlwQ29uZmlnOiBQaWNrPFRvb2x0aXBJbmZvWydjb25maWcnXSwgJ2ZpZWxkc1RvU2hvdyc+IHwgbnVsbCA9IG51bGxcbikge1xuICBjb25zdCB1bm1lcmdlZFRvb2x0aXA6IFRvb2x0aXBJbmZvWydjb25maWcnXVsnZmllbGRzVG9TaG93J10gPSB7fTtcbiAgY29uc3QgbWVyZ2VkVG9vbHRpcDogVG9vbHRpcEluZm9bJ2NvbmZpZyddWydmaWVsZHNUb1Nob3cnXSA9IHt9O1xuXG4gIGlmIChcbiAgICAhdG9vbHRpcENvbmZpZyB8fFxuICAgICF0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvdyB8fFxuICAgICFPYmplY3Qua2V5cyh0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvdykubGVuZ3RoXG4gICkge1xuICAgIHJldHVybiB7bWVyZ2VkVG9vbHRpcCwgdW5tZXJnZWRUb29sdGlwfTtcbiAgfVxuXG4gIGZvciAoY29uc3QgZGF0YUlkIGluIHRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93KSB7XG4gICAgaWYgKCFzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdIHx8IHN0YXRlLmlzTWVyZ2luZ0RhdGFzZXRzW2RhdGFJZF0pIHtcbiAgICAgIC8vIGlzIG5vdCB5ZXQgbG9hZGVkXG4gICAgICB1bm1lcmdlZFRvb2x0aXBbZGF0YUlkXSA9IHRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGlmIGRhdGFzZXQgaXMgbG9hZGVkXG4gICAgICBjb25zdCBhbGxGaWVsZHMgPSBzdGF0ZS5kYXRhc2V0c1tkYXRhSWRdLmZpZWxkcy5tYXAoZCA9PiBkLm5hbWUpO1xuICAgICAgY29uc3QgZm91bmRGaWVsZHNUb1Nob3cgPSB0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvd1tkYXRhSWRdLmZpbHRlcihmaWVsZCA9PlxuICAgICAgICBhbGxGaWVsZHMuaW5jbHVkZXMoZmllbGQubmFtZSlcbiAgICAgICk7XG5cbiAgICAgIG1lcmdlZFRvb2x0aXBbZGF0YUlkXSA9IGZvdW5kRmllbGRzVG9TaG93O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7bWVyZ2VkVG9vbHRpcCwgdW5tZXJnZWRUb29sdGlwfTtcbn1cbi8qKlxuICogTWVyZ2UgbGF5ZXJCbGVuZGluZyB3aXRoIHNhdmVkXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VMYXllckJsZW5kaW5nPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBsYXllckJsZW5kaW5nOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydsYXllckJsZW5kaW5nJ11cbik6IFMge1xuICBpZiAobGF5ZXJCbGVuZGluZyAmJiBMQVlFUl9CTEVORElOR1NbbGF5ZXJCbGVuZGluZ10pIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBsYXllckJsZW5kaW5nXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBDb21iaW5lcyBtdWx0aXBsZSBsYXllciBibGVuZGluZyBjb25maWdzIGludG8gYSBzaW5nbGUgc3RyaW5nXG4gKiBieSByZXR1cm5pbmcgdGhlIG9uZSB3aXRoIHRoZSBoaWdoZXN0IG9jY3VycmVuY2VcbiAqL1xuZnVuY3Rpb24gY29tYmluZUxheWVyQmxlbmRpbmdDb25maWdzKGNvbmZpZ3M6IHN0cmluZ1tdKTogc3RyaW5nIHwgbnVsbCB7XG4gIC8vIHJldHVybiB0aGUgbW9kZSBvZiB0aGUgbGF5ZXIgYmxlbmRpbmcgdHlwZVxuICByZXR1cm4gZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2UoY29uZmlncyk7XG59XG5cbi8qKlxuICogTWVyZ2Ugb3ZlcmxheUJsZW5kaW5nIHdpdGggc2F2ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlT3ZlcmxheUJsZW5kaW5nPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBvdmVybGF5QmxlbmRpbmc6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ292ZXJsYXlCbGVuZGluZyddXG4pOiBTIHtcbiAgaWYgKG92ZXJsYXlCbGVuZGluZyAmJiBPVkVSTEFZX0JMRU5ESU5HU1tvdmVybGF5QmxlbmRpbmddKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgb3ZlcmxheUJsZW5kaW5nXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBDb21iaW5lcyBtdWx0aXBsZSBvdmVybGF5IGJsZW5kaW5nIGNvbmZpZ3MgaW50byBhIHNpbmdsZSBzdHJpbmdcbiAqIGJ5IHJldHVybmluZyB0aGUgb25lIHdpdGggdGhlIGhpZ2hlc3Qgb2NjdXJyZW5jZVxuICoqL1xuZnVuY3Rpb24gY29tYmluZU92ZXJsYXlCbGVuZGluZ0NvbmZpZ3MoY29uZmlnczogc3RyaW5nW10pOiBzdHJpbmcgfCBudWxsIHtcbiAgLy8gcmV0dXJuIHRoZSBtb2RlIG9mIHRoZSBvdmVybGF5IGJsZW5kaW5nIHR5cGVcbiAgcmV0dXJuIGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlKGNvbmZpZ3MpO1xufVxuXG4vKipcbiAqIE1lcmdlIGFuaW1hdGlvbiBjb25maWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQW5pbWF0aW9uQ29uZmlnPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBhbmltYXRpb246IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2FuaW1hdGlvbkNvbmZpZyddXG4pOiBTIHtcbiAgaWYgKGFuaW1hdGlvbiAmJiBhbmltYXRpb24uY3VycmVudFRpbWUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBhbmltYXRpb25Db25maWc6IHtcbiAgICAgICAgLi4uc3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICAuLi5hbmltYXRpb24sXG4gICAgICAgIGRvbWFpbjogbnVsbFxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVBbmltYXRpb25Db25maWdzKGNvbmZpZ3M6IFNhdmVkQW5pbWF0aW9uQ29uZmlnW10pOiBTYXZlZEFuaW1hdGlvbkNvbmZpZyB7XG4gIC8vIGdldCB0aGUgc21hbGxlc3QgdmFsdWVzIG9mIGN1cnJlbnRUaW1lIGFuZCBzcGVlZCBhbW9uZyBhbGwgY29uZmlnc1xuICByZXR1cm4ge1xuICAgIGN1cnJlbnRUaW1lOiBhZ2dyZWdhdGUoY29uZmlncywgQUdHUkVHQVRJT05fVFlQRVMubWluaW11bSwgYyA9PiBjLmN1cnJlbnRUaW1lKSA/PyBudWxsLFxuICAgIHNwZWVkOiBhZ2dyZWdhdGUoY29uZmlncywgQUdHUkVHQVRJT05fVFlQRVMubWluaW11bSwgYyA9PiBjLnNwZWVkKSA/PyBudWxsLFxuICAgIC8vIGFuZCB0aGUgbW9zdCBjb21tb24gdGltZSBmb3JtYXQgYW5kIHRpbWV6b25lIGFtb25nIHRoZSBjb25maWdzIHRoYXQgc2V0IG9uZVxuICAgIHRpbWVGb3JtYXQ6IGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlKGNvbmZpZ3MubWFwKGMgPT4gYy50aW1lRm9ybWF0KSksXG4gICAgdGltZXpvbmU6IGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlKGNvbmZpZ3MubWFwKGMgPT4gYy50aW1lem9uZSkpXG4gIH07XG59XG5cbi8qKlxuICogVmFsaWRhdGUgc2F2ZWQgbGF5ZXIgY29sdW1ucyB3aXRoIG5ldyBkYXRhLFxuICogdXBkYXRlIGZpZWxkSWR4IGJhc2VkIG9uIG5ldyBmaWVsZHNcbiAqXG4gKiBAcGFyYW0gZmllbGRzXG4gKiBAcGFyYW0gc2F2ZWRDb2xzXG4gKiBAcGFyYW0gZW1wdHlDb2xzXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQHJldHVybiAtIHZhbGlkYXRlZCBjb2x1bW5zIG9yIG51bGxcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTYXZlZExheWVyQ29sdW1ucyhcbiAgZmllbGRzOiBLZXBsZXJUYWJsZVsnZmllbGRzJ10sXG4gIHNhdmVkQ29sczoge1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZztcbiAgfSA9IHt9LFxuICBlbXB0eUNvbHM6IExheWVyQ29sdW1ucyxcbiAgb3B0aW9uczoge3Rocm93T25FcnJvcj86IGJvb2xlYW59ID0ge31cbikge1xuICAvLyBQcmVwYXJlIGNvbHVtbnMgZm9yIHRoZSB2YWxpZGF0b3JcbiAgY29uc3QgY29sdW1uczogdHlwZW9mIGVtcHR5Q29scyA9IHt9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhlbXB0eUNvbHMpKSB7XG4gICAgY29sdW1uc1trZXldID0gey4uLmVtcHR5Q29sc1trZXldfTtcblxuICAgIGNvbnN0IHNhdmVkID0gc2F2ZWRDb2xzW2tleV07XG4gICAgaWYgKHNhdmVkKSB7XG4gICAgICBjb25zdCBmaWVsZElkeCA9IGZpZWxkcy5maW5kSW5kZXgoKHtuYW1lfSkgPT4gbmFtZSA9PT0gc2F2ZWQpO1xuXG4gICAgICBpZiAoZmllbGRJZHggPiAtMSkge1xuICAgICAgICAvLyB1cGRhdGUgZm91bmQgY29sdW1uc1xuICAgICAgICBjb2x1bW5zW2tleV0uZmllbGRJZHggPSBmaWVsZElkeDtcbiAgICAgICAgY29sdW1uc1trZXldLnZhbHVlID0gc2F2ZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gZmluZCBhY3R1YWwgY29sdW1uIGZpZWxkSWR4LCBpbiBjYXNlIGl0IGhhcyBjaGFuZ2VkXG4gIGNvbnN0IGFsbENvbEZvdW5kID0gT2JqZWN0LmtleXMoY29sdW1ucykuZXZlcnkoa2V5ID0+XG4gICAgdmFsaWRhdGVDb2x1bW4oY29sdW1uc1trZXldLCBjb2x1bW5zLCBmaWVsZHMpXG4gICk7XG5cbiAgY29uc3QgcnYgPSBhbGxDb2xGb3VuZCA/IGNvbHVtbnMgOiBudWxsO1xuICBpZiAob3B0aW9ucy50aHJvd09uRXJyb3IpIHtcbiAgICBjb25zdCByZXF1aXJlZENvbHVtbnMgPSBPYmplY3Qua2V5cyhlbXB0eUNvbHMpLmZpbHRlcihrID0+ICFlbXB0eUNvbHNba10ub3B0aW9uYWwpO1xuICAgIGNvbnN0IG1pc3NpbmdDb2x1bW5zID0gcmVxdWlyZWRDb2x1bW5zLmZpbHRlcihrID0+ICFjb2x1bW5zPy5ba10udmFsdWUpO1xuICAgIGlmIChtaXNzaW5nQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIG1pc3Npbmcgb3IgaW52YWxpZCBjb2x1bW5zOiAke21pc3NpbmdDb2x1bW5zLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICAgIGNvbnN0IGNvbmZpZ0NvbHVtbnMgPSBPYmplY3Qua2V5cyhzYXZlZENvbHMpO1xuICAgIGNvbnN0IGludmFsaWRDb2x1bW5zID0gY29uZmlnQ29sdW1ucy5maWx0ZXIoayA9PiAhY29sdW1ucz8uW2tdPy52YWx1ZSk7XG4gICAgaWYgKGludmFsaWRDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXllciBoYXMgaW52YWxpZCBjb2x1bW5zOiAke2ludmFsaWRDb2x1bW5zLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJ2O1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIGxheWVyIGNvbHVtblxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVDb2x1bW4oXG4gIGNvbHVtbjogTGF5ZXJDb2x1bW4gJiB7dmFsaWRhdG9yPzogdHlwZW9mIHZhbGlkYXRlQ29sdW1ufSxcbiAgY29sdW1uczogTGF5ZXJDb2x1bW5zLFxuICBhbGxGaWVsZHM6IEtlcGxlclRhYmxlWydmaWVsZHMnXVxuKTogYm9vbGVhbiB7XG4gIGlmIChjb2x1bW4ub3B0aW9uYWwgfHwgY29sdW1uLnZhbHVlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGNvbHVtbi52YWxpZGF0b3IpIHtcbiAgICByZXR1cm4gY29sdW1uLnZhbGlkYXRvcihjb2x1bW4sIGNvbHVtbnMsIGFsbEZpZWxkcyk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIHRleHQgbGFiZWwgY29uZmlnIHdpdGggbmV3IGRhdGFcbiAqIHJlZmVyIHRvIHZpcy1zdGF0ZS1zY2hlbWEuanMgVGV4dExhYmVsU2NoZW1hVjFcbiAqXG4gKiBAcGFyYW0ge0FycmF5PE9iamVjdD59IGZpZWxkc1xuICogQHBhcmFtIHtPYmplY3R9IHNhdmVkVGV4dExhYmVsXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7T2JqZWN0fSAtIHZhbGlkYXRlZCB0ZXh0bGFiZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2F2ZWRUZXh0TGFiZWwoXG4gIGZpZWxkcyxcbiAgW2xheWVyVGV4dExhYmVsXSxcbiAgc2F2ZWRUZXh0TGFiZWwsXG4gIG9wdGlvbnM6IHt0aHJvd09uRXJyb3I/OiBib29sZWFufSA9IHt9XG4pIHtcbiAgY29uc3Qgc2F2ZWRUZXh0TGFiZWxzID0gQXJyYXkuaXNBcnJheShzYXZlZFRleHRMYWJlbCkgPyBzYXZlZFRleHRMYWJlbCA6IFtzYXZlZFRleHRMYWJlbF07XG5cbiAgLy8gdmFsaWRhdGUgZmllbGRcbiAgcmV0dXJuIHNhdmVkVGV4dExhYmVscy5tYXAodGV4dExhYmVsID0+IHtcbiAgICBjb25zdCBmaWVsZCA9IHRleHRMYWJlbC5maWVsZFxuICAgICAgPyBmaWVsZHMuZmluZChmZCA9PlxuICAgICAgICAgIE9iamVjdC5rZXlzKHRleHRMYWJlbC5maWVsZCkuZXZlcnkoa2V5ID0+IHRleHRMYWJlbC5maWVsZFtrZXldID09PSBmZFtrZXldKVxuICAgICAgICApXG4gICAgICA6IG51bGw7XG5cbiAgICBpZiAoZmllbGQgPT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLnRocm93T25FcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXllciBoYXMgaW52YWxpZCB0ZXh0IGxhYmVsIGZpZWxkOiAke0pTT04uc3RyaW5naWZ5KHRleHRMYWJlbC5maWVsZCl9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGxheWVyVGV4dExhYmVsKS5yZWR1Y2UoXG4gICAgICAoYWNjdSwga2V5KSA9PiAoe1xuICAgICAgICAuLi5hY2N1LFxuICAgICAgICBba2V5XToga2V5ID09PSAnZmllbGQnID8gZmllbGQgOiB0ZXh0TGFiZWxba2V5XSB8fCBsYXllclRleHRMYWJlbFtrZXldXG4gICAgICB9KSxcbiAgICAgIHt9XG4gICAgKTtcbiAgfSk7XG59XG5cbi8qKlxuICogU2F2ZWQgdmlzdWFsIGNoYW5uZWwgZmllbGQvc2NhbGUgbWF5IGxpdmUgaW4gYW55IG9mOlxuICogLSBgY29uZmlnW2tleV1gIGFmdGVyIHNjaGVtYSBwYXJzZSAoVmlzdWFsQ2hhbm5lbFNjaGVtYVYxIGZvbGRzIGNoYW5uZWxzIGludG8gY29uZmlnKVxuICogLSBgdmlzdWFsQ2hhbm5lbHNba2V5XWAgYXMgYSBzaWJsaW5nIG9mIGBjb25maWdgICh1bnBhcnNlZCBhZGREYXRhVG9NYXAgcGF5bG9hZClcbiAqIC0gYGNvbmZpZy52aXN1YWxDaGFubmVsc1trZXldYCAoY29tbW9uIG1pc3Rha2Ugb2YgbmVzdGluZyB2aXN1YWxDaGFubmVscyBpbnNpZGUgY29uZmlnKVxuICpcbiAqIFdpdGhvdXQgdGhpcyBsb29rdXAsIHByb2dyYW1tYXRpYyBHZW9KU09OIHN0cm9rZUNvbG9yRmllbGQgbmV2ZXIgYmluZHMgYW5kXG4gKiBzdHJva2VDb2xvckRvbWFpbiBzdGF5cyBhdCB0aGUgZGVmYXVsdCBgWzAsIDFdYCAoa2VwbGVyLmdsICMzMDYxKS5cbiAqL1xuZnVuY3Rpb24gZ2V0U2F2ZWRWaXN1YWxDaGFubmVsVmFsdWUoc2F2ZWRMYXllcjogUGFyc2VkTGF5ZXIsIGtleTogc3RyaW5nKTogYW55IHtcbiAgY29uc3QgY29uZmlnID0gc2F2ZWRMYXllci5jb25maWcgYXMgUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZDtcbiAgaWYgKGNvbmZpZyAmJiBjb25maWdba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGNvbmZpZ1trZXldO1xuICB9XG4gIGNvbnN0IGNoYW5uZWxzID1cbiAgICAoc2F2ZWRMYXllciBhcyB7dmlzdWFsQ2hhbm5lbHM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+fSkudmlzdWFsQ2hhbm5lbHMgfHxcbiAgICAoY29uZmlnICYmIGNvbmZpZy52aXN1YWxDaGFubmVscyk7XG4gIGlmIChjaGFubmVscyAmJiB0eXBlb2YgY2hhbm5lbHMgPT09ICdvYmplY3QnICYmIGNoYW5uZWxzW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBjaGFubmVsc1trZXldO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgc2F2ZWQgdmlzdWFsIGNoYW5uZWxzIGNvbmZpZyB3aXRoIG5ldyBkYXRhLFxuICogcmVmZXIgdG8gdmlzLXN0YXRlLXNjaGVtYS5qcyBWaXN1YWxDaGFubmVsU2NoZW1hVjFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2F2ZWRWaXN1YWxDaGFubmVscyhcbiAgZmllbGRzOiBLZXBsZXJUYWJsZVsnZmllbGRzJ10sXG4gIG5ld0xheWVyOiBMYXllcixcbiAgc2F2ZWRMYXllcjogUGFyc2VkTGF5ZXIsXG4gIG9wdGlvbnM6IHt0aHJvd09uRXJyb3I/OiBib29sZWFufSA9IHt9XG4pOiBudWxsIHwgTGF5ZXIge1xuICBPYmplY3QudmFsdWVzKG5ld0xheWVyLnZpc3VhbENoYW5uZWxzKS5mb3JFYWNoKCh7ZmllbGQsIHNjYWxlLCBrZXl9KSA9PiB7XG4gICAgY29uc3Qgc2F2ZWRGaWVsZCA9IGdldFNhdmVkVmlzdWFsQ2hhbm5lbFZhbHVlKHNhdmVkTGF5ZXIsIGZpZWxkKTtcbiAgICBjb25zdCBzYXZlZFNjYWxlID0gZ2V0U2F2ZWRWaXN1YWxDaGFubmVsVmFsdWUoc2F2ZWRMYXllciwgc2NhbGUpO1xuICAgIGxldCBmb3VuZEZpZWxkO1xuICAgIGlmIChzYXZlZEZpZWxkPy5uYW1lKSB7XG4gICAgICBmb3VuZEZpZWxkID0gZmllbGRzLmZpbmQoZmQgPT4gZmQubmFtZSA9PT0gc2F2ZWRGaWVsZC5uYW1lKTtcbiAgICB9XG5cbiAgICBjb25zdCBmb3VuZENoYW5uZWwgPSB7XG4gICAgICAuLi4oZm91bmRGaWVsZCA/IHtbZmllbGRdOiBmb3VuZEZpZWxkfSA6IHt9KSxcbiAgICAgIC4uLihzYXZlZFNjYWxlID8ge1tzY2FsZV06IHNhdmVkU2NhbGV9IDoge30pXG4gICAgfTtcbiAgICBpZiAoT2JqZWN0LmtleXMoZm91bmRDaGFubmVsKS5sZW5ndGgpIHtcbiAgICAgIG5ld0xheWVyLnVwZGF0ZUxheWVyQ29uZmlnKGZvdW5kQ2hhbm5lbCk7XG4gICAgfVxuXG4gICAgbmV3TGF5ZXIudmFsaWRhdGVWaXN1YWxDaGFubmVsKGtleSk7XG4gICAgaWYgKG9wdGlvbnMudGhyb3dPbkVycm9yKSB7XG4gICAgICBjb25zdCBmaWVsZE5hbWUgPSBzYXZlZEZpZWxkPy5uYW1lO1xuICAgICAgaWYgKGZpZWxkTmFtZSAmJiBmaWVsZE5hbWUgIT09IG5ld0xheWVyLmNvbmZpZ1tmaWVsZF0/Lm5hbWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXllciBoYXMgaW52YWxpZCB2aXN1YWwgY2hhbm5lbCBmaWVsZDogJHtmaWVsZH1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbmV3TGF5ZXI7XG59XG5cbnR5cGUgVmFsaWRhdGVMYXllck9wdGlvbiA9IHtcbiAgYWxsb3dFbXB0eUNvbHVtbj86IGJvb2xlYW47XG4gIHRocm93T25FcnJvcj86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVMYXllcnNCeURhdGFzZXRzKFxuICBkYXRhc2V0czogRGF0YXNldHMsXG4gIGxheWVyQ2xhc3NlczogVmlzU3RhdGVbJ2xheWVyQ2xhc3NlcyddLFxuICBsYXllcnM6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2xheWVycyddID0gW10sXG4gIG9wdGlvbnM/OiBWYWxpZGF0ZUxheWVyT3B0aW9uXG4pIHtcbiAgY29uc3QgdmFsaWRhdGVkOiBMYXllcltdID0gW107XG4gIGNvbnN0IGZhaWxlZDogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnbGF5ZXJzJ10gPSBbXTtcblxuICBsYXllcnMuZm9yRWFjaChsYXllciA9PiB7XG4gICAgbGV0IHZhbGlkYXRlTGF5ZXI6IExheWVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICBpZiAobGF5ZXI/LmNvbmZpZz8uZGF0YUlkKSB7XG4gICAgICBpZiAoZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF0pIHtcbiAgICAgICAgLy8gZGF0YXNldHMgYXJlIGFscmVhZHkgbG9hZGVkXG4gICAgICAgIHZhbGlkYXRlTGF5ZXIgPSB2YWxpZGF0ZUxheWVyV2l0aERhdGEoXG4gICAgICAgICAgZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF0sXG4gICAgICAgICAgbGF5ZXIsXG4gICAgICAgICAgbGF5ZXJDbGFzc2VzLFxuICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVMYXllcikge1xuICAgICAgdmFsaWRhdGVkLnB1c2godmFsaWRhdGVMYXllcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRhdGFzZXRzIG5vdCB5ZXQgbG9hZGVkXG4gICAgICBmYWlsZWQucHVzaChsYXllcik7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4ge3ZhbGlkYXRlZCwgZmFpbGVkfTtcbn1cblxuLyoqXG4gKiBHZXQgcmVxdWlyZWQgY29sdW1ucyBmb3IgdmFsaWRhdGlvbiBiYXNlZCBvbiBjb2x1bW4gbW9kZVxuICovXG5mdW5jdGlvbiBfZ2V0Q29sdW1uQ29uZmlnRm9yVmFsaWRhdGlvbihuZXdMYXllcikge1xuICAvLyBmaW5kIGNvbHVtbiBmaWVsZElkeFxuICBsZXQgY29sdW1uQ29uZmlnID0gbmV3TGF5ZXIuZ2V0TGF5ZXJDb2x1bW5zKCk7XG4gIC8vIGlmIGNvbHVtbk1vZGUgaXMgZGVmaW5lZCwgZmluZCBjb2x1bW4gbW9kZSBjb25maWdcbiAgY29uc3QgY29sTW9kZUNvbmZpZyA9IG5ld0xheWVyLmNvbmZpZy5jb2x1bW5Nb2RlXG4gICAgPyAobmV3TGF5ZXIuc3VwcG9ydGVkQ29sdW1uTW9kZXMgfHwgW10pLmZpbmQoXG4gICAgICAgIGNvbE1vZGUgPT4gY29sTW9kZS5rZXkgPT09IG5ld0xheWVyLmNvbmZpZy5jb2x1bW5Nb2RlXG4gICAgICApXG4gICAgOiBudWxsO1xuXG4gIGlmIChjb2xNb2RlQ29uZmlnKSB7XG4gICAgLy8gb25seSB2YWxpZGF0ZSBjb2x1bW5zIGluIGNvbHVtbiBtb2RlIChpbmNsdWRpbmcgdGFiYmVkIGNvbHVtbkdyb3VwcylcbiAgICBjb25zdCBncm91cENvbHVtbnMgPSAoY29sTW9kZUNvbmZpZy5jb2x1bW5Hcm91cHMgfHwgW10pLmZsYXRNYXAoZ3JvdXAgPT4gZ3JvdXAuY29sdW1ucyB8fCBbXSk7XG4gICAgY29uc3QgcmVxdWlyZWRLZXlzID0gbmV3IFNldChjb2xNb2RlQ29uZmlnLnJlcXVpcmVkQ29sdW1ucyB8fCBbXSk7XG4gICAgY29sdW1uQ29uZmlnID0gW1xuICAgICAgLi4uKGNvbE1vZGVDb25maWcucmVxdWlyZWRDb2x1bW5zIHx8IFtdKSxcbiAgICAgIC4uLihjb2xNb2RlQ29uZmlnLm9wdGlvbmFsQ29sdW1ucyB8fCBbXSksXG4gICAgICAuLi5ncm91cENvbHVtbnNcbiAgICBdLnJlZHVjZSgoYWNjdSwga2V5KSA9PiB7XG4gICAgICBjb25zdCBjb2wgPSBjb2x1bW5Db25maWdba2V5XTtcbiAgICAgIGlmICghY29sKSB7XG4gICAgICAgIHJldHVybiBhY2N1O1xuICAgICAgfVxuICAgICAgLy8gT3B0aW9uYWxpdHkgbXVzdCBmb2xsb3cgdGhlIGFjdGl2ZSBtb2RlOiBhIGZpZWxkIG9wdGlvbmFsIGluIGFub3RoZXIgbW9kZVxuICAgICAgLy8gKGUuZy4gYWx0aXR1ZGUgaW4gVVYpIGlzIHN0aWxsIHJlcXVpcmVkIHdoZW4gdGhpcyBtb2RlIGxpc3RzIGl0IGluIHJlcXVpcmVkQ29sdW1ucy5cbiAgICAgIGlmIChyZXF1aXJlZEtleXMuaGFzKGtleSkpIHtcbiAgICAgICAgY29uc3Qge29wdGlvbmFsOiBfb3B0aW9uYWwsIC4uLnJlcXVpcmVkQ29sfSA9IGNvbDtcbiAgICAgICAgcmV0dXJuIHsuLi5hY2N1LCBba2V5XTogcmVxdWlyZWRDb2x9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsuLi5hY2N1LCBba2V5XTogey4uLmNvbCwgb3B0aW9uYWw6IHRydWV9fTtcbiAgICB9LCB7fSk7XG4gIH1cblxuICByZXR1cm4gY29sdW1uQ29uZmlnO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIGxheWVyIGNvbmZpZyB3aXRoIG5ldyBkYXRhLFxuICogdXBkYXRlIGZpZWxkSWR4IGJhc2VkIG9uIG5ldyBmaWVsZHNcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUxheWVyV2l0aERhdGEoXG4gIGRhdGFzZXQ6IEtlcGxlclRhYmxlLFxuICBzYXZlZExheWVyOiBQYXJzZWRMYXllcixcbiAgbGF5ZXJDbGFzc2VzOiBWaXNTdGF0ZVsnbGF5ZXJDbGFzc2VzJ10sXG4gIG9wdGlvbnM6IFZhbGlkYXRlTGF5ZXJPcHRpb24gPSB7fVxuKTogTGF5ZXIgfCBudWxsIHtcbiAgY29uc3Qge2ZpZWxkcywgaWQ6IGRhdGFJZH0gPSBkYXRhc2V0O1xuICBjb25zdCB7dHlwZX0gPSBzYXZlZExheWVyO1xuICBjb25zdCB7dGhyb3dPbkVycm9yfSA9IG9wdGlvbnM7XG4gIC8vIGxheWVyIGRvZXNudCBoYXZlIGEgdmFsaWQgdHlwZVxuICBpZiAoIXR5cGUgfHwgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsYXllckNsYXNzZXMsIHR5cGUpIHx8ICFzYXZlZExheWVyLmNvbmZpZykge1xuICAgIGlmICh0aHJvd09uRXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIGludmFsaWQgdHlwZSBcIiR7dHlwZX1cIiBvciBjb25maWcgaXMgbWlzc2luZ2ApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGxldCBuZXdMYXllciA9IG5ldyBsYXllckNsYXNzZXNbdHlwZV0oe1xuICAgIGlkOiBzYXZlZExheWVyLmlkLFxuICAgIGRhdGFJZCxcbiAgICBsYWJlbDogc2F2ZWRMYXllci5jb25maWcubGFiZWwsXG4gICAgY29sb3I6IHNhdmVkTGF5ZXIuY29uZmlnLmNvbG9yLFxuICAgIGlzVmlzaWJsZTogc2F2ZWRMYXllci5jb25maWcuaXNWaXNpYmxlLFxuICAgIGhpZGRlbjogc2F2ZWRMYXllci5jb25maWcuaGlkZGVuLFxuICAgIGNvbHVtbk1vZGU6IHNhdmVkTGF5ZXIuY29uZmlnLmNvbHVtbk1vZGUsXG4gICAgaGlnaGxpZ2h0Q29sb3I6IHNhdmVkTGF5ZXIuY29uZmlnLmhpZ2hsaWdodENvbG9yXG4gIH0pO1xuXG4gIGNvbnN0IGNvbHVtbkNvbmZpZyA9IF9nZXRDb2x1bW5Db25maWdGb3JWYWxpZGF0aW9uKG5ld0xheWVyKTtcblxuICBpZiAoT2JqZWN0LmtleXMoY29sdW1uQ29uZmlnKSkge1xuICAgIGNvbnN0IGNvbHVtbnMgPSB2YWxpZGF0ZVNhdmVkTGF5ZXJDb2x1bW5zKFxuICAgICAgZmllbGRzLFxuICAgICAgc2F2ZWRMYXllci5jb25maWcuY29sdW1ucyxcbiAgICAgIGNvbHVtbkNvbmZpZyxcbiAgICAgIG9wdGlvbnNcbiAgICApO1xuICAgIGlmIChjb2x1bW5zKSB7XG4gICAgICBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgIGNvbHVtbnM6IHtcbiAgICAgICAgICAuLi5uZXdMYXllci5jb25maWcuY29sdW1ucyxcbiAgICAgICAgICAuLi5jb2x1bW5zXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoIW9wdGlvbnMuYWxsb3dFbXB0eUNvbHVtbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgdGV4dExhYmVsID1cbiAgICBzYXZlZExheWVyLmNvbmZpZy50ZXh0TGFiZWwgJiYgbmV3TGF5ZXIuY29uZmlnLnRleHRMYWJlbFxuICAgICAgPyB2YWxpZGF0ZVNhdmVkVGV4dExhYmVsKFxuICAgICAgICAgIGZpZWxkcyxcbiAgICAgICAgICBuZXdMYXllci5jb25maWcudGV4dExhYmVsLFxuICAgICAgICAgIHNhdmVkTGF5ZXIuY29uZmlnLnRleHRMYWJlbCxcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgIClcbiAgICAgIDogbmV3TGF5ZXIuY29uZmlnLnRleHRMYWJlbDtcblxuICAvLyBjb3B5IHZpc0NvbmZpZyBvdmVyIHRvIGVtcHR5TGF5ZXIgdG8gbWFrZSBzdXJlIGl0IGhhcyBhbGwgdGhlIHByb3BzXG4gIGNvbnN0IGNvcGllZFZpc0NvbmZpZyA9IG5ld0xheWVyLmNvcHlMYXllckNvbmZpZyhcbiAgICBuZXdMYXllci5jb25maWcudmlzQ29uZmlnLFxuICAgIHNhdmVkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZyB8fCB7fSxcbiAgICB7XG4gICAgICBzaGFsbG93Q29weTogWydjb2xvclJhbmdlJywgJ3N0cm9rZUNvbG9yUmFuZ2UnXVxuICAgIH1cbiAgKTtcblxuICAvLyBjYWxsIGxheWVyIG1ldGhvZHMgdG8gdmFsaWRhdGUgdmlzQ29uZmlnIHdoZW4gc3dpdGNoaW5nIGRhdGFzZXRcbiAgY29uc3QgdmlzQ29uZmlnID0gbmV3TGF5ZXIudmFsaWRhdGVWaXNDb25maWdcbiAgICA/IG5ld0xheWVyLnZhbGlkYXRlVmlzQ29uZmlnKGRhdGFzZXQsIGNvcGllZFZpc0NvbmZpZylcbiAgICA6IGNvcGllZFZpc0NvbmZpZztcblxuICBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgdmlzQ29uZmlnLFxuICAgIHRleHRMYWJlbFxuICB9KTtcblxuICAvLyB2aXN1YWwgY2hhbm5lbCBmaWVsZCBpcyBzYXZlZCB0byBiZSB7bmFtZSwgdHlwZX1cbiAgLy8gZmluZCB2aXN1YWwgY2hhbm5lbCBmaWVsZCBieSBtYXRjaGluZyBib3RoIG5hbWUgYW5kIHR5cGVcbiAgLy8gcmVmZXIgdG8gdmlzLXN0YXRlLXNjaGVtYS5qcyBWaXN1YWxDaGFubmVsU2NoZW1hVjFcbiAgbmV3TGF5ZXIgPSB2YWxpZGF0ZVNhdmVkVmlzdWFsQ2hhbm5lbHMoZmllbGRzLCBuZXdMYXllciwgc2F2ZWRMYXllciwgb3B0aW9ucyk7XG5cbiAgaWYgKHRocm93T25FcnJvcikge1xuICAgIGlmICghbmV3TGF5ZXIuaXNWYWxpZFRvU2F2ZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGlzIG5vdCB2YWxpZCB0byBzYXZlOiAke25ld0xheWVyLmlkfWApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdMYXllcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRWRpdG9yPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIHNhdmVkRWRpdG9yOiBTYXZlZEVkaXRvcikge1xuICBpZiAoIXNhdmVkRWRpdG9yKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBmZWF0dXJlczogWy4uLnN0YXRlLmVkaXRvci5mZWF0dXJlcywgLi4uKHNhdmVkRWRpdG9yLmZlYXR1cmVzIHx8IFtdKV0sXG4gICAgICAvLyBpZiBzYXZlZEVkaXRvci52aXNpYmxlIGlzIHVuZGVmaW5lZCBrZWVwIHN0YXRlLmVkaXRvci52aXNpYmxlXG4gICAgICB2aXNpYmxlOiBzYXZlZEVkaXRvci52aXNpYmxlID8/IHN0YXRlLmVkaXRvci52aXNpYmxlXG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBjb21iaW5lRWRpdG9yQ29uZmlncyhjb25maWdzOiBTYXZlZEVkaXRvcltdKTogU2F2ZWRFZGl0b3Ige1xuICByZXR1cm4gY29uZmlncy5yZWR1Y2UoXG4gICAgKGFjYywgbmV4dENvbmZpZykgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYWNjLFxuICAgICAgICBmZWF0dXJlczogWy4uLmFjYy5mZWF0dXJlcywgLi4uKG5leHRDb25maWcuZmVhdHVyZXMgfHwgW10pXVxuICAgICAgfTtcbiAgICB9LFxuICAgIHtcbiAgICAgIC8vIHN0YXJ0IHdpdGg6XG4gICAgICAvLyAtIGVtcHR5IGFycmF5IGZvciBmZWF0dXJlcyBhY2N1bXVsYXRpb25cbiAgICAgIC8vIC0gYW5kIGFyZSBhbnkgb2YgdGhlIGNvbmZpZ3MnIHZpc2libGUgdmFsdWVzIHRydWU/XG4gICAgICBmZWF0dXJlczogW10sXG4gICAgICB2aXNpYmxlOiBjb25maWdzLnNvbWUoYyA9PiBjPy52aXNpYmxlKVxuICAgIH1cbiAgKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCBsYXllciBjb25maWcgd2l0aCBuZXcgZGF0YSxcbiAqIHVwZGF0ZSBmaWVsZElkeCBiYXNlZCBvbiBuZXcgZmllbGRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZURhdGFzZXRzQnlPcmRlcihzdGF0ZTogVmlzU3RhdGUsIG5ld0RhdGFFbnRyaWVzOiBEYXRhc2V0cyk6IERhdGFzZXRzIHtcbiAgY29uc3QgbWVyZ2VkID0ge1xuICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgIC4uLm5ld0RhdGFFbnRyaWVzXG4gIH07XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoc3RhdGUucHJlc2VydmVEYXRhc2V0T3JkZXIpKSB7XG4gICAgLy8gcHJlc2VydmVEYXRhc2V0T3JkZXIgIG1pZ2h0IG5vdCBpbmNsdWRlIHRoZSAgbmV3IGRhdGFzZXRzXG4gICAgY29uc3QgbmV3RGF0YXNldElkcyA9IE9iamVjdC5rZXlzKG1lcmdlZCkuZmlsdGVyKFxuICAgICAgaWQgPT4gIXN0YXRlLnByZXNlcnZlRGF0YXNldE9yZGVyPy5pbmNsdWRlcyhpZClcbiAgICApO1xuICAgIHJldHVybiBbLi4uc3RhdGUucHJlc2VydmVEYXRhc2V0T3JkZXIsIC4uLm5ld0RhdGFzZXRJZHNdLnJlZHVjZShcbiAgICAgIChhY2N1LCBkYXRhSWQpID0+ICh7XG4gICAgICAgIC4uLmFjY3UsXG4gICAgICAgIC4uLihtZXJnZWRbZGF0YUlkXSA/IHtbZGF0YUlkXTogbWVyZ2VkW2RhdGFJZF19IDoge30pXG4gICAgICB9KSxcbiAgICAgIHt9XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBtZXJnZWQ7XG59XG5cbi8qKlxuICogU2ltbGlhciBwdXJwb3NlIHRvIGFnZ3JlZ2F0aW9uIHV0aWxzIGBnZXRNb2RlYCBmdW5jdGlvbixcbiAqIGJ1dCByZXR1cm5zIHRoZSBtb2RlIGluIHRoZSBzYW1lIHZhbHVlIHR5cGUgd2l0aG91dCBjb2VyY2luZyB0byBhIHN0cmluZy5cbiAqIEl0IGlnbm9yZXMgYHVuZGVmaW5lZGAgb3IgYG51bGxgIHZhbHVlcywgYnV0IHJldHVybnMgYG51bGxgIGlmIG5vIG1vZGUgY291bGQgYmUgY2FsY3VsYXRlZC5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2U8VD4oYXJyOiBUW10pOiBUIHwgbnVsbCB7XG4gIGNvbnN0IHRhbGx5cyA9IG5ldyBNYXAoKTtcbiAgYXJyLmZvckVhY2godmFsdWUgPT4ge1xuICAgIGlmIChub3ROdWxsb3JVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICBpZiAoIXRhbGx5cy5oYXModmFsdWUpKSB7XG4gICAgICAgIHRhbGx5cy5zZXQodmFsdWUsIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFsbHlzLnNldCh2YWx1ZSwgdGFsbHlzLmdldCh2YWx1ZSkgKyAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICAvLyByZXR1cm4gdGhlIHZhbHVlIHdpdGggdGhlIGhpZ2hlc3QgdG90YWwgb2NjdXJyZW5jZSBjb3VudFxuICBpZiAodGFsbHlzLnNpemUgPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gWy4uLnRhbGx5cy5lbnRyaWVzKCldPy5yZWR1Y2UoKGFjYywgbmV4dCkgPT4gKG5leHRbMV0gPiBhY2NbMV0gPyBuZXh0IDogYWNjKSlbMF07XG59XG5cbmV4cG9ydCBjb25zdCBWSVNfU1RBVEVfTUVSR0VSUzogVmlzU3RhdGVNZXJnZXJzPGFueT4gPSBbXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VMYXllcnMsXG4gICAgcHJvcDogJ2xheWVycycsXG4gICAgdG9NZXJnZVByb3A6ICdsYXllclRvQmVNZXJnZWQnLFxuICAgIHByZXNlcnZlT3JkZXI6ICdwcmVzZXJ2ZUxheWVyT3JkZXInXG4gIH0sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VMYXllck9yZGVyLFxuICAgIHByb3A6ICdsYXllck9yZGVyJ1xuICB9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlRmlsdGVycyxcbiAgICBwcm9wOiAnZmlsdGVycycsXG4gICAgdG9NZXJnZVByb3A6ICdmaWx0ZXJUb0JlTWVyZ2VkJyxcbiAgICBwcmVzZXJ2ZU9yZGVyOiAncHJlc2VydmVGaWx0ZXJPcmRlcicsXG4gICAgcmVwbGFjZVBhcmVudERhdGFzZXRJZHM6IHJlcGxhY2VGaWx0ZXJEYXRhc2V0SWRzXG4gIH0sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VFZmZlY3RzLFxuICAgIHByb3A6ICdlZmZlY3RzJ1xuICB9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlQ2hhcnRzLFxuICAgIHByb3A6ICdjaGFydHMnLFxuICAgIHRvTWVyZ2VQcm9wOiAnY2hhcnRzVG9CZU1lcmdlZCcsXG4gICAgcmVwbGFjZVBhcmVudERhdGFzZXRJZHM6IHJlcGxhY2VDaGFydERhdGFzZXRJZHNcbiAgfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZUFubm90YXRpb25zLFxuICAgIHByb3A6ICdhbm5vdGF0aW9ucycsXG4gICAgdG9NZXJnZVByb3A6ICdhbm5vdGF0aW9uc1RvQmVNZXJnZWQnXG4gIH0sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VJbnRlcmFjdGlvbnMsXG4gICAgcHJvcDogJ2ludGVyYWN0aW9uQ29uZmlnJyxcbiAgICB0b01lcmdlUHJvcDogJ2ludGVyYWN0aW9uVG9CZU1lcmdlZCcsXG4gICAgcmVwbGFjZVBhcmVudERhdGFzZXRJZHM6IHJlcGxhY2VJbnRlcmFjdGlvbkRhdGFzZXRJZHMsXG4gICAgc2F2ZVVubWVyZ2VkOiBzYXZlZFVubWVyZ2VkSW50ZXJhY3Rpb24sXG4gICAgY29tYmluZUNvbmZpZ3M6IGNvbWJpbmVJbnRlcmFjdGlvbkNvbmZpZ3NcbiAgfSxcbiAge21lcmdlOiBtZXJnZUxheWVyQmxlbmRpbmcsIHByb3A6ICdsYXllckJsZW5kaW5nJywgY29tYmluZUNvbmZpZ3M6IGNvbWJpbmVMYXllckJsZW5kaW5nQ29uZmlnc30sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VPdmVybGF5QmxlbmRpbmcsXG4gICAgcHJvcDogJ292ZXJsYXlCbGVuZGluZycsXG4gICAgY29tYmluZUNvbmZpZ3M6IGNvbWJpbmVPdmVybGF5QmxlbmRpbmdDb25maWdzXG4gIH0sXG4gIHttZXJnZTogbWVyZ2VTcGxpdE1hcHMsIHByb3A6ICdzcGxpdE1hcHMnLCB0b01lcmdlUHJvcDogJ3NwbGl0TWFwc1RvQmVNZXJnZWQnfSxcbiAge21lcmdlOiBtZXJnZUFuaW1hdGlvbkNvbmZpZywgcHJvcDogJ2FuaW1hdGlvbkNvbmZpZycsIGNvbWJpbmVDb25maWdzOiBjb21iaW5lQW5pbWF0aW9uQ29uZmlnc30sXG4gIHttZXJnZTogbWVyZ2VFZGl0b3IsIHByb3A6ICdlZGl0b3InLCBjb21iaW5lQ29uZmlnczogY29tYmluZUVkaXRvckNvbmZpZ3N9XG5dO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7O0FBRUEsT0FBT0EsSUFBSSxNQUFNLHdCQUF3QjtBQUN6QyxPQUFPQyxJQUFJLE1BQU0sd0JBQXdCO0FBQ3pDLE9BQU9DLFdBQVcsTUFBTSwrQkFBK0I7QUFDdkQsT0FBT0MsU0FBUyxNQUFNLFdBQVc7QUFDakMsU0FDRUMsV0FBVyxFQUNYQyx1QkFBdUIsRUFDdkJDLDhCQUE4QixFQUM5QkMsc0JBQXNCLEVBQ3RCQyw2QkFBNkIsRUFDN0JDLFFBQVEsRUFDUkMsU0FBUyxFQUNUQyxhQUFhLFFBQ1Isa0JBQWtCO0FBR3pCLFNBQVFDLFlBQVksUUFBTyxvQkFBb0I7QUFDL0MsU0FBUUMsa0JBQWtCLFFBQU8seUJBQXlCO0FBQzFELFNBQ0VDLGlCQUFpQixFQUNqQkMsZUFBZSxFQUNmQyxpQkFBaUIsRUFDakJDLGdCQUFnQixFQUNoQkMsNkJBQTZCLEVBQzdCQyw2QkFBNkIsUUFDeEIsc0JBQXNCO0FBQzdCLFNBQVFDLGVBQWUsUUFBdUQsb0JBQW9CO0FBcUJsRyxTQUErQkMsaUJBQWlCLEVBQUVDLGtCQUFrQixRQUFPLGtCQUFrQjtBQUU3RixTQUFRQyx1QkFBdUIsUUFBTyxlQUFlOztBQUVyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTQyxZQUFZ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
1324
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1bmlxIiwicGljayIsImZsYXR0ZW5EZWVwIiwiZGVlcG1lcmdlIiwiYXJyYXlJbnNlcnQiLCJjb21iaW5lU3BsaXRNYXBzQnlJbmRleCIsImdldEluaXRpYWxNYXBMYXllcnNGb3JTcGxpdE1hcCIsImFwcGx5RmlsdGVyc1RvRGF0YXNldHMiLCJ2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyIsImZpbmRCeUlkIiwiYWdncmVnYXRlIiwiaXNQbGFpbk9iamVjdCIsIm1pZ3JhdGVMZWdhY3lTY2VuZWdyYXBoVmlzQ29uZmlnIiwiY3JlYXRlRWZmZWN0Iiwibm90TnVsbG9yVW5kZWZpbmVkIiwiQUdHUkVHQVRJT05fVFlQRVMiLCJMQVlFUl9CTEVORElOR1MiLCJPVkVSTEFZX0JMRU5ESU5HUyIsImlzQW5ub3RhdGlvbktpbmQiLCJJTklUSUFMX0FOTk9UQVRJT05fTElORV9DT0xPUiIsIklOSVRJQUxfQU5OT1RBVElPTl9MSU5FX1dJRFRIIiwiQ1VSUkVOVF9WRVJTSU9OIiwiYXNzaWduR3B1Q2hhbm5lbHMiLCJyZXNldEZpbHRlckdwdU1vZGUiLCJnZXRMYXllck9yZGVyRnJvbUxheWVycyIsImNvbWJpbmVab29tT3BhY2l0eUNvbnRyb2xsZXJzIiwibWVyZ2VGaWx0ZXJzIiwic3RhdGUiLCJmaWx0ZXJzVG9NZXJnZSIsImZyb21Db25maWciLCJwcmVzZXJ2ZUZpbHRlck9yZGVyIiwibWFwIiwibCIsImlkIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiX3ZhbGlkYXRlRmlsdGVyc1VwZGF0IiwidmFsaWRhdGVkIiwiZmFpbGVkIiwidXBkYXRlZERhdGFzZXRzIiwidXBkYXRlZEZpbHRlcnMiLCJpbnNlcnRJdGVtQmFzZWRPblByZXNlcnZlZE9yZGVyIiwiZmlsdGVycyIsImRhdGFzZXRzVG9GaWx0ZXIiLCJmIiwiZGF0YUlkIiwiZmlsdGVyZWQiLCJsYXllcnMiLCJfb2JqZWN0U3ByZWFkIiwiZGF0YXNldHMiLCJmaWx0ZXJUb0JlTWVyZ2VkIiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwicmVwbGFjZUZpbHRlckRhdGFzZXRJZHMiLCJzYXZlZEZpbHRlciIsImRhdGFJZFRvVXNlIiwicmVwbGFjZWQiLCJmb3JFYWNoIiwiZmlsdGVyIiwiaW5jbHVkZXMiLCJfZmlsdGVyJHBsb3RUeXBlIiwibmV3RGF0YUlkIiwiZCIsInBsb3RUeXBlIiwiY29sb3JzQnlEYXRhSWQiLCJfZmlsdGVyJHBsb3RUeXBlMiIsIl9yZWYiLCJjb2xvciIsInJlc3QiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfdG9Qcm9wZXJ0eUtleSIsIl9kZWZpbmVQcm9wZXJ0eSIsInB1c2giLCJpc1NhdmVkTGF5ZXJDb25maWdWMSIsImxheWVyQ29uZmlnIiwidmlzdWFsQ2hhbm5lbHMiLCJwYXJzZUxheWVyQ29uZmlnIiwic2NoZW1hIiwiX3NjaGVtYSRwYXJzZVNhdmVkQ29uIiwic2F2ZWRDb25maWciLCJ2ZXJzaW9uIiwiY29uZmlnIiwidmlzU3RhdGUiLCJsYXllck9yZGVyIiwicGFyc2VTYXZlZENvbmZpZyIsImN1cnJlbnRJdGVtcyIsIml0ZW1zIiwicHJlc2VydmVkT3JkZXIiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJkZWZhdWx0U3RhcnQiLCJuZXdJdGVtcyIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX3N0ZXAiLCJzIiwibiIsImRvbmUiLCJpdGVtIiwidmFsdWUiLCJleHBlY3RlZElkeCIsImluZGV4T2YiLCJpbnNlcnRBdCIsImkiLCJwcmVjZWVkSWR4IiwiX2xvb3AiLCJwcmVjZWVkSXRlbUlkIiwiZmluZEluZGV4IiwiZXJyIiwiZSIsImNyZWF0ZUxheWVyRnJvbUNvbmZpZyIsInBhcnNlZExheWVyQ29uZmlnIiwiX3ZhbGlkYXRlTGF5ZXJzQnlEYXRhIiwidmFsaWRhdGVMYXllcnNCeURhdGFzZXRzIiwibGF5ZXJDbGFzc2VzIiwiYWxsb3dFbXB0eUNvbHVtbiIsIm5ld0xheWVyIiwidXBkYXRlTGF5ZXJEb21haW4iLCJzZXJpYWxpemVGaWx0ZXIiLCJuZXdGaWx0ZXIiLCJfc2VyaWFsaXplZFZpc1N0YXRlJGYiLCJzZXJpYWxpemVkVmlzU3RhdGUiLCJzZXJpYWxpemVWaXNTdGF0ZSIsInNlcmlhbGl6ZUxheWVyIiwiX3NlcmlhbGl6ZWRWaXNTdGF0ZSRsIiwic2VyaWFsaXplRWZmZWN0IiwibmV3RWZmZWN0IiwiX3NlcmlhbGl6ZWRWaXNTdGF0ZSRlIiwiZWZmZWN0cyIsImVmZmVjdE9yZGVyIiwiX3NjaGVtYSRwYXJzZVNhdmVkQ29uMiIsInNhdmVkU3RhdGUiLCJnZXRDb25maWdUb1NhdmUiLCJtZXJnZUxheWVycyIsImxheWVyc1RvTWVyZ2UiLCJwcmVzZXJ2ZUxheWVyT3JkZXIiLCJ1bm1lcmdlZCIsInRvTWVyZ2UiLCJfbCRjb25maWciLCJpc01lcmdpbmdEYXRhc2V0cyIsIl92YWxpZGF0ZUxheWVyc0J5RGF0YTIiLCJtZXJnZWRMYXllciIsImFwcGx5IiwiX2luc2VydExheWVyQXRSaWdodE9yIiwiaW5zZXJ0TGF5ZXJBdFJpZ2h0T3JkZXIiLCJuZXdMYXllck9yZGVyIiwibmV3TGF5ZXJzIiwibWVyZ2VkU3RhdGUiLCJsYXllclRvQmVNZXJnZWQiLCJsYXllck9yZGVyVG9CZU1lcmdlZCIsInNhdmVkT3JkZXIiLCJtZXJnZUxheWVyT3JkZXIiLCJjdXJyZW50TGF5ZXJzIiwibGF5ZXJzVG9JbnNlcnQiLCJjdXJyZW50T3JkZXIiLCJjdXJyZW50TGF5ZXJRdWV1ZSIsImVudHJ5IiwibGF5ZXIiLCJCb29sZWFuIiwibmV3TGF5ZXJPcmRlclF1ZXVlIiwibmV3RmxhdExheWVyT3JkZXIiLCJoYXNHcm91cHMiLCJzb21lIiwiZXhpc3RpbmdGbGF0SWRzIiwiU2V0IiwibmV3SW5zZXJ0ZWRJZHMiLCJoYXMiLCJyZXN1bHQiLCJmbGF0UXVldWUiLCJmbGF0SWR4IiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsInNhdmVkTGF5ZXJPcmRlciIsInZhbGlkTGF5ZXJJZHMiLCJmaWx0ZXJMYXllck9yZGVyIiwib3JkZXIiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwiZ3JvdXAiLCJmaWx0ZXJlZEdyb3VwT3JkZXIiLCJyZXN0b3JlZExheWVyT3JkZXIiLCJsYXllcklkc0luUmVzdG9yZWQiLCJjb2xsZWN0SWRzIiwiX2l0ZXJhdG9yNCIsIl9zdGVwNCIsImFkZCIsIm1pc3NpbmdMYXllcnMiLCJtZXJnZUludGVyYWN0aW9ucyIsImludGVyYWN0aW9uVG9CZU1lcmdlZCIsIm1lcmdlZCIsIk9iamVjdCIsImtleXMiLCJrZXkiLCJpbnRlcmFjdGlvbkNvbmZpZyIsImN1cnJlbnRDb25maWciLCJfcmVmMiIsImVuYWJsZWQiLCJjb25maWdTYXZlZCIsIl9leGNsdWRlZCIsImNvbmZpZ1RvTWVyZ2UiLCJfbWVyZ2VJbnRlcmFjdGlvblRvb2wiLCJtZXJnZUludGVyYWN0aW9uVG9vbHRpcENvbmZpZyIsIm1lcmdlZFRvb2x0aXAiLCJ1bm1lcmdlZFRvb2x0aXAiLCJmaWVsZHNUb1Nob3ciLCJ0b29sdGlwIiwibmV4dFN0YXRlIiwic2F2ZWRVbm1lcmdlZEludGVyYWN0aW9uIiwiY29tYmluZUludGVyYWN0aW9uQ29uZmlncyIsImNvbmZpZ3MiLCJjb21iaW5lZCIsImxlZ2VuZCIsIndpdGhMZWdlbmQiLCJmaW5kIiwiYyIsInpvb21PcGFjaXR5Iiwid2l0aFpvb21PcGFjaXR5IiwiX2xvb3AyIiwidG9CZUNvbWJpbmVkUHJvcHMiLCJwIiwiY29tcGFyZU1vZGUiLCJjb21wYXJlVHlwZSIsImdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlIiwicmVkdWNlIiwiYWNjIiwibmV4dEZpZWxkc1RvU2hvdyIsIl9sb29wMyIsIm5leHREYXRhSWRLZXkiLCJuZXh0VG9vbHRpcEZpZWxkcyIsIm5leHRURiIsIl9yZWYzIiwibmFtZSIsIl9hZ2dyZWdhdGUiLCJzaXplIiwibWF4aW11bSIsImxpbWl0U2VhcmNoIiwiaGlkZUludmlzaWJsZUxheWVycyIsImNvbnRyb2xsZXJzIiwiX3VubWVyZ2VkJHRvb2x0aXAiLCJfdW5tZXJnZWQkdG9vbHRpcDIiLCJfc3RhdGUkaW50ZXJhY3Rpb25Ub0IiLCJfdW5tZXJnZWQkdG9vbHRpcDMiLCJyZXBsYWNlSW50ZXJhY3Rpb25EYXRhc2V0SWRzIiwiZGF0YUlkVG9SZXBsYWNlIiwiX2ludGVyYWN0aW9uQ29uZmlnJHRvIiwiX2ludGVyYWN0aW9uQ29uZmlnJHRvMiIsIm1lcmdlU3BsaXRNYXBzIiwic3BsaXRNYXBzIiwibGF5ZXJFeGlzdHMiLCJjcmVhdGVQYW5lbHMiLCJzbSIsImlkcyIsImVudHJpZXMiLCJwYW5lbCIsImZyb21FbnRyaWVzIiwiX3JlZjQiLCJfcmVmNSIsIl9zbGljZWRUb0FycmF5IiwiX3JlZjYiLCJfcmVmNyIsInNwbGl0TWFwc1RvQmVNZXJnZWQiLCJtZXJnZUNoYXJ0cyIsImNoYXJ0cyIsImluY29taW5nSWRzIiwiY2hhcnQiLCJleGlzdGluZ0lkcyIsIm5leHRDaGFydHMiLCJub3JtYWxpemVkIiwicGlubmVkIiwiZGlzcGxheSIsImlzQ29uZmlnQWN0aXZlIiwiaXNKc29uRWRpdG9yQWN0aXZlIiwiY2hhcnRzVG9CZU1lcmdlZCIsInJlcGxhY2VDaGFydERhdGFzZXRJZHMiLCJzYXZlZENoYXJ0cyIsIm1lcmdlRWZmZWN0cyIsIm5ld0VmZmVjdHMiLCJlZmZlY3QiLCJhbGwiLCJpc1ZhbGlkVG9TYXZlIiwibWVyZ2VBbm5vdGF0aW9ucyIsImFubm90YXRpb25zIiwiYSIsInZhbGlkQW5ub3RhdGlvbnMiLCJraW5kIiwiYW5jaG9yUG9pbnQiLCJldmVyeSIsIk51bWJlciIsImlzRmluaXRlIiwiaXNWaXNpYmxlIiwiYXV0b1NpemUiLCJhdXRvU2l6ZVkiLCJsYWJlbCIsImxpbmVDb2xvciIsImxpbmVXaWR0aCIsInRleHRXaWR0aCIsInRleHRIZWlnaHQiLCJ0b29sdGlwQ29uZmlnIiwiX2xvb3A0IiwiYWxsRmllbGRzIiwiZmllbGRzIiwiZm91bmRGaWVsZHNUb1Nob3ciLCJmaWVsZCIsIm1lcmdlTGF5ZXJCbGVuZGluZyIsImxheWVyQmxlbmRpbmciLCJjb21iaW5lTGF5ZXJCbGVuZGluZ0NvbmZpZ3MiLCJtZXJnZU92ZXJsYXlCbGVuZGluZyIsIm92ZXJsYXlCbGVuZGluZyIsImNvbWJpbmVPdmVybGF5QmxlbmRpbmdDb25maWdzIiwibWVyZ2VBbmltYXRpb25Db25maWciLCJhbmltYXRpb24iLCJjdXJyZW50VGltZSIsImFuaW1hdGlvbkNvbmZpZyIsImRvbWFpbiIsImNvbWJpbmVBbmltYXRpb25Db25maWdzIiwiX2FnZ3JlZ2F0ZTIiLCJfYWdncmVnYXRlMyIsIm1pbmltdW0iLCJzcGVlZCIsInRpbWVGb3JtYXQiLCJ0aW1lem9uZSIsInZhbGlkYXRlU2F2ZWRMYXllckNvbHVtbnMiLCJzYXZlZENvbHMiLCJlbXB0eUNvbHMiLCJvcHRpb25zIiwiY29sdW1ucyIsIl9sb29wNSIsIl9PYmplY3Qka2V5cyIsIl9pIiwic2F2ZWQiLCJmaWVsZElkeCIsIl9yZWY4IiwiYWxsQ29sRm91bmQiLCJ2YWxpZGF0ZUNvbHVtbiIsInJ2IiwidGhyb3dPbkVycm9yIiwicmVxdWlyZWRDb2x1bW5zIiwiayIsIm9wdGlvbmFsIiwibWlzc2luZ0NvbHVtbnMiLCJFcnJvciIsImpvaW4iLCJjb25maWdDb2x1bW5zIiwiaW52YWxpZENvbHVtbnMiLCJfY29sdW1ucyRrIiwiY29sdW1uIiwidmFsaWRhdG9yIiwidmFsaWRhdGVTYXZlZFRleHRMYWJlbCIsIl9yZWY5Iiwic2F2ZWRUZXh0TGFiZWwiLCJfcmVmMCIsImxheWVyVGV4dExhYmVsIiwic2F2ZWRUZXh0TGFiZWxzIiwidGV4dExhYmVsIiwiZmQiLCJKU09OIiwic3RyaW5naWZ5IiwiYWNjdSIsImdldFNhdmVkVmlzdWFsQ2hhbm5lbFZhbHVlIiwic2F2ZWRMYXllciIsImNoYW5uZWxzIiwiX3R5cGVvZiIsInZhbGlkYXRlU2F2ZWRWaXN1YWxDaGFubmVscyIsInZhbHVlcyIsIl9yZWYxIiwic2NhbGUiLCJzYXZlZEZpZWxkIiwic2F2ZWRTY2FsZSIsImZvdW5kRmllbGQiLCJmb3VuZENoYW5uZWwiLCJ1cGRhdGVMYXllckNvbmZpZyIsInZhbGlkYXRlVmlzdWFsQ2hhbm5lbCIsIl9uZXdMYXllciRjb25maWckZmllbCIsImZpZWxkTmFtZSIsIl9sYXllciRjb25maWciLCJ2YWxpZGF0ZUxheWVyIiwidmFsaWRhdGVMYXllcldpdGhEYXRhIiwiX2dldENvbHVtbkNvbmZpZ0ZvclZhbGlkYXRpb24iLCJjb2x1bW5Db25maWciLCJnZXRMYXllckNvbHVtbnMiLCJjb2xNb2RlQ29uZmlnIiwiY29sdW1uTW9kZSIsInN1cHBvcnRlZENvbHVtbk1vZGVzIiwiY29sTW9kZSIsImdyb3VwQ29sdW1ucyIsImNvbHVtbkdyb3VwcyIsImZsYXRNYXAiLCJyZXF1aXJlZEtleXMiLCJvcHRpb25hbENvbHVtbnMiLCJjb2wiLCJfb3B0aW9uYWwiLCJyZXF1aXJlZENvbCIsIl9leGNsdWRlZDIiLCJkYXRhc2V0IiwidHlwZSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImhpZGRlbiIsImlzSW5jbHVkZWRJbkxlZ2VuZCIsImhpZ2hsaWdodENvbG9yIiwic2F2ZWRWaXNDb25maWciLCJ2aXNDb25maWciLCJjb3BpZWRWaXNDb25maWciLCJjb3B5TGF5ZXJDb25maWciLCJzaGFsbG93Q29weSIsInZhbGlkYXRlVmlzQ29uZmlnIiwibWVyZ2VFZGl0b3IiLCJzYXZlZEVkaXRvciIsIl9zYXZlZEVkaXRvciR2aXNpYmxlIiwiZWRpdG9yIiwiZmVhdHVyZXMiLCJ2aXNpYmxlIiwiY29tYmluZUVkaXRvckNvbmZpZ3MiLCJuZXh0Q29uZmlnIiwibWVyZ2VEYXRhc2V0c0J5T3JkZXIiLCJuZXdEYXRhRW50cmllcyIsInByZXNlcnZlRGF0YXNldE9yZGVyIiwibmV3RGF0YXNldElkcyIsIl9zdGF0ZSRwcmVzZXJ2ZURhdGFzZSIsImFyciIsIl9yZWYxMyIsInRhbGx5cyIsIk1hcCIsInNldCIsImdldCIsIm5leHQiLCJWSVNfU1RBVEVfTUVSR0VSUyIsIm1lcmdlIiwicHJvcCIsInRvTWVyZ2VQcm9wIiwicHJlc2VydmVPcmRlciIsInJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIiwic2F2ZVVubWVyZ2VkIiwiY29tYmluZUNvbmZpZ3MiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdmlzLXN0YXRlLW1lcmdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgdW5pcSBmcm9tICdlcy10b29sa2l0L2NvbXBhdC91bmlxJztcbmltcG9ydCBwaWNrIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L3BpY2snO1xuaW1wb3J0IGZsYXR0ZW5EZWVwIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L2ZsYXR0ZW5EZWVwJztcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnZGVlcG1lcmdlJztcbmltcG9ydCB7XG4gIGFycmF5SW5zZXJ0LFxuICBjb21iaW5lU3BsaXRNYXBzQnlJbmRleCxcbiAgZ2V0SW5pdGlhbE1hcExheWVyc0ZvclNwbGl0TWFwLFxuICBhcHBseUZpbHRlcnNUb0RhdGFzZXRzLFxuICB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyxcbiAgZmluZEJ5SWQsXG4gIGFnZ3JlZ2F0ZSxcbiAgaXNQbGFpbk9iamVjdFxufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcblxuaW1wb3J0IHtMYXllciwgbWlncmF0ZUxlZ2FjeVNjZW5lZ3JhcGhWaXNDb25maWd9IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7Y3JlYXRlRWZmZWN0fSBmcm9tICdAa2VwbGVyLmdsL2VmZmVjdHMnO1xuaW1wb3J0IHtub3ROdWxsb3JVbmRlZmluZWR9IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcbmltcG9ydCB7XG4gIEFHR1JFR0FUSU9OX1RZUEVTLFxuICBMQVlFUl9CTEVORElOR1MsXG4gIE9WRVJMQVlfQkxFTkRJTkdTLFxuICBpc0Fubm90YXRpb25LaW5kLFxuICBJTklUSUFMX0FOTk9UQVRJT05fTElORV9DT0xPUixcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEhcbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtDVVJSRU5UX1ZFUlNJT04sIFZpc1N0YXRlLCBWaXNTdGF0ZU1lcmdlcnMsIEtlcGxlckdMU2NoZW1hQ2xhc3N9IGZyb20gJ0BrZXBsZXIuZ2wvc2NoZW1hcyc7XG5cbmltcG9ydCB7XG4gIFBhcnNlZExheWVyLFxuICBQYXJzZWRWaXNTdGF0ZSxcbiAgU2F2ZWRJbnRlcmFjdGlvbkNvbmZpZyxcbiAgVG9vbHRpcEluZm8sXG4gIFNhdmVkRWRpdG9yLFxuICBQYXJzZWRDb25maWcsXG4gIEZpbHRlcixcbiAgRWZmZWN0IGFzIEVmZmVjdFR5cGUsXG4gIFBhcnNlZEVmZmVjdCxcbiAgTGF5ZXJDb2x1bW5zLFxuICBMYXllckNvbHVtbixcbiAgUGFyc2VkRmlsdGVyLFxuICBOZXN0ZWRQYXJ0aWFsLFxuICBTYXZlZEFuaW1hdGlvbkNvbmZpZyxcbiAgTGF5ZXJPcmRlcixcbiAgTGF5ZXJPcmRlckdyb3VwLFxuICBDaGFydENvbmZpZ1xufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7S2VwbGVyVGFibGUsIERhdGFzZXRzLCBhc3NpZ25HcHVDaGFubmVscywgcmVzZXRGaWx0ZXJHcHVNb2RlfSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcblxuaW1wb3J0IHtnZXRMYXllck9yZGVyRnJvbUxheWVyc30gZnJvbSAnLi9sYXllci11dGlscyc7XG5pbXBvcnQge2NvbWJpbmVab29tT3BhY2l0eUNvbnRyb2xsZXJzfSBmcm9tICcuL2ludGVyYWN0aW9uLXV0aWxzJztcblxuLyoqXG4gKiBNZXJnZSBsb2FkZWQgZmlsdGVycyB3aXRoIGN1cnJlbnQgc3RhdGUsIGlmIG5vIGZpZWxkcyBvciBkYXRhIGFyZSBsb2FkZWRcbiAqIHNhdmUgaXQgZm9yIGxhdGVyXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VGaWx0ZXJzPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBmaWx0ZXJzVG9NZXJnZTogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnZmlsdGVycyddLFxuICBmcm9tQ29uZmlnPzogYm9vbGVhblxuKTogUyB7XG4gIGNvbnN0IHByZXNlcnZlRmlsdGVyT3JkZXIgPSBmcm9tQ29uZmlnXG4gICAgPyBmaWx0ZXJzVG9NZXJnZT8ubWFwKGwgPT4gbC5pZClcbiAgICA6IHN0YXRlLnByZXNlcnZlRmlsdGVyT3JkZXI7XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KGZpbHRlcnNUb01lcmdlKSB8fCAhZmlsdGVyc1RvTWVyZ2UubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgY29uc3Qge3ZhbGlkYXRlZCwgZmFpbGVkLCB1cGRhdGVkRGF0YXNldHN9ID0gdmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMoc3RhdGUsIGZpbHRlcnNUb01lcmdlKTtcbiAgbGV0IHVwZGF0ZWRGaWx0ZXJzID0gaW5zZXJ0SXRlbUJhc2VkT25QcmVzZXJ2ZWRPcmRlcihcbiAgICBzdGF0ZS5maWx0ZXJzLFxuICAgIHZhbGlkYXRlZCxcbiAgICBwcmVzZXJ2ZUZpbHRlck9yZGVyXG4gICk7XG5cbiAgLy8gbWVyZ2UgZmlsdGVyIHdpdGggZXhpc3RpbmdcbiAgdXBkYXRlZEZpbHRlcnMgPSByZXNldEZpbHRlckdwdU1vZGUodXBkYXRlZEZpbHRlcnMpO1xuICB1cGRhdGVkRmlsdGVycyA9IGFzc2lnbkdwdUNoYW5uZWxzKHVwZGF0ZWRGaWx0ZXJzKTtcbiAgLy8gZmlsdGVyIGRhdGFcbiAgY29uc3QgZGF0YXNldHNUb0ZpbHRlciA9IHVuaXEoZmxhdHRlbkRlZXAodmFsaWRhdGVkLm1hcChmID0+IGYuZGF0YUlkKSkpO1xuXG4gIGNvbnN0IGZpbHRlcmVkID0gYXBwbHlGaWx0ZXJzVG9EYXRhc2V0cyhcbiAgICBkYXRhc2V0c1RvRmlsdGVyLFxuICAgIHVwZGF0ZWREYXRhc2V0cyxcbiAgICB1cGRhdGVkRmlsdGVycyxcbiAgICBzdGF0ZS5sYXllcnNcbiAgKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGZpbHRlcnM6IHVwZGF0ZWRGaWx0ZXJzLFxuICAgIGRhdGFzZXRzOiBmaWx0ZXJlZCxcbiAgICBwcmVzZXJ2ZUZpbHRlck9yZGVyLFxuICAgIGZpbHRlclRvQmVNZXJnZWQ6IFsuLi5zdGF0ZS5maWx0ZXJUb0JlTWVyZ2VkLCAuLi5mYWlsZWRdXG4gIH07XG59XG5cbi8vIHJlcGxhY2UgZGF0YUlkIGluIHNhdmVkIEZpbHRlclxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VGaWx0ZXJEYXRhc2V0SWRzKFxuICBzYXZlZEZpbHRlcjogRmlsdGVyW10sXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhSWRUb1VzZTogc3RyaW5nXG4pIHtcbiAgY29uc3QgcmVwbGFjZWQ6IEZpbHRlcltdID0gW107XG4gIHNhdmVkRmlsdGVyLmZvckVhY2goZmlsdGVyID0+IHtcbiAgICBpZiAoZmlsdGVyLmRhdGFJZC5pbmNsdWRlcyhkYXRhSWQpKSB7XG4gICAgICBjb25zdCBuZXdEYXRhSWQgPSBmaWx0ZXIuZGF0YUlkLm1hcChkID0+IChkID09PSBkYXRhSWQgPyBkYXRhSWRUb1VzZSA6IGQpKTtcbiAgICAgIGxldCBwbG90VHlwZTtcbiAgICAgIC8vIFRPRE86IG1vcmUgZ2VuZXJpYyBhcHByb2FjaCB0byBzYXZlIHBsb3RUeXBlLmNvbG9yc0J5RGF0YUlkXG4gICAgICBpZiAoZmlsdGVyLnBsb3RUeXBlPy5jb2xvcnNCeURhdGFJZD8uW2RhdGFJZF0pIHtcbiAgICAgICAgLy8gcmVwbGFjZSBjb2xvckJ5RGF0YUlkIGluIGZpbHRlci5wbG90VHlwZVxuICAgICAgICBjb25zdCB7W2RhdGFJZF06IGNvbG9yLCAuLi5yZXN0fSA9IGZpbHRlci5wbG90VHlwZT8uY29sb3JzQnlEYXRhSWQgfHwge307XG4gICAgICAgIHBsb3RUeXBlID0ge1xuICAgICAgICAgIC4uLmZpbHRlci5wbG90VHlwZSxcbiAgICAgICAgICBjb2xvcnNCeURhdGFJZDoge1xuICAgICAgICAgICAgLi4ucmVzdCxcbiAgICAgICAgICAgIFtkYXRhSWRUb1VzZV06IGNvbG9yXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmVwbGFjZWQucHVzaCh7XG4gICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgZGF0YUlkOiBuZXdEYXRhSWQsXG4gICAgICAgIC4uLihwbG90VHlwZSA/IHtwbG90VHlwZX0gOiB7fSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXBsYWNlZC5sZW5ndGggPyByZXBsYWNlZCA6IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NhdmVkTGF5ZXJDb25maWdWMShsYXllckNvbmZpZzogYW55KTogYm9vbGVhbiB7XG4gIC8vIGV4cG9ydGVkIGxheWVyIGNvbmZpZ3VyYXRpb24gY29udGFpbnMgdmlzdWFsQ2hhbm5lbHMgcHJvcGVydHlcbiAgcmV0dXJuIGxheWVyQ29uZmlnPy52aXN1YWxDaGFubmVscztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTGF5ZXJDb25maWcoXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFDbGFzcyxcbiAgbGF5ZXJDb25maWc6IGFueVxuKTogUGFyc2VkTGF5ZXIgfCB1bmRlZmluZWQge1xuICAvLyBhc3N1bWUgdGhlIGxheWVyIGNvbmZpZyBpcyBjdXJyZW50IHZlcnNpb25cbiAgY29uc3Qgc2F2ZWRDb25maWcgPSB7XG4gICAgdmVyc2lvbjogQ1VSUkVOVF9WRVJTSU9OLFxuICAgIGNvbmZpZzoge1xuICAgICAgdmlzU3RhdGU6IHtsYXllcnM6IFtsYXllckNvbmZpZ10sIGxheWVyT3JkZXI6IFtsYXllckNvbmZpZy5pZF19XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBzY2hlbWEucGFyc2VTYXZlZENvbmZpZyhzYXZlZENvbmZpZyk/LnZpc1N0YXRlPy5sYXllcnM/LlswXTtcbn1cblxuZnVuY3Rpb24gaW5zZXJ0SXRlbUJhc2VkT25QcmVzZXJ2ZWRPcmRlcihcbiAgY3VycmVudEl0ZW1zOiBGaWx0ZXJbXSxcbiAgaXRlbXM6IEZpbHRlcltdLFxuICBwcmVzZXJ2ZWRPcmRlcjogYW55W10gPSBbXSxcbiAgZGVmYXVsdFN0YXJ0PzogYm9vbGVhblxuKSB7XG4gIGxldCBuZXdJdGVtcyA9IFsuLi5jdXJyZW50SXRlbXNdO1xuXG4gIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgIGNvbnN0IGV4cGVjdGVkSWR4ID0gcHJlc2VydmVkT3JkZXIuaW5kZXhPZihpdGVtLmlkKTtcbiAgICAvLyBpbnNlcnRBdCB0aGUgZW5kIGJ5IGRlZmF1bHRcbiAgICBsZXQgaW5zZXJ0QXQgPSBkZWZhdWx0U3RhcnQgPyAwIDogbmV3SXRlbXMubGVuZ3RoO1xuICAgIGlmIChleHBlY3RlZElkeCA+IDApIHtcbiAgICAgIC8vIGxvb2sgZm9yIGxheWVyIHRvIGluc2VydCBhZnRlclxuICAgICAgbGV0IGkgPSBleHBlY3RlZElkeCArIDE7XG4gICAgICBsZXQgcHJlY2VlZElkeCA9IC0xO1xuICAgICAgd2hpbGUgKGktLSA+IDAgJiYgcHJlY2VlZElkeCA8IDApIHtcbiAgICAgICAgLy8ga2VlcCBsb29raW5nIGZvciBwcmVjZWVkIGxheWVyIHRoYXQgaXMgYWxyZWFkeSBsb2FkZWRcbiAgICAgICAgY29uc3QgcHJlY2VlZEl0ZW1JZCA9IHByZXNlcnZlZE9yZGVyW2kgLSAxXTtcbiAgICAgICAgcHJlY2VlZElkeCA9IG5ld0l0ZW1zLmZpbmRJbmRleChkID0+IGQuaWQgPT09IHByZWNlZWRJdGVtSWQpO1xuICAgICAgfVxuICAgICAgaWYgKHByZWNlZWRJZHggPiAtMSkge1xuICAgICAgICAvLyBpZiBmb3VuZFxuICAgICAgICBpbnNlcnRBdCA9IHByZWNlZWRJZHggKyAxO1xuICAgICAgfVxuICAgIH1cbiAgICBuZXdJdGVtcyA9IGFycmF5SW5zZXJ0KG5ld0l0ZW1zLCBpbnNlcnRBdCwgaXRlbSk7XG4gIH1cbiAgcmV0dXJuIG5ld0l0ZW1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTGF5ZXJGcm9tQ29uZmlnKHN0YXRlOiBWaXNTdGF0ZSwgbGF5ZXJDb25maWc6IGFueSk6IExheWVyIHwgbnVsbCB7XG4gIC8vIGNoZWNrIGlmIHRoZSBsYXllciBjb25maWcgaXMgcGFyc2VkXG4gIGNvbnN0IHBhcnNlZExheWVyQ29uZmlnID0gaXNTYXZlZExheWVyQ29uZmlnVjEobGF5ZXJDb25maWcpXG4gICAgPyBwYXJzZUxheWVyQ29uZmlnKHN0YXRlLnNjaGVtYSwgbGF5ZXJDb25maWcpXG4gICAgOiBsYXllckNvbmZpZztcblxuICBpZiAoIXBhcnNlZExheWVyQ29uZmlnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLy8gZmlyc3QgdmFsaWRhdGUgY29uZmlnIGFnYWluc3QgZGF0YXNldFxuICBjb25zdCB7dmFsaWRhdGVkLCBmYWlsZWR9ID0gdmFsaWRhdGVMYXllcnNCeURhdGFzZXRzKFxuICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgIHN0YXRlLmxheWVyQ2xhc3NlcyxcbiAgICBbcGFyc2VkTGF5ZXJDb25maWddLFxuICAgIHthbGxvd0VtcHR5Q29sdW1uOiB0cnVlfVxuICApO1xuXG4gIGlmIChmYWlsZWQ/Lmxlbmd0aCB8fCAhdmFsaWRhdGVkLmxlbmd0aCkge1xuICAgIC8vIGZhaWxlZFxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgbmV3TGF5ZXIgPSB2YWxpZGF0ZWRbMF07XG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyRG9tYWluKHN0YXRlLmRhdGFzZXRzKTtcbiAgcmV0dXJuIG5ld0xheWVyO1xufVxuXG4vKipcbiAqIEdldCBsb2FkZWQgZmlsdGVyIGZyb20gc3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUZpbHRlcihcbiAgbmV3RmlsdGVyOiBGaWx0ZXIsXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFDbGFzc1xuKTogUGFyc2VkRmlsdGVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2VyaWFsaXplZFZpc1N0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoe2ZpbHRlcnM6IFtuZXdGaWx0ZXJdfSwgc2NoZW1hKTtcbiAgcmV0dXJuIHNlcmlhbGl6ZWRWaXNTdGF0ZT8uZmlsdGVycz8uWzBdO1xufVxuXG4vKipcbiAqIEdldCBsb2FkZWQgbGF5ZXIgZnJvbSBzdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplTGF5ZXIoXG4gIG5ld0xheWVyOiBMYXllcixcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYUNsYXNzXG4pOiBQYXJzZWRMYXllciB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRWaXNTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKFxuICAgIHtsYXllcnM6IFtuZXdMYXllcl0sIGxheWVyT3JkZXI6IFtuZXdMYXllci5pZF19LFxuICAgIHNjaGVtYVxuICApO1xuICByZXR1cm4gc2VyaWFsaXplZFZpc1N0YXRlPy5sYXllcnM/LlswXTtcbn1cblxuLyoqXG4gKiBHZXQgbG9hZGVkIGVmZmVjdCBmcm9tIHN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVFZmZlY3QoXG4gIG5ld0VmZmVjdDogRWZmZWN0VHlwZSxcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYUNsYXNzXG4pOiBQYXJzZWRFZmZlY3QgfCB1bmRlZmluZWQge1xuICBjb25zdCBzZXJpYWxpemVkVmlzU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZShcbiAgICB7ZWZmZWN0czogW25ld0VmZmVjdF0sIGVmZmVjdE9yZGVyOiBbbmV3RWZmZWN0LmlkXX0sXG4gICAgc2NoZW1hXG4gICk7XG4gIHJldHVybiBzZXJpYWxpemVkVmlzU3RhdGU/LmVmZmVjdHM/LlswXTtcbn1cblxuLyoqXG4gKiBHZXQgdmlzIHN0YXRlIGNvbmZpZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplVmlzU3RhdGUoXG4gIHZpc1N0YXRlOiBQYXJ0aWFsPFZpc1N0YXRlPixcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYUNsYXNzXG4pOiBQYXJzZWRWaXNTdGF0ZSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHNhdmVkU3RhdGUgPSBzY2hlbWEuZ2V0Q29uZmlnVG9TYXZlKHtcbiAgICB2aXNTdGF0ZVxuICB9KTtcbiAgcmV0dXJuIHNhdmVkU3RhdGUgPyBzY2hlbWEucGFyc2VTYXZlZENvbmZpZyhzYXZlZFN0YXRlKT8udmlzU3RhdGUgOiB1bmRlZmluZWQ7XG59XG4vKipcbiAqIE1lcmdlIGxheWVycyBmcm9tIGRlLXNlcmlhbGl6ZWQgc3RhdGUsIGlmIG5vIGZpZWxkcyBvciBkYXRhIGFyZSBsb2FkZWRcbiAqIHNhdmUgaXQgZm9yIGxhdGVyXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VMYXllcnM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGxheWVyc1RvTWVyZ2U6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2xheWVycyddID0gW10sXG4gIGZyb21Db25maWc/OiBib29sZWFuXG4pOiBTIHtcbiAgY29uc3QgcHJlc2VydmVMYXllck9yZGVyID0gZnJvbUNvbmZpZ1xuICAgID8gZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMobGF5ZXJzVG9NZXJnZSlcbiAgICA6IHN0YXRlLnByZXNlcnZlTGF5ZXJPcmRlcjtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGxheWVyc1RvTWVyZ2UpIHx8ICFsYXllcnNUb01lcmdlLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICAvLyBkb24ndCBtZXJnZSBsYXllciBpZiBkYXRhc2V0IGlzIGJlaW5nIG1lcmdlZFxuICBjb25zdCB1bm1lcmdlZDogUGFyc2VkTGF5ZXJbXSA9IFtdO1xuICBjb25zdCB0b01lcmdlOiBQYXJzZWRMYXllcltdID0gW107XG4gIGxheWVyc1RvTWVyZ2UuZm9yRWFjaCgobDogUGFyc2VkTGF5ZXIpID0+IHtcbiAgICBpZiAobD8uY29uZmlnPy5kYXRhSWQgJiYgc3RhdGUuaXNNZXJnaW5nRGF0YXNldHNbbC5jb25maWcuZGF0YUlkXSkge1xuICAgICAgdW5tZXJnZWQucHVzaChsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdG9NZXJnZS5wdXNoKGwpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3Qge3ZhbGlkYXRlZDogbWVyZ2VkTGF5ZXIsIGZhaWxlZH0gPSB2YWxpZGF0ZUxheWVyc0J5RGF0YXNldHMoXG4gICAgc3RhdGUuZGF0YXNldHMsXG4gICAgc3RhdGUubGF5ZXJDbGFzc2VzLFxuICAgIHRvTWVyZ2VcbiAgKTtcbiAgdW5tZXJnZWQucHVzaCguLi5mYWlsZWQpO1xuICAvLyBwdXQgbmV3IGxheWVycyBpbiBmcm9udCBvZiBjdXJyZW50IGxheWVyc1xuICBjb25zdCB7bmV3TGF5ZXJPcmRlciwgbmV3TGF5ZXJzfSA9IGluc2VydExheWVyQXRSaWdodE9yZGVyKFxuICAgIHN0YXRlLmxheWVycyxcbiAgICBtZXJnZWRMYXllcixcbiAgICBzdGF0ZS5sYXllck9yZGVyLFxuICAgIHByZXNlcnZlTGF5ZXJPcmRlclxuICApO1xuXG4gIGxldCBtZXJnZWRTdGF0ZTogUyA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllcnM6IG5ld0xheWVycyxcbiAgICBsYXllck9yZGVyOiBuZXdMYXllck9yZGVyLFxuICAgIHByZXNlcnZlTGF5ZXJPcmRlcixcbiAgICBsYXllclRvQmVNZXJnZWQ6IFsuLi5zdGF0ZS5sYXllclRvQmVNZXJnZWQsIC4uLnVubWVyZ2VkXVxuICB9O1xuXG4gIC8vIEFwcGx5IHBlbmRpbmcgbGF5ZXJPcmRlciB3aXRoIGdyb3VwcyBpZiBsYXllcnMgYXJlIG5vdyBhdmFpbGFibGVcbiAgaWYgKG1lcmdlZFN0YXRlLmxheWVyT3JkZXJUb0JlTWVyZ2VkICYmIG1lcmdlZFN0YXRlLmxheWVycy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgc2F2ZWRPcmRlciA9IG1lcmdlZFN0YXRlLmxheWVyT3JkZXJUb0JlTWVyZ2VkO1xuICAgIG1lcmdlZFN0YXRlID0gbWVyZ2VMYXllck9yZGVyKG1lcmdlZFN0YXRlLCBzYXZlZE9yZGVyKTtcbiAgICAvLyBLZWVwIHNhdmVkTGF5ZXJPcmRlciBhdmFpbGFibGUgZm9yIGZ1dHVyZSBkZWZlcnJlZCBsYXllcnNcbiAgICBpZiAobWVyZ2VkU3RhdGUubGF5ZXJUb0JlTWVyZ2VkLmxlbmd0aCA+IDApIHtcbiAgICAgIG1lcmdlZFN0YXRlID0gey4uLm1lcmdlZFN0YXRlLCBsYXllck9yZGVyVG9CZU1lcmdlZDogc2F2ZWRPcmRlcn07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1lcmdlZFN0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0TGF5ZXJBdFJpZ2h0T3JkZXIoXG4gIGN1cnJlbnRMYXllcnMsXG4gIGxheWVyc1RvSW5zZXJ0LFxuICBjdXJyZW50T3JkZXIsXG4gIHByZXNlcnZlZE9yZGVyOiBzdHJpbmdbXSA9IFtdXG4pIHtcbiAgaWYgKCFsYXllcnNUb0luc2VydD8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHtuZXdMYXllcnM6IGN1cnJlbnRMYXllcnMsIG5ld0xheWVyT3JkZXI6IGN1cnJlbnRPcmRlcn07XG4gIH1cblxuICBjb25zdCBjdXJyZW50TGF5ZXJRdWV1ZSA9IGN1cnJlbnRPcmRlclxuICAgIC5maWx0ZXIoZW50cnkgPT4gdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJylcbiAgICAubWFwKGlkID0+IGZpbmRCeUlkKGlkKShjdXJyZW50TGF5ZXJzKSlcbiAgICAuZmlsdGVyKGxheWVyID0+IEJvb2xlYW4obGF5ZXIpKTtcbiAgY29uc3QgbmV3TGF5ZXJzID0gY3VycmVudExheWVycy5jb25jYXQobGF5ZXJzVG9JbnNlcnQpO1xuICBjb25zdCBuZXdMYXllck9yZGVyUXVldWUgPSBpbnNlcnRJdGVtQmFzZWRPblByZXNlcnZlZE9yZGVyKFxuICAgIGN1cnJlbnRMYXllclF1ZXVlLFxuICAgIGxheWVyc1RvSW5zZXJ0LFxuICAgIHByZXNlcnZlZE9yZGVyLFxuICAgIHRydWVcbiAgKTtcblxuICBjb25zdCBuZXdGbGF0TGF5ZXJPcmRlciA9IGdldExheWVyT3JkZXJGcm9tTGF5ZXJzKG5ld0xheWVyT3JkZXJRdWV1ZSk7XG5cbiAgLy8gSWYgbm8gZ3JvdXBzIGV4aXN0IGluIGN1cnJlbnQgb3JkZXIsIGp1c3QgdXNlIHRoZSBuZXcgZmxhdCBvcmRlclxuICBjb25zdCBoYXNHcm91cHMgPSBjdXJyZW50T3JkZXIuc29tZShlbnRyeSA9PiBpc1BsYWluT2JqZWN0KGVudHJ5KSk7XG4gIGlmICghaGFzR3JvdXBzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5ld0xheWVyT3JkZXI6IG5ld0ZsYXRMYXllck9yZGVyLFxuICAgICAgbmV3TGF5ZXJzXG4gICAgfTtcbiAgfVxuXG4gIC8vIFJlYnVpbGQgbGF5ZXJPcmRlciBwcmVzZXJ2aW5nIGdyb3VwcyBpbiB0aGVpciByZWxhdGl2ZSBwb3NpdGlvbnMuXG4gIC8vIFJlcGxhY2UgZWFjaCBzdHJpbmcgZW50cnkgd2l0aCBpdHMgdXBkYXRlZCBwb3NpdGlvbiBmcm9tIG5ld0ZsYXRMYXllck9yZGVyLFxuICAvLyBhbmQga2VlcCBncm91cHMgYXMtaXMuXG4gIGNvbnN0IGV4aXN0aW5nRmxhdElkcyA9IG5ldyBTZXQoXG4gICAgY3VycmVudE9yZGVyLmZpbHRlcihlbnRyeSA9PiB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSBhcyBzdHJpbmdbXVxuICApO1xuICBjb25zdCBuZXdJbnNlcnRlZElkcyA9IG5ld0ZsYXRMYXllck9yZGVyLmZpbHRlcihpZCA9PiAhZXhpc3RpbmdGbGF0SWRzLmhhcyhpZCkpO1xuXG4gIC8vIFJlYnVpbGQ6IHdhbGsgdGhyb3VnaCBjdXJyZW50T3JkZXIsIHJlcGxhY2Ugc3RyaW5nIGVudHJpZXMgd2l0aCB0aGVpclxuICAvLyBuZXcgcG9zaXRpb24gZXF1aXZhbGVudHMgZnJvbSBuZXdGbGF0TGF5ZXJPcmRlciwgdGhlbiBhcHBlbmQgYW55IG5ld2x5IGluc2VydGVkIGxheWVyc1xuICBjb25zdCByZXN1bHQ6IExheWVyT3JkZXIgPSBbXTtcbiAgY29uc3QgZmxhdFF1ZXVlID0gWy4uLm5ld0ZsYXRMYXllck9yZGVyLmZpbHRlcihpZCA9PiBleGlzdGluZ0ZsYXRJZHMuaGFzKGlkKSldO1xuICBsZXQgZmxhdElkeCA9IDA7XG5cbiAgZm9yIChjb25zdCBlbnRyeSBvZiBjdXJyZW50T3JkZXIpIHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGVudHJ5IGFzIExheWVyT3JkZXJHcm91cCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlcGxhY2Ugd2l0aCBjb3JyZXNwb25kaW5nIGVudHJ5IGZyb20gcmVvcmRlcmVkIGZsYXQgbGlzdFxuICAgICAgaWYgKGZsYXRJZHggPCBmbGF0UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGZsYXRRdWV1ZVtmbGF0SWR4XSk7XG4gICAgICAgIGZsYXRJZHgrKztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBBcHBlbmQgYW55IG5ld2x5IGluc2VydGVkIGxheWVycyBhdCB0aGUgZnJvbnQgKHRoZXkgYXJlIG5ldylcbiAgcmV0dXJuIHtcbiAgICBuZXdMYXllck9yZGVyOiBbLi4ubmV3SW5zZXJ0ZWRJZHMsIC4uLnJlc3VsdF0sXG4gICAgbmV3TGF5ZXJzXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2Ugc2F2ZWQgbGF5ZXJPcmRlciB3aXRoIGN1cnJlbnQgc3RhdGUgdG8gcmVzdG9yZSBsYXllciBncm91cHMuXG4gKiBDYWxsZWQgYWZ0ZXIgbGF5ZXJzIGhhdmUgYmVlbiBtZXJnZWQuIElmIHRoZSBzYXZlZCBjb25maWcgY29udGFpbnMgYSBsYXllck9yZGVyXG4gKiB3aXRoIGdyb3VwcywgdGhpcyByZXBsYWNlcyB0aGUgZmxhdCBsYXllck9yZGVyIHdpdGggdGhlIHNhdmVkIGhpZXJhcmNoaWNhbCBvbmUsXG4gKiBmaWx0ZXJpbmcgb3V0IGFueSBsYXllciBJRHMgdGhhdCBkb24ndCBleGlzdCBpbiB0aGUgY3VycmVudCBzdGF0ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlTGF5ZXJPcmRlcjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgc2F2ZWRMYXllck9yZGVyPzogYW55W10sXG4gIGZyb21Db25maWc/OiBib29sZWFuXG4pOiBTIHtcbiAgaWYgKCFzYXZlZExheWVyT3JkZXIgfHwgIUFycmF5LmlzQXJyYXkoc2F2ZWRMYXllck9yZGVyKSB8fCBzYXZlZExheWVyT3JkZXIubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIHNhdmVkIGxheWVyT3JkZXIgY29udGFpbnMgYW55IGdyb3Vwc1xuICBjb25zdCBoYXNHcm91cHMgPSBzYXZlZExheWVyT3JkZXIuc29tZShlbnRyeSA9PiBpc1BsYWluT2JqZWN0KGVudHJ5KSk7XG4gIGlmICghaGFzR3JvdXBzKSB7XG4gICAgLy8gTm8gZ3JvdXBzIC0gdGhlIGxheWVyIG1lcmdlciBhbHJlYWR5IGhhbmRsZWQgb3JkZXJpbmcgdmlhIHByZXNlcnZlTGF5ZXJPcmRlclxuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIElmIGxheWVycyBoYXZlbid0IGJlZW4gbWVyZ2VkIHlldCwgc3RvcmUgZm9yIGxhdGVyXG4gIGlmIChzdGF0ZS5sYXllcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbGF5ZXJPcmRlclRvQmVNZXJnZWQ6IHNhdmVkTGF5ZXJPcmRlclxuICAgIH07XG4gIH1cblxuICAvLyBCdWlsZCBhIHNldCBvZiB2YWxpZCBsYXllciBJRHMgZnJvbSBjdXJyZW50IHN0YXRlXG4gIGNvbnN0IHZhbGlkTGF5ZXJJZHMgPSBuZXcgU2V0KHN0YXRlLmxheWVycy5tYXAobCA9PiBsLmlkKSk7XG5cbiAgLy8gUmVjdXJzaXZlbHkgZmlsdGVyIHRoZSBzYXZlZCBsYXllck9yZGVyIHRvIG9ubHkgaW5jbHVkZSB2YWxpZCBsYXllcnNcbiAgZnVuY3Rpb24gZmlsdGVyTGF5ZXJPcmRlcihvcmRlcjogYW55W10pOiBMYXllck9yZGVyIHtcbiAgICBjb25zdCByZXN1bHQ6IExheWVyT3JkZXIgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIG9yZGVyKSB7XG4gICAgICBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgICAgY29uc3QgZ3JvdXAgPSBlbnRyeSBhcyBMYXllck9yZGVyR3JvdXA7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkR3JvdXBPcmRlciA9IGZpbHRlckxheWVyT3JkZXIoZ3JvdXAubGF5ZXJPcmRlcik7XG4gICAgICAgIC8vIEtlZXAgdGhlIGdyb3VwIGV2ZW4gaWYgZW1wdHkgKHVzZXIgbWF5IHdhbnQgdGhlIGVtcHR5IGdyb3VwKVxuICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgLi4uZ3JvdXAsXG4gICAgICAgICAgbGF5ZXJPcmRlcjogZmlsdGVyZWRHcm91cE9yZGVyXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnICYmIHZhbGlkTGF5ZXJJZHMuaGFzKGVudHJ5KSkge1xuICAgICAgICByZXN1bHQucHVzaChlbnRyeSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBjb25zdCByZXN0b3JlZExheWVyT3JkZXIgPSBmaWx0ZXJMYXllck9yZGVyKHNhdmVkTGF5ZXJPcmRlcik7XG5cbiAgLy8gRmluZCBhbnkgbGF5ZXJzIGluIHRoZSBjdXJyZW50IHN0YXRlIHRoYXQgYXJlbid0IGluIHRoZSByZXN0b3JlZCBvcmRlclxuICAvLyAoY291bGQgaGFwcGVuIGlmIGxheWVycyB3ZXJlIGFkZGVkIGJldHdlZW4gc2F2ZSBhbmQgbG9hZClcbiAgY29uc3QgbGF5ZXJJZHNJblJlc3RvcmVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZ1bmN0aW9uIGNvbGxlY3RJZHMob3JkZXI6IGFueVtdKSB7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBvcmRlcikge1xuICAgICAgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICAgIGNvbGxlY3RJZHMoKGVudHJ5IGFzIExheWVyT3JkZXJHcm91cCkubGF5ZXJPcmRlcik7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgbGF5ZXJJZHNJblJlc3RvcmVkLmFkZChlbnRyeSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbGxlY3RJZHMocmVzdG9yZWRMYXllck9yZGVyKTtcblxuICAvLyBBZGQgYW55IG1pc3NpbmcgbGF5ZXJzIGF0IHRoZSB0b3BcbiAgY29uc3QgbWlzc2luZ0xheWVycyA9IHN0YXRlLmxheWVycy5maWx0ZXIobCA9PiAhbGF5ZXJJZHNJblJlc3RvcmVkLmhhcyhsLmlkKSkubWFwKGwgPT4gbC5pZCk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBsYXllck9yZGVyOiBbLi4ubWlzc2luZ0xheWVycywgLi4ucmVzdG9yZWRMYXllck9yZGVyXSxcbiAgICBsYXllck9yZGVyVG9CZU1lcmdlZDogbnVsbFxuICB9O1xufVxuXG4vKipcbiAqIE1lcmdlIGludGVyYWN0aW9ucyB3aXRoIHNhdmVkIGNvbmZpZ1xuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlSW50ZXJhY3Rpb25zPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBpbnRlcmFjdGlvblRvQmVNZXJnZWQ6IFBhcnRpYWw8U2F2ZWRJbnRlcmFjdGlvbkNvbmZpZz4gfCB1bmRlZmluZWRcbik6IFMge1xuICBjb25zdCBtZXJnZWQ6IE5lc3RlZFBhcnRpYWw8U2F2ZWRJbnRlcmFjdGlvbkNvbmZpZz4gPSB7fTtcbiAgY29uc3QgdW5tZXJnZWQ6IFBhcnRpYWw8U2F2ZWRJbnRlcmFjdGlvbkNvbmZpZz4gPSB7fTtcblxuICBpZiAoaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkKSB7XG4gICAgKE9iamVjdC5rZXlzKGludGVyYWN0aW9uVG9CZU1lcmdlZCkgYXMgQXJyYXk8a2V5b2YgU2F2ZWRJbnRlcmFjdGlvbkNvbmZpZz4pLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmICghc3RhdGUuaW50ZXJhY3Rpb25Db25maWdba2V5XSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRDb25maWcgPVxuICAgICAgICBrZXkgPT09ICd0b29sdGlwJyB8fFxuICAgICAgICBrZXkgPT09ICdicnVzaCcgfHxcbiAgICAgICAga2V5ID09PSAnZ2VvY29kZXInIHx8XG4gICAgICAgIGtleSA9PT0gJ2xlZ2VuZCcgfHxcbiAgICAgICAga2V5ID09PSAnem9vbU9wYWNpdHknXG4gICAgICAgICAgPyBzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1trZXldLmNvbmZpZ1xuICAgICAgICAgIDogbnVsbDtcblxuICAgICAgY29uc3Qge2VuYWJsZWQsIC4uLmNvbmZpZ1NhdmVkfSA9IGludGVyYWN0aW9uVG9CZU1lcmdlZFtrZXldIHx8IHt9O1xuXG4gICAgICBsZXQgY29uZmlnVG9NZXJnZSA9IGNvbmZpZ1NhdmVkO1xuXG4gICAgICBpZiAoa2V5ID09PSAndG9vbHRpcCcpIHtcbiAgICAgICAgY29uc3Qge21lcmdlZFRvb2x0aXAsIHVubWVyZ2VkVG9vbHRpcH0gPSBtZXJnZUludGVyYWN0aW9uVG9vbHRpcENvbmZpZyhcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBjb25maWdTYXZlZCBhcyBTYXZlZEludGVyYWN0aW9uQ29uZmlnWyd0b29sdGlwJ11cbiAgICAgICAgKTtcblxuICAgICAgICAvLyBtZXJnZSBuZXcgZGF0YXNldCB0b29sdGlwcyB3aXRoIG9yaWdpbmFsIGRhdGFzZXQgdG9vbHRpcHNcbiAgICAgICAgY29uZmlnVG9NZXJnZSA9IHtcbiAgICAgICAgICBmaWVsZHNUb1Nob3c6IHtcbiAgICAgICAgICAgIC4uLihjdXJyZW50Q29uZmlnIGFzIFRvb2x0aXBJbmZvWydjb25maWcnXSkuZmllbGRzVG9TaG93LFxuICAgICAgICAgICAgLi4ubWVyZ2VkVG9vbHRpcFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoT2JqZWN0LmtleXModW5tZXJnZWRUb29sdGlwKS5sZW5ndGgpIHtcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgdW5tZXJnZWQudG9vbHRpcCA9IHtmaWVsZHNUb1Nob3c6IHVubWVyZ2VkVG9vbHRpcCwgZW5hYmxlZDogQm9vbGVhbihlbmFibGVkKX07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbWVyZ2VkW2tleV0gPSB7XG4gICAgICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnW2tleV0sXG4gICAgICAgIGVuYWJsZWQ6IEJvb2xlYW4oZW5hYmxlZCksXG4gICAgICAgIC4uLihjdXJyZW50Q29uZmlnXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGNvbmZpZzogcGljayhcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAuLi5jdXJyZW50Q29uZmlnLFxuICAgICAgICAgICAgICAgICAgLi4uY29uZmlnVG9NZXJnZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoY3VycmVudENvbmZpZylcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge30pXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGludGVyYWN0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgIC4uLm1lcmdlZFxuICAgIH0sXG4gICAgaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkOiBzYXZlZFVubWVyZ2VkSW50ZXJhY3Rpb24oc3RhdGUsIHVubWVyZ2VkKVxuICB9O1xuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG5mdW5jdGlvbiBjb21iaW5lSW50ZXJhY3Rpb25Db25maWdzKGNvbmZpZ3M6IFNhdmVkSW50ZXJhY3Rpb25Db25maWdbXSk6IFNhdmVkSW50ZXJhY3Rpb25Db25maWcge1xuICBjb25zdCBjb21iaW5lZCA9IHsuLi5jb25maWdzWzBdfTtcbiAgLy8gYGxlZ2VuZGAgaXMgb3B0aW9uYWwgb24gb2xkZXIgc2F2ZWQgbWFwczsgc2VlZCBpdCBzbyBhIGxhdGVyIGNvbmZpZyBpcyBub3QgZHJvcHBlZC5cbiAgaWYgKCFjb21iaW5lZC5sZWdlbmQpIHtcbiAgICBjb25zdCB3aXRoTGVnZW5kID0gY29uZmlncy5maW5kKGMgPT4gYy5sZWdlbmQpO1xuICAgIGlmICh3aXRoTGVnZW5kPy5sZWdlbmQpIHtcbiAgICAgIGNvbWJpbmVkLmxlZ2VuZCA9IHdpdGhMZWdlbmQubGVnZW5kO1xuICAgIH1cbiAgfVxuICAvLyBTYW1lIGZvciBmYWRlLW9uLXpvb206IGFuIG9sZGVyIGNvbmZpZyBpbiBmcm9udCBtdXN0IG5vdCBkcm9wIGNvbnRyb2xsZXJzIGZyb20gYSBsYXRlciBvbmUuXG4gIGlmICghY29tYmluZWQuem9vbU9wYWNpdHkpIHtcbiAgICBjb25zdCB3aXRoWm9vbU9wYWNpdHkgPSBjb25maWdzLmZpbmQoYyA9PiBjLnpvb21PcGFjaXR5KTtcbiAgICBpZiAod2l0aFpvb21PcGFjaXR5Py56b29tT3BhY2l0eSkge1xuICAgICAgY29tYmluZWQuem9vbU9wYWNpdHkgPSB3aXRoWm9vbU9wYWNpdHkuem9vbU9wYWNpdHk7XG4gICAgfVxuICB9XG4gIC8vIGhhbmRsZSBlYWNoIHByb3BlcnR5IGtleSBvZiBhbiBgSW50ZXJhY3Rpb25Db25maWdgLCBlLmcuIHRvb2x0aXAsIGdlb2NvZGVyLCBicnVzaCwgY29vcmRpbmF0ZVxuICAvLyBieSBjb21iaW5pbmcgdmFsdWVzIGZvciBlYWNoIGFtb25nIGFsbCBwYXNzZWQgaW4gY29uZmlnc1xuXG4gIGZvciAoY29uc3Qga2V5IGluIGNvbWJpbmVkKSB7XG4gICAgY29uc3QgdG9CZUNvbWJpbmVkUHJvcHMgPSBjb25maWdzLm1hcChjID0+IGNba2V5XSk7XG5cbiAgICAvLyBhbGwgb2YgdGhlc2UgaGF2ZSBhbiBlbmFibGVkIGJvb2xlYW5cbiAgICBjb21iaW5lZFtrZXldID0ge1xuICAgICAgLy8gYXJlIGFueSBvZiB0aGUgY29uZmlncycgZW5hYmxlZCB2YWx1ZXMgdHJ1ZT9cbiAgICAgIGVuYWJsZWQ6IHRvQmVDb21iaW5lZFByb3BzLnNvbWUocCA9PiBwPy5lbmFibGVkKVxuICAgIH07XG5cbiAgICBpZiAoa2V5ID09PSAndG9vbHRpcCcpIHtcbiAgICAgIC8vIGFyZSBhbnkgb2YgdGhlIGNvbmZpZ3MnIGNvbXBhcmVNb2RlIHZhbHVlcyB0cnVlP1xuICAgICAgY29tYmluZWRba2V5XS5jb21wYXJlTW9kZSA9IHRvQmVDb21iaW5lZFByb3BzLnNvbWUocCA9PiBwPy5jb21wYXJlTW9kZSk7XG5cbiAgICAgIC8vIHJldHVybiB0aGUgY29tcGFyZSB0eXBlIG1vZGUsIGl0IHdpbGwgYmUgZWl0aGVyIGFic29sdXRlIG9yIHJlbGF0aXZlXG4gICAgICBjb21iaW5lZFtrZXldLmNvbXBhcmVUeXBlID0gZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2UoXG4gICAgICAgIHRvQmVDb21iaW5lZFByb3BzLm1hcChwID0+IHAuY29tcGFyZVR5cGUpXG4gICAgICApO1xuXG4gICAgICAvLyBjb21iaW5lIGZpZWxkc1RvU2hvdyBhbW9uZyBhbGwgZGF0YXNldCBpZHNcbiAgICAgIGNvbWJpbmVkW2tleV0uZmllbGRzVG9TaG93ID0gdG9CZUNvbWJpbmVkUHJvcHNcbiAgICAgICAgLm1hcChwID0+IHAuZmllbGRzVG9TaG93KVxuICAgICAgICAucmVkdWNlKChhY2MsIG5leHRGaWVsZHNUb1Nob3cpID0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IG5leHREYXRhSWRLZXkgaW4gbmV4dEZpZWxkc1RvU2hvdykge1xuICAgICAgICAgICAgY29uc3QgbmV4dFRvb2x0aXBGaWVsZHMgPSBuZXh0RmllbGRzVG9TaG93W25leHREYXRhSWRLZXldO1xuICAgICAgICAgICAgaWYgKCFhY2NbbmV4dERhdGFJZEtleV0pIHtcbiAgICAgICAgICAgICAgLy8gaWYgdGhlIGRhdGFzZXQgaWQgaXMgbm90IHByZXNlbnQgaW4gdGhlIGFjY3VtdWxhdG9yXG4gICAgICAgICAgICAgIC8vIHRoZW4gYWRkIGl0IHdpdGggaXRzIHRvb2x0aXAgZmllbGRzXG4gICAgICAgICAgICAgIGFjY1tuZXh0RGF0YUlkS2V5XSA9IG5leHRUb29sdGlwRmllbGRzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHRoZSBkYXRhc2V0IGlkIGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgYWNjdW11bGF0b3JcbiAgICAgICAgICAgICAgLy8gc28gb25seSBhZGQgdGhlIG5leHQgdG9vbHRpcCBmaWVsZHMgZm9yIHRoaXMgZGF0YXNldCdzIGFycmF5IGlmIHRoZXkgYXJlIG5vdCBhbHJlYWR5IHByZXNlbnQsXG4gICAgICAgICAgICAgIC8vIHVzaW5nIHRoZSB0b29sdGlwRmllbGQubmFtZSBwcm9wZXJ0eSBmb3IgdW5pcXVlbmVzc1xuICAgICAgICAgICAgICBuZXh0VG9vbHRpcEZpZWxkcy5mb3JFYWNoKG5leHRURiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFhY2NbbmV4dERhdGFJZEtleV0uZmluZCgoe25hbWV9KSA9PiBuZXh0VEYubmFtZSA9PT0gbmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgIGFjY1tuZXh0RGF0YUlkS2V5XS5wdXNoKG5leHRURik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwge30pO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdicnVzaCcpIHtcbiAgICAgIC8vIGtlZXAgdGhlIGJpZ2dlc3QgYnJ1c2ggc2l6ZVxuICAgICAgY29tYmluZWRba2V5XS5zaXplID1cbiAgICAgICAgYWdncmVnYXRlKHRvQmVDb21iaW5lZFByb3BzLCBBR0dSRUdBVElPTl9UWVBFUy5tYXhpbXVtLCBwID0+IHAuc2l6ZSkgPz8gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnZ2VvY29kZXInKSB7XG4gICAgICBjb21iaW5lZFtrZXldLmxpbWl0U2VhcmNoID0gdG9CZUNvbWJpbmVkUHJvcHMuc29tZShwID0+IHA/LmxpbWl0U2VhcmNoKTtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnbGVnZW5kJykge1xuICAgICAgY29tYmluZWRba2V5XS5oaWRlSW52aXNpYmxlTGF5ZXJzID0gdG9CZUNvbWJpbmVkUHJvcHMuc29tZShwID0+IHA/LmhpZGVJbnZpc2libGVMYXllcnMpO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICd6b29tT3BhY2l0eScgJiYgY29tYmluZWQuem9vbU9wYWNpdHkpIHtcbiAgICAgIGNvbWJpbmVkLnpvb21PcGFjaXR5LmNvbnRyb2xsZXJzID0gY29tYmluZVpvb21PcGFjaXR5Q29udHJvbGxlcnModG9CZUNvbWJpbmVkUHJvcHMpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb21iaW5lZDtcbn1cblxuZnVuY3Rpb24gc2F2ZWRVbm1lcmdlZEludGVyYWN0aW9uPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICB1bm1lcmdlZDogUGFydGlhbDxTYXZlZEludGVyYWN0aW9uQ29uZmlnPlxuKSB7XG4gIGlmICghdW5tZXJnZWQ/LnRvb2x0aXA/LmZpZWxkc1RvU2hvdykge1xuICAgIHJldHVybiBzdGF0ZS5pbnRlcmFjdGlvblRvQmVNZXJnZWQ7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB0b29sdGlwOiB7XG4gICAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvblRvQmVNZXJnZWQudG9vbHRpcCxcbiAgICAgIC4uLih0eXBlb2YgdW5tZXJnZWQ/LnRvb2x0aXA/LmVuYWJsZWQgPT09ICdib29sZWFuJ1xuICAgICAgICA/IHtlbmFibGVkOiB1bm1lcmdlZC50b29sdGlwLmVuYWJsZWR9XG4gICAgICAgIDoge30pLFxuICAgICAgZmllbGRzVG9TaG93OiB7XG4gICAgICAgIC4uLnN0YXRlLmludGVyYWN0aW9uVG9CZU1lcmdlZD8udG9vbHRpcD8uZmllbGRzVG9TaG93LFxuICAgICAgICAuLi51bm1lcmdlZD8udG9vbHRpcD8uZmllbGRzVG9TaG93XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiByZXBsYWNlSW50ZXJhY3Rpb25EYXRhc2V0SWRzKGludGVyYWN0aW9uQ29uZmlnLCBkYXRhSWQ6IHN0cmluZywgZGF0YUlkVG9SZXBsYWNlOiBzdHJpbmcpIHtcbiAgaWYgKGludGVyYWN0aW9uQ29uZmlnPy50b29sdGlwPy5maWVsZHNUb1Nob3dbZGF0YUlkXSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgIHRvb2x0aXA6IHtcbiAgICAgICAgLi4uaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcCxcbiAgICAgICAgZmllbGRzVG9TaG93OiB7XG4gICAgICAgICAgW2RhdGFJZFRvUmVwbGFjZV06IGludGVyYWN0aW9uQ29uZmlnPy50b29sdGlwPy5maWVsZHNUb1Nob3dbZGF0YUlkXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBNZXJnZSBzcGxpdE1hcHMgY29uZmlnIHdpdGggY3VycmVudCB2aXNTdGV0ZS5cbiAqIFBhbmVscyBhcmUgbWF0Y2hlZCBieSBpbmRleDogaW5kZXggaSBvZiBgc3BsaXRNYXBzYCwgYHN0YXRlLnNwbGl0TWFwc2AgYW5kXG4gKiBgc3RhdGUuc3BsaXRNYXBzVG9CZU1lcmdlZGAgaXMgdGhlIHNhbWUgbWFwIHBhbmVsLlxuICogMS4gaWYgY3VycmVudCBtYXAgaXMgc3BsaXQsIGJ1dCBzcGxpdE1hcCBET0VTTk9UIGNvbnRhaW4gbWFwc1xuICogICAgOiBkb24ndCBtZXJnZSBhbnl0aGluZ1xuICogMi4gaWYgY3VycmVudCBtYXAgaXMgTk9UIHNwbGl0LCBidXQgc3BsaXRNYXBzIGNvbnRhaW4gbWFwc1xuICogICAgOiBhZGQgdG8gc3BsaXRNYXBzLCBhbmQgYWRkIGN1cnJlbnQgbGF5ZXJzIHRvIHNwbGl0TWFwcy5cbiAqICAgICAgUGFuZWxzIGFyZSBjcmVhdGVkIG9uY2Ugb25lIG9mIHRoZW0gY2FuIGJlIG1lcmdlZDogaXQgaGFzIG5vIGxheWVycywgb3Igb25lIG9mIGl0cyBsYXllcnMgZXhpc3RzXG4gKiAzLiBsYXllcnMgdGhhdCBkb24ndCBleGlzdCB5ZXRcbiAqICAgIDogc2F2ZSB0byBzcGxpdE1hcHNUb0JlTWVyZ2VkLCBpbiB0aGUgcGFuZWwgYXQgdGhlIHNhbWUgaW5kZXhcbiAqIEEgbGF5ZXIgbGlzdGVkIGluIHNwbGl0TWFwcyBvbmx5IHNob3dzIGluIHRoZSBwYW5lbHMgdGhhdCBsaXN0IGl0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VTcGxpdE1hcHM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHNwbGl0TWFwczogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnc3BsaXRNYXBzJ10gPSBbXVxuKTogUyB7XG4gIGNvbnN0IGxheWVyRXhpc3RzID0gKGlkOiBzdHJpbmcpID0+IHN0YXRlLmxheWVycy5zb21lKGwgPT4gbC5pZCA9PT0gaWQpO1xuICBjb25zdCBjcmVhdGVQYW5lbHMgPVxuICAgIHN0YXRlLnNwbGl0TWFwcy5sZW5ndGggPiAwIHx8XG4gICAgc3BsaXRNYXBzLnNvbWUoc20gPT4ge1xuICAgICAgY29uc3QgaWRzID0gT2JqZWN0LmtleXMoc20ubGF5ZXJzKTtcbiAgICAgIHJldHVybiAhaWRzLmxlbmd0aCB8fCBpZHMuc29tZShsYXllckV4aXN0cyk7XG4gICAgfSk7XG4gIGNvbnN0IGN1cnJlbnRMYXllcnMgPSBnZXRJbml0aWFsTWFwTGF5ZXJzRm9yU3BsaXRNYXAoXG4gICAgc3RhdGUubGF5ZXJzLmZpbHRlcihsID0+ICFzcGxpdE1hcHMuc29tZShzbSA9PiBsLmlkIGluIHNtLmxheWVycykpXG4gICk7XG5cbiAgY29uc3QgbWVyZ2VkID0gWy4uLnN0YXRlLnNwbGl0TWFwc107XG4gIGNvbnN0IHVubWVyZ2VkOiB0eXBlb2Ygc3BsaXRNYXBzID0gW107XG4gIHNwbGl0TWFwcy5mb3JFYWNoKChzbSwgaSkgPT4ge1xuICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhzbS5sYXllcnMpO1xuICAgIGlmIChjcmVhdGVQYW5lbHMpIHtcbiAgICAgIC8vIGNyZWF0ZSBtYXAgcGFuZWwgaWYgY3VycmVudCBtYXAgaXMgbm90IHNwbGl0LCBrZWVwIGlkXG4gICAgICBjb25zdCBwYW5lbCA9IG1lcmdlZFtpXSB8fCB7Li4uc20sIGxheWVyczogY3VycmVudExheWVyc307XG4gICAgICBtZXJnZWRbaV0gPSB7XG4gICAgICAgIC4uLnBhbmVsLFxuICAgICAgICBsYXllcnM6IHsuLi5wYW5lbC5sYXllcnMsIC4uLk9iamVjdC5mcm9tRW50cmllcyhlbnRyaWVzLmZpbHRlcigoW2lkXSkgPT4gbGF5ZXJFeGlzdHMoaWQpKSl9XG4gICAgICB9O1xuICAgIH1cbiAgICB1bm1lcmdlZFtpXSA9IHsuLi5zbSwgbGF5ZXJzOiBPYmplY3QuZnJvbUVudHJpZXMoZW50cmllcy5maWx0ZXIoKFtpZF0pID0+ICFsYXllckV4aXN0cyhpZCkpKX07XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgc3BsaXRNYXBzOiBtZXJnZWQsXG4gICAgc3BsaXRNYXBzVG9CZU1lcmdlZDogdW5tZXJnZWQuc29tZShzbSA9PiBPYmplY3Qua2V5cyhzbS5sYXllcnMpLmxlbmd0aClcbiAgICAgID8gY29tYmluZVNwbGl0TWFwc0J5SW5kZXgoc3RhdGUuc3BsaXRNYXBzVG9CZU1lcmdlZCwgdW5tZXJnZWQpXG4gICAgICA6IHN0YXRlLnNwbGl0TWFwc1RvQmVNZXJnZWRcbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBjaGFydHMgd2l0aCBzYXZlZCBjb25maWcuIENoYXJ0cyB3aG9zZSBkYXRhc2V0IGlzIG5vdCBsb2FkZWQgeWV0IGFyZVxuICogcGFya2VkIG9uIGBjaGFydHNUb0JlTWVyZ2VkYCAoc2FtZSBhcyBmaWx0ZXJzKSBzbyBkYXRhc2V0IHJlcGxhY2UgY2FuIHJlbWFwXG4gKiBgZGF0YUlkYCBhbmQgcmVzdG9yZSB0aGVtIGFmdGVyIHRoZSBuZXcgdGFibGUgbGFuZHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUNoYXJ0czxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgY2hhcnRzOiBDaGFydENvbmZpZ1tdIHwgdW5kZWZpbmVkLFxuICBmcm9tQ29uZmlnPzogYm9vbGVhblxuKTogUyB7XG4gIGlmICghQXJyYXkuaXNBcnJheShjaGFydHMpIHx8ICFjaGFydHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGluY29taW5nSWRzID0gbmV3IFNldChcbiAgICBjaGFydHMubWFwKGNoYXJ0ID0+IGNoYXJ0Py5pZCkuZmlsdGVyKChpZCk6IGlkIGlzIHN0cmluZyA9PiBCb29sZWFuKGlkKSlcbiAgKTtcbiAgY29uc3QgZXhpc3RpbmdJZHMgPSBuZXcgU2V0KChzdGF0ZS5jaGFydHMgfHwgW10pLm1hcChjaGFydCA9PiBjaGFydC5pZCkpO1xuICBjb25zdCBuZXh0Q2hhcnRzOiBDaGFydENvbmZpZ1tdID0gW107XG4gIGNvbnN0IGZhaWxlZDogQ2hhcnRDb25maWdbXSA9IFtdO1xuICBjaGFydHMuZm9yRWFjaChjaGFydCA9PiB7XG4gICAgaWYgKCFjaGFydCB8fCAhY2hhcnQuaWQgfHwgZXhpc3RpbmdJZHMuaGFzKGNoYXJ0LmlkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBub3JtYWxpemVkOiBDaGFydENvbmZpZyA9IGZyb21Db25maWdcbiAgICAgID8ge1xuICAgICAgICAgIC4uLmNoYXJ0LFxuICAgICAgICAgIC8vIE9sZGVyIGNvbmZpZ3Mgb21pdCBgcGlubmVkYDsga2VlcCBjaGFydHMgdmlzaWJsZSBsaWtlIHRoZSBsZWdlbmQuXG4gICAgICAgICAgcGlubmVkOiBjaGFydC5waW5uZWQgIT09IGZhbHNlLFxuICAgICAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgICAgIC4uLmNoYXJ0LmRpc3BsYXksXG4gICAgICAgICAgICBpc0NvbmZpZ0FjdGl2ZTogZmFsc2UsXG4gICAgICAgICAgICBpc0pzb25FZGl0b3JBY3RpdmU6IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA6IGNoYXJ0O1xuICAgIGlmIChcbiAgICAgIG5vcm1hbGl6ZWQuZGF0YUlkICYmXG4gICAgICAoIXN0YXRlLmRhdGFzZXRzW25vcm1hbGl6ZWQuZGF0YUlkXSB8fCBzdGF0ZS5pc01lcmdpbmdEYXRhc2V0c1tub3JtYWxpemVkLmRhdGFJZF0pXG4gICAgKSB7XG4gICAgICBmYWlsZWQucHVzaChub3JtYWxpemVkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXhpc3RpbmdJZHMuYWRkKG5vcm1hbGl6ZWQuaWQpO1xuICAgIG5leHRDaGFydHMucHVzaChub3JtYWxpemVkKTtcbiAgfSk7XG4gIGlmICghbmV4dENoYXJ0cy5sZW5ndGggJiYgIWZhaWxlZC5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBjaGFydHM6IG5leHRDaGFydHMubGVuZ3RoID8gWy4uLihzdGF0ZS5jaGFydHMgfHwgW10pLCAuLi5uZXh0Q2hhcnRzXSA6IHN0YXRlLmNoYXJ0cyxcbiAgICBjaGFydHNUb0JlTWVyZ2VkOiBbXG4gICAgICAuLi4oc3RhdGUuY2hhcnRzVG9CZU1lcmdlZCB8fCBbXSkuZmlsdGVyKGNoYXJ0ID0+ICFpbmNvbWluZ0lkcy5oYXMoY2hhcnQuaWQpKSxcbiAgICAgIC4uLmZhaWxlZFxuICAgIF1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VDaGFydERhdGFzZXRJZHMoXG4gIHNhdmVkQ2hhcnRzOiBDaGFydENvbmZpZ1tdIHwgdW5kZWZpbmVkLFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YUlkVG9Vc2U6IHN0cmluZ1xuKTogQ2hhcnRDb25maWdbXSB8IG51bGwge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoc2F2ZWRDaGFydHMpIHx8ICFzYXZlZENoYXJ0cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCByZXBsYWNlZCA9IHNhdmVkQ2hhcnRzXG4gICAgLmZpbHRlcihjaGFydCA9PiBjaGFydD8uZGF0YUlkID09PSBkYXRhSWQpXG4gICAgLm1hcChjaGFydCA9PiAoey4uLmNoYXJ0LCBkYXRhSWQ6IGRhdGFJZFRvVXNlfSkpO1xuICByZXR1cm4gcmVwbGFjZWQubGVuZ3RoID8gcmVwbGFjZWQgOiBudWxsO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRWZmZWN0czxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgZWZmZWN0czogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnZWZmZWN0cyddLFxuICBmcm9tQ29uZmlnPzogYm9vbGVhblxuKTogUyB7XG4gIGNvbnN0IG5ld0VmZmVjdHMgPSBbXG4gICAgLi4uc3RhdGUuZWZmZWN0cyxcbiAgICAuLi4oZWZmZWN0cyB8fCBbXSlcbiAgICAgIC5tYXAoZWZmZWN0ID0+IHtcbiAgICAgICAgcmV0dXJuIGZyb21Db25maWdcbiAgICAgICAgICA/IGNyZWF0ZUVmZmVjdChcbiAgICAgICAgICAgICAgZGVlcG1lcmdlLmFsbChbXG4gICAgICAgICAgICAgICAgZWZmZWN0LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIC8vIGNvbGxhcHNlIGFsbCBwYW5lbHMgd2hlbiBsb2FkaW5nIGVmZmVjdHNcbiAgICAgICAgICAgICAgICAgIGlzQ29uZmlnQWN0aXZlOiBmYWxzZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IChlZmZlY3QgYXMgRWZmZWN0VHlwZSk7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcihlZmZlY3QgPT4ge1xuICAgICAgICByZXR1cm4gQm9vbGVhbihlZmZlY3QgJiYgZWZmZWN0LmlzVmFsaWRUb1NhdmUoKSk7XG4gICAgICB9KVxuICBdO1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGVmZmVjdHM6IG5ld0VmZmVjdHMsXG4gICAgZWZmZWN0T3JkZXI6IG5ld0VmZmVjdHMubWFwKGVmZmVjdCA9PiBlZmZlY3QuaWQpXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2UgYW5ub3RhdGlvbnMgd2l0aCBzYXZlZCBjb25maWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQW5ub3RhdGlvbnM8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgYW5ub3RhdGlvbnM6IGFueVtdKTogUyB7XG4gIGlmICghYW5ub3RhdGlvbnMgfHwgIWFubm90YXRpb25zLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBleGlzdGluZ0lkcyA9IG5ldyBTZXQoc3RhdGUuYW5ub3RhdGlvbnMubWFwKGEgPT4gYS5pZCkpO1xuICBjb25zdCB2YWxpZEFubm90YXRpb25zID0gYW5ub3RhdGlvbnNcbiAgICAuZmlsdGVyKFxuICAgICAgYSA9PlxuICAgICAgICBhICYmXG4gICAgICAgIGEuaWQgJiZcbiAgICAgICAgIWV4aXN0aW5nSWRzLmhhcyhhLmlkKSAmJlxuICAgICAgICBpc0Fubm90YXRpb25LaW5kKGEua2luZCkgJiZcbiAgICAgICAgQXJyYXkuaXNBcnJheShhLmFuY2hvclBvaW50KSAmJlxuICAgICAgICAoYS5hbmNob3JQb2ludC5sZW5ndGggPT09IDIgfHwgYS5hbmNob3JQb2ludC5sZW5ndGggPT09IDMpICYmXG4gICAgICAgIGEuYW5jaG9yUG9pbnQuZXZlcnkodmFsdWUgPT4gTnVtYmVyLmlzRmluaXRlKHZhbHVlKSlcbiAgICApXG4gICAgLm1hcChhID0+ICh7XG4gICAgICBpc1Zpc2libGU6IHRydWUsXG4gICAgICBhdXRvU2l6ZTogdHJ1ZSxcbiAgICAgIGF1dG9TaXplWTogdHJ1ZSxcbiAgICAgIGxhYmVsOiAnJyxcbiAgICAgIGxpbmVDb2xvcjogSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IsXG4gICAgICBsaW5lV2lkdGg6IElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX1dJRFRILFxuICAgICAgdGV4dFdpZHRoOiAwLFxuICAgICAgdGV4dEhlaWdodDogMCxcbiAgICAgIC4uLmFcbiAgICB9KSk7XG4gIGlmICghdmFsaWRBbm5vdGF0aW9ucy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhbm5vdGF0aW9uczogWy4uLnN0YXRlLmFubm90YXRpb25zLCAuLi52YWxpZEFubm90YXRpb25zXVxuICB9O1xufVxuXG4vKipcbiAqIE1lcmdlIGludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAgd2l0aCBzYXZlZCBjb25maWcsXG4gKiB2YWxpZGF0ZSBmaWVsZHNUb1Nob3dcbiAqXG4gKiBAcGFyYW0gc3RhdGVcbiAqIEBwYXJhbSB0b29sdGlwQ29uZmlnXG4gKiBAcmV0dXJuIC0ge21lcmdlZFRvb2x0aXA6IHt9LCB1bm1lcmdlZFRvb2x0aXA6IHt9fVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VJbnRlcmFjdGlvblRvb2x0aXBDb25maWcoXG4gIHN0YXRlOiBWaXNTdGF0ZSxcbiAgdG9vbHRpcENvbmZpZzogUGljazxUb29sdGlwSW5mb1snY29uZmlnJ10sICdmaWVsZHNUb1Nob3cnPiB8IG51bGwgPSBudWxsXG4pIHtcbiAgY29uc3QgdW5tZXJnZWRUb29sdGlwOiBUb29sdGlwSW5mb1snY29uZmlnJ11bJ2ZpZWxkc1RvU2hvdyddID0ge307XG4gIGNvbnN0IG1lcmdlZFRvb2x0aXA6IFRvb2x0aXBJbmZvWydjb25maWcnXVsnZmllbGRzVG9TaG93J10gPSB7fTtcblxuICBpZiAoXG4gICAgIXRvb2x0aXBDb25maWcgfHxcbiAgICAhdG9vbHRpcENvbmZpZy5maWVsZHNUb1Nob3cgfHxcbiAgICAhT2JqZWN0LmtleXModG9vbHRpcENvbmZpZy5maWVsZHNUb1Nob3cpLmxlbmd0aFxuICApIHtcbiAgICByZXR1cm4ge21lcmdlZFRvb2x0aXAsIHVubWVyZ2VkVG9vbHRpcH07XG4gIH1cblxuICBmb3IgKGNvbnN0IGRhdGFJZCBpbiB0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvdykge1xuICAgIGlmICghc3RhdGUuZGF0YXNldHNbZGF0YUlkXSB8fCBzdGF0ZS5pc01lcmdpbmdEYXRhc2V0c1tkYXRhSWRdKSB7XG4gICAgICAvLyBpcyBub3QgeWV0IGxvYWRlZFxuICAgICAgdW5tZXJnZWRUb29sdGlwW2RhdGFJZF0gPSB0b29sdGlwQ29uZmlnLmZpZWxkc1RvU2hvd1tkYXRhSWRdO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiBkYXRhc2V0IGlzIGxvYWRlZFxuICAgICAgY29uc3QgYWxsRmllbGRzID0gc3RhdGUuZGF0YXNldHNbZGF0YUlkXS5maWVsZHMubWFwKGQgPT4gZC5uYW1lKTtcbiAgICAgIGNvbnN0IGZvdW5kRmllbGRzVG9TaG93ID0gdG9vbHRpcENvbmZpZy5maWVsZHNUb1Nob3dbZGF0YUlkXS5maWx0ZXIoZmllbGQgPT5cbiAgICAgICAgYWxsRmllbGRzLmluY2x1ZGVzKGZpZWxkLm5hbWUpXG4gICAgICApO1xuXG4gICAgICBtZXJnZWRUb29sdGlwW2RhdGFJZF0gPSBmb3VuZEZpZWxkc1RvU2hvdztcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge21lcmdlZFRvb2x0aXAsIHVubWVyZ2VkVG9vbHRpcH07XG59XG4vKipcbiAqIE1lcmdlIGxheWVyQmxlbmRpbmcgd2l0aCBzYXZlZFxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlTGF5ZXJCbGVuZGluZzxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgbGF5ZXJCbGVuZGluZzogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnbGF5ZXJCbGVuZGluZyddXG4pOiBTIHtcbiAgaWYgKGxheWVyQmxlbmRpbmcgJiYgTEFZRVJfQkxFTkRJTkdTW2xheWVyQmxlbmRpbmddKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbGF5ZXJCbGVuZGluZ1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogQ29tYmluZXMgbXVsdGlwbGUgbGF5ZXIgYmxlbmRpbmcgY29uZmlncyBpbnRvIGEgc2luZ2xlIHN0cmluZ1xuICogYnkgcmV0dXJuaW5nIHRoZSBvbmUgd2l0aCB0aGUgaGlnaGVzdCBvY2N1cnJlbmNlXG4gKi9cbmZ1bmN0aW9uIGNvbWJpbmVMYXllckJsZW5kaW5nQ29uZmlncyhjb25maWdzOiBzdHJpbmdbXSk6IHN0cmluZyB8IG51bGwge1xuICAvLyByZXR1cm4gdGhlIG1vZGUgb2YgdGhlIGxheWVyIGJsZW5kaW5nIHR5cGVcbiAgcmV0dXJuIGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlKGNvbmZpZ3MpO1xufVxuXG4vKipcbiAqIE1lcmdlIG92ZXJsYXlCbGVuZGluZyB3aXRoIHNhdmVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZU92ZXJsYXlCbGVuZGluZzxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgb3ZlcmxheUJsZW5kaW5nOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydvdmVybGF5QmxlbmRpbmcnXVxuKTogUyB7XG4gIGlmIChvdmVybGF5QmxlbmRpbmcgJiYgT1ZFUkxBWV9CTEVORElOR1Nbb3ZlcmxheUJsZW5kaW5nXSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIG92ZXJsYXlCbGVuZGluZ1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59XG5cbi8qKlxuICogQ29tYmluZXMgbXVsdGlwbGUgb3ZlcmxheSBibGVuZGluZyBjb25maWdzIGludG8gYSBzaW5nbGUgc3RyaW5nXG4gKiBieSByZXR1cm5pbmcgdGhlIG9uZSB3aXRoIHRoZSBoaWdoZXN0IG9jY3VycmVuY2VcbiAqKi9cbmZ1bmN0aW9uIGNvbWJpbmVPdmVybGF5QmxlbmRpbmdDb25maWdzKGNvbmZpZ3M6IHN0cmluZ1tdKTogc3RyaW5nIHwgbnVsbCB7XG4gIC8vIHJldHVybiB0aGUgbW9kZSBvZiB0aGUgb3ZlcmxheSBibGVuZGluZyB0eXBlXG4gIHJldHVybiBnZXRWYWx1ZVdpdGhIaWdoZXN0T2NjdXJyZW5jZShjb25maWdzKTtcbn1cblxuLyoqXG4gKiBNZXJnZSBhbmltYXRpb24gY29uZmlnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUFuaW1hdGlvbkNvbmZpZzxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgYW5pbWF0aW9uOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydhbmltYXRpb25Db25maWcnXVxuKTogUyB7XG4gIGlmIChhbmltYXRpb24gJiYgYW5pbWF0aW9uLmN1cnJlbnRUaW1lKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgYW5pbWF0aW9uQ29uZmlnOiB7XG4gICAgICAgIC4uLnN0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgLi4uYW5pbWF0aW9uLFxuICAgICAgICBkb21haW46IG51bGxcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5mdW5jdGlvbiBjb21iaW5lQW5pbWF0aW9uQ29uZmlncyhjb25maWdzOiBTYXZlZEFuaW1hdGlvbkNvbmZpZ1tdKTogU2F2ZWRBbmltYXRpb25Db25maWcge1xuICAvLyBnZXQgdGhlIHNtYWxsZXN0IHZhbHVlcyBvZiBjdXJyZW50VGltZSBhbmQgc3BlZWQgYW1vbmcgYWxsIGNvbmZpZ3NcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW50VGltZTogYWdncmVnYXRlKGNvbmZpZ3MsIEFHR1JFR0FUSU9OX1RZUEVTLm1pbmltdW0sIGMgPT4gYy5jdXJyZW50VGltZSkgPz8gbnVsbCxcbiAgICBzcGVlZDogYWdncmVnYXRlKGNvbmZpZ3MsIEFHR1JFR0FUSU9OX1RZUEVTLm1pbmltdW0sIGMgPT4gYy5zcGVlZCkgPz8gbnVsbCxcbiAgICAvLyBhbmQgdGhlIG1vc3QgY29tbW9uIHRpbWUgZm9ybWF0IGFuZCB0aW1lem9uZSBhbW9uZyB0aGUgY29uZmlncyB0aGF0IHNldCBvbmVcbiAgICB0aW1lRm9ybWF0OiBnZXRWYWx1ZVdpdGhIaWdoZXN0T2NjdXJyZW5jZShjb25maWdzLm1hcChjID0+IGMudGltZUZvcm1hdCkpLFxuICAgIHRpbWV6b25lOiBnZXRWYWx1ZVdpdGhIaWdoZXN0T2NjdXJyZW5jZShjb25maWdzLm1hcChjID0+IGMudGltZXpvbmUpKVxuICB9O1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIGxheWVyIGNvbHVtbnMgd2l0aCBuZXcgZGF0YSxcbiAqIHVwZGF0ZSBmaWVsZElkeCBiYXNlZCBvbiBuZXcgZmllbGRzXG4gKlxuICogQHBhcmFtIGZpZWxkc1xuICogQHBhcmFtIHNhdmVkQ29sc1xuICogQHBhcmFtIGVtcHR5Q29sc1xuICogQHBhcmFtIG9wdGlvbnNcbiAqIEByZXR1cm4gLSB2YWxpZGF0ZWQgY29sdW1ucyBvciBudWxsXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2F2ZWRMYXllckNvbHVtbnMoXG4gIGZpZWxkczogS2VwbGVyVGFibGVbJ2ZpZWxkcyddLFxuICBzYXZlZENvbHM6IHtcbiAgICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XG4gIH0gPSB7fSxcbiAgZW1wdHlDb2xzOiBMYXllckNvbHVtbnMsXG4gIG9wdGlvbnM6IHt0aHJvd09uRXJyb3I/OiBib29sZWFufSA9IHt9XG4pIHtcbiAgLy8gUHJlcGFyZSBjb2x1bW5zIGZvciB0aGUgdmFsaWRhdG9yXG4gIGNvbnN0IGNvbHVtbnM6IHR5cGVvZiBlbXB0eUNvbHMgPSB7fTtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZW1wdHlDb2xzKSkge1xuICAgIGNvbHVtbnNba2V5XSA9IHsuLi5lbXB0eUNvbHNba2V5XX07XG5cbiAgICBjb25zdCBzYXZlZCA9IHNhdmVkQ29sc1trZXldO1xuICAgIGlmIChzYXZlZCkge1xuICAgICAgY29uc3QgZmllbGRJZHggPSBmaWVsZHMuZmluZEluZGV4KCh7bmFtZX0pID0+IG5hbWUgPT09IHNhdmVkKTtcblxuICAgICAgaWYgKGZpZWxkSWR4ID4gLTEpIHtcbiAgICAgICAgLy8gdXBkYXRlIGZvdW5kIGNvbHVtbnNcbiAgICAgICAgY29sdW1uc1trZXldLmZpZWxkSWR4ID0gZmllbGRJZHg7XG4gICAgICAgIGNvbHVtbnNba2V5XS52YWx1ZSA9IHNhdmVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGZpbmQgYWN0dWFsIGNvbHVtbiBmaWVsZElkeCwgaW4gY2FzZSBpdCBoYXMgY2hhbmdlZFxuICBjb25zdCBhbGxDb2xGb3VuZCA9IE9iamVjdC5rZXlzKGNvbHVtbnMpLmV2ZXJ5KGtleSA9PlxuICAgIHZhbGlkYXRlQ29sdW1uKGNvbHVtbnNba2V5XSwgY29sdW1ucywgZmllbGRzKVxuICApO1xuXG4gIGNvbnN0IHJ2ID0gYWxsQ29sRm91bmQgPyBjb2x1bW5zIDogbnVsbDtcbiAgaWYgKG9wdGlvbnMudGhyb3dPbkVycm9yKSB7XG4gICAgY29uc3QgcmVxdWlyZWRDb2x1bW5zID0gT2JqZWN0LmtleXMoZW1wdHlDb2xzKS5maWx0ZXIoayA9PiAhZW1wdHlDb2xzW2tdLm9wdGlvbmFsKTtcbiAgICBjb25zdCBtaXNzaW5nQ29sdW1ucyA9IHJlcXVpcmVkQ29sdW1ucy5maWx0ZXIoayA9PiAhY29sdW1ucz8uW2tdLnZhbHVlKTtcbiAgICBpZiAobWlzc2luZ0NvbHVtbnMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGhhcyBtaXNzaW5nIG9yIGludmFsaWQgY29sdW1uczogJHttaXNzaW5nQ29sdW1ucy5qb2luKCcsICcpfWApO1xuICAgIH1cbiAgICBjb25zdCBjb25maWdDb2x1bW5zID0gT2JqZWN0LmtleXMoc2F2ZWRDb2xzKTtcbiAgICBjb25zdCBpbnZhbGlkQ29sdW1ucyA9IGNvbmZpZ0NvbHVtbnMuZmlsdGVyKGsgPT4gIWNvbHVtbnM/LltrXT8udmFsdWUpO1xuICAgIGlmIChpbnZhbGlkQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIGludmFsaWQgY29sdW1uczogJHtpbnZhbGlkQ29sdW1ucy5qb2luKCcsICcpfWApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBydjtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBsYXllciBjb2x1bW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQ29sdW1uKFxuICBjb2x1bW46IExheWVyQ29sdW1uICYge3ZhbGlkYXRvcj86IHR5cGVvZiB2YWxpZGF0ZUNvbHVtbn0sXG4gIGNvbHVtbnM6IExheWVyQ29sdW1ucyxcbiAgYWxsRmllbGRzOiBLZXBsZXJUYWJsZVsnZmllbGRzJ11cbik6IGJvb2xlYW4ge1xuICBpZiAoY29sdW1uLm9wdGlvbmFsIHx8IGNvbHVtbi52YWx1ZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChjb2x1bW4udmFsaWRhdG9yKSB7XG4gICAgcmV0dXJuIGNvbHVtbi52YWxpZGF0b3IoY29sdW1uLCBjb2x1bW5zLCBhbGxGaWVsZHMpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCB0ZXh0IGxhYmVsIGNvbmZpZyB3aXRoIG5ldyBkYXRhXG4gKiByZWZlciB0byB2aXMtc3RhdGUtc2NoZW1hLmpzIFRleHRMYWJlbFNjaGVtYVYxXG4gKlxuICogQHBhcmFtIHtBcnJheTxPYmplY3Q+fSBmaWVsZHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBzYXZlZFRleHRMYWJlbFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4ge09iamVjdH0gLSB2YWxpZGF0ZWQgdGV4dGxhYmVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVNhdmVkVGV4dExhYmVsKFxuICBmaWVsZHMsXG4gIFtsYXllclRleHRMYWJlbF0sXG4gIHNhdmVkVGV4dExhYmVsLFxuICBvcHRpb25zOiB7dGhyb3dPbkVycm9yPzogYm9vbGVhbn0gPSB7fVxuKSB7XG4gIGNvbnN0IHNhdmVkVGV4dExhYmVscyA9IEFycmF5LmlzQXJyYXkoc2F2ZWRUZXh0TGFiZWwpID8gc2F2ZWRUZXh0TGFiZWwgOiBbc2F2ZWRUZXh0TGFiZWxdO1xuXG4gIC8vIHZhbGlkYXRlIGZpZWxkXG4gIHJldHVybiBzYXZlZFRleHRMYWJlbHMubWFwKHRleHRMYWJlbCA9PiB7XG4gICAgY29uc3QgZmllbGQgPSB0ZXh0TGFiZWwuZmllbGRcbiAgICAgID8gZmllbGRzLmZpbmQoZmQgPT5cbiAgICAgICAgICBPYmplY3Qua2V5cyh0ZXh0TGFiZWwuZmllbGQpLmV2ZXJ5KGtleSA9PiB0ZXh0TGFiZWwuZmllbGRba2V5XSA9PT0gZmRba2V5XSlcbiAgICAgICAgKVxuICAgICAgOiBudWxsO1xuXG4gICAgaWYgKGZpZWxkID09PSB1bmRlZmluZWQgJiYgb3B0aW9ucy50aHJvd09uRXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIGludmFsaWQgdGV4dCBsYWJlbCBmaWVsZDogJHtKU09OLnN0cmluZ2lmeSh0ZXh0TGFiZWwuZmllbGQpfWApO1xuICAgIH1cblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhsYXllclRleHRMYWJlbCkucmVkdWNlKFxuICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgW2tleV06IGtleSA9PT0gJ2ZpZWxkJyA/IGZpZWxkIDogdGV4dExhYmVsW2tleV0gfHwgbGF5ZXJUZXh0TGFiZWxba2V5XVxuICAgICAgfSksXG4gICAgICB7fVxuICAgICk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFNhdmVkIHZpc3VhbCBjaGFubmVsIGZpZWxkL3NjYWxlIG1heSBsaXZlIGluIGFueSBvZjpcbiAqIC0gYGNvbmZpZ1trZXldYCBhZnRlciBzY2hlbWEgcGFyc2UgKFZpc3VhbENoYW5uZWxTY2hlbWFWMSBmb2xkcyBjaGFubmVscyBpbnRvIGNvbmZpZylcbiAqIC0gYHZpc3VhbENoYW5uZWxzW2tleV1gIGFzIGEgc2libGluZyBvZiBgY29uZmlnYCAodW5wYXJzZWQgYWRkRGF0YVRvTWFwIHBheWxvYWQpXG4gKiAtIGBjb25maWcudmlzdWFsQ2hhbm5lbHNba2V5XWAgKGNvbW1vbiBtaXN0YWtlIG9mIG5lc3RpbmcgdmlzdWFsQ2hhbm5lbHMgaW5zaWRlIGNvbmZpZylcbiAqXG4gKiBXaXRob3V0IHRoaXMgbG9va3VwLCBwcm9ncmFtbWF0aWMgR2VvSlNPTiBzdHJva2VDb2xvckZpZWxkIG5ldmVyIGJpbmRzIGFuZFxuICogc3Ryb2tlQ29sb3JEb21haW4gc3RheXMgYXQgdGhlIGRlZmF1bHQgYFswLCAxXWAgKGtlcGxlci5nbCAjMzA2MSkuXG4gKi9cbmZ1bmN0aW9uIGdldFNhdmVkVmlzdWFsQ2hhbm5lbFZhbHVlKHNhdmVkTGF5ZXI6IFBhcnNlZExheWVyLCBrZXk6IHN0cmluZyk6IGFueSB7XG4gIGNvbnN0IGNvbmZpZyA9IHNhdmVkTGF5ZXIuY29uZmlnIGFzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQ7XG4gIGlmIChjb25maWcgJiYgY29uZmlnW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBjb25maWdba2V5XTtcbiAgfVxuICBjb25zdCBjaGFubmVscyA9XG4gICAgKHNhdmVkTGF5ZXIgYXMge3Zpc3VhbENoYW5uZWxzPzogUmVjb3JkPHN0cmluZywgYW55Pn0pLnZpc3VhbENoYW5uZWxzIHx8XG4gICAgKGNvbmZpZyAmJiBjb25maWcudmlzdWFsQ2hhbm5lbHMpO1xuICBpZiAoY2hhbm5lbHMgJiYgdHlwZW9mIGNoYW5uZWxzID09PSAnb2JqZWN0JyAmJiBjaGFubmVsc1trZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY2hhbm5lbHNba2V5XTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIHZpc3VhbCBjaGFubmVscyBjb25maWcgd2l0aCBuZXcgZGF0YSxcbiAqIHJlZmVyIHRvIHZpcy1zdGF0ZS1zY2hlbWEuanMgVmlzdWFsQ2hhbm5lbFNjaGVtYVYxXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVNhdmVkVmlzdWFsQ2hhbm5lbHMoXG4gIGZpZWxkczogS2VwbGVyVGFibGVbJ2ZpZWxkcyddLFxuICBuZXdMYXllcjogTGF5ZXIsXG4gIHNhdmVkTGF5ZXI6IFBhcnNlZExheWVyLFxuICBvcHRpb25zOiB7dGhyb3dPbkVycm9yPzogYm9vbGVhbn0gPSB7fVxuKTogbnVsbCB8IExheWVyIHtcbiAgT2JqZWN0LnZhbHVlcyhuZXdMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaCgoe2ZpZWxkLCBzY2FsZSwga2V5fSkgPT4ge1xuICAgIGNvbnN0IHNhdmVkRmllbGQgPSBnZXRTYXZlZFZpc3VhbENoYW5uZWxWYWx1ZShzYXZlZExheWVyLCBmaWVsZCk7XG4gICAgY29uc3Qgc2F2ZWRTY2FsZSA9IGdldFNhdmVkVmlzdWFsQ2hhbm5lbFZhbHVlKHNhdmVkTGF5ZXIsIHNjYWxlKTtcbiAgICBsZXQgZm91bmRGaWVsZDtcbiAgICBpZiAoc2F2ZWRGaWVsZD8ubmFtZSkge1xuICAgICAgZm91bmRGaWVsZCA9IGZpZWxkcy5maW5kKGZkID0+IGZkLm5hbWUgPT09IHNhdmVkRmllbGQubmFtZSk7XG4gICAgfVxuXG4gICAgY29uc3QgZm91bmRDaGFubmVsID0ge1xuICAgICAgLi4uKGZvdW5kRmllbGQgPyB7W2ZpZWxkXTogZm91bmRGaWVsZH0gOiB7fSksXG4gICAgICAuLi4oc2F2ZWRTY2FsZSA/IHtbc2NhbGVdOiBzYXZlZFNjYWxlfSA6IHt9KVxuICAgIH07XG4gICAgaWYgKE9iamVjdC5rZXlzKGZvdW5kQ2hhbm5lbCkubGVuZ3RoKSB7XG4gICAgICBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyhmb3VuZENoYW5uZWwpO1xuICAgIH1cblxuICAgIG5ld0xheWVyLnZhbGlkYXRlVmlzdWFsQ2hhbm5lbChrZXkpO1xuICAgIGlmIChvcHRpb25zLnRocm93T25FcnJvcikge1xuICAgICAgY29uc3QgZmllbGROYW1lID0gc2F2ZWRGaWVsZD8ubmFtZTtcbiAgICAgIGlmIChmaWVsZE5hbWUgJiYgZmllbGROYW1lICE9PSBuZXdMYXllci5jb25maWdbZmllbGRdPy5uYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIGludmFsaWQgdmlzdWFsIGNoYW5uZWwgZmllbGQ6ICR7ZmllbGR9YCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG5ld0xheWVyO1xufVxuXG50eXBlIFZhbGlkYXRlTGF5ZXJPcHRpb24gPSB7XG4gIGFsbG93RW1wdHlDb2x1bW4/OiBib29sZWFuO1xuICB0aHJvd09uRXJyb3I/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTGF5ZXJzQnlEYXRhc2V0cyhcbiAgZGF0YXNldHM6IERhdGFzZXRzLFxuICBsYXllckNsYXNzZXM6IFZpc1N0YXRlWydsYXllckNsYXNzZXMnXSxcbiAgbGF5ZXJzOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydsYXllcnMnXSA9IFtdLFxuICBvcHRpb25zPzogVmFsaWRhdGVMYXllck9wdGlvblxuKSB7XG4gIGNvbnN0IHZhbGlkYXRlZDogTGF5ZXJbXSA9IFtdO1xuICBjb25zdCBmYWlsZWQ6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2xheWVycyddID0gW107XG5cbiAgbGF5ZXJzLmZvckVhY2gobGF5ZXIgPT4ge1xuICAgIGxldCB2YWxpZGF0ZUxheWVyOiBMYXllciB8IG51bGwgPSBudWxsO1xuXG4gICAgaWYgKGxheWVyPy5jb25maWc/LmRhdGFJZCkge1xuICAgICAgaWYgKGRhdGFzZXRzW2xheWVyLmNvbmZpZy5kYXRhSWRdKSB7XG4gICAgICAgIC8vIGRhdGFzZXRzIGFyZSBhbHJlYWR5IGxvYWRlZFxuICAgICAgICB2YWxpZGF0ZUxheWVyID0gdmFsaWRhdGVMYXllcldpdGhEYXRhKFxuICAgICAgICAgIGRhdGFzZXRzW2xheWVyLmNvbmZpZy5kYXRhSWRdLFxuICAgICAgICAgIGxheWVyLFxuICAgICAgICAgIGxheWVyQ2xhc3NlcyxcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlTGF5ZXIpIHtcbiAgICAgIHZhbGlkYXRlZC5wdXNoKHZhbGlkYXRlTGF5ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBkYXRhc2V0cyBub3QgeWV0IGxvYWRlZFxuICAgICAgZmFpbGVkLnB1c2gobGF5ZXIpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHt2YWxpZGF0ZWQsIGZhaWxlZH07XG59XG5cbi8qKlxuICogR2V0IHJlcXVpcmVkIGNvbHVtbnMgZm9yIHZhbGlkYXRpb24gYmFzZWQgb24gY29sdW1uIG1vZGVcbiAqL1xuZnVuY3Rpb24gX2dldENvbHVtbkNvbmZpZ0ZvclZhbGlkYXRpb24obmV3TGF5ZXIpIHtcbiAgLy8gZmluZCBjb2x1bW4gZmllbGRJZHhcbiAgbGV0IGNvbHVtbkNvbmZpZyA9IG5ld0xheWVyLmdldExheWVyQ29sdW1ucygpO1xuICAvLyBpZiBjb2x1bW5Nb2RlIGlzIGRlZmluZWQsIGZpbmQgY29sdW1uIG1vZGUgY29uZmlnXG4gIGNvbnN0IGNvbE1vZGVDb25maWcgPSBuZXdMYXllci5jb25maWcuY29sdW1uTW9kZVxuICAgID8gKG5ld0xheWVyLnN1cHBvcnRlZENvbHVtbk1vZGVzIHx8IFtdKS5maW5kKFxuICAgICAgICBjb2xNb2RlID0+IGNvbE1vZGUua2V5ID09PSBuZXdMYXllci5jb25maWcuY29sdW1uTW9kZVxuICAgICAgKVxuICAgIDogbnVsbDtcblxuICBpZiAoY29sTW9kZUNvbmZpZykge1xuICAgIC8vIG9ubHkgdmFsaWRhdGUgY29sdW1ucyBpbiBjb2x1bW4gbW9kZSAoaW5jbHVkaW5nIHRhYmJlZCBjb2x1bW5Hcm91cHMpXG4gICAgY29uc3QgZ3JvdXBDb2x1bW5zID0gKGNvbE1vZGVDb25maWcuY29sdW1uR3JvdXBzIHx8IFtdKS5mbGF0TWFwKGdyb3VwID0+IGdyb3VwLmNvbHVtbnMgfHwgW10pO1xuICAgIGNvbnN0IHJlcXVpcmVkS2V5cyA9IG5ldyBTZXQoY29sTW9kZUNvbmZpZy5yZXF1aXJlZENvbHVtbnMgfHwgW10pO1xuICAgIGNvbHVtbkNvbmZpZyA9IFtcbiAgICAgIC4uLihjb2xNb2RlQ29uZmlnLnJlcXVpcmVkQ29sdW1ucyB8fCBbXSksXG4gICAgICAuLi4oY29sTW9kZUNvbmZpZy5vcHRpb25hbENvbHVtbnMgfHwgW10pLFxuICAgICAgLi4uZ3JvdXBDb2x1bW5zXG4gICAgXS5yZWR1Y2UoKGFjY3UsIGtleSkgPT4ge1xuICAgICAgY29uc3QgY29sID0gY29sdW1uQ29uZmlnW2tleV07XG4gICAgICBpZiAoIWNvbCkge1xuICAgICAgICByZXR1cm4gYWNjdTtcbiAgICAgIH1cbiAgICAgIC8vIE9wdGlvbmFsaXR5IG11c3QgZm9sbG93IHRoZSBhY3RpdmUgbW9kZTogYSBmaWVsZCBvcHRpb25hbCBpbiBhbm90aGVyIG1vZGVcbiAgICAgIC8vIChlLmcuIGFsdGl0dWRlIGluIFVWKSBpcyBzdGlsbCByZXF1aXJlZCB3aGVuIHRoaXMgbW9kZSBsaXN0cyBpdCBpbiByZXF1aXJlZENvbHVtbnMuXG4gICAgICBpZiAocmVxdWlyZWRLZXlzLmhhcyhrZXkpKSB7XG4gICAgICAgIGNvbnN0IHtvcHRpb25hbDogX29wdGlvbmFsLCAuLi5yZXF1aXJlZENvbH0gPSBjb2w7XG4gICAgICAgIHJldHVybiB7Li4uYWNjdSwgW2tleV06IHJlcXVpcmVkQ29sfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7Li4uYWNjdSwgW2tleV06IHsuLi5jb2wsIG9wdGlvbmFsOiB0cnVlfX07XG4gICAgfSwge30pO1xuICB9XG5cbiAgcmV0dXJuIGNvbHVtbkNvbmZpZztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCBsYXllciBjb25maWcgd2l0aCBuZXcgZGF0YSxcbiAqIHVwZGF0ZSBmaWVsZElkeCBiYXNlZCBvbiBuZXcgZmllbGRzXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVMYXllcldpdGhEYXRhKFxuICBkYXRhc2V0OiBLZXBsZXJUYWJsZSxcbiAgc2F2ZWRMYXllcjogUGFyc2VkTGF5ZXIsXG4gIGxheWVyQ2xhc3NlczogVmlzU3RhdGVbJ2xheWVyQ2xhc3NlcyddLFxuICBvcHRpb25zOiBWYWxpZGF0ZUxheWVyT3B0aW9uID0ge31cbik6IExheWVyIHwgbnVsbCB7XG4gIGNvbnN0IHtmaWVsZHMsIGlkOiBkYXRhSWR9ID0gZGF0YXNldDtcbiAgY29uc3Qge3R5cGV9ID0gc2F2ZWRMYXllcjtcbiAgY29uc3Qge3Rocm93T25FcnJvcn0gPSBvcHRpb25zO1xuICAvLyBsYXllciBkb2VzbnQgaGF2ZSBhIHZhbGlkIHR5cGVcbiAgaWYgKCF0eXBlIHx8ICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobGF5ZXJDbGFzc2VzLCB0eXBlKSB8fCAhc2F2ZWRMYXllci5jb25maWcpIHtcbiAgICBpZiAodGhyb3dPbkVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGhhcyBpbnZhbGlkIHR5cGUgXCIke3R5cGV9XCIgb3IgY29uZmlnIGlzIG1pc3NpbmdgKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBsZXQgbmV3TGF5ZXIgPSBuZXcgbGF5ZXJDbGFzc2VzW3R5cGVdKHtcbiAgICBpZDogc2F2ZWRMYXllci5pZCxcbiAgICBkYXRhSWQsXG4gICAgbGFiZWw6IHNhdmVkTGF5ZXIuY29uZmlnLmxhYmVsLFxuICAgIGNvbG9yOiBzYXZlZExheWVyLmNvbmZpZy5jb2xvcixcbiAgICBpc1Zpc2libGU6IHNhdmVkTGF5ZXIuY29uZmlnLmlzVmlzaWJsZSxcbiAgICBoaWRkZW46IHNhdmVkTGF5ZXIuY29uZmlnLmhpZGRlbixcbiAgICBpc0luY2x1ZGVkSW5MZWdlbmQ6IHNhdmVkTGF5ZXIuY29uZmlnLmlzSW5jbHVkZWRJbkxlZ2VuZCxcbiAgICBjb2x1bW5Nb2RlOiBzYXZlZExheWVyLmNvbmZpZy5jb2x1bW5Nb2RlLFxuICAgIGhpZ2hsaWdodENvbG9yOiBzYXZlZExheWVyLmNvbmZpZy5oaWdobGlnaHRDb2xvclxuICB9KTtcblxuICBjb25zdCBjb2x1bW5Db25maWcgPSBfZ2V0Q29sdW1uQ29uZmlnRm9yVmFsaWRhdGlvbihuZXdMYXllcik7XG5cbiAgaWYgKE9iamVjdC5rZXlzKGNvbHVtbkNvbmZpZykpIHtcbiAgICBjb25zdCBjb2x1bW5zID0gdmFsaWRhdGVTYXZlZExheWVyQ29sdW1ucyhcbiAgICAgIGZpZWxkcyxcbiAgICAgIHNhdmVkTGF5ZXIuY29uZmlnLmNvbHVtbnMsXG4gICAgICBjb2x1bW5Db25maWcsXG4gICAgICBvcHRpb25zXG4gICAgKTtcbiAgICBpZiAoY29sdW1ucykge1xuICAgICAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJDb25maWcoe1xuICAgICAgICBjb2x1bW5zOiB7XG4gICAgICAgICAgLi4ubmV3TGF5ZXIuY29uZmlnLmNvbHVtbnMsXG4gICAgICAgICAgLi4uY29sdW1uc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKCFvcHRpb25zLmFsbG93RW1wdHlDb2x1bW4pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHRleHRMYWJlbCA9XG4gICAgc2F2ZWRMYXllci5jb25maWcudGV4dExhYmVsICYmIG5ld0xheWVyLmNvbmZpZy50ZXh0TGFiZWxcbiAgICAgID8gdmFsaWRhdGVTYXZlZFRleHRMYWJlbChcbiAgICAgICAgICBmaWVsZHMsXG4gICAgICAgICAgbmV3TGF5ZXIuY29uZmlnLnRleHRMYWJlbCxcbiAgICAgICAgICBzYXZlZExheWVyLmNvbmZpZy50ZXh0TGFiZWwsXG4gICAgICAgICAgb3B0aW9uc1xuICAgICAgICApXG4gICAgICA6IG5ld0xheWVyLmNvbmZpZy50ZXh0TGFiZWw7XG5cbiAgLy8gY29weSB2aXNDb25maWcgb3ZlciB0byBlbXB0eUxheWVyIHRvIG1ha2Ugc3VyZSBpdCBoYXMgYWxsIHRoZSBwcm9wc1xuICBjb25zdCBzYXZlZFZpc0NvbmZpZyA9XG4gICAgc2F2ZWRMYXllci50eXBlID09PSAnM0QnXG4gICAgICA/IG1pZ3JhdGVMZWdhY3lTY2VuZWdyYXBoVmlzQ29uZmlnKHNhdmVkTGF5ZXIuY29uZmlnLnZpc0NvbmZpZylcbiAgICAgIDogc2F2ZWRMYXllci5jb25maWcudmlzQ29uZmlnO1xuICBjb25zdCBjb3BpZWRWaXNDb25maWcgPSBuZXdMYXllci5jb3B5TGF5ZXJDb25maWcoXG4gICAgbmV3TGF5ZXIuY29uZmlnLnZpc0NvbmZpZyxcbiAgICBzYXZlZFZpc0NvbmZpZyB8fCB7fSxcbiAgICB7XG4gICAgICBzaGFsbG93Q29weTogWydjb2xvclJhbmdlJywgJ3N0cm9rZUNvbG9yUmFuZ2UnXVxuICAgIH1cbiAgKTtcblxuICAvLyBjYWxsIGxheWVyIG1ldGhvZHMgdG8gdmFsaWRhdGUgdmlzQ29uZmlnIHdoZW4gc3dpdGNoaW5nIGRhdGFzZXRcbiAgY29uc3QgdmlzQ29uZmlnID0gbmV3TGF5ZXIudmFsaWRhdGVWaXNDb25maWdcbiAgICA/IG5ld0xheWVyLnZhbGlkYXRlVmlzQ29uZmlnKGRhdGFzZXQsIGNvcGllZFZpc0NvbmZpZylcbiAgICA6IGNvcGllZFZpc0NvbmZpZztcblxuICBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgdmlzQ29uZmlnLFxuICAgIHRleHRMYWJlbFxuICB9KTtcblxuICAvLyB2aXN1YWwgY2hhbm5lbCBmaWVsZCBpcyBzYXZlZCB0byBiZSB7bmFtZSwgdHlwZX1cbiAgLy8gZmluZCB2aXN1YWwgY2hhbm5lbCBmaWVsZCBieSBtYXRjaGluZyBib3RoIG5hbWUgYW5kIHR5cGVcbiAgLy8gcmVmZXIgdG8gdmlzLXN0YXRlLXNjaGVtYS5qcyBWaXN1YWxDaGFubmVsU2NoZW1hVjFcbiAgbmV3TGF5ZXIgPSB2YWxpZGF0ZVNhdmVkVmlzdWFsQ2hhbm5lbHMoZmllbGRzLCBuZXdMYXllciwgc2F2ZWRMYXllciwgb3B0aW9ucyk7XG5cbiAgaWYgKHRocm93T25FcnJvcikge1xuICAgIGlmICghbmV3TGF5ZXIuaXNWYWxpZFRvU2F2ZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGlzIG5vdCB2YWxpZCB0byBzYXZlOiAke25ld0xheWVyLmlkfWApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdMYXllcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRWRpdG9yPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIHNhdmVkRWRpdG9yOiBTYXZlZEVkaXRvcikge1xuICBpZiAoIXNhdmVkRWRpdG9yKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWRpdG9yOiB7XG4gICAgICAuLi5zdGF0ZS5lZGl0b3IsXG4gICAgICBmZWF0dXJlczogWy4uLnN0YXRlLmVkaXRvci5mZWF0dXJlcywgLi4uKHNhdmVkRWRpdG9yLmZlYXR1cmVzIHx8IFtdKV0sXG4gICAgICAvLyBpZiBzYXZlZEVkaXRvci52aXNpYmxlIGlzIHVuZGVmaW5lZCBrZWVwIHN0YXRlLmVkaXRvci52aXNpYmxlXG4gICAgICB2aXNpYmxlOiBzYXZlZEVkaXRvci52aXNpYmxlID8/IHN0YXRlLmVkaXRvci52aXNpYmxlXG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBjb21iaW5lRWRpdG9yQ29uZmlncyhjb25maWdzOiBTYXZlZEVkaXRvcltdKTogU2F2ZWRFZGl0b3Ige1xuICByZXR1cm4gY29uZmlncy5yZWR1Y2UoXG4gICAgKGFjYywgbmV4dENvbmZpZykgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYWNjLFxuICAgICAgICBmZWF0dXJlczogWy4uLmFjYy5mZWF0dXJlcywgLi4uKG5leHRDb25maWcuZmVhdHVyZXMgfHwgW10pXVxuICAgICAgfTtcbiAgICB9LFxuICAgIHtcbiAgICAgIC8vIHN0YXJ0IHdpdGg6XG4gICAgICAvLyAtIGVtcHR5IGFycmF5IGZvciBmZWF0dXJlcyBhY2N1bXVsYXRpb25cbiAgICAgIC8vIC0gYW5kIGFyZSBhbnkgb2YgdGhlIGNvbmZpZ3MnIHZpc2libGUgdmFsdWVzIHRydWU/XG4gICAgICBmZWF0dXJlczogW10sXG4gICAgICB2aXNpYmxlOiBjb25maWdzLnNvbWUoYyA9PiBjPy52aXNpYmxlKVxuICAgIH1cbiAgKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCBsYXllciBjb25maWcgd2l0aCBuZXcgZGF0YSxcbiAqIHVwZGF0ZSBmaWVsZElkeCBiYXNlZCBvbiBuZXcgZmllbGRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZURhdGFzZXRzQnlPcmRlcihzdGF0ZTogVmlzU3RhdGUsIG5ld0RhdGFFbnRyaWVzOiBEYXRhc2V0cyk6IERhdGFzZXRzIHtcbiAgY29uc3QgbWVyZ2VkID0ge1xuICAgIC4uLnN0YXRlLmRhdGFzZXRzLFxuICAgIC4uLm5ld0RhdGFFbnRyaWVzXG4gIH07XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoc3RhdGUucHJlc2VydmVEYXRhc2V0T3JkZXIpKSB7XG4gICAgLy8gcHJlc2VydmVEYXRhc2V0T3JkZXIgIG1pZ2h0IG5vdCBpbmNsdWRlIHRoZSAgbmV3IGRhdGFzZXRzXG4gICAgY29uc3QgbmV3RGF0YXNldElkcyA9IE9iamVjdC5rZXlzKG1lcmdlZCkuZmlsdGVyKFxuICAgICAgaWQgPT4gIXN0YXRlLnByZXNlcnZlRGF0YXNldE9yZGVyPy5pbmNsdWRlcyhpZClcbiAgICApO1xuICAgIHJldHVybiBbLi4uc3RhdGUucHJlc2VydmVEYXRhc2V0T3JkZXIsIC4uLm5ld0RhdGFzZXRJZHNdLnJlZHVjZShcbiAgICAgIChhY2N1LCBkYXRhSWQpID0+ICh7XG4gICAgICAgIC4uLmFjY3UsXG4gICAgICAgIC4uLihtZXJnZWRbZGF0YUlkXSA/IHtbZGF0YUlkXTogbWVyZ2VkW2RhdGFJZF19IDoge30pXG4gICAgICB9KSxcbiAgICAgIHt9XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBtZXJnZWQ7XG59XG5cbi8qKlxuICogU2ltbGlhciBwdXJwb3NlIHRvIGFnZ3JlZ2F0aW9uIHV0aWxzIGBnZXRNb2RlYCBmdW5jdGlvbixcbiAqIGJ1dCByZXR1cm5zIHRoZSBtb2RlIGluIHRoZSBzYW1lIHZhbHVlIHR5cGUgd2l0aG91dCBjb2VyY2luZyB0byBhIHN0cmluZy5cbiAqIEl0IGlnbm9yZXMgYHVuZGVmaW5lZGAgb3IgYG51bGxgIHZhbHVlcywgYnV0IHJldHVybnMgYG51bGxgIGlmIG5vIG1vZGUgY291bGQgYmUgY2FsY3VsYXRlZC5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2U8VD4oYXJyOiBUW10pOiBUIHwgbnVsbCB7XG4gIGNvbnN0IHRhbGx5cyA9IG5ldyBNYXAoKTtcbiAgYXJyLmZvckVhY2godmFsdWUgPT4ge1xuICAgIGlmIChub3ROdWxsb3JVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICBpZiAoIXRhbGx5cy5oYXModmFsdWUpKSB7XG4gICAgICAgIHRhbGx5cy5zZXQodmFsdWUsIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFsbHlzLnNldCh2YWx1ZSwgdGFsbHlzLmdldCh2YWx1ZSkgKyAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICAvLyByZXR1cm4gdGhlIHZhbHVlIHdpdGggdGhlIGhpZ2hlc3QgdG90YWwgb2NjdXJyZW5jZSBjb3VudFxuICBpZiAodGFsbHlzLnNpemUgPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gWy4uLnRhbGx5cy5lbnRyaWVzKCldPy5yZWR1Y2UoKGFjYywgbmV4dCkgPT4gKG5leHRbMV0gPiBhY2NbMV0gPyBuZXh0IDogYWNjKSlbMF07XG59XG5cbmV4cG9ydCBjb25zdCBWSVNfU1RBVEVfTUVSR0VSUzogVmlzU3RhdGVNZXJnZXJzPGFueT4gPSBbXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VMYXllcnMsXG4gICAgcHJvcDogJ2xheWVycycsXG4gICAgdG9NZXJnZVByb3A6ICdsYXllclRvQmVNZXJnZWQnLFxuICAgIHByZXNlcnZlT3JkZXI6ICdwcmVzZXJ2ZUxheWVyT3JkZXInXG4gIH0sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VMYXllck9yZGVyLFxuICAgIHByb3A6ICdsYXllck9yZGVyJ1xuICB9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlRmlsdGVycyxcbiAgICBwcm9wOiAnZmlsdGVycycsXG4gICAgdG9NZXJnZVByb3A6ICdmaWx0ZXJUb0JlTWVyZ2VkJyxcbiAgICBwcmVzZXJ2ZU9yZGVyOiAncHJlc2VydmVGaWx0ZXJPcmRlcicsXG4gICAgcmVwbGFjZVBhcmVudERhdGFzZXRJZHM6IHJlcGxhY2VGaWx0ZXJEYXRhc2V0SWRzXG4gIH0sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VFZmZlY3RzLFxuICAgIHByb3A6ICdlZmZlY3RzJ1xuICB9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlQ2hhcnRzLFxuICAgIHByb3A6ICdjaGFydHMnLFxuICAgIHRvTWVyZ2VQcm9wOiAnY2hhcnRzVG9CZU1lcmdlZCcsXG4gICAgcmVwbGFjZVBhcmVudERhdGFzZXRJZHM6IHJlcGxhY2VDaGFydERhdGFzZXRJZHNcbiAgfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZUFubm90YXRpb25zLFxuICAgIHByb3A6ICdhbm5vdGF0aW9ucycsXG4gICAgdG9NZXJnZVByb3A6ICdhbm5vdGF0aW9uc1RvQmVNZXJnZWQnXG4gIH0sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VJbnRlcmFjdGlvbnMsXG4gICAgcHJvcDogJ2ludGVyYWN0aW9uQ29uZmlnJyxcbiAgICB0b01lcmdlUHJvcDogJ2ludGVyYWN0aW9uVG9CZU1lcmdlZCcsXG4gICAgcmVwbGFjZVBhcmVudERhdGFzZXRJZHM6IHJlcGxhY2VJbnRlcmFjdGlvbkRhdGFzZXRJZHMsXG4gICAgc2F2ZVVubWVyZ2VkOiBzYXZlZFVubWVyZ2VkSW50ZXJhY3Rpb24sXG4gICAgY29tYmluZUNvbmZpZ3M6IGNvbWJpbmVJbnRlcmFjdGlvbkNvbmZpZ3NcbiAgfSxcbiAge21lcmdlOiBtZXJnZUxheWVyQmxlbmRpbmcsIHByb3A6ICdsYXllckJsZW5kaW5nJywgY29tYmluZUNvbmZpZ3M6IGNvbWJpbmVMYXllckJsZW5kaW5nQ29uZmlnc30sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VPdmVybGF5QmxlbmRpbmcsXG4gICAgcHJvcDogJ292ZXJsYXlCbGVuZGluZycsXG4gICAgY29tYmluZUNvbmZpZ3M6IGNvbWJpbmVPdmVybGF5QmxlbmRpbmdDb25maWdzXG4gIH0sXG4gIHttZXJnZTogbWVyZ2VTcGxpdE1hcHMsIHByb3A6ICdzcGxpdE1hcHMnLCB0b01lcmdlUHJvcDogJ3NwbGl0TWFwc1RvQmVNZXJnZWQnfSxcbiAge21lcmdlOiBtZXJnZUFuaW1hdGlvbkNvbmZpZywgcHJvcDogJ2FuaW1hdGlvbkNvbmZpZycsIGNvbWJpbmVDb25maWdzOiBjb21iaW5lQW5pbWF0aW9uQ29uZmlnc30sXG4gIHttZXJnZTogbWVyZ2VFZGl0b3IsIHByb3A6ICdlZGl0b3InLCBjb21iaW5lQ29uZmlnczog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