@kepler.gl/components 3.3.0-alpha.6 → 3.3.0-alpha.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/dist/cjs/common/data-table/cell-size.js +40 -23
  2. package/dist/cjs/common/data-table/column-statistics-categoric.js +40 -0
  3. package/dist/cjs/common/data-table/column-statistics-components.js +65 -0
  4. package/dist/cjs/common/data-table/column-statistics-numeric.js +87 -0
  5. package/dist/cjs/common/data-table/column-statistics-time.js +69 -0
  6. package/dist/cjs/common/data-table/header-cell.js +123 -44
  7. package/dist/cjs/common/data-table/index.js +102 -29
  8. package/dist/cjs/common/histogram-plot.js +1 -1
  9. package/dist/cjs/common/icons/{arrow-down-solid.js → draw-point.js} +21 -11
  10. package/dist/cjs/common/icons/index.js +15 -1
  11. package/dist/cjs/common/icons/line-string.js +60 -0
  12. package/dist/cjs/common/toolbar-item.js +24 -3
  13. package/dist/cjs/editor/editor.js +26 -8
  14. package/dist/cjs/editor/feature-action-panel.js +34 -12
  15. package/dist/cjs/editor/feature-properties-editor.js +215 -0
  16. package/dist/cjs/editor/filter-feature-badges.js +92 -0
  17. package/dist/cjs/index.js +33 -1
  18. package/dist/cjs/kepler-gl.js +20 -3
  19. package/dist/cjs/map/map-control-toolbar.js +2 -2
  20. package/dist/cjs/map/map-control.js +13 -7
  21. package/dist/cjs/map/map-draw-panel.js +65 -15
  22. package/dist/cjs/map/theme-toggle-button.js +64 -0
  23. package/dist/cjs/map-container.js +16 -5
  24. package/dist/cjs/modal-container.js +2 -1
  25. package/dist/cjs/modals/cloud-components/cloud-item.js +55 -7
  26. package/dist/cjs/modals/cloud-components/cloud-item.spec.js +75 -3
  27. package/dist/cjs/modals/cloud-components/cloud-maps.js +2 -1
  28. package/dist/cjs/modals/cloud-tile.js +52 -38
  29. package/dist/cjs/modals/data-table-modal.js +37 -25
  30. package/dist/cjs/modals/export-video-modal.js +28 -1
  31. package/dist/cjs/modals/export-video-modal.spec.js +56 -10
  32. package/dist/cjs/modals/globe-export-video-container.js +19 -3
  33. package/dist/cjs/modals/globe-export-video-preview.js +25 -7
  34. package/dist/cjs/modals/hubble-utils.js +8 -3
  35. package/dist/cjs/modals/swipe-composite-utils.js +9 -1
  36. package/dist/cjs/modals/swipe-composite-utils.spec.js +69 -0
  37. package/dist/cjs/modals/swipe-export-video-preview.js +9 -5
  38. package/dist/cjs/side-panel/layer-manager.js +11 -3
  39. package/dist/cjs/side-panel/layer-panel/dataset-layer-section.js +11 -3
  40. package/dist/cjs/side-panel/layer-panel/layer-configurator.js +74 -31
  41. package/dist/cjs/side-panel/map-style-panel/globe-config-panel.js +90 -25
  42. package/dist/common/data-table/column-statistics-categoric.d.ts +9 -0
  43. package/dist/common/data-table/column-statistics-components.d.ts +31 -0
  44. package/dist/common/data-table/column-statistics-numeric.d.ts +18 -0
  45. package/dist/common/data-table/column-statistics-time.d.ts +19 -0
  46. package/dist/common/data-table/header-cell.d.ts +7 -5
  47. package/dist/common/data-table/index.d.ts +7 -24
  48. package/dist/common/histogram-plot.d.ts +24 -1
  49. package/dist/common/icons/{arrow-down-solid.d.ts → draw-point.d.ts} +2 -1
  50. package/dist/common/icons/index.d.ts +2 -0
  51. package/dist/common/icons/line-string.d.ts +10 -0
  52. package/dist/common/toolbar-item.d.ts +2 -0
  53. package/dist/editor/editor.d.ts +1 -0
  54. package/dist/editor/feature-action-panel.d.ts +1 -0
  55. package/dist/editor/feature-properties-editor.d.ts +8 -0
  56. package/dist/editor/filter-feature-badges.d.ts +12 -0
  57. package/dist/esm/common/data-table/cell-size.js +40 -23
  58. package/dist/esm/common/data-table/column-statistics-categoric.js +33 -0
  59. package/dist/esm/common/data-table/column-statistics-components.js +59 -0
  60. package/dist/esm/common/data-table/column-statistics-numeric.js +78 -0
  61. package/dist/esm/common/data-table/column-statistics-time.js +60 -0
  62. package/dist/esm/common/data-table/header-cell.js +125 -46
  63. package/dist/esm/common/data-table/index.js +102 -29
  64. package/dist/esm/common/histogram-plot.js +1 -1
  65. package/dist/esm/common/icons/draw-point.js +44 -0
  66. package/dist/esm/common/icons/index.js +3 -1
  67. package/dist/esm/common/icons/line-string.js +54 -0
  68. package/dist/esm/common/toolbar-item.js +24 -3
  69. package/dist/esm/editor/editor.js +26 -8
  70. package/dist/esm/editor/feature-action-panel.js +37 -15
  71. package/dist/esm/editor/feature-properties-editor.js +208 -0
  72. package/dist/esm/editor/filter-feature-badges.js +85 -0
  73. package/dist/esm/index.js +5 -1
  74. package/dist/esm/kepler-gl.js +20 -3
  75. package/dist/esm/map/map-control-toolbar.js +2 -2
  76. package/dist/esm/map/map-control.js +13 -7
  77. package/dist/esm/map/map-draw-panel.js +63 -11
  78. package/dist/esm/map/theme-toggle-button.js +55 -0
  79. package/dist/esm/map-container.js +16 -5
  80. package/dist/esm/modal-container.js +2 -1
  81. package/dist/esm/modals/cloud-components/cloud-item.js +53 -7
  82. package/dist/esm/modals/cloud-components/cloud-item.spec.js +76 -4
  83. package/dist/esm/modals/cloud-components/cloud-maps.js +2 -1
  84. package/dist/esm/modals/cloud-tile.js +52 -38
  85. package/dist/esm/modals/data-table-modal.js +38 -26
  86. package/dist/esm/modals/export-video-modal.js +29 -2
  87. package/dist/esm/modals/export-video-modal.spec.js +56 -10
  88. package/dist/esm/modals/globe-export-video-container.js +20 -4
  89. package/dist/esm/modals/globe-export-video-preview.js +26 -8
  90. package/dist/esm/modals/hubble-utils.js +8 -3
  91. package/dist/esm/modals/swipe-composite-utils.js +9 -1
  92. package/dist/esm/modals/swipe-composite-utils.spec.js +67 -0
  93. package/dist/esm/modals/swipe-export-video-preview.js +8 -4
  94. package/dist/esm/side-panel/layer-manager.js +11 -3
  95. package/dist/esm/side-panel/layer-panel/dataset-layer-section.js +11 -3
  96. package/dist/esm/side-panel/layer-panel/layer-configurator.js +74 -31
  97. package/dist/esm/side-panel/map-style-panel/globe-config-panel.js +90 -25
  98. package/dist/index.d.ts +8 -0
  99. package/dist/kepler-gl.d.ts +3 -0
  100. package/dist/map/map-control.d.ts +6 -2
  101. package/dist/map/map-draw-panel.d.ts +1 -0
  102. package/dist/map/theme-toggle-button.d.ts +18 -0
  103. package/dist/map-container.d.ts +1 -0
  104. package/dist/modals/cloud-components/cloud-item.d.ts +2 -1
  105. package/dist/modals/data-table-modal.d.ts +1 -0
  106. package/dist/modals/globe-export-video-container.d.ts +2 -0
  107. package/dist/modals/globe-export-video-preview.d.ts +3 -0
  108. package/dist/modals/hubble-utils.d.ts +2 -1
  109. package/dist/modals/swipe-composite-utils.d.ts +1 -1
  110. package/dist/modals/swipe-composite-utils.spec.d.ts +1 -0
  111. package/package.json +20 -20
  112. package/dist/cjs/modals/cloud-components/provider-loading.js +0 -20
  113. package/dist/cjs/modals/storage-map-viewer.js +0 -98
  114. package/dist/cjs/side-panel/cloud-storage-dropdown.js +0 -40
  115. package/dist/esm/common/icons/arrow-down-solid.js +0 -34
  116. package/dist/esm/modals/cloud-components/provider-loading.js +0 -15
  117. package/dist/esm/modals/storage-map-viewer.js +0 -93
  118. package/dist/esm/side-panel/cloud-storage-dropdown.js +0 -33
  119. package/dist/modals/cloud-components/provider-loading.d.ts +0 -2
  120. package/dist/modals/storage-map-viewer.d.ts +0 -21
  121. package/dist/side-panel/cloud-storage-dropdown.d.ts +0 -6
