UNPKG

adui

Version:

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

252 lines 37.7 kB
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } import React, { Component } from "react"; import { mount } from "enzyme"; import TestRenderer from "react-test-renderer"; import DatePicker from ".."; import { convertDateRangeToString } from "../core"; import { act } from "react-dom/test-utils"; var RangePicker = DatePicker.RangePicker; var RangePickerMounter = function (_Component) { function RangePickerMounter() { var _this; _classCallCheck(this, RangePickerMounter); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _callSuper(this, RangePickerMounter, [].concat(args)); _this.state = { component: null, value: [new Date(), new Date()], visible: true }; return _this; } _inherits(RangePickerMounter, _Component); return _createClass(RangePickerMounter, [{ key: "render", value: function render() { var _this2 = this; var _this$state = this.state, value = _this$state.value, visible = _this$state.visible; return React.createElement(RangePicker, _extends({ shortcuts: [{ label: "祖国生日", value: [new Date("2020-10-01"), new Date("2020-10-07")] }], ref: function ref(component) { if (!_this2.state.component) { _this2.setState({ component: component }); } }, closeOnSelect: true, value: value, visible: visible, onChange: function onChange(val) { return _this2.setState({ value: val }); }, onVisibleChange: function onVisibleChange(bool) { return _this2.setState({ visible: bool }); } }, this.props)); } }]); }(Component); describe("RangePicker", function () { beforeAll(function () { jest.useFakeTimers(); }); afterAll(function () { jest.useRealTimers(); }); it("是否正确渲染", function () { var wrapper = TestRenderer.create(React.createElement(RangePicker, null)); expect(wrapper).toMatchSnapshot(); }); it("内部驱动", function () { var val = [new Date("2020-02-02"), new Date("2020-03-01")]; var wrapper = mount(React.createElement(RangePicker, { defaultValue: val, defaultVisible: false, closeOnSelect: true })); expect(wrapper.find("input").at(0).props().value).toBe(convertDateRangeToString(val)); wrapper.find("input").simulate("focus"); expect(wrapper.find("Popover").at(0).props().visible).toBe(true); wrapper.find("input").simulate("change", { target: { value: "" } }); expect(wrapper.find("input").props().value).toBe(""); wrapper.find("input").simulate("change", { target: { value: "2020-02-22 - 2020-02-28" } }); expect(wrapper.find("input").props().value).toBe("2020-02-22 - 2020-02-28"); act(function () { wrapper.find("input").simulate("keydown", { key: "enter", keyCode: 13 }); jest.runAllTimers(); wrapper.update(); expect(wrapper.find("Popover").at(0).props().visible).toBe(false); }); act(function () { wrapper.find(".adui-date-day").at(14).simulate("click"); wrapper.find(".adui-date-day").at(15).simulate("click"); var expectedVal = convertDateRangeToString([new Date(wrapper.find(".adui-date-day").at(14).props()["aria-label"] + " 12:00"), new Date(wrapper.find(".adui-date-day").at(15).props()["aria-label"] + " 12:00")]); jest.advanceTimersByTime(350); wrapper.update(); expect(wrapper.find("Popover").at(0).props().visible).toBe(false); }); }); it("外部控制", function () { var val = [new Date(), new Date()]; var wrapper = mount(React.createElement(RangePicker, { value: [new Date(), new Date()], visible: true, closeOnSelect: true })); expect(wrapper.find("input").at(0).props().value).toBe(convertDateRangeToString(val)); expect(wrapper.find("Popover").at(0).props().visible).toBe(true); act(function () { wrapper.find(".adui-date-day").at(14).simulate("click"); wrapper.find(".adui-date-day").at(15).simulate("click"); jest.advanceTimersByTime(350); wrapper.update(); expect(wrapper.find("input").at(0).props().value).toBe(convertDateRangeToString(val)); }); act(function () { wrapper.find(".adui-date-day").at(15).simulate("click"); wrapper.find(".adui-date-day").at(16).simulate("click"); jest.advanceTimersByTime(350); wrapper.update(); expect(wrapper.find("input").at(0).props().value).toBe(convertDateRangeToString(val)); expect(wrapper.find("Popover").at(0).props().visible).toBe(true); }); var mounter = mount(React.createElement(RangePickerMounter, null)); var today = convertDateRangeToString(new Date()); mounter.find("input").simulate("change", { target: { value: "2020-02-22 - 2020-02-26" } }); expect(convertDateRangeToString(mounter.state().value)).toBe("2020-02-22 - 2020-02-26"); mounter.find("input").simulate("change", { target: { value: "2020-02-25 - 2020-02-26" } }); expect(convertDateRangeToString(mounter.state().value)).toBe("2020-02-25 - 2020-02-26"); mounter.find("input").simulate("change", { target: { value: "" } }); expect(convertDateRangeToString(mounter.state().value)).toBe(""); expect(mounter.find("Popover").at(0).props().visible).toBe(true); act(function () { mounter.find(".adui-date-day").at(15).simulate("click"); mounter.find(".adui-date-day").at(16).simulate("click"); jest.runAllTimers(); mounter.update(); }); }); it("DayPicker 操作", function () { var today = new Date(); var wrapper = mount(React.createElement(RangePickerMounter, null)); var expectedRange = []; act(function () { wrapper.find(".adui-date-day").at(10).simulate("click"); expectedRange[0] = new Date(wrapper.find(".adui-date-day").at(10).props()["aria-label"] + " 12:00"); wrapper.find("button").at(1).simulate("click"); wrapper.find("button").at(1).simulate("click"); jest.runAllTimers(); wrapper.update(); }); act(function () { wrapper.find(".adui-date-day").at(10).simulate("click"); expectedRange[1] = new Date(wrapper.find(".adui-date-day").at(10).props()["aria-label"] + " 12:00"); jest.runAllTimers(); wrapper.update(); expect(convertDateRangeToString(wrapper.state().value) === convertDateRangeToString(expectedRange)).toBe(true); }); act(function () { wrapper.find(".adui-date-shortcut").at(0).simulate("keydown", { key: "enter", keyCode: 13 }); jest.runAllTimers(); wrapper.update(); expect(convertDateRangeToString(wrapper.state().value)).toBe("2020-10-01 - 2020-10-07"); }); var wrapperForCoverage0 = mount(React.createElement(RangePickerMounter, { disabled: true })); wrapperForCoverage0.state().component.handleVisibleChange(false); wrapperForCoverage0.find(".adui-date-day").at(14).simulate("mouseenter"); wrapperForCoverage0.find(".adui-date-day").at(14).simulate("mouseleave"); jest.runAllTimers(); }); it("测试 min max", function () { var wrapper = mount(React.createElement(RangePickerMounter, { minDate: new Date("2018-12-31"), maxDate: new Date("2020-01-01") })); act(function () { wrapper.find("select").at(0).simulate("change", { target: { value: "2019" } }); wrapper.find("select").at(1).simulate("change", { target: { value: "1" } }); jest.runAllTimers(); wrapper.update(); wrapper.find(".adui-date-day").at(14).simulate("click"); jest.runAllTimers(); wrapper.update(); wrapper.find("select").at(1).simulate("change", { target: { value: "11" } }); wrapper.find("select").at(0).simulate("change", { target: { value: "2020" } }); jest.runAllTimers(); wrapper.update(); wrapper.find(".adui-date-day").at(14).simulate("click"); jest.runAllTimers(); wrapper.update(); }); }); }); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIkNvbXBvbmVudCIsIm1vdW50IiwiVGVzdFJlbmRlcmVyIiwiRGF0ZVBpY2tlciIsImNvbnZlcnREYXRlUmFuZ2VUb1N0cmluZyIsImFjdCIsIlJhbmdlUGlja2VyIiwiUmFuZ2VQaWNrZXJNb3VudGVyIiwiX0NvbXBvbmVudCIsIl90aGlzIiwiX2NsYXNzQ2FsbENoZWNrIiwiX2xlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJfY2FsbFN1cGVyIiwiY29uY2F0Iiwic3RhdGUiLCJjb21wb25lbnQiLCJ2YWx1ZSIsIkRhdGUiLCJ2aXNpYmxlIiwiX2luaGVyaXRzIiwiX2NyZWF0ZUNsYXNzIiwia2V5IiwicmVuZGVyIiwiX3RoaXMyIiwiX3RoaXMkc3RhdGUiLCJjcmVhdGVFbGVtZW50IiwiX2V4dGVuZHMiLCJzaG9ydGN1dHMiLCJsYWJlbCIsInJlZiIsInNldFN0YXRlIiwiY2xvc2VPblNlbGVjdCIsIm9uQ2hhbmdlIiwidmFsIiwib25WaXNpYmxlQ2hhbmdlIiwiYm9vbCIsInByb3BzIiwiZGVzY3JpYmUiLCJiZWZvcmVBbGwiLCJqZXN0IiwidXNlRmFrZVRpbWVycyIsImFmdGVyQWxsIiwidXNlUmVhbFRpbWVycyIsIml0Iiwid3JhcHBlciIsImNyZWF0ZSIsImV4cGVjdCIsInRvTWF0Y2hTbmFwc2hvdCIsImRlZmF1bHRWYWx1ZSIsImRlZmF1bHRWaXNpYmxlIiwiZmluZCIsImF0IiwidG9CZSIsInNpbXVsYXRlIiwidGFyZ2V0Iiwia2V5Q29kZSIsInJ1bkFsbFRpbWVycyIsInVwZGF0ZSIsImV4cGVjdGVkVmFsIiwiYWR2YW5jZVRpbWVyc0J5VGltZSIsIm1vdW50ZXIiLCJ0b2RheSIsImV4cGVjdGVkUmFuZ2UiLCJ3cmFwcGVyRm9yQ292ZXJhZ2UwIiwiZGlzYWJsZWQiLCJoYW5kbGVWaXNpYmxlQ2hhbmdlIiwibWluRGF0ZSIsIm1heERhdGUiXSwic291cmNlcyI6WyIuLi8uLi8uLi9jb21wb25lbnRzL2RhdGUtcGlja2VyL19fdGVzdHNfXy9SYW5nZVBpY2tlci50ZXN0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gQHRzLW5vY2hlY2tcbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHsgbW91bnQgfSBmcm9tIFwiZW56eW1lXCJcbmltcG9ydCBUZXN0UmVuZGVyZXIgZnJvbSBcInJlYWN0LXRlc3QtcmVuZGVyZXJcIlxuaW1wb3J0IERhdGVQaWNrZXIgZnJvbSBcIi4uXCJcbmltcG9ydCB7IGNvbnZlcnREYXRlUmFuZ2VUb1N0cmluZywgY29udmVydERhdGVUb1N0cmluZyB9IGZyb20gXCIuLi9jb3JlXCJcbmltcG9ydCB7IGFjdCB9IGZyb20gXCJyZWFjdC1kb20vdGVzdC11dGlsc1wiXG5cbmNvbnN0IFJhbmdlUGlja2VyID0gRGF0ZVBpY2tlci5SYW5nZVBpY2tlclxuXG5jbGFzcyBSYW5nZVBpY2tlck1vdW50ZXIgZXh0ZW5kcyBDb21wb25lbnQge1xuICBzdGF0ZSA9IHtcbiAgICBjb21wb25lbnQ6IG51bGwsXG4gICAgdmFsdWU6IFtuZXcgRGF0ZSgpLCBuZXcgRGF0ZSgpXSxcbiAgICB2aXNpYmxlOiB0cnVlLFxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgdmFsdWUsIHZpc2libGUgfSA9IHRoaXMuc3RhdGVcbiAgICByZXR1cm4gKFxuICAgICAgPFJhbmdlUGlja2VyXG4gICAgICAgIHNob3J0Y3V0cz17W1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiBcIuelluWbveeUn+aXpVwiLFxuICAgICAgICAgICAgdmFsdWU6IFtuZXcgRGF0ZShcIjIwMjAtMTAtMDFcIiksIG5ldyBEYXRlKFwiMjAyMC0xMC0wN1wiKV0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXX1cbiAgICAgICAgcmVmPXsoY29tcG9uZW50KSA9PiB7XG4gICAgICAgICAgaWYgKCF0aGlzLnN0YXRlLmNvbXBvbmVudCkge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGNvbXBvbmVudCB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfX1cbiAgICAgICAgY2xvc2VPblNlbGVjdFxuICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgIHZpc2libGU9e3Zpc2libGV9XG4gICAgICAgIG9uQ2hhbmdlPXsodmFsKSA9PiB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHZhbCB9KX1cbiAgICAgICAgb25WaXNpYmxlQ2hhbmdlPXsoYm9vbCkgPT4gdGhpcy5zZXRTdGF0ZSh7IHZpc2libGU6IGJvb2wgfSl9XG4gICAgICAgIHsuLi50aGlzLnByb3BzfVxuICAgICAgLz5cbiAgICApXG4gIH1cbn1cblxuZGVzY3JpYmUoXCJSYW5nZVBpY2tlclwiLCAoKSA9PiB7XG4gIGJlZm9yZUFsbCgoKSA9PiB7XG4gICAgamVzdC51c2VGYWtlVGltZXJzKClcbiAgfSlcblxuICBhZnRlckFsbCgoKSA9PiB7XG4gICAgamVzdC51c2VSZWFsVGltZXJzKClcbiAgfSlcblxuICBpdChcIuaYr+WQpuato+ehrua4suafk1wiLCAoKSA9PiB7XG4gICAgY29uc3Qgd3JhcHBlciA9IFRlc3RSZW5kZXJlci5jcmVhdGUoPFJhbmdlUGlja2VyIC8+KVxuICAgIGV4cGVjdCh3cmFwcGVyKS50b01hdGNoU25hcHNob3QoKVxuICB9KVxuXG4gIGl0KFwi5YaF6YOo6amx5YqoXCIsICgpID0+IHtcbiAgICBjb25zdCB2YWwgPSBbbmV3IERhdGUoXCIyMDIwLTAyLTAyXCIpLCBuZXcgRGF0ZShcIjIwMjAtMDMtMDFcIildXG4gICAgY29uc3Qgd3JhcHBlciA9IG1vdW50KFxuICAgICAgPFJhbmdlUGlja2VyIGRlZmF1bHRWYWx1ZT17dmFsfSBkZWZhdWx0VmlzaWJsZT17ZmFsc2V9IGNsb3NlT25TZWxlY3QgLz5cbiAgICApXG4gICAgZXhwZWN0KHdyYXBwZXIuZmluZChcImlucHV0XCIpLmF0KDApLnByb3BzKCkudmFsdWUpLnRvQmUoXG4gICAgICBjb252ZXJ0RGF0ZVJhbmdlVG9TdHJpbmcodmFsKVxuICAgIClcblxuICAgIHdyYXBwZXIuZmluZChcImlucHV0XCIpLnNpbXVsYXRlKFwiZm9jdXNcIilcblxuICAgIGV4cGVjdCh3cmFwcGVyLmZpbmQoXCJQb3BvdmVyXCIpLmF0KDApLnByb3BzKCkudmlzaWJsZSkudG9CZSh0cnVlKVxuXG4gICAgd3JhcHBlci5maW5kKFwiaW5wdXRcIikuc2ltdWxhdGUoXCJjaGFuZ2VcIiwgeyB0YXJnZXQ6IHsgdmFsdWU6IFwiXCIgfSB9KVxuICAgIGV4cGVjdCh3cmFwcGVyLmZpbmQoXCJpbnB1dFwiKS5wcm9wcygpLnZhbHVlKS50b0JlKFwiXCIpXG5cbiAgICB3cmFwcGVyXG4gICAgICAuZmluZChcImlucHV0XCIpXG4gICAgICAuc2ltdWxhdGUoXCJjaGFuZ2VcIiwgeyB0YXJnZXQ6IHsgdmFsdWU6IFwiMjAyMC0wMi0yMiAtIDIwMjAtMDItMjhcIiB9IH0pXG4gICAgZXhwZWN0KHdyYXBwZXIuZmluZChcImlucHV0XCIpLnByb3BzKCkudmFsdWUpLnRvQmUoXCIyMDIwLTAyLTIyIC0gMjAyMC0wMi0yOFwiKVxuXG4gICAgYWN0KCgpID0+IHtcbiAgICAgIHdyYXBwZXIuZmluZChcImlucHV0XCIpLnNpbXVsYXRlKFwia2V5ZG93blwiLCB7IGtleTogXCJlbnRlclwiLCBrZXlDb2RlOiAxMyB9KVxuICAgICAgamVzdC5ydW5BbGxUaW1lcnMoKVxuICAgICAgd3JhcHBlci51cGRhdGUoKVxuICAgICAgZXhwZWN0KHdyYXBwZXIuZmluZChcIlBvcG92ZXJcIikuYXQoMCkucHJvcHMoKS52aXNpYmxlKS50b0JlKGZhbHNlKVxuICAgIH0pXG5cbiAgICBhY3QoKCkgPT4ge1xuICAgICAgd3JhcHBlci5maW5kKFwiLmFkdWktZGF0ZS1kYXlcIikuYXQoMTQpLnNpbXVsYXRlKFwiY2xpY2tcIilcbiAgICAgIHdyYXBwZXIuZmluZChcIi5hZHVpLWRhdGUtZGF5XCIpLmF0KDE1KS5zaW11bGF0ZShcImNsaWNrXCIpXG4gICAgICBjb25zdCBleHBlY3RlZFZhbCA9IGNvbnZlcnREYXRlUmFuZ2VUb1N0cmluZyhbXG4gICAgICAgIG5ldyBEYXRlKFxuICAgICAgICAgIHdyYXBwZXIuZmluZChcIi5hZHVpLWRhdGUtZGF5XCIpLmF0KDE0KS5wcm9wcygpW1wiYXJpYS1sYWJlbFwiXSArIFwiIDEyOjAwXCJcbiAgICAgICAgKSxcbiAgICAgICAgbmV3IERhdGUoXG4gICAgICAgICAgd3JhcHBlci5maW5kKFwiLmFkdWktZGF0ZS1kYXlcIikuYXQoMTUpLnByb3BzKClbXCJhcmlhLWxhYmVsXCJdICsgXCIgMTI6MDBcIlxuICAgICAgICApLFxuICAgICAgXSlcbiAgICAgIC8vIOetieW+hSAzNTBtc1xuICAgICAgamVzdC5hZHZhbmNlVGltZXJzQnlUaW1lKDM1MClcbiAgICAgIHdyYXBwZXIudXBkYXRlKClcbiAgICAgIGV4cGVjdCh3cmFwcGVyLmZpbmQoXCJQb3BvdmVyXCIpLmF0KDApLnByb3BzKCkudmlzaWJsZSkudG9CZShmYWxzZSlcbiAgICB9KVxuICB9KVxuXG4gIGl0KFwi5aSW6YOo5o6n5Yi2XCIsICgpID0+IHtcbiAgICAvKipcbiAgICAgKiDku6XkuIvpg73mmK/pqozor4HlpJbpg6jmjqfliLbml7blhoXpg6jnmoTlpLHmlYhcbiAgICAgKi9cbiAgICBjb25zdCB2YWwgPSBbbmV3IERhdGUoKSwgbmV3IERhdGUoKV1cbiAgICBjb25zdCB3cmFwcGVyID0gbW91bnQoXG4gICAgICA8UmFuZ2VQaWNrZXIgdmFsdWU9e1tuZXcgRGF0ZSgpLCBuZXcgRGF0ZSgpXX0gdmlzaWJsZSBjbG9zZU9uU2VsZWN0IC8+XG4gICAgKVxuICAgIGV4cGVjdCh3cmFwcGVyLmZpbmQoXCJpbnB1dFwiKS5hdCgwKS5wcm9wcygpLnZhbHVlKS50b0JlKFxuICAgICAgY29udmVydERhdGVSYW5nZVRvU3RyaW5nKHZhbClcbiAgICApXG5cbiAgICBleHBlY3Qod3JhcHBlci5maW5kKFwiUG9wb3ZlclwiKS5hdCgwKS5wcm9wcygpLnZpc2libGUpLnRvQmUodHJ1ZSlcblxuICAgIGFjdCgoKSA9PiB7XG4gICAgICB3cmFwcGVyLmZpbmQoXCIuYWR1aS1kYXRlLWRheVwiKS5hdCgxNCkuc2ltdWxhdGUoXCJjbGlja1wiKVxuICAgICAgd3JhcHBlci5maW5kKFwiLmFkdWktZGF0ZS1kYXlcIikuYXQoMTUpLnNpbXVsYXRlKFwiY2xpY2tcIilcbiAgICAgIC8vIOetieW+hSAzNTBtc1xuICAgICAgamVzdC5hZHZhbmNlVGltZXJzQnlUaW1lKDM1MClcbiAgICAgIHdyYXBwZXIudXBkYXRlKClcbiAgICAgIGV4cGVjdCh3cmFwcGVyLmZpbmQoXCJpbnB1dFwiKS5hdCgwKS5wcm9wcygpLnZhbHVlKS50b0JlKFxuICAgICAgICBjb252ZXJ0RGF0ZVJhbmdlVG9TdHJpbmcodmFsKVxuICAgICAgKVxuICAgIH0pXG5cbiAgICBhY3QoKCkgPT4ge1xuICAgICAgd3JhcHBlci5maW5kKFwiLmFkdWktZGF0ZS1kYXlcIikuYXQoMTUpLnNpbXVsYXRlKFwiY2xpY2tcIilcbiAgICAgIHdyYXBwZXIuZmluZChcIi5hZHVpLWRhdGUtZGF5XCIpLmF0KDE2KS5zaW11bGF0ZShcImNsaWNrXCIpXG4gICAgICAvLyDnrYnlvoUgMzUwbXNcbiAgICAgIGplc3QuYWR2YW5jZVRpbWVyc0J5VGltZSgzNTApXG4gICAgICB3cmFwcGVyLnVwZGF0ZSgpXG4gICAgICBleHBlY3Qod3JhcHBlci5maW5kKFwiaW5wdXRcIikuYXQoMCkucHJvcHMoKS52YWx1ZSkudG9CZShcbiAgICAgICAgY29udmVydERhdGVSYW5nZVRvU3RyaW5nKHZhbClcbiAgICAgIClcbiAgICAgIGV4cGVjdCh3cmFwcGVyLmZpbmQoXCJQb3BvdmVyXCIpLmF0KDApLnByb3BzKCkudmlzaWJsZSkudG9CZSh0cnVlKVxuICAgIH0pXG5cbiAgICAvKipcbiAgICAgKiDku6XkuIvmmK/pqozor4HlpJbpg6jmjqfliLbml7YgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIOeahOacieaViFxuICAgICAqL1xuICAgIGNvbnN0IG1vdW50ZXIgPSBtb3VudCg8UmFuZ2VQaWNrZXJNb3VudGVyIC8+KVxuICAgIGNvbnN0IHRvZGF5ID0gY29udmVydERhdGVSYW5nZVRvU3RyaW5nKG5ldyBEYXRlKCkpXG4gICAgbW91bnRlclxuICAgICAgLmZpbmQoXCJpbnB1dFwiKVxuICAgICAgLnNpbXVsYXRlKFwiY2hhbmdlXCIsIHsgdGFyZ2V0OiB7IHZhbHVlOiBcIjIwMjAtMDItMjIgLSAyMDIwLTAyLTI2XCIgfSB9KVxuICAgIGV4cGVjdChjb252ZXJ0RGF0ZVJhbmdlVG9TdHJpbmcobW91bnRlci5zdGF0ZSgpLnZhbHVlKSkudG9CZShcbiAgICAgIFwiMjAyMC0wMi0yMiAtIDIwMjAtMDItMjZcIlxuICAgIClcbiAgICBtb3VudGVyXG4gICAgICAuZmluZChcImlucHV0XCIpXG4gICAgICAuc2ltdWxhdGUoXCJjaGFuZ2VcIiwgeyB0YXJnZXQ6IHsgdmFsdWU6IFwiMjAyMC0wMi0yNSAtIDIwMjAtMDItMjZcIiB9IH0pXG4gICAgZXhwZWN0KGNvbnZlcnREYXRlUmFuZ2VUb1N0cmluZyhtb3VudGVyLnN0YXRlKCkudmFsdWUpKS50b0JlKFxuICAgICAgXCIyMDIwLTAyLTI1IC0gMjAyMC0wMi0yNlwiXG4gICAgKVxuICAgIG1vdW50ZXIuZmluZChcImlucHV0XCIpLnNpbXVsYXRlKFwiY2hhbmdlXCIsIHsgdGFyZ2V0OiB7IHZhbHVlOiBcIlwiIH0gfSlcbiAgICBleHBlY3QoY29udmVydERhdGVSYW5nZVRvU3RyaW5nKG1vdW50ZXIuc3RhdGUoKS52YWx1ZSkpLnRvQmUoXCJcIilcbiAgICBleHBlY3QobW91bnRlci5maW5kKFwiUG9wb3ZlclwiKS5hdCgwKS5wcm9wcygpLnZpc2libGUpLnRvQmUodHJ1ZSlcbiAgICBhY3QoKCkgPT4ge1xuICAgICAgbW91bnRlci5maW5kKFwiLmFkdWktZGF0ZS1kYXlcIikuYXQoMTUpLnNpbXVsYXRlKFwiY2xpY2tcIilcbiAgICAgIG1vdW50ZXIuZmluZChcIi5hZHVpLWRhdGUtZGF5XCIpLmF0KDE2KS5zaW11bGF0ZShcImNsaWNrXCIpXG4gICAgICBqZXN0LnJ1bkFsbFRpbWVycygpXG4gICAgICBtb3VudGVyLnVwZGF0ZSgpXG4gICAgfSlcbiAgfSlcblxuICBpdChcIkRheVBpY2tlciDmk43kvZxcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKVxuICAgIGNvbnN0IHdyYXBwZXIgPSBtb3VudCg8UmFuZ2VQaWNrZXJNb3VudGVyIC8+KVxuICAgIGNvbnN0IGV4cGVjdGVkUmFuZ2UgPSBbXVxuICAgIGFjdCgoKSA9PiB7XG4gICAgICB3cmFwcGVyLmZpbmQoXCIuYWR1aS1kYXRlLWRheVwiKS5hdCgxMCkuc2ltdWxhdGUoXCJjbGlja1wiKVxuICAgICAgZXhwZWN0ZWRSYW5nZVswXSA9IG5ldyBEYXRlKFxuICAgICAgICB3cmFwcGVyLmZpbmQoXCIuYWR1aS1kYXRlLWRheVwiKS5hdCgxMCkucHJvcHMoKVtcImFyaWEtbGFiZWxcIl0gKyBcIiAxMjowMFwiXG4gICAgICApXG4gICAgICB3cmFwcGVyLmZpbmQoXCJidXR0b25cIikuYXQoMSkuc2ltdWxhdGUoXCJjbGlja1wiKVxuICAgICAgd3JhcHBlci5maW5kKFwiYnV0dG9uXCIpLmF0KDEpLnNpbXVsYXRlKFwiY2xpY2tcIilcbiAgICAgIGplc3QucnVuQWxsVGltZXJzKClcbiAgICAgIHdyYXBwZXIudXBkYXRlKClcbiAgICB9KVxuXG4gICAgYWN0KCgpID0+IHtcbiAgICAgIHdyYXBwZXIuZmluZChcIi5hZHVpLWRhdGUtZGF5XCIpLmF0KDEwKS5zaW11bGF0ZShcImNsaWNrXCIpXG4gICAgICBleHBlY3RlZFJhbmdlWzFdID0gbmV3IERhdGUoXG4gICAgICAgIHdyYXBwZXIuZmluZChcIi5hZHVpLWRhdGUtZGF5XCIpLmF0KDEwKS5wcm9wcygpW1wiYXJpYS1sYWJlbFwiXSArIFwiIDEyOjAwXCJcbiAgICAgIClcbiAgICAgIGplc3QucnVuQWxsVGltZXJzKClcbiAgICAgIHdyYXBwZXIudXBkYXRlKClcbiAgICAgIGV4cGVjdChcbiAgICAgICAgY29udmVydERhdGVSYW5nZVRvU3RyaW5nKHdyYXBwZXIuc3RhdGUoKS52YWx1ZSkgPT09XG4gICAgICAgICAgY29udmVydERhdGVSYW5nZVRvU3RyaW5nKGV4cGVjdGVkUmFuZ2UpXG4gICAgICApLnRvQmUodHJ1ZSlcbiAgICB9KVxuXG4gICAgYWN0KCgpID0+IHtcbiAgICAgIHdyYXBwZXJcbiAgICAgICAgLmZpbmQoXCIuYWR1aS1kYXRlLXNob3J0Y3V0XCIpXG4gICAgICAgIC5hdCgwKVxuICAgICAgICAuc2ltdWxhdGUoXCJrZXlkb3duXCIsIHsga2V5OiBcImVudGVyXCIsIGtleUNvZGU6IDEzIH0pXG4gICAgICBqZXN0LnJ1bkFsbFRpbWVycygpXG4gICAgICB3cmFwcGVyLnVwZGF0ZSgpXG4gICAgICBleHBlY3QoY29udmVydERhdGVSYW5nZVRvU3RyaW5nKHdyYXBwZXIuc3RhdGUoKS52YWx1ZSkpLnRvQmUoXG4gICAgICAgIFwiMjAyMC0xMC0wMSAtIDIwMjAtMTAtMDdcIlxuICAgICAgKVxuICAgIH0pXG5cbiAgICBjb25zdCB3cmFwcGVyRm9yQ292ZXJhZ2UwID0gbW91bnQoPFJhbmdlUGlja2VyTW91bnRlciBkaXNhYmxlZCAvPilcbiAgICB3cmFwcGVyRm9yQ292ZXJhZ2UwLnN0YXRlKCkuY29tcG9uZW50LmhhbmRsZVZpc2libGVDaGFuZ2UoZmFsc2UpXG4gICAgd3JhcHBlckZvckNvdmVyYWdlMC5maW5kKFwiLmFkdWktZGF0ZS1kYXlcIikuYXQoMTQpLnNpbXVsYXRlKFwibW91c2VlbnRlclwiKVxuICAgIHdyYXBwZXJGb3JDb3ZlcmFnZTAuZmluZChcIi5hZHVpLWRhdGUtZGF5XCIpLmF0KDE0KS5zaW11bGF0ZShcIm1vdXNlbGVhdmVcIilcbiAgICBqZXN0LnJ1bkFsbFRpbWVycygpXG4gIH0pXG5cbiAgaXQoXCLmtYvor5UgbWluIG1heFwiLCAoKSA9PiB7XG4gICAgY29uc3Qgd3JhcHBlciA9IG1vdW50KFxuICAgICAgPFJhbmdlUGlja2VyTW91bnRlclxuICAgICAgICBtaW5EYXRlPXtuZXcgRGF0ZShcIjIwMTgtMTItMzFcIil9XG4gICAgICAgIG1heERhdGU9e25ldyBEYXRlKFwiMjAyMC0wMS0wMVwiKX1cbiAgICAgIC8+XG4gICAgKVxuICAgIGFjdCgoKSA9PiB7XG4gICAgICB3cmFwcGVyXG4gICAgICAgIC5maW5kKFwic2VsZWN0XCIpXG4gICAgICAgIC5hdCgwKVxuICAgICAgICAuc2ltdWxhdGUoXCJjaGFuZ2VcIiwgeyB0YXJnZXQ6IHsgdmFsdWU6IFwiMjAxOVwiIH0gfSlcbiAgICAgIHdyYXBwZXJcbiAgICAgICAgLmZpbmQoXCJzZWxlY3RcIilcbiAgICAgICAgLmF0KDEpXG4gICAgICAgIC5zaW11bGF0ZShcImNoYW5nZVwiLCB7IHRhcmdldDogeyB2YWx1ZTogXCIxXCIgfSB9KVxuICAgICAgamVzdC5ydW5BbGxUaW1lcnMoKVxuICAgICAgd3JhcHBlci51cGRhdGUoKVxuICAgICAgd3JhcHBlci5maW5kKFwiLmFkdWktZGF0ZS1kYXlcIikuYXQoMTQpLnNpbXVsYXRlKFwiY2xpY2tcIilcbiAgICAgIGplc3QucnVuQWxsVGltZXJzKClcbiAgICAgIHdyYXBwZXIudXBkYXRlKClcbiAgICAgIHdyYXBwZXJcbiAgICAgICAgLmZpbmQoXCJzZWxlY3RcIilcbiAgICAgICAgLmF0KDEpXG4gICAgICAgIC5zaW11bGF0ZShcImNoYW5nZVwiLCB7IHRhcmdldDogeyB2YWx1ZTogXCIxMVwiIH0gfSlcbiAgICAgIHdyYXBwZXJcbiAgICAgICAgLmZpbmQoXCJzZWxlY3RcIilcbiAgICAgICAgLmF0KDApXG4gICAgICAgIC5zaW11bGF0ZShcImNoYW5nZVwiLCB7IHRhcmdldDogeyB2YWx1ZTogXCIyMDIwXCIgfSB9KVxuICAgICAgamVzdC5ydW5BbGxUaW1lcnMoKVxuICAgICAgd3JhcHBlci51cGRhdGUoKVxuICAgICAgd3JhcHBlci5maW5kKFwiLmFkdWktZGF0ZS1kYXlcIikuYXQoMTQpLnNpbXVsYXRlKFwiY2xpY2tcIilcbiAgICAgIGplc3QucnVuQWxsVGltZXJzKClcbiAgICAgIHdyYXBwZXIudXBkYXRlKClcbiAgICB9KVxuICB9KVxufSlcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFFQSxPQUFPQSxLQUFLLElBQUlDLFNBQVMsUUFBUSxPQUFPO0FBQ3hDLFNBQVNDLEtBQUssUUFBUSxRQUFRO0FBQzlCLE9BQU9DLFlBQVksTUFBTSxxQkFBcUI7QUFDOUMsT0FBT0MsVUFBVSxNQUFNLElBQUk7QUFDM0IsU0FBU0Msd0JBQXdCLFFBQTZCLFNBQVM7QUFDdkUsU0FBU0MsR0FBRyxRQUFRLHNCQUFzQjtBQUUxQyxJQUFNQyxXQUFXLEdBQUdILFVBQVUsQ0FBQ0csV0FBVztBQUFBLElBRXBDQyxrQkFBa0IsYUFBQUMsVUFBQTtFQUFBLFNBQUFELG1CQUFBO0lBQUEsSUFBQUUsS0FBQTtJQUFBQyxlQUFBLE9BQUFILGtCQUFBO0lBQUEsU0FBQUksSUFBQSxHQUFBQyxTQUFBLENBQUFDLE1BQUEsRUFBQUMsSUFBQSxPQUFBQyxLQUFBLENBQUFKLElBQUEsR0FBQUssSUFBQSxNQUFBQSxJQUFBLEdBQUFMLElBQUEsRUFBQUssSUFBQTtNQUFBRixJQUFBLENBQUFFLElBQUEsSUFBQUosU0FBQSxDQUFBSSxJQUFBO0lBQUE7SUFBQVAsS0FBQSxHQUFBUSxVQUFBLE9BQUFWLGtCQUFBLEtBQUFXLE1BQUEsQ0FBQUosSUFBQTtJQUFBTCxLQUFBLENBQ3RCVSxLQUFLLEdBQUc7TUFDTkMsU0FBUyxFQUFFLElBQUk7TUFDZkMsS0FBSyxFQUFFLENBQUMsSUFBSUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJQSxJQUFJLENBQUMsQ0FBQyxDQUFDO01BQy9CQyxPQUFPLEVBQUU7SUFDWCxDQUFDO0lBQUEsT0FBQWQsS0FBQTtFQUFBO0VBQUFlLFNBQUEsQ0FBQWpCLGtCQUFBLEVBQUFDLFVBQUE7RUFBQSxPQUFBaUIsWUFBQSxDQUFBbEIsa0JBQUE7SUFBQW1CLEdBQUE7SUFB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