@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
|
@@ -4,7 +4,14 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.visStateSchemaV1 = exports.visStateSchemaV0 = exports.visStateSchema = exports.propertiesV1 = exports.propertiesV0 = exports.layerPropsV1 = exports.layerPropsV0 = exports.filterPropsV1 = exports.filterPropsV0 = exports.dimensionPropsV0 = exports
|
|
7
|
+
exports.visStateSchemaV1 = exports.visStateSchemaV0 = exports.visStateSchema = exports.propertiesV1 = exports.propertiesV0 = exports.layerPropsV1 = exports.layerPropsV0 = exports.filterPropsV1 = exports.filterPropsV0 = exports.dimensionPropsV0 = exports["default"] = exports.SplitMapsSchema = exports.LayerSchemaV0 = exports.InteractionSchemaV1 = exports.FilterSchemaV0 = exports.DimensionFieldSchema = void 0;
|
|
8
|
+
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
9
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
10
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
12
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
13
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
14
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
8
15
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
16
|
var _pick = _interopRequireDefault(require("lodash/pick"));
|
|
10
17
|
var _versions = require("./versions");
|
|
@@ -13,7 +20,10 @@ var _layerFactory = require("../layers/layer-factory");
|
|
|
13
20
|
var _schema = _interopRequireDefault(require("./schema"));
|
|
14
21
|
var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep"));
|
|
15
22
|
var _dataUtils = require("../utils/data-utils");
|
|
16
|
-
|
|
23
|
+
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; }
|
|
24
|
+
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; }
|
|
25
|
+
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
|
|
26
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } // Copyright (c) 2022 Uber Technologies, Inc.
|
|
17
27
|
//
|
|
18
28
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
19
29
|
// of this software and associated documentation files (the "Software"), to deal
|
|
@@ -32,12 +42,11 @@ var _dataUtils = require("../utils/data-utils");
|
|
|
32
42
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
33
43
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
34
44
|
// THE SOFTWARE.
|
|
35
|
-
|
|
36
45
|
/**
|
|
37
46
|
* V0 Schema
|
|
38
47
|
*/
|
|
39
48
|
|
|
40
|
-
|
|
49
|
+
var dimensionPropsV0 = exports.dimensionPropsV0 = ['name', 'type'];
|
|
41
50
|
// in v0 geojson there is only sizeField
|
|
42
51
|
|
|
43
52
|
// in v1 geojson
|
|
@@ -46,8 +55,8 @@ const dimensionPropsV0 = exports.dimensionPropsV0 = ['name', 'type'];
|
|
|
46
55
|
// radius based on -> radiusField
|
|
47
56
|
// here we make our wiredst guess on which channel sizeField belongs to
|
|
48
57
|
function geojsonSizeFieldV0ToV1(config) {
|
|
49
|
-
|
|
50
|
-
|
|
58
|
+
var defaultRaiuds = 10;
|
|
59
|
+
var defaultRadiusRange = [0, 50];
|
|
51
60
|
|
|
52
61
|
// if extruded, sizeField is most likely used for height
|
|
53
62
|
if (config.visConfig.extruded) {
|
|
@@ -61,172 +70,221 @@ function geojsonSizeFieldV0ToV1(config) {
|
|
|
61
70
|
|
|
62
71
|
// if radius changed, or radius Range Changed, sizeField is most likely used for radius
|
|
63
72
|
// this is the most unreliable guess, that's why we put it in the end
|
|
64
|
-
if (config.visConfig.radius !== defaultRaiuds || config.visConfig.radiusRange.some((d, i)
|
|
73
|
+
if (config.visConfig.radius !== defaultRaiuds || config.visConfig.radiusRange.some(function (d, i) {
|
|
74
|
+
return d !== defaultRadiusRange[i];
|
|
75
|
+
})) {
|
|
65
76
|
return 'radiusField';
|
|
66
77
|
}
|
|
67
78
|
return 'sizeField';
|
|
68
79
|
}
|
|
69
80
|
|
|
70
81
|
// convert v0 to v1 layer config
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
(0,
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
// fold into visualChannels to be load by VisualChannelSchemaV1
|
|
89
|
-
return {
|
|
90
|
-
visualChannels: {
|
|
91
|
-
...(accumulated.visualChannels || {}),
|
|
92
|
-
[fieldName]: field
|
|
93
|
-
}
|
|
94
|
-
};
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
class DimensionScaleSchemaV0 extends _schema.default {
|
|
98
|
-
constructor() {
|
|
99
|
-
super(...arguments);
|
|
100
|
-
(0, _defineProperty2.default)(this, "version", _versions.VERSIONS.v0);
|
|
101
|
-
}
|
|
102
|
-
save(scale) {
|
|
103
|
-
return {
|
|
104
|
-
[this.key]: scale
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
load(scale, parents, accumulated) {
|
|
108
|
-
const [config] = parents.slice(-1);
|
|
109
|
-
// fold into visualChannels to be load by VisualChannelSchemaV1
|
|
110
|
-
if (this.key === 'sizeScale' && config.type === 'geojson') {
|
|
111
|
-
// sizeScale now split into radiusScale, heightScale
|
|
112
|
-
// no user customization, just use default
|
|
113
|
-
return {};
|
|
82
|
+
var DimensionFieldSchemaV0 = /*#__PURE__*/function (_Schema) {
|
|
83
|
+
function DimensionFieldSchemaV0() {
|
|
84
|
+
var _this;
|
|
85
|
+
(0, _classCallCheck2["default"])(this, DimensionFieldSchemaV0);
|
|
86
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
87
|
+
args[_key] = arguments[_key];
|
|
88
|
+
}
|
|
89
|
+
_this = _callSuper(this, DimensionFieldSchemaV0, [].concat(args));
|
|
90
|
+
(0, _defineProperty2["default"])(_this, "version", _versions.VERSIONS.v0);
|
|
91
|
+
return _this;
|
|
92
|
+
}
|
|
93
|
+
(0, _inherits2["default"])(DimensionFieldSchemaV0, _Schema);
|
|
94
|
+
return (0, _createClass2["default"])(DimensionFieldSchemaV0, [{
|
|
95
|
+
key: "save",
|
|
96
|
+
value: function save(field) {
|
|
97
|
+
// should not be called anymore
|
|
98
|
+
return (0, _defineProperty2["default"])({}, this.key, field !== null ? this.savePropertiesOrApplySchema(field)[this.key] : null);
|
|
114
99
|
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
100
|
+
}, {
|
|
101
|
+
key: "load",
|
|
102
|
+
value: function load(field, parents, accumulated) {
|
|
103
|
+
var _parents$slice = parents.slice(-1),
|
|
104
|
+
_parents$slice2 = (0, _slicedToArray2["default"])(_parents$slice, 1),
|
|
105
|
+
config = _parents$slice2[0];
|
|
106
|
+
var fieldName = this.key;
|
|
107
|
+
if (config.type === 'geojson' && this.key === 'sizeField' && field) {
|
|
108
|
+
fieldName = geojsonSizeFieldV0ToV1(config);
|
|
119
109
|
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
110
|
+
// fold into visualChannels to be load by VisualChannelSchemaV1
|
|
111
|
+
return {
|
|
112
|
+
visualChannels: _objectSpread(_objectSpread({}, accumulated.visualChannels || {}), {}, (0, _defineProperty2["default"])({}, fieldName, field))
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
}]);
|
|
116
|
+
}(_schema["default"]);
|
|
117
|
+
var DimensionScaleSchemaV0 = /*#__PURE__*/function (_Schema2) {
|
|
118
|
+
function DimensionScaleSchemaV0() {
|
|
119
|
+
var _this2;
|
|
120
|
+
(0, _classCallCheck2["default"])(this, DimensionScaleSchemaV0);
|
|
121
|
+
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
122
|
+
args[_key2] = arguments[_key2];
|
|
123
|
+
}
|
|
124
|
+
_this2 = _callSuper(this, DimensionScaleSchemaV0, [].concat(args));
|
|
125
|
+
(0, _defineProperty2["default"])(_this2, "version", _versions.VERSIONS.v0);
|
|
126
|
+
return _this2;
|
|
127
|
+
}
|
|
128
|
+
(0, _inherits2["default"])(DimensionScaleSchemaV0, _Schema2);
|
|
129
|
+
return (0, _createClass2["default"])(DimensionScaleSchemaV0, [{
|
|
130
|
+
key: "save",
|
|
131
|
+
value: function save(scale) {
|
|
132
|
+
return (0, _defineProperty2["default"])({}, this.key, scale);
|
|
133
|
+
}
|
|
134
|
+
}, {
|
|
135
|
+
key: "load",
|
|
136
|
+
value: function load(scale, parents, accumulated) {
|
|
137
|
+
var _parents$slice3 = parents.slice(-1),
|
|
138
|
+
_parents$slice4 = (0, _slicedToArray2["default"])(_parents$slice3, 1),
|
|
139
|
+
config = _parents$slice4[0];
|
|
140
|
+
// fold into visualChannels to be load by VisualChannelSchemaV1
|
|
141
|
+
if (this.key === 'sizeScale' && config.type === 'geojson') {
|
|
142
|
+
// sizeScale now split into radiusScale, heightScale
|
|
143
|
+
// no user customization, just use default
|
|
144
|
+
return {};
|
|
136
145
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
|
|
146
|
+
return {
|
|
147
|
+
visualChannels: _objectSpread(_objectSpread({}, accumulated.visualChannels || {}), {}, (0, _defineProperty2["default"])({}, this.key, scale))
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
}]);
|
|
151
|
+
}(_schema["default"]); // used to convert v0 to v1 layer config
|
|
152
|
+
var LayerConfigSchemaV0 = /*#__PURE__*/function (_Schema3) {
|
|
153
|
+
function LayerConfigSchemaV0() {
|
|
154
|
+
var _this3;
|
|
155
|
+
(0, _classCallCheck2["default"])(this, LayerConfigSchemaV0);
|
|
156
|
+
for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
|
|
157
|
+
args[_key3] = arguments[_key3];
|
|
158
|
+
}
|
|
159
|
+
_this3 = _callSuper(this, LayerConfigSchemaV0, [].concat(args));
|
|
160
|
+
(0, _defineProperty2["default"])(_this3, "version", _versions.VERSIONS.v0);
|
|
161
|
+
return _this3;
|
|
162
|
+
}
|
|
163
|
+
(0, _inherits2["default"])(LayerConfigSchemaV0, _Schema3);
|
|
164
|
+
return (0, _createClass2["default"])(LayerConfigSchemaV0, [{
|
|
165
|
+
key: "load",
|
|
166
|
+
value: function load(saved, parents, accumulated) {
|
|
167
|
+
// fold v0 layer property into config.key
|
|
168
|
+
return {
|
|
169
|
+
config: _objectSpread(_objectSpread({}, accumulated.config || {}), {}, (0, _defineProperty2["default"])({}, this.key, saved))
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
}]);
|
|
173
|
+
}(_schema["default"]); // used to convert v0 to v1 layer columns
|
|
142
174
|
// only return column value for each column
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
(0,
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
175
|
+
var LayerColumnsSchemaV0 = /*#__PURE__*/function (_Schema4) {
|
|
176
|
+
function LayerColumnsSchemaV0() {
|
|
177
|
+
var _this4;
|
|
178
|
+
(0, _classCallCheck2["default"])(this, LayerColumnsSchemaV0);
|
|
179
|
+
for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
|
|
180
|
+
args[_key4] = arguments[_key4];
|
|
181
|
+
}
|
|
182
|
+
_this4 = _callSuper(this, LayerColumnsSchemaV0, [].concat(args));
|
|
183
|
+
(0, _defineProperty2["default"])(_this4, "version", _versions.VERSIONS.v0);
|
|
184
|
+
return _this4;
|
|
185
|
+
}
|
|
186
|
+
(0, _inherits2["default"])(LayerColumnsSchemaV0, _Schema4);
|
|
187
|
+
return (0, _createClass2["default"])(LayerColumnsSchemaV0, [{
|
|
188
|
+
key: "load",
|
|
189
|
+
value: function load(saved, parents, accumulated) {
|
|
190
|
+
// fold v0 layer property into config.key, flatten columns
|
|
191
|
+
return {
|
|
192
|
+
config: _objectSpread(_objectSpread({}, accumulated.config || {}), {}, {
|
|
193
|
+
columns: Object.keys(saved).reduce(function (accu, key) {
|
|
194
|
+
return _objectSpread(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])({}, key, saved[key].value));
|
|
195
|
+
}, {})
|
|
196
|
+
})
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
}]);
|
|
200
|
+
}(_schema["default"]); // used to convert v0 to v1 layer config.visConfig
|
|
201
|
+
var LayerConfigToVisConfigSchemaV0 = /*#__PURE__*/function (_Schema5) {
|
|
202
|
+
function LayerConfigToVisConfigSchemaV0() {
|
|
203
|
+
var _this5;
|
|
204
|
+
(0, _classCallCheck2["default"])(this, LayerConfigToVisConfigSchemaV0);
|
|
205
|
+
for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
|
|
206
|
+
args[_key5] = arguments[_key5];
|
|
207
|
+
}
|
|
208
|
+
_this5 = _callSuper(this, LayerConfigToVisConfigSchemaV0, [].concat(args));
|
|
209
|
+
(0, _defineProperty2["default"])(_this5, "version", _versions.VERSIONS.v0);
|
|
210
|
+
return _this5;
|
|
211
|
+
}
|
|
212
|
+
(0, _inherits2["default"])(LayerConfigToVisConfigSchemaV0, _Schema5);
|
|
213
|
+
return (0, _createClass2["default"])(LayerConfigToVisConfigSchemaV0, [{
|
|
214
|
+
key: "load",
|
|
215
|
+
value: function load(saved, parents, accumulated) {
|
|
216
|
+
// fold v0 layer property into config.visConfig
|
|
217
|
+
var accumulatedConfig = accumulated.config || {};
|
|
218
|
+
return {
|
|
219
|
+
config: _objectSpread(_objectSpread({}, accumulatedConfig), {}, {
|
|
220
|
+
visConfig: _objectSpread(_objectSpread({}, accumulatedConfig.visConfig || {}), {}, (0, _defineProperty2["default"])({}, this.key, saved))
|
|
221
|
+
})
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
}]);
|
|
225
|
+
}(_schema["default"]);
|
|
226
|
+
var LayerVisConfigSchemaV0 = /*#__PURE__*/function (_Schema6) {
|
|
227
|
+
function LayerVisConfigSchemaV0() {
|
|
228
|
+
var _this6;
|
|
229
|
+
(0, _classCallCheck2["default"])(this, LayerVisConfigSchemaV0);
|
|
230
|
+
for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
|
|
231
|
+
args[_key6] = arguments[_key6];
|
|
232
|
+
}
|
|
233
|
+
_this6 = _callSuper(this, LayerVisConfigSchemaV0, [].concat(args));
|
|
234
|
+
(0, _defineProperty2["default"])(_this6, "version", _versions.VERSIONS.v0);
|
|
235
|
+
(0, _defineProperty2["default"])(_this6, "key", 'visConfig');
|
|
236
|
+
return _this6;
|
|
237
|
+
}
|
|
238
|
+
(0, _inherits2["default"])(LayerVisConfigSchemaV0, _Schema6);
|
|
239
|
+
return (0, _createClass2["default"])(LayerVisConfigSchemaV0, [{
|
|
240
|
+
key: "load",
|
|
241
|
+
value: function load(visConfig, parents, accumulator) {
|
|
242
|
+
var _parents$slice5 = parents.slice(-1),
|
|
243
|
+
_parents$slice6 = (0, _slicedToArray2["default"])(_parents$slice5, 1),
|
|
244
|
+
config = _parents$slice6[0];
|
|
245
|
+
var rename = {
|
|
246
|
+
geojson: {
|
|
247
|
+
extruded: 'enable3d',
|
|
248
|
+
elevationRange: 'heightRange'
|
|
177
249
|
}
|
|
250
|
+
};
|
|
251
|
+
if (config.type in rename) {
|
|
252
|
+
var propToRename = rename[config.type];
|
|
253
|
+
return {
|
|
254
|
+
config: _objectSpread(_objectSpread({}, accumulator.config || {}), {}, {
|
|
255
|
+
visConfig: Object.keys(visConfig).reduce(function (accu, key) {
|
|
256
|
+
return _objectSpread(_objectSpread({}, accu), propToRename[key] ? (0, _defineProperty2["default"])({}, propToRename[key], visConfig[key]) : (0, _defineProperty2["default"])({}, key, visConfig[key]));
|
|
257
|
+
}, {})
|
|
258
|
+
})
|
|
259
|
+
};
|
|
178
260
|
}
|
|
179
|
-
};
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
class LayerVisConfigSchemaV0 extends _schema.default {
|
|
183
|
-
constructor() {
|
|
184
|
-
super(...arguments);
|
|
185
|
-
(0, _defineProperty2.default)(this, "version", _versions.VERSIONS.v0);
|
|
186
|
-
(0, _defineProperty2.default)(this, "key", 'visConfig');
|
|
187
|
-
}
|
|
188
|
-
load(visConfig, parents, accumulator) {
|
|
189
|
-
const [config] = parents.slice(-1);
|
|
190
|
-
const rename = {
|
|
191
|
-
geojson: {
|
|
192
|
-
extruded: 'enable3d',
|
|
193
|
-
elevationRange: 'heightRange'
|
|
194
|
-
}
|
|
195
|
-
};
|
|
196
|
-
if (config.type in rename) {
|
|
197
|
-
const propToRename = rename[config.type];
|
|
198
261
|
return {
|
|
199
|
-
config: {
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
...accu,
|
|
203
|
-
...(propToRename[key] ? {
|
|
204
|
-
[propToRename[key]]: visConfig[key]
|
|
205
|
-
} : {
|
|
206
|
-
[key]: visConfig[key]
|
|
207
|
-
})
|
|
208
|
-
}), {})
|
|
209
|
-
}
|
|
262
|
+
config: _objectSpread(_objectSpread({}, accumulator.config || {}), {}, {
|
|
263
|
+
visConfig: visConfig
|
|
264
|
+
})
|
|
210
265
|
};
|
|
211
266
|
}
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
267
|
+
}]);
|
|
268
|
+
}(_schema["default"]);
|
|
269
|
+
var LayerConfigSchemaDeleteV0 = /*#__PURE__*/function (_Schema7) {
|
|
270
|
+
function LayerConfigSchemaDeleteV0() {
|
|
271
|
+
var _this7;
|
|
272
|
+
(0, _classCallCheck2["default"])(this, LayerConfigSchemaDeleteV0);
|
|
273
|
+
for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {
|
|
274
|
+
args[_key7] = arguments[_key7];
|
|
275
|
+
}
|
|
276
|
+
_this7 = _callSuper(this, LayerConfigSchemaDeleteV0, [].concat(args));
|
|
277
|
+
(0, _defineProperty2["default"])(_this7, "version", _versions.VERSIONS.v0);
|
|
278
|
+
return _this7;
|
|
279
|
+
}
|
|
280
|
+
(0, _inherits2["default"])(LayerConfigSchemaDeleteV0, _Schema7);
|
|
281
|
+
return (0, _createClass2["default"])(LayerConfigSchemaDeleteV0, [{
|
|
282
|
+
key: "load",
|
|
283
|
+
value: function load(value) {
|
|
284
|
+
return {};
|
|
285
|
+
}
|
|
286
|
+
}]);
|
|
287
|
+
}(_schema["default"]);
|
|
230
288
|
/**
|
|
231
289
|
* V0 -> V1 Changes
|
|
232
290
|
* - layer is now a class
|
|
@@ -237,8 +295,7 @@ class LayerConfigSchemaDeleteV0 extends _schema.default {
|
|
|
237
295
|
* - enable3d, colorAggregation and sizeAggregation are moved into visConfig
|
|
238
296
|
* - GeojsonLayer - added height, radius specific properties
|
|
239
297
|
*/
|
|
240
|
-
|
|
241
|
-
const layerPropsV0 = exports.layerPropsV0 = {
|
|
298
|
+
var layerPropsV0 = exports.layerPropsV0 = {
|
|
242
299
|
id: null,
|
|
243
300
|
type: null,
|
|
244
301
|
// move into layer.config
|
|
@@ -299,44 +356,62 @@ const layerPropsV0 = exports.layerPropsV0 = {
|
|
|
299
356
|
/**
|
|
300
357
|
* V1 Schema
|
|
301
358
|
*/
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
return
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
359
|
+
var ColumnSchemaV1 = /*#__PURE__*/function (_Schema8) {
|
|
360
|
+
function ColumnSchemaV1() {
|
|
361
|
+
(0, _classCallCheck2["default"])(this, ColumnSchemaV1);
|
|
362
|
+
return _callSuper(this, ColumnSchemaV1, arguments);
|
|
363
|
+
}
|
|
364
|
+
(0, _inherits2["default"])(ColumnSchemaV1, _Schema8);
|
|
365
|
+
return (0, _createClass2["default"])(ColumnSchemaV1, [{
|
|
366
|
+
key: "save",
|
|
367
|
+
value: function save(columns, state) {
|
|
368
|
+
// starting from v1, only save column value
|
|
369
|
+
// fieldIdx will be calculated during merge
|
|
370
|
+
return (0, _defineProperty2["default"])({}, this.key, Object.keys(columns).reduce(function (accu, ckey) {
|
|
371
|
+
return _objectSpread(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])({}, ckey, columns[ckey].value));
|
|
372
|
+
}, {}));
|
|
373
|
+
}
|
|
374
|
+
}, {
|
|
375
|
+
key: "load",
|
|
376
|
+
value: function load(columns) {
|
|
377
|
+
return {
|
|
378
|
+
columns: columns
|
|
379
|
+
};
|
|
380
|
+
}
|
|
381
|
+
}]);
|
|
382
|
+
}(_schema["default"]);
|
|
383
|
+
var TextLabelSchemaV1 = /*#__PURE__*/function (_Schema9) {
|
|
384
|
+
function TextLabelSchemaV1() {
|
|
385
|
+
(0, _classCallCheck2["default"])(this, TextLabelSchemaV1);
|
|
386
|
+
return _callSuper(this, TextLabelSchemaV1, arguments);
|
|
387
|
+
}
|
|
388
|
+
(0, _inherits2["default"])(TextLabelSchemaV1, _Schema9);
|
|
389
|
+
return (0, _createClass2["default"])(TextLabelSchemaV1, [{
|
|
390
|
+
key: "save",
|
|
391
|
+
value: function save(textLabel) {
|
|
392
|
+
return (0, _defineProperty2["default"])({}, this.key, textLabel.map(function (tl) {
|
|
393
|
+
return _objectSpread(_objectSpread({}, tl), {}, {
|
|
394
|
+
field: tl.field ? (0, _pick["default"])(tl.field, ['name', 'type']) : null
|
|
395
|
+
});
|
|
396
|
+
}));
|
|
397
|
+
}
|
|
398
|
+
}, {
|
|
399
|
+
key: "load",
|
|
400
|
+
value: function load(textLabel) {
|
|
401
|
+
return {
|
|
402
|
+
textLabel: Array.isArray(textLabel) ? textLabel : [textLabel]
|
|
403
|
+
};
|
|
404
|
+
}
|
|
405
|
+
}]);
|
|
406
|
+
}(_schema["default"]);
|
|
407
|
+
var visualChannelModificationV1 = {
|
|
408
|
+
geojson: function geojson(vc, parents, accumulator) {
|
|
409
|
+
var _parents$slice7 = parents.slice(-1),
|
|
410
|
+
_parents$slice8 = (0, _slicedToArray2["default"])(_parents$slice7, 1),
|
|
411
|
+
layer = _parents$slice8[0];
|
|
412
|
+
var isOld = !vc.hasOwnProperty('strokeColorField');
|
|
338
413
|
// make our best guess if this geojson layer contains point
|
|
339
|
-
|
|
414
|
+
var isPoint = vc.radiusField || layer.config.visConfig.radius !== _layerFactory.LAYER_VIS_CONFIGS.radius.defaultValue;
|
|
340
415
|
if (isOld && !isPoint && layer.config.visConfig.stroked) {
|
|
341
416
|
// if stroked is true, copy color config to stroke color config
|
|
342
417
|
return {
|
|
@@ -350,62 +425,74 @@ const visualChannelModificationV1 = {
|
|
|
350
425
|
/**
|
|
351
426
|
* V1: save [field]: {name, type}, [scale]: '' for each channel
|
|
352
427
|
*/
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
428
|
+
var VisualChannelSchemaV1 = /*#__PURE__*/function (_Schema10) {
|
|
429
|
+
function VisualChannelSchemaV1() {
|
|
430
|
+
(0, _classCallCheck2["default"])(this, VisualChannelSchemaV1);
|
|
431
|
+
return _callSuper(this, VisualChannelSchemaV1, arguments);
|
|
432
|
+
}
|
|
433
|
+
(0, _inherits2["default"])(VisualChannelSchemaV1, _Schema10);
|
|
434
|
+
return (0, _createClass2["default"])(VisualChannelSchemaV1, [{
|
|
435
|
+
key: "save",
|
|
436
|
+
value: function save(visualChannels, parents) {
|
|
437
|
+
// only save field and scale of each channel
|
|
438
|
+
var _parents$slice9 = parents.slice(-1),
|
|
439
|
+
_parents$slice10 = (0, _slicedToArray2["default"])(_parents$slice9, 1),
|
|
440
|
+
layer = _parents$slice10[0];
|
|
441
|
+
return (0, _defineProperty2["default"])({}, this.key, Object.keys(visualChannels).reduce(
|
|
359
442
|
// save channel to null if didn't select any field
|
|
360
|
-
(accu, key)
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
};
|
|
379
|
-
}
|
|
380
|
-
}
|
|
443
|
+
function (accu, key) {
|
|
444
|
+
return _objectSpread(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, visualChannels[key].field, layer.config[visualChannels[key].field] ? (0, _pick["default"])(layer.config[visualChannels[key].field], ['name', 'type', 'colorColumn']) : null), visualChannels[key].scale, layer.config[visualChannels[key].scale]));
|
|
445
|
+
}, {}));
|
|
446
|
+
}
|
|
447
|
+
}, {
|
|
448
|
+
key: "load",
|
|
449
|
+
value: function load(vc, parents, accumulator) {
|
|
450
|
+
// fold channels into config
|
|
451
|
+
var _parents$slice11 = parents.slice(-1),
|
|
452
|
+
_parents$slice12 = (0, _slicedToArray2["default"])(_parents$slice11, 1),
|
|
453
|
+
layer = _parents$slice12[0];
|
|
454
|
+
var modified = visualChannelModificationV1[layer.type] ? visualChannelModificationV1[layer.type](vc, parents, accumulator) : {};
|
|
455
|
+
return _objectSpread(_objectSpread({}, accumulator), {}, {
|
|
456
|
+
config: _objectSpread(_objectSpread(_objectSpread({}, accumulator.config || {}), vc), modified)
|
|
457
|
+
});
|
|
458
|
+
}
|
|
459
|
+
}]);
|
|
460
|
+
}(_schema["default"]);
|
|
381
461
|
/**
|
|
382
462
|
* V1: save [channel]: [{ label, color }, ...] for legend
|
|
383
463
|
*/
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
464
|
+
var LegendSettingsV1 = /*#__PURE__*/function (_Schema11) {
|
|
465
|
+
function LegendSettingsV1() {
|
|
466
|
+
(0, _classCallCheck2["default"])(this, LegendSettingsV1);
|
|
467
|
+
return _callSuper(this, LegendSettingsV1, arguments);
|
|
468
|
+
}
|
|
469
|
+
(0, _inherits2["default"])(LegendSettingsV1, _Schema11);
|
|
470
|
+
return (0, _createClass2["default"])(LegendSettingsV1, [{
|
|
471
|
+
key: "save",
|
|
472
|
+
value: function save(legendSettings, parents) {
|
|
473
|
+
return (0, _defineProperty2["default"])({}, this.key, Object.keys(legendSettings).reduce(function (accu, key) {
|
|
388
474
|
accu[key] = legendSettings[key];
|
|
389
475
|
return accu;
|
|
390
|
-
}, {})
|
|
391
|
-
}
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
476
|
+
}, {}));
|
|
477
|
+
}
|
|
478
|
+
}, {
|
|
479
|
+
key: "load",
|
|
480
|
+
value: function load(ls, parents, accumulator) {
|
|
481
|
+
return _objectSpread(_objectSpread({}, accumulator), {}, (0, _defineProperty2["default"])({}, this.key, ls));
|
|
482
|
+
}
|
|
483
|
+
}]);
|
|
484
|
+
}(_schema["default"]);
|
|
485
|
+
var visConfigModificationV1 = {
|
|
486
|
+
point: function point(visConfig, parents, accumulated) {
|
|
487
|
+
var modified = {};
|
|
488
|
+
var _parents$slice13 = parents.slice(-2, -1),
|
|
489
|
+
_parents$slice14 = (0, _slicedToArray2["default"])(_parents$slice13, 1),
|
|
490
|
+
layer = _parents$slice14[0];
|
|
491
|
+
var isOld = !visConfig.hasOwnProperty('filled') && !visConfig.strokeColor && !visConfig.strokeColorRange;
|
|
405
492
|
if (isOld) {
|
|
406
493
|
// color color & color range to stroke color
|
|
407
494
|
modified.strokeColor = layer.config.color;
|
|
408
|
-
modified.strokeColorRange = (0, _cloneDeep
|
|
495
|
+
modified.strokeColorRange = (0, _cloneDeep["default"])(visConfig.colorRange);
|
|
409
496
|
if (visConfig.outline) {
|
|
410
497
|
// point layer now supports both outline and fill
|
|
411
498
|
// for older schema where filled has not been added to point layer
|
|
@@ -415,17 +502,19 @@ const visConfigModificationV1 = {
|
|
|
415
502
|
}
|
|
416
503
|
return modified;
|
|
417
504
|
},
|
|
418
|
-
geojson: (visConfig, parents, accumulated)
|
|
505
|
+
geojson: function geojson(visConfig, parents, accumulated) {
|
|
419
506
|
// is points?
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
507
|
+
var modified = {};
|
|
508
|
+
var _parents$slice15 = parents.slice(-2, -1),
|
|
509
|
+
_parents$slice16 = (0, _slicedToArray2["default"])(_parents$slice15, 1),
|
|
510
|
+
layer = _parents$slice16[0];
|
|
511
|
+
var isOld = layer.visualChannels && !layer.visualChannels.hasOwnProperty('strokeColorField') && !visConfig.strokeColor && !visConfig.strokeColorRange;
|
|
423
512
|
// make our best guess if this geojson layer contains point
|
|
424
|
-
|
|
513
|
+
var isPoint = layer.visualChannels && layer.visualChannels.radiusField || visConfig && visConfig.radius !== _layerFactory.LAYER_VIS_CONFIGS.radius.defaultValue;
|
|
425
514
|
if (isOld) {
|
|
426
515
|
// color color & color range to stroke color
|
|
427
516
|
modified.strokeColor = layer.config.color;
|
|
428
|
-
modified.strokeColorRange = (0, _cloneDeep
|
|
517
|
+
modified.strokeColorRange = (0, _cloneDeep["default"])(visConfig.colorRange);
|
|
429
518
|
if (isPoint) {
|
|
430
519
|
// if is point, set stroke to false
|
|
431
520
|
modified.filled = true;
|
|
@@ -435,26 +524,35 @@ const visConfigModificationV1 = {
|
|
|
435
524
|
return modified;
|
|
436
525
|
}
|
|
437
526
|
};
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
(0,
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
527
|
+
var VisConfigSchemaV1 = /*#__PURE__*/function (_Schema12) {
|
|
528
|
+
function VisConfigSchemaV1() {
|
|
529
|
+
var _this8;
|
|
530
|
+
(0, _classCallCheck2["default"])(this, VisConfigSchemaV1);
|
|
531
|
+
for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {
|
|
532
|
+
args[_key8] = arguments[_key8];
|
|
533
|
+
}
|
|
534
|
+
_this8 = _callSuper(this, VisConfigSchemaV1, [].concat(args));
|
|
535
|
+
(0, _defineProperty2["default"])(_this8, "key", 'visConfig');
|
|
536
|
+
return _this8;
|
|
537
|
+
}
|
|
538
|
+
(0, _inherits2["default"])(VisConfigSchemaV1, _Schema12);
|
|
539
|
+
return (0, _createClass2["default"])(VisConfigSchemaV1, [{
|
|
540
|
+
key: "load",
|
|
541
|
+
value: function load(visConfig, parents, accumulated) {
|
|
542
|
+
var _parents$slice17 = parents.slice(-2, -1),
|
|
543
|
+
_parents$slice18 = (0, _slicedToArray2["default"])(_parents$slice17, 1),
|
|
544
|
+
layer = _parents$slice18[0];
|
|
545
|
+
var modified = visConfigModificationV1[layer.type] ? visConfigModificationV1[layer.type](visConfig, parents, accumulated) : {};
|
|
546
|
+
return {
|
|
547
|
+
visConfig: _objectSpread(_objectSpread({}, visConfig), modified)
|
|
548
|
+
};
|
|
549
|
+
}
|
|
550
|
+
}]);
|
|
551
|
+
}(_schema["default"]);
|
|
552
|
+
var layerPropsV1 = exports.layerPropsV1 = {
|
|
455
553
|
id: null,
|
|
456
554
|
type: null,
|
|
457
|
-
config: new _schema
|
|
555
|
+
config: new _schema["default"]({
|
|
458
556
|
version: _versions.VERSIONS.v1,
|
|
459
557
|
key: 'config',
|
|
460
558
|
properties: {
|
|
@@ -487,129 +585,161 @@ const layerPropsV1 = exports.layerPropsV1 = {
|
|
|
487
585
|
key: 'visualChannels'
|
|
488
586
|
})
|
|
489
587
|
};
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
(0,
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
588
|
+
var LayerSchemaV0 = exports.LayerSchemaV0 = /*#__PURE__*/function (_Schema13) {
|
|
589
|
+
function LayerSchemaV0() {
|
|
590
|
+
var _this9;
|
|
591
|
+
(0, _classCallCheck2["default"])(this, LayerSchemaV0);
|
|
592
|
+
for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {
|
|
593
|
+
args[_key9] = arguments[_key9];
|
|
594
|
+
}
|
|
595
|
+
_this9 = _callSuper(this, LayerSchemaV0, [].concat(args));
|
|
596
|
+
(0, _defineProperty2["default"])(_this9, "key", 'layers');
|
|
597
|
+
return _this9;
|
|
598
|
+
}
|
|
599
|
+
(0, _inherits2["default"])(LayerSchemaV0, _Schema13);
|
|
600
|
+
return (0, _createClass2["default"])(LayerSchemaV0, [{
|
|
601
|
+
key: "save",
|
|
602
|
+
value: function save(layers, parents) {
|
|
603
|
+
var _this10 = this;
|
|
604
|
+
var _parents$slice19 = parents.slice(-1),
|
|
605
|
+
_parents$slice20 = (0, _slicedToArray2["default"])(_parents$slice19, 1),
|
|
606
|
+
visState = _parents$slice20[0];
|
|
607
|
+
return (0, _defineProperty2["default"])({}, this.key, visState.layerOrder.reduce(function (saved, index) {
|
|
499
608
|
// save layers according to their rendering order
|
|
500
|
-
|
|
609
|
+
var layer = layers[index];
|
|
501
610
|
if (layer.isValidToSave()) {
|
|
502
|
-
saved.push(
|
|
611
|
+
saved.push(_this10.savePropertiesOrApplySchema(layer).layers);
|
|
503
612
|
}
|
|
504
613
|
return saved;
|
|
505
|
-
}, [])
|
|
506
|
-
}
|
|
507
|
-
}
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
}
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
}
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
return
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
[this.key
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
614
|
+
}, []));
|
|
615
|
+
}
|
|
616
|
+
}, {
|
|
617
|
+
key: "load",
|
|
618
|
+
value: function load(layers) {
|
|
619
|
+
var _this11 = this;
|
|
620
|
+
return (0, _defineProperty2["default"])({}, this.key, layers.map(function (layer) {
|
|
621
|
+
return _this11.loadPropertiesOrApplySchema(layer, layers).layers;
|
|
622
|
+
}));
|
|
623
|
+
}
|
|
624
|
+
}]);
|
|
625
|
+
}(_schema["default"]);
|
|
626
|
+
var FilterSchemaV0 = exports.FilterSchemaV0 = /*#__PURE__*/function (_Schema14) {
|
|
627
|
+
function FilterSchemaV0() {
|
|
628
|
+
var _this12;
|
|
629
|
+
(0, _classCallCheck2["default"])(this, FilterSchemaV0);
|
|
630
|
+
for (var _len10 = arguments.length, args = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {
|
|
631
|
+
args[_key10] = arguments[_key10];
|
|
632
|
+
}
|
|
633
|
+
_this12 = _callSuper(this, FilterSchemaV0, [].concat(args));
|
|
634
|
+
(0, _defineProperty2["default"])(_this12, "key", 'filters');
|
|
635
|
+
return _this12;
|
|
636
|
+
}
|
|
637
|
+
(0, _inherits2["default"])(FilterSchemaV0, _Schema14);
|
|
638
|
+
return (0, _createClass2["default"])(FilterSchemaV0, [{
|
|
639
|
+
key: "save",
|
|
640
|
+
value: function save(filters) {
|
|
641
|
+
var _this13 = this;
|
|
642
|
+
return {
|
|
643
|
+
filters: filters.filter(_filterUtils.isValidFilterValue).map(function (filter) {
|
|
644
|
+
return _this13.savePropertiesOrApplySchema(filter).filters;
|
|
645
|
+
})
|
|
646
|
+
};
|
|
647
|
+
}
|
|
648
|
+
}, {
|
|
649
|
+
key: "load",
|
|
650
|
+
value: function load(filters) {
|
|
651
|
+
return {
|
|
652
|
+
filters: filters
|
|
653
|
+
};
|
|
654
|
+
}
|
|
655
|
+
}]);
|
|
656
|
+
}(_schema["default"]);
|
|
657
|
+
var interactionPropsV0 = ['tooltip', 'brush'];
|
|
658
|
+
var InteractionSchemaV0 = /*#__PURE__*/function (_Schema15) {
|
|
659
|
+
function InteractionSchemaV0() {
|
|
660
|
+
var _this14;
|
|
661
|
+
(0, _classCallCheck2["default"])(this, InteractionSchemaV0);
|
|
662
|
+
for (var _len11 = arguments.length, args = new Array(_len11), _key11 = 0; _key11 < _len11; _key11++) {
|
|
663
|
+
args[_key11] = arguments[_key11];
|
|
664
|
+
}
|
|
665
|
+
_this14 = _callSuper(this, InteractionSchemaV0, [].concat(args));
|
|
666
|
+
(0, _defineProperty2["default"])(_this14, "key", 'interactionConfig');
|
|
667
|
+
return _this14;
|
|
668
|
+
}
|
|
669
|
+
(0, _inherits2["default"])(InteractionSchemaV0, _Schema15);
|
|
670
|
+
return (0, _createClass2["default"])(InteractionSchemaV0, [{
|
|
671
|
+
key: "save",
|
|
672
|
+
value: function save(interactionConfig) {
|
|
673
|
+
return Array.isArray(this.properties) ? (0, _defineProperty2["default"])({}, this.key, this.properties.reduce(function (accu, key) {
|
|
674
|
+
return _objectSpread(_objectSpread({}, accu), interactionConfig[key].enabled ? (0, _defineProperty2["default"])({}, key, interactionConfig[key].config) : {});
|
|
675
|
+
}, {})) : {};
|
|
676
|
+
}
|
|
677
|
+
}, {
|
|
678
|
+
key: "load",
|
|
679
|
+
value: function load(interactionConfig) {
|
|
680
|
+
// convert v0 -> v1
|
|
681
|
+
// return enabled: false if disabled,
|
|
682
|
+
return Array.isArray(this.properties) ? (0, _defineProperty2["default"])({}, this.key, this.properties.reduce(function (accu, key) {
|
|
683
|
+
return _objectSpread(_objectSpread({}, accu), (0, _defineProperty2["default"])({}, key, _objectSpread(_objectSpread({}, interactionConfig[key] || {}), {}, {
|
|
684
|
+
enabled: Boolean(interactionConfig[key])
|
|
685
|
+
})));
|
|
686
|
+
}, {})) : {};
|
|
687
|
+
}
|
|
688
|
+
}]);
|
|
689
|
+
}(_schema["default"]);
|
|
690
|
+
var interactionPropsV1 = [].concat(interactionPropsV0, ['geocoder', 'coordinate']);
|
|
691
|
+
var InteractionSchemaV1 = exports.InteractionSchemaV1 = /*#__PURE__*/function (_Schema16) {
|
|
692
|
+
function InteractionSchemaV1() {
|
|
693
|
+
var _this15;
|
|
694
|
+
(0, _classCallCheck2["default"])(this, InteractionSchemaV1);
|
|
695
|
+
for (var _len12 = arguments.length, args = new Array(_len12), _key12 = 0; _key12 < _len12; _key12++) {
|
|
696
|
+
args[_key12] = arguments[_key12];
|
|
697
|
+
}
|
|
698
|
+
_this15 = _callSuper(this, InteractionSchemaV1, [].concat(args));
|
|
699
|
+
(0, _defineProperty2["default"])(_this15, "key", 'interactionConfig');
|
|
700
|
+
return _this15;
|
|
701
|
+
}
|
|
702
|
+
(0, _inherits2["default"])(InteractionSchemaV1, _Schema16);
|
|
703
|
+
return (0, _createClass2["default"])(InteractionSchemaV1, [{
|
|
704
|
+
key: "save",
|
|
705
|
+
value: function save(interactionConfig) {
|
|
706
|
+
// save config even if disabled,
|
|
707
|
+
return Array.isArray(this.properties) ? (0, _defineProperty2["default"])({}, this.key, this.properties.reduce(function (accu, key) {
|
|
708
|
+
return _objectSpread(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])({}, key, _objectSpread(_objectSpread({}, interactionConfig[key].config), {}, {
|
|
577
709
|
enabled: interactionConfig[key].enabled
|
|
578
|
-
}
|
|
579
|
-
}
|
|
580
|
-
}
|
|
581
|
-
}
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
if (
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
710
|
+
})));
|
|
711
|
+
}, {})) : {};
|
|
712
|
+
}
|
|
713
|
+
}, {
|
|
714
|
+
key: "load",
|
|
715
|
+
value: function load(interactionConfig) {
|
|
716
|
+
var _this16 = this;
|
|
717
|
+
var modifiedConfig = interactionConfig;
|
|
718
|
+
Object.keys(interactionConfig).forEach(function (configType) {
|
|
719
|
+
if (configType === 'tooltip') {
|
|
720
|
+
var fieldsToShow = modifiedConfig[configType].fieldsToShow;
|
|
721
|
+
if (!(0, _dataUtils.notNullorUndefined)(fieldsToShow)) {
|
|
722
|
+
return (0, _defineProperty2["default"])({}, _this16.key, modifiedConfig);
|
|
723
|
+
}
|
|
724
|
+
Object.keys(fieldsToShow).forEach(function (key) {
|
|
725
|
+
fieldsToShow[key] = fieldsToShow[key].map(function (fieldData) {
|
|
726
|
+
if (!fieldData.name) {
|
|
727
|
+
return {
|
|
728
|
+
name: fieldData,
|
|
729
|
+
format: null
|
|
730
|
+
};
|
|
731
|
+
}
|
|
732
|
+
return fieldData;
|
|
733
|
+
});
|
|
601
734
|
});
|
|
602
|
-
}
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
}
|
|
611
|
-
exports.InteractionSchemaV1 = InteractionSchemaV1;
|
|
612
|
-
const filterPropsV0 = exports.filterPropsV0 = {
|
|
735
|
+
}
|
|
736
|
+
return undefined;
|
|
737
|
+
});
|
|
738
|
+
return (0, _defineProperty2["default"])({}, this.key, modifiedConfig);
|
|
739
|
+
}
|
|
740
|
+
}]);
|
|
741
|
+
}(_schema["default"]);
|
|
742
|
+
var filterPropsV0 = exports.filterPropsV0 = {
|
|
613
743
|
dataId: null,
|
|
614
744
|
id: null,
|
|
615
745
|
name: null,
|
|
@@ -617,54 +747,65 @@ const filterPropsV0 = exports.filterPropsV0 = {
|
|
|
617
747
|
value: null,
|
|
618
748
|
enlarged: null
|
|
619
749
|
};
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
}
|
|
631
|
-
}
|
|
632
|
-
exports.DimensionFieldSchema = DimensionFieldSchema;
|
|
633
|
-
class SplitMapsSchema extends _schema.default {
|
|
634
|
-
convertLayerSettings(accu, _ref) {
|
|
635
|
-
let [key, value] = _ref;
|
|
636
|
-
if (typeof value === 'boolean') {
|
|
637
|
-
return {
|
|
638
|
-
...accu,
|
|
639
|
-
[key]: value
|
|
640
|
-
};
|
|
641
|
-
} else if (value && typeof value === 'object' && value.isAvailable) {
|
|
642
|
-
return {
|
|
643
|
-
...accu,
|
|
644
|
-
[key]: Boolean(value.isVisible)
|
|
645
|
-
};
|
|
750
|
+
var DimensionFieldSchema = exports.DimensionFieldSchema = /*#__PURE__*/function (_Schema17) {
|
|
751
|
+
function DimensionFieldSchema() {
|
|
752
|
+
(0, _classCallCheck2["default"])(this, DimensionFieldSchema);
|
|
753
|
+
return _callSuper(this, DimensionFieldSchema, arguments);
|
|
754
|
+
}
|
|
755
|
+
(0, _inherits2["default"])(DimensionFieldSchema, _Schema17);
|
|
756
|
+
return (0, _createClass2["default"])(DimensionFieldSchema, [{
|
|
757
|
+
key: "save",
|
|
758
|
+
value: function save(field) {
|
|
759
|
+
return (0, _defineProperty2["default"])({}, this.key, field ? this.savePropertiesOrApplySchema(field)[this.key] : null);
|
|
646
760
|
}
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
761
|
+
}, {
|
|
762
|
+
key: "load",
|
|
763
|
+
value: function load(field) {
|
|
764
|
+
return (0, _defineProperty2["default"])({}, this.key, field);
|
|
765
|
+
}
|
|
766
|
+
}]);
|
|
767
|
+
}(_schema["default"]);
|
|
768
|
+
var SplitMapsSchema = exports.SplitMapsSchema = /*#__PURE__*/function (_Schema18) {
|
|
769
|
+
function SplitMapsSchema() {
|
|
770
|
+
(0, _classCallCheck2["default"])(this, SplitMapsSchema);
|
|
771
|
+
return _callSuper(this, SplitMapsSchema, arguments);
|
|
772
|
+
}
|
|
773
|
+
(0, _inherits2["default"])(SplitMapsSchema, _Schema18);
|
|
774
|
+
return (0, _createClass2["default"])(SplitMapsSchema, [{
|
|
775
|
+
key: "convertLayerSettings",
|
|
776
|
+
value: function convertLayerSettings(accu, _ref19) {
|
|
777
|
+
var _ref20 = (0, _slicedToArray2["default"])(_ref19, 2),
|
|
778
|
+
key = _ref20[0],
|
|
779
|
+
value = _ref20[1];
|
|
780
|
+
if (typeof value === 'boolean') {
|
|
781
|
+
return _objectSpread(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])({}, key, value));
|
|
782
|
+
} else if (value && (0, _typeof2["default"])(value) === 'object' && value.isAvailable) {
|
|
783
|
+
return _objectSpread(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])({}, key, Boolean(value.isVisible)));
|
|
784
|
+
}
|
|
785
|
+
return accu;
|
|
786
|
+
}
|
|
787
|
+
}, {
|
|
788
|
+
key: "load",
|
|
789
|
+
value: function load(splitMaps) {
|
|
790
|
+
var _this17 = this;
|
|
791
|
+
// previous splitMaps Schema {layers: {layerId: {isVisible, isAvailable}}}
|
|
651
792
|
|
|
652
|
-
|
|
793
|
+
if (!Array.isArray(splitMaps) || !splitMaps.length) {
|
|
794
|
+
return {
|
|
795
|
+
splitMaps: []
|
|
796
|
+
};
|
|
797
|
+
}
|
|
653
798
|
return {
|
|
654
|
-
splitMaps:
|
|
799
|
+
splitMaps: splitMaps.map(function (settings) {
|
|
800
|
+
return _objectSpread(_objectSpread({}, settings), {}, {
|
|
801
|
+
layers: Object.entries(settings.layers || {}).reduce(_this17.convertLayerSettings, {})
|
|
802
|
+
});
|
|
803
|
+
})
|
|
655
804
|
};
|
|
656
805
|
}
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
layers: Object.entries(settings.layers || {}).reduce(this.convertLayerSettings, {})
|
|
661
|
-
}))
|
|
662
|
-
};
|
|
663
|
-
}
|
|
664
|
-
}
|
|
665
|
-
exports.SplitMapsSchema = SplitMapsSchema;
|
|
666
|
-
const filterPropsV1 = exports.filterPropsV1 = {
|
|
667
|
-
...filterPropsV0,
|
|
806
|
+
}]);
|
|
807
|
+
}(_schema["default"]);
|
|
808
|
+
var filterPropsV1 = exports.filterPropsV1 = _objectSpread(_objectSpread({}, filterPropsV0), {}, {
|
|
668
809
|
plotType: null,
|
|
669
810
|
animationWindow: null,
|
|
670
811
|
yAxis: new DimensionFieldSchema({
|
|
@@ -678,8 +819,8 @@ const filterPropsV1 = exports.filterPropsV1 = {
|
|
|
678
819
|
// polygon filter properties
|
|
679
820
|
layerId: null,
|
|
680
821
|
speed: null
|
|
681
|
-
};
|
|
682
|
-
|
|
822
|
+
});
|
|
823
|
+
var propertiesV0 = exports.propertiesV0 = {
|
|
683
824
|
filters: new FilterSchemaV0({
|
|
684
825
|
version: _versions.VERSIONS.v0,
|
|
685
826
|
properties: filterPropsV0
|
|
@@ -694,7 +835,7 @@ const propertiesV0 = exports.propertiesV0 = {
|
|
|
694
835
|
}),
|
|
695
836
|
layerBlending: null
|
|
696
837
|
};
|
|
697
|
-
|
|
838
|
+
var propertiesV1 = exports.propertiesV1 = {
|
|
698
839
|
filters: new FilterSchemaV0({
|
|
699
840
|
version: _versions.VERSIONS.v1,
|
|
700
841
|
properties: filterPropsV1
|
|
@@ -712,7 +853,7 @@ const propertiesV1 = exports.propertiesV1 = {
|
|
|
712
853
|
key: 'splitMaps',
|
|
713
854
|
version: _versions.VERSIONS.v1
|
|
714
855
|
}),
|
|
715
|
-
animationConfig: new _schema
|
|
856
|
+
animationConfig: new _schema["default"]({
|
|
716
857
|
version: _versions.VERSIONS.v1,
|
|
717
858
|
properties: {
|
|
718
859
|
currentTime: null,
|
|
@@ -721,24 +862,25 @@ const propertiesV1 = exports.propertiesV1 = {
|
|
|
721
862
|
key: 'animationConfig'
|
|
722
863
|
})
|
|
723
864
|
};
|
|
724
|
-
|
|
865
|
+
var visStateSchemaV0 = exports.visStateSchemaV0 = new _schema["default"]({
|
|
725
866
|
version: _versions.VERSIONS.v0,
|
|
726
867
|
properties: propertiesV0,
|
|
727
868
|
key: 'visState'
|
|
728
869
|
});
|
|
729
|
-
|
|
870
|
+
var visStateSchemaV1 = exports.visStateSchemaV1 = new _schema["default"]({
|
|
730
871
|
version: _versions.VERSIONS.v1,
|
|
731
872
|
properties: propertiesV1,
|
|
732
873
|
key: 'visState'
|
|
733
874
|
});
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
load: toLoad => visStateSchemaV1.load(visStateSchemaV0.load(toLoad).visState)
|
|
875
|
+
var visStateSchema = exports.visStateSchema = (0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, _versions.VERSIONS.v0, {
|
|
876
|
+
save: function save(toSave) {
|
|
877
|
+
return visStateSchemaV0.save(toSave);
|
|
738
878
|
},
|
|
739
|
-
|
|
740
|
-
|
|
879
|
+
load: function load(toLoad) {
|
|
880
|
+
return visStateSchemaV1.load(visStateSchemaV0.load(toLoad).visState);
|
|
881
|
+
}
|
|
882
|
+
}), _versions.VERSIONS.v1, visStateSchemaV1);
|
|
741
883
|
|
|
742
884
|
// test load v0
|
|
743
|
-
var _default = exports
|
|
744
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcGljayIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3ZlcnNpb25zIiwiX2ZpbHRlclV0aWxzIiwiX2xheWVyRmFjdG9yeSIsIl9zY2hlbWEiLCJfY2xvbmVEZWVwIiwiX2RhdGFVdGlscyIsImRpbWVuc2lvblByb3BzVjAiLCJleHBvcnRzIiwiZ2VvanNvblNpemVGaWVsZFYwVG9WMSIsImNvbmZpZyIsImRlZmF1bHRSYWl1ZHMiLCJkZWZhdWx0UmFkaXVzUmFuZ2UiLCJ2aXNDb25maWciLCJleHRydWRlZCIsInN0cm9rZWQiLCJyYWRpdXMiLCJyYWRpdXNSYW5nZSIsInNvbWUiLCJkIiwiaSIsIkRpbWVuc2lvbkZpZWxkU2NoZW1hVjAiLCJTY2hlbWEiLCJjb25zdHJ1Y3RvciIsImFyZ3VtZW50cyIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJkZWZhdWx0IiwiVkVSU0lPTlMiLCJ2MCIsInNhdmUiLCJmaWVsZCIsImtleSIsInNhdmVQcm9wZXJ0aWVzT3JBcHBseVNjaGVtYSIsImxvYWQiLCJwYXJlbnRzIiwiYWNjdW11bGF0ZWQiLCJzbGljZSIsImZpZWxkTmFtZSIsInR5cGUiLCJ2aXN1YWxDaGFubmVscyIsIkRpbWVuc2lvblNjYWxlU2NoZW1hVjAiLCJzY2FsZSIsIkxheWVyQ29uZmlnU2NoZW1hVjAiLCJzYXZlZCIsIkxheWVyQ29sdW1uc1NjaGVtYVYwIiwiY29sdW1ucyIsIk9iamVjdCIsImtleXMiLCJyZWR1Y2UiLCJhY2N1IiwidmFsdWUiLCJMYXllckNvbmZpZ1RvVmlzQ29uZmlnU2NoZW1hVjAiLCJhY2N1bXVsYXRlZENvbmZpZyIsIkxheWVyVmlzQ29uZmlnU2NoZW1hVjAiLCJhY2N1bXVsYXRvciIsInJlbmFtZSIsImdlb2pzb24iLCJlbGV2YXRpb25SYW5nZSIsInByb3BUb1JlbmFtZSIsIkxheWVyQ29uZmlnU2NoZW1hRGVsZXRlVjAiLCJsYXllclByb3BzVjAiLCJpZCIsImRhdGFJZCIsImxhYmVsIiwiY29sb3IiLCJpc1Zpc2libGUiLCJoaWRkZW4iLCJ2aXNpYmlsaXR5Qnlab29tIiwiY29sb3JGaWVsZCIsInByb3BlcnRpZXMiLCJjb2xvclNjYWxlIiwic2l6ZUZpZWxkIiwic2l6ZVNjYWxlIiwiZW5hYmxlM2QiLCJjb2xvckFnZ3JlZ2F0aW9uIiwic2l6ZUFnZ3JlZ2F0aW9uIiwiaXNBZ2dyZWdhdGVkIiwiQ29sdW1uU2NoZW1hVjEiLCJzdGF0ZSIsImNrZXkiLCJUZXh0TGFiZWxTY2hlbWFWMSIsInRleHRMYWJlbCIsIm1hcCIsInRsIiwicGljayIsIkFycmF5IiwiaXNBcnJheSIsInZpc3VhbENoYW5uZWxNb2RpZmljYXRpb25WMSIsInZjIiwibGF5ZXIiLCJpc09sZCIsImhhc093blByb3BlcnR5IiwiaXNQb2ludCIsInJhZGl1c0ZpZWxkIiwiTEFZRVJfVklTX0NPTkZJR1MiLCJkZWZhdWx0VmFsdWUiLCJzdHJva2VDb2xvckZpZWxkIiwic3Ryb2tlQ29sb3JTY2FsZSIsIlZpc3VhbENoYW5uZWxTY2hlbWFWMSIsIm1vZGlmaWVkIiwiTGVnZW5kU2V0dGluZ3NWMSIsImxlZ2VuZFNldHRpbmdzIiwibHMiLCJ2aXNDb25maWdNb2RpZmljYXRpb25WMSIsInBvaW50Iiwic3Ryb2tlQ29sb3IiLCJzdHJva2VDb2xvclJhbmdlIiwiY2xvbmVEZWVwIiwiY29sb3JSYW5nZSIsIm91dGxpbmUiLCJmaWxsZWQiLCJWaXNDb25maWdTY2hlbWFWMSIsImxheWVyUHJvcHNWMSIsInZlcnNpb24iLCJ2MSIsImhpZ2hsaWdodENvbG9yIiwiTGF5ZXJTY2hlbWFWMCIsImxheWVycyIsInZpc1N0YXRlIiwibGF5ZXJPcmRlciIsImluZGV4IiwiaXNWYWxpZFRvU2F2ZSIsInB1c2giLCJsb2FkUHJvcGVydGllc09yQXBwbHlTY2hlbWEiLCJGaWx0ZXJTY2hlbWFWMCIsImZpbHRlcnMiLCJmaWx0ZXIiLCJpc1ZhbGlkRmlsdGVyVmFsdWUiLCJpbnRlcmFjdGlvblByb3BzVjAiLCJJbnRlcmFjdGlvblNjaGVtYVYwIiwiaW50ZXJhY3Rpb25Db25maWciLCJlbmFibGVkIiwiQm9vbGVhbiIsImludGVyYWN0aW9uUHJvcHNWMSIsIkludGVyYWN0aW9uU2NoZW1hVjEiLCJtb2RpZmllZENvbmZpZyIsImZvckVhY2giLCJjb25maWdUeXBlIiwiZmllbGRzVG9TaG93Iiwibm90TnVsbG9yVW5kZWZpbmVkIiwiZmllbGREYXRhIiwibmFtZSIsImZvcm1hdCIsInVuZGVmaW5lZCIsImZpbHRlclByb3BzVjAiLCJlbmxhcmdlZCIsIkRpbWVuc2lvbkZpZWxkU2NoZW1hIiwiU3BsaXRNYXBzU2NoZW1hIiwiY29udmVydExheWVyU2V0dGluZ3MiLCJfcmVmIiwiaXNBdmFpbGFibGUiLCJzcGxpdE1hcHMiLCJsZW5ndGgiLCJzZXR0aW5ncyIsImVudHJpZXMiLCJmaWx0ZXJQcm9wc1YxIiwicGxvdFR5cGUiLCJhbmltYXRpb25XaW5kb3ciLCJ5QXhpcyIsImxheWVySWQiLCJzcGVlZCIsInByb3BlcnRpZXNWMCIsImxheWVyQmxlbmRpbmciLCJwcm9wZXJ0aWVzVjEiLCJhbmltYXRpb25Db25maWciLCJjdXJyZW50VGltZSIsInZpc1N0YXRlU2NoZW1hVjAiLCJ2aXNTdGF0ZVNjaGVtYVYxIiwidmlzU3RhdGVTY2hlbWEiLCJ0b1NhdmUiLCJ0b0xvYWQiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWFzL3Zpcy1zdGF0ZS1zY2hlbWEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIyIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHBpY2sgZnJvbSAnbG9kYXNoL3BpY2snO1xuaW1wb3J0IHtWRVJTSU9OU30gZnJvbSAnLi92ZXJzaW9ucyc7XG5pbXBvcnQge2lzVmFsaWRGaWx0ZXJWYWx1ZX0gZnJvbSAndXRpbHMvZmlsdGVyLXV0aWxzJztcbmltcG9ydCB7TEFZRVJfVklTX0NPTkZJR1N9IGZyb20gJ2xheWVycy9sYXllci1mYWN0b3J5JztcbmltcG9ydCBTY2hlbWEgZnJvbSAnLi9zY2hlbWEnO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdsb2Rhc2gvY2xvbmVEZWVwJztcbmltcG9ydCB7bm90TnVsbG9yVW5kZWZpbmVkfSBmcm9tICd1dGlscy9kYXRhLXV0aWxzJztcblxuLyoqXG4gKiBWMCBTY2hlbWFcbiAqL1xuXG5leHBvcnQgY29uc3QgZGltZW5zaW9uUHJvcHNWMCA9IFsnbmFtZScsICd0eXBlJ107XG5cbmV4cG9ydCB0eXBlIG1vZGlmaWVkVHlwZSA9IHtcbiAgc3Ryb2tlQ29sb3I/OiBhbnk7XG4gIHN0cm9rZUNvbG9yUmFuZ2U/OiBhbnk7XG4gIGZpbGxlZD86IGJvb2xlYW47XG4gIHN0cm9rZWQ/OiBib29sZWFuO1xufTtcblxuLy8gaW4gdjAgZ2VvanNvbiB0aGVyZSBpcyBvbmx5IHNpemVGaWVsZFxuXG4vLyBpbiB2MSBnZW9qc29uXG4vLyBzdHJva2UgYmFzZSBvbiAtPiBzaXplRmllbGRcbi8vIGhlaWdodCBiYXNlZCBvbiAtPiBoZWlnaHRGaWVsZFxuLy8gcmFkaXVzIGJhc2VkIG9uIC0+IHJhZGl1c0ZpZWxkXG4vLyBoZXJlIHdlIG1ha2Ugb3VyIHdpcmVkc3QgZ3Vlc3Mgb24gd2hpY2ggY2hhbm5lbCBzaXplRmllbGQgYmVsb25ncyB0b1xuZnVuY3Rpb24gZ2VvanNvblNpemVGaWVsZFYwVG9WMShjb25maWcpIHtcbiAgY29uc3QgZGVmYXVsdFJhaXVkcyA9IDEwO1xuICBjb25zdCBkZWZhdWx0UmFkaXVzUmFuZ2UgPSBbMCwgNTBdO1xuXG4gIC8vIGlmIGV4dHJ1ZGVkLCBzaXplRmllbGQgaXMgbW9zdCBsaWtlbHkgdXNlZCBmb3IgaGVpZ2h0XG4gIGlmIChjb25maWcudmlzQ29uZmlnLmV4dHJ1ZGVkKSB7XG4gICAgcmV0dXJuICdoZWlnaHRGaWVsZCc7XG4gIH1cblxuICAvLyBpZiBzaG93IHN0cm9rZSBlbmFibGVkLCBzaXplRmllbGQgaXMgbW9zdCBsaWtlbHkgdXNlZCBmb3Igc3Ryb2tlXG4gIGlmIChjb25maWcudmlzQ29uZmlnLnN0cm9rZWQpIHtcbiAgICByZXR1cm4gJ3NpemVGaWVsZCc7XG4gIH1cblxuICAvLyBpZiByYWRpdXMgY2hhbmdlZCwgb3IgcmFkaXVzIFJhbmdlIENoYW5nZWQsIHNpemVGaWVsZCBpcyBtb3N0IGxpa2VseSB1c2VkIGZvciByYWRpdXNcbiAgLy8gdGhpcyBpcyB0aGUgbW9zdCB1bnJlbGlhYmxlIGd1ZXNzLCB0aGF0J3Mgd2h5IHdlIHB1dCBpdCBpbiB0aGUgZW5kXG4gIGlmIChcbiAgICBjb25maWcudmlzQ29uZmlnLnJhZGl1cyAhPT0gZGVmYXVsdFJhaXVkcyB8fFxuICAgIGNvbmZpZy52aXNDb25maWcucmFkaXVzUmFuZ2Uuc29tZSgoZCwgaSkgPT4gZCAhPT0gZGVmYXVsdFJhZGl1c1JhbmdlW2ldKVxuICApIHtcbiAgICByZXR1cm4gJ3JhZGl1c0ZpZWxkJztcbiAgfVxuXG4gIHJldHVybiAnc2l6ZUZpZWxkJztcbn1cblxuLy8gY29udmVydCB2MCB0byB2MSBsYXllciBjb25maWdcbmNsYXNzIERpbWVuc2lvbkZpZWxkU2NoZW1hVjAgZXh0ZW5kcyBTY2hlbWEge1xuICB2ZXJzaW9uID0gVkVSU0lPTlMudjA7XG4gIHNhdmUoZmllbGQpIHtcbiAgICAvLyBzaG91bGQgbm90IGJlIGNhbGxlZCBhbnltb3JlXG4gICAgcmV0dXJuIHtcbiAgICAgIFt0aGlzLmtleV06IGZpZWxkICE9PSBudWxsID8gdGhpcy5zYXZlUHJvcGVydGllc09yQXBwbHlTY2hlbWEoZmllbGQpW3RoaXMua2V5XSA6IG51bGxcbiAgICB9O1xuICB9XG5cbiAgbG9hZChmaWVsZCwgcGFyZW50cywgYWNjdW11bGF0ZWQpIHtcbiAgICBjb25zdCBbY29uZmlnXSA9IHBhcmVudHMuc2xpY2UoLTEpO1xuICAgIGxldCBmaWVsZE5hbWUgPSB0aGlzLmtleTtcbiAgICBpZiAoY29uZmlnLnR5cGUgPT09ICdnZW9qc29uJyAmJiB0aGlzLmtleSA9PT0gJ3NpemVGaWVsZCcgJiYgZmllbGQpIHtcbiAgICAgIGZpZWxkTmFtZSA9IGdlb2pzb25TaXplRmllbGRWMFRvVjEoY29uZmlnKTtcbiAgICB9XG4gICAgLy8gZm9sZCBpbnRvIHZpc3VhbENoYW5uZWxzIHRvIGJlIGxvYWQgYnkgVmlzdWFsQ2hhbm5lbFNjaGVtYVYxXG4gICAgcmV0dXJuIHtcbiAgICAgIHZpc3VhbENoYW5uZWxzOiB7XG4gICAgICAgIC4uLihhY2N1bXVsYXRlZC52aXN1YWxDaGFubmVscyB8fCB7fSksXG4gICAgICAgIFtmaWVsZE5hbWVdOiBmaWVsZFxuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuY2xhc3MgRGltZW5zaW9uU2NhbGVTY2hlbWFWMCBleHRlbmRzIFNjaGVtYSB7XG4gIHZlcnNpb24gPSBWRVJTSU9OUy52MDtcbiAgc2F2ZShzY2FsZSkge1xuICAgIHJldHVybiB7W3RoaXMua2V5XTogc2NhbGV9O1xuICB9XG4gIGxvYWQoc2NhbGUsIHBhcmVudHMsIGFjY3VtdWxhdGVkKSB7XG4gICAgY29uc3QgW2NvbmZpZ10gPSBwYXJlbnRzLnNsaWNlKC0xKTtcbiAgICAvLyBmb2xkIGludG8gdmlzdWFsQ2hhbm5lbHMgdG8gYmUgbG9hZCBieSBWaXN1YWxDaGFubmVsU2NoZW1hVjFcbiAgICBpZiAodGhpcy5rZXkgPT09ICdzaXplU2NhbGUnICYmIGNvbmZpZy50eXBlID09PSAnZ2VvanNvbicpIHtcbiAgICAgIC8vIHNpemVTY2FsZSBub3cgc3BsaXQgaW50byByYWRpdXNTY2FsZSwgaGVpZ2h0U2NhbGVcbiAgICAgIC8vIG5vIHVzZXIgY3VzdG9taXphdGlvbiwganVzdCB1c2UgZGVmYXVsdFxuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB2aXN1YWxDaGFubmVsczoge1xuICAgICAgICAuLi4oYWNjdW11bGF0ZWQudmlzdWFsQ2hhbm5lbHMgfHwge30pLFxuICAgICAgICBbdGhpcy5rZXldOiBzY2FsZVxuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuLy8gdXNlZCB0byBjb252ZXJ0IHYwIHRvIHYxIGxheWVyIGNvbmZpZ1xuY2xhc3MgTGF5ZXJDb25maWdTY2hlbWFWMCBleHRlbmRzIFNjaGVtYSB7XG4gIHZlcnNpb24gPSBWRVJTSU9OUy52MDtcbiAgbG9hZChzYXZlZCwgcGFyZW50cywgYWNjdW11bGF0ZWQpIHtcbiAgICAvLyBmb2xkIHYwIGxheWVyIHByb3BlcnR5IGludG8gY29uZmlnLmtleVxuICAgIHJldHVybiB7XG4gICAgICBjb25maWc6IHtcbiAgICAgICAgLi4uKGFjY3VtdWxhdGVkLmNvbmZpZyB8fCB7fSksXG4gICAgICAgIFt0aGlzLmtleV06IHNhdmVkXG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG4vLyB1c2VkIHRvIGNvbnZlcnQgdjAgdG8gdjEgbGF5ZXIgY29sdW1uc1xuLy8gb25seSByZXR1cm4gY29sdW1uIHZhbHVlIGZvciBlYWNoIGNvbHVtblxuY2xhc3MgTGF5ZXJDb2x1bW5zU2NoZW1hVjAgZXh0ZW5kcyBTY2hlbWEge1xuICB2ZXJzaW9uID0gVkVSU0lPTlMudjA7XG4gIGxvYWQoc2F2ZWQsIHBhcmVudHMsIGFjY3VtdWxhdGVkKSB7XG4gICAgLy8gZm9sZCB2MCBsYXllciBwcm9wZXJ0eSBpbnRvIGNvbmZpZy5rZXksIGZsYXR0ZW4gY29sdW1uc1xuICAgIHJldHVybiB7XG4gICAgICBjb25maWc6IHtcbiAgICAgICAgLi4uKGFjY3VtdWxhdGVkLmNvbmZpZyB8fCB7fSksXG4gICAgICAgIGNvbHVtbnM6IE9iamVjdC5rZXlzKHNhdmVkKS5yZWR1Y2UoXG4gICAgICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgICAgIC4uLmFjY3UsXG4gICAgICAgICAgICBba2V5XTogc2F2ZWRba2V5XS52YWx1ZVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHt9XG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbi8vIHVzZWQgdG8gY29udmVydCB2MCB0byB2MSBsYXllciBjb25maWcudmlzQ29uZmlnXG5jbGFzcyBMYXllckNvbmZpZ1RvVmlzQ29uZmlnU2NoZW1hVjAgZXh0ZW5kcyBTY2hlbWEge1xuICB2ZXJzaW9uID0gVkVSU0lPTlMudjA7XG4gIGxvYWQoc2F2ZWQsIHBhcmVudHMsIGFjY3VtdWxhdGVkKSB7XG4gICAgLy8gZm9sZCB2MCBsYXllciBwcm9wZXJ0eSBpbnRvIGNvbmZpZy52aXNDb25maWdcbiAgICBjb25zdCBhY2N1bXVsYXRlZENvbmZpZyA9IGFjY3VtdWxhdGVkLmNvbmZpZyB8fCB7fTtcbiAgICByZXR1cm4ge1xuICAgICAgY29uZmlnOiB7XG4gICAgICAgIC4uLmFjY3VtdWxhdGVkQ29uZmlnLFxuICAgICAgICB2aXNDb25maWc6IHtcbiAgICAgICAgICAuLi4oYWNjdW11bGF0ZWRDb25maWcudmlzQ29uZmlnIHx8IHt9KSxcbiAgICAgICAgICBbdGhpcy5rZXldOiBzYXZlZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG5jbGFzcyBMYXllclZpc0NvbmZpZ1NjaGVtYVYwIGV4dGVuZHMgU2NoZW1hIHtcbiAgdmVyc2lvbiA9IFZFUlNJT05TLnYwO1xuICBrZXkgPSAndmlzQ29uZmlnJztcblxuICBsb2FkKHZpc0NvbmZpZywgcGFyZW50cywgYWNjdW11bGF0b3IpIHtcbiAgICBjb25zdCBbY29uZmlnXSA9IHBhcmVudHMuc2xpY2UoLTEpO1xuICAgIGNvbnN0IHJlbmFtZSA9IHtcbiAgICAgIGdlb2pzb246IHtcbiAgICAgICAgZXh0cnVkZWQ6ICdlbmFibGUzZCcsXG4gICAgICAgIGVsZXZhdGlvblJhbmdlOiAnaGVpZ2h0UmFuZ2UnXG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChjb25maWcudHlwZSBpbiByZW5hbWUpIHtcbiAgICAgIGNvbnN0IHByb3BUb1JlbmFtZSA9IHJlbmFtZVtjb25maWcudHlwZV07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAuLi4oYWNjdW11bGF0b3IuY29uZmlnIHx8IHt9KSxcbiAgICAgICAgICB2aXNDb25maWc6IE9iamVjdC5rZXlzKHZpc0NvbmZpZykucmVkdWNlKFxuICAgICAgICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgICAgICAgLi4uKHByb3BUb1JlbmFtZVtrZXldXG4gICAgICAgICAgICAgICAgPyB7W3Byb3BUb1JlbmFtZVtrZXldXTogdmlzQ29uZmlnW2tleV19XG4gICAgICAgICAgICAgICAgOiB7W2tleV06IHZpc0NvbmZpZ1trZXldfSlcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAge31cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICAuLi4oYWNjdW11bGF0b3IuY29uZmlnIHx8IHt9KSxcbiAgICAgICAgdmlzQ29uZmlnXG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG5jbGFzcyBMYXllckNvbmZpZ1NjaGVtYURlbGV0ZVYwIGV4dGVuZHMgU2NoZW1hIHtcbiAgdmVyc2lvbiA9IFZFUlNJT05TLnYwO1xuICBsb2FkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG59XG5cbi8qKlxuICogVjAgLT4gVjEgQ2hhbmdlc1xuICogLSBsYXllciBpcyBub3cgYSBjbGFzc1xuICogLSBjb25maWcgc2F2ZWQgaW4gYSBjb25maWcgb2JqZWN0XG4gKiAtIGlkLCB0eXBlLCBpc0FnZ3JlZ2F0ZWQgaXMgb3V0c2lkZSBsYXllci5jb25maWdcbiAqIC0gdmlzdWFsQ2hhbm5lbHMgaXMgb3V0c2lkZSBjb25maWcsIGl0IGRlZmluZXMgYXZhaWxhYmxlIHZpc3VhbCBjaGFubmVsIGFuZFxuICogICBwcm9wZXJ0eSBuYW1lcyBmb3IgZmllbGQsIHNjYWxlLCBkb21haW4gYW5kIHJhbmdlIG9mIGVhY2ggdmlzdWFsIGNoYW5lbC5cbiAqIC0gZW5hYmxlM2QsIGNvbG9yQWdncmVnYXRpb24gYW5kIHNpemVBZ2dyZWdhdGlvbiBhcmUgbW92ZWQgaW50byB2aXNDb25maWdcbiAqIC0gR2VvanNvbkxheWVyIC0gYWRkZWQgaGVpZ2h0LCByYWRpdXMgc3BlY2lmaWMgcHJvcGVydGllc1xuICovXG5cbmV4cG9ydCBjb25zdCBsYXllclByb3BzVjAgPSB7XG4gIGlkOiBudWxsLFxuICB0eXBlOiBudWxsLFxuXG4gIC8vIG1vdmUgaW50byBsYXllci5jb25maWdcbiAgZGF0YUlkOiBuZXcgTGF5ZXJDb25maWdTY2hlbWFWMCh7a2V5OiAnZGF0YUlkJ30pLFxuICBsYWJlbDogbmV3IExheWVyQ29uZmlnU2NoZW1hVjAoe2tleTogJ2xhYmVsJ30pLFxuICBjb2xvcjogbmV3IExheWVyQ29uZmlnU2NoZW1hVjAoe2tleTogJ2NvbG9yJ30pLFxuICBpc1Zpc2libGU6IG5ldyBMYXllckNvbmZpZ1NjaGVtYVYwKHtrZXk6ICdpc1Zpc2libGUnfSksXG4gIGhpZGRlbjogbmV3IExheWVyQ29uZmlnU2NoZW1hVjAoe2tleTogJ2hpZGRlbid9KSxcbiAgdmlzaWJpbGl0eUJ5Wm9vbTogbmV3IExheWVyQ29uZmlnU2NoZW1hVjAoe2tleTogJ3Zpc2liaWxpdHlCeVpvb20nfSksXG5cbiAgLy8gY29udmVydCB2aXNDb25maWdcbiAgdmlzQ29uZmlnOiBuZXcgTGF5ZXJWaXNDb25maWdTY2hlbWFWMCh7a2V5OiAndmlzQ29uZmlnJ30pLFxuXG4gIC8vIG1vdmUgaW50byBsYXllci5jb25maWdcbiAgLy8gZmxhdHRlblxuICBjb2x1bW5zOiBuZXcgTGF5ZXJDb2x1bW5zU2NoZW1hVjAoKSxcblxuICAvLyBzYXZlIGludG8gdmlzdWFsQ2hhbm5lbHNcbiAgY29sb3JGaWVsZDogbmV3IERpbWVuc2lvbkZpZWxkU2NoZW1hVjAoe1xuICAgIHByb3BlcnRpZXM6IGRpbWVuc2lvblByb3BzVjAsXG4gICAga2V5OiAnY29sb3JGaWVsZCdcbiAgfSksXG4gIGNvbG9yU2NhbGU6IG5ldyBEaW1lbnNpb25TY2FsZVNjaGVtYVYwKHtcbiAgICBrZXk6ICdjb2xvclNjYWxlJ1xuICB9KSxcbiAgc2l6ZUZpZWxkOiBuZXcgRGltZW5zaW9uRmllbGRTY2hlbWFWMCh7XG4gICAgcHJvcGVydGllczogZGltZW5zaW9uUHJvcHNWMCxcbiAgICBrZXk6ICdzaXplRmllbGQnXG4gIH0pLFxuICBzaXplU2NhbGU6IG5ldyBEaW1lbnNpb25TY2FsZVNjaGVtYVYwKHtcbiAgICBrZXk6ICdzaXplU2NhbGUnXG4gIH0pLFxuXG4gIC8vIG1vdmUgaW50byBjb25maWcudmlzQ29uZmlnXG4gIGVuYWJsZTNkOiBuZXcgTGF5ZXJDb25maWdUb1Zpc0NvbmZpZ1NjaGVtYVYwKHtrZXk6ICdlbmFibGUzZCd9KSxcbiAgY29sb3JBZ2dyZWdhdGlvbjogbmV3IExheWVyQ29uZmlnVG9WaXNDb25maWdTY2hlbWFWMCh7XG4gICAga2V5OiAnY29sb3JBZ2dyZWdhdGlvbidcbiAgfSksXG4gIHNpemVBZ2dyZWdhdGlvbjogbmV3IExheWVyQ29uZmlnVG9WaXNDb25maWdTY2hlbWFWMCh7a2V5OiAnc2l6ZUFnZ3JlZ2F0aW9uJ30pLFxuXG4gIC8vIGRlbGV0ZVxuICBpc0FnZ3JlZ2F0ZWQ6IG5ldyBMYXllckNvbmZpZ1NjaGVtYURlbGV0ZVYwKClcbn07XG5cbi8qKlxuICogVjEgU2NoZW1hXG4gKi9cbmNsYXNzIENvbHVtblNjaGVtYVYxIGV4dGVuZHMgU2NoZW1hIHtcbiAgc2F2ZShjb2x1bW5zLCBzdGF0ZSkge1xuICAgIC8vIHN0YXJ0aW5nIGZyb20gdjEsIG9ubHkgc2F2ZSBjb2x1bW4gdmFsdWVcbiAgICAvLyBmaWVsZElkeCB3aWxsIGJlIGNhbGN1bGF0ZWQgZHVyaW5nIG1lcmdlXG4gICAgcmV0dXJuIHtcbiAgICAgIFt0aGlzLmtleV06IE9iamVjdC5rZXlzKGNvbHVtbnMpLnJlZHVjZShcbiAgICAgICAgKGFjY3UsIGNrZXkpID0+ICh7XG4gICAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgICBbY2tleV06IGNvbHVtbnNbY2tleV0udmFsdWVcbiAgICAgICAgfSksXG4gICAgICAgIHt9XG4gICAgICApXG4gICAgfTtcbiAgfVxuXG4gIGxvYWQoY29sdW1ucykge1xuICAgIHJldHVybiB7Y29sdW1uc307XG4gIH1cbn1cblxuY2xhc3MgVGV4dExhYmVsU2NoZW1hVjEgZXh0ZW5kcyBTY2hlbWEge1xuICBzYXZlKHRleHRMYWJlbCkge1xuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiB0ZXh0TGFiZWwubWFwKHRsID0+ICh7XG4gICAgICAgIC4uLnRsLFxuICAgICAgICBmaWVsZDogdGwuZmllbGQgPyBwaWNrKHRsLmZpZWxkLCBbJ25hbWUnLCAndHlwZSddKSA6IG51bGxcbiAgICAgIH0pKVxuICAgIH07XG4gIH1cblxuICBsb2FkKHRleHRMYWJlbCkge1xuICAgIHJldHVybiB7dGV4dExhYmVsOiBBcnJheS5pc0FycmF5KHRleHRMYWJlbCkgPyB0ZXh0TGFiZWwgOiBbdGV4dExhYmVsXX07XG4gIH1cbn1cblxuY29uc3QgdmlzdWFsQ2hhbm5lbE1vZGlmaWNhdGlvblYxID0ge1xuICBnZW9qc29uOiAodmMsIHBhcmVudHMsIGFjY3VtdWxhdG9yKSA9PiB7XG4gICAgY29uc3QgW2xheWVyXSA9IHBhcmVudHMuc2xpY2UoLTEpO1xuICAgIGNvbnN0IGlzT2xkID0gIXZjLmhhc093blByb3BlcnR5KCdzdHJva2VDb2xvckZpZWxkJyk7XG4gICAgLy8gbWFrZSBvdXIgYmVzdCBndWVzcyBpZiB0aGlzIGdlb2pzb24gbGF5ZXIgY29udGFpbnMgcG9pbnRcbiAgICBjb25zdCBpc1BvaW50ID1cbiAgICAgIHZjLnJhZGl1c0ZpZWxkIHx8IGxheWVyLmNvbmZpZy52aXNDb25maWcucmFkaXVzICE9PSBMQVlFUl9WSVNfQ09ORklHUy5yYWRpdXMuZGVmYXVsdFZhbHVlO1xuXG4gICAgaWYgKGlzT2xkICYmICFpc1BvaW50ICYmIGxheWVyLmNvbmZpZy52aXNDb25maWcuc3Ryb2tlZCkge1xuICAgICAgLy8gaWYgc3Ryb2tlZCBpcyB0cnVlLCBjb3B5IGNvbG9yIGNvbmZpZyB0byBzdHJva2UgY29sb3IgY29uZmlnXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdHJva2VDb2xvckZpZWxkOiB2Yy5jb2xvckZpZWxkLFxuICAgICAgICBzdHJva2VDb2xvclNjYWxlOiB2Yy5jb2xvclNjYWxlXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge307XG4gIH1cbn07XG4vKipcbiAqIFYxOiBzYXZlIFtmaWVsZF06IHtuYW1lLCB0eXBlfSwgW3NjYWxlXTogJycgZm9yIGVhY2ggY2hhbm5lbFxuICovXG5jbGFzcyBWaXN1YWxDaGFubmVsU2NoZW1hVjEgZXh0ZW5kcyBTY2hlbWEge1xuICBzYXZlKHZpc3VhbENoYW5uZWxzLCBwYXJlbnRzKSB7XG4gICAgLy8gb25seSBzYXZlIGZpZWxkIGFuZCBzY2FsZSBvZiBlYWNoIGNoYW5uZWxcbiAgICBjb25zdCBbbGF5ZXJdID0gcGFyZW50cy5zbGljZSgtMSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIFt0aGlzLmtleV06IE9iamVjdC5rZXlzKHZpc3VhbENoYW5uZWxzKS5yZWR1Y2UoXG4gICAgICAgIC8vICBzYXZlIGNoYW5uZWwgdG8gbnVsbCBpZiBkaWRuJ3Qgc2VsZWN0IGFueSBmaWVsZFxuICAgICAgICAoYWNjdSwga2V5KSA9PiAoe1xuICAgICAgICAgIC4uLmFjY3UsXG4gICAgICAgICAgW3Zpc3VhbENoYW5uZWxzW2tleV0uZmllbGRdOiBsYXllci5jb25maWdbdmlzdWFsQ2hhbm5lbHNba2V5XS5maWVsZF1cbiAgICAgICAgICAgID8gcGljayhsYXllci5jb25maWdbdmlzdWFsQ2hhbm5lbHNba2V5XS5maWVsZF0sIFsnbmFtZScsICd0eXBlJywgJ2NvbG9yQ29sdW1uJ10pXG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgW3Zpc3VhbENoYW5uZWxzW2tleV0uc2NhbGVdOiBsYXllci5jb25maWdbdmlzdWFsQ2hhbm5lbHNba2V5XS5zY2FsZV1cbiAgICAgICAgfSksXG4gICAgICAgIHt9XG4gICAgICApXG4gICAgfTtcbiAgfVxuICBsb2FkKHZjLCBwYXJlbnRzLCBhY2N1bXVsYXRvcikge1xuICAgIC8vIGZvbGQgY2hhbm5lbHMgaW50byBjb25maWdcbiAgICBjb25zdCBbbGF5ZXJdID0gcGFyZW50cy5zbGljZSgtMSk7XG4gICAgY29uc3QgbW9kaWZpZWQgPSB2aXN1YWxDaGFubmVsTW9kaWZpY2F0aW9uVjFbbGF5ZXIudHlwZV1cbiAgICAgID8gdmlzdWFsQ2hhbm5lbE1vZGlmaWNhdGlvblYxW2xheWVyLnR5cGVdKHZjLCBwYXJlbnRzLCBhY2N1bXVsYXRvcilcbiAgICAgIDoge307XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uYWNjdW11bGF0b3IsXG4gICAgICBjb25maWc6IHtcbiAgICAgICAgLi4uKGFjY3VtdWxhdG9yLmNvbmZpZyB8fCB7fSksXG4gICAgICAgIC4uLnZjLFxuICAgICAgICAuLi5tb2RpZmllZFxuICAgICAgfVxuICAgIH07XG4gIH1cbn1cbi8qKlxuICogVjE6IHNhdmUgW2NoYW5uZWxdOiBbeyBsYWJlbCwgY29sb3IgfSwgLi4uXSBmb3IgbGVnZW5kXG4gKi9cbmNsYXNzIExlZ2VuZFNldHRpbmdzVjEgZXh0ZW5kcyBTY2hlbWEge1xuICBzYXZlKGxlZ2VuZFNldHRpbmdzLCBwYXJlbnRzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFt0aGlzLmtleV06IE9iamVjdC5rZXlzKGxlZ2VuZFNldHRpbmdzKS5yZWR1Y2UoKGFjY3UsIGtleSkgPT4ge1xuICAgICAgICBhY2N1W2tleV0gPSBsZWdlbmRTZXR0aW5nc1trZXldO1xuICAgICAgICByZXR1cm4gYWNjdTtcbiAgICAgIH0sIHt9KVxuICAgIH07XG4gIH1cbiAgbG9hZChscywgcGFyZW50cywgYWNjdW11bGF0b3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uYWNjdW11bGF0b3IsXG4gICAgICBbdGhpcy5rZXldOiBsc1xuICAgIH07XG4gIH1cbn1cbmNvbnN0IHZpc0NvbmZpZ01vZGlmaWNhdGlvblYxID0ge1xuICBwb2ludDogKHZpc0NvbmZpZywgcGFyZW50cywgYWNjdW11bGF0ZWQpID0+IHtcbiAgICBjb25zdCBtb2RpZmllZDogbW9kaWZpZWRUeXBlID0ge307XG4gICAgY29uc3QgW2xheWVyXSA9IHBhcmVudHMuc2xpY2UoLTIsIC0xKTtcbiAgICBjb25zdCBpc09sZCA9XG4gICAgICAhdmlzQ29uZmlnLmhhc093blByb3BlcnR5KCdmaWxsZWQnKSAmJiAhdmlzQ29uZmlnLnN0cm9rZUNvbG9yICYmICF2aXNDb25maWcuc3Ryb2tlQ29sb3JSYW5nZTtcbiAgICBpZiAoaXNPbGQpIHtcbiAgICAgIC8vIGNvbG9yIGNvbG9yICYgY29sb3IgcmFuZ2UgdG8gc3Ryb2tlIGNvbG9yXG4gICAgICBtb2RpZmllZC5zdHJva2VDb2xvciA9IGxheWVyLmNvbmZpZy5jb2xvcjtcbiAgICAgIG1vZGlmaWVkLnN0cm9rZUNvbG9yUmFuZ2UgPSBjbG9uZURlZXAodmlzQ29uZmlnLmNvbG9yUmFuZ2UpO1xuICAgICAgaWYgKHZpc0NvbmZpZy5vdXRsaW5lKSB7XG4gICAgICAgIC8vIHBvaW50IGxheWVyIG5vdyBzdXBwb3J0cyBib3RoIG91dGxpbmUgYW5kIGZpbGxcbiAgICAgICAgLy8gZm9yIG9sZGVyIHNjaGVtYSB3aGVyZSBmaWxsZWQgaGFzIG5vdCBiZWVuIGFkZGVkIHRvIHBvaW50IGxheWVyXG4gICAgICAgIC8vIHNldCBpdCB0byBmYWxzZVxuICAgICAgICBtb2RpZmllZC5maWxsZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbW9kaWZpZWQ7XG4gIH0sXG4gIGdlb2pzb246ICh2aXNDb25maWcsIHBhcmVudHMsIGFjY3VtdWxhdGVkKSA9PiB7XG4gICAgLy8gaXMgcG9pbnRzP1xuICAgIGNvbnN0IG1vZGlmaWVkOiBtb2RpZmllZFR5cGUgPSB7fTtcbiAgICBjb25zdCBbbGF5ZXJdID0gcGFyZW50cy5zbGljZSgtMiwgLTEpO1xuICAgIGNvbnN0IGlzT2xkID1cbiAgICAgIGxheWVyLnZpc3VhbENoYW5uZWxzICYmXG4gICAgICAhbGF5ZXIudmlzdWFsQ2hhbm5lbHMuaGFzT3duUHJvcGVydHkoJ3N0cm9rZUNvbG9yRmllbGQnKSAmJlxuICAgICAgIXZpc0NvbmZpZy5zdHJva2VDb2xvciAmJlxuICAgICAgIXZpc0NvbmZpZy5zdHJva2VDb2xvclJhbmdlO1xuICAgIC8vIG1ha2Ugb3VyIGJlc3QgZ3Vlc3MgaWYgdGhpcyBnZW9qc29uIGxheWVyIGNvbnRhaW5zIHBvaW50XG4gICAgY29uc3QgaXNQb2ludCA9XG4gICAgICAobGF5ZXIudmlzdWFsQ2hhbm5lbHMgJiYgbGF5ZXIudmlzdWFsQ2hhbm5lbHMucmFkaXVzRmllbGQpIHx8XG4gICAgICAodmlzQ29uZmlnICYmIHZpc0NvbmZpZy5yYWRpdXMgIT09IExBWUVSX1ZJU19DT05GSUdTLnJhZGl1cy5kZWZhdWx0VmFsdWUpO1xuXG4gICAgaWYgKGlzT2xkKSB7XG4gICAgICAvLyBjb2xvciBjb2xvciAmIGNvbG9yIHJhbmdlIHRvIHN0cm9rZSBjb2xvclxuICAgICAgbW9kaWZpZWQuc3Ryb2tlQ29sb3IgPSBsYXllci5jb25maWcuY29sb3I7XG4gICAgICBtb2RpZmllZC5zdHJva2VDb2xvclJhbmdlID0gY2xvbmVEZWVwKHZpc0NvbmZpZy5jb2xvclJhbmdlKTtcbiAgICAgIGlmIChpc1BvaW50KSB7XG4gICAgICAgIC8vIGlmIGlzIHBvaW50LCBzZXQgc3Ryb2tlIHRvIGZhbHNlXG4gICAgICAgIG1vZGlmaWVkLmZpbGxlZCA9IHRydWU7XG4gICAgICAgIG1vZGlmaWVkLnN0cm9rZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbW9kaWZpZWQ7XG4gIH1cbn07XG5cbmNsYXNzIFZpc0NvbmZpZ1NjaGVtYVYxIGV4dGVuZHMgU2NoZW1hIHtcbiAga2V5ID0gJ3Zpc0NvbmZpZyc7XG5cbiAgbG9hZCh2aXNDb25maWcsIHBhcmVudHMsIGFjY3VtdWxhdGVkKSB7XG4gICAgY29uc3QgW2xheWVyXSA9IHBhcmVudHMuc2xpY2UoLTIsIC0xKTtcbiAgICBjb25zdCBtb2RpZmllZCA9IHZpc0NvbmZpZ01vZGlmaWNhdGlvblYxW2xheWVyLnR5cGVdXG4gICAgICA/IHZpc0NvbmZpZ01vZGlmaWNhdGlvblYxW2xheWVyLnR5cGVdKHZpc0NvbmZpZywgcGFyZW50cywgYWNjdW11bGF0ZWQpXG4gICAgICA6IHt9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZpc0NvbmZpZzoge1xuICAgICAgICAuLi52aXNDb25maWcsXG4gICAgICAgIC4uLm1vZGlmaWVkXG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgbGF5ZXJQcm9wc1YxID0ge1xuICBpZDogbnVsbCxcbiAgdHlwZTogbnVsbCxcbiAgY29uZmlnOiBuZXcgU2NoZW1hKHtcbiAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MSxcbiAgICBrZXk6ICdjb25maWcnLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIGRhdGFJZDogbnVsbCxcbiAgICAgIGxhYmVsOiBudWxsLFxuICAgICAgY29sb3I6IG51bGwsXG4gICAgICBoaWdobGlnaHRDb2xvcjogbnVsbCxcbiAgICAgIGNvbHVtbnM6IG5ldyBDb2x1bW5TY2hlbWFWMSh7XG4gICAgICAgIHZlcnNpb246IFZFUlNJT05TLnYxLFxuICAgICAgICBrZXk6ICdjb2x1bW5zJ1xuICAgICAgfSksXG4gICAgICBpc1Zpc2libGU6IG51bGwsXG4gICAgICB2aXNDb25maWc6IG5ldyBWaXNDb25maWdTY2hlbWFWMSh7XG4gICAgICAgIHZlcnNpb246IFZFUlNJT05TLnYxXG4gICAgICB9KSxcbiAgICAgIGhpZGRlbjogbnVsbCxcbiAgICAgIHZpc2liaWxpdHlCeVpvb206IG51bGwsXG4gICAgICB0ZXh0TGFiZWw6IG5ldyBUZXh0TGFiZWxTY2hlbWFWMSh7XG4gICAgICAgIHZlcnNpb246IFZFUlNJT05TLnYxLFxuICAgICAgICBrZXk6ICd0ZXh0TGFiZWwnXG4gICAgICB9KVxuICAgIH1cbiAgfSksXG4gIGxlZ2VuZFNldHRpbmdzOiBuZXcgTGVnZW5kU2V0dGluZ3NWMSh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjEsXG4gICAga2V5OiAnbGVnZW5kU2V0dGluZ3MnXG4gIH0pLFxuICB2aXN1YWxDaGFubmVsczogbmV3IFZpc3VhbENoYW5uZWxTY2hlbWFWMSh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjEsXG4gICAga2V5OiAndmlzdWFsQ2hhbm5lbHMnXG4gIH0pXG59O1xuXG5leHBvcnQgY2xhc3MgTGF5ZXJTY2hlbWFWMCBleHRlbmRzIFNjaGVtYSB7XG4gIGtleSA9ICdsYXllcnMnO1xuXG4gIHNhdmUobGF5ZXJzLCBwYXJlbnRzKSB7XG4gICAgY29uc3QgW3Zpc1N0YXRlXSA9IHBhcmVudHMuc2xpY2UoLTEpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIFt0aGlzLmtleV06IHZpc1N0YXRlLmxheWVyT3JkZXIucmVkdWNlKChzYXZlZCwgaW5kZXgpID0+IHtcbiAgICAgICAgLy8gc2F2ZSBsYXllcnMgYWNjb3JkaW5nIHRvIHRoZWlyIHJlbmRlcmluZyBvcmRlclxuICAgICAgICBjb25zdCBsYXllciA9IGxheWVyc1tpbmRleF07XG4gICAgICAgIGlmIChsYXllci5pc1ZhbGlkVG9TYXZlKCkpIHtcbiAgICAgICAgICBzYXZlZC5wdXNoKHRoaXMuc2F2ZVByb3BlcnRpZXNPckFwcGx5U2NoZW1hKGxheWVyKS5sYXllcnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzYXZlZDtcbiAgICAgIH0sIFtdKVxuICAgIH07XG4gIH1cblxuICBsb2FkKGxheWVycykge1xuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiBsYXllcnMubWFwKGxheWVyID0+IHRoaXMubG9hZFByb3BlcnRpZXNPckFwcGx5U2NoZW1hKGxheWVyLCBsYXllcnMpLmxheWVycylcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGaWx0ZXJTY2hlbWFWMCBleHRlbmRzIFNjaGVtYSB7XG4gIGtleSA9ICdmaWx0ZXJzJztcbiAgc2F2ZShmaWx0ZXJzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZpbHRlcnM6IGZpbHRlcnNcbiAgICAgICAgLmZpbHRlcihpc1ZhbGlkRmlsdGVyVmFsdWUpXG4gICAgICAgIC5tYXAoZmlsdGVyID0+IHRoaXMuc2F2ZVByb3BlcnRpZXNPckFwcGx5U2NoZW1hKGZpbHRlcikuZmlsdGVycylcbiAgICB9O1xuICB9XG4gIGxvYWQoZmlsdGVycykge1xuICAgIHJldHVybiB7ZmlsdGVyc307XG4gIH1cbn1cblxuY29uc3QgaW50ZXJhY3Rpb25Qcm9wc1YwID0gWyd0b29sdGlwJywgJ2JydXNoJ107XG5cbmNsYXNzIEludGVyYWN0aW9uU2NoZW1hVjAgZXh0ZW5kcyBTY2hlbWEge1xuICBrZXkgPSAnaW50ZXJhY3Rpb25Db25maWcnO1xuXG4gIHNhdmUoaW50ZXJhY3Rpb25Db25maWcpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLnByb3BlcnRpZXMpXG4gICAgICA/IHtcbiAgICAgICAgICBbdGhpcy5rZXldOiB0aGlzLnByb3BlcnRpZXMucmVkdWNlKFxuICAgICAgICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgICAgICAgLi4uKGludGVyYWN0aW9uQ29uZmlnW2tleV0uZW5hYmxlZCA/IHtba2V5XTogaW50ZXJhY3Rpb25Db25maWdba2V5XS5jb25maWd9IDoge30pXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHt9XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICA6IHt9O1xuICB9XG4gIGxvYWQoaW50ZXJhY3Rpb25Db25maWcpIHtcbiAgICAvLyBjb252ZXJ0IHYwIC0+IHYxXG4gICAgLy8gcmV0dXJuIGVuYWJsZWQ6IGZhbHNlIGlmIGRpc2FibGVkLFxuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMucHJvcGVydGllcylcbiAgICAgID8ge1xuICAgICAgICAgIFt0aGlzLmtleV06IHRoaXMucHJvcGVydGllcy5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjdSwga2V5KSA9PiAoe1xuICAgICAgICAgICAgICAuLi5hY2N1LFxuICAgICAgICAgICAgICAuLi57XG4gICAgICAgICAgICAgICAgW2tleV06IHtcbiAgICAgICAgICAgICAgICAgIC4uLihpbnRlcmFjdGlvbkNvbmZpZ1trZXldIHx8IHt9KSxcbiAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IEJvb2xlYW4oaW50ZXJhY3Rpb25Db25maWdba2V5XSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAge31cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIDoge307XG4gIH1cbn1cblxuY29uc3QgaW50ZXJhY3Rpb25Qcm9wc1YxID0gWy4uLmludGVyYWN0aW9uUHJvcHNWMCwgJ2dlb2NvZGVyJywgJ2Nvb3JkaW5hdGUnXTtcblxuZXhwb3J0IGNsYXNzIEludGVyYWN0aW9uU2NoZW1hVjEgZXh0ZW5kcyBTY2hlbWEge1xuICBrZXkgPSAnaW50ZXJhY3Rpb25Db25maWcnO1xuXG4gIHNhdmUoaW50ZXJhY3Rpb25Db25maWcpIHtcbiAgICAvLyBzYXZlIGNvbmZpZyBldmVuIGlmIGRpc2FibGVkLFxuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMucHJvcGVydGllcylcbiAgICAgID8ge1xuICAgICAgICAgIFt0aGlzLmtleV06IHRoaXMucHJvcGVydGllcy5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjdSwga2V5KSA9PiAoe1xuICAgICAgICAgICAgICAuLi5hY2N1LFxuICAgICAgICAgICAgICBba2V5XToge1xuICAgICAgICAgICAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnW2tleV0uY29uZmlnLFxuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGludGVyYWN0aW9uQ29uZmlnW2tleV0uZW5hYmxlZFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHt9XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICA6IHt9O1xuICB9XG4gIGxvYWQoaW50ZXJhY3Rpb25Db25maWcpIHtcbiAgICBjb25zdCBtb2RpZmllZENvbmZpZyA9IGludGVyYWN0aW9uQ29uZmlnO1xuICAgIE9iamVjdC5rZXlzKGludGVyYWN0aW9uQ29uZmlnKS5mb3JFYWNoKGNvbmZpZ1R5cGUgPT4ge1xuICAgICAgaWYgKGNvbmZpZ1R5cGUgPT09ICd0b29sdGlwJykge1xuICAgICAgICBjb25zdCBmaWVsZHNUb1Nob3cgPSBtb2RpZmllZENvbmZpZ1tjb25maWdUeXBlXS5maWVsZHNUb1Nob3c7XG4gICAgICAgIGlmICghbm90TnVsbG9yVW5kZWZpbmVkKGZpZWxkc1RvU2hvdykpIHtcbiAgICAgICAgICByZXR1cm4ge1t0aGlzLmtleV06IG1vZGlmaWVkQ29uZmlnfTtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3Qua2V5cyhmaWVsZHNUb1Nob3cpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICBmaWVsZHNUb1Nob3dba2V5XSA9IGZpZWxkc1RvU2hvd1trZXldLm1hcChmaWVsZERhdGEgPT4ge1xuICAgICAgICAgICAgaWYgKCFmaWVsZERhdGEubmFtZSkge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG5hbWU6IGZpZWxkRGF0YSxcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IG51bGxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmaWVsZERhdGE7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgICByZXR1cm4ge1t0aGlzLmtleV06IG1vZGlmaWVkQ29uZmlnfTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZmlsdGVyUHJvcHNWMCA9IHtcbiAgZGF0YUlkOiBudWxsLFxuICBpZDogbnVsbCxcbiAgbmFtZTogbnVsbCxcbiAgdHlwZTogbnVsbCxcbiAgdmFsdWU6IG51bGwsXG4gIGVubGFyZ2VkOiBudWxsXG59O1xuXG5leHBvcnQgY2xhc3MgRGltZW5zaW9uRmllbGRTY2hlbWEgZXh0ZW5kcyBTY2hlbWEge1xuICBzYXZlKGZpZWxkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFt0aGlzLmtleV06IGZpZWxkID8gdGhpcy5zYXZlUHJvcGVydGllc09yQXBwbHlTY2hlbWEoZmllbGQpW3RoaXMua2V5XSA6IG51bGxcbiAgICB9O1xuICB9XG5cbiAgbG9hZChmaWVsZCkge1xuICAgIHJldHVybiB7W3RoaXMua2V5XTogZmllbGR9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTcGxpdE1hcHNTY2hlbWEgZXh0ZW5kcyBTY2hlbWEge1xuICBjb252ZXJ0TGF5ZXJTZXR0aW5ncyhhY2N1LCBba2V5LCB2YWx1ZV0pIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmFjY3UsXG4gICAgICAgIFtrZXldOiB2YWx1ZVxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmFjY3UsXG4gICAgICAgIFtrZXldOiBCb29sZWFuKHZhbHVlLmlzVmlzaWJsZSlcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBhY2N1O1xuICB9XG5cbiAgbG9hZChzcGxpdE1hcHMpIHtcbiAgICAvLyBwcmV2aW91cyBzcGxpdE1hcHMgU2NoZW1hIHtsYXllcnM6IHtsYXllcklkOiB7aXNWaXNpYmxlLCBpc0F2YWlsYWJsZX19fVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHNwbGl0TWFwcykgfHwgIXNwbGl0TWFwcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB7c3BsaXRNYXBzOiBbXX07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNwbGl0TWFwczogc3BsaXRNYXBzLm1hcChzZXR0aW5ncyA9PiAoe1xuICAgICAgICAuLi5zZXR0aW5ncyxcbiAgICAgICAgbGF5ZXJzOiBPYmplY3QuZW50cmllcyhzZXR0aW5ncy5sYXllcnMgfHwge30pLnJlZHVjZSh0aGlzLmNvbnZlcnRMYXllclNldHRpbmdzLCB7fSlcbiAgICAgIH0pKVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGZpbHRlclByb3BzVjEgPSB7XG4gIC4uLmZpbHRlclByb3BzVjAsXG4gIHBsb3RUeXBlOiBudWxsLFxuICBhbmltYXRpb25XaW5kb3c6IG51bGwsXG4gIHlBeGlzOiBuZXcgRGltZW5zaW9uRmllbGRTY2hlbWEoe1xuICAgIHZlcnNpb246IFZFUlNJT05TLnYxLFxuICAgIGtleTogJ3lBeGlzJyxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICBuYW1lOiBudWxsLFxuICAgICAgdHlwZTogbnVsbFxuICAgIH1cbiAgfSksXG5cbiAgLy8gcG9seWdvbiBmaWx0ZXIgcHJvcGVydGllc1xuICBsYXllcklkOiBudWxsLFxuICBzcGVlZDogbnVsbFxufTtcblxuZXhwb3J0IGNvbnN0IHByb3BlcnRpZXNWMCA9IHtcbiAgZmlsdGVyczogbmV3IEZpbHRlclNjaGVtYVYwKHtcbiAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MCxcbiAgICBwcm9wZXJ0aWVzOiBmaWx0ZXJQcm9wc1YwXG4gIH0pLFxuICBsYXllcnM6IG5ldyBMYXllclNjaGVtYVYwKHtcbiAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MCxcbiAgICBwcm9wZXJ0aWVzOiBsYXllclByb3BzVjBcbiAgfSksXG4gIGludGVyYWN0aW9uQ29uZmlnOiBuZXcgSW50ZXJhY3Rpb25TY2hlbWFWMCh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjAsXG4gICAgcHJvcGVydGllczogaW50ZXJhY3Rpb25Qcm9wc1YwXG4gIH0pLFxuICBsYXllckJsZW5kaW5nOiBudWxsXG59O1xuXG5leHBvcnQgY29uc3QgcHJvcGVydGllc1YxID0ge1xuICBmaWx0ZXJzOiBuZXcgRmlsdGVyU2NoZW1hVjAoe1xuICAgIHZlcnNpb246IFZFUlNJT05TLnYxLFxuICAgIHByb3BlcnRpZXM6IGZpbHRlclByb3BzVjFcbiAgfSksXG4gIGxheWVyczogbmV3IExheWVyU2NoZW1hVjAoe1xuICAgIHZlcnNpb246IFZFUlNJT05TLnYxLFxuICAgIHByb3BlcnRpZXM6IGxheWVyUHJvcHNWMVxuICB9KSxcbiAgaW50ZXJhY3Rpb25Db25maWc6IG5ldyBJbnRlcmFjdGlvblNjaGVtYVYxKHtcbiAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MSxcbiAgICBwcm9wZXJ0aWVzOiBpbnRlcmFjdGlvblByb3BzVjFcbiAgfSksXG4gIGxheWVyQmxlbmRpbmc6IG51bGwsXG4gIHNwbGl0TWFwczogbmV3IFNwbGl0TWFwc1NjaGVtYSh7XG4gICAga2V5OiAnc3BsaXRNYXBzJyxcbiAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MVxuICB9KSxcbiAgYW5pbWF0aW9uQ29uZmlnOiBuZXcgU2NoZW1hKHtcbiAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MSxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICBjdXJyZW50VGltZTogbnVsbCxcbiAgICAgIHNwZWVkOiBudWxsXG4gICAgfSxcbiAgICBrZXk6ICdhbmltYXRpb25Db25maWcnXG4gIH0pXG59O1xuXG5leHBvcnQgY29uc3QgdmlzU3RhdGVTY2hlbWFWMCA9IG5ldyBTY2hlbWEoe1xuICB2ZXJzaW9uOiBWRVJTSU9OUy52MCxcbiAgcHJvcGVydGllczogcHJvcGVydGllc1YwLFxuICBrZXk6ICd2aXNTdGF0ZSdcbn0pO1xuXG5leHBvcnQgY29uc3QgdmlzU3RhdGVTY2hlbWFWMSA9IG5ldyBTY2hlbWEoe1xuICB2ZXJzaW9uOiBWRVJTSU9OUy52MSxcbiAgcHJvcGVydGllczogcHJvcGVydGllc1YxLFxuICBrZXk6ICd2aXNTdGF0ZSdcbn0pO1xuXG5leHBvcnQgY29uc3QgdmlzU3RhdGVTY2hlbWEgPSB7XG4gIFtWRVJTSU9OUy52MF06IHtcbiAgICBzYXZlOiB0b1NhdmUgPT4gdmlzU3RhdGVTY2hlbWFWMC5zYXZlKHRvU2F2ZSksXG4gICAgbG9hZDogdG9Mb2FkID0+IHZpc1N0YXRlU2NoZW1hVjEubG9hZCh2aXNTdGF0ZVNjaGVtYVYwLmxvYWQodG9Mb2FkKS52aXNTdGF0ZSlcbiAgfSxcbiAgW1ZFUlNJT05TLnYxXTogdmlzU3RhdGVTY2hlbWFWMVxufTtcblxuLy8gdGVzdCBsb2FkIHYwXG5leHBvcnQgZGVmYXVsdCB2aXNTdGF0ZVNjaGVtYTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFvQkEsSUFBQUEsS0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsU0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsWUFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsYUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksT0FBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUssVUFBQSxHQUFBTixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU0sVUFBQSxHQUFBTixPQUFBO0FBMUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQVVBO0FBQ0E7QUFDQTs7QUFFTyxNQUFNTyxnQkFBZ0IsR0FBQUMsT0FBQSxDQUFBRCxnQkFBQSxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FB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VUFBVSxFQUFFMkM7RUFDZCxDQUFDLENBQUM7RUFDRmtCLGlCQUFpQixFQUFFLElBQUlJLG1CQUFtQixDQUFDO0lBQ3pDckIsT0FBTyxFQUFFdEYsa0JBQVEsQ0FBQ3VGLEVBQUU7SUFDcEI3QyxVQUFVLEVBQUVnRTtFQUNkLENBQUMsQ0FBQztFQUNGNkIsYUFBYSxFQUFFLElBQUk7RUFDbkJYLFNBQVMsRUFBRSxJQUFJSixlQUFlLENBQUM7SUFDN0JwSCxHQUFHLEVBQUUsV0FBVztJQUNoQmtGLE9BQU8sRUFBRXRGLGtCQUFRLENBQUN1RjtFQUNwQixDQUFDLENBQUM7RUFDRmtELGVBQWUsRUFBRSxJQUFJOUksZUFBTSxDQUFDO0lBQzFCMkYsT0FBTyxFQUFFdEYsa0JBQVEsQ0FBQ3VGLEVBQUU7SUFDcEI3QyxVQUFVLEVBQUU7TUFDVmdHLFdBQVcsRUFBRSxJQUFJO01BQ2pCTCxLQUFLLEVBQUU7SUFDVCxDQUFDO0lBQ0RqSSxHQUFHLEVBQUU7RUFDUCxDQUFDO0FBQ0gsQ0FBQztBQUVNLE1BQU11SSxnQkFBZ0IsR0FBQTlKLE9BQUEsQ0FBQThKLGdCQUFBLEdBQUcsSUFBSWhKLGVBQU0sQ0FBQztFQUN6QzJGLE9BQU8sRUFBRXRGLGtCQUFRLENBQUNDLEVBQUU7RUFDcEJ5QyxVQUFVLEVBQUU0RixZQUFZO0VBQ3hCbEksR0FBRyxFQUFFO0FBQ1AsQ0FBQyxDQUFDO0FBRUssTUFBTXdJLGdCQUFnQixHQUFBL0osT0FBQSxDQUFBK0osZ0JBQUEsR0FBRyxJQUFJakosZUFBTSxDQUFDO0VBQ3pDMkYsT0FBTyxFQUFFdEYsa0JBQVEsQ0FBQ3VGLEVBQUU7RUFDcEI3QyxVQUFVLEVBQUU4RixZQUFZO0VBQ3hCcEksR0FBRyxFQUFFO0FBQ1AsQ0FBQyxDQUFDO0FBRUssTUFBTXlJLGNBQWMsR0FBQWhLLE9BQUEsQ0FBQWdLLGNBQUEsR0FBRztFQUM1QixDQUFDN0ksa0JBQVEsQ0FBQ0MsRUFBRSxHQUFHO0lBQ2JDLElBQUksRUFBRTRJLE1BQU0sSUFBSUgsZ0JBQWdCLENBQUN6SSxJQUFJLENBQUM0SSxNQUFNLENBQUM7SUFDN0N4SSxJQUFJLEVBQUV5SSxNQUFNLElBQUlILGdCQUFnQixDQUFDdEksSUFBSSxDQUFDcUksZ0JBQWdCLENBQUNySSxJQUFJLENBQUN5SSxNQUFNLENBQUMsQ0FBQ3BELFFBQVE7RUFDOUUsQ0FBQztFQUNELENBQUMzRixrQkFBUSxDQUFDdUYsRUFBRSxHQUFHcUQ7QUFDakIsQ0FBQzs7QUFFRDtBQUFBLElBQUFJLFFBQUEsR0FBQW5LLE9BQUEsQ0FBQWtCLE9BQUEsR0FDZThJLGNBQWMiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
885
|
+
var _default = exports["default"] = visStateSchema;
|
|
886
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcGljayIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3ZlcnNpb25zIiwiX2ZpbHRlclV0aWxzIiwiX2xheWVyRmFjdG9yeSIsIl9zY2hlbWEiLCJfY2xvbmVEZWVwIiwiX2RhdGFVdGlscyIsIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX2NhbGxTdXBlciIsIl9nZXRQcm90b3R5cGVPZjIiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImNvbnN0cnVjdG9yIiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJjYWxsIiwiZGltZW5zaW9uUHJvcHNWMCIsImV4cG9ydHMiLCJnZW9qc29uU2l6ZUZpZWxkVjBUb1YxIiwiY29uZmlnIiwiZGVmYXVsdFJhaXVkcyIsImRlZmF1bHRSYWRpdXNSYW5nZSIsInZpc0NvbmZpZyIsImV4dHJ1ZGVkIiwic3Ryb2tlZCIsInJhZGl1cyIsInJhZGl1c1JhbmdlIiwic29tZSIsImQiLCJpIiwiRGltZW5zaW9uRmllbGRTY2hlbWFWMCIsIl9TY2hlbWEiLCJfdGhpcyIsIl9jbGFzc0NhbGxDaGVjazIiLCJfbGVuIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImNvbmNhdCIsIlZFUlNJT05TIiwidjAiLCJfaW5oZXJpdHMyIiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsInZhbHVlIiwic2F2ZSIsImZpZWxkIiwic2F2ZVByb3BlcnRpZXNPckFwcGx5U2NoZW1hIiwibG9hZCIsInBhcmVudHMiLCJhY2N1bXVsYXRlZCIsIl9wYXJlbnRzJHNsaWNlIiwic2xpY2UiLCJfcGFyZW50cyRzbGljZTIiLCJfc2xpY2VkVG9BcnJheTIiLCJmaWVsZE5hbWUiLCJ0eXBlIiwidmlzdWFsQ2hhbm5lbHMiLCJTY2hlbWEiLCJEaW1lbnNpb25TY2FsZVNjaGVtYVYwIiwiX1NjaGVtYTIiLCJfdGhpczIiLCJfbGVuMiIsIl9rZXkyIiwic2NhbGUiLCJfcGFyZW50cyRzbGljZTMiLCJfcGFyZW50cyRzbGljZTQiLCJMYXllckNvbmZpZ1NjaGVtYVYwIiwiX1NjaGVtYTMiLCJfdGhpczMiLCJfbGVuMyIsIl9rZXkzIiwic2F2ZWQiLCJMYXllckNvbHVtbnNTY2hlbWFWMCIsIl9TY2hlbWE0IiwiX3RoaXM0IiwiX2xlbjQiLCJfa2V5NCIsImNvbHVtbnMiLCJyZWR1Y2UiLCJhY2N1IiwiTGF5ZXJDb25maWdUb1Zpc0NvbmZpZ1NjaGVtYVYwIiwiX1NjaGVtYTUiLCJfdGhpczUiLCJfbGVuNSIsIl9rZXk1IiwiYWNjdW11bGF0ZWRDb25maWciLCJMYXllclZpc0NvbmZpZ1NjaGVtYVYwIiwiX1NjaGVtYTYiLCJfdGhpczYiLCJfbGVuNiIsIl9rZXk2IiwiYWNjdW11bGF0b3IiLCJfcGFyZW50cyRzbGljZTUiLCJfcGFyZW50cyRzbGljZTYiLCJyZW5hbWUiLCJnZW9qc29uIiwiZWxldmF0aW9uUmFuZ2UiLCJwcm9wVG9SZW5hbWUiLCJMYXllckNvbmZpZ1NjaGVtYURlbGV0ZVYwIiwiX1NjaGVtYTciLCJfdGhpczciLCJfbGVuNyIsIl9rZXk3IiwibGF5ZXJQcm9wc1YwIiwiaWQiLCJkYXRhSWQiLCJsYWJlbCIsImNvbG9yIiwiaXNWaXNpYmxlIiwiaGlkZGVuIiwidmlzaWJpbGl0eUJ5Wm9vbSIsImNvbG9yRmllbGQiLCJwcm9wZXJ0aWVzIiwiY29sb3JTY2FsZSIsInNpemVGaWVsZCIsInNpemVTY2FsZSIsImVuYWJsZTNkIiwiY29sb3JBZ2dyZWdhdGlvbiIsInNpemVBZ2dyZWdhdGlvbiIsImlzQWdncmVnYXRlZCIsIkNvbHVtblNjaGVtYVYxIiwiX1NjaGVtYTgiLCJzdGF0ZSIsImNrZXkiLCJUZXh0TGFiZWxTY2hlbWFWMSIsIl9TY2hlbWE5IiwidGV4dExhYmVsIiwibWFwIiwidGwiLCJwaWNrIiwiaXNBcnJheSIsInZpc3VhbENoYW5uZWxNb2RpZmljYXRpb25WMSIsInZjIiwiX3BhcmVudHMkc2xpY2U3IiwiX3BhcmVudHMkc2xpY2U4IiwibGF5ZXIiLCJpc09sZCIsImhhc093blByb3BlcnR5IiwiaXNQb2ludCIsInJhZGl1c0ZpZWxkIiwiTEFZRVJfVklTX0NPTkZJR1MiLCJkZWZhdWx0VmFsdWUiLCJzdHJva2VDb2xvckZpZWxkIiwic3Ryb2tlQ29sb3JTY2FsZSIsIlZpc3VhbENoYW5uZWxTY2hlbWFWMSIsIl9TY2hlbWExMCIsIl9wYXJlbnRzJHNsaWNlOSIsIl9wYXJlbnRzJHNsaWNlMTAiLCJfcGFyZW50cyRzbGljZTExIiwiX3BhcmVudHMkc2xpY2UxMiIsIm1vZGlmaWVkIiwiTGVnZW5kU2V0dGluZ3NWMSIsIl9TY2hlbWExMSIsImxlZ2VuZFNldHRpbmdzIiwibHMiLCJ2aXNDb25maWdNb2RpZmljYXRpb25WMSIsInBvaW50IiwiX3BhcmVudHMkc2xpY2UxMyIsIl9wYXJlbnRzJHNsaWNlMTQiLCJzdHJva2VDb2xvciIsInN0cm9rZUNvbG9yUmFuZ2UiLCJjbG9uZURlZXAiLCJjb2xvclJhbmdlIiwib3V0bGluZSIsImZpbGxlZCIsIl9wYXJlbnRzJHNsaWNlMTUiLCJfcGFyZW50cyRzbGljZTE2IiwiVmlzQ29uZmlnU2NoZW1hVjEiLCJfU2NoZW1hMTIiLCJfdGhpczgiLCJfbGVuOCIsIl9rZXk4IiwiX3BhcmVudHMkc2xpY2UxNyIsIl9wYXJlbnRzJHNsaWNlMTgiLCJsYXllclByb3BzVjEiLCJ2ZXJzaW9uIiwidjEiLCJoaWdobGlnaHRDb2xvciIsIkxheWVyU2NoZW1hVjAiLCJfU2NoZW1hMTMiLCJfdGhpczkiLCJfbGVuOSIsIl9rZXk5IiwibGF5ZXJzIiwiX3RoaXMxMCIsIl9wYXJlbnRzJHNsaWNlMTkiLCJfcGFyZW50cyRzbGljZTIwIiwidmlzU3RhdGUiLCJsYXllck9yZGVyIiwiaW5kZXgiLCJpc1ZhbGlkVG9TYXZlIiwiX3RoaXMxMSIsImxvYWRQcm9wZXJ0aWVzT3JBcHBseVNjaGVtYSIsIkZpbHRlclNjaGVtYVYwIiwiX1NjaGVtYTE0IiwiX3RoaXMxMiIsIl9sZW4xMCIsIl9rZXkxMCIsImZpbHRlcnMiLCJfdGhpczEzIiwiaXNWYWxpZEZpbHRlclZhbHVlIiwiaW50ZXJhY3Rpb25Qcm9wc1YwIiwiSW50ZXJhY3Rpb25TY2hlbWFWMCIsIl9TY2hlbWExNSIsIl90aGlzMTQiLCJfbGVuMTEiLCJfa2V5MTEiLCJpbnRlcmFjdGlvbkNvbmZpZyIsImVuYWJsZWQiLCJpbnRlcmFjdGlvblByb3BzVjEiLCJJbnRlcmFjdGlvblNjaGVtYVYxIiwiX1NjaGVtYTE2IiwiX3RoaXMxNSIsIl9sZW4xMiIsIl9rZXkxMiIsIl90aGlzMTYiLCJtb2RpZmllZENvbmZpZyIsImNvbmZpZ1R5cGUiLCJmaWVsZHNUb1Nob3ciLCJub3ROdWxsb3JVbmRlZmluZWQiLCJmaWVsZERhdGEiLCJuYW1lIiwiZm9ybWF0IiwidW5kZWZpbmVkIiwiZmlsdGVyUHJvcHNWMCIsImVubGFyZ2VkIiwiRGltZW5zaW9uRmllbGRTY2hlbWEiLCJfU2NoZW1hMTciLCJTcGxpdE1hcHNTY2hlbWEiLCJfU2NoZW1hMTgiLCJjb252ZXJ0TGF5ZXJTZXR0aW5ncyIsIl9yZWYxOSIsIl9yZWYyMCIsIl90eXBlb2YyIiwiaXNBdmFpbGFibGUiLCJzcGxpdE1hcHMiLCJfdGhpczE3Iiwic2V0dGluZ3MiLCJlbnRyaWVzIiwiZmlsdGVyUHJvcHNWMSIsInBsb3RUeXBlIiwiYW5pbWF0aW9uV2luZG93IiwieUF4aXMiLCJsYXllcklkIiwic3BlZWQiLCJwcm9wZXJ0aWVzVjAiLCJsYXllckJsZW5kaW5nIiwicHJvcGVydGllc1YxIiwiYW5pbWF0aW9uQ29uZmlnIiwiY3VycmVudFRpbWUiLCJ2aXNTdGF0ZVNjaGVtYVYwIiwidmlzU3RhdGVTY2hlbWFWMSIsInZpc1N0YXRlU2NoZW1hIiwidG9TYXZlIiwidG9Mb2FkIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NoZW1hcy92aXMtc3RhdGUtc2NoZW1hLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAyMiBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCBwaWNrIGZyb20gJ2xvZGFzaC9waWNrJztcbmltcG9ydCB7VkVSU0lPTlN9IGZyb20gJy4vdmVyc2lvbnMnO1xuaW1wb3J0IHtpc1ZhbGlkRmlsdGVyVmFsdWV9IGZyb20gJ3V0aWxzL2ZpbHRlci11dGlscyc7XG5pbXBvcnQge0xBWUVSX1ZJU19DT05GSUdTfSBmcm9tICdsYXllcnMvbGF5ZXItZmFjdG9yeSc7XG5pbXBvcnQgU2NoZW1hIGZyb20gJy4vc2NoZW1hJztcbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnbG9kYXNoL2Nsb25lRGVlcCc7XG5pbXBvcnQge25vdE51bGxvclVuZGVmaW5lZH0gZnJvbSAndXRpbHMvZGF0YS11dGlscyc7XG5cbi8qKlxuICogVjAgU2NoZW1hXG4gKi9cblxuZXhwb3J0IGNvbnN0IGRpbWVuc2lvblByb3BzVjAgPSBbJ25hbWUnLCAndHlwZSddO1xuXG5leHBvcnQgdHlwZSBtb2RpZmllZFR5cGUgPSB7XG4gIHN0cm9rZUNvbG9yPzogYW55O1xuICBzdHJva2VDb2xvclJhbmdlPzogYW55O1xuICBmaWxsZWQ/OiBib29sZWFuO1xuICBzdHJva2VkPzogYm9vbGVhbjtcbn07XG5cbi8vIGluIHYwIGdlb2pzb24gdGhlcmUgaXMgb25seSBzaXplRmllbGRcblxuLy8gaW4gdjEgZ2VvanNvblxuLy8gc3Ryb2tlIGJhc2Ugb24gLT4gc2l6ZUZpZWxkXG4vLyBoZWlnaHQgYmFzZWQgb24gLT4gaGVpZ2h0RmllbGRcbi8vIHJhZGl1cyBiYXNlZCBvbiAtPiByYWRpdXNGaWVsZFxuLy8gaGVyZSB3ZSBtYWtlIG91ciB3aXJlZHN0IGd1ZXNzIG9uIHdoaWNoIGNoYW5uZWwgc2l6ZUZpZWxkIGJlbG9uZ3MgdG9cbmZ1bmN0aW9uIGdlb2pzb25TaXplRmllbGRWMFRvVjEoY29uZmlnKSB7XG4gIGNvbnN0IGRlZmF1bHRSYWl1ZHMgPSAxMDtcbiAgY29uc3QgZGVmYXVsdFJhZGl1c1JhbmdlID0gWzAsIDUwXTtcblxuICAvLyBpZiBleHRydWRlZCwgc2l6ZUZpZWxkIGlzIG1vc3QgbGlrZWx5IHVzZWQgZm9yIGhlaWdodFxuICBpZiAoY29uZmlnLnZpc0NvbmZpZy5leHRydWRlZCkge1xuICAgIHJldHVybiAnaGVpZ2h0RmllbGQnO1xuICB9XG5cbiAgLy8gaWYgc2hvdyBzdHJva2UgZW5hYmxlZCwgc2l6ZUZpZWxkIGlzIG1vc3QgbGlrZWx5IHVzZWQgZm9yIHN0cm9rZVxuICBpZiAoY29uZmlnLnZpc0NvbmZpZy5zdHJva2VkKSB7XG4gICAgcmV0dXJuICdzaXplRmllbGQnO1xuICB9XG5cbiAgLy8gaWYgcmFkaXVzIGNoYW5nZWQsIG9yIHJhZGl1cyBSYW5nZSBDaGFuZ2VkLCBzaXplRmllbGQgaXMgbW9zdCBsaWtlbHkgdXNlZCBmb3IgcmFkaXVzXG4gIC8vIHRoaXMgaXMgdGhlIG1vc3QgdW5yZWxpYWJsZSBndWVzcywgdGhhdCdzIHdoeSB3ZSBwdXQgaXQgaW4gdGhlIGVuZFxuICBpZiAoXG4gICAgY29uZmlnLnZpc0NvbmZpZy5yYWRpdXMgIT09IGRlZmF1bHRSYWl1ZHMgfHxcbiAgICBjb25maWcudmlzQ29uZmlnLnJhZGl1c1JhbmdlLnNvbWUoKGQsIGkpID0+IGQgIT09IGRlZmF1bHRSYWRpdXNSYW5nZVtpXSlcbiAgKSB7XG4gICAgcmV0dXJuICdyYWRpdXNGaWVsZCc7XG4gIH1cblxuICByZXR1cm4gJ3NpemVGaWVsZCc7XG59XG5cbi8vIGNvbnZlcnQgdjAgdG8gdjEgbGF5ZXIgY29uZmlnXG5jbGFzcyBEaW1lbnNpb25GaWVsZFNjaGVtYVYwIGV4dGVuZHMgU2NoZW1hIHtcbiAgdmVyc2lvbiA9IFZFUlNJT05TLnYwO1xuICBzYXZlKGZpZWxkKSB7XG4gICAgLy8gc2hvdWxkIG5vdCBiZSBjYWxsZWQgYW55bW9yZVxuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiBmaWVsZCAhPT0gbnVsbCA/IHRoaXMuc2F2ZVByb3BlcnRpZXNPckFwcGx5U2NoZW1hKGZpZWxkKVt0aGlzLmtleV0gOiBudWxsXG4gICAgfTtcbiAgfVxuXG4gIGxvYWQoZmllbGQsIHBhcmVudHMsIGFjY3VtdWxhdGVkKSB7XG4gICAgY29uc3QgW2NvbmZpZ10gPSBwYXJlbnRzLnNsaWNlKC0xKTtcbiAgICBsZXQgZmllbGROYW1lID0gdGhpcy5rZXk7XG4gICAgaWYgKGNvbmZpZy50eXBlID09PSAnZ2VvanNvbicgJiYgdGhpcy5rZXkgPT09ICdzaXplRmllbGQnICYmIGZpZWxkKSB7XG4gICAgICBmaWVsZE5hbWUgPSBnZW9qc29uU2l6ZUZpZWxkVjBUb1YxKGNvbmZpZyk7XG4gICAgfVxuICAgIC8vIGZvbGQgaW50byB2aXN1YWxDaGFubmVscyB0byBiZSBsb2FkIGJ5IFZpc3VhbENoYW5uZWxTY2hlbWFWMVxuICAgIHJldHVybiB7XG4gICAgICB2aXN1YWxDaGFubmVsczoge1xuICAgICAgICAuLi4oYWNjdW11bGF0ZWQudmlzdWFsQ2hhbm5lbHMgfHwge30pLFxuICAgICAgICBbZmllbGROYW1lXTogZmllbGRcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbmNsYXNzIERpbWVuc2lvblNjYWxlU2NoZW1hVjAgZXh0ZW5kcyBTY2hlbWEge1xuICB2ZXJzaW9uID0gVkVSU0lPTlMudjA7XG4gIHNhdmUoc2NhbGUpIHtcbiAgICByZXR1cm4ge1t0aGlzLmtleV06IHNjYWxlfTtcbiAgfVxuICBsb2FkKHNjYWxlLCBwYXJlbnRzLCBhY2N1bXVsYXRlZCkge1xuICAgIGNvbnN0IFtjb25maWddID0gcGFyZW50cy5zbGljZSgtMSk7XG4gICAgLy8gZm9sZCBpbnRvIHZpc3VhbENoYW5uZWxzIHRvIGJlIGxvYWQgYnkgVmlzdWFsQ2hhbm5lbFNjaGVtYVYxXG4gICAgaWYgKHRoaXMua2V5ID09PSAnc2l6ZVNjYWxlJyAmJiBjb25maWcudHlwZSA9PT0gJ2dlb2pzb24nKSB7XG4gICAgICAvLyBzaXplU2NhbGUgbm93IHNwbGl0IGludG8gcmFkaXVzU2NhbGUsIGhlaWdodFNjYWxlXG4gICAgICAvLyBubyB1c2VyIGN1c3RvbWl6YXRpb24sIGp1c3QgdXNlIGRlZmF1bHRcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdmlzdWFsQ2hhbm5lbHM6IHtcbiAgICAgICAgLi4uKGFjY3VtdWxhdGVkLnZpc3VhbENoYW5uZWxzIHx8IHt9KSxcbiAgICAgICAgW3RoaXMua2V5XTogc2NhbGVcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbi8vIHVzZWQgdG8gY29udmVydCB2MCB0byB2MSBsYXllciBjb25maWdcbmNsYXNzIExheWVyQ29uZmlnU2NoZW1hVjAgZXh0ZW5kcyBTY2hlbWEge1xuICB2ZXJzaW9uID0gVkVSU0lPTlMudjA7XG4gIGxvYWQoc2F2ZWQsIHBhcmVudHMsIGFjY3VtdWxhdGVkKSB7XG4gICAgLy8gZm9sZCB2MCBsYXllciBwcm9wZXJ0eSBpbnRvIGNvbmZpZy5rZXlcbiAgICByZXR1cm4ge1xuICAgICAgY29uZmlnOiB7XG4gICAgICAgIC4uLihhY2N1bXVsYXRlZC5jb25maWcgfHwge30pLFxuICAgICAgICBbdGhpcy5rZXldOiBzYXZlZFxuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuLy8gdXNlZCB0byBjb252ZXJ0IHYwIHRvIHYxIGxheWVyIGNvbHVtbnNcbi8vIG9ubHkgcmV0dXJuIGNvbHVtbiB2YWx1ZSBmb3IgZWFjaCBjb2x1bW5cbmNsYXNzIExheWVyQ29sdW1uc1NjaGVtYVYwIGV4dGVuZHMgU2NoZW1hIHtcbiAgdmVyc2lvbiA9IFZFUlNJT05TLnYwO1xuICBsb2FkKHNhdmVkLCBwYXJlbnRzLCBhY2N1bXVsYXRlZCkge1xuICAgIC8vIGZvbGQgdjAgbGF5ZXIgcHJvcGVydHkgaW50byBjb25maWcua2V5LCBmbGF0dGVuIGNvbHVtbnNcbiAgICByZXR1cm4ge1xuICAgICAgY29uZmlnOiB7XG4gICAgICAgIC4uLihhY2N1bXVsYXRlZC5jb25maWcgfHwge30pLFxuICAgICAgICBjb2x1bW5zOiBPYmplY3Qua2V5cyhzYXZlZCkucmVkdWNlKFxuICAgICAgICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAgICAgICAuLi5hY2N1LFxuICAgICAgICAgICAgW2tleV06IHNhdmVkW2tleV0udmFsdWVcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB7fVxuICAgICAgICApXG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG4vLyB1c2VkIHRvIGNvbnZlcnQgdjAgdG8gdjEgbGF5ZXIgY29uZmlnLnZpc0NvbmZpZ1xuY2xhc3MgTGF5ZXJDb25maWdUb1Zpc0NvbmZpZ1NjaGVtYVYwIGV4dGVuZHMgU2NoZW1hIHtcbiAgdmVyc2lvbiA9IFZFUlNJT05TLnYwO1xuICBsb2FkKHNhdmVkLCBwYXJlbnRzLCBhY2N1bXVsYXRlZCkge1xuICAgIC8vIGZvbGQgdjAgbGF5ZXIgcHJvcGVydHkgaW50byBjb25maWcudmlzQ29uZmlnXG4gICAgY29uc3QgYWNjdW11bGF0ZWRDb25maWcgPSBhY2N1bXVsYXRlZC5jb25maWcgfHwge307XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICAuLi5hY2N1bXVsYXRlZENvbmZpZyxcbiAgICAgICAgdmlzQ29uZmlnOiB7XG4gICAgICAgICAgLi4uKGFjY3VtdWxhdGVkQ29uZmlnLnZpc0NvbmZpZyB8fCB7fSksXG4gICAgICAgICAgW3RoaXMua2V5XTogc2F2ZWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuY2xhc3MgTGF5ZXJWaXNDb25maWdTY2hlbWFWMCBleHRlbmRzIFNjaGVtYSB7XG4gIHZlcnNpb24gPSBWRVJTSU9OUy52MDtcbiAga2V5ID0gJ3Zpc0NvbmZpZyc7XG5cbiAgbG9hZCh2aXNDb25maWcsIHBhcmVudHMsIGFjY3VtdWxhdG9yKSB7XG4gICAgY29uc3QgW2NvbmZpZ10gPSBwYXJlbnRzLnNsaWNlKC0xKTtcbiAgICBjb25zdCByZW5hbWUgPSB7XG4gICAgICBnZW9qc29uOiB7XG4gICAgICAgIGV4dHJ1ZGVkOiAnZW5hYmxlM2QnLFxuICAgICAgICBlbGV2YXRpb25SYW5nZTogJ2hlaWdodFJhbmdlJ1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoY29uZmlnLnR5cGUgaW4gcmVuYW1lKSB7XG4gICAgICBjb25zdCBwcm9wVG9SZW5hbWUgPSByZW5hbWVbY29uZmlnLnR5cGVdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgLi4uKGFjY3VtdWxhdG9yLmNvbmZpZyB8fCB7fSksXG4gICAgICAgICAgdmlzQ29uZmlnOiBPYmplY3Qua2V5cyh2aXNDb25maWcpLnJlZHVjZShcbiAgICAgICAgICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAgICAgICAgIC4uLmFjY3UsXG4gICAgICAgICAgICAgIC4uLihwcm9wVG9SZW5hbWVba2V5XVxuICAgICAgICAgICAgICAgID8ge1twcm9wVG9SZW5hbWVba2V5XV06IHZpc0NvbmZpZ1trZXldfVxuICAgICAgICAgICAgICAgIDoge1trZXldOiB2aXNDb25maWdba2V5XX0pXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHt9XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjb25maWc6IHtcbiAgICAgICAgLi4uKGFjY3VtdWxhdG9yLmNvbmZpZyB8fCB7fSksXG4gICAgICAgIHZpc0NvbmZpZ1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuY2xhc3MgTGF5ZXJDb25maWdTY2hlbWFEZWxldGVWMCBleHRlbmRzIFNjaGVtYSB7XG4gIHZlcnNpb24gPSBWRVJTSU9OUy52MDtcbiAgbG9hZCh2YWx1ZSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG4vKipcbiAqIFYwIC0+IFYxIENoYW5nZXNcbiAqIC0gbGF5ZXIgaXMgbm93IGEgY2xhc3NcbiAqIC0gY29uZmlnIHNhdmVkIGluIGEgY29uZmlnIG9iamVjdFxuICogLSBpZCwgdHlwZSwgaXNBZ2dyZWdhdGVkIGlzIG91dHNpZGUgbGF5ZXIuY29uZmlnXG4gKiAtIHZpc3VhbENoYW5uZWxzIGlzIG91dHNpZGUgY29uZmlnLCBpdCBkZWZpbmVzIGF2YWlsYWJsZSB2aXN1YWwgY2hhbm5lbCBhbmRcbiAqICAgcHJvcGVydHkgbmFtZXMgZm9yIGZpZWxkLCBzY2FsZSwgZG9tYWluIGFuZCByYW5nZSBvZiBlYWNoIHZpc3VhbCBjaGFuZWwuXG4gKiAtIGVuYWJsZTNkLCBjb2xvckFnZ3JlZ2F0aW9uIGFuZCBzaXplQWdncmVnYXRpb24gYXJlIG1vdmVkIGludG8gdmlzQ29uZmlnXG4gKiAtIEdlb2pzb25MYXllciAtIGFkZGVkIGhlaWdodCwgcmFkaXVzIHNwZWNpZmljIHByb3BlcnRpZXNcbiAqL1xuXG5leHBvcnQgY29uc3QgbGF5ZXJQcm9wc1YwID0ge1xuICBpZDogbnVsbCxcbiAgdHlwZTogbnVsbCxcblxuICAvLyBtb3ZlIGludG8gbGF5ZXIuY29uZmlnXG4gIGRhdGFJZDogbmV3IExheWVyQ29uZmlnU2NoZW1hVjAoe2tleTogJ2RhdGFJZCd9KSxcbiAgbGFiZWw6IG5ldyBMYXllckNvbmZpZ1NjaGVtYVYwKHtrZXk6ICdsYWJlbCd9KSxcbiAgY29sb3I6IG5ldyBMYXllckNvbmZpZ1NjaGVtYVYwKHtrZXk6ICdjb2xvcid9KSxcbiAgaXNWaXNpYmxlOiBuZXcgTGF5ZXJDb25maWdTY2hlbWFWMCh7a2V5OiAnaXNWaXNpYmxlJ30pLFxuICBoaWRkZW46IG5ldyBMYXllckNvbmZpZ1NjaGVtYVYwKHtrZXk6ICdoaWRkZW4nfSksXG4gIHZpc2liaWxpdHlCeVpvb206IG5ldyBMYXllckNvbmZpZ1NjaGVtYVYwKHtrZXk6ICd2aXNpYmlsaXR5Qnlab29tJ30pLFxuXG4gIC8vIGNvbnZlcnQgdmlzQ29uZmlnXG4gIHZpc0NvbmZpZzogbmV3IExheWVyVmlzQ29uZmlnU2NoZW1hVjAoe2tleTogJ3Zpc0NvbmZpZyd9KSxcblxuICAvLyBtb3ZlIGludG8gbGF5ZXIuY29uZmlnXG4gIC8vIGZsYXR0ZW5cbiAgY29sdW1uczogbmV3IExheWVyQ29sdW1uc1NjaGVtYVYwKCksXG5cbiAgLy8gc2F2ZSBpbnRvIHZpc3VhbENoYW5uZWxzXG4gIGNvbG9yRmllbGQ6IG5ldyBEaW1lbnNpb25GaWVsZFNjaGVtYVYwKHtcbiAgICBwcm9wZXJ0aWVzOiBkaW1lbnNpb25Qcm9wc1YwLFxuICAgIGtleTogJ2NvbG9yRmllbGQnXG4gIH0pLFxuICBjb2xvclNjYWxlOiBuZXcgRGltZW5zaW9uU2NhbGVTY2hlbWFWMCh7XG4gICAga2V5OiAnY29sb3JTY2FsZSdcbiAgfSksXG4gIHNpemVGaWVsZDogbmV3IERpbWVuc2lvbkZpZWxkU2NoZW1hVjAoe1xuICAgIHByb3BlcnRpZXM6IGRpbWVuc2lvblByb3BzVjAsXG4gICAga2V5OiAnc2l6ZUZpZWxkJ1xuICB9KSxcbiAgc2l6ZVNjYWxlOiBuZXcgRGltZW5zaW9uU2NhbGVTY2hlbWFWMCh7XG4gICAga2V5OiAnc2l6ZVNjYWxlJ1xuICB9KSxcblxuICAvLyBtb3ZlIGludG8gY29uZmlnLnZpc0NvbmZpZ1xuICBlbmFibGUzZDogbmV3IExheWVyQ29uZmlnVG9WaXNDb25maWdTY2hlbWFWMCh7a2V5OiAnZW5hYmxlM2QnfSksXG4gIGNvbG9yQWdncmVnYXRpb246IG5ldyBMYXllckNvbmZpZ1RvVmlzQ29uZmlnU2NoZW1hVjAoe1xuICAgIGtleTogJ2NvbG9yQWdncmVnYXRpb24nXG4gIH0pLFxuICBzaXplQWdncmVnYXRpb246IG5ldyBMYXllckNvbmZpZ1RvVmlzQ29uZmlnU2NoZW1hVjAoe2tleTogJ3NpemVBZ2dyZWdhdGlvbid9KSxcblxuICAvLyBkZWxldGVcbiAgaXNBZ2dyZWdhdGVkOiBuZXcgTGF5ZXJDb25maWdTY2hlbWFEZWxldGVWMCgpXG59O1xuXG4vKipcbiAqIFYxIFNjaGVtYVxuICovXG5jbGFzcyBDb2x1bW5TY2hlbWFWMSBleHRlbmRzIFNjaGVtYSB7XG4gIHNhdmUoY29sdW1ucywgc3RhdGUpIHtcbiAgICAvLyBzdGFydGluZyBmcm9tIHYxLCBvbmx5IHNhdmUgY29sdW1uIHZhbHVlXG4gICAgLy8gZmllbGRJZHggd2lsbCBiZSBjYWxjdWxhdGVkIGR1cmluZyBtZXJnZVxuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiBPYmplY3Qua2V5cyhjb2x1bW5zKS5yZWR1Y2UoXG4gICAgICAgIChhY2N1LCBja2V5KSA9PiAoe1xuICAgICAgICAgIC4uLmFjY3UsXG4gICAgICAgICAgW2NrZXldOiBjb2x1bW5zW2NrZXldLnZhbHVlXG4gICAgICAgIH0pLFxuICAgICAgICB7fVxuICAgICAgKVxuICAgIH07XG4gIH1cblxuICBsb2FkKGNvbHVtbnMpIHtcbiAgICByZXR1cm4ge2NvbHVtbnN9O1xuICB9XG59XG5cbmNsYXNzIFRleHRMYWJlbFNjaGVtYVYxIGV4dGVuZHMgU2NoZW1hIHtcbiAgc2F2ZSh0ZXh0TGFiZWwpIHtcbiAgICByZXR1cm4ge1xuICAgICAgW3RoaXMua2V5XTogdGV4dExhYmVsLm1hcCh0bCA9PiAoe1xuICAgICAgICAuLi50bCxcbiAgICAgICAgZmllbGQ6IHRsLmZpZWxkID8gcGljayh0bC5maWVsZCwgWyduYW1lJywgJ3R5cGUnXSkgOiBudWxsXG4gICAgICB9KSlcbiAgICB9O1xuICB9XG5cbiAgbG9hZCh0ZXh0TGFiZWwpIHtcbiAgICByZXR1cm4ge3RleHRMYWJlbDogQXJyYXkuaXNBcnJheSh0ZXh0TGFiZWwpID8gdGV4dExhYmVsIDogW3RleHRMYWJlbF19O1xuICB9XG59XG5cbmNvbnN0IHZpc3VhbENoYW5uZWxNb2RpZmljYXRpb25WMSA9IHtcbiAgZ2VvanNvbjogKHZjLCBwYXJlbnRzLCBhY2N1bXVsYXRvcikgPT4ge1xuICAgIGNvbnN0IFtsYXllcl0gPSBwYXJlbnRzLnNsaWNlKC0xKTtcbiAgICBjb25zdCBpc09sZCA9ICF2Yy5oYXNPd25Qcm9wZXJ0eSgnc3Ryb2tlQ29sb3JGaWVsZCcpO1xuICAgIC8vIG1ha2Ugb3VyIGJlc3QgZ3Vlc3MgaWYgdGhpcyBnZW9qc29uIGxheWVyIGNvbnRhaW5zIHBvaW50XG4gICAgY29uc3QgaXNQb2ludCA9XG4gICAgICB2Yy5yYWRpdXNGaWVsZCB8fCBsYXllci5jb25maWcudmlzQ29uZmlnLnJhZGl1cyAhPT0gTEFZRVJfVklTX0NPTkZJR1MucmFkaXVzLmRlZmF1bHRWYWx1ZTtcblxuICAgIGlmIChpc09sZCAmJiAhaXNQb2ludCAmJiBsYXllci5jb25maWcudmlzQ29uZmlnLnN0cm9rZWQpIHtcbiAgICAgIC8vIGlmIHN0cm9rZWQgaXMgdHJ1ZSwgY29weSBjb2xvciBjb25maWcgdG8gc3Ryb2tlIGNvbG9yIGNvbmZpZ1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3Ryb2tlQ29sb3JGaWVsZDogdmMuY29sb3JGaWVsZCxcbiAgICAgICAgc3Ryb2tlQ29sb3JTY2FsZTogdmMuY29sb3JTY2FsZVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9XG59O1xuLyoqXG4gKiBWMTogc2F2ZSBbZmllbGRdOiB7bmFtZSwgdHlwZX0sIFtzY2FsZV06ICcnIGZvciBlYWNoIGNoYW5uZWxcbiAqL1xuY2xhc3MgVmlzdWFsQ2hhbm5lbFNjaGVtYVYxIGV4dGVuZHMgU2NoZW1hIHtcbiAgc2F2ZSh2aXN1YWxDaGFubmVscywgcGFyZW50cykge1xuICAgIC8vIG9ubHkgc2F2ZSBmaWVsZCBhbmQgc2NhbGUgb2YgZWFjaCBjaGFubmVsXG4gICAgY29uc3QgW2xheWVyXSA9IHBhcmVudHMuc2xpY2UoLTEpO1xuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiBPYmplY3Qua2V5cyh2aXN1YWxDaGFubmVscykucmVkdWNlKFxuICAgICAgICAvLyAgc2F2ZSBjaGFubmVsIHRvIG51bGwgaWYgZGlkbid0IHNlbGVjdCBhbnkgZmllbGRcbiAgICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgICAuLi5hY2N1LFxuICAgICAgICAgIFt2aXN1YWxDaGFubmVsc1trZXldLmZpZWxkXTogbGF5ZXIuY29uZmlnW3Zpc3VhbENoYW5uZWxzW2tleV0uZmllbGRdXG4gICAgICAgICAgICA/IHBpY2sobGF5ZXIuY29uZmlnW3Zpc3VhbENoYW5uZWxzW2tleV0uZmllbGRdLCBbJ25hbWUnLCAndHlwZScsICdjb2xvckNvbHVtbiddKVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIFt2aXN1YWxDaGFubmVsc1trZXldLnNjYWxlXTogbGF5ZXIuY29uZmlnW3Zpc3VhbENoYW5uZWxzW2tleV0uc2NhbGVdXG4gICAgICAgIH0pLFxuICAgICAgICB7fVxuICAgICAgKVxuICAgIH07XG4gIH1cbiAgbG9hZCh2YywgcGFyZW50cywgYWNjdW11bGF0b3IpIHtcbiAgICAvLyBmb2xkIGNoYW5uZWxzIGludG8gY29uZmlnXG4gICAgY29uc3QgW2xheWVyXSA9IHBhcmVudHMuc2xpY2UoLTEpO1xuICAgIGNvbnN0IG1vZGlmaWVkID0gdmlzdWFsQ2hhbm5lbE1vZGlmaWNhdGlvblYxW2xheWVyLnR5cGVdXG4gICAgICA/IHZpc3VhbENoYW5uZWxNb2RpZmljYXRpb25WMVtsYXllci50eXBlXSh2YywgcGFyZW50cywgYWNjdW11bGF0b3IpXG4gICAgICA6IHt9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmFjY3VtdWxhdG9yLFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIC4uLihhY2N1bXVsYXRvci5jb25maWcgfHwge30pLFxuICAgICAgICAuLi52YyxcbiAgICAgICAgLi4ubW9kaWZpZWRcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG4vKipcbiAqIFYxOiBzYXZlIFtjaGFubmVsXTogW3sgbGFiZWwsIGNvbG9yIH0sIC4uLl0gZm9yIGxlZ2VuZFxuICovXG5jbGFzcyBMZWdlbmRTZXR0aW5nc1YxIGV4dGVuZHMgU2NoZW1hIHtcbiAgc2F2ZShsZWdlbmRTZXR0aW5ncywgcGFyZW50cykge1xuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiBPYmplY3Qua2V5cyhsZWdlbmRTZXR0aW5ncykucmVkdWNlKChhY2N1LCBrZXkpID0+IHtcbiAgICAgICAgYWNjdVtrZXldID0gbGVnZW5kU2V0dGluZ3Nba2V5XTtcbiAgICAgICAgcmV0dXJuIGFjY3U7XG4gICAgICB9LCB7fSlcbiAgICB9O1xuICB9XG4gIGxvYWQobHMsIHBhcmVudHMsIGFjY3VtdWxhdG9yKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmFjY3VtdWxhdG9yLFxuICAgICAgW3RoaXMua2V5XTogbHNcbiAgICB9O1xuICB9XG59XG5jb25zdCB2aXNDb25maWdNb2RpZmljYXRpb25WMSA9IHtcbiAgcG9pbnQ6ICh2aXNDb25maWcsIHBhcmVudHMsIGFjY3VtdWxhdGVkKSA9PiB7XG4gICAgY29uc3QgbW9kaWZpZWQ6IG1vZGlmaWVkVHlwZSA9IHt9O1xuICAgIGNvbnN0IFtsYXllcl0gPSBwYXJlbnRzLnNsaWNlKC0yLCAtMSk7XG4gICAgY29uc3QgaXNPbGQgPVxuICAgICAgIXZpc0NvbmZpZy5oYXNPd25Qcm9wZXJ0eSgnZmlsbGVkJykgJiYgIXZpc0NvbmZpZy5zdHJva2VDb2xvciAmJiAhdmlzQ29uZmlnLnN0cm9rZUNvbG9yUmFuZ2U7XG4gICAgaWYgKGlzT2xkKSB7XG4gICAgICAvLyBjb2xvciBjb2xvciAmIGNvbG9yIHJhbmdlIHRvIHN0cm9rZSBjb2xvclxuICAgICAgbW9kaWZpZWQuc3Ryb2tlQ29sb3IgPSBsYXllci5jb25maWcuY29sb3I7XG4gICAgICBtb2RpZmllZC5zdHJva2VDb2xvclJhbmdlID0gY2xvbmVEZWVwKHZpc0NvbmZpZy5jb2xvclJhbmdlKTtcbiAgICAgIGlmICh2aXNDb25maWcub3V0bGluZSkge1xuICAgICAgICAvLyBwb2ludCBsYXllciBub3cgc3VwcG9ydHMgYm90aCBvdXRsaW5lIGFuZCBmaWxsXG4gICAgICAgIC8vIGZvciBvbGRlciBzY2hlbWEgd2hlcmUgZmlsbGVkIGhhcyBub3QgYmVlbiBhZGRlZCB0byBwb2ludCBsYXllclxuICAgICAgICAvLyBzZXQgaXQgdG8gZmFsc2VcbiAgICAgICAgbW9kaWZpZWQuZmlsbGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1vZGlmaWVkO1xuICB9LFxuICBnZW9qc29uOiAodmlzQ29uZmlnLCBwYXJlbnRzLCBhY2N1bXVsYXRlZCkgPT4ge1xuICAgIC8vIGlzIHBvaW50cz9cbiAgICBjb25zdCBtb2RpZmllZDogbW9kaWZpZWRUeXBlID0ge307XG4gICAgY29uc3QgW2xheWVyXSA9IHBhcmVudHMuc2xpY2UoLTIsIC0xKTtcbiAgICBjb25zdCBpc09sZCA9XG4gICAgICBsYXllci52aXN1YWxDaGFubmVscyAmJlxuICAgICAgIWxheWVyLnZpc3VhbENoYW5uZWxzLmhhc093blByb3BlcnR5KCdzdHJva2VDb2xvckZpZWxkJykgJiZcbiAgICAgICF2aXNDb25maWcuc3Ryb2tlQ29sb3IgJiZcbiAgICAgICF2aXNDb25maWcuc3Ryb2tlQ29sb3JSYW5nZTtcbiAgICAvLyBtYWtlIG91ciBiZXN0IGd1ZXNzIGlmIHRoaXMgZ2VvanNvbiBsYXllciBjb250YWlucyBwb2ludFxuICAgIGNvbnN0IGlzUG9pbnQgPVxuICAgICAgKGxheWVyLnZpc3VhbENoYW5uZWxzICYmIGxheWVyLnZpc3VhbENoYW5uZWxzLnJhZGl1c0ZpZWxkKSB8fFxuICAgICAgKHZpc0NvbmZpZyAmJiB2aXNDb25maWcucmFkaXVzICE9PSBMQVlFUl9WSVNfQ09ORklHUy5yYWRpdXMuZGVmYXVsdFZhbHVlKTtcblxuICAgIGlmIChpc09sZCkge1xuICAgICAgLy8gY29sb3IgY29sb3IgJiBjb2xvciByYW5nZSB0byBzdHJva2UgY29sb3JcbiAgICAgIG1vZGlmaWVkLnN0cm9rZUNvbG9yID0gbGF5ZXIuY29uZmlnLmNvbG9yO1xuICAgICAgbW9kaWZpZWQuc3Ryb2tlQ29sb3JSYW5nZSA9IGNsb25lRGVlcCh2aXNDb25maWcuY29sb3JSYW5nZSk7XG4gICAgICBpZiAoaXNQb2ludCkge1xuICAgICAgICAvLyBpZiBpcyBwb2ludCwgc2V0IHN0cm9rZSB0byBmYWxzZVxuICAgICAgICBtb2RpZmllZC5maWxsZWQgPSB0cnVlO1xuICAgICAgICBtb2RpZmllZC5zdHJva2VkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1vZGlmaWVkO1xuICB9XG59O1xuXG5jbGFzcyBWaXNDb25maWdTY2hlbWFWMSBleHRlbmRzIFNjaGVtYSB7XG4gIGtleSA9ICd2aXNDb25maWcnO1xuXG4gIGxvYWQodmlzQ29uZmlnLCBwYXJlbnRzLCBhY2N1bXVsYXRlZCkge1xuICAgIGNvbnN0IFtsYXllcl0gPSBwYXJlbnRzLnNsaWNlKC0yLCAtMSk7XG4gICAgY29uc3QgbW9kaWZpZWQgPSB2aXNDb25maWdNb2RpZmljYXRpb25WMVtsYXllci50eXBlXVxuICAgICAgPyB2aXNDb25maWdNb2RpZmljYXRpb25WMVtsYXllci50eXBlXSh2aXNDb25maWcsIHBhcmVudHMsIGFjY3VtdWxhdGVkKVxuICAgICAgOiB7fTtcblxuICAgIHJldHVybiB7XG4gICAgICB2aXNDb25maWc6IHtcbiAgICAgICAgLi4udmlzQ29uZmlnLFxuICAgICAgICAuLi5tb2RpZmllZFxuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGxheWVyUHJvcHNWMSA9IHtcbiAgaWQ6IG51bGwsXG4gIHR5cGU6IG51bGwsXG4gIGNvbmZpZzogbmV3IFNjaGVtYSh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjEsXG4gICAga2V5OiAnY29uZmlnJyxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICBkYXRhSWQ6IG51bGwsXG4gICAgICBsYWJlbDogbnVsbCxcbiAgICAgIGNvbG9yOiBudWxsLFxuICAgICAgaGlnaGxpZ2h0Q29sb3I6IG51bGwsXG4gICAgICBjb2x1bW5zOiBuZXcgQ29sdW1uU2NoZW1hVjEoe1xuICAgICAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MSxcbiAgICAgICAga2V5OiAnY29sdW1ucydcbiAgICAgIH0pLFxuICAgICAgaXNWaXNpYmxlOiBudWxsLFxuICAgICAgdmlzQ29uZmlnOiBuZXcgVmlzQ29uZmlnU2NoZW1hVjEoe1xuICAgICAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MVxuICAgICAgfSksXG4gICAgICBoaWRkZW46IG51bGwsXG4gICAgICB2aXNpYmlsaXR5Qnlab29tOiBudWxsLFxuICAgICAgdGV4dExhYmVsOiBuZXcgVGV4dExhYmVsU2NoZW1hVjEoe1xuICAgICAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MSxcbiAgICAgICAga2V5OiAndGV4dExhYmVsJ1xuICAgICAgfSlcbiAgICB9XG4gIH0pLFxuICBsZWdlbmRTZXR0aW5nczogbmV3IExlZ2VuZFNldHRpbmdzVjEoe1xuICAgIHZlcnNpb246IFZFUlNJT05TLnYxLFxuICAgIGtleTogJ2xlZ2VuZFNldHRpbmdzJ1xuICB9KSxcbiAgdmlzdWFsQ2hhbm5lbHM6IG5ldyBWaXN1YWxDaGFubmVsU2NoZW1hVjEoe1xuICAgIHZlcnNpb246IFZFUlNJT05TLnYxLFxuICAgIGtleTogJ3Zpc3VhbENoYW5uZWxzJ1xuICB9KVxufTtcblxuZXhwb3J0IGNsYXNzIExheWVyU2NoZW1hVjAgZXh0ZW5kcyBTY2hlbWEge1xuICBrZXkgPSAnbGF5ZXJzJztcblxuICBzYXZlKGxheWVycywgcGFyZW50cykge1xuICAgIGNvbnN0IFt2aXNTdGF0ZV0gPSBwYXJlbnRzLnNsaWNlKC0xKTtcblxuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiB2aXNTdGF0ZS5sYXllck9yZGVyLnJlZHVjZSgoc2F2ZWQsIGluZGV4KSA9PiB7XG4gICAgICAgIC8vIHNhdmUgbGF5ZXJzIGFjY29yZGluZyB0byB0aGVpciByZW5kZXJpbmcgb3JkZXJcbiAgICAgICAgY29uc3QgbGF5ZXIgPSBsYXllcnNbaW5kZXhdO1xuICAgICAgICBpZiAobGF5ZXIuaXNWYWxpZFRvU2F2ZSgpKSB7XG4gICAgICAgICAgc2F2ZWQucHVzaCh0aGlzLnNhdmVQcm9wZXJ0aWVzT3JBcHBseVNjaGVtYShsYXllcikubGF5ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2F2ZWQ7XG4gICAgICB9LCBbXSlcbiAgICB9O1xuICB9XG5cbiAgbG9hZChsYXllcnMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgW3RoaXMua2V5XTogbGF5ZXJzLm1hcChsYXllciA9PiB0aGlzLmxvYWRQcm9wZXJ0aWVzT3JBcHBseVNjaGVtYShsYXllciwgbGF5ZXJzKS5sYXllcnMpXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRmlsdGVyU2NoZW1hVjAgZXh0ZW5kcyBTY2hlbWEge1xuICBrZXkgPSAnZmlsdGVycyc7XG4gIHNhdmUoZmlsdGVycykge1xuICAgIHJldHVybiB7XG4gICAgICBmaWx0ZXJzOiBmaWx0ZXJzXG4gICAgICAgIC5maWx0ZXIoaXNWYWxpZEZpbHRlclZhbHVlKVxuICAgICAgICAubWFwKGZpbHRlciA9PiB0aGlzLnNhdmVQcm9wZXJ0aWVzT3JBcHBseVNjaGVtYShmaWx0ZXIpLmZpbHRlcnMpXG4gICAgfTtcbiAgfVxuICBsb2FkKGZpbHRlcnMpIHtcbiAgICByZXR1cm4ge2ZpbHRlcnN9O1xuICB9XG59XG5cbmNvbnN0IGludGVyYWN0aW9uUHJvcHNWMCA9IFsndG9vbHRpcCcsICdicnVzaCddO1xuXG5jbGFzcyBJbnRlcmFjdGlvblNjaGVtYVYwIGV4dGVuZHMgU2NoZW1hIHtcbiAga2V5ID0gJ2ludGVyYWN0aW9uQ29uZmlnJztcblxuICBzYXZlKGludGVyYWN0aW9uQ29uZmlnKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy5wcm9wZXJ0aWVzKVxuICAgICAgPyB7XG4gICAgICAgICAgW3RoaXMua2V5XTogdGhpcy5wcm9wZXJ0aWVzLnJlZHVjZShcbiAgICAgICAgICAgIChhY2N1LCBrZXkpID0+ICh7XG4gICAgICAgICAgICAgIC4uLmFjY3UsXG4gICAgICAgICAgICAgIC4uLihpbnRlcmFjdGlvbkNvbmZpZ1trZXldLmVuYWJsZWQgPyB7W2tleV06IGludGVyYWN0aW9uQ29uZmlnW2tleV0uY29uZmlnfSA6IHt9KVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB7fVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgOiB7fTtcbiAgfVxuICBsb2FkKGludGVyYWN0aW9uQ29uZmlnKSB7XG4gICAgLy8gY29udmVydCB2MCAtPiB2MVxuICAgIC8vIHJldHVybiBlbmFibGVkOiBmYWxzZSBpZiBkaXNhYmxlZCxcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLnByb3BlcnRpZXMpXG4gICAgICA/IHtcbiAgICAgICAgICBbdGhpcy5rZXldOiB0aGlzLnByb3BlcnRpZXMucmVkdWNlKFxuICAgICAgICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgICAgICAgLi4ue1xuICAgICAgICAgICAgICAgIFtrZXldOiB7XG4gICAgICAgICAgICAgICAgICAuLi4oaW50ZXJhY3Rpb25Db25maWdba2V5XSB8fCB7fSksXG4gICAgICAgICAgICAgICAgICBlbmFibGVkOiBCb29sZWFuKGludGVyYWN0aW9uQ29uZmlnW2tleV0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHt9XG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICA6IHt9O1xuICB9XG59XG5cbmNvbnN0IGludGVyYWN0aW9uUHJvcHNWMSA9IFsuLi5pbnRlcmFjdGlvblByb3BzVjAsICdnZW9jb2RlcicsICdjb29yZGluYXRlJ107XG5cbmV4cG9ydCBjbGFzcyBJbnRlcmFjdGlvblNjaGVtYVYxIGV4dGVuZHMgU2NoZW1hIHtcbiAga2V5ID0gJ2ludGVyYWN0aW9uQ29uZmlnJztcblxuICBzYXZlKGludGVyYWN0aW9uQ29uZmlnKSB7XG4gICAgLy8gc2F2ZSBjb25maWcgZXZlbiBpZiBkaXNhYmxlZCxcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLnByb3BlcnRpZXMpXG4gICAgICA/IHtcbiAgICAgICAgICBbdGhpcy5rZXldOiB0aGlzLnByb3BlcnRpZXMucmVkdWNlKFxuICAgICAgICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgICAgICAgW2tleV06IHtcbiAgICAgICAgICAgICAgICAuLi5pbnRlcmFjdGlvbkNvbmZpZ1trZXldLmNvbmZpZyxcbiAgICAgICAgICAgICAgICBlbmFibGVkOiBpbnRlcmFjdGlvbkNvbmZpZ1trZXldLmVuYWJsZWRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB7fVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgOiB7fTtcbiAgfVxuICBsb2FkKGludGVyYWN0aW9uQ29uZmlnKSB7XG4gICAgY29uc3QgbW9kaWZpZWRDb25maWcgPSBpbnRlcmFjdGlvbkNvbmZpZztcbiAgICBPYmplY3Qua2V5cyhpbnRlcmFjdGlvbkNvbmZpZykuZm9yRWFjaChjb25maWdUeXBlID0+IHtcbiAgICAgIGlmIChjb25maWdUeXBlID09PSAndG9vbHRpcCcpIHtcbiAgICAgICAgY29uc3QgZmllbGRzVG9TaG93ID0gbW9kaWZpZWRDb25maWdbY29uZmlnVHlwZV0uZmllbGRzVG9TaG93O1xuICAgICAgICBpZiAoIW5vdE51bGxvclVuZGVmaW5lZChmaWVsZHNUb1Nob3cpKSB7XG4gICAgICAgICAgcmV0dXJuIHtbdGhpcy5rZXldOiBtb2RpZmllZENvbmZpZ307XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmtleXMoZmllbGRzVG9TaG93KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgZmllbGRzVG9TaG93W2tleV0gPSBmaWVsZHNUb1Nob3dba2V5XS5tYXAoZmllbGREYXRhID0+IHtcbiAgICAgICAgICAgIGlmICghZmllbGREYXRhLm5hbWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBuYW1lOiBmaWVsZERhdGEsXG4gICAgICAgICAgICAgICAgZm9ybWF0OiBudWxsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmllbGREYXRhO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSk7XG4gICAgcmV0dXJuIHtbdGhpcy5rZXldOiBtb2RpZmllZENvbmZpZ307XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGZpbHRlclByb3BzVjAgPSB7XG4gIGRhdGFJZDogbnVsbCxcbiAgaWQ6IG51bGwsXG4gIG5hbWU6IG51bGwsXG4gIHR5cGU6IG51bGwsXG4gIHZhbHVlOiBudWxsLFxuICBlbmxhcmdlZDogbnVsbFxufTtcblxuZXhwb3J0IGNsYXNzIERpbWVuc2lvbkZpZWxkU2NoZW1hIGV4dGVuZHMgU2NoZW1hIHtcbiAgc2F2ZShmaWVsZCkge1xuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiBmaWVsZCA/IHRoaXMuc2F2ZVByb3BlcnRpZXNPckFwcGx5U2NoZW1hKGZpZWxkKVt0aGlzLmtleV0gOiBudWxsXG4gICAgfTtcbiAgfVxuXG4gIGxvYWQoZmllbGQpIHtcbiAgICByZXR1cm4ge1t0aGlzLmtleV06IGZpZWxkfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3BsaXRNYXBzU2NoZW1hIGV4dGVuZHMgU2NoZW1hIHtcbiAgY29udmVydExheWVyU2V0dGluZ3MoYWNjdSwgW2tleSwgdmFsdWVdKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5hY2N1LFxuICAgICAgICBba2V5XTogdmFsdWVcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5hY2N1LFxuICAgICAgICBba2V5XTogQm9vbGVhbih2YWx1ZS5pc1Zpc2libGUpXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gYWNjdTtcbiAgfVxuXG4gIGxvYWQoc3BsaXRNYXBzKSB7XG4gICAgLy8gcHJldmlvdXMgc3BsaXRNYXBzIFNjaGVtYSB7bGF5ZXJzOiB7bGF5ZXJJZDoge2lzVmlzaWJsZSwgaXNBdmFpbGFibGV9fX1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShzcGxpdE1hcHMpIHx8ICFzcGxpdE1hcHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4ge3NwbGl0TWFwczogW119O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzcGxpdE1hcHM6IHNwbGl0TWFwcy5tYXAoc2V0dGluZ3MgPT4gKHtcbiAgICAgICAgLi4uc2V0dGluZ3MsXG4gICAgICAgIGxheWVyczogT2JqZWN0LmVudHJpZXMoc2V0dGluZ3MubGF5ZXJzIHx8IHt9KS5yZWR1Y2UodGhpcy5jb252ZXJ0TGF5ZXJTZXR0aW5ncywge30pXG4gICAgICB9KSlcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJQcm9wc1YxID0ge1xuICAuLi5maWx0ZXJQcm9wc1YwLFxuICBwbG90VHlwZTogbnVsbCxcbiAgYW5pbWF0aW9uV2luZG93OiBudWxsLFxuICB5QXhpczogbmV3IERpbWVuc2lvbkZpZWxkU2NoZW1hKHtcbiAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MSxcbiAgICBrZXk6ICd5QXhpcycsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgbmFtZTogbnVsbCxcbiAgICAgIHR5cGU6IG51bGxcbiAgICB9XG4gIH0pLFxuXG4gIC8vIHBvbHlnb24gZmlsdGVyIHByb3BlcnRpZXNcbiAgbGF5ZXJJZDogbnVsbCxcbiAgc3BlZWQ6IG51bGxcbn07XG5cbmV4cG9ydCBjb25zdCBwcm9wZXJ0aWVzVjAgPSB7XG4gIGZpbHRlcnM6IG5ldyBGaWx0ZXJTY2hlbWFWMCh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjAsXG4gICAgcHJvcGVydGllczogZmlsdGVyUHJvcHNWMFxuICB9KSxcbiAgbGF5ZXJzOiBuZXcgTGF5ZXJTY2hlbWFWMCh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjAsXG4gICAgcHJvcGVydGllczogbGF5ZXJQcm9wc1YwXG4gIH0pLFxuICBpbnRlcmFjdGlvbkNvbmZpZzogbmV3IEludGVyYWN0aW9uU2NoZW1hVjAoe1xuICAgIHZlcnNpb246IFZFUlNJT05TLnYwLFxuICAgIHByb3BlcnRpZXM6IGludGVyYWN0aW9uUHJvcHNWMFxuICB9KSxcbiAgbGF5ZXJCbGVuZGluZzogbnVsbFxufTtcblxuZXhwb3J0IGNvbnN0IHByb3BlcnRpZXNWMSA9IHtcbiAgZmlsdGVyczogbmV3IEZpbHRlclNjaGVtYVYwKHtcbiAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MSxcbiAgICBwcm9wZXJ0aWVzOiBmaWx0ZXJQcm9wc1YxXG4gIH0pLFxuICBsYXllcnM6IG5ldyBMYXllclNjaGVtYVYwKHtcbiAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MSxcbiAgICBwcm9wZXJ0aWVzOiBsYXllclByb3BzVjFcbiAgfSksXG4gIGludGVyYWN0aW9uQ29uZmlnOiBuZXcgSW50ZXJhY3Rpb25TY2hlbWFWMSh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjEsXG4gICAgcHJvcGVydGllczogaW50ZXJhY3Rpb25Qcm9wc1YxXG4gIH0pLFxuICBsYXllckJsZW5kaW5nOiBudWxsLFxuICBzcGxpdE1hcHM6IG5ldyBTcGxpdE1hcHNTY2hlbWEoe1xuICAgIGtleTogJ3NwbGl0TWFwcycsXG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjFcbiAgfSksXG4gIGFuaW1hdGlvbkNvbmZpZzogbmV3IFNjaGVtYSh7XG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjEsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgY3VycmVudFRpbWU6IG51bGwsXG4gICAgICBzcGVlZDogbnVsbFxuICAgIH0sXG4gICAga2V5OiAnYW5pbWF0aW9uQ29uZmlnJ1xuICB9KVxufTtcblxuZXhwb3J0IGNvbnN0IHZpc1N0YXRlU2NoZW1hVjAgPSBuZXcgU2NoZW1hKHtcbiAgdmVyc2lvbjogVkVSU0lPTlMudjAsXG4gIHByb3BlcnRpZXM6IHByb3BlcnRpZXNWMCxcbiAga2V5OiAndmlzU3RhdGUnXG59KTtcblxuZXhwb3J0IGNvbnN0IHZpc1N0YXRlU2NoZW1hVjEgPSBuZXcgU2NoZW1hKHtcbiAgdmVyc2lvbjogVkVSU0lPTlMudjEsXG4gIHByb3BlcnRpZXM6IHByb3BlcnRpZXNWMSxcbiAga2V5OiAndmlzU3RhdGUnXG59KTtcblxuZXhwb3J0IGNvbnN0IHZpc1N0YXRlU2NoZW1hID0ge1xuICBbVkVSU0lPTlMudjBdOiB7XG4gICAgc2F2ZTogdG9TYXZlID0+IHZpc1N0YXRlU2NoZW1hVjAuc2F2ZSh0b1NhdmUpLFxuICAgIGxvYWQ6IHRvTG9hZCA9PiB2aXNTdGF0ZVNjaGVtYVYxLmxvYWQodmlzU3RhdGVTY2hlbWFWMC5sb2FkKHRvTG9hZCkudmlzU3RhdGUpXG4gIH0sXG4gIFtWRVJTSU9OUy52MV06IHZpc1N0YXRlU2NoZW1hVjFcbn07XG5cbi8vIHRlc3QgbG9hZCB2MFxuZXhwb3J0IGRlZmF1bHQgdmlz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
|