@@ -298,7 +298,8 @@ export function getGlobeExportLayers(keplerState, _ref3) {
298
298
  var _keplerState$mapState3, _keplerState$mapStyle5;
299
299
  var mapIndex = _ref3.mapIndex,
300
300
  mapboxApiAccessToken = _ref3.mapboxApiAccessToken,
301
- mapboxApiUrl = _ref3.mapboxApiUrl;
301
+ mapboxApiUrl = _ref3.mapboxApiUrl,
302
+ viewState = _ref3.viewState;
302
303
  var globe = (_keplerState$mapState3 = keplerState.mapState) === null || _keplerState$mapState3 === void 0 ? void 0 : _keplerState$mapState3.globe;
303
304
  var globeBaseLayers = getGlobeBaseLayers({
304
305
  mapboxApiAccessToken: mapboxApiAccessToken || '',
@@ -308,7 +309,11 @@ export function getGlobeExportLayers(keplerState, _ref3) {
308
309
  var globeTopLayers = getGlobeTopLayers({
309
310
  globe: globe
310
311
  });
311
- var dataLayers = computeDeckLayers(keplerState, {
312
+ // Same as hubble createKeplerLayers: fold the animated camera into mapState so
313
+ // zoom-dependent props (scatterplot radiusScale) update each frame.
314
+ var dataLayers = computeDeckLayers(viewState ? _objectSpread(_objectSpread({}, keplerState), {}, {
315
+ mapState: _objectSpread(_objectSpread({}, keplerState.mapState), viewState)
316
+ }) : keplerState, {
312
317
  mapIndex: mapIndex,
313
318
  primaryMap: mapIndex === 0,
314
319
  mapboxApiAccessToken: mapboxApiAccessToken,
@@ -426,4 +431,4 @@ export function getResolutionSetting(value) {
426
431
  return r.value === value;
427
432
  }) || RESOLUTIONS[0];
428
433
  }
429
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNYXBWaWV3IiwiV2ViTWVyY2F0b3JWaWV3cG9ydCIsIkRFRkFVTFRfTUFQQk9YX0FQSV9VUkwiLCJFTVBUWV9NQVBCT1hfU1RZTEUiLCJGSUxURVJfVklFV19UWVBFUyIsIkZJTFRFUl9UWVBFUyIsIkdMT0JFX01JTl9aT09NIiwiR0xPQkVfTUFYX1pPT00iLCJnZXRMYXllckJsZW5kaW5nUGFyYW1ldGVycyIsImdldEJhc2VNYXBMaWJyYXJ5IiwiZ2V0R2xvYmVCYXNlTGF5ZXJzIiwiZ2V0R2xvYmVUb3BMYXllcnMiLCJLZXBsZXJHbG9iZVZpZXciLCJjb21wdXRlRGVja0xheWVycyIsImlzTWFwYm94VVJMIiwidHJhbnNmb3JtTWFwYm94VXJsIiwicG9pbnQiLCJ0cmFuc2Zvcm1UcmFuc2xhdGUiLCJFWFBPUlRfREVDS19ERVZJQ0VfUFJPUFMiLCJ0eXBlIiwid2ViZ2wiLCJwcmVzZXJ2ZURyYXdpbmdCdWZmZXIiLCJkZWJ1ZyIsIkVYUE9SVF9PVkVSTEFZX0RFVklDRV9QUk9QUyIsInN0ZW5jaWwiLCJsaW5lYXIiLCJwIiwiaG9sZCIsImdldEtleUZyYW1lc0ZyZWUiLCJmaWx0ZXIiLCJkZWx0YSIsInZhbHVlIiwia2V5ZnJhbWVzIiwiZG9tYWluIiwiZWFzaW5ncyIsImdldFRpbWVSYW5nZUZpbHRlcktleWZyYW1lcyIsIl9yZWYiLCJ0aW1pbmdzIiwidGltZVJhbmdlIiwiRXJyb3IiLCJkdXJhdGlvbiIsImFuaW1hdGlvbldpbmRvdyIsIl90aW1lQmlucyRkYXRhSWQkIiwicGxvdFR5cGUiLCJ0aW1lQmlucyIsImRhdGFJZCIsImludGVydmFsIiwiYmlucyIsImxlbmd0aCIsIk1hdGgiLCJyb3VuZCIsIm1hcCIsIl8iLCJpZHgiLCJiaW4iLCJ4MCIsIngxIiwiZ2V0QmVmb3JlTGF5ZXJJZCIsInRvcE1hcFN0eWxlIiwiYm90dG9tTWFwU3R5bGUiLCJfdG9wTWFwU3R5bGUkbGF5ZXJzIiwiX2JvdHRvbU1hcFN0eWxlJGxheWVyIiwibGF5ZXJzIiwiZmlyc3RUb3BMYXllciIsImZpcnN0VG9wTGF5ZXJJZHgiLCJmaW5kSW5kZXgiLCJsYXllciIsImlkIiwiYmVmb3JlSWR4IiwiZ2V0U3RhdGljTWFwUHJvcHMiLCJrZXBsZXJTdGF0ZSIsIm9uVmlld0NoYW5nZSIsIm1hcGJveEFwaUFjY2Vzc1Rva2VuIiwiX2tlcGxlclN0YXRlJG1hcFN0eWxlIiwiX2tlcGxlclN0YXRlJG1hcFN0YXRlIiwiX2tlcGxlclN0YXRlJG1hcFN0eWxlMiIsIl9rZXBsZXJTdGF0ZSRtYXBTdHlsZTMiLCJtYXBib3hBcGlVcmwiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJjdXJyZW50U3R5bGUiLCJtYXBTdHlsZSIsIm1hcFN0eWxlcyIsInN0eWxlVHlwZSIsImFjY2Vzc1Rva2VuIiwiaXNNYXBib3giLCJpc0dsb2JlIiwiQm9vbGVhbiIsIm1hcFN0YXRlIiwiZ2xvYmUiLCJlbmFibGVkIiwibWFwYm94VHJhbnNmb3JtUmVxdWVzdCIsInVybCIsInJlc291cmNlVHlwZSIsImNvbnZlcnRNYXBib3hTdHlsZVVybHMiLCJfb2JqZWN0U3ByZWFkIiwidHJhbnNmb3JtUmVxdWVzdCIsIm9uVmlld3BvcnRDaGFuZ2UiLCJtYXBMaWIiLCJzdHlsZSIsIl90eXBlb2YiLCJjb252ZXJ0ZWQiLCJzcHJpdGUiLCJfdHJhbnNmb3JtTWFwYm94VXJsIiwiZ2x5cGhzIiwiX3RyYW5zZm9ybU1hcGJveFVybDIiLCJzb3VyY2VzIiwibmV3U291cmNlcyIsIl9pIiwiX09iamVjdCRlbnRyaWVzIiwiT2JqZWN0IiwiZW50cmllcyIsIl9PYmplY3QkZW50cmllcyRfaSIsIl9zbGljZWRUb0FycmF5Iiwia2V5Iiwic291cmNlIiwiX3RyYW5zZm9ybU1hcGJveFVybDMiLCJnZXRIdWJibGVQYXJhbWV0ZXJzIiwidmlzU3RhdGUiLCJsYXllckJsZW5kaW5nIiwiZ2V0SHViYmxlRGVja0dsUHJvcHMiLCJfa2VwbGVyU3RhdGUkbWFwU3RhdGUyIiwiX2tlcGxlclN0YXRlJG1hcFN0eWxlNCIsInBhcmFtZXRlcnMiLCJjb250cm9sbGVyIiwidmlld3MiLCJmYXJaTXVsdGlwbGllciIsImdsb2JlQmFzZUxheWVycyIsIm1hcFN0eWxlVHlwZSIsImdsb2JlVG9wTGF5ZXJzIiwiZGF0YUxheWVycyIsInByaW1hcnlNYXAiLCJfcmVmMiIsImxvbmdpdHVkZSIsImxhdGl0dWRlIiwiem9vbSIsInBpdGNoIiwiYmVhcmluZyIsImluaXRpYWxWaWV3U3RhdGUiLCJtaW5ab29tIiwibWF4Wm9vbSIsImN1bGwiLCJyZXNvbHV0aW9uIiwiY2xlYXIiLCJjbGVhckNvbG9yIiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiZ2V0R2xvYmVFeHBvcnRMYXllcnMiLCJfcmVmMyIsIl9rZXBsZXJTdGF0ZSRtYXBTdGF0ZTMiLCJfa2VwbGVyU3RhdGUkbWFwU3R5bGU1IiwibWFwSW5kZXgiLCJnZXRBbmltYXRhYmxlRmlsdGVycyIsIl9rZXBsZXJTdGF0ZSR2aXNTdGF0ZSIsImZpbHRlcnMiLCJmIiwidmlldyIsImVubGFyZ2VkIiwic3luY2VkV2l0aExheWVyVGltZWxpbmUiLCJzY2FsZVRvVmlkZW9FeHBvcnQiLCJ2aWV3U3RhdGUiLCJjb250YWluZXIiLCJ2aWV3cG9ydCIsIm53IiwidW5wcm9qZWN0Iiwic2UiLCJ3aWR0aCIsImhlaWdodCIsInZpZGVvVmlld3BvcnQiLCJmaXRCb3VuZHMiLCJhbHRpdHVkZSIsImUiLCJwYXJzZVNldENhbWVyYVR5cGUiLCJzdHJDYW1lcmFUeXBlIiwibW9kaWZpZWRWaWV3U3RhdGUiLCJtYXRjaCIsInR1cmZQb2ludCIsInBhcnNlSW50IiwiZGlyZWN0aW9ucyIsIlNldCIsImhhcyIsImRpcmVjdGlvbk1hcCIsIkVhc3QiLCJTb3V0aCIsIldlc3QiLCJOb3J0aCIsInRyYW5zbGF0ZWRQb2x5IiwiZ2VvbWV0cnkiLCJjb29yZGluYXRlcyIsIlJFU09MVVRJT05TIiwibGFiZWwiLCJnZXRSZXNvbHV0aW9uU2V0dGluZyIsImZpbmQiLCJyIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21vZGFscy9odWJibGUtdXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtNYXBWaWV3LCBXZWJNZXJjYXRvclZpZXdwb3J0LCB0eXBlIE1hcFZpZXdTdGF0ZX0gZnJvbSAnQGRlY2suZ2wvY29yZSc7XG5pbXBvcnQge1xuICBERUZBVUxUX01BUEJPWF9BUElfVVJMLFxuICBFTVBUWV9NQVBCT1hfU1RZTEUsXG4gIEZJTFRFUl9WSUVXX1RZUEVTLFxuICBGSUxURVJfVFlQRVMsXG4gIEdMT0JFX01JTl9aT09NLFxuICBHTE9CRV9NQVhfWk9PTVxufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge2dldExheWVyQmxlbmRpbmdQYXJhbWV0ZXJzLCBnZXRCYXNlTWFwTGlicmFyeX0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2dldEdsb2JlQmFzZUxheWVycywgZ2V0R2xvYmVUb3BMYXllcnMsIEtlcGxlckdsb2JlVmlld30gZnJvbSAnQGtlcGxlci5nbC9kZWNrZ2wtbGF5ZXJzJztcbmltcG9ydCB7Y29tcHV0ZURlY2tMYXllcnN9IGZyb20gJ0BrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuaW1wb3J0IHtpc01hcGJveFVSTCwgdHJhbnNmb3JtTWFwYm94VXJsfSBmcm9tICdtYXBsaWJyZWdsLW1hcGJveC1yZXF1ZXN0LXRyYW5zZm9ybWVyJztcbmltcG9ydCB7cG9pbnR9IGZyb20gJ0B0dXJmL2hlbHBlcnMnO1xuaW1wb3J0IHt0cmFuc2Zvcm1UcmFuc2xhdGV9IGZyb20gJ0B0dXJmL3RyYW5zZm9ybS10cmFuc2xhdGUnO1xuaW1wb3J0IHtUaW1lUmFuZ2VGaWx0ZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuXG50eXBlIEtlcGxlclN0YXRlID0ge1xuICB2aXNTdGF0ZTogYW55O1xuICBtYXBTdGF0ZTogYW55O1xuICBtYXBTdHlsZTogYW55O1xufTtcblxudHlwZSBNYXBib3hMYXllclJlZiA9IHtcbiAgaWQ6IHN0cmluZztcbn0gJiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG4vLyBsdW1hLmdsIGRlZmF1bHRzIGBkZWJ1Z2AgdG8gdHJ1ZSB3aGVuZXZlciBOT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nLCB3aGljaFxuLy8gaW5zdHJ1bWVudHMgZXZlcnkgcmVuZGVyIHBhc3Mgd2l0aCBhIFRJTUVfRUxBUFNFRF9FWFQgdGltZXIgcXVlcnkuIFdlYkdMMiBvbmx5XG4vLyBhbGxvd3Mgb25lIHN1Y2ggcXVlcnkgdG8gYmUgYWN0aXZlIGF0IGEgdGltZSwgYW5kIHRoZSBnbG9iZSBleHBvcnQgcmVuZGVyc1xuLy8gc2V2ZXJhbCBwYXNzZXMgcGVyIGZyYW1lLCBzbyB0aGUgZGVidWcgY29udGV4dCB0aHJvd3MgSU5WQUxJRF9PUEVSQVRJT04gYW5kXG4vLyB0YWtlcyB0aGUgd2hvbGUgZXhwb3J0IG1vZGFsIGRvd24uIEV4cG9ydCBwcmV2aWV3cyBhcmUgdGhyb3dhd2F5IHJlbmRlclxuLy8gdGFyZ2V0cyB0aGF0IGRvbid0IG5lZWQgdGhlIHZhbGlkYXRpb24gbGF5ZXIuXG5cbi8qKiBEZXZpY2UgcHJvcHMgZm9yIGV4cG9ydCBwcmV2aWV3cyB0aGF0IG93biB0aGVpciBjYW52YXMgYW5kIHJlYWQgcGl4ZWxzIGJhY2sgb2ZmIGl0LiAqL1xuZXhwb3J0IGNvbnN0IEVYUE9SVF9ERUNLX0RFVklDRV9QUk9QUyA9IHtcbiAgdHlwZTogJ3dlYmdsJyBhcyBjb25zdCxcbiAgd2ViZ2w6IHtwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IHRydWV9LFxuICBkZWJ1ZzogZmFsc2Vcbn07XG5cbi8qKiBEZXZpY2UgcHJvcHMgZm9yIGV4cG9ydCBwcmV2aWV3cyB0aGF0IGRyYXcgYXMgYW4gb3ZlcmxheSBvbiB0b3Agb2YgYSBiYXNlbWFwLiAqL1xuZXhwb3J0IGNvbnN0IEVYUE9SVF9PVkVSTEFZX0RFVklDRV9QUk9QUyA9IHtcbiAgdHlwZTogJ3dlYmdsJyBhcyBjb25zdCxcbiAgd2ViZ2w6IHtzdGVuY2lsOiB0cnVlfSxcbiAgZGVidWc6IGZhbHNlXG59O1xuXG5jb25zdCBsaW5lYXI6IChwOiBudW1iZXIpID0+IG51bWJlciA9IHAgPT4gcDtcbmNvbnN0IGhvbGQ6IChwOiBudW1iZXIpID0+IG51bWJlciA9IHAgPT4gKHAgPT09IDEgPyAxIDogMCk7XG5cbnR5cGUgVGltZVJhbmdlRmlsdGVyS2V5ZnJhbWVzID0ge1xuICBrZXlmcmFtZXM6IHt2YWx1ZTogbnVtYmVyIHwgW251bWJlciwgbnVtYmVyXX1bXTtcbiAgZWFzaW5nczogKHA6IG51bWJlcikgPT4gbnVtYmVyO1xuICB0aW1pbmdzPzogbnVtYmVyW107XG59O1xuXG5mdW5jdGlvbiBnZXRLZXlGcmFtZXNGcmVlKGZpbHRlcjogVGltZVJhbmdlRmlsdGVyKTogVGltZVJhbmdlRmlsdGVyS2V5ZnJhbWVzIHtcbiAgY29uc3QgZGVsdGEgPSBmaWx0ZXIudmFsdWVbMV0gLSBmaWx0ZXIudmFsdWVbMF07XG4gIHJldHVybiB7XG4gICAga2V5ZnJhbWVzOiBbXG4gICAgICB7dmFsdWU6IFtmaWx0ZXIuZG9tYWluWzBdLCBmaWx0ZXIuZG9tYWluWzBdICsgZGVsdGFdfSxcbiAgICAgIHt2YWx1ZTogW2ZpbHRlci5kb21haW5bMV0gLSBkZWx0YSwgZmlsdGVyLmRvbWFpblsxXV19XG4gICAgXSxcbiAgICBlYXNpbmdzOiBsaW5lYXJcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRpbWVSYW5nZUZpbHRlcktleWZyYW1lcyh7XG4gIGZpbHRlcixcbiAgdGltaW5nc1xufToge1xuICBmaWx0ZXI6IFRpbWVSYW5nZUZpbHRlcjtcbiAgdGltaW5nczogbnVtYmVyW107XG59KTogVGltZVJhbmdlRmlsdGVyS2V5ZnJhbWVzIHtcbiAgaWYgKGZpbHRlci50eXBlICE9PSBGSUxURVJfVFlQRVMudGltZVJhbmdlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiZmlsdGVyIHR5cGUgbXVzdCBiZSAndGltZVJhbmdlJy5cIik7XG4gIH1cblxuICBjb25zdCBkdXJhdGlvbiA9IHRpbWluZ3NbMV0gLSB0aW1pbmdzWzBdO1xuXG4gIHN3aXRjaCAoZmlsdGVyLmFuaW1hdGlvbldpbmRvdykge1xuICAgIGRlZmF1bHQ6XG4gICAgY2FzZSAnZnJlZSc6IHtcbiAgICAgIHJldHVybiBnZXRLZXlGcmFtZXNGcmVlKGZpbHRlcik7XG4gICAgfVxuICAgIGNhc2UgJ2luY3JlbWVudGFsJzoge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2V5ZnJhbWVzOiBbXG4gICAgICAgICAge3ZhbHVlOiBbZmlsdGVyLnZhbHVlWzBdLCBmaWx0ZXIudmFsdWVbMF0gKyAxXX0sXG4gICAgICAgICAge3ZhbHVlOiBbZmlsdGVyLnZhbHVlWzBdLCBmaWx0ZXIuZG9tYWluWzFdXX1cbiAgICAgICAgXSxcbiAgICAgICAgZWFzaW5nczogbGluZWFyXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlICdwb2ludCc6IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtleWZyYW1lczogW3t2YWx1ZTogZmlsdGVyLmRvbWFpblswXX0sIHt2YWx1ZTogZmlsdGVyLmRvbWFpblsxXX1dLFxuICAgICAgICBlYXNpbmdzOiBsaW5lYXJcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgJ2ludGVydmFsJzoge1xuICAgICAgY29uc3Qge3Bsb3RUeXBlLCB0aW1lQmlucywgZGF0YUlkfSA9IGZpbHRlcjtcbiAgICAgIGNvbnN0IHtpbnRlcnZhbH0gPSBwbG90VHlwZTtcblxuICAgICAgY29uc3QgYmlucyA9IHRpbWVCaW5zPy5bZGF0YUlkWzBdXT8uW2ludGVydmFsXTtcblxuICAgICAgaWYgKCFpbnRlcnZhbCB8fCAhYmlucyB8fCBiaW5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZ2V0S2V5RnJhbWVzRnJlZShmaWx0ZXIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkZWx0YSA9IE1hdGgucm91bmQoZHVyYXRpb24gLyBiaW5zLmxlbmd0aCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRpbWluZ3M6IGJpbnMubWFwKChfLCBpZHgpID0+IHRpbWluZ3NbMF0gKyBkZWx0YSAqIGlkeCksXG4gICAgICAgIGtleWZyYW1lczogYmlucy5tYXAoYmluID0+ICh7dmFsdWU6IFtiaW4ueDAsIGJpbi54MV19KSksXG4gICAgICAgIGVhc2luZ3M6IGhvbGRcbiAgICAgIH07XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCZWZvcmVMYXllcklkKHRvcE1hcFN0eWxlOiBhbnksIGJvdHRvbU1hcFN0eWxlOiBhbnkpOiBNYXBib3hMYXllclJlZiB8IG51bGwge1xuICBpZiAodG9wTWFwU3R5bGU/LmxheWVycz8ubGVuZ3RoICYmIGJvdHRvbU1hcFN0eWxlPy5sYXllcnM/Lmxlbmd0aCkge1xuICAgIGNvbnN0IGZpcnN0VG9wTGF5ZXIgPSB0b3BNYXBTdHlsZS5sYXllcnNbMF07XG4gICAgY29uc3QgZmlyc3RUb3BMYXllcklkeCA9IGJvdHRvbU1hcFN0eWxlLmxheWVycy5maW5kSW5kZXgoXG4gICAgICAobGF5ZXI6IE1hcGJveExheWVyUmVmKSA9PiBsYXllci5pZCA9PT0gZmlyc3RUb3BMYXllci5pZFxuICAgICk7XG4gICAgY29uc3QgYmVmb3JlSWR4ID0gZmlyc3RUb3BMYXllcklkeCAtIDE7XG4gICAgcmV0dXJuIGJlZm9yZUlkeCA+IC0xID8gYm90dG9tTWFwU3R5bGUubGF5ZXJzW2JlZm9yZUlkeF0gOiBudWxsO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhdGljTWFwUHJvcHMoXG4gIGtlcGxlclN0YXRlOiBLZXBsZXJTdGF0ZSxcbiAgb25WaWV3Q2hhbmdlOiAodmlld1N0YXRlOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiB2b2lkLFxuICBtYXBib3hBcGlBY2Nlc3NUb2tlbjogc3RyaW5nLFxuICBtYXBib3hBcGlVcmw6IHN0cmluZyA9IERFRkFVTFRfTUFQQk9YX0FQSV9VUkxcbik6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICBjb25zdCBjdXJyZW50U3R5bGUgPSBrZXBsZXJTdGF0ZS5tYXBTdHlsZT8ubWFwU3R5bGVzPy5ba2VwbGVyU3RhdGUubWFwU3R5bGUuc3R5bGVUeXBlXTtcbiAgY29uc3QgYWNjZXNzVG9rZW4gPSBjdXJyZW50U3R5bGU/LmFjY2Vzc1Rva2VuIHx8IG1hcGJveEFwaUFjY2Vzc1Rva2VuO1xuICBjb25zdCBpc01hcGJveCA9IGdldEJhc2VNYXBMaWJyYXJ5KGN1cnJlbnRTdHlsZSkgPT09ICdtYXBib3gnO1xuICBjb25zdCBpc0dsb2JlID0gQm9vbGVhbihrZXBsZXJTdGF0ZS5tYXBTdGF0ZT8uZ2xvYmU/LmVuYWJsZWQpO1xuXG4gIGNvbnN0IG1hcGJveFRyYW5zZm9ybVJlcXVlc3QgPSAodXJsOiBzdHJpbmcsIHJlc291cmNlVHlwZTogc3RyaW5nKSA9PiB7XG4gICAgaWYgKGlzTWFwYm94VVJMKHVybCkpIHtcbiAgICAgIHJldHVybiB0cmFuc2Zvcm1NYXBib3hVcmwodXJsLCByZXNvdXJjZVR5cGUsIGFjY2Vzc1Rva2VuKTtcbiAgICB9XG4gICAgcmV0dXJuIHt1cmx9O1xuICB9O1xuXG4gIC8vIEluIGdsb2JlIG1vZGUgdGhlIGRlY2suZ2wgR2xvYmVWaWV3IHJlbmRlcnMgdGhlIHBsYW5ldCArIGJhc2VtYXAgdGlsZXMgYXNcbiAgLy8gZGVjayBsYXllcnMgb24gYSB0cmFuc3BhcmVudCBjYW52YXMsIHNvIHRoZSBmbGF0IG1hcGxpYnJlIGJhc2UgbWFwIG11c3QgYmVcbiAgLy8gc3VwcHJlc3NlZCAob3RoZXJ3aXNlIGEgMkQgTWVyY2F0b3IgYmFzZW1hcCB3b3VsZCByZW5kZXIgYmVoaW5kIHRoZSBnbG9iZSkuXG4gIGNvbnN0IGJvdHRvbU1hcFN0eWxlID0gaXNHbG9iZVxuICAgID8gRU1QVFlfTUFQQk9YX1NUWUxFXG4gICAgOiBpc01hcGJveFxuICAgID8gY29udmVydE1hcGJveFN0eWxlVXJscyhrZXBsZXJTdGF0ZS5tYXBTdHlsZT8uYm90dG9tTWFwU3R5bGUsIGFjY2Vzc1Rva2VuKVxuICAgIDoga2VwbGVyU3RhdGUubWFwU3R5bGU/LmJvdHRvbU1hcFN0eWxlO1xuXG4gIHJldHVybiB7XG4gICAgLi4ua2VwbGVyU3RhdGUubWFwU3RhdGUsXG4gICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiB0cnVlLFxuICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuOiBhY2Nlc3NUb2tlbixcbiAgICBtYXBib3hBcGlVcmwsXG4gICAgdHJhbnNmb3JtUmVxdWVzdDogbWFwYm94VHJhbnNmb3JtUmVxdWVzdCxcbiAgICBtYXBTdHlsZTogYm90dG9tTWFwU3R5bGUsXG4gICAgb25WaWV3cG9ydENoYW5nZTogb25WaWV3Q2hhbmdlLFxuICAgIG1hcExpYjogaW1wb3J0KCdtYXBsaWJyZS1nbCcpXG4gIH07XG59XG5cbi8qKlxuICogQ29udmVydCBtYXBib3g6Ly8gVVJMcyBpbnNpZGUgYSBNYXBib3ggc3R5bGUgb2JqZWN0IHRvIEhUVFBTIEFQSSBVUkxzXG4gKiBzbyB0aGF0IG1hcGxpYnJlLWdsIGNhbiBmZXRjaCB0aGVtIGRpcmVjdGx5LlxuICovXG5mdW5jdGlvbiBjb252ZXJ0TWFwYm94U3R5bGVVcmxzKHN0eWxlOiBhbnksIGFjY2Vzc1Rva2VuOiBzdHJpbmcpOiBhbnkge1xuICBpZiAoIXN0eWxlIHx8IHR5cGVvZiBzdHlsZSAhPT0gJ29iamVjdCcpIHJldHVybiBzdHlsZTtcblxuICBjb25zdCBjb252ZXJ0ZWQgPSB7Li4uc3R5bGV9O1xuXG4gIGlmICh0eXBlb2YgY29udmVydGVkLnNwcml0ZSA9PT0gJ3N0cmluZycgJiYgaXNNYXBib3hVUkwoY29udmVydGVkLnNwcml0ZSkpIHtcbiAgICBjb252ZXJ0ZWQuc3ByaXRlID0gdHJhbnNmb3JtTWFwYm94VXJsKGNvbnZlcnRlZC5zcHJpdGUsICdTcHJpdGUnLCBhY2Nlc3NUb2tlbik/LnVybDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgY29udmVydGVkLmdseXBocyA9PT0gJ3N0cmluZycgJiYgaXNNYXBib3hVUkwoY29udmVydGVkLmdseXBocykpIHtcbiAgICBjb252ZXJ0ZWQuZ2x5cGhzID0gdHJhbnNmb3JtTWFwYm94VXJsKGNvbnZlcnRlZC5nbHlwaHMsICdHbHlwaHMnLCBhY2Nlc3NUb2tlbik/LnVybDtcbiAgfVxuXG4gIGlmIChjb252ZXJ0ZWQuc291cmNlcykge1xuICAgIGNvbnN0IG5ld1NvdXJjZXM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHNvdXJjZV0gb2YgT2JqZWN0LmVudHJpZXM8YW55Pihjb252ZXJ0ZWQuc291cmNlcykpIHtcbiAgICAgIGlmIChzb3VyY2U/LnVybCAmJiBpc01hcGJveFVSTChzb3VyY2UudXJsKSkge1xuICAgICAgICBuZXdTb3VyY2VzW2tleV0gPSB7XG4gICAgICAgICAgLi4uc291cmNlLFxuICAgICAgICAgIHVybDogdHJhbnNmb3JtTWFwYm94VXJsKHNvdXJjZS51cmwsICdTb3VyY2UnLCBhY2Nlc3NUb2tlbik/LnVybFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3U291cmNlc1trZXldID0gc291cmNlO1xuICAgICAgfVxuICAgIH1cbiAgICBjb252ZXJ0ZWQuc291cmNlcyA9IG5ld1NvdXJjZXM7XG4gIH1cblxuICByZXR1cm4gY29udmVydGVkO1xufVxuXG5mdW5jdGlvbiBnZXRIdWJibGVQYXJhbWV0ZXJzKGtlcGxlclN0YXRlOiBLZXBsZXJTdGF0ZSk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICByZXR1cm4gZ2V0TGF5ZXJCbGVuZGluZ1BhcmFtZXRlcnMoa2VwbGVyU3RhdGUudmlzU3RhdGUubGF5ZXJCbGVuZGluZyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRIdWJibGVEZWNrR2xQcm9wcyhcbiAga2VwbGVyU3RhdGU6IEtlcGxlclN0YXRlLFxuICBtYXBib3hBcGlBY2Nlc3NUb2tlbjogc3RyaW5nLFxuICBtYXBib3hBcGlVcmw6IHN0cmluZyA9IERFRkFVTFRfTUFQQk9YX0FQSV9VUkxcbik6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICBjb25zdCBnbG9iZSA9IGtlcGxlclN0YXRlLm1hcFN0YXRlPy5nbG9iZTtcbiAgY29uc3QgaXNHbG9iZSA9IEJvb2xlYW4oZ2xvYmU/LmVuYWJsZWQpO1xuXG4gIGlmICghaXNHbG9iZSkge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJhbWV0ZXJzOiBnZXRIdWJibGVQYXJhbWV0ZXJzKGtlcGxlclN0YXRlKSxcbiAgICAgIGNvbnRyb2xsZXI6IHRydWUsXG4gICAgICB2aWV3czogbmV3IE1hcFZpZXcoe1xuICAgICAgICBpZDogJ21hcGJveCcsXG4gICAgICAgIGZhclpNdWx0aXBsaWVyOiAxLjJcbiAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIC8vIEdsb2JlIHZpZGVvIGV4cG9ydDogbWlycm9yIHRoZSBpbnRlcmFjdGl2ZSBnbG9iZSByZW5kZXIgcGF0aCBpbiBtYXAtY29udGFpbmVyLlxuICAvLyAtIFVzZSBhIEdsb2JlVmlldyBzbyB0aGUgY2FtZXJhL3Byb2plY3Rpb24gY3VydmUgZGF0YSBhcm91bmQgdGhlIHNwaGVyZS5cbiAgLy8gLSBQcm92aWRlIGxheWVycyBleHBsaWNpdGx5IChnbG9iZSBiYXNlIGxheWVycyArIGtlcGxlciBkYXRhIGxheWVycyArIGdsb2JlXG4gIC8vICAgdG9wIGxheWVycykuIFdoZW4gYGRlY2tQcm9wcy5sYXllcnNgIGlzIHNldCwgaHViYmxlJ3MgcHJldmlldyB1c2VzIHRoZW1cbiAgLy8gICB2ZXJiYXRpbSAoc2tpcHBpbmcgaXRzIGludGVybmFsIDJELW9ubHkgY3JlYXRlS2VwbGVyTGF5ZXJzIHBhdGgpLCBhbmQgdGhlXG4gIC8vICAga2VwbGVyIGxheWVycyBhcmUgYnVpbHQgZnJvbSBgbWFwU3RhdGUuZ2xvYmVgLCBzbyBjb21wb3NpdGUgbGF5ZXJzIChlLmcuXG4gIC8vICAgdGhlIGhlYXRtYXApIGVtaXQgdGhlaXIgZ2xvYmUtY29uZm9ybWluZyBzdWJsYXllcnMuXG4gIGNvbnN0IGdsb2JlQmFzZUxheWVycyA9IGdldEdsb2JlQmFzZUxheWVycyh7XG4gICAgbWFwYm94QXBpQWNjZXNzVG9rZW46IG1hcGJveEFwaUFjY2Vzc1Rva2VuIHx8ICcnLFxuICAgIGdsb2JlLFxuICAgIG1hcFN0eWxlVHlwZToga2VwbGVyU3RhdGUubWFwU3R5bGU/LnN0eWxlVHlwZVxuICB9KTtcbiAgY29uc3QgZ2xvYmVUb3BMYXllcnMgPSBnZXRHbG9iZVRvcExheWVycyh7Z2xvYmV9KTtcbiAgY29uc3QgZGF0YUxheWVycyA9IGNvbXB1dGVEZWNrTGF5ZXJzKGtlcGxlclN0YXRlLCB7XG4gICAgcHJpbWFyeU1hcDogdHJ1ZSxcbiAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgICBtYXBib3hBcGlVcmxcbiAgfSk7XG5cbiAgLy8gaHViYmxlJ3MgdmlkZW8tZXhwb3J0IHByZXZpZXcgcmVuZGVycyBhIGJhcmUgPERlY2tHTD4gaW4gdGhlIGRpc2FibGVCYXNlTWFwXG4gIC8vIChnbG9iZSkgYnJhbmNoIGFuZCDigJQgdW5saWtlIGl0cyBtYXBib3ggYnJhbmNoIOKAlCBuZXZlciBmb3J3YXJkcyBhIHZpZXdTdGF0ZS5cbiAgLy8gV2l0aCBgY29udHJvbGxlcjogdHJ1ZWAgZGVjay5nbCB0aGVuIGNvbnN0cnVjdHMgYSBjb250cm9sbGVyIHN0YXRlIGZyb20gYW5cbiAgLy8gZW1wdHkgdmlldyBzdGF0ZSwgYW5kIEdsb2JlU3RhdGUvTWFwU3RhdGUgYXNzZXJ0IG9uIHRoZSBtaXNzaW5nXG4gIC8vIGxhdGl0dWRlL2xvbmdpdHVkZS96b29tIChcImFzc2VydGlvbiBmYWlsZWQgYXQgbmV3IE1hcFN0YXRlL0dsb2JlU3RhdGVcIikuXG4gIC8vIFRoYXQgZGVnZW5lcmF0ZSB2aWV3cG9ydCBhbHNvIGxlYXZlcyB0aWxlL01WVCBiYXNlIGxheWVycyBwZXJtYW5lbnRseVxuICAvLyBcIm5vdCBsb2FkZWRcIiwgc28gaHViYmxlJ3MgYGxheWVycy5ldmVyeShsID0+IGwuaXNMb2FkZWQpYCBjYXB0dXJlIGdhdGUgbmV2ZXJcbiAgLy8gZmlyZXMgYW5kIHRoZSBleHBvcnQgaGFuZ3MuIFByb3ZpZGUgYW4gZXhwbGljaXQgaW5pdGlhbFZpZXdTdGF0ZSAoZGVjay5nbFxuICAvLyB1c2VzIGl0IHRvIHNlZWQgdGhlIGNvbnRyb2xsZXIgd2hlbiBubyBjb250cm9sbGVkIHZpZXdTdGF0ZSBpcyBzdXBwbGllZCkgc29cbiAgLy8gdGhlIGdsb2JlIGNhbWVyYSBpcyB2YWxpZCwgdGlsZXMgcmVzb2x2ZSwgYW5kIGludGVyYWN0aW9uIHdvcmtzLlxuICBjb25zdCB7bG9uZ2l0dWRlLCBsYXRpdHVkZSwgem9vbSwgcGl0Y2gsIGJlYXJpbmd9ID0ga2VwbGVyU3RhdGUubWFwU3RhdGUgfHwge307XG4gIGNvbnN0IGluaXRpYWxWaWV3U3RhdGUgPSB7XG4gICAgbG9uZ2l0dWRlLFxuICAgIGxhdGl0dWRlLFxuICAgIHpvb20sXG4gICAgcGl0Y2g6IHBpdGNoIHx8IDAsXG4gICAgYmVhcmluZzogYmVhcmluZyB8fCAwLFxuICAgIG1pblpvb206IEdMT0JFX01JTl9aT09NLFxuICAgIG1heFpvb206IEdMT0JFX01BWF9aT09NXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAuLi5nZXRIdWJibGVQYXJhbWV0ZXJzKGtlcGxlclN0YXRlKSxcbiAgICAgIGN1bGw6IHRydWVcbiAgICB9LFxuICAgIC8vIE1hdGNoIHRoZSBpbnRlcmFjdGl2ZSBnbG9iZSBjb250cm9sbGVyIGJvdW5kcyBzbyBwYW5uaW5nL3pvb20gZmVlbHMgdGhlXG4gICAgLy8gc2FtZSBpbiB0aGUgcHJldmlldyBhcyBvbiB0aGUgbWFpbiBtYXAuXG4gICAgY29udHJvbGxlcjoge1xuICAgICAgbWluWm9vbTogR0xPQkVfTUlOX1pPT00sXG4gICAgICBtYXhab29tOiBHTE9CRV9NQVhfWk9PTVxuICAgIH0sXG4gICAgaW5pdGlhbFZpZXdTdGF0ZSxcbiAgICB2aWV3czogbmV3IEtlcGxlckdsb2JlVmlldyh7XG4gICAgICByZXNvbHV0aW9uOiA1LFxuICAgICAgLy8gY2xlYXJDb2xvcjpmYWxzZSAobm90IGEgc29saWQgY29sb3IpIGlzIGRlbGliZXJhdGUgYW5kIG1pcnJvcnMgdGhlXG4gICAgICAvLyBpbnRlcmFjdGl2ZSBtYXA6IGRlY2suZ2wgYXBwbGllcyBhIFZpZXcncyBjbGVhckNvbG9yIGluIEVWRVJZIHBhc3NcbiAgICAgIC8vIGluY2x1ZGluZyB0aGUgcGlja2luZyBwYXNzLCBmb3JjaW5nIGFscGhhIHRvIDI1NS4gSW4gdGhlIHBpY2tpbmcgYnVmZmVyXG4gICAgICAvLyB0aGUgYWxwaGEgYnl0ZSBlbmNvZGVzIHRoZSBsYXllciBpbmRleCwgc28gYSBzb2xpZCBjbGVhciBtYWtlcyBkZWNrLmdsXG4gICAgICAvLyBkZWNvZGUgZXZlcnkgcGl4ZWwgYXMgYSBub24tZXhpc3RlbnQgbGF5ZXIgKFwiUGlja2VkIG5vbi1leGlzdGVudCBsYXllci5cbiAgICAgIC8vIElzIHBpY2tpbmcgYnVmZmVyIGNvcnJ1cHQ/XCIpIHdoZW5ldmVyIHRoZSBjb250cm9sbGVyIHBpY2tzIG9uIGhvdmVyLlxuICAgICAgLy8gU2tpcHBpbmcgdGhlIGNvbG9yIGNsZWFyIGtlZXBzIHRoZSBwaWNraW5nIGJ1ZmZlcidzIDAgYWxwaGEgaW50YWN0OyB0aGVcbiAgICAgIC8vIHNwaGVyZSBpdHNlbGYgc3RheXMgb3BhcXVlIHZpYSB0aGUgZ2xvYmUtYmFja2dyb3VuZCBTb2xpZFBvbHlnb25MYXllci5cbiAgICAgIGNsZWFyOiB0cnVlLFxuICAgICAgY2xlYXJDb2xvcjogZmFsc2VcbiAgICB9KSxcbiAgICBsYXllcnM6IFsuLi5nbG9iZUJhc2VMYXllcnMsIC4uLmRhdGFMYXllcnMsIC4uLmdsb2JlVG9wTGF5ZXJzXVxuICB9O1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgZnJlc2ggc2V0IG9mIGdsb2JlIGxheWVycyAoYmFzZSArIGRhdGEgKyB0b3ApIGZvciBhIGdpdmVuIHNwbGl0LW1hcFxuICogaW5kZXguIFVzZWQgYnkgdGhlIHN3aXBlIGV4cG9ydCBwcmV2aWV3LCB3aGljaCBtb3VudHMgdHdvIGluZGVwZW5kZW50IERlY2tcbiAqIGluc3RhbmNlczogZWFjaCBzaWRlIG5lZWRzIGl0cyBPV04gbGF5ZXIgaW5zdGFuY2VzIChkZWNrLmdsIExheWVyIG9iamVjdHMgYXJlXG4gKiBzdGF0ZWZ1bCBhbmQgYm91bmQgdG8gYSBzaW5nbGUgRGVjaykgYW5kIGl0cyBvd24gYG1hcEluZGV4YCBzbyB0aGUgc3BsaXQtbWFwXG4gKiBsYXllciB2aXNpYmlsaXR5IGlzIHJlc3BlY3RlZCBvbiBlYWNoIGhhbGYgb2YgdGhlIHN3aXBlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2xvYmVFeHBvcnRMYXllcnMoXG4gIGtlcGxlclN0YXRlOiBLZXBsZXJTdGF0ZSxcbiAge1xuICAgIG1hcEluZGV4LFxuICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICAgIG1hcGJveEFwaVVybFxuICB9OiB7bWFwSW5kZXg6IG51bWJlcjsgbWFwYm94QXBpQWNjZXNzVG9rZW4/OiBzdHJpbmc7IG1hcGJveEFwaVVybD86IHN0cmluZ31cbikge1xuICBjb25zdCBnbG9iZSA9IGtlcGxlclN0YXRlLm1hcFN0YXRlPy5nbG9iZTtcbiAgY29uc3QgZ2xvYmVCYXNlTGF5ZXJzID0gZ2V0R2xvYmVCYXNlTGF5ZXJzKHtcbiAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbjogbWFwYm94QXBpQWNjZXNzVG9rZW4gfHwgJycsXG4gICAgZ2xvYmUsXG4gICAgbWFwU3R5bGVUeXBlOiBrZXBsZXJTdGF0ZS5tYXBTdHlsZT8uc3R5bGVUeXBlXG4gIH0pO1xuICBjb25zdCBnbG9iZVRvcExheWVycyA9IGdldEdsb2JlVG9wTGF5ZXJzKHtnbG9iZX0pO1xuICBjb25zdCBkYXRhTGF5ZXJzID0gY29tcHV0ZURlY2tMYXllcnMoa2VwbGVyU3RhdGUsIHtcbiAgICBtYXBJbmRleCxcbiAgICBwcmltYXJ5TWFwOiBtYXBJbmRleCA9PT0gMCxcbiAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgICBtYXBib3hBcGlVcmxcbiAgfSk7XG4gIHJldHVybiBbLi4uZ2xvYmVCYXNlTGF5ZXJzLCAuLi5kYXRhTGF5ZXJzLCAuLi5nbG9iZVRvcExheWVyc107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbmltYXRhYmxlRmlsdGVycyhrZXBsZXJTdGF0ZTogS2VwbGVyU3RhdGUpOiBUaW1lUmFuZ2VGaWx0ZXJbXSB7XG4gIGNvbnN0IGZpbHRlcnMgPSBrZXBsZXJTdGF0ZS52aXNTdGF0ZT8uZmlsdGVycyB8fCBbXTtcbiAgcmV0dXJuIGZpbHRlcnMuZmlsdGVyKFxuICAgIChmOiBhbnkpID0+XG4gICAgICBmLnR5cGUgPT09IEZJTFRFUl9UWVBFUy50aW1lUmFuZ2UgJiZcbiAgICAgIChmLnZpZXcgPT09IEZJTFRFUl9WSUVXX1RZUEVTLmVubGFyZ2VkIHx8IGYuc3luY2VkV2l0aExheWVyVGltZWxpbmUpXG4gICk7XG59XG5cbi8vIC0tLSBWaWRlbyBleHBvcnQgdXRpbGl0aWVzIChpbmxpbmVkIGZyb20gQGh1YmJsZS5nbCBpbnRlcm5hbHMpIC0tLVxuXG5leHBvcnQgZnVuY3Rpb24gc2NhbGVUb1ZpZGVvRXhwb3J0KFxuICB2aWV3U3RhdGU6IE1hcFZpZXdTdGF0ZSxcbiAgY29udGFpbmVyOiB7d2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXJ9XG4pOiBNYXBWaWV3U3RhdGUgJiB7d2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXJ9IHtcbiAgLy8gSW4gZ2xvYmUgbW9kZSAoYW5kIGF0IGV4dHJlbWUgem9vbXMpIHRoZSBXZWJNZXJjYXRvclZpZXdwb3J0IHVzZWQgYmVsb3cgY2FuXG4gIC8vIHByb2R1Y2UgYSBub24taW52ZXJ0aWJsZSBwcm9qZWN0aW9uIG1hdHJpeCwgbWFraW5nIGB1bnByb2plY3RgIHRocm93LiBUaGVcbiAgLy8gTWVyY2F0b3IgZml0LWJvdW5kcyByZXNjYWxpbmcgb25seSBtYWtlcyBzZW5zZSBmb3IgdGhlIGZsYXQgTWFwVmlldyBhbnl3YXksXG4gIC8vIHNvIGZhbGwgYmFjayB0byBzaW1wbHkgcmVzaXppbmcgdGhlIHZpZXdwb3J0IHRvIHRoZSBleHBvcnQgY29udGFpbmVyLlxuICB0cnkge1xuICAgIGNvbnN0IHZpZXdwb3J0ID0gbmV3IFdlYk1lcmNhdG9yVmlld3BvcnQodmlld1N0YXRlKTtcbiAgICBjb25zdCBudyA9IHZpZXdwb3J0LnVucHJvamVjdChbMCwgMF0pIGFzIFtudW1iZXIsIG51bWJlcl07XG4gICAgY29uc3Qgc2UgPSB2aWV3cG9ydC51bnByb2plY3QoW3ZpZXdwb3J0LndpZHRoLCB2aWV3cG9ydC5oZWlnaHRdKSBhcyBbbnVtYmVyLCBudW1iZXJdO1xuICAgIGNvbnN0IHZpZGVvVmlld3BvcnQgPSBuZXcgV2ViTWVyY2F0b3JWaWV3cG9ydCh7XG4gICAgICAuLi52aWV3U3RhdGUsXG4gICAgICB3aWR0aDogY29udGFpbmVyLndpZHRoLFxuICAgICAgaGVpZ2h0OiBjb250YWluZXIuaGVpZ2h0XG4gICAgfSkuZml0Qm91bmRzKFtudywgc2VdKTtcbiAgICBjb25zdCB7aGVpZ2h0LCB3aWR0aCwgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgem9vbSwgYWx0aXR1ZGV9ID0gdmlkZW9WaWV3cG9ydDtcbiAgICByZXR1cm4ge1xuICAgICAgaGVpZ2h0LFxuICAgICAgd2lkdGgsXG4gICAgICBsYXRpdHVkZSxcbiAgICAgIGxvbmdpdHVkZSxcbiAgICAgIHBpdGNoOiB2aWV3U3RhdGUucGl0Y2gsXG4gICAgICB6b29tLFxuICAgICAgYmVhcmluZzogdmlld1N0YXRlLmJlYXJpbmcsXG4gICAgICBhbHRpdHVkZVxuICAgIH0gYXMgYW55O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZpZXdTdGF0ZSxcbiAgICAgIHdpZHRoOiBjb250YWluZXIud2lkdGgsXG4gICAgICBoZWlnaHQ6IGNvbnRhaW5lci5oZWlnaHRcbiAgICB9IGFzIGFueTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTZXRDYW1lcmFUeXBlKHN0ckNhbWVyYVR5cGU6IHN0cmluZywgdmlld1N0YXRlOiBNYXBWaWV3U3RhdGUpOiBNYXBWaWV3U3RhdGUge1xuICBjb25zdCBtb2RpZmllZFZpZXdTdGF0ZTogYW55ID0gey4uLnZpZXdTdGF0ZX07XG4gIGNvbnN0IG1hdGNoID0gc3RyQ2FtZXJhVHlwZS5tYXRjaCgvXFxiKD8hdG8pXFxiXFxTK1xcdy9nKTtcbiAgaWYgKCFtYXRjaCkgcmV0dXJuIG1vZGlmaWVkVmlld1N0YXRlO1xuXG4gIGNvbnN0IHR1cmZQb2ludCA9IHBvaW50KFttb2RpZmllZFZpZXdTdGF0ZS5sb25naXR1ZGUsIG1vZGlmaWVkVmlld1N0YXRlLmxhdGl0dWRlXSk7XG5cbiAgaWYgKG1hdGNoWzBdID09PSAnT3JiaXQnKSB7XG4gICAgbW9kaWZpZWRWaWV3U3RhdGUuYmVhcmluZyA9IG1vZGlmaWVkVmlld1N0YXRlLmJlYXJpbmcgKyBwYXJzZUludChtYXRjaFsxXSwgMTApO1xuICB9XG5cbiAgY29uc3QgZGlyZWN0aW9ucyA9IG5ldyBTZXQoWydFYXN0JywgJ1NvdXRoJywgJ1dlc3QnLCAnTm9ydGgnXSk7XG4gIGlmIChkaXJlY3Rpb25zLmhhcyhtYXRjaFswXSkpIHtcbiAgICBjb25zdCBkaXJlY3Rpb25NYXA6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7RWFzdDogMjcwLCBTb3V0aDogMCwgV2VzdDogOTAsIE5vcnRoOiAxODB9O1xuICAgIGNvbnN0IHRyYW5zbGF0ZWRQb2x5ID0gdHJhbnNmb3JtVHJhbnNsYXRlKHR1cmZQb2ludCwgMTAsIGRpcmVjdGlvbk1hcFttYXRjaFswXV0pO1xuICAgIGlmIChtYXRjaFswXSA9PT0gJ0Vhc3QnIHx8IG1hdGNoWzBdID09PSAnV2VzdCcpIHtcbiAgICAgIG1vZGlmaWVkVmlld1N0YXRlLmxvbmdpdHVkZSA9IHRyYW5zbGF0ZWRQb2x5Lmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBtb2RpZmllZFZpZXdTdGF0ZS5sYXRpdHVkZSA9IHRyYW5zbGF0ZWRQb2x5Lmdlb21ldHJ5LmNvb3JkaW5hdGVzWzFdO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtYXRjaFswXSA9PT0gJ1pvb20nKSB7XG4gICAgbW9kaWZpZWRWaWV3U3RhdGUuem9vbSArPSBtYXRjaFsxXSA9PT0gJ0luJyA/IDMgOiAtMztcbiAgfVxuXG4gIHJldHVybiBtb2RpZmllZFZpZXdTdGF0ZTtcbn1cblxudHlwZSBSZXNvbHV0aW9uID0ge3ZhbHVlOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmc7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyfTtcblxuY29uc3QgUkVTT0xVVElPTlM6IFJlc29sdXRpb25bXSA9IFtcbiAge3ZhbHVlOiAnOTYweDU0MCcsIGxhYmVsOiAnR29vZCAoNTQwcCknLCB3aWR0aDogOTYwLCBoZWlnaHQ6IDU0MH0sXG4gIHt2YWx1ZTogJzEyODB4NzIwJywgbGFiZWw6ICdIaWdoICg3MjBwKScsIHdpZHRoOiAxMjgwLCBoZWlnaHQ6IDcyMH0sXG4gIHt2YWx1ZTogJzE5MjB4MTA4MCcsIGxhYmVsOiAnSGlnaGVzdCAoMTA4MHApJywgd2lkdGg6IDE5MjAsIGhlaWdodDogMTA4MH0sXG4gIHt2YWx1ZTogJzY0MHg0ODAnLCBsYWJlbDogJ0dvb2QgKDQ4MHApJywgd2lkdGg6IDY0MCwgaGVpZ2h0OiA0ODB9LFxuICB7dmFsdWU6ICcxMjgweDk2MCcsIGxhYmVsOiAnSGlnaCAoOTYwcCknLCB3aWR0aDogMTI4MCwgaGVpZ2h0OiA5NjB9LFxuICB7dmFsdWU6ICcxOTIweDE0NDAnLCBsYWJlbDogJ0hpZ2hlc3QgKDE0NDBwKScsIHdpZHRoOiAxOTIwLCBoZWlnaHQ6IDE0NDB9XG5dO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzb2x1dGlvblNldHRpbmcodmFsdWU6IHN0cmluZyk6IFJlc29sdXRpb24ge1xuICByZXR1cm4gUkVTT0xVVElPTlMuZmluZChyID0+IHIu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
434
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNYXBWaWV3IiwiV2ViTWVyY2F0b3JWaWV3cG9ydCIsIkRFRkFVTFRfTUFQQk9YX0FQSV9VUkwiLCJFTVBUWV9NQVBCT1hfU1RZTEUiLCJGSUxURVJfVklFV19UWVBFUyIsIkZJTFRFUl9UWVBFUyIsIkdMT0JFX01JTl9aT09NIiwiR0xPQkVfTUFYX1pPT00iLCJnZXRMYXllckJsZW5kaW5nUGFyYW1ldGVycyIsImdldEJhc2VNYXBMaWJyYXJ5IiwiZ2V0R2xvYmVCYXNlTGF5ZXJzIiwiZ2V0R2xvYmVUb3BMYXllcnMiLCJLZXBsZXJHbG9iZVZpZXciLCJjb21wdXRlRGVja0xheWVycyIsImlzTWFwYm94VVJMIiwidHJhbnNmb3JtTWFwYm94VXJsIiwicG9pbnQiLCJ0cmFuc2Zvcm1UcmFuc2xhdGUiLCJFWFBPUlRfREVDS19ERVZJQ0VfUFJPUFMiLCJ0eXBlIiwid2ViZ2wiLCJwcmVzZXJ2ZURyYXdpbmdCdWZmZXIiLCJkZWJ1ZyIsIkVYUE9SVF9PVkVSTEFZX0RFVklDRV9QUk9QUyIsInN0ZW5jaWwiLCJsaW5lYXIiLCJwIiwiaG9sZCIsImdldEtleUZyYW1lc0ZyZWUiLCJmaWx0ZXIiLCJkZWx0YSIsInZhbHVlIiwia2V5ZnJhbWVzIiwiZG9tYWluIiwiZWFzaW5ncyIsImdldFRpbWVSYW5nZUZpbHRlcktleWZyYW1lcyIsIl9yZWYiLCJ0aW1pbmdzIiwidGltZVJhbmdlIiwiRXJyb3IiLCJkdXJhdGlvbiIsImFuaW1hdGlvbldpbmRvdyIsIl90aW1lQmlucyRkYXRhSWQkIiwicGxvdFR5cGUiLCJ0aW1lQmlucyIsImRhdGFJZCIsImludGVydmFsIiwiYmlucyIsImxlbmd0aCIsIk1hdGgiLCJyb3VuZCIsIm1hcCIsIl8iLCJpZHgiLCJiaW4iLCJ4MCIsIngxIiwiZ2V0QmVmb3JlTGF5ZXJJZCIsInRvcE1hcFN0eWxlIiwiYm90dG9tTWFwU3R5bGUiLCJfdG9wTWFwU3R5bGUkbGF5ZXJzIiwiX2JvdHRvbU1hcFN0eWxlJGxheWVyIiwibGF5ZXJzIiwiZmlyc3RUb3BMYXllciIsImZpcnN0VG9wTGF5ZXJJZHgiLCJmaW5kSW5kZXgiLCJsYXllciIsImlkIiwiYmVmb3JlSWR4IiwiZ2V0U3RhdGljTWFwUHJvcHMiLCJrZXBsZXJTdGF0ZSIsIm9uVmlld0NoYW5nZSIsIm1hcGJveEFwaUFjY2Vzc1Rva2VuIiwiX2tlcGxlclN0YXRlJG1hcFN0eWxlIiwiX2tlcGxlclN0YXRlJG1hcFN0YXRlIiwiX2tlcGxlclN0YXRlJG1hcFN0eWxlMiIsIl9rZXBsZXJTdGF0ZSRtYXBTdHlsZTMiLCJtYXBib3hBcGlVcmwiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJjdXJyZW50U3R5bGUiLCJtYXBTdHlsZSIsIm1hcFN0eWxlcyIsInN0eWxlVHlwZSIsImFjY2Vzc1Rva2VuIiwiaXNNYXBib3giLCJpc0dsb2JlIiwiQm9vbGVhbiIsIm1hcFN0YXRlIiwiZ2xvYmUiLCJlbmFibGVkIiwibWFwYm94VHJhbnNmb3JtUmVxdWVzdCIsInVybCIsInJlc291cmNlVHlwZSIsImNvbnZlcnRNYXBib3hTdHlsZVVybHMiLCJfb2JqZWN0U3ByZWFkIiwidHJhbnNmb3JtUmVxdWVzdCIsIm9uVmlld3BvcnRDaGFuZ2UiLCJtYXBMaWIiLCJzdHlsZSIsIl90eXBlb2YiLCJjb252ZXJ0ZWQiLCJzcHJpdGUiLCJfdHJhbnNmb3JtTWFwYm94VXJsIiwiZ2x5cGhzIiwiX3RyYW5zZm9ybU1hcGJveFVybDIiLCJzb3VyY2VzIiwibmV3U291cmNlcyIsIl9pIiwiX09iamVjdCRlbnRyaWVzIiwiT2JqZWN0IiwiZW50cmllcyIsIl9PYmplY3QkZW50cmllcyRfaSIsIl9zbGljZWRUb0FycmF5Iiwia2V5Iiwic291cmNlIiwiX3RyYW5zZm9ybU1hcGJveFVybDMiLCJnZXRIdWJibGVQYXJhbWV0ZXJzIiwidmlzU3RhdGUiLCJsYXllckJsZW5kaW5nIiwiZ2V0SHViYmxlRGVja0dsUHJvcHMiLCJfa2VwbGVyU3RhdGUkbWFwU3RhdGUyIiwiX2tlcGxlclN0YXRlJG1hcFN0eWxlNCIsInBhcmFtZXRlcnMiLCJjb250cm9sbGVyIiwidmlld3MiLCJmYXJaTXVsdGlwbGllciIsImdsb2JlQmFzZUxheWVycyIsIm1hcFN0eWxlVHlwZSIsImdsb2JlVG9wTGF5ZXJzIiwiZGF0YUxheWVycyIsInByaW1hcnlNYXAiLCJfcmVmMiIsImxvbmdpdHVkZSIsImxhdGl0dWRlIiwiem9vbSIsInBpdGNoIiwiYmVhcmluZyIsImluaXRpYWxWaWV3U3RhdGUiLCJtaW5ab29tIiwibWF4Wm9vbSIsImN1bGwiLCJyZXNvbHV0aW9uIiwiY2xlYXIiLCJjbGVhckNvbG9yIiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiZ2V0R2xvYmVFeHBvcnRMYXllcnMiLCJfcmVmMyIsIl9rZXBsZXJTdGF0ZSRtYXBTdGF0ZTMiLCJfa2VwbGVyU3RhdGUkbWFwU3R5bGU1IiwibWFwSW5kZXgiLCJ2aWV3U3RhdGUiLCJnZXRBbmltYXRhYmxlRmlsdGVycyIsIl9rZXBsZXJTdGF0ZSR2aXNTdGF0ZSIsImZpbHRlcnMiLCJmIiwidmlldyIsImVubGFyZ2VkIiwic3luY2VkV2l0aExheWVyVGltZWxpbmUiLCJzY2FsZVRvVmlkZW9FeHBvcnQiLCJjb250YWluZXIiLCJ2aWV3cG9ydCIsIm53IiwidW5wcm9qZWN0Iiwic2UiLCJ3aWR0aCIsImhlaWdodCIsInZpZGVvVmlld3BvcnQiLCJmaXRCb3VuZHMiLCJhbHRpdHVkZSIsImUiLCJwYXJzZVNldENhbWVyYVR5cGUiLCJzdHJDYW1lcmFUeXBlIiwibW9kaWZpZWRWaWV3U3RhdGUiLCJtYXRjaCIsInR1cmZQb2ludCIsInBhcnNlSW50IiwiZGlyZWN0aW9ucyIsIlNldCIsImhhcyIsImRpcmVjdGlvbk1hcCIsIkVhc3QiLCJTb3V0aCIsIldlc3QiLCJOb3J0aCIsInRyYW5zbGF0ZWRQb2x5IiwiZ2VvbWV0cnkiLCJjb29yZGluYXRlcyIsIlJFU09MVVRJT05TIiwibGFiZWwiLCJnZXRSZXNvbHV0aW9uU2V0dGluZyIsImZpbmQiLCJyIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21vZGFscy9odWJibGUtdXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtNYXBWaWV3LCBXZWJNZXJjYXRvclZpZXdwb3J0LCB0eXBlIE1hcFZpZXdTdGF0ZX0gZnJvbSAnQGRlY2suZ2wvY29yZSc7XG5pbXBvcnQge1xuICBERUZBVUxUX01BUEJPWF9BUElfVVJMLFxuICBFTVBUWV9NQVBCT1hfU1RZTEUsXG4gIEZJTFRFUl9WSUVXX1RZUEVTLFxuICBGSUxURVJfVFlQRVMsXG4gIEdMT0JFX01JTl9aT09NLFxuICBHTE9CRV9NQVhfWk9PTVxufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge2dldExheWVyQmxlbmRpbmdQYXJhbWV0ZXJzLCBnZXRCYXNlTWFwTGlicmFyeX0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2dldEdsb2JlQmFzZUxheWVycywgZ2V0R2xvYmVUb3BMYXllcnMsIEtlcGxlckdsb2JlVmlld30gZnJvbSAnQGtlcGxlci5nbC9kZWNrZ2wtbGF5ZXJzJztcbmltcG9ydCB7Y29tcHV0ZURlY2tMYXllcnN9IGZyb20gJ0BrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuaW1wb3J0IHtpc01hcGJveFVSTCwgdHJhbnNmb3JtTWFwYm94VXJsfSBmcm9tICdtYXBsaWJyZWdsLW1hcGJveC1yZXF1ZXN0LXRyYW5zZm9ybWVyJztcbmltcG9ydCB7cG9pbnR9IGZyb20gJ0B0dXJmL2hlbHBlcnMnO1xuaW1wb3J0IHt0cmFuc2Zvcm1UcmFuc2xhdGV9IGZyb20gJ0B0dXJmL3RyYW5zZm9ybS10cmFuc2xhdGUnO1xuaW1wb3J0IHtUaW1lUmFuZ2VGaWx0ZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuXG50eXBlIEtlcGxlclN0YXRlID0ge1xuICB2aXNTdGF0ZTogYW55O1xuICBtYXBTdGF0ZTogYW55O1xuICBtYXBTdHlsZTogYW55O1xufTtcblxudHlwZSBNYXBib3hMYXllclJlZiA9IHtcbiAgaWQ6IHN0cmluZztcbn0gJiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG4vLyBsdW1hLmdsIGRlZmF1bHRzIGBkZWJ1Z2AgdG8gdHJ1ZSB3aGVuZXZlciBOT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nLCB3aGljaFxuLy8gaW5zdHJ1bWVudHMgZXZlcnkgcmVuZGVyIHBhc3Mgd2l0aCBhIFRJTUVfRUxBUFNFRF9FWFQgdGltZXIgcXVlcnkuIFdlYkdMMiBvbmx5XG4vLyBhbGxvd3Mgb25lIHN1Y2ggcXVlcnkgdG8gYmUgYWN0aXZlIGF0IGEgdGltZSwgYW5kIHRoZSBnbG9iZSBleHBvcnQgcmVuZGVyc1xuLy8gc2V2ZXJhbCBwYXNzZXMgcGVyIGZyYW1lLCBzbyB0aGUgZGVidWcgY29udGV4dCB0aHJvd3MgSU5WQUxJRF9PUEVSQVRJT04gYW5kXG4vLyB0YWtlcyB0aGUgd2hvbGUgZXhwb3J0IG1vZGFsIGRvd24uIEV4cG9ydCBwcmV2aWV3cyBhcmUgdGhyb3dhd2F5IHJlbmRlclxuLy8gdGFyZ2V0cyB0aGF0IGRvbid0IG5lZWQgdGhlIHZhbGlkYXRpb24gbGF5ZXIuXG5cbi8qKiBEZXZpY2UgcHJvcHMgZm9yIGV4cG9ydCBwcmV2aWV3cyB0aGF0IG93biB0aGVpciBjYW52YXMgYW5kIHJlYWQgcGl4ZWxzIGJhY2sgb2ZmIGl0LiAqL1xuZXhwb3J0IGNvbnN0IEVYUE9SVF9ERUNLX0RFVklDRV9QUk9QUyA9IHtcbiAgdHlwZTogJ3dlYmdsJyBhcyBjb25zdCxcbiAgd2ViZ2w6IHtwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IHRydWV9LFxuICBkZWJ1ZzogZmFsc2Vcbn07XG5cbi8qKiBEZXZpY2UgcHJvcHMgZm9yIGV4cG9ydCBwcmV2aWV3cyB0aGF0IGRyYXcgYXMgYW4gb3ZlcmxheSBvbiB0b3Agb2YgYSBiYXNlbWFwLiAqL1xuZXhwb3J0IGNvbnN0IEVYUE9SVF9PVkVSTEFZX0RFVklDRV9QUk9QUyA9IHtcbiAgdHlwZTogJ3dlYmdsJyBhcyBjb25zdCxcbiAgd2ViZ2w6IHtzdGVuY2lsOiB0cnVlfSxcbiAgZGVidWc6IGZhbHNlXG59O1xuXG5jb25zdCBsaW5lYXI6IChwOiBudW1iZXIpID0+IG51bWJlciA9IHAgPT4gcDtcbmNvbnN0IGhvbGQ6IChwOiBudW1iZXIpID0+IG51bWJlciA9IHAgPT4gKHAgPT09IDEgPyAxIDogMCk7XG5cbnR5cGUgVGltZVJhbmdlRmlsdGVyS2V5ZnJhbWVzID0ge1xuICBrZXlmcmFtZXM6IHt2YWx1ZTogbnVtYmVyIHwgW251bWJlciwgbnVtYmVyXX1bXTtcbiAgZWFzaW5nczogKHA6IG51bWJlcikgPT4gbnVtYmVyO1xuICB0aW1pbmdzPzogbnVtYmVyW107XG59O1xuXG5mdW5jdGlvbiBnZXRLZXlGcmFtZXNGcmVlKGZpbHRlcjogVGltZVJhbmdlRmlsdGVyKTogVGltZVJhbmdlRmlsdGVyS2V5ZnJhbWVzIHtcbiAgY29uc3QgZGVsdGEgPSBmaWx0ZXIudmFsdWVbMV0gLSBmaWx0ZXIudmFsdWVbMF07XG4gIHJldHVybiB7XG4gICAga2V5ZnJhbWVzOiBbXG4gICAgICB7dmFsdWU6IFtmaWx0ZXIuZG9tYWluWzBdLCBmaWx0ZXIuZG9tYWluWzBdICsgZGVsdGFdfSxcbiAgICAgIHt2YWx1ZTogW2ZpbHRlci5kb21haW5bMV0gLSBkZWx0YSwgZmlsdGVyLmRvbWFpblsxXV19XG4gICAgXSxcbiAgICBlYXNpbmdzOiBsaW5lYXJcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRpbWVSYW5nZUZpbHRlcktleWZyYW1lcyh7XG4gIGZpbHRlcixcbiAgdGltaW5nc1xufToge1xuICBmaWx0ZXI6IFRpbWVSYW5nZUZpbHRlcjtcbiAgdGltaW5nczogbnVtYmVyW107XG59KTogVGltZVJhbmdlRmlsdGVyS2V5ZnJhbWVzIHtcbiAgaWYgKGZpbHRlci50eXBlICE9PSBGSUxURVJfVFlQRVMudGltZVJhbmdlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiZmlsdGVyIHR5cGUgbXVzdCBiZSAndGltZVJhbmdlJy5cIik7XG4gIH1cblxuICBjb25zdCBkdXJhdGlvbiA9IHRpbWluZ3NbMV0gLSB0aW1pbmdzWzBdO1xuXG4gIHN3aXRjaCAoZmlsdGVyLmFuaW1hdGlvbldpbmRvdykge1xuICAgIGRlZmF1bHQ6XG4gICAgY2FzZSAnZnJlZSc6IHtcbiAgICAgIHJldHVybiBnZXRLZXlGcmFtZXNGcmVlKGZpbHRlcik7XG4gICAgfVxuICAgIGNhc2UgJ2luY3JlbWVudGFsJzoge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2V5ZnJhbWVzOiBbXG4gICAgICAgICAge3ZhbHVlOiBbZmlsdGVyLnZhbHVlWzBdLCBmaWx0ZXIudmFsdWVbMF0gKyAxXX0sXG4gICAgICAgICAge3ZhbHVlOiBbZmlsdGVyLnZhbHVlWzBdLCBmaWx0ZXIuZG9tYWluWzFdXX1cbiAgICAgICAgXSxcbiAgICAgICAgZWFzaW5nczogbGluZWFyXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlICdwb2ludCc6IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtleWZyYW1lczogW3t2YWx1ZTogZmlsdGVyLmRvbWFpblswXX0sIHt2YWx1ZTogZmlsdGVyLmRvbWFpblsxXX1dLFxuICAgICAgICBlYXNpbmdzOiBsaW5lYXJcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgJ2ludGVydmFsJzoge1xuICAgICAgY29uc3Qge3Bsb3RUeXBlLCB0aW1lQmlucywgZGF0YUlkfSA9IGZpbHRlcjtcbiAgICAgIGNvbnN0IHtpbnRlcnZhbH0gPSBwbG90VHlwZTtcblxuICAgICAgY29uc3QgYmlucyA9IHRpbWVCaW5zPy5bZGF0YUlkWzBdXT8uW2ludGVydmFsXTtcblxuICAgICAgaWYgKCFpbnRlcnZhbCB8fCAhYmlucyB8fCBiaW5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZ2V0S2V5RnJhbWVzRnJlZShmaWx0ZXIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkZWx0YSA9IE1hdGgucm91bmQoZHVyYXRpb24gLyBiaW5zLmxlbmd0aCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRpbWluZ3M6IGJpbnMubWFwKChfLCBpZHgpID0+IHRpbWluZ3NbMF0gKyBkZWx0YSAqIGlkeCksXG4gICAgICAgIGtleWZyYW1lczogYmlucy5tYXAoYmluID0+ICh7dmFsdWU6IFtiaW4ueDAsIGJpbi54MV19KSksXG4gICAgICAgIGVhc2luZ3M6IGhvbGRcbiAgICAgIH07XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCZWZvcmVMYXllcklkKHRvcE1hcFN0eWxlOiBhbnksIGJvdHRvbU1hcFN0eWxlOiBhbnkpOiBNYXBib3hMYXllclJlZiB8IG51bGwge1xuICBpZiAodG9wTWFwU3R5bGU/LmxheWVycz8ubGVuZ3RoICYmIGJvdHRvbU1hcFN0eWxlPy5sYXllcnM/Lmxlbmd0aCkge1xuICAgIGNvbnN0IGZpcnN0VG9wTGF5ZXIgPSB0b3BNYXBTdHlsZS5sYXllcnNbMF07XG4gICAgY29uc3QgZmlyc3RUb3BMYXllcklkeCA9IGJvdHRvbU1hcFN0eWxlLmxheWVycy5maW5kSW5kZXgoXG4gICAgICAobGF5ZXI6IE1hcGJveExheWVyUmVmKSA9PiBsYXllci5pZCA9PT0gZmlyc3RUb3BMYXllci5pZFxuICAgICk7XG4gICAgY29uc3QgYmVmb3JlSWR4ID0gZmlyc3RUb3BMYXllcklkeCAtIDE7XG4gICAgcmV0dXJuIGJlZm9yZUlkeCA+IC0xID8gYm90dG9tTWFwU3R5bGUubGF5ZXJzW2JlZm9yZUlkeF0gOiBudWxsO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhdGljTWFwUHJvcHMoXG4gIGtlcGxlclN0YXRlOiBLZXBsZXJTdGF0ZSxcbiAgb25WaWV3Q2hhbmdlOiAodmlld1N0YXRlOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiB2b2lkLFxuICBtYXBib3hBcGlBY2Nlc3NUb2tlbjogc3RyaW5nLFxuICBtYXBib3hBcGlVcmw6IHN0cmluZyA9IERFRkFVTFRfTUFQQk9YX0FQSV9VUkxcbik6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICBjb25zdCBjdXJyZW50U3R5bGUgPSBrZXBsZXJTdGF0ZS5tYXBTdHlsZT8ubWFwU3R5bGVzPy5ba2VwbGVyU3RhdGUubWFwU3R5bGUuc3R5bGVUeXBlXTtcbiAgY29uc3QgYWNjZXNzVG9rZW4gPSBjdXJyZW50U3R5bGU/LmFjY2Vzc1Rva2VuIHx8IG1hcGJveEFwaUFjY2Vzc1Rva2VuO1xuICBjb25zdCBpc01hcGJveCA9IGdldEJhc2VNYXBMaWJyYXJ5KGN1cnJlbnRTdHlsZSkgPT09ICdtYXBib3gnO1xuICBjb25zdCBpc0dsb2JlID0gQm9vbGVhbihrZXBsZXJTdGF0ZS5tYXBTdGF0ZT8uZ2xvYmU/LmVuYWJsZWQpO1xuXG4gIGNvbnN0IG1hcGJveFRyYW5zZm9ybVJlcXVlc3QgPSAodXJsOiBzdHJpbmcsIHJlc291cmNlVHlwZTogc3RyaW5nKSA9PiB7XG4gICAgaWYgKGlzTWFwYm94VVJMKHVybCkpIHtcbiAgICAgIHJldHVybiB0cmFuc2Zvcm1NYXBib3hVcmwodXJsLCByZXNvdXJjZVR5cGUsIGFjY2Vzc1Rva2VuKTtcbiAgICB9XG4gICAgcmV0dXJuIHt1cmx9O1xuICB9O1xuXG4gIC8vIEluIGdsb2JlIG1vZGUgdGhlIGRlY2suZ2wgR2xvYmVWaWV3IHJlbmRlcnMgdGhlIHBsYW5ldCArIGJhc2VtYXAgdGlsZXMgYXNcbiAgLy8gZGVjayBsYXllcnMgb24gYSB0cmFuc3BhcmVudCBjYW52YXMsIHNvIHRoZSBmbGF0IG1hcGxpYnJlIGJhc2UgbWFwIG11c3QgYmVcbiAgLy8gc3VwcHJlc3NlZCAob3RoZXJ3aXNlIGEgMkQgTWVyY2F0b3IgYmFzZW1hcCB3b3VsZCByZW5kZXIgYmVoaW5kIHRoZSBnbG9iZSkuXG4gIGNvbnN0IGJvdHRvbU1hcFN0eWxlID0gaXNHbG9iZVxuICAgID8gRU1QVFlfTUFQQk9YX1NUWUxFXG4gICAgOiBpc01hcGJveFxuICAgID8gY29udmVydE1hcGJveFN0eWxlVXJscyhrZXBsZXJTdGF0ZS5tYXBTdHlsZT8uYm90dG9tTWFwU3R5bGUsIGFjY2Vzc1Rva2VuKVxuICAgIDoga2VwbGVyU3RhdGUubWFwU3R5bGU/LmJvdHRvbU1hcFN0eWxlO1xuXG4gIHJldHVybiB7XG4gICAgLi4ua2VwbGVyU3RhdGUubWFwU3RhdGUsXG4gICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiB0cnVlLFxuICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuOiBhY2Nlc3NUb2tlbixcbiAgICBtYXBib3hBcGlVcmwsXG4gICAgdHJhbnNmb3JtUmVxdWVzdDogbWFwYm94VHJhbnNmb3JtUmVxdWVzdCxcbiAgICBtYXBTdHlsZTogYm90dG9tTWFwU3R5bGUsXG4gICAgb25WaWV3cG9ydENoYW5nZTogb25WaWV3Q2hhbmdlLFxuICAgIG1hcExpYjogaW1wb3J0KCdtYXBsaWJyZS1nbCcpXG4gIH07XG59XG5cbi8qKlxuICogQ29udmVydCBtYXBib3g6Ly8gVVJMcyBpbnNpZGUgYSBNYXBib3ggc3R5bGUgb2JqZWN0IHRvIEhUVFBTIEFQSSBVUkxzXG4gKiBzbyB0aGF0IG1hcGxpYnJlLWdsIGNhbiBmZXRjaCB0aGVtIGRpcmVjdGx5LlxuICovXG5mdW5jdGlvbiBjb252ZXJ0TWFwYm94U3R5bGVVcmxzKHN0eWxlOiBhbnksIGFjY2Vzc1Rva2VuOiBzdHJpbmcpOiBhbnkge1xuICBpZiAoIXN0eWxlIHx8IHR5cGVvZiBzdHlsZSAhPT0gJ29iamVjdCcpIHJldHVybiBzdHlsZTtcblxuICBjb25zdCBjb252ZXJ0ZWQgPSB7Li4uc3R5bGV9O1xuXG4gIGlmICh0eXBlb2YgY29udmVydGVkLnNwcml0ZSA9PT0gJ3N0cmluZycgJiYgaXNNYXBib3hVUkwoY29udmVydGVkLnNwcml0ZSkpIHtcbiAgICBjb252ZXJ0ZWQuc3ByaXRlID0gdHJhbnNmb3JtTWFwYm94VXJsKGNvbnZlcnRlZC5zcHJpdGUsICdTcHJpdGUnLCBhY2Nlc3NUb2tlbik/LnVybDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgY29udmVydGVkLmdseXBocyA9PT0gJ3N0cmluZycgJiYgaXNNYXBib3hVUkwoY29udmVydGVkLmdseXBocykpIHtcbiAgICBjb252ZXJ0ZWQuZ2x5cGhzID0gdHJhbnNmb3JtTWFwYm94VXJsKGNvbnZlcnRlZC5nbHlwaHMsICdHbHlwaHMnLCBhY2Nlc3NUb2tlbik/LnVybDtcbiAgfVxuXG4gIGlmIChjb252ZXJ0ZWQuc291cmNlcykge1xuICAgIGNvbnN0IG5ld1NvdXJjZXM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHNvdXJjZV0gb2YgT2JqZWN0LmVudHJpZXM8YW55Pihjb252ZXJ0ZWQuc291cmNlcykpIHtcbiAgICAgIGlmIChzb3VyY2U/LnVybCAmJiBpc01hcGJveFVSTChzb3VyY2UudXJsKSkge1xuICAgICAgICBuZXdTb3VyY2VzW2tleV0gPSB7XG4gICAgICAgICAgLi4uc291cmNlLFxuICAgICAgICAgIHVybDogdHJhbnNmb3JtTWFwYm94VXJsKHNvdXJjZS51cmwsICdTb3VyY2UnLCBhY2Nlc3NUb2tlbik/LnVybFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3U291cmNlc1trZXldID0gc291cmNlO1xuICAgICAgfVxuICAgIH1cbiAgICBjb252ZXJ0ZWQuc291cmNlcyA9IG5ld1NvdXJjZXM7XG4gIH1cblxuICByZXR1cm4gY29udmVydGVkO1xufVxuXG5mdW5jdGlvbiBnZXRIdWJibGVQYXJhbWV0ZXJzKGtlcGxlclN0YXRlOiBLZXBsZXJTdGF0ZSk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICByZXR1cm4gZ2V0TGF5ZXJCbGVuZGluZ1BhcmFtZXRlcnMoa2VwbGVyU3RhdGUudmlzU3RhdGUubGF5ZXJCbGVuZGluZyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRIdWJibGVEZWNrR2xQcm9wcyhcbiAga2VwbGVyU3RhdGU6IEtlcGxlclN0YXRlLFxuICBtYXBib3hBcGlBY2Nlc3NUb2tlbjogc3RyaW5nLFxuICBtYXBib3hBcGlVcmw6IHN0cmluZyA9IERFRkFVTFRfTUFQQk9YX0FQSV9VUkxcbik6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICBjb25zdCBnbG9iZSA9IGtlcGxlclN0YXRlLm1hcFN0YXRlPy5nbG9iZTtcbiAgY29uc3QgaXNHbG9iZSA9IEJvb2xlYW4oZ2xvYmU/LmVuYWJsZWQpO1xuXG4gIGlmICghaXNHbG9iZSkge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJhbWV0ZXJzOiBnZXRIdWJibGVQYXJhbWV0ZXJzKGtlcGxlclN0YXRlKSxcbiAgICAgIGNvbnRyb2xsZXI6IHRydWUsXG4gICAgICB2aWV3czogbmV3IE1hcFZpZXcoe1xuICAgICAgICBpZDogJ21hcGJveCcsXG4gICAgICAgIGZhclpNdWx0aXBsaWVyOiAxLjJcbiAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIC8vIEdsb2JlIHZpZGVvIGV4cG9ydDogbWlycm9yIHRoZSBpbnRlcmFjdGl2ZSBnbG9iZSByZW5kZXIgcGF0aCBpbiBtYXAtY29udGFpbmVyLlxuICAvLyAtIFVzZSBhIEdsb2JlVmlldyBzbyB0aGUgY2FtZXJhL3Byb2plY3Rpb24gY3VydmUgZGF0YSBhcm91bmQgdGhlIHNwaGVyZS5cbiAgLy8gLSBQcm92aWRlIGxheWVycyBleHBsaWNpdGx5IChnbG9iZSBiYXNlIGxheWVycyArIGtlcGxlciBkYXRhIGxheWVycyArIGdsb2JlXG4gIC8vICAgdG9wIGxheWVycykuIFdoZW4gYGRlY2tQcm9wcy5sYXllcnNgIGlzIHNldCwgaHViYmxlJ3MgcHJldmlldyB1c2VzIHRoZW1cbiAgLy8gICB2ZXJiYXRpbSAoc2tpcHBpbmcgaXRzIGludGVybmFsIDJELW9ubHkgY3JlYXRlS2VwbGVyTGF5ZXJzIHBhdGgpLCBhbmQgdGhlXG4gIC8vICAga2VwbGVyIGxheWVycyBhcmUgYnVpbHQgZnJvbSBgbWFwU3RhdGUuZ2xvYmVgLCBzbyBjb21wb3NpdGUgbGF5ZXJzIChlLmcuXG4gIC8vICAgdGhlIGhlYXRtYXApIGVtaXQgdGhlaXIgZ2xvYmUtY29uZm9ybWluZyBzdWJsYXllcnMuXG4gIGNvbnN0IGdsb2JlQmFzZUxheWVycyA9IGdldEdsb2JlQmFzZUxheWVycyh7XG4gICAgbWFwYm94QXBpQWNjZXNzVG9rZW46IG1hcGJveEFwaUFjY2Vzc1Rva2VuIHx8ICcnLFxuICAgIGdsb2JlLFxuICAgIG1hcFN0eWxlVHlwZToga2VwbGVyU3RhdGUubWFwU3R5bGU/LnN0eWxlVHlwZVxuICB9KTtcbiAgY29uc3QgZ2xvYmVUb3BMYXllcnMgPSBnZXRHbG9iZVRvcExheWVycyh7Z2xvYmV9KTtcbiAgY29uc3QgZGF0YUxheWVycyA9IGNvbXB1dGVEZWNrTGF5ZXJzKGtlcGxlclN0YXRlLCB7XG4gICAgcHJpbWFyeU1hcDogdHJ1ZSxcbiAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgICBtYXBib3hBcGlVcmxcbiAgfSk7XG5cbiAgLy8gaHViYmxlJ3MgdmlkZW8tZXhwb3J0IHByZXZpZXcgcmVuZGVycyBhIGJhcmUgPERlY2tHTD4gaW4gdGhlIGRpc2FibGVCYXNlTWFwXG4gIC8vIChnbG9iZSkgYnJhbmNoIGFuZCDigJQgdW5saWtlIGl0cyBtYXBib3ggYnJhbmNoIOKAlCBuZXZlciBmb3J3YXJkcyBhIHZpZXdTdGF0ZS5cbiAgLy8gV2l0aCBgY29udHJvbGxlcjogdHJ1ZWAgZGVjay5nbCB0aGVuIGNvbnN0cnVjdHMgYSBjb250cm9sbGVyIHN0YXRlIGZyb20gYW5cbiAgLy8gZW1wdHkgdmlldyBzdGF0ZSwgYW5kIEdsb2JlU3RhdGUvTWFwU3RhdGUgYXNzZXJ0IG9uIHRoZSBtaXNzaW5nXG4gIC8vIGxhdGl0dWRlL2xvbmdpdHVkZS96b29tIChcImFzc2VydGlvbiBmYWlsZWQgYXQgbmV3IE1hcFN0YXRlL0dsb2JlU3RhdGVcIikuXG4gIC8vIFRoYXQgZGVnZW5lcmF0ZSB2aWV3cG9ydCBhbHNvIGxlYXZlcyB0aWxlL01WVCBiYXNlIGxheWVycyBwZXJtYW5lbnRseVxuICAvLyBcIm5vdCBsb2FkZWRcIiwgc28gaHViYmxlJ3MgYGxheWVycy5ldmVyeShsID0+IGwuaXNMb2FkZWQpYCBjYXB0dXJlIGdhdGUgbmV2ZXJcbiAgLy8gZmlyZXMgYW5kIHRoZSBleHBvcnQgaGFuZ3MuIFByb3ZpZGUgYW4gZXhwbGljaXQgaW5pdGlhbFZpZXdTdGF0ZSAoZGVjay5nbFxuICAvLyB1c2VzIGl0IHRvIHNlZWQgdGhlIGNvbnRyb2xsZXIgd2hlbiBubyBjb250cm9sbGVkIHZpZXdTdGF0ZSBpcyBzdXBwbGllZCkgc29cbiAgLy8gdGhlIGdsb2JlIGNhbWVyYSBpcyB2YWxpZCwgdGlsZXMgcmVzb2x2ZSwgYW5kIGludGVyYWN0aW9uIHdvcmtzLlxuICBjb25zdCB7bG9uZ2l0dWRlLCBsYXRpdHVkZSwgem9vbSwgcGl0Y2gsIGJlYXJpbmd9ID0ga2VwbGVyU3RhdGUubWFwU3RhdGUgfHwge307XG4gIGNvbnN0IGluaXRpYWxWaWV3U3RhdGUgPSB7XG4gICAgbG9uZ2l0dWRlLFxuICAgIGxhdGl0dWRlLFxuICAgIHpvb20sXG4gICAgcGl0Y2g6IHBpdGNoIHx8IDAsXG4gICAgYmVhcmluZzogYmVhcmluZyB8fCAwLFxuICAgIG1pblpvb206IEdMT0JFX01JTl9aT09NLFxuICAgIG1heFpvb206IEdMT0JFX01BWF9aT09NXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAuLi5nZXRIdWJibGVQYXJhbWV0ZXJzKGtlcGxlclN0YXRlKSxcbiAgICAgIGN1bGw6IHRydWVcbiAgICB9LFxuICAgIC8vIE1hdGNoIHRoZSBpbnRlcmFjdGl2ZSBnbG9iZSBjb250cm9sbGVyIGJvdW5kcyBzbyBwYW5uaW5nL3pvb20gZmVlbHMgdGhlXG4gICAgLy8gc2FtZSBpbiB0aGUgcHJldmlldyBhcyBvbiB0aGUgbWFpbiBtYXAuXG4gICAgY29udHJvbGxlcjoge1xuICAgICAgbWluWm9vbTogR0xPQkVfTUlOX1pPT00sXG4gICAgICBtYXhab29tOiBHTE9CRV9NQVhfWk9PTVxuICAgIH0sXG4gICAgaW5pdGlhbFZpZXdTdGF0ZSxcbiAgICB2aWV3czogbmV3IEtlcGxlckdsb2JlVmlldyh7XG4gICAgICByZXNvbHV0aW9uOiA1LFxuICAgICAgLy8gY2xlYXJDb2xvcjpmYWxzZSAobm90IGEgc29saWQgY29sb3IpIGlzIGRlbGliZXJhdGUgYW5kIG1pcnJvcnMgdGhlXG4gICAgICAvLyBpbnRlcmFjdGl2ZSBtYXA6IGRlY2suZ2wgYXBwbGllcyBhIFZpZXcncyBjbGVhckNvbG9yIGluIEVWRVJZIHBhc3NcbiAgICAgIC8vIGluY2x1ZGluZyB0aGUgcGlja2luZyBwYXNzLCBmb3JjaW5nIGFscGhhIHRvIDI1NS4gSW4gdGhlIHBpY2tpbmcgYnVmZmVyXG4gICAgICAvLyB0aGUgYWxwaGEgYnl0ZSBlbmNvZGVzIHRoZSBsYXllciBpbmRleCwgc28gYSBzb2xpZCBjbGVhciBtYWtlcyBkZWNrLmdsXG4gICAgICAvLyBkZWNvZGUgZXZlcnkgcGl4ZWwgYXMgYSBub24tZXhpc3RlbnQgbGF5ZXIgKFwiUGlja2VkIG5vbi1leGlzdGVudCBsYXllci5cbiAgICAgIC8vIElzIHBpY2tpbmcgYnVmZmVyIGNvcnJ1cHQ/XCIpIHdoZW5ldmVyIHRoZSBjb250cm9sbGVyIHBpY2tzIG9uIGhvdmVyLlxuICAgICAgLy8gU2tpcHBpbmcgdGhlIGNvbG9yIGNsZWFyIGtlZXBzIHRoZSBwaWNraW5nIGJ1ZmZlcidzIDAgYWxwaGEgaW50YWN0OyB0aGVcbiAgICAgIC8vIHNwaGVyZSBpdHNlbGYgc3RheXMgb3BhcXVlIHZpYSB0aGUgZ2xvYmUtYmFja2dyb3VuZCBTb2xpZFBvbHlnb25MYXllci5cbiAgICAgIGNsZWFyOiB0cnVlLFxuICAgICAgY2xlYXJDb2xvcjogZmFsc2VcbiAgICB9KSxcbiAgICBsYXllcnM6IFsuLi5nbG9iZUJhc2VMYXllcnMsIC4uLmRhdGFMYXllcnMsIC4uLmdsb2JlVG9wTGF5ZXJzXVxuICB9O1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgZnJlc2ggc2V0IG9mIGdsb2JlIGxheWVycyAoYmFzZSArIGRhdGEgKyB0b3ApIGZvciBhIGdpdmVuIHNwbGl0LW1hcFxuICogaW5kZXguIFVzZWQgYnkgdGhlIHN3aXBlIGV4cG9ydCBwcmV2aWV3LCB3aGljaCBtb3VudHMgdHdvIGluZGVwZW5kZW50IERlY2tcbiAqIGluc3RhbmNlczogZWFjaCBzaWRlIG5lZWRzIGl0cyBPV04gbGF5ZXIgaW5zdGFuY2VzIChkZWNrLmdsIExheWVyIG9iamVjdHMgYXJlXG4gKiBzdGF0ZWZ1bCBhbmQgYm91bmQgdG8gYSBzaW5nbGUgRGVjaykgYW5kIGl0cyBvd24gYG1hcEluZGV4YCBzbyB0aGUgc3BsaXQtbWFwXG4gKiBsYXllciB2aXNpYmlsaXR5IGlzIHJlc3BlY3RlZCBvbiBlYWNoIGhhbGYgb2YgdGhlIHN3aXBlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2xvYmVFeHBvcnRMYXllcnMoXG4gIGtlcGxlclN0YXRlOiBLZXBsZXJTdGF0ZSxcbiAge1xuICAgIG1hcEluZGV4LFxuICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICAgIG1hcGJveEFwaVVybCxcbiAgICB2aWV3U3RhdGVcbiAgfToge1xuICAgIG1hcEluZGV4OiBudW1iZXI7XG4gICAgbWFwYm94QXBpQWNjZXNzVG9rZW4/OiBzdHJpbmc7XG4gICAgbWFwYm94QXBpVXJsPzogc3RyaW5nO1xuICAgIHZpZXdTdGF0ZT86IE1hcFZpZXdTdGF0ZTtcbiAgfVxuKSB7XG4gIGNvbnN0IGdsb2JlID0ga2VwbGVyU3RhdGUubWFwU3RhdGU/Lmdsb2JlO1xuICBjb25zdCBnbG9iZUJhc2VMYXllcnMgPSBnZXRHbG9iZUJhc2VMYXllcnMoe1xuICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuOiBtYXBib3hBcGlBY2Nlc3NUb2tlbiB8fCAnJyxcbiAgICBnbG9iZSxcbiAgICBtYXBTdHlsZVR5cGU6IGtlcGxlclN0YXRlLm1hcFN0eWxlPy5zdHlsZVR5cGVcbiAgfSk7XG4gIGNvbnN0IGdsb2JlVG9wTGF5ZXJzID0gZ2V0R2xvYmVUb3BMYXllcnMoe2dsb2JlfSk7XG4gIC8vIFNhbWUgYXMgaHViYmxlIGNyZWF0ZUtlcGxlckxheWVyczogZm9sZCB0aGUgYW5pbWF0ZWQgY2FtZXJhIGludG8gbWFwU3RhdGUgc29cbiAgLy8gem9vbS1kZXBlbmRlbnQgcHJvcHMgKHNjYXR0ZXJwbG90IHJhZGl1c1NjYWxlKSB1cGRhdGUgZWFjaCBmcmFtZS5cbiAgY29uc3QgZGF0YUxheWVycyA9IGNvbXB1dGVEZWNrTGF5ZXJzKFxuICAgIHZpZXdTdGF0ZVxuICAgICAgPyB7Li4ua2VwbGVyU3RhdGUsIG1hcFN0YXRlOiB7Li4ua2VwbGVyU3RhdGUubWFwU3RhdGUsIC4uLnZpZXdTdGF0ZX19XG4gICAgICA6IGtlcGxlclN0YXRlLFxuICAgIHtcbiAgICAgIG1hcEluZGV4LFxuICAgICAgcHJpbWFyeU1hcDogbWFwSW5kZXggPT09IDAsXG4gICAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgICAgIG1hcGJveEFwaVVybFxuICAgIH1cbiAgKTtcbiAgcmV0dXJuIFsuLi5nbG9iZUJhc2VMYXllcnMsIC4uLmRhdGFMYXllcnMsIC4uLmdsb2JlVG9wTGF5ZXJzXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFuaW1hdGFibGVGaWx0ZXJzKGtlcGxlclN0YXRlOiBLZXBsZXJTdGF0ZSk6IFRpbWVSYW5nZUZpbHRlcltdIHtcbiAgY29uc3QgZmlsdGVycyA9IGtlcGxlclN0YXRlLnZpc1N0YXRlPy5maWx0ZXJzIHx8IFtdO1xuICByZXR1cm4gZmlsdGVycy5maWx0ZXIoXG4gICAgKGY6IGFueSkgPT5cbiAgICAgIGYudHlwZSA9PT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSAmJlxuICAgICAgKGYudmlldyA9PT0gRklMVEVSX1ZJRVdfVFlQRVMuZW5sYXJnZWQgfHwgZi5zeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSlcbiAgKTtcbn1cblxuLy8gLS0tIFZpZGVvIGV4cG9ydCB1dGlsaXRpZXMgKGlubGluZWQgZnJvbSBAaHViYmxlLmdsIGludGVybmFscykgLS0tXG5cbmV4cG9ydCBmdW5jdGlvbiBzY2FsZVRvVmlkZW9FeHBvcnQoXG4gIHZpZXdTdGF0ZTogTWFwVmlld1N0YXRlLFxuICBjb250YWluZXI6IHt3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlcn1cbik6IE1hcFZpZXdTdGF0ZSAmIHt3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlcn0ge1xuICAvLyBJbiBnbG9iZSBtb2RlIChhbmQgYXQgZXh0cmVtZSB6b29tcykgdGhlIFdlYk1lcmNhdG9yVmlld3BvcnQgdXNlZCBiZWxvdyBjYW5cbiAgLy8gcHJvZHVjZSBhIG5vbi1pbnZlcnRpYmxlIHByb2plY3Rpb24gbWF0cml4LCBtYWtpbmcgYHVucHJvamVjdGAgdGhyb3cuIFRoZVxuICAvLyBNZXJjYXRvciBmaXQtYm91bmRzIHJlc2NhbGluZyBvbmx5IG1ha2VzIHNlbnNlIGZvciB0aGUgZmxhdCBNYXBWaWV3IGFueXdheSxcbiAgLy8gc28gZmFsbCBiYWNrIHRvIHNpbXBseSByZXNpemluZyB0aGUgdmlld3BvcnQgdG8gdGhlIGV4cG9ydCBjb250YWluZXIuXG4gIHRyeSB7XG4gICAgY29uc3Qgdmlld3BvcnQgPSBuZXcgV2ViTWVyY2F0b3JWaWV3cG9ydCh2aWV3U3RhdGUpO1xuICAgIGNvbnN0IG53ID0gdmlld3BvcnQudW5wcm9qZWN0KFswLCAwXSkgYXMgW251bWJlciwgbnVtYmVyXTtcbiAgICBjb25zdCBzZSA9IHZpZXdwb3J0LnVucHJvamVjdChbdmlld3BvcnQud2lkdGgsIHZpZXdwb3J0LmhlaWdodF0pIGFzIFtudW1iZXIsIG51bWJlcl07XG4gICAgY29uc3QgdmlkZW9WaWV3cG9ydCA9IG5ldyBXZWJNZXJjYXRvclZpZXdwb3J0KHtcbiAgICAgIC4uLnZpZXdTdGF0ZSxcbiAgICAgIHdpZHRoOiBjb250YWluZXIud2lkdGgsXG4gICAgICBoZWlnaHQ6IGNvbnRhaW5lci5oZWlnaHRcbiAgICB9KS5maXRCb3VuZHMoW253LCBzZV0pO1xuICAgIGNvbnN0IHtoZWlnaHQsIHdpZHRoLCBsYXRpdHVkZSwgbG9uZ2l0dWRlLCB6b29tLCBhbHRpdHVkZX0gPSB2aWRlb1ZpZXdwb3J0O1xuICAgIHJldHVybiB7XG4gICAgICBoZWlnaHQsXG4gICAgICB3aWR0aCxcbiAgICAgIGxhdGl0dWRlLFxuICAgICAgbG9uZ2l0dWRlLFxuICAgICAgcGl0Y2g6IHZpZXdTdGF0ZS5waXRjaCxcbiAgICAgIHpvb20sXG4gICAgICBiZWFyaW5nOiB2aWV3U3RhdGUuYmVhcmluZyxcbiAgICAgIGFsdGl0dWRlXG4gICAgfSBhcyBhbnk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4udmlld1N0YXRlLFxuICAgICAgd2lkdGg6IGNvbnRhaW5lci53aWR0aCxcbiAgICAgIGhlaWdodDogY29udGFpbmVyLmhlaWdodFxuICAgIH0gYXMgYW55O1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNldENhbWVyYVR5cGUoc3RyQ2FtZXJhVHlwZTogc3RyaW5nLCB2aWV3U3RhdGU6IE1hcFZpZXdTdGF0ZSk6IE1hcFZpZXdTdGF0ZSB7XG4gIGNvbnN0IG1vZGlmaWVkVmlld1N0YXRlOiBhbnkgPSB7Li4udmlld1N0YXRlfTtcbiAgY29uc3QgbWF0Y2ggPSBzdHJDYW1lcmFUeXBlLm1hdGNoKC9cXGIoPyF0bylcXGJcXFMrXFx3L2cpO1xuICBpZiAoIW1hdGNoKSByZXR1cm4gbW9kaWZpZWRWaWV3U3RhdGU7XG5cbiAgY29uc3QgdHVyZlBvaW50ID0gcG9pbnQoW21vZGlmaWVkVmlld1N0YXRlLmxvbmdpdHVkZSwgbW9kaWZpZWRWaWV3U3RhdGUubGF0aXR1ZGVdKTtcblxuICBpZiAobWF0Y2hbMF0gPT09ICdPcmJpdCcpIHtcbiAgICBtb2RpZmllZFZpZXdTdGF0ZS5iZWFyaW5nID0gbW9kaWZpZWRWaWV3U3RhdGUuYmVhcmluZyArIHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7XG4gIH1cblxuICBjb25zdCBkaXJlY3Rpb25zID0gbmV3IFNldChbJ0Vhc3QnLCAnU291dGgnLCAnV2VzdCcsICdOb3J0aCddKTtcbiAgaWYgKGRpcmVjdGlvbnMuaGFzKG1hdGNoWzBdKSkge1xuICAgIGNvbnN0IGRpcmVjdGlvbk1hcDogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHtFYXN0OiAyNzAsIFNvdXRoOiAwLCBXZXN0OiA5MCwgTm9ydGg6IDE4MH07XG4gICAgY29uc3QgdHJhbnNsYXRlZFBvbHkgPSB0cmFuc2Zvcm1UcmFuc2xhdGUodHVyZlBvaW50LCAxMCwgZGlyZWN0aW9uTWFwW21hdGNoWzBdXSk7XG4gICAgaWYgKG1hdGNoWzBdID09PSAnRWFzdCcgfHwgbWF0Y2hbMF0gPT09ICdXZXN0Jykge1xuICAgICAgbW9kaWZpZWRWaWV3U3RhdGUubG9uZ2l0dWRlID0gdHJhbnNsYXRlZFBvbHkuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIG1vZGlmaWVkVmlld1N0YXRlLmxhdGl0dWRlID0gdHJhbnNsYXRlZFBvbHkuZ2VvbWV0cnkuY29vcmRpbmF0ZXNbMV07XG4gICAgfVxuICB9XG5cbiAgaWYgKG1hdGNoWzBdID09PSAnWm9vbScpIHtcbiAgICBtb2RpZmllZFZpZXdTdGF0ZS56b29tICs9IG1hdGNoWzFdID09PSAnSW4nID8gMyA6IC0zO1xuICB9XG5cbiAgcmV0dXJuIG1vZGlmaWVkVmlld1N0YXRlO1xufVxuXG50eXBlIFJlc29sdXRpb24gPSB7dmFsdWU6IHN0cmluZzsgbGFiZWw6IHN0cmluZzsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXJ9O1xuXG5jb25zdCBSRVNPTFVUSU9OUzogUmVzb2x1dGlvbltdID0gW1xuICB7dmFsdWU6ICc5NjB4NTQwJywgbGFiZWw6ICdHb29kICg1NDBwKScsIHdpZHRoOiA5NjAsIGhlaWdodDogNTQwfSxcbiAge3ZhbHVlOiAnMTI4MHg3MjAnLCBsYWJlbDogJ0hpZ2ggKDcyMHApJywgd2lkdGg6IDEyODAsIGhlaWdodDogNzIwfSxcbiAge3ZhbHVlOiAnMTkyMHgxMDgwJywgbGFiZWw6ICdIaWdoZXN0ICgxMDgwcCknLCB3aWR0aDogMTkyMCwgaGVpZ2h0OiAxMDgwfSxcbiAge3ZhbHVlOiAnNjQweDQ4MCcsIGxhYmVsOiAnR29vZCAoNDgwcCknLCB3aWR0aDogNjQwLCBoZWlnaHQ6IDQ4MH0sXG4gIHt2YWx1ZTogJzEyODB4OTYwJywgbGFiZWw6ICdIaWdoICg5NjBwKScsIHdpZHRoOiAxMjgwLCBoZWlnaHQ6IDk2MH0sXG4gIHt2YWx1ZTogJzE5MjB4MTQ0MCcsIGxhYmVsOiAnSGlnaGVzdCAoMTQ0MHApJywgd2lkdGg6IDE5MjAsIGhlaWdodDogMTQ0MH1cbl07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZXNvbHV0aW9uU2V0dGluZyh2YWx1ZTogc3RyaW5nKTogUmVzb2x1dGlvbiB7XG4gIHJldHVybiBSRVNPTFVUSU9OUy5maW5kKHIgPT4gci52YWx1ZSA9PT0gdmFsdWUpIHx8IFJFU09MVVRJT05TWzBdO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBOztBQUVBLFNBQVFBLE9BQU8sRUFBRUMsbUJBQW1CLFFBQTBCLGVBQWU7QUFDN0UsU0FDRUMsc0JBQXNCLEVBQ3RCQyxrQkFBa0IsRUFDbEJDLGlCQUFpQixFQUNqQkMsWUFBWSxFQUNaQyxjQUFjLEVBQ2RDLGNBQWMsUUFDVCxzQkFBc0I7QUFDN0IsU0FBUUMsMEJBQTBCLEVBQUVDLGlCQUFpQixRQUFPLGtCQUFrQjtBQUM5RSxTQUFRQyxrQkFBa0IsRUFBRUMsaUJBQWlCLEVBQUVDLGVBQWUsUUFBTywwQkFBMEI7QUFDL0YsU0FBUUMsaUJBQWlCLFFBQU8scUJBQXFCO0FBQ3JELFNBQVFDLFdBQVcsRUFBRUMsa0JBQWtCLFFBQU8sdUNBQXVDO0FBQ3JGLFNBQVFDLEtBQUssUUFBTyxlQUFlO0FBQ25DLFNBQVFDLGtCQUFrQixRQUFPLDJCQUEyQjtBQWE1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPLElBQU1DLHdCQUF3QixHQUFHO0VBQ3RDQyxJQUFJLEVBQUUsT0FBZ0I7RUFDdEJDLEtBQUssRUFBRTtJQUFDQyxxQkFBcUIsRUFB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
@@ -2,6 +2,7 @@
2
2
  // Copyright contributors to the kepler.gl project
3
3
 
4
4
  import { easeInOut } from 'popmotion';
5
+ import { drawStarsBackground } from '@kepler.gl/deckgl-layers';
5
6
  var linear = function linear(p) {
6
7
  return p;
7
8
  };
@@ -76,6 +77,7 @@ function drawSwipeDivider(ctx, splitX, height) {
76
77
  export function compositeSwipeFrame(leftCanvas, rightCanvas, outputCanvas, percentage) {
77
78
  var showDivider = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;
78
79
  var backgroundColor = arguments.length > 5 ? arguments[5] : undefined;
80
+ var showStars = arguments.length > 6 ? arguments[6] : undefined;
79
81
  var ctx = outputCanvas.getContext('2d');
80
82
  if (!ctx) return;
81
83
  var w = outputCanvas.width;
@@ -92,6 +94,12 @@ export function compositeSwipeFrame(leftCanvas, rightCanvas, outputCanvas, perce
92
94
  ctx.fillRect(0, 0, w, h);
93
95
  }
94
96
 
97
+ // Stars are a CSS background on the live globe map, so they must be tiled
98
+ // onto the composite canvas or they won't appear in preview or export.
99
+ if (showStars) {
100
+ drawStarsBackground(ctx, w, h);
101
+ }
102
+
95
103
  // Draw right (background) canvas fully
96
104
  ctx.drawImage(rightCanvas, 0, 0, w, h);
97
105
 
@@ -108,4 +116,4 @@ export function compositeSwipeFrame(leftCanvas, rightCanvas, outputCanvas, perce
108
116
  drawSwipeDivider(ctx, splitX, h);
109
117
  }
110
118
  }
111
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlYXNlSW5PdXQiLCJsaW5lYXIiLCJwIiwiRUFTSU5HX01BUCIsImdldFN3aXBlUGVyY2VudGFnZUF0VGltZSIsInRpbWVNcyIsImR1cmF0aW9uTXMiLCJzdGFydFBjdCIsImVuZFBjdCIsImVhc2luZyIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsInByb2dyZXNzIiwiTWF0aCIsIm1heCIsIm1pbiIsImVhc2VkUHJvZ3Jlc3MiLCJIQU5ETEVfUkFESVVTIiwiQVJST1dfU0laRSIsImRyYXdTd2lwZURpdmlkZXIiLCJjdHgiLCJzcGxpdFgiLCJoZWlnaHQiLCJzYXZlIiwic3Ryb2tlU3R5bGUiLCJsaW5lV2lkdGgiLCJzaGFkb3dDb2xvciIsInNoYWRvd0JsdXIiLCJiZWdpblBhdGgiLCJtb3ZlVG8iLCJsaW5lVG8iLCJzdHJva2UiLCJjeSIsImFyYyIsIlBJIiwiZmlsbFN0eWxlIiwiZmlsbCIsImNsb3NlUGF0aCIsInJlc3RvcmUiLCJjb21wb3NpdGVTd2lwZUZyYW1lIiwibGVmdENhbnZhcyIsInJpZ2h0Q2FudmFzIiwib3V0cHV0Q2FudmFzIiwicGVyY2VudGFnZSIsInNob3dEaXZpZGVyIiwiYmFja2dyb3VuZENvbG9yIiwiZ2V0Q29udGV4dCIsInciLCJ3aWR0aCIsImgiLCJyb3VuZCIsImNsZWFyUmVjdCIsImZpbGxSZWN0IiwiZHJhd0ltYWdlIiwicmVjdCIsImNsaXAiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbW9kYWxzL3N3aXBlLWNvbXBvc2l0ZS11dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge2Vhc2VJbk91dH0gZnJvbSAncG9wbW90aW9uJztcblxuZXhwb3J0IHR5cGUgU3dpcGVFYXNpbmcgPSAnbGluZWFyJyB8ICdlYXNlLWluLW91dCc7XG5cbmNvbnN0IGxpbmVhciA9IChwOiBudW1iZXIpOiBudW1iZXIgPT4gcDtcbmNvbnN0IEVBU0lOR19NQVA6IFJlY29yZDxTd2lwZUVhc2luZywgKHA6IG51bWJlcikgPT4gbnVtYmVyPiA9IHtcbiAgbGluZWFyLFxuICAnZWFzZS1pbi1vdXQnOiBlYXNlSW5PdXRcbn07XG5cbi8qKlxuICogQ29tcHV0ZSB0aGUgc3dpcGUgcGVyY2VudGFnZSBhdCBhIGdpdmVuIHRpbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTd2lwZVBlcmNlbnRhZ2VBdFRpbWUoXG4gIHRpbWVNczogbnVtYmVyLFxuICBkdXJhdGlvbk1zOiBudW1iZXIsXG4gIHN0YXJ0UGN0OiBudW1iZXIsXG4gIGVuZFBjdDogbnVtYmVyLFxuICBlYXNpbmc6IFN3aXBlRWFzaW5nID0gJ2Vhc2UtaW4tb3V0J1xuKTogbnVtYmVyIHtcbiAgY29uc3QgcHJvZ3Jlc3MgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCB0aW1lTXMgLyBkdXJhdGlvbk1zKSk7XG4gIGNvbnN0IGVhc2VkUHJvZ3Jlc3MgPSBFQVNJTkdfTUFQW2Vhc2luZ10ocHJvZ3Jlc3MpO1xuICByZXR1cm4gc3RhcnRQY3QgKyAoZW5kUGN0IC0gc3RhcnRQY3QpICogZWFzZWRQcm9ncmVzcztcbn1cblxuY29uc3QgSEFORExFX1JBRElVUyA9IDE0O1xuY29uc3QgQVJST1dfU0laRSA9IDY7XG5cbi8qKlxuICogRHJhdyBhIHN3aXBlIGRpdmlkZXIgKGxpbmUgKyBjaXJjdWxhciBoYW5kbGUgd2l0aCBhcnJvd3MpIG9udG8gYSAyRCBjYW52YXMgY29udGV4dC5cbiAqL1xuZnVuY3Rpb24gZHJhd1N3aXBlRGl2aWRlcihcbiAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gIHNwbGl0WDogbnVtYmVyLFxuICBoZWlnaHQ6IG51bWJlclxuKTogdm9pZCB7XG4gIGN0eC5zYXZlKCk7XG5cbiAgLy8gRGl2aWRlciBsaW5lXG4gIGN0eC5zdHJva2VTdHlsZSA9ICcjRkZGRkZGJztcbiAgY3R4LmxpbmVXaWR0aCA9IDI7XG4gIGN0eC5zaGFkb3dDb2xvciA9ICdyZ2JhKDAsIDAsIDAsIDAuNSknO1xuICBjdHguc2hhZG93Qmx1ciA9IDQ7XG4gIGN0eC5iZWdpblBhdGgoKTtcbiAgY3R4Lm1vdmVUbyhzcGxpdFgsIDApO1xuICBjdHgubGluZVRvKHNwbGl0WCwgaGVpZ2h0KTtcbiAgY3R4LnN0cm9rZSgpO1xuXG4gIC8vIEhhbmRsZSBjaXJjbGVcbiAgY29uc3QgY3kgPSBoZWlnaHQgLyAyO1xuICBjdHguc2hhZG93Qmx1ciA9IDY7XG4gIGN0eC5iZWdpblBhdGgoKTtcbiAgY3R4LmFyYyhzcGxpdFgsIGN5LCBIQU5ETEVfUkFESVVTLCAwLCBNYXRoLlBJICogMik7XG4gIGN0eC5maWxsU3R5bGUgPSAnIzI5MzIzQyc7XG4gIGN0eC5maWxsKCk7XG4gIGN0eC5zdHJva2VTdHlsZSA9ICcjRkZGRkZGJztcbiAgY3R4LmxpbmVXaWR0aCA9IDI7XG4gIGN0eC5zdHJva2UoKTtcbiAgY3R4LnNoYWRvd0JsdXIgPSAwO1xuXG4gIC8vIExlZnQgYXJyb3dcbiAgY3R4LmZpbGxTdHlsZSA9ICcjRkZGRkZGJztcbiAgY3R4LmJlZ2luUGF0aCgpO1xuICBjdHgubW92ZVRvKHNwbGl0WCAtIEFSUk9XX1NJWkUgLSAzLCBjeSk7XG4gIGN0eC5saW5lVG8oc3BsaXRYIC0gMywgY3kgLSBBUlJPV19TSVpFKTtcbiAgY3R4LmxpbmVUbyhzcGxpdFggLSAzLCBjeSArIEFSUk9XX1NJWkUpO1xuICBjdHguY2xvc2VQYXRoKCk7XG4gIGN0eC5maWxsKCk7XG5cbiAgLy8gUmlnaHQgYXJyb3dcbiAgY3R4LmJlZ2luUGF0aCgpO1xuICBjdHgubW92ZVRvKHNwbGl0WCArIEFSUk9XX1NJWkUgKyAzLCBjeSk7XG4gIGN0eC5saW5lVG8oc3BsaXRYICsgMywgY3kgLSBBUlJPV19TSVpFKTtcbiAgY3R4LmxpbmVUbyhzcGxpdFggKyAzLCBjeSArIEFSUk9XX1NJWkUpO1xuICBjdHguY2xvc2VQYXRoKCk7XG4gIGN0eC5maWxsKCk7XG5cbiAgY3R4LnJlc3RvcmUoKTtcbn1cblxuLyoqXG4gKiBDb21wb3NpdGUgdHdvIGNhbnZhc2VzIChsZWZ0L3JpZ2h0IG1hcCB2aWV3cykgd2l0aCBhIHN3aXBlIGRpdmlkZXJcbiAqIGludG8gYSBzaW5nbGUgb3V0cHV0IGNhbnZhcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBvc2l0ZVN3aXBlRnJhbWUoXG4gIGxlZnRDYW52YXM6IEhUTUxDYW52YXNFbGVtZW50LFxuICByaWdodENhbnZhczogSFRNTENhbnZhc0VsZW1lbnQsXG4gIG91dHB1dENhbnZhczogSFRNTENhbnZhc0VsZW1lbnQsXG4gIHBlcmNlbnRhZ2U6IG51bWJlcixcbiAgc2hvd0RpdmlkZXI6IGJvb2xlYW4gPSB0cnVlLFxuICBiYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmdcbik6IHZvaWQge1xuICBjb25zdCBjdHggPSBvdXRwdXRDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgaWYgKCFjdHgpIHJldHVybjtcblxuICBjb25zdCB3ID0gb3V0cHV0Q2FudmFzLndpZHRoO1xuICBjb25zdCBoID0gb3V0cHV0Q2FudmFzLmhlaWdodDtcbiAgY29uc3Qgc3BsaXRYID0gTWF0aC5yb3VuZCgodyAqIHBlcmNlbnRhZ2UpIC8gMTAwKTtcblxuICBjdHguY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xuXG4gIC8vIEluIGdsb2JlIG1vZGUgdGhlIGRlY2sgY2FudmFzZXMgYXJlIHRyYW5zcGFyZW50IHdoZXJlIHRoZSBnbG9iZSBpc24ndFxuICAvLyBkcmF3biAoY2xlYXJDb2xvciBpcyBkaXNhYmxlZCB0byBrZWVwIHBpY2tpbmcgaW50YWN0KSwgc28gcGFpbnQgdGhlXG4gIC8vIGNvbmZpZ3VyZWQgYmFja2dyb3VuZCBmaXJzdC4gTm9uLWdsb2JlIHN3aXBlIHBhc3NlcyBubyBjb2xvciBhbmQga2VlcHMgdGhlXG4gIC8vIHByZXZpb3VzIHRyYW5zcGFyZW50LWNsZWFyIGJlaGF2aW9yICh0aGUgYmFzZSBtYXAgaXMgYWxyZWFkeSBvcGFxdWUpLlxuICBpZiAoYmFja2dyb3VuZENvbG9yKSB7XG4gICAgY3R4LmZpbGxTdHlsZSA9IGJhY2tncm91bmRDb2xvcjtcbiAgICBjdHguZmlsbFJlY3QoMCwgMCwgdywgaCk7XG4gIH1cblxuICAvLyBEcmF3IHJpZ2h0IChiYWNrZ3JvdW5kKSBjYW52YXMgZnVsbHlcbiAgY3R4LmRyYXdJbWFnZShyaWdodENhbnZhcywgMCwgMCwgdywgaCk7XG5cbiAgLy8gRHJhdyBsZWZ0IChmb3JlZ3JvdW5kKSBjYW52YXMgY2xpcHBlZCB0byAwLi5zcGxpdFhcbiAgY3R4LnNhdmUoKTtcbiAgY3R4LmJlZ2luUGF0aCgpO1xuICBjdHgucmVjdCgwLCAwLCBzcGxpdFgsIGgpO1xuICBjdHguY2xpcCgpO1xuICBjdHguZHJhd0ltYWdlKGxlZnRDYW52YXMsIDAsIDAsIHcsIGgpO1xuICBjdHgucmVzdG9yZSgpO1xuXG4gIC8vIERyYXcgdGhlIGRpdmlkZXJcbiAgaWYgKHNob3dEaXZpZGVyKSB7XG4gICAgZHJhd1N3aXBlRGl2aWRlcihjdHgsIHNwbGl0WCwgaCk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTs7QUFFQSxTQUFRQSxTQUFTLFFBQU8sV0FBVztBQUluQyxJQUFNQyxNQUFNLEdBQUcsU0FBVEEsTUFBTUEsQ0FBSUMsQ0FBUztFQUFBLE9BQWFBLENBQUM7QUFBQTtBQUN2QyxJQUFNQyxVQUFzRCxHQUFHO0VBQzdERixNQUFNLEVBQU5BLE1BQU07RUFDTixhQUFhLEVBQUVEO0FBQ2pCLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTSSx3QkFBd0JBLENBQ3RDQyxNQUFjLEVBQ2RDLFVBQWtCLEVBQ2xCQyxRQUFnQixFQUNoQkMsTUFBYyxFQUVOO0VBQUEsSUFEUkMsTUFBbUIsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQUcsYUFBYTtFQUVuQyxJQUFNRyxRQUFRLEdBQUdDLElBQUksQ0FB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
119
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlYXNlSW5PdXQiLCJkcmF3U3RhcnNCYWNrZ3JvdW5kIiwibGluZWFyIiwicCIsIkVBU0lOR19NQVAiLCJnZXRTd2lwZVBlcmNlbnRhZ2VBdFRpbWUiLCJ0aW1lTXMiLCJkdXJhdGlvbk1zIiwic3RhcnRQY3QiLCJlbmRQY3QiLCJlYXNpbmciLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJwcm9ncmVzcyIsIk1hdGgiLCJtYXgiLCJtaW4iLCJlYXNlZFByb2dyZXNzIiwiSEFORExFX1JBRElVUyIsIkFSUk9XX1NJWkUiLCJkcmF3U3dpcGVEaXZpZGVyIiwiY3R4Iiwic3BsaXRYIiwiaGVpZ2h0Iiwic2F2ZSIsInN0cm9rZVN0eWxlIiwibGluZVdpZHRoIiwic2hhZG93Q29sb3IiLCJzaGFkb3dCbHVyIiwiYmVnaW5QYXRoIiwibW92ZVRvIiwibGluZVRvIiwic3Ryb2tlIiwiY3kiLCJhcmMiLCJQSSIsImZpbGxTdHlsZSIsImZpbGwiLCJjbG9zZVBhdGgiLCJyZXN0b3JlIiwiY29tcG9zaXRlU3dpcGVGcmFtZSIsImxlZnRDYW52YXMiLCJyaWdodENhbnZhcyIsIm91dHB1dENhbnZhcyIsInBlcmNlbnRhZ2UiLCJzaG93RGl2aWRlciIsImJhY2tncm91bmRDb2xvciIsInNob3dTdGFycyIsImdldENvbnRleHQiLCJ3Iiwid2lkdGgiLCJoIiwicm91bmQiLCJjbGVhclJlY3QiLCJmaWxsUmVjdCIsImRyYXdJbWFnZSIsInJlY3QiLCJjbGlwIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21vZGFscy9zd2lwZS1jb21wb3NpdGUtdXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtlYXNlSW5PdXR9IGZyb20gJ3BvcG1vdGlvbic7XG5pbXBvcnQge2RyYXdTdGFyc0JhY2tncm91bmR9IGZyb20gJ0BrZXBsZXIuZ2wvZGVja2dsLWxheWVycyc7XG5cbmV4cG9ydCB0eXBlIFN3aXBlRWFzaW5nID0gJ2xpbmVhcicgfCAnZWFzZS1pbi1vdXQnO1xuXG5jb25zdCBsaW5lYXIgPSAocDogbnVtYmVyKTogbnVtYmVyID0+IHA7XG5jb25zdCBFQVNJTkdfTUFQOiBSZWNvcmQ8U3dpcGVFYXNpbmcsIChwOiBudW1iZXIpID0+IG51bWJlcj4gPSB7XG4gIGxpbmVhcixcbiAgJ2Vhc2UtaW4tb3V0JzogZWFzZUluT3V0XG59O1xuXG4vKipcbiAqIENvbXB1dGUgdGhlIHN3aXBlIHBlcmNlbnRhZ2UgYXQgYSBnaXZlbiB0aW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3dpcGVQZXJjZW50YWdlQXRUaW1lKFxuICB0aW1lTXM6IG51bWJlcixcbiAgZHVyYXRpb25NczogbnVtYmVyLFxuICBzdGFydFBjdDogbnVtYmVyLFxuICBlbmRQY3Q6IG51bWJlcixcbiAgZWFzaW5nOiBTd2lwZUVhc2luZyA9ICdlYXNlLWluLW91dCdcbik6IG51bWJlciB7XG4gIGNvbnN0IHByb2dyZXNzID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgdGltZU1zIC8gZHVyYXRpb25NcykpO1xuICBjb25zdCBlYXNlZFByb2dyZXNzID0gRUFTSU5HX01BUFtlYXNpbmddKHByb2dyZXNzKTtcbiAgcmV0dXJuIHN0YXJ0UGN0ICsgKGVuZFBjdCAtIHN0YXJ0UGN0KSAqIGVhc2VkUHJvZ3Jlc3M7XG59XG5cbmNvbnN0IEhBTkRMRV9SQURJVVMgPSAxNDtcbmNvbnN0IEFSUk9XX1NJWkUgPSA2O1xuXG4vKipcbiAqIERyYXcgYSBzd2lwZSBkaXZpZGVyIChsaW5lICsgY2lyY3VsYXIgaGFuZGxlIHdpdGggYXJyb3dzKSBvbnRvIGEgMkQgY2FudmFzIGNvbnRleHQuXG4gKi9cbmZ1bmN0aW9uIGRyYXdTd2lwZURpdmlkZXIoXG4gIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICBzcGxpdFg6IG51bWJlcixcbiAgaGVpZ2h0OiBudW1iZXJcbik6IHZvaWQge1xuICBjdHguc2F2ZSgpO1xuXG4gIC8vIERpdmlkZXIgbGluZVxuICBjdHguc3Ryb2tlU3R5bGUgPSAnI0ZGRkZGRic7XG4gIGN0eC5saW5lV2lkdGggPSAyO1xuICBjdHguc2hhZG93Q29sb3IgPSAncmdiYSgwLCAwLCAwLCAwLjUpJztcbiAgY3R4LnNoYWRvd0JsdXIgPSA0O1xuICBjdHguYmVnaW5QYXRoKCk7XG4gIGN0eC5tb3ZlVG8oc3BsaXRYLCAwKTtcbiAgY3R4LmxpbmVUbyhzcGxpdFgsIGhlaWdodCk7XG4gIGN0eC5zdHJva2UoKTtcblxuICAvLyBIYW5kbGUgY2lyY2xlXG4gIGNvbnN0IGN5ID0gaGVpZ2h0IC8gMjtcbiAgY3R4LnNoYWRvd0JsdXIgPSA2O1xuICBjdHguYmVnaW5QYXRoKCk7XG4gIGN0eC5hcmMoc3BsaXRYLCBjeSwgSEFORExFX1JBRElVUywgMCwgTWF0aC5QSSAqIDIpO1xuICBjdHguZmlsbFN0eWxlID0gJyMyOTMyM0MnO1xuICBjdHguZmlsbCgpO1xuICBjdHguc3Ryb2tlU3R5bGUgPSAnI0ZGRkZGRic7XG4gIGN0eC5saW5lV2lkdGggPSAyO1xuICBjdHguc3Ryb2tlKCk7XG4gIGN0eC5zaGFkb3dCbHVyID0gMDtcblxuICAvLyBMZWZ0IGFycm93XG4gIGN0eC5maWxsU3R5bGUgPSAnI0ZGRkZGRic7XG4gIGN0eC5iZWdpblBhdGgoKTtcbiAgY3R4Lm1vdmVUbyhzcGxpdFggLSBBUlJPV19TSVpFIC0gMywgY3kpO1xuICBjdHgubGluZVRvKHNwbGl0WCAtIDMsIGN5IC0gQVJST1dfU0laRSk7XG4gIGN0eC5saW5lVG8oc3BsaXRYIC0gMywgY3kgKyBBUlJPV19TSVpFKTtcbiAgY3R4LmNsb3NlUGF0aCgpO1xuICBjdHguZmlsbCgpO1xuXG4gIC8vIFJpZ2h0IGFycm93XG4gIGN0eC5iZWdpblBhdGgoKTtcbiAgY3R4Lm1vdmVUbyhzcGxpdFggKyBBUlJPV19TSVpFICsgMywgY3kpO1xuICBjdHgubGluZVRvKHNwbGl0WCArIDMsIGN5IC0gQVJST1dfU0laRSk7XG4gIGN0eC5saW5lVG8oc3BsaXRYICsgMywgY3kgKyBBUlJPV19TSVpFKTtcbiAgY3R4LmNsb3NlUGF0aCgpO1xuICBjdHguZmlsbCgpO1xuXG4gIGN0eC5yZXN0b3JlKCk7XG59XG5cbi8qKlxuICogQ29tcG9zaXRlIHR3byBjYW52YXNlcyAobGVmdC9yaWdodCBtYXAgdmlld3MpIHdpdGggYSBzd2lwZSBkaXZpZGVyXG4gKiBpbnRvIGEgc2luZ2xlIG91dHB1dCBjYW52YXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wb3NpdGVTd2lwZUZyYW1lKFxuICBsZWZ0Q2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCxcbiAgcmlnaHRDYW52YXM6IEhUTUxDYW52YXNFbGVtZW50LFxuICBvdXRwdXRDYW52YXM6IEhUTUxDYW52YXNFbGVtZW50LFxuICBwZXJjZW50YWdlOiBudW1iZXIsXG4gIHNob3dEaXZpZGVyOiBib29sZWFuID0gdHJ1ZSxcbiAgYmFja2dyb3VuZENvbG9yPzogc3RyaW5nLFxuICBzaG93U3RhcnM/OiBib29sZWFuXG4pOiB2b2lkIHtcbiAgY29uc3QgY3R4ID0gb3V0cHV0Q2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gIGlmICghY3R4KSByZXR1cm47XG5cbiAgY29uc3QgdyA9IG91dHB1dENhbnZhcy53aWR0aDtcbiAgY29uc3QgaCA9IG91dHB1dENhbnZhcy5oZWlnaHQ7XG4gIGNvbnN0IHNwbGl0WCA9IE1hdGgucm91bmQoKHcgKiBwZXJjZW50YWdlKSAvIDEwMCk7XG5cbiAgY3R4LmNsZWFyUmVjdCgwLCAwLCB3LCBoKTtcblxuICAvLyBJbiBnbG9iZSBtb2RlIHRoZSBkZWNrIGNhbnZhc2VzIGFyZSB0cmFuc3BhcmVudCB3aGVyZSB0aGUgZ2xvYmUgaXNuJ3RcbiAgLy8gZHJhd24gKGNsZWFyQ29sb3IgaXMgZGlzYWJsZWQgdG8ga2VlcCBwaWNraW5nIGludGFjdCksIHNvIHBhaW50IHRoZVxuICAvLyBjb25maWd1cmVkIGJhY2tncm91bmQgZmlyc3QuIE5vbi1nbG9iZSBzd2lwZSBwYXNzZXMgbm8gY29sb3IgYW5kIGtlZXBzIHRoZVxuICAvLyBwcmV2aW91cyB0cmFuc3BhcmVudC1jbGVhciBiZWhhdmlvciAodGhlIGJhc2UgbWFwIGlzIGFscmVhZHkgb3BhcXVlKS5cbiAgaWYgKGJhY2tncm91bmRDb2xvcikge1xuICAgIGN0eC5maWxsU3R5bGUgPSBiYWNrZ3JvdW5kQ29sb3I7XG4gICAgY3R4LmZpbGxSZWN0KDAsIDAsIHcsIGgpO1xuICB9XG5cbiAgLy8gU3RhcnMgYXJlIGEgQ1NTIGJhY2tncm91bmQgb24gdGhlIGxpdmUgZ2xvYmUgbWFwLCBzbyB0aGV5IG11c3QgYmUgdGlsZWRcbiAgLy8gb250byB0aGUgY29tcG9zaXRlIGNhbnZhcyBvciB0aGV5IHdvbid0IGFwcGVhciBpbiBwcmV2aWV3IG9yIGV4cG9ydC5cbiAgaWYgKHNob3dTdGFycykge1xuICAgIGRyYXdTdGFyc0JhY2tncm91bmQoY3R4LCB3LCBoKTtcbiAgfVxuXG4gIC8vIERyYXcgcmlnaHQgKGJhY2tncm91bmQpIGNhbnZhcyBmdWxseVxuICBjdHguZHJhd0ltYWdlKHJpZ2h0Q2FudmFzLCAwLCAwLCB3LCBoKTtcblxuICAvLyBEcmF3IGxlZnQgKGZvcmVncm91bmQpIGNhbnZhcyBjbGlwcGVkIHRvIDAuLnNwbGl0WFxuICBjdHguc2F2ZSgpO1xuICBjdHguYmVnaW5QYXRoKCk7XG4gIGN0eC5yZWN0KDAsIDAsIHNwbGl0WCwgaCk7XG4gIGN0eC5jbGlwKCk7XG4gIGN0eC5kcmF3SW1hZ2UobGVmdENhbnZhcywgMCwgMCwgdywgaCk7XG4gIGN0eC5yZXN0b3JlKCk7XG5cbiAgLy8gRHJhdyB0aGUgZGl2aWRlclxuICBpZiAoc2hvd0RpdmlkZXIpIHtcbiAgICBkcmF3U3dpcGVEaXZpZGVyKGN0eCwgc3BsaXRYLCBoKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBOztBQUVBLFNBQVFBLFNBQVMsUUFBTyxXQUFXO0FBQ25DLFNB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
@@ -0,0 +1,67 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // Copyright contributors to the kepler.gl project
3
+
4
+ jest.mock('@kepler.gl/deckgl-layers', function () {
5
+ return {
6
+ drawStarsBackground: jest.fn()
7
+ };
8
+ });
9
+ import { drawStarsBackground } from '@kepler.gl/deckgl-layers';
10
+ import { compositeSwipeFrame } from './swipe-composite-utils';
11
+ function mockCanvas(width, height, ctx) {
12
+ return {
13
+ width: width,
14
+ height: height,
15
+ getContext: function getContext() {
16
+ return ctx;
17
+ }
18
+ };
19
+ }
20
+ function mockCompositeCtx() {
21
+ return {
22
+ clearRect: jest.fn(),
23
+ fillRect: jest.fn(),
24
+ drawImage: jest.fn(),
25
+ save: jest.fn(),
26
+ restore: jest.fn(),
27
+ beginPath: jest.fn(),
28
+ rect: jest.fn(),
29
+ clip: jest.fn(),
30
+ fillStyle: '',
31
+ strokeStyle: '',
32
+ lineWidth: 0,
33
+ shadowColor: '',
34
+ shadowBlur: 0,
35
+ moveTo: jest.fn(),
36
+ lineTo: jest.fn(),
37
+ stroke: jest.fn(),
38
+ arc: jest.fn(),
39
+ fill: jest.fn(),
40
+ closePath: jest.fn()
41
+ };
42
+ }
43
+ describe('compositeSwipeFrame', function () {
44
+ afterEach(function () {
45
+ jest.clearAllMocks();
46
+ });
47
+ test('tiles stars after the globe background color when showStars is true', function () {
48
+ var ctx = mockCompositeCtx();
49
+ var left = mockCanvas(10, 10, ctx);
50
+ var right = mockCanvas(10, 10, ctx);
51
+ var output = mockCanvas(100, 50, ctx);
52
+ compositeSwipeFrame(left, right, output, 50, false, 'rgb(1, 2, 3)', true);
53
+ expect(ctx.fillStyle).toBe('rgb(1, 2, 3)');
54
+ expect(ctx.fillRect).toHaveBeenCalledWith(0, 0, 100, 50);
55
+ expect(drawStarsBackground).toHaveBeenCalledWith(ctx, 100, 50);
56
+ expect(ctx.fillRect.mock.invocationCallOrder[0]).toBeLessThan(drawStarsBackground.mock.invocationCallOrder[0]);
57
+ });
58
+ test('does not draw stars when showStars is omitted', function () {
59
+ var ctx = mockCompositeCtx();
60
+ var left = mockCanvas(10, 10, ctx);
61
+ var right = mockCanvas(10, 10, ctx);
62
+ var output = mockCanvas(100, 50, ctx);
63
+ compositeSwipeFrame(left, right, output, 50, false, 'rgb(1, 2, 3)');
64
+ expect(drawStarsBackground).not.toHaveBeenCalled();
65
+ });
66
+ });
67
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJqZXN0IiwibW9jayIsImRyYXdTdGFyc0JhY2tncm91bmQiLCJmbiIsImNvbXBvc2l0ZVN3aXBlRnJhbWUiLCJtb2NrQ2FudmFzIiwid2lkdGgiLCJoZWlnaHQiLCJjdHgiLCJnZXRDb250ZXh0IiwibW9ja0NvbXBvc2l0ZUN0eCIsImNsZWFyUmVjdCIsImZpbGxSZWN0IiwiZHJhd0ltYWdlIiwic2F2ZSIsInJlc3RvcmUiLCJiZWdpblBhdGgiLCJyZWN0IiwiY2xpcCIsImZpbGxTdHlsZSIsInN0cm9rZVN0eWxlIiwibGluZVdpZHRoIiwic2hhZG93Q29sb3IiLCJzaGFkb3dCbHVyIiwibW92ZVRvIiwibGluZVRvIiwic3Ryb2tlIiwiYXJjIiwiZmlsbCIsImNsb3NlUGF0aCIsImRlc2NyaWJlIiwiYWZ0ZXJFYWNoIiwiY2xlYXJBbGxNb2NrcyIsInRlc3QiLCJsZWZ0IiwicmlnaHQiLCJvdXRwdXQiLCJleHBlY3QiLCJ0b0JlIiwidG9IYXZlQmVlbkNhbGxlZFdpdGgiLCJpbnZvY2F0aW9uQ2FsbE9yZGVyIiwidG9CZUxlc3NUaGFuIiwibm90IiwidG9IYXZlQmVlbkNhbGxlZCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tb2RhbHMvc3dpcGUtY29tcG9zaXRlLXV0aWxzLnNwZWMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuamVzdC5tb2NrKCdAa2VwbGVyLmdsL2RlY2tnbC1sYXllcnMnLCAoKSA9PiAoe1xuICBkcmF3U3RhcnNCYWNrZ3JvdW5kOiBqZXN0LmZuKClcbn0pKTtcblxuaW1wb3J0IHtkcmF3U3RhcnNCYWNrZ3JvdW5kfSBmcm9tICdAa2VwbGVyLmdsL2RlY2tnbC1sYXllcnMnO1xuaW1wb3J0IHtjb21wb3NpdGVTd2lwZUZyYW1lfSBmcm9tICcuL3N3aXBlLWNvbXBvc2l0ZS11dGlscyc7XG5cbmZ1bmN0aW9uIG1vY2tDYW52YXMod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwgbnVsbCkge1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICBnZXRDb250ZXh0OiAoKSA9PiBjdHhcbiAgfSBhcyB1bmtub3duIGFzIEhUTUxDYW52YXNFbGVtZW50O1xufVxuXG5mdW5jdGlvbiBtb2NrQ29tcG9zaXRlQ3R4KCkge1xuICByZXR1cm4ge1xuICAgIGNsZWFyUmVjdDogamVzdC5mbigpLFxuICAgIGZpbGxSZWN0OiBqZXN0LmZuKCksXG4gICAgZHJhd0ltYWdlOiBqZXN0LmZuKCksXG4gICAgc2F2ZTogamVzdC5mbigpLFxuICAgIHJlc3RvcmU6IGplc3QuZm4oKSxcbiAgICBiZWdpblBhdGg6IGplc3QuZm4oKSxcbiAgICByZWN0OiBqZXN0LmZuKCksXG4gICAgY2xpcDogamVzdC5mbigpLFxuICAgIGZpbGxTdHlsZTogJycsXG4gICAgc3Ryb2tlU3R5bGU6ICcnLFxuICAgIGxpbmVXaWR0aDogMCxcbiAgICBzaGFkb3dDb2xvcjogJycsXG4gICAgc2hhZG93Qmx1cjogMCxcbiAgICBtb3ZlVG86IGplc3QuZm4oKSxcbiAgICBsaW5lVG86IGplc3QuZm4oKSxcbiAgICBzdHJva2U6IGplc3QuZm4oKSxcbiAgICBhcmM6IGplc3QuZm4oKSxcbiAgICBmaWxsOiBqZXN0LmZuKCksXG4gICAgY2xvc2VQYXRoOiBqZXN0LmZuKClcbiAgfTtcbn1cblxuZGVzY3JpYmUoJ2NvbXBvc2l0ZVN3aXBlRnJhbWUnLCAoKSA9PiB7XG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgamVzdC5jbGVhckFsbE1vY2tzKCk7XG4gIH0pO1xuXG4gIHRlc3QoJ3RpbGVzIHN0YXJzIGFmdGVyIHRoZSBnbG9iZSBiYWNrZ3JvdW5kIGNvbG9yIHdoZW4gc2hvd1N0YXJzIGlzIHRydWUnLCAoKSA9PiB7XG4gICAgY29uc3QgY3R4ID0gbW9ja0NvbXBvc2l0ZUN0eCgpO1xuICAgIGNvbnN0IGxlZnQgPSBtb2NrQ2FudmFzKDEwLCAxMCwgY3R4IGFzIHVua25vd24gYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKTtcbiAgICBjb25zdCByaWdodCA9IG1vY2tDYW52YXMoMTAsIDEwLCBjdHggYXMgdW5rbm93biBhcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQpO1xuICAgIGNvbnN0IG91dHB1dCA9IG1vY2tDYW52YXMoMTAwLCA1MCwgY3R4IGFzIHVua25vd24gYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKTtcblxuICAgIGNvbXBvc2l0ZVN3aXBlRnJhbWUobGVmdCwgcmlnaHQsIG91dHB1dCwgNTAsIGZhbHNlLCAncmdiKDEsIDIsIDMpJywgdHJ1ZSk7XG5cbiAgICBleHBlY3QoY3R4LmZpbGxTdHlsZSkudG9CZSgncmdiKDEsIDIsIDMpJyk7XG4gICAgZXhwZWN0KGN0eC5maWxsUmVjdCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoMCwgMCwgMTAwLCA1MCk7XG4gICAgZXhwZWN0KGRyYXdTdGFyc0JhY2tncm91bmQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGN0eCwgMTAwLCA1MCk7XG4gICAgZXhwZWN0KGN0eC5maWxsUmVjdC5tb2NrLmludm9jYXRpb25DYWxsT3JkZXJbMF0pLnRvQmVMZXNzVGhhbihcbiAgICAgIChkcmF3U3RhcnNCYWNrZ3JvdW5kIGFzIGplc3QuTW9jaykubW9jay5pbnZvY2F0aW9uQ2FsbE9yZGVyWzBdXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdCgnZG9lcyBub3QgZHJhdyBzdGFycyB3aGVuIHNob3dTdGFycyBpcyBvbWl0dGVkJywgKCkgPT4ge1xuICAgIGNvbnN0IGN0eCA9IG1vY2tDb21wb3NpdGVDdHgoKTtcbiAgICBjb25zdCBsZWZ0ID0gbW9ja0NhbnZhcygxMCwgMTAsIGN0eCBhcyB1bmtub3duIGFzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk7XG4gICAgY29uc3QgcmlnaHQgPSBtb2NrQ2FudmFzKDEwLCAxMCwgY3R4IGFzIHVua25vd24gYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKTtcbiAgICBjb25zdCBvdXRwdXQgPSBtb2NrQ2FudmFzKDEwMCwgNTAsIGN0eCBhcyB1bmtub3duIGFzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk7XG5cbiAgICBjb21wb3NpdGVTd2lwZUZyYW1lKGxlZnQsIHJpZ2h0LCBvdXRwdXQsIDUwLCBmYWxzZSwgJ3JnYigxLCAyLCAzKScpO1xuXG4gICAgZXhwZWN0KGRyYXdTdGFyc0JhY2tncm91bmQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7O0FBRUFBLElBQUksQ0FBQ0MsSUFBSSxDQUFDLDBCQUEwQixFQUFFO0VBQUEsT0FBTztJQUMzQ0MsbUJBQW1CLEVBQUVGLElBQUksQ0FBQ0csRUFBRSxDQUFDO0VBQy9CLENBQUM7QUFBQSxDQUFDLENBQUM7QUFFSCxTQUFRRCxtQkFBbUIsUUFBTywwQkFBMEI7QUFDNUQsU0FBUUUsbUJBQW1CLFFBQU8seUJBQXlCO0FBRTNELFNBQVNDLFVBQVVBLENBQUNDLEtBQWEsRUFBRUMsTUFBYyxFQUFFQyxHQUFvQyxFQUFFO0VBQ3ZGLE9BQU87SUFDTEYsS0FBSyxFQUFMQSxLQUFLO0lBQ0xDLE1BQU0sRUFBTkEsTUFBTTtJQUNORSxVQUFVLEVBQUUsU0FBWkEsVUFBVUEsQ0FBQTtNQUFBLE9BQVFELEdBQUc7SUFBQTtFQUN2QixDQUFDO0FBQ0g7QUFFQSxTQUFTRSxnQkFBZ0JBLENBQUEsRUFBRztFQUMxQixPQUFPO0lBQ0xDLFNBQVMsRUFBRVgsSUFBSSxDQUFDRyxFQUFFLENBQUMsQ0FBQztJQUNwQlMsUUFBUSxFQUFFWixJQUFJLENBQUNHLEVBQUUsQ0FBQyxDQUFDO0lBQ25CVSxTQUFTLEVBQUViLElBQUksQ0FBQ0csRUFBRSxDQUFDLENBQUM7SUFDcEJXLElBQUksRUFBRWQsSUFBSSxDQUFDRyxFQUFFLENBQUMsQ0FBQztJQUNmWSxPQUFPLEVBQUVmLElBQUksQ0FBQ0csRUFBRSxDQUFDLENBQUM7SUFDbEJhLFNBQVMsRUFBRWhCLElBQUksQ0FBQ0csRUFBRSxDQUFDLENBQUM7SUFDcEJjLElBQUksRUFBRWpCLElBQUksQ0FBQ0csRUFBRSxDQUFDLENBQUM7SUFDZmUsSUFBSSxFQUFFbEIsSUFBSSxDQUFDRyxFQUFFLENBQUMsQ0FBQztJQUNmZ0IsU0FBUyxFQUFFLEVBQUU7SUFDYkMsV0FBVyxFQUFFLEVBQUU7SUFDZkMsU0FBUyxFQUFFLENBQUM7SUFDWkMsV0FBVyxFQUFFLEVBQUU7SUFDZkMsVUFBVSxFQUFFLENBQUM7SUFDYkMsTUFBTSxFQUFFeEIsSUFBSSxDQUFDRyxFQUFFLENBQUMsQ0FBQztJQUNqQnNCLE1BQU0sRUFBRXpCLElBQUksQ0FBQ0csRUFBRSxDQUFDLENBQUM7SUFDakJ1QixNQUFNLEVBQUUxQixJQUFJLENBQUNHLEVBQUUsQ0FBQyxDQUFDO0lBQ2pCd0IsR0FBRyxFQUFFM0IsSUFBSSxDQUFDRyxFQUFFLENBQUMsQ0FBQztJQUNkeUIsSUFBSSxFQUFFNUIsSUFBSSxDQUFDRyxFQUFFLENBQUMsQ0FBQztJQUNmMEIsU0FBUyxFQUFFN0IsSUFBSSxDQUFDRyxFQUFFLENBQUM7RUFDckIsQ0FBQztBQUNIO0FBRUEyQixRQUFRLENBQUMscUJBQXFCLEVBQUUsWUFBTTtFQUNwQ0MsU0FBUyxDQUFDLFlBQU07SUFDZC9CLElBQUksQ0FBQ2dDLGFBQWEsQ0FBQyxDQUFDO0VBQ3RCLENBQUMsQ0FBQztFQUVGQyxJQUFJLENBQUMscUVBQXFFLEVBQUUsWUFBTTtJQUNoRixJQUFNekIsR0FBRyxHQUFHRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzlCLElBQU13QixJQUFJLEdBQUc3QixVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRUcsR0FBMEMsQ0FBQztJQUMzRSxJQUFNMkIsS0FBSyxHQUFHOUIsVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUVHLEdBQTBDLENBQUM7SUFDNUUsSUFBTTRCLE1BQU0sR0FBRy9CLFVBQVUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFRyxHQUEwQyxDQUFDO0lBRTlFSixtQkFBbUIsQ0FBQzhCLElBQUksRUFBRUMsS0FBSyxFQUFFQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDO0lBRXpFQyxNQUFNLENBQUM3QixHQUFHLENBQUNXLFNBQVMsQ0FBQyxDQUFDbUIsSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUMxQ0QsTUFBTSxDQUFDN0IsR0FBRyxDQUFDSSxRQUFRLENBQUMsQ0FBQzJCLG9CQUFvQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztJQUN4REYsTUFBTSxDQUFDbkMsbUJBQW1CLENBQUMsQ0FBQ3FDLG9CQUFvQixDQUFDL0IsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7SUFDOUQ2QixNQUFNLENBQUM3QixHQUFHLENBQUNJLFFBQVEsQ0FBQ1gsSUFBSSxDQUFDdUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsWUFBWSxDQUMxRHZDLG1CQUFtQixDQUFlRCxJQUFJLENBQUN1QyxtQkFBbUIsQ0FBQyxDQUFDLENBQy9ELENBQUM7RUFDSCxDQUFDLENBQUM7RUFFRlAsSUFBSSxDQUFDLCtDQUErQyxFQUFFLFlBQU07SUFDMUQsSUFBTXpCLEdBQUcsR0FBR0UsZ0JBQWdCLENBQUMsQ0FBQztJQUM5QixJQUFNd0IsSUFBSSxHQUFHN0IsVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUVHLEdBQTBDLENBQUM7SUFDM0UsSUFBTTJCLEtBQUssR0FBRzlCLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFRyxHQUEwQyxDQUFDO0lBQzVFLElBQU00QixNQUFNLEdBQUcvQixVQUFVLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRUcsR0FBMEMsQ0FBQztJQUU5RUosbUJBQW1CLENBQUM4QixJQUFJLEVBQUVDLEtBQUssRUFBRUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsY0FBYyxDQUFDO0lBRW5FQyxNQUFNLENBQUNuQyxtQkFBbUIsQ0FBQyxDQUFDd0MsR0FBRyxDQUFDQyxnQkFBZ0IsQ0FBQyxDQUFDO0VBQ3BELENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
@@ -19,7 +19,7 @@ import DeckGL from '@deck.gl/react';
19
19
  import ReactMapGL, { useControl } from 'react-map-gl/maplibre';
20
20
  // @ts-ignore module resolution mismatch with moduleResolution:"node"
21
21
  import { MapboxOverlay } from '@deck.gl/mapbox';
22
- import isEqual from 'lodash.isequal';
22
+ import isEqual from 'lodash/isEqual';
23
23
  import styled from 'styled-components';
24
24
  import { createKeplerLayers } from '@hubble.gl/react';
25
25
  import { compositeSwipeFrame, getSwipePercentageAtTime } from './swipe-composite-utils';
@@ -215,12 +215,15 @@ export var SwipeExportVideoPreview = /*#__PURE__*/function (_Component) {
215
215
  }, {
216
216
  key: "_compositeFrame",
217
217
  value: function _compositeFrame() {
218
+ var _this$props$mapData, _globe$config;
218
219
  var leftCanvas = this._getLeftCanvas();
219
220
  var rightCanvas = this._getRightCanvas();
220
221
  var outputCanvas = this.compositeCanvasRef.current;
221
222
  if (!leftCanvas || !rightCanvas || !outputCanvas) return;
222
223
  var percentage = this._getCurrentSwipePercentage();
223
- compositeSwipeFrame(leftCanvas, rightCanvas, outputCanvas, percentage, true, this.props.backgroundColor);
224
+ var globe = (_this$props$mapData = this.props.mapData) === null || _this$props$mapData === void 0 || (_this$props$mapData = _this$props$mapData.mapState) === null || _this$props$mapData === void 0 ? void 0 : _this$props$mapData.globe;
225
+ var showStars = Boolean((globe === null || globe === void 0 ? void 0 : globe.enabled) && (globe === null || globe === void 0 || (_globe$config = globe.config) === null || _globe$config === void 0 ? void 0 : _globe$config.stars));
226
+ compositeSwipeFrame(leftCanvas, rightCanvas, outputCanvas, percentage, true, this.props.backgroundColor, showStars);
224
227
  }
225
228
  }, {
226
229
  key: "_areLayersLoaded",
@@ -261,7 +264,8 @@ export var SwipeExportVideoPreview = /*#__PURE__*/function (_Component) {
261
264
  return getGlobeExportLayers(mapData, {
262
265
  mapIndex: mapIndex,
263
266
  mapboxApiAccessToken: mapProps === null || mapProps === void 0 ? void 0 : mapProps.mapboxApiAccessToken,
264
- mapboxApiUrl: mapProps === null || mapProps === void 0 ? void 0 : mapProps.mapboxApiUrl
267
+ mapboxApiUrl: mapProps === null || mapProps === void 0 ? void 0 : mapProps.mapboxApiUrl,
268
+ viewState: viewState
265
269
  });
266
270
  }
267
271
  if (deckProps && deckProps.layers) {
@@ -381,4 +385,4 @@ export var SwipeExportVideoPreview = /*#__PURE__*/function (_Component) {
381
385
  }
382
386
  }]);
383
387
  }(Component);
384
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIkNvbXBvbmVudCIsImZvcndhcmRSZWYiLCJEZWNrR0wiLCJSZWFjdE1hcEdMIiwidXNlQ29udHJvbCIsIk1hcGJveE92ZXJsYXkiLCJpc0VxdWFsIiwic3R5bGVkIiwiY3JlYXRlS2VwbGVyTGF5ZXJzIiwiY29tcG9zaXRlU3dpcGVGcmFtZSIsImdldFN3aXBlUGVyY2VudGFnZUF0VGltZSIsIkVYUE9SVF9ERUNLX0RFVklDRV9QUk9QUyIsIkVYUE9SVF9PVkVSTEFZX0RFVklDRV9QUk9QUyIsImdldEdsb2JlRXhwb3J0TGF5ZXJzIiwic2V0UmVmIiwicmVmIiwidmFsdWUiLCJjdXJyZW50IiwiRGVja0dMT3ZlcmxheSIsInByb3BzIiwib3ZlcmxheSIsIl9vYmplY3RTcHJlYWQiLCJpbnRlcmxlYXZlZCIsInNldFByb3BzIiwiX2RlY2siLCJkaXNwbGF5TmFtZSIsIlByZXZpZXdDb250YWluZXIiLCJkaXYiLCJfdGVtcGxhdGVPYmplY3QiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsIiwiJHdpZHRoIiwiJGhlaWdodCIsIlZpc2libGVDYW52YXMiLCJjYW52YXMiLCJfdGVtcGxhdGVPYmplY3QyIiwiTWFwTGF5ZXIiLCJfdGVtcGxhdGVPYmplY3QzIiwiU3dpcGVFeHBvcnRWaWRlb1ByZXZpZXciLCJfQ29tcG9uZW50IiwiX3RoaXMiLCJfY2xhc3NDYWxsQ2hlY2siLCJfY2FsbFN1cGVyIiwiX2RlZmluZVByb3BlcnR5IiwiY3JlYXRlUmVmIiwicHJvY2VlZFRvTmV4dEZyYW1lIiwibGVmdExvYWRlZCIsIl9hcmVMYXllcnNMb2FkZWQiLCJyaWdodExvYWRlZCIsImxlZnRUaWxlc1JlYWR5IiwiZGlzYWJsZUJhc2VNYXAiLCJsZWZ0TWFwUmVmIiwiZ2V0TWFwIiwiYXJlVGlsZXNMb2FkZWQiLCJyaWdodFRpbGVzUmVhZHkiLCJyaWdodE1hcFJlZiIsIl9jb21wb3NpdGVGcmFtZSIsIl90aGlzJGxlZnRNYXBSZWYkY3VyciIsIm1hcCIsIm9uIiwic3RhdGUiLCJsZWZ0UmVhZHkiLCJzZXRTdGF0ZSIsIl90cnlDb21wb3NpdGUiLCJfdGhpcyRyaWdodE1hcFJlZiRjdXIiLCJyaWdodFJlYWR5Iiwic2lkZSIsInJlYWR5S2V5IiwibGVmdERlY2tSZWYiLCJyaWdodERlY2tSZWYiLCJfcmVzaXplVmlkZW8iLCJfaW5oZXJpdHMiLCJfY3JlYXRlQ2xhc3MiLCJrZXkiLCJjb21wb25lbnREaWRVcGRhdGUiLCJwcmV2UHJvcHMiLCJyZXNvbHV0aW9uIiwiY3VycmVudFRpbWVNcyIsInN3aXBlU3RhcnRQY3QiLCJzd2lwZUVuZFBjdCIsInN3aXBlRWFzaW5nIiwiX3RoaXMkcHJvcHMiLCJleHBvcnRWaWRlb1dpZHRoIiwiX3NldERldmljZVBpeGVsUmF0aW8iLCJkZXZpY2VQaXhlbFJhdGlvIiwid2luZG93IiwiX2dldENvbnRhaW5lciIsIl90aGlzJHByb3BzMiIsImFzcGVjdFJhdGlvIiwiaGVpZ2h0Iiwid2lkdGgiLCJfZ2V0Q3VycmVudFN3aXBlUGVyY2VudGFnZSIsIl90aGlzJHByb3BzMyIsImR1cmF0aW9uTXMiLCJfZ2V0TGVmdENhbnZhcyIsImdldENhbnZhcyIsIl9nZXRDYW52YXMiLCJfcmVmIiwiY2FsbCIsIl9nZXRSaWdodENhbnZhcyIsIl9nZXRDYW52YXMyIiwiX3JlZjIiLCJsZWZ0Q2FudmFzIiwicmlnaHRDYW52YXMiLCJvdXRwdXRDYW52YXMiLCJjb21wb3NpdGVDYW52YXNSZWYiLCJwZXJjZW50YWdlIiwiYmFja2dyb3VuZENvbG9yIiwiZGVja1JlZiIsImxheWVycyIsImV2ZXJ5IiwibGF5ZXIiLCJpc0xvYWRlZCIsImdldENvbXBvc2l0ZUNhbnZhcyIsIl9jcmVhdGVMYXllcnMiLCJtYXBJbmRleCIsImJlZm9yZUlkIiwiX21hcERhdGEkbWFwU3RhdGUiLCJfdGhpcyRwcm9wczQiLCJkZWNrUHJvcHMiLCJtYXBEYXRhIiwidmlld1N0YXRlIiwibWFwUHJvcHMiLCJtYXBTdGF0ZSIsImdsb2JlIiwiZW5hYmxlZCIsIm1hcGJveEFwaUFjY2Vzc1Rva2VuIiwibWFwYm94QXBpVXJsIiwiY2xvbmUiLCJpZCIsImNvbmNhdCIsIl9yZW5kZXJNYXBDYW52YXMiLCJfdGhpczIiLCJfdGhpcyRwcm9wczUiLCJhZGFwdGVyIiwibWFwYm94TGF5ZXJCZWZvcmVJZCIsIl90aGlzJF9nZXRDb250YWluZXIiLCJrZXBsZXJMYXllcnMiLCJtYXBSZWYiLCJvbk1hcExvYWQiLCJfb25MZWZ0TWFwTG9hZCIsIl9vblJpZ2h0TWFwTG9hZCIsImRlY2siLCJhZGFwdGVyUHJvcHMiLCJnZXRQcm9wcyIsImV4dHJhUHJvcHMiLCJhZGFwdGVyT25BZnRlclJlbmRlciIsIm9uQWZ0ZXJSZW5kZXIiLCJjcmVhdGVFbGVtZW50IiwiX2V4dGVuZHMiLCJkZXZpY2VQcm9wcyIsIm9uVmlld1N0YXRlQ2hhbmdlIiwiX3JlZjMiLCJ2cyIsInNldFZpZXdTdGF0ZSIsInBhcmFtcyIsIl9vbkRlY2tSZW5kZXIiLCJfcmVmNSIsIm1hcFN0eWxlRnJvbVByb3BzIiwibWFwU3R5bGUiLCJtYXBMaWIiLCJ0cmFuc2Zvcm1SZXF1ZXN0Iiwic3R5bGUiLCJhbnRpYWxpYXMiLCJwcmVzZXJ2ZURyYXdpbmdCdWZmZXIiLCJvbkxvYWQiLCJyZW5kZXIiLCJfdGhpcyRfZ2V0Q29udGFpbmVyMiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tb2RhbHMvc3dpcGUtZXhwb3J0LXZpZGVvLXByZXZpZXcudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCwge0NvbXBvbmVudCwgUmVmT2JqZWN0LCBmb3J3YXJkUmVmLCBGb3J3YXJkZWRSZWZ9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBEZWNrR0wgZnJvbSAnQGRlY2suZ2wvcmVhY3QnO1xuaW1wb3J0IFJlYWN0TWFwR0wsIHt0eXBlIE1hcFJlZiwgdXNlQ29udHJvbH0gZnJvbSAncmVhY3QtbWFwLWdsL21hcGxpYnJlJztcbi8vIEB0cy1pZ25vcmUgbW9kdWxlIHJlc29sdXRpb24gbWlzbWF0Y2ggd2l0aCBtb2R1bGVSZXNvbHV0aW9uOlwibm9kZVwiXG5pbXBvcnQge01hcGJveE92ZXJsYXl9IGZyb20gJ0BkZWNrLmdsL21hcGJveCc7XG5pbXBvcnQgdHlwZSB7RGVjaywgRGVja1Byb3BzLCBNYXBWaWV3U3RhdGV9IGZyb20gJ0BkZWNrLmdsL2NvcmUnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoLmlzZXF1YWwnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5cbmltcG9ydCB7RGVja0FkYXB0ZXJ9IGZyb20gJ0BodWJibGUuZ2wvY29yZSc7XG5pbXBvcnQge2NyZWF0ZUtlcGxlckxheWVyc30gZnJvbSAnQGh1YmJsZS5nbC9yZWFjdCc7XG5pbXBvcnQge2NvbXBvc2l0ZVN3aXBlRnJhbWUsIGdldFN3aXBlUGVyY2VudGFnZUF0VGltZSwgU3dpcGVFYXNpbmd9IGZyb20gJy4vc3dpcGUtY29tcG9zaXRlLXV0aWxzJztcbmltcG9ydCB7XG4gIEVYUE9SVF9ERUNLX0RFVklDRV9QUk9QUyxcbiAgRVhQT1JUX09WRVJMQVlfREVWSUNFX1BST1BTLFxuICBnZXRHbG9iZUV4cG9ydExheWVyc1xufSBmcm9tICcuL2h1YmJsZS11dGlscyc7XG5cbmZ1bmN0aW9uIHNldFJlZjxUPihyZWY6IFJlYWN0LlJlZjxUPiB8IFJlYWN0Lk11dGFibGVSZWZPYmplY3Q8VD4sIHZhbHVlOiBUKSB7XG4gIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmVmKHZhbHVlKTtcbiAgfSBlbHNlIGlmIChyZWYpIHtcbiAgICAocmVmIGFzIFJlYWN0Lk11dGFibGVSZWZPYmplY3Q8VD4pLmN1cnJlbnQgPSB2YWx1ZTtcbiAgfVxufVxuXG5jb25zdCBEZWNrR0xPdmVybGF5ID0gZm9yd2FyZFJlZjxEZWNrLCBhbnk+KFxuICAocHJvcHM6IGFueSwgcmVmOiBGb3J3YXJkZWRSZWY8RGVjaz4pID0+IHtcbiAgICBjb25zdCBvdmVybGF5ID0gdXNlQ29udHJvbDxNYXBib3hPdmVybGF5PigoKSA9PiBuZXcgTWFwYm94T3ZlcmxheSh7Li4ucHJvcHMsIGludGVybGVhdmVkOiB0cnVlfSkpO1xuICAgIG92ZXJsYXkuc2V0UHJvcHMocHJvcHMpO1xuICAgIHNldFJlZihyZWYsIChvdmVybGF5IGFzIGFueSkuX2RlY2spO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4pO1xuRGVja0dMT3ZlcmxheS5kaXNwbGF5TmFtZSA9ICdEZWNrR0xPdmVybGF5JztcblxuY29uc3QgUHJldmlld0NvbnRhaW5lciA9IHN0eWxlZC5kaXY8eyR3aWR0aDogbnVtYmVyOyAkaGVpZ2h0OiBudW1iZXJ9PmBcbiAgd2lkdGg6ICR7cHJvcHMgPT4gcHJvcHMuJHdpZHRofXB4O1xuICBoZWlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMuJGhlaWdodH1weDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuYDtcblxuY29uc3QgVmlzaWJsZUNhbnZhcyA9IHN0eWxlZC5jYW52YXM8eyR3aWR0aDogbnVtYmVyOyAkaGVpZ2h0OiBudW1iZXJ9PmBcbiAgd2lkdGg6ICR7cHJvcHMgPT4gcHJvcHMuJHdpZHRofXB4O1xuICBoZWlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMuJGhlaWdodH1weDtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbmA7XG5cbmNvbnN0IE1hcExheWVyID0gc3R5bGVkLmRpdjx7JHdpZHRoOiBudW1iZXI7ICRoZWlnaHQ6IG51bWJlcn0+YFxuICB3aWR0aDogJHtwcm9wcyA9PiBwcm9wcy4kd2lkdGh9cHg7XG4gIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy4kaGVpZ2h0fXB4O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgb3BhY2l0eTogMDtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDA7XG5gO1xuXG5leHBvcnQgdHlwZSBTd2lwZUV4cG9ydFZpZGVvUHJldmlld1Byb3BzID0ge1xuICBtYXBEYXRhOiBhbnk7XG4gIHJlc29sdXRpb246IFtudW1iZXIsIG51bWJlcl07XG4gIGV4cG9ydFZpZGVvV2lkdGg6IG51bWJlcjtcbiAgZGlzYWJsZUJhc2VNYXA6IGJvb2xlYW47XG4gIGRlY2tQcm9wcz86IERlY2tQcm9wcztcbiAgdmlld1N0YXRlOiBNYXBWaWV3U3RhdGU7XG4gIGFkYXB0ZXI6IERlY2tBZGFwdGVyO1xuICBtYXBib3hMYXllckJlZm9yZUlkPzogc3RyaW5nO1xuICByZW5kZXJpbmc6IGJvb2xlYW47XG4gIHNhdmluZzogYm9vbGVhbjtcbiAgc2V0Vmlld1N0YXRlOiAodmlld1N0YXRlOiBNYXBWaWV3U3RhdGUpID0+IHZvaWQ7XG4gIGR1cmF0aW9uTXM6IG51bWJlcjtcbiAgbWFwUHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBzd2lwZVN0YXJ0UGN0OiBudW1iZXI7XG4gIHN3aXBlRW5kUGN0OiBudW1iZXI7XG4gIHN3aXBlRWFzaW5nOiBTd2lwZUVhc2luZztcbiAgY3VycmVudFRpbWVNczogbnVtYmVyO1xuICBiYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG59O1xuXG50eXBlIFN3aXBlRXhwb3J0VmlkZW9QcmV2aWV3U3RhdGUgPSB7XG4gIGxlZnRSZWFkeTogYm9vbGVhbjtcbiAgcmlnaHRSZWFkeTogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogQSBkdWFsLWNhbnZhcyB2aWRlbyBleHBvcnQgcHJldmlldyB0aGF0IHJlbmRlcnMgbGVmdC9yaWdodCBzcGxpdCBtYXAgbGF5ZXJzXG4gKiBhbmQgY29tcG9zaXRlcyB0aGVtIHdpdGggYW4gYW5pbWF0ZWQgc3dpcGUgZGl2aWRlci5cbiAqL1xuZXhwb3J0IGNsYXNzIFN3aXBlRXhwb3J0VmlkZW9QcmV2aWV3IGV4dGVuZHMgQ29tcG9uZW50PFxuICBTd2lwZUV4cG9ydFZpZGVvUHJldmlld1Byb3BzLFxuICBTd2lwZUV4cG9ydFZpZGVvUHJldmlld1N0YXRlXG4+IHtcbiAgbGVmdE1hcFJlZjogUmVmT2JqZWN0PE1hcFJlZiB8IG51bGw+ID0gUmVhY3QuY3JlYXRlUmVmPE1hcFJlZiB8IG51bGw+KCk7XG4gIHJpZ2h0TWFwUmVmOiBSZWZPYmplY3Q8TWFwUmVmIHwgbnVsbD4gPSBSZWFjdC5jcmVhdGVSZWY8TWFwUmVmIHwgbnVsbD4oKTtcbiAgbGVmdERlY2tSZWY6IFJlZk9iamVjdDxEZWNrIHwgbnVsbD4gPSBSZWFjdC5jcmVhdGVSZWY8RGVjayB8IG51bGw+KCk7XG4gIHJpZ2h0RGVja1JlZjogUmVmT2JqZWN0PERlY2sgfCBudWxsPiA9IFJlYWN0LmNyZWF0ZVJlZjxEZWNrIHwgbnVsbD4oKTtcbiAgY29tcG9zaXRlQ2FudmFzUmVmOiBSZWZPYmplY3Q8SFRNTENhbnZhc0VsZW1lbnQgfCBudWxsPiA9IFJlYWN0LmNyZWF0ZVJlZjxIVE1MQ2FudmFzRWxlbWVudCB8IG51bGw+KCk7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IFN3aXBlRXhwb3J0VmlkZW9QcmV2aWV3UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgbGVmdFJlYWR5OiBmYWxzZSxcbiAgICAgIHJpZ2h0UmVhZHk6IGZhbHNlXG4gICAgfTtcblxuICAgIHRoaXMuX3Jlc2l6ZVZpZGVvKCk7XG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBTd2lwZUV4cG9ydFZpZGVvUHJldmlld1Byb3BzKSB7XG4gICAgaWYgKCFpc0VxdWFsKHByZXZQcm9wcy5yZXNvbHV0aW9uLCB0aGlzLnByb3BzLnJlc29sdXRpb24pKSB7XG4gICAgICB0aGlzLl9yZXNpemVWaWRlbygpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHByZXZQcm9wcy5jdXJyZW50VGltZU1zICE9PSB0aGlzLnByb3BzLmN1cnJlbnRUaW1lTXMgfHxcbiAgICAgIHByZXZQcm9wcy5zd2lwZVN0YXJ0UGN0ICE9PSB0aGlzLnByb3BzLnN3aXBlU3RhcnRQY3QgfHxcbiAgICAgIHByZXZQcm9wcy5zd2lwZUVuZFBjdCAhPT0gdGhpcy5wcm9wcy5zd2lwZUVuZFBjdCB8fFxuICAgICAgcHJldlByb3BzLnN3aXBlRWFzaW5nICE9PSB0aGlzLnByb3BzLnN3aXBlRWFzaW5nXG4gICAgKSB7XG4gICAgICB0aGlzLl9jb21wb3NpdGVGcmFtZSgpO1xuICAgIH1cbiAgfVxuXG4gIF9yZXNpemVWaWRlbygpIHtcbiAgICBjb25zdCB7ZXhwb3J0VmlkZW9XaWR0aCwgcmVzb2x1dGlvbn0gPSB0aGlzLnByb3BzO1xuICAgIHRoaXMuX3NldERldmljZVBpeGVsUmF0aW8ocmVzb2x1dGlvblswXSAvIGV4cG9ydFZpZGVvV2lkdGgpO1xuICB9XG5cbiAgX3NldERldmljZVBpeGVsUmF0aW8oZGV2aWNlUGl4ZWxSYXRpbzogbnVtYmVyKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvID0gZGV2aWNlUGl4ZWxSYXRpbztcbiAgfVxuXG4gIF9nZXRDb250YWluZXIoKSB7XG4gICAgY29uc3Qge2V4cG9ydFZpZGVvV2lkdGgsIHJlc29sdXRpb259ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBhc3BlY3RSYXRpbyA9IHJlc29sdXRpb25bMF0gLyByZXNvbHV0aW9uWzFdO1xuICAgIHJldHVybiB7aGVpZ2h0OiBleHBvcnRWaWRlb1dpZHRoIC8gYXNwZWN0UmF0aW8sIHdpZHRoOiBleHBvcnRWaWRlb1dpZHRofTtcbiAgfVxuXG4gIF9nZXRDdXJyZW50U3dpcGVQZXJjZW50YWdlKCk6IG51bWJlciB7XG4gICAgY29uc3Qge2N1cnJlbnRUaW1lTXMsIGR1cmF0aW9uTXMsIHN3aXBlU3RhcnRQY3QsIHN3aXBlRW5kUGN0LCBzd2lwZUVhc2luZ30gPSB0aGlzLnByb3BzO1xuICAgIHJldHVybiBnZXRTd2lwZVBlcmNlbnRhZ2VBdFRpbWUoY3VycmVudFRpbWVNcywgZHVyYXRpb25Ncywgc3dpcGVTdGFydFBjdCwgc3dpcGVFbmRQY3QsIHN3aXBlRWFzaW5nKTtcbiAgfVxuXG4gIF9nZXRMZWZ0Q2FudmFzKCk6IEhUTUxDYW52YXNFbGVtZW50IHwgbnVsbCB7XG4gICAgaWYgKHRoaXMubGVmdE1hcFJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm4gdGhpcy5sZWZ0TWFwUmVmLmN1cnJlbnQuZ2V0TWFwKCkuZ2V0Q2FudmFzKCk7XG4gICAgfVxuICAgIC8vIEZhbGxiYWNrOiBEZWNrR0wgY2FudmFzIChubyBiYXNlbWFwIG1vZGUpXG4gICAgaWYgKHRoaXMubGVmdERlY2tSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuICh0aGlzLmxlZnREZWNrUmVmLmN1cnJlbnQgYXMgYW55KS5nZXRDYW52YXM/LigpIHx8IG51bGw7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgX2dldFJpZ2h0Q2FudmFzKCk6IEhUTUxDYW52YXNFbGVtZW50IHwgbnVsbCB7XG4gICAgaWYgKHRoaXMucmlnaHRNYXBSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuIHRoaXMucmlnaHRNYXBSZWYuY3VycmVudC5nZXRNYXAoKS5nZXRDYW52YXMoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucmlnaHREZWNrUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybiAodGhpcy5yaWdodERlY2tSZWYuY3VycmVudCBhcyBhbnkpLmdldENhbnZhcz8uKCkgfHwgbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBfY29tcG9zaXRlRnJhbWUoKSB7XG4gICAgY29uc3QgbGVmdENhbnZhcyA9IHRoaXMuX2dldExlZnRDYW52YXMoKTtcbiAgICBjb25zdCByaWdodENhbnZhcyA9IHRoaXMuX2dldFJpZ2h0Q2FudmFzKCk7XG4gICAgY29uc3Qgb3V0cHV0Q2FudmFzID0gdGhpcy5jb21wb3NpdGVDYW52YXNSZWYuY3VycmVudDtcblxuICAgIGlmICghbGVmdENhbnZhcyB8fCAhcmlnaHRDYW52YXMgfHwgIW91dHB1dENhbnZhcykgcmV0dXJuO1xuXG4gICAgY29uc3QgcGVyY2VudGFnZSA9IHRoaXMuX2dldEN1cnJlbnRTd2lwZVBlcmNlbnRhZ2UoKTtcbiAgICBjb21wb3NpdGVTd2lwZUZyYW1lKFxuICAgICAgbGVmdENhbnZhcyxcbiAgICAgIHJpZ2h0Q2FudmFzLFxuICAgICAgb3V0cHV0Q2FudmFzLFxuICAgICAgcGVyY2VudGFnZSxcbiAgICAgIHRydWUsXG4gICAgICB0aGlzLnByb3BzLmJhY2tncm91bmRDb2xvclxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGJ5IHRoZSBwYXJlbnQgY29udGFpbmVyJ3MgYWRhcHRlciBhZnRlciBlYWNoIHJlbmRlci5cbiAgICogV2UgbmVlZCBib3RoIG1hcHMgdG8gYmUgbG9hZGVkIGJlZm9yZSBjb21wb3NpdGluZyBhbmQgY2FwdHVyaW5nLlxuICAgKi9cbiAgb25BZnRlclJlbmRlciA9IChwcm9jZWVkVG9OZXh0RnJhbWU6ICgpID0+IHZvaWQpID0+IHtcbiAgICBjb25zdCBsZWZ0TG9hZGVkID0gdGhpcy5fYXJlTGF5ZXJzTG9hZGVkKCdsZWZ0Jyk7XG4gICAgY29uc3QgcmlnaHRMb2FkZWQgPSB0aGlzLl9hcmVMYXllcnNMb2FkZWQoJ3JpZ2h0Jyk7XG4gICAgY29uc3QgbGVmdFRpbGVzUmVhZHkgPVxuICAgICAgdGhpcy5wcm9wcy5kaXNhYmxlQmFzZU1hcCB8fCAhdGhpcy5sZWZ0TWFwUmVmLmN1cnJlbnQgfHwgdGhpcy5sZWZ0TWFwUmVmLmN1cnJlbnQuZ2V0TWFwKCkuYXJlVGlsZXNMb2FkZWQoKTtcbiAgICBjb25zdCByaWdodFRpbGVzUmVhZHkgPVxuICAgICAgdGhpcy5wcm9wcy5kaXNhYmxlQmFzZU1hcCB8fCAhdGhpcy5yaWdodE1hcFJlZi5jdXJyZW50IHx8IHRoaXMucmlnaHRNYXBSZWYuY3VycmVudC5nZXRNYXAoKS5hcmVUaWxlc0xvYWRlZCgpO1xuXG4gICAgaWYgKGxlZnRMb2FkZWQgJiYgcmlnaHRMb2FkZWQgJiYgbGVmdFRpbGVzUmVhZHkgJiYgcmlnaHRUaWxlc1JlYWR5KSB7XG4gICAgICB0aGlzLl9jb21wb3NpdGVGcmFtZSgpO1xuICAgICAgcHJvY2VlZFRvTmV4dEZyYW1lKCk7XG4gICAgfVxuICB9O1xuXG4gIF9hcmVMYXllcnNMb2FkZWQoc2lkZTogJ2xlZnQnIHwgJ3JpZ2h0Jyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGRlY2tSZWYgPSBzaWRlID09PSAnbGVmdCcgPyB0aGlzLmxlZnREZWNrUmVmIDogdGhpcy5yaWdodERlY2tSZWY7XG4gICAgaWYgKCFkZWNrUmVmLmN1cnJlbnQpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBsYXllcnMgPSBkZWNrUmVmLmN1cnJlbnQucHJvcHMubGF5ZXJzIHx8IFtdO1xuICAgIHJldHVybiBsYXllcnMuZXZlcnkoKGxheWVyOiBhbnkpID0+IGxheWVyLmlzTG9hZGVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGNvbXBvc2l0ZWQgY2FudmFzIGVsZW1lbnQgZm9yIHZpZGVvIGNhcHR1cmUuXG4gICAqL1xuICBnZXRDb21wb3NpdGVDYW52YXMoKTogSFRNTENhbnZhc0VsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5jb21wb3NpdGVDYW52YXNSZWYuY3VycmVudDtcbiAgfVxuXG4gIF9jcmVhdGVMYXllcnMobWFwSW5kZXg6IG51bWJlciwgYmVmb3JlSWQ/OiBzdHJpbmcpIHtcbiAgICBjb25zdCB7ZGVja1Byb3BzLCBtYXBEYXRhLCB2aWV3U3RhdGUsIGRpc2FibGVCYXNlTWFwLCBtYXBQcm9wc30gPSB0aGlzLnByb3BzO1xuXG4gICAgLy8gR2xvYmUgc3dpcGU6IGJ1aWxkIGEgZnJlc2ggc2V0IG9mIGdsb2JlIGxheWVycyBwZXIgc2lkZS4gRWFjaCBzaWRlIGlzIGFcbiAgICAvLyBzZXBhcmF0ZSBEZWNrLCBzbyBpdCBuZWVkcyBpdHMgT1dOIExheWVyIGluc3RhbmNlcyAoZGVjay5nbCBMYXllciBvYmplY3RzXG4gICAgLy8gYXJlIHN0YXRlZnVsIGFuZCBib3VuZCB0byBvbmUgRGVjayDigJQgc2hhcmluZyB0aGVtIG1ha2VzIHRoZSBzZWNvbmQgRGVja1xuICAgIC8vIGFzc2VydCB3aGlsZSBpbml0aWFsaXppbmcgdGhlbSkuIEJ1aWxkaW5nIHBlciBgbWFwSW5kZXhgIGFsc28gcmVzcGVjdHMgdGhlXG4gICAgLy8gc3BsaXQtbWFwIGxheWVyIHZpc2liaWxpdHkgb24gZWFjaCBoYWxmIG9mIHRoZSBzd2lwZS5cbiAgICBpZiAoZGlzYWJsZUJhc2VNYXAgJiYgbWFwRGF0YT8ubWFwU3RhdGU/Lmdsb2JlPy5lbmFibGVkKSB7XG4gICAgICByZXR1cm4gZ2V0R2xvYmVFeHBvcnRMYXllcnMobWFwRGF0YSwge1xuICAgICAgICBtYXBJbmRleCxcbiAgICAgICAgbWFwYm94QXBpQWNjZXNzVG9rZW46IG1hcFByb3BzPy5tYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgICAgICAgbWFwYm94QXBpVXJsOiBtYXBQcm9wcz8ubWFwYm94QXBpVXJsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoZGVja1Byb3BzICYmIGRlY2tQcm9wcy5sYXllcnMpIHtcbiAgICAgIC8vIE5vbi1nbG9iZSBwYXRoIHdpdGggZXhwbGljaXQgbGF5ZXJzOiBjbG9uZSBwZXIgc2lkZSB3aXRoIGEgdW5pcXVlIGlkIHNvXG4gICAgICAvLyB0aGUgdHdvIERlY2sgaW5zdGFuY2VzIGRvbid0IHNoYXJlIHRoZSBzYW1lIHN0YXRlZnVsIExheWVyIG9iamVjdHMuXG4gICAgICByZXR1cm4gZGVja1Byb3BzLmxheWVycy5tYXAoKGxheWVyOiBhbnkpID0+XG4gICAgICAgIGxheWVyICYmIHR5cGVvZiBsYXllci5jbG9uZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgID8gbGF5ZXIuY2xvbmUoe2lkOiBgJHtsYXllci5pZH0tc3dpcGUtJHttYXBJbmRleH1gfSlcbiAgICAgICAgICA6IGxheWVyXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlS2VwbGVyTGF5ZXJzKG1hcERhdGEsIHZpZXdTdGF0ZSwgbWFwSW5kZXgsIGJlZm9yZUlkKTtcbiAgfVxuXG4gIF9vbkxlZnRNYXBMb2FkID0gKCkgPT4ge1xuICAgIGNvbnN0IG1hcCA9IHRoaXMubGVmdE1hcFJlZi5jdXJyZW50Py5nZXRNYXAoKTtcbiAgICBpZiAobWFwKSB7XG4gICAgICBtYXAub24oJ3JlbmRlcicsICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlLmxlZnRSZWFkeSkge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe2xlZnRSZWFkeTogdHJ1ZX0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3RyeUNvbXBvc2l0ZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9vblJpZ2h0TWFwTG9hZCA9ICgpID0+IHtcbiAgICBjb25zdCBtYXAgPSB0aGlzLnJpZ2h0TWFwUmVmLmN1cnJlbnQ/LmdldE1hcCgpO1xuICAgIGlmIChtYXApIHtcbiAgICAgIG1hcC5vbigncmVuZGVyJywgKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuc3RhdGUucmlnaHRSZWFkeSkge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe3JpZ2h0UmVhZHk6IHRydWV9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl90cnlDb21wb3NpdGUoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfdHJ5Q29tcG9zaXRlKCkge1xuICAgIGlmICh0aGlzLnN0YXRlLmxlZnRSZWFkeSAmJiB0aGlzLnN0YXRlLnJpZ2h0UmVhZHkpIHtcbiAgICAgIHRoaXMuX2NvbXBvc2l0ZUZyYW1lKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gR2xvYmUgKGRpc2FibGVCYXNlTWFwKSBtb2RlIGhhcyBubyBSZWFjdE1hcEdMIGFuZCB0aGVyZWZvcmUgbm8gbWFwICdyZW5kZXInXG4gIC8vIGV2ZW50IHRvIGRyaXZlIGNvbXBvc2l0aW5nLiBJbnN0ZWFkIGVhY2ggYmFyZSA8RGVja0dMPiByZXBvcnRzIHdoZW4gaXQgaGFzXG4gIC8vIGRyYXduIHZpYSBvbkFmdGVyUmVuZGVyOyBvbmNlIGJvdGggc2lkZXMgaGF2ZSByZW5kZXJlZCB3ZSBjb21wb3NpdGUuIFdpdGhvdXRcbiAgLy8gdGhpcyB0aGUgY29tcG9zaXRlIG91dHB1dCBjYW52YXMgaXMgbmV2ZXIgcGFpbnRlZCB1bnRpbCB0aGUgdXNlciBwcmVzc2VzXG4gIC8vIHBsYXksIHNvIHRoZSBwcmV2aWV3IHNob3dzIGEgYmxhbmsgKHdoaXRlKSBmcmFtZSBvbiBtb3VudC5cbiAgX29uRGVja1JlbmRlciA9IChzaWRlOiAnbGVmdCcgfCAncmlnaHQnKSA9PiB7XG4gICAgY29uc3QgcmVhZHlLZXkgPSBzaWRlID09PSAnbGVmdCcgPyAnbGVmdFJlYWR5JyA6ICdyaWdodFJlYWR5JztcbiAgICBpZiAoIXRoaXMuc3RhdGVbcmVhZHlLZXldKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtbcmVhZHlLZXldOiB0cnVlfSBhcyBhbnkpO1xuICAgIH1cbiAgICAvLyBDb21wb3NpdGUgYXMgc29vbiBhcyBib3RoIGRlY2tzIGV4aXN0IGFuZCBoYXZlIGRyYXduLiBXZSBjaGVjayB0aGUgZGVja1xuICAgIC8vIHJlZnMgZGlyZWN0bHkgKG5vdCBSZWFjdCBzdGF0ZSwgd2hpY2ggY2FuIGJlIHN0YWxlIHJpZ2h0IGFmdGVyIHNldFN0YXRlKVxuICAgIC8vIGFuZCBpbnRlbnRpb25hbGx5IGRvbid0IGdhdGUgb24gbGF5ZXJzIGJlaW5nIGZ1bGx5IGxvYWRlZCBoZXJlICh0aGF0IGdhdGVcbiAgICAvLyBsaXZlcyBpbiB0aGUgY2FwdHVyZSBsb29wKTogZm9yIGEgbGl2ZSBwcmV2aWV3IHdlIHdhbnQgdG8gc2hvdyB0aGUgZ2xvYmVcbiAgICAvLyBhcyBpdCBzdHJlYW1zIGluIHJhdGhlciB0aGFuIGEgYmxhbmsgZnJhbWUgd2hpbGUgdGlsZXMgbG9hZC5cbiAgICBpZiAodGhpcy5sZWZ0RGVja1JlZi5jdXJyZW50ICYmIHRoaXMucmlnaHREZWNrUmVmLmN1cnJlbnQpIHtcbiAgICAgIHRoaXMuX2NvbXBvc2l0ZUZyYW1lKCk7XG4gICAgfVxuICB9O1xuXG4gIF9yZW5kZXJNYXBDYW52YXMoXG4gICAgc2lkZTogJ2xlZnQnIHwgJ3JpZ2h0JyxcbiAgICBtYXBJbmRleDogbnVtYmVyXG4gICkge1xuICAgIGNvbnN0IHt2aWV3U3RhdGUsIGFkYXB0ZXIsIGRlY2tQcm9wcywgbWFwUHJvcHMsIGRpc2FibGVCYXNlTWFwLCBtYXBib3hMYXllckJlZm9yZUlkfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gdGhpcy5fZ2V0Q29udGFpbmVyKCk7XG4gICAgY29uc3Qga2VwbGVyTGF5ZXJzID0gdGhpcy5fY3JlYXRlTGF5ZXJzKG1hcEluZGV4LCBtYXBib3hMYXllckJlZm9yZUlkKTtcbiAgICBjb25zdCBtYXBSZWYgPSBzaWRlID09PSAnbGVmdCcgPyB0aGlzLmxlZnRNYXBSZWYgOiB0aGlzLnJpZ2h0TWFwUmVmO1xuICAgIGNvbnN0IGRlY2tSZWYgPSBzaWRlID09PSAnbGVmdCcgPyB0aGlzLmxlZnREZWNrUmVmIDogdGhpcy5yaWdodERlY2tSZWY7XG4gICAgY29uc3Qgb25NYXBMb2FkID0gc2lkZSA9PT0gJ2xlZnQnID8gdGhpcy5fb25MZWZ0TWFwTG9hZCA6IHRoaXMuX29uUmlnaHRNYXBMb2FkO1xuICAgIGNvbnN0IGRlY2sgPSBkZWNrUmVmLmN1cnJlbnQ7XG5cbiAgICBpZiAoZGlzYWJsZUJhc2VNYXApIHtcbiAgICAgIGNvbnN0IGFkYXB0ZXJQcm9wcyA9IGFkYXB0ZXIuZ2V0UHJvcHMoe1xuICAgICAgICBkZWNrOiBkZWNrIGFzIGFueSxcbiAgICAgICAgZXh0cmFQcm9wczogey4uLmRlY2tQcm9wcywgbGF5ZXJzOiBrZXBsZXJMYXllcnN9XG4gICAgICB9KSBhcyBhbnk7XG4gICAgICBjb25zdCBhZGFwdGVyT25BZnRlclJlbmRlciA9IGFkYXB0ZXJQcm9wcy5vbkFmdGVyUmVuZGVyO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPE1hcExheWVyICR3aWR0aD17d2lkdGh9ICRoZWlnaHQ9e2hlaWdodH0+XG4gICAgICAgICAgPERlY2tHTFxuICAgICAgICAgICAgcmVmPXtyZWYgPT4gc2V0UmVmKGRlY2tSZWYsIHJlZj8uZGVjayBhcyBhbnkpfVxuICAgICAgICAgICAgZGV2aWNlUHJvcHM9e0VYUE9SVF9ERUNLX0RFVklDRV9QUk9QU31cbiAgICAgICAgICAgIHsuLi5hZGFwdGVyUHJvcHN9XG4gICAgICAgICAgICB2aWV3U3RhdGU9e3ZpZXdTdGF0ZX1cbiAgICAgICAgICAgIG9uVmlld1N0YXRlQ2hhbmdlPXsoe3ZpZXdTdGF0ZTogdnN9OiBhbnkpID0+IHRoaXMucHJvcHMuc2V0Vmlld1N0YXRlKHZzKX1cbiAgICAgICAgICAgIG9uQWZ0ZXJSZW5kZXI9eyhwYXJhbXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIGFkYXB0ZXJPbkFmdGVyUmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgYWRhcHRlck9uQWZ0ZXJSZW5kZXIocGFyYW1zKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLl9vbkRlY2tSZW5kZXIoc2lkZSk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgey4uLnRoaXMuX2dldENvbnRhaW5lcigpfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvTWFwTGF5ZXI+XG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHtcbiAgICAgIG1hcFN0eWxlOiBtYXBTdHlsZUZyb21Qcm9wcyxcbiAgICAgIG1hcExpYixcbiAgICAgIHRyYW5zZm9ybVJlcXVlc3RcbiAgICB9ID0gKG1hcFByb3BzIHx8IHt9KSBhcyBhbnk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPE1hcExheWVyICR3aWR0aD17d2lkdGh9ICRoZWlnaHQ9e2hlaWdodH0+XG4gICAgICAgIDxSZWFjdE1hcEdMXG4gICAgICAgICAgcmVmPXttYXBSZWZ9XG4gICAgICAgICAgc3R5bGU9e3t3aWR0aCwgaGVpZ2h0fX1cbiAgICAgICAgICBhbnRpYWxpYXNcbiAgICAgICAgICBtYXBMaWI9e21hcExpYn1cbiAgICAgICAgICB0cmFuc2Zvcm1SZXF1ZXN0PXt0cmFuc2Zvcm1SZXF1ZXN0fVxuICAgICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlclxuICAgICAgICAgIHsuLi52aWV3U3RhdGV9XG4gICAgICAgICAgbWFwU3R5bGU9e21hcFN0eWxlRnJvbVByb3BzfVxuICAgICAgICAgIG9uTG9hZD17b25NYXBMb2FkfVxuICAgICAgICA+XG4gICAgICAgICAgPERlY2tHTE92ZXJsYXlcbiAgICAgICAgICAgIHJlZj17ZGVja1JlZn1cbiAgICAgICAgICAgIGRldmljZVByb3BzPXtFWFBPUlRfT1ZFUkxBWV9ERVZJQ0VfUFJPUFN9XG4gICAgICAgICAgICB7Li4uYWRhcHRlci5nZXRQcm9wcyh7ZGVjazogZGVjayBhcyBhbnksIGV4dHJhUHJvcHM6IHsuLi5kZWNrUHJvcHMsIGxheWVyczoga2VwbGVyTGF5ZXJzfX0pfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvUmVhY3RNYXBHTD5cbiAgICAgIDwvTWFwTGF5ZXI+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7cmVzb2x1dGlvbn0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IHRoaXMuX2dldENvbnRhaW5lcigpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxQcmV2aWV3Q29udGFpbmVyICR3aWR0aD17d2lkdGh9ICRoZWlnaHQ9e2hlaWdodH0+XG4gICAgICAgIHsvKiBIaWRkZW4gbWFwIGNhbnZhc2VzIGZvciBsZWZ0IChtYXBJbmRleD0wKSBhbmQgcmlnaHQgKG1hcEluZGV4PTEpICovfVxuICAgICAgICB7dGhpcy5fcmVuZGVyTWFwQ2FudmFzKCdsZWZ0JywgMCl9XG4gICAgICAgIHt0aGlzLl9yZW5kZXJNYXBDYW52YXMoJ3JpZ2h0JywgMSl9XG5cbiAgICAgICAgey8qIFZpc2libGUgY29tcG9zaXRlZCBvdXRwdXQgKi99XG4gICAgICAgIDxWaXNpYmxlQ2FudmFzXG4gICAgICAgICAgcmVmPXt0aGlzLmNvbXBvc2l0ZUNhbnZhc1JlZn1cbiAgICAgICAgICB3aWR0aD17cmVzb2x1dGlvblswXX1cbiAgICAgICAgICBoZWlnaHQ9e3Jlc29sdXRpb25bMV19XG4gICAgICAgICAgJHdpZHRoPXt3aWR0aH1cbiAgICAgICAgICAkaGVpZ2h0PXtoZWlnaHR9XG4gICAgICAgIC8+XG4gICAgICA8L1ByZXZpZXdDb250YWluZXI+XG4gICAgKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTs7QUFFQSxPQUFPQSxLQUFLLElBQUdDLFNBQVMsRUFBYUMsVUFBVSxRQUFxQixPQUFPO0FBQzNFLE9BQU9DLE1BQU0sTUFBTSxnQkFBZ0I7QUFDbkMsT0FBT0MsVUFBVSxJQUFnQkMsVUFBVSxRQUFPLHVCQUF1QjtBQUN6RTtBQUNBLFNBQVFDLGFBQWEsUUFBTyxpQkFBaUI7QUFFN0MsT0FBT0MsT0FBTyxNQUFNLGdCQUFnQjtBQUNwQyxPQUFPQyxNQUFNLE1BQU0sbUJBQW1CO0FBR3RDLFNBQVFDLGtCQUFrQixRQUFPLGtCQUFrQjtBQUNuRCxTQUFRQyxtQkFBbUIsRUFBRUMsd0JBQXdCLFFBQW9CLHlCQUF5QjtBQUNsRyxTQUNFQyx3QkFBd0IsRUFDeEJDLDJCQUEyQixFQUMzQkMsb0JBQW9CLFFBQ2YsZ0JBQWdCO0FBRXZCLFNBQVNDLE1BQU1BLENBQUlDLEdBQTZDLEVBQUVDLEtBQVEsRUFBRTtFQUMxRSxJQUFJLE9BQU9ELEdBQUcsS0FBSyxVQUFVLEVBQUU7SUFDN0JBLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDO0VBQ1osQ0FBQyxNQUFNLElBQUlELEdBQUcsRUFBRTtJQUNiQSxHQUFHLENBQStCRSxPQUFPLEdBQUdELEtBQUs7RUFDcEQ7QUFDRjtBQUVBLElBQU1FLGFBQWEsZ0JBQUdqQixVQUFVLENB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
388
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIkNvbXBvbmVudCIsImZvcndhcmRSZWYiLCJEZWNrR0wiLCJSZWFjdE1hcEdMIiwidXNlQ29udHJvbCIsIk1hcGJveE92ZXJsYXkiLCJpc0VxdWFsIiwic3R5bGVkIiwiY3JlYXRlS2VwbGVyTGF5ZXJzIiwiY29tcG9zaXRlU3dpcGVGcmFtZSIsImdldFN3aXBlUGVyY2VudGFnZUF0VGltZSIsIkVYUE9SVF9ERUNLX0RFVklDRV9QUk9QUyIsIkVYUE9SVF9PVkVSTEFZX0RFVklDRV9QUk9QUyIsImdldEdsb2JlRXhwb3J0TGF5ZXJzIiwic2V0UmVmIiwicmVmIiwidmFsdWUiLCJjdXJyZW50IiwiRGVja0dMT3ZlcmxheSIsInByb3BzIiwib3ZlcmxheSIsIl9vYmplY3RTcHJlYWQiLCJpbnRlcmxlYXZlZCIsInNldFByb3BzIiwiX2RlY2siLCJkaXNwbGF5TmFtZSIsIlByZXZpZXdDb250YWluZXIiLCJkaXYiLCJfdGVtcGxhdGVPYmplY3QiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsIiwiJHdpZHRoIiwiJGhlaWdodCIsIlZpc2libGVDYW52YXMiLCJjYW52YXMiLCJfdGVtcGxhdGVPYmplY3QyIiwiTWFwTGF5ZXIiLCJfdGVtcGxhdGVPYmplY3QzIiwiU3dpcGVFeHBvcnRWaWRlb1ByZXZpZXciLCJfQ29tcG9uZW50IiwiX3RoaXMiLCJfY2xhc3NDYWxsQ2hlY2siLCJfY2FsbFN1cGVyIiwiX2RlZmluZVByb3BlcnR5IiwiY3JlYXRlUmVmIiwicHJvY2VlZFRvTmV4dEZyYW1lIiwibGVmdExvYWRlZCIsIl9hcmVMYXllcnNMb2FkZWQiLCJyaWdodExvYWRlZCIsImxlZnRUaWxlc1JlYWR5IiwiZGlzYWJsZUJhc2VNYXAiLCJsZWZ0TWFwUmVmIiwiZ2V0TWFwIiwiYXJlVGlsZXNMb2FkZWQiLCJyaWdodFRpbGVzUmVhZHkiLCJyaWdodE1hcFJlZiIsIl9jb21wb3NpdGVGcmFtZSIsIl90aGlzJGxlZnRNYXBSZWYkY3VyciIsIm1hcCIsIm9uIiwic3RhdGUiLCJsZWZ0UmVhZHkiLCJzZXRTdGF0ZSIsIl90cnlDb21wb3NpdGUiLCJfdGhpcyRyaWdodE1hcFJlZiRjdXIiLCJyaWdodFJlYWR5Iiwic2lkZSIsInJlYWR5S2V5IiwibGVmdERlY2tSZWYiLCJyaWdodERlY2tSZWYiLCJfcmVzaXplVmlkZW8iLCJfaW5oZXJpdHMiLCJfY3JlYXRlQ2xhc3MiLCJrZXkiLCJjb21wb25lbnREaWRVcGRhdGUiLCJwcmV2UHJvcHMiLCJyZXNvbHV0aW9uIiwiY3VycmVudFRpbWVNcyIsInN3aXBlU3RhcnRQY3QiLCJzd2lwZUVuZFBjdCIsInN3aXBlRWFzaW5nIiwiX3RoaXMkcHJvcHMiLCJleHBvcnRWaWRlb1dpZHRoIiwiX3NldERldmljZVBpeGVsUmF0aW8iLCJkZXZpY2VQaXhlbFJhdGlvIiwid2luZG93IiwiX2dldENvbnRhaW5lciIsIl90aGlzJHByb3BzMiIsImFzcGVjdFJhdGlvIiwiaGVpZ2h0Iiwid2lkdGgiLCJfZ2V0Q3VycmVudFN3aXBlUGVyY2VudGFnZSIsIl90aGlzJHByb3BzMyIsImR1cmF0aW9uTXMiLCJfZ2V0TGVmdENhbnZhcyIsImdldENhbnZhcyIsIl9nZXRDYW52YXMiLCJfcmVmIiwiY2FsbCIsIl9nZXRSaWdodENhbnZhcyIsIl9nZXRDYW52YXMyIiwiX3JlZjIiLCJfdGhpcyRwcm9wcyRtYXBEYXRhIiwiX2dsb2JlJGNvbmZpZyIsImxlZnRDYW52YXMiLCJyaWdodENhbnZhcyIsIm91dHB1dENhbnZhcyIsImNvbXBvc2l0ZUNhbnZhc1JlZiIsInBlcmNlbnRhZ2UiLCJnbG9iZSIsIm1hcERhdGEiLCJtYXBTdGF0ZSIsInNob3dTdGFycyIsIkJvb2xlYW4iLCJlbmFibGVkIiwiY29uZmlnIiwic3RhcnMiLCJiYWNrZ3JvdW5kQ29sb3IiLCJkZWNrUmVmIiwibGF5ZXJzIiwiZXZlcnkiLCJsYXllciIsImlzTG9hZGVkIiwiZ2V0Q29tcG9zaXRlQ2FudmFzIiwiX2NyZWF0ZUxheWVycyIsIm1hcEluZGV4IiwiYmVmb3JlSWQiLCJfbWFwRGF0YSRtYXBTdGF0ZSIsIl90aGlzJHByb3BzNCIsImRlY2tQcm9wcyIsInZpZXdTdGF0ZSIsIm1hcFByb3BzIiwibWFwYm94QXBpQWNjZXNzVG9rZW4iLCJtYXBib3hBcGlVcmwiLCJjbG9uZSIsImlkIiwiY29uY2F0IiwiX3JlbmRlck1hcENhbnZhcyIsIl90aGlzMiIsIl90aGlzJHByb3BzNSIsImFkYXB0ZXIiLCJtYXBib3hMYXllckJlZm9yZUlkIiwiX3RoaXMkX2dldENvbnRhaW5lciIsImtlcGxlckxheWVycyIsIm1hcFJlZiIsIm9uTWFwTG9hZCIsIl9vbkxlZnRNYXBMb2FkIiwiX29uUmlnaHRNYXBMb2FkIiwiZGVjayIsImFkYXB0ZXJQcm9wcyIsImdldFByb3BzIiwiZXh0cmFQcm9wcyIsImFkYXB0ZXJPbkFmdGVyUmVuZGVyIiwib25BZnRlclJlbmRlciIsImNyZWF0ZUVsZW1lbnQiLCJfZXh0ZW5kcyIsImRldmljZVByb3BzIiwib25WaWV3U3RhdGVDaGFuZ2UiLCJfcmVmMyIsInZzIiwic2V0Vmlld1N0YXRlIiwicGFyYW1zIiwiX29uRGVja1JlbmRlciIsIl9yZWY1IiwibWFwU3R5bGVGcm9tUHJvcHMiLCJtYXBTdHlsZSIsIm1hcExpYiIsInRyYW5zZm9ybVJlcXVlc3QiLCJzdHlsZSIsImFudGlhbGlhcyIsInByZXNlcnZlRHJhd2luZ0J1ZmZlciIsIm9uTG9hZCIsInJlbmRlciIsIl90aGlzJF9nZXRDb250YWluZXIyIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21vZGFscy9zd2lwZS1leHBvcnQtdmlkZW8tcHJldmlldy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50LCBSZWZPYmplY3QsIGZvcndhcmRSZWYsIEZvcndhcmRlZFJlZn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IERlY2tHTCBmcm9tICdAZGVjay5nbC9yZWFjdCc7XG5pbXBvcnQgUmVhY3RNYXBHTCwge3R5cGUgTWFwUmVmLCB1c2VDb250cm9sfSBmcm9tICdyZWFjdC1tYXAtZ2wvbWFwbGlicmUnO1xuLy8gQHRzLWlnbm9yZSBtb2R1bGUgcmVzb2x1dGlvbiBtaXNtYXRjaCB3aXRoIG1vZHVsZVJlc29sdXRpb246XCJub2RlXCJcbmltcG9ydCB7TWFwYm94T3ZlcmxheX0gZnJvbSAnQGRlY2suZ2wvbWFwYm94JztcbmltcG9ydCB0eXBlIHtEZWNrLCBEZWNrUHJvcHMsIE1hcFZpZXdTdGF0ZX0gZnJvbSAnQGRlY2suZ2wvY29yZSc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2gvaXNFcXVhbCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcblxuaW1wb3J0IHtEZWNrQWRhcHRlcn0gZnJvbSAnQGh1YmJsZS5nbC9jb3JlJztcbmltcG9ydCB7Y3JlYXRlS2VwbGVyTGF5ZXJzfSBmcm9tICdAaHViYmxlLmdsL3JlYWN0JztcbmltcG9ydCB7Y29tcG9zaXRlU3dpcGVGcmFtZSwgZ2V0U3dpcGVQZXJjZW50YWdlQXRUaW1lLCBTd2lwZUVhc2luZ30gZnJvbSAnLi9zd2lwZS1jb21wb3NpdGUtdXRpbHMnO1xuaW1wb3J0IHtcbiAgRVhQT1JUX0RFQ0tfREVWSUNFX1BST1BTLFxuICBFWFBPUlRfT1ZFUkxBWV9ERVZJQ0VfUFJPUFMsXG4gIGdldEdsb2JlRXhwb3J0TGF5ZXJzXG59IGZyb20gJy4vaHViYmxlLXV0aWxzJztcblxuZnVuY3Rpb24gc2V0UmVmPFQ+KHJlZjogUmVhY3QuUmVmPFQ+IHwgUmVhY3QuTXV0YWJsZVJlZk9iamVjdDxUPiwgdmFsdWU6IFQpIHtcbiAgaWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZWYodmFsdWUpO1xuICB9IGVsc2UgaWYgKHJlZikge1xuICAgIChyZWYgYXMgUmVhY3QuTXV0YWJsZVJlZk9iamVjdDxUPikuY3VycmVudCA9IHZhbHVlO1xuICB9XG59XG5cbmNvbnN0IERlY2tHTE92ZXJsYXkgPSBmb3J3YXJkUmVmPERlY2ssIGFueT4oXG4gIChwcm9wczogYW55LCByZWY6IEZvcndhcmRlZFJlZjxEZWNrPikgPT4ge1xuICAgIGNvbnN0IG92ZXJsYXkgPSB1c2VDb250cm9sPE1hcGJveE92ZXJsYXk+KCgpID0+IG5ldyBNYXBib3hPdmVybGF5KHsuLi5wcm9wcywgaW50ZXJsZWF2ZWQ6IHRydWV9KSk7XG4gICAgb3ZlcmxheS5zZXRQcm9wcyhwcm9wcyk7XG4gICAgc2V0UmVmKHJlZiwgKG92ZXJsYXkgYXMgYW55KS5fZGVjayk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbik7XG5EZWNrR0xPdmVybGF5LmRpc3BsYXlOYW1lID0gJ0RlY2tHTE92ZXJsYXknO1xuXG5jb25zdCBQcmV2aWV3Q29udGFpbmVyID0gc3R5bGVkLmRpdjx7JHdpZHRoOiBudW1iZXI7ICRoZWlnaHQ6IG51bWJlcn0+YFxuICB3aWR0aDogJHtwcm9wcyA9PiBwcm9wcy4kd2lkdGh9cHg7XG4gIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy4kaGVpZ2h0fXB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5gO1xuXG5jb25zdCBWaXNpYmxlQ2FudmFzID0gc3R5bGVkLmNhbnZhczx7JHdpZHRoOiBudW1iZXI7ICRoZWlnaHQ6IG51bWJlcn0+YFxuICB3aWR0aDogJHtwcm9wcyA9PiBwcm9wcy4kd2lkdGh9cHg7XG4gIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy4kaGVpZ2h0fXB4O1xuICBkaXNwbGF5OiBibG9jaztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xuYDtcblxuY29uc3QgTWFwTGF5ZXIgPSBzdHlsZWQuZGl2PHskd2lkdGg6IG51bWJlcjsgJGhlaWdodDogbnVtYmVyfT5gXG4gIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLiR3aWR0aH1weDtcbiAgaGVpZ2h0OiAke3Byb3BzID0+IHByb3BzLiRoZWlnaHR9cHg7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICBvcGFjaXR5OiAwO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMDtcbmA7XG5cbmV4cG9ydCB0eXBlIFN3aXBlRXhwb3J0VmlkZW9QcmV2aWV3UHJvcHMgPSB7XG4gIG1hcERhdGE6IGFueTtcbiAgcmVzb2x1dGlvbjogW251bWJlciwgbnVtYmVyXTtcbiAgZXhwb3J0VmlkZW9XaWR0aDogbnVtYmVyO1xuICBkaXNhYmxlQmFzZU1hcDogYm9vbGVhbjtcbiAgZGVja1Byb3BzPzogRGVja1Byb3BzO1xuICB2aWV3U3RhdGU6IE1hcFZpZXdTdGF0ZTtcbiAgYWRhcHRlcjogRGVja0FkYXB0ZXI7XG4gIG1hcGJveExheWVyQmVmb3JlSWQ/OiBzdHJpbmc7XG4gIHJlbmRlcmluZzogYm9vbGVhbjtcbiAgc2F2aW5nOiBib29sZWFuO1xuICBzZXRWaWV3U3RhdGU6ICh2aWV3U3RhdGU6IE1hcFZpZXdTdGF0ZSkgPT4gdm9pZDtcbiAgZHVyYXRpb25NczogbnVtYmVyO1xuICBtYXBQcm9wcz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHN3aXBlU3RhcnRQY3Q6IG51bWJlcjtcbiAgc3dpcGVFbmRQY3Q6IG51bWJlcjtcbiAgc3dpcGVFYXNpbmc6IFN3aXBlRWFzaW5nO1xuICBjdXJyZW50VGltZU1zOiBudW1iZXI7XG4gIGJhY2tncm91bmRDb2xvcj86IHN0cmluZztcbn07XG5cbnR5cGUgU3dpcGVFeHBvcnRWaWRlb1ByZXZpZXdTdGF0ZSA9IHtcbiAgbGVmdFJlYWR5OiBib29sZWFuO1xuICByaWdodFJlYWR5OiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBBIGR1YWwtY2FudmFzIHZpZGVvIGV4cG9ydCBwcmV2aWV3IHRoYXQgcmVuZGVycyBsZWZ0L3JpZ2h0IHNwbGl0IG1hcCBsYXllcnNcbiAqIGFuZCBjb21wb3NpdGVzIHRoZW0gd2l0aCBhbiBhbmltYXRlZCBzd2lwZSBkaXZpZGVyLlxuICovXG5leHBvcnQgY2xhc3MgU3dpcGVFeHBvcnRWaWRlb1ByZXZpZXcgZXh0ZW5kcyBDb21wb25lbnQ8XG4gIFN3aXBlRXhwb3J0VmlkZW9QcmV2aWV3UHJvcHMsXG4gIFN3aXBlRXhwb3J0VmlkZW9QcmV2aWV3U3RhdGVcbj4ge1xuICBsZWZ0TWFwUmVmOiBSZWZPYmplY3Q8TWFwUmVmIHwgbnVsbD4gPSBSZWFjdC5jcmVhdGVSZWY8TWFwUmVmIHwgbnVsbD4oKTtcbiAgcmlnaHRNYXBSZWY6IFJlZk9iamVjdDxNYXBSZWYgfCBudWxsPiA9IFJlYWN0LmNyZWF0ZVJlZjxNYXBSZWYgfCBudWxsPigpO1xuICBsZWZ0RGVja1JlZjogUmVmT2JqZWN0PERlY2sgfCBudWxsPiA9IFJlYWN0LmNyZWF0ZVJlZjxEZWNrIHwgbnVsbD4oKTtcbiAgcmlnaHREZWNrUmVmOiBSZWZPYmplY3Q8RGVjayB8IG51bGw+ID0gUmVhY3QuY3JlYXRlUmVmPERlY2sgfCBudWxsPigpO1xuICBjb21wb3NpdGVDYW52YXNSZWY6IFJlZk9iamVjdDxIVE1MQ2FudmFzRWxlbWVudCB8IG51bGw+ID0gUmVhY3QuY3JlYXRlUmVmPEhUTUxDYW52YXNFbGVtZW50IHwgbnVsbD4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogU3dpcGVFeHBvcnRWaWRlb1ByZXZpZXdQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBsZWZ0UmVhZHk6IGZhbHNlLFxuICAgICAgcmlnaHRSZWFkeTogZmFsc2VcbiAgICB9O1xuXG4gICAgdGhpcy5fcmVzaXplVmlkZW8oKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IFN3aXBlRXhwb3J0VmlkZW9QcmV2aWV3UHJvcHMpIHtcbiAgICBpZiAoIWlzRXF1YWwocHJldlByb3BzLnJlc29sdXRpb24sIHRoaXMucHJvcHMucmVzb2x1dGlvbikpIHtcbiAgICAgIHRoaXMuX3Jlc2l6ZVZpZGVvKCk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgcHJldlByb3BzLmN1cnJlbnRUaW1lTXMgIT09IHRoaXMucHJvcHMuY3VycmVudFRpbWVNcyB8fFxuICAgICAgcHJldlByb3BzLnN3aXBlU3RhcnRQY3QgIT09IHRoaXMucHJvcHMuc3dpcGVTdGFydFBjdCB8fFxuICAgICAgcHJldlByb3BzLnN3aXBlRW5kUGN0ICE9PSB0aGlzLnByb3BzLnN3aXBlRW5kUGN0IHx8XG4gICAgICBwcmV2UHJvcHMuc3dpcGVFYXNpbmcgIT09IHRoaXMucHJvcHMuc3dpcGVFYXNpbmdcbiAgICApIHtcbiAgICAgIHRoaXMuX2NvbXBvc2l0ZUZyYW1lKCk7XG4gICAgfVxuICB9XG5cbiAgX3Jlc2l6ZVZpZGVvKCkge1xuICAgIGNvbnN0IHtleHBvcnRWaWRlb1dpZHRoLCByZXNvbHV0aW9ufSA9IHRoaXMucHJvcHM7XG4gICAgdGhpcy5fc2V0RGV2aWNlUGl4ZWxSYXRpbyhyZXNvbHV0aW9uWzBdIC8gZXhwb3J0VmlkZW9XaWR0aCk7XG4gIH1cblxuICBfc2V0RGV2aWNlUGl4ZWxSYXRpbyhkZXZpY2VQaXhlbFJhdGlvOiBudW1iZXIpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgd2luZG93LmRldmljZVBpeGVsUmF0aW8gPSBkZXZpY2VQaXhlbFJhdGlvO1xuICB9XG5cbiAgX2dldENvbnRhaW5lcigpIHtcbiAgICBjb25zdCB7ZXhwb3J0VmlkZW9XaWR0aCwgcmVzb2x1dGlvbn0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGFzcGVjdFJhdGlvID0gcmVzb2x1dGlvblswXSAvIHJlc29sdXRpb25bMV07XG4gICAgcmV0dXJuIHtoZWlnaHQ6IGV4cG9ydFZpZGVvV2lkdGggLyBhc3BlY3RSYXRpbywgd2lkdGg6IGV4cG9ydFZpZGVvV2lkdGh9O1xuICB9XG5cbiAgX2dldEN1cnJlbnRTd2lwZVBlcmNlbnRhZ2UoKTogbnVtYmVyIHtcbiAgICBjb25zdCB7Y3VycmVudFRpbWVNcywgZHVyYXRpb25Ncywgc3dpcGVTdGFydFBjdCwgc3dpcGVFbmRQY3QsIHN3aXBlRWFzaW5nfSA9IHRoaXMucHJvcHM7XG4gICAgcmV0dXJuIGdldFN3aXBlUGVyY2VudGFnZUF0VGltZShjdXJyZW50VGltZU1zLCBkdXJhdGlvbk1zLCBzd2lwZVN0YXJ0UGN0LCBzd2lwZUVuZFBjdCwgc3dpcGVFYXNpbmcpO1xuICB9XG5cbiAgX2dldExlZnRDYW52YXMoKTogSFRNTENhbnZhc0VsZW1lbnQgfCBudWxsIHtcbiAgICBpZiAodGhpcy5sZWZ0TWFwUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLmxlZnRNYXBSZWYuY3VycmVudC5nZXRNYXAoKS5nZXRDYW52YXMoKTtcbiAgICB9XG4gICAgLy8gRmFsbGJhY2s6IERlY2tHTCBjYW52YXMgKG5vIGJhc2VtYXAgbW9kZSlcbiAgICBpZiAodGhpcy5sZWZ0RGVja1JlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm4gKHRoaXMubGVmdERlY2tSZWYuY3VycmVudCBhcyBhbnkpLmdldENhbnZhcz8uKCkgfHwgbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBfZ2V0UmlnaHRDYW52YXMoKTogSFRNTENhbnZhc0VsZW1lbnQgfCBudWxsIHtcbiAgICBpZiAodGhpcy5yaWdodE1hcFJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm4gdGhpcy5yaWdodE1hcFJlZi5jdXJyZW50LmdldE1hcCgpLmdldENhbnZhcygpO1xuICAgIH1cbiAgICBpZiAodGhpcy5yaWdodERlY2tSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuICh0aGlzLnJpZ2h0RGVja1JlZi5jdXJyZW50IGFzIGFueSkuZ2V0Q2FudmFzPy4oKSB8fCBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIF9jb21wb3NpdGVGcmFtZSgpIHtcbiAgICBjb25zdCBsZWZ0Q2FudmFzID0gdGhpcy5fZ2V0TGVmdENhbnZhcygpO1xuICAgIGNvbnN0IHJpZ2h0Q2FudmFzID0gdGhpcy5fZ2V0UmlnaHRDYW52YXMoKTtcbiAgICBjb25zdCBvdXRwdXRDYW52YXMgPSB0aGlzLmNvbXBvc2l0ZUNhbnZhc1JlZi5jdXJyZW50O1xuXG4gICAgaWYgKCFsZWZ0Q2FudmFzIHx8ICFyaWdodENhbnZhcyB8fCAhb3V0cHV0Q2FudmFzKSByZXR1cm47XG5cbiAgICBjb25zdCBwZXJjZW50YWdlID0gdGhpcy5fZ2V0Q3VycmVudFN3aXBlUGVyY2VudGFnZSgpO1xuICAgIGNvbnN0IGdsb2JlID0gdGhpcy5wcm9wcy5tYXBEYXRhPy5tYXBTdGF0ZT8uZ2xvYmU7XG4gICAgY29uc3Qgc2hvd1N0YXJzID0gQm9vbGVhbihnbG9iZT8uZW5hYmxlZCAmJiBnbG9iZT8uY29uZmlnPy5zdGFycyk7XG5cbiAgICBjb21wb3NpdGVTd2lwZUZyYW1lKFxuICAgICAgbGVmdENhbnZhcyxcbiAgICAgIHJpZ2h0Q2FudmFzLFxuICAgICAgb3V0cHV0Q2FudmFzLFxuICAgICAgcGVyY2VudGFnZSxcbiAgICAgIHRydWUsXG4gICAgICB0aGlzLnByb3BzLmJhY2tncm91bmRDb2xvcixcbiAgICAgIHNob3dTdGFyc1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGJ5IHRoZSBwYXJlbnQgY29udGFpbmVyJ3MgYWRhcHRlciBhZnRlciBlYWNoIHJlbmRlci5cbiAgICogV2UgbmVlZCBib3RoIG1hcHMgdG8gYmUgbG9hZGVkIGJlZm9yZSBjb21wb3NpdGluZyBhbmQgY2FwdHVyaW5nLlxuICAgKi9cbiAgb25BZnRlclJlbmRlciA9IChwcm9jZWVkVG9OZXh0RnJhbWU6ICgpID0+IHZvaWQpID0+IHtcbiAgICBjb25zdCBsZWZ0TG9hZGVkID0gdGhpcy5fYXJlTGF5ZXJzTG9hZGVkKCdsZWZ0Jyk7XG4gICAgY29uc3QgcmlnaHRMb2FkZWQgPSB0aGlzLl9hcmVMYXllcnNMb2FkZWQoJ3JpZ2h0Jyk7XG4gICAgY29uc3QgbGVmdFRpbGVzUmVhZHkgPVxuICAgICAgdGhpcy5wcm9wcy5kaXNhYmxlQmFzZU1hcCB8fCAhdGhpcy5sZWZ0TWFwUmVmLmN1cnJlbnQgfHwgdGhpcy5sZWZ0TWFwUmVmLmN1cnJlbnQuZ2V0TWFwKCkuYXJlVGlsZXNMb2FkZWQoKTtcbiAgICBjb25zdCByaWdodFRpbGVzUmVhZHkgPVxuICAgICAgdGhpcy5wcm9wcy5kaXNhYmxlQmFzZU1hcCB8fCAhdGhpcy5yaWdodE1hcFJlZi5jdXJyZW50IHx8IHRoaXMucmlnaHRNYXBSZWYuY3VycmVudC5nZXRNYXAoKS5hcmVUaWxlc0xvYWRlZCgpO1xuXG4gICAgaWYgKGxlZnRMb2FkZWQgJiYgcmlnaHRMb2FkZWQgJiYgbGVmdFRpbGVzUmVhZHkgJiYgcmlnaHRUaWxlc1JlYWR5KSB7XG4gICAgICB0aGlzLl9jb21wb3NpdGVGcmFtZSgpO1xuICAgICAgcHJvY2VlZFRvTmV4dEZyYW1lKCk7XG4gICAgfVxuICB9O1xuXG4gIF9hcmVMYXllcnNMb2FkZWQoc2lkZTogJ2xlZnQnIHwgJ3JpZ2h0Jyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGRlY2tSZWYgPSBzaWRlID09PSAnbGVmdCcgPyB0aGlzLmxlZnREZWNrUmVmIDogdGhpcy5yaWdodERlY2tSZWY7XG4gICAgaWYgKCFkZWNrUmVmLmN1cnJlbnQpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBsYXllcnMgPSBkZWNrUmVmLmN1cnJlbnQucHJvcHMubGF5ZXJzIHx8IFtdO1xuICAgIHJldHVybiBsYXllcnMuZXZlcnkoKGxheWVyOiBhbnkpID0+IGxheWVyLmlzTG9hZGVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGNvbXBvc2l0ZWQgY2FudmFzIGVsZW1lbnQgZm9yIHZpZGVvIGNhcHR1cmUuXG4gICAqL1xuICBnZXRDb21wb3NpdGVDYW52YXMoKTogSFRNTENhbnZhc0VsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5jb21wb3NpdGVDYW52YXNSZWYuY3VycmVudDtcbiAgfVxuXG4gIF9jcmVhdGVMYXllcnMobWFwSW5kZXg6IG51bWJlciwgYmVmb3JlSWQ/OiBzdHJpbmcpIHtcbiAgICBjb25zdCB7ZGVja1Byb3BzLCBtYXBEYXRhLCB2aWV3U3RhdGUsIGRpc2FibGVCYXNlTWFwLCBtYXBQcm9wc30gPSB0aGlzLnByb3BzO1xuXG4gICAgLy8gR2xvYmUgc3dpcGU6IGJ1aWxkIGEgZnJlc2ggc2V0IG9mIGdsb2JlIGxheWVycyBwZXIgc2lkZS4gRWFjaCBzaWRlIGlzIGFcbiAgICAvLyBzZXBhcmF0ZSBEZWNrLCBzbyBpdCBuZWVkcyBpdHMgT1dOIExheWVyIGluc3RhbmNlcyAoZGVjay5nbCBMYXllciBvYmplY3RzXG4gICAgLy8gYXJlIHN0YXRlZnVsIGFuZCBib3VuZCB0byBvbmUgRGVjayDigJQgc2hhcmluZyB0aGVtIG1ha2VzIHRoZSBzZWNvbmQgRGVja1xuICAgIC8vIGFzc2VydCB3aGlsZSBpbml0aWFsaXppbmcgdGhlbSkuIEJ1aWxkaW5nIHBlciBgbWFwSW5kZXhgIGFsc28gcmVzcGVjdHMgdGhlXG4gICAgLy8gc3BsaXQtbWFwIGxheWVyIHZpc2liaWxpdHkgb24gZWFjaCBoYWxmIG9mIHRoZSBzd2lwZS5cbiAgICBpZiAoZGlzYWJsZUJhc2VNYXAgJiYgbWFwRGF0YT8ubWFwU3RhdGU/Lmdsb2JlPy5lbmFibGVkKSB7XG4gICAgICByZXR1cm4gZ2V0R2xvYmVFeHBvcnRMYXllcnMobWFwRGF0YSwge1xuICAgICAgICBtYXBJbmRleCxcbiAgICAgICAgbWFwYm94QXBpQWNjZXNzVG9rZW46IG1hcFByb3BzPy5tYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgICAgICAgbWFwYm94QXBpVXJsOiBtYXBQcm9wcz8ubWFwYm94QXBpVXJsLFxuICAgICAgICB2aWV3U3RhdGVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChkZWNrUHJvcHMgJiYgZGVja1Byb3BzLmxheWVycykge1xuICAgICAgLy8gTm9uLWdsb2JlIHBhdGggd2l0aCBleHBsaWNpdCBsYXllcnM6IGNsb25lIHBlciBzaWRlIHdpdGggYSB1bmlxdWUgaWQgc29cbiAgICAgIC8vIHRoZSB0d28gRGVjayBpbnN0YW5jZXMgZG9uJ3Qgc2hhcmUgdGhlIHNhbWUgc3RhdGVmdWwgTGF5ZXIgb2JqZWN0cy5cbiAgICAgIHJldHVybiBkZWNrUHJvcHMubGF5ZXJzLm1hcCgobGF5ZXI6IGFueSkgPT5cbiAgICAgICAgbGF5ZXIgJiYgdHlwZW9mIGxheWVyLmNsb25lID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgPyBsYXllci5jbG9uZSh7aWQ6IGAke2xheWVyLmlkfS1zd2lwZS0ke21hcEluZGV4fWB9KVxuICAgICAgICAgIDogbGF5ZXJcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVLZXBsZXJMYXllcnMobWFwRGF0YSwgdmlld1N0YXRlLCBtYXBJbmRleCwgYmVmb3JlSWQpO1xuICB9XG5cbiAgX29uTGVmdE1hcExvYWQgPSAoKSA9PiB7XG4gICAgY29uc3QgbWFwID0gdGhpcy5sZWZ0TWFwUmVmLmN1cnJlbnQ/LmdldE1hcCgpO1xuICAgIGlmIChtYXApIHtcbiAgICAgIG1hcC5vbigncmVuZGVyJywgKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuc3RhdGUubGVmdFJlYWR5KSB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7bGVmdFJlYWR5OiB0cnVlfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdHJ5Q29tcG9zaXRlKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX29uUmlnaHRNYXBMb2FkID0gKCkgPT4ge1xuICAgIGNvbnN0IG1hcCA9IHRoaXMucmlnaHRNYXBSZWYuY3VycmVudD8uZ2V0TWFwKCk7XG4gICAgaWYgKG1hcCkge1xuICAgICAgbWFwLm9uKCdyZW5kZXInLCAoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5zdGF0ZS5yaWdodFJlYWR5KSB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7cmlnaHRSZWFkeTogdHJ1ZX0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3RyeUNvbXBvc2l0ZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF90cnlDb21wb3NpdGUoKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUubGVmdFJlYWR5ICYmIHRoaXMuc3RhdGUucmlnaHRSZWFkeSkge1xuICAgICAgdGhpcy5fY29tcG9zaXRlRnJhbWUoKTtcbiAgICB9XG4gIH1cblxuICAvLyBHbG9iZSAoZGlzYWJsZUJhc2VNYXApIG1vZGUgaGFzIG5vIFJlYWN0TWFwR0wgYW5kIHRoZXJlZm9yZSBubyBtYXAgJ3JlbmRlcidcbiAgLy8gZXZlbnQgdG8gZHJpdmUgY29tcG9zaXRpbmcuIEluc3RlYWQgZWFjaCBiYXJlIDxEZWNrR0w+IHJlcG9ydHMgd2hlbiBpdCBoYXNcbiAgLy8gZHJhd24gdmlhIG9uQWZ0ZXJSZW5kZXI7IG9uY2UgYm90aCBzaWRlcyBoYXZlIHJlbmRlcmVkIHdlIGNvbXBvc2l0ZS4gV2l0aG91dFxuICAvLyB0aGlzIHRoZSBjb21wb3NpdGUgb3V0cHV0IGNhbnZhcyBpcyBuZXZlciBwYWludGVkIHVudGlsIHRoZSB1c2VyIHByZXNzZXNcbiAgLy8gcGxheSwgc28gdGhlIHByZXZpZXcgc2hvd3MgYSBibGFuayAod2hpdGUpIGZyYW1lIG9uIG1vdW50LlxuICBfb25EZWNrUmVuZGVyID0gKHNpZGU6ICdsZWZ0JyB8ICdyaWdodCcpID0+IHtcbiAgICBjb25zdCByZWFkeUtleSA9IHNpZGUgPT09ICdsZWZ0JyA/ICdsZWZ0UmVhZHknIDogJ3JpZ2h0UmVhZHknO1xuICAgIGlmICghdGhpcy5zdGF0ZVtyZWFkeUtleV0pIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1tyZWFkeUtleV06IHRydWV9IGFzIGFueSk7XG4gICAgfVxuICAgIC8vIENvbXBvc2l0ZSBhcyBzb29uIGFzIGJvdGggZGVja3MgZXhpc3QgYW5kIGhhdmUgZHJhd24uIFdlIGNoZWNrIHRoZSBkZWNrXG4gICAgLy8gcmVmcyBkaXJlY3RseSAobm90IFJlYWN0IHN0YXRlLCB3aGljaCBjYW4gYmUgc3RhbGUgcmlnaHQgYWZ0ZXIgc2V0U3RhdGUpXG4gICAgLy8gYW5kIGludGVudGlvbmFsbHkgZG9uJ3QgZ2F0ZSBvbiBsYXllcnMgYmVpbmcgZnVsbHkgbG9hZGVkIGhlcmUgKHRoYXQgZ2F0ZVxuICAgIC8vIGxpdmVzIGluIHRoZSBjYXB0dXJlIGxvb3ApOiBmb3IgYSBsaXZlIHByZXZpZXcgd2Ugd2FudCB0byBzaG93IHRoZSBnbG9iZVxuICAgIC8vIGFzIGl0IHN0cmVhbXMgaW4gcmF0aGVyIHRoYW4gYSBibGFuayBmcmFtZSB3aGlsZSB0aWxlcyBsb2FkLlxuICAgIGlmICh0aGlzLmxlZnREZWNrUmVmLmN1cnJlbnQgJiYgdGhpcy5yaWdodERlY2tSZWYuY3VycmVudCkge1xuICAgICAgdGhpcy5fY29tcG9zaXRlRnJhbWUoKTtcbiAgICB9XG4gIH07XG5cbiAgX3JlbmRlck1hcENhbnZhcyhcbiAgICBzaWRlOiAnbGVmdCcgfCAncmlnaHQnLFxuICAgIG1hcEluZGV4OiBudW1iZXJcbiAgKSB7XG4gICAgY29uc3Qge3ZpZXdTdGF0ZSwgYWRhcHRlciwgZGVja1Byb3BzLCBtYXBQcm9wcywgZGlzYWJsZUJhc2VNYXAsIG1hcGJveExheWVyQmVmb3JlSWR9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSB0aGlzLl9nZXRDb250YWluZXIoKTtcbiAgICBjb25zdCBrZXBsZXJMYXllcnMgPSB0aGlzLl9jcmVhdGVMYXllcnMobWFwSW5kZXgsIG1hcGJveExheWVyQmVmb3JlSWQpO1xuICAgIGNvbnN0IG1hcFJlZiA9IHNpZGUgPT09ICdsZWZ0JyA/IHRoaXMubGVmdE1hcFJlZiA6IHRoaXMucmlnaHRNYXBSZWY7XG4gICAgY29uc3QgZGVja1JlZiA9IHNpZGUgPT09ICdsZWZ0JyA/IHRoaXMubGVmdERlY2tSZWYgOiB0aGlzLnJpZ2h0RGVja1JlZjtcbiAgICBjb25zdCBvbk1hcExvYWQgPSBzaWRlID09PSAnbGVmdCcgPyB0aGlzLl9vbkxlZnRNYXBMb2FkIDogdGhpcy5fb25SaWdodE1hcExvYWQ7XG4gICAgY29uc3QgZGVjayA9IGRlY2tSZWYuY3VycmVudDtcblxuICAgIGlmIChkaXNhYmxlQmFzZU1hcCkge1xuICAgICAgY29uc3QgYWRhcHRlclByb3BzID0gYWRhcHRlci5nZXRQcm9wcyh7XG4gICAgICAgIGRlY2s6IGRlY2sgYXMgYW55LFxuICAgICAgICBleHRyYVByb3BzOiB7Li4uZGVja1Byb3BzLCBsYXllcnM6IGtlcGxlckxheWVyc31cbiAgICAgIH0pIGFzIGFueTtcbiAgICAgIGNvbnN0IGFkYXB0ZXJPbkFmdGVyUmVuZGVyID0gYWRhcHRlclByb3BzLm9uQWZ0ZXJSZW5kZXI7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8TWFwTGF5ZXIgJHdpZHRoPXt3aWR0aH0gJGhlaWdodD17aGVpZ2h0fT5cbiAgICAgICAgICA8RGVja0dMXG4gICAgICAgICAgICByZWY9e3JlZiA9PiBzZXRSZWYoZGVja1JlZiwgcmVmPy5kZWNrIGFzIGFueSl9XG4gICAgICAgICAgICBkZXZpY2VQcm9wcz17RVhQT1JUX0RFQ0tfREVWSUNFX1BST1BTfVxuICAgICAgICAgICAgey4uLmFkYXB0ZXJQcm9wc31cbiAgICAgICAgICAgIHZpZXdTdGF0ZT17dmlld1N0YXRlfVxuICAgICAgICAgICAgb25WaWV3U3RhdGVDaGFuZ2U9eyh7dmlld1N0YXRlOiB2c306IGFueSkgPT4gdGhpcy5wcm9wcy5zZXRWaWV3U3RhdGUodnMpfVxuICAgICAgICAgICAgb25BZnRlclJlbmRlcj17KHBhcmFtczogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgYWRhcHRlck9uQWZ0ZXJSZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBhZGFwdGVyT25BZnRlclJlbmRlcihwYXJhbXMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMuX29uRGVja1JlbmRlcihzaWRlKTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICB7Li4udGhpcy5fZ2V0Q29udGFpbmVyKCl9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9NYXBMYXllcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3Qge1xuICAgICAgbWFwU3R5bGU6IG1hcFN0eWxlRnJvbVByb3BzLFxuICAgICAgbWFwTGliLFxuICAgICAgdHJhbnNmb3JtUmVxdWVzdFxuICAgIH0gPSAobWFwUHJvcHMgfHwge30pIGFzIGFueTtcblxuICAgIHJldHVybiAoXG4gICAgICA8TWFwTGF5ZXIgJHdpZHRoPXt3aWR0aH0gJGhlaWdodD17aGVpZ2h0fT5cbiAgICAgICAgPFJlYWN0TWFwR0xcbiAgICAgICAgICByZWY9e21hcFJlZn1cbiAgICAgICAgICBzdHlsZT17e3dpZHRoLCBoZWlnaHR9fVxuICAgICAgICAgIGFudGlhbGlhc1xuICAgICAgICAgIG1hcExpYj17bWFwTGlifVxuICAgICAgICAgIHRyYW5zZm9ybVJlcXVlc3Q9e3RyYW5zZm9ybVJlcXVlc3R9XG4gICAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyXG4gICAgICAgICAgey4uLnZpZXdTdGF0ZX1cbiAgICAgICAgICBtYXBTdHlsZT17bWFwU3R5bGVGcm9tUHJvcHN9XG4gICAgICAgICAgb25Mb2FkPXtvbk1hcExvYWR9XG4gICAgICAgID5cbiAgICAgICAgICA8RGVja0dMT3ZlcmxheVxuICAgICAgICAgICAgcmVmPXtkZWNrUmVmfVxuICAgICAgICAgICAgZGV2aWNlUHJvcHM9e0VYUE9SVF9PVkVSTEFZX0RFVklDRV9QUk9QU31cbiAgICAgICAgICAgIHsuLi5hZGFwdGVyLmdldFByb3BzKHtkZWNrOiBkZWNrIGFzIGFueSwgZXh0cmFQcm9wczogey4uLmRlY2tQcm9wcywgbGF5ZXJzOiBrZXBsZXJMYXllcnN9fSl9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9SZWFjdE1hcEdMPlxuICAgICAgPC9NYXBMYXllcj5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtyZXNvbHV0aW9ufSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gdGhpcy5fZ2V0Q29udGFpbmVyKCk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFByZXZpZXdDb250YWluZXIgJHdpZHRoPXt3aWR0aH0gJGhlaWdodD17aGVpZ2h0fT5cbiAgICAgICAgey8qIEhpZGRlbiBtYXAgY2FudmFzZXMgZm9yIGxlZnQgKG1hcEluZGV4PTApIGFuZCByaWdodCAobWFwSW5kZXg9MSkgKi99XG4gICAgICAgIHt0aGlzLl9yZW5kZXJNYXBDYW52YXMoJ2xlZnQnLCAwKX1cbiAgICAgICAge3RoaXMuX3JlbmRlck1hcENhbnZhcygncmlnaHQnLCAxKX1cblxuICAgICAgICB7LyogVmlzaWJsZSBjb21wb3NpdGVkIG91dHB1dCAqL31cbiAgICAgICAgPFZpc2libGVDYW52YXNcbiAgICAgICAgICByZWY9e3RoaXMuY29tcG9zaXRlQ2FudmFzUmVmfVxuICAgICAgICAgIHdpZHRoPXtyZXNvbHV0aW9uWzBdfVxuICAgICAgICAgIGhlaWdodD17cmVzb2x1dGlvblsxXX1cbiAgICAgICAgICAkd2lkdGg9e3dpZHRofVxuICAgICAgICAgICRoZWlnaHQ9e2hlaWdodH1cbiAgICAgICAgLz5cbiAgICAgIDwvUHJldmlld0NvbnRhaW5lcj5cbiAgICApO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBOztBQUVBLE9BQU9BLEtBQUssSUFBR0MsU0FBUyxFQUFhQyxVQUFVLFFBQXFCLE9BQU87QUFDM0UsT0FBT0MsTUFBTSxNQUFNLGdCQUFnQjtBQUNuQyxPQUFPQyxVQUFVLElBQWdCQyxVQUFVLFFBQU8sdUJBQXVCO0FBQ3pFO0FBQ0EsU0FBUUMsYUFBYSxRQUFPLGlCQUFpQjtBQUU3QyxPQUFPQyxPQUFPLE1BQU0sZ0JBQWdCO0FBQ3BDLE9BQU9DLE1BQU0sTUFBTSxtQkFBbUI7QUFHdEMsU0FBUUMsa0JBQWtCLFFBQU8sa0JBQWtCO0FBQ25ELFNBQVFDLG1CQUFtQixFQUFFQyx3QkFBd0IsUUFBb0IseUJBQXlCO0FBQ2xHLFNBQ0VDLHdCQUF3QixFQUN4QkMsMkJBQTJC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