"use strict"; (self["webpackChunk_core_volunteer_app"] = self["webpackChunk_core_volunteer_app"] || []).push([["vendors-node_modules_rc-picker_es_PickerTrigger_index_js-node_modules_rc-picker_es_PickerTrig-2bfecb"],{ /***/ "../../../node_modules/rc-picker/es/PickerPanel/QuarterPanel/index.js": /*!****************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerPanel/QuarterPanel/index.js ***! \****************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ QuarterPanel) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../utils/dateUtil */ "../../../node_modules/rc-picker/es/utils/dateUtil.js"); /* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../context */ "../../../node_modules/rc-picker/es/PickerPanel/context.js"); /* harmony import */ var _PanelBody__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../PanelBody */ "../../../node_modules/rc-picker/es/PickerPanel/PanelBody.js"); /* harmony import */ var _PanelHeader__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../PanelHeader */ "../../../node_modules/rc-picker/es/PickerPanel/PanelHeader.js"); function QuarterPanel(props) { var prefixCls = props.prefixCls, locale = props.locale, generateConfig = props.generateConfig, pickerValue = props.pickerValue, onPickerValueChange = props.onPickerValueChange, onModeChange = props.onModeChange; var panelPrefixCls = "".concat(prefixCls, "-quarter-panel"); // ========================== Base ========================== var _useInfo = (0,_context__WEBPACK_IMPORTED_MODULE_5__.useInfo)(props, 'quarter'), _useInfo2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useInfo, 1), info = _useInfo2[0]; var baseDate = generateConfig.setMonth(pickerValue, 0); // ========================= Cells ========================== var getCellDate = function getCellDate(date, offset) { return generateConfig.addMonth(date, offset * 3); }; var getCellText = function getCellText(date) { return (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__.formatValue)(date, { locale: locale, format: locale.cellQuarterFormat, generateConfig: generateConfig }); }; var getCellClassName = function getCellClassName() { return (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, "".concat(prefixCls, "-cell-in-view"), true); }; // ========================= Header ========================= var yearNode = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement("button", { type: "button", key: "year", "aria-label": locale.yearSelect, onClick: function onClick() { onModeChange('year'); }, tabIndex: -1, className: "".concat(prefixCls, "-year-btn") }, (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__.formatValue)(pickerValue, { locale: locale, format: locale.yearFormat, generateConfig: generateConfig })); // ========================= Render ========================= return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_context__WEBPACK_IMPORTED_MODULE_5__.PanelContext.Provider, { value: info }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement("div", { className: panelPrefixCls }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_PanelHeader__WEBPACK_IMPORTED_MODULE_7__["default"], { superOffset: function superOffset(distance) { return generateConfig.addYear(pickerValue, distance); }, onChange: onPickerValueChange // Limitation , getStart: function getStart(date) { return generateConfig.setMonth(date, 0); }, getEnd: function getEnd(date) { return generateConfig.setMonth(date, 11); } }, yearNode), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_PanelBody__WEBPACK_IMPORTED_MODULE_6__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, props, { titleFormat: locale.fieldQuarterFormat, colNum: 4, rowNum: 1, baseDate: baseDate // Body , getCellDate: getCellDate, getCellText: getCellText, getCellClassName: getCellClassName })))); } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerPanel/TimePanel/TimePanelBody/TimeColumn.js": /*!********************************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerPanel/TimePanel/TimePanelBody/TimeColumn.js ***! \********************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ TimeColumn) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js"); /* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var rc_util_es_hooks_useLayoutEffect__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! rc-util/es/hooks/useLayoutEffect */ "../../../node_modules/rc-util/es/hooks/useLayoutEffect.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../context */ "../../../node_modules/rc-picker/es/PickerPanel/context.js"); /* harmony import */ var _useScrollTo__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./useScrollTo */ "../../../node_modules/rc-picker/es/PickerPanel/TimePanel/TimePanelBody/useScrollTo.js"); var SCROLL_DELAY = 300; // Not use JSON.stringify to avoid dead loop function flattenUnits(units) { return units.map(function (_ref) { var value = _ref.value, label = _ref.label, disabled = _ref.disabled; return [value, label, disabled].join(','); }).join(';'); } function TimeColumn(props) { var units = props.units, value = props.value, optionalValue = props.optionalValue, type = props.type, onChange = props.onChange, onHover = props.onHover, onDblClick = props.onDblClick, changeOnScroll = props.changeOnScroll; var _usePanelContext = (0,_context__WEBPACK_IMPORTED_MODULE_6__.usePanelContext)(), prefixCls = _usePanelContext.prefixCls, cellRender = _usePanelContext.cellRender, now = _usePanelContext.now, locale = _usePanelContext.locale; var panelPrefixCls = "".concat(prefixCls, "-time-panel"); var cellPrefixCls = "".concat(prefixCls, "-time-panel-cell"); // ========================== Refs ========================== var ulRef = react__WEBPACK_IMPORTED_MODULE_5__.useRef(null); // ========================= Scroll ========================= var checkDelayRef = react__WEBPACK_IMPORTED_MODULE_5__.useRef(); var clearDelayCheck = function clearDelayCheck() { clearTimeout(checkDelayRef.current); }; // ========================== Sync ========================== var _useScrollTo = (0,_useScrollTo__WEBPACK_IMPORTED_MODULE_7__["default"])(ulRef, value !== null && value !== void 0 ? value : optionalValue), _useScrollTo2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useScrollTo, 3), syncScroll = _useScrollTo2[0], stopScroll = _useScrollTo2[1], isScrolling = _useScrollTo2[2]; // Effect sync value scroll (0,rc_util_es_hooks_useLayoutEffect__WEBPACK_IMPORTED_MODULE_4__["default"])(function () { syncScroll(); clearDelayCheck(); return function () { stopScroll(); clearDelayCheck(); }; }, [value, optionalValue, flattenUnits(units)]); // ========================= Change ========================= // Scroll event if sync onScroll var onInternalScroll = function onInternalScroll(event) { clearDelayCheck(); var target = event.target; if (!isScrolling() && changeOnScroll) { checkDelayRef.current = setTimeout(function () { var ul = ulRef.current; var firstLiTop = ul.querySelector("li").offsetTop; var liList = Array.from(ul.querySelectorAll("li")); var liTopList = liList.map(function (li) { return li.offsetTop - firstLiTop; }); var liDistList = liTopList.map(function (top, index) { if (units[index].disabled) { return Number.MAX_SAFE_INTEGER; } return Math.abs(top - target.scrollTop); }); // Find min distance index var minDist = Math.min.apply(Math, (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(liDistList)); var minDistIndex = liDistList.findIndex(function (dist) { return dist === minDist; }); var targetUnit = units[minDistIndex]; if (targetUnit && !targetUnit.disabled) { onChange(targetUnit.value); } }, SCROLL_DELAY); } }; // ========================= Render ========================= var columnPrefixCls = "".concat(panelPrefixCls, "-column"); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement("ul", { className: columnPrefixCls, ref: ulRef, "data-type": type, onScroll: onInternalScroll }, units.map(function (_ref2) { var label = _ref2.label, unitValue = _ref2.value, disabled = _ref2.disabled; var inner = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement("div", { className: "".concat(cellPrefixCls, "-inner") }, label); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.createElement("li", { key: unitValue, className: classnames__WEBPACK_IMPORTED_MODULE_3___default()(cellPrefixCls, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])({}, "".concat(cellPrefixCls, "-selected"), value === unitValue), "".concat(cellPrefixCls, "-disabled"), disabled)), onClick: function onClick() { if (!disabled) { onChange(unitValue); } }, onDoubleClick: function onDoubleClick() { if (!disabled && onDblClick) { onDblClick(); } }, onMouseEnter: function onMouseEnter() { onHover(unitValue); }, onMouseLeave: function onMouseLeave() { onHover(null); }, "data-value": unitValue }, cellRender ? cellRender(unitValue, { prefixCls: prefixCls, originNode: inner, today: now, type: 'time', subType: type, locale: locale }) : inner); })); } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerPanel/TimePanel/TimePanelBody/index.js": /*!***************************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerPanel/TimePanel/TimePanelBody/index.js ***! \***************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ TimePanelBody) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _hooks_useTimeInfo__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../hooks/useTimeInfo */ "../../../node_modules/rc-picker/es/hooks/useTimeInfo.js"); /* harmony import */ var _utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../utils/dateUtil */ "../../../node_modules/rc-picker/es/utils/dateUtil.js"); /* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../context */ "../../../node_modules/rc-picker/es/PickerPanel/context.js"); /* harmony import */ var _TimeColumn__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./TimeColumn */ "../../../node_modules/rc-picker/es/PickerPanel/TimePanel/TimePanelBody/TimeColumn.js"); function isAM(hour) { return hour < 12; } function TimePanelBody(props) { var showHour = props.showHour, showMinute = props.showMinute, showSecond = props.showSecond, showMillisecond = props.showMillisecond, showMeridiem = props.use12Hours, changeOnScroll = props.changeOnScroll; var _usePanelContext = (0,_context__WEBPACK_IMPORTED_MODULE_5__.usePanelContext)(), prefixCls = _usePanelContext.prefixCls, values = _usePanelContext.values, generateConfig = _usePanelContext.generateConfig, locale = _usePanelContext.locale, onSelect = _usePanelContext.onSelect, _usePanelContext$onHo = _usePanelContext.onHover, onHover = _usePanelContext$onHo === void 0 ? function () {} : _usePanelContext$onHo, pickerValue = _usePanelContext.pickerValue; var value = (values === null || values === void 0 ? void 0 : values[0]) || null; var _React$useContext = react__WEBPACK_IMPORTED_MODULE_2__.useContext(_context__WEBPACK_IMPORTED_MODULE_5__.PickerHackContext), onCellDblClick = _React$useContext.onCellDblClick; // ========================== Info ========================== var _useTimeInfo = (0,_hooks_useTimeInfo__WEBPACK_IMPORTED_MODULE_3__["default"])(generateConfig, props, value), _useTimeInfo2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_useTimeInfo, 5), getValidTime = _useTimeInfo2[0], rowHourUnits = _useTimeInfo2[1], getMinuteUnits = _useTimeInfo2[2], getSecondUnits = _useTimeInfo2[3], getMillisecondUnits = _useTimeInfo2[4]; // ========================= Value ========================== // PickerValue will tell which one to align on the top var getUnitValue = function getUnitValue(func) { var valueUnitVal = value && generateConfig[func](value); var pickerUnitValue = pickerValue && generateConfig[func](pickerValue); return [valueUnitVal, pickerUnitValue]; }; var _getUnitValue = getUnitValue('getHour'), _getUnitValue2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_getUnitValue, 2), hour = _getUnitValue2[0], pickerHour = _getUnitValue2[1]; var _getUnitValue3 = getUnitValue('getMinute'), _getUnitValue4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_getUnitValue3, 2), minute = _getUnitValue4[0], pickerMinute = _getUnitValue4[1]; var _getUnitValue5 = getUnitValue('getSecond'), _getUnitValue6 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_getUnitValue5, 2), second = _getUnitValue6[0], pickerSecond = _getUnitValue6[1]; var _getUnitValue7 = getUnitValue('getMillisecond'), _getUnitValue8 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_getUnitValue7, 2), millisecond = _getUnitValue8[0], pickerMillisecond = _getUnitValue8[1]; var meridiem = hour === null ? null : isAM(hour) ? 'am' : 'pm'; // ========================= Column ========================= // Hours var hourUnits = react__WEBPACK_IMPORTED_MODULE_2__.useMemo(function () { if (!showMeridiem) { return rowHourUnits; } return isAM(hour) ? rowHourUnits.filter(function (h) { return isAM(h.value); }) : rowHourUnits.filter(function (h) { return !isAM(h.value); }); }, [hour, rowHourUnits, showMeridiem]); // >>> Pick Fallback var getEnabled = function getEnabled(units, val) { var _enabledUnits$; var enabledUnits = units.filter(function (unit) { return !unit.disabled; }); return val !== null && val !== void 0 ? val : // Fallback to enabled value enabledUnits === null || enabledUnits === void 0 || (_enabledUnits$ = enabledUnits[0]) === null || _enabledUnits$ === void 0 ? void 0 : _enabledUnits$.value; }; // >>> Minutes var validHour = getEnabled(rowHourUnits, hour); var minuteUnits = react__WEBPACK_IMPORTED_MODULE_2__.useMemo(function () { return getMinuteUnits(validHour); }, [getMinuteUnits, validHour]); // >>> Seconds var validMinute = getEnabled(minuteUnits, minute); var secondUnits = react__WEBPACK_IMPORTED_MODULE_2__.useMemo(function () { return getSecondUnits(validHour, validMinute); }, [getSecondUnits, validHour, validMinute]); // >>> Milliseconds var validSecond = getEnabled(secondUnits, second); var millisecondUnits = react__WEBPACK_IMPORTED_MODULE_2__.useMemo(function () { return getMillisecondUnits(validHour, validMinute, validSecond); }, [getMillisecondUnits, validHour, validMinute, validSecond]); var validMillisecond = getEnabled(millisecondUnits, millisecond); // Meridiem var meridiemUnits = react__WEBPACK_IMPORTED_MODULE_2__.useMemo(function () { if (!showMeridiem) { return []; } var base = generateConfig.getNow(); var amDate = generateConfig.setHour(base, 6); var pmDate = generateConfig.setHour(base, 18); var formatMeridiem = function formatMeridiem(date, defaultLabel) { var cellMeridiemFormat = locale.cellMeridiemFormat; return cellMeridiemFormat ? (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__.formatValue)(date, { generateConfig: generateConfig, locale: locale, format: cellMeridiemFormat }) : defaultLabel; }; return [{ label: formatMeridiem(amDate, 'AM'), value: 'am', disabled: rowHourUnits.every(function (h) { return h.disabled || !isAM(h.value); }) }, { label: formatMeridiem(pmDate, 'PM'), value: 'pm', disabled: rowHourUnits.every(function (h) { return h.disabled || isAM(h.value); }) }]; }, [rowHourUnits, showMeridiem, generateConfig, locale]); // ========================= Change ========================= /** * Check if time is validate or will match to validate one */ var triggerChange = function triggerChange(nextDate) { var validateDate = getValidTime(nextDate); onSelect(validateDate); }; // ========================= Column ========================= // Create a template date for the trigger change event var triggerDateTmpl = react__WEBPACK_IMPORTED_MODULE_2__.useMemo(function () { var tmpl = value || pickerValue || generateConfig.getNow(); var isNotNull = function isNotNull(num) { return num !== null && num !== undefined; }; if (isNotNull(hour)) { tmpl = generateConfig.setHour(tmpl, hour); tmpl = generateConfig.setMinute(tmpl, minute); tmpl = generateConfig.setSecond(tmpl, second); tmpl = generateConfig.setMillisecond(tmpl, millisecond); } else if (isNotNull(pickerHour)) { tmpl = generateConfig.setHour(tmpl, pickerHour); tmpl = generateConfig.setMinute(tmpl, pickerMinute); tmpl = generateConfig.setSecond(tmpl, pickerSecond); tmpl = generateConfig.setMillisecond(tmpl, pickerMillisecond); } else if (isNotNull(validHour)) { tmpl = generateConfig.setHour(tmpl, validHour); tmpl = generateConfig.setMinute(tmpl, validMinute); tmpl = generateConfig.setSecond(tmpl, validSecond); tmpl = generateConfig.setMillisecond(tmpl, validMillisecond); } return tmpl; }, [value, pickerValue, hour, minute, second, millisecond, validHour, validMinute, validSecond, validMillisecond, pickerHour, pickerMinute, pickerSecond, pickerMillisecond, generateConfig]); // ===================== Columns Change ===================== var fillColumnValue = function fillColumnValue(val, func) { if (val === null) { return null; } return generateConfig[func](triggerDateTmpl, val); }; var getNextHourTime = function getNextHourTime(val) { return fillColumnValue(val, 'setHour'); }; var getNextMinuteTime = function getNextMinuteTime(val) { return fillColumnValue(val, 'setMinute'); }; var getNextSecondTime = function getNextSecondTime(val) { return fillColumnValue(val, 'setSecond'); }; var getNextMillisecondTime = function getNextMillisecondTime(val) { return fillColumnValue(val, 'setMillisecond'); }; var getMeridiemTime = function getMeridiemTime(val) { if (val === null) { return null; } if (val === 'am' && !isAM(hour)) { return generateConfig.setHour(triggerDateTmpl, hour - 12); } else if (val === 'pm' && isAM(hour)) { return generateConfig.setHour(triggerDateTmpl, hour + 12); } return triggerDateTmpl; }; var onHourChange = function onHourChange(val) { triggerChange(getNextHourTime(val)); }; var onMinuteChange = function onMinuteChange(val) { triggerChange(getNextMinuteTime(val)); }; var onSecondChange = function onSecondChange(val) { triggerChange(getNextSecondTime(val)); }; var onMillisecondChange = function onMillisecondChange(val) { triggerChange(getNextMillisecondTime(val)); }; var onMeridiemChange = function onMeridiemChange(val) { triggerChange(getMeridiemTime(val)); }; // ====================== Column Hover ====================== var onHourHover = function onHourHover(val) { onHover(getNextHourTime(val)); }; var onMinuteHover = function onMinuteHover(val) { onHover(getNextMinuteTime(val)); }; var onSecondHover = function onSecondHover(val) { onHover(getNextSecondTime(val)); }; var onMillisecondHover = function onMillisecondHover(val) { onHover(getNextMillisecondTime(val)); }; var onMeridiemHover = function onMeridiemHover(val) { onHover(getMeridiemTime(val)); }; // ========================= Render ========================= var sharedColumnProps = { onDblClick: onCellDblClick, changeOnScroll: changeOnScroll }; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement("div", { className: "".concat(prefixCls, "-content") }, showHour && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(_TimeColumn__WEBPACK_IMPORTED_MODULE_6__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ units: hourUnits, value: hour, optionalValue: pickerHour, type: "hour", onChange: onHourChange, onHover: onHourHover }, sharedColumnProps)), showMinute && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(_TimeColumn__WEBPACK_IMPORTED_MODULE_6__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ units: minuteUnits, value: minute, optionalValue: pickerMinute, type: "minute", onChange: onMinuteChange, onHover: onMinuteHover }, sharedColumnProps)), showSecond && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(_TimeColumn__WEBPACK_IMPORTED_MODULE_6__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ units: secondUnits, value: second, optionalValue: pickerSecond, type: "second", onChange: onSecondChange, onHover: onSecondHover }, sharedColumnProps)), showMillisecond && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(_TimeColumn__WEBPACK_IMPORTED_MODULE_6__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ units: millisecondUnits, value: millisecond, optionalValue: pickerMillisecond, type: "millisecond", onChange: onMillisecondChange, onHover: onMillisecondHover }, sharedColumnProps)), showMeridiem && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(_TimeColumn__WEBPACK_IMPORTED_MODULE_6__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ units: meridiemUnits, value: meridiem, type: "meridiem", onChange: onMeridiemChange, onHover: onMeridiemHover }, sharedColumnProps))); } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerPanel/TimePanel/TimePanelBody/useScrollTo.js": /*!*********************************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerPanel/TimePanel/TimePanelBody/useScrollTo.js ***! \*********************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useScrollTo) /* harmony export */ }); /* harmony import */ var rc_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rc-util */ "../../../node_modules/rc-util/es/index.js"); /* harmony import */ var rc_util_es_raf__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rc-util/es/raf */ "../../../node_modules/rc-util/es/raf.js"); /* harmony import */ var rc_util_es_Dom_isVisible__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rc-util/es/Dom/isVisible */ "../../../node_modules/rc-util/es/Dom/isVisible.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); var SPEED_PTG = 1 / 3; function useScrollTo(ulRef, value) { // ========================= Scroll ========================= var scrollingRef = react__WEBPACK_IMPORTED_MODULE_3__.useRef(false); var scrollRafRef = react__WEBPACK_IMPORTED_MODULE_3__.useRef(null); var scrollDistRef = react__WEBPACK_IMPORTED_MODULE_3__.useRef(null); var isScrolling = function isScrolling() { return scrollingRef.current; }; var stopScroll = function stopScroll() { rc_util_es_raf__WEBPACK_IMPORTED_MODULE_1__["default"].cancel(scrollRafRef.current); scrollingRef.current = false; }; var scrollRafTimesRef = react__WEBPACK_IMPORTED_MODULE_3__.useRef(); var startScroll = function startScroll() { var ul = ulRef.current; scrollDistRef.current = null; scrollRafTimesRef.current = 0; if (ul) { var targetLi = ul.querySelector("[data-value=\"".concat(value, "\"]")); var firstLi = ul.querySelector("li"); var doScroll = function doScroll() { stopScroll(); scrollingRef.current = true; scrollRafTimesRef.current += 1; var currentTop = ul.scrollTop; var firstLiTop = firstLi.offsetTop; var targetLiTop = targetLi.offsetTop; var targetTop = targetLiTop - firstLiTop; // Wait for element exist. 5 frames is enough if (targetLiTop === 0 && targetLi !== firstLi || !(0,rc_util_es_Dom_isVisible__WEBPACK_IMPORTED_MODULE_2__["default"])(ul)) { if (scrollRafTimesRef.current <= 5) { scrollRafRef.current = (0,rc_util_es_raf__WEBPACK_IMPORTED_MODULE_1__["default"])(doScroll); } return; } var nextTop = currentTop + (targetTop - currentTop) * SPEED_PTG; var dist = Math.abs(targetTop - nextTop); // Break if dist get larger, which means user is scrolling if (scrollDistRef.current !== null && scrollDistRef.current < dist) { stopScroll(); return; } scrollDistRef.current = dist; // Stop when dist is less than 1 if (dist <= 1) { ul.scrollTop = targetTop; stopScroll(); return; } // IE not support `scrollTo` ul.scrollTop = nextTop; scrollRafRef.current = (0,rc_util_es_raf__WEBPACK_IMPORTED_MODULE_1__["default"])(doScroll); }; if (targetLi && firstLi) { doScroll(); } } }; // ======================== Trigger ========================= var syncScroll = (0,rc_util__WEBPACK_IMPORTED_MODULE_0__.useEvent)(startScroll); return [syncScroll, stopScroll, isScrolling]; } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerPanel/TimePanel/TimePanelBody/util.js": /*!**************************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerPanel/TimePanel/TimePanelBody/util.js ***! \**************************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ findValidateTime: () => (/* binding */ findValidateTime) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js"); function findValidateTime(date, getHourUnits, getMinuteUnits, getSecondUnits, getMillisecondUnits, generateConfig) { var nextDate = date; function alignValidate(getUnitValue, setUnitValue, units) { var nextValue = generateConfig[getUnitValue](nextDate); var nextUnit = units.find(function (unit) { return unit.value === nextValue; }); if (!nextUnit || nextUnit.disabled) { // Find most closest unit var validateUnits = units.filter(function (unit) { return !unit.disabled; }); var reverseEnabledUnits = (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(validateUnits).reverse(); var validateUnit = reverseEnabledUnits.find(function (unit) { return unit.value <= nextValue; }) || validateUnits[0]; if (validateUnit) { nextValue = validateUnit.value; nextDate = generateConfig[setUnitValue](nextDate, nextValue); } } return nextValue; } // Find validate hour var nextHour = alignValidate('getHour', 'setHour', getHourUnits()); // Find validate minute var nextMinute = alignValidate('getMinute', 'setMinute', getMinuteUnits(nextHour)); // Find validate second var nextSecond = alignValidate('getSecond', 'setSecond', getSecondUnits(nextHour, nextMinute)); // Find validate millisecond alignValidate('getMillisecond', 'setMillisecond', getMillisecondUnits(nextHour, nextMinute, nextSecond)); return nextDate; } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerPanel/TimePanel/index.js": /*!*************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerPanel/TimePanel/index.js ***! \*************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ TimePanel) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _utils_dateUtil__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/dateUtil */ "../../../node_modules/rc-picker/es/utils/dateUtil.js"); /* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../context */ "../../../node_modules/rc-picker/es/PickerPanel/context.js"); /* harmony import */ var _PanelHeader__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../PanelHeader */ "../../../node_modules/rc-picker/es/PickerPanel/PanelHeader.js"); /* harmony import */ var _TimePanelBody__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./TimePanelBody */ "../../../node_modules/rc-picker/es/PickerPanel/TimePanel/TimePanelBody/index.js"); function TimePanel(props) { var prefixCls = props.prefixCls, value = props.value, locale = props.locale, generateConfig = props.generateConfig, showTime = props.showTime; var _ref = showTime || {}, format = _ref.format; var panelPrefixCls = "".concat(prefixCls, "-time-panel"); // ========================== Base ========================== var _useInfo = (0,_context__WEBPACK_IMPORTED_MODULE_4__.useInfo)(props, 'time'), _useInfo2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_useInfo, 1), info = _useInfo2[0]; // ========================= Render ========================= return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(_context__WEBPACK_IMPORTED_MODULE_4__.PanelContext.Provider, { value: info }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement("div", { className: classnames__WEBPACK_IMPORTED_MODULE_1___default()(panelPrefixCls) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(_PanelHeader__WEBPACK_IMPORTED_MODULE_5__["default"], null, value ? (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_3__.formatValue)(value, { locale: locale, format: format, generateConfig: generateConfig }) : "\xA0"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(_TimePanelBody__WEBPACK_IMPORTED_MODULE_6__["default"], showTime))); } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerPanel/WeekPanel/index.js": /*!*************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerPanel/WeekPanel/index.js ***! \*************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ WeekPanel) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _utils_dateUtil__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../utils/dateUtil */ "../../../node_modules/rc-picker/es/utils/dateUtil.js"); /* harmony import */ var _DatePanel__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../DatePanel */ "../../../node_modules/rc-picker/es/PickerPanel/DatePanel/index.js"); function WeekPanel(props) { var prefixCls = props.prefixCls, generateConfig = props.generateConfig, locale = props.locale, value = props.value, hoverValue = props.hoverValue, hoverRangeValue = props.hoverRangeValue; // =============================== Row ================================ var localeName = locale.locale; var rowPrefixCls = "".concat(prefixCls, "-week-panel-row"); var rowClassName = function rowClassName(currentDate) { var rangeCls = {}; if (hoverRangeValue) { var _hoverRangeValue = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(hoverRangeValue, 2), rangeStart = _hoverRangeValue[0], rangeEnd = _hoverRangeValue[1]; var isRangeStart = (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_5__.isSameWeek)(generateConfig, localeName, rangeStart, currentDate); var isRangeEnd = (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_5__.isSameWeek)(generateConfig, localeName, rangeEnd, currentDate); rangeCls["".concat(rowPrefixCls, "-range-start")] = isRangeStart; rangeCls["".concat(rowPrefixCls, "-range-end")] = isRangeEnd; rangeCls["".concat(rowPrefixCls, "-range-hover")] = !isRangeStart && !isRangeEnd && (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_5__.isInRange)(generateConfig, rangeStart, rangeEnd, currentDate); } if (hoverValue) { rangeCls["".concat(rowPrefixCls, "-hover")] = hoverValue.some(function (date) { return (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_5__.isSameWeek)(generateConfig, localeName, currentDate, date); }); } return classnames__WEBPACK_IMPORTED_MODULE_3___default()(rowPrefixCls, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, "".concat(rowPrefixCls, "-selected"), !hoverRangeValue && (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_5__.isSameWeek)(generateConfig, localeName, value, currentDate)), // Patch for hover range rangeCls); }; // ============================== Render ============================== return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement(_DatePanel__WEBPACK_IMPORTED_MODULE_6__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, props, { mode: "week", panelName: "week", rowClassName: rowClassName })); } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerPanel/YearPanel/index.js": /*!*************************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerPanel/YearPanel/index.js ***! \*************************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ YearPanel) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../utils/dateUtil */ "../../../node_modules/rc-picker/es/utils/dateUtil.js"); /* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../context */ "../../../node_modules/rc-picker/es/PickerPanel/context.js"); /* harmony import */ var _PanelBody__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../PanelBody */ "../../../node_modules/rc-picker/es/PickerPanel/PanelBody.js"); /* harmony import */ var _PanelHeader__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../PanelHeader */ "../../../node_modules/rc-picker/es/PickerPanel/PanelHeader.js"); function YearPanel(props) { var prefixCls = props.prefixCls, locale = props.locale, generateConfig = props.generateConfig, pickerValue = props.pickerValue, disabledDate = props.disabledDate, onPickerValueChange = props.onPickerValueChange, onModeChange = props.onModeChange; var panelPrefixCls = "".concat(prefixCls, "-year-panel"); // ========================== Base ========================== var _useInfo = (0,_context__WEBPACK_IMPORTED_MODULE_5__.useInfo)(props, 'year'), _useInfo2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useInfo, 1), info = _useInfo2[0]; var getStartYear = function getStartYear(date) { var startYear = Math.floor(generateConfig.getYear(date) / 10) * 10; return generateConfig.setYear(date, startYear); }; var getEndYear = function getEndYear(date) { var startYear = getStartYear(date); return generateConfig.addYear(startYear, 9); }; var startYearDate = getStartYear(pickerValue); var endYearDate = getEndYear(pickerValue); var baseDate = generateConfig.addYear(startYearDate, -1); // ========================= Cells ========================== var getCellDate = function getCellDate(date, offset) { return generateConfig.addYear(date, offset); }; var getCellText = function getCellText(date) { return (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__.formatValue)(date, { locale: locale, format: locale.cellYearFormat, generateConfig: generateConfig }); }; var getCellClassName = function getCellClassName(date) { return (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, "".concat(prefixCls, "-cell-in-view"), (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__.isSameYear)(generateConfig, date, startYearDate) || (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__.isSameYear)(generateConfig, date, endYearDate) || (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__.isInRange)(generateConfig, startYearDate, endYearDate, date)); }; // ======================== Disabled ======================== var mergedDisabledDate = disabledDate ? function (currentDate, disabledInfo) { // Start var startMonth = generateConfig.setMonth(currentDate, 0); var startDate = generateConfig.setDate(startMonth, 1); // End var endMonth = generateConfig.addYear(startDate, 1); var endDate = generateConfig.addDate(endMonth, -1); return disabledDate(startDate, disabledInfo) && disabledDate(endDate, disabledInfo); } : null; // ========================= Header ========================= var yearNode = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement("button", { type: "button", key: "decade", "aria-label": locale.decadeSelect, onClick: function onClick() { onModeChange('decade'); }, tabIndex: -1, className: "".concat(prefixCls, "-decade-btn") }, (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__.formatValue)(startYearDate, { locale: locale, format: locale.yearFormat, generateConfig: generateConfig }), "-", (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_4__.formatValue)(endYearDate, { locale: locale, format: locale.yearFormat, generateConfig: generateConfig })); // ========================= Render ========================= return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_context__WEBPACK_IMPORTED_MODULE_5__.PanelContext.Provider, { value: info }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement("div", { className: panelPrefixCls }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_PanelHeader__WEBPACK_IMPORTED_MODULE_7__["default"], { superOffset: function superOffset(distance) { return generateConfig.addYear(pickerValue, distance * 10); }, onChange: onPickerValueChange // Limitation , getStart: getStartYear, getEnd: getEndYear }, yearNode), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_PanelBody__WEBPACK_IMPORTED_MODULE_6__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, props, { disabledDate: mergedDisabledDate, titleFormat: locale.fieldYearFormat, colNum: 3, rowNum: 4, baseDate: baseDate // Body , getCellDate: getCellDate, getCellText: getCellText, getCellClassName: getCellClassName })))); } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerPanel/context.js": /*!*****************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerPanel/context.js ***! \*****************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ PanelContext: () => (/* binding */ PanelContext), /* harmony export */ PickerHackContext: () => (/* binding */ PickerHackContext), /* harmony export */ useInfo: () => (/* binding */ useInfo), /* harmony export */ usePanelContext: () => (/* binding */ usePanelContext) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /** Used for each single Panel. e.g. DatePanel */ var PanelContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(null); function usePanelContext() { return react__WEBPACK_IMPORTED_MODULE_0__.useContext(PanelContext); } /** * Get shared props for the SharedPanelProps interface. */ function useInfo(props, panelType) { var prefixCls = props.prefixCls, generateConfig = props.generateConfig, locale = props.locale, disabledDate = props.disabledDate, minDate = props.minDate, maxDate = props.maxDate, cellRender = props.cellRender, hoverValue = props.hoverValue, hoverRangeValue = props.hoverRangeValue, onHover = props.onHover, values = props.values, pickerValue = props.pickerValue, onSelect = props.onSelect, prevIcon = props.prevIcon, nextIcon = props.nextIcon, superPrevIcon = props.superPrevIcon, superNextIcon = props.superNextIcon; // ========================= MISC ========================= var now = generateConfig.getNow(); // ========================= Info ========================= var info = { now: now, values: values, pickerValue: pickerValue, prefixCls: prefixCls, disabledDate: disabledDate, minDate: minDate, maxDate: maxDate, cellRender: cellRender, hoverValue: hoverValue, hoverRangeValue: hoverRangeValue, onHover: onHover, locale: locale, generateConfig: generateConfig, onSelect: onSelect, panelType: panelType, // Icons prevIcon: prevIcon, nextIcon: nextIcon, superPrevIcon: superPrevIcon, superNextIcon: superNextIcon }; return [info, now]; } // ============================== Internal ============================== /** * Internal usage for RangePicker to not to show the operation arrow */ var PickerHackContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext({}); if (true) { PickerHackContext.displayName = 'PickerHackContext'; } /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerPanel/index.js": /*!***************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerPanel/index.js ***! \***************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../../../node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js"); /* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"); /* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var rc_util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! rc-util */ "../../../node_modules/rc-util/es/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_7__); /* harmony import */ var _hooks_useLocale__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../hooks/useLocale */ "../../../node_modules/rc-picker/es/hooks/useLocale.js"); /* harmony import */ var _hooks_useTimeConfig__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../hooks/useTimeConfig */ "../../../node_modules/rc-picker/es/hooks/useTimeConfig.js"); /* harmony import */ var _hooks_useToggleDates__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../hooks/useToggleDates */ "../../../node_modules/rc-picker/es/hooks/useToggleDates.js"); /* harmony import */ var _PickerInput_context__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../PickerInput/context */ "../../../node_modules/rc-picker/es/PickerInput/context.js"); /* harmony import */ var _PickerInput_hooks_useCellRender__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../PickerInput/hooks/useCellRender */ "../../../node_modules/rc-picker/es/PickerInput/hooks/useCellRender.js"); /* harmony import */ var _utils_dateUtil__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../utils/dateUtil */ "../../../node_modules/rc-picker/es/utils/dateUtil.js"); /* harmony import */ var _utils_miscUtil__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../utils/miscUtil */ "../../../node_modules/rc-picker/es/utils/miscUtil.js"); /* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./context */ "../../../node_modules/rc-picker/es/PickerPanel/context.js"); /* harmony import */ var _DatePanel__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./DatePanel */ "../../../node_modules/rc-picker/es/PickerPanel/DatePanel/index.js"); /* harmony import */ var _DateTimePanel__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./DateTimePanel */ "../../../node_modules/rc-picker/es/PickerPanel/DateTimePanel/index.js"); /* harmony import */ var _DecadePanel__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./DecadePanel */ "../../../node_modules/rc-picker/es/PickerPanel/DecadePanel/index.js"); /* harmony import */ var _MonthPanel__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./MonthPanel */ "../../../node_modules/rc-picker/es/PickerPanel/MonthPanel/index.js"); /* harmony import */ var _QuarterPanel__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./QuarterPanel */ "../../../node_modules/rc-picker/es/PickerPanel/QuarterPanel/index.js"); /* harmony import */ var _TimePanel__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./TimePanel */ "../../../node_modules/rc-picker/es/PickerPanel/TimePanel/index.js"); /* harmony import */ var _WeekPanel__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./WeekPanel */ "../../../node_modules/rc-picker/es/PickerPanel/WeekPanel/index.js"); /* harmony import */ var _YearPanel__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./YearPanel */ "../../../node_modules/rc-picker/es/PickerPanel/YearPanel/index.js"); var DefaultComponents = { date: _DatePanel__WEBPACK_IMPORTED_MODULE_16__["default"], datetime: _DateTimePanel__WEBPACK_IMPORTED_MODULE_17__["default"], week: _WeekPanel__WEBPACK_IMPORTED_MODULE_22__["default"], month: _MonthPanel__WEBPACK_IMPORTED_MODULE_19__["default"], quarter: _QuarterPanel__WEBPACK_IMPORTED_MODULE_20__["default"], year: _YearPanel__WEBPACK_IMPORTED_MODULE_23__["default"], decade: _DecadePanel__WEBPACK_IMPORTED_MODULE_18__["default"], time: _TimePanel__WEBPACK_IMPORTED_MODULE_21__["default"] }; function PickerPanel(props, ref) { var _React$useContext; var locale = props.locale, generateConfig = props.generateConfig, direction = props.direction, prefixCls = props.prefixCls, _props$tabIndex = props.tabIndex, tabIndex = _props$tabIndex === void 0 ? 0 : _props$tabIndex, multiple = props.multiple, defaultValue = props.defaultValue, value = props.value, onChange = props.onChange, onSelect = props.onSelect, defaultPickerValue = props.defaultPickerValue, pickerValue = props.pickerValue, onPickerValueChange = props.onPickerValueChange, mode = props.mode, onPanelChange = props.onPanelChange, _props$picker = props.picker, picker = _props$picker === void 0 ? 'date' : _props$picker, showTime = props.showTime, hoverValue = props.hoverValue, hoverRangeValue = props.hoverRangeValue, cellRender = props.cellRender, dateRender = props.dateRender, monthCellRender = props.monthCellRender, _props$components = props.components, components = _props$components === void 0 ? {} : _props$components, hideHeader = props.hideHeader; var mergedPrefixCls = ((_React$useContext = react__WEBPACK_IMPORTED_MODULE_7__.useContext(_PickerInput_context__WEBPACK_IMPORTED_MODULE_11__["default"])) === null || _React$useContext === void 0 ? void 0 : _React$useContext.prefixCls) || prefixCls || 'rc-picker'; // ========================== Refs ========================== var rootRef = react__WEBPACK_IMPORTED_MODULE_7__.useRef(); react__WEBPACK_IMPORTED_MODULE_7__.useImperativeHandle(ref, function () { return { nativeElement: rootRef.current }; }); // ========================== Time ========================== // Auto `format` need to check `showTime.showXXX` first. // And then merge the `locale` into `mergedShowTime`. var _getTimeProps = (0,_hooks_useTimeConfig__WEBPACK_IMPORTED_MODULE_9__.getTimeProps)(props), _getTimeProps2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_getTimeProps, 4), timeProps = _getTimeProps2[0], localeTimeProps = _getTimeProps2[1], showTimeFormat = _getTimeProps2[2], propFormat = _getTimeProps2[3]; // ========================= Locale ========================= var filledLocale = (0,_hooks_useLocale__WEBPACK_IMPORTED_MODULE_8__["default"])(locale, localeTimeProps); // ========================= Picker ========================= var internalPicker = picker === 'date' && showTime ? 'datetime' : picker; // ======================== ShowTime ======================== var mergedShowTime = react__WEBPACK_IMPORTED_MODULE_7__.useMemo(function () { return (0,_hooks_useTimeConfig__WEBPACK_IMPORTED_MODULE_9__.fillShowTimeConfig)(internalPicker, showTimeFormat, propFormat, timeProps, filledLocale); }, [internalPicker, showTimeFormat, propFormat, timeProps, filledLocale]); // ========================== Now =========================== var now = generateConfig.getNow(); // ========================== Mode ========================== var _useMergedState = (0,rc_util__WEBPACK_IMPORTED_MODULE_6__.useMergedState)(picker, { value: mode, postState: function postState(val) { return val || 'date'; } }), _useMergedState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_useMergedState, 2), mergedMode = _useMergedState2[0], setMergedMode = _useMergedState2[1]; var internalMode = mergedMode === 'date' && mergedShowTime ? 'datetime' : mergedMode; // ========================= Toggle ========================= var toggleDates = (0,_hooks_useToggleDates__WEBPACK_IMPORTED_MODULE_10__["default"])(generateConfig, locale, internalPicker); // ========================= Value ========================== // >>> Real value // Interactive with `onChange` event which only trigger when the `mode` is `picker` var _useMergedState3 = (0,rc_util__WEBPACK_IMPORTED_MODULE_6__.useMergedState)(defaultValue, { value: value }), _useMergedState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_useMergedState3, 2), innerValue = _useMergedState4[0], setMergedValue = _useMergedState4[1]; var mergedValue = react__WEBPACK_IMPORTED_MODULE_7__.useMemo(function () { // Clean up `[null]` var values = (0,_utils_miscUtil__WEBPACK_IMPORTED_MODULE_14__.toArray)(innerValue).filter(function (val) { return val; }); return multiple ? values : values.slice(0, 1); }, [innerValue, multiple]); // Sync value and only trigger onChange event when changed var triggerChange = (0,rc_util__WEBPACK_IMPORTED_MODULE_6__.useEvent)(function (nextValue) { setMergedValue(nextValue); if (onChange && (nextValue === null || mergedValue.length !== nextValue.length || mergedValue.some(function (ori, index) { return !(0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_13__.isSame)(generateConfig, locale, ori, nextValue[index], internalPicker); }))) { onChange === null || onChange === void 0 || onChange(multiple ? nextValue : nextValue[0]); } }); // >>> CalendarValue // CalendarValue is a temp value for user operation // which will only trigger `onCalendarChange` but not `onChange` var onInternalSelect = (0,rc_util__WEBPACK_IMPORTED_MODULE_6__.useEvent)(function (newDate) { onSelect === null || onSelect === void 0 || onSelect(newDate); if (mergedMode === picker) { var nextValues = multiple ? toggleDates(mergedValue, newDate) : [newDate]; triggerChange(nextValues); } }); // >>> PickerValue // PickerValue is used to control the current displaying panel var _useMergedState5 = (0,rc_util__WEBPACK_IMPORTED_MODULE_6__.useMergedState)(defaultPickerValue || mergedValue[0] || now, { value: pickerValue }), _useMergedState6 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(_useMergedState5, 2), mergedPickerValue = _useMergedState6[0], setInternalPickerValue = _useMergedState6[1]; react__WEBPACK_IMPORTED_MODULE_7__.useEffect(function () { if (mergedValue[0] && !pickerValue) { setInternalPickerValue(mergedValue[0]); } }, [mergedValue[0]]); // Both trigger when manually pickerValue or mode change var triggerPanelChange = function triggerPanelChange(viewDate, nextMode) { onPanelChange === null || onPanelChange === void 0 || onPanelChange(viewDate || pickerValue, nextMode || mergedMode); }; var setPickerValue = function setPickerValue(nextPickerValue) { var triggerPanelEvent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; setInternalPickerValue(nextPickerValue); onPickerValueChange === null || onPickerValueChange === void 0 || onPickerValueChange(nextPickerValue); if (triggerPanelEvent) { triggerPanelChange(nextPickerValue); } }; var triggerModeChange = function triggerModeChange(nextMode, viewDate) { setMergedMode(nextMode); if (viewDate) { setPickerValue(viewDate); } triggerPanelChange(viewDate, nextMode); }; var onPanelValueSelect = function onPanelValueSelect(nextValue) { onInternalSelect(nextValue); setPickerValue(nextValue); // Update mode if needed if (mergedMode !== picker) { var decadeYearQueue = ['decade', 'year']; var decadeYearMonthQueue = [].concat(decadeYearQueue, ['month']); var pickerQueue = { quarter: [].concat(decadeYearQueue, ['quarter']), week: [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_3__["default"])(decadeYearMonthQueue), ['week']), date: [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_3__["default"])(decadeYearMonthQueue), ['date']) }; var queue = pickerQueue[picker] || decadeYearMonthQueue; var index = queue.indexOf(mergedMode); var nextMode = queue[index + 1]; if (nextMode) { triggerModeChange(nextMode, nextValue); } } }; // ======================= Hover Date ======================= var hoverRangeDate = react__WEBPACK_IMPORTED_MODULE_7__.useMemo(function () { var start; var end; if (Array.isArray(hoverRangeValue)) { var _hoverRangeValue = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_4__["default"])(hoverRangeValue, 2); start = _hoverRangeValue[0]; end = _hoverRangeValue[1]; } else { start = hoverRangeValue; } // Return for not exist if (!start && !end) { return null; } // Fill if has empty start = start || end; end = end || start; return generateConfig.isAfter(start, end) ? [end, start] : [start, end]; }, [hoverRangeValue, generateConfig]); // ======================= Components ======================= // >>> cellRender var onInternalCellRender = (0,_PickerInput_hooks_useCellRender__WEBPACK_IMPORTED_MODULE_12__["default"])(cellRender, dateRender, monthCellRender); // ======================= Components ======================= var PanelComponent = components[internalMode] || DefaultComponents[internalMode] || _DatePanel__WEBPACK_IMPORTED_MODULE_16__["default"]; // ======================== Context ========================= var parentHackContext = react__WEBPACK_IMPORTED_MODULE_7__.useContext(_context__WEBPACK_IMPORTED_MODULE_15__.PickerHackContext); var pickerPanelContext = react__WEBPACK_IMPORTED_MODULE_7__.useMemo(function () { return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])({}, parentHackContext), {}, { hideHeader: hideHeader }); }, [parentHackContext, hideHeader]); // ======================== Warnings ======================== if (true) { (0,rc_util__WEBPACK_IMPORTED_MODULE_6__.warning)(!mergedValue || mergedValue.every(function (val) { return generateConfig.isValidate(val); }), 'Invalidate date pass to `value` or `defaultValue`.'); } // ========================= Render ========================= var panelCls = "".concat(mergedPrefixCls, "-panel"); var panelProps = (0,_utils_miscUtil__WEBPACK_IMPORTED_MODULE_14__.pickProps)(props, [ // Week 'showWeek', // Icons 'prevIcon', 'nextIcon', 'superPrevIcon', 'superNextIcon', // Disabled 'disabledDate', 'minDate', 'maxDate', // Hover 'onHover']); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7__.createElement(_context__WEBPACK_IMPORTED_MODULE_15__.PickerHackContext.Provider, { value: pickerPanelContext }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7__.createElement("div", { ref: rootRef, tabIndex: tabIndex, className: classnames__WEBPACK_IMPORTED_MODULE_5___default()(panelCls, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, "".concat(panelCls, "-rtl"), direction === 'rtl')) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7__.createElement(PanelComponent, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, panelProps, { // Time showTime: mergedShowTime // MISC , prefixCls: mergedPrefixCls, locale: filledLocale, generateConfig: generateConfig // Mode , onModeChange: triggerModeChange // Value , pickerValue: mergedPickerValue, onPickerValueChange: function onPickerValueChange(nextPickerValue) { setPickerValue(nextPickerValue, true); }, value: mergedValue[0], onSelect: onPanelValueSelect, values: mergedValue // Render , cellRender: onInternalCellRender // Hover , hoverRangeValue: hoverRangeDate, hoverValue: hoverValue })))); } var RefPanelPicker = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7__.memo( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7__.forwardRef(PickerPanel)); if (true) { RefPanelPicker.displayName = 'PanelPicker'; } // Make support generic /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (RefPanelPicker); /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerTrigger/index.js": /*!*****************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerTrigger/index.js ***! \*****************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js"); /* harmony import */ var _rc_component_trigger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @rc-component/trigger */ "../../../node_modules/@rc-component/trigger/es/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ "../../../node_modules/classnames/index.js"); /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _utils_uiUtil__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/uiUtil */ "../../../node_modules/rc-picker/es/utils/uiUtil.js"); /* harmony import */ var _PickerInput_context__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../PickerInput/context */ "../../../node_modules/rc-picker/es/PickerInput/context.js"); var BUILT_IN_PLACEMENTS = { bottomLeft: { points: ['tl', 'bl'], offset: [0, 4], overflow: { adjustX: 1, adjustY: 1 } }, bottomRight: { points: ['tr', 'br'], offset: [0, 4], overflow: { adjustX: 1, adjustY: 1 } }, topLeft: { points: ['bl', 'tl'], offset: [0, -4], overflow: { adjustX: 0, adjustY: 1 } }, topRight: { points: ['br', 'tr'], offset: [0, -4], overflow: { adjustX: 0, adjustY: 1 } } }; function PickerTrigger(_ref) { var popupElement = _ref.popupElement, popupStyle = _ref.popupStyle, popupClassName = _ref.popupClassName, popupAlign = _ref.popupAlign, transitionName = _ref.transitionName, getPopupContainer = _ref.getPopupContainer, children = _ref.children, range = _ref.range, placement = _ref.placement, _ref$builtinPlacement = _ref.builtinPlacements, builtinPlacements = _ref$builtinPlacement === void 0 ? BUILT_IN_PLACEMENTS : _ref$builtinPlacement, direction = _ref.direction, visible = _ref.visible, onClose = _ref.onClose; var _React$useContext = react__WEBPACK_IMPORTED_MODULE_3__.useContext(_PickerInput_context__WEBPACK_IMPORTED_MODULE_5__["default"]), prefixCls = _React$useContext.prefixCls; var dropdownPrefixCls = "".concat(prefixCls, "-dropdown"); var realPlacement = (0,_utils_uiUtil__WEBPACK_IMPORTED_MODULE_4__.getRealPlacement)(placement, direction === 'rtl'); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_rc_component_trigger__WEBPACK_IMPORTED_MODULE_1__["default"], { showAction: [], hideAction: ['click'], popupPlacement: realPlacement, builtinPlacements: builtinPlacements, prefixCls: dropdownPrefixCls, popupTransitionName: transitionName, popup: popupElement, popupAlign: popupAlign, popupVisible: visible, popupClassName: classnames__WEBPACK_IMPORTED_MODULE_2___default()(popupClassName, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])({}, "".concat(dropdownPrefixCls, "-range"), range), "".concat(dropdownPrefixCls, "-rtl"), direction === 'rtl')), popupStyle: popupStyle, stretch: "minWidth", getPopupContainer: getPopupContainer, onPopupVisibleChange: function onPopupVisibleChange(nextVisible) { if (!nextVisible) { onClose(); } } }, children); } /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (PickerTrigger); /***/ }), /***/ "../../../node_modules/rc-picker/es/PickerTrigger/util.js": /*!****************************************************************!*\ !*** ../../../node_modules/rc-picker/es/PickerTrigger/util.js ***! \****************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ pickTriggerProps: () => (/* binding */ pickTriggerProps) /* harmony export */ }); /* harmony import */ var _utils_miscUtil__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/miscUtil */ "../../../node_modules/rc-picker/es/utils/miscUtil.js"); function pickTriggerProps(props) { return (0,_utils_miscUtil__WEBPACK_IMPORTED_MODULE_0__.pickProps)(props, ['placement', 'builtinPlacements', 'popupAlign', 'getPopupContainer', 'transitionName', 'direction']); } /***/ }), /***/ "../../../node_modules/rc-picker/es/hooks/useLocale.js": /*!*************************************************************!*\ !*** ../../../node_modules/rc-picker/es/hooks/useLocale.js ***! \*************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useLocale), /* harmony export */ fillTimeFormat: () => (/* binding */ fillTimeFormat) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); function fillTimeFormat(showHour, showMinute, showSecond, showMillisecond, showMeridiem) { var timeFormat = ''; // Base HH:mm:ss var cells = []; if (showHour) { cells.push(showMeridiem ? 'hh' : 'HH'); } if (showMinute) { cells.push('mm'); } if (showSecond) { cells.push('ss'); } timeFormat = cells.join(':'); // Millisecond if (showMillisecond) { timeFormat += '.SSS'; } // Meridiem if (showMeridiem) { timeFormat += ' A'; } return timeFormat; } /** * Used for `useFilledProps` since it already in the React.useMemo */ function fillLocale(locale, showHour, showMinute, showSecond, showMillisecond, use12Hours) { // Not fill `monthFormat` since `locale.shortMonths` handle this // Not fill `cellMeridiemFormat` since AM & PM by default var fieldDateTimeFormat = locale.fieldDateTimeFormat, fieldDateFormat = locale.fieldDateFormat, fieldTimeFormat = locale.fieldTimeFormat, fieldMonthFormat = locale.fieldMonthFormat, fieldYearFormat = locale.fieldYearFormat, fieldWeekFormat = locale.fieldWeekFormat, fieldQuarterFormat = locale.fieldQuarterFormat, yearFormat = locale.yearFormat, cellYearFormat = locale.cellYearFormat, cellQuarterFormat = locale.cellQuarterFormat, dayFormat = locale.dayFormat, cellDateFormat = locale.cellDateFormat; var timeFormat = fillTimeFormat(showHour, showMinute, showSecond, showMillisecond, use12Hours); return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, locale), {}, { fieldDateTimeFormat: fieldDateTimeFormat || "YYYY-MM-DD ".concat(timeFormat), fieldDateFormat: fieldDateFormat || 'YYYY-MM-DD', fieldTimeFormat: fieldTimeFormat || timeFormat, fieldMonthFormat: fieldMonthFormat || 'YYYY-MM', fieldYearFormat: fieldYearFormat || 'YYYY', fieldWeekFormat: fieldWeekFormat || 'gggg-wo', fieldQuarterFormat: fieldQuarterFormat || 'YYYY-[Q]Q', yearFormat: yearFormat || 'YYYY', cellYearFormat: cellYearFormat || 'YYYY', cellQuarterFormat: cellQuarterFormat || '[Q]Q', cellDateFormat: cellDateFormat || dayFormat || 'D' }); } /** * Fill locale format as start up */ function useLocale(locale, showProps) { var showHour = showProps.showHour, showMinute = showProps.showMinute, showSecond = showProps.showSecond, showMillisecond = showProps.showMillisecond, use12Hours = showProps.use12Hours; return react__WEBPACK_IMPORTED_MODULE_1___default().useMemo(function () { return fillLocale(locale, showHour, showMinute, showSecond, showMillisecond, use12Hours); }, [locale, showHour, showMinute, showSecond, showMillisecond, use12Hours]); } /***/ }), /***/ "../../../node_modules/rc-picker/es/hooks/useSyncState.js": /*!****************************************************************!*\ !*** ../../../node_modules/rc-picker/es/hooks/useSyncState.js ***! \****************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useSyncState) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); /** * Sync value with state. * This should only used for internal which not affect outside calculation. * Since it's not safe for suspense. */ function useSyncState(defaultValue, controlledValue) { var valueRef = react__WEBPACK_IMPORTED_MODULE_1__.useRef(defaultValue); var _React$useState = react__WEBPACK_IMPORTED_MODULE_1__.useState({}), _React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_React$useState, 2), forceUpdate = _React$useState2[1]; var getter = function getter(useControlledValueFirst) { return useControlledValueFirst && controlledValue !== undefined ? controlledValue : valueRef.current; }; var setter = function setter(nextValue) { valueRef.current = nextValue; forceUpdate({}); }; return [getter, setter, getter(true)]; } /***/ }), /***/ "../../../node_modules/rc-picker/es/hooks/useTimeConfig.js": /*!*****************************************************************!*\ !*** ../../../node_modules/rc-picker/es/hooks/useTimeConfig.js ***! \*****************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ fillShowTimeConfig: () => (/* binding */ fillShowTimeConfig), /* harmony export */ getTimeProps: () => (/* binding */ getTimeProps) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "../../../node_modules/@babel/runtime/helpers/esm/typeof.js"); /* harmony import */ var _utils_miscUtil__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/miscUtil */ "../../../node_modules/rc-picker/es/utils/miscUtil.js"); /* harmony import */ var _useLocale__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./useLocale */ "../../../node_modules/rc-picker/es/hooks/useLocale.js"); function checkShow(format, keywords, show) { return show !== null && show !== void 0 ? show : keywords.some(function (keyword) { return format.includes(keyword); }); } var showTimeKeys = [ // 'format', 'showNow', 'showHour', 'showMinute', 'showSecond', 'showMillisecond', 'use12Hours', 'hourStep', 'minuteStep', 'secondStep', 'millisecondStep', 'hideDisabledOptions', 'defaultValue', 'disabledHours', 'disabledMinutes', 'disabledSeconds', 'disabledMilliseconds', 'disabledTime', 'changeOnScroll', 'defaultOpenValue']; /** * Get SharedTimeProps from props. */ function pickTimeProps(props) { var timeProps = (0,_utils_miscUtil__WEBPACK_IMPORTED_MODULE_3__.pickProps)(props, showTimeKeys); var format = props.format, picker = props.picker; var propFormat = null; if (format) { propFormat = format; if (Array.isArray(propFormat)) { propFormat = propFormat[0]; } propFormat = (0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_2__["default"])(propFormat) === 'object' ? propFormat.format : propFormat; } if (picker === 'time') { timeProps.format = propFormat; } return [timeProps, propFormat]; } function isStringFormat(format) { return format && typeof format === 'string'; } /** Check if all the showXXX is `undefined` */ function existShowConfig(showHour, showMinute, showSecond, showMillisecond) { return [showHour, showMinute, showSecond, showMillisecond].some(function (show) { return show !== undefined; }); } /** Fill the showXXX if needed */ function fillShowConfig(hasShowConfig, showHour, showMinute, showSecond, showMillisecond) { var parsedShowHour = showHour; var parsedShowMinute = showMinute; var parsedShowSecond = showSecond; if (!hasShowConfig && !parsedShowHour && !parsedShowMinute && !parsedShowSecond && !showMillisecond) { parsedShowHour = true; parsedShowMinute = true; parsedShowSecond = true; } else if (hasShowConfig) { var _parsedShowHour, _parsedShowMinute, _parsedShowSecond; var existFalse = [parsedShowHour, parsedShowMinute, parsedShowSecond].some(function (show) { return show === false; }); var existTrue = [parsedShowHour, parsedShowMinute, parsedShowSecond].some(function (show) { return show === true; }); var defaultShow = existFalse ? true : !existTrue; parsedShowHour = (_parsedShowHour = parsedShowHour) !== null && _parsedShowHour !== void 0 ? _parsedShowHour : defaultShow; parsedShowMinute = (_parsedShowMinute = parsedShowMinute) !== null && _parsedShowMinute !== void 0 ? _parsedShowMinute : defaultShow; parsedShowSecond = (_parsedShowSecond = parsedShowSecond) !== null && _parsedShowSecond !== void 0 ? _parsedShowSecond : defaultShow; } return [parsedShowHour, parsedShowMinute, parsedShowSecond, showMillisecond]; } /** * Get `showHour`, `showMinute`, `showSecond` or other from the props. * This is pure function, will not get `showXXX` from the `format` prop. */ function getTimeProps(componentProps) { var showTime = componentProps.showTime; var _pickTimeProps = pickTimeProps(componentProps), _pickTimeProps2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_pickTimeProps, 2), pickedProps = _pickTimeProps2[0], propFormat = _pickTimeProps2[1]; var showTimeConfig = showTime && (0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_2__["default"])(showTime) === 'object' ? showTime : {}; var timeConfig = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({ defaultOpenValue: showTimeConfig.defaultOpenValue || showTimeConfig.defaultValue }, pickedProps), showTimeConfig); var showMillisecond = timeConfig.showMillisecond; var showHour = timeConfig.showHour, showMinute = timeConfig.showMinute, showSecond = timeConfig.showSecond; var hasShowConfig = existShowConfig(showHour, showMinute, showSecond, showMillisecond); var _fillShowConfig = fillShowConfig(hasShowConfig, showHour, showMinute, showSecond, showMillisecond); var _fillShowConfig2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_fillShowConfig, 3); showHour = _fillShowConfig2[0]; showMinute = _fillShowConfig2[1]; showSecond = _fillShowConfig2[2]; return [timeConfig, (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, timeConfig), {}, { showHour: showHour, showMinute: showMinute, showSecond: showSecond, showMillisecond: showMillisecond }), timeConfig.format, propFormat]; } function fillShowTimeConfig(picker, showTimeFormat, propFormat, timeConfig, locale) { var isTimePicker = picker === 'time'; if (picker === 'datetime' || isTimePicker) { var pickedProps = timeConfig; // ====================== BaseFormat ====================== var defaultLocaleFormat = (0,_utils_miscUtil__WEBPACK_IMPORTED_MODULE_3__.getRowFormat)(picker, locale, null); var baselineFormat = defaultLocaleFormat; var formatList = [showTimeFormat, propFormat]; for (var i = 0; i < formatList.length; i += 1) { var format = (0,_utils_miscUtil__WEBPACK_IMPORTED_MODULE_3__.toArray)(formatList[i])[0]; if (isStringFormat(format)) { baselineFormat = format; break; } } // ========================= Show ========================= var showHour = pickedProps.showHour, showMinute = pickedProps.showMinute, showSecond = pickedProps.showSecond, showMillisecond = pickedProps.showMillisecond; var use12Hours = pickedProps.use12Hours; var showMeridiem = checkShow(baselineFormat, ['a', 'A', 'LT', 'LLL', 'LTS'], use12Hours); var hasShowConfig = existShowConfig(showHour, showMinute, showSecond, showMillisecond); // Fill with format, if needed if (!hasShowConfig) { showHour = checkShow(baselineFormat, ['H', 'h', 'k', 'LT', 'LLL']); showMinute = checkShow(baselineFormat, ['m', 'LT', 'LLL']); showSecond = checkShow(baselineFormat, ['s', 'LTS']); showMillisecond = checkShow(baselineFormat, ['SSS']); } // Fallback if all can not see // ======================== Format ======================== var _fillShowConfig3 = fillShowConfig(hasShowConfig, showHour, showMinute, showSecond, showMillisecond); var _fillShowConfig4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_fillShowConfig3, 3); showHour = _fillShowConfig4[0]; showMinute = _fillShowConfig4[1]; showSecond = _fillShowConfig4[2]; var timeFormat = showTimeFormat || (0,_useLocale__WEBPACK_IMPORTED_MODULE_4__.fillTimeFormat)(showHour, showMinute, showSecond, showMillisecond, showMeridiem); // ======================== Props ========================= return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, pickedProps), {}, { // Format format: timeFormat, // Show Config showHour: showHour, showMinute: showMinute, showSecond: showSecond, showMillisecond: showMillisecond, use12Hours: showMeridiem }); } return null; } /***/ }), /***/ "../../../node_modules/rc-picker/es/hooks/useTimeInfo.js": /*!***************************************************************!*\ !*** ../../../node_modules/rc-picker/es/hooks/useTimeInfo.js ***! \***************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useTimeInfo) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/esm/objectSpread2.js"); /* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js"); /* harmony import */ var rc_util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rc-util */ "../../../node_modules/rc-util/es/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "../../../node_modules/react/index.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _PickerPanel_TimePanel_TimePanelBody_util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../PickerPanel/TimePanel/TimePanelBody/util */ "../../../node_modules/rc-picker/es/PickerPanel/TimePanel/TimePanelBody/util.js"); /* harmony import */ var _utils_miscUtil__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/miscUtil */ "../../../node_modules/rc-picker/es/utils/miscUtil.js"); function emptyDisabled() { return []; } function generateUnits(start, end) { var step = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1; var hideDisabledOptions = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; var disabledUnits = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : []; var pad = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 2; var units = []; var integerStep = step >= 1 ? step | 0 : 1; for (var i = start; i <= end; i += integerStep) { var disabled = disabledUnits.includes(i); if (!disabled || !hideDisabledOptions) { units.push({ label: (0,_utils_miscUtil__WEBPACK_IMPORTED_MODULE_5__.leftPad)(i, pad), value: i, disabled: disabled }); } } return units; } /** * Parse time props to get util info */ function useTimeInfo(generateConfig) { var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var date = arguments.length > 2 ? arguments[2] : undefined; var _ref = props || {}, use12Hours = _ref.use12Hours, _ref$hourStep = _ref.hourStep, hourStep = _ref$hourStep === void 0 ? 1 : _ref$hourStep, _ref$minuteStep = _ref.minuteStep, minuteStep = _ref$minuteStep === void 0 ? 1 : _ref$minuteStep, _ref$secondStep = _ref.secondStep, secondStep = _ref$secondStep === void 0 ? 1 : _ref$secondStep, _ref$millisecondStep = _ref.millisecondStep, millisecondStep = _ref$millisecondStep === void 0 ? 100 : _ref$millisecondStep, hideDisabledOptions = _ref.hideDisabledOptions, disabledTime = _ref.disabledTime, disabledHours = _ref.disabledHours, disabledMinutes = _ref.disabledMinutes, disabledSeconds = _ref.disabledSeconds; var mergedDate = react__WEBPACK_IMPORTED_MODULE_3__.useMemo(function () { return date || generateConfig.getNow(); }, [date, generateConfig]); // ======================== Warnings ======================== if (true) { var isHourStepValid = 24 % hourStep === 0; var isMinuteStepValid = 60 % minuteStep === 0; var isSecondStepValid = 60 % secondStep === 0; (0,rc_util__WEBPACK_IMPORTED_MODULE_2__.warning)(isHourStepValid, "`hourStep` ".concat(hourStep, " is invalid. It should be a factor of 24.")); (0,rc_util__WEBPACK_IMPORTED_MODULE_2__.warning)(isMinuteStepValid, "`minuteStep` ".concat(minuteStep, " is invalid. It should be a factor of 60.")); (0,rc_util__WEBPACK_IMPORTED_MODULE_2__.warning)(isSecondStepValid, "`secondStep` ".concat(secondStep, " is invalid. It should be a factor of 60.")); } // ======================== Disabled ======================== var getDisabledTimes = react__WEBPACK_IMPORTED_MODULE_3__.useCallback(function (targetDate) { var disabledConfig = (disabledTime === null || disabledTime === void 0 ? void 0 : disabledTime(targetDate)) || {}; return [disabledConfig.disabledHours || disabledHours || emptyDisabled, disabledConfig.disabledMinutes || disabledMinutes || emptyDisabled, disabledConfig.disabledSeconds || disabledSeconds || emptyDisabled, disabledConfig.disabledMilliseconds || emptyDisabled]; }, [disabledTime, disabledHours, disabledMinutes, disabledSeconds]); var _React$useMemo = react__WEBPACK_IMPORTED_MODULE_3__.useMemo(function () { return getDisabledTimes(mergedDate); }, [mergedDate, getDisabledTimes]), _React$useMemo2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_React$useMemo, 4), mergedDisabledHours = _React$useMemo2[0], mergedDisabledMinutes = _React$useMemo2[1], mergedDisabledSeconds = _React$useMemo2[2], mergedDisabledMilliseconds = _React$useMemo2[3]; // ========================= Column ========================= var getAllUnits = react__WEBPACK_IMPORTED_MODULE_3__.useCallback(function (getDisabledHours, getDisabledMinutes, getDisabledSeconds, getDisabledMilliseconds) { var hours = generateUnits(0, 23, hourStep, hideDisabledOptions, getDisabledHours()); // Hours var rowHourUnits = use12Hours ? hours.map(function (unit) { return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, unit), {}, { label: (0,_utils_miscUtil__WEBPACK_IMPORTED_MODULE_5__.leftPad)(unit.value % 12 || 12, 2) }); }) : hours; // Minutes var getMinuteUnits = function getMinuteUnits(nextHour) { return generateUnits(0, 59, minuteStep, hideDisabledOptions, getDisabledMinutes(nextHour)); }; // Seconds var getSecondUnits = function getSecondUnits(nextHour, nextMinute) { return generateUnits(0, 59, secondStep, hideDisabledOptions, getDisabledSeconds(nextHour, nextMinute)); }; // Milliseconds var getMillisecondUnits = function getMillisecondUnits(nextHour, nextMinute, nextSecond) { return generateUnits(0, 999, millisecondStep, hideDisabledOptions, getDisabledMilliseconds(nextHour, nextMinute, nextSecond), 3); }; return [rowHourUnits, getMinuteUnits, getSecondUnits, getMillisecondUnits]; }, [hideDisabledOptions, hourStep, use12Hours, millisecondStep, minuteStep, secondStep]); var _React$useMemo3 = react__WEBPACK_IMPORTED_MODULE_3__.useMemo(function () { return getAllUnits(mergedDisabledHours, mergedDisabledMinutes, mergedDisabledSeconds, mergedDisabledMilliseconds); }, [getAllUnits, mergedDisabledHours, mergedDisabledMinutes, mergedDisabledSeconds, mergedDisabledMilliseconds]), _React$useMemo4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_React$useMemo3, 4), rowHourUnits = _React$useMemo4[0], getMinuteUnits = _React$useMemo4[1], getSecondUnits = _React$useMemo4[2], getMillisecondUnits = _React$useMemo4[3]; // ======================== Validate ======================== /** * Get validate time with `disabledTime`, `certainDate` to specific the date need to check */ var getValidTime = function getValidTime(nextTime, certainDate) { var getCheckHourUnits = function getCheckHourUnits() { return rowHourUnits; }; var getCheckMinuteUnits = getMinuteUnits; var getCheckSecondUnits = getSecondUnits; var getCheckMillisecondUnits = getMillisecondUnits; if (certainDate) { var _getDisabledTimes = getDisabledTimes(certainDate), _getDisabledTimes2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_getDisabledTimes, 4), targetDisabledHours = _getDisabledTimes2[0], targetDisabledMinutes = _getDisabledTimes2[1], targetDisabledSeconds = _getDisabledTimes2[2], targetDisabledMilliseconds = _getDisabledTimes2[3]; var _getAllUnits = getAllUnits(targetDisabledHours, targetDisabledMinutes, targetDisabledSeconds, targetDisabledMilliseconds), _getAllUnits2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_1__["default"])(_getAllUnits, 4), targetRowHourUnits = _getAllUnits2[0], targetGetMinuteUnits = _getAllUnits2[1], targetGetSecondUnits = _getAllUnits2[2], targetGetMillisecondUnits = _getAllUnits2[3]; getCheckHourUnits = function getCheckHourUnits() { return targetRowHourUnits; }; getCheckMinuteUnits = targetGetMinuteUnits; getCheckSecondUnits = targetGetSecondUnits; getCheckMillisecondUnits = targetGetMillisecondUnits; } var validateDate = (0,_PickerPanel_TimePanel_TimePanelBody_util__WEBPACK_IMPORTED_MODULE_4__.findValidateTime)(nextTime, getCheckHourUnits, getCheckMinuteUnits, getCheckSecondUnits, getCheckMillisecondUnits, generateConfig); return validateDate; }; return [ // getValidTime getValidTime, // Units rowHourUnits, getMinuteUnits, getSecondUnits, getMillisecondUnits]; } /***/ }), /***/ "../../../node_modules/rc-picker/es/hooks/useToggleDates.js": /*!******************************************************************!*\ !*** ../../../node_modules/rc-picker/es/hooks/useToggleDates.js ***! \******************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useToggleDates) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js"); /* harmony import */ var _utils_dateUtil__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/dateUtil */ "../../../node_modules/rc-picker/es/utils/dateUtil.js"); /** * Toggles the presence of a value in an array. * If the value exists in the array, removed it. * Else add it. */ function useToggleDates(generateConfig, locale, panelMode) { function toggleDates(list, target) { var index = list.findIndex(function (date) { return (0,_utils_dateUtil__WEBPACK_IMPORTED_MODULE_1__.isSame)(generateConfig, locale, date, target, panelMode); }); if (index === -1) { return [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(list), [target]); } var sliceList = (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(list); sliceList.splice(index, 1); return sliceList; } return toggleDates; } /***/ }), /***/ "../../../node_modules/rc-picker/es/index.js": /*!***************************************************!*\ !*** ../../../node_modules/rc-picker/es/index.js ***! \***************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Picker: () => (/* reexport safe */ _PickerInput_SinglePicker__WEBPACK_IMPORTED_MODULE_1__["default"]), /* harmony export */ PickerPanel: () => (/* reexport safe */ _PickerPanel__WEBPACK_IMPORTED_MODULE_2__["default"]), /* harmony export */ RangePicker: () => (/* reexport safe */ _PickerInput_RangePicker__WEBPACK_IMPORTED_MODULE_0__["default"]), /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var _PickerInput_RangePicker__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./PickerInput/RangePicker */ "../../../node_modules/rc-picker/es/PickerInput/RangePicker.js"); /* harmony import */ var _PickerInput_SinglePicker__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./PickerInput/SinglePicker */ "../../../node_modules/rc-picker/es/PickerInput/SinglePicker.js"); /* harmony import */ var _PickerPanel__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./PickerPanel */ "../../../node_modules/rc-picker/es/PickerPanel/index.js"); /** * What's new? * - Common * - [Break] Support special year format, all the year will follow the locale config. * - Blur all of field will trigger `onChange` if validate * - Support `preserveInvalidOnBlur` to not to clean input if invalid and remove `changeOnBlur` * - `pickerValue` is now full controlled * - `defaultPickerValue` will take effect on every field active with popup opening. * - [Break] clear button return the event with `onClick` * * - Locale * - Remove `dateFormat` since it's never used * - Remove `dateTimeFormat` since it's never used * * - Picker * - TimePicker support `changeOnScroll` * - TimePicker support `millisecond` * - Support cellMeridiemFormat for AM/PM * - Get correct `disabledHours` when set `use12Hours` * - Support `showWeek` * * - RangePicker * - [Break] RangePicker is now not limit the range of clicked field. * - Trigger `onCalendarChange` when type correct * - [Break] Not order `value` if given `value` is wrong order. * - Hover `presets` will show date in input field. * - [Break] RangePicker go to end field, `pickerValue` will follow the start field if not controlled. */ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_PickerInput_SinglePicker__WEBPACK_IMPORTED_MODULE_1__["default"]); /***/ }), /***/ "../../../node_modules/rc-picker/es/utils/dateUtil.js": /*!************************************************************!*\ !*** ../../../node_modules/rc-picker/es/utils/dateUtil.js ***! \************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ WEEK_DAY_COUNT: () => (/* binding */ WEEK_DAY_COUNT), /* harmony export */ fillTime: () => (/* binding */ fillTime), /* harmony export */ formatValue: () => (/* binding */ formatValue), /* harmony export */ getQuarter: () => (/* binding */ getQuarter), /* harmony export */ getWeekStartDate: () => (/* binding */ getWeekStartDate), /* harmony export */ isInRange: () => (/* binding */ isInRange), /* harmony export */ isSame: () => (/* binding */ isSame), /* harmony export */ isSameDate: () => (/* binding */ isSameDate), /* harmony export */ isSameDecade: () => (/* binding */ isSameDecade), /* harmony export */ isSameMonth: () => (/* binding */ isSameMonth), /* harmony export */ isSameOrAfter: () => (/* binding */ isSameOrAfter), /* harmony export */ isSameQuarter: () => (/* binding */ isSameQuarter), /* harmony export */ isSameTime: () => (/* binding */ isSameTime), /* harmony export */ isSameTimestamp: () => (/* binding */ isSameTimestamp), /* harmony export */ isSameWeek: () => (/* binding */ isSameWeek), /* harmony export */ isSameYear: () => (/* binding */ isSameYear) /* harmony export */ }); var WEEK_DAY_COUNT = 7; /** * Wrap the compare logic. * This will compare the each of value is empty first. * 1. All is empty, return true. * 2. One is empty, return false. * 3. return customize compare logic. */ function nullableCompare(value1, value2, oriCompareFn) { if (!value1 && !value2 || value1 === value2) { return true; } if (!value1 || !value2) { return false; } return oriCompareFn(); } function isSameDecade(generateConfig, decade1, decade2) { return nullableCompare(decade1, decade2, function () { var num1 = Math.floor(generateConfig.getYear(decade1) / 10); var num2 = Math.floor(generateConfig.getYear(decade2) / 10); return num1 === num2; }); } function isSameYear(generateConfig, year1, year2) { return nullableCompare(year1, year2, function () { return generateConfig.getYear(year1) === generateConfig.getYear(year2); }); } function getQuarter(generateConfig, date) { var quota = Math.floor(generateConfig.getMonth(date) / 3); return quota + 1; } function isSameQuarter(generateConfig, quarter1, quarter2) { return nullableCompare(quarter1, quarter2, function () { return isSameYear(generateConfig, quarter1, quarter2) && getQuarter(generateConfig, quarter1) === getQuarter(generateConfig, quarter2); }); } function isSameMonth(generateConfig, month1, month2) { return nullableCompare(month1, month2, function () { return isSameYear(generateConfig, month1, month2) && generateConfig.getMonth(month1) === generateConfig.getMonth(month2); }); } function isSameDate(generateConfig, date1, date2) { return nullableCompare(date1, date2, function () { return isSameYear(generateConfig, date1, date2) && isSameMonth(generateConfig, date1, date2) && generateConfig.getDate(date1) === generateConfig.getDate(date2); }); } function isSameTime(generateConfig, time1, time2) { return nullableCompare(time1, time2, function () { return generateConfig.getHour(time1) === generateConfig.getHour(time2) && generateConfig.getMinute(time1) === generateConfig.getMinute(time2) && generateConfig.getSecond(time1) === generateConfig.getSecond(time2); }); } /** * Check if the Date is all the same of timestamp */ function isSameTimestamp(generateConfig, time1, time2) { return nullableCompare(time1, time2, function () { return isSameDate(generateConfig, time1, time2) && isSameTime(generateConfig, time1, time2) && generateConfig.getMillisecond(time1) === generateConfig.getMillisecond(time2); }); } function isSameWeek(generateConfig, locale, date1, date2) { return nullableCompare(date1, date2, function () { var weekStartDate1 = generateConfig.locale.getWeekFirstDate(locale, date1); var weekStartDate2 = generateConfig.locale.getWeekFirstDate(locale, date2); return isSameYear(generateConfig, weekStartDate1, weekStartDate2) && generateConfig.locale.getWeek(locale, date1) === generateConfig.locale.getWeek(locale, date2); }); } function isSame(generateConfig, locale, source, target, type) { switch (type) { case 'date': return isSameDate(generateConfig, source, target); case 'week': return isSameWeek(generateConfig, locale.locale, source, target); case 'month': return isSameMonth(generateConfig, source, target); case 'quarter': return isSameQuarter(generateConfig, source, target); case 'year': return isSameYear(generateConfig, source, target); case 'decade': return isSameDecade(generateConfig, source, target); case 'time': return isSameTime(generateConfig, source, target); default: return isSameTimestamp(generateConfig, source, target); } } /** Between in date but not equal of date */ function isInRange(generateConfig, startDate, endDate, current) { if (!startDate || !endDate || !current) { return false; } return generateConfig.isAfter(current, startDate) && generateConfig.isAfter(endDate, current); } function isSameOrAfter(generateConfig, locale, date1, date2, type) { if (isSame(generateConfig, locale, date1, date2, type)) { return true; } return generateConfig.isAfter(date1, date2); } function getWeekStartDate(locale, generateConfig, value) { var weekFirstDay = generateConfig.locale.getWeekFirstDay(locale); var monthStartDate = generateConfig.setDate(value, 1); var startDateWeekDay = generateConfig.getWeekDay(monthStartDate); var alignStartDate = generateConfig.addDate(monthStartDate, weekFirstDay - startDateWeekDay); if (generateConfig.getMonth(alignStartDate) === generateConfig.getMonth(value) && generateConfig.getDate(alignStartDate) > 1) { alignStartDate = generateConfig.addDate(alignStartDate, -7); } return alignStartDate; } function formatValue(value, _ref) { var generateConfig = _ref.generateConfig, locale = _ref.locale, format = _ref.format; if (!value) { return ''; } return typeof format === 'function' ? format(value) : generateConfig.locale.format(locale.locale, value, format); } /** * Fill the time info into Date if provided. */ function fillTime(generateConfig, date, time) { var tmpDate = date; var getFn = ['getHour', 'getMinute', 'getSecond', 'getMillisecond']; var setFn = ['setHour', 'setMinute', 'setSecond', 'setMillisecond']; setFn.forEach(function (fn, index) { if (time) { tmpDate = generateConfig[fn](tmpDate, generateConfig[getFn[index]](time)); } else { tmpDate = generateConfig[fn](tmpDate, 0); } }); return tmpDate; } /***/ }), /***/ "../../../node_modules/rc-picker/es/utils/miscUtil.js": /*!************************************************************!*\ !*** ../../../node_modules/rc-picker/es/utils/miscUtil.js ***! \************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ fillIndex: () => (/* binding */ fillIndex), /* harmony export */ getFromDate: () => (/* binding */ getFromDate), /* harmony export */ getRowFormat: () => (/* binding */ getRowFormat), /* harmony export */ leftPad: () => (/* binding */ leftPad), /* harmony export */ pickProps: () => (/* binding */ pickProps), /* harmony export */ toArray: () => (/* binding */ toArray) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "../../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js"); function leftPad(str, length) { var fill = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '0'; var current = String(str); while (current.length < length) { current = "".concat(fill).concat(current); } return current; } /** * Convert `value` to array. Will provide `[]` if is null or undefined. */ function toArray(val) { if (val === null || val === undefined) { return []; } return Array.isArray(val) ? val : [val]; } function fillIndex(ori, index, value) { var clone = (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(ori); clone[index] = value; return clone; } /** Pick props from the key list. Will filter empty value */ function pickProps(props, keys) { var clone = {}; var mergedKeys = keys || Object.keys(props); mergedKeys.forEach(function (key) { if (props[key] !== undefined) { clone[key] = props[key]; } }); return clone; } function getRowFormat(picker, locale, format) { if (format) { return format; } switch (picker) { // All from the `locale.fieldXXXFormat` first case 'time': return locale.fieldTimeFormat; case 'datetime': return locale.fieldDateTimeFormat; case 'month': return locale.fieldMonthFormat; case 'year': return locale.fieldYearFormat; case 'quarter': return locale.fieldQuarterFormat; case 'week': return locale.fieldWeekFormat; default: return locale.fieldDateFormat; } } function getFromDate(calendarValues, activeIndexList, activeIndex) { var mergedActiveIndex = activeIndex !== undefined ? activeIndex : activeIndexList[activeIndexList.length - 1]; var firstValuedIndex = activeIndexList.find(function (index) { return calendarValues[index]; }); return mergedActiveIndex !== firstValuedIndex ? calendarValues[firstValuedIndex] : undefined; } /***/ }), /***/ "../../../node_modules/rc-picker/es/utils/uiUtil.js": /*!**********************************************************!*\ !*** ../../../node_modules/rc-picker/es/utils/uiUtil.js ***! \**********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ getRealPlacement: () => (/* binding */ getRealPlacement) /* harmony export */ }); // ====================== Mode ====================== function getRealPlacement(placement, rtl) { if (placement !== undefined) { return placement; } return rtl ? 'bottomRight' : 'bottomLeft'; } /***/ }), /***/ "../../../node_modules/rc-picker/lib/generate/dayjs.js": /*!*************************************************************!*\ !*** ../../../node_modules/rc-picker/lib/generate/dayjs.js ***! \*************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { var _interopRequireDefault = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../../../node_modules/@babel/runtime/helpers/interopRequireDefault.js")["default"]); Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; var _dayjs = _interopRequireDefault(__webpack_require__(/*! dayjs */ "../../../node_modules/dayjs/dayjs.min.js")); var _weekday = _interopRequireDefault(__webpack_require__(/*! dayjs/plugin/weekday */ "../../../node_modules/dayjs/plugin/weekday.js")); var _localeData = _interopRequireDefault(__webpack_require__(/*! dayjs/plugin/localeData */ "../../../node_modules/dayjs/plugin/localeData.js")); var _weekOfYear = _interopRequireDefault(__webpack_require__(/*! dayjs/plugin/weekOfYear */ "../../../node_modules/dayjs/plugin/weekOfYear.js")); var _weekYear = _interopRequireDefault(__webpack_require__(/*! dayjs/plugin/weekYear */ "../../../node_modules/dayjs/plugin/weekYear.js")); var _advancedFormat = _interopRequireDefault(__webpack_require__(/*! dayjs/plugin/advancedFormat */ "../../../node_modules/dayjs/plugin/advancedFormat.js")); var _customParseFormat = _interopRequireDefault(__webpack_require__(/*! dayjs/plugin/customParseFormat */ "../../../node_modules/dayjs/plugin/customParseFormat.js")); _dayjs.default.extend(_customParseFormat.default); _dayjs.default.extend(_advancedFormat.default); _dayjs.default.extend(_weekday.default); _dayjs.default.extend(_localeData.default); _dayjs.default.extend(_weekOfYear.default); _dayjs.default.extend(_weekYear.default); _dayjs.default.extend(function (o, c) { // todo support Wo (ISO week) var proto = c.prototype; var oldFormat = proto.format; proto.format = function f(formatStr) { var str = (formatStr || '').replace('Wo', 'wo'); return oldFormat.bind(this)(str); }; }); var localeMap = { // ar_EG: // az_AZ: // bg_BG: bn_BD: 'bn-bd', by_BY: 'be', // ca_ES: // cs_CZ: // da_DK: // de_DE: // el_GR: en_GB: 'en-gb', en_US: 'en', // es_ES: // et_EE: // fa_IR: // fi_FI: fr_BE: 'fr', // todo: dayjs has no fr_BE locale, use fr at present fr_CA: 'fr-ca', // fr_FR: // ga_IE: // gl_ES: // he_IL: // hi_IN: // hr_HR: // hu_HU: hy_AM: 'hy-am', // id_ID: // is_IS: // it_IT: // ja_JP: // ka_GE: // kk_KZ: // km_KH: kmr_IQ: 'ku', // kn_IN: // ko_KR: // ku_IQ: // previous ku in antd // lt_LT: // lv_LV: // mk_MK: // ml_IN: // mn_MN: // ms_MY: // nb_NO: // ne_NP: nl_BE: 'nl-be', // nl_NL: // pl_PL: pt_BR: 'pt-br', // pt_PT: // ro_RO: // ru_RU: // sk_SK: // sl_SI: // sr_RS: // sv_SE: // ta_IN: // th_TH: // tr_TR: // uk_UA: // ur_PK: // vi_VN: zh_CN: 'zh-cn', zh_HK: 'zh-hk', zh_TW: 'zh-tw' }; var parseLocale = function parseLocale(locale) { var mapLocale = localeMap[locale]; return mapLocale || locale.split('_')[0]; }; /* istanbul ignore next */ var parseNoMatchNotice = function parseNoMatchNotice() { // zombieJ: // When user typing, its always miss match format. // This check is meaningless. // https://github.com/ant-design/ant-design/issues/51839 // noteOnce(false, 'Not match any format. Please help to fire a issue about this.'); }; var generateConfig = { // get getNow: function getNow() { var now = (0, _dayjs.default)(); // https://github.com/ant-design/ant-design/discussions/50934 if (typeof now.tz === 'function') { return now.tz(); // use default timezone } return now; }, getFixedDate: function getFixedDate(string) { return (0, _dayjs.default)(string, ['YYYY-M-DD', 'YYYY-MM-DD']); }, getEndDate: function getEndDate(date) { return date.endOf('month'); }, getWeekDay: function getWeekDay(date) { var clone = date.locale('en'); return clone.weekday() + clone.localeData().firstDayOfWeek(); }, getYear: function getYear(date) { return date.year(); }, getMonth: function getMonth(date) { return date.month(); }, getDate: function getDate(date) { return date.date(); }, getHour: function getHour(date) { return date.hour(); }, getMinute: function getMinute(date) { return date.minute(); }, getSecond: function getSecond(date) { return date.second(); }, getMillisecond: function getMillisecond(date) { return date.millisecond(); }, // set addYear: function addYear(date, diff) { return date.add(diff, 'year'); }, addMonth: function addMonth(date, diff) { return date.add(diff, 'month'); }, addDate: function addDate(date, diff) { return date.add(diff, 'day'); }, setYear: function setYear(date, year) { return date.year(year); }, setMonth: function setMonth(date, month) { return date.month(month); }, setDate: function setDate(date, num) { return date.date(num); }, setHour: function setHour(date, hour) { return date.hour(hour); }, setMinute: function setMinute(date, minute) { return date.minute(minute); }, setSecond: function setSecond(date, second) { return date.second(second); }, setMillisecond: function setMillisecond(date, milliseconds) { return date.millisecond(milliseconds); }, // Compare isAfter: function isAfter(date1, date2) { return date1.isAfter(date2); }, isValidate: function isValidate(date) { return date.isValid(); }, locale: { getWeekFirstDay: function getWeekFirstDay(locale) { return (0, _dayjs.default)().locale(parseLocale(locale)).localeData().firstDayOfWeek(); }, getWeekFirstDate: function getWeekFirstDate(locale, date) { return date.locale(parseLocale(locale)).weekday(0); }, getWeek: function getWeek(locale, date) { return date.locale(parseLocale(locale)).week(); }, getShortWeekDays: function getShortWeekDays(locale) { return (0, _dayjs.default)().locale(parseLocale(locale)).localeData().weekdaysMin(); }, getShortMonths: function getShortMonths(locale) { return (0, _dayjs.default)().locale(parseLocale(locale)).localeData().monthsShort(); }, format: function format(locale, date, _format) { return date.locale(parseLocale(locale)).format(_format); }, parse: function parse(locale, text, formats) { var localeStr = parseLocale(locale); for (var i = 0; i < formats.length; i += 1) { var format = formats[i]; var formatText = text; if (format.includes('wo') || format.includes('Wo')) { // parse Wo var year = formatText.split('-')[0]; var weekStr = formatText.split('-')[1]; var firstWeek = (0, _dayjs.default)(year, 'YYYY').startOf('year').locale(localeStr); for (var j = 0; j <= 52; j += 1) { var nextWeek = firstWeek.add(j, 'week'); if (nextWeek.format('Wo') === weekStr) { return nextWeek; } } parseNoMatchNotice(); return null; } var date = (0, _dayjs.default)(formatText, format, true).locale(localeStr); if (date.isValid()) { return date; } } if (text) { parseNoMatchNotice(); } return null; } } }; var _default = exports["default"] = generateConfig; /***/ }), /***/ "../../../node_modules/rc-picker/lib/locale/common.js": /*!************************************************************!*\ !*** ../../../node_modules/rc-picker/lib/locale/common.js ***! \************************************************************/ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.commonLocale = void 0; var commonLocale = exports.commonLocale = { yearFormat: 'YYYY', dayFormat: 'D', cellMeridiemFormat: 'A', monthBeforeYear: true }; /***/ }), /***/ "../../../node_modules/rc-picker/lib/locale/en_US.js": /*!***********************************************************!*\ !*** ../../../node_modules/rc-picker/lib/locale/en_US.js ***! \***********************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { var _interopRequireDefault = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../../../node_modules/@babel/runtime/helpers/interopRequireDefault.js")["default"]); Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; var _objectSpread2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectSpread2 */ "../../../node_modules/@babel/runtime/helpers/objectSpread2.js")); var _common = __webpack_require__(/*! ./common */ "../../../node_modules/rc-picker/lib/locale/common.js"); var locale = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, _common.commonLocale), {}, { locale: 'en_US', today: 'Today', now: 'Now', backToToday: 'Back to today', ok: 'OK', clear: 'Clear', week: 'Week', month: 'Month', year: 'Year', timeSelect: 'select time', dateSelect: 'select date', weekSelect: 'Choose a week', monthSelect: 'Choose a month', yearSelect: 'Choose a year', decadeSelect: 'Choose a decade', dateFormat: 'M/D/YYYY', dateTimeFormat: 'M/D/YYYY HH:mm:ss', previousMonth: 'Previous month (PageUp)', nextMonth: 'Next month (PageDown)', previousYear: 'Last year (Control + left)', nextYear: 'Next year (Control + right)', previousDecade: 'Last decade', nextDecade: 'Next decade', previousCentury: 'Last century', nextCentury: 'Next century' }); var _default = exports["default"] = locale; /***/ }) }]); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianMvdmVuZG9ycy1ub2RlX21vZHVsZXNfcmMtcGlja2VyX2VzX1BpY2tlclRyaWdnZXJfaW5kZXhfanMtbm9kZV9tb2R1bGVzX3JjLXBpY2tlcl9lc19QaWNrZXJUcmlnLTJiZmVjYi52b2x1bnRlZXJhcGkuMzIwZWNhNjE1N2IwMmVkZWIzOTQuYnVuZGxlLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBMEQ7QUFDYztBQUNGO0FBQ3ZDO0FBQ29CO0FBQ0E7QUFDZDtBQUNJO0FBQzFCO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUIsaURBQU87QUFDeEIsZ0JBQWdCLG9GQUFjO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsNERBQVc7QUFDdEI7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxXQUFXLHFGQUFlLEdBQUc7QUFDN0I7O0FBRUE7QUFDQSw4QkFBOEIsZ0RBQW1CO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUcsRUFBRSw0REFBVztBQUNoQjtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0Esc0JBQXNCLGdEQUFtQixDQUFDLGtEQUFZO0FBQ3REO0FBQ0EsR0FBRyxlQUFlLGdEQUFtQjtBQUNyQztBQUNBLEdBQUcsZUFBZSxnREFBbUIsQ0FBQyxvREFBVztBQUNqRDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRywwQkFBMEIsZ0RBQW1CLENBQUMsa0RBQVMsRUFBRSw4RUFBUSxHQUFHO0FBQ3ZFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNuRndFO0FBQ007QUFDUjtBQUNsQztB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ087QUFDUDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDTztBQUNQO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDTztBQUNQO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDTztBQUNQO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMzSThFO0FBQ3ZFO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUCxjQUFjLHdGQUFrQjtBQUNoQztBQUNBO0FBQ0E7O0FBRUE7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEM7Ozs7Ozs7Ozs7Ozs7O0FDaEVBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7Ozs7Ozs7Ozs7QUNOYTs7QUFFYiw2QkFBNkIsNkpBQStEO0FBQzVGLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLGtCQUFlO0FBQ2Ysb0NBQW9DLG1CQUFPLENBQUMsdURBQU87QUFDbkQsc0NBQXNDLG1CQUFPLENBQUMsMkVBQXNCO0FBQ3BFLHlDQUF5QyxtQkFBTyxDQUFDLGlGQUF5QjtBQUMxRSx5Q0FBeUMsbUJBQU8sQ0FBQyxpRkFBeUI7QUFDMUUsdUNBQXVDLG1CQUFPLENBQUMsNkVBQXVCO0FBQ3RFLDZDQUE2QyxtQkFBTyxDQUFDLHlGQUE2QjtBQUNsRixnREFBZ0QsbUJBQU8sQ0FBQywrRkFBZ0M7QUFDeEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0Esc0JBQXNCLG9CQUFvQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixTQUFTO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGtCQUFlLGtCOzs7Ozs7Ozs7O0FDL09qQjs7QUFFYiw4Q0FBNkM7QUFDN0M7QUFDQSxDQUFDLEVBQUM7QUFDRixvQkFBb0I7QUFDcEIsbUJBQW1CLG9CQUFvQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEU7Ozs7Ozs7Ozs7QUNYYTs7QUFFYiw2QkFBNkIsNkpBQStEO0FBQzVGLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLGtCQUFlO0FBQ2YsNENBQTRDLG1CQUFPLENBQUMsMkdBQXNDO0FBQzFGLGNBQWMsbUJBQU8sQ0FBQyxzRUFBVTtBQUNoQyx1RUFBdUUsMkJBQTJCO0FBQ2xHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELGVBQWUsa0JBQWUsVSIsInNvdXJjZXMiOlsid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLXBpY2tlci9lcy9QaWNrZXJQYW5lbC9RdWFydGVyUGFuZWwvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtcGlja2VyL2VzL1BpY2tlclBhbmVsL1RpbWVQYW5lbC9UaW1lUGFuZWxCb2R5L1RpbWVDb2x1bW4uanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtcGlja2VyL2VzL1BpY2tlclBhbmVsL1RpbWVQYW5lbC9UaW1lUGFuZWxCb2R5L2luZGV4LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLXBpY2tlci9lcy9QaWNrZXJQYW5lbC9UaW1lUGFuZWwvVGltZVBhbmVsQm9keS91c2VTY3JvbGxUby5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1waWNrZXIvZXMvUGlja2VyUGFuZWwvVGltZVBhbmVsL1RpbWVQYW5lbEJvZHkvdXRpbC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1waWNrZXIvZXMvUGlja2VyUGFuZWwvVGltZVBhbmVsL2luZGV4LmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLXBpY2tlci9lcy9QaWNrZXJQYW5lbC9XZWVrUGFuZWwvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtcGlja2VyL2VzL1BpY2tlclBhbmVsL1llYXJQYW5lbC9pbmRleC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1waWNrZXIvZXMvUGlja2VyUGFuZWwvY29udGV4dC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1waWNrZXIvZXMvUGlja2VyUGFuZWwvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtcGlja2VyL2VzL1BpY2tlclRyaWdnZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtcGlja2VyL2VzL1BpY2tlclRyaWdnZXIvdXRpbC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1waWNrZXIvZXMvaG9va3MvdXNlTG9jYWxlLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLXBpY2tlci9lcy9ob29rcy91c2VTeW5jU3RhdGUuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtcGlja2VyL2VzL2hvb2tzL3VzZVRpbWVDb25maWcuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtcGlja2VyL2VzL2hvb2tzL3VzZVRpbWVJbmZvLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLXBpY2tlci9lcy9ob29rcy91c2VUb2dnbGVEYXRlcy5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1waWNrZXIvZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtcGlja2VyL2VzL3V0aWxzL2RhdGVVdGlsLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLXBpY2tlci9lcy91dGlscy9taXNjVXRpbC5qcyIsIndlYnBhY2s6Ly9AY29yZS92b2x1bnRlZXJfYXBwLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yYy1waWNrZXIvZXMvdXRpbHMvdWlVdGlsLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLXBpY2tlci9saWIvZ2VuZXJhdGUvZGF5anMuanMiLCJ3ZWJwYWNrOi8vQGNvcmUvdm9sdW50ZWVyX2FwcC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmMtcGlja2VyL2xpYi9sb2NhbGUvY29tbW9uLmpzIiwid2VicGFjazovL0Bjb3JlL3ZvbHVudGVlcl9hcHAvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JjLXBpY2tlci9saWIvbG9jYWxlL2VuX1VTLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHlcIjtcbmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZm9ybWF0VmFsdWUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvZGF0ZVV0aWxcIjtcbmltcG9ydCB7IFBhbmVsQ29udGV4dCwgdXNlSW5mbyB9IGZyb20gXCIuLi9jb250ZXh0XCI7XG5pbXBvcnQgUGFuZWxCb2R5IGZyb20gXCIuLi9QYW5lbEJvZHlcIjtcbmltcG9ydCBQYW5lbEhlYWRlciBmcm9tIFwiLi4vUGFuZWxIZWFkZXJcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFF1YXJ0ZXJQYW5lbChwcm9wcykge1xuICB2YXIgcHJlZml4Q2xzID0gcHJvcHMucHJlZml4Q2xzLFxuICAgIGxvY2FsZSA9IHByb3BzLmxvY2FsZSxcbiAgICBnZW5lcmF0ZUNvbmZpZyA9IHByb3BzLmdlbmVyYXRlQ29uZmlnLFxuICAgIHBpY2tlclZhbHVlID0gcHJvcHMucGlja2VyVmFsdWUsXG4gICAgb25QaWNrZXJWYWx1ZUNoYW5nZSA9IHByb3BzLm9uUGlja2VyVmFsdWVDaGFuZ2UsXG4gICAgb25Nb2RlQ2hhbmdlID0gcHJvcHMub25Nb2RlQ2hhbmdlO1xuICB2YXIgcGFuZWxQcmVmaXhDbHMgPSBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLXF1YXJ0ZXItcGFuZWxcIik7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT0gQmFzZSA9PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgX3VzZUluZm8gPSB1c2VJbmZvKHByb3BzLCAncXVhcnRlcicpLFxuICAgIF91c2VJbmZvMiA9IF9zbGljZWRUb0FycmF5KF91c2VJbmZvLCAxKSxcbiAgICBpbmZvID0gX3VzZUluZm8yWzBdO1xuICB2YXIgYmFzZURhdGUgPSBnZW5lcmF0ZUNvbmZpZy5zZXRNb250aChwaWNrZXJWYWx1ZSwgMCk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBDZWxscyA9PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgZ2V0Q2VsbERhdGUgPSBmdW5jdGlvbiBnZXRDZWxsRGF0ZShkYXRlLCBvZmZzZXQpIHtcbiAgICByZXR1cm4gZ2VuZXJhdGVDb25maWcuYWRkTW9udGgoZGF0ZSwgb2Zmc2V0ICogMyk7XG4gIH07XG4gIHZhciBnZXRDZWxsVGV4dCA9IGZ1bmN0aW9uIGdldENlbGxUZXh0KGRhdGUpIHtcbiAgICByZXR1cm4gZm9ybWF0VmFsdWUoZGF0ZSwge1xuICAgICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgICBmb3JtYXQ6IGxvY2FsZS5jZWxsUXVhcnRlckZvcm1hdCxcbiAgICAgIGdlbmVyYXRlQ29uZmlnOiBnZW5lcmF0ZUNvbmZpZ1xuICAgIH0pO1xuICB9O1xuICB2YXIgZ2V0Q2VsbENsYXNzTmFtZSA9IGZ1bmN0aW9uIGdldENlbGxDbGFzc05hbWUoKSB7XG4gICAgcmV0dXJuIF9kZWZpbmVQcm9wZXJ0eSh7fSwgXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1jZWxsLWluLXZpZXdcIiksIHRydWUpO1xuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT0gSGVhZGVyID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIHllYXJOb2RlID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwge1xuICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAga2V5OiBcInllYXJcIixcbiAgICBcImFyaWEtbGFiZWxcIjogbG9jYWxlLnllYXJTZWxlY3QsXG4gICAgb25DbGljazogZnVuY3Rpb24gb25DbGljaygpIHtcbiAgICAgIG9uTW9kZUNoYW5nZSgneWVhcicpO1xuICAgIH0sXG4gICAgdGFiSW5kZXg6IC0xLFxuICAgIGNsYXNzTmFtZTogXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi15ZWFyLWJ0blwiKVxuICB9LCBmb3JtYXRWYWx1ZShwaWNrZXJWYWx1ZSwge1xuICAgIGxvY2FsZTogbG9jYWxlLFxuICAgIGZvcm1hdDogbG9jYWxlLnllYXJGb3JtYXQsXG4gICAgZ2VuZXJhdGVDb25maWc6IGdlbmVyYXRlQ29uZmlnXG4gIH0pKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IFJlbmRlciA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQYW5lbENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogaW5mb1xuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBwYW5lbFByZWZpeENsc1xuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQYW5lbEhlYWRlciwge1xuICAgIHN1cGVyT2Zmc2V0OiBmdW5jdGlvbiBzdXBlck9mZnNldChkaXN0YW5jZSkge1xuICAgICAgcmV0dXJuIGdlbmVyYXRlQ29uZmlnLmFkZFllYXIocGlja2VyVmFsdWUsIGRpc3RhbmNlKTtcbiAgICB9LFxuICAgIG9uQ2hhbmdlOiBvblBpY2tlclZhbHVlQ2hhbmdlXG4gICAgLy8gTGltaXRhdGlvblxuICAgICxcbiAgICBnZXRTdGFydDogZnVuY3Rpb24gZ2V0U3RhcnQoZGF0ZSkge1xuICAgICAgcmV0dXJuIGdlbmVyYXRlQ29uZmlnLnNldE1vbnRoKGRhdGUsIDApO1xuICAgIH0sXG4gICAgZ2V0RW5kOiBmdW5jdGlvbiBnZXRFbmQoZGF0ZSkge1xuICAgICAgcmV0dXJuIGdlbmVyYXRlQ29uZmlnLnNldE1vbnRoKGRhdGUsIDExKTtcbiAgICB9XG4gIH0sIHllYXJOb2RlKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUGFuZWxCb2R5LCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICB0aXRsZUZvcm1hdDogbG9jYWxlLmZpZWxkUXVhcnRlckZvcm1hdCxcbiAgICBjb2xOdW06IDQsXG4gICAgcm93TnVtOiAxLFxuICAgIGJhc2VEYXRlOiBiYXNlRGF0ZVxuICAgIC8vIEJvZHlcbiAgICAsXG4gICAgZ2V0Q2VsbERhdGU6IGdldENlbGxEYXRlLFxuICAgIGdldENlbGxUZXh0OiBnZXRDZWxsVGV4dCxcbiAgICBnZXRDZWxsQ2xhc3NOYW1lOiBnZXRDZWxsQ2xhc3NOYW1lXG4gIH0pKSkpO1xufSIsImltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG5pbXBvcnQgX3RvQ29uc3VtYWJsZUFycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b0NvbnN1bWFibGVBcnJheVwiO1xuaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB1c2VMYXlvdXRFZmZlY3QgZnJvbSBcInJjLXV0aWwvZXMvaG9va3MvdXNlTGF5b3V0RWZmZWN0XCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VQYW5lbENvbnRleHQgfSBmcm9tIFwiLi4vLi4vY29udGV4dFwiO1xuaW1wb3J0IHVzZVNjcm9sbFRvIGZyb20gXCIuL3VzZVNjcm9sbFRvXCI7XG52YXIgU0NST0xMX0RFTEFZID0gMzAwO1xuLy8gTm90IHVzZSBKU09OLnN0cmluZ2lmeSB0byBhdm9pZCBkZWFkIGxvb3BcbmZ1bmN0aW9uIGZsYXR0ZW5Vbml0cyh1bml0cykge1xuICByZXR1cm4gdW5pdHMubWFwKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgdmFyIHZhbHVlID0gX3JlZi52YWx1ZSxcbiAgICAgIGxhYmVsID0gX3JlZi5sYWJlbCxcbiAgICAgIGRpc2FibGVkID0gX3JlZi5kaXNhYmxlZDtcbiAgICByZXR1cm4gW3ZhbHVlLCBsYWJlbCwgZGlzYWJsZWRdLmpvaW4oJywnKTtcbiAgfSkuam9pbignOycpO1xufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVGltZUNvbHVtbihwcm9wcykge1xuICB2YXIgdW5pdHMgPSBwcm9wcy51bml0cyxcbiAgICB2YWx1ZSA9IHByb3BzLnZhbHVlLFxuICAgIG9wdGlvbmFsVmFsdWUgPSBwcm9wcy5vcHRpb25hbFZhbHVlLFxuICAgIHR5cGUgPSBwcm9wcy50eXBlLFxuICAgIG9uQ2hhbmdlID0gcHJvcHMub25DaGFuZ2UsXG4gICAgb25Ib3ZlciA9IHByb3BzLm9uSG92ZXIsXG4gICAgb25EYmxDbGljayA9IHByb3BzLm9uRGJsQ2xpY2ssXG4gICAgY2hhbmdlT25TY3JvbGwgPSBwcm9wcy5jaGFuZ2VPblNjcm9sbDtcbiAgdmFyIF91c2VQYW5lbENvbnRleHQgPSB1c2VQYW5lbENvbnRleHQoKSxcbiAgICBwcmVmaXhDbHMgPSBfdXNlUGFuZWxDb250ZXh0LnByZWZpeENscyxcbiAgICBjZWxsUmVuZGVyID0gX3VzZVBhbmVsQ29udGV4dC5jZWxsUmVuZGVyLFxuICAgIG5vdyA9IF91c2VQYW5lbENvbnRleHQubm93LFxuICAgIGxvY2FsZSA9IF91c2VQYW5lbENvbnRleHQubG9jYWxlO1xuICB2YXIgcGFuZWxQcmVmaXhDbHMgPSBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLXRpbWUtcGFuZWxcIik7XG4gIHZhciBjZWxsUHJlZml4Q2xzID0gXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi10aW1lLXBhbmVsLWNlbGxcIik7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT0gUmVmcyA9PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgdWxSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBTY3JvbGwgPT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgY2hlY2tEZWxheVJlZiA9IFJlYWN0LnVzZVJlZigpO1xuICB2YXIgY2xlYXJEZWxheUNoZWNrID0gZnVuY3Rpb24gY2xlYXJEZWxheUNoZWNrKCkge1xuICAgIGNsZWFyVGltZW91dChjaGVja0RlbGF5UmVmLmN1cnJlbnQpO1xuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09IFN5bmMgPT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIF91c2VTY3JvbGxUbyA9IHVzZVNjcm9sbFRvKHVsUmVmLCB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdm9pZCAwID8gdmFsdWUgOiBvcHRpb25hbFZhbHVlKSxcbiAgICBfdXNlU2Nyb2xsVG8yID0gX3NsaWNlZFRvQXJyYXkoX3VzZVNjcm9sbFRvLCAzKSxcbiAgICBzeW5jU2Nyb2xsID0gX3VzZVNjcm9sbFRvMlswXSxcbiAgICBzdG9wU2Nyb2xsID0gX3VzZVNjcm9sbFRvMlsxXSxcbiAgICBpc1Njcm9sbGluZyA9IF91c2VTY3JvbGxUbzJbMl07XG5cbiAgLy8gRWZmZWN0IHN5bmMgdmFsdWUgc2Nyb2xsXG4gIHVzZUxheW91dEVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgc3luY1Njcm9sbCgpO1xuICAgIGNsZWFyRGVsYXlDaGVjaygpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBzdG9wU2Nyb2xsKCk7XG4gICAgICBjbGVhckRlbGF5Q2hlY2soKTtcbiAgICB9O1xuICB9LCBbdmFsdWUsIG9wdGlvbmFsVmFsdWUsIGZsYXR0ZW5Vbml0cyh1bml0cyldKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IENoYW5nZSA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFNjcm9sbCBldmVudCBpZiBzeW5jIG9uU2Nyb2xsXG4gIHZhciBvbkludGVybmFsU2Nyb2xsID0gZnVuY3Rpb24gb25JbnRlcm5hbFNjcm9sbChldmVudCkge1xuICAgIGNsZWFyRGVsYXlDaGVjaygpO1xuICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgaWYgKCFpc1Njcm9sbGluZygpICYmIGNoYW5nZU9uU2Nyb2xsKSB7XG4gICAgICBjaGVja0RlbGF5UmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHVsID0gdWxSZWYuY3VycmVudDtcbiAgICAgICAgdmFyIGZpcnN0TGlUb3AgPSB1bC5xdWVyeVNlbGVjdG9yKFwibGlcIikub2Zmc2V0VG9wO1xuICAgICAgICB2YXIgbGlMaXN0ID0gQXJyYXkuZnJvbSh1bC5xdWVyeVNlbGVjdG9yQWxsKFwibGlcIikpO1xuICAgICAgICB2YXIgbGlUb3BMaXN0ID0gbGlMaXN0Lm1hcChmdW5jdGlvbiAobGkpIHtcbiAgICAgICAgICByZXR1cm4gbGkub2Zmc2V0VG9wIC0gZmlyc3RMaVRvcDtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBsaURpc3RMaXN0ID0gbGlUb3BMaXN0Lm1hcChmdW5jdGlvbiAodG9wLCBpbmRleCkge1xuICAgICAgICAgIGlmICh1bml0c1tpbmRleF0uZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHRvcCAtIHRhcmdldC5zY3JvbGxUb3ApO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBGaW5kIG1pbiBkaXN0YW5jZSBpbmRleFxuICAgICAgICB2YXIgbWluRGlzdCA9IE1hdGgubWluLmFwcGx5KE1hdGgsIF90b0NvbnN1bWFibGVBcnJheShsaURpc3RMaXN0KSk7XG4gICAgICAgIHZhciBtaW5EaXN0SW5kZXggPSBsaURpc3RMaXN0LmZpbmRJbmRleChmdW5jdGlvbiAoZGlzdCkge1xuICAgICAgICAgIHJldHVybiBkaXN0ID09PSBtaW5EaXN0O1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIHRhcmdldFVuaXQgPSB1bml0c1ttaW5EaXN0SW5kZXhdO1xuICAgICAgICBpZiAodGFyZ2V0VW5pdCAmJiAhdGFyZ2V0VW5pdC5kaXNhYmxlZCkge1xuICAgICAgICAgIG9uQ2hhbmdlKHRhcmdldFVuaXQudmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9LCBTQ1JPTExfREVMQVkpO1xuICAgIH1cbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IFJlbmRlciA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBjb2x1bW5QcmVmaXhDbHMgPSBcIlwiLmNvbmNhdChwYW5lbFByZWZpeENscywgXCItY29sdW1uXCIpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7XG4gICAgY2xhc3NOYW1lOiBjb2x1bW5QcmVmaXhDbHMsXG4gICAgcmVmOiB1bFJlZixcbiAgICBcImRhdGEtdHlwZVwiOiB0eXBlLFxuICAgIG9uU2Nyb2xsOiBvbkludGVybmFsU2Nyb2xsXG4gIH0sIHVuaXRzLm1hcChmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICB2YXIgbGFiZWwgPSBfcmVmMi5sYWJlbCxcbiAgICAgIHVuaXRWYWx1ZSA9IF9yZWYyLnZhbHVlLFxuICAgICAgZGlzYWJsZWQgPSBfcmVmMi5kaXNhYmxlZDtcbiAgICB2YXIgaW5uZXIgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KGNlbGxQcmVmaXhDbHMsIFwiLWlubmVyXCIpXG4gICAgfSwgbGFiZWwpO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpXCIsIHtcbiAgICAgIGtleTogdW5pdFZhbHVlLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKGNlbGxQcmVmaXhDbHMsIF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoe30sIFwiXCIuY29uY2F0KGNlbGxQcmVmaXhDbHMsIFwiLXNlbGVjdGVkXCIpLCB2YWx1ZSA9PT0gdW5pdFZhbHVlKSwgXCJcIi5jb25jYXQoY2VsbFByZWZpeENscywgXCItZGlzYWJsZWRcIiksIGRpc2FibGVkKSksXG4gICAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKCkge1xuICAgICAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICAgICAgb25DaGFuZ2UodW5pdFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uRG91YmxlQ2xpY2s6IGZ1bmN0aW9uIG9uRG91YmxlQ2xpY2soKSB7XG4gICAgICAgIGlmICghZGlzYWJsZWQgJiYgb25EYmxDbGljaykge1xuICAgICAgICAgIG9uRGJsQ2xpY2soKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uTW91c2VFbnRlcjogZnVuY3Rpb24gb25Nb3VzZUVudGVyKCkge1xuICAgICAgICBvbkhvdmVyKHVuaXRWYWx1ZSk7XG4gICAgICB9LFxuICAgICAgb25Nb3VzZUxlYXZlOiBmdW5jdGlvbiBvbk1vdXNlTGVhdmUoKSB7XG4gICAgICAgIG9uSG92ZXIobnVsbCk7XG4gICAgICB9LFxuICAgICAgXCJkYXRhLXZhbHVlXCI6IHVuaXRWYWx1ZVxuICAgIH0sIGNlbGxSZW5kZXIgPyBjZWxsUmVuZGVyKHVuaXRWYWx1ZSwge1xuICAgICAgcHJlZml4Q2xzOiBwcmVmaXhDbHMsXG4gICAgICBvcmlnaW5Ob2RlOiBpbm5lcixcbiAgICAgIHRvZGF5OiBub3csXG4gICAgICB0eXBlOiAndGltZScsXG4gICAgICBzdWJUeXBlOiB0eXBlLFxuICAgICAgbG9jYWxlOiBsb2NhbGVcbiAgICB9KSA6IGlubmVyKTtcbiAgfSkpO1xufSIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlVGltZUluZm8gZnJvbSBcIi4uLy4uLy4uL2hvb2tzL3VzZVRpbWVJbmZvXCI7XG5pbXBvcnQgeyBmb3JtYXRWYWx1ZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9kYXRlVXRpbFwiO1xuaW1wb3J0IHsgUGlja2VySGFja0NvbnRleHQsIHVzZVBhbmVsQ29udGV4dCB9IGZyb20gXCIuLi8uLi9jb250ZXh0XCI7XG5pbXBvcnQgVGltZUNvbHVtbiBmcm9tIFwiLi9UaW1lQ29sdW1uXCI7XG5mdW5jdGlvbiBpc0FNKGhvdXIpIHtcbiAgcmV0dXJuIGhvdXIgPCAxMjtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFRpbWVQYW5lbEJvZHkocHJvcHMpIHtcbiAgdmFyIHNob3dIb3VyID0gcHJvcHMuc2hvd0hvdXIsXG4gICAgc2hvd01pbnV0ZSA9IHByb3BzLnNob3dNaW51dGUsXG4gICAgc2hvd1NlY29uZCA9IHByb3BzLnNob3dTZWNvbmQsXG4gICAgc2hvd01pbGxpc2Vjb25kID0gcHJvcHMuc2hvd01pbGxpc2Vjb25kLFxuICAgIHNob3dNZXJpZGllbSA9IHByb3BzLnVzZTEySG91cnMsXG4gICAgY2hhbmdlT25TY3JvbGwgPSBwcm9wcy5jaGFuZ2VPblNjcm9sbDtcbiAgdmFyIF91c2VQYW5lbENvbnRleHQgPSB1c2VQYW5lbENvbnRleHQoKSxcbiAgICBwcmVmaXhDbHMgPSBfdXNlUGFuZWxDb250ZXh0LnByZWZpeENscyxcbiAgICB2YWx1ZXMgPSBfdXNlUGFuZWxDb250ZXh0LnZhbHVlcyxcbiAgICBnZW5lcmF0ZUNvbmZpZyA9IF91c2VQYW5lbENvbnRleHQuZ2VuZXJhdGVDb25maWcsXG4gICAgbG9jYWxlID0gX3VzZVBhbmVsQ29udGV4dC5sb2NhbGUsXG4gICAgb25TZWxlY3QgPSBfdXNlUGFuZWxDb250ZXh0Lm9uU2VsZWN0LFxuICAgIF91c2VQYW5lbENvbnRleHQkb25IbyA9IF91c2VQYW5lbENvbnRleHQub25Ib3ZlcixcbiAgICBvbkhvdmVyID0gX3VzZVBhbmVsQ29udGV4dCRvbkhvID09PSB2b2lkIDAgPyBmdW5jdGlvbiAoKSB7fSA6IF91c2VQYW5lbENvbnRleHQkb25IbyxcbiAgICBwaWNrZXJWYWx1ZSA9IF91c2VQYW5lbENvbnRleHQucGlja2VyVmFsdWU7XG4gIHZhciB2YWx1ZSA9ICh2YWx1ZXMgPT09IG51bGwgfHwgdmFsdWVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2YWx1ZXNbMF0pIHx8IG51bGw7XG4gIHZhciBfUmVhY3QkdXNlQ29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoUGlja2VySGFja0NvbnRleHQpLFxuICAgIG9uQ2VsbERibENsaWNrID0gX1JlYWN0JHVzZUNvbnRleHQub25DZWxsRGJsQ2xpY2s7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT0gSW5mbyA9PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgX3VzZVRpbWVJbmZvID0gdXNlVGltZUluZm8oZ2VuZXJhdGVDb25maWcsIHByb3BzLCB2YWx1ZSksXG4gICAgX3VzZVRpbWVJbmZvMiA9IF9zbGljZWRUb0FycmF5KF91c2VUaW1lSW5mbywgNSksXG4gICAgZ2V0VmFsaWRUaW1lID0gX3VzZVRpbWVJbmZvMlswXSxcbiAgICByb3dIb3VyVW5pdHMgPSBfdXNlVGltZUluZm8yWzFdLFxuICAgIGdldE1pbnV0ZVVuaXRzID0gX3VzZVRpbWVJbmZvMlsyXSxcbiAgICBnZXRTZWNvbmRVbml0cyA9IF91c2VUaW1lSW5mbzJbM10sXG4gICAgZ2V0TWlsbGlzZWNvbmRVbml0cyA9IF91c2VUaW1lSW5mbzJbNF07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBWYWx1ZSA9PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQaWNrZXJWYWx1ZSB3aWxsIHRlbGwgd2hpY2ggb25lIHRvIGFsaWduIG9uIHRoZSB0b3BcbiAgdmFyIGdldFVuaXRWYWx1ZSA9IGZ1bmN0aW9uIGdldFVuaXRWYWx1ZShmdW5jKSB7XG4gICAgdmFyIHZhbHVlVW5pdFZhbCA9IHZhbHVlICYmIGdlbmVyYXRlQ29uZmlnW2Z1bmNdKHZhbHVlKTtcbiAgICB2YXIgcGlja2VyVW5pdFZhbHVlID0gcGlja2VyVmFsdWUgJiYgZ2VuZXJhdGVDb25maWdbZnVuY10ocGlja2VyVmFsdWUpO1xuICAgIHJldHVybiBbdmFsdWVVbml0VmFsLCBwaWNrZXJVbml0VmFsdWVdO1xuICB9O1xuICB2YXIgX2dldFVuaXRWYWx1ZSA9IGdldFVuaXRWYWx1ZSgnZ2V0SG91cicpLFxuICAgIF9nZXRVbml0VmFsdWUyID0gX3NsaWNlZFRvQXJyYXkoX2dldFVuaXRWYWx1ZSwgMiksXG4gICAgaG91ciA9IF9nZXRVbml0VmFsdWUyWzBdLFxuICAgIHBpY2tlckhvdXIgPSBfZ2V0VW5pdFZhbHVlMlsxXTtcbiAgdmFyIF9nZXRVbml0VmFsdWUzID0gZ2V0VW5pdFZhbHVlKCdnZXRNaW51dGUnKSxcbiAgICBfZ2V0VW5pdFZhbHVlNCA9IF9zbGljZWRUb0FycmF5KF9nZXRVbml0VmFsdWUzLCAyKSxcbiAgICBtaW51dGUgPSBfZ2V0VW5pdFZhbHVlNFswXSxcbiAgICBwaWNrZXJNaW51dGUgPSBfZ2V0VW5pdFZhbHVlNFsxXTtcbiAgdmFyIF9nZXRVbml0VmFsdWU1ID0gZ2V0VW5pdFZhbHVlKCdnZXRTZWNvbmQnKSxcbiAgICBfZ2V0VW5pdFZhbHVlNiA9IF9zbGljZWRUb0FycmF5KF9nZXRVbml0VmFsdWU1LCAyKSxcbiAgICBzZWNvbmQgPSBfZ2V0VW5pdFZhbHVlNlswXSxcbiAgICBwaWNrZXJTZWNvbmQgPSBfZ2V0VW5pdFZhbHVlNlsxXTtcbiAgdmFyIF9nZXRVbml0VmFsdWU3ID0gZ2V0VW5pdFZhbHVlKCdnZXRNaWxsaXNlY29uZCcpLFxuICAgIF9nZXRVbml0VmFsdWU4ID0gX3NsaWNlZFRvQXJyYXkoX2dldFVuaXRWYWx1ZTcsIDIpLFxuICAgIG1pbGxpc2Vjb25kID0gX2dldFVuaXRWYWx1ZThbMF0sXG4gICAgcGlja2VyTWlsbGlzZWNvbmQgPSBfZ2V0VW5pdFZhbHVlOFsxXTtcbiAgdmFyIG1lcmlkaWVtID0gaG91ciA9PT0gbnVsbCA/IG51bGwgOiBpc0FNKGhvdXIpID8gJ2FtJyA6ICdwbSc7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBDb2x1bW4gPT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBIb3Vyc1xuICB2YXIgaG91clVuaXRzID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFzaG93TWVyaWRpZW0pIHtcbiAgICAgIHJldHVybiByb3dIb3VyVW5pdHM7XG4gICAgfVxuICAgIHJldHVybiBpc0FNKGhvdXIpID8gcm93SG91clVuaXRzLmZpbHRlcihmdW5jdGlvbiAoaCkge1xuICAgICAgcmV0dXJuIGlzQU0oaC52YWx1ZSk7XG4gICAgfSkgOiByb3dIb3VyVW5pdHMuZmlsdGVyKGZ1bmN0aW9uIChoKSB7XG4gICAgICByZXR1cm4gIWlzQU0oaC52YWx1ZSk7XG4gICAgfSk7XG4gIH0sIFtob3VyLCByb3dIb3VyVW5pdHMsIHNob3dNZXJpZGllbV0pO1xuXG4gIC8vID4+PiBQaWNrIEZhbGxiYWNrXG4gIHZhciBnZXRFbmFibGVkID0gZnVuY3Rpb24gZ2V0RW5hYmxlZCh1bml0cywgdmFsKSB7XG4gICAgdmFyIF9lbmFibGVkVW5pdHMkO1xuICAgIHZhciBlbmFibGVkVW5pdHMgPSB1bml0cy5maWx0ZXIoZnVuY3Rpb24gKHVuaXQpIHtcbiAgICAgIHJldHVybiAhdW5pdC5kaXNhYmxlZDtcbiAgICB9KTtcbiAgICByZXR1cm4gdmFsICE9PSBudWxsICYmIHZhbCAhPT0gdm9pZCAwID8gdmFsIDogLy8gRmFsbGJhY2sgdG8gZW5hYmxlZCB2YWx1ZVxuICAgIGVuYWJsZWRVbml0cyA9PT0gbnVsbCB8fCBlbmFibGVkVW5pdHMgPT09IHZvaWQgMCB8fCAoX2VuYWJsZWRVbml0cyQgPSBlbmFibGVkVW5pdHNbMF0pID09PSBudWxsIHx8IF9lbmFibGVkVW5pdHMkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZW5hYmxlZFVuaXRzJC52YWx1ZTtcbiAgfTtcblxuICAvLyA+Pj4gTWludXRlc1xuICB2YXIgdmFsaWRIb3VyID0gZ2V0RW5hYmxlZChyb3dIb3VyVW5pdHMsIGhvdXIpO1xuICB2YXIgbWludXRlVW5pdHMgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZ2V0TWludXRlVW5pdHModmFsaWRIb3VyKTtcbiAgfSwgW2dldE1pbnV0ZVVuaXRzLCB2YWxpZEhvdXJdKTtcblxuICAvLyA+Pj4gU2Vjb25kc1xuICB2YXIgdmFsaWRNaW51dGUgPSBnZXRFbmFibGVkKG1pbnV0ZVVuaXRzLCBtaW51dGUpO1xuICB2YXIgc2Vjb25kVW5pdHMgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZ2V0U2Vjb25kVW5pdHModmFsaWRIb3VyLCB2YWxpZE1pbnV0ZSk7XG4gIH0sIFtnZXRTZWNvbmRVbml0cywgdmFsaWRIb3VyLCB2YWxpZE1pbnV0ZV0pO1xuXG4gIC8vID4+PiBNaWxsaXNlY29uZHNcbiAgdmFyIHZhbGlkU2Vjb25kID0gZ2V0RW5hYmxlZChzZWNvbmRVbml0cywgc2Vjb25kKTtcbiAgdmFyIG1pbGxpc2Vjb25kVW5pdHMgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZ2V0TWlsbGlzZWNvbmRVbml0cyh2YWxpZEhvdXIsIHZhbGlkTWludXRlLCB2YWxpZFNlY29uZCk7XG4gIH0sIFtnZXRNaWxsaXNlY29uZFVuaXRzLCB2YWxpZEhvdXIsIHZhbGlkTWludXRlLCB2YWxpZFNlY29uZF0pO1xuICB2YXIgdmFsaWRNaWxsaXNlY29uZCA9IGdldEVuYWJsZWQobWlsbGlzZWNvbmRVbml0cywgbWlsbGlzZWNvbmQpO1xuXG4gIC8vIE1lcmlkaWVtXG4gIHZhciBtZXJpZGllbVVuaXRzID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFzaG93TWVyaWRpZW0pIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgdmFyIGJhc2UgPSBnZW5lcmF0ZUNvbmZpZy5nZXROb3coKTtcbiAgICB2YXIgYW1EYXRlID0gZ2VuZXJhdGVDb25maWcuc2V0SG91cihiYXNlLCA2KTtcbiAgICB2YXIgcG1EYXRlID0gZ2VuZXJhdGVDb25maWcuc2V0SG91cihiYXNlLCAxOCk7XG4gICAgdmFyIGZvcm1hdE1lcmlkaWVtID0gZnVuY3Rpb24gZm9ybWF0TWVyaWRpZW0oZGF0ZSwgZGVmYXVsdExhYmVsKSB7XG4gICAgICB2YXIgY2VsbE1lcmlkaWVtRm9ybWF0ID0gbG9jYWxlLmNlbGxNZXJpZGllbUZvcm1hdDtcbiAgICAgIHJldHVybiBjZWxsTWVyaWRpZW1Gb3JtYXQgPyBmb3JtYXRWYWx1ZShkYXRlLCB7XG4gICAgICAgIGdlbmVyYXRlQ29uZmlnOiBnZW5lcmF0ZUNvbmZpZyxcbiAgICAgICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgICAgIGZvcm1hdDogY2VsbE1lcmlkaWVtRm9ybWF0XG4gICAgICB9KSA6IGRlZmF1bHRMYWJlbDtcbiAgICB9O1xuICAgIHJldHVybiBbe1xuICAgICAgbGFiZWw6IGZvcm1hdE1lcmlkaWVtKGFtRGF0ZSwgJ0FNJyksXG4gICAgICB2YWx1ZTogJ2FtJyxcbiAgICAgIGRpc2FibGVkOiByb3dIb3VyVW5pdHMuZXZlcnkoZnVuY3Rpb24gKGgpIHtcbiAgICAgICAgcmV0dXJuIGguZGlzYWJsZWQgfHwgIWlzQU0oaC52YWx1ZSk7XG4gICAgICB9KVxuICAgIH0sIHtcbiAgICAgIGxhYmVsOiBmb3JtYXRNZXJpZGllbShwbURhdGUsICdQTScpLFxuICAgICAgdmFsdWU6ICdwbScsXG4gICAgICBkaXNhYmxlZDogcm93SG91clVuaXRzLmV2ZXJ5KGZ1bmN0aW9uIChoKSB7XG4gICAgICAgIHJldHVybiBoLmRpc2FibGVkIHx8IGlzQU0oaC52YWx1ZSk7XG4gICAgICB9KVxuICAgIH1dO1xuICB9LCBbcm93SG91clVuaXRzLCBzaG93TWVyaWRpZW0sIGdlbmVyYXRlQ29uZmlnLCBsb2NhbGVdKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IENoYW5nZSA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aW1lIGlzIHZhbGlkYXRlIG9yIHdpbGwgbWF0Y2ggdG8gdmFsaWRhdGUgb25lXG4gICAqL1xuICB2YXIgdHJpZ2dlckNoYW5nZSA9IGZ1bmN0aW9uIHRyaWdnZXJDaGFuZ2UobmV4dERhdGUpIHtcbiAgICB2YXIgdmFsaWRhdGVEYXRlID0gZ2V0VmFsaWRUaW1lKG5leHREYXRlKTtcbiAgICBvblNlbGVjdCh2YWxpZGF0ZURhdGUpO1xuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT0gQ29sdW1uID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gQ3JlYXRlIGEgdGVtcGxhdGUgZGF0ZSBmb3IgdGhlIHRyaWdnZXIgY2hhbmdlIGV2ZW50XG4gIHZhciB0cmlnZ2VyRGF0ZVRtcGwgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdG1wbCA9IHZhbHVlIHx8IHBpY2tlclZhbHVlIHx8IGdlbmVyYXRlQ29uZmlnLmdldE5vdygpO1xuICAgIHZhciBpc05vdE51bGwgPSBmdW5jdGlvbiBpc05vdE51bGwobnVtKSB7XG4gICAgICByZXR1cm4gbnVtICE9PSBudWxsICYmIG51bSAhPT0gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgaWYgKGlzTm90TnVsbChob3VyKSkge1xuICAgICAgdG1wbCA9IGdlbmVyYXRlQ29uZmlnLnNldEhvdXIodG1wbCwgaG91cik7XG4gICAgICB0bXBsID0gZ2VuZXJhdGVDb25maWcuc2V0TWludXRlKHRtcGwsIG1pbnV0ZSk7XG4gICAgICB0bXBsID0gZ2VuZXJhdGVDb25maWcuc2V0U2Vjb25kKHRtcGwsIHNlY29uZCk7XG4gICAgICB0bXBsID0gZ2VuZXJhdGVDb25maWcuc2V0TWlsbGlzZWNvbmQodG1wbCwgbWlsbGlzZWNvbmQpO1xuICAgIH0gZWxzZSBpZiAoaXNOb3ROdWxsKHBpY2tlckhvdXIpKSB7XG4gICAgICB0bXBsID0gZ2VuZXJhdGVDb25maWcuc2V0SG91cih0bXBsLCBwaWNrZXJIb3VyKTtcbiAgICAgIHRtcGwgPSBnZW5lcmF0ZUNvbmZpZy5zZXRNaW51dGUodG1wbCwgcGlja2VyTWludXRlKTtcbiAgICAgIHRtcGwgPSBnZW5lcmF0ZUNvbmZpZy5zZXRTZWNvbmQodG1wbCwgcGlja2VyU2Vjb25kKTtcbiAgICAgIHRtcGwgPSBnZW5lcmF0ZUNvbmZpZy5zZXRNaWxsaXNlY29uZCh0bXBsLCBwaWNrZXJNaWxsaXNlY29uZCk7XG4gICAgfSBlbHNlIGlmIChpc05vdE51bGwodmFsaWRIb3VyKSkge1xuICAgICAgdG1wbCA9IGdlbmVyYXRlQ29uZmlnLnNldEhvdXIodG1wbCwgdmFsaWRIb3VyKTtcbiAgICAgIHRtcGwgPSBnZW5lcmF0ZUNvbmZpZy5zZXRNaW51dGUodG1wbCwgdmFsaWRNaW51dGUpO1xuICAgICAgdG1wbCA9IGdlbmVyYXRlQ29uZmlnLnNldFNlY29uZCh0bXBsLCB2YWxpZFNlY29uZCk7XG4gICAgICB0bXBsID0gZ2VuZXJhdGVDb25maWcuc2V0TWlsbGlzZWNvbmQodG1wbCwgdmFsaWRNaWxsaXNlY29uZCk7XG4gICAgfVxuICAgIHJldHVybiB0bXBsO1xuICB9LCBbdmFsdWUsIHBpY2tlclZhbHVlLCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmQsIHZhbGlkSG91ciwgdmFsaWRNaW51dGUsIHZhbGlkU2Vjb25kLCB2YWxpZE1pbGxpc2Vjb25kLCBwaWNrZXJIb3VyLCBwaWNrZXJNaW51dGUsIHBpY2tlclNlY29uZCwgcGlja2VyTWlsbGlzZWNvbmQsIGdlbmVyYXRlQ29uZmlnXSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09IENvbHVtbnMgQ2hhbmdlID09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgZmlsbENvbHVtblZhbHVlID0gZnVuY3Rpb24gZmlsbENvbHVtblZhbHVlKHZhbCwgZnVuYykge1xuICAgIGlmICh2YWwgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gZ2VuZXJhdGVDb25maWdbZnVuY10odHJpZ2dlckRhdGVUbXBsLCB2YWwpO1xuICB9O1xuICB2YXIgZ2V0TmV4dEhvdXJUaW1lID0gZnVuY3Rpb24gZ2V0TmV4dEhvdXJUaW1lKHZhbCkge1xuICAgIHJldHVybiBmaWxsQ29sdW1uVmFsdWUodmFsLCAnc2V0SG91cicpO1xuICB9O1xuICB2YXIgZ2V0TmV4dE1pbnV0ZVRpbWUgPSBmdW5jdGlvbiBnZXROZXh0TWludXRlVGltZSh2YWwpIHtcbiAgICByZXR1cm4gZmlsbENvbHVtblZhbHVlKHZhbCwgJ3NldE1pbnV0ZScpO1xuICB9O1xuICB2YXIgZ2V0TmV4dFNlY29uZFRpbWUgPSBmdW5jdGlvbiBnZXROZXh0U2Vjb25kVGltZSh2YWwpIHtcbiAgICByZXR1cm4gZmlsbENvbHVtblZhbHVlKHZhbCwgJ3NldFNlY29uZCcpO1xuICB9O1xuICB2YXIgZ2V0TmV4dE1pbGxpc2Vjb25kVGltZSA9IGZ1bmN0aW9uIGdldE5leHRNaWxsaXNlY29uZFRpbWUodmFsKSB7XG4gICAgcmV0dXJuIGZpbGxDb2x1bW5WYWx1ZSh2YWwsICdzZXRNaWxsaXNlY29uZCcpO1xuICB9O1xuICB2YXIgZ2V0TWVyaWRpZW1UaW1lID0gZnVuY3Rpb24gZ2V0TWVyaWRpZW1UaW1lKHZhbCkge1xuICAgIGlmICh2YWwgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAodmFsID09PSAnYW0nICYmICFpc0FNKGhvdXIpKSB7XG4gICAgICByZXR1cm4gZ2VuZXJhdGVDb25maWcuc2V0SG91cih0cmlnZ2VyRGF0ZVRtcGwsIGhvdXIgLSAxMik7XG4gICAgfSBlbHNlIGlmICh2YWwgPT09ICdwbScgJiYgaXNBTShob3VyKSkge1xuICAgICAgcmV0dXJuIGdlbmVyYXRlQ29uZmlnLnNldEhvdXIodHJpZ2dlckRhdGVUbXBsLCBob3VyICsgMTIpO1xuICAgIH1cbiAgICByZXR1cm4gdHJpZ2dlckRhdGVUbXBsO1xuICB9O1xuICB2YXIgb25Ib3VyQ2hhbmdlID0gZnVuY3Rpb24gb25Ib3VyQ2hhbmdlKHZhbCkge1xuICAgIHRyaWdnZXJDaGFuZ2UoZ2V0TmV4dEhvdXJUaW1lKHZhbCkpO1xuICB9O1xuICB2YXIgb25NaW51dGVDaGFuZ2UgPSBmdW5jdGlvbiBvbk1pbnV0ZUNoYW5nZSh2YWwpIHtcbiAgICB0cmlnZ2VyQ2hhbmdlKGdldE5leHRNaW51dGVUaW1lKHZhbCkpO1xuICB9O1xuICB2YXIgb25TZWNvbmRDaGFuZ2UgPSBmdW5jdGlvbiBvblNlY29uZENoYW5nZSh2YWwpIHtcbiAgICB0cmlnZ2VyQ2hhbmdlKGdldE5leHRTZWNvbmRUaW1lKHZhbCkpO1xuICB9O1xuICB2YXIgb25NaWxsaXNlY29uZENoYW5nZSA9IGZ1bmN0aW9uIG9uTWlsbGlzZWNvbmRDaGFuZ2UodmFsKSB7XG4gICAgdHJpZ2dlckNoYW5nZShnZXROZXh0TWlsbGlzZWNvbmRUaW1lKHZhbCkpO1xuICB9O1xuICB2YXIgb25NZXJpZGllbUNoYW5nZSA9IGZ1bmN0aW9uIG9uTWVyaWRpZW1DaGFuZ2UodmFsKSB7XG4gICAgdHJpZ2dlckNoYW5nZShnZXRNZXJpZGllbVRpbWUodmFsKSk7XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PSBDb2x1bW4gSG92ZXIgPT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgb25Ib3VySG92ZXIgPSBmdW5jdGlvbiBvbkhvdXJIb3Zlcih2YWwpIHtcbiAgICBvbkhvdmVyKGdldE5leHRIb3VyVGltZSh2YWwpKTtcbiAgfTtcbiAgdmFyIG9uTWludXRlSG92ZXIgPSBmdW5jdGlvbiBvbk1pbnV0ZUhvdmVyKHZhbCkge1xuICAgIG9uSG92ZXIoZ2V0TmV4dE1pbnV0ZVRpbWUodmFsKSk7XG4gIH07XG4gIHZhciBvblNlY29uZEhvdmVyID0gZnVuY3Rpb24gb25TZWNvbmRIb3Zlcih2YWwpIHtcbiAgICBvbkhvdmVyKGdldE5leHRTZWNvbmRUaW1lKHZhbCkpO1xuICB9O1xuICB2YXIgb25NaWxsaXNlY29uZEhvdmVyID0gZnVuY3Rpb24gb25NaWxsaXNlY29uZEhvdmVyKHZhbCkge1xuICAgIG9uSG92ZXIoZ2V0TmV4dE1pbGxpc2Vjb25kVGltZSh2YWwpKTtcbiAgfTtcbiAgdmFyIG9uTWVyaWRpZW1Ib3ZlciA9IGZ1bmN0aW9uIG9uTWVyaWRpZW1Ib3Zlcih2YWwpIHtcbiAgICBvbkhvdmVyKGdldE1lcmlkaWVtVGltZSh2YWwpKTtcbiAgfTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IFJlbmRlciA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBzaGFyZWRDb2x1bW5Qcm9wcyA9IHtcbiAgICBvbkRibENsaWNrOiBvbkNlbGxEYmxDbGljayxcbiAgICBjaGFuZ2VPblNjcm9sbDogY2hhbmdlT25TY3JvbGxcbiAgfTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItY29udGVudFwiKVxuICB9LCBzaG93SG91ciAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUaW1lQ29sdW1uLCBfZXh0ZW5kcyh7XG4gICAgdW5pdHM6IGhvdXJVbml0cyxcbiAgICB2YWx1ZTogaG91cixcbiAgICBvcHRpb25hbFZhbHVlOiBwaWNrZXJIb3VyLFxuICAgIHR5cGU6IFwiaG91clwiLFxuICAgIG9uQ2hhbmdlOiBvbkhvdXJDaGFuZ2UsXG4gICAgb25Ib3Zlcjogb25Ib3VySG92ZXJcbiAgfSwgc2hhcmVkQ29sdW1uUHJvcHMpKSwgc2hvd01pbnV0ZSAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUaW1lQ29sdW1uLCBfZXh0ZW5kcyh7XG4gICAgdW5pdHM6IG1pbnV0ZVVuaXRzLFxuICAgIHZhbHVlOiBtaW51dGUsXG4gICAgb3B0aW9uYWxWYWx1ZTogcGlja2VyTWludXRlLFxuICAgIHR5cGU6IFwibWludXRlXCIsXG4gICAgb25DaGFuZ2U6IG9uTWludXRlQ2hhbmdlLFxuICAgIG9uSG92ZXI6IG9uTWludXRlSG92ZXJcbiAgfSwgc2hhcmVkQ29sdW1uUHJvcHMpKSwgc2hvd1NlY29uZCAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUaW1lQ29sdW1uLCBfZXh0ZW5kcyh7XG4gICAgdW5pdHM6IHNlY29uZFVuaXRzLFxuICAgIHZhbHVlOiBzZWNvbmQsXG4gICAgb3B0aW9uYWxWYWx1ZTogcGlja2VyU2Vjb25kLFxuICAgIHR5cGU6IFwic2Vjb25kXCIsXG4gICAgb25DaGFuZ2U6IG9uU2Vjb25kQ2hhbmdlLFxuICAgIG9uSG92ZXI6IG9uU2Vjb25kSG92ZXJcbiAgfSwgc2hhcmVkQ29sdW1uUHJvcHMpKSwgc2hvd01pbGxpc2Vjb25kICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRpbWVDb2x1bW4sIF9leHRlbmRzKHtcbiAgICB1bml0czogbWlsbGlzZWNvbmRVbml0cyxcbiAgICB2YWx1ZTogbWlsbGlzZWNvbmQsXG4gICAgb3B0aW9uYWxWYWx1ZTogcGlja2VyTWlsbGlzZWNvbmQsXG4gICAgdHlwZTogXCJtaWxsaXNlY29uZFwiLFxuICAgIG9uQ2hhbmdlOiBvbk1pbGxpc2Vjb25kQ2hhbmdlLFxuICAgIG9uSG92ZXI6IG9uTWlsbGlzZWNvbmRIb3ZlclxuICB9LCBzaGFyZWRDb2x1bW5Qcm9wcykpLCBzaG93TWVyaWRpZW0gJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGltZUNvbHVtbiwgX2V4dGVuZHMoe1xuICAgIHVuaXRzOiBtZXJpZGllbVVuaXRzLFxuICAgIHZhbHVlOiBtZXJpZGllbSxcbiAgICB0eXBlOiBcIm1lcmlkaWVtXCIsXG4gICAgb25DaGFuZ2U6IG9uTWVyaWRpZW1DaGFuZ2UsXG4gICAgb25Ib3Zlcjogb25NZXJpZGllbUhvdmVyXG4gIH0sIHNoYXJlZENvbHVtblByb3BzKSkpO1xufSIsImltcG9ydCB7IHVzZUV2ZW50IH0gZnJvbSAncmMtdXRpbCc7XG5pbXBvcnQgcmFmIGZyb20gXCJyYy11dGlsL2VzL3JhZlwiO1xuaW1wb3J0IGlzVmlzaWJsZSBmcm9tIFwicmMtdXRpbC9lcy9Eb20vaXNWaXNpYmxlXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG52YXIgU1BFRURfUFRHID0gMSAvIDM7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VTY3JvbGxUbyh1bFJlZiwgdmFsdWUpIHtcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBTY3JvbGwgPT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgc2Nyb2xsaW5nUmVmID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgdmFyIHNjcm9sbFJhZlJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgdmFyIHNjcm9sbERpc3RSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIHZhciBpc1Njcm9sbGluZyA9IGZ1bmN0aW9uIGlzU2Nyb2xsaW5nKCkge1xuICAgIHJldHVybiBzY3JvbGxpbmdSZWYuY3VycmVudDtcbiAgfTtcbiAgdmFyIHN0b3BTY3JvbGwgPSBmdW5jdGlvbiBzdG9wU2Nyb2xsKCkge1xuICAgIHJhZi5jYW5jZWwoc2Nyb2xsUmFmUmVmLmN1cnJlbnQpO1xuICAgIHNjcm9sbGluZ1JlZi5jdXJyZW50ID0gZmFsc2U7XG4gIH07XG4gIHZhciBzY3JvbGxSYWZUaW1lc1JlZiA9IFJlYWN0LnVzZVJlZigpO1xuICB2YXIgc3RhcnRTY3JvbGwgPSBmdW5jdGlvbiBzdGFydFNjcm9sbCgpIHtcbiAgICB2YXIgdWwgPSB1bFJlZi5jdXJyZW50O1xuICAgIHNjcm9sbERpc3RSZWYuY3VycmVudCA9IG51bGw7XG4gICAgc2Nyb2xsUmFmVGltZXNSZWYuY3VycmVudCA9IDA7XG4gICAgaWYgKHVsKSB7XG4gICAgICB2YXIgdGFyZ2V0TGkgPSB1bC5xdWVyeVNlbGVjdG9yKFwiW2RhdGEtdmFsdWU9XFxcIlwiLmNvbmNhdCh2YWx1ZSwgXCJcXFwiXVwiKSk7XG4gICAgICB2YXIgZmlyc3RMaSA9IHVsLnF1ZXJ5U2VsZWN0b3IoXCJsaVwiKTtcbiAgICAgIHZhciBkb1Njcm9sbCA9IGZ1bmN0aW9uIGRvU2Nyb2xsKCkge1xuICAgICAgICBzdG9wU2Nyb2xsKCk7XG4gICAgICAgIHNjcm9sbGluZ1JlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgc2Nyb2xsUmFmVGltZXNSZWYuY3VycmVudCArPSAxO1xuICAgICAgICB2YXIgY3VycmVudFRvcCA9IHVsLnNjcm9sbFRvcDtcbiAgICAgICAgdmFyIGZpcnN0TGlUb3AgPSBmaXJzdExpLm9mZnNldFRvcDtcbiAgICAgICAgdmFyIHRhcmdldExpVG9wID0gdGFyZ2V0TGkub2Zmc2V0VG9wO1xuICAgICAgICB2YXIgdGFyZ2V0VG9wID0gdGFyZ2V0TGlUb3AgLSBmaXJzdExpVG9wO1xuXG4gICAgICAgIC8vIFdhaXQgZm9yIGVsZW1lbnQgZXhpc3QuIDUgZnJhbWVzIGlzIGVub3VnaFxuICAgICAgICBpZiAodGFyZ2V0TGlUb3AgPT09IDAgJiYgdGFyZ2V0TGkgIT09IGZpcnN0TGkgfHwgIWlzVmlzaWJsZSh1bCkpIHtcbiAgICAgICAgICBpZiAoc2Nyb2xsUmFmVGltZXNSZWYuY3VycmVudCA8PSA1KSB7XG4gICAgICAgICAgICBzY3JvbGxSYWZSZWYuY3VycmVudCA9IHJhZihkb1Njcm9sbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbmV4dFRvcCA9IGN1cnJlbnRUb3AgKyAodGFyZ2V0VG9wIC0gY3VycmVudFRvcCkgKiBTUEVFRF9QVEc7XG4gICAgICAgIHZhciBkaXN0ID0gTWF0aC5hYnModGFyZ2V0VG9wIC0gbmV4dFRvcCk7XG5cbiAgICAgICAgLy8gQnJlYWsgaWYgZGlzdCBnZXQgbGFyZ2VyLCB3aGljaCBtZWFucyB1c2VyIGlzIHNjcm9sbGluZ1xuICAgICAgICBpZiAoc2Nyb2xsRGlzdFJlZi5jdXJyZW50ICE9PSBudWxsICYmIHNjcm9sbERpc3RSZWYuY3VycmVudCA8IGRpc3QpIHtcbiAgICAgICAgICBzdG9wU2Nyb2xsKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNjcm9sbERpc3RSZWYuY3VycmVudCA9IGRpc3Q7XG5cbiAgICAgICAgLy8gU3RvcCB3aGVuIGRpc3QgaXMgbGVzcyB0aGFuIDFcbiAgICAgICAgaWYgKGRpc3QgPD0gMSkge1xuICAgICAgICAgIHVsLnNjcm9sbFRvcCA9IHRhcmdldFRvcDtcbiAgICAgICAgICBzdG9wU2Nyb2xsKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSUUgbm90IHN1cHBvcnQgYHNjcm9sbFRvYFxuICAgICAgICB1bC5zY3JvbGxUb3AgPSBuZXh0VG9wO1xuICAgICAgICBzY3JvbGxSYWZSZWYuY3VycmVudCA9IHJhZihkb1Njcm9sbCk7XG4gICAgICB9O1xuICAgICAgaWYgKHRhcmdldExpICYmIGZpcnN0TGkpIHtcbiAgICAgICAgZG9TY3JvbGwoKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IFRyaWdnZXIgPT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgc3luY1Njcm9sbCA9IHVzZUV2ZW50KHN0YXJ0U2Nyb2xsKTtcbiAgcmV0dXJuIFtzeW5jU2Nyb2xsLCBzdG9wU2Nyb2xsLCBpc1Njcm9sbGluZ107XG59IiwiaW1wb3J0IF90b0NvbnN1bWFibGVBcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXlcIjtcbmV4cG9ydCBmdW5jdGlvbiBmaW5kVmFsaWRhdGVUaW1lKGRhdGUsIGdldEhvdXJVbml0cywgZ2V0TWludXRlVW5pdHMsIGdldFNlY29uZFVuaXRzLCBnZXRNaWxsaXNlY29uZFVuaXRzLCBnZW5lcmF0ZUNvbmZpZykge1xuICB2YXIgbmV4dERhdGUgPSBkYXRlO1xuICBmdW5jdGlvbiBhbGlnblZhbGlkYXRlKGdldFVuaXRWYWx1ZSwgc2V0VW5pdFZhbHVlLCB1bml0cykge1xuICAgIHZhciBuZXh0VmFsdWUgPSBnZW5lcmF0ZUNvbmZpZ1tnZXRVbml0VmFsdWVdKG5leHREYXRlKTtcbiAgICB2YXIgbmV4dFVuaXQgPSB1bml0cy5maW5kKGZ1bmN0aW9uICh1bml0KSB7XG4gICAgICByZXR1cm4gdW5pdC52YWx1ZSA9PT0gbmV4dFZhbHVlO1xuICAgIH0pO1xuICAgIGlmICghbmV4dFVuaXQgfHwgbmV4dFVuaXQuZGlzYWJsZWQpIHtcbiAgICAgIC8vIEZpbmQgbW9zdCBjbG9zZXN0IHVuaXRcbiAgICAgIHZhciB2YWxpZGF0ZVVuaXRzID0gdW5pdHMuZmlsdGVyKGZ1bmN0aW9uICh1bml0KSB7XG4gICAgICAgIHJldHVybiAhdW5pdC5kaXNhYmxlZDtcbiAgICAgIH0pO1xuICAgICAgdmFyIHJldmVyc2VFbmFibGVkVW5pdHMgPSBfdG9Db25zdW1hYmxlQXJyYXkodmFsaWRhdGVVbml0cykucmV2ZXJzZSgpO1xuICAgICAgdmFyIHZhbGlkYXRlVW5pdCA9IHJldmVyc2VFbmFibGVkVW5pdHMuZmluZChmdW5jdGlvbiAodW5pdCkge1xuICAgICAgICByZXR1cm4gdW5pdC52YWx1ZSA8PSBuZXh0VmFsdWU7XG4gICAgICB9KSB8fCB2YWxpZGF0ZVVuaXRzWzBdO1xuICAgICAgaWYgKHZhbGlkYXRlVW5pdCkge1xuICAgICAgICBuZXh0VmFsdWUgPSB2YWxpZGF0ZVVuaXQudmFsdWU7XG4gICAgICAgIG5leHREYXRlID0gZ2VuZXJhdGVDb25maWdbc2V0VW5pdFZhbHVlXShuZXh0RGF0ZSwgbmV4dFZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5leHRWYWx1ZTtcbiAgfVxuXG4gIC8vIEZpbmQgdmFsaWRhdGUgaG91clxuICB2YXIgbmV4dEhvdXIgPSBhbGlnblZhbGlkYXRlKCdnZXRIb3VyJywgJ3NldEhvdXInLCBnZXRIb3VyVW5pdHMoKSk7XG5cbiAgLy8gRmluZCB2YWxpZGF0ZSBtaW51dGVcbiAgdmFyIG5leHRNaW51dGUgPSBhbGlnblZhbGlkYXRlKCdnZXRNaW51dGUnLCAnc2V0TWludXRlJywgZ2V0TWludXRlVW5pdHMobmV4dEhvdXIpKTtcblxuICAvLyBGaW5kIHZhbGlkYXRlIHNlY29uZFxuICB2YXIgbmV4dFNlY29uZCA9IGFsaWduVmFsaWRhdGUoJ2dldFNlY29uZCcsICdzZXRTZWNvbmQnLCBnZXRTZWNvbmRVbml0cyhuZXh0SG91ciwgbmV4dE1pbnV0ZSkpO1xuXG4gIC8vIEZpbmQgdmFsaWRhdGUgbWlsbGlzZWNvbmRcbiAgYWxpZ25WYWxpZGF0ZSgnZ2V0TWlsbGlzZWNvbmQnLCAnc2V0TWlsbGlzZWNvbmQnLCBnZXRNaWxsaXNlY29uZFVuaXRzKG5leHRIb3VyLCBuZXh0TWludXRlLCBuZXh0U2Vjb25kKSk7XG4gIHJldHVybiBuZXh0RGF0ZTtcbn0iLCJpbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZm9ybWF0VmFsdWUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvZGF0ZVV0aWxcIjtcbmltcG9ydCB7IFBhbmVsQ29udGV4dCwgdXNlSW5mbyB9IGZyb20gXCIuLi9jb250ZXh0XCI7XG5pbXBvcnQgUGFuZWxIZWFkZXIgZnJvbSBcIi4uL1BhbmVsSGVhZGVyXCI7XG5pbXBvcnQgVGltZVBhbmVsQm9keSBmcm9tIFwiLi9UaW1lUGFuZWxCb2R5XCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBUaW1lUGFuZWwocHJvcHMpIHtcbiAgdmFyIHByZWZpeENscyA9IHByb3BzLnByZWZpeENscyxcbiAgICB2YWx1ZSA9IHByb3BzLnZhbHVlLFxuICAgIGxvY2FsZSA9IHByb3BzLmxvY2FsZSxcbiAgICBnZW5lcmF0ZUNvbmZpZyA9IHByb3BzLmdlbmVyYXRlQ29uZmlnLFxuICAgIHNob3dUaW1lID0gcHJvcHMuc2hvd1RpbWU7XG4gIHZhciBfcmVmID0gc2hvd1RpbWUgfHwge30sXG4gICAgZm9ybWF0ID0gX3JlZi5mb3JtYXQ7XG4gIHZhciBwYW5lbFByZWZpeENscyA9IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItdGltZS1wYW5lbFwiKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PSBCYXNlID09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBfdXNlSW5mbyA9IHVzZUluZm8ocHJvcHMsICd0aW1lJyksXG4gICAgX3VzZUluZm8yID0gX3NsaWNlZFRvQXJyYXkoX3VzZUluZm8sIDEpLFxuICAgIGluZm8gPSBfdXNlSW5mbzJbMF07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBSZW5kZXIgPT09PT09PT09PT09PT09PT09PT09PT09PVxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUGFuZWxDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGluZm9cbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyhwYW5lbFByZWZpeENscylcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUGFuZWxIZWFkZXIsIG51bGwsIHZhbHVlID8gZm9ybWF0VmFsdWUodmFsdWUsIHtcbiAgICBsb2NhbGU6IGxvY2FsZSxcbiAgICBmb3JtYXQ6IGZvcm1hdCxcbiAgICBnZW5lcmF0ZUNvbmZpZzogZ2VuZXJhdGVDb25maWdcbiAgfSkgOiBcIlxceEEwXCIpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUaW1lUGFuZWxCb2R5LCBzaG93VGltZSkpKTtcbn0iLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5XCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaXNJblJhbmdlLCBpc1NhbWVXZWVrIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2RhdGVVdGlsXCI7XG5pbXBvcnQgRGF0ZVBhbmVsIGZyb20gXCIuLi9EYXRlUGFuZWxcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFdlZWtQYW5lbChwcm9wcykge1xuICB2YXIgcHJlZml4Q2xzID0gcHJvcHMucHJlZml4Q2xzLFxuICAgIGdlbmVyYXRlQ29uZmlnID0gcHJvcHMuZ2VuZXJhdGVDb25maWcsXG4gICAgbG9jYWxlID0gcHJvcHMubG9jYWxlLFxuICAgIHZhbHVlID0gcHJvcHMudmFsdWUsXG4gICAgaG92ZXJWYWx1ZSA9IHByb3BzLmhvdmVyVmFsdWUsXG4gICAgaG92ZXJSYW5nZVZhbHVlID0gcHJvcHMuaG92ZXJSYW5nZVZhbHVlO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gUm93ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBsb2NhbGVOYW1lID0gbG9jYWxlLmxvY2FsZTtcbiAgdmFyIHJvd1ByZWZpeENscyA9IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItd2Vlay1wYW5lbC1yb3dcIik7XG4gIHZhciByb3dDbGFzc05hbWUgPSBmdW5jdGlvbiByb3dDbGFzc05hbWUoY3VycmVudERhdGUpIHtcbiAgICB2YXIgcmFuZ2VDbHMgPSB7fTtcbiAgICBpZiAoaG92ZXJSYW5nZVZhbHVlKSB7XG4gICAgICB2YXIgX2hvdmVyUmFuZ2VWYWx1ZSA9IF9zbGljZWRUb0FycmF5KGhvdmVyUmFuZ2VWYWx1ZSwgMiksXG4gICAgICAgIHJhbmdlU3RhcnQgPSBfaG92ZXJSYW5nZVZhbHVlWzBdLFxuICAgICAgICByYW5nZUVuZCA9IF9ob3ZlclJhbmdlVmFsdWVbMV07XG4gICAgICB2YXIgaXNSYW5nZVN0YXJ0ID0gaXNTYW1lV2VlayhnZW5lcmF0ZUNvbmZpZywgbG9jYWxlTmFtZSwgcmFuZ2VTdGFydCwgY3VycmVudERhdGUpO1xuICAgICAgdmFyIGlzUmFuZ2VFbmQgPSBpc1NhbWVXZWVrKGdlbmVyYXRlQ29uZmlnLCBsb2NhbGVOYW1lLCByYW5nZUVuZCwgY3VycmVudERhdGUpO1xuICAgICAgcmFuZ2VDbHNbXCJcIi5jb25jYXQocm93UHJlZml4Q2xzLCBcIi1yYW5nZS1zdGFydFwiKV0gPSBpc1JhbmdlU3RhcnQ7XG4gICAgICByYW5nZUNsc1tcIlwiLmNvbmNhdChyb3dQcmVmaXhDbHMsIFwiLXJhbmdlLWVuZFwiKV0gPSBpc1JhbmdlRW5kO1xuICAgICAgcmFuZ2VDbHNbXCJcIi5jb25jYXQocm93UHJlZml4Q2xzLCBcIi1yYW5nZS1ob3ZlclwiKV0gPSAhaXNSYW5nZVN0YXJ0ICYmICFpc1JhbmdlRW5kICYmIGlzSW5SYW5nZShnZW5lcmF0ZUNvbmZpZywgcmFuZ2VTdGFydCwgcmFuZ2VFbmQsIGN1cnJlbnREYXRlKTtcbiAgICB9XG4gICAgaWYgKGhvdmVyVmFsdWUpIHtcbiAgICAgIHJhbmdlQ2xzW1wiXCIuY29uY2F0KHJvd1ByZWZpeENscywgXCItaG92ZXJcIildID0gaG92ZXJWYWx1ZS5zb21lKGZ1bmN0aW9uIChkYXRlKSB7XG4gICAgICAgIHJldHVybiBpc1NhbWVXZWVrKGdlbmVyYXRlQ29uZmlnLCBsb2NhbGVOYW1lLCBjdXJyZW50RGF0ZSwgZGF0ZSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGNsYXNzTmFtZXMocm93UHJlZml4Q2xzLCBfZGVmaW5lUHJvcGVydHkoe30sIFwiXCIuY29uY2F0KHJvd1ByZWZpeENscywgXCItc2VsZWN0ZWRcIiksICFob3ZlclJhbmdlVmFsdWUgJiYgaXNTYW1lV2VlayhnZW5lcmF0ZUNvbmZpZywgbG9jYWxlTmFtZSwgdmFsdWUsIGN1cnJlbnREYXRlKSksXG4gICAgLy8gUGF0Y2ggZm9yIGhvdmVyIHJhbmdlXG4gICAgcmFuZ2VDbHMpO1xuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBSZW5kZXIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChEYXRlUGFuZWwsIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIG1vZGU6IFwid2Vla1wiLFxuICAgIHBhbmVsTmFtZTogXCJ3ZWVrXCIsXG4gICAgcm93Q2xhc3NOYW1lOiByb3dDbGFzc05hbWVcbiAgfSkpO1xufSIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHlcIjtcbmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZm9ybWF0VmFsdWUsIGlzSW5SYW5nZSwgaXNTYW1lWWVhciB9IGZyb20gXCIuLi8uLi91dGlscy9kYXRlVXRpbFwiO1xuaW1wb3J0IHsgUGFuZWxDb250ZXh0LCB1c2VJbmZvIH0gZnJvbSBcIi4uL2NvbnRleHRcIjtcbmltcG9ydCBQYW5lbEJvZHkgZnJvbSBcIi4uL1BhbmVsQm9keVwiO1xuaW1wb3J0IFBhbmVsSGVhZGVyIGZyb20gXCIuLi9QYW5lbEhlYWRlclwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gWWVhclBhbmVsKHByb3BzKSB7XG4gIHZhciBwcmVmaXhDbHMgPSBwcm9wcy5wcmVmaXhDbHMsXG4gICAgbG9jYWxlID0gcHJvcHMubG9jYWxlLFxuICAgIGdlbmVyYXRlQ29uZmlnID0gcHJvcHMuZ2VuZXJhdGVDb25maWcsXG4gICAgcGlja2VyVmFsdWUgPSBwcm9wcy5waWNrZXJWYWx1ZSxcbiAgICBkaXNhYmxlZERhdGUgPSBwcm9wcy5kaXNhYmxlZERhdGUsXG4gICAgb25QaWNrZXJWYWx1ZUNoYW5nZSA9IHByb3BzLm9uUGlja2VyVmFsdWVDaGFuZ2UsXG4gICAgb25Nb2RlQ2hhbmdlID0gcHJvcHMub25Nb2RlQ2hhbmdlO1xuICB2YXIgcGFuZWxQcmVmaXhDbHMgPSBcIlwiLmNvbmNhdChwcmVmaXhDbHMsIFwiLXllYXItcGFuZWxcIik7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT0gQmFzZSA9PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgX3VzZUluZm8gPSB1c2VJbmZvKHByb3BzLCAneWVhcicpLFxuICAgIF91c2VJbmZvMiA9IF9zbGljZWRUb0FycmF5KF91c2VJbmZvLCAxKSxcbiAgICBpbmZvID0gX3VzZUluZm8yWzBdO1xuICB2YXIgZ2V0U3RhcnRZZWFyID0gZnVuY3Rpb24gZ2V0U3RhcnRZZWFyKGRhdGUpIHtcbiAgICB2YXIgc3RhcnRZZWFyID0gTWF0aC5mbG9vcihnZW5lcmF0ZUNvbmZpZy5nZXRZZWFyKGRhdGUpIC8gMTApICogMTA7XG4gICAgcmV0dXJuIGdlbmVyYXRlQ29uZmlnLnNldFllYXIoZGF0ZSwgc3RhcnRZZWFyKTtcbiAgfTtcbiAgdmFyIGdldEVuZFllYXIgPSBmdW5jdGlvbiBnZXRFbmRZZWFyKGRhdGUpIHtcbiAgICB2YXIgc3RhcnRZZWFyID0gZ2V0U3RhcnRZZWFyKGRhdGUpO1xuICAgIHJldHVybiBnZW5lcmF0ZUNvbmZpZy5hZGRZZWFyKHN0YXJ0WWVhciwgOSk7XG4gIH07XG4gIHZhciBzdGFydFllYXJEYXRlID0gZ2V0U3RhcnRZZWFyKHBpY2tlclZhbHVlKTtcbiAgdmFyIGVuZFllYXJEYXRlID0gZ2V0RW5kWWVhcihwaWNrZXJWYWx1ZSk7XG4gIHZhciBiYXNlRGF0ZSA9IGdlbmVyYXRlQ29uZmlnLmFkZFllYXIoc3RhcnRZZWFyRGF0ZSwgLTEpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT0gQ2VsbHMgPT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIGdldENlbGxEYXRlID0gZnVuY3Rpb24gZ2V0Q2VsbERhdGUoZGF0ZSwgb2Zmc2V0KSB7XG4gICAgcmV0dXJuIGdlbmVyYXRlQ29uZmlnLmFkZFllYXIoZGF0ZSwgb2Zmc2V0KTtcbiAgfTtcbiAgdmFyIGdldENlbGxUZXh0ID0gZnVuY3Rpb24gZ2V0Q2VsbFRleHQoZGF0ZSkge1xuICAgIHJldHVybiBmb3JtYXRWYWx1ZShkYXRlLCB7XG4gICAgICBsb2NhbGU6IGxvY2FsZSxcbiAgICAgIGZvcm1hdDogbG9jYWxlLmNlbGxZZWFyRm9ybWF0LFxuICAgICAgZ2VuZXJhdGVDb25maWc6IGdlbmVyYXRlQ29uZmlnXG4gICAgfSk7XG4gIH07XG4gIHZhciBnZXRDZWxsQ2xhc3NOYW1lID0gZnVuY3Rpb24gZ2V0Q2VsbENsYXNzTmFtZShkYXRlKSB7XG4gICAgcmV0dXJuIF9kZWZpbmVQcm9wZXJ0eSh7fSwgXCJcIi5jb25jYXQocHJlZml4Q2xzLCBcIi1jZWxsLWluLXZpZXdcIiksIGlzU2FtZVllYXIoZ2VuZXJhdGVDb25maWcsIGRhdGUsIHN0YXJ0WWVhckRhdGUpIHx8IGlzU2FtZVllYXIoZ2VuZXJhdGVDb25maWcsIGRhdGUsIGVuZFllYXJEYXRlKSB8fCBpc0luUmFuZ2UoZ2VuZXJhdGVDb25maWcsIHN0YXJ0WWVhckRhdGUsIGVuZFllYXJEYXRlLCBkYXRlKSk7XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IERpc2FibGVkID09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgbWVyZ2VkRGlzYWJsZWREYXRlID0gZGlzYWJsZWREYXRlID8gZnVuY3Rpb24gKGN1cnJlbnREYXRlLCBkaXNhYmxlZEluZm8pIHtcbiAgICAvLyBTdGFydFxuICAgIHZhciBzdGFydE1vbnRoID0gZ2VuZXJhdGVDb25maWcuc2V0TW9udGgoY3VycmVudERhdGUsIDApO1xuICAgIHZhciBzdGFydERhdGUgPSBnZW5lcmF0ZUNvbmZpZy5zZXREYXRlKHN0YXJ0TW9udGgsIDEpO1xuXG4gICAgLy8gRW5kXG4gICAgdmFyIGVuZE1vbnRoID0gZ2VuZXJhdGVDb25maWcuYWRkWWVhcihzdGFydERhdGUsIDEpO1xuICAgIHZhciBlbmREYXRlID0gZ2VuZXJhdGVDb25maWcuYWRkRGF0ZShlbmRNb250aCwgLTEpO1xuICAgIHJldHVybiBkaXNhYmxlZERhdGUoc3RhcnREYXRlLCBkaXNhYmxlZEluZm8pICYmIGRpc2FibGVkRGF0ZShlbmREYXRlLCBkaXNhYmxlZEluZm8pO1xuICB9IDogbnVsbDtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IEhlYWRlciA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciB5ZWFyTm9kZSA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHtcbiAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgIGtleTogXCJkZWNhZGVcIixcbiAgICBcImFyaWEtbGFiZWxcIjogbG9jYWxlLmRlY2FkZVNlbGVjdCxcbiAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKCkge1xuICAgICAgb25Nb2RlQ2hhbmdlKCdkZWNhZGUnKTtcbiAgICB9LFxuICAgIHRhYkluZGV4OiAtMSxcbiAgICBjbGFzc05hbWU6IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItZGVjYWRlLWJ0blwiKVxuICB9LCBmb3JtYXRWYWx1ZShzdGFydFllYXJEYXRlLCB7XG4gICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgZm9ybWF0OiBsb2NhbGUueWVhckZvcm1hdCxcbiAgICBnZW5lcmF0ZUNvbmZpZzogZ2VuZXJhdGVDb25maWdcbiAgfSksIFwiLVwiLCBmb3JtYXRWYWx1ZShlbmRZZWFyRGF0ZSwge1xuICAgIGxvY2FsZTogbG9jYWxlLFxuICAgIGZvcm1hdDogbG9jYWxlLnllYXJGb3JtYXQsXG4gICAgZ2VuZXJhdGVDb25maWc6IGdlbmVyYXRlQ29uZmlnXG4gIH0pKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IFJlbmRlciA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQYW5lbENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogaW5mb1xuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBwYW5lbFByZWZpeENsc1xuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQYW5lbEhlYWRlciwge1xuICAgIHN1cGVyT2Zmc2V0OiBmdW5jdGlvbiBzdXBlck9mZnNldChkaXN0YW5jZSkge1xuICAgICAgcmV0dXJuIGdlbmVyYXRlQ29uZmlnLmFkZFllYXIocGlja2VyVmFsdWUsIGRpc3RhbmNlICogMTApO1xuICAgIH0sXG4gICAgb25DaGFuZ2U6IG9uUGlja2VyVmFsdWVDaGFuZ2VcbiAgICAvLyBMaW1pdGF0aW9uXG4gICAgLFxuICAgIGdldFN0YXJ0OiBnZXRTdGFydFllYXIsXG4gICAgZ2V0RW5kOiBnZXRFbmRZZWFyXG4gIH0sIHllYXJOb2RlKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUGFuZWxCb2R5LCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBkaXNhYmxlZERhdGU6IG1lcmdlZERpc2FibGVkRGF0ZSxcbiAgICB0aXRsZUZvcm1hdDogbG9jYWxlLmZpZWxkWWVhckZvcm1hdCxcbiAgICBjb2xOdW06IDMsXG4gICAgcm93TnVtOiA0LFxuICAgIGJhc2VEYXRlOiBiYXNlRGF0ZVxuICAgIC8vIEJvZHlcbiAgICAsXG4gICAgZ2V0Q2VsbERhdGU6IGdldENlbGxEYXRlLFxuICAgIGdldENlbGxUZXh0OiBnZXRDZWxsVGV4dCxcbiAgICBnZXRDZWxsQ2xhc3NOYW1lOiBnZXRDZWxsQ2xhc3NOYW1lXG4gIH0pKSkpO1xufSIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0Jztcbi8qKiBVc2VkIGZvciBlYWNoIHNpbmdsZSBQYW5lbC4gZS5nLiBEYXRlUGFuZWwgKi9cbmV4cG9ydCB2YXIgUGFuZWxDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQobnVsbCk7XG5leHBvcnQgZnVuY3Rpb24gdXNlUGFuZWxDb250ZXh0KCkge1xuICByZXR1cm4gUmVhY3QudXNlQ29udGV4dChQYW5lbENvbnRleHQpO1xufVxuXG4vKipcbiAqIEdldCBzaGFyZWQgcHJvcHMgZm9yIHRoZSBTaGFyZWRQYW5lbFByb3BzIGludGVyZmFjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUluZm8ocHJvcHMsIHBhbmVsVHlwZSkge1xuICB2YXIgcHJlZml4Q2xzID0gcHJvcHMucHJlZml4Q2xzLFxuICAgIGdlbmVyYXRlQ29uZmlnID0gcHJvcHMuZ2VuZXJhdGVDb25maWcsXG4gICAgbG9jYWxlID0gcHJvcHMubG9jYWxlLFxuICAgIGRpc2FibGVkRGF0ZSA9IHByb3BzLmRpc2FibGVkRGF0ZSxcbiAgICBtaW5EYXRlID0gcHJvcHMubWluRGF0ZSxcbiAgICBtYXhEYXRlID0gcHJvcHMubWF4RGF0ZSxcbiAgICBjZWxsUmVuZGVyID0gcHJvcHMuY2VsbFJlbmRlcixcbiAgICBob3ZlclZhbHVlID0gcHJvcHMuaG92ZXJWYWx1ZSxcbiAgICBob3ZlclJhbmdlVmFsdWUgPSBwcm9wcy5ob3ZlclJhbmdlVmFsdWUsXG4gICAgb25Ib3ZlciA9IHByb3BzLm9uSG92ZXIsXG4gICAgdmFsdWVzID0gcHJvcHMudmFsdWVzLFxuICAgIHBpY2tlclZhbHVlID0gcHJvcHMucGlja2VyVmFsdWUsXG4gICAgb25TZWxlY3QgPSBwcm9wcy5vblNlbGVjdCxcbiAgICBwcmV2SWNvbiA9IHByb3BzLnByZXZJY29uLFxuICAgIG5leHRJY29uID0gcHJvcHMubmV4dEljb24sXG4gICAgc3VwZXJQcmV2SWNvbiA9IHByb3BzLnN1cGVyUHJldkljb24sXG4gICAgc3VwZXJOZXh0SWNvbiA9IHByb3BzLnN1cGVyTmV4dEljb247XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBNSVNDID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIG5vdyA9IGdlbmVyYXRlQ29uZmlnLmdldE5vdygpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT0gSW5mbyA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBpbmZvID0ge1xuICAgIG5vdzogbm93LFxuICAgIHZhbHVlczogdmFsdWVzLFxuICAgIHBpY2tlclZhbHVlOiBwaWNrZXJWYWx1ZSxcbiAgICBwcmVmaXhDbHM6IHByZWZpeENscyxcbiAgICBkaXNhYmxlZERhdGU6IGRpc2FibGVkRGF0ZSxcbiAgICBtaW5EYXRlOiBtaW5EYXRlLFxuICAgIG1heERhdGU6IG1heERhdGUsXG4gICAgY2VsbFJlbmRlcjogY2VsbFJlbmRlcixcbiAgICBob3ZlclZhbHVlOiBob3ZlclZhbHVlLFxuICAgIGhvdmVyUmFuZ2VWYWx1ZTogaG92ZXJSYW5nZVZhbHVlLFxuICAgIG9uSG92ZXI6IG9uSG92ZXIsXG4gICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgZ2VuZXJhdGVDb25maWc6IGdlbmVyYXRlQ29uZmlnLFxuICAgIG9uU2VsZWN0OiBvblNlbGVjdCxcbiAgICBwYW5lbFR5cGU6IHBhbmVsVHlwZSxcbiAgICAvLyBJY29uc1xuICAgIHByZXZJY29uOiBwcmV2SWNvbixcbiAgICBuZXh0SWNvbjogbmV4dEljb24sXG4gICAgc3VwZXJQcmV2SWNvbjogc3VwZXJQcmV2SWNvbixcbiAgICBzdXBlck5leHRJY29uOiBzdXBlck5leHRJY29uXG4gIH07XG4gIHJldHVybiBbaW5mbywgbm93XTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEludGVybmFsID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEludGVybmFsIHVzYWdlIGZvciBSYW5nZVBpY2tlciB0byBub3QgdG8gc2hvdyB0aGUgb3BlcmF0aW9uIGFycm93XG4gKi9cbmV4cG9ydCB2YXIgUGlja2VySGFja0NvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCh7fSk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBQaWNrZXJIYWNrQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdQaWNrZXJIYWNrQ29udGV4dCc7XG59IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eVwiO1xuaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDJcIjtcbmltcG9ydCBfdG9Db25zdW1hYmxlQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5XCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgdXNlRXZlbnQsIHVzZU1lcmdlZFN0YXRlLCB3YXJuaW5nIH0gZnJvbSAncmMtdXRpbCc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlTG9jYWxlIGZyb20gXCIuLi9ob29rcy91c2VMb2NhbGVcIjtcbmltcG9ydCB7IGZpbGxTaG93VGltZUNvbmZpZywgZ2V0VGltZVByb3BzIH0gZnJvbSBcIi4uL2hvb2tzL3VzZVRpbWVDb25maWdcIjtcbmltcG9ydCB1c2VUb2dnbGVEYXRlcyBmcm9tIFwiLi4vaG9va3MvdXNlVG9nZ2xlRGF0ZXNcIjtcbmltcG9ydCBQaWNrZXJDb250ZXh0IGZyb20gXCIuLi9QaWNrZXJJbnB1dC9jb250ZXh0XCI7XG5pbXBvcnQgdXNlQ2VsbFJlbmRlciBmcm9tIFwiLi4vUGlja2VySW5wdXQvaG9va3MvdXNlQ2VsbFJlbmRlclwiO1xuaW1wb3J0IHsgaXNTYW1lIH0gZnJvbSBcIi4uL3V0aWxzL2RhdGVVdGlsXCI7XG5pbXBvcnQgeyBwaWNrUHJvcHMsIHRvQXJyYXkgfSBmcm9tIFwiLi4vdXRpbHMvbWlzY1V0aWxcIjtcbmltcG9ydCB7IFBpY2tlckhhY2tDb250ZXh0IH0gZnJvbSBcIi4vY29udGV4dFwiO1xuaW1wb3J0IERhdGVQYW5lbCBmcm9tIFwiLi9EYXRlUGFuZWxcIjtcbmltcG9ydCBEYXRlVGltZVBhbmVsIGZyb20gXCIuL0RhdGVUaW1lUGFuZWxcIjtcbmltcG9ydCBEZWNhZGVQYW5lbCBmcm9tIFwiLi9EZWNhZGVQYW5lbFwiO1xuaW1wb3J0IE1vbnRoUGFuZWwgZnJvbSBcIi4vTW9udGhQYW5lbFwiO1xuaW1wb3J0IFF1YXJ0ZXJQYW5lbCBmcm9tIFwiLi9RdWFydGVyUGFuZWxcIjtcbmltcG9ydCBUaW1lUGFuZWwgZnJvbSBcIi4vVGltZVBhbmVsXCI7XG5pbXBvcnQgV2Vla1BhbmVsIGZyb20gXCIuL1dlZWtQYW5lbFwiO1xuaW1wb3J0IFllYXJQYW5lbCBmcm9tIFwiLi9ZZWFyUGFuZWxcIjtcbnZhciBEZWZhdWx0Q29tcG9uZW50cyA9IHtcbiAgZGF0ZTogRGF0ZVBhbmVsLFxuICBkYXRldGltZTogRGF0ZVRpbWVQYW5lbCxcbiAgd2VlazogV2Vla1BhbmVsLFxuICBtb250aDogTW9udGhQYW5lbCxcbiAgcXVhcnRlcjogUXVhcnRlclBhbmVsLFxuICB5ZWFyOiBZZWFyUGFuZWwsXG4gIGRlY2FkZTogRGVjYWRlUGFuZWwsXG4gIHRpbWU6IFRpbWVQYW5lbFxufTtcbmZ1bmN0aW9uIFBpY2tlclBhbmVsKHByb3BzLCByZWYpIHtcbiAgdmFyIF9SZWFjdCR1c2VDb250ZXh0O1xuICB2YXIgbG9jYWxlID0gcHJvcHMubG9jYWxlLFxuICAgIGdlbmVyYXRlQ29uZmlnID0gcHJvcHMuZ2VuZXJhdGVDb25maWcsXG4gICAgZGlyZWN0aW9uID0gcHJvcHMuZGlyZWN0aW9uLFxuICAgIHByZWZpeENscyA9IHByb3BzLnByZWZpeENscyxcbiAgICBfcHJvcHMkdGFiSW5kZXggPSBwcm9wcy50YWJJbmRleCxcbiAgICB0YWJJbmRleCA9IF9wcm9wcyR0YWJJbmRleCA9PT0gdm9pZCAwID8gMCA6IF9wcm9wcyR0YWJJbmRleCxcbiAgICBtdWx0aXBsZSA9IHByb3BzLm11bHRpcGxlLFxuICAgIGRlZmF1bHRWYWx1ZSA9IHByb3BzLmRlZmF1bHRWYWx1ZSxcbiAgICB2YWx1ZSA9IHByb3BzLnZhbHVlLFxuICAgIG9uQ2hhbmdlID0gcHJvcHMub25DaGFuZ2UsXG4gICAgb25TZWxlY3QgPSBwcm9wcy5vblNlbGVjdCxcbiAgICBkZWZhdWx0UGlja2VyVmFsdWUgPSBwcm9wcy5kZWZhdWx0UGlja2VyVmFsdWUsXG4gICAgcGlja2VyVmFsdWUgPSBwcm9wcy5waWNrZXJWYWx1ZSxcbiAgICBvblBpY2tlclZhbHVlQ2hhbmdlID0gcHJvcHMub25QaWNrZXJWYWx1ZUNoYW5nZSxcbiAgICBtb2RlID0gcHJvcHMubW9kZSxcbiAgICBvblBhbmVsQ2hhbmdlID0gcHJvcHMub25QYW5lbENoYW5nZSxcbiAgICBfcHJvcHMkcGlja2VyID0gcHJvcHMucGlja2VyLFxuICAgIHBpY2tlciA9IF9wcm9wcyRwaWNrZXIgPT09IHZvaWQgMCA/ICdkYXRlJyA6IF9wcm9wcyRwaWNrZXIsXG4gICAgc2hvd1RpbWUgPSBwcm9wcy5zaG93VGltZSxcbiAgICBob3ZlclZhbHVlID0gcHJvcHMuaG92ZXJWYWx1ZSxcbiAgICBob3ZlclJhbmdlVmFsdWUgPSBwcm9wcy5ob3ZlclJhbmdlVmFsdWUsXG4gICAgY2VsbFJlbmRlciA9IHByb3BzLmNlbGxSZW5kZXIsXG4gICAgZGF0ZVJlbmRlciA9IHByb3BzLmRhdGVSZW5kZXIsXG4gICAgbW9udGhDZWxsUmVuZGVyID0gcHJvcHMubW9udGhDZWxsUmVuZGVyLFxuICAgIF9wcm9wcyRjb21wb25lbnRzID0gcHJvcHMuY29tcG9uZW50cyxcbiAgICBjb21wb25lbnRzID0gX3Byb3BzJGNvbXBvbmVudHMgPT09IHZvaWQgMCA/IHt9IDogX3Byb3BzJGNvbXBvbmVudHMsXG4gICAgaGlkZUhlYWRlciA9IHByb3BzLmhpZGVIZWFkZXI7XG4gIHZhciBtZXJnZWRQcmVmaXhDbHMgPSAoKF9SZWFjdCR1c2VDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChQaWNrZXJDb250ZXh0KSkgPT09IG51bGwgfHwgX1JlYWN0JHVzZUNvbnRleHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9SZWFjdCR1c2VDb250ZXh0LnByZWZpeENscykgfHwgcHJlZml4Q2xzIHx8ICdyYy1waWNrZXInO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09IFJlZnMgPT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIHJvb3RSZWYgPSBSZWFjdC51c2VSZWYoKTtcbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmF0aXZlRWxlbWVudDogcm9vdFJlZi5jdXJyZW50XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT0gVGltZSA9PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBBdXRvIGBmb3JtYXRgIG5lZWQgdG8gY2hlY2sgYHNob3dUaW1lLnNob3dYWFhgIGZpcnN0LlxuICAvLyBBbmQgdGhlbiBtZXJnZSB0aGUgYGxvY2FsZWAgaW50byBgbWVyZ2VkU2hvd1RpbWVgLlxuICB2YXIgX2dldFRpbWVQcm9wcyA9IGdldFRpbWVQcm9wcyhwcm9wcyksXG4gICAgX2dldFRpbWVQcm9wczIgPSBfc2xpY2VkVG9BcnJheShfZ2V0VGltZVByb3BzLCA0KSxcbiAgICB0aW1lUHJvcHMgPSBfZ2V0VGltZVByb3BzMlswXSxcbiAgICBsb2NhbGVUaW1lUHJvcHMgPSBfZ2V0VGltZVByb3BzMlsxXSxcbiAgICBzaG93VGltZUZvcm1hdCA9IF9nZXRUaW1lUHJvcHMyWzJdLFxuICAgIHByb3BGb3JtYXQgPSBfZ2V0VGltZVByb3BzMlszXTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IExvY2FsZSA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBmaWxsZWRMb2NhbGUgPSB1c2VMb2NhbGUobG9jYWxlLCBsb2NhbGVUaW1lUHJvcHMpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT0gUGlja2VyID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIGludGVybmFsUGlja2VyID0gcGlja2VyID09PSAnZGF0ZScgJiYgc2hvd1RpbWUgPyAnZGF0ZXRpbWUnIDogcGlja2VyO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBTaG93VGltZSA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgdmFyIG1lcmdlZFNob3dUaW1lID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZpbGxTaG93VGltZUNvbmZpZyhpbnRlcm5hbFBpY2tlciwgc2hvd1RpbWVGb3JtYXQsIHByb3BGb3JtYXQsIHRpbWVQcm9wcywgZmlsbGVkTG9jYWxlKTtcbiAgfSwgW2ludGVybmFsUGlja2VyLCBzaG93VGltZUZvcm1hdCwgcHJvcEZvcm1hdCwgdGltZVByb3BzLCBmaWxsZWRMb2NhbGVdKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PSBOb3cgPT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBub3cgPSBnZW5lcmF0ZUNvbmZpZy5nZXROb3coKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PSBNb2RlID09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBfdXNlTWVyZ2VkU3RhdGUgPSB1c2VNZXJnZWRTdGF0ZShwaWNrZXIsIHtcbiAgICAgIHZhbHVlOiBtb2RlLFxuICAgICAgcG9zdFN0YXRlOiBmdW5jdGlvbiBwb3N0U3RhdGUodmFsKSB7XG4gICAgICAgIHJldHVybiB2YWwgfHwgJ2RhdGUnO1xuICAgICAgfVxuICAgIH0pLFxuICAgIF91c2VNZXJnZWRTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlTWVyZ2VkU3RhdGUsIDIpLFxuICAgIG1lcmdlZE1vZGUgPSBfdXNlTWVyZ2VkU3RhdGUyWzBdLFxuICAgIHNldE1lcmdlZE1vZGUgPSBfdXNlTWVyZ2VkU3RhdGUyWzFdO1xuICB2YXIgaW50ZXJuYWxNb2RlID0gbWVyZ2VkTW9kZSA9PT0gJ2RhdGUnICYmIG1lcmdlZFNob3dUaW1lID8gJ2RhdGV0aW1lJyA6IG1lcmdlZE1vZGU7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBUb2dnbGUgPT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgdG9nZ2xlRGF0ZXMgPSB1c2VUb2dnbGVEYXRlcyhnZW5lcmF0ZUNvbmZpZywgbG9jYWxlLCBpbnRlcm5hbFBpY2tlcik7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBWYWx1ZSA9PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyA+Pj4gUmVhbCB2YWx1ZVxuICAvLyBJbnRlcmFjdGl2ZSB3aXRoIGBvbkNoYW5nZWAgZXZlbnQgd2hpY2ggb25seSB0cmlnZ2VyIHdoZW4gdGhlIGBtb2RlYCBpcyBgcGlja2VyYFxuICB2YXIgX3VzZU1lcmdlZFN0YXRlMyA9IHVzZU1lcmdlZFN0YXRlKGRlZmF1bHRWYWx1ZSwge1xuICAgICAgdmFsdWU6IHZhbHVlXG4gICAgfSksXG4gICAgX3VzZU1lcmdlZFN0YXRlNCA9IF9zbGljZWRUb0FycmF5KF91c2VNZXJnZWRTdGF0ZTMsIDIpLFxuICAgIGlubmVyVmFsdWUgPSBfdXNlTWVyZ2VkU3RhdGU0WzBdLFxuICAgIHNldE1lcmdlZFZhbHVlID0gX3VzZU1lcmdlZFN0YXRlNFsxXTtcbiAgdmFyIG1lcmdlZFZhbHVlID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gQ2xlYW4gdXAgYFtudWxsXWBcbiAgICB2YXIgdmFsdWVzID0gdG9BcnJheShpbm5lclZhbHVlKS5maWx0ZXIoZnVuY3Rpb24gKHZhbCkge1xuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9KTtcbiAgICByZXR1cm4gbXVsdGlwbGUgPyB2YWx1ZXMgOiB2YWx1ZXMuc2xpY2UoMCwgMSk7XG4gIH0sIFtpbm5lclZhbHVlLCBtdWx0aXBsZV0pO1xuXG4gIC8vIFN5bmMgdmFsdWUgYW5kIG9ubHkgdHJpZ2dlciBvbkNoYW5nZSBldmVudCB3aGVuIGNoYW5nZWRcbiAgdmFyIHRyaWdnZXJDaGFuZ2UgPSB1c2VFdmVudChmdW5jdGlvbiAobmV4dFZhbHVlKSB7XG4gICAgc2V0TWVyZ2VkVmFsdWUobmV4dFZhbHVlKTtcbiAgICBpZiAob25DaGFuZ2UgJiYgKG5leHRWYWx1ZSA9PT0gbnVsbCB8fCBtZXJnZWRWYWx1ZS5sZW5ndGggIT09IG5leHRWYWx1ZS5sZW5ndGggfHwgbWVyZ2VkVmFsdWUuc29tZShmdW5jdGlvbiAob3JpLCBpbmRleCkge1xuICAgICAgcmV0dXJuICFpc1NhbWUoZ2VuZXJhdGVDb25maWcsIGxvY2FsZSwgb3JpLCBuZXh0VmFsdWVbaW5kZXhdLCBpbnRlcm5hbFBpY2tlcik7XG4gICAgfSkpKSB7XG4gICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwIHx8IG9uQ2hhbmdlKG11bHRpcGxlID8gbmV4dFZhbHVlIDogbmV4dFZhbHVlWzBdKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vID4+PiBDYWxlbmRhclZhbHVlXG4gIC8vIENhbGVuZGFyVmFsdWUgaXMgYSB0ZW1wIHZhbHVlIGZvciB1c2VyIG9wZXJhdGlvblxuICAvLyB3aGljaCB3aWxsIG9ubHkgdHJpZ2dlciBgb25DYWxlbmRhckNoYW5nZWAgYnV0IG5vdCBgb25DaGFuZ2VgXG4gIHZhciBvbkludGVybmFsU2VsZWN0ID0gdXNlRXZlbnQoZnVuY3Rpb24gKG5ld0RhdGUpIHtcbiAgICBvblNlbGVjdCA9PT0gbnVsbCB8fCBvblNlbGVjdCA9PT0gdm9pZCAwIHx8IG9uU2VsZWN0KG5ld0RhdGUpO1xuICAgIGlmIChtZXJnZWRNb2RlID09PSBwaWNrZXIpIHtcbiAgICAgIHZhciBuZXh0VmFsdWVzID0gbXVsdGlwbGUgPyB0b2dnbGVEYXRlcyhtZXJnZWRWYWx1ZSwgbmV3RGF0ZSkgOiBbbmV3RGF0ZV07XG4gICAgICB0cmlnZ2VyQ2hhbmdlKG5leHRWYWx1ZXMpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gPj4+IFBpY2tlclZhbHVlXG4gIC8vIFBpY2tlclZhbHVlIGlzIHVzZWQgdG8gY29udHJvbCB0aGUgY3VycmVudCBkaXNwbGF5aW5nIHBhbmVsXG4gIHZhciBfdXNlTWVyZ2VkU3RhdGU1ID0gdXNlTWVyZ2VkU3RhdGUoZGVmYXVsdFBpY2tlclZhbHVlIHx8IG1lcmdlZFZhbHVlWzBdIHx8IG5vdywge1xuICAgICAgdmFsdWU6IHBpY2tlclZhbHVlXG4gICAgfSksXG4gICAgX3VzZU1lcmdlZFN0YXRlNiA9IF9zbGljZWRUb0FycmF5KF91c2VNZXJnZWRTdGF0ZTUsIDIpLFxuICAgIG1lcmdlZFBpY2tlclZhbHVlID0gX3VzZU1lcmdlZFN0YXRlNlswXSxcbiAgICBzZXRJbnRlcm5hbFBpY2tlclZhbHVlID0gX3VzZU1lcmdlZFN0YXRlNlsxXTtcbiAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAobWVyZ2VkVmFsdWVbMF0gJiYgIXBpY2tlclZhbHVlKSB7XG4gICAgICBzZXRJbnRlcm5hbFBpY2tlclZhbHVlKG1lcmdlZFZhbHVlWzBdKTtcbiAgICB9XG4gIH0sIFttZXJnZWRWYWx1ZVswXV0pO1xuXG4gIC8vIEJvdGggdHJpZ2dlciB3aGVuIG1hbnVhbGx5IHBpY2tlclZhbHVlIG9yIG1vZGUgY2hhbmdlXG4gIHZhciB0cmlnZ2VyUGFuZWxDaGFuZ2UgPSBmdW5jdGlvbiB0cmlnZ2VyUGFuZWxDaGFuZ2Uodmlld0RhdGUsIG5leHRNb2RlKSB7XG4gICAgb25QYW5lbENoYW5nZSA9PT0gbnVsbCB8fCBvblBhbmVsQ2hhbmdlID09PSB2b2lkIDAgfHwgb25QYW5lbENoYW5nZSh2aWV3RGF0ZSB8fCBwaWNrZXJWYWx1ZSwgbmV4dE1vZGUgfHwgbWVyZ2VkTW9kZSk7XG4gIH07XG4gIHZhciBzZXRQaWNrZXJWYWx1ZSA9IGZ1bmN0aW9uIHNldFBpY2tlclZhbHVlKG5leHRQaWNrZXJWYWx1ZSkge1xuICAgIHZhciB0cmlnZ2VyUGFuZWxFdmVudCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG4gICAgc2V0SW50ZXJuYWxQaWNrZXJWYWx1ZShuZXh0UGlja2VyVmFsdWUpO1xuICAgIG9uUGlja2VyVmFsdWVDaGFuZ2UgPT09IG51bGwgfHwgb25QaWNrZXJWYWx1ZUNoYW5nZSA9PT0gdm9pZCAwIHx8IG9uUGlja2VyVmFsdWVDaGFuZ2UobmV4dFBpY2tlclZhbHVlKTtcbiAgICBpZiAodHJpZ2dlclBhbmVsRXZlbnQpIHtcbiAgICAgIHRyaWdnZXJQYW5lbENoYW5nZShuZXh0UGlja2VyVmFsdWUpO1xuICAgIH1cbiAgfTtcbiAgdmFyIHRyaWdnZXJNb2RlQ2hhbmdlID0gZnVuY3Rpb24gdHJpZ2dlck1vZGVDaGFuZ2UobmV4dE1vZGUsIHZpZXdEYXRlKSB7XG4gICAgc2V0TWVyZ2VkTW9kZShuZXh0TW9kZSk7XG4gICAgaWYgKHZpZXdEYXRlKSB7XG4gICAgICBzZXRQaWNrZXJWYWx1ZSh2aWV3RGF0ZSk7XG4gICAgfVxuICAgIHRyaWdnZXJQYW5lbENoYW5nZSh2aWV3RGF0ZSwgbmV4dE1vZGUpO1xuICB9O1xuICB2YXIgb25QYW5lbFZhbHVlU2VsZWN0ID0gZnVuY3Rpb24gb25QYW5lbFZhbHVlU2VsZWN0KG5leHRWYWx1ZSkge1xuICAgIG9uSW50ZXJuYWxTZWxlY3QobmV4dFZhbHVlKTtcbiAgICBzZXRQaWNrZXJWYWx1ZShuZXh0VmFsdWUpO1xuXG4gICAgLy8gVXBkYXRlIG1vZGUgaWYgbmVlZGVkXG4gICAgaWYgKG1lcmdlZE1vZGUgIT09IHBpY2tlcikge1xuICAgICAgdmFyIGRlY2FkZVllYXJRdWV1ZSA9IFsnZGVjYWRlJywgJ3llYXInXTtcbiAgICAgIHZhciBkZWNhZGVZZWFyTW9udGhRdWV1ZSA9IFtdLmNvbmNhdChkZWNhZGVZZWFyUXVldWUsIFsnbW9udGgnXSk7XG4gICAgICB2YXIgcGlja2VyUXVldWUgPSB7XG4gICAgICAgIHF1YXJ0ZXI6IFtdLmNvbmNhdChkZWNhZGVZZWFyUXVldWUsIFsncXVhcnRlciddKSxcbiAgICAgICAgd2VlazogW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShkZWNhZGVZZWFyTW9udGhRdWV1ZSksIFsnd2VlayddKSxcbiAgICAgICAgZGF0ZTogW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShkZWNhZGVZZWFyTW9udGhRdWV1ZSksIFsnZGF0ZSddKVxuICAgICAgfTtcbiAgICAgIHZhciBxdWV1ZSA9IHBpY2tlclF1ZXVlW3BpY2tlcl0gfHwgZGVjYWRlWWVhck1vbnRoUXVldWU7XG4gICAgICB2YXIgaW5kZXggPSBxdWV1ZS5pbmRleE9mKG1lcmdlZE1vZGUpO1xuICAgICAgdmFyIG5leHRNb2RlID0gcXVldWVbaW5kZXggKyAxXTtcbiAgICAgIGlmIChuZXh0TW9kZSkge1xuICAgICAgICB0cmlnZ2VyTW9kZUNoYW5nZShuZXh0TW9kZSwgbmV4dFZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT0gSG92ZXIgRGF0ZSA9PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgaG92ZXJSYW5nZURhdGUgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc3RhcnQ7XG4gICAgdmFyIGVuZDtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShob3ZlclJhbmdlVmFsdWUpKSB7XG4gICAgICB2YXIgX2hvdmVyUmFuZ2VWYWx1ZSA9IF9zbGljZWRUb0FycmF5KGhvdmVyUmFuZ2VWYWx1ZSwgMik7XG4gICAgICBzdGFydCA9IF9ob3ZlclJhbmdlVmFsdWVbMF07XG4gICAgICBlbmQgPSBfaG92ZXJSYW5nZVZhbHVlWzFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydCA9IGhvdmVyUmFuZ2VWYWx1ZTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gZm9yIG5vdCBleGlzdFxuICAgIGlmICghc3RhcnQgJiYgIWVuZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gRmlsbCBpZiBoYXMgZW1wdHlcbiAgICBzdGFydCA9IHN0YXJ0IHx8IGVuZDtcbiAgICBlbmQgPSBlbmQgfHwgc3RhcnQ7XG4gICAgcmV0dXJuIGdlbmVyYXRlQ29uZmlnLmlzQWZ0ZXIoc3RhcnQsIGVuZCkgPyBbZW5kLCBzdGFydF0gOiBbc3RhcnQsIGVuZF07XG4gIH0sIFtob3ZlclJhbmdlVmFsdWUsIGdlbmVyYXRlQ29uZmlnXSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT0gQ29tcG9uZW50cyA9PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyA+Pj4gY2VsbFJlbmRlclxuICB2YXIgb25JbnRlcm5hbENlbGxSZW5kZXIgPSB1c2VDZWxsUmVuZGVyKGNlbGxSZW5kZXIsIGRhdGVSZW5kZXIsIG1vbnRoQ2VsbFJlbmRlcik7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT0gQ29tcG9uZW50cyA9PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgUGFuZWxDb21wb25lbnQgPSBjb21wb25lbnRzW2ludGVybmFsTW9kZV0gfHwgRGVmYXVsdENvbXBvbmVudHNbaW50ZXJuYWxNb2RlXSB8fCBEYXRlUGFuZWw7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IENvbnRleHQgPT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgcGFyZW50SGFja0NvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KFBpY2tlckhhY2tDb250ZXh0KTtcbiAgdmFyIHBpY2tlclBhbmVsQ29udGV4dCA9IFJlYWN0LnVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHBhcmVudEhhY2tDb250ZXh0KSwge30sIHtcbiAgICAgIGhpZGVIZWFkZXI6IGhpZGVIZWFkZXJcbiAgICB9KTtcbiAgfSwgW3BhcmVudEhhY2tDb250ZXh0LCBoaWRlSGVhZGVyXSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IFdhcm5pbmdzID09PT09PT09PT09PT09PT09PT09PT09PVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHdhcm5pbmcoIW1lcmdlZFZhbHVlIHx8IG1lcmdlZFZhbHVlLmV2ZXJ5KGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIHJldHVybiBnZW5lcmF0ZUNvbmZpZy5pc1ZhbGlkYXRlKHZhbCk7XG4gICAgfSksICdJbnZhbGlkYXRlIGRhdGUgcGFzcyB0byBgdmFsdWVgIG9yIGBkZWZhdWx0VmFsdWVgLicpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBSZW5kZXIgPT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgcGFuZWxDbHMgPSBcIlwiLmNvbmNhdChtZXJnZWRQcmVmaXhDbHMsIFwiLXBhbmVsXCIpO1xuICB2YXIgcGFuZWxQcm9wcyA9IHBpY2tQcm9wcyhwcm9wcywgW1xuICAvLyBXZWVrXG4gICdzaG93V2VlaycsXG4gIC8vIEljb25zXG4gICdwcmV2SWNvbicsICduZXh0SWNvbicsICdzdXBlclByZXZJY29uJywgJ3N1cGVyTmV4dEljb24nLFxuICAvLyBEaXNhYmxlZFxuICAnZGlzYWJsZWREYXRlJywgJ21pbkRhdGUnLCAnbWF4RGF0ZScsXG4gIC8vIEhvdmVyXG4gICdvbkhvdmVyJ10pO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUGlja2VySGFja0NvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogcGlja2VyUGFuZWxDb250ZXh0XG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICByZWY6IHJvb3RSZWYsXG4gICAgdGFiSW5kZXg6IHRhYkluZGV4LFxuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyhwYW5lbENscywgX2RlZmluZVByb3BlcnR5KHt9LCBcIlwiLmNvbmNhdChwYW5lbENscywgXCItcnRsXCIpLCBkaXJlY3Rpb24gPT09ICdydGwnKSlcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUGFuZWxDb21wb25lbnQsIF9leHRlbmRzKHt9LCBwYW5lbFByb3BzLCB7XG4gICAgLy8gVGltZVxuICAgIHNob3dUaW1lOiBtZXJnZWRTaG93VGltZVxuICAgIC8vIE1JU0NcbiAgICAsXG4gICAgcHJlZml4Q2xzOiBtZXJnZWRQcmVmaXhDbHMsXG4gICAgbG9jYWxlOiBmaWxsZWRMb2NhbGUsXG4gICAgZ2VuZXJhdGVDb25maWc6IGdlbmVyYXRlQ29uZmlnXG4gICAgLy8gTW9kZVxuICAgICxcbiAgICBvbk1vZGVDaGFuZ2U6IHRyaWdnZXJNb2RlQ2hhbmdlXG4gICAgLy8gVmFsdWVcbiAgICAsXG4gICAgcGlja2VyVmFsdWU6IG1lcmdlZFBpY2tlclZhbHVlLFxuICAgIG9uUGlja2VyVmFsdWVDaGFuZ2U6IGZ1bmN0aW9uIG9uUGlja2VyVmFsdWVDaGFuZ2UobmV4dFBpY2tlclZhbHVlKSB7XG4gICAgICBzZXRQaWNrZXJWYWx1ZShuZXh0UGlja2VyVmFsdWUsIHRydWUpO1xuICAgIH0sXG4gICAgdmFsdWU6IG1lcmdlZFZhbHVlWzBdLFxuICAgIG9uU2VsZWN0OiBvblBhbmVsVmFsdWVTZWxlY3QsXG4gICAgdmFsdWVzOiBtZXJnZWRWYWx1ZVxuICAgIC8vIFJlbmRlclxuICAgICxcbiAgICBjZWxsUmVuZGVyOiBvbkludGVybmFsQ2VsbFJlbmRlclxuICAgIC8vIEhvdmVyXG4gICAgLFxuICAgIGhvdmVyUmFuZ2VWYWx1ZTogaG92ZXJSYW5nZURhdGUsXG4gICAgaG92ZXJWYWx1ZTogaG92ZXJWYWx1ZVxuICB9KSkpKTtcbn1cbnZhciBSZWZQYW5lbFBpY2tlciA9IC8qI19fUFVSRV9fKi9SZWFjdC5tZW1vKCAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihQaWNrZXJQYW5lbCkpO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgUmVmUGFuZWxQaWNrZXIuZGlzcGxheU5hbWUgPSAnUGFuZWxQaWNrZXInO1xufVxuXG4vLyBNYWtlIHN1cHBvcnQgZ2VuZXJpY1xuZXhwb3J0IGRlZmF1bHQgUmVmUGFuZWxQaWNrZXI7IiwiaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHlcIjtcbmltcG9ydCBUcmlnZ2VyIGZyb20gJ0ByYy1jb21wb25lbnQvdHJpZ2dlcic7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGdldFJlYWxQbGFjZW1lbnQgfSBmcm9tIFwiLi4vdXRpbHMvdWlVdGlsXCI7XG5pbXBvcnQgUGlja2VyQ29udGV4dCBmcm9tIFwiLi4vUGlja2VySW5wdXQvY29udGV4dFwiO1xudmFyIEJVSUxUX0lOX1BMQUNFTUVOVFMgPSB7XG4gIGJvdHRvbUxlZnQ6IHtcbiAgICBwb2ludHM6IFsndGwnLCAnYmwnXSxcbiAgICBvZmZzZXQ6IFswLCA0XSxcbiAgICBvdmVyZmxvdzoge1xuICAgICAgYWRqdXN0WDogMSxcbiAgICAgIGFkanVzdFk6IDFcbiAgICB9XG4gIH0sXG4gIGJvdHRvbVJpZ2h0OiB7XG4gICAgcG9pbnRzOiBbJ3RyJywgJ2JyJ10sXG4gICAgb2Zmc2V0OiBbMCwgNF0sXG4gICAgb3ZlcmZsb3c6IHtcbiAgICAgIGFkanVzdFg6IDEsXG4gICAgICBhZGp1c3RZOiAxXG4gICAgfVxuICB9LFxuICB0b3BMZWZ0OiB7XG4gICAgcG9pbnRzOiBbJ2JsJywgJ3RsJ10sXG4gICAgb2Zmc2V0OiBbMCwgLTRdLFxuICAgIG92ZXJmbG93OiB7XG4gICAgICBhZGp1c3RYOiAwLFxuICAgICAgYWRqdXN0WTogMVxuICAgIH1cbiAgfSxcbiAgdG9wUmlnaHQ6IHtcbiAgICBwb2ludHM6IFsnYnInLCAndHInXSxcbiAgICBvZmZzZXQ6IFswLCAtNF0sXG4gICAgb3ZlcmZsb3c6IHtcbiAgICAgIGFkanVzdFg6IDAsXG4gICAgICBhZGp1c3RZOiAxXG4gICAgfVxuICB9XG59O1xuZnVuY3Rpb24gUGlja2VyVHJpZ2dlcihfcmVmKSB7XG4gIHZhciBwb3B1cEVsZW1lbnQgPSBfcmVmLnBvcHVwRWxlbWVudCxcbiAgICBwb3B1cFN0eWxlID0gX3JlZi5wb3B1cFN0eWxlLFxuICAgIHBvcHVwQ2xhc3NOYW1lID0gX3JlZi5wb3B1cENsYXNzTmFtZSxcbiAgICBwb3B1cEFsaWduID0gX3JlZi5wb3B1cEFsaWduLFxuICAgIHRyYW5zaXRpb25OYW1lID0gX3JlZi50cmFuc2l0aW9uTmFtZSxcbiAgICBnZXRQb3B1cENvbnRhaW5lciA9IF9yZWYuZ2V0UG9wdXBDb250YWluZXIsXG4gICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgIHJhbmdlID0gX3JlZi5yYW5nZSxcbiAgICBwbGFjZW1lbnQgPSBfcmVmLnBsYWNlbWVudCxcbiAgICBfcmVmJGJ1aWx0aW5QbGFjZW1lbnQgPSBfcmVmLmJ1aWx0aW5QbGFjZW1lbnRzLFxuICAgIGJ1aWx0aW5QbGFjZW1lbnRzID0gX3JlZiRidWlsdGluUGxhY2VtZW50ID09PSB2b2lkIDAgPyBCVUlMVF9JTl9QTEFDRU1FTlRTIDogX3JlZiRidWlsdGluUGxhY2VtZW50LFxuICAgIGRpcmVjdGlvbiA9IF9yZWYuZGlyZWN0aW9uLFxuICAgIHZpc2libGUgPSBfcmVmLnZpc2libGUsXG4gICAgb25DbG9zZSA9IF9yZWYub25DbG9zZTtcbiAgdmFyIF9SZWFjdCR1c2VDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChQaWNrZXJDb250ZXh0KSxcbiAgICBwcmVmaXhDbHMgPSBfUmVhY3QkdXNlQ29udGV4dC5wcmVmaXhDbHM7XG4gIHZhciBkcm9wZG93blByZWZpeENscyA9IFwiXCIuY29uY2F0KHByZWZpeENscywgXCItZHJvcGRvd25cIik7XG4gIHZhciByZWFsUGxhY2VtZW50ID0gZ2V0UmVhbFBsYWNlbWVudChwbGFjZW1lbnQsIGRpcmVjdGlvbiA9PT0gJ3J0bCcpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVHJpZ2dlciwge1xuICAgIHNob3dBY3Rpb246IFtdLFxuICAgIGhpZGVBY3Rpb246IFsnY2xpY2snXSxcbiAgICBwb3B1cFBsYWNlbWVudDogcmVhbFBsYWNlbWVudCxcbiAgICBidWlsdGluUGxhY2VtZW50czogYnVpbHRpblBsYWNlbWVudHMsXG4gICAgcHJlZml4Q2xzOiBkcm9wZG93blByZWZpeENscyxcbiAgICBwb3B1cFRyYW5zaXRpb25OYW1lOiB0cmFuc2l0aW9uTmFtZSxcbiAgICBwb3B1cDogcG9wdXBFbGVtZW50LFxuICAgIHBvcHVwQWxpZ246IHBvcHVwQWxpZ24sXG4gICAgcG9wdXBWaXNpYmxlOiB2aXNpYmxlLFxuICAgIHBvcHVwQ2xhc3NOYW1lOiBjbGFzc05hbWVzKHBvcHVwQ2xhc3NOYW1lLCBfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KHt9LCBcIlwiLmNvbmNhdChkcm9wZG93blByZWZpeENscywgXCItcmFuZ2VcIiksIHJhbmdlKSwgXCJcIi5jb25jYXQoZHJvcGRvd25QcmVmaXhDbHMsIFwiLXJ0bFwiKSwgZGlyZWN0aW9uID09PSAncnRsJykpLFxuICAgIHBvcHVwU3R5bGU6IHBvcHVwU3R5bGUsXG4gICAgc3RyZXRjaDogXCJtaW5XaWR0aFwiLFxuICAgIGdldFBvcHVwQ29udGFpbmVyOiBnZXRQb3B1cENvbnRhaW5lcixcbiAgICBvblBvcHVwVmlzaWJsZUNoYW5nZTogZnVuY3Rpb24gb25Qb3B1cFZpc2libGVDaGFuZ2UobmV4dFZpc2libGUpIHtcbiAgICAgIGlmICghbmV4dFZpc2libGUpIHtcbiAgICAgICAgb25DbG9zZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgY2hpbGRyZW4pO1xufVxuZXhwb3J0IGRlZmF1bHQgUGlja2VyVHJpZ2dlcjsiLCJpbXBvcnQgeyBwaWNrUHJvcHMgfSBmcm9tIFwiLi4vdXRpbHMvbWlzY1V0aWxcIjtcbmV4cG9ydCBmdW5jdGlvbiBwaWNrVHJpZ2dlclByb3BzKHByb3BzKSB7XG4gIHJldHVybiBwaWNrUHJvcHMocHJvcHMsIFsncGxhY2VtZW50JywgJ2J1aWx0aW5QbGFjZW1lbnRzJywgJ3BvcHVwQWxpZ24nLCAnZ2V0UG9wdXBDb250YWluZXInLCAndHJhbnNpdGlvbk5hbWUnLCAnZGlyZWN0aW9uJ10pO1xufSIsImltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGZ1bmN0aW9uIGZpbGxUaW1lRm9ybWF0KHNob3dIb3VyLCBzaG93TWludXRlLCBzaG93U2Vjb25kLCBzaG93TWlsbGlzZWNvbmQsIHNob3dNZXJpZGllbSkge1xuICB2YXIgdGltZUZvcm1hdCA9ICcnO1xuXG4gIC8vIEJhc2UgSEg6bW06c3NcbiAgdmFyIGNlbGxzID0gW107XG4gIGlmIChzaG93SG91cikge1xuICAgIGNlbGxzLnB1c2goc2hvd01lcmlkaWVtID8gJ2hoJyA6ICdISCcpO1xuICB9XG4gIGlmIChzaG93TWludXRlKSB7XG4gICAgY2VsbHMucHVzaCgnbW0nKTtcbiAgfVxuICBpZiAoc2hvd1NlY29uZCkge1xuICAgIGNlbGxzLnB1c2goJ3NzJyk7XG4gIH1cbiAgdGltZUZvcm1hdCA9IGNlbGxzLmpvaW4oJzonKTtcblxuICAvLyBNaWxsaXNlY29uZFxuICBpZiAoc2hvd01pbGxpc2Vjb25kKSB7XG4gICAgdGltZUZvcm1hdCArPSAnLlNTUyc7XG4gIH1cblxuICAvLyBNZXJpZGllbVxuICBpZiAoc2hvd01lcmlkaWVtKSB7XG4gICAgdGltZUZvcm1hdCArPSAnIEEnO1xuICB9XG4gIHJldHVybiB0aW1lRm9ybWF0O1xufVxuXG4vKipcbiAqIFVzZWQgZm9yIGB1c2VGaWxsZWRQcm9wc2Agc2luY2UgaXQgYWxyZWFkeSBpbiB0aGUgUmVhY3QudXNlTWVtb1xuICovXG5mdW5jdGlvbiBmaWxsTG9jYWxlKGxvY2FsZSwgc2hvd0hvdXIsIHNob3dNaW51dGUsIHNob3dTZWNvbmQsIHNob3dNaWxsaXNlY29uZCwgdXNlMTJIb3Vycykge1xuICAvLyBOb3QgZmlsbCBgbW9udGhGb3JtYXRgIHNpbmNlIGBsb2NhbGUuc2hvcnRNb250aHNgIGhhbmRsZSB0aGlzXG4gIC8vIE5vdCBmaWxsIGBjZWxsTWVyaWRpZW1Gb3JtYXRgIHNpbmNlIEFNICYgUE0gYnkgZGVmYXVsdFxuICB2YXIgZmllbGREYXRlVGltZUZvcm1hdCA9IGxvY2FsZS5maWVsZERhdGVUaW1lRm9ybWF0LFxuICAgIGZpZWxkRGF0ZUZvcm1hdCA9IGxvY2FsZS5maWVsZERhdGVGb3JtYXQsXG4gICAgZmllbGRUaW1lRm9ybWF0ID0gbG9jYWxlLmZpZWxkVGltZUZvcm1hdCxcbiAgICBmaWVsZE1vbnRoRm9ybWF0ID0gbG9jYWxlLmZpZWxkTW9udGhGb3JtYXQsXG4gICAgZmllbGRZZWFyRm9ybWF0ID0gbG9jYWxlLmZpZWxkWWVhckZvcm1hdCxcbiAgICBmaWVsZFdlZWtGb3JtYXQgPSBsb2NhbGUuZmllbGRXZWVrRm9ybWF0LFxuICAgIGZpZWxkUXVhcnRlckZvcm1hdCA9IGxvY2FsZS5maWVsZFF1YXJ0ZXJGb3JtYXQsXG4gICAgeWVhckZvcm1hdCA9IGxvY2FsZS55ZWFyRm9ybWF0LFxuICAgIGNlbGxZZWFyRm9ybWF0ID0gbG9jYWxlLmNlbGxZZWFyRm9ybWF0LFxuICAgIGNlbGxRdWFydGVyRm9ybWF0ID0gbG9jYWxlLmNlbGxRdWFydGVyRm9ybWF0LFxuICAgIGRheUZvcm1hdCA9IGxvY2FsZS5kYXlGb3JtYXQsXG4gICAgY2VsbERhdGVGb3JtYXQgPSBsb2NhbGUuY2VsbERhdGVGb3JtYXQ7XG4gIHZhciB0aW1lRm9ybWF0ID0gZmlsbFRpbWVGb3JtYXQoc2hvd0hvdXIsIHNob3dNaW51dGUsIHNob3dTZWNvbmQsIHNob3dNaWxsaXNlY29uZCwgdXNlMTJIb3Vycyk7XG4gIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGxvY2FsZSksIHt9LCB7XG4gICAgZmllbGREYXRlVGltZUZvcm1hdDogZmllbGREYXRlVGltZUZvcm1hdCB8fCBcIllZWVktTU0tREQgXCIuY29uY2F0KHRpbWVGb3JtYXQpLFxuICAgIGZpZWxkRGF0ZUZvcm1hdDogZmllbGREYXRlRm9ybWF0IHx8ICdZWVlZLU1NLUREJyxcbiAgICBmaWVsZFRpbWVGb3JtYXQ6IGZpZWxkVGltZUZvcm1hdCB8fCB0aW1lRm9ybWF0LFxuICAgIGZpZWxkTW9udGhGb3JtYXQ6IGZpZWxkTW9udGhGb3JtYXQgfHwgJ1lZWVktTU0nLFxuICAgIGZpZWxkWWVhckZvcm1hdDogZmllbGRZZWFyRm9ybWF0IHx8ICdZWVlZJyxcbiAgICBmaWVsZFdlZWtGb3JtYXQ6IGZpZWxkV2Vla0Zvcm1hdCB8fCAnZ2dnZy13bycsXG4gICAgZmllbGRRdWFydGVyRm9ybWF0OiBmaWVsZFF1YXJ0ZXJGb3JtYXQgfHwgJ1lZWVktW1FdUScsXG4gICAgeWVhckZvcm1hdDogeWVhckZvcm1hdCB8fCAnWVlZWScsXG4gICAgY2VsbFllYXJGb3JtYXQ6IGNlbGxZZWFyRm9ybWF0IHx8ICdZWVlZJyxcbiAgICBjZWxsUXVhcnRlckZvcm1hdDogY2VsbFF1YXJ0ZXJGb3JtYXQgfHwgJ1tRXVEnLFxuICAgIGNlbGxEYXRlRm9ybWF0OiBjZWxsRGF0ZUZvcm1hdCB8fCBkYXlGb3JtYXQgfHwgJ0QnXG4gIH0pO1xufVxuXG4vKipcbiAqIEZpbGwgbG9jYWxlIGZvcm1hdCBhcyBzdGFydCB1cFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VMb2NhbGUobG9jYWxlLCBzaG93UHJvcHMpIHtcbiAgdmFyIHNob3dIb3VyID0gc2hvd1Byb3BzLnNob3dIb3VyLFxuICAgIHNob3dNaW51dGUgPSBzaG93UHJvcHMuc2hvd01pbnV0ZSxcbiAgICBzaG93U2Vjb25kID0gc2hvd1Byb3BzLnNob3dTZWNvbmQsXG4gICAgc2hvd01pbGxpc2Vjb25kID0gc2hvd1Byb3BzLnNob3dNaWxsaXNlY29uZCxcbiAgICB1c2UxMkhvdXJzID0gc2hvd1Byb3BzLnVzZTEySG91cnM7XG4gIHJldHVybiBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmlsbExvY2FsZShsb2NhbGUsIHNob3dIb3VyLCBzaG93TWludXRlLCBzaG93U2Vjb25kLCBzaG93TWlsbGlzZWNvbmQsIHVzZTEySG91cnMpO1xuICB9LCBbbG9jYWxlLCBzaG93SG91ciwgc2hvd01pbnV0ZSwgc2hvd1NlY29uZCwgc2hvd01pbGxpc2Vjb25kLCB1c2UxMkhvdXJzXSk7XG59IiwiaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbi8qKlxuICogU3luYyB2YWx1ZSB3aXRoIHN0YXRlLlxuICogVGhpcyBzaG91bGQgb25seSB1c2VkIGZvciBpbnRlcm5hbCB3aGljaCBub3QgYWZmZWN0IG91dHNpZGUgY2FsY3VsYXRpb24uXG4gKiBTaW5jZSBpdCdzIG5vdCBzYWZlIGZvciBzdXNwZW5zZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlU3luY1N0YXRlKGRlZmF1bHRWYWx1ZSwgY29udHJvbGxlZFZhbHVlKSB7XG4gIHZhciB2YWx1ZVJlZiA9IFJlYWN0LnVzZVJlZihkZWZhdWx0VmFsdWUpO1xuICB2YXIgX1JlYWN0JHVzZVN0YXRlID0gUmVhY3QudXNlU3RhdGUoe30pLFxuICAgIF9SZWFjdCR1c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfUmVhY3QkdXNlU3RhdGUsIDIpLFxuICAgIGZvcmNlVXBkYXRlID0gX1JlYWN0JHVzZVN0YXRlMlsxXTtcbiAgdmFyIGdldHRlciA9IGZ1bmN0aW9uIGdldHRlcih1c2VDb250cm9sbGVkVmFsdWVGaXJzdCkge1xuICAgIHJldHVybiB1c2VDb250cm9sbGVkVmFsdWVGaXJzdCAmJiBjb250cm9sbGVkVmFsdWUgIT09IHVuZGVmaW5lZCA/IGNvbnRyb2xsZWRWYWx1ZSA6IHZhbHVlUmVmLmN1cnJlbnQ7XG4gIH07XG4gIHZhciBzZXR0ZXIgPSBmdW5jdGlvbiBzZXR0ZXIobmV4dFZhbHVlKSB7XG4gICAgdmFsdWVSZWYuY3VycmVudCA9IG5leHRWYWx1ZTtcbiAgICBmb3JjZVVwZGF0ZSh7fSk7XG4gIH07XG4gIHJldHVybiBbZ2V0dGVyLCBzZXR0ZXIsIGdldHRlcih0cnVlKV07XG59IiwiaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFNwcmVhZDJcIjtcbmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheVwiO1xuaW1wb3J0IF90eXBlb2YgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZlwiO1xuaW1wb3J0IHsgZ2V0Um93Rm9ybWF0LCBwaWNrUHJvcHMsIHRvQXJyYXkgfSBmcm9tIFwiLi4vdXRpbHMvbWlzY1V0aWxcIjtcbmltcG9ydCB7IGZpbGxUaW1lRm9ybWF0IH0gZnJvbSBcIi4vdXNlTG9jYWxlXCI7XG5mdW5jdGlvbiBjaGVja1Nob3coZm9ybWF0LCBrZXl3b3Jkcywgc2hvdykge1xuICByZXR1cm4gc2hvdyAhPT0gbnVsbCAmJiBzaG93ICE9PSB2b2lkIDAgPyBzaG93IDoga2V5d29yZHMuc29tZShmdW5jdGlvbiAoa2V5d29yZCkge1xuICAgIHJldHVybiBmb3JtYXQuaW5jbHVkZXMoa2V5d29yZCk7XG4gIH0pO1xufVxudmFyIHNob3dUaW1lS2V5cyA9IFtcbi8vICdmb3JtYXQnLFxuJ3Nob3dOb3cnLCAnc2hvd0hvdXInLCAnc2hvd01pbnV0ZScsICdzaG93U2Vjb25kJywgJ3Nob3dNaWxsaXNlY29uZCcsICd1c2UxMkhvdXJzJywgJ2hvdXJTdGVwJywgJ21pbnV0ZVN0ZXAnLCAnc2Vjb25kU3RlcCcsICdtaWxsaXNlY29uZFN0ZXAnLCAnaGlkZURpc2FibGVkT3B0aW9ucycsICdkZWZhdWx0VmFsdWUnLCAnZGlzYWJsZWRIb3VycycsICdkaXNhYmxlZE1pbnV0ZXMnLCAnZGlzYWJsZWRTZWNvbmRzJywgJ2Rpc2FibGVkTWlsbGlzZWNvbmRzJywgJ2Rpc2FibGVkVGltZScsICdjaGFuZ2VPblNjcm9sbCcsICdkZWZhdWx0T3BlblZhbHVlJ107XG5cbi8qKlxuICogR2V0IFNoYXJlZFRpbWVQcm9wcyBmcm9tIHByb3BzLlxuICovXG5mdW5jdGlvbiBwaWNrVGltZVByb3BzKHByb3BzKSB7XG4gIHZhciB0aW1lUHJvcHMgPSBwaWNrUHJvcHMocHJvcHMsIHNob3dUaW1lS2V5cyk7XG4gIHZhciBmb3JtYXQgPSBwcm9wcy5mb3JtYXQsXG4gICAgcGlja2VyID0gcHJvcHMucGlja2VyO1xuICB2YXIgcHJvcEZvcm1hdCA9IG51bGw7XG4gIGlmIChmb3JtYXQpIHtcbiAgICBwcm9wRm9ybWF0ID0gZm9ybWF0O1xuICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BGb3JtYXQpKSB7XG4gICAgICBwcm9wRm9ybWF0ID0gcHJvcEZvcm1hdFswXTtcbiAgICB9XG4gICAgcHJvcEZvcm1hdCA9IF90eXBlb2YocHJvcEZvcm1hdCkgPT09ICdvYmplY3QnID8gcHJvcEZvcm1hdC5mb3JtYXQgOiBwcm9wRm9ybWF0O1xuICB9XG4gIGlmIChwaWNrZXIgPT09ICd0aW1lJykge1xuICAgIHRpbWVQcm9wcy5mb3JtYXQgPSBwcm9wRm9ybWF0O1xuICB9XG4gIHJldHVybiBbdGltZVByb3BzLCBwcm9wRm9ybWF0XTtcbn1cbmZ1bmN0aW9uIGlzU3RyaW5nRm9ybWF0KGZvcm1hdCkge1xuICByZXR1cm4gZm9ybWF0ICYmIHR5cGVvZiBmb3JtYXQgPT09ICdzdHJpbmcnO1xufVxuLyoqIENoZWNrIGlmIGFsbCB0aGUgc2hvd1hYWCBpcyBgdW5kZWZpbmVkYCAqL1xuZnVuY3Rpb24gZXhpc3RTaG93Q29uZmlnKHNob3dIb3VyLCBzaG93TWludXRlLCBzaG93U2Vjb25kLCBzaG93TWlsbGlzZWNvbmQpIHtcbiAgcmV0dXJuIFtzaG93SG91ciwgc2hvd01pbnV0ZSwgc2hvd1NlY29uZCwgc2hvd01pbGxpc2Vjb25kXS5zb21lKGZ1bmN0aW9uIChzaG93KSB7XG4gICAgcmV0dXJuIHNob3cgIT09IHVuZGVmaW5lZDtcbiAgfSk7XG59XG5cbi8qKiBGaWxsIHRoZSBzaG93WFhYIGlmIG5lZWRlZCAqL1xuZnVuY3Rpb24gZmlsbFNob3dDb25maWcoaGFzU2hvd0NvbmZpZywgc2hvd0hvdXIsIHNob3dNaW51dGUsIHNob3dTZWNvbmQsIHNob3dNaWxsaXNlY29uZCkge1xuICB2YXIgcGFyc2VkU2hvd0hvdXIgPSBzaG93SG91cjtcbiAgdmFyIHBhcnNlZFNob3dNaW51dGUgPSBzaG93TWludXRlO1xuICB2YXIgcGFyc2VkU2hvd1NlY29uZCA9IHNob3dTZWNvbmQ7XG4gIGlmICghaGFzU2hvd0NvbmZpZyAmJiAhcGFyc2VkU2hvd0hvdXIgJiYgIXBhcnNlZFNob3dNaW51dGUgJiYgIXBhcnNlZFNob3dTZWNvbmQgJiYgIXNob3dNaWxsaXNlY29uZCkge1xuICAgIHBhcnNlZFNob3dIb3VyID0gdHJ1ZTtcbiAgICBwYXJzZWRTaG93TWludXRlID0gdHJ1ZTtcbiAgICBwYXJzZWRTaG93U2Vjb25kID0gdHJ1ZTtcbiAgfSBlbHNlIGlmIChoYXNTaG93Q29uZmlnKSB7XG4gICAgdmFyIF9wYXJzZWRTaG93SG91ciwgX3BhcnNlZFNob3dNaW51dGUsIF9wYXJzZWRTaG93U2Vjb25kO1xuICAgIHZhciBleGlzdEZhbHNlID0gW3BhcnNlZFNob3dIb3VyLCBwYXJzZWRTaG93TWludXRlLCBwYXJzZWRTaG93U2Vjb25kXS5zb21lKGZ1bmN0aW9uIChzaG93KSB7XG4gICAgICByZXR1cm4gc2hvdyA9PT0gZmFsc2U7XG4gICAgfSk7XG4gICAgdmFyIGV4aXN0VHJ1ZSA9IFtwYXJzZWRTaG93SG91ciwgcGFyc2VkU2hvd01pbnV0ZSwgcGFyc2VkU2hvd1NlY29uZF0uc29tZShmdW5jdGlvbiAoc2hvdykge1xuICAgICAgcmV0dXJuIHNob3cgPT09IHRydWU7XG4gICAgfSk7XG4gICAgdmFyIGRlZmF1bHRTaG93ID0gZXhpc3RGYWxzZSA/IHRydWUgOiAhZXhpc3RUcnVlO1xuICAgIHBhcnNlZFNob3dIb3VyID0gKF9wYXJzZWRTaG93SG91ciA9IHBhcnNlZFNob3dIb3VyKSAhPT0gbnVsbCAmJiBfcGFyc2VkU2hvd0hvdXIgIT09IHZvaWQgMCA/IF9wYXJzZWRTaG93SG91ciA6IGRlZmF1bHRTaG93O1xuICAgIHBhcnNlZFNob3dNaW51dGUgPSAoX3BhcnNlZFNob3dNaW51dGUgPSBwYXJzZWRTaG93TWludXRlKSAhPT0gbnVsbCAmJiBfcGFyc2VkU2hvd01pbnV0ZSAhPT0gdm9pZCAwID8gX3BhcnNlZFNob3dNaW51dGUgOiBkZWZhdWx0U2hvdztcbiAgICBwYXJzZWRTaG93U2Vjb25kID0gKF9wYXJzZWRTaG93U2Vjb25kID0gcGFyc2VkU2hvd1NlY29uZCkgIT09IG51bGwgJiYgX3BhcnNlZFNob3dTZWNvbmQgIT09IHZvaWQgMCA/IF9wYXJzZWRTaG93U2Vjb25kIDogZGVmYXVsdFNob3c7XG4gIH1cbiAgcmV0dXJuIFtwYXJzZWRTaG93SG91ciwgcGFyc2VkU2hvd01pbnV0ZSwgcGFyc2VkU2hvd1NlY29uZCwgc2hvd01pbGxpc2Vjb25kXTtcbn1cblxuLyoqXG4gKiBHZXQgYHNob3dIb3VyYCwgYHNob3dNaW51dGVgLCBgc2hvd1NlY29uZGAgb3Igb3RoZXIgZnJvbSB0aGUgcHJvcHMuXG4gKiBUaGlzIGlzIHB1cmUgZnVuY3Rpb24sIHdpbGwgbm90IGdldCBgc2hvd1hYWGAgZnJvbSB0aGUgYGZvcm1hdGAgcHJvcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRpbWVQcm9wcyhjb21wb25lbnRQcm9wcykge1xuICB2YXIgc2hvd1RpbWUgPSBjb21wb25lbnRQcm9wcy5zaG93VGltZTtcbiAgdmFyIF9waWNrVGltZVByb3BzID0gcGlja1RpbWVQcm9wcyhjb21wb25lbnRQcm9wcyksXG4gICAgX3BpY2tUaW1lUHJvcHMyID0gX3NsaWNlZFRvQXJyYXkoX3BpY2tUaW1lUHJvcHMsIDIpLFxuICAgIHBpY2tlZFByb3BzID0gX3BpY2tUaW1lUHJvcHMyWzBdLFxuICAgIHByb3BGb3JtYXQgPSBfcGlja1RpbWVQcm9wczJbMV07XG4gIHZhciBzaG93VGltZUNvbmZpZyA9IHNob3dUaW1lICYmIF90eXBlb2Yoc2hvd1RpbWUpID09PSAnb2JqZWN0JyA/IHNob3dUaW1lIDoge307XG4gIHZhciB0aW1lQ29uZmlnID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHtcbiAgICBkZWZhdWx0T3BlblZhbHVlOiBzaG93VGltZUNvbmZpZy5kZWZhdWx0T3BlblZhbHVlIHx8IHNob3dUaW1lQ29uZmlnLmRlZmF1bHRWYWx1ZVxuICB9LCBwaWNrZWRQcm9wcyksIHNob3dUaW1lQ29uZmlnKTtcbiAgdmFyIHNob3dNaWxsaXNlY29uZCA9IHRpbWVDb25maWcuc2hvd01pbGxpc2Vjb25kO1xuICB2YXIgc2hvd0hvdXIgPSB0aW1lQ29uZmlnLnNob3dIb3VyLFxuICAgIHNob3dNaW51dGUgPSB0aW1lQ29uZmlnLnNob3dNaW51dGUsXG4gICAgc2hvd1NlY29uZCA9IHRpbWVDb25maWcuc2hvd1NlY29uZDtcbiAgdmFyIGhhc1Nob3dDb25maWcgPSBleGlzdFNob3dDb25maWcoc2hvd0hvdXIsIHNob3dNaW51dGUsIHNob3dTZWNvbmQsIHNob3dNaWxsaXNlY29uZCk7XG4gIHZhciBfZmlsbFNob3dDb25maWcgPSBmaWxsU2hvd0NvbmZpZyhoYXNTaG93Q29uZmlnLCBzaG93SG91ciwgc2hvd01pbnV0ZSwgc2hvd1NlY29uZCwgc2hvd01pbGxpc2Vjb25kKTtcbiAgdmFyIF9maWxsU2hvd0NvbmZpZzIgPSBfc2xpY2VkVG9BcnJheShfZmlsbFNob3dDb25maWcsIDMpO1xuICBzaG93SG91ciA9IF9maWxsU2hvd0NvbmZpZzJbMF07XG4gIHNob3dNaW51dGUgPSBfZmlsbFNob3dDb25maWcyWzFdO1xuICBzaG93U2Vjb25kID0gX2ZpbGxTaG93Q29uZmlnMlsyXTtcbiAgcmV0dXJuIFt0aW1lQ29uZmlnLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHRpbWVDb25maWcpLCB7fSwge1xuICAgIHNob3dIb3VyOiBzaG93SG91cixcbiAgICBzaG93TWludXRlOiBzaG93TWludXRlLFxuICAgIHNob3dTZWNvbmQ6IHNob3dTZWNvbmQsXG4gICAgc2hvd01pbGxpc2Vjb25kOiBzaG93TWlsbGlzZWNvbmRcbiAgfSksIHRpbWVDb25maWcuZm9ybWF0LCBwcm9wRm9ybWF0XTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmaWxsU2hvd1RpbWVDb25maWcocGlja2VyLCBzaG93VGltZUZvcm1hdCwgcHJvcEZvcm1hdCwgdGltZUNvbmZpZywgbG9jYWxlKSB7XG4gIHZhciBpc1RpbWVQaWNrZXIgPSBwaWNrZXIgPT09ICd0aW1lJztcbiAgaWYgKHBpY2tlciA9PT0gJ2RhdGV0aW1lJyB8fCBpc1RpbWVQaWNrZXIpIHtcbiAgICB2YXIgcGlja2VkUHJvcHMgPSB0aW1lQ29uZmlnO1xuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PSBCYXNlRm9ybWF0ID09PT09PT09PT09PT09PT09PT09PT1cbiAgICB2YXIgZGVmYXVsdExvY2FsZUZvcm1hdCA9IGdldFJvd0Zvcm1hdChwaWNrZXIsIGxvY2FsZSwgbnVsbCk7XG4gICAgdmFyIGJhc2VsaW5lRm9ybWF0ID0gZGVmYXVsdExvY2FsZUZvcm1hdDtcbiAgICB2YXIgZm9ybWF0TGlzdCA9IFtzaG93VGltZUZvcm1hdCwgcHJvcEZvcm1hdF07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb3JtYXRMaXN0Lmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICB2YXIgZm9ybWF0ID0gdG9BcnJheShmb3JtYXRMaXN0W2ldKVswXTtcbiAgICAgIGlmIChpc1N0cmluZ0Zvcm1hdChmb3JtYXQpKSB7XG4gICAgICAgIGJhc2VsaW5lRm9ybWF0ID0gZm9ybWF0O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IFNob3cgPT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIHZhciBzaG93SG91ciA9IHBpY2tlZFByb3BzLnNob3dIb3VyLFxuICAgICAgc2hvd01pbnV0ZSA9IHBpY2tlZFByb3BzLnNob3dNaW51dGUsXG4gICAgICBzaG93U2Vjb25kID0gcGlja2VkUHJvcHMuc2hvd1NlY29uZCxcbiAgICAgIHNob3dNaWxsaXNlY29uZCA9IHBpY2tlZFByb3BzLnNob3dNaWxsaXNlY29uZDtcbiAgICB2YXIgdXNlMTJIb3VycyA9IHBpY2tlZFByb3BzLnVzZTEySG91cnM7XG4gICAgdmFyIHNob3dNZXJpZGllbSA9IGNoZWNrU2hvdyhiYXNlbGluZUZvcm1hdCwgWydhJywgJ0EnLCAnTFQnLCAnTExMJywgJ0xUUyddLCB1c2UxMkhvdXJzKTtcbiAgICB2YXIgaGFzU2hvd0NvbmZpZyA9IGV4aXN0U2hvd0NvbmZpZyhzaG93SG91ciwgc2hvd01pbnV0ZSwgc2hvd1NlY29uZCwgc2hvd01pbGxpc2Vjb25kKTtcblxuICAgIC8vIEZpbGwgd2l0aCBmb3JtYXQsIGlmIG5lZWRlZFxuICAgIGlmICghaGFzU2hvd0NvbmZpZykge1xuICAgICAgc2hvd0hvdXIgPSBjaGVja1Nob3coYmFzZWxpbmVGb3JtYXQsIFsnSCcsICdoJywgJ2snLCAnTFQnLCAnTExMJ10pO1xuICAgICAgc2hvd01pbnV0ZSA9IGNoZWNrU2hvdyhiYXNlbGluZUZvcm1hdCwgWydtJywgJ0xUJywgJ0xMTCddKTtcbiAgICAgIHNob3dTZWNvbmQgPSBjaGVja1Nob3coYmFzZWxpbmVGb3JtYXQsIFsncycsICdMVFMnXSk7XG4gICAgICBzaG93TWlsbGlzZWNvbmQgPSBjaGVja1Nob3coYmFzZWxpbmVGb3JtYXQsIFsnU1NTJ10pO1xuICAgIH1cblxuICAgIC8vIEZhbGxiYWNrIGlmIGFsbCBjYW4gbm90IHNlZVxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBGb3JtYXQgPT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgdmFyIF9maWxsU2hvd0NvbmZpZzMgPSBmaWxsU2hvd0NvbmZpZyhoYXNTaG93Q29uZmlnLCBzaG93SG91ciwgc2hvd01pbnV0ZSwgc2hvd1NlY29uZCwgc2hvd01pbGxpc2Vjb25kKTtcbiAgICB2YXIgX2ZpbGxTaG93Q29uZmlnNCA9IF9zbGljZWRUb0FycmF5KF9maWxsU2hvd0NvbmZpZzMsIDMpO1xuICAgIHNob3dIb3VyID0gX2ZpbGxTaG93Q29uZmlnNFswXTtcbiAgICBzaG93TWludXRlID0gX2ZpbGxTaG93Q29uZmlnNFsxXTtcbiAgICBzaG93U2Vjb25kID0gX2ZpbGxTaG93Q29uZmlnNFsyXTtcbiAgICB2YXIgdGltZUZvcm1hdCA9IHNob3dUaW1lRm9ybWF0IHx8IGZpbGxUaW1lRm9ybWF0KHNob3dIb3VyLCBzaG93TWludXRlLCBzaG93U2Vjb25kLCBzaG93TWlsbGlzZWNvbmQsIHNob3dNZXJpZGllbSk7XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gUHJvcHMgPT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHBpY2tlZFByb3BzKSwge30sIHtcbiAgICAgIC8vIEZvcm1hdFxuICAgICAgZm9ybWF0OiB0aW1lRm9ybWF0LFxuICAgICAgLy8gU2hvdyBDb25maWdcbiAgICAgIHNob3dIb3VyOiBzaG93SG91cixcbiAgICAgIHNob3dNaW51dGU6IHNob3dNaW51dGUsXG4gICAgICBzaG93U2Vjb25kOiBzaG93U2Vjb25kLFxuICAgICAgc2hvd01pbGxpc2Vjb25kOiBzaG93TWlsbGlzZWNvbmQsXG4gICAgICB1c2UxMkhvdXJzOiBzaG93TWVyaWRpZW1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn0iLCJpbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMlwiO1xuaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zbGljZWRUb0FycmF5XCI7XG5pbXBvcnQgeyB3YXJuaW5nIH0gZnJvbSAncmMtdXRpbCc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBmaW5kVmFsaWRhdGVUaW1lIH0gZnJvbSBcIi4uL1BpY2tlclBhbmVsL1RpbWVQYW5lbC9UaW1lUGFuZWxCb2R5L3V0aWxcIjtcbmltcG9ydCB7IGxlZnRQYWQgfSBmcm9tIFwiLi4vdXRpbHMvbWlzY1V0aWxcIjtcbmZ1bmN0aW9uIGVtcHR5RGlzYWJsZWQoKSB7XG4gIHJldHVybiBbXTtcbn1cbmZ1bmN0aW9uIGdlbmVyYXRlVW5pdHMoc3RhcnQsIGVuZCkge1xuICB2YXIgc3RlcCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogMTtcbiAgdmFyIGhpZGVEaXNhYmxlZE9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IGZhbHNlO1xuICB2YXIgZGlzYWJsZWRVbml0cyA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDogW107XG4gIHZhciBwYWQgPSBhcmd1bWVudHMubGVuZ3RoID4gNSAmJiBhcmd1bWVudHNbNV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s1XSA6IDI7XG4gIHZhciB1bml0cyA9IFtdO1xuICB2YXIgaW50ZWdlclN0ZXAgPSBzdGVwID49IDEgPyBzdGVwIHwgMCA6IDE7XG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8PSBlbmQ7IGkgKz0gaW50ZWdlclN0ZXApIHtcbiAgICB2YXIgZGlzYWJsZWQgPSBkaXNhYmxlZFVuaXRzLmluY2x1ZGVzKGkpO1xuICAgIGlmICghZGlzYWJsZWQgfHwgIWhpZGVEaXNhYmxlZE9wdGlvbnMpIHtcbiAgICAgIHVuaXRzLnB1c2goe1xuICAgICAgICBsYWJlbDogbGVmdFBhZChpLCBwYWQpLFxuICAgICAgICB2YWx1ZTogaSxcbiAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuaXRzO1xufVxuXG4vKipcbiAqIFBhcnNlIHRpbWUgcHJvcHMgdG8gZ2V0IHV0aWwgaW5mb1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VUaW1lSW5mbyhnZW5lcmF0ZUNvbmZpZykge1xuICB2YXIgcHJvcHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICB2YXIgZGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICB2YXIgX3JlZiA9IHByb3BzIHx8IHt9LFxuICAgIHVzZTEySG91cnMgPSBfcmVmLnVzZTEySG91cnMsXG4gICAgX3JlZiRob3VyU3RlcCA9IF9yZWYuaG91clN0ZXAsXG4gICAgaG91clN0ZXAgPSBfcmVmJGhvdXJTdGVwID09PSB2b2lkIDAgPyAxIDogX3JlZiRob3VyU3RlcCxcbiAgICBfcmVmJG1pbnV0ZVN0ZXAgPSBfcmVmLm1pbnV0ZVN0ZXAsXG4gICAgbWludXRlU3RlcCA9IF9yZWYkbWludXRlU3RlcCA9PT0gdm9pZCAwID8gMSA6IF9yZWYkbWludXRlU3RlcCxcbiAgICBfcmVmJHNlY29uZFN0ZXAgPSBfcmVmLnNlY29uZFN0ZXAsXG4gICAgc2Vjb25kU3RlcCA9IF9yZWYkc2Vjb25kU3RlcCA9PT0gdm9pZCAwID8gMSA6IF9yZWYkc2Vjb25kU3RlcCxcbiAgICBfcmVmJG1pbGxpc2Vjb25kU3RlcCA9IF9yZWYubWlsbGlzZWNvbmRTdGVwLFxuICAgIG1pbGxpc2Vjb25kU3RlcCA9IF9yZWYkbWlsbGlzZWNvbmRTdGVwID09PSB2b2lkIDAgPyAxMDAgOiBfcmVmJG1pbGxpc2Vjb25kU3RlcCxcbiAgICBoaWRlRGlzYWJsZWRPcHRpb25zID0gX3JlZi5oaWRlRGlzYWJsZWRPcHRpb25zLFxuICAgIGRpc2FibGVkVGltZSA9IF9yZWYuZGlzYWJsZWRUaW1lLFxuICAgIGRpc2FibGVkSG91cnMgPSBfcmVmLmRpc2FibGVkSG91cnMsXG4gICAgZGlzYWJsZWRNaW51dGVzID0gX3JlZi5kaXNhYmxlZE1pbnV0ZXMsXG4gICAgZGlzYWJsZWRTZWNvbmRzID0gX3JlZi5kaXNhYmxlZFNlY29uZHM7XG4gIHZhciBtZXJnZWREYXRlID0gUmVhY3QudXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGRhdGUgfHwgZ2VuZXJhdGVDb25maWcuZ2V0Tm93KCk7XG4gIH0sIFtkYXRlLCBnZW5lcmF0ZUNvbmZpZ10pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBXYXJuaW5ncyA9PT09PT09PT09PT09PT09PT09PT09PT1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB2YXIgaXNIb3VyU3RlcFZhbGlkID0gMjQgJSBob3VyU3RlcCA9PT0gMDtcbiAgICB2YXIgaXNNaW51dGVTdGVwVmFsaWQgPSA2MCAlIG1pbnV0ZVN0ZXAgPT09IDA7XG4gICAgdmFyIGlzU2Vjb25kU3RlcFZhbGlkID0gNjAgJSBzZWNvbmRTdGVwID09PSAwO1xuICAgIHdhcm5pbmcoaXNIb3VyU3RlcFZhbGlkLCBcImBob3VyU3RlcGAgXCIuY29uY2F0KGhvdXJTdGVwLCBcIiBpcyBpbnZhbGlkLiBJdCBzaG91bGQgYmUgYSBmYWN0b3Igb2YgMjQuXCIpKTtcbiAgICB3YXJuaW5nKGlzTWludXRlU3RlcFZhbGlkLCBcImBtaW51dGVTdGVwYCBcIi5jb25jYXQobWludXRlU3RlcCwgXCIgaXMgaW52YWxpZC4gSXQgc2hvdWxkIGJlIGEgZmFjdG9yIG9mIDYwLlwiKSk7XG4gICAgd2FybmluZyhpc1NlY29uZFN0ZXBWYWxpZCwgXCJgc2Vjb25kU3RlcGAgXCIuY29uY2F0KHNlY29uZFN0ZXAsIFwiIGlzIGludmFsaWQuIEl0IHNob3VsZCBiZSBhIGZhY3RvciBvZiA2MC5cIikpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IERpc2FibGVkID09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgZ2V0RGlzYWJsZWRUaW1lcyA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uICh0YXJnZXREYXRlKSB7XG4gICAgdmFyIGRpc2FibGVkQ29uZmlnID0gKGRpc2FibGVkVGltZSA9PT0gbnVsbCB8fCBkaXNhYmxlZFRpbWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRpc2FibGVkVGltZSh0YXJnZXREYXRlKSkgfHwge307XG4gICAgcmV0dXJuIFtkaXNhYmxlZENvbmZpZy5kaXNhYmxlZEhvdXJzIHx8IGRpc2FibGVkSG91cnMgfHwgZW1wdHlEaXNhYmxlZCwgZGlzYWJsZWRDb25maWcuZGlzYWJsZWRNaW51dGVzIHx8IGRpc2FibGVkTWludXRlcyB8fCBlbXB0eURpc2FibGVkLCBkaXNhYmxlZENvbmZpZy5kaXNhYmxlZFNlY29uZHMgfHwgZGlzYWJsZWRTZWNvbmRzIHx8IGVtcHR5RGlzYWJsZWQsIGRpc2FibGVkQ29uZmlnLmRpc2FibGVkTWlsbGlzZWNvbmRzIHx8IGVtcHR5RGlzYWJsZWRdO1xuICB9LCBbZGlzYWJsZWRUaW1lLCBkaXNhYmxlZEhvdXJzLCBkaXNhYmxlZE1pbnV0ZXMsIGRpc2FibGVkU2Vjb25kc10pO1xuICB2YXIgX1JlYWN0JHVzZU1lbW8gPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBnZXREaXNhYmxlZFRpbWVzKG1lcmdlZERhdGUpO1xuICAgIH0sIFttZXJnZWREYXRlLCBnZXREaXNhYmxlZFRpbWVzXSksXG4gICAgX1JlYWN0JHVzZU1lbW8yID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZU1lbW8sIDQpLFxuICAgIG1lcmdlZERpc2FibGVkSG91cnMgPSBfUmVhY3QkdXNlTWVtbzJbMF0sXG4gICAgbWVyZ2VkRGlzYWJsZWRNaW51dGVzID0gX1JlYWN0JHVzZU1lbW8yWzFdLFxuICAgIG1lcmdlZERpc2FibGVkU2Vjb25kcyA9IF9SZWFjdCR1c2VNZW1vMlsyXSxcbiAgICBtZXJnZWREaXNhYmxlZE1pbGxpc2Vjb25kcyA9IF9SZWFjdCR1c2VNZW1vMlszXTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IENvbHVtbiA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHZhciBnZXRBbGxVbml0cyA9IFJlYWN0LnVzZUNhbGxiYWNrKGZ1bmN0aW9uIChnZXREaXNhYmxlZEhvdXJzLCBnZXREaXNhYmxlZE1pbnV0ZXMsIGdldERpc2FibGVkU2Vjb25kcywgZ2V0RGlzYWJsZWRNaWxsaXNlY29uZHMpIHtcbiAgICB2YXIgaG91cnMgPSBnZW5lcmF0ZVVuaXRzKDAsIDIzLCBob3VyU3RlcCwgaGlkZURpc2FibGVkT3B0aW9ucywgZ2V0RGlzYWJsZWRIb3VycygpKTtcblxuICAgIC8vIEhvdXJzXG4gICAgdmFyIHJvd0hvdXJVbml0cyA9IHVzZTEySG91cnMgPyBob3Vycy5tYXAoZnVuY3Rpb24gKHVuaXQpIHtcbiAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHVuaXQpLCB7fSwge1xuICAgICAgICBsYWJlbDogbGVmdFBhZCh1bml0LnZhbHVlICUgMTIgfHwgMTIsIDIpXG4gICAgICB9KTtcbiAgICB9KSA6IGhvdXJzO1xuXG4gICAgLy8gTWludXRlc1xuICAgIHZhciBnZXRNaW51dGVVbml0cyA9IGZ1bmN0aW9uIGdldE1pbnV0ZVVuaXRzKG5leHRIb3VyKSB7XG4gICAgICByZXR1cm4gZ2VuZXJhdGVVbml0cygwLCA1OSwgbWludXRlU3RlcCwgaGlkZURpc2FibGVkT3B0aW9ucywgZ2V0RGlzYWJsZWRNaW51dGVzKG5leHRIb3VyKSk7XG4gICAgfTtcblxuICAgIC8vIFNlY29uZHNcbiAgICB2YXIgZ2V0U2Vjb25kVW5pdHMgPSBmdW5jdGlvbiBnZXRTZWNvbmRVbml0cyhuZXh0SG91ciwgbmV4dE1pbnV0ZSkge1xuICAgICAgcmV0dXJuIGdlbmVyYXRlVW5pdHMoMCwgNTksIHNlY29uZFN0ZXAsIGhpZGVEaXNhYmxlZE9wdGlvbnMsIGdldERpc2FibGVkU2Vjb25kcyhuZXh0SG91ciwgbmV4dE1pbnV0ZSkpO1xuICAgIH07XG5cbiAgICAvLyBNaWxsaXNlY29uZHNcbiAgICB2YXIgZ2V0TWlsbGlzZWNvbmRVbml0cyA9IGZ1bmN0aW9uIGdldE1pbGxpc2Vjb25kVW5pdHMobmV4dEhvdXIsIG5leHRNaW51dGUsIG5leHRTZWNvbmQpIHtcbiAgICAgIHJldHVybiBnZW5lcmF0ZVVuaXRzKDAsIDk5OSwgbWlsbGlzZWNvbmRTdGVwLCBoaWRlRGlzYWJsZWRPcHRpb25zLCBnZXREaXNhYmxlZE1pbGxpc2Vjb25kcyhuZXh0SG91ciwgbmV4dE1pbnV0ZSwgbmV4dFNlY29uZCksIDMpO1xuICAgIH07XG4gICAgcmV0dXJuIFtyb3dIb3VyVW5pdHMsIGdldE1pbnV0ZVVuaXRzLCBnZXRTZWNvbmRVbml0cywgZ2V0TWlsbGlzZWNvbmRVbml0c107XG4gIH0sIFtoaWRlRGlzYWJsZWRPcHRpb25zLCBob3VyU3RlcCwgdXNlMTJIb3VycywgbWlsbGlzZWNvbmRTdGVwLCBtaW51dGVTdGVwLCBzZWNvbmRTdGVwXSk7XG4gIHZhciBfUmVhY3QkdXNlTWVtbzMgPSBSZWFjdC51c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBnZXRBbGxVbml0cyhtZXJnZWREaXNhYmxlZEhvdXJzLCBtZXJnZWREaXNhYmxlZE1pbnV0ZXMsIG1lcmdlZERpc2FibGVkU2Vjb25kcywgbWVyZ2VkRGlzYWJsZWRNaWxsaXNlY29uZHMpO1xuICAgIH0sIFtnZXRBbGxVbml0cywgbWVyZ2VkRGlzYWJsZWRIb3VycywgbWVyZ2VkRGlzYWJsZWRNaW51dGVzLCBtZXJnZWREaXNhYmxlZFNlY29uZHMsIG1lcmdlZERpc2FibGVkTWlsbGlzZWNvbmRzXSksXG4gICAgX1JlYWN0JHVzZU1lbW80ID0gX3NsaWNlZFRvQXJyYXkoX1JlYWN0JHVzZU1lbW8zLCA0KSxcbiAgICByb3dIb3VyVW5pdHMgPSBfUmVhY3QkdXNlTWVtbzRbMF0sXG4gICAgZ2V0TWludXRlVW5pdHMgPSBfUmVhY3QkdXNlTWVtbzRbMV0sXG4gICAgZ2V0U2Vjb25kVW5pdHMgPSBfUmVhY3QkdXNlTWVtbzRbMl0sXG4gICAgZ2V0TWlsbGlzZWNvbmRVbml0cyA9IF9SZWFjdCR1c2VNZW1vNFszXTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gVmFsaWRhdGUgPT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8qKlxuICAgKiBHZXQgdmFsaWRhdGUgdGltZSB3aXRoIGBkaXNhYmxlZFRpbWVgLCBgY2VydGFpbkRhdGVgIHRvIHNwZWNpZmljIHRoZSBkYXRlIG5lZWQgdG8gY2hlY2tcbiAgICovXG4gIHZhciBnZXRWYWxpZFRpbWUgPSBmdW5jdGlvbiBnZXRWYWxpZFRpbWUobmV4dFRpbWUsIGNlcnRhaW5EYXRlKSB7XG4gICAgdmFyIGdldENoZWNrSG91clVuaXRzID0gZnVuY3Rpb24gZ2V0Q2hlY2tIb3VyVW5pdHMoKSB7XG4gICAgICByZXR1cm4gcm93SG91clVuaXRzO1xuICAgIH07XG4gICAgdmFyIGdldENoZWNrTWludXRlVW5pdHMgPSBnZXRNaW51dGVVbml0cztcbiAgICB2YXIgZ2V0Q2hlY2tTZWNvbmRVbml0cyA9IGdldFNlY29uZFVuaXRzO1xuICAgIHZhciBnZXRDaGVja01pbGxpc2Vjb25kVW5pdHMgPSBnZXRNaWxsaXNlY29uZFVuaXRzO1xuICAgIGlmIChjZXJ0YWluRGF0ZSkge1xuICAgICAgdmFyIF9nZXREaXNhYmxlZFRpbWVzID0gZ2V0RGlzYWJsZWRUaW1lcyhjZXJ0YWluRGF0ZSksXG4gICAgICAgIF9nZXREaXNhYmxlZFRpbWVzMiA9IF9zbGljZWRUb0FycmF5KF9nZXREaXNhYmxlZFRpbWVzLCA0KSxcbiAgICAgICAgdGFyZ2V0RGlzYWJsZWRIb3VycyA9IF9nZXREaXNhYmxlZFRpbWVzMlswXSxcbiAgICAgICAgdGFyZ2V0RGlzYWJsZWRNaW51dGVzID0gX2dldERpc2FibGVkVGltZXMyWzFdLFxuICAgICAgICB0YXJnZXREaXNhYmxlZFNlY29uZHMgPSBfZ2V0RGlzYWJsZWRUaW1lczJbMl0sXG4gICAgICAgIHRhcmdldERpc2FibGVkTWlsbGlzZWNvbmRzID0gX2dldERpc2FibGVkVGltZXMyWzNdO1xuICAgICAgdmFyIF9nZXRBbGxVbml0cyA9IGdldEFsbFVuaXRzKHRhcmdldERpc2FibGVkSG91cnMsIHRhcmdldERpc2FibGVkTWludXRlcywgdGFyZ2V0RGlzYWJsZWRTZWNvbmRzLCB0YXJnZXREaXNhYmxlZE1pbGxpc2Vjb25kcyksXG4gICAgICAgIF9nZXRBbGxVbml0czIgPSBfc2xpY2VkVG9BcnJheShfZ2V0QWxsVW5pdHMsIDQpLFxuICAgICAgICB0YXJnZXRSb3dIb3VyVW5pdHMgPSBfZ2V0QWxsVW5pdHMyWzBdLFxuICAgICAgICB0YXJnZXRHZXRNaW51dGVVbml0cyA9IF9nZXRBbGxVbml0czJbMV0sXG4gICAgICAgIHRhcmdldEdldFNlY29uZFVuaXRzID0gX2dldEFsbFVuaXRzMlsyXSxcbiAgICAgICAgdGFyZ2V0R2V0TWlsbGlzZWNvbmRVbml0cyA9IF9nZXRBbGxVbml0czJbM107XG4gICAgICBnZXRDaGVja0hvdXJVbml0cyA9IGZ1bmN0aW9uIGdldENoZWNrSG91clVuaXRzKCkge1xuICAgICAgICByZXR1cm4gdGFyZ2V0Um93SG91clVuaXRzO1xuICAgICAgfTtcbiAgICAgIGdldENoZWNrTWludXRlVW5pdHMgPSB0YXJnZXRHZXRNaW51dGVVbml0cztcbiAgICAgIGdldENoZWNrU2Vjb25kVW5pdHMgPSB0YXJnZXRHZXRTZWNvbmRVbml0cztcbiAgICAgIGdldENoZWNrTWlsbGlzZWNvbmRVbml0cyA9IHRhcmdldEdldE1pbGxpc2Vjb25kVW5pdHM7XG4gICAgfVxuICAgIHZhciB2YWxpZGF0ZURhdGUgPSBmaW5kVmFsaWRhdGVUaW1lKG5leHRUaW1lLCBnZXRDaGVja0hvdXJVbml0cywgZ2V0Q2hlY2tNaW51dGVVbml0cywgZ2V0Q2hlY2tTZWNvbmRVbml0cywgZ2V0Q2hlY2tNaWxsaXNlY29uZFVuaXRzLCBnZW5lcmF0ZUNvbmZpZyk7XG4gICAgcmV0dXJuIHZhbGlkYXRlRGF0ZTtcbiAgfTtcbiAgcmV0dXJuIFtcbiAgLy8gZ2V0VmFsaWRUaW1lXG4gIGdldFZhbGlkVGltZSxcbiAgLy8gVW5pdHNcbiAgcm93SG91clVuaXRzLCBnZXRNaW51dGVVbml0cywgZ2V0U2Vjb25kVW5pdHMsIGdldE1pbGxpc2Vjb25kVW5pdHNdO1xufSIsImltcG9ydCBfdG9Db25zdW1hYmxlQXJyYXkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5XCI7XG5pbXBvcnQgeyBpc1NhbWUgfSBmcm9tIFwiLi4vdXRpbHMvZGF0ZVV0aWxcIjtcbi8qKlxuICogVG9nZ2xlcyB0aGUgcHJlc2VuY2Ugb2YgYSB2YWx1ZSBpbiBhbiBhcnJheS5cbiAqIElmIHRoZSB2YWx1ZSBleGlzdHMgaW4gdGhlIGFycmF5LCByZW1vdmVkIGl0LlxuICogRWxzZSBhZGQgaXQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVRvZ2dsZURhdGVzKGdlbmVyYXRlQ29uZmlnLCBsb2NhbGUsIHBhbmVsTW9kZSkge1xuICBmdW5jdGlvbiB0b2dnbGVEYXRlcyhsaXN0LCB0YXJnZXQpIHtcbiAgICB2YXIgaW5kZXggPSBsaXN0LmZpbmRJbmRleChmdW5jdGlvbiAoZGF0ZSkge1xuICAgICAgcmV0dXJuIGlzU2FtZShnZW5lcmF0ZUNvbmZpZywgbG9jYWxlLCBkYXRlLCB0YXJnZXQsIHBhbmVsTW9kZSk7XG4gICAgfSk7XG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkobGlzdCksIFt0YXJnZXRdKTtcbiAgICB9XG4gICAgdmFyIHNsaWNlTGlzdCA9IF90b0NvbnN1bWFibGVBcnJheShsaXN0KTtcbiAgICBzbGljZUxpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICByZXR1cm4gc2xpY2VMaXN0O1xuICB9XG4gIHJldHVybiB0b2dnbGVEYXRlcztcbn0iLCIvKipcbiAqIFdoYXQncyBuZXc/XG4gKiAtIENvbW1vblxuICogIC0gW0JyZWFrXSBTdXBwb3J0IHNwZWNpYWwgeWVhciBmb3JtYXQsIGFsbCB0aGUgeWVhciB3aWxsIGZvbGxvdyB0aGUgbG9jYWxlIGNvbmZpZy5cbiAqICAtIEJsdXIgYWxsIG9mIGZpZWxkIHdpbGwgdHJpZ2dlciBgb25DaGFuZ2VgIGlmIHZhbGlkYXRlXG4gKiAgLSBTdXBwb3J0IGBwcmVzZXJ2ZUludmFsaWRPbkJsdXJgIHRvIG5vdCB0byBjbGVhbiBpbnB1dCBpZiBpbnZhbGlkIGFuZCByZW1vdmUgYGNoYW5nZU9uQmx1cmBcbiAqICAtIGBwaWNrZXJWYWx1ZWAgaXMgbm93IGZ1bGwgY29udHJvbGxlZFxuICogICAgLSBgZGVmYXVsdFBpY2tlclZhbHVlYCB3aWxsIHRha2UgZWZmZWN0IG9uIGV2ZXJ5IGZpZWxkIGFjdGl2ZSB3aXRoIHBvcHVwIG9wZW5pbmcuXG4gKiAgLSBbQnJlYWtdIGNsZWFyIGJ1dHRvbiByZXR1cm4gdGhlIGV2ZW50IHdpdGggYG9uQ2xpY2tgXG4gKlxuICogLSBMb2NhbGVcbiAqICAtIFJlbW92ZSBgZGF0ZUZvcm1hdGAgc2luY2UgaXQncyBuZXZlciB1c2VkXG4gKiAgLSBSZW1vdmUgYGRhdGVUaW1lRm9ybWF0YCBzaW5jZSBpdCdzIG5ldmVyIHVzZWRcbiAqXG4gKiAtIFBpY2tlclxuICogIC0gVGltZVBpY2tlciBzdXBwb3J0IGBjaGFuZ2VPblNjcm9sbGBcbiAqICAtIFRpbWVQaWNrZXIgc3VwcG9ydCBgbWlsbGlzZWNvbmRgXG4gKiAgLSBTdXBwb3J0IGNlbGxNZXJpZGllbUZvcm1hdCBmb3IgQU0vUE1cbiAqICAtIEdldCBjb3JyZWN0IGBkaXNhYmxlZEhvdXJzYCB3aGVuIHNldCBgdXNlMTJIb3Vyc2BcbiAqICAtIFN1cHBvcnQgYHNob3dXZWVrYFxuICpcbiAqIC0gUmFuZ2VQaWNrZXJcbiAqICAtIFtCcmVha10gUmFuZ2VQaWNrZXIgaXMgbm93IG5vdCBsaW1pdCB0aGUgcmFuZ2Ugb2YgY2xpY2tlZCBmaWVsZC5cbiAqICAtIFRyaWdnZXIgYG9uQ2FsZW5kYXJDaGFuZ2VgIHdoZW4gdHlwZSBjb3JyZWN0XG4gKiAgLSBbQnJlYWtdIE5vdCBvcmRlciBgdmFsdWVgIGlmIGdpdmVuIGB2YWx1ZWAgaXMgd3Jvbmcgb3JkZXIuXG4gKiAgLSBIb3ZlciBgcHJlc2V0c2Agd2lsbCBzaG93IGRhdGUgaW4gaW5wdXQgZmllbGQuXG4gKiAgLSBbQnJlYWtdIFJhbmdlUGlja2VyIGdvIHRvIGVuZCBmaWVsZCwgYHBpY2tlclZhbHVlYCB3aWxsIGZvbGxvdyB0aGUgc3RhcnQgZmllbGQgaWYgbm90IGNvbnRyb2xsZWQuXG4gKi9cblxuaW1wb3J0IFJhbmdlUGlja2VyIGZyb20gXCIuL1BpY2tlcklucHV0L1JhbmdlUGlja2VyXCI7XG5pbXBvcnQgUGlja2VyIGZyb20gXCIuL1BpY2tlcklucHV0L1NpbmdsZVBpY2tlclwiO1xuaW1wb3J0IFBpY2tlclBhbmVsIGZyb20gXCIuL1BpY2tlclBhbmVsXCI7XG5leHBvcnQgeyBQaWNrZXIsIFJhbmdlUGlja2VyLCBQaWNrZXJQYW5lbCB9O1xuZXhwb3J0IGRlZmF1bHQgUGlja2VyOyIsImV4cG9ydCB2YXIgV0VFS19EQVlfQ09VTlQgPSA3O1xuXG4vKipcbiAqIFdyYXAgdGhlIGNvbXBhcmUgbG9naWMuXG4gKiBUaGlzIHdpbGwgY29tcGFyZSB0aGUgZWFjaCBvZiB2YWx1ZSBpcyBlbXB0eSBmaXJzdC5cbiAqIDEuIEFsbCBpcyBlbXB0eSwgcmV0dXJuIHRydWUuXG4gKiAyLiBPbmUgaXMgZW1wdHksIHJldHVybiBmYWxzZS5cbiAqIDMuIHJldHVybiBjdXN0b21pemUgY29tcGFyZSBsb2dpYy5cbiAqL1xuZnVuY3Rpb24gbnVsbGFibGVDb21wYXJlKHZhbHVlMSwgdmFsdWUyLCBvcmlDb21wYXJlRm4pIHtcbiAgaWYgKCF2YWx1ZTEgJiYgIXZhbHVlMiB8fCB2YWx1ZTEgPT09IHZhbHVlMikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmICghdmFsdWUxIHx8ICF2YWx1ZTIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIG9yaUNvbXBhcmVGbigpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzU2FtZURlY2FkZShnZW5lcmF0ZUNvbmZpZywgZGVjYWRlMSwgZGVjYWRlMikge1xuICByZXR1cm4gbnVsbGFibGVDb21wYXJlKGRlY2FkZTEsIGRlY2FkZTIsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbnVtMSA9IE1hdGguZmxvb3IoZ2VuZXJhdGVDb25maWcuZ2V0WWVhcihkZWNhZGUxKSAvIDEwKTtcbiAgICB2YXIgbnVtMiA9IE1hdGguZmxvb3IoZ2VuZXJhdGVDb25maWcuZ2V0WWVhcihkZWNhZGUyKSAvIDEwKTtcbiAgICByZXR1cm4gbnVtMSA9PT0gbnVtMjtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNTYW1lWWVhcihnZW5lcmF0ZUNvbmZpZywgeWVhcjEsIHllYXIyKSB7XG4gIHJldHVybiBudWxsYWJsZUNvbXBhcmUoeWVhcjEsIHllYXIyLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGdlbmVyYXRlQ29uZmlnLmdldFllYXIoeWVhcjEpID09PSBnZW5lcmF0ZUNvbmZpZy5nZXRZZWFyKHllYXIyKTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0UXVhcnRlcihnZW5lcmF0ZUNvbmZpZywgZGF0ZSkge1xuICB2YXIgcXVvdGEgPSBNYXRoLmZsb29yKGdlbmVyYXRlQ29uZmlnLmdldE1vbnRoKGRhdGUpIC8gMyk7XG4gIHJldHVybiBxdW90YSArIDE7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNTYW1lUXVhcnRlcihnZW5lcmF0ZUNvbmZpZywgcXVhcnRlcjEsIHF1YXJ0ZXIyKSB7XG4gIHJldHVybiBudWxsYWJsZUNvbXBhcmUocXVhcnRlcjEsIHF1YXJ0ZXIyLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGlzU2FtZVllYXIoZ2VuZXJhdGVDb25maWcsIHF1YXJ0ZXIxLCBxdWFydGVyMikgJiYgZ2V0UXVhcnRlcihnZW5lcmF0ZUNvbmZpZywgcXVhcnRlcjEpID09PSBnZXRRdWFydGVyKGdlbmVyYXRlQ29uZmlnLCBxdWFydGVyMik7XG4gIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzU2FtZU1vbnRoKGdlbmVyYXRlQ29uZmlnLCBtb250aDEsIG1vbnRoMikge1xuICByZXR1cm4gbnVsbGFibGVDb21wYXJlKG1vbnRoMSwgbW9udGgyLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGlzU2FtZVllYXIoZ2VuZXJhdGVDb25maWcsIG1vbnRoMSwgbW9udGgyKSAmJiBnZW5lcmF0ZUNvbmZpZy5nZXRNb250aChtb250aDEpID09PSBnZW5lcmF0ZUNvbmZpZy5nZXRNb250aChtb250aDIpO1xuICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1NhbWVEYXRlKGdlbmVyYXRlQ29uZmlnLCBkYXRlMSwgZGF0ZTIpIHtcbiAgcmV0dXJuIG51bGxhYmxlQ29tcGFyZShkYXRlMSwgZGF0ZTIsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gaXNTYW1lWWVhcihnZW5lcmF0ZUNvbmZpZywgZGF0ZTEsIGRhdGUyKSAmJiBpc1NhbWVNb250aChnZW5lcmF0ZUNvbmZpZywgZGF0ZTEsIGRhdGUyKSAmJiBnZW5lcmF0ZUNvbmZpZy5nZXREYXRlKGRhdGUxKSA9PT0gZ2VuZXJhdGVDb25maWcuZ2V0RGF0ZShkYXRlMik7XG4gIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzU2FtZVRpbWUoZ2VuZXJhdGVDb25maWcsIHRpbWUxLCB0aW1lMikge1xuICByZXR1cm4gbnVsbGFibGVDb21wYXJlKHRpbWUxLCB0aW1lMiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBnZW5lcmF0ZUNvbmZpZy5nZXRIb3VyKHRpbWUxKSA9PT0gZ2VuZXJhdGVDb25maWcuZ2V0SG91cih0aW1lMikgJiYgZ2VuZXJhdGVDb25maWcuZ2V0TWludXRlKHRpbWUxKSA9PT0gZ2VuZXJhdGVDb25maWcuZ2V0TWludXRlKHRpbWUyKSAmJiBnZW5lcmF0ZUNvbmZpZy5nZXRTZWNvbmQodGltZTEpID09PSBnZW5lcmF0ZUNvbmZpZy5nZXRTZWNvbmQodGltZTIpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgRGF0ZSBpcyBhbGwgdGhlIHNhbWUgb2YgdGltZXN0YW1wXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NhbWVUaW1lc3RhbXAoZ2VuZXJhdGVDb25maWcsIHRpbWUxLCB0aW1lMikge1xuICByZXR1cm4gbnVsbGFibGVDb21wYXJlKHRpbWUxLCB0aW1lMiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBpc1NhbWVEYXRlKGdlbmVyYXRlQ29uZmlnLCB0aW1lMSwgdGltZTIpICYmIGlzU2FtZVRpbWUoZ2VuZXJhdGVDb25maWcsIHRpbWUxLCB0aW1lMikgJiYgZ2VuZXJhdGVDb25maWcuZ2V0TWlsbGlzZWNvbmQodGltZTEpID09PSBnZW5lcmF0ZUNvbmZpZy5nZXRNaWxsaXNlY29uZCh0aW1lMik7XG4gIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzU2FtZVdlZWsoZ2VuZXJhdGVDb25maWcsIGxvY2FsZSwgZGF0ZTEsIGRhdGUyKSB7XG4gIHJldHVybiBudWxsYWJsZUNvbXBhcmUoZGF0ZTEsIGRhdGUyLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHdlZWtTdGFydERhdGUxID0gZ2VuZXJhdGVDb25maWcubG9jYWxlLmdldFdlZWtGaXJzdERhdGUobG9jYWxlLCBkYXRlMSk7XG4gICAgdmFyIHdlZWtTdGFydERhdGUyID0gZ2VuZXJhdGVDb25maWcubG9jYWxlLmdldFdlZWtGaXJzdERhdGUobG9jYWxlLCBkYXRlMik7XG4gICAgcmV0dXJuIGlzU2FtZVllYXIoZ2VuZXJhdGVDb25maWcsIHdlZWtTdGFydERhdGUxLCB3ZWVrU3RhcnREYXRlMikgJiYgZ2VuZXJhdGVDb25maWcubG9jYWxlLmdldFdlZWsobG9jYWxlLCBkYXRlMSkgPT09IGdlbmVyYXRlQ29uZmlnLmxvY2FsZS5nZXRXZWVrKGxvY2FsZSwgZGF0ZTIpO1xuICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1NhbWUoZ2VuZXJhdGVDb25maWcsIGxvY2FsZSwgc291cmNlLCB0YXJnZXQsIHR5cGUpIHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnZGF0ZSc6XG4gICAgICByZXR1cm4gaXNTYW1lRGF0ZShnZW5lcmF0ZUNvbmZpZywgc291cmNlLCB0YXJnZXQpO1xuICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgcmV0dXJuIGlzU2FtZVdlZWsoZ2VuZXJhdGVDb25maWcsIGxvY2FsZS5sb2NhbGUsIHNvdXJjZSwgdGFyZ2V0KTtcbiAgICBjYXNlICdtb250aCc6XG4gICAgICByZXR1cm4gaXNTYW1lTW9udGgoZ2VuZXJhdGVDb25maWcsIHNvdXJjZSwgdGFyZ2V0KTtcbiAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgIHJldHVybiBpc1NhbWVRdWFydGVyKGdlbmVyYXRlQ29uZmlnLCBzb3VyY2UsIHRhcmdldCk7XG4gICAgY2FzZSAneWVhcic6XG4gICAgICByZXR1cm4gaXNTYW1lWWVhcihnZW5lcmF0ZUNvbmZpZywgc291cmNlLCB0YXJnZXQpO1xuICAgIGNhc2UgJ2RlY2FkZSc6XG4gICAgICByZXR1cm4gaXNTYW1lRGVjYWRlKGdlbmVyYXRlQ29uZmlnLCBzb3VyY2UsIHRhcmdldCk7XG4gICAgY2FzZSAndGltZSc6XG4gICAgICByZXR1cm4gaXNTYW1lVGltZShnZW5lcmF0ZUNvbmZpZywgc291cmNlLCB0YXJnZXQpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gaXNTYW1lVGltZXN0YW1wKGdlbmVyYXRlQ29uZmlnLCBzb3VyY2UsIHRhcmdldCk7XG4gIH1cbn1cblxuLyoqIEJldHdlZW4gaW4gZGF0ZSBidXQgbm90IGVxdWFsIG9mIGRhdGUgKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0luUmFuZ2UoZ2VuZXJhdGVDb25maWcsIHN0YXJ0RGF0ZSwgZW5kRGF0ZSwgY3VycmVudCkge1xuICBpZiAoIXN0YXJ0RGF0ZSB8fCAhZW5kRGF0ZSB8fCAhY3VycmVudCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gZ2VuZXJhdGVDb25maWcuaXNBZnRlcihjdXJyZW50LCBzdGFydERhdGUpICYmIGdlbmVyYXRlQ29uZmlnLmlzQWZ0ZXIoZW5kRGF0ZSwgY3VycmVudCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNTYW1lT3JBZnRlcihnZW5lcmF0ZUNvbmZpZywgbG9jYWxlLCBkYXRlMSwgZGF0ZTIsIHR5cGUpIHtcbiAgaWYgKGlzU2FtZShnZW5lcmF0ZUNvbmZpZywgbG9jYWxlLCBkYXRlMSwgZGF0ZTIsIHR5cGUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGdlbmVyYXRlQ29uZmlnLmlzQWZ0ZXIoZGF0ZTEsIGRhdGUyKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRXZWVrU3RhcnREYXRlKGxvY2FsZSwgZ2VuZXJhdGVDb25maWcsIHZhbHVlKSB7XG4gIHZhciB3ZWVrRmlyc3REYXkgPSBnZW5lcmF0ZUNvbmZpZy5sb2NhbGUuZ2V0V2Vla0ZpcnN0RGF5KGxvY2FsZSk7XG4gIHZhciBtb250aFN0YXJ0RGF0ZSA9IGdlbmVyYXRlQ29uZmlnLnNldERhdGUodmFsdWUsIDEpO1xuICB2YXIgc3RhcnREYXRlV2Vla0RheSA9IGdlbmVyYXRlQ29uZmlnLmdldFdlZWtEYXkobW9udGhTdGFydERhdGUpO1xuICB2YXIgYWxpZ25TdGFydERhdGUgPSBnZW5lcmF0ZUNvbmZpZy5hZGREYXRlKG1vbnRoU3RhcnREYXRlLCB3ZWVrRmlyc3REYXkgLSBzdGFydERhdGVXZWVrRGF5KTtcbiAgaWYgKGdlbmVyYXRlQ29uZmlnLmdldE1vbnRoKGFsaWduU3RhcnREYXRlKSA9PT0gZ2VuZXJhdGVDb25maWcuZ2V0TW9udGgodmFsdWUpICYmIGdlbmVyYXRlQ29uZmlnLmdldERhdGUoYWxpZ25TdGFydERhdGUpID4gMSkge1xuICAgIGFsaWduU3RhcnREYXRlID0gZ2VuZXJhdGVDb25maWcuYWRkRGF0ZShhbGlnblN0YXJ0RGF0ZSwgLTcpO1xuICB9XG4gIHJldHVybiBhbGlnblN0YXJ0RGF0ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRWYWx1ZSh2YWx1ZSwgX3JlZikge1xuICB2YXIgZ2VuZXJhdGVDb25maWcgPSBfcmVmLmdlbmVyYXRlQ29uZmlnLFxuICAgIGxvY2FsZSA9IF9yZWYubG9jYWxlLFxuICAgIGZvcm1hdCA9IF9yZWYuZm9ybWF0O1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiB0eXBlb2YgZm9ybWF0ID09PSAnZnVuY3Rpb24nID8gZm9ybWF0KHZhbHVlKSA6IGdlbmVyYXRlQ29uZmlnLmxvY2FsZS5mb3JtYXQobG9jYWxlLmxvY2FsZSwgdmFsdWUsIGZvcm1hdCk7XG59XG5cbi8qKlxuICogRmlsbCB0aGUgdGltZSBpbmZvIGludG8gRGF0ZSBpZiBwcm92aWRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbGxUaW1lKGdlbmVyYXRlQ29uZmlnLCBkYXRlLCB0aW1lKSB7XG4gIHZhciB0bXBEYXRlID0gZGF0ZTtcbiAgdmFyIGdldEZuID0gWydnZXRIb3VyJywgJ2dldE1pbnV0ZScsICdnZXRTZWNvbmQnLCAnZ2V0TWlsbGlzZWNvbmQnXTtcbiAgdmFyIHNldEZuID0gWydzZXRIb3VyJywgJ3NldE1pbnV0ZScsICdzZXRTZWNvbmQnLCAnc2V0TWlsbGlzZWNvbmQnXTtcbiAgc2V0Rm4uZm9yRWFjaChmdW5jdGlvbiAoZm4sIGluZGV4KSB7XG4gICAgaWYgKHRpbWUpIHtcbiAgICAgIHRtcERhdGUgPSBnZW5lcmF0ZUNvbmZpZ1tmbl0odG1wRGF0ZSwgZ2VuZXJhdGVDb25maWdbZ2V0Rm5baW5kZXhdXSh0aW1lKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRtcERhdGUgPSBnZW5lcmF0ZUNvbmZpZ1tmbl0odG1wRGF0ZSwgMCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHRtcERhdGU7XG59IiwiaW1wb3J0IF90b0NvbnN1bWFibGVBcnJheSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Db25zdW1hYmxlQXJyYXlcIjtcbmV4cG9ydCBmdW5jdGlvbiBsZWZ0UGFkKHN0ciwgbGVuZ3RoKSB7XG4gIHZhciBmaWxsID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiAnMCc7XG4gIHZhciBjdXJyZW50ID0gU3RyaW5nKHN0cik7XG4gIHdoaWxlIChjdXJyZW50Lmxlbmd0aCA8IGxlbmd0aCkge1xuICAgIGN1cnJlbnQgPSBcIlwiLmNvbmNhdChmaWxsKS5jb25jYXQoY3VycmVudCk7XG4gIH1cbiAgcmV0dXJuIGN1cnJlbnQ7XG59XG5cbi8qKlxuICogQ29udmVydCBgdmFsdWVgIHRvIGFycmF5LiBXaWxsIHByb3ZpZGUgYFtdYCBpZiBpcyBudWxsIG9yIHVuZGVmaW5lZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQXJyYXkodmFsKSB7XG4gIGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsKSA/IHZhbCA6IFt2YWxdO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZpbGxJbmRleChvcmksIGluZGV4LCB2YWx1ZSkge1xuICB2YXIgY2xvbmUgPSBfdG9Db25zdW1hYmxlQXJyYXkob3JpKTtcbiAgY2xvbmVbaW5kZXhdID0gdmFsdWU7XG4gIHJldHVybiBjbG9uZTtcbn1cblxuLyoqIFBpY2sgcHJvcHMgZnJvbSB0aGUga2V5IGxpc3QuIFdpbGwgZmlsdGVyIGVtcHR5IHZhbHVlICovXG5leHBvcnQgZnVuY3Rpb24gcGlja1Byb3BzKHByb3BzLCBrZXlzKSB7XG4gIHZhciBjbG9uZSA9IHt9O1xuICB2YXIgbWVyZ2VkS2V5cyA9IGtleXMgfHwgT2JqZWN0LmtleXMocHJvcHMpO1xuICBtZXJnZWRLZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIGlmIChwcm9wc1trZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNsb25lW2tleV0gPSBwcm9wc1trZXldO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjbG9uZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRSb3dGb3JtYXQocGlja2VyLCBsb2NhbGUsIGZvcm1hdCkge1xuICBpZiAoZm9ybWF0KSB7XG4gICAgcmV0dXJuIGZvcm1hdDtcbiAgfVxuICBzd2l0Y2ggKHBpY2tlcikge1xuICAgIC8vIEFsbCBmcm9tIHRoZSBgbG9jYWxlLmZpZWxkWFhYRm9ybWF0YCBmaXJzdFxuICAgIGNhc2UgJ3RpbWUnOlxuICAgICAgcmV0dXJuIGxvY2FsZS5maWVsZFRpbWVGb3JtYXQ7XG4gICAgY2FzZSAnZGF0ZXRpbWUnOlxuICAgICAgcmV0dXJuIGxvY2FsZS5maWVsZERhdGVUaW1lRm9ybWF0O1xuICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgIHJldHVybiBsb2NhbGUuZmllbGRNb250aEZvcm1hdDtcbiAgICBjYXNlICd5ZWFyJzpcbiAgICAgIHJldHVybiBsb2NhbGUuZmllbGRZZWFyRm9ybWF0O1xuICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgcmV0dXJuIGxvY2FsZS5maWVsZFF1YXJ0ZXJGb3JtYXQ7XG4gICAgY2FzZSAnd2Vlayc6XG4gICAgICByZXR1cm4gbG9jYWxlLmZpZWxkV2Vla0Zvcm1hdDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGxvY2FsZS5maWVsZERhdGVGb3JtYXQ7XG4gIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRGcm9tRGF0ZShjYWxlbmRhclZhbHVlcywgYWN0aXZlSW5kZXhMaXN0LCBhY3RpdmVJbmRleCkge1xuICB2YXIgbWVyZ2VkQWN0aXZlSW5kZXggPSBhY3RpdmVJbmRleCAhPT0gdW5kZWZpbmVkID8gYWN0aXZlSW5kZXggOiBhY3RpdmVJbmRleExpc3RbYWN0aXZlSW5kZXhMaXN0Lmxlbmd0aCAtIDFdO1xuICB2YXIgZmlyc3RWYWx1ZWRJbmRleCA9IGFjdGl2ZUluZGV4TGlzdC5maW5kKGZ1bmN0aW9uIChpbmRleCkge1xuICAgIHJldHVybiBjYWxlbmRhclZhbHVlc1tpbmRleF07XG4gIH0pO1xuICByZXR1cm4gbWVyZ2VkQWN0aXZlSW5kZXggIT09IGZpcnN0VmFsdWVkSW5kZXggPyBjYWxlbmRhclZhbHVlc1tmaXJzdFZhbHVlZEluZGV4XSA6IHVuZGVmaW5lZDtcbn0iLCIvLyA9PT09PT09PT09PT09PT09PT09PT09IE1vZGUgPT09PT09PT09PT09PT09PT09PT09PVxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlYWxQbGFjZW1lbnQocGxhY2VtZW50LCBydGwpIHtcbiAgaWYgKHBsYWNlbWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHBsYWNlbWVudDtcbiAgfVxuICByZXR1cm4gcnRsID8gJ2JvdHRvbVJpZ2h0JyA6ICdib3R0b21MZWZ0Jztcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIikuZGVmYXVsdDtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX2RheWpzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiZGF5anNcIikpO1xudmFyIF93ZWVrZGF5ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiZGF5anMvcGx1Z2luL3dlZWtkYXlcIikpO1xudmFyIF9sb2NhbGVEYXRhID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiZGF5anMvcGx1Z2luL2xvY2FsZURhdGFcIikpO1xudmFyIF93ZWVrT2ZZZWFyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiZGF5anMvcGx1Z2luL3dlZWtPZlllYXJcIikpO1xudmFyIF93ZWVrWWVhciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcImRheWpzL3BsdWdpbi93ZWVrWWVhclwiKSk7XG52YXIgX2FkdmFuY2VkRm9ybWF0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiZGF5anMvcGx1Z2luL2FkdmFuY2VkRm9ybWF0XCIpKTtcbnZhciBfY3VzdG9tUGFyc2VGb3JtYXQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJkYXlqcy9wbHVnaW4vY3VzdG9tUGFyc2VGb3JtYXRcIikpO1xuX2RheWpzLmRlZmF1bHQuZXh0ZW5kKF9jdXN0b21QYXJzZUZvcm1hdC5kZWZhdWx0KTtcbl9kYXlqcy5kZWZhdWx0LmV4dGVuZChfYWR2YW5jZWRGb3JtYXQuZGVmYXVsdCk7XG5fZGF5anMuZGVmYXVsdC5leHRlbmQoX3dlZWtkYXkuZGVmYXVsdCk7XG5fZGF5anMuZGVmYXVsdC5leHRlbmQoX2xvY2FsZURhdGEuZGVmYXVsdCk7XG5fZGF5anMuZGVmYXVsdC5leHRlbmQoX3dlZWtPZlllYXIuZGVmYXVsdCk7XG5fZGF5anMuZGVmYXVsdC5leHRlbmQoX3dlZWtZZWFyLmRlZmF1bHQpO1xuX2RheWpzLmRlZmF1bHQuZXh0ZW5kKGZ1bmN0aW9uIChvLCBjKSB7XG4gIC8vIHRvZG8gc3VwcG9ydCBXbyAoSVNPIHdlZWspXG4gIHZhciBwcm90byA9IGMucHJvdG90eXBlO1xuICB2YXIgb2xkRm9ybWF0ID0gcHJvdG8uZm9ybWF0O1xuICBwcm90by5mb3JtYXQgPSBmdW5jdGlvbiBmKGZvcm1hdFN0cikge1xuICAgIHZhciBzdHIgPSAoZm9ybWF0U3RyIHx8ICcnKS5yZXBsYWNlKCdXbycsICd3bycpO1xuICAgIHJldHVybiBvbGRGb3JtYXQuYmluZCh0aGlzKShzdHIpO1xuICB9O1xufSk7XG52YXIgbG9jYWxlTWFwID0ge1xuICAvLyBhcl9FRzpcbiAgLy8gYXpfQVo6XG4gIC8vIGJnX0JHOlxuICBibl9CRDogJ2JuLWJkJyxcbiAgYnlfQlk6ICdiZScsXG4gIC8vIGNhX0VTOlxuICAvLyBjc19DWjpcbiAgLy8gZGFfREs6XG4gIC8vIGRlX0RFOlxuICAvLyBlbF9HUjpcbiAgZW5fR0I6ICdlbi1nYicsXG4gIGVuX1VTOiAnZW4nLFxuICAvLyBlc19FUzpcbiAgLy8gZXRfRUU6XG4gIC8vIGZhX0lSOlxuICAvLyBmaV9GSTpcbiAgZnJfQkU6ICdmcicsXG4gIC8vIHRvZG86IGRheWpzIGhhcyBubyBmcl9CRSBsb2NhbGUsIHVzZSBmciBhdCBwcmVzZW50XG4gIGZyX0NBOiAnZnItY2EnLFxuICAvLyBmcl9GUjpcbiAgLy8gZ2FfSUU6XG4gIC8vIGdsX0VTOlxuICAvLyBoZV9JTDpcbiAgLy8gaGlfSU46XG4gIC8vIGhyX0hSOlxuICAvLyBodV9IVTpcbiAgaHlfQU06ICdoeS1hbScsXG4gIC8vIGlkX0lEOlxuICAvLyBpc19JUzpcbiAgLy8gaXRfSVQ6XG4gIC8vIGphX0pQOlxuICAvLyBrYV9HRTpcbiAgLy8ga2tfS1o6XG4gIC8vIGttX0tIOlxuICBrbXJfSVE6ICdrdScsXG4gIC8vIGtuX0lOOlxuICAvLyBrb19LUjpcbiAgLy8ga3VfSVE6IC8vIHByZXZpb3VzIGt1IGluIGFudGRcbiAgLy8gbHRfTFQ6XG4gIC8vIGx2X0xWOlxuICAvLyBta19NSzpcbiAgLy8gbWxfSU46XG4gIC8vIG1uX01OOlxuICAvLyBtc19NWTpcbiAgLy8gbmJfTk86XG4gIC8vIG5lX05QOlxuICBubF9CRTogJ25sLWJlJyxcbiAgLy8gbmxfTkw6XG4gIC8vIHBsX1BMOlxuICBwdF9CUjogJ3B0LWJyJyxcbiAgLy8gcHRfUFQ6XG4gIC8vIHJvX1JPOlxuICAvLyBydV9SVTpcbiAgLy8gc2tfU0s6XG4gIC8vIHNsX1NJOlxuICAvLyBzcl9SUzpcbiAgLy8gc3ZfU0U6XG4gIC8vIHRhX0lOOlxuICAvLyB0aF9USDpcbiAgLy8gdHJfVFI6XG4gIC8vIHVrX1VBOlxuICAvLyB1cl9QSzpcbiAgLy8gdmlfVk46XG4gIHpoX0NOOiAnemgtY24nLFxuICB6aF9ISzogJ3poLWhrJyxcbiAgemhfVFc6ICd6aC10dydcbn07XG52YXIgcGFyc2VMb2NhbGUgPSBmdW5jdGlvbiBwYXJzZUxvY2FsZShsb2NhbGUpIHtcbiAgdmFyIG1hcExvY2FsZSA9IGxvY2FsZU1hcFtsb2NhbGVdO1xuICByZXR1cm4gbWFwTG9jYWxlIHx8IGxvY2FsZS5zcGxpdCgnXycpWzBdO1xufTtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnZhciBwYXJzZU5vTWF0Y2hOb3RpY2UgPSBmdW5jdGlvbiBwYXJzZU5vTWF0Y2hOb3RpY2UoKSB7XG4gIC8vIHpvbWJpZUo6XG4gIC8vIFdoZW4gdXNlciB0eXBpbmcsIGl0cyBhbHdheXMgbWlzcyBtYXRjaCBmb3JtYXQuXG4gIC8vIFRoaXMgY2hlY2sgaXMgbWVhbmluZ2xlc3MuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbnQtZGVzaWduL2FudC1kZXNpZ24vaXNzdWVzLzUxODM5XG4gIC8vIG5vdGVPbmNlKGZhbHNlLCAnTm90IG1hdGNoIGFueSBmb3JtYXQuIFBsZWFzZSBoZWxwIHRvIGZpcmUgYSBpc3N1ZSBhYm91dCB0aGlzLicpO1xufTtcbnZhciBnZW5lcmF0ZUNvbmZpZyA9IHtcbiAgLy8gZ2V0XG4gIGdldE5vdzogZnVuY3Rpb24gZ2V0Tm93KCkge1xuICAgIHZhciBub3cgPSAoMCwgX2RheWpzLmRlZmF1bHQpKCk7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FudC1kZXNpZ24vYW50LWRlc2lnbi9kaXNjdXNzaW9ucy81MDkzNFxuICAgIGlmICh0eXBlb2Ygbm93LnR6ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gbm93LnR6KCk7IC8vIHVzZSBkZWZhdWx0IHRpbWV6b25lXG4gICAgfVxuICAgIHJldHVybiBub3c7XG4gIH0sXG4gIGdldEZpeGVkRGF0ZTogZnVuY3Rpb24gZ2V0Rml4ZWREYXRlKHN0cmluZykge1xuICAgIHJldHVybiAoMCwgX2RheWpzLmRlZmF1bHQpKHN0cmluZywgWydZWVlZLU0tREQnLCAnWVlZWS1NTS1ERCddKTtcbiAgfSxcbiAgZ2V0RW5kRGF0ZTogZnVuY3Rpb24gZ2V0RW5kRGF0ZShkYXRlKSB7XG4gICAgcmV0dXJuIGRhdGUuZW5kT2YoJ21vbnRoJyk7XG4gIH0sXG4gIGdldFdlZWtEYXk6IGZ1bmN0aW9uIGdldFdlZWtEYXkoZGF0ZSkge1xuICAgIHZhciBjbG9uZSA9IGRhdGUubG9jYWxlKCdlbicpO1xuICAgIHJldHVybiBjbG9uZS53ZWVrZGF5KCkgKyBjbG9uZS5sb2NhbGVEYXRhKCkuZmlyc3REYXlPZldlZWsoKTtcbiAgfSxcbiAgZ2V0WWVhcjogZnVuY3Rpb24gZ2V0WWVhcihkYXRlKSB7XG4gICAgcmV0dXJuIGRhdGUueWVhcigpO1xuICB9LFxuICBnZXRNb250aDogZnVuY3Rpb24gZ2V0TW9udGgoZGF0ZSkge1xuICAgIHJldHVybiBkYXRlLm1vbnRoKCk7XG4gIH0sXG4gIGdldERhdGU6IGZ1bmN0aW9uIGdldERhdGUoZGF0ZSkge1xuICAgIHJldHVybiBkYXRlLmRhdGUoKTtcbiAgfSxcbiAgZ2V0SG91cjogZnVuY3Rpb24gZ2V0SG91cihkYXRlKSB7XG4gICAgcmV0dXJuIGRhdGUuaG91cigpO1xuICB9LFxuICBnZXRNaW51dGU6IGZ1bmN0aW9uIGdldE1pbnV0ZShkYXRlKSB7XG4gICAgcmV0dXJuIGRhdGUubWludXRlKCk7XG4gIH0sXG4gIGdldFNlY29uZDogZnVuY3Rpb24gZ2V0U2Vjb25kKGRhdGUpIHtcbiAgICByZXR1cm4gZGF0ZS5zZWNvbmQoKTtcbiAgfSxcbiAgZ2V0TWlsbGlzZWNvbmQ6IGZ1bmN0aW9uIGdldE1pbGxpc2Vjb25kKGRhdGUpIHtcbiAgICByZXR1cm4gZGF0ZS5taWxsaXNlY29uZCgpO1xuICB9LFxuICAvLyBzZXRcbiAgYWRkWWVhcjogZnVuY3Rpb24gYWRkWWVhcihkYXRlLCBkaWZmKSB7XG4gICAgcmV0dXJuIGRhdGUuYWRkKGRpZmYsICd5ZWFyJyk7XG4gIH0sXG4gIGFkZE1vbnRoOiBmdW5jdGlvbiBhZGRNb250aChkYXRlLCBkaWZmKSB7XG4gICAgcmV0dXJuIGRhdGUuYWRkKGRpZmYsICdtb250aCcpO1xuICB9LFxuICBhZGREYXRlOiBmdW5jdGlvbiBhZGREYXRlKGRhdGUsIGRpZmYpIHtcbiAgICByZXR1cm4gZGF0ZS5hZGQoZGlmZiwgJ2RheScpO1xuICB9LFxuICBzZXRZZWFyOiBmdW5jdGlvbiBzZXRZZWFyKGRhdGUsIHllYXIpIHtcbiAgICByZXR1cm4gZGF0ZS55ZWFyKHllYXIpO1xuICB9LFxuICBzZXRNb250aDogZnVuY3Rpb24gc2V0TW9udGgoZGF0ZSwgbW9udGgpIHtcbiAgICByZXR1cm4gZGF0ZS5tb250aChtb250aCk7XG4gIH0sXG4gIHNldERhdGU6IGZ1bmN0aW9uIHNldERhdGUoZGF0ZSwgbnVtKSB7XG4gICAgcmV0dXJuIGRhdGUuZGF0ZShudW0pO1xuICB9LFxuICBzZXRIb3VyOiBmdW5jdGlvbiBzZXRIb3VyKGRhdGUsIGhvdXIpIHtcbiAgICByZXR1cm4gZGF0ZS5ob3VyKGhvdXIpO1xuICB9LFxuICBzZXRNaW51dGU6IGZ1bmN0aW9uIHNldE1pbnV0ZShkYXRlLCBtaW51dGUpIHtcbiAgICByZXR1cm4gZGF0ZS5taW51dGUobWludXRlKTtcbiAgfSxcbiAgc2V0U2Vjb25kOiBmdW5jdGlvbiBzZXRTZWNvbmQoZGF0ZSwgc2Vjb25kKSB7XG4gICAgcmV0dXJuIGRhdGUuc2Vjb25kKHNlY29uZCk7XG4gIH0sXG4gIHNldE1pbGxpc2Vjb25kOiBmdW5jdGlvbiBzZXRNaWxsaXNlY29uZChkYXRlLCBtaWxsaXNlY29uZHMpIHtcbiAgICByZXR1cm4gZGF0ZS5taWxsaXNlY29uZChtaWxsaXNlY29uZHMpO1xuICB9LFxuICAvLyBDb21wYXJlXG4gIGlzQWZ0ZXI6IGZ1bmN0aW9uIGlzQWZ0ZXIoZGF0ZTEsIGRhdGUyKSB7XG4gICAgcmV0dXJuIGRhdGUxLmlzQWZ0ZXIoZGF0ZTIpO1xuICB9LFxuICBpc1ZhbGlkYXRlOiBmdW5jdGlvbiBpc1ZhbGlkYXRlKGRhdGUpIHtcbiAgICByZXR1cm4gZGF0ZS5pc1ZhbGlkKCk7XG4gIH0sXG4gIGxvY2FsZToge1xuICAgIGdldFdlZWtGaXJzdERheTogZnVuY3Rpb24gZ2V0V2Vla0ZpcnN0RGF5KGxvY2FsZSkge1xuICAgICAgcmV0dXJuICgwLCBfZGF5anMuZGVmYXVsdCkoKS5sb2NhbGUocGFyc2VMb2NhbGUobG9jYWxlKSkubG9jYWxlRGF0YSgpLmZpcnN0RGF5T2ZXZWVrKCk7XG4gICAgfSxcbiAgICBnZXRXZWVrRmlyc3REYXRlOiBmdW5jdGlvbiBnZXRXZWVrRmlyc3REYXRlKGxvY2FsZSwgZGF0ZSkge1xuICAgICAgcmV0dXJuIGRhdGUubG9jYWxlKHBhcnNlTG9jYWxlKGxvY2FsZSkpLndlZWtkYXkoMCk7XG4gICAgfSxcbiAgICBnZXRXZWVrOiBmdW5jdGlvbiBnZXRXZWVrKGxvY2FsZSwgZGF0ZSkge1xuICAgICAgcmV0dXJuIGRhdGUubG9jYWxlKHBhcnNlTG9jYWxlKGxvY2FsZSkpLndlZWsoKTtcbiAgICB9LFxuICAgIGdldFNob3J0V2Vla0RheXM6IGZ1bmN0aW9uIGdldFNob3J0V2Vla0RheXMobG9jYWxlKSB7XG4gICAgICByZXR1cm4gKDAsIF9kYXlqcy5kZWZhdWx0KSgpLmxvY2FsZShwYXJzZUxvY2FsZShsb2NhbGUpKS5sb2NhbGVEYXRhKCkud2Vla2RheXNNaW4oKTtcbiAgICB9LFxuICAgIGdldFNob3J0TW9udGhzOiBmdW5jdGlvbiBnZXRTaG9ydE1vbnRocyhsb2NhbGUpIHtcbiAgICAgIHJldHVybiAoMCwgX2RheWpzLmRlZmF1bHQpKCkubG9jYWxlKHBhcnNlTG9jYWxlKGxvY2FsZSkpLmxvY2FsZURhdGEoKS5tb250aHNTaG9ydCgpO1xuICAgIH0sXG4gICAgZm9ybWF0OiBmdW5jdGlvbiBmb3JtYXQobG9jYWxlLCBkYXRlLCBfZm9ybWF0KSB7XG4gICAgICByZXR1cm4gZGF0ZS5sb2NhbGUocGFyc2VMb2NhbGUobG9jYWxlKSkuZm9ybWF0KF9mb3JtYXQpO1xuICAgIH0sXG4gICAgcGFyc2U6IGZ1bmN0aW9uIHBhcnNlKGxvY2FsZSwgdGV4dCwgZm9ybWF0cykge1xuICAgICAgdmFyIGxvY2FsZVN0ciA9IHBhcnNlTG9jYWxlKGxvY2FsZSk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcm1hdHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IGZvcm1hdHNbaV07XG4gICAgICAgIHZhciBmb3JtYXRUZXh0ID0gdGV4dDtcbiAgICAgICAgaWYgKGZvcm1hdC5pbmNsdWRlcygnd28nKSB8fCBmb3JtYXQuaW5jbHVkZXMoJ1dvJykpIHtcbiAgICAgICAgICAvLyBwYXJzZSBXb1xuICAgICAgICAgIHZhciB5ZWFyID0gZm9ybWF0VGV4dC5zcGxpdCgnLScpWzBdO1xuICAgICAgICAgIHZhciB3ZWVrU3RyID0gZm9ybWF0VGV4dC5zcGxpdCgnLScpWzFdO1xuICAgICAgICAgIHZhciBmaXJzdFdlZWsgPSAoMCwgX2RheWpzLmRlZmF1bHQpKHllYXIsICdZWVlZJykuc3RhcnRPZigneWVhcicpLmxvY2FsZShsb2NhbGVTdHIpO1xuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDw9IDUyOyBqICs9IDEpIHtcbiAgICAgICAgICAgIHZhciBuZXh0V2VlayA9IGZpcnN0V2Vlay5hZGQoaiwgJ3dlZWsnKTtcbiAgICAgICAgICAgIGlmIChuZXh0V2Vlay5mb3JtYXQoJ1dvJykgPT09IHdlZWtTdHIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHRXZWVrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwYXJzZU5vTWF0Y2hOb3RpY2UoKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGF0ZSA9ICgwLCBfZGF5anMuZGVmYXVsdCkoZm9ybWF0VGV4dCwgZm9ybWF0LCB0cnVlKS5sb2NhbGUobG9jYWxlU3RyKTtcbiAgICAgICAgaWYgKGRhdGUuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0ZXh0KSB7XG4gICAgICAgIHBhcnNlTm9NYXRjaE5vdGljZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG59O1xudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gZ2VuZXJhdGVDb25maWc7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbW1vbkxvY2FsZSA9IHZvaWQgMDtcbnZhciBjb21tb25Mb2NhbGUgPSBleHBvcnRzLmNvbW1vbkxvY2FsZSA9IHtcbiAgeWVhckZvcm1hdDogJ1lZWVknLFxuICBkYXlGb3JtYXQ6ICdEJyxcbiAgY2VsbE1lcmlkaWVtRm9ybWF0OiAnQScsXG4gIG1vbnRoQmVmb3JlWWVhcjogdHJ1ZVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIikuZGVmYXVsdDtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX29iamVjdFNwcmVhZDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFNwcmVhZDJcIikpO1xudmFyIF9jb21tb24gPSByZXF1aXJlKFwiLi9jb21tb25cIik7XG52YXIgbG9jYWxlID0gKDAsIF9vYmplY3RTcHJlYWQyLmRlZmF1bHQpKCgwLCBfb2JqZWN0U3ByZWFkMi5kZWZhdWx0KSh7fSwgX2NvbW1vbi5jb21tb25Mb2NhbGUpLCB7fSwge1xuICBsb2NhbGU6ICdlbl9VUycsXG4gIHRvZGF5OiAnVG9kYXknLFxuICBub3c6ICdOb3cnLFxuICBiYWNrVG9Ub2RheTogJ0JhY2sgdG8gdG9kYXknLFxuICBvazogJ09LJyxcbiAgY2xlYXI6ICdDbGVhcicsXG4gIHdlZWs6ICdXZWVrJyxcbiAgbW9udGg6ICdNb250aCcsXG4gIHllYXI6ICdZZWFyJyxcbiAgdGltZVNlbGVjdDogJ3NlbGVjdCB0aW1lJyxcbiAgZGF0ZVNlbGVjdDogJ3NlbGVjdCBkYXRlJyxcbiAgd2Vla1NlbGVjdDogJ0Nob29zZSBhIHdlZWsnLFxuICBtb250aFNlbGVjdDogJ0Nob29zZSBhIG1vbnRoJyxcbiAgeWVhclNlbGVjdDogJ0Nob29zZSBhIHllYXInLFxuICBkZWNhZGVTZWxlY3Q6ICdDaG9vc2UgYSBkZWNhZGUnLFxuICBkYXRlRm9ybWF0OiAnTS9EL1lZWVknLFxuICBkYXRlVGltZUZvcm1hdDogJ00vRC9ZWVlZIEhIOm1tOnNzJyxcbiAgcHJldmlvdXNNb250aDogJ1ByZXZpb3VzIG1vbnRoIChQYWdlVXApJyxcbiAgbmV4dE1vbnRoOiAnTmV4dCBtb250aCAoUGFnZURvd24pJyxcbiAgcHJldmlvdXNZZWFyOiAnTGFzdCB5ZWFyIChDb250cm9sICsgbGVmdCknLFxuICBuZXh0WWVhcjogJ05leHQgeWVhciAoQ29udHJvbCArIHJpZ2h0KScsXG4gIHByZXZpb3VzRGVjYWRlOiAnTGFzdCBkZWNhZGUnLFxuICBuZXh0RGVjYWRlOiAnTmV4dCBkZWNhZGUnLFxuICBwcmV2aW91c0NlbnR1cnk6ICdMYXN0IGNlbnR1cnknLFxuICBuZXh0Q2VudHVyeTogJ05leHQgY2VudHVyeSdcbn0pO1xudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gbG9jYWxlOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==