UNPKG

kepler.gl

Version:

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

150 lines (149 loc) 31.5 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 _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral")); var _react = _interopRequireWildcard(require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/react")); var _styledComponents = _interopRequireDefault(require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/styled-components")); var _reactIntl = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/react-intl"); var _src = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/localization/src"); var _styledComponents2 = require("../../common/styled-components"); var _datasetTag = _interopRequireDefault(require("../common/dataset-tag")); var _tooltipChicklet = _interopRequireDefault(require("./tooltip-config/tooltip-chicklet")); var _switch = _interopRequireDefault(require("../../common/switch")); var _itemSelector = _interopRequireDefault(require("../../common/item-selector/item-selector")); var _src2 = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/constants/src"); var _fieldSelector = _interopRequireDefault(require("../../common/field-selector")); var _templateObject, _templateObject2, _templateObject3; // 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; } 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; } var TooltipConfigWrapper = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n .item-selector > div > div {\n overflow: visible;\n }\n"]))); var ButtonWrapper = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n display: inherit;\n padding: 0;\n\n .button.clear-all {\n background: transparent;\n color: ", ";\n margin: 0 0 0 8px;\n padding: 0;\n\n &:hover {\n color: ", ";\n }\n }\n"])), function (props) { return props.theme.subtextColor; }, function (props) { return props.theme.textColor; }); var CompareSwitchWrapper = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n display: flex;\n font-size: ", ";\n justify-content: space-between;\n line-height: 11px;\n margin-bottom: 8px;\n"])), function (props) { return props.theme.labelColor; }, function (props) { return props.theme.inputFontSize; }); TooltipConfigFactory.deps = [_datasetTag["default"], _fieldSelector["default"]]; function TooltipConfigFactory(DatasetTag, FieldSelector) { var DatasetTooltipConfig = function DatasetTooltipConfig(_ref) { var config = _ref.config, onChange = _ref.onChange, dataset = _ref.dataset, onDisplayFormatChange = _ref.onDisplayFormatChange; var dataId = dataset.id; var handleClick = (0, _react.useCallback)(function () { return onChange(_objectSpread(_objectSpread({}, config), {}, { fieldsToShow: _objectSpread(_objectSpread({}, config.fieldsToShow), {}, (0, _defineProperty2["default"])({}, dataId, [])) })); }, [config, dataId, onChange]); var findSelectedHelper = (0, _react.useCallback)(function (selected, tooltipFields) { return selected.map(function (f) { return tooltipFields.find(function (tooltipField) { return tooltipField.name === f.name; }) || { name: f.name, // default initial tooltip is null format: null }; }); }, []); var handleSelect = (0, _react.useCallback)(function (selected) { var newConfig = _objectSpread(_objectSpread({}, config), {}, { fieldsToShow: _objectSpread(_objectSpread({}, config.fieldsToShow), {}, (0, _defineProperty2["default"])({}, dataId, findSelectedHelper(selected, config.fieldsToShow[dataId]))) }); onChange(newConfig); }, [config, dataId, onChange, findSelectedHelper]); var handleReorderItems = (0, _react.useCallback)(function (newOrder) { return onChange(_objectSpread(_objectSpread({}, config), {}, { fieldsToShow: _objectSpread(_objectSpread({}, config.fieldsToShow), {}, (0, _defineProperty2["default"])({}, dataId, newOrder)) })); }, [config, dataId, onChange]); return /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, { key: dataId }, /*#__PURE__*/_react["default"].createElement(_styledComponents2.SBFlexboxNoMargin, null, /*#__PURE__*/_react["default"].createElement(DatasetTag, { dataset: dataset }), Boolean(config.fieldsToShow[dataId].length) && /*#__PURE__*/_react["default"].createElement(ButtonWrapper, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.Button, { className: "clear-all", onClick: handleClick, width: "54px", secondary: true }, /*#__PURE__*/_react["default"].createElement(_src.FormattedMessage, { id: "fieldSelector.clearAll" })))), /*#__PURE__*/_react["default"].createElement(FieldSelector, { fields: dataset.fields, value: config.fieldsToShow[dataId], onSelect: handleSelect, reorderItems: handleReorderItems, closeOnSelect: false, multiSelect: true, inputTheme: "secondary", CustomChickletComponent: (0, _tooltipChicklet["default"])(dataId, config, onChange, dataset.fields, onDisplayFormatChange) })); }; var TooltipConfig = function TooltipConfig(_ref2) { var config = _ref2.config, datasets = _ref2.datasets, _onChange = _ref2.onChange, onDisplayFormatChange = _ref2.onDisplayFormatChange, intl = _ref2.intl; var handleChange = (0, _react.useCallback)(function (option) { return _onChange(_objectSpread(_objectSpread({}, config), {}, { compareType: option })); }, [config, _onChange]); return /*#__PURE__*/_react["default"].createElement(TooltipConfigWrapper, null, Object.keys(config.fieldsToShow).map(function (dataId) { return dataId === _src2.GEOCODER_DATASET_NAME ? null : /*#__PURE__*/_react["default"].createElement(DatasetTooltipConfig, { key: dataId, config: config, onChange: _onChange, dataset: datasets[dataId], onDisplayFormatChange: onDisplayFormatChange }); }), /*#__PURE__*/_react["default"].createElement(CompareSwitchWrapper, null, /*#__PURE__*/_react["default"].createElement(_src.FormattedMessage, { id: "compare.modeLabel" }), /*#__PURE__*/_react["default"].createElement(_switch["default"], { checked: config.compareMode, id: "compare-mode-toggle", onChange: function onChange() { var newConfig = _objectSpread(_objectSpread({}, config), {}, { compareMode: !config.compareMode }); _onChange(newConfig); }, secondary: true })), /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, /*#__PURE__*/_react["default"].createElement(_src.FormattedMessage, { id: "compare.typeLabel" })), /*#__PURE__*/_react["default"].createElement(_itemSelector["default"], { disabled: !config.compareMode, displayOption: function displayOption(d) { return intl.formatMessage({ id: "compare.types.".concat(d) }); }, selectedItems: config.compareType, options: Object.values(_src2.COMPARE_TYPES), multiSelect: false, searchable: false, inputTheme: 'secondary', getOptionValue: function getOptionValue(d) { return d; }, onChange: handleChange }))); }; return (0, _reactIntl.injectIntl)(TooltipConfig); } var _default = exports["default"] = TooltipConfigFactory; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcmVhY3RJbnRsIiwiX3NyYyIsIl9zdHlsZWRDb21wb25lbnRzMiIsIl9kYXRhc2V0VGFnIiwiX3Rvb2x0aXBDaGlja2xldCIsIl9zd2l0Y2giLCJfaXRlbVNlbGVjdG9yIiwiX3NyYzIiLCJfZmllbGRTZWxlY3RvciIsIl90ZW1wbGF0ZU9iamVjdCIsIl90ZW1wbGF0ZU9iamVjdDIiLCJfdGVtcGxhdGVPYmplY3QzIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0Iiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiVG9vbHRpcENvbmZpZ1dyYXBwZXIiLCJzdHlsZWQiLCJkaXYiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsMiIsIkJ1dHRvbldyYXBwZXIiLCJwcm9wcyIsInRoZW1lIiwic3VidGV4dENvbG9yIiwidGV4dENvbG9yIiwiQ29tcGFyZVN3aXRjaFdyYXBwZXIiLCJsYWJlbENvbG9yIiwiaW5wdXRGb250U2l6ZSIsIlRvb2x0aXBDb25maWdGYWN0b3J5IiwiZGVwcyIsIkRhdGFzZXRUYWdGYWN0b3J5IiwiRmllbGRTZWxlY3RvckZhY3RvcnkiLCJEYXRhc2V0VGFnIiwiRmllbGRTZWxlY3RvciIsIkRhdGFzZXRUb29sdGlwQ29uZmlnIiwiX3JlZiIsImNvbmZpZyIsIm9uQ2hhbmdlIiwiZGF0YXNldCIsIm9uRGlzcGxheUZvcm1hdENoYW5nZSIsImRhdGFJZCIsImlkIiwiaGFuZGxlQ2xpY2siLCJ1c2VDYWxsYmFjayIsImZpZWxkc1RvU2hvdyIsImZpbmRTZWxlY3RlZEhlbHBlciIsInNlbGVjdGVkIiwidG9vbHRpcEZpZWxkcyIsIm1hcCIsImYiLCJmaW5kIiwidG9vbHRpcEZpZWxkIiwibmFtZSIsImZvcm1hdCIsImhhbmRsZVNlbGVjdCIsIm5ld0NvbmZpZyIsImhhbmRsZVJlb3JkZXJJdGVtcyIsIm5ld09yZGVyIiwiY3JlYXRlRWxlbWVudCIsIlNpZGVQYW5lbFNlY3Rpb24iLCJrZXkiLCJTQkZsZXhib3hOb01hcmdpbiIsIkJvb2xlYW4iLCJCdXR0b24iLCJjbGFzc05hbWUiLCJvbkNsaWNrIiwid2lkdGgiLCJzZWNvbmRhcnkiLCJGb3JtYXR0ZWRNZXNzYWdlIiwiZmllbGRzIiwidmFsdWUiLCJvblNlbGVjdCIsInJlb3JkZXJJdGVtcyIsImNsb3NlT25TZWxlY3QiLCJtdWx0aVNlbGVjdCIsImlucHV0VGhlbWUiLCJDdXN0b21DaGlja2xldENvbXBvbmVudCIsIlRvb2x0aXBDaGlja2xldEZhY3RvcnkiLCJUb29sdGlwQ29uZmlnIiwiX3JlZjIiLCJkYXRhc2V0cyIsImludGwiLCJoYW5kbGVDaGFuZ2UiLCJvcHRpb24iLCJjb21wYXJlVHlwZSIsIkdFT0NPREVSX0RBVEFTRVRfTkFNRSIsImNoZWNrZWQiLCJjb21wYXJlTW9kZSIsIlBhbmVsTGFiZWwiLCJkaXNhYmxlZCIsImRpc3BsYXlPcHRpb24iLCJkIiwiZm9ybWF0TWVzc2FnZSIsImNvbmNhdCIsInNlbGVjdGVkSXRlbXMiLCJvcHRpb25zIiwidmFsdWVzIiwiQ09NUEFSRV9UWVBFUyIsInNlYXJjaGFibGUiLCJnZXRPcHRpb25WYWx1ZSIsImluamVjdEludGwiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9zcmMvc2lkZS1wYW5lbC9pbnRlcmFjdGlvbi1wYW5lbC90b29sdGlwLWNvbmZpZy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IFJlYWN0LCB7dXNlQ2FsbGJhY2t9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtpbmplY3RJbnRsLCBJbnRsU2hhcGV9IGZyb20gJ3JlYWN0LWludGwnO1xuaW1wb3J0IHtGb3JtYXR0ZWRNZXNzYWdlfSBmcm9tICdAa2VwbGVyLmdsL2xvY2FsaXphdGlvbic7XG5cbmltcG9ydCB7XG4gIFNpZGVQYW5lbFNlY3Rpb24sXG4gIFNCRmxleGJveE5vTWFyZ2luLFxuICBCdXR0b24sXG4gIFBhbmVsTGFiZWxcbn0gZnJvbSAnLi4vLi4vY29tbW9uL3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCBEYXRhc2V0VGFnRmFjdG9yeSBmcm9tICcuLi9jb21tb24vZGF0YXNldC10YWcnO1xuaW1wb3J0IFRvb2x0aXBDaGlja2xldEZhY3RvcnkgZnJvbSAnLi90b29sdGlwLWNvbmZpZy90b29sdGlwLWNoaWNrbGV0JztcbmltcG9ydCBTd2l0Y2ggZnJvbSAnLi4vLi4vY29tbW9uL3N3aXRjaCc7XG5pbXBvcnQgSXRlbVNlbGVjdG9yIGZyb20gJy4uLy4uL2NvbW1vbi9pdGVtLXNlbGVjdG9yL2l0ZW0tc2VsZWN0b3InO1xuaW1wb3J0IHtDT01QQVJFX1RZUEVTLCBHRU9DT0RFUl9EQVRBU0VUX05BTUV9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCBGaWVsZFNlbGVjdG9yRmFjdG9yeSBmcm9tICcuLi8uLi9jb21tb24vZmllbGQtc2VsZWN0b3InO1xuaW1wb3J0IEtlcGxlclRhYmxlLCB7RGF0YXNldHN9IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuXG5jb25zdCBUb29sdGlwQ29uZmlnV3JhcHBlciA9IHN0eWxlZC5kaXZgXG4gIC5pdGVtLXNlbGVjdG9yID4gZGl2ID4gZGl2IHtcbiAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgfVxuYDtcblxuY29uc3QgQnV0dG9uV3JhcHBlciA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGluaGVyaXQ7XG4gIHBhZGRpbmc6IDA7XG5cbiAgLmJ1dHRvbi5jbGVhci1hbGwge1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnN1YnRleHRDb2xvcn07XG4gICAgbWFyZ2luOiAwIDAgMCA4cHg7XG4gICAgcGFkZGluZzogMDtcblxuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudGV4dENvbG9yfTtcbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IENvbXBhcmVTd2l0Y2hXcmFwcGVyID0gc3R5bGVkLmRpdmBcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUubGFiZWxDb2xvcn07XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZvbnQtc2l6ZTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pbnB1dEZvbnRTaXplfTtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBsaW5lLWhlaWdodDogMTFweDtcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xuYDtcblxudHlwZSBUb29sdGlwQ29uZmlnUHJvcHMgPSB7XG4gIGNvbmZpZzoge1xuICAgIGZpZWxkc1RvU2hvdzoge1xuICAgICAgW2tleTogc3RyaW5nXToge25hbWU6IHN0cmluZzsgZm9ybWF0OiBzdHJpbmcgfCBudWxsfVtdO1xuICAgIH07XG4gICAgY29tcGFyZU1vZGU6IGJvb2xlYW47XG4gICAgY29tcGFyZVR5cGU6IHN0cmluZyB8IG51bGw7XG4gIH07XG4gIG9uQ2hhbmdlOiAoY29uZmlnOiB7XG4gICAgZmllbGRzVG9TaG93OiB7XG4gICAgICBba2V5OiBzdHJpbmddOiB7bmFtZTogc3RyaW5nOyBmb3JtYXQ6IHN0cmluZyB8IG51bGx9W107XG4gICAgfTtcbiAgICBjb21wYXJlTW9kZTogYm9vbGVhbjtcbiAgICBjb21wYXJlVHlwZTogc3RyaW5nIHwgbnVsbDtcbiAgfSkgPT4gdm9pZDtcbiAgZGF0YXNldHM6IERhdGFzZXRzO1xuICBpbnRsOiBJbnRsU2hhcGU7XG4gIG9uRGlzcGxheUZvcm1hdENoYW5nZTogKGRhdGFJZCwgY29sdW1uLCBkaXNwbGF5Rm9ybWF0KSA9PiB2b2lkO1xufTtcblxudHlwZSBEYXRhc2V0VG9vbHRpcENvbmZpZ1Byb3BzID0ge1xuICBjb25maWc6IHtcbiAgICBmaWVsZHNUb1Nob3c6IHtcbiAgICAgIFtrZXk6IHN0cmluZ106IHtuYW1lOiBzdHJpbmc7IGZvcm1hdDogc3RyaW5nIHwgbnVsbH1bXTtcbiAgICB9O1xuICAgIGNvbXBhcmVNb2RlOiBib29sZWFuO1xuICAgIGNvbXBhcmVUeXBlOiBzdHJpbmcgfCBudWxsO1xuICB9O1xuICBvbkNoYW5nZTogKGNvbmZpZzoge1xuICAgIGZpZWxkc1RvU2hvdzoge1xuICAgICAgW2tleTogc3RyaW5nXToge25hbWU6IHN0cmluZzsgZm9ybWF0OiBzdHJpbmcgfCBudWxsfVtdO1xuICAgIH07XG4gICAgY29tcGFyZU1vZGU6IGJvb2xlYW47XG4gICAgY29tcGFyZVR5cGU6IHN0cmluZyB8IG51bGw7XG4gIH0pID0+IHZvaWQ7XG4gIGRhdGFzZXQ6IEtlcGxlclRhYmxlO1xuICBvbkRpc3BsYXlGb3JtYXRDaGFuZ2U6IChkYXRhSWQsIGNvbHVtbiwgZGlzcGxheUZvcm1hdCkgPT4gdm9pZDtcbn07XG5cblRvb2x0aXBDb25maWdGYWN0b3J5LmRlcHMgPSBbRGF0YXNldFRhZ0ZhY3RvcnksIEZpZWxkU2VsZWN0b3JGYWN0b3J5XTtcbmZ1bmN0aW9uIFRvb2x0aXBDb25maWdGYWN0b3J5KFxuICBEYXRhc2V0VGFnOiBSZXR1cm5UeXBlPHR5cGVvZiBEYXRhc2V0VGFnRmFjdG9yeT4sXG4gIEZpZWxkU2VsZWN0b3I6IFJldHVyblR5cGU8dHlwZW9mIEZpZWxkU2VsZWN0b3JGYWN0b3J5PlxuKSB7XG4gIGNvbnN0IERhdGFzZXRUb29sdGlwQ29uZmlnID0gKHtcbiAgICBjb25maWcsXG4gICAgb25DaGFuZ2UsXG4gICAgZGF0YXNldCxcbiAgICBvbkRpc3BsYXlGb3JtYXRDaGFuZ2VcbiAgfTogRGF0YXNldFRvb2x0aXBDb25maWdQcm9wcykgPT4ge1xuICAgIGNvbnN0IGRhdGFJZCA9IGRhdGFzZXQuaWQ7XG5cbiAgICBjb25zdCBoYW5kbGVDbGljayA9IHVzZUNhbGxiYWNrKFxuICAgICAgKCkgPT5cbiAgICAgICAgb25DaGFuZ2Uoe1xuICAgICAgICAgIC4uLmNvbmZpZyxcbiAgICAgICAgICBmaWVsZHNUb1Nob3c6IHtcbiAgICAgICAgICAgIC4uLmNvbmZpZy5maWVsZHNUb1Nob3csXG4gICAgICAgICAgICBbZGF0YUlkXTogW11cbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgW2NvbmZpZywgZGF0YUlkLCBvbkNoYW5nZV1cbiAgICApO1xuXG4gICAgY29uc3QgZmluZFNlbGVjdGVkSGVscGVyID0gdXNlQ2FsbGJhY2soKHNlbGVjdGVkLCB0b29sdGlwRmllbGRzKSA9PiB7XG4gICAgICByZXR1cm4gc2VsZWN0ZWQubWFwKFxuICAgICAgICBmID0+XG4gICAgICAgICAgdG9vbHRpcEZpZWxkcy5maW5kKHRvb2x0aXBGaWVsZCA9PiB0b29sdGlwRmllbGQubmFtZSA9PT0gZi5uYW1lKSB8fCB7XG4gICAgICAgICAgICBuYW1lOiBmLm5hbWUsXG4gICAgICAgICAgICAvLyBkZWZhdWx0IGluaXRpYWwgdG9vbHRpcCBpcyBudWxsXG4gICAgICAgICAgICBmb3JtYXQ6IG51bGxcbiAgICAgICAgICB9XG4gICAgICApO1xuICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IGhhbmRsZVNlbGVjdCA9IHVzZUNhbGxiYWNrKFxuICAgICAgc2VsZWN0ZWQgPT4ge1xuICAgICAgICBjb25zdCBuZXdDb25maWc6IERhdGFzZXRUb29sdGlwQ29uZmlnUHJvcHNbJ2NvbmZpZyddID0ge1xuICAgICAgICAgIC4uLmNvbmZpZyxcbiAgICAgICAgICBmaWVsZHNUb1Nob3c6IHtcbiAgICAgICAgICAgIC4uLmNvbmZpZy5maWVsZHNUb1Nob3csXG4gICAgICAgICAgICBbZGF0YUlkXTogZmluZFNlbGVjdGVkSGVscGVyKHNlbGVjdGVkLCBjb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF0pXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBvbkNoYW5nZShuZXdDb25maWcpO1xuICAgICAgfSxcbiAgICAgIFtjb25maWcsIGRhdGFJZCwgb25DaGFuZ2UsIGZpbmRTZWxlY3RlZEhlbHBlcl1cbiAgICApO1xuXG4gICAgY29uc3QgaGFuZGxlUmVvcmRlckl0ZW1zID0gdXNlQ2FsbGJhY2soXG4gICAgICBuZXdPcmRlciA9PlxuICAgICAgICBvbkNoYW5nZSh7XG4gICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgIGZpZWxkc1RvU2hvdzoge1xuICAgICAgICAgICAgLi4uY29uZmlnLmZpZWxkc1RvU2hvdyxcbiAgICAgICAgICAgIFtkYXRhSWRdOiBuZXdPcmRlclxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICBbY29uZmlnLCBkYXRhSWQsIG9uQ2hhbmdlXVxuICAgICk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTaWRlUGFuZWxTZWN0aW9uIGtleT17ZGF0YUlkfT5cbiAgICAgICAgPFNCRmxleGJveE5vTWFyZ2luPlxuICAgICAgICAgIDxEYXRhc2V0VGFnIGRhdGFzZXQ9e2RhdGFzZXR9IC8+XG4gICAgICAgICAge0Jvb2xlYW4oY29uZmlnLmZpZWxkc1RvU2hvd1tkYXRhSWRdLmxlbmd0aCkgJiYgKFxuICAgICAgICAgICAgPEJ1dHRvbldyYXBwZXI+XG4gICAgICAgICAgICAgIDxCdXR0b24gY2xhc3NOYW1lPVwiY2xlYXItYWxsXCIgb25DbGljaz17aGFuZGxlQ2xpY2t9IHdpZHRoPVwiNTRweFwiIHNlY29uZGFyeT5cbiAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImZpZWxkU2VsZWN0b3IuY2xlYXJBbGxcIiAvPlxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgIDwvQnV0dG9uV3JhcHBlcj5cbiAgICAgICAgICApfVxuICAgICAgICA8L1NCRmxleGJveE5vTWFyZ2luPlxuICAgICAgICA8RmllbGRTZWxlY3RvclxuICAgICAgICAgIGZpZWxkcz17ZGF0YXNldC5maWVsZHN9XG4gICAgICAgICAgdmFsdWU9e2NvbmZpZy5maWVsZHNUb1Nob3dbZGF0YUlkXX1cbiAgICAgICAgICBvblNlbGVjdD17aGFuZGxlU2VsZWN0fVxuICAgICAgICAgIHJlb3JkZXJJdGVtcz17aGFuZGxlUmVvcmRlckl0ZW1zfVxuICAgICAgICAgIGNsb3NlT25TZWxlY3Q9e2ZhbHNlfVxuICAgICAgICAgIG11bHRpU2VsZWN0XG4gICAgICAgICAgaW5wdXRUaGVtZT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgQ3VzdG9tQ2hpY2tsZXRDb21wb25lbnQ9e1Rvb2x0aXBDaGlja2xldEZhY3RvcnkoXG4gICAgICAgICAgICBkYXRhSWQsXG4gICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICBvbkNoYW5nZSxcbiAgICAgICAgICAgIGRhdGFzZXQuZmllbGRzLFxuICAgICAgICAgICAgb25EaXNwbGF5Rm9ybWF0Q2hhbmdlXG4gICAgICAgICAgKX1cbiAgICAgICAgLz5cbiAgICAgIDwvU2lkZVBhbmVsU2VjdGlvbj5cbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IFRvb2x0aXBDb25maWcgPSAoe1xuICAgIGNvbmZpZyxcbiAgICBkYXRhc2V0cyxcbiAgICBvbkNoYW5nZSxcbiAgICBvbkRpc3BsYXlGb3JtYXRDaGFuZ2UsXG4gICAgaW50bFxuICB9OiBUb29sdGlwQ29uZmlnUHJvcHMpID0+IHtcbiAgICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAgIChvcHRpb246IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBvYmplY3QgfCBudWxsKSA9PlxuICAgICAgICBvbkNoYW5nZSh7XG4gICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgIGNvbXBhcmVUeXBlOiBvcHRpb24gYXMgc3RyaW5nIHwgbnVsbFxuICAgICAgICB9KSxcbiAgICAgIFtjb25maWcsIG9uQ2hhbmdlXVxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFRvb2x0aXBDb25maWdXcmFwcGVyPlxuICAgICAgICB7T2JqZWN0LmtleXMoY29uZmlnLmZpZWxkc1RvU2hvdykubWFwKGRhdGFJZCA9PlxuICAgICAgICAgIGRhdGFJZCA9PT0gR0VPQ09ERVJfREFUQVNFVF9OQU1FID8gbnVsbCA6IChcbiAgICAgICAgICAgIDxEYXRhc2V0VG9vbHRpcENvbmZpZ1xuICAgICAgICAgICAgICBrZXk9e2RhdGFJZH1cbiAgICAgICAgICAgICAgY29uZmlnPXtjb25maWd9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cbiAgICAgICAgICAgICAgZGF0YXNldD17ZGF0YXNldHNbZGF0YUlkXX1cbiAgICAgICAgICAgICAgb25EaXNwbGF5Rm9ybWF0Q2hhbmdlPXtvbkRpc3BsYXlGb3JtYXRDaGFuZ2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIClcbiAgICAgICAgKX1cbiAgICAgICAgPENvbXBhcmVTd2l0Y2hXcmFwcGVyPlxuICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPVwiY29tcGFyZS5tb2RlTGFiZWxcIiAvPlxuICAgICAgICAgIDxTd2l0Y2hcbiAgICAgICAgICAgIGNoZWNrZWQ9e2NvbmZpZy5jb21wYXJlTW9kZX1cbiAgICAgICAgICAgIGlkPVwiY29tcGFyZS1tb2RlLXRvZ2dsZVwiXG4gICAgICAgICAgICBvbkNoYW5nZT17KCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBuZXdDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgICAgICAgIGNvbXBhcmVNb2RlOiAhY29uZmlnLmNvbXBhcmVNb2RlXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIG9uQ2hhbmdlKG5ld0NvbmZpZyk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgc2Vjb25kYXJ5XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9Db21wYXJlU3dpdGNoV3JhcHBlcj5cbiAgICAgICAgPFNpZGVQYW5lbFNlY3Rpb24+XG4gICAgICAgICAgPFBhbmVsTGFiZWw+XG4gICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbXBhcmUudHlwZUxhYmVsXCIgLz5cbiAgICAgICAgICA8L1BhbmVsTGFiZWw+XG4gICAgICAgICAgPEl0ZW1TZWxlY3RvclxuICAgICAgICAgICAgZGlzYWJsZWQ9eyFjb25maWcuY29tcGFyZU1vZGV9XG4gICAgICAgICAgICBkaXNwbGF5T3B0aW9uPXtkID0+XG4gICAgICAgICAgICAgIGludGwuZm9ybWF0TWVzc2FnZSh7XG4gICAgICAgICAgICAgICAgaWQ6IGBjb21wYXJlLnR5cGVzLiR7ZH1gXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1zPXtjb25maWcuY29tcGFyZVR5cGV9XG4gICAgICAgICAgICBvcHRpb25zPXtPYmplY3QudmFsdWVzKENPTVBBUkVfVFlQRVMpfVxuICAgICAgICAgICAgbXVsdGlTZWxlY3Q9e2ZhbHNlfVxuICAgICAgICAgICAgc2VhcmNoYWJsZT17ZmFsc2V9XG4gICAgICAgICAgICBpbnB1dFRoZW1lPXsnc2Vjb25kYXJ5J31cbiAgICAgICAgICAgIGdldE9wdGlvblZhbHVlPXtkID0+IGR9XG4gICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU2lkZVBhbmVsU2VjdGlvbj5cbiAgICAgIDwvVG9vbHRpcENvbmZpZ1dyYXBwZXI+XG4gICAgKTtcbiAgfTtcblxuICByZXR1cm4gaW5qZWN0SW50bChUb29sdGlwQ29uZmlnKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVG9vbHRpcENvbmZpZ0ZhY3Rvcnk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxpQkFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsVUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksSUFBQSxHQUFBSixPQUFBO0FBRUEsSUFBQUssa0JBQUEsR0FBQUwsT0FBQTtBQU1BLElBQUFNLFdBQUEsR0FBQUosc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFPLGdCQUFBLEdBQUFMLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBUSxPQUFBLEdBQUFOLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBUyxhQUFBLEdBQUFQLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBVSxLQUFBLEdBQUFWLE9BQUE7QUFDQSxJQUFBVyxjQUFBLEdBQUFULHNCQUFBLENBQUFGLE9BQUE7QUFBK0QsSUFBQVksZUFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQW5CL0Q7QUFDQTtBQUFBLFNBQUFDLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLHlCQUFBQyxDQUFBLFdBQUFBLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLEtBQUFGLENBQUE7QUFBQSxTQUFBakIsd0JBQUFpQixDQUFBLEVBQUFFLENBQUEsU0FBQUEsQ0FBQSxJQUFB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QUM7SUFBbUIsQ0FBRSxDQUFDLGVBQzNDN0UsTUFBQSxZQUFBOEYsYUFBQSxDQUFDcEYsT0FBQSxXQUFNO01BQ0xnSCxPQUFPLEVBQUVsRCxNQUFNLENBQUNtRCxXQUFZO01BQzVCOUMsRUFBRSxFQUFDLHFCQUFxQjtNQUN4QkosUUFBUSxFQUFFLFNBQVZBLFFBQVFBLENBQUEsRUFBUTtRQUNkLElBQU1rQixTQUFTLEdBQUE5QyxhQUFBLENBQUFBLGFBQUEsS0FDVjJCLE1BQU07VUFDVG1ELFdBQVcsRUFBRSxDQUFDbkQsTUFBTSxDQUFDbUQ7UUFBVyxFQUNqQztRQUNEbEQsU0FBUSxDQUFDa0IsU0FBUyxDQUFDO01BQ3JCLENBQUU7TUFDRlksU0FBUztJQUFBLENBQ1YsQ0FDbUIsQ0FBQyxlQUN2QnZHLE1BQUEsWUFBQThGLGFBQUEsQ0FBQ3ZGLGtCQUFBLENBQUF3RixnQkFBZ0IscUJBQ2YvRixNQUFBLFlBQUE4RixhQUFBLENBQUN2RixrQkFBQSxDQUFBcUgsVUFBVSxxQkFDVDVILE1BQUEsWUFBQThGLGFBQUEsQ0FBQ3hGLElBQUEsQ0FBQWtHLGdCQUFnQjtNQUFDM0IsRUFBRSxFQUFDO0lBQW1CLENBQUUsQ0FDaEMsQ0FBQyxlQUNiN0UsTUFBQSxZQUFBOEYsYUFBQSxDQUFDbkYsYUFBQSxXQUFZO01BQ1hrSCxRQUFRLEVBQUUsQ0FBQ3JELE1BQU0sQ0FBQ21ELFdBQVk7TUFDOUJHLGFBQWEsRUFBRSxTQUFmQSxhQUFhQSxDQUFFQyxDQUFDO1FBQUEsT0FDZFYsSUFBSSxDQUFDVyxhQUFhLENBQUM7VUFDakJuRCxFQUFFLG1CQUFBb0QsTUFBQSxDQUFtQkYsQ0FBQztRQUN4QixDQUFDLENBQUM7TUFBQSxDQUNIO01BQ0RHLGFBQWEsRUFBRTFELE1BQU0sQ0FBQ2dELFdBQVk7TUFDbENXLE9BQU8sRUFBRXRHLE1BQU0sQ0FBQ3VHLE1BQU0sQ0FBQ0MsbUJBQWEsQ0FBRTtNQUN0Q3ZCLFdBQVcsRUFBRSxLQUFNO01BQ25Cd0IsVUFBVSxFQUFFLEtBQU07TUFDbEJ2QixVQUFVLEVBQUUsV0FBWTtNQUN4QndCLGNBQWMsRUFBRSxTQUFoQkEsY0FBY0EsQ0FBRVIsQ0FBQztRQUFBLE9BQUlBLENBQUM7TUFBQSxDQUFDO01BQ3ZCdEQsUUFBUSxFQUFFNkM7SUFBYSxDQUN4QixDQUNlLENBQ0UsQ0FBQztFQUUzQixDQUFDO0VBRUQsT0FBTyxJQUFBa0IscUJBQVUsRUFBQ3RCLGFBQWEsQ0FBQztBQUNsQztBQUFDLElBQUF1QixRQUFBLEdBQUFDLE9BQUEsY0FFYzFFLG9CQUFvQiIsImlnbm9yZUxpc3QiOltdfQ==