kepler.gl.geoiq
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
167 lines (137 loc) • 20 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.gridVisConfigs = exports["default"] = void 0;
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _deck = require("deck.gl");
var _aggregationLayer = _interopRequireDefault(require("../aggregation-layer"));
var _enhancedCpuGridLayer = _interopRequireDefault(require("../../deckgl-layers/grid-layer/enhanced-cpu-grid-layer"));
var _gridUtils = require("./grid-utils");
var _gridLayerIcon = _interopRequireDefault(require("./grid-layer-icon"));
var _defaultSettings = require("../../constants/default-settings");
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; }
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; }
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
var gridVisConfigs = exports.gridVisConfigs = {
opacity: 'opacity',
worldUnitSize: 'worldUnitSize',
colorRange: 'colorRange',
coverage: 'coverage',
sizeRange: 'elevationRange',
percentile: 'percentile',
elevationPercentile: 'elevationPercentile',
elevationScale: 'elevationScale',
colorAggregation: 'aggregation',
sizeAggregation: 'sizeAggregation',
enable3d: 'enable3d'
};
var GridLayer = exports["default"] = /*#__PURE__*/function (_AggregationLayer) {
(0, _inherits2["default"])(GridLayer, _AggregationLayer);
var _super = _createSuper(GridLayer);
function GridLayer(props) {
var _this;
(0, _classCallCheck2["default"])(this, GridLayer);
_this = _super.call(this, props);
_this.registerVisConfig(gridVisConfigs);
_this.visConfigSettings.worldUnitSize.label = 'Grid Size (km)';
return _this;
}
(0, _createClass2["default"])(GridLayer, [{
key: "type",
get: function get() {
return 'grid';
}
}, {
key: "layerIcon",
get: function get() {
return _gridLayerIcon["default"];
}
}, {
key: "formatLayerData",
value: function formatLayerData(_, allData, filteredIndex, oldLayerData) {
var opt = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
var formattedData = (0, _get2["default"])((0, _getPrototypeOf2["default"])(GridLayer.prototype), "formatLayerData", this).call(this, _, allData, filteredIndex, oldLayerData, opt);
var getPosition = formattedData.getPosition,
data = formattedData.data; // TODO: fix this in deck.gl layer
var cleaned = data.filter(function (d) {
var pos = getPosition(d);
return pos.every(Number.isFinite);
}); // All data processing is done in deck.gl layer
return _objectSpread(_objectSpread({}, formattedData), {}, {
data: cleaned
});
}
}, {
key: "renderLayer",
value: function renderLayer(_ref) {
var data = _ref.data,
idx = _ref.idx,
objectHovered = _ref.objectHovered,
mapState = _ref.mapState,
interaction = _ref.interaction,
layerCallbacks = _ref.layerCallbacks,
layerInteraction = _ref.layerInteraction;
var zoomFactor = this.getZoomFactor(mapState);
var eleZoomFactor = this.getElevationZoomFactor(mapState);
var visConfig = this.config.visConfig;
var cellSize = visConfig.worldUnitSize * 1000;
return [new _deck.GridLayer(_objectSpread(_objectSpread(_objectSpread({}, data), layerInteraction), {}, {
id: this.id,
idx: idx,
cellSize: cellSize,
coverage: visConfig.coverage,
// highlight
autoHighlight: visConfig.enable3d,
highlightColor: _defaultSettings.HIGHLIGH_COLOR_3D,
// color
colorRange: this.getColorRange(visConfig.colorRange),
colorScale: this.config.colorScale,
sizeScale: this.config.sizeScale,
opacity: visConfig.opacity,
upperPercentile: visConfig.percentile[1],
lowerPercentile: visConfig.percentile[0],
// elevation
extruded: visConfig.enable3d,
elevationScale: visConfig.elevationScale * eleZoomFactor,
elevationRange: visConfig.sizeRange,
elevationLowerPercentile: visConfig.elevationPercentile[0],
elevationUpperPercentile: visConfig.elevationPercentile[1],
// parameters
parameters: {
depthTest: Boolean(visConfig.enable3d || mapState.dragRotate)
},
// render
pickable: true,
// callbacks
onSetColorDomain: layerCallbacks.onSetLayerDomain,
_subLayerProps: {
CPU: {
type: _enhancedCpuGridLayer["default"]
}
}
}))].concat((0, _toConsumableArray2["default"])(this.isLayerHovered(objectHovered) && !visConfig.enable3d ? [new _deck.GeoJsonLayer(_objectSpread(_objectSpread({}, layerInteraction), {}, {
id: "".concat(this.id, "-hovered"),
data: [(0, _gridUtils.pointToPolygonGeo)({
object: objectHovered.object,
cellSize: cellSize,
coverage: visConfig.coverage,
mapState: mapState
})],
getLineColor: this.config.highlightColor,
lineWidthScale: 8 * zoomFactor
}))] : []));
}
}]);
return GridLayer;
}(_aggregationLayer["default"]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9sYXllcnMvZ3JpZC1sYXllci9ncmlkLWxheWVyLmpzIl0sIm5hbWVzIjpbImdyaWRWaXNDb25maWdzIiwib3BhY2l0eSIsIndvcmxkVW5pdFNpemUiLCJjb2xvclJhbmdlIiwiY292ZXJhZ2UiLCJzaXplUmFuZ2UiLCJwZXJjZW50aWxlIiwiZWxldmF0aW9uUGVyY2VudGlsZSIsImVsZXZhdGlvblNjYWxlIiwiY29sb3JBZ2dyZWdhdGlvbiIsInNpemVBZ2dyZWdhdGlvbiIsImVuYWJsZTNkIiwiR3JpZExheWVyIiwicHJvcHMiLCJyZWdpc3RlclZpc0NvbmZpZyIsInZpc0NvbmZpZ1NldHRpbmdzIiwibGFiZWwiLCJHcmlkTGF5ZXJJY29uIiwiXyIsImFsbERhdGEiLCJmaWx0ZXJlZEluZGV4Iiwib2xkTGF5ZXJEYXRhIiwib3B0IiwiZm9ybWF0dGVkRGF0YSIsImdldFBvc2l0aW9uIiwiZGF0YSIsImNsZWFuZWQiLCJmaWx0ZXIiLCJkIiwicG9zIiwiZXZlcnkiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsImlkeCIsIm9iamVjdEhvdmVyZWQiLCJtYXBTdGF0ZSIsImludGVyYWN0aW9uIiwibGF5ZXJDYWxsYmFja3MiLCJsYXllckludGVyYWN0aW9uIiwiem9vbUZhY3RvciIsImdldFpvb21GYWN0b3IiLCJlbGVab29tRmFjdG9yIiwiZ2V0RWxldmF0aW9uWm9vbUZhY3RvciIsInZpc0NvbmZpZyIsImNvbmZpZyIsImNlbGxTaXplIiwiRGVja0dMR3JpZExheWVyIiwiaWQiLCJhdXRvSGlnaGxpZ2h0IiwiaGlnaGxpZ2h0Q29sb3IiLCJISUdITElHSF9DT0xPUl8zRCIsImdldENvbG9yUmFuZ2UiLCJjb2xvclNjYWxlIiwic2l6ZVNjYWxlIiwidXBwZXJQZXJjZW50aWxlIiwibG93ZXJQZXJjZW50aWxlIiwiZXh0cnVkZWQiLCJlbGV2YXRpb25SYW5nZSIsImVsZXZhdGlvbkxvd2VyUGVyY2VudGlsZSIsImVsZXZhdGlvblVwcGVyUGVyY2VudGlsZSIsInBhcmFtZXRlcnMiLCJkZXB0aFRlc3QiLCJCb29sZWFuIiwiZHJhZ1JvdGF0ZSIsInBpY2thYmxlIiwib25TZXRDb2xvckRvbWFpbiIsIm9uU2V0TGF5ZXJEb21haW4iLCJfc3ViTGF5ZXJQcm9wcyIsIkNQVSIsInR5cGUiLCJFbmhhbmNlZENQVUdyaWRMYXllciIsImlzTGF5ZXJIb3ZlcmVkIiwiR2VvSnNvbkxheWVyIiwib2JqZWN0IiwiZ2V0TGluZUNvbG9yIiwibGluZVdpZHRoU2NhbGUiLCJBZ2dyZWdhdGlvbkxheWVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7Ozs7O0FBRU8sSUFBTUEsY0FBYyw0QkFBRztBQUM1QkMsRUFBQUEsT0FBTyxFQUFFLFNBRG1CO0FBRTVCQyxFQUFBQSxhQUFhLEVBQUUsZUFGYTtBQUc1QkMsRUFBQUEsVUFBVSxFQUFFLFlBSGdCO0FBSTVCQyxFQUFBQSxRQUFRLEVBQUUsVUFKa0I7QUFLNUJDLEVBQUFBLFNBQVMsRUFBRSxnQkFMaUI7QUFNNUJDLEVBQUFBLFVBQVUsRUFBRSxZQU5nQjtBQU81QkMsRUFBQUEsbUJBQW1CLEVBQUUscUJBUE87QUFRNUJDLEVBQUFBLGNBQWMsRUFBRSxnQkFSWTtBQVM1QkMsRUFBQUEsZ0JBQWdCLEVBQUUsYUFUVTtBQVU1QkMsRUFBQUEsZUFBZSxFQUFFLGlCQVZXO0FBVzVCQyxFQUFBQSxRQUFRLEVBQUU7QUFYa0IsQ0FBdkI7O0lBY2NDLFM7Ozs7O0FBQ25CLHFCQUFZQyxLQUFaLEVBQW1CO0FBQUE7O0FBQUE7QUFDakIsOEJBQU1BLEtBQU47O0FBRUEsVUFBS0MsaUJBQUwsQ0FBdUJkLGNBQXZCOztBQUNBLFVBQUtlLGlCQUFMLENBQXVCYixhQUF2QixDQUFxQ2MsS0FBckMsR0FBNkMsZ0JBQTdDO0FBSmlCO0FBS2xCOzs7O1NBRUQsZUFBVztBQUNULGFBQU8sTUFBUDtBQUNEOzs7U0FFRCxlQUFnQjtBQUNk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O0FBeUJFO0FBQ0FxRCxRQUFBQSxVQUFVLEVBQUU7QUFBQ0MsVUFBQUEsU0FBUyxFQUFFQyxPQUFPLENBQUNuQixTQUFTLENBQUNoQyxRQUFWLElBQXNCd0IsUUFBUSxDQUFDNEIsVUFBaEM7QUFBbkIsU0ExQmQ7QUE0QkU7QUFDQUMsUUFBQUEsUUFBUSxFQUFFLElBN0JaO0FBK0JFO0FBQ0FDLFFBQUFBLGdCQUFnQixFQUFFNUIsY0FBYyxDQUFDNkIsZ0JBaENuQztBQWtDRUMsUUFBQUEsY0FBYyxFQUFFO0FBQ2RDLFVBQUFBLEdBQUcsRUFBRTtBQUNIQyxZQUFBQSxJQUFJLEVBQUVDO0FBREg7QUFEUztBQWxDbEIsU0FERiw2Q0EyQ00sS0FBS0MsY0FBTCxDQUFvQnJDLGFBQXBCLEtBQXNDLENBQUNTLFNBQVMsQ0FBQ2hDLFFBQWpELEdBQ0EsQ0FDRSxJQUFJNkQsa0JBQUosaUNBQ0tsQyxnQkFETDtBQUVFUyxRQUFBQSxFQUFFLFlBQUssS0FBS0EsRUFBVixhQUZKO0FBR0V0QixRQUFBQSxJQUFJLEVBQUUsQ0FDSixrQ0FBa0I7QUFDaEJnRCxVQUFBQSxNQUFNLEVBQUV2QyxhQUFhLENBQUN1QyxNQUROO0FBRWhCNUIsVUFBQUEsUUFBUSxFQUFSQSxRQUZnQjtBQUdoQnpDLFVBQUFBLFFBQVEsRUFBRXVDLFNBQVMsQ0FBQ3ZDLFFBSEo7QUFJaEIrQixVQUFBQSxRQUFRLEVBQVJBO0FBSmdCLFNBQWxCLENBREksQ0FIUjtBQVdFdUMsUUFBQUEsWUFBWSxFQUFFLEtBQUs5QixNQUFMLENBQVlLLGNBWDVCO0FBWUUwQixRQUFBQSxjQUFjLEVBQUUsSUFBSXBDO0FBWnRCLFNBREYsQ0FEQSxHQWlCQSxFQTVETjtBQThERDs7O0VBcEhvQ3FDLDRCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIzIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHtHZW9Kc29uTGF5ZXIsIEdyaWRMYXllciBhcyBEZWNrR0xHcmlkTGF5ZXJ9IGZyb20gJ2RlY2suZ2wnO1xuaW1wb3J0IEFnZ3JlZ2F0aW9uTGF5ZXIgZnJvbSAnLi4vYWdncmVnYXRpb24tbGF5ZXInO1xuaW1wb3J0IEVuaGFuY2VkQ1BVR3JpZExheWVyIGZyb20gJ2RlY2tnbC1sYXllcnMvZ3JpZC1sYXllci9lbmhhbmNlZC1jcHUtZ3JpZC1sYXllcic7XG5pbXBvcnQge3BvaW50VG9Qb2x5Z29uR2VvfSBmcm9tICcuL2dyaWQtdXRpbHMnO1xuaW1wb3J0IEdyaWRMYXllckljb24gZnJvbSAnLi9ncmlkLWxheWVyLWljb24nO1xuaW1wb3J0IHtISUdITElHSF9DT0xPUl8zRH0gZnJvbSAnY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MnO1xuXG5leHBvcnQgY29uc3QgZ3JpZFZpc0NvbmZpZ3MgPSB7XG4gIG9wYWNpdHk6ICdvcGFjaXR5JyxcbiAgd29ybGRVbml0U2l6ZTogJ3dvcmxkVW5pdFNpemUnLFxuICBjb2xvclJhbmdlOiAnY29sb3JSYW5nZScsXG4gIGNvdmVyYWdlOiAnY292ZXJhZ2UnLFxuICBzaXplUmFuZ2U6ICdlbGV2YXRpb25SYW5nZScsXG4gIHBlcmNlbnRpbGU6ICdwZXJjZW50aWxlJyxcbiAgZWxldmF0aW9uUGVyY2VudGlsZTogJ2VsZXZhdGlvblBlcmNlbnRpbGUnLFxuICBlbGV2YXRpb25TY2FsZTogJ2VsZXZhdGlvblNjYWxlJyxcbiAgY29sb3JBZ2dyZWdhdGlvbjogJ2FnZ3JlZ2F0aW9uJyxcbiAgc2l6ZUFnZ3JlZ2F0aW9uOiAnc2l6ZUFnZ3JlZ2F0aW9uJyxcbiAgZW5hYmxlM2Q6ICdlbmFibGUzZCdcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdyaWRMYXllciBleHRlbmRzIEFnZ3JlZ2F0aW9uTGF5ZXIge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIHRoaXMucmVnaXN0ZXJWaXNDb25maWcoZ3JpZFZpc0NvbmZpZ3MpO1xuICAgIHRoaXMudmlzQ29uZmlnU2V0dGluZ3Mud29ybGRVbml0U2l6ZS5sYWJlbCA9ICdHcmlkIFNpemUgKGttKSc7XG4gIH1cblxuICBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gJ2dyaWQnO1xuICB9XG5cbiAgZ2V0IGxheWVySWNvbigpIHtcbiAgICByZXR1cm4gR3JpZExheWVySWNvbjtcbiAgfVxuXG4gIGZvcm1hdExheWVyRGF0YShfLCBhbGxEYXRhLCBmaWx0ZXJlZEluZGV4LCBvbGRMYXllckRhdGEsIG9wdCA9IHt9KSB7XG4gICAgY29uc3QgZm9ybWF0dGVkRGF0YSA9IHN1cGVyLmZvcm1hdExheWVyRGF0YShcbiAgICAgIF8sXG4gICAgICBhbGxEYXRhLFxuICAgICAgZmlsdGVyZWRJbmRleCxcbiAgICAgIG9sZExheWVyRGF0YSxcbiAgICAgIG9wdFxuICAgICk7XG5cbiAgICBjb25zdCB7Z2V0UG9zaXRpb24sIGRhdGF9ID0gZm9ybWF0dGVkRGF0YTtcblxuICAgIC8vIFRPRE86IGZpeCB0aGlzIGluIGRlY2suZ2wgbGF5ZXJcbiAgICBjb25zdCBjbGVhbmVkID0gZGF0YS5maWx0ZXIoZCA9PiB7XG4gICAgICBjb25zdCBwb3MgPSBnZXRQb3NpdGlvbihkKTtcbiAgICAgIHJldHVybiBwb3MuZXZlcnkoTnVtYmVyLmlzRmluaXRlKTtcbiAgICB9KTtcblxuICAgIC8vIEFsbCBkYXRhIHByb2Nlc3NpbmcgaXMgZG9uZSBpbiBkZWNrLmdsIGxheWVyXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmZvcm1hdHRlZERhdGEsXG4gICAgICBkYXRhOiBjbGVhbmVkXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlckxheWVyKHtcbiAgICBkYXRhLFxuICAgIGlkeCxcbiAgICBvYmplY3RIb3ZlcmVkLFxuICAgIG1hcFN0YXRlLFxuICAgIGludGVyYWN0aW9uLFxuICAgIGxheWVyQ2FsbGJhY2tzLFxuICAgIGxheWVySW50ZXJhY3Rpb25cbiAgfSkge1xuICAgIGNvbnN0IHpvb21GYWN0b3IgPSB0aGlzLmdldFpvb21GYWN0b3IobWFwU3RhdGUpO1xuICAgIGNvbnN0IGVsZVpvb21GYWN0b3IgPSB0aGlzLmdldEVsZXZhdGlvblpvb21GYWN0b3IobWFwU3RhdGUpO1xuICAgIGNvbnN0IHt2aXNDb25maWd9ID0gdGhpcy5jb25maWc7XG4gICAgY29uc3QgY2VsbFNpemUgPSB2aXNDb25maWcud29ybGRVbml0U2l6ZSAqIDEwMDA7XG5cbiAgICByZXR1cm4gW1xuICAgICAgbmV3IERlY2tHTEdyaWRMYXllcih7XG4gICAgICAgIC4uLmRhdGEsXG4gICAgICAgIC4uLmxheWVySW50ZXJhY3Rpb24sXG4gICAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgICBpZHgsXG4gICAgICAgIGNlbGxTaXplLFxuICAgICAgICBjb3ZlcmFnZTogdmlzQ29uZmlnLmNvdmVyYWdlLFxuICAgICAgICAvLyBoaWdobGlnaHRcbiAgICAgICAgYXV0b0hpZ2hsaWdodDogdmlzQ29uZmlnLmVuYWJsZTNkLFxuICAgICAgICBoaWdobGlnaHRDb2xvcjogSElHSExJR0hfQ09MT1JfM0QsXG5cbiAgICAgICAgLy8gY29sb3JcbiAgICAgICAgY29sb3JSYW5nZTogdGhpcy5nZXRDb2xvclJhbmdlKHZpc0NvbmZpZy5jb2xvclJhbmdlKSxcbiAgICAgICAgY29sb3JTY2FsZTogdGhpcy5jb25maWcuY29sb3JTY2FsZSxcbiAgICAgICAgc2l6ZVNjYWxlOiB0aGlzLmNvbmZpZy5zaXplU2NhbGUsXG4gICAgICAgIG9wYWNpdHk6IHZpc0NvbmZpZy5vcGFjaXR5LFxuICAgICAgICB1cHBlclBlcmNlbnRpbGU6IHZpc0NvbmZpZy5wZXJjZW50aWxlWzFdLFxuICAgICAgICBsb3dlclBlcmNlbnRpbGU6IHZpc0NvbmZpZy5wZXJjZW50aWxlWzBdLFxuXG4gICAgICAgIC8vIGVsZXZhdGlvblxuICAgICAgICBleHRydWRlZDogdmlzQ29uZmlnLmVuYWJsZTNkLFxuICAgICAgICBlbGV2YXRpb25TY2FsZTogdmlzQ29uZmlnLmVsZXZhdGlvblNjYWxlICogZWxlWm9vbUZhY3RvcixcbiAgICAgICAgZWxldmF0aW9uUmFuZ2U6IHZpc0NvbmZpZy5zaXplUmFuZ2UsXG4gICAgICAgIGVsZXZhdGlvbkxvd2VyUGVyY2VudGlsZTogdmlzQ29uZmlnLmVsZXZhdGlvblBlcmNlbnRpbGVbMF0sXG4gICAgICAgIGVsZXZhdGlvblVwcGVyUGVyY2VudGlsZTogdmlzQ29uZmlnLmVsZXZhdGlvblBlcmNlbnRpbGVbMV0sXG4gICAgICAgIC8vIHBhcmFtZXRlcnNcbiAgICAgICAgcGFyYW1ldGVyczoge2RlcHRoVGVzdDogQm9vbGVhbih2aXNDb25maWcuZW5hYmxlM2QgfHwgbWFwU3RhdGUuZHJhZ1JvdGF0ZSl9LFxuXG4gICAgICAgIC8vIHJlbmRlclxuICAgICAgICBwaWNrYWJsZTogdHJ1ZSxcblxuICAgICAgICAvLyBjYWxsYmFja3NcbiAgICAgICAgb25TZXRDb2xvckRvbWFpbjogbGF5ZXJDYWxsYmFja3Mub25TZXRMYXllckRvbWFpbixcblxuICAgICAgICBfc3ViTGF5ZXJQcm9wczoge1xuICAgICAgICAgIENQVToge1xuICAgICAgICAgICAgdHlwZTogRW5oYW5jZWRDUFVHcmlkTGF5ZXJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pLFxuXG4gICAgICAvLyByZW5kZXIgYW4gb3V0bGluZSBvZiBlYWNoIGNlbGwgaWYgbm90IGV4dHJ1ZGVkXG4gICAgICAuLi4odGhpcy5pc0xheWVySG92ZXJlZChvYmplY3RIb3ZlcmVkKSAmJiAhdmlzQ29uZmlnLmVuYWJsZTNkXG4gICAgICAgID8gW1xuICAgICAgICAgICAgbmV3IEdlb0pzb25MYXllcih7XG4gICAgICAgICAgICAgIC4uLmxheWVySW50ZXJhY3Rpb24sXG4gICAgICAgICAgICAgIGlkOiBgJHt0aGlzLmlkfS1ob3ZlcmVkYCxcbiAgICAgICAgICAgICAgZGF0YTogW1xuICAgICAgICAgICAgICAgIHBvaW50VG9Qb2x5Z29uR2VvKHtcbiAgICAgICAgICAgICAgICAgIG9iamVjdDogb2JqZWN0SG92ZXJlZC5vYmplY3QsXG4gICAgICAgICAgICAgICAgICBjZWxsU2l6ZSxcbiAgICAgICAgICAgICAgICAgIGNvdmVyYWdlOiB2aXNDb25maWcuY292ZXJhZ2UsXG4gICAgICAgICAgICAgICAgICBtYXBTdGF0ZVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIGdldExpbmVDb2xvcjogdGhpcy5jb25maWcuaGlnaGxpZ2h0Q29sb3IsXG4gICAgICAgICAgICAgIGxpbmVXaWR0aFNjYWxlOiA4ICogem9vbUZhY3RvclxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdXG4gICAgICAgIDogW10pXG4gICAgXTtcbiAgfVxufVxuIl19