@kepler.gl/constants 3.3.0-alpha.1 → 3.3.0-alpha.10
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/cjs/annotation.js +45 -0
- package/dist/cjs/color-palettes.js +461 -0
- package/dist/cjs/colors-by-theme.js +519 -0
- package/dist/cjs/dataset.js +176 -0
- package/dist/cjs/default-settings.js +1740 -0
- package/dist/cjs/gpu-parameters.js +125 -0
- package/dist/cjs/index.js +149 -0
- package/dist/cjs/keyevent.js +26 -0
- package/dist/cjs/layers.js +609 -0
- package/dist/{plot.js → cjs/plot.js} +1 -1
- package/dist/cjs/time.js +194 -0
- package/dist/cjs/tooltip.js +221 -0
- package/dist/cjs/user-feedbacks.js +15 -0
- package/dist/cjs/user-guides.js +19 -0
- package/dist/dataset.d.ts +52 -0
- package/dist/default-settings.d.ts +81 -1
- package/dist/esm/annotation.js +38 -0
- package/dist/esm/color-palettes.js +453 -0
- package/dist/esm/colors-by-theme.js +513 -0
- package/dist/esm/dataset.js +169 -0
- package/dist/esm/default-settings.js +1734 -0
- package/dist/esm/gpu-parameters.js +119 -0
- package/dist/esm/index.js +18 -0
- package/dist/esm/keyevent.js +19 -0
- package/dist/esm/layers.js +602 -0
- package/dist/esm/plot.js +9 -0
- package/dist/esm/time.js +190 -0
- package/dist/esm/tooltip.js +215 -0
- package/dist/esm/user-feedbacks.js +9 -0
- package/dist/esm/user-guides.js +13 -0
- package/dist/layers.d.ts +4 -0
- package/package.json +20 -13
- package/dist/annotation.js +0 -45
- package/dist/color-palettes.js +0 -462
- package/dist/colors-by-theme.js +0 -519
- package/dist/dataset.js +0 -82
- package/dist/default-settings.js +0 -1646
- package/dist/gpu-parameters.js +0 -125
- package/dist/index.js +0 -149
- package/dist/keyevent.js +0 -26
- package/dist/layers.js +0 -605
- package/dist/time.js +0 -194
- package/dist/tooltip.js +0 -221
- package/dist/user-feedbacks.js +0 -15
- package/dist/user-guides.js +0 -19
- package/umd/keplergl.min.js +0 -58
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.TILE3D_PROVIDERS = exports.RemoteTileFormat = exports.RasterTileType = exports.REMOTE_TILE = exports.REMOTE_FILE_MIME_TYPES = exports.REMOTE_FILE_FORMATS = exports.REMOTE_FILE_EXTENSIONS = exports.PMTilesType = exports.MIME_TO_REMOTE_FILE_EXTENSION = exports.DatasetType = exports.DATASET_REFRESH_MIN_INTERVAL_MS = exports.DATASET_REFRESH_INTERVAL_OPTIONS = exports.DATASET_REFRESH_DEFAULT_CUSTOM_MS = exports.DATASET_REFRESH_CUSTOM_VALUE = void 0;
|
|
7
|
+
exports.formatCustomRefreshSeconds = formatCustomRefreshSeconds;
|
|
8
|
+
exports.getDatasetRefreshIntervalMs = getDatasetRefreshIntervalMs;
|
|
9
|
+
exports.getRemoteSourceFormat = getRemoteSourceFormat;
|
|
10
|
+
exports.isPresetDatasetRefreshInterval = isPresetDatasetRefreshInterval;
|
|
11
|
+
exports.parseCustomRefreshIntervalMs = parseCustomRefreshIntervalMs;
|
|
12
|
+
// SPDX-License-Identifier: MIT
|
|
13
|
+
// Copyright contributors to the kepler.gl project
|
|
14
|
+
var DatasetType = exports.DatasetType = /*#__PURE__*/function (DatasetType) {
|
|
15
|
+
DatasetType["LOCAL"] = "local";
|
|
16
|
+
DatasetType["EXTERNALLY_HOSTED"] = "externally-hosted";
|
|
17
|
+
DatasetType["VECTOR_TILE"] = "vector-tile";
|
|
18
|
+
DatasetType["RASTER_TILE"] = "raster-tile";
|
|
19
|
+
DatasetType["WMS_TILE"] = "wms-tile";
|
|
20
|
+
DatasetType["TILE_3D"] = "tile-3d";
|
|
21
|
+
DatasetType["BITMAP"] = "bitmap";
|
|
22
|
+
return DatasetType;
|
|
23
|
+
}({});
|
|
24
|
+
var REMOTE_FILE_FORMATS = exports.REMOTE_FILE_FORMATS = ['auto', 'csv', 'geojson', 'json', 'arrow', 'parquet'];
|
|
25
|
+
var REMOTE_FILE_MIME_TYPES = exports.REMOTE_FILE_MIME_TYPES = {
|
|
26
|
+
csv: 'text/csv',
|
|
27
|
+
geojson: 'application/geo+json',
|
|
28
|
+
json: 'application/json',
|
|
29
|
+
arrow: 'application/vnd.apache.arrow.file',
|
|
30
|
+
parquet: 'application/vnd.apache.parquet'
|
|
31
|
+
};
|
|
32
|
+
var REMOTE_FILE_EXTENSIONS = exports.REMOTE_FILE_EXTENSIONS = {
|
|
33
|
+
csv: 'csv',
|
|
34
|
+
geojson: 'geojson',
|
|
35
|
+
json: 'json',
|
|
36
|
+
arrow: 'arrow',
|
|
37
|
+
parquet: 'parquet'
|
|
38
|
+
};
|
|
39
|
+
var MIME_TO_REMOTE_FILE_EXTENSION = exports.MIME_TO_REMOTE_FILE_EXTENSION = {
|
|
40
|
+
'text/csv': 'csv',
|
|
41
|
+
'text/tab-separated-values': 'tsv',
|
|
42
|
+
'application/geo+json': 'geojson',
|
|
43
|
+
'application/vnd.geo+json': 'geojson',
|
|
44
|
+
'application/json': 'json',
|
|
45
|
+
'application/vnd.apache.arrow.file': 'arrow',
|
|
46
|
+
'application/vnd.apache.arrow.stream': 'arrow',
|
|
47
|
+
'application/vnd.apache.parquet': 'parquet',
|
|
48
|
+
'application/x-parquet': 'parquet'
|
|
49
|
+
};
|
|
50
|
+
var DATASET_REFRESH_INTERVAL_OPTIONS = exports.DATASET_REFRESH_INTERVAL_OPTIONS = [{
|
|
51
|
+
value: 0,
|
|
52
|
+
labelId: 'datasetTitle.refreshOff'
|
|
53
|
+
}, {
|
|
54
|
+
value: 10000,
|
|
55
|
+
labelId: 'datasetTitle.refresh10s'
|
|
56
|
+
}, {
|
|
57
|
+
value: 15000,
|
|
58
|
+
labelId: 'datasetTitle.refresh15s'
|
|
59
|
+
}, {
|
|
60
|
+
value: 60000,
|
|
61
|
+
labelId: 'datasetTitle.refresh1m'
|
|
62
|
+
}, {
|
|
63
|
+
value: 300000,
|
|
64
|
+
labelId: 'datasetTitle.refresh5m'
|
|
65
|
+
}, {
|
|
66
|
+
value: 900000,
|
|
67
|
+
labelId: 'datasetTitle.refresh15m'
|
|
68
|
+
}];
|
|
69
|
+
|
|
70
|
+
/** Select value for a user-entered interval that is not one of the presets. */
|
|
71
|
+
var DATASET_REFRESH_CUSTOM_VALUE = exports.DATASET_REFRESH_CUSTOM_VALUE = 'custom';
|
|
72
|
+
/** Default custom poll interval when switching from Off to Custom. */
|
|
73
|
+
var DATASET_REFRESH_DEFAULT_CUSTOM_MS = exports.DATASET_REFRESH_DEFAULT_CUSTOM_MS = 30000;
|
|
74
|
+
var DATASET_REFRESH_MIN_INTERVAL_MS = exports.DATASET_REFRESH_MIN_INTERVAL_MS = 100;
|
|
75
|
+
function isPresetDatasetRefreshInterval(ms) {
|
|
76
|
+
return DATASET_REFRESH_INTERVAL_OPTIONS.some(function (option) {
|
|
77
|
+
return option.value === ms;
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/** Runtime copy of {@link ExternalDatasetMetadata} with `format` renamed to avoid colliding with DATASET_FORMATS. */
|
|
82
|
+
|
|
83
|
+
function getDatasetRefreshIntervalMs(metadata) {
|
|
84
|
+
var value = metadata === null || metadata === void 0 ? void 0 : metadata.refreshIntervalMs;
|
|
85
|
+
return typeof value === 'number' && Number.isFinite(value) && value > 0 ? value : 0;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/** Parse a seconds field into ms, or null if the input is not a positive number. */
|
|
89
|
+
function parseCustomRefreshIntervalMs(secondsText) {
|
|
90
|
+
var seconds = Number.parseFloat(secondsText);
|
|
91
|
+
if (!Number.isFinite(seconds) || seconds <= 0) {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
return Math.max(DATASET_REFRESH_MIN_INTERVAL_MS, Math.round(seconds * 1000));
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/** Display string for the custom seconds input (keeps tenths for sub-second values). */
|
|
98
|
+
function formatCustomRefreshSeconds(ms) {
|
|
99
|
+
var seconds = Math.max(DATASET_REFRESH_MIN_INTERVAL_MS, ms) / 1000;
|
|
100
|
+
if (Number.isInteger(seconds)) {
|
|
101
|
+
return String(seconds);
|
|
102
|
+
}
|
|
103
|
+
return String(Number(seconds.toFixed(3)));
|
|
104
|
+
}
|
|
105
|
+
function getRemoteSourceFormat(metadata) {
|
|
106
|
+
var candidate = typeof (metadata === null || metadata === void 0 ? void 0 : metadata.sourceFormat) === 'string' && metadata.sourceFormat || typeof (metadata === null || metadata === void 0 ? void 0 : metadata.format) === 'string' && metadata.format || undefined;
|
|
107
|
+
if (candidate && candidate !== 'auto' && Object.prototype.hasOwnProperty.call(REMOTE_FILE_EXTENSIONS, candidate)) {
|
|
108
|
+
return candidate;
|
|
109
|
+
}
|
|
110
|
+
return undefined;
|
|
111
|
+
}
|
|
112
|
+
var RemoteTileFormat = exports.RemoteTileFormat = /*#__PURE__*/function (RemoteTileFormat) {
|
|
113
|
+
RemoteTileFormat["MVT"] = "mvt";
|
|
114
|
+
RemoteTileFormat["PMTILES"] = "pmtiles";
|
|
115
|
+
RemoteTileFormat["WMS"] = "wms";
|
|
116
|
+
return RemoteTileFormat;
|
|
117
|
+
}({});
|
|
118
|
+
var PMTilesType = exports.PMTilesType = /*#__PURE__*/function (PMTilesType) {
|
|
119
|
+
PMTilesType["RASTER"] = "raster";
|
|
120
|
+
PMTilesType["MVT"] = "mvt";
|
|
121
|
+
return PMTilesType;
|
|
122
|
+
}({});
|
|
123
|
+
var REMOTE_TILE = exports.REMOTE_TILE = 'remote';
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Raster tileset metadata in STAC Item format. STAC version must be >= 1.0.0,
|
|
127
|
+
* and the EO and Raster STAC extensions are required. This metadata shape can
|
|
128
|
+
* be passed to the map to synchronously add a raster tileset.
|
|
129
|
+
* @see https://github.com/radiantearth/stac-spec/blob/master/item-spec/item-spec.md
|
|
130
|
+
*/
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Raster tileset metadata with a remote metadata URL. This metadata can
|
|
134
|
+
* be passed to the map to asynchronously load a raster tileset.
|
|
135
|
+
*/
|
|
136
|
+
var RasterTileType = exports.RasterTileType = /*#__PURE__*/function (RasterTileType) {
|
|
137
|
+
RasterTileType["STAC"] = "stac";
|
|
138
|
+
RasterTileType["PMTILES"] = "pmtiles";
|
|
139
|
+
return RasterTileType;
|
|
140
|
+
}({});
|
|
141
|
+
/**
|
|
142
|
+
* Raster tileset metadata.
|
|
143
|
+
*/
|
|
144
|
+
var TILE3D_PROVIDERS = exports.TILE3D_PROVIDERS = {
|
|
145
|
+
google: {
|
|
146
|
+
name: 'Google 3D Tiles',
|
|
147
|
+
urlKey: 'google',
|
|
148
|
+
attribution: {
|
|
149
|
+
title: 'Built with Google Maps.',
|
|
150
|
+
url: '',
|
|
151
|
+
logoUrl: 'https://studio-public-data.foursquare.com/statics/images/google-watermark-white.png',
|
|
152
|
+
height: 17,
|
|
153
|
+
bottom: 0
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
cesium: {
|
|
157
|
+
name: 'Cesium ion',
|
|
158
|
+
urlKey: 'ion.cesium',
|
|
159
|
+
attribution: {
|
|
160
|
+
title: 'Cesium.',
|
|
161
|
+
url: 'https://cesium.com/',
|
|
162
|
+
height: 19,
|
|
163
|
+
bottom: 0
|
|
164
|
+
}
|
|
165
|
+
},
|
|
166
|
+
arcgis: {
|
|
167
|
+
name: 'ArcGIS',
|
|
168
|
+
urlKey: 'arcgis',
|
|
169
|
+
attribution: {
|
|
170
|
+
title: 'Powered by Esri.',
|
|
171
|
+
url: 'https://arcgis.com/',
|
|
172
|
+
height: 16
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEYXRhc2V0VHlwZSIsImV4cG9ydHMiLCJSRU1PVEVfRklMRV9GT1JNQVRTIiwiUkVNT1RFX0ZJTEVfTUlNRV9UWVBFUyIsImNzdiIsImdlb2pzb24iLCJqc29uIiwiYXJyb3ciLCJwYXJxdWV0IiwiUkVNT1RFX0ZJTEVfRVhURU5TSU9OUyIsIk1JTUVfVE9fUkVNT1RFX0ZJTEVfRVhURU5TSU9OIiwiREFUQVNFVF9SRUZSRVNIX0lOVEVSVkFMX09QVElPTlMiLCJ2YWx1ZSIsImxhYmVsSWQiLCJEQVRBU0VUX1JFRlJFU0hfQ1VTVE9NX1ZBTFVFIiwiREFUQVNFVF9SRUZSRVNIX0RFRkFVTFRfQ1VTVE9NX01TIiwiREFUQVNFVF9SRUZSRVNIX01JTl9JTlRFUlZBTF9NUyIsImlzUHJlc2V0RGF0YXNldFJlZnJlc2hJbnRlcnZhbCIsIm1zIiwic29tZSIsIm9wdGlvbiIsImdldERhdGFzZXRSZWZyZXNoSW50ZXJ2YWxNcyIsIm1ldGFkYXRhIiwicmVmcmVzaEludGVydmFsTXMiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsInBhcnNlQ3VzdG9tUmVmcmVzaEludGVydmFsTXMiLCJzZWNvbmRzVGV4dCIsInNlY29uZHMiLCJwYXJzZUZsb2F0IiwiTWF0aCIsIm1heCIsInJvdW5kIiwiZm9ybWF0Q3VzdG9tUmVmcmVzaFNlY29uZHMiLCJpc0ludGVnZXIiLCJTdHJpbmciLCJ0b0ZpeGVkIiwiZ2V0UmVtb3RlU291cmNlRm9ybWF0IiwiY2FuZGlkYXRlIiwic291cmNlRm9ybWF0IiwiZm9ybWF0IiwidW5kZWZpbmVkIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiUmVtb3RlVGlsZUZvcm1hdCIsIlBNVGlsZXNUeXBlIiwiUkVNT1RFX1RJTEUiLCJSYXN0ZXJUaWxlVHlwZSIsIlRJTEUzRF9QUk9WSURFUlMiLCJnb29nbGUiLCJuYW1lIiwidXJsS2V5IiwiYXR0cmlidXRpb24iLCJ0aXRsZSIsInVybCIsImxvZ29VcmwiLCJoZWlnaHQiLCJib3R0b20iLCJjZXNpdW0iLCJhcmNnaXMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YXNldC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5leHBvcnQgZW51bSBEYXRhc2V0VHlwZSB7XG4gIExPQ0FMID0gJ2xvY2FsJyxcbiAgRVhURVJOQUxMWV9IT1NURUQgPSAnZXh0ZXJuYWxseS1ob3N0ZWQnLFxuICBWRUNUT1JfVElMRSA9ICd2ZWN0b3ItdGlsZScsXG4gIFJBU1RFUl9USUxFID0gJ3Jhc3Rlci10aWxlJyxcbiAgV01TX1RJTEUgPSAnd21zLXRpbGUnLFxuICBUSUxFXzNEID0gJ3RpbGUtM2QnLFxuICBCSVRNQVAgPSAnYml0bWFwJ1xufVxuXG5leHBvcnQgY29uc3QgUkVNT1RFX0ZJTEVfRk9STUFUUyA9IFsnYXV0bycsICdjc3YnLCAnZ2VvanNvbicsICdqc29uJywgJ2Fycm93JywgJ3BhcnF1ZXQnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFJlbW90ZUZpbGVGb3JtYXQgPSAodHlwZW9mIFJFTU9URV9GSUxFX0ZPUk1BVFMpW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBSRU1PVEVfRklMRV9NSU1FX1RZUEVTOiBSZWNvcmQ8RXhjbHVkZTxSZW1vdGVGaWxlRm9ybWF0LCAnYXV0byc+LCBzdHJpbmc+ID0ge1xuICBjc3Y6ICd0ZXh0L2NzdicsXG4gIGdlb2pzb246ICdhcHBsaWNhdGlvbi9nZW8ranNvbicsXG4gIGpzb246ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgYXJyb3c6ICdhcHBsaWNhdGlvbi92bmQuYXBhY2hlLmFycm93LmZpbGUnLFxuICBwYXJxdWV0OiAnYXBwbGljYXRpb24vdm5kLmFwYWNoZS5wYXJxdWV0J1xufTtcblxuZXhwb3J0IGNvbnN0IFJFTU9URV9GSUxFX0VYVEVOU0lPTlM6IFJlY29yZDxFeGNsdWRlPFJlbW90ZUZpbGVGb3JtYXQsICdhdXRvJz4sIHN0cmluZz4gPSB7XG4gIGNzdjogJ2NzdicsXG4gIGdlb2pzb246ICdnZW9qc29uJyxcbiAganNvbjogJ2pzb24nLFxuICBhcnJvdzogJ2Fycm93JyxcbiAgcGFycXVldDogJ3BhcnF1ZXQnXG59O1xuXG5leHBvcnQgY29uc3QgTUlNRV9UT19SRU1PVEVfRklMRV9FWFRFTlNJT046IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICd0ZXh0L2Nzdic6ICdjc3YnLFxuICAndGV4dC90YWItc2VwYXJhdGVkLXZhbHVlcyc6ICd0c3YnLFxuICAnYXBwbGljYXRpb24vZ2VvK2pzb24nOiAnZ2VvanNvbicsXG4gICdhcHBsaWNhdGlvbi92bmQuZ2VvK2pzb24nOiAnZ2VvanNvbicsXG4gICdhcHBsaWNhdGlvbi9qc29uJzogJ2pzb24nLFxuICAnYXBwbGljYXRpb24vdm5kLmFwYWNoZS5hcnJvdy5maWxlJzogJ2Fycm93JyxcbiAgJ2FwcGxpY2F0aW9uL3ZuZC5hcGFjaGUuYXJyb3cuc3RyZWFtJzogJ2Fycm93JyxcbiAgJ2FwcGxpY2F0aW9uL3ZuZC5hcGFjaGUucGFycXVldCc6ICdwYXJxdWV0JyxcbiAgJ2FwcGxpY2F0aW9uL3gtcGFycXVldCc6ICdwYXJxdWV0J1xufTtcblxuZXhwb3J0IGNvbnN0IERBVEFTRVRfUkVGUkVTSF9JTlRFUlZBTF9PUFRJT05TOiB7dmFsdWU6IG51bWJlcjsgbGFiZWxJZDogc3RyaW5nfVtdID0gW1xuICB7dmFsdWU6IDAsIGxhYmVsSWQ6ICdkYXRhc2V0VGl0bGUucmVmcmVzaE9mZid9LFxuICB7dmFsdWU6IDEwXzAwMCwgbGFiZWxJZDogJ2RhdGFzZXRUaXRsZS5yZWZyZXNoMTBzJ30sXG4gIHt2YWx1ZTogMTVfMDAwLCBsYWJlbElkOiAnZGF0YXNldFRpdGxlLnJlZnJlc2gxNXMnfSxcbiAge3ZhbHVlOiA2MF8wMDAsIGxhYmVsSWQ6ICdkYXRhc2V0VGl0bGUucmVmcmVzaDFtJ30sXG4gIHt2YWx1ZTogMzAwXzAwMCwgbGFiZWxJZDogJ2RhdGFzZXRUaXRsZS5yZWZyZXNoNW0nfSxcbiAge3ZhbHVlOiA5MDBfMDAwLCBsYWJlbElkOiAnZGF0YXNldFRpdGxlLnJlZnJlc2gxNW0nfVxuXTtcblxuLyoqIFNlbGVjdCB2YWx1ZSBmb3IgYSB1c2VyLWVudGVyZWQgaW50ZXJ2YWwgdGhhdCBpcyBub3Qgb25lIG9mIHRoZSBwcmVzZXRzLiAqL1xuZXhwb3J0IGNvbnN0IERBVEFTRVRfUkVGUkVTSF9DVVNUT01fVkFMVUUgPSAnY3VzdG9tJztcbi8qKiBEZWZhdWx0IGN1c3RvbSBwb2xsIGludGVydmFsIHdoZW4gc3dpdGNoaW5nIGZyb20gT2ZmIHRvIEN1c3RvbS4gKi9cbmV4cG9ydCBjb25zdCBEQVRBU0VUX1JFRlJFU0hfREVGQVVMVF9DVVNUT01fTVMgPSAzMF8wMDA7XG5leHBvcnQgY29uc3QgREFUQVNFVF9SRUZSRVNIX01JTl9JTlRFUlZBTF9NUyA9IDEwMDtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJlc2V0RGF0YXNldFJlZnJlc2hJbnRlcnZhbChtczogbnVtYmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiBEQVRBU0VUX1JFRlJFU0hfSU5URVJWQUxfT1BUSU9OUy5zb21lKG9wdGlvbiA9PiBvcHRpb24udmFsdWUgPT09IG1zKTtcbn1cblxuZXhwb3J0IHR5cGUgRXh0ZXJuYWxEYXRhc2V0UmVmcmVzaFN0YXR1cyA9ICdpZGxlJyB8ICdsb2FkaW5nJyB8ICdlcnJvcic7XG5cbmV4cG9ydCB0eXBlIEV4dGVybmFsRGF0YXNldE1ldGFkYXRhID0ge1xuICAvKiogUmVtb3RlIFVSTCBvZiB0aGUgZGF0YXNldCBmaWxlLiAqL1xuICBzb3VyY2U6IHN0cmluZztcbiAgLyoqIE9wdGlvbmFsIGZvcm1hdCBoaW50IGZvciBleHRlbnNpb25sZXNzIFVSTHMgKFNBUyBrZXlzLCBldGMpLiAqL1xuICBmb3JtYXQ/OiBFeGNsdWRlPFJlbW90ZUZpbGVGb3JtYXQsICdhdXRvJz4gfCBzdHJpbmc7XG4gIC8qKiBMYXN0IGtub3duIHNpemUgb2YgdGhlIGhvc3RlZCByZXNvdXJjZSwgaW4gYnl0ZXMuICovXG4gIHNpemU/OiBudW1iZXI7XG4gIC8qKiBQb2xsIGludGVydmFsIGluIG1zLiBPbWl0dGVkIG9yIDAgbWVhbnMgbWFudWFsIHJlZnJlc2ggb25seS4gKi9cbiAgcmVmcmVzaEludGVydmFsTXM/OiBudW1iZXI7XG59O1xuXG4vKiogUnVudGltZSBjb3B5IG9mIHtAbGluayBFeHRlcm5hbERhdGFzZXRNZXRhZGF0YX0gd2l0aCBgZm9ybWF0YCByZW5hbWVkIHRvIGF2b2lkIGNvbGxpZGluZyB3aXRoIERBVEFTRVRfRk9STUFUUy4gKi9cbmV4cG9ydCB0eXBlIEV4dGVybmFsRGF0YXNldFJ1bnRpbWVNZXRhZGF0YSA9IHtcbiAgc291cmNlOiBzdHJpbmc7XG4gIHNvdXJjZUZvcm1hdD86IEV4Y2x1ZGU8UmVtb3RlRmlsZUZvcm1hdCwgJ2F1dG8nPiB8IHN0cmluZztcbiAgc2l6ZT86IG51bWJlcjtcbiAgcmVmcmVzaEludGVydmFsTXM/OiBudW1iZXI7XG4gIGV0YWc/OiBzdHJpbmc7XG4gIGxhc3RNb2RpZmllZD86IHN0cmluZztcbiAgbGFzdEZldGNoZWRBdD86IG51bWJlcjtcbiAgcmVmcmVzaFN0YXR1cz86IEV4dGVybmFsRGF0YXNldFJlZnJlc2hTdGF0dXM7XG4gIHJlZnJlc2hFcnJvcj86IHN0cmluZztcbiAgLyoqIERvd25sb2FkIHByb2dyZXNzIDDigJMxMDAgd2hpbGUgYHJlZnJlc2hTdGF0dXNgIGlzIGBsb2FkaW5nYC4gKi9cbiAgcmVmcmVzaFByb2dyZXNzPzogbnVtYmVyO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGFzZXRSZWZyZXNoSW50ZXJ2YWxNcyhtZXRhZGF0YT86IHtyZWZyZXNoSW50ZXJ2YWxNcz86IHVua25vd259KTogbnVtYmVyIHtcbiAgY29uc3QgdmFsdWUgPSBtZXRhZGF0YT8ucmVmcmVzaEludGVydmFsTXM7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkgJiYgdmFsdWUgPiAwID8gdmFsdWUgOiAwO1xufVxuXG4vKiogUGFyc2UgYSBzZWNvbmRzIGZpZWxkIGludG8gbXMsIG9yIG51bGwgaWYgdGhlIGlucHV0IGlzIG5vdCBhIHBvc2l0aXZlIG51bWJlci4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUN1c3RvbVJlZnJlc2hJbnRlcnZhbE1zKHNlY29uZHNUZXh0OiBzdHJpbmcpOiBudW1iZXIgfCBudWxsIHtcbiAgY29uc3Qgc2Vjb25kcyA9IE51bWJlci5wYXJzZUZsb2F0KHNlY29uZHNUZXh0KTtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoc2Vjb25kcykgfHwgc2Vjb25kcyA8PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIE1hdGgubWF4KERBVEFTRVRfUkVGUkVTSF9NSU5fSU5URVJWQUxfTVMsIE1hdGgucm91bmQoc2Vjb25kcyAqIDEwMDApKTtcbn1cblxuLyoqIERpc3BsYXkgc3RyaW5nIGZvciB0aGUgY3VzdG9tIHNlY29uZHMgaW5wdXQgKGtlZXBzIHRlbnRocyBmb3Igc3ViLXNlY29uZCB2YWx1ZXMpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEN1c3RvbVJlZnJlc2hTZWNvbmRzKG1zOiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCBzZWNvbmRzID0gTWF0aC5tYXgoREFUQVNFVF9SRUZSRVNIX01JTl9JTlRFUlZBTF9NUywgbXMpIC8gMTAwMDtcbiAgaWYgKE51bWJlci5pc0ludGVnZXIoc2Vjb25kcykpIHtcbiAgICByZXR1cm4gU3RyaW5nKHNlY29uZHMpO1xuICB9XG4gIHJldHVybiBTdHJpbmcoTnVtYmVyKHNlY29uZHMudG9GaXhlZCgzKSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVtb3RlU291cmNlRm9ybWF0KG1ldGFkYXRhPzoge1xuICBzb3VyY2VGb3JtYXQ/OiB1bmtub3duO1xuICBmb3JtYXQ/OiB1bmtub3duO1xufSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGNhbmRpZGF0ZSA9XG4gICAgKHR5cGVvZiBtZXRhZGF0YT8uc291cmNlRm9ybWF0ID09PSAnc3RyaW5nJyAmJiBtZXRhZGF0YS5zb3VyY2VGb3JtYXQpIHx8XG4gICAgKHR5cGVvZiBtZXRhZGF0YT8uZm9ybWF0ID09PSAnc3RyaW5nJyAmJiBtZXRhZGF0YS5mb3JtYXQpIHx8XG4gICAgdW5kZWZpbmVkO1xuICBpZiAoXG4gICAgY2FuZGlkYXRlICYmXG4gICAgY2FuZGlkYXRlICE9PSAnYXV0bycgJiZcbiAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUkVNT1RFX0ZJTEVfRVhURU5TSU9OUywgY2FuZGlkYXRlKVxuICApIHtcbiAgICByZXR1cm4gY2FuZGlkYXRlO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBlbnVtIFJlbW90ZVRpbGVGb3JtYXQge1xuICBNVlQgPSAnbXZ0JyxcbiAgUE1USUxFUyA9ICdwbXRpbGVzJyxcbiAgV01TID0gJ3dtcydcbn1cblxuZXhwb3J0IGVudW0gUE1UaWxlc1R5cGUge1xuICBSQVNURVIgPSAncmFzdGVyJyxcbiAgTVZUID0gJ212dCdcbn1cblxuZXhwb3J0IGNvbnN0IFJFTU9URV9USUxFID0gJ3JlbW90ZSc7XG5cbmV4cG9ydCB0eXBlIFZlY3RvclRpbGVEYXRhc2V0TWV0YWRhdGEgPSB7XG4gIHR5cGU6IHR5cGVvZiBSRU1PVEVfVElMRTtcbiAgcmVtb3RlVGlsZUZvcm1hdDogUmVtb3RlVGlsZUZvcm1hdDtcbiAgdGlsZXNldERhdGFVcmw6IHN0cmluZztcbiAgdGlsZXNldE1ldGFkYXRhVXJsPzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBSYXN0ZXIgdGlsZXNldCBtZXRhZGF0YSBpbiBTVEFDIEl0ZW0gZm9ybWF0LiBTVEFDIHZlcnNpb24gbXVzdCBiZSA+PSAxLjAuMCxcbiAqIGFuZCB0aGUgRU8gYW5kIFJhc3RlciBTVEFDIGV4dGVuc2lvbnMgYXJlIHJlcXVpcmVkLiBUaGlzIG1ldGFkYXRhIHNoYXBlIGNhblxuICogYmUgcGFzc2VkIHRvIHRoZSBtYXAgdG8gc3luY2hyb25vdXNseSBhZGQgYSByYXN0ZXIgdGlsZXNldC5cbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3JhZGlhbnRlYXJ0aC9zdGFjLXNwZWMvYmxvYi9tYXN0ZXIvaXRlbS1zcGVjL2l0ZW0tc3BlYy5tZFxuICovXG5leHBvcnQgdHlwZSBSYXN0ZXJUaWxlTG9jYWxNZXRhZGF0YSA9IHtcbiAgdHlwZTogJ0ZlYXR1cmUnO1xuXG4gIC8qKiBVUkwgZm9yIHRpbGVzZXQgbWV0YWRhdGEuICovXG4gIG1ldGFkYXRhVXJsPzogc3RyaW5nO1xuICBzdGFjX3ZlcnNpb246IHN0cmluZztcbiAgc3RhY19leHRlbnNpb25zOiBzdHJpbmdbXTtcbiAgYXNzZXRzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufTtcblxuLyoqXG4gKiBSYXN0ZXIgdGlsZXNldCBtZXRhZGF0YSB3aXRoIGEgcmVtb3RlIG1ldGFkYXRhIFVSTC4gVGhpcyBtZXRhZGF0YSBjYW5cbiAqIGJlIHBhc3NlZCB0byB0aGUgbWFwIHRvIGFzeW5jaHJvbm91c2x5IGxvYWQgYSByYXN0ZXIgdGlsZXNldC5cbiAqL1xuZXhwb3J0IHR5cGUgUmFzdGVyVGlsZVJlbW90ZU1ldGFkYXRhID0ge1xuICBtZXRhZGF0YVVybDogc3RyaW5nO1xufTtcblxuZXhwb3J0IGVudW0gUmFzdGVyVGlsZVR5cGUge1xuICBTVEFDID0gJ3N0YWMnLFxuICBQTVRJTEVTID0gJ3BtdGlsZXMnXG59XG5cbmV4cG9ydCB0eXBlIFJhc3RlclRpbGVNZXRhZGF0YVNvdXJjZVR5cGUgPSB7XG4gIHBtdGlsZXNUeXBlPzogUE1UaWxlc1R5cGU7XG59O1xuXG4vKipcbiAqIFJhc3RlciB0aWxlc2V0IG1ldGFkYXRhLlxuICovXG5leHBvcnQgdHlwZSBSYXN0ZXJUaWxlRGF0YXNldE1ldGFkYXRhID0gKFJhc3RlclRpbGVMb2NhbE1ldGFkYXRhIHwgUmFzdGVyVGlsZVJlbW90ZU1ldGFkYXRhKSAmXG4gIFJhc3RlclRpbGVNZXRhZGF0YVNvdXJjZVR5cGU7XG5cbmV4cG9ydCB0eXBlIFdNU0RhdGFzZXRNZXRhZGF0YSA9IHtcbiAgdHlwZTogdHlwZW9mIFJFTU9URV9USUxFO1xuICByZW1vdGVUaWxlRm9ybWF0OiBSZW1vdGVUaWxlRm9ybWF0LldNUztcbiAgdGlsZXNldERhdGFVcmw6IHN0cmluZztcbiAgdGlsZXNldE1ldGFkYXRhVXJsOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgbGF5ZXJzOiB7bmFtZTogc3RyaW5nOyB0aXRsZTogc3RyaW5nOyBib3VuZGluZ0JveDogbnVtYmVyW10gfCBudWxsfVtdO1xuICBsYWJlbD86IHN0cmluZztcbiAgYXR0cmlidXRpb24/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBUaWxlM0RQcm92aWRlckF0dHJpYnV0aW9uID0ge1xuICB0aXRsZTogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgbG9nb1VybD86IHN0cmluZztcbiAgaGVpZ2h0PzogbnVtYmVyO1xuICBib3R0b20/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBUaWxlM0RQcm92aWRlciA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICB1cmxLZXk6IHN0cmluZztcbiAgYXR0cmlidXRpb24/OiBUaWxlM0RQcm92aWRlckF0dHJpYnV0aW9uO1xufTtcblxuZXhwb3J0IGNvbnN0IFRJTEUzRF9QUk9WSURFUlM6IFJlY29yZDxzdHJpbmcsIFRpbGUzRFByb3ZpZGVyPiA9IHtcbiAgZ29vZ2xlOiB7XG4gICAgbmFtZTogJ0dvb2dsZSAzRCBUaWxlcycsXG4gICAgdXJsS2V5OiAnZ29vZ2xlJyxcbiAgICBhdHRyaWJ1dGlvbjoge1xuICAgICAgdGl0bGU6ICdCdWlsdCB3aXRoIEdvb2dsZSBNYXBzLicsXG4gICAgICB1cmw6ICcnLFxuICAgICAgbG9nb1VybDpcbiAgICAgICAgJ2h0dHBzOi8vc3R1ZGlvLXB1YmxpYy1kYXRhLmZvdXJzcXVhcmUuY29tL3N0YXRpY3MvaW1hZ2VzL2dvb2dsZS13YXRlcm1hcmstd2hpdGUucG5nJyxcbiAgICAgIGhlaWdodDogMTcsXG4gICAgICBib3R0b206IDBcbiAgICB9XG4gIH0sXG4gIGNlc2l1bToge1xuICAgIG5hbWU6ICdDZXNpdW0gaW9uJyxcbiAgICB1cmxLZXk6ICdpb24uY2VzaXVtJyxcbiAgICBhdHRyaWJ1dGlvbjoge3RpdGxlOiAnQ2VzaXVtLicsIHVybDogJ2h0dHBzOi8vY2VzaXVtLmNvbS8nLCBoZWlnaHQ6IDE5LCBib3R0b206IDB9XG4gIH0sXG4gIGFyY2dpczoge1xuICAgIG5hbWU6ICdBcmNHSVMnLFxuICAgIHVybEtleTogJ2FyY2dpcycsXG4gICAgYXR0cmlidXRpb246IHt0aXRsZTogJ1Bvd2VyZWQgYnkgRXNyaS4nLCB1cmw6ICdodHRwczovL2FyY2dpcy5jb20vJywgaGVpZ2h0OiAxNn1cbiAgfVxufTtcblxuZXhwb3J0IHR5cGUgVGlsZTNERGF0YXNldE1ldGFkYXRhID0ge1xuICB0aWxlM2RVcmw6IHN0cmluZztcbiAgdGlsZTNkQWNjZXNzVG9rZW4/OiBzdHJpbmc7XG4gIHRpbGUzZFByb3ZpZGVyPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQml0bWFwQm91bmRzID1cbiAgfCBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXVxuICB8IFtbbnVtYmVyLCBudW1iZXJdLCBbbnVtYmVyLCBudW1iZXJdLCBbbnVtYmVyLCBudW1iZXJdLCBbbnVtYmVyLCBudW1iZXJdXTtcblxuZXhwb3J0IHR5cGUgQml0bWFwRGF0YXNldE1ldGFkYXRhID0ge1xuICBpbWFnZVVybDogc3RyaW5nO1xuICBib3VuZHM6IEJpdG1hcEJvdW5kcztcbiAgaXNEYXRhVXJpPzogYm9vbGVhbjtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUFBLElBRVlBLFdBQVcsR0FBQUMsT0FBQSxDQUFBRCxXQUFBLDBCQUFYQSxXQUFXO0VBQVhBLFdBQVc7RUFBWEEsV0FB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
|