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.2 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 showVectorTileWarning = Object.keys(datasets).some(function (datasetId) { return datasets[datasetId].type === _constants.DatasetType.VECTOR_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)))), showVectorTileWarning ? /*#__PURE__*/_react["default"].createElement("div", { className: "title" }, /*#__PURE__*/_react["default"].createElement(_components.StyledWarning, null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, { id: 'modal.exportData.vectorTileWarning' }))) : null)); } }]); }(_react.Component); return (0, _reactIntl.injectIntl)(ExportDataModal); }; var _default = exports["default"] = ExportDataModalFactory; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcmVhY3RJbnRsIiwiX2NvbnN0YW50cyIsIl9sb2NhbGl6YXRpb24iLCJfaWNvbnMiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9jb21wb25lbnRzIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiX2NhbGxTdXBlciIsIm8iLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsImFwcGx5IiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJnZXREYXRhUm93Q291bnQiLCJkYXRhc2V0cyIsInNlbGVjdGVkRGF0YXNldCIsImZpbHRlcmVkIiwiaW50bCIsInVuZGVmaW5lZCIsInNlbGVjdGVkRGF0YSIsImZvcm1hdE1lc3NhZ2UiLCJpZCIsImZpbGVDb3VudCIsImtleXMiLCJsZW5ndGgiLCJkYXRhQ29udGFpbmVyIiwiZmlsdGVyZWRJZHhDUFUiLCJyb3dDb3VudCIsIm51bVJvd3MiLCJ0b0xvY2FsZVN0cmluZyIsIkV4cG9ydERhdGFNb2RhbEZhY3RvcnkiLCJFeHBvcnREYXRhTW9kYWwiLCJfQ29tcG9uZW50IiwiX3RoaXMiLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2xlbiIsImFyZ3VtZW50cyIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJjb25jYXQiLCJfZGVmaW5lUHJvcGVydHkyIiwiX3JlZiIsInZhbHVlIiwidGFyZ2V0IiwicHJvcHMiLCJhcHBseUNQVUZpbHRlciIsIm9uQ2hhbmdlRXhwb3J0U2VsZWN0ZWREYXRhc2V0IiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJjb21wb25lbnREaWRNb3VudCIsInRvQ1BVRmlsdGVyIiwicmVuZGVyIiwiX3RoaXMkcHJvcHMiLCJfdGhpcyRwcm9wcyRzdXBwb3J0ZWQiLCJzdXBwb3J0ZWREYXRhVHlwZXMiLCJFWFBPUlRfREFUQV9UWVBFX09QVElPTlMiLCJkYXRhVHlwZSIsIm9uQ2hhbmdlRXhwb3J0RGF0YVR5cGUiLCJvbkNoYW5nZUV4cG9ydEZpbHRlcmVkIiwiZXhwb3J0QWxsRGF0YXNldHMiLCJzaG93VmVjdG9yVGlsZVdhcm5pbmciLCJzb21lIiwiZGF0YXNldElkIiwidHlwZSIsIkRhdGFzZXRUeXBlIiwiVkVDVE9SX1RJTEUiLCJjcmVhdGVFbGVtZW50IiwiU3R5bGVkTW9kYWxDb250ZW50IiwiY2xhc3NOYW1lIiwiU3R5bGVkRXhwb3J0U2VjdGlvbiIsIkZvcm1hdHRlZE1lc3NhZ2UiLCJvbkNoYW5nZSIsIl9vblNlbGVjdERhdGFzZXQiLCJtYXAiLCJkIiwibGFiZWwiLCJvcCIsIlN0eWxlZFR5cGUiLCJzZWxlY3RlZCIsIm9uQ2xpY2siLCJhdmFpbGFibGUiLCJGaWxlVHlwZSIsImV4dCIsImhlaWdodCIsImZvbnRTaXplIiwiQ2hlY2tNYXJrIiwiU3R5bGVkRmlsdGVyZWRPcHRpb24iLCJTdHlsZWRXYXJuaW5nIiwiQ29tcG9uZW50IiwiaW5qZWN0SW50bCIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RhbHMvZXhwb3J0LWRhdGEtbW9kYWwudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCwge0NvbXBvbmVudH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtpbmplY3RJbnRsLCBJbnRsU2hhcGV9IGZyb20gJ3JlYWN0LWludGwnO1xuXG5pbXBvcnQge0RhdGFzZXRUeXBlLCBFWFBPUlRfREFUQV9UWVBFX09QVElPTlN9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7Rm9ybWF0dGVkTWVzc2FnZX0gZnJvbSAnQGtlcGxlci5nbC9sb2NhbGl6YXRpb24nO1xuaW1wb3J0IHtEYXRhc2V0c30gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5cbmltcG9ydCB7RmlsZVR5cGV9IGZyb20gJy4uL2NvbW1vbi9pY29ucyc7XG5pbXBvcnQge1xuICBTdHlsZWRFeHBvcnRTZWN0aW9uLFxuICBTdHlsZWRGaWx0ZXJlZE9wdGlvbixcbiAgU3R5bGVkTW9kYWxDb250ZW50LFxuICBTdHlsZWRUeXBlLFxuICBDaGVja01hcmtcbn0gZnJvbSAnLi4vY29tbW9uL3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7U3R5bGVkV2FybmluZ30gZnJvbSAnLi9leHBvcnQtbWFwLW1vZGFsL2NvbXBvbmVudHMnO1xuXG5jb25zdCBnZXREYXRhUm93Q291bnQgPSAoXG4gIGRhdGFzZXRzOiBEYXRhc2V0cyxcbiAgc2VsZWN0ZWREYXRhc2V0OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIGZpbHRlcmVkOiBib29sZWFuLFxuICBpbnRsOiBJbnRsU2hhcGVcbikgPT4ge1xuICBpZiAoc2VsZWN0ZWREYXRhc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3Qgc2VsZWN0ZWREYXRhID0gZGF0YXNldHNbc2VsZWN0ZWREYXRhc2V0XTtcbiAgaWYgKCFzZWxlY3RlZERhdGEpIHtcbiAgICByZXR1cm4gaW50bC5mb3JtYXRNZXNzYWdlKFxuICAgICAge2lkOiAnbW9kYWwuZXhwb3J0RGF0YS5maWxlQ291bnQnfSxcbiAgICAgIHtmaWxlQ291bnQ6IE9iamVjdC5rZXlzKGRhdGFzZXRzKS5sZW5ndGh9XG4gICAgKTtcbiAgfVxuICBjb25zdCB7ZGF0YUNvbnRhaW5lciwgZmlsdGVyZWRJZHhDUFV9ID0gc2VsZWN0ZWREYXRhO1xuXG4gIGlmIChmaWx0ZXJlZCAmJiAhZmlsdGVyZWRJZHhDUFUpIHtcbiAgICByZXR1cm4gJy0nO1xuICB9XG5cbiAgY29uc3Qgcm93Q291bnQgPSBmaWx0ZXJlZCA/IGZpbHRlcmVkSWR4Q1BVPy5sZW5ndGggOiBkYXRhQ29udGFpbmVyLm51bVJvd3MoKTtcblxuICByZXR1cm4gaW50bC5mb3JtYXRNZXNzYWdlKFxuICAgIHtpZDogJ21vZGFsLmV4cG9ydERhdGEucm93Q291bnQnfSxcbiAgICB7cm93Q291bnQ6IHJvd0NvdW50Py50b0xvY2FsZVN0cmluZygpfVxuICApO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBFeHBvcnREYXRhTW9kYWxQcm9wcyB7XG4gIGRhdGFzZXRzOiBEYXRhc2V0cztcbiAgc2VsZWN0ZWREYXRhc2V0Pzogc3RyaW5nO1xuICBkYXRhVHlwZTogc3RyaW5nO1xuICBmaWx0ZXJlZDogYm9vbGVhbjtcbiAgLy8gY2FsbGJhY2tzXG4gIGFwcGx5Q1BVRmlsdGVyOiAoZmlsdGVyOiBzdHJpbmcgfCBzdHJpbmdbXSkgPT4gdm9pZDtcbiAgb25DaGFuZ2VFeHBvcnRTZWxlY3RlZERhdGFzZXQ6IChkYXRhc2V0OiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uQ2hhbmdlRXhwb3J0RGF0YVR5cGU6ICh0eXBlOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uQ2hhbmdlRXhwb3J0RmlsdGVyZWQ6IChpc0ZpbHRlcmVkOiBib29sZWFuKSA9PiB2b2lkO1xuICBpbnRsOiBJbnRsU2hhcGU7XG4gIHN1cHBvcnRlZERhdGFUeXBlczoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBhdmFpbGFibGU6IGJvb2xlYW47XG4gIH1bXTtcbn1cblxuY29uc3QgRXhwb3J0RGF0YU1vZGFsRmFjdG9yeSA9ICgpID0+IHtcbiAgY2xhc3MgRXhwb3J0RGF0YU1vZGFsIGV4dGVuZHMgQ29tcG9uZW50PEV4cG9ydERhdGFNb2RhbFByb3BzPiB7XG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBjb25zdCB0b0NQVUZpbHRlciA9IHRoaXMucHJvcHMuc2VsZWN0ZWREYXRhc2V0IHx8IE9iamVjdC5rZXlzKHRoaXMucHJvcHMuZGF0YXNldHMpO1xuICAgICAgdGhpcy5wcm9wcy5hcHBseUNQVUZpbHRlcih0b0NQVUZpbHRlcik7XG4gICAgfVxuXG4gICAgX29uU2VsZWN0RGF0YXNldDogUmVhY3QuQ2hhbmdlRXZlbnRIYW5kbGVyPEhUTUxTZWxlY3RFbGVtZW50PiA9ICh7dGFyZ2V0OiB7dmFsdWV9fSkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy5hcHBseUNQVUZpbHRlcih2YWx1ZSk7XG4gICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlRXhwb3J0U2VsZWN0ZWREYXRhc2V0KHZhbHVlKTtcbiAgICB9O1xuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBzdXBwb3J0ZWREYXRhVHlwZXMgPSBFWFBPUlRfREFUQV9UWVBFX09QVElPTlMsXG4gICAgICAgIGRhdGFzZXRzLFxuICAgICAgICBzZWxlY3RlZERhdGFzZXQsXG4gICAgICAgIGRhdGFUeXBlLFxuICAgICAgICBmaWx0ZXJlZCxcbiAgICAgICAgb25DaGFuZ2VFeHBvcnREYXRhVHlwZSxcbiAgICAgICAgb25DaGFuZ2VFeHBvcnRGaWx0ZXJlZCxcbiAgICAgICAgaW50bFxuICAgICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgIGNvbnN0IGV4cG9ydEFsbERhdGFzZXRzID0gc2VsZWN0ZWREYXRhc2V0ID8gIWRhdGFzZXRzW3NlbGVjdGVkRGF0YXNldF0gOiB0cnVlO1xuICAgICAgY29uc3Qgc2hvd1ZlY3RvclRpbGVXYXJuaW5nID0gT2JqZWN0LmtleXMoZGF0YXNldHMpLnNvbWUoZGF0YXNldElkID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBkYXRhc2V0c1tkYXRhc2V0SWRdLnR5cGUgPT09IERhdGFzZXRUeXBlLlZFQ1RPUl9USUxFICYmXG4gICAgICAgICAgKHNlbGVjdGVkRGF0YXNldCA9PT0gZGF0YXNldElkIHx8IGV4cG9ydEFsbERhdGFzZXRzKVxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTdHlsZWRNb2RhbENvbnRlbnQgY2xhc3NOYW1lPVwiZXhwb3J0LWRhdGEtbW9kYWxcIj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPFN0eWxlZEV4cG9ydFNlY3Rpb24+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGVzY3JpcHRpb25cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD17J21vZGFsLmV4cG9ydERhdGEuZGF0YXNldFRpdGxlJ30gLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN1YnRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD17J21vZGFsLmV4cG9ydERhdGEuZGF0YXNldFN1YnRpdGxlJ30gLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic2VsZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgPHNlbGVjdCB2YWx1ZT17c2VsZWN0ZWREYXRhc2V0fSBvbkNoYW5nZT17dGhpcy5fb25TZWxlY3REYXRhc2V0fT5cbiAgICAgICAgICAgICAgICAgIHtbaW50bC5mb3JtYXRNZXNzYWdlKHtpZDogJ21vZGFsLmV4cG9ydERhdGEuYWxsRGF0YXNldHMnfSldXG4gICAgICAgICAgICAgICAgICAgIC5jb25jYXQoT2JqZWN0LmtleXMoZGF0YXNldHMpKVxuICAgICAgICAgICAgICAgICAgICAubWFwKGQgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24ga2V5PXtkfSB2YWx1ZT17ZH0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7KGRhdGFzZXRzW2RdICYmIGRhdGFzZXRzW2RdLmxhYmVsKSB8fCBkfVxuICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L1N0eWxlZEV4cG9ydFNlY3Rpb24+XG4gICAgICAgICAgICA8U3R5bGVkRXhwb3J0U2VjdGlvbj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkZXNjcmlwdGlvblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPXsnbW9kYWwuZXhwb3J0RGF0YS5kYXRhVHlwZVRpdGxlJ30gLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInN1YnRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD17J21vZGFsLmV4cG9ydERhdGEuZGF0YVR5cGVTdWJ0aXRsZSd9IC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNlbGVjdGlvblwiPlxuICAgICAgICAgICAgICAgIHtzdXBwb3J0ZWREYXRhVHlwZXMubWFwKG9wID0+IChcbiAgICAgICAgICAgICAgICAgIDxTdHlsZWRUeXBlXG4gICAgICAgICAgICAgICAgICAgIGtleT17b3AuaWR9XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkPXtkYXRhVHlwZSA9PT0gb3AuaWR9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9wLmF2YWlsYWJsZSAmJiBvbkNoYW5nZUV4cG9ydERhdGFUeXBlKG9wLmlkKX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPEZpbGVUeXBlIGV4dD17b3AubGFiZWx9IGhlaWdodD1cIjgwcHhcIiBmb250U2l6ZT1cIjExcHhcIiAvPlxuICAgICAgICAgICAgICAgICAgICB7ZGF0YVR5cGUgPT09IG9wLmlkICYmIDxDaGVja01hcmsgLz59XG4gICAgICAgICAgICAgICAgICA8L1N0eWxlZFR5cGU+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9TdHlsZWRFeHBvcnRTZWN0aW9uPlxuICAgICAgICAgICAgPFN0eWxlZEV4cG9ydFNlY3Rpb24+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZGVzY3JpcHRpb25cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD17J21vZGFsLmV4cG9ydERhdGEuZGF0YVR5cGVUaXRsZSd9IC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdWJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9eydtb2RhbC5leHBvcnREYXRhLmZpbHRlckRhdGFTdWJ0aXRsZSd9IC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNlbGVjdGlvblwiPlxuICAgICAgICAgICAgICAgIDxTdHlsZWRGaWx0ZXJlZE9wdGlvblxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidW5maWx0ZXJlZC1vcHRpb25cIlxuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ9eyFmaWx0ZXJlZH1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9uQ2hhbmdlRXhwb3J0RmlsdGVyZWQoZmFsc2UpfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmlsdGVyLW9wdGlvbi10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD17J21vZGFsLmV4cG9ydERhdGEudW5maWx0ZXJlZERhdGEnfSAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZpbHRlci1vcHRpb24tc3VidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAge2dldERhdGFSb3dDb3VudChkYXRhc2V0cywgc2VsZWN0ZWREYXRhc2V0LCBmYWxzZSwgaW50bCl9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIHshZmlsdGVyZWQgJiYgPENoZWNrTWFyayAvPn1cbiAgICAgICAgICAgICAgICA8L1N0eWxlZEZpbHRlcmVkT3B0aW9uPlxuICAgICAgICAgICAgICAgIDxTdHlsZWRGaWx0ZXJlZE9wdGlvblxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmlsdGVyZWQtb3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkPXtmaWx0ZXJlZH1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9uQ2hhbmdlRXhwb3J0RmlsdGVyZWQodHJ1ZSl9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmaWx0ZXItb3B0aW9uLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPXsnbW9kYWwuZXhwb3J0RGF0YS5maWx0ZXJlZERhdGEnfSAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZpbHRlci1vcHRpb24tc3VidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAge2dldERhdGFSb3dDb3VudChkYXRhc2V0cywgc2VsZWN0ZWREYXRhc2V0LCB0cnVlLCBpbnRsKX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAge2ZpbHRlcmVkICYmIDxDaGVja01hcmsgLz59XG4gICAgICAgICAgICAgICAgPC9TdHlsZWRGaWx0ZXJlZE9wdGlvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L1N0eWxlZEV4cG9ydFNlY3Rpb24+XG4gICAgICAgICAgICB7c2hvd1ZlY3RvclRpbGVXYXJuaW5nID8gKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRpdGxlXCI+XG4gICAgICAgICAgICAgICAgPFN0eWxlZFdhcm5pbmc+XG4gICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD17J21vZGFsLmV4cG9ydERhdGEudmVjdG9yVGlsZVdhcm5pbmcnfSAvPlxuICAgICAgICAgICAgICAgIDwvU3R5bGVkV2FybmluZz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9TdHlsZWRNb2RhbENvbnRlbnQ+XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpbmplY3RJbnRsKEV4cG9ydERhdGFNb2RhbCk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBFeHBvcnREYXRhTW9kYWxGYWN0b3J5O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFVBQUEsR0FBQUQsT0FBQTtBQUVBLElBQUFFLFVBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLGFBQUEsR0FBQUgsT0FBQTtBQUdB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