UNPKG

kepler.gl

Version:

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

149 lines (148 loc) 29 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 _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); 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 _classnames2 = _interopRequireDefault(require("classnames")); var _button = _interopRequireDefault(require("./button")); var _icons = require("../../common/icons"); var _src = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/constants/src"); var _optionDropdown = _interopRequireWildcard(require("./option-dropdown")); var _src2 = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/utils/src"); var _fieldToken = _interopRequireDefault(require("../../common/field-token")); var _templateObject; // 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 StyledHeaderCell = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n border-bottom: 1px solid ", ";\n border-top: 1px solid ", ";\n padding-top: ", "px;\n padding-right: 0;\n padding-bottom: ", "px;\n padding-left: ", "px;\n align-items: center;\n justify-content: space-between;\n display: flex;\n flex-direction: row;\n background-color: ", ";\n\n .n-sort-idx {\n font-size: 9px;\n }\n .details {\n font-weight: 500;\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n height: 100%;\n overflow: hidden;\n flex-grow: 1;\n\n .col-name {\n display: flex;\n align-items: center;\n justify-content: space-between;\n\n .col-name__left {\n display: flex;\n align-items: center;\n overflow: hidden;\n\n svg {\n margin-left: 6px;\n }\n }\n .col-name__name {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n }\n }\n\n .more {\n margin-left: 5px;\n }\n\n .col-name__format svg {\n width: 10px;\n height: 10px;\n stroke-width: 1;\n }\n"])), function (props) { return props.theme.headerCellBorderColor; }, function (props) { return props.theme.headerCellBorderColor; }, function (props) { return props.theme.headerPaddingTop; }, function (props) { return props.theme.headerPaddingBottom; }, function (props) { return props.theme.cellPaddingSide; }, function (props) { return props.theme.headerCellBackground; }); var HeaderCellFactory = function HeaderCellFactory(FieldToken) { var HeaderCell = function HeaderCell(_ref) { var _colMeta$column; var cellInfo = _ref.cellInfo, columns = _ref.columns, isPinned = _ref.isPinned, props = _ref.props, toggleMoreOptions = _ref.toggleMoreOptions, moreOptionsColumn = _ref.moreOptionsColumn; var columnIndex = cellInfo.columnIndex, key = cellInfo.key, style = cellInfo.style; var colMeta = props.colMeta, sortColumn = props.sortColumn, sortTableColumn = props.sortTableColumn, pinTableColumn = props.pinTableColumn, copyTableColumn = props.copyTableColumn, setColumnDisplayFormat = props.setColumnDisplayFormat; var _useState = (0, _react.useState)(false), _useState2 = (0, _slicedToArray2["default"])(_useState, 2), showFormatter = _useState2[0], setShowFormatter = _useState2[1]; var column = columns[columnIndex]; var isGhost = column.ghost; var isSorted = sortColumn[column]; var firstCell = columnIndex === 0; var isFormatted = Boolean((_colMeta$column = colMeta[column]) === null || _colMeta$column === void 0 ? void 0 : _colMeta$column.displayFormat); var formatLabels = isFormatted ? (0, _src2.getFieldFormatLabels)(colMeta[column].type) : []; var onSortTable = (0, _react.useCallback)(function () { return sortTableColumn === null || sortTableColumn === void 0 ? void 0 : sortTableColumn(column); }, [sortTableColumn, column]); var onToggleOptionMenu = (0, _react.useCallback)(function () { return toggleMoreOptions(column); }, [toggleMoreOptions, column]); var onPin = (0, _react.useCallback)(function () { return pinTableColumn(column); }, [pinTableColumn, column]); var onCopy = (0, _react.useCallback)(function () { return copyTableColumn(column); }, [copyTableColumn, column]); var onSetDisplayFormat = (0, _react.useCallback)(function (displayFormat) { setColumnDisplayFormat === null || setColumnDisplayFormat === void 0 || setColumnDisplayFormat((0, _defineProperty2["default"])({}, column, displayFormat.format)); }, [column, setColumnDisplayFormat]); var onToggleDisplayFormat = (0, _react.useCallback)(function () { setShowFormatter(!showFormatter); }, [showFormatter]); return /*#__PURE__*/_react["default"].createElement(StyledHeaderCell, { className: (0, _classnames2["default"])('header-cell', (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, "column-".concat(columnIndex), true), 'pinned-header-cell', isPinned), 'first-cell', firstCell)), key: key, style: style, onClick: function onClick(e) { e.shiftKey ? sortTableColumn(column) : null; }, onDoubleClick: onSortTable, title: column }, isGhost ? /*#__PURE__*/_react["default"].createElement("div", null) : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("section", { className: "details" }, /*#__PURE__*/_react["default"].createElement("div", { className: "col-name" }, /*#__PURE__*/_react["default"].createElement("div", { className: "col-name__left" }, /*#__PURE__*/_react["default"].createElement("div", { className: "col-name__name" }, colMeta[column].name), /*#__PURE__*/_react["default"].createElement(_button["default"], { className: "col-name__sort", onClick: onSortTable }, isSorted ? isSorted === _src.SORT_ORDER.ASCENDING ? /*#__PURE__*/_react["default"].createElement(_icons.ArrowUp, { height: "14px" }) : /*#__PURE__*/_react["default"].createElement(_icons.ArrowDown, { height: "14px" }) : null), /*#__PURE__*/_react["default"].createElement(_button["default"], { className: "col-name__format", onClick: onToggleDisplayFormat }, isFormatted ? /*#__PURE__*/_react["default"].createElement(_icons.Hash, { height: "14px" }) : null, /*#__PURE__*/_react["default"].createElement(_optionDropdown.FormatterDropdown, { left: 0, top: 0, isOpened: isFormatted && showFormatter, displayFormat: colMeta[column].displayFormat, setDisplayFormat: onSetDisplayFormat, onClose: function onClose() { return setShowFormatter(false); }, formatLabels: formatLabels }))), /*#__PURE__*/_react["default"].createElement(_button["default"], { className: "more", onClick: onToggleOptionMenu }, /*#__PURE__*/_react["default"].createElement(_icons.VertThreeDots, { height: "14px" }))), /*#__PURE__*/_react["default"].createElement(FieldToken, { type: colMeta[column].type })), /*#__PURE__*/_react["default"].createElement("section", { className: "options" }, /*#__PURE__*/_react["default"].createElement(_optionDropdown["default"], { isOpened: moreOptionsColumn === column, column: column, colMeta: colMeta, toggleMoreOptions: toggleMoreOptions, sortTableColumn: sortTableColumn ? function (mode) { return sortTableColumn(column, mode); } : undefined, pinTableColumn: onPin, copyTableColumn: onCopy, setDisplayFormat: setColumnDisplayFormat ? onSetDisplayFormat : undefined })))); }; return HeaderCell; }; HeaderCellFactory.deps = [_fieldToken["default"]]; var _default = exports["default"] = HeaderCellFactory; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfY2xhc3NuYW1lczIiLCJfYnV0dG9uIiwiX2ljb25zIiwiX3NyYyIsIl9vcHRpb25Ecm9wZG93biIsIl9zcmMyIiwiX2ZpZWxkVG9rZW4iLCJfdGVtcGxhdGVPYmplY3QiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJTdHlsZWRIZWFkZXJDZWxsIiwic3R5bGVkIiwiZGl2IiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbDIiLCJwcm9wcyIsInRoZW1lIiwiaGVhZGVyQ2VsbEJvcmRlckNvbG9yIiwiaGVhZGVyUGFkZGluZ1RvcCIsImhlYWRlclBhZGRpbmdCb3R0b20iLCJjZWxsUGFkZGluZ1NpZGUiLCJoZWFkZXJDZWxsQmFja2dyb3VuZCIsIkhlYWRlckNlbGxGYWN0b3J5IiwiRmllbGRUb2tlbiIsIkhlYWRlckNlbGwiLCJfcmVmIiwiX2NvbE1ldGEkY29sdW1uIiwiY2VsbEluZm8iLCJjb2x1bW5zIiwiaXNQaW5uZWQiLCJ0b2dnbGVNb3JlT3B0aW9ucyIsIm1vcmVPcHRpb25zQ29sdW1uIiwiY29sdW1uSW5kZXgiLCJrZXkiLCJzdHlsZSIsImNvbE1ldGEiLCJzb3J0Q29sdW1uIiwic29ydFRhYmxlQ29sdW1uIiwicGluVGFibGVDb2x1bW4iLCJjb3B5VGFibGVDb2x1bW4iLCJzZXRDb2x1bW5EaXNwbGF5Rm9ybWF0IiwiX3VzZVN0YXRlIiwidXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkyIiwic2hvd0Zvcm1hdHRlciIsInNldFNob3dGb3JtYXR0ZXIiLCJjb2x1bW4iLCJpc0dob3N0IiwiZ2hvc3QiLCJpc1NvcnRlZCIsImZpcnN0Q2VsbCIsImlzRm9ybWF0dGVkIiwiQm9vbGVhbiIsImRpc3BsYXlGb3JtYXQiLCJmb3JtYXRMYWJlbHMiLCJnZXRGaWVsZEZvcm1hdExhYmVscyIsInR5cGUiLCJvblNvcnRUYWJsZSIsInVzZUNhbGxiYWNrIiwib25Ub2dnbGVPcHRpb25NZW51Iiwib25QaW4iLCJvbkNvcHkiLCJvblNldERpc3BsYXlGb3JtYXQiLCJfZGVmaW5lUHJvcGVydHkyIiwiZm9ybWF0Iiwib25Ub2dnbGVEaXNwbGF5Rm9ybWF0IiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsImNsYXNzbmFtZXMiLCJjb25jYXQiLCJvbkNsaWNrIiwic2hpZnRLZXkiLCJvbkRvdWJsZUNsaWNrIiwidGl0bGUiLCJGcmFnbWVudCIsIm5hbWUiLCJTT1JUX09SREVSIiwiQVNDRU5ESU5HIiwiQXJyb3dVcCIsImhlaWdodCIsIkFycm93RG93biIsIkhhc2giLCJGb3JtYXR0ZXJEcm9wZG93biIsImxlZnQiLCJ0b3AiLCJpc09wZW5lZCIsInNldERpc3BsYXlGb3JtYXQiLCJvbkNsb3NlIiwiVmVydFRocmVlRG90cyIsIm1vZGUiLCJ1bmRlZmluZWQiLCJkZXBzIiwiRmllbGRUb2tlbkZhY3RvcnkiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9zcmMvY29tbW9uL2RhdGEtdGFibGUvaGVhZGVyLWNlbGwudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCwge0NTU1Byb3BlcnRpZXMsIHVzZVN0YXRlLCB1c2VDYWxsYmFja30gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBCdXR0b24gZnJvbSAnLi9idXR0b24nO1xuaW1wb3J0IHtBcnJvd1VwLCBBcnJvd0Rvd24sIFZlcnRUaHJlZURvdHMsIEhhc2h9IGZyb20gJy4uLy4uL2NvbW1vbi9pY29ucyc7XG5pbXBvcnQge1NPUlRfT1JERVJ9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCBPcHRpb25Ecm9wZG93biwge0Zvcm1hdHRlckRyb3Bkb3dufSBmcm9tICcuL29wdGlvbi1kcm9wZG93bic7XG5pbXBvcnQge2dldEZpZWxkRm9ybWF0TGFiZWxzfSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7Q29sTWV0YX0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQgRmllbGRUb2tlbkZhY3RvcnksIHtGaWVsZFRva2VuUHJvcHN9IGZyb20gJy4uLy4uL2NvbW1vbi9maWVsZC10b2tlbic7XG5pbXBvcnQge0RhdGFUYWJsZVByb3BzfSBmcm9tICcuL2luZGV4JztcblxuY29uc3QgU3R5bGVkSGVhZGVyQ2VsbCA9IHN0eWxlZC5kaXZgXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke3Byb3BzID0+IHByb3BzLnRoZW1lLmhlYWRlckNlbGxCb3JkZXJDb2xvcn07XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAke3Byb3BzID0+IHByb3BzLnRoZW1lLmhlYWRlckNlbGxCb3JkZXJDb2xvcn07XG4gIHBhZGRpbmctdG9wOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmhlYWRlclBhZGRpbmdUb3B9cHg7XG4gIHBhZGRpbmctcmlnaHQ6IDA7XG4gIHBhZGRpbmctYm90dG9tOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmhlYWRlclBhZGRpbmdCb3R0b219cHg7XG4gIHBhZGRpbmctbGVmdDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5jZWxsUGFkZGluZ1NpZGV9cHg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5oZWFkZXJDZWxsQmFja2dyb3VuZH07XG5cbiAgLm4tc29ydC1pZHgge1xuICAgIGZvbnQtc2l6ZTogOXB4O1xuICB9XG4gIC5kZXRhaWxzIHtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgZmxleC1ncm93OiAxO1xuXG4gICAgLmNvbC1uYW1lIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXG4gICAgICAuY29sLW5hbWVfX2xlZnQge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICAgICAgIHN2ZyB7XG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IDZweDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLmNvbC1uYW1lX19uYW1lIHtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLm1vcmUge1xuICAgIG1hcmdpbi1sZWZ0OiA1cHg7XG4gIH1cblxuICAuY29sLW5hbWVfX2Zvcm1hdCBzdmcge1xuICAgIHdpZHRoOiAxMHB4O1xuICAgIGhlaWdodDogMTBweDtcbiAgICBzdHJva2Utd2lkdGg6IDE7XG4gIH1cbmA7XG5cbnR5cGUgQ2VsbEluZm8gPSB7XG4gIGNvbHVtbkluZGV4OiBudW1iZXI7XG4gIGlzU2Nyb2xsaW5nOiBib29sZWFuO1xuICBpc1Zpc2libGU6IGJvb2xlYW47XG4gIGtleTogc3RyaW5nO1xuICBwYXJlbnQ6IGFueTtcbiAgcm93SW5kZXg6IG51bWJlcjtcbiAgc3R5bGU6IENTU1Byb3BlcnRpZXM7XG59O1xuXG50eXBlIEhlYWRlckNlbGxQcm9wcyA9IHtcbiAgLy8gcGFzc2VkIGRvd24gZnJvbSByZWFjdCB2aXJ0dWFsaXplZCBHcmlkXG4gIGNlbGxJbmZvOiBDZWxsSW5mbztcbiAgY29sdW1uczogRGF0YVRhYmxlUHJvcHNbJ2NvbHVtbnMnXTtcbiAgY29sTWV0YT86IENvbE1ldGE7XG4gIGlzUGlubmVkPzogYm9vbGVhbjtcbiAgc2hvd1N0YXRzPzogYm9vbGVhbjtcbiAgcHJvcHM6IERhdGFUYWJsZVByb3BzO1xuICB0b2dnbGVNb3JlT3B0aW9uczogKG1vcmVPcHRpb25zQ29sdW1uOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG1vcmVPcHRpb25zQ29sdW1uOiBudWxsIHwgc3RyaW5nO1xuICBzdHlsZTogQ1NTUHJvcGVydGllcztcbn07XG5cbmNvbnN0IEhlYWRlckNlbGxGYWN0b3J5ID0gKEZpZWxkVG9rZW46IFJlYWN0LkZDPEZpZWxkVG9rZW5Qcm9wcz4pID0+IHtcbiAgY29uc3QgSGVhZGVyQ2VsbCA9ICh7XG4gICAgY2VsbEluZm8sXG4gICAgY29sdW1ucyxcbiAgICBpc1Bpbm5lZCxcbiAgICBwcm9wcyxcbiAgICB0b2dnbGVNb3JlT3B0aW9ucyxcbiAgICBtb3JlT3B0aW9uc0NvbHVtblxuICB9OiBIZWFkZXJDZWxsUHJvcHMpID0+IHtcbiAgICBjb25zdCB7Y29sdW1uSW5kZXgsIGtleSwgc3R5bGV9ID0gY2VsbEluZm87XG4gICAgY29uc3Qge1xuICAgICAgY29sTWV0YSxcbiAgICAgIHNvcnRDb2x1bW4sXG4gICAgICBzb3J0VGFibGVDb2x1bW4sXG4gICAgICBwaW5UYWJsZUNvbHVtbixcbiAgICAgIGNvcHlUYWJsZUNvbHVtbixcbiAgICAgIHNldENvbHVtbkRpc3BsYXlGb3JtYXRcbiAgICB9ID0gcHJvcHM7XG4gICAgY29uc3QgW3Nob3dGb3JtYXR0ZXIsIHNldFNob3dGb3JtYXR0ZXJdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IGNvbHVtbiA9IGNvbHVtbnNbY29sdW1uSW5kZXhdO1xuXG4gICAgY29uc3QgaXNHaG9zdCA9IGNvbHVtbi5naG9zdDtcbiAgICBjb25zdCBpc1NvcnRlZCA9IHNvcnRDb2x1bW5bY29sdW1uXTtcbiAgICBjb25zdCBmaXJzdENlbGwgPSBjb2x1bW5JbmRleCA9PT0gMDtcbiAgICBjb25zdCBpc0Zvcm1hdHRlZCA9IEJvb2xlYW4oY29sTWV0YVtjb2x1bW5dPy5kaXNwbGF5Rm9ybWF0KTtcbiAgICBjb25zdCBmb3JtYXRMYWJlbHMgPSBpc0Zvcm1hdHRlZCA/IGdldEZpZWxkRm9ybWF0TGFiZWxzKGNvbE1ldGFbY29sdW1uXS50eXBlKSA6IFtdO1xuICAgIGNvbnN0IG9uU29ydFRhYmxlID0gdXNlQ2FsbGJhY2soKCkgPT4gc29ydFRhYmxlQ29sdW1uPy4oY29sdW1uKSwgW3NvcnRUYWJsZUNvbHVtbiwgY29sdW1uXSk7XG4gICAgY29uc3Qgb25Ub2dnbGVPcHRpb25NZW51ID0gdXNlQ2FsbGJhY2soXG4gICAgICAoKSA9PiB0b2dnbGVNb3JlT3B0aW9ucyhjb2x1bW4pLFxuICAgICAgW3RvZ2dsZU1vcmVPcHRpb25zLCBjb2x1bW5dXG4gICAgKTtcbiAgICBjb25zdCBvblBpbiA9IHVzZUNhbGxiYWNrKCgpID0+IHBpblRhYmxlQ29sdW1uKGNvbHVtbiksIFtwaW5UYWJsZUNvbHVtbiwgY29sdW1uXSk7XG4gICAgY29uc3Qgb25Db3B5ID0gdXNlQ2FsbGJhY2soKCkgPT4gY29weVRhYmxlQ29sdW1uKGNvbHVtbiksIFtjb3B5VGFibGVDb2x1bW4sIGNvbHVtbl0pO1xuICAgIGNvbnN0IG9uU2V0RGlzcGxheUZvcm1hdCA9IHVzZUNhbGxiYWNrKFxuICAgICAgZGlzcGxheUZvcm1hdCA9PiB7XG4gICAgICAgIHNldENvbHVtbkRpc3BsYXlGb3JtYXQ/Lih7W2NvbHVtbl06IGRpc3BsYXlGb3JtYXQuZm9ybWF0fSk7XG4gICAgICB9LFxuICAgICAgW2NvbHVtbiwgc2V0Q29sdW1uRGlzcGxheUZvcm1hdF1cbiAgICApO1xuXG4gICAgY29uc3Qgb25Ub2dnbGVEaXNwbGF5Rm9ybWF0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgc2V0U2hvd0Zvcm1hdHRlcighc2hvd0Zvcm1hdHRlcik7XG4gICAgfSwgW3Nob3dGb3JtYXR0ZXJdKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8U3R5bGVkSGVhZGVyQ2VsbFxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzbmFtZXMoJ2hlYWRlci1jZWxsJywge1xuICAgICAgICAgIFtgY29sdW1uLSR7Y29sdW1uSW5kZXh9YF06IHRydWUsXG4gICAgICAgICAgJ3Bpbm5lZC1oZWFkZXItY2VsbCc6IGlzUGlubmVkLFxuICAgICAgICAgICdmaXJzdC1jZWxsJzogZmlyc3RDZWxsXG4gICAgICAgIH0pfVxuICAgICAgICBrZXk9e2tleX1cbiAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICBvbkNsaWNrPXtlID0+IHtcbiAgICAgICAgICBlLnNoaWZ0S2V5ID8gc29ydFRhYmxlQ29sdW1uKGNvbHVtbikgOiBudWxsO1xuICAgICAgICB9fVxuICAgICAgICBvbkRvdWJsZUNsaWNrPXtvblNvcnRUYWJsZX1cbiAgICAgICAgdGl0bGU9e2NvbHVtbn1cbiAgICAgID5cbiAgICAgICAge2lzR2hvc3QgPyAoXG4gICAgICAgICAgPGRpdiAvPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJkZXRhaWxzXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW5hbWVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1uYW1lX19sZWZ0XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1uYW1lX19uYW1lXCI+e2NvbE1ldGFbY29sdW1uXS5uYW1lfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBjbGFzc05hbWU9XCJjb2wtbmFtZV9fc29ydFwiIG9uQ2xpY2s9e29uU29ydFRhYmxlfT5cbiAgICAgICAgICAgICAgICAgICAge2lzU29ydGVkID8gKFxuICAgICAgICAgICAgICAgICAgICAgIGlzU29ydGVkID09PSBTT1JUX09SREVSLkFTQ0VORElORyA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJvd1VwIGhlaWdodD1cIjE0cHhcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8QXJyb3dEb3duIGhlaWdodD1cIjE0cHhcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxCdXR0b24gY2xhc3NOYW1lPVwiY29sLW5hbWVfX2Zvcm1hdFwiIG9uQ2xpY2s9e29uVG9nZ2xlRGlzcGxheUZvcm1hdH0+XG4gICAgICAgICAgICAgICAgICAgIHtpc0Zvcm1hdHRlZCA/IDxIYXNoIGhlaWdodD1cIjE0cHhcIiAvPiA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZXJEcm9wZG93blxuICAgICAgICAgICAgICAgICAgICAgIGxlZnQ9ezB9XG4gICAgICAgICAgICAgICAgICAgICAgdG9wPXswfVxuICAgICAgICAgICAgICAgICAgICAgIGlzT3BlbmVkPXtpc0Zvcm1hdHRlZCAmJiBzaG93Rm9ybWF0dGVyfVxuICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlGb3JtYXQ9e2NvbE1ldGFbY29sdW1uXS5kaXNwbGF5Rm9ybWF0fVxuICAgICAgICAgICAgICAgICAgICAgIHNldERpc3BsYXlGb3JtYXQ9e29uU2V0RGlzcGxheUZvcm1hdH1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93Rm9ybWF0dGVyKGZhbHNlKX1cbiAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRMYWJlbHM9e2Zvcm1hdExhYmVsc31cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxCdXR0b24gY2xhc3NOYW1lPVwibW9yZVwiIG9uQ2xpY2s9e29uVG9nZ2xlT3B0aW9uTWVudX0+XG4gICAgICAgICAgICAgICAgICA8VmVydFRocmVlRG90cyBoZWlnaHQ9XCIxNHB4XCIgLz5cbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxGaWVsZFRva2VuIHR5cGU9e2NvbE1ldGFbY29sdW1uXS50eXBlfSAvPlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJvcHRpb25zXCI+XG4gICAgICAgICAgICAgIDxPcHRpb25Ecm9wZG93blxuICAgICAgICAgICAgICAgIGlzT3BlbmVkPXttb3JlT3B0aW9uc0NvbHVtbiA9PT0gY29sdW1ufVxuICAgICAgICAgICAgICAgIGNvbHVtbj17Y29sdW1ufVxuICAgICAgICAgICAgICAgIGNvbE1ldGE9e2NvbE1ldGF9XG4gICAgICAgICAgICAgICAgdG9nZ2xlTW9yZU9wdGlvbnM9e3RvZ2dsZU1vcmVPcHRpb25zfVxuICAgICAgICAgICAgICAgIHNvcnRUYWJsZUNvbHVtbj17XG4gICAgICAgICAgICAgICAgICBzb3J0VGFibGVDb2x1bW4gPyBtb2RlID0+IHNvcnRUYWJsZUNvbHVtbihjb2x1bW4sIG1vZGUpIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBpblRhYmxlQ29sdW1uPXtvblBpbn1cbiAgICAgICAgICAgICAgICBjb3B5VGFibGVDb2x1bW49e29uQ29weX1cbiAgICAgICAgICAgICAgICBzZXREaXNwbGF5Rm9ybWF0PXtzZXRDb2x1bW5EaXNwbGF5Rm9ybWF0ID8gb25TZXREaXNwbGF5Rm9ybWF0IDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgPC9TdHlsZWRIZWFkZXJDZWxsPlxuICAgICk7XG4gIH07XG4gIHJldHVybiBIZWFkZXJDZWxsO1xufTtcbkhlYWRlckNlbGxGYWN0b3J5LmRlcHMgPSBbRmllbGRUb2tlbkZhY3RvcnldO1xuZXhwb3J0IGRlZmF1bHQgSGVhZGVyQ2VsbEZhY3Rvcnk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsaUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLFlBQUEsR0FBQUQsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFJLE9BQUEsR0FBQUYsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFLLE1BQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLElBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLGVBQUEsR0FBQVIsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFRLEtBQUEsR0FBQVIsT0FBQTtBQUVBLElBQUFTLFdBQUEsR0FBQVAsc0JBQUEsQ0FBQUYsT0FBQTtBQUE0RSxJQUFBVSxlQUFBLEVBWjVFO0FBQ0E7QUFBQSxTQUFBQyx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFB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