kepler.gl.geoiq
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
362 lines (356 loc) • 35.8 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.LAYER_TEXT_CONFIGS = exports.LAYER_VIS_CONFIGS = exports.PROPERTY_GROUPS = void 0;
var _keymirror = _interopRequireDefault(require("keymirror"));
var _defaultSettings = require("../constants/default-settings");
var _colorRanges = require("../constants/color-ranges");
// Copyright (c) 2019 Uber Technologies, Inc.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
var PROPERTY_GROUPS = (0, _keymirror["default"])({
color: null,
stroke: null,
radius: null,
height: null,
// for heatmap aggregation
cell: null,
precision: null
});
exports.PROPERTY_GROUPS = PROPERTY_GROUPS;
var LAYER_VIS_CONFIGS = {
thickness: {
type: 'number',
defaultValue: 2,
label: 'Stroke Width',
isRanged: false,
range: [0, 100],
step: 0.1,
group: PROPERTY_GROUPS.stroke,
property: 'thickness'
},
strokeWidthRange: {
type: 'number',
defaultValue: [0, 10],
label: 'Stroke Width Range',
isRanged: true,
range: [0, 200],
step: 0.1,
group: PROPERTY_GROUPS.stroke,
property: 'sizeRange'
},
// radius is actually radiusScale in deck.gl
radius: {
type: 'number',
defaultValue: 10,
label: 'Radius',
isRanged: false,
range: [0, 100],
step: 0.1,
group: PROPERTY_GROUPS.radius,
property: 'radius'
},
fixedRadius: {
defaultValue: false,
type: 'boolean',
label: 'Fixed Radius to meter',
description: 'Map radius to absolute radius in meters, e.g. 5 to 5 meters',
group: PROPERTY_GROUPS.radius,
property: 'fixedRadius'
},
radiusRange: {
type: 'number',
defaultValue: [0, 50],
isRanged: true,
range: [0, 500],
step: 0.1,
label: 'Radius Range',
group: PROPERTY_GROUPS.radius,
property: 'radiusRange'
},
clusterRadius: {
type: 'number',
label: 'Cluster Size (m)',
defaultValue: 40,
isRanged: false,
range: [1, 500],
step: 0.1,
group: PROPERTY_GROUPS.radius,
property: 'clusterRadius'
},
clusterRadiusRange: {
type: 'number',
label: 'Radius Range (m)',
defaultValue: [1, 40],
isRanged: true,
range: [1, 150],
step: 0.1,
group: PROPERTY_GROUPS.radius,
property: 'radiusRange'
},
opacity: {
type: 'number',
defaultValue: 0.8,
label: 'Opacity',
isRanged: false,
range: [0, 1],
step: 0.01,
group: PROPERTY_GROUPS.color,
property: 'opacity'
},
coverage: {
type: 'number',
defaultValue: 1,
label: 'Coverage',
isRanged: false,
range: [0, 1],
step: 0.01,
group: PROPERTY_GROUPS.cell,
property: 'coverage'
},
outline: {
type: 'boolean',
defaultValue: false,
label: 'Draw outline',
group: PROPERTY_GROUPS.display,
property: 'outline'
},
colorRange: {
type: 'color-range-select',
defaultValue: _colorRanges.DefaultColorRange,
label: 'Color range',
group: PROPERTY_GROUPS.color,
property: 'colorRange'
},
targetColor: {
type: 'color-select',
label: 'Target Color',
defaultValue: null,
group: PROPERTY_GROUPS.color,
property: 'targetColor'
},
aggregation: {
type: 'select',
defaultValue: _defaultSettings.AGGREGATION_TYPES.average,
label: 'Color Aggregation',
// aggregation options are based on color field types
options: Object.keys(_defaultSettings.AGGREGATION_TYPES),
group: PROPERTY_GROUPS.color,
property: 'colorAggregation',
condition: function condition(config) {
return config.colorField;
}
},
sizeAggregation: {
type: 'select',
defaultValue: _defaultSettings.AGGREGATION_TYPES.average,
label: 'Height Aggregation',
// aggregation options are based on color field types
options: Object.keys(_defaultSettings.AGGREGATION_TYPES),
group: PROPERTY_GROUPS.height,
property: 'sizeAggregation',
condition: function condition(config) {
return config.sizeField;
}
},
heightAggregation: {
type: 'select',
defaultValue: _defaultSettings.AGGREGATION_TYPES.average,
label: 'Height Aggregation',
// aggregation options are based on
options: Object.keys(_defaultSettings.AGGREGATION_TYPES),
group: PROPERTY_GROUPS.color,
property: 'heightAggregation',
condition: function condition(config) {
return config.heightField;
}
},
percentile: {
type: 'number',
defaultValue: [0, 100],
label: function label(config) {
return "Filter by ".concat(config.colorField ? "".concat(config.visConfig.colorAggregation, " ").concat(config.colorField.name) : 'count', " percentile");
},
isRanged: true,
range: [0, 100],
step: 0.01,
group: PROPERTY_GROUPS.color,
property: 'percentile',
// percentile filter only makes sense with linear aggregation
condition: function condition(config) {
return config.colorScale !== 'ordinal';
}
},
elevationPercentile: {
type: 'number',
defaultValue: [0, 100],
label: function label(config) {
return "Filter by ".concat(config.sizeField ? "".concat(config.visConfig.sizeAggregation, " ").concat(config.sizeField.name) : 'count', " percentile");
},
isRanged: true,
range: [0, 100],
step: 0.01,
group: PROPERTY_GROUPS.height,
property: 'elevationPercentile',
// percentile filter only makes sense with linear aggregation
condition: function condition(config) {
return config.visConfig.enable3d && (config.colorField || config.sizeField);
}
},
resolution: {
type: 'number',
defaultValue: 8,
label: 'Resolution range',
isRanged: false,
range: [0, 13],
step: 1,
group: PROPERTY_GROUPS.cell,
property: 'resolution'
},
worldUnitSize: {
type: 'number',
defaultValue: 1,
label: 'World Unit Size',
isRanged: false,
range: [0, 500],
step: 0.0001,
group: PROPERTY_GROUPS.cell,
property: 'worldUnitSize'
},
elevationScale: {
type: 'number',
defaultValue: 5,
label: 'Elevation Scale',
isRanged: false,
range: [0, 100],
step: 0.1,
group: PROPERTY_GROUPS.height,
property: 'elevationScale'
},
elevationRange: {
type: 'number',
defaultValue: [0, 500],
label: 'Height Scale',
isRanged: true,
range: [0, 1000],
step: 0.01,
group: PROPERTY_GROUPS.height,
property: 'sizeRange'
},
coverageRange: {
type: 'number',
defaultValue: [0, 1],
label: 'Coverage Range',
isRanged: true,
range: [0, 1],
step: 0.01,
group: PROPERTY_GROUPS.radius,
property: 'coverageRange'
},
'hi-precision': {
type: 'boolean',
defaultValue: false,
label: 'High Precision Rendering',
group: PROPERTY_GROUPS.precision,
property: 'hi-precision',
description: 'High precision will result in slower performance'
},
enable3d: {
type: 'boolean',
defaultValue: false,
label: 'Height',
group: PROPERTY_GROUPS.height,
property: 'enable3d',
description: 'Click button at top right of the map to switch to 3d view'
},
stroked: {
type: 'boolean',
label: 'Stroke',
defaultValue: true,
group: PROPERTY_GROUPS.display,
property: 'stroked'
},
filled: {
type: 'boolean',
label: 'Fill',
defaultValue: false,
group: PROPERTY_GROUPS.display,
property: 'filled'
},
extruded: {
type: 'boolean',
defaultValue: false,
label: 'Enable Polygon Height',
group: PROPERTY_GROUPS.display,
property: 'extruded'
},
wireframe: {
type: 'boolean',
defaultValue: false,
label: 'Show Wireframe',
group: PROPERTY_GROUPS.display,
property: 'wireframe'
},
// used for heatmap
weight: {
type: 'number',
defaultValue: 1,
label: 'Weight Intensity',
isRanged: false,
range: [0.01, 500],
step: 0.01,
group: PROPERTY_GROUPS.cell,
property: 'weight',
condition: function condition(config) {
return config.weightField;
}
},
heatmapRadius: {
type: 'number',
defaultValue: 20,
label: 'Radius',
isRanged: false,
range: [0, 100],
step: 0.1,
group: PROPERTY_GROUPS.cell,
property: 'radius'
}
};
exports.LAYER_VIS_CONFIGS = LAYER_VIS_CONFIGS;
var LAYER_TEXT_CONFIGS = {
fontSize: {
type: 'number',
range: [1, 100],
value0: 1,
step: 1,
isRanged: false,
label: 'Font size',
showInput: true
},
textAnchor: {
type: 'select',
options: ['start', 'middle', 'end'],
multiSelect: false,
searchable: false
}
};
exports.LAYER_TEXT_CONFIGS = LAYER_TEXT_CONFIGS;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sYXllcnMvbGF5ZXItZmFjdG9yeS5qcyJdLCJuYW1lcyI6WyJQUk9QRVJUWV9HUk9VUFMiLCJjb2xvciIsInN0cm9rZSIsInJhZGl1cyIsImhlaWdodCIsImNlbGwiLCJwcmVjaXNpb24iLCJMQVlFUl9WSVNfQ09ORklHUyIsInRoaWNrbmVzcyIsInR5cGUiLCJkZWZhdWx0VmFsdWUiLCJsYWJlbCIsImlzUmFuZ2VkIiwicmFuZ2UiLCJzdGVwIiwiZ3JvdXAiLCJwcm9wZXJ0eSIsInN0cm9rZVdpZHRoUmFuZ2UiLCJmaXhlZFJhZGl1cyIsImRlc2NyaXB0aW9uIiwicmFkaXVzUmFuZ2UiLCJjbHVzdGVyUmFkaXVzIiwiY2x1c3RlclJhZGl1c1JhbmdlIiwib3BhY2l0eSIsImNvdmVyYWdlIiwib3V0bGluZSIsImRpc3BsYXkiLCJjb2xvclJhbmdlIiwiRGVmYXVsdENvbG9yUmFuZ2UiLCJ0YXJnZXRDb2xvciIsImFnZ3JlZ2F0aW9uIiwiQUdHUkVHQVRJT05fVFlQRVMiLCJhdmVyYWdlIiwib3B0aW9ucyIsIk9iamVjdCIsImtleXMiLCJjb25kaXRpb24iLCJjb25maWciLCJjb2xvckZpZWxkIiwic2l6ZUFnZ3JlZ2F0aW9uIiwic2l6ZUZpZWxkIiwiaGVpZ2h0QWdncmVnYXRpb24iLCJoZWlnaHRGaWVsZCIsInBlcmNlbnRpbGUiLCJ2aXNDb25maWciLCJjb2xvckFnZ3JlZ2F0aW9uIiwibmFtZSIsImNvbG9yU2NhbGUiLCJlbGV2YXRpb25QZXJjZW50aWxlIiwiZW5hYmxlM2QiLCJyZXNvbHV0aW9uIiwid29ybGRVbml0U2l6ZSIsImVsZXZhdGlvblNjYWxlIiwiZWxldmF0aW9uUmFuZ2UiLCJjb3ZlcmFnZVJhbmdlIiwic3Ryb2tlZCIsImZpbGxlZCIsImV4dHJ1ZGVkIiwid2lyZWZyYW1lIiwid2VpZ2h0Iiwid2VpZ2h0RmllbGQiLCJoZWF0bWFwUmFkaXVzIiwiTEFZRVJfVEVYVF9DT05GSUdTIiwiZm9udFNpemUiLCJ2YWx1ZTAi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LFFBQVEsRUFBRSxLQUxGO0FBTVJELElBQUFBLEtBQUssRUFBRSxXQU5DO0FBT1JzRCxJQUFBQSxTQUFTLEVBQUU7QUFQSCxHQURzQjtBQVVoQ0MsRUFBQUEsVUFBVSxFQUFFO0FBQ1Z6RCxJQUFBQSxJQUFJLEVBQUUsUUFESTtBQUVWd0IsSUFBQUEsT0FBTyxFQUFFLENBQUMsT0FBRCxFQUFVLFFBQVYsRUFBb0IsS0FBcEIsQ0FGQztBQUdWa0MsSUFBQUEsV0FBVyxFQUFFLEtBSEg7QUFJVkMsSUFBQUEsVUFBVSxFQUFFO0FBSkY7QUFWb0IsQ0FBM0IiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMTkgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQga2V5TWlycm9yIGZyb20gJ2tleW1pcnJvcic7XG5cbmltcG9ydCB7QUdHUkVHQVRJT05fVFlQRVN9IGZyb20gJ2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzJztcbmltcG9ydCB7RGVmYXVsdENvbG9yUmFuZ2V9IGZyb20gJ2NvbnN0YW50cy9jb2xvci1yYW5nZXMnO1xuXG5leHBvcnQgY29uc3QgUFJPUEVSVFlfR1JPVVBTID0ga2V5TWlycm9yKHtcbiAgY29sb3I6IG51bGwsXG4gIHN0cm9rZTogbnVsbCxcbiAgcmFkaXVzOiBudWxsLFxuICBoZWlnaHQ6IG51bGwsXG5cbiAgLy8gZm9yIGhlYXRtYXAgYWdncmVnYXRpb25cbiAgY2VsbDogbnVsbCxcbiAgcHJlY2lzaW9uOiBudWxsXG59KTtcblxuZXhwb3J0IGNvbnN0IExBWUVSX1ZJU19DT05GSUdTID0ge1xuICB0aGlja25lc3M6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IDIsXG4gICAgbGFiZWw6ICdTdHJva2UgV2lkdGgnLFxuICAgIGlzUmFuZ2VkOiBmYWxzZSxcbiAgICByYW5nZTogWzAsIDEwMF0sXG4gICAgc3RlcDogMC4xLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuc3Ryb2tlLFxuICAgIHByb3BlcnR5OiAndGhpY2tuZXNzJ1xuICB9LFxuICBzdHJva2VXaWR0aFJhbmdlOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdFZhbHVlOiBbMCwgMTBdLFxuICAgIGxhYmVsOiAnU3Ryb2tlIFdpZHRoIFJhbmdlJyxcbiAgICBpc1JhbmdlZDogdHJ1ZSxcbiAgICByYW5nZTogWzAsIDIwMF0sXG4gICAgc3RlcDogMC4xLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuc3Ryb2tlLFxuICAgIHByb3BlcnR5OiAnc2l6ZVJhbmdlJ1xuICB9LFxuICAvLyByYWRpdXMgaXMgYWN0dWFsbHkgcmFkaXVzU2NhbGUgaW4gZGVjay5nbFxuICByYWRpdXM6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IDEwLFxuICAgIGxhYmVsOiAnUmFkaXVzJyxcbiAgICBpc1JhbmdlZDogZmFsc2UsXG4gICAgcmFuZ2U6IFswLCAxMDBdLFxuICAgIHN0ZXA6IDAuMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnJhZGl1cyxcbiAgICBwcm9wZXJ0eTogJ3JhZGl1cydcbiAgfSxcbiAgZml4ZWRSYWRpdXM6IHtcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBsYWJlbDogJ0ZpeGVkIFJhZGl1cyB0byBtZXRlcicsXG4gICAgZGVzY3JpcHRpb246ICdNYXAgcmFkaXVzIHRvIGFic29sdXRlIHJhZGl1cyBpbiBtZXRlcnMsIGUuZy4gNSB0byA1IG1ldGVycycsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5yYWRpdXMsXG4gICAgcHJvcGVydHk6ICdmaXhlZFJhZGl1cydcbiAgfSxcbiAgcmFkaXVzUmFuZ2U6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IFswLCA1MF0sXG4gICAgaXNSYW5nZWQ6IHRydWUsXG4gICAgcmFuZ2U6IFswLCA1MDBdLFxuICAgIHN0ZXA6IDAuMSxcbiAgICBsYWJlbDogJ1JhZGl1cyBSYW5nZScsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5yYWRpdXMsXG4gICAgcHJvcGVydHk6ICdyYWRpdXNSYW5nZSdcbiAgfSxcbiAgY2x1c3RlclJhZGl1czoge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGxhYmVsOiAnQ2x1c3RlciBTaXplIChtKScsXG4gICAgZGVmYXVsdFZhbHVlOiA0MCxcbiAgICBpc1JhbmdlZDogZmFsc2UsXG4gICAgcmFuZ2U6IFsxLCA1MDBdLFxuICAgIHN0ZXA6IDAuMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnJhZGl1cyxcbiAgICBwcm9wZXJ0eTogJ2NsdXN0ZXJSYWRpdXMnXG4gIH0sXG4gIGNsdXN0ZXJSYWRpdXNSYW5nZToge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGxhYmVsOiAnUmFkaXVzIFJhbmdlIChtKScsXG4gICAgZGVmYXVsdFZhbHVlOiBbMSwgNDBdLFxuICAgIGlzUmFuZ2VkOiB0cnVlLFxuICAgIHJhbmdlOiBbMSwgMTUwXSxcbiAgICBzdGVwOiAwLjEsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5yYWRpdXMsXG4gICAgcHJvcGVydHk6ICdyYWRpdXNSYW5nZSdcbiAgfSxcbiAgb3BhY2l0eToge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogMC44LFxuICAgIGxhYmVsOiAnT3BhY2l0eScsXG4gICAgaXNSYW5nZWQ6IGZhbHNlLFxuICAgIHJhbmdlOiBbMCwgMV0sXG4gICAgc3RlcDogMC4wMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmNvbG9yLFxuICAgIHByb3BlcnR5OiAnb3BhY2l0eSdcbiAgfSxcbiAgY292ZXJhZ2U6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IDEsXG4gICAgbGFiZWw6ICdDb3ZlcmFnZScsXG4gICAgaXNSYW5nZWQ6IGZhbHNlLFxuICAgIHJhbmdlOiBbMCwgMV0sXG4gICAgc3RlcDogMC4wMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmNlbGwsXG4gICAgcHJvcGVydHk6ICdjb3ZlcmFnZSdcbiAgfSxcbiAgb3V0bGluZToge1xuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIGxhYmVsOiAnRHJhdyBvdXRsaW5lJyxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmRpc3BsYXksXG4gICAgcHJvcGVydHk6ICdvdXRsaW5lJ1xuICB9LFxuICBjb2xvclJhbmdlOiB7XG4gICAgdHlwZTogJ2NvbG9yLXJhbmdlLXNlbGVjdCcsXG4gICAgZGVmYXVsdFZhbHVlOiBEZWZhdWx0Q29sb3JSYW5nZSxcbiAgICBsYWJlbDogJ0NvbG9yIHJhbmdlJyxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmNvbG9yLFxuICAgIHByb3BlcnR5OiAnY29sb3JSYW5nZSdcbiAgfSxcbiAgdGFyZ2V0Q29sb3I6IHtcbiAgICB0eXBlOiAnY29sb3Itc2VsZWN0JyxcbiAgICBsYWJlbDogJ1RhcmdldCBDb2xvcicsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY29sb3IsXG4gICAgcHJvcGVydHk6ICd0YXJnZXRDb2xvcidcbiAgfSxcbiAgYWdncmVnYXRpb246IHtcbiAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICBkZWZhdWx0VmFsdWU6IEFHR1JFR0FUSU9OX1RZUEVTLmF2ZXJhZ2UsXG4gICAgbGFiZWw6ICdDb2xvciBBZ2dyZWdhdGlvbicsXG4gICAgLy8gYWdncmVnYXRpb24gb3B0aW9ucyBhcmUgYmFzZWQgb24gY29sb3IgZmllbGQgdHlwZXNcbiAgICBvcHRpb25zOiBPYmplY3Qua2V5cyhBR0dSRUdBVElPTl9UWVBFUyksXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5jb2xvcixcbiAgICBwcm9wZXJ0eTogJ2NvbG9yQWdncmVnYXRpb24nLFxuICAgIGNvbmRpdGlvbjogY29uZmlnID0+IGNvbmZpZy5jb2xvckZpZWxkXG4gIH0sXG4gIHNpemVBZ2dyZWdhdGlvbjoge1xuICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgIGRlZmF1bHRWYWx1ZTogQUdHUkVHQVRJT05fVFlQRVMuYXZlcmFnZSxcbiAgICBsYWJlbDogJ0hlaWdodCBBZ2dyZWdhdGlvbicsXG4gICAgLy8gYWdncmVnYXRpb24gb3B0aW9ucyBhcmUgYmFzZWQgb24gY29sb3IgZmllbGQgdHlwZXNcbiAgICBvcHRpb25zOiBPYmplY3Qua2V5cyhBR0dSRUdBVElPTl9UWVBFUyksXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5oZWlnaHQsXG4gICAgcHJvcGVydHk6ICdzaXplQWdncmVnYXRpb24nLFxuICAgIGNvbmRpdGlvbjogY29uZmlnID0+IGNvbmZpZy5zaXplRmllbGRcbiAgfSxcbiAgaGVpZ2h0QWdncmVnYXRpb246IHtcbiAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICBkZWZhdWx0VmFsdWU6IEFHR1JFR0FUSU9OX1RZUEVTLmF2ZXJhZ2UsXG4gICAgbGFiZWw6ICdIZWlnaHQgQWdncmVnYXRpb24nLFxuICAgIC8vIGFnZ3JlZ2F0aW9uIG9wdGlvbnMgYXJlIGJhc2VkIG9uXG4gICAgb3B0aW9uczogT2JqZWN0LmtleXMoQUdHUkVHQVRJT05fVFlQRVMpLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY29sb3IsXG4gICAgcHJvcGVydHk6ICdoZWlnaHRBZ2dyZWdhdGlvbicsXG4gICAgY29uZGl0aW9uOiBjb25maWcgPT4gY29uZmlnLmhlaWdodEZpZWxkXG4gIH0sXG4gIHBlcmNlbnRpbGU6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IFswLCAxMDBdLFxuICAgIGxhYmVsOiBjb25maWcgPT5cbiAgICAgIGBGaWx0ZXIgYnkgJHtcbiAgICAgICAgY29uZmlnLmNvbG9yRmllbGRcbiAgICAgICAgICA/IGAke2NvbmZpZy52aXNDb25maWcuY29sb3JBZ2dyZWdhdGlvbn0gJHtjb25maWcuY29sb3JGaWVsZC5uYW1lfWBcbiAgICAgICAgICA6ICdjb3VudCdcbiAgICAgIH0gcGVyY2VudGlsZWAsXG4gICAgaXNSYW5nZWQ6IHRydWUsXG4gICAgcmFuZ2U6IFswLCAxMDBdLFxuICAgIHN0ZXA6IDAuMDEsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5jb2xvcixcbiAgICBwcm9wZXJ0eTogJ3BlcmNlbnRpbGUnLFxuXG4gICAgLy8gcGVyY2VudGlsZSBmaWx0ZXIgb25seSBtYWtlcyBzZW5zZSB3aXRoIGxpbmVhciBhZ2dyZWdhdGlvblxuICAgIGNvbmRpdGlvbjogY29uZmlnID0+IGNvbmZpZy5jb2xvclNjYWxlICE9PSAnb3JkaW5hbCdcbiAgfSxcbiAgZWxldmF0aW9uUGVyY2VudGlsZToge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogWzAsIDEwMF0sXG4gICAgbGFiZWw6IGNvbmZpZyA9PlxuICAgICAgYEZpbHRlciBieSAke1xuICAgICAgICBjb25maWcuc2l6ZUZpZWxkXG4gICAgICAgICAgPyBgJHtjb25maWcudmlzQ29uZmlnLnNpemVBZ2dyZWdhdGlvbn0gJHtjb25maWcuc2l6ZUZpZWxkLm5hbWV9YFxuICAgICAgICAgIDogJ2NvdW50J1xuICAgICAgfSBwZXJjZW50aWxlYCxcbiAgICBpc1JhbmdlZDogdHJ1ZSxcbiAgICByYW5nZTogWzAsIDEwMF0sXG4gICAgc3RlcDogMC4wMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmhlaWdodCxcbiAgICBwcm9wZXJ0eTogJ2VsZXZhdGlvblBlcmNlbnRpbGUnLFxuICAgIC8vIHBlcmNlbnRpbGUgZmlsdGVyIG9ubHkgbWFrZXMgc2Vuc2Ugd2l0aCBsaW5lYXIgYWdncmVnYXRpb25cbiAgICBjb25kaXRpb246IGNvbmZpZyA9PlxuICAgICAgY29uZmlnLnZpc0NvbmZpZy5lbmFibGUzZCAmJiAoY29uZmlnLmNvbG9yRmllbGQgfHwgY29uZmlnLnNpemVGaWVsZClcbiAgfSxcbiAgcmVzb2x1dGlvbjoge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogOCxcbiAgICBsYWJlbDogJ1Jlc29sdXRpb24gcmFuZ2UnLFxuICAgIGlzUmFuZ2VkOiBmYWxzZSxcbiAgICByYW5nZTogWzAsIDEzXSxcbiAgICBzdGVwOiAxLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY2VsbCxcbiAgICBwcm9wZXJ0eTogJ3Jlc29sdXRpb24nXG4gIH0sXG4gIHdvcmxkVW5pdFNpemU6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IDEsXG4gICAgbGFiZWw6ICdXb3JsZCBVbml0IFNpemUnLFxuICAgIGlzUmFuZ2VkOiBmYWxzZSxcbiAgICByYW5nZTogWzAsIDUwMF0sXG4gICAgc3RlcDogMC4wMDAxLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY2VsbCxcbiAgICBwcm9wZXJ0eTogJ3dvcmxkVW5pdFNpemUnXG4gIH0sXG4gIGVsZXZhdGlvblNjYWxlOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdFZhbHVlOiA1LFxuICAgIGxhYmVsOiAnRWxldmF0aW9uIFNjYWxlJyxcbiAgICBpc1JhbmdlZDogZmFsc2UsXG4gICAgcmFuZ2U6IFswLCAxMDBdLFxuICAgIHN0ZXA6IDAuMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmhlaWdodCxcbiAgICBwcm9wZXJ0eTogJ2VsZXZhdGlvblNjYWxlJ1xuICB9LFxuICBlbGV2YXRpb25SYW5nZToge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogWzAsIDUwMF0sXG4gICAgbGFiZWw6ICdIZWlnaHQgU2NhbGUnLFxuICAgIGlzUmFuZ2VkOiB0cnVlLFxuICAgIHJhbmdlOiBbMCwgMTAwMF0sXG4gICAgc3RlcDogMC4wMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmhlaWdodCxcbiAgICBwcm9wZXJ0eTogJ3NpemVSYW5nZSdcbiAgfSxcbiAgY292ZXJhZ2VSYW5nZToge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogWzAsIDFdLFxuICAgIGxhYmVsOiAnQ292ZXJhZ2UgUmFuZ2UnLFxuICAgIGlzUmFuZ2VkOiB0cnVlLFxuICAgIHJhbmdlOiBbMCwgMV0sXG4gICAgc3RlcDogMC4wMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnJhZGl1cyxcbiAgICBwcm9wZXJ0eTogJ2NvdmVyYWdlUmFuZ2UnXG4gIH0sXG4gICdoaS1wcmVjaXNpb24nOiB7XG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgbGFiZWw6ICdIaWdoIFByZWNpc2lvbiBSZW5kZXJpbmcnLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMucHJlY2lzaW9uLFxuICAgIHByb3BlcnR5OiAnaGktcHJlY2lzaW9uJyxcbiAgICBkZXNjcmlwdGlvbjogJ0hpZ2ggcHJlY2lzaW9uIHdpbGwgcmVzdWx0IGluIHNsb3dlciBwZXJmb3JtYW5jZSdcbiAgfSxcbiAgZW5hYmxlM2Q6IHtcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICBsYWJlbDogJ0hlaWdodCcsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5oZWlnaHQsXG4gICAgcHJvcGVydHk6ICdlbmFibGUzZCcsXG4gICAgZGVzY3JpcHRpb246ICdDbGljayBidXR0b24gYXQgdG9wIHJpZ2h0IG9mIHRoZSBtYXAgdG8gc3dpdGNoIHRvIDNkIHZpZXcnXG4gIH0sXG4gIHN0cm9rZWQ6IHtcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgbGFiZWw6ICdTdHJva2UnLFxuICAgIGRlZmF1bHRWYWx1ZTogdHJ1ZSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmRpc3BsYXksXG4gICAgcHJvcGVydHk6ICdzdHJva2VkJ1xuICB9LFxuICBmaWxsZWQ6IHtcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgbGFiZWw6ICdGaWxsJyxcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuZGlzcGxheSxcbiAgICBwcm9wZXJ0eTogJ2ZpbGxlZCdcbiAgfSxcbiAgZXh0cnVkZWQ6IHtcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICBsYWJlbDogJ0VuYWJsZSBQb2x5Z29uIEhlaWdodCcsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5kaXNwbGF5LFxuICAgIHByb3BlcnR5OiAnZXh0cnVkZWQnXG4gIH0sXG4gIHdpcmVmcmFtZToge1xuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIGxhYmVsOiAnU2hvdyBXaXJlZnJhbWUnLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuZGlzcGxheSxcbiAgICBwcm9wZXJ0eTogJ3dpcmVmcmFtZSdcbiAgfSxcbiAgLy8gdXNlZCBmb3IgaGVhdG1hcFxuICB3ZWlnaHQ6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IDEsXG4gICAgbGFiZWw6ICdXZWlnaHQgSW50ZW5zaXR5JyxcbiAgICBpc1JhbmdlZDogZmFsc2UsXG4gICAgcmFuZ2U6IFswLjAxLCA1MDBdLFxuICAgIHN0ZXA6IDAuMDEsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5jZWxsLFxuICAgIHByb3BlcnR5OiAnd2VpZ2h0JyxcbiAgICBjb25kaXRpb246IGNvbmZpZyA9PiBjb25maWcud2VpZ2h0RmllbGRcbiAgfSxcbiAgaGVhdG1hcFJhZGl1czoge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogMjAsXG4gICAgbGFiZWw6ICdSYWRpdXMnLFxuICAgIGlzUmFuZ2VkOiBmYWxzZSxcbiAgICByYW5nZTogWzAsIDEwMF0sXG4gICAgc3RlcDogMC4xLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY2VsbCxcbiAgICBwcm9wZXJ0eTogJ3JhZGl1cydcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IExBWUVSX1RFWFRfQ09ORklHUyA9IHtcbiAgZm9udFNpemU6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICByYW5nZTogWzEsIDEwMF0sXG4gICAgdmFsdWUwOiAxLFxuICAgIHN0ZXA6IDEsXG4gICAgaXNSYW5nZWQ6IGZhbHNlLFxuICAgIGxhYmVsOiAnRm9udCBzaXplJyxcbiAgICBzaG93SW5wdXQ6IHRydWVcbiAgfSxcbiAgdGV4dEFuY2hvcjoge1xuICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgIG9wdGlvbnM6IFsnc3RhcnQnLCAnbWlkZGxlJywgJ2VuZCddLFxuICAgIG11bHRpU2VsZWN0OiBmYWxzZSxcbiAgICBzZWFyY2hhYmxlOiBmYWxzZVxuICB9XG59O1xuIl19