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>
371 lines (304 loc) • 46.3 kB
JavaScript
;
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 _configProvider = require("../config-provider");
var _icon = _interopRequireDefault(require("../icon"));
var _input = _interopRequireDefault(require("../input"));
var _popover = _interopRequireDefault(require("../popover"));
var _TimeSelect = _interopRequireDefault(require("./TimeSelect"));
require("./style");
var _core = require("./core");
var _excluded = ["className", "closeOnSelect", "defaultValue", "disabled", "disabledHours", "disabledMinutes", "disabledSeconds", "maxTime", "minTime", "onChange", "onlyHour", "placeholder", "popoverProps", "secondsAvailable", "size", "value"];
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 ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
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-time";
var noop = function noop() {};
var TimePicker = (0, _react.forwardRef)(function (_ref, ref) {
var className = _ref.className,
closeOnSelect = _ref.closeOnSelect,
defaultValue = _ref.defaultValue,
disabled = _ref.disabled,
disabledHours = _ref.disabledHours,
disabledMinutes = _ref.disabledMinutes,
disabledSeconds = _ref.disabledSeconds,
maxTime = _ref.maxTime,
minTime = _ref.minTime,
onChange = _ref.onChange,
onlyHour = _ref.onlyHour,
placeholder = _ref.placeholder,
popoverProps = _ref.popoverProps,
_ref$secondsAvailable = _ref.secondsAvailable,
secondsAvailable = _ref$secondsAvailable === void 0 ? false : _ref$secondsAvailable,
sizeProp = _ref.size,
value = _ref.value,
otherProps = _objectWithoutProperties(_ref, _excluded);
var getInitialState = function getInitialState() {
var valueState = value !== null ? value : defaultValue;
var _extractHMSFromTime = (0, _core.extractHMSFromTime)(valueState),
hour = _extractHMSFromTime.hour,
minute = _extractHMSFromTime.minute,
second = _extractHMSFromTime.second;
return {
hour: hour,
inputValue: valueState || "",
minute: onlyHour ? "00" : minute,
second: secondsAvailable ? second : "00",
prevValueProp: valueState || "",
visible: false
};
};
var initialState = (0, _react.useMemo)(getInitialState, []);
var _useState = (0, _react.useState)(initialState.inputValue),
_useState2 = _slicedToArray(_useState, 2),
inputValue = _useState2[0],
setInputValue = _useState2[1];
var _useState3 = (0, _react.useState)(initialState.hour),
_useState4 = _slicedToArray(_useState3, 2),
hour = _useState4[0],
setHour = _useState4[1];
var _useState5 = (0, _react.useState)(initialState.minute),
_useState6 = _slicedToArray(_useState5, 2),
minute = _useState6[0],
setMinute = _useState6[1];
var _useState7 = (0, _react.useState)(initialState.second),
_useState8 = _slicedToArray(_useState7, 2),
second = _useState8[0],
setSecond = _useState8[1];
var _useState9 = (0, _react.useState)(initialState.prevValueProp),
_useState10 = _slicedToArray(_useState9, 2),
prevValueProp = _useState10[0],
setPrevValueProp = _useState10[1];
var _useState11 = (0, _react.useState)(initialState.visible),
_useState12 = _slicedToArray(_useState11, 2),
visible = _useState12[0],
setVisible = _useState12[1];
if (value !== null && prevValueProp !== value) {
var _extractHMSFromTime2 = (0, _core.extractHMSFromTime)(value),
newHour = _extractHMSFromTime2.hour,
newMinute = _extractHMSFromTime2.minute,
newSecond = _extractHMSFromTime2.second;
setInputValue(value || "");
setHour(newHour);
setMinute(onlyHour ? "00" : newMinute);
setSecond(secondsAvailable ? newSecond : "00");
setPrevValueProp(value || "");
}
var inputRef = (0, _react.useRef)(null);
var _useContext = (0, _react.useContext)(_configProvider.ConfigContext),
sizeContext = _useContext.size;
var size = (0, _configProvider.getComputedSize)(sizeProp, sizeContext);
var handleClick = function handleClick(valueNew, type) {
var valueProp = value;
var inputValueNow = "";
if (secondsAvailable) {
if (type === "hour") {
inputValueNow = "".concat(valueNew, ":").concat(minute || "", ":").concat(second || "");
} else if (type === "minute") {
inputValueNow = "".concat(hour || "", ":").concat(valueNew, ":").concat(second || "");
} else {
inputValueNow = "".concat(hour || "", ":").concat(minute || "", ":").concat(valueNew);
}
} else {
inputValueNow = type === "hour" ? "".concat(valueNew, ":").concat(minute || "") : "".concat(hour || "", ":").concat(valueNew);
}
if (maxTime && (0, _core.isTimeAfter)(inputValueNow, maxTime)) {
inputValueNow = secondsAvailable ? (0, _core.transformTimeWithSeconds)(maxTime) : maxTime;
} else if (minTime && (0, _core.isTimeBefore)(inputValueNow, minTime)) {
inputValueNow = secondsAvailable ? (0, _core.transformTimeWithSeconds)(minTime) : minTime;
}
if (valueProp === null) {
var valueFinal = _objectSpread({
inputValueNow: inputValueNow
}, (0, _core.extractHMSFromTime)(inputValueNow));
setHour(valueFinal.hour);
setMinute(valueFinal.minute);
setSecond(valueFinal.second);
setInputValue(valueFinal.inputValueNow);
}
if ((0, _core.isLegalTimeString)({
time: inputValue,
onlyHour: onlyHour
})) {
if (onChange) {
onChange(inputValueNow);
}
if (closeOnSelect) {
setTimeout(function () {
setVisible(false);
}, 120);
}
}
};
var handleVisibleChange = function handleVisibleChange(visibleNew) {
var inputElement = inputRef.current.input;
if (disabled) {
return;
}
setTimeout(function () {
var _document = document,
activeElement = _document.activeElement;
if (visibleNew || !visibleNew && inputElement !== activeElement) {
var withSeconds = hour && minute && second ? "".concat(hour, ":").concat(minute, ":").concat(second) : "";
var noSeconds = hour && minute ? "".concat(hour, ":").concat(minute) : "";
var newInputValue = secondsAvailable ? withSeconds : noSeconds;
if (!visibleNew && inputValue !== newInputValue) {
setInputValue(newInputValue);
}
setVisible(visibleNew);
}
}, 0);
};
var handleInputChange = function handleInputChange(_ref2) {
var inputValueNew = _ref2.target.value;
setInputValue(inputValueNew);
if (inputValueNew === "" || (0, _core.isLegalTimeString)({
time: inputValueNew,
onlyHour: onlyHour
}) && !(0, _core.isTimeAfter)(inputValueNew, maxTime) && !(0, _core.isTimeBefore)(inputValueNew, minTime)) {
var _extractHMSFromTime3 = (0, _core.extractHMSFromTime)(inputValueNew),
hourNew = _extractHMSFromTime3.hour,
minuteNew = _extractHMSFromTime3.minute,
secondNew = _extractHMSFromTime3.second;
if (!(disabledHours && disabledHours(hourNew)) && !(disabledMinutes && disabledMinutes(minuteNew)) && !(disabledSeconds && disabledSeconds(secondNew))) {
if (onChange) {
onChange(inputValueNew);
}
if (value === null) {
setHour(hourNew);
setMinute(onlyHour ? "00" : minuteNew);
setSecond(secondsAvailable ? secondNew : "00");
}
}
}
};
var handleInputFocus = function handleInputFocus() {
if (!visible) {
setVisible(true);
}
};
var handleInputKeyDown = function handleInputKeyDown(_ref3) {
var key = _ref3.key;
var keys = ["Tab", "Escape", "Enter"];
if (keys.includes(key)) {
setVisible(false);
inputRef.current.input.blur();
}
};
(0, _react.useImperativeHandle)(ref, function () {
return {
input: inputRef.current,
handleVisibleChange: handleVisibleChange
};
});
var classSet = (0, _classnames["default"])(className, "".concat(prefix, "-input"), "".concat(prefix, "-").concat(size), _defineProperty({}, "".concat(prefix, "-secondsAvailable"), secondsAvailable));
return _react["default"].createElement(_popover["default"], _extends({
arrowed: false,
onVisibleChange: handleVisibleChange,
popup: _react["default"].createElement("div", null, _react["default"].createElement(_TimeSelect["default"], {
onChange: handleClick,
currentHour: hour ? parseInt(hour, 10) : null,
disabledHours: disabledHours,
maxTime: maxTime,
minTime: minTime,
onlyHour: onlyHour,
selectedValue: hour,
size: size,
type: "hour"
}), !onlyHour && _react["default"].createElement(_TimeSelect["default"], {
disabledMinutes: disabledMinutes,
onChange: handleClick,
currentHour: hour ? parseInt(hour, 10) : null,
maxTime: maxTime,
minTime: minTime,
selectedValue: minute,
size: size,
type: "minute"
}), secondsAvailable && _react["default"].createElement(_TimeSelect["default"], {
disabledSeconds: disabledSeconds,
onChange: handleClick,
currentHour: hour ? parseInt(hour, 10) : null,
currentMinute: minute ? parseInt(minute, 10) : null,
maxTime: maxTime,
minTime: minTime,
selectedValue: second,
size: size,
type: "second"
})),
trigger: "click",
visible: visible
}, popoverProps), _react["default"].createElement(_input["default"], _extends({
className: classSet,
cleaveOptions: {
blocks: secondsAvailable ? [2, 2, 2] : [2, 2],
delimiter: ":"
},
disabled: disabled,
rightElement: _react["default"].createElement(_icon["default"], {
icon: "time-outlined"
}),
size: size,
value: inputValue,
onChange: handleInputChange,
onFocus: handleInputFocus,
onKeyDown: handleInputKeyDown,
ref: inputRef
}, otherProps)));
});
TimePicker.displayName = "TimePicker";
TimePicker.propTypes = {
className: _propTypes["default"].string,
closeOnSelect: _propTypes["default"].bool,
defaultValue: _propTypes["default"].string,
disabled: _propTypes["default"].bool,
disabledHours: _propTypes["default"].func,
disabledMinutes: _propTypes["default"].func,
disabledSeconds: _propTypes["default"].func,
intent: _propTypes["default"].oneOf(["normal", "primary", "success", "warning", "danger"]),
maxTime: _propTypes["default"].string,
minTime: _propTypes["default"].string,
onChange: _propTypes["default"].func,
onlyHour: _propTypes["default"].bool,
placeholder: _propTypes["default"].string,
size: _propTypes["default"].oneOf(["mini", "small", "medium", "large"]),
value: _propTypes["default"].string
};
TimePicker.defaultProps = {
className: "",
closeOnSelect: false,
defaultValue: null,
disabled: false,
disabledHours: noop,
disabledMinutes: noop,
disabledSeconds: noop,
intent: "normal",
maxTime: "24:00",
minTime: null,
onChange: noop,
onlyHour: false,
placeholder: "请选择",
secondsAvailable: false,
size: "small",
value: null
};
var _default = TimePicker;
exports["default"] = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwcmVmaXgiLCJub29wIiwiVGltZVBpY2tlciIsImZvcndhcmRSZWYiLCJyZWYiLCJjbGFzc05hbWUiLCJjbG9zZU9uU2VsZWN0IiwiZGVmYXVsdFZhbHVlIiwiZGlzYWJsZWQiLCJkaXNhYmxlZEhvdXJzIiwiZGlzYWJsZWRNaW51dGVzIiwiZGlzYWJsZWRTZWNvbmRzIiwibWF4VGltZSIsIm1pblRpbWUiLCJvbkNoYW5nZSIsIm9ubHlIb3VyIiwicGxhY2Vob2xkZXIiLCJwb3BvdmVyUHJvcHMiLCJzZWNvbmRzQXZhaWxhYmxlIiwic2l6ZVByb3AiLCJzaXplIiwidmFsdWUiLCJvdGhlclByb3BzIiwiZ2V0SW5pdGlhbFN0YXRlIiwidmFsdWVTdGF0ZSIsImV4dHJhY3RITVNGcm9tVGltZSIsImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJpbnB1dFZhbHVlIiwicHJldlZhbHVlUHJvcCIsInZpc2libGUiLCJpbml0aWFsU3RhdGUiLCJ1c2VNZW1vIiwidXNlU3RhdGUiLCJzZXRJbnB1dFZhbHVlIiwic2V0SG91ciIsInNldE1pbnV0ZSIsInNldFNlY29uZCIsInNldFByZXZWYWx1ZVByb3AiLCJzZXRWaXNpYmxlIiwibmV3SG91ciIsIm5ld01pbnV0ZSIsIm5ld1NlY29uZCIsImlucHV0UmVmIiwidXNlUmVmIiwidXNlQ29udGV4dCIsIkNvbmZpZ0NvbnRleHQiLCJzaXplQ29udGV4dCIsImdldENvbXB1dGVkU2l6ZSIsImhhbmRsZUNsaWNrIiwidmFsdWVOZXciLCJ0eXBlIiwidmFsdWVQcm9wIiwiaW5wdXRWYWx1ZU5vdyIsImlzVGltZUFmdGVyIiwidHJhbnNmb3JtVGltZVdpdGhTZWNvbmRzIiwiaXNUaW1lQmVmb3JlIiwidmFsdWVGaW5hbCIsImlzTGVnYWxUaW1lU3RyaW5nIiwidGltZSIsInNldFRpbWVvdXQiLCJoYW5kbGVWaXNpYmxlQ2hhbmdlIiwidmlzaWJsZU5ldyIsImlucHV0RWxlbWVudCIsImN1cnJlbnQiLCJpbnB1dCIsImRvY3VtZW50IiwiYWN0aXZlRWxlbWVudCIsIndpdGhTZWNvbmRzIiwibm9TZWNvbmRzIiwibmV3SW5wdXRWYWx1ZSIsImhhbmRsZUlucHV0Q2hhbmdlIiwiaW5wdXRWYWx1ZU5ldyIsInRhcmdldCIsImhvdXJOZXciLCJtaW51dGVOZXciLCJzZWNvbmROZXciLCJoYW5kbGVJbnB1dEZvY3VzIiwiaGFuZGxlSW5wdXRLZXlEb3duIiwia2V5Iiwia2V5cyIsImluY2x1ZGVzIiwiYmx1ciIsInVzZUltcGVyYXRpdmVIYW5kbGUiLCJjbGFzc1NldCIsImNsYXNzTmFtZXMiLCJwYXJzZUludCIsImJsb2NrcyIsImRlbGltaXRlciIsImRpc3BsYXlOYW1lIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwic3RyaW5nIiwiYm9vbCIsImZ1bmMiLCJpbnRlbnQiLCJvbmVPZiIsImRlZmF1bHRQcm9wcyJdLCJzb3VyY2VzIjpbIi4uLy4uL2NvbXBvbmVudHMvdGltZS1waWNrZXIvVGltZVBpY2tlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7XG4gIGZvcndhcmRSZWYsXG4gIHVzZUNvbnRleHQsXG4gIHVzZUltcGVyYXRpdmVIYW5kbGUsXG4gIHVzZVJlZixcbiAgdXNlU3RhdGUsXG4gIHVzZU1lbW8sXG59IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gXCJjbGFzc25hbWVzXCJcbmltcG9ydCB7IENvbmZpZ0NvbnRleHQsIGdldENvbXB1dGVkU2l6ZSB9IGZyb20gXCIuLi9jb25maWctcHJvdmlkZXJcIlxuaW1wb3J0IEljb24gZnJvbSBcIi4uL2ljb25cIlxuaW1wb3J0IElucHV0IGZyb20gXCIuLi9pbnB1dFwiXG5pbXBvcnQgUG9wb3ZlciwgeyBJUG9wb3ZlclByb3BzIH0gZnJvbSBcIi4uL3BvcG92ZXJcIlxuaW1wb3J0IFRpbWVTZWxlY3QgZnJvbSBcIi4vVGltZVNlbGVjdFwiXG5pbXBvcnQgXCIuL3N0eWxlXCJcbmltcG9ydCB7XG4gIHRyYW5zZm9ybVRpbWVXaXRoU2Vjb25kcyxcbiAgZXh0cmFjdEhNU0Zyb21UaW1lLFxuICBpc0xlZ2FsVGltZVN0cmluZyxcbiAgaXNUaW1lQWZ0ZXIsXG4gIGlzVGltZUJlZm9yZSxcbn0gZnJvbSBcIi4vY29yZVwiXG5cbmNvbnN0IHByZWZpeCA9IFwiYWR1aS10aW1lXCJcbmNvbnN0IG5vb3AgPSAoKSA9PiB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIElUaW1lUGlja2VyUHJvcHMge1xuICBba2V5OiBzdHJpbmddOiBhbnlcbiAgLyoqXG4gICAqIOmZhOWKoOexu+WQjVxuICAgKi9cbiAgY2xhc3NOYW1lPzogc3RyaW5nXG4gIC8qKlxuICAgKiDmmK/lkKblnKjpgInmi6nlkI7vvIzmtojlpLEgUG9wb3ZlclxuICAgKi9cbiAgY2xvc2VPblNlbGVjdD86IGJvb2xlYW5cbiAgLyoqXG4gICAqIOWGhemDqOmpseWKqO+8jOm7mOiupOmAieaLqeaXtumXtFxuICAgKi9cbiAgZGVmYXVsdFZhbHVlPzogbnVsbCB8IHN0cmluZ1xuICAvKipcbiAgICog5piv5ZCm56aB55SoXG4gICAqL1xuICBkaXNhYmxlZD86IGJvb2xlYW5cbiAgLyoqXG4gICAqIOemgeatoumAieaLqeeahOWwj+aXtlxuICAgKi9cbiAgZGlzYWJsZWRIb3Vycz86IChob3VyPzogc3RyaW5nIHwgbnVsbCkgPT4gYm9vbGVhbiB8IHZvaWRcbiAgLyoqXG4gICAqIOemgeatoumAieaLqeeahOWIhumSn1xuICAgKi9cbiAgZGlzYWJsZWRNaW51dGVzPzogKG1pbnV0ZT86IHN0cmluZyB8IG51bGwpID0+IGJvb2xlYW4gfCB2b2lkXG4gIC8qKlxuICAgKiDnpoHmraLpgInmi6nnmoTnp5JcbiAgICovXG4gIGRpc2FibGVkU2Vjb25kcz86IChzZWNvbmQ/OiBzdHJpbmcgfCBudWxsKSA9PiBib29sZWFuIHwgdm9pZFxuICAvKipcbiAgICog6K6+572u6L6T5YWl5qGG57G75Z6LXG4gICAqL1xuICBpbnRlbnQ/OiBcIm5vcm1hbFwiIHwgXCJwcmltYXJ5XCIgfCBcInN1Y2Nlc3NcIiB8IFwid2FybmluZ1wiIHwgXCJkYW5nZXJcIlxuICAvKipcbiAgICog5Y+v6YCJ5pe26Ze055qE5pyA5aSn5YC8XG4gICAqL1xuICBtYXhUaW1lPzogc3RyaW5nIHwgbnVsbFxuICAvKipcbiAgICog5Y+v6YCJ5pe26Ze055qE5pyA5bCP5YC8XG4gICAqL1xuICBtaW5UaW1lPzogc3RyaW5nIHwgbnVsbFxuICAvKipcbiAgICog5pe26Ze05pS55Y+Y55qEIGhhbmRsZXJcbiAgICovXG4gIG9uQ2hhbmdlPzogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWRcbiAgLyoqXG4gICAqIOWIpOaWreaYr+WQpuaYr+aVtOaVsFxuICAgKi9cbiAgb25seUhvdXI/OiBib29sZWFuXG4gIC8qKlxuICAgKiDljaDkvY3lrZfnrKZcbiAgICovXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nXG4gIC8qKlxuICAgKiDkvKDlhaUgUG9wb3ZlciDnmoQgcHJvcHNcbiAgICovXG4gIHBvcG92ZXJQcm9wcz86IElQb3BvdmVyUHJvcHNcbiAgLyoqXG4gICAqIDIwMjIxMjE2OiDmlK/mjIHnp5LnmoTpgInmi6lcbiAgICovXG4gIHNlY29uZHNBdmFpbGFibGU/OiBib29sZWFuXG4gIC8qKlxuICAgKiDorr7nva7lsLrlr7hcbiAgICovXG4gIHNpemU/OiBcIm1pbmlcIiB8IFwic21hbGxcIiB8IFwibWVkaXVtXCIgfCBcImxhcmdlXCJcbiAgLyoqXG4gICAqIOWklumDqOaOp+WItu+8muW9k+WJjeaXtumXtFxuICAgKi9cbiAgdmFsdWU/OiBudWxsIHwgc3RyaW5nXG59XG5cbi8qKlxuICog5pe26Ze06YCJ5oup5Zmo55So5LqO5LqG6Kej5b2T5YmN5bey6YCJ5pe26Ze077yM6YCJ5oup5oiW6L6T5YWl6ZyA6KaB55qE5pe26Ze044CB5pe26Ze06IyD5Zu0562J44CCXG4gKi9cbmNvbnN0IFRpbWVQaWNrZXI6IFJlYWN0LkZvcndhcmRSZWZFeG90aWNDb21wb25lbnQ8XG4gIElUaW1lUGlja2VyUHJvcHMgJiBSZWFjdC5SZWZBdHRyaWJ1dGVzPGFueT5cbj4gPSBmb3J3YXJkUmVmKFxuICAoXG4gICAge1xuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY2xvc2VPblNlbGVjdCxcbiAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgIGRpc2FibGVkLFxuICAgICAgZGlzYWJsZWRIb3VycyxcbiAgICAgIGRpc2FibGVkTWludXRlcyxcbiAgICAgIGRpc2FibGVkU2Vjb25kcyxcbiAgICAgIG1heFRpbWUsXG4gICAgICBtaW5UaW1lLFxuICAgICAgb25DaGFuZ2UsXG4gICAgICBvbmx5SG91cixcbiAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgcG9wb3ZlclByb3BzLFxuICAgICAgc2Vjb25kc0F2YWlsYWJsZSA9IGZhbHNlLFxuICAgICAgc2l6ZTogc2l6ZVByb3AsXG4gICAgICB2YWx1ZSxcbiAgICAgIC4uLm90aGVyUHJvcHNcbiAgICB9OiBJVGltZVBpY2tlclByb3BzLFxuICAgIHJlZlxuICApID0+IHtcbiAgICBjb25zdCBnZXRJbml0aWFsU3RhdGUgPSAoKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZVN0YXRlID0gdmFsdWUgIT09IG51bGwgPyB2YWx1ZSA6IGRlZmF1bHRWYWx1ZVxuICAgICAgY29uc3QgeyBob3VyLCBtaW51dGUsIHNlY29uZCB9ID0gZXh0cmFjdEhNU0Zyb21UaW1lKHZhbHVlU3RhdGUpXG4gICAgICByZXR1cm4ge1xuICAgICAgICBob3VyLFxuICAgICAgICBpbnB1dFZhbHVlOiB2YWx1ZVN0YXRlIHx8IFwiXCIsXG4gICAgICAgIG1pbnV0ZTogb25seUhvdXIgPyBcIjAwXCIgOiBtaW51dGUsXG4gICAgICAgIHNlY29uZDogc2Vjb25kc0F2YWlsYWJsZSA/IHNlY29uZCA6IFwiMDBcIixcbiAgICAgICAgcHJldlZhbHVlUHJvcDogdmFsdWVTdGF0ZSB8fCBcIlwiLFxuICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgaW5pdGlhbFN0YXRlID0gdXNlTWVtbyhnZXRJbml0aWFsU3RhdGUsIFtdKVxuICAgIGNvbnN0IFtpbnB1dFZhbHVlLCBzZXRJbnB1dFZhbHVlXSA9IHVzZVN0YXRlKGluaXRpYWxTdGF0ZS5pbnB1dFZhbHVlKVxuICAgIGNvbnN0IFtob3VyLCBzZXRIb3VyXSA9IHVzZVN0YXRlKGluaXRpYWxTdGF0ZS5ob3VyKVxuICAgIGNvbnN0IFttaW51dGUsIHNldE1pbnV0ZV0gPSB1c2VTdGF0ZShpbml0aWFsU3RhdGUubWludXRlKVxuICAgIGNvbnN0IFtzZWNvbmQsIHNldFNlY29uZF0gPSB1c2VTdGF0ZShpbml0aWFsU3RhdGUuc2Vjb25kKVxuICAgIGNvbnN0IFtwcmV2VmFsdWVQcm9wLCBzZXRQcmV2VmFsdWVQcm9wXSA9IHVzZVN0YXRlKFxuICAgICAgaW5pdGlhbFN0YXRlLnByZXZWYWx1ZVByb3BcbiAgICApXG4gICAgY29uc3QgW3Zpc2libGUsIHNldFZpc2libGVdID0gdXNlU3RhdGUoaW5pdGlhbFN0YXRlLnZpc2libGUpXG5cbiAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgcHJldlZhbHVlUHJvcCAhPT0gdmFsdWUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgaG91cjogbmV3SG91cixcbiAgICAgICAgbWludXRlOiBuZXdNaW51dGUsXG4gICAgICAgIHNlY29uZDogbmV3U2Vjb25kLFxuICAgICAgfSA9IGV4dHJhY3RITVNGcm9tVGltZSh2YWx1ZSlcblxuICAgICAgc2V0SW5wdXRWYWx1ZSh2YWx1ZSB8fCBcIlwiKVxuICAgICAgc2V0SG91cihuZXdIb3VyKVxuICAgICAgc2V0TWludXRlKG9ubHlIb3VyID8gXCIwMFwiIDogbmV3TWludXRlKVxuICAgICAgc2V0U2Vjb25kKHNlY29uZHNBdmFpbGFibGUgPyBuZXdTZWNvbmQgOiBcIjAwXCIpXG4gICAgICBzZXRQcmV2VmFsdWVQcm9wKHZhbHVlIHx8IFwiXCIpXG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXRSZWYgPSB1c2VSZWY8YW55PihudWxsKVxuXG4gICAgY29uc3QgeyBzaXplOiBzaXplQ29udGV4dCB9ID0gdXNlQ29udGV4dChDb25maWdDb250ZXh0KVxuXG4gICAgY29uc3Qgc2l6ZSA9IGdldENvbXB1dGVkU2l6ZShzaXplUHJvcCwgc2l6ZUNvbnRleHQpXG5cbiAgICBjb25zdCBoYW5kbGVDbGljayA9ICh2YWx1ZU5ldzogc3RyaW5nLCB0eXBlOiBcImhvdXJcIiB8IFwibWludXRlXCIpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlUHJvcCA9IHZhbHVlXG5cbiAgICAgIGxldCBpbnB1dFZhbHVlTm93ID0gXCJcIlxuICAgICAgaWYgKHNlY29uZHNBdmFpbGFibGUpIHtcbiAgICAgICAgaWYgKHR5cGUgPT09IFwiaG91clwiKSB7XG4gICAgICAgICAgaW5wdXRWYWx1ZU5vdyA9IGAke3ZhbHVlTmV3fToke21pbnV0ZSB8fCBcIlwifToke3NlY29uZCB8fCBcIlwifWBcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBcIm1pbnV0ZVwiKSB7XG4gICAgICAgICAgaW5wdXRWYWx1ZU5vdyA9IGAke2hvdXIgfHwgXCJcIn06JHt2YWx1ZU5ld306JHtzZWNvbmQgfHwgXCJcIn1gXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW5wdXRWYWx1ZU5vdyA9IGAke2hvdXIgfHwgXCJcIn06JHttaW51dGUgfHwgXCJcIn06JHt2YWx1ZU5ld31gXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlucHV0VmFsdWVOb3cgPVxuICAgICAgICAgIHR5cGUgPT09IFwiaG91clwiXG4gICAgICAgICAgICA/IGAke3ZhbHVlTmV3fToke21pbnV0ZSB8fCBcIlwifWBcbiAgICAgICAgICAgIDogYCR7aG91ciB8fCBcIlwifToke3ZhbHVlTmV3fWBcbiAgICAgIH1cblxuICAgICAgaWYgKG1heFRpbWUgJiYgaXNUaW1lQWZ0ZXIoaW5wdXRWYWx1ZU5vdywgbWF4VGltZSkpIHtcbiAgICAgICAgaW5wdXRWYWx1ZU5vdyA9IHNlY29uZHNBdmFpbGFibGVcbiAgICAgICAgICA/IHRyYW5zZm9ybVRpbWVXaXRoU2Vjb25kcyhtYXhUaW1lKVxuICAgICAgICAgIDogbWF4VGltZVxuICAgICAgfSBlbHNlIGlmIChtaW5UaW1lICYmIGlzVGltZUJlZm9yZShpbnB1dFZhbHVlTm93LCBtaW5UaW1lKSkge1xuICAgICAgICBpbnB1dFZhbHVlTm93ID0gc2Vjb25kc0F2YWlsYWJsZVxuICAgICAgICAgID8gdHJhbnNmb3JtVGltZVdpdGhTZWNvbmRzKG1pblRpbWUpXG4gICAgICAgICAgOiBtaW5UaW1lXG4gICAgICB9XG5cbiAgICAgIGlmICh2YWx1ZVByb3AgPT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgdmFsdWVGaW5hbCA9IHtcbiAgICAgICAgICBpbnB1dFZhbHVlTm93LFxuICAgICAgICAgIC4uLmV4dHJhY3RITVNGcm9tVGltZShpbnB1dFZhbHVlTm93KSxcbiAgICAgICAgfVxuICAgICAgICBzZXRIb3VyKHZhbHVlRmluYWwuaG91cilcbiAgICAgICAgc2V0TWludXRlKHZhbHVlRmluYWwubWludXRlKVxuICAgICAgICBzZXRTZWNvbmQodmFsdWVGaW5hbC5zZWNvbmQpXG4gICAgICAgIHNldElucHV0VmFsdWUodmFsdWVGaW5hbC5pbnB1dFZhbHVlTm93KVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNMZWdhbFRpbWVTdHJpbmcoeyB0aW1lOiBpbnB1dFZhbHVlLCBvbmx5SG91ciB9KSkge1xuICAgICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgICBvbkNoYW5nZShpbnB1dFZhbHVlTm93KVxuICAgICAgICB9XG4gICAgICAgIGlmIChjbG9zZU9uU2VsZWN0KSB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBzZXRWaXNpYmxlKGZhbHNlKVxuICAgICAgICAgIH0sIDEyMClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZVZpc2libGVDaGFuZ2UgPSAodmlzaWJsZU5ldzogYm9vbGVhbikgPT4ge1xuICAgICAgY29uc3QgeyBpbnB1dDogaW5wdXRFbGVtZW50IH0gPSBpbnB1dFJlZi5jdXJyZW50XG4gICAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3QgeyBhY3RpdmVFbGVtZW50IH0gPSBkb2N1bWVudFxuICAgICAgICBpZiAodmlzaWJsZU5ldyB8fCAoIXZpc2libGVOZXcgJiYgaW5wdXRFbGVtZW50ICE9PSBhY3RpdmVFbGVtZW50KSkge1xuICAgICAgICAgIGNvbnN0IHdpdGhTZWNvbmRzID1cbiAgICAgICAgICAgIGhvdXIgJiYgbWludXRlICYmIHNlY29uZCA/IGAke2hvdXJ9OiR7bWludXRlfToke3NlY29uZH1gIDogXCJcIlxuICAgICAgICAgIGNvbnN0IG5vU2Vjb25kcyA9IGhvdXIgJiYgbWludXRlID8gYCR7aG91cn06JHttaW51dGV9YCA6IFwiXCJcbiAgICAgICAgICBjb25zdCBuZXdJbnB1dFZhbHVlID0gc2Vjb25kc0F2YWlsYWJsZSA/IHdpdGhTZWNvbmRzIDogbm9TZWNvbmRzXG4gICAgICAgICAgaWYgKCF2aXNpYmxlTmV3ICYmIGlucHV0VmFsdWUgIT09IG5ld0lucHV0VmFsdWUpIHtcbiAgICAgICAgICAgIHNldElucHV0VmFsdWUobmV3SW5wdXRWYWx1ZSlcbiAgICAgICAgICB9XG4gICAgICAgICAgc2V0VmlzaWJsZSh2aXNpYmxlTmV3KVxuICAgICAgICB9XG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZUlucHV0Q2hhbmdlID0gKHtcbiAgICAgIHRhcmdldDogeyB2YWx1ZTogaW5wdXRWYWx1ZU5ldyB9LFxuICAgIH06IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICBzZXRJbnB1dFZhbHVlKGlucHV0VmFsdWVOZXcpXG4gICAgICBpZiAoXG4gICAgICAgIGlucHV0VmFsdWVOZXcgPT09IFwiXCIgfHxcbiAgICAgICAgKGlzTGVnYWxUaW1lU3RyaW5nKHtcbiAgICAgICAgICB0aW1lOiBpbnB1dFZhbHVlTmV3LFxuICAgICAgICAgIG9ubHlIb3VyLFxuICAgICAgICB9KSAmJlxuICAgICAgICAgICFpc1RpbWVBZnRlcihpbnB1dFZhbHVlTmV3LCBtYXhUaW1lKSAmJlxuICAgICAgICAgICFpc1RpbWVCZWZvcmUoaW5wdXRWYWx1ZU5ldywgbWluVGltZSkpXG4gICAgICApIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGhvdXI6IGhvdXJOZXcsXG4gICAgICAgICAgbWludXRlOiBtaW51dGVOZXcsXG4gICAgICAgICAgc2Vjb25kOiBzZWNvbmROZXcsXG4gICAgICAgIH0gPSBleHRyYWN0SE1TRnJvbVRpbWUoaW5wdXRWYWx1ZU5ldylcbiAgICAgICAgaWYgKFxuICAgICAgICAgICEoZGlzYWJsZWRIb3VycyAmJiBkaXNhYmxlZEhvdXJzKGhvdXJOZXcpKSAmJlxuICAgICAgICAgICEoZGlzYWJsZWRNaW51dGVzICYmIGRpc2FibGVkTWludXRlcyhtaW51dGVOZXcpKSAmJlxuICAgICAgICAgICEoZGlzYWJsZWRTZWNvbmRzICYmIGRpc2FibGVkU2Vjb25kcyhzZWNvbmROZXcpKVxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgICAgIG9uQ2hhbmdlKGlucHV0VmFsdWVOZXcpXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgc2V0SG91cihob3VyTmV3KVxuICAgICAgICAgICAgc2V0TWludXRlKG9ubHlIb3VyID8gXCIwMFwiIDogbWludXRlTmV3KVxuICAgICAgICAgICAgc2V0U2Vjb25kKHNlY29uZHNBdmFpbGFibGUgPyBzZWNvbmROZXcgOiBcIjAwXCIpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlSW5wdXRGb2N1cyA9ICgpID0+IHtcbiAgICAgIGlmICghdmlzaWJsZSkge1xuICAgICAgICBzZXRWaXNpYmxlKHRydWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlSW5wdXRLZXlEb3duID0gKHtcbiAgICAgIGtleSxcbiAgICB9OiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICBjb25zdCBrZXlzID0gW1wiVGFiXCIsIFwiRXNjYXBlXCIsIFwiRW50ZXJcIl1cbiAgICAgIGlmIChrZXlzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgc2V0VmlzaWJsZShmYWxzZSlcbiAgICAgICAgaW5wdXRSZWYuY3VycmVudC5pbnB1dC5ibHVyKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgKCkgPT4gKHtcbiAgICAgIGlucHV0OiBpbnB1dFJlZi5jdXJyZW50LFxuICAgICAgaGFuZGxlVmlzaWJsZUNoYW5nZSxcbiAgICB9KSlcblxuICAgIGNvbnN0IGNsYXNzU2V0ID0gY2xhc3NOYW1lcyhcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGAke3ByZWZpeH0taW5wdXRgLFxuICAgICAgYCR7cHJlZml4fS0ke3NpemV9YCxcbiAgICAgIHtcbiAgICAgICAgW2Ake3ByZWZpeH0tc2Vjb25kc0F2YWlsYWJsZWBdOiBzZWNvbmRzQXZhaWxhYmxlLFxuICAgICAgfVxuICAgIClcblxuICAgIHJldHVybiAoXG4gICAgICA8UG9wb3ZlclxuICAgICAgICBhcnJvd2VkPXtmYWxzZX1cbiAgICAgICAgb25WaXNpYmxlQ2hhbmdlPXtoYW5kbGVWaXNpYmxlQ2hhbmdlfVxuICAgICAgICBwb3B1cD17XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxUaW1lU2VsZWN0XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDbGlja31cbiAgICAgICAgICAgICAgY3VycmVudEhvdXI9e2hvdXIgPyBwYXJzZUludChob3VyLCAxMCkgOiBudWxsfVxuICAgICAgICAgICAgICBkaXNhYmxlZEhvdXJzPXtkaXNhYmxlZEhvdXJzfVxuICAgICAgICAgICAgICBtYXhUaW1lPXttYXhUaW1lfVxuICAgICAgICAgICAgICBtaW5UaW1lPXttaW5UaW1lfVxuICAgICAgICAgICAgICBvbmx5SG91cj17b25seUhvdXJ9XG4gICAgICAgICAgICAgIHNlbGVjdGVkVmFsdWU9e2hvdXJ9XG4gICAgICAgICAgICAgIHNpemU9e3NpemV9XG4gICAgICAgICAgICAgIHR5cGU9XCJob3VyXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB7IW9ubHlIb3VyICYmIChcbiAgICAgICAgICAgICAgPFRpbWVTZWxlY3RcbiAgICAgICAgICAgICAgICBkaXNhYmxlZE1pbnV0ZXM9e2Rpc2FibGVkTWludXRlc31cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2xpY2t9XG4gICAgICAgICAgICAgICAgY3VycmVudEhvdXI9e2hvdXIgPyBwYXJzZUludChob3VyLCAxMCkgOiBudWxsfVxuICAgICAgICAgICAgICAgIG1heFRpbWU9e21heFRpbWV9XG4gICAgICAgICAgICAgICAgbWluVGltZT17bWluVGltZX1cbiAgICAgICAgICAgICAgICBzZWxlY3RlZFZhbHVlPXttaW51dGV9XG4gICAgICAgICAgICAgICAgc2l6ZT17c2l6ZX1cbiAgICAgICAgICAgICAgICB0eXBlPVwibWludXRlXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7c2Vjb25kc0F2YWlsYWJsZSAmJiAoXG4gICAgICAgICAgICAgIDxUaW1lU2VsZWN0XG4gICAgICAgICAgICAgICAgZGlzYWJsZWRTZWNvbmRzPXtkaXNhYmxlZFNlY29uZHN9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNsaWNrfVxuICAgICAgICAgICAgICAgIGN1cnJlbnRIb3VyPXtob3VyID8gcGFyc2VJbnQoaG91ciwgMTApIDogbnVsbH1cbiAgICAgICAgICAgICAgICBjdXJyZW50TWludXRlPXttaW51dGUgPyBwYXJzZUludChtaW51dGUsIDEwKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgbWF4VGltZT17bWF4VGltZX1cbiAgICAgICAgICAgICAgICBtaW5UaW1lPXttaW5UaW1lfVxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVmFsdWU9e3NlY29uZH1cbiAgICAgICAgICAgICAgICBzaXplPXtzaXplfVxuICAgICAgICAgICAgICAgIHR5cGU9XCJzZWNvbmRcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICB0cmlnZ2VyPVwiY2xpY2tcIlxuICAgICAgICB2aXNpYmxlPXt2aXNpYmxlfVxuICAgICAgICB7Li4ucG9wb3ZlclByb3BzfVxuICAgICAgPlxuICAgICAgICA8SW5wdXRcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzU2V0fVxuICAgICAgICAgIGNsZWF2ZU9wdGlvbnM9e3tcbiAgICAgICAgICAgIGJsb2Nrczogc2Vjb25kc0F2YWlsYWJsZSA/IFsyLCAyLCAyXSA6IFsyLCAyXSxcbiAgICAgICAgICAgIGRlbGltaXRlcjogXCI6XCIsXG4gICAgICAgICAgfX1cbiAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgcmlnaHRFbGVtZW50PXs8SWNvbiBpY29uPVwidGltZS1vdXRsaW5lZFwiIC8+fVxuICAgICAgICAgIHNpemU9e3NpemV9XG4gICAgICAgICAgdmFsdWU9e2lucHV0VmFsdWV9XG4gICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUlucHV0Q2hhbmdlfVxuICAgICAgICAgIG9uRm9jdXM9e2hhbmRsZUlucHV0Rm9jdXN9XG4gICAgICAgICAgb25LZXlEb3duPXtoYW5kbGVJbnB1dEtleURvd259XG4gICAgICAgICAgcmVmPXtpbnB1dFJlZn1cbiAgICAgICAgICB7Li4ub3RoZXJQcm9wc31cbiAgICAgICAgLz5cbiAgICAgIDwvUG9wb3Zlcj5cbiAgICApXG4gIH1cbilcblxuVGltZVBpY2tlci5kaXNwbGF5TmFtZSA9IFwiVGltZVBpY2tlclwiXG5cblRpbWVQaWNrZXIucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICog6ZmE5Yqg57G75ZCNXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiDmmK/lkKblnKjpgInmi6nlkI7vvIzmtojlpLEgUG9wb3ZlclxuICAgKi9cbiAgY2xvc2VPblNlbGVjdDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiDlhoXpg6jpqbHliqjvvIzpu5jorqTpgInmi6nml7bpl7RcbiAgICovXG4gIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIOaYr+WQpuemgeeUqFxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICog56aB5q2i6YCJ5oup55qE5bCP5pe2XG4gICAqL1xuICBkaXNhYmxlZEhvdXJzOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIOemgeatoumAieaLqeeahOWIhumSn1xuICAgKi9cbiAgZGlzYWJsZWRNaW51dGVzOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIOemgeatoumAieaLqeeahOenklxuICAgKi9cbiAgZGlzYWJsZWRTZWNvbmRzOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIOiuvue9rui+k+WFpeahhuexu+Wei1xuICAgKi9cbiAgaW50ZW50OiBQcm9wVHlwZXMub25lT2YoW1xuICAgIFwibm9ybWFsXCIsXG4gICAgXCJwcmltYXJ5XCIsXG4gICAgXCJzdWNjZXNzXCIsXG4gICAgXCJ3YXJuaW5nXCIsXG4gICAgXCJkYW5nZXJcIixcbiAgXSksXG4gIC8qKlxuICAgKiDlj6/pgInml7bpl7TnmoTmnIDlpKflgLxcbiAgICovXG4gIG1heFRpbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiDlj6/pgInml7bpl7TnmoTmnIDlsI/lgLxcbiAgICovXG4gIG1pblRpbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiDml7bpl7TmlLnlj5jnmoQgaGFuZGxlclxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICog5Yik5pat5piv5ZCm5piv5pW05pWwXG4gICAqL1xuICBvbmx5SG91cjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiDljaDkvY3lrZfnrKZcbiAgICovXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICog6K6+572u5bC65a+4XG4gICAqL1xuICBzaXplOiBQcm9wVHlwZXMub25lT2YoW1wibWluaVwiLCBcInNtYWxsXCIsIFwibWVkaXVtXCIsIFwibGFyZ2VcIl0pLFxuICAvKipcbiAgICog5aSW6YOo5o6n5Yi277ya5b2T5YmN5pe26Ze0XG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbn1cblxuVGltZVBpY2tlci5kZWZhdWx0UHJvcHMgPSB7XG4gIGNsYXNzTmFtZTogXCJcIixcbiAgY2xvc2VPblNlbGVjdDogZmFsc2UsXG4gIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgZGlzYWJsZWQ6IGZhbHNlLFxuICBkaXNhYmxlZEhvdXJzOiBub29wLFxuICBkaXNhYmxlZE1pbnV0ZXM6IG5vb3AsXG4gIGRpc2FibGVkU2Vjb25kczogbm9vcCxcbiAgaW50ZW50OiBcIm5vcm1hbFwiLFxuICBtYXhUaW1lOiBcIjI0OjAwXCIsXG4gIG1pblRpbWU6IG51bGwsXG4gIG9uQ2hhbmdlOiBub29wLFxuICBvbmx5SG91cjogZmFsc2UsXG4gIHBsYWNlaG9sZGVyOiBcIuivt+mAieaLqVwiLFxuICBzZWNvbmRzQXZhaWxhYmxlOiBmYWxzZSxcbiAgc2l6ZTogXCJzbWFsbFwiLFxuICB2YWx1ZTogbnVsbCxcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGlt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