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>

345 lines (294 loc) 44.2 kB
var _excluded = ["className", "closeOnSelect", "defaultValue", "disabled", "disabledHours", "disabledMinutes", "disabledSeconds", "maxTime", "minTime", "onChange", "onlyHour", "placeholder", "popoverProps", "secondsAvailable", "size", "value"]; 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; } import React, { forwardRef, useContext, useImperativeHandle, useRef, useState, useMemo } from "react"; import PropTypes from "prop-types"; import classNames from "classnames"; import { ConfigContext, getComputedSize } from "../config-provider"; import Icon from "../icon"; import Input from "../input"; import Popover from "../popover"; import TimeSelect from "./TimeSelect"; import "./style"; import { transformTimeWithSeconds, extractHMSFromTime, isLegalTimeString, isTimeAfter, isTimeBefore } from "./core"; var prefix = "adui-time"; var noop = function noop() {}; var TimePicker = 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 = 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 = useMemo(getInitialState, []); var _useState = useState(initialState.inputValue), _useState2 = _slicedToArray(_useState, 2), inputValue = _useState2[0], setInputValue = _useState2[1]; var _useState3 = useState(initialState.hour), _useState4 = _slicedToArray(_useState3, 2), hour = _useState4[0], setHour = _useState4[1]; var _useState5 = useState(initialState.minute), _useState6 = _slicedToArray(_useState5, 2), minute = _useState6[0], setMinute = _useState6[1]; var _useState7 = useState(initialState.second), _useState8 = _slicedToArray(_useState7, 2), second = _useState8[0], setSecond = _useState8[1]; var _useState9 = useState(initialState.prevValueProp), _useState10 = _slicedToArray(_useState9, 2), prevValueProp = _useState10[0], setPrevValueProp = _useState10[1]; var _useState11 = useState(initialState.visible), _useState12 = _slicedToArray(_useState11, 2), visible = _useState12[0], setVisible = _useState12[1]; if (value !== null && prevValueProp !== value) { var _extractHMSFromTime2 = 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 = useRef(null); var _useContext = useContext(ConfigContext), sizeContext = _useContext.size; var size = 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 && isTimeAfter(inputValueNow, maxTime)) { inputValueNow = secondsAvailable ? transformTimeWithSeconds(maxTime) : maxTime; } else if (minTime && isTimeBefore(inputValueNow, minTime)) { inputValueNow = secondsAvailable ? transformTimeWithSeconds(minTime) : minTime; } if (valueProp === null) { var valueFinal = _objectSpread({ inputValueNow: inputValueNow }, extractHMSFromTime(inputValueNow)); setHour(valueFinal.hour); setMinute(valueFinal.minute); setSecond(valueFinal.second); setInputValue(valueFinal.inputValueNow); } if (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 === "" || isLegalTimeString({ time: inputValueNew, onlyHour: onlyHour }) && !isTimeAfter(inputValueNew, maxTime) && !isTimeBefore(inputValueNew, minTime)) { var _extractHMSFromTime3 = 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(); } }; useImperativeHandle(ref, function () { return { input: inputRef.current, handleVisibleChange: handleVisibleChange }; }); var classSet = classNames(className, "".concat(prefix, "-input"), "".concat(prefix, "-").concat(size), _defineProperty({}, "".concat(prefix, "-secondsAvailable"), secondsAvailable)); return React.createElement(Popover, _extends({ arrowed: false, onVisibleChange: handleVisibleChange, popup: React.createElement("div", null, React.createElement(TimeSelect, { onChange: handleClick, currentHour: hour ? parseInt(hour, 10) : null, disabledHours: disabledHours, maxTime: maxTime, minTime: minTime, onlyHour: onlyHour, selectedValue: hour, size: size, type: "hour" }), !onlyHour && React.createElement(TimeSelect, { disabledMinutes: disabledMinutes, onChange: handleClick, currentHour: hour ? parseInt(hour, 10) : null, maxTime: maxTime, minTime: minTime, selectedValue: minute, size: size, type: "minute" }), secondsAvailable && React.createElement(TimeSelect, { 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.createElement(Input, _extends({ className: classSet, cleaveOptions: { blocks: secondsAvailable ? [2, 2, 2] : [2, 2], delimiter: ":" }, disabled: disabled, rightElement: React.createElement(Icon, { icon: "time-outlined" }), size: size, value: inputValue, onChange: handleInputChange, onFocus: handleInputFocus, onKeyDown: handleInputKeyDown, ref: inputRef }, otherProps))); }); TimePicker.displayName = "TimePicker"; TimePicker.propTypes = { className: PropTypes.string, closeOnSelect: PropTypes.bool, defaultValue: PropTypes.string, disabled: PropTypes.bool, disabledHours: PropTypes.func, disabledMinutes: PropTypes.func, disabledSeconds: PropTypes.func, intent: PropTypes.oneOf(["normal", "primary", "success", "warning", "danger"]), maxTime: PropTypes.string, minTime: PropTypes.string, onChange: PropTypes.func, onlyHour: PropTypes.bool, placeholder: PropTypes.string, size: PropTypes.oneOf(["mini", "small", "medium", "large"]), value: PropTypes.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 }; export default TimePicker; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsImZvcndhcmRSZWYiLCJ1c2VDb250ZXh0IiwidXNlSW1wZXJhdGl2ZUhhbmRsZSIsInVzZVJlZiIsInVzZVN0YXRlIiwidXNlTWVtbyIsIlByb3BUeXBlcyIsImNsYXNzTmFtZXMiLCJDb25maWdDb250ZXh0IiwiZ2V0Q29tcHV0ZWRTaXplIiwiSWNvbiIsIklucHV0IiwiUG9wb3ZlciIsIlRpbWVTZWxlY3QiLCJ0cmFuc2Zvcm1UaW1lV2l0aFNlY29uZHMiLCJleHRyYWN0SE1TRnJvbVRpbWUiLCJpc0xlZ2FsVGltZVN0cmluZyIsImlzVGltZUFmdGVyIiwiaXNUaW1lQmVmb3JlIiwicHJlZml4Iiwibm9vcCIsIlRpbWVQaWNrZXIiLCJyZWYiLCJjbGFzc05hbWUiLCJjbG9zZU9uU2VsZWN0IiwiZGVmYXVsdFZhbHVlIiwiZGlzYWJsZWQiLCJkaXNhYmxlZEhvdXJzIiwiZGlzYWJsZWRNaW51dGVzIiwiZGlzYWJsZWRTZWNvbmRzIiwibWF4VGltZSIsIm1pblRpbWUiLCJvbkNoYW5nZSIsIm9ubHlIb3VyIiwicGxhY2Vob2xkZXIiLCJwb3BvdmVyUHJvcHMiLCJzZWNvbmRzQXZhaWxhYmxlIiwic2l6ZVByb3AiLCJzaXplIiwidmFsdWUiLCJvdGhlclByb3BzIiwiZ2V0SW5pdGlhbFN0YXRlIiwidmFsdWVTdGF0ZSIsImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJpbnB1dFZhbHVlIiwicHJldlZhbHVlUHJvcCIsInZpc2libGUiLCJpbml0aWFsU3RhdGUiLCJzZXRJbnB1dFZhbHVlIiwic2V0SG91ciIsInNldE1pbnV0ZSIsInNldFNlY29uZCIsInNldFByZXZWYWx1ZVByb3AiLCJzZXRWaXNpYmxlIiwibmV3SG91ciIsIm5ld01pbnV0ZSIsIm5ld1NlY29uZCIsImlucHV0UmVmIiwic2l6ZUNvbnRleHQiLCJoYW5kbGVDbGljayIsInZhbHVlTmV3IiwidHlwZSIsInZhbHVlUHJvcCIsImlucHV0VmFsdWVOb3ciLCJ2YWx1ZUZpbmFsIiwidGltZSIsInNldFRpbWVvdXQiLCJoYW5kbGVWaXNpYmxlQ2hhbmdlIiwidmlzaWJsZU5ldyIsImlucHV0RWxlbWVudCIsImN1cnJlbnQiLCJpbnB1dCIsImRvY3VtZW50IiwiYWN0aXZlRWxlbWVudCIsIndpdGhTZWNvbmRzIiwibm9TZWNvbmRzIiwibmV3SW5wdXRWYWx1ZSIsImhhbmRsZUlucHV0Q2hhbmdlIiwiaW5wdXRWYWx1ZU5ldyIsInRhcmdldCIsImhvdXJOZXciLCJtaW51dGVOZXciLCJzZWNvbmROZXciLCJoYW5kbGVJbnB1dEZvY3VzIiwiaGFuZGxlSW5wdXRLZXlEb3duIiwia2V5Iiwia2V5cyIsImluY2x1ZGVzIiwiYmx1ciIsImNsYXNzU2V0IiwicGFyc2VJbnQiLCJibG9ja3MiLCJkZWxpbWl0ZXIiLCJkaXNwbGF5TmFtZSIsInByb3BUeXBlcyIsInN0cmluZyIsImJvb2wiLCJmdW5jIiwiaW50ZW50Iiwib25lT2YiLCJkZWZhdWx0UHJvcHMiXSwic291cmNlcyI6WyIuLi8uLi9jb21wb25lbnRzL3RpbWUtcGlja2VyL1RpbWVQaWNrZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwge1xuICBmb3J3YXJkUmVmLFxuICB1c2VDb250ZXh0LFxuICB1c2VJbXBlcmF0aXZlSGFuZGxlLFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxuICB1c2VNZW1vLFxufSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tIFwiY2xhc3NuYW1lc1wiXG5pbXBvcnQgeyBDb25maWdDb250ZXh0LCBnZXRDb21wdXRlZFNpemUgfSBmcm9tIFwiLi4vY29uZmlnLXByb3ZpZGVyXCJcbmltcG9ydCBJY29uIGZyb20gXCIuLi9pY29uXCJcbmltcG9ydCBJbnB1dCBmcm9tIFwiLi4vaW5wdXRcIlxuaW1wb3J0IFBvcG92ZXIsIHsgSVBvcG92ZXJQcm9wcyB9IGZyb20gXCIuLi9wb3BvdmVyXCJcbmltcG9ydCBUaW1lU2VsZWN0IGZyb20gXCIuL1RpbWVTZWxlY3RcIlxuaW1wb3J0IFwiLi9zdHlsZVwiXG5pbXBvcnQge1xuICB0cmFuc2Zvcm1UaW1lV2l0aFNlY29uZHMsXG4gIGV4dHJhY3RITVNGcm9tVGltZSxcbiAgaXNMZWdhbFRpbWVTdHJpbmcsXG4gIGlzVGltZUFmdGVyLFxuICBpc1RpbWVCZWZvcmUsXG59IGZyb20gXCIuL2NvcmVcIlxuXG5jb25zdCBwcmVmaXggPSBcImFkdWktdGltZVwiXG5jb25zdCBub29wID0gKCkgPT4ge31cblxuZXhwb3J0IGludGVyZmFjZSBJVGltZVBpY2tlclByb3BzIHtcbiAgW2tleTogc3RyaW5nXTogYW55XG4gIC8qKlxuICAgKiDpmYTliqDnsbvlkI1cbiAgICovXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICAvKipcbiAgICog5piv5ZCm5Zyo6YCJ5oup5ZCO77yM5raI5aSxIFBvcG92ZXJcbiAgICovXG4gIGNsb3NlT25TZWxlY3Q/OiBib29sZWFuXG4gIC8qKlxuICAgKiDlhoXpg6jpqbHliqjvvIzpu5jorqTpgInmi6nml7bpl7RcbiAgICovXG4gIGRlZmF1bHRWYWx1ZT86IG51bGwgfCBzdHJpbmdcbiAgLyoqXG4gICAqIOaYr+WQpuemgeeUqFxuICAgKi9cbiAgZGlzYWJsZWQ/OiBib29sZWFuXG4gIC8qKlxuICAgKiDnpoHmraLpgInmi6nnmoTlsI/ml7ZcbiAgICovXG4gIGRpc2FibGVkSG91cnM/OiAoaG91cj86IHN0cmluZyB8IG51bGwpID0+IGJvb2xlYW4gfCB2b2lkXG4gIC8qKlxuICAgKiDnpoHmraLpgInmi6nnmoTliIbpkp9cbiAgICovXG4gIGRpc2FibGVkTWludXRlcz86IChtaW51dGU/OiBzdHJpbmcgfCBudWxsKSA9PiBib29sZWFuIHwgdm9pZFxuICAvKipcbiAgICog56aB5q2i6YCJ5oup55qE56eSXG4gICAqL1xuICBkaXNhYmxlZFNlY29uZHM/OiAoc2Vjb25kPzogc3RyaW5nIHwgbnVsbCkgPT4gYm9vbGVhbiB8IHZvaWRcbiAgLyoqXG4gICAqIOiuvue9rui+k+WFpeahhuexu+Wei1xuICAgKi9cbiAgaW50ZW50PzogXCJub3JtYWxcIiB8IFwicHJpbWFyeVwiIHwgXCJzdWNjZXNzXCIgfCBcIndhcm5pbmdcIiB8IFwiZGFuZ2VyXCJcbiAgLyoqXG4gICAqIOWPr+mAieaXtumXtOeahOacgOWkp+WAvFxuICAgKi9cbiAgbWF4VGltZT86IHN0cmluZyB8IG51bGxcbiAgLyoqXG4gICAqIOWPr+mAieaXtumXtOeahOacgOWwj+WAvFxuICAgKi9cbiAgbWluVGltZT86IHN0cmluZyB8IG51bGxcbiAgLyoqXG4gICAqIOaXtumXtOaUueWPmOeahCBoYW5kbGVyXG4gICAqL1xuICBvbkNoYW5nZT86ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkXG4gIC8qKlxuICAgKiDliKTmlq3mmK/lkKbmmK/mlbTmlbBcbiAgICovXG4gIG9ubHlIb3VyPzogYm9vbGVhblxuICAvKipcbiAgICog5Y2g5L2N5a2X56ymXG4gICAqL1xuICBwbGFjZWhvbGRlcj86IHN0cmluZ1xuICAvKipcbiAgICog5Lyg5YWlIFBvcG92ZXIg55qEIHByb3BzXG4gICAqL1xuICBwb3BvdmVyUHJvcHM/OiBJUG9wb3ZlclByb3BzXG4gIC8qKlxuICAgKiAyMDIyMTIxNjog5pSv5oyB56eS55qE6YCJ5oupXG4gICAqL1xuICBzZWNvbmRzQXZhaWxhYmxlPzogYm9vbGVhblxuICAvKipcbiAgICog6K6+572u5bC65a+4XG4gICAqL1xuICBzaXplPzogXCJtaW5pXCIgfCBcInNtYWxsXCIgfCBcIm1lZGl1bVwiIHwgXCJsYXJnZVwiXG4gIC8qKlxuICAgKiDlpJbpg6jmjqfliLbvvJrlvZPliY3ml7bpl7RcbiAgICovXG4gIHZhbHVlPzogbnVsbCB8IHN0cmluZ1xufVxuXG4vKipcbiAqIOaXtumXtOmAieaLqeWZqOeUqOS6juS6huino+W9k+WJjeW3sumAieaXtumXtO+8jOmAieaLqeaIlui+k+WFpemcgOimgeeahOaXtumXtOOAgeaXtumXtOiMg+WbtOetieOAglxuICovXG5jb25zdCBUaW1lUGlja2VyOiBSZWFjdC5Gb3J3YXJkUmVmRXhvdGljQ29tcG9uZW50PFxuICBJVGltZVBpY2tlclByb3BzICYgUmVhY3QuUmVmQXR0cmlidXRlczxhbnk+XG4+ID0gZm9yd2FyZFJlZihcbiAgKFxuICAgIHtcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNsb3NlT25TZWxlY3QsXG4gICAgICBkZWZhdWx0VmFsdWUsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIGRpc2FibGVkSG91cnMsXG4gICAgICBkaXNhYmxlZE1pbnV0ZXMsXG4gICAgICBkaXNhYmxlZFNlY29uZHMsXG4gICAgICBtYXhUaW1lLFxuICAgICAgbWluVGltZSxcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgb25seUhvdXIsXG4gICAgICBwbGFjZWhvbGRlcixcbiAgICAgIHBvcG92ZXJQcm9wcyxcbiAgICAgIHNlY29uZHNBdmFpbGFibGUgPSBmYWxzZSxcbiAgICAgIHNpemU6IHNpemVQcm9wLFxuICAgICAgdmFsdWUsXG4gICAgICAuLi5vdGhlclByb3BzXG4gICAgfTogSVRpbWVQaWNrZXJQcm9wcyxcbiAgICByZWZcbiAgKSA9PiB7XG4gICAgY29uc3QgZ2V0SW5pdGlhbFN0YXRlID0gKCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWVTdGF0ZSA9IHZhbHVlICE9PSBudWxsID8gdmFsdWUgOiBkZWZhdWx0VmFsdWVcbiAgICAgIGNvbnN0IHsgaG91ciwgbWludXRlLCBzZWNvbmQgfSA9IGV4dHJhY3RITVNGcm9tVGltZSh2YWx1ZVN0YXRlKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaG91cixcbiAgICAgICAgaW5wdXRWYWx1ZTogdmFsdWVTdGF0ZSB8fCBcIlwiLFxuICAgICAgICBtaW51dGU6IG9ubHlIb3VyID8gXCIwMFwiIDogbWludXRlLFxuICAgICAgICBzZWNvbmQ6IHNlY29uZHNBdmFpbGFibGUgPyBzZWNvbmQgOiBcIjAwXCIsXG4gICAgICAgIHByZXZWYWx1ZVByb3A6IHZhbHVlU3RhdGUgfHwgXCJcIixcbiAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGluaXRpYWxTdGF0ZSA9IHVzZU1lbW8oZ2V0SW5pdGlhbFN0YXRlLCBbXSlcbiAgICBjb25zdCBbaW5wdXRWYWx1ZSwgc2V0SW5wdXRWYWx1ZV0gPSB1c2VTdGF0ZShpbml0aWFsU3RhdGUuaW5wdXRWYWx1ZSlcbiAgICBjb25zdCBbaG91ciwgc2V0SG91cl0gPSB1c2VTdGF0ZShpbml0aWFsU3RhdGUuaG91cilcbiAgICBjb25zdCBbbWludXRlLCBzZXRNaW51dGVdID0gdXNlU3RhdGUoaW5pdGlhbFN0YXRlLm1pbnV0ZSlcbiAgICBjb25zdCBbc2Vjb25kLCBzZXRTZWNvbmRdID0gdXNlU3RhdGUoaW5pdGlhbFN0YXRlLnNlY29uZClcbiAgICBjb25zdCBbcHJldlZhbHVlUHJvcCwgc2V0UHJldlZhbHVlUHJvcF0gPSB1c2VTdGF0ZShcbiAgICAgIGluaXRpYWxTdGF0ZS5wcmV2VmFsdWVQcm9wXG4gICAgKVxuICAgIGNvbnN0IFt2aXNpYmxlLCBzZXRWaXNpYmxlXSA9IHVzZVN0YXRlKGluaXRpYWxTdGF0ZS52aXNpYmxlKVxuXG4gICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHByZXZWYWx1ZVByb3AgIT09IHZhbHVlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGhvdXI6IG5ld0hvdXIsXG4gICAgICAgIG1pbnV0ZTogbmV3TWludXRlLFxuICAgICAgICBzZWNvbmQ6IG5ld1NlY29uZCxcbiAgICAgIH0gPSBleHRyYWN0SE1TRnJvbVRpbWUodmFsdWUpXG5cbiAgICAgIHNldElucHV0VmFsdWUodmFsdWUgfHwgXCJcIilcbiAgICAgIHNldEhvdXIobmV3SG91cilcbiAgICAgIHNldE1pbnV0ZShvbmx5SG91ciA/IFwiMDBcIiA6IG5ld01pbnV0ZSlcbiAgICAgIHNldFNlY29uZChzZWNvbmRzQXZhaWxhYmxlID8gbmV3U2Vjb25kIDogXCIwMFwiKVxuICAgICAgc2V0UHJldlZhbHVlUHJvcCh2YWx1ZSB8fCBcIlwiKVxuICAgIH1cblxuICAgIGNvbnN0IGlucHV0UmVmID0gdXNlUmVmPGFueT4obnVsbClcblxuICAgIGNvbnN0IHsgc2l6ZTogc2l6ZUNvbnRleHQgfSA9IHVzZUNvbnRleHQoQ29uZmlnQ29udGV4dClcblxuICAgIGNvbnN0IHNpemUgPSBnZXRDb21wdXRlZFNpemUoc2l6ZVByb3AsIHNpemVDb250ZXh0KVxuXG4gICAgY29uc3QgaGFuZGxlQ2xpY2sgPSAodmFsdWVOZXc6IHN0cmluZywgdHlwZTogXCJob3VyXCIgfCBcIm1pbnV0ZVwiKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZVByb3AgPSB2YWx1ZVxuXG4gICAgICBsZXQgaW5wdXRWYWx1ZU5vdyA9IFwiXCJcbiAgICAgIGlmIChzZWNvbmRzQXZhaWxhYmxlKSB7XG4gICAgICAgIGlmICh0eXBlID09PSBcImhvdXJcIikge1xuICAgICAgICAgIGlucHV0VmFsdWVOb3cgPSBgJHt2YWx1ZU5ld306JHttaW51dGUgfHwgXCJcIn06JHtzZWNvbmQgfHwgXCJcIn1gXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJtaW51dGVcIikge1xuICAgICAgICAgIGlucHV0VmFsdWVOb3cgPSBgJHtob3VyIHx8IFwiXCJ9OiR7dmFsdWVOZXd9OiR7c2Vjb25kIHx8IFwiXCJ9YFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlucHV0VmFsdWVOb3cgPSBgJHtob3VyIHx8IFwiXCJ9OiR7bWludXRlIHx8IFwiXCJ9OiR7dmFsdWVOZXd9YFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnB1dFZhbHVlTm93ID1cbiAgICAgICAgICB0eXBlID09PSBcImhvdXJcIlxuICAgICAgICAgICAgPyBgJHt2YWx1ZU5ld306JHttaW51dGUgfHwgXCJcIn1gXG4gICAgICAgICAgICA6IGAke2hvdXIgfHwgXCJcIn06JHt2YWx1ZU5ld31gXG4gICAgICB9XG5cbiAgICAgIGlmIChtYXhUaW1lICYmIGlzVGltZUFmdGVyKGlucHV0VmFsdWVOb3csIG1heFRpbWUpKSB7XG4gICAgICAgIGlucHV0VmFsdWVOb3cgPSBzZWNvbmRzQXZhaWxhYmxlXG4gICAgICAgICAgPyB0cmFuc2Zvcm1UaW1lV2l0aFNlY29uZHMobWF4VGltZSlcbiAgICAgICAgICA6IG1heFRpbWVcbiAgICAgIH0gZWxzZSBpZiAobWluVGltZSAmJiBpc1RpbWVCZWZvcmUoaW5wdXRWYWx1ZU5vdywgbWluVGltZSkpIHtcbiAgICAgICAgaW5wdXRWYWx1ZU5vdyA9IHNlY29uZHNBdmFpbGFibGVcbiAgICAgICAgICA/IHRyYW5zZm9ybVRpbWVXaXRoU2Vjb25kcyhtaW5UaW1lKVxuICAgICAgICAgIDogbWluVGltZVxuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWVQcm9wID09PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlRmluYWwgPSB7XG4gICAgICAgICAgaW5wdXRWYWx1ZU5vdyxcbiAgICAgICAgICAuLi5leHRyYWN0SE1TRnJvbVRpbWUoaW5wdXRWYWx1ZU5vdyksXG4gICAgICAgIH1cbiAgICAgICAgc2V0SG91cih2YWx1ZUZpbmFsLmhvdXIpXG4gICAgICAgIHNldE1pbnV0ZSh2YWx1ZUZpbmFsLm1pbnV0ZSlcbiAgICAgICAgc2V0U2Vjb25kKHZhbHVlRmluYWwuc2Vjb25kKVxuICAgICAgICBzZXRJbnB1dFZhbHVlKHZhbHVlRmluYWwuaW5wdXRWYWx1ZU5vdylcbiAgICAgIH1cblxuICAgICAgaWYgKGlzTGVnYWxUaW1lU3RyaW5nKHsgdGltZTogaW5wdXRWYWx1ZSwgb25seUhvdXIgfSkpIHtcbiAgICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgICAgb25DaGFuZ2UoaW5wdXRWYWx1ZU5vdylcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2xvc2VPblNlbGVjdCkge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgc2V0VmlzaWJsZShmYWxzZSlcbiAgICAgICAgICB9LCAxMjApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBoYW5kbGVWaXNpYmxlQ2hhbmdlID0gKHZpc2libGVOZXc6IGJvb2xlYW4pID0+IHtcbiAgICAgIGNvbnN0IHsgaW5wdXQ6IGlucHV0RWxlbWVudCB9ID0gaW5wdXRSZWYuY3VycmVudFxuICAgICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgYWN0aXZlRWxlbWVudCB9ID0gZG9jdW1lbnRcbiAgICAgICAgaWYgKHZpc2libGVOZXcgfHwgKCF2aXNpYmxlTmV3ICYmIGlucHV0RWxlbWVudCAhPT0gYWN0aXZlRWxlbWVudCkpIHtcbiAgICAgICAgICBjb25zdCB3aXRoU2Vjb25kcyA9XG4gICAgICAgICAgICBob3VyICYmIG1pbnV0ZSAmJiBzZWNvbmQgPyBgJHtob3VyfToke21pbnV0ZX06JHtzZWNvbmR9YCA6IFwiXCJcbiAgICAgICAgICBjb25zdCBub1NlY29uZHMgPSBob3VyICYmIG1pbnV0ZSA/IGAke2hvdXJ9OiR7bWludXRlfWAgOiBcIlwiXG4gICAgICAgICAgY29uc3QgbmV3SW5wdXRWYWx1ZSA9IHNlY29uZHNBdmFpbGFibGUgPyB3aXRoU2Vjb25kcyA6IG5vU2Vjb25kc1xuICAgICAgICAgIGlmICghdmlzaWJsZU5ldyAmJiBpbnB1dFZhbHVlICE9PSBuZXdJbnB1dFZhbHVlKSB7XG4gICAgICAgICAgICBzZXRJbnB1dFZhbHVlKG5ld0lucHV0VmFsdWUpXG4gICAgICAgICAgfVxuICAgICAgICAgIHNldFZpc2libGUodmlzaWJsZU5ldylcbiAgICAgICAgfVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICBjb25zdCBoYW5kbGVJbnB1dENoYW5nZSA9ICh7XG4gICAgICB0YXJnZXQ6IHsgdmFsdWU6IGlucHV0VmFsdWVOZXcgfSxcbiAgICB9OiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgc2V0SW5wdXRWYWx1ZShpbnB1dFZhbHVlTmV3KVxuICAgICAgaWYgKFxuICAgICAgICBpbnB1dFZhbHVlTmV3ID09PSBcIlwiIHx8XG4gICAgICAgIChpc0xlZ2FsVGltZVN0cmluZyh7XG4gICAgICAgICAgdGltZTogaW5wdXRWYWx1ZU5ldyxcbiAgICAgICAgICBvbmx5SG91cixcbiAgICAgICAgfSkgJiZcbiAgICAgICAgICAhaXNUaW1lQWZ0ZXIoaW5wdXRWYWx1ZU5ldywgbWF4VGltZSkgJiZcbiAgICAgICAgICAhaXNUaW1lQmVmb3JlKGlucHV0VmFsdWVOZXcsIG1pblRpbWUpKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBob3VyOiBob3VyTmV3LFxuICAgICAgICAgIG1pbnV0ZTogbWludXRlTmV3LFxuICAgICAgICAgIHNlY29uZDogc2Vjb25kTmV3LFxuICAgICAgICB9ID0gZXh0cmFjdEhNU0Zyb21UaW1lKGlucHV0VmFsdWVOZXcpXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhKGRpc2FibGVkSG91cnMgJiYgZGlzYWJsZWRIb3Vycyhob3VyTmV3KSkgJiZcbiAgICAgICAgICAhKGRpc2FibGVkTWludXRlcyAmJiBkaXNhYmxlZE1pbnV0ZXMobWludXRlTmV3KSkgJiZcbiAgICAgICAgICAhKGRpc2FibGVkU2Vjb25kcyAmJiBkaXNhYmxlZFNlY29uZHMoc2Vjb25kTmV3KSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgICAgICBvbkNoYW5nZShpbnB1dFZhbHVlTmV3KVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHNldEhvdXIoaG91ck5ldylcbiAgICAgICAgICAgIHNldE1pbnV0ZShvbmx5SG91ciA/IFwiMDBcIiA6IG1pbnV0ZU5ldylcbiAgICAgICAgICAgIHNldFNlY29uZChzZWNvbmRzQXZhaWxhYmxlID8gc2Vjb25kTmV3IDogXCIwMFwiKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZUlucHV0Rm9jdXMgPSAoKSA9PiB7XG4gICAgICBpZiAoIXZpc2libGUpIHtcbiAgICAgICAgc2V0VmlzaWJsZSh0cnVlKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZUlucHV0S2V5RG93biA9ICh7XG4gICAgICBrZXksXG4gICAgfTogUmVhY3QuS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgY29uc3Qga2V5cyA9IFtcIlRhYlwiLCBcIkVzY2FwZVwiLCBcIkVudGVyXCJdXG4gICAgICBpZiAoa2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgIHNldFZpc2libGUoZmFsc2UpXG4gICAgICAgIGlucHV0UmVmLmN1cnJlbnQuaW5wdXQuYmx1cigpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+ICh7XG4gICAgICBpbnB1dDogaW5wdXRSZWYuY3VycmVudCxcbiAgICAgIGhhbmRsZVZpc2libGVDaGFuZ2UsXG4gICAgfSkpXG5cbiAgICBjb25zdCBjbGFzc1NldCA9IGNsYXNzTmFtZXMoXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBgJHtwcmVmaXh9LWlucHV0YCxcbiAgICAgIGAke3ByZWZpeH0tJHtzaXplfWAsXG4gICAgICB7XG4gICAgICAgIFtgJHtwcmVmaXh9LXNlY29uZHNBdmFpbGFibGVgXTogc2Vjb25kc0F2YWlsYWJsZSxcbiAgICAgIH1cbiAgICApXG5cbiAgICByZXR1cm4gKFxuICAgICAgPFBvcG92ZXJcbiAgICAgICAgYXJyb3dlZD17ZmFsc2V9XG4gICAgICAgIG9uVmlzaWJsZUNoYW5nZT17aGFuZGxlVmlzaWJsZUNoYW5nZX1cbiAgICAgICAgcG9wdXA9e1xuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8VGltZVNlbGVjdFxuICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2xpY2t9XG4gICAgICAgICAgICAgIGN1cnJlbnRIb3VyPXtob3VyID8gcGFyc2VJbnQoaG91ciwgMTApIDogbnVsbH1cbiAgICAgICAgICAgICAgZGlzYWJsZWRIb3Vycz17ZGlzYWJsZWRIb3Vyc31cbiAgICAgICAgICAgICAgbWF4VGltZT17bWF4VGltZX1cbiAgICAgICAgICAgICAgbWluVGltZT17bWluVGltZX1cbiAgICAgICAgICAgICAgb25seUhvdXI9e29ubHlIb3VyfVxuICAgICAgICAgICAgICBzZWxlY3RlZFZhbHVlPXtob3VyfVxuICAgICAgICAgICAgICBzaXplPXtzaXplfVxuICAgICAgICAgICAgICB0eXBlPVwiaG91clwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgeyFvbmx5SG91ciAmJiAoXG4gICAgICAgICAgICAgIDxUaW1lU2VsZWN0XG4gICAgICAgICAgICAgICAgZGlzYWJsZWRNaW51dGVzPXtkaXNhYmxlZE1pbnV0ZXN9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNsaWNrfVxuICAgICAgICAgICAgICAgIGN1cnJlbnRIb3VyPXtob3VyID8gcGFyc2VJbnQoaG91ciwgMTApIDogbnVsbH1cbiAgICAgICAgICAgICAgICBtYXhUaW1lPXttYXhUaW1lfVxuICAgICAgICAgICAgICAgIG1pblRpbWU9e21pblRpbWV9XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRWYWx1ZT17bWludXRlfVxuICAgICAgICAgICAgICAgIHNpemU9e3NpemV9XG4gICAgICAgICAgICAgICAgdHlwZT1cIm1pbnV0ZVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge3NlY29uZHNBdmFpbGFibGUgJiYgKFxuICAgICAgICAgICAgICA8VGltZVNlbGVjdFxuICAgICAgICAgICAgICAgIGRpc2FibGVkU2Vjb25kcz17ZGlzYWJsZWRTZWNvbmRzfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDbGlja31cbiAgICAgICAgICAgICAgICBjdXJyZW50SG91cj17aG91ciA/IHBhcnNlSW50KGhvdXIsIDEwKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgY3VycmVudE1pbnV0ZT17bWludXRlID8gcGFyc2VJbnQobWludXRlLCAxMCkgOiBudWxsfVxuICAgICAgICAgICAgICAgIG1heFRpbWU9e21heFRpbWV9XG4gICAgICAgICAgICAgICAgbWluVGltZT17bWluVGltZX1cbiAgICAgICAgICAgICAgICBzZWxlY3RlZFZhbHVlPXtzZWNvbmR9XG4gICAgICAgICAgICAgICAgc2l6ZT17c2l6ZX1cbiAgICAgICAgICAgICAgICB0eXBlPVwic2Vjb25kXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgdHJpZ2dlcj1cImNsaWNrXCJcbiAgICAgICAgdmlzaWJsZT17dmlzaWJsZX1cbiAgICAgICAgey4uLnBvcG92ZXJQcm9wc31cbiAgICAgID5cbiAgICAgICAgPElucHV0XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc1NldH1cbiAgICAgICAgICBjbGVhdmVPcHRpb25zPXt7XG4gICAgICAgICAgICBibG9ja3M6IHNlY29uZHNBdmFpbGFibGUgPyBbMiwgMiwgMl0gOiBbMiwgMl0sXG4gICAgICAgICAgICBkZWxpbWl0ZXI6IFwiOlwiLFxuICAgICAgICAgIH19XG4gICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgIHJpZ2h0RWxlbWVudD17PEljb24gaWNvbj1cInRpbWUtb3V0bGluZWRcIiAvPn1cbiAgICAgICAgICBzaXplPXtzaXplfVxuICAgICAgICAgIHZhbHVlPXtpbnB1dFZhbHVlfVxuICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVJbnB1dENoYW5nZX1cbiAgICAgICAgICBvbkZvY3VzPXtoYW5kbGVJbnB1dEZvY3VzfVxuICAgICAgICAgIG9uS2V5RG93bj17aGFuZGxlSW5wdXRLZXlEb3dufVxuICAgICAgICAgIHJlZj17aW5wdXRSZWZ9XG4gICAgICAgICAgey4uLm90aGVyUHJvcHN9XG4gICAgICAgIC8+XG4gICAgICA8L1BvcG92ZXI+XG4gICAgKVxuICB9XG4pXG5cblRpbWVQaWNrZXIuZGlzcGxheU5hbWUgPSBcIlRpbWVQaWNrZXJcIlxuXG5UaW1lUGlja2VyLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIOmZhOWKoOexu+WQjVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICog5piv5ZCm5Zyo6YCJ5oup5ZCO77yM5raI5aSxIFBvcG92ZXJcbiAgICovXG4gIGNsb3NlT25TZWxlY3Q6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICog5YaF6YOo6amx5Yqo77yM6buY6K6k6YCJ5oup5pe26Ze0XG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiDmmK/lkKbnpoHnlKhcbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIOemgeatoumAieaLqeeahOWwj+aXtlxuICAgKi9cbiAgZGlzYWJsZWRIb3VyczogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiDnpoHmraLpgInmi6nnmoTliIbpkp9cbiAgICovXG4gIGRpc2FibGVkTWludXRlczogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiDnpoHmraLpgInmi6nnmoTnp5JcbiAgICovXG4gIGRpc2FibGVkU2Vjb25kczogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiDorr7nva7ovpPlhaXmoYbnsbvlnotcbiAgICovXG4gIGludGVudDogUHJvcFR5cGVzLm9uZU9mKFtcbiAgICBcIm5vcm1hbFwiLFxuICAgIFwicHJpbWFyeVwiLFxuICAgIFwic3VjY2Vzc1wiLFxuICAgIFwid2FybmluZ1wiLFxuICAgIFwiZGFuZ2VyXCIsXG4gIF0pLFxuICAvKipcbiAgICog5Y+v6YCJ5pe26Ze055qE5pyA5aSn5YC8XG4gICAqL1xuICBtYXhUaW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICog5Y+v6YCJ5pe26Ze055qE5pyA5bCP5YC8XG4gICAqL1xuICBtaW5UaW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICog5pe26Ze05pS55Y+Y55qEIGhhbmRsZXJcbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIOWIpOaWreaYr+WQpuaYr+aVtOaVsFxuICAgKi9cbiAgb25seUhvdXI6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICog5Y2g5L2N5a2X56ymXG4gICAqL1xuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIOiuvue9ruWwuuWvuFxuICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mKFtcIm1pbmlcIiwgXCJzbWFsbFwiLCBcIm1lZGl1bVwiLCBcImxhcmdlXCJdKSxcbiAgLyoqXG4gICAqIOWklumDqOaOp+WItu+8muW9k+WJjeaXtumXtFxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG59XG5cblRpbWVQaWNrZXIuZGVmYXVsdFByb3BzID0ge1xuICBjbGFzc05hbWU6IFwiXCIsXG4gIGNsb3NlT25TZWxlY3Q6IGZhbHNlLFxuICBkZWZhdWx0VmFsdWU6IG51bGwsXG4gIGRpc2FibGVkOiBmYWxzZSxcbiAgZGlzYWJsZWRIb3Vyczogbm9vcCxcbiAgZGlzYWJsZWRNaW51dGVzOiBub29wLFxuICBkaXNhYmxlZFNlY29uZHM6IG5vb3AsXG4gIGludGVudDogXCJub3JtYWxcIixcbiAgbWF4VGltZTogXCIyNDowMFwiLFxuICBtaW5UaW1lOiBudWxsLFxuICBvbkNoYW5nZTogbm9vcCxcbiAgb25seUhvdXI6IGZhbHNlLFxuICBwbGFjZWhvbGRlcjogXCLor7fpgInmi6lcIixcbiAgc2Vjb25kc0F2YWlsYWJsZTogZmFsc2UsXG4gIHNpemU6IFwic21h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