!function(Q){function F(U){if(B[U])return B[U].exports;var I=B[U]={i:U,l:!1,exports:{}};return Q[U].call(I.exports,I,I.exports,F),I.l=!0,I.exports}var B={};F.m=Q,F.c=B,F.d=function(Q,B,U){F.o(Q,B)||Object.defineProperty(Q,B,{configurable:!1,enumerable:!0,get:U})},F.n=function(Q){var B=Q&&Q.__esModule?function(){return Q.default}:function(){return Q};return F.d(B,"a",B),B},F.o=function(Q,F){return Object.prototype.hasOwnProperty.call(Q,F)},F.p="",F(F.s=3)}([function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n  value: true\n});\nvar ONE_DAY = 86400;\n\nexports.ONE_DAY = ONE_DAY;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvdGltZXBpY2tlci9jb25zdGFudHMuanM/NTY5MSJdLCJuYW1lcyI6WyJPTkVfREFZIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBLElBQU1BLFVBQVUsS0FBaEI7O1FBRVNBLE8sR0FBQUEsTyIsImZpbGUiOiIwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgT05FX0RBWSA9IDg2NDAwO1xuXG5leHBvcnQgeyBPTkVfREFZIH07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvdGltZXBpY2tlci9jb25zdGFudHMuanMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///0\n')},function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n  value: true\n});\n\nvar _constants = __webpack_require__(0);\n\nvar roundingFunction = function roundingFunction(seconds, settings) {\n  if (seconds === null) {\n    return null;\n  } else if (typeof settings.step !== "number") {\n    // TODO: nearest fit irregular steps\n    return seconds;\n  } else {\n    var offset = seconds % (settings.step * 60); // step is in minutes\n\n    var start = settings.minTime || 0;\n\n    // adjust offset by start mod step so that the offset is aligned not to 00:00 but to the start\n    offset -= start % (settings.step * 60);\n\n    if (offset >= settings.step * 30) {\n      // if offset is larger than a half step, round up\n      seconds += settings.step * 60 - offset;\n    } else {\n      // round down\n      seconds -= offset;\n    }\n\n    return _moduloSeconds(seconds, settings);\n  }\n};\n\nfunction _moduloSeconds(seconds, settings) {\n  if (seconds == _constants.ONE_DAY && settings.show2400) {\n    return seconds;\n  }\n\n  return seconds % _constants.ONE_DAY;\n}\n\nexports.default = roundingFunction;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvdGltZXBpY2tlci9yb3VuZGluZy5qcz9lNGEzIl0sIm5hbWVzIjpbInJvdW5kaW5nRnVuY3Rpb24iLCJzZWNvbmRzIiwic2V0dGluZ3MiLCJzdGVwIiwib2Zmc2V0Iiwic3RhcnQiLCJtaW5UaW1lIiwiX21vZHVsb1NlY29uZHMiLCJzaG93MjQwMCJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7O0FBRUEsSUFBTUEsbUJBQW1CLFNBQW5CQSxnQkFBbUIsQ0FBQ0MsT0FBRCxFQUFVQyxRQUFWLEVBQXVCO0FBQzlDLE1BQUlELFlBQVksSUFBaEIsRUFBc0I7QUFDcEIsV0FBTyxJQUFQO0FBQ0QsR0FGRCxNQUVPLElBQUksT0FBT0MsU0FBU0MsSUFBaEIsS0FBeUIsUUFBN0IsRUFBdUM7QUFDNUM7QUFDQSxXQUFPRixPQUFQO0FBQ0QsR0FITSxNQUdBO0FBQ0wsUUFBSUcsU0FBU0gsV0FBV0MsU0FBU0MsSUFBVCxHQUFnQixFQUEzQixDQUFiLENBREssQ0FDd0M7O0FBRTdDLFFBQUlFLFFBQVFILFNBQVNJLE9BQVQsSUFBb0IsQ0FBaEM7O0FBRUE7QUFDQUYsY0FBVUMsU0FBU0gsU0FBU0MsSUFBVCxHQUFnQixFQUF6QixDQUFWOztBQUVBLFFBQUlDLFVBQVVGLFNBQVNDLElBQVQsR0FBZ0IsRUFBOUIsRUFBa0M7QUFDaEM7QUFDQUYsaUJBQVdDLFNBQVNDLElBQVQsR0FBZ0IsRUFBaEIsR0FBcUJDLE1BQWhDO0FBQ0QsS0FIRCxNQUdPO0FBQ0w7QUFDQUgsaUJBQVdHLE1BQVg7QUFDRDs7QUFFRCxXQUFPRyxlQUFlTixPQUFmLEVBQXdCQyxRQUF4QixDQUFQO0FBQ0Q7QUFDRixDQXhCRDs7QUEwQkEsU0FBU0ssY0FBVCxDQUF3Qk4sT0FBeEIsRUFBaUNDLFFBQWpDLEVBQTJDO0FBQ3pDLE1BQUlELGlDQUFzQkMsU0FBU00sUUFBbkMsRUFBNkM7QUFDM0MsV0FBT1AsT0FBUDtBQUNEOztBQUVELFNBQU9BLDRCQUFQO0FBQ0Q7O2tCQUVjRCxnQiIsImZpbGUiOiIxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT05FX0RBWSB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuY29uc3Qgcm91bmRpbmdGdW5jdGlvbiA9IChzZWNvbmRzLCBzZXR0aW5ncykgPT4ge1xuICBpZiAoc2Vjb25kcyA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBzZXR0aW5ncy5zdGVwICE9PSBcIm51bWJlclwiKSB7XG4gICAgLy8gVE9ETzogbmVhcmVzdCBmaXQgaXJyZWd1bGFyIHN0ZXBzXG4gICAgcmV0dXJuIHNlY29uZHM7XG4gIH0gZWxzZSB7XG4gICAgdmFyIG9mZnNldCA9IHNlY29uZHMgJSAoc2V0dGluZ3Muc3RlcCAqIDYwKTsgLy8gc3RlcCBpcyBpbiBtaW51dGVzXG5cbiAgICB2YXIgc3RhcnQgPSBzZXR0aW5ncy5taW5UaW1lIHx8IDA7XG5cbiAgICAvLyBhZGp1c3Qgb2Zmc2V0IGJ5IHN0YXJ0IG1vZCBzdGVwIHNvIHRoYXQgdGhlIG9mZnNldCBpcyBhbGlnbmVkIG5vdCB0byAwMDowMCBidXQgdG8gdGhlIHN0YXJ0XG4gICAgb2Zmc2V0IC09IHN0YXJ0ICUgKHNldHRpbmdzLnN0ZXAgKiA2MCk7XG5cbiAgICBpZiAob2Zmc2V0ID49IHNldHRpbmdzLnN0ZXAgKiAzMCkge1xuICAgICAgLy8gaWYgb2Zmc2V0IGlzIGxhcmdlciB0aGFuIGEgaGFsZiBzdGVwLCByb3VuZCB1cFxuICAgICAgc2Vjb25kcyArPSBzZXR0aW5ncy5zdGVwICogNjAgLSBvZmZzZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHJvdW5kIGRvd25cbiAgICAgIHNlY29uZHMgLT0gb2Zmc2V0O1xuICAgIH1cblxuICAgIHJldHVybiBfbW9kdWxvU2Vjb25kcyhzZWNvbmRzLCBzZXR0aW5ncyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX21vZHVsb1NlY29uZHMoc2Vjb25kcywgc2V0dGluZ3MpIHtcbiAgaWYgKHNlY29uZHMgPT0gT05FX0RBWSAmJiBzZXR0aW5ncy5zaG93MjQwMCkge1xuICAgIHJldHVybiBzZWNvbmRzO1xuICB9XG5cbiAgcmV0dXJuIHNlY29uZHMgJSBPTkVfREFZO1xufVxuXG5leHBvcnQgZGVmYXVsdCByb3VuZGluZ0Z1bmN0aW9uO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3RpbWVwaWNrZXIvcm91bmRpbmcuanMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1\n')},function(module,exports){eval("module.exports = jQuery;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJqUXVlcnlcIj8wY2I4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBIiwiZmlsZSI6IjIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGpRdWVyeTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBleHRlcm5hbCBcImpRdWVyeVwiXG4vLyBtb2R1bGUgaWQgPSAyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2\n")},function(module,exports,__webpack_require__){"use strict";eval('/* WEBPACK VAR INJECTION */(function(module) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\nvar _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; /*!\n                                                                                                                                                                                                                                                                               * jquery-timepicker v1.11.14 - A jQuery timepicker plugin inspired by Google Calendar. It supports both mouse and keyboard navigation.\n                                                                                                                                                                                                                                                                               * Copyright (c) 2015 Jon Thornton - http://jonthornton.github.com/jquery-timepicker/\n                                                                                                                                                                                                                                                                               * License: MIT\n                                                                                                                                                                                                                                                                               */\n\n// import jQuery from \'jquery\';\n\n\nvar _timepicker = __webpack_require__(5);\n\nvar _timepicker2 = _interopRequireDefault(_timepicker);\n\nvar _rounding = __webpack_require__(1);\n\nvar _rounding2 = _interopRequireDefault(_rounding);\n\nvar _constants = __webpack_require__(0);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n(function (factory) {\n  if (( false ? \'undefined\' : _typeof(exports)) === "object" && exports && ( false ? \'undefined\' : _typeof(module)) === "object" && module && module.exports === exports) {\n    // Browserify. Attach to jQuery module.\n    factory(__webpack_require__(2));\n  } else if (true) {\n    // AMD. Register as an anonymous module.\n    !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(2)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === \'function\' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n  } else {\n    // Browser globals\n    factory(jQuery);\n  }\n})(function ($) {\n  var _lang = {};\n\n  var methods = {\n    init: function init(options) {\n      return this.each(function () {\n        var self = $(this);\n\n        var tp = new _timepicker2.default(this, options);\n        var settings = tp.settings;\n        _lang = settings.lang;\n\n        self.data("timepicker-settings", settings);\n        self.data("timepicker-obj", tp);\n        self.addClass("ui-timepicker-input");\n\n        if (settings.useSelect) {\n          _render(self);\n        } else {\n          self.prop("autocomplete", "off");\n          if (settings.showOn) {\n            for (var i in settings.showOn) {\n              self.on(settings.showOn[i] + ".timepicker", methods.show);\n            }\n          }\n          self.on("change.timepicker", _formatValue);\n          self.on("keydown.timepicker", _keydownhandler);\n          self.on("keyup.timepicker", _keyuphandler);\n          if (settings.disableTextInput) {\n            self.on("keydown.timepicker", _disableTextInputHandler);\n          }\n          self.on("cut.timepicker", _keyuphandler);\n          self.on("paste.timepicker", _keyuphandler);\n\n          _formatValue.call(self.get(0), null, "initial");\n        }\n      });\n    },\n\n    show: function show(e) {\n      var self = $(this);\n      var settings = self.data("timepicker-settings");\n      var tp = self.data("timepicker-obj");\n\n      if (e) {\n        e.preventDefault();\n      }\n\n      if (settings.useSelect) {\n        self.data("timepicker-list").focus();\n        return;\n      }\n\n      if (_hideKeyboard(self)) {\n        // block the keyboard on mobile devices\n        self.blur();\n      }\n\n      var list = self.data("timepicker-list");\n\n      // check if input is readonly\n      if (self.prop("readonly")) {\n        return;\n      }\n\n      // check if list needs to be rendered\n      if (!list || list.length === 0 || typeof settings.durationTime === "function") {\n        _render(self);\n        list = self.data("timepicker-list");\n      }\n\n      if (_isVisible(list)) {\n        return;\n      }\n\n      self.data("ui-timepicker-value", self.val());\n      _setSelected(self, list);\n\n      // make sure other pickers are hidden\n      methods.hide();\n\n      // position the dropdown relative to the input\n      list.show();\n      var listOffset = {};\n\n      if (settings.orientation.match(/r/)) {\n        // right-align the dropdown\n        listOffset.left = self.offset().left + self.outerWidth() - list.outerWidth() + parseInt(list.css("marginLeft").replace("px", ""), 10);\n      } else {\n        // left-align the dropdown\n        listOffset.left = self.offset().left + parseInt(list.css("marginLeft").replace("px", ""), 10);\n      }\n\n      var verticalOrientation;\n      if (settings.orientation.match(/t/)) {\n        verticalOrientation = "t";\n      } else if (settings.orientation.match(/b/)) {\n        verticalOrientation = "b";\n      } else if (self.offset().top + self.outerHeight(true) + list.outerHeight() > $(window).height() + $(window).scrollTop()) {\n        verticalOrientation = "t";\n      } else {\n        verticalOrientation = "b";\n      }\n\n      if (verticalOrientation == "t") {\n        // position the dropdown on top\n        list.addClass("ui-timepicker-positioned-top");\n        listOffset.top = self.offset().top - list.outerHeight() + parseInt(list.css("marginTop").replace("px", ""), 10);\n      } else {\n        // put it under the input\n        list.removeClass("ui-timepicker-positioned-top");\n        listOffset.top = self.offset().top + self.outerHeight() + parseInt(list.css("marginTop").replace("px", ""), 10);\n      }\n\n      list.offset(listOffset);\n\n      // position scrolling\n      var selected = list.find(".ui-timepicker-selected");\n\n      if (!selected.length) {\n        var timeInt = tp.time2int(_getTimeValue(self));\n        if (timeInt !== null) {\n          selected = _findRow(self, list, timeInt);\n        } else if (settings.scrollDefault) {\n          selected = _findRow(self, list, settings.scrollDefault());\n        }\n      }\n\n      // if not found or disabled, intelligently find first selectable element\n      if (!selected.length || selected.hasClass("ui-timepicker-disabled")) {\n        selected = list.find("li:not(.ui-timepicker-disabled):first");\n      }\n\n      if (selected && selected.length) {\n        var topOffset = list.scrollTop() + selected.position().top - selected.outerHeight();\n        list.scrollTop(topOffset);\n      } else {\n        list.scrollTop(0);\n      }\n\n      // prevent scroll propagation\n      if (settings.stopScrollPropagation) {\n        $(document).on("wheel.ui-timepicker", ".ui-timepicker-wrapper", function (e) {\n          e.preventDefault();\n          var currentScroll = $(this).scrollTop();\n          $(this).scrollTop(currentScroll + e.originalEvent.deltaY);\n        });\n      }\n\n      // attach close handlers\n      $(document).on("touchstart.ui-timepicker mousedown.ui-timepicker", _closeHandler);\n      $(window).on("resize.ui-timepicker", _closeHandler);\n      if (settings.closeOnWindowScroll) {\n        $(document).on("scroll.ui-timepicker", _closeHandler);\n      }\n\n      self.trigger("showTimepicker");\n\n      return this;\n    },\n\n    hide: function hide(e) {\n      var self = $(this);\n      var settings = self.data("timepicker-settings");\n\n      if (settings && settings.useSelect) {\n        self.blur();\n      }\n\n      $(".ui-timepicker-wrapper").each(function () {\n        var list = $(this);\n        if (!_isVisible(list)) {\n          return;\n        }\n\n        var self = list.data("timepicker-input");\n        var settings = self.data("timepicker-settings");\n\n        if (settings && settings.selectOnBlur) {\n          _selectValue(self);\n        }\n\n        list.hide();\n        self.trigger("hideTimepicker");\n      });\n\n      return this;\n    },\n\n    option: function option(key, value) {\n      if (typeof key == "string" && typeof value == "undefined") {\n        return $(this).data("timepicker-settings")[key];\n      }\n\n      return this.each(function () {\n        var self = $(this);\n        var settings = self.data("timepicker-settings");\n        var tp = self.data("timepicker-obj");\n        var list = self.data("timepicker-list");\n\n        if ((typeof key === \'undefined\' ? \'undefined\' : _typeof(key)) == "object") {\n          settings = $.extend(settings, key);\n        } else if (typeof key == "string") {\n          settings[key] = value;\n        }\n\n        settings = tp.parseSettings(settings);\n\n        self.data("timepicker-settings", settings);\n\n        _formatValue.call(self.get(0), { type: "change" }, "initial");\n\n        if (list) {\n          list.remove();\n          self.data("timepicker-list", false);\n        }\n\n        if (settings.useSelect) {\n          _render(self);\n        }\n      });\n    },\n\n    getSecondsFromMidnight: function getSecondsFromMidnight() {\n      var self = $(this);\n      var tp = self.data("timepicker-obj");\n      return tp.time2int(_getTimeValue(this));\n    },\n\n    getTime: function getTime(relative_date) {\n      var self = $(this);\n      var tp = self.data("timepicker-obj");\n\n      var time_string = _getTimeValue(self);\n      if (!time_string) {\n        return null;\n      }\n\n      var offset = tp.time2int(time_string);\n      if (offset === null) {\n        return null;\n      }\n\n      if (!relative_date) {\n        relative_date = new Date();\n      }\n\n      // construct a Date from relative date, and offset\'s time\n      var time = new Date(relative_date);\n      time.setHours(offset / 3600);\n      time.setMinutes(offset % 3600 / 60);\n      time.setSeconds(offset % 60);\n      time.setMilliseconds(0);\n\n      return time;\n    },\n\n    isVisible: function isVisible() {\n      var self = this;\n      var list = self.data("timepicker-list");\n      return !!(list && _isVisible(list));\n    },\n\n    setTime: function setTime(value) {\n      var self = this;\n      var settings = self.data("timepicker-settings");\n      var tp = self.data("timepicker-obj");\n\n      tp.seconds = tp.time2int(value);\n\n      if (settings.forceRoundTime) {\n        var prettyTime = _roundAndFormatTime(tp.seconds, settings);\n      } else {\n        var prettyTime = _int2time(tp.seconds, settings);\n      }\n\n      if (value && prettyTime === null && settings.noneOption) {\n        prettyTime = value;\n      }\n\n      _setTimeValue(self, prettyTime, "initial");\n      _formatValue.call(self.get(0), { type: "change" }, "initial");\n\n      if (self.data("timepicker-list")) {\n        _setSelected(self, self.data("timepicker-list"));\n      }\n\n      return this;\n    },\n\n    remove: function remove() {\n      var self = this;\n\n      // check if this element is a timepicker\n      if (!self.hasClass("ui-timepicker-input")) {\n        return;\n      }\n\n      var settings = self.data("timepicker-settings");\n      self.removeAttr("autocomplete", "off");\n      self.removeClass("ui-timepicker-input");\n      self.removeData("timepicker-settings");\n      self.removeData("timepicker-obj");\n      self.off(".timepicker");\n\n      // timepicker-list won\'t be present unless the user has interacted with this timepicker\n      if (self.data("timepicker-list")) {\n        self.data("timepicker-list").remove();\n      }\n\n      if (settings.useSelect) {\n        self.show();\n      }\n\n      self.removeData("timepicker-list");\n\n      return this;\n    }\n  };\n\n  // private methods\n\n  function _isVisible(elem) {\n    var el = elem[0];\n    return el.offsetWidth > 0 && el.offsetHeight > 0;\n  }\n\n  function _render(self) {\n    var settings = self.data("timepicker-settings");\n    var list = self.data("timepicker-list");\n    var tp = self.data("timepicker-obj");\n\n    if (list && list.length) {\n      list.remove();\n      self.data("timepicker-list", false);\n    }\n\n    if (settings.useSelect) {\n      list = $("<select />", { class: "ui-timepicker-select" });\n      var wrapped_list = list;\n    } else {\n      list = $("<ul />", { class: "ui-timepicker-list" });\n\n      var wrapped_list = $("<div />", {\n        class: "ui-timepicker-wrapper",\n        tabindex: -1\n      });\n      wrapped_list.css({ display: "none", position: "absolute" }).append(list);\n    }\n\n    if (settings.noneOption) {\n      if (settings.noneOption === true) {\n        settings.noneOption = settings.useSelect ? "Time..." : "None";\n      }\n\n      if ($.isArray(settings.noneOption)) {\n        for (var i in settings.noneOption) {\n          if (parseInt(i, 10) == i) {\n            var noneElement = _generateNoneElement(settings.noneOption[i], settings.useSelect);\n            list.append(noneElement);\n          }\n        }\n      } else {\n        var noneElement = _generateNoneElement(settings.noneOption, settings.useSelect);\n        list.append(noneElement);\n      }\n    }\n\n    if (settings.className) {\n      wrapped_list.addClass(settings.className);\n    }\n\n    if ((settings.minTime !== null || settings.durationTime !== null) && settings.showDuration) {\n      var stepval = typeof settings.step == "function" ? "function" : settings.step;\n      wrapped_list.addClass("ui-timepicker-with-duration");\n      wrapped_list.addClass("ui-timepicker-step-" + settings.step);\n    }\n\n    var durStart = settings.minTime;\n    if (typeof settings.durationTime === "function") {\n      durStart = tp.time2int(settings.durationTime());\n    } else if (settings.durationTime !== null) {\n      durStart = settings.durationTime;\n    }\n    var start = settings.minTime !== null ? settings.minTime : 0;\n    var end = settings.maxTime !== null ? settings.maxTime : start + _constants.ONE_DAY - 1;\n\n    if (end < start) {\n      // make sure the end time is greater than start time, otherwise there will be no list to show\n      end += _constants.ONE_DAY;\n    }\n\n    if (end === _constants.ONE_DAY - 1 && $.type(settings.timeFormat) === "string" && settings.show2400) {\n      // show a 24:00 option when using military time\n      end = _constants.ONE_DAY;\n    }\n\n    var dr = settings.disableTimeRanges;\n    var drCur = 0;\n    var drLen = dr.length;\n\n    var stepFunc = settings.step;\n    if (typeof stepFunc != "function") {\n      stepFunc = function stepFunc() {\n        return settings.step;\n      };\n    }\n\n    for (var i = start, j = 0; i <= end; j++, i += stepFunc(j) * 60) {\n      var timeInt = i;\n      var timeString = _int2time(timeInt, settings);\n\n      if (settings.useSelect) {\n        var row = $("<option />", { value: timeString });\n        row.text(timeString);\n      } else {\n        var row = $("<li />");\n        row.addClass(timeInt % _constants.ONE_DAY < _constants.ONE_DAY / 2 ? "ui-timepicker-am" : "ui-timepicker-pm");\n        row.data("time", (0, _rounding2.default)(timeInt, settings));\n        row.text(timeString);\n      }\n\n      if ((settings.minTime !== null || settings.durationTime !== null) && settings.showDuration) {\n        var durationString = _int2duration(i - durStart, settings.step);\n        if (settings.useSelect) {\n          row.text(row.text() + " (" + durationString + ")");\n        } else {\n          var duration = $("<span />", { class: "ui-timepicker-duration" });\n          duration.text(" (" + durationString + ")");\n          row.append(duration);\n        }\n      }\n\n      if (drCur < drLen) {\n        if (timeInt >= dr[drCur][1]) {\n          drCur += 1;\n        }\n\n        if (dr[drCur] && timeInt >= dr[drCur][0] && timeInt < dr[drCur][1]) {\n          if (settings.useSelect) {\n            row.prop("disabled", true);\n          } else {\n            row.addClass("ui-timepicker-disabled");\n          }\n        }\n      }\n\n      list.append(row);\n    }\n\n    wrapped_list.data("timepicker-input", self);\n    self.data("timepicker-list", wrapped_list);\n\n    if (settings.useSelect) {\n      if (self.val()) {\n        list.val(_roundAndFormatTime(tp.time2int(self.val()), settings));\n      }\n\n      list.on("focus", function () {\n        $(this).data("timepicker-input").trigger("showTimepicker");\n      });\n      list.on("blur", function () {\n        $(this).data("timepicker-input").trigger("hideTimepicker");\n      });\n      list.on("change", function () {\n        _setTimeValue(self, $(this).val(), "select");\n      });\n\n      _setTimeValue(self, list.val(), "initial");\n      self.hide().after(list);\n    } else {\n      var appendTo = settings.appendTo;\n      if (typeof appendTo === "string") {\n        appendTo = $(appendTo);\n      } else if (typeof appendTo === "function") {\n        appendTo = appendTo(self);\n      }\n      appendTo.append(wrapped_list);\n      _setSelected(self, list);\n\n      list.on("mousedown click", "li", function (e) {\n        // hack: temporarily disable the focus handler\n        // to deal with the fact that IE fires \'focus\'\n        // events asynchronously\n        self.off("focus.timepicker");\n        self.on("focus.timepicker-ie-hack", function () {\n          self.off("focus.timepicker-ie-hack");\n          self.on("focus.timepicker", methods.show);\n        });\n\n        if (!_hideKeyboard(self)) {\n          self[0].focus();\n        }\n\n        // make sure only the clicked row is selected\n        list.find("li").removeClass("ui-timepicker-selected");\n        $(this).addClass("ui-timepicker-selected");\n\n        if (_selectValue(self)) {\n          self.trigger("hideTimepicker");\n\n          list.on("mouseup.timepicker click.timepicker", "li", function (e) {\n            list.off("mouseup.timepicker click.timepicker");\n            wrapped_list.hide();\n          });\n        }\n      });\n    }\n  }\n\n  function _generateNoneElement(optionValue, useSelect) {\n    var label, className, value;\n\n    if ((typeof optionValue === \'undefined\' ? \'undefined\' : _typeof(optionValue)) == "object") {\n      label = optionValue.label;\n      className = optionValue.className;\n      value = optionValue.value;\n    } else if (typeof optionValue == "string") {\n      label = optionValue;\n      value = \'\';\n    } else {\n      $.error("Invalid noneOption value");\n    }\n\n    if (useSelect) {\n      return $("<option />", {\n        value: value,\n        class: className,\n        text: label\n      });\n    } else {\n      return $("<li />", {\n        class: className,\n        text: label\n      }).data("time", String(value));\n    }\n  }\n\n  function _roundAndFormatTime(seconds, settings) {\n    seconds = settings.roundingFunction(seconds, settings);\n    if (seconds !== null) {\n      return _int2time(seconds, settings);\n    }\n  }\n\n  // event handler to decide whether to close timepicker\n  function _closeHandler(e) {\n    if (e.target == window) {\n      // mobile Chrome fires focus events against window for some reason\n      return;\n    }\n\n    var target = $(e.target);\n\n    if (target.closest(".ui-timepicker-input").length || target.closest(".ui-timepicker-wrapper").length) {\n      // active timepicker was focused. ignore\n      return;\n    }\n\n    methods.hide();\n    $(document).unbind(".ui-timepicker");\n    $(window).unbind(".ui-timepicker");\n  }\n\n  function _hideKeyboard(self) {\n    var settings = self.data("timepicker-settings");\n    return (window.navigator.msMaxTouchPoints || "ontouchstart" in document) && settings.disableTouchKeyboard;\n  }\n\n  function _findRow(self, list, value) {\n    if (!value && value !== 0) {\n      return false;\n    }\n\n    var settings = self.data("timepicker-settings");\n    var out = false;\n    var value = settings.roundingFunction(value, settings);\n\n    // loop through the menu items\n    list.find("li").each(function (i, obj) {\n      var jObj = $(obj);\n      if (typeof jObj.data("time") != "number") {\n        return;\n      }\n\n      if (jObj.data("time") == value) {\n        out = jObj;\n        return false;\n      }\n    });\n\n    return out;\n  }\n\n  function _setSelected(self, list) {\n    list.find("li").removeClass("ui-timepicker-selected");\n\n    var settings = self.data("timepicker-settings");\n    var tp = self.data("timepicker-obj");\n    var timeValue = tp.time2int(_getTimeValue(self));\n    if (timeValue === null) {\n      return;\n    }\n\n    var selected = _findRow(self, list, timeValue);\n    if (selected) {\n      var topDelta = selected.offset().top - list.offset().top;\n\n      if (topDelta + selected.outerHeight() > list.outerHeight() || topDelta < 0) {\n        list.scrollTop(list.scrollTop() + selected.position().top - selected.outerHeight());\n      }\n\n      if (settings.forceRoundTime || selected.data("time") === timeValue) {\n        selected.addClass("ui-timepicker-selected");\n      }\n    }\n  }\n\n  function _formatValue(e, origin) {\n    if (origin == "timepicker") {\n      return;\n    }\n\n    var self = $(this);\n\n    if (this.value === "") {\n      _setTimeValue(self, null, origin);\n      return;\n    }\n\n    if (self.is(":focus") && (!e || e.type != "change")) {\n      return;\n    }\n\n    var settings = self.data("timepicker-settings");\n    var tp = self.data("timepicker-obj");\n    var seconds = tp.seconds;\n\n    if (seconds === null) {\n      self.trigger("timeFormatError");\n      return;\n    }\n\n    var rangeError = false;\n    // check that the time in within bounds\n    if (settings.minTime !== null && settings.maxTime !== null && (seconds < settings.minTime || seconds > settings.maxTime)) {\n      rangeError = true;\n    }\n\n    // check that time isn\'t within disabled time ranges\n    $.each(settings.disableTimeRanges, function () {\n      if (seconds >= this[0] && seconds < this[1]) {\n        rangeError = true;\n        return false;\n      }\n    });\n\n    if (settings.forceRoundTime) {\n      var roundSeconds = settings.roundingFunction(seconds, settings);\n      if (roundSeconds != seconds) {\n        seconds = roundSeconds;\n        origin = null;\n      }\n    }\n\n    var prettyTime = _int2time(seconds, settings);\n\n    if (rangeError) {\n      if (_setTimeValue(self, prettyTime, "error") || e && e.type == "change") {\n        self.trigger("timeRangeError");\n      }\n    } else {\n      _setTimeValue(self, prettyTime, origin);\n    }\n  }\n\n  function _getTimeValue(self) {\n    if (self.is("input")) {\n      return self.val();\n    } else {\n      // use the element\'s data attributes to store values\n      return self.data("ui-timepicker-value");\n    }\n  }\n\n  function _setTimeValue(self, value, source) {\n    var tp = self.data(\'timepicker-obj\');\n    tp.seconds = tp.time2int(value);\n\n    if (self.is("input")) {\n      self.val(value);\n\n      var settings = self.data("timepicker-settings");\n\n      if (settings.useSelect && source != "select") {\n        self.data("timepicker-list").val(_roundAndFormatTime(tp.time2int(value), settings));\n      }\n    }\n\n    if (self.data("ui-timepicker-value") != value) {\n      self.data("ui-timepicker-value", value);\n      if (source == "select") {\n        self.trigger("selectTime").trigger("changeTime").trigger("change", "timepicker");\n      } else if (["error", "initial"].indexOf(source) == -1) {\n        self.trigger("changeTime");\n      }\n\n      return true;\n    } else {\n      if (["error", "initial"].indexOf(source) == -1) {\n        self.trigger("selectTime");\n      }\n      return false;\n    }\n  }\n\n  /*\n  *  Filter freeform input\n  */\n  function _disableTextInputHandler(e) {\n    switch (e.keyCode) {\n      case 13: // return\n      case 9:\n        //tab\n        return;\n\n      default:\n        e.preventDefault();\n    }\n  }\n\n  /*\n  *  Keyboard navigation via arrow keys\n  */\n  function _keydownhandler(e) {\n    var self = $(this);\n    var list = self.data("timepicker-list");\n\n    if (!list || !_isVisible(list)) {\n      if (e.keyCode == 40) {\n        // show the list!\n        methods.show.call(self.get(0));\n        list = self.data("timepicker-list");\n        if (!_hideKeyboard(self)) {\n          self.focus();\n        }\n      } else {\n        return true;\n      }\n    }\n\n    switch (e.keyCode) {\n      case 13:\n        // return\n        if (_selectValue(self)) {\n          _formatValue.call(self.get(0), { type: "change" });\n          methods.hide.apply(this);\n        }\n\n        e.preventDefault();\n        return false;\n\n      case 38:\n        // up\n        var selected = list.find(".ui-timepicker-selected");\n\n        if (!selected.length) {\n          list.find("li").each(function (i, obj) {\n            if ($(obj).position().top > 0) {\n              selected = $(obj);\n              return false;\n            }\n          });\n          selected.addClass("ui-timepicker-selected");\n        } else if (!selected.is(":first-child")) {\n          selected.removeClass("ui-timepicker-selected");\n          selected.prev().addClass("ui-timepicker-selected");\n\n          if (selected.prev().position().top < selected.outerHeight()) {\n            list.scrollTop(list.scrollTop() - selected.outerHeight());\n          }\n        }\n\n        return false;\n\n      case 40:\n        // down\n        selected = list.find(".ui-timepicker-selected");\n\n        if (selected.length === 0) {\n          list.find("li").each(function (i, obj) {\n            if ($(obj).position().top > 0) {\n              selected = $(obj);\n              return false;\n            }\n          });\n\n          selected.addClass("ui-timepicker-selected");\n        } else if (!selected.is(":last-child")) {\n          selected.removeClass("ui-timepicker-selected");\n          selected.next().addClass("ui-timepicker-selected");\n\n          if (selected.next().position().top + 2 * selected.outerHeight() > list.outerHeight()) {\n            list.scrollTop(list.scrollTop() + selected.outerHeight());\n          }\n        }\n\n        return false;\n\n      case 27:\n        // escape\n        list.find("li").removeClass("ui-timepicker-selected");\n        methods.hide();\n        break;\n\n      case 9:\n        //tab\n        methods.hide();\n        break;\n\n      default:\n        return true;\n    }\n  }\n\n  /*\n  *\tTime typeahead\n  */\n  function _keyuphandler(e) {\n    var self = $(this);\n    var list = self.data("timepicker-list");\n    var settings = self.data("timepicker-settings");\n\n    if (!list || !_isVisible(list) || settings.disableTextInput) {\n      return true;\n    }\n\n    if (e.type === "paste" || e.type === "cut") {\n      setTimeout(function () {\n        if (settings.typeaheadHighlight) {\n          _setSelected(self, list);\n        } else {\n          list.hide();\n        }\n      }, 0);\n      return;\n    }\n\n    switch (e.keyCode) {\n      case 96: // numpad numerals\n      case 97:\n      case 98:\n      case 99:\n      case 100:\n      case 101:\n      case 102:\n      case 103:\n      case 104:\n      case 105:\n      case 48: // numerals\n      case 49:\n      case 50:\n      case 51:\n      case 52:\n      case 53:\n      case 54:\n      case 55:\n      case 56:\n      case 57:\n      case 65: // a\n      case 77: // m\n      case 80: // p\n      case 186: // colon\n      case 8: // backspace\n      case 46:\n        // delete\n        if (settings.typeaheadHighlight) {\n          _setSelected(self, list);\n        } else {\n          list.hide();\n        }\n        break;\n    }\n  }\n\n  function _selectValue(self) {\n    var settings = self.data("timepicker-settings");\n    var list = self.data("timepicker-list");\n    var timeValue = null;\n\n    var cursor = list.find(".ui-timepicker-selected");\n\n    if (cursor.hasClass("ui-timepicker-disabled")) {\n      return false;\n    }\n\n    if (cursor.length) {\n      // selected value found\n      timeValue = cursor.data("time");\n    }\n\n    if (timeValue !== null) {\n      if (typeof timeValue != "string") {\n        timeValue = _int2time(timeValue, settings);\n      }\n\n      _setTimeValue(self, timeValue, "select");\n    }\n\n    return true;\n  }\n\n  function _int2duration(seconds, step) {\n    seconds = Math.abs(seconds);\n    var minutes = Math.round(seconds / 60),\n        duration = [],\n        hours,\n        mins;\n\n    if (minutes < 60) {\n      // Only show (x mins) under 1 hour\n      duration = [minutes, _lang.mins];\n    } else {\n      hours = Math.floor(minutes / 60);\n      mins = minutes % 60;\n\n      // Show decimal notation (eg: 1.5 hrs) for 30 minute steps\n      if (step == 30 && mins == 30) {\n        hours += _lang.decimal + 5;\n      }\n\n      duration.push(hours);\n      duration.push(hours == 1 ? _lang.hr : _lang.hrs);\n\n      // Show remainder minutes notation (eg: 1 hr 15 mins) for non-30 minute steps\n      // and only if there are remainder minutes to show\n      if (step != 30 && mins) {\n        duration.push(mins);\n        duration.push(_lang.mins);\n      }\n    }\n\n    return duration.join(" ");\n  }\n\n  function _int2time(timeInt, settings) {\n    if (typeof timeInt != "number") {\n      return null;\n    }\n\n    var seconds = parseInt(timeInt % 60),\n        minutes = parseInt(timeInt / 60 % 60),\n        hours = parseInt(timeInt / (60 * 60) % 24);\n\n    var time = new Date(1970, 0, 2, hours, minutes, seconds, 0);\n\n    if (isNaN(time.getTime())) {\n      return null;\n    }\n\n    if ($.type(settings.timeFormat) === "function") {\n      return settings.timeFormat(time);\n    }\n\n    var output = "";\n    var hour, code;\n    for (var i = 0; i < settings.timeFormat.length; i++) {\n      code = settings.timeFormat.charAt(i);\n      switch (code) {\n        case "a":\n          output += time.getHours() > 11 ? _lang.pm : _lang.am;\n          break;\n\n        case "A":\n          output += time.getHours() > 11 ? _lang.PM : _lang.AM;\n          break;\n\n        case "g":\n          hour = time.getHours() % 12;\n          output += hour === 0 ? "12" : hour;\n          break;\n\n        case "G":\n          hour = time.getHours();\n          if (timeInt === _constants.ONE_DAY) hour = settings.show2400 ? 24 : 0;\n          output += hour;\n          break;\n\n        case "h":\n          hour = time.getHours() % 12;\n\n          if (hour !== 0 && hour < 10) {\n            hour = "0" + hour;\n          }\n\n          output += hour === 0 ? "12" : hour;\n          break;\n\n        case "H":\n          hour = time.getHours();\n          if (timeInt === _constants.ONE_DAY) hour = settings.show2400 ? 24 : 0;\n          output += hour > 9 ? hour : "0" + hour;\n          break;\n\n        case "i":\n          var minutes = time.getMinutes();\n          output += minutes > 9 ? minutes : "0" + minutes;\n          break;\n\n        case "s":\n          seconds = time.getSeconds();\n          output += seconds > 9 ? seconds : "0" + seconds;\n          break;\n\n        case "\\\\":\n          // escape character; add the next character and skip ahead\n          i++;\n          output += settings.timeFormat.charAt(i);\n          break;\n\n        default:\n          output += code;\n      }\n    }\n\n    return output;\n  }\n\n  function _pad2(n) {\n    return ("0" + n).slice(-2);\n  }\n\n  // Plugin entry\n  $.fn.timepicker = function (method) {\n    if (!this.length) return this;\n    if (methods[method]) {\n      // check if this element is a timepicker\n      if (!this.hasClass("ui-timepicker-input")) {\n        return this;\n      }\n      return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));\n    } else if ((typeof method === \'undefined\' ? \'undefined\' : _typeof(method)) === "object" || !method) {\n      return methods.init.apply(this, arguments);\n    } else {\n      $.error("Method " + method + " does not exist on jQuery.timepicker");\n    }\n  };\n});\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)(module)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvanF1ZXJ5LnRpbWVwaWNrZXIuanM/ZmZhMyJdLCJuYW1lcyI6WyJmYWN0b3J5IiwiZXhwb3J0cyIsIm1vZHVsZSIsInJlcXVpcmUiLCJkZWZpbmUiLCJqUXVlcnkiLCIkIiwiX2xhbmciLCJtZXRob2RzIiwiaW5pdCIsIm9wdGlvbnMiLCJlYWNoIiwic2VsZiIsInRwIiwic2V0dGluZ3MiLCJsYW5nIiwiZGF0YSIsImFkZENsYXNzIiwidXNlU2VsZWN0IiwiX3JlbmRlciIsInByb3AiLCJzaG93T24iLCJpIiwib24iLCJzaG93IiwiX2Zvcm1hdFZhbHVlIiwiX2tleWRvd25oYW5kbGVyIiwiX2tleXVwaGFuZGxlciIsImRpc2FibGVUZXh0SW5wdXQiLCJfZGlzYWJsZVRleHRJbnB1dEhhbmRsZXIiLCJjYWxsIiwiZ2V0IiwiZSIsInByZXZlbnREZWZhdWx0IiwiZm9jdXMiLCJfaGlkZUtleWJvYXJkIiwiYmx1ciIsImxpc3QiLCJsZW5ndGgiLCJkdXJhdGlvblRpbWUiLCJfaXNWaXNpYmxlIiwidmFsIiwiX3NldFNlbGVjdGVkIiwiaGlkZSIsImxpc3RPZmZzZXQiLCJvcmllbnRhdGlvbiIsIm1hdGNoIiwibGVmdCIsIm9mZnNldCIsIm91dGVyV2lkdGgiLCJwYXJzZUludCIsImNzcyIsInJlcGxhY2UiLCJ2ZXJ0aWNhbE9yaWVudGF0aW9uIiwidG9wIiwib3V0ZXJIZWlnaHQiLCJ3aW5kb3ciLCJoZWlnaHQiLCJzY3JvbGxUb3AiLCJyZW1vdmVDbGFzcyIsInNlbGVjdGVkIiwiZmluZCIsInRpbWVJbnQiLCJ0aW1lMmludCIsIl9nZXRUaW1lVmFsdWUiLCJfZmluZFJvdyIsInNjcm9sbERlZmF1bHQiLCJoYXNDbGFzcyIsInRvcE9mZnNldCIsInBvc2l0aW9uIiwic3RvcFNjcm9sbFByb3BhZ2F0aW9uIiwiZG9jdW1lbnQiLCJjdXJyZW50U2Nyb2xsIiwib3JpZ2luYWxFdmVudCIsImRlbHRhWSIsIl9jbG9zZUhhbmRsZXIiLCJjbG9zZU9uV2luZG93U2Nyb2xsIiwidHJpZ2dlciIsInNlbGVjdE9uQmx1ciIsIl9zZWxlY3RWYWx1ZSIsIm9wdGlvbiIsImtleSIsInZhbHVlIiwiZXh0ZW5kIiwicGFyc2VTZXR0aW5ncyIsInR5cGUiLCJyZW1vdmUiLCJnZXRTZWNvbmRzRnJvbU1pZG5pZ2h0IiwiZ2V0VGltZSIsInJlbGF0aXZlX2RhdGUiLCJ0aW1lX3N0cmluZyIsIkRhdGUiLCJ0aW1lIiwic2V0SG91cnMiLCJzZXRNaW51dGVzIiwic2V0U2Vjb25kcyIsInNldE1pbGxpc2Vjb25kcyIsImlzVmlzaWJsZSIsInNldFRpbWUiLCJzZWNvbmRzIiwiZm9yY2VSb3VuZFRpbWUiLCJwcmV0dHlUaW1lIiwiX3JvdW5kQW5kRm9ybWF0VGltZSIsIl9pbnQydGltZSIsIm5vbmVPcHRpb24iLCJfc2V0VGltZVZhbHVlIiwicmVtb3ZlQXR0ciIsInJlbW92ZURhdGEiLCJvZmYiLCJlbGVtIiwiZWwiLCJvZmZzZXRXaWR0aCIsIm9mZnNldEhlaWdodCIsImNsYXNzIiwid3JhcHBlZF9saXN0IiwidGFiaW5kZXgiLCJkaXNwbGF5IiwiYXBwZW5kIiwiaXNBcnJheSIsIm5vbmVFbGVtZW50IiwiX2dlbmVyYXRlTm9uZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJtaW5UaW1lIiwic2hvd0R1cmF0aW9uIiwic3RlcHZhbCIsInN0ZXAiLCJkdXJTdGFydCIsInN0YXJ0IiwiZW5kIiwibWF4VGltZSIsInRpbWVGb3JtYXQiLCJzaG93MjQwMCIsImRyIiwiZGlzYWJsZVRpbWVSYW5nZXMiLCJkckN1ciIsImRyTGVuIiwic3RlcEZ1bmMiLCJqIiwidGltZVN0cmluZyIsInJvdyIsInRleHQiLCJkdXJhdGlvblN0cmluZyIsIl9pbnQyZHVyYXRpb24iLCJkdXJhdGlvbiIsImFmdGVyIiwiYXBwZW5kVG8iLCJvcHRpb25WYWx1ZSIsImxhYmVsIiwiZXJyb3IiLCJTdHJpbmciLCJyb3VuZGluZ0Z1bmN0aW9uIiwidGFyZ2V0IiwiY2xvc2VzdCIsInVuYmluZCIsIm5hdmlnYXRvciIsIm1zTWF4VG91Y2hQb2ludHMiLCJkaXNhYmxlVG91Y2hLZXlib2FyZCIsIm91dCIsIm9iaiIsImpPYmoiLCJ0aW1lVmFsdWUiLCJ0b3BEZWx0YSIsIm9yaWdpbiIsImlzIiwicmFuZ2VFcnJvciIsInJvdW5kU2Vjb25kcyIsInNvdXJjZSIsImluZGV4T2YiLCJrZXlDb2RlIiwiYXBwbHkiLCJwcmV2IiwibmV4dCIsInNldFRpbWVvdXQiLCJ0eXBlYWhlYWRIaWdobGlnaHQiLCJjdXJzb3IiLCJNYXRoIiwiYWJzIiwibWludXRlcyIsInJvdW5kIiwiaG91cnMiLCJtaW5zIiwiZmxvb3IiLCJkZWNpbWFsIiwicHVzaCIsImhyIiwiaHJzIiwiam9pbiIsImlzTmFOIiwib3V0cHV0IiwiaG91ciIsImNvZGUiLCJjaGFyQXQiLCJnZXRIb3VycyIsInBtIiwiYW0iLCJQTSIsIkFNIiwiZ2V0TWludXRlcyIsImdldFNlY29uZHMiLCJfcGFkMiIsIm4iLCJzbGljZSIsImZuIiwidGltZXBpY2tlciIsIm1ldGhvZCIsIkFycmF5IiwicHJvdG90eXBlIiwiYXJndW1lbnRzIl0sIm1hcHBpbmdzIjoiOzs4UUFBQTs7Ozs7O0FBTUE7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUVBLENBQUMsVUFBU0EsT0FBVCxFQUFrQjtBQUNqQixNQUNFLGdDQUFPQyxPQUFQLE9BQW1CLFFBQW5CLElBQ0FBLE9BREEsSUFFQSxnQ0FBT0MsTUFBUCxPQUFrQixRQUZsQixJQUdBQSxNQUhBLElBSUFBLE9BQU9ELE9BQVAsS0FBbUJBLE9BTHJCLEVBTUU7QUFDQTtBQUNBRCxZQUFRLG1CQUFBRyxDQUFRLENBQVIsQ0FBUjtBQUNELEdBVEQsTUFTTyxJQUFJLElBQUosRUFBZ0Q7QUFDckQ7QUFDQUMsSUFBQSxpQ0FBTyxDQUFDLHNCQUFELENBQVAsb0NBQW1CSixPQUFuQjtBQUFBO0FBQUE7QUFBQTtBQUNELEdBSE0sTUFHQTtBQUNMO0FBQ0FBLFlBQVFLLE1BQVI7QUFDRDtBQUNGLENBakJELEVBaUJHLFVBQVNDLENBQVQsRUFBWTtBQUNiLE1BQUlDLFFBQVEsRUFBWjs7QUFFQSxNQUFJQyxVQUFVO0FBQ1pDLFVBQU0sY0FBU0MsT0FBVCxFQUFrQjtBQUN0QixhQUFPLEtBQUtDLElBQUwsQ0FBVSxZQUFXO0FBQzFCLFlBQUlDLE9BQU9OLEVBQUUsSUFBRixDQUFYOztBQUVBLFlBQU1PLEtBQUsseUJBQWUsSUFBZixFQUFxQkgsT0FBckIsQ0FBWDtBQUNBLFlBQU1JLFdBQVdELEdBQUdDLFFBQXBCO0FBQ0FQLGdCQUFRTyxTQUFTQyxJQUFqQjs7QUFFQUgsYUFBS0ksSUFBTCxDQUFVLHFCQUFWLEVBQWlDRixRQUFqQztBQUNBRixhQUFLSSxJQUFMLENBQVUsZ0JBQVYsRUFBNEJILEVBQTVCO0FBQ0FELGFBQUtLLFFBQUwsQ0FBYyxxQkFBZDs7QUFFQSxZQUFJSCxTQUFTSSxTQUFiLEVBQXdCO0FBQ3RCQyxrQkFBUVAsSUFBUjtBQUNELFNBRkQsTUFFTztBQUNMQSxlQUFLUSxJQUFMLENBQVUsY0FBVixFQUEwQixLQUExQjtBQUNBLGNBQUlOLFNBQVNPLE1BQWIsRUFBcUI7QUFDbkIsaUJBQUssSUFBSUMsQ0FBVCxJQUFjUixTQUFTTyxNQUF2QixFQUErQjtBQUM3QlQsbUJBQUtXLEVBQUwsQ0FBUVQsU0FBU08sTUFBVCxDQUFnQkMsQ0FBaEIsSUFBcUIsYUFBN0IsRUFBNENkLFFBQVFnQixJQUFwRDtBQUNEO0FBQ0Y7QUFDRFosZUFBS1csRUFBTCxDQUFRLG1CQUFSLEVBQTZCRSxZQUE3QjtBQUNBYixlQUFLVyxFQUFMLENBQVEsb0JBQVIsRUFBOEJHLGVBQTlCO0FBQ0FkLGVBQUtXLEVBQUwsQ0FBUSxrQkFBUixFQUE0QkksYUFBNUI7QUFDQSxjQUFJYixTQUFTYyxnQkFBYixFQUErQjtBQUM3QmhCLGlCQUFLVyxFQUFMLENBQVEsb0JBQVIsRUFBOEJNLHdCQUE5QjtBQUNEO0FBQ0RqQixlQUFLVyxFQUFMLENBQVEsZ0JBQVIsRUFBMEJJLGFBQTFCO0FBQ0FmLGVBQUtXLEVBQUwsQ0FBUSxrQkFBUixFQUE0QkksYUFBNUI7O0FBRUFGLHVCQUFhSyxJQUFiLENBQWtCbEIsS0FBS21CLEdBQUwsQ0FBUyxDQUFULENBQWxCLEVBQStCLElBQS9CLEVBQXFDLFNBQXJDO0FBQ0Q7QUFDRixPQS9CTSxDQUFQO0FBZ0NELEtBbENXOztBQW9DWlAsVUFBTSxjQUFTUSxDQUFULEVBQVk7QUFDaEIsVUFBSXBCLE9BQU9OLEVBQUUsSUFBRixDQUFYO0FBQ0EsVUFBSVEsV0FBV0YsS0FBS0ksSUFBTCxDQUFVLHFCQUFWLENBQWY7QUFDQSxVQUFJSCxLQUFLRCxLQUFLSSxJQUFMLENBQVUsZ0JBQVYsQ0FBVDs7QUFFQSxVQUFJZ0IsQ0FBSixFQUFPO0FBQ0xBLFVBQUVDLGNBQUY7QUFDRDs7QUFFRCxVQUFJbkIsU0FBU0ksU0FBYixFQUF3QjtBQUN0Qk4sYUFBS0ksSUFBTCxDQUFVLGlCQUFWLEVBQTZCa0IsS0FBN0I7QUFDQTtBQUNEOztBQUVELFVBQUlDLGNBQWN2QixJQUFkLENBQUosRUFBeUI7QUFDdkI7QUFDQUEsYUFBS3dCLElBQUw7QUFDRDs7QUFFRCxVQUFJQyxPQUFPekIsS0FBS0ksSUFBTCxDQUFVLGlCQUFWLENBQVg7O0FBRUE7QUFDQSxVQUFJSixLQUFLUSxJQUFMLENBQVUsVUFBVixDQUFKLEVBQTJCO0FBQ3pCO0FBQ0Q7O0FBRUQ7QUFDQSxVQUNFLENBQUNpQixJQUFELElBQ0FBLEtBQUtDLE1BQUwsS0FBZ0IsQ0FEaEIsSUFFQSxPQUFPeEIsU0FBU3lCLFlBQWhCLEtBQWlDLFVBSG5DLEVBSUU7QUFDQXBCLGdCQUFRUCxJQUFSO0FBQ0F5QixlQUFPekIsS0FBS0ksSUFBTCxDQUFVLGlCQUFWLENBQVA7QUFDRDs7QUFFRCxVQUFJd0IsV0FBV0gsSUFBWCxDQUFKLEVBQXNCO0FBQ3BCO0FBQ0Q7O0FBRUR6QixXQUFLSSxJQUFMLENBQVUscUJBQVYsRUFBaUNKLEtBQUs2QixHQUFMLEVBQWpDO0FBQ0FDLG1CQUFhOUIsSUFBYixFQUFtQnlCLElBQW5COztBQUVBO0FBQ0E3QixjQUFRbUMsSUFBUjs7QUFFQTtBQUNBTixXQUFLYixJQUFMO0FBQ0EsVUFBSW9CLGFBQWEsRUFBakI7O0FBRUEsVUFBSTlCLFNBQVMrQixXQUFULENBQXFCQyxLQUFyQixDQUEyQixHQUEzQixDQUFKLEVBQXFDO0FBQ25DO0FBQ0FGLG1CQUFXRyxJQUFYLEdBQ0VuQyxLQUFLb0MsTUFBTCxHQUFjRCxJQUFkLEdBQ0FuQyxLQUFLcUMsVUFBTCxFQURBLEdBRUFaLEtBQUtZLFVBQUwsRUFGQSxHQUdBQyxTQUFTYixLQUFLYyxHQUFMLENBQVMsWUFBVCxFQUF1QkMsT0FBdkIsQ0FBK0IsSUFBL0IsRUFBcUMsRUFBckMsQ0FBVCxFQUFtRCxFQUFuRCxDQUpGO0FBS0QsT0FQRCxNQU9PO0FBQ0w7QUFDQVIsbUJBQVdHLElBQVgsR0FDRW5DLEtBQUtvQyxNQUFMLEdBQWNELElBQWQsR0FDQUcsU0FBU2IsS0FBS2MsR0FBTCxDQUFTLFlBQVQsRUFBdUJDLE9BQXZCLENBQStCLElBQS9CLEVBQXFDLEVBQXJDLENBQVQsRUFBbUQsRUFBbkQsQ0FGRjtBQUdEOztBQUVELFVBQUlDLG1CQUFKO0FBQ0EsVUFBSXZDLFNBQVMrQixXQUFULENBQXFCQyxLQUFyQixDQUEyQixHQUEzQixDQUFKLEVBQXFDO0FBQ25DTyw4QkFBc0IsR0FBdEI7QUFDRCxPQUZELE1BRU8sSUFBSXZDLFNBQVMrQixXQUFULENBQXFCQyxLQUFyQixDQUEyQixHQUEzQixDQUFKLEVBQXFDO0FBQzFDTyw4QkFBc0IsR0FBdEI7QUFDRCxPQUZNLE1BRUEsSUFDTHpDLEtBQUtvQyxNQUFMLEdBQWNNLEdBQWQsR0FBb0IxQyxLQUFLMkMsV0FBTCxDQUFpQixJQUFqQixDQUFwQixHQUE2Q2xCLEtBQUtrQixXQUFMLEVBQTdDLEdBQ0FqRCxFQUFFa0QsTUFBRixFQUFVQyxNQUFWLEtBQXFCbkQsRUFBRWtELE1BQUYsRUFBVUUsU0FBVixFQUZoQixFQUdMO0FBQ0FMLDhCQUFzQixHQUF0QjtBQUNELE9BTE0sTUFLQTtBQUNMQSw4QkFBc0IsR0FBdEI7QUFDRDs7QUFFRCxVQUFJQSx1QkFBdUIsR0FBM0IsRUFBZ0M7QUFDOUI7QUFDQWhCLGFBQUtwQixRQUFMLENBQWMsOEJBQWQ7QUFDQTJCLG1CQUFXVSxHQUFYLEdBQ0UxQyxLQUFLb0MsTUFBTCxHQUFjTSxHQUFkLEdBQ0FqQixLQUFLa0IsV0FBTCxFQURBLEdBRUFMLFNBQVNiLEtBQUtjLEdBQUwsQ0FBUyxXQUFULEVBQXNCQyxPQUF0QixDQUE4QixJQUE5QixFQUFvQyxFQUFwQyxDQUFULEVBQWtELEVBQWxELENBSEY7QUFJRCxPQVBELE1BT087QUFDTDtBQUNBZixhQUFLc0IsV0FBTCxDQUFpQiw4QkFBakI7QUFDQWYsbUJBQVdVLEdBQVgsR0FDRTFDLEtBQUtvQyxNQUFMLEdBQWNNLEdBQWQsR0FDQTFDLEtBQUsyQyxXQUFMLEVBREEsR0FFQUwsU0FBU2IsS0FBS2MsR0FBTCxDQUFTLFdBQVQsRUFBc0JDLE9BQXRCLENBQThCLElBQTlCLEVBQW9DLEVBQXBDLENBQVQsRUFBa0QsRUFBbEQsQ0FIRjtBQUlEOztBQUVEZixXQUFLVyxNQUFMLENBQVlKLFVBQVo7O0FBRUE7QUFDQSxVQUFJZ0IsV0FBV3ZCLEtBQUt3QixJQUFMLENBQVUseUJBQVYsQ0FBZjs7QUFFQSxVQUFJLENBQUNELFNBQVN0QixNQUFkLEVBQXNCO0FBQ3BCLFlBQUl3QixVQUFVakQsR0FBR2tELFFBQUgsQ0FBWUMsY0FBY3BELElBQWQsQ0FBWixDQUFkO0FBQ0EsWUFBSWtELFlBQVksSUFBaEIsRUFBc0I7QUFDcEJGLHFCQUFXSyxTQUFTckQsSUFBVCxFQUFleUIsSUFBZixFQUFxQnlCLE9BQXJCLENBQVg7QUFDRCxTQUZELE1BRU8sSUFBSWhELFNBQVNvRCxhQUFiLEVBQTRCO0FBQ2pDTixxQkFBV0ssU0FBU3JELElBQVQsRUFBZXlCLElBQWYsRUFBcUJ2QixTQUFTb0QsYUFBVCxFQUFyQixDQUFYO0FBQ0Q7QUFDRjs7QUFFRDtBQUNBLFVBQUksQ0FBQ04sU0FBU3RCLE1BQVYsSUFBb0JzQixTQUFTTyxRQUFULENBQWtCLHdCQUFsQixDQUF4QixFQUFxRTtBQUNuRVAsbUJBQVd2QixLQUFLd0IsSUFBTCxDQUFVLHVDQUFWLENBQVg7QUFDRDs7QUFFRCxVQUFJRCxZQUFZQSxTQUFTdEIsTUFBekIsRUFBaUM7QUFDL0IsWUFBSThCLFlBQ0YvQixLQUFLcUIsU0FBTCxLQUFtQkUsU0FBU1MsUUFBVCxHQUFvQmYsR0FBdkMsR0FBNkNNLFNBQVNMLFdBQVQsRUFEL0M7QUFFQWxCLGFBQUtxQixTQUFMLENBQWVVLFNBQWY7QUFDRCxPQUpELE1BSU87QUFDTC9CLGFBQUtxQixTQUFMLENBQWUsQ0FBZjtBQUNEOztBQUVEO0FBQ0EsVUFBSTVDLFNBQVN3RCxxQkFBYixFQUFvQztBQUNsQ2hFLFVBQ0VpRSxRQURGLEVBRUVoRCxFQUZGLENBRUsscUJBRkwsRUFFNEIsd0JBRjVCLEVBRXNELFVBQVNTLENBQVQsRUFBWTtBQUNoRUEsWUFBRUMsY0FBRjtBQUNBLGNBQUl1QyxnQkFBZ0JsRSxFQUFFLElBQUYsRUFBUW9ELFNBQVIsRUFBcEI7QUFDQXBELFlBQUUsSUFBRixFQUFRb0QsU0FBUixDQUFrQmMsZ0JBQWdCeEMsRUFBRXlDLGFBQUYsQ0FBZ0JDLE1BQWxEO0FBQ0QsU0FORDtBQU9EOztBQUVEO0FBQ0FwRSxRQUFFaUUsUUFBRixFQUFZaEQsRUFBWixDQUNFLGtEQURGLEVBRUVvRCxhQUZGO0FBSUFyRSxRQUFFa0QsTUFBRixFQUFVakMsRUFBVixDQUFhLHNCQUFiLEVBQXFDb0QsYUFBckM7QUFDQSxVQUFJN0QsU0FBUzhELG1CQUFiLEVBQWtDO0FBQ2hDdEUsVUFBRWlFLFFBQUYsRUFBWWhELEVBQVosQ0FBZSxzQkFBZixFQUF1Q29ELGFBQXZDO0FBQ0Q7O0FBRUQvRCxXQUFLaUUsT0FBTCxDQUFhLGdCQUFiOztBQUVBLGFBQU8sSUFBUDtBQUNELEtBckxXOztBQXVMWmxDLFVBQU0sY0FBU1gsQ0FBVCxFQUFZO0FBQ2hCLFVBQUlwQixPQUFPTixFQUFFLElBQUYsQ0FBWDtBQUNBLFVBQUlRLFdBQVdGLEtBQUtJLElBQUwsQ0FBVSxxQkFBVixDQUFmOztBQUVBLFVBQUlGLFlBQVlBLFNBQVNJLFNBQXpCLEVBQW9DO0FBQ2xDTixhQUFLd0IsSUFBTDtBQUNEOztBQUVEOUIsUUFBRSx3QkFBRixFQUE0QkssSUFBNUIsQ0FBaUMsWUFBVztBQUMxQyxZQUFJMEIsT0FBTy9CLEVBQUUsSUFBRixDQUFYO0FBQ0EsWUFBSSxDQUFDa0MsV0FBV0gsSUFBWCxDQUFMLEVBQXVCO0FBQ3JCO0FBQ0Q7O0FBRUQsWUFBSXpCLE9BQU95QixLQUFLckIsSUFBTCxDQUFVLGtCQUFWLENBQVg7QUFDQSxZQUFJRixXQUFXRixLQUFLSSxJQUFMLENBQVUscUJBQVYsQ0FBZjs7QUFFQSxZQUFJRixZQUFZQSxTQUFTZ0UsWUFBekIsRUFBdUM7QUFDckNDLHVCQUFhbkUsSUFBYjtBQUNEOztBQUVEeUIsYUFBS00sSUFBTDtBQUNBL0IsYUFBS2lFLE9BQUwsQ0FBYSxnQkFBYjtBQUNELE9BZkQ7O0FBaUJBLGFBQU8sSUFBUDtBQUNELEtBak5XOztBQW1OWkcsWUFBUSxnQkFBU0MsR0FBVCxFQUFjQyxLQUFkLEVBQXFCO0FBQzNCLFVBQUksT0FBT0QsR0FBUCxJQUFjLFFBQWQsSUFBMEIsT0FBT0MsS0FBUCxJQUFnQixXQUE5QyxFQUEyRDtBQUN6RCxlQUFPNUUsRUFBRSxJQUFGLEVBQVFVLElBQVIsQ0FBYSxxQkFBYixFQUFvQ2lFLEdBQXBDLENBQVA7QUFDRDs7QUFFRCxhQUFPLEtBQUt0RSxJQUFMLENBQVUsWUFBVztBQUMxQixZQUFJQyxPQUFPTixFQUFFLElBQUYsQ0FBWDtBQUNBLFlBQUlRLFdBQVdGLEtBQUtJLElBQUwsQ0FBVSxxQkFBVixDQUFmO0FBQ0EsWUFBSUgsS0FBS0QsS0FBS0ksSUFBTCxDQUFVLGdCQUFWLENBQVQ7QUFDQSxZQUFJcUIsT0FBT3pCLEtBQUtJLElBQUwsQ0FBVSxpQkFBVixDQUFYOztBQUVBLFlBQUksUUFBT2lFLEdBQVAseUNBQU9BLEdBQVAsTUFBYyxRQUFsQixFQUE0QjtBQUMxQm5FLHFCQUFXUixFQUFFNkUsTUFBRixDQUFTckUsUUFBVCxFQUFtQm1FLEdBQW5CLENBQVg7QUFDRCxTQUZELE1BRU8sSUFBSSxPQUFPQSxHQUFQLElBQWMsUUFBbEIsRUFBNEI7QUFDakNuRSxtQkFBU21FLEdBQVQsSUFBZ0JDLEtBQWhCO0FBQ0Q7O0FBRURwRSxtQkFBV0QsR0FBR3VFLGFBQUgsQ0FBaUJ0RSxRQUFqQixDQUFYOztBQUVBRixhQUFLSSxJQUFMLENBQVUscUJBQVYsRUFBaUNGLFFBQWpDOztBQUVBVyxxQkFBYUssSUFBYixDQUFrQmxCLEtBQUttQixHQUFMLENBQVMsQ0FBVCxDQUFsQixFQUErQixFQUFFc0QsTUFBTSxRQUFSLEVBQS9CLEVBQW1ELFNBQW5EOztBQUVBLFlBQUloRCxJQUFKLEVBQVU7QUFDUkEsZUFBS2lELE1BQUw7QUFDQTFFLGVBQUtJLElBQUwsQ0FBVSxpQkFBVixFQUE2QixLQUE3QjtBQUNEOztBQUVELFlBQUlGLFNBQVNJLFNBQWIsRUFBd0I7QUFDdEJDLGtCQUFRUCxJQUFSO0FBQ0Q7QUFDRixPQTFCTSxDQUFQO0FBMkJELEtBblBXOztBQXFQWjJFLDRCQUF3QixrQ0FBVztBQUNqQyxVQUFJM0UsT0FBT04sRUFBRSxJQUFGLENBQVg7QUFDQSxVQUFJTyxLQUFLRCxLQUFLSSxJQUFMLENBQVUsZ0JBQVYsQ0FBVDtBQUNBLGFBQU9ILEdBQUdrRCxRQUFILENBQVlDLGNBQWMsSUFBZCxDQUFaLENBQVA7QUFDRCxLQXpQVzs7QUEyUFp3QixhQUFTLGlCQUFTQyxhQUFULEVBQXdCO0FBQy9CLFVBQUk3RSxPQUFPTixFQUFFLElBQUYsQ0FBWDtBQUNBLFVBQUlPLEtBQUtELEtBQUtJLElBQUwsQ0FBVSxnQkFBVixDQUFUOztBQUVBLFVBQUkwRSxjQUFjMUIsY0FBY3BELElBQWQsQ0FBbEI7QUFDQSxVQUFJLENBQUM4RSxXQUFMLEVBQWtCO0FBQ2hCLGVBQU8sSUFBUDtBQUNEOztBQUVELFVBQUkxQyxTQUFTbkMsR0FBR2tELFFBQUgsQ0FBWTJCLFdBQVosQ0FBYjtBQUNBLFVBQUkxQyxXQUFXLElBQWYsRUFBcUI7QUFDbkIsZUFBTyxJQUFQO0FBQ0Q7O0FBRUQsVUFBSSxDQUFDeUMsYUFBTCxFQUFvQjtBQUNsQkEsd0JBQWdCLElBQUlFLElBQUosRUFBaEI7QUFDRDs7QUFFRDtBQUNBLFVBQUlDLE9BQU8sSUFBSUQsSUFBSixDQUFTRixhQUFULENBQVg7QUFDQUcsV0FBS0MsUUFBTCxDQUFjN0MsU0FBUyxJQUF2QjtBQUNBNEMsV0FBS0UsVUFBTCxDQUFpQjlDLFNBQVMsSUFBVixHQUFrQixFQUFsQztBQUNBNEMsV0FBS0csVUFBTCxDQUFnQi9DLFNBQVMsRUFBekI7QUFDQTRDLFdBQUtJLGVBQUwsQ0FBcUIsQ0FBckI7O0FBRUEsYUFBT0osSUFBUDtBQUNELEtBclJXOztBQXVSWkssZUFBVyxxQkFBVztBQUNwQixVQUFJckYsT0FBTyxJQUFYO0FBQ0EsVUFBSXlCLE9BQU96QixLQUFLSSxJQUFMLENBQVUsaUJBQVYsQ0FBWDtBQUNBLGFBQU8sQ0FBQyxFQUFFcUIsUUFBUUcsV0FBV0gsSUFBWCxDQUFWLENBQVI7QUFDRCxLQTNSVzs7QUE2Ulo2RCxhQUFTLGlCQUFTaEIsS0FBVCxFQUFnQjtBQUN2QixVQUFJdEUsT0FBTyxJQUFYO0FBQ0EsVUFBSUUsV0FBV0YsS0FBS0ksSUFBTCxDQUFVLHFCQUFWLENBQWY7QUFDQSxVQUFJSCxLQUFLRCxLQUFLSSxJQUFMLENBQVUsZ0JBQVYsQ0FBVDs7QUFFQUgsU0FBR3NGLE9BQUgsR0FBYXRGLEdBQUdrRCxRQUFILENBQVltQixLQUFaLENBQWI7O0FBRUEsVUFBSXBFLFNBQVNzRixjQUFiLEVBQTZCO0FBQzNCLFlBQUlDLGFBQWFDLG9CQUFvQnpGLEdBQUdzRixPQUF2QixFQUFnQ3JGLFFBQWhDLENBQWpCO0FBQ0QsT0FGRCxNQUVPO0FBQ0wsWUFBSXVGLGFBQWFFLFVBQVUxRixHQUFHc0YsT0FBYixFQUFzQnJGLFFBQXRCLENBQWpCO0FBQ0Q7O0FBRUQsVUFBSW9FLFNBQVNtQixlQUFlLElBQXhCLElBQWdDdkYsU0FBUzBGLFVBQTdDLEVBQXlEO0FBQ3ZESCxxQkFBYW5CLEtBQWI7QUFDRDs7QUFFRHVCLG9CQUFjN0YsSUFBZCxFQUFvQnlGLFVBQXBCLEVBQWdDLFNBQWhDO0FBQ0E1RSxtQkFBYUssSUFBYixDQUFrQmxCLEtBQUttQixHQUFMLENBQVMsQ0FBVCxDQUFsQixFQUErQixFQUFFc0QsTUFBTSxRQUFSLEVBQS9CLEVBQW1ELFNBQW5EOztBQUVBLFVBQUl6RSxLQUFLSSxJQUFMLENBQVUsaUJBQVYsQ0FBSixFQUFrQztBQUNoQzBCLHFCQUFhOUIsSUFBYixFQUFtQkEsS0FBS0ksSUFBTCxDQUFVLGlCQUFWLENBQW5CO0FBQ0Q7O0FBRUQsYUFBTyxJQUFQO0FBQ0QsS0F0VFc7O0FBd1Rac0UsWUFBUSxrQkFBVztBQUNqQixVQUFJMUUsT0FBTyxJQUFYOztBQUVBO0FBQ0EsVUFBSSxDQUFDQSxLQUFLdUQsUUFBTCxDQUFjLHFCQUFkLENBQUwsRUFBMkM7QUFDekM7QUFDRDs7QUFFRCxVQUFJckQsV0FBV0YsS0FBS0ksSUFBTCxDQUFVLHFCQUFWLENBQWY7QUFDQUosV0FBSzhGLFVBQUwsQ0FBZ0IsY0FBaEIsRUFBZ0MsS0FBaEM7QUFDQTlGLFdBQUsrQyxXQUFMLENBQWlCLHFCQUFqQjtBQUNBL0MsV0FBSytGLFVBQUwsQ0FBZ0IscUJBQWhCO0FBQ0EvRixXQUFLK0YsVUFBTCxDQUFnQixnQkFBaEI7QUFDQS9GLFdBQUtnRyxHQUFMLENBQVMsYUFBVDs7QUFFQTtBQUNBLFVBQUloRyxLQUFLSSxJQUFMLENBQVUsaUJBQVYsQ0FBSixFQUFrQztBQUNoQ0osYUFBS0ksSUFBTCxDQUFVLGlCQUFWLEVBQTZCc0UsTUFBN0I7QUFDRDs7QUFFRCxVQUFJeEUsU0FBU0ksU0FBYixFQUF3QjtBQUN0Qk4sYUFBS1ksSUFBTDtBQUNEOztBQUVEWixXQUFLK0YsVUFBTCxDQUFnQixpQkFBaEI7O0FBRUEsYUFBTyxJQUFQO0FBQ0Q7QUFuVlcsR0FBZDs7QUFzVkE7O0FBRUEsV0FBU25FLFVBQVQsQ0FBb0JxRSxJQUFwQixFQUEwQjtBQUN4QixRQUFJQyxLQUFLRCxLQUFLLENBQUwsQ0FBVDtBQUNBLFdBQU9DLEdBQUdDLFdBQUgsR0FBaUIsQ0FBakIsSUFBc0JELEdBQUdFLFlBQUgsR0FBa0IsQ0FBL0M7QUFDRDs7QUFFRCxXQUFTN0YsT0FBVCxDQUFpQlAsSUFBakIsRUFBdUI7QUFDckIsUUFBSUUsV0FBV0YsS0FBS0ksSUFBTCxDQUFVLHFCQUFWLENBQWY7QUFDQSxRQUFJcUIsT0FBT3pCLEtBQUtJLElBQUwsQ0FBVSxpQkFBVixDQUFYO0FBQ0EsUUFBSUgsS0FBS0QsS0FBS0ksSUFBTCxDQUFVLGdCQUFWLENBQVQ7O0FBRUEsUUFBSXFCLFFBQVFBLEtBQUtDLE1BQWpCLEVBQXlCO0FBQ3ZCRCxXQUFLaUQsTUFBTDtBQUNBMUUsV0FBS0ksSUFBTCxDQUFVLGlCQUFWLEVBQTZCLEtBQTdCO0FBQ0Q7O0FBRUQsUUFBSUYsU0FBU0ksU0FBYixFQUF3QjtBQUN0Qm1CLGFBQU8vQixFQUFFLFlBQUYsRUFBZ0IsRUFBRTJHLE9BQU8sc0JBQVQsRUFBaEIsQ0FBUDtBQUNBLFVBQUlDLGVBQWU3RSxJQUFuQjtBQUNELEtBSEQsTUFHTztBQUNMQSxhQUFPL0IsRUFBRSxRQUFGLEVBQVksRUFBRTJHLE9BQU8sb0JBQVQsRUFBWixDQUFQOztBQUVBLFVBQUlDLGVBQWU1RyxFQUFFLFNBQUYsRUFBYTtBQUM5QjJHLGVBQU8sdUJBRHVCO0FBRTlCRSxrQkFBVSxDQUFDO0FBRm1CLE9BQWIsQ0FBbkI7QUFJQUQsbUJBQWEvRCxHQUFiLENBQWlCLEVBQUVpRSxTQUFTLE1BQVgsRUFBbUIvQyxVQUFVLFVBQTdCLEVBQWpCLEVBQTREZ0QsTUFBNUQsQ0FBbUVoRixJQUFuRTtBQUNEOztBQUVELFFBQUl2QixTQUFTMEYsVUFBYixFQUF5QjtBQUN2QixVQUFJMUYsU0FBUzBGLFVBQVQsS0FBd0IsSUFBNUIsRUFBa0M7QUFDaEMxRixpQkFBUzBGLFVBQVQsR0FBc0IxRixTQUFTSSxTQUFULEdBQXFCLFNBQXJCLEdBQWlDLE1BQXZEO0FBQ0Q7O0FBRUQsVUFBSVosRUFBRWdILE9BQUYsQ0FBVXhHLFNBQVMwRixVQUFuQixDQUFKLEVBQW9DO0FBQ2xDLGFBQUssSUFBSWxGLENBQVQsSUFBY1IsU0FBUzBGLFVBQXZCLEVBQW1DO0FBQ2pDLGNBQUl0RCxTQUFTNUIsQ0FBVCxFQUFZLEVBQVosS0FBbUJBLENBQXZCLEVBQTBCO0FBQ3hCLGdCQUFJaUcsY0FBY0MscUJBQ2hCMUcsU0FBUzBGLFVBQVQsQ0FBb0JsRixDQUFwQixDQURnQixFQUVoQlIsU0FBU0ksU0FGTyxDQUFsQjtBQUlBbUIsaUJBQUtnRixNQUFMLENBQVlFLFdBQVo7QUFDRDtBQUNGO0FBQ0YsT0FWRCxNQVVPO0FBQ0wsWUFBSUEsY0FBY0MscUJBQ2hCMUcsU0FBUzBGLFVBRE8sRUFFaEIxRixTQUFTSSxTQUZPLENBQWxCO0FBSUFtQixhQUFLZ0YsTUFBTCxDQUFZRSxXQUFaO0FBQ0Q7QUFDRjs7QUFFRCxRQUFJekcsU0FBUzJHLFNBQWIsRUFBd0I7QUFDdEJQLG1CQUFhakcsUUFBYixDQUFzQkgsU0FBUzJHLFNBQS9CO0FBQ0Q7O0FBRUQsUUFDRSxDQUFDM0csU0FBUzRHLE9BQVQsS0FBcUIsSUFBckIsSUFBNkI1RyxTQUFTeUIsWUFBVCxLQUEwQixJQUF4RCxLQUNBekIsU0FBUzZHLFlBRlgsRUFHRTtBQUNBLFVBQUlDLFVBQ0YsT0FBTzlHLFNBQVMrRyxJQUFoQixJQUF3QixVQUF4QixHQUFxQyxVQUFyQyxHQUFrRC9HLFNBQVMrRyxJQUQ3RDtBQUVBWCxtQkFBYWpHLFFBQWIsQ0FBc0IsNkJBQXRCO0FBQ0FpRyxtQkFBYWpHLFFBQWIsQ0FBc0Isd0JBQXdCSCxTQUFTK0csSUFBdkQ7QUFDRDs7QUFFRCxRQUFJQyxXQUFXaEgsU0FBUzRHLE9BQXhCO0FBQ0EsUUFBSSxPQUFPNUcsU0FBU3lCLFlBQWhCLEtBQWlDLFVBQXJDLEVBQWlEO0FBQy9DdUYsaUJBQVdqSCxHQUFHa0QsUUFBSCxDQUFZakQsU0FBU3lCLFlBQVQsRUFBWixDQUFYO0FBQ0QsS0FGRCxNQUVPLElBQUl6QixTQUFTeUIsWUFBVCxLQUEwQixJQUE5QixFQUFvQztBQUN6Q3VGLGlCQUFXaEgsU0FBU3lCLFlBQXBCO0FBQ0Q7QUFDRCxRQUFJd0YsUUFBUWpILFNBQVM0RyxPQUFULEtBQXFCLElBQXJCLEdBQTRCNUcsU0FBUzRHLE9BQXJDLEdBQStDLENBQTNEO0FBQ0EsUUFBSU0sTUFDRmxILFNBQVNtSCxPQUFULEtBQXFCLElBQXJCLEdBQTRCbkgsU0FBU21ILE9BQXJDLEdBQStDRiw2QkFBa0IsQ0FEbkU7O0FBR0EsUUFBSUMsTUFBTUQsS0FBVixFQUFpQjtBQUNmO0FBQ0FDO0FBQ0Q7O0FBRUQsUUFDRUEsUUFBUSxxQkFBVSxDQUFsQixJQUNBMUgsRUFBRStFLElBQUYsQ0FBT3ZFLFNBQVNvSCxVQUFoQixNQUFnQyxRQURoQyxJQUVBcEgsU0FBU3FILFFBSFgsRUFJRTtBQUNBO0FBQ0FIO0FBQ0Q7O0FBRUQsUUFBSUksS0FBS3RILFNBQVN1SCxpQkFBbEI7QUFDQSxRQUFJQyxRQUFRLENBQVo7QUFDQSxRQUFJQyxRQUFRSCxHQUFHOUYsTUFBZjs7QUFFQSxRQUFJa0csV0FBVzFILFNBQVMrRyxJQUF4QjtBQUNBLFFBQUksT0FBT1csUUFBUCxJQUFtQixVQUF2QixFQUFtQztBQUNqQ0EsaUJBQVcsb0JBQVc7QUFDcEIsZUFBTzFILFNBQVMrRyxJQUFoQjtBQUNELE9BRkQ7QUFHRDs7QUFFRCxTQUFLLElBQUl2RyxJQUFJeUcsS0FBUixFQUFlVSxJQUFJLENBQXhCLEVBQTJCbkgsS0FBSzBHLEdBQWhDLEVBQXFDUyxLQUFLbkgsS0FBS2tILFNBQVNDLENBQVQsSUFBYyxFQUE3RCxFQUFpRTtBQUMvRCxVQUFJM0UsVUFBVXhDLENBQWQ7QUFDQSxVQUFJb0gsYUFBYW5DLFVBQVV6QyxPQUFWLEVBQW1CaEQsUUFBbkIsQ0FBakI7O0FBRUEsVUFBSUEsU0FBU0ksU0FBYixFQUF3QjtBQUN0QixZQUFJeUgsTUFBTXJJLEVBQUUsWUFBRixFQUFnQixFQUFFNEUsT0FBT3dELFVBQVQsRUFBaEIsQ0FBVjtBQUNBQyxZQUFJQyxJQUFKLENBQVNGLFVBQVQ7QUFDRCxPQUhELE1BR087QUFDTCxZQUFJQyxNQUFNckksRUFBRSxRQUFGLENBQVY7QUFDQXFJLFlBQUkxSCxRQUFKLENBQ0U2QywrQkFBb0IscUJBQVUsQ0FBOUIsR0FDSSxrQkFESixHQUVJLGtCQUhOO0FBS0E2RSxZQUFJM0gsSUFBSixDQUFTLE1BQVQsRUFBaUIsd0JBQWM4QyxPQUFkLEVBQXVCaEQsUUFBdkIsQ0FBakI7QUFDQTZILFlBQUlDLElBQUosQ0FBU0YsVUFBVDtBQUNEOztBQUVELFVBQ0UsQ0FBQzVILFNBQVM0RyxPQUFULEtBQXFCLElBQXJCLElBQTZCNUcsU0FBU3lCLFlBQVQsS0FBMEIsSUFBeEQsS0FDQXpCLFNBQVM2RyxZQUZYLEVBR0U7QUFDQSxZQUFJa0IsaUJBQWlCQyxjQUFjeEgsSUFBSXdHLFFBQWxCLEVBQTRCaEgsU0FBUytHLElBQXJDLENBQXJCO0FBQ0EsWUFBSS9HLFNBQVNJLFNBQWIsRUFBd0I7QUFDdEJ5SCxjQUFJQyxJQUFKLENBQVNELElBQUlDLElBQUosS0FBYSxJQUFiLEdBQW9CQyxjQUFwQixHQUFxQyxHQUE5QztBQUNELFNBRkQsTUFFTztBQUNMLGNBQUlFLFdBQVd6SSxFQUFFLFVBQUYsRUFBYyxFQUFFMkcsT0FBTyx3QkFBVCxFQUFkLENBQWY7QUFDQThCLG1CQUFTSCxJQUFULENBQWMsT0FBT0MsY0FBUCxHQUF3QixHQUF0QztBQUNBRixjQUFJdEIsTUFBSixDQUFXMEIsUUFBWDtBQUNEO0FBQ0Y7O0FBRUQsVUFBSVQsUUFBUUMsS0FBWixFQUFtQjtBQUNqQixZQUFJekUsV0FBV3NFLEdBQUdFLEtBQUgsRUFBVSxDQUFWLENBQWYsRUFBNkI7QUFDM0JBLG1CQUFTLENBQVQ7QUFDRDs7QUFFRCxZQUFJRixHQUFHRSxLQUFILEtBQWF4RSxXQUFXc0UsR0FBR0UsS0FBSCxFQUFVLENBQVYsQ0FBeEIsSUFBd0N4RSxVQUFVc0UsR0FBR0UsS0FBSCxFQUFVLENBQVYsQ0FBdEQsRUFBb0U7QUFDbEUsY0FBSXhILFNBQVNJLFNBQWIsRUFBd0I7QUFDdEJ5SCxnQkFBSXZILElBQUosQ0FBUyxVQUFULEVBQXFCLElBQXJCO0FBQ0QsV0FGRCxNQUVPO0FBQ0x1SCxnQkFBSTFILFFBQUosQ0FBYSx3QkFBYjtBQUNEO0FBQ0Y7QUFDRjs7QUFFRG9CLFdBQUtnRixNQUFMLENBQVlzQixHQUFaO0FBQ0Q7O0FBRUR6QixpQkFBYWxHLElBQWIsQ0FBa0Isa0JBQWxCLEVBQXNDSixJQUF0QztBQUNBQSxTQUFLSSxJQUFMLENBQVUsaUJBQVYsRUFBNkJrRyxZQUE3Qjs7QUFFQSxRQUFJcEcsU0FBU0ksU0FBYixFQUF3QjtBQUN0QixVQUFJTixLQUFLNkIsR0FBTCxFQUFKLEVBQWdCO0FBQ2RKLGFBQUtJLEdBQUwsQ0FBUzZELG9CQUFvQnpGLEdBQUdrRCxRQUFILENBQVluRCxLQUFLNkIsR0FBTCxFQUFaLENBQXBCLEVBQTZDM0IsUUFBN0MsQ0FBVDtBQUNEOztBQUVEdUIsV0FBS2QsRUFBTCxDQUFRLE9BQVIsRUFBaUIsWUFBVztBQUMxQmpCLFVBQUUsSUFBRixFQUNHVSxJQURILENBQ1Esa0JBRFIsRUFFRzZELE9BRkgsQ0FFVyxnQkFGWDtBQUdELE9BSkQ7QUFLQXhDLFdBQUtkLEVBQUwsQ0FBUSxNQUFSLEVBQWdCLFlBQVc7QUFDekJqQixVQUFFLElBQUYsRUFDR1UsSUFESCxDQUNRLGtCQURSLEVBRUc2RCxPQUZILENBRVcsZ0JBRlg7QUFHRCxPQUpEO0FBS0F4QyxXQUFLZCxFQUFMLENBQVEsUUFBUixFQUFrQixZQUFXO0FBQzNCa0Ysc0JBQWM3RixJQUFkLEVBQW9CTixFQUFFLElBQUYsRUFBUW1DLEdBQVIsRUFBcEIsRUFBbUMsUUFBbkM7QUFDRCxPQUZEOztBQUlBZ0Usb0JBQWM3RixJQUFkLEVBQW9CeUIsS0FBS0ksR0FBTCxFQUFwQixFQUFnQyxTQUFoQztBQUNBN0IsV0FBSytCLElBQUwsR0FBWXFHLEtBQVosQ0FBa0IzRyxJQUFsQjtBQUNELEtBckJELE1BcUJPO0FBQ0wsVUFBSTRHLFdBQVduSSxTQUFTbUksUUFBeEI7QUFDQSxVQUFJLE9BQU9BLFFBQVAsS0FBb0IsUUFBeEIsRUFBa0M7QUFDaENBLG1CQUFXM0ksRUFBRTJJLFFBQUYsQ0FBWDtBQUNELE9BRkQsTUFFTyxJQUFJLE9BQU9BLFFBQVAsS0FBb0IsVUFBeEIsRUFBb0M7QUFDekNBLG1CQUFXQSxTQUFTckksSUFBVCxDQUFYO0FBQ0Q7QUFDRHFJLGVBQVM1QixNQUFULENBQWdCSCxZQUFoQjtBQUNBeEUsbUJBQWE5QixJQUFiLEVBQW1CeUIsSUFBbkI7O0FBRUFBLFdBQUtkLEVBQUwsQ0FBUSxpQkFBUixFQUEyQixJQUEzQixFQUFpQyxVQUFTUyxDQUFULEVBQVk7QUFDM0M7QUFDQTtBQUNBO0FBQ0FwQixhQUFLZ0csR0FBTCxDQUFTLGtCQUFUO0FBQ0FoRyxhQUFLVyxFQUFMLENBQVEsMEJBQVIsRUFBb0MsWUFBVztBQUM3Q1gsZUFBS2dHLEdBQUwsQ0FBUywwQkFBVDtBQUNBaEcsZUFBS1csRUFBTCxDQUFRLGtCQUFSLEVBQTRCZixRQUFRZ0IsSUFBcEM7QUFDRCxTQUhEOztBQUtBLFlBQUksQ0FBQ1csY0FBY3ZCLElBQWQsQ0FBTCxFQUEwQjtBQUN4QkEsZUFBSyxDQUFMLEVBQVFzQixLQUFSO0FBQ0Q7O0FBRUQ7QUFDQUcsYUFBS3dCLElBQUwsQ0FBVSxJQUFWLEVBQWdCRixXQUFoQixDQUE0Qix3QkFBNUI7QUFDQXJELFVBQUUsSUFBRixFQUFRVyxRQUFSLENBQWlCLHdCQUFqQjs7QUFFQSxZQUFJOEQsYUFBYW5FLElBQWIsQ0FBSixFQUF3QjtBQUN0QkEsZUFBS2lFLE9BQUwsQ0FBYSxnQkFBYjs7QUFFQXhDLGVBQUtkLEVBQUwsQ0FBUSxxQ0FBUixFQUErQyxJQUEvQyxFQUFxRCxVQUFTUyxDQUFULEVBQVk7QUFDL0RLLGlCQUFLdUUsR0FBTCxDQUFTLHFDQUFUO0FBQ0FNLHlCQUFhdkUsSUFBYjtBQUNELFdBSEQ7QUFJRDtBQUNGLE9BMUJEO0FBMkJEO0FBQ0Y7O0FBRUQsV0FBUzZFLG9CQUFULENBQThCMEIsV0FBOUIsRUFBMkNoSSxTQUEzQyxFQUFzRDtBQUNwRCxRQUFJaUksS0FBSixFQUFXMUIsU0FBWCxFQUFzQnZDLEtBQXRCOztBQUVBLFFBQUksUUFBT2dFLFdBQVAseUNBQU9BLFdBQVAsTUFBc0IsUUFBMUIsRUFBb0M7QUFDbENDLGNBQVFELFlBQVlDLEtBQXBCO0FBQ0ExQixrQkFBWXlCLFlBQVl6QixTQUF4QjtBQUNBdkMsY0FBUWdFLFlBQVloRSxLQUFwQjtBQUNELEtBSkQsTUFJTyxJQUFJLE9BQU9nRSxXQUFQLElBQXNCLFFBQTFCLEVBQW9DO0FBQ3pDQyxjQUFRRCxXQUFSO0FBQ0FoRSxjQUFRLEVBQVI7QUFDRCxLQUhNLE1BR0E7QUFDTDVFLFFBQUU4SSxLQUFGLENBQVEsMEJBQVI7QUFDRDs7QUFFRCxRQUFJbEksU0FBSixFQUFlO0FBQ2IsYUFBT1osRUFBRSxZQUFGLEVBQWdCO0FBQ3JCNEUsZUFBT0EsS0FEYztBQUVyQitCLGVBQU9RLFNBRmM7QUFHckJtQixjQUFNTztBQUhlLE9BQWhCLENBQVA7QUFLRCxLQU5ELE1BTU87QUFDTCxhQUFPN0ksRUFBRSxRQUFGLEVBQVk7QUFDakIyRyxlQUFPUSxTQURVO0FBRWpCbUIsY0FBTU87QUFGVyxPQUFaLEVBR0puSSxJQUhJLENBR0MsTUFIRCxFQUdTcUksT0FBT25FLEtBQVAsQ0FIVCxDQUFQO0FBSUQ7QUFDRjs7QUFFRCxXQUFTb0IsbUJBQVQsQ0FBNkJILE9BQTdCLEVBQXNDckYsUUFBdEMsRUFBZ0Q7QUFDOUNxRixjQUFVckYsU0FBU3dJLGdCQUFULENBQTBCbkQsT0FBMUIsRUFBbUNyRixRQUFuQyxDQUFWO0FBQ0EsUUFBSXFGLFlBQVksSUFBaEIsRUFBc0I7QUFDcEIsYUFBT0ksVUFBVUosT0FBVixFQUFtQnJGLFFBQW5CLENBQVA7QUFDRDtBQUNGOztBQUVEO0FBQ0EsV0FBUzZELGFBQVQsQ0FBdUIzQyxDQUF2QixFQUEwQjtBQUN4QixRQUFJQSxFQUFFdUgsTUFBRixJQUFZL0YsTUFBaEIsRUFBd0I7QUFDdEI7QUFDQTtBQUNEOztBQUVELFFBQUkrRixTQUFTakosRUFBRTBCLEVBQUV1SCxNQUFKLENBQWI7O0FBRUEsUUFDRUEsT0FBT0MsT0FBUCxDQUFlLHNCQUFmLEVBQXVDbEgsTUFBdkMsSUFDQWlILE9BQU9DLE9BQVAsQ0FBZSx3QkFBZixFQUF5Q2xILE1BRjNDLEVBR0U7QUFDQTtBQUNBO0FBQ0Q7O0FBRUQ5QixZQUFRbUMsSUFBUjtBQUNBckMsTUFBRWlFLFFBQUYsRUFBWWtGLE1BQVosQ0FBbUIsZ0JBQW5CO0FBQ0FuSixNQUFFa0QsTUFBRixFQUFVaUcsTUFBVixDQUFpQixnQkFBakI7QUFDRDs7QUFFRCxXQUFTdEgsYUFBVCxDQUF1QnZCLElBQXZCLEVBQTZCO0FBQzNCLFFBQUlFLFdBQVdGLEtBQUtJLElBQUwsQ0FBVSxxQkFBVixDQUFmO0FBQ0EsV0FDRSxDQUFDd0MsT0FBT2tHLFNBQVAsQ0FBaUJDLGdCQUFqQixJQUFxQyxrQkFBa0JwRixRQUF4RCxLQUNBekQsU0FBUzhJLG9CQUZYO0FBSUQ7O0FBRUQsV0FBUzNGLFFBQVQsQ0FBa0JyRCxJQUFsQixFQUF3QnlCLElBQXhCLEVBQThCNkMsS0FBOUIsRUFBcUM7QUFDbkMsUUFBSSxDQUFDQSxLQUFELElBQVVBLFVBQVUsQ0FBeEIsRUFBMkI7QUFDekIsYUFBTyxLQUFQO0FBQ0Q7O0FBRUQsUUFBSXBFLFdBQVdGLEtBQUtJLElBQUwsQ0FBVSxxQkFBVixDQUFmO0FBQ0EsUUFBSTZJLE1BQU0sS0FBVjtBQUNBLFFBQUkzRSxRQUFRcEUsU0FBU3dJLGdCQUFULENBQTBCcEUsS0FBMUIsRUFBaUNwRSxRQUFqQyxDQUFaOztBQUVBO0FBQ0F1QixTQUFLd0IsSUFBTCxDQUFVLElBQVYsRUFBZ0JsRCxJQUFoQixDQUFxQixVQUFTVyxDQUFULEVBQVl3SSxHQUFaLEVBQWlCO0FBQ3BDLFVBQUlDLE9BQU96SixFQUFFd0osR0FBRixDQUFYO0FBQ0EsVUFBSSxPQUFPQyxLQUFLL0ksSUFBTCxDQUFVLE1BQVYsQ0FBUCxJQUE0QixRQUFoQyxFQUEwQztBQUN4QztBQUNEOztBQUVELFVBQUkrSSxLQUFLL0ksSUFBTCxDQUFVLE1BQVYsS0FBcUJrRSxLQUF6QixFQUFnQztBQUM5QjJFLGNBQU1FLElBQU47QUFDQSxlQUFPLEtBQVA7QUFDRDtBQUNGLEtBVkQ7O0FBWUEsV0FBT0YsR0FBUDtBQUNEOztBQUVELFdBQVNuSCxZQUFULENBQXNCOUIsSUFBdEIsRUFBNEJ5QixJQUE1QixFQUFrQztBQUNoQ0EsU0FBS3dCLElBQUwsQ0FBVSxJQUFWLEVBQWdCRixXQUFoQixDQUE0Qix3QkFBNUI7O0FBRUEsUUFBSTdDLFdBQVdGLEtBQUtJLElBQUwsQ0FBVSxxQkFBVixDQUFmO0FBQ0EsUUFBSUgsS0FBS0QsS0FBS0ksSUFBTCxDQUFVLGdCQUFWLENBQVQ7QUFDQSxRQUFJZ0osWUFBWW5KLEdBQUdrRCxRQUFILENBQVlDLGNBQWNwRCxJQUFkLENBQVosQ0FBaEI7QUFDQSxRQUFJb0osY0FBYyxJQUFsQixFQUF3QjtBQUN0QjtBQUNEOztBQUVELFFBQUlwRyxXQUFXSyxTQUFTckQsSUFBVCxFQUFleUIsSUFBZixFQUFxQjJILFNBQXJCLENBQWY7QUFDQSxRQUFJcEcsUUFBSixFQUFjO0FBQ1osVUFBSXFHLFdBQVdyRyxTQUFTWixNQUFULEdBQWtCTSxHQUFsQixHQUF3QmpCLEtBQUtXLE1BQUwsR0FBY00sR0FBckQ7O0FBRUEsVUFDRTJHLFdBQVdyRyxTQUFTTCxXQUFULEVBQVgsR0FBb0NsQixLQUFLa0IsV0FBTCxFQUFwQyxJQUNBMEcsV0FBVyxDQUZiLEVBR0U7QUFDQTVILGFBQUtxQixTQUFMLENBQ0VyQixLQUFLcUIsU0FBTCxLQUFtQkUsU0FBU1MsUUFBVCxHQUFvQmYsR0FBdkMsR0FBNkNNLFNBQVNMLFdBQVQsRUFEL0M7QUFHRDs7QUFFRCxVQUFJekMsU0FBU3NGLGNBQVQsSUFBMkJ4QyxTQUFTNUMsSUFBVCxDQUFjLE1BQWQsTUFBMEJnSixTQUF6RCxFQUFvRTtBQUNsRXBHLGlCQUFTM0MsUUFBVCxDQUFrQix3QkFBbEI7QUFDRDtBQUNGO0FBQ0Y7O0FBRUQsV0FBU1EsWUFBVCxDQUFzQk8sQ0FBdEIsRUFBeUJrSSxNQUF6QixFQUFpQztBQUMvQixRQUFJQSxVQUFVLFlBQWQsRUFBNEI7QUFDMUI7QUFDRDs7QUFFRCxRQUFJdEosT0FBT04sRUFBRSxJQUFGLENBQVg7O0FBRUEsUUFBSSxLQUFLNEUsS0FBTCxLQUFlLEVBQW5CLEVBQXVCO0FBQ3JCdUIsb0JBQWM3RixJQUFkLEVBQW9CLElBQXBCLEVBQTBCc0osTUFBMUI7QUFDQTtBQUNEOztBQUVELFFBQUl0SixLQUFLdUosRUFBTCxDQUFRLFFBQVIsTUFBc0IsQ0FBQ25JLENBQUQsSUFBTUEsRUFBRXFELElBQUYsSUFBVSxRQUF0QyxDQUFKLEVBQXFEO0FBQ25EO0FBQ0Q7O0FBRUQsUUFBSXZFLFdBQVdGLEtBQUtJLElBQUwsQ0FBVSxxQkFBVixDQUFmO0FBQ0EsUUFBSUgsS0FBS0QsS0FBS0ksSUFBTCxDQUFVLGdCQUFWLENBQVQ7QUFDQSxRQUFJbUYsVUFBVXRGLEdBQUdzRixPQUFqQjs7QUFFQSxRQUFJQSxZQUFZLElBQWhCLEVBQXNCO0FBQ3BCdkYsV0FBS2lFLE9BQUwsQ0FBYSxpQkFBYjtBQUNBO0FBQ0Q7O0FBRUQsUUFBSXVGLGFBQWEsS0FBakI7QUFDQTtBQUNBLFFBQ0V0SixTQUFTNEcsT0FBVCxLQUFxQixJQUFyQixJQUNBNUcsU0FBU21ILE9BQVQsS0FBcUIsSUFEckIsS0FFQzlCLFVBQVVyRixTQUFTNEcsT0FBbkIsSUFBOEJ2QixVQUFVckYsU0FBU21ILE9BRmxELENBREYsRUFJRTtBQUNBbUMsbUJBQWEsSUFBYjtBQUNEOztBQUVEO0FBQ0E5SixNQUFFSyxJQUFGLENBQU9HLFNBQVN1SCxpQkFBaEIsRUFBbUMsWUFBVztBQUM1QyxVQUFJbEMsV0FBVyxLQUFLLENBQUwsQ0FBWCxJQUFzQkEsVUFBVSxLQUFLLENBQUwsQ0FBcEMsRUFBNkM7QUFDM0NpRSxxQkFBYSxJQUFiO0FBQ0EsZUFBTyxLQUFQO0FBQ0Q7QUFDRixLQUxEOztBQU9BLFFBQUl0SixTQUFTc0YsY0FBYixFQUE2QjtBQUMzQixVQUFJaUUsZUFBZXZKLFNBQVN3SSxnQkFBVCxDQUEwQm5ELE9BQTFCLEVBQW1DckYsUUFBbkMsQ0FBbkI7QUFDQSxVQUFJdUosZ0JBQWdCbEUsT0FBcEIsRUFBNkI7QUFDM0JBLGtCQUFVa0UsWUFBVjtBQUNBSCxpQkFBUyxJQUFUO0FBQ0Q7QUFDRjs7QUFFRCxRQUFJN0QsYUFBYUUsVUFBVUosT0FBVixFQUFtQnJGLFFBQW5CLENBQWpCOztBQUVBLFFBQUlzSixVQUFKLEVBQWdCO0FBQ2QsVUFDRTNELGNBQWM3RixJQUFkLEVBQW9CeUYsVUFBcEIsRUFBZ0MsT0FBaEMsS0FDQ3JFLEtBQUtBLEVBQUVxRCxJQUFGLElBQVUsUUFGbEIsRUFHRTtBQUNBekUsYUFBS2lFLE9BQUwsQ0FBYSxnQkFBYjtBQUNEO0FBQ0YsS0FQRCxNQU9PO0FBQ0w0QixvQkFBYzdGLElBQWQsRUFBb0J5RixVQUFwQixFQUFnQzZELE1BQWhDO0FBQ0Q7QUFDRjs7QUFFRCxXQUFTbEcsYUFBVCxDQUF1QnBELElBQXZCLEVBQTZCO0FBQzNCLFFBQUlBLEtBQUt1SixFQUFMLENBQVEsT0FBUixDQUFKLEVBQXNCO0FBQ3BCLGFBQU92SixLQUFLNkIsR0FBTCxFQUFQO0FBQ0QsS0FGRCxNQUVPO0FBQ0w7QUFDQSxhQUFPN0IsS0FBS0ksSUFBTCxDQUFVLHFCQUFWLENBQVA7QUFDRDtBQUNGOztBQUVELFdBQVN5RixhQUFULENBQXVCN0YsSUFBdkIsRUFBNkJzRSxLQUE3QixFQUFvQ29GLE1BQXBDLEVBQTRDO0FBQzFDLFFBQU16SixLQUFLRCxLQUFLSSxJQUFMLENBQVUsZ0JBQVYsQ0FBWDtBQUNBSCxPQUFHc0YsT0FBSCxHQUFhdEYsR0FBR2tELFFBQUgsQ0FBWW1CLEtBQVosQ0FBYjs7QUFFQSxRQUFJdEUsS0FBS3VKLEVBQUwsQ0FBUSxPQUFSLENBQUosRUFBc0I7QUFDcEJ2SixXQUFLNkIsR0FBTCxDQUFTeUMsS0FBVDs7QUFFQSxVQUFJcEUsV0FBV0YsS0FBS0ksSUFBTCxDQUFVLHFCQUFWLENBQWY7O0FBRUEsVUFBSUYsU0FBU0ksU0FBVCxJQUFzQm9KLFVBQVUsUUFBcEMsRUFBOEM7QUFDNUMxSixhQUNHSSxJQURILENBQ1EsaUJBRFIsRUFFR3lCLEdBRkgsQ0FFTzZELG9CQUFvQnpGLEdBQUdrRCxRQUFILENBQVltQixLQUFaLENBQXBCLEVBQXdDcEUsUUFBeEMsQ0FGUDtBQUdEO0FBQ0Y7O0FBRUQsUUFBSUYsS0FBS0ksSUFBTCxDQUFVLHFCQUFWLEtBQW9Da0UsS0FBeEMsRUFBK0M7QUFDN0N0RSxXQUFLSSxJQUFMLENBQVUscUJBQVYsRUFBaUNrRSxLQUFqQztBQUNBLFVBQUlvRixVQUFVLFFBQWQsRUFBd0I7QUFDdEIxSixhQUNHaUUsT0FESCxDQUNXLFlBRFgsRUFFR0EsT0FGSCxDQUVXLFlBRlgsRUFHR0EsT0FISCxDQUdXLFFBSFgsRUFHcUIsWUFIckI7QUFJRCxPQUxELE1BS08sSUFBSSxDQUFDLE9BQUQsRUFBVSxTQUFWLEVBQXFCMEYsT0FBckIsQ0FBNkJELE1BQTdCLEtBQXdDLENBQUMsQ0FBN0MsRUFBZ0Q7QUFDckQxSixhQUFLaUUsT0FBTCxDQUFhLFlBQWI7QUFDRDs7QUFFRCxhQUFPLElBQVA7QUFDRCxLQVpELE1BWU87QUFDTCxVQUFJLENBQUMsT0FBRCxFQUFVLFNBQVYsRUFBcUIwRixPQUFyQixDQUE2QkQsTUFBN0IsS0FBd0MsQ0FBQyxDQUE3QyxFQUFnRDtBQUM5QzFKLGFBQUtpRSxPQUFMLENBQWEsWUFBYjtBQUNEO0FBQ0QsYUFBTyxLQUFQO0FBQ0Q7QUFDRjs7QUFFRDs7O0FBR0EsV0FBU2hELHdCQUFULENBQWtDRyxDQUFsQyxFQUFxQztBQUNuQyxZQUFRQSxFQUFFd0ksT0FBVjtBQUNFLFdBQUssRUFBTCxDQURGLENBQ1c7QUFDVCxXQUFLLENBQUw7QUFBUTtBQUNOOztBQUVGO0FBQ0V4SSxVQUFFQyxjQUFGO0FBTko7QUFRRDs7QUFFRDs7O0FBR0EsV0FBU1AsZUFBVCxDQUF5Qk0sQ0FBekIsRUFBNEI7QUFDMUIsUUFBSXBCLE9BQU9OLEVBQUUsSUFBRixDQUFYO0FBQ0EsUUFBSStCLE9BQU96QixLQUFLSSxJQUFMLENBQVUsaUJBQVYsQ0FBWDs7QUFFQSxRQUFJLENBQUNxQixJQUFELElBQVMsQ0FBQ0csV0FBV0gsSUFBWCxDQUFkLEVBQWdDO0FBQzlCLFVBQUlMLEVBQUV3SSxPQUFGLElBQWEsRUFBakIsRUFBcUI7QUFDbkI7QUFDQWhLLGdCQUFRZ0IsSUFBUixDQUFhTSxJQUFiLENBQWtCbEIsS0FBS21CLEdBQUwsQ0FBUyxDQUFULENBQWxCO0FBQ0FNLGVBQU96QixLQUFLSSxJQUFMLENBQVUsaUJBQVYsQ0FBUDtBQUNBLFlBQUksQ0FBQ21CLGNBQWN2QixJQUFkLENBQUwsRUFBMEI7QUFDeEJBLGVBQUtzQixLQUFMO0FBQ0Q7QUFDRixPQVBELE1BT087QUFDTCxlQUFPLElBQVA7QUFDRDtBQUNGOztBQUVELFlBQVFGLEVBQUV3SSxPQUFWO0FBQ0UsV0FBSyxFQUFMO0FBQVM7QUFDUCxZQUFJekYsYUFBYW5FLElBQWIsQ0FBSixFQUF3QjtBQUN0QmEsdUJBQWFLLElBQWIsQ0FBa0JsQixLQUFLbUIsR0FBTCxDQUFTLENBQVQsQ0FBbEIsRUFBK0IsRUFBRXNELE1BQU0sUUFBUixFQUEvQjtBQUNBN0Usa0JBQVFtQyxJQUFSLENBQWE4SCxLQUFiLENBQW1CLElBQW5CO0FBQ0Q7O0FBRUR6SSxVQUFFQyxjQUFGO0FBQ0EsZUFBTyxLQUFQOztBQUVGLFdBQUssRUFBTDtBQUFTO0FBQ1AsWUFBSTJCLFdBQVd2QixLQUFLd0IsSUFBTCxDQUFVLHlCQUFWLENBQWY7O0FBRUEsWUFBSSxDQUFDRCxTQUFTdEIsTUFBZCxFQUFzQjtBQUNwQkQsZUFBS3dCLElBQUwsQ0FBVSxJQUFWLEVBQWdCbEQsSUFBaEIsQ0FBcUIsVUFBU1csQ0FBVCxFQUFZd0ksR0FBWixFQUFpQjtBQUNwQyxnQkFBSXhKLEVBQUV3SixHQUFGLEVBQU96RixRQUFQLEdBQWtCZixHQUFsQixHQUF3QixDQUE1QixFQUErQjtBQUM3Qk0seUJBQVd0RCxFQUFFd0osR0FBRixDQUFYO0FBQ0EscUJBQU8sS0FBUDtBQUNEO0FBQ0YsV0FMRDtBQU1BbEcsbUJBQVMzQyxRQUFULENBQWtCLHdCQUFsQjtBQUNELFNBUkQsTUFRTyxJQUFJLENBQUMyQyxTQUFTdUcsRUFBVCxDQUFZLGNBQVosQ0FBTCxFQUFrQztBQUN2Q3ZHLG1CQUFTRCxXQUFULENBQXFCLHdCQUFyQjtBQUNBQyxtQkFBUzhHLElBQVQsR0FBZ0J6SixRQUFoQixDQUF5Qix3QkFBekI7O0FBRUEsY0FBSTJDLFNBQVM4RyxJQUFULEdBQWdCckcsUUFBaEIsR0FBMkJmLEdBQTNCLEdBQWlDTSxTQUFTTCxXQUFULEVBQXJDLEVBQTZEO0FBQzNEbEIsaUJBQUtxQixTQUFMLENBQWVyQixLQUFLcUIsU0FBTCxLQUFtQkUsU0FBU0wsV0FBVCxFQUFsQztBQUNEO0FBQ0Y7O0FBRUQsZUFBTyxLQUFQOztBQUVGLFdBQUssRUFBTDtBQUFTO0FBQ1BLLG1CQUFXdkIsS0FBS3dCLElBQUwsQ0FBVSx5QkFBVixDQUFYOztBQUVBLFlBQUlELFNBQVN0QixNQUFULEtBQW9CLENBQXhCLEVBQTJCO0FBQ3pCRCxlQUFLd0IsSUFBTCxDQUFVLElBQVYsRUFBZ0JsRCxJQUFoQixDQUFxQixVQUFTVyxDQUFULEVBQVl3SSxHQUFaLEVBQWlCO0FBQ3BDLGdCQUFJeEosRUFBRXdKLEdBQUYsRUFBT3pGLFFBQVAsR0FBa0JmLEdBQWxCLEdBQXdCLENBQTVCLEVBQStCO0FBQzdCTSx5QkFBV3RELEVBQUV3SixHQUFGLENBQVg7QUFDQSxxQkFBTyxLQUFQO0FBQ0Q7QUFDRixXQUxEOztBQU9BbEcsbUJBQVMzQyxRQUFULENBQWtCLHdCQUFsQjtBQUVELFNBVkQsTUFVTyxJQUFJLENBQUMyQyxTQUFTdUcsRUFBVCxDQUFZLGFBQVosQ0FBTCxFQUFpQztBQUN0Q3ZHLG1CQUFTRCxXQUFULENBQXFCLHdCQUFyQjtBQUNBQyxtQkFBUytHLElBQVQsR0FBZ0IxSixRQUFoQixDQUF5Qix3QkFBekI7O0FBRUEsY0FDRTJDLFNBQVMrRyxJQUFULEdBQWdCdEcsUUFBaEIsR0FBMkJmLEdBQTNCLEdBQWlDLElBQUlNLFNBQVNMLFdBQVQsRUFBckMsR0FDQWxCLEtBQUtrQixXQUFMLEVBRkYsRUFHRTtBQUNBbEIsaUJBQUtxQixTQUFMLENBQWVyQixLQUFLcUIsU0FBTCxLQUFtQkUsU0FBU0wsV0FBVCxFQUFsQztBQUNEO0FBQ0Y7O0FBRUQsZUFBTyxLQUFQOztBQUVGLFdBQUssRUFBTDtBQUFTO0FBQ1BsQixhQUFLd0IsSUFBTCxDQUFVLElBQVYsRUFBZ0JGLFdBQWhCLENBQTRCLHdCQUE1QjtBQUNBbkQsZ0JBQVFtQyxJQUFSO0FBQ0E7O0FBRUYsV0FBSyxDQUFMO0FBQVE7QUFDTm5DLGdCQUFRbUMsSUFBUjtBQUNBOztBQUVGO0FBQ0UsZUFBTyxJQUFQO0FBckVKO0FBdUVEOztBQUVEOzs7QUFHQSxXQUFTaEIsYUFBVCxDQUF1QkssQ0FBdkIsRUFBMEI7QUFDeEIsUUFBSXBCLE9BQU9OLEVBQUUsSUFBRixDQUFYO0FBQ0EsUUFBSStCLE9BQU96QixLQUFLSSxJQUFMLENBQVUsaUJBQVYsQ0FBWDtBQUNBLFFBQUlGLFdBQVdGLEtBQUtJLElBQUwsQ0FBVSxxQkFBVixDQUFmOztBQUVBLFFBQUksQ0FBQ3FCLElBQUQsSUFBUyxDQUFDRyxXQUFXSCxJQUFYLENBQVYsSUFBOEJ2QixTQUFTYyxnQkFBM0MsRUFBNkQ7QUFDM0QsYUFBTyxJQUFQO0FBQ0Q7O0FBRUQsUUFBSUksRUFBRXFELElBQUYsS0FBVyxPQUFYLElBQXNCckQsRUFBRXFELElBQUYsS0FBVyxLQUFyQyxFQUE0QztBQUMxQ3VGLGlCQUFXLFlBQVc7QUFDcEIsWUFBSTlKLFNBQVMrSixrQkFBYixFQUFpQztBQUMvQm5JLHVCQUFhOUIsSUFBYixFQUFtQnlCLElBQW5CO0FBQ0QsU0FGRCxNQUVPO0FBQ0xBLGVBQUtNLElBQUw7QUFDRDtBQUNGLE9BTkQsRUFNRyxDQU5IO0FBT0E7QUFDRDs7QUFFRCxZQUFRWCxFQUFFd0ksT0FBVjtBQUNFLFdBQUssRUFBTCxDQURGLENBQ1c7QUFDVCxXQUFLLEVBQUw7QUFDQSxXQUFLLEVBQUw7QUFDQSxXQUFLLEVBQUw7QUFDQSxXQUFLLEdBQUw7QUFDQSxXQUFLLEdBQUw7QUFDQSxXQUFLLEdBQUw7QUFDQSxXQUFLLEdBQUw7QUFDQSxXQUFLLEdBQUw7QUFDQSxXQUFLLEdBQUw7QUFDQSxXQUFLLEVBQUwsQ0FYRixDQVdXO0FBQ1QsV0FBSyxFQUFMO0FBQ0EsV0FBSyxFQUFMO0FBQ0EsV0FBSyxFQUFMO0FBQ0EsV0FBSyxFQUFMO0FBQ0EsV0FBSyxFQUFMO0FBQ0EsV0FBSyxFQUFMO0FBQ0EsV0FBSyxFQUFMO0FBQ0EsV0FBSyxFQUFMO0FBQ0EsV0FBSyxFQUFMO0FBQ0EsV0FBSyxFQUFMLENBckJGLENBcUJXO0FBQ1QsV0FBSyxFQUFMLENBdEJGLENBc0JXO0FBQ1QsV0FBSyxFQUFMLENBdkJGLENBdUJXO0FBQ1QsV0FBSyxHQUFMLENBeEJGLENBd0JZO0FBQ1YsV0FBSyxDQUFMLENBekJGLENBeUJVO0FBQ1IsV0FBSyxFQUFMO0FBQVM7QUFDUCxZQUFJMUosU0FBUytKLGtCQUFiLEVBQWlDO0FBQy9CbkksdUJBQWE5QixJQUFiLEVBQW1CeUIsSUFBbkI7QUFDRCxTQUZELE1BRU87QUFDTEEsZUFBS00sSUFBTDtBQUNEO0FBQ0Q7QUFoQ0o7QUFrQ0Q7O0FBRUQsV0FBU29DLFlBQVQsQ0FBc0JuRSxJQUF0QixFQUE0QjtBQUMxQixRQUFJRSxXQUFXRixLQUFLSSxJQUFMLENBQVUscUJBQVYsQ0FBZjtBQUNBLFFBQUlxQixPQUFPekIsS0FBS0ksSUFBTCxDQUFVLGlCQUFWLENBQVg7QUFDQSxRQUFJZ0osWUFBWSxJQUFoQjs7QUFFQSxRQUFJYyxTQUFTekksS0FBS3dCLElBQUwsQ0FBVSx5QkFBVixDQUFiOztBQUVBLFFBQUlpSCxPQUFPM0csUUFBUCxDQUFnQix3QkFBaEIsQ0FBSixFQUErQztBQUM3QyxhQUFPLEtBQVA7QUFDRDs7QUFFRCxRQUFJMkcsT0FBT3hJLE1BQVgsRUFBbUI7QUFDakI7QUFDQTBILGtCQUFZYyxPQUFPOUosSUFBUCxDQUFZLE1BQVosQ0FBWjtBQUNEOztBQUVELFFBQUlnSixjQUFjLElBQWxCLEVBQXdCO0FBQ3RCLFVBQUksT0FBT0EsU0FBUCxJQUFvQixRQUF4QixFQUFrQztBQUNoQ0Esb0JBQVl6RCxVQUFVeUQsU0FBVixFQUFxQmxKLFFBQXJCLENBQVo7QUFDRDs7QUFFRDJGLG9CQUFjN0YsSUFBZCxFQUFvQm9KLFNBQXBCLEVBQStCLFFBQS9CO0FBQ0Q7O0FBRUQsV0FBTyxJQUFQO0FBQ0Q7O0FBRUQsV0FBU2xCLGFBQVQsQ0FBdUIzQyxPQUF2QixFQUFnQzBCLElBQWhDLEVBQXNDO0FBQ3BDMUIsY0FBVTRFLEtBQUtDLEdBQUwsQ0FBUzdFLE9BQVQsQ0FBVjtBQUNBLFFBQUk4RSxVQUFVRixLQUFLRyxLQUFMLENBQVcvRSxVQUFVLEVBQXJCLENBQWQ7QUFBQSxRQUNFNEMsV0FBVyxFQURiO0FBQUEsUUFFRW9DLEtBRkY7QUFBQSxRQUdFQyxJQUhGOztBQUtBLFFBQUlILFVBQVUsRUFBZCxFQUFrQjtBQUNoQjtBQUNBbEMsaUJBQVcsQ0FBQ2tDLE9BQUQsRUFBVTFLLE1BQU02SyxJQUFoQixDQUFYO0FBQ0QsS0FIRCxNQUdPO0FBQ0xELGNBQVFKLEtBQUtNLEtBQUwsQ0FBV0osVUFBVSxFQUFyQixDQUFSO0FBQ0FHLGFBQU9ILFVBQVUsRUFBakI7O0FBRUE7QUFDQSxVQUFJcEQsUUFBUSxFQUFSLElBQWN1RCxRQUFRLEVBQTFCLEVBQThCO0FBQzVCRCxpQkFBUzVLLE1BQU0rSyxPQUFOLEdBQWdCLENBQXpCO0FBQ0Q7O0FBRUR2QyxlQUFTd0MsSUFBVCxDQUFjSixLQUFkO0FBQ0FwQyxlQUFTd0MsSUFBVCxDQUFjSixTQUFTLENBQVQsR0FBYTVLLE1BQU1pTCxFQUFuQixHQUF3QmpMLE1BQU1rTCxHQUE1Qzs7QUFFQTtBQUNBO0FBQ0EsVUFBSTVELFFBQVEsRUFBUixJQUFjdUQsSUFBbEIsRUFBd0I7QUFDdEJyQyxpQkFBU3dDLElBQVQsQ0FBY0gsSUFBZDtBQUNBckMsaUJBQVN3QyxJQUFULENBQWNoTCxNQUFNNkssSUFBcEI7QUFDRDtBQUNGOztBQUVELFdBQU9yQyxTQUFTMkMsSUFBVCxDQUFjLEdBQWQsQ0FBUDtBQUNEOztBQUVELFdBQVNuRixTQUFULENBQW1CekMsT0FBbkIsRUFBNEJoRCxRQUE1QixFQUFzQztBQUNwQyxRQUFJLE9BQU9nRCxPQUFQLElBQWtCLFFBQXRCLEVBQWdDO0FBQzlCLGFBQU8sSUFBUDtBQUNEOztBQUVELFFBQUlxQyxVQUFVakQsU0FBU1ksVUFBVSxFQUFuQixDQUFkO0FBQUEsUUFDRW1ILFVBQVUvSCxTQUFVWSxVQUFVLEVBQVgsR0FBaUIsRUFBMUIsQ0FEWjtBQUFBLFFBRUVxSCxRQUFRakksU0FBVVksV0FBVyxLQUFLLEVBQWhCLENBQUQsR0FBd0IsRUFBakMsQ0FGVjs7QUFJQSxRQUFJOEIsT0FBTyxJQUFJRCxJQUFKLENBQVMsSUFBVCxFQUFlLENBQWYsRUFBa0IsQ0FBbEIsRUFBcUJ3RixLQUFyQixFQUE0QkYsT0FBNUIsRUFBcUM5RSxPQUFyQyxFQUE4QyxDQUE5QyxDQUFYOztBQUVBLFFBQUl3RixNQUFNL0YsS0FBS0osT0FBTCxFQUFOLENBQUosRUFBMkI7QUFDekIsYUFBTyxJQUFQO0FBQ0Q7O0FBRUQsUUFBSWxGLEVBQUUrRSxJQUFGLENBQU92RSxTQUFTb0gsVUFBaEIsTUFBZ0MsVUFBcEMsRUFBZ0Q7QUFDOUMsYUFBT3BILFNBQVNvSCxVQUFULENBQW9CdEMsSUFBcEIsQ0FBUDtBQUNEOztBQUVELFFBQUlnRyxTQUFTLEVBQWI7QUFDQSxRQUFJQyxJQUFKLEVBQVVDLElBQVY7QUFDQSxTQUFLLElBQUl4SyxJQUFJLENBQWIsRUFBZ0JBLElBQUlSLFNBQVNvSCxVQUFULENBQW9CNUYsTUFBeEMsRUFBZ0RoQixHQUFoRCxFQUFxRDtBQUNuRHdLLGFBQU9oTCxTQUFTb0gsVUFBVCxDQUFvQjZELE1BQXBCLENBQTJCekssQ0FBM0IsQ0FBUDtBQUNBLGNBQVF3SyxJQUFSO0FBQ0UsYUFBSyxHQUFMO0FBQ0VGLG9CQUFVaEcsS0FBS29HLFFBQUwsS0FBa0IsRUFBbEIsR0FBdUJ6TCxNQUFNMEwsRUFBN0IsR0FBa0MxTCxNQUFNMkwsRUFBbEQ7QUFDQTs7QUFFRixhQUFLLEdBQUw7QUFDRU4sb0JBQVVoRyxLQUFLb0csUUFBTCxLQUFrQixFQUFsQixHQUF1QnpMLE1BQU00TCxFQUE3QixHQUFrQzVMLE1BQU02TCxFQUFsRDtBQUNBOztBQUVGLGFBQUssR0FBTDtBQUNFUCxpQkFBT2pHLEtBQUtvRyxRQUFMLEtBQWtCLEVBQXpCO0FBQ0FKLG9CQUFVQyxTQUFTLENBQVQsR0FBYSxJQUFiLEdBQW9CQSxJQUE5QjtBQUNBOztBQUVGLGFBQUssR0FBTDtBQUNFQSxpQkFBT2pHLEtBQUtvRyxRQUFMLEVBQVA7QUFDQSxjQUFJbEksOEJBQUosRUFBeUIrSCxPQUFPL0ssU0FBU3FILFFBQVQsR0FBb0IsRUFBcEIsR0FBeUIsQ0FBaEM7QUFDekJ5RCxvQkFBVUMsSUFBVjtBQUNBOztBQUVGLGFBQUssR0FBTDtBQUNFQSxpQkFBT2pHLEtBQUtvRyxRQUFMLEtBQWtCLEVBQXpCOztBQUVBLGNBQUlILFNBQVMsQ0FBVCxJQUFjQSxPQUFPLEVBQXpCLEVBQTZCO0FBQzNCQSxtQkFBTyxNQUFNQSxJQUFiO0FBQ0Q7O0FBRURELG9CQUFVQyxTQUFTLENBQVQsR0FBYSxJQUFiLEdBQW9CQSxJQUE5QjtBQUNBOztBQUVGLGFBQUssR0FBTDtBQUNFQSxpQkFBT2pHLEtBQUtvRyxRQUFMLEVBQVA7QUFDQSxjQUFJbEksOEJBQUosRUFBeUIrSCxPQUFPL0ssU0FBU3FILFFBQVQsR0FBb0IsRUFBcEIsR0FBeUIsQ0FBaEM7QUFDekJ5RCxvQkFBVUMsT0FBTyxDQUFQLEdBQVdBLElBQVgsR0FBa0IsTUFBTUEsSUFBbEM7QUFDQTs7QUFFRixhQUFLLEdBQUw7QUFDRSxjQUFJWixVQUFVckYsS0FBS3lHLFVBQUwsRUFBZDtBQUNBVCxvQkFBVVgsVUFBVSxDQUFWLEdBQWNBLE9BQWQsR0FBd0IsTUFBTUEsT0FBeEM7QUFDQTs7QUFFRixhQUFLLEdBQUw7QUFDRTlFLG9CQUFVUCxLQUFLMEcsVUFBTCxFQUFWO0FBQ0FWLG9CQUFVekYsVUFBVSxDQUFWLEdBQWNBLE9BQWQsR0FBd0IsTUFBTUEsT0FBeEM7QUFDQTs7QUFFRixhQUFLLElBQUw7QUFDRTtBQUNBN0U7QUFDQXNLLG9CQUFVOUssU0FBU29ILFVBQVQsQ0FBb0I2RCxNQUFwQixDQUEyQnpLLENBQTNCLENBQVY7QUFDQTs7QUFFRjtBQUNFc0ssb0JBQVVFLElBQVY7QUFyREo7QUF1REQ7O0FBRUQsV0FBT0YsTUFBUDtBQUNEOztBQUVELFdBQVNXLEtBQVQsQ0FBZUMsQ0FBZixFQUFrQjtBQUNoQixXQUFPLENBQUMsTUFBTUEsQ0FBUCxFQUFVQyxLQUFWLENBQWdCLENBQUMsQ0FBakIsQ0FBUDtBQUNEOztBQUVEO0FBQ0FuTSxJQUFFb00sRUFBRixDQUFLQyxVQUFMLEdBQWtCLFVBQVNDLE1BQVQsRUFBaUI7QUFDakMsUUFBSSxDQUFDLEtBQUt0SyxNQUFWLEVBQWtCLE9BQU8sSUFBUDtBQUNsQixRQUFJOUIsUUFBUW9NLE1BQVIsQ0FBSixFQUFxQjtBQUNuQjtBQUNBLFVBQUksQ0FBQyxLQUFLekksUUFBTCxDQUFjLHFCQUFkLENBQUwsRUFBMkM7QUFDekMsZUFBTyxJQUFQO0FBQ0Q7QUFDRCxhQUFPM0QsUUFBUW9NLE1BQVIsRUFBZ0JuQyxLQUFoQixDQUNMLElBREssRUFFTG9DLE1BQU1DLFNBQU4sQ0FBZ0JMLEtBQWhCLENBQXNCM0ssSUFBdEIsQ0FBMkJpTCxTQUEzQixFQUFzQyxDQUF0QyxDQUZLLENBQVA7QUFJRCxLQVRELE1BU08sSUFBSSxRQUFPSCxNQUFQLHlDQUFPQSxNQUFQLE9BQWtCLFFBQWxCLElBQThCLENBQUNBLE1BQW5DLEVBQTJDO0FBQ2hELGFBQU9wTSxRQUFRQyxJQUFSLENBQWFnSyxLQUFiLENBQW1CLElBQW5CLEVBQXlCc0MsU0FBekIsQ0FBUDtBQUNELEtBRk0sTUFFQTtBQUNMek0sUUFBRThJLEtBQUYsQ0FBUSxZQUFZd0QsTUFBWixHQUFxQixzQ0FBN0I7QUFDRDtBQUNGLEdBaEJEO0FBaUJELENBbG5DRCxFIiwiZmlsZSI6IjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIGpxdWVyeS10aW1lcGlja2VyIHYxLjExLjEzIC0gQSBqUXVlcnkgdGltZXBpY2tlciBwbHVnaW4gaW5zcGlyZWQgYnkgR29vZ2xlIENhbGVuZGFyLiBJdCBzdXBwb3J0cyBib3RoIG1vdXNlIGFuZCBrZXlib2FyZCBuYXZpZ2F0aW9uLlxuICogQ29weXJpZ2h0IChjKSAyMDE1IEpvbiBUaG9ybnRvbiAtIGh0dHA6Ly9qb250aG9ybnRvbi5naXRodWIuY29tL2pxdWVyeS10aW1lcGlja2VyL1xuICogTGljZW5zZTogTUlUXG4gKi9cblxuLy8gaW1wb3J0IGpRdWVyeSBmcm9tICdqcXVlcnknO1xuaW1wb3J0IFRpbWVwaWNrZXIgZnJvbSAnLi90aW1lcGlja2VyJztcbmltcG9ydCBtb2R1bG9TZWNvbmRzIGZyb20gJy4vdGltZXBpY2tlci9yb3VuZGluZyc7XG5pbXBvcnQgeyBPTkVfREFZIH0gZnJvbSAnLi90aW1lcGlja2VyL2NvbnN0YW50cyc7XG5cbihmdW5jdGlvbihmYWN0b3J5KSB7XG4gIGlmIChcbiAgICB0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIiAmJlxuICAgIGV4cG9ydHMgJiZcbiAgICB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiICYmXG4gICAgbW9kdWxlICYmXG4gICAgbW9kdWxlLmV4cG9ydHMgPT09IGV4cG9ydHNcbiAgKSB7XG4gICAgLy8gQnJvd3NlcmlmeS4gQXR0YWNoIHRvIGpRdWVyeSBtb2R1bGUuXG4gICAgZmFjdG9yeShyZXF1aXJlKFwianF1ZXJ5XCIpKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuICAgIC8vIEFNRC4gUmVnaXN0ZXIgYXMgYW4gYW5vbnltb3VzIG1vZHVsZS5cbiAgICBkZWZpbmUoW1wianF1ZXJ5XCJdLCBmYWN0b3J5KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBCcm93c2VyIGdsb2JhbHNcbiAgICBmYWN0b3J5KGpRdWVyeSk7XG4gIH1cbn0pKGZ1bmN0aW9uKCQpIHtcbiAgdmFyIF9sYW5nID0ge307XG5cbiAgdmFyIG1ldGhvZHMgPSB7XG4gICAgaW5pdDogZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHNlbGYgPSAkKHRoaXMpO1xuXG4gICAgICAgIGNvbnN0IHRwID0gbmV3IFRpbWVwaWNrZXIodGhpcywgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gdHAuc2V0dGluZ3M7XG4gICAgICAgIF9sYW5nID0gc2V0dGluZ3MubGFuZztcblxuICAgICAgICBzZWxmLmRhdGEoXCJ0aW1lcGlja2VyLXNldHRpbmdzXCIsIHNldHRpbmdzKTtcbiAgICAgICAgc2VsZi5kYXRhKFwidGltZXBpY2tlci1vYmpcIiwgdHApO1xuICAgICAgICBzZWxmLmFkZENsYXNzKFwidWktdGltZXBpY2tlci1pbnB1dFwiKTtcblxuICAgICAgICBpZiAoc2V0dGluZ3MudXNlU2VsZWN0KSB7XG4gICAgICAgICAgX3JlbmRlcihzZWxmKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWxmLnByb3AoXCJhdXRvY29tcGxldGVcIiwgXCJvZmZcIik7XG4gICAgICAgICAgaWYgKHNldHRpbmdzLnNob3dPbikge1xuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBzZXR0aW5ncy5zaG93T24pIHtcbiAgICAgICAgICAgICAgc2VsZi5vbihzZXR0aW5ncy5zaG93T25baV0gKyBcIi50aW1lcGlja2VyXCIsIG1ldGhvZHMuc2hvdyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHNlbGYub24oXCJjaGFuZ2UudGltZXBpY2tlclwiLCBfZm9ybWF0VmFsdWUpO1xuICAgICAgICAgIHNlbGYub24oXCJrZXlkb3duLnRpbWVwaWNrZXJcIiwgX2tleWRvd25oYW5kbGVyKTtcbiAgICAgICAgICBzZWxmLm9uKFwia2V5dXAudGltZXBpY2tlclwiLCBfa2V5dXBoYW5kbGVyKTtcbiAgICAgICAgICBpZiAoc2V0dGluZ3MuZGlzYWJsZVRleHRJbnB1dCkge1xuICAgICAgICAgICAgc2VsZi5vbihcImtleWRvd24udGltZXBpY2tlclwiLCBfZGlzYWJsZVRleHRJbnB1dEhhbmRsZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZWxmLm9uKFwiY3V0LnRpbWVwaWNrZXJcIiwgX2tleXVwaGFuZGxlcik7XG4gICAgICAgICAgc2VsZi5vbihcInBhc3RlLnRpbWVwaWNrZXJcIiwgX2tleXVwaGFuZGxlcik7XG5cbiAgICAgICAgICBfZm9ybWF0VmFsdWUuY2FsbChzZWxmLmdldCgwKSwgbnVsbCwgXCJpbml0aWFsXCIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgc2hvdzogZnVuY3Rpb24oZSkge1xuICAgICAgdmFyIHNlbGYgPSAkKHRoaXMpO1xuICAgICAgdmFyIHNldHRpbmdzID0gc2VsZi5kYXRhKFwidGltZXBpY2tlci1zZXR0aW5nc1wiKTtcbiAgICAgIHZhciB0cCA9IHNlbGYuZGF0YShcInRpbWVwaWNrZXItb2JqXCIpO1xuXG4gICAgICBpZiAoZSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZXR0aW5ncy51c2VTZWxlY3QpIHtcbiAgICAgICAgc2VsZi5kYXRhKFwidGltZXBpY2tlci1saXN0XCIpLmZvY3VzKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKF9oaWRlS2V5Ym9hcmQoc2VsZikpIHtcbiAgICAgICAgLy8gYmxvY2sgdGhlIGtleWJvYXJkIG9uIG1vYmlsZSBkZXZpY2VzXG4gICAgICAgIHNlbGYuYmx1cigpO1xuICAgICAgfVxuXG4gICAgICB2YXIgbGlzdCA9IHNlbGYuZGF0YShcInRpbWVwaWNrZXItbGlzdFwiKTtcblxuICAgICAgLy8gY2hlY2sgaWYgaW5wdXQgaXMgcmVhZG9ubHlcbiAgICAgIGlmIChzZWxmLnByb3AoXCJyZWFkb25seVwiKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIGNoZWNrIGlmIGxpc3QgbmVlZHMgdG8gYmUgcmVuZGVyZWRcbiAgICAgIGlmIChcbiAgICAgICAgIWxpc3QgfHxcbiAgICAgICAgbGlzdC5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgdHlwZW9mIHNldHRpbmdzLmR1cmF0aW9uVGltZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICApIHtcbiAgICAgICAgX3JlbmRlcihzZWxmKTtcbiAgICAgICAgbGlzdCA9IHNlbGYuZGF0YShcInRpbWVwaWNrZXItbGlzdFwiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKF9pc1Zpc2libGUobGlzdCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzZWxmLmRhdGEoXCJ1aS10aW1lcGlja2VyLXZhbHVlXCIsIHNlbGYudmFsKCkpO1xuICAgICAgX3NldFNlbGVjdGVkKHNlbGYsIGxpc3QpO1xuXG4gICAgICAvLyBtYWtlIHN1cmUgb3RoZXIgcGlja2VycyBhcmUgaGlkZGVuXG4gICAgICBtZXRob2RzLmhpZGUoKTtcblxuICAgICAgLy8gcG9zaXRpb24gdGhlIGRyb3Bkb3duIHJlbGF0aXZlIHRvIHRoZSBpbnB1dFxuICAgICAgbGlzdC5zaG93KCk7XG4gICAgICB2YXIgbGlzdE9mZnNldCA9IHt9O1xuXG4gICAgICBpZiAoc2V0dGluZ3Mub3JpZW50YXRpb24ubWF0Y2goL3IvKSkge1xuICAgICAgICAvLyByaWdodC1hbGlnbiB0aGUgZHJvcGRvd25cbiAgICAgICAgbGlzdE9mZnNldC5sZWZ0ID1cbiAgICAgICAgICBzZWxmLm9mZnNldCgpLmxlZnQgK1xuICAgICAgICAgIHNlbGYub3V0ZXJXaWR0aCgpIC1cbiAgICAgICAgICBsaXN0Lm91dGVyV2lkdGgoKSArXG4gICAgICAgICAgcGFyc2VJbnQobGlzdC5jc3MoXCJtYXJnaW5MZWZ0XCIpLnJlcGxhY2UoXCJweFwiLCBcIlwiKSwgMTApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbGVmdC1hbGlnbiB0aGUgZHJvcGRvd25cbiAgICAgICAgbGlzdE9mZnNldC5sZWZ0ID1cbiAgICAgICAgICBzZWxmLm9mZnNldCgpLmxlZnQgK1xuICAgICAgICAgIHBhcnNlSW50KGxpc3QuY3NzKFwibWFyZ2luTGVmdFwiKS5yZXBsYWNlKFwicHhcIiwgXCJcIiksIDEwKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHZlcnRpY2FsT3JpZW50YXRpb247XG4gICAgICBpZiAoc2V0dGluZ3Mub3JpZW50YXRpb24ubWF0Y2goL3QvKSkge1xuICAgICAgICB2ZXJ0aWNhbE9yaWVudGF0aW9uID0gXCJ0XCI7XG4gICAgICB9IGVsc2UgaWYgKHNldHRpbmdzLm9yaWVudGF0aW9uLm1hdGNoKC9iLykpIHtcbiAgICAgICAgdmVydGljYWxPcmllbnRhdGlvbiA9IFwiYlwiO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgc2VsZi5vZmZzZXQoKS50b3AgKyBzZWxmLm91dGVySGVpZ2h0KHRydWUpICsgbGlzdC5vdXRlckhlaWdodCgpID5cbiAgICAgICAgJCh3aW5kb3cpLmhlaWdodCgpICsgJCh3aW5kb3cpLnNjcm9sbFRvcCgpXG4gICAgICApIHtcbiAgICAgICAgdmVydGljYWxPcmllbnRhdGlvbiA9IFwidFwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmVydGljYWxPcmllbnRhdGlvbiA9IFwiYlwiO1xuICAgICAgfVxuXG4gICAgICBpZiAodmVydGljYWxPcmllbnRhdGlvbiA9PSBcInRcIikge1xuICAgICAgICAvLyBwb3NpdGlvbiB0aGUgZHJvcGRvd24gb24gdG9wXG4gICAgICAgIGxpc3QuYWRkQ2xhc3MoXCJ1aS10aW1lcGlja2VyLXBvc2l0aW9uZWQtdG9wXCIpO1xuICAgICAgICBsaXN0T2Zmc2V0LnRvcCA9XG4gICAgICAgICAgc2VsZi5vZmZzZXQoKS50b3AgLVxuICAgICAgICAgIGxpc3Qub3V0ZXJIZWlnaHQoKSArXG4gICAgICAgICAgcGFyc2VJbnQobGlzdC5jc3MoXCJtYXJnaW5Ub3BcIikucmVwbGFjZShcInB4XCIsIFwiXCIpLCAxMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBwdXQgaXQgdW5kZXIgdGhlIGlucHV0XG4gICAgICAgIGxpc3QucmVtb3ZlQ2xhc3MoXCJ1aS10aW1lcGlja2VyLXBvc2l0aW9uZWQtdG9wXCIpO1xuICAgICAgICBsaXN0T2Zmc2V0LnRvcCA9XG4gICAgICAgICAgc2VsZi5vZmZzZXQoKS50b3AgK1xuICAgICAgICAgIHNlbGYub3V0ZXJIZWlnaHQoKSArXG4gICAgICAgICAgcGFyc2VJbnQobGlzdC5jc3MoXCJtYXJnaW5Ub3BcIikucmVwbGFjZShcInB4XCIsIFwiXCIpLCAxMCk7XG4gICAgICB9XG5cbiAgICAgIGxpc3Qub2Zmc2V0KGxpc3RPZmZzZXQpO1xuXG4gICAgICAvLyBwb3NpdGlvbiBzY3JvbGxpbmdcbiAgICAgIHZhciBzZWxlY3RlZCA9IGxpc3QuZmluZChcIi51aS10aW1lcGlja2VyLXNlbGVjdGVkXCIpO1xuXG4gICAgICBpZiAoIXNlbGVjdGVkLmxlbmd0aCkge1xuICAgICAgICB2YXIgdGltZUludCA9IHRwLnRpbWUyaW50KF9nZXRUaW1lVmFsdWUoc2VsZikpO1xuICAgICAgICBpZiAodGltZUludCAhPT0gbnVsbCkge1xuICAgICAgICAgIHNlbGVjdGVkID0gX2ZpbmRSb3coc2VsZiwgbGlzdCwgdGltZUludCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2V0dGluZ3Muc2Nyb2xsRGVmYXVsdCkge1xuICAgICAgICAgIHNlbGVjdGVkID0gX2ZpbmRSb3coc2VsZiwgbGlzdCwgc2V0dGluZ3Muc2Nyb2xsRGVmYXVsdCgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBpZiBub3QgZm91bmQgb3IgZGlzYWJsZWQsIGludGVsbGlnZW50bHkgZmluZCBmaXJzdCBzZWxlY3RhYmxlIGVsZW1lbnRcbiAgICAgIGlmICghc2VsZWN0ZWQubGVuZ3RoIHx8IHNlbGVjdGVkLmhhc0NsYXNzKFwidWktdGltZXBpY2tlci1kaXNhYmxlZFwiKSkge1xuICAgICAgICBzZWxlY3RlZCA9IGxpc3QuZmluZChcImxpOm5vdCgudWktdGltZXBpY2tlci1kaXNhYmxlZCk6Zmlyc3RcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZWxlY3RlZCAmJiBzZWxlY3RlZC5sZW5ndGgpIHtcbiAgICAgICAgdmFyIHRvcE9mZnNldCA9XG4gICAgICAgICAgbGlzdC5zY3JvbGxUb3AoKSArIHNlbGVjdGVkLnBvc2l0aW9uKCkudG9wIC0gc2VsZWN0ZWQub3V0ZXJIZWlnaHQoKTtcbiAgICAgICAgbGlzdC5zY3JvbGxUb3AodG9wT2Zmc2V0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxpc3Quc2Nyb2xsVG9wKDApO1xuICAgICAgfVxuXG4gICAgICAvLyBwcmV2ZW50IHNjcm9sbCBwcm9wYWdhdGlvblxuICAgICAgaWYgKHNldHRpbmdzLnN0b3BTY3JvbGxQcm9wYWdhdGlvbikge1xuICAgICAgICAkKFxuICAgICAgICAgIGRvY3VtZW50XG4gICAgICAgICkub24oXCJ3aGVlbC51aS10aW1lcGlja2VyXCIsIFwiLnVpLXRpbWVwaWNrZXItd3JhcHBlclwiLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHZhciBjdXJyZW50U2Nyb2xsID0gJCh0aGlzKS5zY3JvbGxUb3AoKTtcbiAgICAgICAgICAkKHRoaXMpLnNjcm9sbFRvcChjdXJyZW50U2Nyb2xsICsgZS5vcmlnaW5hbEV2ZW50LmRlbHRhWSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBhdHRhY2ggY2xvc2UgaGFuZGxlcnNcbiAgICAgICQoZG9jdW1lbnQpLm9uKFxuICAgICAgICBcInRvdWNoc3RhcnQudWktdGltZXBpY2tlciBtb3VzZWRvd24udWktdGltZXBpY2tlclwiLFxuICAgICAgICBfY2xvc2VIYW5kbGVyXG4gICAgICApO1xuICAgICAgJCh3aW5kb3cpLm9uKFwicmVzaXplLnVpLXRpbWVwaWNrZXJcIiwgX2Nsb3NlSGFuZGxlcik7XG4gICAgICBpZiAoc2V0dGluZ3MuY2xvc2VPbldpbmRvd1Njcm9sbCkge1xuICAgICAgICAkKGRvY3VtZW50KS5vbihcInNjcm9sbC51aS10aW1lcGlja2VyXCIsIF9jbG9zZUhhbmRsZXIpO1xuICAgICAgfVxuXG4gICAgICBzZWxmLnRyaWdnZXIoXCJzaG93VGltZXBpY2tlclwiKTtcblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIGhpZGU6IGZ1bmN0aW9uKGUpIHtcbiAgICAgIHZhciBzZWxmID0gJCh0aGlzKTtcbiAgICAgIHZhciBzZXR0aW5ncyA9IHNlbGYuZGF0YShcInRpbWVwaWNrZXItc2V0dGluZ3NcIik7XG5cbiAgICAgIGlmIChzZXR0aW5ncyAmJiBzZXR0aW5ncy51c2VTZWxlY3QpIHtcbiAgICAgICAgc2VsZi5ibHVyKCk7XG4gICAgICB9XG5cbiAgICAgICQoXCIudWktdGltZXBpY2tlci13cmFwcGVyXCIpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBsaXN0ID0gJCh0aGlzKTtcbiAgICAgICAgaWYgKCFfaXNWaXNpYmxlKGxpc3QpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNlbGYgPSBsaXN0LmRhdGEoXCJ0aW1lcGlja2VyLWlucHV0XCIpO1xuICAgICAgICB2YXIgc2V0dGluZ3MgPSBzZWxmLmRhdGEoXCJ0aW1lcGlja2VyLXNldHRpbmdzXCIpO1xuXG4gICAgICAgIGlmIChzZXR0aW5ncyAmJiBzZXR0aW5ncy5zZWxlY3RPbkJsdXIpIHtcbiAgICAgICAgICBfc2VsZWN0VmFsdWUoc2VsZik7XG4gICAgICAgIH1cblxuICAgICAgICBsaXN0LmhpZGUoKTtcbiAgICAgICAgc2VsZi50cmlnZ2VyKFwiaGlkZVRpbWVwaWNrZXJcIik7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIG9wdGlvbjogZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiBrZXkgPT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgdmFsdWUgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICByZXR1cm4gJCh0aGlzKS5kYXRhKFwidGltZXBpY2tlci1zZXR0aW5nc1wiKVtrZXldO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgc2VsZiA9ICQodGhpcyk7XG4gICAgICAgIHZhciBzZXR0aW5ncyA9IHNlbGYuZGF0YShcInRpbWVwaWNrZXItc2V0dGluZ3NcIik7XG4gICAgICAgIHZhciB0cCA9IHNlbGYuZGF0YShcInRpbWVwaWNrZXItb2JqXCIpO1xuICAgICAgICB2YXIgbGlzdCA9IHNlbGYuZGF0YShcInRpbWVwaWNrZXItbGlzdFwiKTtcblxuICAgICAgICBpZiAodHlwZW9mIGtleSA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgc2V0dGluZ3MgPSAkLmV4dGVuZChzZXR0aW5ncywga2V5KTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Yga2V5ID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBzZXR0aW5nc1trZXldID0gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBzZXR0aW5ncyA9IHRwLnBhcnNlU2V0dGluZ3Moc2V0dGluZ3MpO1xuXG4gICAgICAgIHNlbGYuZGF0YShcInRpbWVwaWNrZXItc2V0dGluZ3NcIiwgc2V0dGluZ3MpO1xuXG4gICAgICAgIF9mb3JtYXRWYWx1ZS5jYWxsKHNlbGYuZ2V0KDApLCB7IHR5cGU6IFwiY2hhbmdlXCIgfSwgXCJpbml0aWFsXCIpO1xuXG4gICAgICAgIGlmIChsaXN0KSB7XG4gICAgICAgICAgbGlzdC5yZW1vdmUoKTtcbiAgICAgICAgICBzZWxmLmRhdGEoXCJ0aW1lcGlja2VyLWxpc3RcIiwgZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNldHRpbmdzLnVzZVNlbGVjdCkge1xuICAgICAgICAgIF9yZW5kZXIoc2VsZik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBnZXRTZWNvbmRzRnJvbU1pZG5pZ2h0OiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBzZWxmID0gJCh0aGlzKTtcbiAgICAgIHZhciB0cCA9IHNlbGYuZGF0YShcInRpbWVwaWNrZXItb2JqXCIpO1xuICAgICAgcmV0dXJuIHRwLnRpbWUyaW50KF9nZXRUaW1lVmFsdWUodGhpcykpO1xuICAgIH0sXG5cbiAgICBnZXRUaW1lOiBmdW5jdGlvbihyZWxhdGl2ZV9kYXRlKSB7XG4gICAgICB2YXIgc2VsZiA9ICQodGhpcyk7XG4gICAgICB2YXIgdHAgPSBzZWxmLmRhdGEoXCJ0aW1lcGlja2VyLW9ialwiKTtcblxuICAgICAgdmFyIHRpbWVfc3RyaW5nID0gX2dldFRpbWVWYWx1ZShzZWxmKTtcbiAgICAgIGlmICghdGltZV9zdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciBvZmZzZXQgPSB0cC50aW1lMmludCh0aW1lX3N0cmluZyk7XG4gICAgICBpZiAob2Zmc2V0ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXJlbGF0aXZlX2RhdGUpIHtcbiAgICAgICAgcmVsYXRpdmVfZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGNvbnN0cnVjdCBhIERhdGUgZnJvbSByZWxhdGl2ZSBkYXRlLCBhbmQgb2Zmc2V0J3MgdGltZVxuICAgICAgdmFyIHRpbWUgPSBuZXcgRGF0ZShyZWxhdGl2ZV9kYXRlKTtcbiAgICAgIHRpbWUuc2V0SG91cnMob2Zmc2V0IC8gMzYwMCk7XG4gICAgICB0aW1lLnNldE1pbnV0ZXMoKG9mZnNldCAlIDM2MDApIC8gNjApO1xuICAgICAgdGltZS5zZXRTZWNvbmRzKG9mZnNldCAlIDYwKTtcbiAgICAgIHRpbWUuc2V0TWlsbGlzZWNvbmRzKDApO1xuXG4gICAgICByZXR1cm4gdGltZTtcbiAgICB9LFxuXG4gICAgaXNWaXNpYmxlOiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgIHZhciBsaXN0ID0gc2VsZi5kYXRhKFwidGltZXBpY2tlci1saXN0XCIpO1xuICAgICAgcmV0dXJuICEhKGxpc3QgJiYgX2lzVmlzaWJsZShsaXN0KSk7XG4gICAgfSxcblxuICAgIHNldFRpbWU6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICB2YXIgc2V0dGluZ3MgPSBzZWxmLmRhdGEoXCJ0aW1lcGlja2VyLXNldHRpbmdzXCIpO1xuICAgICAgdmFyIHRwID0gc2VsZi5kYXRhKFwidGltZXBpY2tlci1vYmpcIik7XG5cbiAgICAgIHRwLnNlY29uZHMgPSB0cC50aW1lMmludCh2YWx1ZSk7XG5cbiAgICAgIGlmIChzZXR0aW5ncy5mb3JjZVJvdW5kVGltZSkge1xuICAgICAgICB2YXIgcHJldHR5VGltZSA9IF9yb3VuZEFuZEZvcm1hdFRpbWUodHAuc2Vjb25kcywgc2V0dGluZ3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHByZXR0eVRpbWUgPSBfaW50MnRpbWUodHAuc2Vjb25kcywgc2V0dGluZ3MpO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWUgJiYgcHJldHR5VGltZSA9PT0gbnVsbCAmJiBzZXR0aW5ncy5ub25lT3B0aW9uKSB7XG4gICAgICAgIHByZXR0eVRpbWUgPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgX3NldFRpbWVWYWx1ZShzZWxmLCBwcmV0dHlUaW1lLCBcImluaXRpYWxcIik7XG4gICAgICBfZm9ybWF0VmFsdWUuY2FsbChzZWxmLmdldCgwKSwgeyB0eXBlOiBcImNoYW5nZVwiIH0sIFwiaW5pdGlhbFwiKTtcblxuICAgICAgaWYgKHNlbGYuZGF0YShcInRpbWVwaWNrZXItbGlzdFwiKSkge1xuICAgICAgICBfc2V0U2VsZWN0ZWQoc2VsZiwgc2VsZi5kYXRhKFwidGltZXBpY2tlci1saXN0XCIpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIHJlbW92ZTogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICAgIC8vIGNoZWNrIGlmIHRoaXMgZWxlbWVudCBpcyBhIHRpbWVwaWNrZXJcbiAgICAgIGlmICghc2VsZi5oYXNDbGFzcyhcInVpLXRpbWVwaWNrZXItaW5wdXRcIikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgc2V0dGluZ3MgPSBzZWxmLmRhdGEoXCJ0aW1lcGlja2VyLXNldHRpbmdzXCIpO1xuICAgICAgc2VsZi5yZW1vdmVBdHRyKFwiYXV0b2NvbXBsZXRlXCIsIFwib2ZmXCIpO1xuICAgICAgc2VsZi5yZW1vdmVDbGFzcyhcInVpLXRpbWVwaWNrZXItaW5wdXRcIik7XG4gICAgICBzZWxmLnJlbW92ZURhdGEoXCJ0aW1lcGlja2VyLXNldHRpbmdzXCIpO1xuICAgICAgc2VsZi5yZW1vdmVEYXRhKFwidGltZXBpY2tlci1vYmpcIik7XG4gICAgICBzZWxmLm9mZihcIi50aW1lcGlja2VyXCIpO1xuXG4gICAgICAvLyB0aW1lcGlja2VyLWxpc3Qgd29uJ3QgYmUgcHJlc2VudCB1bmxlc3MgdGhlIHVzZXIgaGFzIGludGVyYWN0ZWQgd2l0aCB0aGlzIHRpbWVwaWNrZXJcbiAgICAgIGlmIChzZWxmLmRhdGEoXCJ0aW1lcGlja2VyLWxpc3RcIikpIHtcbiAgICAgICAgc2VsZi5kYXRhKFwidGltZXBpY2tlci1saXN0XCIpLnJlbW92ZSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2V0dGluZ3MudXNlU2VsZWN0KSB7XG4gICAgICAgIHNlbGYuc2hvdygpO1xuICAgICAgfVxuXG4gICAgICBzZWxmLnJlbW92ZURhdGEoXCJ0aW1lcGlja2VyLWxpc3RcIik7XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfTtcblxuICAvLyBwcml2YXRlIG1ldGhvZHNcblxuICBmdW5jdGlvbiBfaXNWaXNpYmxlKGVsZW0pIHtcbiAgICB2YXIgZWwgPSBlbGVtWzBdO1xuICAgIHJldHVybiBlbC5vZmZzZXRXaWR0aCA+IDAgJiYgZWwub2Zmc2V0SGVpZ2h0ID4gMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9yZW5kZXIoc2VsZikge1xuICAgIHZhciBzZXR0aW5ncyA9IHNlbGYuZGF0YShcInRpbWVwaWNrZXItc2V0dGluZ3NcIik7XG4gICAgdmFyIGxpc3QgPSBzZWxmLmRhdGEoXCJ0aW1lcGlja2VyLWxpc3RcIik7XG4gICAgdmFyIHRwID0gc2VsZi5kYXRhKFwidGltZXBpY2tlci1vYmpcIik7XG5cbiAgICBpZiAobGlzdCAmJiBsaXN0Lmxlbmd0aCkge1xuICAgICAgbGlzdC5yZW1vdmUoKTtcbiAgICAgIHNlbGYuZGF0YShcInRpbWVwaWNrZXItbGlzdFwiLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgaWYgKHNldHRpbmdzLnVzZVNlbGVjdCkge1xuICAgICAgbGlzdCA9ICQoXCI8c2VsZWN0IC8+XCIsIHsgY2xhc3M6IFwidWktdGltZXBpY2tlci1zZWxlY3RcIiB9KTtcbiAgICAgIHZhciB3cmFwcGVkX2xpc3QgPSBsaXN0O1xuICAgIH0gZWxzZSB7XG4gICAgICBsaXN0ID0gJChcIjx1bCAvPlwiLCB7IGNsYXNzOiBcInVpLXRpbWVwaWNrZXItbGlzdFwiIH0pO1xuXG4gICAgICB2YXIgd3JhcHBlZF9saXN0ID0gJChcIjxkaXYgLz5cIiwge1xuICAgICAgICBjbGFzczogXCJ1aS10aW1lcGlja2VyLXdyYXBwZXJcIixcbiAgICAgICAgdGFiaW5kZXg6IC0xXG4gICAgICB9KTtcbiAgICAgIHdyYXBwZWRfbGlzdC5jc3MoeyBkaXNwbGF5OiBcIm5vbmVcIiwgcG9zaXRpb246IFwiYWJzb2x1dGVcIiB9KS5hcHBlbmQobGlzdCk7XG4gICAgfVxuXG4gICAgaWYgKHNldHRpbmdzLm5vbmVPcHRpb24pIHtcbiAgICAgIGlmIChzZXR0aW5ncy5ub25lT3B0aW9uID09PSB0cnVlKSB7XG4gICAgICAgIHNldHRpbmdzLm5vbmVPcHRpb24gPSBzZXR0aW5ncy51c2VTZWxlY3QgPyBcIlRpbWUuLi5cIiA6IFwiTm9uZVwiO1xuICAgICAgfVxuXG4gICAgICBpZiAoJC5pc0FycmF5KHNldHRpbmdzLm5vbmVPcHRpb24pKSB7XG4gICAgICAgIGZvciAodmFyIGkgaW4gc2V0dGluZ3Mubm9uZU9wdGlvbikge1xuICAgICAgICAgIGlmIChwYXJzZUludChpLCAxMCkgPT0gaSkge1xuICAgICAgICAgICAgdmFyIG5vbmVFbGVtZW50ID0gX2dlbmVyYXRlTm9uZUVsZW1lbnQoXG4gICAgICAgICAgICAgIHNldHRpbmdzLm5vbmVPcHRpb25baV0sXG4gICAgICAgICAgICAgIHNldHRpbmdzLnVzZVNlbGVjdFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGxpc3QuYXBwZW5kKG5vbmVFbGVtZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBub25lRWxlbWVudCA9IF9nZW5lcmF0ZU5vbmVFbGVtZW50KFxuICAgICAgICAgIHNldHRpbmdzLm5vbmVPcHRpb24sXG4gICAgICAgICAgc2V0dGluZ3MudXNlU2VsZWN0XG4gICAgICAgICk7XG4gICAgICAgIGxpc3QuYXBwZW5kKG5vbmVFbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2V0dGluZ3MuY2xhc3NOYW1lKSB7XG4gICAgICB3cmFwcGVkX2xpc3QuYWRkQ2xhc3Moc2V0dGluZ3MuY2xhc3NOYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAoc2V0dGluZ3MubWluVGltZSAhPT0gbnVsbCB8fCBzZXR0aW5ncy5kdXJhdGlvblRpbWUgIT09IG51bGwpICYmXG4gICAgICBzZXR0aW5ncy5zaG93RHVyYXRpb25cbiAgICApIHtcbiAgICAgIHZhciBzdGVwdmFsID1cbiAgICAgICAgdHlwZW9mIHNldHRpbmdzLnN0ZXAgPT0gXCJmdW5jdGlvblwiID8gXCJmdW5jdGlvblwiIDogc2V0dGluZ3Muc3RlcDtcbiAgICAgIHdyYXBwZWRfbGlzdC5hZGRDbGFzcyhcInVpLXRpbWVwaWNrZXItd2l0aC1kdXJhdGlvblwiKTtcbiAgICAgIHdyYXBwZWRfbGlzdC5hZGRDbGFzcyhcInVpLXRpbWVwaWNrZXItc3RlcC1cIiArIHNldHRpbmdzLnN0ZXApO1xuICAgIH1cblxuICAgIHZhciBkdXJTdGFydCA9IHNldHRpbmdzLm1pblRpbWU7XG4gICAgaWYgKHR5cGVvZiBzZXR0aW5ncy5kdXJhdGlvblRpbWUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgZHVyU3RhcnQgPSB0cC50aW1lMmludChzZXR0aW5ncy5kdXJhdGlvblRpbWUoKSk7XG4gICAgfSBlbHNlIGlmIChzZXR0aW5ncy5kdXJhdGlvblRpbWUgIT09IG51bGwpIHtcbiAgICAgIGR1clN0YXJ0ID0gc2V0dGluZ3MuZHVyYXRpb25UaW1lO1xuICAgIH1cbiAgICB2YXIgc3RhcnQgPSBzZXR0aW5ncy5taW5UaW1lICE9PSBudWxsID8gc2V0dGluZ3MubWluVGltZSA6IDA7XG4gICAgdmFyIGVuZCA9XG4gICAgICBzZXR0aW5ncy5tYXhUaW1lICE9PSBudWxsID8gc2V0dGluZ3MubWF4VGltZSA6IHN0YXJ0ICsgT05FX0RBWSAtIDE7XG5cbiAgICBpZiAoZW5kIDwgc3RhcnQpIHtcbiAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgZW5kIHRpbWUgaXMgZ3JlYXRlciB0aGFuIHN0YXJ0IHRpbWUsIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIG5vIGxpc3QgdG8gc2hvd1xuICAgICAgZW5kICs9IE9ORV9EQVk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgZW5kID09PSBPTkVfREFZIC0gMSAmJlxuICAgICAgJC50eXBlKHNldHRpbmdzLnRpbWVGb3JtYXQpID09PSBcInN0cmluZ1wiICYmXG4gICAgICBzZXR0aW5ncy5zaG93MjQwMFxuICAgICkge1xuICAgICAgLy8gc2hvdyBhIDI0OjAwIG9wdGlvbiB3aGVuIHVzaW5nIG1pbGl0YXJ5IHRpbWVcbiAgICAgIGVuZCA9IE9ORV9EQVk7XG4gICAgfVxuXG4gICAgdmFyIGRyID0gc2V0dGluZ3MuZGlzYWJsZVRpbWVSYW5nZXM7XG4gICAgdmFyIGRyQ3VyID0gMDtcbiAgICB2YXIgZHJMZW4gPSBkci5sZW5ndGg7XG5cbiAgICB2YXIgc3RlcEZ1bmMgPSBzZXR0aW5ncy5zdGVwO1xuICAgIGlmICh0eXBlb2Ygc3RlcEZ1bmMgIT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBzdGVwRnVuYyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc2V0dGluZ3Muc3RlcDtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0LCBqID0gMDsgaSA8PSBlbmQ7IGorKywgaSArPSBzdGVwRnVuYyhqKSAqIDYwKSB7XG4gICAgICB2YXIgdGltZUludCA9IGk7XG4gICAgICB2YXIgdGltZVN0cmluZyA9IF9pbnQydGltZSh0aW1lSW50LCBzZXR0aW5ncyk7XG5cbiAgICAgIGlmIChzZXR0aW5ncy51c2VTZWxlY3QpIHtcbiAgICAgICAgdmFyIHJvdyA9ICQoXCI8b3B0aW9uIC8+XCIsIHsgdmFsdWU6IHRpbWVTdHJpbmcgfSk7XG4gICAgICAgIHJvdy50ZXh0KHRpbWVTdHJpbmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJvdyA9ICQoXCI8bGkgLz5cIik7XG4gICAgICAgIHJvdy5hZGRDbGFzcyhcbiAgICAgICAgICB0aW1lSW50ICUgT05FX0RBWSA8IE9ORV9EQVkgLyAyXG4gICAgICAgICAgICA/IFwidWktdGltZXBpY2tlci1hbVwiXG4gICAgICAgICAgICA6IFwidWktdGltZXBpY2tlci1wbVwiXG4gICAgICAgICk7XG4gICAgICAgIHJvdy5kYXRhKFwidGltZVwiLCBtb2R1bG9TZWNvbmRzKHRpbWVJbnQsIHNldHRpbmdzKSk7XG4gICAgICAgIHJvdy50ZXh0KHRpbWVTdHJpbmcpO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIChzZXR0aW5ncy5taW5UaW1lICE9PSBudWxsIHx8IHNldHRpbmdzLmR1cmF0aW9uVGltZSAhPT0gbnVsbCkgJiZcbiAgICAgICAgc2V0dGluZ3Muc2hvd0R1cmF0aW9uXG4gICAgICApIHtcbiAgICAgICAgdmFyIGR1cmF0aW9uU3RyaW5nID0gX2ludDJkdXJhdGlvbihpIC0gZHVyU3RhcnQsIHNldHRpbmdzLnN0ZXApO1xuICAgICAgICBpZiAoc2V0dGluZ3MudXNlU2VsZWN0KSB7XG4gICAgICAgICAgcm93LnRleHQocm93LnRleHQoKSArIFwiIChcIiArIGR1cmF0aW9uU3RyaW5nICsgXCIpXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBkdXJhdGlvbiA9ICQoXCI8c3BhbiAvPlwiLCB7IGNsYXNzOiBcInVpLXRpbWVwaWNrZXItZHVyYXRpb25cIiB9KTtcbiAgICAgICAgICBkdXJhdGlvbi50ZXh0KFwiIChcIiArIGR1cmF0aW9uU3RyaW5nICsgXCIpXCIpO1xuICAgICAgICAgIHJvdy5hcHBlbmQoZHVyYXRpb24pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChkckN1ciA8IGRyTGVuKSB7XG4gICAgICAgIGlmICh0aW1lSW50ID49IGRyW2RyQ3VyXVsxXSkge1xuICAgICAgICAgIGRyQ3VyICs9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZHJbZHJDdXJdICYmIHRpbWVJbnQgPj0gZHJbZHJDdXJdWzBdICYmIHRpbWVJbnQgPCBkcltkckN1cl1bMV0pIHtcbiAgICAgICAgICBpZiAoc2V0dGluZ3MudXNlU2VsZWN0KSB7XG4gICAgICAgICAgICByb3cucHJvcChcImRpc2FibGVkXCIsIHRydWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByb3cuYWRkQ2xhc3MoXCJ1aS10aW1lcGlja2VyLWRpc2FibGVkXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsaXN0LmFwcGVuZChyb3cpO1xuICAgIH1cblxuICAgIHdyYXBwZWRfbGlzdC5kYXRhKFwidGltZXBpY2tlci1pbnB1dFwiLCBzZWxmKTtcbiAgICBzZWxmLmRhdGEoXCJ0aW1lcGlja2VyLWxpc3RcIiwgd3JhcHBlZF9saXN0KTtcblxuICAgIGlmIChzZXR0aW5ncy51c2VTZWxlY3QpIHtcbiAgICAgIGlmIChzZWxmLnZhbCgpKSB7XG4gICAgICAgIGxpc3QudmFsKF9yb3VuZEFuZEZvcm1hdFRpbWUodHAudGltZTJpbnQoc2VsZi52YWwoKSksIHNldHRpbmdzKSk7XG4gICAgICB9XG5cbiAgICAgIGxpc3Qub24oXCJmb2N1c1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgJCh0aGlzKVxuICAgICAgICAgIC5kYXRhKFwidGltZXBpY2tlci1pbnB1dFwiKVxuICAgICAgICAgIC50cmlnZ2VyKFwic2hvd1RpbWVwaWNrZXJcIik7XG4gICAgICB9KTtcbiAgICAgIGxpc3Qub24oXCJibHVyXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAkKHRoaXMpXG4gICAgICAgICAgLmRhdGEoXCJ0aW1lcGlja2VyLWlucHV0XCIpXG4gICAgICAgICAgLnRyaWdnZXIoXCJoaWRlVGltZXBpY2tlclwiKTtcbiAgICAgIH0pO1xuICAgICAgbGlzdC5vbihcImNoYW5nZVwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgX3NldFRpbWVWYWx1ZShzZWxmLCAkKHRoaXMpLnZhbCgpLCBcInNlbGVjdFwiKTtcbiAgICAgIH0pO1xuXG4gICAgICBfc2V0VGltZVZhbHVlKHNlbGYsIGxpc3QudmFsKCksIFwiaW5pdGlhbFwiKTtcbiAgICAgIHNlbGYuaGlkZSgpLmFmdGVyKGxpc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgYXBwZW5kVG8gPSBzZXR0aW5ncy5hcHBlbmRUbztcbiAgICAgIGlmICh0eXBlb2YgYXBwZW5kVG8gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgYXBwZW5kVG8gPSAkKGFwcGVuZFRvKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGFwcGVuZFRvID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgYXBwZW5kVG8gPSBhcHBlbmRUbyhzZWxmKTtcbiAgICAgIH1cbiAgICAgIGFwcGVuZFRvLmFwcGVuZCh3cmFwcGVkX2xpc3QpO1xuICAgICAgX3NldFNlbGVjdGVkKHNlbGYsIGxpc3QpO1xuXG4gICAgICBsaXN0Lm9uKFwibW91c2Vkb3duIGNsaWNrXCIsIFwibGlcIiwgZnVuY3Rpb24oZSkge1xuICAgICAgICAvLyBoYWNrOiB0ZW1wb3JhcmlseSBkaXNhYmxlIHRoZSBmb2N1cyBoYW5kbGVyXG4gICAgICAgIC8vIHRvIGRlYWwgd2l0aCB0aGUgZmFjdCB0aGF0IElFIGZpcmVzICdmb2N1cydcbiAgICAgICAgLy8gZXZlbnRzIGFzeW5jaHJvbm91c2x5XG4gICAgICAgIHNlbGYub2ZmKFwiZm9jdXMudGltZXBpY2tlclwiKTtcbiAgICAgICAgc2VsZi5vbihcImZvY3VzLnRpbWVwaWNrZXItaWUtaGFja1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICBzZWxmLm9mZihcImZvY3VzLnRpbWVwaWNrZXItaWUtaGFja1wiKTtcbiAgICAgICAgICBzZWxmLm9uKFwiZm9jdXMudGltZXBpY2tlclwiLCBtZXRob2RzLnNob3cpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIV9oaWRlS2V5Ym9hcmQoc2VsZikpIHtcbiAgICAgICAgICBzZWxmWzBdLmZvY3VzKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBtYWtlIHN1cmUgb25seSB0aGUgY2xpY2tlZCByb3cgaXMgc2VsZWN0ZWRcbiAgICAgICAgbGlzdC5maW5kKFwibGlcIikucmVtb3ZlQ2xhc3MoXCJ1aS10aW1lcGlja2VyLXNlbGVjdGVkXCIpO1xuICAgICAgICAkKHRoaXMpLmFkZENsYXNzKFwidWktdGltZXBpY2tlci1zZWxlY3RlZFwiKTtcblxuICAgICAgICBpZiAoX3NlbGVjdFZhbHVlKHNlbGYpKSB7XG4gICAgICAgICAgc2VsZi50cmlnZ2VyKFwiaGlkZVRpbWVwaWNrZXJcIik7XG5cbiAgICAgICAgICBsaXN0Lm9uKFwibW91c2V1cC50aW1lcGlja2VyIGNsaWNrLnRpbWVwaWNrZXJcIiwgXCJsaVwiLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBsaXN0Lm9mZihcIm1vdXNldXAudGltZXBpY2tlciBjbGljay50aW1lcGlja2VyXCIpO1xuICAgICAgICAgICAgd3JhcHBlZF9saXN0LmhpZGUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gX2dlbmVyYXRlTm9uZUVsZW1lbnQob3B0aW9uVmFsdWUsIHVzZVNlbGVjdCkge1xuICAgIHZhciBsYWJlbCwgY2xhc3NOYW1lLCB2YWx1ZTtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9uVmFsdWUgPT0gXCJvYmplY3RcIikge1xuICAgICAgbGFiZWwgPSBvcHRpb25WYWx1ZS5sYWJlbDtcbiAgICAgIGNsYXNzTmFtZSA9IG9wdGlvblZhbHVlLmNsYXNzTmFtZTtcbiAgICAgIHZhbHVlID0gb3B0aW9uVmFsdWUudmFsdWU7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9uVmFsdWUgPT0gXCJzdHJpbmdcIikge1xuICAgICAgbGFiZWwgPSBvcHRpb25WYWx1ZTtcbiAgICAgIHZhbHVlID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgICQuZXJyb3IoXCJJbnZhbGlkIG5vbmVPcHRpb24gdmFsdWVcIik7XG4gICAgfVxuXG4gICAgaWYgKHVzZVNlbGVjdCkge1xuICAgICAgcmV0dXJuICQoXCI8b3B0aW9uIC8+XCIsIHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBjbGFzczogY2xhc3NOYW1lLFxuICAgICAgICB0ZXh0OiBsYWJlbFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAkKFwiPGxpIC8+XCIsIHtcbiAgICAgICAgY2xhc3M6IGNsYXNzTmFtZSxcbiAgICAgICAgdGV4dDogbGFiZWxcbiAgICAgIH0pLmRhdGEoXCJ0aW1lXCIsIFN0cmluZyh2YWx1ZSkpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIF9yb3VuZEFuZEZvcm1hdFRpbWUoc2Vjb25kcywgc2V0dGluZ3MpIHtcbiAgICBzZWNvbmRzID0gc2V0dGluZ3Mucm91bmRpbmdGdW5jdGlvbihzZWNvbmRzLCBzZXR0aW5ncyk7XG4gICAgaWYgKHNlY29uZHMgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiBfaW50MnRpbWUoc2Vjb25kcywgc2V0dGluZ3MpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGV2ZW50IGhhbmRsZXIgdG8gZGVjaWRlIHdoZXRoZXIgdG8gY2xvc2UgdGltZXBpY2tlclxuICBmdW5jdGlvbiBfY2xvc2VIYW5kbGVyKGUpIHtcbiAgICBpZiAoZS50YXJnZXQgPT0gd2luZG93KSB7XG4gICAgICAvLyBtb2JpbGUgQ2hyb21lIGZpcmVzIGZvY3VzIGV2ZW50cyBhZ2FpbnN0IHdpbmRvdyBmb3Igc29tZSByZWFzb25cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdGFyZ2V0ID0gJChlLnRhcmdldCk7XG5cbiAgICBpZiAoXG4gICAgICB0YXJnZXQuY2xvc2VzdChcIi51aS10aW1lcGlja2VyLWlucHV0XCIpLmxlbmd0aCB8fFxuICAgICAgdGFyZ2V0LmNsb3Nlc3QoXCIudWktdGltZXBpY2tlci13cmFwcGVyXCIpLmxlbmd0aFxuICAgICkge1xuICAgICAgLy8gYWN0aXZlIHRpbWVwaWNrZXIgd2FzIGZvY3VzZWQuIGlnbm9yZVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1ldGhvZHMuaGlkZSgpO1xuICAgICQoZG9jdW1lbnQpLnVuYmluZChcIi51aS10aW1lcGlja2VyXCIpO1xuICAgICQod2luZG93KS51bmJpbmQoXCIudWktdGltZXBpY2tlclwiKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9oaWRlS2V5Ym9hcmQoc2VsZikge1xuICAgIHZhciBzZXR0aW5ncyA9IHNlbGYuZGF0YShcInRpbWVwaWNrZXItc2V0dGluZ3NcIik7XG4gICAgcmV0dXJuIChcbiAgICAgICh3aW5kb3cubmF2aWdhdG9yLm1zTWF4VG91Y2hQb2ludHMgfHwgXCJvbnRvdWNoc3RhcnRcIiBpbiBkb2N1bWVudCkgJiZcbiAgICAgIHNldHRpbmdzLmRpc2FibGVUb3VjaEtleWJvYXJkXG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9maW5kUm93KHNlbGYsIGxpc3QsIHZhbHVlKSB7XG4gICAgaWYgKCF2YWx1ZSAmJiB2YWx1ZSAhPT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBzZXR0aW5ncyA9IHNlbGYuZGF0YShcInRpbWVwaWNrZXItc2V0dGluZ3NcIik7XG4gICAgdmFyIG91dCA9IGZhbHNlO1xuICAgIHZhciB2YWx1ZSA9IHNldHRpbmdzLnJvdW5kaW5nRnVuY3Rpb24odmFsdWUsIHNldHRpbmdzKTtcblxuICAgIC8vIGxvb3AgdGhyb3VnaCB0aGUgbWVudSBpdGVtc1xuICAgIGxpc3QuZmluZChcImxpXCIpLmVhY2goZnVuY3Rpb24oaSwgb2JqKSB7XG4gICAgICB2YXIgak9iaiA9ICQob2JqKTtcbiAgICAgIGlmICh0eXBlb2Ygak9iai5kYXRhKFwidGltZVwiKSAhPSBcIm51bWJlclwiKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGpPYmouZGF0YShcInRpbWVcIikgPT0gdmFsdWUpIHtcbiAgICAgICAgb3V0ID0gak9iajtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9zZXRTZWxlY3RlZChzZWxmLCBsaXN0KSB7XG4gICAgbGlzdC5maW5kKFwibGlcIikucmVtb3ZlQ2xhc3MoXCJ1aS10aW1lcGlja2VyLXNlbGVjdGVkXCIpO1xuXG4gICAgdmFyIHNldHRpbmdzID0gc2VsZi5kYXRhKFwidGltZXBpY2tlci1zZXR0aW5nc1wiKTtcbiAgICB2YXIgdHAgPSBzZWxmLmRhdGEoXCJ0aW1lcGlja2VyLW9ialwiKTtcbiAgICB2YXIgdGltZVZhbHVlID0gdHAudGltZTJpbnQoX2dldFRpbWVWYWx1ZShzZWxmKSk7XG4gICAgaWYgKHRpbWVWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBzZWxlY3RlZCA9IF9maW5kUm93KHNlbGYsIGxpc3QsIHRpbWVWYWx1ZSk7XG4gICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICB2YXIgdG9wRGVsdGEgPSBzZWxlY3RlZC5vZmZzZXQoKS50b3AgLSBsaXN0Lm9mZnNldCgpLnRvcDtcblxuICAgICAgaWYgKFxuICAgICAgICB0b3BEZWx0YSArIHNlbGVjdGVkLm91dGVySGVpZ2h0KCkgPiBsaXN0Lm91dGVySGVpZ2h0KCkgfHxcbiAgICAgICAgdG9wRGVsdGEgPCAwXG4gICAgICApIHtcbiAgICAgICAgbGlzdC5zY3JvbGxUb3AoXG4gICAgICAgICAgbGlzdC5zY3JvbGxUb3AoKSArIHNlbGVjdGVkLnBvc2l0aW9uKCkudG9wIC0gc2VsZWN0ZWQub3V0ZXJIZWlnaHQoKVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2V0dGluZ3MuZm9yY2VSb3VuZFRpbWUgfHwgc2VsZWN0ZWQuZGF0YShcInRpbWVcIikgPT09IHRpbWVWYWx1ZSkge1xuICAgICAgICBzZWxlY3RlZC5hZGRDbGFzcyhcInVpLXRpbWVwaWNrZXItc2VsZWN0ZWRcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gX2Zvcm1hdFZhbHVlKGUsIG9yaWdpbikge1xuICAgIGlmIChvcmlnaW4gPT0gXCJ0aW1lcGlja2VyXCIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgc2VsZiA9ICQodGhpcyk7XG5cbiAgICBpZiAodGhpcy52YWx1ZSA9PT0gXCJcIikge1xuICAgICAgX3NldFRpbWVWYWx1ZShzZWxmLCBudWxsLCBvcmlnaW4pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzZWxmLmlzKFwiOmZvY3VzXCIpICYmICghZSB8fCBlLnR5cGUgIT0gXCJjaGFuZ2VcIikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgc2V0dGluZ3MgPSBzZWxmLmRhdGEoXCJ0aW1lcGlja2VyLXNldHRpbmdzXCIpO1xuICAgIHZhciB0cCA9IHNlbGYuZGF0YShcInRpbWVwaWNrZXItb2JqXCIpO1xuICAgIHZhciBzZWNvbmRzID0gdHAuc2Vjb25kcztcblxuICAgIGlmIChzZWNvbmRzID09PSBudWxsKSB7XG4gICAgICBzZWxmLnRyaWdnZXIoXCJ0aW1lRm9ybWF0RXJyb3JcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHJhbmdlRXJyb3IgPSBmYWxzZTtcbiAgICAvLyBjaGVjayB0aGF0IHRoZSB0aW1lIGluIHdpdGhpbiBib3VuZHNcbiAgICBpZiAoXG4gICAgICBzZXR0aW5ncy5taW5UaW1lICE9PSBudWxsICYmXG4gICAgICBzZXR0aW5ncy5tYXhUaW1lICE9PSBudWxsICYmXG4gICAgICAoc2Vjb25kcyA8IHNldHRpbmdzLm1pblRpbWUgfHwgc2Vjb25kcyA+IHNldHRpbmdzLm1heFRpbWUpXG4gICAgKSB7XG4gICAgICByYW5nZUVycm9yID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBjaGVjayB0aGF0IHRpbWUgaXNuJ3Qgd2l0aGluIGRpc2FibGVkIHRpbWUgcmFuZ2VzXG4gICAgJC5lYWNoKHNldHRpbmdzLmRpc2FibGVUaW1lUmFuZ2VzLCBmdW5jdGlvbigpIHtcbiAgICAgIGlmIChzZWNvbmRzID49IHRoaXNbMF0gJiYgc2Vjb25kcyA8IHRoaXNbMV0pIHtcbiAgICAgICAgcmFuZ2VFcnJvciA9IHRydWU7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChzZXR0aW5ncy5mb3JjZVJvdW5kVGltZSkge1xuICAgICAgdmFyIHJvdW5kU2Vjb25kcyA9IHNldHRpbmdzLnJvdW5kaW5nRnVuY3Rpb24oc2Vjb25kcywgc2V0dGluZ3MpO1xuICAgICAgaWYgKHJvdW5kU2Vjb25kcyAhPSBzZWNvbmRzKSB7XG4gICAgICAgIHNlY29uZHMgPSByb3VuZFNlY29uZHM7XG4gICAgICAgIG9yaWdpbiA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHByZXR0eVRpbWUgPSBfaW50MnRpbWUoc2Vjb25kcywgc2V0dGluZ3MpO1xuXG4gICAgaWYgKHJhbmdlRXJyb3IpIHtcbiAgICAgIGlmIChcbiAgICAgICAgX3NldFRpbWVWYWx1ZShzZWxmLCBwcmV0dHlUaW1lLCBcImVycm9yXCIpIHx8XG4gICAgICAgIChlICYmIGUudHlwZSA9PSBcImNoYW5nZVwiKVxuICAgICAgKSB7XG4gICAgICAgIHNlbGYudHJpZ2dlcihcInRpbWVSYW5nZUVycm9yXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBfc2V0VGltZVZhbHVlKHNlbGYsIHByZXR0eVRpbWUsIG9yaWdpbik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gX2dldFRpbWVWYWx1ZShzZWxmKSB7XG4gICAgaWYgKHNlbGYuaXMoXCJpbnB1dFwiKSkge1xuICAgICAgcmV0dXJuIHNlbGYudmFsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHVzZSB0aGUgZWxlbWVudCdzIGRhdGEgYXR0cmlidXRlcyB0byBzdG9yZSB2YWx1ZXNcbiAgICAgIHJldHVybiBzZWxmLmRhdGEoXCJ1aS10aW1lcGlja2VyLXZhbHVlXCIpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIF9zZXRUaW1lVmFsdWUoc2VsZiwgdmFsdWUsIHNvdXJjZSkge1xuICAgIGNvbnN0IHRwID0gc2VsZi5kYXRhKCd0aW1lcGlja2VyLW9iaicpO1xuICAgIHRwLnNlY29uZHMgPSB0cC50aW1lMmludCh2YWx1ZSk7XG5cbiAgICBpZiAoc2VsZi5pcyhcImlucHV0XCIpKSB7XG4gICAgICBzZWxmLnZhbCh2YWx1ZSk7XG5cbiAgICAgIHZhciBzZXR0aW5ncyA9IHNlbGYuZGF0YShcInRpbWVwaWNrZXItc2V0dGluZ3NcIik7XG5cbiAgICAgIGlmIChzZXR0aW5ncy51c2VTZWxlY3QgJiYgc291cmNlICE9IFwic2VsZWN0XCIpIHtcbiAgICAgICAgc2VsZlxuICAgICAgICAgIC5kYXRhKFwidGltZXBpY2tlci1saXN0XCIpXG4gICAgICAgICAgLnZhbChfcm91bmRBbmRGb3JtYXRUaW1lKHRwLnRpbWUyaW50KHZhbHVlKSwgc2V0dGluZ3MpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2VsZi5kYXRhKFwidWktdGltZXBpY2tlci12YWx1ZVwiKSAhPSB2YWx1ZSkge1xuICAgICAgc2VsZi5kYXRhKFwidWktdGltZXBpY2tlci12YWx1ZVwiLCB2YWx1ZSk7XG4gICAgICBpZiAoc291cmNlID09IFwic2VsZWN0XCIpIHtcbiAgICAgICAgc2VsZlxuICAgICAgICAgIC50cmlnZ2VyKFwic2VsZWN0VGltZVwiKVxuICAgICAgICAgIC50cmlnZ2VyKFwiY2hhbmdlVGltZVwiKVxuICAgICAgICAgIC50cmlnZ2VyKFwiY2hhbmdlXCIsIFwidGltZXBpY2tlclwiKTtcbiAgICAgIH0gZWxzZSBpZiAoW1wiZXJyb3JcIiwgXCJpbml0aWFsXCJdLmluZGV4T2Yoc291cmNlKSA9PSAtMSkge1xuICAgICAgICBzZWxmLnRyaWdnZXIoXCJjaGFuZ2VUaW1lXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFtcImVycm9yXCIsIFwiaW5pdGlhbFwiXS5pbmRleE9mKHNvdXJjZSkgPT0gLTEpIHtcbiAgICAgICAgc2VsZi50cmlnZ2VyKFwic2VsZWN0VGltZVwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKlxuXHQqICBGaWx0ZXIgZnJlZWZvcm0gaW5wdXRcblx0Ki9cbiAgZnVuY3Rpb24gX2Rpc2FibGVUZXh0SW5wdXRIYW5kbGVyKGUpIHtcbiAgICBzd2l0Y2ggKGUua2V5Q29kZSkge1xuICAgICAgY2FzZSAxMzogLy8gcmV0dXJuXG4gICAgICBjYXNlIDk6IC8vdGFiXG4gICAgICAgIHJldHVybjtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qXG5cdCogIEtleWJvYXJkIG5hdmlnYXRpb24gdmlhIGFycm93IGtleXNcblx0Ki9cbiAgZnVuY3Rpb24gX2tleWRvd25oYW5kbGVyKGUpIHtcbiAgICB2YXIgc2VsZiA9ICQodGhpcyk7XG4gICAgdmFyIGxpc3QgPSBzZWxmLmRhdGEoXCJ0aW1lcGlja2VyLWxpc3RcIik7XG5cbiAgICBpZiAoIWxpc3QgfHwgIV9pc1Zpc2libGUobGlzdCkpIHtcbiAgICAgIGlmIChlLmtleUNvZGUgPT0gNDApIHtcbiAgICAgICAgLy8gc2hvdyB0aGUgbGlzdCFcbiAgICAgICAgbWV0aG9kcy5zaG93LmNhbGwoc2VsZi5nZXQoMCkpO1xuICAgICAgICBsaXN0ID0gc2VsZi5kYXRhKFwidGltZXBpY2tlci1saXN0XCIpO1xuICAgICAgICBpZiAoIV9oaWRlS2V5Ym9hcmQoc2VsZikpIHtcbiAgICAgICAgICBzZWxmLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAoZS5rZXlDb2RlKSB7XG4gICAgICBjYXNlIDEzOiAvLyByZXR1cm5cbiAgICAgICAgaWYgKF9zZWxlY3RWYWx1ZShzZWxmKSkge1xuICAgICAgICAgIF9mb3JtYXRWYWx1ZS5jYWxsKHNlbGYuZ2V0KDApLCB7IHR5cGU6IFwiY2hhbmdlXCIgfSk7XG4gICAgICAgICAgbWV0aG9kcy5oaWRlLmFwcGx5KHRoaXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgIGNhc2UgMzg6IC8vIHVwXG4gICAgICAgIHZhciBzZWxlY3RlZCA9IGxpc3QuZmluZChcIi51aS10aW1lcGlja2VyLXNlbGVjdGVkXCIpO1xuXG4gICAgICAgIGlmICghc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgICAgbGlzdC5maW5kKFwibGlcIikuZWFjaChmdW5jdGlvbihpLCBvYmopIHtcbiAgICAgICAgICAgIGlmICgkKG9iaikucG9zaXRpb24oKS50b3AgPiAwKSB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkID0gJChvYmopO1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgc2VsZWN0ZWQuYWRkQ2xhc3MoXCJ1aS10aW1lcGlja2VyLXNlbGVjdGVkXCIpO1xuICAgICAgICB9IGVsc2UgaWYgKCFzZWxlY3RlZC5pcyhcIjpmaXJzdC1jaGlsZFwiKSkge1xuICAgICAgICAgIHNlbGVjdGVkLnJlbW92ZUNsYXNzKFwidWktdGltZXBpY2tlci1zZWxlY3RlZFwiKTtcbiAgICAgICAgICBzZWxlY3RlZC5wcmV2KCkuYWRkQ2xhc3MoXCJ1aS10aW1lcGlja2VyLXNlbGVjdGVkXCIpO1xuXG4gICAgICAgICAgaWYgKHNlbGVjdGVkLnByZXYoKS5wb3NpdGlvbigpLnRvcCA8IHNlbGVjdGVkLm91dGVySGVpZ2h0KCkpIHtcbiAgICAgICAgICAgIGxpc3Quc2Nyb2xsVG9wKGxpc3Quc2Nyb2xsVG9wKCkgLSBzZWxlY3RlZC5vdXRlckhlaWdodCgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgIGNhc2UgNDA6IC8vIGRvd25cbiAgICAgICAgc2VsZWN0ZWQgPSBsaXN0LmZpbmQoXCIudWktdGltZXBpY2tlci1zZWxlY3RlZFwiKTtcblxuICAgICAgICBpZiAoc2VsZWN0ZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgbGlzdC5maW5kKFwibGlcIikuZWFjaChmdW5jdGlvbihpLCBvYmopIHtcbiAgICAgICAgICAgIGlmICgkKG9iaikucG9zaXRpb24oKS50b3AgPiAwKSB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkID0gJChvYmopO1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBzZWxlY3RlZC5hZGRDbGFzcyhcInVpLXRpbWVwaWNrZXItc2VsZWN0ZWRcIik7XG5cbiAgICAgICAgfSBlbHNlIGlmICghc2VsZWN0ZWQuaXMoXCI6bGFzdC1jaGlsZFwiKSkge1xuICAgICAgICAgIHNlbGVjdGVkLnJlbW92ZUNsYXNzKFwidWktdGltZXBpY2tlci1zZWxlY3RlZFwiKTtcbiAgICAgICAgICBzZWxlY3RlZC5uZXh0KCkuYWRkQ2xhc3MoXCJ1aS10aW1lcGlja2VyLXNlbGVjdGVkXCIpO1xuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgc2VsZWN0ZWQubmV4dCgpLnBvc2l0aW9uKCkudG9wICsgMiAqIHNlbGVjdGVkLm91dGVySGVpZ2h0KCkgPlxuICAgICAgICAgICAgbGlzdC5vdXRlckhlaWdodCgpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBsaXN0LnNjcm9sbFRvcChsaXN0LnNjcm9sbFRvcCgpICsgc2VsZWN0ZWQub3V0ZXJIZWlnaHQoKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICBjYXNlIDI3OiAvLyBlc2NhcGVcbiAgICAgICAgbGlzdC5maW5kKFwibGlcIikucmVtb3ZlQ2xhc3MoXCJ1aS10aW1lcGlja2VyLXNlbGVjdGVkXCIpO1xuICAgICAgICBtZXRob2RzLmhpZGUoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgOTogLy90YWJcbiAgICAgICAgbWV0aG9kcy5oaWRlKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvKlxuXHQqXHRUaW1lIHR5cGVhaGVhZFxuXHQqL1xuICBmdW5jdGlvbiBfa2V5dXBoYW5kbGVyKGUpIHtcbiAgICB2YXIgc2VsZiA9ICQodGhpcyk7XG4gICAgdmFyIGxpc3QgPSBzZWxmLmRhdGEoXCJ0aW1lcGlja2VyLWxpc3RcIik7XG4gICAgdmFyIHNldHRpbmdzID0gc2VsZi5kYXRhKFwidGltZXBpY2tlci1zZXR0aW5nc1wiKTtcblxuICAgIGlmICghbGlzdCB8fCAhX2lzVmlzaWJsZShsaXN0KSB8fCBzZXR0aW5ncy5kaXNhYmxlVGV4dElucHV0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoZS50eXBlID09PSBcInBhc3RlXCIgfHwgZS50eXBlID09PSBcImN1dFwiKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoc2V0dGluZ3MudHlwZWFoZWFkSGlnaGxpZ2h0KSB7XG4gICAgICAgICAgX3NldFNlbGVjdGVkKHNlbGYsIGxpc3QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxpc3QuaGlkZSgpO1xuICAgICAgICB9XG4gICAgICB9LCAwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGUua2V5Q29kZSkge1xuICAgICAgY2FzZSA5NjogLy8gbnVtcGFkIG51bWVyYWxzXG4gICAgICBjYXNlIDk3OlxuICAgICAgY2FzZSA5ODpcbiAgICAgIGNhc2UgOTk6XG4gICAgICBjYXNlIDEwMDpcbiAgICAgIGNhc2UgMTAxOlxuICAgICAgY2FzZSAxMDI6XG4gICAgICBjYXNlIDEwMzpcbiAgICAgIGNhc2UgMTA0OlxuICAgICAgY2FzZSAxMDU6XG4gICAgICBjYXNlIDQ4OiAvLyBudW1lcmFsc1xuICAgICAgY2FzZSA0OTpcbiAgICAgIGNhc2UgNTA6XG4gICAgICBjYXNlIDUxOlxuICAgICAgY2FzZSA1MjpcbiAgICAgIGNhc2UgNTM6XG4gICAgICBjYXNlIDU0OlxuICAgICAgY2FzZSA1NTpcbiAgICAgIGNhc2UgNTY6XG4gICAgICBjYXNlIDU3OlxuICAgICAgY2FzZSA2NTogLy8gYVxuICAgICAgY2FzZSA3NzogLy8gbVxuICAgICAgY2FzZSA4MDogLy8gcFxuICAgICAgY2FzZSAxODY6IC8vIGNvbG9uXG4gICAgICBjYXNlIDg6IC8vIGJhY2tzcGFjZVxuICAgICAgY2FzZSA0NjogLy8gZGVsZXRlXG4gICAgICAgIGlmIChzZXR0aW5ncy50eXBlYWhlYWRIaWdobGlnaHQpIHtcbiAgICAgICAgICBfc2V0U2VsZWN0ZWQoc2VsZiwgbGlzdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGlzdC5oaWRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gX3NlbGVjdFZhbHVlKHNlbGYpIHtcbiAgICB2YXIgc2V0dGluZ3MgPSBzZWxmLmRhdGEoXCJ0aW1lcGlja2VyLXNldHRpbmdzXCIpO1xuICAgIHZhciBsaXN0ID0gc2VsZi5kYXRhKFwidGltZXBpY2tlci1saXN0XCIpO1xuICAgIHZhciB0aW1lVmFsdWUgPSBudWxsO1xuXG4gICAgdmFyIGN1cnNvciA9IGxpc3QuZmluZChcIi51aS10aW1lcGlja2VyLXNlbGVjdGVkXCIpO1xuXG4gICAgaWYgKGN1cnNvci5oYXNDbGFzcyhcInVpLXRpbWVwaWNrZXItZGlzYWJsZWRcIikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoY3Vyc29yLmxlbmd0aCkge1xuICAgICAgLy8gc2VsZWN0ZWQgdmFsdWUgZm91bmRcbiAgICAgIHRpbWVWYWx1ZSA9IGN1cnNvci5kYXRhKFwidGltZVwiKTtcbiAgICB9XG5cbiAgICBpZiAodGltZVZhbHVlICE9PSBudWxsKSB7XG4gICAgICBpZiAodHlwZW9mIHRpbWVWYWx1ZSAhPSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRpbWVWYWx1ZSA9IF9pbnQydGltZSh0aW1lVmFsdWUsIHNldHRpbmdzKTtcbiAgICAgIH1cblxuICAgICAgX3NldFRpbWVWYWx1ZShzZWxmLCB0aW1lVmFsdWUsIFwic2VsZWN0XCIpO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gX2ludDJkdXJhdGlvbihzZWNvbmRzLCBzdGVwKSB7XG4gICAgc2Vjb25kcyA9IE1hdGguYWJzKHNlY29uZHMpO1xuICAgIHZhciBtaW51dGVzID0gTWF0aC5yb3VuZChzZWNvbmRzIC8gNjApLFxuICAgICAgZHVyYXRpb24gPSBbXSxcbiAgICAgIGhvdXJzLFxuICAgICAgbWlucztcblxuICAgIGlmIChtaW51dGVzIDwgNjApIHtcbiAgICAgIC8vIE9ubHkgc2hvdyAoeCBtaW5zKSB1bmRlciAxIGhvdXJcbiAgICAgIGR1cmF0aW9uID0gW21pbnV0ZXMsIF9sYW5nLm1pbnNdO1xuICAgIH0gZWxzZSB7XG4gICAgICBob3VycyA9IE1hdGguZmxvb3IobWludXRlcyAvIDYwKTtcbiAgICAgIG1pbnMgPSBtaW51dGVzICUgNjA7XG5cbiAgICAgIC8vIFNob3cgZGVjaW1hbCBub3RhdGlvbiAoZWc6IDEuNSBocnMpIGZvciAzMCBtaW51dGUgc3RlcHNcbiAgICAgIGlmIChzdGVwID09IDMwICYmIG1pbnMgPT0gMzApIHtcbiAgICAgICAgaG91cnMgKz0gX2xhbmcuZGVjaW1hbCArIDU7XG4gICAgICB9XG5cbiAgICAgIGR1cmF0aW9uLnB1c2goaG91cnMpO1xuICAgICAgZHVyYXRpb24ucHVzaChob3VycyA9PSAxID8gX2xhbmcuaHIgOiBfbGFuZy5ocnMpO1xuXG4gICAgICAvLyBTaG93IHJlbWFpbmRlciBtaW51dGVzIG5vdGF0aW9uIChlZzogMSBociAxNSBtaW5zKSBmb3Igbm9uLTMwIG1pbnV0ZSBzdGVwc1xuICAgICAgLy8gYW5kIG9ubHkgaWYgdGhlcmUgYXJlIHJlbWFpbmRlciBtaW51dGVzIHRvIHNob3dcbiAgICAgIGlmIChzdGVwICE9IDMwICYmIG1pbnMpIHtcbiAgICAgICAgZHVyYXRpb24ucHVzaChtaW5zKTtcbiAgICAgICAgZHVyYXRpb24ucHVzaChfbGFuZy5taW5zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZHVyYXRpb24uam9pbihcIiBcIik7XG4gIH1cblxuICBmdW5jdGlvbiBfaW50MnRpbWUodGltZUludCwgc2V0dGluZ3MpIHtcbiAgICBpZiAodHlwZW9mIHRpbWVJbnQgIT0gXCJudW1iZXJcIikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIHNlY29uZHMgPSBwYXJzZUludCh0aW1lSW50ICUgNjApLFxuICAgICAgbWludXRlcyA9IHBhcnNlSW50KCh0aW1lSW50IC8gNjApICUgNjApLFxuICAgICAgaG91cnMgPSBwYXJzZUludCgodGltZUludCAvICg2MCAqIDYwKSkgJSAyNCk7XG5cbiAgICB2YXIgdGltZSA9IG5ldyBEYXRlKDE5NzAsIDAsIDIsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCAwKTtcblxuICAgIGlmIChpc05hTih0aW1lLmdldFRpbWUoKSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICgkLnR5cGUoc2V0dGluZ3MudGltZUZvcm1hdCkgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIHNldHRpbmdzLnRpbWVGb3JtYXQodGltZSk7XG4gICAgfVxuXG4gICAgdmFyIG91dHB1dCA9IFwiXCI7XG4gICAgdmFyIGhvdXIsIGNvZGU7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZXR0aW5ncy50aW1lRm9ybWF0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb2RlID0gc2V0dGluZ3MudGltZUZvcm1hdC5jaGFyQXQoaSk7XG4gICAgICBzd2l0Y2ggKGNvZGUpIHtcbiAgICAgICAgY2FzZSBcImFcIjpcbiAgICAgICAgICBvdXRwdXQgKz0gdGltZS5nZXRIb3VycygpID4gMTEgPyBfbGFuZy5wbSA6IF9sYW5nLmFtO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJBXCI6XG4gICAgICAgICAgb3V0cHV0ICs9IHRpbWUuZ2V0SG91cnMoKSA+IDExID8gX2xhbmcuUE0gOiBfbGFuZy5BTTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiZ1wiOlxuICAgICAgICAgIGhvdXIgPSB0aW1lLmdldEhvdXJzKCkgJSAxMjtcbiAgICAgICAgICBvdXRwdXQgKz0gaG91ciA9PT0gMCA/IFwiMTJcIiA6IGhvdXI7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIkdcIjpcbiAgICAgICAgICBob3VyID0gdGltZS5nZXRIb3VycygpO1xuICAgICAgICAgIGlmICh0aW1lSW50ID09PSBPTkVfREFZKSBob3VyID0gc2V0dGluZ3Muc2hvdzI0MDAgPyAyNCA6IDA7XG4gICAgICAgICAgb3V0cHV0ICs9IGhvdXI7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcImhcIjpcbiAgICAgICAgICBob3VyID0gdGltZS5nZXRIb3VycygpICUgMTI7XG5cbiAgICAgICAgICBpZiAoaG91ciAhPT0gMCAmJiBob3VyIDwgMTApIHtcbiAgICAgICAgICAgIGhvdXIgPSBcIjBcIiArIGhvdXI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgb3V0cHV0ICs9IGhvdXIgPT09IDAgPyBcIjEyXCIgOiBob3VyO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJIXCI6XG4gICAgICAgICAgaG91ciA9IHRpbWUuZ2V0SG91cnMoKTtcbiAgICAgICAgICBpZiAodGltZUludCA9PT0gT05FX0RBWSkgaG91ciA9IHNldHRpbmdzLnNob3cyNDAwID8gMjQgOiAwO1xuICAgICAgICAgIG91dHB1dCArPSBob3VyID4gOSA/IGhvdXIgOiBcIjBcIiArIGhvdXI7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcImlcIjpcbiAgICAgICAgICB2YXIgbWludXRlcyA9IHRpbWUuZ2V0TWludXRlcygpO1xuICAgICAgICAgIG91dHB1dCArPSBtaW51dGVzID4gOSA/IG1pbnV0ZXMgOiBcIjBcIiArIG1pbnV0ZXM7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcInNcIjpcbiAgICAgICAgICBzZWNvbmRzID0gdGltZS5nZXRTZWNvbmRzKCk7XG4gICAgICAgICAgb3V0cHV0ICs9IHNlY29uZHMgPiA5ID8gc2Vjb25kcyA6IFwiMFwiICsgc2Vjb25kcztcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiXFxcXFwiOlxuICAgICAgICAgIC8vIGVzY2FwZSBjaGFyYWN0ZXI7IGFkZCB0aGUgbmV4dCBjaGFyYWN0ZXIgYW5kIHNraXAgYWhlYWRcbiAgICAgICAgICBpKys7XG4gICAgICAgICAgb3V0cHV0ICs9IHNldHRpbmdzLnRpbWVGb3JtYXQuY2hhckF0KGkpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgb3V0cHV0ICs9IGNvZGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9wYWQyKG4pIHtcbiAgICByZXR1cm4gKFwiMFwiICsgbikuc2xpY2UoLTIpO1xuICB9XG5cbiAgLy8gUGx1Z2luIGVudHJ5XG4gICQuZm4udGltZXBpY2tlciA9IGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgIGlmICghdGhpcy5sZW5ndGgpIHJldHVybiB0aGlzO1xuICAgIGlmIChtZXRob2RzW21ldGhvZF0pIHtcbiAgICAgIC8vIGNoZWNrIGlmIHRoaXMgZWxlbWVudCBpcyBhIHRpbWVwaWNrZXJcbiAgICAgIGlmICghdGhpcy5oYXNDbGFzcyhcInVpLXRpbWVwaWNrZXItaW5wdXRcIikpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICByZXR1cm4gbWV0aG9kc1ttZXRob2RdLmFwcGx5KFxuICAgICAgICB0aGlzLFxuICAgICAgICBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG1ldGhvZCA9PT0gXCJvYmplY3RcIiB8fCAhbWV0aG9kKSB7XG4gICAgICByZXR1cm4gbWV0aG9kcy5pbml0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICQuZXJyb3IoXCJNZXRob2QgXCIgKyBtZXRob2QgKyBcIiBkb2VzIG5vdCBleGlzdCBvbiBqUXVlcnkudGltZXBpY2tlclwiKTtcbiAgICB9XG4gIH07XG59KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9qcXVlcnkudGltZXBpY2tlci5qcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3\n')},function(module,exports){eval('module.exports = function(module) {\n\tif(!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif(!module.children) module.children = [];\n\t\tObject.defineProperty(module, "loaded", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, "id", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vbW9kdWxlLmpzP2MzYzIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuXHRpZighbW9kdWxlLndlYnBhY2tQb2x5ZmlsbCkge1xuXHRcdG1vZHVsZS5kZXByZWNhdGUgPSBmdW5jdGlvbigpIHt9O1xuXHRcdG1vZHVsZS5wYXRocyA9IFtdO1xuXHRcdC8vIG1vZHVsZS5wYXJlbnQgPSB1bmRlZmluZWQgYnkgZGVmYXVsdFxuXHRcdGlmKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwibG9hZGVkXCIsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmw7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJpZFwiLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIG1vZHVsZS5pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdG1vZHVsZS53ZWJwYWNrUG9seWZpbGwgPSAxO1xuXHR9XG5cdHJldHVybiBtb2R1bGU7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gKHdlYnBhY2spL2J1aWxkaW4vbW9kdWxlLmpzXG4vLyBtb2R1bGUgaWQgPSA0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4\n')},function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _defaults = __webpack_require__(6);\n\nvar _constants = __webpack_require__(0);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nvar Timepicker = function () {\n  function Timepicker(targetEl) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    _classCallCheck(this, Timepicker);\n\n    var attrOptions = Timepicker.extractAttrOptions(targetEl, Object.keys(_defaults.DEFAULT_SETTINGS));\n\n    this.settings = this.parseSettings(_extends({}, _defaults.DEFAULT_SETTINGS, options, attrOptions));\n\n    if (targetEl.value) {\n      this.seconds = this.time2int(targetEl.value);\n    }\n  }\n\n  _createClass(Timepicker, [{\n    key: \'_setSeconds\',\n\n\n    // TODO finish this function\n    value: function _setSeconds(seconds) {\n      if (this.settings.forceRoundTime) {\n        seconds = this.settings.roundingFunction(seconds, this.settings);\n      }\n\n      this.seconds = seconds;\n    }\n  }, {\n    key: \'time2int\',\n    value: function time2int(timeString) {\n      if (timeString === "" || timeString === null || timeString === undefined) return null;\n      if (timeString instanceof Date) {\n        return timeString.getHours() * 3600 + timeString.getMinutes() * 60 + timeString.getSeconds();\n      }\n      if (timeString instanceof String) {\n        return timeString;\n      }\n\n      timeString = timeString.toLowerCase().replace(/[\\s\\.]/g, "");\n\n      // if the last character is an "a" or "p", add the "m"\n      if (timeString.slice(-1) == "a" || timeString.slice(-1) == "p") {\n        timeString += "m";\n      }\n\n      var ampmRegex = "(" + this.settings.lang.am.replace(".", "") + "|" + this.settings.lang.pm.replace(".", "") + "|" + this.settings.lang.AM.replace(".", "") + "|" + this.settings.lang.PM.replace(".", "") + ")?";\n\n      // try to parse time input\n      var pattern = new RegExp("^" + ampmRegex + "([0-9]?[0-9])\\\\W?([0-5][0-9])?\\\\W?([0-5][0-9])?" + ampmRegex + "$");\n\n      var time = timeString.match(pattern);\n      if (!time) {\n        return null;\n      }\n\n      var hour = parseInt(time[2] * 1, 10);\n      var ampm = time[1] || time[5];\n      var hours = hour;\n      var minutes = time[3] * 1 || 0;\n      var seconds = time[4] * 1 || 0;\n\n      if (hour <= 12 && ampm) {\n        var isPm = ampm == this.settings.lang.pm || ampm == this.settings.lang.PM;\n\n        if (hour == 12) {\n          hours = isPm ? 12 : 0;\n        } else {\n          hours = hour + (isPm ? 12 : 0);\n        }\n      } else {\n        var t = hour * 3600 + minutes * 60 + seconds;\n        if (t >= _constants.ONE_DAY + (this.settings.show2400 ? 1 : 0)) {\n          if (this.settings.wrapHours === false) {\n            return null;\n          }\n\n          hours = hour % 24;\n        }\n      }\n\n      var timeInt = hours * 3600 + minutes * 60 + seconds;\n\n      // if no am/pm provided, intelligently guess based on the scrollDefault\n      if (hour < 12 && !ampm && this.settings._twelveHourTime && this.settings.scrollDefault) {\n        var delta = timeInt - this.settings.scrollDefault();\n        if (delta < 0 && delta >= _constants.ONE_DAY / -2) {\n          timeInt = (timeInt + _constants.ONE_DAY / 2) % _constants.ONE_DAY;\n        }\n      }\n\n      return timeInt;\n    }\n  }, {\n    key: \'parseDisableTimeRanges\',\n    value: function parseDisableTimeRanges(rawRanges) {\n      var _this = this;\n\n      if (!rawRanges || rawRanges.length == 0) {\n        return [];\n      }\n\n      // convert times to int\n      var intRanges = rawRanges.map(function (pair) {\n        return pair.map(function (time) {\n          return _this.time2int(time);\n        });\n      });\n\n      return Timepicker.mergeRanges(intRanges);\n    }\n  }, {\n    key: \'parseSettings\',\n    value: function parseSettings(settings) {\n      var _this2 = this;\n\n      settings.lang = _extends({}, _defaults.DEFAULT_LANG, settings.lang);\n\n      // lang is used by other functions the rest of this depends on\n      // todo: unwind circular dependency on lang\n      this.settings = settings;\n\n      if (settings.minTime) {\n        settings.minTime = this.time2int(settings.minTime);\n      }\n\n      if (settings.maxTime) {\n        settings.maxTime = this.time2int(settings.maxTime);\n      }\n\n      if (settings.durationTime && typeof settings.durationTime !== "function") {\n        settings.durationTime = this.time2int(settings.durationTime);\n      }\n\n      if (settings.scrollDefault == "now") {\n        settings.scrollDefault = function () {\n          return settings.roundingFunction(_this2.time2int(new Date()), settings);\n        };\n      } else if (settings.scrollDefault && typeof settings.scrollDefault != "function") {\n        var val = settings.scrollDefault;\n        settings.scrollDefault = function () {\n          return settings.roundingFunction(_this2.time2int(val), settings);\n        };\n      } else if (settings.minTime) {\n        settings.scrollDefault = function () {\n          return settings.roundingFunction(settings.minTime, settings);\n        };\n      }\n\n      if (typeof settings.timeFormat === "string" && settings.timeFormat.match(/[gh]/)) {\n        settings._twelveHourTime = true;\n      }\n\n      if (settings.showOnFocus === false && settings.showOn.indexOf("focus") != -1) {\n        settings.showOn.splice(settings.showOn.indexOf("focus"), 1);\n      }\n\n      settings.disableTimeRanges = this.parseDisableTimeRanges(settings.disableTimeRanges);\n      return settings;\n    }\n  }], [{\n    key: \'extractAttrOptions\',\n    value: function extractAttrOptions(element, keys) {\n      var output = {};\n      var _iteratorNormalCompletion = true;\n      var _didIteratorError = false;\n      var _iteratorError = undefined;\n\n      try {\n        for (var _iterator = keys[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n          var key = _step.value;\n\n          // console.log(key, element)\n          if (key in element.dataset) {\n            output[key] = element.dataset[key];\n          }\n        }\n      } catch (err) {\n        _didIteratorError = true;\n        _iteratorError = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion && _iterator.return) {\n            _iterator.return();\n          }\n        } finally {\n          if (_didIteratorError) {\n            throw _iteratorError;\n          }\n        }\n      }\n\n      return output;\n    }\n  }, {\n    key: \'mergeRanges\',\n    value: function mergeRanges(ranges) {\n      // sort by starting time\n      var sortedRanges = ranges.sort(function (a, b) {\n        return a[0] - b[0];\n      });\n\n      // merge any overlapping ranges\n      for (var i = sortedRanges.length - 1; i > 0; i--) {\n        if (sortedRanges[i][0] <= sortedRanges[i - 1][1]) {\n          sortedRanges[i - 1] = [Math.min(sortedRanges[i][0], sortedRanges[i - 1][0]), Math.max(sortedRanges[i][1], sortedRanges[i - 1][1])];\n          sortedRanges.splice(i, 1);\n        }\n      }\n\n      return sortedRanges;\n    }\n  }]);\n\n  return Timepicker;\n}();\n\nexports.default = Timepicker;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvdGltZXBpY2tlci9pbmRleC5qcz8xNzVhIl0sIm5hbWVzIjpbIlRpbWVwaWNrZXIiLCJ0YXJnZXRFbCIsIm9wdGlvbnMiLCJhdHRyT3B0aW9ucyIsImV4dHJhY3RBdHRyT3B0aW9ucyIsIk9iamVjdCIsImtleXMiLCJzZXR0aW5ncyIsInBhcnNlU2V0dGluZ3MiLCJ2YWx1ZSIsInNlY29uZHMiLCJ0aW1lMmludCIsImZvcmNlUm91bmRUaW1lIiwicm91bmRpbmdGdW5jdGlvbiIsInRpbWVTdHJpbmciLCJ1bmRlZmluZWQiLCJEYXRlIiwiZ2V0SG91cnMiLCJnZXRNaW51dGVzIiwiZ2V0U2Vjb25kcyIsIlN0cmluZyIsInRvTG93ZXJDYXNlIiwicmVwbGFjZSIsInNsaWNlIiwiYW1wbVJlZ2V4IiwibGFuZyIsImFtIiwicG0iLCJBTSIsIlBNIiwicGF0dGVybiIsIlJlZ0V4cCIsInRpbWUiLCJtYXRjaCIsImhvdXIiLCJwYXJzZUludCIsImFtcG0iLCJob3VycyIsIm1pbnV0ZXMiLCJpc1BtIiwidCIsInNob3cyNDAwIiwid3JhcEhvdXJzIiwidGltZUludCIsIl90d2VsdmVIb3VyVGltZSIsInNjcm9sbERlZmF1bHQiLCJkZWx0YSIsInJhd1JhbmdlcyIsImxlbmd0aCIsImludFJhbmdlcyIsIm1hcCIsInBhaXIiLCJtZXJnZVJhbmdlcyIsIm1pblRpbWUiLCJtYXhUaW1lIiwiZHVyYXRpb25UaW1lIiwidmFsIiwidGltZUZvcm1hdCIsInNob3dPbkZvY3VzIiwic2hvd09uIiwiaW5kZXhPZiIsInNwbGljZSIsImRpc2FibGVUaW1lUmFuZ2VzIiwicGFyc2VEaXNhYmxlVGltZVJhbmdlcyIsImVsZW1lbnQiLCJvdXRwdXQiLCJrZXkiLCJkYXRhc2V0IiwicmFuZ2VzIiwic29ydGVkUmFuZ2VzIiwic29ydCIsImEiLCJiIiwiaSIsIk1hdGgiLCJtaW4iLCJtYXgiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7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QUE0QjtBQUMxQkYsbUJBQU9DLEdBQVAsSUFBY0YsUUFBUUcsT0FBUixDQUFnQkQsR0FBaEIsQ0FBZDtBQUNEO0FBQ0Y7QUFQc0M7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFRdkMsYUFBT0QsTUFBUDtBQUNEOzs7Z0NBbUdrQkcsTSxFQUFRO0FBQ3pCO0FBQ0EsVUFBTUMsZUFBZUQsT0FBT0UsSUFBUCxDQUFZLFVBQUNDLENBQUQsRUFBR0MsQ0FBSDtBQUFBLGVBQVNELEVBQUUsQ0FBRixJQUFPQyxFQUFFLENBQUYsQ0FBaEI7QUFBQSxPQUFaLENBQXJCOztBQUVBO0FBQ0EsV0FBSyxJQUFJQyxJQUFJSixhQUFhckIsTUFBYixHQUFzQixDQUFuQyxFQUFzQ3lCLElBQUksQ0FBMUMsRUFBNkNBLEdBQTdDLEVBQWtEO0FBQ2hELFlBQ0VKLGFBQWFJLENBQWIsRUFBZ0IsQ0FBaEIsS0FDQUosYUFBYUksSUFBSSxDQUFqQixFQUFvQixDQUFwQixDQUZGLEVBR0U7QUFDQUosdUJBQWFJLElBQUksQ0FBakIsSUFBc0IsQ0FDcEJDLEtBQUtDLEdBQUwsQ0FDRU4sYUFBYUksQ0FBYixFQUFnQixDQUFoQixDQURGLEVBRUVKLGFBQWFJLElBQUksQ0FBakIsRUFBb0IsQ0FBcEIsQ0FGRixDQURvQixFQUtwQkMsS0FBS0UsR0FBTCxDQUNFUCxhQUFhSSxDQUFiLEVBQWdCLENBQWhCLENBREYsRUFFRUosYUFBYUksSUFBSSxDQUFqQixFQUFvQixDQUFwQixDQUZGLENBTG9CLENBQXRCO0FBVUFKLHVCQUFhUixNQUFiLENBQW9CWSxDQUFwQixFQUF1QixDQUF2QjtBQUNEO0FBQ0Y7O0FBRUQsYUFBT0osWUFBUDtBQUNEOzs7Ozs7a0JBd0VZckUsVSIsImZpbGUiOiI1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgREVGQVVMVF9TRVRUSU5HUywgREVGQVVMVF9MQU5HIH0gZnJvbSAnLi9kZWZhdWx0cyc7XG5pbXBvcnQgeyBPTkVfREFZIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5jbGFzcyBUaW1lcGlja2VyIHtcbiAgY29uc3RydWN0b3IodGFyZ2V0RWwsIG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IGF0dHJPcHRpb25zID0gVGltZXBpY2tlci5leHRyYWN0QXR0ck9wdGlvbnModGFyZ2V0RWwsIE9iamVjdC5rZXlzKERFRkFVTFRfU0VUVElOR1MpKTtcblxuICAgIHRoaXMuc2V0dGluZ3MgPSB0aGlzLnBhcnNlU2V0dGluZ3Moe1xuICAgICAgLi4uREVGQVVMVF9TRVRUSU5HUyxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAuLi5hdHRyT3B0aW9uc1xuICAgIH0pO1xuXG4gICAgaWYgKHRhcmdldEVsLnZhbHVlKSB7XG4gICAgICB0aGlzLnNlY29uZHMgPSB0aGlzLnRpbWUyaW50KHRhcmdldEVsLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZXh0cmFjdEF0dHJPcHRpb25zKGVsZW1lbnQsIGtleXMpIHtcbiAgICBjb25zdCBvdXRwdXQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZyhrZXksIGVsZW1lbnQpXG4gICAgICBpZiAoa2V5IGluIGVsZW1lbnQuZGF0YXNldCkge1xuICAgICAgICBvdXRwdXRba2V5XSA9IGVsZW1lbnQuZGF0YXNldFtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9XG5cbiAgLy8gVE9ETyBmaW5pc2ggdGhpcyBmdW5jdGlvblxuICBfc2V0U2Vjb25kcyhzZWNvbmRzKSB7XG4gICAgaWYgKHRoaXMuc2V0dGluZ3MuZm9yY2VSb3VuZFRpbWUpIHtcbiAgICAgIHNlY29uZHMgPSB0aGlzLnNldHRpbmdzLnJvdW5kaW5nRnVuY3Rpb24oc2Vjb25kcywgdGhpcy5zZXR0aW5ncyk7XG4gICAgfVxuXG4gICAgdGhpcy5zZWNvbmRzID0gc2Vjb25kcztcbiAgfVxuXG4gIHRpbWUyaW50KHRpbWVTdHJpbmcpIHtcbiAgICBpZiAodGltZVN0cmluZyA9PT0gXCJcIiB8fCB0aW1lU3RyaW5nID09PSBudWxsIHx8IHRpbWVTdHJpbmcgPT09IHVuZGVmaW5lZCkgcmV0dXJuIG51bGw7XG4gICAgaWYgKHRpbWVTdHJpbmcgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aW1lU3RyaW5nLmdldEhvdXJzKCkgKiAzNjAwICtcbiAgICAgICAgdGltZVN0cmluZy5nZXRNaW51dGVzKCkgKiA2MCArXG4gICAgICAgIHRpbWVTdHJpbmcuZ2V0U2Vjb25kcygpXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodGltZVN0cmluZyBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgICAgcmV0dXJuIHRpbWVTdHJpbmc7XG4gICAgfVxuXG4gICAgdGltZVN0cmluZyA9IHRpbWVTdHJpbmcudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXFxzXFwuXS9nLCBcIlwiKTtcblxuICAgIC8vIGlmIHRoZSBsYXN0IGNoYXJhY3RlciBpcyBhbiBcImFcIiBvciBcInBcIiwgYWRkIHRoZSBcIm1cIlxuICAgIGlmICh0aW1lU3RyaW5nLnNsaWNlKC0xKSA9PSBcImFcIiB8fCB0aW1lU3RyaW5nLnNsaWNlKC0xKSA9PSBcInBcIikge1xuICAgICAgdGltZVN0cmluZyArPSBcIm1cIjtcbiAgICB9XG5cbiAgICB2YXIgYW1wbVJlZ2V4ID1cbiAgICAgIFwiKFwiICtcbiAgICAgIHRoaXMuc2V0dGluZ3MubGFuZy5hbS5yZXBsYWNlKFwiLlwiLCBcIlwiKSArXG4gICAgICBcInxcIiArXG4gICAgICB0aGlzLnNldHRpbmdzLmxhbmcucG0ucmVwbGFjZShcIi5cIiwgXCJcIikgK1xuICAgICAgXCJ8XCIgK1xuICAgICAgdGhpcy5zZXR0aW5ncy5sYW5nLkFNLnJlcGxhY2UoXCIuXCIsIFwiXCIpICtcbiAgICAgIFwifFwiICtcbiAgICAgIHRoaXMuc2V0dGluZ3MubGFuZy5QTS5yZXBsYWNlKFwiLlwiLCBcIlwiKSArXG4gICAgICBcIik/XCI7XG5cbiAgICAvLyB0cnkgdG8gcGFyc2UgdGltZSBpbnB1dFxuICAgIHZhciBwYXR0ZXJuID0gbmV3IFJlZ0V4cChcbiAgICAgIFwiXlwiICtcbiAgICAgICAgYW1wbVJlZ2V4ICtcbiAgICAgICAgXCIoWzAtOV0/WzAtOV0pXFxcXFc/KFswLTVdWzAtOV0pP1xcXFxXPyhbMC01XVswLTldKT9cIiArXG4gICAgICAgIGFtcG1SZWdleCArXG4gICAgICAgIFwiJFwiXG4gICAgKTtcblxuICAgIHZhciB0aW1lID0gdGltZVN0cmluZy5tYXRjaChwYXR0ZXJuKTtcbiAgICBpZiAoIXRpbWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBob3VyID0gcGFyc2VJbnQodGltZVsyXSAqIDEsIDEwKTtcbiAgICB2YXIgYW1wbSA9IHRpbWVbMV0gfHwgdGltZVs1XTtcbiAgICB2YXIgaG91cnMgPSBob3VyO1xuICAgIHZhciBtaW51dGVzID0gdGltZVszXSAqIDEgfHwgMDtcbiAgICB2YXIgc2Vjb25kcyA9IHRpbWVbNF0gKiAxIHx8IDA7XG5cbiAgICBpZiAoaG91ciA8PSAxMiAmJiBhbXBtKSB7XG4gICAgICB2YXIgaXNQbSA9IGFtcG0gPT0gdGhpcy5zZXR0aW5ncy5sYW5nLnBtIHx8IGFtcG0gPT0gdGhpcy5zZXR0aW5ncy5sYW5nLlBNO1xuXG4gICAgICBpZiAoaG91ciA9PSAxMikge1xuICAgICAgICBob3VycyA9IGlzUG0gPyAxMiA6IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBob3VycyA9IGhvdXIgKyAoaXNQbSA/IDEyIDogMCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB0ID0gaG91ciAqIDM2MDAgKyBtaW51dGVzICogNjAgKyBzZWNvbmRzO1xuICAgICAgaWYgKHQgPj0gT05FX0RBWSArICh0aGlzLnNldHRpbmdzLnNob3cyNDAwID8gMSA6IDApKSB7XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzLndyYXBIb3VycyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGhvdXJzID0gaG91ciAlIDI0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciB0aW1lSW50ID0gaG91cnMgKiAzNjAwICsgbWludXRlcyAqIDYwICsgc2Vjb25kcztcblxuICAgIC8vIGlmIG5vIGFtL3BtIHByb3ZpZGVkLCBpbnRlbGxpZ2VudGx5IGd1ZXNzIGJhc2VkIG9uIHRoZSBzY3JvbGxEZWZhdWx0XG4gICAgaWYgKFxuICAgICAgaG91ciA8IDEyICYmXG4gICAgICAhYW1wbSAmJlxuICAgICAgdGhpcy5zZXR0aW5ncy5fdHdlbHZlSG91clRpbWUgJiZcbiAgICAgIHRoaXMuc2V0dGluZ3Muc2Nyb2xsRGVmYXVsdFxuICAgICkge1xuICAgICAgdmFyIGRlbHRhID0gdGltZUludCAtIHRoaXMuc2V0dGluZ3Muc2Nyb2xsRGVmYXVsdCgpO1xuICAgICAgaWYgKGRlbHRhIDwgMCAmJiBkZWx0YSA+PSBPTkVfREFZIC8gLTIpIHtcbiAgICAgICAgdGltZUludCA9ICh0aW1lSW50ICsgT05FX0RBWSAvIDIpICUgT05FX0RBWTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGltZUludDtcbiAgfVxuXG4gIHN0YXRpYyBtZXJnZVJhbmdlcyhyYW5nZXMpIHtcbiAgICAvLyBzb3J0IGJ5IHN0YXJ0aW5nIHRpbWVcbiAgICBjb25zdCBzb3J0ZWRSYW5nZXMgPSByYW5nZXMuc29ydCgoYSxiKSA9PiBhWzBdIC0gYlswXSk7XG5cbiAgICAvLyBtZXJnZSBhbnkgb3ZlcmxhcHBpbmcgcmFuZ2VzXG4gICAgZm9yICh2YXIgaSA9IHNvcnRlZFJhbmdlcy5sZW5ndGggLSAxOyBpID4gMDsgaS0tKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHNvcnRlZFJhbmdlc1tpXVswXSA8PVxuICAgICAgICBzb3J0ZWRSYW5nZXNbaSAtIDFdWzFdXG4gICAgICApIHtcbiAgICAgICAgc29ydGVkUmFuZ2VzW2kgLSAxXSA9IFtcbiAgICAgICAgICBNYXRoLm1pbihcbiAgICAgICAgICAgIHNvcnRlZFJhbmdlc1tpXVswXSxcbiAgICAgICAgICAgIHNvcnRlZFJhbmdlc1tpIC0gMV1bMF1cbiAgICAgICAgICApLFxuICAgICAgICAgIE1hdGgubWF4KFxuICAgICAgICAgICAgc29ydGVkUmFuZ2VzW2ldWzFdLFxuICAgICAgICAgICAgc29ydGVkUmFuZ2VzW2kgLSAxXVsxXVxuICAgICAgICAgIClcbiAgICAgICAgXTtcbiAgICAgICAgc29ydGVkUmFuZ2VzLnNwbGljZShpLCAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc29ydGVkUmFuZ2VzO1xuICB9XG5cbiAgcGFyc2VEaXNhYmxlVGltZVJhbmdlcyhyYXdSYW5nZXMpIHtcbiAgICBpZiAoIXJhd1JhbmdlcyB8fCByYXdSYW5nZXMubGVuZ3RoID09IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICAvLyBjb252ZXJ0IHRpbWVzIHRvIGludFxuICAgIGNvbnN0IGludFJhbmdlcyA9IHJhd1Jhbmdlcy5tYXAocGFpciA9PiB7XG4gICAgICByZXR1cm4gcGFpci5tYXAodGltZSA9PiB0aGlzLnRpbWUyaW50KHRpbWUpKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBUaW1lcGlja2VyLm1lcmdlUmFuZ2VzKGludFJhbmdlcyk7XG4gIH1cblxuICBwYXJzZVNldHRpbmdzKHNldHRpbmdzKSB7XG5cbiAgICBzZXR0aW5ncy5sYW5nID0geyAuLi5ERUZBVUxUX0xBTkcsIC4uLnNldHRpbmdzLmxhbmcgfTtcblxuICAgIC8vIGxhbmcgaXMgdXNlZCBieSBvdGhlciBmdW5jdGlvbnMgdGhlIHJlc3Qgb2YgdGhpcyBkZXBlbmRzIG9uXG4gICAgLy8gdG9kbzogdW53aW5kIGNpcmN1bGFyIGRlcGVuZGVuY3kgb24gbGFuZ1xuICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5ncztcblxuICAgIGlmIChzZXR0aW5ncy5taW5UaW1lKSB7XG4gICAgICBzZXR0aW5ncy5taW5UaW1lID0gdGhpcy50aW1lMmludChzZXR0aW5ncy5taW5UaW1lKTtcbiAgICB9XG5cbiAgICBpZiAoc2V0dGluZ3MubWF4VGltZSkge1xuICAgICAgc2V0dGluZ3MubWF4VGltZSA9IHRoaXMudGltZTJpbnQoc2V0dGluZ3MubWF4VGltZSk7XG4gICAgfVxuXG4gICAgaWYgKHNldHRpbmdzLmR1cmF0aW9uVGltZSAmJiB0eXBlb2Ygc2V0dGluZ3MuZHVyYXRpb25UaW1lICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHNldHRpbmdzLmR1cmF0aW9uVGltZSA9IHRoaXMudGltZTJpbnQoc2V0dGluZ3MuZHVyYXRpb25UaW1lKTtcbiAgICB9XG5cbiAgICBpZiAoc2V0dGluZ3Muc2Nyb2xsRGVmYXVsdCA9PSBcIm5vd1wiKSB7XG4gICAgICBzZXR0aW5ncy5zY3JvbGxEZWZhdWx0ID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gc2V0dGluZ3Mucm91bmRpbmdGdW5jdGlvbih0aGlzLnRpbWUyaW50KG5ldyBEYXRlKCkpLCBzZXR0aW5ncyk7XG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBzZXR0aW5ncy5zY3JvbGxEZWZhdWx0ICYmXG4gICAgICB0eXBlb2Ygc2V0dGluZ3Muc2Nyb2xsRGVmYXVsdCAhPSBcImZ1bmN0aW9uXCJcbiAgICApIHtcbiAgICAgIHZhciB2YWwgPSBzZXR0aW5ncy5zY3JvbGxEZWZhdWx0O1xuICAgICAgc2V0dGluZ3Muc2Nyb2xsRGVmYXVsdCA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHNldHRpbmdzLnJvdW5kaW5nRnVuY3Rpb24odGhpcy50aW1lMmludCh2YWwpLCBzZXR0aW5ncyk7XG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoc2V0dGluZ3MubWluVGltZSkge1xuICAgICAgc2V0dGluZ3Muc2Nyb2xsRGVmYXVsdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc2V0dGluZ3Mucm91bmRpbmdGdW5jdGlvbihzZXR0aW5ncy5taW5UaW1lLCBzZXR0aW5ncyk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHR5cGVvZiBzZXR0aW5ncy50aW1lRm9ybWF0ID09PSBcInN0cmluZ1wiXG4gICAgICAgICYmIHNldHRpbmdzLnRpbWVGb3JtYXQubWF0Y2goL1tnaF0vKVxuICAgICkge1xuICAgICAgc2V0dGluZ3MuX3R3ZWx2ZUhvdXJUaW1lID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBzZXR0aW5ncy5zaG93T25Gb2N1cyA9PT0gZmFsc2UgJiZcbiAgICAgIHNldHRpbmdzLnNob3dPbi5pbmRleE9mKFwiZm9jdXNcIikgIT0gLTFcbiAgICApIHtcbiAgICAgIHNldHRpbmdzLnNob3dPbi5zcGxpY2Uoc2V0dGluZ3Muc2hvd09uLmluZGV4T2YoXCJmb2N1c1wiKSwgMSk7XG4gICAgfVxuXG4gICAgc2V0dGluZ3MuZGlzYWJsZVRpbWVSYW5nZXMgPSB0aGlzLnBhcnNlRGlzYWJsZVRpbWVSYW5nZXMoc2V0dGluZ3MuZGlzYWJsZVRpbWVSYW5nZXMpO1xuICAgIHJldHVybiBzZXR0aW5ncztcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBUaW1lcGlja2VyO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3RpbWVwaWNrZXIvaW5kZXguanMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5\n')},function(module,exports,__webpack_require__){"use strict";eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.DEFAULT_LANG = exports.DEFAULT_SETTINGS = undefined;\n\nvar _rounding = __webpack_require__(1);\n\nvar _rounding2 = _interopRequireDefault(_rounding);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar DEFAULT_SETTINGS = {\n  appendTo: \"body\",\n  className: null,\n  closeOnWindowScroll: false,\n  disableTextInput: false,\n  disableTimeRanges: [],\n  disableTouchKeyboard: false,\n  durationTime: null,\n  forceRoundTime: false,\n  lang: {},\n  maxTime: null,\n  minTime: null,\n  noneOption: false,\n  orientation: \"l\",\n  roundingFunction: _rounding2.default,\n  scrollDefault: null,\n  selectOnBlur: false,\n  show2400: false,\n  showDuration: false,\n  showOn: [\"click\", \"focus\"],\n  showOnFocus: true,\n  step: 30,\n  stopScrollPropagation: false,\n  timeFormat: \"g:ia\",\n  typeaheadHighlight: true,\n  useSelect: false,\n  wrapHours: true\n};\n\nvar DEFAULT_LANG = {\n  am: 'am',\n  pm: 'pm',\n  AM: 'AM',\n  PM: 'PM',\n  decimal: '.',\n  mins: 'mins',\n  hr: 'hr',\n  hrs: 'hrs'\n};\n\nexports.DEFAULT_SETTINGS = DEFAULT_SETTINGS;\nexports.DEFAULT_LANG = DEFAULT_LANG;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvdGltZXBpY2tlci9kZWZhdWx0cy5qcz84NTlhIl0sIm5hbWVzIjpbIkRFRkFVTFRfU0VUVElOR1MiLCJhcHBlbmRUbyIsImNsYXNzTmFtZSIsImNsb3NlT25XaW5kb3dTY3JvbGwiLCJkaXNhYmxlVGV4dElucHV0IiwiZGlzYWJsZVRpbWVSYW5nZXMiLCJkaXNhYmxlVG91Y2hLZXlib2FyZCIsImR1cmF0aW9uVGltZSIsImZvcmNlUm91bmRUaW1lIiwibGFuZyIsIm1heFRpbWUiLCJtaW5UaW1lIiwibm9uZU9wdGlvbiIsIm9yaWVudGF0aW9uIiwicm91bmRpbmdGdW5jdGlvbiIsInNjcm9sbERlZmF1bHQiLCJzZWxlY3RPbkJsdXIiLCJzaG93MjQwMCIsInNob3dEdXJhdGlvbiIsInNob3dPbiIsInNob3dPbkZvY3VzIiwic3RlcCIsInN0b3BTY3JvbGxQcm9wYWdhdGlvbiIsInRpbWVGb3JtYXQiLCJ0eXBlYWhlYWRIaWdobGlnaHQiLCJ1c2VTZWxlY3QiLCJ3cmFwSG91cnMiLCJERUZBVUxUX0xBTkciLCJhbSIsInBtIiwiQU0iLCJQTSIsImRlY2ltYWwiLCJtaW5zIiwiaHIiLCJocnMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7Ozs7O0FBRUEsSUFBTUEsbUJBQW1CO0FBQ3ZCQyxZQUFVLE1BRGE7QUFFdkJDLGFBQVcsSUFGWTtBQUd2QkMsdUJBQXFCLEtBSEU7QUFJdkJDLG9CQUFrQixLQUpLO0FBS3ZCQyxxQkFBbUIsRUFMSTtBQU12QkMsd0JBQXNCLEtBTkM7QUFPdkJDLGdCQUFjLElBUFM7QUFRdkJDLGtCQUFnQixLQVJPO0FBU3ZCQyxRQUFNLEVBVGlCO0FBVXZCQyxXQUFTLElBVmM7QUFXdkJDLFdBQVMsSUFYYztBQVl2QkMsY0FBWSxLQVpXO0FBYXZCQyxlQUFhLEdBYlU7QUFjdkJDLHNDQWR1QjtBQWV2QkMsaUJBQWUsSUFmUTtBQWdCdkJDLGdCQUFjLEtBaEJTO0FBaUJ2QkMsWUFBVSxLQWpCYTtBQWtCdkJDLGdCQUFjLEtBbEJTO0FBbUJ2QkMsVUFBUSxDQUFDLE9BQUQsRUFBVSxPQUFWLENBbkJlO0FBb0J2QkMsZUFBYSxJQXBCVTtBQXFCdkJDLFFBQU0sRUFyQmlCO0FBc0J2QkMseUJBQXVCLEtBdEJBO0FBdUJ2QkMsY0FBWSxNQXZCVztBQXdCdkJDLHNCQUFvQixJQXhCRztBQXlCdkJDLGFBQVcsS0F6Qlk7QUEwQnZCQyxhQUFXO0FBMUJZLENBQXpCOztBQTZCQSxJQUFNQyxlQUFlO0FBQ25CQyxNQUFJLElBRGU7QUFFbkJDLE1BQUksSUFGZTtBQUduQkMsTUFBSSxJQUhlO0FBSW5CQyxNQUFJLElBSmU7QUFLbkJDLFdBQVMsR0FMVTtBQU1uQkMsUUFBTSxNQU5hO0FBT25CQyxNQUFJLElBUGU7QUFRbkJDLE9BQUs7QUFSYyxDQUFyQjs7UUFXU25DLGdCLEdBQUFBLGdCO1FBQWtCMkIsWSxHQUFBQSxZIiwiZmlsZSI6IjYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcm91bmRpbmdGdW5jdGlvbiBmcm9tICcuL3JvdW5kaW5nJ1xuXG5jb25zdCBERUZBVUxUX1NFVFRJTkdTID0ge1xuICBhcHBlbmRUbzogXCJib2R5XCIsXG4gIGNsYXNzTmFtZTogbnVsbCxcbiAgY2xvc2VPbldpbmRvd1Njcm9sbDogZmFsc2UsXG4gIGRpc2FibGVUZXh0SW5wdXQ6IGZhbHNlLFxuICBkaXNhYmxlVGltZVJhbmdlczogW10sXG4gIGRpc2FibGVUb3VjaEtleWJvYXJkOiBmYWxzZSxcbiAgZHVyYXRpb25UaW1lOiBudWxsLFxuICBmb3JjZVJvdW5kVGltZTogZmFsc2UsXG4gIGxhbmc6IHt9LFxuICBtYXhUaW1lOiBudWxsLFxuICBtaW5UaW1lOiBudWxsLFxuICBub25lT3B0aW9uOiBmYWxzZSxcbiAgb3JpZW50YXRpb246IFwibFwiLFxuICByb3VuZGluZ0Z1bmN0aW9uLFxuICBzY3JvbGxEZWZhdWx0OiBudWxsLFxuICBzZWxlY3RPbkJsdXI6IGZhbHNlLFxuICBzaG93MjQwMDogZmFsc2UsXG4gIHNob3dEdXJhdGlvbjogZmFsc2UsXG4gIHNob3dPbjogW1wiY2xpY2tcIiwgXCJmb2N1c1wiXSxcbiAgc2hvd09uRm9jdXM6IHRydWUsXG4gIHN0ZXA6IDMwLFxuICBzdG9wU2Nyb2xsUHJvcGFnYXRpb246IGZhbHNlLFxuICB0aW1lRm9ybWF0OiBcImc6aWFcIixcbiAgdHlwZWFoZWFkSGlnaGxpZ2h0OiB0cnVlLFxuICB1c2VTZWxlY3Q6IGZhbHNlLFxuICB3cmFwSG91cnM6IHRydWVcbn07XG5cbmNvbnN0IERFRkFVTFRfTEFORyA9IHtcbiAgYW06ICdhbScsXG4gIHBtOiAncG0nLFxuICBBTTogJ0FNJyxcbiAgUE06ICdQTScsXG4gIGRlY2ltYWw6ICcuJyxcbiAgbWluczogJ21pbnMnLFxuICBocjogJ2hyJyxcbiAgaHJzOiAnaHJzJ1xufTtcblxuZXhwb3J0IHsgREVGQVVMVF9TRVRUSU5HUywgREVGQVVMVF9MQU5HIH07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvdGltZXBpY2tlci9kZWZhdWx0cy5qcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///6\n")}]);
