@kepler.gl/components 3.0.0-alpha.0 → 3.0.0-alpha.1

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 (530) hide show
  1. package/dist/bottom-widget.d.ts +11 -38
  2. package/dist/bottom-widget.js +43 -99
  3. package/dist/common/action-panel.d.ts +2 -2
  4. package/dist/common/action-panel.js +4 -4
  5. package/dist/common/animation-control/animation-control.d.ts +19 -18
  6. package/dist/common/animation-control/animation-control.js +59 -81
  7. package/dist/common/animation-control/animation-controller.d.ts +6 -2
  8. package/dist/common/animation-control/animation-controller.js +50 -36
  9. package/dist/common/animation-control/animation-speed-slider.js +2 -2
  10. package/dist/common/animation-control/animation-window-control.js +1 -1
  11. package/dist/common/animation-control/floating-time-display.d.ts +2 -2
  12. package/dist/common/animation-control/floating-time-display.js +2 -2
  13. package/dist/common/animation-control/play-control.d.ts +2 -2
  14. package/dist/common/animation-control/play-control.js +1 -1
  15. package/dist/common/animation-control/playback-controls.d.ts +7 -7
  16. package/dist/common/animation-control/playback-controls.js +6 -6
  17. package/dist/common/animation-control/reset-control.d.ts +2 -2
  18. package/dist/common/animation-control/reset-control.js +1 -1
  19. package/dist/common/animation-control/speed-control.d.ts +2 -2
  20. package/dist/common/animation-control/speed-control.js +2 -2
  21. package/dist/common/animation-control/window-action-control.d.ts +2 -2
  22. package/dist/common/animation-control/window-action-control.js +1 -1
  23. package/dist/common/checkbox.d.ts +2 -2
  24. package/dist/common/checkbox.js +3 -3
  25. package/dist/common/color-legend.d.ts +3 -3
  26. package/dist/common/color-legend.js +11 -17
  27. package/dist/common/data-table/button.d.ts +1 -1
  28. package/dist/common/data-table/button.js +2 -2
  29. package/dist/common/data-table/canvas.js +2 -2
  30. package/dist/common/data-table/cell-size.js +44 -13
  31. package/dist/common/data-table/display-format.d.ts +25 -0
  32. package/dist/common/data-table/display-format.js +169 -0
  33. package/dist/common/data-table/grid.d.ts +5 -2
  34. package/dist/common/data-table/grid.js +45 -5
  35. package/dist/common/data-table/header-cell.d.ts +4 -1
  36. package/dist/common/data-table/header-cell.js +66 -29
  37. package/dist/common/data-table/index.d.ts +27 -34
  38. package/dist/common/data-table/index.js +148 -62
  39. package/dist/common/data-table/option-dropdown.d.ts +17 -3
  40. package/dist/common/data-table/option-dropdown.js +86 -13
  41. package/dist/common/dataset-label.d.ts +2 -2
  42. package/dist/common/dataset-label.js +3 -3
  43. package/dist/common/error-boundary.d.ts +6 -2
  44. package/dist/common/error-boundary.js +2 -2
  45. package/dist/common/field-selector.d.ts +9 -3
  46. package/dist/common/field-selector.js +3 -3
  47. package/dist/common/field-token.d.ts +8 -0
  48. package/dist/common/field-token.js +7 -3
  49. package/dist/common/file-uploader/file-drop.d.ts +3 -2
  50. package/dist/common/file-uploader/file-drop.js +2 -2
  51. package/dist/common/file-uploader/file-upload-progress.js +2 -2
  52. package/dist/common/file-uploader/file-upload.d.ts +2 -6
  53. package/dist/common/file-uploader/file-upload.js +2 -2
  54. package/dist/common/file-uploader/upload-button.d.ts +1 -0
  55. package/dist/common/file-uploader/upload-button.js +2 -2
  56. package/dist/common/histogram-plot.d.ts +2 -2
  57. package/dist/common/histogram-plot.js +18 -12
  58. package/dist/common/icon-button.d.ts +2 -1
  59. package/dist/common/icon-button.js +2 -2
  60. package/dist/common/icons/add.d.ts +2 -2
  61. package/dist/common/icons/add.js +2 -2
  62. package/dist/common/icons/anchor_window.d.ts +2 -2
  63. package/dist/common/icons/anchor_window.js +2 -2
  64. package/dist/common/icons/arrow-down-alt.d.ts +2 -2
  65. package/dist/common/icons/arrow-down-alt.js +2 -2
  66. package/dist/common/icons/arrow-down-solid.d.ts +2 -2
  67. package/dist/common/icons/arrow-down-solid.js +2 -2
  68. package/dist/common/icons/arrow-down.d.ts +2 -2
  69. package/dist/common/icons/arrow-down.js +2 -2
  70. package/dist/common/icons/arrow-left.d.ts +2 -2
  71. package/dist/common/icons/arrow-left.js +2 -2
  72. package/dist/common/icons/arrow-right.d.ts +2 -2
  73. package/dist/common/icons/arrow-right.js +2 -2
  74. package/dist/common/icons/arrow-up-alt.d.ts +2 -2
  75. package/dist/common/icons/arrow-up-alt.js +2 -2
  76. package/dist/common/icons/arrow-up-solid.d.ts +2 -2
  77. package/dist/common/icons/arrow-up-solid.js +2 -2
  78. package/dist/common/icons/arrow-up.d.ts +2 -2
  79. package/dist/common/icons/arrow-up.js +2 -2
  80. package/dist/common/icons/base.d.ts +1 -1
  81. package/dist/common/icons/base.js +2 -2
  82. package/dist/common/icons/bug.d.ts +2 -2
  83. package/dist/common/icons/bug.js +2 -2
  84. package/dist/common/icons/cancel.d.ts +2 -2
  85. package/dist/common/icons/cancel.js +2 -2
  86. package/dist/common/icons/checkmark.d.ts +2 -2
  87. package/dist/common/icons/checkmark.js +2 -2
  88. package/dist/common/icons/clipboard.d.ts +2 -2
  89. package/dist/common/icons/clipboard.js +2 -2
  90. package/dist/common/icons/clock.d.ts +2 -2
  91. package/dist/common/icons/clock.js +2 -2
  92. package/dist/common/icons/close.d.ts +2 -2
  93. package/dist/common/icons/close.js +2 -2
  94. package/dist/common/icons/code-alt.d.ts +2 -2
  95. package/dist/common/icons/code-alt.js +2 -2
  96. package/dist/common/icons/copy.d.ts +2 -2
  97. package/dist/common/icons/copy.js +2 -2
  98. package/dist/common/icons/crosshairs.d.ts +2 -2
  99. package/dist/common/icons/crosshairs.js +2 -2
  100. package/dist/common/icons/cube-3d.d.ts +2 -2
  101. package/dist/common/icons/cube-3d.js +2 -2
  102. package/dist/common/icons/cursor-click.d.ts +2 -2
  103. package/dist/common/icons/cursor-click.js +2 -2
  104. package/dist/common/icons/cursor-point.d.ts +14 -0
  105. package/dist/common/icons/cursor-point.js +89 -0
  106. package/dist/common/icons/data-table.d.ts +2 -2
  107. package/dist/common/icons/data-table.js +2 -2
  108. package/dist/common/icons/db.d.ts +2 -2
  109. package/dist/common/icons/db.js +2 -2
  110. package/dist/common/icons/delete.d.ts +2 -2
  111. package/dist/common/icons/delete.js +2 -2
  112. package/dist/common/icons/docs.d.ts +2 -2
  113. package/dist/common/icons/docs.js +2 -2
  114. package/dist/common/icons/drag-n-drop.d.ts +2 -2
  115. package/dist/common/icons/drag-n-drop.js +2 -2
  116. package/dist/common/icons/draw-polygon.d.ts +2 -2
  117. package/dist/common/icons/draw-polygon.js +2 -2
  118. package/dist/common/icons/email.d.ts +2 -2
  119. package/dist/common/icons/email.js +2 -2
  120. package/dist/common/icons/expand.d.ts +2 -2
  121. package/dist/common/icons/expand.js +2 -2
  122. package/dist/common/icons/eye-seen.d.ts +2 -2
  123. package/dist/common/icons/eye-seen.js +2 -2
  124. package/dist/common/icons/eye-unseen.d.ts +2 -2
  125. package/dist/common/icons/eye-unseen.js +2 -2
  126. package/dist/common/icons/file-type.d.ts +2 -2
  127. package/dist/common/icons/file-type.js +2 -2
  128. package/dist/common/icons/file.d.ts +2 -2
  129. package/dist/common/icons/file.js +2 -2
  130. package/dist/common/icons/files.d.ts +1 -1
  131. package/dist/common/icons/files.js +2 -2
  132. package/dist/common/icons/filter-funnel.d.ts +2 -2
  133. package/dist/common/icons/filter-funnel.js +2 -2
  134. package/dist/common/icons/free-window.d.ts +2 -2
  135. package/dist/common/icons/free-window.js +2 -2
  136. package/dist/common/icons/gear.d.ts +2 -2
  137. package/dist/common/icons/gear.js +2 -2
  138. package/dist/common/icons/hash.d.ts +2 -2
  139. package/dist/common/icons/hash.js +2 -2
  140. package/dist/common/icons/histogram.d.ts +1 -1
  141. package/dist/common/icons/histogram.js +2 -2
  142. package/dist/common/icons/index.d.ts +1 -0
  143. package/dist/common/icons/index.js +10 -2
  144. package/dist/common/icons/info.d.ts +2 -2
  145. package/dist/common/icons/info.js +2 -2
  146. package/dist/common/icons/layers.d.ts +2 -2
  147. package/dist/common/icons/layers.js +2 -2
  148. package/dist/common/icons/left-arrow.d.ts +2 -2
  149. package/dist/common/icons/left-arrow.js +2 -2
  150. package/dist/common/icons/legend.d.ts +2 -2
  151. package/dist/common/icons/legend.js +2 -2
  152. package/dist/common/icons/line-chart.d.ts +2 -2
  153. package/dist/common/icons/line-chart.js +2 -2
  154. package/dist/common/icons/login.d.ts +2 -2
  155. package/dist/common/icons/login.js +2 -2
  156. package/dist/common/icons/logout.d.ts +2 -2
  157. package/dist/common/icons/logout.js +2 -2
  158. package/dist/common/icons/map-icon.d.ts +2 -2
  159. package/dist/common/icons/map-icon.js +2 -2
  160. package/dist/common/icons/map.d.ts +2 -2
  161. package/dist/common/icons/map.js +2 -2
  162. package/dist/common/icons/messages.d.ts +2 -2
  163. package/dist/common/icons/messages.js +2 -2
  164. package/dist/common/icons/minus.d.ts +2 -2
  165. package/dist/common/icons/minus.js +2 -2
  166. package/dist/common/icons/order-by-dataset.d.ts +2 -2
  167. package/dist/common/icons/order-by-dataset.js +2 -2
  168. package/dist/common/icons/order-by-list.d.ts +2 -2
  169. package/dist/common/icons/order-by-list.js +2 -2
  170. package/dist/common/icons/pause.d.ts +2 -2
  171. package/dist/common/icons/pause.js +2 -2
  172. package/dist/common/icons/picture.d.ts +1 -1
  173. package/dist/common/icons/picture.js +2 -2
  174. package/dist/common/icons/pin.d.ts +2 -2
  175. package/dist/common/icons/pin.js +2 -2
  176. package/dist/common/icons/play.d.ts +2 -2
  177. package/dist/common/icons/play.js +2 -2
  178. package/dist/common/icons/polygon.d.ts +2 -2
  179. package/dist/common/icons/polygon.js +2 -2
  180. package/dist/common/icons/rectangle.d.ts +2 -2
  181. package/dist/common/icons/rectangle.js +2 -2
  182. package/dist/common/icons/reduce.d.ts +2 -2
  183. package/dist/common/icons/reduce.js +2 -2
  184. package/dist/common/icons/reset.d.ts +2 -2
  185. package/dist/common/icons/reset.js +2 -2
  186. package/dist/common/icons/rocket.d.ts +2 -2
  187. package/dist/common/icons/rocket.js +2 -2
  188. package/dist/common/icons/save.d.ts +2 -2
  189. package/dist/common/icons/save.js +2 -2
  190. package/dist/common/icons/save2.d.ts +2 -2
  191. package/dist/common/icons/save2.js +2 -2
  192. package/dist/common/icons/search.d.ts +2 -2
  193. package/dist/common/icons/search.js +2 -2
  194. package/dist/common/icons/settings.d.ts +2 -2
  195. package/dist/common/icons/settings.js +2 -2
  196. package/dist/common/icons/share.d.ts +2 -2
  197. package/dist/common/icons/share.js +2 -2
  198. package/dist/common/icons/split.d.ts +2 -2
  199. package/dist/common/icons/split.js +2 -2
  200. package/dist/common/icons/square-select.d.ts +2 -2
  201. package/dist/common/icons/square-select.js +2 -2
  202. package/dist/common/icons/trash.d.ts +2 -2
  203. package/dist/common/icons/trash.js +2 -2
  204. package/dist/common/icons/vert-dots.d.ts +2 -2
  205. package/dist/common/icons/vert-dots.js +2 -2
  206. package/dist/common/icons/vert-three-dots.d.ts +2 -2
  207. package/dist/common/icons/vert-three-dots.js +2 -2
  208. package/dist/common/icons/warning-sign.d.ts +2 -2
  209. package/dist/common/icons/warning-sign.js +2 -2
  210. package/dist/common/icons/warning.d.ts +2 -2
  211. package/dist/common/icons/warning.js +2 -2
  212. package/dist/common/image-preview.d.ts +2 -2
  213. package/dist/common/image-preview.js +2 -2
  214. package/dist/common/index.d.ts +1 -1
  215. package/dist/common/index.js +8 -2
  216. package/dist/common/info-helper.d.ts +2 -2
  217. package/dist/common/info-helper.js +2 -2
  218. package/dist/common/item-selector/accessor.js +2 -2
  219. package/dist/common/item-selector/chickleted-input.js +2 -2
  220. package/dist/common/item-selector/dropdown-list.d.ts +28 -8
  221. package/dist/common/item-selector/dropdown-list.js +144 -25
  222. package/dist/common/item-selector/item-selector.d.ts +2 -3
  223. package/dist/common/item-selector/item-selector.js +7 -3
  224. package/dist/common/item-selector/typeahead.d.ts +16 -12
  225. package/dist/common/item-selector/typeahead.js +24 -13
  226. package/dist/common/line-chart.d.ts +2 -2
  227. package/dist/common/line-chart.js +2 -2
  228. package/dist/common/loading-spinner.js +2 -2
  229. package/dist/common/logo.d.ts +2 -2
  230. package/dist/common/logo.js +2 -2
  231. package/dist/common/map-layer-selector.d.ts +2 -2
  232. package/dist/common/map-layer-selector.js +3 -4
  233. package/dist/common/modal.d.ts +24 -11
  234. package/dist/common/modal.js +2 -2
  235. package/dist/common/portaled.d.ts +513 -2
  236. package/dist/common/portaled.js +2 -2
  237. package/dist/common/progress-bar.d.ts +2 -2
  238. package/dist/common/progress-bar.js +2 -2
  239. package/dist/common/range-brush.js +2 -2
  240. package/dist/common/range-plot.d.ts +6 -2
  241. package/dist/common/range-plot.js +4 -3
  242. package/dist/common/range-slider.d.ts +5 -1
  243. package/dist/common/range-slider.js +9 -3
  244. package/dist/common/slider/mouse-event.js +2 -2
  245. package/dist/common/slider/slider-bar-handle.d.ts +2 -2
  246. package/dist/common/slider/slider-bar-handle.js +2 -2
  247. package/dist/common/slider/slider-handle.d.ts +1 -1
  248. package/dist/common/slider/slider-handle.js +2 -2
  249. package/dist/common/slider/slider.d.ts +7 -5
  250. package/dist/common/slider/slider.js +8 -5
  251. package/dist/common/styled-components.d.ts +5 -0
  252. package/dist/common/styled-components.js +161 -47
  253. package/dist/common/switch.d.ts +3 -2
  254. package/dist/common/switch.js +2 -2
  255. package/dist/common/time-range-slider-time-title.d.ts +2 -2
  256. package/dist/common/time-range-slider-time-title.js +2 -2
  257. package/dist/common/time-range-slider.d.ts +6 -3
  258. package/dist/common/time-range-slider.js +33 -14
  259. package/dist/common/time-slider-marker.d.ts +1 -1
  260. package/dist/common/time-slider-marker.js +3 -3
  261. package/dist/common/timeline-slider.d.ts +13 -0
  262. package/dist/common/timeline-slider.js +173 -0
  263. package/dist/common/tippy-tooltip.d.ts +4 -2
  264. package/dist/common/tippy-tooltip.js +23 -11
  265. package/dist/common/toolbar-item.d.ts +1 -1
  266. package/dist/common/toolbar-item.js +6 -4
  267. package/dist/common/toolbar.js +2 -2
  268. package/dist/common/vertical-toolbar.js +2 -2
  269. package/dist/connect/keplergl-connect.d.ts +5 -1
  270. package/dist/connect/keplergl-connect.js +2 -2
  271. package/dist/connect/with-local-selector.js +2 -2
  272. package/dist/container.js +2 -2
  273. package/dist/context.js +4 -3
  274. package/dist/dnd-context.d.ts +13 -0
  275. package/dist/dnd-context.js +252 -0
  276. package/dist/editor/editor.d.ts +11 -10
  277. package/dist/editor/editor.js +97 -103
  278. package/dist/editor/feature-action-panel.d.ts +8 -6
  279. package/dist/editor/feature-action-panel.js +75 -22
  280. package/dist/effects/effect-configurator.d.ts +18 -0
  281. package/dist/effects/effect-configurator.js +237 -0
  282. package/dist/effects/effect-list.d.ts +15 -0
  283. package/dist/effects/effect-list.js +173 -0
  284. package/dist/effects/effect-manager.d.ts +21 -0
  285. package/dist/effects/effect-manager.js +129 -0
  286. package/dist/effects/effect-panel-header.d.ts +33 -0
  287. package/dist/effects/effect-panel-header.js +174 -0
  288. package/dist/effects/effect-panel.d.ts +24 -0
  289. package/dist/effects/effect-panel.js +162 -0
  290. package/dist/effects/effect-time-configurator.d.ts +13 -0
  291. package/dist/effects/effect-time-configurator.js +191 -0
  292. package/dist/effects/effect-type-selector.d.ts +11 -0
  293. package/dist/effects/effect-type-selector.js +117 -0
  294. package/dist/effects/side-panel-title.d.ts +7 -0
  295. package/dist/effects/side-panel-title.js +67 -0
  296. package/dist/filter-animation-controller.d.ts +17 -0
  297. package/dist/filter-animation-controller.js +91 -0
  298. package/dist/filters/components.js +2 -2
  299. package/dist/filters/filter-panels/filter-panel-with-field-select.js +3 -3
  300. package/dist/filters/filter-panels/multi-select-filter-panel.js +3 -3
  301. package/dist/filters/filter-panels/new-filter-panel.js +2 -2
  302. package/dist/filters/filter-panels/polygon-filter-panel.js +3 -3
  303. package/dist/filters/filter-panels/range-filter-panel.js +3 -3
  304. package/dist/filters/filter-panels/single-select-filter-panel.js +3 -3
  305. package/dist/filters/filter-panels/time-range-filter-panel.js +25 -8
  306. package/dist/filters/filter-panels/types.d.ts +2 -1
  307. package/dist/filters/filter-panels/types.js +1 -1
  308. package/dist/filters/index.d.ts +2 -0
  309. package/dist/filters/index.js +18 -2
  310. package/dist/filters/multi-select-filter.js +2 -2
  311. package/dist/filters/polygon-filter.js +14 -4
  312. package/dist/filters/range-filter.js +6 -4
  313. package/dist/filters/single-select-filter.js +2 -2
  314. package/dist/filters/time-range-filter.d.ts +2 -1
  315. package/dist/filters/time-range-filter.js +10 -7
  316. package/dist/filters/time-widget-top.d.ts +8 -0
  317. package/dist/filters/time-widget-top.js +123 -0
  318. package/dist/filters/time-widget.d.ts +3 -7
  319. package/dist/filters/time-widget.js +35 -92
  320. package/dist/filters/types.d.ts +7 -3
  321. package/dist/filters/types.js +1 -1
  322. package/dist/geocoder/geocoder.d.ts +1 -3
  323. package/dist/geocoder/geocoder.js +2 -2
  324. package/dist/geocoder-panel.d.ts +9 -3
  325. package/dist/geocoder-panel.js +30 -19
  326. package/dist/hooks/useFeatureFlags.js +1 -1
  327. package/dist/index.d.ts +68 -20
  328. package/dist/index.js +599 -99
  329. package/dist/injector.d.ts +4 -4
  330. package/dist/injector.js +2 -2
  331. package/dist/kepler-gl.d.ts +58 -17
  332. package/dist/kepler-gl.js +78 -31
  333. package/dist/layer-animation-controller.d.ts +13 -0
  334. package/dist/layer-animation-controller.js +76 -0
  335. package/dist/map/coordinate-info.js +2 -2
  336. package/dist/map/effects/effect-control.d.ts +16 -0
  337. package/dist/map/effects/effect-control.js +81 -0
  338. package/dist/map/layer-hover-info.d.ts +2 -2
  339. package/dist/map/layer-hover-info.js +26 -10
  340. package/dist/map/layer-selector-panel.js +2 -2
  341. package/dist/map/lazy-tippy.js +1 -1
  342. package/dist/map/locale-panel.d.ts +1 -1
  343. package/dist/map/locale-panel.js +2 -2
  344. package/dist/map/map-control-panel.d.ts +6 -0
  345. package/dist/map/map-control-panel.js +65 -9
  346. package/dist/map/map-control-toolbar.js +3 -3
  347. package/dist/map/map-control-tooltip.js +2 -2
  348. package/dist/map/map-control.d.ts +15 -7
  349. package/dist/map/map-control.js +6 -7
  350. package/dist/map/map-draw-panel.d.ts +2 -2
  351. package/dist/map/map-draw-panel.js +2 -9
  352. package/dist/map/map-legend-panel.d.ts +12 -1
  353. package/dist/map/map-legend-panel.js +27 -14
  354. package/dist/map/map-legend.d.ts +1 -1
  355. package/dist/map/map-legend.js +2 -2
  356. package/dist/map/map-popover-content.d.ts +28 -0
  357. package/dist/map/map-popover-content.js +51 -0
  358. package/dist/map/map-popover.d.ts +11 -14
  359. package/dist/map/map-popover.js +94 -15
  360. package/dist/map/split-map-button.js +2 -2
  361. package/dist/map/toggle-3d-button.js +2 -2
  362. package/dist/map-container.d.ts +33 -9
  363. package/dist/map-container.js +530 -161
  364. package/dist/map-view-state-context.d.ts +12 -0
  365. package/dist/map-view-state-context.js +116 -0
  366. package/dist/maps-layout.d.ts +5 -2
  367. package/dist/maps-layout.js +7 -3
  368. package/dist/modal-container.d.ts +2 -6
  369. package/dist/modal-container.js +8 -6
  370. package/dist/modals/add-map-style-modal.d.ts +1 -3
  371. package/dist/modals/add-map-style-modal.js +12 -6
  372. package/dist/modals/cloud-tile.js +2 -2
  373. package/dist/modals/data-table-modal.d.ts +11 -2
  374. package/dist/modals/data-table-modal.js +75 -24
  375. package/dist/modals/delete-data-modal.js +2 -2
  376. package/dist/modals/error-display.js +2 -2
  377. package/dist/modals/export-data-modal.d.ts +1 -3
  378. package/dist/modals/export-data-modal.js +2 -2
  379. package/dist/modals/export-image-modal.d.ts +1 -3
  380. package/dist/modals/export-image-modal.js +2 -2
  381. package/dist/modals/export-map-modal/components.d.ts +2 -2
  382. package/dist/modals/export-map-modal/components.js +2 -2
  383. package/dist/modals/export-map-modal/export-html-map.js +2 -2
  384. package/dist/modals/export-map-modal/export-json-map.d.ts +1 -1
  385. package/dist/modals/export-map-modal/export-json-map.js +2 -2
  386. package/dist/modals/export-map-modal/export-map-modal.d.ts +2 -2
  387. package/dist/modals/export-map-modal/export-map-modal.js +2 -2
  388. package/dist/modals/image-modal-container.d.ts +1 -0
  389. package/dist/modals/image-modal-container.js +2 -2
  390. package/dist/modals/load-data-modal.js +2 -2
  391. package/dist/modals/load-storage-map.js +2 -2
  392. package/dist/modals/loading-dialog.js +2 -2
  393. package/dist/modals/modal-dialog.js +2 -2
  394. package/dist/modals/modal-tabs.d.ts +1 -1
  395. package/dist/modals/modal-tabs.js +2 -2
  396. package/dist/modals/overwrite-map-modal.js +2 -2
  397. package/dist/modals/provider-modal-container.d.ts +3 -2
  398. package/dist/modals/provider-modal-container.js +2 -2
  399. package/dist/modals/save-map-modal.js +2 -2
  400. package/dist/modals/share-map-modal.js +2 -2
  401. package/dist/modals/status-panel.js +2 -2
  402. package/dist/modals/storage-map-viewer.d.ts +1 -1
  403. package/dist/modals/storage-map-viewer.js +2 -2
  404. package/dist/notification-panel/notification-item.d.ts +7 -10
  405. package/dist/notification-panel/notification-item.js +45 -13
  406. package/dist/notification-panel.js +2 -2
  407. package/dist/plot-container.js +20 -8
  408. package/dist/side-panel/add-by-dataset-button.d.ts +12 -0
  409. package/dist/side-panel/add-by-dataset-button.js +173 -0
  410. package/dist/side-panel/cloud-storage-dropdown.d.ts +2 -2
  411. package/dist/side-panel/cloud-storage-dropdown.js +2 -2
  412. package/dist/side-panel/common/dataset-info.d.ts +10 -3
  413. package/dist/side-panel/common/dataset-info.js +2 -2
  414. package/dist/side-panel/common/dataset-tag.d.ts +15 -1
  415. package/dist/side-panel/common/dataset-tag.js +14 -11
  416. package/dist/side-panel/common/dataset-title.d.ts +16 -2
  417. package/dist/side-panel/common/dataset-title.js +71 -105
  418. package/dist/side-panel/common/source-data-catalog.d.ts +22 -3
  419. package/dist/side-panel/common/source-data-catalog.js +2 -2
  420. package/dist/side-panel/common/source-data-selector.js +2 -2
  421. package/dist/side-panel/common/types.d.ts +7 -27
  422. package/dist/side-panel/common/types.js +1 -1
  423. package/dist/side-panel/custom-panel.d.ts +6 -7
  424. package/dist/side-panel/custom-panel.js +2 -2
  425. package/dist/side-panel/filter-manager.d.ts +18 -6
  426. package/dist/side-panel/filter-manager.js +176 -65
  427. package/dist/side-panel/filter-panel/add-filter-button.d.ts +8 -0
  428. package/dist/side-panel/filter-panel/add-filter-button.js +50 -0
  429. package/dist/side-panel/filter-panel/filter-panel-header.d.ts +6 -3
  430. package/dist/side-panel/filter-panel/filter-panel-header.js +4 -4
  431. package/dist/side-panel/filter-panel/filter-panel.js +2 -2
  432. package/dist/side-panel/interaction-manager.d.ts +6 -3
  433. package/dist/side-panel/interaction-manager.js +21 -8
  434. package/dist/side-panel/interaction-panel/brush-config.d.ts +2 -2
  435. package/dist/side-panel/interaction-panel/brush-config.js +2 -2
  436. package/dist/side-panel/interaction-panel/interaction-panel.d.ts +5 -2
  437. package/dist/side-panel/interaction-panel/interaction-panel.js +12 -5
  438. package/dist/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.d.ts +3 -9
  439. package/dist/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.js +25 -42
  440. package/dist/side-panel/interaction-panel/tooltip-config.d.ts +2 -3
  441. package/dist/side-panel/interaction-panel/tooltip-config.js +9 -7
  442. package/dist/side-panel/layer-manager.d.ts +8 -10
  443. package/dist/side-panel/layer-manager.js +71 -37
  444. package/dist/side-panel/layer-panel/add-layer-button.d.ts +3 -5
  445. package/dist/side-panel/layer-panel/add-layer-button.js +13 -139
  446. package/dist/side-panel/layer-panel/color-palette.js +2 -2
  447. package/dist/side-panel/layer-panel/color-range-selector.d.ts +1 -1
  448. package/dist/side-panel/layer-panel/color-range-selector.js +2 -2
  449. package/dist/side-panel/layer-panel/color-selector.d.ts +15 -24
  450. package/dist/side-panel/layer-panel/color-selector.js +175 -127
  451. package/dist/side-panel/layer-panel/column-selector.js +2 -2
  452. package/dist/side-panel/layer-panel/custom-palette.d.ts +7 -2
  453. package/dist/side-panel/layer-panel/custom-palette.js +6 -5
  454. package/dist/side-panel/layer-panel/custom-picker.d.ts +9 -36
  455. package/dist/side-panel/layer-panel/custom-picker.js +2 -2
  456. package/dist/side-panel/layer-panel/dataset-layer-group.d.ts +1 -1
  457. package/dist/side-panel/layer-panel/dataset-layer-group.js +3 -2
  458. package/dist/side-panel/layer-panel/dataset-layer-section.d.ts +3 -2
  459. package/dist/side-panel/layer-panel/dataset-layer-section.js +5 -4
  460. package/dist/side-panel/layer-panel/dataset-section.d.ts +2 -3
  461. package/dist/side-panel/layer-panel/dataset-section.js +6 -7
  462. package/dist/side-panel/layer-panel/dimension-scale-selector.js +2 -2
  463. package/dist/side-panel/layer-panel/how-to-button.js +2 -2
  464. package/dist/side-panel/layer-panel/layer-color-selector.d.ts +42 -0
  465. package/dist/side-panel/layer-panel/layer-color-selector.js +134 -0
  466. package/dist/side-panel/layer-panel/layer-column-config.d.ts +15 -9
  467. package/dist/side-panel/layer-panel/layer-column-config.js +35 -13
  468. package/dist/side-panel/layer-panel/layer-config-group.d.ts +11 -2
  469. package/dist/side-panel/layer-panel/layer-config-group.js +19 -11
  470. package/dist/side-panel/layer-panel/layer-configurator.d.ts +10 -35
  471. package/dist/side-panel/layer-panel/layer-configurator.js +61 -110
  472. package/dist/side-panel/layer-panel/layer-error-message.d.ts +6 -0
  473. package/dist/side-panel/layer-panel/layer-error-message.js +58 -0
  474. package/dist/side-panel/layer-panel/layer-list.d.ts +4 -3
  475. package/dist/side-panel/layer-panel/layer-list.js +112 -89
  476. package/dist/side-panel/layer-panel/layer-panel-header.d.ts +22 -10
  477. package/dist/side-panel/layer-panel/layer-panel-header.js +106 -67
  478. package/dist/side-panel/layer-panel/layer-panel.d.ts +3 -1
  479. package/dist/side-panel/layer-panel/layer-panel.js +24 -11
  480. package/dist/side-panel/layer-panel/layer-type-dropdown-list.js +2 -2
  481. package/dist/side-panel/layer-panel/layer-type-list-item.d.ts +12 -3
  482. package/dist/side-panel/layer-panel/layer-type-list-item.js +12 -4
  483. package/dist/side-panel/layer-panel/layer-type-selector.d.ts +2 -1
  484. package/dist/side-panel/layer-panel/layer-type-selector.js +5 -3
  485. package/dist/side-panel/layer-panel/single-color-palette.d.ts +1 -1
  486. package/dist/side-panel/layer-panel/single-color-palette.js +2 -2
  487. package/dist/side-panel/layer-panel/text-label-panel.d.ts +4 -2
  488. package/dist/side-panel/layer-panel/text-label-panel.js +62 -15
  489. package/dist/side-panel/layer-panel/vis-config-by-field-selector.d.ts +1 -3
  490. package/dist/side-panel/layer-panel/vis-config-by-field-selector.js +2 -2
  491. package/dist/side-panel/layer-panel/vis-config-slider.js +2 -2
  492. package/dist/side-panel/layer-panel/vis-config-switch.js +2 -2
  493. package/dist/side-panel/map-manager.d.ts +13 -6
  494. package/dist/side-panel/map-manager.js +56 -45
  495. package/dist/side-panel/map-style-panel/map-layer-group-color-picker.d.ts +14 -0
  496. package/dist/side-panel/map-style-panel/map-layer-group-color-picker.js +116 -0
  497. package/dist/side-panel/map-style-panel/map-layer-group-item.d.ts +29 -0
  498. package/dist/side-panel/map-style-panel/map-layer-group-item.js +131 -0
  499. package/dist/side-panel/map-style-panel/map-layer-selector.d.ts +16 -12
  500. package/dist/side-panel/map-style-panel/map-layer-selector.js +34 -51
  501. package/dist/side-panel/map-style-panel/map-style-selector.d.ts +11 -4
  502. package/dist/side-panel/map-style-panel/map-style-selector.js +54 -20
  503. package/dist/side-panel/panel-dropdown.d.ts +3 -2
  504. package/dist/side-panel/panel-dropdown.js +2 -2
  505. package/dist/side-panel/panel-header-action.d.ts +4 -2
  506. package/dist/side-panel/panel-header-action.js +11 -4
  507. package/dist/side-panel/panel-header.d.ts +13 -8
  508. package/dist/side-panel/panel-header.js +2 -2
  509. package/dist/side-panel/panel-tab.d.ts +2 -2
  510. package/dist/side-panel/panel-tab.js +2 -2
  511. package/dist/side-panel/panel-title.d.ts +6 -3
  512. package/dist/side-panel/panel-title.js +31 -14
  513. package/dist/side-panel/panel-toggle.d.ts +1 -1
  514. package/dist/side-panel/panel-toggle.js +2 -2
  515. package/dist/side-panel/{layer-panel/panel-view-list-toggle.d.ts → panel-view-list-toggle.d.ts} +19 -8
  516. package/dist/side-panel/panel-view-list-toggle.js +143 -0
  517. package/dist/side-panel/side-bar.d.ts +15 -16
  518. package/dist/side-panel/side-bar.js +8 -6
  519. package/dist/side-panel.d.ts +2 -117
  520. package/dist/side-panel.js +14 -20
  521. package/dist/types.d.ts +16 -9
  522. package/dist/types.js +1 -1
  523. package/package.json +41 -34
  524. package/dist/editor/constants.d.ts +0 -17
  525. package/dist/editor/constants.js +0 -47
  526. package/dist/editor/feature-styles.d.ts +0 -37
  527. package/dist/editor/feature-styles.js +0 -92
  528. package/dist/editor/handle-style.d.ts +0 -42
  529. package/dist/editor/handle-style.js +0 -100
  530. package/dist/side-panel/layer-panel/panel-view-list-toggle.js +0 -143
