@kepler.gl/components 3.1.4 → 3.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/dist/hooks/use-fetch-raster-tile-metadata.d.ts +21 -0
  2. package/dist/hooks/use-fetch-raster-tile-metadata.js +120 -0
  3. package/dist/index.d.ts +2 -1
  4. package/dist/index.js +16 -1
  5. package/dist/kepler-gl.d.ts +1 -0
  6. package/dist/loading-indicator.js +4 -2
  7. package/dist/map-container.js +2 -2
  8. package/dist/modals/export-data-modal.js +5 -5
  9. package/dist/modals/tilesets-modals/common.d.ts +3 -2
  10. package/dist/modals/tilesets-modals/common.js +1 -1
  11. package/dist/modals/tilesets-modals/load-tileset.js +45 -26
  12. package/dist/modals/tilesets-modals/tileset-icon.js +12 -5
  13. package/dist/modals/tilesets-modals/tileset-raster-form.d.ts +13 -0
  14. package/dist/modals/tilesets-modals/tileset-raster-form.js +174 -0
  15. package/dist/modals/tilesets-modals/tileset-vector-form.js +18 -9
  16. package/dist/side-panel/common/dataset-info.js +2 -2
  17. package/dist/side-panel/layer-manager.js +14 -3
  18. package/dist/side-panel/layer-panel/color-breaks-panel.d.ts +1 -1
  19. package/dist/side-panel/layer-panel/dataset-layer-section.js +13 -2
  20. package/dist/side-panel/layer-panel/layer-configurator.d.ts +3 -2
  21. package/dist/side-panel/layer-panel/layer-configurator.js +9 -3
  22. package/dist/side-panel/layer-panel/layer-type-list-item.js +4 -2
  23. package/dist/side-panel/layer-panel/raster-tile-colormap-list-item.d.ts +15 -0
  24. package/dist/side-panel/layer-panel/raster-tile-colormap-list-item.js +61 -0
  25. package/dist/side-panel/layer-panel/raster-tile-layer-configurator.d.ts +17 -0
  26. package/dist/side-panel/layer-panel/raster-tile-layer-configurator.js +358 -0
  27. package/dist/side-panel/layer-panel/vector-tile-layer-configurator.d.ts +1 -1
  28. package/package.json +15 -15
