@carto/kepler.gl 0.0.86-alpha.deck9.1 → 0.0.86
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/actions/action-wrapper.js +41 -36
- package/dist/actions/actions.js +21 -15
- package/dist/actions/identity-actions.js +20 -14
- package/dist/actions/index.js +16 -16
- package/dist/actions/map-state-actions.js +18 -12
- package/dist/actions/map-style-actions.js +46 -30
- package/dist/actions/provider-actions.js +73 -49
- package/dist/actions/ui-state-actions.js +113 -73
- package/dist/actions/vis-state-actions.js +148 -152
- package/dist/cloud-providers/index.js +7 -6
- package/dist/cloud-providers/provider.js +279 -189
- package/dist/components/bottom-widget.js +117 -105
- package/dist/components/common/action-panel.js +74 -122
- package/dist/components/common/animation-control/animation-control.js +54 -69
- package/dist/components/common/animation-control/animation-controller.js +160 -134
- package/dist/components/common/animation-control/animation-speed-slider.js +54 -47
- package/dist/components/common/animation-control/floating-time-display.js +100 -120
- package/dist/components/common/animation-control/playback-controls.js +144 -147
- package/dist/components/common/animation-control/speed-control.js +23 -31
- package/dist/components/common/checkbox.js +70 -56
- package/dist/components/common/color-legend.js +110 -83
- package/dist/components/common/data-table/button.js +23 -31
- package/dist/components/common/data-table/canvas.js +5 -11
- package/dist/components/common/data-table/cell-size.js +61 -51
- package/dist/components/common/data-table/grid.js +59 -40
- package/dist/components/common/data-table/index.js +348 -464
- package/dist/components/common/data-table/option-dropdown.js +33 -50
- package/dist/components/common/dataset-label.js +13 -17
- package/dist/components/common/error-boundary.js +45 -27
- package/dist/components/common/field-selector.js +139 -99
- package/dist/components/common/field-token.js +9 -24
- package/dist/components/common/file-uploader/file-drop.js +115 -96
- package/dist/components/common/file-uploader/file-upload-progress.js +45 -68
- package/dist/components/common/file-uploader/file-upload.js +187 -215
- package/dist/components/common/file-uploader/upload-button.js +22 -35
- package/dist/components/common/histogram-plot.js +58 -47
- package/dist/components/common/icons/add.js +27 -14
- package/dist/components/common/icons/anchor_window.js +18 -16
- package/dist/components/common/icons/arrow-down-alt.js +27 -14
- package/dist/components/common/icons/arrow-down-solid.js +27 -14
- package/dist/components/common/icons/arrow-down.js +27 -14
- package/dist/components/common/icons/arrow-left.js +30 -17
- package/dist/components/common/icons/arrow-right.js +27 -14
- package/dist/components/common/icons/arrow-up-alt.js +28 -15
- package/dist/components/common/icons/arrow-up-solid.js +27 -14
- package/dist/components/common/icons/arrow-up.js +27 -14
- package/dist/components/common/icons/base.js +57 -39
- package/dist/components/common/icons/bug.js +29 -16
- package/dist/components/common/icons/cancel.js +27 -14
- package/dist/components/common/icons/checkmark.js +31 -18
- package/dist/components/common/icons/chevron-right.js +33 -20
- package/dist/components/common/icons/clipboard.js +28 -15
- package/dist/components/common/icons/clock.js +29 -16
- package/dist/components/common/icons/close.js +32 -19
- package/dist/components/common/icons/code-alt.js +29 -16
- package/dist/components/common/icons/copy.js +31 -18
- package/dist/components/common/icons/crosshairs.js +29 -16
- package/dist/components/common/icons/cube-3d.js +31 -18
- package/dist/components/common/icons/cursor-click.js +31 -18
- package/dist/components/common/icons/data-table.js +28 -15
- package/dist/components/common/icons/db.js +28 -15
- package/dist/components/common/icons/delete.js +29 -16
- package/dist/components/common/icons/docs.js +43 -30
- package/dist/components/common/icons/drag-n-drop.js +29 -16
- package/dist/components/common/icons/draw-polygon.js +46 -33
- package/dist/components/common/icons/email.js +31 -18
- package/dist/components/common/icons/expand.js +29 -16
- package/dist/components/common/icons/eye-seen.js +29 -16
- package/dist/components/common/icons/eye-unseen.js +29 -16
- package/dist/components/common/icons/file-type.js +19 -35
- package/dist/components/common/icons/file.js +27 -14
- package/dist/components/common/icons/files.js +26 -14
- package/dist/components/common/icons/filter-funnel.js +27 -14
- package/dist/components/common/icons/free-window.js +18 -16
- package/dist/components/common/icons/gear.js +29 -16
- package/dist/components/common/icons/hash.js +27 -14
- package/dist/components/common/icons/histogram.js +27 -15
- package/dist/components/common/icons/index.js +156 -156
- package/dist/components/common/icons/info.js +38 -25
- package/dist/components/common/icons/layers.js +27 -14
- package/dist/components/common/icons/left-arrow.js +29 -16
- package/dist/components/common/icons/legend.js +27 -14
- package/dist/components/common/icons/line-chart.js +27 -14
- package/dist/components/common/icons/login.js +30 -17
- package/dist/components/common/icons/logout.js +29 -16
- package/dist/components/common/icons/map-icon.js +32 -18
- package/dist/components/common/icons/map.js +32 -18
- package/dist/components/common/icons/messages.js +27 -14
- package/dist/components/common/icons/minus.js +27 -14
- package/dist/components/common/icons/order-by-dataset.js +17 -15
- package/dist/components/common/icons/order-by-list.js +9 -7
- package/dist/components/common/icons/pause.js +27 -14
- package/dist/components/common/icons/picture.js +26 -14
- package/dist/components/common/icons/pin.js +30 -17
- package/dist/components/common/icons/play.js +27 -14
- package/dist/components/common/icons/polygon.js +48 -35
- package/dist/components/common/icons/rectangle.js +49 -36
- package/dist/components/common/icons/reduce.js +30 -17
- package/dist/components/common/icons/reset.js +27 -14
- package/dist/components/common/icons/rocket.js +27 -14
- package/dist/components/common/icons/save.js +29 -16
- package/dist/components/common/icons/save2.js +33 -20
- package/dist/components/common/icons/search.js +29 -16
- package/dist/components/common/icons/settings.js +29 -16
- package/dist/components/common/icons/share.js +27 -14
- package/dist/components/common/icons/split.js +55 -42
- package/dist/components/common/icons/square-select.js +29 -16
- package/dist/components/common/icons/swap-horizontal.js +31 -18
- package/dist/components/common/icons/table.js +27 -14
- package/dist/components/common/icons/trash.js +29 -16
- package/dist/components/common/icons/upload.js +27 -14
- package/dist/components/common/icons/vert-dots.js +65 -52
- package/dist/components/common/icons/vert-three-dots.js +40 -27
- package/dist/components/common/icons/warning.js +39 -26
- package/dist/components/common/image-preview.js +33 -71
- package/dist/components/common/info-helper.js +29 -36
- package/dist/components/common/item-selector/accessor.js +13 -7
- package/dist/components/common/item-selector/chickleted-input.js +56 -72
- package/dist/components/common/item-selector/dropdown-list.js +214 -182
- package/dist/components/common/item-selector/item-selector-submenu.js +55 -34
- package/dist/components/common/item-selector/item-selector.js +194 -183
- package/dist/components/common/item-selector/typeahead.js +248 -236
- package/dist/components/common/line-chart.js +58 -80
- package/dist/components/common/loading-spinner.js +31 -46
- package/dist/components/common/logo.js +48 -61
- package/dist/components/common/map-layer-selector.js +25 -31
- package/dist/components/common/modal.js +106 -167
- package/dist/components/common/portaled.js +189 -169
- package/dist/components/common/progress-bar.js +24 -27
- package/dist/components/common/range-brush.js +215 -176
- package/dist/components/common/range-plot.js +63 -52
- package/dist/components/common/range-slider.js +231 -206
- package/dist/components/common/slider/mouse-event.js +66 -59
- package/dist/components/common/slider/slider-bar-handle.js +61 -51
- package/dist/components/common/slider/slider-handle.js +102 -127
- package/dist/components/common/slider/slider.js +162 -143
- package/dist/components/common/styled-components.js +256 -518
- package/dist/components/common/switch.js +11 -11
- package/dist/components/common/time-range-slider-time-title.js +32 -49
- package/dist/components/common/time-range-slider.js +45 -56
- package/dist/components/common/time-slider-marker.js +52 -71
- package/dist/components/common/tippy-tooltip.js +59 -89
- package/dist/components/common/toolbar-item.js +45 -53
- package/dist/components/common/toolbar.js +18 -24
- package/dist/components/common/vertical-toolbar.js +6 -13
- package/dist/components/container.js +119 -87
- package/dist/components/context.js +8 -6
- package/dist/components/editor/constants.js +4 -4
- package/dist/components/editor/editor.js +157 -122
- package/dist/components/editor/feature-action-panel.js +59 -52
- package/dist/components/editor/feature-styles.js +29 -46
- package/dist/components/editor/handle-style.js +29 -38
- package/dist/components/filters/components.js +4 -8
- package/dist/components/filters/filter-panels/filter-panel-with-field-select.js +43 -33
- package/dist/components/filters/filter-panels/multi-select-filter-panel.js +21 -20
- package/dist/components/filters/filter-panels/new-filter-panel.js +31 -24
- package/dist/components/filters/filter-panels/polygon-filter-panel.js +31 -26
- package/dist/components/filters/filter-panels/range-filter-panel.js +21 -20
- package/dist/components/filters/filter-panels/single-select-filter-panel.js +21 -20
- package/dist/components/filters/filter-panels/time-range-filter-panel.js +31 -28
- package/dist/components/filters/index.js +10 -10
- package/dist/components/filters/multi-select-filter.js +9 -11
- package/dist/components/filters/polygon-filter.js +41 -26
- package/dist/components/filters/range-filter.js +7 -9
- package/dist/components/filters/single-select-filter.js +13 -11
- package/dist/components/filters/time-range-filter.js +14 -16
- package/dist/components/filters/time-widget.js +84 -125
- package/dist/components/geocoder/geocoder.js +177 -158
- package/dist/components/geocoder-panel.js +87 -66
- package/dist/components/index.js +329 -328
- package/dist/components/injector.js +63 -44
- package/dist/components/kepler-gl.js +361 -325
- package/dist/components/map/coordinate-info.js +16 -18
- package/dist/components/map/layer-hover-info.js +86 -108
- package/dist/components/map/layer-selector-panel.js +48 -50
- package/dist/components/map/locale-panel.js +44 -38
- package/dist/components/map/map-control-panel.js +47 -70
- package/dist/components/map/map-control-toolbar.js +6 -9
- package/dist/components/map/map-control-tooltip.js +8 -10
- package/dist/components/map/map-control.js +27 -35
- package/dist/components/map/map-draw-panel.js +48 -38
- package/dist/components/map/map-legend-panel.js +50 -47
- package/dist/components/map/map-legend.js +116 -133
- package/dist/components/map/map-popover.js +100 -155
- package/dist/components/map/split-map-button.js +34 -30
- package/dist/components/map/toggle-3d-button.js +27 -25
- package/dist/components/map-container.js +359 -313
- package/dist/components/maps-layout.js +26 -16
- package/dist/components/modal-container.js +355 -359
- package/dist/components/modals/add-map-style-modal.js +194 -233
- package/dist/components/modals/cloud-tile.js +67 -96
- package/dist/components/modals/data-table-modal.js +152 -155
- package/dist/components/modals/delete-data-modal.js +20 -20
- package/dist/components/modals/error-display.js +7 -9
- package/dist/components/modals/export-data-modal.js +140 -118
- package/dist/components/modals/export-image-modal.js +69 -82
- package/dist/components/modals/export-map-modal/components.js +18 -20
- package/dist/components/modals/export-map-modal/export-html-map.js +74 -82
- package/dist/components/modals/export-map-modal/export-json-map.js +45 -65
- package/dist/components/modals/export-map-modal/export-map-modal.js +47 -42
- package/dist/components/modals/image-modal-container.js +21 -20
- package/dist/components/modals/load-data-modal.js +30 -28
- package/dist/components/modals/load-storage-map.js +178 -277
- package/dist/components/modals/loading-dialog.js +19 -41
- package/dist/components/modals/modal-dialog.js +6 -4
- package/dist/components/modals/modal-tabs.js +48 -83
- package/dist/components/modals/overwrite-map-modal.js +30 -41
- package/dist/components/modals/provider-modal-container.js +42 -23
- package/dist/components/modals/save-map-modal.js +83 -107
- package/dist/components/modals/share-map-modal.js +95 -101
- package/dist/components/modals/status-panel.js +43 -63
- package/dist/components/modals/storage-map-viewer.js +70 -133
- package/dist/components/notification-panel/notification-item.js +97 -94
- package/dist/components/notification-panel.js +43 -35
- package/dist/components/performance.js +53 -49
- package/dist/components/plot-container.js +169 -151
- package/dist/components/side-panel/cloud-storage-dropdown.js +15 -13
- package/dist/components/side-panel/common/dataset-info.js +12 -16
- package/dist/components/side-panel/common/dataset-tag.js +27 -48
- package/dist/components/side-panel/common/dataset-title.js +116 -119
- package/dist/components/side-panel/common/source-data-catalog.js +32 -31
- package/dist/components/side-panel/common/source-data-selector.js +77 -52
- package/dist/components/side-panel/custom-panel.js +8 -6
- package/dist/components/side-panel/filter-manager.js +62 -48
- package/dist/components/side-panel/filter-panel/filter-panel-header.js +25 -35
- package/dist/components/side-panel/filter-panel/filter-panel.js +64 -46
- package/dist/components/side-panel/interaction-manager.js +18 -20
- package/dist/components/side-panel/interaction-panel/brush-config.js +17 -17
- package/dist/components/side-panel/interaction-panel/interaction-panel.js +95 -76
- package/dist/components/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.js +143 -118
- package/dist/components/side-panel/interaction-panel/tooltip-config.js +76 -95
- package/dist/components/side-panel/layer-manager.js +115 -105
- package/dist/components/side-panel/layer-panel/add-layer-button.js +54 -92
- package/dist/components/side-panel/layer-panel/color-dimension-scale-selector.js +5 -5
- package/dist/components/side-panel/layer-panel/color-palette.js +37 -50
- package/dist/components/side-panel/layer-panel/color-range-selector.js +207 -196
- package/dist/components/side-panel/layer-panel/color-selector.js +110 -104
- package/dist/components/side-panel/layer-panel/column-selector.js +22 -34
- package/dist/components/side-panel/layer-panel/custom-markers-config-group.js +4 -4
- package/dist/components/side-panel/layer-panel/custom-palette.js +205 -248
- package/dist/components/side-panel/layer-panel/custom-picker.js +69 -51
- package/dist/components/side-panel/layer-panel/dataset-layer-group.js +42 -37
- package/dist/components/side-panel/layer-panel/dataset-layer-section.js +27 -31
- package/dist/components/side-panel/layer-panel/dataset-section.js +35 -45
- package/dist/components/side-panel/layer-panel/dimension-scale-selector.js +13 -14
- package/dist/components/side-panel/layer-panel/hex-column-config.js +55 -32
- package/dist/components/side-panel/layer-panel/layer-aggregation-resolution.js +5 -5
- package/dist/components/side-panel/layer-panel/layer-column-config.js +46 -42
- package/dist/components/side-panel/layer-panel/layer-config-group.js +144 -178
- package/dist/components/side-panel/layer-panel/layer-configurator.js +830 -826
- package/dist/components/side-panel/layer-panel/layer-list.js +94 -101
- package/dist/components/side-panel/layer-panel/layer-panel-header.js +82 -124
- package/dist/components/side-panel/layer-panel/layer-panel.js +105 -111
- package/dist/components/side-panel/layer-panel/layer-type-dropdown-list.js +58 -67
- package/dist/components/side-panel/layer-panel/layer-type-list-item.js +32 -47
- package/dist/components/side-panel/layer-panel/layer-type-selector.js +41 -30
- package/dist/components/side-panel/layer-panel/layer-visibility-by-zoom.js +43 -42
- package/dist/components/side-panel/layer-panel/panel-view-list-toggle.js +57 -55
- package/dist/components/side-panel/layer-panel/single-color-palette.js +33 -48
- package/dist/components/side-panel/layer-panel/text-label-panel.js +116 -81
- package/dist/components/side-panel/layer-panel/vis-config-by-field-selector.js +102 -88
- package/dist/components/side-panel/layer-panel/vis-config-slider.js +85 -99
- package/dist/components/side-panel/layer-panel/vis-config-switch.js +29 -38
- package/dist/components/side-panel/map-manager.js +89 -70
- package/dist/components/side-panel/map-style-panel/map-layer-selector.js +60 -72
- package/dist/components/side-panel/map-style-panel/map-style-selector.js +42 -64
- package/dist/components/side-panel/panel-dropdown.js +37 -21
- package/dist/components/side-panel/panel-header-action.js +65 -60
- package/dist/components/side-panel/panel-header.js +184 -165
- package/dist/components/side-panel/panel-tab.js +29 -35
- package/dist/components/side-panel/panel-title.js +18 -15
- package/dist/components/side-panel/panel-toggle.js +31 -30
- package/dist/components/side-panel/side-bar.js +91 -100
- package/dist/components/side-panel.js +123 -108
- package/dist/connect/keplergl-connect.js +26 -17
- package/dist/connect/with-local-selector.js +63 -31
- package/dist/constants/action-types.js +115 -113
- package/dist/constants/color-palette.js +16 -14
- package/dist/constants/color-ranges.js +28 -23
- package/dist/constants/custom-color-ranges.js +12 -12
- package/dist/constants/default-settings.js +254 -323
- package/dist/constants/index.js +63 -63
- package/dist/constants/keyevent.js +4 -4
- package/dist/constants/tooltip.js +5 -5
- package/dist/constants/user-feedbacks.js +5 -9
- package/dist/constants/user-guides.js +10 -10
- package/dist/deckgl-layers/3d-building-layer/3d-building-layer.js +63 -37
- package/dist/deckgl-layers/3d-building-layer/3d-building-utils.js +56 -52
- package/dist/deckgl-layers/cluster-layer/cluster-layer.js +168 -165
- package/dist/deckgl-layers/column-layer/enhanced-column-layer.js +43 -24
- package/dist/deckgl-layers/grid-layer/enhanced-cpu-grid-layer.js +40 -27
- package/dist/deckgl-layers/hexagon-layer/enhanced-hexagon-layer.js +40 -27
- package/dist/deckgl-layers/layer-utils/cluster-utils.js +68 -60
- package/dist/deckgl-layers/layer-utils/cpu-aggregator.js +282 -276
- package/dist/deckgl-layers/layer-utils/shader-utils.js +2 -2
- package/dist/deckgl-layers/line-layer/line-layer.js +70 -62
- package/dist/deckgl-layers/svg-icon-layer/scatterplot-icon-layer.js +51 -37
- package/dist/deckgl-layers/svg-icon-layer/svg-icon-layer.js +85 -65
- package/dist/index.js +16 -15
- package/dist/layers/aggregation-layer.js +331 -299
- package/dist/layers/arc-layer/arc-layer-icon.js +41 -27
- package/dist/layers/arc-layer/arc-layer.js +201 -174
- package/dist/layers/base-layer.js +1544 -1371
- package/dist/layers/cluster-layer/cluster-layer-icon.js +44 -30
- package/dist/layers/cluster-layer/cluster-layer.js +103 -89
- package/dist/layers/default-layer-icon.js +53 -39
- package/dist/layers/geojson-layer/geojson-layer-icon.js +55 -42
- package/dist/layers/geojson-layer/geojson-layer.js +353 -292
- package/dist/layers/geojson-layer/geojson-utils.js +36 -31
- package/dist/layers/grid-layer/grid-layer-icon.js +100 -87
- package/dist/layers/grid-layer/grid-layer.js +61 -51
- package/dist/layers/grid-layer/grid-utils.js +9 -13
- package/dist/layers/h3-hexagon-layer/h3-hexagon-layer-icon.js +35 -21
- package/dist/layers/h3-hexagon-layer/h3-hexagon-layer.js +260 -225
- package/dist/layers/h3-hexagon-layer/h3-utils.js +16 -16
- package/dist/layers/heatmap-layer/heatmap-layer-icon.js +52 -39
- package/dist/layers/heatmap-layer/heatmap-layer.js +171 -140
- package/dist/layers/hexagon-layer/hexagon-layer-icon.js +64 -51
- package/dist/layers/hexagon-layer/hexagon-layer.js +63 -49
- package/dist/layers/hexagon-layer/hexagon-utils.js +14 -15
- package/dist/layers/icon-layer/icon-info-modal.js +75 -82
- package/dist/layers/icon-layer/icon-layer-icon.js +37 -24
- package/dist/layers/icon-layer/icon-layer.js +303 -274
- package/dist/layers/index.js +29 -43
- package/dist/layers/layer-factory.js +41 -25
- package/dist/layers/layer-text-label.js +23 -21
- package/dist/layers/layer-update.js +18 -16
- package/dist/layers/line-layer/line-layer-icon.js +43 -30
- package/dist/layers/line-layer/line-layer.js +142 -123
- package/dist/layers/mapbox-utils.js +62 -61
- package/dist/layers/mapboxgl-layer.js +169 -124
- package/dist/layers/point-layer/point-layer-icon.js +59 -45
- package/dist/layers/point-layer/point-layer.js +386 -355
- package/dist/layers/s2-geometry-layer/s2-geometry-layer.js +238 -208
- package/dist/layers/s2-geometry-layer/s2-layer-icon.js +35 -21
- package/dist/layers/s2-geometry-layer/s2-utils.js +8 -9
- package/dist/layers/scenegraph-layer/scenegraph-info-modal.js +25 -24
- package/dist/layers/scenegraph-layer/scenegraph-layer-icon.js +115 -102
- package/dist/layers/scenegraph-layer/scenegraph-layer.js +172 -148
- package/dist/layers/trip-layer/trip-info-modal.js +30 -50
- package/dist/layers/trip-layer/trip-layer-icon.js +53 -40
- package/dist/layers/trip-layer/trip-layer.js +307 -239
- package/dist/layers/trip-layer/trip-utils.js +50 -34
- package/dist/layers/types.js +2 -2
- package/dist/localization/formatted-message.js +10 -8
- package/dist/localization/index.js +7 -7
- package/dist/localization/locales.js +9 -6
- package/dist/localization/messages.js +10 -13
- package/dist/localization/translations/ca.js +13 -11
- package/dist/localization/translations/cn.js +13 -11
- package/dist/localization/translations/en.js +13 -11
- package/dist/localization/translations/es.js +13 -11
- package/dist/localization/translations/fi.js +13 -11
- package/dist/localization/translations/ja.js +13 -11
- package/dist/localization/translations/pt.js +13 -11
- package/dist/localization/translations/ru.js +13 -11
- package/dist/middleware/index.js +5 -3
- package/dist/processors/data-processor.js +201 -164
- package/dist/processors/file-handler.js +233 -111
- package/dist/processors/index.js +4 -4
- package/dist/reducers/combined-updaters.js +41 -41
- package/dist/reducers/composer-helpers.js +45 -20
- package/dist/reducers/composers.js +8 -9
- package/dist/reducers/core.js +35 -31
- package/dist/reducers/index.js +22 -21
- package/dist/reducers/map-state-updaters.js +47 -65
- package/dist/reducers/map-state.js +15 -23
- package/dist/reducers/map-style-updaters.js +159 -233
- package/dist/reducers/map-style.js +16 -30
- package/dist/reducers/provider-state-updaters.js +229 -217
- package/dist/reducers/provider-state.js +17 -29
- package/dist/reducers/root.js +58 -86
- package/dist/reducers/ui-state-updaters.js +218 -337
- package/dist/reducers/ui-state.js +16 -45
- package/dist/reducers/vis-state-merger.js +209 -205
- package/dist/reducers/vis-state-selectors.js +19 -5
- package/dist/reducers/vis-state-updaters.js +876 -1003
- package/dist/reducers/vis-state.js +16 -75
- package/dist/schemas/dataset-schema.js +108 -84
- package/dist/schemas/index.js +29 -28
- package/dist/schemas/map-state-schema.js +18 -21
- package/dist/schemas/map-style-schema.js +55 -47
- package/dist/schemas/schema-manager.js +161 -147
- package/dist/schemas/schema-utils.js +9 -8
- package/dist/schemas/schema.js +87 -72
- package/dist/schemas/versions.js +3 -3
- package/dist/schemas/vis-state-schema.js +583 -441
- package/dist/styles/base.js +1021 -1217
- package/dist/styles/index.js +3 -3
- package/dist/styles/media-breakpoints.js +18 -23
- package/dist/tasks/tasks.js +39 -36
- package/dist/templates/export-map-html.js +4 -233
- package/dist/utils/aggregate-utils.js +16 -13
- package/dist/utils/color-utils.js +37 -29
- package/dist/utils/custom-scales.js +3 -3
- package/dist/utils/data-scale-utils.js +13 -6
- package/dist/utils/data-utils.js +83 -60
- package/dist/utils/dataset-utils.js +77 -48
- package/dist/utils/dom-to-image.js +163 -108
- package/dist/utils/dom-utils.js +105 -88
- package/dist/utils/export-utils.js +103 -116
- package/dist/utils/filter-utils.js +374 -379
- package/dist/utils/gl-utils.js +15 -16
- package/dist/utils/gpu-filter-utils.js +73 -54
- package/dist/utils/index.js +48 -47
- package/dist/utils/interaction-utils.js +46 -53
- package/dist/utils/layer-utils.js +78 -89
- package/dist/utils/locale-utils.js +16 -24
- package/dist/utils/map-style-utils/mapbox-gl-style-editor.js +76 -67
- package/dist/utils/map-style-utils/mapbox-utils.js +3 -4
- package/dist/utils/mapbox-utils.js +4 -3
- package/dist/utils/notifications-utils.js +38 -33
- package/dist/utils/observe-dimensions.js +54 -42
- package/dist/utils/projection-utils.js +11 -14
- package/dist/utils/split-map-utils.js +33 -30
- package/dist/utils/table-utils/data-container-utils.js +14 -15
- package/dist/utils/table-utils/data-row.js +65 -58
- package/dist/utils/table-utils/index.js +2 -2
- package/dist/utils/table-utils/indexed-data-container.js +173 -105
- package/dist/utils/table-utils/kepler-table.js +386 -362
- package/dist/utils/table-utils/row-data-container.js +164 -99
- package/dist/utils/utils.js +30 -29
- package/package.json +1 -1
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
3
4
|
Object.defineProperty(exports, "__esModule", {
|
|
4
5
|
value: true
|
|
5
6
|
});
|
|
6
7
|
exports.toggleSplitMapUpdater = exports.toggleSidePanelUpdater = exports.toggleModalUpdater = exports.toggleMapControlUpdater = exports.toggleLayerPanelListViewUpdater = exports.startExportingImageUpdater = exports.showExportDropdownUpdater = exports.showDatasetTableUpdater = exports.setUserMapboxAccessTokenUpdater = exports.setMapControlVisibilityUpdater = exports.setLocaleUpdater = exports.setExportSelectedDatasetUpdater = exports.setExportMapHTMLModeUpdater = exports.setExportMapFormatUpdater = exports.setExportImageSettingUpdater = exports.setExportImageErrorUpdater = exports.setExportImageDataUriUpdater = exports.setExportFilteredUpdater = exports.setExportDataUpdater = exports.setExportDataTypeUpdater = exports.removeNotificationUpdater = exports.openDeleteModalUpdater = exports.loadFilesUpdater = exports.loadFilesSuccessUpdater = exports.loadFilesErrUpdater = exports.initUiStateUpdater = exports.hideExportDropdownUpdater = exports.cleanupExportImageUpdater = exports.addNotificationUpdater = exports.INITIAL_UI_STATE = exports.DEFAULT_NOTIFICATIONS = exports.DEFAULT_MODAL = exports.DEFAULT_MAP_CONTROLS = exports.DEFAULT_LOAD_FILES = exports.DEFAULT_EXPORT_MAP = exports.DEFAULT_EXPORT_JSON = exports.DEFAULT_EXPORT_IMAGE = exports.DEFAULT_EXPORT_HTML = exports.DEFAULT_EXPORT_DATA = exports.DEFAULT_ACTIVE_SIDE_PANEL = void 0;
|
|
8
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
9
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
7
10
|
var _defaultSettings = require("../constants/default-settings");
|
|
8
11
|
var _locales = require("../localization/locales");
|
|
9
12
|
var _notificationsUtils = require("../utils/notifications-utils");
|
|
10
13
|
var _exportUtils = require("../utils/export-utils");
|
|
11
14
|
var _composerHelpers = require("./composer-helpers");
|
|
12
|
-
|
|
15
|
+
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; }
|
|
16
|
+
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; } // Copyright (c) 2022 Uber Technologies, Inc.
|
|
13
17
|
//
|
|
14
18
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
15
19
|
// of this software and associated documentation files (the "Software"), to deal
|
|
@@ -28,9 +32,8 @@ var _composerHelpers = require("./composer-helpers");
|
|
|
28
32
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
29
33
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
30
34
|
// THE SOFTWARE.
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
const DEFAULT_MODAL = exports.DEFAULT_MODAL = _defaultSettings.ADD_DATA_ID;
|
|
35
|
+
var DEFAULT_ACTIVE_SIDE_PANEL = exports.DEFAULT_ACTIVE_SIDE_PANEL = 'layer';
|
|
36
|
+
var DEFAULT_MODAL = exports.DEFAULT_MODAL = _defaultSettings.ADD_DATA_ID;
|
|
34
37
|
|
|
35
38
|
/**
|
|
36
39
|
* Updaters for `uiState` reducer. Can be used in your root reducer to directly modify kepler.gl's state.
|
|
@@ -69,10 +72,10 @@ const DEFAULT_MODAL = exports.DEFAULT_MODAL = _defaultSettings.ADD_DATA_ID;
|
|
|
69
72
|
* export default composedReducer;
|
|
70
73
|
*/
|
|
71
74
|
/* eslint-disable no-unused-vars */
|
|
72
|
-
|
|
75
|
+
var uiStateUpdaters = null;
|
|
73
76
|
/* eslint-enable no-unused-vars */
|
|
74
77
|
|
|
75
|
-
|
|
78
|
+
var DEFAULT_MAP_CONTROLS_FEATURES = {
|
|
76
79
|
show: true,
|
|
77
80
|
active: false,
|
|
78
81
|
disableClose: false,
|
|
@@ -92,10 +95,9 @@ const DEFAULT_MAP_CONTROLS_FEATURES = {
|
|
|
92
95
|
* @property mapLocale Default: `{show: false, active: false}`
|
|
93
96
|
* @public
|
|
94
97
|
*/
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
}), {});
|
|
98
|
+
var DEFAULT_MAP_CONTROLS = exports.DEFAULT_MAP_CONTROLS = Object.keys(_defaultSettings.MAP_CONTROLS).reduce(function (_final, current) {
|
|
99
|
+
return _objectSpread(_objectSpread({}, _final), {}, (0, _defineProperty2["default"])({}, current, DEFAULT_MAP_CONTROLS_FEATURES));
|
|
100
|
+
}, {});
|
|
99
101
|
|
|
100
102
|
/**
|
|
101
103
|
* Default image export config
|
|
@@ -112,7 +114,7 @@ const DEFAULT_MAP_CONTROLS = exports.DEFAULT_MAP_CONTROLS = Object.keys(_default
|
|
|
112
114
|
* @property error Default: `false`
|
|
113
115
|
* @public
|
|
114
116
|
*/
|
|
115
|
-
|
|
117
|
+
var DEFAULT_EXPORT_IMAGE = exports.DEFAULT_EXPORT_IMAGE = {
|
|
116
118
|
// user options
|
|
117
119
|
ratio: _defaultSettings.EXPORT_IMG_RATIOS.SCREEN,
|
|
118
120
|
resolution: _defaultSettings.RESOLUTIONS.ONE_X,
|
|
@@ -135,7 +137,7 @@ const DEFAULT_EXPORT_IMAGE = exports.DEFAULT_EXPORT_IMAGE = {
|
|
|
135
137
|
processing: false,
|
|
136
138
|
error: false
|
|
137
139
|
};
|
|
138
|
-
|
|
140
|
+
var DEFAULT_LOAD_FILES = exports.DEFAULT_LOAD_FILES = {
|
|
139
141
|
fileLoading: false
|
|
140
142
|
};
|
|
141
143
|
|
|
@@ -148,7 +150,7 @@ const DEFAULT_LOAD_FILES = exports.DEFAULT_LOAD_FILES = {
|
|
|
148
150
|
* @property filtered Default: `true`,
|
|
149
151
|
* @public
|
|
150
152
|
*/
|
|
151
|
-
|
|
153
|
+
var DEFAULT_EXPORT_DATA = exports.DEFAULT_EXPORT_DATA = {
|
|
152
154
|
selectedDataset: '',
|
|
153
155
|
dataType: _defaultSettings.EXPORT_DATA_TYPE.CSV,
|
|
154
156
|
filtered: true
|
|
@@ -157,7 +159,7 @@ const DEFAULT_EXPORT_DATA = exports.DEFAULT_EXPORT_DATA = {
|
|
|
157
159
|
/**
|
|
158
160
|
* @constant
|
|
159
161
|
*/
|
|
160
|
-
|
|
162
|
+
var DEFAULT_NOTIFICATIONS = exports.DEFAULT_NOTIFICATIONS = [];
|
|
161
163
|
|
|
162
164
|
/**
|
|
163
165
|
* @constant
|
|
@@ -166,7 +168,7 @@ const DEFAULT_NOTIFICATIONS = exports.DEFAULT_NOTIFICATIONS = [];
|
|
|
166
168
|
* @property mode - Default: 'READ', read only or editable
|
|
167
169
|
* @public
|
|
168
170
|
*/
|
|
169
|
-
|
|
171
|
+
var DEFAULT_EXPORT_HTML = exports.DEFAULT_EXPORT_HTML = {
|
|
170
172
|
exportMapboxAccessToken: null,
|
|
171
173
|
userMapboxToken: '',
|
|
172
174
|
mode: _defaultSettings.EXPORT_HTML_MAP_MODES.READ
|
|
@@ -177,7 +179,7 @@ const DEFAULT_EXPORT_HTML = exports.DEFAULT_EXPORT_HTML = {
|
|
|
177
179
|
* @property hasData - Default: 'true',
|
|
178
180
|
* @public
|
|
179
181
|
*/
|
|
180
|
-
|
|
182
|
+
var DEFAULT_EXPORT_JSON = exports.DEFAULT_EXPORT_JSON = {
|
|
181
183
|
hasData: true
|
|
182
184
|
};
|
|
183
185
|
|
|
@@ -189,11 +191,7 @@ const DEFAULT_EXPORT_JSON = exports.DEFAULT_EXPORT_JSON = {
|
|
|
189
191
|
* @property format - Default: 'HTML',
|
|
190
192
|
* @public
|
|
191
193
|
*/
|
|
192
|
-
|
|
193
|
-
[_defaultSettings.EXPORT_MAP_FORMATS.HTML]: DEFAULT_EXPORT_HTML,
|
|
194
|
-
[_defaultSettings.EXPORT_MAP_FORMATS.JSON]: DEFAULT_EXPORT_JSON,
|
|
195
|
-
format: _defaultSettings.EXPORT_MAP_FORMATS.HTML
|
|
196
|
-
};
|
|
194
|
+
var DEFAULT_EXPORT_MAP = exports.DEFAULT_EXPORT_MAP = (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, _defaultSettings.EXPORT_MAP_FORMATS.HTML, DEFAULT_EXPORT_HTML), _defaultSettings.EXPORT_MAP_FORMATS.JSON, DEFAULT_EXPORT_JSON), "format", _defaultSettings.EXPORT_MAP_FORMATS.HTML);
|
|
197
195
|
|
|
198
196
|
/**
|
|
199
197
|
* Default initial `uiState`
|
|
@@ -213,7 +211,7 @@ const DEFAULT_EXPORT_MAP = exports.DEFAULT_EXPORT_MAP = {
|
|
|
213
211
|
* @property loadFiles
|
|
214
212
|
* @public
|
|
215
213
|
*/
|
|
216
|
-
|
|
214
|
+
var INITIAL_UI_STATE = exports.INITIAL_UI_STATE = {
|
|
217
215
|
readOnly: false,
|
|
218
216
|
activeSidePanel: DEFAULT_ACTIVE_SIDE_PANEL,
|
|
219
217
|
currentModal: DEFAULT_MODAL,
|
|
@@ -241,10 +239,9 @@ const INITIAL_UI_STATE = exports.INITIAL_UI_STATE = {
|
|
|
241
239
|
* @memberof uiStateUpdaters
|
|
242
240
|
|
|
243
241
|
*/
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
});
|
|
242
|
+
var initUiStateUpdater = exports.initUiStateUpdater = function initUiStateUpdater(state, action) {
|
|
243
|
+
return _objectSpread(_objectSpread({}, state), (action.payload || {}).initialUiState);
|
|
244
|
+
};
|
|
248
245
|
|
|
249
246
|
/**
|
|
250
247
|
* Toggle active side panel
|
|
@@ -255,15 +252,11 @@ const initUiStateUpdater = (state, action) => ({
|
|
|
255
252
|
* @returns nextState
|
|
256
253
|
* @public
|
|
257
254
|
*/
|
|
258
|
-
exports.
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
payload: id
|
|
262
|
-
} = _ref;
|
|
263
|
-
return id === state.activeSidePanel ? state : {
|
|
264
|
-
...state,
|
|
255
|
+
var toggleSidePanelUpdater = exports.toggleSidePanelUpdater = function toggleSidePanelUpdater(state, _ref) {
|
|
256
|
+
var id = _ref.payload;
|
|
257
|
+
return id === state.activeSidePanel ? state : _objectSpread(_objectSpread({}, state), {}, {
|
|
265
258
|
activeSidePanel: id
|
|
266
|
-
};
|
|
259
|
+
});
|
|
267
260
|
};
|
|
268
261
|
|
|
269
262
|
/**
|
|
@@ -281,15 +274,11 @@ const toggleSidePanelUpdater = (state, _ref) => {
|
|
|
281
274
|
* @returns nextState
|
|
282
275
|
* @public
|
|
283
276
|
*/
|
|
284
|
-
exports.
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
payload: id
|
|
288
|
-
} = _ref2;
|
|
289
|
-
return {
|
|
290
|
-
...state,
|
|
277
|
+
var toggleModalUpdater = exports.toggleModalUpdater = function toggleModalUpdater(state, _ref2) {
|
|
278
|
+
var id = _ref2.payload;
|
|
279
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
291
280
|
currentModal: id
|
|
292
|
-
};
|
|
281
|
+
});
|
|
293
282
|
};
|
|
294
283
|
|
|
295
284
|
/**
|
|
@@ -297,15 +286,11 @@ const toggleModalUpdater = (state, _ref2) => {
|
|
|
297
286
|
* @memberof uiStateUpdaters
|
|
298
287
|
* @public
|
|
299
288
|
*/
|
|
300
|
-
exports.
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
payload: id
|
|
304
|
-
} = _ref3;
|
|
305
|
-
return {
|
|
306
|
-
...state,
|
|
289
|
+
var showExportDropdownUpdater = exports.showExportDropdownUpdater = function showExportDropdownUpdater(state, _ref3) {
|
|
290
|
+
var id = _ref3.payload;
|
|
291
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
307
292
|
visibleDropdown: id
|
|
308
|
-
};
|
|
293
|
+
});
|
|
309
294
|
};
|
|
310
295
|
|
|
311
296
|
/**
|
|
@@ -313,11 +298,11 @@ const showExportDropdownUpdater = (state, _ref3) => {
|
|
|
313
298
|
* @memberof uiStateUpdaters
|
|
314
299
|
* @public
|
|
315
300
|
*/
|
|
316
|
-
exports.
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
}
|
|
301
|
+
var hideExportDropdownUpdater = exports.hideExportDropdownUpdater = function hideExportDropdownUpdater(state) {
|
|
302
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
303
|
+
visibleDropdown: null
|
|
304
|
+
});
|
|
305
|
+
};
|
|
321
306
|
|
|
322
307
|
/**
|
|
323
308
|
* Toggle active map control panel
|
|
@@ -328,28 +313,20 @@ const hideExportDropdownUpdater = state => ({
|
|
|
328
313
|
* @returns nextState
|
|
329
314
|
* @public
|
|
330
315
|
*/
|
|
331
|
-
exports.
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
payload
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
// this handles split map interaction
|
|
346
|
-
// Toggling from within the same map will simply toggle the active property
|
|
347
|
-
// Toggling from within different maps we set the active property to true
|
|
348
|
-
active: index === state.mapControls[panelId].activeMapIndex ? !state.mapControls[panelId].active : true,
|
|
349
|
-
activeMapIndex: index
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
};
|
|
316
|
+
var toggleMapControlUpdater = exports.toggleMapControlUpdater = function toggleMapControlUpdater(state, _ref4) {
|
|
317
|
+
var _ref4$payload = _ref4.payload,
|
|
318
|
+
panelId = _ref4$payload.panelId,
|
|
319
|
+
_ref4$payload$index = _ref4$payload.index,
|
|
320
|
+
index = _ref4$payload$index === void 0 ? 0 : _ref4$payload$index;
|
|
321
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
322
|
+
mapControls: _objectSpread(_objectSpread({}, state.mapControls), {}, (0, _defineProperty2["default"])({}, panelId, _objectSpread(_objectSpread({}, state.mapControls[panelId]), {}, {
|
|
323
|
+
// this handles split map interaction
|
|
324
|
+
// Toggling from within the same map will simply toggle the active property
|
|
325
|
+
// Toggling from within different maps we set the active property to true
|
|
326
|
+
active: index === state.mapControls[panelId].activeMapIndex ? !state.mapControls[panelId].active : true,
|
|
327
|
+
activeMapIndex: index
|
|
328
|
+
})))
|
|
329
|
+
});
|
|
353
330
|
};
|
|
354
331
|
|
|
355
332
|
/**
|
|
@@ -361,28 +338,19 @@ const toggleMapControlUpdater = (state, _ref4) => {
|
|
|
361
338
|
* @returns nextState
|
|
362
339
|
* @public
|
|
363
340
|
*/
|
|
364
|
-
exports.
|
|
365
|
-
const setMapControlVisibilityUpdater = (state, _ref5) => {
|
|
341
|
+
var setMapControlVisibilityUpdater = exports.setMapControlVisibilityUpdater = function setMapControlVisibilityUpdater(state, _ref5) {
|
|
366
342
|
var _state$mapControls;
|
|
367
|
-
|
|
368
|
-
payload
|
|
369
|
-
|
|
370
|
-
show
|
|
371
|
-
}
|
|
372
|
-
} = _ref5;
|
|
343
|
+
var _ref5$payload = _ref5.payload,
|
|
344
|
+
panelId = _ref5$payload.panelId,
|
|
345
|
+
show = _ref5$payload.show;
|
|
373
346
|
if (!((_state$mapControls = state.mapControls) !== null && _state$mapControls !== void 0 && _state$mapControls[panelId])) {
|
|
374
347
|
return state;
|
|
375
348
|
}
|
|
376
|
-
return {
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
...state.mapControls[panelId],
|
|
382
|
-
show: Boolean(show)
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
};
|
|
349
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
350
|
+
mapControls: _objectSpread(_objectSpread({}, state.mapControls), {}, (0, _defineProperty2["default"])({}, panelId, _objectSpread(_objectSpread({}, state.mapControls[panelId]), {}, {
|
|
351
|
+
show: Boolean(show)
|
|
352
|
+
})))
|
|
353
|
+
});
|
|
386
354
|
};
|
|
387
355
|
|
|
388
356
|
/**
|
|
@@ -394,16 +362,12 @@ const setMapControlVisibilityUpdater = (state, _ref5) => {
|
|
|
394
362
|
* @returns nextState
|
|
395
363
|
* @public
|
|
396
364
|
*/
|
|
397
|
-
exports.
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
payload: datasetKeyToRemove
|
|
401
|
-
} = _ref6;
|
|
402
|
-
return {
|
|
403
|
-
...state,
|
|
365
|
+
var openDeleteModalUpdater = exports.openDeleteModalUpdater = function openDeleteModalUpdater(state, _ref6) {
|
|
366
|
+
var datasetKeyToRemove = _ref6.payload;
|
|
367
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
404
368
|
currentModal: _defaultSettings.DELETE_DATA_ID,
|
|
405
|
-
datasetKeyToRemove
|
|
406
|
-
};
|
|
369
|
+
datasetKeyToRemove: datasetKeyToRemove
|
|
370
|
+
});
|
|
407
371
|
};
|
|
408
372
|
|
|
409
373
|
/**
|
|
@@ -413,26 +377,18 @@ const openDeleteModalUpdater = (state, _ref6) => {
|
|
|
413
377
|
* @returns nextState
|
|
414
378
|
* @public
|
|
415
379
|
*/
|
|
416
|
-
exports.
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
}
|
|
421
|
-
|
|
422
|
-
...state.exportImage,
|
|
423
|
-
...newSetting
|
|
424
|
-
};
|
|
425
|
-
const imageSize = (0, _exportUtils.calculateExportImageSize)(updated) || state.exportImage.imageSize;
|
|
426
|
-
return {
|
|
427
|
-
...state,
|
|
428
|
-
exportImage: {
|
|
429
|
-
...updated,
|
|
380
|
+
var setExportImageSettingUpdater = exports.setExportImageSettingUpdater = function setExportImageSettingUpdater(state, _ref7) {
|
|
381
|
+
var newSetting = _ref7.payload;
|
|
382
|
+
var updated = _objectSpread(_objectSpread({}, state.exportImage), newSetting);
|
|
383
|
+
var imageSize = (0, _exportUtils.calculateExportImageSize)(updated) || state.exportImage.imageSize;
|
|
384
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
385
|
+
exportImage: _objectSpread(_objectSpread({}, updated), {}, {
|
|
430
386
|
// @ts-expect-error
|
|
431
387
|
// TODO: calculateExportImageSize does not return imageSize.zoomOffset,
|
|
432
388
|
// do we need take this value from current state, or return defaul value = 0
|
|
433
|
-
imageSize
|
|
434
|
-
}
|
|
435
|
-
};
|
|
389
|
+
imageSize: imageSize
|
|
390
|
+
})
|
|
391
|
+
});
|
|
436
392
|
};
|
|
437
393
|
|
|
438
394
|
/**
|
|
@@ -444,38 +400,28 @@ const setExportImageSettingUpdater = (state, _ref7) => {
|
|
|
444
400
|
* @returns nextState
|
|
445
401
|
* @public
|
|
446
402
|
*/
|
|
447
|
-
exports.
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
} = _ref8;
|
|
452
|
-
return {
|
|
453
|
-
...state,
|
|
454
|
-
exportImage: {
|
|
455
|
-
...state.exportImage,
|
|
403
|
+
var setExportImageDataUriUpdater = exports.setExportImageDataUriUpdater = function setExportImageDataUriUpdater(state, _ref8) {
|
|
404
|
+
var dataUri = _ref8.payload;
|
|
405
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
406
|
+
exportImage: _objectSpread(_objectSpread({}, state.exportImage), {}, {
|
|
456
407
|
processing: false,
|
|
457
408
|
imageDataUri: dataUri
|
|
458
|
-
}
|
|
459
|
-
};
|
|
409
|
+
})
|
|
410
|
+
});
|
|
460
411
|
};
|
|
461
412
|
|
|
462
413
|
/**
|
|
463
414
|
* @memberof uiStateUpdaters
|
|
464
415
|
* @public
|
|
465
416
|
*/
|
|
466
|
-
exports.
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
} = _ref9;
|
|
471
|
-
return {
|
|
472
|
-
...state,
|
|
473
|
-
exportImage: {
|
|
474
|
-
...state.exportImage,
|
|
417
|
+
var setExportImageErrorUpdater = exports.setExportImageErrorUpdater = function setExportImageErrorUpdater(state, _ref9) {
|
|
418
|
+
var error = _ref9.payload;
|
|
419
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
420
|
+
exportImage: _objectSpread(_objectSpread({}, state.exportImage), {}, {
|
|
475
421
|
processing: false,
|
|
476
|
-
error
|
|
477
|
-
}
|
|
478
|
-
};
|
|
422
|
+
error: error
|
|
423
|
+
})
|
|
424
|
+
});
|
|
479
425
|
};
|
|
480
426
|
|
|
481
427
|
/**
|
|
@@ -483,18 +429,17 @@ const setExportImageErrorUpdater = (state, _ref9) => {
|
|
|
483
429
|
* @memberof uiStateUpdaters
|
|
484
430
|
* @public
|
|
485
431
|
*/
|
|
486
|
-
exports.
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
});
|
|
432
|
+
var cleanupExportImageUpdater = exports.cleanupExportImageUpdater = function cleanupExportImageUpdater(state) {
|
|
433
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
434
|
+
exportImage: _objectSpread(_objectSpread({}, state.exportImage), {}, {
|
|
435
|
+
exporting: false,
|
|
436
|
+
imageDataUri: '',
|
|
437
|
+
error: false,
|
|
438
|
+
processing: false,
|
|
439
|
+
center: false
|
|
440
|
+
})
|
|
441
|
+
});
|
|
442
|
+
};
|
|
498
443
|
|
|
499
444
|
/**
|
|
500
445
|
* Start image exporting flow
|
|
@@ -504,15 +449,12 @@ const cleanupExportImageUpdater = state => ({
|
|
|
504
449
|
* @returns {UiState}
|
|
505
450
|
* @public
|
|
506
451
|
*/
|
|
507
|
-
exports.
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
} = _ref10;
|
|
512
|
-
const imageSettings = {
|
|
513
|
-
...options,
|
|
452
|
+
var startExportingImageUpdater = exports.startExportingImageUpdater = function startExportingImageUpdater(state, _ref10) {
|
|
453
|
+
var _ref10$payload = _ref10.payload,
|
|
454
|
+
options = _ref10$payload === void 0 ? {} : _ref10$payload;
|
|
455
|
+
var imageSettings = _objectSpread(_objectSpread({}, options), {}, {
|
|
514
456
|
exporting: true
|
|
515
|
-
};
|
|
457
|
+
});
|
|
516
458
|
return (0, _composerHelpers.compose_)([cleanupExportImageUpdater, (0, _composerHelpers.apply_)(setExportImageSettingUpdater, (0, _composerHelpers.payload_)(imageSettings))])(state);
|
|
517
459
|
};
|
|
518
460
|
|
|
@@ -525,18 +467,13 @@ const startExportingImageUpdater = (state, _ref10) => {
|
|
|
525
467
|
* @returns nextState
|
|
526
468
|
* @public
|
|
527
469
|
*/
|
|
528
|
-
exports.
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
} = _ref11;
|
|
533
|
-
return {
|
|
534
|
-
...state,
|
|
535
|
-
exportData: {
|
|
536
|
-
...state.exportData,
|
|
470
|
+
var setExportSelectedDatasetUpdater = exports.setExportSelectedDatasetUpdater = function setExportSelectedDatasetUpdater(state, _ref11) {
|
|
471
|
+
var dataset = _ref11.payload;
|
|
472
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
473
|
+
exportData: _objectSpread(_objectSpread({}, state.exportData), {}, {
|
|
537
474
|
selectedDataset: dataset
|
|
538
|
-
}
|
|
539
|
-
};
|
|
475
|
+
})
|
|
476
|
+
});
|
|
540
477
|
};
|
|
541
478
|
|
|
542
479
|
/**
|
|
@@ -548,18 +485,13 @@ const setExportSelectedDatasetUpdater = (state, _ref11) => {
|
|
|
548
485
|
* @returns nextState
|
|
549
486
|
* @public
|
|
550
487
|
*/
|
|
551
|
-
exports.
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
exportData: {
|
|
559
|
-
...state.exportData,
|
|
560
|
-
dataType
|
|
561
|
-
}
|
|
562
|
-
};
|
|
488
|
+
var setExportDataTypeUpdater = exports.setExportDataTypeUpdater = function setExportDataTypeUpdater(state, _ref12) {
|
|
489
|
+
var dataType = _ref12.payload;
|
|
490
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
491
|
+
exportData: _objectSpread(_objectSpread({}, state.exportData), {}, {
|
|
492
|
+
dataType: dataType
|
|
493
|
+
})
|
|
494
|
+
});
|
|
563
495
|
};
|
|
564
496
|
|
|
565
497
|
/**
|
|
@@ -571,18 +503,13 @@ const setExportDataTypeUpdater = (state, _ref12) => {
|
|
|
571
503
|
* @returns nextState
|
|
572
504
|
* @public
|
|
573
505
|
*/
|
|
574
|
-
exports.
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
exportData: {
|
|
582
|
-
...state.exportData,
|
|
583
|
-
filtered
|
|
584
|
-
}
|
|
585
|
-
};
|
|
506
|
+
var setExportFilteredUpdater = exports.setExportFilteredUpdater = function setExportFilteredUpdater(state, _ref13) {
|
|
507
|
+
var filtered = _ref13.payload;
|
|
508
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
509
|
+
exportData: _objectSpread(_objectSpread({}, state.exportData), {}, {
|
|
510
|
+
filtered: filtered
|
|
511
|
+
})
|
|
512
|
+
});
|
|
586
513
|
};
|
|
587
514
|
|
|
588
515
|
/**
|
|
@@ -592,17 +519,13 @@ const setExportFilteredUpdater = (state, _ref13) => {
|
|
|
592
519
|
* @returns nextState
|
|
593
520
|
* @public
|
|
594
521
|
*/
|
|
595
|
-
exports.
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
exportMap: {
|
|
599
|
-
...state.exportMap,
|
|
600
|
-
[_defaultSettings.EXPORT_MAP_FORMATS.JSON]: {
|
|
601
|
-
...state.exportMap[_defaultSettings.EXPORT_MAP_FORMATS.JSON],
|
|
522
|
+
var setExportDataUpdater = exports.setExportDataUpdater = function setExportDataUpdater(state) {
|
|
523
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
524
|
+
exportMap: _objectSpread(_objectSpread({}, state.exportMap), {}, (0, _defineProperty2["default"])({}, _defaultSettings.EXPORT_MAP_FORMATS.JSON, _objectSpread(_objectSpread({}, state.exportMap[_defaultSettings.EXPORT_MAP_FORMATS.JSON]), {}, {
|
|
602
525
|
hasData: !state.exportMap[_defaultSettings.EXPORT_MAP_FORMATS.JSON].hasData
|
|
603
|
-
}
|
|
604
|
-
}
|
|
605
|
-
}
|
|
526
|
+
})))
|
|
527
|
+
});
|
|
528
|
+
};
|
|
606
529
|
|
|
607
530
|
/**
|
|
608
531
|
* whether to export a mapbox access to HTML single page
|
|
@@ -612,21 +535,13 @@ const setExportDataUpdater = state => ({
|
|
|
612
535
|
* @returns nextState
|
|
613
536
|
* @public
|
|
614
537
|
*/
|
|
615
|
-
exports.
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
exportMap: {
|
|
623
|
-
...state.exportMap,
|
|
624
|
-
[_defaultSettings.EXPORT_MAP_FORMATS.HTML]: {
|
|
625
|
-
...state.exportMap[_defaultSettings.EXPORT_MAP_FORMATS.HTML],
|
|
626
|
-
userMapboxToken
|
|
627
|
-
}
|
|
628
|
-
}
|
|
629
|
-
};
|
|
538
|
+
var setUserMapboxAccessTokenUpdater = exports.setUserMapboxAccessTokenUpdater = function setUserMapboxAccessTokenUpdater(state, _ref14) {
|
|
539
|
+
var userMapboxToken = _ref14.payload;
|
|
540
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
541
|
+
exportMap: _objectSpread(_objectSpread({}, state.exportMap), {}, (0, _defineProperty2["default"])({}, _defaultSettings.EXPORT_MAP_FORMATS.HTML, _objectSpread(_objectSpread({}, state.exportMap[_defaultSettings.EXPORT_MAP_FORMATS.HTML]), {}, {
|
|
542
|
+
userMapboxToken: userMapboxToken
|
|
543
|
+
})))
|
|
544
|
+
});
|
|
630
545
|
};
|
|
631
546
|
|
|
632
547
|
/**
|
|
@@ -636,19 +551,14 @@ const setUserMapboxAccessTokenUpdater = (state, _ref14) => {
|
|
|
636
551
|
* @param action.payload format to use to export the map into
|
|
637
552
|
* @return nextState
|
|
638
553
|
*/
|
|
639
|
-
exports.
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
} = _ref15;
|
|
644
|
-
return {
|
|
645
|
-
...state,
|
|
646
|
-
exportMap: {
|
|
647
|
-
...state.exportMap,
|
|
554
|
+
var setExportMapFormatUpdater = exports.setExportMapFormatUpdater = function setExportMapFormatUpdater(state, _ref15) {
|
|
555
|
+
var format = _ref15.payload;
|
|
556
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
557
|
+
exportMap: _objectSpread(_objectSpread({}, state.exportMap), {}, {
|
|
648
558
|
// @ts-expect-error
|
|
649
|
-
format
|
|
650
|
-
}
|
|
651
|
-
};
|
|
559
|
+
format: format
|
|
560
|
+
})
|
|
561
|
+
});
|
|
652
562
|
};
|
|
653
563
|
|
|
654
564
|
/**
|
|
@@ -658,21 +568,13 @@ const setExportMapFormatUpdater = (state, _ref15) => {
|
|
|
658
568
|
* @param action.payload to be set (available modes: EXPORT_HTML_MAP_MODES)
|
|
659
569
|
* @return nextState
|
|
660
570
|
*/
|
|
661
|
-
exports.
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
exportMap: {
|
|
669
|
-
...state.exportMap,
|
|
670
|
-
[_defaultSettings.EXPORT_MAP_FORMATS.HTML]: {
|
|
671
|
-
...state.exportMap[_defaultSettings.EXPORT_MAP_FORMATS.HTML],
|
|
672
|
-
mode
|
|
673
|
-
}
|
|
674
|
-
}
|
|
675
|
-
};
|
|
571
|
+
var setExportMapHTMLModeUpdater = exports.setExportMapHTMLModeUpdater = function setExportMapHTMLModeUpdater(state, _ref16) {
|
|
572
|
+
var mode = _ref16.payload;
|
|
573
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
574
|
+
exportMap: _objectSpread(_objectSpread({}, state.exportMap), {}, (0, _defineProperty2["default"])({}, _defaultSettings.EXPORT_MAP_FORMATS.HTML, _objectSpread(_objectSpread({}, state.exportMap[_defaultSettings.EXPORT_MAP_FORMATS.HTML]), {}, {
|
|
575
|
+
mode: mode
|
|
576
|
+
})))
|
|
577
|
+
});
|
|
676
578
|
};
|
|
677
579
|
|
|
678
580
|
/**
|
|
@@ -685,25 +587,25 @@ const setExportMapHTMLModeUpdater = (state, _ref16) => {
|
|
|
685
587
|
* @returns nextState
|
|
686
588
|
* @public
|
|
687
589
|
*/
|
|
688
|
-
exports.
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
payload
|
|
692
|
-
} = _ref17;
|
|
693
|
-
let notifications;
|
|
590
|
+
var addNotificationUpdater = exports.addNotificationUpdater = function addNotificationUpdater(state, _ref17) {
|
|
591
|
+
var payload = _ref17.payload;
|
|
592
|
+
var notifications;
|
|
694
593
|
|
|
695
594
|
// @ts-expect-error
|
|
696
|
-
|
|
697
|
-
|
|
595
|
+
var payloadId = payload === null || payload === void 0 ? void 0 : payload.id;
|
|
596
|
+
var notificationToUpdate = payloadId ? state.notifications.find(function (n) {
|
|
597
|
+
return n.id === payloadId;
|
|
598
|
+
}) : null;
|
|
698
599
|
if (notificationToUpdate) {
|
|
699
|
-
notifications = state.notifications.map(
|
|
600
|
+
notifications = state.notifications.map(function (n) {
|
|
601
|
+
return n.id === payloadId ? (0, _notificationsUtils.createNotification)(payload) : n;
|
|
602
|
+
});
|
|
700
603
|
} else {
|
|
701
|
-
notifications = [
|
|
604
|
+
notifications = [].concat((0, _toConsumableArray2["default"])(state.notifications || []), [(0, _notificationsUtils.createNotification)(payload)]);
|
|
702
605
|
}
|
|
703
|
-
return {
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
};
|
|
606
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
607
|
+
notifications: notifications
|
|
608
|
+
});
|
|
707
609
|
};
|
|
708
610
|
|
|
709
611
|
/**
|
|
@@ -715,15 +617,13 @@ const addNotificationUpdater = (state, _ref17) => {
|
|
|
715
617
|
* @returns nextState
|
|
716
618
|
* @public
|
|
717
619
|
*/
|
|
718
|
-
exports.
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
notifications: state.notifications.filter(n => n.id !== id)
|
|
726
|
-
};
|
|
620
|
+
var removeNotificationUpdater = exports.removeNotificationUpdater = function removeNotificationUpdater(state, _ref18) {
|
|
621
|
+
var id = _ref18.payload;
|
|
622
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
623
|
+
notifications: state.notifications.filter(function (n) {
|
|
624
|
+
return n.id !== id;
|
|
625
|
+
})
|
|
626
|
+
});
|
|
727
627
|
};
|
|
728
628
|
|
|
729
629
|
/**
|
|
@@ -733,14 +633,13 @@ const removeNotificationUpdater = (state, _ref18) => {
|
|
|
733
633
|
* @returns nextState
|
|
734
634
|
* @public
|
|
735
635
|
*/
|
|
736
|
-
exports.
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
});
|
|
636
|
+
var loadFilesUpdater = exports.loadFilesUpdater = function loadFilesUpdater(state) {
|
|
637
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
638
|
+
loadFiles: _objectSpread(_objectSpread({}, state.loadFiles), {}, {
|
|
639
|
+
fileLoading: true
|
|
640
|
+
})
|
|
641
|
+
});
|
|
642
|
+
};
|
|
744
643
|
|
|
745
644
|
/**
|
|
746
645
|
* Handles loading file success and set fileLoading property to false
|
|
@@ -748,14 +647,13 @@ const loadFilesUpdater = state => ({
|
|
|
748
647
|
* @param state `uiState`
|
|
749
648
|
* @returns nextState
|
|
750
649
|
*/
|
|
751
|
-
exports.
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
});
|
|
650
|
+
var loadFilesSuccessUpdater = exports.loadFilesSuccessUpdater = function loadFilesSuccessUpdater(state) {
|
|
651
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
652
|
+
loadFiles: _objectSpread(_objectSpread({}, state.loadFiles), {}, {
|
|
653
|
+
fileLoading: false
|
|
654
|
+
})
|
|
655
|
+
});
|
|
656
|
+
};
|
|
759
657
|
|
|
760
658
|
/**
|
|
761
659
|
* Handles load file error and set fileLoading property to false
|
|
@@ -766,18 +664,13 @@ const loadFilesSuccessUpdater = state => ({
|
|
|
766
664
|
* @returns nextState
|
|
767
665
|
* @public
|
|
768
666
|
*/
|
|
769
|
-
exports.
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
} = _ref19;
|
|
774
|
-
return addNotificationUpdater({
|
|
775
|
-
...state,
|
|
776
|
-
loadFiles: {
|
|
777
|
-
...state.loadFiles,
|
|
667
|
+
var loadFilesErrUpdater = exports.loadFilesErrUpdater = function loadFilesErrUpdater(state, _ref19) {
|
|
668
|
+
var error = _ref19.error;
|
|
669
|
+
return addNotificationUpdater(_objectSpread(_objectSpread({}, state), {}, {
|
|
670
|
+
loadFiles: _objectSpread(_objectSpread({}, state.loadFiles), {}, {
|
|
778
671
|
fileLoading: false
|
|
779
|
-
}
|
|
780
|
-
}, {
|
|
672
|
+
})
|
|
673
|
+
}), {
|
|
781
674
|
payload: (0, _notificationsUtils.errorNotification)({
|
|
782
675
|
message: (error || {}).message || 'Failed to upload files',
|
|
783
676
|
topic: _defaultSettings.DEFAULT_NOTIFICATION_TOPICS.global
|
|
@@ -792,17 +685,15 @@ const loadFilesErrUpdater = (state, _ref19) => {
|
|
|
792
685
|
* @returns nextState
|
|
793
686
|
* @public
|
|
794
687
|
*/
|
|
795
|
-
exports.
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
}), {})
|
|
805
|
-
});
|
|
688
|
+
var toggleSplitMapUpdater = exports.toggleSplitMapUpdater = function toggleSplitMapUpdater(state) {
|
|
689
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
690
|
+
mapControls: Object.entries(state.mapControls).reduce(function (acc, entry) {
|
|
691
|
+
return _objectSpread(_objectSpread({}, acc), {}, (0, _defineProperty2["default"])({}, entry[0], _objectSpread(_objectSpread({}, entry[1]), {}, {
|
|
692
|
+
activeMapIndex: 0
|
|
693
|
+
})));
|
|
694
|
+
}, {})
|
|
695
|
+
});
|
|
696
|
+
};
|
|
806
697
|
|
|
807
698
|
/**
|
|
808
699
|
* Toggle modal data
|
|
@@ -811,10 +702,11 @@ const toggleSplitMapUpdater = state => ({
|
|
|
811
702
|
* @returns nextState
|
|
812
703
|
* @public
|
|
813
704
|
*/
|
|
814
|
-
exports.
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
});
|
|
705
|
+
var showDatasetTableUpdater = exports.showDatasetTableUpdater = function showDatasetTableUpdater(state) {
|
|
706
|
+
return toggleModalUpdater(state, {
|
|
707
|
+
payload: _defaultSettings.DATA_TABLE_ID
|
|
708
|
+
});
|
|
709
|
+
};
|
|
818
710
|
|
|
819
711
|
/**
|
|
820
712
|
* Set the locale of the UI
|
|
@@ -826,17 +718,11 @@ const showDatasetTableUpdater = state => toggleModalUpdater(state, {
|
|
|
826
718
|
* @returns nextState
|
|
827
719
|
* @public
|
|
828
720
|
*/
|
|
829
|
-
exports.
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
}
|
|
835
|
-
} = _ref20;
|
|
836
|
-
return {
|
|
837
|
-
...state,
|
|
838
|
-
locale
|
|
839
|
-
};
|
|
721
|
+
var setLocaleUpdater = exports.setLocaleUpdater = function setLocaleUpdater(state, _ref20) {
|
|
722
|
+
var locale = _ref20.payload.locale;
|
|
723
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
724
|
+
locale: locale
|
|
725
|
+
});
|
|
840
726
|
};
|
|
841
727
|
|
|
842
728
|
/**
|
|
@@ -848,16 +734,11 @@ const setLocaleUpdater = (state, _ref20) => {
|
|
|
848
734
|
* @returns nextState
|
|
849
735
|
* @public
|
|
850
736
|
*/
|
|
851
|
-
exports.
|
|
852
|
-
|
|
853
|
-
let {
|
|
854
|
-
payload: listView
|
|
855
|
-
} = _ref21;
|
|
737
|
+
var toggleLayerPanelListViewUpdater = exports.toggleLayerPanelListViewUpdater = function toggleLayerPanelListViewUpdater(state, _ref21) {
|
|
738
|
+
var listView = _ref21.payload;
|
|
856
739
|
// @ts-expect-error
|
|
857
|
-
return listView === state.layerPanelListView ? state : {
|
|
858
|
-
...state,
|
|
740
|
+
return listView === state.layerPanelListView ? state : _objectSpread(_objectSpread({}, state), {}, {
|
|
859
741
|
layerPanelListView: listView
|
|
860
|
-
};
|
|
742
|
+
});
|
|
861
743
|
};
|
|
862
|
-
exports.toggleLayerPanelListViewUpdater = toggleLayerPanelListViewUpdater;
|
|
863
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZGVmYXVsdFNldHRpbmdzIiwicmVxdWlyZSIsIl9sb2NhbGVzIiwiX25vdGlmaWNhdGlvbnNVdGlscyIsIl9leHBvcnRVdGlscyIsIl9jb21wb3NlckhlbHBlcnMiLCJERUZBVUxUX0FDVElWRV9TSURFX1BBTkVMIiwiZXhwb3J0cyIsIkRFRkFVTFRfTU9EQUwiLCJBRERfREFUQV9JRCIsInVpU3RhdGVVcGRhdGVycyIsIkRFRkFVTFRfTUFQX0NPTlRST0xTX0ZFQVRVUkVTIiwic2hvdyIsImFjdGl2ZSIsImRpc2FibGVDbG9zZSIsImFjdGl2ZU1hcEluZGV4IiwiREVGQVVMVF9NQVBfQ09OVFJPTFMiLCJPYmplY3QiLCJrZXlzIiwiTUFQX0NPTlRST0xTIiwicmVkdWNlIiwiZmluYWwiLCJjdXJyZW50IiwiREVGQVVMVF9FWFBPUlRfSU1BR0UiLCJyYXRpbyIsIkVYUE9SVF9JTUdfUkFUSU9TIiwiU0NSRUVOIiwicmVzb2x1dGlvbiIsIlJFU09MVVRJT05TIiwiT05FX1giLCJsZWdlbmQiLCJtYXBIIiwibWFwVyIsImltYWdlU2l6ZSIsInpvb21PZmZzZXQiLCJzY2FsZSIsImltYWdlVyIsImltYWdlSCIsImNlbnRlciIsImltYWdlRGF0YVVyaSIsImV4cG9ydGluZyIsInByb2Nlc3NpbmciLCJlcnJvciIsIkRFRkFVTFRfTE9BRF9GSUxFUyIsImZpbGVMb2FkaW5nIiwiREVGQVVMVF9FWFBPUlRfREFUQSIsInNlbGVjdGVkRGF0YXNldCIsImRhdGFUeXBlIiwiRVhQT1JUX0RBVEFfVFlQRSIsIkNTViIsImZpbHRlcmVkIiwiREVGQVVMVF9OT1RJRklDQVRJT05TIiwiREVGQVVMVF9FWFBPUlRfSFRNTCIsImV4cG9ydE1hcGJveEFjY2Vzc1Rva2VuIiwidXNlck1hcGJveFRva2VuIiwibW9kZSIsIkVYUE9SVF9IVE1MX01BUF9NT0RFUyIsIlJFQUQiLCJERUZBVUxUX0VYUE9SVF9KU09OIiwiaGFzRGF0YSIsIkRFRkFVTFRfRVhQT1JUX01BUCIsIkVYUE9SVF9NQVBfRk9STUFUUyIsIkhUTUwiLCJKU09OIiwiZm9ybWF0IiwiSU5JVElBTF9VSV9TVEFURSIsInJlYWRPbmx5IiwiYWN0aXZlU2lkZVBhbmVsIiwiY3VycmVudE1vZGFsIiwiZGF0YXNldEtleVRvUmVtb3ZlIiwidmlzaWJsZURyb3Bkb3duIiwiZXhwb3J0SW1hZ2UiLCJleHBvcnREYXRhIiwiZXhwb3J0TWFwIiwibWFwQ29udHJvbHMiLCJub3RpZmljYXRpb25zIiwibG9hZEZpbGVzIiwibG9jYWxlIiwiTE9DQUxFX0NPREVTIiwiZW4iLCJsYXllclBhbmVsTGlzdFZpZXciLCJpbml0VWlTdGF0ZVVwZGF0ZXIiLCJzdGF0ZSIsImFjdGlvbiIsInBheWxvYWQiLCJpbml0aWFsVWlTdGF0ZSIsInRvZ2dsZVNpZGVQYW5lbFVwZGF0ZXIiLCJfcmVmIiwiaWQiLCJ0b2dnbGVNb2RhbFVwZGF0ZXIiLCJfcmVmMiIsInNob3dFeHBvcnREcm9wZG93blVwZGF0ZXIiLCJfcmVmMyIsImhpZGVFeHBvcnREcm9wZG93blVwZGF0ZXIiLCJ0b2dnbGVNYXBDb250cm9sVXBkYXRlciIsIl9yZWY0IiwicGFuZWxJZCIsImluZGV4Iiwic2V0TWFwQ29udHJvbFZpc2liaWxpdHlVcGRhdGVyIiwiX3JlZjUiLCJfc3RhdGUkbWFwQ29udHJvbHMiLCJCb29sZWFuIiwib3BlbkRlbGV0ZU1vZGFsVXBkYXRlciIsIl9yZWY2IiwiREVMRVRFX0RBVEFfSUQiLCJzZXRFeHBvcnRJbWFnZVNldHRpbmdVcGRhdGVyIiwiX3JlZjciLCJuZXdTZXR0aW5nIiwidXBkYXRlZCIsImNhbGN1bGF0ZUV4cG9ydEltYWdlU2l6ZSIsInNldEV4cG9ydEltYWdlRGF0YVVyaVVwZGF0ZXIiLCJfcmVmOCIsImRhdGFVcmkiLCJzZXRFeHBvcnRJbWFnZUVycm9yVXBkYXRlciIsIl9yZWY5IiwiY2xlYW51cEV4cG9ydEltYWdlVXBkYXRlciIsInN0YXJ0RXhwb3J0aW5nSW1hZ2VVcGRhdGVyIiwiX3JlZjEwIiwib3B0aW9ucyIsImltYWdlU2V0dGluZ3MiLCJjb21wb3NlXyIsImFwcGx5XyIsInBheWxvYWRfIiwic2V0RXhwb3J0U2VsZWN0ZWREYXRhc2V0VXBkYXRlciIsIl9yZWYxMSIsImRhdGFzZXQiLCJzZXRFeHBvcnREYXRhVHlwZVVwZGF0ZXIiLCJfcmVmMTIiLCJzZXRFeHBvcnRGaWx0ZXJlZFVwZGF0ZXIiLCJfcmVmMTMiLCJzZXRFeHBvcnREYXRhVXBkYXRlciIsInNldFVzZXJNYXBib3hBY2Nlc3NUb2tlblVwZGF0ZXIiLCJfcmVmMTQiLCJzZXRFeHBvcnRNYXBGb3JtYXRVcGRhdGVyIiwiX3JlZjE1Iiwic2V0RXhwb3J0TWFwSFRNTE1vZGVVcGRhdGVyIiwiX3JlZjE2IiwiYWRkTm90aWZpY2F0aW9uVXBkYXRlciIsIl9yZWYxNyIsInBheWxvYWRJZCIsIm5vdGlmaWNhdGlvblRvVXBkYXRlIiwiZmluZCIsIm4iLCJtYXAiLCJjcmVhdGVOb3RpZmljYXRpb24iLCJyZW1vdmVOb3RpZmljYXRpb25VcGRhdGVyIiwiX3JlZjE4IiwiZmlsdGVyIiwibG9hZEZpbGVzVXBkYXRlciIsImxvYWRGaWxlc1N1Y2Nlc3NVcGRhdGVyIiwibG9hZEZpbGVzRXJyVXBkYXRlciIsIl9yZWYxOSIsImVycm9yTm90aWZpY2F0aW9uIiwibWVzc2FnZSIsInRvcGljIiwiREVGQVVMVF9OT1RJRklDQVRJT05fVE9QSUNTIiwiZ2xvYmFsIiwidG9nZ2xlU3BsaXRNYXBVcGRhdGVyIiwiZW50cmllcyIsImFjYyIsImVudHJ5Iiwic2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXIiLCJEQVRBX1RBQkxFX0lEIiwic2V0TG9jYWxlVXBkYXRlciIsIl9yZWYyMCIsInRvZ2dsZUxheWVyUGFuZWxMaXN0Vmlld1VwZGF0ZXIiLCJfcmVmMjEiLCJsaXN0VmlldyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZWR1Y2Vycy91aS1zdGF0ZS11cGRhdGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjIgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQge1xuICBBRERfREFUQV9JRCxcbiAgREFUQV9UQUJMRV9JRCxcbiAgREVGQVVMVF9OT1RJRklDQVRJT05fVE9QSUNTLFxuICBERUxFVEVfREFUQV9JRCxcbiAgRVhQT1JUX0RBVEFfVFlQRSxcbiAgRVhQT1JUX0hUTUxfTUFQX01PREVTLFxuICBFWFBPUlRfSU1HX1JBVElPUyxcbiAgRVhQT1JUX01BUF9GT1JNQVRTLFxuICBSRVNPTFVUSU9OUyxcbiAgTUFQX0NPTlRST0xTXG59IGZyb20gJ2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzJztcbmltcG9ydCB7TE9DQUxFX0NPREVTfSBmcm9tICdsb2NhbGl6YXRpb24vbG9jYWxlcyc7XG5pbXBvcnQge2NyZWF0ZU5vdGlmaWNhdGlvbiwgZXJyb3JOb3RpZmljYXRpb259IGZyb20gJ3V0aWxzL25vdGlmaWNhdGlvbnMtdXRpbHMnO1xuaW1wb3J0IHtjYWxjdWxhdGVFeHBvcnRJbWFnZVNpemV9IGZyb20gJy4uL3V0aWxzL2V4cG9ydC11dGlscyc7XG5pbXBvcnQge3BheWxvYWRfLCBhcHBseV8sIGNvbXBvc2VffSBmcm9tICcuL2NvbXBvc2VyLWhlbHBlcnMnO1xuXG5pbXBvcnQgQWN0aW9uVHlwZXMgZnJvbSAnLi4vY29uc3RhbnRzL2FjdGlvbi10eXBlcyc7XG5pbXBvcnQgKiBhcyBVaVN0YXRlQWN0aW9ucyBmcm9tICdhY3Rpb25zL3VpLXN0YXRlLWFjdGlvbnMnO1xuaW1wb3J0IHtLZXBsZXJHbEluaXRQYXlsb2FkLCBMb2FkRmlsZXNFcnJVcGRhdGVyQWN0aW9ufSBmcm9tICcuLi9hY3Rpb25zJztcblxuZXhwb3J0IHR5cGUgRXhwb3J0SW1hZ2UgPSB7XG4gIHJhdGlvOiBrZXlvZiB0eXBlb2YgRVhQT1JUX0lNR19SQVRJT1M7XG4gIHJlc29sdXRpb246IGtleW9mIHR5cGVvZiBSRVNPTFVUSU9OUztcbiAgbGVnZW5kOiBib29sZWFuO1xuICBtYXBIOiBudW1iZXI7XG4gIG1hcFc6IG51bWJlcjtcbiAgaW1hZ2VTaXplOiB7XG4gICAgem9vbU9mZnNldDogbnVtYmVyO1xuICAgIHNjYWxlOiBudW1iZXI7XG4gICAgaW1hZ2VXOiBudW1iZXI7XG4gICAgaW1hZ2VIOiBudW1iZXI7XG4gIH07XG4gIC8vIGV4cG9ydGluZyBzdGF0ZVxuICBpbWFnZURhdGFVcmk6IHN0cmluZztcbiAgZXhwb3J0aW5nOiBib29sZWFuO1xuICBwcm9jZXNzaW5nOiBib29sZWFuO1xuICBlcnJvcjogRXJyb3IgfCBmYWxzZTtcbiAgLy8gVGhpcyBmaWVsZCB3YXMgbm90IGluIHRoZSAuZC50cyBmaWxlXG4gIGNlbnRlcjogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIEV4cG9ydERhdGEgPSB7XG4gIHNlbGVjdGVkRGF0YXNldDogc3RyaW5nO1xuICBkYXRhVHlwZTogc3RyaW5nO1xuICBmaWx0ZXJlZDogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIEV4cG9ydEh0bWwgPSB7XG4gIGV4cG9ydE1hcGJveEFjY2Vzc1Rva2VuOiBudWxsIHwgc3RyaW5nO1xuICB1c2VyTWFwYm94VG9rZW46IHN0cmluZztcbiAgbW9kZTogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIEV4cG9ydEpzb24gPSB7XG4gIGhhc0RhdGE6IGJvb2xlYW47XG59O1xuZXhwb3J0IHR5cGUgRXhwb3J0TWFwID0ge1xuICBIVE1MOiBFeHBvcnRIdG1sO1xuICBKU09OOiBFeHBvcnRKc29uO1xuICBmb3JtYXQ6ICdIVE1MJyB8ICdKU09OJztcbn07XG5cbmV4cG9ydCB0eXBlIE1hcENvbnRyb2wgPSB7XG4gIHNob3c6IGJvb2xlYW47XG4gIGFjdGl2ZTogYm9vbGVhbjtcbiAgZGlzYWJsZUNsb3NlPzogYm9vbGVhbjtcbiAgYWN0aXZlTWFwSW5kZXg/OiBudW1iZXI7XG59O1xuZXhwb3J0IHR5cGUgTWFwQ29udHJvbHMgPSB7XG4gIHZpc2libGVMYXllcnM/OiBNYXBDb250cm9sO1xuICBtYXBMZWdlbmQ/OiBNYXBDb250cm9sO1xuICB0b2dnbGUzZD86IE1hcENvbnRyb2w7XG4gIHNwbGl0TWFwPzogTWFwQ29udHJvbDtcbiAgbWFwRHJhdz86IE1hcENvbnRyb2w7XG4gIG1hcExvY2FsZT86IE1hcENvbnRyb2w7XG59O1xuXG5leHBvcnQgdHlwZSBMb2FkRmlsZXMgPSB7XG4gIGZpbGVMb2FkaW5nOiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgTm90aWZpY2F0aW9ucyA9IHtcbiAgbWVzc2FnZTogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIHRvcGljOiBzdHJpbmc7XG4gIGlkOiBzdHJpbmc7XG4gIGNvdW50OiBudW1iZXI7XG4gIGlzRXhwYW5kZWQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgTG9jYWxlID0gc3RyaW5nO1xuXG5leHBvcnQgdHlwZSBMYXllclBhbmVsTGlzdFZpZXcgPSAnbGlzdCcgfCAnc29ydEJ5RGF0YXNldCc7XG5cbmV4cG9ydCB0eXBlIFVpU3RhdGUgPSB7XG4gIHJlYWRPbmx5OiBib29sZWFuO1xuICBhY3RpdmVTaWRlUGFuZWw6IHN0cmluZztcbiAgY3VycmVudE1vZGFsOiBzdHJpbmcgfCBudWxsO1xuICBkYXRhc2V0S2V5VG9SZW1vdmU6IHN0cmluZyB8IG51bGw7XG4gIHZpc2libGVEcm9wZG93bjogc3RyaW5nIHwgbnVsbDtcbiAgLy8gZXhwb3J0IGltYWdlIG1vZGFsIHVpXG4gIGV4cG9ydEltYWdlOiBFeHBvcnRJbWFnZTtcbiAgLy8gZXhwb3J0IGRhdGEgbW9kYWwgdWlcbiAgZXhwb3J0RGF0YTogRXhwb3J0RGF0YTtcbiAgLy8gaHRtbCBleHBvcnRcbiAgZXhwb3J0TWFwOiBFeHBvcnRNYXA7XG4gIC8vIG1hcCBjb250cm9sIHBhbmVsc1xuICBtYXBDb250cm9sczogTWFwQ29udHJvbHM7XG4gIC8vIHVpIG5vdGlmaWNhdGlvbnNcbiAgbm90aWZpY2F0aW9uczogTm90aWZpY2F0aW9uc1tdO1xuICAvLyBsb2FkIGZpbGVzXG4gIGxvYWRGaWxlczogTG9hZEZpbGVzO1xuICAvLyBMb2NhbGUgb2YgdGhlIFVJXG4gIGxvY2FsZTogTG9jYWxlO1xuICBsYXllclBhbmVsTGlzdFZpZXc6IExheWVyUGFuZWxMaXN0Vmlldztcbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FDVElWRV9TSURFX1BBTkVMID0gJ2xheWVyJztcbmV4cG9ydCBjb25zdCBERUZBVUxUX01PREFMID0gQUREX0RBVEFfSUQ7XG5cbi8qKlxuICogVXBkYXRlcnMgZm9yIGB1aVN0YXRlYCByZWR1Y2VyLiBDYW4gYmUgdXNlZCBpbiB5b3VyIHJvb3QgcmVkdWNlciB0byBkaXJlY3RseSBtb2RpZnkga2VwbGVyLmdsJ3Mgc3RhdGUuXG4gKiBSZWFkIG1vcmUgYWJvdXQgW1VzaW5nIHVwZGF0ZXJzXSguLi9hZHZhbmNlZC11c2FnZS91c2luZy11cGRhdGVycy5tZClcbiAqXG4gKiBAcHVibGljXG4gKiBAZXhhbXBsZVxuICpcbiAqIGltcG9ydCBrZXBsZXJHbFJlZHVjZXIsIHt1aVN0YXRlVXBkYXRlcnN9IGZyb20gJ2tlcGxlci5nbC9yZWR1Y2Vycyc7XG4gKiAvLyBSb290IFJlZHVjZXJcbiAqIGNvbnN0IHJlZHVjZXJzID0gY29tYmluZVJlZHVjZXJzKHtcbiAqICBrZXBsZXJHbDoga2VwbGVyR2xSZWR1Y2VyLFxuICogIGFwcDogYXBwUmVkdWNlclxuICogfSk7XG4gKlxuICogY29uc3QgY29tcG9zZWRSZWR1Y2VyID0gKHN0YXRlLCBhY3Rpb24pID0+IHtcbiAqICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gKiAgICAvLyBjbGljayBidXR0b24gdG8gY2xvc2Ugc2lkZSBwYW5lbFxuICogICAgY2FzZSAnQ0xJQ0tfQlVUVE9OJzpcbiAqICAgICAgcmV0dXJuIHtcbiAqICAgICAgICAuLi5zdGF0ZSxcbiAqICAgICAgICBrZXBsZXJHbDoge1xuICogICAgICAgICAgLi4uc3RhdGUua2VwbGVyR2wsXG4gKiAgICAgICAgICBmb286IHtcbiAqICAgICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLmZvbyxcbiAqICAgICAgICAgICAgIHVpU3RhdGU6IHVpU3RhdGVVcGRhdGVycy50b2dnbGVTaWRlUGFuZWxVcGRhdGVyKFxuICogICAgICAgICAgICAgICB1aVN0YXRlLCB7cGF5bG9hZDogbnVsbH1cbiAqICAgICAgICAgICAgIClcbiAqICAgICAgICAgIH1cbiAqICAgICAgICB9XG4gKiAgICAgIH07XG4gKiAgfVxuICogIHJldHVybiByZWR1Y2VycyhzdGF0ZSwgYWN0aW9uKTtcbiAqIH07XG4gKlxuICogZXhwb3J0IGRlZmF1bHQgY29tcG9zZWRSZWR1Y2VyO1xuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuY29uc3QgdWlTdGF0ZVVwZGF0ZXJzID0gbnVsbDtcbi8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLXZhcnMgKi9cblxuY29uc3QgREVGQVVMVF9NQVBfQ09OVFJPTFNfRkVBVFVSRVM6IE1hcENvbnRyb2wgPSB7XG4gIHNob3c6IHRydWUsXG4gIGFjdGl2ZTogZmFsc2UsXG4gIGRpc2FibGVDbG9zZTogZmFsc2UsXG4gIC8vIGRlZmluZXMgd2hpY2ggbWFwIGluZGV4IHVzZXJzIGFyZSBpbnRlcmFjdGluZyB3aXRoICh0aHJvdWdoIG1hcCBjb250cm9scylcbiAgYWN0aXZlTWFwSW5kZXg6IDBcbn07XG5cbi8qKlxuICogQSBsaXN0IG9mIG1hcCBjb250cm9sIHZpc2liaWxpdHkgYW5kIHdoZXRoZXIgaXMgaXQgYWN0aXZlLlxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkgdmlzaWJsZUxheWVycyBEZWZhdWx0OiBge3Nob3c6IHRydWUsIGFjdGl2ZTogZmFsc2V9YFxuICogQHByb3BlcnR5IG1hcExlZ2VuZCBEZWZhdWx0OiBge3Nob3c6IHRydWUsIGFjdGl2ZTogZmFsc2V9YFxuICogQHByb3BlcnR5IHRvZ2dsZTNkIERlZmF1bHQ6IGB7c2hvdzogdHJ1ZX1gXG4gKiBAcHJvcGVydHkgc3BsaXRNYXAgRGVmYXVsdDogYHtzaG93OiB0cnVlfWBcbiAqIEBwcm9wZXJ0eSBtYXBEcmF3IERlZmF1bHQ6IGB7c2hvdzogdHJ1ZSwgYWN0aXZlOiBmYWxzZX1gXG4gKiBAcHJvcGVydHkgbWFwTG9jYWxlIERlZmF1bHQ6IGB7c2hvdzogZmFsc2UsIGFjdGl2ZTogZmFsc2V9YFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9NQVBfQ09OVFJPTFM6IE1hcENvbnRyb2xzID0gKE9iamVjdC5rZXlzKE1BUF9DT05UUk9MUykgYXMgQXJyYXk8XG4gIGtleW9mIHR5cGVvZiBNQVBfQ09OVFJPTFNcbj4pLnJlZHVjZShcbiAgKGZpbmFsLCBjdXJyZW50KSA9PiAoe1xuICAgIC4uLmZpbmFsLFxuICAgIFtjdXJyZW50XTogREVGQVVMVF9NQVBfQ09OVFJPTFNfRkVBVFVSRVNcbiAgfSksXG4gIHt9IGFzIE1hcENvbnRyb2xzXG4pO1xuXG4vKipcbiAqIERlZmF1bHQgaW1hZ2UgZXhwb3J0IGNvbmZpZ1xuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkgcmF0aW8gRGVmYXVsdDogYCdTQ1JFRU4nYCxcbiAqIEBwcm9wZXJ0eSByZXNvbHV0aW9uIERlZmF1bHQ6IGAnT05FX1gnYCxcbiAqIEBwcm9wZXJ0eSBsZWdlbmQgRGVmYXVsdDogYGZhbHNlYCxcbiAqIEBwcm9wZXJ0eSBtYXBIIERlZmF1bHQ6IDAsXG4gKiBAcHJvcGVydHkgbWFwVyBEZWZhdWx0OiAwLFxuICogQHByb3BlcnR5IGltYWdlU2l6ZSBEZWZhdWx0OiB7em9vbU9mZnNldDogMCwgc2NhbGU6IDEsIGltYWdlVzogMCwgaW1hZ2VIOiAwfSxcbiAqIEBwcm9wZXJ0eSBpbWFnZURhdGFVcmkgRGVmYXVsdDogYCcnYCxcbiAqIEBwcm9wZXJ0eSBleHBvcnRpbmcgRGVmYXVsdDogYGZhbHNlYFxuICogQHByb3BlcnR5IGVycm9yIERlZmF1bHQ6IGBmYWxzZWBcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRVhQT1JUX0lNQUdFOiBFeHBvcnRJbWFnZSA9IHtcbiAgLy8gdXNlciBvcHRpb25zXG4gIHJhdGlvOiBFWFBPUlRfSU1HX1JBVElPUy5TQ1JFRU4sXG4gIHJlc29sdXRpb246IFJFU09MVVRJT05TLk9ORV9YLFxuICBsZWdlbmQ6IGZhbHNlLFxuICBtYXBIOiAwLFxuICBtYXBXOiAwLFxuICBpbWFnZVNpemU6IHtcbiAgICB6b29tT2Zmc2V0OiAwLFxuICAgIHNjYWxlOiAxLFxuICAgIGltYWdlVzogMCxcbiAgICBpbWFnZUg6IDBcbiAgfSxcbiAgLy8gd2hlbiB0aGlzIGlzIHNldCB0byB0cnVlLCB0aGUgbW9jayBtYXAgdmlld3BvcnQgd2lsbCBtb3ZlIHRvIHRoZSBjZW50ZXIgb2YgZGF0YVxuICBjZW50ZXI6IGZhbHNlLFxuICAvLyBleHBvcnRpbmcgc3RhdGVcbiAgaW1hZ2VEYXRhVXJpOiAnJyxcbiAgLy8gZXhwb3J0aW5nOiB1c2VkIHRvIGF0dGFjaCBwbG90LWNvbnRhaW5lciB0byBkb21cbiAgZXhwb3J0aW5nOiBmYWxzZSxcbiAgLy8gcHJvY2Vzc2luZzogdXNlZCBhcyBsb2FkaW5nIGluZGljYXRvciB3aGVuIGV4cG9ydCBpbWFnZSBpcyBiZWluZyBwcm9kdWNlZFxuICBwcm9jZXNzaW5nOiBmYWxzZSxcbiAgZXJyb3I6IGZhbHNlXG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9MT0FEX0ZJTEVTID0ge1xuICBmaWxlTG9hZGluZzogZmFsc2Vcbn07XG5cbi8qKlxuICogRGVmYXVsdCBpbml0aWFsIGBleHBvcnREYXRhYCBzZXR0aW5nc1xuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkgc2VsZWN0ZWREYXRhc2V0IERlZmF1bHQ6IGAnJ2AsXG4gKiBAcHJvcGVydHkgZGF0YVR5cGUgRGVmYXVsdDogYCdjc3YnYCxcbiAqIEBwcm9wZXJ0eSBmaWx0ZXJlZCBEZWZhdWx0OiBgdHJ1ZWAsXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VYUE9SVF9EQVRBOiBFeHBvcnREYXRhID0ge1xuICBzZWxlY3RlZERhdGFzZXQ6ICcnLFxuICBkYXRhVHlwZTogRVhQT1JUX0RBVEFfVFlQRS5DU1YsXG4gIGZpbHRlcmVkOiB0cnVlXG59O1xuXG4vKipcbiAqIEBjb25zdGFudFxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9OT1RJRklDQVRJT05TID0gW107XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkgZXhwb3J0TWFwYm94QWNjZXNzVG9rZW4gLSBEZWZhdWx0OiBudWxsLCB0aGlzIGlzIHVzZWQgd2hlbiB3ZSBwcm92aWRlIGEgZGVmYXVsdCBtYXBib3ggdG9rZW4gZm9yIHVzZXJzIHRvIHRha2UgYWR2YW50YWdlIG9mXG4gKiBAcHJvcGVydHkgdXNlck1hcGJveFRva2VuIC0gRGVmYXVsdDogJycsIG1hcGJveCB0b2tlbiBwcm92aWRlZCBieSB1c2VyIHRocm91Z2ggaW5wdXQgZmllbGRcbiAqIEBwcm9wZXJ0eSBtb2RlIC0gRGVmYXVsdDogJ1JFQUQnLCByZWFkIG9ubHkgb3IgZWRpdGFibGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRVhQT1JUX0hUTUw6IEV4cG9ydEh0bWwgPSB7XG4gIGV4cG9ydE1hcGJveEFjY2Vzc1Rva2VuOiBudWxsLFxuICB1c2VyTWFwYm94VG9rZW46ICcnLFxuICBtb2RlOiBFWFBPUlRfSFRNTF9NQVBfTU9ERVMuUkVBRFxufTtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSBoYXNEYXRhIC0gRGVmYXVsdDogJ3RydWUnLFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9FWFBPUlRfSlNPTjogRXhwb3J0SnNvbiA9IHtcbiAgaGFzRGF0YTogdHJ1ZVxufTtcblxuLyoqXG4gKiBFeHBvcnQgTWFwIENvbmZpZ1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkgSFRNTCAtIERlZmF1bHQ6ICdERUZBVUxUX0VYUE9SVF9IVE1MJyxcbiAqIEBwcm9wZXJ0eSBKU09OIC0gRGVmYXVsdDogJ0RFRkFVTFRfRVhQT1JUX0pTT04nLFxuICogQHByb3BlcnR5IGZvcm1hdCAtIERlZmF1bHQ6ICdIVE1MJyxcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRVhQT1JUX01BUDogRXhwb3J0TWFwID0ge1xuICBbRVhQT1JUX01BUF9GT1JNQVRTLkhUTUxdOiBERUZBVUxUX0VYUE9SVF9IVE1MLFxuICBbRVhQT1JUX01BUF9GT1JNQVRTLkpTT05dOiBERUZBVUxUX0VYUE9SVF9KU09OLFxuICBmb3JtYXQ6IEVYUE9SVF9NQVBfRk9STUFUUy5IVE1MXG59O1xuXG4vKipcbiAqIERlZmF1bHQgaW5pdGlhbCBgdWlTdGF0ZWBcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHJlYWRPbmx5IERlZmF1bHQ6IGBmYWxzZWBcbiAqIEBwcm9wZXJ0eSBhY3RpdmVTaWRlUGFuZWwgRGVmYXVsdDogYCdsYXllcidgXG4gKiBAcHJvcGVydHkgY3VycmVudE1vZGFsIERlZmF1bHQ6IGAnYWRkRGF0YSdgXG4gKiBAcHJvcGVydHkgZGF0YXNldEtleVRvUmVtb3ZlIERlZmF1bHQ6IGBudWxsYFxuICogQHByb3BlcnR5IHZpc2libGVEcm9wZG93biBEZWZhdWx0OiBgbnVsbGBcbiAqIEBwcm9wZXJ0eSBleHBvcnRJbWFnZSBEZWZhdWx0OiBbYERFRkFVTFRfRVhQT1JUX0lNQUdFYF0oI2RlZmF1bHRfZXhwb3J0X2ltYWdlKVxuICogQHByb3BlcnR5IGV4cG9ydERhdGEgRGVmYXVsdDogW2BERUZBVUxUX0VYUE9SVF9EQVRBYF0oI2RlZmF1bHRfZXhwb3J0X2RhdGEpXG4gKiBAcHJvcGVydHkgZXhwb3J0TWFwIERlZmF1bHQ6IFtgREVGQVVMVF9FWFBPUlRfTUFQYF0oI2RlZmF1bHRfZXhwb3J0X21hcClcbiAqIEBwcm9wZXJ0eSBtYXBDb250cm9scyBEZWZhdWx0OiBbYERFRkFVTFRfTUFQX0NPTlRST0xTYF0oI2RlZmF1bHRfbWFwX2NvbnRyb2xzKVxuICogQHByb3BlcnR5IG5vdGlmaWNhdGlvbnMgRGVmYXVsdDogYFtdYFxuICogQHByb3BlcnR5IG5vdGlmaWNhdGlvbnMgRGVmYXVsdDogYFtdYFxuICogQHByb3BlcnR5IGxvYWRGaWxlc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgSU5JVElBTF9VSV9TVEFURTogVWlTdGF0ZSA9IHtcbiAgcmVhZE9ubHk6IGZhbHNlLFxuICBhY3RpdmVTaWRlUGFuZWw6IERFRkFVTFRfQUNUSVZFX1NJREVfUEFORUwsXG4gIGN1cnJlbnRNb2RhbDogREVGQVVMVF9NT0RBTCxcbiAgZGF0YXNldEtleVRvUmVtb3ZlOiBudWxsLFxuICB2aXNpYmxlRHJvcGRvd246IG51bGwsXG4gIC8vIGV4cG9ydCBpbWFnZSBtb2RhbCB1aVxuICBleHBvcnRJbWFnZTogREVGQVVMVF9FWFBPUlRfSU1BR0UsXG4gIC8vIGV4cG9ydCBkYXRhIG1vZGFsIHVpXG4gIGV4cG9ydERhdGE6IERFRkFVTFRfRVhQT1JUX0RBVEEsXG4gIC8vIGh0bWwgZXhwb3J0XG4gIGV4cG9ydE1hcDogREVGQVVMVF9FWFBPUlRfTUFQLFxuICAvLyBtYXAgY29udHJvbCBwYW5lbHNcbiAgbWFwQ29udHJvbHM6IERFRkFVTFRfTUFQX0NPTlRST0xTLFxuICAvLyB1aSBub3RpZmljYXRpb25zXG4gIG5vdGlmaWNhdGlvbnM6IERFRkFVTFRfTk9USUZJQ0FUSU9OUyxcbiAgLy8gbG9hZCBmaWxlc1xuICBsb2FkRmlsZXM6IERFRkFVTFRfTE9BRF9GSUxFUyxcbiAgLy8gTG9jYWxlIG9mIHRoZSBVSVxuICBsb2NhbGU6IExPQ0FMRV9DT0RFUy5lbixcbiAgbGF5ZXJQYW5lbExpc3RWaWV3OiAnbGlzdCdcbn07XG5cbi8qIFVwZGF0ZXJzICovXG4vKipcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcblxuICovXG5leHBvcnQgY29uc3QgaW5pdFVpU3RhdGVVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAgYWN0aW9uOiB7XG4gICAgdHlwZT86IHR5cGVvZiBBY3Rpb25UeXBlc1snSU5JVCddO1xuICAgIHBheWxvYWQ6IEtlcGxlckdsSW5pdFBheWxvYWQ7XG4gIH1cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIC4uLihhY3Rpb24ucGF5bG9hZCB8fCB7fSkuaW5pdGlhbFVpU3RhdGVcbn0pO1xuXG4vKipcbiAqIFRvZ2dsZSBhY3RpdmUgc2lkZSBwYW5lbFxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIGlkIG9mIHNpZGUgcGFuZWwgdG8gYmUgc2hvd24sIG9uZSBvZiBgbGF5ZXJgLCBgZmlsdGVyYCwgYGludGVyYWN0aW9uYCwgYG1hcGAuIGNsb3NlIHNpZGUgcGFuZWwgaWYgYG51bGxgXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZVNpZGVQYW5lbFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogaWR9OiBVaVN0YXRlQWN0aW9ucy5Ub2dnbGVTaWRlUGFuZWxVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+IHtcbiAgcmV0dXJuIGlkID09PSBzdGF0ZS5hY3RpdmVTaWRlUGFuZWxcbiAgICA/IHN0YXRlXG4gICAgOiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBhY3RpdmVTaWRlUGFuZWw6IGlkXG4gICAgICB9O1xufTtcblxuLyoqXG4gKiBTaG93IGFuZCBoaWRlIG1vZGFsIGRpYWxvZ1xuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtYWN0aW9uLnBheWxvYWQgaWQgb2YgbW9kYWwgdG8gYmUgc2hvd24sIG51bGwgdG8gaGlkZSBtb2RhbHMuIE9uZSBvZjpcbiAqICAtIFtgREFUQV9UQUJMRV9JRGBdKC4uL2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzLm1kI2RhdGFfdGFibGVfaWQpXG4gKiAgLSBbYERFTEVURV9EQVRBX0lEYF0oLi4vY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MubWQjZGVsZXRlX2RhdGFfaWQpXG4gKiAgLSBbYEFERF9EQVRBX0lEYF0oLi4vY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MubWQjYWRkX2RhdGFfaWQpXG4gKiAgLSBbYEVYUE9SVF9JTUFHRV9JRGBdKC4uL2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzLm1kI2V4cG9ydF9pbWFnZV9pZClcbiAqICAtIFtgRVhQT1JUX0RBVEFfSURgXSguLi9jb25zdGFudHMvZGVmYXVsdC1zZXR0aW5ncy5tZCNleHBvcnRfZGF0YV9pZClcbiAqICAtIFtgQUREX01BUF9TVFlMRV9JRGBdKC4uL2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzLm1kI2FkZF9tYXBfc3R5bGVfaWQpXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZU1vZGFsVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiBpZH06IFVpU3RhdGVBY3Rpb25zLlRvZ2dsZU1vZGFsVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgY3VycmVudE1vZGFsOiBpZFxufSk7XG5cbi8qKlxuICogSGlkZSBhbmQgc2hvdyBzaWRlIHBhbmVsIGhlYWRlciBkcm9wZG93biwgYWN0aXZhdGVkIGJ5IGNsaWNraW5nIHRoZSBzaGFyZSBsaW5rIG9uIHRvcCBvZiB0aGUgc2lkZSBwYW5lbFxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2hvd0V4cG9ydERyb3Bkb3duVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiBpZH06IFVpU3RhdGVBY3Rpb25zLlNob3dFeHBvcnREcm9wZG93blVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIHZpc2libGVEcm9wZG93bjogaWRcbn0pO1xuXG4vKipcbiAqIEhpZGUgc2lkZSBwYW5lbCBoZWFkZXIgZHJvcGRvd24sIGFjdGl2YXRlZCBieSBjbGlja2luZyB0aGUgc2hhcmUgbGluayBvbiB0b3Agb2YgdGhlIHNpZGUgcGFuZWxcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGhpZGVFeHBvcnREcm9wZG93blVwZGF0ZXIgPSAoc3RhdGU6IFVpU3RhdGUpOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICB2aXNpYmxlRHJvcGRvd246IG51bGxcbn0pO1xuXG4vKipcbiAqIFRvZ2dsZSBhY3RpdmUgbWFwIGNvbnRyb2wgcGFuZWxcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb24gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgbWFwIGNvbnRyb2wgcGFuZWwgaWQsIG9uZSBvZiB0aGUga2V5cyBvZjogW2BERUZBVUxUX01BUF9DT05UUk9MU2BdKCNkZWZhdWx0X21hcF9jb250cm9scylcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTWFwQ29udHJvbFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDoge3BhbmVsSWQsIGluZGV4ID0gMH19OiBVaVN0YXRlQWN0aW9ucy5Ub2dnbGVNYXBDb250cm9sVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbWFwQ29udHJvbHM6IHtcbiAgICAuLi5zdGF0ZS5tYXBDb250cm9scyxcbiAgICBbcGFuZWxJZF06IHtcbiAgICAgIC4uLnN0YXRlLm1hcENvbnRyb2xzW3BhbmVsSWRdLFxuICAgICAgLy8gdGhpcyBoYW5kbGVzIHNwbGl0IG1hcCBpbnRlcmFjdGlvblxuICAgICAgLy8gVG9nZ2xpbmcgZnJvbSB3aXRoaW4gdGhlIHNhbWUgbWFwIHdpbGwgc2ltcGx5IHRvZ2dsZSB0aGUgYWN0aXZlIHByb3BlcnR5XG4gICAgICAvLyBUb2dnbGluZyBmcm9tIHdpdGhpbiBkaWZmZXJlbnQgbWFwcyB3ZSBzZXQgdGhlIGFjdGl2ZSBwcm9wZXJ0eSB0byB0cnVlXG4gICAgICBhY3RpdmU6XG4gICAgICAgIGluZGV4ID09PSBzdGF0ZS5tYXBDb250cm9sc1twYW5lbElkXS5hY3RpdmVNYXBJbmRleFxuICAgICAgICAgID8gIXN0YXRlLm1hcENvbnRyb2xzW3BhbmVsSWRdLmFjdGl2ZVxuICAgICAgICAgIDogdHJ1ZSxcbiAgICAgIGFjdGl2ZU1hcEluZGV4OiBpbmRleFxuICAgIH1cbiAgfVxufSk7XG5cbi8qKlxuICogVG9nZ2xlIG1hcCBjb250cm9sIHZpc2liaWxpdHlcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb24gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgbWFwIGNvbnRyb2wgcGFuZWwgaWQsIG9uZSBvZiB0aGUga2V5cyBvZjogW2BERUZBVUxUX01BUF9DT05UUk9MU2BdKCNkZWZhdWx0X21hcF9jb250cm9scylcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0TWFwQ29udHJvbFZpc2liaWxpdHlVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IHtwYW5lbElkLCBzaG93fX06IFVpU3RhdGVBY3Rpb25zLnNldE1hcENvbnRyb2xWaXNpYmlsaXR5VXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiB7XG4gIGlmICghc3RhdGUubWFwQ29udHJvbHM/LltwYW5lbElkXSkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbWFwQ29udHJvbHM6IHtcbiAgICAgIC4uLnN0YXRlLm1hcENvbnRyb2xzLFxuICAgICAgW3BhbmVsSWRdOiB7XG4gICAgICAgIC4uLnN0YXRlLm1hcENvbnRyb2xzW3BhbmVsSWRdLFxuICAgICAgICBzaG93OiBCb29sZWFuKHNob3cpXG4gICAgICB9XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBUb2dnbGUgYWN0aXZlIG1hcCBjb250cm9sIHBhbmVsXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgZGF0YXNldCBpZFxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBvcGVuRGVsZXRlTW9kYWxVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IGRhdGFzZXRLZXlUb1JlbW92ZX06IFVpU3RhdGVBY3Rpb25zLk9wZW5EZWxldGVNb2RhbFVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGN1cnJlbnRNb2RhbDogREVMRVRFX0RBVEFfSUQsXG4gIGRhdGFzZXRLZXlUb1JlbW92ZVxufSk7XG5cbi8qKlxuICogU2V0IGBleHBvcnRJbWFnZS5sZWdlbmRgIHRvIGB0cnVlYCBvciBgZmFsc2VgXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEV4cG9ydEltYWdlU2V0dGluZ1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogbmV3U2V0dGluZ306IFVpU3RhdGVBY3Rpb25zLlNldEV4cG9ydEltYWdlU2V0dGluZ1VwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4ge1xuICBjb25zdCB1cGRhdGVkID0gey4uLnN0YXRlLmV4cG9ydEltYWdlLCAuLi5uZXdTZXR0aW5nfTtcbiAgY29uc3QgaW1hZ2VTaXplID0gY2FsY3VsYXRlRXhwb3J0SW1hZ2VTaXplKHVwZGF0ZWQpIHx8IHN0YXRlLmV4cG9ydEltYWdlLmltYWdlU2l6ZTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGV4cG9ydEltYWdlOiB7XG4gICAgICAuLi51cGRhdGVkLFxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgLy8gVE9ETzogY2FsY3VsYXRlRXhwb3J0SW1hZ2VTaXplIGRvZXMgbm90IHJldHVybiBpbWFnZVNpemUuem9vbU9mZnNldCxcbiAgICAgIC8vIGRvIHdlIG5lZWQgdGFrZSB0aGlzIHZhbHVlIGZyb20gY3VycmVudCBzdGF0ZSwgb3IgcmV0dXJuIGRlZmF1bCB2YWx1ZSA9IDBcbiAgICAgIGltYWdlU2l6ZVxuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogU2V0IGBleHBvcnRJbWFnZS5zZXRFeHBvcnRJbWFnZURhdGFVcmlgIHRvIGEgaW1hZ2UgZGF0YVVyaVxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIGV4cG9ydCBpbWFnZSBkYXRhIHVyaVxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFeHBvcnRJbWFnZURhdGFVcmlVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IGRhdGFVcml9OiBVaVN0YXRlQWN0aW9ucy5TZXRFeHBvcnRJbWFnZURhdGFVcmlVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBleHBvcnRJbWFnZToge1xuICAgIC4uLnN0YXRlLmV4cG9ydEltYWdlLFxuICAgIHByb2Nlc3Npbmc6IGZhbHNlLFxuICAgIGltYWdlRGF0YVVyaTogZGF0YVVyaVxuICB9XG59KTtcblxuLyoqXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFeHBvcnRJbWFnZUVycm9yVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiBlcnJvcn06IFVpU3RhdGVBY3Rpb25zLlNldEV4cG9ydEltYWdlRXJyb3JVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBleHBvcnRJbWFnZToge1xuICAgIC4uLnN0YXRlLmV4cG9ydEltYWdlLFxuICAgIHByb2Nlc3Npbmc6IGZhbHNlLFxuICAgIGVycm9yXG4gIH1cbn0pO1xuXG4vKipcbiAqIERlbGV0ZSBjYWNoZWQgZXhwb3J0IGltYWdlXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBjbGVhbnVwRXhwb3J0SW1hZ2VVcGRhdGVyID0gKHN0YXRlOiBVaVN0YXRlKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZXhwb3J0SW1hZ2U6IHtcbiAgICAuLi5zdGF0ZS5leHBvcnRJbWFnZSxcbiAgICBleHBvcnRpbmc6IGZhbHNlLFxuICAgIGltYWdlRGF0YVVyaTogJycsXG4gICAgZXJyb3I6IGZhbHNlLFxuICAgIHByb2Nlc3Npbmc6IGZhbHNlLFxuICAgIGNlbnRlcjogZmFsc2VcbiAgfVxufSk7XG5cbi8qKlxuICogU3RhcnQgaW1hZ2UgZXhwb3J0aW5nIGZsb3dcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZVxuICogQHBhcmFtIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtVaVN0YXRlfVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc3RhcnRFeHBvcnRpbmdJbWFnZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogb3B0aW9ucyA9IHt9fToge3BheWxvYWQ6IFBhcnRpYWw8RXhwb3J0SW1hZ2U+fVxuKTogVWlTdGF0ZSA9PiB7XG4gIGNvbnN0IGltYWdlU2V0dGluZ3MgPSB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBleHBvcnRpbmc6IHRydWVcbiAgfTtcblxuICByZXR1cm4gY29tcG9zZV8oW1xuICAgIGNsZWFudXBFeHBvcnRJbWFnZVVwZGF0ZXIsXG4gICAgYXBwbHlfKHNldEV4cG9ydEltYWdlU2V0dGluZ1VwZGF0ZXIsIHBheWxvYWRfKGltYWdlU2V0dGluZ3MpKVxuICBdKShzdGF0ZSk7XG59O1xuXG4vKipcbiAqIFNldCBzZWxlY3RlZCBkYXRhc2V0IGZvciBleHBvcnRcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBkYXRhc2V0IGlkXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEV4cG9ydFNlbGVjdGVkRGF0YXNldFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogZGF0YXNldH06IFVpU3RhdGVBY3Rpb25zLlNldEV4cG9ydFNlbGVjdGVkRGF0YXNldFVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGV4cG9ydERhdGE6IHtcbiAgICAuLi5zdGF0ZS5leHBvcnREYXRhLFxuICAgIHNlbGVjdGVkRGF0YXNldDogZGF0YXNldFxuICB9XG59KTtcblxuLyoqXG4gKiBTZXQgZGF0YSBmb3JtYXQgZm9yIGV4cG9ydGluZyBkYXRhXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgb25lIG9mIGAndGV4dC9jc3YnYFxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFeHBvcnREYXRhVHlwZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogZGF0YVR5cGV9OiBVaVN0YXRlQWN0aW9ucy5TZXRFeHBvcnREYXRhVHlwZVVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGV4cG9ydERhdGE6IHtcbiAgICAuLi5zdGF0ZS5leHBvcnREYXRhLFxuICAgIGRhdGFUeXBlXG4gIH1cbn0pO1xuXG4vKipcbiAqIFdoZXRoZXIgdG8gZXhwb3J0IGZpbHRlcmVkIGRhdGEsIGB0cnVlYCBvciBgZmFsc2VgXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWRcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RXhwb3J0RmlsdGVyZWRVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IGZpbHRlcmVkfTogVWlTdGF0ZUFjdGlvbnMuU2V0RXhwb3J0RmlsdGVyZWRVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBleHBvcnREYXRhOiB7XG4gICAgLi4uc3RhdGUuZXhwb3J0RGF0YSxcbiAgICBmaWx0ZXJlZFxuICB9XG59KTtcblxuLyoqXG4gKiBXaGV0aGVyIHRvIGluY2x1ZGluZyBkYXRhIGluIG1hcCBjb25maWcsIHRvZ2dsZSBiZXR3ZWVuIGB0cnVlYCBvciBgZmFsc2VgXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEV4cG9ydERhdGFVcGRhdGVyID0gKHN0YXRlOiBVaVN0YXRlKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZXhwb3J0TWFwOiB7XG4gICAgLi4uc3RhdGUuZXhwb3J0TWFwLFxuICAgIFtFWFBPUlRfTUFQX0ZPUk1BVFMuSlNPTl06IHtcbiAgICAgIC4uLnN0YXRlLmV4cG9ydE1hcFtFWFBPUlRfTUFQX0ZPUk1BVFMuSlNPTl0sXG4gICAgICBoYXNEYXRhOiAhc3RhdGUuZXhwb3J0TWFwW0VYUE9SVF9NQVBfRk9STUFUUy5KU09OXS5oYXNEYXRhXG4gICAgfVxuICB9XG59KTtcblxuLyoqXG4gKiB3aGV0aGVyIHRvIGV4cG9ydCBhIG1hcGJveCBhY2Nlc3MgdG8gSFRNTCBzaW5nbGUgcGFnZVxuICogQHBhcmFtIHN0YXRlIC0gYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWRcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0VXNlck1hcGJveEFjY2Vzc1Rva2VuVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiB1c2VyTWFwYm94VG9rZW59OiBVaVN0YXRlQWN0aW9ucy5TZXRVc2VyTWFwYm94QWNjZXNzVG9rZW5VcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBleHBvcnRNYXA6IHtcbiAgICAuLi5zdGF0ZS5leHBvcnRNYXAsXG4gICAgW0VYUE9SVF9NQVBfRk9STUFUUy5IVE1MXToge1xuICAgICAgLi4uc3RhdGUuZXhwb3J0TWFwW0VYUE9SVF9NQVBfRk9STUFUUy5IVE1MXSxcbiAgICAgIHVzZXJNYXBib3hUb2tlblxuICAgIH1cbiAgfVxufSk7XG5cbi8qKlxuICogU2V0cyB0aGUgZXhwb3J0IG1hcCBmb3JtYXRcbiAqIEBwYXJhbSBzdGF0ZSAtIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIGZvcm1hdCB0byB1c2UgdG8gZXhwb3J0IHRoZSBtYXAgaW50b1xuICogQHJldHVybiBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEV4cG9ydE1hcEZvcm1hdFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogZm9ybWF0fTogVWlTdGF0ZUFjdGlvbnMuU2V0RXhwb3J0TWFwRm9ybWF0VXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZXhwb3J0TWFwOiB7XG4gICAgLi4uc3RhdGUuZXhwb3J0TWFwLFxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICBmb3JtYXRcbiAgfVxufSk7XG5cbi8qKlxuICogU2V0IHRoZSBleHBvcnQgaHRtbCBtYXAgbW9kZVxuICogQHBhcmFtIHN0YXRlIC0gYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgdG8gYmUgc2V0IChhdmFpbGFibGUgbW9kZXM6IEVYUE9SVF9IVE1MX01BUF9NT0RFUylcbiAqIEByZXR1cm4gbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFeHBvcnRNYXBIVE1MTW9kZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogbW9kZX06IFVpU3RhdGVBY3Rpb25zLlNldEV4cG9ydEhUTUxNYXBNb2RlVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZXhwb3J0TWFwOiB7XG4gICAgLi4uc3RhdGUuZXhwb3J0TWFwLFxuICAgIFtFWFBPUlRfTUFQX0ZPUk1BVFMuSFRNTF06IHtcbiAgICAgIC4uLnN0YXRlLmV4cG9ydE1hcFtFWFBPUlRfTUFQX0ZPUk1BVFMuSFRNTF0sXG4gICAgICBtb2RlXG4gICAgfVxuICB9XG59KTtcblxuLyoqXG4gKiBBZGRzIGEgbmV3IG5vdGlmaWNhdGlvbi5cbiAqIFVwZGF0ZXMgYSBub3RpZmljYXRpb24gaW4gY2FzZSBvZiBtYXRjaGluZyBpZHMuXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgUGFyYW1zIG9mIGEgbm90aWZpY2F0aW9uXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZE5vdGlmaWNhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZH06IFVpU3RhdGVBY3Rpb25zLkFkZE5vdGlmaWNhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4ge1xuICBsZXQgbm90aWZpY2F0aW9ucztcblxuICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gIGNvbnN0IHBheWxvYWRJZCA9IHBheWxvYWQ/LmlkO1xuICBjb25zdCBub3RpZmljYXRpb25Ub1VwZGF0ZSA9IHBheWxvYWRJZCA/IHN0YXRlLm5vdGlmaWNhdGlvbnMuZmluZChuID0+IG4uaWQgPT09IHBheWxvYWRJZCkgOiBudWxsO1xuICBpZiAobm90aWZpY2F0aW9uVG9VcGRhdGUpIHtcbiAgICBub3RpZmljYXRpb25zID0gc3RhdGUubm90aWZpY2F0aW9ucy5tYXAobiA9PlxuICAgICAgbi5pZCA9PT0gcGF5bG9hZElkID8gY3JlYXRlTm90aWZpY2F0aW9uKHBheWxvYWQpIDogblxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgbm90aWZpY2F0aW9ucyA9IFsuLi4oc3RhdGUubm90aWZpY2F0aW9ucyB8fCBbXSksIGNyZWF0ZU5vdGlmaWNhdGlvbihwYXlsb2FkKV07XG4gIH1cblxuICByZXR1cm4gey4uLnN0YXRlLCBub3RpZmljYXRpb25zfTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGEgbm90aWZpY2F0aW9uXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgaWQgb2YgdGhlIG5vdGlmaWNhdGlvbiB0byBiZSByZW1vdmVkXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZU5vdGlmaWNhdGlvblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogaWR9OiBVaVN0YXRlQWN0aW9ucy5SZW1vdmVOb3RpZmljYXRpb25VcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBub3RpZmljYXRpb25zOiBzdGF0ZS5ub3RpZmljYXRpb25zLmZpbHRlcihuID0+IG4uaWQgIT09IGlkKVxufSk7XG5cbi8qKlxuICogRmlyZWQgd2hlbiBmaWxlIGxvYWRpbmcgYmVnaW5cbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbG9hZEZpbGVzVXBkYXRlciA9IChzdGF0ZTogVWlTdGF0ZSk6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGxvYWRGaWxlczoge1xuICAgIC4uLnN0YXRlLmxvYWRGaWxlcyxcbiAgICBmaWxlTG9hZGluZzogdHJ1ZVxuICB9XG59KTtcblxuLyoqXG4gKiBIYW5kbGVzIGxvYWRpbmcgZmlsZSBzdWNjZXNzIGFuZCBzZXQgZmlsZUxvYWRpbmcgcHJvcGVydHkgdG8gZmFsc2VcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICovXG5leHBvcnQgY29uc3QgbG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXIgPSAoc3RhdGU6IFVpU3RhdGUpOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBsb2FkRmlsZXM6IHtcbiAgICAuLi5zdGF0ZS5sb2FkRmlsZXMsXG4gICAgZmlsZUxvYWRpbmc6IGZhbHNlXG4gIH1cbn0pO1xuXG4vKipcbiAqIEhhbmRsZXMgbG9hZCBmaWxlIGVycm9yIGFuZCBzZXQgZmlsZUxvYWRpbmcgcHJvcGVydHkgdG8gZmFsc2VcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZVxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5lcnJvclxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsb2FkRmlsZXNFcnJVcGRhdGVyID0gKHN0YXRlOiBVaVN0YXRlLCB7ZXJyb3J9OiBMb2FkRmlsZXNFcnJVcGRhdGVyQWN0aW9uKTogVWlTdGF0ZSA9PlxuICBhZGROb3RpZmljYXRpb25VcGRhdGVyKFxuICAgIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbG9hZEZpbGVzOiB7XG4gICAgICAgIC4uLnN0YXRlLmxvYWRGaWxlcyxcbiAgICAgICAgZmlsZUxvYWRpbmc6IGZhbHNlXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBwYXlsb2FkOiBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgIG1lc3NhZ2U6IChlcnJvciB8fCB7fSkubWVzc2FnZSB8fCAnRmFpbGVkIHRvIHVwbG9hZCBmaWxlcycsXG4gICAgICAgIHRvcGljOiBERUZBVUxUX05PVElGSUNBVElPTl9UT1BJQ1MuZ2xvYmFsXG4gICAgICB9KVxuICAgIH1cbiAgKTtcblxuLyoqXG4gKiBIYW5kbGVzIHRvZ2dsZSBtYXAgc3BsaXQgYW5kIHJlc2V0IGFsbCBtYXAgY29udHJvbCBpbmRleCB0byAwXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGVcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlU3BsaXRNYXBVcGRhdGVyID0gKHN0YXRlOiBVaVN0YXRlKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbWFwQ29udHJvbHM6IE9iamVjdC5lbnRyaWVzKHN0YXRlLm1hcENvbnRyb2xzKS5yZWR1Y2UoXG4gICAgKGFjYywgZW50cnkpID0+ICh7XG4gICAgICAuLi5hY2MsXG4gICAgICBbZW50cnlbMF1dOiB7XG4gICAgICAgIC4uLmVudHJ5WzFdLFxuICAgICAgICBhY3RpdmVNYXBJbmRleDogMFxuICAgICAgfVxuICAgIH0pLFxuICAgIHt9IGFzIE1hcENvbnRyb2xzXG4gIClcbn0pO1xuXG4vKipcbiAqIFRvZ2dsZSBtb2RhbCBkYXRhXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGVcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXIgPSAoc3RhdGU6IFVpU3RhdGUpOiBVaVN0YXRlID0+XG4gIHRvZ2dsZU1vZGFsVXBkYXRlcihzdGF0ZSwge3BheWxvYWQ6IERBVEFfVEFCTEVfSUR9KTtcblxuLyoqXG4gKiBTZXQgdGhlIGxvY2FsZSBvZiB0aGUgVUlcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZFxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkLmxvY2FsZSBsb2NhbGVcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0TG9jYWxlVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiB7bG9jYWxlfX06IFVpU3RhdGVBY3Rpb25zLlNldExvY2FsZVVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGxvY2FsZVxufSk7XG5cbi8qKlxuICogVG9nZ2xlIGxheWVyIHBhbmVsIGxpc3Qgdmlld1xuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIGxheWVyIHBhbmVsIGxpc3RWaWV3IHZhbHVlLiBDYW4gYmUgJ2xpc3QnIG9yICdzb3J0QnlEYXRhc2V0J1xuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVMYXllclBhbmVsTGlzdFZpZXdVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IGxpc3RWaWV3fTogVWlTdGF0ZUFjdGlvbnMuVG9nZ2xlTGF5ZXJQYW5lbExpc3RWaWV3QWN0aW9uXG4pOiBVaVN0YXRlID0+IHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICByZXR1cm4gbGlzdFZpZXcgPT09IHN0YXRlLmxheWVyUGFuZWxMaXN0Vmlld1xuICAgID8gc3RhdGVcbiAgICA6IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGxheWVyUGFuZWxMaXN0VmlldzogbGlzdFZpZXdcbiAgICAgIH07XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFvQkEsSUFBQUEsZ0JBQUEsR0FB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
|
|
744
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZGVmYXVsdFNldHRpbmdzIiwicmVxdWlyZSIsIl9sb2NhbGVzIiwiX25vdGlmaWNhdGlvbnNVdGlscyIsIl9leHBvcnRVdGlscyIsIl9jb21wb3NlckhlbHBlcnMiLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIkRFRkFVTFRfQUNUSVZFX1NJREVfUEFORUwiLCJleHBvcnRzIiwiREVGQVVMVF9NT0RBTCIsIkFERF9EQVRBX0lEIiwidWlTdGF0ZVVwZGF0ZXJzIiwiREVGQVVMVF9NQVBfQ09OVFJPTFNfRkVBVFVSRVMiLCJzaG93IiwiYWN0aXZlIiwiZGlzYWJsZUNsb3NlIiwiYWN0aXZlTWFwSW5kZXgiLCJERUZBVUxUX01BUF9DT05UUk9MUyIsIk1BUF9DT05UUk9MUyIsInJlZHVjZSIsImZpbmFsIiwiY3VycmVudCIsIkRFRkFVTFRfRVhQT1JUX0lNQUdFIiwicmF0aW8iLCJFWFBPUlRfSU1HX1JBVElPUyIsIlNDUkVFTiIsInJlc29sdXRpb24iLCJSRVNPTFVUSU9OUyIsIk9ORV9YIiwibGVnZW5kIiwibWFwSCIsIm1hcFciLCJpbWFnZVNpemUiLCJ6b29tT2Zmc2V0Iiwic2NhbGUiLCJpbWFnZVciLCJpbWFnZUgiLCJjZW50ZXIiLCJpbWFnZURhdGFVcmkiLCJleHBvcnRpbmciLCJwcm9jZXNzaW5nIiwiZXJyb3IiLCJERUZBVUxUX0xPQURfRklMRVMiLCJmaWxlTG9hZGluZyIsIkRFRkFVTFRfRVhQT1JUX0RBVEEiLCJzZWxlY3RlZERhdGFzZXQiLCJkYXRhVHlwZSIsIkVYUE9SVF9EQVRBX1RZUEUiLCJDU1YiLCJmaWx0ZXJlZCIsIkRFRkFVTFRfTk9USUZJQ0FUSU9OUyIsIkRFRkFVTFRfRVhQT1JUX0hUTUwiLCJleHBvcnRNYXBib3hBY2Nlc3NUb2tlbiIsInVzZXJNYXBib3hUb2tlbiIsIm1vZGUiLCJFWFBPUlRfSFRNTF9NQVBfTU9ERVMiLCJSRUFEIiwiREVGQVVMVF9FWFBPUlRfSlNPTiIsImhhc0RhdGEiLCJERUZBVUxUX0VYUE9SVF9NQVAiLCJFWFBPUlRfTUFQX0ZPUk1BVFMiLCJIVE1MIiwiSlNPTiIsIklOSVRJQUxfVUlfU1RBVEUiLCJyZWFkT25seSIsImFjdGl2ZVNpZGVQYW5lbCIsImN1cnJlbnRNb2RhbCIsImRhdGFzZXRLZXlUb1JlbW92ZSIsInZpc2libGVEcm9wZG93biIsImV4cG9ydEltYWdlIiwiZXhwb3J0RGF0YSIsImV4cG9ydE1hcCIsIm1hcENvbnRyb2xzIiwibm90aWZpY2F0aW9ucyIsImxvYWRGaWxlcyIsImxvY2FsZSIsIkxPQ0FMRV9DT0RFUyIsImVuIiwibGF5ZXJQYW5lbExpc3RWaWV3IiwiaW5pdFVpU3RhdGVVcGRhdGVyIiwic3RhdGUiLCJhY3Rpb24iLCJwYXlsb2FkIiwiaW5pdGlhbFVpU3RhdGUiLCJ0b2dnbGVTaWRlUGFuZWxVcGRhdGVyIiwiX3JlZiIsImlkIiwidG9nZ2xlTW9kYWxVcGRhdGVyIiwiX3JlZjIiLCJzaG93RXhwb3J0RHJvcGRvd25VcGRhdGVyIiwiX3JlZjMiLCJoaWRlRXhwb3J0RHJvcGRvd25VcGRhdGVyIiwidG9nZ2xlTWFwQ29udHJvbFVwZGF0ZXIiLCJfcmVmNCIsIl9yZWY0JHBheWxvYWQiLCJwYW5lbElkIiwiX3JlZjQkcGF5bG9hZCRpbmRleCIsImluZGV4Iiwic2V0TWFwQ29udHJvbFZpc2liaWxpdHlVcGRhdGVyIiwiX3JlZjUiLCJfc3RhdGUkbWFwQ29udHJvbHMiLCJfcmVmNSRwYXlsb2FkIiwiQm9vbGVhbiIsIm9wZW5EZWxldGVNb2RhbFVwZGF0ZXIiLCJfcmVmNiIsIkRFTEVURV9EQVRBX0lEIiwic2V0RXhwb3J0SW1hZ2VTZXR0aW5nVXBkYXRlciIsIl9yZWY3IiwibmV3U2V0dGluZyIsInVwZGF0ZWQiLCJjYWxjdWxhdGVFeHBvcnRJbWFnZVNpemUiLCJzZXRFeHBvcnRJbWFnZURhdGFVcmlVcGRhdGVyIiwiX3JlZjgiLCJkYXRhVXJpIiwic2V0RXhwb3J0SW1hZ2VFcnJvclVwZGF0ZXIiLCJfcmVmOSIsImNsZWFudXBFeHBvcnRJbWFnZVVwZGF0ZXIiLCJzdGFydEV4cG9ydGluZ0ltYWdlVXBkYXRlciIsIl9yZWYxMCIsIl9yZWYxMCRwYXlsb2FkIiwib3B0aW9ucyIsImltYWdlU2V0dGluZ3MiLCJjb21wb3NlXyIsImFwcGx5XyIsInBheWxvYWRfIiwic2V0RXhwb3J0U2VsZWN0ZWREYXRhc2V0VXBkYXRlciIsIl9yZWYxMSIsImRhdGFzZXQiLCJzZXRFeHBvcnREYXRhVHlwZVVwZGF0ZXIiLCJfcmVmMTIiLCJzZXRFeHBvcnRGaWx0ZXJlZFVwZGF0ZXIiLCJfcmVmMTMiLCJzZXRFeHBvcnREYXRhVXBkYXRlciIsInNldFVzZXJNYXBib3hBY2Nlc3NUb2tlblVwZGF0ZXIiLCJfcmVmMTQiLCJzZXRFeHBvcnRNYXBGb3JtYXRVcGRhdGVyIiwiX3JlZjE1IiwiZm9ybWF0Iiwic2V0RXhwb3J0TWFwSFRNTE1vZGVVcGRhdGVyIiwiX3JlZjE2IiwiYWRkTm90aWZpY2F0aW9uVXBkYXRlciIsIl9yZWYxNyIsInBheWxvYWRJZCIsIm5vdGlmaWNhdGlvblRvVXBkYXRlIiwiZmluZCIsIm4iLCJtYXAiLCJjcmVhdGVOb3RpZmljYXRpb24iLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwicmVtb3ZlTm90aWZpY2F0aW9uVXBkYXRlciIsIl9yZWYxOCIsImxvYWRGaWxlc1VwZGF0ZXIiLCJsb2FkRmlsZXNTdWNjZXNzVXBkYXRlciIsImxvYWRGaWxlc0VyclVwZGF0ZXIiLCJfcmVmMTkiLCJlcnJvck5vdGlmaWNhdGlvbiIsIm1lc3NhZ2UiLCJ0b3BpYyIsIkRFRkFVTFRfTk9USUZJQ0FUSU9OX1RPUElDUyIsImdsb2JhbCIsInRvZ2dsZVNwbGl0TWFwVXBkYXRlciIsImVudHJpZXMiLCJhY2MiLCJlbnRyeSIsInNob3dEYXRhc2V0VGFibGVVcGRhdGVyIiwiREFUQV9UQUJMRV9JRCIsInNldExvY2FsZVVwZGF0ZXIiLCJfcmVmMjAiLCJ0b2dnbGVMYXllclBhbmVsTGlzdFZpZXdVcGRhdGVyIiwiX3JlZjIxIiwibGlzdFZpZXciXSwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVkdWNlcnMvdWktc3RhdGUtdXBkYXRlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIyIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHtcbiAgQUREX0RBVEFfSUQsXG4gIERBVEFfVEFCTEVfSUQsXG4gIERFRkFVTFRfTk9USUZJQ0FUSU9OX1RPUElDUyxcbiAgREVMRVRFX0RBVEFfSUQsXG4gIEVYUE9SVF9EQVRBX1RZUEUsXG4gIEVYUE9SVF9IVE1MX01BUF9NT0RFUyxcbiAgRVhQT1JUX0lNR19SQVRJT1MsXG4gIEVYUE9SVF9NQVBfRk9STUFUUyxcbiAgUkVTT0xVVElPTlMsXG4gIE1BUF9DT05UUk9MU1xufSBmcm9tICdjb25zdGFudHMvZGVmYXVsdC1zZXR0aW5ncyc7XG5pbXBvcnQge0xPQ0FMRV9DT0RFU30gZnJvbSAnbG9jYWxpemF0aW9uL2xvY2FsZXMnO1xuaW1wb3J0IHtjcmVhdGVOb3RpZmljYXRpb24sIGVycm9yTm90aWZpY2F0aW9ufSBmcm9tICd1dGlscy9ub3RpZmljYXRpb25zLXV0aWxzJztcbmltcG9ydCB7Y2FsY3VsYXRlRXhwb3J0SW1hZ2VTaXplfSBmcm9tICcuLi91dGlscy9leHBvcnQtdXRpbHMnO1xuaW1wb3J0IHtwYXlsb2FkXywgYXBwbHlfLCBjb21wb3NlX30gZnJvbSAnLi9jb21wb3Nlci1oZWxwZXJzJztcblxuaW1wb3J0IEFjdGlvblR5cGVzIGZyb20gJy4uL2NvbnN0YW50cy9hY3Rpb24tdHlwZXMnO1xuaW1wb3J0ICogYXMgVWlTdGF0ZUFjdGlvbnMgZnJvbSAnYWN0aW9ucy91aS1zdGF0ZS1hY3Rpb25zJztcbmltcG9ydCB7S2VwbGVyR2xJbml0UGF5bG9hZCwgTG9hZEZpbGVzRXJyVXBkYXRlckFjdGlvbn0gZnJvbSAnLi4vYWN0aW9ucyc7XG5cbmV4cG9ydCB0eXBlIEV4cG9ydEltYWdlID0ge1xuICByYXRpbzoga2V5b2YgdHlwZW9mIEVYUE9SVF9JTUdfUkFUSU9TO1xuICByZXNvbHV0aW9uOiBrZXlvZiB0eXBlb2YgUkVTT0xVVElPTlM7XG4gIGxlZ2VuZDogYm9vbGVhbjtcbiAgbWFwSDogbnVtYmVyO1xuICBtYXBXOiBudW1iZXI7XG4gIGltYWdlU2l6ZToge1xuICAgIHpvb21PZmZzZXQ6IG51bWJlcjtcbiAgICBzY2FsZTogbnVtYmVyO1xuICAgIGltYWdlVzogbnVtYmVyO1xuICAgIGltYWdlSDogbnVtYmVyO1xuICB9O1xuICAvLyBleHBvcnRpbmcgc3RhdGVcbiAgaW1hZ2VEYXRhVXJpOiBzdHJpbmc7XG4gIGV4cG9ydGluZzogYm9vbGVhbjtcbiAgcHJvY2Vzc2luZzogYm9vbGVhbjtcbiAgZXJyb3I6IEVycm9yIHwgZmFsc2U7XG4gIC8vIFRoaXMgZmllbGQgd2FzIG5vdCBpbiB0aGUgLmQudHMgZmlsZVxuICBjZW50ZXI6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBFeHBvcnREYXRhID0ge1xuICBzZWxlY3RlZERhdGFzZXQ6IHN0cmluZztcbiAgZGF0YVR5cGU6IHN0cmluZztcbiAgZmlsdGVyZWQ6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBFeHBvcnRIdG1sID0ge1xuICBleHBvcnRNYXBib3hBY2Nlc3NUb2tlbjogbnVsbCB8IHN0cmluZztcbiAgdXNlck1hcGJveFRva2VuOiBzdHJpbmc7XG4gIG1vZGU6IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBFeHBvcnRKc29uID0ge1xuICBoYXNEYXRhOiBib29sZWFuO1xufTtcbmV4cG9ydCB0eXBlIEV4cG9ydE1hcCA9IHtcbiAgSFRNTDogRXhwb3J0SHRtbDtcbiAgSlNPTjogRXhwb3J0SnNvbjtcbiAgZm9ybWF0OiAnSFRNTCcgfCAnSlNPTic7XG59O1xuXG5leHBvcnQgdHlwZSBNYXBDb250cm9sID0ge1xuICBzaG93OiBib29sZWFuO1xuICBhY3RpdmU6IGJvb2xlYW47XG4gIGRpc2FibGVDbG9zZT86IGJvb2xlYW47XG4gIGFjdGl2ZU1hcEluZGV4PzogbnVtYmVyO1xufTtcbmV4cG9ydCB0eXBlIE1hcENvbnRyb2xzID0ge1xuICB2aXNpYmxlTGF5ZXJzPzogTWFwQ29udHJvbDtcbiAgbWFwTGVnZW5kPzogTWFwQ29udHJvbDtcbiAgdG9nZ2xlM2Q/OiBNYXBDb250cm9sO1xuICBzcGxpdE1hcD86IE1hcENvbnRyb2w7XG4gIG1hcERyYXc/OiBNYXBDb250cm9sO1xuICBtYXBMb2NhbGU/OiBNYXBDb250cm9sO1xufTtcblxuZXhwb3J0IHR5cGUgTG9hZEZpbGVzID0ge1xuICBmaWxlTG9hZGluZzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIE5vdGlmaWNhdGlvbnMgPSB7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xuICB0b3BpYzogc3RyaW5nO1xuICBpZDogc3RyaW5nO1xuICBjb3VudDogbnVtYmVyO1xuICBpc0V4cGFuZGVkPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIExvY2FsZSA9IHN0cmluZztcblxuZXhwb3J0IHR5cGUgTGF5ZXJQYW5lbExpc3RWaWV3ID0gJ2xpc3QnIHwgJ3NvcnRCeURhdGFzZXQnO1xuXG5leHBvcnQgdHlwZSBVaVN0YXRlID0ge1xuICByZWFkT25seTogYm9vbGVhbjtcbiAgYWN0aXZlU2lkZVBhbmVsOiBzdHJpbmc7XG4gIGN1cnJlbnRNb2RhbDogc3RyaW5nIHwgbnVsbDtcbiAgZGF0YXNldEtleVRvUmVtb3ZlOiBzdHJpbmcgfCBudWxsO1xuICB2aXNpYmxlRHJvcGRvd246IHN0cmluZyB8IG51bGw7XG4gIC8vIGV4cG9ydCBpbWFnZSBtb2RhbCB1aVxuICBleHBvcnRJbWFnZTogRXhwb3J0SW1hZ2U7XG4gIC8vIGV4cG9ydCBkYXRhIG1vZGFsIHVpXG4gIGV4cG9ydERhdGE6IEV4cG9ydERhdGE7XG4gIC8vIGh0bWwgZXhwb3J0XG4gIGV4cG9ydE1hcDogRXhwb3J0TWFwO1xuICAvLyBtYXAgY29udHJvbCBwYW5lbHNcbiAgbWFwQ29udHJvbHM6IE1hcENvbnRyb2xzO1xuICAvLyB1aSBub3RpZmljYXRpb25zXG4gIG5vdGlmaWNhdGlvbnM6IE5vdGlmaWNhdGlvbnNbXTtcbiAgLy8gbG9hZCBmaWxlc1xuICBsb2FkRmlsZXM6IExvYWRGaWxlcztcbiAgLy8gTG9jYWxlIG9mIHRoZSBVSVxuICBsb2NhbGU6IExvY2FsZTtcbiAgbGF5ZXJQYW5lbExpc3RWaWV3OiBMYXllclBhbmVsTGlzdFZpZXc7XG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BQ1RJVkVfU0lERV9QQU5FTCA9ICdsYXllcic7XG5leHBvcnQgY29uc3QgREVGQVVMVF9NT0RBTCA9IEFERF9EQVRBX0lEO1xuXG4vKipcbiAqIFVwZGF0ZXJzIGZvciBgdWlTdGF0ZWAgcmVkdWNlci4gQ2FuIGJlIHVzZWQgaW4geW91ciByb290IHJlZHVjZXIgdG8gZGlyZWN0bHkgbW9kaWZ5IGtlcGxlci5nbCdzIHN0YXRlLlxuICogUmVhZCBtb3JlIGFib3V0IFtVc2luZyB1cGRhdGVyc10oLi4vYWR2YW5jZWQtdXNhZ2UvdXNpbmctdXBkYXRlcnMubWQpXG4gKlxuICogQHB1YmxpY1xuICogQGV4YW1wbGVcbiAqXG4gKiBpbXBvcnQga2VwbGVyR2xSZWR1Y2VyLCB7dWlTdGF0ZVVwZGF0ZXJzfSBmcm9tICdrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuICogLy8gUm9vdCBSZWR1Y2VyXG4gKiBjb25zdCByZWR1Y2VycyA9IGNvbWJpbmVSZWR1Y2Vycyh7XG4gKiAga2VwbGVyR2w6IGtlcGxlckdsUmVkdWNlcixcbiAqICBhcHA6IGFwcFJlZHVjZXJcbiAqIH0pO1xuICpcbiAqIGNvbnN0IGNvbXBvc2VkUmVkdWNlciA9IChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gKiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICogICAgLy8gY2xpY2sgYnV0dG9uIHRvIGNsb3NlIHNpZGUgcGFuZWxcbiAqICAgIGNhc2UgJ0NMSUNLX0JVVFRPTic6XG4gKiAgICAgIHJldHVybiB7XG4gKiAgICAgICAgLi4uc3RhdGUsXG4gKiAgICAgICAga2VwbGVyR2w6IHtcbiAqICAgICAgICAgIC4uLnN0YXRlLmtlcGxlckdsLFxuICogICAgICAgICAgZm9vOiB7XG4gKiAgICAgICAgICAgICAuLi5zdGF0ZS5rZXBsZXJHbC5mb28sXG4gKiAgICAgICAgICAgICB1aVN0YXRlOiB1aVN0YXRlVXBkYXRlcnMudG9nZ2xlU2lkZVBhbmVsVXBkYXRlcihcbiAqICAgICAgICAgICAgICAgdWlTdGF0ZSwge3BheWxvYWQ6IG51bGx9XG4gKiAgICAgICAgICAgICApXG4gKiAgICAgICAgICB9XG4gKiAgICAgICAgfVxuICogICAgICB9O1xuICogIH1cbiAqICByZXR1cm4gcmVkdWNlcnMoc3RhdGUsIGFjdGlvbik7XG4gKiB9O1xuICpcbiAqIGV4cG9ydCBkZWZhdWx0IGNvbXBvc2VkUmVkdWNlcjtcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbmNvbnN0IHVpU3RhdGVVcGRhdGVycyA9IG51bGw7XG4vKiBlc2xpbnQtZW5hYmxlIG5vLXVudXNlZC12YXJzICovXG5cbmNvbnN0IERFRkFVTFRfTUFQX0NPTlRST0xTX0ZFQVRVUkVTOiBNYXBDb250cm9sID0ge1xuICBzaG93OiB0cnVlLFxuICBhY3RpdmU6IGZhbHNlLFxuICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxuICAvLyBkZWZpbmVzIHdoaWNoIG1hcCBpbmRleCB1c2VycyBhcmUgaW50ZXJhY3Rpbmcgd2l0aCAodGhyb3VnaCBtYXAgY29udHJvbHMpXG4gIGFjdGl2ZU1hcEluZGV4OiAwXG59O1xuXG4vKipcbiAqIEEgbGlzdCBvZiBtYXAgY29udHJvbCB2aXNpYmlsaXR5IGFuZCB3aGV0aGVyIGlzIGl0IGFjdGl2ZS5cbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHZpc2libGVMYXllcnMgRGVmYXVsdDogYHtzaG93OiB0cnVlLCBhY3RpdmU6IGZhbHNlfWBcbiAqIEBwcm9wZXJ0eSBtYXBMZWdlbmQgRGVmYXVsdDogYHtzaG93OiB0cnVlLCBhY3RpdmU6IGZhbHNlfWBcbiAqIEBwcm9wZXJ0eSB0b2dnbGUzZCBEZWZhdWx0OiBge3Nob3c6IHRydWV9YFxuICogQHByb3BlcnR5IHNwbGl0TWFwIERlZmF1bHQ6IGB7c2hvdzogdHJ1ZX1gXG4gKiBAcHJvcGVydHkgbWFwRHJhdyBEZWZhdWx0OiBge3Nob3c6IHRydWUsIGFjdGl2ZTogZmFsc2V9YFxuICogQHByb3BlcnR5IG1hcExvY2FsZSBEZWZhdWx0OiBge3Nob3c6IGZhbHNlLCBhY3RpdmU6IGZhbHNlfWBcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUFQX0NPTlRST0xTOiBNYXBDb250cm9scyA9IChPYmplY3Qua2V5cyhNQVBfQ09OVFJPTFMpIGFzIEFycmF5PFxuICBrZXlvZiB0eXBlb2YgTUFQX0NPTlRST0xTXG4+KS5yZWR1Y2UoXG4gIChmaW5hbCwgY3VycmVudCkgPT4gKHtcbiAgICAuLi5maW5hbCxcbiAgICBbY3VycmVudF06IERFRkFVTFRfTUFQX0NPTlRST0xTX0ZFQVRVUkVTXG4gIH0pLFxuICB7fSBhcyBNYXBDb250cm9sc1xuKTtcblxuLyoqXG4gKiBEZWZhdWx0IGltYWdlIGV4cG9ydCBjb25maWdcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHJhdGlvIERlZmF1bHQ6IGAnU0NSRUVOJ2AsXG4gKiBAcHJvcGVydHkgcmVzb2x1dGlvbiBEZWZhdWx0OiBgJ09ORV9YJ2AsXG4gKiBAcHJvcGVydHkgbGVnZW5kIERlZmF1bHQ6IGBmYWxzZWAsXG4gKiBAcHJvcGVydHkgbWFwSCBEZWZhdWx0OiAwLFxuICogQHByb3BlcnR5IG1hcFcgRGVmYXVsdDogMCxcbiAqIEBwcm9wZXJ0eSBpbWFnZVNpemUgRGVmYXVsdDoge3pvb21PZmZzZXQ6IDAsIHNjYWxlOiAxLCBpbWFnZVc6IDAsIGltYWdlSDogMH0sXG4gKiBAcHJvcGVydHkgaW1hZ2VEYXRhVXJpIERlZmF1bHQ6IGAnJ2AsXG4gKiBAcHJvcGVydHkgZXhwb3J0aW5nIERlZmF1bHQ6IGBmYWxzZWBcbiAqIEBwcm9wZXJ0eSBlcnJvciBEZWZhdWx0OiBgZmFsc2VgXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VYUE9SVF9JTUFHRTogRXhwb3J0SW1hZ2UgPSB7XG4gIC8vIHVzZXIgb3B0aW9uc1xuICByYXRpbzogRVhQT1JUX0lNR19SQVRJT1MuU0NSRUVOLFxuICByZXNvbHV0aW9uOiBSRVNPTFVUSU9OUy5PTkVfWCxcbiAgbGVnZW5kOiBmYWxzZSxcbiAgbWFwSDogMCxcbiAgbWFwVzogMCxcbiAgaW1hZ2VTaXplOiB7XG4gICAgem9vbU9mZnNldDogMCxcbiAgICBzY2FsZTogMSxcbiAgICBpbWFnZVc6IDAsXG4gICAgaW1hZ2VIOiAwXG4gIH0sXG4gIC8vIHdoZW4gdGhpcyBpcyBzZXQgdG8gdHJ1ZSwgdGhlIG1vY2sgbWFwIHZpZXdwb3J0IHdpbGwgbW92ZSB0byB0aGUgY2VudGVyIG9mIGRhdGFcbiAgY2VudGVyOiBmYWxzZSxcbiAgLy8gZXhwb3J0aW5nIHN0YXRlXG4gIGltYWdlRGF0YVVyaTogJycsXG4gIC8vIGV4cG9ydGluZzogdXNlZCB0byBhdHRhY2ggcGxvdC1jb250YWluZXIgdG8gZG9tXG4gIGV4cG9ydGluZzogZmFsc2UsXG4gIC8vIHByb2Nlc3Npbmc6IHVzZWQgYXMgbG9hZGluZyBpbmRpY2F0b3Igd2hlbiBleHBvcnQgaW1hZ2UgaXMgYmVpbmcgcHJvZHVjZWRcbiAgcHJvY2Vzc2luZzogZmFsc2UsXG4gIGVycm9yOiBmYWxzZVxufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTE9BRF9GSUxFUyA9IHtcbiAgZmlsZUxvYWRpbmc6IGZhbHNlXG59O1xuXG4vKipcbiAqIERlZmF1bHQgaW5pdGlhbCBgZXhwb3J0RGF0YWAgc2V0dGluZ3NcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IHNlbGVjdGVkRGF0YXNldCBEZWZhdWx0OiBgJydgLFxuICogQHByb3BlcnR5IGRhdGFUeXBlIERlZmF1bHQ6IGAnY3N2J2AsXG4gKiBAcHJvcGVydHkgZmlsdGVyZWQgRGVmYXVsdDogYHRydWVgLFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9FWFBPUlRfREFUQTogRXhwb3J0RGF0YSA9IHtcbiAgc2VsZWN0ZWREYXRhc2V0OiAnJyxcbiAgZGF0YVR5cGU6IEVYUE9SVF9EQVRBX1RZUEUuQ1NWLFxuICBmaWx0ZXJlZDogdHJ1ZVxufTtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTk9USUZJQ0FUSU9OUyA9IFtdO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IGV4cG9ydE1hcGJveEFjY2Vzc1Rva2VuIC0gRGVmYXVsdDogbnVsbCwgdGhpcyBpcyB1c2VkIHdoZW4gd2UgcHJvdmlkZSBhIGRlZmF1bHQgbWFwYm94IHRva2VuIGZvciB1c2VycyB0byB0YWtlIGFkdmFudGFnZSBvZlxuICogQHByb3BlcnR5IHVzZXJNYXBib3hUb2tlbiAtIERlZmF1bHQ6ICcnLCBtYXBib3ggdG9rZW4gcHJvdmlkZWQgYnkgdXNlciB0aHJvdWdoIGlucHV0IGZpZWxkXG4gKiBAcHJvcGVydHkgbW9kZSAtIERlZmF1bHQ6ICdSRUFEJywgcmVhZCBvbmx5IG9yIGVkaXRhYmxlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VYUE9SVF9IVE1MOiBFeHBvcnRIdG1sID0ge1xuICBleHBvcnRNYXBib3hBY2Nlc3NUb2tlbjogbnVsbCxcbiAgdXNlck1hcGJveFRva2VuOiAnJyxcbiAgbW9kZTogRVhQT1JUX0hUTUxfTUFQX01PREVTLlJFQURcbn07XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkgaGFzRGF0YSAtIERlZmF1bHQ6ICd0cnVlJyxcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRVhQT1JUX0pTT046IEV4cG9ydEpzb24gPSB7XG4gIGhhc0RhdGE6IHRydWVcbn07XG5cbi8qKlxuICogRXhwb3J0IE1hcCBDb25maWdcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IEhUTUwgLSBEZWZhdWx0OiAnREVGQVVMVF9FWFBPUlRfSFRNTCcsXG4gKiBAcHJvcGVydHkgSlNPTiAtIERlZmF1bHQ6ICdERUZBVUxUX0VYUE9SVF9KU09OJyxcbiAqIEBwcm9wZXJ0eSBmb3JtYXQgLSBEZWZhdWx0OiAnSFRNTCcsXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VYUE9SVF9NQVA6IEV4cG9ydE1hcCA9IHtcbiAgW0VYUE9SVF9NQVBfRk9STUFUUy5IVE1MXTogREVGQVVMVF9FWFBPUlRfSFRNTCxcbiAgW0VYUE9SVF9NQVBfRk9STUFUUy5KU09OXTogREVGQVVMVF9FWFBPUlRfSlNPTixcbiAgZm9ybWF0OiBFWFBPUlRfTUFQX0ZPUk1BVFMuSFRNTFxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGluaXRpYWwgYHVpU3RhdGVgXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSByZWFkT25seSBEZWZhdWx0OiBgZmFsc2VgXG4gKiBAcHJvcGVydHkgYWN0aXZlU2lkZVBhbmVsIERlZmF1bHQ6IGAnbGF5ZXInYFxuICogQHByb3BlcnR5IGN1cnJlbnRNb2RhbCBEZWZhdWx0OiBgJ2FkZERhdGEnYFxuICogQHByb3BlcnR5IGRhdGFzZXRLZXlUb1JlbW92ZSBEZWZhdWx0OiBgbnVsbGBcbiAqIEBwcm9wZXJ0eSB2aXNpYmxlRHJvcGRvd24gRGVmYXVsdDogYG51bGxgXG4gKiBAcHJvcGVydHkgZXhwb3J0SW1hZ2UgRGVmYXVsdDogW2BERUZBVUxUX0VYUE9SVF9JTUFHRWBdKCNkZWZhdWx0X2V4cG9ydF9pbWFnZSlcbiAqIEBwcm9wZXJ0eSBleHBvcnREYXRhIERlZmF1bHQ6IFtgREVGQVVMVF9FWFBPUlRfREFUQWBdKCNkZWZhdWx0X2V4cG9ydF9kYXRhKVxuICogQHByb3BlcnR5IGV4cG9ydE1hcCBEZWZhdWx0OiBbYERFRkFVTFRfRVhQT1JUX01BUGBdKCNkZWZhdWx0X2V4cG9ydF9tYXApXG4gKiBAcHJvcGVydHkgbWFwQ29udHJvbHMgRGVmYXVsdDogW2BERUZBVUxUX01BUF9DT05UUk9MU2BdKCNkZWZhdWx0X21hcF9jb250cm9scylcbiAqIEBwcm9wZXJ0eSBub3RpZmljYXRpb25zIERlZmF1bHQ6IGBbXWBcbiAqIEBwcm9wZXJ0eSBub3RpZmljYXRpb25zIERlZmF1bHQ6IGBbXWBcbiAqIEBwcm9wZXJ0eSBsb2FkRmlsZXNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IElOSVRJQUxfVUlfU1RBVEU6IFVpU3RhdGUgPSB7XG4gIHJlYWRPbmx5OiBmYWxzZSxcbiAgYWN0aXZlU2lkZVBhbmVsOiBERUZBVUxUX0FDVElWRV9TSURFX1BBTkVMLFxuICBjdXJyZW50TW9kYWw6IERFRkFVTFRfTU9EQUwsXG4gIGRhdGFzZXRLZXlUb1JlbW92ZTogbnVsbCxcbiAgdmlzaWJsZURyb3Bkb3duOiBudWxsLFxuICAvLyBleHBvcnQgaW1hZ2UgbW9kYWwgdWlcbiAgZXhwb3J0SW1hZ2U6IERFRkFVTFRfRVhQT1JUX0lNQUdFLFxuICAvLyBleHBvcnQgZGF0YSBtb2RhbCB1aVxuICBleHBvcnREYXRhOiBERUZBVUxUX0VYUE9SVF9EQVRBLFxuICAvLyBodG1sIGV4cG9ydFxuICBleHBvcnRNYXA6IERFRkFVTFRfRVhQT1JUX01BUCxcbiAgLy8gbWFwIGNvbnRyb2wgcGFuZWxzXG4gIG1hcENvbnRyb2xzOiBERUZBVUxUX01BUF9DT05UUk9MUyxcbiAgLy8gdWkgbm90aWZpY2F0aW9uc1xuICBub3RpZmljYXRpb25zOiBERUZBVUxUX05PVElGSUNBVElPTlMsXG4gIC8vIGxvYWQgZmlsZXNcbiAgbG9hZEZpbGVzOiBERUZBVUxUX0xPQURfRklMRVMsXG4gIC8vIExvY2FsZSBvZiB0aGUgVUlcbiAgbG9jYWxlOiBMT0NBTEVfQ09ERVMuZW4sXG4gIGxheWVyUGFuZWxMaXN0VmlldzogJ2xpc3QnXG59O1xuXG4vKiBVcGRhdGVycyAqL1xuLyoqXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG5cbiAqL1xuZXhwb3J0IGNvbnN0IGluaXRVaVN0YXRlVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIGFjdGlvbjoge1xuICAgIHR5cGU/OiB0eXBlb2YgQWN0aW9uVHlwZXNbJ0lOSVQnXTtcbiAgICBwYXlsb2FkOiBLZXBsZXJHbEluaXRQYXlsb2FkO1xuICB9XG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICAuLi4oYWN0aW9uLnBheWxvYWQgfHwge30pLmluaXRpYWxVaVN0YXRlXG59KTtcblxuLyoqXG4gKiBUb2dnbGUgYWN0aXZlIHNpZGUgcGFuZWxcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBpZCBvZiBzaWRlIHBhbmVsIHRvIGJlIHNob3duLCBvbmUgb2YgYGxheWVyYCwgYGZpbHRlcmAsIGBpbnRlcmFjdGlvbmAsIGBtYXBgLiBjbG9zZSBzaWRlIHBhbmVsIGlmIGBudWxsYFxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVTaWRlUGFuZWxVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IGlkfTogVWlTdGF0ZUFjdGlvbnMuVG9nZ2xlU2lkZVBhbmVsVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiB7XG4gIHJldHVybiBpZCA9PT0gc3RhdGUuYWN0aXZlU2lkZVBhbmVsXG4gICAgPyBzdGF0ZVxuICAgIDoge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgYWN0aXZlU2lkZVBhbmVsOiBpZFxuICAgICAgfTtcbn07XG5cbi8qKlxuICogU2hvdyBhbmQgaGlkZSBtb2RhbCBkaWFsb2dcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbWFjdGlvbi5wYXlsb2FkIGlkIG9mIG1vZGFsIHRvIGJlIHNob3duLCBudWxsIHRvIGhpZGUgbW9kYWxzLiBPbmUgb2Y6XG4gKiAgLSBbYERBVEFfVEFCTEVfSURgXSguLi9jb25zdGFudHMvZGVmYXVsdC1zZXR0aW5ncy5tZCNkYXRhX3RhYmxlX2lkKVxuICogIC0gW2BERUxFVEVfREFUQV9JRGBdKC4uL2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzLm1kI2RlbGV0ZV9kYXRhX2lkKVxuICogIC0gW2BBRERfREFUQV9JRGBdKC4uL2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzLm1kI2FkZF9kYXRhX2lkKVxuICogIC0gW2BFWFBPUlRfSU1BR0VfSURgXSguLi9jb25zdGFudHMvZGVmYXVsdC1zZXR0aW5ncy5tZCNleHBvcnRfaW1hZ2VfaWQpXG4gKiAgLSBbYEVYUE9SVF9EQVRBX0lEYF0oLi4vY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MubWQjZXhwb3J0X2RhdGFfaWQpXG4gKiAgLSBbYEFERF9NQVBfU1RZTEVfSURgXSguLi9jb25zdGFudHMvZGVmYXVsdC1zZXR0aW5ncy5tZCNhZGRfbWFwX3N0eWxlX2lkKVxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVNb2RhbFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogaWR9OiBVaVN0YXRlQWN0aW9ucy5Ub2dnbGVNb2RhbFVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGN1cnJlbnRNb2RhbDogaWRcbn0pO1xuXG4vKipcbiAqIEhpZGUgYW5kIHNob3cgc2lkZSBwYW5lbCBoZWFkZXIgZHJvcGRvd24sIGFjdGl2YXRlZCBieSBjbGlja2luZyB0aGUgc2hhcmUgbGluayBvbiB0b3Agb2YgdGhlIHNpZGUgcGFuZWxcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNob3dFeHBvcnREcm9wZG93blVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogaWR9OiBVaVN0YXRlQWN0aW9ucy5TaG93RXhwb3J0RHJvcGRvd25VcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICB2aXNpYmxlRHJvcGRvd246IGlkXG59KTtcblxuLyoqXG4gKiBIaWRlIHNpZGUgcGFuZWwgaGVhZGVyIGRyb3Bkb3duLCBhY3RpdmF0ZWQgYnkgY2xpY2tpbmcgdGhlIHNoYXJlIGxpbmsgb24gdG9wIG9mIHRoZSBzaWRlIHBhbmVsXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBoaWRlRXhwb3J0RHJvcGRvd25VcGRhdGVyID0gKHN0YXRlOiBVaVN0YXRlKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgdmlzaWJsZURyb3Bkb3duOiBudWxsXG59KTtcblxuLyoqXG4gKiBUb2dnbGUgYWN0aXZlIG1hcCBjb250cm9sIHBhbmVsXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIG1hcCBjb250cm9sIHBhbmVsIGlkLCBvbmUgb2YgdGhlIGtleXMgb2Y6IFtgREVGQVVMVF9NQVBfQ09OVFJPTFNgXSgjZGVmYXVsdF9tYXBfY29udHJvbHMpXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZU1hcENvbnRyb2xVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IHtwYW5lbElkLCBpbmRleCA9IDB9fTogVWlTdGF0ZUFjdGlvbnMuVG9nZ2xlTWFwQ29udHJvbFVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIG1hcENvbnRyb2xzOiB7XG4gICAgLi4uc3RhdGUubWFwQ29udHJvbHMsXG4gICAgW3BhbmVsSWRdOiB7XG4gICAgICAuLi5zdGF0ZS5tYXBDb250cm9sc1twYW5lbElkXSxcbiAgICAgIC8vIHRoaXMgaGFuZGxlcyBzcGxpdCBtYXAgaW50ZXJhY3Rpb25cbiAgICAgIC8vIFRvZ2dsaW5nIGZyb20gd2l0aGluIHRoZSBzYW1lIG1hcCB3aWxsIHNpbXBseSB0b2dnbGUgdGhlIGFjdGl2ZSBwcm9wZXJ0eVxuICAgICAgLy8gVG9nZ2xpbmcgZnJvbSB3aXRoaW4gZGlmZmVyZW50IG1hcHMgd2Ugc2V0IHRoZSBhY3RpdmUgcHJvcGVydHkgdG8gdHJ1ZVxuICAgICAgYWN0aXZlOlxuICAgICAgICBpbmRleCA9PT0gc3RhdGUubWFwQ29udHJvbHNbcGFuZWxJZF0uYWN0aXZlTWFwSW5kZXhcbiAgICAgICAgICA/ICFzdGF0ZS5tYXBDb250cm9sc1twYW5lbElkXS5hY3RpdmVcbiAgICAgICAgICA6IHRydWUsXG4gICAgICBhY3RpdmVNYXBJbmRleDogaW5kZXhcbiAgICB9XG4gIH1cbn0pO1xuXG4vKipcbiAqIFRvZ2dsZSBtYXAgY29udHJvbCB2aXNpYmlsaXR5XG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIG1hcCBjb250cm9sIHBhbmVsIGlkLCBvbmUgb2YgdGhlIGtleXMgb2Y6IFtgREVGQVVMVF9NQVBfQ09OVFJPTFNgXSgjZGVmYXVsdF9tYXBfY29udHJvbHMpXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldE1hcENvbnRyb2xWaXNpYmlsaXR5VXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiB7cGFuZWxJZCwgc2hvd319OiBVaVN0YXRlQWN0aW9ucy5zZXRNYXBDb250cm9sVmlzaWJpbGl0eVVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4ge1xuICBpZiAoIXN0YXRlLm1hcENvbnRyb2xzPy5bcGFuZWxJZF0pIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIG1hcENvbnRyb2xzOiB7XG4gICAgICAuLi5zdGF0ZS5tYXBDb250cm9scyxcbiAgICAgIFtwYW5lbElkXToge1xuICAgICAgICAuLi5zdGF0ZS5tYXBDb250cm9sc1twYW5lbElkXSxcbiAgICAgICAgc2hvdzogQm9vbGVhbihzaG93KVxuICAgICAgfVxuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogVG9nZ2xlIGFjdGl2ZSBtYXAgY29udHJvbCBwYW5lbFxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIGRhdGFzZXQgaWRcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgb3BlbkRlbGV0ZU1vZGFsVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiBkYXRhc2V0S2V5VG9SZW1vdmV9OiBVaVN0YXRlQWN0aW9ucy5PcGVuRGVsZXRlTW9kYWxVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBjdXJyZW50TW9kYWw6IERFTEVURV9EQVRBX0lELFxuICBkYXRhc2V0S2V5VG9SZW1vdmVcbn0pO1xuXG4vKipcbiAqIFNldCBgZXhwb3J0SW1hZ2UubGVnZW5kYCB0byBgdHJ1ZWAgb3IgYGZhbHNlYFxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFeHBvcnRJbWFnZVNldHRpbmdVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IG5ld1NldHRpbmd9OiBVaVN0YXRlQWN0aW9ucy5TZXRFeHBvcnRJbWFnZVNldHRpbmdVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+IHtcbiAgY29uc3QgdXBkYXRlZCA9IHsuLi5zdGF0ZS5leHBvcnRJbWFnZSwgLi4ubmV3U2V0dGluZ307XG4gIGNvbnN0IGltYWdlU2l6ZSA9IGNhbGN1bGF0ZUV4cG9ydEltYWdlU2l6ZSh1cGRhdGVkKSB8fCBzdGF0ZS5leHBvcnRJbWFnZS5pbWFnZVNpemU7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBleHBvcnRJbWFnZToge1xuICAgICAgLi4udXBkYXRlZCxcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgIC8vIFRPRE86IGNhbGN1bGF0ZUV4cG9ydEltYWdlU2l6ZSBkb2VzIG5vdCByZXR1cm4gaW1hZ2VTaXplLnpvb21PZmZzZXQsXG4gICAgICAvLyBkbyB3ZSBuZWVkIHRha2UgdGhpcyB2YWx1ZSBmcm9tIGN1cnJlbnQgc3RhdGUsIG9yIHJldHVybiBkZWZhdWwgdmFsdWUgPSAwXG4gICAgICBpbWFnZVNpemVcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIFNldCBgZXhwb3J0SW1hZ2Uuc2V0RXhwb3J0SW1hZ2VEYXRhVXJpYCB0byBhIGltYWdlIGRhdGFVcmlcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBleHBvcnQgaW1hZ2UgZGF0YSB1cmlcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RXhwb3J0SW1hZ2VEYXRhVXJpVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiBkYXRhVXJpfTogVWlTdGF0ZUFjdGlvbnMuU2V0RXhwb3J0SW1hZ2VEYXRhVXJpVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZXhwb3J0SW1hZ2U6IHtcbiAgICAuLi5zdGF0ZS5leHBvcnRJbWFnZSxcbiAgICBwcm9jZXNzaW5nOiBmYWxzZSxcbiAgICBpbWFnZURhdGFVcmk6IGRhdGFVcmlcbiAgfVxufSk7XG5cbi8qKlxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RXhwb3J0SW1hZ2VFcnJvclVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogZXJyb3J9OiBVaVN0YXRlQWN0aW9ucy5TZXRFeHBvcnRJbWFnZUVycm9yVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZXhwb3J0SW1hZ2U6IHtcbiAgICAuLi5zdGF0ZS5leHBvcnRJbWFnZSxcbiAgICBwcm9jZXNzaW5nOiBmYWxzZSxcbiAgICBlcnJvclxuICB9XG59KTtcblxuLyoqXG4gKiBEZWxldGUgY2FjaGVkIGV4cG9ydCBpbWFnZVxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgY2xlYW51cEV4cG9ydEltYWdlVXBkYXRlciA9IChzdGF0ZTogVWlTdGF0ZSk6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGV4cG9ydEltYWdlOiB7XG4gICAgLi4uc3RhdGUuZXhwb3J0SW1hZ2UsXG4gICAgZXhwb3J0aW5nOiBmYWxzZSxcbiAgICBpbWFnZURhdGFVcmk6ICcnLFxuICAgIGVycm9yOiBmYWxzZSxcbiAgICBwcm9jZXNzaW5nOiBmYWxzZSxcbiAgICBjZW50ZXI6IGZhbHNlXG4gIH1cbn0pO1xuXG4vKipcbiAqIFN0YXJ0IGltYWdlIGV4cG9ydGluZyBmbG93XG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGVcbiAqIEBwYXJhbSBvcHRpb25zXG4gKiBAcmV0dXJucyB7VWlTdGF0ZX1cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHN0YXJ0RXhwb3J0aW5nSW1hZ2VVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IG9wdGlvbnMgPSB7fX06IHtwYXlsb2FkOiBQYXJ0aWFsPEV4cG9ydEltYWdlPn1cbik6IFVpU3RhdGUgPT4ge1xuICBjb25zdCBpbWFnZVNldHRpbmdzID0ge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgZXhwb3J0aW5nOiB0cnVlXG4gIH07XG5cbiAgcmV0dXJuIGNvbXBvc2VfKFtcbiAgICBjbGVhbnVwRXhwb3J0SW1hZ2VVcGRhdGVyLFxuICAgIGFwcGx5XyhzZXRFeHBvcnRJbWFnZVNldHRpbmdVcGRhdGVyLCBwYXlsb2FkXyhpbWFnZVNldHRpbmdzKSlcbiAgXSkoc3RhdGUpO1xufTtcblxuLyoqXG4gKiBTZXQgc2VsZWN0ZWQgZGF0YXNldCBmb3IgZXhwb3J0XG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgZGF0YXNldCBpZFxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFeHBvcnRTZWxlY3RlZERhdGFzZXRVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IGRhdGFzZXR9OiBVaVN0YXRlQWN0aW9ucy5TZXRFeHBvcnRTZWxlY3RlZERhdGFzZXRVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBleHBvcnREYXRhOiB7XG4gICAgLi4uc3RhdGUuZXhwb3J0RGF0YSxcbiAgICBzZWxlY3RlZERhdGFzZXQ6IGRhdGFzZXRcbiAgfVxufSk7XG5cbi8qKlxuICogU2V0IGRhdGEgZm9ybWF0IGZvciBleHBvcnRpbmcgZGF0YVxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIG9uZSBvZiBgJ3RleHQvY3N2J2BcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RXhwb3J0RGF0YVR5cGVVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IGRhdGFUeXBlfTogVWlTdGF0ZUFjdGlvbnMuU2V0RXhwb3J0RGF0YVR5cGVVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBleHBvcnREYXRhOiB7XG4gICAgLi4uc3RhdGUuZXhwb3J0RGF0YSxcbiAgICBkYXRhVHlwZVxuICB9XG59KTtcblxuLyoqXG4gKiBXaGV0aGVyIHRvIGV4cG9ydCBmaWx0ZXJlZCBkYXRhLCBgdHJ1ZWAgb3IgYGZhbHNlYFxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEV4cG9ydEZpbHRlcmVkVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiBmaWx0ZXJlZH06IFVpU3RhdGVBY3Rpb25zLlNldEV4cG9ydEZpbHRlcmVkVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZXhwb3J0RGF0YToge1xuICAgIC4uLnN0YXRlLmV4cG9ydERhdGEsXG4gICAgZmlsdGVyZWRcbiAgfVxufSk7XG5cbi8qKlxuICogV2hldGhlciB0byBpbmNsdWRpbmcgZGF0YSBpbiBtYXAgY29uZmlnLCB0b2dnbGUgYmV0d2VlbiBgdHJ1ZWAgb3IgYGZhbHNlYFxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFeHBvcnREYXRhVXBkYXRlciA9IChzdGF0ZTogVWlTdGF0ZSk6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGV4cG9ydE1hcDoge1xuICAgIC4uLnN0YXRlLmV4cG9ydE1hcCxcbiAgICBbRVhQT1JUX01BUF9GT1JNQVRTLkpTT05dOiB7XG4gICAgICAuLi5zdGF0ZS5leHBvcnRNYXBbRVhQT1JUX01BUF9GT1JNQVRTLkpTT05dLFxuICAgICAgaGFzRGF0YTogIXN0YXRlLmV4cG9ydE1hcFtFWFBPUlRfTUFQX0ZPUk1BVFMuSlNPTl0uaGFzRGF0YVxuICAgIH1cbiAgfVxufSk7XG5cbi8qKlxuICogd2hldGhlciB0byBleHBvcnQgYSBtYXBib3ggYWNjZXNzIHRvIEhUTUwgc2luZ2xlIHBhZ2VcbiAqIEBwYXJhbSBzdGF0ZSAtIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldFVzZXJNYXBib3hBY2Nlc3NUb2tlblVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogdXNlck1hcGJveFRva2VufTogVWlTdGF0ZUFjdGlvbnMuU2V0VXNlck1hcGJveEFjY2Vzc1Rva2VuVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZXhwb3J0TWFwOiB7XG4gICAgLi4uc3RhdGUuZXhwb3J0TWFwLFxuICAgIFtFWFBPUlRfTUFQX0ZPUk1BVFMuSFRNTF06IHtcbiAgICAgIC4uLnN0YXRlLmV4cG9ydE1hcFtFWFBPUlRfTUFQX0ZPUk1BVFMuSFRNTF0sXG4gICAgICB1c2VyTWFwYm94VG9rZW5cbiAgICB9XG4gIH1cbn0pO1xuXG4vKipcbiAqIFNldHMgdGhlIGV4cG9ydCBtYXAgZm9ybWF0XG4gKiBAcGFyYW0gc3RhdGUgLSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBmb3JtYXQgdG8gdXNlIHRvIGV4cG9ydCB0aGUgbWFwIGludG9cbiAqIEByZXR1cm4gbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFeHBvcnRNYXBGb3JtYXRVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IGZvcm1hdH06IFVpU3RhdGVBY3Rpb25zLlNldEV4cG9ydE1hcEZvcm1hdFVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGV4cG9ydE1hcDoge1xuICAgIC4uLnN0YXRlLmV4cG9ydE1hcCxcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgZm9ybWF0XG4gIH1cbn0pO1xuXG4vKipcbiAqIFNldCB0aGUgZXhwb3J0IGh0bWwgbWFwIG1vZGVcbiAqIEBwYXJhbSBzdGF0ZSAtIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIHRvIGJlIHNldCAoYXZhaWxhYmxlIG1vZGVzOiBFWFBPUlRfSFRNTF9NQVBfTU9ERVMpXG4gKiBAcmV0dXJuIG5leHRTdGF0ZVxuICovXG5leHBvcnQgY29uc3Qgc2V0RXhwb3J0TWFwSFRNTE1vZGVVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IG1vZGV9OiBVaVN0YXRlQWN0aW9ucy5TZXRFeHBvcnRIVE1MTWFwTW9kZVVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGV4cG9ydE1hcDoge1xuICAgIC4uLnN0YXRlLmV4cG9ydE1hcCxcbiAgICBbRVhQT1JUX01BUF9GT1JNQVRTLkhUTUxdOiB7XG4gICAgICAuLi5zdGF0ZS5leHBvcnRNYXBbRVhQT1JUX01BUF9GT1JNQVRTLkhUTUxdLFxuICAgICAgbW9kZVxuICAgIH1cbiAgfVxufSk7XG5cbi8qKlxuICogQWRkcyBhIG5ldyBub3RpZmljYXRpb24uXG4gKiBVcGRhdGVzIGEgbm90aWZpY2F0aW9uIGluIGNhc2Ugb2YgbWF0Y2hpbmcgaWRzLlxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIFBhcmFtcyBvZiBhIG5vdGlmaWNhdGlvblxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBhZGROb3RpZmljYXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWR9OiBVaVN0YXRlQWN0aW9ucy5BZGROb3RpZmljYXRpb25VcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+IHtcbiAgbGV0IG5vdGlmaWNhdGlvbnM7XG5cbiAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICBjb25zdCBwYXlsb2FkSWQgPSBwYXlsb2FkPy5pZDtcbiAgY29uc3Qgbm90aWZpY2F0aW9uVG9VcGRhdGUgPSBwYXlsb2FkSWQgPyBzdGF0ZS5ub3RpZmljYXRpb25zLmZpbmQobiA9PiBuLmlkID09PSBwYXlsb2FkSWQpIDogbnVsbDtcbiAgaWYgKG5vdGlmaWNhdGlvblRvVXBkYXRlKSB7XG4gICAgbm90aWZpY2F0aW9ucyA9IHN0YXRlLm5vdGlmaWNhdGlvbnMubWFwKG4gPT5cbiAgICAgIG4uaWQgPT09IHBheWxvYWRJZCA/IGNyZWF0ZU5vdGlmaWNhdGlvbihwYXlsb2FkKSA6IG5cbiAgICApO1xuICB9IGVsc2Uge1xuICAgIG5vdGlmaWNhdGlvbnMgPSBbLi4uKHN0YXRlLm5vdGlmaWNhdGlvbnMgfHwgW10pLCBjcmVhdGVOb3RpZmljYXRpb24ocGF5bG9hZCldO1xuICB9XG5cbiAgcmV0dXJuIHsuLi5zdGF0ZSwgbm90aWZpY2F0aW9uc307XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhIG5vdGlmaWNhdGlvblxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIGlkIG9mIHRoZSBub3RpZmljYXRpb24gdG8gYmUgcmVtb3ZlZFxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVOb3RpZmljYXRpb25VcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IGlkfTogVWlTdGF0ZUFjdGlvbnMuUmVtb3ZlTm90aWZpY2F0aW9uVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbm90aWZpY2F0aW9uczogc3RhdGUubm90aWZpY2F0aW9ucy5maWx0ZXIobiA9PiBuLmlkICE9PSBpZClcbn0pO1xuXG4vKipcbiAqIEZpcmVkIHdoZW4gZmlsZSBsb2FkaW5nIGJlZ2luXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc1VwZGF0ZXIgPSAoc3RhdGU6IFVpU3RhdGUpOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBsb2FkRmlsZXM6IHtcbiAgICAuLi5zdGF0ZS5sb2FkRmlsZXMsXG4gICAgZmlsZUxvYWRpbmc6IHRydWVcbiAgfVxufSk7XG5cbi8qKlxuICogSGFuZGxlcyBsb2FkaW5nIGZpbGUgc3VjY2VzcyBhbmQgc2V0IGZpbGVMb2FkaW5nIHByb3BlcnR5IHRvIGZhbHNlXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc1N1Y2Nlc3NVcGRhdGVyID0gKHN0YXRlOiBVaVN0YXRlKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbG9hZEZpbGVzOiB7XG4gICAgLi4uc3RhdGUubG9hZEZpbGVzLFxuICAgIGZpbGVMb2FkaW5nOiBmYWxzZVxuICB9XG59KTtcblxuLyoqXG4gKiBIYW5kbGVzIGxvYWQgZmlsZSBlcnJvciBhbmQgc2V0IGZpbGVMb2FkaW5nIHByb3BlcnR5IHRvIGZhbHNlXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGVcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24uZXJyb3JcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgbG9hZEZpbGVzRXJyVXBkYXRlciA9IChzdGF0ZTogVWlTdGF0ZSwge2Vycm9yfTogTG9hZEZpbGVzRXJyVXBkYXRlckFjdGlvbik6IFVpU3RhdGUgPT5cbiAgYWRkTm90aWZpY2F0aW9uVXBkYXRlcihcbiAgICB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxvYWRGaWxlczoge1xuICAgICAgICAuLi5zdGF0ZS5sb2FkRmlsZXMsXG4gICAgICAgIGZpbGVMb2FkaW5nOiBmYWxzZVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgcGF5bG9hZDogZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICBtZXNzYWdlOiAoZXJyb3IgfHwge30pLm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byB1cGxvYWQgZmlsZXMnLFxuICAgICAgICB0b3BpYzogREVGQVVMVF9OT1RJRklDQVRJT05fVE9QSUNTLmdsb2JhbFxuICAgICAgfSlcbiAgICB9XG4gICk7XG5cbi8qKlxuICogSGFuZGxlcyB0b2dnbGUgbWFwIHNwbGl0IGFuZCByZXNldCBhbGwgbWFwIGNvbnRyb2wgaW5kZXggdG8gMFxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZVNwbGl0TWFwVXBkYXRlciA9IChzdGF0ZTogVWlTdGF0ZSk6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIG1hcENvbnRyb2xzOiBPYmplY3QuZW50cmllcyhzdGF0ZS5tYXBDb250cm9scykucmVkdWNlKFxuICAgIChhY2MsIGVudHJ5KSA9PiAoe1xuICAgICAgLi4uYWNjLFxuICAgICAgW2VudHJ5WzBdXToge1xuICAgICAgICAuLi5lbnRyeVsxXSxcbiAgICAgICAgYWN0aXZlTWFwSW5kZXg6IDBcbiAgICAgIH1cbiAgICB9KSxcbiAgICB7fSBhcyBNYXBDb250cm9sc1xuICApXG59KTtcblxuLyoqXG4gKiBUb2dnbGUgbW9kYWwgZGF0YVxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNob3dEYXRhc2V0VGFibGVVcGRhdGVyID0gKHN0YXRlOiBVaVN0YXRlKTogVWlTdGF0ZSA9PlxuICB0b2dnbGVNb2RhbFVwZGF0ZXIoc3RhdGUsIHtwYXlsb2FkOiBEQVRBX1RBQkxFX0lEfSk7XG5cbi8qKlxuICogU2V0IHRoZSBsb2NhbGUgb2YgdGhlIFVJXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWRcbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZC5sb2NhbGUgbG9jYWxlXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldExvY2FsZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDoge2xvY2FsZX19OiBVaVN0YXRlQWN0aW9ucy5TZXRMb2NhbGVVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBsb2NhbGVcbn0pO1xuXG4vKipcbiAqIFRvZ2dsZSBsYXllciBwYW5lbCBsaXN0IHZpZXdcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBsYXllciBwYW5lbCBsaXN0VmlldyB2YWx1ZS4gQ2FuIGJlICdsaXN0JyBvciAnc29ydEJ5RGF0YXNldCdcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTGF5ZXJQYW5lbExpc3RWaWV3VXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiBsaXN0Vmlld306IFVpU3RhdGVBY3Rpb25zLlRvZ2dsZUxheWVyUGFuZWxMaXN0Vmlld0FjdGlvblxuKTogVWlTdGF0ZSA9PiB7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgcmV0dXJuIGxpc3RWaWV3ID09PSBzdGF0ZS5sYXllclBhbmVsTGlzdFZpZXdcbiAgICA/IHN0YXRlXG4gICAgOiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBsYXllclBhbmVsTGlzdFZpZXc6IGxpc3RWaWV3XG4gICAgICB9O1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBb0JBLElBQUFBLGdCQUFBLEdBQUFDLE9BQUE7QUFZQSxJQUFBQyxRQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxtQkFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsWUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksZ0JBQUEsR0FBQUosT0FBQTtBQUE4RCxTQUFBSyxRQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLElBQUEsQ0FBQUosQ0FBQSxPQUFBRyxNQUFBLENBQUFFLHFCQUFBLFFBQUFDLENBQUEsR0FBQUgsTUFBQSxDQUFBRSxxQkFBQSxDQUFBTCxDQUFBLEdBQUFDLENBQUEsS0FBQUssQ0FBQSxHQUFBQSxDQUFBLENBQUFDLE1BQUEsV0FBQU4sQ0FBQSxXQUFBRSxNQUFBLENBQUFLLHdCQUFBLENBQUFSLENBQUEsRUFBQUMsQ0FBQSxFQUFBUSxVQUFBLE9BQUFQLENBQUEsQ0FBQVEsSUFBQSxDQUFBQyxLQUFBLENBQUFULENBQUEsRUFBQUksQ0FBQSxZQUFBSixDQUFBO0FBQUEsU0FBQVUsY0FBQVosQ0FBQSxhQUFBQyxDQUFBLE1BQUFBLENBQUEsR0FBQVksU0FBQSxDQUFBQyxNQUFBLEVBQUFiLENBQUEsVUFBQUMsQ0FBQSxXQUFBVyxTQUFBLENBQUFaLENBQUEsSUFBQVksU0FB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
|