@@ -1,4 +1,4 @@
1
- // Copyright (c) 2022 Uber Technologies, Inc.
1
+ // Copyright (c) 2023 Uber Technologies, Inc.
2
2
  //
3
3
  // Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  // of this software and associated documentation files (the "Software"), to deal
@@ -28,10 +28,13 @@ Object.defineProperty(exports, "__esModule", {
28
28
  value: true
29
29
  });
30
30
  exports.LayerTitleSectionFactory = LayerTitleSectionFactory;
31
+ exports.LayerPanelHeaderActionSectionFactory = LayerPanelHeaderActionSectionFactory;
31
32
  exports["default"] = exports.HeaderWarning = exports.LayerLabelEditor = exports.DragHandle = exports.defaultProps = void 0;
32
33
 
33
34
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
34
35
 
36
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
37
+
35
38
  var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
36
39
 
37
40
  var _react = _interopRequireWildcard(require("react"));
@@ -40,8 +43,6 @@ var _classnames = _interopRequireDefault(require("classnames"));
40
43
 
41
44
  var _styledComponents = _interopRequireWildcard(require("styled-components"));
42
45
 
43
- var _reactSortableHoc = require("react-sortable-hoc");
44
-
45
46
  var _panelHeaderAction = _interopRequireDefault(require("../panel-header-action"));
46
47
 
47
48
  var _styledComponents2 = require("../../common/styled-components");
@@ -50,6 +51,8 @@ var _icons = require("../../common/icons");
50
51
 
51
52
  var _localization = require("@kepler.gl/localization");
52
53
 
54
+ var _constants = require("@kepler.gl/constants");
55
+
53
56
  var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8;
54
57
 
55
58
  var defaultProps = {
@@ -74,7 +77,7 @@ var getBorderCss = function getBorderCss(status) {
74
77
  var StyledLayerPanelHeader = (0, _styledComponents["default"])(_styledComponents2.StyledPanelHeader)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n height: ", "px;\n position: relative;\n align-items: stretch;\n\n .layer__remove-layer {\n opacity: 0;\n }\n\n .layer__drag-handle__placeholder {\n height: 20px;\n padding: 10px;\n }\n\n ", "\n\n :hover {\n cursor: pointer;\n background-color: ", ";\n\n .layer__drag-handle {\n opacity: 1;\n }\n\n .layer__remove-layer {\n opacity: 1;\n }\n }\n"])), function (props) {
75
78
  return props.theme.layerPanelHeaderHeight;
76
79
  }, function (props) {
77
- return props.warning ? getBorderCss('warning') : '';
80
+ return props.warning ? getBorderCss('warning') : props.isValid ? '' : getBorderCss('error');
78
81
  }, function (props) {
79
82
  return props.theme.panelBackgroundHover;
80
83
  });
@@ -100,15 +103,22 @@ var StyledDragHandle = _styledComponents["default"].div(_templateObject6 || (_te
100
103
  return props.theme.textColorHl;
101
104
  });
102
105
 
103
- var DragHandle = (0, _reactSortableHoc.SortableHandle)(function (_ref4) {
106
+ var DragHandle = function DragHandle(_ref4) {
104
107
  var className = _ref4.className,
108
+ listeners = _ref4.listeners,
105
109
  children = _ref4.children;
106
- return /*#__PURE__*/_react["default"].createElement(StyledDragHandle, {
110
+ return /*#__PURE__*/_react["default"].createElement(StyledDragHandle, (0, _extends2["default"])({
107
111
  className: className
108
- }, children);
109
- });
112
+ }, listeners ? listeners : {}), children);
113
+ };
114
+
110
115
  exports.DragHandle = DragHandle;
111
116
 