@@ -0,0 +1,358 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports["default"] = void 0;
9
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
12
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
14
+ var _react = _interopRequireWildcard(require("react"));
15
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
16
+ var _constants = require("@kepler.gl/constants");
17
+ var _layers = require("@kepler.gl/layers");
18
+ var _localization = require("@kepler.gl/localization");
19
+ var _utils = require("@kepler.gl/utils");
20
+ var _rasterTileColormapListItem = require("./raster-tile-colormap-list-item");
21
+ var _styledComponents2 = require("../../common/styled-components");
22
+ var _switch = _interopRequireDefault(require("../../common/switch"));
23
+ var _infoHelper = _interopRequireDefault(require("../../common/info-helper"));
24
+ var _itemSelector = _interopRequireDefault(require("../../common/item-selector/item-selector"));
25
+ var _visConfigSlider = _interopRequireDefault(require("../../side-panel/layer-panel/vis-config-slider"));
26
+ var _layerConfigGroup = _interopRequireDefault(require("../../side-panel/layer-panel/layer-config-group"));
27
+ var _visConfigSwitch = _interopRequireDefault(require("../../side-panel/layer-panel/vis-config-switch"));
28
+ var _templateObject, _templateObject2, _templateObject3; // SPDX-License-Identifier: MIT
29
+ // Copyright contributors to the kepler.gl project
30
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
31
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
32
+ 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; }
33
+ 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; }
34
+ var STAC_SEARCH_UI_ENABLED = true;
35
+ var StyledVisConfigSwitch = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n justify-content: space-between;\n\n .vis-config-switch__title {\n display: flex;\n }\n"])));
36
+ var CustomVisConfigSwitch = function CustomVisConfigSwitch(_ref) {
37
+ var _ref$layer = _ref.layer,
38
+ id = _ref$layer.id,
39
+ config = _ref$layer.config,
40
+ property = _ref.property,
41
+ _onChange2 = _ref.onChange,
42
+ label = _ref.label,
43
+ disabled = _ref.disabled;
44
+ return /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, {
45
+ disabled: Boolean(disabled)
46
+ }, /*#__PURE__*/_react["default"].createElement(StyledVisConfigSwitch, {
47
+ className: "vis-config-switch"
48
+ }, /*#__PURE__*/_react["default"].createElement("div", {
49
+ className: "vis-config-switch__title"
50
+ }, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabelWrapper, null, label ? /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, label && /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
51
+ id: label
52
+ }) || (0, _utils.capitalizeFirstLetter)(property)) : null)), /*#__PURE__*/_react["default"].createElement("div", {
53
+ className: "vis-config-switch__switch"
54
+ }, /*#__PURE__*/_react["default"].createElement(_switch["default"], {
55
+ checked: config.visConfig[property],
56
+ id: "".concat(id, "-").concat(property, "-switch"),
57
+ onChange: function onChange() {
58
+ return _onChange2((0, _defineProperty2["default"])({}, property, !config.visConfig[property]));
59
+ }
60
+ }))));
61
+ };
62
+ var StyledLayerConfigurator = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n margin-top: 12px;\n"])));
63
+ var DescriptionText = (0, _styledComponents["default"])(_styledComponents2.PanelLabel)(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n text-transform: none;\n display: inline;\n color: ", ";\n\n a {\n text-decoration: underline;\n margin-left: 4px;\n }\n"])), function (props) {
64
+ return props.theme.subtextColor;
65
+ });
66
+
67
+ // TODO: combine these two helpers into one
68
+ function findVisConfigItemById(layer, prop) {
69
+ return layer.visConfigSettings[prop].options.find(function (op) {
70
+ return op.id === layer.config.visConfig[prop];
71
+ });
72
+ }
73
+ function findItemById(layer, options, prop) {
74
+ // For now it's possible that non-raster metadata will be passed to the raster configurator, so
75
+ // options may be null
76
+ return options === null || options === void 0 ? void 0 : options.find(function (op) {
77
+ return op.id === layer.config.visConfig[prop];
78
+ });
79
+ }
80
+
81
+ /**
82
+ * Generate drop down labels for single band selector
83
+ * @param stac - STAC item metadata object
84
+ * @returns array of {id, label} elements
85
+ */
86
+ function getBandSelectorOptions(stac) {
87
+ var eoBands = (0, _layers.getEOBands)(stac) || [];
88
+ return eoBands.map(function (eoBand) {
89
+ return {
90
+ id: eoBand.name || eoBand.common_name,
91
+ label: eoBand.common_name ? "".concat(eoBand.name || eoBand.common_name, " (").concat(eoBand.common_name, ")") : eoBand.name
92
+ };
93
+ });
94
+ }
95
+ function getCategoricalColormapListItem(categoricalColorMap) {
96
+ var categoricalItem;
97
+ if (categoricalColorMap) {
98
+ categoricalItem = {
99
+ label: 'Categorical',
100
+ id: _layers.CATEGORICAL_COLORMAP_ID
101
+ };
102
+ }
103
+ return categoricalItem;
104
+ }
105
+
106
+ /**
107
+ * Check if data source global pixel color range is calculated correctly
108
+ * @param layer - raster layer
109
+ * @param stac - STAC metadata object
110
+ * @param preset - preset name
111
+ * @param singleBandPresetOptions - options for single band preset
112
+ * @returns boolean value
113
+ */
114
+ function isDataSourceColorRangeAvailable(layer, stac, preset, singleBandPresetOptions) {
115
+ var minPixelValue = null;
116
+ var maxPixelValue = null;
117
+ var dataSourceParams = layer.getDataSourceParams(stac, preset, {
118
+ singleBand: singleBandPresetOptions
119
+ });
120
+ if (dataSourceParams) {
121
+ minPixelValue = dataSourceParams.minPixelValue;
122
+ maxPixelValue = dataSourceParams.maxPixelValue;
123
+ }
124
+ return minPixelValue !== null && maxPixelValue !== null;
125
+ }
126
+
127
+ /**
128
+ * Updates color parameters based on a change in visualization preset.
129
+ *
130
+ * This function adjusts the color processing parameters when the visualization
131
+ * preset changes, based on whether the preset is switching to or from a
132
+ * single-band. Determines whether to apply color
133
+ * enhancements or reset parameters based on the preset transition.
134
+ *
135
+ * @param stac A STAC (SpatioTemporal Asset Catalog) object representing the dataset.
136
+ * @param newPreset The old visualization preset being applied.
137
+ * @param newPreset The new visualization preset being applied.
138
+ * @returns The updated color parameters to apply.
139
+ */
140
+ function updateColorParamsOnPresetChange(stac, oldPreset, newPreset) {
141
+ var colorParams = {};
142
+ var colorOverrides = _layers.DATA_SOURCE_COLOR_DEFAULTS[stac.id];
143
+ if (colorOverrides) return colorParams;
144
+ var bandOfInterest = 'singleBand';
145
+ if (oldPreset === bandOfInterest && newPreset !== bandOfInterest) {
146
+ // enchance colors for multiband combinations
147
+ colorParams = colorOverrides;
148
+ } else if (oldPreset !== bandOfInterest && newPreset === bandOfInterest) {
149
+ // reset image processng params
150
+ colorParams = _layers.RASTER_COLOR_RESET_PARAMS;
151
+ }
152
+ return colorParams;
153
+ }
154
+ RasterTileLayerConfiguratorFactory.deps = [_layerConfigGroup["default"], _visConfigSlider["default"], _infoHelper["default"], _visConfigSwitch["default"]];
155
+ function RasterTileLayerConfiguratorFactory(LayerConfigGroup, VisConfigSlider, InfoHelper, VisConfigSwitch) {
156
+ /**
157
+ * Wrapper around configurator to check for dataset.metadata being null/undefined
158
+ */
159
+ var STACCheckConfiguratorWrapper = function STACCheckConfiguratorWrapper(_ref2) {
160
+ var layer = _ref2.layer,
161
+ visConfiguratorProps = _ref2.visConfiguratorProps,
162
+ dataset = _ref2.dataset;
163
+ var stac = dataset === null || dataset === void 0 ? void 0 : dataset.metadata;
164
+
165
+ // If no dataset is loaded into Kepler, stac can be undefined
166
+ if (!stac) {
167
+ return null;
168
+ }
169
+ return /*#__PURE__*/_react["default"].createElement(RasterTileLayerConfigurator, {
170
+ layer: layer,
171
+ visConfiguratorProps: visConfiguratorProps,
172
+ dataset: dataset
173
+ });
174
+ };
175
+
176
+ // eslint-disable-next-line complexity
177
+ var RasterTileLayerConfigurator = function RasterTileLayerConfigurator(_ref3) {
178
+ var _stac$rasterTileServe2;
179
+ var layer = _ref3.layer,
180
+ visConfiguratorProps = _ref3.visConfiguratorProps,
181
+ dataset = _ref3.dataset;
182
+ var _layer$config$visConf = layer.config.visConfig,
183
+ preset = _layer$config$visConf.preset,
184
+ nonLinearRescaling = _layer$config$visConf.nonLinearRescaling,
185
+ useSTACSearching = _layer$config$visConf.useSTACSearching,
186
+ categoricalColorMap = _layer$config$visConf.colorRange.colorMap,
187
+ dynamicColor = _layer$config$visConf.dynamicColor,
188
+ singleBandName = _layer$config$visConf.singleBandName;
189
+ var stac = dataset === null || dataset === void 0 ? void 0 : dataset.metadata;
190
+ var availablePresets = (0, _react.useMemo)(function () {
191
+ return (0, _layers.filterAvailablePresets)(stac, _layers.PRESET_OPTIONS);
192
+ }, [stac]);
193
+ var presetOptions = (0, _react.useMemo)(function () {
194
+ return layer.visConfigSettings.preset.options.filter(function (_ref4) {
195
+ var id = _ref4.id;
196
+ return availablePresets === null || availablePresets === void 0 ? void 0 : availablePresets.includes(id);
197
+ });
198
+ }, [layer.visConfigSettings.preset.options, availablePresets]);
199
+ var singleBandOptions = (0, _react.useMemo)(function () {
200
+ return getBandSelectorOptions(stac);
201
+ }, [stac]);
202
+ var colormapOptions = (0, _react.useMemo)(function () {
203
+ var options = (0, _toConsumableArray2["default"])(layer.visConfigSettings.colormapId.options);
204
+ var categoricalListItem = getCategoricalColormapListItem(categoricalColorMap);
205
+ if (categoricalListItem) {
206
+ options.push(categoricalListItem);
207
+ }
208
+ return options;
209
+ }, [layer.visConfigSettings.colormapId.options, categoricalColorMap]);
210
+ var _ref5 = _layers.PRESET_OPTIONS[preset] || {},
211
+ bandCombination = _ref5.bandCombination;
212
+ var colormapAllowed = (0, _layers.isColormapAllowed)(bandCombination);
213
+ var rescalingAllowed = !categoricalColorMap && (0, _layers.isRescalingAllowed)(bandCombination);
214
+ var filterAllowed = (0, _layers.isFilterAllowed)(bandCombination);
215
+
216
+ // Here we show the UI when useSTACSearching is explicitly set to true so that the UI shows up
217
+ var stacSearchAllowed = (0, _layers.isSearchableStac)(stac) || useSTACSearching;
218
+ var selectedColormap = findVisConfigItemById(layer, 'colormapId') || getCategoricalColormapListItem(categoricalColorMap);
219
+ var selectedPreset = findVisConfigItemById(layer, 'preset');
220
+ var selectedSingleBandName = findItemById(layer, singleBandOptions, 'singleBandName');
221
+ var singleBandPresetOptions = (0, _layers.getSingleBandPresetOptions)(stac, singleBandName);
222
+ var _getRasterStatisticsM = (0, _layers.getRasterStatisticsMinMax)(stac, preset, singleBandPresetOptions),
223
+ _getRasterStatisticsM2 = (0, _slicedToArray2["default"])(_getRasterStatisticsM, 2),
224
+ minCategoricalBandValue = _getRasterStatisticsM2[0],
225
+ maxCategoricalBandValue = _getRasterStatisticsM2[1];
226
+ var ColorMapListItem = (0, _react.useMemo)(function () {
227
+ return (0, _rasterTileColormapListItem.getColorMapListItemComponent)({
228
+ colorMap: categoricalColorMap,
229
+ minValue: minCategoricalBandValue,
230
+ maxValue: maxCategoricalBandValue
231
+ });
232
+ }, [categoricalColorMap, minCategoricalBandValue, maxCategoricalBandValue]);
233
+ var isDynamicColorsOnly = !isDataSourceColorRangeAvailable(layer, stac, preset, singleBandPresetOptions);
234
+
235
+ // Default of `dynamicColor` is false. Set it true if it is not possible to get data source
236
+ // wide color range
237
+ (0, _react.useEffect)(function () {
238
+ if (isDynamicColorsOnly && !dynamicColor) {
239
+ visConfiguratorProps.onChange({
240
+ dynamicColor: true
241
+ });
242
+ }
243
+ }, [visConfiguratorProps, dynamicColor, isDynamicColorsOnly]);
244
+
245
+ // For PMTiles in raster format, only show opacity and terrain options for now
246
+ if (stac.pmtilesType === _constants.PMTilesType.RASTER) {
247
+ var _stac$rasterTileServe;
248
+ return /*#__PURE__*/_react["default"].createElement(StyledLayerConfigurator, null, /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, {
249
+ label: "Visual Settings",
250
+ collapsible: false
251
+ }), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps))), (0, _utils.getApplicationConfig)().rasterServerSupportsElevation && ((_stac$rasterTileServe = stac.rasterTileServerUrls) === null || _stac$rasterTileServe === void 0 ? void 0 : _stac$rasterTileServe.length) && /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, {
252
+ label: "Terrain"
253
+ }), /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, visConfiguratorProps, layer.visConfigSettings.enableTerrain))));
254
+ }
255
+ return /*#__PURE__*/_react["default"].createElement(StyledLayerConfigurator, null, availablePresets && /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, {
256
+ label: "Image Selection",
257
+ collapsible: false
258
+ }), /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabelWrapper, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, "Preset"), /*#__PURE__*/_react["default"].createElement(InfoHelper, {
259
+ id: "preset",
260
+ description: "Select a preset to describe how to combine spectral bands."
261
+ })), /*#__PURE__*/_react["default"].createElement(_itemSelector["default"], {
262
+ selectedItems: selectedPreset,
263
+ options: presetOptions,
264
+ multiSelect: false,
265
+ searchable: false,
266
+ displayOption: "label",
267
+ getOptionValue: "id",
268
+ onChange: function onChange(newPreset) {
269
+ var overrides = updateColorParamsOnPresetChange(stac, visConfiguratorProps.layer.config.visConfig.preset, newPreset);
270
+ visConfiguratorProps.onChange(_objectSpread(_objectSpread({}, overrides), {}, {
271
+ preset: newPreset
272
+ }));
273
+ }
274
+ }), selectedPreset !== null && selectedPreset !== void 0 && selectedPreset.description ? /*#__PURE__*/_react["default"].createElement(DescriptionText, null, selectedPreset === null || selectedPreset === void 0 ? void 0 : selectedPreset.description, selectedPreset !== null && selectedPreset !== void 0 && selectedPreset.infoUrl ? /*#__PURE__*/_react["default"].createElement("a", {
275
+ target: "_blank",
276
+ rel: "noopener noreferrer",
277
+ href: selectedPreset === null || selectedPreset === void 0 ? void 0 : selectedPreset.infoUrl
278
+ }, "More Info") : null) : null), selectedPreset.id === 'singleBand' && /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabelWrapper, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, "Single Band Name"), /*#__PURE__*/_react["default"].createElement(InfoHelper, {
279
+ id: "".concat(layer.id, "-single-band-name"),
280
+ description: "Select a single band."
281
+ })), /*#__PURE__*/_react["default"].createElement(_itemSelector["default"], {
282
+ selectedItems: selectedSingleBandName,
283
+ options: singleBandOptions,
284
+ multiSelect: false,
285
+ searchable: false,
286
+ displayOption: "label",
287
+ getOptionValue: "id",
288
+ onChange: function onChange(val) {
289
+ visConfiguratorProps.onChange({
290
+ singleBandName: val
291
+ });
292
+ }
293
+ })), STAC_SEARCH_UI_ENABLED && stacSearchAllowed && /*#__PURE__*/_react["default"].createElement(CustomVisConfigSwitch, (0, _extends2["default"])({}, layer.visConfigSettings.useSTACSearching, visConfiguratorProps)), STAC_SEARCH_UI_ENABLED && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, stacSearchAllowed && useSTACSearching ? /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabelWrapper, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, "STAC Search Provider")), /*#__PURE__*/_react["default"].createElement(_itemSelector["default"], (0, _extends2["default"])({}, layer.visConfigSettings.stacSearchProvider, {
294
+ selectedItems: findVisConfigItemById(layer, 'stacSearchProvider'),
295
+ placeholder: "Choose search provider",
296
+ multiSelect: false,
297
+ searchable: false,
298
+ displayOption: "label",
299
+ getOptionValue: "id",
300
+ onChange: function onChange(val) {
301
+ // TODO: check when switching layers so that you don't mismatch allowed mosaics with layers
302
+ visConfiguratorProps.onChange({
303
+ stacSearchProvider: val
304
+ });
305
+ }
306
+ })), /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabelWrapper, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, "Date Range")), /*#__PURE__*/_react["default"].createElement(_styledComponents2.Input, {
307
+ type: "text",
308
+ id: "".concat(layer.id, "-startDate"),
309
+ onChange: function onChange(_ref6) {
310
+ var value = _ref6.target.value;
311
+ visConfiguratorProps.onChange({
312
+ startDate: value
313
+ });
314
+ },
315
+ value: layer.config.visConfig.startDate
316
+ }), /*#__PURE__*/_react["default"].createElement(_styledComponents2.Input, {
317
+ type: "text",
318
+ id: "".concat(layer.id, "-endDate"),
319
+ onChange: function onChange(_ref7) {
320
+ var value = _ref7.target.value;
321
+ visConfiguratorProps.onChange({
322
+ endDate: value
323
+ });
324
+ },
325
+ value: layer.config.visConfig.endDate
326
+ }), /*#__PURE__*/_react["default"].createElement(DescriptionText, null, "Date format must be \"YYYY-MM-DD\"")) : null)), /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, {
327
+ label: "Visual Settings",
328
+ collapsible: false
329
+ }), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.opacity, visConfiguratorProps)), colormapAllowed && /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, "Colormap"), /*#__PURE__*/_react["default"].createElement(_itemSelector["default"], {
330
+ selectedItems: selectedColormap,
331
+ options: colormapOptions,
332
+ multiSelect: false,
333
+ displayOption: "label",
334
+ getOptionValue: "id",
335
+ onChange: function onChange(val) {
336
+ visConfiguratorProps.onChange({
337
+ colormapId: val
338
+ });
339
+ },
340
+ DropDownLineItemRenderComponent: ColorMapListItem,
341
+ filterOption: "label",
342
+ searchable: true
343
+ }))), rescalingAllowed && /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, {
344
+ label: "Rescaling"
345
+ }), /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, visConfiguratorProps, layer.visConfigSettings.dynamicColor, {
346
+ disabled: isDynamicColorsOnly
347
+ })), /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, layer.visConfigSettings.nonLinearRescaling, visConfiguratorProps, {
348
+ label: nonLinearRescaling ? 'Non-Linear Rescaling' : 'Linear Rescaling'
349
+ })), nonLinearRescaling ? /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.gammaContrastFactor, visConfiguratorProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sigmoidalContrastFactor, visConfiguratorProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.sigmoidalBiasFactor, visConfiguratorProps))) : /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.linearRescalingFactor, visConfiguratorProps)), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.saturationValue, visConfiguratorProps))), filterAllowed && /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, layer.visConfigSettings.filterEnabled, visConfiguratorProps, {
350
+ collapsible: true
351
+ }), /*#__PURE__*/_react["default"].createElement(VisConfigSlider, (0, _extends2["default"])({}, layer.visConfigSettings.filterRange, visConfiguratorProps))), (0, _utils.getApplicationConfig)().rasterServerSupportsElevation && ((_stac$rasterTileServe2 = stac.rasterTileServerUrls) === null || _stac$rasterTileServe2 === void 0 ? void 0 : _stac$rasterTileServe2.length) && /*#__PURE__*/_react["default"].createElement(LayerConfigGroup, (0, _extends2["default"])({}, visConfiguratorProps, {
352
+ label: "Terrain"
353
+ }), /*#__PURE__*/_react["default"].createElement(VisConfigSwitch, (0, _extends2["default"])({}, visConfiguratorProps, layer.visConfigSettings.enableTerrain))));
354
+ };
355
+ return STACCheckConfiguratorWrapper;
356
+ }
357
+ var _default = exports["default"] = RasterTileLayerConfiguratorFactory;
358
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfY29uc3RhbnRzIiwiX2xheWVycyIsIl9sb2NhbGl6YXRpb24iLCJfdXRpbHMiLCJfcmFzdGVyVGlsZUNvbG9ybWFwTGlzdEl0ZW0iLCJfc3R5bGVkQ29tcG9uZW50czIiLCJfc3dpdGNoIiwiX2luZm9IZWxwZXIiLCJfaXRlbVNlbGVjdG9yIiwiX3Zpc0NvbmZpZ1NsaWRlciIsIl9sYXllckNvbmZpZ0dyb3VwIiwiX3Zpc0NvbmZpZ1N3aXRjaCIsIl90ZW1wbGF0ZU9iamVjdCIsIl90ZW1wbGF0ZU9iamVjdDIiLCJfdGVtcGxhdGVPYmplY3QzIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0Iiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiU1RBQ19TRUFSQ0hfVUlfRU5BQkxFRCIsIlN0eWxlZFZpc0NvbmZpZ1N3aXRjaCIsInN0eWxlZCIsImRpdiIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwiQ3VzdG9tVmlzQ29uZmlnU3dpdGNoIiwiX3JlZiIsIl9yZWYkbGF5ZXIiLCJsYXllciIsImlkIiwiY29uZmlnIiwicHJvcGVydHkiLCJvbkNoYW5nZSIsImxhYmVsIiwiZGlzYWJsZWQiLCJjcmVhdGVFbGVtZW50IiwiU2lkZVBhbmVsU2VjdGlvbiIsIkJvb2xlYW4iLCJjbGFzc05hbWUiLCJQYW5lbExhYmVsV3JhcHBlciIsIlBhbmVsTGFiZWwiLCJGb3JtYXR0ZWRNZXNzYWdlIiwiY2FwaXRhbGl6ZUZpcnN0TGV0dGVyIiwiY2hlY2tlZCIsInZpc0NvbmZpZyIsImNvbmNhdCIsIlN0eWxlZExheWVyQ29uZmlndXJhdG9yIiwiRGVzY3JpcHRpb25UZXh0IiwicHJvcHMiLCJ0aGVtZSIsInN1YnRleHRDb2xvciIsImZpbmRWaXNDb25maWdJdGVtQnlJZCIsInByb3AiLCJ2aXNDb25maWdTZXR0aW5ncyIsIm9wdGlvbnMiLCJmaW5kIiwib3AiLCJmaW5kSXRlbUJ5SWQiLCJnZXRCYW5kU2VsZWN0b3JPcHRpb25zIiwic3RhYyIsImVvQmFuZHMiLCJnZXRFT0JhbmRzIiwibWFwIiwiZW9CYW5kIiwibmFtZSIsImNvbW1vbl9uYW1lIiwiZ2V0Q2F0ZWdvcmljYWxDb2xvcm1hcExpc3RJdGVtIiwiY2F0ZWdvcmljYWxDb2xvck1hcCIsImNhdGVnb3JpY2FsSXRlbSIsIkNBVEVHT1JJQ0FMX0NPTE9STUFQX0lEIiwiaXNEYXRhU291cmNlQ29sb3JSYW5nZUF2YWlsYWJsZSIsInByZXNldCIsInNpbmdsZUJhbmRQcmVzZXRPcHRpb25zIiwibWluUGl4ZWxWYWx1ZSIsIm1heFBpeGVsVmFsdWUiLCJkYXRhU291cmNlUGFyYW1zIiwiZ2V0RGF0YVNvdXJjZVBhcmFtcyIsInNpbmdsZUJhbmQiLCJ1cGRhdGVDb2xvclBhcmFtc09uUHJlc2V0Q2hhbmdlIiwib2xkUHJlc2V0IiwibmV3UHJlc2V0IiwiY29sb3JQYXJhbXMiLCJjb2xvck92ZXJyaWRlcyIsIkRBVEFfU09VUkNFX0NPTE9SX0RFRkFVTFRTIiwiYmFuZE9mSW50ZXJlc3QiLCJSQVNURVJfQ09MT1JfUkVTRVRfUEFSQU1TIiwiUmFzdGVyVGlsZUxheWVyQ29uZmlndXJhdG9yRmFjdG9yeSIsImRlcHMiLCJMYXllckNvbmZpZ0dyb3VwRmFjdG9yeSIsIlZpc0NvbmZpZ1NsaWRlckZhY3RvcnkiLCJJbmZvSGVscGVyRmFjdG9yeSIsIlZpc0NvbmZpZ1N3aXRjaEZhY3RvcnkiLCJMYXllckNvbmZpZ0dyb3VwIiwiVmlzQ29uZmlnU2xpZGVyIiwiSW5mb0hlbHBlciIsIlZpc0NvbmZpZ1N3aXRjaCIsIlNUQUNDaGVja0NvbmZpZ3VyYXRvcldyYXBwZXIiLCJfcmVmMiIsInZpc0NvbmZpZ3VyYXRvclByb3BzIiwiZGF0YXNldCIsIm1ldGFkYXRhIiwiUmFzdGVyVGlsZUxheWVyQ29uZmlndXJhdG9yIiwiX3JlZjMiLCJfc3RhYyRyYXN0ZXJUaWxlU2VydmUyIiwiX2xheWVyJGNvbmZpZyR2aXNDb25mIiwibm9uTGluZWFyUmVzY2FsaW5nIiwidXNlU1RBQ1NlYXJjaGluZyIsImNvbG9yUmFuZ2UiLCJjb2xvck1hcCIsImR5bmFtaWNDb2xvciIsInNpbmdsZUJhbmROYW1lIiwiYXZhaWxhYmxlUHJlc2V0cyIsInVzZU1lbW8iLCJmaWx0ZXJBdmFpbGFibGVQcmVzZXRzIiwiUFJFU0VUX09QVElPTlMiLCJwcmVzZXRPcHRpb25zIiwiX3JlZjQiLCJpbmNsdWRlcyIsInNpbmdsZUJhbmRPcHRpb25zIiwiY29sb3JtYXBPcHRpb25zIiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsImNvbG9ybWFwSWQiLCJjYXRlZ29yaWNhbExpc3RJdGVtIiwiX3JlZjUiLCJiYW5kQ29tYmluYXRpb24iLCJjb2xvcm1hcEFsbG93ZWQiLCJpc0NvbG9ybWFwQWxsb3dlZCIsInJlc2NhbGluZ0FsbG93ZWQiLCJpc1Jlc2NhbGluZ0FsbG93ZWQiLCJmaWx0ZXJBbGxvd2VkIiwiaXNGaWx0ZXJBbGxvd2VkIiwic3RhY1NlYXJjaEFsbG93ZWQiLCJpc1NlYXJjaGFibGVTdGFjIiwic2VsZWN0ZWRDb2xvcm1hcCIsInNlbGVjdGVkUHJlc2V0Iiwic2VsZWN0ZWRTaW5nbGVCYW5kTmFtZSIsImdldFNpbmdsZUJhbmRQcmVzZXRPcHRpb25zIiwiX2dldFJhc3RlclN0YXRpc3RpY3NNIiwiZ2V0UmFzdGVyU3RhdGlzdGljc01pbk1heCIsIl9nZXRSYXN0ZXJTdGF0aXN0aWNzTTIiLCJfc2xpY2VkVG9BcnJheTIiLCJtaW5DYXRlZ29yaWNhbEJhbmRWYWx1ZSIsIm1heENhdGVnb3JpY2FsQmFuZFZhbHVlIiwiQ29sb3JNYXBMaXN0SXRlbSIsImdldENvbG9yTWFwTGlzdEl0ZW1Db21wb25lbnQiLCJtaW5WYWx1ZSIsIm1heFZhbHVlIiwiaXNEeW5hbWljQ29sb3JzT25seSIsInVzZUVmZmVjdCIsInBtdGlsZXNUeXBlIiwiUE1UaWxlc1R5cGUiLCJSQVNURVIiLCJfc3RhYyRyYXN0ZXJUaWxlU2VydmUiLCJfZXh0ZW5kczIiLCJjb2xsYXBzaWJsZSIsIm9wYWNpdHkiLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsInJhc3RlclNlcnZlclN1cHBvcnRzRWxldmF0aW9uIiwicmFzdGVyVGlsZVNlcnZlclVybHMiLCJlbmFibGVUZXJyYWluIiwiZGVzY3JpcHRpb24iLCJzZWxlY3RlZEl0ZW1zIiwibXVsdGlTZWxlY3QiLCJzZWFyY2hhYmxlIiwiZGlzcGxheU9wdGlvbiIsImdldE9wdGlvblZhbHVlIiwib3ZlcnJpZGVzIiwiaW5mb1VybCIsInRhcmdldCIsInJlbCIsImhyZWYiLCJ2YWwiLCJGcmFnbWVudCIsInN0YWNTZWFyY2hQcm92aWRlciIsInBsYWNlaG9sZGVyIiwiSW5wdXQiLCJ0eXBlIiwiX3JlZjYiLCJ2YWx1ZSIsInN0YXJ0RGF0ZSIsIl9yZWY3IiwiZW5kRGF0ZSIsIkRyb3BEb3duTGluZUl0ZW1SZW5kZXJDb21wb25lbnQiLCJmaWx0ZXJPcHRpb24iLCJnYW1tYUNvbnRyYXN0RmFjdG9yIiwic2lnbW9pZGFsQ29udHJhc3RGYWN0b3IiLCJzaWdtb2lkYWxCaWFzRmFjdG9yIiwibGluZWFyUmVzY2FsaW5nRmFjdG9yIiwic2F0dXJhdGlvblZhbHVlIiwiZmlsdGVyRW5hYmxlZCIsImZpbHRlclJhbmdlIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NpZGUtcGFuZWwvbGF5ZXItcGFuZWwvcmFzdGVyLXRpbGUtbGF5ZXItY29uZmlndXJhdG9yLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgUmVhY3QsIHt1c2VFZmZlY3QsIHVzZU1lbW99IGZyb20gJ3JlYWN0JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuXG5pbXBvcnQge1BNVGlsZXNUeXBlfSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBmaWx0ZXJBdmFpbGFibGVQcmVzZXRzLFxuICBnZXRFT0JhbmRzLFxuICBnZXRSYXN0ZXJTdGF0aXN0aWNzTWluTWF4LFxuICBnZXRTaW5nbGVCYW5kUHJlc2V0T3B0aW9ucyxcbiAgaXNDb2xvcm1hcEFsbG93ZWQsXG4gIGlzRmlsdGVyQWxsb3dlZCxcbiAgaXNSZXNjYWxpbmdBbGxvd2VkLFxuICBpc1NlYXJjaGFibGVTdGFjLFxuICBDb21wbGV0ZVNUQUNPYmplY3QsXG4gIEdldFRpbGVEYXRhQ3VzdG9tUHJvcHMsXG4gIERhdGFTb3VyY2VQYXJhbXMsXG4gIFByZXNldE9wdGlvbixcbiAgUmFzdGVyVGlsZUxheWVyLFxuICBDQVRFR09SSUNBTF9DT0xPUk1BUF9JRCxcbiAgUFJFU0VUX09QVElPTlMsXG4gIFJBU1RFUl9DT0xPUl9SRVNFVF9QQVJBTVMsXG4gIERBVEFfU09VUkNFX0NPTE9SX0RFRkFVTFRTXG59IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7Rm9ybWF0dGVkTWVzc2FnZX0gZnJvbSAnQGtlcGxlci5nbC9sb2NhbGl6YXRpb24nO1xuaW1wb3J0IHtjYXBpdGFsaXplRmlyc3RMZXR0ZXIsIGdldEFwcGxpY2F0aW9uQ29uZmlnfSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7S2VwbGVyVGFibGUgYXMgS2VwbGVyRGF0YXNldH0gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5pbXBvcnQgdHlwZSB7U3RhY1R5cGVzfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcblxuaW1wb3J0IHtnZXRDb2xvck1hcExpc3RJdGVtQ29tcG9uZW50fSBmcm9tICcuL3Jhc3Rlci10aWxlLWNvbG9ybWFwLWxpc3QtaXRlbSc7XG5cbmltcG9ydCB7XG4gIElucHV0LFxuICBQYW5lbExhYmVsLFxuICBQYW5lbExhYmVsV3JhcHBlcixcbiAgU2lkZVBhbmVsU2VjdGlvblxufSBmcm9tICcuLi8uLi9jb21tb24vc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IFN3aXRjaCBmcm9tICcuLi8uLi9jb21tb24vc3dpdGNoJztcbmltcG9ydCBJbmZvSGVscGVyRmFjdG9yeSBmcm9tICcuLi8uLi9jb21tb24vaW5mby1oZWxwZXInO1xuaW1wb3J0IEl0ZW1TZWxlY3RvciBmcm9tICcuLi8uLi9jb21tb24vaXRlbS1zZWxlY3Rvci9pdGVtLXNlbGVjdG9yJztcbmltcG9ydCBWaXNDb25maWdTbGlkZXJGYWN0b3J5IGZyb20gJy4uLy4uL3NpZGUtcGFuZWwvbGF5ZXItcGFuZWwvdmlzLWNvbmZpZy1zbGlkZXInO1xuaW1wb3J0IExheWVyQ29uZmlnR3JvdXBGYWN0b3J5IGZyb20gJy4uLy4uL3NpZGUtcGFuZWwvbGF5ZXItcGFuZWwvbGF5ZXItY29uZmlnLWdyb3VwJztcbmltcG9ydCBWaXNDb25maWdTd2l0Y2hGYWN0b3J5IGZyb20gJy4uLy4uL3NpZGUtcGFuZWwvbGF5ZXItcGFuZWwvdmlzLWNvbmZpZy1zd2l0Y2gnO1xuXG50eXBlIEVPQmFuZCA9IFN0YWNUeXBlcy5CYW5kO1xuXG5jb25zdCBTVEFDX1NFQVJDSF9VSV9FTkFCTEVEID0gdHJ1ZTtcblxuY29uc3QgU3R5bGVkVmlzQ29uZmlnU3dpdGNoID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXG4gIC52aXMtY29uZmlnLXN3aXRjaF9fdGl0bGUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gIH1cbmA7XG5cbmNvbnN0IEN1c3RvbVZpc0NvbmZpZ1N3aXRjaCA9ICh7XG4gIGxheWVyOiB7aWQsIGNvbmZpZ30sXG4gIHByb3BlcnR5LFxuICBvbkNoYW5nZSxcbiAgbGFiZWwsXG4gIGRpc2FibGVkXG59OiB7XG4gIGxheWVyOiBSYXN0ZXJUaWxlTGF5ZXI7XG4gIHByb3BlcnR5OiBzdHJpbmc7XG4gIG9uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4gdm9pZDtcbiAgbGFiZWw6IHN0cmluZztcbiAgZGlzYWJsZWQ6IGJvb2xlYW47XG59KSA9PiAoXG4gIDxTaWRlUGFuZWxTZWN0aW9uIGRpc2FibGVkPXtCb29sZWFuKGRpc2FibGVkKX0+XG4gICAgPFN0eWxlZFZpc0NvbmZpZ1N3aXRjaCBjbGFzc05hbWU9XCJ2aXMtY29uZmlnLXN3aXRjaFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJ2aXMtY29uZmlnLXN3aXRjaF9fdGl0bGVcIj5cbiAgICAgICAgPFBhbmVsTGFiZWxXcmFwcGVyPlxuICAgICAgICAgIHtsYWJlbCA/IChcbiAgICAgICAgICAgIDxQYW5lbExhYmVsPlxuICAgICAgICAgICAgICB7KGxhYmVsICYmIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPXtsYWJlbH0gLz4pIHx8IGNhcGl0YWxpemVGaXJzdExldHRlcihwcm9wZXJ0eSl9XG4gICAgICAgICAgICA8L1BhbmVsTGFiZWw+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDwvUGFuZWxMYWJlbFdyYXBwZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwidmlzLWNvbmZpZy1zd2l0Y2hfX3N3aXRjaFwiPlxuICAgICAgICA8U3dpdGNoXG4gICAgICAgICAgY2hlY2tlZD17Y29uZmlnLnZpc0NvbmZpZ1twcm9wZXJ0eV19XG4gICAgICAgICAgaWQ9e2Ake2lkfS0ke3Byb3BlcnR5fS1zd2l0Y2hgfVxuICAgICAgICAgIG9uQ2hhbmdlPXsoKSA9PiBvbkNoYW5nZSh7W3Byb3BlcnR5XTogIWNvbmZpZy52aXNDb25maWdbcHJvcGVydHldfSl9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L1N0eWxlZFZpc0NvbmZpZ1N3aXRjaD5cbiAgPC9TaWRlUGFuZWxTZWN0aW9uPlxuKTtcblxuY29uc3QgU3R5bGVkTGF5ZXJDb25maWd1cmF0b3IgPSBzdHlsZWQuZGl2YFxuICBtYXJnaW4tdG9wOiAxMnB4O1xuYDtcblxuY29uc3QgRGVzY3JpcHRpb25UZXh0ID0gc3R5bGVkKFBhbmVsTGFiZWwpYFxuICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgZGlzcGxheTogaW5saW5lO1xuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zdWJ0ZXh0Q29sb3J9O1xuXG4gIGEge1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgIG1hcmdpbi1sZWZ0OiA0cHg7XG4gIH1cbmA7XG5cbi8vIFRPRE86IGNvbWJpbmUgdGhlc2UgdHdvIGhlbHBlcnMgaW50byBvbmVcbmZ1bmN0aW9uIGZpbmRWaXNDb25maWdJdGVtQnlJZChsYXllciwgcHJvcCkge1xuICByZXR1cm4gbGF5ZXIudmlzQ29uZmlnU2V0dGluZ3NbcHJvcF0ub3B0aW9ucy5maW5kKG9wID0+IG9wLmlkID09PSBsYXllci5jb25maWcudmlzQ29uZmlnW3Byb3BdKTtcbn1cblxuZnVuY3Rpb24gZmluZEl0ZW1CeUlkKGxheWVyLCBvcHRpb25zLCBwcm9wKSB7XG4gIC8vIEZvciBub3cgaXQncyBwb3NzaWJsZSB0aGF0IG5vbi1yYXN0ZXIgbWV0YWRhdGEgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIHJhc3RlciBjb25maWd1cmF0b3IsIHNvXG4gIC8vIG9wdGlvbnMgbWF5IGJlIG51bGxcbiAgcmV0dXJuIG9wdGlvbnM/LmZpbmQob3AgPT4gb3AuaWQgPT09IGxheWVyLmNvbmZpZy52aXNDb25maWdbcHJvcF0pO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIGRyb3AgZG93biBsYWJlbHMgZm9yIHNpbmdsZSBiYW5kIHNlbGVjdG9yXG4gKiBAcGFyYW0gc3RhYyAtIFNUQUMgaXRlbSBtZXRhZGF0YSBvYmplY3RcbiAqIEByZXR1cm5zIGFycmF5IG9mIHtpZCwgbGFiZWx9IGVsZW1lbnRzXG4gKi9cbmZ1bmN0aW9uIGdldEJhbmRTZWxlY3Rvck9wdGlvbnMoc3RhYzogQ29tcGxldGVTVEFDT2JqZWN0KToge2lkPzogc3RyaW5nOyBsYWJlbD86IHN0cmluZ31bXSB7XG4gIGNvbnN0IGVvQmFuZHMgPSBnZXRFT0JhbmRzKHN0YWMpIHx8IFtdO1xuICByZXR1cm4gZW9CYW5kcy5tYXAoKGVvQmFuZDogRU9CYW5kKSA9PiAoe1xuICAgIGlkOiBlb0JhbmQubmFtZSB8fCBlb0JhbmQuY29tbW9uX25hbWUsXG4gICAgbGFiZWw6IGVvQmFuZC5jb21tb25fbmFtZVxuICAgICAgPyBgJHtlb0JhbmQubmFtZSB8fCBlb0JhbmQuY29tbW9uX25hbWV9ICgke2VvQmFuZC5jb21tb25fbmFtZX0pYFxuICAgICAgOiBlb0JhbmQubmFtZVxuICB9KSk7XG59XG5cbmZ1bmN0aW9uIGdldENhdGVnb3JpY2FsQ29sb3JtYXBMaXN0SXRlbShjYXRlZ29yaWNhbENvbG9yTWFwKSB7XG4gIGxldCBjYXRlZ29yaWNhbEl0ZW06IHtsYWJlbDogc3RyaW5nOyBpZDogc3RyaW5nfSB8IHVuZGVmaW5lZDtcbiAgaWYgKGNhdGVnb3JpY2FsQ29sb3JNYXApIHtcbiAgICBjYXRlZ29yaWNhbEl0ZW0gPSB7bGFiZWw6ICdDYXRlZ29yaWNhbCcsIGlkOiBDQVRFR09SSUNBTF9DT0xPUk1BUF9JRH07XG4gIH1cbiAgcmV0dXJuIGNhdGVnb3JpY2FsSXRlbTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBkYXRhIHNvdXJjZSBnbG9iYWwgcGl4ZWwgY29sb3IgcmFuZ2UgaXMgY2FsY3VsYXRlZCBjb3JyZWN0bHlcbiAqIEBwYXJhbSBsYXllciAtIHJhc3RlciBsYXllclxuICogQHBhcmFtIHN0YWMgLSBTVEFDIG1ldGFkYXRhIG9iamVjdFxuICogQHBhcmFtIHByZXNldCAtIHByZXNldCBuYW1lXG4gKiBAcGFyYW0gc2luZ2xlQmFuZFByZXNldE9wdGlvbnMgLSBvcHRpb25zIGZvciBzaW5nbGUgYmFuZCBwcmVzZXRcbiAqIEByZXR1cm5zIGJvb2xlYW4gdmFsdWVcbiAqL1xuZnVuY3Rpb24gaXNEYXRhU291cmNlQ29sb3JSYW5nZUF2YWlsYWJsZShcbiAgbGF5ZXI6IFJhc3RlclRpbGVMYXllcixcbiAgc3RhYzogQ29tcGxldGVTVEFDT2JqZWN0LFxuICBwcmVzZXQ6IHN0cmluZyxcbiAgc2luZ2xlQmFuZFByZXNldE9wdGlvbnM6IFByZXNldE9wdGlvblsnc2luZ2xlQmFuZCddXG4pOiBib29sZWFuIHtcbiAgbGV0IG1pblBpeGVsVmFsdWU6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBsZXQgbWF4UGl4ZWxWYWx1ZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIGNvbnN0IGRhdGFTb3VyY2VQYXJhbXM6IERhdGFTb3VyY2VQYXJhbXMgfCBudWxsID0gbGF5ZXIuZ2V0RGF0YVNvdXJjZVBhcmFtcyhzdGFjLCBwcmVzZXQsIHtcbiAgICBzaW5nbGVCYW5kOiBzaW5nbGVCYW5kUHJlc2V0T3B0aW9uc1xuICB9KTtcbiAgaWYgKGRhdGFTb3VyY2VQYXJhbXMpIHtcbiAgICBtaW5QaXhlbFZhbHVlID0gZGF0YVNvdXJjZVBhcmFtcy5taW5QaXhlbFZhbHVlO1xuICAgIG1heFBpeGVsVmFsdWUgPSBkYXRhU291cmNlUGFyYW1zLm1heFBpeGVsVmFsdWU7XG4gIH1cbiAgcmV0dXJuIG1pblBpeGVsVmFsdWUgIT09IG51bGwgJiYgbWF4UGl4ZWxWYWx1ZSAhPT0gbnVsbDtcbn1cblxuLyoqXG4gKiBVcGRhdGVzIGNvbG9yIHBhcmFtZXRlcnMgYmFzZWQgb24gYSBjaGFuZ2UgaW4gdmlzdWFsaXphdGlvbiBwcmVzZXQuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBhZGp1c3RzIHRoZSBjb2xvciBwcm9jZXNzaW5nIHBhcmFtZXRlcnMgd2hlbiB0aGUgdmlzdWFsaXphdGlvblxuICogcHJlc2V0IGNoYW5nZXMsIGJhc2VkIG9uIHdoZXRoZXIgdGhlIHByZXNldCBpcyBzd2l0Y2hpbmcgdG8gb3IgZnJvbSBhXG4gKiBzaW5nbGUtYmFuZC4gRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGFwcGx5IGNvbG9yXG4gKiBlbmhhbmNlbWVudHMgb3IgcmVzZXQgcGFyYW1ldGVycyBiYXNlZCBvbiB0aGUgcHJlc2V0IHRyYW5zaXRpb24uXG4gKlxuICogQHBhcmFtIHN0YWMgQSBTVEFDIChTcGF0aW9UZW1wb3JhbCBBc3NldCBDYXRhbG9nKSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBkYXRhc2V0LlxuICogQHBhcmFtIG5ld1ByZXNldCBUaGUgb2xkIHZpc3VhbGl6YXRpb24gcHJlc2V0IGJlaW5nIGFwcGxpZWQuXG4gKiBAcGFyYW0gbmV3UHJlc2V0IFRoZSBuZXcgdmlzdWFsaXphdGlvbiBwcmVzZXQgYmVpbmcgYXBwbGllZC5cbiAqIEByZXR1cm5zIFRoZSB1cGRhdGVkIGNvbG9yIHBhcmFtZXRlcnMgdG8gYXBwbHkuXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZUNvbG9yUGFyYW1zT25QcmVzZXRDaGFuZ2UoXG4gIHN0YWM6IENvbXBsZXRlU1RBQ09iamVjdCxcbiAgb2xkUHJlc2V0OiBzdHJpbmcsXG4gIG5ld1ByZXNldDogc3RyaW5nXG4pIHtcbiAgbGV0IGNvbG9yUGFyYW1zID0ge307XG4gIGNvbnN0IGNvbG9yT3ZlcnJpZGVzID0gREFUQV9TT1VSQ0VfQ09MT1JfREVGQVVMVFNbc3RhYy5pZF07XG4gIGlmIChjb2xvck92ZXJyaWRlcykgcmV0dXJuIGNvbG9yUGFyYW1zO1xuXG4gIGNvbnN0IGJhbmRPZkludGVyZXN0ID0gJ3NpbmdsZUJhbmQnO1xuICBpZiAob2xkUHJlc2V0ID09PSBiYW5kT2ZJbnRlcmVzdCAmJiBuZXdQcmVzZXQgIT09IGJhbmRPZkludGVyZXN0KSB7XG4gICAgLy8gZW5jaGFuY2UgY29sb3JzIGZvciBtdWx0aWJhbmQgY29tYmluYXRpb25zXG4gICAgY29sb3JQYXJhbXMgPSBjb2xvck92ZXJyaWRlcztcbiAgfSBlbHNlIGlmIChvbGRQcmVzZXQgIT09IGJhbmRPZkludGVyZXN0ICYmIG5ld1ByZXNldCA9PT0gYmFuZE9mSW50ZXJlc3QpIHtcbiAgICAvLyByZXNldCBpbWFnZSBwcm9jZXNzbmcgcGFyYW1zXG4gICAgY29sb3JQYXJhbXMgPSBSQVNURVJfQ09MT1JfUkVTRVRfUEFSQU1TO1xuICB9XG5cbiAgcmV0dXJuIGNvbG9yUGFyYW1zO1xufVxuXG50eXBlIFJhc3RlclRpbGVMYXllckNvbmZpZ3VyYXRvclByb3BzID0ge1xuICBsYXllcjogUmFzdGVyVGlsZUxheWVyO1xuICB2aXNDb25maWd1cmF0b3JQcm9wczogYW55O1xuICBkYXRhc2V0OiBLZXBsZXJEYXRhc2V0O1xufTtcblxuUmFzdGVyVGlsZUxheWVyQ29uZmlndXJhdG9yRmFjdG9yeS5kZXBzID0gW1xuICBMYXllckNvbmZpZ0dyb3VwRmFjdG9yeSxcbiAgVmlzQ29uZmlnU2xpZGVyRmFjdG9yeSxcbiAgSW5mb0hlbHBlckZhY3RvcnksXG4gIFZpc0NvbmZpZ1N3aXRjaEZhY3Rvcnlcbl07XG5cbmZ1bmN0aW9uIFJhc3RlclRpbGVMYXllckNvbmZpZ3VyYXRvckZhY3RvcnkoXG4gIExheWVyQ29uZmlnR3JvdXA6IFJldHVyblR5cGU8dHlwZW9mIExheWVyQ29uZmlnR3JvdXBGYWN0b3J5PixcbiAgVmlzQ29uZmlnU2xpZGVyOiBSZXR1cm5UeXBlPHR5cGVvZiBWaXNDb25maWdTbGlkZXJGYWN0b3J5PixcbiAgSW5mb0hlbHBlcjogUmV0dXJuVHlwZTx0eXBlb2YgSW5mb0hlbHBlckZhY3Rvcnk+LFxuICBWaXNDb25maWdTd2l0Y2g6IFJldHVyblR5cGU8dHlwZW9mIFZpc0NvbmZpZ1N3aXRjaEZhY3Rvcnk+XG4pOiBSZWFjdC5GQzxSYXN0ZXJUaWxlTGF5ZXJDb25maWd1cmF0b3JQcm9wcz4ge1xuICAvKipcbiAgICogV3JhcHBlciBhcm91bmQgY29uZmlndXJhdG9yIHRvIGNoZWNrIGZvciBkYXRhc2V0Lm1ldGFkYXRhIGJlaW5nIG51bGwvdW5kZWZpbmVkXG4gICAqL1xuICBjb25zdCBTVEFDQ2hlY2tDb25maWd1cmF0b3JXcmFwcGVyID0gKHtcbiAgICBsYXllcixcbiAgICB2aXNDb25maWd1cmF0b3JQcm9wcyxcbiAgICBkYXRhc2V0XG4gIH06IFJhc3RlclRpbGVMYXllckNvbmZpZ3VyYXRvclByb3BzKSA9PiB7XG4gICAgY29uc3Qgc3RhYyA9IGRhdGFzZXQ/Lm1ldGFkYXRhO1xuXG4gICAgLy8gSWYgbm8gZGF0YXNldCBpcyBsb2FkZWQgaW50byBLZXBsZXIsIHN0YWMgY2FuIGJlIHVuZGVmaW5lZFxuICAgIGlmICghc3RhYykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxSYXN0ZXJUaWxlTGF5ZXJDb25maWd1cmF0b3JcbiAgICAgICAgbGF5ZXI9e2xheWVyfVxuICAgICAgICB2aXNDb25maWd1cmF0b3JQcm9wcz17dmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgIGRhdGFzZXQ9e2RhdGFzZXR9XG4gICAgICAvPlxuICAgICk7XG4gIH07XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbiAgY29uc3QgUmFzdGVyVGlsZUxheWVyQ29uZmlndXJhdG9yOiBSZWFjdC5GQzxSYXN0ZXJUaWxlTGF5ZXJDb25maWd1cmF0b3JQcm9wcz4gPSAoe1xuICAgIGxheWVyLFxuICAgIHZpc0NvbmZpZ3VyYXRvclByb3BzLFxuICAgIGRhdGFzZXRcbiAgfSkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHByZXNldCxcbiAgICAgIG5vbkxpbmVhclJlc2NhbGluZyxcbiAgICAgIHVzZVNUQUNTZWFyY2hpbmcsXG4gICAgICBjb2xvclJhbmdlOiB7Y29sb3JNYXA6IGNhdGVnb3JpY2FsQ29sb3JNYXB9LFxuICAgICAgZHluYW1pY0NvbG9yLFxuICAgICAgc2luZ2xlQmFuZE5hbWVcbiAgICB9ID0gbGF5ZXIuY29uZmlnLnZpc0NvbmZpZztcblxuICAgIGNvbnN0IHN0YWMgPSBkYXRhc2V0Py5tZXRhZGF0YSBhcyBHZXRUaWxlRGF0YUN1c3RvbVByb3BzWydzdGFjJ107XG5cbiAgICBjb25zdCBhdmFpbGFibGVQcmVzZXRzID0gdXNlTWVtbygoKSA9PiBmaWx0ZXJBdmFpbGFibGVQcmVzZXRzKHN0YWMsIFBSRVNFVF9PUFRJT05TKSwgW3N0YWNdKTtcblxuICAgIGNvbnN0IHByZXNldE9wdGlvbnMgPSB1c2VNZW1vKFxuICAgICAgKCkgPT5cbiAgICAgICAgKFxuICAgICAgICAgIGxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnByZXNldC5vcHRpb25zIGFzIHVua25vd24gYXMge1xuICAgICAgICAgICAgaWQ6IHN0cmluZztcbiAgICAgICAgICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgICAgICAgfVtdXG4gICAgICAgICkuZmlsdGVyKCh7aWR9KSA9PiBhdmFpbGFibGVQcmVzZXRzPy5pbmNsdWRlcyhpZCkpLFxuICAgICAgW2xheWVyLnZpc0NvbmZpZ1NldHRpbmdzLnByZXNldC5vcHRpb25zLCBhdmFpbGFibGVQcmVzZXRzXVxuICAgICk7XG4gICAgY29uc3Qgc2luZ2xlQmFuZE9wdGlvbnMgPSB1c2VNZW1vKCgpID0+IGdldEJhbmRTZWxlY3Rvck9wdGlvbnMoc3RhYyksIFtzdGFjXSk7XG4gICAgY29uc3QgY29sb3JtYXBPcHRpb25zID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICBjb25zdCBvcHRpb25zID0gW1xuICAgICAgICAuLi4obGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuY29sb3JtYXBJZC5vcHRpb25zIGFzIHVua25vd24gYXMge1xuICAgICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgICAgbGFiZWw6IHN0cmluZztcbiAgICAgICAgfVtdKVxuICAgICAgXTtcbiAgICAgIGNvbnN0IGNhdGVnb3JpY2FsTGlzdEl0ZW0gPSBnZXRDYXRlZ29yaWNhbENvbG9ybWFwTGlzdEl0ZW0oY2F0ZWdvcmljYWxDb2xvck1hcCk7XG4gICAgICBpZiAoY2F0ZWdvcmljYWxMaXN0SXRlbSkge1xuICAgICAgICBvcHRpb25zLnB1c2goY2F0ZWdvcmljYWxMaXN0SXRlbSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9LCBbbGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuY29sb3JtYXBJZC5vcHRpb25zLCBjYXRlZ29yaWNhbENvbG9yTWFwXSk7XG5cbiAgICBjb25zdCB7YmFuZENvbWJpbmF0aW9ufSA9IFBSRVNFVF9PUFRJT05TW3ByZXNldF0gfHwge307XG4gICAgY29uc3QgY29sb3JtYXBBbGxvd2VkID0gaXNDb2xvcm1hcEFsbG93ZWQoYmFuZENvbWJpbmF0aW9uKTtcbiAgICBjb25zdCByZXNjYWxpbmdBbGxvd2VkID0gIWNhdGVnb3JpY2FsQ29sb3JNYXAgJiYgaXNSZXNjYWxpbmdBbGxvd2VkKGJhbmRDb21iaW5hdGlvbik7XG4gICAgY29uc3QgZmlsdGVyQWxsb3dlZCA9IGlzRmlsdGVyQWxsb3dlZChiYW5kQ29tYmluYXRpb24pO1xuXG4gICAgLy8gSGVyZSB3ZSBzaG93IHRoZSBVSSB3aGVuIHVzZVNUQUNTZWFyY2hpbmcgaXMgZXhwbGljaXRseSBzZXQgdG8gdHJ1ZSBzbyB0aGF0IHRoZSBVSSBzaG93cyB1cFxuICAgIGNvbnN0IHN0YWNTZWFyY2hBbGxvd2VkID0gaXNTZWFyY2hhYmxlU3RhYyhzdGFjKSB8fCB1c2VTVEFDU2VhcmNoaW5nO1xuXG4gICAgY29uc3Qgc2VsZWN0ZWRDb2xvcm1hcCA9XG4gICAgICBmaW5kVmlzQ29uZmlnSXRlbUJ5SWQobGF5ZXIsICdjb2xvcm1hcElkJykgfHxcbiAgICAgIGdldENhdGVnb3JpY2FsQ29sb3JtYXBMaXN0SXRlbShjYXRlZ29yaWNhbENvbG9yTWFwKTtcbiAgICBjb25zdCBzZWxlY3RlZFByZXNldCA9IGZpbmRWaXNDb25maWdJdGVtQnlJZChsYXllciwgJ3ByZXNldCcpO1xuICAgIGNvbnN0IHNlbGVjdGVkU2luZ2xlQmFuZE5hbWUgPSBmaW5kSXRlbUJ5SWQobGF5ZXIsIHNpbmdsZUJhbmRPcHRpb25zLCAnc2luZ2xlQmFuZE5hbWUnKTtcblxuICAgIGNvbnN0IHNpbmdsZUJhbmRQcmVzZXRPcHRpb25zID0gZ2V0U2luZ2xlQmFuZFByZXNldE9wdGlvbnMoc3RhYywgc2luZ2xlQmFuZE5hbWUpO1xuICAgIGNvbnN0IFttaW5DYXRlZ29yaWNhbEJhbmRWYWx1ZSwgbWF4Q2F0ZWdvcmljYWxCYW5kVmFsdWVdID0gZ2V0UmFzdGVyU3RhdGlzdGljc01pbk1heChcbiAgICAgIHN0YWMsXG4gICAgICBwcmVzZXQsXG4gICAgICBzaW5nbGVCYW5kUHJlc2V0T3B0aW9uc1xuICAgICk7XG4gICAgY29uc3QgQ29sb3JNYXBMaXN0SXRlbSA9IHVzZU1lbW8oXG4gICAgICAoKSA9PlxuICAgICAgICBnZXRDb2xvck1hcExpc3RJdGVtQ29tcG9uZW50KHtcbiAgICAgICAgICBjb2xvck1hcDogY2F0ZWdvcmljYWxDb2xvck1hcCxcbiAgICAgICAgICBtaW5WYWx1ZTogbWluQ2F0ZWdvcmljYWxCYW5kVmFsdWUsXG4gICAgICAgICAgbWF4VmFsdWU6IG1heENhdGVnb3JpY2FsQmFuZFZhbHVlXG4gICAgICAgIH0pLFxuICAgICAgW2NhdGVnb3JpY2FsQ29sb3JNYXAsIG1pbkNhdGVnb3JpY2FsQmFuZFZhbHVlLCBtYXhDYXRlZ29yaWNhbEJhbmRWYWx1ZV1cbiAgICApO1xuICAgIGNvbnN0IGlzRHluYW1pY0NvbG9yc09ubHkgPSAhaXNEYXRhU291cmNlQ29sb3JSYW5nZUF2YWlsYWJsZShcbiAgICAgIGxheWVyLFxuICAgICAgc3RhYyxcbiAgICAgIHByZXNldCxcbiAgICAgIHNpbmdsZUJhbmRQcmVzZXRPcHRpb25zXG4gICAgKTtcblxuICAgIC8vIERlZmF1bHQgb2YgYGR5bmFtaWNDb2xvcmAgaXMgZmFsc2UuIFNldCBpdCB0cnVlIGlmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBnZXQgZGF0YSBzb3VyY2VcbiAgICAvLyB3aWRlIGNvbG9yIHJhbmdlXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmIChpc0R5bmFtaWNDb2xvcnNPbmx5ICYmICFkeW5hbWljQ29sb3IpIHtcbiAgICAgICAgdmlzQ29uZmlndXJhdG9yUHJvcHMub25DaGFuZ2Uoe2R5bmFtaWNDb2xvcjogdHJ1ZX0pO1xuICAgICAgfVxuICAgIH0sIFt2aXNDb25maWd1cmF0b3JQcm9wcywgZHluYW1pY0NvbG9yLCBpc0R5bmFtaWNDb2xvcnNPbmx5XSk7XG5cbiAgICAvLyBGb3IgUE1UaWxlcyBpbiByYXN0ZXIgZm9ybWF0LCBvbmx5IHNob3cgb3BhY2l0eSBhbmQgdGVycmFpbiBvcHRpb25zIGZvciBub3dcbiAgICBpZiAoc3RhYy5wbXRpbGVzVHlwZSA9PT0gUE1UaWxlc1R5cGUuUkFTVEVSKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTGF5ZXJDb25maWd1cmF0b3I+XG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSBsYWJlbD1cIlZpc3VhbCBTZXR0aW5nc1wiIGNvbGxhcHNpYmxlPXtmYWxzZX0+XG4gICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5vcGFjaXR5fSB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IC8+XG4gICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICAgIHtnZXRBcHBsaWNhdGlvbkNvbmZpZygpLnJhc3RlclNlcnZlclN1cHBvcnRzRWxldmF0aW9uICYmXG4gICAgICAgICAgICBzdGFjLnJhc3RlclRpbGVTZXJ2ZXJVcmxzPy5sZW5ndGggJiYgKFxuICAgICAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cCB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IGxhYmVsPVwiVGVycmFpblwiPlxuICAgICAgICAgICAgICAgIDxWaXNDb25maWdTd2l0Y2hcbiAgICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5lbmFibGVUZXJyYWlufVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgICAgICl9XG4gICAgICAgIDwvU3R5bGVkTGF5ZXJDb25maWd1cmF0b3I+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8U3R5bGVkTGF5ZXJDb25maWd1cmF0b3I+XG4gICAgICAgIHthdmFpbGFibGVQcmVzZXRzICYmIChcbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cCB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IGxhYmVsPVwiSW1hZ2UgU2VsZWN0aW9uXCIgY29sbGFwc2libGU9e2ZhbHNlfT5cbiAgICAgICAgICAgIDxTaWRlUGFuZWxTZWN0aW9uPlxuICAgICAgICAgICAgICA8UGFuZWxMYWJlbFdyYXBwZXI+XG4gICAgICAgICAgICAgICAgPFBhbmVsTGFiZWw+UHJlc2V0PC9QYW5lbExhYmVsPlxuICAgICAgICAgICAgICAgIDxJbmZvSGVscGVyXG4gICAgICAgICAgICAgICAgICBpZD1cInByZXNldFwiXG4gICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj1cIlNlbGVjdCBhIHByZXNldCB0byBkZXNjcmliZSBob3cgdG8gY29tYmluZSBzcGVjdHJhbCBiYW5kcy5cIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvUGFuZWxMYWJlbFdyYXBwZXI+XG4gICAgICAgICAgICAgIDxJdGVtU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW1zPXtzZWxlY3RlZFByZXNldH1cbiAgICAgICAgICAgICAgICBvcHRpb25zPXtwcmVzZXRPcHRpb25zfVxuICAgICAgICAgICAgICAgIG11bHRpU2VsZWN0PXtmYWxzZX1cbiAgICAgICAgICAgICAgICBzZWFyY2hhYmxlPXtmYWxzZX1cbiAgICAgICAgICAgICAgICBkaXNwbGF5T3B0aW9uPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgIGdldE9wdGlvblZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtuZXdQcmVzZXQgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3Qgb3ZlcnJpZGVzID0gdXBkYXRlQ29sb3JQYXJhbXNPblByZXNldENoYW5nZShcbiAgICAgICAgICAgICAgICAgICAgc3RhYyxcbiAgICAgICAgICAgICAgICAgICAgdmlzQ29uZmlndXJhdG9yUHJvcHMubGF5ZXIuY29uZmlnLnZpc0NvbmZpZy5wcmVzZXQsXG4gICAgICAgICAgICAgICAgICAgIG5ld1ByZXNldCBhcyBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB2aXNDb25maWd1cmF0b3JQcm9wcy5vbkNoYW5nZSh7Li4ub3ZlcnJpZGVzLCBwcmVzZXQ6IG5ld1ByZXNldH0pO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIHtzZWxlY3RlZFByZXNldD8uZGVzY3JpcHRpb24gPyAoXG4gICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uVGV4dD5cbiAgICAgICAgICAgICAgICAgIHtzZWxlY3RlZFByZXNldD8uZGVzY3JpcHRpb259XG4gICAgICAgICAgICAgICAgICB7c2VsZWN0ZWRQcmVzZXQ/LmluZm9VcmwgPyAoXG4gICAgICAgICAgICAgICAgICAgIDxhIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIiBocmVmPXtzZWxlY3RlZFByZXNldD8uaW5mb1VybH0+XG4gICAgICAgICAgICAgICAgICAgICAgTW9yZSBJbmZvXG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgIDwvRGVzY3JpcHRpb25UZXh0PlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIDwvU2lkZVBhbmVsU2VjdGlvbj5cblxuICAgICAgICAgICAge3NlbGVjdGVkUHJlc2V0LmlkID09PSAnc2luZ2xlQmFuZCcgJiYgKFxuICAgICAgICAgICAgICA8U2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgICAgICAgICAgICA8UGFuZWxMYWJlbFdyYXBwZXI+XG4gICAgICAgICAgICAgICAgICA8UGFuZWxMYWJlbD5TaW5nbGUgQmFuZCBOYW1lPC9QYW5lbExhYmVsPlxuICAgICAgICAgICAgICAgICAgPEluZm9IZWxwZXJcbiAgICAgICAgICAgICAgICAgICAgaWQ9e2Ake2xheWVyLmlkfS1zaW5nbGUtYmFuZC1uYW1lYH1cbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249XCJTZWxlY3QgYSBzaW5nbGUgYmFuZC5cIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L1BhbmVsTGFiZWxXcmFwcGVyPlxuICAgICAgICAgICAgICAgIDxJdGVtU2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbXM9e3NlbGVjdGVkU2luZ2xlQmFuZE5hbWV9XG4gICAgICAgICAgICAgICAgICBvcHRpb25zPXtzaW5nbGVCYW5kT3B0aW9uc31cbiAgICAgICAgICAgICAgICAgIG11bHRpU2VsZWN0PXtmYWxzZX1cbiAgICAgICAgICAgICAgICAgIHNlYXJjaGFibGU9e2ZhbHNlfVxuICAgICAgICAgICAgICAgICAgZGlzcGxheU9wdGlvbj1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICAgIGdldE9wdGlvblZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3ZhbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHZpc0NvbmZpZ3VyYXRvclByb3BzLm9uQ2hhbmdlKHtzaW5nbGVCYW5kTmFtZTogdmFsfSk7XG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvU2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgIHtTVEFDX1NFQVJDSF9VSV9FTkFCTEVEICYmIHN0YWNTZWFyY2hBbGxvd2VkICYmIChcbiAgICAgICAgICAgICAgPEN1c3RvbVZpc0NvbmZpZ1N3aXRjaFxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy51c2VTVEFDU2VhcmNoaW5nfVxuICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgIHtTVEFDX1NFQVJDSF9VSV9FTkFCTEVEICYmIChcbiAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICB7c3RhY1NlYXJjaEFsbG93ZWQgJiYgdXNlU1RBQ1NlYXJjaGluZyA/IChcbiAgICAgICAgICAgICAgICAgIDxTaWRlUGFuZWxTZWN0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8UGFuZWxMYWJlbFdyYXBwZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPFBhbmVsTGFiZWw+U1RBQyBTZWFyY2ggUHJvdmlkZXI8L1BhbmVsTGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDwvUGFuZWxMYWJlbFdyYXBwZXI+XG4gICAgICAgICAgICAgICAgICAgIDxJdGVtU2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc3RhY1NlYXJjaFByb3ZpZGVyfVxuICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbXM9e2ZpbmRWaXNDb25maWdJdGVtQnlJZChsYXllciwgJ3N0YWNTZWFyY2hQcm92aWRlcicpfVxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQ2hvb3NlIHNlYXJjaCBwcm92aWRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgbXVsdGlTZWxlY3Q9e2ZhbHNlfVxuICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaGFibGU9e2ZhbHNlfVxuICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlPcHRpb249XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgZ2V0T3B0aW9uVmFsdWU9XCJpZFwiXG4gICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3ZhbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBjaGVjayB3aGVuIHN3aXRjaGluZyBsYXllcnMgc28gdGhhdCB5b3UgZG9uJ3QgbWlzbWF0Y2ggYWxsb3dlZCBtb3NhaWNzIHdpdGggbGF5ZXJzXG4gICAgICAgICAgICAgICAgICAgICAgICB2aXNDb25maWd1cmF0b3JQcm9wcy5vbkNoYW5nZSh7c3RhY1NlYXJjaFByb3ZpZGVyOiB2YWx9KTtcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICAgICAgICAgIDxQYW5lbExhYmVsV3JhcHBlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8UGFuZWxMYWJlbD5EYXRlIFJhbmdlPC9QYW5lbExhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8L1BhbmVsTGFiZWxXcmFwcGVyPlxuICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgaWQ9e2Ake2xheWVyLmlkfS1zdGFydERhdGVgfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoe3RhcmdldDoge3ZhbHVlfX0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc0NvbmZpZ3VyYXRvclByb3BzLm9uQ2hhbmdlKHtzdGFydERhdGU6IHZhbHVlfSk7XG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17bGF5ZXIuY29uZmlnLnZpc0NvbmZpZy5zdGFydERhdGV9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICBpZD17YCR7bGF5ZXIuaWR9LWVuZERhdGVgfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoe3RhcmdldDoge3ZhbHVlfX0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc0NvbmZpZ3VyYXRvclByb3BzLm9uQ2hhbmdlKHtlbmREYXRlOiB2YWx1ZX0pO1xuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2xheWVyLmNvbmZpZy52aXNDb25maWcuZW5kRGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uVGV4dD5EYXRlIGZvcm1hdCBtdXN0IGJlIFwiWVlZWS1NTS1ERFwiPC9EZXNjcmlwdGlvblRleHQ+XG4gICAgICAgICAgICAgICAgICA8L1NpZGVQYW5lbFNlY3Rpb24+XG4gICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L0xheWVyQ29uZmlnR3JvdXA+XG4gICAgICAgICl9XG5cbiAgICAgICAgPExheWVyQ29uZmlnR3JvdXAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSBsYWJlbD1cIlZpc3VhbCBTZXR0aW5nc1wiIGNvbGxhcHNpYmxlPXtmYWxzZX0+XG4gICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlciB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Mub3BhY2l0eX0gey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgIHtjb2xvcm1hcEFsbG93ZWQgJiYgKFxuICAgICAgICAgICAgPFNpZGVQYW5lbFNlY3Rpb24+XG4gICAgICAgICAgICAgIDxQYW5lbExhYmVsPkNvbG9ybWFwPC9QYW5lbExhYmVsPlxuICAgICAgICAgICAgICA8SXRlbVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcz17c2VsZWN0ZWRDb2xvcm1hcH1cbiAgICAgICAgICAgICAgICBvcHRpb25zPXtjb2xvcm1hcE9wdGlvbnN9XG4gICAgICAgICAgICAgICAgbXVsdGlTZWxlY3Q9e2ZhbHNlfVxuICAgICAgICAgICAgICAgIGRpc3BsYXlPcHRpb249XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgZ2V0T3B0aW9uVmFsdWU9XCJpZFwiXG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e3ZhbCA9PiB7XG4gICAgICAgICAgICAgICAgICB2aXNDb25maWd1cmF0b3JQcm9wcy5vbkNoYW5nZSh7Y29sb3JtYXBJZDogdmFsfSk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBEcm9wRG93bkxpbmVJdGVtUmVuZGVyQ29tcG9uZW50PXtDb2xvck1hcExpc3RJdGVtfVxuICAgICAgICAgICAgICAgIGZpbHRlck9wdGlvbj1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICBzZWFyY2hhYmxlXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1NpZGVQYW5lbFNlY3Rpb24+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuXG4gICAgICAgIHsvKiBSZXNjYWxpbmcgKi99XG4gICAgICAgIHtyZXNjYWxpbmdBbGxvd2VkICYmIChcbiAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cCB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IGxhYmVsPVwiUmVzY2FsaW5nXCI+XG4gICAgICAgICAgICA8VmlzQ29uZmlnU3dpdGNoXG4gICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgey4uLmxheWVyLnZpc0NvbmZpZ1NldHRpbmdzLmR5bmFtaWNDb2xvcn1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzRHluYW1pY0NvbG9yc09ubHl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPFZpc0NvbmZpZ1N3aXRjaFxuICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Mubm9uTGluZWFyUmVzY2FsaW5nfVxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAgIGxhYmVsPXtub25MaW5lYXJSZXNjYWxpbmcgPyAnTm9uLUxpbmVhciBSZXNjYWxpbmcnIDogJ0xpbmVhciBSZXNjYWxpbmcnfVxuICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgey8qIFRPRE86IGFkZCBzbGlkZXJzIGZvciByZWQsIGdyZWVuLCBibHVlLCBub3QgYSBzaW5nbGUgc2xpZGVyICovfVxuICAgICAgICAgICAge25vbkxpbmVhclJlc2NhbGluZyA/IChcbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyXG4gICAgICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3MuZ2FtbWFDb250cmFzdEZhY3Rvcn1cbiAgICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zaWdtb2lkYWxDb250cmFzdEZhY3Rvcn1cbiAgICAgICAgICAgICAgICAgIHsuLi52aXNDb25maWd1cmF0b3JQcm9wc31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxWaXNDb25maWdTbGlkZXJcbiAgICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5zaWdtb2lkYWxCaWFzRmFjdG9yfVxuICAgICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5saW5lYXJSZXNjYWxpbmdGYWN0b3J9XG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgPFZpc0NvbmZpZ1NsaWRlclxuICAgICAgICAgICAgICB7Li4ubGF5ZXIudmlzQ29uZmlnU2V0dGluZ3Muc2F0dXJhdGlvblZhbHVlfVxuICAgICAgICAgICAgICB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgKX1cblxuICAgICAgICB7ZmlsdGVyQWxsb3dlZCAmJiAoXG4gICAgICAgICAgPExheWVyQ29uZmlnR3JvdXBcbiAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5maWx0ZXJFbmFibGVkfVxuICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgY29sbGFwc2libGVcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8VmlzQ29uZmlnU2xpZGVyIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5maWx0ZXJSYW5nZX0gey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfSAvPlxuICAgICAgICAgIDwvTGF5ZXJDb25maWdHcm91cD5cbiAgICAgICAgKX1cblxuICAgICAgICB7Z2V0QXBwbGljYXRpb25Db25maWcoKS5yYXN0ZXJTZXJ2ZXJTdXBwb3J0c0VsZXZhdGlvbiAmJlxuICAgICAgICAgIHN0YWMucmFzdGVyVGlsZVNlcnZlclVybHM/Lmxlbmd0aCAmJiAoXG4gICAgICAgICAgICA8TGF5ZXJDb25maWdHcm91cCB7Li4udmlzQ29uZmlndXJhdG9yUHJvcHN9IGxhYmVsPVwiVGVycmFpblwiPlxuICAgICAgICAgICAgICA8VmlzQ29uZmlnU3dpdGNoXG4gICAgICAgICAgICAgICAgey4uLnZpc0NvbmZpZ3VyYXRvclByb3BzfVxuICAgICAgICAgICAgICAgIHsuLi5sYXllci52aXNDb25maWdTZXR0aW5ncy5lbmFibGVUZXJyYWlufVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9MYXllckNvbmZpZ0dyb3VwPlxuICAgICAgICAgICl9XG4gICAgICA8L1N0eWxlZExheWVyQ29uZmlndXJhdG9yPlxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIFNUQUNDaGVja0NvbmZpZ3VyYXRvcldyYXBwZXI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJhc3RlclRpbGVMYXllckNvbmZpZ3VyYXRvckZhY3Rvcnk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxpQkFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBRUEsSUFBQUcsVUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksT0FBQSxHQUFBSixPQUFBO0FBbUJBLElBQUFLLGFBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLE1BQUEsR0FBQU4sT0FBQTtBQUlBLElBQUFPLDJCQUFBLEdBQUFQLE9BQUE7QUFFQSxJQUFBUSxrQkFBQSxHQUFBUixPQUFBO0FBTUEsSUFBQVMsT0FBQSxHQUFBUCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVUsV0FBQSxHQUFBUixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVcsYUFB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
@@ -17,6 +17,6 @@ declare type Props = {
17
17
  };
