@carto/kepler.gl 0.0.31 → 0.0.32

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.
@@ -349,11 +349,9 @@ var AggregationLayer = /*#__PURE__*/function (_Layer) {
349
349
  key: "getDefaultAggregationLayerProp",
350
350
  value: function getDefaultAggregationLayerProp(opts) {
351
351
  var gpuFilter = opts.gpuFilter,
352
- mapState = opts.mapState,
353
352
  _opts$layerCallbacks = opts.layerCallbacks,
354
353
  layerCallbacks = _opts$layerCallbacks === void 0 ? {} : _opts$layerCallbacks;
355
354
  var visConfig = this.config.visConfig;
356
- var eleZoomFactor = this.getElevationZoomFactor(mapState);
357
355
  var updateTriggers = {
358
356
  getColorValue: {
359
357
  colorField: this.config.colorField,
@@ -377,7 +375,7 @@ var AggregationLayer = /*#__PURE__*/function (_Layer) {
377
375
  colorAggregation: visConfig.colorAggregation,
378
376
  // elevation
379
377
  extruded: visConfig.enable3d,
380
- elevationScale: visConfig.elevationScale * eleZoomFactor,
378
+ elevationScale: visConfig.elevationScale,
381
379
  elevationScaleType: this.config.sizeScale,
382
380
  elevationRange: visConfig.sizeRange,
383
381
  elevationLowerPercentile: visConfig.elevationPercentile[0],
@@ -393,4 +391,4 @@ var AggregationLayer = /*#__PURE__*/function (_Layer) {
393
391
  }(_baseLayer["default"]);
394
392
 
395
393
  exports["default"] = AggregationLayer;
396
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sYXllcnMvYWdncmVnYXRpb24tbGF5ZXIuanMiXSwibmFtZXMiOlsicG9pbnRQb3NBY2Nlc3NvciIsImxhdCIsImxuZyIsImRjIiwiZCIsInZhbHVlQXQiLCJpbmRleCIsImZpZWxkSWR4IiwicG9pbnRQb3NSZXNvbHZlciIsImdldFZhbHVlQWdnckZ1bmMiLCJmaWVsZCIsImFnZ3JlZ2F0aW9uIiwicG9pbnRzIiwibWFwIiwicCIsInZhbHVlQWNjZXNzb3IiLCJzb3VyY2UiLCJsZW5ndGgiLCJnZXRGaWx0ZXJEYXRhRnVuYyIsImZpbHRlclJhbmdlIiwiZ2V0RmlsdGVyVmFsdWUiLCJwdCIsImV2ZXJ5IiwidmFsIiwiaSIsImdldExheWVyQ29sb3JSYW5nZSIsImNvbG9yUmFuZ2UiLCJjb2xvcnMiLCJoZXhUb1JnYiIsImFnZ3JlZ2F0ZVJlcXVpcmVkQ29sdW1ucyIsIkFnZ3JlZ2F0aW9uTGF5ZXIiLCJwcm9wcyIsImdldFBvc2l0aW9uQWNjZXNzb3IiLCJkYXRhQ29udGFpbmVyIiwiY29uZmlnIiwiY29sdW1ucyIsImdldENvbG9yUmFuZ2UiLCJkZWZhdWx0UG9pbnRDb2x1bW5QYWlycyIsImNvbG9yIiwiY2hhbm5lbFNjYWxlVHlwZSIsIkNIQU5ORUxfU0NBTEVTIiwiY29sb3JBZ2dyIiwiZGVmYXVsdE1lYXN1cmUiLCJkb21haW4iLCJrZXkiLCJwcm9wZXJ0eSIsInJhbmdlIiwic2NhbGUiLCJzaXplIiwic2l6ZUFnZ3IiLCJjb25kaXRpb24iLCJ2aXNDb25maWciLCJlbmFibGUzZCIsInZpc3VhbENoYW5uZWxzIiwiZmllbGRDb25maWciLCJsYWJlbCIsInZpc0NvbmZpZ1NldHRpbmdzIiwibWVhc3VyZSIsImRpc3BsYXlOYW1lIiwibmFtZSIsIm9iamVjdCIsImNoYW5uZWwiLCJkYXRhIiwidmFsaWRhdGVWaXN1YWxDaGFubmVsIiwidmFsaWRhdGVGaWVsZFR5cGUiLCJ2YWxpZGF0ZUFnZ3JlZ2F0aW9uVHlwZSIsInZhbGlkYXRlU2NhbGUiLCJ2aXN1YWxDaGFubmVsIiwiYWdncmVnYXRpb25PcHRpb25zIiwiZ2V0QWdncmVnYXRpb25PcHRpb25zIiwidXBkYXRlTGF5ZXJDb25maWciLCJpbmNsdWRlcyIsInVwZGF0ZUxheWVyVmlzQ29uZmlnIiwiT2JqZWN0Iiwia2V5cyIsIkZJRUxEX09QVFMiLCJ0eXBlIiwiREVGQVVMVF9BR0dSRUdBVElPTiIsImFnZ3JlZ2F0aW9uVHlwZSIsImRhdGFzZXRzIiwibmV3RmlsdGVyIiwiZ2V0UG9zaXRpb24iLCJib3VuZHMiLCJnZXRQb2ludHNCb3VuZHMiLCJ1cGRhdGVNZXRhIiwiZmlsdGVyZWRJbmRleCIsInBvcyIsIk51bWJlciIsImlzRmluaXRlIiwicHVzaCIsIm9sZExheWVyRGF0YSIsImRhdGFJZCIsImdwdUZpbHRlciIsImdldENvbG9yVmFsdWUiLCJjb2xvckZpZWxkIiwiY29sb3JBZ2dyZWdhdGlvbiIsImdldEVsZXZhdGlvblZhbHVlIiwic2l6ZUZpZWxkIiwic2l6ZUFnZ3JlZ2F0aW9uIiwiaGFzRmlsdGVyIiwidmFsdWVzIiwic29tZSIsImFyciIsInYiLCJmaWx0ZXJWYWx1ZUFjY2Vzc29yIiwiZmlsdGVyRGF0YSIsInVuZGVmaW5lZCIsInVwZGF0ZURhdGEiLCJfZmlsdGVyRGF0YSIsIm9wdHMiLCJiYXNlUHJvcCIsIm1hc2tFeHRlbnNpb25Qcm9wcyIsIm1hc2tQb2x5Z29uIiwiaGlnaGxpZ2h0Q29sb3IiLCJISUdITElHSF9DT0xPUl8zRCIsImV4dGVuc2lvbnMiLCJhdXRvSGlnaGxpZ2h0IiwibWFwU3RhdGUiLCJsYXllckNhbGxiYWNrcyIsImVsZVpvb21GYWN0b3IiLCJnZXRFbGV2YXRpb25ab29tRmFjdG9yIiwidXBkYXRlVHJpZ2dlcnMiLCJmaWx0ZXJWYWx1ZVVwZGF0ZVRyaWdnZXJzIiwiZ2V0RGVmYXVsdERlY2tMYXllclByb3BzIiwiY292ZXJhZ2UiLCJjb2xvclNjYWxlVHlwZSIsImNvbG9yU2NhbGUiLCJ1cHBlclBlcmNlbnRpbGUiLCJwZXJjZW50aWxlIiwibG93ZXJQZXJjZW50aWxlIiwiZXh0cnVkZWQiLCJlbGV2YXRpb25TY2FsZSIsImVsZXZhdGlvblNjYWxlVHlwZSIsInNpemVTY2FsZSIsImVsZXZhdGlvblJhbmdlIiwic2l6ZVJhbmdlIiwiZWxldmF0aW9uTG93ZXJQZXJjZW50aWxlIiwiZWxldmF0aW9uUGVyY2VudGlsZSIsImVsZXZhdGlvblVwcGVyUGVyY2VudGlsZSIsIm9uU2V0Q29sb3JEb21haW4iLCJvblNldExheWVyRG9tYWluIiwiTGF5ZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7QUFPTyxJQUFNQSxnQkFBZ0IsR0FBRyxTQUFuQkEsZ0JBQW1CO0FBQUEsTUFBRUMsR0FBRixRQUFFQSxHQUFGO0FBQUEsTUFBT0MsR0FBUCxRQUFPQSxHQUFQO0FBQUEsU0FBZ0IsVUFBQUMsRUFBRTtBQUFBLFdBQUksVUFBQUMsQ0FBQztBQUFBLGFBQUksQ0FDekRELEVBQUUsQ0FBQ0UsT0FBSCxDQUFXRCxDQUFDLENBQUNFLEtBQWIsRUFBb0JKLEdBQUcsQ0FBQ0ssUUFBeEIsQ0FEeUQsRUFFekRKLEVBQUUsQ0FBQ0UsT0FBSCxDQUFXRCxDQUFDLENBQUNFLEtBQWIsRUFBb0JMLEdBQUcsQ0FBQ00sUUFBeEIsQ0FGeUQsQ0FBSjtBQUFBLEtBQUw7QUFBQSxHQUFsQjtBQUFBLENBQXpCOzs7O0FBS0EsSUFBTUMsZ0JBQWdCLEdBQUcsU0FBbkJBLGdCQUFtQjtBQUFBLE1BQUVQLEdBQUYsU0FBRUEsR0FBRjtBQUFBLE1BQU9DLEdBQVAsU0FBT0EsR0FBUDtBQUFBLG1CQUFtQkQsR0FBRyxDQUFDTSxRQUF2QixjQUFtQ0wsR0FBRyxDQUFDSyxRQUF2QztBQUFBLENBQXpCOzs7O0FBRUEsSUFBTUUsZ0JBQWdCLEdBQUcsU0FBbkJBLGdCQUFtQixDQUFDQyxLQUFELEVBQVFDLFdBQVIsRUFBd0I7QUFDdEQsU0FBTyxVQUFBQyxNQUFNLEVBQUk7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QjtBQU9FQyxRQUFBQSxlQUFlLEVBQUU1RSxTQUFTLENBQUM2RSxVQUFWLENBQXFCLENBQXJCLENBUG5CO0FBUUVDLFFBQUFBLGVBQWUsRUFBRTlFLFNBQVMsQ0FBQzZFLFVBQVYsQ0FBcUIsQ0FBckIsQ0FSbkI7QUFTRWpDLFFBQUFBLGdCQUFnQixFQUFFNUMsU0FBUyxDQUFDNEMsZ0JBVDlCO0FBV0U7QUFDQW1DLFFBQUFBLFFBQVEsRUFBRS9FLFNBQVMsQ0FBQ0MsUUFadEI7QUFhRStFLFFBQUFBLGNBQWMsRUFBRWhGLFNBQVMsQ0FBQ2dGLGNBQVYsR0FBMkJaLGFBYjdDO0FBY0VhLFFBQUFBLGtCQUFrQixFQUFFLEtBQUtsRyxNQUFMLENBQVltRyxTQWRsQztBQWVFQyxRQUFBQSxjQUFjLEVBQUVuRixTQUFTLENBQUNvRixTQWY1QjtBQWdCRUMsUUFBQUEsd0JBQXdCLEVBQUVyRixTQUFTLENBQUNzRixtQkFBVixDQUE4QixDQUE5QixDQWhCNUI7QUFpQkVDLFFBQUFBLHdCQUF3QixFQUFFdkYsU0FBUyxDQUFDc0YsbUJBQVYsQ0FBOEIsQ0FBOUIsQ0FqQjVCO0FBbUJFO0FBQ0FoQixRQUFBQSxjQUFjLEVBQWRBLGNBcEJGO0FBc0JFO0FBQ0FrQixRQUFBQSxnQkFBZ0IsRUFBRXJCLGNBQWMsQ0FBQ3NCO0FBdkJuQztBQXlCRDs7O0VBdFIyQ0MscUIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjIgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgbWVtb2l6ZSBmcm9tICdsb2Rhc2gubWVtb2l6ZSc7XG5pbXBvcnQgTGF5ZXIgZnJvbSAnLi9iYXNlLWxheWVyJztcbmltcG9ydCB7Z2V0TWFza0V4dGVuc2lvblByb3BzfSBmcm9tICd1dGlscy9sYXllci11dGlscyc7XG5pbXBvcnQge2hleFRvUmdifSBmcm9tICd1dGlscy9jb2xvci11dGlscyc7XG5pbXBvcnQge2FnZ3JlZ2F0ZX0gZnJvbSAndXRpbHMvYWdncmVnYXRlLXV0aWxzJztcbmltcG9ydCB7XG4gIEhJR0hMSUdIX0NPTE9SXzNELFxuICBDSEFOTkVMX1NDQUxFUyxcbiAgRklFTERfT1BUUyxcbiAgREVGQVVMVF9BR0dSRUdBVElPTlxufSBmcm9tICdjb25zdGFudHMvZGVmYXVsdC1zZXR0aW5ncyc7XG5cbmV4cG9ydCBjb25zdCBwb2ludFBvc0FjY2Vzc29yID0gKHtsYXQsIGxuZ30pID0+IGRjID0+IGQgPT4gW1xuICBkYy52YWx1ZUF0KGQuaW5kZXgsIGxuZy5maWVsZElkeCksXG4gIGRjLnZhbHVlQXQoZC5pbmRleCwgbGF0LmZpZWxkSWR4KVxuXTtcblxuZXhwb3J0IGNvbnN0IHBvaW50UG9zUmVzb2x2ZXIgPSAoe2xhdCwgbG5nfSkgPT4gYCR7bGF0LmZpZWxkSWR4fS0ke2xuZy5maWVsZElkeH1gO1xuXG5leHBvcnQgY29uc3QgZ2V0VmFsdWVBZ2dyRnVuYyA9IChmaWVsZCwgYWdncmVnYXRpb24pID0+IHtcbiAgcmV0dXJuIHBvaW50cyA9PiB7XG4gICAgcmV0dXJuIGZpZWxkXG4gICAgICA/IGFnZ3JlZ2F0ZShcbiAgICAgICAgICBwb2ludHMubWFwKHAgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGZpZWxkLnZhbHVlQWNjZXNzb3IocC5zb3VyY2UgPyBwLnNvdXJjZSA6IHApO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGFnZ3JlZ2F0aW9uXG4gICAgICAgIClcbiAgICAgIDogcG9pbnRzLmxlbmd0aDtcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGaWx0ZXJEYXRhRnVuYyA9IChmaWx0ZXJSYW5nZSwgZ2V0RmlsdGVyVmFsdWUpID0+IHB0ID0+XG4gIGdldEZpbHRlclZhbHVlKHB0KS5ldmVyeSgodmFsLCBpKSA9PiB2YWwgPj0gZmlsdGVyUmFuZ2VbaV1bMF0gJiYgdmFsIDw9IGZpbHRlclJhbmdlW2ldWzFdKTtcblxuY29uc3QgZ2V0TGF5ZXJDb2xvclJhbmdlID0gY29sb3JSYW5nZSA9PiBjb2xvclJhbmdlLmNvbG9ycy5tYXAoaGV4VG9SZ2IpO1xuXG5leHBvcnQgY29uc3QgYWdncmVnYXRlUmVxdWlyZWRDb2x1bW5zID0gWydsYXQnLCAnbG5nJ107XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFnZ3JlZ2F0aW9uTGF5ZXIgZXh0ZW5kcyBMYXllciB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5nZXRQb3NpdGlvbkFjY2Vzc29yID0gZGF0YUNvbnRhaW5lciA9PlxuICAgICAgcG9pbnRQb3NBY2Nlc3Nvcih0aGlzLmNvbmZpZy5jb2x1bW5zKShkYXRhQ29udGFpbmVyKTtcbiAgICB0aGlzLmdldENvbG9yUmFuZ2UgPSBtZW1vaXplKGdldExheWVyQ29sb3JSYW5nZSk7XG4gIH1cblxuICBnZXQgaXNBZ2dyZWdhdGVkKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZ2V0IHJlcXVpcmVkTGF5ZXJDb2x1bW5zKCkge1xuICAgIHJldHVybiBhZ2dyZWdhdGVSZXF1aXJlZENvbHVtbnM7XG4gIH1cblxuICBnZXQgY29sdW1uUGFpcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvaW50Q29sdW1uUGFpcnM7XG4gIH1cblxuICBnZXQgbm9uZUxheWVyRGF0YUFmZmVjdGluZ1Byb3BzKCkge1xuICAgIHJldHVybiBbXG4gICAgICAuLi5zdXBlci5ub25lTGF5ZXJEYXRhQWZmZWN0aW5nUHJvcHMsXG4gICAgICAnZW5hYmxlM2QnLFxuICAgICAgJ2NvbG9yUmFuZ2UnLFxuICAgICAgJ2NvbG9yRG9tYWluJyxcbiAgICAgICdzaXplUmFuZ2UnLFxuICAgICAgJ3NpemVTY2FsZScsXG4gICAgICAnc2l6ZURvbWFpbicsXG4gICAgICAncGVyY2VudGlsZScsXG4gICAgICAnY292ZXJhZ2UnLFxuICAgICAgJ2VsZXZhdGlvblBlcmNlbnRpbGUnLFxuICAgICAgJ2VsZXZhdGlvblNjYWxlJyxcbiAgICAgICdlbmFibGVFbGV2YXRpb25ab29tRmFjdG9yJ1xuICAgIF07XG4gIH1cblxuICBnZXQgdmlzdWFsQ2hhbm5lbHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbG9yOiB7XG4gICAgICAgIGFnZ3JlZ2F0aW9uOiAnY29sb3JBZ2dyZWdhdGlvbicsXG4gICAgICAgIGNoYW5uZWxTY2FsZVR5cGU6IENIQU5ORUxfU0NBTEVTLmNvbG9yQWdncixcbiAgICAgICAgZGVmYXVsdE1lYXN1cmU6ICdwcm9wZXJ0eS5wb2ludENvdW50JyxcbiAgICAgICAgZG9tYWluOiAnY29sb3JEb21haW4nLFxuICAgICAgICBmaWVsZDogJ2NvbG9yRmllbGQnLFxuICAgICAgICBrZXk6ICdjb2xvcicsXG4gICAgICAgIHByb3BlcnR5OiAnY29sb3InLFxuICAgICAgICByYW5nZTogJ2NvbG9yUmFuZ2UnLFxuICAgICAgICBzY2FsZTogJ2NvbG9yU2NhbGUnXG4gICAgICB9LFxuICAgICAgc2l6ZToge1xuICAgICAgICBhZ2dyZWdhdGlvbjogJ3NpemVBZ2dyZWdhdGlvbicsXG4gICAgICAgIGNoYW5uZWxTY2FsZVR5cGU6IENIQU5ORUxfU0NBTEVTLnNpemVBZ2dyLFxuICAgICAgICBjb25kaXRpb246IGNvbmZpZyA9PiBjb25maWcudmlzQ29uZmlnLmVuYWJsZTNkLFxuICAgICAgICBkZWZhdWx0TWVhc3VyZTogJ3Byb3BlcnR5LnBvaW50Q291bnQnLFxuICAgICAgICBkb21haW46ICdzaXplRG9tYWluJyxcbiAgICAgICAgZmllbGQ6ICdzaXplRmllbGQnLFxuICAgICAgICBrZXk6ICdzaXplJyxcbiAgICAgICAgcHJvcGVydHk6ICdoZWlnaHQnLFxuICAgICAgICByYW5nZTogJ3NpemVSYW5nZScsXG4gICAgICAgIHNjYWxlOiAnc2l6ZVNjYWxlJ1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkZXNjcmlwdGlvbiBvZiBhIHZpc3VhbENoYW5uZWwgY29uZmlnXG4gICAqIEBwYXJhbSBrZXlcbiAgICogQHJldHVybnMge3tsYWJlbDogc3RyaW5nLCBtZWFzdXJlOiAoc3RyaW5nfHN0cmluZyl9fVxuICAgKi9cbiAgZ2V0VmlzdWFsQ2hhbm5lbERlc2NyaXB0aW9uKGtleSkge1xuICAgIC8vIGUuZy4gbGFiZWw6IENvbG9yLCBtZWFzdXJlOiBBdmVyYWdlIG9mIEVUQVxuICAgIGNvbnN0IHtyYW5nZSwgZmllbGQsIGRlZmF1bHRNZWFzdXJlLCBhZ2dyZWdhdGlvbn0gPSB0aGlzLnZpc3VhbENoYW5uZWxzW2tleV07XG4gICAgY29uc3QgZmllbGRDb25maWcgPSB0aGlzLmNvbmZpZ1tmaWVsZF07XG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiB0aGlzLnZpc0NvbmZpZ1NldHRpbmdzW3JhbmdlXS5sYWJlbCxcbiAgICAgIG1lYXN1cmU6IGZpZWxkQ29uZmlnXG4gICAgICAgID8gYCR7dGhpcy5jb25maWcudmlzQ29uZmlnW2FnZ3JlZ2F0aW9uXX0gb2YgJHtmaWVsZENvbmZpZy5kaXNwbGF5TmFtZSB8fCBmaWVsZENvbmZpZy5uYW1lfWBcbiAgICAgICAgOiBkZWZhdWx0TWVhc3VyZVxuICAgIH07XG4gIH1cblxuICBnZXRIb3ZlckRhdGEob2JqZWN0KSB7XG4gICAgLy8gcmV0dXJuIGFnZ3JlZ2F0ZWQgb2JqZWN0XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZ2dyZWdhdGlvbiBsYXllciBoYW5kbGVzIHZpc3VhbCBjaGFubmVsIGFnZ3JlZ2F0aW9uIGluc2lkZSBkZWNrLmdsIGxheWVyXG4gICAqL1xuICB1cGRhdGVMYXllclZpc3VhbENoYW5uZWwoe2RhdGEsIGRhdGFDb250YWluZXJ9LCBjaGFubmVsKSB7XG4gICAgdGhpcy52YWxpZGF0ZVZpc3VhbENoYW5uZWwoY2hhbm5lbCk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgYWdncmVnYXRpb24gdHlwZSBvbiB0b3Agb2YgYmFzaWMgbGF5ZXIgdmlzdWFsIGNoYW5uZWwgdmFsaWRhdGlvblxuICAgKiBAcGFyYW0gY2hhbm5lbFxuICAgKi9cbiAgdmFsaWRhdGVWaXN1YWxDaGFubmVsKGNoYW5uZWwpIHtcbiAgICAvLyBmaWVsZCB0eXBlIGRlY2lkZXMgYWdncmVnYXRpb24gdHlwZSBkZWNpZGVzIHNjYWxlIHR5cGVcbiAgICB0aGlzLnZhbGlkYXRlRmllbGRUeXBlKGNoYW5uZWwpO1xuICAgIHRoaXMudmFsaWRhdGVBZ2dyZWdhdGlvblR5cGUoY2hhbm5lbCk7XG4gICAgdGhpcy52YWxpZGF0ZVNjYWxlKGNoYW5uZWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGFnZ3JlZ2F0aW9uIHR5cGUgYmFzZWQgb24gc2VsZWN0ZWQgZmllbGRcbiAgICovXG4gIHZhbGlkYXRlQWdncmVnYXRpb25UeXBlKGNoYW5uZWwpIHtcbiAgICBjb25zdCB2aXN1YWxDaGFubmVsID0gdGhpcy52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcbiAgICBjb25zdCB7ZmllbGQsIGFnZ3JlZ2F0aW9ufSA9IHZpc3VhbENoYW5uZWw7XG4gICAgY29uc3QgYWdncmVnYXRpb25PcHRpb25zID0gdGhpcy5nZXRBZ2dyZWdhdGlvbk9wdGlvbnMoY2hhbm5lbCk7XG5cbiAgICBpZiAoIWFnZ3JlZ2F0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFhZ2dyZWdhdGlvbk9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAvLyBpZiBmaWVsZCBjYW5ub3QgYmUgYWdncmVnYXRlZCwgc2V0IGZpZWxkIHRvIG51bGxcbiAgICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe1tmaWVsZF06IG51bGx9KTtcbiAgICB9IGVsc2UgaWYgKCFhZ2dyZWdhdGlvbk9wdGlvbnMuaW5jbHVkZXModGhpcy5jb25maWcudmlzQ29uZmlnW2FnZ3JlZ2F0aW9uXSkpIHtcbiAgICAgIC8vIGN1cnJlbnQgYWdncmVnYXRpb24gdHlwZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZmllbGRcbiAgICAgIC8vIHNldCBhZ2dyZWdhdGlvbiB0byB0aGUgZmlyc3Qgc3VwcG9ydGVkIG9wdGlvblxuICAgICAgdGhpcy51cGRhdGVMYXllclZpc0NvbmZpZyh7W2FnZ3JlZ2F0aW9uXTogYWdncmVnYXRpb25PcHRpb25zWzBdfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0QWdncmVnYXRpb25PcHRpb25zKGNoYW5uZWwpIHtcbiAgICBjb25zdCB2aXN1YWxDaGFubmVsID0gdGhpcy52aXN1YWxDaGFubmVsc1tjaGFubmVsXTtcbiAgICBjb25zdCB7ZmllbGQsIGNoYW5uZWxTY2FsZVR5cGV9ID0gdmlzdWFsQ2hhbm5lbDtcblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhcbiAgICAgIHRoaXMuY29uZmlnW2ZpZWxkXVxuICAgICAgICA/IEZJRUxEX09QVFNbdGhpcy5jb25maWdbZmllbGRdLnR5cGVdLnNjYWxlW2NoYW5uZWxTY2FsZVR5cGVdXG4gICAgICAgIDogREVGQVVMVF9BR0dSRUdBVElPTltjaGFubmVsU2NhbGVUeXBlXVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHNjYWxlIG9wdGlvbnMgYmFzZWQgb24gY3VycmVudCBmaWVsZCBhbmQgYWdncmVnYXRpb24gdHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhbm5lbFxuICAgKiBAcmV0dXJucyB7c3RyaW5nW119XG4gICAqL1xuICBnZXRTY2FsZU9wdGlvbnMoY2hhbm5lbCkge1xuICAgIGNvbnN0IHZpc3VhbENoYW5uZWwgPSB0aGlzLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuICAgIGNvbnN0IHtmaWVsZCwgYWdncmVnYXRpb24sIGNoYW5uZWxTY2FsZVR5cGV9ID0gdmlzdWFsQ2hhbm5lbDtcbiAgICBjb25zdCBhZ2dyZWdhdGlvblR5cGUgPSB0aGlzLmNvbmZpZy52aXNDb25maWdbYWdncmVnYXRpb25dO1xuICAgIHJldHVybiB0aGlzLmNvbmZpZ1tmaWVsZF1cbiAgICAgID8gLy8gc2NhbGUgb3B0aW9ucyBiYXNlZCBvbiBhZ2dyZWdhdGlvblxuICAgICAgICBGSUVMRF9PUFRTW3RoaXMuY29uZmlnW2ZpZWxkXS50eXBlXS5zY2FsZVtjaGFubmVsU2NhbGVUeXBlXVthZ2dyZWdhdGlvblR5cGVdXG4gICAgICA6IC8vIGRlZmF1bHQgc2NhbGUgb3B0aW9ucyBmb3IgcG9pbnQgY291bnRcbiAgICAgICAgREVGQVVMVF9BR0dSRUdBVElPTltjaGFubmVsU2NhbGVUeXBlXVthZ2dyZWdhdGlvblR5cGVdO1xuICB9XG5cbiAgLyoqXG4gICAqIEFnZ3JlZ2F0aW9uIGxheWVyIGhhbmRsZXMgdmlzdWFsIGNoYW5uZWwgYWdncmVnYXRpb24gaW5zaWRlIGRlY2suZ2wgbGF5ZXJcbiAgICovXG4gIHVwZGF0ZUxheWVyRG9tYWluKGRhdGFzZXRzLCBuZXdGaWx0ZXIpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHVwZGF0ZUxheWVyTWV0YShkYXRhQ29udGFpbmVyLCBnZXRQb3NpdGlvbikge1xuICAgIC8vIGdldCBib3VuZHMgZnJvbSBwb2ludHNcbiAgICBjb25zdCBib3VuZHMgPSB0aGlzLmdldFBvaW50c0JvdW5kcyhkYXRhQ29udGFpbmVyLCBnZXRQb3NpdGlvbik7XG5cbiAgICB0aGlzLnVwZGF0ZU1ldGEoe2JvdW5kc30pO1xuICB9XG5cbiAgY2FsY3VsYXRlRGF0YUF0dHJpYnV0ZSh7ZGF0YUNvbnRhaW5lciwgZmlsdGVyZWRJbmRleH0sIGdldFBvc2l0aW9uKSB7XG4gICAgY29uc3QgZGF0YSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWx0ZXJlZEluZGV4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBpbmRleCA9IGZpbHRlcmVkSW5kZXhbaV07XG4gICAgICBjb25zdCBwb3MgPSBnZXRQb3NpdGlvbih7aW5kZXh9KTtcblxuICAgICAgLy8gaWYgZG9lc24ndCBoYXZlIHBvaW50IGxhdCBvciBsbmcsIGRvIG5vdCBhZGQgdGhlIHBvaW50XG4gICAgICAvLyBkZWNrLmdsIGNhbid0IGhhbmRsZSBwb3NpdGlvbiA9IG51bGxcbiAgICAgIGlmIChwb3MuZXZlcnkoTnVtYmVyLmlzRmluaXRlKSkge1xuICAgICAgICBkYXRhLnB1c2goe1xuICAgICAgICAgIGluZGV4XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgZm9ybWF0TGF5ZXJEYXRhKGRhdGFzZXRzLCBvbGRMYXllckRhdGEpIHtcbiAgICBjb25zdCB7Z3B1RmlsdGVyLCBkYXRhQ29udGFpbmVyfSA9IGRhdGFzZXRzW3RoaXMuY29uZmlnLmRhdGFJZF07XG4gICAgY29uc3QgZ2V0UG9zaXRpb24gPSB0aGlzLmdldFBvc2l0aW9uQWNjZXNzb3IoZGF0YUNvbnRhaW5lcik7XG5cbiAgICBjb25zdCBnZXRDb2xvclZhbHVlID0gZ2V0VmFsdWVBZ2dyRnVuYyhcbiAgICAgIHRoaXMuY29uZmlnLmNvbG9yRmllbGQsXG4gICAgICB0aGlzLmNvbmZpZy52aXNDb25maWcuY29sb3JBZ2dyZWdhdGlvblxuICAgICk7XG5cbiAgICBjb25zdCBnZXRFbGV2YXRpb25WYWx1ZSA9IGdldFZhbHVlQWdnckZ1bmMoXG4gICAgICB0aGlzLmNvbmZpZy5zaXplRmllbGQsXG4gICAgICB0aGlzLmNvbmZpZy52aXNDb25maWcuc2l6ZUFnZ3JlZ2F0aW9uXG4gICAgKTtcbiAgICBjb25zdCBoYXNGaWx0ZXIgPSBPYmplY3QudmFsdWVzKGdwdUZpbHRlci5maWx0ZXJSYW5nZSkuc29tZShhcnIgPT4gYXJyLnNvbWUodiA9PiB2ICE9PSAwKSk7XG5cbiAgICBjb25zdCBnZXRGaWx0ZXJWYWx1ZSA9IGdwdUZpbHRlci5maWx0ZXJWYWx1ZUFjY2Vzc29yKGRhdGFDb250YWluZXIpKCk7XG4gICAgY29uc3QgZmlsdGVyRGF0YSA9IGhhc0ZpbHRlclxuICAgICAgPyBnZXRGaWx0ZXJEYXRhRnVuYyhncHVGaWx0ZXIuZmlsdGVyUmFuZ2UsIGdldEZpbHRlclZhbHVlKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCB7ZGF0YX0gPSB0aGlzLnVwZGF0ZURhdGEoZGF0YXNldHMsIG9sZExheWVyRGF0YSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YSxcbiAgICAgIGdldFBvc2l0aW9uLFxuICAgICAgX2ZpbHRlckRhdGE6IGZpbHRlckRhdGEsXG4gICAgICAuLi4oZ2V0Q29sb3JWYWx1ZSA/IHtnZXRDb2xvclZhbHVlfSA6IHt9KSxcbiAgICAgIC4uLihnZXRFbGV2YXRpb25WYWx1ZSA/IHtnZXRFbGV2YXRpb25WYWx1ZX0gOiB7fSlcbiAgICB9O1xuICB9XG5cbiAgZ2V0RGVmYXVsdERlY2tMYXllclByb3BzKG9wdHMpIHtcbiAgICBjb25zdCBiYXNlUHJvcCA9IHN1cGVyLmdldERlZmF1bHREZWNrTGF5ZXJQcm9wcyhvcHRzKTtcbiAgICBjb25zdCBtYXNrRXh0ZW5zaW9uUHJvcHMgPSBnZXRNYXNrRXh0ZW5zaW9uUHJvcHMob3B0cy5tYXNrUG9seWdvbik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uYmFzZVByb3AsXG4gICAgICAuLi5tYXNrRXh0ZW5zaW9uUHJvcHMsXG4gICAgICBoaWdobGlnaHRDb2xvcjogSElHSExJR0hfQ09MT1JfM0QsXG4gICAgICAvLyBncHUgZGF0YSBmaWx0ZXJpbmcgaXMgbm90IHN1cHBvcnRlZCBpbiBhZ2dyZWdhdGlvbiBsYXllclxuICAgICAgZXh0ZW5zaW9uczogWy4uLm1hc2tFeHRlbnNpb25Qcm9wcy5leHRlbnNpb25zXSxcbiAgICAgIGF1dG9IaWdobGlnaHQ6IHRoaXMuY29uZmlnLnZpc0NvbmZpZy5lbmFibGUzZFxuICAgIH07XG4gIH1cblxuICBnZXREZWZhdWx0QWdncmVnYXRpb25MYXllclByb3Aob3B0cykge1xuICAgIGNvbnN0IHtncHVGaWx0ZXIsIG1hcFN0YXRlLCBsYXllckNhbGxiYWNrcyA9IHt9fSA9IG9wdHM7XG4gICAgY29uc3Qge3Zpc0NvbmZpZ30gPSB0aGlzLmNvbmZpZztcbiAgICBjb25zdCBlbGVab29tRmFjdG9yID0gdGhpcy5nZXRFbGV2YXRpb25ab29tRmFjdG9yKG1hcFN0YXRlKTtcblxuICAgIGNvbnN0IHVwZGF0ZVRyaWdnZXJzID0ge1xuICAgICAgZ2V0Q29sb3JWYWx1ZToge1xuICAgICAgICBjb2xvckZpZWxkOiB0aGlzLmNvbmZpZy5jb2xvckZpZWxkLFxuICAgICAgICBjb2xvckFnZ3JlZ2F0aW9uOiB0aGlzLmNvbmZpZy52aXNDb25maWcuY29sb3JBZ2dyZWdhdGlvblxuICAgICAgfSxcbiAgICAgIGdldEVsZXZhdGlvblZhbHVlOiB7XG4gICAgICAgIHNpemVGaWVsZDogdGhpcy5jb25maWcuc2l6ZUZpZWxkLFxuICAgICAgICBzaXplQWdncmVnYXRpb246IHRoaXMuY29uZmlnLnZpc0NvbmZpZy5zaXplQWdncmVnYXRpb25cbiAgICAgIH0sXG4gICAgICBfZmlsdGVyRGF0YToge1xuICAgICAgICBmaWx0ZXJSYW5nZTogZ3B1RmlsdGVyLmZpbHRlclJhbmdlLFxuICAgICAgICAuLi5ncHVGaWx0ZXIuZmlsdGVyVmFsdWVVcGRhdGVUcmlnZ2Vyc1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5nZXREZWZhdWx0RGVja0xheWVyUHJvcHMob3B0cyksXG4gICAgICBjb3ZlcmFnZTogdmlzQ29uZmlnLmNvdmVyYWdlLFxuXG4gICAgICAvLyBjb2xvclxuICAgICAgY29sb3JSYW5nZTogdGhpcy5nZXRDb2xvclJhbmdlKHZpc0NvbmZpZy5jb2xvclJhbmdlKSxcbiAgICAgIGNvbG9yU2NhbGVUeXBlOiB0aGlzLmNvbmZpZy5jb2xvclNjYWxlLFxuICAgICAgdXBwZXJQZXJjZW50aWxlOiB2aXNDb25maWcucGVyY2VudGlsZVsxXSxcbiAgICAgIGxvd2VyUGVyY2VudGlsZTogdmlzQ29uZmlnLnBlcmNlbnRpbGVbMF0sXG4gICAgICBjb2xvckFnZ3JlZ2F0aW9uOiB2aXNDb25maWcuY29sb3JBZ2dyZWdhdGlvbixcblxuICAgICAgLy8gZWxldmF0aW9uXG4gICAgICBleHRydWRlZDogdmlzQ29uZmlnLmVuYWJsZTNkLFxuICAgICAgZWxldmF0aW9uU2NhbGU6IHZpc0NvbmZpZy5lbGV2YXRpb25TY2FsZSAqIGVsZVpvb21GYWN0b3IsXG4gICAgICBlbGV2YXRpb25TY2FsZVR5cGU6IHRoaXMuY29uZmlnLnNpemVTY2FsZSxcbiAgICAgIGVsZXZhdGlvblJhbmdlOiB2aXNDb25maWcuc2l6ZVJhbmdlLFxuICAgICAgZWxldmF0aW9uTG93ZXJQZXJjZW50aWxlOiB2aXNDb25maWcuZWxldmF0aW9uUGVyY2VudGlsZVswXSxcbiAgICAgIGVsZXZhdGlvblVwcGVyUGVyY2VudGlsZTogdmlzQ29uZmlnLmVsZXZhdGlvblBlcmNlbnRpbGVbMV0sXG5cbiAgICAgIC8vIHVwZGF0ZVRyaWdnZXJzXG4gICAgICB1cGRhdGVUcmlnZ2VycyxcblxuICAgICAgLy8gY2FsbGJhY2tzXG4gICAgICBvblNldENvbG9yRG9tYWluOiBsYXllckNhbGxiYWNrcy5vblNldExheWVyRG9tYWluXG4gICAgfTtcbiAgfVxufVxuIl19
394
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sYXllcnMvYWdncmVnYXRpb24tbGF5ZXIuanMiXSwibmFtZXMiOlsicG9pbnRQb3NBY2Nlc3NvciIsImxhdCIsImxuZyIsImRjIiwiZCIsInZhbHVlQXQiLCJpbmRleCIsImZpZWxkSWR4IiwicG9pbnRQb3NSZXNvbHZlciIsImdldFZhbHVlQWdnckZ1bmMiLCJmaWVsZCIsImFnZ3JlZ2F0aW9uIiwicG9pbnRzIiwibWFwIiwicCIsInZhbHVlQWNjZXNzb3IiLCJzb3VyY2UiLCJsZW5ndGgiLCJnZXRGaWx0ZXJEYXRhRnVuYyIsImZpbHRlclJhbmdlIiwiZ2V0RmlsdGVyVmFsdWUiLCJwdCIsImV2ZXJ5IiwidmFsIiwiaSIsImdldExheWVyQ29sb3JSYW5nZSIsImNvbG9yUmFuZ2UiLCJjb2xvcnMiLCJoZXhUb1JnYiIsImFnZ3JlZ2F0ZVJlcXVpcmVkQ29sdW1ucyIsIkFnZ3JlZ2F0aW9uTGF5ZXIiLCJwcm9wcyIsImdldFBvc2l0aW9uQWNjZXNzb3IiLCJkYXRhQ29udGFpbmVyIiwiY29uZmlnIiwiY29sdW1ucyIsImdldENvbG9yUmFuZ2UiLCJkZWZhdWx0UG9pbnRDb2x1bW5QYWlycyIsImNvbG9yIiwiY2hhbm5lbFNjYWxlVHlwZSIsIkNIQU5ORUxfU0NBTEVTIiwiY29sb3JBZ2dyIiwiZGVmYXVsdE1lYXN1cmUiLCJkb21haW4iLCJrZXkiLCJwcm9wZXJ0eSIsInJhbmdlIiwic2NhbGUiLCJzaXplIiwic2l6ZUFnZ3IiLCJjb25kaXRpb24iLCJ2aXNDb25maWciLCJlbmFibGUzZCIsInZpc3VhbENoYW5uZWxzIiwiZmllbGRDb25maWciLCJsYWJlbCIsInZpc0NvbmZpZ1NldHRpbmdzIiwibWVhc3VyZSIsImRpc3BsYXlOYW1lIiwibmFtZSIsIm9iamVjdCIsImNoYW5uZWwiLCJkYXRhIiwidmFsaWRhdGVWaXN1YWxDaGFubmVsIiwidmFsaWRhdGVGaWVsZFR5cGUiLCJ2YWxpZGF0ZUFnZ3JlZ2F0aW9uVHlwZSIsInZhbGlkYXRlU2NhbGUiLCJ2aXN1YWxDaGFubmVsIiwiYWdncmVnYXRpb25PcHRpb25zIiwiZ2V0QWdncmVnYXRpb25PcHRpb25zIiwidXBkYXRlTGF5ZXJDb25maWciLCJpbmNsdWRlcyIsInVwZGF0ZUxheWVyVmlzQ29uZmlnIiwiT2JqZWN0Iiwia2V5cyIsIkZJRUxEX09QVFMiLCJ0eXBlIiwiREVGQVVMVF9BR0dSRUdBVElPTiIsImFnZ3JlZ2F0aW9uVHlwZSIsImRhdGFzZXRzIiwibmV3RmlsdGVyIiwiZ2V0UG9zaXRpb24iLCJib3VuZHMiLCJnZXRQb2ludHNCb3VuZHMiLCJ1cGRhdGVNZXRhIiwiZmlsdGVyZWRJbmRleCIsInBvcyIsIk51bWJlciIsImlzRmluaXRlIiwicHVzaCIsIm9sZExheWVyRGF0YSIsImRhdGFJZCIsImdwdUZpbHRlciIsImdldENvbG9yVmFsdWUiLCJjb2xvckZpZWxkIiwiY29sb3JBZ2dyZWdhdGlvbiIsImdldEVsZXZhdGlvblZhbHVlIiwic2l6ZUZpZWxkIiwic2l6ZUFnZ3JlZ2F0aW9uIiwiaGFzRmlsdGVyIiwidmFsdWVzIiwic29tZSIsImFyciIsInYiLCJmaWx0ZXJWYWx1ZUFjY2Vzc29yIiwiZmlsdGVyRGF0YSIsInVuZGVmaW5lZCIsInVwZGF0ZURhdGEiLCJfZmlsdGVyRGF0YSIsIm9wdHMiLCJiYXNlUHJvcCIsIm1hc2tFeHRlbnNpb25Qcm9wcyIsIm1hc2tQb2x5Z29uIiwiaGlnaGxpZ2h0Q29sb3IiLCJISUdITElHSF9DT0xPUl8zRCIsImV4dGVuc2lvbnMiLCJhdXRvSGlnaGxpZ2h0IiwibGF5ZXJDYWxsYmFja3MiLCJ1cGRhdGVUcmlnZ2VycyIsImZpbHRlclZhbHVlVXBkYXRlVHJpZ2dlcnMiLCJnZXREZWZhdWx0RGVja0xheWVyUHJvcHMiLCJjb3ZlcmFnZSIsImNvbG9yU2NhbGVUeXBlIiwiY29sb3JTY2FsZSIsInVwcGVyUGVyY2VudGlsZSIsInBlcmNlbnRpbGUiLCJsb3dlclBlcmNlbnRpbGUiLCJleHRydWRlZCIsImVsZXZhdGlvblNjYWxlIiwiZWxldmF0aW9uU2NhbGVUeXBlIiwic2l6ZVNjYWxlIiwiZWxldmF0aW9uUmFuZ2UiLCJzaXplUmFuZ2UiLCJlbGV2YXRpb25Mb3dlclBlcmNlbnRpbGUiLCJlbGV2YXRpb25QZXJjZW50aWxlIiwiZWxldmF0aW9uVXBwZXJQZXJjZW50aWxlIiwib25TZXRDb2xvckRvbWFpbiIsIm9uU2V0TGF5ZXJEb21haW4iLCJMYXllciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9CQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7OztBQU9PLElBQU1BLGdCQUFnQixHQUFHLFNBQW5CQSxnQkFBbUI7QUFBQSxNQUFFQyxHQUFGLFFBQUVBLEdBQUY7QUFBQSxNQUFPQyxHQUFQLFFBQU9BLEdBQVA7QUFBQSxTQUFnQixVQUFBQyxFQUFFO0FBQUEsV0FBSSxVQUFBQyxDQUFDO0FBQUEsYUFBSSxDQUN6REQsRUFBRSxDQUFDRSxPQUFILENBQVdELENBQUMsQ0FBQ0UsS0FBYixFQUFvQkosR0FBRyxDQUFDSyxRQUF4QixDQUR5RCxFQUV6REosRUFBRSxDQUFDRSxPQUFILENBQVdELENBQUMsQ0FBQ0UsS0FBYixFQUFvQkwsR0FBRyxDQUFDTSxRQUF4QixDQUZ5RCxDQUFKO0FBQUEsS0FBTDtBQUFBLEdBQWxCO0FBQUEsQ0FBekI7Ozs7QUFLQSxJQUFNQyxnQkFBZ0IsR0FBRyxTQUFuQkEsZ0JBQW1CO0FBQUEsTUFBRVAsR0FBRixTQUFFQSxHQUFGO0FBQUEsTUFBT0MsR0FBUCxTQUFPQSxHQUFQO0FBQUEsbUJBQW1CRCxHQUFHLENBQUNNLFFBQXZCLGNBQW1DTCxHQUFHLENBQUNLLFFBQXZDO0FBQUEsQ0FBekI7Ozs7QUFFQSxJQUFNRSxnQkFBZ0IsR0FBRyxTQUFuQkEsZ0JBQW1CLENBQUNDLEtBQUQsRUFBUUMsV0FBUixFQUF3QjtBQUN0RCxTQUFPLFVBQUFDLE1BQU0sRUFBSTtBQUNmLFdBQU9GLEtBQUssR0FDUiwrQkFDRUUsTUFBTSxDQUFDQyxHQUFQLENBQVcsVUFB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QUFTLENBQUM0QyxnQkFUOUI7QUFXRTtBQUNBZ0MsUUFBQUEsUUFBUSxFQUFFNUUsU0FBUyxDQUFDQyxRQVp0QjtBQWFFNEUsUUFBQUEsY0FBYyxFQUFFN0UsU0FBUyxDQUFDNkUsY0FiNUI7QUFjRUMsUUFBQUEsa0JBQWtCLEVBQUUsS0FBSy9GLE1BQUwsQ0FBWWdHLFNBZGxDO0FBZUVDLFFBQUFBLGNBQWMsRUFBRWhGLFNBQVMsQ0FBQ2lGLFNBZjVCO0FBZ0JFQyxRQUFBQSx3QkFBd0IsRUFBRWxGLFNBQVMsQ0FBQ21GLG1CQUFWLENBQThCLENBQTlCLENBaEI1QjtBQWlCRUMsUUFBQUEsd0JBQXdCLEVBQUVwRixTQUFTLENBQUNtRixtQkFBVixDQUE4QixDQUE5QixDQWpCNUI7QUFtQkU7QUFDQWhCLFFBQUFBLGNBQWMsRUFBZEEsY0FwQkY7QUFzQkU7QUFDQWtCLFFBQUFBLGdCQUFnQixFQUFFbkIsY0FBYyxDQUFDb0I7QUF2Qm5DO0FBeUJEOzs7RUFyUjJDQyxxQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAyMiBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCBtZW1vaXplIGZyb20gJ2xvZGFzaC5tZW1vaXplJztcbmltcG9ydCBMYXllciBmcm9tICcuL2Jhc2UtbGF5ZXInO1xuaW1wb3J0IHtnZXRNYXNrRXh0ZW5zaW9uUHJvcHN9IGZyb20gJ3V0aWxzL2xheWVyLXV0aWxzJztcbmltcG9ydCB7aGV4VG9SZ2J9IGZyb20gJ3V0aWxzL2NvbG9yLXV0aWxzJztcbmltcG9ydCB7YWdncmVnYXRlfSBmcm9tICd1dGlscy9hZ2dyZWdhdGUtdXRpbHMnO1xuaW1wb3J0IHtcbiAgSElHSExJR0hfQ09MT1JfM0QsXG4gIENIQU5ORUxfU0NBTEVTLFxuICBGSUVMRF9PUFRTLFxuICBERUZBVUxUX0FHR1JFR0FUSU9OXG59IGZyb20gJ2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzJztcblxuZXhwb3J0IGNvbnN0IHBvaW50UG9zQWNjZXNzb3IgPSAoe2xhdCwgbG5nfSkgPT4gZGMgPT4gZCA9PiBbXG4gIGRjLnZhbHVlQXQoZC5pbmRleCwgbG5nLmZpZWxkSWR4KSxcbiAgZGMudmFsdWVBdChkLmluZGV4LCBsYXQuZmllbGRJZHgpXG5dO1xuXG5leHBvcnQgY29uc3QgcG9pbnRQb3NSZXNvbHZlciA9ICh7bGF0LCBsbmd9KSA9PiBgJHtsYXQuZmllbGRJZHh9LSR7bG5nLmZpZWxkSWR4fWA7XG5cbmV4cG9ydCBjb25zdCBnZXRWYWx1ZUFnZ3JGdW5jID0gKGZpZWxkLCBhZ2dyZWdhdGlvbikgPT4ge1xuICByZXR1cm4gcG9pbnRzID0+IHtcbiAgICByZXR1cm4gZmllbGRcbiAgICAgID8gYWdncmVnYXRlKFxuICAgICAgICAgIHBvaW50cy5tYXAocCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZmllbGQudmFsdWVBY2Nlc3NvcihwLnNvdXJjZSA/IHAuc291cmNlIDogcCk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgYWdncmVnYXRpb25cbiAgICAgICAgKVxuICAgICAgOiBwb2ludHMubGVuZ3RoO1xuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbHRlckRhdGFGdW5jID0gKGZpbHRlclJhbmdlLCBnZXRGaWx0ZXJWYWx1ZSkgPT4gcHQgPT5cbiAgZ2V0RmlsdGVyVmFsdWUocHQpLmV2ZXJ5KCh2YWwsIGkpID0+IHZhbCA+PSBmaWx0ZXJSYW5nZVtpXVswXSAmJiB2YWwgPD0gZmlsdGVyUmFuZ2VbaV1bMV0pO1xuXG5jb25zdCBnZXRMYXllckNvbG9yUmFuZ2UgPSBjb2xvclJhbmdlID0+IGNvbG9yUmFuZ2UuY29sb3JzLm1hcChoZXhUb1JnYik7XG5cbmV4cG9ydCBjb25zdCBhZ2dyZWdhdGVSZXF1aXJlZENvbHVtbnMgPSBbJ2xhdCcsICdsbmcnXTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWdncmVnYXRpb25MYXllciBleHRlbmRzIExheWVyIHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLmdldFBvc2l0aW9uQWNjZXNzb3IgPSBkYXRhQ29udGFpbmVyID0+XG4gICAgICBwb2ludFBvc0FjY2Vzc29yKHRoaXMuY29uZmlnLmNvbHVtbnMpKGRhdGFDb250YWluZXIpO1xuICAgIHRoaXMuZ2V0Q29sb3JSYW5nZSA9IG1lbW9pemUoZ2V0TGF5ZXJDb2xvclJhbmdlKTtcbiAgfVxuXG4gIGdldCBpc0FnZ3JlZ2F0ZWQoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBnZXQgcmVxdWlyZWRMYXllckNvbHVtbnMoKSB7XG4gICAgcmV0dXJuIGFnZ3JlZ2F0ZVJlcXVpcmVkQ29sdW1ucztcbiAgfVxuXG4gIGdldCBjb2x1bW5QYWlycygpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9pbnRDb2x1bW5QYWlycztcbiAgfVxuXG4gIGdldCBub25lTGF5ZXJEYXRhQWZmZWN0aW5nUHJvcHMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLnN1cGVyLm5vbmVMYXllckRhdGFBZmZlY3RpbmdQcm9wcyxcbiAgICAgICdlbmFibGUzZCcsXG4gICAgICAnY29sb3JSYW5nZScsXG4gICAgICAnY29sb3JEb21haW4nLFxuICAgICAgJ3NpemVSYW5nZScsXG4gICAgICAnc2l6ZVNjYWxlJyxcbiAgICAgICdzaXplRG9tYWluJyxcbiAgICAgICdwZXJjZW50aWxlJyxcbiAgICAgICdjb3ZlcmFnZScsXG4gICAgICAnZWxldmF0aW9uUGVyY2VudGlsZScsXG4gICAgICAnZWxldmF0aW9uU2NhbGUnLFxuICAgICAgJ2VuYWJsZUVsZXZhdGlvblpvb21GYWN0b3InXG4gICAgXTtcbiAgfVxuXG4gIGdldCB2aXN1YWxDaGFubmVscygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29sb3I6IHtcbiAgICAgICAgYWdncmVnYXRpb246ICdjb2xvckFnZ3JlZ2F0aW9uJyxcbiAgICAgICAgY2hhbm5lbFNjYWxlVHlwZTogQ0hBTk5FTF9TQ0FMRVMuY29sb3JBZ2dyLFxuICAgICAgICBkZWZhdWx0TWVhc3VyZTogJ3Byb3BlcnR5LnBvaW50Q291bnQnLFxuICAgICAgICBkb21haW46ICdjb2xvckRvbWFpbicsXG4gICAgICAgIGZpZWxkOiAnY29sb3JGaWVsZCcsXG4gICAgICAgIGtleTogJ2NvbG9yJyxcbiAgICAgICAgcHJvcGVydHk6ICdjb2xvcicsXG4gICAgICAgIHJhbmdlOiAnY29sb3JSYW5nZScsXG4gICAgICAgIHNjYWxlOiAnY29sb3JTY2FsZSdcbiAgICAgIH0sXG4gICAgICBzaXplOiB7XG4gICAgICAgIGFnZ3JlZ2F0aW9uOiAnc2l6ZUFnZ3JlZ2F0aW9uJyxcbiAgICAgICAgY2hhbm5lbFNjYWxlVHlwZTogQ0hBTk5FTF9TQ0FMRVMuc2l6ZUFnZ3IsXG4gICAgICAgIGNvbmRpdGlvbjogY29uZmlnID0+IGNvbmZpZy52aXNDb25maWcuZW5hYmxlM2QsXG4gICAgICAgIGRlZmF1bHRNZWFzdXJlOiAncHJvcGVydHkucG9pbnRDb3VudCcsXG4gICAgICAgIGRvbWFpbjogJ3NpemVEb21haW4nLFxuICAgICAgICBmaWVsZDogJ3NpemVGaWVsZCcsXG4gICAgICAgIGtleTogJ3NpemUnLFxuICAgICAgICBwcm9wZXJ0eTogJ2hlaWdodCcsXG4gICAgICAgIHJhbmdlOiAnc2l6ZVJhbmdlJyxcbiAgICAgICAgc2NhbGU6ICdzaXplU2NhbGUnXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlc2NyaXB0aW9uIG9mIGEgdmlzdWFsQ2hhbm5lbCBjb25maWdcbiAgICogQHBhcmFtIGtleVxuICAgKiBAcmV0dXJucyB7e2xhYmVsOiBzdHJpbmcsIG1lYXN1cmU6IChzdHJpbmd8c3RyaW5nKX19XG4gICAqL1xuICBnZXRWaXN1YWxDaGFubmVsRGVzY3JpcHRpb24oa2V5KSB7XG4gICAgLy8gZS5nLiBsYWJlbDogQ29sb3IsIG1lYXN1cmU6IEF2ZXJhZ2Ugb2YgRVRBXG4gICAgY29uc3Qge3JhbmdlLCBmaWVsZCwgZGVmYXVsdE1lYXN1cmUsIGFnZ3JlZ2F0aW9ufSA9IHRoaXMudmlzdWFsQ2hhbm5lbHNba2V5XTtcbiAgICBjb25zdCBmaWVsZENvbmZpZyA9IHRoaXMuY29uZmlnW2ZpZWxkXTtcbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IHRoaXMudmlzQ29uZmlnU2V0dGluZ3NbcmFuZ2VdLmxhYmVsLFxuICAgICAgbWVhc3VyZTogZmllbGRDb25maWdcbiAgICAgICAgPyBgJHt0aGlzLmNvbmZpZy52aXNDb25maWdbYWdncmVnYXRpb25dfSBvZiAke2ZpZWxkQ29uZmlnLmRpc3BsYXlOYW1lIHx8IGZpZWxkQ29uZmlnLm5hbWV9YFxuICAgICAgICA6IGRlZmF1bHRNZWFzdXJlXG4gICAgfTtcbiAgfVxuXG4gIGdldEhvdmVyRGF0YShvYmplY3QpIHtcbiAgICAvLyByZXR1cm4gYWdncmVnYXRlZCBvYmplY3RcbiAgICByZXR1cm4gb2JqZWN0O1xuICB9XG5cbiAgLyoqXG4gICAqIEFnZ3JlZ2F0aW9uIGxheWVyIGhhbmRsZXMgdmlzdWFsIGNoYW5uZWwgYWdncmVnYXRpb24gaW5zaWRlIGRlY2suZ2wgbGF5ZXJcbiAgICovXG4gIHVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbCh7ZGF0YSwgZGF0YUNvbnRhaW5lcn0sIGNoYW5uZWwpIHtcbiAgICB0aGlzLnZhbGlkYXRlVmlzdWFsQ2hhbm5lbChjaGFubmVsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBhZ2dyZWdhdGlvbiB0eXBlIG9uIHRvcCBvZiBiYXNpYyBsYXllciB2aXN1YWwgY2hhbm5lbCB2YWxpZGF0aW9uXG4gICAqIEBwYXJhbSBjaGFubmVsXG4gICAqL1xuICB2YWxpZGF0ZVZpc3VhbENoYW5uZWwoY2hhbm5lbCkge1xuICAgIC8vIGZpZWxkIHR5cGUgZGVjaWRlcyBhZ2dyZWdhdGlvbiB0eXBlIGRlY2lkZXMgc2NhbGUgdHlwZVxuICAgIHRoaXMudmFsaWRhdGVGaWVsZFR5cGUoY2hhbm5lbCk7XG4gICAgdGhpcy52YWxpZGF0ZUFnZ3JlZ2F0aW9uVHlwZShjaGFubmVsKTtcbiAgICB0aGlzLnZhbGlkYXRlU2NhbGUoY2hhbm5lbCk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgYWdncmVnYXRpb24gdHlwZSBiYXNlZCBvbiBzZWxlY3RlZCBmaWVsZFxuICAgKi9cbiAgdmFsaWRhdGVBZ2dyZWdhdGlvblR5cGUoY2hhbm5lbCkge1xuICAgIGNvbnN0IHZpc3VhbENoYW5uZWwgPSB0aGlzLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuICAgIGNvbnN0IHtmaWVsZCwgYWdncmVnYXRpb259ID0gdmlzdWFsQ2hhbm5lbDtcbiAgICBjb25zdCBhZ2dyZWdhdGlvbk9wdGlvbnMgPSB0aGlzLmdldEFnZ3JlZ2F0aW9uT3B0aW9ucyhjaGFubmVsKTtcblxuICAgIGlmICghYWdncmVnYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWFnZ3JlZ2F0aW9uT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgIC8vIGlmIGZpZWxkIGNhbm5vdCBiZSBhZ2dyZWdhdGVkLCBzZXQgZmllbGQgdG8gbnVsbFxuICAgICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7W2ZpZWxkXTogbnVsbH0pO1xuICAgIH0gZWxzZSBpZiAoIWFnZ3JlZ2F0aW9uT3B0aW9ucy5pbmNsdWRlcyh0aGlzLmNvbmZpZy52aXNDb25maWdbYWdncmVnYXRpb25dKSkge1xuICAgICAgLy8gY3VycmVudCBhZ2dyZWdhdGlvbiB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBmaWVsZFxuICAgICAgLy8gc2V0IGFnZ3JlZ2F0aW9uIHRvIHRoZSBmaXJzdCBzdXBwb3J0ZWQgb3B0aW9uXG4gICAgICB0aGlzLnVwZGF0ZUxheWVyVmlzQ29uZmlnKHtbYWdncmVnYXRpb25dOiBhZ2dyZWdhdGlvbk9wdGlvbnNbMF19KTtcbiAgICB9XG4gIH1cblxuICBnZXRBZ2dyZWdhdGlvbk9wdGlvbnMoY2hhbm5lbCkge1xuICAgIGNvbnN0IHZpc3VhbENoYW5uZWwgPSB0aGlzLnZpc3VhbENoYW5uZWxzW2NoYW5uZWxdO1xuICAgIGNvbnN0IHtmaWVsZCwgY2hhbm5lbFNjYWxlVHlwZX0gPSB2aXN1YWxDaGFubmVsO1xuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKFxuICAgICAgdGhpcy5jb25maWdbZmllbGRdXG4gICAgICAgID8gRklFTERfT1BUU1t0aGlzLmNvbmZpZ1tmaWVsZF0udHlwZV0uc2NhbGVbY2hhbm5lbFNjYWxlVHlwZV1cbiAgICAgICAgOiBERUZBVUxUX0FHR1JFR0FUSU9OW2NoYW5uZWxTY2FsZVR5cGVdXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc2NhbGUgb3B0aW9ucyBiYXNlZCBvbiBjdXJyZW50IGZpZWxkIGFuZCBhZ2dyZWdhdGlvbiB0eXBlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaGFubmVsXG4gICAqIEByZXR1cm5zIHtzdHJpbmdbXX1cbiAgICovXG4gIGdldFNjYWxlT3B0aW9ucyhjaGFubmVsKSB7XG4gICAgY29uc3QgdmlzdWFsQ2hhbm5lbCA9IHRoaXMudmlzdWFsQ2hhbm5lbHNbY2hhbm5lbF07XG4gICAgY29uc3Qge2ZpZWxkLCBhZ2dyZWdhdGlvbiwgY2hhbm5lbFNjYWxlVHlwZX0gPSB2aXN1YWxDaGFubmVsO1xuICAgIGNvbnN0IGFnZ3JlZ2F0aW9uVHlwZSA9IHRoaXMuY29uZmlnLnZpc0NvbmZpZ1thZ2dyZWdhdGlvbl07XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnW2ZpZWxkXVxuICAgICAgPyAvLyBzY2FsZSBvcHRpb25zIGJhc2VkIG9uIGFnZ3JlZ2F0aW9uXG4gICAgICAgIEZJRUxEX09QVFNbdGhpcy5jb25maWdbZmllbGRdLnR5cGVdLnNjYWxlW2NoYW5uZWxTY2FsZVR5cGVdW2FnZ3JlZ2F0aW9uVHlwZV1cbiAgICAgIDogLy8gZGVmYXVsdCBzY2FsZSBvcHRpb25zIGZvciBwb2ludCBjb3VudFxuICAgICAgICBERUZBVUxUX0FHR1JFR0FUSU9OW2NoYW5uZWxTY2FsZVR5cGVdW2FnZ3JlZ2F0aW9uVHlwZV07XG4gIH1cblxuICAvKipcbiAgICogQWdncmVnYXRpb24gbGF5ZXIgaGFuZGxlcyB2aXN1YWwgY2hhbm5lbCBhZ2dyZWdhdGlvbiBpbnNpZGUgZGVjay5nbCBsYXllclxuICAgKi9cbiAgdXBkYXRlTGF5ZXJEb21haW4oZGF0YXNldHMsIG5ld0ZpbHRlcikge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdXBkYXRlTGF5ZXJNZXRhKGRhdGFDb250YWluZXIsIGdldFBvc2l0aW9uKSB7XG4gICAgLy8gZ2V0IGJvdW5kcyBmcm9tIHBvaW50c1xuICAgIGNvbnN0IGJvdW5kcyA9IHRoaXMuZ2V0UG9pbnRzQm91bmRzKGRhdGFDb250YWluZXIsIGdldFBvc2l0aW9uKTtcblxuICAgIHRoaXMudXBkYXRlTWV0YSh7Ym91bmRzfSk7XG4gIH1cblxuICBjYWxjdWxhdGVEYXRhQXR0cmlidXRlKHtkYXRhQ29udGFpbmVyLCBmaWx0ZXJlZEluZGV4fSwgZ2V0UG9zaXRpb24pIHtcbiAgICBjb25zdCBkYXRhID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbHRlcmVkSW5kZXgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gZmlsdGVyZWRJbmRleFtpXTtcbiAgICAgIGNvbnN0IHBvcyA9IGdldFBvc2l0aW9uKHtpbmRleH0pO1xuXG4gICAgICAvLyBpZiBkb2Vzbid0IGhhdmUgcG9pbnQgbGF0IG9yIGxuZywgZG8gbm90IGFkZCB0aGUgcG9pbnRcbiAgICAgIC8vIGRlY2suZ2wgY2FuJ3QgaGFuZGxlIHBvc2l0aW9uID0gbnVsbFxuICAgICAgaWYgKHBvcy5ldmVyeShOdW1iZXIuaXNGaW5pdGUpKSB7XG4gICAgICAgIGRhdGEucHVzaCh7XG4gICAgICAgICAgaW5kZXhcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBmb3JtYXRMYXllckRhdGEoZGF0YXNldHMsIG9sZExheWVyRGF0YSkge1xuICAgIGNvbnN0IHtncHVGaWx0ZXIsIGRhdGFDb250YWluZXJ9ID0gZGF0YXNldHNbdGhpcy5jb25maWcuZGF0YUlkXTtcbiAgICBjb25zdCBnZXRQb3NpdGlvbiA9IHRoaXMuZ2V0UG9zaXRpb25BY2Nlc3NvcihkYXRhQ29udGFpbmVyKTtcblxuICAgIGNvbnN0IGdldENvbG9yVmFsdWUgPSBnZXRWYWx1ZUFnZ3JGdW5jKFxuICAgICAgdGhpcy5jb25maWcuY29sb3JGaWVsZCxcbiAgICAgIHRoaXMuY29uZmlnLnZpc0NvbmZpZy5jb2xvckFnZ3JlZ2F0aW9uXG4gICAgKTtcblxuICAgIGNvbnN0IGdldEVsZXZhdGlvblZhbHVlID0gZ2V0VmFsdWVBZ2dyRnVuYyhcbiAgICAgIHRoaXMuY29uZmlnLnNpemVGaWVsZCxcbiAgICAgIHRoaXMuY29uZmlnLnZpc0NvbmZpZy5zaXplQWdncmVnYXRpb25cbiAgICApO1xuICAgIGNvbnN0IGhhc0ZpbHRlciA9IE9iamVjdC52YWx1ZXMoZ3B1RmlsdGVyLmZpbHRlclJhbmdlKS5zb21lKGFyciA9PiBhcnIuc29tZSh2ID0+IHYgIT09IDApKTtcblxuICAgIGNvbnN0IGdldEZpbHRlclZhbHVlID0gZ3B1RmlsdGVyLmZpbHRlclZhbHVlQWNjZXNzb3IoZGF0YUNvbnRhaW5lcikoKTtcbiAgICBjb25zdCBmaWx0ZXJEYXRhID0gaGFzRmlsdGVyXG4gICAgICA/IGdldEZpbHRlckRhdGFGdW5jKGdwdUZpbHRlci5maWx0ZXJSYW5nZSwgZ2V0RmlsdGVyVmFsdWUpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IHtkYXRhfSA9IHRoaXMudXBkYXRlRGF0YShkYXRhc2V0cywgb2xkTGF5ZXJEYXRhKTtcblxuICAgIHJldHVybiB7XG4gICAgICBkYXRhLFxuICAgICAgZ2V0UG9zaXRpb24sXG4gICAgICBfZmlsdGVyRGF0YTogZmlsdGVyRGF0YSxcbiAgICAgIC4uLihnZXRDb2xvclZhbHVlID8ge2dldENvbG9yVmFsdWV9IDoge30pLFxuICAgICAgLi4uKGdldEVsZXZhdGlvblZhbHVlID8ge2dldEVsZXZhdGlvblZhbHVlfSA6IHt9KVxuICAgIH07XG4gIH1cblxuICBnZXREZWZhdWx0RGVja0xheWVyUHJvcHMob3B0cykge1xuICAgIGNvbnN0IGJhc2VQcm9wID0gc3VwZXIuZ2V0RGVmYXVsdERlY2tMYXllclByb3BzKG9wdHMpO1xuICAgIGNvbnN0IG1hc2tFeHRlbnNpb25Qcm9wcyA9IGdldE1hc2tFeHRlbnNpb25Qcm9wcyhvcHRzLm1hc2tQb2x5Z29uKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5iYXNlUHJvcCxcbiAgICAgIC4uLm1hc2tFeHRlbnNpb25Qcm9wcyxcbiAgICAgIGhpZ2hsaWdodENvbG9yOiBISUdITElHSF9DT0xPUl8zRCxcbiAgICAgIC8vIGdwdSBkYXRhIGZpbHRlcmluZyBpcyBub3Qgc3VwcG9ydGVkIGluIGFnZ3JlZ2F0aW9uIGxheWVyXG4gICAgICBleHRlbnNpb25zOiBbLi4ubWFza0V4dGVuc2lvblByb3BzLmV4dGVuc2lvbnNdLFxuICAgICAgYXV0b0hpZ2hsaWdodDogdGhpcy5jb25maWcudmlzQ29uZmlnLmVuYWJsZTNkXG4gICAgfTtcbiAgfVxuXG4gIGdldERlZmF1bHRBZ2dyZWdhdGlvbkxheWVyUHJvcChvcHRzKSB7XG4gICAgY29uc3Qge2dwdUZpbHRlciwgbGF5ZXJDYWxsYmFja3MgPSB7fX0gPSBvcHRzO1xuICAgIGNvbnN0IHt2aXNDb25maWd9ID0gdGhpcy5jb25maWc7XG5cbiAgICBjb25zdCB1cGRhdGVUcmlnZ2VycyA9IHtcbiAgICAgIGdldENvbG9yVmFsdWU6IHtcbiAgICAgICAgY29sb3JGaWVsZDogdGhpcy5jb25maWcuY29sb3JGaWVsZCxcbiAgICAgICAgY29sb3JBZ2dyZWdhdGlvbjogdGhpcy5jb25maWcudmlzQ29uZmlnLmNvbG9yQWdncmVnYXRpb25cbiAgICAgIH0sXG4gICAgICBnZXRFbGV2YXRpb25WYWx1ZToge1xuICAgICAgICBzaXplRmllbGQ6IHRoaXMuY29uZmlnLnNpemVGaWVsZCxcbiAgICAgICAgc2l6ZUFnZ3JlZ2F0aW9uOiB0aGlzLmNvbmZpZy52aXNDb25maWcuc2l6ZUFnZ3JlZ2F0aW9uXG4gICAgICB9LFxuICAgICAgX2ZpbHRlckRhdGE6IHtcbiAgICAgICAgZmlsdGVyUmFuZ2U6IGdwdUZpbHRlci5maWx0ZXJSYW5nZSxcbiAgICAgICAgLi4uZ3B1RmlsdGVyLmZpbHRlclZhbHVlVXBkYXRlVHJpZ2dlcnNcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuZ2V0RGVmYXVsdERlY2tMYXllclByb3BzKG9wdHMpLFxuICAgICAgY292ZXJhZ2U6IHZpc0NvbmZpZy5jb3ZlcmFnZSxcblxuICAgICAgLy8gY29sb3JcbiAgICAgIGNvbG9yUmFuZ2U6IHRoaXMuZ2V0Q29sb3JSYW5nZSh2aXNDb25maWcuY29sb3JSYW5nZSksXG4gICAgICBjb2xvclNjYWxlVHlwZTogdGhpcy5jb25maWcuY29sb3JTY2FsZSxcbiAgICAgIHVwcGVyUGVyY2VudGlsZTogdmlzQ29uZmlnLnBlcmNlbnRpbGVbMV0sXG4gICAgICBsb3dlclBlcmNlbnRpbGU6IHZpc0NvbmZpZy5wZXJjZW50aWxlWzBdLFxuICAgICAgY29sb3JBZ2dyZWdhdGlvbjogdmlzQ29uZmlnLmNvbG9yQWdncmVnYXRpb24sXG5cbiAgICAgIC8vIGVsZXZhdGlvblxuICAgICAgZXh0cnVkZWQ6IHZpc0NvbmZpZy5lbmFibGUzZCxcbiAgICAgIGVsZXZhdGlvblNjYWxlOiB2aXNDb25maWcuZWxldmF0aW9uU2NhbGUsXG4gICAgICBlbGV2YXRpb25TY2FsZVR5cGU6IHRoaXMuY29uZmlnLnNpemVTY2FsZSxcbiAgICAgIGVsZXZhdGlvblJhbmdlOiB2aXNDb25maWcuc2l6ZVJhbmdlLFxuICAgICAgZWxldmF0aW9uTG93ZXJQZXJjZW50aWxlOiB2aXNDb25maWcuZWxldmF0aW9uUGVyY2VudGlsZVswXSxcbiAgICAgIGVsZXZhdGlvblVwcGVyUGVyY2VudGlsZTogdmlzQ29uZmlnLmVsZXZhdGlvblBlcmNlbnRpbGVbMV0sXG5cbiAgICAgIC8vIHVwZGF0ZVRyaWdnZXJzXG4gICAgICB1cGRhdGVUcmlnZ2VycyxcblxuICAgICAgLy8gY2FsbGJhY2tzXG4gICAgICBvblNldENvbG9yRG9tYWluOiBsYXllckNhbGxiYWNrcy5vblNldExheWVyRG9tYWluXG4gICAgfTtcbiAgfVxufVxuIl19