kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
160 lines (158 loc) • 27.8 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = exports.FormatterDropdown = 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 _portaled = _interopRequireDefault(require("../portaled"));
var _dropdownList = _interopRequireDefault(require("../item-selector/dropdown-list"));
var _src = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/constants/src");
var _src2 = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/utils/src");
var _icons = require("../icons");
var _templateObject, _templateObject2; // 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 ListItem = function ListItem(_ref) {
var value = _ref.value;
return /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(value.icon, {
height: "13px"
}), value.display);
};
// make hash icon smaller
var StyledOptionsDropdown = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n .list-selector {\n border-top: 0;\n width: max-content;\n padding: 8px 0;\n }\n\n .list__item > div {\n display: flex;\n align-items: center;\n flex-direction: row;\n justify-content: flex-start;\n line-height: 18px;\n\n svg {\n margin-right: 5px;\n }\n\n .data-ex-icons-hash {\n width: 10px;\n height: 10px;\n stroke-width: 1px;\n margin-left: 2px;\n margin-right: 6px;\n }\n }\n"])));
var StyledPopover = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n width: 184px;\n height: 160px;\n z-index: 101;\n .list-selector {\n max-height: 160px;\n }\n .hover:after {\n content: '\\2713';\n margin-left: 5px;\n }\n"], ["\n width: 184px;\n height: 160px;\n z-index: 101;\n .list-selector {\n max-height: 160px;\n }\n .hover:after {\n content: '\\\\2713';\n margin-left: 5px;\n }\n"])));
var FormatterDropdown = exports.FormatterDropdown = function FormatterDropdown(props) {
var left = props.left,
top = props.top,
isOpened = props.isOpened,
_props$displayFormat = props.displayFormat,
displayFormat = _props$displayFormat === void 0 ? 'None' : _props$displayFormat,
setDisplayFormat = props.setDisplayFormat,
onClose = props.onClose,
formatLabels = props.formatLabels;
var selectionIndex = formatLabels.findIndex(function (label) {
return label.format === displayFormat;
});
var onSelectDisplayFormat = (0, _react.useCallback)(function (result) {
setDisplayFormat === null || setDisplayFormat === void 0 || setDisplayFormat(result);
onClose();
}, [setDisplayFormat, onClose]);
return /*#__PURE__*/_react["default"].createElement(_portaled["default"], {
left: left,
top: top,
isOpened: isOpened,
onClose: onClose
}, /*#__PURE__*/_react["default"].createElement(StyledPopover, {
className: "formatter-popover"
}, /*#__PURE__*/_react["default"].createElement(_dropdownList["default"], {
options: formatLabels,
selectionIndex: selectionIndex,
displayOption: function displayOption(option) {
return option.label;
},
onOptionSelected: onSelectDisplayFormat,
light: true
})));
};
var OptionDropdown = function OptionDropdown(props) {
var _colMeta$column;
var isOpened = props.isOpened,
column = props.column,
colMeta = props.colMeta,
toggleMoreOptions = props.toggleMoreOptions,
sortTableColumn = props.sortTableColumn,
pinTableColumn = props.pinTableColumn,
copyTableColumn = props.copyTableColumn,
setDisplayFormat = props.setDisplayFormat;
var _useState = (0, _react.useState)(false),
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
showFormatter = _useState2[0],
setShowFormatter = _useState2[1];
var onOptionSelected = (0, _react.useCallback)(function (_ref2) {
var value = _ref2.value;
switch (value) {
case _src.TABLE_OPTION.SORT_ASC:
sortTableColumn === null || sortTableColumn === void 0 || sortTableColumn(_src.SORT_ORDER.ASCENDING);
break;
case _src.TABLE_OPTION.SORT_DES:
sortTableColumn === null || sortTableColumn === void 0 || sortTableColumn(_src.SORT_ORDER.DESCENDING);
break;
case _src.TABLE_OPTION.UNSORT:
sortTableColumn === null || sortTableColumn === void 0 || sortTableColumn(_src.SORT_ORDER.UNSORT);
break;
case _src.TABLE_OPTION.PIN:
pinTableColumn();
break;
case _src.TABLE_OPTION.UNPIN:
pinTableColumn();
break;
case _src.TABLE_OPTION.COPY:
copyTableColumn();
break;
case _src.TABLE_OPTION.FORMAT_COLUMN:
setShowFormatter(true);
return;
default:
break;
}
toggleMoreOptions(column);
}, [column, sortTableColumn, pinTableColumn, copyTableColumn, toggleMoreOptions]);
var TABLE_OPTION_LIST_ICONS = {
Pin: _icons.Pin,
ArrowDown: _icons.ArrowDown,
ArrowUp: _icons.ArrowUp,
Clipboard: _icons.Clipboard,
Cancel: _icons.Cancel,
Hash: _icons.Hash
};
var formatLabels = (0, _src2.getFieldFormatLabels)(colMeta[column].type);
var options = _src.TABLE_OPTION_LIST.filter(function (op) {
// cant use conditions because it creates a circular dependency
// TODO: move condition clause out of default-settings TABLE_OPTION_LIST
var validToFormat = op.value !== _src.TABLE_OPTION.FORMAT_COLUMN || formatLabels.length;
return (!op.condition || op.condition(props)) && validToFormat;
}).map(function (op) {
return _objectSpread(_objectSpread({}, op), {}, {
icon: TABLE_OPTION_LIST_ICONS[op.icon]
});
});
var onClose = (0, _react.useCallback)(function () {
setShowFormatter(false);
toggleMoreOptions(column);
}, [column, toggleMoreOptions]);
return /*#__PURE__*/_react["default"].createElement(_portaled["default"], {
right: 120,
top: 20,
isOpened: isOpened,
onClose: onClose
}, /*#__PURE__*/_react["default"].createElement(StyledOptionsDropdown, {
className: "more-options"
}, /*#__PURE__*/_react["default"].createElement(_dropdownList["default"], {
displayOption: function displayOption(d) {
return d.display;
},
options: options,
customListItemComponent: ListItem,
onOptionSelected: onOptionSelected,
light: true
}), /*#__PURE__*/_react["default"].createElement(FormatterDropdown, {
left: 120,
top: -10,
isOpened: Boolean(isOpened && showFormatter),
formatLabels: formatLabels,
displayFormat: (_colMeta$column = colMeta[column]) === null || _colMeta$column === void 0 ? void 0 : _colMeta$column.displayFormat,
setDisplayFormat: setDisplayFormat,
onClose: onClose
})));
};
var _default = exports["default"] = OptionDropdown;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcG9ydGFsZWQiLCJfZHJvcGRvd25MaXN0IiwiX3NyYyIsIl9zcmMyIiwiX2ljb25zIiwiX3RlbXBsYXRlT2JqZWN0IiwiX3RlbXBsYXRlT2JqZWN0MiIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIkxpc3RJdGVtIiwiX3JlZiIsInZhbHVlIiwiY3JlYXRlRWxlbWVudCIsImljb24iLCJoZWlnaHQiLCJkaXNwbGF5IiwiU3R5bGVkT3B0aW9uc0Ryb3Bkb3duIiwic3R5bGVkIiwiZGl2IiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbDIiLCJTdHlsZWRQb3BvdmVyIiwiRm9ybWF0dGVyRHJvcGRvd24iLCJleHBvcnRzIiwicHJvcHMiLCJsZWZ0IiwidG9wIiwiaXNPcGVuZWQiLCJfcHJvcHMkZGlzcGxheUZvcm1hdCIsImRpc3BsYXlGb3JtYXQiLCJzZXREaXNwbGF5Rm9ybWF0Iiwib25DbG9zZSIsImZvcm1hdExhYmVscyIsInNlbGVjdGlvbkluZGV4IiwiZmluZEluZGV4IiwibGFiZWwiLCJmb3JtYXQiLCJvblNlbGVjdERpc3BsYXlGb3JtYXQiLCJ1c2VDYWxsYmFjayIsInJlc3VsdCIsImNsYXNzTmFtZSIsIm9wdGlvbnMiLCJkaXNwbGF5T3B0aW9uIiwib3B0aW9uIiwib25PcHRpb25TZWxlY3RlZCIsImxpZ2h0IiwiT3B0aW9uRHJvcGRvd24iLCJfY29sTWV0YSRjb2x1bW4iLCJjb2x1bW4iLCJjb2xNZXRhIiwidG9nZ2xlTW9yZU9wdGlvbnMiLCJzb3J0VGFibGVDb2x1bW4iLCJwaW5UYWJsZUNvbHVtbiIsImNvcHlUYWJsZUNvbHVtbiIsIl91c2VTdGF0ZSIsInVzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5MiIsInNob3dGb3JtYXR0ZXIiLCJzZXRTaG93Rm9ybWF0dGVyIiwiX3JlZjIiLCJUQUJMRV9PUFRJT04iLCJTT1JUX0FTQyIsIlNPUlRfT1JERVIiLCJBU0NFTkRJTkciLCJTT1JUX0RFUyIsIkRFU0NFTkRJTkciLCJVTlNPUlQiLCJQSU4iLCJVTlBJTiIsIkNPUFkiLCJGT1JNQVRfQ09MVU1OIiwiVEFCTEVfT1BUSU9OX0xJU1RfSUNPTlMiLCJQaW4iLCJBcnJvd0Rvd24iLCJBcnJvd1VwIiwiQ2xpcGJvYXJkIiwiQ2FuY2VsIiwiSGFzaCIsImdldEZpZWxkRm9ybWF0TGFiZWxzIiwidHlwZSIsIlRBQkxFX09QVElPTl9MSVNUIiwib3AiLCJ2YWxpZFRvRm9ybWF0IiwiY29uZGl0aW9uIiwibWFwIiwicmlnaHQiLCJkIiwiY3VzdG9tTGlzdEl0ZW1Db21wb25lbnQiLCJCb29sZWFuIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9zcmMvY29tbW9uL2RhdGEtdGFibGUvb3B0aW9uLWRyb3Bkb3duLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgUmVhY3QsIHt1c2VDYWxsYmFjaywgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IFBvcnRhbGVkIGZyb20gJy4uL3BvcnRhbGVkJztcbmltcG9ydCBEcm9wZG93bkxpc3QgZnJvbSAnLi4vaXRlbS1zZWxlY3Rvci9kcm9wZG93bi1saXN0JztcbmltcG9ydCB7XG4gIFNPUlRfT1JERVIsXG4gIFRBQkxFX09QVElPTixcbiAgVEFCTEVfT1BUSU9OX0xJU1QsXG4gIFRvb2x0aXBGb3JtYXQsXG4gIFRhYmxlT3B0aW9uXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7Z2V0RmllbGRGb3JtYXRMYWJlbHN9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtDb2xNZXRhfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7QXJyb3dEb3duLCBBcnJvd1VwLCBDbGlwYm9hcmQsIFBpbiwgQ2FuY2VsLCBIYXNofSBmcm9tICcuLi9pY29ucyc7XG5cbmNvbnN0IExpc3RJdGVtID0gKHt2YWx1ZX0pID0+IChcbiAgPGRpdj5cbiAgICA8dmFsdWUuaWNvbiBoZWlnaHQ9XCIxM3B4XCIgLz5cbiAgICB7dmFsdWUuZGlzcGxheX1cbiAgPC9kaXY+XG4pO1xuXG4vLyBtYWtlIGhhc2ggaWNvbiBzbWFsbGVyXG5jb25zdCBTdHlsZWRPcHRpb25zRHJvcGRvd24gPSBzdHlsZWQuZGl2YFxuICAubGlzdC1zZWxlY3RvciB7XG4gICAgYm9yZGVyLXRvcDogMDtcbiAgICB3aWR0aDogbWF4LWNvbnRlbnQ7XG4gICAgcGFkZGluZzogOHB4IDA7XG4gIH1cblxuICAubGlzdF9faXRlbSA+IGRpdiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAgIGxpbmUtaGVpZ2h0OiAxOHB4O1xuXG4gICAgc3ZnIHtcbiAgICAgIG1hcmdpbi1yaWdodDogNXB4O1xuICAgIH1cblxuICAgIC5kYXRhLWV4LWljb25zLWhhc2gge1xuICAgICAgd2lkdGg6IDEwcHg7XG4gICAgICBoZWlnaHQ6IDEwcHg7XG4gICAgICBzdHJva2Utd2lkdGg6IDFweDtcbiAgICAgIG1hcmdpbi1sZWZ0OiAycHg7XG4gICAgICBtYXJnaW4tcmlnaHQ6IDZweDtcbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFN0eWxlZFBvcG92ZXIgPSBzdHlsZWQuZGl2YFxuICB3aWR0aDogMTg0cHg7XG4gIGhlaWdodDogMTYwcHg7XG4gIHotaW5kZXg6IDEwMTtcbiAgLmxpc3Qtc2VsZWN0b3Ige1xuICAgIG1heC1oZWlnaHQ6IDE2MHB4O1xuICB9XG4gIC5ob3ZlcjphZnRlciB7XG4gICAgY29udGVudDogJ1xcXFwyNzEzJztcbiAgICBtYXJnaW4tbGVmdDogNXB4O1xuICB9XG5gO1xuXG5leHBvcnQgdHlwZSBGb3JtYXR0ZXJEcm9wZG93blByb3BzID0ge1xuICBsZWZ0OiBudW1iZXI7XG4gIHRvcDogbnVtYmVyO1xuICBpc09wZW5lZDogYm9vbGVhbjtcbiAgZGlzcGxheUZvcm1hdD86IHN0cmluZztcbiAgc2V0RGlzcGxheUZvcm1hdD86IChkaXNwbGF5Rm9ybWF0OiBUb29sdGlwRm9ybWF0KSA9PiB2b2lkO1xuICBvbkNsb3NlOiAoKSA9PiB2b2lkO1xuICBmb3JtYXRMYWJlbHM6IFRvb2x0aXBGb3JtYXRbXTtcbn07XG5cbmV4cG9ydCBjb25zdCBGb3JtYXR0ZXJEcm9wZG93bjogUmVhY3QuRkM8Rm9ybWF0dGVyRHJvcGRvd25Qcm9wcz4gPSAoXG4gIHByb3BzOiBGb3JtYXR0ZXJEcm9wZG93blByb3BzXG4pID0+IHtcbiAgY29uc3Qge1xuICAgIGxlZnQsXG4gICAgdG9wLFxuICAgIGlzT3BlbmVkLFxuICAgIGRpc3BsYXlGb3JtYXQgPSAnTm9uZScsXG4gICAgc2V0RGlzcGxheUZvcm1hdCxcbiAgICBvbkNsb3NlLFxuICAgIGZvcm1hdExhYmVsc1xuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHNlbGVjdGlvbkluZGV4ID0gZm9ybWF0TGFiZWxzLmZpbmRJbmRleChsYWJlbCA9PiBsYWJlbC5mb3JtYXQgPT09IGRpc3BsYXlGb3JtYXQpO1xuXG4gIGNvbnN0IG9uU2VsZWN0RGlzcGxheUZvcm1hdCA9IHVzZUNhbGxiYWNrKFxuICAgIHJlc3VsdCA9PiB7XG4gICAgICBzZXREaXNwbGF5Rm9ybWF0Py4ocmVzdWx0KTtcbiAgICAgIG9uQ2xvc2UoKTtcbiAgICB9LFxuICAgIFtzZXREaXNwbGF5Rm9ybWF0LCBvbkNsb3NlXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPFBvcnRhbGVkIGxlZnQ9e2xlZnR9IHRvcD17dG9wfSBpc09wZW5lZD17aXNPcGVuZWR9IG9uQ2xvc2U9e29uQ2xvc2V9PlxuICAgICAgPFN0eWxlZFBvcG92ZXIgY2xhc3NOYW1lPVwiZm9ybWF0dGVyLXBvcG92ZXJcIj5cbiAgICAgICAgPERyb3Bkb3duTGlzdFxuICAgICAgICAgIG9wdGlvbnM9e2Zvcm1hdExhYmVsc31cbiAgICAgICAgICBzZWxlY3Rpb25JbmRleD17c2VsZWN0aW9uSW5kZXh9XG4gICAgICAgICAgZGlzcGxheU9wdGlvbj17b3B0aW9uID0+IChvcHRpb24gYXMgVG9vbHRpcEZvcm1hdCkubGFiZWx9XG4gICAgICAgICAgb25PcHRpb25TZWxlY3RlZD17b25TZWxlY3REaXNwbGF5Rm9ybWF0fVxuICAgICAgICAgIGxpZ2h0XG4gICAgICAgIC8+XG4gICAgICA8L1N0eWxlZFBvcG92ZXI+XG4gICAgPC9Qb3J0YWxlZD5cbiAgKTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9uRHJvcGRvd25Qcm9wcyB7XG4gIGlzT3BlbmVkPzogYm9vbGVhbjtcbiAgY29sdW1uOiBzdHJpbmc7XG4gIGNvbE1ldGE6IENvbE1ldGE7XG4gIHRvZ2dsZU1vcmVPcHRpb25zOiAoY29sdW1uOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHNvcnRUYWJsZUNvbHVtbj86IChzb3J0OiBzdHJpbmcpID0+IHZvaWQ7XG4gIHBpblRhYmxlQ29sdW1uOiAoKSA9PiB2b2lkO1xuICBjb3B5VGFibGVDb2x1bW46ICgpID0+IHZvaWQ7XG4gIHNldERpc3BsYXlGb3JtYXQ/OiAoZGlzcGxheUZvcm1hdDogYW55KSA9PiB2b2lkO1xuICBzb3J0TW9kZT86IHN0cmluZztcbiAgaXNTb3J0ZWQ/OiBzdHJpbmc7XG4gIGlzUGlubmVkPzogYm9vbGVhbjtcbn1cblxuY29uc3QgT3B0aW9uRHJvcGRvd24gPSAocHJvcHM6IE9wdGlvbkRyb3Bkb3duUHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGlzT3BlbmVkLFxuICAgIGNvbHVtbixcbiAgICBjb2xNZXRhLFxuICAgIHRvZ2dsZU1vcmVPcHRpb25zLFxuICAgIHNvcnRUYWJsZUNvbHVtbixcbiAgICBwaW5UYWJsZUNvbHVtbixcbiAgICBjb3B5VGFibGVDb2x1bW4sXG4gICAgc2V0RGlzcGxheUZvcm1hdFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IFtzaG93Rm9ybWF0dGVyLCBzZXRTaG93Rm9ybWF0dGVyXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3Qgb25PcHRpb25TZWxlY3RlZDogKHY6IFRhYmxlT3B0aW9uKSA9PiB2b2lkID0gdXNlQ2FsbGJhY2soXG4gICAgKHt2YWx1ZX0pID0+IHtcbiAgICAgIHN3aXRjaCAodmFsdWUpIHtcbiAgICAgICAgY2FzZSBUQUJMRV9PUFRJT04uU09SVF9BU0M6XG4gICAgICAgICAgc29ydFRhYmxlQ29sdW1uPy4oU09SVF9PUkRFUi5BU0NFTkRJTkcpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFRBQkxFX09QVElPTi5TT1JUX0RFUzpcbiAgICAgICAgICBzb3J0VGFibGVDb2x1bW4/LihTT1JUX09SREVSLkRFU0NFTkRJTkcpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFRBQkxFX09QVElPTi5VTlNPUlQ6XG4gICAgICAgICAgc29ydFRhYmxlQ29sdW1uPy4oU09SVF9PUkRFUi5VTlNPUlQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFRBQkxFX09QVElPTi5QSU46XG4gICAgICAgICAgcGluVGFibGVDb2x1bW4oKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBUQUJMRV9PUFRJT04uVU5QSU46XG4gICAgICAgICAgcGluVGFibGVDb2x1bW4oKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBUQUJMRV9PUFRJT04uQ09QWTpcbiAgICAgICAgICBjb3B5VGFibGVDb2x1bW4oKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBUQUJMRV9PUFRJT04uRk9STUFUX0NPTFVNTjpcbiAgICAgICAgICBzZXRTaG93Rm9ybWF0dGVyKHRydWUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgdG9nZ2xlTW9yZU9wdGlvbnMoY29sdW1uKTtcbiAgICB9LFxuICAgIFtjb2x1bW4sIHNvcnRUYWJsZUNvbHVtbiwgcGluVGFibGVDb2x1bW4sIGNvcHlUYWJsZUNvbHVtbiwgdG9nZ2xlTW9yZU9wdGlvbnNdXG4gICk7XG5cbiAgY29uc3QgVEFCTEVfT1BUSU9OX0xJU1RfSUNPTlMgPSB7XG4gICAgUGluLFxuICAgIEFycm93RG93bixcbiAgICBBcnJvd1VwLFxuICAgIENsaXBib2FyZCxcbiAgICBDYW5jZWwsXG4gICAgSGFzaFxuICB9O1xuXG4gIGNvbnN0IGZvcm1hdExhYmVscyA9IGdldEZpZWxkRm9ybWF0TGFiZWxzKGNvbE1ldGFbY29sdW1uXS50eXBlKTtcbiAgY29uc3Qgb3B0aW9ucyA9IFRBQkxFX09QVElPTl9MSVNULmZpbHRlcihvcCA9PiB7XG4gICAgLy8gY2FudCB1c2UgY29uZGl0aW9ucyBiZWNhdXNlIGl0IGNyZWF0ZXMgYSBjaXJjdWxhciBkZXBlbmRlbmN5XG4gICAgLy8gVE9ETzogbW92ZSBjb25kaXRpb24gY2xhdXNlIG91dCBvZiBkZWZhdWx0LXNldHRpbmdzIFRBQkxFX09QVElPTl9MSVNUXG4gICAgY29uc3QgdmFsaWRUb0Zvcm1hdCA9IG9wLnZhbHVlICE9PSBUQUJMRV9PUFRJT04uRk9STUFUX0NPTFVNTiB8fCBmb3JtYXRMYWJlbHMubGVuZ3RoO1xuICAgIHJldHVybiAoIW9wLmNvbmRpdGlvbiB8fCBvcC5jb25kaXRpb24ocHJvcHMpKSAmJiB2YWxpZFRvRm9ybWF0O1xuICB9KS5tYXAob3AgPT4gKHtcbiAgICAuLi5vcCxcbiAgICBpY29uOiBUQUJMRV9PUFRJT05fTElTVF9JQ09OU1tvcC5pY29uXVxuICB9KSk7XG5cbiAgY29uc3Qgb25DbG9zZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRTaG93Rm9ybWF0dGVyKGZhbHNlKTtcbiAgICB0b2dnbGVNb3JlT3B0aW9ucyhjb2x1bW4pO1xuICB9LCBbY29sdW1uLCB0b2dnbGVNb3JlT3B0aW9uc10pO1xuXG4gIHJldHVybiAoXG4gICAgPFBvcnRhbGVkIHJpZ2h0PXsxMjB9IHRvcD17MjB9IGlzT3BlbmVkPXtpc09wZW5lZH0gb25DbG9zZT17b25DbG9zZX0+XG4gICAgICA8U3R5bGVkT3B0aW9uc0Ryb3Bkb3duIGNsYXNzTmFtZT1cIm1vcmUtb3B0aW9uc1wiPlxuICAgICAgICA8RHJvcGRvd25MaXN0XG4gICAgICAgICAgZGlzcGxheU9wdGlvbj17ZCA9PiAoZCBhcyBUYWJsZU9wdGlvbikuZGlzcGxheX1cbiAgICAgICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgICAgIGN1c3RvbUxpc3RJdGVtQ29tcG9uZW50PXtMaXN0SXRlbX1cbiAgICAgICAgICBvbk9wdGlvblNlbGVjdGVkPXtvbk9wdGlvblNlbGVjdGVkfVxuICAgICAgICAgIGxpZ2h0XG4gICAgICAgIC8+XG4gICAgICAgIDxGb3JtYXR0ZXJEcm9wZG93blxuICAgICAgICAgIGxlZnQ9ezEyMH1cbiAgICAgICAgICB0b3A9ey0xMH1cbiAgICAgICAgICBpc09wZW5lZD17Qm9vbGVhbihpc09wZW5lZCAmJiBzaG93Rm9ybWF0dGVyKX1cbiAgICAgICAgICBmb3JtYXRMYWJlbHM9e2Zvcm1hdExhYmVsc31cbiAgICAgICAgICBkaXNwbGF5Rm9ybWF0PXtjb2xNZXRhW2NvbHVtbl0/LmRpc3BsYXlGb3JtYXR9XG4gICAgICAgICAgc2V0RGlzcGxheUZvcm1hdD17c2V0RGlzcGxheUZvcm1hdH1cbiAgICAgICAgICBvbkNsb3NlPXtvbkNsb3NlfVxuICAgICAgICAvPlxuICAgICAgPC9TdHlsZWRPcHRpb25zRHJvcGRvd24+XG4gICAgPC9Qb3J0YWxlZD5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IE9wdGlvbkRyb3Bkb3duO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGlCQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxTQUFBLEdBQUFELHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBSSxhQUFBLEdBQUFGLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBSyxJQUFBLEdBQUFMLE9BQUE7QUFPQSxJQUFBTSxLQUFBLEdBQUFOLE9BQUE7QUFFQSxJQUFBTyxNQUFBLEdBQUFQLE9BQUE7QUFBMEUsSUFBQVEsZUFBQSxFQUFBQyxnQkFBQSxFQWhCMUU7QUFDQTtBQUFBLFNBQUFDLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLHlCQUFBQyxDQUFBLFdBQUFBLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLEtBQUFGLENBQUE7QUFBQSxTQUFBWix3QkFBQVksQ0FBQSxFQUFBRSxDQUFBLFNBQUFBLENBQUEsSUFBQUYsQ0FBQSxJQUFBQSxDQUFBLENBQUFJLFVBQUEs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
;