117
+ var noOp = function noOp(event) {
118
+ event.stopPropagation();
119
+ event.preventDefault();
120
+ };
121
+
112
122
  var LayerLabelEditor = function LayerLabelEditor(_ref5) {
113
123
  var layerId = _ref5.layerId,
114
124
  label = _ref5.label,
@@ -118,10 +128,9 @@ var LayerLabelEditor = function LayerLabelEditor(_ref5) {
118
128
  return /*#__PURE__*/_react["default"].createElement(_styledComponents2.InlineInput, {
119
129
  type: "text",
120
130
  className: "layer__title__editor",
131
+ "data-testid": _constants.dataTestIds.layerTitleEditor,
121
132
  value: label,
122
- onClick: function onClick(e) {
123
- e.stopPropagation();
124
- },
133
+ onClick: noOp,
125
134
  onChange: onEdit,
126
135
  onFocus: onFocus,
127
136
  onBlur: onBlur,
@@ -161,6 +170,70 @@ function LayerTitleSectionFactory() {
161
170
  return LayerTitleSection;
162
171
  }
163
172
 
173
+ LayerPanelHeaderActionSectionFactory.deps = [_panelHeaderAction["default"]];
174
+
175
+ function LayerPanelHeaderActionSectionFactory(PanelHeaderAction) {
176
+ var LayerPanelHeaderActionSection = function LayerPanelHeaderActionSection(props) {
177
+ var isConfigActive = props.isConfigActive,
178
+ allowDuplicate = props.allowDuplicate,
179
+ isVisible = props.isVisible,
180
+ isValid = props.isValid,
181
+ layerId = props.layerId,
182
+ onToggleVisibility = props.onToggleVisibility,
183
+ onResetIsValid = props.onResetIsValid,
184
+ onToggleEnableConfig = props.onToggleEnableConfig,
185
+ onDuplicateLayer = props.onDuplicateLayer,
186
+ onRemoveLayer = props.onRemoveLayer,
187
+ showRemoveLayer = props.showRemoveLayer,
188
+ isEditingLabel = props.isEditingLabel,
189
+ _props$actionIcons = props.actionIcons,
190
+ actionIcons = _props$actionIcons === void 0 ? defaultActionIcons : _props$actionIcons;
191
+ return /*#__PURE__*/_react["default"].createElement(HeaderActionSection, {
192
+ className: "layer-panel__header__actions",
193
+ isEditingLabel: isEditingLabel
194
+ }, /*#__PURE__*/_react["default"].createElement(StyledPanelHeaderHiddenActions, {
195
+ isConfigActive: isConfigActive
196
+ }, showRemoveLayer ? /*#__PURE__*/_react["default"].createElement(PanelHeaderAction, {
197
+ className: "layer__remove-layer",
198
+ testId: "remove-layer-action",
199
+ id: layerId,
200
+ tooltip: 'tooltip.removeLayer',
201
+ onClick: onRemoveLayer,
202
+ tooltipType: "error",
203
+ IconComponent: actionIcons.remove
204
+ }) : null, /*#__PURE__*/_react["default"].createElement(PanelHeaderAction, {
205
+ className: "layer__duplicate",
206
+ id: layerId,
207
+ tooltip: 'tooltip.duplicateLayer',
208
+ onClick: onDuplicateLayer,
209
+ IconComponent: actionIcons.duplicate,
210
+ disabled: !allowDuplicate
211
+ })), isValid ? /*#__PURE__*/_react["default"].createElement(PanelHeaderAction, {
212
+ className: "layer__visibility-toggle",
213
+ id: layerId,
214
+ tooltip: isVisible ? 'tooltip.hideLayer' : 'tooltip.showLayer',
215
+ onClick: onToggleVisibility,
216
+ IconComponent: isVisible ? actionIcons.visible : actionIcons.hidden
217
+ }) : /*#__PURE__*/_react["default"].createElement(PanelHeaderAction, {
218
+ className: "layer__is-valid-refresh",
219
+ id: layerId,
220
+ tooltip: 'tooltip.resetAfterError',
221
+ onClick: onResetIsValid,
222
+ IconComponent: actionIcons.resetIsValid
223
+ }), /*#__PURE__*/_react["default"].createElement(PanelHeaderAction, {
224
+ className: (0, _classnames["default"])('layer__enable-config ', {
225
+ 'is-open': isConfigActive
226
+ }),
227
+ id: layerId,
228
+ tooltip: 'tooltip.layerSettings',
229
+ onClick: onToggleEnableConfig,
230
+ IconComponent: actionIcons.enableConfig
231
+ }));
232
+ };
233
+
234
+ return LayerPanelHeaderActionSection;
235
+ }
236
+
164
237
  var StyledHeaderWaring = _styledComponents["default"].div(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2["default"])(["\n position: absolute;\n right: -9px;\n top: calc(50% - 9px);\n color: ", ";\n"])), function (_ref7) {
165
238
  var theme = _ref7.theme;
166
239
  return theme.notificationColors.warning;
@@ -182,34 +255,29 @@ var HeaderWarning = function HeaderWarning(_ref8) {
182
255
  };
183
256
 
184
257
  exports.HeaderWarning = HeaderWarning;
185
- LayerPanelHeaderFactory.deps = [LayerTitleSectionFactory, _panelHeaderAction["default"]];
186
258
  var defaultActionIcons = {
187
259
  remove: _icons.Trash,
188
260
  visible: _icons.EyeSeen,
189
261
  hidden: _icons.EyeUnseen,
190
262
  enableConfig: _icons.ArrowDown,
191
- duplicate: _icons.Copy
263
+ duplicate: _icons.Copy,
264
+ resetIsValid: _icons.Reset
192
265
  };
193
-
194
- function LayerPanelHeaderFactory(LayerTitleSection, PanelHeaderAction) {
195
- var LayerPanelHeader = function LayerPanelHeader(_ref9) {
196
- var isConfigActive = _ref9.isConfigActive,
197
- allowDuplicate = _ref9.allowDuplicate,
198
- isDragNDropEnabled = _ref9.isDragNDropEnabled,
199
- isVisible = _ref9.isVisible,
200
- warning = _ref9.warning,
201
- label = _ref9.label,
202
- layerId = _ref9.layerId,
203
- layerType = _ref9.layerType,
204
- labelRCGColorValues = _ref9.labelRCGColorValues,
205
- onToggleVisibility = _ref9.onToggleVisibility,
206
- onUpdateLayerLabel = _ref9.onUpdateLayerLabel,
207
- onToggleEnableConfig = _ref9.onToggleEnableConfig,
208
- onDuplicateLayer = _ref9.onDuplicateLayer,
209
- onRemoveLayer = _ref9.onRemoveLayer,
210
- showRemoveLayer = _ref9.showRemoveLayer,
211
- _ref9$actionIcons = _ref9.actionIcons,
212
- actionIcons = _ref9$actionIcons === void 0 ? defaultActionIcons : _ref9$actionIcons;
266
+ LayerPanelHeaderFactory.deps = [LayerTitleSectionFactory, LayerPanelHeaderActionSectionFactory];
267
+
268
+ function LayerPanelHeaderFactory(LayerTitleSection, LayerPanelHeaderActionSection) {
269
+ var LayerPanelHeader = function LayerPanelHeader(props) {
270
+ var isConfigActive = props.isConfigActive,
271
+ isDragNDropEnabled = props.isDragNDropEnabled,
272
+ isValid = props.isValid,
273
+ warning = props.warning,
274
+ label = props.label,
275
+ layerId = props.layerId,
276
+ layerType = props.layerType,
277
+ labelRCGColorValues = props.labelRCGColorValues,
278
+ onUpdateLayerLabel = props.onUpdateLayerLabel,
279
+ onToggleEnableConfig = props.onToggleEnableConfig,
280
+ listeners = props.listeners;
213
281
 
214
282
  var _useState = (0, _react.useState)(false),
215
283
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
@@ -220,6 +288,7 @@ function LayerPanelHeaderFactory(LayerTitleSection, PanelHeaderAction) {
220
288
  className: (0, _classnames["default"])('layer-panel__header', {
221
289
  'sort--handle': !isConfigActive
222
290
  }),
291
+ isValid: isValid,
223
292
  warning: warning,
224
293
  active: isConfigActive,
225
294
  labelRCGColorValues: labelRCGColorValues,
@@ -230,7 +299,8 @@ function LayerPanelHeaderFactory(LayerTitleSection, PanelHeaderAction) {
230
299
  }) : null, /*#__PURE__*/_react["default"].createElement(HeaderLabelSection, {
231
300
  className: "layer-panel__header__content"
232
301
  }, isDragNDropEnabled ? /*#__PURE__*/_react["default"].createElement(DragHandle, {
233
- className: "layer__drag-handle"
302
+ className: "layer__drag-handle",
303
+ listeners: listeners
234
304
  }, /*#__PURE__*/_react["default"].createElement(_icons.VertDots, {
235
305
  height: "20px"
236
306
  })) : /*#__PURE__*/_react["default"].createElement("div", {
@@ -246,39 +316,8 @@ function LayerPanelHeaderFactory(LayerTitleSection, PanelHeaderAction) {
246
316
  onBlur: function onBlur() {
247
317
  setIsEditingLabel(false);
248
318
  }
249
- })), /*#__PURE__*/_react["default"].createElement(HeaderActionSection, {
250
- className: "layer-panel__header__actions",
319
+ })), /*#__PURE__*/_react["default"].createElement(LayerPanelHeaderActionSection, (0, _extends2["default"])({}, props, {
251
320
  isEditingLabel: isEditingLabel
252
- }, /*#__PURE__*/_react["default"].createElement(StyledPanelHeaderHiddenActions, {
253
- isConfigActive: isConfigActive
254
- }, showRemoveLayer ? /*#__PURE__*/_react["default"].createElement(PanelHeaderAction, {
255
- className: "layer__remove-layer",
256
- id: layerId,
257
- tooltip: 'tooltip.removeLayer',
258
- onClick: onRemoveLayer,
259
- tooltipType: "error",
260
- IconComponent: actionIcons.remove
261
- }) : null, /*#__PURE__*/_react["default"].createElement(PanelHeaderAction, {
262
- className: "layer__duplicate",
263
- id: layerId,
264
- tooltip: 'tooltip.duplicateLayer',
265
- onClick: onDuplicateLayer,
266
- IconComponent: actionIcons.duplicate,
267
- disabled: !allowDuplicate
268
- })), /*#__PURE__*/_react["default"].createElement(PanelHeaderAction, {
269
- className: "layer__visibility-toggle",
270
- id: layerId,
271
- tooltip: isVisible ? 'tooltip.hideLayer' : 'tooltip.showLayer',
272
- onClick: onToggleVisibility,
273
- IconComponent: isVisible ? actionIcons.visible : actionIcons.hidden
274
- }), /*#__PURE__*/_react["default"].createElement(PanelHeaderAction, {
275
- className: (0, _classnames["default"])('layer__enable-config ', {
276
- 'is-open': isConfigActive
277
- }),
278
- id: layerId,
279
- tooltip: 'tooltip.layerSettings',
280
- onClick: onToggleEnableConfig,
281
- IconComponent: actionIcons.enableConfig
282
321
  })));
283
322
  };
284
323
 
@@ -288,4 +327,4 @@ function LayerPanelHeaderFactory(LayerTitleSection, PanelHeaderAction) {
288
327
 
289
328
  var _default = LayerPanelHeaderFactory;
290
329
  exports["default"] = _default;
291
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zaWRlLXBhbmVsL2xheWVyLXBhbmVsL2xheWVyLXBhbmVsLWhlYWRlci50c3giXSwibmFtZXMiOlsiZGVmYXVsdFByb3BzIiwiaXNEcmFnTkRyb3BFbmFibGVkIiwic2hvd1JlbW92ZUxheWVyIiwiZ2V0Qm9yZGVyQ3NzIiwic3RhdHVzIiwiY3NzIiwidGhlbWUiLCJub3RpZmljYXRpb25Db2xvcnMiLCJTdHlsZWRMYXllclBhbmVsSGVhZGVyIiwiU3R5bGVkUGFuZWxIZWFkZXIiLCJwcm9wcyIsImxheWVyUGFuZWxIZWFkZXJIZWlnaHQiLCJ3YXJuaW5nIiwicGFuZWxCYWNrZ3JvdW5kSG92ZXIiLCJIZWFkZXJMYWJlbFNlY3Rpb24iLCJzdHlsZWQiLCJkaXYiLCJ0ZXh0Q29sb3IiLCJIZWFkZXJBY3Rpb25TZWN0aW9uIiwiaXNFZGl0aW5nTGFiZWwiLCJTdHlsZWRQYW5lbEhlYWRlckhpZGRlbkFjdGlvbnMiLCJhdHRycyIsImNsYXNzTmFtZSIsImlzQ29uZmlnQWN0aXZlIiwicGFuZWxCYWNrZ3JvdW5kIiwiU3R5bGVkRHJhZ0hhbmRsZSIsInRleHRDb2xvckhsIiwiRHJhZ0hhbmRsZSIsImNoaWxkcmVuIiwiTGF5ZXJMYWJlbEVkaXRvciIsImxheWVySWQiLCJsYWJlbCIsIm9uRWRpdCIsIm9uRm9jdXMiLCJvbkJsdXIiLCJlIiwic3RvcFByb3BhZ2F0aW9uIiwiTGF5ZXJUaXRsZVNlY3Rpb25GYWN0b3J5IiwiU3R5bGVkTGF5ZXJUaXRsZVNlY3Rpb24iLCJzdWJ0ZXh0Q29sb3IiLCJMYXllclRpdGxlU2VjdGlvbiIsImxheWVyVHlwZSIsIm9uVXBkYXRlTGF5ZXJMYWJlbCIsInRvTG93ZXJDYXNlIiwiU3R5bGVkSGVhZGVyV2FyaW5nIiwiSGVhZGVyV2FybmluZyIsImlkIiwiTGF5ZXJQYW5lbEhlYWRlckZhY3RvcnkiLCJkZXBzIiwiUGFuZWxIZWFkZXJBY3Rpb25GYWN0b3J5IiwiZGVmYXVsdEFjdGlvbkljb25zIiwicmVtb3ZlIiwiVHJhc2giLCJ2aXNpYmxlIiwiRXllU2VlbiIsImhpZGRlbiIsIkV5ZVVuc2VlbiIsImVuYWJsZUNvbmZpZyIsIkFycm93RG93biIsImR1cGxpY2F0ZSIsIkNvcHkiLCJQYW5lbEhlYWRlckFjdGlvbiIsIkxheWVyUGFuZWxIZWFkZXIiLCJhbGxvd0R1cGxpY2F0ZSIsImlzVmlzaWJsZSIsImxhYmVsUkNHQ29sb3JWYWx1ZXMiLCJvblRvZ2dsZVZpc2liaWxpdHkiLCJvblRvZ2dsZUVuYWJsZUNvbmZpZyIsIm9uRHVwbGljYXRlTGF5ZXIiLCJvblJlbW92ZUxheWVyIiwiYWN0aW9uSWNvbnMiLCJzZXRJc0VkaXRpbmdMYWJlbCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQW9CQTs7QUFPQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFXQTs7OztBQStDTyxJQUFNQSxZQUFZLEdBQUc7QUFDMUJDLEVBQUFBLGtCQUFrQixFQUFFLElBRE07QUFFMUJDLEVBQUFBLGVBQWUsRUFBRTtBQUZTLENBQXJCOzs7QUFLUCxJQUFNQyxZQUFZLEdBQUcsU0FBZkEsWUFBZSxDQUFBQyxNQUFNO0FBQUEsYUFDekJDLHFCQUR5QixvTUFFQztBQUFBLFFBQUVDLEtBQUYsUUFBRUEsS0FBRjtBQUFBLFdBQWFBLEtBQUssQ0FBQ0Msa0JBQU4sQ0FBeUJILE1BQXpCLENBQWI7QUFBQSxHQUZELEVBR0k7QUFBQSxRQUFFRSxLQUFGLFNBQUVBLEtBQUY7QUFBQSxXQUFhQSxLQUFLLENBQUNDLGtCQUFOLENBQXlCSCxNQUF6QixDQUFiO0FBQUEsR0FISixFQUlHO0FBQUEsUUFBRUUsS0FBRixTQUFFQSxLQUFGO0FBQUEsV0FBYUEsS0FBSyxDQUFDQyxrQkFBTixDQUF5QkgsTUFBekIsQ0FBYjtBQUFBLEdBSkg7QUFBQSxDQUEzQjs7QUFPQSxJQUFNSSxzQkFBc0IsR0FBRyxrQ0FBT0Msb0NBQVAsQ0FBSCxtZUFDaEIsVUFBQUMsS0FBSztBQUFBLFNBQUlBLEtBQUssQ0FBQ0osS0FBTixDQUFZ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L0ZEOztBQWlHQUssRUFBQUEsZ0JBQWdCLENBQUM5RCxZQUFqQixHQUFnQ0EsWUFBaEM7QUFFQSxTQUFPOEQsZ0JBQVA7QUFDRDs7ZUFFY2YsdUIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjIgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgUmVhY3QsIHtcbiAgdXNlU3RhdGUsXG4gIENvbXBvbmVudFR5cGUsXG4gIE1vdXNlRXZlbnRIYW5kbGVyLFxuICBNb3VzZUV2ZW50LFxuICBDaGFuZ2VFdmVudEhhbmRsZXJcbn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgc3R5bGVkLCB7Y3NzfSBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQge1NvcnRhYmxlSGFuZGxlfSBmcm9tICdyZWFjdC1zb3J0YWJsZS1ob2MnO1xuaW1wb3J0IFBhbmVsSGVhZGVyQWN0aW9uRmFjdG9yeSBmcm9tICcuLi9wYW5lbC1oZWFkZXItYWN0aW9uJztcbmltcG9ydCB7VG9vbHRpcH0gZnJvbSAnLi4vLi4vY29tbW9uL3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7XG4gIENvcHksXG4gIEFycm93RG93bixcbiAgRXllU2VlbixcbiAgRXllVW5zZWVuLFxuICBUcmFzaCxcbiAgVmVydERvdHMsXG4gIFdhcm5pbmdTaWduXG59IGZyb20gJy4uLy4uL2NvbW1vbi9pY29ucyc7XG5cbmltcG9ydCB7SW5saW5lSW5wdXQsIFN0eWxlZFBhbmVsSGVhZGVyfSBmcm9tICcuLi8uLi9jb21tb24vc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtGb3JtYXR0ZWRNZXNzYWdlfSBmcm9tICdAa2VwbGVyLmdsL2xvY2FsaXphdGlvbic7XG5pbXBvcnQge1JHQkNvbG9yfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7QmFzZVByb3BzfSBmcm9tICcuLi8uLi9jb21tb24vaWNvbnMnO1xuXG50eXBlIExheWVyTGFiZWxFZGl0b3JQcm9wcyA9IHtcbiAgbGF5ZXJJZDogc3RyaW5nO1xuICBsYWJlbD86IHN0cmluZztcbiAgb25FZGl0OiBDaGFuZ2VFdmVudEhhbmRsZXI7XG4gIG9uRm9jdXM6IENoYW5nZUV2ZW50SGFuZGxlcjtcbiAgb25CbHVyOiBDaGFuZ2VFdmVudEhhbmRsZXI7XG59O1xuXG50eXBlIExheWVyVGl0bGVTZWN0aW9uUHJvcHMgPSB7XG4gIGxheWVyVHlwZT86IHN0cmluZyB8IG51bGw7XG4gIGxheWVySWQ6IHN0cmluZztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIG9uVXBkYXRlTGF5ZXJMYWJlbDogQ2hhbmdlRXZlbnRIYW5kbGVyO1xuICBvbkZvY3VzOiBDaGFuZ2VFdmVudEhhbmRsZXI7XG4gIG9uQmx1cjogQ2hhbmdlRXZlbnRIYW5kbGVyO1xufTtcblxudHlwZSBMYXllclBhbmVsSGVhZGVyUHJvcHMgPSB7XG4gIGxheWVySWQ6IHN0cmluZztcbiAgaXNWaXNpYmxlOiBib29sZWFuO1xuICBvblRvZ2dsZVZpc2liaWxpdHk6IE1vdXNlRXZlbnRIYW5kbGVyO1xuICBvblVwZGF0ZUxheWVyTGFiZWw6IENoYW5nZUV2ZW50SGFuZGxlcjtcbiAgb25Ub2dnbGVFbmFibGVDb25maWc6IE1vdXNlRXZlbnRIYW5kbGVyO1xuICBvblJlbW92ZUxheWVyOiBNb3VzZUV2ZW50SGFuZGxlcjtcbiAgb25EdXBsaWNhdGVMYXllcjogTW91c2VFdmVudEhhbmRsZXI7XG4gIGlzQ29uZmlnQWN0aXZlOiBib29sZWFuO1xuICBzaG93UmVtb3ZlTGF5ZXI/OiBib29sZWFuO1xuICBsYWJlbD86IHN0cmluZztcbiAgbGF5ZXJUeXBlPzogc3RyaW5nIHwgbnVsbDtcbiAgYWxsb3dEdXBsaWNhdGU/OiBib29sZWFuO1xuICBpc0RyYWdORHJvcEVuYWJsZWQ/OiBib29sZWFuO1xuICB3YXJuaW5nPzogYm9vbGVhbjtcbiAgbGFiZWxSQ0dDb2xvclZhbHVlcz86IFJHQkNvbG9yIHwgbnVsbDtcbiAgYWN0aW9uSWNvbnM/OiB7XG4gICAgcmVtb3ZlOiBDb21wb25lbnRUeXBlPFBhcnRpYWw8QmFzZVByb3BzPj47XG4gICAgdmlzaWJsZTogQ29tcG9uZW50VHlwZTxQYXJ0aWFsPEJhc2VQcm9wcz4+O1xuICAgIGhpZGRlbjogQ29tcG9uZW50VHlwZTxQYXJ0aWFsPEJhc2VQcm9wcz4+O1xuICAgIGVuYWJsZUNvbmZpZzogQ29tcG9uZW50VHlwZTxQYXJ0aWFsPEJhc2VQcm9wcz4+O1xuICAgIHJlc2V0SXNWYWxpZDogQ29tcG9uZW50VHlwZTxQYXJ0aWFsPEJhc2VQcm9wcz4+O1xuICAgIGR1cGxpY2F0ZTogQ29tcG9uZW50VHlwZTxQYXJ0aWFsPEJhc2VQcm9wcz4+O1xuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRQcm9wcyA9IHtcbiAgaXNEcmFnTkRyb3BFbmFibGVkOiB0cnVlLFxuICBzaG93UmVtb3ZlTGF5ZXI6IHRydWVcbn07XG5cbmNvbnN0IGdldEJvcmRlckNzcyA9IHN0YXR1cyA9PlxuICBjc3NgXG4gICAgYm9yZGVyLXRvcDogMnB4IHNvbGlkICR7KHt0aGVtZX0pID0+IHRoZW1lLm5vdGlmaWNhdGlvbkNvbG9yc1tzdGF0dXNdfTtcbiAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgJHsoe3RoZW1lfSkgPT4gdGhlbWUubm90aWZpY2F0aW9uQ29sb3JzW3N0YXR1c119O1xuICAgIGJvcmRlci1yaWdodDogMnB4IHNvbGlkICR7KHt0aGVtZX0pID0+IHRoZW1lLm5vdGlmaWNhdGlvbkNvbG9yc1tzdGF0dXNdfTtcbiAgYDtcblxuY29uc3QgU3R5bGVkTGF5ZXJQYW5lbEhlYWRlciA9IHN0eWxlZChTdHlsZWRQYW5lbEhlYWRlcilgXG4gIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5sYXllclBhbmVsSGVhZGVySGVpZ2h0fXB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuXG4gIC5sYXllcl9fcmVtb3ZlLWxheWVyIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG5cbiAgLmxheWVyX19kcmFnLWhhbmRsZV9fcGxhY2Vob2xkZXIge1xuICAgIGhlaWdodDogMjBweDtcbiAgICBwYWRkaW5nOiAxMHB4O1xuICB9XG5cbiAgJHtwcm9wcyA9PiAocHJvcHMud2FybmluZyA/IGdldEJvcmRlckNzcygnd2FybmluZycpIDogJycpfVxuXG4gIDpob3ZlciB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUucGFuZWxCYWNrZ3JvdW5kSG92ZXJ9O1xuXG4gICAgLmxheWVyX19kcmFnLWhhbmRsZSB7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgIH1cblxuICAgIC5sYXllcl9fcmVtb3ZlLWxheWVyIHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBIZWFkZXJMYWJlbFNlY3Rpb24gPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS50ZXh0Q29sb3J9O1xuICBmbGV4LWdyb3c6IDE7XG4gIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICAvLyBsZWF2ZSBzcGFjZSBmb3IgZXllIGFuZCBjb2xsYXBzZSBpY29uXG4gIHBhZGRpbmctcmlnaHQ6IDUwcHg7XG5gO1xuXG50eXBlIEhlYWRlckFjdGlvblNlY3Rpb25Qcm9wcyA9IHtcbiAgaXNFZGl0aW5nTGFiZWw6IGJvb2xlYW47XG59O1xuXG5jb25zdCBIZWFkZXJBY3Rpb25TZWN0aW9uID0gc3R5bGVkLmRpdjxIZWFkZXJBY3Rpb25TZWN0aW9uUHJvcHM+YFxuICBkaXNwbGF5OiBmbGV4O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGhlaWdodDogMTAwJTtcbiAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG4gIHJpZ2h0OiAxMHB4O1xuICBwb2ludGVyLWV2ZW50czogJHtwcm9wcyA9PiAocHJvcHMuaXNFZGl0aW5nTGFiZWwgPyAnbm9uZScgOiAnYWxsJyl9O1xuICA6aG92ZXIge1xuICAgIC5sYXllci1wYW5lbF9faGVhZGVyX19hY3Rpb25zX19oaWRkZW4ge1xuICAgICAgb3BhY2l0eTogMTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUucGFuZWxCYWNrZ3JvdW5kSG92ZXJ9O1xuICAgIH1cbiAgfVxuYDtcblxudHlwZSBTdHlsZWRQYW5lbEhlYWRlckhpZGRlbkFjdGlvbnNQcm9wcyA9IHtcbiAgaXNDb25maWdBY3RpdmU6IExheWVyUGFuZWxIZWFkZXJQcm9wc1snaXNDb25maWdBY3RpdmUnXTtcbn07XG5cbi8vIEhpZGVuIGFjdGlvbnMgb25seSBzaG93IHVwIG9uIGhvdmVyXG5jb25zdCBTdHlsZWRQYW5lbEhlYWRlckhpZGRlbkFjdGlvbnMgPSBzdHlsZWQuZGl2LmF0dHJzKHtcbiAgY2xhc3NOYW1lOiAnbGF5ZXItcGFuZWxfX2hlYWRlcl9fYWN0aW9uc19faGlkZGVuJ1xufSk8U3R5bGVkUGFuZWxIZWFkZXJIaWRkZW5BY3Rpb25zUHJvcHM+YFxuICBvcGFjaXR5OiAwO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzID0+XG4gICAgcHJvcHMuaXNDb25maWdBY3RpdmUgPyBwcm9wcy50aGVtZS5wYW5lbEJhY2tncm91bmRIb3ZlciA6IHByb3BzLnRoZW1lLnBhbmVsQmFja2dyb3VuZH07XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC40cyBlYXNlLCBiYWNrZ3JvdW5kLWNvbG9yIDAuNHMgZWFzZTtcblxuICA6aG92ZXIge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbmA7XG5cbmNvbnN0IFN0eWxlZERyYWdIYW5kbGUgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBvcGFjaXR5OiAwO1xuICB6LWluZGV4OiAxMDAwO1xuXG4gIDpob3ZlciB7XG4gICAgY3Vyc29yOiBtb3ZlO1xuICAgIG9wYWNpdHk6IDE7XG4gICAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudGV4dENvbG9ySGx9O1xuICB9XG5gO1xuXG5leHBvcnQgY29uc3QgRHJhZ0hhbmRsZSA9IFNvcnRhYmxlSGFuZGxlKCh7Y2xhc3NOYW1lLCBjaGlsZHJlbn0pID0+IChcbiAgPFN0eWxlZERyYWdIYW5kbGUgY2xhc3NOYW1lPXtjbGFzc05hbWV9PntjaGlsZHJlbn08L1N0eWxlZERyYWdIYW5kbGU+XG4pKTtcblxuZXhwb3J0IGNvbnN0IExheWVyTGFiZWxFZGl0b3I6IFJlYWN0LkZDPExheWVyTGFiZWxFZGl0b3JQcm9wcz4gPSAoe1xuICBsYXllcklkLFxuICBsYWJlbCxcbiAgb25FZGl0LFxuICBvbkZvY3VzLFxuICBvbkJsdXJcbn0pID0+IChcbiAgPElubGluZUlucHV0XG4gICAgdHlwZT1cInRleHRcIlxuICAgIGNsYXNzTmFtZT1cImxheWVyX190aXRsZV9fZWRpdG9yXCJcbiAgICB2YWx1ZT17bGFiZWx9XG4gICAgb25DbGljaz17KGU6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfX1cbiAgICBvbkNoYW5nZT17b25FZGl0fVxuICAgIG9uRm9jdXM9e29uRm9jdXN9XG4gICAgb25CbHVyPXtvbkJsdXJ9XG4gICAgaWQ9e2Ake2xheWVySWR9OmlucHV0LWxheWVyLWxhYmVsYH1cbiAgLz5cbik7XG5cbmV4cG9ydCBmdW5jdGlvbiBMYXllclRpdGxlU2VjdGlvbkZhY3RvcnkoKSB7XG4gIGNvbnN0IFN0eWxlZExheWVyVGl0bGVTZWN0aW9uID0gc3R5bGVkLmRpdmBcbiAgICBtYXJnaW4tbGVmdDogNHB4O1xuICAgIGZsZXgtZ3JvdzogMTtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgLmxheWVyX190aXRsZV9faW5uZXIge1xuICAgICAgZmxleC1ncm93OiAxO1xuICAgIH1cblxuICAgIC5sYXllcl9fdGl0bGVfX3R5cGUge1xuICAgICAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3VidGV4dENvbG9yfTtcbiAgICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxMnB4O1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMzdweDtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplO1xuICAgIH1cbiAgYDtcbiAgY29uc3QgTGF5ZXJUaXRsZVNlY3Rpb246IFJlYWN0LkZDPExheWVyVGl0bGVTZWN0aW9uUHJvcHM+ID0gKHtcbiAgICBsYXllclR5cGUsXG4gICAgbGF5ZXJJZCxcbiAgICBsYWJlbCxcbiAgICBvblVwZGF0ZUxheWVyTGFiZWwsXG4gICAgb25Gb2N1cyxcbiAgICBvbkJsdXJcbiAgfSkgPT4gKFxuICAgIDxTdHlsZWRMYXllclRpdGxlU2VjdGlvbiBjbGFzc05hbWU9XCJsYXllcl9fdGl0bGVcIj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxMYXllckxhYmVsRWRpdG9yXG4gICAgICAgICAgbGF5ZXJJZD17bGF5ZXJJZH1cbiAgICAgICAgICBsYWJlbD17bGFiZWx9XG4gICAgICAgICAgb25FZGl0PXtvblVwZGF0ZUxheWVyTGFiZWx9XG4gICAgICAgICAgb25Gb2N1cz17b25Gb2N1c31cbiAgICAgICAgICBvbkJsdXI9e29uQmx1cn1cbiAgICAgICAgLz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsYXllcl9fdGl0bGVfX3R5cGVcIj5cbiAgICAgICAgICB7bGF5ZXJUeXBlICYmIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPXtgbGF5ZXIudHlwZS4ke2xheWVyVHlwZS50b0xvd2VyQ2FzZSgpfWB9IC8+fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvU3R5bGVkTGF5ZXJUaXRsZVNlY3Rpb24+XG4gICk7XG4gIHJldHVybiBMYXllclRpdGxlU2VjdGlvbjtcbn1cblxuY29uc3QgU3R5bGVkSGVhZGVyV2FyaW5nID0gc3R5bGVkLmRpdmBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogLTlweDtcbiAgdG9wOiBjYWxjKDUwJSAtIDlweCk7XG4gIGNvbG9yOiAkeyh7dGhlbWV9KSA9PiB0aGVtZS5ub3RpZmljYXRpb25Db2xvcnMud2FybmluZ307XG5gO1xuXG5leHBvcnQgY29uc3QgSGVhZGVyV2FybmluZyA9ICh7d2FybmluZywgaWR9KSA9PiAoXG4gIDxTdHlsZWRIZWFkZXJXYXJpbmc+XG4gICAgPFdhcm5pbmdTaWduIGRhdGEtdGlwIGRhdGEtZm9yPXtgbGF5ZXItJHtpZH0td2FybmluZ2B9IGhlaWdodD1cIjE2cHhcIiAvPlxuICAgIDxUb29sdGlwIGlkPXtgbGF5ZXItJHtpZH0td2FybmluZ2B9IHR5cGU9XCJ3YXJuaW5nXCIgZWZmZWN0PVwic29saWRcIiB0ZXh0Q29sb3I9XCJibGFja1wiPlxuICAgICAge3dhcm5pbmd9XG4gICAgPC9Ub29sdGlwPlxuICA8L1N0eWxlZEhlYWRlcldhcmluZz5cbik7XG5MYXllclBhbmVsSGVhZGVyRmFjdG9yeS5kZXBzID0gW0xheWVyVGl0bGVTZWN0aW9uRmFjdG9yeSwgUGFuZWxIZWFkZXJBY3Rpb25GYWN0b3J5XTtcblxuY29uc3QgZGVmYXVsdEFjdGlvbkljb25zID0ge1xuICByZW1vdmU6IFRyYXNoLFxuICB2aXNpYmxlOiBFeWVTZWVuLFxuICBoaWRkZW46IEV5ZVVuc2VlbixcbiAgZW5hYmxlQ29uZmlnOiBBcnJvd0Rvd24sXG4gIGR1cGxpY2F0ZTogQ29weVxufTtcblxuZnVuY3Rpb24gTGF5ZXJQYW5lbEhlYWRlckZhY3RvcnkoXG4gIExheWVyVGl0bGVTZWN0aW9uOiBSZXR1cm5UeXBlPHR5cGVvZiBMYXllclRpdGxlU2VjdGlvbkZhY3Rvcnk+LFxuICBQYW5lbEhlYWRlckFjdGlvbjogUmV0dXJuVHlwZTx0eXBlb2YgUGFuZWxIZWFkZXJBY3Rpb25GYWN0b3J5PlxuKSB7XG4gIGNvbnN0IExheWVyUGFuZWxIZWFkZXI6IFJlYWN0LkZDPExheWVyUGFuZWxIZWFkZXJQcm9wcz4gPSAoe1xuICAgIGlzQ29uZmlnQWN0aXZlLFxuICAgIGFsbG93RHVwbGljYXRlLFxuICAgIGlzRHJhZ05Ecm9wRW5hYmxlZCxcbiAgICBpc1Zpc2libGUsXG4gICAgd2FybmluZyxcbiAgICBsYWJlbCxcbiAgICBsYXllcklkLFxuICAgIGxheWVyVHlwZSxcbiAgICBsYWJlbFJDR0NvbG9yVmFsdWVzLFxuICAgIG9uVG9nZ2xlVmlzaWJpbGl0eSxcbiAgICBvblVwZGF0ZUxheWVyTGFiZWwsXG4gICAgb25Ub2dnbGVFbmFibGVDb25maWcsXG4gICAgb25EdXBsaWNhdGVMYXllcixcbiAgICBvblJlbW92ZUxheWVyLFxuICAgIHNob3dSZW1vdmVMYXllcixcbiAgICBhY3Rpb25JY29ucyA9IGRlZmF1bHRBY3Rpb25JY29uc1xuICB9KSA9PiB7XG4gICAgY29uc3QgW2lzRWRpdGluZ0xhYmVsLCBzZXRJc0VkaXRpbmdMYWJlbF0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFN0eWxlZExheWVyUGFuZWxIZWFkZXJcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc25hbWVzKCdsYXllci1wYW5lbF9faGVhZGVyJywge1xuICAgICAgICAgICdzb3J0LS1oYW5kbGUnOiAhaXNDb25maWdBY3RpdmVcbiAgICAgICAgfSl9XG4gICAgICAgIHdhcm5pbmc9e3dhcm5pbmd9XG4gICAgICAgIGFjdGl2ZT17aXNDb25maWdBY3RpdmV9XG4gICAgICAgIGxhYmVsUkNHQ29sb3JWYWx1ZXM9e2xhYmVsUkNHQ29sb3JWYWx1ZXN9XG4gICAgICAgIG9uQ2xpY2s9e29uVG9nZ2xlRW5hYmxlQ29uZmlnfVxuICAgICAgPlxuICAgICAgICB7d2FybmluZyA/IDxIZWFkZXJXYXJuaW5nIHdhcm5pbmc9e3dhcm5pbmd9IGlkPXtsYXllcklkfSAvPiA6IG51bGx9XG4gICAgICAgIDxIZWFkZXJMYWJlbFNlY3Rpb24gY2xhc3NOYW1lPVwibGF5ZXItcGFuZWxfX2hlYWRlcl9fY29udGVudFwiPlxuICAgICAgICAgIHtpc0RyYWdORHJvcEVuYWJsZWQgPyAoXG4gICAgICAgICAgICA8RHJhZ0hhbmRsZSBjbGFzc05hbWU9XCJsYXllcl9fZHJhZy1oYW5kbGVcIj5cbiAgICAgICAgICAgICAgPFZlcnREb3RzIGhlaWdodD1cIjIwcHhcIiAvPlxuICAgICAgICAgICAgPC9EcmFnSGFuZGxlPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImxheWVyX19kcmFnLWhhbmRsZV9fcGxhY2Vob2xkZXJcIiAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAgPExheWVyVGl0bGVTZWN0aW9uXG4gICAgICAgICAgICBsYXllcklkPXtsYXllcklkfVxuICAgICAgICAgICAgbGFiZWw9e2xhYmVsfVxuICAgICAgICAgICAgb25VcGRhdGVMYXllckxhYmVsPXtvblVwZGF0ZUxheWVyTGFiZWx9XG4gICAgICAgICAgICBsYXllclR5cGU9e2xheWVyVHlwZX1cbiAgICAgICAgICAgIG9uRm9jdXM9eygpID0+IHtcbiAgICAgICAgICAgICAgc2V0SXNFZGl0aW5nTGFiZWwodHJ1ZSk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25CbHVyPXsoKSA9PiB7XG4gICAgICAgICAgICAgIHNldElzRWRpdGluZ0xhYmVsKGZhbHNlKTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9IZWFkZXJMYWJlbFNlY3Rpb24+XG4gICAgICAgIDxIZWFkZXJBY3Rpb25TZWN0aW9uXG4gICAgICAgICAgY2xhc3NOYW1lPVwibGF5ZXItcGFuZWxfX2hlYWRlcl9fYWN0aW9uc1wiXG4gICAgICAgICAgaXNFZGl0aW5nTGFiZWw9e2lzRWRpdGluZ0xhYmVsfVxuICAgICAgICA+XG4gICAgICAgICAgPFN0eWxlZFBhbmVsSGVhZGVySGlkZGVuQWN0aW9ucyBpc0NvbmZpZ0FjdGl2ZT17aXNDb25maWdBY3RpdmV9PlxuICAgICAgICAgICAge3Nob3dSZW1vdmVMYXllciA/IChcbiAgICAgICAgICAgICAgPFBhbmVsSGVhZGVyQWN0aW9uXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibGF5ZXJfX3JlbW92ZS1sYXllclwiXG4gICAgICAgICAgICAgICAgaWQ9e2xheWVySWR9XG4gICAgICAgICAgICAgICAgdG9vbHRpcD17J3Rvb2x0aXAucmVtb3ZlTGF5ZXInfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e29uUmVtb3ZlTGF5ZXJ9XG4gICAgICAgICAgICAgICAgdG9vbHRpcFR5cGU9XCJlcnJvclwiXG4gICAgICAgICAgICAgICAgSWNvbkNvbXBvbmVudD17YWN0aW9uSWNvbnMucmVtb3ZlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICA8UGFuZWxIZWFkZXJBY3Rpb25cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibGF5ZXJfX2R1cGxpY2F0ZVwiXG4gICAgICAgICAgICAgIGlkPXtsYXllcklkfVxuICAgICAgICAgICAgICB0b29sdGlwPXsndG9vbHRpcC5kdXBsaWNhdGVMYXllcid9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e29uRHVwbGljYXRlTGF5ZXJ9XG4gICAgICAgICAgICAgIEljb25Db21wb25lbnQ9e2FjdGlvbkljb25zLmR1cGxpY2F0ZX1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFhbGxvd0R1cGxpY2F0ZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9TdHlsZWRQYW5lbEhlYWRlckhpZGRlbkFjdGlvbnM+XG4gICAgICAgICAgPFBhbmVsSGVhZGVyQWN0aW9uXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJsYXllcl9fdmlzaWJpbGl0eS10b2dnbGVcIlxuICAgICAgICAgICAgaWQ9e2xheWVySWR9XG4gICAgICAgICAgICB0b29sdGlwPXtpc1Zpc2libGUgPyAndG9vbHRpcC5oaWRlTGF5ZXInIDogJ3Rvb2x0aXAuc2hvd0xheWVyJ31cbiAgICAgICAgICAgIG9uQ2xpY2s9e29uVG9nZ2xlVmlzaWJpbGl0eX1cbiAgICAgICAgICAgIEljb25Db21wb25lbnQ9e2lzVmlzaWJsZSA/IGFjdGlvbkljb25zLnZpc2libGUgOiBhY3Rpb25JY29ucy5oaWRkZW59XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8UGFuZWxIZWFkZXJBY3Rpb25cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcygnbGF5ZXJfX2VuYWJsZS1jb25maWcgJywge1xuICAgICAgICAgICAgICAnaXMtb3Blbic6IGlzQ29uZmlnQWN0aXZlXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIGlkPXtsYXllcklkfVxuICAgICAgICAgICAgdG9vbHRpcD17J3Rvb2x0aXAubGF5ZXJTZXR0aW5ncyd9XG4gICAgICAgICAgICBvbkNsaWNrPXtvblRvZ2dsZUVuYWJsZUNvbmZpZ31cbiAgICAgICAgICAgIEljb25Db21wb25lbnQ9e2FjdGlvbkljb25zLmVuYWJsZUNvbmZpZ31cbiAgICAgICAgICAvPlxuICAgICAgICA8L0hlYWRlckFjdGlvblNlY3Rpb24+XG4gICAgICA8L1N0eWxlZExheWVyUGFuZWxIZWFkZXI+XG4gICAgKTtcbiAgfTtcblxuICBMYXllclBhbmVsSGVhZGVyLmRlZmF1bHRQcm9wcyA9IGRlZmF1bHRQcm9wcztcblxuICByZXR1cm4gTGF5ZXJQYW5lbEhlYWRlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTGF5ZXJQYW5lbEhlYWRlckZhY3Rvcnk7XG4iXX0=
330
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zaWRlLXBhbmVsL2xheWVyLXBhbmVsL2xheWVyLXBhbmVsLWhlYWRlci50c3giXSwibmFtZXMiOlsiZGVmYXVsdFByb3BzIiwiaXNEcmFnTkRyb3BFbmFibGVkIiwic2hvd1JlbW92ZUxheWVyIiwiZ2V0Qm9yZGVyQ3NzIiwic3RhdHVzIiwiY3NzIiwidGhlbWUiLCJub3RpZmljYXRpb25Db2xvcnMiLCJTdHlsZWRMYXllclBhbmVsSGVhZGVyIiwiU3R5bGVkUGFuZWxIZWFkZXIiLCJwcm9wcyIsImxheWVyUGFuZWxIZWFkZXJIZWlnaHQiLCJ3YXJuaW5nIiwiaXNWYWxpZCIsInBhbmVsQmFja2dyb3VuZEhvdmVyIiwiSGVhZGVyTGFiZWxTZWN0aW9uIiwic3R5bGVkIiwiZGl2IiwidGV4dENvbG9yIiwiSGVhZGVyQWN0aW9uU2VjdGlvbiIsImlzRWRpdGluZ0xhYmVsIiwiU3R5bGVkUGFuZWxIZWFkZXJIaWRkZW5BY3Rpb25zIiwiYXR0cnMiLCJjbGFzc05hbWUiLCJpc0NvbmZpZ0FjdGl2ZSIsInBhbmVsQmFja2dyb3VuZCIsIlN0eWxlZERyYWdIYW5kbGUiLCJ0ZXh0Q29sb3JIbCIsIkRyYWdIYW5kbGUiLCJsaXN0ZW5lcnMiLCJjaGlsZHJlbiIsIm5vT3AiLCJldmVudCIsInN0b3BQcm9wYWdhdGlvbiIsInByZXZlbnREZWZhdWx0IiwiTGF5ZXJMYWJlbEVkaXRvciIsImxheWVySWQiLCJsYWJlbCIsIm9uRWRpdCIsIm9uRm9jdXMiLCJvbkJsdXIiLCJkYXRhVGVzdElkcyIsImxheWVyVGl0bGVFZGl0b3IiLCJMYXllclRpdGxlU2VjdGlvbkZhY3RvcnkiLCJTdHlsZWRMYXllclRpdGxlU2VjdGlvbiIsInN1YnRleHRDb2xvciIsIkxheWVyVGl0bGVTZWN0aW9uIiwibGF5ZXJUeXBlIiwib25VcGRhdGVMYXllckxhYmVsIiwidG9Mb3dlckNhc2UiLCJMYXllclBhbmVsSGVhZGVyQWN0aW9uU2VjdGlvbkZhY3RvcnkiLCJkZXBzIiwiUGFuZWxIZWFkZXJBY3Rpb25GYWN0b3J5IiwiUGFuZWxIZWFkZXJBY3Rpb24iLCJMYXllclBhbmVsSGVhZGVyQWN0aW9uU2VjdGlvbiIsImFsbG93RHVwbGljYXRlIiwiaXNWaXNpYmxlIiwib25Ub2dnbGVWaXNpYmlsaXR5Iiwib25SZXNldElzVmFsaWQiLCJvblRvZ2dsZUVuYWJsZUNvbmZpZyIsIm9uRHVwbGljYXRlTGF5ZXIiLCJvblJlbW92ZUxheWVyIiwiYWN0aW9uSWNvbnMiLCJkZWZhdWx0QWN0aW9uSWNvbnMiLCJyZW1vdmUiLCJkdXBsaWNhdGUiLCJ2aXNpYmxlIiwiaGlkZGVuIiwicmVzZXRJc1ZhbGlkIiwiZW5hYmxlQ29uZmlnIiwiU3R5bGVkSGVhZGVyV2FyaW5nIiwiSGVhZGVyV2FybmluZyIsImlkIiwiVHJhc2giLCJFeWVTZWVuIiwiRXllVW5zZWVuIiwiQXJyb3dEb3duIiwiQ29weSIsIlJlc2V0IiwiTGF5ZXJQYW5lbEhlYWRlckZhY3RvcnkiLCJMYXllclBhbmVsSGVhZGVyIiwibGFiZWxSQ0dDb2xvclZhbHVlcyIsInNldElzRWRpdGluZ0xhYmVsIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBOztBQU9BOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQVlBOztBQUNBOzs7O0FBd0RPLElBQU1BLFlBQVksR0FBRztBQUMxQkMsRUFBQUEsa0JBQWtCLEVBQUUsSUFETTtBQUUxQkMsRUFBQUEsZUFBZSxFQUFFO0FBRlMsQ0FBckI7OztBQUtQLElBQU1DLFlBQVksR0FBRyxTQUFmQSxZQUFlLENBQUFDLE1BQU07QUFBQSxhQUN6QkMscUJBRHlCLG9NQUVDO0FBQUEsUUFBRUMsS0FBRixRQUFFQSxLQUFGO0FBQUEsV0FBYUEsS0FBSyxDQUFDQyxrQkFBTixDQUF5QkgsTUFBekIsQ0FBYjtBQUFBLEdBRkQsRUFHSTtBQUFBLFFBQUVFLEtBQUYsU0FBRUEsS0FBRjtBQUFBLFdBQWFBLEtBQUssQ0FBQ0Msa0JBQU4sQ0FBeUJILE1BQXpCLENBQWI7QUFB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QUFEO0FBQWUsTUFBQSxPQUFPLEVBQUVBLE9BQXhCO0FBQWlDLE1BQUEsRUFBRSxFQUFFd0I7QUFBckMsTUFBSCxHQUFzRCxJQVZoRSxlQVdFLGdDQUFDLGtCQUFEO0FBQW9CLE1BQUEsU0FBUyxFQUFDO0FBQTlCLE9BQ0duQyxrQkFBa0IsZ0JBQ2pCLGdDQUFDLFVBQUQ7QUFBWSxNQUFBLFNBQVMsRUFBQyxvQkFBdEI7QUFBMkMsTUFBQSxTQUFTLEVBQUU0QjtBQUF0RCxvQkFDRSxnQ0FBQyxlQUFEO0FBQVUsTUFBQSxNQUFNLEVBQUM7QUFBakIsTUFERixDQURpQixnQkFLakI7QUFBSyxNQUFBLFNBQVMsRUFBQztBQUFmLE1BTkosZUFRRSxnQ0FBQyxpQkFBRDtBQUNFLE1BQUEsT0FBTyxFQUFFTyxPQURYO0FBRUUsTUFBQSxLQUFLLEVBQUVDLEtBRlQ7QUFHRSxNQUFBLGtCQUFrQixFQUFFVyxrQkFIdEI7QUFJRSxNQUFBLFNBQVMsRUFBRUQsU0FKYjtBQUtFLE1BQUEsT0FBTyxFQUFFLG1CQUFNO0FBQ2JtQyxRQUFBQSxpQkFBaUIsQ0FBQyxJQUFELENBQWpCO0FBQ0QsT0FQSDtBQVFFLE1BQUEsTUFBTSxFQUFFLGtCQUFNO0FBQ1pBLFFBQUFBLGlCQUFpQixDQUFDLEtBQUQsQ0FBakI7QUFDRDtBQVZILE1BUkYsQ0FYRixlQWdDRSxnQ0FBQyw2QkFBRCxnQ0FBbUN4RSxLQUFuQztBQUEwQyxNQUFBLGNBQWMsRUFBRVU7QUFBMUQsT0FoQ0YsQ0FERjtBQW9DRCxHQW5ERDs7QUFxREE0RCxFQUFBQSxnQkFBZ0IsQ0FBQ2hGLFlBQWpCLEdBQWdDQSxZQUFoQztBQUVBLFNBQU9nRixnQkFBUDtBQUNEOztlQUVjRCx1QiIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAyMyBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCBSZWFjdCwge1xuICB1c2VTdGF0ZSxcbiAgQ29tcG9uZW50VHlwZSxcbiAgTW91c2VFdmVudEhhbmRsZXIsXG4gIE1vdXNlRXZlbnQsXG4gIENoYW5nZUV2ZW50SGFuZGxlclxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBzdHlsZWQsIHtjc3N9IGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCBQYW5lbEhlYWRlckFjdGlvbkZhY3RvcnkgZnJvbSAnLi4vcGFuZWwtaGVhZGVyLWFjdGlvbic7XG5pbXBvcnQge1Rvb2x0aXB9IGZyb20gJy4uLy4uL2NvbW1vbi9zdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICBDb3B5LFxuICBBcnJvd0Rvd24sXG4gIEV5ZVNlZW4sXG4gIEV5ZVVuc2VlbixcbiAgVHJhc2gsXG4gIFZlcnREb3RzLFxuICBXYXJuaW5nU2lnbixcbiAgUmVzZXRcbn0gZnJvbSAnLi4vLi4vY29tbW9uL2ljb25zJztcblxuaW1wb3J0IHtJbmxpbmVJbnB1dCwgU3R5bGVkUGFuZWxIZWFkZXJ9IGZyb20gJy4uLy4uL2NvbW1vbi9zdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQge0Zvcm1hdHRlZE1lc3NhZ2V9IGZyb20gJ0BrZXBsZXIuZ2wvbG9jYWxpemF0aW9uJztcbmltcG9ydCB7ZGF0YVRlc3RJZHN9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7UkdCQ29sb3J9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtCYXNlUHJvcHN9IGZyb20gJy4uLy4uL2NvbW1vbi9pY29ucyc7XG5cbmV4cG9ydCB0eXBlIExheWVyTGFiZWxFZGl0b3JQcm9wcyA9IHtcbiAgbGF5ZXJJZDogc3RyaW5nO1xuICBsYWJlbD86IHN0cmluZztcbiAgb25FZGl0OiBDaGFuZ2VFdmVudEhhbmRsZXI7XG4gIG9uRm9jdXM6IENoYW5nZUV2ZW50SGFuZGxlcjtcbiAgb25CbHVyOiBDaGFuZ2VFdmVudEhhbmRsZXI7XG59O1xuXG5leHBvcnQgdHlwZSBMYXllclRpdGxlU2VjdGlvblByb3BzID0ge1xuICBsYXllclR5cGU/OiBzdHJpbmcgfCBudWxsO1xuICBsYXllcklkOiBzdHJpbmc7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBvblVwZGF0ZUxheWVyTGFiZWw6IENoYW5nZUV2ZW50SGFuZGxlcjtcbiAgb25Gb2N1czogQ2hhbmdlRXZlbnRIYW5kbGVyO1xuICBvbkJsdXI6IENoYW5nZUV2ZW50SGFuZGxlcjtcbn07XG5cbmV4cG9ydCB0eXBlIExheWVyUGFuZWxIZWFkZXJQcm9wcyA9IHtcbiAgbGF5ZXJJZDogc3RyaW5nO1xuICBpc1Zpc2libGU6IGJvb2xlYW47XG4gIGlzVmFsaWQ6IGJvb2xlYW47XG4gIG9uVG9nZ2xlVmlzaWJpbGl0eTogTW91c2VFdmVudEhhbmRsZXI7XG4gIG9uVXBkYXRlTGF5ZXJMYWJlbDogQ2hhbmdlRXZlbnRIYW5kbGVyO1xuICBvblRvZ2dsZUVuYWJsZUNvbmZpZzogTW91c2VFdmVudEhhbmRsZXI7XG4gIG9uUmVtb3ZlTGF5ZXI6IE1vdXNlRXZlbnRIYW5kbGVyO1xuICBvbkR1cGxpY2F0ZUxheWVyOiBNb3VzZUV2ZW50SGFuZGxlcjtcbiAgb25SZXNldElzVmFsaWQ6IE1vdXNlRXZlbnRIYW5kbGVyO1xuICBpc0NvbmZpZ0FjdGl2ZTogYm9vbGVhbjtcbiAgc2hvd1JlbW92ZUxheWVyPzogYm9vbGVhbjtcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIGxheWVyVHlwZT86IHN0cmluZyB8IG51bGw7XG4gIGFsbG93RHVwbGljYXRlPzogYm9vbGVhbjtcbiAgaXNEcmFnTkRyb3BFbmFibGVkPzogYm9vbGVhbjtcbiAgd2FybmluZz86IGJvb2xlYW47XG4gIGxhYmVsUkNHQ29sb3JWYWx1ZXM/OiBSR0JDb2xvciB8IG51bGw7XG4gIGFjdGlvbkljb25zPzoge1xuICAgIHJlbW92ZTogQ29tcG9uZW50VHlwZTxQYXJ0aWFsPEJhc2VQcm9wcz4+O1xuICAgIHZpc2libGU6IENvbXBvbmVudFR5cGU8UGFydGlhbDxCYXNlUHJvcHM+PjtcbiAgICBoaWRkZW46IENvbXBvbmVudFR5cGU8UGFydGlhbDxCYXNlUHJvcHM+PjtcbiAgICBlbmFibGVDb25maWc6IENvbXBvbmVudFR5cGU8UGFydGlhbDxCYXNlUHJvcHM+PjtcbiAgICByZXNldElzVmFsaWQ6IENvbXBvbmVudFR5cGU8UGFydGlhbDxCYXNlUHJvcHM+PjtcbiAgICBkdXBsaWNhdGU6IENvbXBvbmVudFR5cGU8UGFydGlhbDxCYXNlUHJvcHM+PjtcbiAgfTtcbiAgbGlzdGVuZXJzPzogUmVhY3QuRWxlbWVudFR5cGU7XG59O1xuXG50eXBlIEhlYWRlckFjdGlvblNlY3Rpb25Qcm9wcyA9IHtcbiAgaXNFZGl0aW5nTGFiZWw6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBMYXllclBhbmVsSGVhZGVyQWN0aW9uU2VjdGlvblByb3BzID0gTGF5ZXJQYW5lbEhlYWRlclByb3BzICYgSGVhZGVyQWN0aW9uU2VjdGlvblByb3BzO1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdFByb3BzID0ge1xuICBpc0RyYWdORHJvcEVuYWJsZWQ6IHRydWUsXG4gIHNob3dSZW1vdmVMYXllcjogdHJ1ZVxufTtcblxuY29uc3QgZ2V0Qm9yZGVyQ3NzID0gc3RhdHVzID0+XG4gIGNzc2BcbiAgICBib3JkZXItdG9wOiAycHggc29saWQgJHsoe3RoZW1lfSkgPT4gdGhlbWUubm90aWZpY2F0aW9uQ29sb3JzW3N0YXR1c119O1xuICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAkeyh7dGhlbWV9KSA9PiB0aGVtZS5ub3RpZmljYXRpb25Db2xvcnNbc3RhdHVzXX07XG4gICAgYm9yZGVyLXJpZ2h0OiAycHggc29saWQgJHsoe3RoZW1lfSkgPT4gdGhlbWUubm90aWZpY2F0aW9uQ29sb3JzW3N0YXR1c119O1xuICBgO1xuXG5jb25zdCBTdHlsZWRMYXllclBhbmVsSGVhZGVyID0gc3R5bGVkKFN0eWxlZFBhbmVsSGVhZGVyKWBcbiAgaGVpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmxheWVyUGFuZWxIZWFkZXJIZWlnaHR9cHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG5cbiAgLmxheWVyX19yZW1vdmUtbGF5ZXIge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cblxuICAubGF5ZXJfX2RyYWctaGFuZGxlX19wbGFjZWhvbGRlciB7XG4gICAgaGVpZ2h0OiAyMHB4O1xuICAgIHBhZGRpbmc6IDEwcHg7XG4gIH1cblxuICAke3Byb3BzID0+IChwcm9wcy53YXJuaW5nID8gZ2V0Qm9yZGVyQ3NzKCd3YXJuaW5nJykgOiBwcm9wcy5pc1ZhbGlkID8gJycgOiBnZXRCb3JkZXJDc3MoJ2Vycm9yJykpfVxuXG4gIDpob3ZlciB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUucGFuZWxCYWNrZ3JvdW5kSG92ZXJ9O1xuXG4gICAgLmxheWVyX19kcmFnLWhhbmRsZSB7XG4gICAgICBvcGFjaXR5OiAxO1xuICAgIH1cblxuICAgIC5sYXllcl9fcmVtb3ZlLWxheWVyIHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBIZWFkZXJMYWJlbFNlY3Rpb24gPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS50ZXh0Q29sb3J9O1xuICBmbGV4LWdyb3c6IDE7XG4gIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICAvLyBsZWF2ZSBzcGFjZSBmb3IgZXllIGFuZCBjb2xsYXBzZSBpY29uXG4gIHBhZGRpbmctcmlnaHQ6IDUwcHg7XG5gO1xuXG5jb25zdCBIZWFkZXJBY3Rpb25TZWN0aW9uID0gc3R5bGVkLmRpdjxIZWFkZXJBY3Rpb25TZWN0aW9uUHJvcHM+YFxuICBkaXNwbGF5OiBmbGV4O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGhlaWdodDogMTAwJTtcbiAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG4gIHJpZ2h0OiAxMHB4O1xuICBwb2ludGVyLWV2ZW50czogJHtwcm9wcyA9PiAocHJvcHMuaXNFZGl0aW5nTGFiZWwgPyAnbm9uZScgOiAnYWxsJyl9O1xuICA6aG92ZXIge1xuICAgIC5sYXllci1wYW5lbF9faGVhZGVyX19hY3Rpb25zX19oaWRkZW4ge1xuICAgICAgb3BhY2l0eTogMTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUucGFuZWxCYWNrZ3JvdW5kSG92ZXJ9O1xuICAgIH1cbiAgfVxuYDtcblxudHlwZSBTdHlsZWRQYW5lbEhlYWRlckhpZGRlbkFjdGlvbnNQcm9wcyA9IHtcbiAgaXNDb25maWdBY3RpdmU6IExheWVyUGFuZWxIZWFkZXJQcm9wc1snaXNDb25maWdBY3RpdmUnXTtcbn07XG5cbi8vIEhpZGVuIGFjdGlvbnMgb25seSBzaG93IHVwIG9uIGhvdmVyXG5jb25zdCBTdHlsZWRQYW5lbEhlYWRlckhpZGRlbkFjdGlvbnMgPSBzdHlsZWQuZGl2LmF0dHJzKHtcbiAgY2xhc3NOYW1lOiAnbGF5ZXItcGFuZWxfX2hlYWRlcl9fYWN0aW9uc19faGlkZGVuJ1xufSk8U3R5bGVkUGFuZWxIZWFkZXJIaWRkZW5BY3Rpb25zUHJvcHM+YFxuICBvcGFjaXR5OiAwO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzID0+XG4gICAgcHJvcHMuaXNDb25maWdBY3RpdmUgPyBwcm9wcy50aGVtZS5wYW5lbEJhY2tncm91bmRIb3ZlciA6IHByb3BzLnRoZW1lLnBhbmVsQmFja2dyb3VuZH07XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC40cyBlYXNlLCBiYWNrZ3JvdW5kLWNvbG9yIDAuNHMgZWFzZTtcblxuICA6aG92ZXIge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbmA7XG5cbmNvbnN0IFN0eWxlZERyYWdIYW5kbGUgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBvcGFjaXR5OiAwO1xuICB6LWluZGV4OiAxMDAwO1xuXG4gIDpob3ZlciB7XG4gICAgY3Vyc29yOiBtb3ZlO1xuICAgIG9wYWNpdHk6IDE7XG4gICAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudGV4dENvbG9ySGx9O1xuICB9XG5gO1xuXG5leHBvcnQgY29uc3QgRHJhZ0hhbmRsZTogUmVhY3QuRkM8e1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGxpc3RlbmVycz86IGFueTtcbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGU7XG59PiA9ICh7Y2xhc3NOYW1lLCBsaXN0ZW5lcnMsIGNoaWxkcmVufSkgPT4gKFxuICA8U3R5bGVkRHJhZ0hhbmRsZSBjbGFzc05hbWU9e2NsYXNzTmFtZX0gey4uLihsaXN0ZW5lcnMgPyBsaXN0ZW5lcnMgOiB7fSl9PlxuICAgIHtjaGlsZHJlbn1cbiAgPC9TdHlsZWREcmFnSGFuZGxlPlxuKTtcblxuY29uc3Qgbm9PcCA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBMYXllckxhYmVsRWRpdG9yOiBSZWFjdC5GQzxMYXllckxhYmVsRWRpdG9yUHJvcHM+ID0gKHtcbiAgbGF5ZXJJZCxcbiAgbGFiZWwsXG4gIG9uRWRpdCxcbiAgb25Gb2N1cyxcbiAgb25CbHVyXG59KSA9PiAoXG4gIDxJbmxpbmVJbnB1dFxuICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICBjbGFzc05hbWU9XCJsYXllcl9fdGl0bGVfX2VkaXRvclwiXG4gICAgZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWRzLmxheWVyVGl0bGVFZGl0b3J9XG4gICAgdmFsdWU9e2xhYmVsfVxuICAgIG9uQ2xpY2s9e25vT3B9XG4gICAgb25DaGFuZ2U9e29uRWRpdH1cbiAgICBvbkZvY3VzPXtvbkZvY3VzfVxuICAgIG9uQmx1cj17b25CbHVyfVxuICAgIGlkPXtgJHtsYXllcklkfTppbnB1dC1sYXllci1sYWJlbGB9XG4gIC8+XG4pO1xuXG5leHBvcnQgZnVuY3Rpb24gTGF5ZXJUaXRsZVNlY3Rpb25GYWN0b3J5KCkge1xuICBjb25zdCBTdHlsZWRMYXllclRpdGxlU2VjdGlvbiA9IHN0eWxlZC5kaXZgXG4gICAgbWFyZ2luLWxlZnQ6IDRweDtcbiAgICBmbGV4LWdyb3c6IDE7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIC5sYXllcl9fdGl0bGVfX2lubmVyIHtcbiAgICAgIGZsZXgtZ3JvdzogMTtcbiAgICB9XG5cbiAgICAubGF5ZXJfX3RpdGxlX190eXBlIHtcbiAgICAgIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnN1YnRleHRDb2xvcn07XG4gICAgICBmb250LXNpemU6IDEwcHg7XG4gICAgICBsaW5lLWhlaWdodDogMTJweDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjM3cHg7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcbiAgICB9XG4gIGA7XG4gIGNvbnN0IExheWVyVGl0bGVTZWN0aW9uOiBSZWFjdC5GQzxMYXllclRpdGxlU2VjdGlvblByb3BzPiA9ICh7XG4gICAgbGF5ZXJUeXBlLFxuICAgIGxheWVySWQsXG4gICAgbGFiZWwsXG4gICAgb25VcGRhdGVMYXllckxhYmVsLFxuICAgIG9uRm9jdXMsXG4gICAgb25CbHVyXG4gIH0pID0+IChcbiAgICA8U3R5bGVkTGF5ZXJUaXRsZVNlY3Rpb24gY2xhc3NOYW1lPVwibGF5ZXJfX3RpdGxlXCI+XG4gICAgICA8ZGl2PlxuICAgICAgICA8TGF5ZXJMYWJlbEVkaXRvclxuICAgICAgICAgIGxheWVySWQ9e2xheWVySWR9XG4gICAgICAgICAgbGFiZWw9e2xhYmVsfVxuICAgICAgICAgIG9uRWRpdD17b25VcGRhdGVMYXllckxhYmVsfVxuICAgICAgICAgIG9uRm9jdXM9e29uRm9jdXN9XG4gICAgICAgICAgb25CbHVyPXtvbkJsdXJ9XG4gICAgICAgIC8+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibGF5ZXJfX3RpdGxlX190eXBlXCI+XG4gICAgICAgICAge2xheWVyVHlwZSAmJiA8Rm9ybWF0dGVkTWVzc2FnZSBpZD17YGxheWVyLnR5cGUuJHtsYXllclR5cGUudG9Mb3dlckNhc2UoKX1gfSAvPn1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L1N0eWxlZExheWVyVGl0bGVTZWN0aW9uPlxuICApO1xuICByZXR1cm4gTGF5ZXJUaXRsZVNlY3Rpb247XG59XG5cbkxheWVyUGFuZWxIZWFkZXJBY3Rpb25TZWN0aW9uRmFjdG9yeS5kZXBzID0gW1BhbmVsSGVhZGVyQWN0aW9uRmFjdG9yeV07XG5cbmV4cG9ydCBmdW5jdGlvbiBMYXllclBhbmVsSGVhZGVyQWN0aW9uU2VjdGlvbkZhY3RvcnkoXG4gIFBhbmVsSGVhZGVyQWN0aW9uOiBSZXR1cm5UeXBlPHR5cGVvZiBQYW5lbEhlYWRlckFjdGlvbkZhY3Rvcnk+XG4pIHtcbiAgY29uc3QgTGF5ZXJQYW5lbEhlYWRlckFjdGlvblNlY3Rpb246IFJlYWN0LkZDPExheWVyUGFuZWxIZWFkZXJBY3Rpb25TZWN0aW9uUHJvcHM+ID0gKFxuICAgIHByb3BzOiBMYXllclBhbmVsSGVhZGVyQWN0aW9uU2VjdGlvblByb3BzXG4gICkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGlzQ29uZmlnQWN0aXZlLFxuICAgICAgYWxsb3dEdXBsaWNhdGUsXG4gICAgICBpc1Zpc2libGUsXG4gICAgICBpc1ZhbGlkLFxuICAgICAgbGF5ZXJJZCxcbiAgICAgIG9uVG9nZ2xlVmlzaWJpbGl0eSxcbiAgICAgIG9uUmVzZXRJc1ZhbGlkLFxuICAgICAgb25Ub2dnbGVFbmFibGVDb25maWcsXG4gICAgICBvbkR1cGxpY2F0ZUxheWVyLFxuICAgICAgb25SZW1vdmVMYXllcixcbiAgICAgIHNob3dSZW1vdmVMYXllcixcbiAgICAgIGlzRWRpdGluZ0xhYmVsLFxuICAgICAgLy8gVE9ETzogbWF5IG5vdCBjb250YWluIGFsbCBuZWNlc3NhcnkgaWNvbnMgZm9yIGFsbCBhY3Rpb25zLCBlLmcuIGFjdGlvbkljb25zLmR1cGxpY2F0ZS4gTmVlZCB0byB0byBtZXJnZSByYXRoZXIgdGhhbiByZXBsYWNlXG4gICAgICBhY3Rpb25JY29ucyA9IGRlZmF1bHRBY3Rpb25JY29uc1xuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gKFxuICAgICAgPEhlYWRlckFjdGlvblNlY3Rpb24gY2xhc3NOYW1lPVwibGF5ZXItcGFuZWxfX2hlYWRlcl9fYWN0aW9uc1wiIGlzRWRpdGluZ0xhYmVsPXtpc0VkaXRpbmdMYWJlbH0+XG4gICAgICAgIDxTdHlsZWRQYW5lbEhlYWRlckhpZGRlbkFjdGlvbnMgaXNDb25maWdBY3RpdmU9e2lzQ29uZmlnQWN0aXZlfT5cbiAgICAgICAgICB7c2hvd1JlbW92ZUxheWVyID8gKFxuICAgICAgICAgICAgPFBhbmVsSGVhZGVyQWN0aW9uXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImxheWVyX19yZW1vdmUtbGF5ZXJcIlxuICAgICAgICAgICAgICB0ZXN0SWQ9XCJyZW1vdmUtbGF5ZXItYWN0aW9uXCJcbiAgICAgICAgICAgICAgaWQ9e2xheWVySWR9XG4gICAgICAgICAgICAgIHRvb2x0aXA9eyd0b29sdGlwLnJlbW92ZUxheWVyJ31cbiAgICAgICAgICAgICAgb25DbGljaz17b25SZW1vdmVMYXllcn1cbiAgICAgICAgICAgICAgdG9vbHRpcFR5cGU9XCJlcnJvclwiXG4gICAgICAgICAgICAgIEljb25Db21wb25lbnQ9e2FjdGlvbkljb25zLnJlbW92ZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPFBhbmVsSGVhZGVyQWN0aW9uXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJsYXllcl9fZHVwbGljYXRlXCJcbiAgICAgICAgICAgIGlkPXtsYXllcklkfVxuICAgICAgICAgICAgdG9vbHRpcD17J3Rvb2x0aXAuZHVwbGljYXRlTGF5ZXInfVxuICAgICAgICAgICAgb25DbGljaz17b25EdXBsaWNhdGVMYXllcn1cbiAgICAgICAgICAgIEljb25Db21wb25lbnQ9e2FjdGlvbkljb25zLmR1cGxpY2F0ZX1cbiAgICAgICAgICAgIGRpc2FibGVkPXshYWxsb3dEdXBsaWNhdGV9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TdHlsZWRQYW5lbEhlYWRlckhpZGRlbkFjdGlvbnM+XG4gICAgICAgIHtpc1ZhbGlkID8gKFxuICAgICAgICAgIDxQYW5lbEhlYWRlckFjdGlvblxuICAgICAgICAgICAgY2xhc3NOYW1lPVwibGF5ZXJfX3Zpc2liaWxpdHktdG9nZ2xlXCJcbiAgICAgICAgICAgIGlkPXtsYXllcklkfVxuICAgICAgICAgICAgdG9vbHRpcD17aXNWaXNpYmxlID8gJ3Rvb2x0aXAuaGlkZUxheWVyJyA6ICd0b29sdGlwLnNob3dMYXllcid9XG4gICAgICAgICAgICBvbkNsaWNrPXtvblRvZ2dsZVZpc2liaWxpdHl9XG4gICAgICAgICAgICBJY29uQ29tcG9uZW50PXtpc1Zpc2libGUgPyBhY3Rpb25JY29ucy52aXNpYmxlIDogYWN0aW9uSWNvbnMuaGlkZGVufVxuICAgICAgICAgIC8+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPFBhbmVsSGVhZGVyQWN0aW9uXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJsYXllcl9faXMtdmFsaWQtcmVmcmVzaFwiXG4gICAgICAgICAgICBpZD17bGF5ZXJJZH1cbiAgICAgICAgICAgIHRvb2x0aXA9eyd0b29sdGlwLnJlc2V0QWZ0ZXJFcnJvcid9XG4gICAgICAgICAgICBvbkNsaWNrPXtvblJlc2V0SXNWYWxpZH1cbiAgICAgICAgICAgIEljb25Db21wb25lbnQ9e2FjdGlvbkljb25zLnJlc2V0SXNWYWxpZH1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuXG4gICAgICAgIDxQYW5lbEhlYWRlckFjdGlvblxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcygnbGF5ZXJfX2VuYWJsZS1jb25maWcgJywge1xuICAgICAgICAgICAgJ2lzLW9wZW4nOiBpc0NvbmZpZ0FjdGl2ZVxuICAgICAgICAgIH0pfVxuICAgICAgICAgIGlkPXtsYXllcklkfVxuICAgICAgICAgIHRvb2x0aXA9eyd0b29sdGlwLmxheWVyU2V0dGluZ3MnfVxuICAgICAgICAgIG9uQ2xpY2s9e29uVG9nZ2xlRW5hYmxlQ29uZmlnfVxuICAgICAgICAgIEljb25Db21wb25lbnQ9e2FjdGlvbkljb25zLmVuYWJsZUNvbmZpZ31cbiAgICAgICAgLz5cbiAgICAgIDwvSGVhZGVyQWN0aW9uU2VjdGlvbj5cbiAgICApO1xuICB9O1xuXG4gIHJldHVybiBMYXllclBhbmVsSGVhZGVyQWN0aW9uU2VjdGlvbjtcbn1cblxuY29uc3QgU3R5bGVkSGVhZGVyV2FyaW5nID0gc3R5bGVkLmRpdmBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogLTlweDtcbiAgdG9wOiBjYWxjKDUwJSAtIDlweCk7XG4gIGNvbG9yOiAkeyh7dGhlbWV9KSA9PiB0aGVtZS5ub3RpZmljYXRpb25Db2xvcnMud2FybmluZ307XG5gO1xuXG5leHBvcnQgY29uc3QgSGVhZGVyV2FybmluZyA9ICh7d2FybmluZywgaWR9KSA9PiAoXG4gIDxTdHlsZWRIZWFkZXJXYXJpbmc+XG4gICAgPFdhcm5pbmdTaWduIGRhdGEtdGlwIGRhdGEtZm9yPXtgbGF5ZXItJHtpZH0td2FybmluZ2B9IGhlaWdodD1cIjE2cHhcIiAvPlxuICAgIDxUb29sdGlwIGlkPXtgbGF5ZXItJHtpZH0td2FybmluZ2B9IHR5cGU9XCJ3YXJuaW5nXCIgZWZmZWN0PVwic29saWRcIiB0ZXh0Q29sb3I9XCJibGFja1wiPlxuICAgICAge3dhcm5pbmd9XG4gICAgPC9Ub29sdGlwPlxuICA8L1N0eWxlZEhlYWRlcldhcmluZz5cbik7XG5cbmNvbnN0IGRlZmF1bHRBY3Rpb25JY29ucyA9IHtcbiAgcmVtb3ZlOiBUcmFzaCxcbiAgdmlzaWJsZTogRXllU2VlbixcbiAgaGlkZGVuOiBFeWVVbnNlZW4sXG4gIGVuYWJsZUNvbmZpZzogQXJyb3dEb3duLFxuICBkdXBsaWNhdGU6IENvcHksXG4gIHJlc2V0SXNWYWxpZDogUmVzZXRcbn07XG5cbkxheWVyUGFuZWxIZWFkZXJGYWN0b3J5LmRlcHMgPSBbTGF5ZXJUaXRsZVNlY3Rpb25GYWN0b3J5LCBMYXllclBhbmVsSGVhZGVyQWN0aW9uU2VjdGlvbkZhY3RvcnldO1xuXG5mdW5jdGlvbiBMYXllclBhbmVsSGVhZGVyRmFjdG9yeShcbiAgTGF5ZXJUaXRsZVNlY3Rpb246IFJldHVyblR5cGU8dHlwZW9mIExheWVyVGl0bGVTZWN0aW9uRmFjdG9yeT4sXG4gIExheWVyUGFuZWxIZWFkZXJBY3Rpb25TZWN0aW9uOiBSZXR1cm5UeXBlPHR5cGVvZiBMYXllclBhbmVsSGVhZGVyQWN0aW9uU2VjdGlvbkZhY3Rvcnk+XG4pIHtcbiAgY29uc3QgTGF5ZXJQYW5lbEhlYWRlcjogUmVhY3QuRkM8TGF5ZXJQYW5lbEhlYWRlclByb3BzPiA9IHByb3BzID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBpc0NvbmZpZ0FjdGl2ZSxcbiAgICAgIGlzRHJhZ05Ecm9wRW5hYmxlZCxcbiAgICAgIGlzVmFsaWQsXG4gICAgICB3YXJuaW5nLFxuICAgICAgbGFiZWwsXG4gICAgICBsYXllcklkLFxuICAgICAgbGF5ZXJUeXBlLFxuICAgICAgbGFiZWxSQ0dDb2xvclZhbHVlcyxcbiAgICAgIG9uVXBkYXRlTGF5ZXJMYWJlbCxcbiAgICAgIG9uVG9nZ2xlRW5hYmxlQ29uZmlnLFxuICAgICAgbGlzdGVuZXJzXG4gICAgfSA9IHByb3BzO1xuICAgIGNvbnN0IFtpc0VkaXRpbmdMYWJlbCwgc2V0SXNFZGl0aW5nTGFiZWxdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIHJldHVybiAoXG4gICAgICA8U3R5bGVkTGF5ZXJQYW5lbEhlYWRlclxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzbmFtZXMoJ2xheWVyLXBhbmVsX19oZWFkZXInLCB7XG4gICAgICAgICAgJ3NvcnQtLWhhbmRsZSc6ICFpc0NvbmZpZ0FjdGl2ZVxuICAgICAgICB9KX1cbiAgICAgICAgaXNWYWxpZD17aXNWYWxpZH1cbiAgICAgICAgd2FybmluZz17d2FybmluZ31cbiAgICAgICAgYWN0aXZlPXtpc0NvbmZpZ0FjdGl2ZX1cbiAgICAgICAgbGFiZWxSQ0dDb2xvclZhbHVlcz17bGFiZWxSQ0dDb2xvclZhbHVlc31cbiAgICAgICAgb25DbGljaz17b25Ub2dnbGVFbmFibGVDb25maWd9XG4gICAgICA+XG4gICAgICAgIHt3YXJuaW5nID8gPEhlYWRlcldhcm5pbmcgd2FybmluZz17d2FybmluZ30gaWQ9e2xheWVySWR9IC8+IDogbnVsbH1cbiAgICAgICAgPEhlYWRlckxhYmVsU2VjdGlvbiBjbGFzc05hbWU9XCJsYXllci1wYW5lbF9faGVhZGVyX19jb250ZW50XCI+XG4gICAgICAgICAge2lzRHJhZ05Ecm9wRW5hYmxlZCA/IChcbiAgICAgICAgICAgIDxEcmFnSGFuZGxlIGNsYXNzTmFtZT1cImxheWVyX19kcmFnLWhhbmRsZVwiIGxpc3RlbmVycz17bGlzdGVuZXJzfT5cbiAgICAgICAgICAgICAgPFZlcnREb3RzIGhlaWdodD1cIjIwcHhcIiAvPlxuICAgICAgICAgICAgPC9EcmFnSGFuZGxlPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImxheWVyX19kcmFnLWhhbmRsZV9fcGxhY2Vob2xkZXJcIiAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAgPExheWVyVGl0bGVTZWN0aW9uXG4gICAgICAgICAgICBsYXllcklkPXtsYXllcklkfVxuICAgICAgICAgICAgbGFiZWw9e2xhYmVsfVxuICAgICAgICAgICAgb25VcGRhdGVMYXllckxhYmVsPXtvblVwZGF0ZUxheWVyTGFiZWx9XG4gICAgICAgICAgICBsYXllclR5cGU9e2xheWVyVHlwZX1cbiAgICAgICAgICAgIG9uRm9jdXM9eygpID0+IHtcbiAgICAgICAgICAgICAgc2V0SXNFZGl0aW5nTGFiZWwodHJ1ZSk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25CbHVyPXsoKSA9PiB7XG4gICAgICAgICAgICAgIHNldElzRWRpdGluZ0xhYmVsKGZhbHNlKTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9IZWFkZXJMYWJlbFNlY3Rpb24+XG4gICAgICAgIDxMYXllclBhbmVsSGVhZGVyQWN0aW9uU2VjdGlvbiB7Li4ucHJvcHN9IGlzRWRpdGluZ0xhYmVsPXtpc0VkaXRpbmdMYWJlbH0gLz5cbiAgICAgIDwvU3R5bGVkTGF5ZXJQYW5lbEhlYWRlcj5cbiAgICApO1xuICB9O1xuXG4gIExheWVyUGFuZWxIZWFkZXIuZGVmYXVsdFByb3BzID0gZGVmYXVsdFByb3BzO1xuXG4gIHJldHVybiBMYXllclBhbmVsSGVhZGVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBMYXllclBhbmVsSGVhZGVyRmFjdG9yeTtcbiJdfQ==
@@ -11,7 +11,6 @@ declare type LayerPanelProps = {
11
11
  onTouchStart?: TouchEventHandler;
12
12
  layer: Layer;
13
13
  datasets: Datasets;
14
- idx: number;
15
14
  layerTypeOptions: {
16
15
  id: string;
17
16
  label: string;
@@ -19,15 +18,18 @@ declare type LayerPanelProps = {
19
18
  requireData: any;
20
19
  }[];
21
20
  isDraggable?: boolean;
21
+ idx: number;
22
22
  openModal: ActionHandler<typeof toggleModal>;
23
23
  layerColorUIChange: ActionHandler<typeof VisStateActions.layerColorUIChange>;
24
24
  layerConfigChange: ActionHandler<typeof VisStateActions.layerConfigChange>;
25
25
  layerVisualChannelConfigChange: ActionHandler<typeof VisStateActions.layerVisualChannelConfigChange>;
26
+ layerSetIsValid: ActionHandler<typeof VisStateActions.layerSetIsValid>;
26
27
  layerTypeChange: ActionHandler<typeof VisStateActions.layerTypeChange>;
27
28
  layerVisConfigChange: ActionHandler<typeof VisStateActions.layerVisConfigChange>;
28
29
  layerTextLabelChange: ActionHandler<typeof VisStateActions.layerTextLabelChange>;
29
30
  removeLayer: ActionHandler<typeof VisStateActions.removeLayer>;
30
31
  duplicateLayer: ActionHandler<typeof VisStateActions.duplicateLayer>;
32
+ listeners?: React.ElementType;
31
33
  };
32
34
  declare function LayerPanelFactory(LayerConfigurator: ReturnType<typeof LayerConfiguratorFactory>, LayerPanelHeader: ReturnType<typeof LayerPanelHeaderFactory>): React.ComponentType<LayerPanelProps>;
33
35
  declare namespace LayerPanelFactory {
@@ -1,4 +1,4 @@
1
- // Copyright (c) 2022 Uber Technologies, Inc.
1
+ // Copyright (c) 2023 Uber Technologies, Inc.
2
2
  //
3
3
  // Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  // of this software and associated documentation files (the "Software"), to deal
@@ -53,13 +53,15 @@ var _layerConfigurator = _interopRequireDefault(require("./layer-configurator"))
53
53
 
54
54
  var _layerPanelHeader = _interopRequireDefault(require("./layer-panel-header"));
55
55
 
56
+ var _constants = require("@kepler.gl/constants");
57
+
56
58
  var _templateObject;
57
59
 
58
60
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
59
61
 
60
62
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
61
63
 
62
- var PanelWrapper = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n font-size: 12px;\n border-radius: 1px;\n margin-bottom: 8px;\n z-index: 1000;\n\n &.dragging {\n cursor: move;\n }\n"])));
64
+ var PanelWrapper = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n font-size: 12px;\n border-radius: 1px;\n z-index: 1000;\n &.dragging {\n cursor: move;\n }\n"])));
63
65
 
64
66
  LayerPanelFactory.deps = [_layerConfigurator["default"], _layerPanelHeader["default"]];
65
67
 
@@ -124,8 +126,13 @@ function LayerPanelFactory(LayerConfigurator, LayerPanelHeader) {
124
126
  isVisible: isVisible
125
127
  });
126
128
  });
129
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_resetIsValid", function (e) {
130
+ e === null || e === void 0 ? void 0 : e.stopPropagation(); // Make the layer valid and visible again after an error
131
+
132
+ _this.props.layerSetIsValid(_this.props.layer, true);
133
+ });
127
134
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_toggleEnableConfig", function (e) {
128
- e.stopPropagation();
135
+ e === null || e === void 0 ? void 0 : e.stopPropagation();
129
136
  var isConfigActive = _this.props.layer.config.isConfigActive;
130
137
 
131
138
  _this.updateLayerConfig({
@@ -133,14 +140,14 @@ function LayerPanelFactory(LayerConfigurator, LayerPanelHeader) {
133
140
  });
134
141
  });
135
142
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_removeLayer", function (e) {
136
- e.stopPropagation();
143
+ e === null || e === void 0 ? void 0 : e.stopPropagation();
137
144
 
138
- _this.props.removeLayer(_this.props.idx);
145
+ _this.props.removeLayer(_this.props.layer.id);
139
146
  });
140
147
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_duplicateLayer", function (e) {
141
- e.stopPropagation();
148
+ e === null || e === void 0 ? void 0 : e.stopPropagation();
142
149
 
143
- _this.props.duplicateLayer(_this.props.idx);
150
+ _this.props.duplicateLayer(_this.props.layer.id);
144
151
  });
