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>
209 lines • 34.6 kB
JavaScript
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
var _excluded = ["autoFocus", "className", "countHanzi", "defaultValue", "disabled", "id", "inputClassName", "inputStyle", "intent", "limit", "name", "onBlur", "onChange", "onFocus", "onKeyDown", "onPressEnter", "onScroll", "placeholder", "required", "resize", "size", "theme", "type", "value"];
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
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) { _defineProperty(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; }
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _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(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var s = Object.getOwnPropertySymbols(e); for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.includes(n)) continue; t[n] = r[n]; } return t; }
import React, { forwardRef, useContext, useImperativeHandle, useRef, useState } from "react";
import PropTypes from "prop-types";
import classNames from "classnames";
import warning from "../_util/warning";
import { ConfigContext, getComputedSize } from "../config-provider";
import "./style";
var noop = function noop() {};
var prefix = "adui-input";
var Textarea = forwardRef(function (_ref, ref) {
var autoFocus = _ref.autoFocus,
className = _ref.className,
countHanzi = _ref.countHanzi,
defaultValue = _ref.defaultValue,
disabled = _ref.disabled,
id = _ref.id,
inputClassName = _ref.inputClassName,
inputStyle = _ref.inputStyle,
intent = _ref.intent,
limit = _ref.limit,
name = _ref.name,
onBlur = _ref.onBlur,
onChange = _ref.onChange,
onFocus = _ref.onFocus,
onKeyDown = _ref.onKeyDown,
onPressEnter = _ref.onPressEnter,
onScroll = _ref.onScroll,
placeholder = _ref.placeholder,
required = _ref.required,
resize = _ref.resize,
sizeProp = _ref.size,
theme = _ref.theme,
type = _ref.type,
value = _ref.value,
otherProps = _objectWithoutProperties(_ref, _excluded);
var _useState = useState(false),
_useState2 = _slicedToArray(_useState, 2),
focused = _useState2[0],
setFocused = _useState2[1];
var textareaRef = useRef(null);
var _useContext = useContext(ConfigContext),
sizeContext = _useContext.size;
var size = getComputedSize(sizeProp, sizeContext);
var handleChange = function handleChange(e) {
if (!disabled && onChange) {
var val = e.target.value.replace(/\u0008|\u0009|\u000B|\u000C|\u000D|\u00A0|\u2028|\u2029|\uFEFF/g, "");
onChange(e, val);
}
};
var handleKeyDown = function handleKeyDown(e) {
if (e.key === "Enter" && onPressEnter) {
onPressEnter(e);
}
if (onKeyDown) {
onKeyDown(e);
}
};
var handleBlur = function handleBlur(e) {
setFocused(false);
if (onBlur) {
onBlur(e);
}
};
var handleFocus = function handleFocus(e) {
setFocused(true);
if (onFocus) {
onFocus(e);
}
};
var fixControlledValue = function fixControlledValue(val) {
if (typeof val === "undefined" || val === null) {
return "";
}
return val;
};
var getFormatStrLeng = function getFormatStrLeng(str) {
var len = str.length;
var realLength = 0;
var charCode = -1;
for (var i = 0; i < len; i += 1) {
charCode = str.charCodeAt(i);
if (charCode >= 0 && charCode <= 128) {
realLength += 0.5;
} else {
realLength += 1;
}
}
return Math.ceil(realLength);
};
useImperativeHandle(ref, function () {
return {
input: textareaRef === null || textareaRef === void 0 ? void 0 : textareaRef.current,
handleChange: handleChange,
handleKeyDown: handleKeyDown,
handleBlur: handleBlur,
handleFocus: handleFocus
};
});
var textareaProps = {
autoFocus: autoFocus,
className: classNames("".concat(prefix, "-base"), inputClassName),
disabled: disabled,
id: id,
name: name,
onBlur: handleBlur,
onChange: handleChange,
onFocus: handleFocus,
onKeyDown: handleKeyDown,
onScroll: onScroll,
placeholder: placeholder,
ref: textareaRef,
required: required,
style: _objectSpread({
resize: resize
}, inputStyle),
type: type
};
if (value !== null) {
textareaProps.value = fixControlledValue(value);
} else {
textareaProps.defaultValue = fixControlledValue(defaultValue);
}
var length;
if (limit) {
warning(resize === "none", "Input.Textarea", "不允许同时使用 prop `limit` 与 prop `resize`");
if (value) {
length = countHanzi ? getFormatStrLeng(value) : value.length;
} else {
warning(value !== null, "Input.Textarea", "如果要限制字数,必须从外部控制 value。");
length = 0;
}
}
var classSet = classNames(className, "".concat(prefix, "-wrapper"), "".concat(prefix, "-wrapper_textarea"), "".concat(prefix, "-").concat(size), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, "".concat(prefix, "-").concat(theme), theme), "".concat(prefix, "-resizable"), resize !== "none"), "".concat(prefix, "-disabled"), disabled), "".concat(prefix, "-limited"), !!limit), "".concat(prefix, "-normal"), intent === "normal"), "".concat(prefix, "-primary"), intent === "primary"), "".concat(prefix, "-success"), intent === "success"), "".concat(prefix, "-warning"), intent === "warning"), "".concat(prefix, "-danger"), intent === "danger" || length && limit && length > limit), "".concat(prefix, "-focused"), focused));
return React.createElement("div", _extends({
className: classSet
}, otherProps), React.createElement("textarea", textareaProps), !!limit && React.createElement("div", {
className: "".concat(prefix, "-limit")
}, React.createElement("span", null, "".concat(length, "/").concat(limit))));
});
Textarea.propTypes = {
autoFocus: PropTypes.bool,
className: PropTypes.string,
countHanzi: PropTypes.bool,
defaultValue: PropTypes.string,
disabled: PropTypes.bool,
id: PropTypes.string,
inputClassName: PropTypes.string,
inputStyle: PropTypes.object,
intent: PropTypes.oneOf(["normal", "primary", "success", "warning", "danger"]),
limit: PropTypes.number,
name: PropTypes.string,
onBlur: PropTypes.func,
onChange: PropTypes.func,
onFocus: PropTypes.func,
onKeyDown: PropTypes.func,
onPressEnter: PropTypes.func,
onScroll: PropTypes.func,
placeholder: PropTypes.string,
required: PropTypes.bool,
resize: PropTypes.oneOf(["none", "both", "horizontal", "vertical"]),
size: PropTypes.oneOf(["mini", "small", "medium", "large"]),
theme: PropTypes.oneOf([null, "light"]),
type: PropTypes.string,
value: PropTypes.string
};
Textarea.defaultProps = {
autoFocus: false,
className: undefined,
countHanzi: true,
defaultValue: null,
disabled: false,
id: null,
inputClassName: undefined,
inputStyle: {},
intent: "normal",
limit: null,
name: null,
onBlur: noop,
onChange: noop,
onFocus: noop,
onKeyDown: noop,
onPressEnter: noop,
onScroll: noop,
placeholder: "请输入",
required: false,
resize: "none",
size: "small",
theme: null,
type: null,
value: null
};
Textarea.displayName = "Textarea";
export default Textarea;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsImZvcndhcmRSZWYiLCJ1c2VDb250ZXh0IiwidXNlSW1wZXJhdGl2ZUhhbmRsZSIsInVzZVJlZiIsInVzZVN0YXRlIiwiUHJvcFR5cGVzIiwiY2xhc3NOYW1lcyIsIndhcm5pbmciLCJDb25maWdDb250ZXh0IiwiZ2V0Q29tcHV0ZWRTaXplIiwibm9vcCIsInByZWZpeCIsIlRleHRhcmVhIiwiX3JlZiIsInJlZiIsImF1dG9Gb2N1cyIsImNsYXNzTmFtZSIsImNvdW50SGFuemkiLCJkZWZhdWx0VmFsdWUiLCJkaXNhYmxlZCIsImlkIiwiaW5wdXRDbGFzc05hbWUiLCJpbnB1dFN0eWxlIiwiaW50ZW50IiwibGltaXQiLCJuYW1lIiwib25CbHVyIiwib25DaGFuZ2UiLCJvbkZvY3VzIiwib25LZXlEb3duIiwib25QcmVzc0VudGVyIiwib25TY3JvbGwiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwicmVzaXplIiwic2l6ZVByb3AiLCJzaXplIiwidGhlbWUiLCJ0eXBlIiwidmFsdWUiLCJvdGhlclByb3BzIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiX2V4Y2x1ZGVkIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiZm9jdXNlZCIsInNldEZvY3VzZWQiLCJ0ZXh0YXJlYVJlZiIsIl91c2VDb250ZXh0Iiwic2l6ZUNvbnRleHQiLCJoYW5kbGVDaGFuZ2UiLCJlIiwidmFsIiwidGFyZ2V0IiwicmVwbGFjZSIsImhhbmRsZUtleURvd24iLCJrZXkiLCJoYW5kbGVCbHVyIiwiaGFuZGxlRm9jdXMiLCJmaXhDb250cm9sbGVkVmFsdWUiLCJnZXRGb3JtYXRTdHJMZW5nIiwic3RyIiwibGVuIiwibGVuZ3RoIiwicmVhbExlbmd0aCIsImNoYXJDb2RlIiwiaSIsImNoYXJDb2RlQXQiLCJNYXRoIiwiY2VpbCIsImlucHV0IiwiY3VycmVudCIsInRleHRhcmVhUHJvcHMiLCJjb25jYXQiLCJzdHlsZSIsIl9vYmplY3RTcHJlYWQiLCJjbGFzc1NldCIsIl9kZWZpbmVQcm9wZXJ0eSIsImNyZWF0ZUVsZW1lbnQiLCJfZXh0ZW5kcyIsInByb3BUeXBlcyIsImJvb2wiLCJzdHJpbmciLCJvYmplY3QiLCJvbmVPZiIsIm51bWJlciIsImZ1bmMiLCJkZWZhdWx0UHJvcHMiLCJ1bmRlZmluZWQiLCJkaXNwbGF5TmFtZSJdLCJzb3VyY2VzIjpbIi4uLy4uL2NvbXBvbmVudHMvaW5wdXQvVGV4dGFyZWEudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwge1xuICBmb3J3YXJkUmVmLFxuICB1c2VDb250ZXh0LFxuICB1c2VJbXBlcmF0aXZlSGFuZGxlLFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxufSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tIFwiY2xhc3NuYW1lc1wiXG5pbXBvcnQgd2FybmluZyBmcm9tIFwiLi4vX3V0aWwvd2FybmluZ1wiXG5pbXBvcnQgeyBDb25maWdDb250ZXh0LCBnZXRDb21wdXRlZFNpemUgfSBmcm9tIFwiLi4vY29uZmlnLXByb3ZpZGVyXCJcbmltcG9ydCBcIi4vc3R5bGVcIlxuXG5jb25zdCBub29wID0gKCkgPT4ge31cblxuY29uc3QgcHJlZml4ID0gXCJhZHVpLWlucHV0XCJcblxuZXhwb3J0IGludGVyZmFjZSBJVGV4dGFyZWFQcm9wcyB7XG4gIFtrZXk6IHN0cmluZ106IGFueVxuICAvKipcbiAgICogaW5wdXQg5qCH562+5Y6f55Sf5bGe5oCnIC0gYXV0b0ZvY3VzXG4gICAqL1xuICBhdXRvRm9jdXM/OiBib29sZWFuXG4gIC8qKlxuICAgKiDpmYTliqDnsbvlkI1cbiAgICovXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICAvKipcbiAgICog5piv5ZCm5oyJ54Wn5LiA5Liq5rGJ5a2X566XIDIg5a2X5pWw55qE5pa55byP6ZmQ5Yi26ZW/5bqmXG4gICAqL1xuICBjb3VudEhhbnppPzogYm9vbGVhblxuICAvKipcbiAgICog6buY6K6k5YC8IC0g5YaF6YOo6amx5YqoXG4gICAqL1xuICBkZWZhdWx0VmFsdWU/OiBzdHJpbmcgfCBudWxsXG4gIC8qKlxuICAgKiDmmK/lkKbnpoHnlKhcbiAgICovXG4gIGRpc2FibGVkPzogYm9vbGVhblxuICAvKipcbiAgICog6L6T5YWl5qGG55qEIGlkXG4gICAqL1xuICBpZD86IHN0cmluZyB8IG51bGxcbiAgLyoqXG4gICAqIOexu+Wei1xuICAgKi9cbiAgaW50ZW50PzogXCJub3JtYWxcIiB8IFwicHJpbWFyeVwiIHwgXCJzdWNjZXNzXCIgfCBcIndhcm5pbmdcIiB8IFwiZGFuZ2VyXCJcbiAgLyoqXG4gICAqIOS9nOeUqOWIsCBpbnB1dCDlhYPntKDnmoTnsbvlkI1cbiAgICovXG4gIGlucHV0Q2xhc3NOYW1lPzogc3RyaW5nXG4gIC8qKlxuICAgKiDkvZznlKjliLAgaW5wdXQg5YWD57Sg55qE5qC35byPXG4gICAqL1xuICBpbnB1dFN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllc1xuICAvKipcbiAgICog6ZmQ5Yi26ZW/5bqmXG4gICAqL1xuICBsaW1pdD86IG51bWJlciB8IG51bGxcbiAgLyoqXG4gICAqIGlucHV0IOagh+etvuWOn+eUn+WxnuaApyAtIG5hbWVcbiAgICovXG4gIG5hbWU/OiBzdHJpbmcgfCBudWxsXG4gIC8qKlxuICAgKiBibHVyIOaXtueahCBoYW5kbGVyXG4gICAqL1xuICBvbkJsdXI/OiAoZTogUmVhY3QuRm9jdXNFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4gdm9pZFxuICAvKipcbiAgICog5YC85pS55Y+Y5pe255qEIGhhbmRsZXJcbiAgICovXG4gIG9uQ2hhbmdlPzogKGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQ+LCB2YWx1ZT86IHN0cmluZykgPT4gdm9pZFxuICAvKipcbiAgICogZm9jdXMg5pe255qEIGhhbmRsZXJcbiAgICovXG4gIG9uRm9jdXM/OiAoZTogUmVhY3QuRm9jdXNFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4gdm9pZFxuICAvKipcbiAgICoga2V5ZG93biDml7bnmoQgaGFuZGxlclxuICAgKi9cbiAgb25LZXlEb3duPzogKGU6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudD4pID0+IHZvaWRcbiAgLyoqXG4gICAqIGVudGVyIOaXtueahCBoYW5kbGVyXG4gICAqL1xuICBvblByZXNzRW50ZXI/OiAoZTogUmVhY3QuS2V5Ym9hcmRFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4gdm9pZFxuICAvKipcbiAgICogc2Nyb2xsIOaXtueahCBoYW5kbGVyXG4gICAqL1xuICBvblNjcm9sbD86IChlOiBSZWFjdC5VSUV2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KSA9PiB2b2lkXG4gIC8qKlxuICAgKiBwbGFjZWhvbGRlclxuICAgKi9cbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmdcbiAgLyoqXG4gICAqIGlucHV0IOagh+etvuWOn+eUn+WxnuaApyAtIHJlcXVpcmVkXG4gICAqL1xuICByZXF1aXJlZD86IGJvb2xlYW5cbiAgLyoqXG4gICAqIOaYr+WQpuaUr+aMgeiwg+aVtOWkp+Wwj1xuICAgKi9cbiAgcmVzaXplPzogXCJub25lXCIgfCBcImJvdGhcIiB8IFwiaG9yaXpvbnRhbFwiIHwgXCJ2ZXJ0aWNhbFwiXG4gIC8qKlxuICAgKiDorr7nva7lsLrlr7hcbiAgICovXG4gIHNpemU/OiBcIm1pbmlcIiB8IFwic21hbGxcIiB8IFwibWVkaXVtXCIgfCBcImxhcmdlXCJcbiAgLyoqXG4gICAqIOiuvue9ruS4u+mimFxuICAgKi9cbiAgdGhlbWU/OiBudWxsIHwgXCJsaWdodFwiXG4gIC8qKlxuICAgKiBpbnB1dCDmoIfnrb7ljp/nlJ/lsZ7mgKcgLSB0eXBlXG4gICAqL1xuICB0eXBlPzogc3RyaW5nIHwgbnVsbFxuICAvKipcbiAgICog5YC8IC0g5aSW6YOo5o6n5Yi2XG4gICAqL1xuICB2YWx1ZT86IHN0cmluZyB8IG51bGxcbn1cblxuLyoqXG4gKiDovpPlhaXljLrln5/vvIznlKjkuo7lpJrooYznuq/mlofmnKznvJbovpHjgIJcbiAqL1xuY29uc3QgVGV4dGFyZWE6IFJlYWN0LkZvcndhcmRSZWZFeG90aWNDb21wb25lbnQ8XG4gIElUZXh0YXJlYVByb3BzICYgUmVhY3QuUmVmQXR0cmlidXRlczxhbnk+XG4+ID0gZm9yd2FyZFJlZihcbiAgKFxuICAgIHtcbiAgICAgIGF1dG9Gb2N1cyxcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvdW50SGFuemksXG4gICAgICBkZWZhdWx0VmFsdWUsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIGlkLFxuICAgICAgaW5wdXRDbGFzc05hbWUsXG4gICAgICBpbnB1dFN0eWxlLFxuICAgICAgaW50ZW50LFxuICAgICAgbGltaXQsXG4gICAgICBuYW1lLFxuICAgICAgb25CbHVyLFxuICAgICAgb25DaGFuZ2UsXG4gICAgICBvbkZvY3VzLFxuICAgICAgb25LZXlEb3duLFxuICAgICAgb25QcmVzc0VudGVyLFxuICAgICAgb25TY3JvbGwsXG4gICAgICBwbGFjZWhvbGRlcixcbiAgICAgIHJlcXVpcmVkLFxuICAgICAgcmVzaXplLFxuICAgICAgc2l6ZTogc2l6ZVByb3AsXG4gICAgICB0aGVtZSxcbiAgICAgIHR5cGUsXG4gICAgICB2YWx1ZSxcbiAgICAgIC4uLm90aGVyUHJvcHNcbiAgICB9OiBJVGV4dGFyZWFQcm9wcyxcbiAgICByZWZcbiAgKSA9PiB7XG4gICAgY29uc3QgW2ZvY3VzZWQsIHNldEZvY3VzZWRdID0gdXNlU3RhdGUoZmFsc2UpXG5cbiAgICBjb25zdCB0ZXh0YXJlYVJlZiA9IHVzZVJlZjxIVE1MVGV4dEFyZWFFbGVtZW50PihudWxsKVxuXG4gICAgY29uc3QgeyBzaXplOiBzaXplQ29udGV4dCB9ID0gdXNlQ29udGV4dChDb25maWdDb250ZXh0KVxuXG4gICAgY29uc3Qgc2l6ZSA9IGdldENvbXB1dGVkU2l6ZShzaXplUHJvcCwgc2l6ZUNvbnRleHQpXG5cbiAgICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAoZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudD4pID0+IHtcbiAgICAgIGlmICghZGlzYWJsZWQgJiYgb25DaGFuZ2UpIHtcbiAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tY29udHJvbC1yZWdleCwgbWF4LWxlbiAqL1xuICAgICAgICAvLyAwOCBCYWNrc3BhY2UsIDA5IFRhYiwgMEIg5Z6C55u05Yi26KGo56ymLCAwQyDmjaLpobUsIDBEIOWbnui9piwgQTAg5LiN6Ze05pat56m65qC8LFxuICAgICAgICAvLyAyMDI4LzIwMjkg5YiG6ZqU56ymLCBGRWZmIOWtl+iKgumhuuW6j+agh+iusOOAglxuICAgICAgICBjb25zdCB2YWwgPSBlLnRhcmdldC52YWx1ZS5yZXBsYWNlKFxuICAgICAgICAgIC9cXHUwMDA4fFxcdTAwMDl8XFx1MDAwQnxcXHUwMDBDfFxcdTAwMER8XFx1MDBBMHxcXHUyMDI4fFxcdTIwMjl8XFx1RkVGRi9nLFxuICAgICAgICAgIFwiXCJcbiAgICAgICAgKVxuICAgICAgICBvbkNoYW5nZShlLCB2YWwpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlS2V5RG93biA9IChlOiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAoZS5rZXkgPT09IFwiRW50ZXJcIiAmJiBvblByZXNzRW50ZXIpIHtcbiAgICAgICAgb25QcmVzc0VudGVyKGUpXG4gICAgICB9XG4gICAgICBpZiAob25LZXlEb3duKSB7XG4gICAgICAgIG9uS2V5RG93bihlKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZUJsdXIgPSAoZTogUmVhY3QuRm9jdXNFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4ge1xuICAgICAgc2V0Rm9jdXNlZChmYWxzZSlcbiAgICAgIGlmIChvbkJsdXIpIHtcbiAgICAgICAgb25CbHVyKGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlRm9jdXMgPSAoZTogUmVhY3QuRm9jdXNFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4ge1xuICAgICAgc2V0Rm9jdXNlZCh0cnVlKVxuICAgICAgaWYgKG9uRm9jdXMpIHtcbiAgICAgICAgb25Gb2N1cyhlKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGZpeENvbnRyb2xsZWRWYWx1ZSA9ICh2YWw/OiBzdHJpbmcgfCBudWxsKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHZhbCA9PT0gXCJ1bmRlZmluZWRcIiB8fCB2YWwgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFwiXCJcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWxcbiAgICB9XG5cbiAgICBjb25zdCBnZXRGb3JtYXRTdHJMZW5nID0gKHN0cjogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBsZW4gPSBzdHIubGVuZ3RoXG4gICAgICBsZXQgcmVhbExlbmd0aCA9IDBcbiAgICAgIGxldCBjaGFyQ29kZSA9IC0xXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICAgIGNoYXJDb2RlID0gc3RyLmNoYXJDb2RlQXQoaSlcbiAgICAgICAgaWYgKGNoYXJDb2RlID49IDAgJiYgY2hhckNvZGUgPD0gMTI4KSB7XG4gICAgICAgICAgcmVhbExlbmd0aCArPSAwLjVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWFsTGVuZ3RoICs9IDFcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIE1hdGguY2VpbChyZWFsTGVuZ3RoKVxuICAgIH1cblxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoe1xuICAgICAgaW5wdXQ6IHRleHRhcmVhUmVmPy5jdXJyZW50LFxuICAgICAgaGFuZGxlQ2hhbmdlLFxuICAgICAgaGFuZGxlS2V5RG93bixcbiAgICAgIGhhbmRsZUJsdXIsXG4gICAgICBoYW5kbGVGb2N1cyxcbiAgICB9KSlcblxuICAgIGNvbnN0IHRleHRhcmVhUHJvcHM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7XG4gICAgICBhdXRvRm9jdXMsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoYCR7cHJlZml4fS1iYXNlYCwgaW5wdXRDbGFzc05hbWUpLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICBpZCxcbiAgICAgIG5hbWUsXG4gICAgICBvbkJsdXI6IGhhbmRsZUJsdXIsXG4gICAgICBvbkNoYW5nZTogaGFuZGxlQ2hhbmdlLFxuICAgICAgb25Gb2N1czogaGFuZGxlRm9jdXMsXG4gICAgICBvbktleURvd246IGhhbmRsZUtleURvd24sXG4gICAgICBvblNjcm9sbCxcbiAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgcmVmOiB0ZXh0YXJlYVJlZixcbiAgICAgIHJlcXVpcmVkLFxuICAgICAgc3R5bGU6IHsgcmVzaXplLCAuLi5pbnB1dFN0eWxlIH0sXG4gICAgICB0eXBlLFxuICAgIH1cblxuICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgdGV4dGFyZWFQcm9wcy52YWx1ZSA9IGZpeENvbnRyb2xsZWRWYWx1ZSh2YWx1ZSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGV4dGFyZWFQcm9wcy5kZWZhdWx0VmFsdWUgPSBmaXhDb250cm9sbGVkVmFsdWUoZGVmYXVsdFZhbHVlKVxuICAgIH1cblxuICAgIGxldCBsZW5ndGhcbiAgICBpZiAobGltaXQpIHtcbiAgICAgIHdhcm5pbmcoXG4gICAgICAgIHJlc2l6ZSA9PT0gXCJub25lXCIsXG4gICAgICAgIFwiSW5wdXQuVGV4dGFyZWFcIixcbiAgICAgICAgXCLkuI3lhYHorrjlkIzml7bkvb/nlKggcHJvcCBgbGltaXRgIOS4jiBwcm9wIGByZXNpemVgXCJcbiAgICAgIClcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBsZW5ndGggPSBjb3VudEhhbnppID8gZ2V0Rm9ybWF0U3RyTGVuZyh2YWx1ZSkgOiB2YWx1ZS5sZW5ndGhcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdhcm5pbmcoXG4gICAgICAgICAgdmFsdWUgIT09IG51bGwsXG4gICAgICAgICAgXCJJbnB1dC5UZXh0YXJlYVwiLFxuICAgICAgICAgIFwi5aaC5p6c6KaB6ZmQ5Yi25a2X5pWw77yM5b+F6aG75LuO5aSW6YOo5o6n5Yi2IHZhbHVl44CCXCJcbiAgICAgICAgKVxuICAgICAgICBsZW5ndGggPSAwXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NTZXQgPSBjbGFzc05hbWVzKFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgYCR7cHJlZml4fS13cmFwcGVyYCxcbiAgICAgIGAke3ByZWZpeH0td3JhcHBlcl90ZXh0YXJlYWAsXG4gICAgICBgJHtwcmVmaXh9LSR7c2l6ZX1gLFxuICAgICAge1xuICAgICAgICBbYCR7cHJlZml4fS0ke3RoZW1lfWBdOiB0aGVtZSxcbiAgICAgICAgW2Ake3ByZWZpeH0tcmVzaXphYmxlYF06IHJlc2l6ZSAhPT0gXCJub25lXCIsXG4gICAgICAgIFtgJHtwcmVmaXh9LWRpc2FibGVkYF06IGRpc2FibGVkLFxuICAgICAgICBbYCR7cHJlZml4fS1saW1pdGVkYF06ICEhbGltaXQsXG4gICAgICAgIFtgJHtwcmVmaXh9LW5vcm1hbGBdOiBpbnRlbnQgPT09IFwibm9ybWFsXCIsXG4gICAgICAgIFtgJHtwcmVmaXh9LXByaW1hcnlgXTogaW50ZW50ID09PSBcInByaW1hcnlcIixcbiAgICAgICAgW2Ake3ByZWZpeH0tc3VjY2Vzc2BdOiBpbnRlbnQgPT09IFwic3VjY2Vzc1wiLFxuICAgICAgICBbYCR7cHJlZml4fS13YXJuaW5nYF06IGludGVudCA9PT0gXCJ3YXJuaW5nXCIsXG4gICAgICAgIFtgJHtwcmVmaXh9LWRhbmdlcmBdOlxuICAgICAgICAgIGludGVudCA9PT0gXCJkYW5nZXJcIiB8fCAobGVuZ3RoICYmIGxpbWl0ICYmIGxlbmd0aCA+IGxpbWl0KSxcbiAgICAgICAgW2Ake3ByZWZpeH0tZm9jdXNlZGBdOiBmb2N1c2VkLFxuICAgICAgfVxuICAgIClcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NTZXR9IHsuLi5vdGhlclByb3BzfT5cbiAgICAgICAgPHRleHRhcmVhIHsuLi50ZXh0YXJlYVByb3BzfSAvPlxuICAgICAgICB7ISFsaW1pdCAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3ByZWZpeH0tbGltaXRgfT5cbiAgICAgICAgICAgIDxzcGFuPntgJHtsZW5ndGh9LyR7bGltaXR9YH08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cbilcblxuVGV4dGFyZWEucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogaW5wdXQg5qCH562+5Y6f55Sf5bGe5oCnIC0gYXV0b0ZvY3VzXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICog6ZmE5Yqg57G75ZCNXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiDmmK/lkKbmjInnhafkuIDkuKrmsYnlrZfnrpcgMiDlrZfmlbDnmoTmlrnlvI/pmZDliLbplb/luqZcbiAgICovXG4gIGNvdW50SGFuemk6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICog6buY6K6k5YC8IC0g5YaF6YOo6amx5YqoXG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiDmmK/lkKbnpoHnlKhcbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIOi+k+WFpeahhueahCBpZFxuICAgKi9cbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiDkvZznlKjliLAgaW5wdXQg5YWD57Sg55qE57G75ZCNXG4gICAqL1xuICBpbnB1dENsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIOS9nOeUqOWIsCBpbnB1dCDlhYPntKDnmoTmoLflvI9cbiAgICovXG4gIGlucHV0U3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiDorr7nva7nsbvlnotcbiAgICovXG4gIGludGVudDogUHJvcFR5cGVzLm9uZU9mKFtcbiAgICBcIm5vcm1hbFwiLFxuICAgIFwicHJpbWFyeVwiLFxuICAgIFwic3VjY2Vzc1wiLFxuICAgIFwid2FybmluZ1wiLFxuICAgIFwiZGFuZ2VyXCIsXG4gIF0pLFxuICAvKipcbiAgICog6ZmQ5Yi26ZW/5bqmXG4gICAqL1xuICBsaW1pdDogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIHRleHRhcmVhIOagh+etvuWOn+eUn+WxnuaApyAtIG5hbWVcbiAgICovXG4gIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBibHVyIOaXtueahCBoYW5kbGVyXG4gICAqL1xuICBvbkJsdXI6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICog5YC85pS55Y+Y5pe255qEIGhhbmRsZXJcbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIGZvY3VzIOaXtueahCBoYW5kbGVyXG4gICAqL1xuICBvbkZvY3VzOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIGtleWRvd24g5pe255qEIGhhbmRsZXJcbiAgICovXG4gIG9uS2V5RG93bjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBlbnRlciDml7bnmoQgaGFuZGxlclxuICAgKi9cbiAgb25QcmVzc0VudGVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIHNjcm9sbCDml7bnmoQgaGFuZGxlclxuICAgKi9cbiAgb25TY3JvbGw6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogcGxhY2Vob2xkZXJcbiAgICovXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogaW5wdXQg5qCH562+5Y6f55Sf5bGe5oCnIC0gcmVxdWlyZWRcbiAgICovXG4gIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIOaYr+WQpuaUr+aMgeiwg+aVtOWkp+Wwj1xuICAgKi9cbiAgcmVzaXplOiBQcm9wVHlwZXMub25lT2YoW1wibm9uZVwiLCBcImJvdGhcIiwgXCJob3Jpem9udGFsXCIsIFwidmVydGljYWxcIl0pLFxuICAvKipcbiAgICog6K6+572u5bC65a+4XG4gICAqL1xuICBzaXplOiBQcm9wVHlwZXMub25lT2YoW1wibWluaVwiLCBcInNtYWxsXCIsIFwibWVkaXVtXCIsIFwibGFyZ2VcIl0pLFxuICAvKipcbiAgICog6K6+572u5Li76aKYXG4gICAqL1xuICB0aGVtZTogUHJvcFR5cGVzLm9uZU9mKFtudWxsLCBcImxpZ2h0XCJdKSxcbiAgLyoqXG4gICAqIHRleHRhcmVhIOagh+etvuWOn+eUn+WxnuaApyAtIHR5cGVcbiAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiDlgLwgLSDlpJbpg6jmjqfliLZcbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxufVxuXG5UZXh0YXJlYS5kZWZhdWx0UHJvcHMgPSB7XG4gIGF1dG9Gb2N1czogZmFsc2UsXG4gIGNsYXNzTmFtZTogdW5kZWZpbmVkLFxuICBjb3VudEhhbnppOiB0cnVlLFxuICBkZWZhdWx0VmFsdWU6IG51bGwsXG4gIGRpc2FibGVkOiBmYWxzZSxcbiAgaWQ6IG51bGwsXG4gIGlucHV0Q2xhc3NOYW1lOiB1bmRlZmluZWQsXG4gIGlucHV0U3R5bGU6IHt9LFxuICBpbnRlbnQ6IFwibm9ybWFsXCIsXG4gIGxpbWl0OiBudWxsLFxuICBuYW1lOiBudWxsLFxuICBvbkJsdXI6IG5vb3AsXG4gIG9uQ2hhbmdlOiBub29wLFxuICBvbkZvY3VzOiBub29wLFxuICBvbktleURvd246IG5vb3AsXG4gIG9uUHJlc3NFbnRlcjogbm9vcCxcbiAgb25TY3JvbGw6IG5vb3AsXG4gIHBsYWNlaG9sZGVyOiBcIuivt+i+k+WFpVwiLFxuICByZXF1aXJlZDogZmFsc2UsXG4gIHJlc2l6ZTogXCJub25lXCIsXG4gIHNpemU6IFwic21hbGxcIixcbiAgdGhlbWU6IG51bGwsXG4gIHR5cGU6IG51bGwsXG4gIHZhbHVlOiBudWxsLFxufVxuXG5UZXh0YXJlYS5kaXNwbGF5TmFtZSA9IFwiVGV4dGFyZWFcIlxuXG5leHBvcnQgZGVmYXVsdCBUZXh0YXJlYVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBT0EsS0FBSyxJQUNWQyxVQUFVLEVBQ1ZDLFVBQVUsRUFDVkMsbUJBQW1CLEVBQ25CQyxNQUFNLEVBQ05DLFFBQVEsUUFDSCxPQUFPO0FBQ2QsT0FBT0MsU0FBUyxNQUFNLFlBQVk7QUFDbEMsT0FBT0MsVUFBVSxNQUFNLFlBQVk7QUFDbkMsT0FBT0MsT0FBTyxNQUFNLGtCQUFrQjtBQUN0QyxTQUFTQyxhQUFhLEVBQUVDLGVBQWUsUUFBUSxvQkFBb0I7QUFDbkUsT0FBTyxTQUFTO0FBRWhCLElBQU1DLElBQUksR0FBRyxTQUFQQSxJQUFJQSxDQUFBLEVBQVMsQ0FBQyxDQUFDO0FBRXJCLElBQU1DLE1BQU0sR0FBRyxZQUFZO0FBeUczQixJQUFNQyxRQUVMLEdBQUdaLFVBQVUsQ0FDWixVQUFBYSxJQUFBLEVBNEJFQyxHQUFHLEVBQ0E7RUFBQSxJQTNCREMsU0FBUyxHQUFBRixJQUFBLENBQVRFLFNBQVM7SUFDVEMsU0FBUyxHQUFBSCxJQUFBLENBQVRHLFNBQVM7SUFDVEMsVUFBVSxHQUFBSixJQUFBLENBQVZJLFVBQVU7SUFDVkMsWUFBWSxHQUFBTCxJQUFBLENBQVpLLFlBQVk7SUFDWkMsUUFBUSxHQUFBTixJQUFBLENBQVJNLFFBQVE7SUFDUkMsRUFBRSxHQUFBUCxJQUFBLENBQUZPLEVBQUU7SUFDRkMsY0FBYyxHQUFBUixJQUFBLENBQWRRLGNBQWM7SUFDZEMsVUFBVSxHQUFBVCxJQUFBLENBQVZTLFVBQVU7SUFDVkMsTUFBTSxHQUFBVixJQUFBLENBQU5VLE1BQU07SUFDTkMsS0FBSyxHQUFB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