@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.
- package/dist/bottom-widget.d.ts +11 -38
- package/dist/bottom-widget.js +43 -99
- package/dist/common/action-panel.d.ts +2 -2
- package/dist/common/action-panel.js +4 -4
- package/dist/common/animation-control/animation-control.d.ts +19 -18
- package/dist/common/animation-control/animation-control.js +59 -81
- package/dist/common/animation-control/animation-controller.d.ts +6 -2
- package/dist/common/animation-control/animation-controller.js +50 -36
- package/dist/common/animation-control/animation-speed-slider.js +2 -2
- package/dist/common/animation-control/animation-window-control.js +1 -1
- package/dist/common/animation-control/floating-time-display.d.ts +2 -2
- package/dist/common/animation-control/floating-time-display.js +2 -2
- package/dist/common/animation-control/play-control.d.ts +2 -2
- package/dist/common/animation-control/play-control.js +1 -1
- package/dist/common/animation-control/playback-controls.d.ts +7 -7
- package/dist/common/animation-control/playback-controls.js +6 -6
- package/dist/common/animation-control/reset-control.d.ts +2 -2
- package/dist/common/animation-control/reset-control.js +1 -1
- package/dist/common/animation-control/speed-control.d.ts +2 -2
- package/dist/common/animation-control/speed-control.js +2 -2
- package/dist/common/animation-control/window-action-control.d.ts +2 -2
- package/dist/common/animation-control/window-action-control.js +1 -1
- package/dist/common/checkbox.d.ts +2 -2
- package/dist/common/checkbox.js +3 -3
- package/dist/common/color-legend.d.ts +3 -3
- package/dist/common/color-legend.js +11 -17
- package/dist/common/data-table/button.d.ts +1 -1
- package/dist/common/data-table/button.js +2 -2
- package/dist/common/data-table/canvas.js +2 -2
- package/dist/common/data-table/cell-size.js +44 -13
- package/dist/common/data-table/display-format.d.ts +25 -0
- package/dist/common/data-table/display-format.js +169 -0
- package/dist/common/data-table/grid.d.ts +5 -2
- package/dist/common/data-table/grid.js +45 -5
- package/dist/common/data-table/header-cell.d.ts +4 -1
- package/dist/common/data-table/header-cell.js +66 -29
- package/dist/common/data-table/index.d.ts +27 -34
- package/dist/common/data-table/index.js +148 -62
- package/dist/common/data-table/option-dropdown.d.ts +17 -3
- package/dist/common/data-table/option-dropdown.js +86 -13
- package/dist/common/dataset-label.d.ts +2 -2
- package/dist/common/dataset-label.js +3 -3
- package/dist/common/error-boundary.d.ts +6 -2
- package/dist/common/error-boundary.js +2 -2
- package/dist/common/field-selector.d.ts +9 -3
- package/dist/common/field-selector.js +3 -3
- package/dist/common/field-token.d.ts +8 -0
- package/dist/common/field-token.js +7 -3
- package/dist/common/file-uploader/file-drop.d.ts +3 -2
- package/dist/common/file-uploader/file-drop.js +2 -2
- package/dist/common/file-uploader/file-upload-progress.js +2 -2
- package/dist/common/file-uploader/file-upload.d.ts +2 -6
- package/dist/common/file-uploader/file-upload.js +2 -2
- package/dist/common/file-uploader/upload-button.d.ts +1 -0
- package/dist/common/file-uploader/upload-button.js +2 -2
- package/dist/common/histogram-plot.d.ts +2 -2
- package/dist/common/histogram-plot.js +18 -12
- package/dist/common/icon-button.d.ts +2 -1
- package/dist/common/icon-button.js +2 -2
- package/dist/common/icons/add.d.ts +2 -2
- package/dist/common/icons/add.js +2 -2
- package/dist/common/icons/anchor_window.d.ts +2 -2
- package/dist/common/icons/anchor_window.js +2 -2
- package/dist/common/icons/arrow-down-alt.d.ts +2 -2
- package/dist/common/icons/arrow-down-alt.js +2 -2
- package/dist/common/icons/arrow-down-solid.d.ts +2 -2
- package/dist/common/icons/arrow-down-solid.js +2 -2
- package/dist/common/icons/arrow-down.d.ts +2 -2
- package/dist/common/icons/arrow-down.js +2 -2
- package/dist/common/icons/arrow-left.d.ts +2 -2
- package/dist/common/icons/arrow-left.js +2 -2
- package/dist/common/icons/arrow-right.d.ts +2 -2
- package/dist/common/icons/arrow-right.js +2 -2
- package/dist/common/icons/arrow-up-alt.d.ts +2 -2
- package/dist/common/icons/arrow-up-alt.js +2 -2
- package/dist/common/icons/arrow-up-solid.d.ts +2 -2
- package/dist/common/icons/arrow-up-solid.js +2 -2
- package/dist/common/icons/arrow-up.d.ts +2 -2
- package/dist/common/icons/arrow-up.js +2 -2
- package/dist/common/icons/base.d.ts +1 -1
- package/dist/common/icons/base.js +2 -2
- package/dist/common/icons/bug.d.ts +2 -2
- package/dist/common/icons/bug.js +2 -2
- package/dist/common/icons/cancel.d.ts +2 -2
- package/dist/common/icons/cancel.js +2 -2
- package/dist/common/icons/checkmark.d.ts +2 -2
- package/dist/common/icons/checkmark.js +2 -2
- package/dist/common/icons/clipboard.d.ts +2 -2
- package/dist/common/icons/clipboard.js +2 -2
- package/dist/common/icons/clock.d.ts +2 -2
- package/dist/common/icons/clock.js +2 -2
- package/dist/common/icons/close.d.ts +2 -2
- package/dist/common/icons/close.js +2 -2
- package/dist/common/icons/code-alt.d.ts +2 -2
- package/dist/common/icons/code-alt.js +2 -2
- package/dist/common/icons/copy.d.ts +2 -2
- package/dist/common/icons/copy.js +2 -2
- package/dist/common/icons/crosshairs.d.ts +2 -2
- package/dist/common/icons/crosshairs.js +2 -2
- package/dist/common/icons/cube-3d.d.ts +2 -2
- package/dist/common/icons/cube-3d.js +2 -2
- package/dist/common/icons/cursor-click.d.ts +2 -2
- package/dist/common/icons/cursor-click.js +2 -2
- package/dist/common/icons/cursor-point.d.ts +14 -0
- package/dist/common/icons/cursor-point.js +89 -0
- package/dist/common/icons/data-table.d.ts +2 -2
- package/dist/common/icons/data-table.js +2 -2
- package/dist/common/icons/db.d.ts +2 -2
- package/dist/common/icons/db.js +2 -2
- package/dist/common/icons/delete.d.ts +2 -2
- package/dist/common/icons/delete.js +2 -2
- package/dist/common/icons/docs.d.ts +2 -2
- package/dist/common/icons/docs.js +2 -2
- package/dist/common/icons/drag-n-drop.d.ts +2 -2
- package/dist/common/icons/drag-n-drop.js +2 -2
- package/dist/common/icons/draw-polygon.d.ts +2 -2
- package/dist/common/icons/draw-polygon.js +2 -2
- package/dist/common/icons/email.d.ts +2 -2
- package/dist/common/icons/email.js +2 -2
- package/dist/common/icons/expand.d.ts +2 -2
- package/dist/common/icons/expand.js +2 -2
- package/dist/common/icons/eye-seen.d.ts +2 -2
- package/dist/common/icons/eye-seen.js +2 -2
- package/dist/common/icons/eye-unseen.d.ts +2 -2
- package/dist/common/icons/eye-unseen.js +2 -2
- package/dist/common/icons/file-type.d.ts +2 -2
- package/dist/common/icons/file-type.js +2 -2
- package/dist/common/icons/file.d.ts +2 -2
- package/dist/common/icons/file.js +2 -2
- package/dist/common/icons/files.d.ts +1 -1
- package/dist/common/icons/files.js +2 -2
- package/dist/common/icons/filter-funnel.d.ts +2 -2
- package/dist/common/icons/filter-funnel.js +2 -2
- package/dist/common/icons/free-window.d.ts +2 -2
- package/dist/common/icons/free-window.js +2 -2
- package/dist/common/icons/gear.d.ts +2 -2
- package/dist/common/icons/gear.js +2 -2
- package/dist/common/icons/hash.d.ts +2 -2
- package/dist/common/icons/hash.js +2 -2
- package/dist/common/icons/histogram.d.ts +1 -1
- package/dist/common/icons/histogram.js +2 -2
- package/dist/common/icons/index.d.ts +1 -0
- package/dist/common/icons/index.js +10 -2
- package/dist/common/icons/info.d.ts +2 -2
- package/dist/common/icons/info.js +2 -2
- package/dist/common/icons/layers.d.ts +2 -2
- package/dist/common/icons/layers.js +2 -2
- package/dist/common/icons/left-arrow.d.ts +2 -2
- package/dist/common/icons/left-arrow.js +2 -2
- package/dist/common/icons/legend.d.ts +2 -2
- package/dist/common/icons/legend.js +2 -2
- package/dist/common/icons/line-chart.d.ts +2 -2
- package/dist/common/icons/line-chart.js +2 -2
- package/dist/common/icons/login.d.ts +2 -2
- package/dist/common/icons/login.js +2 -2
- package/dist/common/icons/logout.d.ts +2 -2
- package/dist/common/icons/logout.js +2 -2
- package/dist/common/icons/map-icon.d.ts +2 -2
- package/dist/common/icons/map-icon.js +2 -2
- package/dist/common/icons/map.d.ts +2 -2
- package/dist/common/icons/map.js +2 -2
- package/dist/common/icons/messages.d.ts +2 -2
- package/dist/common/icons/messages.js +2 -2
- package/dist/common/icons/minus.d.ts +2 -2
- package/dist/common/icons/minus.js +2 -2
- package/dist/common/icons/order-by-dataset.d.ts +2 -2
- package/dist/common/icons/order-by-dataset.js +2 -2
- package/dist/common/icons/order-by-list.d.ts +2 -2
- package/dist/common/icons/order-by-list.js +2 -2
- package/dist/common/icons/pause.d.ts +2 -2
- package/dist/common/icons/pause.js +2 -2
- package/dist/common/icons/picture.d.ts +1 -1
- package/dist/common/icons/picture.js +2 -2
- package/dist/common/icons/pin.d.ts +2 -2
- package/dist/common/icons/pin.js +2 -2
- package/dist/common/icons/play.d.ts +2 -2
- package/dist/common/icons/play.js +2 -2
- package/dist/common/icons/polygon.d.ts +2 -2
- package/dist/common/icons/polygon.js +2 -2
- package/dist/common/icons/rectangle.d.ts +2 -2
- package/dist/common/icons/rectangle.js +2 -2
- package/dist/common/icons/reduce.d.ts +2 -2
- package/dist/common/icons/reduce.js +2 -2
- package/dist/common/icons/reset.d.ts +2 -2
- package/dist/common/icons/reset.js +2 -2
- package/dist/common/icons/rocket.d.ts +2 -2
- package/dist/common/icons/rocket.js +2 -2
- package/dist/common/icons/save.d.ts +2 -2
- package/dist/common/icons/save.js +2 -2
- package/dist/common/icons/save2.d.ts +2 -2
- package/dist/common/icons/save2.js +2 -2
- package/dist/common/icons/search.d.ts +2 -2
- package/dist/common/icons/search.js +2 -2
- package/dist/common/icons/settings.d.ts +2 -2
- package/dist/common/icons/settings.js +2 -2
- package/dist/common/icons/share.d.ts +2 -2
- package/dist/common/icons/share.js +2 -2
- package/dist/common/icons/split.d.ts +2 -2
- package/dist/common/icons/split.js +2 -2
- package/dist/common/icons/square-select.d.ts +2 -2
- package/dist/common/icons/square-select.js +2 -2
- package/dist/common/icons/trash.d.ts +2 -2
- package/dist/common/icons/trash.js +2 -2
- package/dist/common/icons/vert-dots.d.ts +2 -2
- package/dist/common/icons/vert-dots.js +2 -2
- package/dist/common/icons/vert-three-dots.d.ts +2 -2
- package/dist/common/icons/vert-three-dots.js +2 -2
- package/dist/common/icons/warning-sign.d.ts +2 -2
- package/dist/common/icons/warning-sign.js +2 -2
- package/dist/common/icons/warning.d.ts +2 -2
- package/dist/common/icons/warning.js +2 -2
- package/dist/common/image-preview.d.ts +2 -2
- package/dist/common/image-preview.js +2 -2
- package/dist/common/index.d.ts +1 -1
- package/dist/common/index.js +8 -2
- package/dist/common/info-helper.d.ts +2 -2
- package/dist/common/info-helper.js +2 -2
- package/dist/common/item-selector/accessor.js +2 -2
- package/dist/common/item-selector/chickleted-input.js +2 -2
- package/dist/common/item-selector/dropdown-list.d.ts +28 -8
- package/dist/common/item-selector/dropdown-list.js +144 -25
- package/dist/common/item-selector/item-selector.d.ts +2 -3
- package/dist/common/item-selector/item-selector.js +7 -3
- package/dist/common/item-selector/typeahead.d.ts +16 -12
- package/dist/common/item-selector/typeahead.js +24 -13
- package/dist/common/line-chart.d.ts +2 -2
- package/dist/common/line-chart.js +2 -2
- package/dist/common/loading-spinner.js +2 -2
- package/dist/common/logo.d.ts +2 -2
- package/dist/common/logo.js +2 -2
- package/dist/common/map-layer-selector.d.ts +2 -2
- package/dist/common/map-layer-selector.js +3 -4
- package/dist/common/modal.d.ts +24 -11
- package/dist/common/modal.js +2 -2
- package/dist/common/portaled.d.ts +513 -2
- package/dist/common/portaled.js +2 -2
- package/dist/common/progress-bar.d.ts +2 -2
- package/dist/common/progress-bar.js +2 -2
- package/dist/common/range-brush.js +2 -2
- package/dist/common/range-plot.d.ts +6 -2
- package/dist/common/range-plot.js +4 -3
- package/dist/common/range-slider.d.ts +5 -1
- package/dist/common/range-slider.js +9 -3
- package/dist/common/slider/mouse-event.js +2 -2
- package/dist/common/slider/slider-bar-handle.d.ts +2 -2
- package/dist/common/slider/slider-bar-handle.js +2 -2
- package/dist/common/slider/slider-handle.d.ts +1 -1
- package/dist/common/slider/slider-handle.js +2 -2
- package/dist/common/slider/slider.d.ts +7 -5
- package/dist/common/slider/slider.js +8 -5
- package/dist/common/styled-components.d.ts +5 -0
- package/dist/common/styled-components.js +161 -47
- package/dist/common/switch.d.ts +3 -2
- package/dist/common/switch.js +2 -2
- package/dist/common/time-range-slider-time-title.d.ts +2 -2
- package/dist/common/time-range-slider-time-title.js +2 -2
- package/dist/common/time-range-slider.d.ts +6 -3
- package/dist/common/time-range-slider.js +33 -14
- package/dist/common/time-slider-marker.d.ts +1 -1
- package/dist/common/time-slider-marker.js +3 -3
- package/dist/common/timeline-slider.d.ts +13 -0
- package/dist/common/timeline-slider.js +173 -0
- package/dist/common/tippy-tooltip.d.ts +4 -2
- package/dist/common/tippy-tooltip.js +23 -11
- package/dist/common/toolbar-item.d.ts +1 -1
- package/dist/common/toolbar-item.js +6 -4
- package/dist/common/toolbar.js +2 -2
- package/dist/common/vertical-toolbar.js +2 -2
- package/dist/connect/keplergl-connect.d.ts +5 -1
- package/dist/connect/keplergl-connect.js +2 -2
- package/dist/connect/with-local-selector.js +2 -2
- package/dist/container.js +2 -2
- package/dist/context.js +4 -3
- package/dist/dnd-context.d.ts +13 -0
- package/dist/dnd-context.js +252 -0
- package/dist/editor/editor.d.ts +11 -10
- package/dist/editor/editor.js +97 -103
- package/dist/editor/feature-action-panel.d.ts +8 -6
- package/dist/editor/feature-action-panel.js +75 -22
- package/dist/effects/effect-configurator.d.ts +18 -0
- package/dist/effects/effect-configurator.js +237 -0
- package/dist/effects/effect-list.d.ts +15 -0
- package/dist/effects/effect-list.js +173 -0
- package/dist/effects/effect-manager.d.ts +21 -0
- package/dist/effects/effect-manager.js +129 -0
- package/dist/effects/effect-panel-header.d.ts +33 -0
- package/dist/effects/effect-panel-header.js +174 -0
- package/dist/effects/effect-panel.d.ts +24 -0
- package/dist/effects/effect-panel.js +162 -0
- package/dist/effects/effect-time-configurator.d.ts +13 -0
- package/dist/effects/effect-time-configurator.js +191 -0
- package/dist/effects/effect-type-selector.d.ts +11 -0
- package/dist/effects/effect-type-selector.js +117 -0
- package/dist/effects/side-panel-title.d.ts +7 -0
- package/dist/effects/side-panel-title.js +67 -0
- package/dist/filter-animation-controller.d.ts +17 -0
- package/dist/filter-animation-controller.js +91 -0
- package/dist/filters/components.js +2 -2
- package/dist/filters/filter-panels/filter-panel-with-field-select.js +3 -3
- package/dist/filters/filter-panels/multi-select-filter-panel.js +3 -3
- package/dist/filters/filter-panels/new-filter-panel.js +2 -2
- package/dist/filters/filter-panels/polygon-filter-panel.js +3 -3
- package/dist/filters/filter-panels/range-filter-panel.js +3 -3
- package/dist/filters/filter-panels/single-select-filter-panel.js +3 -3
- package/dist/filters/filter-panels/time-range-filter-panel.js +25 -8
- package/dist/filters/filter-panels/types.d.ts +2 -1
- package/dist/filters/filter-panels/types.js +1 -1
- package/dist/filters/index.d.ts +2 -0
- package/dist/filters/index.js +18 -2
- package/dist/filters/multi-select-filter.js +2 -2
- package/dist/filters/polygon-filter.js +14 -4
- package/dist/filters/range-filter.js +6 -4
- package/dist/filters/single-select-filter.js +2 -2
- package/dist/filters/time-range-filter.d.ts +2 -1
- package/dist/filters/time-range-filter.js +10 -7
- package/dist/filters/time-widget-top.d.ts +8 -0
- package/dist/filters/time-widget-top.js +123 -0
- package/dist/filters/time-widget.d.ts +3 -7
- package/dist/filters/time-widget.js +35 -92
- package/dist/filters/types.d.ts +7 -3
- package/dist/filters/types.js +1 -1
- package/dist/geocoder/geocoder.d.ts +1 -3
- package/dist/geocoder/geocoder.js +2 -2
- package/dist/geocoder-panel.d.ts +9 -3
- package/dist/geocoder-panel.js +30 -19
- package/dist/hooks/useFeatureFlags.js +1 -1
- package/dist/index.d.ts +68 -20
- package/dist/index.js +599 -99
- package/dist/injector.d.ts +4 -4
- package/dist/injector.js +2 -2
- package/dist/kepler-gl.d.ts +58 -17
- package/dist/kepler-gl.js +78 -31
- package/dist/layer-animation-controller.d.ts +13 -0
- package/dist/layer-animation-controller.js +76 -0
- package/dist/map/coordinate-info.js +2 -2
- package/dist/map/effects/effect-control.d.ts +16 -0
- package/dist/map/effects/effect-control.js +81 -0
- package/dist/map/layer-hover-info.d.ts +2 -2
- package/dist/map/layer-hover-info.js +26 -10
- package/dist/map/layer-selector-panel.js +2 -2
- package/dist/map/lazy-tippy.js +1 -1
- package/dist/map/locale-panel.d.ts +1 -1
- package/dist/map/locale-panel.js +2 -2
- package/dist/map/map-control-panel.d.ts +6 -0
- package/dist/map/map-control-panel.js +65 -9
- package/dist/map/map-control-toolbar.js +3 -3
- package/dist/map/map-control-tooltip.js +2 -2
- package/dist/map/map-control.d.ts +15 -7
- package/dist/map/map-control.js +6 -7
- package/dist/map/map-draw-panel.d.ts +2 -2
- package/dist/map/map-draw-panel.js +2 -9
- package/dist/map/map-legend-panel.d.ts +12 -1
- package/dist/map/map-legend-panel.js +27 -14
- package/dist/map/map-legend.d.ts +1 -1
- package/dist/map/map-legend.js +2 -2
- package/dist/map/map-popover-content.d.ts +28 -0
- package/dist/map/map-popover-content.js +51 -0
- package/dist/map/map-popover.d.ts +11 -14
- package/dist/map/map-popover.js +94 -15
- package/dist/map/split-map-button.js +2 -2
- package/dist/map/toggle-3d-button.js +2 -2
- package/dist/map-container.d.ts +33 -9
- package/dist/map-container.js +530 -161
- package/dist/map-view-state-context.d.ts +12 -0
- package/dist/map-view-state-context.js +116 -0
- package/dist/maps-layout.d.ts +5 -2
- package/dist/maps-layout.js +7 -3
- package/dist/modal-container.d.ts +2 -6
- package/dist/modal-container.js +8 -6
- package/dist/modals/add-map-style-modal.d.ts +1 -3
- package/dist/modals/add-map-style-modal.js +12 -6
- package/dist/modals/cloud-tile.js +2 -2
- package/dist/modals/data-table-modal.d.ts +11 -2
- package/dist/modals/data-table-modal.js +75 -24
- package/dist/modals/delete-data-modal.js +2 -2
- package/dist/modals/error-display.js +2 -2
- package/dist/modals/export-data-modal.d.ts +1 -3
- package/dist/modals/export-data-modal.js +2 -2
- package/dist/modals/export-image-modal.d.ts +1 -3
- package/dist/modals/export-image-modal.js +2 -2
- package/dist/modals/export-map-modal/components.d.ts +2 -2
- package/dist/modals/export-map-modal/components.js +2 -2
- package/dist/modals/export-map-modal/export-html-map.js +2 -2
- package/dist/modals/export-map-modal/export-json-map.d.ts +1 -1
- package/dist/modals/export-map-modal/export-json-map.js +2 -2
- package/dist/modals/export-map-modal/export-map-modal.d.ts +2 -2
- package/dist/modals/export-map-modal/export-map-modal.js +2 -2
- package/dist/modals/image-modal-container.d.ts +1 -0
- package/dist/modals/image-modal-container.js +2 -2
- package/dist/modals/load-data-modal.js +2 -2
- package/dist/modals/load-storage-map.js +2 -2
- package/dist/modals/loading-dialog.js +2 -2
- package/dist/modals/modal-dialog.js +2 -2
- package/dist/modals/modal-tabs.d.ts +1 -1
- package/dist/modals/modal-tabs.js +2 -2
- package/dist/modals/overwrite-map-modal.js +2 -2
- package/dist/modals/provider-modal-container.d.ts +3 -2
- package/dist/modals/provider-modal-container.js +2 -2
- package/dist/modals/save-map-modal.js +2 -2
- package/dist/modals/share-map-modal.js +2 -2
- package/dist/modals/status-panel.js +2 -2
- package/dist/modals/storage-map-viewer.d.ts +1 -1
- package/dist/modals/storage-map-viewer.js +2 -2
- package/dist/notification-panel/notification-item.d.ts +7 -10
- package/dist/notification-panel/notification-item.js +45 -13
- package/dist/notification-panel.js +2 -2
- package/dist/plot-container.js +20 -8
- package/dist/side-panel/add-by-dataset-button.d.ts +12 -0
- package/dist/side-panel/add-by-dataset-button.js +173 -0
- package/dist/side-panel/cloud-storage-dropdown.d.ts +2 -2
- package/dist/side-panel/cloud-storage-dropdown.js +2 -2
- package/dist/side-panel/common/dataset-info.d.ts +10 -3
- package/dist/side-panel/common/dataset-info.js +2 -2
- package/dist/side-panel/common/dataset-tag.d.ts +15 -1
- package/dist/side-panel/common/dataset-tag.js +14 -11
- package/dist/side-panel/common/dataset-title.d.ts +16 -2
- package/dist/side-panel/common/dataset-title.js +71 -105
- package/dist/side-panel/common/source-data-catalog.d.ts +22 -3
- package/dist/side-panel/common/source-data-catalog.js +2 -2
- package/dist/side-panel/common/source-data-selector.js +2 -2
- package/dist/side-panel/common/types.d.ts +7 -27
- package/dist/side-panel/common/types.js +1 -1
- package/dist/side-panel/custom-panel.d.ts +6 -7
- package/dist/side-panel/custom-panel.js +2 -2
- package/dist/side-panel/filter-manager.d.ts +18 -6
- package/dist/side-panel/filter-manager.js +176 -65
- package/dist/side-panel/filter-panel/add-filter-button.d.ts +8 -0
- package/dist/side-panel/filter-panel/add-filter-button.js +50 -0
- package/dist/side-panel/filter-panel/filter-panel-header.d.ts +6 -3
- package/dist/side-panel/filter-panel/filter-panel-header.js +4 -4
- package/dist/side-panel/filter-panel/filter-panel.js +2 -2
- package/dist/side-panel/interaction-manager.d.ts +6 -3
- package/dist/side-panel/interaction-manager.js +21 -8
- package/dist/side-panel/interaction-panel/brush-config.d.ts +2 -2
- package/dist/side-panel/interaction-panel/brush-config.js +2 -2
- package/dist/side-panel/interaction-panel/interaction-panel.d.ts +5 -2
- package/dist/side-panel/interaction-panel/interaction-panel.js +12 -5
- package/dist/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.d.ts +3 -9
- package/dist/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.js +25 -42
- package/dist/side-panel/interaction-panel/tooltip-config.d.ts +2 -3
- package/dist/side-panel/interaction-panel/tooltip-config.js +9 -7
- package/dist/side-panel/layer-manager.d.ts +8 -10
- package/dist/side-panel/layer-manager.js +71 -37
- package/dist/side-panel/layer-panel/add-layer-button.d.ts +3 -5
- package/dist/side-panel/layer-panel/add-layer-button.js +13 -139
- package/dist/side-panel/layer-panel/color-palette.js +2 -2
- package/dist/side-panel/layer-panel/color-range-selector.d.ts +1 -1
- package/dist/side-panel/layer-panel/color-range-selector.js +2 -2
- package/dist/side-panel/layer-panel/color-selector.d.ts +15 -24
- package/dist/side-panel/layer-panel/color-selector.js +175 -127
- package/dist/side-panel/layer-panel/column-selector.js +2 -2
- package/dist/side-panel/layer-panel/custom-palette.d.ts +7 -2
- package/dist/side-panel/layer-panel/custom-palette.js +6 -5
- package/dist/side-panel/layer-panel/custom-picker.d.ts +9 -36
- package/dist/side-panel/layer-panel/custom-picker.js +2 -2
- package/dist/side-panel/layer-panel/dataset-layer-group.d.ts +1 -1
- package/dist/side-panel/layer-panel/dataset-layer-group.js +3 -2
- package/dist/side-panel/layer-panel/dataset-layer-section.d.ts +3 -2
- package/dist/side-panel/layer-panel/dataset-layer-section.js +5 -4
- package/dist/side-panel/layer-panel/dataset-section.d.ts +2 -3
- package/dist/side-panel/layer-panel/dataset-section.js +6 -7
- package/dist/side-panel/layer-panel/dimension-scale-selector.js +2 -2
- package/dist/side-panel/layer-panel/how-to-button.js +2 -2
- package/dist/side-panel/layer-panel/layer-color-selector.d.ts +42 -0
- package/dist/side-panel/layer-panel/layer-color-selector.js +134 -0
- package/dist/side-panel/layer-panel/layer-column-config.d.ts +15 -9
- package/dist/side-panel/layer-panel/layer-column-config.js +35 -13
- package/dist/side-panel/layer-panel/layer-config-group.d.ts +11 -2
- package/dist/side-panel/layer-panel/layer-config-group.js +19 -11
- package/dist/side-panel/layer-panel/layer-configurator.d.ts +10 -35
- package/dist/side-panel/layer-panel/layer-configurator.js +61 -110
- package/dist/side-panel/layer-panel/layer-error-message.d.ts +6 -0
- package/dist/side-panel/layer-panel/layer-error-message.js +58 -0
- package/dist/side-panel/layer-panel/layer-list.d.ts +4 -3
- package/dist/side-panel/layer-panel/layer-list.js +112 -89
- package/dist/side-panel/layer-panel/layer-panel-header.d.ts +22 -10
- package/dist/side-panel/layer-panel/layer-panel-header.js +106 -67
- package/dist/side-panel/layer-panel/layer-panel.d.ts +3 -1
- package/dist/side-panel/layer-panel/layer-panel.js +24 -11
- package/dist/side-panel/layer-panel/layer-type-dropdown-list.js +2 -2
- package/dist/side-panel/layer-panel/layer-type-list-item.d.ts +12 -3
- package/dist/side-panel/layer-panel/layer-type-list-item.js +12 -4
- package/dist/side-panel/layer-panel/layer-type-selector.d.ts +2 -1
- package/dist/side-panel/layer-panel/layer-type-selector.js +5 -3
- package/dist/side-panel/layer-panel/single-color-palette.d.ts +1 -1
- package/dist/side-panel/layer-panel/single-color-palette.js +2 -2
- package/dist/side-panel/layer-panel/text-label-panel.d.ts +4 -2
- package/dist/side-panel/layer-panel/text-label-panel.js +62 -15
- package/dist/side-panel/layer-panel/vis-config-by-field-selector.d.ts +1 -3
- package/dist/side-panel/layer-panel/vis-config-by-field-selector.js +2 -2
- package/dist/side-panel/layer-panel/vis-config-slider.js +2 -2
- package/dist/side-panel/layer-panel/vis-config-switch.js +2 -2
- package/dist/side-panel/map-manager.d.ts +13 -6
- package/dist/side-panel/map-manager.js +56 -45
- package/dist/side-panel/map-style-panel/map-layer-group-color-picker.d.ts +14 -0
- package/dist/side-panel/map-style-panel/map-layer-group-color-picker.js +116 -0
- package/dist/side-panel/map-style-panel/map-layer-group-item.d.ts +29 -0
- package/dist/side-panel/map-style-panel/map-layer-group-item.js +131 -0
- package/dist/side-panel/map-style-panel/map-layer-selector.d.ts +16 -12
- package/dist/side-panel/map-style-panel/map-layer-selector.js +34 -51
- package/dist/side-panel/map-style-panel/map-style-selector.d.ts +11 -4
- package/dist/side-panel/map-style-panel/map-style-selector.js +54 -20
- package/dist/side-panel/panel-dropdown.d.ts +3 -2
- package/dist/side-panel/panel-dropdown.js +2 -2
- package/dist/side-panel/panel-header-action.d.ts +4 -2
- package/dist/side-panel/panel-header-action.js +11 -4
- package/dist/side-panel/panel-header.d.ts +13 -8
- package/dist/side-panel/panel-header.js +2 -2
- package/dist/side-panel/panel-tab.d.ts +2 -2
- package/dist/side-panel/panel-tab.js +2 -2
- package/dist/side-panel/panel-title.d.ts +6 -3
- package/dist/side-panel/panel-title.js +31 -14
- package/dist/side-panel/panel-toggle.d.ts +1 -1
- package/dist/side-panel/panel-toggle.js +2 -2
- package/dist/side-panel/{layer-panel/panel-view-list-toggle.d.ts → panel-view-list-toggle.d.ts} +19 -8
- package/dist/side-panel/panel-view-list-toggle.js +143 -0
- package/dist/side-panel/side-bar.d.ts +15 -16
- package/dist/side-panel/side-bar.js +8 -6
- package/dist/side-panel.d.ts +2 -117
- package/dist/side-panel.js +14 -20
- package/dist/types.d.ts +16 -9
- package/dist/types.js +1 -1
- package/package.json +41 -34
- package/dist/editor/constants.d.ts +0 -17
- package/dist/editor/constants.js +0 -47
- package/dist/editor/feature-styles.d.ts +0 -37
- package/dist/editor/feature-styles.js +0 -92
- package/dist/editor/handle-style.d.ts +0 -42
- package/dist/editor/handle-style.js +0 -100
- package/dist/side-panel/layer-panel/panel-view-list-toggle.js +0 -143
package/dist/kepler-gl.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Copyright (c)
|
|
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
|
|
@@ -29,7 +29,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
29
29
|
});
|
|
30
30
|
exports.getVisibleDatasets = getVisibleDatasets;
|
|
31
31
|
exports.mapStateToProps = mapStateToProps;
|
|
32
|
-
exports
|
|
32
|
+
exports.makeGetActionCreators = makeGetActionCreators;
|
|
33
|
+
exports["default"] = exports.DEFAULT_KEPLER_GL_PROPS = exports.notificationPanelSelector = exports.geoCoderPanelSelector = exports.modalContainerSelector = exports.bottomWidgetSelector = exports.isSplitSelector = exports.plotContainerSelector = exports.sidePanelSelector = exports.mapFieldsSelector = exports.mapStateSelector = exports.isViewportDisjointed = void 0;
|
|
33
34
|
|
|
34
35
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
35
36
|
|
|
@@ -79,7 +80,7 @@ var _constants = require("@kepler.gl/constants");
|
|
|
79
80
|
|
|
80
81
|
var _sidePanel = _interopRequireDefault(require("./side-panel"));
|
|
81
82
|
|
|
82
|
-
var
|
|
83
|
+
var _mapContainer2 = _interopRequireDefault(require("./map-container"));
|
|
83
84
|
|
|
84
85
|
var _mapsLayout = _interopRequireDefault(require("./maps-layout"));
|
|
85
86
|
|
|
@@ -93,20 +94,22 @@ var _notificationPanel = _interopRequireDefault(require("./notification-panel"))
|
|
|
93
94
|
|
|
94
95
|
var _geocoderPanel = _interopRequireDefault(require("./geocoder-panel"));
|
|
95
96
|
|
|
97
|
+
var _dndContext = _interopRequireDefault(require("./dnd-context"));
|
|
98
|
+
|
|
96
99
|
var _utils = require("@kepler.gl/utils");
|
|
97
100
|
|
|
98
101
|
var _styles = require("@kepler.gl/styles");
|
|
99
102
|
|
|
100
103
|
var _templateObject;
|
|
101
104
|
|
|
102
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
|
103
|
-
|
|
104
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
105
|
-
|
|
106
105
|
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); }; }
|
|
107
106
|
|
|
108
107
|
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; } }
|
|
109
108
|
|
|
109
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
|
110
|
+
|
|
111
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
112
|
+
|
|
110
113
|
// Maybe we should think about exporting this or creating a variable
|
|
111
114
|
// as part of the base.js theme
|
|
112
115
|
var GlobalStyle = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n font-family: ", ";\n font-weight: ", ";\n font-size: ", ";\n line-height: ", ";\n\n *,\n *:before,\n *:after {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n }\n\n ul {\n margin: 0;\n padding: 0;\n }\n\n li {\n margin: 0;\n }\n\n a {\n text-decoration: none;\n color: ", ";\n }\n\n .mapboxgl-ctrl .mapboxgl-ctrl-logo {\n display: none;\n }\n"])), function (props) {
|
|
@@ -126,15 +129,38 @@ var BottomWidgetOuter = _styledComponents["default"].div(function (_ref) {
|
|
|
126
129
|
return "\n ".concat(absolute ? 'position: absolute; bottom: 0; right: 0;' : '', "\n pointer-events: none; /* prevent padding from blocking input */\n & > * {\n /* all children should allow input */\n pointer-events: all;\n }");
|
|
127
130
|
});
|
|
128
131
|
|
|
132
|
+
var isViewportDisjointed = function isViewportDisjointed(props) {
|
|
133
|
+
return props.mapState.isSplit && !props.mapState.isViewportSynced && props.mapState.splitMapViewports.length > 1;
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
exports.isViewportDisjointed = isViewportDisjointed;
|
|
137
|
+
|
|
138
|
+
var mapStateSelector = function mapStateSelector(props, index) {
|
|
139
|
+
if (!Number.isFinite(index)) {
|
|
140
|
+
// either no index arg or an invalid index was provided
|
|
141
|
+
// it is expected to be either 0 or 1 when in split mode
|
|
142
|
+
// only use the mapState
|
|
143
|
+
return props.mapState;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
return isViewportDisjointed(props) ? // mix together the viewport properties intended for this disjointed <MapContainer> with the other necessary mapState properties
|
|
147
|
+
_objectSpread(_objectSpread({}, props.mapState), props.mapState.splitMapViewports[index]) : // otherwise only use the mapState
|
|
148
|
+
props.mapState;
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
exports.mapStateSelector = mapStateSelector;
|
|
152
|
+
|
|
129
153
|
var mapFieldsSelector = function mapFieldsSelector(props) {
|
|
154
|
+
var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
130
155
|
return {
|
|
131
156
|
getMapboxRef: props.getMapboxRef,
|
|
132
157
|
mapboxApiAccessToken: props.mapboxApiAccessToken,
|
|
133
158
|
mapboxApiUrl: props.mapboxApiUrl ? props.mapboxApiUrl : DEFAULT_KEPLER_GL_PROPS.mapboxApiUrl,
|
|
134
|
-
mapState: props
|
|
159
|
+
mapState: mapStateSelector(props, index),
|
|
135
160
|
mapStyle: props.mapStyle,
|
|
136
161
|
onDeckInitialized: props.onDeckInitialized,
|
|
137
162
|
onViewStateChange: props.onViewStateChange,
|
|
163
|
+
onMouseMove: props.onMouseMove,
|
|
138
164
|
deckGlProps: props.deckGlProps,
|
|
139
165
|
uiStateActions: props.uiStateActions,
|
|
140
166
|
visStateActions: props.visStateActions,
|
|
@@ -181,6 +207,7 @@ var sidePanelSelector = function sidePanelSelector(props, availableProviders, fi
|
|
|
181
207
|
interactionConfig: props.visState.interactionConfig,
|
|
182
208
|
mapInfo: props.visState.mapInfo,
|
|
183
209
|
layerBlending: props.visState.layerBlending,
|
|
210
|
+
overlayBlending: props.visState.overlayBlending,
|
|
184
211
|
width: props.sidePanelWidth ? props.sidePanelWidth : DEFAULT_KEPLER_GL_PROPS.width,
|
|
185
212
|
availableProviders: availableProviders,
|
|
186
213
|
mapSaved: props.providerState.mapSaved
|
|
@@ -252,14 +279,17 @@ var modalContainerSelector = function modalContainerSelector(props, rootNode) {
|
|
|
252
279
|
|
|
253
280
|
exports.modalContainerSelector = modalContainerSelector;
|
|
254
281
|
|
|
255
|
-
var geoCoderPanelSelector = function geoCoderPanelSelector(props) {
|
|
282
|
+
var geoCoderPanelSelector = function geoCoderPanelSelector(props, dimensions) {
|
|
256
283
|
return {
|
|
257
284
|
isGeocoderEnabled: props.visState.interactionConfig.geocoder.enabled,
|
|
258
285
|
mapboxApiAccessToken: props.mapboxApiAccessToken,
|
|
259
286
|
mapState: props.mapState,
|
|
287
|
+
uiState: props.uiState,
|
|
288
|
+
layerOrder: props.visState.layerOrder,
|
|
260
289
|
updateVisData: props.visStateActions.updateVisData,
|
|
261
290
|
removeDataset: props.visStateActions.removeDataset,
|
|
262
|
-
updateMap: props.mapStateActions.updateMap
|
|
291
|
+
updateMap: props.mapStateActions.updateMap,
|
|
292
|
+
appWidth: dimensions.width
|
|
263
293
|
};
|
|
264
294
|
};
|
|
265
295
|
|
|
@@ -288,9 +318,9 @@ var DEFAULT_KEPLER_GL_PROPS = {
|
|
|
288
318
|
featureFlags: {}
|
|
289
319
|
};
|
|
290
320
|
exports.DEFAULT_KEPLER_GL_PROPS = DEFAULT_KEPLER_GL_PROPS;
|
|
291
|
-
KeplerGlFactory.deps = [_bottomWidget["default"], _geocoderPanel["default"],
|
|
321
|
+
KeplerGlFactory.deps = [_bottomWidget["default"], _geocoderPanel["default"], _mapContainer2["default"], _mapsLayout["default"], _modalContainer["default"], _sidePanel["default"], _plotContainer["default"], _notificationPanel["default"], _dndContext["default"]];
|
|
292
322
|
|
|
293
|
-
function KeplerGlFactory(BottomWidget, GeoCoderPanel, MapContainer, MapsLayout, ModalContainer, SidePanel, PlotContainer, NotificationPanel) {
|
|
323
|
+
function KeplerGlFactory(BottomWidget, GeoCoderPanel, MapContainer, MapsLayout, ModalContainer, SidePanel, PlotContainer, NotificationPanel, DndContext) {
|
|
294
324
|
/** @typedef {import('./kepler-gl').UnconnectedKeplerGlProps} KeplerGlProps */
|
|
295
325
|
|
|
296
326
|
/** @augments React.Component<KeplerGlProps> */
|
|
@@ -355,17 +385,14 @@ function KeplerGlFactory(BottomWidget, GeoCoderPanel, MapContainer, MapsLayout,
|
|
|
355
385
|
});
|
|
356
386
|
});
|
|
357
387
|
var allStyles = [].concat((0, _toConsumableArray2["default"])(customStyles), (0, _toConsumableArray2["default"])(defaultStyles)).reduce(function (accu, style) {
|
|
358
|
-
|
|
359
|
-
accu[hasStyleObject ? 'toLoad' : 'toRequest'][style.id] = style;
|
|
388
|
+
accu[style.id] = style;
|
|
360
389
|
return accu;
|
|
361
|
-
}, {
|
|
362
|
-
toLoad: {},
|
|
363
|
-
toRequest: {}
|
|
364
|
-
});
|
|
390
|
+
}, {});
|
|
365
391
|
|
|
366
|
-
_this.props.mapStyleActions.loadMapStyles(allStyles
|
|
367
|
-
|
|
368
|
-
|
|
392
|
+
_this.props.mapStyleActions.loadMapStyles(allStyles);
|
|
393
|
+
});
|
|
394
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_deleteMapLabels", function (containerId, layerId) {
|
|
395
|
+
_this.props.visStateActions.toggleLayerForMap(containerId, layerId);
|
|
369
396
|
});
|
|
370
397
|
return _this;
|
|
371
398
|
}
|
|
@@ -405,7 +432,10 @@ function KeplerGlFactory(BottomWidget, GeoCoderPanel, MapContainer, MapsLayout,
|
|
|
405
432
|
}
|
|
406
433
|
}, {
|
|
407
434
|
key: "render",
|
|
408
|
-
value:
|
|
435
|
+
value: // eslint-disable-next-line complexity
|
|
436
|
+
function render() {
|
|
437
|
+
var _this2 = this;
|
|
438
|
+
|
|
409
439
|
var _this$props = this.props,
|
|
410
440
|
_this$props$id = _this$props.id,
|
|
411
441
|
id = _this$props$id === void 0 ? 'map' : _this$props$id,
|
|
@@ -428,24 +458,29 @@ function KeplerGlFactory(BottomWidget, GeoCoderPanel, MapContainer, MapsLayout,
|
|
|
428
458
|
var localeMessages = this.localeMessagesSelector(this.props);
|
|
429
459
|
var isExportingImage = uiState.exportImage.exporting;
|
|
430
460
|
var availableProviders = this.availableProviders(this.props);
|
|
431
|
-
var mapFields = mapFieldsSelector(this.props);
|
|
432
461
|
var filteredDatasets = this.filteredDatasetsSelector(this.props);
|
|
433
462
|
var sideFields = sidePanelSelector(this.props, availableProviders, filteredDatasets);
|
|
434
463
|
var plotContainerFields = plotContainerSelector(this.props);
|
|
435
464
|
var bottomWidgetFields = bottomWidgetSelector(this.props, theme);
|
|
436
465
|
var modalContainerFields = modalContainerSelector(this.props, this.root.current);
|
|
437
|
-
var geoCoderPanelFields = geoCoderPanelSelector(this.props);
|
|
466
|
+
var geoCoderPanelFields = geoCoderPanelSelector(this.props, dimensions);
|
|
438
467
|
var notificationPanelFields = notificationPanelSelector(this.props);
|
|
439
468
|
var mapContainers = !isSplit ? [/*#__PURE__*/_react["default"].createElement(MapContainer, (0, _extends2["default"])({
|
|
440
469
|
primary: true,
|
|
441
470
|
key: 0,
|
|
442
471
|
index: 0
|
|
443
|
-
},
|
|
472
|
+
}, mapFieldsSelector(this.props), {
|
|
473
|
+
containerId: 0,
|
|
474
|
+
deleteMapLabels: this._deleteMapLabels
|
|
475
|
+
}))] : splitMaps.map(function (settings, index) {
|
|
444
476
|
return /*#__PURE__*/_react["default"].createElement(MapContainer, (0, _extends2["default"])({
|
|
445
477
|
key: index,
|
|
446
478
|
index: index,
|
|
447
479
|
primary: index === 1
|
|
448
|
-
},
|
|
480
|
+
}, mapFieldsSelector(_this2.props, index), {
|
|
481
|
+
containerId: index,
|
|
482
|
+
deleteMapLabels: _this2._deleteMapLabels
|
|
483
|
+
}));
|
|
449
484
|
});
|
|
450
485
|
return /*#__PURE__*/_react["default"].createElement(_context.RootContext.Provider, {
|
|
451
486
|
value: this.root
|
|
@@ -467,14 +502,26 @@ function KeplerGlFactory(BottomWidget, GeoCoderPanel, MapContainer, MapsLayout,
|
|
|
467
502
|
height: "".concat(height, "px")
|
|
468
503
|
},
|
|
469
504
|
ref: this.root
|
|
470
|
-
}, /*#__PURE__*/_react["default"].createElement(NotificationPanel, notificationPanelFields), !uiState.readOnly && !readOnly && /*#__PURE__*/_react["default"].createElement(SidePanel, sideFields), /*#__PURE__*/_react["default"].createElement(MapsLayout, {
|
|
471
|
-
className: "maps"
|
|
472
|
-
|
|
505
|
+
}, /*#__PURE__*/_react["default"].createElement(NotificationPanel, notificationPanelFields), /*#__PURE__*/_react["default"].createElement(DndContext, null, !uiState.readOnly && !readOnly && /*#__PURE__*/_react["default"].createElement(SidePanel, sideFields), /*#__PURE__*/_react["default"].createElement(MapsLayout, {
|
|
506
|
+
className: "maps",
|
|
507
|
+
mapState: this.props.mapState
|
|
508
|
+
}, mapContainers)), isExportingImage && /*#__PURE__*/_react["default"].createElement(PlotContainer, plotContainerFields), !isViewportDisjointed(this.props) && interactionConfig.geocoder.enabled && /*#__PURE__*/_react["default"].createElement(GeoCoderPanel, (0, _extends2["default"])({}, geoCoderPanelFields, {
|
|
509
|
+
index: 0,
|
|
510
|
+
unsyncedViewports: false
|
|
511
|
+
})), isViewportDisjointed(this.props) && interactionConfig.geocoder.enabled && mapContainers.map(function (_mapContainer, index) {
|
|
512
|
+
return /*#__PURE__*/_react["default"].createElement(GeoCoderPanel, (0, _extends2["default"])({
|
|
513
|
+
key: index
|
|
514
|
+
}, geoCoderPanelFields, {
|
|
515
|
+
index: index,
|
|
516
|
+
unsyncedViewports: true
|
|
517
|
+
}));
|
|
518
|
+
}), /*#__PURE__*/_react["default"].createElement(BottomWidgetOuter, {
|
|
473
519
|
absolute: !(0, _utils.hasPortableWidth)(_styles.breakPointValues)
|
|
474
520
|
}, /*#__PURE__*/_react["default"].createElement(BottomWidget, (0, _extends2["default"])({
|
|
475
521
|
rootRef: this.bottomWidgetRef
|
|
476
522
|
}, bottomWidgetFields, {
|
|
477
|
-
containerW: dimensions.width
|
|
523
|
+
containerW: dimensions.width,
|
|
524
|
+
theme: theme
|
|
478
525
|
}))), /*#__PURE__*/_react["default"].createElement(ModalContainer, (0, _extends2["default"])({}, modalContainerFields, {
|
|
479
526
|
containerW: dimensions.width,
|
|
480
527
|
containerH: dimensions.height
|
|
@@ -565,4 +612,4 @@ function mergeActions(actions, userActions) {
|
|
|
565
612
|
|
|
566
613
|
var _default = KeplerGlFactory;
|
|
567
614
|
exports["default"] = _default;
|
|
568
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9rZXBsZXItZ2wudHN4Il0sIm5hbWVzIjpbIkdsb2JhbFN0eWxlIiwic3R5bGVkIiwiZGl2IiwicHJvcHMiLCJ0aGVtZSIsImZvbnRGYW1pbHkiLCJmb250V2VpZ2h0IiwiZm9udFNpemUiLCJsaW5lSGVpZ2h0IiwibGFiZWxDb2xvciIsIkJvdHRvbVdpZGdldE91dGVyIiwiYWJzb2x1dGUiLCJtYXBGaWVsZHNTZWxlY3RvciIsImdldE1hcGJveFJlZiIsIm1hcGJveEFwaUFjY2Vzc1Rva2VuIiwibWFwYm94QXBpVXJsIiwiREVGQVVMVF9LRVBMRVJfR0xfUFJPUFMiLCJtYXBTdGF0ZSIsIm1hcFN0eWxlIiwib25EZWNrSW5pdGlhbGl6ZWQiLCJvblZpZXdTdGF0ZUNoYW5nZSIsImRlY2tHbFByb3BzIiwidWlTdGF0ZUFjdGlvbnMiLCJ2aXNTdGF0ZUFjdGlvbnMiLCJtYXBTdGF0ZUFjdGlvbnMiLCJ2aXNTdGF0ZSIsImFjdGl2ZVNpZGVQYW5lbCIsInVpU3RhdGUiLCJtYXBDb250cm9scyIsInJlYWRPbmx5IiwibG9jYWxlIiwidG9wTWFwQ29udGFpbmVyUHJvcHMiLCJib3R0b21NYXBDb250YWluZXJQcm9wcyIsImdldFZpc2libGVEYXRhc2V0cyIsImRhdGFzZXRzIiwia2V5IiwidmFsdWUiLCJHRU9DT0RFUl9EQVRBU0VUX05BTUUiLCJzaWRlUGFuZWxTZWxlY3RvciIsImF2YWlsYWJsZVByb3ZpZGVycyIsImZpbHRlcmVkRGF0YXNldHMiLCJhcHBOYW1lIiwidmVyc2lvbiIsImFwcFdlYnNpdGUiLCJvblNhdmVNYXAiLCJtYXBTdHlsZUFjdGlvbnMiLCJmaWx0ZXJzIiwibGF5ZXJzIiwibGF5ZXJPcmRlciIsImxheWVyQ2xhc3NlcyIsImludGVyYWN0aW9uQ29uZmlnIiwibWFwSW5mbyIsImxheWVyQmxlbmRpbmciLCJ3aWR0aCIsInNpZGVQYW5lbFdpZHRoIiwibWFwU2F2ZWQiLCJwcm92aWRlclN0YXRlIiwicGxvdENvbnRhaW5lclNlbGVjdG9yIiwiaGVpZ2h0IiwiZXhwb3J0SW1hZ2VTZXR0aW5nIiwiZXhwb3J0SW1hZ2UiLCJtYXBGaWVsZHMiLCJhZGROb3RpZmljYXRpb24iLCJzZXRFeHBvcnRJbWFnZVNldHRpbmciLCJzZXRFeHBvcnRJbWFnZURhdGFVcmkiLCJzZXRFeHBvcnRJbWFnZUVycm9yIiwic3BsaXRNYXBzIiwiaXNTcGxpdFNlbGVjdG9yIiwibGVuZ3RoIiwiYm90dG9tV2lkZ2V0U2VsZWN0b3IiLCJhbmltYXRpb25Db25maWciLCJ0b2dnbGVNb2RhbCIsInNpZGVQYW5lbCIsIm1hcmdpbiIsImxlZnQiLCJtb2RhbENvbnRhaW5lclNlbGVjdG9yIiwicm9vdE5vZGUiLCJwcm92aWRlckFjdGlvbnMiLCJjbG91ZFByb3ZpZGVycyIsIm9uRXhwb3J0VG9DbG91ZFN1Y2Nlc3MiLCJvbkxvYWRDbG91ZE1hcFN1Y2Nlc3MiLCJvbkxvYWRDbG91ZE1hcEVycm9yIiwib25FeHBvcnRUb0Nsb3VkRXJyb3IiLCJnZW9Db2RlclBhbmVsU2VsZWN0b3IiLCJpc0dlb2NvZGVyRW5hYmxlZCIsImdlb2NvZGVyIiwiZW5hYmxlZCIsInVwZGF0ZVZpc0RhdGEiLCJyZW1vdmVEYXRhc2V0IiwidXBkYXRlTWFwIiwibm90aWZpY2F0aW9uUGFuZWxTZWxlY3RvciIsInJlbW92ZU5vdGlmaWNhdGlvbiIsIm5vdGlmaWNhdGlvbnMiLCJtYXBTdHlsZXMiLCJtYXBTdHlsZXNSZXBsYWNlRGVmYXVsdCIsIkRFRkFVTFRfTUFQQk9YX0FQSV9VUkwiLCJLRVBMRVJfR0xfTkFNRSIsIktFUExFUl9HTF9WRVJTSU9OIiwiRElNRU5TSU9OUyIsImZlYXR1cmVGbGFncyIsIktlcGxlckdsRmFjdG9yeSIsImRlcHMiLCJCb3R0b21XaWRnZXRGYWN0b3J5IiwiR2VvQ29kZXJQYW5lbEZhY3RvcnkiLCJNYXBDb250YWluZXJGYWN0b3J5IiwiTWFwc0xheW91dEZhY3RvcnkiLCJNb2RhbENvbnRhaW5lckZhY3RvcnkiLCJTaWRlUGFuZWxGYWN0b3J5IiwiUGxvdENvbnRhaW5lckZhY3RvcnkiLCJOb3RpZmljYXRpb25QYW5lbEZhY3RvcnkiLCJCb3R0b21XaWRnZXQiLCJHZW9Db2RlclBhbmVsIiwiTWFwQ29udGFpbmVyIiwiTWFwc0xheW91dCIsIk1vZGFsQ29udGFpbmVyIiwiU2lkZVBhbmVsIiwiUGxvdENvbnRhaW5lciIsIk5vdGlmaWNhdGlvblBhbmVsIiwiS2VwbGVyR0wiLCJkaW1lbnNpb25zIiwic2V0U3RhdGUiLCJ0aGVtZVNlbGVjdG9yIiwiYmFzaWNUaGVtZSIsIlRIRU1FIiwibGlnaHQiLCJ0aGVtZUxUIiwiYmFzZSIsInRoZW1lQlMiLCJkYXRhc2V0c1NlbGVjdG9yIiwicHJvdmlkZXJzIiwiQXJyYXkiLCJpc0FycmF5IiwiaGFzU3RvcmFnZSIsInNvbWUiLCJwIiwiaGFzUHJpdmF0ZVN0b3JhZ2UiLCJoYXNTaGFyZSIsImhhc1NoYXJpbmdVcmwiLCJsb2NhbGVNZXNzYWdlcyIsImN1c3RvbU1lc3NhZ2VzIiwibWVzc2FnZXMiLCJkZWZhdWx0U3R5bGVzIiwiT2JqZWN0IiwidmFsdWVzIiwiY3VzdG9tU3R5bGVzIiwibWFwIiwibXMiLCJpZCIsImFsbFN0eWxlcyIsInJlZHVjZSIsImFjY3UiLCJzdHlsZSIsImhhc1N0eWxlT2JqZWN0IiwidG9Mb2FkIiwidG9SZXF1ZXN0IiwibG9hZE1hcFN0eWxlcyIsInJlcXVlc3RNYXBTdHlsZXMiLCJfdmFsaWRhdGVNYXBib3hUb2tlbiIsIl9sb2FkTWFwU3R5bGUiLCJvbktlcGxlckdsSW5pdGlhbGl6ZWQiLCJyb290IiwiY3VycmVudCIsIkhUTUxFbGVtZW50IiwiX2hhbmRsZVJlc2l6ZSIsIkNvbnNvbGUiLCJ3YXJuIiwiTUlTU0lOR19NQVBCT1hfVE9LRU4iLCJzdGF0ZSIsImlzU3BsaXQiLCJhdmFpbGFibGVUaGVtZVNlbGVjdG9yIiwibG9jYWxlTWVzc2FnZXNTZWxlY3RvciIsImlzRXhwb3J0aW5nSW1hZ2UiLCJleHBvcnRpbmciLCJmaWx0ZXJlZERhdGFzZXRzU2VsZWN0b3IiLCJzaWRlRmllbGRzIiwicGxvdENvbnRhaW5lckZpZWxkcyIsImJvdHRvbVdpZGdldEZpZWxkcyIsIm1vZGFsQ29udGFpbmVyRmllbGRzIiwiZ2VvQ29kZXJQYW5lbEZpZWxkcyIsIm5vdGlmaWNhdGlvblBhbmVsRmllbGRzIiwibWFwQ29udGFpbmVycyIsInNldHRpbmdzIiwiaW5kZXgiLCJkaXNwbGF5IiwiZmxleERpcmVjdGlvbiIsInBvc2l0aW9uIiwiYnJlYWtQb2ludFZhbHVlcyIsImJvdHRvbVdpZGdldFJlZiIsIkNvbXBvbmVudCIsIlJvb3RDb250ZXh0IiwibWFwU3RhdGVUb1Byb3BzIiwibWFrZU1hcERpc3BhdGNoVG9Qcm9wcyIsImRlZmF1bHRVc2VyQWN0aW9ucyIsImdldERpc3BhdGNoIiwiZGlzcGF0Y2giLCJnZXRVc2VyQWN0aW9ucyIsImFjdGlvbnMiLCJtYWtlR2V0QWN0aW9uQ3JlYXRvcnMiLCJ1c2VyQWN0aW9ucyIsIlZpc1N0YXRlQWN0aW9ucyIsIk1hcFN0YXRlQWN0aW9ucyIsIk1hcFN0eWxlQWN0aW9ucyIsIlVJU3RhdGVBY3Rpb25zIiwiUHJvdmlkZXJBY3Rpb25zIiwibWVyZ2VBY3Rpb25zIiwiZ2V0QWN0aW9uQ3JlYXRvcnMiLCJtYXBEaXNwYXRjaFRvUHJvcHMiLCJvd25Qcm9wcyIsImdyb3VwZWRBY3Rpb25DcmVhdG9ycyIsIm92ZXJyaWRlcyIsImhhc093blByb3BlcnR5Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBOztBQWdCQTs7QUFVQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFVQTs7Ozs7Ozs7Ozs7O0FBSUE7QUFDQTtBQUNBLElBQU1BLFdBQVcsR0FBR0MsNkJBQU9DLEdBQVYsd2dCQUNBLFVBQUFDLEtBQUs7QUFBQSxTQUFJQSxLQUFLLENBQUNDLEtBQU4sQ0FBWUMs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O0FBRkY7QUFJRCxHQVBEOztBQVNBLFNBQU9ZLGtCQUFQO0FBQ0Q7QUFFRDtBQUNBO0FBQ0E7OztBQUNBLFNBQVNGLFlBQVQsQ0FBc0JSLE9BQXRCLEVBQStCRSxXQUEvQixFQUE0QztBQUMxQyxNQUFNVyxTQUFTLEdBQUcsRUFBbEI7O0FBQ0EsT0FBSyxJQUFNOUssS0FBWCxJQUFrQm1LLFdBQWxCLEVBQStCO0FBQzdCLFFBQUlBLFdBQVcsQ0FBQ1ksY0FBWixDQUEyQi9LLEtBQTNCLEtBQW1DaUssT0FBTyxDQUFDYyxjQUFSLENBQXVCL0ssS0FBdkIsQ0FBdkMsRUFBb0U7QUFDbEU4SyxNQUFBQSxTQUFTLENBQUM5SyxLQUFELENBQVQsR0FBaUJtSyxXQUFXLENBQUNuSyxLQUFELENBQTVCO0FBQ0Q7QUFDRjs7QUFFRCx5Q0FBV2lLLE9BQVgsR0FBdUJhLFNBQXZCO0FBQ0Q7O2VBRWM3RyxlIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIyIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50LCBjcmVhdGVSZWYsIERpc3BhdGNofSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ29uc29sZSBmcm9tICdnbG9iYWwvY29uc29sZSc7XG5pbXBvcnQge2JpbmRBY3Rpb25DcmVhdG9yc30gZnJvbSAncmVkdXgnO1xuaW1wb3J0IHN0eWxlZCwge1RoZW1lUHJvdmlkZXIsIHdpdGhUaGVtZX0gZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtjcmVhdGVTZWxlY3Rvcn0gZnJvbSAncmVzZWxlY3QnO1xuaW1wb3J0IHtjb25uZWN0IGFzIGtlcGxlckdsQ29ubmVjdH0gZnJvbSAnLi9jb25uZWN0L2tlcGxlcmdsLWNvbm5lY3QnO1xuaW1wb3J0IHtJbnRsUHJvdmlkZXJ9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHttZXNzYWdlc30gZnJvbSAnQGtlcGxlci5nbC9sb2NhbGl6YXRpb24nO1xuaW1wb3J0IHtSb290Q29udGV4dCwgRmVhdHVyZUZsYWdzQ29udGV4dFByb3ZpZGVyLCBGZWF0dXJlRmxhZ3N9IGZyb20gJy4vY29udGV4dCc7XG5pbXBvcnQge09uRXJyb3JDYWxsQmFjaywgT25TdWNjZXNzQ2FsbEJhY2t9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuXG5pbXBvcnQge1xuICBNYXBTdGF0ZUFjdGlvbnMsXG4gIE1hcFN0eWxlQWN0aW9ucyxcbiAgUHJvdmlkZXJBY3Rpb25zLFxuICBVSVN0YXRlQWN0aW9ucyxcbiAgVmlzU3RhdGVBY3Rpb25zXG59IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5cbnR5cGUgS2VwbGVyR2xBY3Rpb25zID0ge1xuICB2aXNTdGF0ZUFjdGlvbnM6IHR5cGVvZiBWaXNTdGF0ZUFjdGlvbnM7XG4gIG1hcFN0YXRlQWN0aW9uczogdHlwZW9mIE1hcFN0YXRlQWN0aW9ucztcbiAgbWFwU3R5bGVBY3Rpb25zOiB0eXBlb2YgTWFwU3R5bGVBY3Rpb25zO1xuICB1aVN0YXRlQWN0aW9uczogdHlwZW9mIFVJU3RhdGVBY3Rpb25zO1xuICBwcm92aWRlckFjdGlvbnM6IHR5cGVvZiBQcm92aWRlckFjdGlvbnM7XG59O1xuXG5pbXBvcnQge1xuICBESU1FTlNJT05TLFxuICBLRVBMRVJfR0xfTkFNRSxcbiAgS0VQTEVSX0dMX1ZFUlNJT04sXG4gIFRIRU1FLFxuICBERUZBVUxUX01BUEJPWF9BUElfVVJMLFxuICBHRU9DT0RFUl9EQVRBU0VUX05BTUUsXG4gIE1JU1NJTkdfTUFQQk9YX1RPS0VOXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcblxuaW1wb3J0IFNpZGVQYW5lbEZhY3RvcnkgZnJvbSAnLi9zaWRlLXBhbmVsJztcbmltcG9ydCBNYXBDb250YWluZXJGYWN0b3J5IGZyb20gJy4vbWFwLWNvbnRhaW5lcic7XG5pbXBvcnQgTWFwc0xheW91dEZhY3RvcnkgZnJvbSAnLi9tYXBzLWxheW91dCc7XG5pbXBvcnQgQm90dG9tV2lkZ2V0RmFjdG9yeSBmcm9tICcuL2JvdHRvbS13aWRnZXQnO1xuaW1wb3J0IE1vZGFsQ29udGFpbmVyRmFjdG9yeSBmcm9tICcuL21vZGFsLWNvbnRhaW5lcic7XG5pbXBvcnQgUGxvdENvbnRhaW5lckZhY3RvcnkgZnJvbSAnLi9wbG90LWNvbnRhaW5lcic7XG5pbXBvcnQgTm90aWZpY2F0aW9uUGFuZWxGYWN0b3J5IGZyb20gJy4vbm90aWZpY2F0aW9uLXBhbmVsJztcbmltcG9ydCBHZW9Db2RlclBhbmVsRmFjdG9yeSBmcm9tICcuL2dlb2NvZGVyLXBhbmVsJztcblxuaW1wb3J0IHtcbiAgZmlsdGVyT2JqZWN0QnlQcmVkaWNhdGUsXG4gIGdlbmVyYXRlSGFzaElkLFxuICB2YWxpZGF0ZVRva2VuLFxuICBtZXJnZU1lc3NhZ2VzLFxuICBvYnNlcnZlRGltZW5zaW9ucyxcbiAgdW5vYnNlcnZlRGltZW5zaW9ucyxcbiAgaGFzUG9ydGFibGVXaWR0aFxufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcblxuaW1wb3J0IHt0aGVtZSBhcyBiYXNpY1RoZW1lLCB0aGVtZUxULCB0aGVtZUJTLCBicmVha1BvaW50VmFsdWVzfSBmcm9tICdAa2VwbGVyLmdsL3N0eWxlcyc7XG5pbXBvcnQge0tlcGxlckdsU3RhdGV9IGZyb20gJ0BrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuaW1wb3J0IHtQcm92aWRlcn0gZnJvbSAnQGtlcGxlci5nbC9jbG91ZC1wcm92aWRlcnMnO1xuXG4vLyBNYXliZSB3ZSBzaG91bGQgdGhpbmsgYWJvdXQgZXhwb3J0aW5nIHRoaXMgb3IgY3JlYXRpbmcgYSB2YXJpYWJsZVxuLy8gYXMgcGFydCBvZiB0aGUgYmFzZS5qcyB0aGVtZVxuY29uc3QgR2xvYmFsU3R5bGUgPSBzdHlsZWQuZGl2YFxuICBmb250LWZhbWlseTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5mb250RmFtaWx5fTtcbiAgZm9udC13ZWlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuZm9udFdlaWdodH07XG4gIGZvbnQtc2l6ZTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5mb250U2l6ZX07XG4gIGxpbmUtaGVpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmxpbmVIZWlnaHR9O1xuXG4gICosXG4gICo6YmVmb3JlLFxuICAqOmFmdGVyIHtcbiAgICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIH1cblxuICB1bCB7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cblxuICBsaSB7XG4gICAgbWFyZ2luOiAwO1xuICB9XG5cbiAgYSB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmxhYmVsQ29sb3J9O1xuICB9XG5cbiAgLm1hcGJveGdsLWN0cmwgLm1hcGJveGdsLWN0cmwtbG9nbyB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuYDtcblxuaW50ZXJmYWNlIEJvdHRvbVdpZGdldE91dGVyUHJvcHMge1xuICBhYnNvbHV0ZT86IGJvb2xlYW47XG59XG5cbmNvbnN0IEJvdHRvbVdpZGdldE91dGVyID0gc3R5bGVkLmRpdjxCb3R0b21XaWRnZXRPdXRlclByb3BzPihcbiAgKHthYnNvbHV0ZX0pID0+IGBcbiAgJHthYnNvbHV0ZSA/ICdwb3NpdGlvbjogYWJzb2x1dGU7IGJvdHRvbTogMDsgcmlnaHQ6IDA7JyA6ICcnfVxuICBwb2ludGVyLWV2ZW50czogbm9uZTsgLyogcHJldmVudCBwYWRkaW5nIGZyb20gYmxvY2tpbmcgaW5wdXQgKi9cbiAgJiA+ICoge1xuICAgIC8qIGFsbCBjaGlsZHJlbiBzaG91bGQgYWxsb3cgaW5wdXQgKi9cbiAgICBwb2ludGVyLWV2ZW50czogYWxsO1xuICB9YFxuKTtcblxuZXhwb3J0IGNvbnN0IG1hcEZpZWxkc1NlbGVjdG9yID0gKHByb3BzOiBLZXBsZXJHTFByb3BzKSA9PiAoe1xuICBnZXRNYXBib3hSZWY6IHByb3BzLmdldE1hcGJveFJlZixcbiAgbWFwYm94QXBpQWNjZXNzVG9rZW46IHByb3BzLm1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICBtYXBib3hBcGlVcmw6IHByb3BzLm1hcGJveEFwaVVybCA/IHByb3BzLm1hcGJveEFwaVVybCA6IERFRkFVTFRfS0VQTEVSX0dMX1BST1BTLm1hcGJveEFwaVVybCxcbiAgbWFwU3RhdGU6IHByb3BzLm1hcFN0YXRlLFxuICBtYXBTdHlsZTogcHJvcHMubWFwU3R5bGUsXG4gIG9uRGVja0luaXRpYWxpemVkOiBwcm9wcy5vbkRlY2tJbml0aWFsaXplZCxcbiAgb25WaWV3U3RhdGVDaGFuZ2U6IHByb3BzLm9uVmlld1N0YXRlQ2hhbmdlLFxuICBkZWNrR2xQcm9wczogcHJvcHMuZGVja0dsUHJvcHMsXG4gIHVpU3RhdGVBY3Rpb25zOiBwcm9wcy51aVN0YXRlQWN0aW9ucyxcbiAgdmlzU3RhdGVBY3Rpb25zOiBwcm9wcy52aXNTdGF0ZUFjdGlvbnMsXG4gIG1hcFN0YXRlQWN0aW9uczogcHJvcHMubWFwU3RhdGVBY3Rpb25zLFxuXG4gIC8vIHZpc1N0YXRlXG4gIHZpc1N0YXRlOiBwcm9wcy52aXNTdGF0ZSxcblxuICAvLyB1aVN0YXRlXG4gIGFjdGl2ZVNpZGVQYW5lbDogcHJvcHMudWlTdGF0ZS5hY3RpdmVTaWRlUGFuZWwsXG4gIG1hcENvbnRyb2xzOiBwcm9wcy51aVN0YXRlLm1hcENvbnRyb2xzLFxuICByZWFkT25seTogcHJvcHMudWlTdGF0ZS5yZWFkT25seSxcbiAgbG9jYWxlOiBwcm9wcy51aVN0YXRlLmxvY2FsZSxcblxuICAvLyBtYXBTdHlsZVxuICB0b3BNYXBDb250YWluZXJQcm9wczogcHJvcHMudG9wTWFwQ29udGFpbmVyUHJvcHMsXG4gIGJvdHRvbU1hcENvbnRhaW5lclByb3BzOiBwcm9wcy5ib3R0b21NYXBDb250YWluZXJQcm9wc1xufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaXNpYmxlRGF0YXNldHMoZGF0YXNldHMpIHtcbiAgLy8gV2UgZG9uJ3Qgd2FudCBHZW9jb2RlciBkYXRhc2V0IHRvIGJlIHByZXNlbnQgaW4gU2lkZVBhbmVsIGRhdGFzZXQgbGlzdFxuICByZXR1cm4gZmlsdGVyT2JqZWN0QnlQcmVkaWNhdGUoZGF0YXNldHMsIChrZXksIHZhbHVlKSA9PiBrZXkgIT09IEdFT0NPREVSX0RBVEFTRVRfTkFNRSk7XG59XG5cbmV4cG9ydCBjb25zdCBzaWRlUGFuZWxTZWxlY3RvciA9IChwcm9wczogS2VwbGVyR0xQcm9wcywgYXZhaWxhYmxlUHJvdmlkZXJzLCBmaWx0ZXJlZERhdGFzZXRzKSA9PiAoe1xuICBhcHBOYW1lOiBwcm9wcy5hcHBOYW1lID8gcHJvcHMuYXBwTmFtZSA6IERFRkFVTFRfS0VQTEVSX0dMX1BST1BTLmFwcE5hbWUsXG4gIHZlcnNpb246IHByb3BzLnZlcnNpb24gPyBwcm9wcy52ZXJzaW9uIDogREVGQVVMVF9LRVBMRVJfR0xfUFJPUFMudmVyc2lvbixcbiAgYXBwV2Vic2l0ZTogcHJvcHMuYXBwV2Vic2l0ZSxcbiAgbWFwU3R5bGU6IHByb3BzLm1hcFN0eWxlLFxuICBvblNhdmVNYXA6IHByb3BzLm9uU2F2ZU1hcCxcbiAgdWlTdGF0ZTogcHJvcHMudWlTdGF0ZSxcbiAgbWFwU3R5bGVBY3Rpb25zOiBwcm9wcy5tYXBTdHlsZUFjdGlvbnMsXG4gIHZpc1N0YXRlQWN0aW9uczogcHJvcHMudmlzU3RhdGVBY3Rpb25zLFxuICB1aVN0YXRlQWN0aW9uczogcHJvcHMudWlTdGF0ZUFjdGlvbnMsXG4gIG1hcFN0YXRlQWN0aW9uczogcHJvcHMubWFwU3RhdGVBY3Rpb25zLFxuXG4gIGRhdGFzZXRzOiBmaWx0ZXJlZERhdGFzZXRzLFxuICBmaWx0ZXJzOiBwcm9wcy52aXNTdGF0ZS5maWx0ZXJzLFxuICBsYXllcnM6IHByb3BzLnZpc1N0YXRlLmxheWVycyxcbiAgbGF5ZXJPcmRlcjogcHJvcHMudmlzU3RhdGUubGF5ZXJPcmRlcixcbiAgbGF5ZXJDbGFzc2VzOiBwcm9wcy52aXNTdGF0ZS5sYXllckNsYXNzZXMsXG4gIGludGVyYWN0aW9uQ29uZmlnOiBwcm9wcy52aXNTdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgbWFwSW5mbzogcHJvcHMudmlzU3RhdGUubWFwSW5mbyxcbiAgbGF5ZXJCbGVuZGluZzogcHJvcHMudmlzU3RhdGUubGF5ZXJCbGVuZGluZyxcblxuICB3aWR0aDogcHJvcHMuc2lkZVBhbmVsV2lkdGggPyBwcm9wcy5zaWRlUGFuZWxXaWR0aCA6IERFRkFVTFRfS0VQTEVSX0dMX1BST1BTLndpZHRoLFxuICBhdmFpbGFibGVQcm92aWRlcnMsXG4gIG1hcFNhdmVkOiBwcm9wcy5wcm92aWRlclN0YXRlLm1hcFNhdmVkXG59KTtcblxuZXhwb3J0IGNvbnN0IHBsb3RDb250YWluZXJTZWxlY3RvciA9IChwcm9wczogS2VwbGVyR0xQcm9wcykgPT4gKHtcbiAgd2lkdGg6IHByb3BzLndpZHRoLFxuICBoZWlnaHQ6IHByb3BzLmhlaWdodCxcbiAgZXhwb3J0SW1hZ2VTZXR0aW5nOiBwcm9wcy51aVN0YXRlLmV4cG9ydEltYWdlLFxuICBtYXBGaWVsZHM6IG1hcEZpZWxkc1NlbGVjdG9yKHByb3BzKSxcbiAgYWRkTm90aWZpY2F0aW9uOiBwcm9wcy51aVN0YXRlQWN0aW9ucy5hZGROb3RpZmljYXRpb24sXG4gIHNldEV4cG9ydEltYWdlU2V0dGluZzogcHJvcHMudWlTdGF0ZUFjdGlvbnMuc2V0RXhwb3J0SW1hZ2VTZXR0aW5nLFxuICBzZXRFeHBvcnRJbWFnZURhdGFVcmk6IHByb3BzLnVpU3RhdGVBY3Rpb25zLnNldEV4cG9ydEltYWdlRGF0YVVyaSxcbiAgc2V0RXhwb3J0SW1hZ2VFcnJvcjogcHJvcHMudWlTdGF0ZUFjdGlvbnMuc2V0RXhwb3J0SW1hZ2VFcnJvcixcbiAgc3BsaXRNYXBzOiBwcm9wcy52aXNTdGF0ZS5zcGxpdE1hcHNcbn0pO1xuXG5leHBvcnQgY29uc3QgaXNTcGxpdFNlbGVjdG9yID0gKHByb3BzOiBLZXBsZXJHTFByb3BzKSA9PlxuICBwcm9wcy52aXNTdGF0ZS5zcGxpdE1hcHMgJiYgcHJvcHMudmlzU3RhdGUuc3BsaXRNYXBzLmxlbmd0aCA+IDE7XG5cbmV4cG9ydCBjb25zdCBib3R0b21XaWRnZXRTZWxlY3RvciA9IChwcm9wczogS2VwbGVyR0xQcm9wcywgdGhlbWUpID0+ICh7XG4gIGZpbHRlcnM6IHByb3BzLnZpc1N0YXRlLmZpbHRlcnMsXG4gIGRhdGFzZXRzOiBwcm9wcy52aXNTdGF0ZS5kYXRhc2V0cyxcbiAgdWlTdGF0ZTogcHJvcHMudWlTdGF0ZSxcbiAgbGF5ZXJzOiBwcm9wcy52aXNTdGF0ZS5sYXllcnMsXG4gIGFuaW1hdGlvbkNvbmZpZzogcHJvcHMudmlzU3RhdGUuYW5pbWF0aW9uQ29uZmlnLFxuICB2aXNTdGF0ZUFjdGlvbnM6IHByb3BzLnZpc1N0YXRlQWN0aW9ucyxcbiAgdG9nZ2xlTW9kYWw6IHByb3BzLnVpU3RhdGVBY3Rpb25zLnRvZ2dsZU1vZGFsLFxuICBzaWRlUGFuZWxXaWR0aDogcHJvcHMudWlTdGF0ZS5yZWFkT25seSA/IDAgOiBwcm9wcy5zaWRlUGFuZWxXaWR0aCArIHRoZW1lLnNpZGVQYW5lbC5tYXJnaW4ubGVmdFxufSk7XG5cbmV4cG9ydCBjb25zdCBtb2RhbENvbnRhaW5lclNlbGVjdG9yID0gKHByb3BzOiBLZXBsZXJHTFByb3BzLCByb290Tm9kZSkgPT4gKHtcbiAgYXBwTmFtZTogcHJvcHMuYXBwTmFtZSA/IHByb3BzLmFwcE5hbWUgOiBERUZBVUxUX0tFUExFUl9HTF9QUk9QUy5hcHBOYW1lLFxuICBtYXBTdHlsZTogcHJvcHMubWFwU3R5bGUsXG4gIHZpc1N0YXRlOiBwcm9wcy52aXNTdGF0ZSxcbiAgbWFwU3RhdGU6IHByb3BzLm1hcFN0YXRlLFxuICB1aVN0YXRlOiBwcm9wcy51aVN0YXRlLFxuICBwcm92aWRlclN0YXRlOiBwcm9wcy5wcm92aWRlclN0YXRlLFxuXG4gIG1hcGJveEFwaUFjY2Vzc1Rva2VuOiBwcm9wcy5tYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgbWFwYm94QXBpVXJsOiBwcm9wcy5tYXBib3hBcGlVcmwsXG4gIHZpc1N0YXRlQWN0aW9uczogcHJvcHMudmlzU3RhdGVBY3Rpb25zLFxuICB1aVN0YXRlQWN0aW9uczogcHJvcHMudWlTdGF0ZUFjdGlvbnMsXG4gIG1hcFN0eWxlQWN0aW9uczogcHJvcHMubWFwU3R5bGVBY3Rpb25zLFxuICBwcm92aWRlckFjdGlvbnM6IHByb3BzLnByb3ZpZGVyQWN0aW9ucyxcblxuICByb290Tm9kZSxcbiAgLy8gVXNlciBkZWZpbmVkIGNsb3VkIHByb3ZpZGVyIHByb3BzXG4gIGNsb3VkUHJvdmlkZXJzOiBwcm9wcy5jbG91ZFByb3ZpZGVyc1xuICAgID8gcHJvcHMuY2xvdWRQcm92aWRlcnNcbiAgICA6IERFRkFVTFRfS0VQTEVSX0dMX1BST1BTLmNsb3VkUHJvdmlkZXJzLFxuICBvbkV4cG9ydFRvQ2xvdWRTdWNjZXNzOiBwcm9wcy5vbkV4cG9ydFRvQ2xvdWRTdWNjZXNzLFxuICBvbkxvYWRDbG91ZE1hcFN1Y2Nlc3M6IHByb3BzLm9uTG9hZENsb3VkTWFwU3VjY2VzcyxcbiAgb25Mb2FkQ2xvdWRNYXBFcnJvcjogcHJvcHMub25Mb2FkQ2xvdWRNYXBFcnJvcixcbiAgb25FeHBvcnRUb0Nsb3VkRXJyb3I6IHByb3BzLm9uRXhwb3J0VG9DbG91ZEVycm9yXG59KTtcblxuZXhwb3J0IGNvbnN0IGdlb0NvZGVyUGFuZWxTZWxlY3RvciA9IChwcm9wczogS2VwbGVyR0xQcm9wcykgPT4gKHtcbiAgaXNHZW9jb2RlckVuYWJsZWQ6IHByb3BzLnZpc1N0YXRlLmludGVyYWN0aW9uQ29uZmlnLmdlb2NvZGVyLmVuYWJsZWQsXG4gIG1hcGJveEFwaUFjY2Vzc1Rva2VuOiBwcm9wcy5tYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgbWFwU3RhdGU6IHByb3BzLm1hcFN0YXRlLFxuICB1cGRhdGVWaXNEYXRhOiBwcm9wcy52aXNTdGF0ZUFjdGlvbnMudXBkYXRlVmlzRGF0YSxcbiAgcmVtb3ZlRGF0YXNldDogcHJvcHMudmlzU3RhdGVBY3Rpb25zLnJlbW92ZURhdGFzZXQsXG4gIHVwZGF0ZU1hcDogcHJvcHMubWFwU3RhdGVBY3Rpb25zLnVwZGF0ZU1hcFxufSk7XG5cbmV4cG9ydCBjb25zdCBub3RpZmljYXRpb25QYW5lbFNlbGVjdG9yID0gKHByb3BzOiBLZXBsZXJHTFByb3BzKSA9PiAoe1xuICByZW1vdmVOb3RpZmljYXRpb246IHByb3BzLnVpU3RhdGVBY3Rpb25zLnJlbW92ZU5vdGlmaWNhdGlvbixcbiAgbm90aWZpY2F0aW9uczogcHJvcHMudWlTdGF0ZS5ub3RpZmljYXRpb25zXG59KTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfS0VQTEVSX0dMX1BST1BTID0ge1xuICBtYXBTdHlsZXM6IFtdLFxuICBtYXBTdHlsZXNSZXBsYWNlRGVmYXVsdDogZmFsc2UsXG4gIG1hcGJveEFwaVVybDogREVGQVVMVF9NQVBCT1hfQVBJX1VSTCxcbiAgd2lkdGg6IDgwMCxcbiAgaGVpZ2h0OiA4MDAsXG4gIGFwcE5hbWU6IEtFUExFUl9HTF9OQU1FLFxuICB2ZXJzaW9uOiBLRVBMRVJfR0xfVkVSU0lPTixcbiAgc2lkZVBhbmVsV2lkdGg6IERJTUVOU0lPTlMuc2lkZVBhbmVsLndpZHRoLFxuICB0aGVtZToge30sXG4gIGNsb3VkUHJvdmlkZXJzOiBbXSxcbiAgcmVhZE9ubHk6IGZhbHNlLFxuICBmZWF0dXJlRmxhZ3M6IHt9XG59O1xuXG50eXBlIEtlcGxlckdMQmFzaWNQcm9wcyA9IHtcbiAgbWFwYm94QXBpQWNjZXNzVG9rZW46IHN0cmluZztcbiAgbWFwYm94QXBpVXJsPzogc3RyaW5nO1xuICBpZDogc3RyaW5nO1xuICB3aWR0aD86IG51bWJlcjtcbiAgaGVpZ2h0PzogbnVtYmVyO1xuXG4gIGFwcFdlYnNpdGU/OiBhbnk7XG4gIG9uU2F2ZU1hcD86ICgpID0+IHZvaWQ7XG4gIG9uVmlld1N0YXRlQ2hhbmdlPzogKCkgPT4gdm9pZDtcbiAgb25EZWNrSW5pdGlhbGl6ZWQ/OiAoKSA9PiB2b2lkO1xuICBvbktlcGxlckdsSW5pdGlhbGl6ZWQ/OiAoKSA9PiB2b2lkO1xuICBnZXRNYXBib3hSZWY/OiAoKSA9PiBSZWFjdC5SZWZPYmplY3Q8YW55PjtcbiAgbWFwU3R5bGVzPzoge2lkOiBzdHJpbmc7IHN0eWxlPzogb2JqZWN0fVtdO1xuICBtYXBTdHlsZXNSZXBsYWNlRGVmYXVsdD86IGJvb2xlYW47XG4gIGFwcE5hbWU/OiBzdHJpbmc7XG4gIHZlcnNpb24/OiBzdHJpbmc7XG4gIHNpZGVQYW5lbFdpZHRoPzogbnVtYmVyO1xuICB0aGVtZT86IG9iamVjdDtcbiAgY2xvdWRQcm92aWRlcnM/OiBQcm92aWRlcltdO1xuICBkZWNrR2xQcm9wcz86IG9iamVjdDtcbiAgb25Mb2FkQ2xvdWRNYXBTdWNjZXNzPzogT25TdWNjZXNzQ2FsbEJhY2s7XG4gIG9uTG9hZENsb3VkTWFwRXJyb3I/OiBPbkVycm9yQ2FsbEJhY2s7XG4gIG9uRXhwb3J0VG9DbG91ZFN1Y2Nlc3M/OiBPblN1Y2Nlc3NDYWxsQmFjaztcbiAgb25FeHBvcnRUb0Nsb3VkRXJyb3I/OiBPbkVycm9yQ2FsbEJhY2s7XG4gIHJlYWRPbmx5PzogYm9vbGVhbjtcbiAgZmVhdHVyZUZsYWdzPzogRmVhdHVyZUZsYWdzO1xuXG4gIGxvY2FsZU1lc3NhZ2VzPzoge1trZXk6IHN0cmluZ106IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9fTtcbiAgZGlzcGF0Y2g6IERpc3BhdGNoPGFueT47XG5cbiAgdG9wTWFwQ29udGFpbmVyUHJvcHM/OiBvYmplY3Q7XG4gIGJvdHRvbU1hcENvbnRhaW5lclByb3BzPzogb2JqZWN0O1xufTtcblxudHlwZSBLZXBsZXJHTFByb3BzID0gS2VwbGVyR2xTdGF0ZSAmIEtlcGxlckdsQWN0aW9ucyAmIEtlcGxlckdMQmFzaWNQcm9wcztcblxuS2VwbGVyR2xGYWN0b3J5LmRlcHMgPSBbXG4gIEJvdHRvbVdpZGdldEZhY3RvcnksXG4gIEdlb0NvZGVyUGFuZWxGYWN0b3J5LFxuICBNYXBDb250YWluZXJGYWN0b3J5LFxuICBNYXBzTGF5b3V0RmFjdG9yeSxcbiAgTW9kYWxDb250YWluZXJGYWN0b3J5LFxuICBTaWRlUGFuZWxGYWN0b3J5LFxuICBQbG90Q29udGFpbmVyRmFjdG9yeSxcbiAgTm90aWZpY2F0aW9uUGFuZWxGYWN0b3J5XG5dO1xuXG5mdW5jdGlvbiBLZXBsZXJHbEZhY3RvcnkoXG4gIEJvdHRvbVdpZGdldDogUmV0dXJuVHlwZTx0eXBlb2YgQm90dG9tV2lkZ2V0RmFjdG9yeT4sXG4gIEdlb0NvZGVyUGFuZWw6IFJldHVyblR5cGU8dHlwZW9mIEdlb0NvZGVyUGFuZWxGYWN0b3J5PixcbiAgTWFwQ29udGFpbmVyOiBSZXR1cm5UeXBlPHR5cGVvZiBNYXBDb250YWluZXJGYWN0b3J5PixcbiAgTWFwc0xheW91dDogUmV0dXJuVHlwZTx0eXBlb2YgTWFwc0xheW91dEZhY3Rvcnk+LFxuICBNb2RhbENvbnRhaW5lcjogUmV0dXJuVHlwZTx0eXBlb2YgTW9kYWxDb250YWluZXJGYWN0b3J5PixcbiAgU2lkZVBhbmVsOiBSZXR1cm5UeXBlPHR5cGVvZiBTaWRlUGFuZWxGYWN0b3J5PixcbiAgUGxvdENvbnRhaW5lcjogUmV0dXJuVHlwZTx0eXBlb2YgUGxvdENvbnRhaW5lckZhY3Rvcnk+LFxuICBOb3RpZmljYXRpb25QYW5lbDogUmV0dXJuVHlwZTx0eXBlb2YgTm90aWZpY2F0aW9uUGFuZWxGYWN0b3J5PlxuKTogUmVhY3QuQ29tcG9uZW50VHlwZTxLZXBsZXJHTEJhc2ljUHJvcHMgJiB7c2VsZWN0b3I6ICguLi5hcmdzOiBhbnlbXSkgPT4gS2VwbGVyR2xTdGF0ZX0+IHtcbiAgLyoqIEB0eXBlZGVmIHtpbXBvcnQoJy4va2VwbGVyLWdsJykuVW5jb25uZWN0ZWRLZXBsZXJHbFByb3BzfSBLZXBsZXJHbFByb3BzICovXG4gIC8qKiBAYXVnbWVudHMgUmVhY3QuQ29tcG9uZW50PEtlcGxlckdsUHJvcHM+ICovXG4gIGNsYXNzIEtlcGxlckdMIGV4dGVuZHMgQ29tcG9uZW50PEtlcGxlckdMUHJvcHMgJiB7c2VsZWN0b3I6ICguLi5hcmdzOiBhbnlbXSkgPT4gS2VwbGVyR2xTdGF0ZX0+IHtcbiAgICBzdGF0aWMgZGVmYXVsdFByb3BzID0gREVGQVVMVF9LRVBMRVJfR0xfUFJPUFM7XG5cbiAgICBzdGF0ZSA9IHtcbiAgICAgIGRpbWVuc2lvbnM6IG51bGxcbiAgICB9O1xuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB0aGlzLl92YWxpZGF0ZU1hcGJveFRva2VuKCk7XG4gICAgICB0aGlzLl9sb2FkTWFwU3R5bGUoKTtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vbktlcGxlckdsSW5pdGlhbGl6ZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbktlcGxlckdsSW5pdGlhbGl6ZWQoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnJvb3QuY3VycmVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgIG9ic2VydmVEaW1lbnNpb25zKHRoaXMucm9vdC5jdXJyZW50LCB0aGlzLl9oYW5kbGVSZXNpemUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgaWYgKHRoaXMucm9vdC5jdXJyZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgdW5vYnNlcnZlRGltZW5zaW9ucyh0aGlzLnJvb3QuY3VycmVudCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgX2hhbmRsZVJlc2l6ZSA9IGRpbWVuc2lvbnMgPT4ge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7ZGltZW5zaW9uc30pO1xuICAgIH07XG5cbiAgICBzdGF0aWMgY29udGV4dFR5cGUgPSBSb290Q29udGV4dDtcblxuICAgIHJvb3QgPSBjcmVhdGVSZWY8SFRNTERpdkVsZW1lbnQ+KCk7XG4gICAgYm90dG9tV2lkZ2V0UmVmID0gY3JlYXRlUmVmPEhUTUxEaXZFbGVtZW50PigpO1xuXG4gICAgLyogc2VsZWN0b3JzICovXG4gICAgdGhlbWVTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLnRoZW1lO1xuICAgIGF2YWlsYWJsZVRoZW1lU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3Rvcih0aGlzLnRoZW1lU2VsZWN0b3IsIHRoZW1lID0+XG4gICAgICB0eXBlb2YgdGhlbWUgPT09ICdvYmplY3QnXG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uYmFzaWNUaGVtZSxcbiAgICAgICAgICAgIC4uLnRoZW1lXG4gICAgICAgICAgfVxuICAgICAgICA6IHRoZW1lID09PSBUSEVNRS5saWdodFxuICAgICAgICA/IHRoZW1lTFRcbiAgICAgICAgOiB0aGVtZSA9PT0gVEhFTUUuYmFzZVxuICAgICAgICA/IHRoZW1lQlNcbiAgICAgICAgOiB0aGVtZVxuICAgICk7XG5cbiAgICBkYXRhc2V0c1NlbGVjdG9yID0gcHJvcHMgPT4gcHJvcHMudmlzU3RhdGUuZGF0YXNldHM7XG4gICAgZmlsdGVyZWREYXRhc2V0c1NlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IodGhpcy5kYXRhc2V0c1NlbGVjdG9yLCBnZXRWaXNpYmxlRGF0YXNldHMpO1xuXG4gICAgYXZhaWxhYmxlUHJvdmlkZXJzID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICAocHJvcHM6IEtlcGxlckdMUHJvcHMpID0+IHByb3BzLmNsb3VkUHJvdmlkZXJzLFxuICAgICAgcHJvdmlkZXJzID0+XG4gICAgICAgIEFycmF5LmlzQXJyYXkocHJvdmlkZXJzKSAmJiBwcm92aWRlcnMubGVuZ3RoXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGhhc1N0b3JhZ2U6IHByb3ZpZGVycy5zb21lKHAgPT4gcC5oYXNQcml2YXRlU3RvcmFnZSgpKSxcbiAgICAgICAgICAgICAgaGFzU2hhcmU6IHByb3ZpZGVycy5zb21lKHAgPT4gcC5oYXNTaGFyaW5nVXJsKCkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7fVxuICAgICk7XG5cbiAgICBsb2NhbGVNZXNzYWdlc1NlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICAocHJvcHM6IEtlcGxlckdMUHJvcHMpID0+IHByb3BzLmxvY2FsZU1lc3NhZ2VzLFxuICAgICAgY3VzdG9tTWVzc2FnZXMgPT4gKGN1c3RvbU1lc3NhZ2VzID8gbWVyZ2VNZXNzYWdlcyhtZXNzYWdlcywgY3VzdG9tTWVzc2FnZXMpIDogbWVzc2FnZXMpXG4gICAgKTtcblxuICAgIC8qIHByaXZhdGUgbWV0aG9kcyAqL1xuICAgIF92YWxpZGF0ZU1hcGJveFRva2VuKCkge1xuICAgICAgY29uc3Qge21hcGJveEFwaUFjY2Vzc1Rva2VufSA9IHRoaXMucHJvcHM7XG4gICAgICBpZiAoIXZhbGlkYXRlVG9rZW4obWFwYm94QXBpQWNjZXNzVG9rZW4pKSB7XG4gICAgICAgIENvbnNvbGUud2FybihNSVNTSU5HX01BUEJPWF9UT0tFTik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgX2xvYWRNYXBTdHlsZSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGRlZmF1bHRTdHlsZXMgPSBPYmplY3QudmFsdWVzKHRoaXMucHJvcHMubWFwU3R5bGUubWFwU3R5bGVzKTtcbiAgICAgIC8vIGFkZCBpZCB0byBjdXN0b20gbWFwIHN0eWxlcyBpZiBub3QgZ2l2ZW5cbiAgICAgIGNvbnN0IGN1c3RvbVN0eWxlcyA9ICh0aGlzLnByb3BzLm1hcFN0eWxlcyB8fCBbXSkubWFwKG1zID0+ICh7XG4gICAgICAgIC4uLm1zLFxuICAgICAgICBpZDogbXMuaWQgfHwgZ2VuZXJhdGVIYXNoSWQoKVxuICAgICAgfSkpO1xuXG4gICAgICBjb25zdCBhbGxTdHlsZXMgPSBbLi4uY3VzdG9tU3R5bGVzLCAuLi5kZWZhdWx0U3R5bGVzXS5yZWR1Y2UoXG4gICAgICAgIChhY2N1LCBzdHlsZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGhhc1N0eWxlT2JqZWN0ID0gc3R5bGUuc3R5bGUgJiYgdHlwZW9mIHN0eWxlLnN0eWxlID09PSAnb2JqZWN0JztcbiAgICAgICAgICBhY2N1W2hhc1N0eWxlT2JqZWN0ID8gJ3RvTG9hZCcgOiAndG9SZXF1ZXN0J11bc3R5bGUuaWRdID0gc3R5bGU7XG5cbiAgICAgICAgICByZXR1cm4gYWNjdTtcbiAgICAgICAgfSxcbiAgICAgICAge3RvTG9hZDoge30sIHRvUmVxdWVzdDoge319XG4gICAgICApO1xuXG4gICAgICB0aGlzLnByb3BzLm1hcFN0eWxlQWN0aW9ucy5sb2FkTWFwU3R5bGVzKGFsbFN0eWxlcy50b0xvYWQpO1xuICAgICAgdGhpcy5wcm9wcy5tYXBTdHlsZUFjdGlvbnMucmVxdWVzdE1hcFN0eWxlcyhhbGxTdHlsZXMudG9SZXF1ZXN0KTtcbiAgICB9O1xuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBpZCA9ICdtYXAnLFxuICAgICAgICB3aWR0aCA9IERFRkFVTFRfS0VQTEVSX0dMX1BST1BTLndpZHRoLFxuICAgICAgICBoZWlnaHQgPSBERUZBVUxUX0tFUExFUl9HTF9QUk9QUy5oZWlnaHQsXG4gICAgICAgIHVpU3RhdGUsXG4gICAgICAgIHZpc1N0YXRlLFxuICAgICAgICAvLyByZWFkT25seSBvdmVycmlkZVxuICAgICAgICByZWFkT25seSxcblxuICAgICAgICAvLyBmZWF0dXJlc1xuICAgICAgICBmZWF0dXJlRmxhZ3NcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBjb25zdCBkaW1lbnNpb25zID0gdGhpcy5zdGF0ZS5kaW1lbnNpb25zIHx8IHt3aWR0aCwgaGVpZ2h0fTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgc3BsaXRNYXBzLCAvLyB0aGlzIHdpbGwgc3RvcmUgc3VwcG9ydCBmb3Igc3BsaXQgbWFwIHZpZXcgaXMgbmVjZXNzYXJ5XG4gICAgICAgIGludGVyYWN0aW9uQ29uZmlnXG4gICAgICB9ID0gdmlzU3RhdGU7XG5cbiAgICAgIGNvbnN0IGlzU3BsaXQgPSBpc1NwbGl0U2VsZWN0b3IodGhpcy5wcm9wcyk7XG4gICAgICBjb25zdCB0aGVtZSA9IHRoaXMuYXZhaWxhYmxlVGhlbWVTZWxlY3Rvcih0aGlzLnByb3BzKTtcbiAgICAgIGNvbnN0IGxvY2FsZU1lc3NhZ2VzID0gdGhpcy5sb2NhbGVNZXNzYWdlc1NlbGVjdG9yKHRoaXMucHJvcHMpO1xuICAgICAgY29uc3QgaXNFeHBvcnRpbmdJbWFnZSA9IHVpU3RhdGUuZXhwb3J0SW1hZ2UuZXhwb3J0aW5nO1xuICAgICAgY29uc3QgYXZhaWxhYmxlUHJvdmlkZXJzID0gdGhpcy5hdmFpbGFibGVQcm92aWRlcnModGhpcy5wcm9wcyk7XG5cbiAgICAgIGNvbnN0IG1hcEZpZWxkcyA9IG1hcEZpZWxkc1NlbGVjdG9yKHRoaXMucHJvcHMpO1xuICAgICAgY29uc3QgZmlsdGVyZWREYXRhc2V0cyA9IHRoaXMuZmlsdGVyZWREYXRhc2V0c1NlbGVjdG9yKHRoaXMucHJvcHMpO1xuICAgICAgY29uc3Qgc2lkZUZpZWxkcyA9IHNpZGVQYW5lbFNlbGVjdG9yKHRoaXMucHJvcHMsIGF2YWlsYWJsZVByb3ZpZGVycywgZmlsdGVyZWREYXRhc2V0cyk7XG4gICAgICBjb25zdCBwbG90Q29udGFpbmVyRmllbGRzID0gcGxvdENvbnRhaW5lclNlbGVjdG9yKHRoaXMucHJvcHMpO1xuICAgICAgY29uc3QgYm90dG9tV2lkZ2V0RmllbGRzID0gYm90dG9tV2lkZ2V0U2VsZWN0b3IodGhpcy5wcm9wcywgdGhlbWUpO1xuICAgICAgY29uc3QgbW9kYWxDb250YWluZXJGaWVsZHMgPSBtb2RhbENvbnRhaW5lclNlbGVjdG9yKHRoaXMucHJvcHMsIHRoaXMucm9vdC5jdXJyZW50KTtcbiAgICAgIGNvbnN0IGdlb0NvZGVyUGFuZWxGaWVsZHMgPSBnZW9Db2RlclBhbmVsU2VsZWN0b3IodGhpcy5wcm9wcyk7XG4gICAgICBjb25zdCBub3RpZmljYXRpb25QYW5lbEZpZWxkcyA9IG5vdGlmaWNhdGlvblBhbmVsU2VsZWN0b3IodGhpcy5wcm9wcyk7XG5cbiAgICAgIGNvbnN0IG1hcENvbnRhaW5lcnMgPSAhaXNTcGxpdFxuICAgICAgICA/IFs8TWFwQ29udGFpbmVyIHByaW1hcnk9e3RydWV9IGtleT17MH0gaW5kZXg9ezB9IHsuLi5tYXBGaWVsZHN9IC8+XVxuICAgICAgICA6IHNwbGl0TWFwcy5tYXAoKHNldHRpbmdzLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPE1hcENvbnRhaW5lciBrZXk9e2luZGV4fSBpbmRleD17aW5kZXh9IHByaW1hcnk9e2luZGV4ID09PSAxfSB7Li4ubWFwRmllbGRzfSAvPlxuICAgICAgICAgICkpO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Um9vdENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3RoaXMucm9vdH0+XG4gICAgICAgICAgPEZlYXR1cmVGbGFnc0NvbnRleHRQcm92aWRlciBmZWF0dXJlRmxhZ3M9e2ZlYXR1cmVGbGFnc30+XG4gICAgICAgICAgICA8SW50bFByb3ZpZGVyIGxvY2FsZT17dWlTdGF0ZS5sb2NhbGV9IG1lc3NhZ2VzPXtsb2NhbGVNZXNzYWdlc1t1aVN0YXRlLmxvY2FsZV19PlxuICAgICAgICAgICAgICA8VGhlbWVQcm92aWRlciB0aGVtZT17dGhlbWV9PlxuICAgICAgICAgICAgICAgIDxHbG9iYWxTdHlsZVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwia2VwbGVyLWdsXCJcbiAgICAgICAgICAgICAgICAgIGlkPXtga2VwbGVyLWdsX18ke2lkfWB9XG4gICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGAke3dpZHRofXB4YCxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBgJHtoZWlnaHR9cHhgXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgcmVmPXt0aGlzLnJvb3R9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPE5vdGlmaWNhdGlvblBhbmVsIHsuLi5ub3RpZmljYXRpb25QYW5lbEZpZWxkc30gLz5cbiAgICAgICAgICAgICAgICAgIHshdWlTdGF0ZS5yZWFkT25seSAmJiAhcmVhZE9ubHkgJiYgPFNpZGVQYW5lbCB7Li4uc2lkZUZpZWxkc30gLz59XG4gICAgICAgICAgICAgICAgICA8TWFwc0xheW91dCBjbGFzc05hbWU9XCJtYXBzXCI+e21hcENvbnRhaW5lcnN9PC9NYXBzTGF5b3V0PlxuICAgICAgICAgICAgICAgICAge2lzRXhwb3J0aW5nSW1hZ2UgJiYgPFBsb3RDb250YWluZXIgey4uLnBsb3RDb250YWluZXJGaWVsZHN9IC8+fVxuICAgICAgICAgICAgICAgICAge2ludGVyYWN0aW9uQ29uZmlnLmdlb2NvZGVyLmVuYWJsZWQgJiYgPEdlb0NvZGVyUGFuZWwgey4uLmdlb0NvZGVyUGFuZWxGaWVsZHN9IC8+fVxuICAgICAgICAgICAgICAgICAgPEJvdHRvbVdpZGdldE91dGVyIGFic29sdXRlPXshaGFzUG9ydGFibGVXaWR0aChicmVha1BvaW50VmFsdWVzKX0+XG4gICAgICAgICAgICAgICAgICAgIDxCb3R0b21XaWRnZXRcbiAgICAgICAgICAgICAgICAgICAgICByb290UmVmPXt0aGlzLmJvdHRvbVdpZGdldFJlZn1cbiAgICAgICAgICAgICAgICAgICAgICB7Li4uYm90dG9tV2lkZ2V0RmllbGRzfVxuICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lclc9e2RpbWVuc2lvbnMud2lkdGh9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L0JvdHRvbVdpZGdldE91dGVyPlxuICAgICAgICAgICAgICAgICAgPE1vZGFsQ29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgIHsuLi5tb2RhbENvbnRhaW5lckZpZWxkc31cbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyVz17ZGltZW5zaW9ucy53aWR0aH1cbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVySD17ZGltZW5zaW9ucy5oZWlnaHR9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvR2xvYmFsU3R5bGU+XG4gICAgICAgICAgICAgIDwvVGhlbWVQcm92aWRlcj5cbiAgICAgICAgICAgIDwvSW50bFByb3ZpZGVyPlxuICAgICAgICAgIDwvRmVhdHVyZUZsYWdzQ29udGV4dFByb3ZpZGVyPlxuICAgICAgICA8L1Jvb3RDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ga2VwbGVyR2xDb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywgbWFrZU1hcERpc3BhdGNoVG9Qcm9wcykod2l0aFRoZW1lKEtlcGxlckdMKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXBTdGF0ZVRvUHJvcHMoc3RhdGU6IEtlcGxlckdsU3RhdGUsIHByb3BzOiBLZXBsZXJHTFByb3BzKSB7XG4gIHJldHVybiB7XG4gICAgLi4ucHJvcHMsXG4gICAgdmlzU3RhdGU6IHN0YXRlLnZpc1N0YXRlLFxuICAgIG1hcFN0eWxlOiBzdGF0ZS5tYXBTdHlsZSxcbiAgICBtYXBTdGF0ZTogc3RhdGUubWFwU3RhdGUsXG4gICAgdWlTdGF0ZTogc3RhdGUudWlTdGF0ZSxcbiAgICBwcm92aWRlclN0YXRlOiBzdGF0ZS5wcm92aWRlclN0YXRlXG4gIH07XG59XG5cbmNvbnN0IGRlZmF1bHRVc2VyQWN0aW9ucyA9IHt9O1xuXG5jb25zdCBnZXREaXNwYXRjaCA9IChkaXNwYXRjaCwgcHJvcHMpID0+IGRpc3BhdGNoO1xuY29uc3QgZ2V0VXNlckFjdGlvbnMgPSAoZGlzcGF0Y2gsIHByb3BzKSA9PiBwcm9wcy5hY3Rpb25zIHx8IGRlZmF1bHRVc2VyQWN0aW9ucztcblxuLyoqIEB0eXBlIHsoKSA9PiBpbXBvcnQoJ3Jlc2VsZWN0JykuT3V0cHV0UGFyYW1ldHJpY1NlbGVjdG9yPGFueSwgYW55LCBhbnksIGFueT59ICovXG5mdW5jdGlvbiBtYWtlR2V0QWN0aW9uQ3JlYXRvcnMoKSB7XG4gIHJldHVybiBjcmVhdGVTZWxlY3RvcihbZ2V0RGlzcGF0Y2gsIGdldFVzZXJBY3Rpb25zXSwgKGRpc3BhdGNoLCB1c2VyQWN0aW9ucykgPT4ge1xuICAgIGNvbnN0IFt2aXNTdGF0ZUFjdGlvbnMsIG1hcFN0YXRlQWN0aW9ucywgbWFwU3R5bGVBY3Rpb25zLCB1aVN0YXRlQWN0aW9ucywgcHJvdmlkZXJBY3Rpb25zXSA9IFtcbiAgICAgIFZpc1N0YXRlQWN0aW9ucyxcbiAgICAgIE1hcFN0YXRlQWN0aW9ucyxcbiAgICAgIE1hcFN0eWxlQWN0aW9ucyxcbiAgICAgIFVJU3RhdGVBY3Rpb25zLFxuICAgICAgUHJvdmlkZXJBY3Rpb25zXG4gICAgXS5tYXAoYWN0aW9ucyA9PiBiaW5kQWN0aW9uQ3JlYXRvcnMobWVyZ2VBY3Rpb25zKGFjdGlvbnMsIHVzZXJBY3Rpb25zKSwgZGlzcGF0Y2gpKTtcblxuICAgIHJldHVybiB7XG4gICAgICB2aXNTdGF0ZUFjdGlvbnMsXG4gICAgICBtYXBTdGF0ZUFjdGlvbnMsXG4gICAgICBtYXBTdHlsZUFjdGlvbnMsXG4gICAgICB1aVN0YXRlQWN0aW9ucyxcbiAgICAgIHByb3ZpZGVyQWN0aW9ucyxcbiAgICAgIGRpc3BhdGNoXG4gICAgfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG1ha2VNYXBEaXNwYXRjaFRvUHJvcHMoKSB7XG4gIGNvbnN0IGdldEFjdGlvbkNyZWF0b3JzID0gbWFrZUdldEFjdGlvbkNyZWF0b3JzKCk7XG4gIGNvbnN0IG1hcERpc3BhdGNoVG9Qcm9wcyA9IChkaXNwYXRjaCwgb3duUHJvcHMpID0+IHtcbiAgICBjb25zdCBncm91cGVkQWN0aW9uQ3JlYXRvcnMgPSBnZXRBY3Rpb25DcmVhdG9ycyhkaXNwYXRjaCwgb3duUHJvcHMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmdyb3VwZWRBY3Rpb25DcmVhdG9ycyxcbiAgICAgIGRpc3BhdGNoXG4gICAgfTtcbiAgfTtcblxuICByZXR1cm4gbWFwRGlzcGF0Y2hUb1Byb3BzO1xufVxuXG4vKipcbiAqIE92ZXJyaWRlIGRlZmF1bHQga2VwbGVyLmdsIGFjdGlvbnMgd2l0aCB1c2VyIGRlZmluZWQgYWN0aW9ucyB1c2luZyB0aGUgc2FtZSBrZXlcbiAqL1xuZnVuY3Rpb24gbWVyZ2VBY3Rpb25zKGFjdGlvbnMsIHVzZXJBY3Rpb25zKSB7XG4gIGNvbnN0IG92ZXJyaWRlcyA9IHt9O1xuICBmb3IgKGNvbnN0IGtleSBpbiB1c2VyQWN0aW9ucykge1xuICAgIGlmICh1c2VyQWN0aW9ucy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIGFjdGlvbnMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgb3ZlcnJpZGVzW2tleV0gPSB1c2VyQWN0aW9uc1trZXldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7Li4uYWN0aW9ucywgLi4ub3ZlcnJpZGVzfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgS2VwbGVyR2xGYWN0b3J5O1xuIl19
|
|
615
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9rZXBsZXItZ2wudHN4Il0sIm5hbWVzIjpbIkdsb2JhbFN0eWxlIiwic3R5bGVkIiwiZGl2IiwicHJvcHMiLCJ0aGVtZSIsImZvbnRGYW1pbHkiLCJmb250V2VpZ2h0IiwiZm9udFNpemUiLCJsaW5lSGVpZ2h0IiwibGFiZWxDb2xvciIsIkJvdHRvbVdpZGdldE91dGVyIiwiYWJzb2x1dGUiLCJpc1ZpZXdwb3J0RGlzam9pbnRlZCIsIm1hcFN0YXRlIiwiaXNTcGxpdCIsImlzVmlld3BvcnRTeW5jZWQiLCJzcGxpdE1hcFZpZXdwb3J0cyIsImxlbmd0aCIsIm1hcFN0YXRlU2VsZWN0b3IiLCJpbmRleCIsIk51bWJlciIsImlzRmluaXRlIiwibWFwRmllbGRzU2VsZWN0b3IiLCJnZXRNYXBib3hSZWYiLCJtYXBib3hBcGlBY2Nlc3NUb2tlbiIsIm1hcGJveEFwaVVybCIsIkRFRkFVTFRfS0VQTEVSX0dMX1BST1BTIiwibWFwU3R5bGUiLCJvbkRlY2tJbml0aWFsaXplZCIsIm9uVmlld1N0YXRlQ2hhbmdlIiwib25Nb3VzZU1vdmUiLCJkZWNrR2xQcm9wcyIsInVpU3RhdGVBY3Rpb25zIiwidmlzU3RhdGVBY3Rpb25zIiwibWFwU3RhdGVBY3Rpb25zIiwidmlzU3RhdGUiLCJhY3RpdmVTaWRlUGFuZWwiLCJ1aVN0YXRlIiwibWFwQ29udHJvbHMiLCJyZWFkT25seSIsImxvY2FsZSIsInRvcE1hcENvbnRhaW5lclByb3BzIiwiYm90dG9tTWFwQ29udGFpbmVyUHJvcHMiLCJnZXRWaXNpYmxlRGF0YXNldHMiLCJkYXRhc2V0cyIsImtleSIsInZhbHVlIiwiR0VPQ09ERVJfREFUQVNFVF9OQU1FIiwic2lkZVBhbmVsU2VsZWN0b3IiLCJhdmFpbGFibGVQcm92aWRlcnMiLCJmaWx0ZXJlZERhdGFzZXRzIiwiYXBwTmFtZSIsInZlcnNpb24iLCJhcHBXZWJzaXRlIiwib25TYXZlTWFwIiwibWFwU3R5bGVBY3Rpb25zIiwiZmlsdGVycyIsImxheWVycyIsImxheWVyT3JkZXIiLCJsYXllckNsYXNzZXMiLCJpbnRlcmFjdGlvbkNvbmZpZyIsIm1hcEluZm8iLCJsYXllckJsZW5kaW5nIiwib3ZlcmxheUJsZW5kaW5nIiwid2lkdGgiLCJzaWRlUGFuZWxXaWR0aCIsIm1hcFNhdmVkIiwicHJvdmlkZXJTdGF0ZSIsInBsb3RDb250YWluZXJTZWxlY3RvciIsImhlaWdodCIsImV4cG9ydEltYWdlU2V0dGluZyIsImV4cG9ydEltYWdlIiwibWFwRmllbGRzIiwiYWRkTm90aWZpY2F0aW9uIiwic2V0RXhwb3J0SW1hZ2VTZXR0aW5nIiwic2V0RXhwb3J0SW1hZ2VEYXRhVXJpIiwic2V0RXhwb3J0SW1hZ2VFcnJvciIsInNwbGl0TWFwcyIsImlzU3BsaXRTZWxlY3RvciIsImJvdHRvbVdpZGdldFNlbGVjdG9yIiwiYW5pbWF0aW9uQ29uZmlnIiwidG9nZ2xlTW9kYWwiLCJzaWRlUGFuZWwiLCJtYXJnaW4iLCJsZWZ0IiwibW9kYWxDb250YWluZXJTZWxlY3RvciIsInJvb3ROb2RlIiwicHJvdmlkZXJBY3Rpb25zIiwiY2xvdWRQcm92aWRlcnMiLCJvbkV4cG9ydFRvQ2xvdWRTdWNjZXNzIiwib25Mb2FkQ2xvdWRNYXBTdWNjZXNzIiwib25Mb2FkQ2xvdWRNYXBFcnJvciIsIm9uRXhwb3J0VG9DbG91ZEVycm9yIiwiZ2VvQ29kZXJQYW5lbFNlbGVjdG9yIiwiZGltZW5zaW9ucyIsImlzR2VvY29kZXJFbmFibGVkIiwiZ2VvY29kZXIiLCJlbmFibGVkIiwidXBkYXRlVmlzRGF0YSIsInJlbW92ZURhdGFzZXQiLCJ1cGRhdGVNYXAiLCJhcHBXaWR0aCIsIm5vdGlmaWNhdGlvblBhbmVsU2VsZWN0b3IiLCJyZW1vdmVOb3RpZmljYXRpb24iLCJub3RpZmljYXRpb25zIiwibWFwU3R5bGVzIiwibWFwU3R5bGVzUmVwbGFjZURlZmF1bHQiLCJERUZBVUxUX01BUEJPWF9BUElfVVJMIiwiS0VQTEVSX0dMX05BTUUiLCJLRVBMRVJfR0xfVkVSU0lPTiIsIkRJTUVOU0lPTlMiLCJmZWF0dXJlRmxhZ3MiLCJLZXBsZXJHbEZhY3RvcnkiLCJkZXBzIiwiQm90dG9tV2lkZ2V0RmFjdG9yeSIsIkdlb0NvZGVyUGFuZWxGYWN0b3J5IiwiTWFwQ29udGFpbmVyRmFjdG9yeSIsIk1hcHNMYXlvdXRGYWN0b3J5IiwiTW9kYWxDb250YWluZXJGYWN0b3J5IiwiU2lkZVBhbmVsRmFjdG9yeSIsIlBsb3RDb250YWluZXJGYWN0b3J5IiwiTm90aWZpY2F0aW9uUGFuZWxGYWN0b3J5IiwiRG5kQ29udGV4dEZhY3RvcnkiLCJCb3R0b21XaWRnZXQiLCJHZW9Db2RlclBhbmVsIiwiTWFwQ29udGFpbmVyIiwiTWFwc0xheW91dCIsIk1vZGFsQ29udGFpbmVyIiwiU2lkZVBhbmVsIiwiUGxvdENvbnRhaW5lciIsIk5vdGlmaWNhdGlvblBhbmVsIiwiRG5kQ29udGV4dCIsIktlcGxlckdMIiwic2V0U3RhdGUiLCJ0aGVtZVNlbGVjdG9yIiwiYmFzaWNUaGVtZSIsIlRIRU1FIiwibGlnaHQiLCJ0aGVtZUxUIiwiYmFzZSIsInRoZW1lQlMiLCJkYXRhc2V0c1NlbGVjdG9yIiwicHJvdmlkZXJzIiwiQXJyYXkiLCJpc0FycmF5IiwiaGFzU3RvcmFnZSIsInNvbWUiLCJwIiwiaGFzUHJpdmF0ZVN0b3JhZ2UiLCJoYXNTaGFyZSIsImhhc1NoYXJpbmdVcmwiLCJsb2NhbGVNZXNzYWdlcyIsImN1c3RvbU1lc3NhZ2VzIiwibWVzc2FnZXMiLCJkZWZhdWx0U3R5bGVzIiwiT2JqZWN0IiwidmFsdWVzIiwiY3VzdG9tU3R5bGVzIiwibWFwIiwibXMiLCJpZCIsImFsbFN0eWxlcyIsInJlZHVjZSIsImFjY3UiLCJzdHlsZSIsImxvYWRNYXBTdHlsZXMiLCJjb250YWluZXJJZCIsImxheWVySWQiLCJ0b2dnbGVMYXllckZvck1hcCIsIl92YWxpZGF0ZU1hcGJveFRva2VuIiwiX2xvYWRNYXBTdHlsZSIsIm9uS2VwbGVyR2xJbml0aWFsaXplZCIsInJvb3QiLCJjdXJyZW50IiwiSFRNTEVsZW1lbnQiLCJfaGFuZGxlUmVzaXplIiwiQ29uc29sZSIsIndhcm4iLCJNSVNTSU5HX01BUEJPWF9UT0tFTiIsInN0YXRlIiwiYXZhaWxhYmxlVGhlbWVTZWxlY3RvciIsImxvY2FsZU1lc3NhZ2VzU2VsZWN0b3IiLCJpc0V4cG9ydGluZ0ltYWdlIiwiZXhwb3J0aW5nIiwiZmlsdGVyZWREYXRhc2V0c1NlbGVjdG9yIiwic2lkZUZpZWxkcyIsInBsb3RDb250YWluZXJGaWVsZHMiLCJib3R0b21XaWRnZXRGaWVsZHMiLCJtb2RhbENvbnRhaW5lckZpZWxkcyIsImdlb0NvZGVyUGFuZWxGaWVsZHMiLCJub3RpZmljYXRpb25QYW5lbEZpZWxkcyIsIm1hcENvbnRhaW5lcnMiLCJfZGVsZXRlTWFwTGFiZWxzIiwic2V0dGluZ3MiLCJkaXNwbGF5IiwiZmxleERpcmVjdGlvbiIsInBvc2l0aW9uIiwiX21hcENvbnRhaW5lciIsImJyZWFrUG9pbnRWYWx1ZXMiLCJib3R0b21XaWRnZXRSZWYiLCJDb21wb25lbnQiLCJSb290Q29udGV4dCIsIm1hcFN0YXRlVG9Qcm9wcyIsIm1ha2VNYXBEaXNwYXRjaFRvUHJvcHMiLCJkZWZhdWx0VXNlckFjdGlvbnMiLCJnZXREaXNwYXRjaCIsImRpc3BhdGNoIiwiZ2V0VXNlckFjdGlvbnMiLCJhY3Rpb25zIiwibWFrZUdldEFjdGlvbkNyZWF0b3JzIiwidXNlckFjdGlvbnMiLCJWaXNTdGF0ZUFjdGlvbnMiLCJNYXBTdGF0ZUFjdGlvbnMiLCJNYXBTdHlsZUFjdGlvbnMiLCJVSVN0YXRlQWN0aW9ucyIsIlByb3ZpZGVyQWN0aW9ucyIsIm1lcmdlQWN0aW9ucyIsImdldEFjdGlvbkNyZWF0b3JzIiwibWFwRGlzcGF0Y2hUb1Byb3BzIiwib3duUHJvcHMiLCJncm91cGVkQWN0aW9uQ3JlYXRvcnMiLCJvdmVycmlkZXMiLCJoYXNPd25Qcm9wZXJ0eSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FB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QmpMLEtBQTNCLEtBQW1DbUssT0FBTyxDQUFDYyxjQUFSLENBQXVCakwsS0FBdkIsQ0FBdkMsRUFBb0U7QUFDbEVnTCxNQUFBQSxTQUFTLENBQUNoTCxLQUFELENBQVQsR0FBaUJxSyxXQUFXLENBQUNySyxLQUFELENBQTVCO0FBQ0Q7QUFDRjs7QUFFRCx5Q0FBV21LLE9BQVgsR0FBdUJhLFNBQXZCO0FBQ0Q7O2VBRWM3RyxlIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIzIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50LCBjcmVhdGVSZWYsIERpc3BhdGNofSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ29uc29sZSBmcm9tICdnbG9iYWwvY29uc29sZSc7XG5pbXBvcnQge2JpbmRBY3Rpb25DcmVhdG9yc30gZnJvbSAncmVkdXgnO1xuaW1wb3J0IHN0eWxlZCwge1RoZW1lUHJvdmlkZXIsIHdpdGhUaGVtZX0gZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtjcmVhdGVTZWxlY3Rvcn0gZnJvbSAncmVzZWxlY3QnO1xuaW1wb3J0IHtjb25uZWN0IGFzIGtlcGxlckdsQ29ubmVjdH0gZnJvbSAnLi9jb25uZWN0L2tlcGxlcmdsLWNvbm5lY3QnO1xuaW1wb3J0IHtJbnRsUHJvdmlkZXJ9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHttZXNzYWdlc30gZnJvbSAnQGtlcGxlci5nbC9sb2NhbGl6YXRpb24nO1xuaW1wb3J0IHtSb290Q29udGV4dCwgRmVhdHVyZUZsYWdzQ29udGV4dFByb3ZpZGVyLCBGZWF0dXJlRmxhZ3N9IGZyb20gJy4vY29udGV4dCc7XG5pbXBvcnQge09uRXJyb3JDYWxsQmFjaywgT25TdWNjZXNzQ2FsbEJhY2ssIFZpZXdwb3J0fSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcblxuaW1wb3J0IHtcbiAgTWFwU3RhdGVBY3Rpb25zLFxuICBNYXBTdHlsZUFjdGlvbnMsXG4gIFByb3ZpZGVyQWN0aW9ucyxcbiAgVUlTdGF0ZUFjdGlvbnMsXG4gIFZpc1N0YXRlQWN0aW9uc1xufSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuXG50eXBlIEtlcGxlckdsQWN0aW9ucyA9IHtcbiAgdmlzU3RhdGVBY3Rpb25zOiB0eXBlb2YgVmlzU3RhdGVBY3Rpb25zO1xuICBtYXBTdGF0ZUFjdGlvbnM6IHR5cGVvZiBNYXBTdGF0ZUFjdGlvbnM7XG4gIG1hcFN0eWxlQWN0aW9uczogdHlwZW9mIE1hcFN0eWxlQWN0aW9ucztcbiAgdWlTdGF0ZUFjdGlvbnM6IHR5cGVvZiBVSVN0YXRlQWN0aW9ucztcbiAgcHJvdmlkZXJBY3Rpb25zOiB0eXBlb2YgUHJvdmlkZXJBY3Rpb25zO1xufTtcblxuaW1wb3J0IHtcbiAgRElNRU5TSU9OUyxcbiAgS0VQTEVSX0dMX05BTUUsXG4gIEtFUExFUl9HTF9WRVJTSU9OLFxuICBUSEVNRSxcbiAgREVGQVVMVF9NQVBCT1hfQVBJX1VSTCxcbiAgR0VPQ09ERVJfREFUQVNFVF9OQU1FLFxuICBNSVNTSU5HX01BUEJPWF9UT0tFTlxufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5cbmltcG9ydCBTaWRlUGFuZWxGYWN0b3J5IGZyb20gJy4vc2lkZS1wYW5lbCc7XG5pbXBvcnQgTWFwQ29udGFpbmVyRmFjdG9yeSBmcm9tICcuL21hcC1jb250YWluZXInO1xuaW1wb3J0IE1hcHNMYXlvdXRGYWN0b3J5IGZyb20gJy4vbWFwcy1sYXlvdXQnO1xuaW1wb3J0IEJvdHRvbVdpZGdldEZhY3RvcnkgZnJvbSAnLi9ib3R0b20td2lkZ2V0JztcbmltcG9ydCBNb2RhbENvbnRhaW5lckZhY3RvcnkgZnJvbSAnLi9tb2RhbC1jb250YWluZXInO1xuaW1wb3J0IFBsb3RDb250YWluZXJGYWN0b3J5IGZyb20gJy4vcGxvdC1jb250YWluZXInO1xuaW1wb3J0IE5vdGlmaWNhdGlvblBhbmVsRmFjdG9yeSBmcm9tICcuL25vdGlmaWNhdGlvbi1wYW5lbCc7XG5pbXBvcnQgR2VvQ29kZXJQYW5lbEZhY3RvcnkgZnJvbSAnLi9nZW9jb2Rlci1wYW5lbCc7XG5pbXBvcnQgRG5kQ29udGV4dEZhY3RvcnkgZnJvbSAnLi9kbmQtY29udGV4dCc7XG5cbmltcG9ydCB7XG4gIGZpbHRlck9iamVjdEJ5UHJlZGljYXRlLFxuICBnZW5lcmF0ZUhhc2hJZCxcbiAgdmFsaWRhdGVUb2tlbixcbiAgbWVyZ2VNZXNzYWdlcyxcbiAgb2JzZXJ2ZURpbWVuc2lvbnMsXG4gIHVub2JzZXJ2ZURpbWVuc2lvbnMsXG4gIGhhc1BvcnRhYmxlV2lkdGhcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5cbmltcG9ydCB7dGhlbWUgYXMgYmFzaWNUaGVtZSwgdGhlbWVMVCwgdGhlbWVCUywgYnJlYWtQb2ludFZhbHVlc30gZnJvbSAnQGtlcGxlci5nbC9zdHlsZXMnO1xuaW1wb3J0IHtLZXBsZXJHbFN0YXRlfSBmcm9tICdAa2VwbGVyLmdsL3JlZHVjZXJzJztcbmltcG9ydCB7UHJvdmlkZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvY2xvdWQtcHJvdmlkZXJzJztcblxuLy8gTWF5YmUgd2Ugc2hvdWxkIHRoaW5rIGFib3V0IGV4cG9ydGluZyB0aGlzIG9yIGNyZWF0aW5nIGEgdmFyaWFibGVcbi8vIGFzIHBhcnQgb2YgdGhlIGJhc2UuanMgdGhlbWVcbmNvbnN0IEdsb2JhbFN0eWxlID0gc3R5bGVkLmRpdmBcbiAgZm9udC1mYW1pbHk6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuZm9udEZhbWlseX07XG4gIGZvbnQtd2VpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmZvbnRXZWlnaHR9O1xuICBmb250LXNpemU6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuZm9udFNpemV9O1xuICBsaW5lLWhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5saW5lSGVpZ2h0fTtcblxuICAqLFxuICAqOmJlZm9yZSxcbiAgKjphZnRlciB7XG4gICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICB9XG5cbiAgdWwge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG5cbiAgbGkge1xuICAgIG1hcmdpbjogMDtcbiAgfVxuXG4gIGEge1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5sYWJlbENvbG9yfTtcbiAgfVxuXG4gIC5tYXBib3hnbC1jdHJsIC5tYXBib3hnbC1jdHJsLWxvZ28ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbmA7XG5cbmludGVyZmFjZSBCb3R0b21XaWRnZXRPdXRlclByb3BzIHtcbiAgYWJzb2x1dGU/OiBib29sZWFuO1xufVxuXG5jb25zdCBCb3R0b21XaWRnZXRPdXRlciA9IHN0eWxlZC5kaXY8Qm90dG9tV2lkZ2V0T3V0ZXJQcm9wcz4oXG4gICh7YWJzb2x1dGV9KSA9PiBgXG4gICR7YWJzb2x1dGUgPyAncG9zaXRpb246IGFic29sdXRlOyBib3R0b206IDA7IHJpZ2h0OiAwOycgOiAnJ31cbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7IC8qIHByZXZlbnQgcGFkZGluZyBmcm9tIGJsb2NraW5nIGlucHV0ICovXG4gICYgPiAqIHtcbiAgICAvKiBhbGwgY2hpbGRyZW4gc2hvdWxkIGFsbG93IGlucHV0ICovXG4gICAgcG9pbnRlci1ldmVudHM6IGFsbDtcbiAgfWBcbik7XG5cbmV4cG9ydCBjb25zdCBpc1ZpZXdwb3J0RGlzam9pbnRlZCA9IHByb3BzID0+IHtcbiAgcmV0dXJuIChcbiAgICBwcm9wcy5tYXBTdGF0ZS5pc1NwbGl0ICYmXG4gICAgIXByb3BzLm1hcFN0YXRlLmlzVmlld3BvcnRTeW5jZWQgJiZcbiAgICBwcm9wcy5tYXBTdGF0ZS5zcGxpdE1hcFZpZXdwb3J0cy5sZW5ndGggPiAxXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgbWFwU3RhdGVTZWxlY3RvciA9IChwcm9wczogYW55LCBpbmRleDogbnVtYmVyKTogYW55ID0+IHtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoaW5kZXgpKSB7XG4gICAgLy8gZWl0aGVyIG5vIGluZGV4IGFyZyBvciBhbiBpbnZhbGlkIGluZGV4IHdhcyBwcm92aWRlZFxuICAgIC8vIGl0IGlzIGV4cGVjdGVkIHRvIGJlIGVpdGhlciAwIG9yIDEgd2hlbiBpbiBzcGxpdCBtb2RlXG4gICAgLy8gb25seSB1c2UgdGhlIG1hcFN0YXRlXG4gICAgcmV0dXJuIHByb3BzLm1hcFN0YXRlO1xuICB9XG5cbiAgcmV0dXJuIGlzVmlld3BvcnREaXNqb2ludGVkKHByb3BzKVxuICAgID8gLy8gbWl4IHRvZ2V0aGVyIHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVzIGludGVuZGVkIGZvciB0aGlzIGRpc2pvaW50ZWQgPE1hcENvbnRhaW5lcj4gd2l0aCB0aGUgb3RoZXIgbmVjZXNzYXJ5IG1hcFN0YXRlIHByb3BlcnRpZXNcbiAgICAgIHsuLi5wcm9wcy5tYXBTdGF0ZSwgLi4ucHJvcHMubWFwU3RhdGUuc3BsaXRNYXBWaWV3cG9ydHNbaW5kZXhdfVxuICAgIDogLy8gb3RoZXJ3aXNlIG9ubHkgdXNlIHRoZSBtYXBTdGF0ZVxuICAgICAgcHJvcHMubWFwU3RhdGU7XG59O1xuXG5leHBvcnQgY29uc3QgbWFwRmllbGRzU2VsZWN0b3IgPSAocHJvcHM6IEtlcGxlckdMUHJvcHMsIGluZGV4OiBudW1iZXIgPSAwKSA9PiAoe1xuICBnZXRNYXBib3hSZWY6IHByb3BzLmdldE1hcGJveFJlZixcbiAgbWFwYm94QXBpQWNjZXNzVG9rZW46IHByb3BzLm1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICBtYXBib3hBcGlVcmw6IHByb3BzLm1hcGJveEFwaVVybCA/IHByb3BzLm1hcGJveEFwaVVybCA6IERFRkFVTFRfS0VQTEVSX0dMX1BST1BTLm1hcGJveEFwaVVybCxcbiAgbWFwU3RhdGU6IG1hcFN0YXRlU2VsZWN0b3IocHJvcHMsIGluZGV4KSxcbiAgbWFwU3R5bGU6IHByb3BzLm1hcFN0eWxlLFxuICBvbkRlY2tJbml0aWFsaXplZDogcHJvcHMub25EZWNrSW5pdGlhbGl6ZWQsXG4gIG9uVmlld1N0YXRlQ2hhbmdlOiBwcm9wcy5vblZpZXdTdGF0ZUNoYW5nZSxcbiAgb25Nb3VzZU1vdmU6IHByb3BzLm9uTW91c2VNb3ZlLFxuICBkZWNrR2xQcm9wczogcHJvcHMuZGVja0dsUHJvcHMsXG4gIHVpU3RhdGVBY3Rpb25zOiBwcm9wcy51aVN0YXRlQWN0aW9ucyxcbiAgdmlzU3RhdGVBY3Rpb25zOiBwcm9wcy52aXNTdGF0ZUFjdGlvbnMsXG4gIG1hcFN0YXRlQWN0aW9uczogcHJvcHMubWFwU3RhdGVBY3Rpb25zLFxuXG4gIC8vIHZpc1N0YXRlXG4gIHZpc1N0YXRlOiBwcm9wcy52aXNTdGF0ZSxcblxuICAvLyB1aVN0YXRlXG4gIGFjdGl2ZVNpZGVQYW5lbDogcHJvcHMudWlTdGF0ZS5hY3RpdmVTaWRlUGFuZWwsXG4gIG1hcENvbnRyb2xzOiBwcm9wcy51aVN0YXRlLm1hcENvbnRyb2xzLFxuICByZWFkT25seTogcHJvcHMudWlTdGF0ZS5yZWFkT25seSxcbiAgbG9jYWxlOiBwcm9wcy51aVN0YXRlLmxvY2FsZSxcblxuICAvLyBtYXBTdHlsZVxuICB0b3BNYXBDb250YWluZXJQcm9wczogcHJvcHMudG9wTWFwQ29udGFpbmVyUHJvcHMsXG4gIGJvdHRvbU1hcENvbnRhaW5lclByb3BzOiBwcm9wcy5ib3R0b21NYXBDb250YWluZXJQcm9wc1xufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaXNpYmxlRGF0YXNldHMoZGF0YXNldHMpIHtcbiAgLy8gV2UgZG9uJ3Qgd2FudCBHZW9jb2RlciBkYXRhc2V0IHRvIGJlIHByZXNlbnQgaW4gU2lkZVBhbmVsIGRhdGFzZXQgbGlzdFxuICByZXR1cm4gZmlsdGVyT2JqZWN0QnlQcmVkaWNhdGUoZGF0YXNldHMsIChrZXksIHZhbHVlKSA9PiBrZXkgIT09IEdFT0NPREVSX0RBVEFTRVRfTkFNRSk7XG59XG5cbmV4cG9ydCBjb25zdCBzaWRlUGFuZWxTZWxlY3RvciA9IChwcm9wczogS2VwbGVyR0xQcm9wcywgYXZhaWxhYmxlUHJvdmlkZXJzLCBmaWx0ZXJlZERhdGFzZXRzKSA9PiAoe1xuICBhcHBOYW1lOiBwcm9wcy5hcHBOYW1lID8gcHJvcHMuYXBwTmFtZSA6IERFRkFVTFRfS0VQTEVSX0dMX1BST1BTLmFwcE5hbWUsXG4gIHZlcnNpb246IHByb3BzLnZlcnNpb24gPyBwcm9wcy52ZXJzaW9uIDogREVGQVVMVF9LRVBMRVJfR0xfUFJPUFMudmVyc2lvbixcbiAgYXBwV2Vic2l0ZTogcHJvcHMuYXBwV2Vic2l0ZSxcbiAgbWFwU3R5bGU6IHByb3BzLm1hcFN0eWxlLFxuICBvblNhdmVNYXA6IHByb3BzLm9uU2F2ZU1hcCxcbiAgdWlTdGF0ZTogcHJvcHMudWlTdGF0ZSxcbiAgbWFwU3R5bGVBY3Rpb25zOiBwcm9wcy5tYXBTdHlsZUFjdGlvbnMsXG4gIHZpc1N0YXRlQWN0aW9uczogcHJvcHMudmlzU3RhdGVBY3Rpb25zLFxuICB1aVN0YXRlQWN0aW9uczogcHJvcHMudWlTdGF0ZUFjdGlvbnMsXG4gIG1hcFN0YXRlQWN0aW9uczogcHJvcHMubWFwU3RhdGVBY3Rpb25zLFxuXG4gIGRhdGFzZXRzOiBmaWx0ZXJlZERhdGFzZXRzLFxuICBmaWx0ZXJzOiBwcm9wcy52aXNTdGF0ZS5maWx0ZXJzLFxuICBsYXllcnM6IHByb3BzLnZpc1N0YXRlLmxheWVycyxcbiAgbGF5ZXJPcmRlcjogcHJvcHMudmlzU3RhdGUubGF5ZXJPcmRlcixcbiAgbGF5ZXJDbGFzc2VzOiBwcm9wcy52aXNTdGF0ZS5sYXllckNsYXNzZXMsXG4gIGludGVyYWN0aW9uQ29uZmlnOiBwcm9wcy52aXNTdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgbWFwSW5mbzogcHJvcHMudmlzU3RhdGUubWFwSW5mbyxcbiAgbGF5ZXJCbGVuZGluZzogcHJvcHMudmlzU3RhdGUubGF5ZXJCbGVuZGluZyxcbiAgb3ZlcmxheUJsZW5kaW5nOiBwcm9wcy52aXNTdGF0ZS5vdmVybGF5QmxlbmRpbmcsXG5cbiAgd2lkdGg6IHByb3BzLnNpZGVQYW5lbFdpZHRoID8gcHJvcHMuc2lkZVBhbmVsV2lkdGggOiBERUZBVUxUX0tFUExFUl9HTF9QUk9QUy53aWR0aCxcbiAgYXZhaWxhYmxlUHJvdmlkZXJzLFxuICBtYXBTYXZlZDogcHJvcHMucHJvdmlkZXJTdGF0ZS5tYXBTYXZlZFxufSk7XG5cbmV4cG9ydCBjb25zdCBwbG90Q29udGFpbmVyU2VsZWN0b3IgPSAocHJvcHM6IEtlcGxlckdMUHJvcHMpID0+ICh7XG4gIHdpZHRoOiBwcm9wcy53aWR0aCxcbiAgaGVpZ2h0OiBwcm9wcy5oZWlnaHQsXG4gIGV4cG9ydEltYWdlU2V0dGluZzogcHJvcHMudWlTdGF0ZS5leHBvcnRJbWFnZSxcbiAgbWFwRmllbGRzOiBtYXBGaWVsZHNTZWxlY3Rvcihwcm9wcyksXG4gIGFkZE5vdGlmaWNhdGlvbjogcHJvcHMudWlTdGF0ZUFjdGlvbnMuYWRkTm90aWZpY2F0aW9uLFxuICBzZXRFeHBvcnRJbWFnZVNldHRpbmc6IHByb3BzLnVpU3RhdGVBY3Rpb25zLnNldEV4cG9ydEltYWdlU2V0dGluZyxcbiAgc2V0RXhwb3J0SW1hZ2VEYXRhVXJpOiBwcm9wcy51aVN0YXRlQWN0aW9ucy5zZXRFeHBvcnRJbWFnZURhdGFVcmksXG4gIHNldEV4cG9ydEltYWdlRXJyb3I6IHByb3BzLnVpU3RhdGVBY3Rpb25zLnNldEV4cG9ydEltYWdlRXJyb3IsXG4gIHNwbGl0TWFwczogcHJvcHMudmlzU3RhdGUuc3BsaXRNYXBzXG59KTtcblxuZXhwb3J0IGNvbnN0IGlzU3BsaXRTZWxlY3RvciA9IChwcm9wczogS2VwbGVyR0xQcm9wcykgPT5cbiAgcHJvcHMudmlzU3RhdGUuc3BsaXRNYXBzICYmIHByb3BzLnZpc1N0YXRlLnNwbGl0TWFwcy5sZW5ndGggPiAxO1xuXG5leHBvcnQgY29uc3QgYm90dG9tV2lkZ2V0U2VsZWN0b3IgPSAocHJvcHM6IEtlcGxlckdMUHJvcHMsIHRoZW1lKSA9PiAoe1xuICBmaWx0ZXJzOiBwcm9wcy52aXNTdGF0ZS5maWx0ZXJzLFxuICBkYXRhc2V0czogcHJvcHMudmlzU3RhdGUuZGF0YXNldHMsXG4gIHVpU3RhdGU6IHByb3BzLnVpU3RhdGUsXG4gIGxheWVyczogcHJvcHMudmlzU3RhdGUubGF5ZXJzLFxuICBhbmltYXRpb25Db25maWc6IHByb3BzLnZpc1N0YXRlLmFuaW1hdGlvbkNvbmZpZyxcbiAgdmlzU3RhdGVBY3Rpb25zOiBwcm9wcy52aXNTdGF0ZUFjdGlvbnMsXG4gIHRvZ2dsZU1vZGFsOiBwcm9wcy51aVN0YXRlQWN0aW9ucy50b2dnbGVNb2RhbCxcbiAgc2lkZVBhbmVsV2lkdGg6IHByb3BzLnVpU3RhdGUucmVhZE9ubHkgPyAwIDogcHJvcHMuc2lkZVBhbmVsV2lkdGggKyB0aGVtZS5zaWRlUGFuZWwubWFyZ2luLmxlZnRcbn0pO1xuXG5leHBvcnQgY29uc3QgbW9kYWxDb250YWluZXJTZWxlY3RvciA9IChwcm9wczogS2VwbGVyR0xQcm9wcywgcm9vdE5vZGUpID0+ICh7XG4gIGFwcE5hbWU6IHByb3BzLmFwcE5hbWUgPyBwcm9wcy5hcHBOYW1lIDogREVGQVVMVF9LRVBMRVJfR0xfUFJPUFMuYXBwTmFtZSxcbiAgbWFwU3R5bGU6IHByb3BzLm1hcFN0eWxlLFxuICB2aXNTdGF0ZTogcHJvcHMudmlzU3RhdGUsXG4gIG1hcFN0YXRlOiBwcm9wcy5tYXBTdGF0ZSxcbiAgdWlTdGF0ZTogcHJvcHMudWlTdGF0ZSxcbiAgcHJvdmlkZXJTdGF0ZTogcHJvcHMucHJvdmlkZXJTdGF0ZSxcblxuICBtYXBib3hBcGlBY2Nlc3NUb2tlbjogcHJvcHMubWFwYm94QXBpQWNjZXNzVG9rZW4sXG4gIG1hcGJveEFwaVVybDogcHJvcHMubWFwYm94QXBpVXJsLFxuICB2aXNTdGF0ZUFjdGlvbnM6IHByb3BzLnZpc1N0YXRlQWN0aW9ucyxcbiAgdWlTdGF0ZUFjdGlvbnM6IHByb3BzLnVpU3RhdGVBY3Rpb25zLFxuICBtYXBTdHlsZUFjdGlvbnM6IHByb3BzLm1hcFN0eWxlQWN0aW9ucyxcbiAgcHJvdmlkZXJBY3Rpb25zOiBwcm9wcy5wcm92aWRlckFjdGlvbnMsXG5cbiAgcm9vdE5vZGUsXG4gIC8vIFVzZXIgZGVmaW5lZCBjbG91ZCBwcm92aWRlciBwcm9wc1xuICBjbG91ZFByb3ZpZGVyczogcHJvcHMuY2xvdWRQcm92aWRlcnNcbiAgICA/IHByb3BzLmNsb3VkUHJvdmlkZXJzXG4gICAgOiBERUZBVUxUX0tFUExFUl9HTF9QUk9QUy5jbG91ZFByb3ZpZGVycyxcbiAgb25FeHBvcnRUb0Nsb3VkU3VjY2VzczogcHJvcHMub25FeHBvcnRUb0Nsb3VkU3VjY2VzcyxcbiAgb25Mb2FkQ2xvdWRNYXBTdWNjZXNzOiBwcm9wcy5vbkxvYWRDbG91ZE1hcFN1Y2Nlc3MsXG4gIG9uTG9hZENsb3VkTWFwRXJyb3I6IHByb3BzLm9uTG9hZENsb3VkTWFwRXJyb3IsXG4gIG9uRXhwb3J0VG9DbG91ZEVycm9yOiBwcm9wcy5vbkV4cG9ydFRvQ2xvdWRFcnJvclxufSk7XG5cbmV4cG9ydCBjb25zdCBnZW9Db2RlclBhbmVsU2VsZWN0b3IgPSAoXG4gIHByb3BzOiBLZXBsZXJHTFByb3BzLFxuICBkaW1lbnNpb25zOiB7d2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXJ9XG4pID0+ICh7XG4gIGlzR2VvY29kZXJFbmFibGVkOiBwcm9wcy52aXNTdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZy5nZW9jb2Rlci5lbmFibGVkLFxuICBtYXBib3hBcGlBY2Nlc3NUb2tlbjogcHJvcHMubWFwYm94QXBpQWNjZXNzVG9rZW4sXG4gIG1hcFN0YXRlOiBwcm9wcy5tYXBTdGF0ZSxcbiAgdWlTdGF0ZTogcHJvcHMudWlTdGF0ZSxcbiAgbGF5ZXJPcmRlcjogcHJvcHMudmlzU3RhdGUubGF5ZXJPcmRlcixcbiAgdXBkYXRlVmlzRGF0YTogcHJvcHMudmlzU3RhdGVBY3Rpb25zLnVwZGF0ZVZpc0RhdGEsXG4gIHJlbW92ZURhdGFzZXQ6IHByb3BzLnZpc1N0YXRlQWN0aW9ucy5yZW1vdmVEYXRhc2V0LFxuICB1cGRhdGVNYXA6IHByb3BzLm1hcFN0YXRlQWN0aW9ucy51cGRhdGVNYXAsXG4gIGFwcFdpZHRoOiBkaW1lbnNpb25zLndpZHRoXG59KTtcblxuZXhwb3J0IGNvbnN0IG5vdGlmaWNhdGlvblBhbmVsU2VsZWN0b3IgPSAocHJvcHM6IEtlcGxlckdMUHJvcHMpID0+ICh7XG4gIHJlbW92ZU5vdGlmaWNhdGlvbjogcHJvcHMudWlTdGF0ZUFjdGlvbnMucmVtb3ZlTm90aWZpY2F0aW9uLFxuICBub3RpZmljYXRpb25zOiBwcm9wcy51aVN0YXRlLm5vdGlmaWNhdGlvbnNcbn0pO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9LRVBMRVJfR0xfUFJPUFMgPSB7XG4gIG1hcFN0eWxlczogW10sXG4gIG1hcFN0eWxlc1JlcGxhY2VEZWZhdWx0OiBmYWxzZSxcbiAgbWFwYm94QXBpVXJsOiBERUZBVUxUX01BUEJPWF9BUElfVVJMLFxuICB3aWR0aDogODAwLFxuICBoZWlnaHQ6IDgwMCxcbiAgYXBwTmFtZTogS0VQTEVSX0dMX05BTUUsXG4gIHZlcnNpb246IEtFUExFUl9HTF9WRVJTSU9OLFxuICBzaWRlUGFuZWxXaWR0aDogRElNRU5TSU9OUy5zaWRlUGFuZWwud2lkdGgsXG4gIHRoZW1lOiB7fSxcbiAgY2xvdWRQcm92aWRlcnM6IFtdLFxuICByZWFkT25seTogZmFsc2UsXG4gIGZlYXR1cmVGbGFnczoge31cbn07XG5cbnR5cGUgS2VwbGVyR0xCYXNpY1Byb3BzID0ge1xuICBtYXBib3hBcGlBY2Nlc3NUb2tlbjogc3RyaW5nO1xuICBtYXBib3hBcGlVcmw/OiBzdHJpbmc7XG4gIGlkOiBzdHJpbmc7XG4gIHdpZHRoPzogbnVtYmVyO1xuICBoZWlnaHQ/OiBudW1iZXI7XG5cbiAgYXBwV2Vic2l0ZT86IGFueTtcbiAgb25TYXZlTWFwPzogKCkgPT4gdm9pZDtcbiAgb25WaWV3U3RhdGVDaGFuZ2U/OiAodmlld1N0YXRlOiBWaWV3cG9ydCkgPT4gdm9pZDtcbiAgb25EZWNrSW5pdGlhbGl6ZWQ/OiAoKSA9PiB2b2lkO1xuICBvbktlcGxlckdsSW5pdGlhbGl6ZWQ/OiAoKSA9PiB2b2lkO1xuICBnZXRNYXBib3hSZWY/OiAoKSA9PiBSZWFjdC5SZWZPYmplY3Q8YW55PjtcbiAgbWFwU3R5bGVzPzoge2lkOiBzdHJpbmc7IHN0eWxlPzogb2JqZWN0fVtdO1xuICBtYXBTdHlsZXNSZXBsYWNlRGVmYXVsdD86IGJvb2xlYW47XG4gIGFwcE5hbWU/OiBzdHJpbmc7XG4gIHZlcnNpb24/OiBzdHJpbmc7XG4gIHNpZGVQYW5lbFdpZHRoPzogbnVtYmVyO1xuICB0aGVtZT86IG9iamVjdDtcbiAgY2xvdWRQcm92aWRlcnM/OiBQcm92aWRlcltdO1xuICBkZWNrR2xQcm9wcz86IG9iamVjdDtcbiAgb25Mb2FkQ2xvdWRNYXBTdWNjZXNzPzogT25TdWNjZXNzQ2FsbEJhY2s7XG4gIG9uTG9hZENsb3VkTWFwRXJyb3I/OiBPbkVycm9yQ2FsbEJhY2s7XG4gIG9uTW91c2VNb3ZlPzogKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50ICYge2xuZ0xhdD86IFtudW1iZXIsIG51bWJlcl19KSA9PiB2b2lkO1xuICBvbkV4cG9ydFRvQ2xvdWRTdWNjZXNzPzogT25TdWNjZXNzQ2FsbEJhY2s7XG4gIG9uRXhwb3J0VG9DbG91ZEVycm9yPzogT25FcnJvckNhbGxCYWNrO1xuICByZWFkT25seT86IGJvb2xlYW47XG4gIGZlYXR1cmVGbGFncz86IEZlYXR1cmVGbGFncztcblxuICBsb2NhbGVNZXNzYWdlcz86IHtba2V5OiBzdHJpbmddOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfX07XG4gIGRpc3BhdGNoOiBEaXNwYXRjaDxhbnk+O1xuXG4gIHRvcE1hcENvbnRhaW5lclByb3BzPzogb2JqZWN0O1xuICBib3R0b21NYXBDb250YWluZXJQcm9wcz86IG9iamVjdDtcbn07XG5cbnR5cGUgS2VwbGVyR0xQcm9wcyA9IEtlcGxlckdsU3RhdGUgJiBLZXBsZXJHbEFjdGlvbnMgJiBLZXBsZXJHTEJhc2ljUHJvcHM7XG50eXBlIEtlcGxlckdMQ29tcFN0YXRlID0ge1xuICBkaW1lbnNpb25zOiB7d2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXJ9IHwgbnVsbDtcbn07XG5cbktlcGxlckdsRmFjdG9yeS5kZXBzID0gW1xuICBCb3R0b21XaWRnZXRGYWN0b3J5LFxuICBHZW9Db2RlclBhbmVsRmFjdG9yeSxcbiAgTWFwQ29udGFpbmVyRmFjdG9yeSxcbiAgTWFwc0xheW91dEZhY3RvcnksXG4gIE1vZGFsQ29udGFpbmVyRmFjdG9yeSxcbiAgU2lkZVBhbmVsRmFjdG9yeSxcbiAgUGxvdENvbnRhaW5lckZhY3RvcnksXG4gIE5vdGlmaWNhdGlvblBhbmVsRmFjdG9yeSxcbiAgRG5kQ29udGV4dEZhY3Rvcnlcbl07XG5cbmZ1bmN0aW9uIEtlcGxlckdsRmFjdG9yeShcbiAgQm90dG9tV2lkZ2V0OiBSZXR1cm5UeXBlPHR5cGVvZiBCb3R0b21XaWRnZXRGYWN0b3J5PixcbiAgR2VvQ29kZXJQYW5lbDogUmV0dXJuVHlwZTx0eXBlb2YgR2VvQ29kZXJQYW5lbEZhY3Rvcnk+LFxuICBNYXBDb250YWluZXI6IFJldHVyblR5cGU8dHlwZW9mIE1hcENvbnRhaW5lckZhY3Rvcnk+LFxuICBNYXBzTGF5b3V0OiBSZXR1cm5UeXBlPHR5cGVvZiBNYXBzTGF5b3V0RmFjdG9yeT4sXG4gIE1vZGFsQ29udGFpbmVyOiBSZXR1cm5UeXBlPHR5cGVvZiBNb2RhbENvbnRhaW5lckZhY3Rvcnk+LFxuICBTaWRlUGFuZWw6IFJldHVyblR5cGU8dHlwZW9mIFNpZGVQYW5lbEZhY3Rvcnk+LFxuICBQbG90Q29udGFpbmVyOiBSZXR1cm5UeXBlPHR5cGVvZiBQbG90Q29udGFpbmVyRmFjdG9yeT4sXG4gIE5vdGlmaWNhdGlvblBhbmVsOiBSZXR1cm5UeXBlPHR5cGVvZiBOb3RpZmljYXRpb25QYW5lbEZhY3Rvcnk+LFxuICBEbmRDb250ZXh0OiBSZXR1cm5UeXBlPHR5cGVvZiBEbmRDb250ZXh0RmFjdG9yeT5cbik6IFJlYWN0LkNvbXBvbmVudFR5cGU8S2VwbGVyR0xCYXNpY1Byb3BzICYge3NlbGVjdG9yOiAoLi4uYXJnczogYW55W10pID0+IEtlcGxlckdsU3RhdGV9PiB7XG4gIC8qKiBAdHlwZWRlZiB7aW1wb3J0KCcuL2tlcGxlci1nbCcpLlVuY29ubmVjdGVkS2VwbGVyR2xQcm9wc30gS2VwbGVyR2xQcm9wcyAqL1xuICAvKiogQGF1Z21lbnRzIFJlYWN0LkNvbXBvbmVudDxLZXBsZXJHbFByb3BzPiAqL1xuICBjbGFzcyBLZXBsZXJHTCBleHRlbmRzIENvbXBvbmVudDxcbiAgICBLZXBsZXJHTFByb3BzICYge3NlbGVjdG9yOiAoLi4uYXJnczogYW55W10pID0+IEtlcGxlckdsU3RhdGV9LFxuICAgIEtlcGxlckdMQ29tcFN0YXRlXG4gID4ge1xuICAgIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSBERUZBVUxUX0tFUExFUl9HTF9QUk9QUztcblxuICAgIHN0YXRlOiBLZXBsZXJHTENvbXBTdGF0ZSA9IHtcbiAgICAgIGRpbWVuc2lvbnM6IG51bGxcbiAgICB9O1xuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB0aGlzLl92YWxpZGF0ZU1hcGJveFRva2VuKCk7XG4gICAgICB0aGlzLl9sb2FkTWFwU3R5bGUoKTtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vbktlcGxlckdsSW5pdGlhbGl6ZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbktlcGxlckdsSW5pdGlhbGl6ZWQoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnJvb3QuY3VycmVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgIG9ic2VydmVEaW1lbnNpb25zKHRoaXMucm9vdC5jdXJyZW50LCB0aGlzLl9oYW5kbGVSZXNpemUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgaWYgKHRoaXMucm9vdC5jdXJyZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgdW5vYnNlcnZlRGltZW5zaW9ucyh0aGlzLnJvb3QuY3VycmVudCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgX2hhbmRsZVJlc2l6ZSA9IGRpbWVuc2lvbnMgPT4ge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7ZGltZW5zaW9uc30pO1xuICAgIH07XG5cbiAgICBzdGF0aWMgY29udGV4dFR5cGUgPSBSb290Q29udGV4dDtcblxuICAgIHJvb3QgPSBjcmVhdGVSZWY8SFRNTERpdkVsZW1lbnQ+KCk7XG4gICAgYm90dG9tV2lkZ2V0UmVmID0gY3JlYXRlUmVmPEhUTUxEaXZFbGVtZW50PigpO1xuXG4gICAgLyogc2VsZWN0b3JzICovXG4gICAgdGhlbWVTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLnRoZW1lO1xuICAgIGF2YWlsYWJsZVRoZW1lU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3Rvcih0aGlzLnRoZW1lU2VsZWN0b3IsIHRoZW1lID0+XG4gICAgICB0eXBlb2YgdGhlbWUgPT09ICdvYmplY3QnXG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uYmFzaWNUaGVtZSxcbiAgICAgICAgICAgIC4uLnRoZW1lXG4gICAgICAgICAgfVxuICAgICAgICA6IHRoZW1lID09PSBUSEVNRS5saWdodFxuICAgICAgICA/IHRoZW1lTFRcbiAgICAgICAgOiB0aGVtZSA9PT0gVEhFTUUuYmFzZVxuICAgICAgICA/IHRoZW1lQlNcbiAgICAgICAgOiB0aGVtZVxuICAgICk7XG5cbiAgICBkYXRhc2V0c1NlbGVjdG9yID0gcHJvcHMgPT4gcHJvcHMudmlzU3RhdGUuZGF0YXNldHM7XG4gICAgZmlsdGVyZWREYXRhc2V0c1NlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IodGhpcy5kYXRhc2V0c1NlbGVjdG9yLCBnZXRWaXNpYmxlRGF0YXNldHMpO1xuXG4gICAgYXZhaWxhYmxlUHJvdmlkZXJzID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICAocHJvcHM6IEtlcGxlckdMUHJvcHMpID0+IHByb3BzLmNsb3VkUHJvdmlkZXJzLFxuICAgICAgcHJvdmlkZXJzID0+XG4gICAgICAgIEFycmF5LmlzQXJyYXkocHJvdmlkZXJzKSAmJiBwcm92aWRlcnMubGVuZ3RoXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGhhc1N0b3JhZ2U6IHByb3ZpZGVycy5zb21lKHAgPT4gcC5oYXNQcml2YXRlU3RvcmFnZSgpKSxcbiAgICAgICAgICAgICAgaGFzU2hhcmU6IHByb3ZpZGVycy5zb21lKHAgPT4gcC5oYXNTaGFyaW5nVXJsKCkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7fVxuICAgICk7XG5cbiAgICBsb2NhbGVNZXNzYWdlc1NlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICAocHJvcHM6IEtlcGxlckdMUHJvcHMpID0+IHByb3BzLmxvY2FsZU1lc3NhZ2VzLFxuICAgICAgY3VzdG9tTWVzc2FnZXMgPT4gKGN1c3RvbU1lc3NhZ2VzID8gbWVyZ2VNZXNzYWdlcyhtZXNzYWdlcywgY3VzdG9tTWVzc2FnZXMpIDogbWVzc2FnZXMpXG4gICAgKTtcblxuICAgIC8qIHByaXZhdGUgbWV0aG9kcyAqL1xuICAgIF92YWxpZGF0ZU1hcGJveFRva2VuKCkge1xuICAgICAgY29uc3Qge21hcGJveEFwaUFjY2Vzc1Rva2VufSA9IHRoaXMucHJvcHM7XG4gICAgICBpZiAoIXZhbGlkYXRlVG9rZW4obWFwYm94QXBpQWNjZXNzVG9rZW4pKSB7XG4gICAgICAgIENvbnNvbGUud2FybihNSVNTSU5HX01BUEJPWF9UT0tFTik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgX2xvYWRNYXBTdHlsZSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGRlZmF1bHRTdHlsZXMgPSBPYmplY3QudmFsdWVzKHRoaXMucHJvcHMubWFwU3R5bGUubWFwU3R5bGVzKTtcbiAgICAgIC8vIGFkZCBpZCB0byBjdXN0b20gbWFwIHN0eWxlcyBpZiBub3QgZ2l2ZW5cbiAgICAgIGNvbnN0IGN1c3RvbVN0eWxlcyA9ICh0aGlzLnByb3BzLm1hcFN0eWxlcyB8fCBbXSkubWFwKG1zID0+ICh7XG4gICAgICAgIC4uLm1zLFxuICAgICAgICBpZDogbXMuaWQgfHwgZ2VuZXJhdGVIYXNoSWQoKVxuICAgICAgfSkpO1xuXG4gICAgICBjb25zdCBhbGxTdHlsZXMgPSBbLi4uY3VzdG9tU3R5bGVzLCAuLi5kZWZhdWx0U3R5bGVzXS5yZWR1Y2UoKGFjY3UsIHN0eWxlKSA9PiB7XG4gICAgICAgIGFjY3Vbc3R5bGUuaWRdID0gc3R5bGU7XG4gICAgICAgIHJldHVybiBhY2N1O1xuICAgICAgfSwge30pO1xuXG4gICAgICB0aGlzLnByb3BzLm1hcFN0eWxlQWN0aW9ucy5sb2FkTWFwU3R5bGVzKGFsbFN0eWxlcyk7XG4gICAgfTtcblxuICAgIF9kZWxldGVNYXBMYWJlbHMgPSAoY29udGFpbmVySWQsIGxheWVySWQpID0+IHtcbiAgICAgIHRoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLnRvZ2dsZUxheWVyRm9yTWFwKGNvbnRhaW5lcklkLCBsYXllcklkKTtcbiAgICB9O1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGlkID0gJ21hcCcsXG4gICAgICAgIHdpZHRoID0gREVGQVVMVF9LRVBMRVJfR0xfUFJPUFMud2lkdGgsXG4gICAgICAgIGhlaWdodCA9IERFRkFVTFRfS0VQTEVSX0dMX1BST1BTLmhlaWdodCxcbiAgICAgICAgdWlTdGF0ZSxcbiAgICAgICAgdmlzU3RhdGUsXG4gICAgICAgIC8vIHJlYWRPbmx5IG92ZXJyaWRlXG4gICAgICAgIHJlYWRPbmx5LFxuXG4gICAgICAgIC8vIGZlYXR1cmVzXG4gICAgICAgIGZlYXR1cmVGbGFnc1xuICAgICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSB0aGlzLnN0YXRlLmRpbWVuc2lvbnMgfHwge3dpZHRoLCBoZWlnaHR9O1xuICAgICAgY29uc3Qge1xuICAgICAgICBzcGxpdE1hcHMsIC8vIHRoaXMgd2lsbCBzdG9yZSBzdXBwb3J0IGZvciBzcGxpdCBtYXAgdmlldyBpcyBuZWNlc3NhcnlcbiAgICAgICAgaW50ZXJhY3Rpb25Db25maWdcbiAgICAgIH0gPSB2aXNTdGF0ZTtcblxuICAgICAgY29uc3QgaXNTcGxpdCA9IGlzU3BsaXRTZWxlY3Rvcih0aGlzLnByb3BzKTtcbiAgICAgIGNvbnN0IHRoZW1lID0gdGhpcy5hdmFpbGFibGVUaGVtZVNlbGVjdG9yKHRoaXMucHJvcHMpO1xuICAgICAgY29uc3QgbG9jYWxlTWVzc2FnZXMgPSB0aGlzLmxvY2FsZU1lc3NhZ2VzU2VsZWN0b3IodGhpcy5wcm9wcyk7XG4gICAgICBjb25zdCBpc0V4cG9ydGluZ0ltYWdlID0gdWlTdGF0ZS5leHBvcnRJbWFnZS5leHBvcnRpbmc7XG4gICAgICBjb25zdCBhdmFpbGFibGVQcm92aWRlcnMgPSB0aGlzLmF2YWlsYWJsZVByb3ZpZGVycyh0aGlzLnByb3BzKTtcblxuICAgICAgY29uc3QgZmlsdGVyZWREYXRhc2V0cyA9IHRoaXMuZmlsdGVyZWREYXRhc2V0c1NlbGVjdG9yKHRoaXMucHJvcHMpO1xuICAgICAgY29uc3Qgc2lkZUZpZWxkcyA9IHNpZGVQYW5lbFNlbGVjdG9yKHRoaXMucHJvcHMsIGF2YWlsYWJsZVByb3ZpZGVycywgZmlsdGVyZWREYXRhc2V0cyk7XG4gICAgICBjb25zdCBwbG90Q29udGFpbmVyRmllbGRzID0gcGxvdENvbnRhaW5lclNlbGVjdG9yKHRoaXMucHJvcHMpO1xuICAgICAgY29uc3QgYm90dG9tV2lkZ2V0RmllbGRzID0gYm90dG9tV2lkZ2V0U2VsZWN0b3IodGhpcy5wcm9wcywgdGhlbWUpO1xuICAgICAgY29uc3QgbW9kYWxDb250YWluZXJGaWVsZHMgPSBtb2RhbENvbnRhaW5lclNlbGVjdG9yKHRoaXMucHJvcHMsIHRoaXMucm9vdC5jdXJyZW50KTtcbiAgICAgIGNvbnN0IGdlb0NvZGVyUGFuZWxGaWVsZHMgPSBnZW9Db2RlclBhbmVsU2VsZWN0b3IodGhpcy5wcm9wcywgZGltZW5zaW9ucyk7XG4gICAgICBjb25zdCBub3RpZmljYXRpb25QYW5lbEZpZWxkcyA9IG5vdGlmaWNhdGlvblBhbmVsU2VsZWN0b3IodGhpcy5wcm9wcyk7XG4gICAgICBjb25zdCBtYXBDb250YWluZXJzID0gIWlzU3BsaXRcbiAgICAgICAgPyBbXG4gICAgICAgICAgICA8TWFwQ29udGFpbmVyXG4gICAgICAgICAgICAgIHByaW1hcnk9e3RydWV9XG4gICAgICAgICAgICAgIGtleT17MH1cbiAgICAgICAgICAgICAgaW5kZXg9ezB9XG4gICAgICAgICAgICAgIHsuLi5tYXBGaWVsZHNTZWxlY3Rvcih0aGlzLnByb3BzKX1cbiAgICAgICAgICAgICAgY29udGFpbmVySWQ9ezB9XG4gICAgICAgICAgICAgIGRlbGV0ZU1hcExhYmVscz17dGhpcy5fZGVsZXRlTWFwTGFiZWxzfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICBdXG4gICAgICAgIDogc3BsaXRNYXBzLm1hcCgoc2V0dGluZ3MsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICA8TWFwQ29udGFpbmVyXG4gICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAgICAgICAgcHJpbWFyeT17aW5kZXggPT09IDF9XG4gICAgICAgICAgICAgIHsuLi5tYXBGaWVsZHNTZWxlY3Rvcih0aGlzLnByb3BzLCBpbmRleCl9XG4gICAgICAgICAgICAgIGNvbnRhaW5lcklkPXtpbmRleH1cbiAgICAgICAgICAgICAgZGVsZXRlTWFwTGFiZWxzPXt0aGlzLl9kZWxldGVNYXBMYWJlbHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Um9vdENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3RoaXMucm9vdH0+XG4gICAgICAgICAgPEZlYXR1cmVGbGFnc0NvbnRleHRQcm92aWRlciBmZWF0dXJlRmxhZ3M9e2ZlYXR1cmVGbGFnc30+XG4gICAgICAgICAgICA8SW50bFByb3ZpZGVyIGxvY2FsZT17dWlTdGF0ZS5sb2NhbGV9IG1lc3NhZ2VzPXtsb2NhbGVNZXNzYWdlc1t1aVN0YXRlLmxvY2FsZV19PlxuICAgICAgICAgICAgICA8VGhlbWVQcm92aWRlciB0aGVtZT17dGhlbWV9PlxuICAgICAgICAgICAgICAgIDxHbG9iYWxTdHlsZVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwia2VwbGVyLWdsXCJcbiAgICAgICAgICAgICAgICAgIGlkPXtga2VwbGVyLWdsX18ke2lkfWB9XG4gICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGAke3dpZHRofXB4YCxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBgJHtoZWlnaHR9cHhgXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgcmVmPXt0aGlzLnJvb3R9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPE5vdGlmaWNhdGlvblBhbmVsIHsuLi5ub3RpZmljYXRpb25QYW5lbEZpZWxkc30gLz5cbiAgICAgICAgICAgICAgICAgIDxEbmRDb250ZXh0PlxuICAgICAgICAgICAgICAgICAgICB7IXVpU3RhdGUucmVhZE9ubHkgJiYgIXJlYWRPbmx5ICYmIDxTaWRlUGFuZWwgey4uLnNpZGVGaWVsZHN9IC8+fVxuICAgICAgICAgICAgICAgICAgICA8TWFwc0xheW91dCBjbGFzc05hbWU9XCJtYXBzXCIgbWFwU3RhdGU9e3RoaXMucHJvcHMubWFwU3RhdGV9PlxuICAgICAgICAgICAgICAgICAgICAgIHttYXBDb250YWluZXJzfVxuICAgICAgICAgICAgICAgICAgICA8L01hcHNMYXlvdXQ+XG4gICAgICAgICAgICAgICAgICA8L0RuZENvbnRleHQ+XG4gICAgICAgICAgICAgICAgICB7aXNFeHBvcnRpbmdJbWFnZSAmJiA8UGxvdENvbnRhaW5lciB7Li4ucGxvdENvbnRhaW5lckZpZWxkc30gLz59XG4gICAgICAgICAgICAgICAgICB7LyogMSBnZW9jb2Rlcjogc2luZ2xlIG1vZGUgT1Igc3BsaXQgbW9kZSBhbmQgc3luY2VkIHZpZXdwb3J0cyAqL31cbiAgICAgICAgICAgICAgICAgIHshaXNWaWV3cG9ydERpc2pvaW50ZWQodGhpcy5wcm9wcykgJiYgaW50ZXJhY3Rpb25Db25maWcuZ2VvY29kZXIuZW5hYmxlZCAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxHZW9Db2RlclBhbmVsIHsuLi5nZW9Db2RlclBhbmVsRmllbGRzfSBpbmRleD17MH0gdW5zeW5jZWRWaWV3cG9ydHM9e2ZhbHNlfSAvPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIHsvKiAyIGdlb2NvZGVyczogc3BsaXQgbW9kZSBhbmQgdW5zeW5jZWQgdmlld3BvcnRzICovfVxuICAgICAgICAgICAgICAgICAge2lzVmlld3BvcnREaXNqb2ludGVkKHRoaXMucHJvcHMpICYmXG4gICAgICAgICAgICAgICAgICAgIGludGVyYWN0aW9uQ29uZmlnLmdlb2NvZGVyLmVuYWJsZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgbWFwQ29udGFpbmVycy5tYXAoKF9tYXBDb250YWluZXIsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgPEdlb0NvZGVyUGFuZWxcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgICAgICAgICAgICB7Li4uZ2VvQ29kZXJQYW5lbEZpZWxkc31cbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHVuc3luY2VkVmlld3BvcnRzPXt0cnVlfVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgPEJvdHRvbVdpZGdldE91dGVyIGFic29sdXRlPXshaGFzUG9ydGFibGVXaWR0aChicmVha1BvaW50VmFsdWVzKX0+XG4gICAgICAgICAgICAgICAgICAgIDxCb3R0b21XaWRnZXRcbiAgICAgICAgICAgICAgICAgICAgICByb290UmVmPXt0aGlzLmJvdHRvbVdpZGdldFJlZn1cbiAgICAgICAgICAgICAgICAgICAgICB7Li4uYm90dG9tV2lkZ2V0RmllbGRzfVxuICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lclc9e2RpbWVuc2lvbnMud2lkdGh9XG4gICAgICAgICAgICAgICAgICAgICAgdGhlbWU9e3RoZW1lfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9Cb3R0b21XaWRnZXRPdXRlcj5cbiAgICAgICAgICAgICAgICAgIDxNb2RhbENvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICB7Li4ubW9kYWxDb250YWluZXJGaWVsZHN9XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lclc9e2RpbWVuc2lvbnMud2lkdGh9XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckg9e2RpbWVuc2lvbnMuaGVpZ2h0fVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L0dsb2JhbFN0eWxlPlxuICAgICAgICAgICAgICA8L1RoZW1lUHJvdmlkZXI+XG4gICAgICAgICAgICA8L0ludGxQcm92aWRlcj5cbiAgICAgICAgICA8L0ZlYXR1cmVGbGFnc0NvbnRleHRQcm92aWRlcj5cbiAgICAgICAgPC9Sb290Q29udGV4dC5Qcm92aWRlcj5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGtlcGxlckdsQ29ubmVjdChcbiAgICBtYXBTdGF0ZVRvUHJvcHMsXG4gICAgbWFrZU1hcERpc3BhdGNoVG9Qcm9wc1xuICApKHdpdGhUaGVtZShLZXBsZXJHTCkpIGFzIFJldHVyblR5cGU8dHlwZW9mIEtlcGxlckdsRmFjdG9yeT47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXBTdGF0ZVRvUHJvcHMoc3RhdGU6IEtlcGxlckdsU3RhdGUsIHByb3BzOiBLZXBsZXJHTFByb3BzKSB7XG4gIHJldHVybiB7XG4gICAgLi4ucHJvcHMsXG4gICAgdmlzU3RhdGU6IHN0YXRlLnZpc1N0YXRlLFxuICAgIG1hcFN0eWxlOiBzdGF0ZS5tYXBTdHlsZSxcbiAgICBtYXBTdGF0ZTogc3RhdGUubWFwU3RhdGUsXG4gICAgdWlTdGF0ZTogc3RhdGUudWlTdGF0ZSxcbiAgICBwcm92aWRlclN0YXRlOiBzdGF0ZS5wcm92aWRlclN0YXRlXG4gIH07XG59XG5cbmNvbnN0IGRlZmF1bHRVc2VyQWN0aW9ucyA9IHt9O1xuXG5jb25zdCBnZXREaXNwYXRjaCA9IChkaXNwYXRjaCwgcHJvcHMpID0+IGRpc3BhdGNoO1xuY29uc3QgZ2V0VXNlckFjdGlvbnMgPSAoZGlzcGF0Y2gsIHByb3BzKSA9PiBwcm9wcy5hY3Rpb25zIHx8IGRlZmF1bHRVc2VyQWN0aW9ucztcblxuLyoqIEB0eXBlIHsoKSA9PiBpbXBvcnQoJ3Jlc2VsZWN0JykuT3V0cHV0UGFyYW1ldHJpY1NlbGVjdG9yPGFueSwgYW55LCBhbnksIGFueT59ICovXG5leHBvcnQgZnVuY3Rpb24gbWFrZUdldEFjdGlvbkNyZWF0b3JzKCkge1xuICByZXR1cm4gY3JlYXRlU2VsZWN0b3IoW2dldERpc3BhdGNoLCBnZXRVc2VyQWN0aW9uc10sIChkaXNwYXRjaCwgdXNlckFjdGlvbnMpID0+IHtcbiAgICBjb25zdCBbdmlzU3RhdGVBY3Rpb25zLCBtYXBTdGF0ZUFjdGlvbnMsIG1hcFN0eWxlQWN0aW9ucywgdWlTdGF0ZUFjdGlvbnMsIHByb3ZpZGVyQWN0aW9uc10gPSBbXG4gICAgICBWaXNTdGF0ZUFjdGlvbnMsXG4gICAgICBNYXBTdGF0ZUFjdGlvbnMsXG4gICAgICBNYXBTdHlsZUFjdGlvbnMsXG4gICAgICBVSVN0YXRlQWN0aW9ucyxcbiAgICAgIFByb3ZpZGVyQWN0aW9uc1xuICAgIF0ubWFwKGFjdGlvbnMgPT4gYmluZEFjdGlvbkNyZWF0b3JzKG1lcmdlQWN0aW9ucyhhY3Rpb25zLCB1c2VyQWN0aW9ucyksIGRpc3BhdGNoKSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdmlzU3RhdGVBY3Rpb25zLFxuICAgICAgbWFwU3RhdGVBY3Rpb25zLFxuICAgICAgbWFwU3R5bGVBY3Rpb25zLFxuICAgICAgdWlTdGF0ZUFjdGlvbnMsXG4gICAgICBwcm92aWRlckFjdGlvbnMsXG4gICAgICBkaXNwYXRjaFxuICAgIH07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBtYWtlTWFwRGlzcGF0Y2hUb1Byb3BzKCkge1xuICBjb25zdCBnZXRBY3Rpb25DcmVhdG9ycyA9IG1ha2VHZXRBY3Rpb25DcmVhdG9ycygpO1xuICBjb25zdCBtYXBEaXNwYXRjaFRvUHJvcHMgPSAoZGlzcGF0Y2gsIG93blByb3BzKSA9PiB7XG4gICAgY29uc3QgZ3JvdXBlZEFjdGlvbkNyZWF0b3JzID0gZ2V0QWN0aW9uQ3JlYXRvcnMoZGlzcGF0Y2gsIG93blByb3BzKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5ncm91cGVkQWN0aW9uQ3JlYXRvcnMsXG4gICAgICBkaXNwYXRjaFxuICAgIH07XG4gIH07XG5cbiAgcmV0dXJuIG1hcERpc3BhdGNoVG9Qcm9wcztcbn1cblxuLyoqXG4gKiBPdmVycmlkZSBkZWZhdWx0IGtlcGxlci5nbCBhY3Rpb25zIHdpdGggdXNlciBkZWZpbmVkIGFjdGlvbnMgdXNpbmcgdGhlIHNhbWUga2V5XG4gKi9cbmZ1bmN0aW9uIG1lcmdlQWN0aW9ucyhhY3Rpb25zLCB1c2VyQWN0aW9ucykge1xuICBjb25zdCBvdmVycmlkZXMgPSB7fTtcbiAgZm9yIChjb25zdCBrZXkgaW4gdXNlckFjdGlvbnMpIHtcbiAgICBpZiAodXNlckFjdGlvbnMuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBhY3Rpb25zLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgIG92ZXJyaWRlc1trZXldID0gdXNlckFjdGlvbnNba2V5XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gey4uLmFjdGlvbnMsIC4uLm92ZXJyaWRlc307XG59XG5cbmV4cG9ydCBkZWZhdWx0IEtlcGxlckdsRmFjdG9yeTtcbiJdfQ==
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { AnimationConfig, Timeline } from '@kepler.gl/types';
|
|
3
|
+
import AnimationControllerFactory from './common/animation-control/animation-controller';
|
|
4
|
+
interface LayerAnimationControllerProps {
|
|
5
|
+
animationConfig: AnimationConfig;
|
|
6
|
+
setLayerAnimationTime: (x: number) => void;
|
|
7
|
+
children?: (isAnimating: boolean | undefined, startAnimation: () => void, pauseAnimation: () => void, resetAnimation: () => void, timeline: Timeline | undefined, setTimelineValue: (x: any) => void) => React.ReactElement | null;
|
|
8
|
+
}
|
|
9
|
+
declare function LayerAnimationControllerFactory(AnimationController: ReturnType<typeof AnimationControllerFactory>): React.FC<LayerAnimationControllerProps>;
|
|
10
|
+
declare namespace LayerAnimationControllerFactory {
|
|
11
|
+
var deps: (typeof AnimationControllerFactory)[];
|
|
12
|
+
}
|
|
13
|
+
export default LayerAnimationControllerFactory;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
// Copyright (c) 2023 Uber Technologies, Inc.
|
|
2
|
+
//
|
|
3
|
+
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
4
|
+
// of this software and associated documentation files (the "Software"), to deal
|
|
5
|
+
// in the Software without restriction, including without limitation the rights
|
|
6
|
+
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
7
|
+
// copies of the Software, and to permit persons to whom the Software is
|
|
8
|
+
// furnished to do so, subject to the following conditions:
|
|
9
|
+
//
|
|
10
|
+
// The above copyright notice and this permission notice shall be included in
|
|
11
|
+
// all copies or substantial portions of the Software.
|
|
12
|
+
//
|
|
13
|
+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
14
|
+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
15
|
+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
16
|
+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
17
|
+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
18
|
+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
19
|
+
// THE SOFTWARE.
|
|
20
|
+
|
|
21
|
+
"use strict";
|
|
22
|
+
|
|
23
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
24
|
+
|
|
25
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
|
|
26
|
+
|
|
27
|
+
Object.defineProperty(exports, "__esModule", {
|
|
28
|
+
value: true
|
|
29
|
+
});
|
|
30
|
+
exports["default"] = void 0;
|
|
31
|
+
|
|
32
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
33
|
+
|
|
34
|
+
var _constants = require("@kepler.gl/constants");
|
|
35
|
+
|
|
36
|
+
var _utils = require("@kepler.gl/utils");
|
|
37
|
+
|
|
38
|
+
var _animationController = _interopRequireDefault(require("./common/animation-control/animation-controller"));
|
|
39
|
+
|
|
40
|
+
LayerAnimationControllerFactory.deps = [_animationController["default"]];
|
|
41
|
+
|
|
42
|
+
function LayerAnimationControllerFactory(AnimationController) {
|
|
43
|
+
var LayerAnimationController = function LayerAnimationController(_ref) {
|
|
44
|
+
var animationConfig = _ref.animationConfig,
|
|
45
|
+
setLayerAnimationTime = _ref.setLayerAnimationTime,
|
|
46
|
+
children = _ref.children;
|
|
47
|
+
var timeSteps = animationConfig.timeSteps,
|
|
48
|
+
domain = animationConfig.domain;
|
|
49
|
+
var setTimelineValue = (0, _react.useCallback)(function (value) {
|
|
50
|
+
if (Array.isArray(timeSteps)) {
|
|
51
|
+
setLayerAnimationTime((0, _utils.snapToMarks)((0, _utils.toArray)(value)[0], timeSteps)); // TODO: merge slider in to avoid this step
|
|
52
|
+
} else if (domain && value >= domain[0] && value <= domain[1]) {
|
|
53
|
+
setLayerAnimationTime(value);
|
|
54
|
+
}
|
|
55
|
+
}, [domain, setLayerAnimationTime, timeSteps]);
|
|
56
|
+
var timeline = (0, _utils.getTimelineFromAnimationConfig)(animationConfig);
|
|
57
|
+
return /*#__PURE__*/_react["default"].createElement(AnimationController, {
|
|
58
|
+
key: "layer-control",
|
|
59
|
+
value: Number(animationConfig.currentTime),
|
|
60
|
+
domain: animationConfig.domain,
|
|
61
|
+
speed: animationConfig.speed,
|
|
62
|
+
isAnimating: animationConfig.isAnimating,
|
|
63
|
+
steps: animationConfig.timeSteps,
|
|
64
|
+
animationWindow: animationConfig.timeSteps ? _constants.ANIMATION_WINDOW.interval : _constants.ANIMATION_WINDOW.point,
|
|
65
|
+
setTimelineValue: setTimelineValue,
|
|
66
|
+
timeline: timeline,
|
|
67
|
+
children: children
|
|
68
|
+
});
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
return LayerAnimationController;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
var _default = LayerAnimationControllerFactory;
|
|
75
|
+
exports["default"] = _default;
|
|
76
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9sYXllci1hbmltYXRpb24tY29udHJvbGxlci50c3giXSwibmFtZXMiOlsiTGF5ZXJBbmltYXRpb25Db250cm9sbGVyRmFjdG9yeSIsImRlcHMiLCJBbmltYXRpb25Db250cm9sbGVyRmFjdG9yeSIsIkFuaW1hdGlvbkNvbnRyb2xsZXIiLCJMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIiLCJhbmltYXRpb25Db25maWciLCJzZXRMYXllckFuaW1hdGlvblRpbWUiLCJjaGlsZHJlbiIsInRpbWVTdGVwcyIsImRvbWFpbiIsInNldFRpbWVsaW5lVmFsdWUiLCJ2YWx1ZSIsIkFycmF5IiwiaXNBcnJheSIsInRpbWVsaW5lIiwiTnVtYmVyIiwiY3VycmVudFRpbWUiLCJzcGVlZCIsImlzQW5pbWF0aW5nIiwiQU5JTUFUSU9OX1dJTkRPVyIsImludGVydmFsIiwicG9pbnQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBZUFBLCtCQUErQixDQUFDQyxJQUFoQyxHQUF1QyxDQUFDQywrQkFBRCxDQUF2Qzs7QUFFQSxTQUFTRiwrQkFBVCxDQUNFRyxtQkFERixFQUVFO0FBQ0EsTUFBTUMsd0JBQWlFLEdBQUcsU0FBcEVBLHdCQUFvRSxPQUlwRTtBQUFBLFFBSEpDLGVBR0ksUUFISkEsZUFHSTtBQUFBLFFBRkpDLHFCQUVJLFFBRkpBLHFCQUVJO0FBQUEsUUFESkMsUUFDSSxRQURKQSxRQUNJO0FBQUEsUUFDR0MsU0FESCxHQUN3QkgsZUFEeEIsQ0FDR0csU0FESDtBQUFBLFFBQ2NDLE1BRGQsR0FDd0JKLGVBRHhCLENBQ2NJLE1BRGQ7QUFHSixRQUFNQyxnQkFBZ0IsR0FBRyx3QkFDdkIsVUFBQ0MsS0FBRCxFQUFtQjtBQUNqQixVQUFJQyxLQUFLLENBQUNDLE9BQU4sQ0FBY0wsU0FBZCxDQUFKLEVBQThCO0FBQzVCRixRQUFBQSxxQkFBcUIsQ0FBQyx3QkFBWSxvQkFBUUssS0FBUixFQUFlLENBQWYsQ0FBWixFQUErQkgsU0FBL0IsQ0FBRCxDQUFyQixDQUQ0QixDQUc1QjtBQUNELE9BSkQsTUFJTyxJQUFJQyxNQUFNLElBQUlFLEtBQUssSUFBSUYsTUFBTSxDQUFDLENBQUQsQ0FBekIsSUFBZ0NFLEtBQUssSUFBSUYsTUFBTSxDQUFDLENBQUQsQ0FBbkQsRUFBd0Q7QUFDN0RILFFBQUFBLHFCQUFxQixDQUFDSyxLQUFELENBQXJCO0FBQ0Q7QUFDRixLQVRzQixFQVV2QixDQUFDRixNQUFELEVBQVNILHFCQUFULEVBQWdDRSxTQUFoQyxDQVZ1QixDQUF6QjtBQWFBLFFBQU1NLFFBQVEsR0FBRywyQ0FBK0JULGVBQS9CLENBQWpCO0FBRUEsd0JBQ0UsZ0NBQUMsbUJBQUQ7QUFDRSxNQUFBLEdBQUcsRUFBQyxlQUROO0FBRUUsTUFBQSxLQUFLLEVBQUVVLE1BQU0sQ0FBQ1YsZUFBZSxDQUFDVyxXQUFqQixDQUZmO0FBR0UsTUFBQSxNQUFNLEVBQUVYLGVBQWUsQ0FBQ0ksTUFIMUI7QUFJRSxNQUFBLEtBQUssRUFBRUosZUFBZSxDQUFDWSxLQUp6QjtBQUtFLE1BQUEsV0FBVyxFQUFFWixlQUFlLENBQUNhLFdBTC9CO0FBTUUsTUFBQSxLQUFLLEVBQUViLGVBQWUsQ0FBQ0csU0FOekI7QUFPRSxNQUFBLGVBQWUsRUFDYkgsZUFBZSxDQUFDRyxTQUFoQixHQUE0QlcsNEJBQWlCQyxRQUE3QyxHQUF3REQsNEJBQWlCRSxLQVI3RTtBQVVFLE1BQUEsZ0JBQWdCLEVBQUVYLGdCQVZwQjtBQVdFLE1BQUEsUUFBUSxFQUFFSSxRQVhaO0FBWUUsTUFBQSxRQUFRLEVBQUVQO0FBWlosTUFERjtBQWdCRCxHQXRDRDs7QUF1Q0EsU0FBT0gsd0JBQVA7QUFDRDs7ZUFFY0osK0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHt1c2VDYWxsYmFja30gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtBTklNQVRJT05fV0lORE9XfSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge0FuaW1hdGlvbkNvbmZpZywgVGltZWxpbmV9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtzbmFwVG9NYXJrcywgZ2V0VGltZWxpbmVGcm9tQW5pbWF0aW9uQ29uZmlnLCB0b0FycmF5fSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCBBbmltYXRpb25Db250cm9sbGVyRmFjdG9yeSBmcm9tICcuL2NvbW1vbi9hbmltYXRpb24tY29udHJvbC9hbmltYXRpb24tY29udHJvbGxlcic7XG5cbmludGVyZmFjZSBMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJQcm9wcyB7XG4gIGFuaW1hdGlvbkNvbmZpZzogQW5pbWF0aW9uQ29uZmlnO1xuICBzZXRMYXllckFuaW1hdGlvblRpbWU6ICh4OiBudW1iZXIpID0+IHZvaWQ7XG4gIGNoaWxkcmVuPzogKFxuICAgIGlzQW5pbWF0aW5nOiBib29sZWFuIHwgdW5kZWZpbmVkLFxuICAgIHN0YXJ0QW5pbWF0aW9uOiAoKSA9PiB2b2lkLFxuICAgIHBhdXNlQW5pbWF0aW9uOiAoKSA9PiB2b2lkLFxuICAgIHJlc2V0QW5pbWF0aW9uOiAoKSA9PiB2b2lkLFxuICAgIHRpbWVsaW5lOiBUaW1lbGluZSB8IHVuZGVmaW5lZCxcbiAgICBzZXRUaW1lbGluZVZhbHVlOiAoeDogYW55KSA9PiB2b2lkXG4gICkgPT4gUmVhY3QuUmVhY3RFbGVtZW50IHwgbnVsbDtcbn1cblxuTGF5ZXJBbmltYXRpb25Db250cm9sbGVyRmFjdG9yeS5kZXBzID0gW0FuaW1hdGlvbkNvbnRyb2xsZXJGYWN0b3J5XTtcblxuZnVuY3Rpb24gTGF5ZXJBbmltYXRpb25Db250cm9sbGVyRmFjdG9yeShcbiAgQW5pbWF0aW9uQ29udHJvbGxlcjogUmV0dXJuVHlwZTx0eXBlb2YgQW5pbWF0aW9uQ29udHJvbGxlckZhY3Rvcnk+XG4pIHtcbiAgY29uc3QgTGF5ZXJBbmltYXRpb25Db250cm9sbGVyOiBSZWFjdC5GQzxMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJQcm9wcz4gPSAoe1xuICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICBzZXRMYXllckFuaW1hdGlvblRpbWUsXG4gICAgY2hpbGRyZW5cbiAgfSkgPT4ge1xuICAgIGNvbnN0IHt0aW1lU3RlcHMsIGRvbWFpbn0gPSBhbmltYXRpb25Db25maWc7XG5cbiAgICBjb25zdCBzZXRUaW1lbGluZVZhbHVlID0gdXNlQ2FsbGJhY2soXG4gICAgICAodmFsdWU6IG51bWJlcikgPT4ge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aW1lU3RlcHMpKSB7XG4gICAgICAgICAgc2V0TGF5ZXJBbmltYXRpb25UaW1lKHNuYXBUb01hcmtzKHRvQXJyYXkodmFsdWUpWzBdLCB0aW1lU3RlcHMpKTtcblxuICAgICAgICAgIC8vIFRPRE86IG1lcmdlIHNsaWRlciBpbiB0byBhdm9pZCB0aGlzIHN0ZXBcbiAgICAgICAgfSBlbHNlIGlmIChkb21haW4gJiYgdmFsdWUgPj0gZG9tYWluWzBdICYmIHZhbHVlIDw9IGRvbWFpblsxXSkge1xuICAgICAgICAgIHNldExheWVyQW5pbWF0aW9uVGltZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbZG9tYWluLCBzZXRMYXllckFuaW1hdGlvblRpbWUsIHRpbWVTdGVwc11cbiAgICApO1xuXG4gICAgY29uc3QgdGltZWxpbmUgPSBnZXRUaW1lbGluZUZyb21BbmltYXRpb25Db25maWcoYW5pbWF0aW9uQ29uZmlnKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8QW5pbWF0aW9uQ29udHJvbGxlclxuICAgICAgICBrZXk9XCJsYXllci1jb250cm9sXCJcbiAgICAgICAgdmFsdWU9e051bWJlcihhbmltYXRpb25Db25maWcuY3VycmVudFRpbWUpfVxuICAgICAgICBkb21haW49e2FuaW1hdGlvbkNvbmZpZy5kb21haW59XG4gICAgICAgIHNwZWVkPXthbmltYXRpb25Db25maWcuc3BlZWR9XG4gICAgICAgIGlzQW5pbWF0aW5nPXthbmltYXRpb25Db25maWcuaXNBbmltYXRpbmd9XG4gICAgICAgIHN0ZXBzPXthbmltYXRpb25Db25maWcudGltZVN0ZXBzfVxuICAgICAgICBhbmltYXRpb25XaW5kb3c9e1xuICAgICAgICAgIGFuaW1hdGlvbkNvbmZpZy50aW1lU3RlcHMgPyBBTklNQVRJT05fV0lORE9XLmludGVydmFsIDogQU5JTUFUSU9OX1dJTkRPVy5wb2ludFxuICAgICAgICB9XG4gICAgICAgIHNldFRpbWVsaW5lVmFsdWU9e3NldFRpbWVsaW5lVmFsdWV9XG4gICAgICAgIHRpbWVsaW5lPXt0aW1lbGluZX1cbiAgICAgICAgY2hpbGRyZW49e2NoaWxkcmVufVxuICAgICAgLz5cbiAgICApO1xuICB9O1xuICByZXR1cm4gTGF5ZXJBbmltYXRpb25Db250cm9sbGVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBMYXllckFuaW1hdGlvbkNvbnRyb2xsZXJGYWN0b3J5O1xuIl19
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Copyright (c)
|
|
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
|
|
@@ -64,4 +64,4 @@ var CoordinateInfoFactory = function CoordinateInfoFactory() {
|
|
|
64
64
|
|
|
65
65
|
var _default = CoordinateInfoFactory;
|
|
66
66
|
exports["default"] = _default;
|
|
67
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
67
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYXAvY29vcmRpbmF0ZS1pbmZvLnRzeCJdLCJuYW1lcyI6WyJERUNJTUFMIiwiREVDSU1BTF9aIiwiQ29vcmRpbmF0ZUluZm9GYWN0b3J5IiwiQ29vcmRpbmF0ZUluZm8iLCJjb29yZGluYXRlIiwiem9vbSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBb0JBOztBQUNBOztBQUNBOztBQUNBOztBQXZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU9BO0FBQ0E7QUFDQSxJQUFNQSxPQUFPLEdBQUcsQ0FBaEI7QUFDQSxJQUFNQyxTQUFTLEdBQUcsQ0FBbEI7O0FBT0EsSUFBTUMscUJBQXFCLEdBQUcsU0FBeEJBLHFCQUF3QixHQUFNO0FBQ2xDLE1BQU1DLGNBQTZDLEdBQUcsU0FBaERBLGNBQWdEO0FBQUEsUUFBRUMsVUFBRixRQUFFQSxVQUFGO0FBQUEsUUFBY0MsSUFBZCxRQUFjQSxJQUFkO0FBQUEsd0JBQ3BEO0FBQUssTUFBQSxTQUFTLEVBQUM7QUFBZixvQkFDRSxnQ0FBQywrQkFBRDtBQUFpQixNQUFBLFNBQVMsRUFBQztBQUEzQixvQkFDRSxnQ0FBQyxrQkFBRDtBQUFhLE1BQUEsTUFBTSxFQUFDO0FBQXBCLE1BREYsZUFERixlQUtFLDREQUNFLDREQUNFO0FBQUksTUFBQSxTQUFTLEVBQUM7QUFBZCxvQkFDRTtBQUFJLE1BQUEsU0FBUyxFQUFDO0FBQWQsT0FBNEIseUJBQWFELFVBQVUsQ0FBQyxDQUFELENBQXZCLEVBQTRCSixPQUE1QixDQUE1QixNQURGLGVBRUU7QUFBSSxNQUFBLFNBQVMsRUFBQztBQUFkLE9BQTRCLHlCQUFhSSxVQUFVLENBQUMsQ0FBRCxDQUF2QixFQUE0QkosT0FBNUIsQ0FBNUIsTUFGRixlQUdFO0FBQUksTUFBQSxTQUFTLEVBQUM7QUFBZCxPQUE0Qix5QkFBYUssSUFBYixFQUFtQkosU0FBbkIsQ0FBNUIsTUFIRixDQURGLENBREYsQ0FMRixDQURvRDtBQUFBLEdBQXREOztBQWtCQSxTQUFPRSxjQUFQO0FBQ0QsQ0FwQkQ7O2VBc0JlRCxxQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAyMyBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge3ByZWNpc2VSb3VuZH0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge0N1cnNvckNsaWNrfSBmcm9tICcuLi9jb21tb24vaWNvbnMnO1xuaW1wb3J0IHtTdHlsZWRMYXllck5hbWV9IGZyb20gJy4vbGF5ZXItaG92ZXItaW5mbyc7XG5cbi8vIDZ0aCBkZWNpbWFsIGlzIHdvcnRoIHVwIHRvIDAuMTEgbVxuLy8gaHR0cHM6Ly9naXMuc3RhY2tleGNoYW5nZS5jb20vcXVlc3Rpb25zLzg2NTAvbWVhc3VyaW5nLWFjY3VyYWN5LW9mLWxhdGl0dWRlLWFuZC1sb25naXR1ZGVcbmNvbnN0IERFQ0lNQUwgPSA2O1xuY29uc3QgREVDSU1BTF9aID0gMTtcblxuZXhwb3J0IGludGVyZmFjZSBDb29yZGluYXRlSW5mb1Byb3BzIHtcbiAgY29vcmRpbmF0ZTogbnVtYmVyW107XG4gIHpvb206IG51bWJlcjtcbn1cblxuY29uc3QgQ29vcmRpbmF0ZUluZm9GYWN0b3J5ID0gKCkgPT4ge1xuICBjb25zdCBDb29yZGluYXRlSW5mbzogUmVhY3QuRkM8Q29vcmRpbmF0ZUluZm9Qcm9wcz4gPSAoe2Nvb3JkaW5hdGUsIHpvb219KSA9PiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJjb29yZGluZ2F0ZS1ob3Zlci1pbmZvXCI+XG4gICAgICA8U3R5bGVkTGF5ZXJOYW1lIGNsYXNzTmFtZT1cIm1hcC1wb3BvdmVyX19sYXllci1uYW1lXCI+XG4gICAgICAgIDxDdXJzb3JDbGljayBoZWlnaHQ9XCIxMnB4XCIgLz5cbiAgICAgICAgQ29vcmRpbmF0ZVxuICAgICAgPC9TdHlsZWRMYXllck5hbWU+XG4gICAgICA8dGFibGU+XG4gICAgICAgIDx0Ym9keT5cbiAgICAgICAgICA8dHIgY2xhc3NOYW1lPVwicm93XCI+XG4gICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwicm93X192YWx1ZVwiPntwcmVjaXNlUm91bmQoY29vcmRpbmF0ZVsxXSwgREVDSU1BTCl9LDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwicm93X192YWx1ZVwiPntwcmVjaXNlUm91bmQoY29vcmRpbmF0ZVswXSwgREVDSU1BTCl9LDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwicm93X192YWx1ZVwiPntwcmVjaXNlUm91bmQoem9vbSwgREVDSU1BTF9aKX16PC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbiAgKTtcblxuICByZXR1cm4gQ29vcmRpbmF0ZUluZm87XG59O1xuXG5leHBvcnQgZGVmYXVsdCBDb29yZGluYXRlSW5mb0ZhY3Rvcnk7XG4iXX0=
|