18
18
  declare function VectorTileLayerConfiguratorFactory(ChannelByValueSelector: ReturnType<typeof ChannelByValueSelectorFactory>, LayerColorRangeSelector: ReturnType<typeof LayerColorRangeSelectorFactory>, LayerColorSelector: ReturnType<typeof LayerColorSelectorFactory>, LayerConfigGroup: ReturnType<typeof LayerConfigGroupFactory>, VisConfigSlider: ReturnType<typeof VisConfigSliderFactory>, VisConfigSwitch: ReturnType<typeof VisConfigSwitchFactory>): React.FC<Props>;
19
19
  declare namespace VectorTileLayerConfiguratorFactory {
20
- var deps: (typeof VisConfigSwitchFactory | typeof ChannelByValueSelectorFactory | typeof LayerColorRangeSelectorFactory | typeof LayerColorSelectorFactory | typeof LayerConfigGroupFactory | typeof VisConfigSliderFactory | typeof SourceDataSelectorFactory)[];
20
+ var deps: (typeof VisConfigSwitchFactory | typeof LayerConfigGroupFactory | typeof VisConfigSliderFactory | typeof SourceDataSelectorFactory | typeof ChannelByValueSelectorFactory | typeof LayerColorSelectorFactory | typeof LayerColorRangeSelectorFactory)[];
21
21
  }
