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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) 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/grid.js +2 -2
  7. package/dist/cjs/common/data-table/header-cell.js +123 -44
  8. package/dist/cjs/common/data-table/index.js +104 -31
  9. package/dist/cjs/common/file-uploader/file-upload.js +250 -40
  10. package/dist/cjs/common/histogram-plot.js +1 -1
  11. package/dist/cjs/common/icons/circle.js +54 -0
  12. package/dist/cjs/common/icons/{arrow-down-solid.js → draw-point.js} +21 -11
  13. package/dist/cjs/common/icons/index.js +22 -1
  14. package/dist/cjs/common/icons/line-string.js +60 -0
  15. package/dist/cjs/common/item-selector/item-selector.js +2 -2
  16. package/dist/cjs/common/portaled.js +3 -3
  17. package/dist/cjs/common/time-range-slider.js +2 -2
  18. package/dist/cjs/common/timeline-slider.js +2 -2
  19. package/dist/cjs/common/toolbar-item.js +24 -3
  20. package/dist/cjs/editor/editor.js +27 -9
  21. package/dist/cjs/editor/feature-action-panel.js +34 -12
  22. package/dist/cjs/editor/feature-properties-editor.js +215 -0
  23. package/dist/cjs/editor/filter-feature-badges.js +92 -0
  24. package/dist/cjs/filters/filter-panels/polygon-filter-panel.js +2 -2
  25. package/dist/cjs/filters/time-widget.js +2 -2
  26. package/dist/cjs/index.js +33 -1
  27. package/dist/cjs/kepler-gl.js +20 -3
  28. package/dist/cjs/map/layer-hover-info.js +2 -2
  29. package/dist/cjs/map/map-control-toolbar.js +2 -2
  30. package/dist/cjs/map/map-control.js +14 -8
  31. package/dist/cjs/map/map-draw-panel.js +74 -15
  32. package/dist/cjs/map/theme-toggle-button.js +64 -0
  33. package/dist/cjs/map-container.js +17 -6
  34. package/dist/cjs/map-view-state-context.js +3 -3
  35. package/dist/cjs/modal-container.js +3 -2
  36. package/dist/cjs/modals/cloud-components/cloud-item.js +55 -7
  37. package/dist/cjs/modals/cloud-components/cloud-item.spec.js +75 -3
  38. package/dist/cjs/modals/cloud-components/cloud-maps.js +2 -1
  39. package/dist/cjs/modals/cloud-components/cloud-storage-disclaimer.js +24 -0
  40. package/dist/cjs/modals/cloud-tile.js +82 -39
  41. package/dist/cjs/modals/data-table-modal.js +37 -25
  42. package/dist/cjs/modals/export-video-modal.js +28 -1
  43. package/dist/cjs/modals/export-video-modal.spec.js +56 -10
  44. package/dist/cjs/modals/globe-export-video-container.js +19 -3
  45. package/dist/cjs/modals/globe-export-video-preview.js +25 -7
  46. package/dist/cjs/modals/hubble-utils.js +8 -3
  47. package/dist/cjs/modals/image-modal-container.js +2 -2
  48. package/dist/cjs/modals/load-data-modal.js +3 -3
  49. package/dist/cjs/modals/load-storage-map.js +9 -6
  50. package/dist/cjs/modals/save-map-modal.js +4 -3
  51. package/dist/cjs/modals/share-map-modal.js +5 -4
  52. package/dist/cjs/modals/swipe-composite-utils.js +9 -1
  53. package/dist/cjs/modals/swipe-composite-utils.spec.js +69 -0
  54. package/dist/cjs/modals/swipe-export-video-preview.js +9 -5
  55. package/dist/cjs/plot-container.js +12 -5
  56. package/dist/cjs/side-panel/common/dataset-info.js +2 -2
  57. package/dist/cjs/side-panel/filter-panel/filter-panel.js +2 -2
  58. package/dist/cjs/side-panel/layer-manager.js +11 -3
  59. package/dist/cjs/side-panel/layer-panel/custom-palette.js +2 -2
  60. package/dist/cjs/side-panel/layer-panel/dataset-layer-section.js +11 -3
  61. package/dist/cjs/side-panel/layer-panel/layer-configurator.js +74 -31
  62. package/dist/cjs/side-panel/map-style-panel/globe-config-panel.js +90 -25
  63. package/dist/common/data-table/column-statistics-categoric.d.ts +9 -0
  64. package/dist/common/data-table/column-statistics-components.d.ts +31 -0
  65. package/dist/common/data-table/column-statistics-numeric.d.ts +18 -0
  66. package/dist/common/data-table/column-statistics-time.d.ts +19 -0
  67. package/dist/common/data-table/header-cell.d.ts +7 -5
  68. package/dist/common/data-table/index.d.ts +7 -24
  69. package/dist/common/histogram-plot.d.ts +24 -1
  70. package/dist/common/icons/{arrow-down-solid.d.ts → circle.d.ts} +2 -1
  71. package/dist/common/icons/draw-point.d.ts +10 -0
  72. package/dist/common/icons/index.d.ts +3 -0
  73. package/dist/common/icons/line-string.d.ts +10 -0
  74. package/dist/common/toolbar-item.d.ts +2 -0
  75. package/dist/editor/editor.d.ts +1 -0
  76. package/dist/editor/feature-action-panel.d.ts +1 -0
  77. package/dist/editor/feature-properties-editor.d.ts +8 -0
  78. package/dist/editor/filter-feature-badges.d.ts +12 -0
  79. package/dist/esm/common/data-table/cell-size.js +40 -23
  80. package/dist/esm/common/data-table/column-statistics-categoric.js +33 -0
  81. package/dist/esm/common/data-table/column-statistics-components.js +59 -0
  82. package/dist/esm/common/data-table/column-statistics-numeric.js +78 -0
  83. package/dist/esm/common/data-table/column-statistics-time.js +60 -0
  84. package/dist/esm/common/data-table/grid.js +2 -2
  85. package/dist/esm/common/data-table/header-cell.js +125 -46
  86. package/dist/esm/common/data-table/index.js +104 -31
  87. package/dist/esm/common/file-uploader/file-upload.js +251 -41
  88. package/dist/esm/common/histogram-plot.js +1 -1
  89. package/dist/esm/common/icons/circle.js +48 -0
  90. package/dist/esm/common/icons/draw-point.js +44 -0
  91. package/dist/esm/common/icons/index.js +4 -1
  92. package/dist/esm/common/icons/line-string.js +54 -0
  93. package/dist/esm/common/item-selector/item-selector.js +2 -2
  94. package/dist/esm/common/portaled.js +3 -3
  95. package/dist/esm/common/time-range-slider.js +2 -2
  96. package/dist/esm/common/timeline-slider.js +2 -2
  97. package/dist/esm/common/toolbar-item.js +24 -3
  98. package/dist/esm/editor/editor.js +27 -9
  99. package/dist/esm/editor/feature-action-panel.js +37 -15
  100. package/dist/esm/editor/feature-properties-editor.js +208 -0
  101. package/dist/esm/editor/filter-feature-badges.js +85 -0
  102. package/dist/esm/filters/filter-panels/polygon-filter-panel.js +2 -2
  103. package/dist/esm/filters/time-widget.js +2 -2
  104. package/dist/esm/index.js +5 -1
  105. package/dist/esm/kepler-gl.js +20 -3
  106. package/dist/esm/map/layer-hover-info.js +2 -2
  107. package/dist/esm/map/map-control-toolbar.js +2 -2
  108. package/dist/esm/map/map-control.js +14 -8
  109. package/dist/esm/map/map-draw-panel.js +72 -11
  110. package/dist/esm/map/theme-toggle-button.js +55 -0
  111. package/dist/esm/map-container.js +17 -6
  112. package/dist/esm/map-view-state-context.js +3 -3
  113. package/dist/esm/modal-container.js +3 -2
  114. package/dist/esm/modals/cloud-components/cloud-item.js +53 -7
  115. package/dist/esm/modals/cloud-components/cloud-item.spec.js +76 -4
  116. package/dist/esm/modals/cloud-components/cloud-maps.js +2 -1
  117. package/dist/esm/modals/cloud-components/cloud-storage-disclaimer.js +19 -0
  118. package/dist/esm/modals/cloud-tile.js +82 -39
  119. package/dist/esm/modals/data-table-modal.js +38 -26
  120. package/dist/esm/modals/export-video-modal.js +29 -2
  121. package/dist/esm/modals/export-video-modal.spec.js +56 -10
  122. package/dist/esm/modals/globe-export-video-container.js +20 -4
  123. package/dist/esm/modals/globe-export-video-preview.js +26 -8
  124. package/dist/esm/modals/hubble-utils.js +8 -3
  125. package/dist/esm/modals/image-modal-container.js +2 -2
  126. package/dist/esm/modals/load-data-modal.js +3 -3
  127. package/dist/esm/modals/load-storage-map.js +8 -3
  128. package/dist/esm/modals/save-map-modal.js +4 -3
  129. package/dist/esm/modals/share-map-modal.js +5 -4
  130. package/dist/esm/modals/swipe-composite-utils.js +9 -1
  131. package/dist/esm/modals/swipe-composite-utils.spec.js +67 -0
  132. package/dist/esm/modals/swipe-export-video-preview.js +8 -4
  133. package/dist/esm/plot-container.js +12 -5
  134. package/dist/esm/side-panel/common/dataset-info.js +2 -2
  135. package/dist/esm/side-panel/filter-panel/filter-panel.js +2 -2
  136. package/dist/esm/side-panel/layer-manager.js +11 -3
  137. package/dist/esm/side-panel/layer-panel/custom-palette.js +2 -2
  138. package/dist/esm/side-panel/layer-panel/dataset-layer-section.js +11 -3
  139. package/dist/esm/side-panel/layer-panel/layer-configurator.js +74 -31
  140. package/dist/esm/side-panel/map-style-panel/globe-config-panel.js +90 -25
  141. package/dist/index.d.ts +8 -0
  142. package/dist/kepler-gl.d.ts +3 -0
  143. package/dist/map/map-control.d.ts +6 -2
  144. package/dist/map/map-draw-panel.d.ts +1 -0
  145. package/dist/map/theme-toggle-button.d.ts +18 -0
  146. package/dist/map-container.d.ts +1 -0
  147. package/dist/modals/cloud-components/cloud-item.d.ts +2 -1
  148. package/dist/modals/cloud-components/cloud-storage-disclaimer.d.ts +2 -0
  149. package/dist/modals/data-table-modal.d.ts +1 -0
  150. package/dist/modals/globe-export-video-container.d.ts +2 -0
  151. package/dist/modals/globe-export-video-preview.d.ts +3 -0
  152. package/dist/modals/hubble-utils.d.ts +2 -1
  153. package/dist/modals/swipe-composite-utils.d.ts +1 -1
  154. package/dist/modals/swipe-composite-utils.spec.d.ts +1 -0
  155. package/package.json +20 -21
  156. package/dist/cjs/modals/cloud-components/provider-loading.js +0 -20
  157. package/dist/cjs/modals/storage-map-viewer.js +0 -98
  158. package/dist/cjs/side-panel/cloud-storage-dropdown.js +0 -40
  159. package/dist/esm/common/icons/arrow-down-solid.js +0 -34
  160. package/dist/esm/modals/cloud-components/provider-loading.js +0 -15
  161. package/dist/esm/modals/storage-map-viewer.js +0 -93
  162. package/dist/esm/side-panel/cloud-storage-dropdown.js +0 -33
  163. package/dist/modals/cloud-components/provider-loading.d.ts +0 -2
  164. package/dist/modals/storage-map-viewer.d.ts +0 -21
  165. package/dist/side-panel/cloud-storage-dropdown.d.ts +0 -6
@@ -14,6 +14,7 @@ import StatusPanel from './status-panel';
14
14
  import { FormattedMessage } from '@kepler.gl/localization';
15
15
  import { useCloudListProvider } from '../hooks/use-cloud-list-provider';
16
16
  import { ProviderSelect } from './cloud-components/provider-select';
17
+ import { CloudStorageDisclaimer } from './cloud-components/cloud-storage-disclaimer';
17
18
  import { dataTestIds } from '@kepler.gl/constants';
18
19
  export var StyledInputLabel = styled.label(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n font-size: 12px;\n color: ", ";\n letter-spacing: 0.2px;\n"])), function (props) {
19
20
  return props.theme.textColorLT;
@@ -49,8 +50,8 @@ export var SharingUrl = function SharingUrl(_ref) {
49
50
  var nop = function nop() {
50
51
  return;
51
52
  };
52
- var StyledShareMapModal = styled(StyledModalContent)(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n padding: 24px 72px 40px 72px;\n margin: 0 -72px -40px -72px;\n display: flex;\n flex-direction: column;\n"])));
53
- var StyledInnerDiv = styled.div(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n min-height: 500px;\n"])));
53
+ var StyledShareMapModal = styled(StyledModalContent)(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n padding: 24px 72px 40px 72px;\n margin: 0 -72px -40px -72px;\n display: flex;\n flex-direction: column;\n min-height: 500px;\n"])));
54
+ var StyledInnerDiv = styled.div(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n flex: 1;\n"])));
54
55
  var UNDERLINE_TEXT_DECORATION_STYLE = {
55
56
  textDecoration: 'underline'
56
57
  };
@@ -153,8 +154,8 @@ export default function ShareMapUrlModalFactory() {
153
154
  target: "_blank",
154
155
  rel: "noopener noreferrer",
155
156
  style: UNDERLINE_TEXT_DECORATION_STYLE
156
- }, provider.name)))) : null)));
157
+ }, provider.name)))) : null, /*#__PURE__*/React.createElement(CloudStorageDisclaimer, null))));
157
158
  };
