kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
158 lines (155 loc) • 27.4 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
var _react = _interopRequireWildcard(require("react"));
var _reactJsonPretty = _interopRequireDefault(require("react-json-pretty"));
var _reactVirtualized = require("react-virtualized");
var _styledComponents = _interopRequireDefault(require("styled-components"));
var _layers = require("@kepler.gl/layers");
var _utils = require("@kepler.gl/utils");
var _loadDataFooter = _interopRequireDefault(require("./load-data-footer"));
var _tilesetIcon = _interopRequireDefault(require("./tileset-icon"));
var _tilesetVectorForm = _interopRequireDefault(require("./tileset-vector-form"));
var _tilesetRasterForm = _interopRequireDefault(require("./tileset-raster-form"));
var _tilesetWmsForm = _interopRequireDefault(require("./tileset-wms-form"));
var _tilesetTile3dForm = _interopRequireDefault(require("./tileset-tile3d-form"));
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6; // SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
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); }
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; }
var WIDTH_ICON = '70px';
var LoadTilesetTabContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n"])), function (props) {
return props.theme.AZURE;
});
var Container = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n grid-gap: 20px;\n background-color: ", ";\n"])), function (props) {
return props.theme.WHITE;
});
var TilesetTypeContainer = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n display: grid;\n grid-template-columns: repeat(5, ", ");\n column-gap: 10px;\n margin-bottom: 20px;\n"])), WIDTH_ICON);
var MetaContainer = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n max-height: 400px;\n background-color: ", ";\n"])), function (_ref) {
var theme = _ref.theme;
return theme.editorBackground;
});
var MetaInnerContainer = _styledComponents["default"].div(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n position: relative;\n border: 1px solid ", ";\n background-color: white;\n border-radius: 2px;\n display: inline-block;\n font: inherit;\n line-height: 1.5em;\n padding: 0.5em 3.5em 0.5em 1em;\n box-sizing: border-box;\n overflow-y: scroll;\n overflow-x: auto;\n white-space: pre-wrap;\n word-wrap: break-word;\n height: ", "px;\n width: ", "px;\n color: ", ";\n font-size: 11px;\n font-family: ", ";\n max-width: 600px;\n"])), function (props) {
return props.theme.selectBorderColorLT;
}, function (props) {
return props.height;
}, function (props) {
return props.width;
}, function (props) {
return props.theme.textColorLT;
}, function (props) {
return props.theme.fontFamily;
});
var StyledHeaderMessage = _styledComponents["default"].div(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n font-size: 14px;\n"])), function (props) {
return props.theme.textColorLT;
});
var TILE_TYPES = [{
id: 'vectorTile',
label: 'Vector Tile',
Icon: _layers.VectorTileIcon,
Component: _tilesetVectorForm["default"]
}, {
id: 'rasterTile',
label: 'Raster Tile',
Icon: _layers.RasterTileIcon,
Component: _tilesetRasterForm["default"]
}, {
id: 'wms',
label: 'WMS',
Icon: _layers.WMSLayerIcon,
Component: _tilesetWmsForm["default"]
}, {
id: 'tile3d',
label: '3D Tile',
Icon: _layers.Tile3DLayerIcon,
Component: _tilesetTile3dForm["default"]
}];
function isReady(response) {
return response.dataset && !response.loading && !response.error;
}
function LoadTilesetTabFactory() {
var LoadTilesetTab = function LoadTilesetTab(_ref2) {
var onTilesetAdded = _ref2.onTilesetAdded,
isAddingDatasets = _ref2.isAddingDatasets;
var _useState = (0, _react.useState)(0),
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
typeIndex = _useState2[0],
setTypeIndex = _useState2[1];
var _useState3 = (0, _react.useState)({}),
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
response = _useState4[0],
setResponse = _useState4[1];
var error = response.error;
var loading = response.loading;
var data = response.metadata;
var jsonDataText = (0, _react.useMemo)(function () {
return JSON.stringify(data, null, 2);
}, [data]);
var createTileDataset = (0, _react.useCallback)(function () {
var dataset = response.dataset,
metadata = response.metadata;
if (dataset) {
onTilesetAdded(dataset, metadata);
}
}, [onTilesetAdded, response]);
// temp patch to hide raster tile layer while in development
var enableRasterTileLayer = (0, _utils.getApplicationConfig)().enableRasterTileLayer;
var enableWMSLayer = (0, _utils.getApplicationConfig)().enableWMSLayer;
// Filter tile types based on application config
var tileTypes = (0, _react.useMemo)(function () {
var types = TILE_TYPES.filter(function (tileType) {
if (tileType.id === 'rasterTile') {
return enableRasterTileLayer;
}
if (tileType.id === 'wms') {
return enableWMSLayer;
}
return true; // Include all other types by default
});
return types;
}, [enableRasterTileLayer, enableWMSLayer]);
var CurrentForm = tileTypes[typeIndex].Component;
return /*#__PURE__*/_react["default"].createElement(LoadTilesetTabContainer, null, /*#__PURE__*/_react["default"].createElement(Container, null, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(StyledHeaderMessage, null, "Tileset Type"), /*#__PURE__*/_react["default"].createElement(TilesetTypeContainer, {
className: "tileset-type"
}, tileTypes.map(function (tileType, index) {
return /*#__PURE__*/_react["default"].createElement(_tilesetIcon["default"], {
key: tileType.label,
name: tileType.label,
Icon: /*#__PURE__*/_react["default"].createElement(tileType.Icon, {
height: WIDTH_ICON
}),
onClick: function onClick() {
return setTypeIndex(index);
},
selected: typeIndex === index
});
})), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(CurrentForm, {
setResponse: setResponse
}))), /*#__PURE__*/_react["default"].createElement(MetaContainer, null, data && /*#__PURE__*/_react["default"].createElement(_reactVirtualized.AutoSizer, null, function (_ref3) {
var height = _ref3.height,
width = _ref3.width;
return /*#__PURE__*/_react["default"].createElement(MetaInnerContainer, {
height: height,
width: width
}, /*#__PURE__*/_react["default"].createElement(_reactJsonPretty["default"], {
id: "json-pretty",
json: jsonDataText
}));
}))), /*#__PURE__*/_react["default"].createElement(_loadDataFooter["default"], {
disabled: Boolean(error) || !isReady(response),
isLoading: loading || isAddingDatasets,
onConfirm: createTileDataset,
confirmText: "tilesetSetup.addTilesetText",
errorText: error && (0, _utils.getError)(error)
}));
};
return LoadTilesetTab;
}
var _default = exports["default"] = LoadTilesetTabFactory;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcmVhY3RKc29uUHJldHR5IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9yZWFjdFZpcnR1YWxpemVkIiwiX3N0eWxlZENvbXBvbmVudHMiLCJfbGF5ZXJzIiwiX3V0aWxzIiwiX2xvYWREYXRhRm9vdGVyIiwiX3RpbGVzZXRJY29uIiwiX3RpbGVzZXRWZWN0b3JGb3JtIiwiX3RpbGVzZXRSYXN0ZXJGb3JtIiwiX3RpbGVzZXRXbXNGb3JtIiwiX3RpbGVzZXRUaWxlM2RGb3JtIiwiX3RlbXBsYXRlT2JqZWN0IiwiX3RlbXBsYXRlT2JqZWN0MiIsIl90ZW1wbGF0ZU9iamVjdDMiLCJfdGVtcGxhdGVPYmplY3Q0IiwiX3RlbXBsYXRlT2JqZWN0NSIsIl90ZW1wbGF0ZU9iamVjdDYiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJXSURUSF9JQ09OIiwiTG9hZFRpbGVzZXRUYWJDb250YWluZXIiLCJzdHlsZWQiLCJkaXYiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsMiIsInByb3BzIiwidGhlbWUiLCJBWlVSRSIsIkNvbnRhaW5lciIsIldISVRFIiwiVGlsZXNldFR5cGVDb250YWluZXIiLCJNZXRhQ29udGFpbmVyIiwiX3JlZiIsImVkaXRvckJhY2tncm91bmQiLCJNZXRhSW5uZXJDb250YWluZXIiLCJzZWxlY3RCb3JkZXJDb2xvckxUIiwiaGVpZ2h0Iiwid2lkdGgiLCJ0ZXh0Q29sb3JMVCIsImZvbnRGYW1pbHkiLCJTdHlsZWRIZWFkZXJNZXNzYWdlIiwiVElMRV9UWVBFUyIsImlkIiwibGFiZWwiLCJJY29uIiwiVmVjdG9yVGlsZUljb24iLCJDb21wb25lbnQiLCJUaWxlc2V0VmVjdG9yRm9ybSIsIlJhc3RlclRpbGVJY29uIiwiVGlsZXNldFJhc3RlckZvcm0iLCJXTVNMYXllckljb24iLCJUaWxlc2V0V01TRm9ybSIsIlRpbGUzRExheWVySWNvbiIsIlRpbGVzZXRUaWxlM0RGb3JtIiwiaXNSZWFkeSIsInJlc3BvbnNlIiwiZGF0YXNldCIsImxvYWRpbmciLCJlcnJvciIsIkxvYWRUaWxlc2V0VGFiRmFjdG9yeSIsIkxvYWRUaWxlc2V0VGFiIiwiX3JlZjIiLCJvblRpbGVzZXRBZGRlZCIsImlzQWRkaW5nRGF0YXNldHMiLCJfdXNlU3RhdGUiLCJ1c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheTIiLCJ0eXBlSW5kZXgiLCJzZXRUeXBlSW5kZXgiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsInNldFJlc3BvbnNlIiwiZGF0YSIsIm1ldGFkYXRhIiwianNvbkRhdGFUZXh0IiwidXNlTWVtbyIsIkpTT04iLCJzdHJpbmdpZnkiLCJjcmVhdGVUaWxlRGF0YXNldCIsInVzZUNhbGxiYWNrIiwiZW5hYmxlUmFzdGVyVGlsZUxheWVyIiwiZ2V0QXBwbGljYXRpb25Db25maWciLCJlbmFibGVXTVNMYXllciIsInRpbGVUeXBlcyIsInR5cGVzIiwiZmlsdGVyIiwidGlsZVR5cGUiLCJDdXJyZW50Rm9ybSIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJtYXAiLCJpbmRleCIsImtleSIsIm5hbWUiLCJvbkNsaWNrIiwic2VsZWN0ZWQiLCJBdXRvU2l6ZXIiLCJfcmVmMyIsImpzb24iLCJkaXNhYmxlZCIsIkJvb2xlYW4iLCJpc0xvYWRpbmciLCJvbkNvbmZpcm0iLCJjb25maXJtVGV4dCIsImVycm9yVGV4dCIsImdldEVycm9yIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21vZGFscy90aWxlc2V0cy1tb2RhbHMvbG9hZC10aWxlc2V0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgUmVhY3QsIHt1c2VDYWxsYmFjaywgdXNlTWVtbywgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7SW50bFNoYXBlfSBmcm9tICdyZWFjdC1pbnRsJztcbmltcG9ydCBKU09OUHJldHR5IGZyb20gJ3JlYWN0LWpzb24tcHJldHR5JztcbmltcG9ydCB7QXV0b1NpemVyfSBmcm9tICdyZWFjdC12aXJ0dWFsaXplZCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcblxuaW1wb3J0IHtWZWN0b3JUaWxlSWNvbiwgUmFzdGVyVGlsZUljb24sIFdNU0xheWVySWNvbiwgVGlsZTNETGF5ZXJJY29ufSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5pbXBvcnQge2dldEVycm9yLCBnZXRBcHBsaWNhdGlvbkNvbmZpZ30gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5cbmltcG9ydCB7TWV0YVJlc3BvbnNlfSBmcm9tICcuL2NvbW1vbic7XG5pbXBvcnQgTG9hZERhdGFGb290ZXIgZnJvbSAnLi9sb2FkLWRhdGEtZm9vdGVyJztcbmltcG9ydCBUaWxlc2V0SWNvbiBmcm9tICcuL3RpbGVzZXQtaWNvbic7XG5pbXBvcnQgVGlsZXNldFZlY3RvckZvcm0gZnJvbSAnLi90aWxlc2V0LXZlY3Rvci1mb3JtJztcbmltcG9ydCBUaWxlc2V0UmFzdGVyRm9ybSBmcm9tICcuL3RpbGVzZXQtcmFzdGVyLWZvcm0nO1xuXG5pbXBvcnQgVGlsZXNldFdNU0Zvcm0gZnJvbSAnLi90aWxlc2V0LXdtcy1mb3JtJztcbmltcG9ydCBUaWxlc2V0VGlsZTNERm9ybSBmcm9tICcuL3RpbGVzZXQtdGlsZTNkLWZvcm0nO1xuXG5jb25zdCBXSURUSF9JQ09OID0gJzcwcHgnO1xuXG5jb25zdCBMb2FkVGlsZXNldFRhYkNvbnRhaW5lciA9IHN0eWxlZC5kaXZgXG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLkFaVVJFfTtcbmA7XG5cbmNvbnN0IENvbnRhaW5lciA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGdyaWQ7XG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDIsIG1pbm1heCgwLCAxZnIpKTtcbiAgZ3JpZC1nYXA6IDIwcHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuV0hJVEV9O1xuYDtcblxuY29uc3QgVGlsZXNldFR5cGVDb250YWluZXIgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg1LCAke1dJRFRIX0lDT059KTtcbiAgY29sdW1uLWdhcDogMTBweDtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbmA7XG5cbmNvbnN0IE1ldGFDb250YWluZXIgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBtYXgtaGVpZ2h0OiA0MDBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHsoe3RoZW1lfSkgPT4gdGhlbWUuZWRpdG9yQmFja2dyb3VuZH07XG5gO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1ldGFJbm5lckNvbnRhaW5lclByb3BzIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG59XG5cbmNvbnN0IE1ldGFJbm5lckNvbnRhaW5lciA9IHN0eWxlZC5kaXY8TWV0YUlubmVyQ29udGFpbmVyUHJvcHM+YFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc2VsZWN0Qm9yZGVyQ29sb3JMVH07XG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBib3JkZXItcmFkaXVzOiAycHg7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udDogaW5oZXJpdDtcbiAgbGluZS1oZWlnaHQ6IDEuNWVtO1xuICBwYWRkaW5nOiAwLjVlbSAzLjVlbSAwLjVlbSAxZW07XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgb3ZlcmZsb3cteDogYXV0bztcbiAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy5oZWlnaHR9cHg7XG4gIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLndpZHRofXB4O1xuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS50ZXh0Q29sb3JMVH07XG4gIGZvbnQtc2l6ZTogMTFweDtcbiAgZm9udC1mYW1pbHk6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuZm9udEZhbWlseX07XG4gIG1heC13aWR0aDogNjAwcHg7XG5gO1xuXG5jb25zdCBTdHlsZWRIZWFkZXJNZXNzYWdlID0gc3R5bGVkLmRpdmBcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudGV4dENvbG9yTFR9O1xuICBmb250LXNpemU6IDE0cHg7XG5gO1xuXG50eXBlIExvYWRUaWxlc2V0VGFiUHJvcHMgPSB7XG4gIG1ldGE6IHtba2V5OiBzdHJpbmddOiBhbnl9O1xuICBpc0FkZGluZ0RhdGFzZXRzOiBib29sZWFuO1xuICBvblRpbGVzZXRBZGRlZDogKHRpbGVzZXRJbmZvOiBhbnksIG1ldGFkYXRhPzogYW55KSA9PiB2b2lkO1xuICBpbnRsOiBJbnRsU2hhcGU7XG59O1xuXG5jb25zdCBUSUxFX1RZUEVTID0gW1xuICB7XG4gICAgaWQ6ICd2ZWN0b3JUaWxlJyxcbiAgICBsYWJlbDogJ1ZlY3RvciBUaWxlJyxcbiAgICBJY29uOiBWZWN0b3JUaWxlSWNvbixcbiAgICBDb21wb25lbnQ6IFRpbGVzZXRWZWN0b3JGb3JtXG4gIH0sXG4gIHtcbiAgICBpZDogJ3Jhc3RlclRpbGUnLFxuICAgIGxhYmVsOiAnUmFzdGVyIFRpbGUnLFxuICAgIEljb246IFJhc3RlclRpbGVJY29uLFxuICAgIENvbXBvbmVudDogVGlsZXNldFJhc3RlckZvcm1cbiAgfSxcbiAge1xuICAgIGlkOiAnd21zJyxcbiAgICBsYWJlbDogJ1dNUycsXG4gICAgSWNvbjogV01TTGF5ZXJJY29uLFxuICAgIENvbXBvbmVudDogVGlsZXNldFdNU0Zvcm1cbiAgfSxcbiAge1xuICAgIGlkOiAndGlsZTNkJyxcbiAgICBsYWJlbDogJzNEIFRpbGUnLFxuICAgIEljb246IFRpbGUzRExheWVySWNvbixcbiAgICBDb21wb25lbnQ6IFRpbGVzZXRUaWxlM0RGb3JtXG4gIH1cbl07XG5cbmZ1bmN0aW9uIGlzUmVhZHkocmVzcG9uc2UpIHtcbiAgcmV0dXJuIHJlc3BvbnNlLmRhdGFzZXQgJiYgIXJlc3BvbnNlLmxvYWRpbmcgJiYgIXJlc3BvbnNlLmVycm9yO1xufVxuXG5mdW5jdGlvbiBMb2FkVGlsZXNldFRhYkZhY3RvcnkoKSB7XG4gIGNvbnN0IExvYWRUaWxlc2V0VGFiOiBSZWFjdC5GQzxMb2FkVGlsZXNldFRhYlByb3BzPiA9ICh7b25UaWxlc2V0QWRkZWQsIGlzQWRkaW5nRGF0YXNldHN9KSA9PiB7XG4gICAgY29uc3QgW3R5cGVJbmRleCwgc2V0VHlwZUluZGV4XSA9IHVzZVN0YXRlPG51bWJlcj4oMCk7XG4gICAgY29uc3QgW3Jlc3BvbnNlLCBzZXRSZXNwb25zZV0gPSB1c2VTdGF0ZTxNZXRhUmVzcG9uc2U+KHt9KTtcblxuICAgIGNvbnN0IGVycm9yID0gcmVzcG9uc2UuZXJyb3I7XG4gICAgY29uc3QgbG9hZGluZyA9IHJlc3BvbnNlLmxvYWRpbmc7XG4gICAgY29uc3QgZGF0YSA9IHJlc3BvbnNlLm1ldGFkYXRhO1xuICAgIGNvbnN0IGpzb25EYXRhVGV4dCA9IHVzZU1lbW8oKCkgPT4gSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMiksIFtkYXRhXSk7XG5cbiAgICBjb25zdCBjcmVhdGVUaWxlRGF0YXNldCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgIGNvbnN0IHtkYXRhc2V0LCBtZXRhZGF0YX0gPSByZXNwb25zZTtcbiAgICAgIGlmIChkYXRhc2V0KSB7XG4gICAgICAgIG9uVGlsZXNldEFkZGVkKGRhdGFzZXQsIG1ldGFkYXRhKTtcbiAgICAgIH1cbiAgICB9LCBbb25UaWxlc2V0QWRkZWQsIHJlc3BvbnNlXSk7XG5cbiAgICAvLyB0ZW1wIHBhdGNoIHRvIGhpZGUgcmFzdGVyIHRpbGUgbGF5ZXIgd2hpbGUgaW4gZGV2ZWxvcG1lbnRcbiAgICBjb25zdCBlbmFibGVSYXN0ZXJUaWxlTGF5ZXIgPSBnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmVuYWJsZVJhc3RlclRpbGVMYXllcjtcbiAgICBjb25zdCBlbmFibGVXTVNMYXllciA9IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZW5hYmxlV01TTGF5ZXI7XG5cbiAgICAvLyBGaWx0ZXIgdGlsZSB0eXBlcyBiYXNlZCBvbiBhcHBsaWNhdGlvbiBjb25maWdcbiAgICBjb25zdCB0aWxlVHlwZXMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgIGNvbnN0IHR5cGVzID0gVElMRV9UWVBFUy5maWx0ZXIodGlsZVR5cGUgPT4ge1xuICAgICAgICBpZiAodGlsZVR5cGUuaWQgPT09ICdyYXN0ZXJUaWxlJykge1xuICAgICAgICAgIHJldHVybiBlbmFibGVSYXN0ZXJUaWxlTGF5ZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRpbGVUeXBlLmlkID09PSAnd21zJykge1xuICAgICAgICAgIHJldHVybiBlbmFibGVXTVNMYXllcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gSW5jbHVkZSBhbGwgb3RoZXIgdHlwZXMgYnkgZGVmYXVsdFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gdHlwZXM7XG4gICAgfSwgW2VuYWJsZVJhc3RlclRpbGVMYXllciwgZW5hYmxlV01TTGF5ZXJdKTtcblxuICAgIGNvbnN0IEN1cnJlbnRGb3JtID0gdGlsZVR5cGVzW3R5cGVJbmRleF0uQ29tcG9uZW50O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxMb2FkVGlsZXNldFRhYkNvbnRhaW5lcj5cbiAgICAgICAgPENvbnRhaW5lcj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPFN0eWxlZEhlYWRlck1lc3NhZ2U+VGlsZXNldCBUeXBlPC9TdHlsZWRIZWFkZXJNZXNzYWdlPlxuXG4gICAgICAgICAgICA8VGlsZXNldFR5cGVDb250YWluZXIgY2xhc3NOYW1lPVwidGlsZXNldC10eXBlXCI+XG4gICAgICAgICAgICAgIHt0aWxlVHlwZXMubWFwKCh0aWxlVHlwZSwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICA8VGlsZXNldEljb25cbiAgICAgICAgICAgICAgICAgIGtleT17dGlsZVR5cGUubGFiZWx9XG4gICAgICAgICAgICAgICAgICBuYW1lPXt0aWxlVHlwZS5sYWJlbH1cbiAgICAgICAgICAgICAgICAgIEljb249ezx0aWxlVHlwZS5JY29uIGhlaWdodD17V0lEVEhfSUNPTn0gLz59XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRUeXBlSW5kZXgoaW5kZXgpfVxuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ9e3R5cGVJbmRleCA9PT0gaW5kZXh9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L1RpbGVzZXRUeXBlQ29udGFpbmVyPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPEN1cnJlbnRGb3JtIHNldFJlc3BvbnNlPXtzZXRSZXNwb25zZX0gLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxNZXRhQ29udGFpbmVyPlxuICAgICAgICAgICAge2RhdGEgJiYgKFxuICAgICAgICAgICAgICA8QXV0b1NpemVyPlxuICAgICAgICAgICAgICAgIHsoe2hlaWdodCwgd2lkdGh9KSA9PiAoXG4gICAgICAgICAgICAgICAgICA8TWV0YUlubmVyQ29udGFpbmVyIGhlaWdodD17aGVpZ2h0fSB3aWR0aD17d2lkdGh9PlxuICAgICAgICAgICAgICAgICAgICA8SlNPTlByZXR0eSBpZD1cImpzb24tcHJldHR5XCIganNvbj17anNvbkRhdGFUZXh0fSAvPlxuICAgICAgICAgICAgICAgICAgPC9NZXRhSW5uZXJDb250YWluZXI+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9BdXRvU2l6ZXI+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvTWV0YUNvbnRhaW5lcj5cbiAgICAgICAgPC9Db250YWluZXI+XG4gICAgICAgIDxMb2FkRGF0YUZvb3RlclxuICAgICAgICAgIGRpc2FibGVkPXtCb29sZWFuKGVycm9yKSB8fCAhaXNSZWFkeShyZXNwb25zZSl9XG4gICAgICAgICAgaXNMb2FkaW5nPXtsb2FkaW5nIHx8IGlzQWRkaW5nRGF0YXNldHN9XG4gICAgICAgICAgb25Db25maXJtPXtjcmVhdGVUaWxlRGF0YXNldH1cbiAgICAgICAgICBjb25maXJtVGV4dD1cInRpbGVzZXRTZXR1cC5hZGRUaWxlc2V0VGV4dFwiXG4gICAgICAgICAgZXJyb3JUZXh0PXtlcnJvciAmJiBnZXRFcnJvcihlcnJvcil9XG4gICAgICAgIC8+XG4gICAgICA8L0xvYWRUaWxlc2V0VGFiQ29udGFpbmVyPlxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIExvYWRUaWxlc2V0VGFiO1xufVxuXG5leHBvcnQgZGVmYXVsdCBMb2FkVGlsZXNldFRhYkZhY3Rvcnk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBQyxnQkFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsaUJBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLGlCQUFBLEdBQUFGLHNCQUFBLENBQUFGLE9BQUE7QUFFQSxJQUFBSyxPQUFBLEdBQUFMLE9BQUE7QUFDQSxJ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