UNPKG

adui

Version:

<div> <img src="https://wxa.wxs.qq.com/mpweb/delivery/legacy/wxadtouch/upload/t1/od834zef_52939fc6.png" style="margin:40px 0 0 -8px; background-color: #fcfcfc; box-shadow: none;" /> </div>

273 lines (217 loc) 31.1 kB
"use strict"; function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _react = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _classnames = _interopRequireDefault(require("classnames")); var _input = _interopRequireDefault(require("../input")); var _icon = _interopRequireDefault(require("../icon")); require("./style"); var _core = require("./core"); var _excluded = ["className", "defaultValue", "disabled", "max", "min", "onBlur", "onChange", "onFocus", "onKeyDown", "precision", "step", "value"], _excluded2 = ["leftElement", "rightElement"], _excluded3 = ["leftElement", "rightElement"]; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; } function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } var prefix = "adui-numeric-input"; var NumericInput = (0, _react.forwardRef)(function (_ref, ref) { var className = _ref.className, defaultValue = _ref.defaultValue, disabled = _ref.disabled, max = _ref.max, min = _ref.min, onBlur = _ref.onBlur, onChange = _ref.onChange, onFocus = _ref.onFocus, onKeyDown = _ref.onKeyDown, precisionProp = _ref.precision, step = _ref.step, valueProp = _ref.value, otherProps = _objectWithoutProperties(_ref, _excluded); var precision = precisionProp === undefined ? (0, _core.getDecimalNumber)(step || 1) : precisionProp; var _useState = (0, _react.useState)(function () { var valueState = valueProp !== null ? valueProp : defaultValue; if (typeof valueState !== "number") { valueState = ""; } return valueState; }), _useState2 = _slicedToArray(_useState, 2), value = _useState2[0], setValue = _useState2[1]; var _useState3 = (0, _react.useState)(typeof value === "number" ? value.toFixed(precision) : ""), _useState4 = _slicedToArray(_useState3, 2), inputValue = _useState4[0], setInputValue = _useState4[1]; var inputRef = (0, _react.useRef)(null); if (valueProp !== null && value !== valueProp) { var _inputRef$current; setValue(typeof valueProp === "number" ? valueProp : ""); if (document.activeElement !== ((_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.input)) { setInputValue(typeof valueProp === "number" ? valueProp.toFixed(precision) : ""); } } (0, _react.useImperativeHandle)(ref, function () { return { current: inputRef.current }; }); var handleValueStepChange = function handleValueStepChange(type, stp, inputVal) { var val = (0, _core.stringToNumber)(inputVal); var decimal = (0, _core.getDecimalNumber)(stp); if (type === "plus") { return (val * Math.pow(10, decimal) + stp * Math.pow(10, decimal)) / Math.pow(10, decimal); } return (val * Math.pow(10, decimal) - stp * Math.pow(10, decimal)) / Math.pow(10, decimal); }; var handleButtonClick = function handleButtonClick(type) { var valueStepChanged = handleValueStepChange(type, step || 1, inputValue); if (min !== undefined && valueStepChanged < min) { valueStepChanged = min; } else if (max !== undefined && valueStepChanged > max) { valueStepChanged = max; } if (valueProp === null) { setValue(valueStepChanged); setInputValue(valueStepChanged.toFixed(precision)); } if (onChange) { onChange(valueStepChanged); } }; var handleInputChange = function handleInputChange(_ref2) { var val = _ref2.target.value; if ((0, _core.isLegal)(step || 1, val, min, max)) { if (valueProp === null) { setValue((0, _core.stringToNumber)(val)); } if (onChange) { onChange((0, _core.stringToNumber)(val)); } } if (valueProp === null) { setInputValue(val); } }; var handleInputBlur = function handleInputBlur(e) { var val = e.target.value; if (typeof value !== "number") { setInputValue(""); } else { var valueFixed = value.toFixed(precision); if (!(0, _core.isLegal)(step || 1, val, min, max) || val !== valueFixed) { setInputValue(valueFixed); } } if (onBlur) { onBlur(e); } }; var handleMouseDown = function handleMouseDown(type) { handleButtonClick(type); setTimeout(function () { if (inputRef.current && document.activeElement !== inputRef.current.input) { var input = inputRef.current.input; var end = input.value.length; input.setSelectionRange(end, end); input.focus(); } }, 100); }; var handleKeyDown = function handleKeyDown(e) { var key = e.key; if (key === "ArrowUp") { e.preventDefault(); e.stopPropagation(); handleButtonClick("plus"); } if (key === "ArrowDown") { e.preventDefault(); e.stopPropagation(); handleButtonClick("minus"); } }; return _react["default"].createElement(_input["default"], _extends({ className: (0, _classnames["default"])(className, "".concat(prefix), _defineProperty({}, "".concat(prefix, "-disabled"), disabled)), cleaveOptions: { numeral: true, numeralDecimalScale: precision, delimiter: "" }, disabled: disabled, onChange: handleInputChange, onBlur: handleInputBlur, onKeyDown: handleKeyDown, value: inputValue, ref: inputRef, rightElement: _react["default"].createElement("div", { className: "".concat(prefix, "-buttons") }, _react["default"].createElement("div", { className: "".concat(prefix, "-button"), onClick: function onClick() { return handleMouseDown("plus"); }, role: "none" }, _react["default"].createElement(_icon["default"], { icon: "arrow-up", interactive: !disabled, size: 12 })), _react["default"].createElement("div", { className: "".concat(prefix, "-button"), onClick: function onClick() { return handleMouseDown("minus"); }, role: "none" }, _react["default"].createElement(_icon["default"], { icon: "arrow-down", interactive: !disabled, size: 12 }))) }, otherProps)); }); NumericInput.displayName = "NumericInput"; NumericInput.propTypes = { defaultValue: _propTypes["default"].number, max: _propTypes["default"].number, min: _propTypes["default"].number, onChange: _propTypes["default"].func, precision: _propTypes["default"].number, step: _propTypes["default"].number, value: _propTypes["default"].number }; NumericInput.defaultProps = { defaultValue: null, max: undefined, min: undefined, onChange: function onChange() {}, precision: undefined, step: 1, value: null }; var MemoNumericInput = (0, _react.memo)(NumericInput, function (_ref3, _ref4) { var leftElementNext = _ref4.leftElement, rightElementNext = _ref4.rightElement, nextProps = _objectWithoutProperties(_ref4, _excluded2); var leftElement = _ref3.leftElement, rightElement = _ref3.rightElement, prevProps = _objectWithoutProperties(_ref3, _excluded3); return JSON.stringify(prevProps) === JSON.stringify(nextProps); }); MemoNumericInput.displayName = "NumericInput"; var _default = MemoNumericInput; exports["default"] = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwcmVmaXgiLCJOdW1lcmljSW5wdXQiLCJmb3J3YXJkUmVmIiwicmVmIiwiY2xhc3NOYW1lIiwiZGVmYXVsdFZhbHVlIiwiZGlzYWJsZWQiLCJtYXgiLCJtaW4iLCJvbkJsdXIiLCJvbkNoYW5nZSIsIm9uRm9jdXMiLCJvbktleURvd24iLCJwcmVjaXNpb25Qcm9wIiwicHJlY2lzaW9uIiwic3RlcCIsInZhbHVlUHJvcCIsInZhbHVlIiwib3RoZXJQcm9wcyIsInVuZGVmaW5lZCIsImdldERlY2ltYWxOdW1iZXIiLCJ1c2VTdGF0ZSIsInZhbHVlU3RhdGUiLCJzZXRWYWx1ZSIsInRvRml4ZWQiLCJpbnB1dFZhbHVlIiwic2V0SW5wdXRWYWx1ZSIsImlucHV0UmVmIiwidXNlUmVmIiwiZG9jdW1lbnQiLCJhY3RpdmVFbGVtZW50IiwiY3VycmVudCIsImlucHV0IiwidXNlSW1wZXJhdGl2ZUhhbmRsZSIsImhhbmRsZVZhbHVlU3RlcENoYW5nZSIsInR5cGUiLCJzdHAiLCJpbnB1dFZhbCIsInZhbCIsInN0cmluZ1RvTnVtYmVyIiwiZGVjaW1hbCIsImhhbmRsZUJ1dHRvbkNsaWNrIiwidmFsdWVTdGVwQ2hhbmdlZCIsImhhbmRsZUlucHV0Q2hhbmdlIiwidGFyZ2V0IiwiaXNMZWdhbCIsImhhbmRsZUlucHV0Qmx1ciIsImUiLCJ2YWx1ZUZpeGVkIiwiaGFuZGxlTW91c2VEb3duIiwic2V0VGltZW91dCIsImVuZCIsImxlbmd0aCIsInNldFNlbGVjdGlvblJhbmdlIiwiZm9jdXMiLCJoYW5kbGVLZXlEb3duIiwia2V5IiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJjbGFzc05hbWVzIiwibnVtZXJhbCIsIm51bWVyYWxEZWNpbWFsU2NhbGUiLCJkZWxpbWl0ZXIiLCJkaXNwbGF5TmFtZSIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsIm51bWJlciIsImZ1bmMiLCJkZWZhdWx0UHJvcHMiLCJNZW1vTnVtZXJpY0lucHV0IiwibWVtbyIsImxlZnRFbGVtZW50TmV4dCIsImxlZnRFbGVtZW50IiwicmlnaHRFbGVtZW50TmV4dCIsInJpZ2h0RWxlbWVudCIsIm5leHRQcm9wcyIsInByZXZQcm9wcyIsIkpTT04iLCJzdHJpbmdpZnkiXSwic291cmNlcyI6WyIuLi8uLi9jb21wb25lbnRzL251bWVyaWMtaW5wdXQvTnVtZXJpY0lucHV0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHtcbiAgZm9yd2FyZFJlZixcbiAgdXNlSW1wZXJhdGl2ZUhhbmRsZSxcbiAgdXNlUmVmLFxuICB1c2VTdGF0ZSxcbiAgbWVtbyxcbn0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSBcImNsYXNzbmFtZXNcIlxuaW1wb3J0IElucHV0LCB7IElJbnB1dFByb3BzLCBJSW5wdXRSZWYgfSBmcm9tIFwiLi4vaW5wdXRcIlxuaW1wb3J0IEljb24gZnJvbSBcIi4uL2ljb25cIlxuaW1wb3J0IFwiLi9zdHlsZVwiXG5pbXBvcnQgeyBpc0xlZ2FsLCBzdHJpbmdUb051bWJlciwgZ2V0RGVjaW1hbE51bWJlciB9IGZyb20gXCIuL2NvcmVcIlxuXG5jb25zdCBwcmVmaXggPSBcImFkdWktbnVtZXJpYy1pbnB1dFwiXG5cbmV4cG9ydCBpbnRlcmZhY2UgSU51bWVyaWNJbnB1dFByb3BzXG4gIGV4dGVuZHMgT21pdDxJSW5wdXRQcm9wcywgXCJkZWZhdWx0VmFsdWVcIiB8IFwib25DaGFuZ2VcIiB8IFwidmFsdWVcIj4ge1xuICBba2V5OiBzdHJpbmddOiBhbnlcbiAgLyoqXG4gICAqIOm7mOiupOeahOWIneWni+WAvCAtIOWGhemDqOmpseWKqFxuICAgKi9cbiAgZGVmYXVsdFZhbHVlPzogbnVtYmVyIHwgbnVsbFxuICAvKipcbiAgICog6K6+572u5pyA5aSn5YC8XG4gICAqL1xuICBtYXg/OiBudW1iZXJcbiAgLyoqXG4gICAqIOiuvue9ruacgOWwj+WAvFxuICAgKi9cbiAgbWluPzogbnVtYmVyXG4gIC8qKlxuICAgKiDlgLzmlLnlj5jml7bnmoQgaGFuZGxlclxuICAgKi9cbiAgb25DaGFuZ2U/OiAodmFsdWU/OiBudW1iZXIpID0+IHZvaWRcbiAgLyoqXG4gICAqIOiuvue9rueyvuW6plxuICAgKi9cbiAgcHJlY2lzaW9uPzogbnVtYmVyXG4gIC8qKlxuICAgKiDorr7nva7lop7liqDnmoTluYXluqZcbiAgICovXG4gIHN0ZXA/OiBudW1iZXJcbiAgLyoqXG4gICAqIOWAvCAtIOWklumDqOaOp+WItlxuICAgKi9cbiAgdmFsdWU/OiBudW1iZXIgfCBudWxsXG59XG5cbi8qKlxuICog5pWw5a2X6L6T5YWl5qGG44CCXG4gKi9cbmNvbnN0IE51bWVyaWNJbnB1dDogUmVhY3QuRm9yd2FyZFJlZkV4b3RpY0NvbXBvbmVudDxcbiAgSU51bWVyaWNJbnB1dFByb3BzICYgUmVhY3QuUmVmQXR0cmlidXRlczxhbnk+XG4+ID0gZm9yd2FyZFJlZihcbiAgKFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgIGRpc2FibGVkLFxuICAgICAgbWF4LFxuICAgICAgbWluLFxuICAgICAgb25CbHVyLFxuICAgICAgb25DaGFuZ2UsXG4gICAgICBvbkZvY3VzLFxuICAgICAgb25LZXlEb3duLFxuICAgICAgcHJlY2lzaW9uOiBwcmVjaXNpb25Qcm9wLFxuICAgICAgc3RlcCxcbiAgICAgIHZhbHVlOiB2YWx1ZVByb3AsXG4gICAgICAuLi5vdGhlclByb3BzXG4gICAgfTogSU51bWVyaWNJbnB1dFByb3BzLFxuICAgIHJlZlxuICApID0+IHtcbiAgICBjb25zdCBwcmVjaXNpb24gPVxuICAgICAgcHJlY2lzaW9uUHJvcCA9PT0gdW5kZWZpbmVkID8gZ2V0RGVjaW1hbE51bWJlcihzdGVwIHx8IDEpIDogcHJlY2lzaW9uUHJvcFxuXG4gICAgY29uc3QgW3ZhbHVlLCBzZXRWYWx1ZV0gPSB1c2VTdGF0ZTxudW1iZXIgfCBzdHJpbmc+KCgpID0+IHtcbiAgICAgIGxldCB2YWx1ZVN0YXRlOiBSZWFjdC5SZWFjdFRleHQgfCBudWxsIHwgdW5kZWZpbmVkID1cbiAgICAgICAgdmFsdWVQcm9wICE9PSBudWxsID8gdmFsdWVQcm9wIDogZGVmYXVsdFZhbHVlXG4gICAgICBpZiAodHlwZW9mIHZhbHVlU3RhdGUgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgdmFsdWVTdGF0ZSA9IFwiXCJcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZVN0YXRlXG4gICAgfSlcbiAgICBjb25zdCBbaW5wdXRWYWx1ZSwgc2V0SW5wdXRWYWx1ZV0gPSB1c2VTdGF0ZTxzdHJpbmc+KFxuICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiID8gdmFsdWUudG9GaXhlZChwcmVjaXNpb24pIDogXCJcIlxuICAgIClcbiAgICBjb25zdCBpbnB1dFJlZiA9IHVzZVJlZjxJSW5wdXRSZWY+KG51bGwpXG5cbiAgICAvLyDnm7jlvZPkuo7nlJ/lkb3lkajmnJ8gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzXG4gICAgaWYgKHZhbHVlUHJvcCAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdmFsdWVQcm9wKSB7XG4gICAgICBzZXRWYWx1ZSh0eXBlb2YgdmFsdWVQcm9wID09PSBcIm51bWJlclwiID8gdmFsdWVQcm9wIDogXCJcIilcbiAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSBpbnB1dFJlZi5jdXJyZW50Py5pbnB1dCkge1xuICAgICAgICBzZXRJbnB1dFZhbHVlKFxuICAgICAgICAgIHR5cGVvZiB2YWx1ZVByb3AgPT09IFwibnVtYmVyXCIgPyB2YWx1ZVByb3AudG9GaXhlZChwcmVjaXNpb24pIDogXCJcIlxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+ICh7XG4gICAgICBjdXJyZW50OiBpbnB1dFJlZi5jdXJyZW50LFxuICAgIH0pKVxuXG4gICAgY29uc3QgaGFuZGxlVmFsdWVTdGVwQ2hhbmdlID0gKFxuICAgICAgdHlwZTogXCJwbHVzXCIgfCBcIm1pbnVzXCIsXG4gICAgICBzdHA6IG51bWJlcixcbiAgICAgIGlucHV0VmFsPzogc3RyaW5nXG4gICAgKSA9PiB7XG4gICAgICAvLyDlsIYgaW5wdXRWYWwg6L2s5oiQ5pWw5a2X77yM5aaC5p6c5piv56m65a2X56ym5Liy77yM5YiZ6K6k5Li65LuOIDAg5byA5aeL5Yqg5YePXG4gICAgICBjb25zdCB2YWwgPSBzdHJpbmdUb051bWJlcihpbnB1dFZhbClcbiAgICAgIGNvbnN0IGRlY2ltYWwgPSBnZXREZWNpbWFsTnVtYmVyKHN0cClcbiAgICAgIGlmICh0eXBlID09PSBcInBsdXNcIikge1xuICAgICAgICByZXR1cm4gKHZhbCAqIDEwICoqIGRlY2ltYWwgKyBzdHAgKiAxMCAqKiBkZWNpbWFsKSAvIDEwICoqIGRlY2ltYWxcbiAgICAgIH1cbiAgICAgIHJldHVybiAodmFsICogMTAgKiogZGVjaW1hbCAtIHN0cCAqIDEwICoqIGRlY2ltYWwpIC8gMTAgKiogZGVjaW1hbFxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZUJ1dHRvbkNsaWNrID0gKHR5cGU6IFwicGx1c1wiIHwgXCJtaW51c1wiKSA9PiB7XG4gICAgICBsZXQgdmFsdWVTdGVwQ2hhbmdlZCA9IGhhbmRsZVZhbHVlU3RlcENoYW5nZSh0eXBlLCBzdGVwIHx8IDEsIGlucHV0VmFsdWUpXG4gICAgICBpZiAobWluICE9PSB1bmRlZmluZWQgJiYgdmFsdWVTdGVwQ2hhbmdlZCA8IG1pbikge1xuICAgICAgICB2YWx1ZVN0ZXBDaGFuZ2VkID0gbWluXG4gICAgICB9IGVsc2UgaWYgKG1heCAhPT0gdW5kZWZpbmVkICYmIHZhbHVlU3RlcENoYW5nZWQgPiBtYXgpIHtcbiAgICAgICAgdmFsdWVTdGVwQ2hhbmdlZCA9IG1heFxuICAgICAgfVxuICAgICAgaWYgKHZhbHVlUHJvcCA9PT0gbnVsbCkge1xuICAgICAgICBzZXRWYWx1ZSh2YWx1ZVN0ZXBDaGFuZ2VkKVxuICAgICAgICBzZXRJbnB1dFZhbHVlKHZhbHVlU3RlcENoYW5nZWQudG9GaXhlZChwcmVjaXNpb24pKVxuICAgICAgfVxuICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgIG9uQ2hhbmdlKHZhbHVlU3RlcENoYW5nZWQpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlSW5wdXRDaGFuZ2UgPSAoe1xuICAgICAgdGFyZ2V0OiB7IHZhbHVlOiB2YWwgfSxcbiAgICB9OiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKGlzTGVnYWwoc3RlcCB8fCAxLCB2YWwsIG1pbiwgbWF4KSkge1xuICAgICAgICBpZiAodmFsdWVQcm9wID09PSBudWxsKSB7XG4gICAgICAgICAgc2V0VmFsdWUoc3RyaW5nVG9OdW1iZXIodmFsKSlcbiAgICAgICAgfVxuICAgICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgICBvbkNoYW5nZShzdHJpbmdUb051bWJlcih2YWwpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodmFsdWVQcm9wID09PSBudWxsKSB7XG4gICAgICAgIHNldElucHV0VmFsdWUodmFsKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZUlucHV0Qmx1ciA9IChlOiBSZWFjdC5Gb2N1c0V2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHRhcmdldDogeyB2YWx1ZTogdmFsIH0sXG4gICAgICB9ID0gZVxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICBzZXRJbnB1dFZhbHVlKFwiXCIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB2YWx1ZUZpeGVkID0gdmFsdWUudG9GaXhlZChwcmVjaXNpb24pXG4gICAgICAgIGlmICghaXNMZWdhbChzdGVwIHx8IDEsIHZhbCwgbWluLCBtYXgpIHx8IHZhbCAhPT0gdmFsdWVGaXhlZCkge1xuICAgICAgICAgIHNldElucHV0VmFsdWUodmFsdWVGaXhlZClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG9uQmx1cikge1xuICAgICAgICBvbkJsdXIoZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBoYW5kbGVNb3VzZURvd24gPSAodHlwZTogXCJwbHVzXCIgfCBcIm1pbnVzXCIpID0+IHtcbiAgICAgIGhhbmRsZUJ1dHRvbkNsaWNrKHR5cGUpXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGlucHV0UmVmLmN1cnJlbnQgJiZcbiAgICAgICAgICBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSBpbnB1dFJlZi5jdXJyZW50LmlucHV0XG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IHsgaW5wdXQgfSA9IGlucHV0UmVmLmN1cnJlbnRcbiAgICAgICAgICBjb25zdCBlbmQgPSBpbnB1dC52YWx1ZS5sZW5ndGhcbiAgICAgICAgICBpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZShlbmQsIGVuZClcbiAgICAgICAgICBpbnB1dC5mb2N1cygpXG4gICAgICAgIH1cbiAgICAgIH0sIDEwMClcbiAgICB9XG5cbiAgICBjb25zdCBoYW5kbGVLZXlEb3duID0gKGU6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgIGNvbnN0IHsga2V5IH0gPSBlXG4gICAgICBpZiAoa2V5ID09PSBcIkFycm93VXBcIikge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICBoYW5kbGVCdXR0b25DbGljayhcInBsdXNcIilcbiAgICAgIH1cbiAgICAgIGlmIChrZXkgPT09IFwiQXJyb3dEb3duXCIpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgaGFuZGxlQnV0dG9uQ2xpY2soXCJtaW51c1wiKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8SW5wdXRcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKGNsYXNzTmFtZSwgYCR7cHJlZml4fWAsIHtcbiAgICAgICAgICBbYCR7cHJlZml4fS1kaXNhYmxlZGBdOiBkaXNhYmxlZCxcbiAgICAgICAgfSl9XG4gICAgICAgIGNsZWF2ZU9wdGlvbnM9e3tcbiAgICAgICAgICBudW1lcmFsOiB0cnVlLFxuICAgICAgICAgIG51bWVyYWxEZWNpbWFsU2NhbGU6IHByZWNpc2lvbixcbiAgICAgICAgICBkZWxpbWl0ZXI6IFwiXCIsXG4gICAgICAgIH19XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUlucHV0Q2hhbmdlfVxuICAgICAgICBvbkJsdXI9e2hhbmRsZUlucHV0Qmx1cn1cbiAgICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgICAgICB2YWx1ZT17aW5wdXRWYWx1ZX1cbiAgICAgICAgcmVmPXtpbnB1dFJlZn1cbiAgICAgICAgcmlnaHRFbGVtZW50PXtcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7cHJlZml4fS1idXR0b25zYH0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7cHJlZml4fS1idXR0b25gfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVNb3VzZURvd24oXCJwbHVzXCIpfVxuICAgICAgICAgICAgICByb2xlPVwibm9uZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxJY29uIGljb249XCJhcnJvdy11cFwiIGludGVyYWN0aXZlPXshZGlzYWJsZWR9IHNpemU9ezEyfSAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7cHJlZml4fS1idXR0b25gfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVNb3VzZURvd24oXCJtaW51c1wiKX1cbiAgICAgICAgICAgICAgcm9sZT1cIm5vbmVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8SWNvbiBpY29uPVwiYXJyb3ctZG93blwiIGludGVyYWN0aXZlPXshZGlzYWJsZWR9IHNpemU9ezEyfSAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgey4uLm90aGVyUHJvcHN9XG4gICAgICAvPlxuICAgIClcbiAgfVxuKVxuXG5OdW1lcmljSW5wdXQuZGlzcGxheU5hbWUgPSBcIk51bWVyaWNJbnB1dFwiXG5cbk51bWVyaWNJbnB1dC5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiDpu5jorqTnmoTliJ3lp4vlgLwgLSDlhoXpg6jpqbHliqhcbiAgICovXG4gIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIOiuvue9ruacgOWkp+WAvFxuICAgKi9cbiAgbWF4OiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICog6K6+572u5pyA5bCP5YC8XG4gICAqL1xuICBtaW46IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiDlgLzmlLnlj5jml7bnmoQgaGFuZGxlclxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICog6K6+572u57K+5bqmXG4gICAqL1xuICBwcmVjaXNpb246IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiDlop7lh4/nmoTluYXluqZcbiAgICovXG4gIHN0ZXA6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiDlgLwgLSDlpJbpg6jmjqfliLZcbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMubnVtYmVyLFxufVxuXG5OdW1lcmljSW5wdXQuZGVmYXVsdFByb3BzID0ge1xuICBkZWZhdWx0VmFsdWU6IG51bGwsXG4gIG1heDogdW5kZWZpbmVkLFxuICBtaW46IHVuZGVmaW5lZCxcbiAgb25DaGFuZ2U6ICgpID0+IHt9LFxuICBwcmVjaXNpb246IHVuZGVmaW5lZCxcbiAgc3RlcDogMSxcbiAgdmFsdWU6IG51bGwsXG59XG5cbmNvbnN0IE1lbW9OdW1lcmljSW5wdXQgPSBtZW1vKFxuICBOdW1lcmljSW5wdXQsXG4gIChcbiAgICB7IGxlZnRFbGVtZW50LCByaWdodEVsZW1lbnQsIC4uLnByZXZQcm9wcyB9LFxuICAgIHtcbiAgICAgIGxlZnRFbGVtZW50OiBsZWZ0RWxlbWVudE5leHQsXG4gICAgICByaWdodEVsZW1lbnQ6IHJpZ2h0RWxlbWVudE5leHQsXG4gICAgICAuLi5uZXh0UHJvcHNcbiAgICB9XG4gICkgPT4gSlNPTi5zdHJpbmdpZnkocHJldlByb3BzKSA9PT0gSlNPTi5zdHJpbmdpZnkobmV4dFByb3BzKVxuKVxuXG5NZW1vTnVtZXJpY0lucHV0LmRpc3BsYXlOYW1lID0gXCJOdW1lcmljSW5wdXRcIlxuXG5leHBvcnQgZGVmYXVsdCBNZW1vTnVtZXJpY0lucHV0XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQU9BOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLElBQU1BLE1BQU0sR0FBRyxvQkFBZjtBQXNDQSxJQUFNQyxZQUVMLEdBQUcsSUFBQUMsaUJBQUEsRUFDRixnQkFnQkVDLEdBaEJGLEVBaUJLO0VBQUEsSUFmREMsU0FlQyxRQWZEQSxTQWVDO0VBQUEsSUFkREMsWUFjQyxRQWREQSxZQWNDO0VBQUEsSUFiREMsUUFhQyxRQWJEQSxRQWFDO0VBQUEsSUFaREMsR0FZQyxRQVpEQSxHQVlDO0VBQUEsSUFYREMsR0FXQyxRQVhEQSxHQVdDO0VBQUEsSUFWREMsTUFVQyxRQVZEQSxNQVVDO0VBQUEsSUFUREMsUUFTQyxRQVREQSxRQVNDO0VBQUEsSUFSREMsT0FRQyxRQVJEQSxPQVFDO0VBQUEsSUFQREMsU0FPQyxR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