@kepler.gl/components 3.2.6 → 3.3.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/annotations/annotation-node.d.ts +11 -0
- package/dist/annotations/annotation-node.js +145 -0
- package/dist/annotations/annotation-overlay.d.ts +16 -0
- package/dist/annotations/annotation-overlay.js +166 -0
- package/dist/annotations/annotation-panel.d.ts +24 -0
- package/dist/annotations/annotation-panel.js +362 -0
- package/dist/annotations/annotation-text.d.ts +16 -0
- package/dist/annotations/annotation-text.js +150 -0
- package/dist/annotations/annotation-utils.d.ts +39 -0
- package/dist/annotations/annotation-utils.js +156 -0
- package/dist/annotations/index.d.ts +7 -0
- package/dist/annotations/index.js +53 -0
- package/dist/annotations/lexical-editor/clickable-link-plugin.d.ts +3 -0
- package/dist/annotations/lexical-editor/clickable-link-plugin.js +71 -0
- package/dist/annotations/lexical-editor/floating-link-editor.d.ts +1 -0
- package/dist/annotations/lexical-editor/floating-link-editor.js +194 -0
- package/dist/annotations/lexical-editor/index.d.ts +7 -0
- package/dist/annotations/lexical-editor/index.js +78 -0
- package/dist/annotations/lexical-editor/lexical-constants.d.ts +12 -0
- package/dist/annotations/lexical-editor/lexical-constants.js +22 -0
- package/dist/annotations/lexical-editor/lexical-nodes.d.ts +3 -0
- package/dist/annotations/lexical-editor/lexical-nodes.js +13 -0
- package/dist/annotations/lexical-editor/lexical-rich-text-editor.d.ts +15 -0
- package/dist/annotations/lexical-editor/lexical-rich-text-editor.js +122 -0
- package/dist/annotations/lexical-editor/lexical-theme.d.ts +15 -0
- package/dist/annotations/lexical-editor/lexical-theme.js +25 -0
- package/dist/annotations/lexical-editor/lexical-toolbar.d.ts +7 -0
- package/dist/annotations/lexical-editor/lexical-toolbar.js +293 -0
- package/dist/annotations/lexical-editor/lexical-utils.d.ts +4 -0
- package/dist/annotations/lexical-editor/lexical-utils.js +45 -0
- package/dist/annotations/lexical-editor/use-lexical-toolbar.d.ts +36 -0
- package/dist/annotations/lexical-editor/use-lexical-toolbar.js +253 -0
- package/dist/bottom-widget.d.ts +5 -5
- package/dist/bottom-widget.js +12 -6
- package/dist/common/action-panel.d.ts +3 -3
- package/dist/common/animation-control/animation-control.d.ts +2 -1
- package/dist/common/animation-control/animation-control.js +3 -1
- package/dist/common/animation-control/animation-controller.js +8 -6
- package/dist/common/animation-control/export-video-control.d.ts +9 -0
- package/dist/common/animation-control/export-video-control.js +43 -0
- package/dist/common/animation-control/playback-controls.d.ts +5 -3
- package/dist/common/animation-control/playback-controls.js +7 -4
- package/dist/common/checkbox.d.ts +5 -21
- package/dist/common/checkbox.js +58 -70
- package/dist/common/color-legend.d.ts +4 -4
- package/dist/common/color-legend.js +3 -3
- package/dist/common/column-stats-chart.d.ts +3 -3
- package/dist/common/data-table/button.d.ts +1 -1
- package/dist/common/data-table/canvas.d.ts +0 -1
- package/dist/common/data-table/cell-size.d.ts +2 -2
- package/dist/common/data-table/display-format.d.ts +1 -1
- package/dist/common/data-table/header-cell.d.ts +2 -2
- package/dist/common/data-table/index.d.ts +8 -10
- package/dist/common/data-table/index.js +3 -3
- package/dist/common/data-table/option-dropdown.d.ts +1 -1
- package/dist/common/field-selector.d.ts +5 -5
- package/dist/common/field-token.d.ts +1 -1
- package/dist/common/file-uploader/file-drop.d.ts +1 -1
- package/dist/common/file-uploader/file-upload-progress.d.ts +1 -1
- package/dist/common/file-uploader/file-upload.d.ts +1 -1
- package/dist/common/file-uploader/file-upload.js +4 -4
- package/dist/common/flex-container.d.ts +2 -3
- package/dist/common/histogram-plot.d.ts +1 -1
- package/dist/common/histogram-plot.js +102 -53
- package/dist/common/icon-button.d.ts +16 -16
- package/dist/common/icons/3d-models/airplane.d.ts +14 -0
- package/dist/common/icons/3d-models/airplane.js +104 -0
- package/dist/common/icons/3d-models/bicycle.d.ts +14 -0
- package/dist/common/icons/3d-models/bicycle.js +426 -0
- package/dist/common/icons/3d-models/boeing.d.ts +14 -0
- package/dist/common/icons/3d-models/boeing.js +119 -0
- package/dist/common/icons/3d-models/car.d.ts +14 -0
- package/dist/common/icons/3d-models/car.js +110 -0
- package/dist/common/icons/3d-models/cargoship.d.ts +14 -0
- package/dist/common/icons/3d-models/cargoship.js +246 -0
- package/dist/common/icons/3d-models/evtol.d.ts +14 -0
- package/dist/common/icons/3d-models/evtol.js +134 -0
- package/dist/common/icons/3d-models/glider.d.ts +14 -0
- package/dist/common/icons/3d-models/glider.js +62 -0
- package/dist/common/icons/3d-models/helicopter.d.ts +14 -0
- package/dist/common/icons/3d-models/helicopter.js +110 -0
- package/dist/common/icons/3d-models/scooter.d.ts +14 -0
- package/dist/common/icons/3d-models/scooter.js +159 -0
- package/dist/common/icons/3d-models/semitruck.d.ts +14 -0
- package/dist/common/icons/3d-models/semitruck.js +177 -0
- package/dist/common/icons/3d-models/truck.d.ts +14 -0
- package/dist/common/icons/3d-models/truck.js +122 -0
- package/dist/common/icons/anchor_window.d.ts +1 -8
- package/dist/common/icons/anchor_window.js +17 -10
- package/dist/common/icons/annotation-text.d.ts +9 -0
- package/dist/common/icons/annotation-text.js +56 -0
- package/dist/common/icons/base.d.ts +1 -1
- package/dist/common/icons/close.js +1 -1
- package/dist/common/icons/effects/distance-fog.d.ts +14 -0
- package/dist/common/icons/effects/distance-fog.js +79 -0
- package/dist/common/icons/effects/surface-fog.d.ts +14 -0
- package/dist/common/icons/effects/surface-fog.js +86 -0
- package/dist/common/icons/index.d.ts +3 -0
- package/dist/common/icons/index.js +22 -1
- package/dist/common/item-selector/chickleted-input.d.ts +5 -5
- package/dist/common/item-selector/chickleted-input.js +5 -5
- package/dist/common/item-selector/dropdown-list.d.ts +3 -3
- package/dist/common/item-selector/dropdown-select.d.ts +7 -7
- package/dist/common/item-selector/item-selector.d.ts +2 -2
- package/dist/common/item-selector/typeahead.d.ts +3 -3
- package/dist/common/line-chart.d.ts +4 -1
- package/dist/common/line-chart.js +59 -12
- package/dist/common/loading-spinner.d.ts +2 -2
- package/dist/common/modal.d.ts +5 -5
- package/dist/common/portaled.d.ts +8 -25
- package/dist/common/progress-bar.d.ts +1 -1
- package/dist/common/radius-legend.d.ts +1 -1
- package/dist/common/range-brush.d.ts +1 -1
- package/dist/common/range-plot.d.ts +1 -1
- package/dist/common/range-plot.js +4 -2
- package/dist/common/range-slider.d.ts +2 -0
- package/dist/common/range-slider.js +108 -43
- package/dist/common/slider/mouse-event.d.ts +1 -1
- package/dist/common/slider/slider-bar-handle.d.ts +2 -2
- package/dist/common/slider/slider-handle.d.ts +3 -3
- package/dist/common/slider/slider.d.ts +6 -2
- package/dist/common/slider/slider.js +78 -35
- package/dist/common/styled-components.d.ts +158 -159
- package/dist/common/styled-components.js +2 -2
- package/dist/common/sync-timeline-control.d.ts +3 -3
- package/dist/common/time-range-slider-time-title.d.ts +2 -2
- package/dist/common/time-range-slider-time-title.js +5 -5
- package/dist/common/time-range-slider.d.ts +4 -3
- package/dist/common/time-range-slider.js +19 -7
- package/dist/common/timeline-helpers.d.ts +3 -0
- package/dist/common/timeline-helpers.js +57 -0
- package/dist/common/timeline-slider.d.ts +1 -1
- package/dist/common/timeline-slider.js +21 -12
- package/dist/common/tippy-tooltip.d.ts +1 -1
- package/dist/common/toolbar-item.d.ts +1 -1
- package/dist/common/toolbar-item.js +5 -5
- package/dist/common/toolbar.d.ts +2 -2
- package/dist/common/toolbar.js +4 -4
- package/dist/common/vertical-toolbar.d.ts +2 -3
- package/dist/container.d.ts +6 -6
- package/dist/context.d.ts +3 -3
- package/dist/dnd-context.d.ts +2 -2
- package/dist/editor/editor.d.ts +1 -1
- package/dist/editor/editor.js +1 -1
- package/dist/editor/feature-action-panel.d.ts +1 -1
- package/dist/editor/feature-action-panel.js +1 -1
- package/dist/effects/compact-color-picker.d.ts +1 -1
- package/dist/effects/effect-configurator.d.ts +5 -4
- package/dist/effects/effect-configurator.js +243 -44
- package/dist/effects/effect-list.d.ts +1 -1
- package/dist/effects/effect-manager.d.ts +3 -3
- package/dist/effects/effect-manager.js +11 -4
- package/dist/effects/effect-panel-header.d.ts +2 -2
- package/dist/effects/effect-panel-header.js +35 -18
- package/dist/effects/effect-panel.d.ts +6 -6
- package/dist/effects/effect-panel.js +61 -86
- package/dist/effects/effect-time-configurator.d.ts +1 -1
- package/dist/effects/effect-time-configurator.js +10 -10
- package/dist/effects/effect-time-selector.d.ts +1 -1
- package/dist/effects/effect-time-slider.d.ts +3 -3
- package/dist/effects/effect-type-dropdown-list.d.ts +3 -2
- package/dist/effects/effect-type-dropdown-list.js +1 -1
- package/dist/effects/effect-type-list-item.d.ts +2 -1
- package/dist/effects/effect-type-list-item.js +23 -7
- package/dist/effects/effect-type-selector.d.ts +3 -2
- package/dist/effects/effect-type-selector.js +2 -2
- package/dist/effects/side-panel-title.d.ts +1 -1
- package/dist/effects/surface-fog-section.d.ts +14 -0
- package/dist/effects/surface-fog-section.js +263 -0
- package/dist/effects/timezone-selector.d.ts +1 -1
- package/dist/filters/components.d.ts +2 -3
- package/dist/filters/filter-panels/types.d.ts +4 -4
- package/dist/filters/index.d.ts +1 -0
- package/dist/filters/index.js +8 -1
- package/dist/filters/polygon-filter.js +2 -2
- package/dist/filters/time-range-filter.js +3 -1
- package/dist/filters/time-widget-settings.d.ts +14 -0
- package/dist/filters/time-widget-settings.js +312 -0
- package/dist/filters/time-widget-top.d.ts +2 -3
- package/dist/filters/time-widget-top.js +32 -39
- package/dist/filters/time-widget.d.ts +3 -2
- package/dist/filters/time-widget.js +285 -9
- package/dist/filters/types.d.ts +11 -11
- package/dist/filters/types.js +1 -1
- package/dist/geocoder/geocoder.d.ts +7 -4
- package/dist/geocoder/geocoder.js +65 -14
- package/dist/geocoder-panel.d.ts +11 -2
- package/dist/geocoder-panel.js +8 -4
- package/dist/hooks/use-cloud-list-provider.d.ts +1 -1
- package/dist/hooks/use-dnd-effects.d.ts +1 -1
- package/dist/hooks/use-dnd-layers.d.ts +1 -1
- package/dist/hooks/use-feature-flags.d.ts +1 -1
- package/dist/hooks/use-fetch-raster-tile-metadata.d.ts +3 -3
- package/dist/hooks/use-fetch-vector-tile-metadata.d.ts +2 -2
- package/dist/hooks/use-legend-position.d.ts +4 -5
- package/dist/index.d.ts +14 -0
- package/dist/index.js +124 -1
- package/dist/injector.d.ts +5 -5
- package/dist/kepler-gl.d.ts +70 -67
- package/dist/kepler-gl.js +89 -11
- package/dist/loading-indicator.d.ts +6 -4
- package/dist/loading-indicator.js +6 -3
- package/dist/map/annotations/annotation-control.d.ts +16 -0
- package/dist/map/annotations/annotation-control.js +56 -0
- package/dist/map/effects/effect-control.d.ts +1 -1
- package/dist/map/layer-hover-info.d.ts +3 -3
- package/dist/map/layer-hover-info.js +69 -36
- package/dist/map/layer-selector-panel.d.ts +2 -2
- package/dist/map/lazy-tippy.js +3 -3
- package/dist/map/locale-panel.d.ts +2 -2
- package/dist/map/locale-panel.js +2 -2
- package/dist/map/map-control-panel.d.ts +1 -1
- package/dist/map/map-control-toolbar.d.ts +7 -8
- package/dist/map/map-control-tooltip.d.ts +1 -1
- package/dist/map/map-control.d.ts +8 -4
- package/dist/map/map-control.js +16 -7
- package/dist/map/map-draw-panel.d.ts +2 -2
- package/dist/map/map-draw-panel.js +7 -4
- package/dist/map/map-legend-panel.d.ts +5 -4
- package/dist/map/map-legend-panel.js +10 -8
- package/dist/map/map-legend.d.ts +11 -9
- package/dist/map/map-legend.js +39 -9
- package/dist/map/map-navigation-control.d.ts +13 -0
- package/dist/map/map-navigation-control.js +143 -0
- package/dist/map/map-popover-content.d.ts +2 -2
- package/dist/map/map-popover.d.ts +2 -2
- package/dist/map/map-popover.js +2 -2
- package/dist/map/split-map-button.d.ts +1 -1
- package/dist/map/toggle-3d-button.d.ts +1 -1
- package/dist/map-container.d.ts +15 -5
- package/dist/map-container.js +286 -73
- package/dist/map-view-state-context.d.ts +10 -2
- package/dist/map-view-state-context.js +1 -1
- package/dist/modal-container.d.ts +6 -8
- package/dist/modal-container.js +28 -6
- package/dist/modals/add-map-style-modal.js +173 -200
- package/dist/modals/cloud-components/cloud-header.d.ts +1 -1
- package/dist/modals/cloud-components/provider-select.d.ts +1 -1
- package/dist/modals/cloud-tile.d.ts +1 -1
- package/dist/modals/data-table-modal.d.ts +2 -2
- package/dist/modals/data-table-modal.js +146 -194
- package/dist/modals/export-data-modal.js +117 -139
- package/dist/modals/export-image-modal.js +1 -1
- package/dist/modals/export-map-modal/components.d.ts +1 -1
- package/dist/modals/export-map-modal/export-html-map.d.ts +1 -1
- package/dist/modals/export-map-modal/export-json-map.d.ts +1 -1
- package/dist/modals/export-video-modal.d.ts +25 -0
- package/dist/modals/export-video-modal.js +338 -0
- package/dist/modals/export-video-modal.spec.d.ts +1 -0
- package/dist/modals/export-video-modal.spec.js +686 -0
- package/dist/modals/fog-height-animation.d.ts +8 -0
- package/dist/modals/fog-height-animation.js +97 -0
- package/dist/modals/hubble-utils.d.ts +25 -0
- package/dist/modals/hubble-utils.js +197 -0
- package/dist/modals/hubble-utils.spec.d.ts +1 -0
- package/dist/modals/hubble-utils.spec.js +397 -0
- package/dist/modals/image-modal-container.d.ts +1 -1
- package/dist/modals/load-data-modal.d.ts +2 -2
- package/dist/modals/modal-dialog.d.ts +0 -2
- package/dist/modals/overwrite-map-modal.d.ts +1 -1
- package/dist/modals/save-map-modal.d.ts +3 -3
- package/dist/modals/share-map-modal.d.ts +1 -1
- package/dist/modals/tilesets-modals/common.d.ts +3 -3
- package/dist/modals/tilesets-modals/common.js +1 -1
- package/dist/modals/tilesets-modals/load-data-footer.d.ts +1 -1
- package/dist/modals/tilesets-modals/load-data-footer.js +2 -2
- package/dist/modals/tilesets-modals/load-tileset.d.ts +1 -1
- package/dist/modals/tilesets-modals/load-tileset.js +27 -10
- package/dist/modals/tilesets-modals/tileset-bitmap-form.d.ts +14 -0
- package/dist/modals/tilesets-modals/tileset-bitmap-form.js +284 -0
- package/dist/modals/tilesets-modals/tileset-icon.d.ts +1 -1
- package/dist/modals/tilesets-modals/tileset-raster-form.d.ts +2 -2
- package/dist/modals/tilesets-modals/tileset-raster-form.js +94 -11
- package/dist/modals/tilesets-modals/tileset-tile3d-form.d.ts +12 -0
- package/dist/modals/tilesets-modals/tileset-tile3d-form.js +389 -0
- package/dist/modals/tilesets-modals/tileset-vector-form.d.ts +3 -3
- package/dist/modals/tilesets-modals/tileset-vector-form.js +58 -4
- package/dist/modals/tilesets-modals/tileset-wms-form.d.ts +1 -1
- package/dist/modals/tilesets-modals/tileset-wms-form.js +55 -11
- package/dist/notification-panel/notification-item.d.ts +1 -53
- package/dist/notification-panel/notification-item.js +47 -75
- package/dist/notification-panel.d.ts +1 -1
- package/dist/notification-panel.js +20 -42
- package/dist/plot-container.js +55 -14
- package/dist/side-panel/add-by-dataset-button.d.ts +1 -1
- package/dist/side-panel/add-by-dataset-button.js +3 -3
- package/dist/side-panel/common/dataset-info.d.ts +2 -2
- package/dist/side-panel/common/dataset-info.js +2 -2
- package/dist/side-panel/common/dataset-tag.d.ts +2 -2
- package/dist/side-panel/common/dataset-title.d.ts +2 -2
- package/dist/side-panel/common/source-data-catalog.d.ts +3 -3
- package/dist/side-panel/common/types.d.ts +8 -8
- package/dist/side-panel/custom-panel.d.ts +2 -2
- package/dist/side-panel/filter-manager.d.ts +3 -3
- package/dist/side-panel/filter-panel/add-filter-button.d.ts +1 -1
- package/dist/side-panel/filter-panel/filter-panel-header.d.ts +2 -2
- package/dist/side-panel/interaction-manager.d.ts +1 -1
- package/dist/side-panel/interaction-panel/brush-config.d.ts +1 -1
- package/dist/side-panel/interaction-panel/geocoder-config.d.ts +11 -0
- package/dist/side-panel/interaction-panel/geocoder-config.js +45 -0
- package/dist/side-panel/interaction-panel/interaction-panel.d.ts +3 -2
- package/dist/side-panel/interaction-panel/interaction-panel.js +10 -3
- package/dist/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.d.ts +3 -3
- package/dist/side-panel/interaction-panel/tooltip-config.d.ts +1 -1
- package/dist/side-panel/layer-manager.d.ts +2 -2
- package/dist/side-panel/layer-manager.js +11 -3
- package/dist/side-panel/layer-panel/add-layer-button.d.ts +1 -1
- package/dist/side-panel/layer-panel/channel-by-value-selector.d.ts +1 -1
- package/dist/side-panel/layer-panel/color-breaks-panel.d.ts +4 -4
- package/dist/side-panel/layer-panel/color-palette-preset.d.ts +1 -1
- package/dist/side-panel/layer-panel/color-palette.d.ts +2 -2
- package/dist/side-panel/layer-panel/color-range-selector.d.ts +3 -3
- package/dist/side-panel/layer-panel/color-scale-selector.d.ts +5 -5
- package/dist/side-panel/layer-panel/color-scale-selector.js +1 -1
- package/dist/side-panel/layer-panel/color-selector.d.ts +3 -3
- package/dist/side-panel/layer-panel/column-selector.d.ts +1 -1
- package/dist/side-panel/layer-panel/custom-palette.d.ts +10 -10
- package/dist/side-panel/layer-panel/custom-palette.js +5 -5
- package/dist/side-panel/layer-panel/custom-picker.d.ts +1 -1
- package/dist/side-panel/layer-panel/dataset-layer-group.d.ts +1 -1
- package/dist/side-panel/layer-panel/dataset-layer-section.d.ts +1 -1
- package/dist/side-panel/layer-panel/dataset-layer-section.js +19 -3
- package/dist/side-panel/layer-panel/dataset-section.d.ts +2 -2
- package/dist/side-panel/layer-panel/dimension-scale-selector.d.ts +1 -1
- package/dist/side-panel/layer-panel/how-to-button.d.ts +1 -1
- package/dist/side-panel/layer-panel/layer-color-selector.d.ts +3 -3
- package/dist/side-panel/layer-panel/layer-column-config.d.ts +1 -1
- package/dist/side-panel/layer-panel/layer-column-mode-config.d.ts +3 -3
- package/dist/side-panel/layer-panel/layer-config-group.d.ts +5 -5
- package/dist/side-panel/layer-panel/layer-configurator.d.ts +6 -4
- package/dist/side-panel/layer-panel/layer-configurator.js +408 -72
- package/dist/side-panel/layer-panel/layer-error-message.d.ts +1 -1
- package/dist/side-panel/layer-panel/layer-list.d.ts +2 -2
- package/dist/side-panel/layer-panel/layer-panel-header.d.ts +5 -5
- package/dist/side-panel/layer-panel/layer-panel-header.js +2 -2
- package/dist/side-panel/layer-panel/layer-panel.d.ts +1 -1
- package/dist/side-panel/layer-panel/layer-type-dropdown-list.d.ts +2 -2
- package/dist/side-panel/layer-panel/layer-type-list-item.d.ts +2 -2
- package/dist/side-panel/layer-panel/layer-type-selector.d.ts +1 -1
- package/dist/side-panel/layer-panel/radius-by-zoom-input.d.ts +1 -1
- package/dist/side-panel/layer-panel/raster-tile-layer-configurator.d.ts +2 -2
- package/dist/side-panel/layer-panel/raster-tile-layer-configurator.js +127 -27
- package/dist/side-panel/layer-panel/scenegraph-model-selector.d.ts +24 -0
- package/dist/side-panel/layer-panel/scenegraph-model-selector.js +123 -0
- package/dist/side-panel/layer-panel/single-color-palette.d.ts +1 -1
- package/dist/side-panel/layer-panel/text-label-panel.d.ts +2 -2
- package/dist/side-panel/layer-panel/text-label-panel.js +11 -2
- package/dist/side-panel/layer-panel/vector-tile-layer-configurator.d.ts +3 -3
- package/dist/side-panel/layer-panel/vis-config-by-field-selector.d.ts +1 -1
- package/dist/side-panel/layer-panel/vis-config-slider.d.ts +3 -1
- package/dist/side-panel/layer-panel/vis-config-slider.js +7 -3
- package/dist/side-panel/layer-panel/vis-config-switch.d.ts +1 -1
- package/dist/side-panel/map-manager.d.ts +1 -1
- package/dist/side-panel/map-style-panel/map-layer-group-color-picker.d.ts +1 -1
- package/dist/side-panel/map-style-panel/map-layer-group-item.d.ts +2 -2
- package/dist/side-panel/map-style-panel/map-layer-selector.d.ts +1 -1
- package/dist/side-panel/map-style-panel/map-style-selector.d.ts +1 -1
- package/dist/side-panel/panel-header-action.d.ts +1 -1
- package/dist/side-panel/panel-header.d.ts +13 -12
- package/dist/side-panel/panel-header.js +9 -2
- package/dist/side-panel/panel-tab.d.ts +5 -5
- package/dist/side-panel/panel-tab.js +4 -4
- package/dist/side-panel/panel-title.d.ts +1 -1
- package/dist/side-panel/panel-toggle.d.ts +1 -1
- package/dist/side-panel/panel-view-list-toggle.d.ts +3 -3
- package/dist/side-panel/side-bar.d.ts +2 -2
- package/dist/side-panel.d.ts +1 -1
- package/dist/side-panel.js +5 -1
- package/dist/types.d.ts +3 -3
- package/package.json +41 -29
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
var
|
|
4
|
+
var _typeof3 = require("@babel/runtime/helpers/typeof");
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
8
|
exports.StyledColorSelectorWrapper = exports.PanelLabelWrapper = void 0;
|
|
9
9
|
exports["default"] = EffectConfiguratorFactory;
|
|
10
|
+
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
10
11
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
11
12
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
12
13
|
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
|
@@ -17,12 +18,14 @@ var _constants = require("@kepler.gl/constants");
|
|
|
17
18
|
var _utils = require("@kepler.gl/utils");
|
|
18
19
|
var _rangeSlider = _interopRequireDefault(require("../common/range-slider"));
|
|
19
20
|
var _icons = require("../common/icons");
|
|
21
|
+
var _styledComponents2 = require("../common/styled-components");
|
|
20
22
|
var _effectTimeConfigurator = _interopRequireDefault(require("./effect-time-configurator"));
|
|
21
23
|
var _compactColorPicker = _interopRequireDefault(require("./compact-color-picker"));
|
|
22
|
-
var
|
|
24
|
+
var _surfaceFogSection = _interopRequireWildcard(require("./surface-fog-section"));
|
|
25
|
+
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12, _templateObject13, _templateObject14, _templateObject15, _templateObject16, _templateObject17, _templateObject18; // SPDX-License-Identifier: MIT
|
|
23
26
|
// Copyright contributors to the kepler.gl project
|
|
24
27
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
25
|
-
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" !=
|
|
28
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof3(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
|
|
26
29
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
27
30
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
28
31
|
var StyledEffectConfigurator = _styledComponents["default"].div.attrs({
|
|
@@ -40,8 +43,8 @@ var StyledVerticalSeparator = _styledComponents["default"].div(_templateObject4
|
|
|
40
43
|
return props.theme.inputBgd;
|
|
41
44
|
});
|
|
42
45
|
var StyledWrapper = _styledComponents["default"].div(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: ", "px;\n"])), function (props) {
|
|
43
|
-
var _props
|
|
44
|
-
return (_props
|
|
46
|
+
var _props$$marginBottom;
|
|
47
|
+
return (_props$$marginBottom = props.$marginBottom) !== null && _props$$marginBottom !== void 0 ? _props$$marginBottom : 9;
|
|
45
48
|
});
|
|
46
49
|
var StyledConfigSection = _styledComponents["default"].div(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: column;\n"])));
|
|
47
50
|
var SectionTitle = _styledComponents["default"].div(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["\n font-size: ", ";\n color: ", ";\n margin-bottom: 5px;\n text-transform: capitalize;\n"])), function (props) {
|
|
@@ -68,14 +71,36 @@ var RegularSectionTitleWrapper = _styledComponents["default"].div.attrs({
|
|
|
68
71
|
var RegularSliderWrapper = _styledComponents["default"].div.attrs({
|
|
69
72
|
className: 'effect-configurator__pp-section-control'
|
|
70
73
|
})(_templateObject12 || (_templateObject12 = (0, _taggedTemplateLiteral2["default"])(["\n height: 32px;\n .kg-range-slider__input {\n height: 32px;\n text-align: center;\n padding: 3px 6px;\n }\n .kg-slider {\n padding-left: 6px;\n }\n .kg-range-slider {\n padding: 0px !important;\n }\n"])));
|
|
74
|
+
var StyledCheckboxWrapper = _styledComponents["default"].div.attrs({
|
|
75
|
+
className: 'effect-configurator__pp-section-checkbox'
|
|
76
|
+
})(_templateObject13 || (_templateObject13 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n cursor: pointer;\n"])));
|
|
77
|
+
var StyledCheckbox = _styledComponents["default"].input(_templateObject14 || (_templateObject14 = (0, _taggedTemplateLiteral2["default"])(["\n margin-right: 6px;\n cursor: pointer;\n accent-color: ", ";\n"])), function (props) {
|
|
78
|
+
return props.theme.activeColor;
|
|
79
|
+
});
|
|
80
|
+
var StyledCheckboxLabel = _styledComponents["default"].label(_templateObject15 || (_templateObject15 = (0, _taggedTemplateLiteral2["default"])(["\n font-size: ", ";\n color: ", ";\n cursor: pointer;\n white-space: nowrap;\n"])), function (props) {
|
|
81
|
+
return props.theme.inputFontSize;
|
|
82
|
+
}, function (props) {
|
|
83
|
+
return props.theme.effectPanelTextSecondary1;
|
|
84
|
+
});
|
|
85
|
+
var StyledHintTooltip = (0, _styledComponents["default"])(_styledComponents2.Tooltip)(_templateObject16 || (_templateObject16 = (0, _taggedTemplateLiteral2["default"])(["\n &.__react_component_tooltip {\n max-width: 220px;\n white-space: normal;\n line-height: 1.4;\n text-align: left;\n }\n"])));
|
|
86
|
+
var StyledHintIcon = _styledComponents["default"].span(_templateObject17 || (_templateObject17 = (0, _taggedTemplateLiteral2["default"])(["\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 14px;\n height: 14px;\n margin-left: 6px;\n border-radius: 50%;\n font-size: 9px;\n font-weight: 600;\n line-height: 1;\n color: ", ";\n border: 1px solid ", ";\n cursor: help;\n &:hover {\n color: ", ";\n border-color: ", ";\n }\n"])), function (props) {
|
|
87
|
+
return props.theme.labelColor;
|
|
88
|
+
}, function (props) {
|
|
89
|
+
return props.theme.labelColor;
|
|
90
|
+
}, function (props) {
|
|
91
|
+
return props.theme.textColorHl;
|
|
92
|
+
}, function (props) {
|
|
93
|
+
return props.theme.textColorHl;
|
|
94
|
+
});
|
|
95
|
+
var StyledColorCheckboxRow = _styledComponents["default"].div(_templateObject18 || (_templateObject18 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 8px;\n"])));
|
|
71
96
|
var COMMON_SLIDER_PROPS = {
|
|
72
97
|
showInput: true,
|
|
73
98
|
isRanged: false,
|
|
74
99
|
step: 0.001,
|
|
75
100
|
label: 'value'
|
|
76
101
|
};
|
|
77
|
-
EffectConfiguratorFactory.deps = [_rangeSlider["default"], _effectTimeConfigurator["default"]];
|
|
78
|
-
function EffectConfiguratorFactory(RangeSlider, EffectTimeConfigurator) {
|
|
102
|
+
EffectConfiguratorFactory.deps = [_rangeSlider["default"], _effectTimeConfigurator["default"], _surfaceFogSection["default"]];
|
|
103
|
+
function EffectConfiguratorFactory(RangeSlider, EffectTimeConfigurator, SurfaceFogElevationSection) {
|
|
79
104
|
var ShadowEffectConfigurator = function ShadowEffectConfigurator(_ref) {
|
|
80
105
|
var effect = _ref.effect,
|
|
81
106
|
updateEffectConfig = _ref.updateEffectConfig;
|
|
@@ -83,11 +108,18 @@ function EffectConfiguratorFactory(RangeSlider, EffectTimeConfigurator) {
|
|
|
83
108
|
id = effect.id;
|
|
84
109
|
var sliderProps = (0, _react.useMemo)(function () {
|
|
85
110
|
var propNames = ['shadowIntensity', 'ambientLightIntensity', 'sunLightIntensity'];
|
|
111
|
+
var descriptions = effect.getParameterDescriptions();
|
|
86
112
|
return propNames.map(function (propName) {
|
|
113
|
+
var _desc$min, _desc$max;
|
|
114
|
+
var desc = descriptions.find(function (d) {
|
|
115
|
+
return d.name === propName;
|
|
116
|
+
});
|
|
117
|
+
var min = (_desc$min = desc === null || desc === void 0 ? void 0 : desc.min) !== null && _desc$min !== void 0 ? _desc$min : 0;
|
|
118
|
+
var max = (_desc$max = desc === null || desc === void 0 ? void 0 : desc.max) !== null && _desc$max !== void 0 ? _desc$max : 1;
|
|
87
119
|
return {
|
|
88
120
|
value1: parameters[propName],
|
|
89
|
-
range: [
|
|
90
|
-
value0:
|
|
121
|
+
range: [min, max],
|
|
122
|
+
value0: min,
|
|
91
123
|
onChange: function onChange(value, event) {
|
|
92
124
|
updateEffectConfig(event, id, {
|
|
93
125
|
parameters: (0, _defineProperty2["default"])({}, propName, value[1])
|
|
@@ -95,7 +127,7 @@ function EffectConfiguratorFactory(RangeSlider, EffectTimeConfigurator) {
|
|
|
95
127
|
}
|
|
96
128
|
};
|
|
97
129
|
});
|
|
98
|
-
}, [id, parameters, updateEffectConfig]);
|
|
130
|
+
}, [id, effect, parameters, updateEffectConfig]);
|
|
99
131
|
var onTimeParametersChanged = (0, _react.useCallback)(function (parameters) {
|
|
100
132
|
updateEffectConfig(null, id, {
|
|
101
133
|
parameters: _objectSpread(_objectSpread(_objectSpread({}, parameters.timestamp ? {
|
|
@@ -130,27 +162,27 @@ function EffectConfiguratorFactory(RangeSlider, EffectTimeConfigurator) {
|
|
|
130
162
|
timeMode: parameters.timeMode,
|
|
131
163
|
onChange: onTimeParametersChanged
|
|
132
164
|
}), /*#__PURE__*/_react["default"].createElement(StyledVerticalSeparator, null), /*#__PURE__*/_react["default"].createElement(StyledWrapper, {
|
|
133
|
-
marginBottom: 0
|
|
165
|
+
$marginBottom: 0
|
|
134
166
|
}, /*#__PURE__*/_react["default"].createElement(SectionTitle, null, 'Shadow')), /*#__PURE__*/_react["default"].createElement(StyledWrapper, {
|
|
135
|
-
marginBottom: 16
|
|
167
|
+
$marginBottom: 16
|
|
136
168
|
}, /*#__PURE__*/_react["default"].createElement(_compactColorPicker["default"], {
|
|
137
169
|
label: 'Color',
|
|
138
170
|
color: colorPickerProps[2].colorSets[0].selectedColor,
|
|
139
171
|
onSetColor: colorPickerProps[2].colorSets[0].setColor,
|
|
140
172
|
Icon: _icons.ArrowDownSmall
|
|
141
173
|
}), /*#__PURE__*/_react["default"].createElement(StyledConfigSection, null, /*#__PURE__*/_react["default"].createElement(SectionSubTitle, null, "Intensity"), /*#__PURE__*/_react["default"].createElement(StyleSliderWrapper, null, /*#__PURE__*/_react["default"].createElement(RangeSlider, (0, _extends2["default"])({}, COMMON_SLIDER_PROPS, sliderProps[0]))))), /*#__PURE__*/_react["default"].createElement(StyledWrapper, {
|
|
142
|
-
marginBottom: 0
|
|
174
|
+
$marginBottom: 0
|
|
143
175
|
}, /*#__PURE__*/_react["default"].createElement(SectionTitle, null, 'Ambient light')), /*#__PURE__*/_react["default"].createElement(StyledWrapper, {
|
|
144
|
-
marginBottom: 16
|
|
176
|
+
$marginBottom: 16
|
|
145
177
|
}, /*#__PURE__*/_react["default"].createElement(_compactColorPicker["default"], {
|
|
146
178
|
label: 'Color',
|
|
147
179
|
color: colorPickerProps[0].colorSets[0].selectedColor,
|
|
148
180
|
onSetColor: colorPickerProps[0].colorSets[0].setColor,
|
|
149
181
|
Icon: _icons.ArrowDownSmall
|
|
150
182
|
}), /*#__PURE__*/_react["default"].createElement(StyledConfigSection, null, /*#__PURE__*/_react["default"].createElement(SectionSubTitle, null, "Intensity"), /*#__PURE__*/_react["default"].createElement(StyleSliderWrapper, null, /*#__PURE__*/_react["default"].createElement(RangeSlider, (0, _extends2["default"])({}, COMMON_SLIDER_PROPS, sliderProps[1]))))), /*#__PURE__*/_react["default"].createElement(StyledWrapper, {
|
|
151
|
-
marginBottom: 0
|
|
183
|
+
$marginBottom: 0
|
|
152
184
|
}, /*#__PURE__*/_react["default"].createElement(SectionTitle, null, 'Sun light')), /*#__PURE__*/_react["default"].createElement(StyledWrapper, {
|
|
153
|
-
marginBottom: 0
|
|
185
|
+
$marginBottom: 0
|
|
154
186
|
}, /*#__PURE__*/_react["default"].createElement(_compactColorPicker["default"], {
|
|
155
187
|
label: 'Color',
|
|
156
188
|
color: colorPickerProps[1].colorSets[0].selectedColor,
|
|
@@ -159,18 +191,30 @@ function EffectConfiguratorFactory(RangeSlider, EffectTimeConfigurator) {
|
|
|
159
191
|
}), /*#__PURE__*/_react["default"].createElement(StyledConfigSection, null, /*#__PURE__*/_react["default"].createElement(SectionSubTitle, null, "Intensity"), /*#__PURE__*/_react["default"].createElement(StyleSliderWrapper, null, /*#__PURE__*/_react["default"].createElement(RangeSlider, (0, _extends2["default"])({}, COMMON_SLIDER_PROPS, sliderProps[2]))))));
|
|
160
192
|
};
|
|
161
193
|
var defaultUniforms = {};
|
|
194
|
+
var ELEVATION_EXTRA_PARAMS = new Set(['heightEnd', 'animateHeight', 'linearEasing']);
|
|
162
195
|
var PostProcessingEffectConfigurator = function PostProcessingEffectConfigurator(_ref2) {
|
|
163
196
|
var _effect$deckEffect;
|
|
164
197
|
var effect = _ref2.effect,
|
|
165
198
|
updateEffectConfig = _ref2.updateEffectConfig;
|
|
166
|
-
var uniforms = ((_effect$deckEffect = effect.deckEffect) === null || _effect$deckEffect === void 0 ? void 0 : _effect$deckEffect.module.
|
|
199
|
+
var uniforms = ((_effect$deckEffect = effect.deckEffect) === null || _effect$deckEffect === void 0 ? void 0 : _effect$deckEffect.module.propTypes) || defaultUniforms;
|
|
167
200
|
var parameterDescriptions = effect.getParameterDescriptions();
|
|
168
201
|
var parameters = effect.parameters,
|
|
169
202
|
id = effect.id;
|
|
203
|
+
var hasElevationSection = parameterDescriptions.some(function (d) {
|
|
204
|
+
return d.name === 'animateHeight';
|
|
205
|
+
});
|
|
170
206
|
var flatParameterDescriptions = (0, _react.useMemo)(function () {
|
|
171
207
|
return parameterDescriptions.reduce(function (acc, description) {
|
|
172
|
-
if (description.
|
|
173
|
-
|
|
208
|
+
if (hasElevationSection && ELEVATION_EXTRA_PARAMS.has(description.name)) return acc;
|
|
209
|
+
if (hasElevationSection && description.name === 'height') {
|
|
210
|
+
acc.push(_objectSpread(_objectSpread({}, description), {}, {
|
|
211
|
+
type: _surfaceFogSection.ELEVATION_SECTION_TYPE
|
|
212
|
+
}));
|
|
213
|
+
return acc;
|
|
214
|
+
}
|
|
215
|
+
if (description.type === 'color') {
|
|
216
|
+
acc.push(description);
|
|
217
|
+
} else if (description.type === 'array') {
|
|
174
218
|
if (Array.isArray(description.defaultValue)) {
|
|
175
219
|
description.defaultValue.forEach(function (_, index) {
|
|
176
220
|
var _description$label;
|
|
@@ -185,19 +229,55 @@ function EffectConfiguratorFactory(RangeSlider, EffectTimeConfigurator) {
|
|
|
185
229
|
}
|
|
186
230
|
return acc;
|
|
187
231
|
}, []);
|
|
188
|
-
}, [parameterDescriptions]);
|
|
232
|
+
}, [parameterDescriptions, hasElevationSection]);
|
|
189
233
|
var controls = (0, _react.useMemo)(function () {
|
|
190
234
|
return flatParameterDescriptions.map(function (desc) {
|
|
235
|
+
if (desc.type === _surfaceFogSection.ELEVATION_SECTION_TYPE) {
|
|
236
|
+
return {
|
|
237
|
+
isElevationSection: true
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
if (desc.type === 'color') {
|
|
241
|
+
return {
|
|
242
|
+
isColor: true,
|
|
243
|
+
label: desc.label || desc.name,
|
|
244
|
+
paramName: desc.name,
|
|
245
|
+
color: parameters[desc.name] || desc.defaultValue || [255, 255, 255],
|
|
246
|
+
onSetColor: function onSetColor(v) {
|
|
247
|
+
return updateEffectConfig(null, id, {
|
|
248
|
+
parameters: (0, _defineProperty2["default"])({}, desc.name, v)
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
if (desc.type === 'checkbox') {
|
|
254
|
+
var _label = typeof desc.label === 'string' ? desc.label : desc.name;
|
|
255
|
+
return {
|
|
256
|
+
isCheckbox: true,
|
|
257
|
+
label: _label,
|
|
258
|
+
paramName: desc.name,
|
|
259
|
+
checked: Boolean(parameters[desc.name]),
|
|
260
|
+
tooltip: desc.tooltip,
|
|
261
|
+
onChange: function onChange() {
|
|
262
|
+
return updateEffectConfig(null, id, {
|
|
263
|
+
parameters: (0, _defineProperty2["default"])({}, desc.name, !parameters[desc.name])
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
};
|
|
267
|
+
}
|
|
191
268
|
var paramName = desc.name;
|
|
192
|
-
var
|
|
193
|
-
if (
|
|
269
|
+
var rawUniform = uniforms[desc.name];
|
|
270
|
+
if (rawUniform && rawUniform["private"]) {
|
|
194
271
|
return null;
|
|
195
272
|
}
|
|
273
|
+
|
|
274
|
+
// luma.gl 9 wraps array propTypes as {value: [...]}
|
|
275
|
+
var uniform = rawUniform && (0, _typeof2["default"])(rawUniform) === 'object' && Array.isArray(rawUniform.value) ? rawUniform.value : rawUniform;
|
|
196
276
|
var prevValue = parameters[paramName];
|
|
197
277
|
var label = desc.label === false ? false : desc.label || desc.name;
|
|
198
278
|
|
|
199
279
|
// the uniform is [number, number] array
|
|
200
|
-
if (uniform.length === 2) {
|
|
280
|
+
if (Array.isArray(uniform) && uniform.length === 2) {
|
|
201
281
|
return {
|
|
202
282
|
label: label,
|
|
203
283
|
value1: prevValue[desc.index || 0] || 0,
|
|
@@ -212,12 +292,12 @@ function EffectConfiguratorFactory(RangeSlider, EffectTimeConfigurator) {
|
|
|
212
292
|
}
|
|
213
293
|
// the uniform is a plain number without any description
|
|
214
294
|
else if ((0, _utils.isNumber)(uniform)) {
|
|
215
|
-
var _desc$
|
|
295
|
+
var _desc$min2, _desc$max2, _desc$min3;
|
|
216
296
|
return {
|
|
217
297
|
label: label,
|
|
218
298
|
value1: prevValue !== null && prevValue !== void 0 ? prevValue : 0,
|
|
219
|
-
range: [(_desc$
|
|
220
|
-
value0: (_desc$
|
|
299
|
+
range: [(_desc$min2 = desc.min) !== null && _desc$min2 !== void 0 ? _desc$min2 : 0, (_desc$max2 = desc.max) !== null && _desc$max2 !== void 0 ? _desc$max2 : 500],
|
|
300
|
+
value0: (_desc$min3 = desc.min) !== null && _desc$min3 !== void 0 ? _desc$min3 : 0,
|
|
221
301
|
onChange: function onChange(newValue, event) {
|
|
222
302
|
updateEffectConfig(event, id, {
|
|
223
303
|
parameters: (0, _defineProperty2["default"])({}, paramName, newValue[1])
|
|
@@ -226,13 +306,36 @@ function EffectConfiguratorFactory(RangeSlider, EffectTimeConfigurator) {
|
|
|
226
306
|
};
|
|
227
307
|
}
|
|
228
308
|
// the uniform description is {value: 0, min: 0, max: 1, ...}
|
|
229
|
-
else if ((0, _utils.isNumber)(uniform.value)) {
|
|
230
|
-
var _ref3, _ref4, _desc$
|
|
309
|
+
else if (uniform && (0, _utils.isNumber)(uniform.value)) {
|
|
310
|
+
var _ref3, _ref4, _desc$min4, _ref5, _ref6, _desc$max3;
|
|
311
|
+
var rangeMin = (_ref3 = (_ref4 = (_desc$min4 = desc.min) !== null && _desc$min4 !== void 0 ? _desc$min4 : uniform.min) !== null && _ref4 !== void 0 ? _ref4 : uniform.softMin) !== null && _ref3 !== void 0 ? _ref3 : 0;
|
|
312
|
+
var rangeMax = (_ref5 = (_ref6 = (_desc$max3 = desc.max) !== null && _desc$max3 !== void 0 ? _desc$max3 : uniform.max) !== null && _ref6 !== void 0 ? _ref6 : uniform.softMax) !== null && _ref5 !== void 0 ? _ref5 : 1;
|
|
313
|
+
var rangeSpan = rangeMax - rangeMin;
|
|
314
|
+
var step = rangeSpan > 10 ? 1 : 0.001;
|
|
231
315
|
return {
|
|
232
316
|
label: label,
|
|
233
317
|
value1: prevValue || 0,
|
|
234
|
-
range: [
|
|
235
|
-
value0:
|
|
318
|
+
range: [rangeMin, rangeMax],
|
|
319
|
+
value0: rangeMin,
|
|
320
|
+
step: step,
|
|
321
|
+
onChange: function onChange(newValue, event) {
|
|
322
|
+
updateEffectConfig(event, id, {
|
|
323
|
+
parameters: (0, _defineProperty2["default"])({}, paramName, newValue[1])
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
// Parameter defined in effect description but not in shader propTypes
|
|
329
|
+
else if (desc.min !== undefined && desc.max !== undefined) {
|
|
330
|
+
var _ref7;
|
|
331
|
+
var _rangeSpan = desc.max - desc.min;
|
|
332
|
+
var _step = _rangeSpan > 10 ? 1 : 0.001;
|
|
333
|
+
return {
|
|
334
|
+
label: label,
|
|
335
|
+
value1: (_ref7 = prevValue !== null && prevValue !== void 0 ? prevValue : desc.defaultValue) !== null && _ref7 !== void 0 ? _ref7 : 0,
|
|
336
|
+
range: [desc.min, desc.max],
|
|
337
|
+
value0: desc.min,
|
|
338
|
+
step: _step,
|
|
236
339
|
onChange: function onChange(newValue, event) {
|
|
237
340
|
updateEffectConfig(event, id, {
|
|
238
341
|
parameters: (0, _defineProperty2["default"])({}, paramName, newValue[1])
|
|
@@ -247,21 +350,117 @@ function EffectConfiguratorFactory(RangeSlider, EffectTimeConfigurator) {
|
|
|
247
350
|
}, [flatParameterDescriptions, id, parameters, updateEffectConfig, uniforms]);
|
|
248
351
|
return /*#__PURE__*/_react["default"].createElement(StyledEffectConfigurator, {
|
|
249
352
|
key: effect.id
|
|
250
|
-
},
|
|
251
|
-
var
|
|
252
|
-
|
|
253
|
-
|
|
353
|
+
}, function () {
|
|
354
|
+
var elements = [];
|
|
355
|
+
var i = 0;
|
|
356
|
+
var _loop = function _loop() {
|
|
357
|
+
var control = controls[i];
|
|
358
|
+
if (!control) {
|
|
359
|
+
i++;
|
|
360
|
+
return 0; // continue
|
|
361
|
+
}
|
|
362
|
+
if ('isColor' in control) {
|
|
363
|
+
var _control$onSetColor2;
|
|
364
|
+
var nextControl = i + 1 < controls.length ? controls[i + 1] : null;
|
|
365
|
+
if (nextControl && 'isCheckbox' in nextControl) {
|
|
366
|
+
var _control$onSetColor;
|
|
367
|
+
var cbTooltipId = nextControl.tooltip ? "effect-cb-hint-".concat(effect.id, "-").concat(i) : undefined;
|
|
368
|
+
elements.push( /*#__PURE__*/_react["default"].createElement(StyledColorCheckboxRow, {
|
|
369
|
+
key: "".concat(effect.id, "-").concat(i)
|
|
370
|
+
}, /*#__PURE__*/_react["default"].createElement(_compactColorPicker["default"], {
|
|
371
|
+
label: typeof control.label === 'string' ? control.label : 'Color',
|
|
372
|
+
color: control.color,
|
|
373
|
+
onSetColor: (_control$onSetColor = control.onSetColor) !== null && _control$onSetColor !== void 0 ? _control$onSetColor : function () {
|
|
374
|
+
/* noop */
|
|
375
|
+
},
|
|
376
|
+
Icon: _icons.ArrowDownSmall
|
|
377
|
+
}), /*#__PURE__*/_react["default"].createElement(StyledCheckboxWrapper, {
|
|
378
|
+
onClick: function onClick() {
|
|
379
|
+
return nextControl.onChange();
|
|
380
|
+
}
|
|
381
|
+
}, /*#__PURE__*/_react["default"].createElement(StyledCheckbox, {
|
|
382
|
+
type: "checkbox",
|
|
383
|
+
checked: nextControl.checked,
|
|
384
|
+
onChange: function onChange() {
|
|
385
|
+
return nextControl.onChange();
|
|
386
|
+
},
|
|
387
|
+
onClick: function onClick(e) {
|
|
388
|
+
return e.stopPropagation();
|
|
389
|
+
}
|
|
390
|
+
}), /*#__PURE__*/_react["default"].createElement(StyledCheckboxLabel, null, nextControl.label), nextControl.tooltip ? /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(StyledHintIcon, {
|
|
391
|
+
"data-tip": true,
|
|
392
|
+
"data-for": cbTooltipId,
|
|
393
|
+
onClick: function onClick(e) {
|
|
394
|
+
return e.stopPropagation();
|
|
395
|
+
}
|
|
396
|
+
}, "?"), /*#__PURE__*/_react["default"].createElement(StyledHintTooltip, {
|
|
397
|
+
id: cbTooltipId,
|
|
398
|
+
effect: "solid",
|
|
399
|
+
delayShow: 200
|
|
400
|
+
}, nextControl.tooltip)) : null)));
|
|
401
|
+
i += 2;
|
|
402
|
+
return 0; // continue
|
|
403
|
+
}
|
|
404
|
+
elements.push( /*#__PURE__*/_react["default"].createElement(RegularOuterWrapper, {
|
|
405
|
+
key: "".concat(effect.id, "-").concat(i)
|
|
406
|
+
}, /*#__PURE__*/_react["default"].createElement(_compactColorPicker["default"], {
|
|
407
|
+
label: typeof control.label === 'string' ? control.label : 'Color',
|
|
408
|
+
color: control.color,
|
|
409
|
+
onSetColor: (_control$onSetColor2 = control.onSetColor) !== null && _control$onSetColor2 !== void 0 ? _control$onSetColor2 : function () {
|
|
410
|
+
/* noop */
|
|
411
|
+
},
|
|
412
|
+
Icon: _icons.ArrowDownSmall
|
|
413
|
+
})));
|
|
414
|
+
i++;
|
|
415
|
+
return 0; // continue
|
|
416
|
+
}
|
|
417
|
+
if ('isCheckbox' in control) {
|
|
418
|
+
elements.push( /*#__PURE__*/_react["default"].createElement(RegularOuterWrapper, {
|
|
419
|
+
key: "".concat(effect.id, "-").concat(i)
|
|
420
|
+
}, /*#__PURE__*/_react["default"].createElement(StyledCheckboxWrapper, {
|
|
421
|
+
onClick: function onClick() {
|
|
422
|
+
return control.onChange();
|
|
423
|
+
}
|
|
424
|
+
}, /*#__PURE__*/_react["default"].createElement(StyledCheckbox, {
|
|
425
|
+
type: "checkbox",
|
|
426
|
+
checked: control.checked,
|
|
427
|
+
onChange: function onChange() {
|
|
428
|
+
return control.onChange();
|
|
429
|
+
},
|
|
430
|
+
onClick: function onClick(e) {
|
|
431
|
+
return e.stopPropagation();
|
|
432
|
+
}
|
|
433
|
+
}), /*#__PURE__*/_react["default"].createElement(StyledCheckboxLabel, null, control.label))));
|
|
434
|
+
i++;
|
|
435
|
+
return 0; // continue
|
|
436
|
+
}
|
|
437
|
+
if ('isElevationSection' in control) {
|
|
438
|
+
elements.push( /*#__PURE__*/_react["default"].createElement(SurfaceFogElevationSection, {
|
|
439
|
+
key: "".concat(effect.id, "-elevation"),
|
|
440
|
+
effect: effect,
|
|
441
|
+
updateEffectConfig: updateEffectConfig
|
|
442
|
+
}));
|
|
443
|
+
i++;
|
|
444
|
+
return 0; // continue
|
|
445
|
+
}
|
|
446
|
+
elements.push( /*#__PURE__*/_react["default"].createElement(RegularOuterWrapper, {
|
|
447
|
+
key: "".concat(effect.id, "-").concat(i)
|
|
448
|
+
}, control.label ? /*#__PURE__*/_react["default"].createElement(RegularSectionTitleWrapper, null, control.label) : null, /*#__PURE__*/_react["default"].createElement(RegularSliderWrapper, null, /*#__PURE__*/_react["default"].createElement(RangeSlider, (0, _extends2["default"])({
|
|
449
|
+
key: i
|
|
450
|
+
}, COMMON_SLIDER_PROPS, control)))));
|
|
451
|
+
i++;
|
|
452
|
+
},
|
|
453
|
+
_ret;
|
|
454
|
+
while (i < flatParameterDescriptions.length) {
|
|
455
|
+
_ret = _loop();
|
|
456
|
+
if (_ret === 0) continue;
|
|
254
457
|
}
|
|
255
|
-
return
|
|
256
|
-
|
|
257
|
-
}, control.label ? /*#__PURE__*/_react["default"].createElement(RegularSectionTitleWrapper, null, control.label) : null, /*#__PURE__*/_react["default"].createElement(RegularSliderWrapper, null, /*#__PURE__*/_react["default"].createElement(RangeSlider, (0, _extends2["default"])({
|
|
258
|
-
key: parameterIndex
|
|
259
|
-
}, COMMON_SLIDER_PROPS, control))));
|
|
260
|
-
}));
|
|
458
|
+
return elements;
|
|
459
|
+
}());
|
|
261
460
|
};
|
|
262
|
-
var EffectConfigurator = function EffectConfigurator(
|
|
263
|
-
var effect =
|
|
264
|
-
updateEffectConfig =
|
|
461
|
+
var EffectConfigurator = function EffectConfigurator(_ref8) {
|
|
462
|
+
var effect = _ref8.effect,
|
|
463
|
+
updateEffectConfig = _ref8.updateEffectConfig;
|
|
265
464
|
return effect.type === _constants.LIGHT_AND_SHADOW_EFFECT.type ? /*#__PURE__*/_react["default"].createElement(ShadowEffectConfigurator, {
|
|
266
465
|
effect: effect,
|
|
267
466
|
updateEffectConfig: updateEffectConfig
|
|
@@ -272,4 +471,4 @@ function EffectConfiguratorFactory(RangeSlider, EffectTimeConfigurator) {
|
|
|
272
471
|
};
|
|
273
472
|
return (0, _reactIntl.injectIntl)(EffectConfigurator);
|
|
274
473
|
}
|
|
275
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcmVhY3RJbnRsIiwiX2NvbnN0YW50cyIsIl91dGlscyIsIl9yYW5nZVNsaWRlciIsIl9pY29ucyIsIl9lZmZlY3RUaW1lQ29uZmlndXJhdG9yIiwiX2NvbXBhY3RDb2xvclBpY2tlciIsIl90ZW1wbGF0ZU9iamVjdCIsIl90ZW1wbGF0ZU9iamVjdDIiLCJfdGVtcGxhdGVPYmplY3QzIiwiX3RlbXBsYXRlT2JqZWN0NCIsIl90ZW1wbGF0ZU9iamVjdDUiLCJfdGVtcGxhdGVPYmplY3Q2IiwiX3RlbXBsYXRlT2JqZWN0NyIsIl90ZW1wbGF0ZU9iamVjdDgiLCJfdGVtcGxhdGVPYmplY3Q5IiwiX3RlbXBsYXRlT2JqZWN0MTAiLCJfdGVtcGxhdGVPYmplY3QxMSIsIl90ZW1wbGF0ZU9iamVjdDEyIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0Iiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiU3R5bGVkRWZmZWN0Q29uZmlndXJhdG9yIiwic3R5bGVkIiwiZGl2IiwiYXR0cnMiLCJjbGFzc05hbWUiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsMiIsInByb3BzIiwidGhlbWUiLCJlZmZlY3RDb25maWd1cmF0b3JNYXJnaW4iLCJlZmZlY3RDb25maWd1cmF0b3JQYWRkaW5nIiwiUGFuZWxMYWJlbFdyYXBwZXIiLCJleHBvcnRzIiwiU3R5bGVkQ29sb3JTZWxlY3RvcldyYXBwZXIiLCJTdHlsZWRWZXJ0aWNhbFNlcGFyYXRvciIsImlucHV0QmdkIiwiU3R5bGVkV3JhcHBlciIsIl9wcm9wcyRtYXJnaW5Cb3R0b20iLCJtYXJnaW5Cb3R0b20iLCJTdHlsZWRDb25maWdTZWN0aW9uIiwiU2VjdGlvblRpdGxlIiwiaW5wdXRGb250U2l6ZSIsImVmZmVjdFBhbmVsVGV4dFNlY29uZGFyeTEiLCJTZWN0aW9uU3ViVGl0bGUiLCJlZmZlY3RQYW5lbFRleHRTZWNvbmRhcnkyIiwiU3R5bGVTbGlkZXJXcmFwcGVyIiwiUmVndWxhck91dGVyV3JhcHBlciIsIlJlZ3VsYXJTZWN0aW9uVGl0bGVXcmFwcGVyIiwiUmVndWxhclNsaWRlcldyYXBwZXIiLCJDT01NT05fU0xJREVSX1BST1BTIiwic2hvd0lucHV0IiwiaXNSYW5nZWQiLCJzdGVwIiwibGFiZWwiLCJFZmZlY3RDb25maWd1cmF0b3JGYWN0b3J5IiwiZGVwcyIsIlJhbmdlU2xpZGVyRmFjdG9yeSIsIkVmZmVjdFRpbWVDb25maWd1cmF0b3JGYWN0b3J5IiwiUmFuZ2VTbGlkZXIiLCJFZmZlY3RUaW1lQ29uZmlndXJhdG9yIiwiU2hhZG93RWZmZWN0Q29uZmlndXJhdG9yIiwiX3JlZiIsImVmZmVjdCIsInVwZGF0ZUVmZmVjdENvbmZpZyIsInBhcmFtZXRlcnMiLCJpZCIsInNsaWRlclByb3BzIiwidXNlTWVtbyIsInByb3BOYW1lcyIsIm1hcCIsInByb3BOYW1lIiwidmFsdWUxIiwicmFuZ2UiLCJ2YWx1ZTAiLCJvbkNoYW5nZSIsInZhbHVlIiwiZXZlbnQiLCJvblRpbWVQYXJhbWV0ZXJzQ2hhbmdlZCIsInVzZUNhbGxiYWNrIiwidGltZXN0YW1wIiwidGltZXpvbmUiLCJ0aW1lTW9kZSIsImNvbG9yUGlja2VyUHJvcHMiLCJjb2xvclNldHMiLCJzZWxlY3RlZENvbG9yIiwic2V0Q29sb3IiLCJ2IiwiY3JlYXRlRWxlbWVudCIsImtleSIsImNvbG9yIiwib25TZXRDb2xvciIsIkljb24iLCJBcnJvd0Rvd25TbWFsbCIsIl9leHRlbmRzMiIsImRlZmF1bHRVbmlmb3JtcyIsIlBvc3RQcm9jZXNzaW5nRWZmZWN0Q29uZmlndXJhdG9yIiwiX3JlZjIiLCJfZWZmZWN0JGRlY2tFZmZlY3QiLCJ1bmlmb3JtcyIsImRlY2tFZmZlY3QiLCJtb2R1bGUiLCJwYXJhbWV0ZXJEZXNjcmlwdGlvbnMiLCJnZXRQYXJhbWV0ZXJEZXNjcmlwdGlvbnMiLCJmbGF0UGFyYW1ldGVyRGVzY3JpcHRpb25zIiwicmVkdWNlIiwiYWNjIiwiZGVzY3JpcHRpb24iLCJ0eXBlIiwiQXJyYXkiLCJpc0FycmF5IiwiZGVmYXVsdFZhbHVlIiwiXyIsImluZGV4IiwiX2Rlc2NyaXB0aW9uJGxhYmVsIiwiY29udHJvbHMiLCJkZXNjIiwicGFyYW1OYW1lIiwibmFtZSIsInVuaWZvcm0iLCJwcmV2VmFsdWUiLCJuZXdWYWx1ZSIsImlzTnVtYmVyIiwiX2Rlc2MkbWluIiwiX2Rlc2MkbWF4IiwiX2Rlc2MkbWluMiIsIm1pbiIsIm1heCIsIl9yZWYzIiwiX3JlZjQiLCJfZGVzYyRtaW4zIiwiX3JlZjUiLCJfcmVmNiIsIl9kZXNjJG1heDIiLCJfcmVmNyIsIl9yZWY4IiwiX2Rlc2MkbWluNCIsInNvZnRNaW4iLCJzb2Z0TWF4IiwicGFyYW1ldGVySW5kZXgiLCJjb250cm9sIiwiY29uY2F0IiwiRWZmZWN0Q29uZmlndXJhdG9yIiwiX3JlZjkiLCJMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCIsImluamVjdEludGwiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvZWZmZWN0cy9lZmZlY3QtY29uZmlndXJhdG9yLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgUmVhY3QsIHt1c2VDYWxsYmFjaywgdXNlTWVtb30gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQge2luamVjdEludGwsIEludGxTaGFwZX0gZnJvbSAncmVhY3QtaW50bCc7XG5cbmltcG9ydCB7TElHSFRfQU5EX1NIQURPV19FRkZFQ1R9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7aXNOdW1iZXJ9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtFZmZlY3QsIEVmZmVjdFVwZGF0ZVByb3BzfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcblxuaW1wb3J0IFJhbmdlU2xpZGVyRmFjdG9yeSBmcm9tICcuLi9jb21tb24vcmFuZ2Utc2xpZGVyJztcbmltcG9ydCB7QXJyb3dEb3duU21hbGx9IGZyb20gJy4uL2NvbW1vbi9pY29ucyc7XG5pbXBvcnQgRWZmZWN0VGltZUNvbmZpZ3VyYXRvckZhY3RvcnkgZnJvbSAnLi9lZmZlY3QtdGltZS1jb25maWd1cmF0b3InO1xuaW1wb3J0IENvbXBhY3RDb2xvclBpY2tlciBmcm9tICcuL2NvbXBhY3QtY29sb3ItcGlja2VyJztcblxuZXhwb3J0IHR5cGUgRWZmZWN0Q29uZmlndXJhdG9yUHJvcHMgPSB7XG4gIGVmZmVjdDogRWZmZWN0O1xuICB1cGRhdGVFZmZlY3RDb25maWc6IChcbiAgICBlOiBFdmVudCB8IG51bGwgfCB1bmRlZmluZWQsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBjb25maWc6IFBhcnRpYWw8RWZmZWN0VXBkYXRlUHJvcHM+XG4gICkgPT4gdm9pZDtcbn07XG5cbmNvbnN0IFN0eWxlZEVmZmVjdENvbmZpZ3VyYXRvciA9IHN0eWxlZC5kaXYuYXR0cnMoe1xuICBjbGFzc05hbWU6ICdlZmZlY3QtcGFuZWxfX2NvbmZpZydcbn0pYFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5lZmZlY3RDb25maWd1cmF0b3JNYXJnaW59O1xuICBwYWRkaW5nOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmVmZmVjdENvbmZpZ3VyYXRvclBhZGRpbmd9O1xuYDtcblxuZXhwb3J0IGNvbnN0IFBhbmVsTGFiZWxXcmFwcGVyID0gc3R5bGVkLmRpdi5hdHRycyh7XG4gIGNsYXNzTmFtZTogJ3NpZGUtcGFuZWwtcGFuZWxfX2xhYmVsLXdyYXBwZXInXG59KWBcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IHNlbGYtc3RhcnQ7XG4gIG1hcmdpbi1ib3R0b206IDExcHg7XG5cbiAgLnNpZGUtcGFuZWwtcGFuZWxfX2xhYmVsIHtcbiAgICBtYXJnaW4tdG9wOiAycHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMHB4O1xuICB9XG5gO1xuXG5leHBvcnQgY29uc3QgU3R5bGVkQ29sb3JTZWxlY3RvcldyYXBwZXIgPSBzdHlsZWQuZGl2YFxuICBtYXJnaW4tcmlnaHQ6IDVweDtcbiAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgbWFyZ2luLWJvdHRvbTogNnB4O1xuICBtYXJnaW4tdG9wOiAycHg7XG5gO1xuXG5jb25zdCBTdHlsZWRWZXJ0aWNhbFNlcGFyYXRvciA9IHN0eWxlZC5kaXZgXG4gIGhlaWdodDogMXB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmlucHV0QmdkfTtcbiAgbWFyZ2luLXRvcDogMjBweDtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgbWFyZ2luLWxlZnQ6IC0yMHB4O1xuYDtcblxudHlwZSBTdHlsZWRXcmFwcGVyUHJvcHMgPSB7XG4gIG1hcmdpbkJvdHRvbT86IG51bWJlcjtcbn07XG5jb25zdCBTdHlsZWRXcmFwcGVyID0gc3R5bGVkLmRpdjxTdHlsZWRXcmFwcGVyUHJvcHM+YFxuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIG1hcmdpbi1ib3R0b206ICR7cHJvcHMgPT4gcHJvcHMubWFyZ2luQm90dG9tID8/IDl9cHg7XG5gO1xuXG5jb25zdCBTdHlsZWRDb25maWdTZWN0aW9uID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbmA7XG5cbmNvbnN0IFNlY3Rpb25UaXRsZSA9IHN0eWxlZC5kaXZgXG4gIGZvbnQtc2l6ZTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pbnB1dEZvbnRTaXplfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuZWZmZWN0UGFuZWxUZXh0U2Vjb25kYXJ5MX07XG4gIG1hcmdpbi1ib3R0b206IDVweDtcbiAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XG5gO1xuXG5jb25zdCBTZWN0aW9uU3ViVGl0bGUgPSBzdHlsZWQuZGl2YFxuICBmb250LXNpemU6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuaW5wdXRGb250U2l6ZX07XG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmVmZmVjdFBhbmVsVGV4dFNlY29uZGFyeTJ9O1xuICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gIG1hcmdpbi1sZWZ0OiA2cHg7XG5gO1xuXG5jb25zdCBTdHlsZVNsaWRlcldyYXBwZXIgPSBzdHlsZWQuZGl2YFxuICBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0O1xuICB3aWR0aDogMTk5cHg7XG4gIGhlaWdodDogMzJweDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgLmtnLXJhbmdlLXNsaWRlcl9faW5wdXQge1xuICAgIGhlaWdodDogMzJweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgcGFkZGluZzogM3B4IDZweDtcbiAgfVxuICAua2ctc2xpZGVyIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDZweDtcbiAgfVxuICAua2ctcmFuZ2Utc2xpZGVyIHtcbiAgICBwYWRkaW5nOiAwcHggIWltcG9ydGFudDtcbiAgfVxuYDtcblxuY29uc3QgUmVndWxhck91dGVyV3JhcHBlciA9IHN0eWxlZC5kaXYuYXR0cnMoe1xuICBjbGFzc05hbWU6ICdlZmZlY3QtY29uZmlndXJhdG9yX19wcC1zZWN0aW9uJ1xufSlgXG4gIG1hcmdpbi1ib3R0b206IDhweDtcbmA7XG5cbmNvbnN0IFJlZ3VsYXJTZWN0aW9uVGl0bGVXcmFwcGVyID0gc3R5bGVkLmRpdi5hdHRycyh7XG4gIGNsYXNzTmFtZTogJ2VmZmVjdC1jb25maWd1cmF0b3JfX3BwLXNlY3Rpb24tdGl0bGUnXG59KWBcbiAgZm9udC1zaXplOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmlucHV0Rm9udFNpemV9O1xuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5lZmZlY3RQYW5lbFRleHRTZWNvbmRhcnkxfTtcbiAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XG4gIG1hcmdpbi1ib3R0b206IC0zcHg7XG5gO1xuXG5jb25zdCBSZWd1bGFyU2xpZGVyV3JhcHBlciA9IHN0eWxlZC5kaXYuYXR0cnMoe1xuICBjbGFzc05hbWU6ICdlZmZlY3QtY29uZmlndXJhdG9yX19wcC1zZWN0aW9uLWNvbnRyb2wnXG59KWBcbiAgaGVpZ2h0OiAzMnB4O1xuICAua2ctcmFuZ2Utc2xpZGVyX19pbnB1dCB7XG4gICAgaGVpZ2h0OiAzMnB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBwYWRkaW5nOiAzcHggNnB4O1xuICB9XG4gIC5rZy1zbGlkZXIge1xuICAgIHBhZGRpbmctbGVmdDogNnB4O1xuICB9XG4gIC5rZy1yYW5nZS1zbGlkZXIge1xuICAgIHBhZGRpbmc6IDBweCAhaW1wb3J0YW50O1xuICB9XG5gO1xuXG5jb25zdCBDT01NT05fU0xJREVSX1BST1BTID0ge1xuICBzaG93SW5wdXQ6IHRydWUsXG4gIGlzUmFuZ2VkOiBmYWxzZSxcbiAgc3RlcDogMC4wMDEsXG4gIGxhYmVsOiAndmFsdWUnXG59O1xuXG50eXBlIEVmZmVjdFBhcmFtZXRlckRlc2NyaXB0aW9uRmxhdHRlbmVkID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGxhYmVsPzogc3RyaW5nIHwgZmFsc2UgfCAoc3RyaW5nIHwgZmFsc2UpW107XG4gIG1pbjogbnVtYmVyO1xuICBtYXg6IG51bWJlcjtcbiAgaW5kZXg/OiBudW1iZXI7XG59O1xuXG5FZmZlY3RDb25maWd1cmF0b3JGYWN0b3J5LmRlcHMgPSBbUmFuZ2VTbGlkZXJGYWN0b3J5LCBFZmZlY3RUaW1lQ29uZmlndXJhdG9yRmFjdG9yeV07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEVmZmVjdENvbmZpZ3VyYXRvckZhY3RvcnkoXG4gIFJhbmdlU2xpZGVyOiBSZXR1cm5UeXBlPHR5cGVvZiBSYW5nZVNsaWRlckZhY3Rvcnk+LFxuICBFZmZlY3RUaW1lQ29uZmlndXJhdG9yOiBSZXR1cm5UeXBlPHR5cGVvZiBFZmZlY3RUaW1lQ29uZmlndXJhdG9yRmFjdG9yeT5cbik6IFJlYWN0LkZDPEVmZmVjdENvbmZpZ3VyYXRvclByb3BzPiB7XG4gIGNvbnN0IFNoYWRvd0VmZmVjdENvbmZpZ3VyYXRvcjogUmVhY3QuRkM8RWZmZWN0Q29uZmlndXJhdG9yUHJvcHM+ID0gKHtcbiAgICBlZmZlY3QsXG4gICAgdXBkYXRlRWZmZWN0Q29uZmlnXG4gIH0pID0+IHtcbiAgICBjb25zdCB7cGFyYW1ldGVycywgaWR9ID0gZWZmZWN0O1xuXG4gICAgY29uc3Qgc2xpZGVyUHJvcHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgIGNvbnN0IHByb3BOYW1lcyA9IFsnc2hhZG93SW50ZW5zaXR5JywgJ2FtYmllbnRMaWdodEludGVuc2l0eScsICdzdW5MaWdodEludGVuc2l0eSddO1xuICAgICAgcmV0dXJuIHByb3BOYW1lcy5tYXAocHJvcE5hbWUgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZhbHVlMTogcGFyYW1ldGVyc1twcm9wTmFtZV0sXG4gICAgICAgICAgcmFuZ2U6IFswLCAxXSxcbiAgICAgICAgICB2YWx1ZTA6IDAsXG4gICAgICAgICAgb25DaGFuZ2U6ICh2YWx1ZTogbnVtYmVyW10sIGV2ZW50PzogRXZlbnQgfCBudWxsKSA9PiB7XG4gICAgICAgICAgICB1cGRhdGVFZmZlY3RDb25maWcoZXZlbnQsIGlkLCB7cGFyYW1ldGVyczoge1twcm9wTmFtZV06IHZhbHVlWzFdfX0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH0sIFtpZCwgcGFyYW1ldGVycywgdXBkYXRlRWZmZWN0Q29uZmlnXSk7XG5cbiAgICBjb25zdCBvblRpbWVQYXJhbWV0ZXJzQ2hhbmdlZCA9IHVzZUNhbGxiYWNrKFxuICAgICAgcGFyYW1ldGVycyA9PiB7XG4gICAgICAgIHVwZGF0ZUVmZmVjdENvbmZpZyhudWxsLCBpZCwge1xuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIC4uLihwYXJhbWV0ZXJzLnRpbWVzdGFtcCA/IHt0aW1lc3RhbXA6IHBhcmFtZXRlcnMudGltZXN0YW1wfSA6IG51bGwpLFxuICAgICAgICAgICAgLi4uKHBhcmFtZXRlcnMudGltZXpvbmUgPyB7dGltZXpvbmU6IHBhcmFtZXRlcnMudGltZXpvbmV9IDogbnVsbCksXG4gICAgICAgICAgICAuLi4ocGFyYW1ldGVycy50aW1lTW9kZSA/IHt0aW1lTW9kZTogcGFyYW1ldGVycy50aW1lTW9kZX0gOiBudWxsKVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgW2lkLCB1cGRhdGVFZmZlY3RDb25maWddXG4gICAgKTtcblxuICAgIGNvbnN0IGNvbG9yUGlja2VyUHJvcHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgIGNvbnN0IHByb3BOYW1lcyA9IFsnYW1iaWVudExpZ2h0Q29sb3InLCAnc3VuTGlnaHRDb2xvcicsICdzaGFkb3dDb2xvciddO1xuICAgICAgcmV0dXJuIHByb3BOYW1lcy5tYXAocHJvcE5hbWUgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbG9yU2V0czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzZWxlY3RlZENvbG9yOiBwYXJhbWV0ZXJzW3Byb3BOYW1lXSxcbiAgICAgICAgICAgICAgc2V0Q29sb3I6IHYgPT4gdXBkYXRlRWZmZWN0Q29uZmlnKG51bGwsIGlkLCB7cGFyYW1ldGVyczoge1twcm9wTmFtZV06IHZ9fSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9LCBbaWQsIHBhcmFtZXRlcnMsIHVwZGF0ZUVmZmVjdENvbmZpZ10pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTdHlsZWRFZmZlY3RDb25maWd1cmF0b3Iga2V5PXtlZmZlY3QuaWR9PlxuICAgICAgICA8UGFuZWxMYWJlbFdyYXBwZXI+XG4gICAgICAgICAgPFNlY3Rpb25UaXRsZT57J0RhdGUgJiBUaW1lJ308L1NlY3Rpb25UaXRsZT5cbiAgICAgICAgPC9QYW5lbExhYmVsV3JhcHBlcj5cbiAgICAgICAgPEVmZmVjdFRpbWVDb25maWd1cmF0b3JcbiAgICAgICAgICB0aW1lc3RhbXA9e3BhcmFtZXRlcnMudGltZXN0YW1wfVxuICAgICAgICAgIHRpbWV6b25lPXtwYXJhbWV0ZXJzLnRpbWV6b25lfVxuICAgICAgICAgIHRpbWVNb2RlPXtwYXJhbWV0ZXJzLnRpbWVNb2RlfVxuICAgICAgICAgIG9uQ2hhbmdlPXtvblRpbWVQYXJhbWV0ZXJzQ2hhbmdlZH1cbiAgICAgICAgLz5cblxuICAgICAgICA8U3R5bGVkVmVydGljYWxTZXBhcmF0b3IgLz5cblxuICAgICAgICA8U3R5bGVkV3JhcHBlciBtYXJnaW5Cb3R0b209ezB9PlxuICAgICAgICAgIDxTZWN0aW9uVGl0bGU+eydTaGFkb3cnfTwvU2VjdGlvblRpdGxlPlxuICAgICAgICA8L1N0eWxlZFdyYXBwZXI+XG4gICAgICAgIDxTdHlsZWRXcmFwcGVyIG1hcmdpbkJvdHRvbT17MTZ9PlxuICAgICAgICAgIDxDb21wYWN0Q29sb3JQaWNrZXJcbiAgICAgICAgICAgIGxhYmVsPXsnQ29sb3InfVxuICAgICAgICAgICAgY29sb3I9e2NvbG9yUGlja2VyUHJvcHNbMl0uY29sb3JTZXRzWzBdLnNlbGVjdGVkQ29sb3J9XG4gICAgICAgICAgICBvblNldENvbG9yPXtjb2xvclBpY2tlclByb3BzWzJdLmNvbG9yU2V0c1swXS5zZXRDb2xvcn1cbiAgICAgICAgICAgIEljb249e0Fycm93RG93blNtYWxsfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPFN0eWxlZENvbmZpZ1NlY3Rpb24+XG4gICAgICAgICAgICA8U2VjdGlvblN1YlRpdGxlPkludGVuc2l0eTwvU2VjdGlvblN1YlRpdGxlPlxuICAgICAgICAgICAgPFN0eWxlU2xpZGVyV3JhcHBlcj5cbiAgICAgICAgICAgICAgPFJhbmdlU2xpZGVyIHsuLi5DT01NT05fU0xJREVSX1BST1BTfSB7Li4uc2xpZGVyUHJvcHNbMF19IC8+XG4gICAgICAgICAgICA8L1N0eWxlU2xpZGVyV3JhcHBlcj5cbiAgICAgICAgICA8L1N0eWxlZENvbmZpZ1NlY3Rpb24+XG4gICAgICAgIDwvU3R5bGVkV3JhcHBlcj5cblxuICAgICAgICA8U3R5bGVkV3JhcHBlciBtYXJnaW5Cb3R0b209ezB9PlxuICAgICAgICAgIDxTZWN0aW9uVGl0bGU+eydBbWJpZW50IGxpZ2h0J308L1NlY3Rpb25UaXRsZT5cbiAgICAgICAgPC9TdHlsZWRXcmFwcGVyPlxuICAgICAgICA8U3R5bGVkV3JhcHBlciBtYXJnaW5Cb3R0b209ezE2fT5cbiAgICAgICAgICA8Q29tcGFjdENvbG9yUGlja2VyXG4gICAgICAgICAgICBsYWJlbD17J0NvbG9yJ31cbiAgICAgICAgICAgIGNvbG9yPXtjb2xvclBpY2tlclByb3BzWzBdLmNvbG9yU2V0c1swXS5zZWxlY3RlZENvbG9yfVxuICAgICAgICAgICAgb25TZXRDb2xvcj17Y29sb3JQaWNrZXJQcm9wc1swXS5jb2xvclNldHNbMF0uc2V0Q29sb3J9XG4gICAgICAgICAgICBJY29uPXtBcnJvd0Rvd25TbWFsbH1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxTdHlsZWRDb25maWdTZWN0aW9uPlxuICAgICAgICAgICAgPFNlY3Rpb25TdWJUaXRsZT5JbnRlbnNpdHk8L1NlY3Rpb25TdWJUaXRsZT5cbiAgICAgICAgICAgIDxTdHlsZVNsaWRlcldyYXBwZXI+XG4gICAgICAgICAgICAgIDxSYW5nZVNsaWRlciB7Li4uQ09NTU9OX1NMSURFUl9QUk9QU30gey4uLnNsaWRlclByb3BzWzFdfSAvPlxuICAgICAgICAgICAgPC9TdHlsZVNsaWRlcldyYXBwZXI+XG4gICAgICAgICAgPC9TdHlsZWRDb25maWdTZWN0aW9uPlxuICAgICAgICA8L1N0eWxlZFdyYXBwZXI+XG5cbiAgICAgICAgPFN0eWxlZFdyYXBwZXIgbWFyZ2luQm90dG9tPXswfT5cbiAgICAgICAgICA8U2VjdGlvblRpdGxlPnsnU3VuIGxpZ2h0J308L1NlY3Rpb25UaXRsZT5cbiAgICAgICAgPC9TdHlsZWRXcmFwcGVyPlxuICAgICAgICA8U3R5bGVkV3JhcHBlciBtYXJnaW5Cb3R0b209ezB9PlxuICAgICAgICAgIDxDb21wYWN0Q29sb3JQaWNrZXJcbiAgICAgICAgICAgIGxhYmVsPXsnQ29sb3InfVxuICAgICAgICAgICAgY29sb3I9e2NvbG9yUGlja2VyUHJvcHNbMV0uY29sb3JTZXRzWzBdLnNlbGVjdGVkQ29sb3J9XG4gICAgICAgICAgICBvblNldENvbG9yPXtjb2xvclBpY2tlclByb3BzWzFdLmNvbG9yU2V0c1swXS5zZXRDb2xvcn1cbiAgICAgICAgICAgIEljb249e0Fycm93RG93blNtYWxsfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPFN0eWxlZENvbmZpZ1NlY3Rpb24+XG4gICAgICAgICAgICA8U2VjdGlvblN1YlRpdGxlPkludGVuc2l0eTwvU2VjdGlvblN1YlRpdGxlPlxuICAgICAgICAgICAgPFN0eWxlU2xpZGVyV3JhcHBlcj5cbiAgICAgICAgICAgICAgPFJhbmdlU2xpZGVyIHsuLi5DT01NT05fU0xJREVSX1BST1BTfSB7Li4uc2xpZGVyUHJvcHNbMl19IC8+XG4gICAgICAgICAgICA8L1N0eWxlU2xpZGVyV3JhcHBlcj5cbiAgICAgICAgICA8L1N0eWxlZENvbmZpZ1NlY3Rpb24+XG4gICAgICAgIDwvU3R5bGVkV3JhcHBlcj5cbiAgICAgIDwvU3R5bGVkRWZmZWN0Q29uZmlndXJhdG9yPlxuICAgICk7XG4gIH07XG4gIGNvbnN0IGRlZmF1bHRVbmlmb3JtcyA9IHt9O1xuXG4gIGNvbnN0IFBvc3RQcm9jZXNzaW5nRWZmZWN0Q29uZmlndXJhdG9yOiBSZWFjdC5GQzxFZmZlY3RDb25maWd1cmF0b3JQcm9wcz4gPSAoe1xuICAgIGVmZmVjdCxcbiAgICB1cGRhdGVFZmZlY3RDb25maWdcbiAgfSkgPT4ge1xuICAgIGNvbnN0IHVuaWZvcm1zID0gZWZmZWN0LmRlY2tFZmZlY3Q/Lm1vZHVsZS51bmlmb3JtcyB8fCBkZWZhdWx0VW5pZm9ybXM7XG4gICAgY29uc3QgcGFyYW1ldGVyRGVzY3JpcHRpb25zID0gZWZmZWN0LmdldFBhcmFtZXRlckRlc2NyaXB0aW9ucygpO1xuICAgIGNvbnN0IHtwYXJhbWV0ZXJzLCBpZH0gPSBlZmZlY3Q7XG4gICAgY29uc3QgZmxhdFBhcmFtZXRlckRlc2NyaXB0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgcmV0dXJuIHBhcmFtZXRlckRlc2NyaXB0aW9ucy5yZWR1Y2UoKGFjYywgZGVzY3JpcHRpb24pID0+IHtcbiAgICAgICAgaWYgKGRlc2NyaXB0aW9uLnR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAvLyBzcGxpdCBhcnJheXMgb2YgY29udHJvbHMgaW50byBhIHNlcGFyYXRlIGNvbnRyb2xzIGZvciBlYWNoIGNvbXBvbmVudFxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRlc2NyaXB0aW9uLmRlZmF1bHRWYWx1ZSkpIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uLmRlZmF1bHRWYWx1ZS5mb3JFYWNoKChfLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICBhY2MucHVzaCh7XG4gICAgICAgICAgICAgICAgLi4uZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgICAgbGFiZWw6IGRlc2NyaXB0aW9uLmxhYmVsPy5baW5kZXhdXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFjYy5wdXNoKGRlc2NyaXB0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCBbXSBhcyBFZmZlY3RQYXJhbWV0ZXJEZXNjcmlwdGlvbkZsYXR0ZW5lZFtdKTtcbiAgICB9LCBbcGFyYW1ldGVyRGVzY3JpcHRpb25zXSk7XG5cbiAgICBjb25zdCBjb250cm9scyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgcmV0dXJuIGZsYXRQYXJhbWV0ZXJEZXNjcmlwdGlvbnMubWFwKGRlc2MgPT4ge1xuICAgICAgICBjb25zdCBwYXJhbU5hbWUgPSBkZXNjLm5hbWU7XG5cbiAgICAgICAgY29uc3QgdW5pZm9ybSA9IHVuaWZvcm1zW2Rlc2MubmFtZV07XG4gICAgICAgIGlmICgoIXVuaWZvcm0gJiYgdW5pZm9ybSAhPT0gMCkgfHwgdW5pZm9ybS5wcml2YXRlKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcmV2VmFsdWUgPSBwYXJhbWV0ZXJzW3BhcmFtTmFtZV07XG5cbiAgICAgICAgY29uc3QgbGFiZWwgPSBkZXNjLmxhYmVsID09PSBmYWxzZSA/IGZhbHNlIDogZGVzYy5sYWJlbCB8fCBkZXNjLm5hbWU7XG5cbiAgICAgICAgLy8gdGhlIHVuaWZvcm0gaXMgW251bWJlciwgbnVtYmVyXSBhcnJheVxuICAgICAgICBpZiAodW5pZm9ybS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICB2YWx1ZTE6IHByZXZWYWx1ZVtkZXNjLmluZGV4IHx8IDBdIHx8IDAsXG4gICAgICAgICAgICByYW5nZTogWzAsIDFdLFxuICAgICAgICAgICAgdmFsdWUwOiAwLFxuICAgICAgICAgICAgb25DaGFuZ2U6IChuZXdWYWx1ZTogbnVtYmVyW10sIGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIHVwZGF0ZUVmZmVjdENvbmZpZyhldmVudCwgaWQsIHtcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAgICAgICBbcGFyYW1OYW1lXTpcbiAgICAgICAgICAgICAgICAgICAgZGVzYy5pbmRleCA9PT0gMCA/IFtuZXdWYWx1ZVsxXSwgcHJldlZhbHVlWzFdXSA6IFtwcmV2VmFsdWVbMF0sIG5ld1ZhbHVlWzFdXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0aGUgdW5pZm9ybSBpcyBhIHBsYWluIG51bWJlciB3aXRob3V0IGFueSBkZXNjcmlwdGlvblxuICAgICAgICBlbHNlIGlmIChpc051bWJlcih1bmlmb3JtKSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICAgIHZhbHVlMTogcHJldlZhbHVlID8/IDAsXG4gICAgICAgICAgICByYW5nZTogW2Rlc2MubWluID8/IDAsIGRlc2MubWF4ID8/IDUwMF0sXG4gICAgICAgICAgICB2YWx1ZTA6IGRlc2MubWluID8/IDAsXG4gICAgICAgICAgICBvbkNoYW5nZTogKG5ld1ZhbHVlOiBudW1iZXJbXSwgZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgdXBkYXRlRWZmZWN0Q29uZmlnKGV2ZW50LCBpZCwge3BhcmFtZXRlcnM6IHtbcGFyYW1OYW1lXTogbmV3VmFsdWVbMV19fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0aGUgdW5pZm9ybSBkZXNjcmlwdGlvbiBpcyB7dmFsdWU6IDAsIG1pbjogMCwgbWF4OiAxLCAuLi59XG4gICAgICAgIGVsc2UgaWYgKGlzTnVtYmVyKHVuaWZvcm0udmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgICAgdmFsdWUxOiBwcmV2VmFsdWUgfHwgMCxcbiAgICAgICAgICAgIHJhbmdlOiBbXG4gICAgICAgICAgICAgIGRlc2MubWluID8/IHVuaWZvcm0ubWluID8/IHVuaWZvcm0uc29mdE1pbiA/PyAwLFxuICAgICAgICAgICAgICBkZXNjLm1heCA/PyB1bmlmb3JtLm1heCA/PyB1bmlmb3JtLnNvZnRNYXggPz8gMVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHZhbHVlMDogZGVzYy5taW4gPz8gdW5pZm9ybS5taW4gPz8gdW5pZm9ybS5zb2Z0TWluID8/IDAsXG4gICAgICAgICAgICBvbkNoYW5nZTogKG5ld1ZhbHVlOiBudW1iZXJbXSwgZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgdXBkYXRlRWZmZWN0Q29uZmlnKGV2ZW50LCBpZCwge3BhcmFtZXRlcnM6IHtbcGFyYW1OYW1lXTogbmV3VmFsdWVbMV19fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlnbm9yZSBldmVyeXRoaW5nIGVsc2UgZm9yIG5vd1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0pO1xuICAgIH0sIFtmbGF0UGFyYW1ldGVyRGVzY3JpcHRpb25zLCBpZCwgcGFyYW1ldGVycywgdXBkYXRlRWZmZWN0Q29uZmlnLCB1bmlmb3Jtc10pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTdHlsZWRFZmZlY3RDb25maWd1cmF0b3Iga2V5PXtlZmZlY3QuaWR9PlxuICAgICAgICB7ZmxhdFBhcmFtZXRlckRlc2NyaXB0aW9ucy5tYXAoKGRlc2MsIHBhcmFtZXRlckluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgY29udHJvbCA9IGNvbnRyb2xzW3BhcmFtZXRlckluZGV4XTtcbiAgICAgICAgICBpZiAoIWNvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8UmVndWxhck91dGVyV3JhcHBlciBrZXk9e2Ake2VmZmVjdC5pZH0tJHtwYXJhbWV0ZXJJbmRleH1gfT5cbiAgICAgICAgICAgICAge2NvbnRyb2wubGFiZWwgPyAoXG4gICAgICAgICAgICAgICAgPFJlZ3VsYXJTZWN0aW9uVGl0bGVXcmFwcGVyPntjb250cm9sLmxhYmVsfTwvUmVndWxhclNlY3Rpb25UaXRsZVdyYXBwZXI+XG4gICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICA8UmVndWxhclNsaWRlcldyYXBwZXI+XG4gICAgICAgICAgICAgICAgPFJhbmdlU2xpZGVyIGtleT17cGFyYW1ldGVySW5kZXh9IHsuLi5DT01NT05fU0xJREVSX1BST1BTfSB7Li4uY29udHJvbH0gLz5cbiAgICAgICAgICAgICAgPC9SZWd1bGFyU2xpZGVyV3JhcHBlcj5cbiAgICAgICAgICAgIDwvUmVndWxhck91dGVyV3JhcHBlcj5cbiAgICAgICAgICApO1xuICAgICAgICB9KX1cbiAgICAgIDwvU3R5bGVkRWZmZWN0Q29uZmlndXJhdG9yPlxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgRWZmZWN0Q29uZmlndXJhdG9yID0gKHtcbiAgICBlZmZlY3QsXG4gICAgdXBkYXRlRWZmZWN0Q29uZmlnXG4gIH06IEVmZmVjdENvbmZpZ3VyYXRvclByb3BzICYge2ludGw6IEludGxTaGFwZX0pID0+IHtcbiAgICByZXR1cm4gZWZmZWN0LnR5cGUgPT09IExJR0hUX0FORF9TSEFET1dfRUZGRUNULnR5cGUgPyAoXG4gICAgICA8U2hhZG93RWZmZWN0Q29uZmlndXJhdG9yIGVmZmVjdD17ZWZmZWN0fSB1cGRhdGVFZmZlY3RDb25maWc9e3VwZGF0ZUVmZmVjdENvbmZpZ30gLz5cbiAgICApIDogKFxuICAgICAgPFBvc3RQcm9jZXNzaW5nRWZmZWN0Q29uZmlndXJhdG9yIGVmZmVjdD17ZWZmZWN0fSB1cGRhdGVFZmZlY3RDb25maWc9e3VwZGF0ZUVmZmVjdENvbmZpZ30gLz5cbiAgICApO1xuICB9O1xuXG4gIHJldHVybiBpbmplY3RJbnRsKEVmZmVjdENvbmZpZ3VyYXRvcik7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGlCQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxVQUFBLEdBQUFILE9BQUE7QUFFQSxJQUFBSSxVQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxNQUFBLEdBQUFMLE9BQUE7QUFHQSxJQUFBTSxZQUFBLEdBQUFKLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBTyxNQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSx1QkFBQSxHQUFBTixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVMsbUJBQUEsR0FBQVAsc0JBQUEsQ0FBQUYsT0FBQTtBQUF3RCxJQUFBVSxlQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGlCQUFBLEVBQUFDLGlCQUFBLEVBQUFDLGlCQUFBLEVBZHhEO0FBQ0E7QUFBQSxTQUFBQyx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSx5QkFBQUMsQ0FBQSxXQUFBQSxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxLQUFBRixDQUFB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a0JBQWtCLEVBQUVtQyxRQUFRLENBQUMsQ0FBQztJQUU3RSxvQkFDRXhJLE1BQUEsWUFBQTZILGFBQUEsQ0FBQ2xFLHdCQUF3QjtNQUFDbUUsR0FBRyxFQUFFMUIsTUFBTSxDQUFDRztJQUFHLEdBQ3RDc0MseUJBQXlCLENBQUNsQyxHQUFHLENBQUMsVUFBQzhDLElBQUksRUFBRXVCLGNBQWMsRUFBSztNQUN2RCxJQUFNQyxPQUFPLEdBQUd6QixRQUFRLENBQUN3QixjQUFjLENBQUM7TUFDeEMsSUFBSSxDQUFDQyxPQUFPLEVBQUU7UUFDWixPQUFPLElBQUk7TUFDYjtNQUVBLG9CQUNFakwsTUFBQSxZQUFBNkgsYUFBQSxDQUFDekMsbUJBQW1CO1FBQUMwQyxHQUFHLEtBQUFvRCxNQUFBLENBQUs5RSxNQUFNLENBQUNHLEVBQUUsT0FBQTJFLE1BQUEsQ0FBSUYsY0FBYztNQUFHLEdBQ3hEQyxPQUFPLENBQUN0RixLQUFLLGdCQUNaM0YsTUFBQSxZQUFBNkgsYUFBQSxDQUFDeEMsMEJBQTBCLFFBQUU0RixPQUFPLENBQUN0RixLQUFrQyxDQUFDLEdBQ3RFLElBQUksZUFDUjNGLE1BQUEsWUFBQTZILGFBQUEsQ0FBQ3ZDLG9CQUFvQixxQkFDbkJ0RixNQUFBLFlBQUE2SCxhQUFBLENBQUM3QixXQUFXLE1BQUFtQyxTQUFBO1FBQUNMLEdBQUcsRUFBRWtEO01BQWUsR0FBS3pGLG1CQUFtQixFQUFNMEYsT0FBTyxDQUFHLENBQ3JELENBQ0gsQ0FBQztJQUUxQixDQUFDLENBQ3VCLENBQUM7RUFFL0IsQ0FBQztFQUVELElBQU1FLGtCQUFrQixHQUFHLFNBQXJCQSxrQkFBa0JBLENBQUFDLEtBQUEsRUFHMkI7SUFBQSxJQUZqRGhGLE1BQU0sR0FBQWdGLEtBQUEsQ0FBTmhGLE1BQU07TUFDTkMsa0JBQWtCLEdBQUErRSxLQUFBLENBQWxCL0Usa0JBQWtCO0lBRWxCLE9BQU9ELE1BQU0sQ0FBQzZDLElBQUksS0FBS29DLGtDQUF1QixDQUFDcEMsSUFBSSxnQkFDakRqSixNQUFBLFlBQUE2SCxhQUFBLENBQUMzQix3QkFBd0I7TUFBQ0UsTUFBTSxFQUFFQSxNQUFPO01BQUNDLGtCQUFrQixFQUFFQTtJQUFtQixDQUFFLENBQUMsZ0JBRXBGckcsTUFBQSxZQUFBNkgsYUFBQSxDQUFDUSxnQ0FBZ0M7TUFBQ2pDLE1BQU0sRUFBRUEsTUFBTztNQUFDQyxrQkFBa0IsRUFBRUE7SUFBbUIsQ0FBRSxDQUM1RjtFQUNILENBQUM7RUFFRCxPQUFPLElBQUFpRixxQkFBVSxFQUFDSCxrQkFBa0IsQ0FBQztBQUN2QyIsImlnbm9yZUxpc3QiOltdfQ==
|
|
474
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcmVhY3RJbnRsIiwiX2NvbnN0YW50cyIsIl91dGlscyIsIl9yYW5nZVNsaWRlciIsIl9pY29ucyIsIl9zdHlsZWRDb21wb25lbnRzMiIsIl9lZmZlY3RUaW1lQ29uZmlndXJhdG9yIiwiX2NvbXBhY3RDb2xvclBpY2tlciIsIl9zdXJmYWNlRm9nU2VjdGlvbiIsIl90ZW1wbGF0ZU9iamVjdCIsIl90ZW1wbGF0ZU9iamVjdDIiLCJfdGVtcGxhdGVPYmplY3QzIiwiX3RlbXBsYXRlT2JqZWN0NCIsIl90ZW1wbGF0ZU9iamVjdDUiLCJfdGVtcGxhdGVPYmplY3Q2IiwiX3RlbXBsYXRlT2JqZWN0NyIsIl90ZW1wbGF0ZU9iamVjdDgiLCJfdGVtcGxhdGVPYmplY3Q5IiwiX3RlbXBsYXRlT2JqZWN0MTAiLCJfdGVtcGxhdGVPYmplY3QxMSIsIl90ZW1wbGF0ZU9iamVjdDEyIiwiX3RlbXBsYXRlT2JqZWN0MTMiLCJfdGVtcGxhdGVPYmplY3QxNCIsIl90ZW1wbGF0ZU9iamVjdDE1IiwiX3RlbXBsYXRlT2JqZWN0MTYiLCJfdGVtcGxhdGVPYmplY3QxNyIsIl90ZW1wbGF0ZU9iamVjdDE4IiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mMyIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIlN0eWxlZEVmZmVjdENvbmZpZ3VyYXRvciIsInN0eWxlZCIsImRpdiIsImF0dHJzIiwiY2xhc3NOYW1lIiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbDIiLCJwcm9wcyIsInRoZW1lIiwiZWZmZWN0Q29uZmlndXJhdG9yTWFyZ2luIiwiZWZmZWN0Q29uZmlndXJhdG9yUGFkZGluZyIsIlBhbmVsTGFiZWxXcmFwcGVyIiwiZXhwb3J0cyIsIlN0eWxlZENvbG9yU2VsZWN0b3JXcmFwcGVyIiwiU3R5bGVkVmVydGljYWxTZXBhcmF0b3IiLCJpbnB1dEJnZCIsIlN0eWxlZFdyYXBwZXIiLCJfcHJvcHMkJG1hcmdpbkJvdHRvbSIsIiRtYXJnaW5Cb3R0b20iLCJTdHlsZWRDb25maWdTZWN0aW9uIiwiU2VjdGlvblRpdGxlIiwiaW5wdXRGb250U2l6ZSIsImVmZmVjdFBhbmVsVGV4dFNlY29uZGFyeTEiLCJTZWN0aW9uU3ViVGl0bGUiLCJlZmZlY3RQYW5lbFRleHRTZWNvbmRhcnkyIiwiU3R5bGVTbGlkZXJXcmFwcGVyIiwiUmVndWxhck91dGVyV3JhcHBlciIsIlJlZ3VsYXJTZWN0aW9uVGl0bGVXcmFwcGVyIiwiUmVndWxhclNsaWRlcldyYXBwZXIiLCJTdHlsZWRDaGVja2JveFdyYXBwZXIiLCJTdHlsZWRDaGVja2JveCIsImlucHV0IiwiYWN0aXZlQ29sb3IiLCJTdHlsZWRDaGVja2JveExhYmVsIiwibGFiZWwiLCJTdHlsZWRIaW50VG9vbHRpcCIsIlRvb2x0aXAiLCJTdHlsZWRIaW50SWNvbiIsInNwYW4iLCJsYWJlbENvbG9yIiwidGV4dENvbG9ySGwiLCJTdHlsZWRDb2xvckNoZWNrYm94Um93IiwiQ09NTU9OX1NMSURFUl9QUk9QUyIsInNob3dJbnB1dCIsImlzUmFuZ2VkIiwic3RlcCIsIkVmZmVjdENvbmZpZ3VyYXRvckZhY3RvcnkiLCJkZXBzIiwiUmFuZ2VTbGlkZXJGYWN0b3J5IiwiRWZmZWN0VGltZUNvbmZpZ3VyYXRvckZhY3RvcnkiLCJTdXJmYWNlRm9nRWxldmF0aW9uU2VjdGlvbkZhY3RvcnkiLCJSYW5nZVNsaWRlciIsIkVmZmVjdFRpbWVDb25maWd1cmF0b3IiLCJTdXJmYWNlRm9nRWxldmF0aW9uU2VjdGlvbiIsIlNoYWRvd0VmZmVjdENvbmZpZ3VyYXRvciIsIl9yZWYiLCJlZmZlY3QiLCJ1cGRhdGVFZmZlY3RDb25maWciLCJwYXJhbWV0ZXJzIiwiaWQiLCJzbGlkZXJQcm9wcyIsInVzZU1lbW8iLCJwcm9wTmFtZXMiLCJkZXNjcmlwdGlvbnMiLCJnZXRQYXJhbWV0ZXJEZXNjcmlwdGlvbnMiLCJtYXAiLCJwcm9wTmFtZSIsIl9kZXNjJG1pbiIsIl9kZXNjJG1heCIsImRlc2MiLCJmaW5kIiwiZCIsIm5hbWUiLCJtaW4iLCJtYXgiLCJ2YWx1ZTEiLCJyYW5nZSIsInZhbHVlMCIsIm9uQ2hhbmdlIiwidmFsdWUiLCJldmVudCIsIm9uVGltZVBhcmFtZXRlcnNDaGFuZ2VkIiwidXNlQ2FsbGJhY2siLCJ0aW1lc3RhbXAiLCJ0aW1lem9uZSIsInRpbWVNb2RlIiwiY29sb3JQaWNrZXJQcm9wcyIsImNvbG9yU2V0cyIsInNlbGVjdGVkQ29sb3IiLCJzZXRDb2xvciIsInYiLCJjcmVhdGVFbGVtZW50Iiwia2V5IiwiY29sb3IiLCJvblNldENvbG9yIiwiSWNvbiIsIkFycm93RG93blNtYWxsIiwiX2V4dGVuZHMyIiwiZGVmYXVsdFVuaWZvcm1zIiwiRUxFVkFUSU9OX0VYVFJBX1BBUkFNUyIsIlNldCIsIlBvc3RQcm9jZXNzaW5nRWZmZWN0Q29uZmlndXJhdG9yIiwiX3JlZjIiLCJfZWZmZWN0JGRlY2tFZmZlY3QiLCJ1bmlmb3JtcyIsImRlY2tFZmZlY3QiLCJtb2R1bGUiLCJwcm9wVHlwZXMiLCJwYXJhbWV0ZXJEZXNjcmlwdGlvbnMiLCJoYXNFbGV2YXRpb25TZWN0aW9uIiwic29tZSIsImZsYXRQYXJhbWV0ZXJEZXNjcmlwdGlvbnMiLCJyZWR1Y2UiLCJhY2MiLCJkZXNjcmlwdGlvbiIsInR5cGUiLCJFTEVWQVRJT05fU0VDVElPTl9UWVBFIiwiQXJyYXkiLCJpc0FycmF5IiwiZGVmYXVsdFZhbHVlIiwiXyIsImluZGV4IiwiX2Rlc2NyaXB0aW9uJGxhYmVsIiwiY29udHJvbHMiLCJpc0VsZXZhdGlvblNlY3Rpb24iLCJpc0NvbG9yIiwicGFyYW1OYW1lIiwiaXNDaGVja2JveCIsImNoZWNrZWQiLCJCb29sZWFuIiwidG9vbHRpcCIsInJhd1VuaWZvcm0iLCJ1bmlmb3JtIiwiX3R5cGVvZjIiLCJwcmV2VmFsdWUiLCJuZXdWYWx1ZSIsImlzTnVtYmVyIiwiX2Rlc2MkbWluMiIsIl9kZXNjJG1heDIiLCJfZGVzYyRtaW4zIiwiX3JlZjMiLCJfcmVmNCIsIl9kZXNjJG1pbjQiLCJfcmVmNSIsIl9yZWY2IiwiX2Rlc2MkbWF4MyIsInJhbmdlTWluIiwic29mdE1pbiIsInJhbmdlTWF4Iiwic29mdE1heCIsInJhbmdlU3BhbiIsInVuZGVmaW5lZCIsIl9yZWY3IiwiZWxlbWVudHMiLCJfbG9vcCIsImNvbnRyb2wiLCJfY29udHJvbCRvblNldENvbG9yMiIsIm5leHRDb250cm9sIiwiX2NvbnRyb2wkb25TZXRDb2xvciIsImNiVG9vbHRpcElkIiwiY29uY2F0Iiwib25DbGljayIsInN0b3BQcm9wYWdhdGlvbiIsIkZyYWdtZW50IiwiZGVsYXlTaG93IiwiX3JldCIsIkVmZmVjdENvbmZpZ3VyYXRvciIsIl9yZWY4IiwiTElHSFRfQU5EX1NIQURPV19FRkZFQ1QiLCJpbmplY3RJbnRsIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2VmZmVjdHMvZWZmZWN0LWNvbmZpZ3VyYXRvci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IFJlYWN0LCB7dXNlQ2FsbGJhY2ssIHVzZU1lbW99IGZyb20gJ3JlYWN0JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtpbmplY3RJbnRsLCBJbnRsU2hhcGV9IGZyb20gJ3JlYWN0LWludGwnO1xuXG5pbXBvcnQge0xJR0hUX0FORF9TSEFET1dfRUZGRUNUfSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge2lzTnVtYmVyfSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7RWZmZWN0LCBFZmZlY3RVcGRhdGVQcm9wc30gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5cbmltcG9ydCBSYW5nZVNsaWRlckZhY3RvcnkgZnJvbSAnLi4vY29tbW9uL3JhbmdlLXNsaWRlcic7XG5pbXBvcnQge0Fycm93RG93blNtYWxsfSBmcm9tICcuLi9jb21tb24vaWNvbnMnO1xuaW1wb3J0IHtUb29sdGlwfSBmcm9tICcuLi9jb21tb24vc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IEVmZmVjdFRpbWVDb25maWd1cmF0b3JGYWN0b3J5IGZyb20gJy4vZWZmZWN0LXRpbWUtY29uZmlndXJhdG9yJztcbmltcG9ydCBDb21wYWN0Q29sb3JQaWNrZXIgZnJvbSAnLi9jb21wYWN0LWNvbG9yLXBpY2tlcic7XG5pbXBvcnQgU3VyZmFjZUZvZ0VsZXZhdGlvblNlY3Rpb25GYWN0b3J5LCB7RUxFVkFUSU9OX1NFQ1RJT05fVFlQRX0gZnJvbSAnLi9zdXJmYWNlLWZvZy1zZWN0aW9uJztcblxuZXhwb3J0IHR5cGUgRWZmZWN0Q29uZmlndXJhdG9yUHJvcHMgPSB7XG4gIGVmZmVjdDogRWZmZWN0O1xuICB1cGRhdGVFZmZlY3RDb25maWc6IChcbiAgICBlOiBFdmVudCB8IG51bGwgfCB1bmRlZmluZWQsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBjb25maWc6IFBhcnRpYWw8RWZmZWN0VXBkYXRlUHJvcHM+XG4gICkgPT4gdm9pZDtcbn07XG5cbmNvbnN0IFN0eWxlZEVmZmVjdENvbmZpZ3VyYXRvciA9IHN0eWxlZC5kaXYuYXR0cnMoe1xuICBjbGFzc05hbWU6ICdlZmZlY3QtcGFuZWxfX2NvbmZpZydcbn0pYFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5lZmZlY3RDb25maWd1cmF0b3JNYXJnaW59O1xuICBwYWRkaW5nOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmVmZmVjdENvbmZpZ3VyYXRvclBhZGRpbmd9O1xuYDtcblxuZXhwb3J0IGNvbnN0IFBhbmVsTGFiZWxXcmFwcGVyID0gc3R5bGVkLmRpdi5hdHRycyh7XG4gIGNsYXNzTmFtZTogJ3NpZGUtcGFuZWwtcGFuZWxfX2xhYmVsLXdyYXBwZXInXG59KWBcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IHNlbGYtc3RhcnQ7XG4gIG1hcmdpbi1ib3R0b206IDExcHg7XG5cbiAgLnNpZGUtcGFuZWwtcGFuZWxfX2xhYmVsIHtcbiAgICBtYXJnaW4tdG9wOiAycHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMHB4O1xuICB9XG5gO1xuXG5leHBvcnQgY29uc3QgU3R5bGVkQ29sb3JTZWxlY3RvcldyYXBwZXIgPSBzdHlsZWQuZGl2YFxuICBtYXJnaW4tcmlnaHQ6IDVweDtcbiAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgbWFyZ2luLWJvdHRvbTogNnB4O1xuICBtYXJnaW4tdG9wOiAycHg7XG5gO1xuXG5jb25zdCBTdHlsZWRWZXJ0aWNhbFNlcGFyYXRvciA9IHN0eWxlZC5kaXZgXG4gIGhlaWdodDogMXB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmlucHV0QmdkfTtcbiAgbWFyZ2luLXRvcDogMjBweDtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgbWFyZ2luLWxlZnQ6IC0yMHB4O1xuYDtcblxudHlwZSBTdHlsZWRXcmFwcGVyUHJvcHMgPSB7XG4gICRtYXJnaW5Cb3R0b20/OiBudW1iZXI7XG59O1xuY29uc3QgU3R5bGVkV3JhcHBlciA9IHN0eWxlZC5kaXY8U3R5bGVkV3JhcHBlclByb3BzPmBcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBtYXJnaW4tYm90dG9tOiAke3Byb3BzID0+IHByb3BzLiRtYXJnaW5Cb3R0b20gPz8gOX1weDtcbmA7XG5cbmNvbnN0IFN0eWxlZENvbmZpZ1NlY3Rpb24gPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuYDtcblxuY29uc3QgU2VjdGlvblRpdGxlID0gc3R5bGVkLmRpdmBcbiAgZm9udC1zaXplOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmlucHV0Rm9udFNpemV9O1xuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5lZmZlY3RQYW5lbFRleHRTZWNvbmRhcnkxfTtcbiAgbWFyZ2luLWJvdHRvbTogNXB4O1xuICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcbmA7XG5cbmNvbnN0IFNlY3Rpb25TdWJUaXRsZSA9IHN0eWxlZC5kaXZgXG4gIGZvbnQtc2l6ZTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pbnB1dEZvbnRTaXplfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuZWZmZWN0UGFuZWxUZXh0U2Vjb25kYXJ5Mn07XG4gIG1hcmdpbi1ib3R0b206IDhweDtcbiAgbWFyZ2luLWxlZnQ6IDZweDtcbmA7XG5cbmNvbnN0IFN0eWxlU2xpZGVyV3JhcHBlciA9IHN0eWxlZC5kaXZgXG4gIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7XG4gIHdpZHRoOiAxOTlweDtcbiAgaGVpZ2h0OiAzMnB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAua2ctcmFuZ2Utc2xpZGVyX19pbnB1dCB7XG4gICAgaGVpZ2h0OiAzMnB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBwYWRkaW5nOiAzcHggNnB4O1xuICB9XG4gIC5rZy1zbGlkZXIge1xuICAgIHBhZGRpbmctbGVmdDogNnB4O1xuICB9XG4gIC5rZy1yYW5nZS1zbGlkZXIge1xuICAgIHBhZGRpbmc6IDBweCAhaW1wb3J0YW50O1xuICB9XG5gO1xuXG5jb25zdCBSZWd1bGFyT3V0ZXJXcmFwcGVyID0gc3R5bGVkLmRpdi5hdHRycyh7XG4gIGNsYXNzTmFtZTogJ2VmZmVjdC1jb25maWd1cmF0b3JfX3BwLXNlY3Rpb24nXG59KWBcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xuYDtcblxuY29uc3QgUmVndWxhclNlY3Rpb25UaXRsZVdyYXBwZXIgPSBzdHlsZWQuZGl2LmF0dHJzKHtcbiAgY2xhc3NOYW1lOiAnZWZmZWN0LWNvbmZpZ3VyYXRvcl9fcHAtc2VjdGlvbi10aXRsZSdcbn0pYFxuICBmb250LXNpemU6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuaW5wdXRGb250U2l6ZX07XG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmVmZmVjdFBhbmVsVGV4dFNlY29uZGFyeTF9O1xuICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcbiAgbWFyZ2luLWJvdHRvbTogLTNweDtcbmA7XG5cbmNvbnN0IFJlZ3VsYXJTbGlkZXJXcmFwcGVyID0gc3R5bGVkLmRpdi5hdHRycyh7XG4gIGNsYXNzTmFtZTogJ2VmZmVjdC1jb25maWd1cmF0b3JfX3BwLXNlY3Rpb24tY29udHJvbCdcbn0pYFxuICBoZWlnaHQ6IDMycHg7XG4gIC5rZy1yYW5nZS1zbGlkZXJfX2lucHV0IHtcbiAgICBoZWlnaHQ6IDMycHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHBhZGRpbmc6IDNweCA2cHg7XG4gIH1cbiAgLmtnLXNsaWRlciB7XG4gICAgcGFkZGluZy1sZWZ0OiA2cHg7XG4gIH1cbiAgLmtnLXJhbmdlLXNsaWRlciB7XG4gICAgcGFkZGluZzogMHB4ICFpbXBvcnRhbnQ7XG4gIH1cbmA7XG5cbmNvbnN0IFN0eWxlZENoZWNrYm94V3JhcHBlciA9IHN0eWxlZC5kaXYuYXR0cnMoe1xuICBjbGFzc05hbWU6ICdlZmZlY3QtY29uZmlndXJhdG9yX19wcC1zZWN0aW9uLWNoZWNrYm94J1xufSlgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGN1cnNvcjogcG9pbnRlcjtcbmA7XG5cbmNvbnN0IFN0eWxlZENoZWNrYm94ID0gc3R5bGVkLmlucHV0YFxuICBtYXJnaW4tcmlnaHQ6IDZweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBhY2NlbnQtY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuYWN0aXZlQ29sb3J9O1xuYDtcblxuY29uc3QgU3R5bGVkQ2hlY2tib3hMYWJlbCA9IHN0eWxlZC5sYWJlbGBcbiAgZm9udC1zaXplOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmlucHV0Rm9udFNpemV9O1xuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5lZmZlY3RQYW5lbFRleHRTZWNvbmRhcnkxfTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuYDtcblxuY29uc3QgU3R5bGVkSGludFRvb2x0aXAgPSBzdHlsZWQoVG9vbHRpcClgXG4gICYuX19yZWFjdF9jb21wb25lbnRfdG9vbHRpcCB7XG4gICAgbWF4LXdpZHRoOiAyMjBweDtcbiAgICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgfVxuYDtcblxuY29uc3QgU3R5bGVkSGludEljb24gPSBzdHlsZWQuc3BhbmBcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB3aWR0aDogMTRweDtcbiAgaGVpZ2h0OiAxNHB4O1xuICBtYXJnaW4tbGVmdDogNnB4O1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIGZvbnQtc2l6ZTogOXB4O1xuICBmb250LXdlaWdodDogNjAwO1xuICBsaW5lLWhlaWdodDogMTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUubGFiZWxDb2xvcn07XG4gIGJvcmRlcjogMXB4IHNvbGlkICR7cHJvcHMgPT4gcHJvcHMudGhlbWUubGFiZWxDb2xvcn07XG4gIGN1cnNvcjogaGVscDtcbiAgJjpob3ZlciB7XG4gICAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudGV4dENvbG9ySGx9O1xuICAgIGJvcmRlci1jb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS50ZXh0Q29sb3JIbH07XG4gIH1cbmA7XG5cbmNvbnN0IFN0eWxlZENvbG9yQ2hlY2tib3hSb3cgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIG1hcmdpbi1ib3R0b206IDhweDtcbmA7XG5cbmNvbnN0IENPTU1PTl9TTElERVJfUFJPUFMgPSB7XG4gIHNob3dJbnB1dDogdHJ1ZSxcbiAgaXNSYW5nZWQ6IGZhbHNlLFxuICBzdGVwOiAwLjAwMSxcbiAgbGFiZWw6ICd2YWx1ZSdcbn07XG5cbnR5cGUgRWZmZWN0UGFyYW1ldGVyRGVzY3JpcHRpb25GbGF0dGVuZWQgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZT86ICdudW1iZXInIHwgJ2FycmF5JyB8ICdjb2xvcicgfCAnY2hlY2tib3gnO1xuICBsYWJlbD86IHN0cmluZyB8IGZhbHNlIHwgKHN0cmluZyB8IGZhbHNlKVtdO1xuICB0b29sdGlwPzogc3RyaW5nO1xuICBtaW46IG51bWJlcjtcbiAgbWF4OiBudW1iZXI7XG4gIGRlZmF1bHRWYWx1ZT86IG51bWJlciB8IG51bWJlcltdIHwgYm9vbGVhbjtcbiAgaW5kZXg/OiBudW1iZXI7XG59O1xuXG5FZmZlY3RDb25maWd1cmF0b3JGYWN0b3J5LmRlcHMgPSBbXG4gIFJhbmdlU2xpZGVyRmFjdG9yeSxcbiAgRWZmZWN0VGltZUNvbmZpZ3VyYXRvckZhY3RvcnksXG4gIFN1cmZhY2VGb2dFbGV2YXRpb25TZWN0aW9uRmFjdG9yeVxuXTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRWZmZWN0Q29uZmlndXJhdG9yRmFjdG9yeShcbiAgUmFuZ2VTbGlkZXI6IFJldHVyblR5cGU8dHlwZW9mIFJhbmdlU2xpZGVyRmFjdG9yeT4sXG4gIEVmZmVjdFRpbWVDb25maWd1cmF0b3I6IFJldHVyblR5cGU8dHlwZW9mIEVmZmVjdFRpbWVDb25maWd1cmF0b3JGYWN0b3J5PixcbiAgU3VyZmFjZUZvZ0VsZXZhdGlvblNlY3Rpb246IFJldHVyblR5cGU8dHlwZW9mIFN1cmZhY2VGb2dFbGV2YXRpb25TZWN0aW9uRmFjdG9yeT5cbik6IFJlYWN0LkZDPEVmZmVjdENvbmZpZ3VyYXRvclByb3BzPiB7XG4gIGNvbnN0IFNoYWRvd0VmZmVjdENvbmZpZ3VyYXRvcjogUmVhY3QuRkM8RWZmZWN0Q29uZmlndXJhdG9yUHJvcHM+ID0gKHtcbiAgICBlZmZlY3QsXG4gICAgdXBkYXRlRWZmZWN0Q29uZmlnXG4gIH0pID0+IHtcbiAgICBjb25zdCB7cGFyYW1ldGVycywgaWR9ID0gZWZmZWN0O1xuXG4gICAgY29uc3Qgc2xpZGVyUHJvcHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgIGNvbnN0IHByb3BOYW1lcyA9IFsnc2hhZG93SW50ZW5zaXR5JywgJ2FtYmllbnRMaWdodEludGVuc2l0eScsICdzdW5MaWdodEludGVuc2l0eSddO1xuICAgICAgY29uc3QgZGVzY3JpcHRpb25zID0gZWZmZWN0LmdldFBhcmFtZXRlckRlc2NyaXB0aW9ucygpO1xuICAgICAgcmV0dXJuIHByb3BOYW1lcy5tYXAocHJvcE5hbWUgPT4ge1xuICAgICAgICBjb25zdCBkZXNjID0gZGVzY3JpcHRpb25zLmZpbmQoZCA9PiBkLm5hbWUgPT09IHByb3BOYW1lKTtcbiAgICAgICAgY29uc3QgbWluID0gZGVzYz8ubWluID8/IDA7XG4gICAgICAgIGNvbnN0IG1heCA9IGRlc2M/Lm1heCA/PyAxO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZhbHVlMTogcGFyYW1ldGVyc1twcm9wTmFtZV0sXG4gICAgICAgICAgcmFuZ2U6IFttaW4sIG1heF0sXG4gICAgICAgICAgdmFsdWUwOiBtaW4sXG4gICAgICAgICAgb25DaGFuZ2U6ICh2YWx1ZTogbnVtYmVyW10sIGV2ZW50PzogRXZlbnQgfCBudWxsKSA9PiB7XG4gICAgICAgICAgICB1cGRhdGVFZmZlY3RDb25maWcoZXZlbnQsIGlkLCB7cGFyYW1ldGVyczoge1twcm9wTmFtZV06IHZhbHVlWzFdfX0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH0sIFtpZCwgZWZmZWN0LCBwYXJhbWV0ZXJzLCB1cGRhdGVFZmZlY3RDb25maWddKTtcblxuICAgIGNvbnN0IG9uVGltZVBhcmFtZXRlcnNDaGFuZ2VkID0gdXNlQ2FsbGJhY2soXG4gICAgICBwYXJhbWV0ZXJzID0+IHtcbiAgICAgICAgdXBkYXRlRWZmZWN0Q29uZmlnKG51bGwsIGlkLCB7XG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgLi4uKHBhcmFtZXRlcnMudGltZXN0YW1wID8ge3RpbWVzdGFtcDogcGFyYW1ldGVycy50aW1lc3RhbXB9IDogbnVsbCksXG4gICAgICAgICAgICAuLi4ocGFyYW1ldGVycy50aW1lem9uZSA/IHt0aW1lem9uZTogcGFyYW1ldGVycy50aW1lem9uZX0gOiBudWxsKSxcbiAgICAgICAgICAgIC4uLihwYXJhbWV0ZXJzLnRpbWVNb2RlID8ge3RpbWVNb2RlOiBwYXJhbWV0ZXJzLnRpbWVNb2RlfSA6IG51bGwpXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBbaWQsIHVwZGF0ZUVmZmVjdENvbmZpZ11cbiAgICApO1xuXG4gICAgY29uc3QgY29sb3JQaWNrZXJQcm9wcyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgY29uc3QgcHJvcE5hbWVzID0gWydhbWJpZW50TGlnaHRDb2xvcicsICdzdW5MaWdodENvbG9yJywgJ3NoYWRvd0NvbG9yJ107XG4gICAgICByZXR1cm4gcHJvcE5hbWVzLm1hcChwcm9wTmFtZSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29sb3JTZXRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkQ29sb3I6IHBhcmFtZXRlcnNbcHJvcE5hbWVdLFxuICAgICAgICAgICAgICBzZXRDb2xvcjogdiA9PiB1cGRhdGVFZmZlY3RDb25maWcobnVsbCwgaWQsIHtwYXJhbWV0ZXJzOiB7W3Byb3BOYW1lXTogdn19KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH0sIFtpZCwgcGFyYW1ldGVycywgdXBkYXRlRWZmZWN0Q29uZmlnXSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFN0eWxlZEVmZmVjdENvbmZpZ3VyYXRvciBrZXk9e2VmZmVjdC5pZH0+XG4gICAgICAgIDxQYW5lbExhYmVsV3JhcHBlcj5cbiAgICAgICAgICA8U2VjdGlvblRpdGxlPnsnRGF0ZSAmIFRpbWUnfTwvU2VjdGlvblRpdGxlPlxuICAgICAgICA8L1BhbmVsTGFiZWxXcmFwcGVyPlxuICAgICAgICA8RWZmZWN0VGltZUNvbmZpZ3VyYXRvclxuICAgICAgICAgIHRpbWVzdGFtcD17cGFyYW1ldGVycy50aW1lc3RhbXB9XG4gICAgICAgICAgdGltZXpvbmU9e3BhcmFtZXRlcnMudGltZXpvbmV9XG4gICAgICAgICAgdGltZU1vZGU9e3BhcmFtZXRlcnMudGltZU1vZGV9XG4gICAgICAgICAgb25DaGFuZ2U9e29uVGltZVBhcmFtZXRlcnNDaGFuZ2VkfVxuICAgICAgICAvPlxuXG4gICAgICAgIDxTdHlsZWRWZXJ0aWNhbFNlcGFyYXRvciAvPlxuXG4gICAgICAgIDxTdHlsZWRXcmFwcGVyICRtYXJnaW5Cb3R0b209ezB9PlxuICAgICAgICAgIDxTZWN0aW9uVGl0bGU+eydTaGFkb3cnfTwvU2VjdGlvblRpdGxlPlxuICAgICAgICA8L1N0eWxlZFdyYXBwZXI+XG4gICAgICAgIDxTdHlsZWRXcmFwcGVyICRtYXJnaW5Cb3R0b209ezE2fT5cbiAgICAgICAgICA8Q29tcGFjdENvbG9yUGlja2VyXG4gICAgICAgICAgICBsYWJlbD17J0NvbG9yJ31cbiAgICAgICAgICAgIGNvbG9yPXtjb2xvclBpY2tlclByb3BzWzJdLmNvbG9yU2V0c1swXS5zZWxlY3RlZENvbG9yfVxuICAgICAgICAgICAgb25TZXRDb2xvcj17Y29sb3JQaWNrZXJQcm9wc1syXS5jb2xvclNldHNbMF0uc2V0Q29sb3J9XG4gICAgICAgICAgICBJY29uPXtBcnJvd0Rvd25TbWFsbH1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxTdHlsZWRDb25maWdTZWN0aW9uPlxuICAgICAgICAgICAgPFNlY3Rpb25TdWJUaXRsZT5JbnRlbnNpdHk8L1NlY3Rpb25TdWJUaXRsZT5cbiAgICAgICAgICAgIDxTdHlsZVNsaWRlcldyYXBwZXI+XG4gICAgICAgICAgICAgIDxSYW5nZVNsaWRlciB7Li4uQ09NTU9OX1NMSURFUl9QUk9QU30gey4uLnNsaWRlclByb3BzWzBdfSAvPlxuICAgICAgICAgICAgPC9TdHlsZVNsaWRlcldyYXBwZXI+XG4gICAgICAgICAgPC9TdHlsZWRDb25maWdTZWN0aW9uPlxuICAgICAgICA8L1N0eWxlZFdyYXBwZXI+XG5cbiAgICAgICAgPFN0eWxlZFdyYXBwZXIgJG1hcmdpbkJvdHRvbT17MH0+XG4gICAgICAgICAgPFNlY3Rpb25UaXRsZT57J0FtYmllbnQgbGlnaHQnfTwvU2VjdGlvblRpdGxlPlxuICAgICAgICA8L1N0eWxlZFdyYXBwZXI+XG4gICAgICAgIDxTdHlsZWRXcmFwcGVyICRtYXJnaW5Cb3R0b209ezE2fT5cbiAgICAgICAgICA8Q29tcGFjdENvbG9yUGlja2VyXG4gICAgICAgICAgICBsYWJlbD17J0NvbG9yJ31cbiAgICAgICAgICAgIGNvbG9yPXtjb2xvclBpY2tlclByb3BzWzBdLmNvbG9yU2V0c1swXS5zZWxlY3RlZENvbG9yfVxuICAgICAgICAgICAgb25TZXRDb2xvcj17Y29sb3JQaWNrZXJQcm9wc1swXS5jb2xvclNldHNbMF0uc2V0Q29sb3J9XG4gICAgICAgICAgICBJY29uPXtBcnJvd0Rvd25TbWFsbH1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxTdHlsZWRDb25maWdTZWN0aW9uPlxuICAgICAgICAgICAgPFNlY3Rpb25TdWJUaXRsZT5JbnRlbnNpdHk8L1NlY3Rpb25TdWJUaXRsZT5cbiAgICAgICAgICAgIDxTdHlsZVNsaWRlcldyYXBwZXI+XG4gICAgICAgICAgICAgIDxSYW5nZVNsaWRlciB7Li4uQ09NTU9OX1NMSURFUl9QUk9QU30gey4uLnNsaWRlclByb3BzWzFdfSAvPlxuICAgICAgICAgICAgPC9TdHlsZVNsaWRlcldyYXBwZXI+XG4gICAgICAgICAgPC9TdHlsZWRDb25maWdTZWN0aW9uPlxuICAgICAgICA8L1N0eWxlZFdyYXBwZXI+XG5cbiAgICAgICAgPFN0eWxlZFdyYXBwZXIgJG1hcmdpbkJvdHRvbT17MH0+XG4gICAgICAgICAgPFNlY3Rpb25UaXRsZT57J1N1biBsaWdodCd9PC9TZWN0aW9uVGl0bGU+XG4gICAgICAgIDwvU3R5bGVkV3JhcHBlcj5cbiAgICAgICAgPFN0eWxlZFdyYXBwZXIgJG1hcmdpbkJvdHRvbT17MH0+XG4gICAgICAgICAgPENvbXBhY3RDb2xvclBpY2tlclxuICAgICAgICAgICAgbGFiZWw9eydDb2xvcid9XG4gICAgICAgICAgICBjb2xvcj17Y29sb3JQaWNrZXJQcm9wc1sxXS5jb2xvclNldHNbMF0uc2VsZWN0ZWRDb2xvcn1cbiAgICAgICAgICAgIG9uU2V0Q29sb3I9e2NvbG9yUGlja2VyUHJvcHNbMV0uY29sb3JTZXRzWzBdLnNldENvbG9yfVxuICAgICAgICAgICAgSWNvbj17QXJyb3dEb3duU21hbGx9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8U3R5bGVkQ29uZmlnU2VjdGlvbj5cbiAgICAgICAgICAgIDxTZWN0aW9uU3ViVGl0bGU+SW50ZW5zaXR5PC9TZWN0aW9uU3ViVGl0bGU+XG4gICAgICAgICAgICA8U3R5bGVTbGlkZXJXcmFwcGVyPlxuICAgICAgICAgICAgICA8UmFuZ2VTbGlkZXIgey4uLkNPTU1PTl9TTElERVJfUFJPUFN9IHsuLi5zbGlkZXJQcm9wc1syXX0gLz5cbiAgICAgICAgICAgIDwvU3R5bGVTbGlkZXJXcmFwcGVyPlxuICAgICAgICAgIDwvU3R5bGVkQ29uZmlnU2VjdGlvbj5cbiAgICAgICAgPC9TdHlsZWRXcmFwcGVyPlxuICAgICAgPC9TdHlsZWRFZmZlY3RDb25maWd1cmF0b3I+XG4gICAgKTtcbiAgfTtcbiAgY29uc3QgZGVmYXVsdFVuaWZvcm1zID0ge307XG5cbiAgY29uc3QgRUxFVkFUSU9OX0VYVFJBX1BBUkFNUyA9IG5ldyBTZXQoWydoZWlnaHRFbmQnLCAnYW5pbWF0ZUhlaWdodCcsICdsaW5lYXJFYXNpbmcnXSk7XG5cbiAgY29uc3QgUG9zdFByb2Nlc3NpbmdFZmZlY3RDb25maWd1cmF0b3I6IFJlYWN0LkZDPEVmZmVjdENvbmZpZ3VyYXRvclByb3BzPiA9ICh7XG4gICAgZWZmZWN0LFxuICAgIHVwZGF0ZUVmZmVjdENvbmZpZ1xuICB9KSA9PiB7XG4gICAgY29uc3QgdW5pZm9ybXMgPSBlZmZlY3QuZGVja0VmZmVjdD8ubW9kdWxlLnByb3BUeXBlcyB8fCBkZWZhdWx0VW5pZm9ybXM7XG4gICAgY29uc3QgcGFyYW1ldGVyRGVzY3JpcHRpb25zID0gZWZmZWN0LmdldFBhcmFtZXRlckRlc2NyaXB0aW9ucygpO1xuICAgIGNvbnN0IHtwYXJhbWV0ZXJzLCBpZH0gPSBlZmZlY3Q7XG5cbiAgICBjb25zdCBoYXNFbGV2YXRpb25TZWN0aW9uID0gcGFyYW1ldGVyRGVzY3JpcHRpb25zLnNvbWUoZCA9PiBkLm5hbWUgPT09ICdhbmltYXRlSGVpZ2h0Jyk7XG5cbiAgICBjb25zdCBmbGF0UGFyYW1ldGVyRGVzY3JpcHRpb25zID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICByZXR1cm4gcGFyYW1ldGVyRGVzY3JpcHRpb25zLnJlZHVjZSgoYWNjLCBkZXNjcmlwdGlvbikgPT4ge1xuICAgICAgICBpZiAoaGFzRWxldmF0aW9uU2VjdGlvbiAmJiBFTEVWQVRJT05fRVhUUkFfUEFSQU1TLmhhcyhkZXNjcmlwdGlvbi5uYW1lKSkgcmV0dXJuIGFjYztcblxuICAgICAgICBpZiAoaGFzRWxldmF0aW9uU2VjdGlvbiAmJiBkZXNjcmlwdGlvbi5uYW1lID09PSAnaGVpZ2h0Jykge1xuICAgICAgICAgIGFjYy5wdXNoKHsuLi5kZXNjcmlwdGlvbiwgdHlwZTogRUxFVkFUSU9OX1NFQ1RJT05fVFlQRSBhcyBhbnl9KTtcbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlc2NyaXB0aW9uLnR5cGUgPT09ICdjb2xvcicpIHtcbiAgICAgICAgICBhY2MucHVzaChkZXNjcmlwdGlvbik7XG4gICAgICAgIH0gZWxzZSBpZiAoZGVzY3JpcHRpb24udHlwZSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRlc2NyaXB0aW9uLmRlZmF1bHRWYWx1ZSkpIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uLmRlZmF1bHRWYWx1ZS5mb3JFYWNoKChfLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICBhY2MucHVzaCh7XG4gICAgICAgICAgICAgICAgLi4uZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgICAgbGFiZWw6IGRlc2NyaXB0aW9uLmxhYmVsPy5baW5kZXhdXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFjYy5wdXNoKGRlc2NyaXB0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCBbXSBhcyBFZmZlY3RQYXJhbWV0ZXJEZXNjcmlwdGlvbkZsYXR0ZW5lZFtdKTtcbiAgICB9LCBbcGFyYW1ldGVyRGVzY3JpcHRpb25zLCBoYXNFbGV2YXRpb25TZWN0aW9uXSk7XG5cbiAgICBjb25zdCBjb250cm9scyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgcmV0dXJuIGZsYXRQYXJhbWV0ZXJEZXNjcmlwdGlvbnMubWFwKGRlc2MgPT4ge1xuICAgICAgICBpZiAoKGRlc2MudHlwZSBhcyBzdHJpbmcpID09PSBFTEVWQVRJT05fU0VDVElPTl9UWVBFKSB7XG4gICAgICAgICAgcmV0dXJuIHtpc0VsZXZhdGlvblNlY3Rpb246IHRydWUgYXMgY29uc3R9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlc2MudHlwZSA9PT0gJ2NvbG9yJykge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpc0NvbG9yOiB0cnVlIGFzIGNvbnN0LFxuICAgICAgICAgICAgbGFiZWw6IGRlc2MubGFiZWwgfHwgZGVzYy5uYW1lLFxuICAgICAgICAgICAgcGFyYW1OYW1lOiBkZXNjLm5hbWUsXG4gICAgICAgICAgICBjb2xvcjogcGFyYW1ldGVyc1tkZXNjLm5hbWVdIHx8IGRlc2MuZGVmYXVsdFZhbHVlIHx8IFsyNTUsIDI1NSwgMjU1XSxcbiAgICAgICAgICAgIG9uU2V0Q29sb3I6ICh2OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pID0+XG4gICAgICAgICAgICAgIHVwZGF0ZUVmZmVjdENvbmZpZyhudWxsLCBpZCwge3BhcmFtZXRlcnM6IHtbZGVzYy5uYW1lXTogdn19KVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVzYy50eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgICAgICAgY29uc3QgbGFiZWwgPSB0eXBlb2YgZGVzYy5sYWJlbCA9PT0gJ3N0cmluZycgPyBkZXNjLmxhYmVsIDogZGVzYy5uYW1lO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpc0NoZWNrYm94OiB0cnVlIGFzIGNvbnN0LFxuICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICBwYXJhbU5hbWU6IGRlc2MubmFtZSxcbiAgICAgICAgICAgIGNoZWNrZWQ6IEJvb2xlYW4ocGFyYW1ldGVyc1tkZXNjLm5hbWVdKSxcbiAgICAgICAgICAgIHRvb2x0aXA6IGRlc2MudG9vbHRpcCxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiAoKSA9PlxuICAgICAgICAgICAgICB1cGRhdGVFZmZlY3RDb25maWcobnVsbCwgaWQsIHtwYXJhbWV0ZXJzOiB7W2Rlc2MubmFtZV06ICFwYXJhbWV0ZXJzW2Rlc2MubmFtZV19fSlcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyYW1OYW1lID0gZGVzYy5uYW1lO1xuXG4gICAgICAgIGNvbnN0IHJhd1VuaWZvcm0gPSB1bmlmb3Jtc1tkZXNjLm5hbWVdO1xuICAgICAgICBpZiAocmF3VW5pZm9ybSAmJiByYXdVbmlmb3JtLnByaXZhdGUpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGx1bWEuZ2wgOSB3cmFwcyBhcnJheSBwcm9wVHlwZXMgYXMge3ZhbHVlOiBbLi4uXX1cbiAgICAgICAgY29uc3QgdW5pZm9ybSA9XG4gICAgICAgICAgcmF3VW5pZm9ybSAmJiB0eXBlb2YgcmF3VW5pZm9ybSA9PT0gJ29iamVjdCcgJiYgQXJyYXkuaXNBcnJheShyYXdVbmlmb3JtLnZhbHVlKVxuICAgICAgICAgICAgPyByYXdVbmlmb3JtLnZhbHVlXG4gICAgICAgICAgICA6IHJhd1VuaWZvcm07XG5cbiAgICAgICAgY29uc3QgcHJldlZhbHVlID0gcGFyYW1ldGVyc1twYXJhbU5hbWVdO1xuXG4gICAgICAgIGNvbnN0IGxhYmVsID0gZGVzYy5sYWJlbCA9PT0gZmFsc2UgPyBmYWxzZSA6IGRlc2MubGFiZWwgfHwgZGVzYy5uYW1lO1xuXG4gICAgICAgIC8vIHRoZSB1bmlmb3JtIGlzIFtudW1iZXIsIG51bWJlcl0gYXJyYXlcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodW5pZm9ybSkgJiYgdW5pZm9ybS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICB2YWx1ZTE6IHByZXZWYWx1ZVtkZXNjLmluZGV4IHx8IDBdIHx8IDAsXG4gICAgICAgICAgICByYW5nZTogWzAsIDFdLFxuICAgICAgICAgICAgdmFsdWUwOiAwLFxuICAgICAgICAgICAgb25DaGFuZ2U6IChuZXdWYWx1ZTogbnVtYmVyW10sIGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIHVwZGF0ZUVmZmVjdENvbmZpZyhldmVudCwgaWQsIHtcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAgICAgICBbcGFyYW1OYW1lXTpcbiAgICAgICAgICAgICAgICAgICAgZGVzYy5pbmRleCA9PT0gMCA/IFtuZXdWYWx1ZVsxXSwgcHJldlZhbHVlWzFdXSA6IFtwcmV2VmFsdWVbMF0sIG5ld1ZhbHVlWzFdXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0aGUgdW5pZm9ybSBpcyBhIHBsYWluIG51bWJlciB3aXRob3V0IGFueSBkZXNjcmlwdGlvblxuICAgICAgICBlbHNlIGlmIChpc051bWJlcih1bmlmb3JtKSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICAgIHZhbHVlMTogcHJldlZhbHVlID8/IDAsXG4gICAgICAgICAgICByYW5nZTogW2Rlc2MubWluID8/IDAsIGRlc2MubWF4ID8/IDUwMF0sXG4gICAgICAgICAgICB2YWx1ZTA6IGRlc2MubWluID8/IDAsXG4gICAgICAgICAgICBvbkNoYW5nZTogKG5ld1ZhbHVlOiBudW1iZXJbXSwgZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgdXBkYXRlRWZmZWN0Q29uZmlnKGV2ZW50LCBpZCwge3BhcmFtZXRlcnM6IHtbcGFyYW1OYW1lXTogbmV3VmFsdWVbMV19fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0aGUgdW5pZm9ybSBkZXNjcmlwdGlvbiBpcyB7dmFsdWU6IDAsIG1pbjogMCwgbWF4OiAxLCAuLi59XG4gICAgICAgIGVsc2UgaWYgKHVuaWZvcm0gJiYgaXNOdW1iZXIodW5pZm9ybS52YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCByYW5nZU1pbiA9IGRlc2MubWluID8/IHVuaWZvcm0ubWluID8/IHVuaWZvcm0uc29mdE1pbiA/PyAwO1xuICAgICAgICAgIGNvbnN0IHJhbmdlTWF4ID0gZGVzYy5tYXggPz8gdW5pZm9ybS5tYXggPz8gdW5pZm9ybS5zb2Z0TWF4ID8/IDE7XG4gICAgICAgICAgY29uc3QgcmFuZ2VTcGFuID0gcmFuZ2VNYXggLSByYW5nZU1pbjtcbiAgICAgICAgICBjb25zdCBzdGVwID0gcmFuZ2VTcGFuID4gMTAgPyAxIDogMC4wMDE7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgICAgdmFsdWUxOiBwcmV2VmFsdWUgfHwgMCxcbiAgICAgICAgICAgIHJhbmdlOiBbcmFuZ2VNaW4sIHJhbmdlTWF4XSxcbiAgICAgICAgICAgIHZhbHVlMDogcmFuZ2VNaW4sXG4gICAgICAgICAgICBzdGVwLFxuICAgICAgICAgICAgb25DaGFuZ2U6IChuZXdWYWx1ZTogbnVtYmVyW10sIGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIHVwZGF0ZUVmZmVjdENvbmZpZyhldmVudCwgaWQsIHtwYXJhbWV0ZXJzOiB7W3BhcmFtTmFtZV06IG5ld1ZhbHVlWzFdfX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gUGFyYW1ldGVyIGRlZmluZWQgaW4gZWZmZWN0IGRlc2NyaXB0aW9uIGJ1dCBub3QgaW4gc2hhZGVyIHByb3BUeXBlc1xuICAgICAgICBlbHNlIGlmIChkZXNjLm1pbiAhPT0gdW5kZWZpbmVkICYmIGRlc2MubWF4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCByYW5nZVNwYW4gPSBkZXNjLm1heCAtIGRlc2MubWluO1xuICAgICAgICAgIGNvbnN0IHN0ZXAgPSByYW5nZVNwYW4gPiAxMCA/IDEgOiAwLjAwMTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICB2YWx1ZTE6IHByZXZWYWx1ZSA/PyBkZXNjLmRlZmF1bHRWYWx1ZSA/PyAwLFxuICAgICAgICAgICAgcmFuZ2U6IFtkZXNjLm1pbiwgZGVzYy5tYXhdLFxuICAgICAgICAgICAgdmFsdWUwOiBkZXNjLm1pbixcbiAgICAgICAgICAgIHN0ZXAsXG4gICAgICAgICAgICBvbkNoYW5nZTogKG5ld1ZhbHVlOiBudW1iZXJbXSwgZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgdXBkYXRlRWZmZWN0Q29uZmlnKGV2ZW50LCBpZCwge3BhcmFtZXRlcnM6IHtbcGFyYW1OYW1lXTogbmV3VmFsdWVbMV19fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlnbm9yZSBldmVyeXRoaW5nIGVsc2UgZm9yIG5vd1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0pO1xuICAgIH0sIFtmbGF0UGFyYW1ldGVyRGVzY3JpcHRpb25zLCBpZCwgcGFyYW1ldGVycywgdXBkYXRlRWZmZWN0Q29uZmlnLCB1bmlmb3Jtc10pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTdHlsZWRFZmZlY3RDb25maWd1cmF0b3Iga2V5PXtlZmZlY3QuaWR9PlxuICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICBjb25zdCBlbGVtZW50czogUmVhY3QuUmVhY3ROb2RlW10gPSBbXTtcbiAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgd2hpbGUgKGkgPCBmbGF0UGFyYW1ldGVyRGVzY3JpcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IGNvbnRyb2xzW2ldO1xuICAgICAgICAgICAgaWYgKCFjb250cm9sKSB7XG4gICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICgnaXNDb2xvcicgaW4gY29udHJvbCkge1xuICAgICAgICAgICAgICBjb25zdCBuZXh0Q29udHJvbCA9IGkgKyAxIDwgY29udHJvbHMubGVuZ3RoID8gY29udHJvbHNbaSArIDFdIDogbnVsbDtcbiAgICAgICAgICAgICAgaWYgKG5leHRDb250cm9sICYmICdpc0NoZWNrYm94JyBpbiBuZXh0Q29udHJvbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNiVG9vbHRpcElkID0gbmV4dENvbnRyb2wudG9vbHRpcFxuICAgICAgICAgICAgICAgICAgPyBgZWZmZWN0LWNiLWhpbnQtJHtlZmZlY3QuaWR9LSR7aX1gXG4gICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKFxuICAgICAgICAgICAgICAgICAgPFN0eWxlZENvbG9yQ2hlY2tib3hSb3cga2V5PXtgJHtlZmZlY3QuaWR9LSR7aX1gfT5cbiAgICAgICAgICAgICAgICAgICAgPENvbXBhY3RDb2xvclBpY2tlclxuICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPXt0eXBlb2YgY29udHJvbC5sYWJlbCA9PT0gJ3N0cmluZycgPyBjb250cm9sLmxhYmVsIDogJ0NvbG9yJ31cbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17Y29udHJvbC5jb2xvcn1cbiAgICAgICAgICAgICAgICAgICAgICBvblNldENvbG9yPXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wub25TZXRDb2xvciA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm9vcCAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgSWNvbj17QXJyb3dEb3duU21hbGx9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxTdHlsZWRDaGVja2JveFdyYXBwZXJcbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiAobmV4dENvbnRyb2wgYXMge29uQ2hhbmdlOiAoKSA9PiB2b2lkfSkub25DaGFuZ2UoKX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxTdHlsZWRDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e25leHRDb250cm9sLmNoZWNrZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KCkgPT4gKG5leHRDb250cm9sIGFzIHtvbkNoYW5nZTogKCkgPT4gdm9pZH0pLm9uQ2hhbmdlKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtlID0+IGUuc3RvcFByb3BhZ2F0aW9uKCl9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8U3R5bGVkQ2hlY2tib3hMYWJlbD57bmV4dENvbnRyb2wubGFiZWx9PC9TdHlsZWRDaGVja2JveExhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIHtuZXh0Q29udHJvbC50b29sdGlwID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFN0eWxlZEhpbnRJY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10aXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZvcj17Y2JUb29sdGlwSWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17ZSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8L1N0eWxlZEhpbnRJY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U3R5bGVkSGludFRvb2x0aXAgaWQ9e2NiVG9vbHRpcElkfSBlZmZlY3Q9XCJzb2xpZFwiIGRlbGF5U2hvdz17MjAwfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bmV4dENvbnRyb2wudG9vbHRpcH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TdHlsZWRIaW50VG9vbHRpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICA8L1N0eWxlZENoZWNrYm94V3JhcHBlcj5cbiAgICAgICAgICAgICAgICAgIDwvU3R5bGVkQ29sb3JDaGVja2JveFJvdz5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGkgKz0gMjtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goXG4gICAgICAgICAgICAgICAgPFJlZ3VsYXJPdXRlcldyYXBwZXIga2V5PXtgJHtlZmZlY3QuaWR9LSR7aX1gfT5cbiAgICAgICAgICAgICAgICAgIDxDb21wYWN0Q29sb3JQaWNrZXJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9e3R5cGVvZiBjb250cm9sLmxhYmVsID09PSAnc3RyaW5nJyA/IGNvbnRyb2wubGFiZWwgOiAnQ29sb3InfVxuICAgICAgICAgICAgICAgICAgICBjb2xvcj17Y29udHJvbC5jb2xvcn1cbiAgICAgICAgICAgICAgICAgICAgb25TZXRDb2xvcj17XG4gICAgICAgICAgICAgICAgICAgICAgY29udHJvbC5vblNldENvbG9yID8/XG4gICAgICAgICAgICAgICAgICAgICAgKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vb3AgKi9cbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEljb249e0Fycm93RG93blNtYWxsfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L1JlZ3VsYXJPdXRlcldyYXBwZXI+XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICgnaXNDaGVja2JveCcgaW4gY29udHJvbCkge1xuICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKFxuICAgICAgICAgICAgICAgIDxSZWd1bGFyT3V0ZXJXcmFwcGVyIGtleT17YCR7ZWZmZWN0LmlkfS0ke2l9YH0+XG4gICAgICAgICAgICAgICAgICA8U3R5bGVkQ2hlY2tib3hXcmFwcGVyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IChjb250cm9sIGFzIHtvbkNoYW5nZTogKCkgPT4gdm9pZH0pLm9uQ2hhbmdlKCl9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxTdHlsZWRDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17Y29udHJvbC5jaGVja2VkfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoKSA9PiAoY29udHJvbCBhcyB7b25DaGFuZ2U6ICgpID0+IHZvaWR9KS5vbkNoYW5nZSgpfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2UgPT4gZS5zdG9wUHJvcGFnYXRpb24oKX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPFN0eWxlZENoZWNrYm94TGFiZWw+e2NvbnRyb2wubGFiZWx9PC9TdHlsZWRDaGVja2JveExhYmVsPlxuICAgICAgICAgICAgICAgICAgPC9TdHlsZWRDaGVja2JveFdyYXBwZXI+XG4gICAgICAgICAgICAgICAgPC9SZWd1bGFyT3V0ZXJXcmFwcGVyPlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoJ2lzRWxldmF0aW9uU2VjdGlvbicgaW4gY29udHJvbCkge1xuICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKFxuICAgICAgICAgICAgICAgIDxTdXJmYWNlRm9nRWxldmF0aW9uU2VjdGlvblxuICAgICAgICAgICAgICAgICAga2V5PXtgJHtlZmZlY3QuaWR9LWVsZXZhdGlvbmB9XG4gICAgICAgICAgICAgICAgICBlZmZlY3Q9e2VmZmVjdH1cbiAgICAgICAgICAgICAgICAgIHVwZGF0ZUVmZmVjdENvbmZpZz17dXBkYXRlRWZmZWN0Q29uZmlnfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goXG4gICAgICAgICAgICAgIDxSZWd1bGFyT3V0ZXJXcmFwcGVyIGtleT17YCR7ZWZmZWN0LmlkfS0ke2l9YH0+XG4gICAgICAgICAgICAgICAge2NvbnRyb2wubGFiZWwgPyAoXG4gICAgICAgICAgICAgICAgICA8UmVndWxhclNlY3Rpb25UaXRsZVdyYXBwZXI+e2NvbnRyb2wubGFiZWx9PC9SZWd1bGFyU2VjdGlvblRpdGxlV3JhcHBlcj5cbiAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICA8UmVndWxhclNsaWRlcldyYXBwZXI+XG4gICAgICAgICAgICAgICAgICA8UmFuZ2VTbGlkZXIga2V5PXtpfSB7Li4uQ09NTU9OX1NMSURFUl9QUk9QU30gey4uLmNvbnRyb2x9IC8+XG4gICAgICAgICAgICAgICAgPC9SZWd1bGFyU2xpZGVyV3JhcHBlcj5cbiAgICAgICAgICAgICAgPC9SZWd1bGFyT3V0ZXJXcmFwcGVyPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZWxlbWVudHM7XG4gICAgICAgIH0pKCl9XG4gICAgICA8L1N0eWxlZEVmZmVjdENvbmZpZ3VyYXRvcj5cbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IEVmZmVjdENvbmZpZ3VyYXRvciA9ICh7XG4gICAgZWZmZWN0LFxuICAgIHVwZGF0ZUVmZmVjdENvbmZpZ1xuICB9OiBFZmZlY3RDb25maWd1cmF0b3JQcm9wcyAmIHtpbnRsOiBJbnRsU2hhcGV9KSA9PiB7XG4gICAgcmV0dXJuIGVmZmVjdC50eXBlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC50eXBlID8gKFxuICAgICAgPFNoYWRvd0VmZmVjdENvbmZpZ3VyYXRvciBlZmZlY3Q9e2VmZmVjdH0gdXBkYXRlRWZmZWN0Q29uZmlnPXt1cGRhdGVFZmZlY3RDb25maWd9IC8+XG4gICAgKSA6IChcbiAgICAgIDxQb3N0UHJvY2Vzc2luZ0VmZmVjdENvbmZpZ3VyYXRvciBlZmZlY3Q9e2VmZmVjdH0gdXBkYXRlRWZmZWN0Q29uZmlnPXt1cGRhdGVFZmZlY3RDb25maWd9IC8+XG4gICAgKTtcbiAgfTtcblxuICByZXR1cm4gaW5qZWN0SW50bChFZmZlY3RDb25maWd1cmF0b3IpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FB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QUt4RyxNQUFNLENBQUNHLEVBQUUsZUFBYTtjQUM5QkgsTUFBTSxFQUFFQSxNQUFPO2NBQ2ZDLGtCQUFrQixFQUFFQTtZQUFtQixDQUN4QyxDQUNILENBQUM7WUFDRHpFLENBQUMsRUFBRTtZQUFDO1VBRU47VUFFQXlLLFFBQVEsQ0FBQ2pLLElBQUksZUFDWDFELE1BQUEsWUFBQTZKLGFBQUEsQ0FBQ2pFLG1CQUFtQjtZQUFDa0UsR0FBRyxLQUFBb0UsTUFBQSxDQUFLeEcsTUFBTSxDQUFDRyxFQUFFLE9BQUFxRyxNQUFBLENBQUloTCxDQUFDO1VBQUcsR0FDM0MySyxPQUFPLENBQUN6SCxLQUFLLGdCQUNacEcsTUFBQSxZQUFBNkosYUFBQSxDQUFDaEUsMEJBQTBCLFFBQUVnSSxPQUFPLENBQUN6SCxLQUFrQyxDQUFDLEdBQ3RFLElBQUksZUFDUnBHLE1BQUEsWUFBQTZKLGFBQUEsQ0FBQy9ELG9CQUFvQixxQkFDbkI5RixNQUFBLFlBQUE2SixhQUFBLENBQUN4QyxXQUFXLE1BQUE4QyxTQUFBO1lBQUNMLEdBQUcsRUFBRTVHO1VBQUUsR0FBSzBELG1CQUFtQixFQUFNaUgsT0FBTyxDQUFHLENBQ3hDLENBQ0gsQ0FDdkIsQ0FBQztVQUNEM0ssQ0FBQyxFQUFFO1FBQ0wsQ0FBQztRQUFBcUwsSUFBQTtNQXZIRCxPQUFPckwsQ0FBQyxHQUFHK0gseUJBQXlCLENBQUNuSCxNQUFNO1FBQUF5SyxJQUFBLEdBQUFYLEtBQUE7UUFBQSxJQUFBVyxJQUFBLFFBSXZDO01BQVM7TUFxSGIsT0FBT1osUUFBUTtJQUNqQixDQUFDLENBQUUsQ0FDcUIsQ0FBQztFQUUvQixDQUFDO0VBRUQsSUFBTWEsa0JBQWtCLEdBQUcsU0FBckJBLGtCQUFrQkEsQ0FBQUMsS0FBQSxFQUcyQjtJQUFBLElBRmpEL0csTUFBTSxHQUFBK0csS0FBQSxDQUFOL0csTUFBTTtNQUNOQyxrQkFBa0IsR0FBQThHLEtBQUEsQ0FBbEI5RyxrQkFBa0I7SUFFbEIsT0FBT0QsTUFBTSxDQUFDMkQsSUFBSSxLQUFLcUQsa0NBQXVCLENBQUNyRCxJQUFJLGdCQUNqRHJMLE1BQUEsWUFBQTZKLGFBQUEsQ0FBQ3JDLHdCQUF3QjtNQUFDRSxNQUFNLEVBQUVBLE1BQU87TUFBQ0Msa0JBQWtCLEVBQUVBO0lBQW1CLENBQUUsQ0FBQyxnQkFFcEYzSCxNQUFBLFlBQUE2SixhQUFBLENBQUNVLGdDQUFnQztNQUFDN0MsTUFBTSxFQUFFQSxNQUFPO01BQUNDLGtCQUFrQixFQUFFQTtJQUFtQixDQUFFLENBQzVGO0VBQ0gsQ0FBQztFQUVELE9BQU8sSUFBQWdILHFCQUFVLEVBQUNILGtCQUFrQixDQUFDO0FBQ3ZDIiwiaWdub3JlTGlzdCI6W119
|