@kepler.gl/deckgl-layers 3.3.0-alpha.6 → 3.3.0-alpha.8

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.
@@ -4,7 +4,7 @@
4
4
  import { COORDINATE_SYSTEM } from '@deck.gl/core';
5
5
  import { SolidPolygonLayer, BitmapLayer } from '@deck.gl/layers';
6
6
  import { TileLayer, MVTLayer } from '@deck.gl/geo-layers';
7
- import { getGlobeAtmosphereLayer, getGlobeAtmosphereSkyLayer } from './atmosphere-layer';
7
+ import { getGlobeAtmosphereLayer, getGlobeAtmosphereSkyLayer, getGlobeHugeHaloLayer } from './atmosphere-layer';
8
8
  import { getGlobeDepthDiskLayer } from './globe-depth-disk-layer';
9
9
  import { MVTLabelLayer } from './mvt-label-layer';
10
10
  var devicePixelRatio = Math.min(2, typeof window !== 'undefined' && window.devicePixelRatio || 1);
@@ -424,7 +424,12 @@ export var getGlobeBaseLayers = function getGlobeBaseLayers(_ref2) {
424
424
  var provider = basemapProvider !== null && basemapProvider !== void 0 ? basemapProvider : resolveGlobeBasemapProvider(undefined, mapboxApiAccessToken);
425
425
  var useCarto = provider === 'carto';
426
426
  var hasTileAccess = useCarto || Boolean(mapboxApiAccessToken);
427
- return [config.atmosphere ? getGlobeAtmosphereSkyLayer({
427
+ return [
428
+ // Huge halo behind the thin realistic limb so both can be visible together.
429
+ config.atmosphere ? getGlobeHugeHaloLayer({
430
+ config: config,
431
+ zoom: zoom
432
+ }) : null, config.atmosphere ? getGlobeAtmosphereSkyLayer({
428
433
  config: config,
429
434
  zoom: zoom
430
435
  }) : null,
@@ -558,4 +563,4 @@ export var getGlobeTopLayers = function getGlobeTopLayers(_ref3) {
558
563
  zoom: zoom
559
564
  }) : null].filter(Boolean);
560
565
  };
561
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDT09SRElOQVRFX1NZU1RFTSIsIlNvbGlkUG9seWdvbkxheWVyIiwiQml0bWFwTGF5ZXIiLCJUaWxlTGF5ZXIiLCJNVlRMYXllciIsImdldEdsb2JlQXRtb3NwaGVyZUxheWVyIiwiZ2V0R2xvYmVBdG1vc3BoZXJlU2t5TGF5ZXIiLCJnZXRHbG9iZURlcHRoRGlza0xheWVyIiwiTVZUTGFiZWxMYXllciIsImRldmljZVBpeGVsUmF0aW8iLCJNYXRoIiwibWluIiwid2luZG93IiwiQkFDS0dST1VORF9QQVJBTUVURVJTIiwiZGVwdGhUZXN0IiwiY3VsbCIsImRlcHRoTWFzayIsIkJBU0VNQVBfUkFTVEVSX1BBUkFNRVRFUlMiLCJCQUNLR1JPVU5EX0RBVEEiLCJCQUNLR1JPVU5EX05PUlRIX1BPTEVfREFUQSIsIkRFRkFVTFRfQkFTRU1BUF9DT0xPUiIsImJhY2tncm91bmRGaWxsQ29sb3IiLCJiYXNlbWFwRGVmYXVsdEZpbGxDb2xvciIsImJhc2VtYXBXYXRlckZpbGxDb2xvciIsImJhc2VtYXBEZWZhdWx0TGluZUNvbG9yIiwiYmFzZW1hcEFkbWluTGluZUNvbG9yIiwiYmFzZW1hcExhYmVsQ29sb3IiLCJnZXRQYWludENvbG9yIiwiY29sb3IiLCJBcnJheSIsImlzQXJyYXkiLCJjb2xvclN0cmluZ1RvUkdCIiwiaHNsTWF0Y2giLCJtYXRjaCIsImgiLCJwYXJzZUludCIsInMiLCJsIiwiciIsImciLCJiIiwiaHVlMnJnYiIsInAiLCJxIiwidCIsInJvdW5kIiwicmdiTWF0Y2giLCJoZXhNYXRjaCIsImhleCIsInNsaWNlIiwiZmluZEZpcnN0TGF5ZXJCeUdyb3VwIiwibGF5ZXJzIiwibGF5ZXJHcm91cHMiLCJncm91cFNsdWciLCJsYXllckdyb3VwIiwiZmluZCIsImdyb3VwIiwic2x1ZyIsImxheWVyIiwiZmlsdGVyIiwiZmluZEJhY2tncm91bmRDb2xvciIsInN0eWxlIiwiX2ZvdW5kIiwiZm91bmQiLCJpZCIsInR5cGUiLCJwYWludCIsImZpbmRXYXRlckNvbG9yIiwiX2ZvdW5kJHBhaW50IiwiZmluZEFkbWluQ29sb3IiLCJfYm9yZGVyTGF5ZXJzJHBhaW50IiwiYm9yZGVyTGF5ZXJzIiwibHlyIiwiZmluZExhYmVsQ29sb3IiLCJfbGFiZWxMYXllciIsImxhYmVsTGF5ZXIiLCJnZXRCYXNlbWFwQ29sb3JzIiwibWFwU3R5bGUiLCJfZmluZEJhY2tncm91bmRDb2xvciIsIl9maW5kV2F0ZXJDb2xvciIsIl9maW5kQWRtaW5Db2xvciIsIl9maW5kTGFiZWxDb2xvciIsIl9tYXBTdHlsZSRzdHlsZSIsInN0eWxlSnNvbiIsIl9tYXBTdHlsZSRsYXllckdyb3VwcyIsIktOT1dOX1NUWUxFX0NPTE9SUyIsImRhcmsiLCJsaWdodCIsInBvc2l0cm9uIiwidm95YWdlciIsIm11dGVkIiwibXV0ZWRfbmlnaHQiLCJnZXRCYXNlbWFwQ29sb3JzRm9yU3R5bGUiLCJzdHlsZVR5cGUiLCJfbWFwU3R5bGUkc3R5bGUyIiwibGVuZ3RoIiwiZ2V0R2xvYmVDbGVhckNvbG9yIiwiYmFja2dyb3VuZENvbG9yIiwiSU5WSVNJQkxFX0NPTE9SIiwiQkFTRU1BUF9NVlRfUEFSQU1FVEVSUyIsIk1BUEJPWF9HTE9CRV9WRUNUT1JfWk9PTV9PRkZTRVQiLCJDQVJUT19HTE9CRV9WRUNUT1JfWk9PTV9PRkZTRVQiLCJHTE9CRV9TQVRFTExJVEVfWk9PTV9PRkZTRVQiLCJHTE9CRV9USUxFX0VYVEVOVCIsIk1BUEJPWF9WRUNUT1JfTUFYX0RBVEFfWk9PTSIsIkNBUlRPX1ZFQ1RPUl9NQVhfREFUQV9aT09NIiwiem9vbUFkanVzdCIsImxhdGl0dWRlIiwibG9nMiIsIlBJIiwiY29zIiwiZ2xvYmVMYXRpdHVkZVpvb21Db21wZW5zYXRpb24iLCJOdW1iZXIiLCJpc0Zpbml0ZSIsImNsYW1wZWQiLCJtYXgiLCJyZXNvbHZlR2xvYmVCYXNlbWFwUHJvdmlkZXIiLCJiYXNlTWFwTGlicmFyeSIsIm1hcGJveEFwaUFjY2Vzc1Rva2VuIiwiQ0FSVE9fVkVDVE9SX1RJTEVfVVJMUyIsIkVTUklfV09STERfSU1BR0VSWV9VUkwiLCJnZXRCYXNlbWFwTGF5ZXJLaW5kIiwibGF5ZXJOYW1lIiwiTUFQQk9YX0FUVFJJQlVUSU9OIiwibGFiZWwiLCJocmVmIiwiT1NNX0FUVFJJQlVUSU9OIiwiQ0FSVE9fQVRUUklCVVRJT04iLCJFU1JJX0FUVFJJQlVUSU9OIiwiZ2V0R2xvYmVCYXNlbWFwQXR0cmlidXRpb25zIiwiX3JlZiIsIl9nbG9iZSRjb25maWciLCJnbG9iZSIsIm1hcFN0eWxlVHlwZSIsImJhc2VtYXBQcm92aWRlciIsImVuYWJsZWQiLCJjb25maWciLCJiYXNlbWFwIiwicHJvdmlkZXIiLCJ1bmRlZmluZWQiLCJpc1NhdGVsbGl0ZSIsImdldEdsb2JlQmFzZUxheWVycyIsIl9yZWYyIiwiem9vbSIsImlzU2F0ZWxsaXRlU3RyZWV0IiwibGF0Wm9vbUNvbXBlbnNhdGlvbiIsInVzZUNhcnRvIiwiaGFzVGlsZUFjY2VzcyIsIkJvb2xlYW4iLCJhdG1vc3BoZXJlIiwiZmlsbENvbG9yIiwic3VyZmFjZUNvbG9yIiwiZGF0YSIsImdldFBvbHlnb24iLCJkIiwiZmlsbGVkIiwiZ2V0RmlsbENvbG9yIiwicGFyYW1ldGVycyIsIndhdGVyIiwid2F0ZXJDb2xvciIsImNvbmNhdCIsIm1pblpvb20iLCJtYXhab29tIiwiem9vbU9mZnNldCIsImV4dGVudCIsInRpbGVTaXplIiwicmVuZGVyU3ViTGF5ZXJzIiwicHJvcHMiLCJfcHJvcHMkdGlsZSRiYm94IiwidGlsZSIsImJib3giLCJ3ZXN0Iiwic291dGgiLCJlYXN0Iiwibm9ydGgiLCJfaW1hZ2VDb29yZGluYXRlU3lzdGVtIiwiQ0FSVEVTSUFOIiwiaW1hZ2UiLCJib3VuZHMiLCJiaW5hcnkiLCJsb2FkT3B0aW9ucyIsIm12dCIsImYiLCJwcm9wZXJ0aWVzIiwiZ2V0TGluZUNvbG9yIiwiYWRtaW5MaW5lcyIsImFkbWluTGluZXNDb2xvciIsImdldExpbmVXaWR0aCIsImFkbWluX2xldmVsIiwidXBkYXRlVHJpZ2dlcnMiLCJsaW5lV2lkdGhVbml0cyIsImxpbmVXaWR0aE1pblBpeGVscyIsImxpbmVXaWR0aE1heFBpeGVscyIsImdldFBvaW50UmFkaXVzIiwicG9pbnRSYWRpdXNNaW5QaXhlbHMiLCJnZXRHbG9iZVRvcExheWVycyIsIl9yZWYzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2dsb2JlL2dsb2JlLWxheWVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge0NPT1JESU5BVEVfU1lTVEVNLCBMYXllcn0gZnJvbSAnQGRlY2suZ2wvY29yZSc7XG5pbXBvcnQge1NvbGlkUG9seWdvbkxheWVyLCBCaXRtYXBMYXllcn0gZnJvbSAnQGRlY2suZ2wvbGF5ZXJzJztcbmltcG9ydCB7VGlsZUxheWVyLCBNVlRMYXllcn0gZnJvbSAnQGRlY2suZ2wvZ2VvLWxheWVycyc7XG5cbmltcG9ydCB0eXBlIHtHbG9iZX0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHR5cGUge1JHQkNvbG9yfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcblxuaW1wb3J0IHtnZXRHbG9iZUF0bW9zcGhlcmVMYXllciwgZ2V0R2xvYmVBdG1vc3BoZXJlU2t5TGF5ZXJ9IGZyb20gJy4vYXRtb3NwaGVyZS1sYXllcic7XG5pbXBvcnQge2dldEdsb2JlRGVwdGhEaXNrTGF5ZXJ9IGZyb20gJy4vZ2xvYmUtZGVwdGgtZGlzay1sYXllcic7XG5pbXBvcnQge01WVExhYmVsTGF5ZXJ9IGZyb20gJy4vbXZ0LWxhYmVsLWxheWVyJztcblxudHlwZSBMYXllckdyb3VwID0ge3NsdWc6IHN0cmluZzsgZmlsdGVyOiAobGF5ZXI6IGFueSkgPT4gYm9vbGVhbn07XG5cbmNvbnN0IGRldmljZVBpeGVsUmF0aW8gPSBNYXRoLm1pbihcbiAgMixcbiAgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKSB8fCAxXG4pO1xuXG5jb25zdCBCQUNLR1JPVU5EX1BBUkFNRVRFUlMgPSB7XG4gIGRlcHRoVGVzdDogdHJ1ZSxcbiAgY3VsbDogdHJ1ZSxcbiAgZGVwdGhNYXNrOiBmYWxzZVxufTtcblxuY29uc3QgQkFTRU1BUF9SQVNURVJfUEFSQU1FVEVSUyA9IHtcbiAgZGVwdGhNYXNrOiBmYWxzZVxufTtcblxuY29uc3QgQkFDS0dST1VORF9EQVRBID0gW1xuICBbXG4gICAgWy0xODAsIDkwXSxcbiAgICBbMCwgOTBdLFxuICAgIFsxODAsIDkwXSxcbiAgICBbMTgwLCAtOTBdLFxuICAgIFswLCAtOTBdLFxuICAgIFstMTgwLCAtOTBdXG4gIF1cbl07XG5cbmNvbnN0IEJBQ0tHUk9VTkRfTk9SVEhfUE9MRV9EQVRBID0gW1xuICBbXG4gICAgWy0xODAsIDkwXSxcbiAgICBbMCwgOTBdLFxuICAgIFsxODAsIDkwXSxcbiAgICBbMTgwLCA4NV0sXG4gICAgWzAsIDg1XSxcbiAgICBbLTE4MCwgODVdXG4gIF1cbl07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0JBU0VNQVBfQ09MT1IgPSB7XG4gIGJhY2tncm91bmRGaWxsQ29sb3I6IFs5LCAxNiwgMjldIGFzIFJHQkNvbG9yLFxuICBiYXNlbWFwRGVmYXVsdEZpbGxDb2xvcjogWzI1NSwgMjU1LCAyNTVdIGFzIFJHQkNvbG9yLFxuICBiYXNlbWFwV2F0ZXJGaWxsQ29sb3I6IFsxNywgMzUsIDQ4XSBhcyBSR0JDb2xvcixcbiAgYmFzZW1hcERlZmF1bHRMaW5lQ29sb3I6IFs0MCwgNjMsIDkzXSBhcyBSR0JDb2xvcixcbiAgYmFzZW1hcEFkbWluTGluZUNvbG9yOiBbNDAsIDYzLCA5M10gYXMgUkdCQ29sb3IsXG4gIGJhc2VtYXBMYWJlbENvbG9yOiBbMTE0Ljc1LCAxMTQuNzUsIDExNC43NV0gYXMgUkdCQ29sb3Jcbn07XG5cbmZ1bmN0aW9uIGdldFBhaW50Q29sb3IoY29sb3I6IGFueSk6IHN0cmluZyB8IG51bGwge1xuICBpZiAoQXJyYXkuaXNBcnJheShjb2xvcikgJiYgY29sb3JbMF0gPT09ICdpbnRlcnBvbGF0ZScpIHtcbiAgICByZXR1cm4gY29sb3JbNF07XG4gIH1cbiAgcmV0dXJuIGNvbG9yO1xufVxuXG5mdW5jdGlvbiBjb2xvclN0cmluZ1RvUkdCKGNvbG9yOiBzdHJpbmcgfCBudWxsKTogUkdCQ29sb3IgfCBudWxsIHtcbiAgaWYgKCFjb2xvcikgcmV0dXJuIG51bGw7XG4gIGlmICh0eXBlb2YgY29sb3IgIT09ICdzdHJpbmcnKSByZXR1cm4gbnVsbDtcblxuICAvLyBIYW5kbGUgaHNsKCkgZm9ybWF0XG4gIGNvbnN0IGhzbE1hdGNoID0gY29sb3IubWF0Y2goL2hzbFxcKFxccyooXFxkKylcXHMqLFxccyooXFxkKyklXFxzKixcXHMqKFxcZCspJVxccypcXCkvKTtcbiAgaWYgKGhzbE1hdGNoKSB7XG4gICAgY29uc3QgaCA9IHBhcnNlSW50KGhzbE1hdGNoWzFdLCAxMCkgLyAzNjA7XG4gICAgY29uc3QgcyA9IHBhcnNlSW50KGhzbE1hdGNoWzJdLCAxMCkgLyAxMDA7XG4gICAgY29uc3QgbCA9IHBhcnNlSW50KGhzbE1hdGNoWzNdLCAxMCkgLyAxMDA7XG4gICAgLy8gSFNMIHRvIFJHQiBjb252ZXJzaW9uXG4gICAgbGV0IHI6IG51bWJlciwgZzogbnVtYmVyLCBiOiBudW1iZXI7XG4gICAgaWYgKHMgPT09IDApIHtcbiAgICAgIHIgPSBnID0gYiA9IGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGh1ZTJyZ2IgPSAocDogbnVtYmVyLCBxOiBudW1iZXIsIHQ6IG51bWJlcikgPT4ge1xuICAgICAgICBpZiAodCA8IDApIHQgKz0gMTtcbiAgICAgICAgaWYgKHQgPiAxKSB0IC09IDE7XG4gICAgICAgIGlmICh0IDwgMSAvIDYpIHJldHVybiBwICsgKHEgLSBwKSAqIDYgKiB0O1xuICAgICAgICBpZiAodCA8IDEgLyAyKSByZXR1cm4gcTtcbiAgICAgICAgaWYgKHQgPCAyIC8gMykgcmV0dXJuIHAgKyAocSAtIHApICogKDIgLyAzIC0gdCkgKiA2O1xuICAgICAgICByZXR1cm4gcDtcbiAgICAgIH07XG4gICAgICBjb25zdCBxID0gbCA8IDAuNSA/IGwgKiAoMSArIHMpIDogbCArIHMgLSBsICogcztcbiAgICAgIGNvbnN0IHAgPSAyICogbCAtIHE7XG4gICAgICByID0gaHVlMnJnYihwLCBxLCBoICsgMSAvIDMpO1xuICAgICAgZyA9IGh1ZTJyZ2IocCwgcSwgaCk7XG4gICAgICBiID0gaHVlMnJnYihwLCBxLCBoIC0gMSAvIDMpO1xuICAgIH1cbiAgICByZXR1cm4gW01hdGgucm91bmQociAqIDI1NSksIE1hdGgucm91bmQoZyAqIDI1NSksIE1hdGgucm91bmQoYiAqIDI1NSldIGFzIFJHQkNvbG9yO1xuICB9XG5cbiAgLy8gSGFuZGxlIHJnYigpIGZvcm1hdFxuICBjb25zdCByZ2JNYXRjaCA9IGNvbG9yLm1hdGNoKC9yZ2JcXChcXHMqKFxcZCspXFxzKixcXHMqKFxcZCspXFxzKixcXHMqKFxcZCspXFxzKlxcKS8pO1xuICBpZiAocmdiTWF0Y2gpIHtcbiAgICByZXR1cm4gW1xuICAgICAgcGFyc2VJbnQocmdiTWF0Y2hbMV0sIDEwKSxcbiAgICAgIHBhcnNlSW50KHJnYk1hdGNoWzJdLCAxMCksXG4gICAgICBwYXJzZUludChyZ2JNYXRjaFszXSwgMTApXG4gICAgXSBhcyBSR0JDb2xvcjtcbiAgfVxuXG4gIC8vIEhhbmRsZSBoZXggZm9ybWF0XG4gIGNvbnN0IGhleE1hdGNoID0gY29sb3IubWF0Y2goL14jKFswLTlhLWZdezZ9KSQvaSk7XG4gIGlmIChoZXhNYXRjaCkge1xuICAgIGNvbnN0IGhleCA9IGhleE1hdGNoWzFdO1xuICAgIHJldHVybiBbXG4gICAgICBwYXJzZUludChoZXguc2xpY2UoMCwgMiksIDE2KSxcbiAgICAgIHBhcnNlSW50KGhleC5zbGljZSgyLCA0KSwgMTYpLFxuICAgICAgcGFyc2VJbnQoaGV4LnNsaWNlKDQsIDYpLCAxNilcbiAgICBdIGFzIFJHQkNvbG9yO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGZpbmRGaXJzdExheWVyQnlHcm91cChsYXllcnM6IGFueVtdLCBsYXllckdyb3VwczogTGF5ZXJHcm91cFtdLCBncm91cFNsdWc6IHN0cmluZykge1xuICBjb25zdCBsYXllckdyb3VwID0gbGF5ZXJHcm91cHMuZmluZChncm91cCA9PiBncm91cC5zbHVnID09PSBncm91cFNsdWcpO1xuICBpZiAoIWxheWVyR3JvdXApIHJldHVybiBudWxsO1xuICByZXR1cm4gbGF5ZXJzLmZpbmQobGF5ZXIgPT4gbGF5ZXJHcm91cC5maWx0ZXIobGF5ZXIpKTtcbn1cblxuZnVuY3Rpb24gZmluZEJhY2tncm91bmRDb2xvcihzdHlsZTogYW55KTogUkdCQ29sb3IgfCBudWxsIHtcbiAgbGV0IGZvdW5kID0gc3R5bGUubGF5ZXJzLmZpbmQoKGw6IGFueSkgPT4gbC5pZCA9PT0gJ2JhY2tncm91bmQnIHx8IGwuaWQgPT09ICdsYW5kJyk7XG4gIGZvdW5kID0gZm91bmQgfHwgc3R5bGUubGF5ZXJzLmZpbmQoKGw6IGFueSkgPT4gbC50eXBlID09PSAnYmFja2dyb3VuZCcpO1xuICByZXR1cm4gY29sb3JTdHJpbmdUb1JHQihnZXRQYWludENvbG9yKGZvdW5kPy5wYWludD8uWydiYWNrZ3JvdW5kLWNvbG9yJ10pKTtcbn1cblxuZnVuY3Rpb24gZmluZFdhdGVyQ29sb3Ioc3R5bGU6IGFueSwgbGF5ZXJHcm91cHM6IExheWVyR3JvdXBbXSk6IFJHQkNvbG9yIHwgbnVsbCB7XG4gIGNvbnN0IGZvdW5kID1cbiAgICBzdHlsZS5sYXllcnMuZmluZCgobDogYW55KSA9PiBsLmlkID09PSAnd2F0ZXInKSB8fFxuICAgIGZpbmRGaXJzdExheWVyQnlHcm91cChzdHlsZS5sYXllcnMsIGxheWVyR3JvdXBzLCAnd2F0ZXInKTtcbiAgcmV0dXJuIGNvbG9yU3RyaW5nVG9SR0IoZm91bmQ/LnBhaW50Py5bJ2ZpbGwtY29sb3InXSk7XG59XG5cbmZ1bmN0aW9uIGZpbmRBZG1pbkNvbG9yKHN0eWxlOiBhbnksIGxheWVyR3JvdXBzOiBMYXllckdyb3VwW10pOiBSR0JDb2xvciB8IG51bGwge1xuICBjb25zdCBib3JkZXJMYXllcnMgPVxuICAgIHN0eWxlLmxheWVycy5maW5kKChseXI6IGFueSkgPT4gbHlyLmlkID09PSAnYWRtaW4tMy00LWJvdW5kYXJpZXMnKSB8fFxuICAgIGZpbmRGaXJzdExheWVyQnlHcm91cChzdHlsZS5sYXllcnMsIGxheWVyR3JvdXBzLCAnYm9yZGVyJyk7XG4gIHJldHVybiBjb2xvclN0cmluZ1RvUkdCKGJvcmRlckxheWVycz8ucGFpbnQ/LlsnbGluZS1jb2xvciddKTtcbn1cblxuZnVuY3Rpb24gZmluZExhYmVsQ29sb3Ioc3R5bGU6IGFueSwgbGF5ZXJHcm91cHM6IExheWVyR3JvdXBbXSk6IFJHQkNvbG9yIHwgbnVsbCB7XG4gIGxldCBsYWJlbExheWVyID0gc3R5bGUubGF5ZXJzLmZpbmQoXG4gICAgKGx5cjogYW55KSA9PiBseXIuaWQgPT09ICdjb3VudHJ5LWxhYmVsLWxnJyAmJiBseXIudHlwZSA9PT0gJ3N5bWJvbCdcbiAgKTtcbiAgbGFiZWxMYXllciA9XG4gICAgbGFiZWxMYXllciB8fFxuICAgIHN0eWxlLmxheWVycy5maW5kKChseXI6IGFueSkgPT4gbHlyLmlkID09PSAnY291bnRyeS1sYWJlbCcgJiYgbHlyLnR5cGUgPT09ICdzeW1ib2wnKTtcbiAgbGFiZWxMYXllciA9IGxhYmVsTGF5ZXIgfHwgZmluZEZpcnN0TGF5ZXJCeUdyb3VwKHN0eWxlLmxheWVycywgbGF5ZXJHcm91cHMsICdsYWJlbCcpO1xuICByZXR1cm4gY29sb3JTdHJpbmdUb1JHQihsYWJlbExheWVyPy5wYWludD8uWyd0ZXh0LWNvbG9yJ10pO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0QmFzZW1hcENvbG9ycyA9IChcbiAgbWFwU3R5bGU6IFBhcnRpYWw8e3N0eWxlOiBhbnk7IGxheWVyR3JvdXBzOiBMYXllckdyb3VwW119PlxuKToge1xuICBiYWNrZ3JvdW5kRmlsbENvbG9yOiBSR0JDb2xvcjtcbiAgYmFzZW1hcFdhdGVyRmlsbENvbG9yOiBSR0JDb2xvcjtcbiAgYmFzZW1hcEFkbWluTGluZUNvbG9yOiBSR0JDb2xvcjtcbiAgYmFzZW1hcExhYmVsQ29sb3I6IFJHQkNvbG9yO1xufSA9PiB7XG4gIGNvbnN0IHtzdHlsZTogc3R5bGVKc29uID0ge2xheWVyczogW119LCBsYXllckdyb3VwcyA9IFtdfSA9IG1hcFN0eWxlO1xuXG4gIHJldHVybiB7XG4gICAgYmFja2dyb3VuZEZpbGxDb2xvcjpcbiAgICAgIGZpbmRCYWNrZ3JvdW5kQ29sb3Ioc3R5bGVKc29uKSA/PyBERUZBVUxUX0JBU0VNQVBfQ09MT1IuYmFja2dyb3VuZEZpbGxDb2xvcixcbiAgICBiYXNlbWFwV2F0ZXJGaWxsQ29sb3I6XG4gICAgICBmaW5kV2F0ZXJDb2xvcihzdHlsZUpzb24sIGxheWVyR3JvdXBzKSA/PyBERUZBVUxUX0JBU0VNQVBfQ09MT1IuYmFzZW1hcFdhdGVyRmlsbENvbG9yLFxuICAgIGJhc2VtYXBBZG1pbkxpbmVDb2xvcjpcbiAgICAgIGZpbmRBZG1pbkNvbG9yKHN0eWxlSnNvbiwgbGF5ZXJHcm91cHMpID8/IERFRkFVTFRfQkFTRU1BUF9DT0xPUi5iYXNlbWFwQWRtaW5MaW5lQ29sb3IsXG4gICAgYmFzZW1hcExhYmVsQ29sb3I6XG4gICAgICBmaW5kTGFiZWxDb2xvcihzdHlsZUpzb24sIGxheWVyR3JvdXBzKSA/PyBERUZBVUxUX0JBU0VNQVBfQ09MT1IuYmFzZW1hcExhYmVsQ29sb3JcbiAgfTtcbn07XG5cbi8vIFByZWRlZmluZWQgY29sb3Igc2NoZW1lcyBmb3Igd2VsbC1rbm93biBiYXNlbWFwIHN0eWxlc1xuY29uc3QgS05PV05fU1RZTEVfQ09MT1JTOiBSZWNvcmQ8XG4gIHN0cmluZyxcbiAge1xuICAgIGJhY2tncm91bmRGaWxsQ29sb3I6IFJHQkNvbG9yO1xuICAgIGJhc2VtYXBXYXRlckZpbGxDb2xvcjogUkdCQ29sb3I7XG4gICAgYmFzZW1hcEFkbWluTGluZUNvbG9yOiBSR0JDb2xvcjtcbiAgICBiYXNlbWFwTGFiZWxDb2xvcjogUkdCQ29sb3I7XG4gIH1cbj4gPSB7XG4gIGRhcms6IHtcbiAgICBiYWNrZ3JvdW5kRmlsbENvbG9yOiBbMTUsIDE1LCAxNV0sXG4gICAgYmFzZW1hcFdhdGVyRmlsbENvbG9yOiBbMTAsIDIwLCAzNV0sXG4gICAgYmFzZW1hcEFkbWluTGluZUNvbG9yOiBbNjAsIDYwLCA4MF0sXG4gICAgYmFzZW1hcExhYmVsQ29sb3I6IFsxNTAsIDE1MCwgMTUwXVxuICB9LFxuICAnZGFyay1tYXR0ZXInOiB7XG4gICAgYmFja2dyb3VuZEZpbGxDb2xvcjogWzE4LCAxOCwgMThdLFxuICAgIGJhc2VtYXBXYXRlckZpbGxDb2xvcjogWzE0LCAxOSwgMjldLFxuICAgIGJhc2VtYXBBZG1pbkxpbmVDb2xvcjogWzUwLCA1MCwgNjBdLFxuICAgIGJhc2VtYXBMYWJlbENvbG9yOiBbMTMwLCAxMzAsIDEzMF1cbiAgfSxcbiAgbGlnaHQ6IHtcbiAgICBiYWNrZ3JvdW5kRmlsbENvbG9yOiBbMjM1LCAyMzMsIDIyOF0sXG4gICAgYmFzZW1hcFdhdGVyRmlsbENvbG9yOiBbMTcwLCAyMTEsIDIyM10sXG4gICAgYmFzZW1hcEFkbWluTGluZUNvbG9yOiBbMTgwLCAxNzUsIDE3MF0sXG4gICAgYmFzZW1hcExhYmVsQ29sb3I6IFs4MCwgODAsIDgwXVxuICB9LFxuICBwb3NpdHJvbjoge1xuICAgIGJhY2tncm91bmRGaWxsQ29sb3I6IFsyNDIsIDIzOSwgMjMzXSxcbiAgICBiYXNlbWFwV2F0ZXJGaWxsQ29sb3I6IFsxNzQsIDIwOSwgMjIwXSxcbiAgICBiYXNlbWFwQWRtaW5MaW5lQ29sb3I6IFsxOTAsIDE4NSwgMTgwXSxcbiAgICBiYXNlbWFwTGFiZWxDb2xvcjogWzkwLCA5MCwgOTBdXG4gIH0sXG4gIHZveWFnZXI6IHtcbiAgICBiYWNrZ3JvdW5kRmlsbENvbG9yOiBbMjM0LCAyMjksIDIyMF0sXG4gICAgYmFzZW1hcFdhdGVyRmlsbENvbG9yOiBbMTcwLCAyMTEsIDIyM10sXG4gICAgYmFzZW1hcEFkbWluTGluZUNvbG9yOiBbMTgwLCAxNzAsIDE2MF0sXG4gICAgYmFzZW1hcExhYmVsQ29sb3I6IFs3MCwgNzAsIDcwXVxuICB9LFxuICBtdXRlZDoge1xuICAgIGJhY2tncm91bmRGaWxsQ29sb3I6IFsyMjUsIDIyNSwgMjE4XSxcbiAgICBiYXNlbWFwV2F0ZXJGaWxsQ29sb3I6IFsxODAsIDIxMCwgMjIwXSxcbiAgICBiYXNlbWFwQWRtaW5MaW5lQ29sb3I6IFsxNzAsIDE2NSwgMTYwXSxcbiAgICBiYXNlbWFwTGFiZWxDb2xvcjogWzkwLCA5MCwgOTBdXG4gIH0sXG4gIG11dGVkX25pZ2h0OiB7XG4gICAgYmFja2dyb3VuZEZpbGxDb2xvcjogWzIyLCAyNiwgMzBdLFxuICAgIGJhc2VtYXBXYXRlckZpbGxDb2xvcjogWzE1LCAyNSwgNDBdLFxuICAgIGJhc2VtYXBBZG1pbkxpbmVDb2xvcjogWzU1LCA2MCwgNzBdLFxuICAgIGJhc2VtYXBMYWJlbENvbG9yOiBbMTQwLCAxNDAsIDE0MF1cbiAgfVxufTtcblxuLyoqXG4gKiBHZXQgYmFzZW1hcCBjb2xvcnMgZWl0aGVyIGZyb20gdGhlIHN0eWxlIEpTT04gb3IgZnJvbSBrbm93biBzdHlsZSBwcmVzZXRzLlxuICogRmFsbHMgYmFjayB0byBkZWZhdWx0IGRhcmsgY29sb3JzIGlmIHN0eWxlIGlzIHVua25vd24gYW5kIG5vIEpTT04gaXMgYXZhaWxhYmxlLlxuICovXG5leHBvcnQgY29uc3QgZ2V0QmFzZW1hcENvbG9yc0ZvclN0eWxlID0gKFxuICBzdHlsZVR5cGU6IHN0cmluZyxcbiAgbWFwU3R5bGU/OiBQYXJ0aWFsPHtzdHlsZTogYW55OyBsYXllckdyb3VwczogTGF5ZXJHcm91cFtdfT5cbik6IHtcbiAgYmFja2dyb3VuZEZpbGxDb2xvcjogUkdCQ29sb3I7XG4gIGJhc2VtYXBXYXRlckZpbGxDb2xvcjogUkdCQ29sb3I7XG4gIGJhc2VtYXBBZG1pbkxpbmVDb2xvcjogUkdCQ29sb3I7XG4gIGJhc2VtYXBMYWJlbENvbG9yOiBSR0JDb2xvcjtcbn0gPT4ge1xuICAvLyBUcnkgdG8gZXh0cmFjdCBmcm9tIHN0eWxlIEpTT04gZmlyc3RcbiAgaWYgKG1hcFN0eWxlPy5zdHlsZT8ubGF5ZXJzPy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZ2V0QmFzZW1hcENvbG9ycyhtYXBTdHlsZSk7XG4gIH1cbiAgLy8gRmFsbCBiYWNrIHRvIGtub3duIHN0eWxlIHByZXNldHNcbiAgaWYgKEtOT1dOX1NUWUxFX0NPTE9SU1tzdHlsZVR5cGVdKSB7XG4gICAgcmV0dXJuIEtOT1dOX1NUWUxFX0NPTE9SU1tzdHlsZVR5cGVdO1xuICB9XG4gIC8vIERlZmF1bHQgZGFyayBjb2xvcnNcbiAgcmV0dXJuIHtcbiAgICBiYWNrZ3JvdW5kRmlsbENvbG9yOiBERUZBVUxUX0JBU0VNQVBfQ09MT1IuYmFja2dyb3VuZEZpbGxDb2xvcixcbiAgICBiYXNlbWFwV2F0ZXJGaWxsQ29sb3I6IERFRkFVTFRfQkFTRU1BUF9DT0xPUi5iYXNlbWFwV2F0ZXJGaWxsQ29sb3IsXG4gICAgYmFzZW1hcEFkbWluTGluZUNvbG9yOiBERUZBVUxUX0JBU0VNQVBfQ09MT1IuYmFzZW1hcEFkbWluTGluZUNvbG9yLFxuICAgIGJhc2VtYXBMYWJlbENvbG9yOiBERUZBVUxUX0JBU0VNQVBfQ09MT1IuYmFzZW1hcExhYmVsQ29sb3JcbiAgfTtcbn07XG5cbi8qKlxuICogQ2xlYXIgY29sb3IgKGJhY2tncm91bmQgYXJvdW5kIHRoZSBnbG9iZSkgZm9yIGdsb2JlIG1vZGUsIGluIFJHQkEgMC0yNTUgYXNcbiAqIGV4cGVjdGVkIGJ5IGRlY2suZ2wncyBWaWV3IGBjbGVhckNvbG9yYCBwcm9wIChkZWNrLmdsID49IDkgbm8gbG9uZ2VyIHN1cHBvcnRzXG4gKiB0aGUgZ2xvYmFsIGBwYXJhbWV0ZXJzLmNsZWFyQ29sb3JgOyBpdCBtdXN0IGJlIHNldCBwZXItdmlldyB3aXRoIGBjbGVhcjogdHJ1ZWApLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2xvYmVDbGVhckNvbG9yKFxuICBiYWNrZ3JvdW5kQ29sb3I/OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gfCBudW1iZXJbXVxuKTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0ge1xuICBpZiAoYmFja2dyb3VuZENvbG9yKSB7XG4gICAgcmV0dXJuIFtiYWNrZ3JvdW5kQ29sb3JbMF0sIGJhY2tncm91bmRDb2xvclsxXSwgYmFja2dyb3VuZENvbG9yWzJdLCAyNTVdO1xuICB9XG4gIC8vIERlZmF1bHQgbWF0Y2hlcyB0aGUgcHJldmlvdXMgaGFyZGNvZGVkIGNsZWFyIGNvbG9yIFswLjAxNSwgMC4wMzUsIDAuMDY1XSBpbiAwLTEgc3BhY2UuXG4gIHJldHVybiBbNCwgOSwgMTcsIDI1NV07XG59XG5cbmNvbnN0IElOVklTSUJMRV9DT0xPUjogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPSBbMCwgMCwgMCwgMF07XG5cbmNvbnN0IEJBU0VNQVBfTVZUX1BBUkFNRVRFUlMgPSB7XG4gIC8vIE9jY2x1ZGUgdGhlIGZhciBzaWRlIG9mIHRoZSBnbG9iZSB2aWEgdGhlIERFUFRIIERJU0sgKGdldEdsb2JlRGVwdGhEaXNrTGF5ZXIpXG4gIC8vIHJhdGhlciB0aGFuIGJhY2stZmFjZSBjdWxsaW5nLiBHbG9iZSBtb2RlIHNldHMgYSBnbG9iYWwgYGN1bGw6IHRydWVgIGZvciB0aGVcbiAgLy8gb3BhcXVlIHNwaGVyZSBzdXJmYWNlLCBidXQgYmFjay1mYWNlIGN1bGxpbmcgcmVsaWVzIG9uIHN0YWJsZSB0cmlhbmdsZVxuICAvLyB3aW5kaW5nIOKAlCBhbmQgZGVjay5nbCA5J3MgZ2xvYmUgcHJvamVjdGlvbiBsb3NlcyBwcmVjaXNpb24gYXQgaGlnaCB6b29tXG4gIC8vIChmbG9hdDMyKSwgZmxpcHBpbmcgdGhlIHdpbmRpbmcgb2YgdGhlIHNtYWxsIGFkbWluL3dhdGVyIHRyaWFuZ2xlcyBzbyB0aGV5XG4gIC8vIGdldCB3cm9uZ2x5IGN1bGxlZCBhbmQgdGhlIGdlb21ldHJ5IHZhbmlzaGVzIHBhc3Qgfnpvb20gMTIgKHlvdSB0aGVuIHNlZVxuICAvLyB0aHJvdWdoIHRvIHRoZSBmYXIgc2lkZSAvIFwiZGlmZmVyZW50IGdlb21ldHJ5XCIpLiBEZXB0aCB0ZXN0aW5nIGFnYWluc3QgdGhlIGRpc2tcbiAgLy8gaXMgYSBwcmVjaXNpb24tcm9idXN0IG9jY2x1ZGVyIHRoYXQgd29ya3MgYXQgYW55IHpvb20sIHNvOlxuICAvLyAgIC0gY3VsbDogZmFsc2UgICAgIOKGkiBkb24ndCB3aW5kaW5nLWN1bGwgdGhlIG5lYXItc2lkZSBnZW9tZXRyeVxuICAvLyAgIC0gZGVwdGhUZXN0OiB0cnVlIOKGkiBmYXItc2lkZSBnZW9tZXRyeSAoYmVoaW5kIHRoZSBkaXNrKSBmYWlscyBkZXB0aCwgaGlkZGVuXG4gIC8vICAgLSBkZXB0aE1hc2s6IGZhbHNlIOKGkiBkb24ndCB3cml0ZSBkZXB0aCAoYXZvaWQgc2VsZiB6LWZpZ2h0aW5nIG9uIHRoZSBzaGVsbClcbiAgLy8gUmFzdGVyIHRpbGVzIGFyZSB1bmFmZmVjdGVkICh0aGVpciA0LWNvcm5lciBxdWFkcyBrZWVwIHN0YWJsZSB3aW5kaW5nKSwgd2hpY2hcbiAgLy8gaXMgd2h5IHNhdGVsbGl0ZSBhbHJlYWR5IHpvb21zIHRvIG1heCBjbGVhbmx5LiBMYWJlbHMgZGlzYWJsZSBjdWxsIGZvciB0aGVcbiAgLy8gc2FtZSByZWFzb24gKHNlZSBtdnQtbGFiZWwtbGF5ZXIudHMpLlxuICBkZXB0aFRlc3Q6IHRydWUsXG4gIGRlcHRoTWFzazogZmFsc2UsXG4gIGN1bGw6IGZhbHNlXG59O1xuXG4vLyBkZWNrLmdsIDkncyBnbG9iZSBzZWxlY3RzIGZpbmVyIHRpbGVzIHRoYW4gbmVlZGVkIGZvciBhIGdpdmVuIHZpZXcgKGl0c1xuLy8gR2xvYmVWaWV3cG9ydCBzY2FsZSBpcyB+M3ggc21hbGxlciB0aGFuIHRoZSBlcXVpdmFsZW50IG1lcmNhdG9yIHpvb20pLCBzbyBiaWFzXG4vLyB2ZWN0b3IgdGlsZSBzZWxlY3Rpb24gY29hcnNlciB0byBrZWVwIHRoZSB0aWxlIGNvdW50IOKAlCBhbmQgdGh1cyBwZXJmb3JtYW5jZSDigJRcbi8vIGluIGNoZWNrLiBUaGlzIHRyYWRlcyBhIGxpdHRsZSBkZXRhaWwgZm9yIGZhciBmZXdlciB0aWxlczsgbWFrZSBpdCBsZXNzIG5lZ2F0aXZlXG4vLyAodG93YXJkIDApIGZvciBzaGFycGVyIGRldGFpbCwgb3IgbW9yZSBuZWdhdGl2ZSBmb3IgbW9yZSBwZXJmLlxuLy8gVGhlc2UgYXJlICpiYXNlKiBvZmZzZXRzOiBnbG9iZUxhdGl0dWRlWm9vbUNvbXBlbnNhdGlvbiBpcyBhZGRlZCBvbiB0b3AgYXQgZHJhd1xuLy8gdGltZSwgc28gdGhlIGVmZmVjdGl2ZSB6b29tT2Zmc2V0IG9ubHkgZXF1YWxzIHRoZXNlIGV4YWN0IHZhbHVlcyBhdCB0aGUgZXF1YXRvci5cbi8vIFNhdGVsbGl0ZSByYXN0ZXIgdXNlcyBiYXNlIDAg4oCUIGl0IGRvZXNuJ3QgbmVlZCB0aGUgdmVjdG9yIGJpYXMgKGEgY29hcnNlciByYXN0ZXJcbi8vIHRpbGUganVzdCBsb29rcyBzb2Z0ZXIgcmF0aGVyIHRoYW4gZHJvcHBpbmcgZmVhdHVyZXMpLlxuY29uc3QgTUFQQk9YX0dMT0JFX1ZFQ1RPUl9aT09NX09GRlNFVCA9IC0yO1xuY29uc3QgQ0FSVE9fR0xPQkVfVkVDVE9SX1pPT01fT0ZGU0VUID0gLTI7XG5jb25zdCBHTE9CRV9TQVRFTExJVEVfWk9PTV9PRkZTRVQgPSAwO1xuXG4vLyBXaG9sZS13b3JsZCB0aWxlIGV4dGVudCAoV2ViIE1lcmNhdG9yIGxhdGl0dWRlIGxpbWl0KS4gUmVxdWlyZWQgd2hlbmV2ZXIgYVxuLy8gbmVnYXRpdmUgYHpvb21PZmZzZXRgIGlzIHVzZWQ6IGRlY2sncyBgZ2V0VGlsZUluZGljZXNgIHJldHVybnMgTk8gdGlsZXMgd2hlblxuLy8gdGhlIHRhcmdldCB6b29tIGRyb3BzIGJlbG93IGBtaW5ab29tYCAqdW5sZXNzKiBhbiBgZXh0ZW50YCBpcyBzZXQgKGluIHdoaWNoXG4vLyBjYXNlIGl0IGNsYW1wcyB0byBgbWluWm9vbWAgaW5zdGVhZCkuIFdpdGhvdXQgdGhpcywgem9vbWluZyBvdXQgb3IgcGFubmluZ1xuLy8gdG93YXJkIHRoZSBwb2xlcyAod2hlcmUgZGVjayA5J3MgZ2xvYmUgY29udHJvbGxlciBsb3dlcnMgdGhlIGVmZmVjdGl2ZSB6b29tKVxuLy8gbWFrZXMgdGhlIHdob2xlIGdsb2JlIGJhc2VtYXAgZGlzYXBwZWFyLlxuY29uc3QgR0xPQkVfVElMRV9FWFRFTlQ6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdID0gW1xuICAtMTgwLCAtODUuMDUxMTI5LCAxODAsIDg1LjA1MTEyOVxuXTtcblxuLy8gTWF4ICpuYXRpdmUqIHpvb20gb2YgZWFjaCB2ZWN0b3IgdGlsZSBzb3VyY2UuIFNldCB0aGlzIChub3QgYW4gYXJiaXRyYXJpbHlcbi8vIGhpZ2ggbnVtYmVyKSBzbyBkZWNrIG92ZXJ6b29tcyDigJQgaS5lLiBrZWVwcyByZW5kZXJpbmcgdGhlIGRlZXBlc3QgcmVhbCB0aWxlXG4vLyB3aGVuIHRoZSB2aWV3IHpvb21zIHBhc3QgaXQg4oCUIGluc3RlYWQgb2YgcmVxdWVzdGluZyB0aWxlcyB0aGF0IGRvbid0IGV4aXN0XG4vLyBhbmQgNDA0ICh3aGljaCBzaG93cyB1cCBhcyBlbXB0eSByZWN0YW5nbGVzKS4gVGhlIHJhdyBgLnZlY3Rvci5wYmZgIC9gLm12dGBcbi8vIGVuZHBvaW50cyBkbyBOT1QgYXV0by1vdmVyem9vbSB0aGUgd2F5IE1hcGJveCBHTCBkb2VzLlxuLy8gICAtIG1hcGJveC1zdHJlZXRzLXY4IGhhcyBkYXRhIHVwIHRvIHoxNlxuLy8gICAtIENBUlRPIGNhcnRvLnN0cmVldHMgdjEgaGFzIGRhdGEgdXAgdG8gejE0XG5jb25zdCBNQVBCT1hfVkVDVE9SX01BWF9EQVRBX1pPT00gPSAxNjtcbmNvbnN0IENBUlRPX1ZFQ1RPUl9NQVhfREFUQV9aT09NID0gMTQ7XG5cbi8qKlxuICogZGVjay5nbCA5J3MgZ2xvYmUgY291cGxlcyB6b29tIHRvIGxhdGl0dWRlIHZpYSBgem9vbUFkanVzdGAgKHNlZVxuICogZ2xvYmUtdmlld3BvcnQuanMpOiBgc2NhbGUgPSAyXih6b29tIC0gem9vbUFkanVzdChsYXQpKWAsIGFuZCBpdHMgY29udHJvbGxlclxuICogKmxvd2VycyogdGhlIHN0b3JlZCBgem9vbWAgYXMgeW91IHBhbiB0b3dhcmQgdGhlIHBvbGVzIHRvIGtlZXAgdGhlIGdsb2JlJ3NcbiAqIG9uLXNjcmVlbiBzaXplIGNvbnN0YW50LiBUaWxlIExPRCwgaG93ZXZlciwgaXMgc2VsZWN0ZWQgZnJvbSB0aGUgcmF3IGB6b29tYCxcbiAqIHNvIHJvdGF0aW5nIHRvd2FyZCBhIHBvbGUgc2lsZW50bHkgZHJvcHMgdGhlIExPRCBhbmQgdGhpbnMgb3V0IGxhYmVscy5cbiAqIFJlcGxpY2F0ZWQgZnJvbSBgQGRlY2suZ2wvY29yZWAgZ2xvYmUtdmlld3BvcnQuanMgYHpvb21BZGp1c3RgLlxuICovXG5mdW5jdGlvbiB6b29tQWRqdXN0KGxhdGl0dWRlOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5sb2cyKE1hdGguUEkgKiBNYXRoLmNvcygobGF0aXR1ZGUgKiBNYXRoLlBJKSAvIDE4MCkpO1xufVxuXG4vKipcbiAqIExhdGl0dWRlIGNvbXBlbnNhdGlvbiB0byBhZGQgdG8gYSBnbG9iZSB0aWxlIGxheWVyJ3MgYHpvb21PZmZzZXRgLCBzbyB0aWxlIExPRFxuICogdHJhY2tzIHRoZSAqdmlzdWFsKiAob24tc2NyZWVuKSBzY2FsZSBpbnN0ZWFkIG9mIHRoZSBsYXRpdHVkZS1hZGp1c3RlZCBtZXJjYXRvclxuICogem9vbS4gVGhpcyBjYW5jZWxzIHRoZSBwYW4taW5kdWNlZCB6b29tIGRyb3AsIGtlZXBpbmcgdGlsZSBkZXRhaWwvbGFiZWxzXG4gKiBjb25zdGFudCB3aGlsZSByb3RhdGluZyB0b3dhcmQgdGhlIHBvbGVzLlxuICovXG5mdW5jdGlvbiBnbG9iZUxhdGl0dWRlWm9vbUNvbXBlbnNhdGlvbihsYXRpdHVkZT86IG51bWJlcik6IG51bWJlciB7XG4gIGlmIChsYXRpdHVkZSA9PSBudWxsIHx8ICFOdW1iZXIuaXNGaW5pdGUobGF0aXR1ZGUpKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgLy8gQ2xhbXAgYXdheSBmcm9tIHRoZSBwb2xlcyB0byBhdm9pZCBsb2cyKDApID0gLUluZmluaXR5IGF0IHxsYXR8ID0gOTAuXG4gIGNvbnN0IGNsYW1wZWQgPSBNYXRoLm1heCgtODUsIE1hdGgubWluKDg1LCBsYXRpdHVkZSkpO1xuICByZXR1cm4gem9vbUFkanVzdCgwKSAtIHpvb21BZGp1c3QoY2xhbXBlZCk7XG59XG5cbi8qKlxuICogR2xvYmUgYmFzZW1hcCB0aWxlIHByb3ZpZGVyLlxuICpcbiAqIC0gYG1hcGJveGAgdXNlcyBNYXBib3ggdmVjdG9yL3Jhc3RlciB0aWxlcyBhbmQgcmVxdWlyZXMgYW4gYWNjZXNzIHRva2VuLlxuICogLSBgY2FydG9gIHVzZXMgQ0FSVE8ncyBmcmVlIE9wZW5NYXBUaWxlcyB2ZWN0b3IgdGlsZXMgKyBFc3JpIFdvcmxkIEltYWdlcnlcbiAqICAgcmFzdGVyLCBhbmQgbmVlZHMgbm8gdG9rZW4uIFVzZWQgYXMgYW4gYXV0b21hdGljIGZhbGxiYWNrIHdoZW4gbm8gTWFwYm94XG4gKiAgIHRva2VuIGlzIGF2YWlsYWJsZSAoZS5nLiBNYXBMaWJyZSAvIENBUlRPIGJhc2VtYXAgc2V0dXBzKSwgc28gdGhlIGdsb2JlXG4gKiAgIGJhc2VtYXAgc3RpbGwgcmVuZGVycyBpbnN0ZWFkIG9mIHNob3dpbmcgYSBzb2xpZC1jb2xvciBzcGhlcmUuXG4gKi9cbmV4cG9ydCB0eXBlIEdsb2JlQmFzZW1hcFByb3ZpZGVyID0gJ21hcGJveCcgfCAnY2FydG8nO1xuXG4vKipcbiAqIFJlc29sdmUgd2hpY2ggZ2xvYmUgYmFzZW1hcCB0aWxlIHByb3ZpZGVyIHRvIHVzZS5cbiAqXG4gKiBUaGUgZ2xvYmUgc2hvdWxkIGZvbGxvdyB0aGUgKnNlbGVjdGVkIGJhc2VtYXAgc3R5bGUncyogcmVuZGVyaW5nIGxpYnJhcnkgc29cbiAqIGl0IHN0YXlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgZmxhdCAyRCBtYXA6IGEgTWFwTGlicmUvQ0FSVE8gc3R5bGUgdXNlcyB0aGVcbiAqIGZyZWUgQ0FSVE8gdGlsZXMgKGV2ZW4gd2hlbiBhIE1hcGJveCB0b2tlbiBpcyBhdmFpbGFibGUpLCBhbmQgYSBNYXBib3ggc3R5bGVcbiAqIHVzZXMgTWFwYm94IHRpbGVzLiBBIE1hcGJveCBzdHlsZSB3aXRoIG5vIHRva2VuIGZhbGxzIGJhY2sgdG8gQ0FSVE8gc28gdGhlXG4gKiBnbG9iZSBzdGlsbCByZW5kZXJzIGluc3RlYWQgb2Ygc2hvd2luZyBhIGJhcmUgY29sb3JlZCBzcGhlcmUuXG4gKlxuICogQHBhcmFtIGJhc2VNYXBMaWJyYXJ5IHRoZSBzZWxlY3RlZCBzdHlsZSdzIGxpYnJhcnkgKCdtYXBib3gnIHwgJ21hcGxpYnJlJyksXG4gKiAgIGUuZy4gZnJvbSBgZ2V0QmFzZU1hcExpYnJhcnkoY3VycmVudFN0eWxlKWAuXG4gKi9cbmV4cG9ydCBjb25zdCByZXNvbHZlR2xvYmVCYXNlbWFwUHJvdmlkZXIgPSAoXG4gIGJhc2VNYXBMaWJyYXJ5OiAnbWFwYm94JyB8ICdtYXBsaWJyZScgfCB1bmRlZmluZWQsXG4gIG1hcGJveEFwaUFjY2Vzc1Rva2VuPzogc3RyaW5nXG4pOiBHbG9iZUJhc2VtYXBQcm92aWRlciA9PiB7XG4gIGlmIChiYXNlTWFwTGlicmFyeSA9PT0gJ21hcGxpYnJlJykge1xuICAgIHJldHVybiAnY2FydG8nO1xuICB9XG4gIGlmIChiYXNlTWFwTGlicmFyeSA9PT0gJ21hcGJveCcpIHtcbiAgICByZXR1cm4gbWFwYm94QXBpQWNjZXNzVG9rZW4gPyAnbWFwYm94JyA6ICdjYXJ0byc7XG4gIH1cbiAgLy8gVW5rbm93biBsaWJyYXJ5OiBwcmVmZXIgTWFwYm94IHdoZW4gYSB0b2tlbiBleGlzdHMsIG90aGVyd2lzZSBDQVJUTy5cbiAgcmV0dXJuIG1hcGJveEFwaUFjY2Vzc1Rva2VuID8gJ21hcGJveCcgOiAnY2FydG8nO1xufTtcblxuLy8gQ0FSVE8gZnJlZSB2ZWN0b3IgdGlsZXMgKE9wZW5NYXBUaWxlcyBzY2hlbWEsIG5vIEFQSSBrZXkgcmVxdWlyZWQpLlxuY29uc3QgQ0FSVE9fVkVDVE9SX1RJTEVfVVJMUyA9IFtcbiAgJ2h0dHBzOi8vdGlsZXMtYS5iYXNlbWFwcy5jYXJ0b2Nkbi5jb20vdmVjdG9ydGlsZXMvY2FydG8uc3RyZWV0cy92MS97en0ve3h9L3t5fS5tdnQnLFxuICAnaHR0cHM6Ly90aWxlcy1iLmJhc2VtYXBzLmNhcnRvY2RuLmNvbS92ZWN0b3J0aWxlcy9jYXJ0by5zdHJlZXRzL3YxL3t6fS97eH0ve3l9Lm12dCcsXG4gICdodHRwczovL3RpbGVzLWMuYmFzZW1hcHMuY2FydG9jZG4uY29tL3ZlY3RvcnRpbGVzL2NhcnRvLnN0cmVldHMvdjEve3p9L3t4fS97eX0ubXZ0JyxcbiAgJ2h0dHBzOi8vdGlsZXMtZC5iYXNlbWFwcy5jYXJ0b2Nkbi5jb20vdmVjdG9ydGlsZXMvY2FydG8uc3RyZWV0cy92MS97en0ve3h9L3t5fS5tdnQnXG5dO1xuXG4vLyBGcmVlIHNhdGVsbGl0ZSByYXN0ZXIgZmFsbGJhY2sgKEVzcmkgV29ybGQgSW1hZ2VyeSwgbm8gQVBJIGtleSByZXF1aXJlZCkuXG5jb25zdCBFU1JJX1dPUkxEX0lNQUdFUllfVVJMID1cbiAgJ2h0dHBzOi8vc2VydmVyLmFyY2dpc29ubGluZS5jb20vQXJjR0lTL3Jlc3Qvc2VydmljZXMvV29ybGRfSW1hZ2VyeS9NYXBTZXJ2ZXIvdGlsZS97en0ve3l9L3t4fSc7XG5cbi8qKlxuICogTWFwcyBhIHJhdyBNVlQgc291cmNlLWxheWVyIG5hbWUgdG8gYSBub3JtYWxpemVkIHNlbWFudGljIGxheWVyIGtpbmQsIHNvIHRoZVxuICogZmlsbC9saW5lL2xhYmVsIGFjY2Vzc29ycyB3b3JrIGFjcm9zcyBib3RoIHRoZSBNYXBib3ggKGBtYXBib3gtc3RyZWV0cy12OGApXG4gKiBhbmQgQ0FSVE8vT3Blbk1hcFRpbGVzIHNjaGVtYXMuXG4gKlxuICogfCBzZW1hbnRpYyB8IG1hcGJveCAgICAgICAgfCBvcGVubWFwdGlsZXMgfFxuICogfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0gfFxuICogfCB3YXRlciAgICB8IGB3YXRlcmAgICAgICAgfCBgd2F0ZXJgICAgICAgfFxuICogfCBhZG1pbiAgICB8IGBhZG1pbmAgICAgICAgfCBgYm91bmRhcnlgICAgfFxuICogfCBsYWJlbCAgICB8IGBwbGFjZV9sYWJlbGAgfCBgcGxhY2VgICAgICAgfFxuICovXG50eXBlIEJhc2VtYXBMYXllcktpbmQgPSAnd2F0ZXInIHwgJ2FkbWluJyB8ICdsYWJlbCcgfCAnb3RoZXInO1xuXG5mdW5jdGlvbiBnZXRCYXNlbWFwTGF5ZXJLaW5kKGxheWVyTmFtZT86IHN0cmluZyk6IEJhc2VtYXBMYXllcktpbmQge1xuICBzd2l0Y2ggKGxheWVyTmFtZSkge1xuICAgIGNhc2UgJ3dhdGVyJzpcbiAgICAgIHJldHVybiAnd2F0ZXInO1xuICAgIGNhc2UgJ2FkbWluJzpcbiAgICBjYXNlICdib3VuZGFyeSc6XG4gICAgICByZXR1cm4gJ2FkbWluJztcbiAgICBjYXNlICdwbGFjZV9sYWJlbCc6XG4gICAgY2FzZSAncGxhY2UnOlxuICAgICAgcmV0dXJuICdsYWJlbCc7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAnb3RoZXInO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIEdsb2JlQXR0cmlidXRpb24gPSB7bGFiZWw6IHN0cmluZzsgaHJlZjogc3RyaW5nfTtcblxuY29uc3QgTUFQQk9YX0FUVFJJQlVUSU9OOiBHbG9iZUF0dHJpYnV0aW9uID0ge1xuICBsYWJlbDogJ8KpIE1hcGJveCcsXG4gIGhyZWY6ICdodHRwczovL3d3dy5tYXBib3guY29tL2Fib3V0L21hcHMvJ1xufTtcbmNvbnN0IE9TTV9BVFRSSUJVVElPTjogR2xvYmVBdHRyaWJ1dGlvbiA9IHtcbiAgbGFiZWw6ICfCqSBPcGVuU3RyZWV0TWFwJyxcbiAgaHJlZjogJ2h0dHBzOi8vd3d3Lm9wZW5zdHJlZXRtYXAub3JnL2NvcHlyaWdodCdcbn07XG5jb25zdCBDQVJUT19BVFRSSUJVVElPTjogR2xvYmVBdHRyaWJ1dGlvbiA9IHtcbiAgbGFiZWw6ICfCqSBDQVJUTycsXG4gIGhyZWY6ICdodHRwczovL2NhcnRvLmNvbS9hdHRyaWJ1dGlvbnMnXG59O1xuY29uc3QgRVNSSV9BVFRSSUJVVElPTjogR2xvYmVBdHRyaWJ1dGlvbiA9IHtcbiAgbGFiZWw6ICdQb3dlcmVkIGJ5IEVzcmknLFxuICBocmVmOiAnaHR0cHM6Ly93d3cuZXNyaS5jb20vJ1xufTtcblxuLyoqXG4gKiBSZXNvbHZlIHRoZSB0aWxlLXNvdXJjZSBhdHRyaWJ1dGlvbiBlbnRyaWVzIGZvciB0aGUgZ2xvYmUgYmFzZW1hcC4gZGVjay5nbFxuICogcmVuZGVycyB0aGUgZ2xvYmUgYmFzZW1hcCB0aWxlcyBpdHNlbGYgKG5vdCB0aGUgYmFzZSBNYXBsaWJyZS9NYXBib3ggbWFwKSwgc29cbiAqIHRoZSBiYXNlIG1hcCdzIGF0dHJpYnV0aW9uIG1hY2hpbmVyeSBuZXZlciBzZWVzIHRoZW0uIFRoaXMgbGV0cyB0aGUgVUkgY3JlZGl0XG4gKiB0aGUgYWN0dWFsIHRpbGUgcHJvdmlkZXIocykgaW4gZ2xvYmUgbW9kZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEdsb2JlQmFzZW1hcEF0dHJpYnV0aW9ucyA9ICh7XG4gIGdsb2JlLFxuICBtYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgbWFwU3R5bGVUeXBlLFxuICBiYXNlbWFwUHJvdmlkZXJcbn06IHtcbiAgZ2xvYmU/OiBHbG9iZTtcbiAgbWFwYm94QXBpQWNjZXNzVG9rZW4/OiBzdHJpbmc7XG4gIG1hcFN0eWxlVHlwZT86IHN0cmluZztcbiAgYmFzZW1hcFByb3ZpZGVyPzogR2xvYmVCYXNlbWFwUHJvdmlkZXI7XG59KTogR2xvYmVBdHRyaWJ1dGlvbltdID0+IHtcbiAgaWYgKCFnbG9iZT8uZW5hYmxlZCB8fCAhZ2xvYmUuY29uZmlnPy5iYXNlbWFwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgcHJvdmlkZXI6IEdsb2JlQmFzZW1hcFByb3ZpZGVyID1cbiAgICBiYXNlbWFwUHJvdmlkZXIgPz8gcmVzb2x2ZUdsb2JlQmFzZW1hcFByb3ZpZGVyKHVuZGVmaW5lZCwgbWFwYm94QXBpQWNjZXNzVG9rZW4pO1xuXG4gIGlmIChwcm92aWRlciA9PT0gJ21hcGJveCcpIHtcbiAgICByZXR1cm4gbWFwYm94QXBpQWNjZXNzVG9rZW4gPyBbTUFQQk9YX0FUVFJJQlVUSU9OLCBPU01fQVRUUklCVVRJT05dIDogW107XG4gIH1cblxuICBjb25zdCBpc1NhdGVsbGl0ZSA9IG1hcFN0eWxlVHlwZSA9PT0gJ3NhdGVsbGl0ZScgfHwgbWFwU3R5bGVUeXBlID09PSAnc2F0ZWxsaXRlLXN0cmVldCc7XG4gIC8vIENBUlRPIHZlY3RvciB0aWxlcyBhcmUgT3BlblN0cmVldE1hcC1kZXJpdmVkOyBFc3JpIGltYWdlcnkgaXMgY3JlZGl0ZWQgc2VwYXJhdGVseS5cbiAgcmV0dXJuIGlzU2F0ZWxsaXRlXG4gICAgPyBbRVNSSV9BVFRSSUJVVElPTiwgQ0FSVE9fQVRUUklCVVRJT04sIE9TTV9BVFRSSUJVVElPTl1cbiAgICA6IFtDQVJUT19BVFRSSUJVVElPTiwgT1NNX0FUVFJJQlVUSU9OXTtcbn07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5leHBvcnQgY29uc3QgZ2V0R2xvYmVCYXNlTGF5ZXJzID0gKHtcbiAgbWFwYm94QXBpQWNjZXNzVG9rZW4sXG4gIGdsb2JlLFxuICBtYXBTdHlsZVR5cGUsXG4gIGJhc2VtYXBQcm92aWRlcixcbiAgbGF0aXR1ZGUsXG4gIHpvb21cbn06IHtcbiAgbWFwYm94QXBpQWNjZXNzVG9rZW46IHN0cmluZztcbiAgZ2xvYmU6IEdsb2JlO1xuICBtYXBTdHlsZVR5cGU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBXaGljaCB0aWxlIHByb3ZpZGVyIHRvIHVzZSBmb3IgdGhlIGdsb2JlIGJhc2VtYXAuIERlZmF1bHRzIHRvIGBtYXBib3hgIHdoZW5cbiAgICogYSB0b2tlbiBpcyBwcmVzZW50LCBvdGhlcndpc2UgZmFsbHMgYmFjayB0byB0aGUgdG9rZW4tZnJlZSBgY2FydG9gIHRpbGVzLlxuICAgKi9cbiAgYmFzZW1hcFByb3ZpZGVyPzogR2xvYmVCYXNlbWFwUHJvdmlkZXI7XG4gIC8qKlxuICAgKiBDdXJyZW50IGNhbWVyYSBjZW50ZXIgbGF0aXR1ZGUuIFVzZWQgdG8ga2VlcCB0aWxlIExPRCBjb25zdGFudCB3aGlsZSByb3RhdGluZ1xuICAgKiB0b3dhcmQgdGhlIHBvbGVzIChkZWNrLmdsIDkgbG93ZXJzIHRoZSBlZmZlY3RpdmUgem9vbSBuZWFyIHRoZSBwb2xlcykuIFdoZW5cbiAgICogb21pdHRlZCwgbm8gbGF0aXR1ZGUgY29tcGVuc2F0aW9uIGlzIGFwcGxpZWQgKGVxdWF0b3IgYmVoYXZpb3IpLlxuICAgKi9cbiAgbGF0aXR1ZGU/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBDdXJyZW50IG1hcCB6b29tIGxldmVsLiBVc2VkIHRvIGZhZGUgdGhlIGF0bW9zcGhlcmUgZWZmZWN0cyBvdXQgd2hlbiB0aGUgdXNlclxuICAgKiB6b29tcyBpbiBwYXN0IGEgY2VydGFpbiB0aHJlc2hvbGQgKG1pcnJvcnMgR29vZ2xlIE1hcHMgZ2xvYmUgYmVoYXZpb3VyKS5cbiAgICovXG4gIHpvb20/OiBudW1iZXI7XG59KTogTGF5ZXJbXSA9PiB7XG4gIGNvbnN0IHtjb25maWd9ID0gZ2xvYmU7XG5cbiAgY29uc3QgaXNTYXRlbGxpdGUgPSBtYXBTdHlsZVR5cGUgPT09ICdzYXRlbGxpdGUnO1xuICBjb25zdCBpc1NhdGVsbGl0ZVN0cmVldCA9IG1hcFN0eWxlVHlwZSA9PT0gJ3NhdGVsbGl0ZS1zdHJlZXQnO1xuXG4gIGNvbnN0IGxhdFpvb21Db21wZW5zYXRpb24gPSBnbG9iZUxhdGl0dWRlWm9vbUNvbXBlbnNhdGlvbihsYXRpdHVkZSk7XG5cbiAgLy8gRmFsbCBiYWNrIHRvIHRoZSBmcmVlIENBUlRPIHRpbGVzIHdoZW5ldmVyIG5vIE1hcGJveCB0b2tlbiBpcyBhdmFpbGFibGUgc29cbiAgLy8gdGhlIGdsb2JlIGJhc2VtYXAgc3RpbGwgcmVuZGVycyAobWF0Y2hlcyBrZXBsZXIncyBkZWZhdWx0IHRva2VuLWZyZWVcbiAgLy8gTWFwTGlicmUvQ0FSVE8gYmFzZW1hcHMpLiBDYWxsZXJzIHNob3VsZCBwYXNzIGFuIGV4cGxpY2l0IGBiYXNlbWFwUHJvdmlkZXJgXG4gIC8vIChkZXJpdmVkIGZyb20gdGhlIHNlbGVjdGVkIHN0eWxlKSBzbyB0aGUgZ2xvYmUgZm9sbG93cyB0aGUgMkQgYmFzZW1hcC5cbiAgY29uc3QgcHJvdmlkZXI6IEdsb2JlQmFzZW1hcFByb3ZpZGVyID1cbiAgICBiYXNlbWFwUHJvdmlkZXIgPz8gcmVzb2x2ZUdsb2JlQmFzZW1hcFByb3ZpZGVyKHVuZGVmaW5lZCwgbWFwYm94QXBpQWNjZXNzVG9rZW4pO1xuICBjb25zdCB1c2VDYXJ0byA9IHByb3ZpZGVyID09PSAnY2FydG8nO1xuICBjb25zdCBoYXNUaWxlQWNjZXNzID0gdXNlQ2FydG8gfHwgQm9vbGVhbihtYXBib3hBcGlBY2Nlc3NUb2tlbik7XG5cbiAgcmV0dXJuIFtcbiAgICBjb25maWcuYXRtb3NwaGVyZSA/IGdldEdsb2JlQXRtb3NwaGVyZVNreUxheWVyKHtjb25maWcsIHpvb219KSA6IG51bGwsXG5cbiAgICAvLyBEZXB0aC1vbmx5IGNyb3NzLXNlY3Rpb24gZGlzazogd3JpdGVzIGRlcHRoIGF0IHRoZSBnbG9iZSdzIHNpbGhvdWV0dGUgc29cbiAgICAvLyBmYXItc2lkZSBnZW9tZXRyeSAoYXJjcy9saW5lcykgaXMgb2NjbHVkZWQgYnkgdGhlIHBsYW5ldC5cbiAgICBnZXRHbG9iZURlcHRoRGlza0xheWVyKHtmaWxsQ29sb3I6IGNvbmZpZy5zdXJmYWNlQ29sb3J9KSxcblxuICAgIC8vIEJhY2tncm91bmQgc3VyZmFjZSBwb2x5Z29uXG4gICAgKCFjb25maWcuYmFzZW1hcCB8fCAoIWlzU2F0ZWxsaXRlICYmICFpc1NhdGVsbGl0ZVN0cmVldCkpICYmXG4gICAgICBuZXcgU29saWRQb2x5Z29uTGF5ZXIoe1xuICAgICAgICBpZDogJ2dsb2JlLWJhY2tncm91bmQnLFxuICAgICAgICBkYXRhOiBCQUNLR1JPVU5EX0RBVEEsXG4gICAgICAgIGdldFBvbHlnb246ICgoZDogbnVtYmVyW11bXSkgPT4gZCkgYXMgYW55LFxuICAgICAgICBmaWxsZWQ6IHRydWUsXG4gICAgICAgIGdldEZpbGxDb2xvcjogY29uZmlnLnN1cmZhY2VDb2xvciBhcyBhbnksXG4gICAgICAgIHBhcmFtZXRlcnM6IEJBQ0tHUk9VTkRfUEFSQU1FVEVSU1xuICAgICAgfSksXG5cbiAgICAvLyBGaWxsIGhvbGUgYXQgbm9ydGggcG9sZVxuICAgIGNvbmZpZy5iYXNlbWFwICYmXG4gICAgICBuZXcgU29saWRQb2x5Z29uTGF5ZXIoe1xuICAgICAgICBpZDogJ2dsb2JlLWJhY2tncm91bmQtbm9ydGgtcG9sZScsXG4gICAgICAgIGRhdGE6IEJBQ0tHUk9VTkRfTk9SVEhfUE9MRV9EQVRBLFxuICAgICAgICBnZXRQb2x5Z29uOiAoKGQ6IG51bWJlcltdW10pID0+IGQpIGFzIGFueSxcbiAgICAgICAgZmlsbGVkOiB0cnVlLFxuICAgICAgICBnZXRGaWxsQ29sb3I6IChjb25maWcud2F0ZXIgPyBjb25maWcud2F0ZXJDb2xvciA6IGNvbmZpZy5zdXJmYWNlQ29sb3IpIGFzIGFueSxcbiAgICAgICAgcGFyYW1ldGVyczogQkFDS0dST1VORF9QQVJBTUVURVJTXG4gICAgICB9KSxcblxuICAgIC8vIFNhdGVsbGl0ZSB0aWxlc1xuICAgIGNvbmZpZy5iYXNlbWFwICYmXG4gICAgICAoaXNTYXRlbGxpdGUgfHwgaXNTYXRlbGxpdGVTdHJlZXQpICYmXG4gICAgICBoYXNUaWxlQWNjZXNzICYmXG4gICAgICBuZXcgVGlsZUxheWVyKHtcbiAgICAgICAgaWQ6IGBnbG9iZS1zYXRlbGxpdGUtdGlsZXMtJHtwcm92aWRlcn1gLFxuICAgICAgICBkYXRhOiB1c2VDYXJ0b1xuICAgICAgICAgID8gW0VTUklfV09STERfSU1BR0VSWV9VUkxdXG4gICAgICAgICAgOiBbXG4gICAgICAgICAgICAgIGBodHRwczovL2FwaS5tYXBib3guY29tL3Y0L21hcGJveC5zYXRlbGxpdGUve3p9L3t4fS97eX1AMngucG5nP2FjY2Vzc190b2tlbj0ke21hcGJveEFwaUFjY2Vzc1Rva2VufWBcbiAgICAgICAgICAgIF0sXG4gICAgICAgIG1pblpvb206IDAsXG4gICAgICAgIG1heFpvb206IHVzZUNhcnRvID8gMTggOiAxOSxcbiAgICAgICAgem9vbU9mZnNldDogR0xPQkVfU0FURUxMSVRFX1pPT01fT0ZGU0VUICsgbGF0Wm9vbUNvbXBlbnNhdGlvbixcbiAgICAgICAgZXh0ZW50OiBHTE9CRV9USUxFX0VYVEVOVCxcbiAgICAgICAgLy8gRXNyaSB0aWxlcyBhcmUgMjU2cHg7IE1hcGJveCBAMnggdGlsZXMgYXJlIDUxMnB4LlxuICAgICAgICB0aWxlU2l6ZTogdXNlQ2FydG8gPyAyNTYgOiA1MTIgLyBkZXZpY2VQaXhlbFJhdGlvLFxuICAgICAgICByZW5kZXJTdWJMYXllcnM6IChwcm9wczogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgYmJveDoge3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aH1cbiAgICAgICAgICB9ID0gcHJvcHMudGlsZTtcblxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgQml0bWFwTGF5ZXIocHJvcHMsIHtcbiAgICAgICAgICAgICAgX2ltYWdlQ29vcmRpbmF0ZVN5c3RlbTogQ09PUkRJTkFURV9TWVNURU0uQ0FSVEVTSUFOLFxuICAgICAgICAgICAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIGltYWdlOiBwcm9wcy5kYXRhLFxuICAgICAgICAgICAgICBib3VuZHM6IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF07XG4gICAgICAgIH0sXG4gICAgICAgIHBhcmFtZXRlcnM6IEJBU0VNQVBfUkFTVEVSX1BBUkFNRVRFUlNcbiAgICAgIH0pLFxuXG4gICAgLy8gVmVjdG9yIGJhc2VtYXAgKE1WVCBsYWJlbHMvYWRtaW4vd2F0ZXIpXG4gICAgY29uZmlnLmJhc2VtYXAgJiZcbiAgICAgICFpc1NhdGVsbGl0ZSAmJlxuICAgICAgaGFzVGlsZUFjY2VzcyAmJlxuICAgICAgbmV3IE1WVExheWVyKHtcbiAgICAgICAgLy8gZm9yY2UgdGhlIGxheWVyIHRvIHVwZGF0ZSB3aGVuIHRoZSBzdHlsZS9sYWJlbC9wcm92aWRlciBjb25maWcgY2hhbmdlc1xuICAgICAgICBpZDogYGdsb2JlLWJhc2VtYXAtbXZ0LWxheWVyLSR7cHJvdmlkZXJ9LSR7bWFwU3R5bGVUeXBlfWAsXG4gICAgICAgIGRhdGE6IHVzZUNhcnRvXG4gICAgICAgICAgPyBDQVJUT19WRUNUT1JfVElMRV9VUkxTXG4gICAgICAgICAgOiBgaHR0cHM6Ly9hLnRpbGVzLm1hcGJveC5jb20vdjQvbWFwYm94Lm1hcGJveC1zdHJlZXRzLXY4L3t6fS97eH0ve3l9LnZlY3Rvci5wYmY/YWNjZXNzX3Rva2VuPSR7bWFwYm94QXBpQWNjZXNzVG9rZW59YCxcbiAgICAgICAgbWluWm9vbTogMCxcbiAgICAgICAgLy8gT3Zlcnpvb20gcGFzdCB0aGUgc291cmNlJ3MgbmF0aXZlIG1heCBpbnN0ZWFkIG9mIDQwNC1pbmcgb24gdGlsZXMgdGhhdFxuICAgICAgICAvLyBkb24ndCBleGlzdCAod2hpY2ggcmVuZGVycyBhcyBlbXB0eSByZWN0YW5nbGVzIGF0IGhpZ2ggem9vbSkuXG4gICAgICAgIG1heFpvb206IHVzZUNhcnRvID8gQ0FSVE9fVkVDVE9SX01BWF9EQVRBX1pPT00gOiBNQVBCT1hfVkVDVE9SX01BWF9EQVRBX1pPT00sXG4gICAgICAgIHpvb21PZmZzZXQ6XG4gICAgICAgICAgKHVzZUNhcnRvID8gQ0FSVE9fR0xPQkVfVkVDVE9SX1pPT01fT0ZGU0VUIDogTUFQQk9YX0dMT0JFX1ZFQ1RPUl9aT09NX09GRlNFVCkgK1xuICAgICAgICAgIGxhdFpvb21Db21wZW5zYXRpb24sXG4gICAgICAgIGV4dGVudDogR0xPQkVfVElMRV9FWFRFTlQsXG4gICAgICAgIGJpbmFyeTogZmFsc2UsXG4gICAgICAgIHBhcmFtZXRlcnM6IEJBU0VNQVBfTVZUX1BBUkFNRVRFUlMsXG4gICAgICAgIGxvYWRPcHRpb25zOiB1c2VDYXJ0b1xuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAvLyBPcGVuTWFwVGlsZXMgc2NoZW1hOiBgYm91bmRhcnlgID0gYWRtaW4gbGluZXMsIGBwbGFjZWAgPSBsYWJlbHMuXG4gICAgICAgICAgICAgIG12dDoge1xuICAgICAgICAgICAgICAgIGxheWVyczogaXNTYXRlbGxpdGVTdHJlZXRcbiAgICAgICAgICAgICAgICAgID8gWydwbGFjZScsICdib3VuZGFyeSddXG4gICAgICAgICAgICAgICAgICA6IFsncGxhY2UnLCAnYm91bmRhcnknLCAnd2F0ZXInLCAndHJhbnNwb3J0YXRpb24nXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIG12dDoge1xuICAgICAgICAgICAgICAgIGxheWVyczogaXNTYXRlbGxpdGVTdHJlZXRcbiAgICAgICAgICAgICAgICAgID8gWydwbGFjZV9sYWJlbCcsICdhZG1pbiddXG4gICAgICAgICAgICAgICAgICA6IFsncGxhY2VfbGFiZWwnLCAnYWRtaW4nLCAnd2F0ZXInLCAncm9hZCddXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIC8vIFJlbmRlciBhZG1pbi93YXRlciB2aWEgR2VvSnNvbkxheWVyIGFuZCBwbGFjZSBsYWJlbHMgdmlhIFRleHRMYXllci5cbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZW5kZXJTdWJMYXllcnM6IChwcm9wczogYW55KSA9PiBuZXcgTVZUTGFiZWxMYXllcihwcm9wcyksXG4gICAgICAgIGdldEZpbGxDb2xvcjogKGY6IGFueSkgPT4ge1xuICAgICAgICAgIHN3aXRjaCAoZ2V0QmFzZW1hcExheWVyS2luZChmLnByb3BlcnRpZXMubGF5ZXJOYW1lKSkge1xuICAgICAgICAgICAgY2FzZSAnd2F0ZXInOlxuICAgICAgICAgICAgICByZXR1cm4gY29uZmlnLndhdGVyID8gY29uZmlnLndhdGVyQ29sb3IgOiBJTlZJU0lCTEVfQ09MT1I7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gY29uZmlnLnN1cmZhY2VDb2xvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdldExpbmVDb2xvcjogKGY6IGFueSkgPT4ge1xuICAgICAgICAgIHN3aXRjaCAoZ2V0QmFzZW1hcExheWVyS2luZChmLnByb3BlcnRpZXMubGF5ZXJOYW1lKSkge1xuICAgICAgICAgICAgY2FzZSAnYWRtaW4nOlxuICAgICAgICAgICAgICByZXR1cm4gY29uZmlnLmFkbWluTGluZXMgPyBjb25maWcuYWRtaW5MaW5lc0NvbG9yIDogSU5WSVNJQkxFX0NPTE9SO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5zdXJmYWNlQ29sb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnZXRMaW5lV2lkdGg6IChmOiBhbnkpID0+IHtcbiAgICAgICAgICBzd2l0Y2ggKGdldEJhc2VtYXBMYXllcktpbmQoZi5wcm9wZXJ0aWVzLmxheWVyTmFtZSkpIHtcbiAgICAgICAgICAgIGNhc2UgJ2FkbWluJzpcbiAgICAgICAgICAgICAgc3dpdGNoIChmLnByb3BlcnRpZXMuYWRtaW5fbGV2ZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIHJldHVybiAwLjc1O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHVwZGF0ZVRyaWdnZXJzOiB7XG4gICAgICAgICAgZ2V0RmlsbENvbG9yOiBbY29uZmlnLndhdGVyQ29sb3IsIGNvbmZpZy5zdXJmYWNlQ29sb3IsIGNvbmZpZy53YXRlcl0sXG4gICAgICAgICAgZ2V0TGluZUNvbG9yOiBbY29uZmlnLmFkbWluTGluZXNDb2xvciwgY29uZmlnLnN1cmZhY2VDb2xvciwgY29uZmlnLmFkbWluTGluZXNdXG4gICAgICAgIH0sXG4gICAgICAgIGxpbmVXaWR0aFVuaXRzOiAncGl4ZWxzJyxcbiAgICAgICAgbGluZVdpZHRoTWluUGl4ZWxzOiAwLFxuICAgICAgICBsaW5lV2lkdGhNYXhQaXhlbHM6IDIwLFxuICAgICAgICBnZXRQb2ludFJhZGl1czogMCxcbiAgICAgICAgcG9pbnRSYWRpdXNNaW5QaXhlbHM6IDBcbiAgICAgIH0gYXMgYW55KVxuICBdLmZpbHRlcihCb29sZWFuKSBhcyBMYXllcltdO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEdsb2JlVG9wTGF5ZXJzID0gKHtnbG9iZSwgem9vbX06IHtnbG9iZTogR2xvYmU7IHpvb20/OiBudW1iZXJ9KTogTGF5ZXJbXSA9PiB7XG4gIGNvbnN0IHtjb25maWd9ID0gZ2xvYmU7XG4gIHJldHVybiBbY29uZmlnLmF0bW9zcGhlcmUgPyBnZXRHbG9iZUF0bW9zcGhlcmVMYXllcih7Y29uZmlnLCB6b29tfSkgOiBudWxsXS5maWx0ZXIoQm9vbGVhbikgYXMgTGF5ZXJbXTtcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7O0FBRUEsU0FBUUEsaUJBQWlCLFFBQWMsZUFBZTtBQUN0RCxTQUFRQyxpQkFBaUIsRUFBRUMsV0FBVyxRQUFPLGlCQUFpQjtBQUM5RCxTQUFRQyxTQUFTLEVBQUVDLFFBQVEsUUFBTyxxQkFB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
566
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDT09SRElOQVRFX1NZU1RFTSIsIlNvbGlkUG9seWdvbkxheWVyIiwiQml0bWFwTGF5ZXIiLCJUaWxlTGF5ZXIiLCJNVlRMYXllciIsImdldEdsb2JlQXRtb3NwaGVyZUxheWVyIiwiZ2V0R2xvYmVBdG1vc3BoZXJlU2t5TGF5ZXIiLCJnZXRHbG9iZUh1Z2VIYWxvTGF5ZXIiLCJnZXRHbG9iZURlcHRoRGlza0xheWVyIiwiTVZUTGFiZWxMYXllciIsImRldmljZVBpeGVsUmF0aW8iLCJNYXRoIiwibWluIiwid2luZG93IiwiQkFDS0dST1VORF9QQVJBTUVURVJTIiwiZGVwdGhUZXN0IiwiY3VsbCIsImRlcHRoTWFzayIsIkJBU0VNQVBfUkFTVEVSX1BBUkFNRVRFUlMiLCJCQUNLR1JPVU5EX0RBVEEiLCJCQUNLR1JPVU5EX05PUlRIX1BPTEVfREFUQSIsIkRFRkFVTFRfQkFTRU1BUF9DT0xPUiIsImJhY2tncm91bmRGaWxsQ29sb3IiLCJiYXNlbWFwRGVmYXVsdEZpbGxDb2xvciIsImJhc2VtYXBXYXRlckZpbGxDb2xvciIsImJhc2VtYXBEZWZhdWx0TGluZUNvbG9yIiwiYmFzZW1hcEFkbWluTGluZUNvbG9yIiwiYmFzZW1hcExhYmVsQ29sb3IiLCJnZXRQYWludENvbG9yIiwiY29sb3IiLCJBcnJheSIsImlzQXJyYXkiLCJjb2xvclN0cmluZ1RvUkdCIiwiaHNsTWF0Y2giLCJtYXRjaCIsImgiLCJwYXJzZUludCIsInMiLCJsIiwiciIsImciLCJiIiwiaHVlMnJnYiIsInAiLCJxIiwidCIsInJvdW5kIiwicmdiTWF0Y2giLCJoZXhNYXRjaCIsImhleCIsInNsaWNlIiwiZmluZEZpcnN0TGF5ZXJCeUdyb3VwIiwibGF5ZXJzIiwibGF5ZXJHcm91cHMiLCJncm91cFNsdWciLCJsYXllckdyb3VwIiwiZmluZCIsImdyb3VwIiwic2x1ZyIsImxheWVyIiwiZmlsdGVyIiwiZmluZEJhY2tncm91bmRDb2xvciIsInN0eWxlIiwiX2ZvdW5kIiwiZm91bmQiLCJpZCIsInR5cGUiLCJwYWludCIsImZpbmRXYXRlckNvbG9yIiwiX2ZvdW5kJHBhaW50IiwiZmluZEFkbWluQ29sb3IiLCJfYm9yZGVyTGF5ZXJzJHBhaW50IiwiYm9yZGVyTGF5ZXJzIiwibHlyIiwiZmluZExhYmVsQ29sb3IiLCJfbGFiZWxMYXllciIsImxhYmVsTGF5ZXIiLCJnZXRCYXNlbWFwQ29sb3JzIiwibWFwU3R5bGUiLCJfZmluZEJhY2tncm91bmRDb2xvciIsIl9maW5kV2F0ZXJDb2xvciIsIl9maW5kQWRtaW5Db2xvciIsIl9maW5kTGFiZWxDb2xvciIsIl9tYXBTdHlsZSRzdHlsZSIsInN0eWxlSnNvbiIsIl9tYXBTdHlsZSRsYXllckdyb3VwcyIsIktOT1dOX1NUWUxFX0NPTE9SUyIsImRhcmsiLCJsaWdodCIsInBvc2l0cm9uIiwidm95YWdlciIsIm11dGVkIiwibXV0ZWRfbmlnaHQiLCJnZXRCYXNlbWFwQ29sb3JzRm9yU3R5bGUiLCJzdHlsZVR5cGUiLCJfbWFwU3R5bGUkc3R5bGUyIiwibGVuZ3RoIiwiZ2V0R2xvYmVDbGVhckNvbG9yIiwiYmFja2dyb3VuZENvbG9yIiwiSU5WSVNJQkxFX0NPTE9SIiwiQkFTRU1BUF9NVlRfUEFSQU1FVEVSUyIsIk1BUEJPWF9HTE9CRV9WRUNUT1JfWk9PTV9PRkZTRVQiLCJDQVJUT19HTE9CRV9WRUNUT1JfWk9PTV9PRkZTRVQiLCJHTE9CRV9TQVRFTExJVEVfWk9PTV9PRkZTRVQiLCJHTE9CRV9USUxFX0VYVEVOVCIsIk1BUEJPWF9WRUNUT1JfTUFYX0RBVEFfWk9PTSIsIkNBUlRPX1ZFQ1RPUl9NQVhfREFUQV9aT09NIiwiem9vbUFkanVzdCIsImxhdGl0dWRlIiwibG9nMiIsIlBJIiwiY29zIiwiZ2xvYmVMYXRpdHVkZVpvb21Db21wZW5zYXRpb24iLCJOdW1iZXIiLCJpc0Zpbml0ZSIsImNsYW1wZWQiLCJtYXgiLCJyZXNvbHZlR2xvYmVCYXNlbWFwUHJvdmlkZXIiLCJiYXNlTWFwTGlicmFyeSIsIm1hcGJveEFwaUFjY2Vzc1Rva2VuIiwiQ0FSVE9fVkVDVE9SX1RJTEVfVVJMUyIsIkVTUklfV09STERfSU1BR0VSWV9VUkwiLCJnZXRCYXNlbWFwTGF5ZXJLaW5kIiwibGF5ZXJOYW1lIiwiTUFQQk9YX0FUVFJJQlVUSU9OIiwibGFiZWwiLCJocmVmIiwiT1NNX0FUVFJJQlVUSU9OIiwiQ0FSVE9fQVRUUklCVVRJT04iLCJFU1JJX0FUVFJJQlVUSU9OIiwiZ2V0R2xvYmVCYXNlbWFwQXR0cmlidXRpb25zIiwiX3JlZiIsIl9nbG9iZSRjb25maWciLCJnbG9iZSIsIm1hcFN0eWxlVHlwZSIsImJhc2VtYXBQcm92aWRlciIsImVuYWJsZWQiLCJjb25maWciLCJiYXNlbWFwIiwicHJvdmlkZXIiLCJ1bmRlZmluZWQiLCJpc1NhdGVsbGl0ZSIsImdldEdsb2JlQmFzZUxheWVycyIsIl9yZWYyIiwiem9vbSIsImlzU2F0ZWxsaXRlU3RyZWV0IiwibGF0Wm9vbUNvbXBlbnNhdGlvbiIsInVzZUNhcnRvIiwiaGFzVGlsZUFjY2VzcyIsIkJvb2xlYW4iLCJhdG1vc3BoZXJlIiwiZmlsbENvbG9yIiwic3VyZmFjZUNvbG9yIiwiZGF0YSIsImdldFBvbHlnb24iLCJkIiwiZmlsbGVkIiwiZ2V0RmlsbENvbG9yIiwicGFyYW1ldGVycyIsIndhdGVyIiwid2F0ZXJDb2xvciIsImNvbmNhdCIsIm1pblpvb20iLCJtYXhab29tIiwiem9vbU9mZnNldCIsImV4dGVudCIsInRpbGVTaXplIiwicmVuZGVyU3ViTGF5ZXJzIiwicHJvcHMiLCJfcHJvcHMkdGlsZSRiYm94IiwidGlsZSIsImJib3giLCJ3ZXN0Iiwic291dGgiLCJlYXN0Iiwibm9ydGgiLCJfaW1hZ2VDb29yZGluYXRlU3lzdGVtIiwiQ0FSVEVTSUFOIiwiaW1hZ2UiLCJib3VuZHMiLCJiaW5hcnkiLCJsb2FkT3B0aW9ucyIsIm12dCIsImYiLCJwcm9wZXJ0aWVzIiwiZ2V0TGluZUNvbG9yIiwiYWRtaW5MaW5lcyIsImFkbWluTGluZXNDb2xvciIsImdldExpbmVXaWR0aCIsImFkbWluX2xldmVsIiwidXBkYXRlVHJpZ2dlcnMiLCJsaW5lV2lkdGhVbml0cyIsImxpbmVXaWR0aE1pblBpeGVscyIsImxpbmVXaWR0aE1heFBpeGVscyIsImdldFBvaW50UmFkaXVzIiwicG9pbnRSYWRpdXNNaW5QaXhlbHMiLCJnZXRHbG9iZVRvcExheWVycyIsIl9yZWYzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2dsb2JlL2dsb2JlLWxheWVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge0NPT1JESU5BVEVfU1lTVEVNLCBMYXllcn0gZnJvbSAnQGRlY2suZ2wvY29yZSc7XG5pbXBvcnQge1NvbGlkUG9seWdvbkxheWVyLCBCaXRtYXBMYXllcn0gZnJvbSAnQGRlY2suZ2wvbGF5ZXJzJztcbmltcG9ydCB7VGlsZUxheWVyLCBNVlRMYXllcn0gZnJvbSAnQGRlY2suZ2wvZ2VvLWxheWVycyc7XG5cbmltcG9ydCB0eXBlIHtHbG9iZX0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHR5cGUge1JHQkNvbG9yfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcblxuaW1wb3J0IHtnZXRHbG9iZUF0bW9zcGhlcmVMYXllciwgZ2V0R2xvYmVBdG1vc3BoZXJlU2t5TGF5ZXIsIGdldEdsb2JlSHVnZUhhbG9MYXllcn0gZnJvbSAnLi9hdG1vc3BoZXJlLWxheWVyJztcbmltcG9ydCB7Z2V0R2xvYmVEZXB0aERpc2tMYXllcn0gZnJvbSAnLi9nbG9iZS1kZXB0aC1kaXNrLWxheWVyJztcbmltcG9ydCB7TVZUTGFiZWxMYXllcn0gZnJvbSAnLi9tdnQtbGFiZWwtbGF5ZXInO1xuXG50eXBlIExheWVyR3JvdXAgPSB7c2x1Zzogc3RyaW5nOyBmaWx0ZXI6IChsYXllcjogYW55KSA9PiBib29sZWFufTtcblxuY29uc3QgZGV2aWNlUGl4ZWxSYXRpbyA9IE1hdGgubWluKFxuICAyLFxuICAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmRldmljZVBpeGVsUmF0aW8pIHx8IDFcbik7XG5cbmNvbnN0IEJBQ0tHUk9VTkRfUEFSQU1FVEVSUyA9IHtcbiAgZGVwdGhUZXN0OiB0cnVlLFxuICBjdWxsOiB0cnVlLFxuICBkZXB0aE1hc2s6IGZhbHNlXG59O1xuXG5jb25zdCBCQVNFTUFQX1JBU1RFUl9QQVJBTUVURVJTID0ge1xuICBkZXB0aE1hc2s6IGZhbHNlXG59O1xuXG5jb25zdCBCQUNLR1JPVU5EX0RBVEEgPSBbXG4gIFtcbiAgICBbLTE4MCwgOTBdLFxuICAgIFswLCA5MF0sXG4gICAgWzE4MCwgOTBdLFxuICAgIFsxODAsIC05MF0sXG4gICAgWzAsIC05MF0sXG4gICAgWy0xODAsIC05MF1cbiAgXVxuXTtcblxuY29uc3QgQkFDS0dST1VORF9OT1JUSF9QT0xFX0RBVEEgPSBbXG4gIFtcbiAgICBbLTE4MCwgOTBdLFxuICAgIFswLCA5MF0sXG4gICAgWzE4MCwgOTBdLFxuICAgIFsxODAsIDg1XSxcbiAgICBbMCwgODVdLFxuICAgIFstMTgwLCA4NV1cbiAgXVxuXTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQkFTRU1BUF9DT0xPUiA9IHtcbiAgYmFja2dyb3VuZEZpbGxDb2xvcjogWzksIDE2LCAyOV0gYXMgUkdCQ29sb3IsXG4gIGJhc2VtYXBEZWZhdWx0RmlsbENvbG9yOiBbMjU1LCAyNTUsIDI1NV0gYXMgUkdCQ29sb3IsXG4gIGJhc2VtYXBXYXRlckZpbGxDb2xvcjogWzE3LCAzNSwgNDhdIGFzIFJHQkNvbG9yLFxuICBiYXNlbWFwRGVmYXVsdExpbmVDb2xvcjogWzQwLCA2MywgOTNdIGFzIFJHQkNvbG9yLFxuICBiYXNlbWFwQWRtaW5MaW5lQ29sb3I6IFs0MCwgNjMsIDkzXSBhcyBSR0JDb2xvcixcbiAgYmFzZW1hcExhYmVsQ29sb3I6IFsxMTQuNzUsIDExNC43NSwgMTE0Ljc1XSBhcyBSR0JDb2xvclxufTtcblxuZnVuY3Rpb24gZ2V0UGFpbnRDb2xvcihjb2xvcjogYW55KTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmIChBcnJheS5pc0FycmF5KGNvbG9yKSAmJiBjb2xvclswXSA9PT0gJ2ludGVycG9sYXRlJykge1xuICAgIHJldHVybiBjb2xvcls0XTtcbiAgfVxuICByZXR1cm4gY29sb3I7XG59XG5cbmZ1bmN0aW9uIGNvbG9yU3RyaW5nVG9SR0IoY29sb3I6IHN0cmluZyB8IG51bGwpOiBSR0JDb2xvciB8IG51bGwge1xuICBpZiAoIWNvbG9yKSByZXR1cm4gbnVsbDtcbiAgaWYgKHR5cGVvZiBjb2xvciAhPT0gJ3N0cmluZycpIHJldHVybiBudWxsO1xuXG4gIC8vIEhhbmRsZSBoc2woKSBmb3JtYXRcbiAgY29uc3QgaHNsTWF0Y2ggPSBjb2xvci5tYXRjaCgvaHNsXFwoXFxzKihcXGQrKVxccyosXFxzKihcXGQrKSVcXHMqLFxccyooXFxkKyklXFxzKlxcKS8pO1xuICBpZiAoaHNsTWF0Y2gpIHtcbiAgICBjb25zdCBoID0gcGFyc2VJbnQoaHNsTWF0Y2hbMV0sIDEwKSAvIDM2MDtcbiAgICBjb25zdCBzID0gcGFyc2VJbnQoaHNsTWF0Y2hbMl0sIDEwKSAvIDEwMDtcbiAgICBjb25zdCBsID0gcGFyc2VJbnQoaHNsTWF0Y2hbM10sIDEwKSAvIDEwMDtcbiAgICAvLyBIU0wgdG8gUkdCIGNvbnZlcnNpb25cbiAgICBsZXQgcjogbnVtYmVyLCBnOiBudW1iZXIsIGI6IG51bWJlcjtcbiAgICBpZiAocyA9PT0gMCkge1xuICAgICAgciA9IGcgPSBiID0gbDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaHVlMnJnYiA9IChwOiBudW1iZXIsIHE6IG51bWJlciwgdDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGlmICh0IDwgMCkgdCArPSAxO1xuICAgICAgICBpZiAodCA+IDEpIHQgLT0gMTtcbiAgICAgICAgaWYgKHQgPCAxIC8gNikgcmV0dXJuIHAgKyAocSAtIHApICogNiAqIHQ7XG4gICAgICAgIGlmICh0IDwgMSAvIDIpIHJldHVybiBxO1xuICAgICAgICBpZiAodCA8IDIgLyAzKSByZXR1cm4gcCArIChxIC0gcCkgKiAoMiAvIDMgLSB0KSAqIDY7XG4gICAgICAgIHJldHVybiBwO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHEgPSBsIDwgMC41ID8gbCAqICgxICsgcykgOiBsICsgcyAtIGwgKiBzO1xuICAgICAgY29uc3QgcCA9IDIgKiBsIC0gcTtcbiAgICAgIHIgPSBodWUycmdiKHAsIHEsIGggKyAxIC8gMyk7XG4gICAgICBnID0gaHVlMnJnYihwLCBxLCBoKTtcbiAgICAgIGIgPSBodWUycmdiKHAsIHEsIGggLSAxIC8gMyk7XG4gICAgfVxuICAgIHJldHVybiBbTWF0aC5yb3VuZChyICogMjU1KSwgTWF0aC5yb3VuZChnICogMjU1KSwgTWF0aC5yb3VuZChiICogMjU1KV0gYXMgUkdCQ29sb3I7XG4gIH1cblxuICAvLyBIYW5kbGUgcmdiKCkgZm9ybWF0XG4gIGNvbnN0IHJnYk1hdGNoID0gY29sb3IubWF0Y2goL3JnYlxcKFxccyooXFxkKylcXHMqLFxccyooXFxkKylcXHMqLFxccyooXFxkKylcXHMqXFwpLyk7XG4gIGlmIChyZ2JNYXRjaCkge1xuICAgIHJldHVybiBbXG4gICAgICBwYXJzZUludChyZ2JNYXRjaFsxXSwgMTApLFxuICAgICAgcGFyc2VJbnQocmdiTWF0Y2hbMl0sIDEwKSxcbiAgICAgIHBhcnNlSW50KHJnYk1hdGNoWzNdLCAxMClcbiAgICBdIGFzIFJHQkNvbG9yO1xuICB9XG5cbiAgLy8gSGFuZGxlIGhleCBmb3JtYXRcbiAgY29uc3QgaGV4TWF0Y2ggPSBjb2xvci5tYXRjaCgvXiMoWzAtOWEtZl17Nn0pJC9pKTtcbiAgaWYgKGhleE1hdGNoKSB7XG4gICAgY29uc3QgaGV4ID0gaGV4TWF0Y2hbMV07XG4gICAgcmV0dXJuIFtcbiAgICAgIHBhcnNlSW50KGhleC5zbGljZSgwLCAyKSwgMTYpLFxuICAgICAgcGFyc2VJbnQoaGV4LnNsaWNlKDIsIDQpLCAxNiksXG4gICAgICBwYXJzZUludChoZXguc2xpY2UoNCwgNiksIDE2KVxuICAgIF0gYXMgUkdCQ29sb3I7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZmluZEZpcnN0TGF5ZXJCeUdyb3VwKGxheWVyczogYW55W10sIGxheWVyR3JvdXBzOiBMYXllckdyb3VwW10sIGdyb3VwU2x1Zzogc3RyaW5nKSB7XG4gIGNvbnN0IGxheWVyR3JvdXAgPSBsYXllckdyb3Vwcy5maW5kKGdyb3VwID0+IGdyb3VwLnNsdWcgPT09IGdyb3VwU2x1Zyk7XG4gIGlmICghbGF5ZXJHcm91cCkgcmV0dXJuIG51bGw7XG4gIHJldHVybiBsYXllcnMuZmluZChsYXllciA9PiBsYXllckdyb3VwLmZpbHRlcihsYXllcikpO1xufVxuXG5mdW5jdGlvbiBmaW5kQmFja2dyb3VuZENvbG9yKHN0eWxlOiBhbnkpOiBSR0JDb2xvciB8IG51bGwge1xuICBsZXQgZm91bmQgPSBzdHlsZS5sYXllcnMuZmluZCgobDogYW55KSA9PiBsLmlkID09PSAnYmFja2dyb3VuZCcgfHwgbC5pZCA9PT0gJ2xhbmQnKTtcbiAgZm91bmQgPSBmb3VuZCB8fCBzdHlsZS5sYXllcnMuZmluZCgobDogYW55KSA9PiBsLnR5cGUgPT09ICdiYWNrZ3JvdW5kJyk7XG4gIHJldHVybiBjb2xvclN0cmluZ1RvUkdCKGdldFBhaW50Q29sb3IoZm91bmQ/LnBhaW50Py5bJ2JhY2tncm91bmQtY29sb3InXSkpO1xufVxuXG5mdW5jdGlvbiBmaW5kV2F0ZXJDb2xvcihzdHlsZTogYW55LCBsYXllckdyb3VwczogTGF5ZXJHcm91cFtdKTogUkdCQ29sb3IgfCBudWxsIHtcbiAgY29uc3QgZm91bmQgPVxuICAgIHN0eWxlLmxheWVycy5maW5kKChsOiBhbnkpID0+IGwuaWQgPT09ICd3YXRlcicpIHx8XG4gICAgZmluZEZpcnN0TGF5ZXJCeUdyb3VwKHN0eWxlLmxheWVycywgbGF5ZXJHcm91cHMsICd3YXRlcicpO1xuICByZXR1cm4gY29sb3JTdHJpbmdUb1JHQihmb3VuZD8ucGFpbnQ/LlsnZmlsbC1jb2xvciddKTtcbn1cblxuZnVuY3Rpb24gZmluZEFkbWluQ29sb3Ioc3R5bGU6IGFueSwgbGF5ZXJHcm91cHM6IExheWVyR3JvdXBbXSk6IFJHQkNvbG9yIHwgbnVsbCB7XG4gIGNvbnN0IGJvcmRlckxheWVycyA9XG4gICAgc3R5bGUubGF5ZXJzLmZpbmQoKGx5cjogYW55KSA9PiBseXIuaWQgPT09ICdhZG1pbi0zLTQtYm91bmRhcmllcycpIHx8XG4gICAgZmluZEZpcnN0TGF5ZXJCeUdyb3VwKHN0eWxlLmxheWVycywgbGF5ZXJHcm91cHMsICdib3JkZXInKTtcbiAgcmV0dXJuIGNvbG9yU3RyaW5nVG9SR0IoYm9yZGVyTGF5ZXJzPy5wYWludD8uWydsaW5lLWNvbG9yJ10pO1xufVxuXG5mdW5jdGlvbiBmaW5kTGFiZWxDb2xvcihzdHlsZTogYW55LCBsYXllckdyb3VwczogTGF5ZXJHcm91cFtdKTogUkdCQ29sb3IgfCBudWxsIHtcbiAgbGV0IGxhYmVsTGF5ZXIgPSBzdHlsZS5sYXllcnMuZmluZChcbiAgICAobHlyOiBhbnkpID0+IGx5ci5pZCA9PT0gJ2NvdW50cnktbGFiZWwtbGcnICYmIGx5ci50eXBlID09PSAnc3ltYm9sJ1xuICApO1xuICBsYWJlbExheWVyID1cbiAgICBsYWJlbExheWVyIHx8XG4gICAgc3R5bGUubGF5ZXJzLmZpbmQoKGx5cjogYW55KSA9PiBseXIuaWQgPT09ICdjb3VudHJ5LWxhYmVsJyAmJiBseXIudHlwZSA9PT0gJ3N5bWJvbCcpO1xuICBsYWJlbExheWVyID0gbGFiZWxMYXllciB8fCBmaW5kRmlyc3RMYXllckJ5R3JvdXAoc3R5bGUubGF5ZXJzLCBsYXllckdyb3VwcywgJ2xhYmVsJyk7XG4gIHJldHVybiBjb2xvclN0cmluZ1RvUkdCKGxhYmVsTGF5ZXI/LnBhaW50Py5bJ3RleHQtY29sb3InXSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRCYXNlbWFwQ29sb3JzID0gKFxuICBtYXBTdHlsZTogUGFydGlhbDx7c3R5bGU6IGFueTsgbGF5ZXJHcm91cHM6IExheWVyR3JvdXBbXX0+XG4pOiB7XG4gIGJhY2tncm91bmRGaWxsQ29sb3I6IFJHQkNvbG9yO1xuICBiYXNlbWFwV2F0ZXJGaWxsQ29sb3I6IFJHQkNvbG9yO1xuICBiYXNlbWFwQWRtaW5MaW5lQ29sb3I6IFJHQkNvbG9yO1xuICBiYXNlbWFwTGFiZWxDb2xvcjogUkdCQ29sb3I7XG59ID0+IHtcbiAgY29uc3Qge3N0eWxlOiBzdHlsZUpzb24gPSB7bGF5ZXJzOiBbXX0sIGxheWVyR3JvdXBzID0gW119ID0gbWFwU3R5bGU7XG5cbiAgcmV0dXJuIHtcbiAgICBiYWNrZ3JvdW5kRmlsbENvbG9yOlxuICAgICAgZmluZEJhY2tncm91bmRDb2xvcihzdHlsZUpzb24pID8/IERFRkFVTFRfQkFTRU1BUF9DT0xPUi5iYWNrZ3JvdW5kRmlsbENvbG9yLFxuICAgIGJhc2VtYXBXYXRlckZpbGxDb2xvcjpcbiAgICAgIGZpbmRXYXRlckNvbG9yKHN0eWxlSnNvbiwgbGF5ZXJHcm91cHMpID8/IERFRkFVTFRfQkFTRU1BUF9DT0xPUi5iYXNlbWFwV2F0ZXJGaWxsQ29sb3IsXG4gICAgYmFzZW1hcEFkbWluTGluZUNvbG9yOlxuICAgICAgZmluZEFkbWluQ29sb3Ioc3R5bGVKc29uLCBsYXllckdyb3VwcykgPz8gREVGQVVMVF9CQVNFTUFQX0NPTE9SLmJhc2VtYXBBZG1pbkxpbmVDb2xvcixcbiAgICBiYXNlbWFwTGFiZWxDb2xvcjpcbiAgICAgIGZpbmRMYWJlbENvbG9yKHN0eWxlSnNvbiwgbGF5ZXJHcm91cHMpID8/IERFRkFVTFRfQkFTRU1BUF9DT0xPUi5iYXNlbWFwTGFiZWxDb2xvclxuICB9O1xufTtcblxuLy8gUHJlZGVmaW5lZCBjb2xvciBzY2hlbWVzIGZvciB3ZWxsLWtub3duIGJhc2VtYXAgc3R5bGVzXG5jb25zdCBLTk9XTl9TVFlMRV9DT0xPUlM6IFJlY29yZDxcbiAgc3RyaW5nLFxuICB7XG4gICAgYmFja2dyb3VuZEZpbGxDb2xvcjogUkdCQ29sb3I7XG4gICAgYmFzZW1hcFdhdGVyRmlsbENvbG9yOiBSR0JDb2xvcjtcbiAgICBiYXNlbWFwQWRtaW5MaW5lQ29sb3I6IFJHQkNvbG9yO1xuICAgIGJhc2VtYXBMYWJlbENvbG9yOiBSR0JDb2xvcjtcbiAgfVxuPiA9IHtcbiAgZGFyazoge1xuICAgIGJhY2tncm91bmRGaWxsQ29sb3I6IFsxNSwgMTUsIDE1XSxcbiAgICBiYXNlbWFwV2F0ZXJGaWxsQ29sb3I6IFsxMCwgMjAsIDM1XSxcbiAgICBiYXNlbWFwQWRtaW5MaW5lQ29sb3I6IFs2MCwgNjAsIDgwXSxcbiAgICBiYXNlbWFwTGFiZWxDb2xvcjogWzE1MCwgMTUwLCAxNTBdXG4gIH0sXG4gICdkYXJrLW1hdHRlcic6IHtcbiAgICBiYWNrZ3JvdW5kRmlsbENvbG9yOiBbMTgsIDE4LCAxOF0sXG4gICAgYmFzZW1hcFdhdGVyRmlsbENvbG9yOiBbMTQsIDE5LCAyOV0sXG4gICAgYmFzZW1hcEFkbWluTGluZUNvbG9yOiBbNTAsIDUwLCA2MF0sXG4gICAgYmFzZW1hcExhYmVsQ29sb3I6IFsxMzAsIDEzMCwgMTMwXVxuICB9LFxuICBsaWdodDoge1xuICAgIGJhY2tncm91bmRGaWxsQ29sb3I6IFsyMzUsIDIzMywgMjI4XSxcbiAgICBiYXNlbWFwV2F0ZXJGaWxsQ29sb3I6IFsxNzAsIDIxMSwgMjIzXSxcbiAgICBiYXNlbWFwQWRtaW5MaW5lQ29sb3I6IFsxODAsIDE3NSwgMTcwXSxcbiAgICBiYXNlbWFwTGFiZWxDb2xvcjogWzgwLCA4MCwgODBdXG4gIH0sXG4gIHBvc2l0cm9uOiB7XG4gICAgYmFja2dyb3VuZEZpbGxDb2xvcjogWzI0MiwgMjM5LCAyMzNdLFxuICAgIGJhc2VtYXBXYXRlckZpbGxDb2xvcjogWzE3NCwgMjA5LCAyMjBdLFxuICAgIGJhc2VtYXBBZG1pbkxpbmVDb2xvcjogWzE5MCwgMTg1LCAxODBdLFxuICAgIGJhc2VtYXBMYWJlbENvbG9yOiBbOTAsIDkwLCA5MF1cbiAgfSxcbiAgdm95YWdlcjoge1xuICAgIGJhY2tncm91bmRGaWxsQ29sb3I6IFsyMzQsIDIyOSwgMjIwXSxcbiAgICBiYXNlbWFwV2F0ZXJGaWxsQ29sb3I6IFsxNzAsIDIxMSwgMjIzXSxcbiAgICBiYXNlbWFwQWRtaW5MaW5lQ29sb3I6IFsxODAsIDE3MCwgMTYwXSxcbiAgICBiYXNlbWFwTGFiZWxDb2xvcjogWzcwLCA3MCwgNzBdXG4gIH0sXG4gIG11dGVkOiB7XG4gICAgYmFja2dyb3VuZEZpbGxDb2xvcjogWzIyNSwgMjI1LCAyMThdLFxuICAgIGJhc2VtYXBXYXRlckZpbGxDb2xvcjogWzE4MCwgMjEwLCAyMjBdLFxuICAgIGJhc2VtYXBBZG1pbkxpbmVDb2xvcjogWzE3MCwgMTY1LCAxNjBdLFxuICAgIGJhc2VtYXBMYWJlbENvbG9yOiBbOTAsIDkwLCA5MF1cbiAgfSxcbiAgbXV0ZWRfbmlnaHQ6IHtcbiAgICBiYWNrZ3JvdW5kRmlsbENvbG9yOiBbMjIsIDI2LCAzMF0sXG4gICAgYmFzZW1hcFdhdGVyRmlsbENvbG9yOiBbMTUsIDI1LCA0MF0sXG4gICAgYmFzZW1hcEFkbWluTGluZUNvbG9yOiBbNTUsIDYwLCA3MF0sXG4gICAgYmFzZW1hcExhYmVsQ29sb3I6IFsxNDAsIDE0MCwgMTQwXVxuICB9XG59O1xuXG4vKipcbiAqIEdldCBiYXNlbWFwIGNvbG9ycyBlaXRoZXIgZnJvbSB0aGUgc3R5bGUgSlNPTiBvciBmcm9tIGtub3duIHN0eWxlIHByZXNldHMuXG4gKiBGYWxscyBiYWNrIHRvIGRlZmF1bHQgZGFyayBjb2xvcnMgaWYgc3R5bGUgaXMgdW5rbm93biBhbmQgbm8gSlNPTiBpcyBhdmFpbGFibGUuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRCYXNlbWFwQ29sb3JzRm9yU3R5bGUgPSAoXG4gIHN0eWxlVHlwZTogc3RyaW5nLFxuICBtYXBTdHlsZT86IFBhcnRpYWw8e3N0eWxlOiBhbnk7IGxheWVyR3JvdXBzOiBMYXllckdyb3VwW119PlxuKToge1xuICBiYWNrZ3JvdW5kRmlsbENvbG9yOiBSR0JDb2xvcjtcbiAgYmFzZW1hcFdhdGVyRmlsbENvbG9yOiBSR0JDb2xvcjtcbiAgYmFzZW1hcEFkbWluTGluZUNvbG9yOiBSR0JDb2xvcjtcbiAgYmFzZW1hcExhYmVsQ29sb3I6IFJHQkNvbG9yO1xufSA9PiB7XG4gIC8vIFRyeSB0byBleHRyYWN0IGZyb20gc3R5bGUgSlNPTiBmaXJzdFxuICBpZiAobWFwU3R5bGU/LnN0eWxlPy5sYXllcnM/Lmxlbmd0aCkge1xuICAgIHJldHVybiBnZXRCYXNlbWFwQ29sb3JzKG1hcFN0eWxlKTtcbiAgfVxuICAvLyBGYWxsIGJhY2sgdG8ga25vd24gc3R5bGUgcHJlc2V0c1xuICBpZiAoS05PV05fU1RZTEVfQ09MT1JTW3N0eWxlVHlwZV0pIHtcbiAgICByZXR1cm4gS05PV05fU1RZTEVfQ09MT1JTW3N0eWxlVHlwZV07XG4gIH1cbiAgLy8gRGVmYXVsdCBkYXJrIGNvbG9yc1xuICByZXR1cm4ge1xuICAgIGJhY2tncm91bmRGaWxsQ29sb3I6IERFRkFVTFRfQkFTRU1BUF9DT0xPUi5iYWNrZ3JvdW5kRmlsbENvbG9yLFxuICAgIGJhc2VtYXBXYXRlckZpbGxDb2xvcjogREVGQVVMVF9CQVNFTUFQX0NPTE9SLmJhc2VtYXBXYXRlckZpbGxDb2xvcixcbiAgICBiYXNlbWFwQWRtaW5MaW5lQ29sb3I6IERFRkFVTFRfQkFTRU1BUF9DT0xPUi5iYXNlbWFwQWRtaW5MaW5lQ29sb3IsXG4gICAgYmFzZW1hcExhYmVsQ29sb3I6IERFRkFVTFRfQkFTRU1BUF9DT0xPUi5iYXNlbWFwTGFiZWxDb2xvclxuICB9O1xufTtcblxuLyoqXG4gKiBDbGVhciBjb2xvciAoYmFja2dyb3VuZCBhcm91bmQgdGhlIGdsb2JlKSBmb3IgZ2xvYmUgbW9kZSwgaW4gUkdCQSAwLTI1NSBhc1xuICogZXhwZWN0ZWQgYnkgZGVjay5nbCdzIFZpZXcgYGNsZWFyQ29sb3JgIHByb3AgKGRlY2suZ2wgPj0gOSBubyBsb25nZXIgc3VwcG9ydHNcbiAqIHRoZSBnbG9iYWwgYHBhcmFtZXRlcnMuY2xlYXJDb2xvcmA7IGl0IG11c3QgYmUgc2V0IHBlci12aWV3IHdpdGggYGNsZWFyOiB0cnVlYCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRHbG9iZUNsZWFyQ29sb3IoXG4gIGJhY2tncm91bmRDb2xvcj86IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSB8IG51bWJlcltdXG4pOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSB7XG4gIGlmIChiYWNrZ3JvdW5kQ29sb3IpIHtcbiAgICByZXR1cm4gW2JhY2tncm91bmRDb2xvclswXSwgYmFja2dyb3VuZENvbG9yWzFdLCBiYWNrZ3JvdW5kQ29sb3JbMl0sIDI1NV07XG4gIH1cbiAgLy8gRGVmYXVsdCBtYXRjaGVzIHRoZSBwcmV2aW91cyBoYXJkY29kZWQgY2xlYXIgY29sb3IgWzAuMDE1LCAwLjAzNSwgMC4wNjVdIGluIDAtMSBzcGFjZS5cbiAgcmV0dXJuIFs0LCA5LCAxNywgMjU1XTtcbn1cblxuY29uc3QgSU5WSVNJQkxFX0NPTE9SOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9IFswLCAwLCAwLCAwXTtcblxuY29uc3QgQkFTRU1BUF9NVlRfUEFSQU1FVEVSUyA9IHtcbiAgLy8gT2NjbHVkZSB0aGUgZmFyIHNpZGUgb2YgdGhlIGdsb2JlIHZpYSB0aGUgREVQVEggRElTSyAoZ2V0R2xvYmVEZXB0aERpc2tMYXllcilcbiAgLy8gcmF0aGVyIHRoYW4gYmFjay1mYWNlIGN1bGxpbmcuIEdsb2JlIG1vZGUgc2V0cyBhIGdsb2JhbCBgY3VsbDogdHJ1ZWAgZm9yIHRoZVxuICAvLyBvcGFxdWUgc3BoZXJlIHN1cmZhY2UsIGJ1dCBiYWNrLWZhY2UgY3VsbGluZyByZWxpZXMgb24gc3RhYmxlIHRyaWFuZ2xlXG4gIC8vIHdpbmRpbmcg4oCUIGFuZCBkZWNrLmdsIDkncyBnbG9iZSBwcm9qZWN0aW9uIGxvc2VzIHByZWNpc2lvbiBhdCBoaWdoIHpvb21cbiAgLy8gKGZsb2F0MzIpLCBmbGlwcGluZyB0aGUgd2luZGluZyBvZiB0aGUgc21hbGwgYWRtaW4vd2F0ZXIgdHJpYW5nbGVzIHNvIHRoZXlcbiAgLy8gZ2V0IHdyb25nbHkgY3VsbGVkIGFuZCB0aGUgZ2VvbWV0cnkgdmFuaXNoZXMgcGFzdCB+em9vbSAxMiAoeW91IHRoZW4gc2VlXG4gIC8vIHRocm91Z2ggdG8gdGhlIGZhciBzaWRlIC8gXCJkaWZmZXJlbnQgZ2VvbWV0cnlcIikuIERlcHRoIHRlc3RpbmcgYWdhaW5zdCB0aGUgZGlza1xuICAvLyBpcyBhIHByZWNpc2lvbi1yb2J1c3Qgb2NjbHVkZXIgdGhhdCB3b3JrcyBhdCBhbnkgem9vbSwgc286XG4gIC8vICAgLSBjdWxsOiBmYWxzZSAgICAg4oaSIGRvbid0IHdpbmRpbmctY3VsbCB0aGUgbmVhci1zaWRlIGdlb21ldHJ5XG4gIC8vICAgLSBkZXB0aFRlc3Q6IHRydWUg4oaSIGZhci1zaWRlIGdlb21ldHJ5IChiZWhpbmQgdGhlIGRpc2spIGZhaWxzIGRlcHRoLCBoaWRkZW5cbiAgLy8gICAtIGRlcHRoTWFzazogZmFsc2Ug4oaSIGRvbid0IHdyaXRlIGRlcHRoIChhdm9pZCBzZWxmIHotZmlnaHRpbmcgb24gdGhlIHNoZWxsKVxuICAvLyBSYXN0ZXIgdGlsZXMgYXJlIHVuYWZmZWN0ZWQgKHRoZWlyIDQtY29ybmVyIHF1YWRzIGtlZXAgc3RhYmxlIHdpbmRpbmcpLCB3aGljaFxuICAvLyBpcyB3aHkgc2F0ZWxsaXRlIGFscmVhZHkgem9vbXMgdG8gbWF4IGNsZWFubHkuIExhYmVscyBkaXNhYmxlIGN1bGwgZm9yIHRoZVxuICAvLyBzYW1lIHJlYXNvbiAoc2VlIG12dC1sYWJlbC1sYXllci50cykuXG4gIGRlcHRoVGVzdDogdHJ1ZSxcbiAgZGVwdGhNYXNrOiBmYWxzZSxcbiAgY3VsbDogZmFsc2Vcbn07XG5cbi8vIGRlY2suZ2wgOSdzIGdsb2JlIHNlbGVjdHMgZmluZXIgdGlsZXMgdGhhbiBuZWVkZWQgZm9yIGEgZ2l2ZW4gdmlldyAoaXRzXG4vLyBHbG9iZVZpZXdwb3J0IHNjYWxlIGlzIH4zeCBzbWFsbGVyIHRoYW4gdGhlIGVxdWl2YWxlbnQgbWVyY2F0b3Igem9vbSksIHNvIGJpYXNcbi8vIHZlY3RvciB0aWxlIHNlbGVjdGlvbiBjb2Fyc2VyIHRvIGtlZXAgdGhlIHRpbGUgY291bnQg4oCUIGFuZCB0aHVzIHBlcmZvcm1hbmNlIOKAlFxuLy8gaW4gY2hlY2suIFRoaXMgdHJhZGVzIGEgbGl0dGxlIGRldGFpbCBmb3IgZmFyIGZld2VyIHRpbGVzOyBtYWtlIGl0IGxlc3MgbmVnYXRpdmVcbi8vICh0b3dhcmQgMCkgZm9yIHNoYXJwZXIgZGV0YWlsLCBvciBtb3JlIG5lZ2F0aXZlIGZvciBtb3JlIHBlcmYuXG4vLyBUaGVzZSBhcmUgKmJhc2UqIG9mZnNldHM6IGdsb2JlTGF0aXR1ZGVab29tQ29tcGVuc2F0aW9uIGlzIGFkZGVkIG9uIHRvcCBhdCBkcmF3XG4vLyB0aW1lLCBzbyB0aGUgZWZmZWN0aXZlIHpvb21PZmZzZXQgb25seSBlcXVhbHMgdGhlc2UgZXhhY3QgdmFsdWVzIGF0IHRoZSBlcXVhdG9yLlxuLy8gU2F0ZWxsaXRlIHJhc3RlciB1c2VzIGJhc2UgMCDigJQgaXQgZG9lc24ndCBuZWVkIHRoZSB2ZWN0b3IgYmlhcyAoYSBjb2Fyc2VyIHJhc3RlclxuLy8gdGlsZSBqdXN0IGxvb2tzIHNvZnRlciByYXRoZXIgdGhhbiBkcm9wcGluZyBmZWF0dXJlcykuXG5jb25zdCBNQVBCT1hfR0xPQkVfVkVDVE9SX1pPT01fT0ZGU0VUID0gLTI7XG5jb25zdCBDQVJUT19HTE9CRV9WRUNUT1JfWk9PTV9PRkZTRVQgPSAtMjtcbmNvbnN0IEdMT0JFX1NBVEVMTElURV9aT09NX09GRlNFVCA9IDA7XG5cbi8vIFdob2xlLXdvcmxkIHRpbGUgZXh0ZW50IChXZWIgTWVyY2F0b3IgbGF0aXR1ZGUgbGltaXQpLiBSZXF1aXJlZCB3aGVuZXZlciBhXG4vLyBuZWdhdGl2ZSBgem9vbU9mZnNldGAgaXMgdXNlZDogZGVjaydzIGBnZXRUaWxlSW5kaWNlc2AgcmV0dXJucyBOTyB0aWxlcyB3aGVuXG4vLyB0aGUgdGFyZ2V0IHpvb20gZHJvcHMgYmVsb3cgYG1pblpvb21gICp1bmxlc3MqIGFuIGBleHRlbnRgIGlzIHNldCAoaW4gd2hpY2hcbi8vIGNhc2UgaXQgY2xhbXBzIHRvIGBtaW5ab29tYCBpbnN0ZWFkKS4gV2l0aG91dCB0aGlzLCB6b29taW5nIG91dCBvciBwYW5uaW5nXG4vLyB0b3dhcmQgdGhlIHBvbGVzICh3aGVyZSBkZWNrIDkncyBnbG9iZSBjb250cm9sbGVyIGxvd2VycyB0aGUgZWZmZWN0aXZlIHpvb20pXG4vLyBtYWtlcyB0aGUgd2hvbGUgZ2xvYmUgYmFzZW1hcCBkaXNhcHBlYXIuXG5jb25zdCBHTE9CRV9USUxFX0VYVEVOVDogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPSBbXG4gIC0xODAsIC04NS4wNTExMjksIDE4MCwgODUuMDUxMTI5XG5dO1xuXG4vLyBNYXggKm5hdGl2ZSogem9vbSBvZiBlYWNoIHZlY3RvciB0aWxlIHNvdXJjZS4gU2V0IHRoaXMgKG5vdCBhbiBhcmJpdHJhcmlseVxuLy8gaGlnaCBudW1iZXIpIHNvIGRlY2sgb3Zlcnpvb21zIOKAlCBpLmUuIGtlZXBzIHJlbmRlcmluZyB0aGUgZGVlcGVzdCByZWFsIHRpbGVcbi8vIHdoZW4gdGhlIHZpZXcgem9vbXMgcGFzdCBpdCDigJQgaW5zdGVhZCBvZiByZXF1ZXN0aW5nIHRpbGVzIHRoYXQgZG9uJ3QgZXhpc3Rcbi8vIGFuZCA0MDQgKHdoaWNoIHNob3dzIHVwIGFzIGVtcHR5IHJlY3RhbmdsZXMpLiBUaGUgcmF3IGAudmVjdG9yLnBiZmAgL2AubXZ0YFxuLy8gZW5kcG9pbnRzIGRvIE5PVCBhdXRvLW92ZXJ6b29tIHRoZSB3YXkgTWFwYm94IEdMIGRvZXMuXG4vLyAgIC0gbWFwYm94LXN0cmVldHMtdjggaGFzIGRhdGEgdXAgdG8gejE2XG4vLyAgIC0gQ0FSVE8gY2FydG8uc3RyZWV0cyB2MSBoYXMgZGF0YSB1cCB0byB6MTRcbmNvbnN0IE1BUEJPWF9WRUNUT1JfTUFYX0RBVEFfWk9PTSA9IDE2O1xuY29uc3QgQ0FSVE9fVkVDVE9SX01BWF9EQVRBX1pPT00gPSAxNDtcblxuLyoqXG4gKiBkZWNrLmdsIDkncyBnbG9iZSBjb3VwbGVzIHpvb20gdG8gbGF0aXR1ZGUgdmlhIGB6b29tQWRqdXN0YCAoc2VlXG4gKiBnbG9iZS12aWV3cG9ydC5qcyk6IGBzY2FsZSA9IDJeKHpvb20gLSB6b29tQWRqdXN0KGxhdCkpYCwgYW5kIGl0cyBjb250cm9sbGVyXG4gKiAqbG93ZXJzKiB0aGUgc3RvcmVkIGB6b29tYCBhcyB5b3UgcGFuIHRvd2FyZCB0aGUgcG9sZXMgdG8ga2VlcCB0aGUgZ2xvYmUnc1xuICogb24tc2NyZWVuIHNpemUgY29uc3RhbnQuIFRpbGUgTE9ELCBob3dldmVyLCBpcyBzZWxlY3RlZCBmcm9tIHRoZSByYXcgYHpvb21gLFxuICogc28gcm90YXRpbmcgdG93YXJkIGEgcG9sZSBzaWxlbnRseSBkcm9wcyB0aGUgTE9EIGFuZCB0aGlucyBvdXQgbGFiZWxzLlxuICogUmVwbGljYXRlZCBmcm9tIGBAZGVjay5nbC9jb3JlYCBnbG9iZS12aWV3cG9ydC5qcyBgem9vbUFkanVzdGAuXG4gKi9cbmZ1bmN0aW9uIHpvb21BZGp1c3QobGF0aXR1ZGU6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLmxvZzIoTWF0aC5QSSAqIE1hdGguY29zKChsYXRpdHVkZSAqIE1hdGguUEkpIC8gMTgwKSk7XG59XG5cbi8qKlxuICogTGF0aXR1ZGUgY29tcGVuc2F0aW9uIHRvIGFkZCB0byBhIGdsb2JlIHRpbGUgbGF5ZXIncyBgem9vbU9mZnNldGAsIHNvIHRpbGUgTE9EXG4gKiB0cmFja3MgdGhlICp2aXN1YWwqIChvbi1zY3JlZW4pIHNjYWxlIGluc3RlYWQgb2YgdGhlIGxhdGl0dWRlLWFkanVzdGVkIG1lcmNhdG9yXG4gKiB6b29tLiBUaGlzIGNhbmNlbHMgdGhlIHBhbi1pbmR1Y2VkIHpvb20gZHJvcCwga2VlcGluZyB0aWxlIGRldGFpbC9sYWJlbHNcbiAqIGNvbnN0YW50IHdoaWxlIHJvdGF0aW5nIHRvd2FyZCB0aGUgcG9sZXMuXG4gKi9cbmZ1bmN0aW9uIGdsb2JlTGF0aXR1ZGVab29tQ29tcGVuc2F0aW9uKGxhdGl0dWRlPzogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKGxhdGl0dWRlID09IG51bGwgfHwgIU51bWJlci5pc0Zpbml0ZShsYXRpdHVkZSkpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICAvLyBDbGFtcCBhd2F5IGZyb20gdGhlIHBvbGVzIHRvIGF2b2lkIGxvZzIoMCkgPSAtSW5maW5pdHkgYXQgfGxhdHwgPSA5MC5cbiAgY29uc3QgY2xhbXBlZCA9IE1hdGgubWF4KC04NSwgTWF0aC5taW4oODUsIGxhdGl0dWRlKSk7XG4gIHJldHVybiB6b29tQWRqdXN0KDApIC0gem9vbUFkanVzdChjbGFtcGVkKTtcbn1cblxuLyoqXG4gKiBHbG9iZSBiYXNlbWFwIHRpbGUgcHJvdmlkZXIuXG4gKlxuICogLSBgbWFwYm94YCB1c2VzIE1hcGJveCB2ZWN0b3IvcmFzdGVyIHRpbGVzIGFuZCByZXF1aXJlcyBhbiBhY2Nlc3MgdG9rZW4uXG4gKiAtIGBjYXJ0b2AgdXNlcyBDQVJUTydzIGZyZWUgT3Blbk1hcFRpbGVzIHZlY3RvciB0aWxlcyArIEVzcmkgV29ybGQgSW1hZ2VyeVxuICogICByYXN0ZXIsIGFuZCBuZWVkcyBubyB0b2tlbi4gVXNlZCBhcyBhbiBhdXRvbWF0aWMgZmFsbGJhY2sgd2hlbiBubyBNYXBib3hcbiAqICAgdG9rZW4gaXMgYXZhaWxhYmxlIChlLmcuIE1hcExpYnJlIC8gQ0FSVE8gYmFzZW1hcCBzZXR1cHMpLCBzbyB0aGUgZ2xvYmVcbiAqICAgYmFzZW1hcCBzdGlsbCByZW5kZXJzIGluc3RlYWQgb2Ygc2hvd2luZyBhIHNvbGlkLWNvbG9yIHNwaGVyZS5cbiAqL1xuZXhwb3J0IHR5cGUgR2xvYmVCYXNlbWFwUHJvdmlkZXIgPSAnbWFwYm94JyB8ICdjYXJ0byc7XG5cbi8qKlxuICogUmVzb2x2ZSB3aGljaCBnbG9iZSBiYXNlbWFwIHRpbGUgcHJvdmlkZXIgdG8gdXNlLlxuICpcbiAqIFRoZSBnbG9iZSBzaG91bGQgZm9sbG93IHRoZSAqc2VsZWN0ZWQgYmFzZW1hcCBzdHlsZSdzKiByZW5kZXJpbmcgbGlicmFyeSBzb1xuICogaXQgc3RheXMgY29uc2lzdGVudCB3aXRoIHRoZSBmbGF0IDJEIG1hcDogYSBNYXBMaWJyZS9DQVJUTyBzdHlsZSB1c2VzIHRoZVxuICogZnJlZSBDQVJUTyB0aWxlcyAoZXZlbiB3aGVuIGEgTWFwYm94IHRva2VuIGlzIGF2YWlsYWJsZSksIGFuZCBhIE1hcGJveCBzdHlsZVxuICogdXNlcyBNYXBib3ggdGlsZXMuIEEgTWFwYm94IHN0eWxlIHdpdGggbm8gdG9rZW4gZmFsbHMgYmFjayB0byBDQVJUTyBzbyB0aGVcbiAqIGdsb2JlIHN0aWxsIHJlbmRlcnMgaW5zdGVhZCBvZiBzaG93aW5nIGEgYmFyZSBjb2xvcmVkIHNwaGVyZS5cbiAqXG4gKiBAcGFyYW0gYmFzZU1hcExpYnJhcnkgdGhlIHNlbGVjdGVkIHN0eWxlJ3MgbGlicmFyeSAoJ21hcGJveCcgfCAnbWFwbGlicmUnKSxcbiAqICAgZS5nLiBmcm9tIGBnZXRCYXNlTWFwTGlicmFyeShjdXJyZW50U3R5bGUpYC5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlc29sdmVHbG9iZUJhc2VtYXBQcm92aWRlciA9IChcbiAgYmFzZU1hcExpYnJhcnk6ICdtYXBib3gnIHwgJ21hcGxpYnJlJyB8IHVuZGVmaW5lZCxcbiAgbWFwYm94QXBpQWNjZXNzVG9rZW4/OiBzdHJpbmdcbik6IEdsb2JlQmFzZW1hcFByb3ZpZGVyID0+IHtcbiAgaWYgKGJhc2VNYXBMaWJyYXJ5ID09PSAnbWFwbGlicmUnKSB7XG4gICAgcmV0dXJuICdjYXJ0byc7XG4gIH1cbiAgaWYgKGJhc2VNYXBMaWJyYXJ5ID09PSAnbWFwYm94Jykge1xuICAgIHJldHVybiBtYXBib3hBcGlBY2Nlc3NUb2tlbiA/ICdtYXBib3gnIDogJ2NhcnRvJztcbiAgfVxuICAvLyBVbmtub3duIGxpYnJhcnk6IHByZWZlciBNYXBib3ggd2hlbiBhIHRva2VuIGV4aXN0cywgb3RoZXJ3aXNlIENBUlRPLlxuICByZXR1cm4gbWFwYm94QXBpQWNjZXNzVG9rZW4gPyAnbWFwYm94JyA6ICdjYXJ0byc7XG59O1xuXG4vLyBDQVJUTyBmcmVlIHZlY3RvciB0aWxlcyAoT3Blbk1hcFRpbGVzIHNjaGVtYSwgbm8gQVBJIGtleSByZXF1aXJlZCkuXG5jb25zdCBDQVJUT19WRUNUT1JfVElMRV9VUkxTID0gW1xuICAnaHR0cHM6Ly90aWxlcy1hLmJhc2VtYXBzLmNhcnRvY2RuLmNvbS92ZWN0b3J0aWxlcy9jYXJ0by5zdHJlZXRzL3YxL3t6fS97eH0ve3l9Lm12dCcsXG4gICdodHRwczovL3RpbGVzLWIuYmFzZW1hcHMuY2FydG9jZG4uY29tL3ZlY3RvcnRpbGVzL2NhcnRvLnN0cmVldHMvdjEve3p9L3t4fS97eX0ubXZ0JyxcbiAgJ2h0dHBzOi8vdGlsZXMtYy5iYXNlbWFwcy5jYXJ0b2Nkbi5jb20vdmVjdG9ydGlsZXMvY2FydG8uc3RyZWV0cy92MS97en0ve3h9L3t5fS5tdnQnLFxuICAnaHR0cHM6Ly90aWxlcy1kLmJhc2VtYXBzLmNhcnRvY2RuLmNvbS92ZWN0b3J0aWxlcy9jYXJ0by5zdHJlZXRzL3YxL3t6fS97eH0ve3l9Lm12dCdcbl07XG5cbi8vIEZyZWUgc2F0ZWxsaXRlIHJhc3RlciBmYWxsYmFjayAoRXNyaSBXb3JsZCBJbWFnZXJ5LCBubyBBUEkga2V5IHJlcXVpcmVkKS5cbmNvbnN0IEVTUklfV09STERfSU1BR0VSWV9VUkwgPVxuICAnaHR0cHM6Ly9zZXJ2ZXIuYXJjZ2lzb25saW5lLmNvbS9BcmNHSVMvcmVzdC9zZXJ2aWNlcy9Xb3JsZF9JbWFnZXJ5L01hcFNlcnZlci90aWxlL3t6fS97eX0ve3h9JztcblxuLyoqXG4gKiBNYXBzIGEgcmF3IE1WVCBzb3VyY2UtbGF5ZXIgbmFtZSB0byBhIG5vcm1hbGl6ZWQgc2VtYW50aWMgbGF5ZXIga2luZCwgc28gdGhlXG4gKiBmaWxsL2xpbmUvbGFiZWwgYWNjZXNzb3JzIHdvcmsgYWNyb3NzIGJvdGggdGhlIE1hcGJveCAoYG1hcGJveC1zdHJlZXRzLXY4YClcbiAqIGFuZCBDQVJUTy9PcGVuTWFwVGlsZXMgc2NoZW1hcy5cbiAqXG4gKiB8IHNlbWFudGljIHwgbWFwYm94ICAgICAgICB8IG9wZW5tYXB0aWxlcyB8XG4gKiB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLSB8XG4gKiB8IHdhdGVyICAgIHwgYHdhdGVyYCAgICAgICB8IGB3YXRlcmAgICAgICB8XG4gKiB8IGFkbWluICAgIHwgYGFkbWluYCAgICAgICB8IGBib3VuZGFyeWAgICB8XG4gKiB8IGxhYmVsICAgIHwgYHBsYWNlX2xhYmVsYCB8IGBwbGFjZWAgICAgICB8XG4gKi9cbnR5cGUgQmFzZW1hcExheWVyS2luZCA9ICd3YXRlcicgfCAnYWRtaW4nIHwgJ2xhYmVsJyB8ICdvdGhlcic7XG5cbmZ1bmN0aW9uIGdldEJhc2VtYXBMYXllcktpbmQobGF5ZXJOYW1lPzogc3RyaW5nKTogQmFzZW1hcExheWVyS2luZCB7XG4gIHN3aXRjaCAobGF5ZXJOYW1lKSB7XG4gICAgY2FzZSAnd2F0ZXInOlxuICAgICAgcmV0dXJuICd3YXRlcic7XG4gICAgY2FzZSAnYWRtaW4nOlxuICAgIGNhc2UgJ2JvdW5kYXJ5JzpcbiAgICAgIHJldHVybiAnYWRtaW4nO1xuICAgIGNhc2UgJ3BsYWNlX2xhYmVsJzpcbiAgICBjYXNlICdwbGFjZSc6XG4gICAgICByZXR1cm4gJ2xhYmVsJztcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICdvdGhlcic7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgR2xvYmVBdHRyaWJ1dGlvbiA9IHtsYWJlbDogc3RyaW5nOyBocmVmOiBzdHJpbmd9O1xuXG5jb25zdCBNQVBCT1hfQVRUUklCVVRJT046IEdsb2JlQXR0cmlidXRpb24gPSB7XG4gIGxhYmVsOiAnwqkgTWFwYm94JyxcbiAgaHJlZjogJ2h0dHBzOi8vd3d3Lm1hcGJveC5jb20vYWJvdXQvbWFwcy8nXG59O1xuY29uc3QgT1NNX0FUVFJJQlVUSU9OOiBHbG9iZUF0dHJpYnV0aW9uID0ge1xuICBsYWJlbDogJ8KpIE9wZW5TdHJlZXRNYXAnLFxuICBocmVmOiAnaHR0cHM6Ly93d3cub3BlbnN0cmVldG1hcC5vcmcvY29weXJpZ2h0J1xufTtcbmNvbnN0IENBUlRPX0FUVFJJQlVUSU9OOiBHbG9iZUF0dHJpYnV0aW9uID0ge1xuICBsYWJlbDogJ8KpIENBUlRPJyxcbiAgaHJlZjogJ2h0dHBzOi8vY2FydG8uY29tL2F0dHJpYnV0aW9ucydcbn07XG5jb25zdCBFU1JJX0FUVFJJQlVUSU9OOiBHbG9iZUF0dHJpYnV0aW9uID0ge1xuICBsYWJlbDogJ1Bvd2VyZWQgYnkgRXNyaScsXG4gIGhyZWY6ICdodHRwczovL3d3dy5lc3JpLmNvbS8nXG59O1xuXG4vKipcbiAqIFJlc29sdmUgdGhlIHRpbGUtc291cmNlIGF0dHJpYnV0aW9uIGVudHJpZXMgZm9yIHRoZSBnbG9iZSBiYXNlbWFwLiBkZWNrLmdsXG4gKiByZW5kZXJzIHRoZSBnbG9iZSBiYXNlbWFwIHRpbGVzIGl0c2VsZiAobm90IHRoZSBiYXNlIE1hcGxpYnJlL01hcGJveCBtYXApLCBzb1xuICogdGhlIGJhc2UgbWFwJ3MgYXR0cmlidXRpb24gbWFjaGluZXJ5IG5ldmVyIHNlZXMgdGhlbS4gVGhpcyBsZXRzIHRoZSBVSSBjcmVkaXRcbiAqIHRoZSBhY3R1YWwgdGlsZSBwcm92aWRlcihzKSBpbiBnbG9iZSBtb2RlLlxuICovXG5leHBvcnQgY29uc3QgZ2V0R2xvYmVCYXNlbWFwQXR0cmlidXRpb25zID0gKHtcbiAgZ2xvYmUsXG4gIG1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICBtYXBTdHlsZVR5cGUsXG4gIGJhc2VtYXBQcm92aWRlclxufToge1xuICBnbG9iZT86IEdsb2JlO1xuICBtYXBib3hBcGlBY2Nlc3NUb2tlbj86IHN0cmluZztcbiAgbWFwU3R5bGVUeXBlPzogc3RyaW5nO1xuICBiYXNlbWFwUHJvdmlkZXI/OiBHbG9iZUJhc2VtYXBQcm92aWRlcjtcbn0pOiBHbG9iZUF0dHJpYnV0aW9uW10gPT4ge1xuICBpZiAoIWdsb2JlPy5lbmFibGVkIHx8ICFnbG9iZS5jb25maWc/LmJhc2VtYXApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBwcm92aWRlcjogR2xvYmVCYXNlbWFwUHJvdmlkZXIgPVxuICAgIGJhc2VtYXBQcm92aWRlciA/PyByZXNvbHZlR2xvYmVCYXNlbWFwUHJvdmlkZXIodW5kZWZpbmVkLCBtYXBib3hBcGlBY2Nlc3NUb2tlbik7XG5cbiAgaWYgKHByb3ZpZGVyID09PSAnbWFwYm94Jykge1xuICAgIHJldHVybiBtYXBib3hBcGlBY2Nlc3NUb2tlbiA/IFtNQVBCT1hfQVRUUklCVVRJT04sIE9TTV9BVFRSSUJVVElPTl0gOiBbXTtcbiAgfVxuXG4gIGNvbnN0IGlzU2F0ZWxsaXRlID0gbWFwU3R5bGVUeXBlID09PSAnc2F0ZWxsaXRlJyB8fCBtYXBTdHlsZVR5cGUgPT09ICdzYXRlbGxpdGUtc3RyZWV0JztcbiAgLy8gQ0FSVE8gdmVjdG9yIHRpbGVzIGFyZSBPcGVuU3RyZWV0TWFwLWRlcml2ZWQ7IEVzcmkgaW1hZ2VyeSBpcyBjcmVkaXRlZCBzZXBhcmF0ZWx5LlxuICByZXR1cm4gaXNTYXRlbGxpdGVcbiAgICA/IFtFU1JJX0FUVFJJQlVUSU9OLCBDQVJUT19BVFRSSUJVVElPTiwgT1NNX0FUVFJJQlVUSU9OXVxuICAgIDogW0NBUlRPX0FUVFJJQlVUSU9OLCBPU01fQVRUUklCVVRJT05dO1xufTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBjb25zdCBnZXRHbG9iZUJhc2VMYXllcnMgPSAoe1xuICBtYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgZ2xvYmUsXG4gIG1hcFN0eWxlVHlwZSxcbiAgYmFzZW1hcFByb3ZpZGVyLFxuICBsYXRpdHVkZSxcbiAgem9vbVxufToge1xuICBtYXBib3hBcGlBY2Nlc3NUb2tlbjogc3RyaW5nO1xuICBnbG9iZTogR2xvYmU7XG4gIG1hcFN0eWxlVHlwZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFdoaWNoIHRpbGUgcHJvdmlkZXIgdG8gdXNlIGZvciB0aGUgZ2xvYmUgYmFzZW1hcC4gRGVmYXVsdHMgdG8gYG1hcGJveGAgd2hlblxuICAgKiBhIHRva2VuIGlzIHByZXNlbnQsIG90aGVyd2lzZSBmYWxscyBiYWNrIHRvIHRoZSB0b2tlbi1mcmVlIGBjYXJ0b2AgdGlsZXMuXG4gICAqL1xuICBiYXNlbWFwUHJvdmlkZXI/OiBHbG9iZUJhc2VtYXBQcm92aWRlcjtcbiAgLyoqXG4gICAqIEN1cnJlbnQgY2FtZXJhIGNlbnRlciBsYXRpdHVkZS4gVXNlZCB0byBrZWVwIHRpbGUgTE9EIGNvbnN0YW50IHdoaWxlIHJvdGF0aW5nXG4gICAqIHRvd2FyZCB0aGUgcG9sZXMgKGRlY2suZ2wgOSBsb3dlcnMgdGhlIGVmZmVjdGl2ZSB6b29tIG5lYXIgdGhlIHBvbGVzKS4gV2hlblxuICAgKiBvbWl0dGVkLCBubyBsYXRpdHVkZSBjb21wZW5zYXRpb24gaXMgYXBwbGllZCAoZXF1YXRvciBiZWhhdmlvcikuXG4gICAqL1xuICBsYXRpdHVkZT86IG51bWJlcjtcbiAgLyoqXG4gICAqIEN1cnJlbnQgbWFwIHpvb20gbGV2ZWwuIFVzZWQgdG8gZmFkZSB0aGUgYXRtb3NwaGVyZSBlZmZlY3RzIG91dCB3aGVuIHRoZSB1c2VyXG4gICAqIHpvb21zIGluIHBhc3QgYSBjZXJ0YWluIHRocmVzaG9sZCAobWlycm9ycyBHb29nbGUgTWFwcyBnbG9iZSBiZWhhdmlvdXIpLlxuICAgKi9cbiAgem9vbT86IG51bWJlcjtcbn0pOiBMYXllcltdID0+IHtcbiAgY29uc3Qge2NvbmZpZ30gPSBnbG9iZTtcblxuICBjb25zdCBpc1NhdGVsbGl0ZSA9IG1hcFN0eWxlVHlwZSA9PT0gJ3NhdGVsbGl0ZSc7XG4gIGNvbnN0IGlzU2F0ZWxsaXRlU3RyZWV0ID0gbWFwU3R5bGVUeXBlID09PSAnc2F0ZWxsaXRlLXN0cmVldCc7XG5cbiAgY29uc3QgbGF0Wm9vbUNvbXBlbnNhdGlvbiA9IGdsb2JlTGF0aXR1ZGVab29tQ29tcGVuc2F0aW9uKGxhdGl0dWRlKTtcblxuICAvLyBGYWxsIGJhY2sgdG8gdGhlIGZyZWUgQ0FSVE8gdGlsZXMgd2hlbmV2ZXIgbm8gTWFwYm94IHRva2VuIGlzIGF2YWlsYWJsZSBzb1xuICAvLyB0aGUgZ2xvYmUgYmFzZW1hcCBzdGlsbCByZW5kZXJzIChtYXRjaGVzIGtlcGxlcidzIGRlZmF1bHQgdG9rZW4tZnJlZVxuICAvLyBNYXBMaWJyZS9DQVJUTyBiYXNlbWFwcykuIENhbGxlcnMgc2hvdWxkIHBhc3MgYW4gZXhwbGljaXQgYGJhc2VtYXBQcm92aWRlcmBcbiAgLy8gKGRlcml2ZWQgZnJvbSB0aGUgc2VsZWN0ZWQgc3R5bGUpIHNvIHRoZSBnbG9iZSBmb2xsb3dzIHRoZSAyRCBiYXNlbWFwLlxuICBjb25zdCBwcm92aWRlcjogR2xvYmVCYXNlbWFwUHJvdmlkZXIgPVxuICAgIGJhc2VtYXBQcm92aWRlciA/PyByZXNvbHZlR2xvYmVCYXNlbWFwUHJvdmlkZXIodW5kZWZpbmVkLCBtYXBib3hBcGlBY2Nlc3NUb2tlbik7XG4gIGNvbnN0IHVzZUNhcnRvID0gcHJvdmlkZXIgPT09ICdjYXJ0byc7XG4gIGNvbnN0IGhhc1RpbGVBY2Nlc3MgPSB1c2VDYXJ0byB8fCBCb29sZWFuKG1hcGJveEFwaUFjY2Vzc1Rva2VuKTtcblxuICByZXR1cm4gW1xuICAgIC8vIEh1Z2UgaGFsbyBiZWhpbmQgdGhlIHRoaW4gcmVhbGlzdGljIGxpbWIgc28gYm90aCBjYW4gYmUgdmlzaWJsZSB0b2dldGhlci5cbiAgICBjb25maWcuYXRtb3NwaGVyZSA/IGdldEdsb2JlSHVnZUhhbG9MYXllcih7Y29uZmlnLCB6b29tfSkgOiBudWxsLFxuICAgIGNvbmZpZy5hdG1vc3BoZXJlID8gZ2V0R2xvYmVBdG1vc3BoZXJlU2t5TGF5ZXIoe2NvbmZpZywgem9vbX0pIDogbnVsbCxcblxuICAgIC8vIERlcHRoLW9ubHkgY3Jvc3Mtc2VjdGlvbiBkaXNrOiB3cml0ZXMgZGVwdGggYXQgdGhlIGdsb2JlJ3Mgc2lsaG91ZXR0ZSBzb1xuICAgIC8vIGZhci1zaWRlIGdlb21ldHJ5IChhcmNzL2xpbmVzKSBpcyBvY2NsdWRlZCBieSB0aGUgcGxhbmV0LlxuICAgIGdldEdsb2JlRGVwdGhEaXNrTGF5ZXIoe2ZpbGxDb2xvcjogY29uZmlnLnN1cmZhY2VDb2xvcn0pLFxuXG4gICAgLy8gQmFja2dyb3VuZCBzdXJmYWNlIHBvbHlnb25cbiAgICAoIWNvbmZpZy5iYXNlbWFwIHx8ICghaXNTYXRlbGxpdGUgJiYgIWlzU2F0ZWxsaXRlU3RyZWV0KSkgJiZcbiAgICAgIG5ldyBTb2xpZFBvbHlnb25MYXllcih7XG4gICAgICAgIGlkOiAnZ2xvYmUtYmFja2dyb3VuZCcsXG4gICAgICAgIGRhdGE6IEJBQ0tHUk9VTkRfREFUQSxcbiAgICAgICAgZ2V0UG9seWdvbjogKChkOiBudW1iZXJbXVtdKSA9PiBkKSBhcyBhbnksXG4gICAgICAgIGZpbGxlZDogdHJ1ZSxcbiAgICAgICAgZ2V0RmlsbENvbG9yOiBjb25maWcuc3VyZmFjZUNvbG9yIGFzIGFueSxcbiAgICAgICAgcGFyYW1ldGVyczogQkFDS0dST1VORF9QQVJBTUVURVJTXG4gICAgICB9KSxcblxuICAgIC8vIEZpbGwgaG9sZSBhdCBub3J0aCBwb2xlXG4gICAgY29uZmlnLmJhc2VtYXAgJiZcbiAgICAgIG5ldyBTb2xpZFBvbHlnb25MYXllcih7XG4gICAgICAgIGlkOiAnZ2xvYmUtYmFja2dyb3VuZC1ub3J0aC1wb2xlJyxcbiAgICAgICAgZGF0YTogQkFDS0dST1VORF9OT1JUSF9QT0xFX0RBVEEsXG4gICAgICAgIGdldFBvbHlnb246ICgoZDogbnVtYmVyW11bXSkgPT4gZCkgYXMgYW55LFxuICAgICAgICBmaWxsZWQ6IHRydWUsXG4gICAgICAgIGdldEZpbGxDb2xvcjogKGNvbmZpZy53YXRlciA/IGNvbmZpZy53YXRlckNvbG9yIDogY29uZmlnLnN1cmZhY2VDb2xvcikgYXMgYW55LFxuICAgICAgICBwYXJhbWV0ZXJzOiBCQUNLR1JPVU5EX1BBUkFNRVRFUlNcbiAgICAgIH0pLFxuXG4gICAgLy8gU2F0ZWxsaXRlIHRpbGVzXG4gICAgY29uZmlnLmJhc2VtYXAgJiZcbiAgICAgIChpc1NhdGVsbGl0ZSB8fCBpc1NhdGVsbGl0ZVN0cmVldCkgJiZcbiAgICAgIGhhc1RpbGVBY2Nlc3MgJiZcbiAgICAgIG5ldyBUaWxlTGF5ZXIoe1xuICAgICAgICBpZDogYGdsb2JlLXNhdGVsbGl0ZS10aWxlcy0ke3Byb3ZpZGVyfWAsXG4gICAgICAgIGRhdGE6IHVzZUNhcnRvXG4gICAgICAgICAgPyBbRVNSSV9XT1JMRF9JTUFHRVJZX1VSTF1cbiAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgYGh0dHBzOi8vYXBpLm1hcGJveC5jb20vdjQvbWFwYm94LnNhdGVsbGl0ZS97en0ve3h9L3t5fUAyeC5wbmc/YWNjZXNzX3Rva2VuPSR7bWFwYm94QXBpQWNjZXNzVG9rZW59YFxuICAgICAgICAgICAgXSxcbiAgICAgICAgbWluWm9vbTogMCxcbiAgICAgICAgbWF4Wm9vbTogdXNlQ2FydG8gPyAxOCA6IDE5LFxuICAgICAgICB6b29tT2Zmc2V0OiBHTE9CRV9TQVRFTExJVEVfWk9PTV9PRkZTRVQgKyBsYXRab29tQ29tcGVuc2F0aW9uLFxuICAgICAgICBleHRlbnQ6IEdMT0JFX1RJTEVfRVhURU5ULFxuICAgICAgICAvLyBFc3JpIHRpbGVzIGFyZSAyNTZweDsgTWFwYm94IEAyeCB0aWxlcyBhcmUgNTEycHguXG4gICAgICAgIHRpbGVTaXplOiB1c2VDYXJ0byA/IDI1NiA6IDUxMiAvIGRldmljZVBpeGVsUmF0aW8sXG4gICAgICAgIHJlbmRlclN1YkxheWVyczogKHByb3BzOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBiYm94OiB7d2VzdCwgc291dGgsIGVhc3QsIG5vcnRofVxuICAgICAgICAgIH0gPSBwcm9wcy50aWxlO1xuXG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBCaXRtYXBMYXllcihwcm9wcywge1xuICAgICAgICAgICAgICBfaW1hZ2VDb29yZGluYXRlU3lzdGVtOiBDT09SRElOQVRFX1NZU1RFTS5DQVJURVNJQU4sXG4gICAgICAgICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgaW1hZ2U6IHByb3BzLmRhdGEsXG4gICAgICAgICAgICAgIGJvdW5kczogW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXTtcbiAgICAgICAgfSxcbiAgICAgICAgcGFyYW1ldGVyczogQkFTRU1BUF9SQVNURVJfUEFSQU1FVEVSU1xuICAgICAgfSksXG5cbiAgICAvLyBWZWN0b3IgYmFzZW1hcCAoTVZUIGxhYmVscy9hZG1pbi93YXRlcilcbiAgICBjb25maWcuYmFzZW1hcCAmJlxuICAgICAgIWlzU2F0ZWxsaXRlICYmXG4gICAgICBoYXNUaWxlQWNjZXNzICYmXG4gICAgICBuZXcgTVZUTGF5ZXIoe1xuICAgICAgICAvLyBmb3JjZSB0aGUgbGF5ZXIgdG8gdXBkYXRlIHdoZW4gdGhlIHN0eWxlL2xhYmVsL3Byb3ZpZGVyIGNvbmZpZyBjaGFuZ2VzXG4gICAgICAgIGlkOiBgZ2xvYmUtYmFzZW1hcC1tdnQtbGF5ZXItJHtwcm92aWRlcn0tJHttYXBTdHlsZVR5cGV9YCxcbiAgICAgICAgZGF0YTogdXNlQ2FydG9cbiAgICAgICAgICA/IENBUlRPX1ZFQ1RPUl9USUxFX1VSTFNcbiAgICAgICAgICA6IGBodHRwczovL2EudGlsZXMubWFwYm94LmNvbS92NC9tYXBib3gubWFwYm94LXN0cmVldHMtdjgve3p9L3t4fS97eX0udmVjdG9yLnBiZj9hY2Nlc3NfdG9rZW49JHttYXBib3hBcGlBY2Nlc3NUb2tlbn1gLFxuICAgICAgICBtaW5ab29tOiAwLFxuICAgICAgICAvLyBPdmVyem9vbSBwYXN0IHRoZSBzb3VyY2UncyBuYXRpdmUgbWF4IGluc3RlYWQgb2YgNDA0LWluZyBvbiB0aWxlcyB0aGF0XG4gICAgICAgIC8vIGRvbid0IGV4aXN0ICh3aGljaCByZW5kZXJzIGFzIGVtcHR5IHJlY3RhbmdsZXMgYXQgaGlnaCB6b29tKS5cbiAgICAgICAgbWF4Wm9vbTogdXNlQ2FydG8gPyBDQVJUT19WRUNUT1JfTUFYX0RBVEFfWk9PTSA6IE1BUEJPWF9WRUNUT1JfTUFYX0RBVEFfWk9PTSxcbiAgICAgICAgem9vbU9mZnNldDpcbiAgICAgICAgICAodXNlQ2FydG8gPyBDQVJUT19HTE9CRV9WRUNUT1JfWk9PTV9PRkZTRVQgOiBNQVBCT1hfR0xPQkVfVkVDVE9SX1pPT01fT0ZGU0VUKSArXG4gICAgICAgICAgbGF0Wm9vbUNvbXBlbnNhdGlvbixcbiAgICAgICAgZXh0ZW50OiBHTE9CRV9USUxFX0VYVEVOVCxcbiAgICAgICAgYmluYXJ5OiBmYWxzZSxcbiAgICAgICAgcGFyYW1ldGVyczogQkFTRU1BUF9NVlRfUEFSQU1FVEVSUyxcbiAgICAgICAgbG9hZE9wdGlvbnM6IHVzZUNhcnRvXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIC8vIE9wZW5NYXBUaWxlcyBzY2hlbWE6IGBib3VuZGFyeWAgPSBhZG1pbiBsaW5lcywgYHBsYWNlYCA9IGxhYmVscy5cbiAgICAgICAgICAgICAgbXZ0OiB7XG4gICAgICAgICAgICAgICAgbGF5ZXJzOiBpc1NhdGVsbGl0ZVN0cmVldFxuICAgICAgICAgICAgICAgICAgPyBbJ3BsYWNlJywgJ2JvdW5kYXJ5J11cbiAgICAgICAgICAgICAgICAgIDogWydwbGFjZScsICdib3VuZGFyeScsICd3YXRlcicsICd0cmFuc3BvcnRhdGlvbiddXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgbXZ0OiB7XG4gICAgICAgICAgICAgICAgbGF5ZXJzOiBpc1NhdGVsbGl0ZVN0cmVldFxuICAgICAgICAgICAgICAgICAgPyBbJ3BsYWNlX2xhYmVsJywgJ2FkbWluJ11cbiAgICAgICAgICAgICAgICAgIDogWydwbGFjZV9sYWJlbCcsICdhZG1pbicsICd3YXRlcicsICdyb2FkJ11cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgLy8gUmVuZGVyIGFkbWluL3dhdGVyIHZpYSBHZW9Kc29uTGF5ZXIgYW5kIHBsYWNlIGxhYmVscyB2aWEgVGV4dExheWVyLlxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlbmRlclN1YkxheWVyczogKHByb3BzOiBhbnkpID0+IG5ldyBNVlRMYWJlbExheWVyKHByb3BzKSxcbiAgICAgICAgZ2V0RmlsbENvbG9yOiAoZjogYW55KSA9PiB7XG4gICAgICAgICAgc3dpdGNoIChnZXRCYXNlbWFwTGF5ZXJLaW5kKGYucHJvcGVydGllcy5sYXllck5hbWUpKSB7XG4gICAgICAgICAgICBjYXNlICd3YXRlcic6XG4gICAgICAgICAgICAgIHJldHVybiBjb25maWcud2F0ZXIgPyBjb25maWcud2F0ZXJDb2xvciA6IElOVklTSUJMRV9DT0xPUjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBjb25maWcuc3VyZmFjZUNvbG9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ2V0TGluZUNvbG9yOiAoZjogYW55KSA9PiB7XG4gICAgICAgICAgc3dpdGNoIChnZXRCYXNlbWFwTGF5ZXJLaW5kKGYucHJvcGVydGllcy5sYXllck5hbWUpKSB7XG4gICAgICAgICAgICBjYXNlICdhZG1pbic6XG4gICAgICAgICAgICAgIHJldHVybiBjb25maWcuYWRtaW5MaW5lcyA/IGNvbmZpZy5hZG1pbkxpbmVzQ29sb3IgOiBJTlZJU0lCTEVfQ09MT1I7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gY29uZmlnLnN1cmZhY2VDb2xvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdldExpbmVXaWR0aDogKGY6IGFueSkgPT4ge1xuICAgICAgICAgIHN3aXRjaCAoZ2V0QmFzZW1hcExheWVyS2luZChmLnByb3BlcnRpZXMubGF5ZXJOYW1lKSkge1xuICAgICAgICAgICAgY2FzZSAnYWRtaW4nOlxuICAgICAgICAgICAgICBzd2l0Y2ggKGYucHJvcGVydGllcy5hZG1pbl9sZXZlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgcmV0dXJuIDAuNzU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdXBkYXRlVHJpZ2dlcnM6IHtcbiAgICAgICAgICBnZXRGaWxsQ29sb3I6IFtjb25maWcud2F0ZXJDb2xvciwgY29uZmlnLnN1cmZhY2VDb2xvciwgY29uZmlnLndhdGVyXSxcbiAgICAgICAgICBnZXRMaW5lQ29sb3I6IFtjb25maWcuYWRtaW5MaW5lc0NvbG9yLCBjb25maWcuc3VyZmFjZUNvbG9yLCBjb25maWcuYWRtaW5MaW5lc11cbiAgICAgICAgfSxcbiAgICAgICAgbGluZVdpZHRoVW5pdHM6ICdwaXhlbHMnLFxuICAgICAgICBsaW5lV2lkdGhNaW5QaXhlbHM6IDAsXG4gICAgICAgIGxpbmVXaWR0aE1heFBpeGVsczogMjAsXG4gICAgICAgIGdldFBvaW50UmFkaXVzOiAwLFxuICAgICAgICBwb2ludFJhZGl1c01pblBpeGVsczogMFxuICAgICAgfSBhcyBhbnkpXG4gIF0uZmlsdGVyKEJvb2xlYW4pIGFzIExheWVyW107XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0R2xvYmVUb3BMYXllcnMgPSAoe2dsb2JlLCB6b29tfToge2dsb2JlOiBHbG9iZTsgem9vbT86IG51bWJlcn0pOiBMYXllcltdID0+IHtcbiAgY29uc3Qge2NvbmZpZ30gPSBnbG9iZTtcbiAgcmV0dXJuIFtjb25maWcuYXRtb3NwaGVyZSA/IGdldEdsb2JlQXRtb3NwaGVyZUxheWVyKHtjb25maWcsIHpvb219KSA6IG51bGxdLmZpbHRlcihCb29sZWFuKSBhcyBMYXllcltdO1xufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTs7QUFFQSxTQUFRQSxpQkFBaUIsUUFBYyxlQUFlO0FBQ3RELFNBQVFDLGlCQUFpQixFQUFFQyxXQUFXLFFBQU8saUJBQWlCO0FBQzlELFNBQVFDLFNBQVMsRUFBRUMsUUFBUSxRQUFPLHFCQUFxQjtBQUt2RCxTQUFRQyx1QkFBdUIsRUFBRUMsMEJBQTBCLEVBQUVDLHFCQUFxQixRQUFPLG9CQUFvQjtBQUM3RyxTQUFRQyxzQkFBc0IsUUFBTywwQkFBMEI7QUFDL0QsU0FBUUMsYUFBYSxRQUFPLG1CQUFtQjtBQUkvQyxJQUFNQyxnQkFBZ0IsR0FBR0MsSUFBSSxDQUFDQyxHQUFHLENBQy9CLENBQUMsRUFDQSxPQUFPQyxNQUFNLEtBQUssV0FBVyxJQUFJQSxNQUFNLENBQUNILGdCQUFnQixJQUFLLENBQ2hFLENBQUM7QUFFRCxJQUFNSSxxQkFBcUIsR0FBRztFQUM1QkMsU0FBUyxFQUFFLElBQUk7RUFDZkMsSUFBSSxFQUFFLElBQUk7RUFDVkMsU0FBUyxFQUFFO0FBQ2IsQ0FBQztBQUVELElBQU1DLHlCQUF5QixHQUFHO0VBQ2hDRCxTQUFTLEVBQUU7QUFDYixDQUFDO0FBRUQsSUFBTUUsZUFBZSxHQUFHLENBQ3RCLENBQ0UsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFDVixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFDUCxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFDVCxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUNWLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQ1IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUNaLENBQ0Y7QUFFRCxJQUFNQywwQkFBMEIsR0FBRyxDQUNqQyxDQUNFLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQ1YsQ0FBQyxDQUFD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
@@ -2,9 +2,11 @@
2
2
  // Copyright contributors to the kepler.gl project
3
3
 
4
4
  /**
5
- * Generates a CSS-compatible star-field background image as a data URL.
6
- * The stars are rendered onto an offscreen canvas, tiled seamlessly via CSS
7
- * `background-repeat`. The result is deterministic (seeded PRNG) and cached
5
+ * Generates a tileable star-field used behind the globe.
6
+ * The live map and video-export preview paint it as a CSS `background-image`
7
+ * with `background-repeat: repeat`. Video-export capture (which only reads
8
+ * canvas pixels) tiles the same image onto a 2D context via
9
+ * `drawStarsBackground`. The result is deterministic (seeded PRNG) and cached
8
10
  * so it's only generated once.
9
11
  */
10
12
 
@@ -24,25 +26,19 @@ function seededRandom(seed) {
24
26
  // (SSR or unsupported browser), so that `url(...)` never resolves to an empty
25
27
  // value that could trigger a request for the current document.
26
28
  var TRANSPARENT_PIXEL = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=';
29
+ var cachedCanvas = null;
27
30
  var cachedDataUrl = null;
28
-
29
- /**
30
- * Returns a data URL of a tileable star-field image (512×512 PNG).
31
- * Generates the image once and caches it for subsequent calls.
32
- */
33
- export function getStarsBackgroundImage() {
34
- if (cachedDataUrl) return cachedDataUrl;
31
+ function generateStarsTile() {
35
32
  if (typeof document === 'undefined') {
36
- // SSR fallback: return a transparent 1x1 pixel to avoid url() triggering a page request
37
- return TRANSPARENT_PIXEL;
33
+ return null;
38
34
  }
39
35
  var canvas = document.createElement('canvas');
40
36
  canvas.width = STAR_CANVAS_SIZE;
41
37
  canvas.height = STAR_CANVAS_SIZE;
42
38
  var ctx = canvas.getContext('2d');
43
- if (!ctx) return cachedDataUrl = TRANSPARENT_PIXEL;
39
+ if (!ctx) return null;
44
40
 
45
- // Transparent background so CSS backgroundColor shows through
41
+ // Transparent background so CSS backgroundColor / canvas fill shows through
46
42
  ctx.clearRect(0, 0, STAR_CANVAS_SIZE, STAR_CANVAS_SIZE);
47
43
  var random = seededRandom(42);
48
44
  for (var i = 0; i < STAR_COUNT; i++) {
@@ -57,7 +53,40 @@ export function getStarsBackgroundImage() {
57
53
  ctx.fillStyle = "rgba(".concat(brightness, ", ").concat(brightness, ", ").concat(brightness, ", ").concat(alpha, ")");
58
54
  ctx.fill();
59
55
  }
56
+ return canvas;
57
+ }
58
+ function getStarsTileCanvas() {
59
+ if (cachedCanvas) return cachedCanvas;
60
+ cachedCanvas = generateStarsTile();
61
+ return cachedCanvas;
62
+ }
63
+
64
+ /**
65
+ * Returns a data URL of a tileable star-field image (512×512 PNG).
66
+ * Generates the image once and caches it for subsequent calls.
67
+ */
68
+ export function getStarsBackgroundImage() {
69
+ if (cachedDataUrl) return cachedDataUrl;
70
+ var canvas = getStarsTileCanvas();
71
+ if (!canvas) {
72
+ // SSR / missing 2D context: return a transparent 1x1 pixel so url() never
73
+ // resolves to an empty value that could trigger a request for the document.
74
+ return cachedDataUrl = TRANSPARENT_PIXEL;
75
+ }
60
76
  cachedDataUrl = canvas.toDataURL('image/png');
61
77
  return cachedDataUrl;
62
78
  }
63
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTVEFSX0NBTlZBU19TSVpFIiwiU1RBUl9DT1VOVCIsInNlZWRlZFJhbmRvbSIsInNlZWQiLCJzIiwiVFJBTlNQQVJFTlRfUElYRUwiLCJjYWNoZWREYXRhVXJsIiwiZ2V0U3RhcnNCYWNrZ3JvdW5kSW1hZ2UiLCJkb2N1bWVudCIsImNhbnZhcyIsImNyZWF0ZUVsZW1lbnQiLCJ3aWR0aCIsImhlaWdodCIsImN0eCIsImdldENvbnRleHQiLCJjbGVhclJlY3QiLCJyYW5kb20iLCJpIiwieCIsInkiLCJicmlnaHRuZXNzIiwiTWF0aCIsImZsb29yIiwiYWxwaGEiLCJyYWRpdXMiLCJiZWdpblBhdGgiLCJhcmMiLCJQSSIsImZpbGxTdHlsZSIsImNvbmNhdCIsImZpbGwiLCJ0b0RhdGFVUkwiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZ2xvYmUvZ2xvYmUtc3RhcnMtbGF5ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBDU1MtY29tcGF0aWJsZSBzdGFyLWZpZWxkIGJhY2tncm91bmQgaW1hZ2UgYXMgYSBkYXRhIFVSTC5cbiAqIFRoZSBzdGFycyBhcmUgcmVuZGVyZWQgb250byBhbiBvZmZzY3JlZW4gY2FudmFzLCB0aWxlZCBzZWFtbGVzc2x5IHZpYSBDU1NcbiAqIGBiYWNrZ3JvdW5kLXJlcGVhdGAuIFRoZSByZXN1bHQgaXMgZGV0ZXJtaW5pc3RpYyAoc2VlZGVkIFBSTkcpIGFuZCBjYWNoZWRcbiAqIHNvIGl0J3Mgb25seSBnZW5lcmF0ZWQgb25jZS5cbiAqL1xuXG5jb25zdCBTVEFSX0NBTlZBU19TSVpFID0gNTEyO1xuY29uc3QgU1RBUl9DT1VOVCA9IDYwMDtcblxuLy8gU2VlZGVkIHBzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvciAoUGFyay1NaWxsZXIpIGZvciBkZXRlcm1pbmlzbS5cbmZ1bmN0aW9uIHNlZWRlZFJhbmRvbShzZWVkOiBudW1iZXIpOiAoKSA9PiBudW1iZXIge1xuICBsZXQgcyA9IHNlZWQ7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgcyA9IChzICogMTY4MDcpICUgMjE0NzQ4MzY0NztcbiAgICByZXR1cm4gKHMgLSAxKSAvIDIxNDc0ODM2NDY7XG4gIH07XG59XG5cbi8vIFRyYW5zcGFyZW50IDF4MSBQTkcgdXNlZCBhcyBhIGZhbGxiYWNrIHdoZW4gYSBjYW52YXMgY29udGV4dCBpcyB1bmF2YWlsYWJsZVxuLy8gKFNTUiBvciB1bnN1cHBvcnRlZCBicm93c2VyKSwgc28gdGhhdCBgdXJsKC4uLilgIG5ldmVyIHJlc29sdmVzIHRvIGFuIGVtcHR5XG4vLyB2YWx1ZSB0aGF0IGNvdWxkIHRyaWdnZXIgYSByZXF1ZXN0IGZvciB0aGUgY3VycmVudCBkb2N1bWVudC5cbmNvbnN0IFRSQU5TUEFSRU5UX1BJWEVMID1cbiAgJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQkNBUUFBQUMxSEF3Q0FBQUFDMGxFUVZSNDJtTmtZQUFBQUFZQUFqQ0IwQzhBQUFBQVNVVk9SSzVDWUlJPSc7XG5cbmxldCBjYWNoZWREYXRhVXJsOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuLyoqXG4gKiBSZXR1cm5zIGEgZGF0YSBVUkwgb2YgYSB0aWxlYWJsZSBzdGFyLWZpZWxkIGltYWdlICg1MTLDlzUxMiBQTkcpLlxuICogR2VuZXJhdGVzIHRoZSBpbWFnZSBvbmNlIGFuZCBjYWNoZXMgaXQgZm9yIHN1YnNlcXVlbnQgY2FsbHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFyc0JhY2tncm91bmRJbWFnZSgpOiBzdHJpbmcge1xuICBpZiAoY2FjaGVkRGF0YVVybCkgcmV0dXJuIGNhY2hlZERhdGFVcmw7XG5cbiAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBTU1IgZmFsbGJhY2s6IHJldHVybiBhIHRyYW5zcGFyZW50IDF4MSBwaXhlbCB0byBhdm9pZCB1cmwoKSB0cmlnZ2VyaW5nIGEgcGFnZSByZXF1ZXN0XG4gICAgcmV0dXJuIFRSQU5TUEFSRU5UX1BJWEVMO1xuICB9XG5cbiAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gIGNhbnZhcy53aWR0aCA9IFNUQVJfQ0FOVkFTX1NJWkU7XG4gIGNhbnZhcy5oZWlnaHQgPSBTVEFSX0NBTlZBU19TSVpFO1xuICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgaWYgKCFjdHgpIHJldHVybiAoY2FjaGVkRGF0YVVybCA9IFRSQU5TUEFSRU5UX1BJWEVMKTtcblxuICAvLyBUcmFuc3BhcmVudCBiYWNrZ3JvdW5kIHNvIENTUyBiYWNrZ3JvdW5kQ29sb3Igc2hvd3MgdGhyb3VnaFxuICBjdHguY2xlYXJSZWN0KDAsIDAsIFNUQVJfQ0FOVkFTX1NJWkUsIFNUQVJfQ0FOVkFTX1NJWkUpO1xuXG4gIGNvbnN0IHJhbmRvbSA9IHNlZWRlZFJhbmRvbSg0Mik7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBTVEFSX0NPVU5UOyBpKyspIHtcbiAgICBjb25zdCB4ID0gcmFuZG9tKCkgKiBTVEFSX0NBTlZBU19TSVpFO1xuICAgIGNvbnN0IHkgPSByYW5kb20oKSAqIFNUQVJfQ0FOVkFTX1NJWkU7XG4gICAgY29uc3QgYnJpZ2h0bmVzcyA9IDE0MCArIE1hdGguZmxvb3IocmFuZG9tKCkgKiAxMTUpOyAvLyAxNDDigJMyNTVcbiAgICBjb25zdCBhbHBoYSA9IDAuNCArIHJhbmRvbSgpICogMC42OyAvLyAwLjTigJMxLjBcbiAgICBjb25zdCByYWRpdXMgPSAwLjMgKyByYW5kb20oKSAqIDEuMDsgLy8gMC4z4oCTMS4zIHB4XG5cbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgY3R4LmFyYyh4LCB5LCByYWRpdXMsIDAsIE1hdGguUEkgKiAyKTtcbiAgICBjdHguZmlsbFN0eWxlID0gYHJnYmEoJHticmlnaHRuZXNzfSwgJHticmlnaHRuZXNzfSwgJHticmlnaHRuZXNzfSwgJHthbHBoYX0pYDtcbiAgICBjdHguZmlsbCgpO1xuICB9XG5cbiAgY2FjaGVkRGF0YVVybCA9IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL3BuZycpO1xuICByZXR1cm4gY2FjaGVkRGF0YVVybDtcbn1cblxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFNQSxnQkFBZ0IsR0FBRyxHQUFHO0FBQzVCLElBQU1DLFVBQVUsR0FBRyxHQUFHOztBQUV0QjtBQUNBLFNBQVNDLFlBQVlBLENBQUNDLElBQVksRUFBZ0I7RUFDaEQsSUFBSUMsQ0FBQyxHQUFHRCxJQUFJO0VBQ1osT0FBTyxZQUFNO0lBQ1hDLENBQUMsR0FBSUEsQ0FBQyxHQUFHLEtBQUssR0FBSSxVQUFVO0lBQzVCLE9BQU8sQ0FBQ0EsQ0FBQyxHQUFHLENBQUMsSUFBSSxVQUFVO0VBQzdCLENBQUM7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFNQyxpQkFBaUIsR0FDckIsb0hBQW9IO0FBRXRILElBQUlDLGFBQTRCLEdBQUcsSUFBSTs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNDLHVCQUF1QkEsQ0FBQSxFQUFXO0VBQ2hELElBQUlELGFBQWEsRUFBRSxPQUFPQSxhQUFhO0VBRXZDLElBQUksT0FBT0UsUUFBUSxLQUFLLFdBQVcsRUFBRTtJQUNuQztJQUNBLE9BQU9ILGlCQUFpQjtFQUMxQjtFQUVBLElBQU1JLE1BQU0sR0FBR0QsUUFBUSxDQUFDRSxhQUFhLENBQUMsUUFBUSxDQUFDO0VBQy9DRCxNQUFNLENBQUNFLEtBQUssR0FBR1gsZ0JBQWdCO0VBQy9CUyxNQUFNLENBQUNHLE1BQU0sR0FBR1osZ0JBQWdCO0VBQ2hDLElBQU1hLEdBQUcsR0FBR0osTUFBTSxDQUFDSyxVQUFVLENBQUMsSUFBSSxDQUFDO0VBQ25DLElBQUksQ0FBQ0QsR0FBRyxFQUFFLE9BQVFQLGFBQWEsR0FBR0QsaUJBQWlCOztFQUVuRDtFQUNBUSxHQUFHLENBQUNFLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFZixnQkFBZ0IsRUFBRUEsZ0JBQWdCLENBQUM7RUFFdkQsSUFBTWdCLE1BQU0sR0FBR2QsWUFBWSxDQUFDLEVBQUUsQ0FBQztFQUUvQixLQUFLLElBQUllLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR2hCLFVBQVUsRUFBRWdCLENBQUMsRUFBRSxFQUFFO0lBQ25DLElBQU1DLENBQUMsR0FBR0YsTUFBTSxDQUFDLENBQUMsR0FBR2hCLGdCQUFnQjtJQUNyQyxJQUFNbUIsQ0FBQyxHQUFHSCxNQUFNLENBQUMsQ0FBQyxHQUFHaEIsZ0JBQWdCO0lBQ3JDLElBQU1vQixVQUFVLEdBQUcsR0FBRyxHQUFHQyxJQUFJLENBQUNDLEtBQUssQ0FBQ04sTUFBTSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3JELElBQU1PLEtBQUssR0FBRyxHQUFHLEdBQUdQLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDcEMsSUFBTVEsTUFBTSxHQUFHLEdBQUcsR0FBR1IsTUFBTSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQzs7SUFFckNILEdBQUcsQ0FBQ1ksU0FBUyxDQUFDLENBQUM7SUFDZlosR0FBRyxDQUFDYSxHQUFHLENBQUNSLENBQUMsRUFBRUMsQ0FBQyxFQUFFSyxNQUFNLEVBQUUsQ0FBQyxFQUFFSCxJQUFJLENBQUNNLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDckNkLEdBQUcsQ0FBQ2UsU0FBUyxXQUFBQyxNQUFBLENBQVdULFVBQVUsUUFBQVMsTUFBQSxDQUFLVCxVQUFVLFFBQUFTLE1BQUEsQ0FBS1QsVUFBVSxRQUFBUyxNQUFBLENBQUtOLEtBQUssTUFBRztJQUM3RVYsR0FBRyxDQUFDaUIsSUFBSSxDQUFDLENBQUM7RUFDWjtFQUVBeEIsYUFBYSxHQUFHRyxNQUFNLENBQUNzQixTQUFTLENBQUMsV0FBVyxDQUFDO0VBQzdDLE9BQU96QixhQUFhO0FBQ3RCIiwiaWdub3JlTGlzdCI6W119
79
+
80
+ /**
81
+ * Tile the star-field onto a 2D canvas (e.g. video-export frame capture).
82
+ * Stars are drawn with alpha so the caller should fill the background color first.
83
+ */
84
+ export function drawStarsBackground(ctx, width, height) {
85
+ var tile = getStarsTileCanvas();
86
+ if (!tile || width <= 0 || height <= 0) return;
87
+ var pattern = ctx.createPattern(tile, 'repeat');
88
+ if (!pattern) return;
89
+ ctx.fillStyle = pattern;
90
+ ctx.fillRect(0, 0, width, height);
91
+ }
92
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTVEFSX0NBTlZBU19TSVpFIiwiU1RBUl9DT1VOVCIsInNlZWRlZFJhbmRvbSIsInNlZWQiLCJzIiwiVFJBTlNQQVJFTlRfUElYRUwiLCJjYWNoZWRDYW52YXMiLCJjYWNoZWREYXRhVXJsIiwiZ2VuZXJhdGVTdGFyc1RpbGUiLCJkb2N1bWVudCIsImNhbnZhcyIsImNyZWF0ZUVsZW1lbnQiLCJ3aWR0aCIsImhlaWdodCIsImN0eCIsImdldENvbnRleHQiLCJjbGVhclJlY3QiLCJyYW5kb20iLCJpIiwieCIsInkiLCJicmlnaHRuZXNzIiwiTWF0aCIsImZsb29yIiwiYWxwaGEiLCJyYWRpdXMiLCJiZWdpblBhdGgiLCJhcmMiLCJQSSIsImZpbGxTdHlsZSIsImNvbmNhdCIsImZpbGwiLCJnZXRTdGFyc1RpbGVDYW52YXMiLCJnZXRTdGFyc0JhY2tncm91bmRJbWFnZSIsInRvRGF0YVVSTCIsImRyYXdTdGFyc0JhY2tncm91bmQiLCJ0aWxlIiwicGF0dGVybiIsImNyZWF0ZVBhdHRlcm4iLCJmaWxsUmVjdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9nbG9iZS9nbG9iZS1zdGFycy1sYXllci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIHRpbGVhYmxlIHN0YXItZmllbGQgdXNlZCBiZWhpbmQgdGhlIGdsb2JlLlxuICogVGhlIGxpdmUgbWFwIGFuZCB2aWRlby1leHBvcnQgcHJldmlldyBwYWludCBpdCBhcyBhIENTUyBgYmFja2dyb3VuZC1pbWFnZWBcbiAqIHdpdGggYGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXRgLiBWaWRlby1leHBvcnQgY2FwdHVyZSAod2hpY2ggb25seSByZWFkc1xuICogY2FudmFzIHBpeGVscykgdGlsZXMgdGhlIHNhbWUgaW1hZ2Ugb250byBhIDJEIGNvbnRleHQgdmlhXG4gKiBgZHJhd1N0YXJzQmFja2dyb3VuZGAuIFRoZSByZXN1bHQgaXMgZGV0ZXJtaW5pc3RpYyAoc2VlZGVkIFBSTkcpIGFuZCBjYWNoZWRcbiAqIHNvIGl0J3Mgb25seSBnZW5lcmF0ZWQgb25jZS5cbiAqL1xuXG5jb25zdCBTVEFSX0NBTlZBU19TSVpFID0gNTEyO1xuY29uc3QgU1RBUl9DT1VOVCA9IDYwMDtcblxuLy8gU2VlZGVkIHBzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvciAoUGFyay1NaWxsZXIpIGZvciBkZXRlcm1pbmlzbS5cbmZ1bmN0aW9uIHNlZWRlZFJhbmRvbShzZWVkOiBudW1iZXIpOiAoKSA9PiBudW1iZXIge1xuICBsZXQgcyA9IHNlZWQ7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgcyA9IChzICogMTY4MDcpICUgMjE0NzQ4MzY0NztcbiAgICByZXR1cm4gKHMgLSAxKSAvIDIxNDc0ODM2NDY7XG4gIH07XG59XG5cbi8vIFRyYW5zcGFyZW50IDF4MSBQTkcgdXNlZCBhcyBhIGZhbGxiYWNrIHdoZW4gYSBjYW52YXMgY29udGV4dCBpcyB1bmF2YWlsYWJsZVxuLy8gKFNTUiBvciB1bnN1cHBvcnRlZCBicm93c2VyKSwgc28gdGhhdCBgdXJsKC4uLilgIG5ldmVyIHJlc29sdmVzIHRvIGFuIGVtcHR5XG4vLyB2YWx1ZSB0aGF0IGNvdWxkIHRyaWdnZXIgYSByZXF1ZXN0IGZvciB0aGUgY3VycmVudCBkb2N1bWVudC5cbmNvbnN0IFRSQU5TUEFSRU5UX1BJWEVMID1cbiAgJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQkNBUUFBQUMxSEF3Q0FBQUFDMGxFUVZSNDJtTmtZQUFBQUFZQUFqQ0IwQzhBQUFBQVNVVk9SSzVDWUlJPSc7XG5cbmxldCBjYWNoZWRDYW52YXM6IEhUTUxDYW52YXNFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5sZXQgY2FjaGVkRGF0YVVybDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbmZ1bmN0aW9uIGdlbmVyYXRlU3RhcnNUaWxlKCk6IEhUTUxDYW52YXNFbGVtZW50IHwgbnVsbCB7XG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgY2FudmFzLndpZHRoID0gU1RBUl9DQU5WQVNfU0laRTtcbiAgY2FudmFzLmhlaWdodCA9IFNUQVJfQ0FOVkFTX1NJWkU7XG4gIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICBpZiAoIWN0eCkgcmV0dXJuIG51bGw7XG5cbiAgLy8gVHJhbnNwYXJlbnQgYmFja2dyb3VuZCBzbyBDU1MgYmFja2dyb3VuZENvbG9yIC8gY2FudmFzIGZpbGwgc2hvd3MgdGhyb3VnaFxuICBjdHguY2xlYXJSZWN0KDAsIDAsIFNUQVJfQ0FOVkFTX1NJWkUsIFNUQVJfQ0FOVkFTX1NJWkUpO1xuXG4gIGNvbnN0IHJhbmRvbSA9IHNlZWRlZFJhbmRvbSg0Mik7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBTVEFSX0NPVU5UOyBpKyspIHtcbiAgICBjb25zdCB4ID0gcmFuZG9tKCkgKiBTVEFSX0NBTlZBU19TSVpFO1xuICAgIGNvbnN0IHkgPSByYW5kb20oKSAqIFNUQVJfQ0FOVkFTX1NJWkU7XG4gICAgY29uc3QgYnJpZ2h0bmVzcyA9IDE0MCArIE1hdGguZmxvb3IocmFuZG9tKCkgKiAxMTUpOyAvLyAxNDDigJMyNTVcbiAgICBjb25zdCBhbHBoYSA9IDAuNCArIHJhbmRvbSgpICogMC42OyAvLyAwLjTigJMxLjBcbiAgICBjb25zdCByYWRpdXMgPSAwLjMgKyByYW5kb20oKSAqIDEuMDsgLy8gMC4z4oCTMS4zIHB4XG5cbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgY3R4LmFyYyh4LCB5LCByYWRpdXMsIDAsIE1hdGguUEkgKiAyKTtcbiAgICBjdHguZmlsbFN0eWxlID0gYHJnYmEoJHticmlnaHRuZXNzfSwgJHticmlnaHRuZXNzfSwgJHticmlnaHRuZXNzfSwgJHthbHBoYX0pYDtcbiAgICBjdHguZmlsbCgpO1xuICB9XG5cbiAgcmV0dXJuIGNhbnZhcztcbn1cblxuZnVuY3Rpb24gZ2V0U3RhcnNUaWxlQ2FudmFzKCk6IEhUTUxDYW52YXNFbGVtZW50IHwgbnVsbCB7XG4gIGlmIChjYWNoZWRDYW52YXMpIHJldHVybiBjYWNoZWRDYW52YXM7XG4gIGNhY2hlZENhbnZhcyA9IGdlbmVyYXRlU3RhcnNUaWxlKCk7XG4gIHJldHVybiBjYWNoZWRDYW52YXM7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGRhdGEgVVJMIG9mIGEgdGlsZWFibGUgc3Rhci1maWVsZCBpbWFnZSAoNTEyw5c1MTIgUE5HKS5cbiAqIEdlbmVyYXRlcyB0aGUgaW1hZ2Ugb25jZSBhbmQgY2FjaGVzIGl0IGZvciBzdWJzZXF1ZW50IGNhbGxzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhcnNCYWNrZ3JvdW5kSW1hZ2UoKTogc3RyaW5nIHtcbiAgaWYgKGNhY2hlZERhdGFVcmwpIHJldHVybiBjYWNoZWREYXRhVXJsO1xuXG4gIGNvbnN0IGNhbnZhcyA9IGdldFN0YXJzVGlsZUNhbnZhcygpO1xuICBpZiAoIWNhbnZhcykge1xuICAgIC8vIFNTUiAvIG1pc3NpbmcgMkQgY29udGV4dDogcmV0dXJuIGEgdHJhbnNwYXJlbnQgMXgxIHBpeGVsIHNvIHVybCgpIG5ldmVyXG4gICAgLy8gcmVzb2x2ZXMgdG8gYW4gZW1wdHkgdmFsdWUgdGhhdCBjb3VsZCB0cmlnZ2VyIGEgcmVxdWVzdCBmb3IgdGhlIGRvY3VtZW50LlxuICAgIHJldHVybiAoY2FjaGVkRGF0YVVybCA9IFRSQU5TUEFSRU5UX1BJWEVMKTtcbiAgfVxuXG4gIGNhY2hlZERhdGFVcmwgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9wbmcnKTtcbiAgcmV0dXJuIGNhY2hlZERhdGFVcmw7XG59XG5cbi8qKlxuICogVGlsZSB0aGUgc3Rhci1maWVsZCBvbnRvIGEgMkQgY2FudmFzIChlLmcuIHZpZGVvLWV4cG9ydCBmcmFtZSBjYXB0dXJlKS5cbiAqIFN0YXJzIGFyZSBkcmF3biB3aXRoIGFscGhhIHNvIHRoZSBjYWxsZXIgc2hvdWxkIGZpbGwgdGhlIGJhY2tncm91bmQgY29sb3IgZmlyc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcmF3U3RhcnNCYWNrZ3JvdW5kKFxuICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgd2lkdGg6IG51bWJlcixcbiAgaGVpZ2h0OiBudW1iZXJcbik6IHZvaWQge1xuICBjb25zdCB0aWxlID0gZ2V0U3RhcnNUaWxlQ2FudmFzKCk7XG4gIGlmICghdGlsZSB8fCB3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKSByZXR1cm47XG4gIGNvbnN0IHBhdHRlcm4gPSBjdHguY3JlYXRlUGF0dGVybih0aWxlLCAncmVwZWF0Jyk7XG4gIGlmICghcGF0dGVybikgcmV0dXJuO1xuICBjdHguZmlsbFN0eWxlID0gcGF0dGVybjtcbiAgY3R4LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xufVxuXG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFNQSxnQkFBZ0IsR0FBRyxHQUFHO0FBQzVCLElBQU1DLFVBQVUsR0FBRyxHQUFHOztBQUV0QjtBQUNBLFNBQVNDLFlBQVlBLENBQUNDLElBQVksRUFBZ0I7RUFDaEQsSUFBSUMsQ0FBQyxHQUFHRCxJQUFJO0VBQ1osT0FBTyxZQUFNO0lBQ1hDLENBQUMsR0FBSUEsQ0FBQyxHQUFHLEtBQUssR0FBSSxVQUFVO0lBQzVCLE9BQU8sQ0FBQ0EsQ0FBQyxHQUFHLENBQUMsSUFBSSxVQUFVO0VBQzdCLENBQUM7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFNQyxpQkFBaUIsR0FDckIsb0hBQW9IO0FBRXRILElBQUlDLFlBQXNDLEdBQUcsSUFBSTtBQUNqRCxJQUFJQyxhQUE0QixHQUFHLElBQUk7QUFFdkMsU0FBU0MsaUJBQWlCQSxDQUFBLEVBQTZCO0VBQ3JELElBQUksT0FBT0MsUUFBUSxLQUFLLFdBQVcsRUFBRTtJQUNuQyxPQUFPLElBQUk7RUFDYjtFQUVBLElBQU1DLE1BQU0sR0FBR0QsUUFBUSxDQUFDRSxhQUFhLENBQUMsUUFBUSxDQUFDO0VBQy9DRCxNQUFNLENBQUNFLEtBQUssR0FBR1osZ0JBQWdCO0VBQy9CVSxNQUFNLENBQUNHLE1BQU0sR0FBR2IsZ0JBQWdCO0VBQ2hDLElBQU1jLEdBQUcsR0FBR0osTUFBTSxDQUFDSyxVQUFVLENBQUMsSUFBSSxDQUFDO0VBQ25DLElBQUksQ0FBQ0QsR0FBRyxFQUFFLE9BQU8sSUFBSTs7RUFFckI7RUFDQUEsR0FBRyxDQUFDRSxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRWhCLGdCQUFnQixFQUFFQSxnQkFBZ0IsQ0FBQztFQUV2RCxJQUFNaUIsTUFBTSxHQUFHZixZQUFZLENBQUMsRUFBRSxDQUFDO0VBRS9CLEtBQUssSUFBSWdCLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR2pCLFVBQVUsRUFBRWlCLENBQUMsRUFBRSxFQUFFO0lBQ25DLElBQU1DLENBQUMsR0FBR0YsTUFBTSxDQUFDLENBQUMsR0FBR2pCLGdCQUFnQjtJQUNyQyxJQUFNb0IsQ0FBQyxHQUFHSCxNQUFNLENBQUMsQ0FBQyxHQUFHakIsZ0JBQWdCO0lBQ3JDLElBQU1xQixVQUFVLEdBQUcsR0FBRyxHQUFHQyxJQUFJLENBQUNDLEtBQUssQ0FBQ04sTUFBTSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3JELElBQU1PLEtBQUssR0FBRyxHQUFHLEdBQUdQLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDcEMsSUFBTVEsTUFBTSxHQUFHLEdBQUcsR0FBR1IsTUFBTSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQzs7SUFFckNILEdBQUcsQ0FBQ1ksU0FBUyxDQUFDLENBQUM7SUFDZlosR0FBRyxDQUFDYSxHQUFHLENBQUNSLENBQUMsRUFBRUMsQ0FBQyxFQUFFSyxNQUFNLEVBQUUsQ0FBQyxFQUFFSCxJQUFJLENBQUNNLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDckNkLEdBQUcsQ0FBQ2UsU0FBUyxXQUFBQyxNQUFBLENBQVdULFVBQVUsUUFBQVMsTUFBQSxDQUFLVCxVQUFVLFFBQUFTLE1BQUEsQ0FBS1QsVUFBVSxRQUFBUyxNQUFBLENBQUtOLEtBQUssTUFBRztJQUM3RVYsR0FBRyxDQUFDaUIsSUFBSSxDQUFDLENBQUM7RUFDWjtFQUVBLE9BQU9yQixNQUFNO0FBQ2Y7QUFFQSxTQUFTc0Isa0JBQWtCQSxDQUFBLEVBQTZCO0VBQ3RELElBQUkxQixZQUFZLEVBQUUsT0FBT0EsWUFBWTtFQUNyQ0EsWUFBWSxHQUFHRSxpQkFBaUIsQ0FBQyxDQUFDO0VBQ2xDLE9BQU9GLFlBQVk7QUFDckI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVMyQix1QkFBdUJBLENBQUEsRUFBVztFQUNoRCxJQUFJMUIsYUFBYSxFQUFFLE9BQU9BLGFBQWE7RUFFdkMsSUFBTUcsTUFBTSxHQUFHc0Isa0JBQWtCLENBQUMsQ0FBQztFQUNuQyxJQUFJLENBQUN0QixNQUFNLEVBQUU7SUFDWDtJQUNBO0lBQ0EsT0FBUUgsYUFBYSxHQUFHRixpQkFBaUI7RUFDM0M7RUFFQUUsYUFBYSxHQUFHRyxNQUFNLENBQUN3QixTQUFTLENBQUMsV0FBVyxDQUFDO0VBQzdDLE9BQU8zQixhQUFhO0FBQ3RCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTNEIsbUJBQW1CQSxDQUNqQ3JCLEdBQTZCLEVBQzdCRixLQUFhLEVBQ2JDLE1BQWMsRUFDUjtFQUNOLElBQU11QixJQUFJLEdBQUdKLGtCQUFrQixDQUFDLENBQUM7RUFDakMsSUFBSSxDQUFDSSxJQUFJLElBQUl4QixLQUFLLElBQUksQ0FBQyxJQUFJQyxNQUFNLElBQUksQ0FBQyxFQUFFO0VBQ3hDLElBQU13QixPQUFPLEdBQUd2QixHQUFHLENBQUN3QixhQUFhLENBQUNGLElBQUksRUFBRSxRQUFRLENBQUM7RUFDakQsSUFBSSxDQUFDQyxPQUFPLEVBQUU7RUFDZHZCLEdBQUcsQ0FBQ2UsU0FBUyxHQUFHUSxPQUFPO0VBQ3ZCdkIsR0FBRyxDQUFDeUIsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUzQixLQUFLLEVBQUVDLE1BQU0sQ0FBQztBQUNuQyIsImlnbm9yZUxpc3QiOltdfQ==
@@ -0,0 +1,40 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // Copyright contributors to the kepler.gl project
3
+
4
+ import { drawStarsBackground } from './globe-stars-layer';
5
+ describe('globe-stars-layer', function () {
6
+ afterEach(function () {
7
+ jest.restoreAllMocks();
8
+ });
9
+ test('drawStarsBackground tiles the star canvas with a repeating pattern', function () {
10
+ var tileCtx = {
11
+ clearRect: jest.fn(),
12
+ beginPath: jest.fn(),
13
+ arc: jest.fn(),
14
+ fill: jest.fn(),
15
+ fillStyle: ''
16
+ };
17
+ var originalGetContext = HTMLCanvasElement.prototype.getContext;
18
+ jest.spyOn(HTMLCanvasElement.prototype, 'getContext').mockImplementation(function getContext(type) {
19
+ if (type === '2d') {
20
+ return tileCtx;
21
+ }
22
+ return originalGetContext.call(this, type);
23
+ });
24
+ var pattern = {
25
+ id: 'stars-pattern'
26
+ };
27
+ var destCtx = {
28
+ createPattern: jest.fn(function () {
29
+ return pattern;
30
+ }),
31
+ fillRect: jest.fn(),
32
+ fillStyle: ''
33
+ };
34
+ drawStarsBackground(destCtx, 1280, 720);
35
+ expect(destCtx.createPattern).toHaveBeenCalledWith(expect.any(HTMLCanvasElement), 'repeat');
36
+ expect(destCtx.fillStyle).toBe(pattern);
37
+ expect(destCtx.fillRect).toHaveBeenCalledWith(0, 0, 1280, 720);
38
+ });
39
+ });
40
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkcmF3U3RhcnNCYWNrZ3JvdW5kIiwiZGVzY3JpYmUiLCJhZnRlckVhY2giLCJqZXN0IiwicmVzdG9yZUFsbE1vY2tzIiwidGVzdCIsInRpbGVDdHgiLCJjbGVhclJlY3QiLCJmbiIsImJlZ2luUGF0aCIsImFyYyIsImZpbGwiLCJmaWxsU3R5bGUiLCJvcmlnaW5hbEdldENvbnRleHQiLCJIVE1MQ2FudmFzRWxlbWVudCIsInByb3RvdHlwZSIsImdldENvbnRleHQiLCJzcHlPbiIsIm1vY2tJbXBsZW1lbnRhdGlvbiIsInR5cGUiLCJjYWxsIiwicGF0dGVybiIsImlkIiwiZGVzdEN0eCIsImNyZWF0ZVBhdHRlcm4iLCJmaWxsUmVjdCIsImV4cGVjdCIsInRvSGF2ZUJlZW5DYWxsZWRXaXRoIiwiYW55IiwidG9CZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9nbG9iZS9nbG9iZS1zdGFycy1sYXllci5zcGVjLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7ZHJhd1N0YXJzQmFja2dyb3VuZH0gZnJvbSAnLi9nbG9iZS1zdGFycy1sYXllcic7XG5cbmRlc2NyaWJlKCdnbG9iZS1zdGFycy1sYXllcicsICgpID0+IHtcbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBqZXN0LnJlc3RvcmVBbGxNb2NrcygpO1xuICB9KTtcblxuICB0ZXN0KCdkcmF3U3RhcnNCYWNrZ3JvdW5kIHRpbGVzIHRoZSBzdGFyIGNhbnZhcyB3aXRoIGEgcmVwZWF0aW5nIHBhdHRlcm4nLCAoKSA9PiB7XG4gICAgY29uc3QgdGlsZUN0eCA9IHtcbiAgICAgIGNsZWFyUmVjdDogamVzdC5mbigpLFxuICAgICAgYmVnaW5QYXRoOiBqZXN0LmZuKCksXG4gICAgICBhcmM6IGplc3QuZm4oKSxcbiAgICAgIGZpbGw6IGplc3QuZm4oKSxcbiAgICAgIGZpbGxTdHlsZTogJydcbiAgICB9O1xuICAgIGNvbnN0IG9yaWdpbmFsR2V0Q29udGV4dCA9IEhUTUxDYW52YXNFbGVtZW50LnByb3RvdHlwZS5nZXRDb250ZXh0O1xuICAgIGplc3Quc3B5T24oSFRNTENhbnZhc0VsZW1lbnQucHJvdG90eXBlLCAnZ2V0Q29udGV4dCcpLm1vY2tJbXBsZW1lbnRhdGlvbihmdW5jdGlvbiBnZXRDb250ZXh0KFxuICAgICAgdGhpczogSFRNTENhbnZhc0VsZW1lbnQsXG4gICAgICB0eXBlOiBzdHJpbmdcbiAgICApIHtcbiAgICAgIGlmICh0eXBlID09PSAnMmQnKSB7XG4gICAgICAgIHJldHVybiB0aWxlQ3R4IGFzIHVua25vd24gYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9yaWdpbmFsR2V0Q29udGV4dC5jYWxsKHRoaXMsIHR5cGUpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcGF0dGVybiA9IHtpZDogJ3N0YXJzLXBhdHRlcm4nfTtcbiAgICBjb25zdCBkZXN0Q3R4ID0ge1xuICAgICAgY3JlYXRlUGF0dGVybjogamVzdC5mbigoKSA9PiBwYXR0ZXJuKSxcbiAgICAgIGZpbGxSZWN0OiBqZXN0LmZuKCksXG4gICAgICBmaWxsU3R5bGU6ICcnIGFzIHN0cmluZyB8IENhbnZhc1BhdHRlcm5cbiAgICB9O1xuXG4gICAgZHJhd1N0YXJzQmFja2dyb3VuZChkZXN0Q3R4IGFzIHVua25vd24gYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCAxMjgwLCA3MjApO1xuXG4gICAgZXhwZWN0KGRlc3RDdHguY3JlYXRlUGF0dGVybikudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0LmFueShIVE1MQ2FudmFzRWxlbWVudCksICdyZXBlYXQnKTtcbiAgICBleHBlY3QoZGVzdEN0eC5maWxsU3R5bGUpLnRvQmUocGF0dGVybik7XG4gICAgZXhwZWN0KGRlc3RDdHguZmlsbFJlY3QpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKDAsIDAsIDEyODAsIDcyMCk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7O0FBRUEsU0FBUUEsbUJBQW1CLFFBQU8scUJBQXFCO0FBRXZEQyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsWUFBTTtFQUNsQ0MsU0FBUyxDQUFDLFlBQU07SUFDZEMsSUFBSSxDQUFDQyxlQUFlLENBQUMsQ0FBQztFQUN4QixDQUFDLENBQUM7RUFFRkMsSUFBSSxDQUFDLG9FQUFvRSxFQUFFLFlBQU07SUFDL0UsSUFBTUMsT0FBTyxHQUFHO01BQ2RDLFNBQVMsRUFBRUosSUFBSSxDQUFDSyxFQUFFLENBQUMsQ0FBQztNQUNwQkMsU0FBUyxFQUFFTixJQUFJLENBQUNLLEVBQUUsQ0FBQyxDQUFDO01BQ3BCRSxHQUFHLEVBQUVQLElBQUksQ0FBQ0ssRUFBRSxDQUFDLENBQUM7TUFDZEcsSUFBSSxFQUFFUixJQUFJLENBQUNLLEVBQUUsQ0FBQyxDQUFDO01BQ2ZJLFNBQVMsRUFBRTtJQUNiLENBQUM7SUFDRCxJQUFNQyxrQkFBa0IsR0FBR0MsaUJBQWlCLENBQUNDLFNBQVMsQ0FBQ0MsVUFBVTtJQUNqRWIsSUFBSSxDQUFDYyxLQUFLLENBQUNILGlCQUFpQixDQUFDQyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUNHLGtCQUFrQixDQUFDLFNBQVNGLFVBQVVBLENBRTFGRyxJQUFZLEVBQ1o7TUFDQSxJQUFJQSxJQUFJLEtBQUssSUFBSSxFQUFFO1FBQ2pCLE9BQU9iLE9BQU87TUFDaEI7TUFDQSxPQUFPTyxrQkFBa0IsQ0FBQ08sSUFBSSxDQUFDLElBQUksRUFBRUQsSUFBSSxDQUFDO0lBQzVDLENBQUMsQ0FBQztJQUVGLElBQU1FLE9BQU8sR0FBRztNQUFDQyxFQUFFLEVBQUU7SUFBZSxDQUFDO0lBQ3JDLElBQU1DLE9BQU8sR0FBRztNQUNkQyxhQUFhLEVBQUVyQixJQUFJLENBQUNLLEVBQUUsQ0FBQztRQUFBLE9BQU1hLE9BQU87TUFBQSxFQUFDO01BQ3JDSSxRQUFRLEVBQUV0QixJQUFJLENBQUNLLEVBQUUsQ0FBQyxDQUFDO01BQ25CSSxTQUFTLEVBQUU7SUFDYixDQUFDO0lBRURaLG1CQUFtQixDQUFDdUIsT0FBTyxFQUF5QyxJQUFJLEVBQUUsR0FBRyxDQUFDO0lBRTlFRyxNQUFNLENBQUNILE9BQU8sQ0FBQ0MsYUFBYSxDQUFDLENBQUNHLG9CQUFvQixDQUFDRCxNQUFNLENBQUNFLEdBQUcsQ0FBQ2QsaUJBQWlCLENBQUMsRUFBRSxRQUFRLENBQUM7SUFDM0ZZLE1BQU0sQ0FBQ0gsT0FBTyxDQUFDWCxTQUFTLENBQUMsQ0FBQ2lCLElBQUksQ0FBQ1IsT0FBTyxDQUFDO0lBQ3ZDSyxNQUFNLENBQUNILE9BQU8sQ0FBQ0UsUUFBUSxDQUFDLENBQUNFLG9CQUFvQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQztFQUNoRSxDQUFDLENBQUM7QUFDSixDQUFDLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=