UNPKG

kepler.gl

Version:

kepler.gl is a webgl based application to visualize large scale location data in the browser

186 lines (185 loc) 33.7 kB
"use strict"; 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 _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireWildcard(require("react")); var _reactIntl = require("react-intl"); var _constants = require("@kepler.gl/constants"); var _localization = require("@kepler.gl/localization"); var _icons = require("../common/icons"); var _styledComponents = require("../common/styled-components"); var _components = require("./export-map-modal/components"); 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; } function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); } function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } // SPDX-License-Identifier: MIT // Copyright contributors to the kepler.gl project var getDataRowCount = function getDataRowCount(datasets, selectedDataset, filtered, intl) { if (selectedDataset === undefined) { return; } var selectedData = datasets[selectedDataset]; if (!selectedData) { return intl.formatMessage({ id: 'modal.exportData.fileCount' }, { fileCount: Object.keys(datasets).length }); } var dataContainer = selectedData.dataContainer, filteredIdxCPU = selectedData.filteredIdxCPU; if (filtered && !filteredIdxCPU) { return '-'; } var rowCount = filtered ? filteredIdxCPU === null || filteredIdxCPU === void 0 ? void 0 : filteredIdxCPU.length : dataContainer.numRows(); return intl.formatMessage({ id: 'modal.exportData.rowCount' }, { rowCount: rowCount === null || rowCount === void 0 ? void 0 : rowCount.toLocaleString() }); }; var ExportDataModalFactory = function ExportDataModalFactory() { var ExportDataModal = /*#__PURE__*/function (_Component) { function ExportDataModal() { var _this; (0, _classCallCheck2["default"])(this, ExportDataModal); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _callSuper(this, ExportDataModal, [].concat(args)); (0, _defineProperty2["default"])(_this, "_onSelectDataset", function (_ref) { var value = _ref.target.value; _this.props.applyCPUFilter(value); _this.props.onChangeExportSelectedDataset(value); }); return _this; } (0, _inherits2["default"])(ExportDataModal, _Component); return (0, _createClass2["default"])(ExportDataModal, [{ key: "componentDidMount", value: function componentDidMount() { var toCPUFilter = this.props.selectedDataset || Object.keys(this.props.datasets); this.props.applyCPUFilter(toCPUFilter); } }, { key: "render", value: function render() { var _this$props = this.props, _this$props$supported = _this$props.supportedDataTypes, supportedDataTypes = _this$props$supported === void 0 ? _constants.EXPORT_DATA_TYPE_OPTIONS : _this$props$supported, datasets = _this$props.datasets, selectedDataset = _this$props.selectedDataset, dataType = _this$props.dataType, filtered = _this$props.filtered, onChangeExportDataType = _this$props.onChangeExportDataType, onChangeExportFiltered = _this$props.onChangeExportFiltered, intl = _this$props.intl; var exportAllDatasets = selectedDataset ? !datasets[selectedDataset] : true; var showTiledDatasetWarning = Object.keys(datasets).some(function (datasetId) { return (datasets[datasetId].type === _constants.DatasetType.VECTOR_TILE || datasets[datasetId].type === _constants.DatasetType.RASTER_TILE || datasets[datasetId].type === _constants.DatasetType.WMS_TILE) && (selectedDataset === datasetId || exportAllDatasets); }); return /*#__PURE__*/_react["default"].createElement(_styledComponents.StyledModalContent, { className: "export-data-modal" }, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_styledComponents.StyledExportSection, null, /*#__PURE__*/_react["default"].createElement("div", { className: "description" }, /*#__PURE__*/_react["default"].createElement("div", { className: "title" }, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, { id: 'modal.exportData.datasetTitle' })), /*#__PURE__*/_react["default"].createElement("div", { className: "subtitle" }, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, { id: 'modal.exportData.datasetSubtitle' }))), /*#__PURE__*/_react["default"].createElement("div", { className: "selection" }, /*#__PURE__*/_react["default"].createElement("select", { value: selectedDataset, onChange: this._onSelectDataset }, [intl.formatMessage({ id: 'modal.exportData.allDatasets' })].concat(Object.keys(datasets)).map(function (d) { return /*#__PURE__*/_react["default"].createElement("option", { key: d, value: d }, datasets[d] && datasets[d].label || d); })))), /*#__PURE__*/_react["default"].createElement(_styledComponents.StyledExportSection, null, /*#__PURE__*/_react["default"].createElement("div", { className: "description" }, /*#__PURE__*/_react["default"].createElement("div", { className: "title" }, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, { id: 'modal.exportData.dataTypeTitle' })), /*#__PURE__*/_react["default"].createElement("div", { className: "subtitle" }, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, { id: 'modal.exportData.dataTypeSubtitle' }))), /*#__PURE__*/_react["default"].createElement("div", { className: "selection" }, supportedDataTypes.map(function (op) { return /*#__PURE__*/_react["default"].createElement(_styledComponents.StyledType, { key: op.id, selected: dataType === op.id, onClick: function onClick() { return op.available && onChangeExportDataType(op.id); } }, /*#__PURE__*/_react["default"].createElement(_icons.FileType, { ext: op.label, height: "80px", fontSize: "11px" }), dataType === op.id && /*#__PURE__*/_react["default"].createElement(_styledComponents.CheckMark, null)); }))), /*#__PURE__*/_react["default"].createElement(_styledComponents.StyledExportSection, null, /*#__PURE__*/_react["default"].createElement("div", { className: "description" }, /*#__PURE__*/_react["default"].createElement("div", { className: "title" }, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, { id: 'modal.exportData.dataTypeTitle' })), /*#__PURE__*/_react["default"].createElement("div", { className: "subtitle" }, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, { id: 'modal.exportData.filterDataSubtitle' }))), /*#__PURE__*/_react["default"].createElement("div", { className: "selection" }, /*#__PURE__*/_react["default"].createElement(_styledComponents.StyledFilteredOption, { className: "unfiltered-option", selected: !filtered, onClick: function onClick() { return onChangeExportFiltered(false); } }, /*#__PURE__*/_react["default"].createElement("div", { className: "filter-option-title" }, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, { id: 'modal.exportData.unfilteredData' })), /*#__PURE__*/_react["default"].createElement("div", { className: "filter-option-subtitle" }, getDataRowCount(datasets, selectedDataset, false, intl)), !filtered && /*#__PURE__*/_react["default"].createElement(_styledComponents.CheckMark, null)), /*#__PURE__*/_react["default"].createElement(_styledComponents.StyledFilteredOption, { className: "filtered-option", selected: filtered, onClick: function onClick() { return onChangeExportFiltered(true); } }, /*#__PURE__*/_react["default"].createElement("div", { className: "filter-option-title" }, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, { id: 'modal.exportData.filteredData' })), /*#__PURE__*/_react["default"].createElement("div", { className: "filter-option-subtitle" }, getDataRowCount(datasets, selectedDataset, true, intl)), filtered && /*#__PURE__*/_react["default"].createElement(_styledComponents.CheckMark, null)))), showTiledDatasetWarning ? /*#__PURE__*/_react["default"].createElement("div", { className: "title" }, /*#__PURE__*/_react["default"].createElement(_components.StyledWarning, null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, { id: 'modal.exportData.tiledDatasetWarning' }))) : null)); } }]); }(_react.Component); return (0, _reactIntl.injectIntl)(ExportDataModal); }; var _default = exports["default"] = ExportDataModalFactory; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcmVhY3RJbnRsIiwiX2NvbnN0YW50cyIsIl9sb2NhbGl6YXRpb24iLCJfaWNvbnMiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9jb21wb25lbnRzIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiX2NhbGxTdXBlciIsIm8iLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsImFwcGx5IiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJnZXREYXRhUm93Q291bnQiLCJkYXRhc2V0cyIsInNlbGVjdGVkRGF0YXNldCIsImZpbHRlcmVkIiwiaW50bCIsInVuZGVmaW5lZCIsInNlbGVjdGVkRGF0YSIsImZvcm1hdE1lc3NhZ2UiLCJpZCIsImZpbGVDb3VudCIsImtleXMiLCJsZW5ndGgiLCJkYXRhQ29udGFpbmVyIiwiZmlsdGVyZWRJZHhDUFUiLCJyb3dDb3VudCIsIm51bVJvd3MiLCJ0b0xvY2FsZVN0cmluZyIsIkV4cG9ydERhdGFNb2RhbEZhY3RvcnkiLCJFeHBvcnREYXRhTW9kYWwiLCJfQ29tcG9uZW50IiwiX3RoaXMiLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2xlbiIsImFyZ3VtZW50cyIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJjb25jYXQiLCJfZGVmaW5lUHJvcGVydHkyIiwiX3JlZiIsInZhbHVlIiwidGFyZ2V0IiwicHJvcHMiLCJhcHBseUNQVUZpbHRlciIsIm9uQ2hhbmdlRXhwb3J0U2VsZWN0ZWREYXRhc2V0IiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJjb21wb25lbnREaWRNb3VudCIsInRvQ1BVRmlsdGVyIiwicmVuZGVyIiwiX3RoaXMkcHJvcHMiLCJfdGhpcyRwcm9wcyRzdXBwb3J0ZWQiLCJzdXBwb3J0ZWREYXRhVHlwZXMiLCJFWFBPUlRfREFUQV9UWVBFX09QVElPTlMiLCJkYXRhVHlwZSIsIm9uQ2hhbmdlRXhwb3J0RGF0YVR5cGUiLCJvbkNoYW5nZUV4cG9ydEZpbHRlcmVkIiwiZXhwb3J0QWxsRGF0YXNldHMiLCJzaG93VGlsZWREYXRhc2V0V2FybmluZyIsInNvbWUiLCJkYXRhc2V0SWQiLCJ0eXBlIiwiRGF0YXNldFR5cGUiLCJWRUNUT1JfVElMRSIsIlJBU1RFUl9USUxFIiwiV01TX1RJTEUiLCJjcmVhdGVFbGVtZW50IiwiU3R5bGVkTW9kYWxDb250ZW50IiwiY2xhc3NOYW1lIiwiU3R5bGVkRXhwb3J0U2VjdGlvbiIsIkZvcm1hdHRlZE1lc3NhZ2UiLCJvbkNoYW5nZSIsIl9vblNlbGVjdERhdGFzZXQiLCJtYXAiLCJkIiwibGFiZWwiLCJvcCIsIlN0eWxlZFR5cGUiLCJzZWxlY3RlZCIsIm9uQ2xpY2siLCJhdmFpbGFibGUiLCJGaWxlVHlwZSIsImV4dCIsImhlaWdodCIsImZvbnRTaXplIiwiQ2hlY2tNYXJrIiwiU3R5bGVkRmlsdGVyZWRPcHRpb24iLCJTdHlsZWRXYXJuaW5nIiwiQ29tcG9uZW50IiwiaW5qZWN0SW50bCIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RhbHMvZXhwb3J0LWRhdGEtbW9kYWwudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCwge0NvbXBvbmVudH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtpbmplY3RJbnRsLCBJbnRsU2hhcGV9IGZyb20gJ3JlYWN0LWludGwnO1xuXG5pbXBvcnQge0RhdGFzZXRUeXBlLCBFWFBPUlRfREFUQV9UWVBFX09QVElPTlN9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7Rm9ybWF0dGVkTWVzc2FnZX0gZnJvbSAnQGtlcGxlci5nbC9sb2NhbGl6YXRpb24nO1xuaW1wb3J0IHtEYXRhc2V0c30gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5cbmltcG9ydCB7RmlsZVR5cGV9IGZyb20gJy4uL2NvbW1vbi9pY29ucyc7XG5pbXBvcnQge1xuICBTdHlsZWRFeHBvcnRTZWN0aW9uLFxuICBTdHlsZWRGaWx0ZXJlZE9wdGlvbixcbiAgU3R5bGVkTW9kYWxDb250ZW50LFxuICBTdHlsZWRUeXBlLFxuICBDaGVja01hcmtcbn0gZnJvbSAnLi4vY29tbW9uL3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7U3R5bGVkV2FybmluZ30gZnJvbSAnLi9leHBvcnQtbWFwLW1vZGFsL2NvbXBvbmVudHMnO1xuXG5jb25zdCBnZXREYXRhUm93Q291bnQgPSAoXG4gIGRhdGFzZXRzOiBEYXRhc2V0cyxcbiAgc2VsZWN0ZWREYXRhc2V0OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIGZpbHRlcmVkOiBib29sZWFuLFxuICBpbnRsOiBJbnRsU2hhcGVcbikgPT4ge1xuICBpZiAoc2VsZWN0ZWREYXRhc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3Qgc2VsZWN0ZWREYXRhID0gZGF0YXNldHNbc2VsZWN0ZWREYXRhc2V0XTtcbiAgaWYgKCFzZWxlY3RlZERhdGEpIHtcbiAgICByZXR1cm4gaW50bC5mb3JtYXRNZXNzYWdlKFxuICAgICAge2lkOiAnbW9kYWwuZXhwb3J0RGF0YS5maWxlQ291bnQnfSxcbiAgICAgIHtmaWxlQ291bnQ6IE9iamVjdC5rZXlzKGRhdGFzZXRzKS5sZW5ndGh9XG4gICAgKTtcbiAgfVxuICBjb25zdCB7ZGF0YUNvbnRhaW5lciwgZmlsdGVyZWRJZHhDUFV9ID0gc2VsZWN0ZWREYXRhO1xuXG4gIGlmIChmaWx0ZXJlZCAmJiAhZmlsdGVyZWRJZHhDUFUpIHtcbiAgICByZXR1cm4gJy0nO1xuICB9XG5cbiAgY29uc3Qgcm93Q291bnQgPSBmaWx0ZXJlZCA/IGZpbHRlcmVkSWR4Q1BVPy5sZW5ndGggOiBkYXRhQ29udGFpbmVyLm51bVJvd3MoKTtcblxuICByZXR1cm4gaW50bC5mb3JtYXRNZXNzYWdlKFxuICAgIHtpZDogJ21vZGFsLmV4cG9ydERhdGEucm93Q291bnQnfSxcbiAgICB7cm93Q291bnQ6IHJvd0NvdW50Py50b0xvY2FsZVN0cmluZygpfVxuICApO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBFeHBvcnREYXRhTW9kYWxQcm9wcyB7XG4gIGRhdGFzZXRzOiBEYXRhc2V0cztcbiAgc2VsZWN0ZWREYXRhc2V0Pzogc3RyaW5nO1xuICBkYXRhVHlwZTogc3RyaW5nO1xuICBmaWx0ZXJlZDogYm9vbGVhbjtcbiAgLy8gY2FsbGJhY2tzXG4gIGFwcGx5Q1BVRmlsdGVyOiAoZmlsdGVyOiBzdHJpbmcgfCBzdHJpbmdbXSkgPT4gdm9pZDtcbiAgb25DaGFuZ2VFeHBvcnRTZWxlY3RlZERhdGFzZXQ6IChkYXRhc2V0OiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uQ2hhbmdlRXhwb3J0RGF0YVR5cGU6ICh0eXBlOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uQ2hhbmdlRXhwb3J0RmlsdGVyZWQ6IChpc0ZpbHRlcmVkOiBib29sZWFuKSA9PiB2b2lkO1xuICBpbnRsOiBJbnRsU2hhcGU7XG4gIHN1cHBvcnRlZERhdGFUeXBlczoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBhdmFpbGFibGU6IGJvb2xlYW47XG4gIH1bXTtcbn1cblxuY29uc3QgRXhwb3J0RGF0YU1vZGFsRmFjdG9yeSA9ICgpID0+IHtcbiAgY2xhc3MgRXhwb3J0RGF0YU1vZGFsIGV4dGVuZHMgQ29tcG9uZW50PEV4cG9ydERhdGFNb2RhbFByb3BzPiB7XG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBjb25zdCB0b0NQVUZpbHRlciA9IHRoaXMucHJvcHMuc2VsZWN0ZWREYXRhc2V0IHx8IE9iamVjdC5rZXlzKHRoaXMucHJvcHMuZGF0YXNldHMpO1xuICAgICAgdGhpcy5wcm9wcy5hcHBseUNQVUZpbHRlcih0b0NQVUZpbHRlcik7XG4gICAgfVxuXG4gICAgX29uU2VsZWN0RGF0YXNldDogUmVhY3QuQ2hhbmdlRXZlbnRIYW5kbGVyPEhUTUxTZWxlY3RFbGVtZW50PiA9ICh7dGFyZ2V0OiB7dmFsdWV9fSkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy5hcHBseUNQVUZpbHRlcih2YWx1ZSk7XG4gICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlRXhwb3J0U2VsZWN0ZWREYXRhc2V0KHZhbHVlKTtcbiAgICB9O1xuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBzdXBwb3J0ZWREYXRhVHlwZXMgPSBFWFBPUlRfREFUQV9UWVBFX09QVElPTlMsXG4gICAgICAgIGRhdGFzZXRzLFxuICAgICAgICBzZWxlY3RlZERhdGFzZXQsXG4gICAgICAgIGRhdGFUeXBlLFxuICAgICAgICBmaWx0ZXJlZCxcbiAgICAgICAgb25DaGFuZ2VFeHBvcnREYXRhVHlwZSxcbiAgICAgICAgb25DaGFuZ2VFeHBvcnRGaWx0ZXJlZCxcbiAgICAgICAgaW50bFxuICAgICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgIGNvbnN0IGV4cG9ydEFsbERhdGFzZXRzID0gc2VsZWN0ZWREYXRhc2V0ID8gIWRhdGFzZXRzW3NlbGVjdGVkRGF0YXNldF0gOiB0cnVlO1xuICAgICAgY29uc3Qgc2hvd1RpbGVkRGF0YXNldFdhcm5pbmcgPSBPYmplY3Qua2V5cyhkYXRhc2V0cykuc29tZShkYXRhc2V0SWQgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIChkYXRhc2V0c1tkYXRhc2V0SWRdLnR5cGUgPT09IERhdGFzZXRUeXBlLlZFQ1RPUl9USUxFIHx8XG4gICAgICAgICAgICBkYXRhc2V0c1tkYXRhc2V0SWRdLnR5cGUgPT09IERhdGFzZXRUeXBlLlJBU1RFUl9USUxFIHx8XG4gICAgICAgICAgICBkYXRhc2V0c1tkYXRhc2V0SWRdLnR5cGUgPT09IERhdGFzZXRUeXBlLldNU19USUxFKSAmJlxuICAgICAgICAgIChzZWxlY3RlZERhdGFzZXQgPT09IGRhdGFzZXRJZCB8fCBleHBvcnRBbGxEYXRhc2V0cylcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTW9kYWxDb250ZW50IGNsYXNzTmFtZT1cImV4cG9ydC1kYXRhLW1vZGFsXCI+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxTdHlsZWRFeHBvcnRTZWN0aW9uPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9eydtb2RhbC5leHBvcnREYXRhLmRhdGFzZXRUaXRsZSd9IC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdWJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9eydtb2RhbC5leHBvcnREYXRhLmRhdGFzZXRTdWJ0aXRsZSd9IC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNlbGVjdGlvblwiPlxuICAgICAgICAgICAgICAgIDxzZWxlY3QgdmFsdWU9e3NlbGVjdGVkRGF0YXNldH0gb25DaGFuZ2U9e3RoaXMuX29uU2VsZWN0RGF0YXNldH0+XG4gICAgICAgICAgICAgICAgICB7W2ludGwuZm9ybWF0TWVzc2FnZSh7aWQ6ICdtb2RhbC5leHBvcnREYXRhLmFsbERhdGFzZXRzJ30pXVxuICAgICAgICAgICAgICAgICAgICAuY29uY2F0KE9iamVjdC5rZXlzKGRhdGFzZXRzKSlcbiAgICAgICAgICAgICAgICAgICAgLm1hcChkID0+IChcbiAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIGtleT17ZH0gdmFsdWU9e2R9PlxuICAgICAgICAgICAgICAgICAgICAgICAgeyhkYXRhc2V0c1tkXSAmJiBkYXRhc2V0c1tkXS5sYWJlbCkgfHwgZH1cbiAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9TdHlsZWRFeHBvcnRTZWN0aW9uPlxuICAgICAgICAgICAgPFN0eWxlZEV4cG9ydFNlY3Rpb24+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGVzY3JpcHRpb25cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD17J21vZGFsLmV4cG9ydERhdGEuZGF0YVR5cGVUaXRsZSd9IC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdWJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9eydtb2RhbC5leHBvcnREYXRhLmRhdGFUeXBlU3VidGl0bGUnfSAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzZWxlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICB7c3VwcG9ydGVkRGF0YVR5cGVzLm1hcChvcCA9PiAoXG4gICAgICAgICAgICAgICAgICA8U3R5bGVkVHlwZVxuICAgICAgICAgICAgICAgICAgICBrZXk9e29wLmlkfVxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZD17ZGF0YVR5cGUgPT09IG9wLmlkfVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvcC5hdmFpbGFibGUgJiYgb25DaGFuZ2VFeHBvcnREYXRhVHlwZShvcC5pZCl9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxGaWxlVHlwZSBleHQ9e29wLmxhYmVsfSBoZWlnaHQ9XCI4MHB4XCIgZm9udFNpemU9XCIxMXB4XCIgLz5cbiAgICAgICAgICAgICAgICAgICAge2RhdGFUeXBlID09PSBvcC5pZCAmJiA8Q2hlY2tNYXJrIC8+fVxuICAgICAgICAgICAgICAgICAgPC9TdHlsZWRUeXBlPlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvU3R5bGVkRXhwb3J0U2VjdGlvbj5cbiAgICAgICAgICAgIDxTdHlsZWRFeHBvcnRTZWN0aW9uPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9eydtb2RhbC5leHBvcnREYXRhLmRhdGFUeXBlVGl0bGUnfSAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3VidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPXsnbW9kYWwuZXhwb3J0RGF0YS5maWx0ZXJEYXRhU3VidGl0bGUnfSAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzZWxlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8U3R5bGVkRmlsdGVyZWRPcHRpb25cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInVuZmlsdGVyZWQtb3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkPXshZmlsdGVyZWR9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvbkNoYW5nZUV4cG9ydEZpbHRlcmVkKGZhbHNlKX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZpbHRlci1vcHRpb24tdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9eydtb2RhbC5leHBvcnREYXRhLnVuZmlsdGVyZWREYXRhJ30gLz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmaWx0ZXItb3B0aW9uLXN1YnRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgIHtnZXREYXRhUm93Q291bnQoZGF0YXNldHMsIHNlbGVjdGVkRGF0YXNldCwgZmFsc2UsIGludGwpfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB7IWZpbHRlcmVkICYmIDxDaGVja01hcmsgLz59XG4gICAgICAgICAgICAgICAgPC9TdHlsZWRGaWx0ZXJlZE9wdGlvbj5cbiAgICAgICAgICAgICAgICA8U3R5bGVkRmlsdGVyZWRPcHRpb25cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZpbHRlcmVkLW9wdGlvblwiXG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZD17ZmlsdGVyZWR9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvbkNoYW5nZUV4cG9ydEZpbHRlcmVkKHRydWUpfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmlsdGVyLW9wdGlvbi10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD17J21vZGFsLmV4cG9ydERhdGEuZmlsdGVyZWREYXRhJ30gLz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmaWx0ZXItb3B0aW9uLXN1YnRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgIHtnZXREYXRhUm93Q291bnQoZGF0YXNldHMsIHNlbGVjdGVkRGF0YXNldCwgdHJ1ZSwgaW50bCl9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIHtmaWx0ZXJlZCAmJiA8Q2hlY2tNYXJrIC8+fVxuICAgICAgICAgICAgICAgIDwvU3R5bGVkRmlsdGVyZWRPcHRpb24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9TdHlsZWRFeHBvcnRTZWN0aW9uPlxuICAgICAgICAgICAge3Nob3dUaWxlZERhdGFzZXRXYXJuaW5nID8gKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRpdGxlXCI+XG4gICAgICAgICAgICAgICAgPFN0eWxlZFdhcm5pbmc+XG4gICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD17J21vZGFsLmV4cG9ydERhdGEudGlsZWREYXRhc2V0V2FybmluZyd9IC8+XG4gICAgICAgICAgICAgICAgPC9TdHlsZWRXYXJuaW5nPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L1N0eWxlZE1vZGFsQ29udGVudD5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGluamVjdEludGwoRXhwb3J0RGF0YU1vZGFsKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEV4cG9ydERh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