22
22
  export default VectorTileLayerConfiguratorFactory;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kepler.gl/components",
3
3
  "author": "Shan He <shan@uber.com>",
4
- "version": "3.1.4",
4
+ "version": "3.1.6",
5
5
  "description": "kepler.gl constants used by kepler.gl components, actions and reducers",
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
@@ -38,20 +38,20 @@
38
38
  "@dnd-kit/utilities": "^3.2.2",
39
39
  "@emotion/is-prop-valid": "^1.2.1",
40
40
  "@floating-ui/react": "0.25.1",
41
- "@kepler.gl/actions": "3.1.4",
42
- "@kepler.gl/cloud-providers": "3.1.4",
43
- "@kepler.gl/common-utils": "3.1.4",
44
- "@kepler.gl/constants": "3.1.4",
45
- "@kepler.gl/effects": "3.1.4",
46
- "@kepler.gl/layers": "3.1.4",
47
- "@kepler.gl/localization": "3.1.4",
48
- "@kepler.gl/processors": "3.1.4",
49
- "@kepler.gl/reducers": "3.1.4",
50
- "@kepler.gl/schemas": "3.1.4",
51
- "@kepler.gl/styles": "3.1.4",
52
- "@kepler.gl/table": "3.1.4",
53
- "@kepler.gl/types": "3.1.4",
54
- "@kepler.gl/utils": "3.1.4",
41
+ "@kepler.gl/actions": "3.1.6",
42
+ "@kepler.gl/cloud-providers": "3.1.6",
43
+ "@kepler.gl/common-utils": "3.1.6",
44
+ "@kepler.gl/constants": "3.1.6",
45
+ "@kepler.gl/effects": "3.1.6",
46
+ "@kepler.gl/layers": "3.1.6",
47
+ "@kepler.gl/localization": "3.1.6",
48
+ "@kepler.gl/processors": "3.1.6",
49
+ "@kepler.gl/reducers": "3.1.6",
50
+ "@kepler.gl/schemas": "3.1.6",
51
+ "@kepler.gl/styles": "3.1.6",
52
+ "@kepler.gl/table": "3.1.6",
53
+ "@kepler.gl/types": "3.1.6",
54
+ "@kepler.gl/utils": "3.1.6",
55
55
  "@loaders.gl/mvt": "^4.3.2",
56
56
  "@loaders.gl/pmtiles": "^4.3.2",
57
57
  "@mapbox/mapbox-sdk": "^0.15.3",