145
152
  return _this;
146
153
  }
@@ -152,13 +159,16 @@ function LayerPanelFactory(LayerConfigurator, LayerPanelHeader) {
152
159
  layer = _this$props3.layer,
153
160
  datasets = _this$props3.datasets,
154
161
  isDraggable = _this$props3.isDraggable,
155
- layerTypeOptions = _this$props3.layerTypeOptions;
156
- var config = layer.config;
162
+ layerTypeOptions = _this$props3.layerTypeOptions,
163
+ listeners = _this$props3.listeners;
164
+ var config = layer.config,
165
+ isValid = layer.isValid;
157
166
  var isConfigActive = config.isConfigActive;
158
167
  var allowDuplicate = typeof layer.isValidToSave === 'function' && layer.isValidToSave();
159
168
  return /*#__PURE__*/_react["default"].createElement(PanelWrapper, {
160
169
  active: isConfigActive,
161
170
  className: "layer-panel ".concat(this.props.className),
171
+ "data-testid": _constants.dataTestIds.layerPanel,
162
172
  style: this.props.style,
163
173
  onMouseDown: this.props.onMouseDown,
164
174
  onTouchStart: this.props.onTouchStart
@@ -166,16 +176,19 @@ function LayerPanelFactory(LayerConfigurator, LayerPanelHeader) {
166
176
  isConfigActive: isConfigActive,
167
177
  layerId: layer.id,
168
178
  isVisible: config.isVisible,
179
+ isValid: isValid,
169
180
  label: config.label,
170
181
  labelRCGColorValues: config.dataId ? datasets[config.dataId].color : null,
171
182
  layerType: layer.type,
172
183
  allowDuplicate: allowDuplicate,
173
184
  onToggleEnableConfig: this._toggleEnableConfig,
174
185
  onToggleVisibility: this._toggleVisibility,
186
+ onResetIsValid: this._resetIsValid,
175
187
  onUpdateLayerLabel: this._updateLayerLabel,
176
188
  onRemoveLayer: this._removeLayer,
177
189
  onDuplicateLayer: this._duplicateLayer,
178
- isDragNDropEnabled: isDraggable
190
+ isDragNDropEnabled: isDraggable,
191
+ listeners: listeners
179
192
  }), isConfigActive && /*#__PURE__*/_react["default"].createElement(LayerConfigurator, {
180
193
  layer: layer,
181
194
  datasets: datasets,
@@ -198,4 +211,4 @@ function LayerPanelFactory(LayerConfigurator, LayerPanelHeader) {
198
211
 
199
212
  var _default = LayerPanelFactory;
200
213
  exports["default"] = _default;
201
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zaWRlLXBhbmVsL2xheWVyLXBhbmVsL2xheWVyLXBhbmVsLnRzeCJdLCJuYW1lcyI6WyJQYW5lbFdyYXBwZXIiLCJzdHlsZWQiLCJkaXYiLCJMYXllclBhbmVsRmFjdG9yeSIsImRlcHMiLCJMYXllckNvbmZpZ3VyYXRvckZhY3RvcnkiLCJMYXllclBhbmVsSGVhZGVyRmFjdG9yeSIsIkxheWVyQ29uZmlndXJhdG9yIiwiTGF5ZXJQYW5lbEhlYWRlciIsIkxheWVyUGFuZWwiLCJuZXdQcm9wIiwicHJvcHMiLCJsYXllckNvbmZpZ0NoYW5nZSIsImxheWVyIiwibmV3VHlwZSIsImxheWVyVHlwZUNoYW5nZSIsIm5ld1Zpc0NvbmZpZyIsImxheWVyVmlzQ29uZmlnQ2hhbmdlIiwiYXJncyIsImxheWVyQ29sb3JVSUNoYW5nZSIsImxheWVyVGV4dExhYmVsQ2hhbmdlIiwibmV3Q29uZmlnIiwiY2hhbm5lbCIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsInZhbHVlIiwidGFyZ2V0IiwidXBkYXRlTGF5ZXJDb25maWciLCJsYWJlbCIsImUiLCJzdG9wUHJvcGFnYXRpb24iLCJpc1Zpc2libGUiLCJjb25maWciLCJpc0NvbmZpZ0FjdGl2ZSIsInJlbW92ZUxheWVyIiwiaWR4IiwiZHVwbGljYXRlTGF5ZXIiLCJkYXRhc2V0cyIsImlzRHJhZ2dhYmxlIiwibGF5ZXJUeXBlT3B0aW9ucyIsImFsbG93RHVwbGljYXRlIiwiaXNWYWxpZFRvU2F2ZSIsImNsYXNzTmFtZSIsInN0eWxlIiwib25Nb3VzZURvd24iLCJvblRvdWNoU3RhcnQiLCJpZCIsImRhdGFJZCIsImNvbG9yIiwidHlwZSIsIl90b2dnbGVFbmFibGVDb25maWciLCJfdG9nZ2xlVmlzaWJpbGl0eSIsIl91cGRhdGVMYXllckxhYmVsIiwiX3JlbW92ZUxheWVyIiwiX2R1cGxpY2F0ZUxheWVyIiwib3Blbk1vZGFsIiwidXBkYXRlTGF5ZXJDb2xvclVJIiwidXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnIiwidXBkYXRlTGF5ZXJUeXBlIiwidXBkYXRlTGF5ZXJUZXh0TGFiZWwiLCJ1cGRhdGVMYXllclZpc0NvbmZpZyIsIkNvbXBvbmVudCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBOztBQU9BOztBQUVBOztBQUNBOzs7Ozs7OztBQWtDQSxJQUFNQSxZQUFZLEdBQUdDLDZCQUFPQyxHQUFWLHNOQUFsQjs7QUFXQUMsaUJBQWlCLENBQUNDLElBQWxCLEdBQXlCLENBQUNDLDZCQUFELEVBQTJCQyw0QkFBM0IsQ0FBekI7O0FBRUEsU0FBU0gsaUJBQVQsQ0FDRUksaUJBREYsRUFFRUMsZ0JBRkYsRUFHd0M7QUFBQSxNQUNoQ0MsVUFEZ0M7QUFBQTs7QUFBQTs7QUFBQTtBQUFBOztBQUFBOztBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBLDRHQUVoQixVQUFDQyxPQUFELEVBQXVDO0FBQ3pELGNBQUtDLEtBQUwsQ0FBV0MsaUJBQVgsQ0FBNkIsTUFBS0QsS0FBTCxDQUFXRSxLQUF4QyxFQUErQ0gsT0FBL0M7QUFDRCxPQUptQztBQUFBLDBHQU1sQixVQUFDSSxPQUFELEVBQXFCO0FBQ3JDLGNBQUtILEtBQUwsQ0FBV0ksZUFBWCxDQUEyQixNQUFLSixLQUFMLENBQVdFLEtBQXRDLEVBQTZDQyxPQUE3QztBQUNELE9BUm1DO0FBQUEsK0dBVWIsVUFBQ0UsWUFBRCxFQUEyQztBQUNoRSxjQUFLTCxLQUFMLENBQVdNLG9CQUFYLENBQWdDLE1BQUtOLEtBQUwsQ0FBV0UsS0FBM0MsRUFBa0RHLFlBQWxEO0FBQ0QsT0FabUM7QUFBQSw2R0FjZixZQUErQztBQUFBOztBQUFBLDJDQUEzQ0UsSUFBMkM7QUFBM0NBLFVBQUFBLElBQTJDO0FBQUE7O0FBQ2xFLDZCQUFLUCxLQUFMLEVBQVdRLGtCQUFYLHFCQUE4QixNQUFLUixLQUFMLENBQVdFLEtBQXpDLFNBQW1ESyxJQUFuRDtBQUNELE9BaEJtQztBQUFBLCtHQWtCYixZQUE0QztBQUFB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aG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IFJlYWN0LCB7XG4gIENvbXBvbmVudCxcbiAgTW91c2VFdmVudEhhbmRsZXIsXG4gIFRvdWNoRXZlbnRIYW5kbGVyLFxuICBDU1NQcm9wZXJ0aWVzLFxuICBDaGFuZ2VFdmVudEhhbmRsZXJcbn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5cbmltcG9ydCBMYXllckNvbmZpZ3VyYXRvckZhY3RvcnkgZnJvbSAnLi9sYXllci1jb25maWd1cmF0b3InO1xuaW1wb3J0IExheWVyUGFuZWxIZWFkZXJGYWN0b3J5IGZyb20gJy4vbGF5ZXItcGFuZWwtaGVhZGVyJztcbmltcG9ydCB7TmVzdGVkUGFydGlhbCwgTGF5ZXJWaXNDb25maWcsIENvbG9yVUl9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtMYXllciwgTGF5ZXJCYXNlQ29uZmlnfSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5pbXBvcnQge3RvZ2dsZU1vZGFsLCBWaXNTdGF0ZUFjdGlvbnMsIEFjdGlvbkhhbmRsZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5pbXBvcnQge0RhdGFzZXRzfSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcblxudHlwZSBMYXllclBhbmVsUHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgc3R5bGU/OiBDU1NQcm9wZXJ0aWVzO1xuICBvbk1vdXNlRG93bj86IE1vdXNlRXZlbnRIYW5kbGVyO1xuICBvblRvdWNoU3RhcnQ/OiBUb3VjaEV2ZW50SGFuZGxlcjtcbiAgbGF5ZXI6IExheWVyO1xuICBkYXRhc2V0czogRGF0YXNldHM7XG4gIGlkeDogbnVtYmVyO1xuICBsYXllclR5cGVPcHRpb25zOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIGljb246IGFueTsgLy9cbiAgICByZXF1aXJlRGF0YTogYW55OyAvL1xuICB9W107XG4gIGlzRHJhZ2dhYmxlPzogYm9vbGVhbjtcbiAgb3Blbk1vZGFsOiBBY3Rpb25IYW5kbGVyPHR5cGVvZiB0b2dnbGVNb2RhbD47XG4gIGxheWVyQ29sb3JVSUNoYW5nZTogQWN0aW9uSGFuZGxlcjx0eXBlb2YgVmlzU3RhdGVBY3Rpb25zLmxheWVyQ29sb3JVSUNoYW5nZT47XG4gIGxheWVyQ29uZmlnQ2hhbmdlOiBBY3Rpb25IYW5kbGVyPHR5cGVvZiBWaXNTdGF0ZUFjdGlvbnMubGF5ZXJDb25maWdDaGFuZ2U+O1xuICBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2U6IEFjdGlvbkhhbmRsZXI8XG4gICAgdHlwZW9mIFZpc1N0YXRlQWN0aW9ucy5sYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2VcbiAgPjtcbiAgbGF5ZXJUeXBlQ2hhbmdlOiBBY3Rpb25IYW5kbGVyPHR5cGVvZiBWaXNTdGF0ZUFjdGlvbnMubGF5ZXJUeXBlQ2hhbmdlPjtcbiAgbGF5ZXJWaXNDb25maWdDaGFuZ2U6IEFjdGlvbkhhbmRsZXI8dHlwZW9mIFZpc1N0YXRlQWN0aW9ucy5sYXllclZpc0NvbmZpZ0NoYW5nZT47XG4gIGxheWVyVGV4dExhYmVsQ2hhbmdlOiBBY3Rpb25IYW5kbGVyPHR5cGVvZiBWaXNTdGF0ZUFjdGlvbnMubGF5ZXJUZXh0TGFiZWxDaGFuZ2U+O1xuICByZW1vdmVMYXllcjogQWN0aW9uSGFuZGxlcjx0eXBlb2YgVmlzU3RhdGVBY3Rpb25zLnJlbW92ZUxheWVyPjtcbiAgZHVwbGljYXRlTGF5ZXI6IEFjdGlvbkhhbmRsZXI8dHlwZW9mIFZpc1N0YXRlQWN0aW9ucy5kdXBsaWNhdGVMYXllcj47XG59O1xuXG5jb25zdCBQYW5lbFdyYXBwZXIgPSBzdHlsZWQuZGl2PHthY3RpdmU6IGJvb2xlYW59PmBcbiAgZm9udC1zaXplOiAxMnB4O1xuICBib3JkZXItcmFkaXVzOiAxcHg7XG4gIG1hcmdpbi1ib3R0b206IDhweDtcbiAgei1pbmRleDogMTAwMDtcblxuICAmLmRyYWdnaW5nIHtcbiAgICBjdXJzb3I6IG1vdmU7XG4gIH1cbmA7XG5cbkxheWVyUGFuZWxGYWN0b3J5LmRlcHMgPSBbTGF5ZXJDb25maWd1cmF0b3JGYWN0b3J5LCBMYXllclBhbmVsSGVhZGVyRmFjdG9yeV07XG5cbmZ1bmN0aW9uIExheWVyUGFuZWxGYWN0b3J5KFxuICBMYXllckNvbmZpZ3VyYXRvcjogUmV0dXJuVHlwZTx0eXBlb2YgTGF5ZXJDb25maWd1cmF0b3JGYWN0b3J5PixcbiAgTGF5ZXJQYW5lbEhlYWRlcjogUmV0dXJuVHlwZTx0eXBlb2YgTGF5ZXJQYW5lbEhlYWRlckZhY3Rvcnk+XG4pOiBSZWFjdC5Db21wb25lbnRUeXBlPExheWVyUGFuZWxQcm9wcz4ge1xuICBjbGFzcyBMYXllclBhbmVsIGV4dGVuZHMgQ29tcG9uZW50PExheWVyUGFuZWxQcm9wcz4ge1xuICAgIHVwZGF0ZUxheWVyQ29uZmlnID0gKG5ld1Byb3A6IFBhcnRpYWw8TGF5ZXJCYXNlQ29uZmlnPikgPT4ge1xuICAgICAgdGhpcy5wcm9wcy5sYXllckNvbmZpZ0NoYW5nZSh0aGlzLnByb3BzLmxheWVyLCBuZXdQcm9wKTtcbiAgICB9O1xuXG4gICAgdXBkYXRlTGF5ZXJUeXBlID0gKG5ld1R5cGU6IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy5wcm9wcy5sYXllclR5cGVDaGFuZ2UodGhpcy5wcm9wcy5sYXllciwgbmV3VHlwZSk7XG4gICAgfTtcblxuICAgIHVwZGF0ZUxheWVyVmlzQ29uZmlnID0gKG5ld1Zpc0NvbmZpZzogUGFydGlhbDxMYXllclZpc0NvbmZpZz4pID0+IHtcbiAgICAgIHRoaXMucHJvcHMubGF5ZXJWaXNDb25maWdDaGFuZ2UodGhpcy5wcm9wcy5sYXllciwgbmV3VmlzQ29uZmlnKTtcbiAgICB9O1xuXG4gICAgdXBkYXRlTGF5ZXJDb2xvclVJID0gKC4uLmFyZ3M6IFtzdHJpbmcsIE5lc3RlZFBhcnRpYWw8Q29sb3JVST5dKSA9PiB7XG4gICAgICB0aGlzLnByb3BzLmxheWVyQ29sb3JVSUNoYW5nZSh0aGlzLnByb3BzLmxheWVyLCAuLi5hcmdzKTtcbiAgICB9O1xuXG4gICAgdXBkYXRlTGF5ZXJUZXh0TGFiZWwgPSAoLi4uYXJnczogW251bWJlciB8ICdhbGwnLCBzdHJpbmcsIGFueV0pID0+IHtcbiAgICAgIHRoaXMucHJvcHMubGF5ZXJUZXh0TGFiZWxDaGFuZ2UodGhpcy5wcm9wcy5sYXllciwgLi4uYXJncyk7XG4gICAgfTtcblxuICAgIHVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZyA9IChuZXdDb25maWc6IFBhcnRpYWw8TGF5ZXJCYXNlQ29uZmlnPiwgY2hhbm5lbDogc3RyaW5nKSA9PiB7XG4gICAgICB0aGlzLnByb3BzLmxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSh0aGlzLnByb3BzLmxheWVyLCBuZXdDb25maWcsIGNoYW5uZWwpO1xuICAgIH07XG5cbiAgICBfdXBkYXRlTGF5ZXJMYWJlbDogQ2hhbmdlRXZlbnRIYW5kbGVyPEhUTUxJbnB1dEVsZW1lbnQ+ID0gKHt0YXJnZXQ6IHt2YWx1ZX19KSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKHtsYWJlbDogdmFsdWV9KTtcbiAgICB9O1xuXG4gICAgX3RvZ2dsZVZpc2liaWxpdHk6IE1vdXNlRXZlbnRIYW5kbGVyID0gZSA9PiB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgY29uc3QgaXNWaXNpYmxlID0gIXRoaXMucHJvcHMubGF5ZXIuY29uZmlnLmlzVmlzaWJsZTtcbiAgICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe2lzVmlzaWJsZX0pO1xuICAgIH07XG5cbiAgICBfdG9nZ2xlRW5hYmxlQ29uZmlnOiBNb3VzZUV2ZW50SGFuZGxlciA9IGUgPT4ge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbGF5ZXI6IHtcbiAgICAgICAgICBjb25maWc6IHtpc0NvbmZpZ0FjdGl2ZX1cbiAgICAgICAgfVxuICAgICAgfSA9IHRoaXMucHJvcHM7XG4gICAgICB0aGlzLnVwZGF0ZUxheWVyQ29uZmlnKHtpc0NvbmZpZ0FjdGl2ZTogIWlzQ29uZmlnQWN0aXZlfSk7XG4gICAgfTtcblxuICAgIF9yZW1vdmVMYXllcjogTW91c2VFdmVudEhhbmRsZXIgPSBlID0+IHtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLnByb3BzLnJlbW92ZUxheWVyKHRoaXMucHJvcHMuaWR4KTtcbiAgICB9O1xuXG4gICAgX2R1cGxpY2F0ZUxheWVyOiBNb3VzZUV2ZW50SGFuZGxlciA9IGUgPT4ge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMucHJvcHMuZHVwbGljYXRlTGF5ZXIodGhpcy5wcm9wcy5pZHgpO1xuICAgIH07XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7bGF5ZXIsIGRhdGFzZXRzLCBpc0RyYWdnYWJsZSwgbGF5ZXJUeXBlT3B0aW9uc30gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3Qge2NvbmZpZ30gPSBsYXllcjtcbiAgICAgIGNvbnN0IHtpc0NvbmZpZ0FjdGl2ZX0gPSBjb25maWc7XG4gICAgICBjb25zdCBhbGxvd0R1cGxpY2F0ZSA9IHR5cGVvZiBsYXllci5pc1ZhbGlkVG9TYXZlID09PSAnZnVuY3Rpb24nICYmIGxheWVyLmlzVmFsaWRUb1NhdmUoKTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFBhbmVsV3JhcHBlclxuICAgICAgICAgIGFjdGl2ZT17aXNDb25maWdBY3RpdmV9XG4gICAgICAgICAgY2xhc3NOYW1lPXtgbGF5ZXItcGFuZWwgJHt0aGlzLnByb3BzLmNsYXNzTmFtZX1gfVxuICAgICAgICAgIHN0eWxlPXt0aGlzLnByb3BzLnN0eWxlfVxuICAgICAgICAgIG9uTW91c2VEb3duPXt0aGlzLnByb3BzLm9uTW91c2VEb3dufVxuICAgICAgICAgIG9uVG91Y2hTdGFydD17dGhpcy5wcm9wcy5vblRvdWNoU3RhcnR9XG4gICAgICAgID5cbiAgICAgICAgICA8TGF5ZXJQYW5lbEhlYWRlclxuICAgICAgICAgICAgaXNDb25maWdBY3RpdmU9e2lzQ29uZmlnQWN0aXZlfVxuICAgICAgICAgICAgbGF5ZXJJZD17bGF5ZXIuaWR9XG4gICAgICAgICAgICBpc1Zpc2libGU9e2NvbmZpZy5pc1Zpc2libGV9XG4gICAgICAgICAgICBsYWJlbD17Y29uZmlnLmxhYmVsfVxuICAgICAgICAgICAgbGFiZWxSQ0dDb2xvclZhbHVlcz17Y29uZmlnLmRhdGFJZCA/IGRhdGFzZXRzW2NvbmZpZy5kYXRhSWRdLmNvbG9yIDogbnVsbH1cbiAgICAgICAgICAgIGxheWVyVHlwZT17bGF5ZXIudHlwZX1cbiAgICAgICAgICAgIGFsbG93RHVwbGljYXRlPXthbGxvd0R1cGxpY2F0ZX1cbiAgICAgICAgICAgIG9uVG9nZ2xlRW5hYmxlQ29uZmlnPXt0aGlzLl90b2dnbGVFbmFibGVDb25maWd9XG4gICAgICAgICAgICBvblRvZ2dsZVZpc2liaWxpdHk9e3RoaXMuX3RvZ2dsZVZpc2liaWxpdHl9XG4gICAgICAgICAgICBvblVwZGF0ZUxheWVyTGFiZWw9e3RoaXMuX3VwZGF0ZUxheWVyTGFiZWx9XG4gICAgICAgICAgICBvblJlbW92ZUxheWVyPXt0aGlzLl9yZW1vdmVMYXllcn1cbiAgICAgICAgICAgIG9uRHVwbGljYXRlTGF5ZXI9e3RoaXMuX2R1cGxpY2F0ZUxheWVyfVxuICAgICAgICAgICAgaXNEcmFnTkRyb3BFbmFibGVkPXtpc0RyYWdnYWJsZX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHtpc0NvbmZpZ0FjdGl2ZSAmJiAoXG4gICAgICAgICAgICA8TGF5ZXJDb25maWd1cmF0b3JcbiAgICAgICAgICAgICAgbGF5ZXI9e2xheWVyfVxuICAgICAgICAgICAgICBkYXRhc2V0cz17ZGF0YXNldHN9XG4gICAgICAgICAgICAgIGxheWVyVHlwZU9wdGlvbnM9e2xheWVyVHlwZU9wdGlvbnN9XG4gICAgICAgICAgICAgIG9wZW5Nb2RhbD17dGhpcy5wcm9wcy5vcGVuTW9kYWx9XG4gICAgICAgICAgICAgIHVwZGF0ZUxheWVyQ29sb3JVST17dGhpcy51cGRhdGVMYXllckNvbG9yVUl9XG4gICAgICAgICAgICAgIHVwZGF0ZUxheWVyQ29uZmlnPXt0aGlzLnVwZGF0ZUxheWVyQ29uZmlnfVxuICAgICAgICAgICAgICB1cGRhdGVMYXllclZpc3VhbENoYW5uZWxDb25maWc9e3RoaXMudXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnfVxuICAgICAgICAgICAgICB1cGRhdGVMYXllclR5cGU9e3RoaXMudXBkYXRlTGF5ZXJUeXBlfVxuICAgICAgICAgICAgICB1cGRhdGVMYXllclRleHRMYWJlbD17dGhpcy51cGRhdGVMYXllclRleHRMYWJlbH1cbiAgICAgICAgICAgICAgdXBkYXRlTGF5ZXJWaXNDb25maWc9e3RoaXMudXBkYXRlTGF5ZXJWaXNDb25maWd9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvUGFuZWxXcmFwcGVyPlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gTGF5ZXJQYW5lbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTGF5ZXJQYW5lbEZhY3Rvcnk7XG4iXX0=
214
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zaWRlLXBhbmVsL2xheWVyLXBhbmVsL2xheWVyLXBhbmVsLnRzeCJdLCJuYW1lcyI6WyJQYW5lbFdyYXBwZXIiLCJzdHlsZWQiLCJkaXYiLCJMYXllclBhbmVsRmFjdG9yeSIsImRlcHMiLCJMYXllckNvbmZpZ3VyYXRvckZhY3RvcnkiLCJMYXllclBhbmVsSGVhZGVyRmFjdG9yeSIsIkxheWVyQ29uZmlndXJhdG9yIiwiTGF5ZXJQYW5lbEhlYWRlciIsIkxheWVyUGFuZWwiLCJuZXdQcm9wIiwicHJvcHMiLCJsYXllckNvbmZpZ0NoYW5nZSIsImxheWVyIiwibmV3VHlwZSIsImxheWVyVHlwZUNoYW5nZSIsIm5ld1Zpc0NvbmZpZyIsImxheWVyVmlzQ29uZmlnQ2hhbmdlIiwiYXJncyIsImxheWVyQ29sb3JVSUNoYW5nZSIsImxheWVyVGV4dExhYmVsQ2hhbmdlIiwibmV3Q29uZmlnIiwiY2hhbm5lbCIsImxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZSIsInZhbHVlIiwidGFyZ2V0IiwidXBkYXRlTGF5ZXJDb25maWciLCJsYWJlbCIsImUiLCJzdG9wUHJvcGFnYXRpb24iLCJpc1Zpc2libGUiLCJjb25maWciLCJsYXllclNldElzVmFsaWQiLCJpc0NvbmZpZ0FjdGl2ZSIsInJlbW92ZUxheWVyIiwiaWQiLCJkdXBsaWNhdGVMYXllciIsImRhdGFzZXRzIiwiaXNEcmFnZ2FibGUiLCJsYXllclR5cGVPcHRpb25zIiwibGlzdGVuZXJzIiwiaXNWYWxpZCIsImFsbG93RHVwbGljYXRlIiwiaXNWYWxpZFRvU2F2ZSIsImNsYXNzTmFtZSIsImRhdGFUZXN0SWRzIiwibGF5ZXJQYW5lbCIsInN0eWxlIiwib25Nb3VzZURvd24iLCJvblRvdWNoU3RhcnQiLCJkYXRhSWQiLCJjb2xvciIsInR5cGUiLCJfdG9nZ2xlRW5hYmxlQ29uZmlnIiwiX3RvZ2dsZVZpc2liaWxpdHkiLCJfcmVzZXRJc1ZhbGlkIiwiX3VwZGF0ZUxheWVyTGFiZWwiLCJfcmVtb3ZlTGF5ZXIiLCJfZHVwbGljYXRlTGF5ZXIiLCJvcGVuTW9kYWwiLCJ1cGRhdGVMYXllckNvbG9yVUkiLCJ1cGRhdGVMYXllclZpc3VhbENoYW5uZWxDb25maWciLCJ1cGRhdGVMYXllclR5cGUiLCJ1cGRhdGVMYXllclRleHRMYWJlbCIsInVwZGF0ZUxheWVyVmlzQ29uZmlnIiwiQ29tcG9uZW50Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkE7O0FBT0E7O0FBRUE7O0FBQ0E7O0FBQ0E7Ozs7Ozs7O0FBb0NBLElBQU1BLFlBQVksR0FBR0MsNkJBQU9DLEdBQVYsNkxBQWxCOztBQVNBQyxpQkFBaUIsQ0FBQ0MsSUFBbEIsR0FBeUIsQ0FBQ0MsNkJBQUQsRUFBMkJDLDRCQUEzQixDQUF6Qjs7QUFFQSxTQUFTSCxpQkFBVCxDQUNFSSxpQkFERixFQUVFQyxnQkFGRixFQUd3QztBQUFBLE1BQ2hDQyxVQURnQztBQUFBOztBQUFBOztBQUFBO0FBQUE7O0FBQUE7O0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUEsNEdBRWhCLFVBQUNDLE9BQUQsRUFBdUM7QUFDekQsY0FBS0MsS0FBTCxDQUFXQyxpQkFBWCxDQUE2QixNQUFLRCxLQUFMLENBQVdFLEtBQXhDLEVBQStDSCxPQUEvQztBQUNELE9BSm1DO0FBQUEsMEdBTWxCLFVBQUNJLE9BQUQsRUFBcUI7QUFDckMsY0FBS0gsS0FBTCxDQUFXSSxlQUFYLENBQTJCLE1BQUtKLEtBQUwsQ0FBV0UsS0FBdEMsRUFBNkNDLE9BQTdDO0FBQ0QsT0FSbUM7QUFBQSwrR0FVYixVQUFDRSxZQUFELEVBQTJDO0FBQ2hFLGNBQUtMLEtBQUwsQ0FBV00sb0JBQVgsQ0FBZ0MsTUFBS04sS0FBTCxDQUFXRSxLQUEzQyxFQUFrREcsWUFBbEQ7QUFDRCxPQVptQztBQUFBLDZHQWNmLFlBQStDO0FBQUE7O0FBQUEsMkNBQTNDRSxJQUEyQztBQUEzQ0EsVUFBQUEsSUFBMkM7QUFBQTs7QUFDbEUsNkJBQUtQLEtBQUwsRUFBV1Es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RUFBRSxLQUFLQyxlQWR6QjtBQWVFLFVBQUEsa0JBQWtCLEVBQUVwQixXQWZ0QjtBQWdCRSxVQUFBLFNBQVMsRUFBRUU7QUFoQmIsVUFSRixFQTBCR1AsY0FBYyxpQkFDYixnQ0FBQyxpQkFBRDtBQUNFLFVBQUEsS0FBSyxFQUFFcEIsS0FEVDtBQUVFLFVBQUEsUUFBUSxFQUFFd0IsUUFGWjtBQUdFLFVBQUEsZ0JBQWdCLEVBQUVFLGdCQUhwQjtBQUlFLFVBQUEsU0FBUyxFQUFFLEtBQUs1QixLQUFMLENBQVdnRCxTQUp4QjtBQUtFLFVBQUEsa0JBQWtCLEVBQUUsS0FBS0Msa0JBTDNCO0FBTUUsVUFBQSxpQkFBaUIsRUFBRSxLQUFLbEMsaUJBTjFCO0FBT0UsVUFBQSw4QkFBOEIsRUFBRSxLQUFLbUMsOEJBUHZDO0FBUUUsVUFBQSxlQUFlLEVBQUUsS0FBS0MsZUFSeEI7QUFTRSxVQUFBLG9CQUFvQixFQUFFLEtBQUtDLG9CQVQ3QjtBQVVFLFVBQUEsb0JBQW9CLEVBQUUsS0FBS0M7QUFWN0IsVUEzQkosQ0FERjtBQTJDRDtBQS9HbUM7QUFBQTtBQUFBLElBQ2JDLGdCQURhOztBQWtIdEMsU0FBT3hELFVBQVA7QUFDRDs7ZUFFY04saUIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjMgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgUmVhY3QsIHtcbiAgQ29tcG9uZW50LFxuICBNb3VzZUV2ZW50SGFuZGxlcixcbiAgVG91Y2hFdmVudEhhbmRsZXIsXG4gIENTU1Byb3BlcnRpZXMsXG4gIENoYW5nZUV2ZW50SGFuZGxlclxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcblxuaW1wb3J0IExheWVyQ29uZmlndXJhdG9yRmFjdG9yeSBmcm9tICcuL2xheWVyLWNvbmZpZ3VyYXRvcic7XG5pbXBvcnQgTGF5ZXJQYW5lbEhlYWRlckZhY3RvcnkgZnJvbSAnLi9sYXllci1wYW5lbC1oZWFkZXInO1xuaW1wb3J0IHtkYXRhVGVzdElkc30gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtOZXN0ZWRQYXJ0aWFsLCBMYXllclZpc0NvbmZpZywgQ29sb3JVSX0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge0xheWVyLCBMYXllckJhc2VDb25maWd9IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7dG9nZ2xlTW9kYWwsIFZpc1N0YXRlQWN0aW9ucywgQWN0aW9uSGFuZGxlcn0gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcbmltcG9ydCB7RGF0YXNldHN9IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuXG50eXBlIExheWVyUGFuZWxQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBzdHlsZT86IENTU1Byb3BlcnRpZXM7XG4gIG9uTW91c2VEb3duPzogTW91c2VFdmVudEhhbmRsZXI7XG4gIG9uVG91Y2hTdGFydD86IFRvdWNoRXZlbnRIYW5kbGVyO1xuICBsYXllcjogTGF5ZXI7XG4gIGRhdGFzZXRzOiBEYXRhc2V0cztcbiAgbGF5ZXJUeXBlT3B0aW9uczoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBpY29uOiBhbnk7IC8vXG4gICAgcmVxdWlyZURhdGE6IGFueTsgLy9cbiAgfVtdO1xuICBpc0RyYWdnYWJsZT86IGJvb2xlYW47XG4gIGlkeDogbnVtYmVyO1xuICBvcGVuTW9kYWw6IEFjdGlvbkhhbmRsZXI8dHlwZW9mIHRvZ2dsZU1vZGFsPjtcbiAgbGF5ZXJDb2xvclVJQ2hhbmdlOiBBY3Rpb25IYW5kbGVyPHR5cGVvZiBWaXNTdGF0ZUFjdGlvbnMubGF5ZXJDb2xvclVJQ2hhbmdlPjtcbiAgbGF5ZXJDb25maWdDaGFuZ2U6IEFjdGlvbkhhbmRsZXI8dHlwZW9mIFZpc1N0YXRlQWN0aW9ucy5sYXllckNvbmZpZ0NoYW5nZT47XG4gIGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZTogQWN0aW9uSGFuZGxlcjxcbiAgICB0eXBlb2YgVmlzU3RhdGVBY3Rpb25zLmxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZVxuICA+O1xuICBsYXllclNldElzVmFsaWQ6IEFjdGlvbkhhbmRsZXI8dHlwZW9mIFZpc1N0YXRlQWN0aW9ucy5sYXllclNldElzVmFsaWQ+O1xuICBsYXllclR5cGVDaGFuZ2U6IEFjdGlvbkhhbmRsZXI8dHlwZW9mIFZpc1N0YXRlQWN0aW9ucy5sYXllclR5cGVDaGFuZ2U+O1xuICBsYXllclZpc0NvbmZpZ0NoYW5nZTogQWN0aW9uSGFuZGxlcjx0eXBlb2YgVmlzU3RhdGVBY3Rpb25zLmxheWVyVmlzQ29uZmlnQ2hhbmdlPjtcbiAgbGF5ZXJUZXh0TGFiZWxDaGFuZ2U6IEFjdGlvbkhhbmRsZXI8dHlwZW9mIFZpc1N0YXRlQWN0aW9ucy5sYXllclRleHRMYWJlbENoYW5nZT47XG4gIHJlbW92ZUxheWVyOiBBY3Rpb25IYW5kbGVyPHR5cGVvZiBWaXNTdGF0ZUFjdGlvbnMucmVtb3ZlTGF5ZXI+O1xuICBkdXBsaWNhdGVMYXllcjogQWN0aW9uSGFuZGxlcjx0eXBlb2YgVmlzU3RhdGVBY3Rpb25zLmR1cGxpY2F0ZUxheWVyPjtcbiAgbGlzdGVuZXJzPzogUmVhY3QuRWxlbWVudFR5cGU7XG59O1xuXG5jb25zdCBQYW5lbFdyYXBwZXIgPSBzdHlsZWQuZGl2PHthY3RpdmU6IGJvb2xlYW59PmBcbiAgZm9udC1zaXplOiAxMnB4O1xuICBib3JkZXItcmFkaXVzOiAxcHg7XG4gIHotaW5kZXg6IDEwMDA7XG4gICYuZHJhZ2dpbmcge1xuICAgIGN1cnNvcjogbW92ZTtcbiAgfVxuYDtcblxuTGF5ZXJQYW5lbEZhY3RvcnkuZGVwcyA9IFtMYXllckNvbmZpZ3VyYXRvckZhY3RvcnksIExheWVyUGFuZWxIZWFkZXJGYWN0b3J5XTtcblxuZnVuY3Rpb24gTGF5ZXJQYW5lbEZhY3RvcnkoXG4gIExheWVyQ29uZmlndXJhdG9yOiBSZXR1cm5UeXBlPHR5cGVvZiBMYXllckNvbmZpZ3VyYXRvckZhY3Rvcnk+LFxuICBMYXllclBhbmVsSGVhZGVyOiBSZXR1cm5UeXBlPHR5cGVvZiBMYXllclBhbmVsSGVhZGVyRmFjdG9yeT5cbik6IFJlYWN0LkNvbXBvbmVudFR5cGU8TGF5ZXJQYW5lbFByb3BzPiB7XG4gIGNsYXNzIExheWVyUGFuZWwgZXh0ZW5kcyBDb21wb25lbnQ8TGF5ZXJQYW5lbFByb3BzPiB7XG4gICAgdXBkYXRlTGF5ZXJDb25maWcgPSAobmV3UHJvcDogUGFydGlhbDxMYXllckJhc2VDb25maWc+KSA9PiB7XG4gICAgICB0aGlzLnByb3BzLmxheWVyQ29uZmlnQ2hhbmdlKHRoaXMucHJvcHMubGF5ZXIsIG5ld1Byb3ApO1xuICAgIH07XG5cbiAgICB1cGRhdGVMYXllclR5cGUgPSAobmV3VHlwZTogc3RyaW5nKSA9PiB7XG4gICAgICB0aGlzLnByb3BzLmxheWVyVHlwZUNoYW5nZSh0aGlzLnByb3BzLmxheWVyLCBuZXdUeXBlKTtcbiAgICB9O1xuXG4gICAgdXBkYXRlTGF5ZXJWaXNDb25maWcgPSAobmV3VmlzQ29uZmlnOiBQYXJ0aWFsPExheWVyVmlzQ29uZmlnPikgPT4ge1xuICAgICAgdGhpcy5wcm9wcy5sYXllclZpc0NvbmZpZ0NoYW5nZSh0aGlzLnByb3BzLmxheWVyLCBuZXdWaXNDb25maWcpO1xuICAgIH07XG5cbiAgICB1cGRhdGVMYXllckNvbG9yVUkgPSAoLi4uYXJnczogW3N0cmluZywgTmVzdGVkUGFydGlhbDxDb2xvclVJPl0pID0+IHtcbiAgICAgIHRoaXMucHJvcHMubGF5ZXJDb2xvclVJQ2hhbmdlKHRoaXMucHJvcHMubGF5ZXIsIC4uLmFyZ3MpO1xuICAgIH07XG5cbiAgICB1cGRhdGVMYXllclRleHRMYWJlbCA9ICguLi5hcmdzOiBbbnVtYmVyIHwgJ2FsbCcsIHN0cmluZywgYW55XSkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy5sYXllclRleHRMYWJlbENoYW5nZSh0aGlzLnByb3BzLmxheWVyLCAuLi5hcmdzKTtcbiAgICB9O1xuXG4gICAgdXBkYXRlTGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnID0gKG5ld0NvbmZpZzogUGFydGlhbDxMYXllckJhc2VDb25maWc+LCBjaGFubmVsOiBzdHJpbmcpID0+IHtcbiAgICAgIHRoaXMucHJvcHMubGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlKHRoaXMucHJvcHMubGF5ZXIsIG5ld0NvbmZpZywgY2hhbm5lbCk7XG4gICAgfTtcblxuICAgIF91cGRhdGVMYXllckxhYmVsOiBDaGFuZ2VFdmVudEhhbmRsZXI8SFRNTElucHV0RWxlbWVudD4gPSAoe3RhcmdldDoge3ZhbHVlfX0pID0+IHtcbiAgICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe2xhYmVsOiB2YWx1ZX0pO1xuICAgIH07XG5cbiAgICBfdG9nZ2xlVmlzaWJpbGl0eTogTW91c2VFdmVudEhhbmRsZXIgPSBlID0+IHtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBjb25zdCBpc1Zpc2libGUgPSAhdGhpcy5wcm9wcy5sYXllci5jb25maWcuaXNWaXNpYmxlO1xuICAgICAgdGhpcy51cGRhdGVMYXllckNvbmZpZyh7aXNWaXNpYmxlfSk7XG4gICAgfTtcblxuICAgIF9yZXNldElzVmFsaWQ6IE1vdXNlRXZlbnRIYW5kbGVyID0gZSA9PiB7XG4gICAgICBlPy5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIC8vIE1ha2UgdGhlIGxheWVyIHZhbGlkIGFuZCB2aXNpYmxlIGFnYWluIGFmdGVyIGFuIGVycm9yXG4gICAgICB0aGlzLnByb3BzLmxheWVyU2V0SXNWYWxpZCh0aGlzLnByb3BzLmxheWVyLCB0cnVlKTtcbiAgICB9O1xuXG4gICAgX3RvZ2dsZUVuYWJsZUNvbmZpZzogTW91c2VFdmVudEhhbmRsZXIgPSBlID0+IHtcbiAgICAgIGU/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgY29uc3Qge1xuICAgICAgICBsYXllcjoge1xuICAgICAgICAgIGNvbmZpZzoge2lzQ29uZmlnQWN0aXZlfVxuICAgICAgICB9XG4gICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgIHRoaXMudXBkYXRlTGF5ZXJDb25maWcoe2lzQ29uZmlnQWN0aXZlOiAhaXNDb25maWdBY3RpdmV9KTtcbiAgICB9O1xuXG4gICAgX3JlbW92ZUxheWVyOiBNb3VzZUV2ZW50SGFuZGxlciA9IGUgPT4ge1xuICAgICAgZT8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLnByb3BzLnJlbW92ZUxheWVyKHRoaXMucHJvcHMubGF5ZXIuaWQpO1xuICAgIH07XG5cbiAgICBfZHVwbGljYXRlTGF5ZXI6IE1vdXNlRXZlbnRIYW5kbGVyID0gZSA9PiB7XG4gICAgICBlPy5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMucHJvcHMuZHVwbGljYXRlTGF5ZXIodGhpcy5wcm9wcy5sYXllci5pZCk7XG4gICAgfTtcblxuICAgIHJlbmRlcigpIHtcbiAgICAgIGNvbnN0IHtsYXllciwgZGF0YXNldHMsIGlzRHJhZ2dhYmxlLCBsYXllclR5cGVPcHRpb25zLCBsaXN0ZW5lcnN9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHtjb25maWcsIGlzVmFsaWR9ID0gbGF5ZXI7XG4gICAgICBjb25zdCB7aXNDb25maWdBY3RpdmV9ID0gY29uZmlnO1xuICAgICAgY29uc3QgYWxsb3dEdXBsaWNhdGUgPSB0eXBlb2YgbGF5ZXIuaXNWYWxpZFRvU2F2ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBsYXllci5pc1ZhbGlkVG9TYXZlKCk7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxQYW5lbFdyYXBwZXJcbiAgICAgICAgICBhY3RpdmU9e2lzQ29uZmlnQWN0aXZlfVxuICAgICAgICAgIGNsYXNzTmFtZT17YGxheWVyLXBhbmVsICR7dGhpcy5wcm9wcy5jbGFzc05hbWV9YH1cbiAgICAgICAgICBkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZHMubGF5ZXJQYW5lbH1cbiAgICAgICAgICBzdHlsZT17dGhpcy5wcm9wcy5zdHlsZX1cbiAgICAgICAgICBvbk1vdXNlRG93bj17dGhpcy5wcm9wcy5vbk1vdXNlRG93bn1cbiAgICAgICAgICBvblRvdWNoU3RhcnQ9e3RoaXMucHJvcHMub25Ub3VjaFN0YXJ0fVxuICAgICAgICA+XG4gICAgICAgICAgPExheWVyUGFuZWxIZWFkZXJcbiAgICAgICAgICAgIGlzQ29uZmlnQWN0aXZlPXtpc0NvbmZpZ0FjdGl2ZX1cbiAgICAgICAgICAgIGxheWVySWQ9e2xheWVyLmlkfVxuICAgICAgICAgICAgaXNWaXNpYmxlPXtjb25maWcuaXNWaXNpYmxlfVxuICAgICAgICAgICAgaXNWYWxpZD17aXNWYWxpZH1cbiAgICAgICAgICAgIGxhYmVsPXtjb25maWcubGFiZWx9XG4gICAgICAgICAgICBsYWJlbFJDR0NvbG9yVmFsdWVzPXtjb25maWcuZGF0YUlkID8gZGF0YXNldHNbY29uZmlnLmRhdGFJZF0uY29sb3IgOiBudWxsfVxuICAgICAgICAgICAgbGF5ZXJUeXBlPXtsYXllci50eXBlfVxuICAgICAgICAgICAgYWxsb3dEdXBsaWNhdGU9e2FsbG93RHVwbGljYXRlfVxuICAgICAgICAgICAgb25Ub2dnbGVFbmFibGVDb25maWc9e3RoaXMuX3RvZ2dsZUVuYWJsZUNvbmZpZ31cbiAgICAgICAgICAgIG9uVG9nZ2xlVmlzaWJpbGl0eT17dGhpcy5fdG9nZ2xlVmlzaWJpbGl0eX1cbiAgICAgICAgICAgIG9uUmVzZXRJc1ZhbGlkPXt0aGlzLl9yZXNldElzVmFsaWR9XG4gICAgICAgICAgICBvblVwZGF0ZUxheWVyTGFiZWw9e3RoaXMuX3VwZGF0ZUxheWVyTGFiZWx9XG4gICAgICAgICAgICBvblJlbW92ZUxheWVyPXt0aGlzLl9yZW1vdmVMYXllcn1cbiAgICAgICAgICAgIG9uRHVwbGljYXRlTGF5ZXI9e3RoaXMuX2R1cGxpY2F0ZUxheWVyfVxuICAgICAgICAgICAgaXNEcmFnTkRyb3BFbmFibGVkPXtpc0RyYWdnYWJsZX1cbiAgICAgICAgICAgIGxpc3RlbmVycz17bGlzdGVuZXJzfVxuICAgICAgICAgIC8+XG4gICAgICAgICAge2lzQ29uZmlnQWN0aXZlICYmIChcbiAgICAgICAgICAgIDxMYXllckNvbmZpZ3VyYXRvclxuICAgICAgICAgICAgICBsYXllcj17bGF5ZXJ9XG4gICAgICAgICAgICAgIGRhdGFzZXRzPXtkYXRhc2V0c31cbiAgICAgICAgICAgICAgbGF5ZXJUeXBlT3B0aW9ucz17bGF5ZXJUeXBlT3B0aW9uc31cbiAgICAgICAgICAgICAgb3Blbk1vZGFsPXt0aGlzLnByb3BzLm9wZW5Nb2RhbH1cbiAgICAgICAgICAgICAgdXBkYXRlTGF5ZXJDb2xvclVJPXt0aGlzLnVwZGF0ZUxheWVyQ29sb3JVSX1cbiAgICAgICAgICAgICAgdXBkYXRlTGF5ZXJDb25maWc9e3RoaXMudXBkYXRlTGF5ZXJDb25maWd9XG4gICAgICAgICAgICAgIHVwZGF0ZUxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZz17dGhpcy51cGRhdGVMYXllclZpc3VhbENoYW5uZWxDb25maWd9XG4gICAgICAgICAgICAgIHVwZGF0ZUxheWVyVHlwZT17dGhpcy51cGRhdGVMYXllclR5cGV9XG4gICAgICAgICAgICAgIHVwZGF0ZUxheWVyVGV4dExhYmVsPXt0aGlzLnVwZGF0ZUxheWVyVGV4dExhYmVsfVxuICAgICAgICAgICAgICB1cGRhdGVMYXllclZpc0NvbmZpZz17dGhpcy51cGRhdGVMYXllclZpc0NvbmZpZ31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9QYW5lbFdyYXBwZXI+XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBMYXllclBhbmVsO1xufVxuXG5leHBvcnQgZGVmYXVsdCBMYXllclBhbmVsRmFjdG9yeTtcbiJdfQ==