158
159
  return ShareMapUrlModal;
159
160
  }
160
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwidXNlTWVtbyIsInN0eWxlZCIsIlRoZW1lUHJvdmlkZXIiLCJDb3B5VG9DbGlwYm9hcmQiLCJ0aGVtZUxUIiwiSW1hZ2VNb2RhbENvbnRhaW5lciIsIlN0eWxlZE1vZGFsQ29udGVudCIsIlN0eWxlZEV4cG9ydFNlY3Rpb24iLCJJbnB1dExpZ2h0IiwiQnV0dG9uIiwiU3RhdHVzUGFuZWwiLCJGb3JtYXR0ZWRNZXNzYWdlIiwidXNlQ2xvdWRMaXN0UHJvdmlkZXIiLCJQcm92aWRlclNlbGVjdCIsImRhdGFUZXN0SWRzIiwiU3R5bGVkSW5wdXRMYWJlbCIsImxhYmVsIiwiX3RlbXBsYXRlT2JqZWN0IiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbCIsInByb3BzIiwidGhlbWUiLCJ0ZXh0Q29sb3JMVCIsIlN0eWxlU2hhcmluZ1VybCIsImRpdiIsImF0dHJzIiwiY2xhc3NOYW1lIiwiX3RlbXBsYXRlT2JqZWN0MiIsIlNoYXJpbmdVcmwiLCJfcmVmIiwidXJsIiwiX3JlZiRtZXNzYWdlIiwibWVzc2FnZSIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsImNvcGllZCIsInNldENvcHkiLCJjcmVhdGVFbGVtZW50Iiwic3R5bGUiLCJkaXNwbGF5IiwidHlwZSIsInZhbHVlIiwicmVhZE9ubHkiLCJ0ZXh0Iiwib25Db3B5Iiwid2lkdGgiLCJub3AiLCJTdHlsZWRTaGFyZU1hcE1vZGFsIiwiX3RlbXBsYXRlT2JqZWN0MyIsIlN0eWxlZElubmVyRGl2IiwiX3RlbXBsYXRlT2JqZWN0NCIsIlVOREVSTElORV9URVhUX0RFQ09SQVRJT05fU1RZTEUiLCJ0ZXh0RGVjb3JhdGlvbiIsIlNoYXJlTWFwSGVhZGVyIiwiX3JlZjIiLCJjbG91ZFByb3ZpZGVycyIsInNoYXJlYWJsZUNsb3VkUHJvdmlkZXJzIiwiZmlsdGVyIiwiY3AiLCJoYXNTaGFyaW5nVXJsIiwiaWQiLCJTaGFyZU1hcFVybE1vZGFsRmFjdG9yeSIsIlNoYXJlTWFwVXJsTW9kYWwiLCJfcmVmMyIsIl9yZWYzJGlzUHJvdmlkZXJMb2FkaSIsImlzUHJvdmlkZXJMb2FkaW5nIiwiX3JlZjMkb25FeHBvcnQiLCJvbkV4cG9ydCIsIl9yZWYzJHByb3ZpZGVyRXJyb3IiLCJwcm92aWRlckVycm9yIiwiX3JlZjMkc3VjY2Vzc0luZm8iLCJzdWNjZXNzSW5mbyIsIl9yZWYzJG9uVXBkYXRlSW1hZ2VTZSIsIm9uVXBkYXRlSW1hZ2VTZXR0aW5nIiwiY2xlYW51cEV4cG9ydEltYWdlIiwiX3VzZUNsb3VkTGlzdFByb3ZpZGVyIiwicHJvdmlkZXIiLCJzaGFyZVVybCIsImZvbGRlckxpbmsiLCJwcm92aWRlclNoYXJlTWFwIiwiZGlzYWJsZWQiLCJpc0xvYWRpbmciLCJlcnJvciIsInByb3ZpZGVySWNvbiIsImljb24iLCJrZXkiLCJocmVmIiwidGFyZ2V0IiwicmVsIiwibmFtZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tb2RhbHMvc2hhcmUtbWFwLW1vZGFsLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgUmVhY3QsIHt1c2VFZmZlY3QsIHVzZVN0YXRlLCB1c2VNZW1vfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc3R5bGVkLCB7VGhlbWVQcm92aWRlcn0gZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtDb3B5VG9DbGlwYm9hcmR9IGZyb20gJ3JlYWN0LWNvcHktdG8tY2xpcGJvYXJkJztcbmltcG9ydCB7dGhlbWVMVH0gZnJvbSAnQGtlcGxlci5nbC9zdHlsZXMnO1xuaW1wb3J0IEltYWdlTW9kYWxDb250YWluZXIsIHtJbWFnZU1vZGFsQ29udGFpbmVyUHJvcHN9IGZyb20gJy4vaW1hZ2UtbW9kYWwtY29udGFpbmVyJztcblxuaW1wb3J0IHtcbiAgU3R5bGVkTW9kYWxDb250ZW50LFxuICBTdHlsZWRFeHBvcnRTZWN0aW9uLFxuICBJbnB1dExpZ2h0LFxuICBCdXR0b25cbn0gZnJvbSAnLi4vY29tbW9uL3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCBTdGF0dXNQYW5lbCBmcm9tICcuL3N0YXR1cy1wYW5lbCc7XG5pbXBvcnQge0Zvcm1hdHRlZE1lc3NhZ2V9IGZyb20gJ0BrZXBsZXIuZ2wvbG9jYWxpemF0aW9uJztcbmltcG9ydCB7dXNlQ2xvdWRMaXN0UHJvdmlkZXJ9IGZyb20gJy4uL2hvb2tzL3VzZS1jbG91ZC1saXN0LXByb3ZpZGVyJztcbmltcG9ydCB7UHJvdmlkZXJTZWxlY3R9IGZyb20gJy4vY2xvdWQtY29tcG9uZW50cy9wcm92aWRlci1zZWxlY3QnO1xuaW1wb3J0IHtQcm92aWRlcn0gZnJvbSAnQGtlcGxlci5nbC9jbG91ZC1wcm92aWRlcnMnO1xuaW1wb3J0IHtjbGVhbnVwRXhwb3J0SW1hZ2UgYXMgY2xlYW51cEV4cG9ydEltYWdlQWN0aW9ufSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuaW1wb3J0IHtkYXRhVGVzdElkc30gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuXG5leHBvcnQgY29uc3QgU3R5bGVkSW5wdXRMYWJlbCA9IHN0eWxlZC5sYWJlbGBcbiAgZm9udC1zaXplOiAxMnB4O1xuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS50ZXh0Q29sb3JMVH07XG4gIGxldHRlci1zcGFjaW5nOiAwLjJweDtcbmA7XG5cbmV4cG9ydCBjb25zdCBTdHlsZVNoYXJpbmdVcmwgPSBzdHlsZWQuZGl2LmF0dHJzKHtcbiAgY2xhc3NOYW1lOiAnc2hhcmluZy11cmwnXG59KWBcbiAgd2lkdGg6IDEwMCU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIG1hcmdpbi1ib3R0b206IDE0cHg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgaW5wdXQge1xuICAgIGJvcmRlci1yaWdodDogMDtcbiAgfVxuXG4gIC5idXR0b24ge1xuICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG4gICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbiAgfVxuYDtcblxuaW50ZXJmYWNlIFNoYXJpbmdVcmxQcm9wcyB7XG4gIHVybDogc3RyaW5nO1xuICBtZXNzYWdlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgU2hhcmluZ1VybDogUmVhY3QuRkM8U2hhcmluZ1VybFByb3BzPiA9ICh7dXJsLCBtZXNzYWdlID0gJyd9KSA9PiB7XG4gIGNvbnN0IFtjb3BpZWQsIHNldENvcHldID0gdXNlU3RhdGUoZmFsc2UpO1xuICByZXR1cm4gKFxuICAgIDxTdHlsZVNoYXJpbmdVcmw+XG4gICAgICA8U3R5bGVkSW5wdXRMYWJlbD57bWVzc2FnZX08L1N0eWxlZElucHV0TGFiZWw+XG4gICAgICA8ZGl2IHN0eWxlPXt7ZGlzcGxheTogJ2ZsZXgnfX0+XG4gICAgICAgIDxJbnB1dExpZ2h0IHR5cGU9XCJ0ZXh0XCIgdmFsdWU9e3VybH0gcmVhZE9ubHkgLz5cbiAgICAgICAgPENvcHlUb0NsaXBib2FyZCB0ZXh0PXt1cmx9IG9uQ29weT17KCkgPT4gc2V0Q29weSh0cnVlKX0+XG4gICAgICAgICAgPEJ1dHRvbiB3aWR0aD1cIjgwcHhcIj57Y29waWVkID8gJ0NvcGllZCEnIDogJ0NvcHknfTwvQnV0dG9uPlxuICAgICAgICA8L0NvcHlUb0NsaXBib2FyZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvU3R5bGVTaGFyaW5nVXJsPlxuICApO1xufTtcbmNvbnN0IG5vcCA9ICgpID0+IHtcbiAgcmV0dXJuO1xufTtcblxuY29uc3QgU3R5bGVkU2hhcmVNYXBNb2RhbCA9IHN0eWxlZChTdHlsZWRNb2RhbENvbnRlbnQpYFxuICBwYWRkaW5nOiAyNHB4IDcycHggNDBweCA3MnB4O1xuICBtYXJnaW46IDAgLTcycHggLTQwcHggLTcycHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5gO1xuXG5jb25zdCBTdHlsZWRJbm5lckRpdiA9IHN0eWxlZC5kaXZgXG4gIG1pbi1oZWlnaHQ6IDUwMHB4O1xuYDtcblxuY29uc3QgVU5ERVJMSU5FX1RFWFRfREVDT1JBVElPTl9TVFlMRSA9IHt0ZXh0RGVjb3JhdGlvbjogJ3VuZGVybGluZSd9O1xuXG5jb25zdCBTaGFyZU1hcEhlYWRlciA9ICh7Y2xvdWRQcm92aWRlcnN9KSA9PiB7XG4gIGNvbnN0IHNoYXJlYWJsZUNsb3VkUHJvdmlkZXJzID0gdXNlTWVtbyhcbiAgICAoKSA9PiBjbG91ZFByb3ZpZGVycy5maWx0ZXIoY3AgPT4gY3AuaGFzU2hhcmluZ1VybCgpKSxcbiAgICBbY2xvdWRQcm92aWRlcnNdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8U3R5bGVkRXhwb3J0U2VjdGlvbj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGVzY3JpcHRpb25cIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0aXRsZVwiPlxuICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPXsnbW9kYWwuc2hhcmVNYXAudGl0bGUnfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPFByb3ZpZGVyU2VsZWN0IGNsb3VkUHJvdmlkZXJzPXtzaGFyZWFibGVDbG91ZFByb3ZpZGVyc30gLz5cbiAgICA8L1N0eWxlZEV4cG9ydFNlY3Rpb24+XG4gICk7XG59O1xuXG5pbnRlcmZhY2UgU2hhcmVNYXBVcmxNb2RhbEZhY3RvcnlQcm9wcyB7XG4gIGlzUHJvdmlkZXJMb2FkaW5nPzogYm9vbGVhbjtcbiAgb25FeHBvcnQ/OiAocHJvdmlkZXI6IFByb3ZpZGVyKSA9PiB2b2lkO1xuICBwcm92aWRlckVycm9yPzogc3RyaW5nO1xuICBzdWNjZXNzSW5mbz86IHtzaGFyZVVybD86IHN0cmluZzsgZm9sZGVyTGluaz86IHN0cmluZ307XG4gIG9uVXBkYXRlSW1hZ2VTZXR0aW5nOiBJbWFnZU1vZGFsQ29udGFpbmVyUHJvcHNbJ29uVXBkYXRlSW1hZ2VTZXR0aW5nJ107XG4gIGNsZWFudXBFeHBvcnRJbWFnZTogdHlwZW9mIGNsZWFudXBFeHBvcnRJbWFnZUFjdGlvbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gU2hhcmVNYXBVcmxNb2RhbEZhY3RvcnkoKSB7XG4gIGNvbnN0IFNoYXJlTWFwVXJsTW9kYWw6IFJlYWN0LkZDPFNoYXJlTWFwVXJsTW9kYWxGYWN0b3J5UHJvcHM+ID0gKHtcbiAgICBpc1Byb3ZpZGVyTG9hZGluZyA9IGZhbHNlLFxuICAgIG9uRXhwb3J0ID0gbm9wLFxuICAgIHByb3ZpZGVyRXJyb3IgPSBudWxsLFxuICAgIHN1Y2Nlc3NJbmZvID0ge30sXG4gICAgb25VcGRhdGVJbWFnZVNldHRpbmcgPSBub3AsXG4gICAgY2xlYW51cEV4cG9ydEltYWdlXG4gIH0pID0+IHtcbiAgICBjb25zdCB7cHJvdmlkZXIsIGNsb3VkUHJvdmlkZXJzfSA9IHVzZUNsb3VkTGlzdFByb3ZpZGVyKCk7XG4gICAgY29uc3Qge3NoYXJlVXJsLCBmb2xkZXJMaW5rfSA9IHN1Y2Nlc3NJbmZvO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmIChwcm92aWRlcikge1xuICAgICAgICBvbkV4cG9ydChwcm92aWRlcik7XG4gICAgICB9XG4gICAgfSwgW29uRXhwb3J0LCBwcm92aWRlcl0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxUaGVtZVByb3ZpZGVyIHRoZW1lPXt0aGVtZUxUfT5cbiAgICAgICAgPEltYWdlTW9kYWxDb250YWluZXJcbiAgICAgICAgICBwcm92aWRlcj17cHJvdmlkZXJ9XG4gICAgICAgICAgb25VcGRhdGVJbWFnZVNldHRpbmc9e29uVXBkYXRlSW1hZ2VTZXR0aW5nfVxuICAgICAgICAgIGNsZWFudXBFeHBvcnRJbWFnZT17Y2xlYW51cEV4cG9ydEltYWdlfVxuICAgICAgICA+XG4gICAgICAgICAgPFN0eWxlZFNoYXJlTWFwTW9kYWwgY2xhc3NOYW1lPVwiZXhwb3J0LWNsb3VkLW1vZGFsXCI+XG4gICAgICAgICAgICA8U2hhcmVNYXBIZWFkZXIgY2xvdWRQcm92aWRlcnM9e2Nsb3VkUHJvdmlkZXJzfSAvPlxuICAgICAgICAgICAge3Byb3ZpZGVyPy5oYXNTaGFyaW5nVXJsKCkgPyAoXG4gICAgICAgICAgICAgIDxTdHlsZWRJbm5lckRpdiBkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZHMucHJvdmlkZXJTaGFyZU1hcH0+XG4gICAgICAgICAgICAgICAgPFN0eWxlZEV4cG9ydFNlY3Rpb24+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD17J21vZGFsLnNoYXJlTWFwLnNoYXJlVXJpVGl0bGUnfSAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdWJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPXsnbW9kYWwuc2hhcmVNYXAuc2hhcmVVcmlTdWJ0aXRsZSd9IC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNlbGVjdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRpdGxlIHdhcm5pbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD17J21vZGFsLnNoYXJlTWFwLnNoYXJlRGlzY2xhaW1lcid9IC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9TdHlsZWRFeHBvcnRTZWN0aW9uPlxuICAgICAgICAgICAgICAgIDxTdHlsZWRFeHBvcnRTZWN0aW9uIGRpc2FibGVkPXtpc1Byb3ZpZGVyTG9hZGluZ30+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD17J21vZGFsLnNoYXJlTWFwLmNsb3VkVGl0bGUnfSAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdWJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPXsnbW9kYWwuc2hhcmVNYXAuY2xvdWRTdWJ0aXRsZSd9IC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9TdHlsZWRFeHBvcnRTZWN0aW9uPlxuICAgICAgICAgICAgICAgIHtpc1Byb3ZpZGVyTG9hZGluZyB8fCBwcm92aWRlckVycm9yID8gKFxuICAgICAgICAgICAgICAgICAgPFN0YXR1c1BhbmVsXG4gICAgICAgICAgICAgICAgICAgIGlzTG9hZGluZz17aXNQcm92aWRlckxvYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgIGVycm9yPXtwcm92aWRlckVycm9yfVxuICAgICAgICAgICAgICAgICAgICBwcm92aWRlckljb249e3Byb3ZpZGVyLmljb259XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgIHtzaGFyZVVybCAmJiAoXG4gICAgICAgICAgICAgICAgICA8U3R5bGVkRXhwb3J0U2VjdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkZXNjcmlwdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGl0bGVcIj5TaGFyZSBVcmw8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2VsZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPFNoYXJpbmdVcmwga2V5PXswfSB1cmw9e3NoYXJlVXJsfSAvPlxuICAgICAgICAgICAgICAgICAgICAgIHtwcm92aWRlciAmJiBmb2xkZXJMaW5rICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17MX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj17Zm9sZGVyTGlua31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXtVTkRFUkxJTkVfVEVYVF9ERUNPUkFUSU9OX1NUWUxFfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7cHJvdmlkZXIubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvU3R5bGVkRXhwb3J0U2VjdGlvbj5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L1N0eWxlZElubmVyRGl2PlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPC9TdHlsZWRTaGFyZU1hcE1vZGFsPlxuICAgICAgICA8L0ltYWdlTW9kYWxDb250YWluZXI+XG4gICAgICA8L1RoZW1lUHJvdmlkZXI+XG4gICAgKTtcbiAgfTtc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
161
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwidXNlTWVtbyIsInN0eWxlZCIsIlRoZW1lUHJvdmlkZXIiLCJDb3B5VG9DbGlwYm9hcmQiLCJ0aGVtZUxUIiwiSW1hZ2VNb2RhbENvbnRhaW5lciIsIlN0eWxlZE1vZGFsQ29udGVudCIsIlN0eWxlZEV4cG9ydFNlY3Rpb24iLCJJbnB1dExpZ2h0IiwiQnV0dG9uIiwiU3RhdHVzUGFuZWwiLCJGb3JtYXR0ZWRNZXNzYWdlIiwidXNlQ2xvdWRMaXN0UHJvdmlkZXIiLCJQcm92aWRlclNlbGVjdCIsIkNsb3VkU3RvcmFnZURpc2NsYWltZXIiLCJkYXRhVGVzdElkcyIsIlN0eWxlZElucHV0TGFiZWwiLCJsYWJlbCIsIl90ZW1wbGF0ZU9iamVjdCIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwiLCJwcm9wcyIsInRoZW1lIiwidGV4dENvbG9yTFQiLCJTdHlsZVNoYXJpbmdVcmwiLCJkaXYiLCJhdHRycyIsImNsYXNzTmFtZSIsIl90ZW1wbGF0ZU9iamVjdDIiLCJTaGFyaW5nVXJsIiwiX3JlZiIsInVybCIsIl9yZWYkbWVzc2FnZSIsIm1lc3NhZ2UiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJjb3BpZWQiLCJzZXRDb3B5IiwiY3JlYXRlRWxlbWVudCIsInN0eWxlIiwiZGlzcGxheSIsInR5cGUiLCJ2YWx1ZSIsInJlYWRPbmx5IiwidGV4dCIsIm9uQ29weSIsIndpZHRoIiwibm9wIiwiU3R5bGVkU2hhcmVNYXBNb2RhbCIsIl90ZW1wbGF0ZU9iamVjdDMiLCJTdHlsZWRJbm5lckRpdiIsIl90ZW1wbGF0ZU9iamVjdDQiLCJVTkRFUkxJTkVfVEVYVF9ERUNPUkFUSU9OX1NUWUxFIiwidGV4dERlY29yYXRpb24iLCJTaGFyZU1hcEhlYWRlciIsIl9yZWYyIiwiY2xvdWRQcm92aWRlcnMiLCJzaGFyZWFibGVDbG91ZFByb3ZpZGVycyIsImZpbHRlciIsImNwIiwiaGFzU2hhcmluZ1VybCIsImlkIiwiU2hhcmVNYXBVcmxNb2RhbEZhY3RvcnkiLCJTaGFyZU1hcFVybE1vZGFsIiwiX3JlZjMiLCJfcmVmMyRpc1Byb3ZpZGVyTG9hZGkiLCJpc1Byb3ZpZGVyTG9hZGluZyIsIl9yZWYzJG9uRXhwb3J0Iiwib25FeHBvcnQiLCJfcmVmMyRwcm92aWRlckVycm9yIiwicHJvdmlkZXJFcnJvciIsIl9yZWYzJHN1Y2Nlc3NJbmZvIiwic3VjY2Vzc0luZm8iLCJfcmVmMyRvblVwZGF0ZUltYWdlU2UiLCJvblVwZGF0ZUltYWdlU2V0dGluZyIsImNsZWFudXBFeHBvcnRJbWFnZSIsIl91c2VDbG91ZExpc3RQcm92aWRlciIsInByb3ZpZGVyIiwic2hhcmVVcmwiLCJmb2xkZXJMaW5rIiwicHJvdmlkZXJTaGFyZU1hcCIsImRpc2FibGVkIiwiaXNMb2FkaW5nIiwiZXJyb3IiLCJwcm92aWRlckljb24iLCJpY29uIiwia2V5IiwiaHJlZiIsInRhcmdldCIsInJlbCIsIm5hbWUiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbW9kYWxzL3NoYXJlLW1hcC1tb2RhbC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IFJlYWN0LCB7dXNlRWZmZWN0LCB1c2VTdGF0ZSwgdXNlTWVtb30gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHN0eWxlZCwge1RoZW1lUHJvdmlkZXJ9IGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7Q29weVRvQ2xpcGJvYXJkfSBmcm9tICdyZWFjdC1jb3B5LXRvLWNsaXBib2FyZCc7XG5pbXBvcnQge3RoZW1lTFR9IGZyb20gJ0BrZXBsZXIuZ2wvc3R5bGVzJztcbmltcG9ydCBJbWFnZU1vZGFsQ29udGFpbmVyLCB7SW1hZ2VNb2RhbENvbnRhaW5lclByb3BzfSBmcm9tICcuL2ltYWdlLW1vZGFsLWNvbnRhaW5lcic7XG5cbmltcG9ydCB7XG4gIFN0eWxlZE1vZGFsQ29udGVudCxcbiAgU3R5bGVkRXhwb3J0U2VjdGlvbixcbiAgSW5wdXRMaWdodCxcbiAgQnV0dG9uXG59IGZyb20gJy4uL2NvbW1vbi9zdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQgU3RhdHVzUGFuZWwgZnJvbSAnLi9zdGF0dXMtcGFuZWwnO1xuaW1wb3J0IHtGb3JtYXR0ZWRNZXNzYWdlfSBmcm9tICdAa2VwbGVyLmdsL2xvY2FsaXphdGlvbic7XG5pbXBvcnQge3VzZUNsb3VkTGlzdFByb3ZpZGVyfSBmcm9tICcuLi9ob29rcy91c2UtY2xvdWQtbGlzdC1wcm92aWRlcic7XG5pbXBvcnQge1Byb3ZpZGVyU2VsZWN0fSBmcm9tICcuL2Nsb3VkLWNvbXBvbmVudHMvcHJvdmlkZXItc2VsZWN0JztcbmltcG9ydCB7Q2xvdWRTdG9yYWdlRGlzY2xhaW1lcn0gZnJvbSAnLi9jbG91ZC1jb21wb25lbnRzL2Nsb3VkLXN0b3JhZ2UtZGlzY2xhaW1lcic7XG5pbXBvcnQge1Byb3ZpZGVyfSBmcm9tICdAa2VwbGVyLmdsL2Nsb3VkLXByb3ZpZGVycyc7XG5pbXBvcnQge2NsZWFudXBFeHBvcnRJbWFnZSBhcyBjbGVhbnVwRXhwb3J0SW1hZ2VBY3Rpb259IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5pbXBvcnQge2RhdGFUZXN0SWRzfSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBjb25zdCBTdHlsZWRJbnB1dExhYmVsID0gc3R5bGVkLmxhYmVsYFxuICBmb250LXNpemU6IDEycHg7XG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnRleHRDb2xvckxUfTtcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMnB4O1xuYDtcblxuZXhwb3J0IGNvbnN0IFN0eWxlU2hhcmluZ1VybCA9IHN0eWxlZC5kaXYuYXR0cnMoe1xuICBjbGFzc05hbWU6ICdzaGFyaW5nLXVybCdcbn0pYFxuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogZmxleDtcbiAgbWFyZ2luLWJvdHRvbTogMTRweDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblxuICBpbnB1dCB7XG4gICAgYm9yZGVyLXJpZ2h0OiAwO1xuICB9XG5cbiAgLmJ1dHRvbiB7XG4gICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcbiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xuICB9XG5gO1xuXG5pbnRlcmZhY2UgU2hhcmluZ1VybFByb3BzIHtcbiAgdXJsOiBzdHJpbmc7XG4gIG1lc3NhZ2U/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBTaGFyaW5nVXJsOiBSZWFjdC5GQzxTaGFyaW5nVXJsUHJvcHM+ID0gKHt1cmwsIG1lc3NhZ2UgPSAnJ30pID0+IHtcbiAgY29uc3QgW2NvcGllZCwgc2V0Q29weV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIHJldHVybiAoXG4gICAgPFN0eWxlU2hhcmluZ1VybD5cbiAgICAgIDxTdHlsZWRJbnB1dExhYmVsPnttZXNzYWdlfTwvU3R5bGVkSW5wdXRMYWJlbD5cbiAgICAgIDxkaXYgc3R5bGU9e3tkaXNwbGF5OiAnZmxleCd9fT5cbiAgICAgICAgPElucHV0TGlnaHQgdHlwZT1cInRleHRcIiB2YWx1ZT17dXJsfSByZWFkT25seSAvPlxuICAgICAgICA8Q29weVRvQ2xpcGJvYXJkIHRleHQ9e3VybH0gb25Db3B5PXsoKSA9PiBzZXRDb3B5KHRydWUpfT5cbiAgICAgICAgICA8QnV0dG9uIHdpZHRoPVwiODBweFwiPntjb3BpZWQgPyAnQ29waWVkIScgOiAnQ29weSd9PC9CdXR0b24+XG4gICAgICAgIDwvQ29weVRvQ2xpcGJvYXJkPlxuICAgICAgPC9kaXY+XG4gICAgPC9TdHlsZVNoYXJpbmdVcmw+XG4gICk7XG59O1xuY29uc3Qgbm9wID0gKCkgPT4ge1xuICByZXR1cm47XG59O1xuXG5jb25zdCBTdHlsZWRTaGFyZU1hcE1vZGFsID0gc3R5bGVkKFN0eWxlZE1vZGFsQ29udGVudClgXG4gIHBhZGRpbmc6IDI0cHggNzJweCA0MHB4IDcycHg7XG4gIG1hcmdpbjogMCAtNzJweCAtNDBweCAtNzJweDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgbWluLWhlaWdodDogNTAwcHg7XG5gO1xuXG5jb25zdCBTdHlsZWRJbm5lckRpdiA9IHN0eWxlZC5kaXZgXG4gIGZsZXg6IDE7XG5gO1xuXG5jb25zdCBVTkRFUkxJTkVfVEVYVF9ERUNPUkFUSU9OX1NUWUxFID0ge3RleHREZWNvcmF0aW9uOiAndW5kZXJsaW5lJ307XG5cbmNvbnN0IFNoYXJlTWFwSGVhZGVyID0gKHtjbG91ZFByb3ZpZGVyc30pID0+IHtcbiAgY29uc3Qgc2hhcmVhYmxlQ2xvdWRQcm92aWRlcnMgPSB1c2VNZW1vKFxuICAgICgpID0+IGNsb3VkUHJvdmlkZXJzLmZpbHRlcihjcCA9PiBjcC5oYXNTaGFyaW5nVXJsKCkpLFxuICAgIFtjbG91ZFByb3ZpZGVyc11cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxTdHlsZWRFeHBvcnRTZWN0aW9uPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJkZXNjcmlwdGlvblwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRpdGxlXCI+XG4gICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9eydtb2RhbC5zaGFyZU1hcC50aXRsZSd9IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8UHJvdmlkZXJTZWxlY3QgY2xvdWRQcm92aWRlcnM9e3NoYXJlYWJsZUNsb3VkUHJvdmlkZXJzfSAvPlxuICAgIDwvU3R5bGVkRXhwb3J0U2VjdGlvbj5cbiAgKTtcbn07XG5cbmludGVyZmFjZSBTaGFyZU1hcFVybE1vZGFsRmFjdG9yeVByb3BzIHtcbiAgaXNQcm92aWRlckxvYWRpbmc/OiBib29sZWFuO1xuICBvbkV4cG9ydD86IChwcm92aWRlcjogUHJvdmlkZXIpID0+IHZvaWQ7XG4gIHByb3ZpZGVyRXJyb3I/OiBzdHJpbmc7XG4gIHN1Y2Nlc3NJbmZvPzoge3NoYXJlVXJsPzogc3RyaW5nOyBmb2xkZXJMaW5rPzogc3RyaW5nfTtcbiAgb25VcGRhdGVJbWFnZVNldHRpbmc6IEltYWdlTW9kYWxDb250YWluZXJQcm9wc1snb25VcGRhdGVJbWFnZVNldHRpbmcnXTtcbiAgY2xlYW51cEV4cG9ydEltYWdlOiB0eXBlb2YgY2xlYW51cEV4cG9ydEltYWdlQWN0aW9uO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTaGFyZU1hcFVybE1vZGFsRmFjdG9yeSgpIHtcbiAgY29uc3QgU2hhcmVNYXBVcmxNb2RhbDogUmVhY3QuRkM8U2hhcmVNYXBVcmxNb2RhbEZhY3RvcnlQcm9wcz4gPSAoe1xuICAgIGlzUHJvdmlkZXJMb2FkaW5nID0gZmFsc2UsXG4gICAgb25FeHBvcnQgPSBub3AsXG4gICAgcHJvdmlkZXJFcnJvciA9IG51bGwsXG4gICAgc3VjY2Vzc0luZm8gPSB7fSxcbiAgICBvblVwZGF0ZUltYWdlU2V0dGluZyA9IG5vcCxcbiAgICBjbGVhbnVwRXhwb3J0SW1hZ2VcbiAgfSkgPT4ge1xuICAgIGNvbnN0IHtwcm92aWRlciwgY2xvdWRQcm92aWRlcnN9ID0gdXNlQ2xvdWRMaXN0UHJvdmlkZXIoKTtcbiAgICBjb25zdCB7c2hhcmVVcmwsIGZvbGRlckxpbmt9ID0gc3VjY2Vzc0luZm87XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKHByb3ZpZGVyKSB7XG4gICAgICAgIG9uRXhwb3J0KHByb3ZpZGVyKTtcbiAgICAgIH1cbiAgICB9LCBbb25FeHBvcnQsIHByb3ZpZGVyXSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFRoZW1lUHJvdmlkZXIgdGhlbWU9e3RoZW1lTFR9PlxuICAgICAgICA8SW1hZ2VNb2RhbENvbnRhaW5lclxuICAgICAgICAgIHByb3ZpZGVyPXtwcm92aWRlcn1cbiAgICAgICAgICBvblVwZGF0ZUltYWdlU2V0dGluZz17b25VcGRhdGVJbWFnZVNldHRpbmd9XG4gICAgICAgICAgY2xlYW51cEV4cG9ydEltYWdlPXtjbGVhbnVwRXhwb3J0SW1hZ2V9XG4gICAgICAgID5cbiAgICAgICAgICA8U3R5bGVkU2hhcmVNYXBNb2RhbCBjbGFzc05hbWU9XCJleHBvcnQtY2xvdWQtbW9kYWxcIj5cbiAgICAgICAgICAgIDxTaGFyZU1hcEhlYWRlciBjbG91ZFByb3ZpZGVycz17Y2xvdWRQcm92aWRlcnN9IC8+XG4gICAgICAgICAgICB7cHJvdmlkZXI/Lmhhc1NoYXJpbmdVcmwoKSA/IChcbiAgICAgICAgICAgICAgPFN0eWxlZElubmVyRGl2IGRhdGEtdGVzdGlkPXtkYXRhVGVzdElkcy5wcm92aWRlclNoYXJlTWFwfT5cbiAgICAgICAgICAgICAgICA8U3R5bGVkRXhwb3J0U2VjdGlvbj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGVzY3JpcHRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPXsnbW9kYWwuc2hhcmVNYXAuc2hhcmVVcmlUaXRsZSd9IC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN1YnRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9eydtb2RhbC5zaGFyZU1hcC5zaGFyZVVyaVN1YnRpdGxlJ30gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2VsZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGl0bGUgd2FybmluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPXsnbW9kYWwuc2hhcmVNYXAuc2hhcmVEaXNjbGFpbWVyJ30gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L1N0eWxlZEV4cG9ydFNlY3Rpb24+XG4gICAgICAgICAgICAgICAgPFN0eWxlZEV4cG9ydFNlY3Rpb24gZGlzYWJsZWQ9e2lzUHJvdmlkZXJMb2FkaW5nfT5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGVzY3JpcHRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPXsnbW9kYWwuc2hhcmVNYXAuY2xvdWRUaXRsZSd9IC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN1YnRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9eydtb2RhbC5zaGFyZU1hcC5jbG91ZFN1YnRpdGxlJ30gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L1N0eWxlZEV4cG9ydFNlY3Rpb24+XG4gICAgICAgICAgICAgICAge2lzUHJvdmlkZXJMb2FkaW5nIHx8IHByb3ZpZGVyRXJyb3IgPyAoXG4gICAgICAgICAgICAgICAgICA8U3RhdHVzUGFuZWxcbiAgICAgICAgICAgICAgICAgICAgaXNMb2FkaW5nPXtpc1Byb3ZpZGVyTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgICAgZXJyb3I9e3Byb3ZpZGVyRXJyb3J9XG4gICAgICAgICAgICAgICAgICAgIHByb3ZpZGVySWNvbj17cHJvdmlkZXIuaWNvbn1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAge3NoYXJlVXJsICYmIChcbiAgICAgICAgICAgICAgICAgIDxTdHlsZWRFeHBvcnRTZWN0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0aXRsZVwiPlNoYXJlIFVybDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzZWxlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8U2hhcmluZ1VybCBrZXk9ezB9IHVybD17c2hhcmVVcmx9IC8+XG4gICAgICAgICAgICAgICAgICAgICAge3Byb3ZpZGVyICYmIGZvbGRlckxpbmsgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXsxfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPXtmb2xkZXJMaW5rfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e1VOREVSTElORV9URVhUX0RFQ09SQVRJT05fU1RZTEV9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtwcm92aWRlci5uYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9TdHlsZWRFeHBvcnRTZWN0aW9uPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvU3R5bGVkSW5uZXJEaXY+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIDxDbG91ZFN0b3JhZ2VEaXNjbGFpbWVyIC8+XG4gICAgICAgICAgPC9TdHlsZWRTaGFyZU1hcE1vZGFsPlxuICAgICAgICA8L0ltYWdlTW9kYWxDb250YWluZXI+XG4gICAgICA8L1RoZW1lUHJvdmlkZXI+XG4gICAgKTtcbiAgfTtcblxuICByZXR1cm4gU2hhcmVNYXBVcmxNb2RhbDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7QUFDQTs7QUFFQSxPQUFPQSxLQUFLLElBQUdDLFNBQVMsRUFBRUMsUUFBUSxFQUFFQyxPQUFPLFFBQU8sT0FBTztBQUN6RCxPQUFPQyxNQUFNLElBQUdDLGFBQWEsUUFBTyxtQkFBbUI7QUFDdkQsU0FBUUMsZUFBZSxRQUFPLHlCQUF5QjtBQUN2RCxTQUFRQyxPQUFPLFFBQU8sbUJBQW1CO0FBQ3pDLE9BQU9DLG1CQUFtQixNQUFrQyx5QkFBeUI7QUFFckYsU0FDRUMsa0JBQWtCLEVBQ2xCQyxtQkFBbUIsRUFDbkJDLFVBQVUsRUFDVkMsTUFBTSxRQUNELDZCQUE2QjtBQUNwQyxPQUFPQyxXQUFXLE1BQU0sZ0JBQWdCO0FBQ3hDLFNBQVFDLGdCQUFnQixRQUFPLHlCQUF5QjtBQUN4RCxTQUFRQyxvQkFBb0IsUUFBTyxrQ0FBa0M7QUFDckUsU0FBUUMsY0FBYyxRQUFPLG9DQUFvQztBQUNqRSxTQUFRQyxzQkFBc0IsUUFBTyw2Q0FBNkM7QUFHbEYsU0FBUUMsV0FBVyxRQUFPLHNCQUFzQjtBQUVoRCxPQUFPLElBQU1DLGdCQUFnQixHQUFHZixNQUFNLENBQUNnQixLQUFLLENBQUFDLGVBQUEsS0FBQUEsZUFBQSxHQUFBQyxzQkFBQSx5RUFFakMsVUFBQUMsS0FBSztFQUFBLE9BQUlBLEtBQUssQ0FBQ0MsS0FBSyxDQUFDQyxXQUFXO0FBQUEsRUFFMUM7QUFFRCxPQUFPLElBQU1DLGVBQWUsR0FBR3RCLE1BQU0sQ0FBQ3VCLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDO0VBQzlDQyxTQUFTLEVBQUU7QUFDYixDQUFDLENB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RUFBRWY7SUFBa0IsZ0JBQy9DckUsS0FBQSxDQUFBeUMsYUFBQTtNQUFLWixTQUFTLEVBQUM7SUFBYSxnQkFDMUI3QixLQUFBLENBQUF5QyxhQUFBO01BQUtaLFNBQVMsRUFBQztJQUFPLGdCQUNwQjdCLEtBQUEsQ0FBQXlDLGFBQUEsQ0FBQzNCLGdCQUFnQjtNQUFDa0QsRUFBRSxFQUFFO0lBQTRCLENBQUUsQ0FDakQsQ0FBQyxlQUNOaEUsS0FBQSxDQUFBeUMsYUFBQTtNQUFLWixTQUFTLEVBQUM7SUFBVSxnQkFDdkI3QixLQUFBLENBQUF5QyxhQUFBLENBQUMzQixnQkFBZ0I7TUFBQ2tELEVBQUUsRUFBRTtJQUErQixDQUFFLENBQ3BELENBQ0YsQ0FDYyxDQUFDLEVBQ3JCSyxpQkFBaUIsSUFBSUksYUFBYSxnQkFDakN6RSxLQUFBLENBQUF5QyxhQUFBLENBQUM1QixXQUFXO01BQ1Z3RSxTQUFTLEVBQUVoQixpQkFBa0I7TUFDN0JpQixLQUFLLEVBQUViLGFBQWM7TUFDckJjLFlBQVksRUFBRVAsUUFBUSxDQUFDUTtJQUFLLENBQzdCLENBQUMsR0FDQSxJQUFJLEVBQ1BQLFFBQVEsaUJBQ1BqRixLQUFBLENBQUF5QyxhQUFBLENBQUMvQixtQkFBbUIscUJBQ2xCVixLQUFBLENBQUF5QyxhQUFBO01BQUtaLFNBQVMsRUFBQztJQUFhLGdCQUMxQjdCLEtBQUEsQ0FBQXlDLGFBQUE7TUFBS1osU0FBUyxFQUFDO0lBQU8sR0FBQyxXQUFjLENBQ2xDLENBQUMsZUFDTjdCLEtBQUEsQ0FBQXlDLGFBQUE7TUFBS1osU0FBUyxFQUFDO0lBQVcsZ0JBQ3hCN0IsS0FBQSxDQUFBeUMsYUFBQSxDQUFDVixVQUFVO01BQUMwRCxHQUFHLEVBQUUsQ0FBRTtNQUFDeEQsR0FBRyxFQUFFZ0Q7SUFBUyxDQUFFLENBQUMsRUFDcENELFFBQVEsSUFBSUUsVUFBVSxpQkFDckJsRixLQUFBLENBQUF5QyxhQUFBO01BQ0VnRCxHQUFHLEVBQUUsQ0FBRTtNQUNQQyxJQUFJLEVBQUVSLFVBQVc7TUFDakJTLE1BQU0sRUFBQyxRQUFRO01BQ2ZDLEdBQUcsRUFBQyxxQkFBcUI7TUFDekJsRCxLQUFLLEVBQUVhO0lBQWdDLEdBRXRDeUIsUUFBUSxDQUFDYSxJQUNULENBRUYsQ0FDYyxDQUVULENBQUMsR0FDZixJQUFJLGVBQ1I3RixLQUFBLENBQUF5QyxhQUFBLENBQUN4QixzQkFBc0IsTUFBRSxDQUNOLENBQ0YsQ0FDUixDQUFDO0VBRXBCLENBQUM7RUFFRCxPQUFPaUQsZ0JBQWdCO0FBQ3pCIiwiaWdub3JlTGlzdCI6W119
@@ -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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJqZXN0IiwibW9jayIsImRyYXdTdGFyc0JhY2tncm91bmQiLCJmbiIsImNvbXBvc2l0ZVN3aXBlRnJhbWUiLCJtb2NrQ2FudmFzIiwid2lkdGgiLCJoZWlnaHQiLCJjdHgiLCJnZXRDb250ZXh0IiwibW9ja0NvbXBvc2l0ZUN0eCIsImNsZWFyUmVjdCIsImZpbGxSZWN0IiwiZHJhd0ltYWdlIiwic2F2ZSIsInJlc3RvcmUiLCJiZWdpblBhdGgiLCJyZWN0IiwiY2xpcCIsImZpbGxTdHlsZSIsInN0cm9rZVN0eWxlIiwibGluZVdpZHRoIiwic2hhZG93Q29sb3IiLCJzaGFkb3dCbHVyIiwibW92ZVRvIiwibGluZVRvIiwic3Ryb2tlIiwiYXJjIiwiZmlsbCIsImNsb3NlUGF0aCIsImRlc2NyaWJlIiwiYWZ0ZXJFYWNoIiwiY2xlYXJBbGxNb2NrcyIsInRlc3QiLCJsZWZ0IiwicmlnaHQiLCJvdXRwdXQiLCJleHBlY3QiLCJ0b0JlIiwidG9IYXZlQmVlbkNhbGxlZFdpdGgiLCJpbnZvY2F0aW9uQ2FsbE9yZGVyIiwidG9CZUxlc3NUaGFuIiwibm90IiwidG9IYXZlQmVlbkNhbGxlZCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tb2RhbHMvc3dpcGUtY29tcG9zaXRlLXV0aWxzLnNwZWMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuamVzdC5tb2NrKCdAa2VwbGVyLmdsL2RlY2tnbC1sYXllcnMnLCAoKSA9PiAoe1xuICBkcmF3U3RhcnNCYWNrZ3JvdW5kOiBqZXN0LmZuKClcbn0pKTtcblxuaW1wb3J0IHtkcmF3U3RhcnNCYWNrZ3JvdW5kfSBmcm9tICdAa2VwbGVyLmdsL2RlY2tnbC1sYXllcnMnO1xuaW1wb3J0IHtjb21wb3NpdGVTd2lwZUZyYW1lfSBmcm9tICcuL3N3aXBlLWNvbXBvc2l0ZS11dGlscyc7XG5cbmZ1bmN0aW9uIG1vY2tDYW52YXMod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwgbnVsbCkge1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICBnZXRDb250ZXh0OiAoKSA9PiBjdHhcbiAgfSBhcyB1bmtub3duIGFzIEhUTUxDYW52YXNFbGVtZW50O1xufVxuXG5mdW5jdGlvbiBtb2NrQ29tcG9zaXRlQ3R4KCkge1xuICByZXR1cm4ge1xuICAgIGNsZWFyUmVjdDogamVzdC5mbigpLFxuICAgIGZpbGxSZWN0OiBqZXN0LmZuKCksXG4gICAgZHJhd0ltYWdlOiBqZXN0LmZuKCksXG4gICAgc2F2ZTogamVzdC5mbigpLFxuICAgIHJlc3RvcmU6IGplc3QuZm4oKSxcbiAgICBiZWdpblBhdGg6IGplc3QuZm4oKSxcbiAgICByZWN0OiBqZXN0LmZuKCksXG4gICAgY2xpcDogamVzdC5mbigpLFxuICAgIGZpbGxTdHlsZTogJycsXG4gICAgc3Ryb2tlU3R5bGU6ICcnLFxuICAgIGxpbmVXaWR0aDogMCxcbiAgICBzaGFkb3dDb2xvcjogJycsXG4gICAgc2hhZG93Qmx1cjogMCxcbiAgICBtb3ZlVG86IGplc3QuZm4oKSxcbiAgICBsaW5lVG86IGplc3QuZm4oKSxcbiAgICBzdHJva2U6IGplc3QuZm4oKSxcbiAgICBhcmM6IGplc3QuZm4oKSxcbiAgICBmaWxsOiBqZXN0LmZuKCksXG4gICAgY2xvc2VQYXRoOiBqZXN0LmZuKClcbiAgfTtcbn1cblxuZGVzY3JpYmUoJ2NvbXBvc2l0ZVN3aXBlRnJhbWUnLCAoKSA9PiB7XG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgamVzdC5jbGVhckFsbE1vY2tzKCk7XG4gIH0pO1xuXG4gIHRlc3QoJ3RpbGVzIHN0YXJzIGFmdGVyIHRoZSBnbG9iZSBiYWNrZ3JvdW5kIGNvbG9yIHdoZW4gc2hvd1N0YXJzIGlzIHRydWUnLCAoKSA9PiB7XG4gICAgY29uc3QgY3R4ID0gbW9ja0NvbXBvc2l0ZUN0eCgpO1xuICAgIGNvbnN0IGxlZnQgPSBtb2NrQ2FudmFzKDEwLCAxMCwgY3R4IGFzIHVua25vd24gYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKTtcbiAgICBjb25zdCByaWdodCA9IG1vY2tDYW52YXMoMTAsIDEwLCBjdHggYXMgdW5rbm93biBhcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQpO1xuICAgIGNvbnN0IG91dHB1dCA9IG1vY2tDYW52YXMoMTAwLCA1MCwgY3R4IGFzIHVua25vd24gYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKTtcblxuICAgIGNvbXBvc2l0ZVN3aXBlRnJhbWUobGVmdCwgcmlnaHQsIG91dHB1dCwgNTAsIGZhbHNlLCAncmdiKDEsIDIsIDMpJywgdHJ1ZSk7XG5cbiAgICBleHBlY3QoY3R4LmZpbGxTdHlsZSkudG9CZSgncmdiKDEsIDIsIDMpJyk7XG4gICAgZXhwZWN0KGN0eC5maWxsUmVjdCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoMCwgMCwgMTAwLCA1MCk7XG4gICAgZXhwZWN0KGRyYXdTdGFyc0JhY2tncm91bmQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGN0eCwgMTAwLCA1MCk7XG4gICAgZXhwZWN0KGN0eC5maWxsUmVjdC5tb2NrLmludm9jYXRpb25DYWxsT3JkZXJbMF0pLnRvQmVMZXNzVGhhbihcbiAgICAgIChkcmF3U3RhcnNCYWNrZ3JvdW5kIGFzIGplc3QuTW9jaykubW9jay5pbnZvY2F0aW9uQ2FsbE9yZGVyWzBdXG4gICAgKTtcbiAgfSk7XG5cbiAgdGVzdCgnZG9lcyBub3QgZHJhdyBzdGFycyB3aGVuIHNob3dTdGFycyBpcyBvbWl0dGVkJywgKCkgPT4ge1xuICAgIGNvbnN0IGN0eCA9IG1vY2tDb21wb3NpdGVDdHgoKTtcbiAgICBjb25zdCBsZWZ0ID0gbW9ja0NhbnZhcygxMCwgMTAsIGN0eCBhcyB1bmtub3duIGFzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk7XG4gICAgY29uc3QgcmlnaHQgPSBtb2NrQ2FudmFzKDEwLCAxMCwgY3R4IGFzIHVua25vd24gYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKTtcbiAgICBjb25zdCBvdXRwdXQgPSBtb2NrQ2FudmFzKDEwMCwgNTAsIGN0eCBhcyB1bmtub3duIGFzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk7XG5cbiAgICBjb21wb3NpdGVTd2lwZUZyYW1lKGxlZnQsIHJpZ2h0LCBvdXRwdXQsIDUwLCBmYWxzZSwgJ3JnYigxLCAyLCAzKScpO1xuXG4gICAgZXhwZWN0KGRyYXdTdGFyc0JhY2tncm91bmQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7O0FBRUFBLElBQUksQ0FBQ0MsSUFBSSxDQUFDLDBCQUEwQixFQUFFO0VBQUEsT0FBTztJQUMzQ0MsbUJBQW1CLEVBQUVGLElBQUksQ0FBQ0csRUFBRSxDQUFDO0VBQy9CLENBQUM7QUFBQSxDQUFDLENBQUM7QUFFSCxTQUFRRCxtQkFBbUIsUUFBTywwQkFBMEI7QUFDNUQsU0FBUUUsbUJBQW1CLFFBQU8seUJBQXlCO0FBRTNELFNBQVNDLFVBQVVBLENBQUNDLEtBQWEsRUFBRUMsTUFBYyxFQUFFQyxHQUFvQyxFQUFFO0VBQ3ZGLE9BQU87SUFDTEYsS0FBSyxFQUFMQSxLQUFLO0lBQ0xDLE1BQU0sRUFBTkEsTUFBTTtJQUNORSxVQUFVLEVBQUUsU0FBWkEsVUFBVUEsQ0FBQTtNQUFBLE9BQVFELEdBQUc7SUFBQTtFQUN2QixDQUFDO0FBQ0g7QUFFQSxTQUFTRSxnQkFBZ0JBLENBQUEsRUFBRztFQUMxQixPQUFPO0lBQ0xDLFNBQVMsRUFBRVgsSUFBSSxDQUFDRyxFQUFFLENBQUMsQ0FBQztJQUNwQlMsUUFBUSxFQUFFWixJQUFJLENBQUNHLEVBQUUsQ0FBQyxDQUFDO0lBQ25CVSxTQUFTLEVBQUViLElBQUksQ0FBQ0csRUFBRSxDQUFDLENBQUM7SUFDcEJXLElBQUksRUFBRWQsSUFBSSxDQUFDRyxFQUFFLENBQUMsQ0FBQztJQUNmWSxP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
@@ -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 'es-toolkit/compat/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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIkNvbXBvbmVudCIsImZvcndhcmRSZWYiLCJEZWNrR0wiLCJSZWFjdE1hcEdMIiwidXNlQ29udHJvbCIsIk1hcGJveE92ZXJsYXkiLCJpc0VxdWFsIiwic3R5bGVkIiwiY3JlYXRlS2VwbGVyTGF5ZXJzIiwiY29tcG9zaXRlU3dpcGVGcmFtZSIsImdldFN3aXBlUGVyY2VudGFnZUF0VGltZSIsIkVYUE9SVF9ERUNLX0RFVklDRV9QUk9QUyIsIkVYUE9SVF9PVkVSTEFZX0RFVklDRV9QUk9QUyIsImdldEdsb2JlRXhwb3J0TGF5ZXJzIiwic2V0UmVmIiwicmVmIiwidmFsdWUiLCJjdXJyZW50IiwiRGVja0dMT3ZlcmxheSIsInByb3BzIiwib3ZlcmxheSIsIl9vYmplY3RTcHJlYWQiLCJpbnRlcmxlYXZlZCIsInNldFByb3BzIiwiX2RlY2siLCJkaXNwbGF5TmFtZSIsIlByZXZpZXdDb250YWluZXIiLCJkaXYiLCJfdGVtcGxhdGVPYmplY3QiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsIiwiJHdpZHRoIiwiJGhlaWdodCIsIlZpc2libGVDYW52YXMiLCJjYW52YXMiLCJfdGVtcGxhdGVPYmplY3QyIiwiTWFwTGF5ZXIiLCJfdGVtcGxhdGVPYmplY3QzIiwiU3dpcGVFeHBvcnRWaWRlb1ByZXZpZXciLCJfQ29tcG9uZW50IiwiX3RoaXMiLCJfY2xhc3NDYWxsQ2hlY2siLCJfY2FsbFN1cGVyIiwiX2RlZmluZVByb3BlcnR5IiwiY3JlYXRlUmVmIiwicHJvY2VlZFRvTmV4dEZyYW1lIiwibGVmdExvYWRlZCIsIl9hcmVMYXllcnNMb2FkZWQiLCJyaWdodExvYWRlZCIsImxlZnRUaWxlc1JlYWR5IiwiZGlzYWJsZUJhc2VNYXAiLCJsZWZ0TWFwUmVmIiwiZ2V0TWFwIiwiYXJlVGlsZXNMb2FkZWQiLCJyaWdodFRpbGVzUmVhZHkiLCJyaWdodE1hcFJlZiIsIl9jb21wb3NpdGVGcmFtZSIsIl90aGlzJGxlZnRNYXBSZWYkY3VyciIsIm1hcCIsIm9uIiwic3RhdGUiLCJsZWZ0UmVhZHkiLCJzZXRTdGF0ZSIsIl90cnlDb21wb3NpdGUiLCJfdGhpcyRyaWdodE1hcFJlZiRjdXIiLCJyaWdodFJlYWR5Iiwic2lkZSIsInJlYWR5S2V5IiwibGVmdERlY2tSZWYiLCJyaWdodERlY2tSZWYiLCJfcmVzaXplVmlkZW8iLCJfaW5oZXJpdHMiLCJfY3JlYXRlQ2xhc3MiLCJrZXkiLCJjb21wb25lbnREaWRVcGRhdGUiLCJwcmV2UHJvcHMiLCJyZXNvbHV0aW9uIiwiY3VycmVudFRpbWVNcyIsInN3aXBlU3RhcnRQY3QiLCJzd2lwZUVuZFBjdCIsInN3aXBlRWFzaW5nIiwiX3RoaXMkcHJvcHMiLCJleHBvcnRWaWRlb1dpZHRoIiwiX3NldERldmljZVBpeGVsUmF0aW8iLCJkZXZpY2VQaXhlbFJhdGlvIiwid2luZG93IiwiX2dldENvbnRhaW5lciIsIl90aGlzJHByb3BzMiIsImFzcGVjdFJhdGlvIiwiaGVpZ2h0Iiwid2lkdGgiLCJfZ2V0Q3VycmVudFN3aXBlUGVyY2VudGFnZSIsIl90aGlzJHByb3BzMyIsImR1cmF0aW9uTXMiLCJfZ2V0TGVmdENhbnZhcyIsImdldENhbnZhcyIsIl9nZXRDYW52YXMiLCJfcmVmIiwiY2FsbCIsIl9nZXRSaWdodENhbnZhcyIsIl9nZXRDYW52YXMyIiwiX3JlZjIiLCJfdGhpcyRwcm9wcyRtYXBEYXRhIiwiX2dsb2JlJGNvbmZpZyIsImxlZnRDYW52YXMiLCJyaWdodENhbnZhcyIsIm91dHB1dENhbnZhcyIsImNvbXBvc2l0ZUNhbnZhc1JlZiIsInBlcmNlbnRhZ2UiLCJnbG9iZSIsIm1hcERhdGEiLCJtYXBTdGF0ZSIsInNob3dTdGFycyIsIkJvb2xlYW4iLCJlbmFibGVkIiwiY29uZmlnIiwic3RhcnMiLCJiYWNrZ3JvdW5kQ29sb3IiLCJkZWNrUmVmIiwibGF5ZXJzIiwiZXZlcnkiLCJsYXllciIsImlzTG9hZGVkIiwiZ2V0Q29tcG9zaXRlQ2FudmFzIiwiX2NyZWF0ZUxheWVycyIsIm1hcEluZGV4IiwiYmVmb3JlSWQiLCJfbWFwRGF0YSRtYXBTdGF0ZSIsIl90aGlzJHByb3BzNCIsImRlY2tQcm9wcyIsInZpZXdTdGF0ZSIsIm1hcFByb3BzIiwibWFwYm94QXBpQWNjZXNzVG9rZW4iLCJtYXBib3hBcGlVcmwiLCJjbG9uZSIsImlkIiwiY29uY2F0IiwiX3JlbmRlck1hcENhbnZhcyIsIl90aGlzMiIsIl90aGlzJHByb3BzNSIsImFkYXB0ZXIiLCJtYXBib3hMYXllckJlZm9yZUlkIiwiX3RoaXMkX2dldENvbnRhaW5lciIsImtlcGxlckxheWVycyIsIm1hcFJlZiIsIm9uTWFwTG9hZCIsIl9vbkxlZnRNYXBMb2FkIiwiX29uUmlnaHRNYXBMb2FkIiwiZGVjayIsImFkYXB0ZXJQcm9wcyIsImdldFByb3BzIiwiZXh0cmFQcm9wcyIsImFkYXB0ZXJPbkFmdGVyUmVuZGVyIiwib25BZnRlclJlbmRlciIsImNyZWF0ZUVsZW1lbnQiLCJfZXh0ZW5kcyIsImRldmljZVByb3BzIiwib25WaWV3U3RhdGVDaGFuZ2UiLCJfcmVmMyIsInZzIiwic2V0Vmlld1N0YXRlIiwicGFyYW1zIiwiX29uRGVja1JlbmRlciIsIl9yZWY1IiwibWFwU3R5bGVGcm9tUHJvcHMiLCJtYXBTdHlsZSIsIm1hcExpYiIsInRyYW5zZm9ybVJlcXVlc3QiLCJzdHlsZSIsImFudGlhbGlhcyIsInByZXNlcnZlRHJhd2luZ0J1ZmZlciIsIm9uTG9hZCIsInJlbmRlciIsIl90aGlzJF9nZXRDb250YWluZXIyIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21vZGFscy9zd2lwZS1leHBvcnQtdmlkZW8tcHJldmlldy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50LCBSZWZPYmplY3QsIGZvcndhcmRSZWYsIEZvcndhcmRlZFJlZn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IERlY2tHTCBmcm9tICdAZGVjay5nbC9yZWFjdCc7XG5pbXBvcnQgUmVhY3RNYXBHTCwge3R5cGUgTWFwUmVmLCB1c2VDb250cm9sfSBmcm9tICdyZWFjdC1tYXAtZ2wvbWFwbGlicmUnO1xuLy8gQHRzLWlnbm9yZSBtb2R1bGUgcmVzb2x1dGlvbiBtaXNtYXRjaCB3aXRoIG1vZHVsZVJlc29sdXRpb246XCJub2RlXCJcbmltcG9ydCB7TWFwYm94T3ZlcmxheX0gZnJvbSAnQGRlY2suZ2wvbWFwYm94JztcbmltcG9ydCB0eXBlIHtEZWNrLCBEZWNrUHJvcHMsIE1hcFZpZXdTdGF0ZX0gZnJvbSAnQGRlY2suZ2wvY29yZSc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9pc0VxdWFsJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuXG5pbXBvcnQge0RlY2tBZGFwdGVyfSBmcm9tICdAaHViYmxlLmdsL2NvcmUnO1xuaW1wb3J0IHtjcmVhdGVLZXBsZXJMYXllcnN9IGZyb20gJ0BodWJibGUuZ2wvcmVhY3QnO1xuaW1wb3J0IHtjb21wb3NpdGVTd2lwZUZyYW1lLCBnZXRTd2lwZVBlcmNlbnRhZ2VBdFRpbWUsIFN3aXBlRWFzaW5nfSBmcm9tICcuL3N3aXBlLWNvbXBvc2l0ZS11dGlscyc7XG5pbXBvcnQge1xuICBFWFBPUlRfREVDS19ERVZJQ0VfUFJPUFMsXG4gIEVYUE9SVF9PVkVSTEFZX0RFVklDRV9QUk9QUyxcbiAgZ2V0R2xvYmVFeHBvcnRMYXllcnNcbn0gZnJvbSAnLi9odWJibGUtdXRpbHMnO1xuXG5mdW5jdGlvbiBzZXRSZWY8VD4ocmVmOiBSZWFjdC5SZWY8VD4gfCBSZWFjdC5NdXRhYmxlUmVmT2JqZWN0PFQ+LCB2YWx1ZTogVCkge1xuICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJlZih2YWx1ZSk7XG4gIH0gZWxzZSBpZiAocmVmKSB7XG4gICAgKHJlZiBhcyBSZWFjdC5NdXRhYmxlUmVmT2JqZWN0PFQ+KS5jdXJyZW50ID0gdmFsdWU7XG4gIH1cbn1cblxuY29uc3QgRGVja0dMT3ZlcmxheSA9IGZvcndhcmRSZWY8RGVjaywgYW55PihcbiAgKHByb3BzOiBhbnksIHJlZjogRm9yd2FyZGVkUmVmPERlY2s+KSA9PiB7XG4gICAgY29uc3Qgb3ZlcmxheSA9IHVzZUNvbnRyb2w8TWFwYm94T3ZlcmxheT4oKCkgPT4gbmV3IE1hcGJveE92ZXJsYXkoey4uLnByb3BzLCBpbnRlcmxlYXZlZDogdHJ1ZX0pKTtcbiAgICBvdmVybGF5LnNldFByb3BzKHByb3BzKTtcbiAgICBzZXRSZWYocmVmLCAob3ZlcmxheSBhcyBhbnkpLl9kZWNrKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuKTtcbkRlY2tHTE92ZXJsYXkuZGlzcGxheU5hbWUgPSAnRGVja0dMT3ZlcmxheSc7XG5cbmNvbnN0IFByZXZpZXdDb250YWluZXIgPSBzdHlsZWQuZGl2PHskd2lkdGg6IG51bWJlcjsgJGhlaWdodDogbnVtYmVyfT5gXG4gIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLiR3aWR0aH1weDtcbiAgaGVpZ2h0OiAke3Byb3BzID0+IHByb3BzLiRoZWlnaHR9cHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbmA7XG5cbmNvbnN0IFZpc2libGVDYW52YXMgPSBzdHlsZWQuY2FudmFzPHskd2lkdGg6IG51bWJlcjsgJGhlaWdodDogbnVtYmVyfT5gXG4gIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLiR3aWR0aH1weDtcbiAgaGVpZ2h0OiAke3Byb3BzID0+IHByb3BzLiRoZWlnaHR9cHg7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG5gO1xuXG5jb25zdCBNYXBMYXllciA9IHN0eWxlZC5kaXY8eyR3aWR0aDogbnVtYmVyOyAkaGVpZ2h0OiBudW1iZXJ9PmBcbiAgd2lkdGg6ICR7cHJvcHMgPT4gcHJvcHMuJHdpZHRofXB4O1xuICBoZWlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMuJGhlaWdodH1weDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIG9wYWNpdHk6IDA7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB6LWluZGV4OiAwO1xuYDtcblxuZXhwb3J0IHR5cGUgU3dpcGVFeHBvcnRWaWRlb1ByZXZpZXdQcm9wcyA9IHtcbiAgbWFwRGF0YTogYW55O1xuICByZXNvbHV0aW9uOiBbbnVtYmVyLCBudW1iZXJdO1xuICBleHBvcnRWaWRlb1dpZHRoOiBudW1iZXI7XG4gIGRpc2FibGVCYXNlTWFwOiBib29sZWFuO1xuICBkZWNrUHJvcHM/OiBEZWNrUHJvcHM7XG4gIHZpZXdTdGF0ZTogTWFwVmlld1N0YXRlO1xuICBhZGFwdGVyOiBEZWNrQWRhcHRlcjtcbiAgbWFwYm94TGF5ZXJCZWZvcmVJZD86IHN0cmluZztcbiAgcmVuZGVyaW5nOiBib29sZWFuO1xuICBzYXZpbmc6IGJvb2xlYW47XG4gIHNldFZpZXdTdGF0ZTogKHZpZXdTdGF0ZTogTWFwVmlld1N0YXRlKSA9PiB2b2lkO1xuICBkdXJhdGlvbk1zOiBudW1iZXI7XG4gIG1hcFByb3BzPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgc3dpcGVTdGFydFBjdDogbnVtYmVyO1xuICBzd2lwZUVuZFBjdDogbnVtYmVyO1xuICBzd2lwZUVhc2luZzogU3dpcGVFYXNpbmc7XG4gIGN1cnJlbnRUaW1lTXM6IG51bWJlcjtcbiAgYmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xufTtcblxudHlwZSBTd2lwZUV4cG9ydFZpZGVvUHJldmlld1N0YXRlID0ge1xuICBsZWZ0UmVhZHk6IGJvb2xlYW47XG4gIHJpZ2h0UmVhZHk6IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIEEgZHVhbC1jYW52YXMgdmlkZW8gZXhwb3J0IHByZXZpZXcgdGhhdCByZW5kZXJzIGxlZnQvcmlnaHQgc3BsaXQgbWFwIGxheWVyc1xuICogYW5kIGNvbXBvc2l0ZXMgdGhlbSB3aXRoIGFuIGFuaW1hdGVkIHN3aXBlIGRpdmlkZXIuXG4gKi9cbmV4cG9ydCBjbGFzcyBTd2lwZUV4cG9ydFZpZGVvUHJldmlldyBleHRlbmRzIENvbXBvbmVudDxcbiAgU3dpcGVFeHBvcnRWaWRlb1ByZXZpZXdQcm9wcyxcbiAgU3dpcGVFeHBvcnRWaWRlb1ByZXZpZXdTdGF0ZVxuPiB7XG4gIGxlZnRNYXBSZWY6IFJlZk9iamVjdDxNYXBSZWYgfCBudWxsPiA9IFJlYWN0LmNyZWF0ZVJlZjxNYXBSZWYgfCBudWxsPigpO1xuICByaWdodE1hcFJlZjogUmVmT2JqZWN0PE1hcFJlZiB8IG51bGw+ID0gUmVhY3QuY3JlYXRlUmVmPE1hcFJlZiB8IG51bGw+KCk7XG4gIGxlZnREZWNrUmVmOiBSZWZPYmplY3Q8RGVjayB8IG51bGw+ID0gUmVhY3QuY3JlYXRlUmVmPERlY2sgfCBudWxsPigpO1xuICByaWdodERlY2tSZWY6IFJlZk9iamVjdDxEZWNrIHwgbnVsbD4gPSBSZWFjdC5jcmVhdGVSZWY8RGVjayB8IG51bGw+KCk7XG4gIGNvbXBvc2l0ZUNhbnZhc1JlZjogUmVmT2JqZWN0PEhUTUxDYW52YXNFbGVtZW50IHwgbnVsbD4gPSBSZWFjdC5jcmVhdGVSZWY8SFRNTENhbnZhc0VsZW1lbnQgfCBudWxsPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBTd2lwZUV4cG9ydFZpZGVvUHJldmlld1Byb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGxlZnRSZWFkeTogZmFsc2UsXG4gICAgICByaWdodFJlYWR5OiBmYWxzZVxuICAgIH07XG5cbiAgICB0aGlzLl9yZXNpemVWaWRlbygpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogU3dpcGVFeHBvcnRWaWRlb1ByZXZpZXdQcm9wcykge1xuICAgIGlmICghaXNFcXVhbChwcmV2UHJvcHMucmVzb2x1dGlvbiwgdGhpcy5wcm9wcy5yZXNvbHV0aW9uKSkge1xuICAgICAgdGhpcy5fcmVzaXplVmlkZW8oKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBwcmV2UHJvcHMuY3VycmVudFRpbWVNcyAhPT0gdGhpcy5wcm9wcy5jdXJyZW50VGltZU1zIHx8XG4gICAgICBwcmV2UHJvcHMuc3dpcGVTdGFydFBjdCAhPT0gdGhpcy5wcm9wcy5zd2lwZVN0YXJ0UGN0IHx8XG4gICAgICBwcmV2UHJvcHMuc3dpcGVFbmRQY3QgIT09IHRoaXMucHJvcHMuc3dpcGVFbmRQY3QgfHxcbiAgICAgIHByZXZQcm9wcy5zd2lwZUVhc2luZyAhPT0gdGhpcy5wcm9wcy5zd2lwZUVhc2luZ1xuICAgICkge1xuICAgICAgdGhpcy5fY29tcG9zaXRlRnJhbWUoKTtcbiAgICB9XG4gIH1cblxuICBfcmVzaXplVmlkZW8oKSB7XG4gICAgY29uc3Qge2V4cG9ydFZpZGVvV2lkdGgsIHJlc29sdXRpb259ID0gdGhpcy5wcm9wcztcbiAgICB0aGlzLl9zZXREZXZpY2VQaXhlbFJhdGlvKHJlc29sdXRpb25bMF0gLyBleHBvcnRWaWRlb1dpZHRoKTtcbiAgfVxuXG4gIF9zZXREZXZpY2VQaXhlbFJhdGlvKGRldmljZVBpeGVsUmF0aW86IG51bWJlcikge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA9IGRldmljZVBpeGVsUmF0aW87XG4gIH1cblxuICBfZ2V0Q29udGFpbmVyKCkge1xuICAgIGNvbnN0IHtleHBvcnRWaWRlb1dpZHRoLCByZXNvbHV0aW9ufSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgYXNwZWN0UmF0aW8gPSByZXNvbHV0aW9uWzBdIC8gcmVzb2x1dGlvblsxXTtcbiAgICByZXR1cm4ge2hlaWdodDogZXhwb3J0VmlkZW9XaWR0aCAvIGFzcGVjdFJhdGlvLCB3aWR0aDogZXhwb3J0VmlkZW9XaWR0aH07XG4gIH1cblxuICBfZ2V0Q3VycmVudFN3aXBlUGVyY2VudGFnZSgpOiBudW1iZXIge1xuICAgIGNvbnN0IHtjdXJyZW50VGltZU1zLCBkdXJhdGlvbk1zLCBzd2lwZVN0YXJ0UGN0LCBzd2lwZUVuZFBjdCwgc3dpcGVFYXNpbmd9ID0gdGhpcy5wcm9wcztcbiAgICByZXR1cm4gZ2V0U3dpcGVQZXJjZW50YWdlQXRUaW1lKGN1cnJlbnRUaW1lTXMsIGR1cmF0aW9uTXMsIHN3aXBlU3RhcnRQY3QsIHN3aXBlRW5kUGN0LCBzd2lwZUVhc2luZyk7XG4gIH1cblxuICBfZ2V0TGVmdENhbnZhcygpOiBIVE1MQ2FudmFzRWxlbWVudCB8IG51bGwge1xuICAgIGlmICh0aGlzLmxlZnRNYXBSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuIHRoaXMubGVmdE1hcFJlZi5jdXJyZW50LmdldE1hcCgpLmdldENhbnZhcygpO1xuICAgIH1cbiAgICAvLyBGYWxsYmFjazogRGVja0dMIGNhbnZhcyAobm8gYmFzZW1hcCBtb2RlKVxuICAgIGlmICh0aGlzLmxlZnREZWNrUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybiAodGhpcy5sZWZ0RGVja1JlZi5jdXJyZW50IGFzIGFueSkuZ2V0Q2FudmFzPy4oKSB8fCBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIF9nZXRSaWdodENhbnZhcygpOiBIVE1MQ2FudmFzRWxlbWVudCB8IG51bGwge1xuICAgIGlmICh0aGlzLnJpZ2h0TWFwUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLnJpZ2h0TWFwUmVmLmN1cnJlbnQuZ2V0TWFwKCkuZ2V0Q2FudmFzKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnJpZ2h0RGVja1JlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm4gKHRoaXMucmlnaHREZWNrUmVmLmN1cnJlbnQgYXMgYW55KS5nZXRDYW52YXM/LigpIHx8IG51bGw7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgX2NvbXBvc2l0ZUZyYW1lKCkge1xuICAgIGNvbnN0IGxlZnRDYW52YXMgPSB0aGlzLl9nZXRMZWZ0Q2FudmFzKCk7XG4gICAgY29uc3QgcmlnaHRDYW52YXMgPSB0aGlzLl9nZXRSaWdodENhbnZhcygpO1xuICAgIGNvbnN0IG91dHB1dENhbnZhcyA9IHRoaXMuY29tcG9zaXRlQ2FudmFzUmVmLmN1cnJlbnQ7XG5cbiAgICBpZiAoIWxlZnRDYW52YXMgfHwgIXJpZ2h0Q2FudmFzIHx8ICFvdXRwdXRDYW52YXMpIHJldHVybjtcblxuICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSB0aGlzLl9nZXRDdXJyZW50U3dpcGVQZXJjZW50YWdlKCk7XG4gICAgY29uc3QgZ2xvYmUgPSB0aGlzLnByb3BzLm1hcERhdGE/Lm1hcFN0YXRlPy5nbG9iZTtcbiAgICBjb25zdCBzaG93U3RhcnMgPSBCb29sZWFuKGdsb2JlPy5lbmFibGVkICYmIGdsb2JlPy5jb25maWc/LnN0YXJzKTtcblxuICAgIGNvbXBvc2l0ZVN3aXBlRnJhbWUoXG4gICAgICBsZWZ0Q2FudmFzLFxuICAgICAgcmlnaHRDYW52YXMsXG4gICAgICBvdXRwdXRDYW52YXMsXG4gICAgICBwZXJjZW50YWdlLFxuICAgICAgdHJ1ZSxcbiAgICAgIHRoaXMucHJvcHMuYmFja2dyb3VuZENvbG9yLFxuICAgICAgc2hvd1N0YXJzXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYnkgdGhlIHBhcmVudCBjb250YWluZXIncyBhZGFwdGVyIGFmdGVyIGVhY2ggcmVuZGVyLlxuICAgKiBXZSBuZWVkIGJvdGggbWFwcyB0byBiZSBsb2FkZWQgYmVmb3JlIGNvbXBvc2l0aW5nIGFuZCBjYXB0dXJpbmcuXG4gICAqL1xuICBvbkFmdGVyUmVuZGVyID0gKHByb2NlZWRUb05leHRGcmFtZTogKCkgPT4gdm9pZCkgPT4ge1xuICAgIGNvbnN0IGxlZnRMb2FkZWQgPSB0aGlzLl9hcmVMYXllcnNMb2FkZWQoJ2xlZnQnKTtcbiAgICBjb25zdCByaWdodExvYWRlZCA9IHRoaXMuX2FyZUxheWVyc0xvYWRlZCgncmlnaHQnKTtcbiAgICBjb25zdCBsZWZ0VGlsZXNSZWFkeSA9XG4gICAgICB0aGlzLnByb3BzLmRpc2FibGVCYXNlTWFwIHx8ICF0aGlzLmxlZnRNYXBSZWYuY3VycmVudCB8fCB0aGlzLmxlZnRNYXBSZWYuY3VycmVudC5nZXRNYXAoKS5hcmVUaWxlc0xvYWRlZCgpO1xuICAgIGNvbnN0IHJpZ2h0VGlsZXNSZWFkeSA9XG4gICAgICB0aGlzLnByb3BzLmRpc2FibGVCYXNlTWFwIHx8ICF0aGlzLnJpZ2h0TWFwUmVmLmN1cnJlbnQgfHwgdGhpcy5yaWdodE1hcFJlZi5jdXJyZW50LmdldE1hcCgpLmFyZVRpbGVzTG9hZGVkKCk7XG5cbiAgICBpZiAobGVmdExvYWRlZCAmJiByaWdodExvYWRlZCAmJiBsZWZ0VGlsZXNSZWFkeSAmJiByaWdodFRpbGVzUmVhZHkpIHtcbiAgICAgIHRoaXMuX2NvbXBvc2l0ZUZyYW1lKCk7XG4gICAgICBwcm9jZWVkVG9OZXh0RnJhbWUoKTtcbiAgICB9XG4gIH07XG5cbiAgX2FyZUxheWVyc0xvYWRlZChzaWRlOiAnbGVmdCcgfCAncmlnaHQnKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZGVja1JlZiA9IHNpZGUgPT09ICdsZWZ0JyA/IHRoaXMubGVmdERlY2tSZWYgOiB0aGlzLnJpZ2h0RGVja1JlZjtcbiAgICBpZiAoIWRlY2tSZWYuY3VycmVudCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGxheWVycyA9IGRlY2tSZWYuY3VycmVudC5wcm9wcy5sYXllcnMgfHwgW107XG4gICAgcmV0dXJuIGxheWVycy5ldmVyeSgobGF5ZXI6IGFueSkgPT4gbGF5ZXIuaXNMb2FkZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY29tcG9zaXRlZCBjYW52YXMgZWxlbWVudCBmb3IgdmlkZW8gY2FwdHVyZS5cbiAgICovXG4gIGdldENvbXBvc2l0ZUNhbnZhcygpOiBIVE1MQ2FudmFzRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmNvbXBvc2l0ZUNhbnZhc1JlZi5jdXJyZW50O1xuICB9XG5cbiAgX2NyZWF0ZUxheWVycyhtYXBJbmRleDogbnVtYmVyLCBiZWZvcmVJZD86IHN0cmluZykge1xuICAgIGNvbnN0IHtkZWNrUHJvcHMsIG1hcERhdGEsIHZpZXdTdGF0ZSwgZGlzYWJsZUJhc2VNYXAsIG1hcFByb3BzfSA9IHRoaXMucHJvcHM7XG5cbiAgICAvLyBHbG9iZSBzd2lwZTogYnVpbGQgYSBmcmVzaCBzZXQgb2YgZ2xvYmUgbGF5ZXJzIHBlciBzaWRlLiBFYWNoIHNpZGUgaXMgYVxuICAgIC8vIHNlcGFyYXRlIERlY2ssIHNvIGl0IG5lZWRzIGl0cyBPV04gTGF5ZXIgaW5zdGFuY2VzIChkZWNrLmdsIExheWVyIG9iamVjdHNcbiAgICAvLyBhcmUgc3RhdGVmdWwgYW5kIGJvdW5kIHRvIG9uZSBEZWNrIOKAlCBzaGFyaW5nIHRoZW0gbWFrZXMgdGhlIHNlY29uZCBEZWNrXG4gICAgLy8gYXNzZXJ0IHdoaWxlIGluaXRpYWxpemluZyB0aGVtKS4gQnVpbGRpbmcgcGVyIGBtYXBJbmRleGAgYWxzbyByZXNwZWN0cyB0aGVcbiAgICAvLyBzcGxpdC1tYXAgbGF5ZXIgdmlzaWJpbGl0eSBvbiBlYWNoIGhhbGYgb2YgdGhlIHN3aXBlLlxuICAgIGlmIChkaXNhYmxlQmFzZU1hcCAmJiBtYXBEYXRhPy5tYXBTdGF0ZT8uZ2xvYmU/LmVuYWJsZWQpIHtcbiAgICAgIHJldHVybiBnZXRHbG9iZUV4cG9ydExheWVycyhtYXBEYXRhLCB7XG4gICAgICAgIG1hcEluZGV4LFxuICAgICAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbjogbWFwUHJvcHM/Lm1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICAgICAgICBtYXBib3hBcGlVcmw6IG1hcFByb3BzPy5tYXBib3hBcGlVcmwsXG4gICAgICAgIHZpZXdTdGF0ZVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGRlY2tQcm9wcyAmJiBkZWNrUHJvcHMubGF5ZXJzKSB7XG4gICAgICAvLyBOb24tZ2xvYmUgcGF0aCB3aXRoIGV4cGxpY2l0IGxheWVyczogY2xvbmUgcGVyIHNpZGUgd2l0aCBhIHVuaXF1ZSBpZCBzb1xuICAgICAgLy8gdGhlIHR3byBEZWNrIGluc3RhbmNlcyBkb24ndCBzaGFyZSB0aGUgc2FtZSBzdGF0ZWZ1bCBMYXllciBvYmplY3RzLlxuICAgICAgcmV0dXJuIGRlY2tQcm9wcy5sYXllcnMubWFwKChsYXllcjogYW55KSA9PlxuICAgICAgICBsYXllciAmJiB0eXBlb2YgbGF5ZXIuY2xvbmUgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICA/IGxheWVyLmNsb25lKHtpZDogYCR7bGF5ZXIuaWR9LXN3aXBlLSR7bWFwSW5kZXh9YH0pXG4gICAgICAgICAgOiBsYXllclxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUtlcGxlckxheWVycyhtYXBEYXRhLCB2aWV3U3RhdGUsIG1hcEluZGV4LCBiZWZvcmVJZCk7XG4gIH1cblxuICBfb25MZWZ0TWFwTG9hZCA9ICgpID0+IHtcbiAgICBjb25zdCBtYXAgPSB0aGlzLmxlZnRNYXBSZWYuY3VycmVudD8uZ2V0TWFwKCk7XG4gICAgaWYgKG1hcCkge1xuICAgICAgbWFwLm9uKCdyZW5kZXInLCAoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5zdGF0ZS5sZWZ0UmVhZHkpIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtsZWZ0UmVhZHk6IHRydWV9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl90cnlDb21wb3NpdGUoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfb25SaWdodE1hcExvYWQgPSAoKSA9PiB7XG4gICAgY29uc3QgbWFwID0gdGhpcy5yaWdodE1hcFJlZi5jdXJyZW50Py5nZXRNYXAoKTtcbiAgICBpZiAobWFwKSB7XG4gICAgICBtYXAub24oJ3JlbmRlcicsICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlLnJpZ2h0UmVhZHkpIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtyaWdodFJlYWR5OiB0cnVlfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdHJ5Q29tcG9zaXRlKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3RyeUNvbXBvc2l0ZSgpIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5sZWZ0UmVhZHkgJiYgdGhpcy5zdGF0ZS5yaWdodFJlYWR5KSB7XG4gICAgICB0aGlzLl9jb21wb3NpdGVGcmFtZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEdsb2JlIChkaXNhYmxlQmFzZU1hcCkgbW9kZSBoYXMgbm8gUmVhY3RNYXBHTCBhbmQgdGhlcmVmb3JlIG5vIG1hcCAncmVuZGVyJ1xuICAvLyBldmVudCB0byBkcml2ZSBjb21wb3NpdGluZy4gSW5zdGVhZCBlYWNoIGJhcmUgPERlY2tHTD4gcmVwb3J0cyB3aGVuIGl0IGhhc1xuICAvLyBkcmF3biB2aWEgb25BZnRlclJlbmRlcjsgb25jZSBib3RoIHNpZGVzIGhhdmUgcmVuZGVyZWQgd2UgY29tcG9zaXRlLiBXaXRob3V0XG4gIC8vIHRoaXMgdGhlIGNvbXBvc2l0ZSBvdXRwdXQgY2FudmFzIGlzIG5ldmVyIHBhaW50ZWQgdW50aWwgdGhlIHVzZXIgcHJlc3Nlc1xuICAvLyBwbGF5LCBzbyB0aGUgcHJldmlldyBzaG93cyBhIGJsYW5rICh3aGl0ZSkgZnJhbWUgb24gbW91bnQuXG4gIF9vbkRlY2tSZW5kZXIgPSAoc2lkZTogJ2xlZnQnIHwgJ3JpZ2h0JykgPT4ge1xuICAgIGNvbnN0IHJlYWR5S2V5ID0gc2lkZSA9PT0gJ2xlZnQnID8gJ2xlZnRSZWFkeScgOiAncmlnaHRSZWFkeSc7XG4gICAgaWYgKCF0aGlzLnN0YXRlW3JlYWR5S2V5XSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7W3JlYWR5S2V5XTogdHJ1ZX0gYXMgYW55KTtcbiAgICB9XG4gICAgLy8gQ29tcG9zaXRlIGFzIHNvb24gYXMgYm90aCBkZWNrcyBleGlzdCBhbmQgaGF2ZSBkcmF3bi4gV2UgY2hlY2sgdGhlIGRlY2tcbiAgICAvLyByZWZzIGRpcmVjdGx5IChub3QgUmVhY3Qgc3RhdGUsIHdoaWNoIGNhbiBiZSBzdGFsZSByaWdodCBhZnRlciBzZXRTdGF0ZSlcbiAgICAvLyBhbmQgaW50ZW50aW9uYWxseSBkb24ndCBnYXRlIG9uIGxheWVycyBiZWluZyBmdWxseSBsb2FkZWQgaGVyZSAodGhhdCBnYXRlXG4gICAgLy8gbGl2ZXMgaW4gdGhlIGNhcHR1cmUgbG9vcCk6IGZvciBhIGxpdmUgcHJldmlldyB3ZSB3YW50IHRvIHNob3cgdGhlIGdsb2JlXG4gICAgLy8gYXMgaXQgc3RyZWFtcyBpbiByYXRoZXIgdGhhbiBhIGJsYW5rIGZyYW1lIHdoaWxlIHRpbGVzIGxvYWQuXG4gICAgaWYgKHRoaXMubGVmdERlY2tSZWYuY3VycmVudCAmJiB0aGlzLnJpZ2h0RGVja1JlZi5jdXJyZW50KSB7XG4gICAgICB0aGlzLl9jb21wb3NpdGVGcmFtZSgpO1xuICAgIH1cbiAgfTtcblxuICBfcmVuZGVyTWFwQ2FudmFzKFxuICAgIHNpZGU6ICdsZWZ0JyB8ICdyaWdodCcsXG4gICAgbWFwSW5kZXg6IG51bWJlclxuICApIHtcbiAgICBjb25zdCB7dmlld1N0YXRlLCBhZGFwdGVyLCBkZWNrUHJvcHMsIG1hcFByb3BzLCBkaXNhYmxlQmFzZU1hcCwgbWFwYm94TGF5ZXJCZWZvcmVJZH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IHRoaXMuX2dldENvbnRhaW5lcigpO1xuICAgIGNvbnN0IGtlcGxlckxheWVycyA9IHRoaXMuX2NyZWF0ZUxheWVycyhtYXBJbmRleCwgbWFwYm94TGF5ZXJCZWZvcmVJZCk7XG4gICAgY29uc3QgbWFwUmVmID0gc2lkZSA9PT0gJ2xlZnQnID8gdGhpcy5sZWZ0TWFwUmVmIDogdGhpcy5yaWdodE1hcFJlZjtcbiAgICBjb25zdCBkZWNrUmVmID0gc2lkZSA9PT0gJ2xlZnQnID8gdGhpcy5sZWZ0RGVja1JlZiA6IHRoaXMucmlnaHREZWNrUmVmO1xuICAgIGNvbnN0IG9uTWFwTG9hZCA9IHNpZGUgPT09ICdsZWZ0JyA/IHRoaXMuX29uTGVmdE1hcExvYWQgOiB0aGlzLl9vblJpZ2h0TWFwTG9hZDtcbiAgICBjb25zdCBkZWNrID0gZGVja1JlZi5jdXJyZW50O1xuXG4gICAgaWYgKGRpc2FibGVCYXNlTWFwKSB7XG4gICAgICBjb25zdCBhZGFwdGVyUHJvcHMgPSBhZGFwdGVyLmdldFByb3BzKHtcbiAgICAgICAgZGVjazogZGVjayBhcyBhbnksXG4gICAgICAgIGV4dHJhUHJvcHM6IHsuLi5kZWNrUHJvcHMsIGxheWVyczoga2VwbGVyTGF5ZXJzfVxuICAgICAgfSkgYXMgYW55O1xuICAgICAgY29uc3QgYWRhcHRlck9uQWZ0ZXJSZW5kZXIgPSBhZGFwdGVyUHJvcHMub25BZnRlclJlbmRlcjtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxNYXBMYXllciAkd2lkdGg9e3dpZHRofSAkaGVpZ2h0PXtoZWlnaHR9PlxuICAgICAgICAgIDxEZWNrR0xcbiAgICAgICAgICAgIHJlZj17cmVmID0+IHNldFJlZihkZWNrUmVmLCByZWY/LmRlY2sgYXMgYW55KX1cbiAgICAgICAgICAgIGRldmljZVByb3BzPXtFWFBPUlRfREVDS19ERVZJQ0VfUFJPUFN9XG4gICAgICAgICAgICB7Li4uYWRhcHRlclByb3BzfVxuICAgICAgICAgICAgdmlld1N0YXRlPXt2aWV3U3RhdGV9XG4gICAgICAgICAgICBvblZpZXdTdGF0ZUNoYW5nZT17KHt2aWV3U3RhdGU6IHZzfTogYW55KSA9PiB0aGlzLnByb3BzLnNldFZpZXdTdGF0ZSh2cyl9XG4gICAgICAgICAgICBvbkFmdGVyUmVuZGVyPXsocGFyYW1zOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhZGFwdGVyT25BZnRlclJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGFkYXB0ZXJPbkFmdGVyUmVuZGVyKHBhcmFtcyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5fb25EZWNrUmVuZGVyKHNpZGUpO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHsuLi50aGlzLl9nZXRDb250YWluZXIoKX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L01hcExheWVyPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBtYXBTdHlsZTogbWFwU3R5bGVGcm9tUHJvcHMsXG4gICAgICBtYXBMaWIsXG4gICAgICB0cmFuc2Zvcm1SZXF1ZXN0XG4gICAgfSA9IChtYXBQcm9wcyB8fCB7fSkgYXMgYW55O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxNYXBMYXllciAkd2lkdGg9e3dpZHRofSAkaGVpZ2h0PXtoZWlnaHR9PlxuICAgICAgICA8UmVhY3RNYXBHTFxuICAgICAgICAgIHJlZj17bWFwUmVmfVxuICAgICAgICAgIHN0eWxlPXt7d2lkdGgsIGhlaWdodH19XG4gICAgICAgICAgYW50aWFsaWFzXG4gICAgICAgICAgbWFwTGliPXttYXBMaWJ9XG4gICAgICAgICAgdHJhbnNmb3JtUmVxdWVzdD17dHJhbnNmb3JtUmVxdWVzdH1cbiAgICAgICAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXJcbiAgICAgICAgICB7Li4udmlld1N0YXRlfVxuICAgICAgICAgIG1hcFN0eWxlPXttYXBTdHlsZUZyb21Qcm9wc31cbiAgICAgICAgICBvbkxvYWQ9e29uTWFwTG9hZH1cbiAgICAgICAgPlxuICAgICAgICAgIDxEZWNrR0xPdmVybGF5XG4gICAgICAgICAgICByZWY9e2RlY2tSZWZ9XG4gICAgICAgICAgICBkZXZpY2VQcm9wcz17RVhQT1JUX09WRVJMQVlfREVWSUNFX1BST1BTfVxuICAgICAgICAgICAgey4uLmFkYXB0ZXIuZ2V0UHJvcHMoe2RlY2s6IGRlY2sgYXMgYW55LCBleHRyYVByb3BzOiB7Li4uZGVja1Byb3BzLCBsYXllcnM6IGtlcGxlckxheWVyc319KX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1JlYWN0TWFwR0w+XG4gICAgICA8L01hcExheWVyPlxuICAgICk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge3Jlc29sdXRpb259ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSB0aGlzLl9nZXRDb250YWluZXIoKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8UHJldmlld0NvbnRhaW5lciAkd2lkdGg9e3dpZHRofSAkaGVpZ2h0PXtoZWlnaHR9PlxuICAgICAgICB7LyogSGlkZGVuIG1hcCBjYW52YXNlcyBmb3IgbGVmdCAobWFwSW5kZXg9MCkgYW5kIHJpZ2h0IChtYXBJbmRleD0xKSAqL31cbiAgICAgICAge3RoaXMuX3JlbmRlck1hcENhbnZhcygnbGVmdCcsIDApfVxuICAgICAgICB7dGhpcy5fcmVuZGVyTWFwQ2FudmFzKCdyaWdodCcsIDEpfVxuXG4gICAgICAgIHsvKiBWaXNpYmxlIGNvbXBvc2l0ZWQgb3V0cHV0ICovfVxuICAgICAgICA8VmlzaWJsZUNhbnZhc1xuICAgICAgICAgIHJlZj17dGhpcy5jb21wb3NpdGVDYW52YXNSZWZ9XG4gICAgICAgICAgd2lkdGg9e3Jlc29sdXRpb25bMF19XG4gICAgICAgICAgaGVpZ2h0PXtyZXNvbHV0aW9uWzFdfVxuICAgICAgICAgICR3aWR0aD17d2lkdGh9XG4gICAgICAgICAgJGhlaWdodD17aGVpZ2h0fVxuICAgICAgICAvPlxuICAgICAgPC9QcmV2aWV3Q29udGFpbmVyPlxuICAgICk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7O0FBRUEsT0FBT0EsS0FBSyxJQUFHQyxTQUFTLEVBQWFDLFVBQVUsUUFBcUIsT0FBTztBQUMzRSxPQUFPQyxNQUFNLE1BQU0sZ0JBQWdCO0FBQ25DLE9BQU9DLFVBQVUsSUFBZ0JDLFVBQVUsUUFBTyx1QkFBdUI7QUFDekU7QUFDQSxTQUFRQyxhQUFhLFFBQU8saUJBQWlCO0FBRTdDLE9BQU9DLE9BQU8sTUFBTSwyQkFBMkI7QUFDL0MsT0FBT0MsTUFBTSxNQUFNLG1CQUFtQjtBQUd0QyxTQUFRQyxrQkFBa0IsUUFBTyxrQkFBa0I7QUFDbkQsU0FBUUMsbUJBQW1CLEVBQUVDLHdCQUF3QixRQUFvQix5QkFBeUI7QUFDbEcsU0FDRUMsd0JBQXdCLEVB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