UNPKG

kepler.gl

Version:

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

164 lines (163 loc) 29.9 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"] = VisConfigSliderFactory; 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("react")); var _styledComponents = _interopRequireDefault(require("styled-components")); var _styledComponents2 = require("../../common/styled-components"); var _rangeSlider = _interopRequireDefault(require("../../common/range-slider")); var _localization = require("@kepler.gl/localization"); var _constants = require("@kepler.gl/constants"); var _ = require("../.."); var _utils = require("@kepler.gl/utils"); var _templateObject, _templateObject2, _templateObject3, _templateObject4; // 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 InputWrapper = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n line-height: 12px;\n margin-bottom: 12px;\n"]))); var CustomInputWrapper = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n"]))); var CustomInputLabel = _styledComponents["default"].label(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n font-weight: 500;\n letter-spacing: 0.2px;\n font-size: ", ";\n padding-right: 15px;\n\n &:last-child {\n position: absolute;\n right: 0;\n padding: 0;\n }\n"])), function (props) { return props.theme.textColor; }, function (props) { return props.theme.layerConfigGroupLabelLabelFontSize; }); var RangeInput = _styledComponents["default"].input(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n ", ";\n font-size: ", ";\n width: ", "px;\n overflow: auto;\n height: 20px;\n margin-top: 5px;\n"])), function (props) { return props.theme.input; }, function (props) { return props.theme.sliderInputFontSize; }, function (props) { return props.theme.customRangeInputWidth; }); var LazyInput = function LazyInput(_ref) { var value = _ref.value, onChange = _ref.onChange, name = _ref.name; var _useState = (0, _react.useState)(value), _useState2 = (0, _slicedToArray2["default"])(_useState, 2), stateValue = _useState2[0], setValue = _useState2[1]; var inputRef = (0, _react.useRef)(null); (0, _react.useEffect)(function () { setValue(value); }, [value]); var onKeyDown = (0, _react.useCallback)(function (e) { switch (e.keyCode) { case _constants.KeyEvent.DOM_VK_ENTER: case _constants.KeyEvent.DOM_VK_RETURN: onChange(name, stateValue); if (inputRef !== null) { // @ts-ignore inputRef === null || inputRef === void 0 || inputRef.current.blur(); } break; default: break; } }, [onChange, name, stateValue]); var _onChange = (0, _react.useCallback)(function (e) { return setValue(e.target.value); }, [setValue]); var onBlur = (0, _react.useCallback)(function () { return onChange(name, stateValue); }, [onChange, name, stateValue]); return /*#__PURE__*/_react["default"].createElement(RangeInput, { type: "number", ref: inputRef, value: stateValue, onChange: _onChange, onBlur: onBlur, onKeyDown: onKeyDown, id: name }); }; var CustomInput = function CustomInput(_ref2) { var isRanged = _ref2.isRanged, value = _ref2.value, onChangeCustomInput = _ref2.onChangeCustomInput; var onChangeInput = (0, _react.useCallback)(function (name, v) { var prevValue = isRanged ? name === 'value1' ? value[0] : value[1] : value; var valueAsNumber = Number(v); var convertedValue = typeof prevValue === 'number' ? isNaN(valueAsNumber) ? prevValue : valueAsNumber : v; if (isRanged) onChangeCustomInput(name === 'value0' ? [convertedValue, value[1]] : [value[0], convertedValue]);else onChangeCustomInput(convertedValue); }, [isRanged, value, onChangeCustomInput]); return /*#__PURE__*/_react["default"].createElement(CustomInputWrapper, null, isRanged ? /*#__PURE__*/_react["default"].createElement(InputWrapper, null, /*#__PURE__*/_react["default"].createElement(CustomInputLabel, null, "min", /*#__PURE__*/_react["default"].createElement(LazyInput, { name: "value0", value: value[0], onChange: onChangeInput })), /*#__PURE__*/_react["default"].createElement(CustomInputLabel, null, "max", /*#__PURE__*/_react["default"].createElement(LazyInput, { name: "value1", value: value[1], onChange: onChangeInput }))) : /*#__PURE__*/_react["default"].createElement(InputWrapper, null, /*#__PURE__*/_react["default"].createElement(LazyInput, { name: "value", value: value, onChange: onChangeInput }))); }; VisConfigSliderFactory.deps = [_rangeSlider["default"]]; function VisConfigSliderFactory(RangeSlider) { var VisConfigSlider = function VisConfigSlider(_ref3) { var config = _ref3.layer.config, property = _ref3.property, label = _ref3.label, range = _ref3.range, step = _ref3.step, isRanged = _ref3.isRanged, allowCustomValue = _ref3.allowCustomValue, disabled = _ref3.disabled, _onChange4 = _ref3.onChange, inputTheme = _ref3.inputTheme; var value = config.visConfig[property]; var _useState3 = (0, _react.useState)(false || !(0, _utils.isInRange)(value, range)), _useState4 = (0, _slicedToArray2["default"])(_useState3, 2), custom = _useState4[0], setCustom = _useState4[1]; var onChangeCheckbox = (0, _react.useCallback)(function () { if (custom) { // we are swithcing from custom to not custom // adjust value to range var adjustedValue = isRanged ? [(0, _utils.clamp)(range, value[0]), (0, _utils.clamp)(range, value[1])] : (0, _utils.clamp)(range, value); _onChange4((0, _defineProperty2["default"])({}, property, adjustedValue)); } setCustom(!custom); }, [_onChange4, property, isRanged, value, range, custom, setCustom]); return /*#__PURE__*/_react["default"].createElement(_styledComponents2.SidePanelSection, { disabled: Boolean(disabled) }, label ? /*#__PURE__*/_react["default"].createElement(_styledComponents2.PanelLabel, null, typeof label === 'string' ? /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, { id: label }) : typeof label === 'function' ? /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, { id: label(config) }) : /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, { id: "property.".concat(property) })) : null, allowCustomValue ? /*#__PURE__*/_react["default"].createElement(InputWrapper, null, /*#__PURE__*/_react["default"].createElement(CustomInputLabel, null, "custom input"), /*#__PURE__*/_react["default"].createElement(_.Checkbox, { id: "property.".concat(property), checked: custom, onChange: onChangeCheckbox })) : null, !custom ? /*#__PURE__*/_react["default"].createElement(RangeSlider, { range: range, value0: isRanged ? value[0] : range[0], value1: isRanged ? value[1] : value, step: step, isRanged: Boolean(isRanged), onChange: function onChange(v) { return _onChange4((0, _defineProperty2["default"])({}, property, isRanged ? v : v[1])); }, inputTheme: inputTheme, showInput: true }) : /*#__PURE__*/_react["default"].createElement(CustomInput, { isRanged: isRanged, value: value, onChangeCustomInput: function onChangeCustomInput(v) { return _onChange4((0, _defineProperty2["default"])({}, property, v)); } })); }; return VisConfigSlider; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfc3R5bGVkQ29tcG9uZW50czIiLCJfcmFuZ2VTbGlkZXIiLCJfbG9jYWxpemF0aW9uIiwiX2NvbnN0YW50cyIsIl8iLCJfdXRpbHMiLCJfdGVtcGxhdGVPYmplY3QiLCJfdGVtcGxhdGVPYmplY3QyIiwiX3RlbXBsYXRlT2JqZWN0MyIsIl90ZW1wbGF0ZU9iamVjdDQiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJJbnB1dFdyYXBwZXIiLCJzdHlsZWQiLCJkaXYiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsMiIsIkN1c3RvbUlucHV0V3JhcHBlciIsIkN1c3RvbUlucHV0TGFiZWwiLCJsYWJlbCIsInByb3BzIiwidGhlbWUiLCJ0ZXh0Q29sb3IiLCJsYXllckNvbmZpZ0dyb3VwTGFiZWxMYWJlbEZvbnRTaXplIiwiUmFuZ2VJbnB1dCIsImlucHV0Iiwic2xpZGVySW5wdXRGb250U2l6ZSIsImN1c3RvbVJhbmdlSW5wdXRXaWR0aCIsIkxhenlJbnB1dCIsIl9yZWYiLCJ2YWx1ZSIsIm9uQ2hhbmdlIiwibmFtZSIsIl91c2VTdGF0ZSIsInVzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5MiIsInN0YXRlVmFsdWUiLCJzZXRWYWx1ZSIsImlucHV0UmVmIiwidXNlUmVmIiwidXNlRWZmZWN0Iiwib25LZXlEb3duIiwidXNlQ2FsbGJhY2siLCJrZXlDb2RlIiwiS2V5RXZlbnQiLCJET01fVktfRU5URVIiLCJET01fVktfUkVUVVJOIiwiY3VycmVudCIsImJsdXIiLCJfb25DaGFuZ2UiLCJ0YXJnZXQiLCJvbkJsdXIiLCJjcmVhdGVFbGVtZW50IiwidHlwZSIsInJlZiIsImlkIiwiQ3VzdG9tSW5wdXQiLCJfcmVmMiIsImlzUmFuZ2VkIiwib25DaGFuZ2VDdXN0b21JbnB1dCIsIm9uQ2hhbmdlSW5wdXQiLCJ2IiwicHJldlZhbHVlIiwidmFsdWVBc051bWJlciIsIk51bWJlciIsImNvbnZlcnRlZFZhbHVlIiwiaXNOYU4iLCJWaXNDb25maWdTbGlkZXJGYWN0b3J5IiwiZGVwcyIsIlJhbmdlU2xpZGVyRmFjdG9yeSIsIlJhbmdlU2xpZGVyIiwiVmlzQ29uZmlnU2xpZGVyIiwiX3JlZjMiLCJjb25maWciLCJsYXllciIsInByb3BlcnR5IiwicmFuZ2UiLCJzdGVwIiwiYWxsb3dDdXN0b21WYWx1ZSIsImRpc2FibGVkIiwiaW5wdXRUaGVtZSIsInZpc0NvbmZpZyIsIl91c2VTdGF0ZTMiLCJpc0luUmFuZ2UiLCJfdXNlU3RhdGU0IiwiY3VzdG9tIiwic2V0Q3VzdG9tIiwib25DaGFuZ2VDaGVja2JveCIsImFkanVzdGVkVmFsdWUiLCJjbGFtcCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJTaWRlUGFuZWxTZWN0aW9uIiwiQm9vbGVhbiIsIlBhbmVsTGFiZWwiLCJGb3JtYXR0ZWRNZXNzYWdlIiwiY29uY2F0IiwiQ2hlY2tib3giLCJjaGVja2VkIiwidmFsdWUwIiwidmFsdWUxIiwic2hvd0lucHV0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NpZGUtcGFuZWwvbGF5ZXItcGFuZWwvdmlzLWNvbmZpZy1zbGlkZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCwge3VzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWZ9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuXG5pbXBvcnQge1BhbmVsTGFiZWwsIFNpZGVQYW5lbFNlY3Rpb259IGZyb20gJy4uLy4uL2NvbW1vbi9zdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQgUmFuZ2VTbGlkZXJGYWN0b3J5IGZyb20gJy4uLy4uL2NvbW1vbi9yYW5nZS1zbGlkZXInO1xuaW1wb3J0IHtGb3JtYXR0ZWRNZXNzYWdlfSBmcm9tICdAa2VwbGVyLmdsL2xvY2FsaXphdGlvbic7XG5pbXBvcnQge0tleUV2ZW50fSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge0NoZWNrYm94fSBmcm9tICcuLi8uLic7XG5pbXBvcnQge0xheWVyLCBMYXllckJhc2VDb25maWd9IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7aXNJblJhbmdlLCBjbGFtcH0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5cbnR5cGUgTGF6eUlucHV0UHJvcHMgPSB7XG4gIHZhbHVlOiBzdHJpbmcgfCBbc3RyaW5nLCBzdHJpbmddO1xuICBuYW1lOiBzdHJpbmc7XG4gIG9uQ2hhbmdlOiAobjogc3RyaW5nIHwgW3N0cmluZywgc3RyaW5nXSwgdj86IHN0cmluZyB8IFtzdHJpbmcsIHN0cmluZ10pID0+IHZvaWQ7XG59O1xuXG50eXBlIEN1c3RvbUlucHV0UHJvcHMgPSB7XG4gIHZhbHVlOiBzdHJpbmcgfCBbc3RyaW5nLCBzdHJpbmddO1xuICBpc1JhbmdlZDogYm9vbGVhbjtcbiAgb25DaGFuZ2VDdXN0b21JbnB1dDogKHY6IFtzdHJpbmcsIHN0cmluZ10pID0+IHZvaWQ7XG59O1xuXG50eXBlIFZpc0NvbmZpZ1NsaWRlclByb3BzID0ge1xuICBsYXllcjogTGF5ZXI7XG4gIHByb3BlcnR5OiBzdHJpbmc7XG4gIG9uQ2hhbmdlOiAodjogUmVjb3JkPHN0cmluZywgbnVtYmVyIHwgc3RyaW5nIHwgbnVtYmVyW10gfCBzdHJpbmdbXT4pID0+IHZvaWQ7XG4gIGxhYmVsPzogc3RyaW5nIHwgKChjOiBMYXllckJhc2VDb25maWcpID0+IHN0cmluZyk7XG4gIHJhbmdlOiBbbnVtYmVyLCBudW1iZXJdO1xuICBzdGVwPzogbnVtYmVyO1xuICBpc1JhbmdlZDogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBpbnB1dFRoZW1lPzogc3RyaW5nO1xuICBhbGxvd0N1c3RvbVZhbHVlPzogYm9vbGVhbjtcbn07XG5cbmNvbnN0IElucHV0V3JhcHBlciA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGxpbmUtaGVpZ2h0OiAxMnB4O1xuICBtYXJnaW4tYm90dG9tOiAxMnB4O1xuYDtcblxuY29uc3QgQ3VzdG9tSW5wdXRXcmFwcGVyID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbmA7XG5cbmNvbnN0IEN1c3RvbUlucHV0TGFiZWwgPSBzdHlsZWQubGFiZWxgXG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnRleHRDb2xvcn07XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGxldHRlci1zcGFjaW5nOiAwLjJweDtcbiAgZm9udC1zaXplOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmxheWVyQ29uZmlnR3JvdXBMYWJlbExhYmVsRm9udFNpemV9O1xuICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xuXG4gICY6bGFzdC1jaGlsZCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cbmA7XG5cbmNvbnN0IFJhbmdlSW5wdXQgPSBzdHlsZWQuaW5wdXRgXG4gICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuaW5wdXR9O1xuICBmb250LXNpemU6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc2xpZGVySW5wdXRGb250U2l6ZX07XG4gIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmN1c3RvbVJhbmdlSW5wdXRXaWR0aH1weDtcbiAgb3ZlcmZsb3c6IGF1dG87XG4gIGhlaWdodDogMjBweDtcbiAgbWFyZ2luLXRvcDogNXB4O1xuYDtcblxuY29uc3QgTGF6eUlucHV0OiBSZWFjdC5GQzxMYXp5SW5wdXRQcm9wcz4gPSAoe3ZhbHVlLCBvbkNoYW5nZSwgbmFtZX0pID0+IHtcbiAgY29uc3QgW3N0YXRlVmFsdWUsIHNldFZhbHVlXSA9IHVzZVN0YXRlKHZhbHVlKTtcbiAgY29uc3QgaW5wdXRSZWYgPSB1c2VSZWYobnVsbCk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0VmFsdWUodmFsdWUpO1xuICB9LCBbdmFsdWVdKTtcblxuICBjb25zdCBvbktleURvd24gPSB1c2VDYWxsYmFjayhcbiAgICBlID0+IHtcbiAgICAgIHN3aXRjaCAoZS5rZXlDb2RlKSB7XG4gICAgICAgIGNhc2UgS2V5RXZlbnQuRE9NX1ZLX0VOVEVSOlxuICAgICAgICBjYXNlIEtleUV2ZW50LkRPTV9WS19SRVRVUk46XG4gICAgICAgICAgb25DaGFuZ2UobmFtZSwgc3RhdGVWYWx1ZSk7XG4gICAgICAgICAgaWYgKGlucHV0UmVmICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBpbnB1dFJlZj8uY3VycmVudC5ibHVyKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0sXG4gICAgW29uQ2hhbmdlLCBuYW1lLCBzdGF0ZVZhbHVlXVxuICApO1xuXG4gIGNvbnN0IF9vbkNoYW5nZSA9IHVzZUNhbGxiYWNrKGUgPT4gc2V0VmFsdWUoZS50YXJnZXQudmFsdWUpLCBbc2V0VmFsdWVdKTtcbiAgY29uc3Qgb25CbHVyID0gdXNlQ2FsbGJhY2soKCkgPT4gb25DaGFuZ2UobmFtZSwgc3RhdGVWYWx1ZSksIFtvbkNoYW5nZSwgbmFtZSwgc3RhdGVWYWx1ZV0pO1xuXG4gIHJldHVybiAoXG4gICAgPFJhbmdlSW5wdXRcbiAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgcmVmPXtpbnB1dFJlZn1cbiAgICAgIHZhbHVlPXtzdGF0ZVZhbHVlfVxuICAgICAgb25DaGFuZ2U9e19vbkNoYW5nZX1cbiAgICAgIG9uQmx1cj17b25CbHVyfVxuICAgICAgb25LZXlEb3duPXtvbktleURvd259XG4gICAgICBpZD17bmFtZX1cbiAgICAvPlxuICApO1xufTtcblxuY29uc3QgQ3VzdG9tSW5wdXQ6IFJlYWN0LkZDPEN1c3RvbUlucHV0UHJvcHM+ID0gKHtpc1JhbmdlZCwgdmFsdWUsIG9uQ2hhbmdlQ3VzdG9tSW5wdXR9KSA9PiB7XG4gIGNvbnN0IG9uQ2hhbmdlSW5wdXQgPSB1c2VDYWxsYmFjayhcbiAgICAobmFtZSwgdikgPT4ge1xuICAgICAgY29uc3QgcHJldlZhbHVlID0gaXNSYW5nZWQgPyAobmFtZSA9PT0gJ3ZhbHVlMScgPyB2YWx1ZVswXSA6IHZhbHVlWzFdKSA6IHZhbHVlO1xuICAgICAgY29uc3QgdmFsdWVBc051bWJlciA9IE51bWJlcih2KTtcbiAgICAgIGNvbnN0IGNvbnZlcnRlZFZhbHVlID1cbiAgICAgICAgdHlwZW9mIHByZXZWYWx1ZSA9PT0gJ251bWJlcicgPyAoaXNOYU4odmFsdWVBc051bWJlcikgPyBwcmV2VmFsdWUgOiB2YWx1ZUFzTnVtYmVyKSA6IHY7XG4gICAgICBpZiAoaXNSYW5nZWQpXG4gICAgICAgIG9uQ2hhbmdlQ3VzdG9tSW5wdXQoXG4gICAgICAgICAgbmFtZSA9PT0gJ3ZhbHVlMCcgPyBbY29udmVydGVkVmFsdWUsIHZhbHVlWzFdXSA6IFt2YWx1ZVswXSwgY29udmVydGVkVmFsdWVdXG4gICAgICAgICk7XG4gICAgICBlbHNlIG9uQ2hhbmdlQ3VzdG9tSW5wdXQoY29udmVydGVkVmFsdWUpO1xuICAgIH0sXG4gICAgW2lzUmFuZ2VkLCB2YWx1ZSwgb25DaGFuZ2VDdXN0b21JbnB1dF1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxDdXN0b21JbnB1dFdyYXBwZXI+XG4gICAgICB7aXNSYW5nZWQgPyAoXG4gICAgICAgIDxJbnB1dFdyYXBwZXI+XG4gICAgICAgICAgPEN1c3RvbUlucHV0TGFiZWw+XG4gICAgICAgICAgICBtaW5cbiAgICAgICAgICAgIDxMYXp5SW5wdXQgbmFtZT1cInZhbHVlMFwiIHZhbHVlPXt2YWx1ZVswXX0gb25DaGFuZ2U9e29uQ2hhbmdlSW5wdXR9IC8+XG4gICAgICAgICAgPC9DdXN0b21JbnB1dExhYmVsPlxuICAgICAgICAgIDxDdXN0b21JbnB1dExhYmVsPlxuICAgICAgICAgICAgbWF4XG4gICAgICAgICAgICA8TGF6eUlucHV0IG5hbWU9XCJ2YWx1ZTFcIiB2YWx1ZT17dmFsdWVbMV19IG9uQ2hhbmdlPXtvbkNoYW5nZUlucHV0fSAvPlxuICAgICAgICAgIDwvQ3VzdG9tSW5wdXRMYWJlbD5cbiAgICAgICAgPC9JbnB1dFdyYXBwZXI+XG4gICAgICApIDogKFxuICAgICAgICA8SW5wdXRXcmFwcGVyPlxuICAgICAgICAgIDxMYXp5SW5wdXQgbmFtZT1cInZhbHVlXCIgdmFsdWU9e3ZhbHVlfSBvbkNoYW5nZT17b25DaGFuZ2VJbnB1dH0gLz5cbiAgICAgICAgPC9JbnB1dFdyYXBwZXI+XG4gICAgICApfVxuICAgIDwvQ3VzdG9tSW5wdXRXcmFwcGVyPlxuICApO1xufTtcblxuVmlzQ29uZmlnU2xpZGVyRmFjdG9yeS5kZXBzID0gW1JhbmdlU2xpZGVyRmFjdG9yeV07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFZpc0NvbmZpZ1NsaWRlckZhY3RvcnkoUmFuZ2VTbGlkZXI6IFJldHVyblR5cGU8dHlwZW9mIFJhbmdlU2xpZGVyRmFjdG9yeT4pIHtcbiAgY29uc3QgVmlzQ29uZmlnU2xpZGVyOiBSZWFjdC5GQzxWaXNDb25maWdTbGlkZXJQcm9wcz4gPSAoe1xuICAgIGxheWVyOiB7Y29uZmlnfSxcbiAgICBwcm9wZXJ0eSxcbiAgICBsYWJlbCxcbiAgICByYW5nZSxcbiAgICBzdGVwLFxuICAgIGlzUmFuZ2VkLFxuICAgIGFsbG93Q3VzdG9tVmFsdWUsXG4gICAgZGlzYWJsZWQsXG4gICAgb25DaGFuZ2UsXG4gICAgaW5wdXRUaGVtZVxuICB9KSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBjb25maWcudmlzQ29uZmlnW3Byb3BlcnR5XTtcbiAgICBjb25zdCBbY3VzdG9tLCBzZXRDdXN0b21dID0gdXNlU3RhdGUoZmFsc2UgfHwgIWlzSW5SYW5nZSh2YWx1ZSwgcmFuZ2UpKTtcblxuICAgIGNvbnN0IG9uQ2hhbmdlQ2hlY2tib3ggPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICBpZiAoY3VzdG9tKSB7XG4gICAgICAgIC8vIHdlIGFyZSBzd2l0aGNpbmcgZnJvbSBjdXN0b20gdG8gbm90IGN1c3RvbVxuICAgICAgICAvLyBhZGp1c3QgdmFsdWUgdG8gcmFuZ2VcbiAgICAgICAgY29uc3QgYWRqdXN0ZWRWYWx1ZSA9IGlzUmFuZ2VkXG4gICAgICAgICAgPyBbY2xhbXAocmFuZ2UsIHZhbHVlWzBdKSwgY2xhbXAocmFuZ2UsIHZhbHVlWzFdKV1cbiAgICAgICAgICA6IGNsYW1wKHJhbmdlLCB2YWx1ZSk7XG4gICAgICAgIG9uQ2hhbmdlKHtbcHJvcGVydHldOiBhZGp1c3RlZFZhbHVlfSk7XG4gICAgICB9XG4gICAgICBzZXRDdXN0b20oIWN1c3RvbSk7XG4gICAgfSwgW29uQ2hhbmdlLCBwcm9wZXJ0eSwgaXNSYW5nZWQsIHZhbHVlLCByYW5nZSwgY3VzdG9tLCBzZXRDdXN0b21dKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8U2lkZVBhbmVsU2VjdGlvbiBkaXNhYmxlZD17Qm9vbGVhbihkaXNhYmxlZCl9PlxuICAgICAgICB7bGFiZWwgPyAoXG4gICAgICAgICAgPFBhbmVsTGFiZWw+XG4gICAgICAgICAgICB7dHlwZW9mIGxhYmVsID09PSAnc3RyaW5nJyA/IChcbiAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9e2xhYmVsfSAvPlxuICAgICAgICAgICAgKSA6IHR5cGVvZiBsYWJlbCA9PT0gJ2Z1bmN0aW9uJyA/IChcbiAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9e2xhYmVsKGNvbmZpZyl9IC8+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD17YHByb3BlcnR5LiR7cHJvcGVydHl9YH0gLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9QYW5lbExhYmVsPlxuICAgICAgICApIDogbnVsbH1cblxuICAgICAgICB7YWxsb3dDdXN0b21WYWx1ZSA/IChcbiAgICAgICAgICA8SW5wdXRXcmFwcGVyPlxuICAgICAgICAgICAgPEN1c3RvbUlucHV0TGFiZWw+Y3VzdG9tIGlucHV0PC9DdXN0b21JbnB1dExhYmVsPlxuICAgICAgICAgICAgPENoZWNrYm94IGlkPXtgcHJvcGVydHkuJHtwcm9wZXJ0eX1gfSBjaGVja2VkPXtjdXN0b219IG9uQ2hhbmdlPXtvbkNoYW5nZUNoZWNrYm94fSAvPlxuICAgICAgICAgIDwvSW5wdXRXcmFwcGVyPlxuICAgICAgICApIDogbnVsbH1cblxuICAgICAgICB7IWN1c3RvbSA/IChcbiAgICAgICAgICA8UmFuZ2VTbGlkZXJcbiAgICAgICAgICAgIHJhbmdlPXtyYW5nZX1cbiAgICAgICAgICAgIHZhbHVlMD17aXNSYW5nZWQgPyB2YWx1ZVswXSA6IHJhbmdlWzBdfVxuICAgICAgICAgICAgdmFsdWUxPXtpc1JhbmdlZCA/IHZhbHVlWzFdIDogdmFsdWV9XG4gICAgICAgICAgICBzdGVwPXtzdGVwfVxuICAgICAgICAgICAgaXNSYW5nZWQ9e0Jvb2xlYW4oaXNSYW5nZWQpfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3YgPT4gb25DaGFuZ2Uoe1twcm9wZXJ0eV06IGlzUmFuZ2VkID8gdiA6IHZbMV19KX1cbiAgICAgICAgICAgIGlucHV0VGhlbWU9e2lucHV0VGhlbWV9XG4gICAgICAgICAgICBzaG93SW5wdXRcbiAgICAgICAgICAvPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxDdXN0b21JbnB1dFxuICAgICAgICAgICAgaXNSYW5nZWQ9e2lzUmFuZ2VkfVxuICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgb25DaGFuZ2VDdXN0b21JbnB1dD17diA9PiBvbkNoYW5nZSh7W3Byb3BlcnR5XTogdn0pfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICA8L1NpZGVQYW5lbFNlY3Rpb24+XG4gICAgKTtcbiAgfTtcblxuICByZXR1cm4gVmlzQ29uZmlnU2xpZGVyO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGlCQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFFQSxJQUFBRyxrQkFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksWUFBQSxHQUFBRixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUssYUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sVUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sQ0FBQSxHQUFBUCxPQUFBO0FBRUEsSUFBQVEsTUFBQSxHQUFBUixPQUFBO0FBQWtELElBQUFTLGVBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsZ0JBQUEsRUFabEQ7QUFDQTtBQUFBLFNBQUFDLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLHlCQUFBQyxDQUFBLFdBQUFBLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLEtBQUFGLENBQUE7QUFBQSxTQUFBZix3QkFBQWUsQ0FBQSxFQUFBRSxDQUFBLFNBQUFBLENBQUEsSUFBQUYsQ0FBQSxJQUFBQSxDQUFBLENBQUFJLFVBQUEsU0FBQUosQ0FBQSxlQUFBQSxDQUFBLGdCQUFBSyxPQUFBLENBQUFMLENBQUEsMEJBQUFBLENBQUEsc0JBQUFBLENBQUEsUUFBQUcsQ0FBQSxHQUFBSix3QkFB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