{"version":3,"file":"./assets/js/vendor.bundle.js","mappings":"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AiB13L,GACjBtB,EAAQX,KAAKiC,IA+Db23L,UAAWjI,EAAeC,GAAMa,YAGlCb,EAAKiI,UAAY,WAAa9F,GAAY,GAC1CnC,EAAKkI,SAAW,WAAa/F,GAAY,GACzCnC,EAAKmI,cA/uCO,SAivCZ,IAAK,MAAMrqM,KAAOg9L,EAEU,iBAAfA,EAAMh9L,IAEf65L,EAAcmD,EAAMh9L,IAWxB,OANAb,OAAO0D,OAAOq/L,EAAMlF,GAGpBkF,EAAKlwL,UAAUq2L,GACfnG,EAAKlwL,UAAUkxL,GACfhB,EAAKlwL,UAAUu2L,GACRrG,EAIOoI,CAAK,IAErB7rM,EAAOD,QAAUkkM,I,QCp9EjB,MAAMlH,EAAW,2BACX+O,EAAW,CACf,KACA,KACA,KACA,KACA,MACA,QACA,UACA,MACA,MACA,WACA,KACA,SACA,OACA,OACA,QACA,QACA,aACA,OACA,QACA,OACA,UACA,MACA,SACA,WACA,SACA,SACA,MACA,QACA,QACA,QAIA,WACA,QACA,QACA,SACA,SACA,OACA,SACA,WAEIC,EAAW,CACf,OACA,QACA,OACA,YACA,MACA,YAoFIC,EAAY,GAAGrkL,OAlCI,CACvB,cACA,aACA,gBACA,eAEA,UACA,UAEA,OACA,WACA,QACA,aACA,WACA,YACA,qBACA,YACA,qBACA,SACA,YAGyB,CACzB,YACA,OACA,QACA,UACA,SACA,WACA,eACA,SACA,UA9EY,CACZ,OACA,WACA,SACA,OACA,OACA,SACA,SACA,SACA,WACA,UACA,QACA,SACA,MACA,MACA,UACA,UACA,QACA,UACA,OACA,UACA,eACA,aACA,aACA,YACA,cACA,cACA,eACA,QACA,aACA,oBACA,cACA,gBACA,iBACA,UAGkB,CAClB,YACA,gBACA,aACA,iBACA,cACA,YACA,aAgEF,SAASskL,EAAUriE,GACjB,OAAOjiH,EAAO,MAAOiiH,EAAI,KAO3B,SAASjiH,KAAUxF,GAEjB,OADeA,EAAKjP,KAAKwL,IAAMla,OApBjBolI,EAoBwBlrH,GAlBpB,iBAAPkrH,EAAwBA,EAE5BA,EAAGplI,OAHM,KADlB,IAAgBolI,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","sources":["webpack://dashkit/./node_modules/@shopify/draggable/lib/draggable.bundle.js","webpack://dashkit/./node_modules/autosize/dist/autosize.esm.js","webpack://dashkit/./node_modules/@popperjs/core/lib/enums.js","webpack://dashkit/./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","webpack://dashkit/./node_modules/@popperjs/core/lib/dom-utils/getWindow.js","webpack://dashkit/./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","webpack://dashkit/./node_modules/@popperjs/core/lib/modifiers/applyStyles.js","webpack://dashkit/./node_modules/@popperjs/core/lib/utils/getBasePlacement.js","webpack://dashkit/./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","webpack://dashkit/./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","webpack://dashkit/./node_modules/@popperjs/core/lib/dom-utils/contains.js","webpack://dashkit/./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","webpack://dashkit/./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","webpack://dashkit/./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","webpack://dashkit/./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","webpack://dashkit/./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","webpack://dashkit/./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","webpack://dashkit/./node_modules/@popperjs/core/lib/utils/math.js","webpack://dashkit/./node_modules/@popperjs/core/lib/utils/within.js","webpack://dashkit/./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","webpack://dashkit/./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","webpack://dashkit/./node_modules/@popperjs/core/lib/utils/expandToHashMap.js","webpack://dashkit/./node_modules/@popperjs/core/lib/modifiers/arrow.js","webpack://dashkit/./node_modules/@popperjs/core/lib/utils/getVariation.js","webpack://dashkit/./node_modules/@popperjs/core/lib/modifiers/computeStyles.js","webpack://dashkit/./node_modules/@popperjs/core/lib/modifiers/eventListeners.js","webpack://dashkit/./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","webpack://dashkit/./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","webpack://dashkit/./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","webpack://dashkit/./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","webpack://dashkit/./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","webpack://dashkit/./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","webpack://dashkit/./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","webpack://dashkit/./node_modules/@popperjs/core/lib/utils/rectToClientRect.js","webpack://dashkit/./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","webpack://dashkit/./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","webpack://dashkit/./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","webpack://dashkit/./node_modules/@popperjs/core/lib/utils/computeOffsets.js","webpack://dashkit/./node_modules/@popperjs/core/lib/utils/detectOverflow.js","webpack://dashkit/./node_modules/@popperjs/core/lib/modifiers/flip.js","webpack://dashkit/./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","webpack://dashkit/./node_modules/@popperjs/core/lib/modifiers/hide.js","webpack://dashkit/./node_modules/@popperjs/core/lib/modifiers/offset.js","webpack://dashkit/./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","webpack://dashkit/./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","webpack://dashkit/./node_modules/@popperjs/core/lib/utils/getAltAxis.js","webpack://dashkit/./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","webpack://dashkit/./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","webpack://dashkit/./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","webpack://dashkit/./node_modules/@popperjs/core/lib/utils/orderModifiers.js","webpack://dashkit/./node_modules/@popperjs/core/lib/createPopper.js","webpack://dashkit/./node_modules/@popperjs/core/lib/utils/debounce.js","webpack://dashkit/./node_modules/@popperjs/core/lib/utils/mergeByName.js","webpack://dashkit/./node_modules/@popperjs/core/lib/popper.js","webpack://dashkit/./node_modules/@popperjs/core/lib/popper-lite.js","webpack://dashkit/./node_modules/bootstrap/dist/js/bootstrap.esm.js","webpack://dashkit/./node_modules/chart.js/dist/chunks/helpers.segment.js","webpack://dashkit/./node_modules/chart.js/dist/chart.esm.js","webpack://dashkit/./node_modules/choices.js/public/assets/scripts/choices.js","webpack://dashkit/./node_modules/dropzone/dist/dropzone.js","webpack://dashkit/./node_modules/flatpickr/dist/esm/types/options.js","webpack://dashkit/./node_modules/flatpickr/dist/esm/l10n/default.js","webpack://dashkit/./node_modules/flatpickr/dist/esm/utils/index.js","webpack://dashkit/./node_modules/flatpickr/dist/esm/utils/dom.js","webpack://dashkit/./node_modules/flatpickr/dist/esm/utils/formatting.js","webpack://dashkit/./node_modules/flatpickr/dist/esm/utils/dates.js","webpack://dashkit/./node_modules/flatpickr/dist/esm/index.js","webpack://dashkit/./node_modules/flatpickr/dist/esm/utils/polyfills.js","webpack://dashkit/./node_modules/highlight.js/lib/core.js","webpack://dashkit/./node_modules/highlight.js/lib/languages/javascript.js","webpack://dashkit/./node_modules/highlight.js/lib/languages/xml.js","webpack://dashkit/./node_modules/inputmask/dist/inputmask.js","webpack://dashkit/./node_modules/list.js/src/add-async.js","webpack://dashkit/./node_modules/list.js/src/filter.js","webpack://dashkit/./node_modules/list.js/src/fuzzy-search.js","webpack://dashkit/./node_modules/list.js/src/index.js","webpack://dashkit/./node_modules/list.js/src/item.js","webpack://dashkit/./node_modules/list.js/src/pagination.js","webpack://dashkit/./node_modules/list.js/src/parse.js","webpack://dashkit/./node_modules/list.js/src/search.js","webpack://dashkit/./node_modules/list.js/src/sort.js","webpack://dashkit/./node_modules/list.js/src/templater.js","webpack://dashkit/./node_modules/list.js/src/utils/classes.js","webpack://dashkit/./node_modules/list.js/src/utils/events.js","webpack://dashkit/./node_modules/list.js/src/utils/extend.js","webpack://dashkit/./node_modules/list.js/src/utils/fuzzy.js","webpack://dashkit/./node_modules/list.js/src/utils/get-attribute.js","webpack://dashkit/./node_modules/list.js/src/utils/get-by-class.js","webpack://dashkit/./node_modules/list.js/src/utils/index-of.js","webpack://dashkit/./node_modules/list.js/src/utils/to-array.js","webpack://dashkit/./node_modules/list.js/src/utils/to-string.js","webpack://dashkit/./node_modules/quill/dist/quill.js","webpack://dashkit/./node_modules/string-natural-compare/natural-compare.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"Draggable\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Draggable\"] = factory();\n\telse\n\t\troot[\"Draggable\"] = factory();\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 66);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _AbstractEvent = __webpack_require__(64);\n\nvar _AbstractEvent2 = _interopRequireDefault(_AbstractEvent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _AbstractEvent2.default;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _AbstractPlugin = __webpack_require__(60);\n\nvar _AbstractPlugin2 = _interopRequireDefault(_AbstractPlugin);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _AbstractPlugin2.default;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _closest = __webpack_require__(51);\n\nObject.defineProperty(exports, 'closest', {\n  enumerable: true,\n  get: function () {\n    return _interopRequireDefault(_closest).default;\n  }\n});\n\nvar _requestNextAnimationFrame = __webpack_require__(49);\n\nObject.defineProperty(exports, 'requestNextAnimationFrame', {\n  enumerable: true,\n  get: function () {\n    return _interopRequireDefault(_requestNextAnimationFrame).default;\n  }\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _SensorEvent = __webpack_require__(44);\n\nObject.keys(_SensorEvent).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function () {\n      return _SensorEvent[key];\n    }\n  });\n});\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _Sensor = __webpack_require__(47);\n\nvar _Sensor2 = _interopRequireDefault(_Sensor);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Sensor2.default;\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _DragEvent = __webpack_require__(14);\n\nObject.keys(_DragEvent).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function () {\n      return _DragEvent[key];\n    }\n  });\n});\n\nvar _DraggableEvent = __webpack_require__(13);\n\nObject.keys(_DraggableEvent).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function () {\n      return _DraggableEvent[key];\n    }\n  });\n});\n\nvar _Plugins = __webpack_require__(12);\n\nObject.keys(_Plugins).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function () {\n      return _Plugins[key];\n    }\n  });\n});\n\nvar _Sensors = __webpack_require__(6);\n\nObject.keys(_Sensors).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function () {\n      return _Sensors[key];\n    }\n  });\n});\n\nvar _Draggable = __webpack_require__(37);\n\nvar _Draggable2 = _interopRequireDefault(_Draggable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Draggable2.default;\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _Sensor = __webpack_require__(4);\n\nObject.defineProperty(exports, 'Sensor', {\n  enumerable: true,\n  get: function () {\n    return _interopRequireDefault(_Sensor).default;\n  }\n});\n\nvar _MouseSensor = __webpack_require__(46);\n\nObject.defineProperty(exports, 'MouseSensor', {\n  enumerable: true,\n  get: function () {\n    return _interopRequireDefault(_MouseSensor).default;\n  }\n});\n\nvar _TouchSensor = __webpack_require__(43);\n\nObject.defineProperty(exports, 'TouchSensor', {\n  enumerable: true,\n  get: function () {\n    return _interopRequireDefault(_TouchSensor).default;\n  }\n});\n\nvar _DragSensor = __webpack_require__(41);\n\nObject.defineProperty(exports, 'DragSensor', {\n  enumerable: true,\n  get: function () {\n    return _interopRequireDefault(_DragSensor).default;\n  }\n});\n\nvar _ForceTouchSensor = __webpack_require__(39);\n\nObject.defineProperty(exports, 'ForceTouchSensor', {\n  enumerable: true,\n  get: function () {\n    return _interopRequireDefault(_ForceTouchSensor).default;\n  }\n});\n\nvar _SensorEvent = __webpack_require__(3);\n\nObject.keys(_SensorEvent).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function () {\n      return _SensorEvent[key];\n    }\n  });\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _SnappableEvent = __webpack_require__(18);\n\nObject.keys(_SnappableEvent).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function () {\n      return _SnappableEvent[key];\n    }\n  });\n});\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _CollidableEvent = __webpack_require__(23);\n\nObject.keys(_CollidableEvent).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function () {\n      return _CollidableEvent[key];\n    }\n  });\n});\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _SortableEvent = __webpack_require__(27);\n\nObject.keys(_SortableEvent).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function () {\n      return _SortableEvent[key];\n    }\n  });\n});\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _SwappableEvent = __webpack_require__(30);\n\nObject.keys(_SwappableEvent).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function () {\n      return _SwappableEvent[key];\n    }\n  });\n});\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _DroppableEvent = __webpack_require__(33);\n\nObject.keys(_DroppableEvent).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function () {\n      return _DroppableEvent[key];\n    }\n  });\n});\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _Announcement = __webpack_require__(62);\n\nObject.defineProperty(exports, 'Announcement', {\n  enumerable: true,\n  get: function () {\n    return _interopRequireDefault(_Announcement).default;\n  }\n});\nObject.defineProperty(exports, 'defaultAnnouncementOptions', {\n  enumerable: true,\n  get: function () {\n    return _Announcement.defaultOptions;\n  }\n});\n\nvar _Focusable = __webpack_require__(59);\n\nObject.defineProperty(exports, 'Focusable', {\n  enumerable: true,\n  get: function () {\n    return _interopRequireDefault(_Focusable).default;\n  }\n});\n\nvar _Mirror = __webpack_require__(57);\n\nObject.defineProperty(exports, 'Mirror', {\n  enumerable: true,\n  get: function () {\n    return _interopRequireDefault(_Mirror).default;\n  }\n});\nObject.defineProperty(exports, 'defaultMirrorOptions', {\n  enumerable: true,\n  get: function () {\n    return _Mirror.defaultOptions;\n  }\n});\n\nvar _Scrollable = __webpack_require__(53);\n\nObject.defineProperty(exports, 'Scrollable', {\n  enumerable: true,\n  get: function () {\n    return _interopRequireDefault(_Scrollable).default;\n  }\n});\nObject.defineProperty(exports, 'defaultScrollableOptions', {\n  enumerable: true,\n  get: function () {\n    return _Scrollable.defaultOptions;\n  }\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _DraggableEvent = __webpack_require__(63);\n\nObject.keys(_DraggableEvent).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function () {\n      return _DraggableEvent[key];\n    }\n  });\n});\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _DragEvent = __webpack_require__(65);\n\nObject.keys(_DragEvent).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function () {\n      return _DragEvent[key];\n    }\n  });\n});\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.defaultOptions = undefined;\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 _AbstractPlugin = __webpack_require__(1);\n\nvar _AbstractPlugin2 = _interopRequireDefault(_AbstractPlugin);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onSortableSorted = Symbol('onSortableSorted');\n\n/**\n * SwapAnimation default options\n * @property {Object} defaultOptions\n * @property {Number} defaultOptions.duration\n * @property {String} defaultOptions.easingFunction\n * @property {Boolean} defaultOptions.horizontal\n * @type {Object}\n */\nconst defaultOptions = exports.defaultOptions = {\n  duration: 150,\n  easingFunction: 'ease-in-out',\n  horizontal: false\n};\n\n/**\n * SwapAnimation plugin adds swap animations for sortable\n * @class SwapAnimation\n * @module SwapAnimation\n * @extends AbstractPlugin\n */\nclass SwapAnimation extends _AbstractPlugin2.default {\n  /**\n   * SwapAnimation constructor.\n   * @constructs SwapAnimation\n   * @param {Draggable} draggable - Draggable instance\n   */\n  constructor(draggable) {\n    super(draggable);\n\n    /**\n     * SwapAnimation options\n     * @property {Object} options\n     * @property {Number} defaultOptions.duration\n     * @property {String} defaultOptions.easingFunction\n     * @type {Object}\n     */\n    this.options = _extends({}, defaultOptions, this.getOptions());\n\n    /**\n     * Last animation frame\n     * @property {Number} lastAnimationFrame\n     * @type {Number}\n     */\n    this.lastAnimationFrame = null;\n\n    this[onSortableSorted] = this[onSortableSorted].bind(this);\n  }\n\n  /**\n   * Attaches plugins event listeners\n   */\n  attach() {\n    this.draggable.on('sortable:sorted', this[onSortableSorted]);\n  }\n\n  /**\n   * Detaches plugins event listeners\n   */\n  detach() {\n    this.draggable.off('sortable:sorted', this[onSortableSorted]);\n  }\n\n  /**\n   * Returns options passed through draggable\n   * @return {Object}\n   */\n  getOptions() {\n    return this.draggable.options.swapAnimation || {};\n  }\n\n  /**\n   * Sortable sorted handler\n   * @param {SortableSortedEvent} sortableEvent\n   * @private\n   */\n  [onSortableSorted]({ oldIndex, newIndex, dragEvent }) {\n    const { source, over } = dragEvent;\n\n    cancelAnimationFrame(this.lastAnimationFrame);\n\n    // Can be done in a separate frame\n    this.lastAnimationFrame = requestAnimationFrame(() => {\n      if (oldIndex >= newIndex) {\n        animate(source, over, this.options);\n      } else {\n        animate(over, source, this.options);\n      }\n    });\n  }\n}\n\nexports.default = SwapAnimation; /**\n                                  * Animates two elements\n                                  * @param {HTMLElement} from\n                                  * @param {HTMLElement} to\n                                  * @param {Object} options\n                                  * @param {Number} options.duration\n                                  * @param {String} options.easingFunction\n                                  * @param {String} options.horizontal\n                                  * @private\n                                  */\n\nfunction animate(from, to, { duration, easingFunction, horizontal }) {\n  for (const element of [from, to]) {\n    element.style.pointerEvents = 'none';\n  }\n\n  if (horizontal) {\n    const width = from.offsetWidth;\n    from.style.transform = `translate3d(${width}px, 0, 0)`;\n    to.style.transform = `translate3d(-${width}px, 0, 0)`;\n  } else {\n    const height = from.offsetHeight;\n    from.style.transform = `translate3d(0, ${height}px, 0)`;\n    to.style.transform = `translate3d(0, -${height}px, 0)`;\n  }\n\n  requestAnimationFrame(() => {\n    for (const element of [from, to]) {\n      element.addEventListener('transitionend', resetElementOnTransitionEnd);\n      element.style.transition = `transform ${duration}ms ${easingFunction}`;\n      element.style.transform = '';\n    }\n  });\n}\n\n/**\n * Resets animation style properties after animation has completed\n * @param {Event} event\n * @private\n */\nfunction resetElementOnTransitionEnd(event) {\n  event.target.style.transition = '';\n  event.target.style.pointerEvents = '';\n  event.target.removeEventListener('transitionend', resetElementOnTransitionEnd);\n}\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.defaultOptions = undefined;\n\nvar _SwapAnimation = __webpack_require__(15);\n\nvar _SwapAnimation2 = _interopRequireDefault(_SwapAnimation);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _SwapAnimation2.default;\nexports.defaultOptions = _SwapAnimation.defaultOptions;\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _AbstractPlugin = __webpack_require__(1);\n\nvar _AbstractPlugin2 = _interopRequireDefault(_AbstractPlugin);\n\nvar _SnappableEvent = __webpack_require__(7);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onDragStart = Symbol('onDragStart');\nconst onDragStop = Symbol('onDragStop');\nconst onDragOver = Symbol('onDragOver');\nconst onDragOut = Symbol('onDragOut');\nconst onMirrorCreated = Symbol('onMirrorCreated');\nconst onMirrorDestroy = Symbol('onMirrorDestroy');\n\n/**\n * Snappable plugin which snaps draggable elements into place\n * @class Snappable\n * @module Snappable\n * @extends AbstractPlugin\n */\nclass Snappable extends _AbstractPlugin2.default {\n  /**\n   * Snappable constructor.\n   * @constructs Snappable\n   * @param {Draggable} draggable - Draggable instance\n   */\n  constructor(draggable) {\n    super(draggable);\n\n    /**\n     * Keeps track of the first source element\n     * @property {HTMLElement|null} firstSource\n     */\n    this.firstSource = null;\n\n    /**\n     * Keeps track of the mirror element\n     * @property {HTMLElement} mirror\n     */\n    this.mirror = null;\n\n    this[onDragStart] = this[onDragStart].bind(this);\n    this[onDragStop] = this[onDragStop].bind(this);\n    this[onDragOver] = this[onDragOver].bind(this);\n    this[onDragOut] = this[onDragOut].bind(this);\n    this[onMirrorCreated] = this[onMirrorCreated].bind(this);\n    this[onMirrorDestroy] = this[onMirrorDestroy].bind(this);\n  }\n\n  /**\n   * Attaches plugins event listeners\n   */\n  attach() {\n    this.draggable.on('drag:start', this[onDragStart]).on('drag:stop', this[onDragStop]).on('drag:over', this[onDragOver]).on('drag:out', this[onDragOut]).on('droppable:over', this[onDragOver]).on('droppable:out', this[onDragOut]).on('mirror:created', this[onMirrorCreated]).on('mirror:destroy', this[onMirrorDestroy]);\n  }\n\n  /**\n   * Detaches plugins event listeners\n   */\n  detach() {\n    this.draggable.off('drag:start', this[onDragStart]).off('drag:stop', this[onDragStop]).off('drag:over', this[onDragOver]).off('drag:out', this[onDragOut]).off('droppable:over', this[onDragOver]).off('droppable:out', this[onDragOut]).off('mirror:created', this[onMirrorCreated]).off('mirror:destroy', this[onMirrorDestroy]);\n  }\n\n  /**\n   * Drag start handler\n   * @private\n   * @param {DragStartEvent} event - Drag start event\n   */\n  [onDragStart](event) {\n    if (event.canceled()) {\n      return;\n    }\n\n    this.firstSource = event.source;\n  }\n\n  /**\n   * Drag stop handler\n   * @private\n   * @param {DragStopEvent} event - Drag stop event\n   */\n  [onDragStop]() {\n    this.firstSource = null;\n  }\n\n  /**\n   * Drag over handler\n   * @private\n   * @param {DragOverEvent|DroppableOverEvent} event - Drag over event\n   */\n  [onDragOver](event) {\n    if (event.canceled()) {\n      return;\n    }\n\n    const source = event.source || event.dragEvent.source;\n\n    if (source === this.firstSource) {\n      this.firstSource = null;\n      return;\n    }\n\n    const snapInEvent = new _SnappableEvent.SnapInEvent({\n      dragEvent: event,\n      snappable: event.over || event.droppable\n    });\n\n    this.draggable.trigger(snapInEvent);\n\n    if (snapInEvent.canceled()) {\n      return;\n    }\n\n    if (this.mirror) {\n      this.mirror.style.display = 'none';\n    }\n\n    source.classList.remove(this.draggable.getClassNameFor('source:dragging'));\n    source.classList.add(this.draggable.getClassNameFor('source:placed'));\n\n    // Need to cancel this in drag out\n    setTimeout(() => {\n      source.classList.remove(this.draggable.getClassNameFor('source:placed'));\n    }, this.draggable.options.placedTimeout);\n  }\n\n  /**\n   * Drag out handler\n   * @private\n   * @param {DragOutEvent|DroppableOutEvent} event - Drag out event\n   */\n  [onDragOut](event) {\n    if (event.canceled()) {\n      return;\n    }\n\n    const source = event.source || event.dragEvent.source;\n\n    const snapOutEvent = new _SnappableEvent.SnapOutEvent({\n      dragEvent: event,\n      snappable: event.over || event.droppable\n    });\n\n    this.draggable.trigger(snapOutEvent);\n\n    if (snapOutEvent.canceled()) {\n      return;\n    }\n\n    if (this.mirror) {\n      this.mirror.style.display = '';\n    }\n\n    source.classList.add(this.draggable.getClassNameFor('source:dragging'));\n  }\n\n  /**\n   * Mirror created handler\n   * @param {MirrorCreatedEvent} mirrorEvent\n   * @private\n   */\n  [onMirrorCreated]({ mirror }) {\n    this.mirror = mirror;\n  }\n\n  /**\n   * Mirror destroy handler\n   * @param {MirrorDestroyEvent} mirrorEvent\n   * @private\n   */\n  [onMirrorDestroy]() {\n    this.mirror = null;\n  }\n}\nexports.default = Snappable;\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.SnapOutEvent = exports.SnapInEvent = exports.SnapEvent = undefined;\n\nvar _AbstractEvent = __webpack_require__(0);\n\nvar _AbstractEvent2 = _interopRequireDefault(_AbstractEvent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Base snap event\n * @class SnapEvent\n * @module SnapEvent\n * @extends AbstractEvent\n */\nclass SnapEvent extends _AbstractEvent2.default {\n\n  /**\n   * Drag event that triggered this snap event\n   * @property dragEvent\n   * @type {DragEvent}\n   * @readonly\n   */\n  get dragEvent() {\n    return this.data.dragEvent;\n  }\n\n  /**\n   * Snappable element\n   * @property snappable\n   * @type {HTMLElement}\n   * @readonly\n   */\n  get snappable() {\n    return this.data.snappable;\n  }\n}\n\nexports.SnapEvent = SnapEvent; /**\n                                * Snap in event\n                                * @class SnapInEvent\n                                * @module SnapInEvent\n                                * @extends SnapEvent\n                                */\n\nSnapEvent.type = 'snap';\nclass SnapInEvent extends SnapEvent {}\n\nexports.SnapInEvent = SnapInEvent; /**\n                                    * Snap out event\n                                    * @class SnapOutEvent\n                                    * @module SnapOutEvent\n                                    * @extends SnapEvent\n                                    */\n\nSnapInEvent.type = 'snap:in';\nSnapInEvent.cancelable = true;\nclass SnapOutEvent extends SnapEvent {}\nexports.SnapOutEvent = SnapOutEvent;\nSnapOutEvent.type = 'snap:out';\nSnapOutEvent.cancelable = true;\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _SnappableEvent = __webpack_require__(7);\n\nObject.keys(_SnappableEvent).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function () {\n      return _SnappableEvent[key];\n    }\n  });\n});\n\nvar _Snappable = __webpack_require__(17);\n\nvar _Snappable2 = _interopRequireDefault(_Snappable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Snappable2.default;\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.defaultOptions = undefined;\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 _AbstractPlugin = __webpack_require__(1);\n\nvar _AbstractPlugin2 = _interopRequireDefault(_AbstractPlugin);\n\nvar _utils = __webpack_require__(2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onMirrorCreated = Symbol('onMirrorCreated');\nconst onMirrorDestroy = Symbol('onMirrorDestroy');\nconst onDragOver = Symbol('onDragOver');\nconst resize = Symbol('resize');\n\n/**\n * ResizeMirror default options\n * @property {Object} defaultOptions\n * @type {Object}\n */\nconst defaultOptions = exports.defaultOptions = {};\n\n/**\n * The ResizeMirror plugin resizes the mirror element to the dimensions of the draggable element that the mirror is hovering over\n * @class ResizeMirror\n * @module ResizeMirror\n * @extends AbstractPlugin\n */\nclass ResizeMirror extends _AbstractPlugin2.default {\n  /**\n   * ResizeMirror constructor.\n   * @constructs ResizeMirror\n   * @param {Draggable} draggable - Draggable instance\n   */\n  constructor(draggable) {\n    super(draggable);\n\n    /**\n     * ResizeMirror options\n     * @property {Object} options\n     * @type {Object}\n     */\n    this.options = _extends({}, defaultOptions, this.getOptions());\n\n    /**\n     * ResizeMirror remembers the last width when resizing the mirror\n     * to avoid additional writes to the DOM\n     * @property {number} lastWidth\n     */\n    this.lastWidth = 0;\n\n    /**\n     * ResizeMirror remembers the last height when resizing the mirror\n     * to avoid additional writes to the DOM\n     * @property {number} lastHeight\n     */\n    this.lastHeight = 0;\n\n    /**\n     * Keeps track of the mirror element\n     * @property {HTMLElement} mirror\n     */\n    this.mirror = null;\n\n    this[onMirrorCreated] = this[onMirrorCreated].bind(this);\n    this[onMirrorDestroy] = this[onMirrorDestroy].bind(this);\n    this[onDragOver] = this[onDragOver].bind(this);\n  }\n\n  /**\n   * Attaches plugins event listeners\n   */\n  attach() {\n    this.draggable.on('mirror:created', this[onMirrorCreated]).on('drag:over', this[onDragOver]).on('drag:over:container', this[onDragOver]);\n  }\n\n  /**\n   * Detaches plugins event listeners\n   */\n  detach() {\n    this.draggable.off('mirror:created', this[onMirrorCreated]).off('mirror:destroy', this[onMirrorDestroy]).off('drag:over', this[onDragOver]).off('drag:over:container', this[onDragOver]);\n  }\n\n  /**\n   * Returns options passed through draggable\n   * @return {Object}\n   */\n  getOptions() {\n    return this.draggable.options.resizeMirror || {};\n  }\n\n  /**\n   * Mirror created handler\n   * @param {MirrorCreatedEvent} mirrorEvent\n   * @private\n   */\n  [onMirrorCreated]({ mirror }) {\n    this.mirror = mirror;\n  }\n\n  /**\n   * Mirror destroy handler\n   * @param {MirrorDestroyEvent} mirrorEvent\n   * @private\n   */\n  [onMirrorDestroy]() {\n    this.mirror = null;\n  }\n\n  /**\n   * Drag over handler\n   * @param {DragOverEvent | DragOverContainer} dragEvent\n   * @private\n   */\n  [onDragOver](dragEvent) {\n    this[resize](dragEvent);\n  }\n\n  /**\n   * Resize function for\n   * @param {DragOverEvent | DragOverContainer} dragEvent\n   * @private\n   */\n  [resize]({ overContainer, over }) {\n    requestAnimationFrame(() => {\n      if (this.mirror.parentNode !== overContainer) {\n        overContainer.appendChild(this.mirror);\n      }\n\n      const overElement = over || this.draggable.getDraggableElementsForContainer(overContainer)[0];\n\n      if (!overElement) {\n        return;\n      }\n\n      (0, _utils.requestNextAnimationFrame)(() => {\n        const overRect = overElement.getBoundingClientRect();\n\n        if (this.lastHeight === overRect.height && this.lastWidth === overRect.width) {\n          return;\n        }\n\n        this.mirror.style.width = `${overRect.width}px`;\n        this.mirror.style.height = `${overRect.height}px`;\n\n        this.lastWidth = overRect.width;\n        this.lastHeight = overRect.height;\n      });\n    });\n  }\n}\nexports.default = ResizeMirror;\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.defaultOptions = undefined;\n\nvar _ResizeMirror = __webpack_require__(20);\n\nvar _ResizeMirror2 = _interopRequireDefault(_ResizeMirror);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _ResizeMirror2.default;\nexports.defaultOptions = _ResizeMirror.defaultOptions;\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _AbstractPlugin = __webpack_require__(1);\n\nvar _AbstractPlugin2 = _interopRequireDefault(_AbstractPlugin);\n\nvar _utils = __webpack_require__(2);\n\nvar _CollidableEvent = __webpack_require__(8);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onDragMove = Symbol('onDragMove');\nconst onDragStop = Symbol('onDragStop');\nconst onRequestAnimationFrame = Symbol('onRequestAnimationFrame');\n\n/**\n * Collidable plugin which detects colliding elements while dragging\n * @class Collidable\n * @module Collidable\n * @extends AbstractPlugin\n */\nclass Collidable extends _AbstractPlugin2.default {\n  /**\n   * Collidable constructor.\n   * @constructs Collidable\n   * @param {Draggable} draggable - Draggable instance\n   */\n  constructor(draggable) {\n    super(draggable);\n\n    /**\n     * Keeps track of currently colliding elements\n     * @property {HTMLElement|null} currentlyCollidingElement\n     * @type {HTMLElement|null}\n     */\n    this.currentlyCollidingElement = null;\n\n    /**\n     * Keeps track of currently colliding elements\n     * @property {HTMLElement|null} lastCollidingElement\n     * @type {HTMLElement|null}\n     */\n    this.lastCollidingElement = null;\n\n    /**\n     * Animation frame for finding colliding elements\n     * @property {Number|null} currentAnimationFrame\n     * @type {Number|null}\n     */\n    this.currentAnimationFrame = null;\n\n    this[onDragMove] = this[onDragMove].bind(this);\n    this[onDragStop] = this[onDragStop].bind(this);\n    this[onRequestAnimationFrame] = this[onRequestAnimationFrame].bind(this);\n  }\n\n  /**\n   * Attaches plugins event listeners\n   */\n  attach() {\n    this.draggable.on('drag:move', this[onDragMove]).on('drag:stop', this[onDragStop]);\n  }\n\n  /**\n   * Detaches plugins event listeners\n   */\n  detach() {\n    this.draggable.off('drag:move', this[onDragMove]).off('drag:stop', this[onDragStop]);\n  }\n\n  /**\n   * Returns current collidables based on `collidables` option\n   * @return {HTMLElement[]}\n   */\n  getCollidables() {\n    const collidables = this.draggable.options.collidables;\n\n    if (typeof collidables === 'string') {\n      return Array.prototype.slice.call(document.querySelectorAll(collidables));\n    } else if (collidables instanceof NodeList || collidables instanceof Array) {\n      return Array.prototype.slice.call(collidables);\n    } else if (collidables instanceof HTMLElement) {\n      return [collidables];\n    } else if (typeof collidables === 'function') {\n      return collidables();\n    } else {\n      return [];\n    }\n  }\n\n  /**\n   * Drag move handler\n   * @private\n   * @param {DragMoveEvent} event - Drag move event\n   */\n  [onDragMove](event) {\n    const target = event.sensorEvent.target;\n\n    this.currentAnimationFrame = requestAnimationFrame(this[onRequestAnimationFrame](target));\n\n    if (this.currentlyCollidingElement) {\n      event.cancel();\n    }\n\n    const collidableInEvent = new _CollidableEvent.CollidableInEvent({\n      dragEvent: event,\n      collidingElement: this.currentlyCollidingElement\n    });\n\n    const collidableOutEvent = new _CollidableEvent.CollidableOutEvent({\n      dragEvent: event,\n      collidingElement: this.lastCollidingElement\n    });\n\n    const enteringCollidable = Boolean(this.currentlyCollidingElement && this.lastCollidingElement !== this.currentlyCollidingElement);\n    const leavingCollidable = Boolean(!this.currentlyCollidingElement && this.lastCollidingElement);\n\n    if (enteringCollidable) {\n      if (this.lastCollidingElement) {\n        this.draggable.trigger(collidableOutEvent);\n      }\n\n      this.draggable.trigger(collidableInEvent);\n    } else if (leavingCollidable) {\n      this.draggable.trigger(collidableOutEvent);\n    }\n\n    this.lastCollidingElement = this.currentlyCollidingElement;\n  }\n\n  /**\n   * Drag stop handler\n   * @private\n   * @param {DragStopEvent} event - Drag stop event\n   */\n  [onDragStop](event) {\n    const lastCollidingElement = this.currentlyCollidingElement || this.lastCollidingElement;\n    const collidableOutEvent = new _CollidableEvent.CollidableOutEvent({\n      dragEvent: event,\n      collidingElement: lastCollidingElement\n    });\n\n    if (lastCollidingElement) {\n      this.draggable.trigger(collidableOutEvent);\n    }\n\n    this.lastCollidingElement = null;\n    this.currentlyCollidingElement = null;\n  }\n\n  /**\n   * Animation frame function\n   * @private\n   * @param {HTMLElement} target - Current move target\n   * @return {Function}\n   */\n  [onRequestAnimationFrame](target) {\n    return () => {\n      const collidables = this.getCollidables();\n      this.currentlyCollidingElement = (0, _utils.closest)(target, element => collidables.includes(element));\n    };\n  }\n}\nexports.default = Collidable;\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.CollidableOutEvent = exports.CollidableInEvent = exports.CollidableEvent = undefined;\n\nvar _AbstractEvent = __webpack_require__(0);\n\nvar _AbstractEvent2 = _interopRequireDefault(_AbstractEvent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Base collidable event\n * @class CollidableEvent\n * @module CollidableEvent\n * @extends AbstractEvent\n */\nclass CollidableEvent extends _AbstractEvent2.default {\n\n  /**\n   * Drag event that triggered this colliable event\n   * @property dragEvent\n   * @type {DragEvent}\n   * @readonly\n   */\n  get dragEvent() {\n    return this.data.dragEvent;\n  }\n}\n\nexports.CollidableEvent = CollidableEvent; /**\n                                            * Collidable in event\n                                            * @class CollidableInEvent\n                                            * @module CollidableInEvent\n                                            * @extends CollidableEvent\n                                            */\n\nCollidableEvent.type = 'collidable';\nclass CollidableInEvent extends CollidableEvent {\n\n  /**\n   * Element you are currently colliding with\n   * @property collidingElement\n   * @type {HTMLElement}\n   * @readonly\n   */\n  get collidingElement() {\n    return this.data.collidingElement;\n  }\n}\n\nexports.CollidableInEvent = CollidableInEvent; /**\n                                                * Collidable out event\n                                                * @class CollidableOutEvent\n                                                * @module CollidableOutEvent\n                                                * @extends CollidableEvent\n                                                */\n\nCollidableInEvent.type = 'collidable:in';\nclass CollidableOutEvent extends CollidableEvent {\n\n  /**\n   * Element you were previously colliding with\n   * @property collidingElement\n   * @type {HTMLElement}\n   * @readonly\n   */\n  get collidingElement() {\n    return this.data.collidingElement;\n  }\n}\nexports.CollidableOutEvent = CollidableOutEvent;\nCollidableOutEvent.type = 'collidable:out';\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _CollidableEvent = __webpack_require__(8);\n\nObject.keys(_CollidableEvent).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function () {\n      return _CollidableEvent[key];\n    }\n  });\n});\n\nvar _Collidable = __webpack_require__(22);\n\nvar _Collidable2 = _interopRequireDefault(_Collidable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Collidable2.default;\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _Collidable = __webpack_require__(24);\n\nObject.defineProperty(exports, 'Collidable', {\n  enumerable: true,\n  get: function () {\n    return _interopRequireDefault(_Collidable).default;\n  }\n});\n\nvar _ResizeMirror = __webpack_require__(21);\n\nObject.defineProperty(exports, 'ResizeMirror', {\n  enumerable: true,\n  get: function () {\n    return _interopRequireDefault(_ResizeMirror).default;\n  }\n});\nObject.defineProperty(exports, 'defaultResizeMirrorOptions', {\n  enumerable: true,\n  get: function () {\n    return _ResizeMirror.defaultOptions;\n  }\n});\n\nvar _Snappable = __webpack_require__(19);\n\nObject.defineProperty(exports, 'Snappable', {\n  enumerable: true,\n  get: function () {\n    return _interopRequireDefault(_Snappable).default;\n  }\n});\n\nvar _SwapAnimation = __webpack_require__(16);\n\nObject.defineProperty(exports, 'SwapAnimation', {\n  enumerable: true,\n  get: function () {\n    return _interopRequireDefault(_SwapAnimation).default;\n  }\n});\nObject.defineProperty(exports, 'defaultSwapAnimationOptions', {\n  enumerable: true,\n  get: function () {\n    return _SwapAnimation.defaultOptions;\n  }\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\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 _Draggable = __webpack_require__(5);\n\nvar _Draggable2 = _interopRequireDefault(_Draggable);\n\nvar _SortableEvent = __webpack_require__(9);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onDragStart = Symbol('onDragStart');\nconst onDragOverContainer = Symbol('onDragOverContainer');\nconst onDragOver = Symbol('onDragOver');\nconst onDragStop = Symbol('onDragStop');\n\n/**\n * Returns announcement message when a Draggable element has been sorted with another Draggable element\n * or moved into a new container\n * @param {SortableSortedEvent} sortableEvent\n * @return {String}\n */\nfunction onSortableSortedDefaultAnnouncement({ dragEvent }) {\n  const sourceText = dragEvent.source.textContent.trim() || dragEvent.source.id || 'sortable element';\n\n  if (dragEvent.over) {\n    const overText = dragEvent.over.textContent.trim() || dragEvent.over.id || 'sortable element';\n    const isFollowing = dragEvent.source.compareDocumentPosition(dragEvent.over) & Node.DOCUMENT_POSITION_FOLLOWING;\n\n    if (isFollowing) {\n      return `Placed ${sourceText} after ${overText}`;\n    } else {\n      return `Placed ${sourceText} before ${overText}`;\n    }\n  } else {\n    // need to figure out how to compute container name\n    return `Placed ${sourceText} into a different container`;\n  }\n}\n\n/**\n * @const {Object} defaultAnnouncements\n * @const {Function} defaultAnnouncements['sortable:sorted']\n */\nconst defaultAnnouncements = {\n  'sortable:sorted': onSortableSortedDefaultAnnouncement\n};\n\n/**\n * Sortable is built on top of Draggable and allows sorting of draggable elements. Sortable will keep\n * track of the original index and emits the new index as you drag over draggable elements.\n * @class Sortable\n * @module Sortable\n * @extends Draggable\n */\nclass Sortable extends _Draggable2.default {\n  /**\n   * Sortable constructor.\n   * @constructs Sortable\n   * @param {HTMLElement[]|NodeList|HTMLElement} containers - Sortable containers\n   * @param {Object} options - Options for Sortable\n   */\n  constructor(containers = [], options = {}) {\n    super(containers, _extends({}, options, {\n      announcements: _extends({}, defaultAnnouncements, options.announcements || {})\n    }));\n\n    /**\n     * start index of source on drag start\n     * @property startIndex\n     * @type {Number}\n     */\n    this.startIndex = null;\n\n    /**\n     * start container on drag start\n     * @property startContainer\n     * @type {HTMLElement}\n     * @default null\n     */\n    this.startContainer = null;\n\n    this[onDragStart] = this[onDragStart].bind(this);\n    this[onDragOverContainer] = this[onDragOverContainer].bind(this);\n    this[onDragOver] = this[onDragOver].bind(this);\n    this[onDragStop] = this[onDragStop].bind(this);\n\n    this.on('drag:start', this[onDragStart]).on('drag:over:container', this[onDragOverContainer]).on('drag:over', this[onDragOver]).on('drag:stop', this[onDragStop]);\n  }\n\n  /**\n   * Destroys Sortable instance.\n   */\n  destroy() {\n    super.destroy();\n\n    this.off('drag:start', this[onDragStart]).off('drag:over:container', this[onDragOverContainer]).off('drag:over', this[onDragOver]).off('drag:stop', this[onDragStop]);\n  }\n\n  /**\n   * Returns true index of element within its container during drag operation, i.e. excluding mirror and original source\n   * @param {HTMLElement} element - An element\n   * @return {Number}\n   */\n  index(element) {\n    return this.getDraggableElementsForContainer(element.parentNode).indexOf(element);\n  }\n\n  /**\n   * Drag start handler\n   * @private\n   * @param {DragStartEvent} event - Drag start event\n   */\n  [onDragStart](event) {\n    this.startContainer = event.source.parentNode;\n    this.startIndex = this.index(event.source);\n\n    const sortableStartEvent = new _SortableEvent.SortableStartEvent({\n      dragEvent: event,\n      startIndex: this.startIndex,\n      startContainer: this.startContainer\n    });\n\n    this.trigger(sortableStartEvent);\n\n    if (sortableStartEvent.canceled()) {\n      event.cancel();\n    }\n  }\n\n  /**\n   * Drag over container handler\n   * @private\n   * @param {DragOverContainerEvent} event - Drag over container event\n   */\n  [onDragOverContainer](event) {\n    if (event.canceled()) {\n      return;\n    }\n\n    const { source, over, overContainer } = event;\n    const oldIndex = this.index(source);\n\n    const sortableSortEvent = new _SortableEvent.SortableSortEvent({\n      dragEvent: event,\n      currentIndex: oldIndex,\n      source,\n      over\n    });\n\n    this.trigger(sortableSortEvent);\n\n    if (sortableSortEvent.canceled()) {\n      return;\n    }\n\n    const children = this.getDraggableElementsForContainer(overContainer);\n    const moves = move({ source, over, overContainer, children });\n\n    if (!moves) {\n      return;\n    }\n\n    const { oldContainer, newContainer } = moves;\n    const newIndex = this.index(event.source);\n\n    const sortableSortedEvent = new _SortableEvent.SortableSortedEvent({\n      dragEvent: event,\n      oldIndex,\n      newIndex,\n      oldContainer,\n      newContainer\n    });\n\n    this.trigger(sortableSortedEvent);\n  }\n\n  /**\n   * Drag over handler\n   * @private\n   * @param {DragOverEvent} event - Drag over event\n   */\n  [onDragOver](event) {\n    if (event.over === event.originalSource || event.over === event.source) {\n      return;\n    }\n\n    const { source, over, overContainer } = event;\n    const oldIndex = this.index(source);\n\n    const sortableSortEvent = new _SortableEvent.SortableSortEvent({\n      dragEvent: event,\n      currentIndex: oldIndex,\n      source,\n      over\n    });\n\n    this.trigger(sortableSortEvent);\n\n    if (sortableSortEvent.canceled()) {\n      return;\n    }\n\n    const children = this.getDraggableElementsForContainer(overContainer);\n    const moves = move({ source, over, overContainer, children });\n\n    if (!moves) {\n      return;\n    }\n\n    const { oldContainer, newContainer } = moves;\n    const newIndex = this.index(source);\n\n    const sortableSortedEvent = new _SortableEvent.SortableSortedEvent({\n      dragEvent: event,\n      oldIndex,\n      newIndex,\n      oldContainer,\n      newContainer\n    });\n\n    this.trigger(sortableSortedEvent);\n  }\n\n  /**\n   * Drag stop handler\n   * @private\n   * @param {DragStopEvent} event - Drag stop event\n   */\n  [onDragStop](event) {\n    const sortableStopEvent = new _SortableEvent.SortableStopEvent({\n      dragEvent: event,\n      oldIndex: this.startIndex,\n      newIndex: this.index(event.source),\n      oldContainer: this.startContainer,\n      newContainer: event.source.parentNode\n    });\n\n    this.trigger(sortableStopEvent);\n\n    this.startIndex = null;\n    this.startContainer = null;\n  }\n}\n\nexports.default = Sortable;\nfunction index(element) {\n  return Array.prototype.indexOf.call(element.parentNode.children, element);\n}\n\nfunction move({ source, over, overContainer, children }) {\n  const emptyOverContainer = !children.length;\n  const differentContainer = source.parentNode !== overContainer;\n  const sameContainer = over && !differentContainer;\n\n  if (emptyOverContainer) {\n    return moveInsideEmptyContainer(source, overContainer);\n  } else if (sameContainer) {\n    return moveWithinContainer(source, over);\n  } else if (differentContainer) {\n    return moveOutsideContainer(source, over, overContainer);\n  } else {\n    return null;\n  }\n}\n\nfunction moveInsideEmptyContainer(source, overContainer) {\n  const oldContainer = source.parentNode;\n\n  overContainer.appendChild(source);\n\n  return { oldContainer, newContainer: overContainer };\n}\n\nfunction moveWithinContainer(source, over) {\n  const oldIndex = index(source);\n  const newIndex = index(over);\n\n  if (oldIndex < newIndex) {\n    source.parentNode.insertBefore(source, over.nextElementSibling);\n  } else {\n    source.parentNode.insertBefore(source, over);\n  }\n\n  return { oldContainer: source.parentNode, newContainer: source.parentNode };\n}\n\nfunction moveOutsideContainer(source, over, overContainer) {\n  const oldContainer = source.parentNode;\n\n  if (over) {\n    over.parentNode.insertBefore(source, over);\n  } else {\n    // need to figure out proper position\n    overContainer.appendChild(source);\n  }\n\n  return { oldContainer, newContainer: source.parentNode };\n}\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.SortableStopEvent = exports.SortableSortedEvent = exports.SortableSortEvent = exports.SortableStartEvent = exports.SortableEvent = undefined;\n\nvar _AbstractEvent = __webpack_require__(0);\n\nvar _AbstractEvent2 = _interopRequireDefault(_AbstractEvent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Base sortable event\n * @class SortableEvent\n * @module SortableEvent\n * @extends AbstractEvent\n */\nclass SortableEvent extends _AbstractEvent2.default {\n\n  /**\n   * Original drag event that triggered this sortable event\n   * @property dragEvent\n   * @type {DragEvent}\n   * @readonly\n   */\n  get dragEvent() {\n    return this.data.dragEvent;\n  }\n}\n\nexports.SortableEvent = SortableEvent; /**\n                                        * Sortable start event\n                                        * @class SortableStartEvent\n                                        * @module SortableStartEvent\n                                        * @extends SortableEvent\n                                        */\n\nSortableEvent.type = 'sortable';\nclass SortableStartEvent extends SortableEvent {\n\n  /**\n   * Start index of source on sortable start\n   * @property startIndex\n   * @type {Number}\n   * @readonly\n   */\n  get startIndex() {\n    return this.data.startIndex;\n  }\n\n  /**\n   * Start container on sortable start\n   * @property startContainer\n   * @type {HTMLElement}\n   * @readonly\n   */\n  get startContainer() {\n    return this.data.startContainer;\n  }\n}\n\nexports.SortableStartEvent = SortableStartEvent; /**\n                                                  * Sortable sort event\n                                                  * @class SortableSortEvent\n                                                  * @module SortableSortEvent\n                                                  * @extends SortableEvent\n                                                  */\n\nSortableStartEvent.type = 'sortable:start';\nSortableStartEvent.cancelable = true;\nclass SortableSortEvent extends SortableEvent {\n\n  /**\n   * Index of current draggable element\n   * @property currentIndex\n   * @type {Number}\n   * @readonly\n   */\n  get currentIndex() {\n    return this.data.currentIndex;\n  }\n\n  /**\n   * Draggable element you are hovering over\n   * @property over\n   * @type {HTMLElement}\n   * @readonly\n   */\n  get over() {\n    return this.data.oldIndex;\n  }\n\n  /**\n   * Draggable container element you are hovering over\n   * @property overContainer\n   * @type {HTMLElement}\n   * @readonly\n   */\n  get overContainer() {\n    return this.data.newIndex;\n  }\n}\n\nexports.SortableSortEvent = SortableSortEvent; /**\n                                                * Sortable sorted event\n                                                * @class SortableSortedEvent\n                                                * @module SortableSortedEvent\n                                                * @extends SortableEvent\n                                                */\n\nSortableSortEvent.type = 'sortable:sort';\nSortableSortEvent.cancelable = true;\nclass SortableSortedEvent extends SortableEvent {\n\n  /**\n   * Index of last sorted event\n   * @property oldIndex\n   * @type {Number}\n   * @readonly\n   */\n  get oldIndex() {\n    return this.data.oldIndex;\n  }\n\n  /**\n   * New index of this sorted event\n   * @property newIndex\n   * @type {Number}\n   * @readonly\n   */\n  get newIndex() {\n    return this.data.newIndex;\n  }\n\n  /**\n   * Old container of draggable element\n   * @property oldContainer\n   * @type {HTMLElement}\n   * @readonly\n   */\n  get oldContainer() {\n    return this.data.oldContainer;\n  }\n\n  /**\n   * New container of draggable element\n   * @property newContainer\n   * @type {HTMLElement}\n   * @readonly\n   */\n  get newContainer() {\n    return this.data.newContainer;\n  }\n}\n\nexports.SortableSortedEvent = SortableSortedEvent; /**\n                                                    * Sortable stop event\n                                                    * @class SortableStopEvent\n                                                    * @module SortableStopEvent\n                                                    * @extends SortableEvent\n                                                    */\n\nSortableSortedEvent.type = 'sortable:sorted';\nclass SortableStopEvent extends SortableEvent {\n\n  /**\n   * Original index on sortable start\n   * @property oldIndex\n   * @type {Number}\n   * @readonly\n   */\n  get oldIndex() {\n    return this.data.oldIndex;\n  }\n\n  /**\n   * New index of draggable element\n   * @property newIndex\n   * @type {Number}\n   * @readonly\n   */\n  get newIndex() {\n    return this.data.newIndex;\n  }\n\n  /**\n   * Original container of draggable element\n   * @property oldContainer\n   * @type {HTMLElement}\n   * @readonly\n   */\n  get oldContainer() {\n    return this.data.oldContainer;\n  }\n\n  /**\n   * New container of draggable element\n   * @property newContainer\n   * @type {HTMLElement}\n   * @readonly\n   */\n  get newContainer() {\n    return this.data.newContainer;\n  }\n}\nexports.SortableStopEvent = SortableStopEvent;\nSortableStopEvent.type = 'sortable:stop';\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _SortableEvent = __webpack_require__(9);\n\nObject.keys(_SortableEvent).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function () {\n      return _SortableEvent[key];\n    }\n  });\n});\n\nvar _Sortable = __webpack_require__(26);\n\nvar _Sortable2 = _interopRequireDefault(_Sortable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Sortable2.default;\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\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 _Draggable = __webpack_require__(5);\n\nvar _Draggable2 = _interopRequireDefault(_Draggable);\n\nvar _SwappableEvent = __webpack_require__(10);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onDragStart = Symbol('onDragStart');\nconst onDragOver = Symbol('onDragOver');\nconst onDragStop = Symbol('onDragStop');\n\n/**\n * Returns an announcement message when the Draggable element is swapped with another draggable element\n * @param {SwappableSwappedEvent} swappableEvent\n * @return {String}\n */\nfunction onSwappableSwappedDefaultAnnouncement({ dragEvent, swappedElement }) {\n  const sourceText = dragEvent.source.textContent.trim() || dragEvent.source.id || 'swappable element';\n  const overText = swappedElement.textContent.trim() || swappedElement.id || 'swappable element';\n\n  return `Swapped ${sourceText} with ${overText}`;\n}\n\n/**\n * @const {Object} defaultAnnouncements\n * @const {Function} defaultAnnouncements['swappabled:swapped']\n */\nconst defaultAnnouncements = {\n  'swappabled:swapped': onSwappableSwappedDefaultAnnouncement\n};\n\n/**\n * Swappable is built on top of Draggable and allows swapping of draggable elements.\n * Order is irrelevant to Swappable.\n * @class Swappable\n * @module Swappable\n * @extends Draggable\n */\nclass Swappable extends _Draggable2.default {\n  /**\n   * Swappable constructor.\n   * @constructs Swappable\n   * @param {HTMLElement[]|NodeList|HTMLElement} containers - Swappable containers\n   * @param {Object} options - Options for Swappable\n   */\n  constructor(containers = [], options = {}) {\n    super(containers, _extends({}, options, {\n      announcements: _extends({}, defaultAnnouncements, options.announcements || {})\n    }));\n\n    /**\n     * Last draggable element that was dragged over\n     * @property lastOver\n     * @type {HTMLElement}\n     */\n    this.lastOver = null;\n\n    this[onDragStart] = this[onDragStart].bind(this);\n    this[onDragOver] = this[onDragOver].bind(this);\n    this[onDragStop] = this[onDragStop].bind(this);\n\n    this.on('drag:start', this[onDragStart]).on('drag:over', this[onDragOver]).on('drag:stop', this[onDragStop]);\n  }\n\n  /**\n   * Destroys Swappable instance.\n   */\n  destroy() {\n    super.destroy();\n\n    this.off('drag:start', this._onDragStart).off('drag:over', this._onDragOver).off('drag:stop', this._onDragStop);\n  }\n\n  /**\n   * Drag start handler\n   * @private\n   * @param {DragStartEvent} event - Drag start event\n   */\n  [onDragStart](event) {\n    const swappableStartEvent = new _SwappableEvent.SwappableStartEvent({\n      dragEvent: event\n    });\n\n    this.trigger(swappableStartEvent);\n\n    if (swappableStartEvent.canceled()) {\n      event.cancel();\n    }\n  }\n\n  /**\n   * Drag over handler\n   * @private\n   * @param {DragOverEvent} event - Drag over event\n   */\n  [onDragOver](event) {\n    if (event.over === event.originalSource || event.over === event.source || event.canceled()) {\n      return;\n    }\n\n    const swappableSwapEvent = new _SwappableEvent.SwappableSwapEvent({\n      dragEvent: event,\n      over: event.over,\n      overContainer: event.overContainer\n    });\n\n    this.trigger(swappableSwapEvent);\n\n    if (swappableSwapEvent.canceled()) {\n      return;\n    }\n\n    // swap originally swapped element back\n    if (this.lastOver && this.lastOver !== event.over) {\n      swap(this.lastOver, event.source);\n    }\n\n    if (this.lastOver === event.over) {\n      this.lastOver = null;\n    } else {\n      this.lastOver = event.over;\n    }\n\n    swap(event.source, event.over);\n\n    const swappableSwappedEvent = new _SwappableEvent.SwappableSwappedEvent({\n      dragEvent: event,\n      swappedElement: event.over\n    });\n\n    this.trigger(swappableSwappedEvent);\n  }\n\n  /**\n   * Drag stop handler\n   * @private\n   * @param {DragStopEvent} event - Drag stop event\n   */\n  [onDragStop](event) {\n    const swappableStopEvent = new _SwappableEvent.SwappableStopEvent({\n      dragEvent: event\n    });\n\n    this.trigger(swappableStopEvent);\n    this.lastOver = null;\n  }\n}\n\nexports.default = Swappable;\nfunction withTempElement(callback) {\n  const tmpElement = document.createElement('div');\n  callback(tmpElement);\n  tmpElement.parentNode.removeChild(tmpElement);\n}\n\nfunction swap(source, over) {\n  const overParent = over.parentNode;\n  const sourceParent = source.parentNode;\n\n  withTempElement(tmpElement => {\n    sourceParent.insertBefore(tmpElement, source);\n    overParent.insertBefore(source, over);\n    sourceParent.insertBefore(over, tmpElement);\n  });\n}\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.SwappableStopEvent = exports.SwappableSwappedEvent = exports.SwappableSwapEvent = exports.SwappableStartEvent = exports.SwappableEvent = undefined;\n\nvar _AbstractEvent = __webpack_require__(0);\n\nvar _AbstractEvent2 = _interopRequireDefault(_AbstractEvent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Base swappable event\n * @class SwappableEvent\n * @module SwappableEvent\n * @extends AbstractEvent\n */\nclass SwappableEvent extends _AbstractEvent2.default {\n\n  /**\n   * Original drag event that triggered this swappable event\n   * @property dragEvent\n   * @type {DragEvent}\n   * @readonly\n   */\n  get dragEvent() {\n    return this.data.dragEvent;\n  }\n}\n\nexports.SwappableEvent = SwappableEvent; /**\n                                          * Swappable start event\n                                          * @class SwappableStartEvent\n                                          * @module SwappableStartEvent\n                                          * @extends SwappableEvent\n                                          */\n\nSwappableEvent.type = 'swappable';\nclass SwappableStartEvent extends SwappableEvent {}\n\nexports.SwappableStartEvent = SwappableStartEvent; /**\n                                                    * Swappable swap event\n                                                    * @class SwappableSwapEvent\n                                                    * @module SwappableSwapEvent\n                                                    * @extends SwappableEvent\n                                                    */\n\nSwappableStartEvent.type = 'swappable:start';\nSwappableStartEvent.cancelable = true;\nclass SwappableSwapEvent extends SwappableEvent {\n\n  /**\n   * Draggable element you are over\n   * @property over\n   * @type {HTMLElement}\n   * @readonly\n   */\n  get over() {\n    return this.data.over;\n  }\n\n  /**\n   * Draggable container you are over\n   * @property overContainer\n   * @type {HTMLElement}\n   * @readonly\n   */\n  get overContainer() {\n    return this.data.overContainer;\n  }\n}\n\nexports.SwappableSwapEvent = SwappableSwapEvent; /**\n                                                  * Swappable swapped event\n                                                  * @class SwappableSwappedEvent\n                                                  * @module SwappableSwappedEvent\n                                                  * @extends SwappableEvent\n                                                  */\n\nSwappableSwapEvent.type = 'swappable:swap';\nSwappableSwapEvent.cancelable = true;\nclass SwappableSwappedEvent extends SwappableEvent {\n\n  /**\n   * The draggable element that you swapped with\n   * @property swappedElement\n   * @type {HTMLElement}\n   * @readonly\n   */\n  get swappedElement() {\n    return this.data.swappedElement;\n  }\n}\n\nexports.SwappableSwappedEvent = SwappableSwappedEvent; /**\n                                                        * Swappable stop event\n                                                        * @class SwappableStopEvent\n                                                        * @module SwappableStopEvent\n                                                        * @extends SwappableEvent\n                                                        */\n\nSwappableSwappedEvent.type = 'swappable:swapped';\nclass SwappableStopEvent extends SwappableEvent {}\nexports.SwappableStopEvent = SwappableStopEvent;\nSwappableStopEvent.type = 'swappable:stop';\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _SwappableEvent = __webpack_require__(10);\n\nObject.keys(_SwappableEvent).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function () {\n      return _SwappableEvent[key];\n    }\n  });\n});\n\nvar _Swappable = __webpack_require__(29);\n\nvar _Swappable2 = _interopRequireDefault(_Swappable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Swappable2.default;\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\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 _utils = __webpack_require__(2);\n\nvar _Draggable = __webpack_require__(5);\n\nvar _Draggable2 = _interopRequireDefault(_Draggable);\n\nvar _DroppableEvent = __webpack_require__(11);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onDragStart = Symbol('onDragStart');\nconst onDragMove = Symbol('onDragMove');\nconst onDragStop = Symbol('onDragStop');\nconst dropInDropzone = Symbol('dropInDropZone');\nconst returnToOriginalDropzone = Symbol('returnToOriginalDropzone');\nconst closestDropzone = Symbol('closestDropzone');\nconst getDropzones = Symbol('getDropzones');\n\n/**\n * Returns an announcement message when the Draggable element is dropped into a dropzone element\n * @param {DroppableDroppedEvent} droppableEvent\n * @return {String}\n */\nfunction onDroppableDroppedDefaultAnnouncement({ dragEvent, dropzone }) {\n  const sourceText = dragEvent.source.textContent.trim() || dragEvent.source.id || 'draggable element';\n  const dropzoneText = dropzone.textContent.trim() || dropzone.id || 'droppable element';\n\n  return `Dropped ${sourceText} into ${dropzoneText}`;\n}\n\n/**\n * Returns an announcement message when the Draggable element has returned to its original dropzone element\n * @param {DroppableReturnedEvent} droppableEvent\n * @return {String}\n */\nfunction onDroppableReturnedDefaultAnnouncement({ dragEvent, dropzone }) {\n  const sourceText = dragEvent.source.textContent.trim() || dragEvent.source.id || 'draggable element';\n  const dropzoneText = dropzone.textContent.trim() || dropzone.id || 'droppable element';\n\n  return `Returned ${sourceText} from ${dropzoneText}`;\n}\n\n/**\n * @const {Object} defaultAnnouncements\n * @const {Function} defaultAnnouncements['droppable:dropped']\n * @const {Function} defaultAnnouncements['droppable:returned']\n */\nconst defaultAnnouncements = {\n  'droppable:dropped': onDroppableDroppedDefaultAnnouncement,\n  'droppable:returned': onDroppableReturnedDefaultAnnouncement\n};\n\nconst defaultClasses = {\n  'droppable:active': 'draggable-dropzone--active',\n  'droppable:occupied': 'draggable-dropzone--occupied'\n};\n\nconst defaultOptions = {\n  dropzone: '.draggable-droppable'\n};\n\n/**\n * Droppable is built on top of Draggable and allows dropping draggable elements\n * into dropzone element\n * @class Droppable\n * @module Droppable\n * @extends Draggable\n */\nclass Droppable extends _Draggable2.default {\n  /**\n   * Droppable constructor.\n   * @constructs Droppable\n   * @param {HTMLElement[]|NodeList|HTMLElement} containers - Droppable containers\n   * @param {Object} options - Options for Droppable\n   */\n  constructor(containers = [], options = {}) {\n    super(containers, _extends({}, defaultOptions, options, {\n      classes: _extends({}, defaultClasses, options.classes || {}),\n      announcements: _extends({}, defaultAnnouncements, options.announcements || {})\n    }));\n\n    /**\n     * All dropzone elements on drag start\n     * @property dropzones\n     * @type {HTMLElement[]}\n     */\n    this.dropzones = null;\n\n    /**\n     * Last dropzone element that the source was dropped into\n     * @property lastDropzone\n     * @type {HTMLElement}\n     */\n    this.lastDropzone = null;\n\n    /**\n     * Initial dropzone element that the source was drag from\n     * @property initialDropzone\n     * @type {HTMLElement}\n     */\n    this.initialDropzone = null;\n\n    this[onDragStart] = this[onDragStart].bind(this);\n    this[onDragMove] = this[onDragMove].bind(this);\n    this[onDragStop] = this[onDragStop].bind(this);\n\n    this.on('drag:start', this[onDragStart]).on('drag:move', this[onDragMove]).on('drag:stop', this[onDragStop]);\n  }\n\n  /**\n   * Destroys Droppable instance.\n   */\n  destroy() {\n    super.destroy();\n\n    this.off('drag:start', this[onDragStart]).off('drag:move', this[onDragMove]).off('drag:stop', this[onDragStop]);\n  }\n\n  /**\n   * Drag start handler\n   * @private\n   * @param {DragStartEvent} event - Drag start event\n   */\n  [onDragStart](event) {\n    if (event.canceled()) {\n      return;\n    }\n\n    this.dropzones = [...this[getDropzones]()];\n    const dropzone = (0, _utils.closest)(event.sensorEvent.target, this.options.dropzone);\n\n    if (!dropzone) {\n      event.cancel();\n      return;\n    }\n\n    const droppableStartEvent = new _DroppableEvent.DroppableStartEvent({\n      dragEvent: event,\n      dropzone\n    });\n\n    this.trigger(droppableStartEvent);\n\n    if (droppableStartEvent.canceled()) {\n      event.cancel();\n      return;\n    }\n\n    this.initialDropzone = dropzone;\n\n    for (const dropzoneElement of this.dropzones) {\n      if (dropzoneElement.classList.contains(this.getClassNameFor('droppable:occupied'))) {\n        continue;\n      }\n\n      dropzoneElement.classList.add(this.getClassNameFor('droppable:active'));\n    }\n  }\n\n  /**\n   * Drag move handler\n   * @private\n   * @param {DragMoveEvent} event - Drag move event\n   */\n  [onDragMove](event) {\n    if (event.canceled()) {\n      return;\n    }\n\n    const dropzone = this[closestDropzone](event.sensorEvent.target);\n    const overEmptyDropzone = dropzone && !dropzone.classList.contains(this.getClassNameFor('droppable:occupied'));\n\n    if (overEmptyDropzone && this[dropInDropzone](event, dropzone)) {\n      this.lastDropzone = dropzone;\n    } else if ((!dropzone || dropzone === this.initialDropzone) && this.lastDropzone) {\n      this[returnToOriginalDropzone](event);\n      this.lastDropzone = null;\n    }\n  }\n\n  /**\n   * Drag stop handler\n   * @private\n   * @param {DragStopEvent} event - Drag stop event\n   */\n  [onDragStop](event) {\n    const droppableStopEvent = new _DroppableEvent.DroppableStopEvent({\n      dragEvent: event,\n      dropzone: this.lastDropzone || this.initialDropzone\n    });\n\n    this.trigger(droppableStopEvent);\n\n    const occupiedClass = this.getClassNameFor('droppable:occupied');\n\n    for (const dropzone of this.dropzones) {\n      dropzone.classList.remove(this.getClassNameFor('droppable:active'));\n    }\n\n    if (this.lastDropzone && this.lastDropzone !== this.initialDropzone) {\n      this.initialDropzone.classList.remove(occupiedClass);\n    }\n\n    this.dropzones = null;\n    this.lastDropzone = null;\n    this.initialDropzone = null;\n  }\n\n  /**\n   * Drops a draggable element into a dropzone element\n   * @private\n   * @param {DragMoveEvent} event - Drag move event\n   * @param {HTMLElement} dropzone - Dropzone element to drop draggable into\n   */\n  [dropInDropzone](event, dropzone) {\n    const droppableDroppedEvent = new _DroppableEvent.DroppableDroppedEvent({\n      dragEvent: event,\n      dropzone\n    });\n\n    this.trigger(droppableDroppedEvent);\n\n    if (droppableDroppedEvent.canceled()) {\n      return false;\n    }\n\n    const occupiedClass = this.getClassNameFor('droppable:occupied');\n\n    if (this.lastDropzone) {\n      this.lastDropzone.classList.remove(occupiedClass);\n    }\n\n    dropzone.appendChild(event.source);\n    dropzone.classList.add(occupiedClass);\n\n    return true;\n  }\n\n  /**\n   * Moves the previously dropped element back into its original dropzone\n   * @private\n   * @param {DragMoveEvent} event - Drag move event\n   */\n  [returnToOriginalDropzone](event) {\n    const droppableReturnedEvent = new _DroppableEvent.DroppableReturnedEvent({\n      dragEvent: event,\n      dropzone: this.lastDropzone\n    });\n\n    this.trigger(droppableReturnedEvent);\n\n    if (droppableReturnedEvent.canceled()) {\n      return;\n    }\n\n    this.initialDropzone.appendChild(event.source);\n    this.lastDropzone.classList.remove(this.getClassNameFor('droppable:occupied'));\n  }\n\n  /**\n   * Returns closest dropzone element for even target\n   * @private\n   * @param {HTMLElement} target - Event target\n   * @return {HTMLElement|null}\n   */\n  [closestDropzone](target) {\n    if (!this.dropzones) {\n      return null;\n    }\n\n    return (0, _utils.closest)(target, this.dropzones);\n  }\n\n  /**\n   * Returns all current dropzone elements for this draggable instance\n   * @private\n   * @return {NodeList|HTMLElement[]|Array}\n   */\n  [getDropzones]() {\n    const dropzone = this.options.dropzone;\n\n    if (typeof dropzone === 'string') {\n      return document.querySelectorAll(dropzone);\n    } else if (dropzone instanceof NodeList || dropzone instanceof Array) {\n      return dropzone;\n    } else if (typeof dropzone === 'function') {\n      return dropzone();\n    } else {\n      return [];\n    }\n  }\n}\nexports.default = Droppable;\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.DroppableStopEvent = exports.DroppableReturnedEvent = exports.DroppableDroppedEvent = exports.DroppableStartEvent = exports.DroppableEvent = undefined;\n\nvar _AbstractEvent = __webpack_require__(0);\n\nvar _AbstractEvent2 = _interopRequireDefault(_AbstractEvent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Base droppable event\n * @class DroppableEvent\n * @module DroppableEvent\n * @extends AbstractEvent\n */\nclass DroppableEvent extends _AbstractEvent2.default {\n\n  /**\n   * Original drag event that triggered this droppable event\n   * @property dragEvent\n   * @type {DragEvent}\n   * @readonly\n   */\n  get dragEvent() {\n    return this.data.dragEvent;\n  }\n}\n\nexports.DroppableEvent = DroppableEvent; /**\n                                          * Droppable start event\n                                          * @class DroppableStartEvent\n                                          * @module DroppableStartEvent\n                                          * @extends DroppableEvent\n                                          */\n\nDroppableEvent.type = 'droppable';\nclass DroppableStartEvent extends DroppableEvent {\n\n  /**\n   * The initial dropzone element of the currently dragging draggable element\n   * @property dropzone\n   * @type {HTMLElement}\n   * @readonly\n   */\n  get dropzone() {\n    return this.data.dropzone;\n  }\n}\n\nexports.DroppableStartEvent = DroppableStartEvent; /**\n                                                    * Droppable dropped event\n                                                    * @class DroppableDroppedEvent\n                                                    * @module DroppableDroppedEvent\n                                                    * @extends DroppableEvent\n                                                    */\n\nDroppableStartEvent.type = 'droppable:start';\nDroppableStartEvent.cancelable = true;\nclass DroppableDroppedEvent extends DroppableEvent {\n\n  /**\n   * The dropzone element you dropped the draggable element into\n   * @property dropzone\n   * @type {HTMLElement}\n   * @readonly\n   */\n  get dropzone() {\n    return this.data.dropzone;\n  }\n}\n\nexports.DroppableDroppedEvent = DroppableDroppedEvent; /**\n                                                        * Droppable returned event\n                                                        * @class DroppableReturnedEvent\n                                                        * @module DroppableReturnedEvent\n                                                        * @extends DroppableEvent\n                                                        */\n\nDroppableDroppedEvent.type = 'droppable:dropped';\nDroppableDroppedEvent.cancelable = true;\nclass DroppableReturnedEvent extends DroppableEvent {\n\n  /**\n   * The dropzone element you dragged away from\n   * @property dropzone\n   * @type {HTMLElement}\n   * @readonly\n   */\n  get dropzone() {\n    return this.data.dropzone;\n  }\n}\n\nexports.DroppableReturnedEvent = DroppableReturnedEvent; /**\n                                                          * Droppable stop event\n                                                          * @class DroppableStopEvent\n                                                          * @module DroppableStopEvent\n                                                          * @extends DroppableEvent\n                                                          */\n\nDroppableReturnedEvent.type = 'droppable:returned';\nDroppableReturnedEvent.cancelable = true;\nclass DroppableStopEvent extends DroppableEvent {\n\n  /**\n   * The final dropzone element of the draggable element\n   * @property dropzone\n   * @type {HTMLElement}\n   * @readonly\n   */\n  get dropzone() {\n    return this.data.dropzone;\n  }\n}\nexports.DroppableStopEvent = DroppableStopEvent;\nDroppableStopEvent.type = 'droppable:stop';\nDroppableStopEvent.cancelable = true;\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _DroppableEvent = __webpack_require__(11);\n\nObject.keys(_DroppableEvent).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function () {\n      return _DroppableEvent[key];\n    }\n  });\n});\n\nvar _Droppable = __webpack_require__(32);\n\nvar _Droppable2 = _interopRequireDefault(_Droppable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Droppable2.default;\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n/**\n * The Emitter is a simple emitter class that provides you with `on()`, `off()` and `trigger()` methods\n * @class Emitter\n * @module Emitter\n */\nclass Emitter {\n  constructor() {\n    this.callbacks = {};\n  }\n\n  /**\n   * Registers callbacks by event name\n   * @param {String} type\n   * @param {...Function} callbacks\n   */\n  on(type, ...callbacks) {\n    if (!this.callbacks[type]) {\n      this.callbacks[type] = [];\n    }\n\n    this.callbacks[type].push(...callbacks);\n\n    return this;\n  }\n\n  /**\n   * Unregisters callbacks by event name\n   * @param {String} type\n   * @param {Function} callback\n   */\n  off(type, callback) {\n    if (!this.callbacks[type]) {\n      return null;\n    }\n\n    const copy = this.callbacks[type].slice(0);\n\n    for (let i = 0; i < copy.length; i++) {\n      if (callback === copy[i]) {\n        this.callbacks[type].splice(i, 1);\n      }\n    }\n\n    return this;\n  }\n\n  /**\n   * Triggers event callbacks by event object\n   * @param {AbstractEvent} event\n   */\n  trigger(event) {\n    if (!this.callbacks[event.type]) {\n      return null;\n    }\n\n    const callbacks = [...this.callbacks[event.type]];\n    const caughtErrors = [];\n\n    for (let i = callbacks.length - 1; i >= 0; i--) {\n      const callback = callbacks[i];\n\n      try {\n        callback(event);\n      } catch (error) {\n        caughtErrors.push(error);\n      }\n    }\n\n    if (caughtErrors.length) {\n      /* eslint-disable no-console */\n      console.error(`Draggable caught errors while triggering '${event.type}'`, caughtErrors);\n      /* eslint-disable no-console */\n    }\n\n    return this;\n  }\n}\nexports.default = Emitter;\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _Emitter = __webpack_require__(35);\n\nvar _Emitter2 = _interopRequireDefault(_Emitter);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Emitter2.default;\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.defaultOptions = undefined;\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 _utils = __webpack_require__(2);\n\nvar _Plugins = __webpack_require__(12);\n\nvar _Emitter = __webpack_require__(36);\n\nvar _Emitter2 = _interopRequireDefault(_Emitter);\n\nvar _Sensors = __webpack_require__(6);\n\nvar _DraggableEvent = __webpack_require__(13);\n\nvar _DragEvent = __webpack_require__(14);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onDragStart = Symbol('onDragStart');\nconst onDragMove = Symbol('onDragMove');\nconst onDragStop = Symbol('onDragStop');\nconst onDragPressure = Symbol('onDragPressure');\n\n/**\n * @const {Object} defaultAnnouncements\n * @const {Function} defaultAnnouncements['drag:start']\n * @const {Function} defaultAnnouncements['drag:stop']\n */\nconst defaultAnnouncements = {\n  'drag:start': event => `Picked up ${event.source.textContent.trim() || event.source.id || 'draggable element'}`,\n  'drag:stop': event => `Released ${event.source.textContent.trim() || event.source.id || 'draggable element'}`\n};\n\nconst defaultClasses = {\n  'container:dragging': 'draggable-container--is-dragging',\n  'source:dragging': 'draggable-source--is-dragging',\n  'source:placed': 'draggable-source--placed',\n  'container:placed': 'draggable-container--placed',\n  'body:dragging': 'draggable--is-dragging',\n  'draggable:over': 'draggable--over',\n  'container:over': 'draggable-container--over',\n  'source:original': 'draggable--original',\n  mirror: 'draggable-mirror'\n};\n\nconst defaultOptions = exports.defaultOptions = {\n  draggable: '.draggable-source',\n  handle: null,\n  delay: 100,\n  placedTimeout: 800,\n  plugins: [],\n  sensors: []\n};\n\n/**\n * This is the core draggable library that does the heavy lifting\n * @class Draggable\n * @module Draggable\n */\nclass Draggable {\n\n  /**\n   * Draggable constructor.\n   * @constructs Draggable\n   * @param {HTMLElement[]|NodeList|HTMLElement} containers - Draggable containers\n   * @param {Object} options - Options for draggable\n   */\n  constructor(containers = [document.body], options = {}) {\n    /**\n     * Draggable containers\n     * @property containers\n     * @type {HTMLElement[]}\n     */\n    if (containers instanceof NodeList || containers instanceof Array) {\n      this.containers = [...containers];\n    } else if (containers instanceof HTMLElement) {\n      this.containers = [containers];\n    } else {\n      throw new Error('Draggable containers are expected to be of type `NodeList`, `HTMLElement[]` or `HTMLElement`');\n    }\n\n    this.options = _extends({}, defaultOptions, options, {\n      classes: _extends({}, defaultClasses, options.classes || {}),\n      announcements: _extends({}, defaultAnnouncements, options.announcements || {})\n    });\n\n    /**\n     * Draggables event emitter\n     * @property emitter\n     * @type {Emitter}\n     */\n    this.emitter = new _Emitter2.default();\n\n    /**\n     * Current drag state\n     * @property dragging\n     * @type {Boolean}\n     */\n    this.dragging = false;\n\n    /**\n     * Active plugins\n     * @property plugins\n     * @type {Plugin[]}\n     */\n    this.plugins = [];\n\n    /**\n     * Active sensors\n     * @property sensors\n     * @type {Sensor[]}\n     */\n    this.sensors = [];\n\n    this[onDragStart] = this[onDragStart].bind(this);\n    this[onDragMove] = this[onDragMove].bind(this);\n    this[onDragStop] = this[onDragStop].bind(this);\n    this[onDragPressure] = this[onDragPressure].bind(this);\n\n    document.addEventListener('drag:start', this[onDragStart], true);\n    document.addEventListener('drag:move', this[onDragMove], true);\n    document.addEventListener('drag:stop', this[onDragStop], true);\n    document.addEventListener('drag:pressure', this[onDragPressure], true);\n\n    const defaultPlugins = Object.values(Draggable.Plugins).map(Plugin => Plugin);\n    const defaultSensors = [_Sensors.MouseSensor, _Sensors.TouchSensor];\n\n    this.addPlugin(...[...defaultPlugins, ...this.options.plugins]);\n    this.addSensor(...[...defaultSensors, ...this.options.sensors]);\n\n    const draggableInitializedEvent = new _DraggableEvent.DraggableInitializedEvent({\n      draggable: this\n    });\n\n    this.on('mirror:created', ({ mirror }) => this.mirror = mirror);\n    this.on('mirror:destroy', () => this.mirror = null);\n\n    this.trigger(draggableInitializedEvent);\n  }\n\n  /**\n   * Destroys Draggable instance. This removes all internal event listeners and\n   * deactivates sensors and plugins\n   */\n\n  /**\n   * Default plugins draggable uses\n   * @static\n   * @property {Object} Plugins\n   * @property {Announcement} Plugins.Announcement\n   * @property {Focusable} Plugins.Focusable\n   * @property {Mirror} Plugins.Mirror\n   * @property {Scrollable} Plugins.Scrollable\n   * @type {Object}\n   */\n  destroy() {\n    document.removeEventListener('drag:start', this[onDragStart], true);\n    document.removeEventListener('drag:move', this[onDragMove], true);\n    document.removeEventListener('drag:stop', this[onDragStop], true);\n    document.removeEventListener('drag:pressure', this[onDragPressure], true);\n\n    const draggableDestroyEvent = new _DraggableEvent.DraggableDestroyEvent({\n      draggable: this\n    });\n\n    this.trigger(draggableDestroyEvent);\n\n    this.removePlugin(...this.plugins.map(plugin => plugin.constructor));\n    this.removeSensor(...this.sensors.map(sensor => sensor.constructor));\n  }\n\n  /**\n   * Adds plugin to this draggable instance. This will end up calling the attach method of the plugin\n   * @param {...typeof Plugin} plugins - Plugins that you want attached to draggable\n   * @return {Draggable}\n   * @example draggable.addPlugin(CustomA11yPlugin, CustomMirrorPlugin)\n   */\n  addPlugin(...plugins) {\n    const activePlugins = plugins.map(Plugin => new Plugin(this));\n\n    activePlugins.forEach(plugin => plugin.attach());\n    this.plugins = [...this.plugins, ...activePlugins];\n\n    return this;\n  }\n\n  /**\n   * Removes plugins that are already attached to this draggable instance. This will end up calling\n   * the detach method of the plugin\n   * @param {...typeof Plugin} plugins - Plugins that you want detached from draggable\n   * @return {Draggable}\n   * @example draggable.removePlugin(MirrorPlugin, CustomMirrorPlugin)\n   */\n  removePlugin(...plugins) {\n    const removedPlugins = this.plugins.filter(plugin => plugins.includes(plugin.constructor));\n\n    removedPlugins.forEach(plugin => plugin.detach());\n    this.plugins = this.plugins.filter(plugin => !plugins.includes(plugin.constructor));\n\n    return this;\n  }\n\n  /**\n   * Adds sensors to this draggable instance. This will end up calling the attach method of the sensor\n   * @param {...typeof Sensor} sensors - Sensors that you want attached to draggable\n   * @return {Draggable}\n   * @example draggable.addSensor(ForceTouchSensor, CustomSensor)\n   */\n  addSensor(...sensors) {\n    const activeSensors = sensors.map(Sensor => new Sensor(this.containers, this.options));\n\n    activeSensors.forEach(sensor => sensor.attach());\n    this.sensors = [...this.sensors, ...activeSensors];\n\n    return this;\n  }\n\n  /**\n   * Removes sensors that are already attached to this draggable instance. This will end up calling\n   * the detach method of the sensor\n   * @param {...typeof Sensor} sensors - Sensors that you want attached to draggable\n   * @return {Draggable}\n   * @example draggable.removeSensor(TouchSensor, DragSensor)\n   */\n  removeSensor(...sensors) {\n    const removedSensors = this.sensors.filter(sensor => sensors.includes(sensor.constructor));\n\n    removedSensors.forEach(sensor => sensor.detach());\n    this.sensors = this.sensors.filter(sensor => !sensors.includes(sensor.constructor));\n\n    return this;\n  }\n\n  /**\n   * Adds container to this draggable instance\n   * @param {...HTMLElement} containers - Containers you want to add to draggable\n   * @return {Draggable}\n   * @example draggable.addContainer(document.body)\n   */\n  addContainer(...containers) {\n    this.containers = [...this.containers, ...containers];\n    this.sensors.forEach(sensor => sensor.addContainer(...containers));\n    return this;\n  }\n\n  /**\n   * Removes container from this draggable instance\n   * @param {...HTMLElement} containers - Containers you want to remove from draggable\n   * @return {Draggable}\n   * @example draggable.removeContainer(document.body)\n   */\n  removeContainer(...containers) {\n    this.containers = this.containers.filter(container => !containers.includes(container));\n    this.sensors.forEach(sensor => sensor.removeContainer(...containers));\n    return this;\n  }\n\n  /**\n   * Adds listener for draggable events\n   * @param {String} type - Event name\n   * @param {...Function} callbacks - Event callbacks\n   * @return {Draggable}\n   * @example draggable.on('drag:start', (dragEvent) => dragEvent.cancel());\n   */\n  on(type, ...callbacks) {\n    this.emitter.on(type, ...callbacks);\n    return this;\n  }\n\n  /**\n   * Removes listener from draggable\n   * @param {String} type - Event name\n   * @param {Function} callback - Event callback\n   * @return {Draggable}\n   * @example draggable.off('drag:start', handlerFunction);\n   */\n  off(type, callback) {\n    this.emitter.off(type, callback);\n    return this;\n  }\n\n  /**\n   * Triggers draggable event\n   * @param {AbstractEvent} event - Event instance\n   * @return {Draggable}\n   * @example draggable.trigger(event);\n   */\n  trigger(event) {\n    this.emitter.trigger(event);\n    return this;\n  }\n\n  /**\n   * Returns class name for class identifier\n   * @param {String} name - Name of class identifier\n   * @return {String|null}\n   */\n  getClassNameFor(name) {\n    return this.options.classes[name];\n  }\n\n  /**\n   * Returns true if this draggable instance is currently dragging\n   * @return {Boolean}\n   */\n  isDragging() {\n    return Boolean(this.dragging);\n  }\n\n  /**\n   * Returns all draggable elements\n   * @return {HTMLElement[]}\n   */\n  getDraggableElements() {\n    return this.containers.reduce((current, container) => {\n      return [...current, ...this.getDraggableElementsForContainer(container)];\n    }, []);\n  }\n\n  /**\n   * Returns draggable elements for a given container, excluding the mirror and\n   * original source element if present\n   * @param {HTMLElement} container\n   * @return {HTMLElement[]}\n   */\n  getDraggableElementsForContainer(container) {\n    const allDraggableElements = container.querySelectorAll(this.options.draggable);\n\n    return [...allDraggableElements].filter(childElement => {\n      return childElement !== this.originalSource && childElement !== this.mirror;\n    });\n  }\n\n  /**\n   * Drag start handler\n   * @private\n   * @param {Event} event - DOM Drag event\n   */\n  [onDragStart](event) {\n    const sensorEvent = getSensorEvent(event);\n    const { target, container } = sensorEvent;\n\n    if (!this.containers.includes(container)) {\n      return;\n    }\n\n    if (this.options.handle && target && !(0, _utils.closest)(target, this.options.handle)) {\n      sensorEvent.cancel();\n      return;\n    }\n\n    // Find draggable source element\n    this.originalSource = (0, _utils.closest)(target, this.options.draggable);\n    this.sourceContainer = container;\n\n    if (!this.originalSource) {\n      sensorEvent.cancel();\n      return;\n    }\n\n    if (this.lastPlacedSource && this.lastPlacedContainer) {\n      clearTimeout(this.placedTimeoutID);\n      this.lastPlacedSource.classList.remove(this.getClassNameFor('source:placed'));\n      this.lastPlacedContainer.classList.remove(this.getClassNameFor('container:placed'));\n    }\n\n    this.source = this.originalSource.cloneNode(true);\n    this.originalSource.parentNode.insertBefore(this.source, this.originalSource);\n    this.originalSource.style.display = 'none';\n\n    const dragEvent = new _DragEvent.DragStartEvent({\n      source: this.source,\n      originalSource: this.originalSource,\n      sourceContainer: container,\n      sensorEvent\n    });\n\n    this.trigger(dragEvent);\n\n    this.dragging = !dragEvent.canceled();\n\n    if (dragEvent.canceled()) {\n      this.source.parentNode.removeChild(this.source);\n      this.originalSource.style.display = null;\n      return;\n    }\n\n    this.originalSource.classList.add(this.getClassNameFor('source:original'));\n    this.source.classList.add(this.getClassNameFor('source:dragging'));\n    this.sourceContainer.classList.add(this.getClassNameFor('container:dragging'));\n    document.body.classList.add(this.getClassNameFor('body:dragging'));\n    applyUserSelect(document.body, 'none');\n\n    requestAnimationFrame(() => {\n      const oldSensorEvent = getSensorEvent(event);\n      const newSensorEvent = oldSensorEvent.clone({ target: this.source });\n\n      this[onDragMove](_extends({}, event, {\n        detail: newSensorEvent\n      }));\n    });\n  }\n\n  /**\n   * Drag move handler\n   * @private\n   * @param {Event} event - DOM Drag event\n   */\n  [onDragMove](event) {\n    if (!this.dragging) {\n      return;\n    }\n\n    const sensorEvent = getSensorEvent(event);\n    const { container } = sensorEvent;\n    let target = sensorEvent.target;\n\n    const dragMoveEvent = new _DragEvent.DragMoveEvent({\n      source: this.source,\n      originalSource: this.originalSource,\n      sourceContainer: container,\n      sensorEvent\n    });\n\n    this.trigger(dragMoveEvent);\n\n    if (dragMoveEvent.canceled()) {\n      sensorEvent.cancel();\n    }\n\n    target = (0, _utils.closest)(target, this.options.draggable);\n    const withinCorrectContainer = (0, _utils.closest)(sensorEvent.target, this.containers);\n    const overContainer = sensorEvent.overContainer || withinCorrectContainer;\n    const isLeavingContainer = this.currentOverContainer && overContainer !== this.currentOverContainer;\n    const isLeavingDraggable = this.currentOver && target !== this.currentOver;\n    const isOverContainer = overContainer && this.currentOverContainer !== overContainer;\n    const isOverDraggable = withinCorrectContainer && target && this.currentOver !== target;\n\n    if (isLeavingDraggable) {\n      const dragOutEvent = new _DragEvent.DragOutEvent({\n        source: this.source,\n        originalSource: this.originalSource,\n        sourceContainer: container,\n        sensorEvent,\n        over: this.currentOver\n      });\n\n      this.currentOver.classList.remove(this.getClassNameFor('draggable:over'));\n      this.currentOver = null;\n\n      this.trigger(dragOutEvent);\n    }\n\n    if (isLeavingContainer) {\n      const dragOutContainerEvent = new _DragEvent.DragOutContainerEvent({\n        source: this.source,\n        originalSource: this.originalSource,\n        sourceContainer: container,\n        sensorEvent,\n        overContainer: this.currentOverContainer\n      });\n\n      this.currentOverContainer.classList.remove(this.getClassNameFor('container:over'));\n      this.currentOverContainer = null;\n\n      this.trigger(dragOutContainerEvent);\n    }\n\n    if (isOverContainer) {\n      overContainer.classList.add(this.getClassNameFor('container:over'));\n\n      const dragOverContainerEvent = new _DragEvent.DragOverContainerEvent({\n        source: this.source,\n        originalSource: this.originalSource,\n        sourceContainer: container,\n        sensorEvent,\n        overContainer\n      });\n\n      this.currentOverContainer = overContainer;\n\n      this.trigger(dragOverContainerEvent);\n    }\n\n    if (isOverDraggable) {\n      target.classList.add(this.getClassNameFor('draggable:over'));\n\n      const dragOverEvent = new _DragEvent.DragOverEvent({\n        source: this.source,\n        originalSource: this.originalSource,\n        sourceContainer: container,\n        sensorEvent,\n        overContainer,\n        over: target\n      });\n\n      this.currentOver = target;\n\n      this.trigger(dragOverEvent);\n    }\n  }\n\n  /**\n   * Drag stop handler\n   * @private\n   * @param {Event} event - DOM Drag event\n   */\n  [onDragStop](event) {\n    if (!this.dragging) {\n      return;\n    }\n\n    this.dragging = false;\n\n    const dragStopEvent = new _DragEvent.DragStopEvent({\n      source: this.source,\n      originalSource: this.originalSource,\n      sensorEvent: event.sensorEvent,\n      sourceContainer: this.sourceContainer\n    });\n\n    this.trigger(dragStopEvent);\n\n    this.source.parentNode.insertBefore(this.originalSource, this.source);\n    this.source.parentNode.removeChild(this.source);\n    this.originalSource.style.display = '';\n\n    this.source.classList.remove(this.getClassNameFor('source:dragging'));\n    this.originalSource.classList.remove(this.getClassNameFor('source:original'));\n    this.originalSource.classList.add(this.getClassNameFor('source:placed'));\n    this.sourceContainer.classList.add(this.getClassNameFor('container:placed'));\n    this.sourceContainer.classList.remove(this.getClassNameFor('container:dragging'));\n    document.body.classList.remove(this.getClassNameFor('body:dragging'));\n    applyUserSelect(document.body, '');\n\n    if (this.currentOver) {\n      this.currentOver.classList.remove(this.getClassNameFor('draggable:over'));\n    }\n\n    if (this.currentOverContainer) {\n      this.currentOverContainer.classList.remove(this.getClassNameFor('container:over'));\n    }\n\n    this.lastPlacedSource = this.originalSource;\n    this.lastPlacedContainer = this.sourceContainer;\n\n    this.placedTimeoutID = setTimeout(() => {\n      if (this.lastPlacedSource) {\n        this.lastPlacedSource.classList.remove(this.getClassNameFor('source:placed'));\n      }\n\n      if (this.lastPlacedContainer) {\n        this.lastPlacedContainer.classList.remove(this.getClassNameFor('container:placed'));\n      }\n\n      this.lastPlacedSource = null;\n      this.lastPlacedContainer = null;\n    }, this.options.placedTimeout);\n\n    this.source = null;\n    this.originalSource = null;\n    this.currentOverContainer = null;\n    this.currentOver = null;\n    this.sourceContainer = null;\n  }\n\n  /**\n   * Drag pressure handler\n   * @private\n   * @param {Event} event - DOM Drag event\n   */\n  [onDragPressure](event) {\n    if (!this.dragging) {\n      return;\n    }\n\n    const sensorEvent = getSensorEvent(event);\n    const source = this.source || (0, _utils.closest)(sensorEvent.originalEvent.target, this.options.draggable);\n\n    const dragPressureEvent = new _DragEvent.DragPressureEvent({\n      sensorEvent,\n      source,\n      pressure: sensorEvent.pressure\n    });\n\n    this.trigger(dragPressureEvent);\n  }\n}\n\nexports.default = Draggable;\nDraggable.Plugins = { Announcement: _Plugins.Announcement, Focusable: _Plugins.Focusable, Mirror: _Plugins.Mirror, Scrollable: _Plugins.Scrollable };\nfunction getSensorEvent(event) {\n  return event.detail;\n}\n\nfunction applyUserSelect(element, value) {\n  element.style.webkitUserSelect = value;\n  element.style.mozUserSelect = value;\n  element.style.msUserSelect = value;\n  element.style.oUserSelect = value;\n  element.style.userSelect = value;\n}\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _Sensor = __webpack_require__(4);\n\nvar _Sensor2 = _interopRequireDefault(_Sensor);\n\nvar _SensorEvent = __webpack_require__(3);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onMouseForceWillBegin = Symbol('onMouseForceWillBegin');\nconst onMouseForceDown = Symbol('onMouseForceDown');\nconst onMouseDown = Symbol('onMouseDown');\nconst onMouseForceChange = Symbol('onMouseForceChange');\nconst onMouseMove = Symbol('onMouseMove');\nconst onMouseUp = Symbol('onMouseUp');\nconst onMouseForceGlobalChange = Symbol('onMouseForceGlobalChange');\n\n/**\n * This sensor picks up native force touch events and dictates drag operations\n * @class ForceTouchSensor\n * @module ForceTouchSensor\n * @extends Sensor\n */\nclass ForceTouchSensor extends _Sensor2.default {\n  /**\n   * ForceTouchSensor constructor.\n   * @constructs ForceTouchSensor\n   * @param {HTMLElement[]|NodeList|HTMLElement} containers - Containers\n   * @param {Object} options - Options\n   */\n  constructor(containers = [], options = {}) {\n    super(containers, options);\n\n    /**\n     * Draggable element needs to be remembered to unset the draggable attribute after drag operation has completed\n     * @property mightDrag\n     * @type {Boolean}\n     */\n    this.mightDrag = false;\n\n    this[onMouseForceWillBegin] = this[onMouseForceWillBegin].bind(this);\n    this[onMouseForceDown] = this[onMouseForceDown].bind(this);\n    this[onMouseDown] = this[onMouseDown].bind(this);\n    this[onMouseForceChange] = this[onMouseForceChange].bind(this);\n    this[onMouseMove] = this[onMouseMove].bind(this);\n    this[onMouseUp] = this[onMouseUp].bind(this);\n  }\n\n  /**\n   * Attaches sensors event listeners to the DOM\n   */\n  attach() {\n    for (const container of this.containers) {\n      container.addEventListener('webkitmouseforcewillbegin', this[onMouseForceWillBegin], false);\n      container.addEventListener('webkitmouseforcedown', this[onMouseForceDown], false);\n      container.addEventListener('mousedown', this[onMouseDown], true);\n      container.addEventListener('webkitmouseforcechanged', this[onMouseForceChange], false);\n    }\n\n    document.addEventListener('mousemove', this[onMouseMove]);\n    document.addEventListener('mouseup', this[onMouseUp]);\n  }\n\n  /**\n   * Detaches sensors event listeners to the DOM\n   */\n  detach() {\n    for (const container of this.containers) {\n      container.removeEventListener('webkitmouseforcewillbegin', this[onMouseForceWillBegin], false);\n      container.removeEventListener('webkitmouseforcedown', this[onMouseForceDown], false);\n      container.removeEventListener('mousedown', this[onMouseDown], true);\n      container.removeEventListener('webkitmouseforcechanged', this[onMouseForceChange], false);\n    }\n\n    document.removeEventListener('mousemove', this[onMouseMove]);\n    document.removeEventListener('mouseup', this[onMouseUp]);\n  }\n\n  /**\n   * Mouse force will begin handler\n   * @private\n   * @param {Event} event - Mouse force will begin event\n   */\n  [onMouseForceWillBegin](event) {\n    event.preventDefault();\n    this.mightDrag = true;\n  }\n\n  /**\n   * Mouse force down handler\n   * @private\n   * @param {Event} event - Mouse force down event\n   */\n  [onMouseForceDown](event) {\n    if (this.dragging) {\n      return;\n    }\n\n    const target = document.elementFromPoint(event.clientX, event.clientY);\n    const container = event.currentTarget;\n\n    const dragStartEvent = new _SensorEvent.DragStartSensorEvent({\n      clientX: event.clientX,\n      clientY: event.clientY,\n      target,\n      container,\n      originalEvent: event\n    });\n\n    this.trigger(container, dragStartEvent);\n\n    this.currentContainer = container;\n    this.dragging = !dragStartEvent.canceled();\n    this.mightDrag = false;\n  }\n\n  /**\n   * Mouse up handler\n   * @private\n   * @param {Event} event - Mouse up event\n   */\n  [onMouseUp](event) {\n    if (!this.dragging) {\n      return;\n    }\n\n    const dragStopEvent = new _SensorEvent.DragStopSensorEvent({\n      clientX: event.clientX,\n      clientY: event.clientY,\n      target: null,\n      container: this.currentContainer,\n      originalEvent: event\n    });\n\n    this.trigger(this.currentContainer, dragStopEvent);\n\n    this.currentContainer = null;\n    this.dragging = false;\n    this.mightDrag = false;\n  }\n\n  /**\n   * Mouse down handler\n   * @private\n   * @param {Event} event - Mouse down event\n   */\n  [onMouseDown](event) {\n    if (!this.mightDrag) {\n      return;\n    }\n\n    // Need workaround for real click\n    // Cancel potential drag events\n    event.stopPropagation();\n    event.stopImmediatePropagation();\n    event.preventDefault();\n  }\n\n  /**\n   * Mouse move handler\n   * @private\n   * @param {Event} event - Mouse force will begin event\n   */\n  [onMouseMove](event) {\n    if (!this.dragging) {\n      return;\n    }\n\n    const target = document.elementFromPoint(event.clientX, event.clientY);\n\n    const dragMoveEvent = new _SensorEvent.DragMoveSensorEvent({\n      clientX: event.clientX,\n      clientY: event.clientY,\n      target,\n      container: this.currentContainer,\n      originalEvent: event\n    });\n\n    this.trigger(this.currentContainer, dragMoveEvent);\n  }\n\n  /**\n   * Mouse force change handler\n   * @private\n   * @param {Event} event - Mouse force change event\n   */\n  [onMouseForceChange](event) {\n    if (this.dragging) {\n      return;\n    }\n\n    const target = event.target;\n    const container = event.currentTarget;\n\n    const dragPressureEvent = new _SensorEvent.DragPressureSensorEvent({\n      pressure: event.webkitForce,\n      clientX: event.clientX,\n      clientY: event.clientY,\n      target,\n      container,\n      originalEvent: event\n    });\n\n    this.trigger(container, dragPressureEvent);\n  }\n\n  /**\n   * Mouse force global change handler\n   * @private\n   * @param {Event} event - Mouse force global change event\n   */\n  [onMouseForceGlobalChange](event) {\n    if (!this.dragging) {\n      return;\n    }\n\n    const target = event.target;\n\n    const dragPressureEvent = new _SensorEvent.DragPressureSensorEvent({\n      pressure: event.webkitForce,\n      clientX: event.clientX,\n      clientY: event.clientY,\n      target,\n      container: this.currentContainer,\n      originalEvent: event\n    });\n\n    this.trigger(this.currentContainer, dragPressureEvent);\n  }\n}\nexports.default = ForceTouchSensor;\n\n/***/ }),\n/* 39 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _ForceTouchSensor = __webpack_require__(38);\n\nvar _ForceTouchSensor2 = _interopRequireDefault(_ForceTouchSensor);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _ForceTouchSensor2.default;\n\n/***/ }),\n/* 40 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _utils = __webpack_require__(2);\n\nvar _Sensor = __webpack_require__(4);\n\nvar _Sensor2 = _interopRequireDefault(_Sensor);\n\nvar _SensorEvent = __webpack_require__(3);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onMouseDown = Symbol('onMouseDown');\nconst onMouseUp = Symbol('onMouseUp');\nconst onDragStart = Symbol('onDragStart');\nconst onDragOver = Symbol('onDragOver');\nconst onDragEnd = Symbol('onDragEnd');\nconst onDrop = Symbol('onDrop');\nconst reset = Symbol('reset');\n\n/**\n * This sensor picks up native browser drag events and dictates drag operations\n * @class DragSensor\n * @module DragSensor\n * @extends Sensor\n */\nclass DragSensor extends _Sensor2.default {\n  /**\n   * DragSensor constructor.\n   * @constructs DragSensor\n   * @param {HTMLElement[]|NodeList|HTMLElement} containers - Containers\n   * @param {Object} options - Options\n   */\n  constructor(containers = [], options = {}) {\n    super(containers, options);\n\n    /**\n     * Mouse down timer which will end up setting the draggable attribute, unless canceled\n     * @property mouseDownTimeout\n     * @type {Number}\n     */\n    this.mouseDownTimeout = null;\n\n    /**\n     * Draggable element needs to be remembered to unset the draggable attribute after drag operation has completed\n     * @property draggableElement\n     * @type {HTMLElement}\n     */\n    this.draggableElement = null;\n\n    /**\n     * Native draggable element could be links or images, their draggable state will be disabled during drag operation\n     * @property nativeDraggableElement\n     * @type {HTMLElement}\n     */\n    this.nativeDraggableElement = null;\n\n    this[onMouseDown] = this[onMouseDown].bind(this);\n    this[onMouseUp] = this[onMouseUp].bind(this);\n    this[onDragStart] = this[onDragStart].bind(this);\n    this[onDragOver] = this[onDragOver].bind(this);\n    this[onDragEnd] = this[onDragEnd].bind(this);\n    this[onDrop] = this[onDrop].bind(this);\n  }\n\n  /**\n   * Attaches sensors event listeners to the DOM\n   */\n  attach() {\n    document.addEventListener('mousedown', this[onMouseDown], true);\n  }\n\n  /**\n   * Detaches sensors event listeners to the DOM\n   */\n  detach() {\n    document.removeEventListener('mousedown', this[onMouseDown], true);\n  }\n\n  /**\n   * Drag start handler\n   * @private\n   * @param {Event} event - Drag start event\n   */\n  [onDragStart](event) {\n    // Need for firefox. \"text\" key is needed for IE\n    event.dataTransfer.setData('text', '');\n    event.dataTransfer.effectAllowed = this.options.type;\n\n    const target = document.elementFromPoint(event.clientX, event.clientY);\n    this.currentContainer = (0, _utils.closest)(event.target, this.containers);\n\n    if (!this.currentContainer) {\n      return;\n    }\n\n    const dragStartEvent = new _SensorEvent.DragStartSensorEvent({\n      clientX: event.clientX,\n      clientY: event.clientY,\n      target,\n      container: this.currentContainer,\n      originalEvent: event\n    });\n\n    // Workaround\n    setTimeout(() => {\n      this.trigger(this.currentContainer, dragStartEvent);\n\n      if (dragStartEvent.canceled()) {\n        this.dragging = false;\n      } else {\n        this.dragging = true;\n      }\n    }, 0);\n  }\n\n  /**\n   * Drag over handler\n   * @private\n   * @param {Event} event - Drag over event\n   */\n  [onDragOver](event) {\n    if (!this.dragging) {\n      return;\n    }\n\n    const target = document.elementFromPoint(event.clientX, event.clientY);\n    const container = this.currentContainer;\n\n    const dragMoveEvent = new _SensorEvent.DragMoveSensorEvent({\n      clientX: event.clientX,\n      clientY: event.clientY,\n      target,\n      container,\n      originalEvent: event\n    });\n\n    this.trigger(container, dragMoveEvent);\n\n    if (!dragMoveEvent.canceled()) {\n      event.preventDefault();\n      event.dataTransfer.dropEffect = this.options.type;\n    }\n  }\n\n  /**\n   * Drag end handler\n   * @private\n   * @param {Event} event - Drag end event\n   */\n  [onDragEnd](event) {\n    if (!this.dragging) {\n      return;\n    }\n\n    document.removeEventListener('mouseup', this[onMouseUp], true);\n\n    const target = document.elementFromPoint(event.clientX, event.clientY);\n    const container = this.currentContainer;\n\n    const dragStopEvent = new _SensorEvent.DragStopSensorEvent({\n      clientX: event.clientX,\n      clientY: event.clientY,\n      target,\n      container,\n      originalEvent: event\n    });\n\n    this.trigger(container, dragStopEvent);\n\n    this.dragging = false;\n\n    this[reset]();\n  }\n\n  /**\n   * Drop handler\n   * @private\n   * @param {Event} event - Drop event\n   */\n  [onDrop](event) {\n    // eslint-disable-line class-methods-use-this\n    event.preventDefault();\n  }\n\n  /**\n   * Mouse down handler\n   * @private\n   * @param {Event} event - Mouse down event\n   */\n  [onMouseDown](event) {\n    // Firefox bug for inputs within draggables https://bugzilla.mozilla.org/show_bug.cgi?id=739071\n    if (event.target && (event.target.form || event.target.contenteditable)) {\n      return;\n    }\n\n    const nativeDraggableElement = (0, _utils.closest)(event.target, element => element.draggable);\n\n    if (nativeDraggableElement) {\n      nativeDraggableElement.draggable = false;\n      this.nativeDraggableElement = nativeDraggableElement;\n    }\n\n    document.addEventListener('mouseup', this[onMouseUp], true);\n    document.addEventListener('dragstart', this[onDragStart], false);\n    document.addEventListener('dragover', this[onDragOver], false);\n    document.addEventListener('dragend', this[onDragEnd], false);\n    document.addEventListener('drop', this[onDrop], false);\n\n    const target = (0, _utils.closest)(event.target, this.options.draggable);\n\n    if (!target) {\n      return;\n    }\n\n    this.mouseDownTimeout = setTimeout(() => {\n      target.draggable = true;\n      this.draggableElement = target;\n    }, this.options.delay);\n  }\n\n  /**\n   * Mouse up handler\n   * @private\n   * @param {Event} event - Mouse up event\n   */\n  [onMouseUp]() {\n    this[reset]();\n  }\n\n  /**\n   * Mouse up handler\n   * @private\n   * @param {Event} event - Mouse up event\n   */\n  [reset]() {\n    clearTimeout(this.mouseDownTimeout);\n\n    document.removeEventListener('mouseup', this[onMouseUp], true);\n    document.removeEventListener('dragstart', this[onDragStart], false);\n    document.removeEventListener('dragover', this[onDragOver], false);\n    document.removeEventListener('dragend', this[onDragEnd], false);\n    document.removeEventListener('drop', this[onDrop], false);\n\n    if (this.nativeDraggableElement) {\n      this.nativeDraggableElement.draggable = true;\n      this.nativeDraggableElement = null;\n    }\n\n    if (this.draggableElement) {\n      this.draggableElement.draggable = false;\n      this.draggableElement = null;\n    }\n  }\n}\nexports.default = DragSensor;\n\n/***/ }),\n/* 41 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _DragSensor = __webpack_require__(40);\n\nvar _DragSensor2 = _interopRequireDefault(_DragSensor);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _DragSensor2.default;\n\n/***/ }),\n/* 42 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _utils = __webpack_require__(2);\n\nvar _Sensor = __webpack_require__(4);\n\nvar _Sensor2 = _interopRequireDefault(_Sensor);\n\nvar _SensorEvent = __webpack_require__(3);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onTouchStart = Symbol('onTouchStart');\nconst onTouchHold = Symbol('onTouchHold');\nconst onTouchEnd = Symbol('onTouchEnd');\nconst onTouchMove = Symbol('onTouchMove');\n\n/**\n * Prevents scrolling when set to true\n * @var {Boolean} preventScrolling\n */\nlet preventScrolling = false;\n\n// WebKit requires cancelable `touchmove` events to be added as early as possible\nwindow.addEventListener('touchmove', event => {\n  if (!preventScrolling) {\n    return;\n  }\n\n  // Prevent scrolling\n  event.preventDefault();\n}, { passive: false });\n\n/**\n * This sensor picks up native browser touch events and dictates drag operations\n * @class TouchSensor\n * @module TouchSensor\n * @extends Sensor\n */\nclass TouchSensor extends _Sensor2.default {\n  /**\n   * TouchSensor constructor.\n   * @constructs TouchSensor\n   * @param {HTMLElement[]|NodeList|HTMLElement} containers - Containers\n   * @param {Object} options - Options\n   */\n  constructor(containers = [], options = {}) {\n    super(containers, options);\n\n    /**\n     * Closest scrollable container so accidental scroll can cancel long touch\n     * @property currentScrollableParent\n     * @type {HTMLElement}\n     */\n    this.currentScrollableParent = null;\n\n    /**\n     * TimeoutID for long touch\n     * @property tapTimeout\n     * @type {Number}\n     */\n    this.tapTimeout = null;\n\n    /**\n     * touchMoved indicates if touch has moved during tapTimeout\n     * @property touchMoved\n     * @type {Boolean}\n     */\n    this.touchMoved = false;\n\n    this[onTouchStart] = this[onTouchStart].bind(this);\n    this[onTouchHold] = this[onTouchHold].bind(this);\n    this[onTouchEnd] = this[onTouchEnd].bind(this);\n    this[onTouchMove] = this[onTouchMove].bind(this);\n  }\n\n  /**\n   * Attaches sensors event listeners to the DOM\n   */\n  attach() {\n    document.addEventListener('touchstart', this[onTouchStart]);\n  }\n\n  /**\n   * Detaches sensors event listeners to the DOM\n   */\n  detach() {\n    document.removeEventListener('touchstart', this[onTouchStart]);\n  }\n\n  /**\n   * Touch start handler\n   * @private\n   * @param {Event} event - Touch start event\n   */\n  [onTouchStart](event) {\n    const container = (0, _utils.closest)(event.target, this.containers);\n\n    if (!container) {\n      return;\n    }\n\n    document.addEventListener('touchmove', this[onTouchMove]);\n    document.addEventListener('touchend', this[onTouchEnd]);\n    document.addEventListener('touchcancel', this[onTouchEnd]);\n    container.addEventListener('contextmenu', onContextMenu);\n\n    this.currentContainer = container;\n    this.tapTimeout = setTimeout(this[onTouchHold](event, container), this.options.delay);\n  }\n\n  /**\n   * Touch hold handler\n   * @private\n   * @param {Event} event - Touch start event\n   * @param {HTMLElement} container - Container element\n   */\n  [onTouchHold](event, container) {\n    return () => {\n      if (this.touchMoved) {\n        return;\n      }\n\n      const touch = event.touches[0] || event.changedTouches[0];\n      const target = event.target;\n\n      const dragStartEvent = new _SensorEvent.DragStartSensorEvent({\n        clientX: touch.pageX,\n        clientY: touch.pageY,\n        target,\n        container,\n        originalEvent: event\n      });\n\n      this.trigger(container, dragStartEvent);\n\n      this.dragging = !dragStartEvent.canceled();\n      preventScrolling = this.dragging;\n    };\n  }\n\n  /**\n   * Touch move handler\n   * @private\n   * @param {Event} event - Touch move event\n   */\n  [onTouchMove](event) {\n    this.touchMoved = true;\n\n    if (!this.dragging) {\n      return;\n    }\n\n    const touch = event.touches[0] || event.changedTouches[0];\n    const target = document.elementFromPoint(touch.pageX - window.scrollX, touch.pageY - window.scrollY);\n\n    const dragMoveEvent = new _SensorEvent.DragMoveSensorEvent({\n      clientX: touch.pageX,\n      clientY: touch.pageY,\n      target,\n      container: this.currentContainer,\n      originalEvent: event\n    });\n\n    this.trigger(this.currentContainer, dragMoveEvent);\n  }\n\n  /**\n   * Touch end handler\n   * @private\n   * @param {Event} event - Touch end event\n   */\n  [onTouchEnd](event) {\n    this.touchMoved = false;\n    preventScrolling = false;\n\n    document.removeEventListener('touchend', this[onTouchEnd]);\n    document.removeEventListener('touchcancel', this[onTouchEnd]);\n    document.removeEventListener('touchmove', this[onTouchMove]);\n\n    if (this.currentContainer) {\n      this.currentContainer.removeEventListener('contextmenu', onContextMenu);\n    }\n\n    clearTimeout(this.tapTimeout);\n\n    if (!this.dragging) {\n      return;\n    }\n\n    const touch = event.touches[0] || event.changedTouches[0];\n    const target = document.elementFromPoint(touch.pageX - window.scrollX, touch.pageY - window.scrollY);\n\n    event.preventDefault();\n\n    const dragStopEvent = new _SensorEvent.DragStopSensorEvent({\n      clientX: touch.pageX,\n      clientY: touch.pageY,\n      target,\n      container: this.currentContainer,\n      originalEvent: event\n    });\n\n    this.trigger(this.currentContainer, dragStopEvent);\n\n    this.currentContainer = null;\n    this.dragging = false;\n  }\n}\n\nexports.default = TouchSensor;\nfunction onContextMenu(event) {\n  event.preventDefault();\n  event.stopPropagation();\n}\n\n/***/ }),\n/* 43 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _TouchSensor = __webpack_require__(42);\n\nvar _TouchSensor2 = _interopRequireDefault(_TouchSensor);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _TouchSensor2.default;\n\n/***/ }),\n/* 44 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.DragPressureSensorEvent = exports.DragStopSensorEvent = exports.DragMoveSensorEvent = exports.DragStartSensorEvent = exports.SensorEvent = undefined;\n\nvar _AbstractEvent = __webpack_require__(0);\n\nvar _AbstractEvent2 = _interopRequireDefault(_AbstractEvent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Base sensor event\n * @class SensorEvent\n * @module SensorEvent\n * @extends AbstractEvent\n */\nclass SensorEvent extends _AbstractEvent2.default {\n  /**\n   * Original browser event that triggered a sensor\n   * @property originalEvent\n   * @type {Event}\n   * @readonly\n   */\n  get originalEvent() {\n    return this.data.originalEvent;\n  }\n\n  /**\n   * Normalized clientX for both touch and mouse events\n   * @property clientX\n   * @type {Number}\n   * @readonly\n   */\n  get clientX() {\n    return this.data.clientX;\n  }\n\n  /**\n   * Normalized clientY for both touch and mouse events\n   * @property clientY\n   * @type {Number}\n   * @readonly\n   */\n  get clientY() {\n    return this.data.clientY;\n  }\n\n  /**\n   * Normalized target for both touch and mouse events\n   * Returns the element that is behind cursor or touch pointer\n   * @property target\n   * @type {HTMLElement}\n   * @readonly\n   */\n  get target() {\n    return this.data.target;\n  }\n\n  /**\n   * Container that initiated the sensor\n   * @property container\n   * @type {HTMLElement}\n   * @readonly\n   */\n  get container() {\n    return this.data.container;\n  }\n\n  /**\n   * Trackpad pressure\n   * @property pressure\n   * @type {Number}\n   * @readonly\n   */\n  get pressure() {\n    return this.data.pressure;\n  }\n}\n\nexports.SensorEvent = SensorEvent; /**\n                                    * Drag start sensor event\n                                    * @class DragStartSensorEvent\n                                    * @module DragStartSensorEvent\n                                    * @extends SensorEvent\n                                    */\n\nclass DragStartSensorEvent extends SensorEvent {}\n\nexports.DragStartSensorEvent = DragStartSensorEvent; /**\n                                                      * Drag move sensor event\n                                                      * @class DragMoveSensorEvent\n                                                      * @module DragMoveSensorEvent\n                                                      * @extends SensorEvent\n                                                      */\n\nDragStartSensorEvent.type = 'drag:start';\nclass DragMoveSensorEvent extends SensorEvent {}\n\nexports.DragMoveSensorEvent = DragMoveSensorEvent; /**\n                                                    * Drag stop sensor event\n                                                    * @class DragStopSensorEvent\n                                                    * @module DragStopSensorEvent\n                                                    * @extends SensorEvent\n                                                    */\n\nDragMoveSensorEvent.type = 'drag:move';\nclass DragStopSensorEvent extends SensorEvent {}\n\nexports.DragStopSensorEvent = DragStopSensorEvent; /**\n                                                    * Drag pressure sensor event\n                                                    * @class DragPressureSensorEvent\n                                                    * @module DragPressureSensorEvent\n                                                    * @extends SensorEvent\n                                                    */\n\nDragStopSensorEvent.type = 'drag:stop';\nclass DragPressureSensorEvent extends SensorEvent {}\nexports.DragPressureSensorEvent = DragPressureSensorEvent;\nDragPressureSensorEvent.type = 'drag:pressure';\n\n/***/ }),\n/* 45 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _utils = __webpack_require__(2);\n\nvar _Sensor = __webpack_require__(4);\n\nvar _Sensor2 = _interopRequireDefault(_Sensor);\n\nvar _SensorEvent = __webpack_require__(3);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onContextMenuWhileDragging = Symbol('onContextMenuWhileDragging');\nconst onMouseDown = Symbol('onMouseDown');\nconst onMouseMove = Symbol('onMouseMove');\nconst onMouseUp = Symbol('onMouseUp');\n\n/**\n * This sensor picks up native browser mouse events and dictates drag operations\n * @class MouseSensor\n * @module MouseSensor\n * @extends Sensor\n */\nclass MouseSensor extends _Sensor2.default {\n  /**\n   * MouseSensor constructor.\n   * @constructs MouseSensor\n   * @param {HTMLElement[]|NodeList|HTMLElement} containers - Containers\n   * @param {Object} options - Options\n   */\n  constructor(containers = [], options = {}) {\n    super(containers, options);\n\n    /**\n     * Indicates if mouse button is still down\n     * @property mouseDown\n     * @type {Boolean}\n     */\n    this.mouseDown = false;\n\n    /**\n     * Mouse down timer which will end up triggering the drag start operation\n     * @property mouseDownTimeout\n     * @type {Number}\n     */\n    this.mouseDownTimeout = null;\n\n    /**\n     * Indicates if context menu has been opened during drag operation\n     * @property openedContextMenu\n     * @type {Boolean}\n     */\n    this.openedContextMenu = false;\n\n    this[onContextMenuWhileDragging] = this[onContextMenuWhileDragging].bind(this);\n    this[onMouseDown] = this[onMouseDown].bind(this);\n    this[onMouseMove] = this[onMouseMove].bind(this);\n    this[onMouseUp] = this[onMouseUp].bind(this);\n  }\n\n  /**\n   * Attaches sensors event listeners to the DOM\n   */\n  attach() {\n    document.addEventListener('mousedown', this[onMouseDown], true);\n  }\n\n  /**\n   * Detaches sensors event listeners to the DOM\n   */\n  detach() {\n    document.removeEventListener('mousedown', this[onMouseDown], true);\n  }\n\n  /**\n   * Mouse down handler\n   * @private\n   * @param {Event} event - Mouse down event\n   */\n  [onMouseDown](event) {\n    if (event.button !== 0 || event.ctrlKey || event.metaKey) {\n      return;\n    }\n\n    document.addEventListener('mouseup', this[onMouseUp]);\n\n    const target = document.elementFromPoint(event.clientX, event.clientY);\n    const container = (0, _utils.closest)(target, this.containers);\n\n    if (!container) {\n      return;\n    }\n\n    document.addEventListener('dragstart', preventNativeDragStart);\n\n    this.mouseDown = true;\n\n    clearTimeout(this.mouseDownTimeout);\n    this.mouseDownTimeout = setTimeout(() => {\n      if (!this.mouseDown) {\n        return;\n      }\n\n      const dragStartEvent = new _SensorEvent.DragStartSensorEvent({\n        clientX: event.clientX,\n        clientY: event.clientY,\n        target,\n        container,\n        originalEvent: event\n      });\n\n      this.trigger(container, dragStartEvent);\n\n      this.currentContainer = container;\n      this.dragging = !dragStartEvent.canceled();\n\n      if (this.dragging) {\n        document.addEventListener('contextmenu', this[onContextMenuWhileDragging]);\n        document.addEventListener('mousemove', this[onMouseMove]);\n      }\n    }, this.options.delay);\n  }\n\n  /**\n   * Mouse move handler\n   * @private\n   * @param {Event} event - Mouse move event\n   */\n  [onMouseMove](event) {\n    if (!this.dragging) {\n      return;\n    }\n\n    const target = document.elementFromPoint(event.clientX, event.clientY);\n\n    const dragMoveEvent = new _SensorEvent.DragMoveSensorEvent({\n      clientX: event.clientX,\n      clientY: event.clientY,\n      target,\n      container: this.currentContainer,\n      originalEvent: event\n    });\n\n    this.trigger(this.currentContainer, dragMoveEvent);\n  }\n\n  /**\n   * Mouse up handler\n   * @private\n   * @param {Event} event - Mouse up event\n   */\n  [onMouseUp](event) {\n    this.mouseDown = Boolean(this.openedContextMenu);\n\n    if (this.openedContextMenu) {\n      this.openedContextMenu = false;\n      return;\n    }\n\n    document.removeEventListener('mouseup', this[onMouseUp]);\n    document.removeEventListener('dragstart', preventNativeDragStart);\n\n    if (!this.dragging) {\n      return;\n    }\n\n    const target = document.elementFromPoint(event.clientX, event.clientY);\n\n    const dragStopEvent = new _SensorEvent.DragStopSensorEvent({\n      clientX: event.clientX,\n      clientY: event.clientY,\n      target,\n      container: this.currentContainer,\n      originalEvent: event\n    });\n\n    this.trigger(this.currentContainer, dragStopEvent);\n\n    document.removeEventListener('contextmenu', this[onContextMenuWhileDragging]);\n    document.removeEventListener('mousemove', this[onMouseMove]);\n\n    this.currentContainer = null;\n    this.dragging = false;\n  }\n\n  /**\n   * Context menu handler\n   * @private\n   * @param {Event} event - Context menu event\n   */\n  [onContextMenuWhileDragging](event) {\n    event.preventDefault();\n    this.openedContextMenu = true;\n  }\n}\n\nexports.default = MouseSensor;\nfunction preventNativeDragStart(event) {\n  event.preventDefault();\n}\n\n/***/ }),\n/* 46 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _MouseSensor = __webpack_require__(45);\n\nvar _MouseSensor2 = _interopRequireDefault(_MouseSensor);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _MouseSensor2.default;\n\n/***/ }),\n/* 47 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\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\n/**\n * Base sensor class. Extend from this class to create a new or custom sensor\n * @class Sensor\n * @module Sensor\n */\nclass Sensor {\n  /**\n   * Sensor constructor.\n   * @constructs Sensor\n   * @param {HTMLElement[]|NodeList|HTMLElement} containers - Containers\n   * @param {Object} options - Options\n   */\n  constructor(containers = [], options = {}) {\n    /**\n     * Current containers\n     * @property containers\n     * @type {HTMLElement[]}\n     */\n    this.containers = [...containers];\n\n    /**\n     * Current options\n     * @property options\n     * @type {Object}\n     */\n    this.options = _extends({}, options);\n\n    /**\n     * Current drag state\n     * @property dragging\n     * @type {Boolean}\n     */\n    this.dragging = false;\n\n    /**\n     * Current container\n     * @property currentContainer\n     * @type {HTMLElement}\n     */\n    this.currentContainer = null;\n  }\n\n  /**\n   * Attaches sensors event listeners to the DOM\n   * @return {Sensor}\n   */\n  attach() {\n    return this;\n  }\n\n  /**\n   * Detaches sensors event listeners to the DOM\n   * @return {Sensor}\n   */\n  detach() {\n    return this;\n  }\n\n  /**\n   * Adds container to this sensor instance\n   * @param {...HTMLElement} containers - Containers you want to add to this sensor\n   * @example draggable.addContainer(document.body)\n   */\n  addContainer(...containers) {\n    this.containers = [...this.containers, ...containers];\n  }\n\n  /**\n   * Removes container from this sensor instance\n   * @param {...HTMLElement} containers - Containers you want to remove from this sensor\n   * @example draggable.removeContainer(document.body)\n   */\n  removeContainer(...containers) {\n    this.containers = this.containers.filter(container => !containers.includes(container));\n  }\n\n  /**\n   * Triggers event on target element\n   * @param {HTMLElement} element - Element to trigger event on\n   * @param {SensorEvent} sensorEvent - Sensor event to trigger\n   */\n  trigger(element, sensorEvent) {\n    const event = document.createEvent('Event');\n    event.detail = sensorEvent;\n    event.initEvent(sensorEvent.type, true, true);\n    element.dispatchEvent(event);\n    this.lastEvent = sensorEvent;\n\n    return sensorEvent;\n  }\n}\nexports.default = Sensor;\n\n/***/ }),\n/* 48 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = requestNextAnimationFrame;\nfunction requestNextAnimationFrame(callback) {\n  return requestAnimationFrame(() => {\n    requestAnimationFrame(callback);\n  });\n}\n\n/***/ }),\n/* 49 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _requestNextAnimationFrame = __webpack_require__(48);\n\nvar _requestNextAnimationFrame2 = _interopRequireDefault(_requestNextAnimationFrame);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _requestNextAnimationFrame2.default;\n\n/***/ }),\n/* 50 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = closest;\nconst matchFunction = Element.prototype.matches || Element.prototype.webkitMatchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector;\n\n/**\n * Get the closest parent element of a given element that matches the given\n * selector string or matching function\n *\n * @param {Element} element The child element to find a parent of\n * @param {String|Function} selector The string or function to use to match\n *     the parent element\n * @return {Element|null}\n */\nfunction closest(element, value) {\n  if (!element) {\n    return null;\n  }\n\n  const selector = value;\n  const callback = value;\n  const nodeList = value;\n  const singleElement = value;\n\n  const isSelector = Boolean(typeof value === 'string');\n  const isFunction = Boolean(typeof value === 'function');\n  const isNodeList = Boolean(value instanceof NodeList || value instanceof Array);\n  const isElement = Boolean(value instanceof HTMLElement);\n\n  function conditionFn(currentElement) {\n    if (!currentElement) {\n      return currentElement;\n    } else if (isSelector) {\n      return matchFunction.call(currentElement, selector);\n    } else if (isNodeList) {\n      return [...nodeList].includes(currentElement);\n    } else if (isElement) {\n      return singleElement === currentElement;\n    } else if (isFunction) {\n      return callback(currentElement);\n    } else {\n      return null;\n    }\n  }\n\n  let current = element;\n\n  do {\n    current = current.correspondingUseElement || current.correspondingElement || current;\n\n    if (conditionFn(current)) {\n      return current;\n    }\n\n    current = current.parentNode;\n  } while (current && current !== document.body && current !== document);\n\n  return null;\n}\n\n/***/ }),\n/* 51 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _closest = __webpack_require__(50);\n\nvar _closest2 = _interopRequireDefault(_closest);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _closest2.default;\n\n/***/ }),\n/* 52 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.defaultOptions = exports.scroll = exports.onDragStop = exports.onDragMove = exports.onDragStart = undefined;\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 _AbstractPlugin = __webpack_require__(1);\n\nvar _AbstractPlugin2 = _interopRequireDefault(_AbstractPlugin);\n\nvar _utils = __webpack_require__(2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onDragStart = exports.onDragStart = Symbol('onDragStart');\nconst onDragMove = exports.onDragMove = Symbol('onDragMove');\nconst onDragStop = exports.onDragStop = Symbol('onDragStop');\nconst scroll = exports.scroll = Symbol('scroll');\n\n/**\n * Scrollable default options\n * @property {Object} defaultOptions\n * @property {Number} defaultOptions.speed\n * @property {Number} defaultOptions.sensitivity\n * @property {HTMLElement[]} defaultOptions.scrollableElements\n * @type {Object}\n */\nconst defaultOptions = exports.defaultOptions = {\n  speed: 6,\n  sensitivity: 50,\n  scrollableElements: []\n};\n\n/**\n * Scrollable plugin which scrolls the closest scrollable parent\n * @class Scrollable\n * @module Scrollable\n * @extends AbstractPlugin\n */\nclass Scrollable extends _AbstractPlugin2.default {\n  /**\n   * Scrollable constructor.\n   * @constructs Scrollable\n   * @param {Draggable} draggable - Draggable instance\n   */\n  constructor(draggable) {\n    super(draggable);\n\n    /**\n     * Scrollable options\n     * @property {Object} options\n     * @property {Number} options.speed\n     * @property {Number} options.sensitivity\n     * @property {HTMLElement[]} options.scrollableElements\n     * @type {Object}\n     */\n    this.options = _extends({}, defaultOptions, this.getOptions());\n\n    /**\n     * Keeps current mouse position\n     * @property {Object} currentMousePosition\n     * @property {Number} currentMousePosition.clientX\n     * @property {Number} currentMousePosition.clientY\n     * @type {Object|null}\n     */\n    this.currentMousePosition = null;\n\n    /**\n     * Scroll animation frame\n     * @property scrollAnimationFrame\n     * @type {Number|null}\n     */\n    this.scrollAnimationFrame = null;\n\n    /**\n     * Closest scrollable element\n     * @property scrollableElement\n     * @type {HTMLElement|null}\n     */\n    this.scrollableElement = null;\n\n    /**\n     * Animation frame looking for the closest scrollable element\n     * @property findScrollableElementFrame\n     * @type {Number|null}\n     */\n    this.findScrollableElementFrame = null;\n\n    this[onDragStart] = this[onDragStart].bind(this);\n    this[onDragMove] = this[onDragMove].bind(this);\n    this[onDragStop] = this[onDragStop].bind(this);\n    this[scroll] = this[scroll].bind(this);\n  }\n\n  /**\n   * Attaches plugins event listeners\n   */\n  attach() {\n    this.draggable.on('drag:start', this[onDragStart]).on('drag:move', this[onDragMove]).on('drag:stop', this[onDragStop]);\n  }\n\n  /**\n   * Detaches plugins event listeners\n   */\n  detach() {\n    this.draggable.off('drag:start', this[onDragStart]).off('drag:move', this[onDragMove]).off('drag:stop', this[onDragStop]);\n  }\n\n  /**\n   * Returns options passed through draggable\n   * @return {Object}\n   */\n  getOptions() {\n    return this.draggable.options.scrollable || {};\n  }\n\n  /**\n   * Returns closest scrollable elements by element\n   * @param {HTMLElement} target\n   * @return {HTMLElement}\n   */\n  getScrollableElement(target) {\n    if (this.hasDefinedScrollableElements()) {\n      return (0, _utils.closest)(target, this.options.scrollableElements) || document.documentElement;\n    } else {\n      return closestScrollableElement(target);\n    }\n  }\n\n  /**\n   * Returns true if at least one scrollable element have been defined via options\n   * @param {HTMLElement} target\n   * @return {Boolean}\n   */\n  hasDefinedScrollableElements() {\n    return Boolean(this.options.scrollableElements.length !== 0);\n  }\n\n  /**\n   * Drag start handler. Finds closest scrollable parent in separate frame\n   * @param {DragStartEvent} dragEvent\n   * @private\n   */\n  [onDragStart](dragEvent) {\n    this.findScrollableElementFrame = requestAnimationFrame(() => {\n      this.scrollableElement = this.getScrollableElement(dragEvent.source);\n    });\n  }\n\n  /**\n   * Drag move handler. Remembers mouse position and initiates scrolling\n   * @param {DragMoveEvent} dragEvent\n   * @private\n   */\n  [onDragMove](dragEvent) {\n    this.findScrollableElementFrame = requestAnimationFrame(() => {\n      this.scrollableElement = this.getScrollableElement(dragEvent.sensorEvent.target);\n    });\n\n    if (!this.scrollableElement) {\n      return;\n    }\n\n    const sensorEvent = dragEvent.sensorEvent;\n    const scrollOffset = { x: 0, y: 0 };\n\n    if ('ontouchstart' in window) {\n      scrollOffset.y = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;\n      scrollOffset.x = window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0;\n    }\n\n    this.currentMousePosition = {\n      clientX: sensorEvent.clientX - scrollOffset.x,\n      clientY: sensorEvent.clientY - scrollOffset.y\n    };\n\n    this.scrollAnimationFrame = requestAnimationFrame(this[scroll]);\n  }\n\n  /**\n   * Drag stop handler. Cancels scroll animations and resets state\n   * @private\n   */\n  [onDragStop]() {\n    cancelAnimationFrame(this.scrollAnimationFrame);\n    cancelAnimationFrame(this.findScrollableElementFrame);\n\n    this.scrollableElement = null;\n    this.scrollAnimationFrame = null;\n    this.findScrollableElementFrame = null;\n    this.currentMousePosition = null;\n  }\n\n  /**\n   * Scroll function that does the heavylifting\n   * @private\n   */\n  [scroll]() {\n    if (!this.scrollableElement || !this.currentMousePosition) {\n      return;\n    }\n\n    cancelAnimationFrame(this.scrollAnimationFrame);\n\n    const { speed, sensitivity } = this.options;\n\n    const rect = this.scrollableElement.getBoundingClientRect();\n    const bottomCutOff = rect.bottom > window.innerHeight;\n    const topCutOff = rect.top < 0;\n    const cutOff = topCutOff || bottomCutOff;\n\n    const documentScrollingElement = getDocumentScrollingElement();\n    const scrollableElement = this.scrollableElement;\n    const clientX = this.currentMousePosition.clientX;\n    const clientY = this.currentMousePosition.clientY;\n\n    if (scrollableElement !== document.body && scrollableElement !== document.documentElement && !cutOff) {\n      const { offsetHeight, offsetWidth } = scrollableElement;\n\n      if (rect.top + offsetHeight - clientY < sensitivity) {\n        scrollableElement.scrollTop += speed;\n      } else if (clientY - rect.top < sensitivity) {\n        scrollableElement.scrollTop -= speed;\n      }\n\n      if (rect.left + offsetWidth - clientX < sensitivity) {\n        scrollableElement.scrollLeft += speed;\n      } else if (clientX - rect.left < sensitivity) {\n        scrollableElement.scrollLeft -= speed;\n      }\n    } else {\n      const { innerHeight, innerWidth } = window;\n\n      if (clientY < sensitivity) {\n        documentScrollingElement.scrollTop -= speed;\n      } else if (innerHeight - clientY < sensitivity) {\n        documentScrollingElement.scrollTop += speed;\n      }\n\n      if (clientX < sensitivity) {\n        documentScrollingElement.scrollLeft -= speed;\n      } else if (innerWidth - clientX < sensitivity) {\n        documentScrollingElement.scrollLeft += speed;\n      }\n    }\n\n    this.scrollAnimationFrame = requestAnimationFrame(this[scroll]);\n  }\n}\n\nexports.default = Scrollable; /**\n                               * Returns true if the passed element has overflow\n                               * @param {HTMLElement} element\n                               * @return {Boolean}\n                               * @private\n                               */\n\nfunction hasOverflow(element) {\n  const overflowRegex = /(auto|scroll)/;\n  const computedStyles = getComputedStyle(element, null);\n\n  const overflow = computedStyles.getPropertyValue('overflow') + computedStyles.getPropertyValue('overflow-y') + computedStyles.getPropertyValue('overflow-x');\n\n  return overflowRegex.test(overflow);\n}\n\n/**\n * Returns true if the passed element is statically positioned\n * @param {HTMLElement} element\n * @return {Boolean}\n * @private\n */\nfunction isStaticallyPositioned(element) {\n  const position = getComputedStyle(element).getPropertyValue('position');\n  return position === 'static';\n}\n\n/**\n * Finds closest scrollable element\n * @param {HTMLElement} element\n * @return {HTMLElement}\n * @private\n */\nfunction closestScrollableElement(element) {\n  if (!element) {\n    return getDocumentScrollingElement();\n  }\n\n  const position = getComputedStyle(element).getPropertyValue('position');\n  const excludeStaticParents = position === 'absolute';\n\n  const scrollableElement = (0, _utils.closest)(element, parent => {\n    if (excludeStaticParents && isStaticallyPositioned(parent)) {\n      return false;\n    }\n    return hasOverflow(parent);\n  });\n\n  if (position === 'fixed' || !scrollableElement) {\n    return getDocumentScrollingElement();\n  } else {\n    return scrollableElement;\n  }\n}\n\n/**\n * Returns element that scrolls document\n * @return {HTMLElement}\n * @private\n */\nfunction getDocumentScrollingElement() {\n  return document.scrollingElement || document.documentElement;\n}\n\n/***/ }),\n/* 53 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.defaultOptions = undefined;\n\nvar _Scrollable = __webpack_require__(52);\n\nvar _Scrollable2 = _interopRequireDefault(_Scrollable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Scrollable2.default;\nexports.defaultOptions = _Scrollable.defaultOptions;\n\n/***/ }),\n/* 54 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.MirrorDestroyEvent = exports.MirrorMoveEvent = exports.MirrorAttachedEvent = exports.MirrorCreatedEvent = exports.MirrorCreateEvent = exports.MirrorEvent = undefined;\n\nvar _AbstractEvent = __webpack_require__(0);\n\nvar _AbstractEvent2 = _interopRequireDefault(_AbstractEvent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Base mirror event\n * @class MirrorEvent\n * @module MirrorEvent\n * @extends AbstractEvent\n */\nclass MirrorEvent extends _AbstractEvent2.default {\n  /**\n   * Draggables source element\n   * @property source\n   * @type {HTMLElement}\n   * @readonly\n   */\n  get source() {\n    return this.data.source;\n  }\n\n  /**\n   * Draggables original source element\n   * @property originalSource\n   * @type {HTMLElement}\n   * @readonly\n   */\n  get originalSource() {\n    return this.data.originalSource;\n  }\n\n  /**\n   * Draggables source container element\n   * @property sourceContainer\n   * @type {HTMLElement}\n   * @readonly\n   */\n  get sourceContainer() {\n    return this.data.sourceContainer;\n  }\n\n  /**\n   * Sensor event\n   * @property sensorEvent\n   * @type {SensorEvent}\n   * @readonly\n   */\n  get sensorEvent() {\n    return this.data.sensorEvent;\n  }\n\n  /**\n   * Drag event\n   * @property dragEvent\n   * @type {DragEvent}\n   * @readonly\n   */\n  get dragEvent() {\n    return this.data.dragEvent;\n  }\n\n  /**\n   * Original event that triggered sensor event\n   * @property originalEvent\n   * @type {Event}\n   * @readonly\n   */\n  get originalEvent() {\n    if (this.sensorEvent) {\n      return this.sensorEvent.originalEvent;\n    }\n\n    return null;\n  }\n}\n\nexports.MirrorEvent = MirrorEvent; /**\n                                    * Mirror create event\n                                    * @class MirrorCreateEvent\n                                    * @module MirrorCreateEvent\n                                    * @extends MirrorEvent\n                                    */\n\nclass MirrorCreateEvent extends MirrorEvent {}\n\nexports.MirrorCreateEvent = MirrorCreateEvent; /**\n                                                * Mirror created event\n                                                * @class MirrorCreatedEvent\n                                                * @module MirrorCreatedEvent\n                                                * @extends MirrorEvent\n                                                */\n\nMirrorCreateEvent.type = 'mirror:create';\nclass MirrorCreatedEvent extends MirrorEvent {\n\n  /**\n   * Draggables mirror element\n   * @property mirror\n   * @type {HTMLElement}\n   * @readonly\n   */\n  get mirror() {\n    return this.data.mirror;\n  }\n}\n\nexports.MirrorCreatedEvent = MirrorCreatedEvent; /**\n                                                  * Mirror attached event\n                                                  * @class MirrorAttachedEvent\n                                                  * @module MirrorAttachedEvent\n                                                  * @extends MirrorEvent\n                                                  */\n\nMirrorCreatedEvent.type = 'mirror:created';\nclass MirrorAttachedEvent extends MirrorEvent {\n\n  /**\n   * Draggables mirror element\n   * @property mirror\n   * @type {HTMLElement}\n   * @readonly\n   */\n  get mirror() {\n    return this.data.mirror;\n  }\n}\n\nexports.MirrorAttachedEvent = MirrorAttachedEvent; /**\n                                                    * Mirror move event\n                                                    * @class MirrorMoveEvent\n                                                    * @module MirrorMoveEvent\n                                                    * @extends MirrorEvent\n                                                    */\n\nMirrorAttachedEvent.type = 'mirror:attached';\nclass MirrorMoveEvent extends MirrorEvent {\n\n  /**\n   * Draggables mirror element\n   * @property mirror\n   * @type {HTMLElement}\n   * @readonly\n   */\n  get mirror() {\n    return this.data.mirror;\n  }\n}\n\nexports.MirrorMoveEvent = MirrorMoveEvent; /**\n                                            * Mirror destroy event\n                                            * @class MirrorDestroyEvent\n                                            * @module MirrorDestroyEvent\n                                            * @extends MirrorEvent\n                                            */\n\nMirrorMoveEvent.type = 'mirror:move';\nMirrorMoveEvent.cancelable = true;\nclass MirrorDestroyEvent extends MirrorEvent {\n\n  /**\n   * Draggables mirror element\n   * @property mirror\n   * @type {HTMLElement}\n   * @readonly\n   */\n  get mirror() {\n    return this.data.mirror;\n  }\n}\nexports.MirrorDestroyEvent = MirrorDestroyEvent;\nMirrorDestroyEvent.type = 'mirror:destroy';\nMirrorDestroyEvent.cancelable = true;\n\n/***/ }),\n/* 55 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _MirrorEvent = __webpack_require__(54);\n\nObject.keys(_MirrorEvent).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function () {\n      return _MirrorEvent[key];\n    }\n  });\n});\n\n/***/ }),\n/* 56 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.defaultOptions = exports.getAppendableContainer = exports.onScroll = exports.onMirrorMove = exports.onMirrorCreated = exports.onDragStop = exports.onDragMove = exports.onDragStart = undefined;\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 _AbstractPlugin = __webpack_require__(1);\n\nvar _AbstractPlugin2 = _interopRequireDefault(_AbstractPlugin);\n\nvar _MirrorEvent = __webpack_require__(55);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nconst onDragStart = exports.onDragStart = Symbol('onDragStart');\nconst onDragMove = exports.onDragMove = Symbol('onDragMove');\nconst onDragStop = exports.onDragStop = Symbol('onDragStop');\nconst onMirrorCreated = exports.onMirrorCreated = Symbol('onMirrorCreated');\nconst onMirrorMove = exports.onMirrorMove = Symbol('onMirrorMove');\nconst onScroll = exports.onScroll = Symbol('onScroll');\nconst getAppendableContainer = exports.getAppendableContainer = Symbol('getAppendableContainer');\n\n/**\n * Mirror default options\n * @property {Object} defaultOptions\n * @property {Boolean} defaultOptions.constrainDimensions\n * @property {Boolean} defaultOptions.xAxis\n * @property {Boolean} defaultOptions.yAxis\n * @property {null} defaultOptions.cursorOffsetX\n * @property {null} defaultOptions.cursorOffsetY\n * @type {Object}\n */\nconst defaultOptions = exports.defaultOptions = {\n  constrainDimensions: false,\n  xAxis: true,\n  yAxis: true,\n  cursorOffsetX: null,\n  cursorOffsetY: null\n};\n\n/**\n * Mirror plugin which controls the mirror positioning while dragging\n * @class Mirror\n * @module Mirror\n * @extends AbstractPlugin\n */\nclass Mirror extends _AbstractPlugin2.default {\n  /**\n   * Mirror constructor.\n   * @constructs Mirror\n   * @param {Draggable} draggable - Draggable instance\n   */\n  constructor(draggable) {\n    super(draggable);\n\n    /**\n     * Mirror options\n     * @property {Object} options\n     * @property {Boolean} options.constrainDimensions\n     * @property {Boolean} options.xAxis\n     * @property {Boolean} options.yAxis\n     * @property {Number|null} options.cursorOffsetX\n     * @property {Number|null} options.cursorOffsetY\n     * @property {String|HTMLElement|Function} options.appendTo\n     * @type {Object}\n     */\n    this.options = _extends({}, defaultOptions, this.getOptions());\n\n    /**\n     * Scroll offset for touch devices because the mirror is positioned fixed\n     * @property {Object} scrollOffset\n     * @property {Number} scrollOffset.x\n     * @property {Number} scrollOffset.y\n     */\n    this.scrollOffset = { x: 0, y: 0 };\n\n    /**\n     * Initial scroll offset for touch devices because the mirror is positioned fixed\n     * @property {Object} scrollOffset\n     * @property {Number} scrollOffset.x\n     * @property {Number} scrollOffset.y\n     */\n    this.initialScrollOffset = {\n      x: window.scrollX,\n      y: window.scrollY\n    };\n\n    this[onDragStart] = this[onDragStart].bind(this);\n    this[onDragMove] = this[onDragMove].bind(this);\n    this[onDragStop] = this[onDragStop].bind(this);\n    this[onMirrorCreated] = this[onMirrorCreated].bind(this);\n    this[onMirrorMove] = this[onMirrorMove].bind(this);\n    this[onScroll] = this[onScroll].bind(this);\n  }\n\n  /**\n   * Attaches plugins event listeners\n   */\n  attach() {\n    this.draggable.on('drag:start', this[onDragStart]).on('drag:move', this[onDragMove]).on('drag:stop', this[onDragStop]).on('mirror:created', this[onMirrorCreated]).on('mirror:move', this[onMirrorMove]);\n  }\n\n  /**\n   * Detaches plugins event listeners\n   */\n  detach() {\n    this.draggable.off('drag:start', this[onDragStart]).off('drag:move', this[onDragMove]).off('drag:stop', this[onDragStop]).off('mirror:created', this[onMirrorCreated]).off('mirror:move', this[onMirrorMove]);\n  }\n\n  /**\n   * Returns options passed through draggable\n   * @return {Object}\n   */\n  getOptions() {\n    return this.draggable.options.mirror || {};\n  }\n\n  [onDragStart](dragEvent) {\n    if (dragEvent.canceled()) {\n      return;\n    }\n\n    if ('ontouchstart' in window) {\n      document.addEventListener('scroll', this[onScroll], true);\n    }\n\n    this.initialScrollOffset = {\n      x: window.scrollX,\n      y: window.scrollY\n    };\n\n    const { source, originalSource, sourceContainer, sensorEvent } = dragEvent;\n\n    const mirrorCreateEvent = new _MirrorEvent.MirrorCreateEvent({\n      source,\n      originalSource,\n      sourceContainer,\n      sensorEvent,\n      dragEvent\n    });\n\n    this.draggable.trigger(mirrorCreateEvent);\n\n    if (isNativeDragEvent(sensorEvent) || mirrorCreateEvent.canceled()) {\n      return;\n    }\n\n    const appendableContainer = this[getAppendableContainer](source) || sourceContainer;\n    this.mirror = source.cloneNode(true);\n\n    const mirrorCreatedEvent = new _MirrorEvent.MirrorCreatedEvent({\n      source,\n      originalSource,\n      sourceContainer,\n      sensorEvent,\n      dragEvent,\n      mirror: this.mirror\n    });\n\n    const mirrorAttachedEvent = new _MirrorEvent.MirrorAttachedEvent({\n      source,\n      originalSource,\n      sourceContainer,\n      sensorEvent,\n      dragEvent,\n      mirror: this.mirror\n    });\n\n    this.draggable.trigger(mirrorCreatedEvent);\n    appendableContainer.appendChild(this.mirror);\n    this.draggable.trigger(mirrorAttachedEvent);\n  }\n\n  [onDragMove](dragEvent) {\n    if (!this.mirror || dragEvent.canceled()) {\n      return;\n    }\n\n    const { source, originalSource, sourceContainer, sensorEvent } = dragEvent;\n\n    const mirrorMoveEvent = new _MirrorEvent.MirrorMoveEvent({\n      source,\n      originalSource,\n      sourceContainer,\n      sensorEvent,\n      dragEvent,\n      mirror: this.mirror\n    });\n\n    this.draggable.trigger(mirrorMoveEvent);\n  }\n\n  [onDragStop](dragEvent) {\n    if ('ontouchstart' in window) {\n      document.removeEventListener('scroll', this[onScroll], true);\n    }\n\n    this.initialScrollOffset = { x: 0, y: 0 };\n    this.scrollOffset = { x: 0, y: 0 };\n\n    if (!this.mirror) {\n      return;\n    }\n\n    const { source, sourceContainer, sensorEvent } = dragEvent;\n\n    const mirrorDestroyEvent = new _MirrorEvent.MirrorDestroyEvent({\n      source,\n      mirror: this.mirror,\n      sourceContainer,\n      sensorEvent,\n      dragEvent\n    });\n\n    this.draggable.trigger(mirrorDestroyEvent);\n\n    if (!mirrorDestroyEvent.canceled()) {\n      this.mirror.parentNode.removeChild(this.mirror);\n    }\n  }\n\n  [onScroll]() {\n    this.scrollOffset = {\n      x: window.scrollX - this.initialScrollOffset.x,\n      y: window.scrollY - this.initialScrollOffset.y\n    };\n  }\n\n  /**\n   * Mirror created handler\n   * @param {MirrorCreatedEvent} mirrorEvent\n   * @return {Promise}\n   * @private\n   */\n  [onMirrorCreated]({ mirror, source, sensorEvent }) {\n    const mirrorClass = this.draggable.getClassNameFor('mirror');\n\n    const setState = (_ref) => {\n      let { mirrorOffset, initialX, initialY } = _ref,\n          args = _objectWithoutProperties(_ref, ['mirrorOffset', 'initialX', 'initialY']);\n\n      this.mirrorOffset = mirrorOffset;\n      this.initialX = initialX;\n      this.initialY = initialY;\n      return _extends({ mirrorOffset, initialX, initialY }, args);\n    };\n\n    const initialState = {\n      mirror,\n      source,\n      sensorEvent,\n      mirrorClass,\n      scrollOffset: this.scrollOffset,\n      options: this.options\n    };\n\n    return Promise.resolve(initialState)\n    // Fix reflow here\n    .then(computeMirrorDimensions).then(calculateMirrorOffset).then(resetMirror).then(addMirrorClasses).then(positionMirror({ initial: true })).then(removeMirrorID).then(setState);\n  }\n\n  /**\n   * Mirror move handler\n   * @param {MirrorMoveEvent} mirrorEvent\n   * @return {Promise|null}\n   * @private\n   */\n  [onMirrorMove](mirrorEvent) {\n    if (mirrorEvent.canceled()) {\n      return null;\n    }\n\n    const initialState = {\n      mirror: mirrorEvent.mirror,\n      sensorEvent: mirrorEvent.sensorEvent,\n      mirrorOffset: this.mirrorOffset,\n      options: this.options,\n      initialX: this.initialX,\n      initialY: this.initialY,\n      scrollOffset: this.scrollOffset\n    };\n\n    return Promise.resolve(initialState).then(positionMirror({ raf: true }));\n  }\n\n  /**\n   * Returns appendable container for mirror based on the appendTo option\n   * @private\n   * @param {Object} options\n   * @param {HTMLElement} options.source - Current source\n   * @return {HTMLElement}\n   */\n  [getAppendableContainer](source) {\n    const appendTo = this.options.appendTo;\n\n    if (typeof appendTo === 'string') {\n      return document.querySelector(appendTo);\n    } else if (appendTo instanceof HTMLElement) {\n      return appendTo;\n    } else if (typeof appendTo === 'function') {\n      return appendTo(source);\n    } else {\n      return source.parentNode;\n    }\n  }\n}\n\nexports.default = Mirror; /**\n                           * Computes mirror dimensions based on the source element\n                           * Adds sourceRect to state\n                           * @param {Object} state\n                           * @param {HTMLElement} state.source\n                           * @return {Promise}\n                           * @private\n                           */\n\nfunction computeMirrorDimensions(_ref2) {\n  let { source } = _ref2,\n      args = _objectWithoutProperties(_ref2, ['source']);\n\n  return withPromise(resolve => {\n    const sourceRect = source.getBoundingClientRect();\n    resolve(_extends({ source, sourceRect }, args));\n  });\n}\n\n/**\n * Calculates mirror offset\n * Adds mirrorOffset to state\n * @param {Object} state\n * @param {SensorEvent} state.sensorEvent\n * @param {DOMRect} state.sourceRect\n * @return {Promise}\n * @private\n */\nfunction calculateMirrorOffset(_ref3) {\n  let { sensorEvent, sourceRect, options } = _ref3,\n      args = _objectWithoutProperties(_ref3, ['sensorEvent', 'sourceRect', 'options']);\n\n  return withPromise(resolve => {\n    const top = options.cursorOffsetY === null ? sensorEvent.clientY - sourceRect.top : options.cursorOffsetY;\n    const left = options.cursorOffsetX === null ? sensorEvent.clientX - sourceRect.left : options.cursorOffsetX;\n\n    const mirrorOffset = { top, left };\n\n    resolve(_extends({ sensorEvent, sourceRect, mirrorOffset, options }, args));\n  });\n}\n\n/**\n * Applys mirror styles\n * @param {Object} state\n * @param {HTMLElement} state.mirror\n * @param {HTMLElement} state.source\n * @param {Object} state.options\n * @return {Promise}\n * @private\n */\nfunction resetMirror(_ref4) {\n  let { mirror, source, options } = _ref4,\n      args = _objectWithoutProperties(_ref4, ['mirror', 'source', 'options']);\n\n  return withPromise(resolve => {\n    let offsetHeight;\n    let offsetWidth;\n\n    if (options.constrainDimensions) {\n      const computedSourceStyles = getComputedStyle(source);\n      offsetHeight = computedSourceStyles.getPropertyValue('height');\n      offsetWidth = computedSourceStyles.getPropertyValue('width');\n    }\n\n    mirror.style.position = 'fixed';\n    mirror.style.pointerEvents = 'none';\n    mirror.style.top = 0;\n    mirror.style.left = 0;\n    mirror.style.margin = 0;\n\n    if (options.constrainDimensions) {\n      mirror.style.height = offsetHeight;\n      mirror.style.width = offsetWidth;\n    }\n\n    resolve(_extends({ mirror, source, options }, args));\n  });\n}\n\n/**\n * Applys mirror class on mirror element\n * @param {Object} state\n * @param {HTMLElement} state.mirror\n * @param {String} state.mirrorClass\n * @return {Promise}\n * @private\n */\nfunction addMirrorClasses(_ref5) {\n  let { mirror, mirrorClass } = _ref5,\n      args = _objectWithoutProperties(_ref5, ['mirror', 'mirrorClass']);\n\n  return withPromise(resolve => {\n    mirror.classList.add(mirrorClass);\n    resolve(_extends({ mirror, mirrorClass }, args));\n  });\n}\n\n/**\n * Removes source ID from cloned mirror element\n * @param {Object} state\n * @param {HTMLElement} state.mirror\n * @return {Promise}\n * @private\n */\nfunction removeMirrorID(_ref6) {\n  let { mirror } = _ref6,\n      args = _objectWithoutProperties(_ref6, ['mirror']);\n\n  return withPromise(resolve => {\n    mirror.removeAttribute('id');\n    delete mirror.id;\n    resolve(_extends({ mirror }, args));\n  });\n}\n\n/**\n * Positions mirror with translate3d\n * @param {Object} state\n * @param {HTMLElement} state.mirror\n * @param {SensorEvent} state.sensorEvent\n * @param {Object} state.mirrorOffset\n * @param {Number} state.initialY\n * @param {Number} state.initialX\n * @param {Object} state.options\n * @return {Promise}\n * @private\n */\nfunction positionMirror({ withFrame = false, initial = false } = {}) {\n  return (_ref7) => {\n    let { mirror, sensorEvent, mirrorOffset, initialY, initialX, scrollOffset, options } = _ref7,\n        args = _objectWithoutProperties(_ref7, ['mirror', 'sensorEvent', 'mirrorOffset', 'initialY', 'initialX', 'scrollOffset', 'options']);\n\n    return withPromise(resolve => {\n      const result = _extends({\n        mirror,\n        sensorEvent,\n        mirrorOffset,\n        options\n      }, args);\n\n      if (mirrorOffset) {\n        const x = sensorEvent.clientX - mirrorOffset.left - scrollOffset.x;\n        const y = sensorEvent.clientY - mirrorOffset.top - scrollOffset.y;\n\n        if (options.xAxis && options.yAxis || initial) {\n          mirror.style.transform = `translate3d(${x}px, ${y}px, 0)`;\n        } else if (options.xAxis && !options.yAxis) {\n          mirror.style.transform = `translate3d(${x}px, ${initialY}px, 0)`;\n        } else if (options.yAxis && !options.xAxis) {\n          mirror.style.transform = `translate3d(${initialX}px, ${y}px, 0)`;\n        }\n\n        if (initial) {\n          result.initialX = x;\n          result.initialY = y;\n        }\n      }\n\n      resolve(result);\n    }, { frame: withFrame });\n  };\n}\n\n/**\n * Wraps functions in promise with potential animation frame option\n * @param {Function} callback\n * @param {Object} options\n * @param {Boolean} options.raf\n * @return {Promise}\n * @private\n */\nfunction withPromise(callback, { raf = false } = {}) {\n  return new Promise((resolve, reject) => {\n    if (raf) {\n      requestAnimationFrame(() => {\n        callback(resolve, reject);\n      });\n    } else {\n      callback(resolve, reject);\n    }\n  });\n}\n\n/**\n * Returns true if the sensor event was triggered by a native browser drag event\n * @param {SensorEvent} sensorEvent\n */\nfunction isNativeDragEvent(sensorEvent) {\n  return (/^drag/.test(sensorEvent.originalEvent.type)\n  );\n}\n\n/***/ }),\n/* 57 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.defaultOptions = undefined;\n\nvar _Mirror = __webpack_require__(56);\n\nvar _Mirror2 = _interopRequireDefault(_Mirror);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Mirror2.default;\nexports.defaultOptions = _Mirror.defaultOptions;\n\n/***/ }),\n/* 58 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\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 _AbstractPlugin = __webpack_require__(1);\n\nvar _AbstractPlugin2 = _interopRequireDefault(_AbstractPlugin);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onInitialize = Symbol('onInitialize');\nconst onDestroy = Symbol('onDestroy');\n\n/**\n * Focusable default options\n * @property {Object} defaultOptions\n * @type {Object}\n */\nconst defaultOptions = {};\n\n/**\n * Focusable plugin\n * @class Focusable\n * @module Focusable\n * @extends AbstractPlugin\n */\nclass Focusable extends _AbstractPlugin2.default {\n  /**\n   * Focusable constructor.\n   * @constructs Focusable\n   * @param {Draggable} draggable - Draggable instance\n   */\n  constructor(draggable) {\n    super(draggable);\n\n    /**\n     * Focusable options\n     * @property {Object} options\n     * @type {Object}\n     */\n    this.options = _extends({}, defaultOptions, this.getOptions());\n\n    this[onInitialize] = this[onInitialize].bind(this);\n    this[onDestroy] = this[onDestroy].bind(this);\n  }\n\n  /**\n   * Attaches listeners to draggable\n   */\n  attach() {\n    this.draggable.on('draggable:initialize', this[onInitialize]).on('draggable:destroy', this[onDestroy]);\n  }\n\n  /**\n   * Detaches listeners from draggable\n   */\n  detach() {\n    this.draggable.off('draggable:initialize', this[onInitialize]).off('draggable:destroy', this[onDestroy]);\n  }\n\n  /**\n   * Returns options passed through draggable\n   * @return {Object}\n   */\n  getOptions() {\n    return this.draggable.options.focusable || {};\n  }\n\n  /**\n   * Returns draggable containers and elements\n   * @return {HTMLElement[]}\n   */\n  getElements() {\n    return [...this.draggable.containers, ...this.draggable.getDraggableElements()];\n  }\n\n  /**\n   * Intialize handler\n   * @private\n   */\n  [onInitialize]() {\n    // Can wait until the next best frame is available\n    requestAnimationFrame(() => {\n      this.getElements().forEach(element => decorateElement(element));\n    });\n  }\n\n  /**\n   * Destroy handler\n   * @private\n   */\n  [onDestroy]() {\n    // Can wait until the next best frame is available\n    requestAnimationFrame(() => {\n      this.getElements().forEach(element => stripElement(element));\n    });\n  }\n}\n\nexports.default = Focusable; /**\n                              * Keeps track of all the elements that are missing tabindex attributes\n                              * so they can be reset when draggable gets destroyed\n                              * @const {HTMLElement[]} elementsWithMissingTabIndex\n                              */\n\nconst elementsWithMissingTabIndex = [];\n\n/**\n * Decorates element with tabindex attributes\n * @param {HTMLElement} element\n * @return {Object}\n * @private\n */\nfunction decorateElement(element) {\n  const hasMissingTabIndex = Boolean(!element.getAttribute('tabindex') && element.tabIndex === -1);\n\n  if (hasMissingTabIndex) {\n    elementsWithMissingTabIndex.push(element);\n    element.tabIndex = 0;\n  }\n}\n\n/**\n * Removes elements tabindex attributes\n * @param {HTMLElement} element\n * @private\n */\nfunction stripElement(element) {\n  const tabIndexElementPosition = elementsWithMissingTabIndex.indexOf(element);\n\n  if (tabIndexElementPosition !== -1) {\n    element.tabIndex = -1;\n    elementsWithMissingTabIndex.splice(tabIndexElementPosition, 1);\n  }\n}\n\n/***/ }),\n/* 59 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _Focusable = __webpack_require__(58);\n\nvar _Focusable2 = _interopRequireDefault(_Focusable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Focusable2.default;\n\n/***/ }),\n/* 60 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n/**\n * All draggable plugins inherit from this class.\n * @abstract\n * @class AbstractPlugin\n * @module AbstractPlugin\n */\nclass AbstractPlugin {\n  /**\n   * AbstractPlugin constructor.\n   * @constructs AbstractPlugin\n   * @param {Draggable} draggable - Draggable instance\n   */\n  constructor(draggable) {\n    /**\n     * Draggable instance\n     * @property draggable\n     * @type {Draggable}\n     */\n    this.draggable = draggable;\n  }\n\n  /**\n   * Override to add listeners\n   * @abstract\n   */\n  attach() {\n    throw new Error('Not Implemented');\n  }\n\n  /**\n   * Override to remove listeners\n   * @abstract\n   */\n  detach() {\n    throw new Error('Not Implemented');\n  }\n}\nexports.default = AbstractPlugin;\n\n/***/ }),\n/* 61 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.defaultOptions = undefined;\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 _AbstractPlugin = __webpack_require__(1);\n\nvar _AbstractPlugin2 = _interopRequireDefault(_AbstractPlugin);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst onInitialize = Symbol('onInitialize');\nconst onDestroy = Symbol('onDestroy');\nconst announceEvent = Symbol('announceEvent');\nconst announceMessage = Symbol('announceMessage');\n\nconst ARIA_RELEVANT = 'aria-relevant';\nconst ARIA_ATOMIC = 'aria-atomic';\nconst ARIA_LIVE = 'aria-live';\nconst ROLE = 'role';\n\n/**\n * Announcement default options\n * @property {Object} defaultOptions\n * @property {Number} defaultOptions.expire\n * @type {Object}\n */\nconst defaultOptions = exports.defaultOptions = {\n  expire: 7000\n};\n\n/**\n * Announcement plugin\n * @class Announcement\n * @module Announcement\n * @extends AbstractPlugin\n */\nclass Announcement extends _AbstractPlugin2.default {\n  /**\n   * Announcement constructor.\n   * @constructs Announcement\n   * @param {Draggable} draggable - Draggable instance\n   */\n  constructor(draggable) {\n    super(draggable);\n\n    /**\n     * Plugin options\n     * @property options\n     * @type {Object}\n     */\n    this.options = _extends({}, defaultOptions, this.getOptions());\n\n    /**\n     * Original draggable trigger method. Hack until we have onAll or on('all')\n     * @property originalTriggerMethod\n     * @type {Function}\n     */\n    this.originalTriggerMethod = this.draggable.trigger;\n\n    this[onInitialize] = this[onInitialize].bind(this);\n    this[onDestroy] = this[onDestroy].bind(this);\n  }\n\n  /**\n   * Attaches listeners to draggable\n   */\n  attach() {\n    this.draggable.on('draggable:initialize', this[onInitialize]);\n  }\n\n  /**\n   * Detaches listeners from draggable\n   */\n  detach() {\n    this.draggable.off('draggable:destroy', this[onDestroy]);\n  }\n\n  /**\n   * Returns passed in options\n   */\n  getOptions() {\n    return this.draggable.options.announcements || {};\n  }\n\n  /**\n   * Announces event\n   * @private\n   * @param {AbstractEvent} event\n   */\n  [announceEvent](event) {\n    const message = this.options[event.type];\n\n    if (message && typeof message === 'string') {\n      this[announceMessage](message);\n    }\n\n    if (message && typeof message === 'function') {\n      this[announceMessage](message(event));\n    }\n  }\n\n  /**\n   * Announces message to screen reader\n   * @private\n   * @param {String} message\n   */\n  [announceMessage](message) {\n    announce(message, { expire: this.options.expire });\n  }\n\n  /**\n   * Initialize hander\n   * @private\n   */\n  [onInitialize]() {\n    // Hack until there is an api for listening for all events\n    this.draggable.trigger = event => {\n      try {\n        this[announceEvent](event);\n      } finally {\n        // Ensure that original trigger is called\n        this.originalTriggerMethod.call(this.draggable, event);\n      }\n    };\n  }\n\n  /**\n   * Destroy hander\n   * @private\n   */\n  [onDestroy]() {\n    this.draggable.trigger = this.originalTriggerMethod;\n  }\n}\n\nexports.default = Announcement; /**\n                                 * @const {HTMLElement} liveRegion\n                                 */\n\nconst liveRegion = createRegion();\n\n/**\n * Announces message via live region\n * @param {String} message\n * @param {Object} options\n * @param {Number} options.expire\n */\nfunction announce(message, { expire }) {\n  const element = document.createElement('div');\n\n  element.textContent = message;\n  liveRegion.appendChild(element);\n\n  return setTimeout(() => {\n    liveRegion.removeChild(element);\n  }, expire);\n}\n\n/**\n * Creates region element\n * @return {HTMLElement}\n */\nfunction createRegion() {\n  const element = document.createElement('div');\n\n  element.setAttribute('id', 'draggable-live-region');\n  element.setAttribute(ARIA_RELEVANT, 'additions');\n  element.setAttribute(ARIA_ATOMIC, 'true');\n  element.setAttribute(ARIA_LIVE, 'assertive');\n  element.setAttribute(ROLE, 'log');\n\n  element.style.position = 'fixed';\n  element.style.width = '1px';\n  element.style.height = '1px';\n  element.style.top = '-1px';\n  element.style.overflow = 'hidden';\n\n  return element;\n}\n\n// Append live region element as early as possible\ndocument.addEventListener('DOMContentLoaded', () => {\n  document.body.appendChild(liveRegion);\n});\n\n/***/ }),\n/* 62 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.defaultOptions = undefined;\n\nvar _Announcement = __webpack_require__(61);\n\nvar _Announcement2 = _interopRequireDefault(_Announcement);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Announcement2.default;\nexports.defaultOptions = _Announcement.defaultOptions;\n\n/***/ }),\n/* 63 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.DraggableDestroyEvent = exports.DraggableInitializedEvent = exports.DraggableEvent = undefined;\n\nvar _AbstractEvent = __webpack_require__(0);\n\nvar _AbstractEvent2 = _interopRequireDefault(_AbstractEvent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Base draggable event\n * @class DraggableEvent\n * @module DraggableEvent\n * @extends AbstractEvent\n */\nclass DraggableEvent extends _AbstractEvent2.default {\n\n  /**\n   * Draggable instance\n   * @property draggable\n   * @type {Draggable}\n   * @readonly\n   */\n  get draggable() {\n    return this.data.draggable;\n  }\n}\n\nexports.DraggableEvent = DraggableEvent; /**\n                                          * Draggable initialized event\n                                          * @class DraggableInitializedEvent\n                                          * @module DraggableInitializedEvent\n                                          * @extends DraggableEvent\n                                          */\n\nDraggableEvent.type = 'draggable';\nclass DraggableInitializedEvent extends DraggableEvent {}\n\nexports.DraggableInitializedEvent = DraggableInitializedEvent; /**\n                                                                * Draggable destory event\n                                                                * @class DraggableInitializedEvent\n                                                                * @module DraggableDestroyEvent\n                                                                * @extends DraggableDestroyEvent\n                                                                */\n\nDraggableInitializedEvent.type = 'draggable:initialize';\nclass DraggableDestroyEvent extends DraggableEvent {}\nexports.DraggableDestroyEvent = DraggableDestroyEvent;\nDraggableDestroyEvent.type = 'draggable:destroy';\n\n/***/ }),\n/* 64 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\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\nconst canceled = Symbol('canceled');\n\n/**\n * All events fired by draggable inherit this class. You can call `cancel()` to\n * cancel a specific event or you can check if an event has been canceled by\n * calling `canceled()`.\n * @abstract\n * @class AbstractEvent\n * @module AbstractEvent\n */\nclass AbstractEvent {\n\n  /**\n   * AbstractEvent constructor.\n   * @constructs AbstractEvent\n   * @param {object} data - Event data\n   */\n\n  /**\n   * Event type\n   * @static\n   * @abstract\n   * @property type\n   * @type {String}\n   */\n  constructor(data) {\n    this[canceled] = false;\n    this.data = data;\n  }\n\n  /**\n   * Read-only type\n   * @abstract\n   * @return {String}\n   */\n\n\n  /**\n   * Event cancelable\n   * @static\n   * @abstract\n   * @property cancelable\n   * @type {Boolean}\n   */\n  get type() {\n    return this.constructor.type;\n  }\n\n  /**\n   * Read-only cancelable\n   * @abstract\n   * @return {Boolean}\n   */\n  get cancelable() {\n    return this.constructor.cancelable;\n  }\n\n  /**\n   * Cancels the event instance\n   * @abstract\n   */\n  cancel() {\n    this[canceled] = true;\n  }\n\n  /**\n   * Check if event has been canceled\n   * @abstract\n   * @return {Boolean}\n   */\n  canceled() {\n    return Boolean(this[canceled]);\n  }\n\n  /**\n   * Returns new event instance with existing event data.\n   * This method allows for overriding of event data.\n   * @param {Object} data\n   * @return {AbstractEvent}\n   */\n  clone(data) {\n    return new this.constructor(_extends({}, this.data, data));\n  }\n}\nexports.default = AbstractEvent;\nAbstractEvent.type = 'event';\nAbstractEvent.cancelable = false;\n\n/***/ }),\n/* 65 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.DragStopEvent = exports.DragPressureEvent = exports.DragOutContainerEvent = exports.DragOverContainerEvent = exports.DragOutEvent = exports.DragOverEvent = exports.DragMoveEvent = exports.DragStartEvent = exports.DragEvent = undefined;\n\nvar _AbstractEvent = __webpack_require__(0);\n\nvar _AbstractEvent2 = _interopRequireDefault(_AbstractEvent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Base drag event\n * @class DragEvent\n * @module DragEvent\n * @extends AbstractEvent\n */\nclass DragEvent extends _AbstractEvent2.default {\n\n  /**\n   * Draggables source element\n   * @property source\n   * @type {HTMLElement}\n   * @readonly\n   */\n  get source() {\n    return this.data.source;\n  }\n\n  /**\n   * Draggables original source element\n   * @property originalSource\n   * @type {HTMLElement}\n   * @readonly\n   */\n  get originalSource() {\n    return this.data.originalSource;\n  }\n\n  /**\n   * Draggables mirror element\n   * @property mirror\n   * @type {HTMLElement}\n   * @readonly\n   */\n  get mirror() {\n    return this.data.mirror;\n  }\n\n  /**\n   * Draggables source container element\n   * @property sourceContainer\n   * @type {HTMLElement}\n   * @readonly\n   */\n  get sourceContainer() {\n    return this.data.sourceContainer;\n  }\n\n  /**\n   * Sensor event\n   * @property sensorEvent\n   * @type {SensorEvent}\n   * @readonly\n   */\n  get sensorEvent() {\n    return this.data.sensorEvent;\n  }\n\n  /**\n   * Original event that triggered sensor event\n   * @property originalEvent\n   * @type {Event}\n   * @readonly\n   */\n  get originalEvent() {\n    if (this.sensorEvent) {\n      return this.sensorEvent.originalEvent;\n    }\n\n    return null;\n  }\n}\n\nexports.DragEvent = DragEvent; /**\n                                * Drag start event\n                                * @class DragStartEvent\n                                * @module DragStartEvent\n                                * @extends DragEvent\n                                */\n\nDragEvent.type = 'drag';\nclass DragStartEvent extends DragEvent {}\n\nexports.DragStartEvent = DragStartEvent; /**\n                                          * Drag move event\n                                          * @class DragMoveEvent\n                                          * @module DragMoveEvent\n                                          * @extends DragEvent\n                                          */\n\nDragStartEvent.type = 'drag:start';\nDragStartEvent.cancelable = true;\nclass DragMoveEvent extends DragEvent {}\n\nexports.DragMoveEvent = DragMoveEvent; /**\n                                        * Drag over event\n                                        * @class DragOverEvent\n                                        * @module DragOverEvent\n                                        * @extends DragEvent\n                                        */\n\nDragMoveEvent.type = 'drag:move';\nclass DragOverEvent extends DragEvent {\n\n  /**\n   * Draggable container you are over\n   * @property overContainer\n   * @type {HTMLElement}\n   * @readonly\n   */\n  get overContainer() {\n    return this.data.overContainer;\n  }\n\n  /**\n   * Draggable element you are over\n   * @property over\n   * @type {HTMLElement}\n   * @readonly\n   */\n  get over() {\n    return this.data.over;\n  }\n}\n\nexports.DragOverEvent = DragOverEvent; /**\n                                        * Drag out event\n                                        * @class DragOutEvent\n                                        * @module DragOutEvent\n                                        * @extends DragEvent\n                                        */\n\nDragOverEvent.type = 'drag:over';\nDragOverEvent.cancelable = true;\nclass DragOutEvent extends DragEvent {\n\n  /**\n   * Draggable container you are over\n   * @property overContainer\n   * @type {HTMLElement}\n   * @readonly\n   */\n  get overContainer() {\n    return this.data.overContainer;\n  }\n\n  /**\n   * Draggable element you left\n   * @property over\n   * @type {HTMLElement}\n   * @readonly\n   */\n  get over() {\n    return this.data.over;\n  }\n}\n\nexports.DragOutEvent = DragOutEvent; /**\n                                      * Drag over container event\n                                      * @class DragOverContainerEvent\n                                      * @module DragOverContainerEvent\n                                      * @extends DragEvent\n                                      */\n\nDragOutEvent.type = 'drag:out';\nclass DragOverContainerEvent extends DragEvent {\n\n  /**\n   * Draggable container you are over\n   * @property overContainer\n   * @type {HTMLElement}\n   * @readonly\n   */\n  get overContainer() {\n    return this.data.overContainer;\n  }\n}\n\nexports.DragOverContainerEvent = DragOverContainerEvent; /**\n                                                          * Drag out container event\n                                                          * @class DragOutContainerEvent\n                                                          * @module DragOutContainerEvent\n                                                          * @extends DragEvent\n                                                          */\n\nDragOverContainerEvent.type = 'drag:over:container';\nclass DragOutContainerEvent extends DragEvent {\n\n  /**\n   * Draggable container you left\n   * @property overContainer\n   * @type {HTMLElement}\n   * @readonly\n   */\n  get overContainer() {\n    return this.data.overContainer;\n  }\n}\n\nexports.DragOutContainerEvent = DragOutContainerEvent; /**\n                                                        * Drag pressure event\n                                                        * @class DragPressureEvent\n                                                        * @module DragPressureEvent\n                                                        * @extends DragEvent\n                                                        */\n\nDragOutContainerEvent.type = 'drag:out:container';\nclass DragPressureEvent extends DragEvent {\n\n  /**\n   * Pressure applied on draggable element\n   * @property pressure\n   * @type {Number}\n   * @readonly\n   */\n  get pressure() {\n    return this.data.pressure;\n  }\n}\n\nexports.DragPressureEvent = DragPressureEvent; /**\n                                                * Drag stop event\n                                                * @class DragStopEvent\n                                                * @module DragStopEvent\n                                                * @extends DragEvent\n                                                */\n\nDragPressureEvent.type = 'drag:pressure';\nclass DragStopEvent extends DragEvent {}\nexports.DragStopEvent = DragStopEvent;\nDragStopEvent.type = 'drag:stop';\n\n/***/ }),\n/* 66 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Plugins = exports.Sensors = exports.Sortable = exports.Swappable = exports.Droppable = exports.Draggable = exports.BasePlugin = exports.BaseEvent = undefined;\n\nvar _Draggable = __webpack_require__(5);\n\nObject.defineProperty(exports, 'Draggable', {\n  enumerable: true,\n  get: function () {\n    return _interopRequireDefault(_Draggable).default;\n  }\n});\n\nvar _Droppable = __webpack_require__(34);\n\nObject.defineProperty(exports, 'Droppable', {\n  enumerable: true,\n  get: function () {\n    return _interopRequireDefault(_Droppable).default;\n  }\n});\n\nvar _Swappable = __webpack_require__(31);\n\nObject.defineProperty(exports, 'Swappable', {\n  enumerable: true,\n  get: function () {\n    return _interopRequireDefault(_Swappable).default;\n  }\n});\n\nvar _Sortable = __webpack_require__(28);\n\nObject.defineProperty(exports, 'Sortable', {\n  enumerable: true,\n  get: function () {\n    return _interopRequireDefault(_Sortable).default;\n  }\n});\n\nvar _AbstractEvent = __webpack_require__(0);\n\nvar _AbstractEvent2 = _interopRequireDefault(_AbstractEvent);\n\nvar _AbstractPlugin = __webpack_require__(1);\n\nvar _AbstractPlugin2 = _interopRequireDefault(_AbstractPlugin);\n\nvar _Sensors = __webpack_require__(6);\n\nvar Sensors = _interopRequireWildcard(_Sensors);\n\nvar _Plugins = __webpack_require__(25);\n\nvar Plugins = _interopRequireWildcard(_Plugins);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.BaseEvent = _AbstractEvent2.default;\nexports.BasePlugin = _AbstractPlugin2.default;\nexports.Sensors = Sensors;\nexports.Plugins = Plugins;\n\n/***/ })\n/******/ ]);\n});","var e,t,n=\"function\"==typeof Map?new Map:(e=[],t=[],{has:function(t){return e.indexOf(t)>-1},get:function(n){return t[e.indexOf(n)]},set:function(n,o){-1===e.indexOf(n)&&(e.push(n),t.push(o))},delete:function(n){var o=e.indexOf(n);o>-1&&(e.splice(o,1),t.splice(o,1))}}),o=function(e){return new Event(e,{bubbles:!0})};try{new Event(\"test\")}catch(e){o=function(e){var t=document.createEvent(\"Event\");return t.initEvent(e,!0,!1),t}}function r(e){var t=n.get(e);t&&t.destroy()}function i(e){var t=n.get(e);t&&t.update()}var l=null;\"undefined\"==typeof window||\"function\"!=typeof window.getComputedStyle?((l=function(e){return e}).destroy=function(e){return e},l.update=function(e){return e}):((l=function(e,t){return e&&Array.prototype.forEach.call(e.length?e:[e],function(e){return function(e){if(e&&e.nodeName&&\"TEXTAREA\"===e.nodeName&&!n.has(e)){var t,r=null,i=null,l=null,d=function(){e.clientWidth!==i&&c()},a=function(t){window.removeEventListener(\"resize\",d,!1),e.removeEventListener(\"input\",c,!1),e.removeEventListener(\"keyup\",c,!1),e.removeEventListener(\"autosize:destroy\",a,!1),e.removeEventListener(\"autosize:update\",c,!1),Object.keys(t).forEach(function(n){e.style[n]=t[n]}),n.delete(e)}.bind(e,{height:e.style.height,resize:e.style.resize,overflowY:e.style.overflowY,overflowX:e.style.overflowX,wordWrap:e.style.wordWrap});e.addEventListener(\"autosize:destroy\",a,!1),\"onpropertychange\"in e&&\"oninput\"in e&&e.addEventListener(\"keyup\",c,!1),window.addEventListener(\"resize\",d,!1),e.addEventListener(\"input\",c,!1),e.addEventListener(\"autosize:update\",c,!1),e.style.overflowX=\"hidden\",e.style.wordWrap=\"break-word\",n.set(e,{destroy:a,update:c}),\"vertical\"===(t=window.getComputedStyle(e,null)).resize?e.style.resize=\"none\":\"both\"===t.resize&&(e.style.resize=\"horizontal\"),r=\"content-box\"===t.boxSizing?-(parseFloat(t.paddingTop)+parseFloat(t.paddingBottom)):parseFloat(t.borderTopWidth)+parseFloat(t.borderBottomWidth),isNaN(r)&&(r=0),c()}function u(t){var n=e.style.width;e.style.width=\"0px\",e.style.width=n,e.style.overflowY=t}function s(){if(0!==e.scrollHeight){var t=function(e){for(var t=[];e&&e.parentNode&&e.parentNode instanceof Element;)e.parentNode.scrollTop&&t.push({node:e.parentNode,scrollTop:e.parentNode.scrollTop}),e=e.parentNode;return t}(e),n=document.documentElement&&document.documentElement.scrollTop;e.style.height=\"\",e.style.height=e.scrollHeight+r+\"px\",i=e.clientWidth,t.forEach(function(e){e.node.scrollTop=e.scrollTop}),n&&(document.documentElement.scrollTop=n)}}function c(){s();var t=Math.round(parseFloat(e.style.height)),n=window.getComputedStyle(e,null),r=\"content-box\"===n.boxSizing?Math.round(parseFloat(n.height)):e.offsetHeight;if(r<t?\"hidden\"===n.overflowY&&(u(\"scroll\"),s(),r=\"content-box\"===n.boxSizing?Math.round(parseFloat(window.getComputedStyle(e,null).height)):e.offsetHeight):\"hidden\"!==n.overflowY&&(u(\"hidden\"),s(),r=\"content-box\"===n.boxSizing?Math.round(parseFloat(window.getComputedStyle(e,null).height)):e.offsetHeight),l!==r){l=r;var i=o(\"autosize:resized\");try{e.dispatchEvent(i)}catch(e){}}}}(e)}),e}).destroy=function(e){return e&&Array.prototype.forEach.call(e.length?e:[e],r),e},l.update=function(e){return e&&Array.prototype.forEach.call(e.length?e:[e],i),e});var d=l;export default d;\n","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n  return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n  return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","export default function getNodeName(element) {\n  return element ? (element.nodeName || '').toLowerCase() : null;\n}","export default function getWindow(node) {\n  if (node == null) {\n    return window;\n  }\n\n  if (node.toString() !== '[object Window]') {\n    var ownerDocument = node.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView || window : window;\n  }\n\n  return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n  var OwnElement = getWindow(node).Element;\n  return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n  var OwnElement = getWindow(node).HTMLElement;\n  return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n  // IE 11 has no ShadowRoot\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n\n  var OwnElement = getWindow(node).ShadowRoot;\n  return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n  var state = _ref.state;\n  Object.keys(state.elements).forEach(function (name) {\n    var style = state.styles[name] || {};\n    var attributes = state.attributes[name] || {};\n    var element = state.elements[name]; // arrow is optional + virtual elements\n\n    if (!isHTMLElement(element) || !getNodeName(element)) {\n      return;\n    } // Flow doesn't support to extend this property, but it's the most\n    // effective way to apply styles to an HTMLElement\n    // $FlowFixMe[cannot-write]\n\n\n    Object.assign(element.style, style);\n    Object.keys(attributes).forEach(function (name) {\n      var value = attributes[name];\n\n      if (value === false) {\n        element.removeAttribute(name);\n      } else {\n        element.setAttribute(name, value === true ? '' : value);\n      }\n    });\n  });\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state;\n  var initialStyles = {\n    popper: {\n      position: state.options.strategy,\n      left: '0',\n      top: '0',\n      margin: '0'\n    },\n    arrow: {\n      position: 'absolute'\n    },\n    reference: {}\n  };\n  Object.assign(state.elements.popper.style, initialStyles.popper);\n  state.styles = initialStyles;\n\n  if (state.elements.arrow) {\n    Object.assign(state.elements.arrow.style, initialStyles.arrow);\n  }\n\n  return function () {\n    Object.keys(state.elements).forEach(function (name) {\n      var element = state.elements[name];\n      var attributes = state.attributes[name] || {};\n      var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n      var style = styleProperties.reduce(function (style, property) {\n        style[property] = '';\n        return style;\n      }, {}); // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      }\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (attribute) {\n        element.removeAttribute(attribute);\n      });\n    });\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'applyStyles',\n  enabled: true,\n  phase: 'write',\n  fn: applyStyles,\n  effect: effect,\n  requires: ['computeStyles']\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n  return placement.split('-')[0];\n}","// import { isHTMLElement } from './instanceOf';\nexport default function getBoundingClientRect(element, // eslint-disable-next-line unused-imports/no-unused-vars\nincludeScale) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n\n  var rect = element.getBoundingClientRect();\n  var scaleX = 1;\n  var scaleY = 1; // FIXME:\n  // `offsetWidth` returns an integer while `getBoundingClientRect`\n  // returns a float. This results in `scaleX` or `scaleY` being\n  // non-1 when it should be for elements that aren't a full pixel in\n  // width or height.\n  // if (isHTMLElement(element) && includeScale) {\n  //   const offsetHeight = element.offsetHeight;\n  //   const offsetWidth = element.offsetWidth;\n  //   // Do not attempt to divide by 0, otherwise we get `Infinity` as scale\n  //   // Fallback to 1 in case both values are `0`\n  //   if (offsetWidth > 0) {\n  //     scaleX = rect.width / offsetWidth || 1;\n  //   }\n  //   if (offsetHeight > 0) {\n  //     scaleY = rect.height / offsetHeight || 1;\n  //   }\n  // }\n\n  return {\n    width: rect.width / scaleX,\n    height: rect.height / scaleY,\n    top: rect.top / scaleY,\n    right: rect.right / scaleX,\n    bottom: rect.bottom / scaleY,\n    left: rect.left / scaleX,\n    x: rect.left / scaleX,\n    y: rect.top / scaleY\n  };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n  var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n  // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n  var width = element.offsetWidth;\n  var height = element.offsetHeight;\n\n  if (Math.abs(clientRect.width - width) <= 1) {\n    width = clientRect.width;\n  }\n\n  if (Math.abs(clientRect.height - height) <= 1) {\n    height = clientRect.height;\n  }\n\n  return {\n    x: element.offsetLeft,\n    y: element.offsetTop,\n    width: width,\n    height: height\n  };\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n  var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n  if (parent.contains(child)) {\n    return true;\n  } // then fallback to custom implementation with Shadow DOM support\n  else if (rootNode && isShadowRoot(rootNode)) {\n      var next = child;\n\n      do {\n        if (next && parent.isSameNode(next)) {\n          return true;\n        } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n        next = next.parentNode || next.host;\n      } while (next);\n    } // Give up, the result is false\n\n\n  return false;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n  // $FlowFixMe[incompatible-return]: assume body is always available\n  return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n  element.document) || window.document).documentElement;\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n  if (getNodeName(element) === 'html') {\n    return element;\n  }\n\n  return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n    // $FlowFixMe[incompatible-return]\n    // $FlowFixMe[prop-missing]\n    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n    element.parentNode || ( // DOM Element detected\n    isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n    // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n    getDocumentElement(element) // fallback\n\n  );\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\n\nfunction getTrueOffsetParent(element) {\n  if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n  getComputedStyle(element).position === 'fixed') {\n    return null;\n  }\n\n  return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n  var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n  var isIE = navigator.userAgent.indexOf('Trident') !== -1;\n\n  if (isIE && isHTMLElement(element)) {\n    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n    var elementCss = getComputedStyle(element);\n\n    if (elementCss.position === 'fixed') {\n      return null;\n    }\n  }\n\n  var currentNode = getParentNode(element);\n\n  while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n    var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n    // create a containing block.\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n    if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n      return currentNode;\n    } else {\n      currentNode = currentNode.parentNode;\n    }\n  }\n\n  return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n  var window = getWindow(element);\n  var offsetParent = getTrueOffsetParent(element);\n\n  while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n    offsetParent = getTrueOffsetParent(offsetParent);\n  }\n\n  if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n    return window;\n  }\n\n  return offsetParent || getContainingBlock(element) || window;\n}","export default function getMainAxisFromPlacement(placement) {\n  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport default function within(min, value, max) {\n  return mathMax(min, mathMin(value, max));\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n  return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function getFreshSideObject() {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  };\n}","export default function expandToHashMap(value, keys) {\n  return keys.reduce(function (hashMap, key) {\n    hashMap[key] = value;\n    return hashMap;\n  }, {});\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport within from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n  padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : padding;\n  return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n  var _state$modifiersData$;\n\n  var state = _ref.state,\n      name = _ref.name,\n      options = _ref.options;\n  var arrowElement = state.elements.arrow;\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var basePlacement = getBasePlacement(state.placement);\n  var axis = getMainAxisFromPlacement(basePlacement);\n  var isVertical = [left, right].indexOf(basePlacement) >= 0;\n  var len = isVertical ? 'height' : 'width';\n\n  if (!arrowElement || !popperOffsets) {\n    return;\n  }\n\n  var paddingObject = toPaddingObject(options.padding, state);\n  var arrowRect = getLayoutRect(arrowElement);\n  var minProp = axis === 'y' ? top : left;\n  var maxProp = axis === 'y' ? bottom : right;\n  var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n  var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n  var arrowOffsetParent = getOffsetParent(arrowElement);\n  var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n  var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n  // outside of the popper bounds\n\n  var min = paddingObject[minProp];\n  var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n  var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n  var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n  var axisProp = axis;\n  state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options;\n  var _options$element = options.element,\n      arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n  if (arrowElement == null) {\n    return;\n  } // CSS selector\n\n\n  if (typeof arrowElement === 'string') {\n    arrowElement = state.elements.popper.querySelector(arrowElement);\n\n    if (!arrowElement) {\n      return;\n    }\n  }\n\n  if (process.env.NODE_ENV !== \"production\") {\n    if (!isHTMLElement(arrowElement)) {\n      console.error(['Popper: \"arrow\" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' '));\n    }\n  }\n\n  if (!contains(state.elements.popper, arrowElement)) {\n    if (process.env.NODE_ENV !== \"production\") {\n      console.error(['Popper: \"arrow\" modifier\\'s `element` must be a child of the popper', 'element.'].join(' '));\n    }\n\n    return;\n  }\n\n  state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'arrow',\n  enabled: true,\n  phase: 'main',\n  fn: arrow,\n  effect: effect,\n  requires: ['popperOffsets'],\n  requiresIfExists: ['preventOverflow']\n};","export default function getVariation(placement) {\n  return placement.split('-')[1];\n}","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n  top: 'auto',\n  right: 'auto',\n  bottom: 'auto',\n  left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref) {\n  var x = _ref.x,\n      y = _ref.y;\n  var win = window;\n  var dpr = win.devicePixelRatio || 1;\n  return {\n    x: round(round(x * dpr) / dpr) || 0,\n    y: round(round(y * dpr) / dpr) || 0\n  };\n}\n\nexport function mapToStyles(_ref2) {\n  var _Object$assign2;\n\n  var popper = _ref2.popper,\n      popperRect = _ref2.popperRect,\n      placement = _ref2.placement,\n      variation = _ref2.variation,\n      offsets = _ref2.offsets,\n      position = _ref2.position,\n      gpuAcceleration = _ref2.gpuAcceleration,\n      adaptive = _ref2.adaptive,\n      roundOffsets = _ref2.roundOffsets;\n\n  var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets,\n      _ref3$x = _ref3.x,\n      x = _ref3$x === void 0 ? 0 : _ref3$x,\n      _ref3$y = _ref3.y,\n      y = _ref3$y === void 0 ? 0 : _ref3$y;\n\n  var hasX = offsets.hasOwnProperty('x');\n  var hasY = offsets.hasOwnProperty('y');\n  var sideX = left;\n  var sideY = top;\n  var win = window;\n\n  if (adaptive) {\n    var offsetParent = getOffsetParent(popper);\n    var heightProp = 'clientHeight';\n    var widthProp = 'clientWidth';\n\n    if (offsetParent === getWindow(popper)) {\n      offsetParent = getDocumentElement(popper);\n\n      if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n        heightProp = 'scrollHeight';\n        widthProp = 'scrollWidth';\n      }\n    } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n    offsetParent = offsetParent;\n\n    if (placement === top || (placement === left || placement === right) && variation === end) {\n      sideY = bottom; // $FlowFixMe[prop-missing]\n\n      y -= offsetParent[heightProp] - popperRect.height;\n      y *= gpuAcceleration ? 1 : -1;\n    }\n\n    if (placement === left || (placement === top || placement === bottom) && variation === end) {\n      sideX = right; // $FlowFixMe[prop-missing]\n\n      x -= offsetParent[widthProp] - popperRect.width;\n      x *= gpuAcceleration ? 1 : -1;\n    }\n  }\n\n  var commonStyles = Object.assign({\n    position: position\n  }, adaptive && unsetSides);\n\n  if (gpuAcceleration) {\n    var _Object$assign;\n\n    return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n  }\n\n  return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref4) {\n  var state = _ref4.state,\n      options = _ref4.options;\n  var _options$gpuAccelerat = options.gpuAcceleration,\n      gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n      _options$adaptive = options.adaptive,\n      adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n      _options$roundOffsets = options.roundOffsets,\n      roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n  if (process.env.NODE_ENV !== \"production\") {\n    var transitionProperty = getComputedStyle(state.elements.popper).transitionProperty || '';\n\n    if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) {\n      return transitionProperty.indexOf(property) >= 0;\n    })) {\n      console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: \"transform\", \"top\", \"right\", \"bottom\", \"left\".', '\\n\\n', 'Disable the \"computeStyles\" modifier\\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\\n\\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' '));\n    }\n  }\n\n  var commonStyles = {\n    placement: getBasePlacement(state.placement),\n    variation: getVariation(state.placement),\n    popper: state.elements.popper,\n    popperRect: state.rects.popper,\n    gpuAcceleration: gpuAcceleration\n  };\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.popperOffsets,\n      position: state.options.strategy,\n      adaptive: adaptive,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  if (state.modifiersData.arrow != null) {\n    state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.arrow,\n      position: 'absolute',\n      adaptive: false,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-placement': state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'computeStyles',\n  enabled: true,\n  phase: 'beforeWrite',\n  fn: computeStyles,\n  data: {}\n};","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n  passive: true\n};\n\nfunction effect(_ref) {\n  var state = _ref.state,\n      instance = _ref.instance,\n      options = _ref.options;\n  var _options$scroll = options.scroll,\n      scroll = _options$scroll === void 0 ? true : _options$scroll,\n      _options$resize = options.resize,\n      resize = _options$resize === void 0 ? true : _options$resize;\n  var window = getWindow(state.elements.popper);\n  var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n  if (scroll) {\n    scrollParents.forEach(function (scrollParent) {\n      scrollParent.addEventListener('scroll', instance.update, passive);\n    });\n  }\n\n  if (resize) {\n    window.addEventListener('resize', instance.update, passive);\n  }\n\n  return function () {\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.removeEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.removeEventListener('resize', instance.update, passive);\n    }\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'eventListeners',\n  enabled: true,\n  phase: 'write',\n  fn: function fn() {},\n  effect: effect,\n  data: {}\n};","var hash = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, function (matched) {\n    return hash[matched];\n  });\n}","var hash = {\n  start: 'end',\n  end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n  return placement.replace(/start|end/g, function (matched) {\n    return hash[matched];\n  });\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n  var win = getWindow(node);\n  var scrollLeft = win.pageXOffset;\n  var scrollTop = win.pageYOffset;\n  return {\n    scrollLeft: scrollLeft,\n    scrollTop: scrollTop\n  };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  // Popper 1 is broken in this case and never had a bug report so let's assume\n  // it's not an issue. I don't think anyone ever specifies width on <html>\n  // anyway.\n  // Browsers where the left scrollbar doesn't cause an issue report `0` for\n  // this (e.g. Edge 2019, IE11, Safari)\n  return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n  // Firefox wants us to check `-x` and `-y` variations as well\n  var _getComputedStyle = getComputedStyle(element),\n      overflow = _getComputedStyle.overflow,\n      overflowX = _getComputedStyle.overflowX,\n      overflowY = _getComputedStyle.overflowY;\n\n  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return node.ownerDocument.body;\n  }\n\n  if (isHTMLElement(node) && isScrollParent(node)) {\n    return node;\n  }\n\n  return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n  var _element$ownerDocumen;\n\n  if (list === void 0) {\n    list = [];\n  }\n\n  var scrollParent = getScrollParent(element);\n  var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n  var win = getWindow(scrollParent);\n  var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n  var updatedList = list.concat(target);\n  return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n  updatedList.concat(listScrollParents(getParentNode(target)));\n}","export default function rectToClientRect(rect) {\n  return Object.assign({}, rect, {\n    left: rect.x,\n    top: rect.y,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height\n  });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element) {\n  var rect = getBoundingClientRect(element);\n  rect.top = rect.top + element.clientTop;\n  rect.left = rect.left + element.clientLeft;\n  rect.bottom = rect.top + element.clientHeight;\n  rect.right = rect.left + element.clientWidth;\n  rect.width = element.clientWidth;\n  rect.height = element.clientHeight;\n  rect.x = rect.left;\n  rect.y = rect.top;\n  return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent) {\n  return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n  var clippingParents = listScrollParents(getParentNode(element));\n  var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n  var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n  if (!isElement(clipperElement)) {\n    return [];\n  } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n  return clippingParents.filter(function (clippingParent) {\n    return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n  });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary) {\n  var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n  var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n  var firstClippingParent = clippingParents[0];\n  var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n    var rect = getClientRectFromMixedType(element, clippingParent);\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n    return accRect;\n  }, getClientRectFromMixedType(element, firstClippingParent));\n  clippingRect.width = clippingRect.right - clippingRect.left;\n  clippingRect.height = clippingRect.bottom - clippingRect.top;\n  clippingRect.x = clippingRect.left;\n  clippingRect.y = clippingRect.top;\n  return clippingRect;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nexport default function getViewportRect(element) {\n  var win = getWindow(element);\n  var html = getDocumentElement(element);\n  var visualViewport = win.visualViewport;\n  var width = html.clientWidth;\n  var height = html.clientHeight;\n  var x = 0;\n  var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n  // can be obscured underneath it.\n  // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n  // if it isn't open, so if this isn't available, the popper will be detected\n  // to overflow the bottom of the screen too early.\n\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n    // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n    // errors due to floating point numbers, so we need to check precision.\n    // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n    // Feature detection fails in mobile emulation mode in Chrome.\n    // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n    // 0.001\n    // Fallback here: \"Not Safari\" userAgent\n\n    if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x + getWindowScrollBarX(element),\n    y: y\n  };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n  var _element$ownerDocumen;\n\n  var html = getDocumentElement(element);\n  var winScroll = getWindowScroll(element);\n  var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n  var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n  var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n  var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n  var y = -winScroll.scrollTop;\n\n  if (getComputedStyle(body || html).direction === 'rtl') {\n    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x,\n    y: y\n  };\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n  var reference = _ref.reference,\n      element = _ref.element,\n      placement = _ref.placement;\n  var basePlacement = placement ? getBasePlacement(placement) : null;\n  var variation = placement ? getVariation(placement) : null;\n  var commonX = reference.x + reference.width / 2 - element.width / 2;\n  var commonY = reference.y + reference.height / 2 - element.height / 2;\n  var offsets;\n\n  switch (basePlacement) {\n    case top:\n      offsets = {\n        x: commonX,\n        y: reference.y - element.height\n      };\n      break;\n\n    case bottom:\n      offsets = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n\n    case right:\n      offsets = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n\n    case left:\n      offsets = {\n        x: reference.x - element.width,\n        y: commonY\n      };\n      break;\n\n    default:\n      offsets = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n\n  var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n  if (mainAxis != null) {\n    var len = mainAxis === 'y' ? 'height' : 'width';\n\n    switch (variation) {\n      case start:\n        offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n        break;\n\n      case end:\n        offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n        break;\n\n      default:\n    }\n  }\n\n  return offsets;\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      _options$placement = _options.placement,\n      placement = _options$placement === void 0 ? state.placement : _options$placement,\n      _options$boundary = _options.boundary,\n      boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n      _options$rootBoundary = _options.rootBoundary,\n      rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n      _options$elementConte = _options.elementContext,\n      elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n      _options$altBoundary = _options.altBoundary,\n      altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n      _options$padding = _options.padding,\n      padding = _options$padding === void 0 ? 0 : _options$padding;\n  var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  var altContext = elementContext === popper ? reference : popper;\n  var popperRect = state.rects.popper;\n  var element = state.elements[altBoundary ? altContext : elementContext];\n  var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n  var referenceClientRect = getBoundingClientRect(state.elements.reference);\n  var popperOffsets = computeOffsets({\n    reference: referenceClientRect,\n    element: popperRect,\n    strategy: 'absolute',\n    placement: placement\n  });\n  var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n  var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n  // 0 or negative = within the clipping rect\n\n  var overflowOffsets = {\n    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n    bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n    right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n  };\n  var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n  if (elementContext === popper && offsetData) {\n    var offset = offsetData[placement];\n    Object.keys(overflowOffsets).forEach(function (key) {\n      var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n      var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n      overflowOffsets[key] += offset[axis] * multiply;\n    });\n  }\n\n  return overflowOffsets;\n}","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n  if (getBasePlacement(placement) === auto) {\n    return [];\n  }\n\n  var oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n\n  if (state.modifiersData[name]._skip) {\n    return;\n  }\n\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n      specifiedFallbackPlacements = options.fallbackPlacements,\n      padding = options.padding,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      _options$flipVariatio = options.flipVariations,\n      flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n      allowedAutoPlacements = options.allowedAutoPlacements;\n  var preferredPlacement = state.options.placement;\n  var basePlacement = getBasePlacement(preferredPlacement);\n  var isBasePlacement = basePlacement === preferredPlacement;\n  var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n  var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n    return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      flipVariations: flipVariations,\n      allowedAutoPlacements: allowedAutoPlacements\n    }) : placement);\n  }, []);\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var checksMap = new Map();\n  var makeFallbackChecks = true;\n  var firstFittingPlacement = placements[0];\n\n  for (var i = 0; i < placements.length; i++) {\n    var placement = placements[i];\n\n    var _basePlacement = getBasePlacement(placement);\n\n    var isStartVariation = getVariation(placement) === start;\n    var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n    var len = isVertical ? 'width' : 'height';\n    var overflow = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      altBoundary: altBoundary,\n      padding: padding\n    });\n    var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n    if (referenceRect[len] > popperRect[len]) {\n      mainVariationSide = getOppositePlacement(mainVariationSide);\n    }\n\n    var altVariationSide = getOppositePlacement(mainVariationSide);\n    var checks = [];\n\n    if (checkMainAxis) {\n      checks.push(overflow[_basePlacement] <= 0);\n    }\n\n    if (checkAltAxis) {\n      checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n    }\n\n    if (checks.every(function (check) {\n      return check;\n    })) {\n      firstFittingPlacement = placement;\n      makeFallbackChecks = false;\n      break;\n    }\n\n    checksMap.set(placement, checks);\n  }\n\n  if (makeFallbackChecks) {\n    // `2` may be desired in some cases – research later\n    var numberOfChecks = flipVariations ? 3 : 1;\n\n    var _loop = function _loop(_i) {\n      var fittingPlacement = placements.find(function (placement) {\n        var checks = checksMap.get(placement);\n\n        if (checks) {\n          return checks.slice(0, _i).every(function (check) {\n            return check;\n          });\n        }\n      });\n\n      if (fittingPlacement) {\n        firstFittingPlacement = fittingPlacement;\n        return \"break\";\n      }\n    };\n\n    for (var _i = numberOfChecks; _i > 0; _i--) {\n      var _ret = _loop(_i);\n\n      if (_ret === \"break\") break;\n    }\n  }\n\n  if (state.placement !== firstFittingPlacement) {\n    state.modifiersData[name]._skip = true;\n    state.placement = firstFittingPlacement;\n    state.reset = true;\n  }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'flip',\n  enabled: true,\n  phase: 'main',\n  fn: flip,\n  requiresIfExists: ['offset'],\n  data: {\n    _skip: false\n  }\n};","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      placement = _options.placement,\n      boundary = _options.boundary,\n      rootBoundary = _options.rootBoundary,\n      padding = _options.padding,\n      flipVariations = _options.flipVariations,\n      _options$allowedAutoP = _options.allowedAutoPlacements,\n      allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n  var variation = getVariation(placement);\n  var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n    return getVariation(placement) === variation;\n  }) : basePlacements;\n  var allowedPlacements = placements.filter(function (placement) {\n    return allowedAutoPlacements.indexOf(placement) >= 0;\n  });\n\n  if (allowedPlacements.length === 0) {\n    allowedPlacements = placements;\n\n    if (process.env.NODE_ENV !== \"production\") {\n      console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, \"auto\" cannot be used to allow \"bottom-start\".', 'Use \"auto-start\" instead.'].join(' '));\n    }\n  } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n  var overflows = allowedPlacements.reduce(function (acc, placement) {\n    acc[placement] = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding\n    })[getBasePlacement(placement)];\n    return acc;\n  }, {});\n  return Object.keys(overflows).sort(function (a, b) {\n    return overflows[a] - overflows[b];\n  });\n}","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n  if (preventedOffsets === void 0) {\n    preventedOffsets = {\n      x: 0,\n      y: 0\n    };\n  }\n\n  return {\n    top: overflow.top - rect.height - preventedOffsets.y,\n    right: overflow.right - rect.width + preventedOffsets.x,\n    bottom: overflow.bottom - rect.height + preventedOffsets.y,\n    left: overflow.left - rect.width - preventedOffsets.x\n  };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n  return [top, right, bottom, left].some(function (side) {\n    return overflow[side] >= 0;\n  });\n}\n\nfunction hide(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var preventedOffsets = state.modifiersData.preventOverflow;\n  var referenceOverflow = detectOverflow(state, {\n    elementContext: 'reference'\n  });\n  var popperAltOverflow = detectOverflow(state, {\n    altBoundary: true\n  });\n  var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n  var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n  var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n  var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n  state.modifiersData[name] = {\n    referenceClippingOffsets: referenceClippingOffsets,\n    popperEscapeOffsets: popperEscapeOffsets,\n    isReferenceHidden: isReferenceHidden,\n    hasPopperEscaped: hasPopperEscaped\n  };\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-reference-hidden': isReferenceHidden,\n    'data-popper-escaped': hasPopperEscaped\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'hide',\n  enabled: true,\n  phase: 'main',\n  requiresIfExists: ['preventOverflow'],\n  fn: hide\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\";\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n  var basePlacement = getBasePlacement(placement);\n  var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n  var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n    placement: placement\n  })) : offset,\n      skidding = _ref[0],\n      distance = _ref[1];\n\n  skidding = skidding || 0;\n  distance = (distance || 0) * invertDistance;\n  return [left, right].indexOf(basePlacement) >= 0 ? {\n    x: distance,\n    y: skidding\n  } : {\n    x: skidding,\n    y: distance\n  };\n}\n\nfunction offset(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options,\n      name = _ref2.name;\n  var _options$offset = options.offset,\n      offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n  var data = placements.reduce(function (acc, placement) {\n    acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n    return acc;\n  }, {});\n  var _data$state$placement = data[state.placement],\n      x = _data$state$placement.x,\n      y = _data$state$placement.y;\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.modifiersData.popperOffsets.x += x;\n    state.modifiersData.popperOffsets.y += y;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'offset',\n  enabled: true,\n  phase: 'main',\n  requires: ['popperOffsets'],\n  fn: offset\n};","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  // Offsets are the actual position the popper needs to have to be\n  // properly positioned near its reference element\n  // This is the most basic placement, and will be adjusted by\n  // the modifiers in the next step\n  state.modifiersData[name] = computeOffsets({\n    reference: state.rects.reference,\n    element: state.rects.popper,\n    strategy: 'absolute',\n    placement: state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'popperOffsets',\n  enabled: true,\n  phase: 'read',\n  fn: popperOffsets,\n  data: {}\n};","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport within from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { max as mathMax, min as mathMin } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      padding = options.padding,\n      _options$tether = options.tether,\n      tether = _options$tether === void 0 ? true : _options$tether,\n      _options$tetherOffset = options.tetherOffset,\n      tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n  var overflow = detectOverflow(state, {\n    boundary: boundary,\n    rootBoundary: rootBoundary,\n    padding: padding,\n    altBoundary: altBoundary\n  });\n  var basePlacement = getBasePlacement(state.placement);\n  var variation = getVariation(state.placement);\n  var isBasePlacement = !variation;\n  var mainAxis = getMainAxisFromPlacement(basePlacement);\n  var altAxis = getAltAxis(mainAxis);\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : tetherOffset;\n  var data = {\n    x: 0,\n    y: 0\n  };\n\n  if (!popperOffsets) {\n    return;\n  }\n\n  if (checkMainAxis || checkAltAxis) {\n    var mainSide = mainAxis === 'y' ? top : left;\n    var altSide = mainAxis === 'y' ? bottom : right;\n    var len = mainAxis === 'y' ? 'height' : 'width';\n    var offset = popperOffsets[mainAxis];\n    var min = popperOffsets[mainAxis] + overflow[mainSide];\n    var max = popperOffsets[mainAxis] - overflow[altSide];\n    var additive = tether ? -popperRect[len] / 2 : 0;\n    var minLen = variation === start ? referenceRect[len] : popperRect[len];\n    var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n    // outside the reference bounds\n\n    var arrowElement = state.elements.arrow;\n    var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n      width: 0,\n      height: 0\n    };\n    var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n    var arrowPaddingMin = arrowPaddingObject[mainSide];\n    var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n    // to include its full size in the calculation. If the reference is small\n    // and near the edge of a boundary, the popper can overflow even if the\n    // reference is not overflowing as well (e.g. virtual elements with no\n    // width or height)\n\n    var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n    var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;\n    var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;\n    var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n    var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n    var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;\n    var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;\n    var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;\n\n    if (checkMainAxis) {\n      var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n      popperOffsets[mainAxis] = preventedOffset;\n      data[mainAxis] = preventedOffset - offset;\n    }\n\n    if (checkAltAxis) {\n      var _mainSide = mainAxis === 'x' ? top : left;\n\n      var _altSide = mainAxis === 'x' ? bottom : right;\n\n      var _offset = popperOffsets[altAxis];\n\n      var _min = _offset + overflow[_mainSide];\n\n      var _max = _offset - overflow[_altSide];\n\n      var _preventedOffset = within(tether ? mathMin(_min, tetherMin) : _min, _offset, tether ? mathMax(_max, tetherMax) : _max);\n\n      popperOffsets[altAxis] = _preventedOffset;\n      data[altAxis] = _preventedOffset - _offset;\n    }\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'preventOverflow',\n  enabled: true,\n  phase: 'main',\n  fn: preventOverflow,\n  requiresIfExists: ['offset']\n};","export default function getAltAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n\nfunction isElementScaled(element) {\n  var rect = element.getBoundingClientRect();\n  var scaleX = rect.width / element.offsetWidth || 1;\n  var scaleY = rect.height / element.offsetHeight || 1;\n  return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n\n  var isOffsetParentAnElement = isHTMLElement(offsetParent);\n  var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n  var documentElement = getDocumentElement(offsetParent);\n  var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled);\n  var scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  var offsets = {\n    x: 0,\n    y: 0\n  };\n\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n    isScrollParent(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n\n    if (isHTMLElement(offsetParent)) {\n      offsets = getBoundingClientRect(offsetParent, true);\n      offsets.x += offsetParent.clientLeft;\n      offsets.y += offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n\n  return {\n    x: rect.left + scroll.scrollLeft - offsets.x,\n    y: rect.top + scroll.scrollTop - offsets.y,\n    width: rect.width,\n    height: rect.height\n  };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n  if (node === getWindow(node) || !isHTMLElement(node)) {\n    return getWindowScroll(node);\n  } else {\n    return getHTMLElementScroll(node);\n  }\n}","export default function getHTMLElementScroll(element) {\n  return {\n    scrollLeft: element.scrollLeft,\n    scrollTop: element.scrollTop\n  };\n}","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n  var map = new Map();\n  var visited = new Set();\n  var result = [];\n  modifiers.forEach(function (modifier) {\n    map.set(modifier.name, modifier);\n  }); // On visiting object, check for its dependencies and visit them recursively\n\n  function sort(modifier) {\n    visited.add(modifier.name);\n    var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n    requires.forEach(function (dep) {\n      if (!visited.has(dep)) {\n        var depModifier = map.get(dep);\n\n        if (depModifier) {\n          sort(depModifier);\n        }\n      }\n    });\n    result.push(modifier);\n  }\n\n  modifiers.forEach(function (modifier) {\n    if (!visited.has(modifier.name)) {\n      // check for visited object\n      sort(modifier);\n    }\n  });\n  return result;\n}\n\nexport default function orderModifiers(modifiers) {\n  // order based on dependencies\n  var orderedModifiers = order(modifiers); // order based on phase\n\n  return modifierPhases.reduce(function (acc, phase) {\n    return acc.concat(orderedModifiers.filter(function (modifier) {\n      return modifier.phase === phase;\n    }));\n  }, []);\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport getComputedStyle from \"./dom-utils/getComputedStyle.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport validateModifiers from \"./utils/validateModifiers.js\";\nimport uniqueBy from \"./utils/uniqueBy.js\";\nimport getBasePlacement from \"./utils/getBasePlacement.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nimport { auto } from \"./enums.js\";\nvar INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.';\nvar INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.';\nvar DEFAULT_OPTIONS = {\n  placement: 'bottom',\n  modifiers: [],\n  strategy: 'absolute'\n};\n\nfunction areValidElements() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  return !args.some(function (element) {\n    return !(element && typeof element.getBoundingClientRect === 'function');\n  });\n}\n\nexport function popperGenerator(generatorOptions) {\n  if (generatorOptions === void 0) {\n    generatorOptions = {};\n  }\n\n  var _generatorOptions = generatorOptions,\n      _generatorOptions$def = _generatorOptions.defaultModifiers,\n      defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n      _generatorOptions$def2 = _generatorOptions.defaultOptions,\n      defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n  return function createPopper(reference, popper, options) {\n    if (options === void 0) {\n      options = defaultOptions;\n    }\n\n    var state = {\n      placement: 'bottom',\n      orderedModifiers: [],\n      options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n      modifiersData: {},\n      elements: {\n        reference: reference,\n        popper: popper\n      },\n      attributes: {},\n      styles: {}\n    };\n    var effectCleanupFns = [];\n    var isDestroyed = false;\n    var instance = {\n      state: state,\n      setOptions: function setOptions(setOptionsAction) {\n        var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n        cleanupModifierEffects();\n        state.options = Object.assign({}, defaultOptions, state.options, options);\n        state.scrollParents = {\n          reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n          popper: listScrollParents(popper)\n        }; // Orders the modifiers based on their dependencies and `phase`\n        // properties\n\n        var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n        state.orderedModifiers = orderedModifiers.filter(function (m) {\n          return m.enabled;\n        }); // Validate the provided modifiers so that the consumer will get warned\n        // if one of the modifiers is invalid for any reason\n\n        if (process.env.NODE_ENV !== \"production\") {\n          var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function (_ref) {\n            var name = _ref.name;\n            return name;\n          });\n          validateModifiers(modifiers);\n\n          if (getBasePlacement(state.options.placement) === auto) {\n            var flipModifier = state.orderedModifiers.find(function (_ref2) {\n              var name = _ref2.name;\n              return name === 'flip';\n            });\n\n            if (!flipModifier) {\n              console.error(['Popper: \"auto\" placements require the \"flip\" modifier be', 'present and enabled to work.'].join(' '));\n            }\n          }\n\n          var _getComputedStyle = getComputedStyle(popper),\n              marginTop = _getComputedStyle.marginTop,\n              marginRight = _getComputedStyle.marginRight,\n              marginBottom = _getComputedStyle.marginBottom,\n              marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can\n          // cause bugs with positioning, so we'll warn the consumer\n\n\n          if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) {\n            return parseFloat(margin);\n          })) {\n            console.warn(['Popper: CSS \"margin\" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' '));\n          }\n        }\n\n        runModifierEffects();\n        return instance.update();\n      },\n      // Sync update – it will always be executed, even if not necessary. This\n      // is useful for low frequency updates where sync behavior simplifies the\n      // logic.\n      // For high frequency updates (e.g. `resize` and `scroll` events), always\n      // prefer the async Popper#update method\n      forceUpdate: function forceUpdate() {\n        if (isDestroyed) {\n          return;\n        }\n\n        var _state$elements = state.elements,\n            reference = _state$elements.reference,\n            popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n        // anymore\n\n        if (!areValidElements(reference, popper)) {\n          if (process.env.NODE_ENV !== \"production\") {\n            console.error(INVALID_ELEMENT_ERROR);\n          }\n\n          return;\n        } // Store the reference and popper rects to be read by modifiers\n\n\n        state.rects = {\n          reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n          popper: getLayoutRect(popper)\n        }; // Modifiers have the ability to reset the current update cycle. The\n        // most common use case for this is the `flip` modifier changing the\n        // placement, which then needs to re-run all the modifiers, because the\n        // logic was previously ran for the previous placement and is therefore\n        // stale/incorrect\n\n        state.reset = false;\n        state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n        // is filled with the initial data specified by the modifier. This means\n        // it doesn't persist and is fresh on each update.\n        // To ensure persistent data, use `${name}#persistent`\n\n        state.orderedModifiers.forEach(function (modifier) {\n          return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n        });\n        var __debug_loops__ = 0;\n\n        for (var index = 0; index < state.orderedModifiers.length; index++) {\n          if (process.env.NODE_ENV !== \"production\") {\n            __debug_loops__ += 1;\n\n            if (__debug_loops__ > 100) {\n              console.error(INFINITE_LOOP_ERROR);\n              break;\n            }\n          }\n\n          if (state.reset === true) {\n            state.reset = false;\n            index = -1;\n            continue;\n          }\n\n          var _state$orderedModifie = state.orderedModifiers[index],\n              fn = _state$orderedModifie.fn,\n              _state$orderedModifie2 = _state$orderedModifie.options,\n              _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n              name = _state$orderedModifie.name;\n\n          if (typeof fn === 'function') {\n            state = fn({\n              state: state,\n              options: _options,\n              name: name,\n              instance: instance\n            }) || state;\n          }\n        }\n      },\n      // Async and optimistically optimized update – it will not be executed if\n      // not necessary (debounced to run at most once-per-tick)\n      update: debounce(function () {\n        return new Promise(function (resolve) {\n          instance.forceUpdate();\n          resolve(state);\n        });\n      }),\n      destroy: function destroy() {\n        cleanupModifierEffects();\n        isDestroyed = true;\n      }\n    };\n\n    if (!areValidElements(reference, popper)) {\n      if (process.env.NODE_ENV !== \"production\") {\n        console.error(INVALID_ELEMENT_ERROR);\n      }\n\n      return instance;\n    }\n\n    instance.setOptions(options).then(function (state) {\n      if (!isDestroyed && options.onFirstUpdate) {\n        options.onFirstUpdate(state);\n      }\n    }); // Modifiers have the ability to execute arbitrary code before the first\n    // update cycle runs. They will be executed in the same order as the update\n    // cycle. This is useful when a modifier adds some persistent data that\n    // other modifiers need to use, but the modifier is run after the dependent\n    // one.\n\n    function runModifierEffects() {\n      state.orderedModifiers.forEach(function (_ref3) {\n        var name = _ref3.name,\n            _ref3$options = _ref3.options,\n            options = _ref3$options === void 0 ? {} : _ref3$options,\n            effect = _ref3.effect;\n\n        if (typeof effect === 'function') {\n          var cleanupFn = effect({\n            state: state,\n            name: name,\n            instance: instance,\n            options: options\n          });\n\n          var noopFn = function noopFn() {};\n\n          effectCleanupFns.push(cleanupFn || noopFn);\n        }\n      });\n    }\n\n    function cleanupModifierEffects() {\n      effectCleanupFns.forEach(function (fn) {\n        return fn();\n      });\n      effectCleanupFns = [];\n    }\n\n    return instance;\n  };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","export default function debounce(fn) {\n  var pending;\n  return function () {\n    if (!pending) {\n      pending = new Promise(function (resolve) {\n        Promise.resolve().then(function () {\n          pending = undefined;\n          resolve(fn());\n        });\n      });\n    }\n\n    return pending;\n  };\n}","export default function mergeByName(modifiers) {\n  var merged = modifiers.reduce(function (merged, current) {\n    var existing = merged[current.name];\n    merged[current.name] = existing ? Object.assign({}, existing, current, {\n      options: Object.assign({}, existing.options, current.options),\n      data: Object.assign({}, existing.data, current.data)\n    }) : current;\n    return merged;\n  }, {}); // IE11 does not support Object.values\n\n  return Object.keys(merged).map(function (key) {\n    return merged[key];\n  });\n}","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n  defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];\nvar createPopper = /*#__PURE__*/popperGenerator({\n  defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };","/*!\n  * Bootstrap v5.1.3 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\nimport * as Popper from '@popperjs/core';\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst MAX_UID = 1000000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\nconst toType = obj => {\n  if (obj === null || obj === undefined) {\n    return `${obj}`;\n  }\n\n  return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n};\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\n\nconst getUID = prefix => {\n  do {\n    prefix += Math.floor(Math.random() * MAX_UID);\n  } while (document.getElementById(prefix));\n\n  return prefix;\n};\n\nconst getSelector = element => {\n  let selector = element.getAttribute('data-bs-target');\n\n  if (!selector || selector === '#') {\n    let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n    // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n    // `document.querySelector` will rightfully complain it is invalid.\n    // See https://github.com/twbs/bootstrap/issues/32273\n\n    if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n      return null;\n    } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n    if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n      hrefAttr = `#${hrefAttr.split('#')[1]}`;\n    }\n\n    selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n  }\n\n  return selector;\n};\n\nconst getSelectorFromElement = element => {\n  const selector = getSelector(element);\n\n  if (selector) {\n    return document.querySelector(selector) ? selector : null;\n  }\n\n  return null;\n};\n\nconst getElementFromSelector = element => {\n  const selector = getSelector(element);\n  return selector ? document.querySelector(selector) : null;\n};\n\nconst getTransitionDurationFromElement = element => {\n  if (!element) {\n    return 0;\n  } // Get transition-duration of the element\n\n\n  let {\n    transitionDuration,\n    transitionDelay\n  } = window.getComputedStyle(element);\n  const floatTransitionDuration = Number.parseFloat(transitionDuration);\n  const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n  if (!floatTransitionDuration && !floatTransitionDelay) {\n    return 0;\n  } // If multiple durations are defined, take the first\n\n\n  transitionDuration = transitionDuration.split(',')[0];\n  transitionDelay = transitionDelay.split(',')[0];\n  return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n};\n\nconst triggerTransitionEnd = element => {\n  element.dispatchEvent(new Event(TRANSITION_END));\n};\n\nconst isElement = obj => {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (typeof obj.jquery !== 'undefined') {\n    obj = obj[0];\n  }\n\n  return typeof obj.nodeType !== 'undefined';\n};\n\nconst getElement = obj => {\n  if (isElement(obj)) {\n    // it's a jQuery object or a node element\n    return obj.jquery ? obj[0] : obj;\n  }\n\n  if (typeof obj === 'string' && obj.length > 0) {\n    return document.querySelector(obj);\n  }\n\n  return null;\n};\n\nconst typeCheckConfig = (componentName, config, configTypes) => {\n  Object.keys(configTypes).forEach(property => {\n    const expectedTypes = configTypes[property];\n    const value = config[property];\n    const valueType = value && isElement(value) ? 'element' : toType(value);\n\n    if (!new RegExp(expectedTypes).test(valueType)) {\n      throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n    }\n  });\n};\n\nconst isVisible = element => {\n  if (!isElement(element) || element.getClientRects().length === 0) {\n    return false;\n  }\n\n  return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n};\n\nconst isDisabled = element => {\n  if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n    return true;\n  }\n\n  if (element.classList.contains('disabled')) {\n    return true;\n  }\n\n  if (typeof element.disabled !== 'undefined') {\n    return element.disabled;\n  }\n\n  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\n\nconst findShadowRoot = element => {\n  if (!document.documentElement.attachShadow) {\n    return null;\n  } // Can find the shadow root otherwise it'll return the document\n\n\n  if (typeof element.getRootNode === 'function') {\n    const root = element.getRootNode();\n    return root instanceof ShadowRoot ? root : null;\n  }\n\n  if (element instanceof ShadowRoot) {\n    return element;\n  } // when we don't find a shadow root\n\n\n  if (!element.parentNode) {\n    return null;\n  }\n\n  return findShadowRoot(element.parentNode);\n};\n\nconst noop = () => {};\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\n\n\nconst reflow = element => {\n  // eslint-disable-next-line no-unused-expressions\n  element.offsetHeight;\n};\n\nconst getjQuery = () => {\n  const {\n    jQuery\n  } = window;\n\n  if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n    return jQuery;\n  }\n\n  return null;\n};\n\nconst DOMContentLoadedCallbacks = [];\n\nconst onDOMContentLoaded = callback => {\n  if (document.readyState === 'loading') {\n    // add listener on the first call when the document is in loading state\n    if (!DOMContentLoadedCallbacks.length) {\n      document.addEventListener('DOMContentLoaded', () => {\n        DOMContentLoadedCallbacks.forEach(callback => callback());\n      });\n    }\n\n    DOMContentLoadedCallbacks.push(callback);\n  } else {\n    callback();\n  }\n};\n\nconst isRTL = () => document.documentElement.dir === 'rtl';\n\nconst defineJQueryPlugin = plugin => {\n  onDOMContentLoaded(() => {\n    const $ = getjQuery();\n    /* istanbul ignore if */\n\n    if ($) {\n      const name = plugin.NAME;\n      const JQUERY_NO_CONFLICT = $.fn[name];\n      $.fn[name] = plugin.jQueryInterface;\n      $.fn[name].Constructor = plugin;\n\n      $.fn[name].noConflict = () => {\n        $.fn[name] = JQUERY_NO_CONFLICT;\n        return plugin.jQueryInterface;\n      };\n    }\n  });\n};\n\nconst execute = callback => {\n  if (typeof callback === 'function') {\n    callback();\n  }\n};\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n  if (!waitForTransition) {\n    execute(callback);\n    return;\n  }\n\n  const durationPadding = 5;\n  const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n  let called = false;\n\n  const handler = ({\n    target\n  }) => {\n    if (target !== transitionElement) {\n      return;\n    }\n\n    called = true;\n    transitionElement.removeEventListener(TRANSITION_END, handler);\n    execute(callback);\n  };\n\n  transitionElement.addEventListener(TRANSITION_END, handler);\n  setTimeout(() => {\n    if (!called) {\n      triggerTransitionEnd(transitionElement);\n    }\n  }, emulatedDuration);\n};\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list    The list of elements\n * @param activeElement   The active element\n * @param shouldGetNext   Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\n\n\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n  let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n  if (index === -1) {\n    return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n  }\n\n  const listLength = list.length;\n  index += shouldGetNext ? 1 : -1;\n\n  if (isCycleAllowed) {\n    index = (index + listLength) % listLength;\n  }\n\n  return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\n\nlet uidEvent = 1;\nconst customEvents = {\n  mouseenter: 'mouseover',\n  mouseleave: 'mouseout'\n};\nconst customEventsRegex = /^(mouseenter|mouseleave)/i;\nconst nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n/**\n * ------------------------------------------------------------------------\n * Private methods\n * ------------------------------------------------------------------------\n */\n\nfunction getUidEvent(element, uid) {\n  return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n}\n\nfunction getEvent(element) {\n  const uid = getUidEvent(element);\n  element.uidEvent = uid;\n  eventRegistry[uid] = eventRegistry[uid] || {};\n  return eventRegistry[uid];\n}\n\nfunction bootstrapHandler(element, fn) {\n  return function handler(event) {\n    event.delegateTarget = element;\n\n    if (handler.oneOff) {\n      EventHandler.off(element, event.type, fn);\n    }\n\n    return fn.apply(element, [event]);\n  };\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n  return function handler(event) {\n    const domElements = element.querySelectorAll(selector);\n\n    for (let {\n      target\n    } = event; target && target !== this; target = target.parentNode) {\n      for (let i = domElements.length; i--;) {\n        if (domElements[i] === target) {\n          event.delegateTarget = target;\n\n          if (handler.oneOff) {\n            EventHandler.off(element, event.type, selector, fn);\n          }\n\n          return fn.apply(target, [event]);\n        }\n      }\n    } // To please ESLint\n\n\n    return null;\n  };\n}\n\nfunction findHandler(events, handler, delegationSelector = null) {\n  const uidEventList = Object.keys(events);\n\n  for (let i = 0, len = uidEventList.length; i < len; i++) {\n    const event = events[uidEventList[i]];\n\n    if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n      return event;\n    }\n  }\n\n  return null;\n}\n\nfunction normalizeParams(originalTypeEvent, handler, delegationFn) {\n  const delegation = typeof handler === 'string';\n  const originalHandler = delegation ? delegationFn : handler;\n  let typeEvent = getTypeEvent(originalTypeEvent);\n  const isNative = nativeEvents.has(typeEvent);\n\n  if (!isNative) {\n    typeEvent = originalTypeEvent;\n  }\n\n  return [delegation, originalHandler, typeEvent];\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n  if (typeof originalTypeEvent !== 'string' || !element) {\n    return;\n  }\n\n  if (!handler) {\n    handler = delegationFn;\n    delegationFn = null;\n  } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n  // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n  if (customEventsRegex.test(originalTypeEvent)) {\n    const wrapFn = fn => {\n      return function (event) {\n        if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n          return fn.call(this, event);\n        }\n      };\n    };\n\n    if (delegationFn) {\n      delegationFn = wrapFn(delegationFn);\n    } else {\n      handler = wrapFn(handler);\n    }\n  }\n\n  const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n  const events = getEvent(element);\n  const handlers = events[typeEvent] || (events[typeEvent] = {});\n  const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n  if (previousFn) {\n    previousFn.oneOff = previousFn.oneOff && oneOff;\n    return;\n  }\n\n  const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n  const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n  fn.delegationSelector = delegation ? handler : null;\n  fn.originalHandler = originalHandler;\n  fn.oneOff = oneOff;\n  fn.uidEvent = uid;\n  handlers[uid] = fn;\n  element.addEventListener(typeEvent, fn, delegation);\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n  const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n  if (!fn) {\n    return;\n  }\n\n  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n  delete events[typeEvent][fn.uidEvent];\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n  const storeElementEvent = events[typeEvent] || {};\n  Object.keys(storeElementEvent).forEach(handlerKey => {\n    if (handlerKey.includes(namespace)) {\n      const event = storeElementEvent[handlerKey];\n      removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n    }\n  });\n}\n\nfunction getTypeEvent(event) {\n  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n  event = event.replace(stripNameRegex, '');\n  return customEvents[event] || event;\n}\n\nconst EventHandler = {\n  on(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, false);\n  },\n\n  one(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, true);\n  },\n\n  off(element, originalTypeEvent, handler, delegationFn) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const inNamespace = typeEvent !== originalTypeEvent;\n    const events = getEvent(element);\n    const isNamespace = originalTypeEvent.startsWith('.');\n\n    if (typeof originalHandler !== 'undefined') {\n      // Simplest case: handler is passed, remove that listener ONLY.\n      if (!events || !events[typeEvent]) {\n        return;\n      }\n\n      removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n      return;\n    }\n\n    if (isNamespace) {\n      Object.keys(events).forEach(elementEvent => {\n        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n      });\n    }\n\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(keyHandlers => {\n      const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n      if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n        const event = storeElementEvent[keyHandlers];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  },\n\n  trigger(element, event, args) {\n    if (typeof event !== 'string' || !element) {\n      return null;\n    }\n\n    const $ = getjQuery();\n    const typeEvent = getTypeEvent(event);\n    const inNamespace = event !== typeEvent;\n    const isNative = nativeEvents.has(typeEvent);\n    let jQueryEvent;\n    let bubbles = true;\n    let nativeDispatch = true;\n    let defaultPrevented = false;\n    let evt = null;\n\n    if (inNamespace && $) {\n      jQueryEvent = $.Event(event, args);\n      $(element).trigger(jQueryEvent);\n      bubbles = !jQueryEvent.isPropagationStopped();\n      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n      defaultPrevented = jQueryEvent.isDefaultPrevented();\n    }\n\n    if (isNative) {\n      evt = document.createEvent('HTMLEvents');\n      evt.initEvent(typeEvent, bubbles, true);\n    } else {\n      evt = new CustomEvent(event, {\n        bubbles,\n        cancelable: true\n      });\n    } // merge custom information in our event\n\n\n    if (typeof args !== 'undefined') {\n      Object.keys(args).forEach(key => {\n        Object.defineProperty(evt, key, {\n          get() {\n            return args[key];\n          }\n\n        });\n      });\n    }\n\n    if (defaultPrevented) {\n      evt.preventDefault();\n    }\n\n    if (nativeDispatch) {\n      element.dispatchEvent(evt);\n    }\n\n    if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n      jQueryEvent.preventDefault();\n    }\n\n    return evt;\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst elementMap = new Map();\nconst Data = {\n  set(element, key, instance) {\n    if (!elementMap.has(element)) {\n      elementMap.set(element, new Map());\n    }\n\n    const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n    // can be removed later when multiple key/instances are fine to be used\n\n    if (!instanceMap.has(key) && instanceMap.size !== 0) {\n      // eslint-disable-next-line no-console\n      console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n      return;\n    }\n\n    instanceMap.set(key, instance);\n  },\n\n  get(element, key) {\n    if (elementMap.has(element)) {\n      return elementMap.get(element).get(key) || null;\n    }\n\n    return null;\n  },\n\n  remove(element, key) {\n    if (!elementMap.has(element)) {\n      return;\n    }\n\n    const instanceMap = elementMap.get(element);\n    instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n    if (instanceMap.size === 0) {\n      elementMap.delete(element);\n    }\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst VERSION = '5.1.3';\n\nclass BaseComponent {\n  constructor(element) {\n    element = getElement(element);\n\n    if (!element) {\n      return;\n    }\n\n    this._element = element;\n    Data.set(this._element, this.constructor.DATA_KEY, this);\n  }\n\n  dispose() {\n    Data.remove(this._element, this.constructor.DATA_KEY);\n    EventHandler.off(this._element, this.constructor.EVENT_KEY);\n    Object.getOwnPropertyNames(this).forEach(propertyName => {\n      this[propertyName] = null;\n    });\n  }\n\n  _queueCallback(callback, element, isAnimated = true) {\n    executeAfterTransition(callback, element, isAnimated);\n  }\n  /** Static */\n\n\n  static getInstance(element) {\n    return Data.get(getElement(element), this.DATA_KEY);\n  }\n\n  static getOrCreateInstance(element, config = {}) {\n    return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n  }\n\n  static get VERSION() {\n    return VERSION;\n  }\n\n  static get NAME() {\n    throw new Error('You have to implement the static method \"NAME\", for each component!');\n  }\n\n  static get DATA_KEY() {\n    return `bs.${this.NAME}`;\n  }\n\n  static get EVENT_KEY() {\n    return `.${this.DATA_KEY}`;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n  const clickEvent = `click.dismiss${component.EVENT_KEY}`;\n  const name = component.NAME;\n  EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const target = getElementFromSelector(this) || this.closest(`.${name}`);\n    const instance = component.getOrCreateInstance(target); // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n\n    instance[method]();\n  });\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$d = 'alert';\nconst DATA_KEY$c = 'bs.alert';\nconst EVENT_KEY$c = `.${DATA_KEY$c}`;\nconst EVENT_CLOSE = `close${EVENT_KEY$c}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY$c}`;\nconst CLASS_NAME_FADE$5 = 'fade';\nconst CLASS_NAME_SHOW$8 = 'show';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$d;\n  } // Public\n\n\n  close() {\n    const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);\n\n    if (closeEvent.defaultPrevented) {\n      return;\n    }\n\n    this._element.classList.remove(CLASS_NAME_SHOW$8);\n\n    const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);\n\n    this._queueCallback(() => this._destroyElement(), this._element, isAnimated);\n  } // Private\n\n\n  _destroyElement() {\n    this._element.remove();\n\n    EventHandler.trigger(this._element, EVENT_CLOSED);\n    this.dispose();\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Alert.getOrCreateInstance(this);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](this);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nenableDismissTrigger(Alert, 'close');\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Alert to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Alert);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$c = 'button';\nconst DATA_KEY$b = 'bs.button';\nconst EVENT_KEY$b = `.${DATA_KEY$b}`;\nconst DATA_API_KEY$7 = '.data-api';\nconst CLASS_NAME_ACTIVE$3 = 'active';\nconst SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$b}${DATA_API_KEY$7}`;\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$c;\n  } // Public\n\n\n  toggle() {\n    // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n    this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Button.getOrCreateInstance(this);\n\n      if (config === 'toggle') {\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n  event.preventDefault();\n  const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n  const data = Button.getOrCreateInstance(button);\n  data.toggle();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Button to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Button);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nfunction normalizeData(val) {\n  if (val === 'true') {\n    return true;\n  }\n\n  if (val === 'false') {\n    return false;\n  }\n\n  if (val === Number(val).toString()) {\n    return Number(val);\n  }\n\n  if (val === '' || val === 'null') {\n    return null;\n  }\n\n  return val;\n}\n\nfunction normalizeDataKey(key) {\n  return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n}\n\nconst Manipulator = {\n  setDataAttribute(element, key, value) {\n    element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n  },\n\n  removeDataAttribute(element, key) {\n    element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n  },\n\n  getDataAttributes(element) {\n    if (!element) {\n      return {};\n    }\n\n    const attributes = {};\n    Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n      let pureKey = key.replace(/^bs/, '');\n      pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n      attributes[pureKey] = normalizeData(element.dataset[key]);\n    });\n    return attributes;\n  },\n\n  getDataAttribute(element, key) {\n    return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n  },\n\n  offset(element) {\n    const rect = element.getBoundingClientRect();\n    return {\n      top: rect.top + window.pageYOffset,\n      left: rect.left + window.pageXOffset\n    };\n  },\n\n  position(element) {\n    return {\n      top: element.offsetTop,\n      left: element.offsetLeft\n    };\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst NODE_TEXT = 3;\nconst SelectorEngine = {\n  find(selector, element = document.documentElement) {\n    return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n  },\n\n  findOne(selector, element = document.documentElement) {\n    return Element.prototype.querySelector.call(element, selector);\n  },\n\n  children(element, selector) {\n    return [].concat(...element.children).filter(child => child.matches(selector));\n  },\n\n  parents(element, selector) {\n    const parents = [];\n    let ancestor = element.parentNode;\n\n    while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n      if (ancestor.matches(selector)) {\n        parents.push(ancestor);\n      }\n\n      ancestor = ancestor.parentNode;\n    }\n\n    return parents;\n  },\n\n  prev(element, selector) {\n    let previous = element.previousElementSibling;\n\n    while (previous) {\n      if (previous.matches(selector)) {\n        return [previous];\n      }\n\n      previous = previous.previousElementSibling;\n    }\n\n    return [];\n  },\n\n  next(element, selector) {\n    let next = element.nextElementSibling;\n\n    while (next) {\n      if (next.matches(selector)) {\n        return [next];\n      }\n\n      next = next.nextElementSibling;\n    }\n\n    return [];\n  },\n\n  focusableChildren(element) {\n    const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable=\"true\"]'].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(', ');\n    return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$b = 'carousel';\nconst DATA_KEY$a = 'bs.carousel';\nconst EVENT_KEY$a = `.${DATA_KEY$a}`;\nconst DATA_API_KEY$6 = '.data-api';\nconst ARROW_LEFT_KEY = 'ArrowLeft';\nconst ARROW_RIGHT_KEY = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst SWIPE_THRESHOLD = 40;\nconst Default$a = {\n  interval: 5000,\n  keyboard: true,\n  slide: false,\n  pause: 'hover',\n  wrap: true,\n  touch: true\n};\nconst DefaultType$a = {\n  interval: '(number|boolean)',\n  keyboard: 'boolean',\n  slide: '(boolean|string)',\n  pause: '(string|boolean)',\n  wrap: 'boolean',\n  touch: 'boolean'\n};\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\nconst KEY_TO_DIRECTION = {\n  [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n  [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n};\nconst EVENT_SLIDE = `slide${EVENT_KEY$a}`;\nconst EVENT_SLID = `slid${EVENT_KEY$a}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY$a}`;\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$a}`;\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$a}`;\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY$a}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$a}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY$a}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$a}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY$a}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY$a}`;\nconst EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$a}${DATA_API_KEY$6}`;\nconst EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE$2 = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SELECTOR_ACTIVE$1 = '.active';\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_INDICATOR = '[data-bs-target]';\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Carousel extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._items = null;\n    this._interval = null;\n    this._activeElement = null;\n    this._isPaused = false;\n    this._isSliding = false;\n    this.touchTimeout = null;\n    this.touchStartX = 0;\n    this.touchDeltaX = 0;\n    this._config = this._getConfig(config);\n    this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n    this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n    this._pointerEvent = Boolean(window.PointerEvent);\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$a;\n  }\n\n  static get NAME() {\n    return NAME$b;\n  } // Public\n\n\n  next() {\n    this._slide(ORDER_NEXT);\n  }\n\n  nextWhenVisible() {\n    // Don't call next when the page isn't visible\n    // or the carousel or its parent isn't visible\n    if (!document.hidden && isVisible(this._element)) {\n      this.next();\n    }\n  }\n\n  prev() {\n    this._slide(ORDER_PREV);\n  }\n\n  pause(event) {\n    if (!event) {\n      this._isPaused = true;\n    }\n\n    if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n      triggerTransitionEnd(this._element);\n      this.cycle(true);\n    }\n\n    clearInterval(this._interval);\n    this._interval = null;\n  }\n\n  cycle(event) {\n    if (!event) {\n      this._isPaused = false;\n    }\n\n    if (this._interval) {\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    if (this._config && this._config.interval && !this._isPaused) {\n      this._updateInterval();\n\n      this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n    }\n  }\n\n  to(index) {\n    this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeIndex = this._getItemIndex(this._activeElement);\n\n    if (index > this._items.length - 1 || index < 0) {\n      return;\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n      return;\n    }\n\n    if (activeIndex === index) {\n      this.pause();\n      this.cycle();\n      return;\n    }\n\n    const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n    this._slide(order, this._items[index]);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$a,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$b, config, DefaultType$a);\n    return config;\n  }\n\n  _handleSwipe() {\n    const absDeltax = Math.abs(this.touchDeltaX);\n\n    if (absDeltax <= SWIPE_THRESHOLD) {\n      return;\n    }\n\n    const direction = absDeltax / this.touchDeltaX;\n    this.touchDeltaX = 0;\n\n    if (!direction) {\n      return;\n    }\n\n    this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n  }\n\n  _addEventListeners() {\n    if (this._config.keyboard) {\n      EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n    }\n\n    if (this._config.pause === 'hover') {\n      EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n      EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n    }\n\n    if (this._config.touch && this._touchSupported) {\n      this._addTouchEventListeners();\n    }\n  }\n\n  _addTouchEventListeners() {\n    const hasPointerPenTouch = event => {\n      return this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);\n    };\n\n    const start = event => {\n      if (hasPointerPenTouch(event)) {\n        this.touchStartX = event.clientX;\n      } else if (!this._pointerEvent) {\n        this.touchStartX = event.touches[0].clientX;\n      }\n    };\n\n    const move = event => {\n      // ensure swiping with one touch and not pinching\n      this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n    };\n\n    const end = event => {\n      if (hasPointerPenTouch(event)) {\n        this.touchDeltaX = event.clientX - this.touchStartX;\n      }\n\n      this._handleSwipe();\n\n      if (this._config.pause === 'hover') {\n        // If it's a touch-enabled device, mouseenter/leave are fired as\n        // part of the mouse compatibility events on first tap - the carousel\n        // would stop cycling until user tapped out of it;\n        // here, we listen for touchend, explicitly pause the carousel\n        // (as if it's the second time we tap on it, mouseenter compat event\n        // is NOT fired) and after a timeout (to allow for mouse compatibility\n        // events to fire) we explicitly restart cycling\n        this.pause();\n\n        if (this.touchTimeout) {\n          clearTimeout(this.touchTimeout);\n        }\n\n        this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n      }\n    };\n\n    SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n      EventHandler.on(itemImg, EVENT_DRAG_START, event => event.preventDefault());\n    });\n\n    if (this._pointerEvent) {\n      EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n      EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n      this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n    } else {\n      EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n      EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n      EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n    }\n  }\n\n  _keydown(event) {\n    if (/input|textarea/i.test(event.target.tagName)) {\n      return;\n    }\n\n    const direction = KEY_TO_DIRECTION[event.key];\n\n    if (direction) {\n      event.preventDefault();\n\n      this._slide(direction);\n    }\n  }\n\n  _getItemIndex(element) {\n    this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n    return this._items.indexOf(element);\n  }\n\n  _getItemByOrder(order, activeElement) {\n    const isNext = order === ORDER_NEXT;\n    return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n  }\n\n  _triggerSlideEvent(relatedTarget, eventDirectionName) {\n    const targetIndex = this._getItemIndex(relatedTarget);\n\n    const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n    return EventHandler.trigger(this._element, EVENT_SLIDE, {\n      relatedTarget,\n      direction: eventDirectionName,\n      from: fromIndex,\n      to: targetIndex\n    });\n  }\n\n  _setActiveIndicatorElement(element) {\n    if (this._indicatorsElement) {\n      const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n      activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n      activeIndicator.removeAttribute('aria-current');\n      const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n      for (let i = 0; i < indicators.length; i++) {\n        if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n          indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n          indicators[i].setAttribute('aria-current', 'true');\n          break;\n        }\n      }\n    }\n  }\n\n  _updateInterval() {\n    const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    if (!element) {\n      return;\n    }\n\n    const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n    if (elementInterval) {\n      this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n      this._config.interval = elementInterval;\n    } else {\n      this._config.interval = this._config.defaultInterval || this._config.interval;\n    }\n  }\n\n  _slide(directionOrOrder, element) {\n    const order = this._directionToOrder(directionOrOrder);\n\n    const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeElementIndex = this._getItemIndex(activeElement);\n\n    const nextElement = element || this._getItemByOrder(order, activeElement);\n\n    const nextElementIndex = this._getItemIndex(nextElement);\n\n    const isCycling = Boolean(this._interval);\n    const isNext = order === ORDER_NEXT;\n    const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n    const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n    const eventDirectionName = this._orderToDirection(order);\n\n    if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n      this._isSliding = false;\n      return;\n    }\n\n    if (this._isSliding) {\n      return;\n    }\n\n    const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n    if (slideEvent.defaultPrevented) {\n      return;\n    }\n\n    if (!activeElement || !nextElement) {\n      // Some weirdness is happening, so we bail\n      return;\n    }\n\n    this._isSliding = true;\n\n    if (isCycling) {\n      this.pause();\n    }\n\n    this._setActiveIndicatorElement(nextElement);\n\n    this._activeElement = nextElement;\n\n    const triggerSlidEvent = () => {\n      EventHandler.trigger(this._element, EVENT_SLID, {\n        relatedTarget: nextElement,\n        direction: eventDirectionName,\n        from: activeElementIndex,\n        to: nextElementIndex\n      });\n    };\n\n    if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n      nextElement.classList.add(orderClassName);\n      reflow(nextElement);\n      activeElement.classList.add(directionalClassName);\n      nextElement.classList.add(directionalClassName);\n\n      const completeCallBack = () => {\n        nextElement.classList.remove(directionalClassName, orderClassName);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n        this._isSliding = false;\n        setTimeout(triggerSlidEvent, 0);\n      };\n\n      this._queueCallback(completeCallBack, activeElement, true);\n    } else {\n      activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n      nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n      this._isSliding = false;\n      triggerSlidEvent();\n    }\n\n    if (isCycling) {\n      this.cycle();\n    }\n  }\n\n  _directionToOrder(direction) {\n    if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n      return direction;\n    }\n\n    if (isRTL()) {\n      return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n    }\n\n    return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n  }\n\n  _orderToDirection(order) {\n    if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n      return order;\n    }\n\n    if (isRTL()) {\n      return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n    }\n\n    return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n  } // Static\n\n\n  static carouselInterface(element, config) {\n    const data = Carousel.getOrCreateInstance(element, config);\n    let {\n      _config\n    } = data;\n\n    if (typeof config === 'object') {\n      _config = { ..._config,\n        ...config\n      };\n    }\n\n    const action = typeof config === 'string' ? config : _config.slide;\n\n    if (typeof config === 'number') {\n      data.to(config);\n    } else if (typeof action === 'string') {\n      if (typeof data[action] === 'undefined') {\n        throw new TypeError(`No method named \"${action}\"`);\n      }\n\n      data[action]();\n    } else if (_config.interval && _config.ride) {\n      data.pause();\n      data.cycle();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Carousel.carouselInterface(this, config);\n    });\n  }\n\n  static dataApiClickHandler(event) {\n    const target = getElementFromSelector(this);\n\n    if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n      return;\n    }\n\n    const config = { ...Manipulator.getDataAttributes(target),\n      ...Manipulator.getDataAttributes(this)\n    };\n    const slideIndex = this.getAttribute('data-bs-slide-to');\n\n    if (slideIndex) {\n      config.interval = false;\n    }\n\n    Carousel.carouselInterface(target, config);\n\n    if (slideIndex) {\n      Carousel.getInstance(target).to(slideIndex);\n    }\n\n    event.preventDefault();\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\nEventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n  const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n  for (let i = 0, len = carousels.length; i < len; i++) {\n    Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n  }\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Carousel to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Carousel);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$a = 'collapse';\nconst DATA_KEY$9 = 'bs.collapse';\nconst EVENT_KEY$9 = `.${DATA_KEY$9}`;\nconst DATA_API_KEY$5 = '.data-api';\nconst Default$9 = {\n  toggle: true,\n  parent: null\n};\nconst DefaultType$9 = {\n  toggle: 'boolean',\n  parent: '(null|element)'\n};\nconst EVENT_SHOW$5 = `show${EVENT_KEY$9}`;\nconst EVENT_SHOWN$5 = `shown${EVENT_KEY$9}`;\nconst EVENT_HIDE$5 = `hide${EVENT_KEY$9}`;\nconst EVENT_HIDDEN$5 = `hidden${EVENT_KEY$9}`;\nconst EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$9}${DATA_API_KEY$5}`;\nconst CLASS_NAME_SHOW$7 = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal';\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';\nconst SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._isTransitioning = false;\n    this._config = this._getConfig(config);\n    this._triggerArray = [];\n    const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n    for (let i = 0, len = toggleList.length; i < len; i++) {\n      const elem = toggleList[i];\n      const selector = getSelectorFromElement(elem);\n      const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n      if (selector !== null && filterElement.length) {\n        this._selector = selector;\n\n        this._triggerArray.push(elem);\n      }\n    }\n\n    this._initializeChildren();\n\n    if (!this._config.parent) {\n      this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());\n    }\n\n    if (this._config.toggle) {\n      this.toggle();\n    }\n  } // Getters\n\n\n  static get Default() {\n    return Default$9;\n  }\n\n  static get NAME() {\n    return NAME$a;\n  } // Public\n\n\n  toggle() {\n    if (this._isShown()) {\n      this.hide();\n    } else {\n      this.show();\n    }\n  }\n\n  show() {\n    if (this._isTransitioning || this._isShown()) {\n      return;\n    }\n\n    let actives = [];\n    let activesData;\n\n    if (this._config.parent) {\n      const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);\n      actives = SelectorEngine.find(SELECTOR_ACTIVES, this._config.parent).filter(elem => !children.includes(elem)); // remove children if greater depth\n    }\n\n    const container = SelectorEngine.findOne(this._selector);\n\n    if (actives.length) {\n      const tempActiveData = actives.find(elem => container !== elem);\n      activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n      if (activesData && activesData._isTransitioning) {\n        return;\n      }\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    actives.forEach(elemActive => {\n      if (container !== elemActive) {\n        Collapse.getOrCreateInstance(elemActive, {\n          toggle: false\n        }).hide();\n      }\n\n      if (!activesData) {\n        Data.set(elemActive, DATA_KEY$9, null);\n      }\n    });\n\n    const dimension = this._getDimension();\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.style[dimension] = 0;\n\n    this._addAriaAndCollapsedClass(this._triggerArray, true);\n\n    this._isTransitioning = true;\n\n    const complete = () => {\n      this._isTransitioning = false;\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n\n      this._element.style[dimension] = '';\n      EventHandler.trigger(this._element, EVENT_SHOWN$5);\n    };\n\n    const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n    const scrollSize = `scroll${capitalizedDimension}`;\n\n    this._queueCallback(complete, this._element, true);\n\n    this._element.style[dimension] = `${this._element[scrollSize]}px`;\n  }\n\n  hide() {\n    if (this._isTransitioning || !this._isShown()) {\n      return;\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n\n    const triggerArrayLength = this._triggerArray.length;\n\n    for (let i = 0; i < triggerArrayLength; i++) {\n      const trigger = this._triggerArray[i];\n      const elem = getElementFromSelector(trigger);\n\n      if (elem && !this._isShown(elem)) {\n        this._addAriaAndCollapsedClass([trigger], false);\n      }\n    }\n\n    this._isTransitioning = true;\n\n    const complete = () => {\n      this._isTransitioning = false;\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n    };\n\n    this._element.style[dimension] = '';\n\n    this._queueCallback(complete, this._element, true);\n  }\n\n  _isShown(element = this._element) {\n    return element.classList.contains(CLASS_NAME_SHOW$7);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$9,\n      ...Manipulator.getDataAttributes(this._element),\n      ...config\n    };\n    config.toggle = Boolean(config.toggle); // Coerce string values\n\n    config.parent = getElement(config.parent);\n    typeCheckConfig(NAME$a, config, DefaultType$9);\n    return config;\n  }\n\n  _getDimension() {\n    return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;\n  }\n\n  _initializeChildren() {\n    if (!this._config.parent) {\n      return;\n    }\n\n    const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);\n    SelectorEngine.find(SELECTOR_DATA_TOGGLE$4, this._config.parent).filter(elem => !children.includes(elem)).forEach(element => {\n      const selected = getElementFromSelector(element);\n\n      if (selected) {\n        this._addAriaAndCollapsedClass([element], this._isShown(selected));\n      }\n    });\n  }\n\n  _addAriaAndCollapsedClass(triggerArray, isOpen) {\n    if (!triggerArray.length) {\n      return;\n    }\n\n    triggerArray.forEach(elem => {\n      if (isOpen) {\n        elem.classList.remove(CLASS_NAME_COLLAPSED);\n      } else {\n        elem.classList.add(CLASS_NAME_COLLAPSED);\n      }\n\n      elem.setAttribute('aria-expanded', isOpen);\n    });\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const _config = {};\n\n      if (typeof config === 'string' && /show|hide/.test(config)) {\n        _config.toggle = false;\n      }\n\n      const data = Collapse.getOrCreateInstance(this, _config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n  if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n    event.preventDefault();\n  }\n\n  const selector = getSelectorFromElement(this);\n  const selectorElements = SelectorEngine.find(selector);\n  selectorElements.forEach(element => {\n    Collapse.getOrCreateInstance(element, {\n      toggle: false\n    }).toggle();\n  });\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Collapse to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Collapse);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$9 = 'dropdown';\nconst DATA_KEY$8 = 'bs.dropdown';\nconst EVENT_KEY$8 = `.${DATA_KEY$8}`;\nconst DATA_API_KEY$4 = '.data-api';\nconst ESCAPE_KEY$2 = 'Escape';\nconst SPACE_KEY = 'Space';\nconst TAB_KEY$1 = 'Tab';\nconst ARROW_UP_KEY = 'ArrowUp';\nconst ARROW_DOWN_KEY = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\nconst EVENT_HIDE$4 = `hide${EVENT_KEY$8}`;\nconst EVENT_HIDDEN$4 = `hidden${EVENT_KEY$8}`;\nconst EVENT_SHOW$4 = `show${EVENT_KEY$8}`;\nconst EVENT_SHOWN$4 = `shown${EVENT_KEY$8}`;\nconst EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$8}${DATA_API_KEY$4}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$8}${DATA_API_KEY$4}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$8}${DATA_API_KEY$4}`;\nconst CLASS_NAME_SHOW$6 = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_NAVBAR = 'navbar';\nconst SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst Default$8 = {\n  offset: [0, 2],\n  boundary: 'clippingParents',\n  reference: 'toggle',\n  display: 'dynamic',\n  popperConfig: null,\n  autoClose: true\n};\nconst DefaultType$8 = {\n  offset: '(array|string|function)',\n  boundary: '(string|element)',\n  reference: '(string|element|object)',\n  display: 'string',\n  popperConfig: '(null|object|function)',\n  autoClose: '(boolean|string)'\n};\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._popper = null;\n    this._config = this._getConfig(config);\n    this._menu = this._getMenuElement();\n    this._inNavbar = this._detectNavbar();\n  } // Getters\n\n\n  static get Default() {\n    return Default$8;\n  }\n\n  static get DefaultType() {\n    return DefaultType$8;\n  }\n\n  static get NAME() {\n    return NAME$9;\n  } // Public\n\n\n  toggle() {\n    return this._isShown() ? this.hide() : this.show();\n  }\n\n  show() {\n    if (isDisabled(this._element) || this._isShown(this._menu)) {\n      return;\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    const parent = Dropdown.getParentFromElement(this._element); // Totally disable Popper for Dropdowns in Navbar\n\n    if (this._inNavbar) {\n      Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n    } else {\n      this._createPopper(parent);\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n    }\n\n    this._element.focus();\n\n    this._element.setAttribute('aria-expanded', true);\n\n    this._menu.classList.add(CLASS_NAME_SHOW$6);\n\n    this._element.classList.add(CLASS_NAME_SHOW$6);\n\n    EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n  }\n\n  hide() {\n    if (isDisabled(this._element) || !this._isShown(this._menu)) {\n      return;\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n\n    this._completeHide(relatedTarget);\n  }\n\n  dispose() {\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  update() {\n    this._inNavbar = this._detectNavbar();\n\n    if (this._popper) {\n      this._popper.update();\n    }\n  } // Private\n\n\n  _completeHide(relatedTarget) {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    } // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    this._menu.classList.remove(CLASS_NAME_SHOW$6);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$6);\n\n    this._element.setAttribute('aria-expanded', 'false');\n\n    Manipulator.removeDataAttribute(this._menu, 'popper');\n    EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n  }\n\n  _getConfig(config) {\n    config = { ...this.constructor.Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...config\n    };\n    typeCheckConfig(NAME$9, config, this.constructor.DefaultType);\n\n    if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n      // Popper virtual elements require a getBoundingClientRect method\n      throw new TypeError(`${NAME$9.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n    }\n\n    return config;\n  }\n\n  _createPopper(parent) {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n    }\n\n    let referenceElement = this._element;\n\n    if (this._config.reference === 'parent') {\n      referenceElement = parent;\n    } else if (isElement(this._config.reference)) {\n      referenceElement = getElement(this._config.reference);\n    } else if (typeof this._config.reference === 'object') {\n      referenceElement = this._config.reference;\n    }\n\n    const popperConfig = this._getPopperConfig();\n\n    const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n    this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n\n    if (isDisplayStatic) {\n      Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n    }\n  }\n\n  _isShown(element = this._element) {\n    return element.classList.contains(CLASS_NAME_SHOW$6);\n  }\n\n  _getMenuElement() {\n    return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n  }\n\n  _getPlacement() {\n    const parentDropdown = this._element.parentNode;\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n      return PLACEMENT_RIGHT;\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n      return PLACEMENT_LEFT;\n    } // We need to trim the value because custom properties can also include spaces\n\n\n    const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n      return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n    }\n\n    return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n  }\n\n  _detectNavbar() {\n    return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig() {\n    const defaultBsPopperConfig = {\n      placement: this._getPlacement(),\n      modifiers: [{\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }]\n    }; // Disable Popper if we have a static display\n\n    if (this._config.display === 'static') {\n      defaultBsPopperConfig.modifiers = [{\n        name: 'applyStyles',\n        enabled: false\n      }];\n    }\n\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _selectMenuItem({\n    key,\n    target\n  }) {\n    const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n    if (!items.length) {\n      return;\n    } // if target isn't included in items (e.g. when expanding the dropdown)\n    // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n    getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Dropdown.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    });\n  }\n\n  static clearMenus(event) {\n    if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1)) {\n      return;\n    }\n\n    const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n    for (let i = 0, len = toggles.length; i < len; i++) {\n      const context = Dropdown.getInstance(toggles[i]);\n\n      if (!context || context._config.autoClose === false) {\n        continue;\n      }\n\n      if (!context._isShown()) {\n        continue;\n      }\n\n      const relatedTarget = {\n        relatedTarget: context._element\n      };\n\n      if (event) {\n        const composedPath = event.composedPath();\n        const isMenuTarget = composedPath.includes(context._menu);\n\n        if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n          continue;\n        } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n        if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n          continue;\n        }\n\n        if (event.type === 'click') {\n          relatedTarget.clickEvent = event;\n        }\n      }\n\n      context._completeHide(relatedTarget);\n    }\n  }\n\n  static getParentFromElement(element) {\n    return getElementFromSelector(element) || element.parentNode;\n  }\n\n  static dataApiKeydownHandler(event) {\n    // If not input/textarea:\n    //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n    // If input/textarea:\n    //  - If space key => not a dropdown command\n    //  - If key is other than escape\n    //    - If key is not up or down => not a dropdown command\n    //    - If trigger inside the menu => not a dropdown command\n    if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n      return;\n    }\n\n    const isActive = this.classList.contains(CLASS_NAME_SHOW$6);\n\n    if (!isActive && event.key === ESCAPE_KEY$2) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n    const instance = Dropdown.getOrCreateInstance(getToggleButton);\n\n    if (event.key === ESCAPE_KEY$2) {\n      instance.hide();\n      return;\n    }\n\n    if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n      if (!isActive) {\n        instance.show();\n      }\n\n      instance._selectMenuItem(event);\n\n      return;\n    }\n\n    if (!isActive || event.key === SPACE_KEY) {\n      Dropdown.clearMenus();\n    }\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n  event.preventDefault();\n  Dropdown.getOrCreateInstance(this).toggle();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Dropdown to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Dropdown);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\n\nclass ScrollBarHelper {\n  constructor() {\n    this._element = document.body;\n  }\n\n  getWidth() {\n    // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n    const documentWidth = document.documentElement.clientWidth;\n    return Math.abs(window.innerWidth - documentWidth);\n  }\n\n  hide() {\n    const width = this.getWidth();\n\n    this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n    this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n    this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n    this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n  }\n\n  _disableOverFlow() {\n    this._saveInitialAttribute(this._element, 'overflow');\n\n    this._element.style.overflow = 'hidden';\n  }\n\n  _setElementAttributes(selector, styleProp, callback) {\n    const scrollbarWidth = this.getWidth();\n\n    const manipulationCallBack = element => {\n      if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n        return;\n      }\n\n      this._saveInitialAttribute(element, styleProp);\n\n      const calculatedValue = window.getComputedStyle(element)[styleProp];\n      element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  reset() {\n    this._resetElementAttributes(this._element, 'overflow');\n\n    this._resetElementAttributes(this._element, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n  }\n\n  _saveInitialAttribute(element, styleProp) {\n    const actualValue = element.style[styleProp];\n\n    if (actualValue) {\n      Manipulator.setDataAttribute(element, styleProp, actualValue);\n    }\n  }\n\n  _resetElementAttributes(selector, styleProp) {\n    const manipulationCallBack = element => {\n      const value = Manipulator.getDataAttribute(element, styleProp);\n\n      if (typeof value === 'undefined') {\n        element.style.removeProperty(styleProp);\n      } else {\n        Manipulator.removeDataAttribute(element, styleProp);\n        element.style[styleProp] = value;\n      }\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  _applyManipulationCallback(selector, callBack) {\n    if (isElement(selector)) {\n      callBack(selector);\n    } else {\n      SelectorEngine.find(selector, this._element).forEach(callBack);\n    }\n  }\n\n  isOverflowing() {\n    return this.getWidth() > 0;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst Default$7 = {\n  className: 'modal-backdrop',\n  isVisible: true,\n  // if false, we use the backdrop helper without adding any element to the dom\n  isAnimated: false,\n  rootElement: 'body',\n  // give the choice to place backdrop under different elements\n  clickCallback: null\n};\nconst DefaultType$7 = {\n  className: 'string',\n  isVisible: 'boolean',\n  isAnimated: 'boolean',\n  rootElement: '(element|string)',\n  clickCallback: '(function|null)'\n};\nconst NAME$8 = 'backdrop';\nconst CLASS_NAME_FADE$4 = 'fade';\nconst CLASS_NAME_SHOW$5 = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME$8}`;\n\nclass Backdrop {\n  constructor(config) {\n    this._config = this._getConfig(config);\n    this._isAppended = false;\n    this._element = null;\n  }\n\n  show(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._append();\n\n    if (this._config.isAnimated) {\n      reflow(this._getElement());\n    }\n\n    this._getElement().classList.add(CLASS_NAME_SHOW$5);\n\n    this._emulateAnimation(() => {\n      execute(callback);\n    });\n  }\n\n  hide(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._getElement().classList.remove(CLASS_NAME_SHOW$5);\n\n    this._emulateAnimation(() => {\n      this.dispose();\n      execute(callback);\n    });\n  } // Private\n\n\n  _getElement() {\n    if (!this._element) {\n      const backdrop = document.createElement('div');\n      backdrop.className = this._config.className;\n\n      if (this._config.isAnimated) {\n        backdrop.classList.add(CLASS_NAME_FADE$4);\n      }\n\n      this._element = backdrop;\n    }\n\n    return this._element;\n  }\n\n  _getConfig(config) {\n    config = { ...Default$7,\n      ...(typeof config === 'object' ? config : {})\n    }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n    config.rootElement = getElement(config.rootElement);\n    typeCheckConfig(NAME$8, config, DefaultType$7);\n    return config;\n  }\n\n  _append() {\n    if (this._isAppended) {\n      return;\n    }\n\n    this._config.rootElement.append(this._getElement());\n\n    EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n      execute(this._config.clickCallback);\n    });\n    this._isAppended = true;\n  }\n\n  dispose() {\n    if (!this._isAppended) {\n      return;\n    }\n\n    EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n    this._element.remove();\n\n    this._isAppended = false;\n  }\n\n  _emulateAnimation(callback) {\n    executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst Default$6 = {\n  trapElement: null,\n  // The element to trap focus inside of\n  autofocus: true\n};\nconst DefaultType$6 = {\n  trapElement: 'element',\n  autofocus: 'boolean'\n};\nconst NAME$7 = 'focustrap';\nconst DATA_KEY$7 = 'bs.focustrap';\nconst EVENT_KEY$7 = `.${DATA_KEY$7}`;\nconst EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$7}`;\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$7}`;\nconst TAB_KEY = 'Tab';\nconst TAB_NAV_FORWARD = 'forward';\nconst TAB_NAV_BACKWARD = 'backward';\n\nclass FocusTrap {\n  constructor(config) {\n    this._config = this._getConfig(config);\n    this._isActive = false;\n    this._lastTabNavDirection = null;\n  }\n\n  activate() {\n    const {\n      trapElement,\n      autofocus\n    } = this._config;\n\n    if (this._isActive) {\n      return;\n    }\n\n    if (autofocus) {\n      trapElement.focus();\n    }\n\n    EventHandler.off(document, EVENT_KEY$7); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$1, event => this._handleFocusin(event));\n    EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));\n    this._isActive = true;\n  }\n\n  deactivate() {\n    if (!this._isActive) {\n      return;\n    }\n\n    this._isActive = false;\n    EventHandler.off(document, EVENT_KEY$7);\n  } // Private\n\n\n  _handleFocusin(event) {\n    const {\n      target\n    } = event;\n    const {\n      trapElement\n    } = this._config;\n\n    if (target === document || target === trapElement || trapElement.contains(target)) {\n      return;\n    }\n\n    const elements = SelectorEngine.focusableChildren(trapElement);\n\n    if (elements.length === 0) {\n      trapElement.focus();\n    } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n      elements[elements.length - 1].focus();\n    } else {\n      elements[0].focus();\n    }\n  }\n\n  _handleKeydown(event) {\n    if (event.key !== TAB_KEY) {\n      return;\n    }\n\n    this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;\n  }\n\n  _getConfig(config) {\n    config = { ...Default$6,\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$7, config, DefaultType$6);\n    return config;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$6 = 'modal';\nconst DATA_KEY$6 = 'bs.modal';\nconst EVENT_KEY$6 = `.${DATA_KEY$6}`;\nconst DATA_API_KEY$3 = '.data-api';\nconst ESCAPE_KEY$1 = 'Escape';\nconst Default$5 = {\n  backdrop: true,\n  keyboard: true,\n  focus: true\n};\nconst DefaultType$5 = {\n  backdrop: '(boolean|string)',\n  keyboard: 'boolean',\n  focus: 'boolean'\n};\nconst EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\nconst EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\nconst EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\nconst EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY$6}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$6}`;\nconst EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\nconst EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE$3 = 'fade';\nconst CLASS_NAME_SHOW$4 = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\nconst OPEN_SELECTOR$1 = '.modal.show';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n    this._backdrop = this._initializeBackDrop();\n    this._focustrap = this._initializeFocusTrap();\n    this._isShown = false;\n    this._ignoreBackdropClick = false;\n    this._isTransitioning = false;\n    this._scrollBar = new ScrollBarHelper();\n  } // Getters\n\n\n  static get Default() {\n    return Default$5;\n  }\n\n  static get NAME() {\n    return NAME$6;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n\n    if (this._isAnimated()) {\n      this._isTransitioning = true;\n    }\n\n    this._scrollBar.hide();\n\n    document.body.classList.add(CLASS_NAME_OPEN);\n\n    this._adjustDialog();\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n      EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n        if (event.target === this._element) {\n          this._ignoreBackdropClick = true;\n        }\n      });\n    });\n\n    this._showBackdrop(() => this._showElement(relatedTarget));\n  }\n\n  hide() {\n    if (!this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = false;\n\n    const isAnimated = this._isAnimated();\n\n    if (isAnimated) {\n      this._isTransitioning = true;\n    }\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    this._focustrap.deactivate();\n\n    this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n    EventHandler.off(this._element, EVENT_CLICK_DISMISS);\n    EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n    this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n  }\n\n  dispose() {\n    [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n    this._backdrop.dispose();\n\n    this._focustrap.deactivate();\n\n    super.dispose();\n  }\n\n  handleUpdate() {\n    this._adjustDialog();\n  } // Private\n\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: Boolean(this._config.backdrop),\n      // 'static' option will be translated to true, and booleans will keep their value\n      isAnimated: this._isAnimated()\n    });\n  }\n\n  _initializeFocusTrap() {\n    return new FocusTrap({\n      trapElement: this._element\n    });\n  }\n\n  _getConfig(config) {\n    config = { ...Default$5,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$6, config, DefaultType$5);\n    return config;\n  }\n\n  _showElement(relatedTarget) {\n    const isAnimated = this._isAnimated();\n\n    const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n    if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n      // Don't move modal's DOM position\n      document.body.append(this._element);\n    }\n\n    this._element.style.display = 'block';\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.scrollTop = 0;\n\n    if (modalBody) {\n      modalBody.scrollTop = 0;\n    }\n\n    if (isAnimated) {\n      reflow(this._element);\n    }\n\n    this._element.classList.add(CLASS_NAME_SHOW$4);\n\n    const transitionComplete = () => {\n      if (this._config.focus) {\n        this._focustrap.activate();\n      }\n\n      this._isTransitioning = false;\n      EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(transitionComplete, this._dialog, isAnimated);\n  }\n\n  _setEscapeEvent() {\n    if (this._isShown) {\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          event.preventDefault();\n          this.hide();\n        } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          this._triggerBackdropTransition();\n        }\n      });\n    } else {\n      EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n    }\n  }\n\n  _setResizeEvent() {\n    if (this._isShown) {\n      EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n    } else {\n      EventHandler.off(window, EVENT_RESIZE);\n    }\n  }\n\n  _hideModal() {\n    this._element.style.display = 'none';\n\n    this._element.setAttribute('aria-hidden', true);\n\n    this._element.removeAttribute('aria-modal');\n\n    this._element.removeAttribute('role');\n\n    this._isTransitioning = false;\n\n    this._backdrop.hide(() => {\n      document.body.classList.remove(CLASS_NAME_OPEN);\n\n      this._resetAdjustments();\n\n      this._scrollBar.reset();\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n    });\n  }\n\n  _showBackdrop(callback) {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS, event => {\n      if (this._ignoreBackdropClick) {\n        this._ignoreBackdropClick = false;\n        return;\n      }\n\n      if (event.target !== event.currentTarget) {\n        return;\n      }\n\n      if (this._config.backdrop === true) {\n        this.hide();\n      } else if (this._config.backdrop === 'static') {\n        this._triggerBackdropTransition();\n      }\n    });\n\n    this._backdrop.show(callback);\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_FADE$3);\n  }\n\n  _triggerBackdropTransition() {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const {\n      classList,\n      scrollHeight,\n      style\n    } = this._element;\n    const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n    if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n      return;\n    }\n\n    if (!isModalOverflowing) {\n      style.overflowY = 'hidden';\n    }\n\n    classList.add(CLASS_NAME_STATIC);\n\n    this._queueCallback(() => {\n      classList.remove(CLASS_NAME_STATIC);\n\n      if (!isModalOverflowing) {\n        this._queueCallback(() => {\n          style.overflowY = '';\n        }, this._dialog);\n      }\n    }, this._dialog);\n\n    this._element.focus();\n  } // ----------------------------------------------------------------------\n  // the following methods are used to handle overflowing modals\n  // ----------------------------------------------------------------------\n\n\n  _adjustDialog() {\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n    const scrollbarWidth = this._scrollBar.getWidth();\n\n    const isBodyOverflowing = scrollbarWidth > 0;\n\n    if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n      this._element.style.paddingLeft = `${scrollbarWidth}px`;\n    }\n\n    if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n      this._element.style.paddingRight = `${scrollbarWidth}px`;\n    }\n  }\n\n  _resetAdjustments() {\n    this._element.style.paddingLeft = '';\n    this._element.style.paddingRight = '';\n  } // Static\n\n\n  static jQueryInterface(config, relatedTarget) {\n    return this.each(function () {\n      const data = Modal.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](relatedTarget);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n    if (showEvent.defaultPrevented) {\n      // only register focus restorer if modal will actually get shown\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$3, () => {\n      if (isVisible(this)) {\n        this.focus();\n      }\n    });\n  }); // avoid conflict when clicking moddal toggler while another one is open\n\n  const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);\n\n  if (allReadyOpen) {\n    Modal.getInstance(allReadyOpen).hide();\n  }\n\n  const data = Modal.getOrCreateInstance(target);\n  data.toggle(this);\n});\nenableDismissTrigger(Modal);\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Modal to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Modal);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$5 = 'offcanvas';\nconst DATA_KEY$5 = 'bs.offcanvas';\nconst EVENT_KEY$5 = `.${DATA_KEY$5}`;\nconst DATA_API_KEY$2 = '.data-api';\nconst EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst ESCAPE_KEY = 'Escape';\nconst Default$4 = {\n  backdrop: true,\n  keyboard: true,\n  scroll: false\n};\nconst DefaultType$4 = {\n  backdrop: 'boolean',\n  keyboard: 'boolean',\n  scroll: 'boolean'\n};\nconst CLASS_NAME_SHOW$3 = 'show';\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop';\nconst OPEN_SELECTOR = '.offcanvas.show';\nconst EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\nconst EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\nconst EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\nconst EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\nconst EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\nconst SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Offcanvas extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._isShown = false;\n    this._backdrop = this._initializeBackDrop();\n    this._focustrap = this._initializeFocusTrap();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get NAME() {\n    return NAME$5;\n  }\n\n  static get Default() {\n    return Default$4;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n    this._element.style.visibility = 'visible';\n\n    this._backdrop.show();\n\n    if (!this._config.scroll) {\n      new ScrollBarHelper().hide();\n    }\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.classList.add(CLASS_NAME_SHOW$3);\n\n    const completeCallBack = () => {\n      if (!this._config.scroll) {\n        this._focustrap.activate();\n      }\n\n      EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(completeCallBack, this._element, true);\n  }\n\n  hide() {\n    if (!this._isShown) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._focustrap.deactivate();\n\n    this._element.blur();\n\n    this._isShown = false;\n\n    this._element.classList.remove(CLASS_NAME_SHOW$3);\n\n    this._backdrop.hide();\n\n    const completeCallback = () => {\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._element.style.visibility = 'hidden';\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().reset();\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n    };\n\n    this._queueCallback(completeCallback, this._element, true);\n  }\n\n  dispose() {\n    this._backdrop.dispose();\n\n    this._focustrap.deactivate();\n\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$4,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$5, config, DefaultType$4);\n    return config;\n  }\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      className: CLASS_NAME_BACKDROP,\n      isVisible: this._config.backdrop,\n      isAnimated: true,\n      rootElement: this._element.parentNode,\n      clickCallback: () => this.hide()\n    });\n  }\n\n  _initializeFocusTrap() {\n    return new FocusTrap({\n      trapElement: this._element\n    });\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n      if (this._config.keyboard && event.key === ESCAPE_KEY) {\n        this.hide();\n      }\n    });\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Offcanvas.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](this);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  EventHandler.one(target, EVENT_HIDDEN$2, () => {\n    // focus on trigger when it is closed\n    if (isVisible(this)) {\n      this.focus();\n    }\n  }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n  const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n  if (allReadyOpen && allReadyOpen !== target) {\n    Offcanvas.getInstance(allReadyOpen).hide();\n  }\n\n  const data = Offcanvas.getOrCreateInstance(target);\n  data.toggle(this);\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\nenableDismissTrigger(Offcanvas);\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\ndefineJQueryPlugin(Offcanvas);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i;\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n  const attributeName = attribute.nodeName.toLowerCase();\n\n  if (allowedAttributeList.includes(attributeName)) {\n    if (uriAttributes.has(attributeName)) {\n      return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue));\n    }\n\n    return true;\n  }\n\n  const regExp = allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n  for (let i = 0, len = regExp.length; i < len; i++) {\n    if (regExp[i].test(attributeName)) {\n      return true;\n    }\n  }\n\n  return false;\n};\n\nconst DefaultAllowlist = {\n  // Global attributes allowed on any supplied element below.\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n  a: ['target', 'href', 'title', 'rel'],\n  area: [],\n  b: [],\n  br: [],\n  col: [],\n  code: [],\n  div: [],\n  em: [],\n  hr: [],\n  h1: [],\n  h2: [],\n  h3: [],\n  h4: [],\n  h5: [],\n  h6: [],\n  i: [],\n  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n  li: [],\n  ol: [],\n  p: [],\n  pre: [],\n  s: [],\n  small: [],\n  span: [],\n  sub: [],\n  sup: [],\n  strong: [],\n  u: [],\n  ul: []\n};\nfunction sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n  if (!unsafeHtml.length) {\n    return unsafeHtml;\n  }\n\n  if (sanitizeFn && typeof sanitizeFn === 'function') {\n    return sanitizeFn(unsafeHtml);\n  }\n\n  const domParser = new window.DOMParser();\n  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n  const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n  for (let i = 0, len = elements.length; i < len; i++) {\n    const element = elements[i];\n    const elementName = element.nodeName.toLowerCase();\n\n    if (!Object.keys(allowList).includes(elementName)) {\n      element.remove();\n      continue;\n    }\n\n    const attributeList = [].concat(...element.attributes);\n    const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);\n    attributeList.forEach(attribute => {\n      if (!allowedAttribute(attribute, allowedAttributes)) {\n        element.removeAttribute(attribute.nodeName);\n      }\n    });\n  }\n\n  return createdDocument.body.innerHTML;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$4 = 'tooltip';\nconst DATA_KEY$4 = 'bs.tooltip';\nconst EVENT_KEY$4 = `.${DATA_KEY$4}`;\nconst CLASS_PREFIX$1 = 'bs-tooltip';\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\nconst DefaultType$3 = {\n  animation: 'boolean',\n  template: 'string',\n  title: '(string|element|function)',\n  trigger: 'string',\n  delay: '(number|object)',\n  html: 'boolean',\n  selector: '(string|boolean)',\n  placement: '(string|function)',\n  offset: '(array|string|function)',\n  container: '(string|element|boolean)',\n  fallbackPlacements: 'array',\n  boundary: '(string|element)',\n  customClass: '(string|function)',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  allowList: 'object',\n  popperConfig: '(null|object|function)'\n};\nconst AttachmentMap = {\n  AUTO: 'auto',\n  TOP: 'top',\n  RIGHT: isRTL() ? 'left' : 'right',\n  BOTTOM: 'bottom',\n  LEFT: isRTL() ? 'right' : 'left'\n};\nconst Default$3 = {\n  animation: true,\n  template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n  trigger: 'hover focus',\n  title: '',\n  delay: 0,\n  html: false,\n  selector: false,\n  placement: 'top',\n  offset: [0, 0],\n  container: false,\n  fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n  boundary: 'clippingParents',\n  customClass: '',\n  sanitize: true,\n  sanitizeFn: null,\n  allowList: DefaultAllowlist,\n  popperConfig: null\n};\nconst Event$2 = {\n  HIDE: `hide${EVENT_KEY$4}`,\n  HIDDEN: `hidden${EVENT_KEY$4}`,\n  SHOW: `show${EVENT_KEY$4}`,\n  SHOWN: `shown${EVENT_KEY$4}`,\n  INSERTED: `inserted${EVENT_KEY$4}`,\n  CLICK: `click${EVENT_KEY$4}`,\n  FOCUSIN: `focusin${EVENT_KEY$4}`,\n  FOCUSOUT: `focusout${EVENT_KEY$4}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n};\nconst CLASS_NAME_FADE$2 = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW$2 = 'show';\nconst HOVER_STATE_SHOW = 'show';\nconst HOVER_STATE_OUT = 'out';\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;\nconst EVENT_MODAL_HIDE = 'hide.bs.modal';\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip extends BaseComponent {\n  constructor(element, config) {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n    }\n\n    super(element); // private\n\n    this._isEnabled = true;\n    this._timeout = 0;\n    this._hoverState = '';\n    this._activeTrigger = {};\n    this._popper = null; // Protected\n\n    this._config = this._getConfig(config);\n    this.tip = null;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$3;\n  }\n\n  static get NAME() {\n    return NAME$4;\n  }\n\n  static get Event() {\n    return Event$2;\n  }\n\n  static get DefaultType() {\n    return DefaultType$3;\n  } // Public\n\n\n  enable() {\n    this._isEnabled = true;\n  }\n\n  disable() {\n    this._isEnabled = false;\n  }\n\n  toggleEnabled() {\n    this._isEnabled = !this._isEnabled;\n  }\n\n  toggle(event) {\n    if (!this._isEnabled) {\n      return;\n    }\n\n    if (event) {\n      const context = this._initializeOnDelegatedTarget(event);\n\n      context._activeTrigger.click = !context._activeTrigger.click;\n\n      if (context._isWithActiveTrigger()) {\n        context._enter(null, context);\n      } else {\n        context._leave(null, context);\n      }\n    } else {\n      if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$2)) {\n        this._leave(null, this);\n\n        return;\n      }\n\n      this._enter(null, this);\n    }\n  }\n\n  dispose() {\n    clearTimeout(this._timeout);\n    EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n\n    if (this.tip) {\n      this.tip.remove();\n    }\n\n    this._disposePopper();\n\n    super.dispose();\n  }\n\n  show() {\n    if (this._element.style.display === 'none') {\n      throw new Error('Please use show on visible elements');\n    }\n\n    if (!(this.isWithContent() && this._isEnabled)) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n    const shadowRoot = findShadowRoot(this._element);\n    const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n    if (showEvent.defaultPrevented || !isInTheDom) {\n      return;\n    } // A trick to recreate a tooltip in case a new title is given by using the NOT documented `data-bs-original-title`\n    // This will be removed later in favor of a `setContent` method\n\n\n    if (this.constructor.NAME === 'tooltip' && this.tip && this.getTitle() !== this.tip.querySelector(SELECTOR_TOOLTIP_INNER).innerHTML) {\n      this._disposePopper();\n\n      this.tip.remove();\n      this.tip = null;\n    }\n\n    const tip = this.getTipElement();\n    const tipId = getUID(this.constructor.NAME);\n    tip.setAttribute('id', tipId);\n\n    this._element.setAttribute('aria-describedby', tipId);\n\n    if (this._config.animation) {\n      tip.classList.add(CLASS_NAME_FADE$2);\n    }\n\n    const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n    const attachment = this._getAttachment(placement);\n\n    this._addAttachmentClass(attachment);\n\n    const {\n      container\n    } = this._config;\n    Data.set(tip, this.constructor.DATA_KEY, this);\n\n    if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n      container.append(tip);\n      EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n    }\n\n    if (this._popper) {\n      this._popper.update();\n    } else {\n      this._popper = Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));\n    }\n\n    tip.classList.add(CLASS_NAME_SHOW$2);\n\n    const customClass = this._resolvePossibleFunction(this._config.customClass);\n\n    if (customClass) {\n      tip.classList.add(...customClass.split(' '));\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => {\n        EventHandler.on(element, 'mouseover', noop);\n      });\n    }\n\n    const complete = () => {\n      const prevHoverState = this._hoverState;\n      this._hoverState = null;\n      EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n      if (prevHoverState === HOVER_STATE_OUT) {\n        this._leave(null, this);\n      }\n    };\n\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$2);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n  }\n\n  hide() {\n    if (!this._popper) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n\n    const complete = () => {\n      if (this._isWithActiveTrigger()) {\n        return;\n      }\n\n      if (this._hoverState !== HOVER_STATE_SHOW) {\n        tip.remove();\n      }\n\n      this._cleanTipClass();\n\n      this._element.removeAttribute('aria-describedby');\n\n      EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n      this._disposePopper();\n    };\n\n    const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    tip.classList.remove(CLASS_NAME_SHOW$2); // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n    }\n\n    this._activeTrigger[TRIGGER_CLICK] = false;\n    this._activeTrigger[TRIGGER_FOCUS] = false;\n    this._activeTrigger[TRIGGER_HOVER] = false;\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$2);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n\n    this._hoverState = '';\n  }\n\n  update() {\n    if (this._popper !== null) {\n      this._popper.update();\n    }\n  } // Protected\n\n\n  isWithContent() {\n    return Boolean(this.getTitle());\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    const element = document.createElement('div');\n    element.innerHTML = this._config.template;\n    const tip = element.children[0];\n    this.setContent(tip);\n    tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n    this.tip = tip;\n    return this.tip;\n  }\n\n  setContent(tip) {\n    this._sanitizeAndSetContent(tip, this.getTitle(), SELECTOR_TOOLTIP_INNER);\n  }\n\n  _sanitizeAndSetContent(template, content, selector) {\n    const templateElement = SelectorEngine.findOne(selector, template);\n\n    if (!content && templateElement) {\n      templateElement.remove();\n      return;\n    } // we use append for html objects to maintain js events\n\n\n    this.setElementContent(templateElement, content);\n  }\n\n  setElementContent(element, content) {\n    if (element === null) {\n      return;\n    }\n\n    if (isElement(content)) {\n      content = getElement(content); // content is a DOM node or a jQuery\n\n      if (this._config.html) {\n        if (content.parentNode !== element) {\n          element.innerHTML = '';\n          element.append(content);\n        }\n      } else {\n        element.textContent = content.textContent;\n      }\n\n      return;\n    }\n\n    if (this._config.html) {\n      if (this._config.sanitize) {\n        content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n      }\n\n      element.innerHTML = content;\n    } else {\n      element.textContent = content;\n    }\n  }\n\n  getTitle() {\n    const title = this._element.getAttribute('data-bs-original-title') || this._config.title;\n\n    return this._resolvePossibleFunction(title);\n  }\n\n  updateAttachment(attachment) {\n    if (attachment === 'right') {\n      return 'end';\n    }\n\n    if (attachment === 'left') {\n      return 'start';\n    }\n\n    return attachment;\n  } // Private\n\n\n  _initializeOnDelegatedTarget(event, context) {\n    return context || this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _resolvePossibleFunction(content) {\n    return typeof content === 'function' ? content.call(this._element) : content;\n  }\n\n  _getPopperConfig(attachment) {\n    const defaultBsPopperConfig = {\n      placement: attachment,\n      modifiers: [{\n        name: 'flip',\n        options: {\n          fallbackPlacements: this._config.fallbackPlacements\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }, {\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'arrow',\n        options: {\n          element: `.${this.constructor.NAME}-arrow`\n        }\n      }, {\n        name: 'onChange',\n        enabled: true,\n        phase: 'afterWrite',\n        fn: data => this._handlePopperPlacementChange(data)\n      }],\n      onFirstUpdate: data => {\n        if (data.options.placement !== data.placement) {\n          this._handlePopperPlacementChange(data);\n        }\n      }\n    };\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${this._getBasicClassPrefix()}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getAttachment(placement) {\n    return AttachmentMap[placement.toUpperCase()];\n  }\n\n  _setListeners() {\n    const triggers = this._config.trigger.split(' ');\n\n    triggers.forEach(trigger => {\n      if (trigger === 'click') {\n        EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n      } else if (trigger !== TRIGGER_MANUAL) {\n        const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n        const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n        EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n        EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n      }\n    });\n\n    this._hideModalHandler = () => {\n      if (this._element) {\n        this.hide();\n      }\n    };\n\n    EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n\n    if (this._config.selector) {\n      this._config = { ...this._config,\n        trigger: 'manual',\n        selector: ''\n      };\n    } else {\n      this._fixTitle();\n    }\n  }\n\n  _fixTitle() {\n    const title = this._element.getAttribute('title');\n\n    const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n    if (title || originalTitleType !== 'string') {\n      this._element.setAttribute('data-bs-original-title', title || '');\n\n      if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n        this._element.setAttribute('aria-label', title);\n      }\n\n      this._element.setAttribute('title', '');\n    }\n  }\n\n  _enter(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n    }\n\n    if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$2) || context._hoverState === HOVER_STATE_SHOW) {\n      context._hoverState = HOVER_STATE_SHOW;\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_SHOW;\n\n    if (!context._config.delay || !context._config.delay.show) {\n      context.show();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_SHOW) {\n        context.show();\n      }\n    }, context._config.delay.show);\n  }\n\n  _leave(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n    }\n\n    if (context._isWithActiveTrigger()) {\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_OUT;\n\n    if (!context._config.delay || !context._config.delay.hide) {\n      context.hide();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_OUT) {\n        context.hide();\n      }\n    }, context._config.delay.hide);\n  }\n\n  _isWithActiveTrigger() {\n    for (const trigger in this._activeTrigger) {\n      if (this._activeTrigger[trigger]) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element);\n    Object.keys(dataAttributes).forEach(dataAttr => {\n      if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n        delete dataAttributes[dataAttr];\n      }\n    });\n    config = { ...this.constructor.Default,\n      ...dataAttributes,\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    config.container = config.container === false ? document.body : getElement(config.container);\n\n    if (typeof config.delay === 'number') {\n      config.delay = {\n        show: config.delay,\n        hide: config.delay\n      };\n    }\n\n    if (typeof config.title === 'number') {\n      config.title = config.title.toString();\n    }\n\n    if (typeof config.content === 'number') {\n      config.content = config.content.toString();\n    }\n\n    typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n    if (config.sanitize) {\n      config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n    }\n\n    return config;\n  }\n\n  _getDelegateConfig() {\n    const config = {};\n\n    for (const key in this._config) {\n      if (this.constructor.Default[key] !== this._config[key]) {\n        config[key] = this._config[key];\n      }\n    } // In the future can be replaced with:\n    // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n    // `Object.fromEntries(keysWithDifferentValues)`\n\n\n    return config;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const basicClassPrefixRegex = new RegExp(`(^|\\\\s)${this._getBasicClassPrefix()}\\\\S+`, 'g');\n    const tabClass = tip.getAttribute('class').match(basicClassPrefixRegex);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  }\n\n  _getBasicClassPrefix() {\n    return CLASS_PREFIX$1;\n  }\n\n  _handlePopperPlacementChange(popperData) {\n    const {\n      state\n    } = popperData;\n\n    if (!state) {\n      return;\n    }\n\n    this.tip = state.elements.popper;\n\n    this._cleanTipClass();\n\n    this._addAttachmentClass(this._getAttachment(state.placement));\n  }\n\n  _disposePopper() {\n    if (this._popper) {\n      this._popper.destroy();\n\n      this._popper = null;\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tooltip.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tooltip to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Tooltip);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$3 = 'popover';\nconst DATA_KEY$3 = 'bs.popover';\nconst EVENT_KEY$3 = `.${DATA_KEY$3}`;\nconst CLASS_PREFIX = 'bs-popover';\nconst Default$2 = { ...Tooltip.Default,\n  placement: 'right',\n  offset: [0, 8],\n  trigger: 'click',\n  content: '',\n  template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n};\nconst DefaultType$2 = { ...Tooltip.DefaultType,\n  content: '(string|element|function)'\n};\nconst Event$1 = {\n  HIDE: `hide${EVENT_KEY$3}`,\n  HIDDEN: `hidden${EVENT_KEY$3}`,\n  SHOW: `show${EVENT_KEY$3}`,\n  SHOWN: `shown${EVENT_KEY$3}`,\n  INSERTED: `inserted${EVENT_KEY$3}`,\n  CLICK: `click${EVENT_KEY$3}`,\n  FOCUSIN: `focusin${EVENT_KEY$3}`,\n  FOCUSOUT: `focusout${EVENT_KEY$3}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n};\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n  // Getters\n  static get Default() {\n    return Default$2;\n  }\n\n  static get NAME() {\n    return NAME$3;\n  }\n\n  static get Event() {\n    return Event$1;\n  }\n\n  static get DefaultType() {\n    return DefaultType$2;\n  } // Overrides\n\n\n  isWithContent() {\n    return this.getTitle() || this._getContent();\n  }\n\n  setContent(tip) {\n    this._sanitizeAndSetContent(tip, this.getTitle(), SELECTOR_TITLE);\n\n    this._sanitizeAndSetContent(tip, this._getContent(), SELECTOR_CONTENT);\n  } // Private\n\n\n  _getContent() {\n    return this._resolvePossibleFunction(this._config.content);\n  }\n\n  _getBasicClassPrefix() {\n    return CLASS_PREFIX;\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Popover.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Popover to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Popover);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$2 = 'scrollspy';\nconst DATA_KEY$2 = 'bs.scrollspy';\nconst EVENT_KEY$2 = `.${DATA_KEY$2}`;\nconst DATA_API_KEY$1 = '.data-api';\nconst Default$1 = {\n  offset: 10,\n  method: 'auto',\n  target: ''\n};\nconst DefaultType$1 = {\n  offset: 'number',\n  method: 'string',\n  target: '(string|element)'\n};\nconst EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\nconst EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE$1 = 'active';\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\nconst SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}, .${CLASS_NAME_DROPDOWN_ITEM}`;\nconst SELECTOR_DROPDOWN$1 = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\nconst METHOD_OFFSET = 'offset';\nconst METHOD_POSITION = 'position';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n    this._config = this._getConfig(config);\n    this._offsets = [];\n    this._targets = [];\n    this._activeTarget = null;\n    this._scrollHeight = 0;\n    EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n    this.refresh();\n\n    this._process();\n  } // Getters\n\n\n  static get Default() {\n    return Default$1;\n  }\n\n  static get NAME() {\n    return NAME$2;\n  } // Public\n\n\n  refresh() {\n    const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n    const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n    const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n    this._offsets = [];\n    this._targets = [];\n    this._scrollHeight = this._getScrollHeight();\n    const targets = SelectorEngine.find(SELECTOR_LINK_ITEMS, this._config.target);\n    targets.map(element => {\n      const targetSelector = getSelectorFromElement(element);\n      const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n      if (target) {\n        const targetBCR = target.getBoundingClientRect();\n\n        if (targetBCR.width || targetBCR.height) {\n          return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n        }\n      }\n\n      return null;\n    }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n      this._offsets.push(item[0]);\n\n      this._targets.push(item[1]);\n    });\n  }\n\n  dispose() {\n    EventHandler.off(this._scrollElement, EVENT_KEY$2);\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$1,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    config.target = getElement(config.target) || document.documentElement;\n    typeCheckConfig(NAME$2, config, DefaultType$1);\n    return config;\n  }\n\n  _getScrollTop() {\n    return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n  }\n\n  _getScrollHeight() {\n    return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n  }\n\n  _getOffsetHeight() {\n    return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n  }\n\n  _process() {\n    const scrollTop = this._getScrollTop() + this._config.offset;\n\n    const scrollHeight = this._getScrollHeight();\n\n    const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n    if (this._scrollHeight !== scrollHeight) {\n      this.refresh();\n    }\n\n    if (scrollTop >= maxScroll) {\n      const target = this._targets[this._targets.length - 1];\n\n      if (this._activeTarget !== target) {\n        this._activate(target);\n      }\n\n      return;\n    }\n\n    if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n      this._activeTarget = null;\n\n      this._clear();\n\n      return;\n    }\n\n    for (let i = this._offsets.length; i--;) {\n      const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n      if (isActiveTarget) {\n        this._activate(this._targets[i]);\n      }\n    }\n  }\n\n  _activate(target) {\n    this._activeTarget = target;\n\n    this._clear();\n\n    const queries = SELECTOR_LINK_ITEMS.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n    const link = SelectorEngine.findOne(queries.join(','), this._config.target);\n    link.classList.add(CLASS_NAME_ACTIVE$1);\n\n    if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n      SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n    } else {\n      SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n        // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n        SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n        SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n          SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n        });\n      });\n    }\n\n    EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n      relatedTarget: target\n    });\n  }\n\n  _clear() {\n    SelectorEngine.find(SELECTOR_LINK_ITEMS, this._config.target).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = ScrollSpy.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .ScrollSpy to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(ScrollSpy);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$1 = 'tab';\nconst DATA_KEY$1 = 'bs.tab';\nconst EVENT_KEY$1 = `.${DATA_KEY$1}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\nconst EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\nconst EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\nconst EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\nconst CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_FADE$1 = 'fade';\nconst CLASS_NAME_SHOW$1 = 'show';\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ACTIVE_UL = ':scope > li > .active';\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\nconst SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tab extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$1;\n  } // Public\n\n\n  show() {\n    if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n      return;\n    }\n\n    let previous;\n    const target = getElementFromSelector(this._element);\n\n    const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n    if (listElement) {\n      const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n      previous = SelectorEngine.find(itemSelector, listElement);\n      previous = previous[previous.length - 1];\n    }\n\n    const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n      relatedTarget: this._element\n    }) : null;\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n      relatedTarget: previous\n    });\n\n    if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._activate(this._element, listElement);\n\n    const complete = () => {\n      EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n        relatedTarget: this._element\n      });\n      EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n        relatedTarget: previous\n      });\n    };\n\n    if (target) {\n      this._activate(target, target.parentNode, complete);\n    } else {\n      complete();\n    }\n  } // Private\n\n\n  _activate(element, container, callback) {\n    const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n    const active = activeElements[0];\n    const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n    const complete = () => this._transitionComplete(element, active, callback);\n\n    if (active && isTransitioning) {\n      active.classList.remove(CLASS_NAME_SHOW$1);\n\n      this._queueCallback(complete, element, true);\n    } else {\n      complete();\n    }\n  }\n\n  _transitionComplete(element, active, callback) {\n    if (active) {\n      active.classList.remove(CLASS_NAME_ACTIVE);\n      const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n      if (dropdownChild) {\n        dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n      }\n\n      if (active.getAttribute('role') === 'tab') {\n        active.setAttribute('aria-selected', false);\n      }\n    }\n\n    element.classList.add(CLASS_NAME_ACTIVE);\n\n    if (element.getAttribute('role') === 'tab') {\n      element.setAttribute('aria-selected', true);\n    }\n\n    reflow(element);\n\n    if (element.classList.contains(CLASS_NAME_FADE$1)) {\n      element.classList.add(CLASS_NAME_SHOW$1);\n    }\n\n    let parent = element.parentNode;\n\n    if (parent && parent.nodeName === 'LI') {\n      parent = parent.parentNode;\n    }\n\n    if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n      const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n      if (dropdownElement) {\n        SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n      }\n\n      element.setAttribute('aria-expanded', true);\n    }\n\n    if (callback) {\n      callback();\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tab.getOrCreateInstance(this);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  const data = Tab.getOrCreateInstance(this);\n  data.show();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tab to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Tab);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'toast';\nconst DATA_KEY = 'bs.toast';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility\n\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_SHOWING = 'showing';\nconst DefaultType = {\n  animation: 'boolean',\n  autohide: 'boolean',\n  delay: 'number'\n};\nconst Default = {\n  animation: true,\n  autohide: true,\n  delay: 5000\n};\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Toast extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._timeout = null;\n    this._hasMouseInteraction = false;\n    this._hasKeyboardInteraction = false;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get Default() {\n    return Default;\n  }\n\n  static get NAME() {\n    return NAME;\n  } // Public\n\n\n  show() {\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._clearTimeout();\n\n    if (this._config.animation) {\n      this._element.classList.add(CLASS_NAME_FADE);\n    }\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_SHOWING);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN);\n\n      this._maybeScheduleHide();\n    };\n\n    this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated\n\n\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_SHOW);\n\n    this._element.classList.add(CLASS_NAME_SHOWING);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  hide() {\n    if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const complete = () => {\n      this._element.classList.add(CLASS_NAME_HIDE); // @deprecated\n\n\n      this._element.classList.remove(CLASS_NAME_SHOWING);\n\n      this._element.classList.remove(CLASS_NAME_SHOW);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN);\n    };\n\n    this._element.classList.add(CLASS_NAME_SHOWING);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  dispose() {\n    this._clearTimeout();\n\n    if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n      this._element.classList.remove(CLASS_NAME_SHOW);\n    }\n\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    typeCheckConfig(NAME, config, this.constructor.DefaultType);\n    return config;\n  }\n\n  _maybeScheduleHide() {\n    if (!this._config.autohide) {\n      return;\n    }\n\n    if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n      return;\n    }\n\n    this._timeout = setTimeout(() => {\n      this.hide();\n    }, this._config.delay);\n  }\n\n  _onInteraction(event, isInteracting) {\n    switch (event.type) {\n      case 'mouseover':\n      case 'mouseout':\n        this._hasMouseInteraction = isInteracting;\n        break;\n\n      case 'focusin':\n      case 'focusout':\n        this._hasKeyboardInteraction = isInteracting;\n        break;\n    }\n\n    if (isInteracting) {\n      this._clearTimeout();\n\n      return;\n    }\n\n    const nextElement = event.relatedTarget;\n\n    if (this._element === nextElement || this._element.contains(nextElement)) {\n      return;\n    }\n\n    this._maybeScheduleHide();\n  }\n\n  _setListeners() {\n    EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n    EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n  }\n\n  _clearTimeout() {\n    clearTimeout(this._timeout);\n    this._timeout = null;\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Toast.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      }\n    });\n  }\n\n}\n\nenableDismissTrigger(Toast);\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Toast to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Toast);\n\nexport { Alert, Button, Carousel, Collapse, Dropdown, Modal, Offcanvas, Popover, ScrollSpy, Tab, Toast, Tooltip };\n//# sourceMappingURL=bootstrap.esm.js.map\n","/*!\n * Chart.js v3.5.1\n * https://www.chartjs.org\n * (c) 2021 Chart.js Contributors\n * Released under the MIT License\n */\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n  return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\nconst requestAnimFrame = (function() {\n  if (typeof window === 'undefined') {\n    return function(callback) {\n      return callback();\n    };\n  }\n  return window.requestAnimationFrame;\n}());\nfunction throttled(fn, thisArg, updateFn) {\n  const updateArgs = updateFn || ((args) => Array.prototype.slice.call(args));\n  let ticking = false;\n  let args = [];\n  return function(...rest) {\n    args = updateArgs(rest);\n    if (!ticking) {\n      ticking = true;\n      requestAnimFrame.call(window, () => {\n        ticking = false;\n        fn.apply(thisArg, args);\n      });\n    }\n  };\n}\nfunction debounce(fn, delay) {\n  let timeout;\n  return function() {\n    if (delay) {\n      clearTimeout(timeout);\n      timeout = setTimeout(fn, delay);\n    } else {\n      fn();\n    }\n    return delay;\n  };\n}\nconst _toLeftRightCenter = (align) => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\nconst _alignStartEnd = (align, start, end) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\nconst _textX = (align, left, right, rtl) => {\n  const check = rtl ? 'left' : 'right';\n  return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n\nfunction noop() {}\nconst uid = (function() {\n  let id = 0;\n  return function() {\n    return id++;\n  };\n}());\nfunction isNullOrUndef(value) {\n  return value === null || typeof value === 'undefined';\n}\nfunction isArray(value) {\n  if (Array.isArray && Array.isArray(value)) {\n    return true;\n  }\n  const type = Object.prototype.toString.call(value);\n  if (type.substr(0, 7) === '[object' && type.substr(-6) === 'Array]') {\n    return true;\n  }\n  return false;\n}\nfunction isObject(value) {\n  return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\nconst isNumberFinite = (value) => (typeof value === 'number' || value instanceof Number) && isFinite(+value);\nfunction finiteOrDefault(value, defaultValue) {\n  return isNumberFinite(value) ? value : defaultValue;\n}\nfunction valueOrDefault(value, defaultValue) {\n  return typeof value === 'undefined' ? defaultValue : value;\n}\nconst toPercentage = (value, dimension) =>\n  typeof value === 'string' && value.endsWith('%') ?\n    parseFloat(value) / 100\n    : value / dimension;\nconst toDimension = (value, dimension) =>\n  typeof value === 'string' && value.endsWith('%') ?\n    parseFloat(value) / 100 * dimension\n    : +value;\nfunction callback(fn, args, thisArg) {\n  if (fn && typeof fn.call === 'function') {\n    return fn.apply(thisArg, args);\n  }\n}\nfunction each(loopable, fn, thisArg, reverse) {\n  let i, len, keys;\n  if (isArray(loopable)) {\n    len = loopable.length;\n    if (reverse) {\n      for (i = len - 1; i >= 0; i--) {\n        fn.call(thisArg, loopable[i], i);\n      }\n    } else {\n      for (i = 0; i < len; i++) {\n        fn.call(thisArg, loopable[i], i);\n      }\n    }\n  } else if (isObject(loopable)) {\n    keys = Object.keys(loopable);\n    len = keys.length;\n    for (i = 0; i < len; i++) {\n      fn.call(thisArg, loopable[keys[i]], keys[i]);\n    }\n  }\n}\nfunction _elementsEqual(a0, a1) {\n  let i, ilen, v0, v1;\n  if (!a0 || !a1 || a0.length !== a1.length) {\n    return false;\n  }\n  for (i = 0, ilen = a0.length; i < ilen; ++i) {\n    v0 = a0[i];\n    v1 = a1[i];\n    if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction clone$1(source) {\n  if (isArray(source)) {\n    return source.map(clone$1);\n  }\n  if (isObject(source)) {\n    const target = Object.create(null);\n    const keys = Object.keys(source);\n    const klen = keys.length;\n    let k = 0;\n    for (; k < klen; ++k) {\n      target[keys[k]] = clone$1(source[keys[k]]);\n    }\n    return target;\n  }\n  return source;\n}\nfunction isValidKey(key) {\n  return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n}\nfunction _merger(key, target, source, options) {\n  if (!isValidKey(key)) {\n    return;\n  }\n  const tval = target[key];\n  const sval = source[key];\n  if (isObject(tval) && isObject(sval)) {\n    merge(tval, sval, options);\n  } else {\n    target[key] = clone$1(sval);\n  }\n}\nfunction merge(target, source, options) {\n  const sources = isArray(source) ? source : [source];\n  const ilen = sources.length;\n  if (!isObject(target)) {\n    return target;\n  }\n  options = options || {};\n  const merger = options.merger || _merger;\n  for (let i = 0; i < ilen; ++i) {\n    source = sources[i];\n    if (!isObject(source)) {\n      continue;\n    }\n    const keys = Object.keys(source);\n    for (let k = 0, klen = keys.length; k < klen; ++k) {\n      merger(keys[k], target, source, options);\n    }\n  }\n  return target;\n}\nfunction mergeIf(target, source) {\n  return merge(target, source, {merger: _mergerIf});\n}\nfunction _mergerIf(key, target, source) {\n  if (!isValidKey(key)) {\n    return;\n  }\n  const tval = target[key];\n  const sval = source[key];\n  if (isObject(tval) && isObject(sval)) {\n    mergeIf(tval, sval);\n  } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n    target[key] = clone$1(sval);\n  }\n}\nfunction _deprecated(scope, value, previous, current) {\n  if (value !== undefined) {\n    console.warn(scope + ': \"' + previous +\n\t\t\t'\" is deprecated. Please use \"' + current + '\" instead');\n  }\n}\nconst emptyString = '';\nconst dot = '.';\nfunction indexOfDotOrLength(key, start) {\n  const idx = key.indexOf(dot, start);\n  return idx === -1 ? key.length : idx;\n}\nfunction resolveObjectKey(obj, key) {\n  if (key === emptyString) {\n    return obj;\n  }\n  let pos = 0;\n  let idx = indexOfDotOrLength(key, pos);\n  while (obj && idx > pos) {\n    obj = obj[key.substr(pos, idx - pos)];\n    pos = idx + 1;\n    idx = indexOfDotOrLength(key, pos);\n  }\n  return obj;\n}\nfunction _capitalize(str) {\n  return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst defined = (value) => typeof value !== 'undefined';\nconst isFunction = (value) => typeof value === 'function';\nconst setsEqual = (a, b) => {\n  if (a.size !== b.size) {\n    return false;\n  }\n  for (const item of a) {\n    if (!b.has(item)) {\n      return false;\n    }\n  }\n  return true;\n};\n\nconst PI = Math.PI;\nconst TAU = 2 * PI;\nconst PITAU = TAU + PI;\nconst INFINITY = Number.POSITIVE_INFINITY;\nconst RAD_PER_DEG = PI / 180;\nconst HALF_PI = PI / 2;\nconst QUARTER_PI = PI / 4;\nconst TWO_THIRDS_PI = PI * 2 / 3;\nconst log10 = Math.log10;\nconst sign = Math.sign;\nfunction niceNum(range) {\n  const roundedRange = Math.round(range);\n  range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n  const niceRange = Math.pow(10, Math.floor(log10(range)));\n  const fraction = range / niceRange;\n  const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n  return niceFraction * niceRange;\n}\nfunction _factorize(value) {\n  const result = [];\n  const sqrt = Math.sqrt(value);\n  let i;\n  for (i = 1; i < sqrt; i++) {\n    if (value % i === 0) {\n      result.push(i);\n      result.push(value / i);\n    }\n  }\n  if (sqrt === (sqrt | 0)) {\n    result.push(sqrt);\n  }\n  result.sort((a, b) => a - b).pop();\n  return result;\n}\nfunction isNumber(n) {\n  return !isNaN(parseFloat(n)) && isFinite(n);\n}\nfunction almostEquals(x, y, epsilon) {\n  return Math.abs(x - y) < epsilon;\n}\nfunction almostWhole(x, epsilon) {\n  const rounded = Math.round(x);\n  return ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x);\n}\nfunction _setMinAndMaxByKey(array, target, property) {\n  let i, ilen, value;\n  for (i = 0, ilen = array.length; i < ilen; i++) {\n    value = array[i][property];\n    if (!isNaN(value)) {\n      target.min = Math.min(target.min, value);\n      target.max = Math.max(target.max, value);\n    }\n  }\n}\nfunction toRadians(degrees) {\n  return degrees * (PI / 180);\n}\nfunction toDegrees(radians) {\n  return radians * (180 / PI);\n}\nfunction _decimalPlaces(x) {\n  if (!isNumberFinite(x)) {\n    return;\n  }\n  let e = 1;\n  let p = 0;\n  while (Math.round(x * e) / e !== x) {\n    e *= 10;\n    p++;\n  }\n  return p;\n}\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n  const distanceFromXCenter = anglePoint.x - centrePoint.x;\n  const distanceFromYCenter = anglePoint.y - centrePoint.y;\n  const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n  let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n  if (angle < (-0.5 * PI)) {\n    angle += TAU;\n  }\n  return {\n    angle,\n    distance: radialDistanceFromCenter\n  };\n}\nfunction distanceBetweenPoints(pt1, pt2) {\n  return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\nfunction _angleDiff(a, b) {\n  return (a - b + PITAU) % TAU - PI;\n}\nfunction _normalizeAngle(a) {\n  return (a % TAU + TAU) % TAU;\n}\nfunction _angleBetween(angle, start, end, sameAngleIsFullCircle) {\n  const a = _normalizeAngle(angle);\n  const s = _normalizeAngle(start);\n  const e = _normalizeAngle(end);\n  const angleToStart = _normalizeAngle(s - a);\n  const angleToEnd = _normalizeAngle(e - a);\n  const startToAngle = _normalizeAngle(a - s);\n  const endToAngle = _normalizeAngle(a - e);\n  return a === s || a === e || (sameAngleIsFullCircle && s === e)\n    || (angleToStart > angleToEnd && startToAngle < endToAngle);\n}\nfunction _limitValue(value, min, max) {\n  return Math.max(min, Math.min(max, value));\n}\nfunction _int16Range(value) {\n  return _limitValue(value, -32768, 32767);\n}\n\nconst atEdge = (t) => t === 0 || t === 1;\nconst elasticIn = (t, s, p) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t, s, p) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\nconst effects = {\n  linear: t => t,\n  easeInQuad: t => t * t,\n  easeOutQuad: t => -t * (t - 2),\n  easeInOutQuad: t => ((t /= 0.5) < 1)\n    ? 0.5 * t * t\n    : -0.5 * ((--t) * (t - 2) - 1),\n  easeInCubic: t => t * t * t,\n  easeOutCubic: t => (t -= 1) * t * t + 1,\n  easeInOutCubic: t => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t\n    : 0.5 * ((t -= 2) * t * t + 2),\n  easeInQuart: t => t * t * t * t,\n  easeOutQuart: t => -((t -= 1) * t * t * t - 1),\n  easeInOutQuart: t => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t * t\n    : -0.5 * ((t -= 2) * t * t * t - 2),\n  easeInQuint: t => t * t * t * t * t,\n  easeOutQuint: t => (t -= 1) * t * t * t * t + 1,\n  easeInOutQuint: t => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t * t * t\n    : 0.5 * ((t -= 2) * t * t * t * t + 2),\n  easeInSine: t => -Math.cos(t * HALF_PI) + 1,\n  easeOutSine: t => Math.sin(t * HALF_PI),\n  easeInOutSine: t => -0.5 * (Math.cos(PI * t) - 1),\n  easeInExpo: t => (t === 0) ? 0 : Math.pow(2, 10 * (t - 1)),\n  easeOutExpo: t => (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1,\n  easeInOutExpo: t => atEdge(t) ? t : t < 0.5\n    ? 0.5 * Math.pow(2, 10 * (t * 2 - 1))\n    : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n  easeInCirc: t => (t >= 1) ? t : -(Math.sqrt(1 - t * t) - 1),\n  easeOutCirc: t => Math.sqrt(1 - (t -= 1) * t),\n  easeInOutCirc: t => ((t /= 0.5) < 1)\n    ? -0.5 * (Math.sqrt(1 - t * t) - 1)\n    : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n  easeInElastic: t => atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n  easeOutElastic: t => atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n  easeInOutElastic(t) {\n    const s = 0.1125;\n    const p = 0.45;\n    return atEdge(t) ? t :\n      t < 0.5\n        ? 0.5 * elasticIn(t * 2, s, p)\n        : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n  },\n  easeInBack(t) {\n    const s = 1.70158;\n    return t * t * ((s + 1) * t - s);\n  },\n  easeOutBack(t) {\n    const s = 1.70158;\n    return (t -= 1) * t * ((s + 1) * t + s) + 1;\n  },\n  easeInOutBack(t) {\n    let s = 1.70158;\n    if ((t /= 0.5) < 1) {\n      return 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\n    }\n    return 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\n  },\n  easeInBounce: t => 1 - effects.easeOutBounce(1 - t),\n  easeOutBounce(t) {\n    const m = 7.5625;\n    const d = 2.75;\n    if (t < (1 / d)) {\n      return m * t * t;\n    }\n    if (t < (2 / d)) {\n      return m * (t -= (1.5 / d)) * t + 0.75;\n    }\n    if (t < (2.5 / d)) {\n      return m * (t -= (2.25 / d)) * t + 0.9375;\n    }\n    return m * (t -= (2.625 / d)) * t + 0.984375;\n  },\n  easeInOutBounce: t => (t < 0.5)\n    ? effects.easeInBounce(t * 2) * 0.5\n    : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5,\n};\n\n/*!\n * @kurkle/color v0.1.9\n * https://github.com/kurkle/color#readme\n * (c) 2020 Jukka Kurkela\n * Released under the MIT License\n */\nconst map = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = '0123456789ABCDEF';\nconst h1 = (b) => hex[b & 0xF];\nconst h2 = (b) => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = (b) => (((b & 0xF0) >> 4) === (b & 0xF));\nfunction isShort(v) {\n\treturn eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\n}\nfunction hexParse(str) {\n\tvar len = str.length;\n\tvar ret;\n\tif (str[0] === '#') {\n\t\tif (len === 4 || len === 5) {\n\t\t\tret = {\n\t\t\t\tr: 255 & map[str[1]] * 17,\n\t\t\t\tg: 255 & map[str[2]] * 17,\n\t\t\t\tb: 255 & map[str[3]] * 17,\n\t\t\t\ta: len === 5 ? map[str[4]] * 17 : 255\n\t\t\t};\n\t\t} else if (len === 7 || len === 9) {\n\t\t\tret = {\n\t\t\t\tr: map[str[1]] << 4 | map[str[2]],\n\t\t\t\tg: map[str[3]] << 4 | map[str[4]],\n\t\t\t\tb: map[str[5]] << 4 | map[str[6]],\n\t\t\t\ta: len === 9 ? (map[str[7]] << 4 | map[str[8]]) : 255\n\t\t\t};\n\t\t}\n\t}\n\treturn ret;\n}\nfunction hexString(v) {\n\tvar f = isShort(v) ? h1 : h2;\n\treturn v\n\t\t? '#' + f(v.r) + f(v.g) + f(v.b) + (v.a < 255 ? f(v.a) : '')\n\t\t: v;\n}\nfunction round(v) {\n\treturn v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n\treturn lim(round(v * 2.55), 0, 255);\n}\nfunction n2b(v) {\n\treturn lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n\treturn lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n\treturn lim(round(v * 100), 0, 100);\n}\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n\tconst m = RGB_RE.exec(str);\n\tlet a = 255;\n\tlet r, g, b;\n\tif (!m) {\n\t\treturn;\n\t}\n\tif (m[7] !== r) {\n\t\tconst v = +m[7];\n\t\ta = 255 & (m[8] ? p2b(v) : v * 255);\n\t}\n\tr = +m[1];\n\tg = +m[3];\n\tb = +m[5];\n\tr = 255 & (m[2] ? p2b(r) : r);\n\tg = 255 & (m[4] ? p2b(g) : g);\n\tb = 255 & (m[6] ? p2b(b) : b);\n\treturn {\n\t\tr: r,\n\t\tg: g,\n\t\tb: b,\n\t\ta: a\n\t};\n}\nfunction rgbString(v) {\n\treturn v && (\n\t\tv.a < 255\n\t\t\t? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n\t\t\t: `rgb(${v.r}, ${v.g}, ${v.b})`\n\t);\n}\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n\tconst a = s * Math.min(l, 1 - l);\n\tconst f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n\treturn [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n\tconst f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n\treturn [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n\tconst rgb = hsl2rgbn(h, 1, 0.5);\n\tlet i;\n\tif (w + b > 1) {\n\t\ti = 1 / (w + b);\n\t\tw *= i;\n\t\tb *= i;\n\t}\n\tfor (i = 0; i < 3; i++) {\n\t\trgb[i] *= 1 - w - b;\n\t\trgb[i] += w;\n\t}\n\treturn rgb;\n}\nfunction rgb2hsl(v) {\n\tconst range = 255;\n\tconst r = v.r / range;\n\tconst g = v.g / range;\n\tconst b = v.b / range;\n\tconst max = Math.max(r, g, b);\n\tconst min = Math.min(r, g, b);\n\tconst l = (max + min) / 2;\n\tlet h, s, d;\n\tif (max !== min) {\n\t\td = max - min;\n\t\ts = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\t\th = max === r\n\t\t\t? ((g - b) / d) + (g < b ? 6 : 0)\n\t\t\t: max === g\n\t\t\t\t? (b - r) / d + 2\n\t\t\t\t: (r - g) / d + 4;\n\t\th = h * 60 + 0.5;\n\t}\n\treturn [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n\treturn (\n\t\tArray.isArray(a)\n\t\t\t? f(a[0], a[1], a[2])\n\t\t\t: f(a, b, c)\n\t).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n\treturn calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n\treturn calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n\treturn calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n\treturn (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n\tconst m = HUE_RE.exec(str);\n\tlet a = 255;\n\tlet v;\n\tif (!m) {\n\t\treturn;\n\t}\n\tif (m[5] !== v) {\n\t\ta = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n\t}\n\tconst h = hue(+m[2]);\n\tconst p1 = +m[3] / 100;\n\tconst p2 = +m[4] / 100;\n\tif (m[1] === 'hwb') {\n\t\tv = hwb2rgb(h, p1, p2);\n\t} else if (m[1] === 'hsv') {\n\t\tv = hsv2rgb(h, p1, p2);\n\t} else {\n\t\tv = hsl2rgb(h, p1, p2);\n\t}\n\treturn {\n\t\tr: v[0],\n\t\tg: v[1],\n\t\tb: v[2],\n\t\ta: a\n\t};\n}\nfunction rotate(v, deg) {\n\tvar h = rgb2hsl(v);\n\th[0] = hue(h[0] + deg);\n\th = hsl2rgb(h);\n\tv.r = h[0];\n\tv.g = h[1];\n\tv.b = h[2];\n}\nfunction hslString(v) {\n\tif (!v) {\n\t\treturn;\n\t}\n\tconst a = rgb2hsl(v);\n\tconst h = a[0];\n\tconst s = n2p(a[1]);\n\tconst l = n2p(a[2]);\n\treturn v.a < 255\n\t\t? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n\t\t: `hsl(${h}, ${s}%, ${l}%)`;\n}\nconst map$1 = {\n\tx: 'dark',\n\tZ: 'light',\n\tY: 're',\n\tX: 'blu',\n\tW: 'gr',\n\tV: 'medium',\n\tU: 'slate',\n\tA: 'ee',\n\tT: 'ol',\n\tS: 'or',\n\tB: 'ra',\n\tC: 'lateg',\n\tD: 'ights',\n\tR: 'in',\n\tQ: 'turquois',\n\tE: 'hi',\n\tP: 'ro',\n\tO: 'al',\n\tN: 'le',\n\tM: 'de',\n\tL: 'yello',\n\tF: 'en',\n\tK: 'ch',\n\tG: 'arks',\n\tH: 'ea',\n\tI: 'ightg',\n\tJ: 'wh'\n};\nconst names = {\n\tOiceXe: 'f0f8ff',\n\tantiquewEte: 'faebd7',\n\taqua: 'ffff',\n\taquamarRe: '7fffd4',\n\tazuY: 'f0ffff',\n\tbeige: 'f5f5dc',\n\tbisque: 'ffe4c4',\n\tblack: '0',\n\tblanKedOmond: 'ffebcd',\n\tXe: 'ff',\n\tXeviTet: '8a2be2',\n\tbPwn: 'a52a2a',\n\tburlywood: 'deb887',\n\tcaMtXe: '5f9ea0',\n\tKartYuse: '7fff00',\n\tKocTate: 'd2691e',\n\tcSO: 'ff7f50',\n\tcSnflowerXe: '6495ed',\n\tcSnsilk: 'fff8dc',\n\tcrimson: 'dc143c',\n\tcyan: 'ffff',\n\txXe: '8b',\n\txcyan: '8b8b',\n\txgTMnPd: 'b8860b',\n\txWay: 'a9a9a9',\n\txgYF: '6400',\n\txgYy: 'a9a9a9',\n\txkhaki: 'bdb76b',\n\txmagFta: '8b008b',\n\txTivegYF: '556b2f',\n\txSange: 'ff8c00',\n\txScEd: '9932cc',\n\txYd: '8b0000',\n\txsOmon: 'e9967a',\n\txsHgYF: '8fbc8f',\n\txUXe: '483d8b',\n\txUWay: '2f4f4f',\n\txUgYy: '2f4f4f',\n\txQe: 'ced1',\n\txviTet: '9400d3',\n\tdAppRk: 'ff1493',\n\tdApskyXe: 'bfff',\n\tdimWay: '696969',\n\tdimgYy: '696969',\n\tdodgerXe: '1e90ff',\n\tfiYbrick: 'b22222',\n\tflSOwEte: 'fffaf0',\n\tfoYstWAn: '228b22',\n\tfuKsia: 'ff00ff',\n\tgaRsbSo: 'dcdcdc',\n\tghostwEte: 'f8f8ff',\n\tgTd: 'ffd700',\n\tgTMnPd: 'daa520',\n\tWay: '808080',\n\tgYF: '8000',\n\tgYFLw: 'adff2f',\n\tgYy: '808080',\n\thoneyMw: 'f0fff0',\n\thotpRk: 'ff69b4',\n\tRdianYd: 'cd5c5c',\n\tRdigo: '4b0082',\n\tivSy: 'fffff0',\n\tkhaki: 'f0e68c',\n\tlavFMr: 'e6e6fa',\n\tlavFMrXsh: 'fff0f5',\n\tlawngYF: '7cfc00',\n\tNmoncEffon: 'fffacd',\n\tZXe: 'add8e6',\n\tZcSO: 'f08080',\n\tZcyan: 'e0ffff',\n\tZgTMnPdLw: 'fafad2',\n\tZWay: 'd3d3d3',\n\tZgYF: '90ee90',\n\tZgYy: 'd3d3d3',\n\tZpRk: 'ffb6c1',\n\tZsOmon: 'ffa07a',\n\tZsHgYF: '20b2aa',\n\tZskyXe: '87cefa',\n\tZUWay: '778899',\n\tZUgYy: '778899',\n\tZstAlXe: 'b0c4de',\n\tZLw: 'ffffe0',\n\tlime: 'ff00',\n\tlimegYF: '32cd32',\n\tlRF: 'faf0e6',\n\tmagFta: 'ff00ff',\n\tmaPon: '800000',\n\tVaquamarRe: '66cdaa',\n\tVXe: 'cd',\n\tVScEd: 'ba55d3',\n\tVpurpN: '9370db',\n\tVsHgYF: '3cb371',\n\tVUXe: '7b68ee',\n\tVsprRggYF: 'fa9a',\n\tVQe: '48d1cc',\n\tVviTetYd: 'c71585',\n\tmidnightXe: '191970',\n\tmRtcYam: 'f5fffa',\n\tmistyPse: 'ffe4e1',\n\tmoccasR: 'ffe4b5',\n\tnavajowEte: 'ffdead',\n\tnavy: '80',\n\tTdlace: 'fdf5e6',\n\tTive: '808000',\n\tTivedBb: '6b8e23',\n\tSange: 'ffa500',\n\tSangeYd: 'ff4500',\n\tScEd: 'da70d6',\n\tpOegTMnPd: 'eee8aa',\n\tpOegYF: '98fb98',\n\tpOeQe: 'afeeee',\n\tpOeviTetYd: 'db7093',\n\tpapayawEp: 'ffefd5',\n\tpHKpuff: 'ffdab9',\n\tperu: 'cd853f',\n\tpRk: 'ffc0cb',\n\tplum: 'dda0dd',\n\tpowMrXe: 'b0e0e6',\n\tpurpN: '800080',\n\tYbeccapurpN: '663399',\n\tYd: 'ff0000',\n\tPsybrown: 'bc8f8f',\n\tPyOXe: '4169e1',\n\tsaddNbPwn: '8b4513',\n\tsOmon: 'fa8072',\n\tsandybPwn: 'f4a460',\n\tsHgYF: '2e8b57',\n\tsHshell: 'fff5ee',\n\tsiFna: 'a0522d',\n\tsilver: 'c0c0c0',\n\tskyXe: '87ceeb',\n\tUXe: '6a5acd',\n\tUWay: '708090',\n\tUgYy: '708090',\n\tsnow: 'fffafa',\n\tsprRggYF: 'ff7f',\n\tstAlXe: '4682b4',\n\ttan: 'd2b48c',\n\tteO: '8080',\n\ttEstN: 'd8bfd8',\n\ttomato: 'ff6347',\n\tQe: '40e0d0',\n\tviTet: 'ee82ee',\n\tJHt: 'f5deb3',\n\twEte: 'ffffff',\n\twEtesmoke: 'f5f5f5',\n\tLw: 'ffff00',\n\tLwgYF: '9acd32'\n};\nfunction unpack() {\n\tconst unpacked = {};\n\tconst keys = Object.keys(names);\n\tconst tkeys = Object.keys(map$1);\n\tlet i, j, k, ok, nk;\n\tfor (i = 0; i < keys.length; i++) {\n\t\tok = nk = keys[i];\n\t\tfor (j = 0; j < tkeys.length; j++) {\n\t\t\tk = tkeys[j];\n\t\t\tnk = nk.replace(k, map$1[k]);\n\t\t}\n\t\tk = parseInt(names[ok], 16);\n\t\tunpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n\t}\n\treturn unpacked;\n}\nlet names$1;\nfunction nameParse(str) {\n\tif (!names$1) {\n\t\tnames$1 = unpack();\n\t\tnames$1.transparent = [0, 0, 0, 0];\n\t}\n\tconst a = names$1[str.toLowerCase()];\n\treturn a && {\n\t\tr: a[0],\n\t\tg: a[1],\n\t\tb: a[2],\n\t\ta: a.length === 4 ? a[3] : 255\n\t};\n}\nfunction modHSL(v, i, ratio) {\n\tif (v) {\n\t\tlet tmp = rgb2hsl(v);\n\t\ttmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n\t\ttmp = hsl2rgb(tmp);\n\t\tv.r = tmp[0];\n\t\tv.g = tmp[1];\n\t\tv.b = tmp[2];\n\t}\n}\nfunction clone(v, proto) {\n\treturn v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n\tvar v = {r: 0, g: 0, b: 0, a: 255};\n\tif (Array.isArray(input)) {\n\t\tif (input.length >= 3) {\n\t\t\tv = {r: input[0], g: input[1], b: input[2], a: 255};\n\t\t\tif (input.length > 3) {\n\t\t\t\tv.a = n2b(input[3]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tv = clone(input, {r: 0, g: 0, b: 0, a: 1});\n\t\tv.a = n2b(v.a);\n\t}\n\treturn v;\n}\nfunction functionParse(str) {\n\tif (str.charAt(0) === 'r') {\n\t\treturn rgbParse(str);\n\t}\n\treturn hueParse(str);\n}\nclass Color {\n\tconstructor(input) {\n\t\tif (input instanceof Color) {\n\t\t\treturn input;\n\t\t}\n\t\tconst type = typeof input;\n\t\tlet v;\n\t\tif (type === 'object') {\n\t\t\tv = fromObject(input);\n\t\t} else if (type === 'string') {\n\t\t\tv = hexParse(input) || nameParse(input) || functionParse(input);\n\t\t}\n\t\tthis._rgb = v;\n\t\tthis._valid = !!v;\n\t}\n\tget valid() {\n\t\treturn this._valid;\n\t}\n\tget rgb() {\n\t\tvar v = clone(this._rgb);\n\t\tif (v) {\n\t\t\tv.a = b2n(v.a);\n\t\t}\n\t\treturn v;\n\t}\n\tset rgb(obj) {\n\t\tthis._rgb = fromObject(obj);\n\t}\n\trgbString() {\n\t\treturn this._valid ? rgbString(this._rgb) : this._rgb;\n\t}\n\thexString() {\n\t\treturn this._valid ? hexString(this._rgb) : this._rgb;\n\t}\n\thslString() {\n\t\treturn this._valid ? hslString(this._rgb) : this._rgb;\n\t}\n\tmix(color, weight) {\n\t\tconst me = this;\n\t\tif (color) {\n\t\t\tconst c1 = me.rgb;\n\t\t\tconst c2 = color.rgb;\n\t\t\tlet w2;\n\t\t\tconst p = weight === w2 ? 0.5 : weight;\n\t\t\tconst w = 2 * p - 1;\n\t\t\tconst a = c1.a - c2.a;\n\t\t\tconst w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n\t\t\tw2 = 1 - w1;\n\t\t\tc1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n\t\t\tc1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n\t\t\tc1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n\t\t\tc1.a = p * c1.a + (1 - p) * c2.a;\n\t\t\tme.rgb = c1;\n\t\t}\n\t\treturn me;\n\t}\n\tclone() {\n\t\treturn new Color(this.rgb);\n\t}\n\talpha(a) {\n\t\tthis._rgb.a = n2b(a);\n\t\treturn this;\n\t}\n\tclearer(ratio) {\n\t\tconst rgb = this._rgb;\n\t\trgb.a *= 1 - ratio;\n\t\treturn this;\n\t}\n\tgreyscale() {\n\t\tconst rgb = this._rgb;\n\t\tconst val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n\t\trgb.r = rgb.g = rgb.b = val;\n\t\treturn this;\n\t}\n\topaquer(ratio) {\n\t\tconst rgb = this._rgb;\n\t\trgb.a *= 1 + ratio;\n\t\treturn this;\n\t}\n\tnegate() {\n\t\tconst v = this._rgb;\n\t\tv.r = 255 - v.r;\n\t\tv.g = 255 - v.g;\n\t\tv.b = 255 - v.b;\n\t\treturn this;\n\t}\n\tlighten(ratio) {\n\t\tmodHSL(this._rgb, 2, ratio);\n\t\treturn this;\n\t}\n\tdarken(ratio) {\n\t\tmodHSL(this._rgb, 2, -ratio);\n\t\treturn this;\n\t}\n\tsaturate(ratio) {\n\t\tmodHSL(this._rgb, 1, ratio);\n\t\treturn this;\n\t}\n\tdesaturate(ratio) {\n\t\tmodHSL(this._rgb, 1, -ratio);\n\t\treturn this;\n\t}\n\trotate(deg) {\n\t\trotate(this._rgb, deg);\n\t\treturn this;\n\t}\n}\nfunction index_esm(input) {\n\treturn new Color(input);\n}\n\nconst isPatternOrGradient = (value) => value instanceof CanvasGradient || value instanceof CanvasPattern;\nfunction color(value) {\n  return isPatternOrGradient(value) ? value : index_esm(value);\n}\nfunction getHoverColor(value) {\n  return isPatternOrGradient(value)\n    ? value\n    : index_esm(value).saturate(0.5).darken(0.1).hexString();\n}\n\nconst overrides = Object.create(null);\nconst descriptors = Object.create(null);\nfunction getScope$1(node, key) {\n  if (!key) {\n    return node;\n  }\n  const keys = key.split('.');\n  for (let i = 0, n = keys.length; i < n; ++i) {\n    const k = keys[i];\n    node = node[k] || (node[k] = Object.create(null));\n  }\n  return node;\n}\nfunction set(root, scope, values) {\n  if (typeof scope === 'string') {\n    return merge(getScope$1(root, scope), values);\n  }\n  return merge(getScope$1(root, ''), scope);\n}\nclass Defaults {\n  constructor(_descriptors) {\n    this.animation = undefined;\n    this.backgroundColor = 'rgba(0,0,0,0.1)';\n    this.borderColor = 'rgba(0,0,0,0.1)';\n    this.color = '#666';\n    this.datasets = {};\n    this.devicePixelRatio = (context) => context.chart.platform.getDevicePixelRatio();\n    this.elements = {};\n    this.events = [\n      'mousemove',\n      'mouseout',\n      'click',\n      'touchstart',\n      'touchmove'\n    ];\n    this.font = {\n      family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n      size: 12,\n      style: 'normal',\n      lineHeight: 1.2,\n      weight: null\n    };\n    this.hover = {};\n    this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor);\n    this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor);\n    this.hoverColor = (ctx, options) => getHoverColor(options.color);\n    this.indexAxis = 'x';\n    this.interaction = {\n      mode: 'nearest',\n      intersect: true\n    };\n    this.maintainAspectRatio = true;\n    this.onHover = null;\n    this.onClick = null;\n    this.parsing = true;\n    this.plugins = {};\n    this.responsive = true;\n    this.scale = undefined;\n    this.scales = {};\n    this.showLine = true;\n    this.describe(_descriptors);\n  }\n  set(scope, values) {\n    return set(this, scope, values);\n  }\n  get(scope) {\n    return getScope$1(this, scope);\n  }\n  describe(scope, values) {\n    return set(descriptors, scope, values);\n  }\n  override(scope, values) {\n    return set(overrides, scope, values);\n  }\n  route(scope, name, targetScope, targetName) {\n    const scopeObject = getScope$1(this, scope);\n    const targetScopeObject = getScope$1(this, targetScope);\n    const privateName = '_' + name;\n    Object.defineProperties(scopeObject, {\n      [privateName]: {\n        value: scopeObject[name],\n        writable: true\n      },\n      [name]: {\n        enumerable: true,\n        get() {\n          const local = this[privateName];\n          const target = targetScopeObject[targetName];\n          if (isObject(local)) {\n            return Object.assign({}, target, local);\n          }\n          return valueOrDefault(local, target);\n        },\n        set(value) {\n          this[privateName] = value;\n        }\n      }\n    });\n  }\n}\nvar defaults = new Defaults({\n  _scriptable: (name) => !name.startsWith('on'),\n  _indexable: (name) => name !== 'events',\n  hover: {\n    _fallback: 'interaction'\n  },\n  interaction: {\n    _scriptable: false,\n    _indexable: false,\n  }\n});\n\nfunction toFontString(font) {\n  if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n    return null;\n  }\n  return (font.style ? font.style + ' ' : '')\n\t\t+ (font.weight ? font.weight + ' ' : '')\n\t\t+ font.size + 'px '\n\t\t+ font.family;\n}\nfunction _measureText(ctx, data, gc, longest, string) {\n  let textWidth = data[string];\n  if (!textWidth) {\n    textWidth = data[string] = ctx.measureText(string).width;\n    gc.push(string);\n  }\n  if (textWidth > longest) {\n    longest = textWidth;\n  }\n  return longest;\n}\nfunction _longestText(ctx, font, arrayOfThings, cache) {\n  cache = cache || {};\n  let data = cache.data = cache.data || {};\n  let gc = cache.garbageCollect = cache.garbageCollect || [];\n  if (cache.font !== font) {\n    data = cache.data = {};\n    gc = cache.garbageCollect = [];\n    cache.font = font;\n  }\n  ctx.save();\n  ctx.font = font;\n  let longest = 0;\n  const ilen = arrayOfThings.length;\n  let i, j, jlen, thing, nestedThing;\n  for (i = 0; i < ilen; i++) {\n    thing = arrayOfThings[i];\n    if (thing !== undefined && thing !== null && isArray(thing) !== true) {\n      longest = _measureText(ctx, data, gc, longest, thing);\n    } else if (isArray(thing)) {\n      for (j = 0, jlen = thing.length; j < jlen; j++) {\n        nestedThing = thing[j];\n        if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n          longest = _measureText(ctx, data, gc, longest, nestedThing);\n        }\n      }\n    }\n  }\n  ctx.restore();\n  const gcLen = gc.length / 2;\n  if (gcLen > arrayOfThings.length) {\n    for (i = 0; i < gcLen; i++) {\n      delete data[gc[i]];\n    }\n    gc.splice(0, gcLen);\n  }\n  return longest;\n}\nfunction _alignPixel(chart, pixel, width) {\n  const devicePixelRatio = chart.currentDevicePixelRatio;\n  const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n  return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\nfunction clearCanvas(canvas, ctx) {\n  ctx = ctx || canvas.getContext('2d');\n  ctx.save();\n  ctx.resetTransform();\n  ctx.clearRect(0, 0, canvas.width, canvas.height);\n  ctx.restore();\n}\nfunction drawPoint(ctx, options, x, y) {\n  let type, xOffset, yOffset, size, cornerRadius;\n  const style = options.pointStyle;\n  const rotation = options.rotation;\n  const radius = options.radius;\n  let rad = (rotation || 0) * RAD_PER_DEG;\n  if (style && typeof style === 'object') {\n    type = style.toString();\n    if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n      ctx.save();\n      ctx.translate(x, y);\n      ctx.rotate(rad);\n      ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n      ctx.restore();\n      return;\n    }\n  }\n  if (isNaN(radius) || radius <= 0) {\n    return;\n  }\n  ctx.beginPath();\n  switch (style) {\n  default:\n    ctx.arc(x, y, radius, 0, TAU);\n    ctx.closePath();\n    break;\n  case 'triangle':\n    ctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n    rad += TWO_THIRDS_PI;\n    ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n    rad += TWO_THIRDS_PI;\n    ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n    ctx.closePath();\n    break;\n  case 'rectRounded':\n    cornerRadius = radius * 0.516;\n    size = radius - cornerRadius;\n    xOffset = Math.cos(rad + QUARTER_PI) * size;\n    yOffset = Math.sin(rad + QUARTER_PI) * size;\n    ctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n    ctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n    ctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n    ctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n    ctx.closePath();\n    break;\n  case 'rect':\n    if (!rotation) {\n      size = Math.SQRT1_2 * radius;\n      ctx.rect(x - size, y - size, 2 * size, 2 * size);\n      break;\n    }\n    rad += QUARTER_PI;\n  case 'rectRot':\n    xOffset = Math.cos(rad) * radius;\n    yOffset = Math.sin(rad) * radius;\n    ctx.moveTo(x - xOffset, y - yOffset);\n    ctx.lineTo(x + yOffset, y - xOffset);\n    ctx.lineTo(x + xOffset, y + yOffset);\n    ctx.lineTo(x - yOffset, y + xOffset);\n    ctx.closePath();\n    break;\n  case 'crossRot':\n    rad += QUARTER_PI;\n  case 'cross':\n    xOffset = Math.cos(rad) * radius;\n    yOffset = Math.sin(rad) * radius;\n    ctx.moveTo(x - xOffset, y - yOffset);\n    ctx.lineTo(x + xOffset, y + yOffset);\n    ctx.moveTo(x + yOffset, y - xOffset);\n    ctx.lineTo(x - yOffset, y + xOffset);\n    break;\n  case 'star':\n    xOffset = Math.cos(rad) * radius;\n    yOffset = Math.sin(rad) * radius;\n    ctx.moveTo(x - xOffset, y - yOffset);\n    ctx.lineTo(x + xOffset, y + yOffset);\n    ctx.moveTo(x + yOffset, y - xOffset);\n    ctx.lineTo(x - yOffset, y + xOffset);\n    rad += QUARTER_PI;\n    xOffset = Math.cos(rad) * radius;\n    yOffset = Math.sin(rad) * radius;\n    ctx.moveTo(x - xOffset, y - yOffset);\n    ctx.lineTo(x + xOffset, y + yOffset);\n    ctx.moveTo(x + yOffset, y - xOffset);\n    ctx.lineTo(x - yOffset, y + xOffset);\n    break;\n  case 'line':\n    xOffset = Math.cos(rad) * radius;\n    yOffset = Math.sin(rad) * radius;\n    ctx.moveTo(x - xOffset, y - yOffset);\n    ctx.lineTo(x + xOffset, y + yOffset);\n    break;\n  case 'dash':\n    ctx.moveTo(x, y);\n    ctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius);\n    break;\n  }\n  ctx.fill();\n  if (options.borderWidth > 0) {\n    ctx.stroke();\n  }\n}\nfunction _isPointInArea(point, area, margin) {\n  margin = margin || 0.5;\n  return !area || (point && point.x > area.left - margin && point.x < area.right + margin &&\n\t\tpoint.y > area.top - margin && point.y < area.bottom + margin);\n}\nfunction clipArea(ctx, area) {\n  ctx.save();\n  ctx.beginPath();\n  ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n  ctx.clip();\n}\nfunction unclipArea(ctx) {\n  ctx.restore();\n}\nfunction _steppedLineTo(ctx, previous, target, flip, mode) {\n  if (!previous) {\n    return ctx.lineTo(target.x, target.y);\n  }\n  if (mode === 'middle') {\n    const midpoint = (previous.x + target.x) / 2.0;\n    ctx.lineTo(midpoint, previous.y);\n    ctx.lineTo(midpoint, target.y);\n  } else if (mode === 'after' !== !!flip) {\n    ctx.lineTo(previous.x, target.y);\n  } else {\n    ctx.lineTo(target.x, previous.y);\n  }\n  ctx.lineTo(target.x, target.y);\n}\nfunction _bezierCurveTo(ctx, previous, target, flip) {\n  if (!previous) {\n    return ctx.lineTo(target.x, target.y);\n  }\n  ctx.bezierCurveTo(\n    flip ? previous.cp1x : previous.cp2x,\n    flip ? previous.cp1y : previous.cp2y,\n    flip ? target.cp2x : target.cp1x,\n    flip ? target.cp2y : target.cp1y,\n    target.x,\n    target.y);\n}\nfunction renderText(ctx, text, x, y, font, opts = {}) {\n  const lines = isArray(text) ? text : [text];\n  const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n  let i, line;\n  ctx.save();\n  ctx.font = font.string;\n  setRenderOpts(ctx, opts);\n  for (i = 0; i < lines.length; ++i) {\n    line = lines[i];\n    if (stroke) {\n      if (opts.strokeColor) {\n        ctx.strokeStyle = opts.strokeColor;\n      }\n      if (!isNullOrUndef(opts.strokeWidth)) {\n        ctx.lineWidth = opts.strokeWidth;\n      }\n      ctx.strokeText(line, x, y, opts.maxWidth);\n    }\n    ctx.fillText(line, x, y, opts.maxWidth);\n    decorateText(ctx, x, y, line, opts);\n    y += font.lineHeight;\n  }\n  ctx.restore();\n}\nfunction setRenderOpts(ctx, opts) {\n  if (opts.translation) {\n    ctx.translate(opts.translation[0], opts.translation[1]);\n  }\n  if (!isNullOrUndef(opts.rotation)) {\n    ctx.rotate(opts.rotation);\n  }\n  if (opts.color) {\n    ctx.fillStyle = opts.color;\n  }\n  if (opts.textAlign) {\n    ctx.textAlign = opts.textAlign;\n  }\n  if (opts.textBaseline) {\n    ctx.textBaseline = opts.textBaseline;\n  }\n}\nfunction decorateText(ctx, x, y, line, opts) {\n  if (opts.strikethrough || opts.underline) {\n    const metrics = ctx.measureText(line);\n    const left = x - metrics.actualBoundingBoxLeft;\n    const right = x + metrics.actualBoundingBoxRight;\n    const top = y - metrics.actualBoundingBoxAscent;\n    const bottom = y + metrics.actualBoundingBoxDescent;\n    const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n    ctx.strokeStyle = ctx.fillStyle;\n    ctx.beginPath();\n    ctx.lineWidth = opts.decorationWidth || 2;\n    ctx.moveTo(left, yDecoration);\n    ctx.lineTo(right, yDecoration);\n    ctx.stroke();\n  }\n}\nfunction addRoundedRectPath(ctx, rect) {\n  const {x, y, w, h, radius} = rect;\n  ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, -HALF_PI, PI, true);\n  ctx.lineTo(x, y + h - radius.bottomLeft);\n  ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n  ctx.lineTo(x + w - radius.bottomRight, y + h);\n  ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n  ctx.lineTo(x + w, y + radius.topRight);\n  ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n  ctx.lineTo(x + radius.topLeft, y);\n}\n\nconst LINE_HEIGHT = new RegExp(/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/);\nconst FONT_STYLE = new RegExp(/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/);\nfunction toLineHeight(value, size) {\n  const matches = ('' + value).match(LINE_HEIGHT);\n  if (!matches || matches[1] === 'normal') {\n    return size * 1.2;\n  }\n  value = +matches[2];\n  switch (matches[3]) {\n  case 'px':\n    return value;\n  case '%':\n    value /= 100;\n    break;\n  }\n  return size * value;\n}\nconst numberOrZero = v => +v || 0;\nfunction _readValueToProps(value, props) {\n  const ret = {};\n  const objProps = isObject(props);\n  const keys = objProps ? Object.keys(props) : props;\n  const read = isObject(value)\n    ? objProps\n      ? prop => valueOrDefault(value[prop], value[props[prop]])\n      : prop => value[prop]\n    : () => value;\n  for (const prop of keys) {\n    ret[prop] = numberOrZero(read(prop));\n  }\n  return ret;\n}\nfunction toTRBL(value) {\n  return _readValueToProps(value, {top: 'y', right: 'x', bottom: 'y', left: 'x'});\n}\nfunction toTRBLCorners(value) {\n  return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);\n}\nfunction toPadding(value) {\n  const obj = toTRBL(value);\n  obj.width = obj.left + obj.right;\n  obj.height = obj.top + obj.bottom;\n  return obj;\n}\nfunction toFont(options, fallback) {\n  options = options || {};\n  fallback = fallback || defaults.font;\n  let size = valueOrDefault(options.size, fallback.size);\n  if (typeof size === 'string') {\n    size = parseInt(size, 10);\n  }\n  let style = valueOrDefault(options.style, fallback.style);\n  if (style && !('' + style).match(FONT_STYLE)) {\n    console.warn('Invalid font style specified: \"' + style + '\"');\n    style = '';\n  }\n  const font = {\n    family: valueOrDefault(options.family, fallback.family),\n    lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n    size,\n    style,\n    weight: valueOrDefault(options.weight, fallback.weight),\n    string: ''\n  };\n  font.string = toFontString(font);\n  return font;\n}\nfunction resolve(inputs, context, index, info) {\n  let cacheable = true;\n  let i, ilen, value;\n  for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n    value = inputs[i];\n    if (value === undefined) {\n      continue;\n    }\n    if (context !== undefined && typeof value === 'function') {\n      value = value(context);\n      cacheable = false;\n    }\n    if (index !== undefined && isArray(value)) {\n      value = value[index % value.length];\n      cacheable = false;\n    }\n    if (value !== undefined) {\n      if (info && !cacheable) {\n        info.cacheable = false;\n      }\n      return value;\n    }\n  }\n}\nfunction _addGrace(minmax, grace) {\n  const {min, max} = minmax;\n  return {\n    min: min - Math.abs(toDimension(grace, min)),\n    max: max + toDimension(grace, max)\n  };\n}\n\nfunction _lookup(table, value, cmp) {\n  cmp = cmp || ((index) => table[index] < value);\n  let hi = table.length - 1;\n  let lo = 0;\n  let mid;\n  while (hi - lo > 1) {\n    mid = (lo + hi) >> 1;\n    if (cmp(mid)) {\n      lo = mid;\n    } else {\n      hi = mid;\n    }\n  }\n  return {lo, hi};\n}\nconst _lookupByKey = (table, key, value) =>\n  _lookup(table, value, index => table[index][key] < value);\nconst _rlookupByKey = (table, key, value) =>\n  _lookup(table, value, index => table[index][key] >= value);\nfunction _filterBetween(values, min, max) {\n  let start = 0;\n  let end = values.length;\n  while (start < end && values[start] < min) {\n    start++;\n  }\n  while (end > start && values[end - 1] > max) {\n    end--;\n  }\n  return start > 0 || end < values.length\n    ? values.slice(start, end)\n    : values;\n}\nconst arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];\nfunction listenArrayEvents(array, listener) {\n  if (array._chartjs) {\n    array._chartjs.listeners.push(listener);\n    return;\n  }\n  Object.defineProperty(array, '_chartjs', {\n    configurable: true,\n    enumerable: false,\n    value: {\n      listeners: [listener]\n    }\n  });\n  arrayEvents.forEach((key) => {\n    const method = '_onData' + _capitalize(key);\n    const base = array[key];\n    Object.defineProperty(array, key, {\n      configurable: true,\n      enumerable: false,\n      value(...args) {\n        const res = base.apply(this, args);\n        array._chartjs.listeners.forEach((object) => {\n          if (typeof object[method] === 'function') {\n            object[method](...args);\n          }\n        });\n        return res;\n      }\n    });\n  });\n}\nfunction unlistenArrayEvents(array, listener) {\n  const stub = array._chartjs;\n  if (!stub) {\n    return;\n  }\n  const listeners = stub.listeners;\n  const index = listeners.indexOf(listener);\n  if (index !== -1) {\n    listeners.splice(index, 1);\n  }\n  if (listeners.length > 0) {\n    return;\n  }\n  arrayEvents.forEach((key) => {\n    delete array[key];\n  });\n  delete array._chartjs;\n}\nfunction _arrayUnique(items) {\n  const set = new Set();\n  let i, ilen;\n  for (i = 0, ilen = items.length; i < ilen; ++i) {\n    set.add(items[i]);\n  }\n  if (set.size === ilen) {\n    return items;\n  }\n  return Array.from(set);\n}\n\nfunction _createResolver(scopes, prefixes = [''], rootScopes = scopes, fallback, getTarget = () => scopes[0]) {\n  if (!defined(fallback)) {\n    fallback = _resolve('_fallback', scopes);\n  }\n  const cache = {\n    [Symbol.toStringTag]: 'Object',\n    _cacheable: true,\n    _scopes: scopes,\n    _rootScopes: rootScopes,\n    _fallback: fallback,\n    _getTarget: getTarget,\n    override: (scope) => _createResolver([scope, ...scopes], prefixes, rootScopes, fallback),\n  };\n  return new Proxy(cache, {\n    deleteProperty(target, prop) {\n      delete target[prop];\n      delete target._keys;\n      delete scopes[0][prop];\n      return true;\n    },\n    get(target, prop) {\n      return _cached(target, prop,\n        () => _resolveWithPrefixes(prop, prefixes, scopes, target));\n    },\n    getOwnPropertyDescriptor(target, prop) {\n      return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n    },\n    getPrototypeOf() {\n      return Reflect.getPrototypeOf(scopes[0]);\n    },\n    has(target, prop) {\n      return getKeysFromAllScopes(target).includes(prop);\n    },\n    ownKeys(target) {\n      return getKeysFromAllScopes(target);\n    },\n    set(target, prop, value) {\n      const storage = target._storage || (target._storage = getTarget());\n      storage[prop] = value;\n      delete target[prop];\n      delete target._keys;\n      return true;\n    }\n  });\n}\nfunction _attachContext(proxy, context, subProxy, descriptorDefaults) {\n  const cache = {\n    _cacheable: false,\n    _proxy: proxy,\n    _context: context,\n    _subProxy: subProxy,\n    _stack: new Set(),\n    _descriptors: _descriptors(proxy, descriptorDefaults),\n    setContext: (ctx) => _attachContext(proxy, ctx, subProxy, descriptorDefaults),\n    override: (scope) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n  };\n  return new Proxy(cache, {\n    deleteProperty(target, prop) {\n      delete target[prop];\n      delete proxy[prop];\n      return true;\n    },\n    get(target, prop, receiver) {\n      return _cached(target, prop,\n        () => _resolveWithContext(target, prop, receiver));\n    },\n    getOwnPropertyDescriptor(target, prop) {\n      return target._descriptors.allKeys\n        ? Reflect.has(proxy, prop) ? {enumerable: true, configurable: true} : undefined\n        : Reflect.getOwnPropertyDescriptor(proxy, prop);\n    },\n    getPrototypeOf() {\n      return Reflect.getPrototypeOf(proxy);\n    },\n    has(target, prop) {\n      return Reflect.has(proxy, prop);\n    },\n    ownKeys() {\n      return Reflect.ownKeys(proxy);\n    },\n    set(target, prop, value) {\n      proxy[prop] = value;\n      delete target[prop];\n      return true;\n    }\n  });\n}\nfunction _descriptors(proxy, defaults = {scriptable: true, indexable: true}) {\n  const {_scriptable = defaults.scriptable, _indexable = defaults.indexable, _allKeys = defaults.allKeys} = proxy;\n  return {\n    allKeys: _allKeys,\n    scriptable: _scriptable,\n    indexable: _indexable,\n    isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable,\n    isIndexable: isFunction(_indexable) ? _indexable : () => _indexable\n  };\n}\nconst readKey = (prefix, name) => prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop, value) => isObject(value) && prop !== 'adapters';\nfunction _cached(target, prop, resolve) {\n  let value = target[prop];\n  if (defined(value)) {\n    return value;\n  }\n  value = resolve();\n  if (defined(value)) {\n    target[prop] = value;\n  }\n  return value;\n}\nfunction _resolveWithContext(target, prop, receiver) {\n  const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n  let value = _proxy[prop];\n  if (isFunction(value) && descriptors.isScriptable(prop)) {\n    value = _resolveScriptable(prop, value, target, receiver);\n  }\n  if (isArray(value) && value.length) {\n    value = _resolveArray(prop, value, target, descriptors.isIndexable);\n  }\n  if (needsSubResolver(prop, value)) {\n    value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n  }\n  return value;\n}\nfunction _resolveScriptable(prop, value, target, receiver) {\n  const {_proxy, _context, _subProxy, _stack} = target;\n  if (_stack.has(prop)) {\n    throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n  }\n  _stack.add(prop);\n  value = value(_context, _subProxy || receiver);\n  _stack.delete(prop);\n  if (isObject(value)) {\n    value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n  }\n  return value;\n}\nfunction _resolveArray(prop, value, target, isIndexable) {\n  const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n  if (defined(_context.index) && isIndexable(prop)) {\n    value = value[_context.index % value.length];\n  } else if (isObject(value[0])) {\n    const arr = value;\n    const scopes = _proxy._scopes.filter(s => s !== arr);\n    value = [];\n    for (const item of arr) {\n      const resolver = createSubResolver(scopes, _proxy, prop, item);\n      value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n    }\n  }\n  return value;\n}\nfunction resolveFallback(fallback, prop, value) {\n  return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\nconst getScope = (key, parent) => key === true ? parent\n  : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\nfunction addScopes(set, parentScopes, key, parentFallback) {\n  for (const parent of parentScopes) {\n    const scope = getScope(key, parent);\n    if (scope) {\n      set.add(scope);\n      const fallback = resolveFallback(scope._fallback, key, scope);\n      if (defined(fallback) && fallback !== key && fallback !== parentFallback) {\n        return fallback;\n      }\n    } else if (scope === false && defined(parentFallback) && key !== parentFallback) {\n      return null;\n    }\n  }\n  return false;\n}\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n  const rootScopes = resolver._rootScopes;\n  const fallback = resolveFallback(resolver._fallback, prop, value);\n  const allScopes = [...parentScopes, ...rootScopes];\n  const set = new Set();\n  set.add(value);\n  let key = addScopesFromKey(set, allScopes, prop, fallback || prop);\n  if (key === null) {\n    return false;\n  }\n  if (defined(fallback) && fallback !== prop) {\n    key = addScopesFromKey(set, allScopes, fallback, key);\n    if (key === null) {\n      return false;\n    }\n  }\n  return _createResolver(Array.from(set), [''], rootScopes, fallback,\n    () => subGetTarget(resolver, prop, value));\n}\nfunction addScopesFromKey(set, allScopes, key, fallback) {\n  while (key) {\n    key = addScopes(set, allScopes, key, fallback);\n  }\n  return key;\n}\nfunction subGetTarget(resolver, prop, value) {\n  const parent = resolver._getTarget();\n  if (!(prop in parent)) {\n    parent[prop] = {};\n  }\n  const target = parent[prop];\n  if (isArray(target) && isObject(value)) {\n    return value;\n  }\n  return target;\n}\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n  let value;\n  for (const prefix of prefixes) {\n    value = _resolve(readKey(prefix, prop), scopes);\n    if (defined(value)) {\n      return needsSubResolver(prop, value)\n        ? createSubResolver(scopes, proxy, prop, value)\n        : value;\n    }\n  }\n}\nfunction _resolve(key, scopes) {\n  for (const scope of scopes) {\n    if (!scope) {\n      continue;\n    }\n    const value = scope[key];\n    if (defined(value)) {\n      return value;\n    }\n  }\n}\nfunction getKeysFromAllScopes(target) {\n  let keys = target._keys;\n  if (!keys) {\n    keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n  }\n  return keys;\n}\nfunction resolveKeysFromAllScopes(scopes) {\n  const set = new Set();\n  for (const scope of scopes) {\n    for (const key of Object.keys(scope).filter(k => !k.startsWith('_'))) {\n      set.add(key);\n    }\n  }\n  return Array.from(set);\n}\n\nconst EPSILON = Number.EPSILON || 1e-14;\nconst getPoint = (points, i) => i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis) => indexAxis === 'x' ? 'y' : 'x';\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n  const previous = firstPoint.skip ? middlePoint : firstPoint;\n  const current = middlePoint;\n  const next = afterPoint.skip ? middlePoint : afterPoint;\n  const d01 = distanceBetweenPoints(current, previous);\n  const d12 = distanceBetweenPoints(next, current);\n  let s01 = d01 / (d01 + d12);\n  let s12 = d12 / (d01 + d12);\n  s01 = isNaN(s01) ? 0 : s01;\n  s12 = isNaN(s12) ? 0 : s12;\n  const fa = t * s01;\n  const fb = t * s12;\n  return {\n    previous: {\n      x: current.x - fa * (next.x - previous.x),\n      y: current.y - fa * (next.y - previous.y)\n    },\n    next: {\n      x: current.x + fb * (next.x - previous.x),\n      y: current.y + fb * (next.y - previous.y)\n    }\n  };\n}\nfunction monotoneAdjust(points, deltaK, mK) {\n  const pointsLen = points.length;\n  let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\n  let pointAfter = getPoint(points, 0);\n  for (let i = 0; i < pointsLen - 1; ++i) {\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent || !pointAfter) {\n      continue;\n    }\n    if (almostEquals(deltaK[i], 0, EPSILON)) {\n      mK[i] = mK[i + 1] = 0;\n      continue;\n    }\n    alphaK = mK[i] / deltaK[i];\n    betaK = mK[i + 1] / deltaK[i];\n    squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n    if (squaredMagnitude <= 9) {\n      continue;\n    }\n    tauK = 3 / Math.sqrt(squaredMagnitude);\n    mK[i] = alphaK * tauK * deltaK[i];\n    mK[i + 1] = betaK * tauK * deltaK[i];\n  }\n}\nfunction monotoneCompute(points, mK, indexAxis = 'x') {\n  const valueAxis = getValueAxis(indexAxis);\n  const pointsLen = points.length;\n  let delta, pointBefore, pointCurrent;\n  let pointAfter = getPoint(points, 0);\n  for (let i = 0; i < pointsLen; ++i) {\n    pointBefore = pointCurrent;\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent) {\n      continue;\n    }\n    const iPixel = pointCurrent[indexAxis];\n    const vPixel = pointCurrent[valueAxis];\n    if (pointBefore) {\n      delta = (iPixel - pointBefore[indexAxis]) / 3;\n      pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n      pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n    }\n    if (pointAfter) {\n      delta = (pointAfter[indexAxis] - iPixel) / 3;\n      pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n      pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n    }\n  }\n}\nfunction splineCurveMonotone(points, indexAxis = 'x') {\n  const valueAxis = getValueAxis(indexAxis);\n  const pointsLen = points.length;\n  const deltaK = Array(pointsLen).fill(0);\n  const mK = Array(pointsLen);\n  let i, pointBefore, pointCurrent;\n  let pointAfter = getPoint(points, 0);\n  for (i = 0; i < pointsLen; ++i) {\n    pointBefore = pointCurrent;\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent) {\n      continue;\n    }\n    if (pointAfter) {\n      const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n      deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n    }\n    mK[i] = !pointBefore ? deltaK[i]\n      : !pointAfter ? deltaK[i - 1]\n      : (sign(deltaK[i - 1]) !== sign(deltaK[i])) ? 0\n      : (deltaK[i - 1] + deltaK[i]) / 2;\n  }\n  monotoneAdjust(points, deltaK, mK);\n  monotoneCompute(points, mK, indexAxis);\n}\nfunction capControlPoint(pt, min, max) {\n  return Math.max(Math.min(pt, max), min);\n}\nfunction capBezierPoints(points, area) {\n  let i, ilen, point, inArea, inAreaPrev;\n  let inAreaNext = _isPointInArea(points[0], area);\n  for (i = 0, ilen = points.length; i < ilen; ++i) {\n    inAreaPrev = inArea;\n    inArea = inAreaNext;\n    inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n    if (!inArea) {\n      continue;\n    }\n    point = points[i];\n    if (inAreaPrev) {\n      point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n      point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n    }\n    if (inAreaNext) {\n      point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n      point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n    }\n  }\n}\nfunction _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n  let i, ilen, point, controlPoints;\n  if (options.spanGaps) {\n    points = points.filter((pt) => !pt.skip);\n  }\n  if (options.cubicInterpolationMode === 'monotone') {\n    splineCurveMonotone(points, indexAxis);\n  } else {\n    let prev = loop ? points[points.length - 1] : points[0];\n    for (i = 0, ilen = points.length; i < ilen; ++i) {\n      point = points[i];\n      controlPoints = splineCurve(\n        prev,\n        point,\n        points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen],\n        options.tension\n      );\n      point.cp1x = controlPoints.previous.x;\n      point.cp1y = controlPoints.previous.y;\n      point.cp2x = controlPoints.next.x;\n      point.cp2y = controlPoints.next.y;\n      prev = point;\n    }\n  }\n  if (options.capBezierPoints) {\n    capBezierPoints(points, area);\n  }\n}\n\nfunction _isDomSupported() {\n  return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\nfunction _getParentNode(domNode) {\n  let parent = domNode.parentNode;\n  if (parent && parent.toString() === '[object ShadowRoot]') {\n    parent = parent.host;\n  }\n  return parent;\n}\nfunction parseMaxStyle(styleValue, node, parentProperty) {\n  let valueInPixels;\n  if (typeof styleValue === 'string') {\n    valueInPixels = parseInt(styleValue, 10);\n    if (styleValue.indexOf('%') !== -1) {\n      valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n    }\n  } else {\n    valueInPixels = styleValue;\n  }\n  return valueInPixels;\n}\nconst getComputedStyle = (element) => window.getComputedStyle(element, null);\nfunction getStyle(el, property) {\n  return getComputedStyle(el).getPropertyValue(property);\n}\nconst positions = ['top', 'right', 'bottom', 'left'];\nfunction getPositionedStyle(styles, style, suffix) {\n  const result = {};\n  suffix = suffix ? '-' + suffix : '';\n  for (let i = 0; i < 4; i++) {\n    const pos = positions[i];\n    result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n  }\n  result.width = result.left + result.right;\n  result.height = result.top + result.bottom;\n  return result;\n}\nconst useOffsetPos = (x, y, target) => (x > 0 || y > 0) && (!target || !target.shadowRoot);\nfunction getCanvasPosition(evt, canvas) {\n  const e = evt.native || evt;\n  const touches = e.touches;\n  const source = touches && touches.length ? touches[0] : e;\n  const {offsetX, offsetY} = source;\n  let box = false;\n  let x, y;\n  if (useOffsetPos(offsetX, offsetY, e.target)) {\n    x = offsetX;\n    y = offsetY;\n  } else {\n    const rect = canvas.getBoundingClientRect();\n    x = source.clientX - rect.left;\n    y = source.clientY - rect.top;\n    box = true;\n  }\n  return {x, y, box};\n}\nfunction getRelativePosition(evt, chart) {\n  const {canvas, currentDevicePixelRatio} = chart;\n  const style = getComputedStyle(canvas);\n  const borderBox = style.boxSizing === 'border-box';\n  const paddings = getPositionedStyle(style, 'padding');\n  const borders = getPositionedStyle(style, 'border', 'width');\n  const {x, y, box} = getCanvasPosition(evt, canvas);\n  const xOffset = paddings.left + (box && borders.left);\n  const yOffset = paddings.top + (box && borders.top);\n  let {width, height} = chart;\n  if (borderBox) {\n    width -= paddings.width + borders.width;\n    height -= paddings.height + borders.height;\n  }\n  return {\n    x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n    y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n  };\n}\nfunction getContainerSize(canvas, width, height) {\n  let maxWidth, maxHeight;\n  if (width === undefined || height === undefined) {\n    const container = _getParentNode(canvas);\n    if (!container) {\n      width = canvas.clientWidth;\n      height = canvas.clientHeight;\n    } else {\n      const rect = container.getBoundingClientRect();\n      const containerStyle = getComputedStyle(container);\n      const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n      const containerPadding = getPositionedStyle(containerStyle, 'padding');\n      width = rect.width - containerPadding.width - containerBorder.width;\n      height = rect.height - containerPadding.height - containerBorder.height;\n      maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n      maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n    }\n  }\n  return {\n    width,\n    height,\n    maxWidth: maxWidth || INFINITY,\n    maxHeight: maxHeight || INFINITY\n  };\n}\nconst round1 = v => Math.round(v * 10) / 10;\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\n  const style = getComputedStyle(canvas);\n  const margins = getPositionedStyle(style, 'margin');\n  const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n  const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n  const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n  let {width, height} = containerSize;\n  if (style.boxSizing === 'content-box') {\n    const borders = getPositionedStyle(style, 'border', 'width');\n    const paddings = getPositionedStyle(style, 'padding');\n    width -= paddings.width + borders.width;\n    height -= paddings.height + borders.height;\n  }\n  width = Math.max(0, width - margins.width);\n  height = Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height - margins.height);\n  width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n  height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n  if (width && !height) {\n    height = round1(width / 2);\n  }\n  return {\n    width,\n    height\n  };\n}\nfunction retinaScale(chart, forceRatio, forceStyle) {\n  const pixelRatio = forceRatio || 1;\n  const deviceHeight = Math.floor(chart.height * pixelRatio);\n  const deviceWidth = Math.floor(chart.width * pixelRatio);\n  chart.height = deviceHeight / pixelRatio;\n  chart.width = deviceWidth / pixelRatio;\n  const canvas = chart.canvas;\n  if (canvas.style && (forceStyle || (!canvas.style.height && !canvas.style.width))) {\n    canvas.style.height = `${chart.height}px`;\n    canvas.style.width = `${chart.width}px`;\n  }\n  if (chart.currentDevicePixelRatio !== pixelRatio\n      || canvas.height !== deviceHeight\n      || canvas.width !== deviceWidth) {\n    chart.currentDevicePixelRatio = pixelRatio;\n    canvas.height = deviceHeight;\n    canvas.width = deviceWidth;\n    chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n    return true;\n  }\n  return false;\n}\nconst supportsEventListenerOptions = (function() {\n  let passiveSupported = false;\n  try {\n    const options = {\n      get passive() {\n        passiveSupported = true;\n        return false;\n      }\n    };\n    window.addEventListener('test', null, options);\n    window.removeEventListener('test', null, options);\n  } catch (e) {\n  }\n  return passiveSupported;\n}());\nfunction readUsedSize(element, property) {\n  const value = getStyle(element, property);\n  const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n  return matches ? +matches[1] : undefined;\n}\n\nfunction _pointInLine(p1, p2, t, mode) {\n  return {\n    x: p1.x + t * (p2.x - p1.x),\n    y: p1.y + t * (p2.y - p1.y)\n  };\n}\nfunction _steppedInterpolation(p1, p2, t, mode) {\n  return {\n    x: p1.x + t * (p2.x - p1.x),\n    y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y\n    : mode === 'after' ? t < 1 ? p1.y : p2.y\n    : t > 0 ? p2.y : p1.y\n  };\n}\nfunction _bezierInterpolation(p1, p2, t, mode) {\n  const cp1 = {x: p1.cp2x, y: p1.cp2y};\n  const cp2 = {x: p2.cp1x, y: p2.cp1y};\n  const a = _pointInLine(p1, cp1, t);\n  const b = _pointInLine(cp1, cp2, t);\n  const c = _pointInLine(cp2, p2, t);\n  const d = _pointInLine(a, b, t);\n  const e = _pointInLine(b, c, t);\n  return _pointInLine(d, e, t);\n}\n\nconst intlCache = new Map();\nfunction getNumberFormat(locale, options) {\n  options = options || {};\n  const cacheKey = locale + JSON.stringify(options);\n  let formatter = intlCache.get(cacheKey);\n  if (!formatter) {\n    formatter = new Intl.NumberFormat(locale, options);\n    intlCache.set(cacheKey, formatter);\n  }\n  return formatter;\n}\nfunction formatNumber(num, locale, options) {\n  return getNumberFormat(locale, options).format(num);\n}\n\nconst getRightToLeftAdapter = function(rectX, width) {\n  return {\n    x(x) {\n      return rectX + rectX + width - x;\n    },\n    setWidth(w) {\n      width = w;\n    },\n    textAlign(align) {\n      if (align === 'center') {\n        return align;\n      }\n      return align === 'right' ? 'left' : 'right';\n    },\n    xPlus(x, value) {\n      return x - value;\n    },\n    leftForLtr(x, itemWidth) {\n      return x - itemWidth;\n    },\n  };\n};\nconst getLeftToRightAdapter = function() {\n  return {\n    x(x) {\n      return x;\n    },\n    setWidth(w) {\n    },\n    textAlign(align) {\n      return align;\n    },\n    xPlus(x, value) {\n      return x + value;\n    },\n    leftForLtr(x, _itemWidth) {\n      return x;\n    },\n  };\n};\nfunction getRtlAdapter(rtl, rectX, width) {\n  return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\nfunction overrideTextDirection(ctx, direction) {\n  let style, original;\n  if (direction === 'ltr' || direction === 'rtl') {\n    style = ctx.canvas.style;\n    original = [\n      style.getPropertyValue('direction'),\n      style.getPropertyPriority('direction'),\n    ];\n    style.setProperty('direction', direction, 'important');\n    ctx.prevTextDirection = original;\n  }\n}\nfunction restoreTextDirection(ctx, original) {\n  if (original !== undefined) {\n    delete ctx.prevTextDirection;\n    ctx.canvas.style.setProperty('direction', original[0], original[1]);\n  }\n}\n\nfunction propertyFn(property) {\n  if (property === 'angle') {\n    return {\n      between: _angleBetween,\n      compare: _angleDiff,\n      normalize: _normalizeAngle,\n    };\n  }\n  return {\n    between: (n, s, e) => n >= Math.min(s, e) && n <= Math.max(e, s),\n    compare: (a, b) => a - b,\n    normalize: x => x\n  };\n}\nfunction normalizeSegment({start, end, count, loop, style}) {\n  return {\n    start: start % count,\n    end: end % count,\n    loop: loop && (end - start + 1) % count === 0,\n    style\n  };\n}\nfunction getSegment(segment, points, bounds) {\n  const {property, start: startBound, end: endBound} = bounds;\n  const {between, normalize} = propertyFn(property);\n  const count = points.length;\n  let {start, end, loop} = segment;\n  let i, ilen;\n  if (loop) {\n    start += count;\n    end += count;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n        break;\n      }\n      start--;\n      end--;\n    }\n    start %= count;\n    end %= count;\n  }\n  if (end < start) {\n    end += count;\n  }\n  return {start, end, loop, style: segment.style};\n}\nfunction _boundSegment(segment, points, bounds) {\n  if (!bounds) {\n    return [segment];\n  }\n  const {property, start: startBound, end: endBound} = bounds;\n  const count = points.length;\n  const {compare, between, normalize} = propertyFn(property);\n  const {start, end, loop, style} = getSegment(segment, points, bounds);\n  const result = [];\n  let inside = false;\n  let subStart = null;\n  let value, point, prevValue;\n  const startIsBefore = () => between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n  const endIsBefore = () => compare(endBound, value) === 0 || between(endBound, prevValue, value);\n  const shouldStart = () => inside || startIsBefore();\n  const shouldStop = () => !inside || endIsBefore();\n  for (let i = start, prev = start; i <= end; ++i) {\n    point = points[i % count];\n    if (point.skip) {\n      continue;\n    }\n    value = normalize(point[property]);\n    if (value === prevValue) {\n      continue;\n    }\n    inside = between(value, startBound, endBound);\n    if (subStart === null && shouldStart()) {\n      subStart = compare(value, startBound) === 0 ? i : prev;\n    }\n    if (subStart !== null && shouldStop()) {\n      result.push(normalizeSegment({start: subStart, end: i, loop, count, style}));\n      subStart = null;\n    }\n    prev = i;\n    prevValue = value;\n  }\n  if (subStart !== null) {\n    result.push(normalizeSegment({start: subStart, end, loop, count, style}));\n  }\n  return result;\n}\nfunction _boundSegments(line, bounds) {\n  const result = [];\n  const segments = line.segments;\n  for (let i = 0; i < segments.length; i++) {\n    const sub = _boundSegment(segments[i], line.points, bounds);\n    if (sub.length) {\n      result.push(...sub);\n    }\n  }\n  return result;\n}\nfunction findStartAndEnd(points, count, loop, spanGaps) {\n  let start = 0;\n  let end = count - 1;\n  if (loop && !spanGaps) {\n    while (start < count && !points[start].skip) {\n      start++;\n    }\n  }\n  while (start < count && points[start].skip) {\n    start++;\n  }\n  start %= count;\n  if (loop) {\n    end += start;\n  }\n  while (end > start && points[end % count].skip) {\n    end--;\n  }\n  end %= count;\n  return {start, end};\n}\nfunction solidSegments(points, start, max, loop) {\n  const count = points.length;\n  const result = [];\n  let last = start;\n  let prev = points[start];\n  let end;\n  for (end = start + 1; end <= max; ++end) {\n    const cur = points[end % count];\n    if (cur.skip || cur.stop) {\n      if (!prev.skip) {\n        loop = false;\n        result.push({start: start % count, end: (end - 1) % count, loop});\n        start = last = cur.stop ? end : null;\n      }\n    } else {\n      last = end;\n      if (prev.skip) {\n        start = end;\n      }\n    }\n    prev = cur;\n  }\n  if (last !== null) {\n    result.push({start: start % count, end: last % count, loop});\n  }\n  return result;\n}\nfunction _computeSegments(line, segmentOptions) {\n  const points = line.points;\n  const spanGaps = line.options.spanGaps;\n  const count = points.length;\n  if (!count) {\n    return [];\n  }\n  const loop = !!line._loop;\n  const {start, end} = findStartAndEnd(points, count, loop, spanGaps);\n  if (spanGaps === true) {\n    return splitByStyles(line, [{start, end, loop}], points, segmentOptions);\n  }\n  const max = end < start ? end + count : end;\n  const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n  return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\nfunction splitByStyles(line, segments, points, segmentOptions) {\n  if (!segmentOptions || !segmentOptions.setContext || !points) {\n    return segments;\n  }\n  return doSplitByStyles(line, segments, points, segmentOptions);\n}\nfunction doSplitByStyles(line, segments, points, segmentOptions) {\n  const baseStyle = readStyle(line.options);\n  const count = points.length;\n  const result = [];\n  let start = segments[0].start;\n  let i = start;\n  for (const segment of segments) {\n    let prevStyle = baseStyle;\n    let prev = points[start % count];\n    let style;\n    for (i = start + 1; i <= segment.end; i++) {\n      const pt = points[i % count];\n      style = readStyle(segmentOptions.setContext({\n        type: 'segment',\n        p0: prev,\n        p1: pt,\n        p0DataIndex: (i - 1) % count,\n        p1DataIndex: i % count,\n        datasetIndex: line._datasetIndex\n      }));\n      if (styleChanged(style, prevStyle)) {\n        result.push({start: start, end: i - 1, loop: segment.loop, style: prevStyle});\n        prevStyle = style;\n        start = i - 1;\n      }\n      prev = pt;\n      prevStyle = style;\n    }\n    if (start < i - 1) {\n      result.push({start, end: i - 1, loop: segment.loop, style});\n      start = i - 1;\n    }\n  }\n  return result;\n}\nfunction readStyle(options) {\n  return {\n    backgroundColor: options.backgroundColor,\n    borderCapStyle: options.borderCapStyle,\n    borderDash: options.borderDash,\n    borderDashOffset: options.borderDashOffset,\n    borderJoinStyle: options.borderJoinStyle,\n    borderWidth: options.borderWidth,\n    borderColor: options.borderColor\n  };\n}\nfunction styleChanged(style, prevStyle) {\n  return prevStyle && JSON.stringify(style) !== JSON.stringify(prevStyle);\n}\n\nexport { overrides as $, toPadding as A, each as B, getMaximumSize as C, _getParentNode as D, readUsedSize as E, throttled as F, supportsEventListenerOptions as G, HALF_PI as H, _isDomSupported as I, log10 as J, _factorize as K, finiteOrDefault as L, callback as M, _addGrace as N, toDegrees as O, PI as P, _measureText as Q, _int16Range as R, _alignPixel as S, TAU as T, clipArea as U, renderText as V, unclipArea as W, toFont as X, _toLeftRightCenter as Y, _alignStartEnd as Z, _arrayUnique as _, resolve as a, merge as a0, _capitalize as a1, descriptors as a2, isFunction as a3, _attachContext as a4, _createResolver as a5, _descriptors as a6, mergeIf as a7, uid as a8, debounce as a9, _setMinAndMaxByKey as aA, niceNum as aB, almostWhole as aC, almostEquals as aD, _decimalPlaces as aE, _longestText as aF, _filterBetween as aG, _lookup as aH, getHoverColor as aI, clone$1 as aJ, _merger as aK, _mergerIf as aL, _deprecated as aM, toFontString as aN, splineCurve as aO, splineCurveMonotone as aP, getStyle as aQ, fontString as aR, toLineHeight as aS, PITAU as aT, INFINITY as aU, RAD_PER_DEG as aV, QUARTER_PI as aW, TWO_THIRDS_PI as aX, _angleDiff as aY, retinaScale as aa, clearCanvas as ab, setsEqual as ac, _elementsEqual as ad, getAngleFromPoint as ae, _readValueToProps as af, _updateBezierControlPoints as ag, _computeSegments as ah, _boundSegments as ai, _steppedInterpolation as aj, _bezierInterpolation as ak, _pointInLine as al, _steppedLineTo as am, _bezierCurveTo as an, drawPoint as ao, addRoundedRectPath as ap, toTRBL as aq, toTRBLCorners as ar, _boundSegment as as, _normalizeAngle as at, getRtlAdapter as au, overrideTextDirection as av, _textX as aw, restoreTextDirection as ax, noop as ay, distanceBetweenPoints as az, isArray as b, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, defined as h, isObject as i, isNullOrUndef as j, toPercentage as k, listenArrayEvents as l, toDimension as m, formatNumber as n, _angleBetween as o, isNumber as p, _limitValue as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _lookupByKey as w, getRelativePosition as x, _isPointInArea as y, _rlookupByKey as z };\n","/*!\n * Chart.js v3.5.1\n * https://www.chartjs.org\n * (c) 2021 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as color, d as defaults, i as isObject, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as defined, s as sign, j as isNullOrUndef, _ as _arrayUnique, t as toRadians, k as toPercentage, m as toDimension, T as TAU, n as formatNumber, o as _angleBetween, H as HALF_PI, P as PI, p as isNumber, q as _limitValue, w as _lookupByKey, x as getRelativePosition$1, y as _isPointInArea, z as _rlookupByKey, A as toPadding, B as each, C as getMaximumSize, D as _getParentNode, E as readUsedSize, F as throttled, G as supportsEventListenerOptions, I as _isDomSupported, J as log10, K as _factorize, L as finiteOrDefault, M as callback, N as _addGrace, O as toDegrees, Q as _measureText, R as _int16Range, S as _alignPixel, U as clipArea, V as renderText, W as unclipArea, X as toFont, Y as _toLeftRightCenter, Z as _alignStartEnd, $ as overrides, a0 as merge, a1 as _capitalize, a2 as descriptors, a3 as isFunction, a4 as _attachContext, a5 as _createResolver, a6 as _descriptors, a7 as mergeIf, a8 as uid, a9 as debounce, aa as retinaScale, ab as clearCanvas, ac as setsEqual, ad as _elementsEqual, ae as getAngleFromPoint, af as _readValueToProps, ag as _updateBezierControlPoints, ah as _computeSegments, ai as _boundSegments, aj as _steppedInterpolation, ak as _bezierInterpolation, al as _pointInLine, am as _steppedLineTo, an as _bezierCurveTo, ao as drawPoint, ap as addRoundedRectPath, aq as toTRBL, ar as toTRBLCorners, as as _boundSegment, at as _normalizeAngle, au as getRtlAdapter, av as overrideTextDirection, aw as _textX, ax as restoreTextDirection, ay as noop, az as distanceBetweenPoints, aA as _setMinAndMaxByKey, aB as niceNum, aC as almostWhole, aD as almostEquals, aE as _decimalPlaces, aF as _longestText, aG as _filterBetween, aH as _lookup } from './chunks/helpers.segment.js';\nexport { d as defaults } from './chunks/helpers.segment.js';\n\nclass Animator {\n  constructor() {\n    this._request = null;\n    this._charts = new Map();\n    this._running = false;\n    this._lastDate = undefined;\n  }\n  _notify(chart, anims, date, type) {\n    const callbacks = anims.listeners[type];\n    const numSteps = anims.duration;\n    callbacks.forEach(fn => fn({\n      chart,\n      initial: anims.initial,\n      numSteps,\n      currentStep: Math.min(date - anims.start, numSteps)\n    }));\n  }\n  _refresh() {\n    const me = this;\n    if (me._request) {\n      return;\n    }\n    me._running = true;\n    me._request = requestAnimFrame.call(window, () => {\n      me._update();\n      me._request = null;\n      if (me._running) {\n        me._refresh();\n      }\n    });\n  }\n  _update(date = Date.now()) {\n    const me = this;\n    let remaining = 0;\n    me._charts.forEach((anims, chart) => {\n      if (!anims.running || !anims.items.length) {\n        return;\n      }\n      const items = anims.items;\n      let i = items.length - 1;\n      let draw = false;\n      let item;\n      for (; i >= 0; --i) {\n        item = items[i];\n        if (item._active) {\n          if (item._total > anims.duration) {\n            anims.duration = item._total;\n          }\n          item.tick(date);\n          draw = true;\n        } else {\n          items[i] = items[items.length - 1];\n          items.pop();\n        }\n      }\n      if (draw) {\n        chart.draw();\n        me._notify(chart, anims, date, 'progress');\n      }\n      if (!items.length) {\n        anims.running = false;\n        me._notify(chart, anims, date, 'complete');\n        anims.initial = false;\n      }\n      remaining += items.length;\n    });\n    me._lastDate = date;\n    if (remaining === 0) {\n      me._running = false;\n    }\n  }\n  _getAnims(chart) {\n    const charts = this._charts;\n    let anims = charts.get(chart);\n    if (!anims) {\n      anims = {\n        running: false,\n        initial: true,\n        items: [],\n        listeners: {\n          complete: [],\n          progress: []\n        }\n      };\n      charts.set(chart, anims);\n    }\n    return anims;\n  }\n  listen(chart, event, cb) {\n    this._getAnims(chart).listeners[event].push(cb);\n  }\n  add(chart, items) {\n    if (!items || !items.length) {\n      return;\n    }\n    this._getAnims(chart).items.push(...items);\n  }\n  has(chart) {\n    return this._getAnims(chart).items.length > 0;\n  }\n  start(chart) {\n    const anims = this._charts.get(chart);\n    if (!anims) {\n      return;\n    }\n    anims.running = true;\n    anims.start = Date.now();\n    anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0);\n    this._refresh();\n  }\n  running(chart) {\n    if (!this._running) {\n      return false;\n    }\n    const anims = this._charts.get(chart);\n    if (!anims || !anims.running || !anims.items.length) {\n      return false;\n    }\n    return true;\n  }\n  stop(chart) {\n    const anims = this._charts.get(chart);\n    if (!anims || !anims.items.length) {\n      return;\n    }\n    const items = anims.items;\n    let i = items.length - 1;\n    for (; i >= 0; --i) {\n      items[i].cancel();\n    }\n    anims.items = [];\n    this._notify(chart, anims, Date.now(), 'complete');\n  }\n  remove(chart) {\n    return this._charts.delete(chart);\n  }\n}\nvar animator = new Animator();\n\nconst transparent = 'transparent';\nconst interpolators = {\n  boolean(from, to, factor) {\n    return factor > 0.5 ? to : from;\n  },\n  color(from, to, factor) {\n    const c0 = color(from || transparent);\n    const c1 = c0.valid && color(to || transparent);\n    return c1 && c1.valid\n      ? c1.mix(c0, factor).hexString()\n      : to;\n  },\n  number(from, to, factor) {\n    return from + (to - from) * factor;\n  }\n};\nclass Animation {\n  constructor(cfg, target, prop, to) {\n    const currentValue = target[prop];\n    to = resolve([cfg.to, to, currentValue, cfg.from]);\n    const from = resolve([cfg.from, currentValue, to]);\n    this._active = true;\n    this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n    this._easing = effects[cfg.easing] || effects.linear;\n    this._start = Math.floor(Date.now() + (cfg.delay || 0));\n    this._duration = this._total = Math.floor(cfg.duration);\n    this._loop = !!cfg.loop;\n    this._target = target;\n    this._prop = prop;\n    this._from = from;\n    this._to = to;\n    this._promises = undefined;\n  }\n  active() {\n    return this._active;\n  }\n  update(cfg, to, date) {\n    const me = this;\n    if (me._active) {\n      me._notify(false);\n      const currentValue = me._target[me._prop];\n      const elapsed = date - me._start;\n      const remain = me._duration - elapsed;\n      me._start = date;\n      me._duration = Math.floor(Math.max(remain, cfg.duration));\n      me._total += elapsed;\n      me._loop = !!cfg.loop;\n      me._to = resolve([cfg.to, to, currentValue, cfg.from]);\n      me._from = resolve([cfg.from, currentValue, to]);\n    }\n  }\n  cancel() {\n    const me = this;\n    if (me._active) {\n      me.tick(Date.now());\n      me._active = false;\n      me._notify(false);\n    }\n  }\n  tick(date) {\n    const me = this;\n    const elapsed = date - me._start;\n    const duration = me._duration;\n    const prop = me._prop;\n    const from = me._from;\n    const loop = me._loop;\n    const to = me._to;\n    let factor;\n    me._active = from !== to && (loop || (elapsed < duration));\n    if (!me._active) {\n      me._target[prop] = to;\n      me._notify(true);\n      return;\n    }\n    if (elapsed < 0) {\n      me._target[prop] = from;\n      return;\n    }\n    factor = (elapsed / duration) % 2;\n    factor = loop && factor > 1 ? 2 - factor : factor;\n    factor = me._easing(Math.min(1, Math.max(0, factor)));\n    me._target[prop] = me._fn(from, to, factor);\n  }\n  wait() {\n    const promises = this._promises || (this._promises = []);\n    return new Promise((res, rej) => {\n      promises.push({res, rej});\n    });\n  }\n  _notify(resolved) {\n    const method = resolved ? 'res' : 'rej';\n    const promises = this._promises || [];\n    for (let i = 0; i < promises.length; i++) {\n      promises[i][method]();\n    }\n  }\n}\n\nconst numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nconst colors = ['color', 'borderColor', 'backgroundColor'];\ndefaults.set('animation', {\n  delay: undefined,\n  duration: 1000,\n  easing: 'easeOutQuart',\n  fn: undefined,\n  from: undefined,\n  loop: undefined,\n  to: undefined,\n  type: undefined,\n});\nconst animationOptions = Object.keys(defaults.animation);\ndefaults.describe('animation', {\n  _fallback: false,\n  _indexable: false,\n  _scriptable: (name) => name !== 'onProgress' && name !== 'onComplete' && name !== 'fn',\n});\ndefaults.set('animations', {\n  colors: {\n    type: 'color',\n    properties: colors\n  },\n  numbers: {\n    type: 'number',\n    properties: numbers\n  },\n});\ndefaults.describe('animations', {\n  _fallback: 'animation',\n});\ndefaults.set('transitions', {\n  active: {\n    animation: {\n      duration: 400\n    }\n  },\n  resize: {\n    animation: {\n      duration: 0\n    }\n  },\n  show: {\n    animations: {\n      colors: {\n        from: 'transparent'\n      },\n      visible: {\n        type: 'boolean',\n        duration: 0\n      },\n    }\n  },\n  hide: {\n    animations: {\n      colors: {\n        to: 'transparent'\n      },\n      visible: {\n        type: 'boolean',\n        easing: 'linear',\n        fn: v => v | 0\n      },\n    }\n  }\n});\nclass Animations {\n  constructor(chart, config) {\n    this._chart = chart;\n    this._properties = new Map();\n    this.configure(config);\n  }\n  configure(config) {\n    if (!isObject(config)) {\n      return;\n    }\n    const animatedProps = this._properties;\n    Object.getOwnPropertyNames(config).forEach(key => {\n      const cfg = config[key];\n      if (!isObject(cfg)) {\n        return;\n      }\n      const resolved = {};\n      for (const option of animationOptions) {\n        resolved[option] = cfg[option];\n      }\n      (isArray(cfg.properties) && cfg.properties || [key]).forEach((prop) => {\n        if (prop === key || !animatedProps.has(prop)) {\n          animatedProps.set(prop, resolved);\n        }\n      });\n    });\n  }\n  _animateOptions(target, values) {\n    const newOptions = values.options;\n    const options = resolveTargetOptions(target, newOptions);\n    if (!options) {\n      return [];\n    }\n    const animations = this._createAnimations(options, newOptions);\n    if (newOptions.$shared) {\n      awaitAll(target.options.$animations, newOptions).then(() => {\n        target.options = newOptions;\n      }, () => {\n      });\n    }\n    return animations;\n  }\n  _createAnimations(target, values) {\n    const animatedProps = this._properties;\n    const animations = [];\n    const running = target.$animations || (target.$animations = {});\n    const props = Object.keys(values);\n    const date = Date.now();\n    let i;\n    for (i = props.length - 1; i >= 0; --i) {\n      const prop = props[i];\n      if (prop.charAt(0) === '$') {\n        continue;\n      }\n      if (prop === 'options') {\n        animations.push(...this._animateOptions(target, values));\n        continue;\n      }\n      const value = values[prop];\n      let animation = running[prop];\n      const cfg = animatedProps.get(prop);\n      if (animation) {\n        if (cfg && animation.active()) {\n          animation.update(cfg, value, date);\n          continue;\n        } else {\n          animation.cancel();\n        }\n      }\n      if (!cfg || !cfg.duration) {\n        target[prop] = value;\n        continue;\n      }\n      running[prop] = animation = new Animation(cfg, target, prop, value);\n      animations.push(animation);\n    }\n    return animations;\n  }\n  update(target, values) {\n    if (this._properties.size === 0) {\n      Object.assign(target, values);\n      return;\n    }\n    const animations = this._createAnimations(target, values);\n    if (animations.length) {\n      animator.add(this._chart, animations);\n      return true;\n    }\n  }\n}\nfunction awaitAll(animations, properties) {\n  const running = [];\n  const keys = Object.keys(properties);\n  for (let i = 0; i < keys.length; i++) {\n    const anim = animations[keys[i]];\n    if (anim && anim.active()) {\n      running.push(anim.wait());\n    }\n  }\n  return Promise.all(running);\n}\nfunction resolveTargetOptions(target, newOptions) {\n  if (!newOptions) {\n    return;\n  }\n  let options = target.options;\n  if (!options) {\n    target.options = newOptions;\n    return;\n  }\n  if (options.$shared) {\n    target.options = options = Object.assign({}, options, {$shared: false, $animations: {}});\n  }\n  return options;\n}\n\nfunction scaleClip(scale, allowedOverflow) {\n  const opts = scale && scale.options || {};\n  const reverse = opts.reverse;\n  const min = opts.min === undefined ? allowedOverflow : 0;\n  const max = opts.max === undefined ? allowedOverflow : 0;\n  return {\n    start: reverse ? max : min,\n    end: reverse ? min : max\n  };\n}\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n  if (allowedOverflow === false) {\n    return false;\n  }\n  const x = scaleClip(xScale, allowedOverflow);\n  const y = scaleClip(yScale, allowedOverflow);\n  return {\n    top: y.end,\n    right: x.end,\n    bottom: y.start,\n    left: x.start\n  };\n}\nfunction toClip(value) {\n  let t, r, b, l;\n  if (isObject(value)) {\n    t = value.top;\n    r = value.right;\n    b = value.bottom;\n    l = value.left;\n  } else {\n    t = r = b = l = value;\n  }\n  return {\n    top: t,\n    right: r,\n    bottom: b,\n    left: l,\n    disabled: value === false\n  };\n}\nfunction getSortedDatasetIndices(chart, filterVisible) {\n  const keys = [];\n  const metasets = chart._getSortedDatasetMetas(filterVisible);\n  let i, ilen;\n  for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n    keys.push(metasets[i].index);\n  }\n  return keys;\n}\nfunction applyStack(stack, value, dsIndex, options) {\n  const keys = stack.keys;\n  const singleMode = options.mode === 'single';\n  let i, ilen, datasetIndex, otherValue;\n  if (value === null) {\n    return;\n  }\n  for (i = 0, ilen = keys.length; i < ilen; ++i) {\n    datasetIndex = +keys[i];\n    if (datasetIndex === dsIndex) {\n      if (options.all) {\n        continue;\n      }\n      break;\n    }\n    otherValue = stack.values[datasetIndex];\n    if (isNumberFinite(otherValue) && (singleMode || (value === 0 || sign(value) === sign(otherValue)))) {\n      value += otherValue;\n    }\n  }\n  return value;\n}\nfunction convertObjectDataToArray(data) {\n  const keys = Object.keys(data);\n  const adata = new Array(keys.length);\n  let i, ilen, key;\n  for (i = 0, ilen = keys.length; i < ilen; ++i) {\n    key = keys[i];\n    adata[i] = {\n      x: key,\n      y: data[key]\n    };\n  }\n  return adata;\n}\nfunction isStacked(scale, meta) {\n  const stacked = scale && scale.options.stacked;\n  return stacked || (stacked === undefined && meta.stack !== undefined);\n}\nfunction getStackKey(indexScale, valueScale, meta) {\n  return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\nfunction getUserBounds(scale) {\n  const {min, max, minDefined, maxDefined} = scale.getUserBounds();\n  return {\n    min: minDefined ? min : Number.NEGATIVE_INFINITY,\n    max: maxDefined ? max : Number.POSITIVE_INFINITY\n  };\n}\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n  const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n  return subStack[indexValue] || (subStack[indexValue] = {});\n}\nfunction getLastIndexInStack(stack, vScale, positive) {\n  for (const meta of vScale.getMatchingVisibleMetas('bar').reverse()) {\n    const value = stack[meta.index];\n    if ((positive && value > 0) || (!positive && value < 0)) {\n      return meta.index;\n    }\n  }\n  return null;\n}\nfunction updateStacks(controller, parsed) {\n  const {chart, _cachedMeta: meta} = controller;\n  const stacks = chart._stacks || (chart._stacks = {});\n  const {iScale, vScale, index: datasetIndex} = meta;\n  const iAxis = iScale.axis;\n  const vAxis = vScale.axis;\n  const key = getStackKey(iScale, vScale, meta);\n  const ilen = parsed.length;\n  let stack;\n  for (let i = 0; i < ilen; ++i) {\n    const item = parsed[i];\n    const {[iAxis]: index, [vAxis]: value} = item;\n    const itemStacks = item._stacks || (item._stacks = {});\n    stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n    stack[datasetIndex] = value;\n    stack._top = getLastIndexInStack(stack, vScale, true);\n    stack._bottom = getLastIndexInStack(stack, vScale, false);\n  }\n}\nfunction getFirstScaleId(chart, axis) {\n  const scales = chart.scales;\n  return Object.keys(scales).filter(key => scales[key].axis === axis).shift();\n}\nfunction createDatasetContext(parent, index) {\n  return Object.assign(Object.create(parent),\n    {\n      active: false,\n      dataset: undefined,\n      datasetIndex: index,\n      index,\n      mode: 'default',\n      type: 'dataset'\n    }\n  );\n}\nfunction createDataContext(parent, index, element) {\n  return Object.assign(Object.create(parent), {\n    active: false,\n    dataIndex: index,\n    parsed: undefined,\n    raw: undefined,\n    element,\n    index,\n    mode: 'default',\n    type: 'data'\n  });\n}\nfunction clearStacks(meta, items) {\n  const datasetIndex = meta.controller.index;\n  const axis = meta.vScale && meta.vScale.axis;\n  if (!axis) {\n    return;\n  }\n  items = items || meta._parsed;\n  for (const parsed of items) {\n    const stacks = parsed._stacks;\n    if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n      return;\n    }\n    delete stacks[axis][datasetIndex];\n  }\n}\nconst isDirectUpdateMode = (mode) => mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached);\nclass DatasetController {\n  constructor(chart, datasetIndex) {\n    this.chart = chart;\n    this._ctx = chart.ctx;\n    this.index = datasetIndex;\n    this._cachedDataOpts = {};\n    this._cachedMeta = this.getMeta();\n    this._type = this._cachedMeta.type;\n    this.options = undefined;\n    this._parsing = false;\n    this._data = undefined;\n    this._objectData = undefined;\n    this._sharedOptions = undefined;\n    this._drawStart = undefined;\n    this._drawCount = undefined;\n    this.enableOptionSharing = false;\n    this.$context = undefined;\n    this._syncList = [];\n    this.initialize();\n  }\n  initialize() {\n    const me = this;\n    const meta = me._cachedMeta;\n    me.configure();\n    me.linkScales();\n    meta._stacked = isStacked(meta.vScale, meta);\n    me.addElements();\n  }\n  updateIndex(datasetIndex) {\n    if (this.index !== datasetIndex) {\n      clearStacks(this._cachedMeta);\n    }\n    this.index = datasetIndex;\n  }\n  linkScales() {\n    const me = this;\n    const chart = me.chart;\n    const meta = me._cachedMeta;\n    const dataset = me.getDataset();\n    const chooseId = (axis, x, y, r) => axis === 'x' ? x : axis === 'r' ? r : y;\n    const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n    const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n    const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n    const indexAxis = meta.indexAxis;\n    const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n    const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n    meta.xScale = me.getScaleForId(xid);\n    meta.yScale = me.getScaleForId(yid);\n    meta.rScale = me.getScaleForId(rid);\n    meta.iScale = me.getScaleForId(iid);\n    meta.vScale = me.getScaleForId(vid);\n  }\n  getDataset() {\n    return this.chart.data.datasets[this.index];\n  }\n  getMeta() {\n    return this.chart.getDatasetMeta(this.index);\n  }\n  getScaleForId(scaleID) {\n    return this.chart.scales[scaleID];\n  }\n  _getOtherScale(scale) {\n    const meta = this._cachedMeta;\n    return scale === meta.iScale\n      ? meta.vScale\n      : meta.iScale;\n  }\n  reset() {\n    this._update('reset');\n  }\n  _destroy() {\n    const meta = this._cachedMeta;\n    if (this._data) {\n      unlistenArrayEvents(this._data, this);\n    }\n    if (meta._stacked) {\n      clearStacks(meta);\n    }\n  }\n  _dataCheck() {\n    const me = this;\n    const dataset = me.getDataset();\n    const data = dataset.data || (dataset.data = []);\n    const _data = me._data;\n    if (isObject(data)) {\n      me._data = convertObjectDataToArray(data);\n    } else if (_data !== data) {\n      if (_data) {\n        unlistenArrayEvents(_data, me);\n        const meta = me._cachedMeta;\n        clearStacks(meta);\n        meta._parsed = [];\n      }\n      if (data && Object.isExtensible(data)) {\n        listenArrayEvents(data, me);\n      }\n      me._syncList = [];\n      me._data = data;\n    }\n  }\n  addElements() {\n    const me = this;\n    const meta = me._cachedMeta;\n    me._dataCheck();\n    if (me.datasetElementType) {\n      meta.dataset = new me.datasetElementType();\n    }\n  }\n  buildOrUpdateElements(resetNewElements) {\n    const me = this;\n    const meta = me._cachedMeta;\n    const dataset = me.getDataset();\n    let stackChanged = false;\n    me._dataCheck();\n    const oldStacked = meta._stacked;\n    meta._stacked = isStacked(meta.vScale, meta);\n    if (meta.stack !== dataset.stack) {\n      stackChanged = true;\n      clearStacks(meta);\n      meta.stack = dataset.stack;\n    }\n    me._resyncElements(resetNewElements);\n    if (stackChanged || oldStacked !== meta._stacked) {\n      updateStacks(me, meta._parsed);\n    }\n  }\n  configure() {\n    const me = this;\n    const config = me.chart.config;\n    const scopeKeys = config.datasetScopeKeys(me._type);\n    const scopes = config.getOptionScopes(me.getDataset(), scopeKeys, true);\n    me.options = config.createResolver(scopes, me.getContext());\n    me._parsing = me.options.parsing;\n  }\n  parse(start, count) {\n    const me = this;\n    const {_cachedMeta: meta, _data: data} = me;\n    const {iScale, _stacked} = meta;\n    const iAxis = iScale.axis;\n    let sorted = start === 0 && count === data.length ? true : meta._sorted;\n    let prev = start > 0 && meta._parsed[start - 1];\n    let i, cur, parsed;\n    if (me._parsing === false) {\n      meta._parsed = data;\n      meta._sorted = true;\n      parsed = data;\n    } else {\n      if (isArray(data[start])) {\n        parsed = me.parseArrayData(meta, data, start, count);\n      } else if (isObject(data[start])) {\n        parsed = me.parseObjectData(meta, data, start, count);\n      } else {\n        parsed = me.parsePrimitiveData(meta, data, start, count);\n      }\n      const isNotInOrderComparedToPrev = () => cur[iAxis] === null || (prev && cur[iAxis] < prev[iAxis]);\n      for (i = 0; i < count; ++i) {\n        meta._parsed[i + start] = cur = parsed[i];\n        if (sorted) {\n          if (isNotInOrderComparedToPrev()) {\n            sorted = false;\n          }\n          prev = cur;\n        }\n      }\n      meta._sorted = sorted;\n    }\n    if (_stacked) {\n      updateStacks(me, parsed);\n    }\n  }\n  parsePrimitiveData(meta, data, start, count) {\n    const {iScale, vScale} = meta;\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const labels = iScale.getLabels();\n    const singleScale = iScale === vScale;\n    const parsed = new Array(count);\n    let i, ilen, index;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      parsed[i] = {\n        [iAxis]: singleScale || iScale.parse(labels[index], index),\n        [vAxis]: vScale.parse(data[index], index)\n      };\n    }\n    return parsed;\n  }\n  parseArrayData(meta, data, start, count) {\n    const {xScale, yScale} = meta;\n    const parsed = new Array(count);\n    let i, ilen, index, item;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      item = data[index];\n      parsed[i] = {\n        x: xScale.parse(item[0], index),\n        y: yScale.parse(item[1], index)\n      };\n    }\n    return parsed;\n  }\n  parseObjectData(meta, data, start, count) {\n    const {xScale, yScale} = meta;\n    const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n    const parsed = new Array(count);\n    let i, ilen, index, item;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      item = data[index];\n      parsed[i] = {\n        x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n        y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n      };\n    }\n    return parsed;\n  }\n  getParsed(index) {\n    return this._cachedMeta._parsed[index];\n  }\n  getDataElement(index) {\n    return this._cachedMeta.data[index];\n  }\n  applyStack(scale, parsed, mode) {\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const value = parsed[scale.axis];\n    const stack = {\n      keys: getSortedDatasetIndices(chart, true),\n      values: parsed._stacks[scale.axis]\n    };\n    return applyStack(stack, value, meta.index, {mode});\n  }\n  updateRangeFromParsed(range, scale, parsed, stack) {\n    const parsedValue = parsed[scale.axis];\n    let value = parsedValue === null ? NaN : parsedValue;\n    const values = stack && parsed._stacks[scale.axis];\n    if (stack && values) {\n      stack.values = values;\n      range.min = Math.min(range.min, value);\n      range.max = Math.max(range.max, value);\n      value = applyStack(stack, parsedValue, this._cachedMeta.index, {all: true});\n    }\n    range.min = Math.min(range.min, value);\n    range.max = Math.max(range.max, value);\n  }\n  getMinMax(scale, canStack) {\n    const me = this;\n    const meta = me._cachedMeta;\n    const _parsed = meta._parsed;\n    const sorted = meta._sorted && scale === meta.iScale;\n    const ilen = _parsed.length;\n    const otherScale = me._getOtherScale(scale);\n    const stack = canStack && meta._stacked && {keys: getSortedDatasetIndices(me.chart, true), values: null};\n    const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n    const {min: otherMin, max: otherMax} = getUserBounds(otherScale);\n    let i, value, parsed, otherValue;\n    function _skip() {\n      parsed = _parsed[i];\n      value = parsed[scale.axis];\n      otherValue = parsed[otherScale.axis];\n      return !isNumberFinite(value) || otherMin > otherValue || otherMax < otherValue;\n    }\n    for (i = 0; i < ilen; ++i) {\n      if (_skip()) {\n        continue;\n      }\n      me.updateRangeFromParsed(range, scale, parsed, stack);\n      if (sorted) {\n        break;\n      }\n    }\n    if (sorted) {\n      for (i = ilen - 1; i >= 0; --i) {\n        if (_skip()) {\n          continue;\n        }\n        me.updateRangeFromParsed(range, scale, parsed, stack);\n        break;\n      }\n    }\n    return range;\n  }\n  getAllParsedValues(scale) {\n    const parsed = this._cachedMeta._parsed;\n    const values = [];\n    let i, ilen, value;\n    for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n      value = parsed[i][scale.axis];\n      if (isNumberFinite(value)) {\n        values.push(value);\n      }\n    }\n    return values;\n  }\n  getMaxOverflow() {\n    return false;\n  }\n  getLabelAndValue(index) {\n    const me = this;\n    const meta = me._cachedMeta;\n    const iScale = meta.iScale;\n    const vScale = meta.vScale;\n    const parsed = me.getParsed(index);\n    return {\n      label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n      value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n    };\n  }\n  _update(mode) {\n    const me = this;\n    const meta = me._cachedMeta;\n    me.configure();\n    me._cachedDataOpts = {};\n    me.update(mode || 'default');\n    meta._clip = toClip(valueOrDefault(me.options.clip, defaultClip(meta.xScale, meta.yScale, me.getMaxOverflow())));\n  }\n  update(mode) {}\n  draw() {\n    const me = this;\n    const ctx = me._ctx;\n    const chart = me.chart;\n    const meta = me._cachedMeta;\n    const elements = meta.data || [];\n    const area = chart.chartArea;\n    const active = [];\n    const start = me._drawStart || 0;\n    const count = me._drawCount || (elements.length - start);\n    let i;\n    if (meta.dataset) {\n      meta.dataset.draw(ctx, area, start, count);\n    }\n    for (i = start; i < start + count; ++i) {\n      const element = elements[i];\n      if (element.hidden) {\n        continue;\n      }\n      if (element.active) {\n        active.push(element);\n      } else {\n        element.draw(ctx, area);\n      }\n    }\n    for (i = 0; i < active.length; ++i) {\n      active[i].draw(ctx, area);\n    }\n  }\n  getStyle(index, active) {\n    const mode = active ? 'active' : 'default';\n    return index === undefined && this._cachedMeta.dataset\n      ? this.resolveDatasetElementOptions(mode)\n      : this.resolveDataElementOptions(index || 0, mode);\n  }\n  getContext(index, active, mode) {\n    const me = this;\n    const dataset = me.getDataset();\n    let context;\n    if (index >= 0 && index < me._cachedMeta.data.length) {\n      const element = me._cachedMeta.data[index];\n      context = element.$context ||\n        (element.$context = createDataContext(me.getContext(), index, element));\n      context.parsed = me.getParsed(index);\n      context.raw = dataset.data[index];\n      context.index = context.dataIndex = index;\n    } else {\n      context = me.$context ||\n        (me.$context = createDatasetContext(me.chart.getContext(), me.index));\n      context.dataset = dataset;\n      context.index = context.datasetIndex = me.index;\n    }\n    context.active = !!active;\n    context.mode = mode;\n    return context;\n  }\n  resolveDatasetElementOptions(mode) {\n    return this._resolveElementOptions(this.datasetElementType.id, mode);\n  }\n  resolveDataElementOptions(index, mode) {\n    return this._resolveElementOptions(this.dataElementType.id, mode, index);\n  }\n  _resolveElementOptions(elementType, mode = 'default', index) {\n    const me = this;\n    const active = mode === 'active';\n    const cache = me._cachedDataOpts;\n    const cacheKey = elementType + '-' + mode;\n    const cached = cache[cacheKey];\n    const sharing = me.enableOptionSharing && defined(index);\n    if (cached) {\n      return cloneIfNotShared(cached, sharing);\n    }\n    const config = me.chart.config;\n    const scopeKeys = config.datasetElementScopeKeys(me._type, elementType);\n    const prefixes = active ? [`${elementType}Hover`, 'hover', elementType, ''] : [elementType, ''];\n    const scopes = config.getOptionScopes(me.getDataset(), scopeKeys);\n    const names = Object.keys(defaults.elements[elementType]);\n    const context = () => me.getContext(index, active);\n    const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n    if (values.$shared) {\n      values.$shared = sharing;\n      cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n    }\n    return values;\n  }\n  _resolveAnimations(index, transition, active) {\n    const me = this;\n    const chart = me.chart;\n    const cache = me._cachedDataOpts;\n    const cacheKey = `animation-${transition}`;\n    const cached = cache[cacheKey];\n    if (cached) {\n      return cached;\n    }\n    let options;\n    if (chart.options.animation !== false) {\n      const config = me.chart.config;\n      const scopeKeys = config.datasetAnimationScopeKeys(me._type, transition);\n      const scopes = config.getOptionScopes(me.getDataset(), scopeKeys);\n      options = config.createResolver(scopes, me.getContext(index, active, transition));\n    }\n    const animations = new Animations(chart, options && options.animations);\n    if (options && options._cacheable) {\n      cache[cacheKey] = Object.freeze(animations);\n    }\n    return animations;\n  }\n  getSharedOptions(options) {\n    if (!options.$shared) {\n      return;\n    }\n    return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n  }\n  includeOptions(mode, sharedOptions) {\n    return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n  }\n  updateElement(element, index, properties, mode) {\n    if (isDirectUpdateMode(mode)) {\n      Object.assign(element, properties);\n    } else {\n      this._resolveAnimations(index, mode).update(element, properties);\n    }\n  }\n  updateSharedOptions(sharedOptions, mode, newOptions) {\n    if (sharedOptions && !isDirectUpdateMode(mode)) {\n      this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n    }\n  }\n  _setStyle(element, index, mode, active) {\n    element.active = active;\n    const options = this.getStyle(index, active);\n    this._resolveAnimations(index, mode, active).update(element, {\n      options: (!active && this.getSharedOptions(options)) || options\n    });\n  }\n  removeHoverStyle(element, datasetIndex, index) {\n    this._setStyle(element, index, 'active', false);\n  }\n  setHoverStyle(element, datasetIndex, index) {\n    this._setStyle(element, index, 'active', true);\n  }\n  _removeDatasetHoverStyle() {\n    const element = this._cachedMeta.dataset;\n    if (element) {\n      this._setStyle(element, undefined, 'active', false);\n    }\n  }\n  _setDatasetHoverStyle() {\n    const element = this._cachedMeta.dataset;\n    if (element) {\n      this._setStyle(element, undefined, 'active', true);\n    }\n  }\n  _resyncElements(resetNewElements) {\n    const me = this;\n    const data = me._data;\n    const elements = me._cachedMeta.data;\n    for (const [method, arg1, arg2] of me._syncList) {\n      me[method](arg1, arg2);\n    }\n    me._syncList = [];\n    const numMeta = elements.length;\n    const numData = data.length;\n    const count = Math.min(numData, numMeta);\n    if (count) {\n      me.parse(0, count);\n    }\n    if (numData > numMeta) {\n      me._insertElements(numMeta, numData - numMeta, resetNewElements);\n    } else if (numData < numMeta) {\n      me._removeElements(numData, numMeta - numData);\n    }\n  }\n  _insertElements(start, count, resetNewElements = true) {\n    const me = this;\n    const meta = me._cachedMeta;\n    const data = meta.data;\n    const end = start + count;\n    let i;\n    const move = (arr) => {\n      arr.length += count;\n      for (i = arr.length - 1; i >= end; i--) {\n        arr[i] = arr[i - count];\n      }\n    };\n    move(data);\n    for (i = start; i < end; ++i) {\n      data[i] = new me.dataElementType();\n    }\n    if (me._parsing) {\n      move(meta._parsed);\n    }\n    me.parse(start, count);\n    if (resetNewElements) {\n      me.updateElements(data, start, count, 'reset');\n    }\n  }\n  updateElements(element, start, count, mode) {}\n  _removeElements(start, count) {\n    const me = this;\n    const meta = me._cachedMeta;\n    if (me._parsing) {\n      const removed = meta._parsed.splice(start, count);\n      if (meta._stacked) {\n        clearStacks(meta, removed);\n      }\n    }\n    meta.data.splice(start, count);\n  }\n  _sync(args) {\n    if (this._parsing) {\n      this._syncList.push(args);\n    } else {\n      const [method, arg1, arg2] = args;\n      this[method](arg1, arg2);\n    }\n  }\n  _onDataPush() {\n    const count = arguments.length;\n    this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n  }\n  _onDataPop() {\n    this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n  }\n  _onDataShift() {\n    this._sync(['_removeElements', 0, 1]);\n  }\n  _onDataSplice(start, count) {\n    this._sync(['_removeElements', start, count]);\n    this._sync(['_insertElements', start, arguments.length - 2]);\n  }\n  _onDataUnshift() {\n    this._sync(['_insertElements', 0, arguments.length]);\n  }\n}\nDatasetController.defaults = {};\nDatasetController.prototype.datasetElementType = null;\nDatasetController.prototype.dataElementType = null;\n\nfunction getAllScaleValues(scale) {\n  if (!scale._cache.$bar) {\n    const metas = scale.getMatchingVisibleMetas('bar');\n    let values = [];\n    for (let i = 0, ilen = metas.length; i < ilen; i++) {\n      values = values.concat(metas[i].controller.getAllParsedValues(scale));\n    }\n    scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b));\n  }\n  return scale._cache.$bar;\n}\nfunction computeMinSampleSize(scale) {\n  const values = getAllScaleValues(scale);\n  let min = scale._length;\n  let i, ilen, curr, prev;\n  const updateMinAndPrev = () => {\n    if (curr === 32767 || curr === -32768) {\n      return;\n    }\n    if (defined(prev)) {\n      min = Math.min(min, Math.abs(curr - prev) || min);\n    }\n    prev = curr;\n  };\n  for (i = 0, ilen = values.length; i < ilen; ++i) {\n    curr = scale.getPixelForValue(values[i]);\n    updateMinAndPrev();\n  }\n  prev = undefined;\n  for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n    curr = scale.getPixelForTick(i);\n    updateMinAndPrev();\n  }\n  return min;\n}\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n  const thickness = options.barThickness;\n  let size, ratio;\n  if (isNullOrUndef(thickness)) {\n    size = ruler.min * options.categoryPercentage;\n    ratio = options.barPercentage;\n  } else {\n    size = thickness * stackCount;\n    ratio = 1;\n  }\n  return {\n    chunk: size / stackCount,\n    ratio,\n    start: ruler.pixels[index] - (size / 2)\n  };\n}\nfunction computeFlexCategoryTraits(index, ruler, options, stackCount) {\n  const pixels = ruler.pixels;\n  const curr = pixels[index];\n  let prev = index > 0 ? pixels[index - 1] : null;\n  let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n  const percent = options.categoryPercentage;\n  if (prev === null) {\n    prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n  }\n  if (next === null) {\n    next = curr + curr - prev;\n  }\n  const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n  const size = Math.abs(next - prev) / 2 * percent;\n  return {\n    chunk: size / stackCount,\n    ratio: options.barPercentage,\n    start\n  };\n}\nfunction parseFloatBar(entry, item, vScale, i) {\n  const startValue = vScale.parse(entry[0], i);\n  const endValue = vScale.parse(entry[1], i);\n  const min = Math.min(startValue, endValue);\n  const max = Math.max(startValue, endValue);\n  let barStart = min;\n  let barEnd = max;\n  if (Math.abs(min) > Math.abs(max)) {\n    barStart = max;\n    barEnd = min;\n  }\n  item[vScale.axis] = barEnd;\n  item._custom = {\n    barStart,\n    barEnd,\n    start: startValue,\n    end: endValue,\n    min,\n    max\n  };\n}\nfunction parseValue(entry, item, vScale, i) {\n  if (isArray(entry)) {\n    parseFloatBar(entry, item, vScale, i);\n  } else {\n    item[vScale.axis] = vScale.parse(entry, i);\n  }\n  return item;\n}\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n  const iScale = meta.iScale;\n  const vScale = meta.vScale;\n  const labels = iScale.getLabels();\n  const singleScale = iScale === vScale;\n  const parsed = [];\n  let i, ilen, item, entry;\n  for (i = start, ilen = start + count; i < ilen; ++i) {\n    entry = data[i];\n    item = {};\n    item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n    parsed.push(parseValue(entry, item, vScale, i));\n  }\n  return parsed;\n}\nfunction isFloatBar(custom) {\n  return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\nfunction barSign(size, vScale, actualBase) {\n  if (size !== 0) {\n    return sign(size);\n  }\n  return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\nfunction borderProps(properties) {\n  let reverse, start, end, top, bottom;\n  if (properties.horizontal) {\n    reverse = properties.base > properties.x;\n    start = 'left';\n    end = 'right';\n  } else {\n    reverse = properties.base < properties.y;\n    start = 'bottom';\n    end = 'top';\n  }\n  if (reverse) {\n    top = 'end';\n    bottom = 'start';\n  } else {\n    top = 'start';\n    bottom = 'end';\n  }\n  return {start, end, reverse, top, bottom};\n}\nfunction setBorderSkipped(properties, options, stack, index) {\n  let edge = options.borderSkipped;\n  const res = {};\n  if (!edge) {\n    properties.borderSkipped = res;\n    return;\n  }\n  const {start, end, reverse, top, bottom} = borderProps(properties);\n  if (edge === 'middle' && stack) {\n    properties.enableBorderRadius = true;\n    if ((stack._top || 0) === index) {\n      edge = top;\n    } else if ((stack._bottom || 0) === index) {\n      edge = bottom;\n    } else {\n      res[parseEdge(bottom, start, end, reverse)] = true;\n      edge = top;\n    }\n  }\n  res[parseEdge(edge, start, end, reverse)] = true;\n  properties.borderSkipped = res;\n}\nfunction parseEdge(edge, a, b, reverse) {\n  if (reverse) {\n    edge = swap(edge, a, b);\n    edge = startEnd(edge, b, a);\n  } else {\n    edge = startEnd(edge, a, b);\n  }\n  return edge;\n}\nfunction swap(orig, v1, v2) {\n  return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\nfunction startEnd(v, start, end) {\n  return v === 'start' ? start : v === 'end' ? end : v;\n}\nclass BarController extends DatasetController {\n  parsePrimitiveData(meta, data, start, count) {\n    return parseArrayOrPrimitive(meta, data, start, count);\n  }\n  parseArrayData(meta, data, start, count) {\n    return parseArrayOrPrimitive(meta, data, start, count);\n  }\n  parseObjectData(meta, data, start, count) {\n    const {iScale, vScale} = meta;\n    const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n    const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n    const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n    const parsed = [];\n    let i, ilen, item, obj;\n    for (i = start, ilen = start + count; i < ilen; ++i) {\n      obj = data[i];\n      item = {};\n      item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n      parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n    }\n    return parsed;\n  }\n  updateRangeFromParsed(range, scale, parsed, stack) {\n    super.updateRangeFromParsed(range, scale, parsed, stack);\n    const custom = parsed._custom;\n    if (custom && scale === this._cachedMeta.vScale) {\n      range.min = Math.min(range.min, custom.min);\n      range.max = Math.max(range.max, custom.max);\n    }\n  }\n  getMaxOverflow() {\n    return 0;\n  }\n  getLabelAndValue(index) {\n    const me = this;\n    const meta = me._cachedMeta;\n    const {iScale, vScale} = meta;\n    const parsed = me.getParsed(index);\n    const custom = parsed._custom;\n    const value = isFloatBar(custom)\n      ? '[' + custom.start + ', ' + custom.end + ']'\n      : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n    return {\n      label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n      value\n    };\n  }\n  initialize() {\n    const me = this;\n    me.enableOptionSharing = true;\n    super.initialize();\n    const meta = me._cachedMeta;\n    meta.stack = me.getDataset().stack;\n  }\n  update(mode) {\n    const me = this;\n    const meta = me._cachedMeta;\n    me.updateElements(meta.data, 0, meta.data.length, mode);\n  }\n  updateElements(bars, start, count, mode) {\n    const me = this;\n    const reset = mode === 'reset';\n    const {index, _cachedMeta: {vScale}} = me;\n    const base = vScale.getBasePixel();\n    const horizontal = vScale.isHorizontal();\n    const ruler = me._getRuler();\n    const firstOpts = me.resolveDataElementOptions(start, mode);\n    const sharedOptions = me.getSharedOptions(firstOpts);\n    const includeOptions = me.includeOptions(mode, sharedOptions);\n    me.updateSharedOptions(sharedOptions, mode, firstOpts);\n    for (let i = start; i < start + count; i++) {\n      const parsed = me.getParsed(i);\n      const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {base, head: base} : me._calculateBarValuePixels(i);\n      const ipixels = me._calculateBarIndexPixels(i, ruler);\n      const stack = (parsed._stacks || {})[vScale.axis];\n      const properties = {\n        horizontal,\n        base: vpixels.base,\n        enableBorderRadius: !stack || isFloatBar(parsed._custom) || (index === stack._top || index === stack._bottom),\n        x: horizontal ? vpixels.head : ipixels.center,\n        y: horizontal ? ipixels.center : vpixels.head,\n        height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n        width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n      };\n      if (includeOptions) {\n        properties.options = sharedOptions || me.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n      }\n      setBorderSkipped(properties, properties.options || bars[i].options, stack, index);\n      me.updateElement(bars[i], i, properties, mode);\n    }\n  }\n  _getStacks(last, dataIndex) {\n    const me = this;\n    const meta = me._cachedMeta;\n    const iScale = meta.iScale;\n    const metasets = iScale.getMatchingVisibleMetas(me._type);\n    const stacked = iScale.options.stacked;\n    const ilen = metasets.length;\n    const stacks = [];\n    let i, item;\n    for (i = 0; i < ilen; ++i) {\n      item = metasets[i];\n      if (!item.controller.options.grouped) {\n        continue;\n      }\n      if (typeof dataIndex !== 'undefined') {\n        const val = item.controller.getParsed(dataIndex)[\n          item.controller._cachedMeta.vScale.axis\n        ];\n        if (isNullOrUndef(val) || isNaN(val)) {\n          continue;\n        }\n      }\n      if (stacked === false || stacks.indexOf(item.stack) === -1 ||\n\t\t\t\t(stacked === undefined && item.stack === undefined)) {\n        stacks.push(item.stack);\n      }\n      if (item.index === last) {\n        break;\n      }\n    }\n    if (!stacks.length) {\n      stacks.push(undefined);\n    }\n    return stacks;\n  }\n  _getStackCount(index) {\n    return this._getStacks(undefined, index).length;\n  }\n  _getStackIndex(datasetIndex, name, dataIndex) {\n    const stacks = this._getStacks(datasetIndex, dataIndex);\n    const index = (name !== undefined)\n      ? stacks.indexOf(name)\n      : -1;\n    return (index === -1)\n      ? stacks.length - 1\n      : index;\n  }\n  _getRuler() {\n    const me = this;\n    const opts = me.options;\n    const meta = me._cachedMeta;\n    const iScale = meta.iScale;\n    const pixels = [];\n    let i, ilen;\n    for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n      pixels.push(iScale.getPixelForValue(me.getParsed(i)[iScale.axis], i));\n    }\n    const barThickness = opts.barThickness;\n    const min = barThickness || computeMinSampleSize(iScale);\n    return {\n      min,\n      pixels,\n      start: iScale._startPixel,\n      end: iScale._endPixel,\n      stackCount: me._getStackCount(),\n      scale: iScale,\n      grouped: opts.grouped,\n      ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n    };\n  }\n  _calculateBarValuePixels(index) {\n    const me = this;\n    const {_cachedMeta: {vScale, _stacked}, options: {base: baseValue, minBarLength}} = me;\n    const actualBase = baseValue || 0;\n    const parsed = me.getParsed(index);\n    const custom = parsed._custom;\n    const floating = isFloatBar(custom);\n    let value = parsed[vScale.axis];\n    let start = 0;\n    let length = _stacked ? me.applyStack(vScale, parsed, _stacked) : value;\n    let head, size;\n    if (length !== value) {\n      start = length - value;\n      length = value;\n    }\n    if (floating) {\n      value = custom.barStart;\n      length = custom.barEnd - custom.barStart;\n      if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n        start = 0;\n      }\n      start += value;\n    }\n    const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n    let base = vScale.getPixelForValue(startValue);\n    if (me.chart.getDataVisibility(index)) {\n      head = vScale.getPixelForValue(start + length);\n    } else {\n      head = base;\n    }\n    size = head - base;\n    if (Math.abs(size) < minBarLength) {\n      size = barSign(size, vScale, actualBase) * minBarLength;\n      if (value === actualBase) {\n        base -= size / 2;\n      }\n      head = base + size;\n    }\n    if (base === vScale.getPixelForValue(actualBase)) {\n      const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n      base += halfGrid;\n      size -= halfGrid;\n    }\n    return {\n      size,\n      base,\n      head,\n      center: head + size / 2\n    };\n  }\n  _calculateBarIndexPixels(index, ruler) {\n    const me = this;\n    const scale = ruler.scale;\n    const options = me.options;\n    const skipNull = options.skipNull;\n    const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n    let center, size;\n    if (ruler.grouped) {\n      const stackCount = skipNull ? me._getStackCount(index) : ruler.stackCount;\n      const range = options.barThickness === 'flex'\n        ? computeFlexCategoryTraits(index, ruler, options, stackCount)\n        : computeFitCategoryTraits(index, ruler, options, stackCount);\n      const stackIndex = me._getStackIndex(me.index, me._cachedMeta.stack, skipNull ? index : undefined);\n      center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);\n      size = Math.min(maxBarThickness, range.chunk * range.ratio);\n    } else {\n      center = scale.getPixelForValue(me.getParsed(index)[scale.axis], index);\n      size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n    }\n    return {\n      base: center - size / 2,\n      head: center + size / 2,\n      center,\n      size\n    };\n  }\n  draw() {\n    const me = this;\n    const meta = me._cachedMeta;\n    const vScale = meta.vScale;\n    const rects = meta.data;\n    const ilen = rects.length;\n    let i = 0;\n    for (; i < ilen; ++i) {\n      if (me.getParsed(i)[vScale.axis] !== null) {\n        rects[i].draw(me._ctx);\n      }\n    }\n  }\n}\nBarController.id = 'bar';\nBarController.defaults = {\n  datasetElementType: false,\n  dataElementType: 'bar',\n  categoryPercentage: 0.8,\n  barPercentage: 0.9,\n  grouped: true,\n  animations: {\n    numbers: {\n      type: 'number',\n      properties: ['x', 'y', 'base', 'width', 'height']\n    }\n  }\n};\nBarController.overrides = {\n  scales: {\n    _index_: {\n      type: 'category',\n      offset: true,\n      grid: {\n        offset: true\n      }\n    },\n    _value_: {\n      type: 'linear',\n      beginAtZero: true,\n    }\n  }\n};\n\nclass BubbleController extends DatasetController {\n  initialize() {\n    this.enableOptionSharing = true;\n    super.initialize();\n  }\n  parseObjectData(meta, data, start, count) {\n    const {xScale, yScale} = meta;\n    const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n    const parsed = [];\n    let i, ilen, item;\n    for (i = start, ilen = start + count; i < ilen; ++i) {\n      item = data[i];\n      parsed.push({\n        x: xScale.parse(resolveObjectKey(item, xAxisKey), i),\n        y: yScale.parse(resolveObjectKey(item, yAxisKey), i),\n        _custom: item && item.r && +item.r\n      });\n    }\n    return parsed;\n  }\n  getMaxOverflow() {\n    const {data, _parsed} = this._cachedMeta;\n    let max = 0;\n    for (let i = data.length - 1; i >= 0; --i) {\n      max = Math.max(max, data[i].size() / 2, _parsed[i]._custom);\n    }\n    return max > 0 && max;\n  }\n  getLabelAndValue(index) {\n    const me = this;\n    const meta = me._cachedMeta;\n    const {xScale, yScale} = meta;\n    const parsed = me.getParsed(index);\n    const x = xScale.getLabelForValue(parsed.x);\n    const y = yScale.getLabelForValue(parsed.y);\n    const r = parsed._custom;\n    return {\n      label: meta.label,\n      value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n    };\n  }\n  update(mode) {\n    const me = this;\n    const points = me._cachedMeta.data;\n    me.updateElements(points, 0, points.length, mode);\n  }\n  updateElements(points, start, count, mode) {\n    const me = this;\n    const reset = mode === 'reset';\n    const {iScale, vScale} = me._cachedMeta;\n    const firstOpts = me.resolveDataElementOptions(start, mode);\n    const sharedOptions = me.getSharedOptions(firstOpts);\n    const includeOptions = me.includeOptions(mode, sharedOptions);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    for (let i = start; i < start + count; i++) {\n      const point = points[i];\n      const parsed = !reset && me.getParsed(i);\n      const properties = {};\n      const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n      const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n      properties.skip = isNaN(iPixel) || isNaN(vPixel);\n      if (includeOptions) {\n        properties.options = me.resolveDataElementOptions(i, point.active ? 'active' : mode);\n        if (reset) {\n          properties.options.radius = 0;\n        }\n      }\n      me.updateElement(point, i, properties, mode);\n    }\n    me.updateSharedOptions(sharedOptions, mode, firstOpts);\n  }\n  resolveDataElementOptions(index, mode) {\n    const parsed = this.getParsed(index);\n    let values = super.resolveDataElementOptions(index, mode);\n    if (values.$shared) {\n      values = Object.assign({}, values, {$shared: false});\n    }\n    const radius = values.radius;\n    if (mode !== 'active') {\n      values.radius = 0;\n    }\n    values.radius += valueOrDefault(parsed && parsed._custom, radius);\n    return values;\n  }\n}\nBubbleController.id = 'bubble';\nBubbleController.defaults = {\n  datasetElementType: false,\n  dataElementType: 'point',\n  animations: {\n    numbers: {\n      type: 'number',\n      properties: ['x', 'y', 'borderWidth', 'radius']\n    }\n  }\n};\nBubbleController.overrides = {\n  scales: {\n    x: {\n      type: 'linear'\n    },\n    y: {\n      type: 'linear'\n    }\n  },\n  plugins: {\n    tooltip: {\n      callbacks: {\n        title() {\n          return '';\n        }\n      }\n    }\n  }\n};\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n  let ratioX = 1;\n  let ratioY = 1;\n  let offsetX = 0;\n  let offsetY = 0;\n  if (circumference < TAU) {\n    const startAngle = rotation;\n    const endAngle = startAngle + circumference;\n    const startX = Math.cos(startAngle);\n    const startY = Math.sin(startAngle);\n    const endX = Math.cos(endAngle);\n    const endY = Math.sin(endAngle);\n    const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n    const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n    const maxX = calcMax(0, startX, endX);\n    const maxY = calcMax(HALF_PI, startY, endY);\n    const minX = calcMin(PI, startX, endX);\n    const minY = calcMin(PI + HALF_PI, startY, endY);\n    ratioX = (maxX - minX) / 2;\n    ratioY = (maxY - minY) / 2;\n    offsetX = -(maxX + minX) / 2;\n    offsetY = -(maxY + minY) / 2;\n  }\n  return {ratioX, ratioY, offsetX, offsetY};\n}\nclass DoughnutController extends DatasetController {\n  constructor(chart, datasetIndex) {\n    super(chart, datasetIndex);\n    this.enableOptionSharing = true;\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n    this.offsetX = undefined;\n    this.offsetY = undefined;\n  }\n  linkScales() {}\n  parse(start, count) {\n    const data = this.getDataset().data;\n    const meta = this._cachedMeta;\n    let i, ilen;\n    for (i = start, ilen = start + count; i < ilen; ++i) {\n      meta._parsed[i] = +data[i];\n    }\n  }\n  _getRotation() {\n    return toRadians(this.options.rotation - 90);\n  }\n  _getCircumference() {\n    return toRadians(this.options.circumference);\n  }\n  _getRotationExtents() {\n    let min = TAU;\n    let max = -TAU;\n    const me = this;\n    for (let i = 0; i < me.chart.data.datasets.length; ++i) {\n      if (me.chart.isDatasetVisible(i)) {\n        const controller = me.chart.getDatasetMeta(i).controller;\n        const rotation = controller._getRotation();\n        const circumference = controller._getCircumference();\n        min = Math.min(min, rotation);\n        max = Math.max(max, rotation + circumference);\n      }\n    }\n    return {\n      rotation: min,\n      circumference: max - min,\n    };\n  }\n  update(mode) {\n    const me = this;\n    const chart = me.chart;\n    const {chartArea} = chart;\n    const meta = me._cachedMeta;\n    const arcs = meta.data;\n    const spacing = me.getMaxBorderWidth() + me.getMaxOffset(arcs) + me.options.spacing;\n    const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n    const cutout = Math.min(toPercentage(me.options.cutout, maxSize), 1);\n    const chartWeight = me._getRingWeight(me.index);\n    const {circumference, rotation} = me._getRotationExtents();\n    const {ratioX, ratioY, offsetX, offsetY} = getRatioAndOffset(rotation, circumference, cutout);\n    const maxWidth = (chartArea.width - spacing) / ratioX;\n    const maxHeight = (chartArea.height - spacing) / ratioY;\n    const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n    const outerRadius = toDimension(me.options.radius, maxRadius);\n    const innerRadius = Math.max(outerRadius * cutout, 0);\n    const radiusLength = (outerRadius - innerRadius) / me._getVisibleDatasetWeightTotal();\n    me.offsetX = offsetX * outerRadius;\n    me.offsetY = offsetY * outerRadius;\n    meta.total = me.calculateTotal();\n    me.outerRadius = outerRadius - radiusLength * me._getRingWeightOffset(me.index);\n    me.innerRadius = Math.max(me.outerRadius - radiusLength * chartWeight, 0);\n    me.updateElements(arcs, 0, arcs.length, mode);\n  }\n  _circumference(i, reset) {\n    const me = this;\n    const opts = me.options;\n    const meta = me._cachedMeta;\n    const circumference = me._getCircumference();\n    if ((reset && opts.animation.animateRotate) || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n      return 0;\n    }\n    return me.calculateCircumference(meta._parsed[i] * circumference / TAU);\n  }\n  updateElements(arcs, start, count, mode) {\n    const me = this;\n    const reset = mode === 'reset';\n    const chart = me.chart;\n    const chartArea = chart.chartArea;\n    const opts = chart.options;\n    const animationOpts = opts.animation;\n    const centerX = (chartArea.left + chartArea.right) / 2;\n    const centerY = (chartArea.top + chartArea.bottom) / 2;\n    const animateScale = reset && animationOpts.animateScale;\n    const innerRadius = animateScale ? 0 : me.innerRadius;\n    const outerRadius = animateScale ? 0 : me.outerRadius;\n    const firstOpts = me.resolveDataElementOptions(start, mode);\n    const sharedOptions = me.getSharedOptions(firstOpts);\n    const includeOptions = me.includeOptions(mode, sharedOptions);\n    let startAngle = me._getRotation();\n    let i;\n    for (i = 0; i < start; ++i) {\n      startAngle += me._circumference(i, reset);\n    }\n    for (i = start; i < start + count; ++i) {\n      const circumference = me._circumference(i, reset);\n      const arc = arcs[i];\n      const properties = {\n        x: centerX + me.offsetX,\n        y: centerY + me.offsetY,\n        startAngle,\n        endAngle: startAngle + circumference,\n        circumference,\n        outerRadius,\n        innerRadius\n      };\n      if (includeOptions) {\n        properties.options = sharedOptions || me.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n      }\n      startAngle += circumference;\n      me.updateElement(arc, i, properties, mode);\n    }\n    me.updateSharedOptions(sharedOptions, mode, firstOpts);\n  }\n  calculateTotal() {\n    const meta = this._cachedMeta;\n    const metaData = meta.data;\n    let total = 0;\n    let i;\n    for (i = 0; i < metaData.length; i++) {\n      const value = meta._parsed[i];\n      if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n        total += Math.abs(value);\n      }\n    }\n    return total;\n  }\n  calculateCircumference(value) {\n    const total = this._cachedMeta.total;\n    if (total > 0 && !isNaN(value)) {\n      return TAU * (Math.abs(value) / total);\n    }\n    return 0;\n  }\n  getLabelAndValue(index) {\n    const me = this;\n    const meta = me._cachedMeta;\n    const chart = me.chart;\n    const labels = chart.data.labels || [];\n    const value = formatNumber(meta._parsed[index], chart.options.locale);\n    return {\n      label: labels[index] || '',\n      value,\n    };\n  }\n  getMaxBorderWidth(arcs) {\n    const me = this;\n    let max = 0;\n    const chart = me.chart;\n    let i, ilen, meta, controller, options;\n    if (!arcs) {\n      for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n        if (chart.isDatasetVisible(i)) {\n          meta = chart.getDatasetMeta(i);\n          arcs = meta.data;\n          controller = meta.controller;\n          if (controller !== me) {\n            controller.configure();\n          }\n          break;\n        }\n      }\n    }\n    if (!arcs) {\n      return 0;\n    }\n    for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n      options = controller.resolveDataElementOptions(i);\n      if (options.borderAlign !== 'inner') {\n        max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n      }\n    }\n    return max;\n  }\n  getMaxOffset(arcs) {\n    let max = 0;\n    for (let i = 0, ilen = arcs.length; i < ilen; ++i) {\n      const options = this.resolveDataElementOptions(i);\n      max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n    }\n    return max;\n  }\n  _getRingWeightOffset(datasetIndex) {\n    let ringWeightOffset = 0;\n    for (let i = 0; i < datasetIndex; ++i) {\n      if (this.chart.isDatasetVisible(i)) {\n        ringWeightOffset += this._getRingWeight(i);\n      }\n    }\n    return ringWeightOffset;\n  }\n  _getRingWeight(datasetIndex) {\n    return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n  }\n  _getVisibleDatasetWeightTotal() {\n    return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n  }\n}\nDoughnutController.id = 'doughnut';\nDoughnutController.defaults = {\n  datasetElementType: false,\n  dataElementType: 'arc',\n  animation: {\n    animateRotate: true,\n    animateScale: false\n  },\n  animations: {\n    numbers: {\n      type: 'number',\n      properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth', 'spacing']\n    },\n  },\n  cutout: '50%',\n  rotation: 0,\n  circumference: 360,\n  radius: '100%',\n  spacing: 0,\n  indexAxis: 'r',\n};\nDoughnutController.descriptors = {\n  _scriptable: (name) => name !== 'spacing',\n  _indexable: (name) => name !== 'spacing',\n};\nDoughnutController.overrides = {\n  aspectRatio: 1,\n  plugins: {\n    legend: {\n      labels: {\n        generateLabels(chart) {\n          const data = chart.data;\n          if (data.labels.length && data.datasets.length) {\n            const {labels: {pointStyle}} = chart.legend.options;\n            return data.labels.map((label, i) => {\n              const meta = chart.getDatasetMeta(0);\n              const style = meta.controller.getStyle(i);\n              return {\n                text: label,\n                fillStyle: style.backgroundColor,\n                strokeStyle: style.borderColor,\n                lineWidth: style.borderWidth,\n                pointStyle: pointStyle,\n                hidden: !chart.getDataVisibility(i),\n                index: i\n              };\n            });\n          }\n          return [];\n        }\n      },\n      onClick(e, legendItem, legend) {\n        legend.chart.toggleDataVisibility(legendItem.index);\n        legend.chart.update();\n      }\n    },\n    tooltip: {\n      callbacks: {\n        title() {\n          return '';\n        },\n        label(tooltipItem) {\n          let dataLabel = tooltipItem.label;\n          const value = ': ' + tooltipItem.formattedValue;\n          if (isArray(dataLabel)) {\n            dataLabel = dataLabel.slice();\n            dataLabel[0] += value;\n          } else {\n            dataLabel += value;\n          }\n          return dataLabel;\n        }\n      }\n    }\n  }\n};\n\nclass LineController extends DatasetController {\n  initialize() {\n    this.enableOptionSharing = true;\n    super.initialize();\n  }\n  update(mode) {\n    const me = this;\n    const meta = me._cachedMeta;\n    const {dataset: line, data: points = [], _dataset} = meta;\n    const animationsDisabled = me.chart._animationsDisabled;\n    let {start, count} = getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n    me._drawStart = start;\n    me._drawCount = count;\n    if (scaleRangesChanged(meta)) {\n      start = 0;\n      count = points.length;\n    }\n    line._datasetIndex = me.index;\n    line._decimated = !!_dataset._decimated;\n    line.points = points;\n    const options = me.resolveDatasetElementOptions(mode);\n    if (!me.options.showLine) {\n      options.borderWidth = 0;\n    }\n    options.segment = me.options.segment;\n    me.updateElement(line, undefined, {\n      animated: !animationsDisabled,\n      options\n    }, mode);\n    me.updateElements(points, start, count, mode);\n  }\n  updateElements(points, start, count, mode) {\n    const me = this;\n    const reset = mode === 'reset';\n    const {iScale, vScale, _stacked} = me._cachedMeta;\n    const firstOpts = me.resolveDataElementOptions(start, mode);\n    const sharedOptions = me.getSharedOptions(firstOpts);\n    const includeOptions = me.includeOptions(mode, sharedOptions);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const spanGaps = me.options.spanGaps;\n    const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n    const directUpdate = me.chart._animationsDisabled || reset || mode === 'none';\n    let prevParsed = start > 0 && me.getParsed(start - 1);\n    for (let i = start; i < start + count; ++i) {\n      const point = points[i];\n      const parsed = me.getParsed(i);\n      const properties = directUpdate ? point : {};\n      const nullData = isNullOrUndef(parsed[vAxis]);\n      const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n      const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? me.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n      properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n      properties.stop = i > 0 && (parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n      properties.parsed = parsed;\n      if (includeOptions) {\n        properties.options = sharedOptions || me.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      }\n      if (!directUpdate) {\n        me.updateElement(point, i, properties, mode);\n      }\n      prevParsed = parsed;\n    }\n    me.updateSharedOptions(sharedOptions, mode, firstOpts);\n  }\n  getMaxOverflow() {\n    const me = this;\n    const meta = me._cachedMeta;\n    const dataset = meta.dataset;\n    const border = dataset.options && dataset.options.borderWidth || 0;\n    const data = meta.data || [];\n    if (!data.length) {\n      return border;\n    }\n    const firstPoint = data[0].size(me.resolveDataElementOptions(0));\n    const lastPoint = data[data.length - 1].size(me.resolveDataElementOptions(data.length - 1));\n    return Math.max(border, firstPoint, lastPoint) / 2;\n  }\n  draw() {\n    const meta = this._cachedMeta;\n    meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n    super.draw();\n  }\n}\nLineController.id = 'line';\nLineController.defaults = {\n  datasetElementType: 'line',\n  dataElementType: 'point',\n  showLine: true,\n  spanGaps: false,\n};\nLineController.overrides = {\n  scales: {\n    _index_: {\n      type: 'category',\n    },\n    _value_: {\n      type: 'linear',\n    },\n  }\n};\nfunction getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n  const pointCount = points.length;\n  let start = 0;\n  let count = pointCount;\n  if (meta._sorted) {\n    const {iScale, _parsed} = meta;\n    const axis = iScale.axis;\n    const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n    if (minDefined) {\n      start = _limitValue(Math.min(\n        _lookupByKey(_parsed, iScale.axis, min).lo,\n        animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo),\n      0, pointCount - 1);\n    }\n    if (maxDefined) {\n      count = _limitValue(Math.max(\n        _lookupByKey(_parsed, iScale.axis, max).hi + 1,\n        animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max)).hi + 1),\n      start, pointCount) - start;\n    } else {\n      count = pointCount - start;\n    }\n  }\n  return {start, count};\n}\nfunction scaleRangesChanged(meta) {\n  const {xScale, yScale, _scaleRanges} = meta;\n  const newRanges = {\n    xmin: xScale.min,\n    xmax: xScale.max,\n    ymin: yScale.min,\n    ymax: yScale.max\n  };\n  if (!_scaleRanges) {\n    meta._scaleRanges = newRanges;\n    return true;\n  }\n  const changed = _scaleRanges.xmin !== xScale.min\n\t\t|| _scaleRanges.xmax !== xScale.max\n\t\t|| _scaleRanges.ymin !== yScale.min\n\t\t|| _scaleRanges.ymax !== yScale.max;\n  Object.assign(_scaleRanges, newRanges);\n  return changed;\n}\n\nclass PolarAreaController extends DatasetController {\n  constructor(chart, datasetIndex) {\n    super(chart, datasetIndex);\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n  }\n  getLabelAndValue(index) {\n    const me = this;\n    const meta = me._cachedMeta;\n    const chart = me.chart;\n    const labels = chart.data.labels || [];\n    const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n    return {\n      label: labels[index] || '',\n      value,\n    };\n  }\n  update(mode) {\n    const arcs = this._cachedMeta.data;\n    this._updateRadius();\n    this.updateElements(arcs, 0, arcs.length, mode);\n  }\n  _updateRadius() {\n    const me = this;\n    const chart = me.chart;\n    const chartArea = chart.chartArea;\n    const opts = chart.options;\n    const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n    const outerRadius = Math.max(minSize / 2, 0);\n    const innerRadius = Math.max(opts.cutoutPercentage ? (outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\n    const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n    me.outerRadius = outerRadius - (radiusLength * me.index);\n    me.innerRadius = me.outerRadius - radiusLength;\n  }\n  updateElements(arcs, start, count, mode) {\n    const me = this;\n    const reset = mode === 'reset';\n    const chart = me.chart;\n    const dataset = me.getDataset();\n    const opts = chart.options;\n    const animationOpts = opts.animation;\n    const scale = me._cachedMeta.rScale;\n    const centerX = scale.xCenter;\n    const centerY = scale.yCenter;\n    const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n    let angle = datasetStartAngle;\n    let i;\n    const defaultAngle = 360 / me.countVisibleElements();\n    for (i = 0; i < start; ++i) {\n      angle += me._computeAngle(i, mode, defaultAngle);\n    }\n    for (i = start; i < start + count; i++) {\n      const arc = arcs[i];\n      let startAngle = angle;\n      let endAngle = angle + me._computeAngle(i, mode, defaultAngle);\n      let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(dataset.data[i]) : 0;\n      angle = endAngle;\n      if (reset) {\n        if (animationOpts.animateScale) {\n          outerRadius = 0;\n        }\n        if (animationOpts.animateRotate) {\n          startAngle = endAngle = datasetStartAngle;\n        }\n      }\n      const properties = {\n        x: centerX,\n        y: centerY,\n        innerRadius: 0,\n        outerRadius,\n        startAngle,\n        endAngle,\n        options: me.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n      };\n      me.updateElement(arc, i, properties, mode);\n    }\n  }\n  countVisibleElements() {\n    const dataset = this.getDataset();\n    const meta = this._cachedMeta;\n    let count = 0;\n    meta.data.forEach((element, index) => {\n      if (!isNaN(dataset.data[index]) && this.chart.getDataVisibility(index)) {\n        count++;\n      }\n    });\n    return count;\n  }\n  _computeAngle(index, mode, defaultAngle) {\n    return this.chart.getDataVisibility(index)\n      ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle)\n      : 0;\n  }\n}\nPolarAreaController.id = 'polarArea';\nPolarAreaController.defaults = {\n  dataElementType: 'arc',\n  animation: {\n    animateRotate: true,\n    animateScale: true\n  },\n  animations: {\n    numbers: {\n      type: 'number',\n      properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius']\n    },\n  },\n  indexAxis: 'r',\n  startAngle: 0,\n};\nPolarAreaController.overrides = {\n  aspectRatio: 1,\n  plugins: {\n    legend: {\n      labels: {\n        generateLabels(chart) {\n          const data = chart.data;\n          if (data.labels.length && data.datasets.length) {\n            const {labels: {pointStyle}} = chart.legend.options;\n            return data.labels.map((label, i) => {\n              const meta = chart.getDatasetMeta(0);\n              const style = meta.controller.getStyle(i);\n              return {\n                text: label,\n                fillStyle: style.backgroundColor,\n                strokeStyle: style.borderColor,\n                lineWidth: style.borderWidth,\n                pointStyle: pointStyle,\n                hidden: !chart.getDataVisibility(i),\n                index: i\n              };\n            });\n          }\n          return [];\n        }\n      },\n      onClick(e, legendItem, legend) {\n        legend.chart.toggleDataVisibility(legendItem.index);\n        legend.chart.update();\n      }\n    },\n    tooltip: {\n      callbacks: {\n        title() {\n          return '';\n        },\n        label(context) {\n          return context.chart.data.labels[context.dataIndex] + ': ' + context.formattedValue;\n        }\n      }\n    }\n  },\n  scales: {\n    r: {\n      type: 'radialLinear',\n      angleLines: {\n        display: false\n      },\n      beginAtZero: true,\n      grid: {\n        circular: true\n      },\n      pointLabels: {\n        display: false\n      },\n      startAngle: 0\n    }\n  }\n};\n\nclass PieController extends DoughnutController {\n}\nPieController.id = 'pie';\nPieController.defaults = {\n  cutout: 0,\n  rotation: 0,\n  circumference: 360,\n  radius: '100%'\n};\n\nclass RadarController extends DatasetController {\n  getLabelAndValue(index) {\n    const me = this;\n    const vScale = me._cachedMeta.vScale;\n    const parsed = me.getParsed(index);\n    return {\n      label: vScale.getLabels()[index],\n      value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n    };\n  }\n  update(mode) {\n    const me = this;\n    const meta = me._cachedMeta;\n    const line = meta.dataset;\n    const points = meta.data || [];\n    const labels = meta.iScale.getLabels();\n    line.points = points;\n    if (mode !== 'resize') {\n      const options = me.resolveDatasetElementOptions(mode);\n      if (!me.options.showLine) {\n        options.borderWidth = 0;\n      }\n      const properties = {\n        _loop: true,\n        _fullLoop: labels.length === points.length,\n        options\n      };\n      me.updateElement(line, undefined, properties, mode);\n    }\n    me.updateElements(points, 0, points.length, mode);\n  }\n  updateElements(points, start, count, mode) {\n    const me = this;\n    const dataset = me.getDataset();\n    const scale = me._cachedMeta.rScale;\n    const reset = mode === 'reset';\n    for (let i = start; i < start + count; i++) {\n      const point = points[i];\n      const options = me.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      const pointPosition = scale.getPointPositionForValue(i, dataset.data[i]);\n      const x = reset ? scale.xCenter : pointPosition.x;\n      const y = reset ? scale.yCenter : pointPosition.y;\n      const properties = {\n        x,\n        y,\n        angle: pointPosition.angle,\n        skip: isNaN(x) || isNaN(y),\n        options\n      };\n      me.updateElement(point, i, properties, mode);\n    }\n  }\n}\nRadarController.id = 'radar';\nRadarController.defaults = {\n  datasetElementType: 'line',\n  dataElementType: 'point',\n  indexAxis: 'r',\n  showLine: true,\n  elements: {\n    line: {\n      fill: 'start'\n    }\n  },\n};\nRadarController.overrides = {\n  aspectRatio: 1,\n  scales: {\n    r: {\n      type: 'radialLinear',\n    }\n  }\n};\n\nclass ScatterController extends LineController {\n}\nScatterController.id = 'scatter';\nScatterController.defaults = {\n  showLine: false,\n  fill: false\n};\nScatterController.overrides = {\n  interaction: {\n    mode: 'point'\n  },\n  plugins: {\n    tooltip: {\n      callbacks: {\n        title() {\n          return '';\n        },\n        label(item) {\n          return '(' + item.label + ', ' + item.formattedValue + ')';\n        }\n      }\n    }\n  },\n  scales: {\n    x: {\n      type: 'linear'\n    },\n    y: {\n      type: 'linear'\n    }\n  }\n};\n\nvar controllers = /*#__PURE__*/Object.freeze({\n__proto__: null,\nBarController: BarController,\nBubbleController: BubbleController,\nDoughnutController: DoughnutController,\nLineController: LineController,\nPolarAreaController: PolarAreaController,\nPieController: PieController,\nRadarController: RadarController,\nScatterController: ScatterController\n});\n\nfunction abstract() {\n  throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\nclass DateAdapter {\n  constructor(options) {\n    this.options = options || {};\n  }\n  formats() {\n    return abstract();\n  }\n  parse(value, format) {\n    return abstract();\n  }\n  format(timestamp, format) {\n    return abstract();\n  }\n  add(timestamp, amount, unit) {\n    return abstract();\n  }\n  diff(a, b, unit) {\n    return abstract();\n  }\n  startOf(timestamp, unit, weekday) {\n    return abstract();\n  }\n  endOf(timestamp, unit) {\n    return abstract();\n  }\n}\nDateAdapter.override = function(members) {\n  Object.assign(DateAdapter.prototype, members);\n};\nvar adapters = {\n  _date: DateAdapter\n};\n\nfunction getRelativePosition(e, chart) {\n  if ('native' in e) {\n    return {\n      x: e.x,\n      y: e.y\n    };\n  }\n  return getRelativePosition$1(e, chart);\n}\nfunction evaluateAllVisibleItems(chart, handler) {\n  const metasets = chart.getSortedVisibleDatasetMetas();\n  let index, data, element;\n  for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n    ({index, data} = metasets[i]);\n    for (let j = 0, jlen = data.length; j < jlen; ++j) {\n      element = data[j];\n      if (!element.skip) {\n        handler(element, index, j);\n      }\n    }\n  }\n}\nfunction binarySearch(metaset, axis, value, intersect) {\n  const {controller, data, _sorted} = metaset;\n  const iScale = controller._cachedMeta.iScale;\n  if (iScale && axis === iScale.axis && _sorted && data.length) {\n    const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n    if (!intersect) {\n      return lookupMethod(data, axis, value);\n    } else if (controller._sharedOptions) {\n      const el = data[0];\n      const range = typeof el.getRange === 'function' && el.getRange(axis);\n      if (range) {\n        const start = lookupMethod(data, axis, value - range);\n        const end = lookupMethod(data, axis, value + range);\n        return {lo: start.lo, hi: end.hi};\n      }\n    }\n  }\n  return {lo: 0, hi: data.length - 1};\n}\nfunction optimizedEvaluateItems(chart, axis, position, handler, intersect) {\n  const metasets = chart.getSortedVisibleDatasetMetas();\n  const value = position[axis];\n  for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n    const {index, data} = metasets[i];\n    const {lo, hi} = binarySearch(metasets[i], axis, value, intersect);\n    for (let j = lo; j <= hi; ++j) {\n      const element = data[j];\n      if (!element.skip) {\n        handler(element, index, j);\n      }\n    }\n  }\n}\nfunction getDistanceMetricForAxis(axis) {\n  const useX = axis.indexOf('x') !== -1;\n  const useY = axis.indexOf('y') !== -1;\n  return function(pt1, pt2) {\n    const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n    const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n    return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n  };\n}\nfunction getIntersectItems(chart, position, axis, useFinalPosition) {\n  const items = [];\n  if (!_isPointInArea(position, chart.chartArea, chart._minPadding)) {\n    return items;\n  }\n  const evaluationFunc = function(element, datasetIndex, index) {\n    if (element.inRange(position.x, position.y, useFinalPosition)) {\n      items.push({element, datasetIndex, index});\n    }\n  };\n  optimizedEvaluateItems(chart, axis, position, evaluationFunc, true);\n  return items;\n}\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition) {\n  const distanceMetric = getDistanceMetricForAxis(axis);\n  let minDistance = Number.POSITIVE_INFINITY;\n  let items = [];\n  if (!_isPointInArea(position, chart.chartArea, chart._minPadding)) {\n    return items;\n  }\n  const evaluationFunc = function(element, datasetIndex, index) {\n    if (intersect && !element.inRange(position.x, position.y, useFinalPosition)) {\n      return;\n    }\n    const center = element.getCenterPoint(useFinalPosition);\n    if (!_isPointInArea(center, chart.chartArea, chart._minPadding) && !element.inRange(position.x, position.y, useFinalPosition)) {\n      return;\n    }\n    const distance = distanceMetric(position, center);\n    if (distance < minDistance) {\n      items = [{element, datasetIndex, index}];\n      minDistance = distance;\n    } else if (distance === minDistance) {\n      items.push({element, datasetIndex, index});\n    }\n  };\n  optimizedEvaluateItems(chart, axis, position, evaluationFunc);\n  return items;\n}\nfunction getAxisItems(chart, e, options, useFinalPosition) {\n  const position = getRelativePosition(e, chart);\n  const items = [];\n  const axis = options.axis;\n  const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n  let intersectsItem = false;\n  evaluateAllVisibleItems(chart, (element, datasetIndex, index) => {\n    if (element[rangeMethod](position[axis], useFinalPosition)) {\n      items.push({element, datasetIndex, index});\n    }\n    if (element.inRange(position.x, position.y, useFinalPosition)) {\n      intersectsItem = true;\n    }\n  });\n  if (options.intersect && !intersectsItem) {\n    return [];\n  }\n  return items;\n}\nvar Interaction = {\n  modes: {\n    index(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'x';\n      const items = options.intersect\n        ? getIntersectItems(chart, position, axis, useFinalPosition)\n        : getNearestItems(chart, position, axis, false, useFinalPosition);\n      const elements = [];\n      if (!items.length) {\n        return [];\n      }\n      chart.getSortedVisibleDatasetMetas().forEach((meta) => {\n        const index = items[0].index;\n        const element = meta.data[index];\n        if (element && !element.skip) {\n          elements.push({element, datasetIndex: meta.index, index});\n        }\n      });\n      return elements;\n    },\n    dataset(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      let items = options.intersect\n        ? getIntersectItems(chart, position, axis, useFinalPosition) :\n        getNearestItems(chart, position, axis, false, useFinalPosition);\n      if (items.length > 0) {\n        const datasetIndex = items[0].datasetIndex;\n        const data = chart.getDatasetMeta(datasetIndex).data;\n        items = [];\n        for (let i = 0; i < data.length; ++i) {\n          items.push({element: data[i], datasetIndex, index: i});\n        }\n      }\n      return items;\n    },\n    point(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      return getIntersectItems(chart, position, axis, useFinalPosition);\n    },\n    nearest(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      return getNearestItems(chart, position, axis, options.intersect, useFinalPosition);\n    },\n    x(chart, e, options, useFinalPosition) {\n      options.axis = 'x';\n      return getAxisItems(chart, e, options, useFinalPosition);\n    },\n    y(chart, e, options, useFinalPosition) {\n      options.axis = 'y';\n      return getAxisItems(chart, e, options, useFinalPosition);\n    }\n  }\n};\n\nconst STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\nfunction filterByPosition(array, position) {\n  return array.filter(v => v.pos === position);\n}\nfunction filterDynamicPositionByAxis(array, axis) {\n  return array.filter(v => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\nfunction sortByWeight(array, reverse) {\n  return array.sort((a, b) => {\n    const v0 = reverse ? b : a;\n    const v1 = reverse ? a : b;\n    return v0.weight === v1.weight ?\n      v0.index - v1.index :\n      v0.weight - v1.weight;\n  });\n}\nfunction wrapBoxes(boxes) {\n  const layoutBoxes = [];\n  let i, ilen, box, pos, stack, stackWeight;\n  for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n    box = boxes[i];\n    ({position: pos, options: {stack, stackWeight = 1}} = box);\n    layoutBoxes.push({\n      index: i,\n      box,\n      pos,\n      horizontal: box.isHorizontal(),\n      weight: box.weight,\n      stack: stack && (pos + stack),\n      stackWeight\n    });\n  }\n  return layoutBoxes;\n}\nfunction buildStacks(layouts) {\n  const stacks = {};\n  for (const wrap of layouts) {\n    const {stack, pos, stackWeight} = wrap;\n    if (!stack || !STATIC_POSITIONS.includes(pos)) {\n      continue;\n    }\n    const _stack = stacks[stack] || (stacks[stack] = {count: 0, placed: 0, weight: 0, size: 0});\n    _stack.count++;\n    _stack.weight += stackWeight;\n  }\n  return stacks;\n}\nfunction setLayoutDims(layouts, params) {\n  const stacks = buildStacks(layouts);\n  const {vBoxMaxWidth, hBoxMaxHeight} = params;\n  let i, ilen, layout;\n  for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n    layout = layouts[i];\n    const {fullSize} = layout.box;\n    const stack = stacks[layout.stack];\n    const factor = stack && layout.stackWeight / stack.weight;\n    if (layout.horizontal) {\n      layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n      layout.height = hBoxMaxHeight;\n    } else {\n      layout.width = vBoxMaxWidth;\n      layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n    }\n  }\n  return stacks;\n}\nfunction buildLayoutBoxes(boxes) {\n  const layoutBoxes = wrapBoxes(boxes);\n  const fullSize = sortByWeight(layoutBoxes.filter(wrap => wrap.box.fullSize), true);\n  const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n  const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n  const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n  const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n  const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n  const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n  return {\n    fullSize,\n    leftAndTop: left.concat(top),\n    rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n    chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n    vertical: left.concat(right).concat(centerVertical),\n    horizontal: top.concat(bottom).concat(centerHorizontal)\n  };\n}\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n  return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\nfunction updateMaxPadding(maxPadding, boxPadding) {\n  maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n  maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n  maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n  maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\nfunction updateDims(chartArea, params, layout, stacks) {\n  const {pos, box} = layout;\n  const maxPadding = chartArea.maxPadding;\n  if (!isObject(pos)) {\n    if (layout.size) {\n      chartArea[pos] -= layout.size;\n    }\n    const stack = stacks[layout.stack] || {size: 0, count: 1};\n    stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n    layout.size = stack.size / stack.count;\n    chartArea[pos] += layout.size;\n  }\n  if (box.getPadding) {\n    updateMaxPadding(maxPadding, box.getPadding());\n  }\n  const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n  const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n  const widthChanged = newWidth !== chartArea.w;\n  const heightChanged = newHeight !== chartArea.h;\n  chartArea.w = newWidth;\n  chartArea.h = newHeight;\n  return layout.horizontal\n    ? {same: widthChanged, other: heightChanged}\n    : {same: heightChanged, other: widthChanged};\n}\nfunction handleMaxPadding(chartArea) {\n  const maxPadding = chartArea.maxPadding;\n  function updatePos(pos) {\n    const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n    chartArea[pos] += change;\n    return change;\n  }\n  chartArea.y += updatePos('top');\n  chartArea.x += updatePos('left');\n  updatePos('right');\n  updatePos('bottom');\n}\nfunction getMargins(horizontal, chartArea) {\n  const maxPadding = chartArea.maxPadding;\n  function marginForPositions(positions) {\n    const margin = {left: 0, top: 0, right: 0, bottom: 0};\n    positions.forEach((pos) => {\n      margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n    });\n    return margin;\n  }\n  return horizontal\n    ? marginForPositions(['left', 'right'])\n    : marginForPositions(['top', 'bottom']);\n}\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n  const refitBoxes = [];\n  let i, ilen, layout, box, refit, changed;\n  for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {\n    layout = boxes[i];\n    box = layout.box;\n    box.update(\n      layout.width || chartArea.w,\n      layout.height || chartArea.h,\n      getMargins(layout.horizontal, chartArea)\n    );\n    const {same, other} = updateDims(chartArea, params, layout, stacks);\n    refit |= same && refitBoxes.length;\n    changed = changed || other;\n    if (!box.fullSize) {\n      refitBoxes.push(layout);\n    }\n  }\n  return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\nfunction setBoxDims(box, left, top, width, height) {\n  box.top = top;\n  box.left = left;\n  box.right = left + width;\n  box.bottom = top + height;\n  box.width = width;\n  box.height = height;\n}\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n  const userPadding = params.padding;\n  let {x, y} = chartArea;\n  for (const layout of boxes) {\n    const box = layout.box;\n    const stack = stacks[layout.stack] || {count: 1, placed: 0, weight: 1};\n    const weight = (layout.stackWeight / stack.weight) || 1;\n    if (layout.horizontal) {\n      const width = chartArea.w * weight;\n      const height = stack.size || box.height;\n      if (defined(stack.start)) {\n        y = stack.start;\n      }\n      if (box.fullSize) {\n        setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n      } else {\n        setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n      }\n      stack.start = y;\n      stack.placed += width;\n      y = box.bottom;\n    } else {\n      const height = chartArea.h * weight;\n      const width = stack.size || box.width;\n      if (defined(stack.start)) {\n        x = stack.start;\n      }\n      if (box.fullSize) {\n        setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n      } else {\n        setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n      }\n      stack.start = x;\n      stack.placed += height;\n      x = box.right;\n    }\n  }\n  chartArea.x = x;\n  chartArea.y = y;\n}\ndefaults.set('layout', {\n  padding: {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  }\n});\nvar layouts = {\n  addBox(chart, item) {\n    if (!chart.boxes) {\n      chart.boxes = [];\n    }\n    item.fullSize = item.fullSize || false;\n    item.position = item.position || 'top';\n    item.weight = item.weight || 0;\n    item._layers = item._layers || function() {\n      return [{\n        z: 0,\n        draw(chartArea) {\n          item.draw(chartArea);\n        }\n      }];\n    };\n    chart.boxes.push(item);\n  },\n  removeBox(chart, layoutItem) {\n    const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n    if (index !== -1) {\n      chart.boxes.splice(index, 1);\n    }\n  },\n  configure(chart, item, options) {\n    item.fullSize = options.fullSize;\n    item.position = options.position;\n    item.weight = options.weight;\n  },\n  update(chart, width, height, minPadding) {\n    if (!chart) {\n      return;\n    }\n    const padding = toPadding(chart.options.layout.padding);\n    const availableWidth = Math.max(width - padding.width, 0);\n    const availableHeight = Math.max(height - padding.height, 0);\n    const boxes = buildLayoutBoxes(chart.boxes);\n    const verticalBoxes = boxes.vertical;\n    const horizontalBoxes = boxes.horizontal;\n    each(chart.boxes, box => {\n      if (typeof box.beforeLayout === 'function') {\n        box.beforeLayout();\n      }\n    });\n    const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) =>\n      wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n    const params = Object.freeze({\n      outerWidth: width,\n      outerHeight: height,\n      padding,\n      availableWidth,\n      availableHeight,\n      vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n      hBoxMaxHeight: availableHeight / 2\n    });\n    const maxPadding = Object.assign({}, padding);\n    updateMaxPadding(maxPadding, toPadding(minPadding));\n    const chartArea = Object.assign({\n      maxPadding,\n      w: availableWidth,\n      h: availableHeight,\n      x: padding.left,\n      y: padding.top\n    }, padding);\n    const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n    fitBoxes(boxes.fullSize, chartArea, params, stacks);\n    fitBoxes(verticalBoxes, chartArea, params, stacks);\n    if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n      fitBoxes(verticalBoxes, chartArea, params, stacks);\n    }\n    handleMaxPadding(chartArea);\n    placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n    chartArea.x += chartArea.w;\n    chartArea.y += chartArea.h;\n    placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n    chart.chartArea = {\n      left: chartArea.left,\n      top: chartArea.top,\n      right: chartArea.left + chartArea.w,\n      bottom: chartArea.top + chartArea.h,\n      height: chartArea.h,\n      width: chartArea.w,\n    };\n    each(boxes.chartArea, (layout) => {\n      const box = layout.box;\n      Object.assign(box, chart.chartArea);\n      box.update(chartArea.w, chartArea.h);\n    });\n  }\n};\n\nclass BasePlatform {\n  acquireContext(canvas, aspectRatio) {}\n  releaseContext(context) {\n    return false;\n  }\n  addEventListener(chart, type, listener) {}\n  removeEventListener(chart, type, listener) {}\n  getDevicePixelRatio() {\n    return 1;\n  }\n  getMaximumSize(element, width, height, aspectRatio) {\n    width = Math.max(0, width || element.width);\n    height = height || element.height;\n    return {\n      width,\n      height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n    };\n  }\n  isAttached(canvas) {\n    return true;\n  }\n}\n\nclass BasicPlatform extends BasePlatform {\n  acquireContext(item) {\n    return item && item.getContext && item.getContext('2d') || null;\n  }\n}\n\nconst EXPANDO_KEY = '$chartjs';\nconst EVENT_TYPES = {\n  touchstart: 'mousedown',\n  touchmove: 'mousemove',\n  touchend: 'mouseup',\n  pointerenter: 'mouseenter',\n  pointerdown: 'mousedown',\n  pointermove: 'mousemove',\n  pointerup: 'mouseup',\n  pointerleave: 'mouseout',\n  pointerout: 'mouseout'\n};\nconst isNullOrEmpty = value => value === null || value === '';\nfunction initCanvas(canvas, aspectRatio) {\n  const style = canvas.style;\n  const renderHeight = canvas.getAttribute('height');\n  const renderWidth = canvas.getAttribute('width');\n  canvas[EXPANDO_KEY] = {\n    initial: {\n      height: renderHeight,\n      width: renderWidth,\n      style: {\n        display: style.display,\n        height: style.height,\n        width: style.width\n      }\n    }\n  };\n  style.display = style.display || 'block';\n  style.boxSizing = style.boxSizing || 'border-box';\n  if (isNullOrEmpty(renderWidth)) {\n    const displayWidth = readUsedSize(canvas, 'width');\n    if (displayWidth !== undefined) {\n      canvas.width = displayWidth;\n    }\n  }\n  if (isNullOrEmpty(renderHeight)) {\n    if (canvas.style.height === '') {\n      canvas.height = canvas.width / (aspectRatio || 2);\n    } else {\n      const displayHeight = readUsedSize(canvas, 'height');\n      if (displayHeight !== undefined) {\n        canvas.height = displayHeight;\n      }\n    }\n  }\n  return canvas;\n}\nconst eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\nfunction addListener(node, type, listener) {\n  node.addEventListener(type, listener, eventListenerOptions);\n}\nfunction removeListener(chart, type, listener) {\n  chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n}\nfunction fromNativeEvent(event, chart) {\n  const type = EVENT_TYPES[event.type] || event.type;\n  const {x, y} = getRelativePosition$1(event, chart);\n  return {\n    type,\n    chart,\n    native: event,\n    x: x !== undefined ? x : null,\n    y: y !== undefined ? y : null,\n  };\n}\nfunction createAttachObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const container = canvas && _getParentNode(canvas);\n  const element = container || canvas;\n  const observer = new MutationObserver(entries => {\n    const parent = _getParentNode(element);\n    entries.forEach(entry => {\n      for (let i = 0; i < entry.addedNodes.length; i++) {\n        const added = entry.addedNodes[i];\n        if (added === element || added === parent) {\n          listener(entry.target);\n        }\n      }\n    });\n  });\n  observer.observe(document, {childList: true, subtree: true});\n  return observer;\n}\nfunction createDetachObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const container = canvas && _getParentNode(canvas);\n  if (!container) {\n    return;\n  }\n  const observer = new MutationObserver(entries => {\n    entries.forEach(entry => {\n      for (let i = 0; i < entry.removedNodes.length; i++) {\n        if (entry.removedNodes[i] === canvas) {\n          listener();\n          break;\n        }\n      }\n    });\n  });\n  observer.observe(container, {childList: true});\n  return observer;\n}\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\nfunction onWindowResize() {\n  const dpr = window.devicePixelRatio;\n  if (dpr === oldDevicePixelRatio) {\n    return;\n  }\n  oldDevicePixelRatio = dpr;\n  drpListeningCharts.forEach((resize, chart) => {\n    if (chart.currentDevicePixelRatio !== dpr) {\n      resize();\n    }\n  });\n}\nfunction listenDevicePixelRatioChanges(chart, resize) {\n  if (!drpListeningCharts.size) {\n    window.addEventListener('resize', onWindowResize);\n  }\n  drpListeningCharts.set(chart, resize);\n}\nfunction unlistenDevicePixelRatioChanges(chart) {\n  drpListeningCharts.delete(chart);\n  if (!drpListeningCharts.size) {\n    window.removeEventListener('resize', onWindowResize);\n  }\n}\nfunction createResizeObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const container = canvas && _getParentNode(canvas);\n  if (!container) {\n    return;\n  }\n  const resize = throttled((width, height) => {\n    const w = container.clientWidth;\n    listener(width, height);\n    if (w < container.clientWidth) {\n      listener();\n    }\n  }, window);\n  const observer = new ResizeObserver(entries => {\n    const entry = entries[0];\n    const width = entry.contentRect.width;\n    const height = entry.contentRect.height;\n    if (width === 0 && height === 0) {\n      return;\n    }\n    resize(width, height);\n  });\n  observer.observe(container);\n  listenDevicePixelRatioChanges(chart, resize);\n  return observer;\n}\nfunction releaseObserver(chart, type, observer) {\n  if (observer) {\n    observer.disconnect();\n  }\n  if (type === 'resize') {\n    unlistenDevicePixelRatioChanges(chart);\n  }\n}\nfunction createProxyAndListen(chart, type, listener) {\n  const canvas = chart.canvas;\n  const proxy = throttled((event) => {\n    if (chart.ctx !== null) {\n      listener(fromNativeEvent(event, chart));\n    }\n  }, chart, (args) => {\n    const event = args[0];\n    return [event, event.offsetX, event.offsetY];\n  });\n  addListener(canvas, type, proxy);\n  return proxy;\n}\nclass DomPlatform extends BasePlatform {\n  acquireContext(canvas, aspectRatio) {\n    const context = canvas && canvas.getContext && canvas.getContext('2d');\n    if (context && context.canvas === canvas) {\n      initCanvas(canvas, aspectRatio);\n      return context;\n    }\n    return null;\n  }\n  releaseContext(context) {\n    const canvas = context.canvas;\n    if (!canvas[EXPANDO_KEY]) {\n      return false;\n    }\n    const initial = canvas[EXPANDO_KEY].initial;\n    ['height', 'width'].forEach((prop) => {\n      const value = initial[prop];\n      if (isNullOrUndef(value)) {\n        canvas.removeAttribute(prop);\n      } else {\n        canvas.setAttribute(prop, value);\n      }\n    });\n    const style = initial.style || {};\n    Object.keys(style).forEach((key) => {\n      canvas.style[key] = style[key];\n    });\n    canvas.width = canvas.width;\n    delete canvas[EXPANDO_KEY];\n    return true;\n  }\n  addEventListener(chart, type, listener) {\n    this.removeEventListener(chart, type);\n    const proxies = chart.$proxies || (chart.$proxies = {});\n    const handlers = {\n      attach: createAttachObserver,\n      detach: createDetachObserver,\n      resize: createResizeObserver\n    };\n    const handler = handlers[type] || createProxyAndListen;\n    proxies[type] = handler(chart, type, listener);\n  }\n  removeEventListener(chart, type) {\n    const proxies = chart.$proxies || (chart.$proxies = {});\n    const proxy = proxies[type];\n    if (!proxy) {\n      return;\n    }\n    const handlers = {\n      attach: releaseObserver,\n      detach: releaseObserver,\n      resize: releaseObserver\n    };\n    const handler = handlers[type] || removeListener;\n    handler(chart, type, proxy);\n    proxies[type] = undefined;\n  }\n  getDevicePixelRatio() {\n    return window.devicePixelRatio;\n  }\n  getMaximumSize(canvas, width, height, aspectRatio) {\n    return getMaximumSize(canvas, width, height, aspectRatio);\n  }\n  isAttached(canvas) {\n    const container = _getParentNode(canvas);\n    return !!(container && container.isConnected);\n  }\n}\n\nfunction _detectPlatform(canvas) {\n  if (!_isDomSupported() || (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas)) {\n    return BasicPlatform;\n  }\n  return DomPlatform;\n}\n\nclass Element {\n  constructor() {\n    this.x = undefined;\n    this.y = undefined;\n    this.active = false;\n    this.options = undefined;\n    this.$animations = undefined;\n  }\n  tooltipPosition(useFinalPosition) {\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return {x, y};\n  }\n  hasValue() {\n    return isNumber(this.x) && isNumber(this.y);\n  }\n  getProps(props, final) {\n    const me = this;\n    const anims = this.$animations;\n    if (!final || !anims) {\n      return me;\n    }\n    const ret = {};\n    props.forEach(prop => {\n      ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : me[prop];\n    });\n    return ret;\n  }\n}\nElement.defaults = {};\nElement.defaultRoutes = undefined;\n\nconst formatters = {\n  values(value) {\n    return isArray(value) ? value : '' + value;\n  },\n  numeric(tickValue, index, ticks) {\n    if (tickValue === 0) {\n      return '0';\n    }\n    const locale = this.chart.options.locale;\n    let notation;\n    let delta = tickValue;\n    if (ticks.length > 1) {\n      const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n      if (maxTick < 1e-4 || maxTick > 1e+15) {\n        notation = 'scientific';\n      }\n      delta = calculateDelta(tickValue, ticks);\n    }\n    const logDelta = log10(Math.abs(delta));\n    const numDecimal = Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n    const options = {notation, minimumFractionDigits: numDecimal, maximumFractionDigits: numDecimal};\n    Object.assign(options, this.options.ticks.format);\n    return formatNumber(tickValue, locale, options);\n  },\n  logarithmic(tickValue, index, ticks) {\n    if (tickValue === 0) {\n      return '0';\n    }\n    const remain = tickValue / (Math.pow(10, Math.floor(log10(tickValue))));\n    if (remain === 1 || remain === 2 || remain === 5) {\n      return formatters.numeric.call(this, tickValue, index, ticks);\n    }\n    return '';\n  }\n};\nfunction calculateDelta(tickValue, ticks) {\n  let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n  if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n    delta = tickValue - Math.floor(tickValue);\n  }\n  return delta;\n}\nvar Ticks = {formatters};\n\ndefaults.set('scale', {\n  display: true,\n  offset: false,\n  reverse: false,\n  beginAtZero: false,\n  bounds: 'ticks',\n  grace: 0,\n  grid: {\n    display: true,\n    lineWidth: 1,\n    drawBorder: true,\n    drawOnChartArea: true,\n    drawTicks: true,\n    tickLength: 8,\n    tickWidth: (_ctx, options) => options.lineWidth,\n    tickColor: (_ctx, options) => options.color,\n    offset: false,\n    borderDash: [],\n    borderDashOffset: 0.0,\n    borderWidth: 1\n  },\n  title: {\n    display: false,\n    text: '',\n    padding: {\n      top: 4,\n      bottom: 4\n    }\n  },\n  ticks: {\n    minRotation: 0,\n    maxRotation: 50,\n    mirror: false,\n    textStrokeWidth: 0,\n    textStrokeColor: '',\n    padding: 3,\n    display: true,\n    autoSkip: true,\n    autoSkipPadding: 3,\n    labelOffset: 0,\n    callback: Ticks.formatters.values,\n    minor: {},\n    major: {},\n    align: 'center',\n    crossAlign: 'near',\n    showLabelBackdrop: false,\n    backdropColor: 'rgba(255, 255, 255, 0.75)',\n    backdropPadding: 2,\n  }\n});\ndefaults.route('scale.ticks', 'color', '', 'color');\ndefaults.route('scale.grid', 'color', '', 'borderColor');\ndefaults.route('scale.grid', 'borderColor', '', 'borderColor');\ndefaults.route('scale.title', 'color', '', 'color');\ndefaults.describe('scale', {\n  _fallback: false,\n  _scriptable: (name) => !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n  _indexable: (name) => name !== 'borderDash' && name !== 'tickBorderDash',\n});\ndefaults.describe('scales', {\n  _fallback: 'scale',\n});\ndefaults.describe('scale.ticks', {\n  _scriptable: (name) => name !== 'backdropPadding' && name !== 'callback',\n  _indexable: (name) => name !== 'backdropPadding',\n});\n\nfunction autoSkip(scale, ticks) {\n  const tickOpts = scale.options.ticks;\n  const ticksLimit = tickOpts.maxTicksLimit || determineMaxTicks(scale);\n  const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n  const numMajorIndices = majorIndices.length;\n  const first = majorIndices[0];\n  const last = majorIndices[numMajorIndices - 1];\n  const newTicks = [];\n  if (numMajorIndices > ticksLimit) {\n    skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n    return newTicks;\n  }\n  const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n  if (numMajorIndices > 0) {\n    let i, ilen;\n    const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n    skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n    for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n      skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n    }\n    skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n    return newTicks;\n  }\n  skip(ticks, newTicks, spacing);\n  return newTicks;\n}\nfunction determineMaxTicks(scale) {\n  const offset = scale.options.offset;\n  const tickLength = scale._tickSize();\n  const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n  const maxChart = scale._maxLength / tickLength;\n  return Math.floor(Math.min(maxScale, maxChart));\n}\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n  const evenMajorSpacing = getEvenSpacing(majorIndices);\n  const spacing = ticks.length / ticksLimit;\n  if (!evenMajorSpacing) {\n    return Math.max(spacing, 1);\n  }\n  const factors = _factorize(evenMajorSpacing);\n  for (let i = 0, ilen = factors.length - 1; i < ilen; i++) {\n    const factor = factors[i];\n    if (factor > spacing) {\n      return factor;\n    }\n  }\n  return Math.max(spacing, 1);\n}\nfunction getMajorIndices(ticks) {\n  const result = [];\n  let i, ilen;\n  for (i = 0, ilen = ticks.length; i < ilen; i++) {\n    if (ticks[i].major) {\n      result.push(i);\n    }\n  }\n  return result;\n}\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n  let count = 0;\n  let next = majorIndices[0];\n  let i;\n  spacing = Math.ceil(spacing);\n  for (i = 0; i < ticks.length; i++) {\n    if (i === next) {\n      newTicks.push(ticks[i]);\n      count++;\n      next = majorIndices[count * spacing];\n    }\n  }\n}\nfunction skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n  const start = valueOrDefault(majorStart, 0);\n  const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n  let count = 0;\n  let length, i, next;\n  spacing = Math.ceil(spacing);\n  if (majorEnd) {\n    length = majorEnd - majorStart;\n    spacing = length / Math.floor(length / spacing);\n  }\n  next = start;\n  while (next < 0) {\n    count++;\n    next = Math.round(start + count * spacing);\n  }\n  for (i = Math.max(start, 0); i < end; i++) {\n    if (i === next) {\n      newTicks.push(ticks[i]);\n      count++;\n      next = Math.round(start + count * spacing);\n    }\n  }\n}\nfunction getEvenSpacing(arr) {\n  const len = arr.length;\n  let i, diff;\n  if (len < 2) {\n    return false;\n  }\n  for (diff = arr[0], i = 1; i < len; ++i) {\n    if (arr[i] - arr[i - 1] !== diff) {\n      return false;\n    }\n  }\n  return diff;\n}\n\nconst reverseAlign = (align) => align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset) => edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nfunction sample(arr, numItems) {\n  const result = [];\n  const increment = arr.length / numItems;\n  const len = arr.length;\n  let i = 0;\n  for (; i < len; i += increment) {\n    result.push(arr[Math.floor(i)]);\n  }\n  return result;\n}\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\n  const length = scale.ticks.length;\n  const validIndex = Math.min(index, length - 1);\n  const start = scale._startPixel;\n  const end = scale._endPixel;\n  const epsilon = 1e-6;\n  let lineValue = scale.getPixelForTick(validIndex);\n  let offset;\n  if (offsetGridLines) {\n    if (length === 1) {\n      offset = Math.max(lineValue - start, end - lineValue);\n    } else if (index === 0) {\n      offset = (scale.getPixelForTick(1) - lineValue) / 2;\n    } else {\n      offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n    }\n    lineValue += validIndex < index ? offset : -offset;\n    if (lineValue < start - epsilon || lineValue > end + epsilon) {\n      return;\n    }\n  }\n  return lineValue;\n}\nfunction garbageCollect(caches, length) {\n  each(caches, (cache) => {\n    const gc = cache.gc;\n    const gcLen = gc.length / 2;\n    let i;\n    if (gcLen > length) {\n      for (i = 0; i < gcLen; ++i) {\n        delete cache.data[gc[i]];\n      }\n      gc.splice(0, gcLen);\n    }\n  });\n}\nfunction getTickMarkLength(options) {\n  return options.drawTicks ? options.tickLength : 0;\n}\nfunction getTitleHeight(options, fallback) {\n  if (!options.display) {\n    return 0;\n  }\n  const font = toFont(options.font, fallback);\n  const padding = toPadding(options.padding);\n  const lines = isArray(options.text) ? options.text.length : 1;\n  return (lines * font.lineHeight) + padding.height;\n}\nfunction createScaleContext(parent, scale) {\n  return Object.assign(Object.create(parent), {\n    scale,\n    type: 'scale'\n  });\n}\nfunction createTickContext(parent, index, tick) {\n  return Object.assign(Object.create(parent), {\n    tick,\n    index,\n    type: 'tick'\n  });\n}\nfunction titleAlign(align, position, reverse) {\n  let ret = _toLeftRightCenter(align);\n  if ((reverse && position !== 'right') || (!reverse && position === 'right')) {\n    ret = reverseAlign(ret);\n  }\n  return ret;\n}\nfunction titleArgs(scale, offset, position, align) {\n  const {top, left, bottom, right, chart} = scale;\n  const {chartArea, scales} = chart;\n  let rotation = 0;\n  let maxWidth, titleX, titleY;\n  const height = bottom - top;\n  const width = right - left;\n  if (scale.isHorizontal()) {\n    titleX = _alignStartEnd(align, left, right);\n    if (isObject(position)) {\n      const positionAxisID = Object.keys(position)[0];\n      const value = position[positionAxisID];\n      titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n    } else if (position === 'center') {\n      titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n    } else {\n      titleY = offsetFromEdge(scale, position, offset);\n    }\n    maxWidth = right - left;\n  } else {\n    if (isObject(position)) {\n      const positionAxisID = Object.keys(position)[0];\n      const value = position[positionAxisID];\n      titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n    } else if (position === 'center') {\n      titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n    } else {\n      titleX = offsetFromEdge(scale, position, offset);\n    }\n    titleY = _alignStartEnd(align, bottom, top);\n    rotation = position === 'left' ? -HALF_PI : HALF_PI;\n  }\n  return {titleX, titleY, maxWidth, rotation};\n}\nclass Scale extends Element {\n  constructor(cfg) {\n    super();\n    this.id = cfg.id;\n    this.type = cfg.type;\n    this.options = undefined;\n    this.ctx = cfg.ctx;\n    this.chart = cfg.chart;\n    this.top = undefined;\n    this.bottom = undefined;\n    this.left = undefined;\n    this.right = undefined;\n    this.width = undefined;\n    this.height = undefined;\n    this._margins = {\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    };\n    this.maxWidth = undefined;\n    this.maxHeight = undefined;\n    this.paddingTop = undefined;\n    this.paddingBottom = undefined;\n    this.paddingLeft = undefined;\n    this.paddingRight = undefined;\n    this.axis = undefined;\n    this.labelRotation = undefined;\n    this.min = undefined;\n    this.max = undefined;\n    this._range = undefined;\n    this.ticks = [];\n    this._gridLineItems = null;\n    this._labelItems = null;\n    this._labelSizes = null;\n    this._length = 0;\n    this._maxLength = 0;\n    this._longestTextCache = {};\n    this._startPixel = undefined;\n    this._endPixel = undefined;\n    this._reversePixels = false;\n    this._userMax = undefined;\n    this._userMin = undefined;\n    this._suggestedMax = undefined;\n    this._suggestedMin = undefined;\n    this._ticksLength = 0;\n    this._borderValue = 0;\n    this._cache = {};\n    this._dataLimitsCached = false;\n    this.$context = undefined;\n  }\n  init(options) {\n    const me = this;\n    me.options = options.setContext(me.getContext());\n    me.axis = options.axis;\n    me._userMin = me.parse(options.min);\n    me._userMax = me.parse(options.max);\n    me._suggestedMin = me.parse(options.suggestedMin);\n    me._suggestedMax = me.parse(options.suggestedMax);\n  }\n  parse(raw, index) {\n    return raw;\n  }\n  getUserBounds() {\n    let {_userMin, _userMax, _suggestedMin, _suggestedMax} = this;\n    _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n    _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n    _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n    _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n    return {\n      min: finiteOrDefault(_userMin, _suggestedMin),\n      max: finiteOrDefault(_userMax, _suggestedMax),\n      minDefined: isNumberFinite(_userMin),\n      maxDefined: isNumberFinite(_userMax)\n    };\n  }\n  getMinMax(canStack) {\n    const me = this;\n    let {min, max, minDefined, maxDefined} = me.getUserBounds();\n    let range;\n    if (minDefined && maxDefined) {\n      return {min, max};\n    }\n    const metas = me.getMatchingVisibleMetas();\n    for (let i = 0, ilen = metas.length; i < ilen; ++i) {\n      range = metas[i].controller.getMinMax(me, canStack);\n      if (!minDefined) {\n        min = Math.min(min, range.min);\n      }\n      if (!maxDefined) {\n        max = Math.max(max, range.max);\n      }\n    }\n    return {\n      min: finiteOrDefault(min, finiteOrDefault(max, min)),\n      max: finiteOrDefault(max, finiteOrDefault(min, max))\n    };\n  }\n  getPadding() {\n    const me = this;\n    return {\n      left: me.paddingLeft || 0,\n      top: me.paddingTop || 0,\n      right: me.paddingRight || 0,\n      bottom: me.paddingBottom || 0\n    };\n  }\n  getTicks() {\n    return this.ticks;\n  }\n  getLabels() {\n    const data = this.chart.data;\n    return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n  }\n  beforeLayout() {\n    this._cache = {};\n    this._dataLimitsCached = false;\n  }\n  beforeUpdate() {\n    callback(this.options.beforeUpdate, [this]);\n  }\n  update(maxWidth, maxHeight, margins) {\n    const me = this;\n    const tickOpts = me.options.ticks;\n    const sampleSize = tickOpts.sampleSize;\n    me.beforeUpdate();\n    me.maxWidth = maxWidth;\n    me.maxHeight = maxHeight;\n    me._margins = margins = Object.assign({\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    }, margins);\n    me.ticks = null;\n    me._labelSizes = null;\n    me._gridLineItems = null;\n    me._labelItems = null;\n    me.beforeSetDimensions();\n    me.setDimensions();\n    me.afterSetDimensions();\n    me._maxLength = me.isHorizontal()\n      ? me.width + margins.left + margins.right\n      : me.height + margins.top + margins.bottom;\n    if (!me._dataLimitsCached) {\n      me.beforeDataLimits();\n      me.determineDataLimits();\n      me.afterDataLimits();\n      me._range = _addGrace(me, me.options.grace);\n      me._dataLimitsCached = true;\n    }\n    me.beforeBuildTicks();\n    me.ticks = me.buildTicks() || [];\n    me.afterBuildTicks();\n    const samplingEnabled = sampleSize < me.ticks.length;\n    me._convertTicksToLabels(samplingEnabled ? sample(me.ticks, sampleSize) : me.ticks);\n    me.configure();\n    me.beforeCalculateLabelRotation();\n    me.calculateLabelRotation();\n    me.afterCalculateLabelRotation();\n    if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n      me.ticks = autoSkip(me, me.ticks);\n      me._labelSizes = null;\n    }\n    if (samplingEnabled) {\n      me._convertTicksToLabels(me.ticks);\n    }\n    me.beforeFit();\n    me.fit();\n    me.afterFit();\n    me.afterUpdate();\n  }\n  configure() {\n    const me = this;\n    let reversePixels = me.options.reverse;\n    let startPixel, endPixel;\n    if (me.isHorizontal()) {\n      startPixel = me.left;\n      endPixel = me.right;\n    } else {\n      startPixel = me.top;\n      endPixel = me.bottom;\n      reversePixels = !reversePixels;\n    }\n    me._startPixel = startPixel;\n    me._endPixel = endPixel;\n    me._reversePixels = reversePixels;\n    me._length = endPixel - startPixel;\n    me._alignToPixels = me.options.alignToPixels;\n  }\n  afterUpdate() {\n    callback(this.options.afterUpdate, [this]);\n  }\n  beforeSetDimensions() {\n    callback(this.options.beforeSetDimensions, [this]);\n  }\n  setDimensions() {\n    const me = this;\n    if (me.isHorizontal()) {\n      me.width = me.maxWidth;\n      me.left = 0;\n      me.right = me.width;\n    } else {\n      me.height = me.maxHeight;\n      me.top = 0;\n      me.bottom = me.height;\n    }\n    me.paddingLeft = 0;\n    me.paddingTop = 0;\n    me.paddingRight = 0;\n    me.paddingBottom = 0;\n  }\n  afterSetDimensions() {\n    callback(this.options.afterSetDimensions, [this]);\n  }\n  _callHooks(name) {\n    const me = this;\n    me.chart.notifyPlugins(name, me.getContext());\n    callback(me.options[name], [me]);\n  }\n  beforeDataLimits() {\n    this._callHooks('beforeDataLimits');\n  }\n  determineDataLimits() {}\n  afterDataLimits() {\n    this._callHooks('afterDataLimits');\n  }\n  beforeBuildTicks() {\n    this._callHooks('beforeBuildTicks');\n  }\n  buildTicks() {\n    return [];\n  }\n  afterBuildTicks() {\n    this._callHooks('afterBuildTicks');\n  }\n  beforeTickToLabelConversion() {\n    callback(this.options.beforeTickToLabelConversion, [this]);\n  }\n  generateTickLabels(ticks) {\n    const me = this;\n    const tickOpts = me.options.ticks;\n    let i, ilen, tick;\n    for (i = 0, ilen = ticks.length; i < ilen; i++) {\n      tick = ticks[i];\n      tick.label = callback(tickOpts.callback, [tick.value, i, ticks], me);\n    }\n  }\n  afterTickToLabelConversion() {\n    callback(this.options.afterTickToLabelConversion, [this]);\n  }\n  beforeCalculateLabelRotation() {\n    callback(this.options.beforeCalculateLabelRotation, [this]);\n  }\n  calculateLabelRotation() {\n    const me = this;\n    const options = me.options;\n    const tickOpts = options.ticks;\n    const numTicks = me.ticks.length;\n    const minRotation = tickOpts.minRotation || 0;\n    const maxRotation = tickOpts.maxRotation;\n    let labelRotation = minRotation;\n    let tickWidth, maxHeight, maxLabelDiagonal;\n    if (!me._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !me.isHorizontal()) {\n      me.labelRotation = minRotation;\n      return;\n    }\n    const labelSizes = me._getLabelSizes();\n    const maxLabelWidth = labelSizes.widest.width;\n    const maxLabelHeight = labelSizes.highest.height;\n    const maxWidth = _limitValue(me.chart.width - maxLabelWidth, 0, me.maxWidth);\n    tickWidth = options.offset ? me.maxWidth / numTicks : maxWidth / (numTicks - 1);\n    if (maxLabelWidth + 6 > tickWidth) {\n      tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n      maxHeight = me.maxHeight - getTickMarkLength(options.grid)\n\t\t\t\t- tickOpts.padding - getTitleHeight(options.title, me.chart.options.font);\n      maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n      labelRotation = toDegrees(Math.min(\n        Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)),\n        Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))\n      ));\n      labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n    }\n    me.labelRotation = labelRotation;\n  }\n  afterCalculateLabelRotation() {\n    callback(this.options.afterCalculateLabelRotation, [this]);\n  }\n  beforeFit() {\n    callback(this.options.beforeFit, [this]);\n  }\n  fit() {\n    const me = this;\n    const minSize = {\n      width: 0,\n      height: 0\n    };\n    const {chart, options: {ticks: tickOpts, title: titleOpts, grid: gridOpts}} = me;\n    const display = me._isVisible();\n    const isHorizontal = me.isHorizontal();\n    if (display) {\n      const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n      if (isHorizontal) {\n        minSize.width = me.maxWidth;\n        minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n      } else {\n        minSize.height = me.maxHeight;\n        minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n      }\n      if (tickOpts.display && me.ticks.length) {\n        const {first, last, widest, highest} = me._getLabelSizes();\n        const tickPadding = tickOpts.padding * 2;\n        const angleRadians = toRadians(me.labelRotation);\n        const cos = Math.cos(angleRadians);\n        const sin = Math.sin(angleRadians);\n        if (isHorizontal) {\n          const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n          minSize.height = Math.min(me.maxHeight, minSize.height + labelHeight + tickPadding);\n        } else {\n          const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n          minSize.width = Math.min(me.maxWidth, minSize.width + labelWidth + tickPadding);\n        }\n        me._calculatePadding(first, last, sin, cos);\n      }\n    }\n    me._handleMargins();\n    if (isHorizontal) {\n      me.width = me._length = chart.width - me._margins.left - me._margins.right;\n      me.height = minSize.height;\n    } else {\n      me.width = minSize.width;\n      me.height = me._length = chart.height - me._margins.top - me._margins.bottom;\n    }\n  }\n  _calculatePadding(first, last, sin, cos) {\n    const me = this;\n    const {ticks: {align, padding}, position} = me.options;\n    const isRotated = me.labelRotation !== 0;\n    const labelsBelowTicks = position !== 'top' && me.axis === 'x';\n    if (me.isHorizontal()) {\n      const offsetLeft = me.getPixelForTick(0) - me.left;\n      const offsetRight = me.right - me.getPixelForTick(me.ticks.length - 1);\n      let paddingLeft = 0;\n      let paddingRight = 0;\n      if (isRotated) {\n        if (labelsBelowTicks) {\n          paddingLeft = cos * first.width;\n          paddingRight = sin * last.height;\n        } else {\n          paddingLeft = sin * first.height;\n          paddingRight = cos * last.width;\n        }\n      } else if (align === 'start') {\n        paddingRight = last.width;\n      } else if (align === 'end') {\n        paddingLeft = first.width;\n      } else {\n        paddingLeft = first.width / 2;\n        paddingRight = last.width / 2;\n      }\n      me.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * me.width / (me.width - offsetLeft), 0);\n      me.paddingRight = Math.max((paddingRight - offsetRight + padding) * me.width / (me.width - offsetRight), 0);\n    } else {\n      let paddingTop = last.height / 2;\n      let paddingBottom = first.height / 2;\n      if (align === 'start') {\n        paddingTop = 0;\n        paddingBottom = first.height;\n      } else if (align === 'end') {\n        paddingTop = last.height;\n        paddingBottom = 0;\n      }\n      me.paddingTop = paddingTop + padding;\n      me.paddingBottom = paddingBottom + padding;\n    }\n  }\n  _handleMargins() {\n    const me = this;\n    if (me._margins) {\n      me._margins.left = Math.max(me.paddingLeft, me._margins.left);\n      me._margins.top = Math.max(me.paddingTop, me._margins.top);\n      me._margins.right = Math.max(me.paddingRight, me._margins.right);\n      me._margins.bottom = Math.max(me.paddingBottom, me._margins.bottom);\n    }\n  }\n  afterFit() {\n    callback(this.options.afterFit, [this]);\n  }\n  isHorizontal() {\n    const {axis, position} = this.options;\n    return position === 'top' || position === 'bottom' || axis === 'x';\n  }\n  isFullSize() {\n    return this.options.fullSize;\n  }\n  _convertTicksToLabels(ticks) {\n    const me = this;\n    me.beforeTickToLabelConversion();\n    me.generateTickLabels(ticks);\n    let i, ilen;\n    for (i = 0, ilen = ticks.length; i < ilen; i++) {\n      if (isNullOrUndef(ticks[i].label)) {\n        ticks.splice(i, 1);\n        ilen--;\n        i--;\n      }\n    }\n    me.afterTickToLabelConversion();\n  }\n  _getLabelSizes() {\n    const me = this;\n    let labelSizes = me._labelSizes;\n    if (!labelSizes) {\n      const sampleSize = me.options.ticks.sampleSize;\n      let ticks = me.ticks;\n      if (sampleSize < ticks.length) {\n        ticks = sample(ticks, sampleSize);\n      }\n      me._labelSizes = labelSizes = me._computeLabelSizes(ticks, ticks.length);\n    }\n    return labelSizes;\n  }\n  _computeLabelSizes(ticks, length) {\n    const {ctx, _longestTextCache: caches} = this;\n    const widths = [];\n    const heights = [];\n    let widestLabelSize = 0;\n    let highestLabelSize = 0;\n    let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n    for (i = 0; i < length; ++i) {\n      label = ticks[i].label;\n      tickFont = this._resolveTickFontOptions(i);\n      ctx.font = fontString = tickFont.string;\n      cache = caches[fontString] = caches[fontString] || {data: {}, gc: []};\n      lineHeight = tickFont.lineHeight;\n      width = height = 0;\n      if (!isNullOrUndef(label) && !isArray(label)) {\n        width = _measureText(ctx, cache.data, cache.gc, width, label);\n        height = lineHeight;\n      } else if (isArray(label)) {\n        for (j = 0, jlen = label.length; j < jlen; ++j) {\n          nestedLabel = label[j];\n          if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n            width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n            height += lineHeight;\n          }\n        }\n      }\n      widths.push(width);\n      heights.push(height);\n      widestLabelSize = Math.max(width, widestLabelSize);\n      highestLabelSize = Math.max(height, highestLabelSize);\n    }\n    garbageCollect(caches, length);\n    const widest = widths.indexOf(widestLabelSize);\n    const highest = heights.indexOf(highestLabelSize);\n    const valueAt = (idx) => ({width: widths[idx] || 0, height: heights[idx] || 0});\n    return {\n      first: valueAt(0),\n      last: valueAt(length - 1),\n      widest: valueAt(widest),\n      highest: valueAt(highest),\n      widths,\n      heights,\n    };\n  }\n  getLabelForValue(value) {\n    return value;\n  }\n  getPixelForValue(value, index) {\n    return NaN;\n  }\n  getValueForPixel(pixel) {}\n  getPixelForTick(index) {\n    const ticks = this.ticks;\n    if (index < 0 || index > ticks.length - 1) {\n      return null;\n    }\n    return this.getPixelForValue(ticks[index].value);\n  }\n  getPixelForDecimal(decimal) {\n    const me = this;\n    if (me._reversePixels) {\n      decimal = 1 - decimal;\n    }\n    const pixel = me._startPixel + decimal * me._length;\n    return _int16Range(me._alignToPixels ? _alignPixel(me.chart, pixel, 0) : pixel);\n  }\n  getDecimalForPixel(pixel) {\n    const decimal = (pixel - this._startPixel) / this._length;\n    return this._reversePixels ? 1 - decimal : decimal;\n  }\n  getBasePixel() {\n    return this.getPixelForValue(this.getBaseValue());\n  }\n  getBaseValue() {\n    const {min, max} = this;\n    return min < 0 && max < 0 ? max :\n      min > 0 && max > 0 ? min :\n      0;\n  }\n  getContext(index) {\n    const me = this;\n    const ticks = me.ticks || [];\n    if (index >= 0 && index < ticks.length) {\n      const tick = ticks[index];\n      return tick.$context ||\n\t\t\t\t(tick.$context = createTickContext(me.getContext(), index, tick));\n    }\n    return me.$context ||\n\t\t\t(me.$context = createScaleContext(me.chart.getContext(), me));\n  }\n  _tickSize() {\n    const me = this;\n    const optionTicks = me.options.ticks;\n    const rot = toRadians(me.labelRotation);\n    const cos = Math.abs(Math.cos(rot));\n    const sin = Math.abs(Math.sin(rot));\n    const labelSizes = me._getLabelSizes();\n    const padding = optionTicks.autoSkipPadding || 0;\n    const w = labelSizes ? labelSizes.widest.width + padding : 0;\n    const h = labelSizes ? labelSizes.highest.height + padding : 0;\n    return me.isHorizontal()\n      ? h * cos > w * sin ? w / cos : h / sin\n      : h * sin < w * cos ? h / cos : w / sin;\n  }\n  _isVisible() {\n    const display = this.options.display;\n    if (display !== 'auto') {\n      return !!display;\n    }\n    return this.getMatchingVisibleMetas().length > 0;\n  }\n  _computeGridLineItems(chartArea) {\n    const me = this;\n    const axis = me.axis;\n    const chart = me.chart;\n    const options = me.options;\n    const {grid, position} = options;\n    const offset = grid.offset;\n    const isHorizontal = me.isHorizontal();\n    const ticks = me.ticks;\n    const ticksLength = ticks.length + (offset ? 1 : 0);\n    const tl = getTickMarkLength(grid);\n    const items = [];\n    const borderOpts = grid.setContext(me.getContext());\n    const axisWidth = borderOpts.drawBorder ? borderOpts.borderWidth : 0;\n    const axisHalfWidth = axisWidth / 2;\n    const alignBorderValue = function(pixel) {\n      return _alignPixel(chart, pixel, axisWidth);\n    };\n    let borderValue, i, lineValue, alignedLineValue;\n    let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n    if (position === 'top') {\n      borderValue = alignBorderValue(me.bottom);\n      ty1 = me.bottom - tl;\n      ty2 = borderValue - axisHalfWidth;\n      y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n      y2 = chartArea.bottom;\n    } else if (position === 'bottom') {\n      borderValue = alignBorderValue(me.top);\n      y1 = chartArea.top;\n      y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n      ty1 = borderValue + axisHalfWidth;\n      ty2 = me.top + tl;\n    } else if (position === 'left') {\n      borderValue = alignBorderValue(me.right);\n      tx1 = me.right - tl;\n      tx2 = borderValue - axisHalfWidth;\n      x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n      x2 = chartArea.right;\n    } else if (position === 'right') {\n      borderValue = alignBorderValue(me.left);\n      x1 = chartArea.left;\n      x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n      tx1 = borderValue + axisHalfWidth;\n      tx2 = me.left + tl;\n    } else if (axis === 'x') {\n      if (position === 'center') {\n        borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        borderValue = alignBorderValue(me.chart.scales[positionAxisID].getPixelForValue(value));\n      }\n      y1 = chartArea.top;\n      y2 = chartArea.bottom;\n      ty1 = borderValue + axisHalfWidth;\n      ty2 = ty1 + tl;\n    } else if (axis === 'y') {\n      if (position === 'center') {\n        borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        borderValue = alignBorderValue(me.chart.scales[positionAxisID].getPixelForValue(value));\n      }\n      tx1 = borderValue - axisHalfWidth;\n      tx2 = tx1 - tl;\n      x1 = chartArea.left;\n      x2 = chartArea.right;\n    }\n    const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n    const step = Math.max(1, Math.ceil(ticksLength / limit));\n    for (i = 0; i < ticksLength; i += step) {\n      const optsAtIndex = grid.setContext(me.getContext(i));\n      const lineWidth = optsAtIndex.lineWidth;\n      const lineColor = optsAtIndex.color;\n      const borderDash = grid.borderDash || [];\n      const borderDashOffset = optsAtIndex.borderDashOffset;\n      const tickWidth = optsAtIndex.tickWidth;\n      const tickColor = optsAtIndex.tickColor;\n      const tickBorderDash = optsAtIndex.tickBorderDash || [];\n      const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n      lineValue = getPixelForGridLine(me, i, offset);\n      if (lineValue === undefined) {\n        continue;\n      }\n      alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n      if (isHorizontal) {\n        tx1 = tx2 = x1 = x2 = alignedLineValue;\n      } else {\n        ty1 = ty2 = y1 = y2 = alignedLineValue;\n      }\n      items.push({\n        tx1,\n        ty1,\n        tx2,\n        ty2,\n        x1,\n        y1,\n        x2,\n        y2,\n        width: lineWidth,\n        color: lineColor,\n        borderDash,\n        borderDashOffset,\n        tickWidth,\n        tickColor,\n        tickBorderDash,\n        tickBorderDashOffset,\n      });\n    }\n    me._ticksLength = ticksLength;\n    me._borderValue = borderValue;\n    return items;\n  }\n  _computeLabelItems(chartArea) {\n    const me = this;\n    const axis = me.axis;\n    const options = me.options;\n    const {position, ticks: optionTicks} = options;\n    const isHorizontal = me.isHorizontal();\n    const ticks = me.ticks;\n    const {align, crossAlign, padding, mirror} = optionTicks;\n    const tl = getTickMarkLength(options.grid);\n    const tickAndPadding = tl + padding;\n    const hTickAndPadding = mirror ? -padding : tickAndPadding;\n    const rotation = -toRadians(me.labelRotation);\n    const items = [];\n    let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n    let textBaseline = 'middle';\n    if (position === 'top') {\n      y = me.bottom - hTickAndPadding;\n      textAlign = me._getXAxisLabelAlignment();\n    } else if (position === 'bottom') {\n      y = me.top + hTickAndPadding;\n      textAlign = me._getXAxisLabelAlignment();\n    } else if (position === 'left') {\n      const ret = me._getYAxisLabelAlignment(tl);\n      textAlign = ret.textAlign;\n      x = ret.x;\n    } else if (position === 'right') {\n      const ret = me._getYAxisLabelAlignment(tl);\n      textAlign = ret.textAlign;\n      x = ret.x;\n    } else if (axis === 'x') {\n      if (position === 'center') {\n        y = ((chartArea.top + chartArea.bottom) / 2) + tickAndPadding;\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        y = me.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n      }\n      textAlign = me._getXAxisLabelAlignment();\n    } else if (axis === 'y') {\n      if (position === 'center') {\n        x = ((chartArea.left + chartArea.right) / 2) - tickAndPadding;\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        x = me.chart.scales[positionAxisID].getPixelForValue(value);\n      }\n      textAlign = me._getYAxisLabelAlignment(tl).textAlign;\n    }\n    if (axis === 'y') {\n      if (align === 'start') {\n        textBaseline = 'top';\n      } else if (align === 'end') {\n        textBaseline = 'bottom';\n      }\n    }\n    const labelSizes = me._getLabelSizes();\n    for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n      tick = ticks[i];\n      label = tick.label;\n      const optsAtIndex = optionTicks.setContext(me.getContext(i));\n      pixel = me.getPixelForTick(i) + optionTicks.labelOffset;\n      font = me._resolveTickFontOptions(i);\n      lineHeight = font.lineHeight;\n      lineCount = isArray(label) ? label.length : 1;\n      const halfCount = lineCount / 2;\n      const color = optsAtIndex.color;\n      const strokeColor = optsAtIndex.textStrokeColor;\n      const strokeWidth = optsAtIndex.textStrokeWidth;\n      if (isHorizontal) {\n        x = pixel;\n        if (position === 'top') {\n          if (crossAlign === 'near' || rotation !== 0) {\n            textOffset = -lineCount * lineHeight + lineHeight / 2;\n          } else if (crossAlign === 'center') {\n            textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n          } else {\n            textOffset = -labelSizes.highest.height + lineHeight / 2;\n          }\n        } else {\n          if (crossAlign === 'near' || rotation !== 0) {\n            textOffset = lineHeight / 2;\n          } else if (crossAlign === 'center') {\n            textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n          } else {\n            textOffset = labelSizes.highest.height - lineCount * lineHeight;\n          }\n        }\n        if (mirror) {\n          textOffset *= -1;\n        }\n      } else {\n        y = pixel;\n        textOffset = (1 - lineCount) * lineHeight / 2;\n      }\n      let backdrop;\n      if (optsAtIndex.showLabelBackdrop) {\n        const labelPadding = toPadding(optsAtIndex.backdropPadding);\n        const height = labelSizes.heights[i];\n        const width = labelSizes.widths[i];\n        let top = y + textOffset - labelPadding.top;\n        let left = x - labelPadding.left;\n        switch (textBaseline) {\n        case 'middle':\n          top -= height / 2;\n          break;\n        case 'bottom':\n          top -= height;\n          break;\n        }\n        switch (textAlign) {\n        case 'center':\n          left -= width / 2;\n          break;\n        case 'right':\n          left -= width;\n          break;\n        }\n        backdrop = {\n          left,\n          top,\n          width: width + labelPadding.width,\n          height: height + labelPadding.height,\n          color: optsAtIndex.backdropColor,\n        };\n      }\n      items.push({\n        rotation,\n        label,\n        font,\n        color,\n        strokeColor,\n        strokeWidth,\n        textOffset,\n        textAlign,\n        textBaseline,\n        translation: [x, y],\n        backdrop,\n      });\n    }\n    return items;\n  }\n  _getXAxisLabelAlignment() {\n    const me = this;\n    const {position, ticks} = me.options;\n    const rotation = -toRadians(me.labelRotation);\n    if (rotation) {\n      return position === 'top' ? 'left' : 'right';\n    }\n    let align = 'center';\n    if (ticks.align === 'start') {\n      align = 'left';\n    } else if (ticks.align === 'end') {\n      align = 'right';\n    }\n    return align;\n  }\n  _getYAxisLabelAlignment(tl) {\n    const me = this;\n    const {position, ticks: {crossAlign, mirror, padding}} = me.options;\n    const labelSizes = me._getLabelSizes();\n    const tickAndPadding = tl + padding;\n    const widest = labelSizes.widest.width;\n    let textAlign;\n    let x;\n    if (position === 'left') {\n      if (mirror) {\n        x = me.right + padding;\n        if (crossAlign === 'near') {\n          textAlign = 'left';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x += (widest / 2);\n        } else {\n          textAlign = 'right';\n          x += widest;\n        }\n      } else {\n        x = me.right - tickAndPadding;\n        if (crossAlign === 'near') {\n          textAlign = 'right';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x -= (widest / 2);\n        } else {\n          textAlign = 'left';\n          x = me.left;\n        }\n      }\n    } else if (position === 'right') {\n      if (mirror) {\n        x = me.left + padding;\n        if (crossAlign === 'near') {\n          textAlign = 'right';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x -= (widest / 2);\n        } else {\n          textAlign = 'left';\n          x -= widest;\n        }\n      } else {\n        x = me.left + tickAndPadding;\n        if (crossAlign === 'near') {\n          textAlign = 'left';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x += widest / 2;\n        } else {\n          textAlign = 'right';\n          x = me.right;\n        }\n      }\n    } else {\n      textAlign = 'right';\n    }\n    return {textAlign, x};\n  }\n  _computeLabelArea() {\n    const me = this;\n    if (me.options.ticks.mirror) {\n      return;\n    }\n    const chart = me.chart;\n    const position = me.options.position;\n    if (position === 'left' || position === 'right') {\n      return {top: 0, left: me.left, bottom: chart.height, right: me.right};\n    } if (position === 'top' || position === 'bottom') {\n      return {top: me.top, left: 0, bottom: me.bottom, right: chart.width};\n    }\n  }\n  drawBackground() {\n    const {ctx, options: {backgroundColor}, left, top, width, height} = this;\n    if (backgroundColor) {\n      ctx.save();\n      ctx.fillStyle = backgroundColor;\n      ctx.fillRect(left, top, width, height);\n      ctx.restore();\n    }\n  }\n  getLineWidthForValue(value) {\n    const me = this;\n    const grid = me.options.grid;\n    if (!me._isVisible() || !grid.display) {\n      return 0;\n    }\n    const ticks = me.ticks;\n    const index = ticks.findIndex(t => t.value === value);\n    if (index >= 0) {\n      const opts = grid.setContext(me.getContext(index));\n      return opts.lineWidth;\n    }\n    return 0;\n  }\n  drawGrid(chartArea) {\n    const me = this;\n    const grid = me.options.grid;\n    const ctx = me.ctx;\n    const items = me._gridLineItems || (me._gridLineItems = me._computeGridLineItems(chartArea));\n    let i, ilen;\n    const drawLine = (p1, p2, style) => {\n      if (!style.width || !style.color) {\n        return;\n      }\n      ctx.save();\n      ctx.lineWidth = style.width;\n      ctx.strokeStyle = style.color;\n      ctx.setLineDash(style.borderDash || []);\n      ctx.lineDashOffset = style.borderDashOffset;\n      ctx.beginPath();\n      ctx.moveTo(p1.x, p1.y);\n      ctx.lineTo(p2.x, p2.y);\n      ctx.stroke();\n      ctx.restore();\n    };\n    if (grid.display) {\n      for (i = 0, ilen = items.length; i < ilen; ++i) {\n        const item = items[i];\n        if (grid.drawOnChartArea) {\n          drawLine(\n            {x: item.x1, y: item.y1},\n            {x: item.x2, y: item.y2},\n            item\n          );\n        }\n        if (grid.drawTicks) {\n          drawLine(\n            {x: item.tx1, y: item.ty1},\n            {x: item.tx2, y: item.ty2},\n            {\n              color: item.tickColor,\n              width: item.tickWidth,\n              borderDash: item.tickBorderDash,\n              borderDashOffset: item.tickBorderDashOffset\n            }\n          );\n        }\n      }\n    }\n  }\n  drawBorder() {\n    const me = this;\n    const {chart, ctx, options: {grid}} = me;\n    const borderOpts = grid.setContext(me.getContext());\n    const axisWidth = grid.drawBorder ? borderOpts.borderWidth : 0;\n    if (!axisWidth) {\n      return;\n    }\n    const lastLineWidth = grid.setContext(me.getContext(0)).lineWidth;\n    const borderValue = me._borderValue;\n    let x1, x2, y1, y2;\n    if (me.isHorizontal()) {\n      x1 = _alignPixel(chart, me.left, axisWidth) - axisWidth / 2;\n      x2 = _alignPixel(chart, me.right, lastLineWidth) + lastLineWidth / 2;\n      y1 = y2 = borderValue;\n    } else {\n      y1 = _alignPixel(chart, me.top, axisWidth) - axisWidth / 2;\n      y2 = _alignPixel(chart, me.bottom, lastLineWidth) + lastLineWidth / 2;\n      x1 = x2 = borderValue;\n    }\n    ctx.save();\n    ctx.lineWidth = borderOpts.borderWidth;\n    ctx.strokeStyle = borderOpts.borderColor;\n    ctx.beginPath();\n    ctx.moveTo(x1, y1);\n    ctx.lineTo(x2, y2);\n    ctx.stroke();\n    ctx.restore();\n  }\n  drawLabels(chartArea) {\n    const me = this;\n    const optionTicks = me.options.ticks;\n    if (!optionTicks.display) {\n      return;\n    }\n    const ctx = me.ctx;\n    const area = me._computeLabelArea();\n    if (area) {\n      clipArea(ctx, area);\n    }\n    const items = me._labelItems || (me._labelItems = me._computeLabelItems(chartArea));\n    let i, ilen;\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      const item = items[i];\n      const tickFont = item.font;\n      const label = item.label;\n      if (item.backdrop) {\n        ctx.fillStyle = item.backdrop.color;\n        ctx.fillRect(item.backdrop.left, item.backdrop.top, item.backdrop.width, item.backdrop.height);\n      }\n      let y = item.textOffset;\n      renderText(ctx, label, 0, y, tickFont, item);\n    }\n    if (area) {\n      unclipArea(ctx);\n    }\n  }\n  drawTitle() {\n    const {ctx, options: {position, title, reverse}} = this;\n    if (!title.display) {\n      return;\n    }\n    const font = toFont(title.font);\n    const padding = toPadding(title.padding);\n    const align = title.align;\n    let offset = font.lineHeight / 2;\n    if (position === 'bottom' || position === 'center' || isObject(position)) {\n      offset += padding.bottom;\n      if (isArray(title.text)) {\n        offset += font.lineHeight * (title.text.length - 1);\n      }\n    } else {\n      offset += padding.top;\n    }\n    const {titleX, titleY, maxWidth, rotation} = titleArgs(this, offset, position, align);\n    renderText(ctx, title.text, 0, 0, font, {\n      color: title.color,\n      maxWidth,\n      rotation,\n      textAlign: titleAlign(align, position, reverse),\n      textBaseline: 'middle',\n      translation: [titleX, titleY],\n    });\n  }\n  draw(chartArea) {\n    const me = this;\n    if (!me._isVisible()) {\n      return;\n    }\n    me.drawBackground();\n    me.drawGrid(chartArea);\n    me.drawBorder();\n    me.drawTitle();\n    me.drawLabels(chartArea);\n  }\n  _layers() {\n    const me = this;\n    const opts = me.options;\n    const tz = opts.ticks && opts.ticks.z || 0;\n    const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n    if (!me._isVisible() || me.draw !== Scale.prototype.draw) {\n      return [{\n        z: tz,\n        draw(chartArea) {\n          me.draw(chartArea);\n        }\n      }];\n    }\n    return [{\n      z: gz,\n      draw(chartArea) {\n        me.drawBackground();\n        me.drawGrid(chartArea);\n        me.drawTitle();\n      }\n    }, {\n      z: gz + 1,\n      draw() {\n        me.drawBorder();\n      }\n    }, {\n      z: tz,\n      draw(chartArea) {\n        me.drawLabels(chartArea);\n      }\n    }];\n  }\n  getMatchingVisibleMetas(type) {\n    const me = this;\n    const metas = me.chart.getSortedVisibleDatasetMetas();\n    const axisID = me.axis + 'AxisID';\n    const result = [];\n    let i, ilen;\n    for (i = 0, ilen = metas.length; i < ilen; ++i) {\n      const meta = metas[i];\n      if (meta[axisID] === me.id && (!type || meta.type === type)) {\n        result.push(meta);\n      }\n    }\n    return result;\n  }\n  _resolveTickFontOptions(index) {\n    const opts = this.options.ticks.setContext(this.getContext(index));\n    return toFont(opts.font);\n  }\n  _maxDigits() {\n    const me = this;\n    const fontSize = me._resolveTickFontOptions(0).lineHeight;\n    return (me.isHorizontal() ? me.width : me.height) / fontSize;\n  }\n}\n\nclass TypedRegistry {\n  constructor(type, scope, override) {\n    this.type = type;\n    this.scope = scope;\n    this.override = override;\n    this.items = Object.create(null);\n  }\n  isForType(type) {\n    return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n  }\n  register(item) {\n    const me = this;\n    const proto = Object.getPrototypeOf(item);\n    let parentScope;\n    if (isIChartComponent(proto)) {\n      parentScope = me.register(proto);\n    }\n    const items = me.items;\n    const id = item.id;\n    const scope = me.scope + '.' + id;\n    if (!id) {\n      throw new Error('class does not have id: ' + item);\n    }\n    if (id in items) {\n      return scope;\n    }\n    items[id] = item;\n    registerDefaults(item, scope, parentScope);\n    if (me.override) {\n      defaults.override(item.id, item.overrides);\n    }\n    return scope;\n  }\n  get(id) {\n    return this.items[id];\n  }\n  unregister(item) {\n    const items = this.items;\n    const id = item.id;\n    const scope = this.scope;\n    if (id in items) {\n      delete items[id];\n    }\n    if (scope && id in defaults[scope]) {\n      delete defaults[scope][id];\n      if (this.override) {\n        delete overrides[id];\n      }\n    }\n  }\n}\nfunction registerDefaults(item, scope, parentScope) {\n  const itemDefaults = merge(Object.create(null), [\n    parentScope ? defaults.get(parentScope) : {},\n    defaults.get(scope),\n    item.defaults\n  ]);\n  defaults.set(scope, itemDefaults);\n  if (item.defaultRoutes) {\n    routeDefaults(scope, item.defaultRoutes);\n  }\n  if (item.descriptors) {\n    defaults.describe(scope, item.descriptors);\n  }\n}\nfunction routeDefaults(scope, routes) {\n  Object.keys(routes).forEach(property => {\n    const propertyParts = property.split('.');\n    const sourceName = propertyParts.pop();\n    const sourceScope = [scope].concat(propertyParts).join('.');\n    const parts = routes[property].split('.');\n    const targetName = parts.pop();\n    const targetScope = parts.join('.');\n    defaults.route(sourceScope, sourceName, targetScope, targetName);\n  });\n}\nfunction isIChartComponent(proto) {\n  return 'id' in proto && 'defaults' in proto;\n}\n\nclass Registry {\n  constructor() {\n    this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n    this.elements = new TypedRegistry(Element, 'elements');\n    this.plugins = new TypedRegistry(Object, 'plugins');\n    this.scales = new TypedRegistry(Scale, 'scales');\n    this._typedRegistries = [this.controllers, this.scales, this.elements];\n  }\n  add(...args) {\n    this._each('register', args);\n  }\n  remove(...args) {\n    this._each('unregister', args);\n  }\n  addControllers(...args) {\n    this._each('register', args, this.controllers);\n  }\n  addElements(...args) {\n    this._each('register', args, this.elements);\n  }\n  addPlugins(...args) {\n    this._each('register', args, this.plugins);\n  }\n  addScales(...args) {\n    this._each('register', args, this.scales);\n  }\n  getController(id) {\n    return this._get(id, this.controllers, 'controller');\n  }\n  getElement(id) {\n    return this._get(id, this.elements, 'element');\n  }\n  getPlugin(id) {\n    return this._get(id, this.plugins, 'plugin');\n  }\n  getScale(id) {\n    return this._get(id, this.scales, 'scale');\n  }\n  removeControllers(...args) {\n    this._each('unregister', args, this.controllers);\n  }\n  removeElements(...args) {\n    this._each('unregister', args, this.elements);\n  }\n  removePlugins(...args) {\n    this._each('unregister', args, this.plugins);\n  }\n  removeScales(...args) {\n    this._each('unregister', args, this.scales);\n  }\n  _each(method, args, typedRegistry) {\n    const me = this;\n    [...args].forEach(arg => {\n      const reg = typedRegistry || me._getRegistryForType(arg);\n      if (typedRegistry || reg.isForType(arg) || (reg === me.plugins && arg.id)) {\n        me._exec(method, reg, arg);\n      } else {\n        each(arg, item => {\n          const itemReg = typedRegistry || me._getRegistryForType(item);\n          me._exec(method, itemReg, item);\n        });\n      }\n    });\n  }\n  _exec(method, registry, component) {\n    const camelMethod = _capitalize(method);\n    callback(component['before' + camelMethod], [], component);\n    registry[method](component);\n    callback(component['after' + camelMethod], [], component);\n  }\n  _getRegistryForType(type) {\n    for (let i = 0; i < this._typedRegistries.length; i++) {\n      const reg = this._typedRegistries[i];\n      if (reg.isForType(type)) {\n        return reg;\n      }\n    }\n    return this.plugins;\n  }\n  _get(id, typedRegistry, type) {\n    const item = typedRegistry.get(id);\n    if (item === undefined) {\n      throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n    }\n    return item;\n  }\n}\nvar registry = new Registry();\n\nclass PluginService {\n  constructor() {\n    this._init = [];\n  }\n  notify(chart, hook, args, filter) {\n    const me = this;\n    if (hook === 'beforeInit') {\n      me._init = me._createDescriptors(chart, true);\n      me._notify(me._init, chart, 'install');\n    }\n    const descriptors = filter ? me._descriptors(chart).filter(filter) : me._descriptors(chart);\n    const result = me._notify(descriptors, chart, hook, args);\n    if (hook === 'destroy') {\n      me._notify(descriptors, chart, 'stop');\n      me._notify(me._init, chart, 'uninstall');\n    }\n    return result;\n  }\n  _notify(descriptors, chart, hook, args) {\n    args = args || {};\n    for (const descriptor of descriptors) {\n      const plugin = descriptor.plugin;\n      const method = plugin[hook];\n      const params = [chart, args, descriptor.options];\n      if (callback(method, params, plugin) === false && args.cancelable) {\n        return false;\n      }\n    }\n    return true;\n  }\n  invalidate() {\n    if (!isNullOrUndef(this._cache)) {\n      this._oldCache = this._cache;\n      this._cache = undefined;\n    }\n  }\n  _descriptors(chart) {\n    if (this._cache) {\n      return this._cache;\n    }\n    const descriptors = this._cache = this._createDescriptors(chart);\n    this._notifyStateChanges(chart);\n    return descriptors;\n  }\n  _createDescriptors(chart, all) {\n    const config = chart && chart.config;\n    const options = valueOrDefault(config.options && config.options.plugins, {});\n    const plugins = allPlugins(config);\n    return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n  }\n  _notifyStateChanges(chart) {\n    const previousDescriptors = this._oldCache || [];\n    const descriptors = this._cache;\n    const diff = (a, b) => a.filter(x => !b.some(y => x.plugin.id === y.plugin.id));\n    this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n    this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n  }\n}\nfunction allPlugins(config) {\n  const plugins = [];\n  const keys = Object.keys(registry.plugins.items);\n  for (let i = 0; i < keys.length; i++) {\n    plugins.push(registry.getPlugin(keys[i]));\n  }\n  const local = config.plugins || [];\n  for (let i = 0; i < local.length; i++) {\n    const plugin = local[i];\n    if (plugins.indexOf(plugin) === -1) {\n      plugins.push(plugin);\n    }\n  }\n  return plugins;\n}\nfunction getOpts(options, all) {\n  if (!all && options === false) {\n    return null;\n  }\n  if (options === true) {\n    return {};\n  }\n  return options;\n}\nfunction createDescriptors(chart, plugins, options, all) {\n  const result = [];\n  const context = chart.getContext();\n  for (let i = 0; i < plugins.length; i++) {\n    const plugin = plugins[i];\n    const id = plugin.id;\n    const opts = getOpts(options[id], all);\n    if (opts === null) {\n      continue;\n    }\n    result.push({\n      plugin,\n      options: pluginOpts(chart.config, plugin, opts, context)\n    });\n  }\n  return result;\n}\nfunction pluginOpts(config, plugin, opts, context) {\n  const keys = config.pluginScopeKeys(plugin);\n  const scopes = config.getOptionScopes(opts, keys);\n  return config.createResolver(scopes, context, [''], {scriptable: false, indexable: false, allKeys: true});\n}\n\nfunction getIndexAxis(type, options) {\n  const datasetDefaults = defaults.datasets[type] || {};\n  const datasetOptions = (options.datasets || {})[type] || {};\n  return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n  let axis = id;\n  if (id === '_index_') {\n    axis = indexAxis;\n  } else if (id === '_value_') {\n    axis = indexAxis === 'x' ? 'y' : 'x';\n  }\n  return axis;\n}\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n  return axis === indexAxis ? '_index_' : '_value_';\n}\nfunction axisFromPosition(position) {\n  if (position === 'top' || position === 'bottom') {\n    return 'x';\n  }\n  if (position === 'left' || position === 'right') {\n    return 'y';\n  }\n}\nfunction determineAxis(id, scaleOptions) {\n  if (id === 'x' || id === 'y') {\n    return id;\n  }\n  return scaleOptions.axis || axisFromPosition(scaleOptions.position) || id.charAt(0).toLowerCase();\n}\nfunction mergeScaleConfig(config, options) {\n  const chartDefaults = overrides[config.type] || {scales: {}};\n  const configScales = options.scales || {};\n  const chartIndexAxis = getIndexAxis(config.type, options);\n  const firstIDs = Object.create(null);\n  const scales = Object.create(null);\n  Object.keys(configScales).forEach(id => {\n    const scaleConf = configScales[id];\n    const axis = determineAxis(id, scaleConf);\n    const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n    const defaultScaleOptions = chartDefaults.scales || {};\n    firstIDs[axis] = firstIDs[axis] || id;\n    scales[id] = mergeIf(Object.create(null), [{axis}, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n  });\n  config.data.datasets.forEach(dataset => {\n    const type = dataset.type || config.type;\n    const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n    const datasetDefaults = overrides[type] || {};\n    const defaultScaleOptions = datasetDefaults.scales || {};\n    Object.keys(defaultScaleOptions).forEach(defaultID => {\n      const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n      const id = dataset[axis + 'AxisID'] || firstIDs[axis] || axis;\n      scales[id] = scales[id] || Object.create(null);\n      mergeIf(scales[id], [{axis}, configScales[id], defaultScaleOptions[defaultID]]);\n    });\n  });\n  Object.keys(scales).forEach(key => {\n    const scale = scales[key];\n    mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n  });\n  return scales;\n}\nfunction initOptions(config) {\n  const options = config.options || (config.options = {});\n  options.plugins = valueOrDefault(options.plugins, {});\n  options.scales = mergeScaleConfig(config, options);\n}\nfunction initData(data) {\n  data = data || {};\n  data.datasets = data.datasets || [];\n  data.labels = data.labels || [];\n  return data;\n}\nfunction initConfig(config) {\n  config = config || {};\n  config.data = initData(config.data);\n  initOptions(config);\n  return config;\n}\nconst keyCache = new Map();\nconst keysCached = new Set();\nfunction cachedKeys(cacheKey, generate) {\n  let keys = keyCache.get(cacheKey);\n  if (!keys) {\n    keys = generate();\n    keyCache.set(cacheKey, keys);\n    keysCached.add(keys);\n  }\n  return keys;\n}\nconst addIfFound = (set, obj, key) => {\n  const opts = resolveObjectKey(obj, key);\n  if (opts !== undefined) {\n    set.add(opts);\n  }\n};\nclass Config {\n  constructor(config) {\n    this._config = initConfig(config);\n    this._scopeCache = new Map();\n    this._resolverCache = new Map();\n  }\n  get platform() {\n    return this._config.platform;\n  }\n  get type() {\n    return this._config.type;\n  }\n  set type(type) {\n    this._config.type = type;\n  }\n  get data() {\n    return this._config.data;\n  }\n  set data(data) {\n    this._config.data = initData(data);\n  }\n  get options() {\n    return this._config.options;\n  }\n  set options(options) {\n    this._config.options = options;\n  }\n  get plugins() {\n    return this._config.plugins;\n  }\n  update() {\n    const config = this._config;\n    this.clearCache();\n    initOptions(config);\n  }\n  clearCache() {\n    this._scopeCache.clear();\n    this._resolverCache.clear();\n  }\n  datasetScopeKeys(datasetType) {\n    return cachedKeys(datasetType,\n      () => [[\n        `datasets.${datasetType}`,\n        ''\n      ]]);\n  }\n  datasetAnimationScopeKeys(datasetType, transition) {\n    return cachedKeys(`${datasetType}.transition.${transition}`,\n      () => [\n        [\n          `datasets.${datasetType}.transitions.${transition}`,\n          `transitions.${transition}`,\n        ],\n        [\n          `datasets.${datasetType}`,\n          ''\n        ]\n      ]);\n  }\n  datasetElementScopeKeys(datasetType, elementType) {\n    return cachedKeys(`${datasetType}-${elementType}`,\n      () => [[\n        `datasets.${datasetType}.elements.${elementType}`,\n        `datasets.${datasetType}`,\n        `elements.${elementType}`,\n        ''\n      ]]);\n  }\n  pluginScopeKeys(plugin) {\n    const id = plugin.id;\n    const type = this.type;\n    return cachedKeys(`${type}-plugin-${id}`,\n      () => [[\n        `plugins.${id}`,\n        ...plugin.additionalOptionScopes || [],\n      ]]);\n  }\n  _cachedScopes(mainScope, resetCache) {\n    const _scopeCache = this._scopeCache;\n    let cache = _scopeCache.get(mainScope);\n    if (!cache || resetCache) {\n      cache = new Map();\n      _scopeCache.set(mainScope, cache);\n    }\n    return cache;\n  }\n  getOptionScopes(mainScope, keyLists, resetCache) {\n    const {options, type} = this;\n    const cache = this._cachedScopes(mainScope, resetCache);\n    const cached = cache.get(keyLists);\n    if (cached) {\n      return cached;\n    }\n    const scopes = new Set();\n    keyLists.forEach(keys => {\n      if (mainScope) {\n        scopes.add(mainScope);\n        keys.forEach(key => addIfFound(scopes, mainScope, key));\n      }\n      keys.forEach(key => addIfFound(scopes, options, key));\n      keys.forEach(key => addIfFound(scopes, overrides[type] || {}, key));\n      keys.forEach(key => addIfFound(scopes, defaults, key));\n      keys.forEach(key => addIfFound(scopes, descriptors, key));\n    });\n    const array = Array.from(scopes);\n    if (array.length === 0) {\n      array.push(Object.create(null));\n    }\n    if (keysCached.has(keyLists)) {\n      cache.set(keyLists, array);\n    }\n    return array;\n  }\n  chartOptionScopes() {\n    const {options, type} = this;\n    return [\n      options,\n      overrides[type] || {},\n      defaults.datasets[type] || {},\n      {type},\n      defaults,\n      descriptors\n    ];\n  }\n  resolveNamedOptions(scopes, names, context, prefixes = ['']) {\n    const result = {$shared: true};\n    const {resolver, subPrefixes} = getResolver(this._resolverCache, scopes, prefixes);\n    let options = resolver;\n    if (needContext(resolver, names)) {\n      result.$shared = false;\n      context = isFunction(context) ? context() : context;\n      const subResolver = this.createResolver(scopes, context, subPrefixes);\n      options = _attachContext(resolver, context, subResolver);\n    }\n    for (const prop of names) {\n      result[prop] = options[prop];\n    }\n    return result;\n  }\n  createResolver(scopes, context, prefixes = [''], descriptorDefaults) {\n    const {resolver} = getResolver(this._resolverCache, scopes, prefixes);\n    return isObject(context)\n      ? _attachContext(resolver, context, undefined, descriptorDefaults)\n      : resolver;\n  }\n}\nfunction getResolver(resolverCache, scopes, prefixes) {\n  let cache = resolverCache.get(scopes);\n  if (!cache) {\n    cache = new Map();\n    resolverCache.set(scopes, cache);\n  }\n  const cacheKey = prefixes.join();\n  let cached = cache.get(cacheKey);\n  if (!cached) {\n    const resolver = _createResolver(scopes, prefixes);\n    cached = {\n      resolver,\n      subPrefixes: prefixes.filter(p => !p.toLowerCase().includes('hover'))\n    };\n    cache.set(cacheKey, cached);\n  }\n  return cached;\n}\nfunction needContext(proxy, names) {\n  const {isScriptable, isIndexable} = _descriptors(proxy);\n  for (const prop of names) {\n    if ((isScriptable(prop) && isFunction(proxy[prop]))\n      || (isIndexable(prop) && isArray(proxy[prop]))) {\n      return true;\n    }\n  }\n  return false;\n}\n\nvar version = \"3.5.1\";\n\nconst KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];\nfunction positionIsHorizontal(position, axis) {\n  return position === 'top' || position === 'bottom' || (KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x');\n}\nfunction compare2Level(l1, l2) {\n  return function(a, b) {\n    return a[l1] === b[l1]\n      ? a[l2] - b[l2]\n      : a[l1] - b[l1];\n  };\n}\nfunction onAnimationsComplete(context) {\n  const chart = context.chart;\n  const animationOptions = chart.options.animation;\n  chart.notifyPlugins('afterRender');\n  callback(animationOptions && animationOptions.onComplete, [context], chart);\n}\nfunction onAnimationProgress(context) {\n  const chart = context.chart;\n  const animationOptions = chart.options.animation;\n  callback(animationOptions && animationOptions.onProgress, [context], chart);\n}\nfunction getCanvas(item) {\n  if (_isDomSupported() && typeof item === 'string') {\n    item = document.getElementById(item);\n  } else if (item && item.length) {\n    item = item[0];\n  }\n  if (item && item.canvas) {\n    item = item.canvas;\n  }\n  return item;\n}\nconst instances = {};\nconst getChart = (key) => {\n  const canvas = getCanvas(key);\n  return Object.values(instances).filter((c) => c.canvas === canvas).pop();\n};\nclass Chart {\n  constructor(item, userConfig) {\n    const me = this;\n    const config = this.config = new Config(userConfig);\n    const initialCanvas = getCanvas(item);\n    const existingChart = getChart(initialCanvas);\n    if (existingChart) {\n      throw new Error(\n        'Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' +\n\t\t\t\t' must be destroyed before the canvas can be reused.'\n      );\n    }\n    const options = config.createResolver(config.chartOptionScopes(), me.getContext());\n    this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n    const context = me.platform.acquireContext(initialCanvas, options.aspectRatio);\n    const canvas = context && context.canvas;\n    const height = canvas && canvas.height;\n    const width = canvas && canvas.width;\n    this.id = uid();\n    this.ctx = context;\n    this.canvas = canvas;\n    this.width = width;\n    this.height = height;\n    this._options = options;\n    this._aspectRatio = this.aspectRatio;\n    this._layers = [];\n    this._metasets = [];\n    this._stacks = undefined;\n    this.boxes = [];\n    this.currentDevicePixelRatio = undefined;\n    this.chartArea = undefined;\n    this._active = [];\n    this._lastEvent = undefined;\n    this._listeners = {};\n    this._responsiveListeners = undefined;\n    this._sortedMetasets = [];\n    this.scales = {};\n    this._plugins = new PluginService();\n    this.$proxies = {};\n    this._hiddenIndices = {};\n    this.attached = false;\n    this._animationsDisabled = undefined;\n    this.$context = undefined;\n    this._doResize = debounce(() => this.update('resize'), options.resizeDelay || 0);\n    instances[me.id] = me;\n    if (!context || !canvas) {\n      console.error(\"Failed to create chart: can't acquire context from the given item\");\n      return;\n    }\n    animator.listen(me, 'complete', onAnimationsComplete);\n    animator.listen(me, 'progress', onAnimationProgress);\n    me._initialize();\n    if (me.attached) {\n      me.update();\n    }\n  }\n  get aspectRatio() {\n    const {options: {aspectRatio, maintainAspectRatio}, width, height, _aspectRatio} = this;\n    if (!isNullOrUndef(aspectRatio)) {\n      return aspectRatio;\n    }\n    if (maintainAspectRatio && _aspectRatio) {\n      return _aspectRatio;\n    }\n    return height ? width / height : null;\n  }\n  get data() {\n    return this.config.data;\n  }\n  set data(data) {\n    this.config.data = data;\n  }\n  get options() {\n    return this._options;\n  }\n  set options(options) {\n    this.config.options = options;\n  }\n  _initialize() {\n    const me = this;\n    me.notifyPlugins('beforeInit');\n    if (me.options.responsive) {\n      me.resize();\n    } else {\n      retinaScale(me, me.options.devicePixelRatio);\n    }\n    me.bindEvents();\n    me.notifyPlugins('afterInit');\n    return me;\n  }\n  clear() {\n    clearCanvas(this.canvas, this.ctx);\n    return this;\n  }\n  stop() {\n    animator.stop(this);\n    return this;\n  }\n  resize(width, height) {\n    if (!animator.running(this)) {\n      this._resize(width, height);\n    } else {\n      this._resizeBeforeDraw = {width, height};\n    }\n  }\n  _resize(width, height) {\n    const me = this;\n    const options = me.options;\n    const canvas = me.canvas;\n    const aspectRatio = options.maintainAspectRatio && me.aspectRatio;\n    const newSize = me.platform.getMaximumSize(canvas, width, height, aspectRatio);\n    const newRatio = options.devicePixelRatio || me.platform.getDevicePixelRatio();\n    me.width = newSize.width;\n    me.height = newSize.height;\n    me._aspectRatio = me.aspectRatio;\n    if (!retinaScale(me, newRatio, true)) {\n      return;\n    }\n    me.notifyPlugins('resize', {size: newSize});\n    callback(options.onResize, [me, newSize], me);\n    if (me.attached) {\n      if (me._doResize()) {\n        me.render();\n      }\n    }\n  }\n  ensureScalesHaveIDs() {\n    const options = this.options;\n    const scalesOptions = options.scales || {};\n    each(scalesOptions, (axisOptions, axisID) => {\n      axisOptions.id = axisID;\n    });\n  }\n  buildOrUpdateScales() {\n    const me = this;\n    const options = me.options;\n    const scaleOpts = options.scales;\n    const scales = me.scales;\n    const updated = Object.keys(scales).reduce((obj, id) => {\n      obj[id] = false;\n      return obj;\n    }, {});\n    let items = [];\n    if (scaleOpts) {\n      items = items.concat(\n        Object.keys(scaleOpts).map((id) => {\n          const scaleOptions = scaleOpts[id];\n          const axis = determineAxis(id, scaleOptions);\n          const isRadial = axis === 'r';\n          const isHorizontal = axis === 'x';\n          return {\n            options: scaleOptions,\n            dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n            dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n          };\n        })\n      );\n    }\n    each(items, (item) => {\n      const scaleOptions = item.options;\n      const id = scaleOptions.id;\n      const axis = determineAxis(id, scaleOptions);\n      const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n      if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n        scaleOptions.position = item.dposition;\n      }\n      updated[id] = true;\n      let scale = null;\n      if (id in scales && scales[id].type === scaleType) {\n        scale = scales[id];\n      } else {\n        const scaleClass = registry.getScale(scaleType);\n        scale = new scaleClass({\n          id,\n          type: scaleType,\n          ctx: me.ctx,\n          chart: me\n        });\n        scales[scale.id] = scale;\n      }\n      scale.init(scaleOptions, options);\n    });\n    each(updated, (hasUpdated, id) => {\n      if (!hasUpdated) {\n        delete scales[id];\n      }\n    });\n    each(scales, (scale) => {\n      layouts.configure(me, scale, scale.options);\n      layouts.addBox(me, scale);\n    });\n  }\n  _updateMetasets() {\n    const me = this;\n    const metasets = me._metasets;\n    const numData = me.data.datasets.length;\n    const numMeta = metasets.length;\n    metasets.sort((a, b) => a.index - b.index);\n    if (numMeta > numData) {\n      for (let i = numData; i < numMeta; ++i) {\n        me._destroyDatasetMeta(i);\n      }\n      metasets.splice(numData, numMeta - numData);\n    }\n    me._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n  }\n  _removeUnreferencedMetasets() {\n    const me = this;\n    const {_metasets: metasets, data: {datasets}} = me;\n    if (metasets.length > datasets.length) {\n      delete me._stacks;\n    }\n    metasets.forEach((meta, index) => {\n      if (datasets.filter(x => x === meta._dataset).length === 0) {\n        me._destroyDatasetMeta(index);\n      }\n    });\n  }\n  buildOrUpdateControllers() {\n    const me = this;\n    const newControllers = [];\n    const datasets = me.data.datasets;\n    let i, ilen;\n    me._removeUnreferencedMetasets();\n    for (i = 0, ilen = datasets.length; i < ilen; i++) {\n      const dataset = datasets[i];\n      let meta = me.getDatasetMeta(i);\n      const type = dataset.type || me.config.type;\n      if (meta.type && meta.type !== type) {\n        me._destroyDatasetMeta(i);\n        meta = me.getDatasetMeta(i);\n      }\n      meta.type = type;\n      meta.indexAxis = dataset.indexAxis || getIndexAxis(type, me.options);\n      meta.order = dataset.order || 0;\n      meta.index = i;\n      meta.label = '' + dataset.label;\n      meta.visible = me.isDatasetVisible(i);\n      if (meta.controller) {\n        meta.controller.updateIndex(i);\n        meta.controller.linkScales();\n      } else {\n        const ControllerClass = registry.getController(type);\n        const {datasetElementType, dataElementType} = defaults.datasets[type];\n        Object.assign(ControllerClass.prototype, {\n          dataElementType: registry.getElement(dataElementType),\n          datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n        });\n        meta.controller = new ControllerClass(me, i);\n        newControllers.push(meta.controller);\n      }\n    }\n    me._updateMetasets();\n    return newControllers;\n  }\n  _resetElements() {\n    const me = this;\n    each(me.data.datasets, (dataset, datasetIndex) => {\n      me.getDatasetMeta(datasetIndex).controller.reset();\n    }, me);\n  }\n  reset() {\n    this._resetElements();\n    this.notifyPlugins('reset');\n  }\n  update(mode) {\n    const me = this;\n    const config = me.config;\n    config.update();\n    me._options = config.createResolver(config.chartOptionScopes(), me.getContext());\n    each(me.scales, (scale) => {\n      layouts.removeBox(me, scale);\n    });\n    const animsDisabled = me._animationsDisabled = !me.options.animation;\n    me.ensureScalesHaveIDs();\n    me.buildOrUpdateScales();\n    const existingEvents = new Set(Object.keys(me._listeners));\n    const newEvents = new Set(me.options.events);\n    if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== me.options.responsive) {\n      me.unbindEvents();\n      me.bindEvents();\n    }\n    me._plugins.invalidate();\n    if (me.notifyPlugins('beforeUpdate', {mode, cancelable: true}) === false) {\n      return;\n    }\n    const newControllers = me.buildOrUpdateControllers();\n    me.notifyPlugins('beforeElementsUpdate');\n    let minPadding = 0;\n    for (let i = 0, ilen = me.data.datasets.length; i < ilen; i++) {\n      const {controller} = me.getDatasetMeta(i);\n      const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n      controller.buildOrUpdateElements(reset);\n      minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n    }\n    me._minPadding = minPadding;\n    me._updateLayout(minPadding);\n    if (!animsDisabled) {\n      each(newControllers, (controller) => {\n        controller.reset();\n      });\n    }\n    me._updateDatasets(mode);\n    me.notifyPlugins('afterUpdate', {mode});\n    me._layers.sort(compare2Level('z', '_idx'));\n    if (me._lastEvent) {\n      me._eventHandler(me._lastEvent, true);\n    }\n    me.render();\n  }\n  _updateLayout(minPadding) {\n    const me = this;\n    if (me.notifyPlugins('beforeLayout', {cancelable: true}) === false) {\n      return;\n    }\n    layouts.update(me, me.width, me.height, minPadding);\n    const area = me.chartArea;\n    const noArea = area.width <= 0 || area.height <= 0;\n    me._layers = [];\n    each(me.boxes, (box) => {\n      if (noArea && box.position === 'chartArea') {\n        return;\n      }\n      if (box.configure) {\n        box.configure();\n      }\n      me._layers.push(...box._layers());\n    }, me);\n    me._layers.forEach((item, index) => {\n      item._idx = index;\n    });\n    me.notifyPlugins('afterLayout');\n  }\n  _updateDatasets(mode) {\n    const me = this;\n    const isFunction = typeof mode === 'function';\n    if (me.notifyPlugins('beforeDatasetsUpdate', {mode, cancelable: true}) === false) {\n      return;\n    }\n    for (let i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {\n      me._updateDataset(i, isFunction ? mode({datasetIndex: i}) : mode);\n    }\n    me.notifyPlugins('afterDatasetsUpdate', {mode});\n  }\n  _updateDataset(index, mode) {\n    const me = this;\n    const meta = me.getDatasetMeta(index);\n    const args = {meta, index, mode, cancelable: true};\n    if (me.notifyPlugins('beforeDatasetUpdate', args) === false) {\n      return;\n    }\n    meta.controller._update(mode);\n    args.cancelable = false;\n    me.notifyPlugins('afterDatasetUpdate', args);\n  }\n  render() {\n    const me = this;\n    if (me.notifyPlugins('beforeRender', {cancelable: true}) === false) {\n      return;\n    }\n    if (animator.has(me)) {\n      if (me.attached && !animator.running(me)) {\n        animator.start(me);\n      }\n    } else {\n      me.draw();\n      onAnimationsComplete({chart: me});\n    }\n  }\n  draw() {\n    const me = this;\n    let i;\n    if (me._resizeBeforeDraw) {\n      const {width, height} = me._resizeBeforeDraw;\n      me._resize(width, height);\n      me._resizeBeforeDraw = null;\n    }\n    me.clear();\n    if (me.width <= 0 || me.height <= 0) {\n      return;\n    }\n    if (me.notifyPlugins('beforeDraw', {cancelable: true}) === false) {\n      return;\n    }\n    const layers = me._layers;\n    for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n      layers[i].draw(me.chartArea);\n    }\n    me._drawDatasets();\n    for (; i < layers.length; ++i) {\n      layers[i].draw(me.chartArea);\n    }\n    me.notifyPlugins('afterDraw');\n  }\n  _getSortedDatasetMetas(filterVisible) {\n    const me = this;\n    const metasets = me._sortedMetasets;\n    const result = [];\n    let i, ilen;\n    for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n      const meta = metasets[i];\n      if (!filterVisible || meta.visible) {\n        result.push(meta);\n      }\n    }\n    return result;\n  }\n  getSortedVisibleDatasetMetas() {\n    return this._getSortedDatasetMetas(true);\n  }\n  _drawDatasets() {\n    const me = this;\n    if (me.notifyPlugins('beforeDatasetsDraw', {cancelable: true}) === false) {\n      return;\n    }\n    const metasets = me.getSortedVisibleDatasetMetas();\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      me._drawDataset(metasets[i]);\n    }\n    me.notifyPlugins('afterDatasetsDraw');\n  }\n  _drawDataset(meta) {\n    const me = this;\n    const ctx = me.ctx;\n    const clip = meta._clip;\n    const useClip = !clip.disabled;\n    const area = me.chartArea;\n    const args = {\n      meta,\n      index: meta.index,\n      cancelable: true\n    };\n    if (me.notifyPlugins('beforeDatasetDraw', args) === false) {\n      return;\n    }\n    if (useClip) {\n      clipArea(ctx, {\n        left: clip.left === false ? 0 : area.left - clip.left,\n        right: clip.right === false ? me.width : area.right + clip.right,\n        top: clip.top === false ? 0 : area.top - clip.top,\n        bottom: clip.bottom === false ? me.height : area.bottom + clip.bottom\n      });\n    }\n    meta.controller.draw();\n    if (useClip) {\n      unclipArea(ctx);\n    }\n    args.cancelable = false;\n    me.notifyPlugins('afterDatasetDraw', args);\n  }\n  getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n    const method = Interaction.modes[mode];\n    if (typeof method === 'function') {\n      return method(this, e, options, useFinalPosition);\n    }\n    return [];\n  }\n  getDatasetMeta(datasetIndex) {\n    const me = this;\n    const dataset = me.data.datasets[datasetIndex];\n    const metasets = me._metasets;\n    let meta = metasets.filter(x => x && x._dataset === dataset).pop();\n    if (!meta) {\n      meta = {\n        type: null,\n        data: [],\n        dataset: null,\n        controller: null,\n        hidden: null,\n        xAxisID: null,\n        yAxisID: null,\n        order: dataset && dataset.order || 0,\n        index: datasetIndex,\n        _dataset: dataset,\n        _parsed: [],\n        _sorted: false\n      };\n      metasets.push(meta);\n    }\n    return meta;\n  }\n  getContext() {\n    return this.$context || (this.$context = {chart: this, type: 'chart'});\n  }\n  getVisibleDatasetCount() {\n    return this.getSortedVisibleDatasetMetas().length;\n  }\n  isDatasetVisible(datasetIndex) {\n    const dataset = this.data.datasets[datasetIndex];\n    if (!dataset) {\n      return false;\n    }\n    const meta = this.getDatasetMeta(datasetIndex);\n    return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n  }\n  setDatasetVisibility(datasetIndex, visible) {\n    const meta = this.getDatasetMeta(datasetIndex);\n    meta.hidden = !visible;\n  }\n  toggleDataVisibility(index) {\n    this._hiddenIndices[index] = !this._hiddenIndices[index];\n  }\n  getDataVisibility(index) {\n    return !this._hiddenIndices[index];\n  }\n  _updateVisibility(datasetIndex, dataIndex, visible) {\n    const me = this;\n    const mode = visible ? 'show' : 'hide';\n    const meta = me.getDatasetMeta(datasetIndex);\n    const anims = meta.controller._resolveAnimations(undefined, mode);\n    if (defined(dataIndex)) {\n      meta.data[dataIndex].hidden = !visible;\n      me.update();\n    } else {\n      me.setDatasetVisibility(datasetIndex, visible);\n      anims.update(meta, {visible});\n      me.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : undefined);\n    }\n  }\n  hide(datasetIndex, dataIndex) {\n    this._updateVisibility(datasetIndex, dataIndex, false);\n  }\n  show(datasetIndex, dataIndex) {\n    this._updateVisibility(datasetIndex, dataIndex, true);\n  }\n  _destroyDatasetMeta(datasetIndex) {\n    const me = this;\n    const meta = me._metasets && me._metasets[datasetIndex];\n    if (meta && meta.controller) {\n      meta.controller._destroy();\n      delete me._metasets[datasetIndex];\n    }\n  }\n  destroy() {\n    const me = this;\n    const {canvas, ctx} = me;\n    let i, ilen;\n    me.stop();\n    animator.remove(me);\n    for (i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {\n      me._destroyDatasetMeta(i);\n    }\n    me.config.clearCache();\n    if (canvas) {\n      me.unbindEvents();\n      clearCanvas(canvas, ctx);\n      me.platform.releaseContext(ctx);\n      me.canvas = null;\n      me.ctx = null;\n    }\n    me.notifyPlugins('destroy');\n    delete instances[me.id];\n  }\n  toBase64Image(...args) {\n    return this.canvas.toDataURL(...args);\n  }\n  bindEvents() {\n    this.bindUserEvents();\n    if (this.options.responsive) {\n      this.bindResponsiveEvents();\n    } else {\n      this.attached = true;\n    }\n  }\n  bindUserEvents() {\n    const me = this;\n    const listeners = me._listeners;\n    const platform = me.platform;\n    const _add = (type, listener) => {\n      platform.addEventListener(me, type, listener);\n      listeners[type] = listener;\n    };\n    const listener = function(e, x, y) {\n      e.offsetX = x;\n      e.offsetY = y;\n      me._eventHandler(e);\n    };\n    each(me.options.events, (type) => _add(type, listener));\n  }\n  bindResponsiveEvents() {\n    const me = this;\n    if (!me._responsiveListeners) {\n      me._responsiveListeners = {};\n    }\n    const listeners = me._responsiveListeners;\n    const platform = me.platform;\n    const _add = (type, listener) => {\n      platform.addEventListener(me, type, listener);\n      listeners[type] = listener;\n    };\n    const _remove = (type, listener) => {\n      if (listeners[type]) {\n        platform.removeEventListener(me, type, listener);\n        delete listeners[type];\n      }\n    };\n    const listener = (width, height) => {\n      if (me.canvas) {\n        me.resize(width, height);\n      }\n    };\n    let detached;\n    const attached = () => {\n      _remove('attach', attached);\n      me.attached = true;\n      me.resize();\n      _add('resize', listener);\n      _add('detach', detached);\n    };\n    detached = () => {\n      me.attached = false;\n      _remove('resize', listener);\n      _add('attach', attached);\n    };\n    if (platform.isAttached(me.canvas)) {\n      attached();\n    } else {\n      detached();\n    }\n  }\n  unbindEvents() {\n    const me = this;\n    each(me._listeners, (listener, type) => {\n      me.platform.removeEventListener(me, type, listener);\n    });\n    me._listeners = {};\n    each(me._responsiveListeners, (listener, type) => {\n      me.platform.removeEventListener(me, type, listener);\n    });\n    me._responsiveListeners = undefined;\n  }\n  updateHoverStyle(items, mode, enabled) {\n    const prefix = enabled ? 'set' : 'remove';\n    let meta, item, i, ilen;\n    if (mode === 'dataset') {\n      meta = this.getDatasetMeta(items[0].datasetIndex);\n      meta.controller['_' + prefix + 'DatasetHoverStyle']();\n    }\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      item = items[i];\n      const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n      if (controller) {\n        controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n      }\n    }\n  }\n  getActiveElements() {\n    return this._active || [];\n  }\n  setActiveElements(activeElements) {\n    const me = this;\n    const lastActive = me._active || [];\n    const active = activeElements.map(({datasetIndex, index}) => {\n      const meta = me.getDatasetMeta(datasetIndex);\n      if (!meta) {\n        throw new Error('No dataset found at index ' + datasetIndex);\n      }\n      return {\n        datasetIndex,\n        element: meta.data[index],\n        index,\n      };\n    });\n    const changed = !_elementsEqual(active, lastActive);\n    if (changed) {\n      me._active = active;\n      me._updateHoverStyles(active, lastActive);\n    }\n  }\n  notifyPlugins(hook, args, filter) {\n    return this._plugins.notify(this, hook, args, filter);\n  }\n  _updateHoverStyles(active, lastActive, replay) {\n    const me = this;\n    const hoverOptions = me.options.hover;\n    const diff = (a, b) => a.filter(x => !b.some(y => x.datasetIndex === y.datasetIndex && x.index === y.index));\n    const deactivated = diff(lastActive, active);\n    const activated = replay ? active : diff(active, lastActive);\n    if (deactivated.length) {\n      me.updateHoverStyle(deactivated, hoverOptions.mode, false);\n    }\n    if (activated.length && hoverOptions.mode) {\n      me.updateHoverStyle(activated, hoverOptions.mode, true);\n    }\n  }\n  _eventHandler(e, replay) {\n    const me = this;\n    const args = {event: e, replay, cancelable: true};\n    const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.type);\n    if (me.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n      return;\n    }\n    const changed = me._handleEvent(e, replay);\n    args.cancelable = false;\n    me.notifyPlugins('afterEvent', args, eventFilter);\n    if (changed || args.changed) {\n      me.render();\n    }\n    return me;\n  }\n  _handleEvent(e, replay) {\n    const me = this;\n    const {_active: lastActive = [], options} = me;\n    const hoverOptions = options.hover;\n    const useFinalPosition = replay;\n    let active = [];\n    let changed = false;\n    let lastEvent = null;\n    if (e.type !== 'mouseout') {\n      active = me.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n      lastEvent = e.type === 'click' ? me._lastEvent : e;\n    }\n    me._lastEvent = null;\n    if (_isPointInArea(e, me.chartArea, me._minPadding)) {\n      callback(options.onHover, [e, active, me], me);\n      if (e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu') {\n        callback(options.onClick, [e, active, me], me);\n      }\n    }\n    changed = !_elementsEqual(active, lastActive);\n    if (changed || replay) {\n      me._active = active;\n      me._updateHoverStyles(active, lastActive, replay);\n    }\n    me._lastEvent = lastEvent;\n    return changed;\n  }\n}\nconst invalidatePlugins = () => each(Chart.instances, (chart) => chart._plugins.invalidate());\nconst enumerable = true;\nObject.defineProperties(Chart, {\n  defaults: {\n    enumerable,\n    value: defaults\n  },\n  instances: {\n    enumerable,\n    value: instances\n  },\n  overrides: {\n    enumerable,\n    value: overrides\n  },\n  registry: {\n    enumerable,\n    value: registry\n  },\n  version: {\n    enumerable,\n    value: version\n  },\n  getChart: {\n    enumerable,\n    value: getChart\n  },\n  register: {\n    enumerable,\n    value: (...items) => {\n      registry.add(...items);\n      invalidatePlugins();\n    }\n  },\n  unregister: {\n    enumerable,\n    value: (...items) => {\n      registry.remove(...items);\n      invalidatePlugins();\n    }\n  }\n});\n\nfunction clipArc(ctx, element, endAngle) {\n  const {startAngle, pixelMargin, x, y, outerRadius, innerRadius} = element;\n  let angleMargin = pixelMargin / outerRadius;\n  ctx.beginPath();\n  ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n  if (innerRadius > pixelMargin) {\n    angleMargin = pixelMargin / innerRadius;\n    ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n  } else {\n    ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n  }\n  ctx.closePath();\n  ctx.clip();\n}\nfunction toRadiusCorners(value) {\n  return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\nfunction parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n  const o = toRadiusCorners(arc.options.borderRadius);\n  const halfThickness = (outerRadius - innerRadius) / 2;\n  const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n  const computeOuterLimit = (val) => {\n    const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n    return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n  };\n  return {\n    outerStart: computeOuterLimit(o.outerStart),\n    outerEnd: computeOuterLimit(o.outerEnd),\n    innerStart: _limitValue(o.innerStart, 0, innerLimit),\n    innerEnd: _limitValue(o.innerEnd, 0, innerLimit),\n  };\n}\nfunction rThetaToXY(r, theta, x, y) {\n  return {\n    x: x + r * Math.cos(theta),\n    y: y + r * Math.sin(theta),\n  };\n}\nfunction pathArc(ctx, element, offset, spacing, end) {\n  const {x, y, startAngle: start, pixelMargin, innerRadius: innerR} = element;\n  const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n  const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n  let spacingOffset = 0;\n  const alpha = end - start;\n  if (spacing) {\n    const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n    const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n    const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n    const adjustedAngle = avNogSpacingRadius !== 0 ? (alpha * avNogSpacingRadius) / (avNogSpacingRadius + spacing) : alpha;\n    spacingOffset = (alpha - adjustedAngle) / 2;\n  }\n  const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n  const angleOffset = (alpha - beta) / 2;\n  const startAngle = start + angleOffset + spacingOffset;\n  const endAngle = end - angleOffset - spacingOffset;\n  const {outerStart, outerEnd, innerStart, innerEnd} = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle);\n  const outerStartAdjustedRadius = outerRadius - outerStart;\n  const outerEndAdjustedRadius = outerRadius - outerEnd;\n  const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n  const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n  const innerStartAdjustedRadius = innerRadius + innerStart;\n  const innerEndAdjustedRadius = innerRadius + innerEnd;\n  const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n  const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n  ctx.beginPath();\n  ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerEndAdjustedAngle);\n  if (outerEnd > 0) {\n    const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n    ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n  }\n  const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n  ctx.lineTo(p4.x, p4.y);\n  if (innerEnd > 0) {\n    const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n    ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n  }\n  ctx.arc(x, y, innerRadius, endAngle - (innerEnd / innerRadius), startAngle + (innerStart / innerRadius), true);\n  if (innerStart > 0) {\n    const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n    ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n  }\n  const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n  ctx.lineTo(p8.x, p8.y);\n  if (outerStart > 0) {\n    const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n    ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n  }\n  ctx.closePath();\n}\nfunction drawArc(ctx, element, offset, spacing) {\n  const {fullCircles, startAngle, circumference} = element;\n  let endAngle = element.endAngle;\n  if (fullCircles) {\n    pathArc(ctx, element, offset, spacing, startAngle + TAU);\n    for (let i = 0; i < fullCircles; ++i) {\n      ctx.fill();\n    }\n    if (!isNaN(circumference)) {\n      endAngle = startAngle + circumference % TAU;\n      if (circumference % TAU === 0) {\n        endAngle += TAU;\n      }\n    }\n  }\n  pathArc(ctx, element, offset, spacing, endAngle);\n  ctx.fill();\n  return endAngle;\n}\nfunction drawFullCircleBorders(ctx, element, inner) {\n  const {x, y, startAngle, pixelMargin, fullCircles} = element;\n  const outerRadius = Math.max(element.outerRadius - pixelMargin, 0);\n  const innerRadius = element.innerRadius + pixelMargin;\n  let i;\n  if (inner) {\n    clipArc(ctx, element, startAngle + TAU);\n  }\n  ctx.beginPath();\n  ctx.arc(x, y, innerRadius, startAngle + TAU, startAngle, true);\n  for (i = 0; i < fullCircles; ++i) {\n    ctx.stroke();\n  }\n  ctx.beginPath();\n  ctx.arc(x, y, outerRadius, startAngle, startAngle + TAU);\n  for (i = 0; i < fullCircles; ++i) {\n    ctx.stroke();\n  }\n}\nfunction drawBorder(ctx, element, offset, spacing, endAngle) {\n  const {options} = element;\n  const inner = options.borderAlign === 'inner';\n  if (!options.borderWidth) {\n    return;\n  }\n  if (inner) {\n    ctx.lineWidth = options.borderWidth * 2;\n    ctx.lineJoin = 'round';\n  } else {\n    ctx.lineWidth = options.borderWidth;\n    ctx.lineJoin = 'bevel';\n  }\n  if (element.fullCircles) {\n    drawFullCircleBorders(ctx, element, inner);\n  }\n  if (inner) {\n    clipArc(ctx, element, endAngle);\n  }\n  pathArc(ctx, element, offset, spacing, endAngle);\n  ctx.stroke();\n}\nclass ArcElement extends Element {\n  constructor(cfg) {\n    super();\n    this.options = undefined;\n    this.circumference = undefined;\n    this.startAngle = undefined;\n    this.endAngle = undefined;\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n    this.pixelMargin = 0;\n    this.fullCircles = 0;\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n  inRange(chartX, chartY, useFinalPosition) {\n    const point = this.getProps(['x', 'y'], useFinalPosition);\n    const {angle, distance} = getAngleFromPoint(point, {x: chartX, y: chartY});\n    const {startAngle, endAngle, innerRadius, outerRadius, circumference} = this.getProps([\n      'startAngle',\n      'endAngle',\n      'innerRadius',\n      'outerRadius',\n      'circumference'\n    ], useFinalPosition);\n    const rAdjust = this.options.spacing / 2;\n    const betweenAngles = circumference >= TAU || _angleBetween(angle, startAngle, endAngle);\n    const withinRadius = (distance >= innerRadius + rAdjust && distance <= outerRadius + rAdjust);\n    return (betweenAngles && withinRadius);\n  }\n  getCenterPoint(useFinalPosition) {\n    const {x, y, startAngle, endAngle, innerRadius, outerRadius} = this.getProps([\n      'x',\n      'y',\n      'startAngle',\n      'endAngle',\n      'innerRadius',\n      'outerRadius',\n      'circumference',\n    ], useFinalPosition);\n    const {offset, spacing} = this.options;\n    const halfAngle = (startAngle + endAngle) / 2;\n    const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n    return {\n      x: x + Math.cos(halfAngle) * halfRadius,\n      y: y + Math.sin(halfAngle) * halfRadius\n    };\n  }\n  tooltipPosition(useFinalPosition) {\n    return this.getCenterPoint(useFinalPosition);\n  }\n  draw(ctx) {\n    const me = this;\n    const {options, circumference} = me;\n    const offset = (options.offset || 0) / 2;\n    const spacing = (options.spacing || 0) / 2;\n    me.pixelMargin = (options.borderAlign === 'inner') ? 0.33 : 0;\n    me.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n    if (circumference === 0 || me.innerRadius < 0 || me.outerRadius < 0) {\n      return;\n    }\n    ctx.save();\n    let radiusOffset = 0;\n    if (offset) {\n      radiusOffset = offset / 2;\n      const halfAngle = (me.startAngle + me.endAngle) / 2;\n      ctx.translate(Math.cos(halfAngle) * radiusOffset, Math.sin(halfAngle) * radiusOffset);\n      if (me.circumference >= PI) {\n        radiusOffset = offset;\n      }\n    }\n    ctx.fillStyle = options.backgroundColor;\n    ctx.strokeStyle = options.borderColor;\n    const endAngle = drawArc(ctx, me, radiusOffset, spacing);\n    drawBorder(ctx, me, radiusOffset, spacing, endAngle);\n    ctx.restore();\n  }\n}\nArcElement.id = 'arc';\nArcElement.defaults = {\n  borderAlign: 'center',\n  borderColor: '#fff',\n  borderRadius: 0,\n  borderWidth: 2,\n  offset: 0,\n  spacing: 0,\n  angle: undefined,\n};\nArcElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor'\n};\n\nfunction setStyle(ctx, options, style = options) {\n  ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n  ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n  ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n  ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n  ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n  ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\nfunction lineTo(ctx, previous, target) {\n  ctx.lineTo(target.x, target.y);\n}\nfunction getLineMethod(options) {\n  if (options.stepped) {\n    return _steppedLineTo;\n  }\n  if (options.tension || options.cubicInterpolationMode === 'monotone') {\n    return _bezierCurveTo;\n  }\n  return lineTo;\n}\nfunction pathVars(points, segment, params = {}) {\n  const count = points.length;\n  const {start: paramsStart = 0, end: paramsEnd = count - 1} = params;\n  const {start: segmentStart, end: segmentEnd} = segment;\n  const start = Math.max(paramsStart, segmentStart);\n  const end = Math.min(paramsEnd, segmentEnd);\n  const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n  return {\n    count,\n    start,\n    loop: segment.loop,\n    ilen: end < start && !outside ? count + end - start : end - start\n  };\n}\nfunction pathSegment(ctx, line, segment, params) {\n  const {points, options} = line;\n  const {count, start, loop, ilen} = pathVars(points, segment, params);\n  const lineMethod = getLineMethod(options);\n  let {move = true, reverse} = params || {};\n  let i, point, prev;\n  for (i = 0; i <= ilen; ++i) {\n    point = points[(start + (reverse ? ilen - i : i)) % count];\n    if (point.skip) {\n      continue;\n    } else if (move) {\n      ctx.moveTo(point.x, point.y);\n      move = false;\n    } else {\n      lineMethod(ctx, prev, point, reverse, options.stepped);\n    }\n    prev = point;\n  }\n  if (loop) {\n    point = points[(start + (reverse ? ilen : 0)) % count];\n    lineMethod(ctx, prev, point, reverse, options.stepped);\n  }\n  return !!loop;\n}\nfunction fastPathSegment(ctx, line, segment, params) {\n  const points = line.points;\n  const {count, start, ilen} = pathVars(points, segment, params);\n  const {move = true, reverse} = params || {};\n  let avgX = 0;\n  let countX = 0;\n  let i, point, prevX, minY, maxY, lastY;\n  const pointIndex = (index) => (start + (reverse ? ilen - index : index)) % count;\n  const drawX = () => {\n    if (minY !== maxY) {\n      ctx.lineTo(avgX, maxY);\n      ctx.lineTo(avgX, minY);\n      ctx.lineTo(avgX, lastY);\n    }\n  };\n  if (move) {\n    point = points[pointIndex(0)];\n    ctx.moveTo(point.x, point.y);\n  }\n  for (i = 0; i <= ilen; ++i) {\n    point = points[pointIndex(i)];\n    if (point.skip) {\n      continue;\n    }\n    const x = point.x;\n    const y = point.y;\n    const truncX = x | 0;\n    if (truncX === prevX) {\n      if (y < minY) {\n        minY = y;\n      } else if (y > maxY) {\n        maxY = y;\n      }\n      avgX = (countX * avgX + x) / ++countX;\n    } else {\n      drawX();\n      ctx.lineTo(x, y);\n      prevX = truncX;\n      countX = 0;\n      minY = maxY = y;\n    }\n    lastY = y;\n  }\n  drawX();\n}\nfunction _getSegmentMethod(line) {\n  const opts = line.options;\n  const borderDash = opts.borderDash && opts.borderDash.length;\n  const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n  return useFastPath ? fastPathSegment : pathSegment;\n}\nfunction _getInterpolationMethod(options) {\n  if (options.stepped) {\n    return _steppedInterpolation;\n  }\n  if (options.tension || options.cubicInterpolationMode === 'monotone') {\n    return _bezierInterpolation;\n  }\n  return _pointInLine;\n}\nfunction strokePathWithCache(ctx, line, start, count) {\n  let path = line._path;\n  if (!path) {\n    path = line._path = new Path2D();\n    if (line.path(path, start, count)) {\n      path.closePath();\n    }\n  }\n  setStyle(ctx, line.options);\n  ctx.stroke(path);\n}\nfunction strokePathDirect(ctx, line, start, count) {\n  const {segments, options} = line;\n  const segmentMethod = _getSegmentMethod(line);\n  for (const segment of segments) {\n    setStyle(ctx, options, segment.style);\n    ctx.beginPath();\n    if (segmentMethod(ctx, line, segment, {start, end: start + count - 1})) {\n      ctx.closePath();\n    }\n    ctx.stroke();\n  }\n}\nconst usePath2D = typeof Path2D === 'function';\nfunction draw(ctx, line, start, count) {\n  if (usePath2D && line.segments.length === 1) {\n    strokePathWithCache(ctx, line, start, count);\n  } else {\n    strokePathDirect(ctx, line, start, count);\n  }\n}\nclass LineElement extends Element {\n  constructor(cfg) {\n    super();\n    this.animated = true;\n    this.options = undefined;\n    this._loop = undefined;\n    this._fullLoop = undefined;\n    this._path = undefined;\n    this._points = undefined;\n    this._segments = undefined;\n    this._decimated = false;\n    this._pointsUpdated = false;\n    this._datasetIndex = undefined;\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n  updateControlPoints(chartArea, indexAxis) {\n    const me = this;\n    const options = me.options;\n    if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !me._pointsUpdated) {\n      const loop = options.spanGaps ? me._loop : me._fullLoop;\n      _updateBezierControlPoints(me._points, options, chartArea, loop, indexAxis);\n      me._pointsUpdated = true;\n    }\n  }\n  set points(points) {\n    const me = this;\n    me._points = points;\n    delete me._segments;\n    delete me._path;\n    me._pointsUpdated = false;\n  }\n  get points() {\n    return this._points;\n  }\n  get segments() {\n    return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n  }\n  first() {\n    const segments = this.segments;\n    const points = this.points;\n    return segments.length && points[segments[0].start];\n  }\n  last() {\n    const segments = this.segments;\n    const points = this.points;\n    const count = segments.length;\n    return count && points[segments[count - 1].end];\n  }\n  interpolate(point, property) {\n    const me = this;\n    const options = me.options;\n    const value = point[property];\n    const points = me.points;\n    const segments = _boundSegments(me, {property, start: value, end: value});\n    if (!segments.length) {\n      return;\n    }\n    const result = [];\n    const _interpolate = _getInterpolationMethod(options);\n    let i, ilen;\n    for (i = 0, ilen = segments.length; i < ilen; ++i) {\n      const {start, end} = segments[i];\n      const p1 = points[start];\n      const p2 = points[end];\n      if (p1 === p2) {\n        result.push(p1);\n        continue;\n      }\n      const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n      const interpolated = _interpolate(p1, p2, t, options.stepped);\n      interpolated[property] = point[property];\n      result.push(interpolated);\n    }\n    return result.length === 1 ? result[0] : result;\n  }\n  pathSegment(ctx, segment, params) {\n    const segmentMethod = _getSegmentMethod(this);\n    return segmentMethod(ctx, this, segment, params);\n  }\n  path(ctx, start, count) {\n    const me = this;\n    const segments = me.segments;\n    const segmentMethod = _getSegmentMethod(me);\n    let loop = me._loop;\n    start = start || 0;\n    count = count || (me.points.length - start);\n    for (const segment of segments) {\n      loop &= segmentMethod(ctx, me, segment, {start, end: start + count - 1});\n    }\n    return !!loop;\n  }\n  draw(ctx, chartArea, start, count) {\n    const me = this;\n    const options = me.options || {};\n    const points = me.points || [];\n    if (!points.length || !options.borderWidth) {\n      return;\n    }\n    ctx.save();\n    draw(ctx, me, start, count);\n    ctx.restore();\n    if (me.animated) {\n      me._pointsUpdated = false;\n      me._path = undefined;\n    }\n  }\n}\nLineElement.id = 'line';\nLineElement.defaults = {\n  borderCapStyle: 'butt',\n  borderDash: [],\n  borderDashOffset: 0,\n  borderJoinStyle: 'miter',\n  borderWidth: 3,\n  capBezierPoints: true,\n  cubicInterpolationMode: 'default',\n  fill: false,\n  spanGaps: false,\n  stepped: false,\n  tension: 0,\n};\nLineElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor',\n  borderColor: 'borderColor'\n};\nLineElement.descriptors = {\n  _scriptable: true,\n  _indexable: (name) => name !== 'borderDash' && name !== 'fill',\n};\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n  const options = el.options;\n  const {[axis]: value} = el.getProps([axis], useFinalPosition);\n  return (Math.abs(pos - value) < options.radius + options.hitRadius);\n}\nclass PointElement extends Element {\n  constructor(cfg) {\n    super();\n    this.options = undefined;\n    this.parsed = undefined;\n    this.skip = undefined;\n    this.stop = undefined;\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n  inRange(mouseX, mouseY, useFinalPosition) {\n    const options = this.options;\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return ((Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2)) < Math.pow(options.hitRadius + options.radius, 2));\n  }\n  inXRange(mouseX, useFinalPosition) {\n    return inRange$1(this, mouseX, 'x', useFinalPosition);\n  }\n  inYRange(mouseY, useFinalPosition) {\n    return inRange$1(this, mouseY, 'y', useFinalPosition);\n  }\n  getCenterPoint(useFinalPosition) {\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return {x, y};\n  }\n  size(options) {\n    options = options || this.options || {};\n    let radius = options.radius || 0;\n    radius = Math.max(radius, radius && options.hoverRadius || 0);\n    const borderWidth = radius && options.borderWidth || 0;\n    return (radius + borderWidth) * 2;\n  }\n  draw(ctx, area) {\n    const me = this;\n    const options = me.options;\n    if (me.skip || options.radius < 0.1 || !_isPointInArea(me, area, me.size(options) / 2)) {\n      return;\n    }\n    ctx.strokeStyle = options.borderColor;\n    ctx.lineWidth = options.borderWidth;\n    ctx.fillStyle = options.backgroundColor;\n    drawPoint(ctx, options, me.x, me.y);\n  }\n  getRange() {\n    const options = this.options || {};\n    return options.radius + options.hitRadius;\n  }\n}\nPointElement.id = 'point';\nPointElement.defaults = {\n  borderWidth: 1,\n  hitRadius: 1,\n  hoverBorderWidth: 1,\n  hoverRadius: 4,\n  pointStyle: 'circle',\n  radius: 3,\n  rotation: 0\n};\nPointElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor',\n  borderColor: 'borderColor'\n};\n\nfunction getBarBounds(bar, useFinalPosition) {\n  const {x, y, base, width, height} = bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition);\n  let left, right, top, bottom, half;\n  if (bar.horizontal) {\n    half = height / 2;\n    left = Math.min(x, base);\n    right = Math.max(x, base);\n    top = y - half;\n    bottom = y + half;\n  } else {\n    half = width / 2;\n    left = x - half;\n    right = x + half;\n    top = Math.min(y, base);\n    bottom = Math.max(y, base);\n  }\n  return {left, top, right, bottom};\n}\nfunction skipOrLimit(skip, value, min, max) {\n  return skip ? 0 : _limitValue(value, min, max);\n}\nfunction parseBorderWidth(bar, maxW, maxH) {\n  const value = bar.options.borderWidth;\n  const skip = bar.borderSkipped;\n  const o = toTRBL(value);\n  return {\n    t: skipOrLimit(skip.top, o.top, 0, maxH),\n    r: skipOrLimit(skip.right, o.right, 0, maxW),\n    b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n    l: skipOrLimit(skip.left, o.left, 0, maxW)\n  };\n}\nfunction parseBorderRadius(bar, maxW, maxH) {\n  const {enableBorderRadius} = bar.getProps(['enableBorderRadius']);\n  const value = bar.options.borderRadius;\n  const o = toTRBLCorners(value);\n  const maxR = Math.min(maxW, maxH);\n  const skip = bar.borderSkipped;\n  const enableBorder = enableBorderRadius || isObject(value);\n  return {\n    topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n    topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n    bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n    bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n  };\n}\nfunction boundingRects(bar) {\n  const bounds = getBarBounds(bar);\n  const width = bounds.right - bounds.left;\n  const height = bounds.bottom - bounds.top;\n  const border = parseBorderWidth(bar, width / 2, height / 2);\n  const radius = parseBorderRadius(bar, width / 2, height / 2);\n  return {\n    outer: {\n      x: bounds.left,\n      y: bounds.top,\n      w: width,\n      h: height,\n      radius\n    },\n    inner: {\n      x: bounds.left + border.l,\n      y: bounds.top + border.t,\n      w: width - border.l - border.r,\n      h: height - border.t - border.b,\n      radius: {\n        topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n        topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n        bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n        bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r)),\n      }\n    }\n  };\n}\nfunction inRange(bar, x, y, useFinalPosition) {\n  const skipX = x === null;\n  const skipY = y === null;\n  const skipBoth = skipX && skipY;\n  const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n  return bounds\n\t\t&& (skipX || x >= bounds.left && x <= bounds.right)\n\t\t&& (skipY || y >= bounds.top && y <= bounds.bottom);\n}\nfunction hasRadius(radius) {\n  return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\nfunction addNormalRectPath(ctx, rect) {\n  ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\nfunction inflateRect(rect, amount, refRect = {}) {\n  const x = rect.x !== refRect.x ? -amount : 0;\n  const y = rect.y !== refRect.y ? -amount : 0;\n  const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n  const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n  return {\n    x: rect.x + x,\n    y: rect.y + y,\n    w: rect.w + w,\n    h: rect.h + h,\n    radius: rect.radius\n  };\n}\nclass BarElement extends Element {\n  constructor(cfg) {\n    super();\n    this.options = undefined;\n    this.horizontal = undefined;\n    this.base = undefined;\n    this.width = undefined;\n    this.height = undefined;\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n  draw(ctx) {\n    const options = this.options;\n    const {inner, outer} = boundingRects(this);\n    const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n    const inflateAmount = 0.33;\n    ctx.save();\n    if (outer.w !== inner.w || outer.h !== inner.h) {\n      ctx.beginPath();\n      addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n      ctx.clip();\n      addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n      ctx.fillStyle = options.borderColor;\n      ctx.fill('evenodd');\n    }\n    ctx.beginPath();\n    addRectPath(ctx, inflateRect(inner, inflateAmount, outer));\n    ctx.fillStyle = options.backgroundColor;\n    ctx.fill();\n    ctx.restore();\n  }\n  inRange(mouseX, mouseY, useFinalPosition) {\n    return inRange(this, mouseX, mouseY, useFinalPosition);\n  }\n  inXRange(mouseX, useFinalPosition) {\n    return inRange(this, mouseX, null, useFinalPosition);\n  }\n  inYRange(mouseY, useFinalPosition) {\n    return inRange(this, null, mouseY, useFinalPosition);\n  }\n  getCenterPoint(useFinalPosition) {\n    const {x, y, base, horizontal} = this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition);\n    return {\n      x: horizontal ? (x + base) / 2 : x,\n      y: horizontal ? y : (y + base) / 2\n    };\n  }\n  getRange(axis) {\n    return axis === 'x' ? this.width / 2 : this.height / 2;\n  }\n}\nBarElement.id = 'bar';\nBarElement.defaults = {\n  borderSkipped: 'start',\n  borderWidth: 0,\n  borderRadius: 0,\n  enableBorderRadius: true,\n  pointStyle: undefined\n};\nBarElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor',\n  borderColor: 'borderColor'\n};\n\nvar elements = /*#__PURE__*/Object.freeze({\n__proto__: null,\nArcElement: ArcElement,\nLineElement: LineElement,\nPointElement: PointElement,\nBarElement: BarElement\n});\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n  const samples = options.samples || availableWidth;\n  if (samples >= count) {\n    return data.slice(start, start + count);\n  }\n  const decimated = [];\n  const bucketWidth = (count - 2) / (samples - 2);\n  let sampledIndex = 0;\n  const endIndex = start + count - 1;\n  let a = start;\n  let i, maxAreaPoint, maxArea, area, nextA;\n  decimated[sampledIndex++] = data[a];\n  for (i = 0; i < samples - 2; i++) {\n    let avgX = 0;\n    let avgY = 0;\n    let j;\n    const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n    const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n    const avgRangeLength = avgRangeEnd - avgRangeStart;\n    for (j = avgRangeStart; j < avgRangeEnd; j++) {\n      avgX += data[j].x;\n      avgY += data[j].y;\n    }\n    avgX /= avgRangeLength;\n    avgY /= avgRangeLength;\n    const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n    const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n    const {x: pointAx, y: pointAy} = data[a];\n    maxArea = area = -1;\n    for (j = rangeOffs; j < rangeTo; j++) {\n      area = 0.5 * Math.abs(\n        (pointAx - avgX) * (data[j].y - pointAy) -\n        (pointAx - data[j].x) * (avgY - pointAy)\n      );\n      if (area > maxArea) {\n        maxArea = area;\n        maxAreaPoint = data[j];\n        nextA = j;\n      }\n    }\n    decimated[sampledIndex++] = maxAreaPoint;\n    a = nextA;\n  }\n  decimated[sampledIndex++] = data[endIndex];\n  return decimated;\n}\nfunction minMaxDecimation(data, start, count, availableWidth) {\n  let avgX = 0;\n  let countX = 0;\n  let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n  const decimated = [];\n  const endIndex = start + count - 1;\n  const xMin = data[start].x;\n  const xMax = data[endIndex].x;\n  const dx = xMax - xMin;\n  for (i = start; i < start + count; ++i) {\n    point = data[i];\n    x = (point.x - xMin) / dx * availableWidth;\n    y = point.y;\n    const truncX = x | 0;\n    if (truncX === prevX) {\n      if (y < minY) {\n        minY = y;\n        minIndex = i;\n      } else if (y > maxY) {\n        maxY = y;\n        maxIndex = i;\n      }\n      avgX = (countX * avgX + point.x) / ++countX;\n    } else {\n      const lastIndex = i - 1;\n      if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n        const intermediateIndex1 = Math.min(minIndex, maxIndex);\n        const intermediateIndex2 = Math.max(minIndex, maxIndex);\n        if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n          decimated.push({\n            ...data[intermediateIndex1],\n            x: avgX,\n          });\n        }\n        if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n          decimated.push({\n            ...data[intermediateIndex2],\n            x: avgX\n          });\n        }\n      }\n      if (i > 0 && lastIndex !== startIndex) {\n        decimated.push(data[lastIndex]);\n      }\n      decimated.push(point);\n      prevX = truncX;\n      countX = 0;\n      minY = maxY = y;\n      minIndex = maxIndex = startIndex = i;\n    }\n  }\n  return decimated;\n}\nfunction cleanDecimatedDataset(dataset) {\n  if (dataset._decimated) {\n    const data = dataset._data;\n    delete dataset._decimated;\n    delete dataset._data;\n    Object.defineProperty(dataset, 'data', {value: data});\n  }\n}\nfunction cleanDecimatedData(chart) {\n  chart.data.datasets.forEach((dataset) => {\n    cleanDecimatedDataset(dataset);\n  });\n}\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n  const pointCount = points.length;\n  let start = 0;\n  let count;\n  const {iScale} = meta;\n  const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n  if (minDefined) {\n    start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n  }\n  if (maxDefined) {\n    count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n  } else {\n    count = pointCount - start;\n  }\n  return {start, count};\n}\nvar plugin_decimation = {\n  id: 'decimation',\n  defaults: {\n    algorithm: 'min-max',\n    enabled: false,\n  },\n  beforeElementsUpdate: (chart, args, options) => {\n    if (!options.enabled) {\n      cleanDecimatedData(chart);\n      return;\n    }\n    const availableWidth = chart.width;\n    chart.data.datasets.forEach((dataset, datasetIndex) => {\n      const {_data, indexAxis} = dataset;\n      const meta = chart.getDatasetMeta(datasetIndex);\n      const data = _data || dataset.data;\n      if (resolve([indexAxis, chart.options.indexAxis]) === 'y') {\n        return;\n      }\n      if (meta.type !== 'line') {\n        return;\n      }\n      const xAxis = chart.scales[meta.xAxisID];\n      if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n        return;\n      }\n      if (chart.options.parsing) {\n        return;\n      }\n      let {start, count} = getStartAndCountOfVisiblePointsSimplified(meta, data);\n      const threshold = options.threshold || 4 * availableWidth;\n      if (count <= threshold) {\n        cleanDecimatedDataset(dataset);\n        return;\n      }\n      if (isNullOrUndef(_data)) {\n        dataset._data = data;\n        delete dataset.data;\n        Object.defineProperty(dataset, 'data', {\n          configurable: true,\n          enumerable: true,\n          get: function() {\n            return this._decimated;\n          },\n          set: function(d) {\n            this._data = d;\n          }\n        });\n      }\n      let decimated;\n      switch (options.algorithm) {\n      case 'lttb':\n        decimated = lttbDecimation(data, start, count, availableWidth, options);\n        break;\n      case 'min-max':\n        decimated = minMaxDecimation(data, start, count, availableWidth);\n        break;\n      default:\n        throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n      }\n      dataset._decimated = decimated;\n    });\n  },\n  destroy(chart) {\n    cleanDecimatedData(chart);\n  }\n};\n\nfunction getLineByIndex(chart, index) {\n  const meta = chart.getDatasetMeta(index);\n  const visible = meta && chart.isDatasetVisible(index);\n  return visible ? meta.dataset : null;\n}\nfunction parseFillOption(line) {\n  const options = line.options;\n  const fillOption = options.fill;\n  let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n  if (fill === undefined) {\n    fill = !!options.backgroundColor;\n  }\n  if (fill === false || fill === null) {\n    return false;\n  }\n  if (fill === true) {\n    return 'origin';\n  }\n  return fill;\n}\nfunction decodeFill(line, index, count) {\n  const fill = parseFillOption(line);\n  if (isObject(fill)) {\n    return isNaN(fill.value) ? false : fill;\n  }\n  let target = parseFloat(fill);\n  if (isNumberFinite(target) && Math.floor(target) === target) {\n    if (fill[0] === '-' || fill[0] === '+') {\n      target = index + target;\n    }\n    if (target === index || target < 0 || target >= count) {\n      return false;\n    }\n    return target;\n  }\n  return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\nfunction computeLinearBoundary(source) {\n  const {scale = {}, fill} = source;\n  let target = null;\n  let horizontal;\n  if (fill === 'start') {\n    target = scale.bottom;\n  } else if (fill === 'end') {\n    target = scale.top;\n  } else if (isObject(fill)) {\n    target = scale.getPixelForValue(fill.value);\n  } else if (scale.getBasePixel) {\n    target = scale.getBasePixel();\n  }\n  if (isNumberFinite(target)) {\n    horizontal = scale.isHorizontal();\n    return {\n      x: horizontal ? target : null,\n      y: horizontal ? null : target\n    };\n  }\n  return null;\n}\nclass simpleArc {\n  constructor(opts) {\n    this.x = opts.x;\n    this.y = opts.y;\n    this.radius = opts.radius;\n  }\n  pathSegment(ctx, bounds, opts) {\n    const {x, y, radius} = this;\n    bounds = bounds || {start: 0, end: TAU};\n    ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n    return !opts.bounds;\n  }\n  interpolate(point) {\n    const {x, y, radius} = this;\n    const angle = point.angle;\n    return {\n      x: x + Math.cos(angle) * radius,\n      y: y + Math.sin(angle) * radius,\n      angle\n    };\n  }\n}\nfunction computeCircularBoundary(source) {\n  const {scale, fill} = source;\n  const options = scale.options;\n  const length = scale.getLabels().length;\n  const target = [];\n  const start = options.reverse ? scale.max : scale.min;\n  const end = options.reverse ? scale.min : scale.max;\n  let i, center, value;\n  if (fill === 'start') {\n    value = start;\n  } else if (fill === 'end') {\n    value = end;\n  } else if (isObject(fill)) {\n    value = fill.value;\n  } else {\n    value = scale.getBaseValue();\n  }\n  if (options.grid.circular) {\n    center = scale.getPointPositionForValue(0, start);\n    return new simpleArc({\n      x: center.x,\n      y: center.y,\n      radius: scale.getDistanceFromCenterForValue(value)\n    });\n  }\n  for (i = 0; i < length; ++i) {\n    target.push(scale.getPointPositionForValue(i, value));\n  }\n  return target;\n}\nfunction computeBoundary(source) {\n  const scale = source.scale || {};\n  if (scale.getPointPositionForValue) {\n    return computeCircularBoundary(source);\n  }\n  return computeLinearBoundary(source);\n}\nfunction findSegmentEnd(start, end, points) {\n  for (;end > start; end--) {\n    const point = points[end];\n    if (!isNaN(point.x) && !isNaN(point.y)) {\n      break;\n    }\n  }\n  return end;\n}\nfunction pointsFromSegments(boundary, line) {\n  const {x = null, y = null} = boundary || {};\n  const linePoints = line.points;\n  const points = [];\n  line.segments.forEach(({start, end}) => {\n    end = findSegmentEnd(start, end, linePoints);\n    const first = linePoints[start];\n    const last = linePoints[end];\n    if (y !== null) {\n      points.push({x: first.x, y});\n      points.push({x: last.x, y});\n    } else if (x !== null) {\n      points.push({x, y: first.y});\n      points.push({x, y: last.y});\n    }\n  });\n  return points;\n}\nfunction buildStackLine(source) {\n  const {chart, scale, index, line} = source;\n  const points = [];\n  const segments = line.segments;\n  const sourcePoints = line.points;\n  const linesBelow = getLinesBelow(chart, index);\n  linesBelow.push(createBoundaryLine({x: null, y: scale.bottom}, line));\n  for (let i = 0; i < segments.length; i++) {\n    const segment = segments[i];\n    for (let j = segment.start; j <= segment.end; j++) {\n      addPointsBelow(points, sourcePoints[j], linesBelow);\n    }\n  }\n  return new LineElement({points, options: {}});\n}\nconst isLineAndNotInHideAnimation = (meta) => meta.type === 'line' && !meta.hidden;\nfunction getLinesBelow(chart, index) {\n  const below = [];\n  const metas = chart.getSortedVisibleDatasetMetas();\n  for (let i = 0; i < metas.length; i++) {\n    const meta = metas[i];\n    if (meta.index === index) {\n      break;\n    }\n    if (isLineAndNotInHideAnimation(meta)) {\n      below.unshift(meta.dataset);\n    }\n  }\n  return below;\n}\nfunction addPointsBelow(points, sourcePoint, linesBelow) {\n  const postponed = [];\n  for (let j = 0; j < linesBelow.length; j++) {\n    const line = linesBelow[j];\n    const {first, last, point} = findPoint(line, sourcePoint, 'x');\n    if (!point || (first && last)) {\n      continue;\n    }\n    if (first) {\n      postponed.unshift(point);\n    } else {\n      points.push(point);\n      if (!last) {\n        break;\n      }\n    }\n  }\n  points.push(...postponed);\n}\nfunction findPoint(line, sourcePoint, property) {\n  const point = line.interpolate(sourcePoint, property);\n  if (!point) {\n    return {};\n  }\n  const pointValue = point[property];\n  const segments = line.segments;\n  const linePoints = line.points;\n  let first = false;\n  let last = false;\n  for (let i = 0; i < segments.length; i++) {\n    const segment = segments[i];\n    const firstValue = linePoints[segment.start][property];\n    const lastValue = linePoints[segment.end][property];\n    if (pointValue >= firstValue && pointValue <= lastValue) {\n      first = pointValue === firstValue;\n      last = pointValue === lastValue;\n      break;\n    }\n  }\n  return {first, last, point};\n}\nfunction getTarget(source) {\n  const {chart, fill, line} = source;\n  if (isNumberFinite(fill)) {\n    return getLineByIndex(chart, fill);\n  }\n  if (fill === 'stack') {\n    return buildStackLine(source);\n  }\n  if (fill === 'shape') {\n    return true;\n  }\n  const boundary = computeBoundary(source);\n  if (boundary instanceof simpleArc) {\n    return boundary;\n  }\n  return createBoundaryLine(boundary, line);\n}\nfunction createBoundaryLine(boundary, line) {\n  let points = [];\n  let _loop = false;\n  if (isArray(boundary)) {\n    _loop = true;\n    points = boundary;\n  } else {\n    points = pointsFromSegments(boundary, line);\n  }\n  return points.length ? new LineElement({\n    points,\n    options: {tension: 0},\n    _loop,\n    _fullLoop: _loop\n  }) : null;\n}\nfunction resolveTarget(sources, index, propagate) {\n  const source = sources[index];\n  let fill = source.fill;\n  const visited = [index];\n  let target;\n  if (!propagate) {\n    return fill;\n  }\n  while (fill !== false && visited.indexOf(fill) === -1) {\n    if (!isNumberFinite(fill)) {\n      return fill;\n    }\n    target = sources[fill];\n    if (!target) {\n      return false;\n    }\n    if (target.visible) {\n      return fill;\n    }\n    visited.push(fill);\n    fill = target.fill;\n  }\n  return false;\n}\nfunction _clip(ctx, target, clipY) {\n  ctx.beginPath();\n  target.path(ctx);\n  ctx.lineTo(target.last().x, clipY);\n  ctx.lineTo(target.first().x, clipY);\n  ctx.closePath();\n  ctx.clip();\n}\nfunction getBounds(property, first, last, loop) {\n  if (loop) {\n    return;\n  }\n  let start = first[property];\n  let end = last[property];\n  if (property === 'angle') {\n    start = _normalizeAngle(start);\n    end = _normalizeAngle(end);\n  }\n  return {property, start, end};\n}\nfunction _getEdge(a, b, prop, fn) {\n  if (a && b) {\n    return fn(a[prop], b[prop]);\n  }\n  return a ? a[prop] : b ? b[prop] : 0;\n}\nfunction _segments(line, target, property) {\n  const segments = line.segments;\n  const points = line.points;\n  const tpoints = target.points;\n  const parts = [];\n  for (const segment of segments) {\n    let {start, end} = segment;\n    end = findSegmentEnd(start, end, points);\n    const bounds = getBounds(property, points[start], points[end], segment.loop);\n    if (!target.segments) {\n      parts.push({\n        source: segment,\n        target: bounds,\n        start: points[start],\n        end: points[end]\n      });\n      continue;\n    }\n    const targetSegments = _boundSegments(target, bounds);\n    for (const tgt of targetSegments) {\n      const subBounds = getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n      const fillSources = _boundSegment(segment, points, subBounds);\n      for (const fillSource of fillSources) {\n        parts.push({\n          source: fillSource,\n          target: tgt,\n          start: {\n            [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n          },\n          end: {\n            [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n          }\n        });\n      }\n    }\n  }\n  return parts;\n}\nfunction clipBounds(ctx, scale, bounds) {\n  const {top, bottom} = scale.chart.chartArea;\n  const {property, start, end} = bounds || {};\n  if (property === 'x') {\n    ctx.beginPath();\n    ctx.rect(start, top, end - start, bottom - top);\n    ctx.clip();\n  }\n}\nfunction interpolatedLineTo(ctx, target, point, property) {\n  const interpolatedPoint = target.interpolate(point, property);\n  if (interpolatedPoint) {\n    ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n  }\n}\nfunction _fill(ctx, cfg) {\n  const {line, target, property, color, scale} = cfg;\n  const segments = _segments(line, target, property);\n  for (const {source: src, target: tgt, start, end} of segments) {\n    const {style: {backgroundColor = color} = {}} = src;\n    const notShape = target !== true;\n    ctx.save();\n    ctx.fillStyle = backgroundColor;\n    clipBounds(ctx, scale, notShape && getBounds(property, start, end));\n    ctx.beginPath();\n    const lineLoop = !!line.pathSegment(ctx, src);\n    let loop;\n    if (notShape) {\n      if (lineLoop) {\n        ctx.closePath();\n      } else {\n        interpolatedLineTo(ctx, target, end, property);\n      }\n      const targetLoop = !!target.pathSegment(ctx, tgt, {move: lineLoop, reverse: true});\n      loop = lineLoop && targetLoop;\n      if (!loop) {\n        interpolatedLineTo(ctx, target, start, property);\n      }\n    }\n    ctx.closePath();\n    ctx.fill(loop ? 'evenodd' : 'nonzero');\n    ctx.restore();\n  }\n}\nfunction doFill(ctx, cfg) {\n  const {line, target, above, below, area, scale} = cfg;\n  const property = line._loop ? 'angle' : cfg.axis;\n  ctx.save();\n  if (property === 'x' && below !== above) {\n    _clip(ctx, target, area.top);\n    _fill(ctx, {line, target, color: above, scale, property});\n    ctx.restore();\n    ctx.save();\n    _clip(ctx, target, area.bottom);\n  }\n  _fill(ctx, {line, target, color: below, scale, property});\n  ctx.restore();\n}\nfunction drawfill(ctx, source, area) {\n  const target = getTarget(source);\n  const {line, scale, axis} = source;\n  const lineOpts = line.options;\n  const fillOption = lineOpts.fill;\n  const color = lineOpts.backgroundColor;\n  const {above = color, below = color} = fillOption || {};\n  if (target && line.points.length) {\n    clipArea(ctx, area);\n    doFill(ctx, {line, target, above, below, area, scale, axis});\n    unclipArea(ctx);\n  }\n}\nvar plugin_filler = {\n  id: 'filler',\n  afterDatasetsUpdate(chart, _args, options) {\n    const count = (chart.data.datasets || []).length;\n    const sources = [];\n    let meta, i, line, source;\n    for (i = 0; i < count; ++i) {\n      meta = chart.getDatasetMeta(i);\n      line = meta.dataset;\n      source = null;\n      if (line && line.options && line instanceof LineElement) {\n        source = {\n          visible: chart.isDatasetVisible(i),\n          index: i,\n          fill: decodeFill(line, i, count),\n          chart,\n          axis: meta.controller.options.indexAxis,\n          scale: meta.vScale,\n          line,\n        };\n      }\n      meta.$filler = source;\n      sources.push(source);\n    }\n    for (i = 0; i < count; ++i) {\n      source = sources[i];\n      if (!source || source.fill === false) {\n        continue;\n      }\n      source.fill = resolveTarget(sources, i, options.propagate);\n    }\n  },\n  beforeDraw(chart, _args, options) {\n    const draw = options.drawTime === 'beforeDraw';\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    const area = chart.chartArea;\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      const source = metasets[i].$filler;\n      if (!source) {\n        continue;\n      }\n      source.line.updateControlPoints(area, source.axis);\n      if (draw) {\n        drawfill(chart.ctx, source, area);\n      }\n    }\n  },\n  beforeDatasetsDraw(chart, _args, options) {\n    if (options.drawTime !== 'beforeDatasetsDraw') {\n      return;\n    }\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      const source = metasets[i].$filler;\n      if (source) {\n        drawfill(chart.ctx, source, chart.chartArea);\n      }\n    }\n  },\n  beforeDatasetDraw(chart, args, options) {\n    const source = args.meta.$filler;\n    if (!source || source.fill === false || options.drawTime !== 'beforeDatasetDraw') {\n      return;\n    }\n    drawfill(chart.ctx, source, chart.chartArea);\n  },\n  defaults: {\n    propagate: true,\n    drawTime: 'beforeDatasetDraw'\n  }\n};\n\nconst getBoxSize = (labelOpts, fontSize) => {\n  let {boxHeight = fontSize, boxWidth = fontSize} = labelOpts;\n  if (labelOpts.usePointStyle) {\n    boxHeight = Math.min(boxHeight, fontSize);\n    boxWidth = Math.min(boxWidth, fontSize);\n  }\n  return {\n    boxWidth,\n    boxHeight,\n    itemHeight: Math.max(fontSize, boxHeight)\n  };\n};\nconst itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\nclass Legend extends Element {\n  constructor(config) {\n    super();\n    this._added = false;\n    this.legendHitBoxes = [];\n    this._hoveredItem = null;\n    this.doughnutMode = false;\n    this.chart = config.chart;\n    this.options = config.options;\n    this.ctx = config.ctx;\n    this.legendItems = undefined;\n    this.columnSizes = undefined;\n    this.lineWidths = undefined;\n    this.maxHeight = undefined;\n    this.maxWidth = undefined;\n    this.top = undefined;\n    this.bottom = undefined;\n    this.left = undefined;\n    this.right = undefined;\n    this.height = undefined;\n    this.width = undefined;\n    this._margins = undefined;\n    this.position = undefined;\n    this.weight = undefined;\n    this.fullSize = undefined;\n  }\n  update(maxWidth, maxHeight, margins) {\n    const me = this;\n    me.maxWidth = maxWidth;\n    me.maxHeight = maxHeight;\n    me._margins = margins;\n    me.setDimensions();\n    me.buildLabels();\n    me.fit();\n  }\n  setDimensions() {\n    const me = this;\n    if (me.isHorizontal()) {\n      me.width = me.maxWidth;\n      me.left = me._margins.left;\n      me.right = me.width;\n    } else {\n      me.height = me.maxHeight;\n      me.top = me._margins.top;\n      me.bottom = me.height;\n    }\n  }\n  buildLabels() {\n    const me = this;\n    const labelOpts = me.options.labels || {};\n    let legendItems = callback(labelOpts.generateLabels, [me.chart], me) || [];\n    if (labelOpts.filter) {\n      legendItems = legendItems.filter((item) => labelOpts.filter(item, me.chart.data));\n    }\n    if (labelOpts.sort) {\n      legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, me.chart.data));\n    }\n    if (me.options.reverse) {\n      legendItems.reverse();\n    }\n    me.legendItems = legendItems;\n  }\n  fit() {\n    const me = this;\n    const {options, ctx} = me;\n    if (!options.display) {\n      me.width = me.height = 0;\n      return;\n    }\n    const labelOpts = options.labels;\n    const labelFont = toFont(labelOpts.font);\n    const fontSize = labelFont.size;\n    const titleHeight = me._computeTitleHeight();\n    const {boxWidth, itemHeight} = getBoxSize(labelOpts, fontSize);\n    let width, height;\n    ctx.font = labelFont.string;\n    if (me.isHorizontal()) {\n      width = me.maxWidth;\n      height = me._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n    } else {\n      height = me.maxHeight;\n      width = me._fitCols(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n    }\n    me.width = Math.min(width, options.maxWidth || me.maxWidth);\n    me.height = Math.min(height, options.maxHeight || me.maxHeight);\n  }\n  _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n    const me = this;\n    const {ctx, maxWidth, options: {labels: {padding}}} = me;\n    const hitboxes = me.legendHitBoxes = [];\n    const lineWidths = me.lineWidths = [0];\n    const lineHeight = itemHeight + padding;\n    let totalHeight = titleHeight;\n    ctx.textAlign = 'left';\n    ctx.textBaseline = 'middle';\n    let row = -1;\n    let top = -lineHeight;\n    me.legendItems.forEach((legendItem, i) => {\n      const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n      if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n        totalHeight += lineHeight;\n        lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n        top += lineHeight;\n        row++;\n      }\n      hitboxes[i] = {left: 0, top, row, width: itemWidth, height: itemHeight};\n      lineWidths[lineWidths.length - 1] += itemWidth + padding;\n    });\n    return totalHeight;\n  }\n  _fitCols(titleHeight, fontSize, boxWidth, itemHeight) {\n    const me = this;\n    const {ctx, maxHeight, options: {labels: {padding}}} = me;\n    const hitboxes = me.legendHitBoxes = [];\n    const columnSizes = me.columnSizes = [];\n    const heightLimit = maxHeight - titleHeight;\n    let totalWidth = padding;\n    let currentColWidth = 0;\n    let currentColHeight = 0;\n    let left = 0;\n    let col = 0;\n    me.legendItems.forEach((legendItem, i) => {\n      const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n      if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n        totalWidth += currentColWidth + padding;\n        columnSizes.push({width: currentColWidth, height: currentColHeight});\n        left += currentColWidth + padding;\n        col++;\n        currentColWidth = currentColHeight = 0;\n      }\n      hitboxes[i] = {left, top: currentColHeight, col, width: itemWidth, height: itemHeight};\n      currentColWidth = Math.max(currentColWidth, itemWidth);\n      currentColHeight += itemHeight + padding;\n    });\n    totalWidth += currentColWidth;\n    columnSizes.push({width: currentColWidth, height: currentColHeight});\n    return totalWidth;\n  }\n  adjustHitBoxes() {\n    const me = this;\n    if (!me.options.display) {\n      return;\n    }\n    const titleHeight = me._computeTitleHeight();\n    const {legendHitBoxes: hitboxes, options: {align, labels: {padding}, rtl}} = me;\n    const rtlHelper = getRtlAdapter(rtl, me.left, me.width);\n    if (this.isHorizontal()) {\n      let row = 0;\n      let left = _alignStartEnd(align, me.left + padding, me.right - me.lineWidths[row]);\n      for (const hitbox of hitboxes) {\n        if (row !== hitbox.row) {\n          row = hitbox.row;\n          left = _alignStartEnd(align, me.left + padding, me.right - me.lineWidths[row]);\n        }\n        hitbox.top += me.top + titleHeight + padding;\n        hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n        left += hitbox.width + padding;\n      }\n    } else {\n      let col = 0;\n      let top = _alignStartEnd(align, me.top + titleHeight + padding, me.bottom - me.columnSizes[col].height);\n      for (const hitbox of hitboxes) {\n        if (hitbox.col !== col) {\n          col = hitbox.col;\n          top = _alignStartEnd(align, me.top + titleHeight + padding, me.bottom - me.columnSizes[col].height);\n        }\n        hitbox.top = top;\n        hitbox.left += me.left + padding;\n        hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n        top += hitbox.height + padding;\n      }\n    }\n  }\n  isHorizontal() {\n    return this.options.position === 'top' || this.options.position === 'bottom';\n  }\n  draw() {\n    const me = this;\n    if (me.options.display) {\n      const ctx = me.ctx;\n      clipArea(ctx, me);\n      me._draw();\n      unclipArea(ctx);\n    }\n  }\n  _draw() {\n    const me = this;\n    const {options: opts, columnSizes, lineWidths, ctx} = me;\n    const {align, labels: labelOpts} = opts;\n    const defaultColor = defaults.color;\n    const rtlHelper = getRtlAdapter(opts.rtl, me.left, me.width);\n    const labelFont = toFont(labelOpts.font);\n    const {color: fontColor, padding} = labelOpts;\n    const fontSize = labelFont.size;\n    const halfFontSize = fontSize / 2;\n    let cursor;\n    me.drawTitle();\n    ctx.textAlign = rtlHelper.textAlign('left');\n    ctx.textBaseline = 'middle';\n    ctx.lineWidth = 0.5;\n    ctx.font = labelFont.string;\n    const {boxWidth, boxHeight, itemHeight} = getBoxSize(labelOpts, fontSize);\n    const drawLegendBox = function(x, y, legendItem) {\n      if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n        return;\n      }\n      ctx.save();\n      const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n      ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n      ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n      ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n      ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n      ctx.lineWidth = lineWidth;\n      ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n      ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n      if (labelOpts.usePointStyle) {\n        const drawOptions = {\n          radius: boxWidth * Math.SQRT2 / 2,\n          pointStyle: legendItem.pointStyle,\n          rotation: legendItem.rotation,\n          borderWidth: lineWidth\n        };\n        const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n        const centerY = y + halfFontSize;\n        drawPoint(ctx, drawOptions, centerX, centerY);\n      } else {\n        const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n        const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n        const borderRadius = toTRBLCorners(legendItem.borderRadius);\n        ctx.beginPath();\n        if (Object.values(borderRadius).some(v => v !== 0)) {\n          addRoundedRectPath(ctx, {\n            x: xBoxLeft,\n            y: yBoxTop,\n            w: boxWidth,\n            h: boxHeight,\n            radius: borderRadius,\n          });\n        } else {\n          ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n        }\n        ctx.fill();\n        if (lineWidth !== 0) {\n          ctx.stroke();\n        }\n      }\n      ctx.restore();\n    };\n    const fillText = function(x, y, legendItem) {\n      renderText(ctx, legendItem.text, x, y + (itemHeight / 2), labelFont, {\n        strikethrough: legendItem.hidden,\n        textAlign: rtlHelper.textAlign(legendItem.textAlign)\n      });\n    };\n    const isHorizontal = me.isHorizontal();\n    const titleHeight = this._computeTitleHeight();\n    if (isHorizontal) {\n      cursor = {\n        x: _alignStartEnd(align, me.left + padding, me.right - lineWidths[0]),\n        y: me.top + padding + titleHeight,\n        line: 0\n      };\n    } else {\n      cursor = {\n        x: me.left + padding,\n        y: _alignStartEnd(align, me.top + titleHeight + padding, me.bottom - columnSizes[0].height),\n        line: 0\n      };\n    }\n    overrideTextDirection(me.ctx, opts.textDirection);\n    const lineHeight = itemHeight + padding;\n    me.legendItems.forEach((legendItem, i) => {\n      ctx.strokeStyle = legendItem.fontColor || fontColor;\n      ctx.fillStyle = legendItem.fontColor || fontColor;\n      const textWidth = ctx.measureText(legendItem.text).width;\n      const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n      const width = boxWidth + halfFontSize + textWidth;\n      let x = cursor.x;\n      let y = cursor.y;\n      rtlHelper.setWidth(me.width);\n      if (isHorizontal) {\n        if (i > 0 && x + width + padding > me.right) {\n          y = cursor.y += lineHeight;\n          cursor.line++;\n          x = cursor.x = _alignStartEnd(align, me.left + padding, me.right - lineWidths[cursor.line]);\n        }\n      } else if (i > 0 && y + lineHeight > me.bottom) {\n        x = cursor.x = x + columnSizes[cursor.line].width + padding;\n        cursor.line++;\n        y = cursor.y = _alignStartEnd(align, me.top + titleHeight + padding, me.bottom - columnSizes[cursor.line].height);\n      }\n      const realX = rtlHelper.x(x);\n      drawLegendBox(realX, y, legendItem);\n      x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : me.right, opts.rtl);\n      fillText(rtlHelper.x(x), y, legendItem);\n      if (isHorizontal) {\n        cursor.x += width + padding;\n      } else {\n        cursor.y += lineHeight;\n      }\n    });\n    restoreTextDirection(me.ctx, opts.textDirection);\n  }\n  drawTitle() {\n    const me = this;\n    const opts = me.options;\n    const titleOpts = opts.title;\n    const titleFont = toFont(titleOpts.font);\n    const titlePadding = toPadding(titleOpts.padding);\n    if (!titleOpts.display) {\n      return;\n    }\n    const rtlHelper = getRtlAdapter(opts.rtl, me.left, me.width);\n    const ctx = me.ctx;\n    const position = titleOpts.position;\n    const halfFontSize = titleFont.size / 2;\n    const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n    let y;\n    let left = me.left;\n    let maxWidth = me.width;\n    if (this.isHorizontal()) {\n      maxWidth = Math.max(...me.lineWidths);\n      y = me.top + topPaddingPlusHalfFontSize;\n      left = _alignStartEnd(opts.align, left, me.right - maxWidth);\n    } else {\n      const maxHeight = me.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0);\n      y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, me.top, me.bottom - maxHeight - opts.labels.padding - me._computeTitleHeight());\n    }\n    const x = _alignStartEnd(position, left, left + maxWidth);\n    ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n    ctx.textBaseline = 'middle';\n    ctx.strokeStyle = titleOpts.color;\n    ctx.fillStyle = titleOpts.color;\n    ctx.font = titleFont.string;\n    renderText(ctx, titleOpts.text, x, y, titleFont);\n  }\n  _computeTitleHeight() {\n    const titleOpts = this.options.title;\n    const titleFont = toFont(titleOpts.font);\n    const titlePadding = toPadding(titleOpts.padding);\n    return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n  }\n  _getLegendItemAt(x, y) {\n    const me = this;\n    let i, hitBox, lh;\n    if (x >= me.left && x <= me.right && y >= me.top && y <= me.bottom) {\n      lh = me.legendHitBoxes;\n      for (i = 0; i < lh.length; ++i) {\n        hitBox = lh[i];\n        if (x >= hitBox.left && x <= hitBox.left + hitBox.width && y >= hitBox.top && y <= hitBox.top + hitBox.height) {\n          return me.legendItems[i];\n        }\n      }\n    }\n    return null;\n  }\n  handleEvent(e) {\n    const me = this;\n    const opts = me.options;\n    if (!isListened(e.type, opts)) {\n      return;\n    }\n    const hoveredItem = me._getLegendItemAt(e.x, e.y);\n    if (e.type === 'mousemove') {\n      const previous = me._hoveredItem;\n      const sameItem = itemsEqual(previous, hoveredItem);\n      if (previous && !sameItem) {\n        callback(opts.onLeave, [e, previous, me], me);\n      }\n      me._hoveredItem = hoveredItem;\n      if (hoveredItem && !sameItem) {\n        callback(opts.onHover, [e, hoveredItem, me], me);\n      }\n    } else if (hoveredItem) {\n      callback(opts.onClick, [e, hoveredItem, me], me);\n    }\n  }\n}\nfunction isListened(type, opts) {\n  if (type === 'mousemove' && (opts.onHover || opts.onLeave)) {\n    return true;\n  }\n  if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n    return true;\n  }\n  return false;\n}\nvar plugin_legend = {\n  id: 'legend',\n  _element: Legend,\n  start(chart, _args, options) {\n    const legend = chart.legend = new Legend({ctx: chart.ctx, options, chart});\n    layouts.configure(chart, legend, options);\n    layouts.addBox(chart, legend);\n  },\n  stop(chart) {\n    layouts.removeBox(chart, chart.legend);\n    delete chart.legend;\n  },\n  beforeUpdate(chart, _args, options) {\n    const legend = chart.legend;\n    layouts.configure(chart, legend, options);\n    legend.options = options;\n  },\n  afterUpdate(chart) {\n    const legend = chart.legend;\n    legend.buildLabels();\n    legend.adjustHitBoxes();\n  },\n  afterEvent(chart, args) {\n    if (!args.replay) {\n      chart.legend.handleEvent(args.event);\n    }\n  },\n  defaults: {\n    display: true,\n    position: 'top',\n    align: 'center',\n    fullSize: true,\n    reverse: false,\n    weight: 1000,\n    onClick(e, legendItem, legend) {\n      const index = legendItem.datasetIndex;\n      const ci = legend.chart;\n      if (ci.isDatasetVisible(index)) {\n        ci.hide(index);\n        legendItem.hidden = true;\n      } else {\n        ci.show(index);\n        legendItem.hidden = false;\n      }\n    },\n    onHover: null,\n    onLeave: null,\n    labels: {\n      color: (ctx) => ctx.chart.options.color,\n      boxWidth: 40,\n      padding: 10,\n      generateLabels(chart) {\n        const datasets = chart.data.datasets;\n        const {labels: {usePointStyle, pointStyle, textAlign, color}} = chart.legend.options;\n        return chart._getSortedDatasetMetas().map((meta) => {\n          const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n          const borderWidth = toPadding(style.borderWidth);\n          return {\n            text: datasets[meta.index].label,\n            fillStyle: style.backgroundColor,\n            fontColor: color,\n            hidden: !meta.visible,\n            lineCap: style.borderCapStyle,\n            lineDash: style.borderDash,\n            lineDashOffset: style.borderDashOffset,\n            lineJoin: style.borderJoinStyle,\n            lineWidth: (borderWidth.width + borderWidth.height) / 4,\n            strokeStyle: style.borderColor,\n            pointStyle: pointStyle || style.pointStyle,\n            rotation: style.rotation,\n            textAlign: textAlign || style.textAlign,\n            borderRadius: 0,\n            datasetIndex: meta.index\n          };\n        }, this);\n      }\n    },\n    title: {\n      color: (ctx) => ctx.chart.options.color,\n      display: false,\n      position: 'center',\n      text: '',\n    }\n  },\n  descriptors: {\n    _scriptable: (name) => !name.startsWith('on'),\n    labels: {\n      _scriptable: (name) => !['generateLabels', 'filter', 'sort'].includes(name),\n    }\n  },\n};\n\nclass Title extends Element {\n  constructor(config) {\n    super();\n    this.chart = config.chart;\n    this.options = config.options;\n    this.ctx = config.ctx;\n    this._padding = undefined;\n    this.top = undefined;\n    this.bottom = undefined;\n    this.left = undefined;\n    this.right = undefined;\n    this.width = undefined;\n    this.height = undefined;\n    this.position = undefined;\n    this.weight = undefined;\n    this.fullSize = undefined;\n  }\n  update(maxWidth, maxHeight) {\n    const me = this;\n    const opts = me.options;\n    me.left = 0;\n    me.top = 0;\n    if (!opts.display) {\n      me.width = me.height = me.right = me.bottom = 0;\n      return;\n    }\n    me.width = me.right = maxWidth;\n    me.height = me.bottom = maxHeight;\n    const lineCount = isArray(opts.text) ? opts.text.length : 1;\n    me._padding = toPadding(opts.padding);\n    const textSize = lineCount * toFont(opts.font).lineHeight + me._padding.height;\n    if (me.isHorizontal()) {\n      me.height = textSize;\n    } else {\n      me.width = textSize;\n    }\n  }\n  isHorizontal() {\n    const pos = this.options.position;\n    return pos === 'top' || pos === 'bottom';\n  }\n  _drawArgs(offset) {\n    const {top, left, bottom, right, options} = this;\n    const align = options.align;\n    let rotation = 0;\n    let maxWidth, titleX, titleY;\n    if (this.isHorizontal()) {\n      titleX = _alignStartEnd(align, left, right);\n      titleY = top + offset;\n      maxWidth = right - left;\n    } else {\n      if (options.position === 'left') {\n        titleX = left + offset;\n        titleY = _alignStartEnd(align, bottom, top);\n        rotation = PI * -0.5;\n      } else {\n        titleX = right - offset;\n        titleY = _alignStartEnd(align, top, bottom);\n        rotation = PI * 0.5;\n      }\n      maxWidth = bottom - top;\n    }\n    return {titleX, titleY, maxWidth, rotation};\n  }\n  draw() {\n    const me = this;\n    const ctx = me.ctx;\n    const opts = me.options;\n    if (!opts.display) {\n      return;\n    }\n    const fontOpts = toFont(opts.font);\n    const lineHeight = fontOpts.lineHeight;\n    const offset = lineHeight / 2 + me._padding.top;\n    const {titleX, titleY, maxWidth, rotation} = me._drawArgs(offset);\n    renderText(ctx, opts.text, 0, 0, fontOpts, {\n      color: opts.color,\n      maxWidth,\n      rotation,\n      textAlign: _toLeftRightCenter(opts.align),\n      textBaseline: 'middle',\n      translation: [titleX, titleY],\n    });\n  }\n}\nfunction createTitle(chart, titleOpts) {\n  const title = new Title({\n    ctx: chart.ctx,\n    options: titleOpts,\n    chart\n  });\n  layouts.configure(chart, title, titleOpts);\n  layouts.addBox(chart, title);\n  chart.titleBlock = title;\n}\nvar plugin_title = {\n  id: 'title',\n  _element: Title,\n  start(chart, _args, options) {\n    createTitle(chart, options);\n  },\n  stop(chart) {\n    const titleBlock = chart.titleBlock;\n    layouts.removeBox(chart, titleBlock);\n    delete chart.titleBlock;\n  },\n  beforeUpdate(chart, _args, options) {\n    const title = chart.titleBlock;\n    layouts.configure(chart, title, options);\n    title.options = options;\n  },\n  defaults: {\n    align: 'center',\n    display: false,\n    font: {\n      weight: 'bold',\n    },\n    fullSize: true,\n    padding: 10,\n    position: 'top',\n    text: '',\n    weight: 2000\n  },\n  defaultRoutes: {\n    color: 'color'\n  },\n  descriptors: {\n    _scriptable: true,\n    _indexable: false,\n  },\n};\n\nconst map = new WeakMap();\nvar plugin_subtitle = {\n  id: 'subtitle',\n  start(chart, _args, options) {\n    const title = new Title({\n      ctx: chart.ctx,\n      options,\n      chart\n    });\n    layouts.configure(chart, title, options);\n    layouts.addBox(chart, title);\n    map.set(chart, title);\n  },\n  stop(chart) {\n    layouts.removeBox(chart, map.get(chart));\n    map.delete(chart);\n  },\n  beforeUpdate(chart, _args, options) {\n    const title = map.get(chart);\n    layouts.configure(chart, title, options);\n    title.options = options;\n  },\n  defaults: {\n    align: 'center',\n    display: false,\n    font: {\n      weight: 'normal',\n    },\n    fullSize: true,\n    padding: 0,\n    position: 'top',\n    text: '',\n    weight: 1500\n  },\n  defaultRoutes: {\n    color: 'color'\n  },\n  descriptors: {\n    _scriptable: true,\n    _indexable: false,\n  },\n};\n\nconst positioners = {\n  average(items) {\n    if (!items.length) {\n      return false;\n    }\n    let i, len;\n    let x = 0;\n    let y = 0;\n    let count = 0;\n    for (i = 0, len = items.length; i < len; ++i) {\n      const el = items[i].element;\n      if (el && el.hasValue()) {\n        const pos = el.tooltipPosition();\n        x += pos.x;\n        y += pos.y;\n        ++count;\n      }\n    }\n    return {\n      x: x / count,\n      y: y / count\n    };\n  },\n  nearest(items, eventPosition) {\n    if (!items.length) {\n      return false;\n    }\n    let x = eventPosition.x;\n    let y = eventPosition.y;\n    let minDistance = Number.POSITIVE_INFINITY;\n    let i, len, nearestElement;\n    for (i = 0, len = items.length; i < len; ++i) {\n      const el = items[i].element;\n      if (el && el.hasValue()) {\n        const center = el.getCenterPoint();\n        const d = distanceBetweenPoints(eventPosition, center);\n        if (d < minDistance) {\n          minDistance = d;\n          nearestElement = el;\n        }\n      }\n    }\n    if (nearestElement) {\n      const tp = nearestElement.tooltipPosition();\n      x = tp.x;\n      y = tp.y;\n    }\n    return {\n      x,\n      y\n    };\n  }\n};\nfunction pushOrConcat(base, toPush) {\n  if (toPush) {\n    if (isArray(toPush)) {\n      Array.prototype.push.apply(base, toPush);\n    } else {\n      base.push(toPush);\n    }\n  }\n  return base;\n}\nfunction splitNewlines(str) {\n  if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n    return str.split('\\n');\n  }\n  return str;\n}\nfunction createTooltipItem(chart, item) {\n  const {element, datasetIndex, index} = item;\n  const controller = chart.getDatasetMeta(datasetIndex).controller;\n  const {label, value} = controller.getLabelAndValue(index);\n  return {\n    chart,\n    label,\n    parsed: controller.getParsed(index),\n    raw: chart.data.datasets[datasetIndex].data[index],\n    formattedValue: value,\n    dataset: controller.getDataset(),\n    dataIndex: index,\n    datasetIndex,\n    element\n  };\n}\nfunction getTooltipSize(tooltip, options) {\n  const ctx = tooltip._chart.ctx;\n  const {body, footer, title} = tooltip;\n  const {boxWidth, boxHeight} = options;\n  const bodyFont = toFont(options.bodyFont);\n  const titleFont = toFont(options.titleFont);\n  const footerFont = toFont(options.footerFont);\n  const titleLineCount = title.length;\n  const footerLineCount = footer.length;\n  const bodyLineItemCount = body.length;\n  const padding = toPadding(options.padding);\n  let height = padding.height;\n  let width = 0;\n  let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n  combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n  if (titleLineCount) {\n    height += titleLineCount * titleFont.lineHeight\n\t\t\t+ (titleLineCount - 1) * options.titleSpacing\n\t\t\t+ options.titleMarginBottom;\n  }\n  if (combinedBodyLength) {\n    const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n    height += bodyLineItemCount * bodyLineHeight\n\t\t\t+ (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight\n\t\t\t+ (combinedBodyLength - 1) * options.bodySpacing;\n  }\n  if (footerLineCount) {\n    height += options.footerMarginTop\n\t\t\t+ footerLineCount * footerFont.lineHeight\n\t\t\t+ (footerLineCount - 1) * options.footerSpacing;\n  }\n  let widthPadding = 0;\n  const maxLineWidth = function(line) {\n    width = Math.max(width, ctx.measureText(line).width + widthPadding);\n  };\n  ctx.save();\n  ctx.font = titleFont.string;\n  each(tooltip.title, maxLineWidth);\n  ctx.font = bodyFont.string;\n  each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n  widthPadding = options.displayColors ? (boxWidth + 2) : 0;\n  each(body, (bodyItem) => {\n    each(bodyItem.before, maxLineWidth);\n    each(bodyItem.lines, maxLineWidth);\n    each(bodyItem.after, maxLineWidth);\n  });\n  widthPadding = 0;\n  ctx.font = footerFont.string;\n  each(tooltip.footer, maxLineWidth);\n  ctx.restore();\n  width += padding.width;\n  return {width, height};\n}\nfunction determineYAlign(chart, size) {\n  const {y, height} = size;\n  if (y < height / 2) {\n    return 'top';\n  } else if (y > (chart.height - height / 2)) {\n    return 'bottom';\n  }\n  return 'center';\n}\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n  const {x, width} = size;\n  const caret = options.caretSize + options.caretPadding;\n  if (xAlign === 'left' && x + width + caret > chart.width) {\n    return true;\n  }\n  if (xAlign === 'right' && x - width - caret < 0) {\n    return true;\n  }\n}\nfunction determineXAlign(chart, options, size, yAlign) {\n  const {x, width} = size;\n  const {width: chartWidth, chartArea: {left, right}} = chart;\n  let xAlign = 'center';\n  if (yAlign === 'center') {\n    xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n  } else if (x <= width / 2) {\n    xAlign = 'left';\n  } else if (x >= chartWidth - width / 2) {\n    xAlign = 'right';\n  }\n  if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n    xAlign = 'center';\n  }\n  return xAlign;\n}\nfunction determineAlignment(chart, options, size) {\n  const yAlign = options.yAlign || determineYAlign(chart, size);\n  return {\n    xAlign: options.xAlign || determineXAlign(chart, options, size, yAlign),\n    yAlign\n  };\n}\nfunction alignX(size, xAlign) {\n  let {x, width} = size;\n  if (xAlign === 'right') {\n    x -= width;\n  } else if (xAlign === 'center') {\n    x -= (width / 2);\n  }\n  return x;\n}\nfunction alignY(size, yAlign, paddingAndSize) {\n  let {y, height} = size;\n  if (yAlign === 'top') {\n    y += paddingAndSize;\n  } else if (yAlign === 'bottom') {\n    y -= height + paddingAndSize;\n  } else {\n    y -= (height / 2);\n  }\n  return y;\n}\nfunction getBackgroundPoint(options, size, alignment, chart) {\n  const {caretSize, caretPadding, cornerRadius} = options;\n  const {xAlign, yAlign} = alignment;\n  const paddingAndSize = caretSize + caretPadding;\n  const radiusAndPadding = cornerRadius + caretPadding;\n  let x = alignX(size, xAlign);\n  const y = alignY(size, yAlign, paddingAndSize);\n  if (yAlign === 'center') {\n    if (xAlign === 'left') {\n      x += paddingAndSize;\n    } else if (xAlign === 'right') {\n      x -= paddingAndSize;\n    }\n  } else if (xAlign === 'left') {\n    x -= radiusAndPadding;\n  } else if (xAlign === 'right') {\n    x += radiusAndPadding;\n  }\n  return {\n    x: _limitValue(x, 0, chart.width - size.width),\n    y: _limitValue(y, 0, chart.height - size.height)\n  };\n}\nfunction getAlignedX(tooltip, align, options) {\n  const padding = toPadding(options.padding);\n  return align === 'center'\n    ? tooltip.x + tooltip.width / 2\n    : align === 'right'\n      ? tooltip.x + tooltip.width - padding.right\n      : tooltip.x + padding.left;\n}\nfunction getBeforeAfterBodyLines(callback) {\n  return pushOrConcat([], splitNewlines(callback));\n}\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n  return Object.assign(Object.create(parent), {\n    tooltip,\n    tooltipItems,\n    type: 'tooltip'\n  });\n}\nfunction overrideCallbacks(callbacks, context) {\n  const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n  return override ? callbacks.override(override) : callbacks;\n}\nclass Tooltip extends Element {\n  constructor(config) {\n    super();\n    this.opacity = 0;\n    this._active = [];\n    this._chart = config._chart;\n    this._eventPosition = undefined;\n    this._size = undefined;\n    this._cachedAnimations = undefined;\n    this._tooltipItems = [];\n    this.$animations = undefined;\n    this.$context = undefined;\n    this.options = config.options;\n    this.dataPoints = undefined;\n    this.title = undefined;\n    this.beforeBody = undefined;\n    this.body = undefined;\n    this.afterBody = undefined;\n    this.footer = undefined;\n    this.xAlign = undefined;\n    this.yAlign = undefined;\n    this.x = undefined;\n    this.y = undefined;\n    this.height = undefined;\n    this.width = undefined;\n    this.caretX = undefined;\n    this.caretY = undefined;\n    this.labelColors = undefined;\n    this.labelPointStyles = undefined;\n    this.labelTextColors = undefined;\n  }\n  initialize(options) {\n    this.options = options;\n    this._cachedAnimations = undefined;\n    this.$context = undefined;\n  }\n  _resolveAnimations() {\n    const me = this;\n    const cached = me._cachedAnimations;\n    if (cached) {\n      return cached;\n    }\n    const chart = me._chart;\n    const options = me.options.setContext(me.getContext());\n    const opts = options.enabled && chart.options.animation && options.animations;\n    const animations = new Animations(me._chart, opts);\n    if (opts._cacheable) {\n      me._cachedAnimations = Object.freeze(animations);\n    }\n    return animations;\n  }\n  getContext() {\n    const me = this;\n    return me.$context ||\n\t\t\t(me.$context = createTooltipContext(me._chart.getContext(), me, me._tooltipItems));\n  }\n  getTitle(context, options) {\n    const me = this;\n    const {callbacks} = options;\n    const beforeTitle = callbacks.beforeTitle.apply(me, [context]);\n    const title = callbacks.title.apply(me, [context]);\n    const afterTitle = callbacks.afterTitle.apply(me, [context]);\n    let lines = [];\n    lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n    lines = pushOrConcat(lines, splitNewlines(title));\n    lines = pushOrConcat(lines, splitNewlines(afterTitle));\n    return lines;\n  }\n  getBeforeBody(tooltipItems, options) {\n    return getBeforeAfterBodyLines(options.callbacks.beforeBody.apply(this, [tooltipItems]));\n  }\n  getBody(tooltipItems, options) {\n    const me = this;\n    const {callbacks} = options;\n    const bodyItems = [];\n    each(tooltipItems, (context) => {\n      const bodyItem = {\n        before: [],\n        lines: [],\n        after: []\n      };\n      const scoped = overrideCallbacks(callbacks, context);\n      pushOrConcat(bodyItem.before, splitNewlines(scoped.beforeLabel.call(me, context)));\n      pushOrConcat(bodyItem.lines, scoped.label.call(me, context));\n      pushOrConcat(bodyItem.after, splitNewlines(scoped.afterLabel.call(me, context)));\n      bodyItems.push(bodyItem);\n    });\n    return bodyItems;\n  }\n  getAfterBody(tooltipItems, options) {\n    return getBeforeAfterBodyLines(options.callbacks.afterBody.apply(this, [tooltipItems]));\n  }\n  getFooter(tooltipItems, options) {\n    const me = this;\n    const {callbacks} = options;\n    const beforeFooter = callbacks.beforeFooter.apply(me, [tooltipItems]);\n    const footer = callbacks.footer.apply(me, [tooltipItems]);\n    const afterFooter = callbacks.afterFooter.apply(me, [tooltipItems]);\n    let lines = [];\n    lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n    lines = pushOrConcat(lines, splitNewlines(footer));\n    lines = pushOrConcat(lines, splitNewlines(afterFooter));\n    return lines;\n  }\n  _createItems(options) {\n    const me = this;\n    const active = me._active;\n    const data = me._chart.data;\n    const labelColors = [];\n    const labelPointStyles = [];\n    const labelTextColors = [];\n    let tooltipItems = [];\n    let i, len;\n    for (i = 0, len = active.length; i < len; ++i) {\n      tooltipItems.push(createTooltipItem(me._chart, active[i]));\n    }\n    if (options.filter) {\n      tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data));\n    }\n    if (options.itemSort) {\n      tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data));\n    }\n    each(tooltipItems, (context) => {\n      const scoped = overrideCallbacks(options.callbacks, context);\n      labelColors.push(scoped.labelColor.call(me, context));\n      labelPointStyles.push(scoped.labelPointStyle.call(me, context));\n      labelTextColors.push(scoped.labelTextColor.call(me, context));\n    });\n    me.labelColors = labelColors;\n    me.labelPointStyles = labelPointStyles;\n    me.labelTextColors = labelTextColors;\n    me.dataPoints = tooltipItems;\n    return tooltipItems;\n  }\n  update(changed, replay) {\n    const me = this;\n    const options = me.options.setContext(me.getContext());\n    const active = me._active;\n    let properties;\n    let tooltipItems = [];\n    if (!active.length) {\n      if (me.opacity !== 0) {\n        properties = {\n          opacity: 0\n        };\n      }\n    } else {\n      const position = positioners[options.position].call(me, active, me._eventPosition);\n      tooltipItems = me._createItems(options);\n      me.title = me.getTitle(tooltipItems, options);\n      me.beforeBody = me.getBeforeBody(tooltipItems, options);\n      me.body = me.getBody(tooltipItems, options);\n      me.afterBody = me.getAfterBody(tooltipItems, options);\n      me.footer = me.getFooter(tooltipItems, options);\n      const size = me._size = getTooltipSize(me, options);\n      const positionAndSize = Object.assign({}, position, size);\n      const alignment = determineAlignment(me._chart, options, positionAndSize);\n      const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, me._chart);\n      me.xAlign = alignment.xAlign;\n      me.yAlign = alignment.yAlign;\n      properties = {\n        opacity: 1,\n        x: backgroundPoint.x,\n        y: backgroundPoint.y,\n        width: size.width,\n        height: size.height,\n        caretX: position.x,\n        caretY: position.y\n      };\n    }\n    me._tooltipItems = tooltipItems;\n    me.$context = undefined;\n    if (properties) {\n      me._resolveAnimations().update(me, properties);\n    }\n    if (changed && options.external) {\n      options.external.call(me, {chart: me._chart, tooltip: me, replay});\n    }\n  }\n  drawCaret(tooltipPoint, ctx, size, options) {\n    const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n    ctx.lineTo(caretPosition.x1, caretPosition.y1);\n    ctx.lineTo(caretPosition.x2, caretPosition.y2);\n    ctx.lineTo(caretPosition.x3, caretPosition.y3);\n  }\n  getCaretPosition(tooltipPoint, size, options) {\n    const {xAlign, yAlign} = this;\n    const {cornerRadius, caretSize} = options;\n    const {x: ptX, y: ptY} = tooltipPoint;\n    const {width, height} = size;\n    let x1, x2, x3, y1, y2, y3;\n    if (yAlign === 'center') {\n      y2 = ptY + (height / 2);\n      if (xAlign === 'left') {\n        x1 = ptX;\n        x2 = x1 - caretSize;\n        y1 = y2 + caretSize;\n        y3 = y2 - caretSize;\n      } else {\n        x1 = ptX + width;\n        x2 = x1 + caretSize;\n        y1 = y2 - caretSize;\n        y3 = y2 + caretSize;\n      }\n      x3 = x1;\n    } else {\n      if (xAlign === 'left') {\n        x2 = ptX + cornerRadius + (caretSize);\n      } else if (xAlign === 'right') {\n        x2 = ptX + width - cornerRadius - caretSize;\n      } else {\n        x2 = this.caretX;\n      }\n      if (yAlign === 'top') {\n        y1 = ptY;\n        y2 = y1 - caretSize;\n        x1 = x2 - caretSize;\n        x3 = x2 + caretSize;\n      } else {\n        y1 = ptY + height;\n        y2 = y1 + caretSize;\n        x1 = x2 + caretSize;\n        x3 = x2 - caretSize;\n      }\n      y3 = y1;\n    }\n    return {x1, x2, x3, y1, y2, y3};\n  }\n  drawTitle(pt, ctx, options) {\n    const me = this;\n    const title = me.title;\n    const length = title.length;\n    let titleFont, titleSpacing, i;\n    if (length) {\n      const rtlHelper = getRtlAdapter(options.rtl, me.x, me.width);\n      pt.x = getAlignedX(me, options.titleAlign, options);\n      ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n      ctx.textBaseline = 'middle';\n      titleFont = toFont(options.titleFont);\n      titleSpacing = options.titleSpacing;\n      ctx.fillStyle = options.titleColor;\n      ctx.font = titleFont.string;\n      for (i = 0; i < length; ++i) {\n        ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n        pt.y += titleFont.lineHeight + titleSpacing;\n        if (i + 1 === length) {\n          pt.y += options.titleMarginBottom - titleSpacing;\n        }\n      }\n    }\n  }\n  _drawColorBox(ctx, pt, i, rtlHelper, options) {\n    const me = this;\n    const labelColors = me.labelColors[i];\n    const labelPointStyle = me.labelPointStyles[i];\n    const {boxHeight, boxWidth} = options;\n    const bodyFont = toFont(options.bodyFont);\n    const colorX = getAlignedX(me, 'left', options);\n    const rtlColorX = rtlHelper.x(colorX);\n    const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n    const colorY = pt.y + yOffSet;\n    if (options.usePointStyle) {\n      const drawOptions = {\n        radius: Math.min(boxWidth, boxHeight) / 2,\n        pointStyle: labelPointStyle.pointStyle,\n        rotation: labelPointStyle.rotation,\n        borderWidth: 1\n      };\n      const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n      const centerY = colorY + boxHeight / 2;\n      ctx.strokeStyle = options.multiKeyBackground;\n      ctx.fillStyle = options.multiKeyBackground;\n      drawPoint(ctx, drawOptions, centerX, centerY);\n      ctx.strokeStyle = labelColors.borderColor;\n      ctx.fillStyle = labelColors.backgroundColor;\n      drawPoint(ctx, drawOptions, centerX, centerY);\n    } else {\n      ctx.lineWidth = labelColors.borderWidth || 1;\n      ctx.strokeStyle = labelColors.borderColor;\n      ctx.setLineDash(labelColors.borderDash || []);\n      ctx.lineDashOffset = labelColors.borderDashOffset || 0;\n      const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);\n      const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);\n      const borderRadius = toTRBLCorners(labelColors.borderRadius);\n      if (Object.values(borderRadius).some(v => v !== 0)) {\n        ctx.beginPath();\n        ctx.fillStyle = options.multiKeyBackground;\n        addRoundedRectPath(ctx, {\n          x: outerX,\n          y: colorY,\n          w: boxWidth,\n          h: boxHeight,\n          radius: borderRadius,\n        });\n        ctx.fill();\n        ctx.stroke();\n        ctx.fillStyle = labelColors.backgroundColor;\n        ctx.beginPath();\n        addRoundedRectPath(ctx, {\n          x: innerX,\n          y: colorY + 1,\n          w: boxWidth - 2,\n          h: boxHeight - 2,\n          radius: borderRadius,\n        });\n        ctx.fill();\n      } else {\n        ctx.fillStyle = options.multiKeyBackground;\n        ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n        ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n        ctx.fillStyle = labelColors.backgroundColor;\n        ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n      }\n    }\n    ctx.fillStyle = me.labelTextColors[i];\n  }\n  drawBody(pt, ctx, options) {\n    const me = this;\n    const {body} = me;\n    const {bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth} = options;\n    const bodyFont = toFont(options.bodyFont);\n    let bodyLineHeight = bodyFont.lineHeight;\n    let xLinePadding = 0;\n    const rtlHelper = getRtlAdapter(options.rtl, me.x, me.width);\n    const fillLineOfText = function(line) {\n      ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n      pt.y += bodyLineHeight + bodySpacing;\n    };\n    const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n    let bodyItem, textColor, lines, i, j, ilen, jlen;\n    ctx.textAlign = bodyAlign;\n    ctx.textBaseline = 'middle';\n    ctx.font = bodyFont.string;\n    pt.x = getAlignedX(me, bodyAlignForCalculation, options);\n    ctx.fillStyle = options.bodyColor;\n    each(me.beforeBody, fillLineOfText);\n    xLinePadding = displayColors && bodyAlignForCalculation !== 'right'\n      ? bodyAlign === 'center' ? (boxWidth / 2 + 1) : (boxWidth + 2)\n      : 0;\n    for (i = 0, ilen = body.length; i < ilen; ++i) {\n      bodyItem = body[i];\n      textColor = me.labelTextColors[i];\n      ctx.fillStyle = textColor;\n      each(bodyItem.before, fillLineOfText);\n      lines = bodyItem.lines;\n      if (displayColors && lines.length) {\n        me._drawColorBox(ctx, pt, i, rtlHelper, options);\n        bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n      }\n      for (j = 0, jlen = lines.length; j < jlen; ++j) {\n        fillLineOfText(lines[j]);\n        bodyLineHeight = bodyFont.lineHeight;\n      }\n      each(bodyItem.after, fillLineOfText);\n    }\n    xLinePadding = 0;\n    bodyLineHeight = bodyFont.lineHeight;\n    each(me.afterBody, fillLineOfText);\n    pt.y -= bodySpacing;\n  }\n  drawFooter(pt, ctx, options) {\n    const me = this;\n    const footer = me.footer;\n    const length = footer.length;\n    let footerFont, i;\n    if (length) {\n      const rtlHelper = getRtlAdapter(options.rtl, me.x, me.width);\n      pt.x = getAlignedX(me, options.footerAlign, options);\n      pt.y += options.footerMarginTop;\n      ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n      ctx.textBaseline = 'middle';\n      footerFont = toFont(options.footerFont);\n      ctx.fillStyle = options.footerColor;\n      ctx.font = footerFont.string;\n      for (i = 0; i < length; ++i) {\n        ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n        pt.y += footerFont.lineHeight + options.footerSpacing;\n      }\n    }\n  }\n  drawBackground(pt, ctx, tooltipSize, options) {\n    const {xAlign, yAlign} = this;\n    const {x, y} = pt;\n    const {width, height} = tooltipSize;\n    const radius = options.cornerRadius;\n    ctx.fillStyle = options.backgroundColor;\n    ctx.strokeStyle = options.borderColor;\n    ctx.lineWidth = options.borderWidth;\n    ctx.beginPath();\n    ctx.moveTo(x + radius, y);\n    if (yAlign === 'top') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + width - radius, y);\n    ctx.quadraticCurveTo(x + width, y, x + width, y + radius);\n    if (yAlign === 'center' && xAlign === 'right') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + width, y + height - radius);\n    ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height);\n    if (yAlign === 'bottom') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + radius, y + height);\n    ctx.quadraticCurveTo(x, y + height, x, y + height - radius);\n    if (yAlign === 'center' && xAlign === 'left') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x, y + radius);\n    ctx.quadraticCurveTo(x, y, x + radius, y);\n    ctx.closePath();\n    ctx.fill();\n    if (options.borderWidth > 0) {\n      ctx.stroke();\n    }\n  }\n  _updateAnimationTarget(options) {\n    const me = this;\n    const chart = me._chart;\n    const anims = me.$animations;\n    const animX = anims && anims.x;\n    const animY = anims && anims.y;\n    if (animX || animY) {\n      const position = positioners[options.position].call(me, me._active, me._eventPosition);\n      if (!position) {\n        return;\n      }\n      const size = me._size = getTooltipSize(me, options);\n      const positionAndSize = Object.assign({}, position, me._size);\n      const alignment = determineAlignment(chart, options, positionAndSize);\n      const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n      if (animX._to !== point.x || animY._to !== point.y) {\n        me.xAlign = alignment.xAlign;\n        me.yAlign = alignment.yAlign;\n        me.width = size.width;\n        me.height = size.height;\n        me.caretX = position.x;\n        me.caretY = position.y;\n        me._resolveAnimations().update(me, point);\n      }\n    }\n  }\n  draw(ctx) {\n    const me = this;\n    const options = me.options.setContext(me.getContext());\n    let opacity = me.opacity;\n    if (!opacity) {\n      return;\n    }\n    me._updateAnimationTarget(options);\n    const tooltipSize = {\n      width: me.width,\n      height: me.height\n    };\n    const pt = {\n      x: me.x,\n      y: me.y\n    };\n    opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n    const padding = toPadding(options.padding);\n    const hasTooltipContent = me.title.length || me.beforeBody.length || me.body.length || me.afterBody.length || me.footer.length;\n    if (options.enabled && hasTooltipContent) {\n      ctx.save();\n      ctx.globalAlpha = opacity;\n      me.drawBackground(pt, ctx, tooltipSize, options);\n      overrideTextDirection(ctx, options.textDirection);\n      pt.y += padding.top;\n      me.drawTitle(pt, ctx, options);\n      me.drawBody(pt, ctx, options);\n      me.drawFooter(pt, ctx, options);\n      restoreTextDirection(ctx, options.textDirection);\n      ctx.restore();\n    }\n  }\n  getActiveElements() {\n    return this._active || [];\n  }\n  setActiveElements(activeElements, eventPosition) {\n    const me = this;\n    const lastActive = me._active;\n    const active = activeElements.map(({datasetIndex, index}) => {\n      const meta = me._chart.getDatasetMeta(datasetIndex);\n      if (!meta) {\n        throw new Error('Cannot find a dataset at index ' + datasetIndex);\n      }\n      return {\n        datasetIndex,\n        element: meta.data[index],\n        index,\n      };\n    });\n    const changed = !_elementsEqual(lastActive, active);\n    const positionChanged = me._positionChanged(active, eventPosition);\n    if (changed || positionChanged) {\n      me._active = active;\n      me._eventPosition = eventPosition;\n      me.update(true);\n    }\n  }\n  handleEvent(e, replay) {\n    const me = this;\n    const options = me.options;\n    const lastActive = me._active || [];\n    let changed = false;\n    let active = [];\n    if (e.type !== 'mouseout') {\n      active = me._chart.getElementsAtEventForMode(e, options.mode, options, replay);\n      if (options.reverse) {\n        active.reverse();\n      }\n    }\n    const positionChanged = me._positionChanged(active, e);\n    changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n    if (changed) {\n      me._active = active;\n      if (options.enabled || options.external) {\n        me._eventPosition = {\n          x: e.x,\n          y: e.y\n        };\n        me.update(true, replay);\n      }\n    }\n    return changed;\n  }\n  _positionChanged(active, e) {\n    const {caretX, caretY, options} = this;\n    const position = positioners[options.position].call(this, active, e);\n    return position !== false && (caretX !== position.x || caretY !== position.y);\n  }\n}\nTooltip.positioners = positioners;\nvar plugin_tooltip = {\n  id: 'tooltip',\n  _element: Tooltip,\n  positioners,\n  afterInit(chart, _args, options) {\n    if (options) {\n      chart.tooltip = new Tooltip({_chart: chart, options});\n    }\n  },\n  beforeUpdate(chart, _args, options) {\n    if (chart.tooltip) {\n      chart.tooltip.initialize(options);\n    }\n  },\n  reset(chart, _args, options) {\n    if (chart.tooltip) {\n      chart.tooltip.initialize(options);\n    }\n  },\n  afterDraw(chart) {\n    const tooltip = chart.tooltip;\n    const args = {\n      tooltip\n    };\n    if (chart.notifyPlugins('beforeTooltipDraw', args) === false) {\n      return;\n    }\n    if (tooltip) {\n      tooltip.draw(chart.ctx);\n    }\n    chart.notifyPlugins('afterTooltipDraw', args);\n  },\n  afterEvent(chart, args) {\n    if (chart.tooltip) {\n      const useFinalPosition = args.replay;\n      if (chart.tooltip.handleEvent(args.event, useFinalPosition)) {\n        args.changed = true;\n      }\n    }\n  },\n  defaults: {\n    enabled: true,\n    external: null,\n    position: 'average',\n    backgroundColor: 'rgba(0,0,0,0.8)',\n    titleColor: '#fff',\n    titleFont: {\n      weight: 'bold',\n    },\n    titleSpacing: 2,\n    titleMarginBottom: 6,\n    titleAlign: 'left',\n    bodyColor: '#fff',\n    bodySpacing: 2,\n    bodyFont: {\n    },\n    bodyAlign: 'left',\n    footerColor: '#fff',\n    footerSpacing: 2,\n    footerMarginTop: 6,\n    footerFont: {\n      weight: 'bold',\n    },\n    footerAlign: 'left',\n    padding: 6,\n    caretPadding: 2,\n    caretSize: 5,\n    cornerRadius: 6,\n    boxHeight: (ctx, opts) => opts.bodyFont.size,\n    boxWidth: (ctx, opts) => opts.bodyFont.size,\n    multiKeyBackground: '#fff',\n    displayColors: true,\n    borderColor: 'rgba(0,0,0,0)',\n    borderWidth: 0,\n    animation: {\n      duration: 400,\n      easing: 'easeOutQuart',\n    },\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'width', 'height', 'caretX', 'caretY'],\n      },\n      opacity: {\n        easing: 'linear',\n        duration: 200\n      }\n    },\n    callbacks: {\n      beforeTitle: noop,\n      title(tooltipItems) {\n        if (tooltipItems.length > 0) {\n          const item = tooltipItems[0];\n          const labels = item.chart.data.labels;\n          const labelCount = labels ? labels.length : 0;\n          if (this && this.options && this.options.mode === 'dataset') {\n            return item.dataset.label || '';\n          } else if (item.label) {\n            return item.label;\n          } else if (labelCount > 0 && item.dataIndex < labelCount) {\n            return labels[item.dataIndex];\n          }\n        }\n        return '';\n      },\n      afterTitle: noop,\n      beforeBody: noop,\n      beforeLabel: noop,\n      label(tooltipItem) {\n        if (this && this.options && this.options.mode === 'dataset') {\n          return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n        }\n        let label = tooltipItem.dataset.label || '';\n        if (label) {\n          label += ': ';\n        }\n        const value = tooltipItem.formattedValue;\n        if (!isNullOrUndef(value)) {\n          label += value;\n        }\n        return label;\n      },\n      labelColor(tooltipItem) {\n        const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n        const options = meta.controller.getStyle(tooltipItem.dataIndex);\n        return {\n          borderColor: options.borderColor,\n          backgroundColor: options.backgroundColor,\n          borderWidth: options.borderWidth,\n          borderDash: options.borderDash,\n          borderDashOffset: options.borderDashOffset,\n          borderRadius: 0,\n        };\n      },\n      labelTextColor() {\n        return this.options.bodyColor;\n      },\n      labelPointStyle(tooltipItem) {\n        const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n        const options = meta.controller.getStyle(tooltipItem.dataIndex);\n        return {\n          pointStyle: options.pointStyle,\n          rotation: options.rotation,\n        };\n      },\n      afterLabel: noop,\n      afterBody: noop,\n      beforeFooter: noop,\n      footer: noop,\n      afterFooter: noop\n    }\n  },\n  defaultRoutes: {\n    bodyFont: 'font',\n    footerFont: 'font',\n    titleFont: 'font'\n  },\n  descriptors: {\n    _scriptable: (name) => name !== 'filter' && name !== 'itemSort' && name !== 'external',\n    _indexable: false,\n    callbacks: {\n      _scriptable: false,\n      _indexable: false,\n    },\n    animation: {\n      _fallback: false\n    },\n    animations: {\n      _fallback: 'animation'\n    }\n  },\n  additionalOptionScopes: ['interaction']\n};\n\nvar plugins = /*#__PURE__*/Object.freeze({\n__proto__: null,\nDecimation: plugin_decimation,\nFiller: plugin_filler,\nLegend: plugin_legend,\nSubTitle: plugin_subtitle,\nTitle: plugin_title,\nTooltip: plugin_tooltip\n});\n\nconst addIfString = (labels, raw, index) => typeof raw === 'string'\n  ? labels.push(raw) - 1\n  : isNaN(raw) ? null : index;\nfunction findOrAddLabel(labels, raw, index) {\n  const first = labels.indexOf(raw);\n  if (first === -1) {\n    return addIfString(labels, raw, index);\n  }\n  const last = labels.lastIndexOf(raw);\n  return first !== last ? index : first;\n}\nconst validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max);\nclass CategoryScale extends Scale {\n  constructor(cfg) {\n    super(cfg);\n    this._startValue = undefined;\n    this._valueRange = 0;\n  }\n  parse(raw, index) {\n    if (isNullOrUndef(raw)) {\n      return null;\n    }\n    const labels = this.getLabels();\n    index = isFinite(index) && labels[index] === raw ? index\n      : findOrAddLabel(labels, raw, valueOrDefault(index, raw));\n    return validIndex(index, labels.length - 1);\n  }\n  determineDataLimits() {\n    const me = this;\n    const {minDefined, maxDefined} = me.getUserBounds();\n    let {min, max} = me.getMinMax(true);\n    if (me.options.bounds === 'ticks') {\n      if (!minDefined) {\n        min = 0;\n      }\n      if (!maxDefined) {\n        max = me.getLabels().length - 1;\n      }\n    }\n    me.min = min;\n    me.max = max;\n  }\n  buildTicks() {\n    const me = this;\n    const min = me.min;\n    const max = me.max;\n    const offset = me.options.offset;\n    const ticks = [];\n    let labels = me.getLabels();\n    labels = (min === 0 && max === labels.length - 1) ? labels : labels.slice(min, max + 1);\n    me._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n    me._startValue = me.min - (offset ? 0.5 : 0);\n    for (let value = min; value <= max; value++) {\n      ticks.push({value});\n    }\n    return ticks;\n  }\n  getLabelForValue(value) {\n    const me = this;\n    const labels = me.getLabels();\n    if (value >= 0 && value < labels.length) {\n      return labels[value];\n    }\n    return value;\n  }\n  configure() {\n    const me = this;\n    super.configure();\n    if (!me.isHorizontal()) {\n      me._reversePixels = !me._reversePixels;\n    }\n  }\n  getPixelForValue(value) {\n    const me = this;\n    if (typeof value !== 'number') {\n      value = me.parse(value);\n    }\n    return value === null ? NaN : me.getPixelForDecimal((value - me._startValue) / me._valueRange);\n  }\n  getPixelForTick(index) {\n    const me = this;\n    const ticks = me.ticks;\n    if (index < 0 || index > ticks.length - 1) {\n      return null;\n    }\n    return me.getPixelForValue(ticks[index].value);\n  }\n  getValueForPixel(pixel) {\n    const me = this;\n    return Math.round(me._startValue + me.getDecimalForPixel(pixel) * me._valueRange);\n  }\n  getBasePixel() {\n    return this.bottom;\n  }\n}\nCategoryScale.id = 'category';\nCategoryScale.defaults = {\n  ticks: {\n    callback: CategoryScale.prototype.getLabelForValue\n  }\n};\n\nfunction generateTicks$1(generationOptions, dataRange) {\n  const ticks = [];\n  const MIN_SPACING = 1e-14;\n  const {bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds} = generationOptions;\n  const unit = step || 1;\n  const maxSpaces = maxTicks - 1;\n  const {min: rmin, max: rmax} = dataRange;\n  const minDefined = !isNullOrUndef(min);\n  const maxDefined = !isNullOrUndef(max);\n  const countDefined = !isNullOrUndef(count);\n  const minSpacing = (rmax - rmin) / (maxDigits + 1);\n  let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n  let factor, niceMin, niceMax, numSpaces;\n  if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n    return [{value: rmin}, {value: rmax}];\n  }\n  numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n  if (numSpaces > maxSpaces) {\n    spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n  }\n  if (!isNullOrUndef(precision)) {\n    factor = Math.pow(10, precision);\n    spacing = Math.ceil(spacing * factor) / factor;\n  }\n  if (bounds === 'ticks') {\n    niceMin = Math.floor(rmin / spacing) * spacing;\n    niceMax = Math.ceil(rmax / spacing) * spacing;\n  } else {\n    niceMin = rmin;\n    niceMax = rmax;\n  }\n  if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n    numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n    spacing = (max - min) / numSpaces;\n    niceMin = min;\n    niceMax = max;\n  } else if (countDefined) {\n    niceMin = minDefined ? min : niceMin;\n    niceMax = maxDefined ? max : niceMax;\n    numSpaces = count - 1;\n    spacing = (niceMax - niceMin) / numSpaces;\n  } else {\n    numSpaces = (niceMax - niceMin) / spacing;\n    if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n      numSpaces = Math.round(numSpaces);\n    } else {\n      numSpaces = Math.ceil(numSpaces);\n    }\n  }\n  const decimalPlaces = Math.max(\n    _decimalPlaces(spacing),\n    _decimalPlaces(niceMin)\n  );\n  factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n  niceMin = Math.round(niceMin * factor) / factor;\n  niceMax = Math.round(niceMax * factor) / factor;\n  let j = 0;\n  if (minDefined) {\n    if (includeBounds && niceMin !== min) {\n      ticks.push({value: min});\n      if (niceMin < min) {\n        j++;\n      }\n      if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n        j++;\n      }\n    } else if (niceMin < min) {\n      j++;\n    }\n  }\n  for (; j < numSpaces; ++j) {\n    ticks.push({value: Math.round((niceMin + j * spacing) * factor) / factor});\n  }\n  if (maxDefined && includeBounds && niceMax !== max) {\n    if (almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n      ticks[ticks.length - 1].value = max;\n    } else {\n      ticks.push({value: max});\n    }\n  } else if (!maxDefined || niceMax === max) {\n    ticks.push({value: niceMax});\n  }\n  return ticks;\n}\nfunction relativeLabelSize(value, minSpacing, {horizontal, minRotation}) {\n  const rad = toRadians(minRotation);\n  const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n  const length = 0.75 * minSpacing * ('' + value).length;\n  return Math.min(minSpacing / ratio, length);\n}\nclass LinearScaleBase extends Scale {\n  constructor(cfg) {\n    super(cfg);\n    this.start = undefined;\n    this.end = undefined;\n    this._startValue = undefined;\n    this._endValue = undefined;\n    this._valueRange = 0;\n  }\n  parse(raw, index) {\n    if (isNullOrUndef(raw)) {\n      return null;\n    }\n    if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n      return null;\n    }\n    return +raw;\n  }\n  handleTickRangeOptions() {\n    const me = this;\n    const {beginAtZero} = me.options;\n    const {minDefined, maxDefined} = me.getUserBounds();\n    let {min, max} = me;\n    const setMin = v => (min = minDefined ? min : v);\n    const setMax = v => (max = maxDefined ? max : v);\n    if (beginAtZero) {\n      const minSign = sign(min);\n      const maxSign = sign(max);\n      if (minSign < 0 && maxSign < 0) {\n        setMax(0);\n      } else if (minSign > 0 && maxSign > 0) {\n        setMin(0);\n      }\n    }\n    if (min === max) {\n      let offset = 1;\n      if (max >= Number.MAX_SAFE_INTEGER || min <= Number.MIN_SAFE_INTEGER) {\n        offset = Math.abs(max * 0.05);\n      }\n      setMax(max + offset);\n      if (!beginAtZero) {\n        setMin(min - offset);\n      }\n    }\n    me.min = min;\n    me.max = max;\n  }\n  getTickLimit() {\n    const me = this;\n    const tickOpts = me.options.ticks;\n    let {maxTicksLimit, stepSize} = tickOpts;\n    let maxTicks;\n    if (stepSize) {\n      maxTicks = Math.ceil(me.max / stepSize) - Math.floor(me.min / stepSize) + 1;\n    } else {\n      maxTicks = me.computeTickLimit();\n      maxTicksLimit = maxTicksLimit || 11;\n    }\n    if (maxTicksLimit) {\n      maxTicks = Math.min(maxTicksLimit, maxTicks);\n    }\n    return maxTicks;\n  }\n  computeTickLimit() {\n    return Number.POSITIVE_INFINITY;\n  }\n  buildTicks() {\n    const me = this;\n    const opts = me.options;\n    const tickOpts = opts.ticks;\n    let maxTicks = me.getTickLimit();\n    maxTicks = Math.max(2, maxTicks);\n    const numericGeneratorOptions = {\n      maxTicks,\n      bounds: opts.bounds,\n      min: opts.min,\n      max: opts.max,\n      precision: tickOpts.precision,\n      step: tickOpts.stepSize,\n      count: tickOpts.count,\n      maxDigits: me._maxDigits(),\n      horizontal: me.isHorizontal(),\n      minRotation: tickOpts.minRotation || 0,\n      includeBounds: tickOpts.includeBounds !== false\n    };\n    const dataRange = me._range || me;\n    const ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n    if (opts.bounds === 'ticks') {\n      _setMinAndMaxByKey(ticks, me, 'value');\n    }\n    if (opts.reverse) {\n      ticks.reverse();\n      me.start = me.max;\n      me.end = me.min;\n    } else {\n      me.start = me.min;\n      me.end = me.max;\n    }\n    return ticks;\n  }\n  configure() {\n    const me = this;\n    const ticks = me.ticks;\n    let start = me.min;\n    let end = me.max;\n    super.configure();\n    if (me.options.offset && ticks.length) {\n      const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n      start -= offset;\n      end += offset;\n    }\n    me._startValue = start;\n    me._endValue = end;\n    me._valueRange = end - start;\n  }\n  getLabelForValue(value) {\n    return formatNumber(value, this.chart.options.locale);\n  }\n}\n\nclass LinearScale extends LinearScaleBase {\n  determineDataLimits() {\n    const me = this;\n    const {min, max} = me.getMinMax(true);\n    me.min = isNumberFinite(min) ? min : 0;\n    me.max = isNumberFinite(max) ? max : 1;\n    me.handleTickRangeOptions();\n  }\n  computeTickLimit() {\n    const me = this;\n    const horizontal = me.isHorizontal();\n    const length = horizontal ? me.width : me.height;\n    const minRotation = toRadians(me.options.ticks.minRotation);\n    const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n    const tickFont = me._resolveTickFontOptions(0);\n    return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n  }\n  getPixelForValue(value) {\n    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n  }\n  getValueForPixel(pixel) {\n    return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n  }\n}\nLinearScale.id = 'linear';\nLinearScale.defaults = {\n  ticks: {\n    callback: Ticks.formatters.numeric\n  }\n};\n\nfunction isMajor(tickVal) {\n  const remain = tickVal / (Math.pow(10, Math.floor(log10(tickVal))));\n  return remain === 1;\n}\nfunction generateTicks(generationOptions, dataRange) {\n  const endExp = Math.floor(log10(dataRange.max));\n  const endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));\n  const ticks = [];\n  let tickVal = finiteOrDefault(generationOptions.min, Math.pow(10, Math.floor(log10(dataRange.min))));\n  let exp = Math.floor(log10(tickVal));\n  let significand = Math.floor(tickVal / Math.pow(10, exp));\n  let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n  do {\n    ticks.push({value: tickVal, major: isMajor(tickVal)});\n    ++significand;\n    if (significand === 10) {\n      significand = 1;\n      ++exp;\n      precision = exp >= 0 ? 1 : precision;\n    }\n    tickVal = Math.round(significand * Math.pow(10, exp) * precision) / precision;\n  } while (exp < endExp || (exp === endExp && significand < endSignificand));\n  const lastTick = finiteOrDefault(generationOptions.max, tickVal);\n  ticks.push({value: lastTick, major: isMajor(tickVal)});\n  return ticks;\n}\nclass LogarithmicScale extends Scale {\n  constructor(cfg) {\n    super(cfg);\n    this.start = undefined;\n    this.end = undefined;\n    this._startValue = undefined;\n    this._valueRange = 0;\n  }\n  parse(raw, index) {\n    const value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);\n    if (value === 0) {\n      this._zero = true;\n      return undefined;\n    }\n    return isNumberFinite(value) && value > 0 ? value : null;\n  }\n  determineDataLimits() {\n    const me = this;\n    const {min, max} = me.getMinMax(true);\n    me.min = isNumberFinite(min) ? Math.max(0, min) : null;\n    me.max = isNumberFinite(max) ? Math.max(0, max) : null;\n    if (me.options.beginAtZero) {\n      me._zero = true;\n    }\n    me.handleTickRangeOptions();\n  }\n  handleTickRangeOptions() {\n    const me = this;\n    const {minDefined, maxDefined} = me.getUserBounds();\n    let min = me.min;\n    let max = me.max;\n    const setMin = v => (min = minDefined ? min : v);\n    const setMax = v => (max = maxDefined ? max : v);\n    const exp = (v, m) => Math.pow(10, Math.floor(log10(v)) + m);\n    if (min === max) {\n      if (min <= 0) {\n        setMin(1);\n        setMax(10);\n      } else {\n        setMin(exp(min, -1));\n        setMax(exp(max, +1));\n      }\n    }\n    if (min <= 0) {\n      setMin(exp(max, -1));\n    }\n    if (max <= 0) {\n      setMax(exp(min, +1));\n    }\n    if (me._zero && me.min !== me._suggestedMin && min === exp(me.min, 0)) {\n      setMin(exp(min, -1));\n    }\n    me.min = min;\n    me.max = max;\n  }\n  buildTicks() {\n    const me = this;\n    const opts = me.options;\n    const generationOptions = {\n      min: me._userMin,\n      max: me._userMax\n    };\n    const ticks = generateTicks(generationOptions, me);\n    if (opts.bounds === 'ticks') {\n      _setMinAndMaxByKey(ticks, me, 'value');\n    }\n    if (opts.reverse) {\n      ticks.reverse();\n      me.start = me.max;\n      me.end = me.min;\n    } else {\n      me.start = me.min;\n      me.end = me.max;\n    }\n    return ticks;\n  }\n  getLabelForValue(value) {\n    return value === undefined ? '0' : formatNumber(value, this.chart.options.locale);\n  }\n  configure() {\n    const me = this;\n    const start = me.min;\n    super.configure();\n    me._startValue = log10(start);\n    me._valueRange = log10(me.max) - log10(start);\n  }\n  getPixelForValue(value) {\n    const me = this;\n    if (value === undefined || value === 0) {\n      value = me.min;\n    }\n    if (value === null || isNaN(value)) {\n      return NaN;\n    }\n    return me.getPixelForDecimal(value === me.min\n      ? 0\n      : (log10(value) - me._startValue) / me._valueRange);\n  }\n  getValueForPixel(pixel) {\n    const me = this;\n    const decimal = me.getDecimalForPixel(pixel);\n    return Math.pow(10, me._startValue + decimal * me._valueRange);\n  }\n}\nLogarithmicScale.id = 'logarithmic';\nLogarithmicScale.defaults = {\n  ticks: {\n    callback: Ticks.formatters.logarithmic,\n    major: {\n      enabled: true\n    }\n  }\n};\n\nfunction getTickBackdropHeight(opts) {\n  const tickOpts = opts.ticks;\n  if (tickOpts.display && opts.display) {\n    const padding = toPadding(tickOpts.backdropPadding);\n    return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n  }\n  return 0;\n}\nfunction measureLabelSize(ctx, font, label) {\n  label = isArray(label) ? label : [label];\n  return {\n    w: _longestText(ctx, font.string, label),\n    h: label.length * font.lineHeight\n  };\n}\nfunction determineLimits(angle, pos, size, min, max) {\n  if (angle === min || angle === max) {\n    return {\n      start: pos - (size / 2),\n      end: pos + (size / 2)\n    };\n  } else if (angle < min || angle > max) {\n    return {\n      start: pos - size,\n      end: pos\n    };\n  }\n  return {\n    start: pos,\n    end: pos + size\n  };\n}\nfunction fitWithPointLabels(scale) {\n  const furthestLimits = {\n    l: 0,\n    r: scale.width,\n    t: 0,\n    b: scale.height - scale.paddingTop\n  };\n  const furthestAngles = {};\n  const labelSizes = [];\n  const padding = [];\n  const valueCount = scale.getLabels().length;\n  for (let i = 0; i < valueCount; i++) {\n    const opts = scale.options.pointLabels.setContext(scale.getPointLabelContext(i));\n    padding[i] = opts.padding;\n    const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i]);\n    const plFont = toFont(opts.font);\n    const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n    labelSizes[i] = textSize;\n    const angleRadians = scale.getIndexAngle(i);\n    const angle = toDegrees(angleRadians);\n    const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n    const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n    if (hLimits.start < furthestLimits.l) {\n      furthestLimits.l = hLimits.start;\n      furthestAngles.l = angleRadians;\n    }\n    if (hLimits.end > furthestLimits.r) {\n      furthestLimits.r = hLimits.end;\n      furthestAngles.r = angleRadians;\n    }\n    if (vLimits.start < furthestLimits.t) {\n      furthestLimits.t = vLimits.start;\n      furthestAngles.t = angleRadians;\n    }\n    if (vLimits.end > furthestLimits.b) {\n      furthestLimits.b = vLimits.end;\n      furthestAngles.b = angleRadians;\n    }\n  }\n  scale._setReductions(scale.drawingArea, furthestLimits, furthestAngles);\n  scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n  const items = [];\n  const valueCount = scale.getLabels().length;\n  const opts = scale.options;\n  const tickBackdropHeight = getTickBackdropHeight(opts);\n  const outerDistance = scale.getDistanceFromCenterForValue(opts.ticks.reverse ? scale.min : scale.max);\n  for (let i = 0; i < valueCount; i++) {\n    const extra = (i === 0 ? tickBackdropHeight / 2 : 0);\n    const pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + padding[i]);\n    const angle = toDegrees(scale.getIndexAngle(i));\n    const size = labelSizes[i];\n    const y = yForAngle(pointLabelPosition.y, size.h, angle);\n    const textAlign = getTextAlignForAngle(angle);\n    const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n    items.push({\n      x: pointLabelPosition.x,\n      y,\n      textAlign,\n      left,\n      top: y,\n      right: left + size.w,\n      bottom: y + size.h\n    });\n  }\n  return items;\n}\nfunction getTextAlignForAngle(angle) {\n  if (angle === 0 || angle === 180) {\n    return 'center';\n  } else if (angle < 180) {\n    return 'left';\n  }\n  return 'right';\n}\nfunction leftForTextAlign(x, w, align) {\n  if (align === 'right') {\n    x -= w;\n  } else if (align === 'center') {\n    x -= (w / 2);\n  }\n  return x;\n}\nfunction yForAngle(y, h, angle) {\n  if (angle === 90 || angle === 270) {\n    y -= (h / 2);\n  } else if (angle > 270 || angle < 90) {\n    y -= h;\n  }\n  return y;\n}\nfunction drawPointLabels(scale, labelCount) {\n  const {ctx, options: {pointLabels}} = scale;\n  for (let i = labelCount - 1; i >= 0; i--) {\n    const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n    const plFont = toFont(optsAtIndex.font);\n    const {x, y, textAlign, left, top, right, bottom} = scale._pointLabelItems[i];\n    const {backdropColor} = optsAtIndex;\n    if (!isNullOrUndef(backdropColor)) {\n      const padding = toPadding(optsAtIndex.backdropPadding);\n      ctx.fillStyle = backdropColor;\n      ctx.fillRect(left - padding.left, top - padding.top, right - left + padding.width, bottom - top + padding.height);\n    }\n    renderText(\n      ctx,\n      scale._pointLabels[i],\n      x,\n      y + (plFont.lineHeight / 2),\n      plFont,\n      {\n        color: optsAtIndex.color,\n        textAlign: textAlign,\n        textBaseline: 'middle'\n      }\n    );\n  }\n}\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n  const {ctx} = scale;\n  if (circular) {\n    ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n  } else {\n    let pointPosition = scale.getPointPosition(0, radius);\n    ctx.moveTo(pointPosition.x, pointPosition.y);\n    for (let i = 1; i < labelCount; i++) {\n      pointPosition = scale.getPointPosition(i, radius);\n      ctx.lineTo(pointPosition.x, pointPosition.y);\n    }\n  }\n}\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount) {\n  const ctx = scale.ctx;\n  const circular = gridLineOpts.circular;\n  const {color, lineWidth} = gridLineOpts;\n  if ((!circular && !labelCount) || !color || !lineWidth || radius < 0) {\n    return;\n  }\n  ctx.save();\n  ctx.strokeStyle = color;\n  ctx.lineWidth = lineWidth;\n  ctx.setLineDash(gridLineOpts.borderDash);\n  ctx.lineDashOffset = gridLineOpts.borderDashOffset;\n  ctx.beginPath();\n  pathRadiusLine(scale, radius, circular, labelCount);\n  ctx.closePath();\n  ctx.stroke();\n  ctx.restore();\n}\nfunction numberOrZero(param) {\n  return isNumber(param) ? param : 0;\n}\nfunction createPointLabelContext(parent, index, label) {\n  return Object.assign(Object.create(parent), {\n    label,\n    index,\n    type: 'pointLabel'\n  });\n}\nclass RadialLinearScale extends LinearScaleBase {\n  constructor(cfg) {\n    super(cfg);\n    this.xCenter = undefined;\n    this.yCenter = undefined;\n    this.drawingArea = undefined;\n    this._pointLabels = [];\n    this._pointLabelItems = [];\n  }\n  setDimensions() {\n    const me = this;\n    me.width = me.maxWidth;\n    me.height = me.maxHeight;\n    me.paddingTop = getTickBackdropHeight(me.options) / 2;\n    me.xCenter = Math.floor(me.width / 2);\n    me.yCenter = Math.floor((me.height - me.paddingTop) / 2);\n    me.drawingArea = Math.min(me.height - me.paddingTop, me.width) / 2;\n  }\n  determineDataLimits() {\n    const me = this;\n    const {min, max} = me.getMinMax(false);\n    me.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n    me.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n    me.handleTickRangeOptions();\n  }\n  computeTickLimit() {\n    return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n  }\n  generateTickLabels(ticks) {\n    const me = this;\n    LinearScaleBase.prototype.generateTickLabels.call(me, ticks);\n    me._pointLabels = me.getLabels().map((value, index) => {\n      const label = callback(me.options.pointLabels.callback, [value, index], me);\n      return label || label === 0 ? label : '';\n    });\n  }\n  fit() {\n    const me = this;\n    const opts = me.options;\n    if (opts.display && opts.pointLabels.display) {\n      fitWithPointLabels(me);\n    } else {\n      me.setCenterPoint(0, 0, 0, 0);\n    }\n  }\n  _setReductions(largestPossibleRadius, furthestLimits, furthestAngles) {\n    const me = this;\n    let radiusReductionLeft = furthestLimits.l / Math.sin(furthestAngles.l);\n    let radiusReductionRight = Math.max(furthestLimits.r - me.width, 0) / Math.sin(furthestAngles.r);\n    let radiusReductionTop = -furthestLimits.t / Math.cos(furthestAngles.t);\n    let radiusReductionBottom = -Math.max(furthestLimits.b - (me.height - me.paddingTop), 0) / Math.cos(furthestAngles.b);\n    radiusReductionLeft = numberOrZero(radiusReductionLeft);\n    radiusReductionRight = numberOrZero(radiusReductionRight);\n    radiusReductionTop = numberOrZero(radiusReductionTop);\n    radiusReductionBottom = numberOrZero(radiusReductionBottom);\n    me.drawingArea = Math.max(largestPossibleRadius / 2, Math.min(\n      Math.floor(largestPossibleRadius - (radiusReductionLeft + radiusReductionRight) / 2),\n      Math.floor(largestPossibleRadius - (radiusReductionTop + radiusReductionBottom) / 2)));\n    me.setCenterPoint(radiusReductionLeft, radiusReductionRight, radiusReductionTop, radiusReductionBottom);\n  }\n  setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n    const me = this;\n    const maxRight = me.width - rightMovement - me.drawingArea;\n    const maxLeft = leftMovement + me.drawingArea;\n    const maxTop = topMovement + me.drawingArea;\n    const maxBottom = (me.height - me.paddingTop) - bottomMovement - me.drawingArea;\n    me.xCenter = Math.floor(((maxLeft + maxRight) / 2) + me.left);\n    me.yCenter = Math.floor(((maxTop + maxBottom) / 2) + me.top + me.paddingTop);\n  }\n  getIndexAngle(index) {\n    const angleMultiplier = TAU / this.getLabels().length;\n    const startAngle = this.options.startAngle || 0;\n    return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n  }\n  getDistanceFromCenterForValue(value) {\n    const me = this;\n    if (isNullOrUndef(value)) {\n      return NaN;\n    }\n    const scalingFactor = me.drawingArea / (me.max - me.min);\n    if (me.options.reverse) {\n      return (me.max - value) * scalingFactor;\n    }\n    return (value - me.min) * scalingFactor;\n  }\n  getValueForDistanceFromCenter(distance) {\n    if (isNullOrUndef(distance)) {\n      return NaN;\n    }\n    const me = this;\n    const scaledDistance = distance / (me.drawingArea / (me.max - me.min));\n    return me.options.reverse ? me.max - scaledDistance : me.min + scaledDistance;\n  }\n  getPointLabelContext(index) {\n    const me = this;\n    const pointLabels = me._pointLabels || [];\n    if (index >= 0 && index < pointLabels.length) {\n      const pointLabel = pointLabels[index];\n      return createPointLabelContext(me.getContext(), index, pointLabel);\n    }\n  }\n  getPointPosition(index, distanceFromCenter) {\n    const me = this;\n    const angle = me.getIndexAngle(index) - HALF_PI;\n    return {\n      x: Math.cos(angle) * distanceFromCenter + me.xCenter,\n      y: Math.sin(angle) * distanceFromCenter + me.yCenter,\n      angle\n    };\n  }\n  getPointPositionForValue(index, value) {\n    return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n  }\n  getBasePosition(index) {\n    return this.getPointPositionForValue(index || 0, this.getBaseValue());\n  }\n  getPointLabelPosition(index) {\n    const {left, top, right, bottom} = this._pointLabelItems[index];\n    return {\n      left,\n      top,\n      right,\n      bottom,\n    };\n  }\n  drawBackground() {\n    const me = this;\n    const {backgroundColor, grid: {circular}} = me.options;\n    if (backgroundColor) {\n      const ctx = me.ctx;\n      ctx.save();\n      ctx.beginPath();\n      pathRadiusLine(me, me.getDistanceFromCenterForValue(me._endValue), circular, me.getLabels().length);\n      ctx.closePath();\n      ctx.fillStyle = backgroundColor;\n      ctx.fill();\n      ctx.restore();\n    }\n  }\n  drawGrid() {\n    const me = this;\n    const ctx = me.ctx;\n    const opts = me.options;\n    const {angleLines, grid} = opts;\n    const labelCount = me.getLabels().length;\n    let i, offset, position;\n    if (opts.pointLabels.display) {\n      drawPointLabels(me, labelCount);\n    }\n    if (grid.display) {\n      me.ticks.forEach((tick, index) => {\n        if (index !== 0) {\n          offset = me.getDistanceFromCenterForValue(tick.value);\n          const optsAtIndex = grid.setContext(me.getContext(index - 1));\n          drawRadiusLine(me, optsAtIndex, offset, labelCount);\n        }\n      });\n    }\n    if (angleLines.display) {\n      ctx.save();\n      for (i = me.getLabels().length - 1; i >= 0; i--) {\n        const optsAtIndex = angleLines.setContext(me.getPointLabelContext(i));\n        const {color, lineWidth} = optsAtIndex;\n        if (!lineWidth || !color) {\n          continue;\n        }\n        ctx.lineWidth = lineWidth;\n        ctx.strokeStyle = color;\n        ctx.setLineDash(optsAtIndex.borderDash);\n        ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n        offset = me.getDistanceFromCenterForValue(opts.ticks.reverse ? me.min : me.max);\n        position = me.getPointPosition(i, offset);\n        ctx.beginPath();\n        ctx.moveTo(me.xCenter, me.yCenter);\n        ctx.lineTo(position.x, position.y);\n        ctx.stroke();\n      }\n      ctx.restore();\n    }\n  }\n  drawBorder() {}\n  drawLabels() {\n    const me = this;\n    const ctx = me.ctx;\n    const opts = me.options;\n    const tickOpts = opts.ticks;\n    if (!tickOpts.display) {\n      return;\n    }\n    const startAngle = me.getIndexAngle(0);\n    let offset, width;\n    ctx.save();\n    ctx.translate(me.xCenter, me.yCenter);\n    ctx.rotate(startAngle);\n    ctx.textAlign = 'center';\n    ctx.textBaseline = 'middle';\n    me.ticks.forEach((tick, index) => {\n      if (index === 0 && !opts.reverse) {\n        return;\n      }\n      const optsAtIndex = tickOpts.setContext(me.getContext(index));\n      const tickFont = toFont(optsAtIndex.font);\n      offset = me.getDistanceFromCenterForValue(me.ticks[index].value);\n      if (optsAtIndex.showLabelBackdrop) {\n        ctx.font = tickFont.string;\n        width = ctx.measureText(tick.label).width;\n        ctx.fillStyle = optsAtIndex.backdropColor;\n        const padding = toPadding(optsAtIndex.backdropPadding);\n        ctx.fillRect(\n          -width / 2 - padding.left,\n          -offset - tickFont.size / 2 - padding.top,\n          width + padding.width,\n          tickFont.size + padding.height\n        );\n      }\n      renderText(ctx, tick.label, 0, -offset, tickFont, {\n        color: optsAtIndex.color,\n      });\n    });\n    ctx.restore();\n  }\n  drawTitle() {}\n}\nRadialLinearScale.id = 'radialLinear';\nRadialLinearScale.defaults = {\n  display: true,\n  animate: true,\n  position: 'chartArea',\n  angleLines: {\n    display: true,\n    lineWidth: 1,\n    borderDash: [],\n    borderDashOffset: 0.0\n  },\n  grid: {\n    circular: false\n  },\n  startAngle: 0,\n  ticks: {\n    showLabelBackdrop: true,\n    callback: Ticks.formatters.numeric\n  },\n  pointLabels: {\n    backdropColor: undefined,\n    backdropPadding: 2,\n    display: true,\n    font: {\n      size: 10\n    },\n    callback(label) {\n      return label;\n    },\n    padding: 5\n  }\n};\nRadialLinearScale.defaultRoutes = {\n  'angleLines.color': 'borderColor',\n  'pointLabels.color': 'color',\n  'ticks.color': 'color'\n};\nRadialLinearScale.descriptors = {\n  angleLines: {\n    _fallback: 'grid'\n  }\n};\n\nconst INTERVALS = {\n  millisecond: {common: true, size: 1, steps: 1000},\n  second: {common: true, size: 1000, steps: 60},\n  minute: {common: true, size: 60000, steps: 60},\n  hour: {common: true, size: 3600000, steps: 24},\n  day: {common: true, size: 86400000, steps: 30},\n  week: {common: false, size: 604800000, steps: 4},\n  month: {common: true, size: 2.628e9, steps: 12},\n  quarter: {common: false, size: 7.884e9, steps: 4},\n  year: {common: true, size: 3.154e10}\n};\nconst UNITS = (Object.keys(INTERVALS));\nfunction sorter(a, b) {\n  return a - b;\n}\nfunction parse(scale, input) {\n  if (isNullOrUndef(input)) {\n    return null;\n  }\n  const adapter = scale._adapter;\n  const {parser, round, isoWeekday} = scale._parseOpts;\n  let value = input;\n  if (typeof parser === 'function') {\n    value = parser(value);\n  }\n  if (!isNumberFinite(value)) {\n    value = typeof parser === 'string'\n      ? adapter.parse(value, parser)\n      : adapter.parse(value);\n  }\n  if (value === null) {\n    return null;\n  }\n  if (round) {\n    value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true)\n      ? adapter.startOf(value, 'isoWeek', isoWeekday)\n      : adapter.startOf(value, round);\n  }\n  return +value;\n}\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n  const ilen = UNITS.length;\n  for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n    const interval = INTERVALS[UNITS[i]];\n    const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n    if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n      return UNITS[i];\n    }\n  }\n  return UNITS[ilen - 1];\n}\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n  for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n    const unit = UNITS[i];\n    if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n      return unit;\n    }\n  }\n  return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\nfunction determineMajorUnit(unit) {\n  for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n    if (INTERVALS[UNITS[i]].common) {\n      return UNITS[i];\n    }\n  }\n}\nfunction addTick(ticks, time, timestamps) {\n  if (!timestamps) {\n    ticks[time] = true;\n  } else if (timestamps.length) {\n    const {lo, hi} = _lookup(timestamps, time);\n    const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n    ticks[timestamp] = true;\n  }\n}\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\n  const adapter = scale._adapter;\n  const first = +adapter.startOf(ticks[0].value, majorUnit);\n  const last = ticks[ticks.length - 1].value;\n  let major, index;\n  for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n    index = map[major];\n    if (index >= 0) {\n      ticks[index].major = true;\n    }\n  }\n  return ticks;\n}\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n  const ticks = [];\n  const map = {};\n  const ilen = values.length;\n  let i, value;\n  for (i = 0; i < ilen; ++i) {\n    value = values[i];\n    map[value] = i;\n    ticks.push({\n      value,\n      major: false\n    });\n  }\n  return (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\nclass TimeScale extends Scale {\n  constructor(props) {\n    super(props);\n    this._cache = {\n      data: [],\n      labels: [],\n      all: []\n    };\n    this._unit = 'day';\n    this._majorUnit = undefined;\n    this._offsets = {};\n    this._normalized = false;\n    this._parseOpts = undefined;\n  }\n  init(scaleOpts, opts) {\n    const time = scaleOpts.time || (scaleOpts.time = {});\n    const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n    mergeIf(time.displayFormats, adapter.formats());\n    this._parseOpts = {\n      parser: time.parser,\n      round: time.round,\n      isoWeekday: time.isoWeekday\n    };\n    super.init(scaleOpts);\n    this._normalized = opts.normalized;\n  }\n  parse(raw, index) {\n    if (raw === undefined) {\n      return null;\n    }\n    return parse(this, raw);\n  }\n  beforeLayout() {\n    super.beforeLayout();\n    this._cache = {\n      data: [],\n      labels: [],\n      all: []\n    };\n  }\n  determineDataLimits() {\n    const me = this;\n    const options = me.options;\n    const adapter = me._adapter;\n    const unit = options.time.unit || 'day';\n    let {min, max, minDefined, maxDefined} = me.getUserBounds();\n    function _applyBounds(bounds) {\n      if (!minDefined && !isNaN(bounds.min)) {\n        min = Math.min(min, bounds.min);\n      }\n      if (!maxDefined && !isNaN(bounds.max)) {\n        max = Math.max(max, bounds.max);\n      }\n    }\n    if (!minDefined || !maxDefined) {\n      _applyBounds(me._getLabelBounds());\n      if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n        _applyBounds(me.getMinMax(false));\n      }\n    }\n    min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n    max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n    me.min = Math.min(min, max - 1);\n    me.max = Math.max(min + 1, max);\n  }\n  _getLabelBounds() {\n    const arr = this.getLabelTimestamps();\n    let min = Number.POSITIVE_INFINITY;\n    let max = Number.NEGATIVE_INFINITY;\n    if (arr.length) {\n      min = arr[0];\n      max = arr[arr.length - 1];\n    }\n    return {min, max};\n  }\n  buildTicks() {\n    const me = this;\n    const options = me.options;\n    const timeOpts = options.time;\n    const tickOpts = options.ticks;\n    const timestamps = tickOpts.source === 'labels' ? me.getLabelTimestamps() : me._generate();\n    if (options.bounds === 'ticks' && timestamps.length) {\n      me.min = me._userMin || timestamps[0];\n      me.max = me._userMax || timestamps[timestamps.length - 1];\n    }\n    const min = me.min;\n    const max = me.max;\n    const ticks = _filterBetween(timestamps, min, max);\n    me._unit = timeOpts.unit || (tickOpts.autoSkip\n      ? determineUnitForAutoTicks(timeOpts.minUnit, me.min, me.max, me._getLabelCapacity(min))\n      : determineUnitForFormatting(me, ticks.length, timeOpts.minUnit, me.min, me.max));\n    me._majorUnit = !tickOpts.major.enabled || me._unit === 'year' ? undefined\n      : determineMajorUnit(me._unit);\n    me.initOffsets(timestamps);\n    if (options.reverse) {\n      ticks.reverse();\n    }\n    return ticksFromTimestamps(me, ticks, me._majorUnit);\n  }\n  initOffsets(timestamps) {\n    const me = this;\n    let start = 0;\n    let end = 0;\n    let first, last;\n    if (me.options.offset && timestamps.length) {\n      first = me.getDecimalForValue(timestamps[0]);\n      if (timestamps.length === 1) {\n        start = 1 - first;\n      } else {\n        start = (me.getDecimalForValue(timestamps[1]) - first) / 2;\n      }\n      last = me.getDecimalForValue(timestamps[timestamps.length - 1]);\n      if (timestamps.length === 1) {\n        end = last;\n      } else {\n        end = (last - me.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n      }\n    }\n    const limit = timestamps.length < 3 ? 0.5 : 0.25;\n    start = _limitValue(start, 0, limit);\n    end = _limitValue(end, 0, limit);\n    me._offsets = {start, end, factor: 1 / (start + 1 + end)};\n  }\n  _generate() {\n    const me = this;\n    const adapter = me._adapter;\n    const min = me.min;\n    const max = me.max;\n    const options = me.options;\n    const timeOpts = options.time;\n    const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, me._getLabelCapacity(min));\n    const stepSize = valueOrDefault(timeOpts.stepSize, 1);\n    const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n    const hasWeekday = isNumber(weekday) || weekday === true;\n    const ticks = {};\n    let first = min;\n    let time, count;\n    if (hasWeekday) {\n      first = +adapter.startOf(first, 'isoWeek', weekday);\n    }\n    first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n    if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n      throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n    }\n    const timestamps = options.ticks.source === 'data' && me.getDataTimestamps();\n    for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {\n      addTick(ticks, time, timestamps);\n    }\n    if (time === max || options.bounds === 'ticks' || count === 1) {\n      addTick(ticks, time, timestamps);\n    }\n    return Object.keys(ticks).sort((a, b) => a - b).map(x => +x);\n  }\n  getLabelForValue(value) {\n    const me = this;\n    const adapter = me._adapter;\n    const timeOpts = me.options.time;\n    if (timeOpts.tooltipFormat) {\n      return adapter.format(value, timeOpts.tooltipFormat);\n    }\n    return adapter.format(value, timeOpts.displayFormats.datetime);\n  }\n  _tickFormatFunction(time, index, ticks, format) {\n    const me = this;\n    const options = me.options;\n    const formats = options.time.displayFormats;\n    const unit = me._unit;\n    const majorUnit = me._majorUnit;\n    const minorFormat = unit && formats[unit];\n    const majorFormat = majorUnit && formats[majorUnit];\n    const tick = ticks[index];\n    const major = majorUnit && majorFormat && tick && tick.major;\n    const label = me._adapter.format(time, format || (major ? majorFormat : minorFormat));\n    const formatter = options.ticks.callback;\n    return formatter ? callback(formatter, [label, index, ticks], me) : label;\n  }\n  generateTickLabels(ticks) {\n    let i, ilen, tick;\n    for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n      tick = ticks[i];\n      tick.label = this._tickFormatFunction(tick.value, i, ticks);\n    }\n  }\n  getDecimalForValue(value) {\n    const me = this;\n    return value === null ? NaN : (value - me.min) / (me.max - me.min);\n  }\n  getPixelForValue(value) {\n    const me = this;\n    const offsets = me._offsets;\n    const pos = me.getDecimalForValue(value);\n    return me.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n  }\n  getValueForPixel(pixel) {\n    const me = this;\n    const offsets = me._offsets;\n    const pos = me.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n    return me.min + pos * (me.max - me.min);\n  }\n  _getLabelSize(label) {\n    const me = this;\n    const ticksOpts = me.options.ticks;\n    const tickLabelWidth = me.ctx.measureText(label).width;\n    const angle = toRadians(me.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n    const cosRotation = Math.cos(angle);\n    const sinRotation = Math.sin(angle);\n    const tickFontSize = me._resolveTickFontOptions(0).size;\n    return {\n      w: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),\n      h: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)\n    };\n  }\n  _getLabelCapacity(exampleTime) {\n    const me = this;\n    const timeOpts = me.options.time;\n    const displayFormats = timeOpts.displayFormats;\n    const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n    const exampleLabel = me._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(me, [exampleTime], me._majorUnit), format);\n    const size = me._getLabelSize(exampleLabel);\n    const capacity = Math.floor(me.isHorizontal() ? me.width / size.w : me.height / size.h) - 1;\n    return capacity > 0 ? capacity : 1;\n  }\n  getDataTimestamps() {\n    const me = this;\n    let timestamps = me._cache.data || [];\n    let i, ilen;\n    if (timestamps.length) {\n      return timestamps;\n    }\n    const metas = me.getMatchingVisibleMetas();\n    if (me._normalized && metas.length) {\n      return (me._cache.data = metas[0].controller.getAllParsedValues(me));\n    }\n    for (i = 0, ilen = metas.length; i < ilen; ++i) {\n      timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(me));\n    }\n    return (me._cache.data = me.normalize(timestamps));\n  }\n  getLabelTimestamps() {\n    const me = this;\n    const timestamps = me._cache.labels || [];\n    let i, ilen;\n    if (timestamps.length) {\n      return timestamps;\n    }\n    const labels = me.getLabels();\n    for (i = 0, ilen = labels.length; i < ilen; ++i) {\n      timestamps.push(parse(me, labels[i]));\n    }\n    return (me._cache.labels = me._normalized ? timestamps : me.normalize(timestamps));\n  }\n  normalize(values) {\n    return _arrayUnique(values.sort(sorter));\n  }\n}\nTimeScale.id = 'time';\nTimeScale.defaults = {\n  bounds: 'data',\n  adapters: {},\n  time: {\n    parser: false,\n    unit: false,\n    round: false,\n    isoWeekday: false,\n    minUnit: 'millisecond',\n    displayFormats: {}\n  },\n  ticks: {\n    source: 'auto',\n    major: {\n      enabled: false\n    }\n  }\n};\n\nfunction interpolate(table, val, reverse) {\n  let lo = 0;\n  let hi = table.length - 1;\n  let prevSource, nextSource, prevTarget, nextTarget;\n  if (reverse) {\n    if (val >= table[lo].pos && val <= table[hi].pos) {\n      ({lo, hi} = _lookupByKey(table, 'pos', val));\n    }\n    ({pos: prevSource, time: prevTarget} = table[lo]);\n    ({pos: nextSource, time: nextTarget} = table[hi]);\n  } else {\n    if (val >= table[lo].time && val <= table[hi].time) {\n      ({lo, hi} = _lookupByKey(table, 'time', val));\n    }\n    ({time: prevSource, pos: prevTarget} = table[lo]);\n    ({time: nextSource, pos: nextTarget} = table[hi]);\n  }\n  const span = nextSource - prevSource;\n  return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\nclass TimeSeriesScale extends TimeScale {\n  constructor(props) {\n    super(props);\n    this._table = [];\n    this._minPos = undefined;\n    this._tableRange = undefined;\n  }\n  initOffsets() {\n    const me = this;\n    const timestamps = me._getTimestampsForTable();\n    const table = me._table = me.buildLookupTable(timestamps);\n    me._minPos = interpolate(table, me.min);\n    me._tableRange = interpolate(table, me.max) - me._minPos;\n    super.initOffsets(timestamps);\n  }\n  buildLookupTable(timestamps) {\n    const {min, max} = this;\n    const items = [];\n    const table = [];\n    let i, ilen, prev, curr, next;\n    for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n      curr = timestamps[i];\n      if (curr >= min && curr <= max) {\n        items.push(curr);\n      }\n    }\n    if (items.length < 2) {\n      return [\n        {time: min, pos: 0},\n        {time: max, pos: 1}\n      ];\n    }\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      next = items[i + 1];\n      prev = items[i - 1];\n      curr = items[i];\n      if (Math.round((next + prev) / 2) !== curr) {\n        table.push({time: curr, pos: i / (ilen - 1)});\n      }\n    }\n    return table;\n  }\n  _getTimestampsForTable() {\n    const me = this;\n    let timestamps = me._cache.all || [];\n    if (timestamps.length) {\n      return timestamps;\n    }\n    const data = me.getDataTimestamps();\n    const label = me.getLabelTimestamps();\n    if (data.length && label.length) {\n      timestamps = me.normalize(data.concat(label));\n    } else {\n      timestamps = data.length ? data : label;\n    }\n    timestamps = me._cache.all = timestamps;\n    return timestamps;\n  }\n  getDecimalForValue(value) {\n    return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n  }\n  getValueForPixel(pixel) {\n    const me = this;\n    const offsets = me._offsets;\n    const decimal = me.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n    return interpolate(me._table, decimal * me._tableRange + me._minPos, true);\n  }\n}\nTimeSeriesScale.id = 'timeseries';\nTimeSeriesScale.defaults = TimeScale.defaults;\n\nvar scales = /*#__PURE__*/Object.freeze({\n__proto__: null,\nCategoryScale: CategoryScale,\nLinearScale: LinearScale,\nLogarithmicScale: LogarithmicScale,\nRadialLinearScale: RadialLinearScale,\nTimeScale: TimeScale,\nTimeSeriesScale: TimeSeriesScale\n});\n\nconst registerables = [\n  controllers,\n  elements,\n  plugins,\n  scales,\n];\n\nexport { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, plugin_filler as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, elements, layouts, plugins, registerables, registry, scales };\n","/*! choices.js v9.0.1 | © 2019 Josh Johnson | https://github.com/jshjohnson/Choices#readme */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Choices\"] = factory();\n\telse\n\t\troot[\"Choices\"] = factory();\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/public/assets/scripts/\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 4);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction getEnumerableOwnPropertySymbols(target) {\n\treturn Object.getOwnPropertySymbols\n\t\t? Object.getOwnPropertySymbols(target).filter(function(symbol) {\n\t\t\treturn target.propertyIsEnumerable(symbol)\n\t\t})\n\t\t: []\n}\n\nfunction getKeys(target) {\n\treturn Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nfunction propertyIsUnsafe(target, key) {\n\ttry {\n\t\treturn (key in target) // Properties are safe to merge if they don't exist in the target yet,\n\t\t\t&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,\n\t\t\t\t&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.\n\t} catch (unused) {\n\t\t// Counterintuitively, it's safe to merge any property on a target that causes the `in` operator to throw.\n\t\t// This happens when trying to copy an object in the source over a plain string in the target.\n\t\treturn false\n\t}\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tgetKeys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tgetKeys(source).forEach(function(key) {\n\t\tif (propertyIsUnsafe(target, key)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (!options.isMergeableObject(source[key]) || !target[key]) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\t// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n\t// implementations can use it. The caller may not replace it.\n\toptions.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nmodule.exports = deepmerge_1;\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(global, module) {/* harmony import */ var _ponyfill_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3);\n/* global window */\n\n\nvar root;\n\nif (typeof self !== 'undefined') {\n  root = self;\n} else if (typeof window !== 'undefined') {\n  root = window;\n} else if (typeof global !== 'undefined') {\n  root = global;\n} else if (true) {\n  root = module;\n} else {}\n\nvar result = Object(_ponyfill_js__WEBPACK_IMPORTED_MODULE_0__[/* default */ \"a\"])(root);\n/* harmony default export */ __webpack_exports__[\"a\"] = (result);\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(5), __webpack_require__(6)(module)))\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/*!\n * Fuse.js v3.4.5 - Lightweight fuzzy-search (http://fusejs.io)\n * \n * Copyright (c) 2012-2017 Kirollos Risk (http://kiro.me)\n * All Rights Reserved. Apache Software License 2.0\n * \n * http://www.apache.org/licenses/LICENSE-2.0\n */\n!function(e,t){ true?module.exports=t():undefined}(this,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,\"a\",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p=\"\",n(n.s=1)}([function(e,t){e.exports=function(e){return Array.isArray?Array.isArray(e):\"[object Array]\"===Object.prototype.toString.call(e)}},function(e,t,n){function r(e){return(r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var i=n(2),a=n(8),s=n(0),c=function(){function e(t,n){var r=n.location,o=void 0===r?0:r,i=n.distance,s=void 0===i?100:i,c=n.threshold,h=void 0===c?.6:c,l=n.maxPatternLength,u=void 0===l?32:l,f=n.caseSensitive,d=void 0!==f&&f,v=n.tokenSeparator,p=void 0===v?/ +/g:v,g=n.findAllMatches,y=void 0!==g&&g,m=n.minMatchCharLength,k=void 0===m?1:m,S=n.id,x=void 0===S?null:S,b=n.keys,M=void 0===b?[]:b,_=n.shouldSort,L=void 0===_||_,w=n.getFn,A=void 0===w?a:w,C=n.sortFn,I=void 0===C?function(e,t){return e.score-t.score}:C,O=n.tokenize,j=void 0!==O&&O,P=n.matchAllTokens,F=void 0!==P&&P,T=n.includeMatches,z=void 0!==T&&T,E=n.includeScore,K=void 0!==E&&E,$=n.verbose,J=void 0!==$&&$;!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.options={location:o,distance:s,threshold:h,maxPatternLength:u,isCaseSensitive:d,tokenSeparator:p,findAllMatches:y,minMatchCharLength:k,id:x,keys:M,includeMatches:z,includeScore:K,shouldSort:L,getFn:A,sortFn:I,verbose:J,tokenize:j,matchAllTokens:F},this.setCollection(t)}var t,n,c;return t=e,(n=[{key:\"setCollection\",value:function(e){return this.list=e,e}},{key:\"search\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{limit:!1};this._log('---------\\nSearch pattern: \"'.concat(e,'\"'));var n=this._prepareSearchers(e),r=n.tokenSearchers,o=n.fullSearcher,i=this._search(r,o),a=i.weights,s=i.results;return this._computeScore(a,s),this.options.shouldSort&&this._sort(s),t.limit&&\"number\"==typeof t.limit&&(s=s.slice(0,t.limit)),this._format(s)}},{key:\"_prepareSearchers\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",t=[];if(this.options.tokenize)for(var n=e.split(this.options.tokenSeparator),r=0,o=n.length;r<o;r+=1)t.push(new i(n[r],this.options));return{tokenSearchers:t,fullSearcher:new i(e,this.options)}}},{key:\"_search\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1?arguments[1]:void 0,n=this.list,r={},o=[];if(\"string\"==typeof n[0]){for(var i=0,a=n.length;i<a;i+=1)this._analyze({key:\"\",value:n[i],record:i,index:i},{resultMap:r,results:o,tokenSearchers:e,fullSearcher:t});return{weights:null,results:o}}for(var s={},c=0,h=n.length;c<h;c+=1)for(var l=n[c],u=0,f=this.options.keys.length;u<f;u+=1){var d=this.options.keys[u];if(\"string\"!=typeof d){if(s[d.name]={weight:1-d.weight||1},d.weight<=0||d.weight>1)throw new Error(\"Key weight has to be > 0 and <= 1\");d=d.name}else s[d]={weight:1};this._analyze({key:d,value:this.options.getFn(l,d),record:l,index:c},{resultMap:r,results:o,tokenSearchers:e,fullSearcher:t})}return{weights:s,results:o}}},{key:\"_analyze\",value:function(e,t){var n=e.key,r=e.arrayIndex,o=void 0===r?-1:r,i=e.value,a=e.record,c=e.index,h=t.tokenSearchers,l=void 0===h?[]:h,u=t.fullSearcher,f=void 0===u?[]:u,d=t.resultMap,v=void 0===d?{}:d,p=t.results,g=void 0===p?[]:p;if(null!=i){var y=!1,m=-1,k=0;if(\"string\"==typeof i){this._log(\"\\nKey: \".concat(\"\"===n?\"-\":n));var S=f.search(i);if(this._log('Full text: \"'.concat(i,'\", score: ').concat(S.score)),this.options.tokenize){for(var x=i.split(this.options.tokenSeparator),b=[],M=0;M<l.length;M+=1){var _=l[M];this._log('\\nPattern: \"'.concat(_.pattern,'\"'));for(var L=!1,w=0;w<x.length;w+=1){var A=x[w],C=_.search(A),I={};C.isMatch?(I[A]=C.score,y=!0,L=!0,b.push(C.score)):(I[A]=1,this.options.matchAllTokens||b.push(1)),this._log('Token: \"'.concat(A,'\", score: ').concat(I[A]))}L&&(k+=1)}m=b[0];for(var O=b.length,j=1;j<O;j+=1)m+=b[j];m/=O,this._log(\"Token score average:\",m)}var P=S.score;m>-1&&(P=(P+m)/2),this._log(\"Score average:\",P);var F=!this.options.tokenize||!this.options.matchAllTokens||k>=l.length;if(this._log(\"\\nCheck Matches: \".concat(F)),(y||S.isMatch)&&F){var T=v[c];T?T.output.push({key:n,arrayIndex:o,value:i,score:P,matchedIndices:S.matchedIndices}):(v[c]={item:a,output:[{key:n,arrayIndex:o,value:i,score:P,matchedIndices:S.matchedIndices}]},g.push(v[c]))}}else if(s(i))for(var z=0,E=i.length;z<E;z+=1)this._analyze({key:n,arrayIndex:z,value:i[z],record:a,index:c},{resultMap:v,results:g,tokenSearchers:l,fullSearcher:f})}}},{key:\"_computeScore\",value:function(e,t){this._log(\"\\n\\nComputing score:\\n\");for(var n=0,r=t.length;n<r;n+=1){for(var o=t[n].output,i=o.length,a=1,s=1,c=0;c<i;c+=1){var h=e?e[o[c].key].weight:1,l=(1===h?o[c].score:o[c].score||.001)*h;1!==h?s=Math.min(s,l):(o[c].nScore=l,a*=l)}t[n].score=1===s?a:s,this._log(t[n])}}},{key:\"_sort\",value:function(e){this._log(\"\\n\\nSorting....\"),e.sort(this.options.sortFn)}},{key:\"_format\",value:function(e){var t=[];if(this.options.verbose){var n=[];this._log(\"\\n\\nOutput:\\n\\n\",JSON.stringify(e,function(e,t){if(\"object\"===r(t)&&null!==t){if(-1!==n.indexOf(t))return;n.push(t)}return t})),n=null}var o=[];this.options.includeMatches&&o.push(function(e,t){var n=e.output;t.matches=[];for(var r=0,o=n.length;r<o;r+=1){var i=n[r];if(0!==i.matchedIndices.length){var a={indices:i.matchedIndices,value:i.value};i.key&&(a.key=i.key),i.hasOwnProperty(\"arrayIndex\")&&i.arrayIndex>-1&&(a.arrayIndex=i.arrayIndex),t.matches.push(a)}}}),this.options.includeScore&&o.push(function(e,t){t.score=e.score});for(var i=0,a=e.length;i<a;i+=1){var s=e[i];if(this.options.id&&(s.item=this.options.getFn(s.item,this.options.id)[0]),o.length){for(var c={item:s.item},h=0,l=o.length;h<l;h+=1)o[h](s,c);t.push(c)}else t.push(s.item)}return t}},{key:\"_log\",value:function(){var e;this.options.verbose&&(e=console).log.apply(e,arguments)}}])&&o(t.prototype,n),c&&o(t,c),e}();e.exports=c},function(e,t,n){function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var o=n(3),i=n(4),a=n(7),s=function(){function e(t,n){var r=n.location,o=void 0===r?0:r,i=n.distance,s=void 0===i?100:i,c=n.threshold,h=void 0===c?.6:c,l=n.maxPatternLength,u=void 0===l?32:l,f=n.isCaseSensitive,d=void 0!==f&&f,v=n.tokenSeparator,p=void 0===v?/ +/g:v,g=n.findAllMatches,y=void 0!==g&&g,m=n.minMatchCharLength,k=void 0===m?1:m;!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.options={location:o,distance:s,threshold:h,maxPatternLength:u,isCaseSensitive:d,tokenSeparator:p,findAllMatches:y,minMatchCharLength:k},this.pattern=this.options.isCaseSensitive?t:t.toLowerCase(),this.pattern.length<=u&&(this.patternAlphabet=a(this.pattern))}var t,n,s;return t=e,(n=[{key:\"search\",value:function(e){if(this.options.isCaseSensitive||(e=e.toLowerCase()),this.pattern===e)return{isMatch:!0,score:0,matchedIndices:[[0,e.length-1]]};var t=this.options,n=t.maxPatternLength,r=t.tokenSeparator;if(this.pattern.length>n)return o(e,this.pattern,r);var a=this.options,s=a.location,c=a.distance,h=a.threshold,l=a.findAllMatches,u=a.minMatchCharLength;return i(e,this.pattern,this.patternAlphabet,{location:s,distance:c,threshold:h,findAllMatches:l,minMatchCharLength:u})}}])&&r(t.prototype,n),s&&r(t,s),e}();e.exports=s},function(e,t){var n=/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g;e.exports=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:/ +/g,o=new RegExp(t.replace(n,\"\\\\$&\").replace(r,\"|\")),i=e.match(o),a=!!i,s=[];if(a)for(var c=0,h=i.length;c<h;c+=1){var l=i[c];s.push([e.indexOf(l),l.length-1])}return{score:a?.5:1,isMatch:a,matchedIndices:s}}},function(e,t,n){var r=n(5),o=n(6);e.exports=function(e,t,n,i){for(var a=i.location,s=void 0===a?0:a,c=i.distance,h=void 0===c?100:c,l=i.threshold,u=void 0===l?.6:l,f=i.findAllMatches,d=void 0!==f&&f,v=i.minMatchCharLength,p=void 0===v?1:v,g=s,y=e.length,m=u,k=e.indexOf(t,g),S=t.length,x=[],b=0;b<y;b+=1)x[b]=0;if(-1!==k){var M=r(t,{errors:0,currentLocation:k,expectedLocation:g,distance:h});if(m=Math.min(M,m),-1!==(k=e.lastIndexOf(t,g+S))){var _=r(t,{errors:0,currentLocation:k,expectedLocation:g,distance:h});m=Math.min(_,m)}}k=-1;for(var L=[],w=1,A=S+y,C=1<<S-1,I=0;I<S;I+=1){for(var O=0,j=A;O<j;){r(t,{errors:I,currentLocation:g+j,expectedLocation:g,distance:h})<=m?O=j:A=j,j=Math.floor((A-O)/2+O)}A=j;var P=Math.max(1,g-j+1),F=d?y:Math.min(g+j,y)+S,T=Array(F+2);T[F+1]=(1<<I)-1;for(var z=F;z>=P;z-=1){var E=z-1,K=n[e.charAt(E)];if(K&&(x[E]=1),T[z]=(T[z+1]<<1|1)&K,0!==I&&(T[z]|=(L[z+1]|L[z])<<1|1|L[z+1]),T[z]&C&&(w=r(t,{errors:I,currentLocation:E,expectedLocation:g,distance:h}))<=m){if(m=w,(k=E)<=g)break;P=Math.max(1,2*g-k)}}if(r(t,{errors:I+1,currentLocation:g,expectedLocation:g,distance:h})>m)break;L=T}return{isMatch:k>=0,score:0===w?.001:w,matchedIndices:o(x,p)}}},function(e,t){e.exports=function(e,t){var n=t.errors,r=void 0===n?0:n,o=t.currentLocation,i=void 0===o?0:o,a=t.expectedLocation,s=void 0===a?0:a,c=t.distance,h=void 0===c?100:c,l=r/e.length,u=Math.abs(s-i);return h?l+u/h:u?1:l}},function(e,t){e.exports=function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=[],r=-1,o=-1,i=0,a=e.length;i<a;i+=1){var s=e[i];s&&-1===r?r=i:s||-1===r||((o=i-1)-r+1>=t&&n.push([r,o]),r=-1)}return e[i-1]&&i-r>=t&&n.push([r,i-1]),n}},function(e,t){e.exports=function(e){for(var t={},n=e.length,r=0;r<n;r+=1)t[e.charAt(r)]=0;for(var o=0;o<n;o+=1)t[e.charAt(o)]|=1<<n-o-1;return t}},function(e,t,n){var r=n(0);e.exports=function(e,t){return function e(t,n,o){if(n){var i=n.indexOf(\".\"),a=n,s=null;-1!==i&&(a=n.slice(0,i),s=n.slice(i+1));var c=t[a];if(null!=c)if(s||\"string\"!=typeof c&&\"number\"!=typeof c)if(r(c))for(var h=0,l=c.length;h<l;h+=1)e(c[h],s,o);else s&&e(c,s,o);else o.push(c.toString())}else o.push(t);return o}(e,t,[])}}])});\n\n/***/ }),\n/* 3 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return symbolObservablePonyfill; });\nfunction symbolObservablePonyfill(root) {\n\tvar result;\n\tvar Symbol = root.Symbol;\n\n\tif (typeof Symbol === 'function') {\n\t\tif (Symbol.observable) {\n\t\t\tresult = Symbol.observable;\n\t\t} else {\n\t\t\tresult = Symbol('observable');\n\t\t\tSymbol.observable = result;\n\t\t}\n\t} else {\n\t\tresult = '@@observable';\n\t}\n\n\treturn result;\n};\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(7);\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports) {\n\nvar g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\nmodule.exports = function(originalModule) {\n\tif (!originalModule.webpackPolyfill) {\n\t\tvar module = Object.create(originalModule);\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\tObject.defineProperty(module, \"exports\", {\n\t\t\tenumerable: true\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n\n// EXTERNAL MODULE: ./node_modules/fuse.js/dist/fuse.js\nvar dist_fuse = __webpack_require__(2);\nvar fuse_default = /*#__PURE__*/__webpack_require__.n(dist_fuse);\n\n// EXTERNAL MODULE: ./node_modules/deepmerge/dist/cjs.js\nvar cjs = __webpack_require__(0);\nvar cjs_default = /*#__PURE__*/__webpack_require__.n(cjs);\n\n// EXTERNAL MODULE: ./node_modules/symbol-observable/es/index.js\nvar es = __webpack_require__(1);\n\n// CONCATENATED MODULE: ./node_modules/redux/es/redux.js\n\n\n/**\n * These are private action types reserved by Redux.\n * For any unknown actions, you must return the current state.\n * If the current state is undefined, you must return the initial state.\n * Do not reference these action types directly in your code.\n */\nvar randomString = function randomString() {\n  return Math.random().toString(36).substring(7).split('').join('.');\n};\n\nvar ActionTypes = {\n  INIT: \"@@redux/INIT\" + randomString(),\n  REPLACE: \"@@redux/REPLACE\" + randomString(),\n  PROBE_UNKNOWN_ACTION: function PROBE_UNKNOWN_ACTION() {\n    return \"@@redux/PROBE_UNKNOWN_ACTION\" + randomString();\n  }\n};\n\n/**\n * @param {any} obj The object to inspect.\n * @returns {boolean} True if the argument appears to be a plain object.\n */\nfunction isPlainObject(obj) {\n  if (typeof obj !== 'object' || obj === null) return false;\n  var proto = obj;\n\n  while (Object.getPrototypeOf(proto) !== null) {\n    proto = Object.getPrototypeOf(proto);\n  }\n\n  return Object.getPrototypeOf(obj) === proto;\n}\n\n/**\n * Creates a Redux store that holds the state tree.\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\n\nfunction createStore(reducer, preloadedState, enhancer) {\n  var _ref2;\n\n  if (typeof preloadedState === 'function' && typeof enhancer === 'function' || typeof enhancer === 'function' && typeof arguments[3] === 'function') {\n    throw new Error('It looks like you are passing several store enhancers to ' + 'createStore(). This is not supported. Instead, compose them ' + 'together to a single function.');\n  }\n\n  if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n    enhancer = preloadedState;\n    preloadedState = undefined;\n  }\n\n  if (typeof enhancer !== 'undefined') {\n    if (typeof enhancer !== 'function') {\n      throw new Error('Expected the enhancer to be a function.');\n    }\n\n    return enhancer(createStore)(reducer, preloadedState);\n  }\n\n  if (typeof reducer !== 'function') {\n    throw new Error('Expected the reducer to be a function.');\n  }\n\n  var currentReducer = reducer;\n  var currentState = preloadedState;\n  var currentListeners = [];\n  var nextListeners = currentListeners;\n  var isDispatching = false;\n  /**\n   * This makes a shallow copy of currentListeners so we can use\n   * nextListeners as a temporary list while dispatching.\n   *\n   * This prevents any bugs around consumers calling\n   * subscribe/unsubscribe in the middle of a dispatch.\n   */\n\n  function ensureCanMutateNextListeners() {\n    if (nextListeners === currentListeners) {\n      nextListeners = currentListeners.slice();\n    }\n  }\n  /**\n   * Reads the state tree managed by the store.\n   *\n   * @returns {any} The current state tree of your application.\n   */\n\n\n  function getState() {\n    if (isDispatching) {\n      throw new Error('You may not call store.getState() while the reducer is executing. ' + 'The reducer has already received the state as an argument. ' + 'Pass it down from the top reducer instead of reading it from the store.');\n    }\n\n    return currentState;\n  }\n  /**\n   * Adds a change listener. It will be called any time an action is dispatched,\n   * and some part of the state tree may potentially have changed. You may then\n   * call `getState()` to read the current state tree inside the callback.\n   *\n   * You may call `dispatch()` from a change listener, with the following\n   * caveats:\n   *\n   * 1. The subscriptions are snapshotted just before every `dispatch()` call.\n   * If you subscribe or unsubscribe while the listeners are being invoked, this\n   * will not have any effect on the `dispatch()` that is currently in progress.\n   * However, the next `dispatch()` call, whether nested or not, will use a more\n   * recent snapshot of the subscription list.\n   *\n   * 2. The listener should not expect to see all state changes, as the state\n   * might have been updated multiple times during a nested `dispatch()` before\n   * the listener is called. It is, however, guaranteed that all subscribers\n   * registered before the `dispatch()` started will be called with the latest\n   * state by the time it exits.\n   *\n   * @param {Function} listener A callback to be invoked on every dispatch.\n   * @returns {Function} A function to remove this change listener.\n   */\n\n\n  function subscribe(listener) {\n    if (typeof listener !== 'function') {\n      throw new Error('Expected the listener to be a function.');\n    }\n\n    if (isDispatching) {\n      throw new Error('You may not call store.subscribe() while the reducer is executing. ' + 'If you would like to be notified after the store has been updated, subscribe from a ' + 'component and invoke store.getState() in the callback to access the latest state. ' + 'See https://redux.js.org/api-reference/store#subscribe(listener) for more details.');\n    }\n\n    var isSubscribed = true;\n    ensureCanMutateNextListeners();\n    nextListeners.push(listener);\n    return function unsubscribe() {\n      if (!isSubscribed) {\n        return;\n      }\n\n      if (isDispatching) {\n        throw new Error('You may not unsubscribe from a store listener while the reducer is executing. ' + 'See https://redux.js.org/api-reference/store#subscribe(listener) for more details.');\n      }\n\n      isSubscribed = false;\n      ensureCanMutateNextListeners();\n      var index = nextListeners.indexOf(listener);\n      nextListeners.splice(index, 1);\n    };\n  }\n  /**\n   * Dispatches an action. It is the only way to trigger a state change.\n   *\n   * The `reducer` function, used to create the store, will be called with the\n   * current state tree and the given `action`. Its return value will\n   * be considered the **next** state of the tree, and the change listeners\n   * will be notified.\n   *\n   * The base implementation only supports plain object actions. If you want to\n   * dispatch a Promise, an Observable, a thunk, or something else, you need to\n   * wrap your store creating function into the corresponding middleware. For\n   * example, see the documentation for the `redux-thunk` package. Even the\n   * middleware will eventually dispatch plain object actions using this method.\n   *\n   * @param {Object} action A plain object representing “what changed”. It is\n   * a good idea to keep actions serializable so you can record and replay user\n   * sessions, or use the time travelling `redux-devtools`. An action must have\n   * a `type` property which may not be `undefined`. It is a good idea to use\n   * string constants for action types.\n   *\n   * @returns {Object} For convenience, the same action object you dispatched.\n   *\n   * Note that, if you use a custom middleware, it may wrap `dispatch()` to\n   * return something else (for example, a Promise you can await).\n   */\n\n\n  function dispatch(action) {\n    if (!isPlainObject(action)) {\n      throw new Error('Actions must be plain objects. ' + 'Use custom middleware for async actions.');\n    }\n\n    if (typeof action.type === 'undefined') {\n      throw new Error('Actions may not have an undefined \"type\" property. ' + 'Have you misspelled a constant?');\n    }\n\n    if (isDispatching) {\n      throw new Error('Reducers may not dispatch actions.');\n    }\n\n    try {\n      isDispatching = true;\n      currentState = currentReducer(currentState, action);\n    } finally {\n      isDispatching = false;\n    }\n\n    var listeners = currentListeners = nextListeners;\n\n    for (var i = 0; i < listeners.length; i++) {\n      var listener = listeners[i];\n      listener();\n    }\n\n    return action;\n  }\n  /**\n   * Replaces the reducer currently used by the store to calculate the state.\n   *\n   * You might need this if your app implements code splitting and you want to\n   * load some of the reducers dynamically. You might also need this if you\n   * implement a hot reloading mechanism for Redux.\n   *\n   * @param {Function} nextReducer The reducer for the store to use instead.\n   * @returns {void}\n   */\n\n\n  function replaceReducer(nextReducer) {\n    if (typeof nextReducer !== 'function') {\n      throw new Error('Expected the nextReducer to be a function.');\n    }\n\n    currentReducer = nextReducer; // This action has a similiar effect to ActionTypes.INIT.\n    // Any reducers that existed in both the new and old rootReducer\n    // will receive the previous state. This effectively populates\n    // the new state tree with any relevant data from the old one.\n\n    dispatch({\n      type: ActionTypes.REPLACE\n    });\n  }\n  /**\n   * Interoperability point for observable/reactive libraries.\n   * @returns {observable} A minimal observable of state changes.\n   * For more information, see the observable proposal:\n   * https://github.com/tc39/proposal-observable\n   */\n\n\n  function observable() {\n    var _ref;\n\n    var outerSubscribe = subscribe;\n    return _ref = {\n      /**\n       * The minimal observable subscription method.\n       * @param {Object} observer Any object that can be used as an observer.\n       * The observer object should have a `next` method.\n       * @returns {subscription} An object with an `unsubscribe` method that can\n       * be used to unsubscribe the observable from the store, and prevent further\n       * emission of values from the observable.\n       */\n      subscribe: function subscribe(observer) {\n        if (typeof observer !== 'object' || observer === null) {\n          throw new TypeError('Expected the observer to be an object.');\n        }\n\n        function observeState() {\n          if (observer.next) {\n            observer.next(getState());\n          }\n        }\n\n        observeState();\n        var unsubscribe = outerSubscribe(observeState);\n        return {\n          unsubscribe: unsubscribe\n        };\n      }\n    }, _ref[es[\"a\" /* default */]] = function () {\n      return this;\n    }, _ref;\n  } // When a store is created, an \"INIT\" action is dispatched so that every\n  // reducer returns their initial state. This effectively populates\n  // the initial state tree.\n\n\n  dispatch({\n    type: ActionTypes.INIT\n  });\n  return _ref2 = {\n    dispatch: dispatch,\n    subscribe: subscribe,\n    getState: getState,\n    replaceReducer: replaceReducer\n  }, _ref2[es[\"a\" /* default */]] = observable, _ref2;\n}\n\n/**\n * Prints a warning in the console if it exists.\n *\n * @param {String} message The warning message.\n * @returns {void}\n */\nfunction warning(message) {\n  /* eslint-disable no-console */\n  if (typeof console !== 'undefined' && typeof console.error === 'function') {\n    console.error(message);\n  }\n  /* eslint-enable no-console */\n\n\n  try {\n    // This error was thrown as a convenience so that if you enable\n    // \"break on all exceptions\" in your console,\n    // it would pause the execution at this line.\n    throw new Error(message);\n  } catch (e) {} // eslint-disable-line no-empty\n\n}\n\nfunction getUndefinedStateErrorMessage(key, action) {\n  var actionType = action && action.type;\n  var actionDescription = actionType && \"action \\\"\" + String(actionType) + \"\\\"\" || 'an action';\n  return \"Given \" + actionDescription + \", reducer \\\"\" + key + \"\\\" returned undefined. \" + \"To ignore an action, you must explicitly return the previous state. \" + \"If you want this reducer to hold no value, you can return null instead of undefined.\";\n}\n\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n  var reducerKeys = Object.keys(reducers);\n  var argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';\n\n  if (reducerKeys.length === 0) {\n    return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';\n  }\n\n  if (!isPlainObject(inputState)) {\n    return \"The \" + argumentName + \" has unexpected type of \\\"\" + {}.toString.call(inputState).match(/\\s([a-z|A-Z]+)/)[1] + \"\\\". Expected argument to be an object with the following \" + (\"keys: \\\"\" + reducerKeys.join('\", \"') + \"\\\"\");\n  }\n\n  var unexpectedKeys = Object.keys(inputState).filter(function (key) {\n    return !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key];\n  });\n  unexpectedKeys.forEach(function (key) {\n    unexpectedKeyCache[key] = true;\n  });\n  if (action && action.type === ActionTypes.REPLACE) return;\n\n  if (unexpectedKeys.length > 0) {\n    return \"Unexpected \" + (unexpectedKeys.length > 1 ? 'keys' : 'key') + \" \" + (\"\\\"\" + unexpectedKeys.join('\", \"') + \"\\\" found in \" + argumentName + \". \") + \"Expected to find one of the known reducer keys instead: \" + (\"\\\"\" + reducerKeys.join('\", \"') + \"\\\". Unexpected keys will be ignored.\");\n  }\n}\n\nfunction assertReducerShape(reducers) {\n  Object.keys(reducers).forEach(function (key) {\n    var reducer = reducers[key];\n    var initialState = reducer(undefined, {\n      type: ActionTypes.INIT\n    });\n\n    if (typeof initialState === 'undefined') {\n      throw new Error(\"Reducer \\\"\" + key + \"\\\" returned undefined during initialization. \" + \"If the state passed to the reducer is undefined, you must \" + \"explicitly return the initial state. The initial state may \" + \"not be undefined. If you don't want to set a value for this reducer, \" + \"you can use null instead of undefined.\");\n    }\n\n    if (typeof reducer(undefined, {\n      type: ActionTypes.PROBE_UNKNOWN_ACTION()\n    }) === 'undefined') {\n      throw new Error(\"Reducer \\\"\" + key + \"\\\" returned undefined when probed with a random type. \" + (\"Don't try to handle \" + ActionTypes.INIT + \" or other actions in \\\"redux/*\\\" \") + \"namespace. They are considered private. Instead, you must return the \" + \"current state for any unknown actions, unless it is undefined, \" + \"in which case you must return the initial state, regardless of the \" + \"action type. The initial state may not be undefined, but can be null.\");\n    }\n  });\n}\n/**\n * Turns an object whose values are different reducer functions, into a single\n * reducer function. It will call every child reducer, and gather their results\n * into a single state object, whose keys correspond to the keys of the passed\n * reducer functions.\n *\n * @param {Object} reducers An object whose values correspond to different\n * reducer functions that need to be combined into one. One handy way to obtain\n * it is to use ES6 `import * as reducers` syntax. The reducers may never return\n * undefined for any action. Instead, they should return their initial state\n * if the state passed to them was undefined, and the current state for any\n * unrecognized action.\n *\n * @returns {Function} A reducer function that invokes every reducer inside the\n * passed object, and builds a state object with the same shape.\n */\n\n\nfunction combineReducers(reducers) {\n  var reducerKeys = Object.keys(reducers);\n  var finalReducers = {};\n\n  for (var i = 0; i < reducerKeys.length; i++) {\n    var key = reducerKeys[i];\n\n    if (false) {}\n\n    if (typeof reducers[key] === 'function') {\n      finalReducers[key] = reducers[key];\n    }\n  }\n\n  var finalReducerKeys = Object.keys(finalReducers); // This is used to make sure we don't warn about the same\n  // keys multiple times.\n\n  var unexpectedKeyCache;\n\n  if (false) {}\n\n  var shapeAssertionError;\n\n  try {\n    assertReducerShape(finalReducers);\n  } catch (e) {\n    shapeAssertionError = e;\n  }\n\n  return function combination(state, action) {\n    if (state === void 0) {\n      state = {};\n    }\n\n    if (shapeAssertionError) {\n      throw shapeAssertionError;\n    }\n\n    if (false) { var warningMessage; }\n\n    var hasChanged = false;\n    var nextState = {};\n\n    for (var _i = 0; _i < finalReducerKeys.length; _i++) {\n      var _key = finalReducerKeys[_i];\n      var reducer = finalReducers[_key];\n      var previousStateForKey = state[_key];\n      var nextStateForKey = reducer(previousStateForKey, action);\n\n      if (typeof nextStateForKey === 'undefined') {\n        var errorMessage = getUndefinedStateErrorMessage(_key, action);\n        throw new Error(errorMessage);\n      }\n\n      nextState[_key] = nextStateForKey;\n      hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n    }\n\n    return hasChanged ? nextState : state;\n  };\n}\n\nfunction bindActionCreator(actionCreator, dispatch) {\n  return function () {\n    return dispatch(actionCreator.apply(this, arguments));\n  };\n}\n/**\n * Turns an object whose values are action creators, into an object with the\n * same keys, but with every function wrapped into a `dispatch` call so they\n * may be invoked directly. This is just a convenience method, as you can call\n * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.\n *\n * For convenience, you can also pass an action creator as the first argument,\n * and get a dispatch wrapped function in return.\n *\n * @param {Function|Object} actionCreators An object whose values are action\n * creator functions. One handy way to obtain it is to use ES6 `import * as`\n * syntax. You may also pass a single function.\n *\n * @param {Function} dispatch The `dispatch` function available on your Redux\n * store.\n *\n * @returns {Function|Object} The object mimicking the original object, but with\n * every action creator wrapped into the `dispatch` call. If you passed a\n * function as `actionCreators`, the return value will also be a single\n * function.\n */\n\n\nfunction bindActionCreators(actionCreators, dispatch) {\n  if (typeof actionCreators === 'function') {\n    return bindActionCreator(actionCreators, dispatch);\n  }\n\n  if (typeof actionCreators !== 'object' || actionCreators === null) {\n    throw new Error(\"bindActionCreators expected an object or a function, instead received \" + (actionCreators === null ? 'null' : typeof actionCreators) + \". \" + \"Did you write \\\"import ActionCreators from\\\" instead of \\\"import * as ActionCreators from\\\"?\");\n  }\n\n  var boundActionCreators = {};\n\n  for (var key in actionCreators) {\n    var actionCreator = actionCreators[key];\n\n    if (typeof actionCreator === 'function') {\n      boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n    }\n  }\n\n  return boundActionCreators;\n}\n\nfunction _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n\n  if (Object.getOwnPropertySymbols) {\n    keys.push.apply(keys, Object.getOwnPropertySymbols(object));\n  }\n\n  if (enumerableOnly) keys = keys.filter(function (sym) {\n    return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n  });\n  return keys;\n}\n\nfunction _objectSpread2(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n\n    if (i % 2) {\n      ownKeys(source, true).forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      });\n    } else if (Object.getOwnPropertyDescriptors) {\n      Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n    } else {\n      ownKeys(source).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n  }\n\n  return target;\n}\n\n/**\n * Composes single-argument functions from right to left. The rightmost\n * function can take multiple arguments as it provides the signature for\n * the resulting composite function.\n *\n * @param {...Function} funcs The functions to compose.\n * @returns {Function} A function obtained by composing the argument functions\n * from right to left. For example, compose(f, g, h) is identical to doing\n * (...args) => f(g(h(...args))).\n */\nfunction compose() {\n  for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n    funcs[_key] = arguments[_key];\n  }\n\n  if (funcs.length === 0) {\n    return function (arg) {\n      return arg;\n    };\n  }\n\n  if (funcs.length === 1) {\n    return funcs[0];\n  }\n\n  return funcs.reduce(function (a, b) {\n    return function () {\n      return a(b.apply(void 0, arguments));\n    };\n  });\n}\n\n/**\n * Creates a store enhancer that applies middleware to the dispatch method\n * of the Redux store. This is handy for a variety of tasks, such as expressing\n * asynchronous actions in a concise manner, or logging every action payload.\n *\n * See `redux-thunk` package as an example of the Redux middleware.\n *\n * Because middleware is potentially asynchronous, this should be the first\n * store enhancer in the composition chain.\n *\n * Note that each middleware will be given the `dispatch` and `getState` functions\n * as named arguments.\n *\n * @param {...Function} middlewares The middleware chain to be applied.\n * @returns {Function} A store enhancer applying the middleware.\n */\n\nfunction applyMiddleware() {\n  for (var _len = arguments.length, middlewares = new Array(_len), _key = 0; _key < _len; _key++) {\n    middlewares[_key] = arguments[_key];\n  }\n\n  return function (createStore) {\n    return function () {\n      var store = createStore.apply(void 0, arguments);\n\n      var _dispatch = function dispatch() {\n        throw new Error('Dispatching while constructing your middleware is not allowed. ' + 'Other middleware would not be applied to this dispatch.');\n      };\n\n      var middlewareAPI = {\n        getState: store.getState,\n        dispatch: function dispatch() {\n          return _dispatch.apply(void 0, arguments);\n        }\n      };\n      var chain = middlewares.map(function (middleware) {\n        return middleware(middlewareAPI);\n      });\n      _dispatch = compose.apply(void 0, chain)(store.dispatch);\n      return _objectSpread2({}, store, {\n        dispatch: _dispatch\n      });\n    };\n  };\n}\n\n/*\n * This is a dummy function to check if the function name has been altered by minification.\n * If the function has been minified and NODE_ENV !== 'production', warn the user.\n */\n\nfunction isCrushed() {}\n\nif (false) {}\n\n\n\n// CONCATENATED MODULE: ./src/scripts/reducers/items.js\nvar defaultState = [];\nfunction items_items(state, action) {\n  if (state === void 0) {\n    state = defaultState;\n  }\n\n  switch (action.type) {\n    case 'ADD_ITEM':\n      {\n        // Add object to items array\n        var newState = [].concat(state, [{\n          id: action.id,\n          choiceId: action.choiceId,\n          groupId: action.groupId,\n          value: action.value,\n          label: action.label,\n          active: true,\n          highlighted: false,\n          customProperties: action.customProperties,\n          placeholder: action.placeholder || false,\n          keyCode: null\n        }]);\n        return newState.map(function (obj) {\n          var item = obj;\n          item.highlighted = false;\n          return item;\n        });\n      }\n\n    case 'REMOVE_ITEM':\n      {\n        // Set item to inactive\n        return state.map(function (obj) {\n          var item = obj;\n\n          if (item.id === action.id) {\n            item.active = false;\n          }\n\n          return item;\n        });\n      }\n\n    case 'HIGHLIGHT_ITEM':\n      {\n        return state.map(function (obj) {\n          var item = obj;\n\n          if (item.id === action.id) {\n            item.highlighted = action.highlighted;\n          }\n\n          return item;\n        });\n      }\n\n    default:\n      {\n        return state;\n      }\n  }\n}\n// CONCATENATED MODULE: ./src/scripts/reducers/groups.js\nvar groups_defaultState = [];\nfunction groups(state, action) {\n  if (state === void 0) {\n    state = groups_defaultState;\n  }\n\n  switch (action.type) {\n    case 'ADD_GROUP':\n      {\n        return [].concat(state, [{\n          id: action.id,\n          value: action.value,\n          active: action.active,\n          disabled: action.disabled\n        }]);\n      }\n\n    case 'CLEAR_CHOICES':\n      {\n        return [];\n      }\n\n    default:\n      {\n        return state;\n      }\n  }\n}\n// CONCATENATED MODULE: ./src/scripts/reducers/choices.js\nvar choices_defaultState = [];\nfunction choices_choices(state, action) {\n  if (state === void 0) {\n    state = choices_defaultState;\n  }\n\n  switch (action.type) {\n    case 'ADD_CHOICE':\n      {\n        /*\n            A disabled choice appears in the choice dropdown but cannot be selected\n            A selected choice has been added to the passed input's value (added as an item)\n            An active choice appears within the choice dropdown\n         */\n        return [].concat(state, [{\n          id: action.id,\n          elementId: action.elementId,\n          groupId: action.groupId,\n          value: action.value,\n          label: action.label || action.value,\n          disabled: action.disabled || false,\n          selected: false,\n          active: true,\n          score: 9999,\n          customProperties: action.customProperties,\n          placeholder: action.placeholder || false,\n          keyCode: null\n        }]);\n      }\n\n    case 'ADD_ITEM':\n      {\n        // If all choices need to be activated\n        if (action.activateOptions) {\n          return state.map(function (obj) {\n            var choice = obj;\n            choice.active = action.active;\n            return choice;\n          });\n        } // When an item is added and it has an associated choice,\n        // we want to disable it so it can't be chosen again\n\n\n        if (action.choiceId > -1) {\n          return state.map(function (obj) {\n            var choice = obj;\n\n            if (choice.id === parseInt(action.choiceId, 10)) {\n              choice.selected = true;\n            }\n\n            return choice;\n          });\n        }\n\n        return state;\n      }\n\n    case 'REMOVE_ITEM':\n      {\n        // When an item is removed and it has an associated choice,\n        // we want to re-enable it so it can be chosen again\n        if (action.choiceId > -1) {\n          return state.map(function (obj) {\n            var choice = obj;\n\n            if (choice.id === parseInt(action.choiceId, 10)) {\n              choice.selected = false;\n            }\n\n            return choice;\n          });\n        }\n\n        return state;\n      }\n\n    case 'FILTER_CHOICES':\n      {\n        return state.map(function (obj) {\n          var choice = obj; // Set active state based on whether choice is\n          // within filtered results\n\n          choice.active = action.results.some(function (_ref) {\n            var item = _ref.item,\n                score = _ref.score;\n\n            if (item.id === choice.id) {\n              choice.score = score;\n              return true;\n            }\n\n            return false;\n          });\n          return choice;\n        });\n      }\n\n    case 'ACTIVATE_CHOICES':\n      {\n        return state.map(function (obj) {\n          var choice = obj;\n          choice.active = action.active;\n          return choice;\n        });\n      }\n\n    case 'CLEAR_CHOICES':\n      {\n        return choices_defaultState;\n      }\n\n    default:\n      {\n        return state;\n      }\n  }\n}\n// CONCATENATED MODULE: ./src/scripts/reducers/general.js\nvar general_defaultState = {\n  loading: false\n};\n\nvar general = function general(state, action) {\n  if (state === void 0) {\n    state = general_defaultState;\n  }\n\n  switch (action.type) {\n    case 'SET_IS_LOADING':\n      {\n        return {\n          loading: action.isLoading\n        };\n      }\n\n    default:\n      {\n        return state;\n      }\n  }\n};\n\n/* harmony default export */ var reducers_general = (general);\n// CONCATENATED MODULE: ./src/scripts/lib/utils.js\n/**\n * @param {number} min\n * @param {number} max\n * @returns {number}\n */\nvar getRandomNumber = function getRandomNumber(min, max) {\n  return Math.floor(Math.random() * (max - min) + min);\n};\n/**\n * @param {number} length\n * @returns {string}\n */\n\nvar generateChars = function generateChars(length) {\n  return Array.from({\n    length: length\n  }, function () {\n    return getRandomNumber(0, 36).toString(36);\n  }).join('');\n};\n/**\n * @param {HTMLInputElement | HTMLSelectElement} element\n * @param {string} prefix\n * @returns {string}\n */\n\nvar generateId = function generateId(element, prefix) {\n  var id = element.id || element.name && element.name + \"-\" + generateChars(2) || generateChars(4);\n  id = id.replace(/(:|\\.|\\[|\\]|,)/g, '');\n  id = prefix + \"-\" + id;\n  return id;\n};\n/**\n * @param {any} obj\n * @returns {string}\n */\n\nvar getType = function getType(obj) {\n  return Object.prototype.toString.call(obj).slice(8, -1);\n};\n/**\n * @param {string} type\n * @param {any} obj\n * @returns {boolean}\n */\n\nvar isType = function isType(type, obj) {\n  return obj !== undefined && obj !== null && getType(obj) === type;\n};\n/**\n * @param {HTMLElement} element\n * @param {HTMLElement} [wrapper={HTMLDivElement}]\n * @returns {HTMLElement}\n */\n\nvar utils_wrap = function wrap(element, wrapper) {\n  if (wrapper === void 0) {\n    wrapper = document.createElement('div');\n  }\n\n  if (element.nextSibling) {\n    element.parentNode.insertBefore(wrapper, element.nextSibling);\n  } else {\n    element.parentNode.appendChild(wrapper);\n  }\n\n  return wrapper.appendChild(element);\n};\n/**\n * @param {Element} startEl\n * @param {string} selector\n * @param {1 | -1} direction\n * @returns {Element | undefined}\n */\n\nvar getAdjacentEl = function getAdjacentEl(startEl, selector, direction) {\n  if (direction === void 0) {\n    direction = 1;\n  }\n\n  if (!(startEl instanceof Element) || typeof selector !== 'string') {\n    return undefined;\n  }\n\n  var prop = (direction > 0 ? 'next' : 'previous') + \"ElementSibling\";\n  var sibling = startEl[prop];\n\n  while (sibling) {\n    if (sibling.matches(selector)) {\n      return sibling;\n    }\n\n    sibling = sibling[prop];\n  }\n\n  return sibling;\n};\n/**\n * @param {Element} element\n * @param {Element} parent\n * @param {-1 | 1} direction\n * @returns {boolean}\n */\n\nvar isScrolledIntoView = function isScrolledIntoView(element, parent, direction) {\n  if (direction === void 0) {\n    direction = 1;\n  }\n\n  if (!element) {\n    return false;\n  }\n\n  var isVisible;\n\n  if (direction > 0) {\n    // In view from bottom\n    isVisible = parent.scrollTop + parent.offsetHeight >= element.offsetTop + element.offsetHeight;\n  } else {\n    // In view from top\n    isVisible = element.offsetTop >= parent.scrollTop;\n  }\n\n  return isVisible;\n};\n/**\n * @param {any} value\n * @returns {any}\n */\n\nvar sanitise = function sanitise(value) {\n  if (typeof value !== 'string') {\n    return value;\n  }\n\n  return value.replace(/&/g, '&amp;').replace(/>/g, '&rt;').replace(/</g, '&lt;').replace(/\"/g, '&quot;');\n};\n/**\n * @returns {() => (str: string) => Element}\n */\n\nvar strToEl = function () {\n  var tmpEl = document.createElement('div');\n  return function (str) {\n    var cleanedInput = str.trim();\n    tmpEl.innerHTML = cleanedInput;\n    var firldChild = tmpEl.children[0];\n\n    while (tmpEl.firstChild) {\n      tmpEl.removeChild(tmpEl.firstChild);\n    }\n\n    return firldChild;\n  };\n}();\n/**\n * @param {{ label?: string, value: string }} a\n * @param {{ label?: string, value: string }} b\n * @returns {number}\n */\n\nvar sortByAlpha = function sortByAlpha(_ref, _ref2) {\n  var value = _ref.value,\n      _ref$label = _ref.label,\n      label = _ref$label === void 0 ? value : _ref$label;\n  var value2 = _ref2.value,\n      _ref2$label = _ref2.label,\n      label2 = _ref2$label === void 0 ? value2 : _ref2$label;\n  return label.localeCompare(label2, [], {\n    sensitivity: 'base',\n    ignorePunctuation: true,\n    numeric: true\n  });\n};\n/**\n * @param {{ score: number }} a\n * @param {{ score: number }} b\n */\n\nvar sortByScore = function sortByScore(a, b) {\n  return a.score - b.score;\n};\n/**\n * @param {HTMLElement} element\n * @param {string} type\n * @param {object} customArgs\n */\n\nvar dispatchEvent = function dispatchEvent(element, type, customArgs) {\n  if (customArgs === void 0) {\n    customArgs = null;\n  }\n\n  var event = new CustomEvent(type, {\n    detail: customArgs,\n    bubbles: true,\n    cancelable: true\n  });\n  return element.dispatchEvent(event);\n};\n/**\n * @param {array} array\n * @param {any} value\n * @param {string} [key=\"value\"]\n * @returns {boolean}\n */\n\nvar existsInArray = function existsInArray(array, value, key) {\n  if (key === void 0) {\n    key = 'value';\n  }\n\n  return array.some(function (item) {\n    if (typeof value === 'string') {\n      return item[key] === value.trim();\n    }\n\n    return item[key] === value;\n  });\n};\n/**\n * @param {any} obj\n * @returns {any}\n */\n\nvar cloneObject = function cloneObject(obj) {\n  return JSON.parse(JSON.stringify(obj));\n};\n/**\n * Returns an array of keys present on the first but missing on the second object\n * @param {object} a\n * @param {object} b\n * @returns {string[]}\n */\n\nvar diff = function diff(a, b) {\n  var aKeys = Object.keys(a).sort();\n  var bKeys = Object.keys(b).sort();\n  return aKeys.filter(function (i) {\n    return bKeys.indexOf(i) < 0;\n  });\n};\n// CONCATENATED MODULE: ./src/scripts/reducers/index.js\n\n\n\n\n\n\nvar appReducer = combineReducers({\n  items: items_items,\n  groups: groups,\n  choices: choices_choices,\n  general: reducers_general\n});\n\nvar reducers_rootReducer = function rootReducer(passedState, action) {\n  var state = passedState; // If we are clearing all items, groups and options we reassign\n  // state and then pass that state to our proper reducer. This isn't\n  // mutating our actual state\n  // See: http://stackoverflow.com/a/35641992\n\n  if (action.type === 'CLEAR_ALL') {\n    state = undefined;\n  } else if (action.type === 'RESET_TO') {\n    return cloneObject(action.state);\n  }\n\n  return appReducer(state, action);\n};\n\n/* harmony default export */ var reducers = (reducers_rootReducer);\n// CONCATENATED MODULE: ./src/scripts/store/store.js\nfunction _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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n/**\n * @typedef {import('../../../types/index').Choices.Choice} Choice\n * @typedef {import('../../../types/index').Choices.Group} Group\n * @typedef {import('../../../types/index').Choices.Item} Item\n */\n\nvar store_Store =\n/*#__PURE__*/\nfunction () {\n  function Store() {\n    this._store = createStore(reducers, window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__());\n  }\n  /**\n   * Subscribe store to function call (wrapped Redux method)\n   * @param  {Function} onChange Function to trigger when state changes\n   * @return\n   */\n\n\n  var _proto = Store.prototype;\n\n  _proto.subscribe = function subscribe(onChange) {\n    this._store.subscribe(onChange);\n  }\n  /**\n   * Dispatch event to store (wrapped Redux method)\n   * @param  {{ type: string, [x: string]: any }} action Action to trigger\n   * @return\n   */\n  ;\n\n  _proto.dispatch = function dispatch(action) {\n    this._store.dispatch(action);\n  }\n  /**\n   * Get store object (wrapping Redux method)\n   * @returns {object} State\n   */\n  ;\n\n  /**\n   * Get loading state from store\n   * @returns {boolean} Loading State\n   */\n  _proto.isLoading = function isLoading() {\n    return this.state.general.loading;\n  }\n  /**\n   * Get single choice by it's ID\n   * @param {string} id\n   * @returns {Choice | undefined} Found choice\n   */\n  ;\n\n  _proto.getChoiceById = function getChoiceById(id) {\n    return this.activeChoices.find(function (choice) {\n      return choice.id === parseInt(id, 10);\n    });\n  }\n  /**\n   * Get group by group id\n   * @param  {number} id Group ID\n   * @returns {Group | undefined} Group data\n   */\n  ;\n\n  _proto.getGroupById = function getGroupById(id) {\n    return this.groups.find(function (group) {\n      return group.id === id;\n    });\n  };\n\n  _createClass(Store, [{\n    key: \"state\",\n    get: function get() {\n      return this._store.getState();\n    }\n    /**\n     * Get items from store\n     * @returns {Item[]} Item objects\n     */\n\n  }, {\n    key: \"items\",\n    get: function get() {\n      return this.state.items;\n    }\n    /**\n     * Get active items from store\n     * @returns {Item[]} Item objects\n     */\n\n  }, {\n    key: \"activeItems\",\n    get: function get() {\n      return this.items.filter(function (item) {\n        return item.active === true;\n      });\n    }\n    /**\n     * Get highlighted items from store\n     * @returns {Item[]} Item objects\n     */\n\n  }, {\n    key: \"highlightedActiveItems\",\n    get: function get() {\n      return this.items.filter(function (item) {\n        return item.active && item.highlighted;\n      });\n    }\n    /**\n     * Get choices from store\n     * @returns {Choice[]} Option objects\n     */\n\n  }, {\n    key: \"choices\",\n    get: function get() {\n      return this.state.choices;\n    }\n    /**\n     * Get active choices from store\n     * @returns {Choice[]} Option objects\n     */\n\n  }, {\n    key: \"activeChoices\",\n    get: function get() {\n      return this.choices.filter(function (choice) {\n        return choice.active === true;\n      });\n    }\n    /**\n     * Get selectable choices from store\n     * @returns {Choice[]} Option objects\n     */\n\n  }, {\n    key: \"selectableChoices\",\n    get: function get() {\n      return this.choices.filter(function (choice) {\n        return choice.disabled !== true;\n      });\n    }\n    /**\n     * Get choices that can be searched (excluding placeholders)\n     * @returns {Choice[]} Option objects\n     */\n\n  }, {\n    key: \"searchableChoices\",\n    get: function get() {\n      return this.selectableChoices.filter(function (choice) {\n        return choice.placeholder !== true;\n      });\n    }\n    /**\n     * Get placeholder choice from store\n     * @returns {Choice | undefined} Found placeholder\n     */\n\n  }, {\n    key: \"placeholderChoice\",\n    get: function get() {\n      return [].concat(this.choices).reverse().find(function (choice) {\n        return choice.placeholder === true;\n      });\n    }\n    /**\n     * Get groups from store\n     * @returns {Group[]} Group objects\n     */\n\n  }, {\n    key: \"groups\",\n    get: function get() {\n      return this.state.groups;\n    }\n    /**\n     * Get active groups from store\n     * @returns {Group[]} Group objects\n     */\n\n  }, {\n    key: \"activeGroups\",\n    get: function get() {\n      var groups = this.groups,\n          choices = this.choices;\n      return groups.filter(function (group) {\n        var isActive = group.active === true && group.disabled === false;\n        var hasActiveOptions = choices.some(function (choice) {\n          return choice.active === true && choice.disabled === false;\n        });\n        return isActive && hasActiveOptions;\n      }, []);\n    }\n  }]);\n\n  return Store;\n}();\n\n\n// CONCATENATED MODULE: ./src/scripts/components/dropdown.js\nfunction dropdown_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); } }\n\nfunction dropdown_createClass(Constructor, protoProps, staticProps) { if (protoProps) dropdown_defineProperties(Constructor.prototype, protoProps); if (staticProps) dropdown_defineProperties(Constructor, staticProps); return Constructor; }\n\n/**\n * @typedef {import('../../../types/index').Choices.passedElement} passedElement\n * @typedef {import('../../../types/index').Choices.ClassNames} ClassNames\n */\nvar Dropdown =\n/*#__PURE__*/\nfunction () {\n  /**\n   * @param {{\n   *  element: HTMLElement,\n   *  type: passedElement['type'],\n   *  classNames: ClassNames,\n   * }} args\n   */\n  function Dropdown(_ref) {\n    var element = _ref.element,\n        type = _ref.type,\n        classNames = _ref.classNames;\n    this.element = element;\n    this.classNames = classNames;\n    this.type = type;\n    this.isActive = false;\n  }\n  /**\n   * Bottom position of dropdown in viewport coordinates\n   * @returns {number} Vertical position\n   */\n\n\n  var _proto = Dropdown.prototype;\n\n  /**\n   * Find element that matches passed selector\n   * @param {string} selector\n   * @returns {HTMLElement | null}\n   */\n  _proto.getChild = function getChild(selector) {\n    return this.element.querySelector(selector);\n  }\n  /**\n   * Show dropdown to user by adding active state class\n   * @returns {this}\n   */\n  ;\n\n  _proto.show = function show() {\n    this.element.classList.add(this.classNames.activeState);\n    this.element.setAttribute('aria-expanded', 'true');\n    this.isActive = true;\n    return this;\n  }\n  /**\n   * Hide dropdown from user\n   * @returns {this}\n   */\n  ;\n\n  _proto.hide = function hide() {\n    this.element.classList.remove(this.classNames.activeState);\n    this.element.setAttribute('aria-expanded', 'false');\n    this.isActive = false;\n    return this;\n  };\n\n  dropdown_createClass(Dropdown, [{\n    key: \"distanceFromTopWindow\",\n    get: function get() {\n      return this.element.getBoundingClientRect().bottom;\n    }\n  }]);\n\n  return Dropdown;\n}();\n\n\n// CONCATENATED MODULE: ./src/scripts/constants.js\n\n/**\n * @typedef {import('../../types/index').Choices.ClassNames} ClassNames\n * @typedef {import('../../types/index').Choices.Options} Options\n */\n\n/** @type {ClassNames} */\n\nvar DEFAULT_CLASSNAMES = {\n  containerOuter: 'choices',\n  containerInner: 'choices__inner',\n  input: 'choices__input',\n  inputCloned: 'choices__input--cloned',\n  list: 'choices__list',\n  listItems: 'choices__list--multiple',\n  listSingle: 'choices__list--single',\n  listDropdown: 'choices__list--dropdown',\n  item: 'choices__item',\n  itemSelectable: 'choices__item--selectable',\n  itemDisabled: 'choices__item--disabled',\n  itemChoice: 'choices__item--choice',\n  placeholder: 'choices__placeholder',\n  group: 'choices__group',\n  groupHeading: 'choices__heading',\n  button: 'choices__button',\n  activeState: 'is-active',\n  focusState: 'is-focused',\n  openState: 'is-open',\n  disabledState: 'is-disabled',\n  highlightedState: 'is-highlighted',\n  selectedState: 'is-selected',\n  flippedState: 'is-flipped',\n  loadingState: 'is-loading',\n  noResults: 'has-no-results',\n  noChoices: 'has-no-choices'\n};\n/** @type {Options} */\n\nvar DEFAULT_CONFIG = {\n  items: [],\n  choices: [],\n  silent: false,\n  renderChoiceLimit: -1,\n  maxItemCount: -1,\n  addItems: true,\n  addItemFilter: null,\n  removeItems: true,\n  removeItemButton: false,\n  editItems: false,\n  duplicateItemsAllowed: true,\n  delimiter: ',',\n  paste: true,\n  searchEnabled: true,\n  searchChoices: true,\n  searchFloor: 1,\n  searchResultLimit: 4,\n  searchFields: ['label', 'value'],\n  position: 'auto',\n  resetScrollPosition: true,\n  shouldSort: true,\n  shouldSortItems: false,\n  sorter: sortByAlpha,\n  placeholder: true,\n  placeholderValue: null,\n  searchPlaceholderValue: null,\n  prependValue: null,\n  appendValue: null,\n  renderSelectedChoices: 'auto',\n  loadingText: 'Loading...',\n  noResultsText: 'No results found',\n  noChoicesText: 'No choices to choose from',\n  itemSelectText: 'Press to select',\n  uniqueItemText: 'Only unique values can be added',\n  customAddItemText: 'Only values matching specific conditions can be added',\n  addItemText: function addItemText(value) {\n    return \"Press Enter to add <b>\\\"\" + sanitise(value) + \"\\\"</b>\";\n  },\n  maxItemText: function maxItemText(maxItemCount) {\n    return \"Only \" + maxItemCount + \" values can be added\";\n  },\n  valueComparer: function valueComparer(value1, value2) {\n    return value1 === value2;\n  },\n  fuseOptions: {\n    includeScore: true\n  },\n  callbackOnInit: null,\n  callbackOnCreateTemplates: null,\n  classNames: DEFAULT_CLASSNAMES\n};\nvar EVENTS = {\n  showDropdown: 'showDropdown',\n  hideDropdown: 'hideDropdown',\n  change: 'change',\n  choice: 'choice',\n  search: 'search',\n  addItem: 'addItem',\n  removeItem: 'removeItem',\n  highlightItem: 'highlightItem',\n  highlightChoice: 'highlightChoice'\n};\nvar ACTION_TYPES = {\n  ADD_CHOICE: 'ADD_CHOICE',\n  FILTER_CHOICES: 'FILTER_CHOICES',\n  ACTIVATE_CHOICES: 'ACTIVATE_CHOICES',\n  CLEAR_CHOICES: 'CLEAR_CHOICES',\n  ADD_GROUP: 'ADD_GROUP',\n  ADD_ITEM: 'ADD_ITEM',\n  REMOVE_ITEM: 'REMOVE_ITEM',\n  HIGHLIGHT_ITEM: 'HIGHLIGHT_ITEM',\n  CLEAR_ALL: 'CLEAR_ALL'\n};\nvar KEY_CODES = {\n  BACK_KEY: 46,\n  DELETE_KEY: 8,\n  ENTER_KEY: 13,\n  A_KEY: 65,\n  ESC_KEY: 27,\n  UP_KEY: 38,\n  DOWN_KEY: 40,\n  PAGE_UP_KEY: 33,\n  PAGE_DOWN_KEY: 34\n};\nvar TEXT_TYPE = 'text';\nvar SELECT_ONE_TYPE = 'select-one';\nvar SELECT_MULTIPLE_TYPE = 'select-multiple';\nvar SCROLLING_SPEED = 4;\n// CONCATENATED MODULE: ./src/scripts/components/container.js\n\n\n/**\n * @typedef {import('../../../types/index').Choices.passedElement} passedElement\n * @typedef {import('../../../types/index').Choices.ClassNames} ClassNames\n */\n\nvar container_Container =\n/*#__PURE__*/\nfunction () {\n  /**\n   * @param {{\n   *  element: HTMLElement,\n   *  type: passedElement['type'],\n   *  classNames: ClassNames,\n   *  position\n   * }} args\n   */\n  function Container(_ref) {\n    var element = _ref.element,\n        type = _ref.type,\n        classNames = _ref.classNames,\n        position = _ref.position;\n    this.element = element;\n    this.classNames = classNames;\n    this.type = type;\n    this.position = position;\n    this.isOpen = false;\n    this.isFlipped = false;\n    this.isFocussed = false;\n    this.isDisabled = false;\n    this.isLoading = false;\n    this._onFocus = this._onFocus.bind(this);\n    this._onBlur = this._onBlur.bind(this);\n  }\n\n  var _proto = Container.prototype;\n\n  _proto.addEventListeners = function addEventListeners() {\n    this.element.addEventListener('focus', this._onFocus);\n    this.element.addEventListener('blur', this._onBlur);\n  };\n\n  _proto.removeEventListeners = function removeEventListeners() {\n    this.element.removeEventListener('focus', this._onFocus);\n    this.element.removeEventListener('blur', this._onBlur);\n  }\n  /**\n   * Determine whether container should be flipped based on passed\n   * dropdown position\n   * @param {number} dropdownPos\n   * @returns {boolean}\n   */\n  ;\n\n  _proto.shouldFlip = function shouldFlip(dropdownPos) {\n    if (typeof dropdownPos !== 'number') {\n      return false;\n    } // If flip is enabled and the dropdown bottom position is\n    // greater than the window height flip the dropdown.\n\n\n    var shouldFlip = false;\n\n    if (this.position === 'auto') {\n      shouldFlip = !window.matchMedia(\"(min-height: \" + (dropdownPos + 1) + \"px)\").matches;\n    } else if (this.position === 'top') {\n      shouldFlip = true;\n    }\n\n    return shouldFlip;\n  }\n  /**\n   * @param {string} activeDescendantID\n   */\n  ;\n\n  _proto.setActiveDescendant = function setActiveDescendant(activeDescendantID) {\n    this.element.setAttribute('aria-activedescendant', activeDescendantID);\n  };\n\n  _proto.removeActiveDescendant = function removeActiveDescendant() {\n    this.element.removeAttribute('aria-activedescendant');\n  }\n  /**\n   * @param {number} dropdownPos\n   */\n  ;\n\n  _proto.open = function open(dropdownPos) {\n    this.element.classList.add(this.classNames.openState);\n    this.element.setAttribute('aria-expanded', 'true');\n    this.isOpen = true;\n\n    if (this.shouldFlip(dropdownPos)) {\n      this.element.classList.add(this.classNames.flippedState);\n      this.isFlipped = true;\n    }\n  };\n\n  _proto.close = function close() {\n    this.element.classList.remove(this.classNames.openState);\n    this.element.setAttribute('aria-expanded', 'false');\n    this.removeActiveDescendant();\n    this.isOpen = false; // A dropdown flips if it does not have space within the page\n\n    if (this.isFlipped) {\n      this.element.classList.remove(this.classNames.flippedState);\n      this.isFlipped = false;\n    }\n  };\n\n  _proto.focus = function focus() {\n    if (!this.isFocussed) {\n      this.element.focus();\n    }\n  };\n\n  _proto.addFocusState = function addFocusState() {\n    this.element.classList.add(this.classNames.focusState);\n  };\n\n  _proto.removeFocusState = function removeFocusState() {\n    this.element.classList.remove(this.classNames.focusState);\n  };\n\n  _proto.enable = function enable() {\n    this.element.classList.remove(this.classNames.disabledState);\n    this.element.removeAttribute('aria-disabled');\n\n    if (this.type === SELECT_ONE_TYPE) {\n      this.element.setAttribute('tabindex', '0');\n    }\n\n    this.isDisabled = false;\n  };\n\n  _proto.disable = function disable() {\n    this.element.classList.add(this.classNames.disabledState);\n    this.element.setAttribute('aria-disabled', 'true');\n\n    if (this.type === SELECT_ONE_TYPE) {\n      this.element.setAttribute('tabindex', '-1');\n    }\n\n    this.isDisabled = true;\n  }\n  /**\n   * @param {HTMLElement} element\n   */\n  ;\n\n  _proto.wrap = function wrap(element) {\n    utils_wrap(element, this.element);\n  }\n  /**\n   * @param {Element} element\n   */\n  ;\n\n  _proto.unwrap = function unwrap(element) {\n    // Move passed element outside this element\n    this.element.parentNode.insertBefore(element, this.element); // Remove this element\n\n    this.element.parentNode.removeChild(this.element);\n  };\n\n  _proto.addLoadingState = function addLoadingState() {\n    this.element.classList.add(this.classNames.loadingState);\n    this.element.setAttribute('aria-busy', 'true');\n    this.isLoading = true;\n  };\n\n  _proto.removeLoadingState = function removeLoadingState() {\n    this.element.classList.remove(this.classNames.loadingState);\n    this.element.removeAttribute('aria-busy');\n    this.isLoading = false;\n  };\n\n  _proto._onFocus = function _onFocus() {\n    this.isFocussed = true;\n  };\n\n  _proto._onBlur = function _onBlur() {\n    this.isFocussed = false;\n  };\n\n  return Container;\n}();\n\n\n// CONCATENATED MODULE: ./src/scripts/components/input.js\nfunction input_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); } }\n\nfunction input_createClass(Constructor, protoProps, staticProps) { if (protoProps) input_defineProperties(Constructor.prototype, protoProps); if (staticProps) input_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n/**\n * @typedef {import('../../../types/index').Choices.passedElement} passedElement\n * @typedef {import('../../../types/index').Choices.ClassNames} ClassNames\n */\n\nvar input_Input =\n/*#__PURE__*/\nfunction () {\n  /**\n   * @param {{\n   *  element: HTMLInputElement,\n   *  type: passedElement['type'],\n   *  classNames: ClassNames,\n   *  preventPaste: boolean\n   * }} args\n   */\n  function Input(_ref) {\n    var element = _ref.element,\n        type = _ref.type,\n        classNames = _ref.classNames,\n        preventPaste = _ref.preventPaste;\n    this.element = element;\n    this.type = type;\n    this.classNames = classNames;\n    this.preventPaste = preventPaste;\n    this.isFocussed = this.element === document.activeElement;\n    this.isDisabled = element.disabled;\n    this._onPaste = this._onPaste.bind(this);\n    this._onInput = this._onInput.bind(this);\n    this._onFocus = this._onFocus.bind(this);\n    this._onBlur = this._onBlur.bind(this);\n  }\n  /**\n   * @param {string} placeholder\n   */\n\n\n  var _proto = Input.prototype;\n\n  _proto.addEventListeners = function addEventListeners() {\n    this.element.addEventListener('paste', this._onPaste);\n    this.element.addEventListener('input', this._onInput, {\n      passive: true\n    });\n    this.element.addEventListener('focus', this._onFocus, {\n      passive: true\n    });\n    this.element.addEventListener('blur', this._onBlur, {\n      passive: true\n    });\n  };\n\n  _proto.removeEventListeners = function removeEventListeners() {\n    this.element.removeEventListener('input', this._onInput, {\n      passive: true\n    });\n    this.element.removeEventListener('paste', this._onPaste);\n    this.element.removeEventListener('focus', this._onFocus, {\n      passive: true\n    });\n    this.element.removeEventListener('blur', this._onBlur, {\n      passive: true\n    });\n  };\n\n  _proto.enable = function enable() {\n    this.element.removeAttribute('disabled');\n    this.isDisabled = false;\n  };\n\n  _proto.disable = function disable() {\n    this.element.setAttribute('disabled', '');\n    this.isDisabled = true;\n  };\n\n  _proto.focus = function focus() {\n    if (!this.isFocussed) {\n      this.element.focus();\n    }\n  };\n\n  _proto.blur = function blur() {\n    if (this.isFocussed) {\n      this.element.blur();\n    }\n  }\n  /**\n   * Set value of input to blank\n   * @param {boolean} setWidth\n   * @returns {this}\n   */\n  ;\n\n  _proto.clear = function clear(setWidth) {\n    if (setWidth === void 0) {\n      setWidth = true;\n    }\n\n    if (this.element.value) {\n      this.element.value = '';\n    }\n\n    if (setWidth) {\n      this.setWidth();\n    }\n\n    return this;\n  }\n  /**\n   * Set the correct input width based on placeholder\n   * value or input value\n   */\n  ;\n\n  _proto.setWidth = function setWidth() {\n    // Resize input to contents or placeholder\n    var _this$element = this.element,\n        style = _this$element.style,\n        value = _this$element.value,\n        placeholder = _this$element.placeholder;\n    style.minWidth = placeholder.length + 1 + \"ch\";\n    style.width = value.length + 1 + \"ch\";\n  }\n  /**\n   * @param {string} activeDescendantID\n   */\n  ;\n\n  _proto.setActiveDescendant = function setActiveDescendant(activeDescendantID) {\n    this.element.setAttribute('aria-activedescendant', activeDescendantID);\n  };\n\n  _proto.removeActiveDescendant = function removeActiveDescendant() {\n    this.element.removeAttribute('aria-activedescendant');\n  };\n\n  _proto._onInput = function _onInput() {\n    if (this.type !== SELECT_ONE_TYPE) {\n      this.setWidth();\n    }\n  }\n  /**\n   * @param {Event} event\n   */\n  ;\n\n  _proto._onPaste = function _onPaste(event) {\n    if (this.preventPaste) {\n      event.preventDefault();\n    }\n  };\n\n  _proto._onFocus = function _onFocus() {\n    this.isFocussed = true;\n  };\n\n  _proto._onBlur = function _onBlur() {\n    this.isFocussed = false;\n  };\n\n  input_createClass(Input, [{\n    key: \"placeholder\",\n    set: function set(placeholder) {\n      this.element.placeholder = placeholder;\n    }\n    /**\n     * @returns {string}\n     */\n\n  }, {\n    key: \"value\",\n    get: function get() {\n      return sanitise(this.element.value);\n    }\n    /**\n     * @param {string} value\n     */\n    ,\n    set: function set(value) {\n      this.element.value = value;\n    }\n  }]);\n\n  return Input;\n}();\n\n\n// CONCATENATED MODULE: ./src/scripts/components/list.js\n\n/**\n * @typedef {import('../../../types/index').Choices.Choice} Choice\n */\n\nvar list_List =\n/*#__PURE__*/\nfunction () {\n  /**\n   * @param {{ element: HTMLElement }} args\n   */\n  function List(_ref) {\n    var element = _ref.element;\n    this.element = element;\n    this.scrollPos = this.element.scrollTop;\n    this.height = this.element.offsetHeight;\n  }\n\n  var _proto = List.prototype;\n\n  _proto.clear = function clear() {\n    this.element.innerHTML = '';\n  }\n  /**\n   * @param {Element | DocumentFragment} node\n   */\n  ;\n\n  _proto.append = function append(node) {\n    this.element.appendChild(node);\n  }\n  /**\n   * @param {string} selector\n   * @returns {Element | null}\n   */\n  ;\n\n  _proto.getChild = function getChild(selector) {\n    return this.element.querySelector(selector);\n  }\n  /**\n   * @returns {boolean}\n   */\n  ;\n\n  _proto.hasChildren = function hasChildren() {\n    return this.element.hasChildNodes();\n  };\n\n  _proto.scrollToTop = function scrollToTop() {\n    this.element.scrollTop = 0;\n  }\n  /**\n   * @param {Element} element\n   * @param {1 | -1} direction\n   */\n  ;\n\n  _proto.scrollToChildElement = function scrollToChildElement(element, direction) {\n    var _this = this;\n\n    if (!element) {\n      return;\n    }\n\n    var listHeight = this.element.offsetHeight; // Scroll position of dropdown\n\n    var listScrollPosition = this.element.scrollTop + listHeight;\n    var elementHeight = element.offsetHeight; // Distance from bottom of element to top of parent\n\n    var elementPos = element.offsetTop + elementHeight; // Difference between the element and scroll position\n\n    var destination = direction > 0 ? this.element.scrollTop + elementPos - listScrollPosition : element.offsetTop;\n    requestAnimationFrame(function () {\n      _this._animateScroll(destination, direction);\n    });\n  }\n  /**\n   * @param {number} scrollPos\n   * @param {number} strength\n   * @param {number} destination\n   */\n  ;\n\n  _proto._scrollDown = function _scrollDown(scrollPos, strength, destination) {\n    var easing = (destination - scrollPos) / strength;\n    var distance = easing > 1 ? easing : 1;\n    this.element.scrollTop = scrollPos + distance;\n  }\n  /**\n   * @param {number} scrollPos\n   * @param {number} strength\n   * @param {number} destination\n   */\n  ;\n\n  _proto._scrollUp = function _scrollUp(scrollPos, strength, destination) {\n    var easing = (scrollPos - destination) / strength;\n    var distance = easing > 1 ? easing : 1;\n    this.element.scrollTop = scrollPos - distance;\n  }\n  /**\n   * @param {*} destination\n   * @param {*} direction\n   */\n  ;\n\n  _proto._animateScroll = function _animateScroll(destination, direction) {\n    var _this2 = this;\n\n    var strength = SCROLLING_SPEED;\n    var choiceListScrollTop = this.element.scrollTop;\n    var continueAnimation = false;\n\n    if (direction > 0) {\n      this._scrollDown(choiceListScrollTop, strength, destination);\n\n      if (choiceListScrollTop < destination) {\n        continueAnimation = true;\n      }\n    } else {\n      this._scrollUp(choiceListScrollTop, strength, destination);\n\n      if (choiceListScrollTop > destination) {\n        continueAnimation = true;\n      }\n    }\n\n    if (continueAnimation) {\n      requestAnimationFrame(function () {\n        _this2._animateScroll(destination, direction);\n      });\n    }\n  };\n\n  return List;\n}();\n\n\n// CONCATENATED MODULE: ./src/scripts/components/wrapped-element.js\nfunction wrapped_element_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); } }\n\nfunction wrapped_element_createClass(Constructor, protoProps, staticProps) { if (protoProps) wrapped_element_defineProperties(Constructor.prototype, protoProps); if (staticProps) wrapped_element_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n/**\n * @typedef {import('../../../types/index').Choices.passedElement} passedElement\n * @typedef {import('../../../types/index').Choices.ClassNames} ClassNames\n */\n\nvar wrapped_element_WrappedElement =\n/*#__PURE__*/\nfunction () {\n  /**\n   * @param {{\n   *  element: HTMLInputElement | HTMLSelectElement,\n   *  classNames: ClassNames,\n   * }} args\n   */\n  function WrappedElement(_ref) {\n    var element = _ref.element,\n        classNames = _ref.classNames;\n    this.element = element;\n    this.classNames = classNames;\n\n    if (!(element instanceof HTMLInputElement) && !(element instanceof HTMLSelectElement)) {\n      throw new TypeError('Invalid element passed');\n    }\n\n    this.isDisabled = false;\n  }\n\n  var _proto = WrappedElement.prototype;\n\n  _proto.conceal = function conceal() {\n    // Hide passed input\n    this.element.classList.add(this.classNames.input);\n    this.element.hidden = true; // Remove element from tab index\n\n    this.element.tabIndex = -1; // Backup original styles if any\n\n    var origStyle = this.element.getAttribute('style');\n\n    if (origStyle) {\n      this.element.setAttribute('data-choice-orig-style', origStyle);\n    }\n\n    this.element.setAttribute('data-choice', 'active');\n  };\n\n  _proto.reveal = function reveal() {\n    // Reinstate passed element\n    this.element.classList.remove(this.classNames.input);\n    this.element.hidden = false;\n    this.element.removeAttribute('tabindex'); // Recover original styles if any\n\n    var origStyle = this.element.getAttribute('data-choice-orig-style');\n\n    if (origStyle) {\n      this.element.removeAttribute('data-choice-orig-style');\n      this.element.setAttribute('style', origStyle);\n    } else {\n      this.element.removeAttribute('style');\n    }\n\n    this.element.removeAttribute('data-choice'); // Re-assign values - this is weird, I know\n    // @todo Figure out why we need to do this\n\n    this.element.value = this.element.value; // eslint-disable-line no-self-assign\n  };\n\n  _proto.enable = function enable() {\n    this.element.removeAttribute('disabled');\n    this.element.disabled = false;\n    this.isDisabled = false;\n  };\n\n  _proto.disable = function disable() {\n    this.element.setAttribute('disabled', '');\n    this.element.disabled = true;\n    this.isDisabled = true;\n  };\n\n  _proto.triggerEvent = function triggerEvent(eventType, data) {\n    dispatchEvent(this.element, eventType, data);\n  };\n\n  wrapped_element_createClass(WrappedElement, [{\n    key: \"isActive\",\n    get: function get() {\n      return this.element.dataset.choice === 'active';\n    }\n  }, {\n    key: \"dir\",\n    get: function get() {\n      return this.element.dir;\n    }\n  }, {\n    key: \"value\",\n    get: function get() {\n      return this.element.value;\n    },\n    set: function set(value) {\n      // you must define setter here otherwise it will be readonly property\n      this.element.value = value;\n    }\n  }]);\n\n  return WrappedElement;\n}();\n\n\n// CONCATENATED MODULE: ./src/scripts/components/wrapped-input.js\nfunction wrapped_input_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); } }\n\nfunction wrapped_input_createClass(Constructor, protoProps, staticProps) { if (protoProps) wrapped_input_defineProperties(Constructor.prototype, protoProps); if (staticProps) wrapped_input_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\n\n/**\n * @typedef {import('../../../types/index').Choices.ClassNames} ClassNames\n * @typedef {import('../../../types/index').Choices.Item} Item\n */\n\nvar WrappedInput =\n/*#__PURE__*/\nfunction (_WrappedElement) {\n  _inheritsLoose(WrappedInput, _WrappedElement);\n\n  /**\n   * @param {{\n   *  element: HTMLInputElement,\n   *  classNames: ClassNames,\n   *  delimiter: string\n   * }} args\n   */\n  function WrappedInput(_ref) {\n    var _this;\n\n    var element = _ref.element,\n        classNames = _ref.classNames,\n        delimiter = _ref.delimiter;\n    _this = _WrappedElement.call(this, {\n      element: element,\n      classNames: classNames\n    }) || this;\n    _this.delimiter = delimiter;\n    return _this;\n  }\n  /**\n   * @returns {string}\n   */\n\n\n  wrapped_input_createClass(WrappedInput, [{\n    key: \"value\",\n    get: function get() {\n      return this.element.value;\n    }\n    /**\n     * @param {Item[]} items\n     */\n    ,\n    set: function set(items) {\n      var itemValues = items.map(function (_ref2) {\n        var value = _ref2.value;\n        return value;\n      });\n      var joinedValues = itemValues.join(this.delimiter);\n      this.element.setAttribute('value', joinedValues);\n      this.element.value = joinedValues;\n    }\n  }]);\n\n  return WrappedInput;\n}(wrapped_element_WrappedElement);\n\n\n// CONCATENATED MODULE: ./src/scripts/components/wrapped-select.js\nfunction wrapped_select_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); } }\n\nfunction wrapped_select_createClass(Constructor, protoProps, staticProps) { if (protoProps) wrapped_select_defineProperties(Constructor.prototype, protoProps); if (staticProps) wrapped_select_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction wrapped_select_inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\n\n/**\n * @typedef {import('../../../types/index').Choices.ClassNames} ClassNames\n * @typedef {import('../../../types/index').Choices.Item} Item\n * @typedef {import('../../../types/index').Choices.Choice} Choice\n */\n\nvar WrappedSelect =\n/*#__PURE__*/\nfunction (_WrappedElement) {\n  wrapped_select_inheritsLoose(WrappedSelect, _WrappedElement);\n\n  /**\n   * @param {{\n   *  element: HTMLSelectElement,\n   *  classNames: ClassNames,\n   *  delimiter: string\n   *  template: function\n   * }} args\n   */\n  function WrappedSelect(_ref) {\n    var _this;\n\n    var element = _ref.element,\n        classNames = _ref.classNames,\n        template = _ref.template;\n    _this = _WrappedElement.call(this, {\n      element: element,\n      classNames: classNames\n    }) || this;\n    _this.template = template;\n    return _this;\n  }\n\n  var _proto = WrappedSelect.prototype;\n\n  /**\n   * @param {DocumentFragment} fragment\n   */\n  _proto.appendDocFragment = function appendDocFragment(fragment) {\n    this.element.innerHTML = '';\n    this.element.appendChild(fragment);\n  };\n\n  wrapped_select_createClass(WrappedSelect, [{\n    key: \"placeholderOption\",\n    get: function get() {\n      return this.element.querySelector('option[value=\"\"]') || // Backward compatibility layer for the non-standard placeholder attribute supported in older versions.\n      this.element.querySelector('option[placeholder]');\n    }\n    /**\n     * @returns {Element[]}\n     */\n\n  }, {\n    key: \"optionGroups\",\n    get: function get() {\n      return Array.from(this.element.getElementsByTagName('OPTGROUP'));\n    }\n    /**\n     * @returns {Item[] | Choice[]}\n     */\n\n  }, {\n    key: \"options\",\n    get: function get() {\n      return Array.from(this.element.options);\n    }\n    /**\n     * @param {Item[] | Choice[]} options\n     */\n    ,\n    set: function set(options) {\n      var _this2 = this;\n\n      var fragment = document.createDocumentFragment();\n\n      var addOptionToFragment = function addOptionToFragment(data) {\n        // Create a standard select option\n        var option = _this2.template(data); // Append it to fragment\n\n\n        fragment.appendChild(option);\n      }; // Add each list item to list\n\n\n      options.forEach(function (optionData) {\n        return addOptionToFragment(optionData);\n      });\n      this.appendDocFragment(fragment);\n    }\n  }]);\n\n  return WrappedSelect;\n}(wrapped_element_WrappedElement);\n\n\n// CONCATENATED MODULE: ./src/scripts/components/index.js\n\n\n\n\n\n\n\n// CONCATENATED MODULE: ./src/scripts/templates.js\n/**\n * Helpers to create HTML elements used by Choices\n * Can be overridden by providing `callbackOnCreateTemplates` option\n * @typedef {import('../../types/index').Choices.Templates} Templates\n * @typedef {import('../../types/index').Choices.ClassNames} ClassNames\n * @typedef {import('../../types/index').Choices.Options} Options\n * @typedef {import('../../types/index').Choices.Item} Item\n * @typedef {import('../../types/index').Choices.Choice} Choice\n * @typedef {import('../../types/index').Choices.Group} Group\n */\nvar TEMPLATES =\n/** @type {Templates} */\n{\n  /**\n   * @param {Partial<ClassNames>} classNames\n   * @param {\"ltr\" | \"rtl\" | \"auto\"} dir\n   * @param {boolean} isSelectElement\n   * @param {boolean} isSelectOneElement\n   * @param {boolean} searchEnabled\n   * @param {\"select-one\" | \"select-multiple\" | \"text\"} passedElementType\n   */\n  containerOuter: function containerOuter(_ref, dir, isSelectElement, isSelectOneElement, searchEnabled, passedElementType) {\n    var _containerOuter = _ref.containerOuter;\n    var div = Object.assign(document.createElement('div'), {\n      className: _containerOuter\n    });\n    div.dataset.type = passedElementType;\n\n    if (dir) {\n      div.dir = dir;\n    }\n\n    if (isSelectOneElement) {\n      div.tabIndex = 0;\n    }\n\n    if (isSelectElement) {\n      div.setAttribute('role', searchEnabled ? 'combobox' : 'listbox');\n\n      if (searchEnabled) {\n        div.setAttribute('aria-autocomplete', 'list');\n      }\n    }\n\n    div.setAttribute('aria-haspopup', 'true');\n    div.setAttribute('aria-expanded', 'false');\n    return div;\n  },\n\n  /**\n   * @param {Partial<ClassNames>} classNames\n   */\n  containerInner: function containerInner(_ref2) {\n    var _containerInner = _ref2.containerInner;\n    return Object.assign(document.createElement('div'), {\n      className: _containerInner\n    });\n  },\n\n  /**\n   * @param {Partial<ClassNames>} classNames\n   * @param {boolean} isSelectOneElement\n   */\n  itemList: function itemList(_ref3, isSelectOneElement) {\n    var list = _ref3.list,\n        listSingle = _ref3.listSingle,\n        listItems = _ref3.listItems;\n    return Object.assign(document.createElement('div'), {\n      className: list + \" \" + (isSelectOneElement ? listSingle : listItems)\n    });\n  },\n\n  /**\n   * @param {Partial<ClassNames>} classNames\n   * @param {string} value\n   */\n  placeholder: function placeholder(_ref4, value) {\n    var _placeholder = _ref4.placeholder;\n    return Object.assign(document.createElement('div'), {\n      className: _placeholder,\n      innerHTML: value\n    });\n  },\n\n  /**\n   * @param {Partial<ClassNames>} classNames\n   * @param {Item} item\n   * @param {boolean} removeItemButton\n   */\n  item: function item(_ref5, _ref6, removeItemButton) {\n    var _item = _ref5.item,\n        button = _ref5.button,\n        highlightedState = _ref5.highlightedState,\n        itemSelectable = _ref5.itemSelectable,\n        placeholder = _ref5.placeholder;\n    var id = _ref6.id,\n        value = _ref6.value,\n        label = _ref6.label,\n        customProperties = _ref6.customProperties,\n        active = _ref6.active,\n        disabled = _ref6.disabled,\n        highlighted = _ref6.highlighted,\n        isPlaceholder = _ref6.placeholder;\n    var div = Object.assign(document.createElement('div'), {\n      className: _item,\n      innerHTML: label\n    });\n    Object.assign(div.dataset, {\n      item: '',\n      id: id,\n      value: value,\n      customProperties: customProperties\n    });\n\n    if (active) {\n      div.setAttribute('aria-selected', 'true');\n    }\n\n    if (disabled) {\n      div.setAttribute('aria-disabled', 'true');\n    }\n\n    if (isPlaceholder) {\n      div.classList.add(placeholder);\n    }\n\n    div.classList.add(highlighted ? highlightedState : itemSelectable);\n\n    if (removeItemButton) {\n      if (disabled) {\n        div.classList.remove(itemSelectable);\n      }\n\n      div.dataset.deletable = '';\n      /** @todo This MUST be localizable, not hardcoded! */\n\n      var REMOVE_ITEM_TEXT = 'Remove item';\n      var removeButton = Object.assign(document.createElement('button'), {\n        type: 'button',\n        className: button,\n        innerHTML: REMOVE_ITEM_TEXT\n      });\n      removeButton.setAttribute('aria-label', REMOVE_ITEM_TEXT + \": '\" + value + \"'\");\n      removeButton.dataset.button = '';\n      div.appendChild(removeButton);\n    }\n\n    return div;\n  },\n\n  /**\n   * @param {Partial<ClassNames>} classNames\n   * @param {boolean} isSelectOneElement\n   */\n  choiceList: function choiceList(_ref7, isSelectOneElement) {\n    var list = _ref7.list;\n    var div = Object.assign(document.createElement('div'), {\n      className: list\n    });\n\n    if (!isSelectOneElement) {\n      div.setAttribute('aria-multiselectable', 'true');\n    }\n\n    div.setAttribute('role', 'listbox');\n    return div;\n  },\n\n  /**\n   * @param {Partial<ClassNames>} classNames\n   * @param {Group} group\n   */\n  choiceGroup: function choiceGroup(_ref8, _ref9) {\n    var group = _ref8.group,\n        groupHeading = _ref8.groupHeading,\n        itemDisabled = _ref8.itemDisabled;\n    var id = _ref9.id,\n        value = _ref9.value,\n        disabled = _ref9.disabled;\n    var div = Object.assign(document.createElement('div'), {\n      className: group + \" \" + (disabled ? itemDisabled : '')\n    });\n    div.setAttribute('role', 'group');\n    Object.assign(div.dataset, {\n      group: '',\n      id: id,\n      value: value\n    });\n\n    if (disabled) {\n      div.setAttribute('aria-disabled', 'true');\n    }\n\n    div.appendChild(Object.assign(document.createElement('div'), {\n      className: groupHeading,\n      innerHTML: value\n    }));\n    return div;\n  },\n\n  /**\n   * @param {Partial<ClassNames>} classNames\n   * @param {Choice} choice\n   * @param {Options['itemSelectText']} selectText\n   */\n  choice: function choice(_ref10, _ref11, selectText) {\n    var item = _ref10.item,\n        itemChoice = _ref10.itemChoice,\n        itemSelectable = _ref10.itemSelectable,\n        selectedState = _ref10.selectedState,\n        itemDisabled = _ref10.itemDisabled,\n        placeholder = _ref10.placeholder;\n    var id = _ref11.id,\n        value = _ref11.value,\n        label = _ref11.label,\n        groupId = _ref11.groupId,\n        elementId = _ref11.elementId,\n        isDisabled = _ref11.disabled,\n        isSelected = _ref11.selected,\n        isPlaceholder = _ref11.placeholder;\n    var div = Object.assign(document.createElement('div'), {\n      id: elementId,\n      innerHTML: label,\n      className: item + \" \" + itemChoice\n    });\n\n    if (isSelected) {\n      div.classList.add(selectedState);\n    }\n\n    if (isPlaceholder) {\n      div.classList.add(placeholder);\n    }\n\n    div.setAttribute('role', groupId > 0 ? 'treeitem' : 'option');\n    Object.assign(div.dataset, {\n      choice: '',\n      id: id,\n      value: value,\n      selectText: selectText\n    });\n\n    if (isDisabled) {\n      div.classList.add(itemDisabled);\n      div.dataset.choiceDisabled = '';\n      div.setAttribute('aria-disabled', 'true');\n    } else {\n      div.classList.add(itemSelectable);\n      div.dataset.choiceSelectable = '';\n    }\n\n    return div;\n  },\n\n  /**\n   * @param {Partial<ClassNames>} classNames\n   * @param {string} placeholderValue\n   */\n  input: function input(_ref12, placeholderValue) {\n    var _input = _ref12.input,\n        inputCloned = _ref12.inputCloned;\n    var inp = Object.assign(document.createElement('input'), {\n      type: 'text',\n      className: _input + \" \" + inputCloned,\n      autocomplete: 'off',\n      autocapitalize: 'off',\n      spellcheck: false\n    });\n    inp.setAttribute('role', 'textbox');\n    inp.setAttribute('aria-autocomplete', 'list');\n    inp.setAttribute('aria-label', placeholderValue);\n    return inp;\n  },\n\n  /**\n   * @param {Partial<ClassNames>} classNames\n   */\n  dropdown: function dropdown(_ref13) {\n    var list = _ref13.list,\n        listDropdown = _ref13.listDropdown;\n    var div = document.createElement('div');\n    div.classList.add(list, listDropdown);\n    div.setAttribute('aria-expanded', 'false');\n    return div;\n  },\n\n  /**\n   *\n   * @param {Partial<ClassNames>} classNames\n   * @param {string} innerHTML\n   * @param {\"no-choices\" | \"no-results\" | \"\"} type\n   */\n  notice: function notice(_ref14, innerHTML, type) {\n    var item = _ref14.item,\n        itemChoice = _ref14.itemChoice,\n        noResults = _ref14.noResults,\n        noChoices = _ref14.noChoices;\n\n    if (type === void 0) {\n      type = '';\n    }\n\n    var classes = [item, itemChoice];\n\n    if (type === 'no-choices') {\n      classes.push(noChoices);\n    } else if (type === 'no-results') {\n      classes.push(noResults);\n    }\n\n    return Object.assign(document.createElement('div'), {\n      innerHTML: innerHTML,\n      className: classes.join(' ')\n    });\n  },\n\n  /**\n   * @param {Item} option\n   */\n  option: function option(_ref15) {\n    var label = _ref15.label,\n        value = _ref15.value,\n        customProperties = _ref15.customProperties,\n        active = _ref15.active,\n        disabled = _ref15.disabled;\n    var opt = new Option(label, value, false, active);\n\n    if (customProperties) {\n      opt.dataset.customProperties = customProperties;\n    }\n\n    opt.disabled = disabled;\n    return opt;\n  }\n};\n/* harmony default export */ var templates = (TEMPLATES);\n// CONCATENATED MODULE: ./src/scripts/actions/choices.js\n/**\n * @typedef {import('redux').Action} Action\n * @typedef {import('../../../types/index').Choices.Choice} Choice\n */\n\n/**\n * @argument {Choice} choice\n * @returns {Action & Choice}\n */\n\nvar choices_addChoice = function addChoice(_ref) {\n  var value = _ref.value,\n      label = _ref.label,\n      id = _ref.id,\n      groupId = _ref.groupId,\n      disabled = _ref.disabled,\n      elementId = _ref.elementId,\n      customProperties = _ref.customProperties,\n      placeholder = _ref.placeholder,\n      keyCode = _ref.keyCode;\n  return {\n    type: ACTION_TYPES.ADD_CHOICE,\n    value: value,\n    label: label,\n    id: id,\n    groupId: groupId,\n    disabled: disabled,\n    elementId: elementId,\n    customProperties: customProperties,\n    placeholder: placeholder,\n    keyCode: keyCode\n  };\n};\n/**\n * @argument {Choice[]} results\n * @returns {Action & { results: Choice[] }}\n */\n\nvar choices_filterChoices = function filterChoices(results) {\n  return {\n    type: ACTION_TYPES.FILTER_CHOICES,\n    results: results\n  };\n};\n/**\n * @argument {boolean} active\n * @returns {Action & { active: boolean }}\n */\n\nvar choices_activateChoices = function activateChoices(active) {\n  if (active === void 0) {\n    active = true;\n  }\n\n  return {\n    type: ACTION_TYPES.ACTIVATE_CHOICES,\n    active: active\n  };\n};\n/**\n * @returns {Action}\n */\n\nvar choices_clearChoices = function clearChoices() {\n  return {\n    type: ACTION_TYPES.CLEAR_CHOICES\n  };\n};\n// CONCATENATED MODULE: ./src/scripts/actions/items.js\n\n/**\n * @typedef {import('redux').Action} Action\n * @typedef {import('../../../types/index').Choices.Item} Item\n */\n\n/**\n * @param {Item} item\n * @returns {Action & Item}\n */\n\nvar items_addItem = function addItem(_ref) {\n  var value = _ref.value,\n      label = _ref.label,\n      id = _ref.id,\n      choiceId = _ref.choiceId,\n      groupId = _ref.groupId,\n      customProperties = _ref.customProperties,\n      placeholder = _ref.placeholder,\n      keyCode = _ref.keyCode;\n  return {\n    type: ACTION_TYPES.ADD_ITEM,\n    value: value,\n    label: label,\n    id: id,\n    choiceId: choiceId,\n    groupId: groupId,\n    customProperties: customProperties,\n    placeholder: placeholder,\n    keyCode: keyCode\n  };\n};\n/**\n * @param {string} id\n * @param {string} choiceId\n * @returns {Action & { id: string, choiceId: string }}\n */\n\nvar items_removeItem = function removeItem(id, choiceId) {\n  return {\n    type: ACTION_TYPES.REMOVE_ITEM,\n    id: id,\n    choiceId: choiceId\n  };\n};\n/**\n * @param {string} id\n * @param {boolean} highlighted\n * @returns {Action & { id: string, highlighted: boolean }}\n */\n\nvar items_highlightItem = function highlightItem(id, highlighted) {\n  return {\n    type: ACTION_TYPES.HIGHLIGHT_ITEM,\n    id: id,\n    highlighted: highlighted\n  };\n};\n// CONCATENATED MODULE: ./src/scripts/actions/groups.js\n\n/**\n * @typedef {import('redux').Action} Action\n * @typedef {import('../../../types/index').Choices.Group} Group\n */\n\n/**\n * @param {Group} group\n * @returns {Action & Group}\n */\n\nvar groups_addGroup = function addGroup(_ref) {\n  var value = _ref.value,\n      id = _ref.id,\n      active = _ref.active,\n      disabled = _ref.disabled;\n  return {\n    type: ACTION_TYPES.ADD_GROUP,\n    value: value,\n    id: id,\n    active: active,\n    disabled: disabled\n  };\n};\n// CONCATENATED MODULE: ./src/scripts/actions/misc.js\n/**\n * @typedef {import('redux').Action} Action\n */\n\n/**\n * @returns {Action}\n */\nvar clearAll = function clearAll() {\n  return {\n    type: 'CLEAR_ALL'\n  };\n};\n/**\n * @param {any} state\n * @returns {Action & { state: object }}\n */\n\nvar resetTo = function resetTo(state) {\n  return {\n    type: 'RESET_TO',\n    state: state\n  };\n};\n/**\n * @param {boolean} isLoading\n * @returns {Action & { isLoading: boolean }}\n */\n\nvar setIsLoading = function setIsLoading(isLoading) {\n  return {\n    type: 'SET_IS_LOADING',\n    isLoading: isLoading\n  };\n};\n// CONCATENATED MODULE: ./src/scripts/choices.js\nfunction choices_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); } }\n\nfunction choices_createClass(Constructor, protoProps, staticProps) { if (protoProps) choices_defineProperties(Constructor.prototype, protoProps); if (staticProps) choices_defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\n\n\n\n\n\n\n/** @see {@link http://browserhacks.com/#hack-acea075d0ac6954f275a70023906050c} */\n\nvar IS_IE11 = '-ms-scroll-limit' in document.documentElement.style && '-ms-ime-align' in document.documentElement.style;\n/**\n * @typedef {import('../../types/index').Choices.Choice} Choice\n * @typedef {import('../../types/index').Choices.Item} Item\n * @typedef {import('../../types/index').Choices.Group} Group\n * @typedef {import('../../types/index').Choices.Options} Options\n */\n\n/** @type {Partial<Options>} */\n\nvar USER_DEFAULTS = {};\n/**\n * Choices\n * @author Josh Johnson<josh@joshuajohnson.co.uk>\n */\n\nvar choices_Choices =\n/*#__PURE__*/\nfunction () {\n  choices_createClass(Choices, null, [{\n    key: \"defaults\",\n    get: function get() {\n      return Object.preventExtensions({\n        get options() {\n          return USER_DEFAULTS;\n        },\n\n        get templates() {\n          return TEMPLATES;\n        }\n\n      });\n    }\n    /**\n     * @param {string | HTMLInputElement | HTMLSelectElement} element\n     * @param {Partial<Options>} userConfig\n     */\n\n  }]);\n\n  function Choices(element, userConfig) {\n    var _this = this;\n\n    if (element === void 0) {\n      element = '[data-choice]';\n    }\n\n    if (userConfig === void 0) {\n      userConfig = {};\n    }\n\n    /** @type {Partial<Options>} */\n    this.config = cjs_default.a.all([DEFAULT_CONFIG, Choices.defaults.options, userConfig], // When merging array configs, replace with a copy of the userConfig array,\n    // instead of concatenating with the default array\n    {\n      arrayMerge: function arrayMerge(_, sourceArray) {\n        return [].concat(sourceArray);\n      }\n    });\n    var invalidConfigOptions = diff(this.config, DEFAULT_CONFIG);\n\n    if (invalidConfigOptions.length) {\n      console.warn('Unknown config option(s) passed', invalidConfigOptions.join(', '));\n    }\n\n    var passedElement = typeof element === 'string' ? document.querySelector(element) : element;\n\n    if (!(passedElement instanceof HTMLInputElement || passedElement instanceof HTMLSelectElement)) {\n      throw TypeError('Expected one of the following types text|select-one|select-multiple');\n    }\n\n    this._isTextElement = passedElement.type === TEXT_TYPE;\n    this._isSelectOneElement = passedElement.type === SELECT_ONE_TYPE;\n    this._isSelectMultipleElement = passedElement.type === SELECT_MULTIPLE_TYPE;\n    this._isSelectElement = this._isSelectOneElement || this._isSelectMultipleElement;\n    this.config.searchEnabled = this._isSelectMultipleElement || this.config.searchEnabled;\n\n    if (!['auto', 'always'].includes(this.config.renderSelectedChoices)) {\n      this.config.renderSelectedChoices = 'auto';\n    }\n\n    if (userConfig.addItemFilter && typeof userConfig.addItemFilter !== 'function') {\n      var re = userConfig.addItemFilter instanceof RegExp ? userConfig.addItemFilter : new RegExp(userConfig.addItemFilter);\n      this.config.addItemFilter = re.test.bind(re);\n    }\n\n    if (this._isTextElement) {\n      this.passedElement = new WrappedInput({\n        element: passedElement,\n        classNames: this.config.classNames,\n        delimiter: this.config.delimiter\n      });\n    } else {\n      this.passedElement = new WrappedSelect({\n        element: passedElement,\n        classNames: this.config.classNames,\n        template: function template(data) {\n          return _this._templates.option(data);\n        }\n      });\n    }\n\n    this.initialised = false;\n    this._store = new store_Store();\n    this._initialState = {};\n    this._currentState = {};\n    this._prevState = {};\n    this._currentValue = '';\n    this._canSearch = this.config.searchEnabled;\n    this._isScrollingOnIe = false;\n    this._highlightPosition = 0;\n    this._wasTap = true;\n    this._placeholderValue = this._generatePlaceholderValue();\n    this._baseId = generateId(this.passedElement.element, 'choices-');\n    /**\n     * setting direction in cases where it's explicitly set on passedElement\n     * or when calculated direction is different from the document\n     * @type {HTMLElement['dir']}\n     */\n\n    this._direction = this.passedElement.dir;\n\n    if (!this._direction) {\n      var _window$getComputedSt = window.getComputedStyle(this.passedElement.element),\n          elementDirection = _window$getComputedSt.direction;\n\n      var _window$getComputedSt2 = window.getComputedStyle(document.documentElement),\n          documentDirection = _window$getComputedSt2.direction;\n\n      if (elementDirection !== documentDirection) {\n        this._direction = elementDirection;\n      }\n    }\n\n    this._idNames = {\n      itemChoice: 'item-choice'\n    }; // Assign preset groups from passed element\n\n    this._presetGroups = this.passedElement.optionGroups; // Assign preset options from passed element\n\n    this._presetOptions = this.passedElement.options; // Assign preset choices from passed object\n\n    this._presetChoices = this.config.choices; // Assign preset items from passed object first\n\n    this._presetItems = this.config.items; // Add any values passed from attribute\n\n    if (this.passedElement.value) {\n      this._presetItems = this._presetItems.concat(this.passedElement.value.split(this.config.delimiter));\n    } // Create array of choices from option elements\n\n\n    if (this.passedElement.options) {\n      this.passedElement.options.forEach(function (o) {\n        _this._presetChoices.push({\n          value: o.value,\n          label: o.innerHTML,\n          selected: o.selected,\n          disabled: o.disabled || o.parentNode.disabled,\n          placeholder: o.value === '' || o.hasAttribute('placeholder'),\n          customProperties: o.getAttribute('data-custom-properties')\n        });\n      });\n    }\n\n    this._render = this._render.bind(this);\n    this._onFocus = this._onFocus.bind(this);\n    this._onBlur = this._onBlur.bind(this);\n    this._onKeyUp = this._onKeyUp.bind(this);\n    this._onKeyDown = this._onKeyDown.bind(this);\n    this._onClick = this._onClick.bind(this);\n    this._onTouchMove = this._onTouchMove.bind(this);\n    this._onTouchEnd = this._onTouchEnd.bind(this);\n    this._onMouseDown = this._onMouseDown.bind(this);\n    this._onMouseOver = this._onMouseOver.bind(this);\n    this._onFormReset = this._onFormReset.bind(this);\n    this._onAKey = this._onAKey.bind(this);\n    this._onEnterKey = this._onEnterKey.bind(this);\n    this._onEscapeKey = this._onEscapeKey.bind(this);\n    this._onDirectionKey = this._onDirectionKey.bind(this);\n    this._onDeleteKey = this._onDeleteKey.bind(this); // If element has already been initialised with Choices, fail silently\n\n    if (this.passedElement.isActive) {\n      if (!this.config.silent) {\n        console.warn('Trying to initialise Choices on element already initialised');\n      }\n\n      this.initialised = true;\n      return;\n    } // Let's go\n\n\n    this.init();\n  }\n\n  var _proto = Choices.prototype;\n\n  _proto.init = function init() {\n    if (this.initialised) {\n      return;\n    }\n\n    this._createTemplates();\n\n    this._createElements();\n\n    this._createStructure(); // Set initial state (We need to clone the state because some reducers\n    // modify the inner objects properties in the state) 🤢\n\n\n    this._initialState = cloneObject(this._store.state);\n\n    this._store.subscribe(this._render);\n\n    this._render();\n\n    this._addEventListeners();\n\n    var shouldDisable = !this.config.addItems || this.passedElement.element.hasAttribute('disabled');\n\n    if (shouldDisable) {\n      this.disable();\n    }\n\n    this.initialised = true;\n    var callbackOnInit = this.config.callbackOnInit; // Run callback if it is a function\n\n    if (callbackOnInit && typeof callbackOnInit === 'function') {\n      callbackOnInit.call(this);\n    }\n  };\n\n  _proto.destroy = function destroy() {\n    if (!this.initialised) {\n      return;\n    }\n\n    this._removeEventListeners();\n\n    this.passedElement.reveal();\n    this.containerOuter.unwrap(this.passedElement.element);\n    this.clearStore();\n\n    if (this._isSelectElement) {\n      this.passedElement.options = this._presetOptions;\n    }\n\n    this._templates = null;\n    this.initialised = false;\n  };\n\n  _proto.enable = function enable() {\n    if (this.passedElement.isDisabled) {\n      this.passedElement.enable();\n    }\n\n    if (this.containerOuter.isDisabled) {\n      this._addEventListeners();\n\n      this.input.enable();\n      this.containerOuter.enable();\n    }\n\n    return this;\n  };\n\n  _proto.disable = function disable() {\n    if (!this.passedElement.isDisabled) {\n      this.passedElement.disable();\n    }\n\n    if (!this.containerOuter.isDisabled) {\n      this._removeEventListeners();\n\n      this.input.disable();\n      this.containerOuter.disable();\n    }\n\n    return this;\n  };\n\n  _proto.highlightItem = function highlightItem(item, runEvent) {\n    if (runEvent === void 0) {\n      runEvent = true;\n    }\n\n    if (!item) {\n      return this;\n    }\n\n    var id = item.id,\n        _item$groupId = item.groupId,\n        groupId = _item$groupId === void 0 ? -1 : _item$groupId,\n        _item$value = item.value,\n        value = _item$value === void 0 ? '' : _item$value,\n        _item$label = item.label,\n        label = _item$label === void 0 ? '' : _item$label;\n    var group = groupId >= 0 ? this._store.getGroupById(groupId) : null;\n\n    this._store.dispatch(items_highlightItem(id, true));\n\n    if (runEvent) {\n      this.passedElement.triggerEvent(EVENTS.highlightItem, {\n        id: id,\n        value: value,\n        label: label,\n        groupValue: group && group.value ? group.value : null\n      });\n    }\n\n    return this;\n  };\n\n  _proto.unhighlightItem = function unhighlightItem(item) {\n    if (!item) {\n      return this;\n    }\n\n    var id = item.id,\n        _item$groupId2 = item.groupId,\n        groupId = _item$groupId2 === void 0 ? -1 : _item$groupId2,\n        _item$value2 = item.value,\n        value = _item$value2 === void 0 ? '' : _item$value2,\n        _item$label2 = item.label,\n        label = _item$label2 === void 0 ? '' : _item$label2;\n    var group = groupId >= 0 ? this._store.getGroupById(groupId) : null;\n\n    this._store.dispatch(items_highlightItem(id, false));\n\n    this.passedElement.triggerEvent(EVENTS.highlightItem, {\n      id: id,\n      value: value,\n      label: label,\n      groupValue: group && group.value ? group.value : null\n    });\n    return this;\n  };\n\n  _proto.highlightAll = function highlightAll() {\n    var _this2 = this;\n\n    this._store.items.forEach(function (item) {\n      return _this2.highlightItem(item);\n    });\n\n    return this;\n  };\n\n  _proto.unhighlightAll = function unhighlightAll() {\n    var _this3 = this;\n\n    this._store.items.forEach(function (item) {\n      return _this3.unhighlightItem(item);\n    });\n\n    return this;\n  };\n\n  _proto.removeActiveItemsByValue = function removeActiveItemsByValue(value) {\n    var _this4 = this;\n\n    this._store.activeItems.filter(function (item) {\n      return item.value === value;\n    }).forEach(function (item) {\n      return _this4._removeItem(item);\n    });\n\n    return this;\n  };\n\n  _proto.removeActiveItems = function removeActiveItems(excludedId) {\n    var _this5 = this;\n\n    this._store.activeItems.filter(function (_ref) {\n      var id = _ref.id;\n      return id !== excludedId;\n    }).forEach(function (item) {\n      return _this5._removeItem(item);\n    });\n\n    return this;\n  };\n\n  _proto.removeHighlightedItems = function removeHighlightedItems(runEvent) {\n    var _this6 = this;\n\n    if (runEvent === void 0) {\n      runEvent = false;\n    }\n\n    this._store.highlightedActiveItems.forEach(function (item) {\n      _this6._removeItem(item); // If this action was performed by the user\n      // trigger the event\n\n\n      if (runEvent) {\n        _this6._triggerChange(item.value);\n      }\n    });\n\n    return this;\n  };\n\n  _proto.showDropdown = function showDropdown(preventInputFocus) {\n    var _this7 = this;\n\n    if (this.dropdown.isActive) {\n      return this;\n    }\n\n    requestAnimationFrame(function () {\n      _this7.dropdown.show();\n\n      _this7.containerOuter.open(_this7.dropdown.distanceFromTopWindow);\n\n      if (!preventInputFocus && _this7._canSearch) {\n        _this7.input.focus();\n      }\n\n      _this7.passedElement.triggerEvent(EVENTS.showDropdown, {});\n    });\n    return this;\n  };\n\n  _proto.hideDropdown = function hideDropdown(preventInputBlur) {\n    var _this8 = this;\n\n    if (!this.dropdown.isActive) {\n      return this;\n    }\n\n    requestAnimationFrame(function () {\n      _this8.dropdown.hide();\n\n      _this8.containerOuter.close();\n\n      if (!preventInputBlur && _this8._canSearch) {\n        _this8.input.removeActiveDescendant();\n\n        _this8.input.blur();\n      }\n\n      _this8.passedElement.triggerEvent(EVENTS.hideDropdown, {});\n    });\n    return this;\n  };\n\n  _proto.getValue = function getValue(valueOnly) {\n    if (valueOnly === void 0) {\n      valueOnly = false;\n    }\n\n    var values = this._store.activeItems.reduce(function (selectedItems, item) {\n      var itemValue = valueOnly ? item.value : item;\n      selectedItems.push(itemValue);\n      return selectedItems;\n    }, []);\n\n    return this._isSelectOneElement ? values[0] : values;\n  }\n  /**\n   * @param {string[] | import('../../types/index').Choices.Item[]} items\n   */\n  ;\n\n  _proto.setValue = function setValue(items) {\n    var _this9 = this;\n\n    if (!this.initialised) {\n      return this;\n    }\n\n    items.forEach(function (value) {\n      return _this9._setChoiceOrItem(value);\n    });\n    return this;\n  };\n\n  _proto.setChoiceByValue = function setChoiceByValue(value) {\n    var _this10 = this;\n\n    if (!this.initialised || this._isTextElement) {\n      return this;\n    } // If only one value has been passed, convert to array\n\n\n    var choiceValue = Array.isArray(value) ? value : [value]; // Loop through each value and\n\n    choiceValue.forEach(function (val) {\n      return _this10._findAndSelectChoiceByValue(val);\n    });\n    return this;\n  }\n  /**\n   * Set choices of select input via an array of objects (or function that returns array of object or promise of it),\n   * a value field name and a label field name.\n   * This behaves the same as passing items via the choices option but can be called after initialising Choices.\n   * This can also be used to add groups of choices (see example 2); Optionally pass a true `replaceChoices` value to remove any existing choices.\n   * Optionally pass a `customProperties` object to add additional data to your choices (useful when searching/filtering etc).\n   *\n   * **Input types affected:** select-one, select-multiple\n   *\n   * @template {Choice[] | ((instance: Choices) => object[] | Promise<object[]>)} T\n   * @param {T} [choicesArrayOrFetcher]\n   * @param {string} [value = 'value'] - name of `value` field\n   * @param {string} [label = 'label'] - name of 'label' field\n   * @param {boolean} [replaceChoices = false] - whether to replace of add choices\n   * @returns {this | Promise<this>}\n   *\n   * @example\n   * ```js\n   * const example = new Choices(element);\n   *\n   * example.setChoices([\n   *   {value: 'One', label: 'Label One', disabled: true},\n   *   {value: 'Two', label: 'Label Two', selected: true},\n   *   {value: 'Three', label: 'Label Three'},\n   * ], 'value', 'label', false);\n   * ```\n   *\n   * @example\n   * ```js\n   * const example = new Choices(element);\n   *\n   * example.setChoices(async () => {\n   *   try {\n   *      const items = await fetch('/items');\n   *      return items.json()\n   *   } catch(err) {\n   *      console.error(err)\n   *   }\n   * });\n   * ```\n   *\n   * @example\n   * ```js\n   * const example = new Choices(element);\n   *\n   * example.setChoices([{\n   *   label: 'Group one',\n   *   id: 1,\n   *   disabled: false,\n   *   choices: [\n   *     {value: 'Child One', label: 'Child One', selected: true},\n   *     {value: 'Child Two', label: 'Child Two',  disabled: true},\n   *     {value: 'Child Three', label: 'Child Three'},\n   *   ]\n   * },\n   * {\n   *   label: 'Group two',\n   *   id: 2,\n   *   disabled: false,\n   *   choices: [\n   *     {value: 'Child Four', label: 'Child Four', disabled: true},\n   *     {value: 'Child Five', label: 'Child Five'},\n   *     {value: 'Child Six', label: 'Child Six', customProperties: {\n   *       description: 'Custom description about child six',\n   *       random: 'Another random custom property'\n   *     }},\n   *   ]\n   * }], 'value', 'label', false);\n   * ```\n   */\n  ;\n\n  _proto.setChoices = function setChoices(choicesArrayOrFetcher, value, label, replaceChoices) {\n    var _this11 = this;\n\n    if (choicesArrayOrFetcher === void 0) {\n      choicesArrayOrFetcher = [];\n    }\n\n    if (value === void 0) {\n      value = 'value';\n    }\n\n    if (label === void 0) {\n      label = 'label';\n    }\n\n    if (replaceChoices === void 0) {\n      replaceChoices = false;\n    }\n\n    if (!this.initialised) {\n      throw new ReferenceError(\"setChoices was called on a non-initialized instance of Choices\");\n    }\n\n    if (!this._isSelectElement) {\n      throw new TypeError(\"setChoices can't be used with INPUT based Choices\");\n    }\n\n    if (typeof value !== 'string' || !value) {\n      throw new TypeError(\"value parameter must be a name of 'value' field in passed objects\");\n    } // Clear choices if needed\n\n\n    if (replaceChoices) {\n      this.clearChoices();\n    }\n\n    if (typeof choicesArrayOrFetcher === 'function') {\n      // it's a choices fetcher function\n      var fetcher = choicesArrayOrFetcher(this);\n\n      if (typeof Promise === 'function' && fetcher instanceof Promise) {\n        // that's a promise\n        // eslint-disable-next-line compat/compat\n        return new Promise(function (resolve) {\n          return requestAnimationFrame(resolve);\n        }).then(function () {\n          return _this11._handleLoadingState(true);\n        }).then(function () {\n          return fetcher;\n        }).then(function (data) {\n          return _this11.setChoices(data, value, label, replaceChoices);\n        }).catch(function (err) {\n          if (!_this11.config.silent) {\n            console.error(err);\n          }\n        }).then(function () {\n          return _this11._handleLoadingState(false);\n        }).then(function () {\n          return _this11;\n        });\n      } // function returned something else than promise, let's check if it's an array of choices\n\n\n      if (!Array.isArray(fetcher)) {\n        throw new TypeError(\".setChoices first argument function must return either array of choices or Promise, got: \" + typeof fetcher);\n      } // recursion with results, it's sync and choices were cleared already\n\n\n      return this.setChoices(fetcher, value, label, false);\n    }\n\n    if (!Array.isArray(choicesArrayOrFetcher)) {\n      throw new TypeError(\".setChoices must be called either with array of choices with a function resulting into Promise of array of choices\");\n    }\n\n    this.containerOuter.removeLoadingState();\n\n    this._startLoading();\n\n    choicesArrayOrFetcher.forEach(function (groupOrChoice) {\n      if (groupOrChoice.choices) {\n        _this11._addGroup({\n          id: parseInt(groupOrChoice.id, 10) || null,\n          group: groupOrChoice,\n          valueKey: value,\n          labelKey: label\n        });\n      } else {\n        _this11._addChoice({\n          value: groupOrChoice[value],\n          label: groupOrChoice[label],\n          isSelected: groupOrChoice.selected,\n          isDisabled: groupOrChoice.disabled,\n          customProperties: groupOrChoice.customProperties,\n          placeholder: groupOrChoice.placeholder\n        });\n      }\n    });\n\n    this._stopLoading();\n\n    return this;\n  };\n\n  _proto.clearChoices = function clearChoices() {\n    this._store.dispatch(choices_clearChoices());\n\n    return this;\n  };\n\n  _proto.clearStore = function clearStore() {\n    this._store.dispatch(clearAll());\n\n    return this;\n  };\n\n  _proto.clearInput = function clearInput() {\n    var shouldSetInputWidth = !this._isSelectOneElement;\n    this.input.clear(shouldSetInputWidth);\n\n    if (!this._isTextElement && this._canSearch) {\n      this._isSearching = false;\n\n      this._store.dispatch(choices_activateChoices(true));\n    }\n\n    return this;\n  };\n\n  _proto._render = function _render() {\n    if (this._store.isLoading()) {\n      return;\n    }\n\n    this._currentState = this._store.state;\n    var stateChanged = this._currentState.choices !== this._prevState.choices || this._currentState.groups !== this._prevState.groups || this._currentState.items !== this._prevState.items;\n    var shouldRenderChoices = this._isSelectElement;\n    var shouldRenderItems = this._currentState.items !== this._prevState.items;\n\n    if (!stateChanged) {\n      return;\n    }\n\n    if (shouldRenderChoices) {\n      this._renderChoices();\n    }\n\n    if (shouldRenderItems) {\n      this._renderItems();\n    }\n\n    this._prevState = this._currentState;\n  };\n\n  _proto._renderChoices = function _renderChoices() {\n    var _this12 = this;\n\n    var _this$_store = this._store,\n        activeGroups = _this$_store.activeGroups,\n        activeChoices = _this$_store.activeChoices;\n    var choiceListFragment = document.createDocumentFragment();\n    this.choiceList.clear();\n\n    if (this.config.resetScrollPosition) {\n      requestAnimationFrame(function () {\n        return _this12.choiceList.scrollToTop();\n      });\n    } // If we have grouped options\n\n\n    if (activeGroups.length >= 1 && !this._isSearching) {\n      // If we have a placeholder choice along with groups\n      var activePlaceholders = activeChoices.filter(function (activeChoice) {\n        return activeChoice.placeholder === true && activeChoice.groupId === -1;\n      });\n\n      if (activePlaceholders.length >= 1) {\n        choiceListFragment = this._createChoicesFragment(activePlaceholders, choiceListFragment);\n      }\n\n      choiceListFragment = this._createGroupsFragment(activeGroups, activeChoices, choiceListFragment);\n    } else if (activeChoices.length >= 1) {\n      choiceListFragment = this._createChoicesFragment(activeChoices, choiceListFragment);\n    } // If we have choices to show\n\n\n    if (choiceListFragment.childNodes && choiceListFragment.childNodes.length > 0) {\n      var activeItems = this._store.activeItems;\n\n      var canAddItem = this._canAddItem(activeItems, this.input.value); // ...and we can select them\n\n\n      if (canAddItem.response) {\n        // ...append them and highlight the first choice\n        this.choiceList.append(choiceListFragment);\n\n        this._highlightChoice();\n      } else {\n        // ...otherwise show a notice\n        this.choiceList.append(this._getTemplate('notice', canAddItem.notice));\n      }\n    } else {\n      // Otherwise show a notice\n      var dropdownItem;\n      var notice;\n\n      if (this._isSearching) {\n        notice = typeof this.config.noResultsText === 'function' ? this.config.noResultsText() : this.config.noResultsText;\n        dropdownItem = this._getTemplate('notice', notice, 'no-results');\n      } else {\n        notice = typeof this.config.noChoicesText === 'function' ? this.config.noChoicesText() : this.config.noChoicesText;\n        dropdownItem = this._getTemplate('notice', notice, 'no-choices');\n      }\n\n      this.choiceList.append(dropdownItem);\n    }\n  };\n\n  _proto._renderItems = function _renderItems() {\n    var activeItems = this._store.activeItems || [];\n    this.itemList.clear(); // Create a fragment to store our list items\n    // (so we don't have to update the DOM for each item)\n\n    var itemListFragment = this._createItemsFragment(activeItems); // If we have items to add, append them\n\n\n    if (itemListFragment.childNodes) {\n      this.itemList.append(itemListFragment);\n    }\n  };\n\n  _proto._createGroupsFragment = function _createGroupsFragment(groups, choices, fragment) {\n    var _this13 = this;\n\n    if (fragment === void 0) {\n      fragment = document.createDocumentFragment();\n    }\n\n    var getGroupChoices = function getGroupChoices(group) {\n      return choices.filter(function (choice) {\n        if (_this13._isSelectOneElement) {\n          return choice.groupId === group.id;\n        }\n\n        return choice.groupId === group.id && (_this13.config.renderSelectedChoices === 'always' || !choice.selected);\n      });\n    }; // If sorting is enabled, filter groups\n\n\n    if (this.config.shouldSort) {\n      groups.sort(this.config.sorter);\n    }\n\n    groups.forEach(function (group) {\n      var groupChoices = getGroupChoices(group);\n\n      if (groupChoices.length >= 1) {\n        var dropdownGroup = _this13._getTemplate('choiceGroup', group);\n\n        fragment.appendChild(dropdownGroup);\n\n        _this13._createChoicesFragment(groupChoices, fragment, true);\n      }\n    });\n    return fragment;\n  };\n\n  _proto._createChoicesFragment = function _createChoicesFragment(choices, fragment, withinGroup) {\n    var _this14 = this;\n\n    if (fragment === void 0) {\n      fragment = document.createDocumentFragment();\n    }\n\n    if (withinGroup === void 0) {\n      withinGroup = false;\n    }\n\n    // Create a fragment to store our list items (so we don't have to update the DOM for each item)\n    var _this$config = this.config,\n        renderSelectedChoices = _this$config.renderSelectedChoices,\n        searchResultLimit = _this$config.searchResultLimit,\n        renderChoiceLimit = _this$config.renderChoiceLimit;\n    var filter = this._isSearching ? sortByScore : this.config.sorter;\n\n    var appendChoice = function appendChoice(choice) {\n      var shouldRender = renderSelectedChoices === 'auto' ? _this14._isSelectOneElement || !choice.selected : true;\n\n      if (shouldRender) {\n        var dropdownItem = _this14._getTemplate('choice', choice, _this14.config.itemSelectText);\n\n        fragment.appendChild(dropdownItem);\n      }\n    };\n\n    var rendererableChoices = choices;\n\n    if (renderSelectedChoices === 'auto' && !this._isSelectOneElement) {\n      rendererableChoices = choices.filter(function (choice) {\n        return !choice.selected;\n      });\n    } // Split array into placeholders and \"normal\" choices\n\n\n    var _rendererableChoices$ = rendererableChoices.reduce(function (acc, choice) {\n      if (choice.placeholder) {\n        acc.placeholderChoices.push(choice);\n      } else {\n        acc.normalChoices.push(choice);\n      }\n\n      return acc;\n    }, {\n      placeholderChoices: [],\n      normalChoices: []\n    }),\n        placeholderChoices = _rendererableChoices$.placeholderChoices,\n        normalChoices = _rendererableChoices$.normalChoices; // If sorting is enabled or the user is searching, filter choices\n\n\n    if (this.config.shouldSort || this._isSearching) {\n      normalChoices.sort(filter);\n    }\n\n    var choiceLimit = rendererableChoices.length; // Prepend placeholeder\n\n    var sortedChoices = this._isSelectOneElement ? [].concat(placeholderChoices, normalChoices) : normalChoices;\n\n    if (this._isSearching) {\n      choiceLimit = searchResultLimit;\n    } else if (renderChoiceLimit && renderChoiceLimit > 0 && !withinGroup) {\n      choiceLimit = renderChoiceLimit;\n    } // Add each choice to dropdown within range\n\n\n    for (var i = 0; i < choiceLimit; i += 1) {\n      if (sortedChoices[i]) {\n        appendChoice(sortedChoices[i]);\n      }\n    }\n\n    return fragment;\n  };\n\n  _proto._createItemsFragment = function _createItemsFragment(items, fragment) {\n    var _this15 = this;\n\n    if (fragment === void 0) {\n      fragment = document.createDocumentFragment();\n    }\n\n    // Create fragment to add elements to\n    var _this$config2 = this.config,\n        shouldSortItems = _this$config2.shouldSortItems,\n        sorter = _this$config2.sorter,\n        removeItemButton = _this$config2.removeItemButton; // If sorting is enabled, filter items\n\n    if (shouldSortItems && !this._isSelectOneElement) {\n      items.sort(sorter);\n    }\n\n    if (this._isTextElement) {\n      // Update the value of the hidden input\n      this.passedElement.value = items;\n    } else {\n      // Update the options of the hidden input\n      this.passedElement.options = items;\n    }\n\n    var addItemToFragment = function addItemToFragment(item) {\n      // Create new list element\n      var listItem = _this15._getTemplate('item', item, removeItemButton); // Append it to list\n\n\n      fragment.appendChild(listItem);\n    }; // Add each list item to list\n\n\n    items.forEach(addItemToFragment);\n    return fragment;\n  };\n\n  _proto._triggerChange = function _triggerChange(value) {\n    if (value === undefined || value === null) {\n      return;\n    }\n\n    this.passedElement.triggerEvent(EVENTS.change, {\n      value: value\n    });\n  };\n\n  _proto._selectPlaceholderChoice = function _selectPlaceholderChoice() {\n    var placeholderChoice = this._store.placeholderChoice;\n\n    if (placeholderChoice) {\n      this._addItem({\n        value: placeholderChoice.value,\n        label: placeholderChoice.label,\n        choiceId: placeholderChoice.id,\n        groupId: placeholderChoice.groupId,\n        placeholder: placeholderChoice.placeholder\n      });\n\n      this._triggerChange(placeholderChoice.value);\n    }\n  };\n\n  _proto._handleButtonAction = function _handleButtonAction(activeItems, element) {\n    if (!activeItems || !element || !this.config.removeItems || !this.config.removeItemButton) {\n      return;\n    }\n\n    var itemId = element.parentNode.getAttribute('data-id');\n    var itemToRemove = activeItems.find(function (item) {\n      return item.id === parseInt(itemId, 10);\n    }); // Remove item associated with button\n\n    this._removeItem(itemToRemove);\n\n    this._triggerChange(itemToRemove.value);\n\n    if (this._isSelectOneElement) {\n      this._selectPlaceholderChoice();\n    }\n  };\n\n  _proto._handleItemAction = function _handleItemAction(activeItems, element, hasShiftKey) {\n    var _this16 = this;\n\n    if (hasShiftKey === void 0) {\n      hasShiftKey = false;\n    }\n\n    if (!activeItems || !element || !this.config.removeItems || this._isSelectOneElement) {\n      return;\n    }\n\n    var passedId = element.getAttribute('data-id'); // We only want to select one item with a click\n    // so we deselect any items that aren't the target\n    // unless shift is being pressed\n\n    activeItems.forEach(function (item) {\n      if (item.id === parseInt(passedId, 10) && !item.highlighted) {\n        _this16.highlightItem(item);\n      } else if (!hasShiftKey && item.highlighted) {\n        _this16.unhighlightItem(item);\n      }\n    }); // Focus input as without focus, a user cannot do anything with a\n    // highlighted item\n\n    this.input.focus();\n  };\n\n  _proto._handleChoiceAction = function _handleChoiceAction(activeItems, element) {\n    if (!activeItems || !element) {\n      return;\n    } // If we are clicking on an option\n\n\n    var id = element.dataset.id;\n\n    var choice = this._store.getChoiceById(id);\n\n    if (!choice) {\n      return;\n    }\n\n    var passedKeyCode = activeItems[0] && activeItems[0].keyCode ? activeItems[0].keyCode : null;\n    var hasActiveDropdown = this.dropdown.isActive; // Update choice keyCode\n\n    choice.keyCode = passedKeyCode;\n    this.passedElement.triggerEvent(EVENTS.choice, {\n      choice: choice\n    });\n\n    if (!choice.selected && !choice.disabled) {\n      var canAddItem = this._canAddItem(activeItems, choice.value);\n\n      if (canAddItem.response) {\n        this._addItem({\n          value: choice.value,\n          label: choice.label,\n          choiceId: choice.id,\n          groupId: choice.groupId,\n          customProperties: choice.customProperties,\n          placeholder: choice.placeholder,\n          keyCode: choice.keyCode\n        });\n\n        this._triggerChange(choice.value);\n      }\n    }\n\n    this.clearInput(); // We want to close the dropdown if we are dealing with a single select box\n\n    if (hasActiveDropdown && this._isSelectOneElement) {\n      this.hideDropdown(true);\n      this.containerOuter.focus();\n    }\n  };\n\n  _proto._handleBackspace = function _handleBackspace(activeItems) {\n    if (!this.config.removeItems || !activeItems) {\n      return;\n    }\n\n    var lastItem = activeItems[activeItems.length - 1];\n    var hasHighlightedItems = activeItems.some(function (item) {\n      return item.highlighted;\n    }); // If editing the last item is allowed and there are not other selected items,\n    // we can edit the item value. Otherwise if we can remove items, remove all selected items\n\n    if (this.config.editItems && !hasHighlightedItems && lastItem) {\n      this.input.value = lastItem.value;\n      this.input.setWidth();\n\n      this._removeItem(lastItem);\n\n      this._triggerChange(lastItem.value);\n    } else {\n      if (!hasHighlightedItems) {\n        // Highlight last item if none already highlighted\n        this.highlightItem(lastItem, false);\n      }\n\n      this.removeHighlightedItems(true);\n    }\n  };\n\n  _proto._startLoading = function _startLoading() {\n    this._store.dispatch(setIsLoading(true));\n  };\n\n  _proto._stopLoading = function _stopLoading() {\n    this._store.dispatch(setIsLoading(false));\n  };\n\n  _proto._handleLoadingState = function _handleLoadingState(setLoading) {\n    if (setLoading === void 0) {\n      setLoading = true;\n    }\n\n    var placeholderItem = this.itemList.getChild(\".\" + this.config.classNames.placeholder);\n\n    if (setLoading) {\n      this.disable();\n      this.containerOuter.addLoadingState();\n\n      if (this._isSelectOneElement) {\n        if (!placeholderItem) {\n          placeholderItem = this._getTemplate('placeholder', this.config.loadingText);\n          this.itemList.append(placeholderItem);\n        } else {\n          placeholderItem.innerHTML = this.config.loadingText;\n        }\n      } else {\n        this.input.placeholder = this.config.loadingText;\n      }\n    } else {\n      this.enable();\n      this.containerOuter.removeLoadingState();\n\n      if (this._isSelectOneElement) {\n        placeholderItem.innerHTML = this._placeholderValue || '';\n      } else {\n        this.input.placeholder = this._placeholderValue || '';\n      }\n    }\n  };\n\n  _proto._handleSearch = function _handleSearch(value) {\n    if (!value || !this.input.isFocussed) {\n      return;\n    }\n\n    var choices = this._store.choices;\n    var _this$config3 = this.config,\n        searchFloor = _this$config3.searchFloor,\n        searchChoices = _this$config3.searchChoices;\n    var hasUnactiveChoices = choices.some(function (option) {\n      return !option.active;\n    }); // Check that we have a value to search and the input was an alphanumeric character\n\n    if (value && value.length >= searchFloor) {\n      var resultCount = searchChoices ? this._searchChoices(value) : 0; // Trigger search event\n\n      this.passedElement.triggerEvent(EVENTS.search, {\n        value: value,\n        resultCount: resultCount\n      });\n    } else if (hasUnactiveChoices) {\n      // Otherwise reset choices to active\n      this._isSearching = false;\n\n      this._store.dispatch(choices_activateChoices(true));\n    }\n  };\n\n  _proto._canAddItem = function _canAddItem(activeItems, value) {\n    var canAddItem = true;\n    var notice = typeof this.config.addItemText === 'function' ? this.config.addItemText(value) : this.config.addItemText;\n\n    if (!this._isSelectOneElement) {\n      var isDuplicateValue = existsInArray(activeItems, value);\n\n      if (this.config.maxItemCount > 0 && this.config.maxItemCount <= activeItems.length) {\n        // If there is a max entry limit and we have reached that limit\n        // don't update\n        canAddItem = false;\n        notice = typeof this.config.maxItemText === 'function' ? this.config.maxItemText(this.config.maxItemCount) : this.config.maxItemText;\n      }\n\n      if (!this.config.duplicateItemsAllowed && isDuplicateValue && canAddItem) {\n        canAddItem = false;\n        notice = typeof this.config.uniqueItemText === 'function' ? this.config.uniqueItemText(value) : this.config.uniqueItemText;\n      }\n\n      if (this._isTextElement && this.config.addItems && canAddItem && typeof this.config.addItemFilter === 'function' && !this.config.addItemFilter(value)) {\n        canAddItem = false;\n        notice = typeof this.config.customAddItemText === 'function' ? this.config.customAddItemText(value) : this.config.customAddItemText;\n      }\n    }\n\n    return {\n      response: canAddItem,\n      notice: notice\n    };\n  };\n\n  _proto._searchChoices = function _searchChoices(value) {\n    var newValue = typeof value === 'string' ? value.trim() : value;\n    var currentValue = typeof this._currentValue === 'string' ? this._currentValue.trim() : this._currentValue;\n\n    if (newValue.length < 1 && newValue === currentValue + \" \") {\n      return 0;\n    } // If new value matches the desired length and is not the same as the current value with a space\n\n\n    var haystack = this._store.searchableChoices;\n    var needle = newValue;\n    var keys = [].concat(this.config.searchFields);\n    var options = Object.assign(this.config.fuseOptions, {\n      keys: keys\n    });\n    var fuse = new fuse_default.a(haystack, options);\n    var results = fuse.search(needle);\n    this._currentValue = newValue;\n    this._highlightPosition = 0;\n    this._isSearching = true;\n\n    this._store.dispatch(choices_filterChoices(results));\n\n    return results.length;\n  };\n\n  _proto._addEventListeners = function _addEventListeners() {\n    var _document = document,\n        documentElement = _document.documentElement; // capture events - can cancel event processing or propagation\n\n    documentElement.addEventListener('touchend', this._onTouchEnd, true);\n    this.containerOuter.element.addEventListener('keydown', this._onKeyDown, true);\n    this.containerOuter.element.addEventListener('mousedown', this._onMouseDown, true); // passive events - doesn't call `preventDefault` or `stopPropagation`\n\n    documentElement.addEventListener('click', this._onClick, {\n      passive: true\n    });\n    documentElement.addEventListener('touchmove', this._onTouchMove, {\n      passive: true\n    });\n    this.dropdown.element.addEventListener('mouseover', this._onMouseOver, {\n      passive: true\n    });\n\n    if (this._isSelectOneElement) {\n      this.containerOuter.element.addEventListener('focus', this._onFocus, {\n        passive: true\n      });\n      this.containerOuter.element.addEventListener('blur', this._onBlur, {\n        passive: true\n      });\n    }\n\n    this.input.element.addEventListener('keyup', this._onKeyUp, {\n      passive: true\n    });\n    this.input.element.addEventListener('focus', this._onFocus, {\n      passive: true\n    });\n    this.input.element.addEventListener('blur', this._onBlur, {\n      passive: true\n    });\n\n    if (this.input.element.form) {\n      this.input.element.form.addEventListener('reset', this._onFormReset, {\n        passive: true\n      });\n    }\n\n    this.input.addEventListeners();\n  };\n\n  _proto._removeEventListeners = function _removeEventListeners() {\n    var _document2 = document,\n        documentElement = _document2.documentElement;\n    documentElement.removeEventListener('touchend', this._onTouchEnd, true);\n    this.containerOuter.element.removeEventListener('keydown', this._onKeyDown, true);\n    this.containerOuter.element.removeEventListener('mousedown', this._onMouseDown, true);\n    documentElement.removeEventListener('click', this._onClick);\n    documentElement.removeEventListener('touchmove', this._onTouchMove);\n    this.dropdown.element.removeEventListener('mouseover', this._onMouseOver);\n\n    if (this._isSelectOneElement) {\n      this.containerOuter.element.removeEventListener('focus', this._onFocus);\n      this.containerOuter.element.removeEventListener('blur', this._onBlur);\n    }\n\n    this.input.element.removeEventListener('keyup', this._onKeyUp);\n    this.input.element.removeEventListener('focus', this._onFocus);\n    this.input.element.removeEventListener('blur', this._onBlur);\n\n    if (this.input.element.form) {\n      this.input.element.form.removeEventListener('reset', this._onFormReset);\n    }\n\n    this.input.removeEventListeners();\n  }\n  /**\n   * @param {KeyboardEvent} event\n   */\n  ;\n\n  _proto._onKeyDown = function _onKeyDown(event) {\n    var _keyDownActions;\n\n    var target = event.target,\n        keyCode = event.keyCode,\n        ctrlKey = event.ctrlKey,\n        metaKey = event.metaKey;\n    var activeItems = this._store.activeItems;\n    var hasFocusedInput = this.input.isFocussed;\n    var hasActiveDropdown = this.dropdown.isActive;\n    var hasItems = this.itemList.hasChildren();\n    var keyString = String.fromCharCode(keyCode);\n    var BACK_KEY = KEY_CODES.BACK_KEY,\n        DELETE_KEY = KEY_CODES.DELETE_KEY,\n        ENTER_KEY = KEY_CODES.ENTER_KEY,\n        A_KEY = KEY_CODES.A_KEY,\n        ESC_KEY = KEY_CODES.ESC_KEY,\n        UP_KEY = KEY_CODES.UP_KEY,\n        DOWN_KEY = KEY_CODES.DOWN_KEY,\n        PAGE_UP_KEY = KEY_CODES.PAGE_UP_KEY,\n        PAGE_DOWN_KEY = KEY_CODES.PAGE_DOWN_KEY;\n    var hasCtrlDownKeyPressed = ctrlKey || metaKey; // If a user is typing and the dropdown is not active\n\n    if (!this._isTextElement && /[a-zA-Z0-9-_ ]/.test(keyString)) {\n      this.showDropdown();\n    } // Map keys to key actions\n\n\n    var keyDownActions = (_keyDownActions = {}, _keyDownActions[A_KEY] = this._onAKey, _keyDownActions[ENTER_KEY] = this._onEnterKey, _keyDownActions[ESC_KEY] = this._onEscapeKey, _keyDownActions[UP_KEY] = this._onDirectionKey, _keyDownActions[PAGE_UP_KEY] = this._onDirectionKey, _keyDownActions[DOWN_KEY] = this._onDirectionKey, _keyDownActions[PAGE_DOWN_KEY] = this._onDirectionKey, _keyDownActions[DELETE_KEY] = this._onDeleteKey, _keyDownActions[BACK_KEY] = this._onDeleteKey, _keyDownActions); // If keycode has a function, run it\n\n    if (keyDownActions[keyCode]) {\n      keyDownActions[keyCode]({\n        event: event,\n        target: target,\n        keyCode: keyCode,\n        metaKey: metaKey,\n        activeItems: activeItems,\n        hasFocusedInput: hasFocusedInput,\n        hasActiveDropdown: hasActiveDropdown,\n        hasItems: hasItems,\n        hasCtrlDownKeyPressed: hasCtrlDownKeyPressed\n      });\n    }\n  };\n\n  _proto._onKeyUp = function _onKeyUp(_ref2) {\n    var target = _ref2.target,\n        keyCode = _ref2.keyCode;\n    var value = this.input.value;\n    var activeItems = this._store.activeItems;\n\n    var canAddItem = this._canAddItem(activeItems, value);\n\n    var backKey = KEY_CODES.BACK_KEY,\n        deleteKey = KEY_CODES.DELETE_KEY; // We are typing into a text input and have a value, we want to show a dropdown\n    // notice. Otherwise hide the dropdown\n\n    if (this._isTextElement) {\n      var canShowDropdownNotice = canAddItem.notice && value;\n\n      if (canShowDropdownNotice) {\n        var dropdownItem = this._getTemplate('notice', canAddItem.notice);\n\n        this.dropdown.element.innerHTML = dropdownItem.outerHTML;\n        this.showDropdown(true);\n      } else {\n        this.hideDropdown(true);\n      }\n    } else {\n      var userHasRemovedValue = (keyCode === backKey || keyCode === deleteKey) && !target.value;\n      var canReactivateChoices = !this._isTextElement && this._isSearching;\n      var canSearch = this._canSearch && canAddItem.response;\n\n      if (userHasRemovedValue && canReactivateChoices) {\n        this._isSearching = false;\n\n        this._store.dispatch(choices_activateChoices(true));\n      } else if (canSearch) {\n        this._handleSearch(this.input.value);\n      }\n    }\n\n    this._canSearch = this.config.searchEnabled;\n  };\n\n  _proto._onAKey = function _onAKey(_ref3) {\n    var hasItems = _ref3.hasItems,\n        hasCtrlDownKeyPressed = _ref3.hasCtrlDownKeyPressed;\n\n    // If CTRL + A or CMD + A have been pressed and there are items to select\n    if (hasCtrlDownKeyPressed && hasItems) {\n      this._canSearch = false;\n      var shouldHightlightAll = this.config.removeItems && !this.input.value && this.input.element === document.activeElement;\n\n      if (shouldHightlightAll) {\n        this.highlightAll();\n      }\n    }\n  };\n\n  _proto._onEnterKey = function _onEnterKey(_ref4) {\n    var event = _ref4.event,\n        target = _ref4.target,\n        activeItems = _ref4.activeItems,\n        hasActiveDropdown = _ref4.hasActiveDropdown;\n    var enterKey = KEY_CODES.ENTER_KEY;\n    var targetWasButton = target.hasAttribute('data-button');\n\n    if (this._isTextElement && target.value) {\n      var value = this.input.value;\n\n      var canAddItem = this._canAddItem(activeItems, value);\n\n      if (canAddItem.response) {\n        this.hideDropdown(true);\n\n        this._addItem({\n          value: value\n        });\n\n        this._triggerChange(value);\n\n        this.clearInput();\n      }\n    }\n\n    if (targetWasButton) {\n      this._handleButtonAction(activeItems, target);\n\n      event.preventDefault();\n    }\n\n    if (hasActiveDropdown) {\n      var highlightedChoice = this.dropdown.getChild(\".\" + this.config.classNames.highlightedState);\n\n      if (highlightedChoice) {\n        // add enter keyCode value\n        if (activeItems[0]) {\n          activeItems[0].keyCode = enterKey; // eslint-disable-line no-param-reassign\n        }\n\n        this._handleChoiceAction(activeItems, highlightedChoice);\n      }\n\n      event.preventDefault();\n    } else if (this._isSelectOneElement) {\n      this.showDropdown();\n      event.preventDefault();\n    }\n  };\n\n  _proto._onEscapeKey = function _onEscapeKey(_ref5) {\n    var hasActiveDropdown = _ref5.hasActiveDropdown;\n\n    if (hasActiveDropdown) {\n      this.hideDropdown(true);\n      this.containerOuter.focus();\n    }\n  };\n\n  _proto._onDirectionKey = function _onDirectionKey(_ref6) {\n    var event = _ref6.event,\n        hasActiveDropdown = _ref6.hasActiveDropdown,\n        keyCode = _ref6.keyCode,\n        metaKey = _ref6.metaKey;\n    var downKey = KEY_CODES.DOWN_KEY,\n        pageUpKey = KEY_CODES.PAGE_UP_KEY,\n        pageDownKey = KEY_CODES.PAGE_DOWN_KEY; // If up or down key is pressed, traverse through options\n\n    if (hasActiveDropdown || this._isSelectOneElement) {\n      this.showDropdown();\n      this._canSearch = false;\n      var directionInt = keyCode === downKey || keyCode === pageDownKey ? 1 : -1;\n      var skipKey = metaKey || keyCode === pageDownKey || keyCode === pageUpKey;\n      var selectableChoiceIdentifier = '[data-choice-selectable]';\n      var nextEl;\n\n      if (skipKey) {\n        if (directionInt > 0) {\n          nextEl = this.dropdown.element.querySelector(selectableChoiceIdentifier + \":last-of-type\");\n        } else {\n          nextEl = this.dropdown.element.querySelector(selectableChoiceIdentifier);\n        }\n      } else {\n        var currentEl = this.dropdown.element.querySelector(\".\" + this.config.classNames.highlightedState);\n\n        if (currentEl) {\n          nextEl = getAdjacentEl(currentEl, selectableChoiceIdentifier, directionInt);\n        } else {\n          nextEl = this.dropdown.element.querySelector(selectableChoiceIdentifier);\n        }\n      }\n\n      if (nextEl) {\n        // We prevent default to stop the cursor moving\n        // when pressing the arrow\n        if (!isScrolledIntoView(nextEl, this.choiceList.element, directionInt)) {\n          this.choiceList.scrollToChildElement(nextEl, directionInt);\n        }\n\n        this._highlightChoice(nextEl);\n      } // Prevent default to maintain cursor position whilst\n      // traversing dropdown options\n\n\n      event.preventDefault();\n    }\n  };\n\n  _proto._onDeleteKey = function _onDeleteKey(_ref7) {\n    var event = _ref7.event,\n        target = _ref7.target,\n        hasFocusedInput = _ref7.hasFocusedInput,\n        activeItems = _ref7.activeItems;\n\n    // If backspace or delete key is pressed and the input has no value\n    if (hasFocusedInput && !target.value && !this._isSelectOneElement) {\n      this._handleBackspace(activeItems);\n\n      event.preventDefault();\n    }\n  };\n\n  _proto._onTouchMove = function _onTouchMove() {\n    if (this._wasTap) {\n      this._wasTap = false;\n    }\n  };\n\n  _proto._onTouchEnd = function _onTouchEnd(event) {\n    var _ref8 = event || event.touches[0],\n        target = _ref8.target;\n\n    var touchWasWithinContainer = this._wasTap && this.containerOuter.element.contains(target);\n\n    if (touchWasWithinContainer) {\n      var containerWasExactTarget = target === this.containerOuter.element || target === this.containerInner.element;\n\n      if (containerWasExactTarget) {\n        if (this._isTextElement) {\n          this.input.focus();\n        } else if (this._isSelectMultipleElement) {\n          this.showDropdown();\n        }\n      } // Prevents focus event firing\n\n\n      event.stopPropagation();\n    }\n\n    this._wasTap = true;\n  }\n  /**\n   * Handles mousedown event in capture mode for containetOuter.element\n   * @param {MouseEvent} event\n   */\n  ;\n\n  _proto._onMouseDown = function _onMouseDown(event) {\n    var target = event.target;\n\n    if (!(target instanceof HTMLElement)) {\n      return;\n    } // If we have our mouse down on the scrollbar and are on IE11...\n\n\n    if (IS_IE11 && this.choiceList.element.contains(target)) {\n      // check if click was on a scrollbar area\n      var firstChoice =\n      /** @type {HTMLElement} */\n      this.choiceList.element.firstElementChild;\n      var isOnScrollbar = this._direction === 'ltr' ? event.offsetX >= firstChoice.offsetWidth : event.offsetX < firstChoice.offsetLeft;\n      this._isScrollingOnIe = isOnScrollbar;\n    }\n\n    if (target === this.input.element) {\n      return;\n    }\n\n    var item = target.closest('[data-button],[data-item],[data-choice]');\n\n    if (item instanceof HTMLElement) {\n      var hasShiftKey = event.shiftKey;\n      var activeItems = this._store.activeItems;\n      var dataset = item.dataset;\n\n      if ('button' in dataset) {\n        this._handleButtonAction(activeItems, item);\n      } else if ('item' in dataset) {\n        this._handleItemAction(activeItems, item, hasShiftKey);\n      } else if ('choice' in dataset) {\n        this._handleChoiceAction(activeItems, item);\n      }\n    }\n\n    event.preventDefault();\n  }\n  /**\n   * Handles mouseover event over this.dropdown\n   * @param {MouseEvent} event\n   */\n  ;\n\n  _proto._onMouseOver = function _onMouseOver(_ref9) {\n    var target = _ref9.target;\n\n    if (target instanceof HTMLElement && 'choice' in target.dataset) {\n      this._highlightChoice(target);\n    }\n  };\n\n  _proto._onClick = function _onClick(_ref10) {\n    var target = _ref10.target;\n    var clickWasWithinContainer = this.containerOuter.element.contains(target);\n\n    if (clickWasWithinContainer) {\n      if (!this.dropdown.isActive && !this.containerOuter.isDisabled) {\n        if (this._isTextElement) {\n          if (document.activeElement !== this.input.element) {\n            this.input.focus();\n          }\n        } else {\n          this.showDropdown();\n          this.containerOuter.focus();\n        }\n      } else if (this._isSelectOneElement && target !== this.input.element && !this.dropdown.element.contains(target)) {\n        this.hideDropdown();\n      }\n    } else {\n      var hasHighlightedItems = this._store.highlightedActiveItems.length > 0;\n\n      if (hasHighlightedItems) {\n        this.unhighlightAll();\n      }\n\n      this.containerOuter.removeFocusState();\n      this.hideDropdown(true);\n    }\n  };\n\n  _proto._onFocus = function _onFocus(_ref11) {\n    var _this17 = this,\n        _focusActions;\n\n    var target = _ref11.target;\n    var focusWasWithinContainer = this.containerOuter.element.contains(target);\n\n    if (!focusWasWithinContainer) {\n      return;\n    }\n\n    var focusActions = (_focusActions = {}, _focusActions[TEXT_TYPE] = function () {\n      if (target === _this17.input.element) {\n        _this17.containerOuter.addFocusState();\n      }\n    }, _focusActions[SELECT_ONE_TYPE] = function () {\n      _this17.containerOuter.addFocusState();\n\n      if (target === _this17.input.element) {\n        _this17.showDropdown(true);\n      }\n    }, _focusActions[SELECT_MULTIPLE_TYPE] = function () {\n      if (target === _this17.input.element) {\n        _this17.showDropdown(true); // If element is a select box, the focused element is the container and the dropdown\n        // isn't already open, focus and show dropdown\n\n\n        _this17.containerOuter.addFocusState();\n      }\n    }, _focusActions);\n    focusActions[this.passedElement.element.type]();\n  };\n\n  _proto._onBlur = function _onBlur(_ref12) {\n    var _this18 = this;\n\n    var target = _ref12.target;\n    var blurWasWithinContainer = this.containerOuter.element.contains(target);\n\n    if (blurWasWithinContainer && !this._isScrollingOnIe) {\n      var _blurActions;\n\n      var activeItems = this._store.activeItems;\n      var hasHighlightedItems = activeItems.some(function (item) {\n        return item.highlighted;\n      });\n      var blurActions = (_blurActions = {}, _blurActions[TEXT_TYPE] = function () {\n        if (target === _this18.input.element) {\n          _this18.containerOuter.removeFocusState();\n\n          if (hasHighlightedItems) {\n            _this18.unhighlightAll();\n          }\n\n          _this18.hideDropdown(true);\n        }\n      }, _blurActions[SELECT_ONE_TYPE] = function () {\n        _this18.containerOuter.removeFocusState();\n\n        if (target === _this18.input.element || target === _this18.containerOuter.element && !_this18._canSearch) {\n          _this18.hideDropdown(true);\n        }\n      }, _blurActions[SELECT_MULTIPLE_TYPE] = function () {\n        if (target === _this18.input.element) {\n          _this18.containerOuter.removeFocusState();\n\n          _this18.hideDropdown(true);\n\n          if (hasHighlightedItems) {\n            _this18.unhighlightAll();\n          }\n        }\n      }, _blurActions);\n      blurActions[this.passedElement.element.type]();\n    } else {\n      // On IE11, clicking the scollbar blurs our input and thus\n      // closes the dropdown. To stop this, we refocus our input\n      // if we know we are on IE *and* are scrolling.\n      this._isScrollingOnIe = false;\n      this.input.element.focus();\n    }\n  };\n\n  _proto._onFormReset = function _onFormReset() {\n    this._store.dispatch(resetTo(this._initialState));\n  };\n\n  _proto._highlightChoice = function _highlightChoice(el) {\n    var _this19 = this;\n\n    if (el === void 0) {\n      el = null;\n    }\n\n    var choices = Array.from(this.dropdown.element.querySelectorAll('[data-choice-selectable]'));\n\n    if (!choices.length) {\n      return;\n    }\n\n    var passedEl = el;\n    var highlightedChoices = Array.from(this.dropdown.element.querySelectorAll(\".\" + this.config.classNames.highlightedState)); // Remove any highlighted choices\n\n    highlightedChoices.forEach(function (choice) {\n      choice.classList.remove(_this19.config.classNames.highlightedState);\n      choice.setAttribute('aria-selected', 'false');\n    });\n\n    if (passedEl) {\n      this._highlightPosition = choices.indexOf(passedEl);\n    } else {\n      // Highlight choice based on last known highlight location\n      if (choices.length > this._highlightPosition) {\n        // If we have an option to highlight\n        passedEl = choices[this._highlightPosition];\n      } else {\n        // Otherwise highlight the option before\n        passedEl = choices[choices.length - 1];\n      }\n\n      if (!passedEl) {\n        passedEl = choices[0];\n      }\n    }\n\n    passedEl.classList.add(this.config.classNames.highlightedState);\n    passedEl.setAttribute('aria-selected', 'true');\n    this.passedElement.triggerEvent(EVENTS.highlightChoice, {\n      el: passedEl\n    });\n\n    if (this.dropdown.isActive) {\n      // IE11 ignores aria-label and blocks virtual keyboard\n      // if aria-activedescendant is set without a dropdown\n      this.input.setActiveDescendant(passedEl.id);\n      this.containerOuter.setActiveDescendant(passedEl.id);\n    }\n  };\n\n  _proto._addItem = function _addItem(_ref13) {\n    var value = _ref13.value,\n        _ref13$label = _ref13.label,\n        label = _ref13$label === void 0 ? null : _ref13$label,\n        _ref13$choiceId = _ref13.choiceId,\n        choiceId = _ref13$choiceId === void 0 ? -1 : _ref13$choiceId,\n        _ref13$groupId = _ref13.groupId,\n        groupId = _ref13$groupId === void 0 ? -1 : _ref13$groupId,\n        _ref13$customProperti = _ref13.customProperties,\n        customProperties = _ref13$customProperti === void 0 ? null : _ref13$customProperti,\n        _ref13$placeholder = _ref13.placeholder,\n        placeholder = _ref13$placeholder === void 0 ? false : _ref13$placeholder,\n        _ref13$keyCode = _ref13.keyCode,\n        keyCode = _ref13$keyCode === void 0 ? null : _ref13$keyCode;\n    var passedValue = typeof value === 'string' ? value.trim() : value;\n    var passedKeyCode = keyCode;\n    var passedCustomProperties = customProperties;\n    var items = this._store.items;\n    var passedLabel = label || passedValue;\n    var passedOptionId = choiceId || -1;\n    var group = groupId >= 0 ? this._store.getGroupById(groupId) : null;\n    var id = items ? items.length + 1 : 1; // If a prepended value has been passed, prepend it\n\n    if (this.config.prependValue) {\n      passedValue = this.config.prependValue + passedValue.toString();\n    } // If an appended value has been passed, append it\n\n\n    if (this.config.appendValue) {\n      passedValue += this.config.appendValue.toString();\n    }\n\n    this._store.dispatch(items_addItem({\n      value: passedValue,\n      label: passedLabel,\n      id: id,\n      choiceId: passedOptionId,\n      groupId: groupId,\n      customProperties: customProperties,\n      placeholder: placeholder,\n      keyCode: passedKeyCode\n    }));\n\n    if (this._isSelectOneElement) {\n      this.removeActiveItems(id);\n    } // Trigger change event\n\n\n    this.passedElement.triggerEvent(EVENTS.addItem, {\n      id: id,\n      value: passedValue,\n      label: passedLabel,\n      customProperties: passedCustomProperties,\n      groupValue: group && group.value ? group.value : undefined,\n      keyCode: passedKeyCode\n    });\n    return this;\n  };\n\n  _proto._removeItem = function _removeItem(item) {\n    if (!item || !isType('Object', item)) {\n      return this;\n    }\n\n    var id = item.id,\n        value = item.value,\n        label = item.label,\n        choiceId = item.choiceId,\n        groupId = item.groupId;\n    var group = groupId >= 0 ? this._store.getGroupById(groupId) : null;\n\n    this._store.dispatch(items_removeItem(id, choiceId));\n\n    if (group && group.value) {\n      this.passedElement.triggerEvent(EVENTS.removeItem, {\n        id: id,\n        value: value,\n        label: label,\n        groupValue: group.value\n      });\n    } else {\n      this.passedElement.triggerEvent(EVENTS.removeItem, {\n        id: id,\n        value: value,\n        label: label\n      });\n    }\n\n    return this;\n  };\n\n  _proto._addChoice = function _addChoice(_ref14) {\n    var value = _ref14.value,\n        _ref14$label = _ref14.label,\n        label = _ref14$label === void 0 ? null : _ref14$label,\n        _ref14$isSelected = _ref14.isSelected,\n        isSelected = _ref14$isSelected === void 0 ? false : _ref14$isSelected,\n        _ref14$isDisabled = _ref14.isDisabled,\n        isDisabled = _ref14$isDisabled === void 0 ? false : _ref14$isDisabled,\n        _ref14$groupId = _ref14.groupId,\n        groupId = _ref14$groupId === void 0 ? -1 : _ref14$groupId,\n        _ref14$customProperti = _ref14.customProperties,\n        customProperties = _ref14$customProperti === void 0 ? null : _ref14$customProperti,\n        _ref14$placeholder = _ref14.placeholder,\n        placeholder = _ref14$placeholder === void 0 ? false : _ref14$placeholder,\n        _ref14$keyCode = _ref14.keyCode,\n        keyCode = _ref14$keyCode === void 0 ? null : _ref14$keyCode;\n\n    if (typeof value === 'undefined' || value === null) {\n      return;\n    } // Generate unique id\n\n\n    var choices = this._store.choices;\n    var choiceLabel = label || value;\n    var choiceId = choices ? choices.length + 1 : 1;\n    var choiceElementId = this._baseId + \"-\" + this._idNames.itemChoice + \"-\" + choiceId;\n\n    this._store.dispatch(choices_addChoice({\n      id: choiceId,\n      groupId: groupId,\n      elementId: choiceElementId,\n      value: value,\n      label: choiceLabel,\n      disabled: isDisabled,\n      customProperties: customProperties,\n      placeholder: placeholder,\n      keyCode: keyCode\n    }));\n\n    if (isSelected) {\n      this._addItem({\n        value: value,\n        label: choiceLabel,\n        choiceId: choiceId,\n        customProperties: customProperties,\n        placeholder: placeholder,\n        keyCode: keyCode\n      });\n    }\n  };\n\n  _proto._addGroup = function _addGroup(_ref15) {\n    var _this20 = this;\n\n    var group = _ref15.group,\n        id = _ref15.id,\n        _ref15$valueKey = _ref15.valueKey,\n        valueKey = _ref15$valueKey === void 0 ? 'value' : _ref15$valueKey,\n        _ref15$labelKey = _ref15.labelKey,\n        labelKey = _ref15$labelKey === void 0 ? 'label' : _ref15$labelKey;\n    var groupChoices = isType('Object', group) ? group.choices : Array.from(group.getElementsByTagName('OPTION'));\n    var groupId = id || Math.floor(new Date().valueOf() * Math.random());\n    var isDisabled = group.disabled ? group.disabled : false;\n\n    if (groupChoices) {\n      this._store.dispatch(groups_addGroup({\n        value: group.label,\n        id: groupId,\n        active: true,\n        disabled: isDisabled\n      }));\n\n      var addGroupChoices = function addGroupChoices(choice) {\n        var isOptDisabled = choice.disabled || choice.parentNode && choice.parentNode.disabled;\n\n        _this20._addChoice({\n          value: choice[valueKey],\n          label: isType('Object', choice) ? choice[labelKey] : choice.innerHTML,\n          isSelected: choice.selected,\n          isDisabled: isOptDisabled,\n          groupId: groupId,\n          customProperties: choice.customProperties,\n          placeholder: choice.placeholder\n        });\n      };\n\n      groupChoices.forEach(addGroupChoices);\n    } else {\n      this._store.dispatch(groups_addGroup({\n        value: group.label,\n        id: group.id,\n        active: false,\n        disabled: group.disabled\n      }));\n    }\n  };\n\n  _proto._getTemplate = function _getTemplate(template) {\n    var _this$_templates$temp;\n\n    if (!template) {\n      return null;\n    }\n\n    var classNames = this.config.classNames;\n\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    return (_this$_templates$temp = this._templates[template]).call.apply(_this$_templates$temp, [this, classNames].concat(args));\n  };\n\n  _proto._createTemplates = function _createTemplates() {\n    var callbackOnCreateTemplates = this.config.callbackOnCreateTemplates;\n    var userTemplates = {};\n\n    if (callbackOnCreateTemplates && typeof callbackOnCreateTemplates === 'function') {\n      userTemplates = callbackOnCreateTemplates.call(this, strToEl);\n    }\n\n    this._templates = cjs_default()(TEMPLATES, userTemplates);\n  };\n\n  _proto._createElements = function _createElements() {\n    this.containerOuter = new container_Container({\n      element: this._getTemplate('containerOuter', this._direction, this._isSelectElement, this._isSelectOneElement, this.config.searchEnabled, this.passedElement.element.type),\n      classNames: this.config.classNames,\n      type: this.passedElement.element.type,\n      position: this.config.position\n    });\n    this.containerInner = new container_Container({\n      element: this._getTemplate('containerInner'),\n      classNames: this.config.classNames,\n      type: this.passedElement.element.type,\n      position: this.config.position\n    });\n    this.input = new input_Input({\n      element: this._getTemplate('input', this._placeholderValue),\n      classNames: this.config.classNames,\n      type: this.passedElement.element.type,\n      preventPaste: !this.config.paste\n    });\n    this.choiceList = new list_List({\n      element: this._getTemplate('choiceList', this._isSelectOneElement)\n    });\n    this.itemList = new list_List({\n      element: this._getTemplate('itemList', this._isSelectOneElement)\n    });\n    this.dropdown = new Dropdown({\n      element: this._getTemplate('dropdown'),\n      classNames: this.config.classNames,\n      type: this.passedElement.element.type\n    });\n  };\n\n  _proto._createStructure = function _createStructure() {\n    // Hide original element\n    this.passedElement.conceal(); // Wrap input in container preserving DOM ordering\n\n    this.containerInner.wrap(this.passedElement.element); // Wrapper inner container with outer container\n\n    this.containerOuter.wrap(this.containerInner.element);\n\n    if (this._isSelectOneElement) {\n      this.input.placeholder = this.config.searchPlaceholderValue || '';\n    } else if (this._placeholderValue) {\n      this.input.placeholder = this._placeholderValue;\n      this.input.setWidth();\n    }\n\n    this.containerOuter.element.appendChild(this.containerInner.element);\n    this.containerOuter.element.appendChild(this.dropdown.element);\n    this.containerInner.element.appendChild(this.itemList.element);\n\n    if (!this._isTextElement) {\n      this.dropdown.element.appendChild(this.choiceList.element);\n    }\n\n    if (!this._isSelectOneElement) {\n      this.containerInner.element.appendChild(this.input.element);\n    } else if (this.config.searchEnabled) {\n      this.dropdown.element.insertBefore(this.input.element, this.dropdown.element.firstChild);\n    }\n\n    if (this._isSelectElement) {\n      this._highlightPosition = 0;\n      this._isSearching = false;\n\n      this._startLoading();\n\n      if (this._presetGroups.length) {\n        this._addPredefinedGroups(this._presetGroups);\n      } else {\n        this._addPredefinedChoices(this._presetChoices);\n      }\n\n      this._stopLoading();\n    }\n\n    if (this._isTextElement) {\n      this._addPredefinedItems(this._presetItems);\n    }\n  };\n\n  _proto._addPredefinedGroups = function _addPredefinedGroups(groups) {\n    var _this21 = this;\n\n    // If we have a placeholder option\n    var placeholderChoice = this.passedElement.placeholderOption;\n\n    if (placeholderChoice && placeholderChoice.parentNode.tagName === 'SELECT') {\n      this._addChoice({\n        value: placeholderChoice.value,\n        label: placeholderChoice.innerHTML,\n        isSelected: placeholderChoice.selected,\n        isDisabled: placeholderChoice.disabled,\n        placeholder: true\n      });\n    }\n\n    groups.forEach(function (group) {\n      return _this21._addGroup({\n        group: group,\n        id: group.id || null\n      });\n    });\n  };\n\n  _proto._addPredefinedChoices = function _addPredefinedChoices(choices) {\n    var _this22 = this;\n\n    // If sorting is enabled or the user is searching, filter choices\n    if (this.config.shouldSort) {\n      choices.sort(this.config.sorter);\n    }\n\n    var hasSelectedChoice = choices.some(function (choice) {\n      return choice.selected;\n    });\n    var firstEnabledChoiceIndex = choices.findIndex(function (choice) {\n      return choice.disabled === undefined || !choice.disabled;\n    });\n    choices.forEach(function (choice, index) {\n      var value = choice.value,\n          label = choice.label,\n          customProperties = choice.customProperties,\n          placeholder = choice.placeholder;\n\n      if (_this22._isSelectElement) {\n        // If the choice is actually a group\n        if (choice.choices) {\n          _this22._addGroup({\n            group: choice,\n            id: choice.id || null\n          });\n        } else {\n          /**\n           * If there is a selected choice already or the choice is not the first in\n           * the array, add each choice normally.\n           *\n           * Otherwise we pre-select the first enabled choice in the array (\"select-one\" only)\n           */\n          var shouldPreselect = _this22._isSelectOneElement && !hasSelectedChoice && index === firstEnabledChoiceIndex;\n          var isSelected = shouldPreselect ? true : choice.selected;\n          var isDisabled = choice.disabled;\n\n          _this22._addChoice({\n            value: value,\n            label: label,\n            isSelected: isSelected,\n            isDisabled: isDisabled,\n            customProperties: customProperties,\n            placeholder: placeholder\n          });\n        }\n      } else {\n        _this22._addChoice({\n          value: value,\n          label: label,\n          isSelected: choice.selected,\n          isDisabled: choice.disabled,\n          customProperties: customProperties,\n          placeholder: placeholder\n        });\n      }\n    });\n  }\n  /**\n   * @param {Item[]} items\n   */\n  ;\n\n  _proto._addPredefinedItems = function _addPredefinedItems(items) {\n    var _this23 = this;\n\n    items.forEach(function (item) {\n      if (typeof item === 'object' && item.value) {\n        _this23._addItem({\n          value: item.value,\n          label: item.label,\n          choiceId: item.id,\n          customProperties: item.customProperties,\n          placeholder: item.placeholder\n        });\n      }\n\n      if (typeof item === 'string') {\n        _this23._addItem({\n          value: item\n        });\n      }\n    });\n  };\n\n  _proto._setChoiceOrItem = function _setChoiceOrItem(item) {\n    var _this24 = this;\n\n    var itemType = getType(item).toLowerCase();\n    var handleType = {\n      object: function object() {\n        if (!item.value) {\n          return;\n        } // If we are dealing with a select input, we need to create an option first\n        // that is then selected. For text inputs we can just add items normally.\n\n\n        if (!_this24._isTextElement) {\n          _this24._addChoice({\n            value: item.value,\n            label: item.label,\n            isSelected: true,\n            isDisabled: false,\n            customProperties: item.customProperties,\n            placeholder: item.placeholder\n          });\n        } else {\n          _this24._addItem({\n            value: item.value,\n            label: item.label,\n            choiceId: item.id,\n            customProperties: item.customProperties,\n            placeholder: item.placeholder\n          });\n        }\n      },\n      string: function string() {\n        if (!_this24._isTextElement) {\n          _this24._addChoice({\n            value: item,\n            label: item,\n            isSelected: true,\n            isDisabled: false\n          });\n        } else {\n          _this24._addItem({\n            value: item\n          });\n        }\n      }\n    };\n    handleType[itemType]();\n  };\n\n  _proto._findAndSelectChoiceByValue = function _findAndSelectChoiceByValue(val) {\n    var _this25 = this;\n\n    var choices = this._store.choices; // Check 'value' property exists and the choice isn't already selected\n\n    var foundChoice = choices.find(function (choice) {\n      return _this25.config.valueComparer(choice.value, val);\n    });\n\n    if (foundChoice && !foundChoice.selected) {\n      this._addItem({\n        value: foundChoice.value,\n        label: foundChoice.label,\n        choiceId: foundChoice.id,\n        groupId: foundChoice.groupId,\n        customProperties: foundChoice.customProperties,\n        placeholder: foundChoice.placeholder,\n        keyCode: foundChoice.keyCode\n      });\n    }\n  };\n\n  _proto._generatePlaceholderValue = function _generatePlaceholderValue() {\n    if (this._isSelectElement) {\n      var placeholderOption = this.passedElement.placeholderOption;\n      return placeholderOption ? placeholderOption.text : false;\n    }\n\n    var _this$config4 = this.config,\n        placeholder = _this$config4.placeholder,\n        placeholderValue = _this$config4.placeholderValue;\n    var dataset = this.passedElement.element.dataset;\n\n    if (placeholder) {\n      if (placeholderValue) {\n        return placeholderValue;\n      }\n\n      if (dataset.placeholder) {\n        return dataset.placeholder;\n      }\n    }\n\n    return false;\n  };\n\n  return Choices;\n}();\n\n/* harmony default export */ var scripts_choices = __webpack_exports__[\"default\"] = (choices_Choices);\n\n/***/ })\n/******/ ])[\"default\"];\n});","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, function() {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 3099:\n/***/ (function(module) {\n\nmodule.exports = function (it) {\n  if (typeof it != 'function') {\n    throw TypeError(String(it) + ' is not a function');\n  } return it;\n};\n\n\n/***/ }),\n\n/***/ 6077:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(111);\n\nmodule.exports = function (it) {\n  if (!isObject(it) && it !== null) {\n    throw TypeError(\"Can't set \" + String(it) + ' as a prototype');\n  } return it;\n};\n\n\n/***/ }),\n\n/***/ 1223:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar wellKnownSymbol = __webpack_require__(5112);\nvar create = __webpack_require__(30);\nvar definePropertyModule = __webpack_require__(3070);\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] == undefined) {\n  definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {\n    configurable: true,\n    value: create(null)\n  });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n  ArrayPrototype[UNSCOPABLES][key] = true;\n};\n\n\n/***/ }),\n\n/***/ 1530:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar charAt = __webpack_require__(8710).charAt;\n\n// `AdvanceStringIndex` abstract operation\n// https://tc39.es/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n  return index + (unicode ? charAt(S, index).length : 1);\n};\n\n\n/***/ }),\n\n/***/ 5787:\n/***/ (function(module) {\n\nmodule.exports = function (it, Constructor, name) {\n  if (!(it instanceof Constructor)) {\n    throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation');\n  } return it;\n};\n\n\n/***/ }),\n\n/***/ 9670:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(111);\n\nmodule.exports = function (it) {\n  if (!isObject(it)) {\n    throw TypeError(String(it) + ' is not an object');\n  } return it;\n};\n\n\n/***/ }),\n\n/***/ 4019:\n/***/ (function(module) {\n\nmodule.exports = typeof ArrayBuffer !== 'undefined' && typeof DataView !== 'undefined';\n\n\n/***/ }),\n\n/***/ 260:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar NATIVE_ARRAY_BUFFER = __webpack_require__(4019);\nvar DESCRIPTORS = __webpack_require__(9781);\nvar global = __webpack_require__(7854);\nvar isObject = __webpack_require__(111);\nvar has = __webpack_require__(6656);\nvar classof = __webpack_require__(648);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar redefine = __webpack_require__(1320);\nvar defineProperty = __webpack_require__(3070).f;\nvar getPrototypeOf = __webpack_require__(9518);\nvar setPrototypeOf = __webpack_require__(7674);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar uid = __webpack_require__(9711);\n\nvar Int8Array = global.Int8Array;\nvar Int8ArrayPrototype = Int8Array && Int8Array.prototype;\nvar Uint8ClampedArray = global.Uint8ClampedArray;\nvar Uint8ClampedArrayPrototype = Uint8ClampedArray && Uint8ClampedArray.prototype;\nvar TypedArray = Int8Array && getPrototypeOf(Int8Array);\nvar TypedArrayPrototype = Int8ArrayPrototype && getPrototypeOf(Int8ArrayPrototype);\nvar ObjectPrototype = Object.prototype;\nvar isPrototypeOf = ObjectPrototype.isPrototypeOf;\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar TYPED_ARRAY_TAG = uid('TYPED_ARRAY_TAG');\n// Fixing native typed arrays in Opera Presto crashes the browser, see #595\nvar NATIVE_ARRAY_BUFFER_VIEWS = NATIVE_ARRAY_BUFFER && !!setPrototypeOf && classof(global.opera) !== 'Opera';\nvar TYPED_ARRAY_TAG_REQIRED = false;\nvar NAME;\n\nvar TypedArrayConstructorsList = {\n  Int8Array: 1,\n  Uint8Array: 1,\n  Uint8ClampedArray: 1,\n  Int16Array: 2,\n  Uint16Array: 2,\n  Int32Array: 4,\n  Uint32Array: 4,\n  Float32Array: 4,\n  Float64Array: 8\n};\n\nvar BigIntArrayConstructorsList = {\n  BigInt64Array: 8,\n  BigUint64Array: 8\n};\n\nvar isView = function isView(it) {\n  if (!isObject(it)) return false;\n  var klass = classof(it);\n  return klass === 'DataView'\n    || has(TypedArrayConstructorsList, klass)\n    || has(BigIntArrayConstructorsList, klass);\n};\n\nvar isTypedArray = function (it) {\n  if (!isObject(it)) return false;\n  var klass = classof(it);\n  return has(TypedArrayConstructorsList, klass)\n    || has(BigIntArrayConstructorsList, klass);\n};\n\nvar aTypedArray = function (it) {\n  if (isTypedArray(it)) return it;\n  throw TypeError('Target is not a typed array');\n};\n\nvar aTypedArrayConstructor = function (C) {\n  if (setPrototypeOf) {\n    if (isPrototypeOf.call(TypedArray, C)) return C;\n  } else for (var ARRAY in TypedArrayConstructorsList) if (has(TypedArrayConstructorsList, NAME)) {\n    var TypedArrayConstructor = global[ARRAY];\n    if (TypedArrayConstructor && (C === TypedArrayConstructor || isPrototypeOf.call(TypedArrayConstructor, C))) {\n      return C;\n    }\n  } throw TypeError('Target is not a typed array constructor');\n};\n\nvar exportTypedArrayMethod = function (KEY, property, forced) {\n  if (!DESCRIPTORS) return;\n  if (forced) for (var ARRAY in TypedArrayConstructorsList) {\n    var TypedArrayConstructor = global[ARRAY];\n    if (TypedArrayConstructor && has(TypedArrayConstructor.prototype, KEY)) {\n      delete TypedArrayConstructor.prototype[KEY];\n    }\n  }\n  if (!TypedArrayPrototype[KEY] || forced) {\n    redefine(TypedArrayPrototype, KEY, forced ? property\n      : NATIVE_ARRAY_BUFFER_VIEWS && Int8ArrayPrototype[KEY] || property);\n  }\n};\n\nvar exportTypedArrayStaticMethod = function (KEY, property, forced) {\n  var ARRAY, TypedArrayConstructor;\n  if (!DESCRIPTORS) return;\n  if (setPrototypeOf) {\n    if (forced) for (ARRAY in TypedArrayConstructorsList) {\n      TypedArrayConstructor = global[ARRAY];\n      if (TypedArrayConstructor && has(TypedArrayConstructor, KEY)) {\n        delete TypedArrayConstructor[KEY];\n      }\n    }\n    if (!TypedArray[KEY] || forced) {\n      // V8 ~ Chrome 49-50 `%TypedArray%` methods are non-writable non-configurable\n      try {\n        return redefine(TypedArray, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS && Int8Array[KEY] || property);\n      } catch (error) { /* empty */ }\n    } else return;\n  }\n  for (ARRAY in TypedArrayConstructorsList) {\n    TypedArrayConstructor = global[ARRAY];\n    if (TypedArrayConstructor && (!TypedArrayConstructor[KEY] || forced)) {\n      redefine(TypedArrayConstructor, KEY, property);\n    }\n  }\n};\n\nfor (NAME in TypedArrayConstructorsList) {\n  if (!global[NAME]) NATIVE_ARRAY_BUFFER_VIEWS = false;\n}\n\n// WebKit bug - typed arrays constructors prototype is Object.prototype\nif (!NATIVE_ARRAY_BUFFER_VIEWS || typeof TypedArray != 'function' || TypedArray === Function.prototype) {\n  // eslint-disable-next-line no-shadow -- safe\n  TypedArray = function TypedArray() {\n    throw TypeError('Incorrect invocation');\n  };\n  if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n    if (global[NAME]) setPrototypeOf(global[NAME], TypedArray);\n  }\n}\n\nif (!NATIVE_ARRAY_BUFFER_VIEWS || !TypedArrayPrototype || TypedArrayPrototype === ObjectPrototype) {\n  TypedArrayPrototype = TypedArray.prototype;\n  if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n    if (global[NAME]) setPrototypeOf(global[NAME].prototype, TypedArrayPrototype);\n  }\n}\n\n// WebKit bug - one more object in Uint8ClampedArray prototype chain\nif (NATIVE_ARRAY_BUFFER_VIEWS && getPrototypeOf(Uint8ClampedArrayPrototype) !== TypedArrayPrototype) {\n  setPrototypeOf(Uint8ClampedArrayPrototype, TypedArrayPrototype);\n}\n\nif (DESCRIPTORS && !has(TypedArrayPrototype, TO_STRING_TAG)) {\n  TYPED_ARRAY_TAG_REQIRED = true;\n  defineProperty(TypedArrayPrototype, TO_STRING_TAG, { get: function () {\n    return isObject(this) ? this[TYPED_ARRAY_TAG] : undefined;\n  } });\n  for (NAME in TypedArrayConstructorsList) if (global[NAME]) {\n    createNonEnumerableProperty(global[NAME], TYPED_ARRAY_TAG, NAME);\n  }\n}\n\nmodule.exports = {\n  NATIVE_ARRAY_BUFFER_VIEWS: NATIVE_ARRAY_BUFFER_VIEWS,\n  TYPED_ARRAY_TAG: TYPED_ARRAY_TAG_REQIRED && TYPED_ARRAY_TAG,\n  aTypedArray: aTypedArray,\n  aTypedArrayConstructor: aTypedArrayConstructor,\n  exportTypedArrayMethod: exportTypedArrayMethod,\n  exportTypedArrayStaticMethod: exportTypedArrayStaticMethod,\n  isView: isView,\n  isTypedArray: isTypedArray,\n  TypedArray: TypedArray,\n  TypedArrayPrototype: TypedArrayPrototype\n};\n\n\n/***/ }),\n\n/***/ 3331:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar global = __webpack_require__(7854);\nvar DESCRIPTORS = __webpack_require__(9781);\nvar NATIVE_ARRAY_BUFFER = __webpack_require__(4019);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar redefineAll = __webpack_require__(2248);\nvar fails = __webpack_require__(7293);\nvar anInstance = __webpack_require__(5787);\nvar toInteger = __webpack_require__(9958);\nvar toLength = __webpack_require__(7466);\nvar toIndex = __webpack_require__(7067);\nvar IEEE754 = __webpack_require__(1179);\nvar getPrototypeOf = __webpack_require__(9518);\nvar setPrototypeOf = __webpack_require__(7674);\nvar getOwnPropertyNames = __webpack_require__(8006).f;\nvar defineProperty = __webpack_require__(3070).f;\nvar arrayFill = __webpack_require__(1285);\nvar setToStringTag = __webpack_require__(8003);\nvar InternalStateModule = __webpack_require__(9909);\n\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length';\nvar WRONG_INDEX = 'Wrong index';\nvar NativeArrayBuffer = global[ARRAY_BUFFER];\nvar $ArrayBuffer = NativeArrayBuffer;\nvar $DataView = global[DATA_VIEW];\nvar $DataViewPrototype = $DataView && $DataView[PROTOTYPE];\nvar ObjectPrototype = Object.prototype;\nvar RangeError = global.RangeError;\n\nvar packIEEE754 = IEEE754.pack;\nvar unpackIEEE754 = IEEE754.unpack;\n\nvar packInt8 = function (number) {\n  return [number & 0xFF];\n};\n\nvar packInt16 = function (number) {\n  return [number & 0xFF, number >> 8 & 0xFF];\n};\n\nvar packInt32 = function (number) {\n  return [number & 0xFF, number >> 8 & 0xFF, number >> 16 & 0xFF, number >> 24 & 0xFF];\n};\n\nvar unpackInt32 = function (buffer) {\n  return buffer[3] << 24 | buffer[2] << 16 | buffer[1] << 8 | buffer[0];\n};\n\nvar packFloat32 = function (number) {\n  return packIEEE754(number, 23, 4);\n};\n\nvar packFloat64 = function (number) {\n  return packIEEE754(number, 52, 8);\n};\n\nvar addGetter = function (Constructor, key) {\n  defineProperty(Constructor[PROTOTYPE], key, { get: function () { return getInternalState(this)[key]; } });\n};\n\nvar get = function (view, count, index, isLittleEndian) {\n  var intIndex = toIndex(index);\n  var store = getInternalState(view);\n  if (intIndex + count > store.byteLength) throw RangeError(WRONG_INDEX);\n  var bytes = getInternalState(store.buffer).bytes;\n  var start = intIndex + store.byteOffset;\n  var pack = bytes.slice(start, start + count);\n  return isLittleEndian ? pack : pack.reverse();\n};\n\nvar set = function (view, count, index, conversion, value, isLittleEndian) {\n  var intIndex = toIndex(index);\n  var store = getInternalState(view);\n  if (intIndex + count > store.byteLength) throw RangeError(WRONG_INDEX);\n  var bytes = getInternalState(store.buffer).bytes;\n  var start = intIndex + store.byteOffset;\n  var pack = conversion(+value);\n  for (var i = 0; i < count; i++) bytes[start + i] = pack[isLittleEndian ? i : count - i - 1];\n};\n\nif (!NATIVE_ARRAY_BUFFER) {\n  $ArrayBuffer = function ArrayBuffer(length) {\n    anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n    var byteLength = toIndex(length);\n    setInternalState(this, {\n      bytes: arrayFill.call(new Array(byteLength), 0),\n      byteLength: byteLength\n    });\n    if (!DESCRIPTORS) this.byteLength = byteLength;\n  };\n\n  $DataView = function DataView(buffer, byteOffset, byteLength) {\n    anInstance(this, $DataView, DATA_VIEW);\n    anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n    var bufferLength = getInternalState(buffer).byteLength;\n    var offset = toInteger(byteOffset);\n    if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset');\n    byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n    if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n    setInternalState(this, {\n      buffer: buffer,\n      byteLength: byteLength,\n      byteOffset: offset\n    });\n    if (!DESCRIPTORS) {\n      this.buffer = buffer;\n      this.byteLength = byteLength;\n      this.byteOffset = offset;\n    }\n  };\n\n  if (DESCRIPTORS) {\n    addGetter($ArrayBuffer, 'byteLength');\n    addGetter($DataView, 'buffer');\n    addGetter($DataView, 'byteLength');\n    addGetter($DataView, 'byteOffset');\n  }\n\n  redefineAll($DataView[PROTOTYPE], {\n    getInt8: function getInt8(byteOffset) {\n      return get(this, 1, byteOffset)[0] << 24 >> 24;\n    },\n    getUint8: function getUint8(byteOffset) {\n      return get(this, 1, byteOffset)[0];\n    },\n    getInt16: function getInt16(byteOffset /* , littleEndian */) {\n      var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : undefined);\n      return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n    },\n    getUint16: function getUint16(byteOffset /* , littleEndian */) {\n      var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : undefined);\n      return bytes[1] << 8 | bytes[0];\n    },\n    getInt32: function getInt32(byteOffset /* , littleEndian */) {\n      return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined));\n    },\n    getUint32: function getUint32(byteOffset /* , littleEndian */) {\n      return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined)) >>> 0;\n    },\n    getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n      return unpackIEEE754(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined), 23);\n    },\n    getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n      return unpackIEEE754(get(this, 8, byteOffset, arguments.length > 1 ? arguments[1] : undefined), 52);\n    },\n    setInt8: function setInt8(byteOffset, value) {\n      set(this, 1, byteOffset, packInt8, value);\n    },\n    setUint8: function setUint8(byteOffset, value) {\n      set(this, 1, byteOffset, packInt8, value);\n    },\n    setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n      set(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : undefined);\n    },\n    setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n      set(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : undefined);\n    },\n    setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n      set(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : undefined);\n    },\n    setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n      set(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : undefined);\n    },\n    setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n      set(this, 4, byteOffset, packFloat32, value, arguments.length > 2 ? arguments[2] : undefined);\n    },\n    setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n      set(this, 8, byteOffset, packFloat64, value, arguments.length > 2 ? arguments[2] : undefined);\n    }\n  });\n} else {\n  /* eslint-disable no-new -- required for testing */\n  if (!fails(function () {\n    NativeArrayBuffer(1);\n  }) || !fails(function () {\n    new NativeArrayBuffer(-1);\n  }) || fails(function () {\n    new NativeArrayBuffer();\n    new NativeArrayBuffer(1.5);\n    new NativeArrayBuffer(NaN);\n    return NativeArrayBuffer.name != ARRAY_BUFFER;\n  })) {\n  /* eslint-enable no-new -- required for testing */\n    $ArrayBuffer = function ArrayBuffer(length) {\n      anInstance(this, $ArrayBuffer);\n      return new NativeArrayBuffer(toIndex(length));\n    };\n    var ArrayBufferPrototype = $ArrayBuffer[PROTOTYPE] = NativeArrayBuffer[PROTOTYPE];\n    for (var keys = getOwnPropertyNames(NativeArrayBuffer), j = 0, key; keys.length > j;) {\n      if (!((key = keys[j++]) in $ArrayBuffer)) {\n        createNonEnumerableProperty($ArrayBuffer, key, NativeArrayBuffer[key]);\n      }\n    }\n    ArrayBufferPrototype.constructor = $ArrayBuffer;\n  }\n\n  // WebKit bug - the same parent prototype for typed arrays and data view\n  if (setPrototypeOf && getPrototypeOf($DataViewPrototype) !== ObjectPrototype) {\n    setPrototypeOf($DataViewPrototype, ObjectPrototype);\n  }\n\n  // iOS Safari 7.x bug\n  var testView = new $DataView(new $ArrayBuffer(2));\n  var nativeSetInt8 = $DataViewPrototype.setInt8;\n  testView.setInt8(0, 2147483648);\n  testView.setInt8(1, 2147483649);\n  if (testView.getInt8(0) || !testView.getInt8(1)) redefineAll($DataViewPrototype, {\n    setInt8: function setInt8(byteOffset, value) {\n      nativeSetInt8.call(this, byteOffset, value << 24 >> 24);\n    },\n    setUint8: function setUint8(byteOffset, value) {\n      nativeSetInt8.call(this, byteOffset, value << 24 >> 24);\n    }\n  }, { unsafe: true });\n}\n\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\n\nmodule.exports = {\n  ArrayBuffer: $ArrayBuffer,\n  DataView: $DataView\n};\n\n\n/***/ }),\n\n/***/ 1048:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar toObject = __webpack_require__(7908);\nvar toAbsoluteIndex = __webpack_require__(1400);\nvar toLength = __webpack_require__(7466);\n\nvar min = Math.min;\n\n// `Array.prototype.copyWithin` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.copywithin\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n  var O = toObject(this);\n  var len = toLength(O.length);\n  var to = toAbsoluteIndex(target, len);\n  var from = toAbsoluteIndex(start, len);\n  var end = arguments.length > 2 ? arguments[2] : undefined;\n  var count = min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n  var inc = 1;\n  if (from < to && to < from + count) {\n    inc = -1;\n    from += count - 1;\n    to += count - 1;\n  }\n  while (count-- > 0) {\n    if (from in O) O[to] = O[from];\n    else delete O[to];\n    to += inc;\n    from += inc;\n  } return O;\n};\n\n\n/***/ }),\n\n/***/ 1285:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar toObject = __webpack_require__(7908);\nvar toAbsoluteIndex = __webpack_require__(1400);\nvar toLength = __webpack_require__(7466);\n\n// `Array.prototype.fill` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.fill\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n  var O = toObject(this);\n  var length = toLength(O.length);\n  var argumentsLength = arguments.length;\n  var index = toAbsoluteIndex(argumentsLength > 1 ? arguments[1] : undefined, length);\n  var end = argumentsLength > 2 ? arguments[2] : undefined;\n  var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n  while (endPos > index) O[index++] = value;\n  return O;\n};\n\n\n/***/ }),\n\n/***/ 8533:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $forEach = __webpack_require__(2092).forEach;\nvar arrayMethodIsStrict = __webpack_require__(9341);\n\nvar STRICT_METHOD = arrayMethodIsStrict('forEach');\n\n// `Array.prototype.forEach` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.foreach\nmodule.exports = !STRICT_METHOD ? function forEach(callbackfn /* , thisArg */) {\n  return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n} : [].forEach;\n\n\n/***/ }),\n\n/***/ 8457:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar bind = __webpack_require__(9974);\nvar toObject = __webpack_require__(7908);\nvar callWithSafeIterationClosing = __webpack_require__(3411);\nvar isArrayIteratorMethod = __webpack_require__(7659);\nvar toLength = __webpack_require__(7466);\nvar createProperty = __webpack_require__(6135);\nvar getIteratorMethod = __webpack_require__(1246);\n\n// `Array.from` method implementation\n// https://tc39.es/ecma262/#sec-array.from\nmodule.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n  var O = toObject(arrayLike);\n  var C = typeof this == 'function' ? this : Array;\n  var argumentsLength = arguments.length;\n  var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n  var mapping = mapfn !== undefined;\n  var iteratorMethod = getIteratorMethod(O);\n  var index = 0;\n  var length, result, step, iterator, next, value;\n  if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined, 2);\n  // if the target is not iterable or it's an array with the default iterator - use a simple case\n  if (iteratorMethod != undefined && !(C == Array && isArrayIteratorMethod(iteratorMethod))) {\n    iterator = iteratorMethod.call(O);\n    next = iterator.next;\n    result = new C();\n    for (;!(step = next.call(iterator)).done; index++) {\n      value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;\n      createProperty(result, index, value);\n    }\n  } else {\n    length = toLength(O.length);\n    result = new C(length);\n    for (;length > index; index++) {\n      value = mapping ? mapfn(O[index], index) : O[index];\n      createProperty(result, index, value);\n    }\n  }\n  result.length = index;\n  return result;\n};\n\n\n/***/ }),\n\n/***/ 1318:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toIndexedObject = __webpack_require__(5656);\nvar toLength = __webpack_require__(7466);\nvar toAbsoluteIndex = __webpack_require__(1400);\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIndexedObject($this);\n    var length = toLength(O.length);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare -- NaN check\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare -- NaN check\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) {\n      if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n\nmodule.exports = {\n  // `Array.prototype.includes` method\n  // https://tc39.es/ecma262/#sec-array.prototype.includes\n  includes: createMethod(true),\n  // `Array.prototype.indexOf` method\n  // https://tc39.es/ecma262/#sec-array.prototype.indexof\n  indexOf: createMethod(false)\n};\n\n\n/***/ }),\n\n/***/ 2092:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar bind = __webpack_require__(9974);\nvar IndexedObject = __webpack_require__(8361);\nvar toObject = __webpack_require__(7908);\nvar toLength = __webpack_require__(7466);\nvar arraySpeciesCreate = __webpack_require__(5417);\n\nvar push = [].push;\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterOut }` methods implementation\nvar createMethod = function (TYPE) {\n  var IS_MAP = TYPE == 1;\n  var IS_FILTER = TYPE == 2;\n  var IS_SOME = TYPE == 3;\n  var IS_EVERY = TYPE == 4;\n  var IS_FIND_INDEX = TYPE == 6;\n  var IS_FILTER_OUT = TYPE == 7;\n  var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n  return function ($this, callbackfn, that, specificCreate) {\n    var O = toObject($this);\n    var self = IndexedObject(O);\n    var boundFunction = bind(callbackfn, that, 3);\n    var length = toLength(self.length);\n    var index = 0;\n    var create = specificCreate || arraySpeciesCreate;\n    var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_OUT ? create($this, 0) : undefined;\n    var value, result;\n    for (;length > index; index++) if (NO_HOLES || index in self) {\n      value = self[index];\n      result = boundFunction(value, index, O);\n      if (TYPE) {\n        if (IS_MAP) target[index] = result; // map\n        else if (result) switch (TYPE) {\n          case 3: return true;              // some\n          case 5: return value;             // find\n          case 6: return index;             // findIndex\n          case 2: push.call(target, value); // filter\n        } else switch (TYPE) {\n          case 4: return false;             // every\n          case 7: push.call(target, value); // filterOut\n        }\n      }\n    }\n    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n  };\n};\n\nmodule.exports = {\n  // `Array.prototype.forEach` method\n  // https://tc39.es/ecma262/#sec-array.prototype.foreach\n  forEach: createMethod(0),\n  // `Array.prototype.map` method\n  // https://tc39.es/ecma262/#sec-array.prototype.map\n  map: createMethod(1),\n  // `Array.prototype.filter` method\n  // https://tc39.es/ecma262/#sec-array.prototype.filter\n  filter: createMethod(2),\n  // `Array.prototype.some` method\n  // https://tc39.es/ecma262/#sec-array.prototype.some\n  some: createMethod(3),\n  // `Array.prototype.every` method\n  // https://tc39.es/ecma262/#sec-array.prototype.every\n  every: createMethod(4),\n  // `Array.prototype.find` method\n  // https://tc39.es/ecma262/#sec-array.prototype.find\n  find: createMethod(5),\n  // `Array.prototype.findIndex` method\n  // https://tc39.es/ecma262/#sec-array.prototype.findIndex\n  findIndex: createMethod(6),\n  // `Array.prototype.filterOut` method\n  // https://github.com/tc39/proposal-array-filtering\n  filterOut: createMethod(7)\n};\n\n\n/***/ }),\n\n/***/ 6583:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar toIndexedObject = __webpack_require__(5656);\nvar toInteger = __webpack_require__(9958);\nvar toLength = __webpack_require__(7466);\nvar arrayMethodIsStrict = __webpack_require__(9341);\n\nvar min = Math.min;\nvar nativeLastIndexOf = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!nativeLastIndexOf && 1 / [1].lastIndexOf(1, -0) < 0;\nvar STRICT_METHOD = arrayMethodIsStrict('lastIndexOf');\nvar FORCED = NEGATIVE_ZERO || !STRICT_METHOD;\n\n// `Array.prototype.lastIndexOf` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.lastindexof\nmodule.exports = FORCED ? function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n  // convert -0 to +0\n  if (NEGATIVE_ZERO) return nativeLastIndexOf.apply(this, arguments) || 0;\n  var O = toIndexedObject(this);\n  var length = toLength(O.length);\n  var index = length - 1;\n  if (arguments.length > 1) index = min(index, toInteger(arguments[1]));\n  if (index < 0) index = length + index;\n  for (;index >= 0; index--) if (index in O && O[index] === searchElement) return index || 0;\n  return -1;\n} : nativeLastIndexOf;\n\n\n/***/ }),\n\n/***/ 1194:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar V8_VERSION = __webpack_require__(7392);\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (METHOD_NAME) {\n  // We can't use this feature detection in V8 since it causes\n  // deoptimization and serious performance degradation\n  // https://github.com/zloirock/core-js/issues/677\n  return V8_VERSION >= 51 || !fails(function () {\n    var array = [];\n    var constructor = array.constructor = {};\n    constructor[SPECIES] = function () {\n      return { foo: 1 };\n    };\n    return array[METHOD_NAME](Boolean).foo !== 1;\n  });\n};\n\n\n/***/ }),\n\n/***/ 9341:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar fails = __webpack_require__(7293);\n\nmodule.exports = function (METHOD_NAME, argument) {\n  var method = [][METHOD_NAME];\n  return !!method && fails(function () {\n    // eslint-disable-next-line no-useless-call,no-throw-literal -- required for testing\n    method.call(null, argument || function () { throw 1; }, 1);\n  });\n};\n\n\n/***/ }),\n\n/***/ 3671:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar aFunction = __webpack_require__(3099);\nvar toObject = __webpack_require__(7908);\nvar IndexedObject = __webpack_require__(8361);\nvar toLength = __webpack_require__(7466);\n\n// `Array.prototype.{ reduce, reduceRight }` methods implementation\nvar createMethod = function (IS_RIGHT) {\n  return function (that, callbackfn, argumentsLength, memo) {\n    aFunction(callbackfn);\n    var O = toObject(that);\n    var self = IndexedObject(O);\n    var length = toLength(O.length);\n    var index = IS_RIGHT ? length - 1 : 0;\n    var i = IS_RIGHT ? -1 : 1;\n    if (argumentsLength < 2) while (true) {\n      if (index in self) {\n        memo = self[index];\n        index += i;\n        break;\n      }\n      index += i;\n      if (IS_RIGHT ? index < 0 : length <= index) {\n        throw TypeError('Reduce of empty array with no initial value');\n      }\n    }\n    for (;IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) {\n      memo = callbackfn(memo, self[index], index, O);\n    }\n    return memo;\n  };\n};\n\nmodule.exports = {\n  // `Array.prototype.reduce` method\n  // https://tc39.es/ecma262/#sec-array.prototype.reduce\n  left: createMethod(false),\n  // `Array.prototype.reduceRight` method\n  // https://tc39.es/ecma262/#sec-array.prototype.reduceright\n  right: createMethod(true)\n};\n\n\n/***/ }),\n\n/***/ 5417:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(111);\nvar isArray = __webpack_require__(3157);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n  var C;\n  if (isArray(originalArray)) {\n    C = originalArray.constructor;\n    // cross-realm fallback\n    if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n    else if (isObject(C)) {\n      C = C[SPECIES];\n      if (C === null) C = undefined;\n    }\n  } return new (C === undefined ? Array : C)(length === 0 ? 0 : length);\n};\n\n\n/***/ }),\n\n/***/ 3411:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(9670);\nvar iteratorClose = __webpack_require__(9212);\n\n// call something on iterator step with safe closing on error\nmodule.exports = function (iterator, fn, value, ENTRIES) {\n  try {\n    return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);\n  // 7.4.6 IteratorClose(iterator, completion)\n  } catch (error) {\n    iteratorClose(iterator);\n    throw error;\n  }\n};\n\n\n/***/ }),\n\n/***/ 7072:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n  var called = 0;\n  var iteratorWithReturn = {\n    next: function () {\n      return { done: !!called++ };\n    },\n    'return': function () {\n      SAFE_CLOSING = true;\n    }\n  };\n  iteratorWithReturn[ITERATOR] = function () {\n    return this;\n  };\n  // eslint-disable-next-line no-throw-literal -- required for testing\n  Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n  if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n  var ITERATION_SUPPORT = false;\n  try {\n    var object = {};\n    object[ITERATOR] = function () {\n      return {\n        next: function () {\n          return { done: ITERATION_SUPPORT = true };\n        }\n      };\n    };\n    exec(object);\n  } catch (error) { /* empty */ }\n  return ITERATION_SUPPORT;\n};\n\n\n/***/ }),\n\n/***/ 4326:\n/***/ (function(module) {\n\nvar toString = {}.toString;\n\nmodule.exports = function (it) {\n  return toString.call(it).slice(8, -1);\n};\n\n\n/***/ }),\n\n/***/ 648:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar TO_STRING_TAG_SUPPORT = __webpack_require__(1694);\nvar classofRaw = __webpack_require__(4326);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n  var O, tag, result;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n    // builtinTag case\n    : CORRECT_ARGUMENTS ? classofRaw(O)\n    // ES3 arguments fallback\n    : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result;\n};\n\n\n/***/ }),\n\n/***/ 9920:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar has = __webpack_require__(6656);\nvar ownKeys = __webpack_require__(3887);\nvar getOwnPropertyDescriptorModule = __webpack_require__(1236);\nvar definePropertyModule = __webpack_require__(3070);\n\nmodule.exports = function (target, source) {\n  var keys = ownKeys(source);\n  var defineProperty = definePropertyModule.f;\n  var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i];\n    if (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n  }\n};\n\n\n/***/ }),\n\n/***/ 8544:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\n\nmodule.exports = !fails(function () {\n  function F() { /* empty */ }\n  F.prototype.constructor = null;\n  return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n\n\n/***/ }),\n\n/***/ 4994:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar IteratorPrototype = __webpack_require__(3383).IteratorPrototype;\nvar create = __webpack_require__(30);\nvar createPropertyDescriptor = __webpack_require__(9114);\nvar setToStringTag = __webpack_require__(8003);\nvar Iterators = __webpack_require__(7497);\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next) {\n  var TO_STRING_TAG = NAME + ' Iterator';\n  IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) });\n  setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n  Iterators[TO_STRING_TAG] = returnThis;\n  return IteratorConstructor;\n};\n\n\n/***/ }),\n\n/***/ 8880:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar definePropertyModule = __webpack_require__(3070);\nvar createPropertyDescriptor = __webpack_require__(9114);\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n  return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n\n\n/***/ }),\n\n/***/ 9114:\n/***/ (function(module) {\n\nmodule.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n\n\n/***/ }),\n\n/***/ 6135:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar toPrimitive = __webpack_require__(7593);\nvar definePropertyModule = __webpack_require__(3070);\nvar createPropertyDescriptor = __webpack_require__(9114);\n\nmodule.exports = function (object, key, value) {\n  var propertyKey = toPrimitive(key);\n  if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n  else object[propertyKey] = value;\n};\n\n\n/***/ }),\n\n/***/ 654:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar createIteratorConstructor = __webpack_require__(4994);\nvar getPrototypeOf = __webpack_require__(9518);\nvar setPrototypeOf = __webpack_require__(7674);\nvar setToStringTag = __webpack_require__(8003);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar redefine = __webpack_require__(1320);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar IS_PURE = __webpack_require__(1913);\nvar Iterators = __webpack_require__(7497);\nvar IteratorsCore = __webpack_require__(3383);\n\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n  createIteratorConstructor(IteratorConstructor, NAME, next);\n\n  var getIterationMethod = function (KIND) {\n    if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n    if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];\n    switch (KIND) {\n      case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n      case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n      case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n    } return function () { return new IteratorConstructor(this); };\n  };\n\n  var TO_STRING_TAG = NAME + ' Iterator';\n  var INCORRECT_VALUES_NAME = false;\n  var IterablePrototype = Iterable.prototype;\n  var nativeIterator = IterablePrototype[ITERATOR]\n    || IterablePrototype['@@iterator']\n    || DEFAULT && IterablePrototype[DEFAULT];\n  var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n  var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n  var CurrentIteratorPrototype, methods, KEY;\n\n  // fix native\n  if (anyNativeIterator) {\n    CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n    if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n      if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n        if (setPrototypeOf) {\n          setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n        } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') {\n          createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR, returnThis);\n        }\n      }\n      // Set @@toStringTag to native iterators\n      setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n      if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n    }\n  }\n\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n    INCORRECT_VALUES_NAME = true;\n    defaultIterator = function values() { return nativeIterator.call(this); };\n  }\n\n  // define iterator\n  if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n    createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator);\n  }\n  Iterators[NAME] = defaultIterator;\n\n  // export additional methods\n  if (DEFAULT) {\n    methods = {\n      values: getIterationMethod(VALUES),\n      keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n      entries: getIterationMethod(ENTRIES)\n    };\n    if (FORCED) for (KEY in methods) {\n      if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n        redefine(IterablePrototype, KEY, methods[KEY]);\n      }\n    } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n  }\n\n  return methods;\n};\n\n\n/***/ }),\n\n/***/ 9781:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n  return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n\n\n/***/ }),\n\n/***/ 317:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar isObject = __webpack_require__(111);\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n  return EXISTS ? document.createElement(it) : {};\n};\n\n\n/***/ }),\n\n/***/ 8324:\n/***/ (function(module) {\n\n// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n  CSSRuleList: 0,\n  CSSStyleDeclaration: 0,\n  CSSValueList: 0,\n  ClientRectList: 0,\n  DOMRectList: 0,\n  DOMStringList: 0,\n  DOMTokenList: 1,\n  DataTransferItemList: 0,\n  FileList: 0,\n  HTMLAllCollection: 0,\n  HTMLCollection: 0,\n  HTMLFormElement: 0,\n  HTMLSelectElement: 0,\n  MediaList: 0,\n  MimeTypeArray: 0,\n  NamedNodeMap: 0,\n  NodeList: 1,\n  PaintRequestList: 0,\n  Plugin: 0,\n  PluginArray: 0,\n  SVGLengthList: 0,\n  SVGNumberList: 0,\n  SVGPathSegList: 0,\n  SVGPointList: 0,\n  SVGStringList: 0,\n  SVGTransformList: 0,\n  SourceBufferList: 0,\n  StyleSheetList: 0,\n  TextTrackCueList: 0,\n  TextTrackList: 0,\n  TouchList: 0\n};\n\n\n/***/ }),\n\n/***/ 8113:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar getBuiltIn = __webpack_require__(5005);\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n\n\n/***/ }),\n\n/***/ 7392:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar userAgent = __webpack_require__(8113);\n\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n  match = v8.split('.');\n  version = match[0] + match[1];\n} else if (userAgent) {\n  match = userAgent.match(/Edge\\/(\\d+)/);\n  if (!match || match[1] >= 74) {\n    match = userAgent.match(/Chrome\\/(\\d+)/);\n    if (match) version = match[1];\n  }\n}\n\nmodule.exports = version && +version;\n\n\n/***/ }),\n\n/***/ 748:\n/***/ (function(module) {\n\n// IE8- don't enum bug keys\nmodule.exports = [\n  'constructor',\n  'hasOwnProperty',\n  'isPrototypeOf',\n  'propertyIsEnumerable',\n  'toLocaleString',\n  'toString',\n  'valueOf'\n];\n\n\n/***/ }),\n\n/***/ 2109:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar getOwnPropertyDescriptor = __webpack_require__(1236).f;\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar redefine = __webpack_require__(1320);\nvar setGlobal = __webpack_require__(3505);\nvar copyConstructorProperties = __webpack_require__(9920);\nvar isForced = __webpack_require__(4705);\n\n/*\n  options.target      - name of the target object\n  options.global      - target is the global object\n  options.stat        - export as static methods of target\n  options.proto       - export as prototype methods of target\n  options.real        - real prototype method for the `pure` version\n  options.forced      - export even if the native feature is available\n  options.bind        - bind methods to the target, required for the `pure` version\n  options.wrap        - wrap constructors to preventing global pollution, required for the `pure` version\n  options.unsafe      - use the simple assignment of property instead of delete + defineProperty\n  options.sham        - add a flag to not completely full polyfills\n  options.enumerable  - export as enumerable property\n  options.noTargetGet - prevent calling a getter on target\n*/\nmodule.exports = function (options, source) {\n  var TARGET = options.target;\n  var GLOBAL = options.global;\n  var STATIC = options.stat;\n  var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n  if (GLOBAL) {\n    target = global;\n  } else if (STATIC) {\n    target = global[TARGET] || setGlobal(TARGET, {});\n  } else {\n    target = (global[TARGET] || {}).prototype;\n  }\n  if (target) for (key in source) {\n    sourceProperty = source[key];\n    if (options.noTargetGet) {\n      descriptor = getOwnPropertyDescriptor(target, key);\n      targetProperty = descriptor && descriptor.value;\n    } else targetProperty = target[key];\n    FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n    // contained in target\n    if (!FORCED && targetProperty !== undefined) {\n      if (typeof sourceProperty === typeof targetProperty) continue;\n      copyConstructorProperties(sourceProperty, targetProperty);\n    }\n    // add a flag to not completely full polyfills\n    if (options.sham || (targetProperty && targetProperty.sham)) {\n      createNonEnumerableProperty(sourceProperty, 'sham', true);\n    }\n    // extend global\n    redefine(target, key, sourceProperty, options);\n  }\n};\n\n\n/***/ }),\n\n/***/ 7293:\n/***/ (function(module) {\n\nmodule.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (error) {\n    return true;\n  }\n};\n\n\n/***/ }),\n\n/***/ 7007:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n// TODO: Remove from `core-js@4` since it's moved to entry points\n__webpack_require__(4916);\nvar redefine = __webpack_require__(1320);\nvar fails = __webpack_require__(7293);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar regexpExec = __webpack_require__(2261);\nvar createNonEnumerableProperty = __webpack_require__(8880);\n\nvar SPECIES = wellKnownSymbol('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n  // #replace needs built-in support for named groups.\n  // #match works fine because it just return the exec results, even if it has\n  // a \"grops\" property.\n  var re = /./;\n  re.exec = function () {\n    var result = [];\n    result.groups = { a: '7' };\n    return result;\n  };\n  return ''.replace(re, '$<a>') !== '7';\n});\n\n// IE <= 11 replaces $0 with the whole match, as if it was $&\n// https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0\nvar REPLACE_KEEPS_$0 = (function () {\n  return 'a'.replace(/./, '$0') === '$0';\n})();\n\nvar REPLACE = wellKnownSymbol('replace');\n// Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string\nvar REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () {\n  if (/./[REPLACE]) {\n    return /./[REPLACE]('a', '$0') === '';\n  }\n  return false;\n})();\n\n// Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n// Weex JS has frozen built-in prototypes, so use try / catch wrapper\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () {\n  // eslint-disable-next-line regexp/no-empty-group -- required for testing\n  var re = /(?:)/;\n  var originalExec = re.exec;\n  re.exec = function () { return originalExec.apply(this, arguments); };\n  var result = 'ab'.split(re);\n  return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b';\n});\n\nmodule.exports = function (KEY, length, exec, sham) {\n  var SYMBOL = wellKnownSymbol(KEY);\n\n  var DELEGATES_TO_SYMBOL = !fails(function () {\n    // String methods call symbol-named RegEp methods\n    var O = {};\n    O[SYMBOL] = function () { return 7; };\n    return ''[KEY](O) != 7;\n  });\n\n  var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () {\n    // Symbol-named RegExp methods call .exec\n    var execCalled = false;\n    var re = /a/;\n\n    if (KEY === 'split') {\n      // We can't use real regex here since it causes deoptimization\n      // and serious performance degradation in V8\n      // https://github.com/zloirock/core-js/issues/306\n      re = {};\n      // RegExp[@@split] doesn't call the regex's exec method, but first creates\n      // a new one. We need to return the patched regex when creating the new one.\n      re.constructor = {};\n      re.constructor[SPECIES] = function () { return re; };\n      re.flags = '';\n      re[SYMBOL] = /./[SYMBOL];\n    }\n\n    re.exec = function () { execCalled = true; return null; };\n\n    re[SYMBOL]('');\n    return !execCalled;\n  });\n\n  if (\n    !DELEGATES_TO_SYMBOL ||\n    !DELEGATES_TO_EXEC ||\n    (KEY === 'replace' && !(\n      REPLACE_SUPPORTS_NAMED_GROUPS &&\n      REPLACE_KEEPS_$0 &&\n      !REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE\n    )) ||\n    (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n  ) {\n    var nativeRegExpMethod = /./[SYMBOL];\n    var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {\n      if (regexp.exec === regexpExec) {\n        if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n          // The native String method already delegates to @@method (this\n          // polyfilled function), leasing to infinite recursion.\n          // We avoid it by directly calling the native @@method method.\n          return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n        }\n        return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n      }\n      return { done: false };\n    }, {\n      REPLACE_KEEPS_$0: REPLACE_KEEPS_$0,\n      REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE: REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE\n    });\n    var stringMethod = methods[0];\n    var regexMethod = methods[1];\n\n    redefine(String.prototype, KEY, stringMethod);\n    redefine(RegExp.prototype, SYMBOL, length == 2\n      // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n      // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n      ? function (string, arg) { return regexMethod.call(string, this, arg); }\n      // 21.2.5.6 RegExp.prototype[@@match](string)\n      // 21.2.5.9 RegExp.prototype[@@search](string)\n      : function (string) { return regexMethod.call(string, this); }\n    );\n  }\n\n  if (sham) createNonEnumerableProperty(RegExp.prototype[SYMBOL], 'sham', true);\n};\n\n\n/***/ }),\n\n/***/ 9974:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar aFunction = __webpack_require__(3099);\n\n// optional / simple context binding\nmodule.exports = function (fn, that, length) {\n  aFunction(fn);\n  if (that === undefined) return fn;\n  switch (length) {\n    case 0: return function () {\n      return fn.call(that);\n    };\n    case 1: return function (a) {\n      return fn.call(that, a);\n    };\n    case 2: return function (a, b) {\n      return fn.call(that, a, b);\n    };\n    case 3: return function (a, b, c) {\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n\n\n/***/ }),\n\n/***/ 5005:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar path = __webpack_require__(857);\nvar global = __webpack_require__(7854);\n\nvar aFunction = function (variable) {\n  return typeof variable == 'function' ? variable : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n  return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace])\n    : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method];\n};\n\n\n/***/ }),\n\n/***/ 1246:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar classof = __webpack_require__(648);\nvar Iterators = __webpack_require__(7497);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n  if (it != undefined) return it[ITERATOR]\n    || it['@@iterator']\n    || Iterators[classof(it)];\n};\n\n\n/***/ }),\n\n/***/ 8554:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(9670);\nvar getIteratorMethod = __webpack_require__(1246);\n\nmodule.exports = function (it) {\n  var iteratorMethod = getIteratorMethod(it);\n  if (typeof iteratorMethod != 'function') {\n    throw TypeError(String(it) + ' is not iterable');\n  } return anObject(iteratorMethod.call(it));\n};\n\n\n/***/ }),\n\n/***/ 647:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toObject = __webpack_require__(7908);\n\nvar floor = Math.floor;\nvar replace = ''.replace;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&'`]|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&'`]|\\d\\d?)/g;\n\n// https://tc39.es/ecma262/#sec-getsubstitution\nmodule.exports = function (matched, str, position, captures, namedCaptures, replacement) {\n  var tailPos = position + matched.length;\n  var m = captures.length;\n  var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n  if (namedCaptures !== undefined) {\n    namedCaptures = toObject(namedCaptures);\n    symbols = SUBSTITUTION_SYMBOLS;\n  }\n  return replace.call(replacement, symbols, function (match, ch) {\n    var capture;\n    switch (ch.charAt(0)) {\n      case '$': return '$';\n      case '&': return matched;\n      case '`': return str.slice(0, position);\n      case \"'\": return str.slice(tailPos);\n      case '<':\n        capture = namedCaptures[ch.slice(1, -1)];\n        break;\n      default: // \\d\\d?\n        var n = +ch;\n        if (n === 0) return match;\n        if (n > m) {\n          var f = floor(n / 10);\n          if (f === 0) return match;\n          if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n          return match;\n        }\n        capture = captures[n - 1];\n    }\n    return capture === undefined ? '' : capture;\n  });\n};\n\n\n/***/ }),\n\n/***/ 7854:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar check = function (it) {\n  return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n  /* global globalThis -- safe */\n  check(typeof globalThis == 'object' && globalThis) ||\n  check(typeof window == 'object' && window) ||\n  check(typeof self == 'object' && self) ||\n  check(typeof __webpack_require__.g == 'object' && __webpack_require__.g) ||\n  // eslint-disable-next-line no-new-func -- fallback\n  (function () { return this; })() || Function('return this')();\n\n\n/***/ }),\n\n/***/ 6656:\n/***/ (function(module) {\n\nvar hasOwnProperty = {}.hasOwnProperty;\n\nmodule.exports = function (it, key) {\n  return hasOwnProperty.call(it, key);\n};\n\n\n/***/ }),\n\n/***/ 3501:\n/***/ (function(module) {\n\nmodule.exports = {};\n\n\n/***/ }),\n\n/***/ 490:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar getBuiltIn = __webpack_require__(5005);\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n\n\n/***/ }),\n\n/***/ 4664:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar fails = __webpack_require__(7293);\nvar createElement = __webpack_require__(317);\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n  return Object.defineProperty(createElement('div'), 'a', {\n    get: function () { return 7; }\n  }).a != 7;\n});\n\n\n/***/ }),\n\n/***/ 1179:\n/***/ (function(module) {\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\n\nvar pack = function (number, mantissaLength, bytes) {\n  var buffer = new Array(bytes);\n  var exponentLength = bytes * 8 - mantissaLength - 1;\n  var eMax = (1 << exponentLength) - 1;\n  var eBias = eMax >> 1;\n  var rt = mantissaLength === 23 ? pow(2, -24) - pow(2, -77) : 0;\n  var sign = number < 0 || number === 0 && 1 / number < 0 ? 1 : 0;\n  var index = 0;\n  var exponent, mantissa, c;\n  number = abs(number);\n  // eslint-disable-next-line no-self-compare -- NaN check\n  if (number != number || number === Infinity) {\n    // eslint-disable-next-line no-self-compare -- NaN check\n    mantissa = number != number ? 1 : 0;\n    exponent = eMax;\n  } else {\n    exponent = floor(log(number) / LN2);\n    if (number * (c = pow(2, -exponent)) < 1) {\n      exponent--;\n      c *= 2;\n    }\n    if (exponent + eBias >= 1) {\n      number += rt / c;\n    } else {\n      number += rt * pow(2, 1 - eBias);\n    }\n    if (number * c >= 2) {\n      exponent++;\n      c /= 2;\n    }\n    if (exponent + eBias >= eMax) {\n      mantissa = 0;\n      exponent = eMax;\n    } else if (exponent + eBias >= 1) {\n      mantissa = (number * c - 1) * pow(2, mantissaLength);\n      exponent = exponent + eBias;\n    } else {\n      mantissa = number * pow(2, eBias - 1) * pow(2, mantissaLength);\n      exponent = 0;\n    }\n  }\n  for (; mantissaLength >= 8; buffer[index++] = mantissa & 255, mantissa /= 256, mantissaLength -= 8);\n  exponent = exponent << mantissaLength | mantissa;\n  exponentLength += mantissaLength;\n  for (; exponentLength > 0; buffer[index++] = exponent & 255, exponent /= 256, exponentLength -= 8);\n  buffer[--index] |= sign * 128;\n  return buffer;\n};\n\nvar unpack = function (buffer, mantissaLength) {\n  var bytes = buffer.length;\n  var exponentLength = bytes * 8 - mantissaLength - 1;\n  var eMax = (1 << exponentLength) - 1;\n  var eBias = eMax >> 1;\n  var nBits = exponentLength - 7;\n  var index = bytes - 1;\n  var sign = buffer[index--];\n  var exponent = sign & 127;\n  var mantissa;\n  sign >>= 7;\n  for (; nBits > 0; exponent = exponent * 256 + buffer[index], index--, nBits -= 8);\n  mantissa = exponent & (1 << -nBits) - 1;\n  exponent >>= -nBits;\n  nBits += mantissaLength;\n  for (; nBits > 0; mantissa = mantissa * 256 + buffer[index], index--, nBits -= 8);\n  if (exponent === 0) {\n    exponent = 1 - eBias;\n  } else if (exponent === eMax) {\n    return mantissa ? NaN : sign ? -Infinity : Infinity;\n  } else {\n    mantissa = mantissa + pow(2, mantissaLength);\n    exponent = exponent - eBias;\n  } return (sign ? -1 : 1) * mantissa * pow(2, exponent - mantissaLength);\n};\n\nmodule.exports = {\n  pack: pack,\n  unpack: unpack\n};\n\n\n/***/ }),\n\n/***/ 8361:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\nvar classof = __webpack_require__(4326);\n\nvar split = ''.split;\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n  // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n  // eslint-disable-next-line no-prototype-builtins -- safe\n  return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n  return classof(it) == 'String' ? split.call(it, '') : Object(it);\n} : Object;\n\n\n/***/ }),\n\n/***/ 9587:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(111);\nvar setPrototypeOf = __webpack_require__(7674);\n\n// makes subclassing work correct for wrapped built-ins\nmodule.exports = function ($this, dummy, Wrapper) {\n  var NewTarget, NewTargetPrototype;\n  if (\n    // it can work only with native `setPrototypeOf`\n    setPrototypeOf &&\n    // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n    typeof (NewTarget = dummy.constructor) == 'function' &&\n    NewTarget !== Wrapper &&\n    isObject(NewTargetPrototype = NewTarget.prototype) &&\n    NewTargetPrototype !== Wrapper.prototype\n  ) setPrototypeOf($this, NewTargetPrototype);\n  return $this;\n};\n\n\n/***/ }),\n\n/***/ 2788:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar store = __webpack_require__(5465);\n\nvar functionToString = Function.toString;\n\n// this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper\nif (typeof store.inspectSource != 'function') {\n  store.inspectSource = function (it) {\n    return functionToString.call(it);\n  };\n}\n\nmodule.exports = store.inspectSource;\n\n\n/***/ }),\n\n/***/ 9909:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar NATIVE_WEAK_MAP = __webpack_require__(8536);\nvar global = __webpack_require__(7854);\nvar isObject = __webpack_require__(111);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar objectHas = __webpack_require__(6656);\nvar shared = __webpack_require__(5465);\nvar sharedKey = __webpack_require__(6200);\nvar hiddenKeys = __webpack_require__(3501);\n\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n  return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n  return function (it) {\n    var state;\n    if (!isObject(it) || (state = get(it)).type !== TYPE) {\n      throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n    } return state;\n  };\n};\n\nif (NATIVE_WEAK_MAP) {\n  var store = shared.state || (shared.state = new WeakMap());\n  var wmget = store.get;\n  var wmhas = store.has;\n  var wmset = store.set;\n  set = function (it, metadata) {\n    metadata.facade = it;\n    wmset.call(store, it, metadata);\n    return metadata;\n  };\n  get = function (it) {\n    return wmget.call(store, it) || {};\n  };\n  has = function (it) {\n    return wmhas.call(store, it);\n  };\n} else {\n  var STATE = sharedKey('state');\n  hiddenKeys[STATE] = true;\n  set = function (it, metadata) {\n    metadata.facade = it;\n    createNonEnumerableProperty(it, STATE, metadata);\n    return metadata;\n  };\n  get = function (it) {\n    return objectHas(it, STATE) ? it[STATE] : {};\n  };\n  has = function (it) {\n    return objectHas(it, STATE);\n  };\n}\n\nmodule.exports = {\n  set: set,\n  get: get,\n  has: has,\n  enforce: enforce,\n  getterFor: getterFor\n};\n\n\n/***/ }),\n\n/***/ 7659:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar wellKnownSymbol = __webpack_require__(5112);\nvar Iterators = __webpack_require__(7497);\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n  return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n\n\n/***/ }),\n\n/***/ 3157:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar classof = __webpack_require__(4326);\n\n// `IsArray` abstract operation\n// https://tc39.es/ecma262/#sec-isarray\nmodule.exports = Array.isArray || function isArray(arg) {\n  return classof(arg) == 'Array';\n};\n\n\n/***/ }),\n\n/***/ 4705:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n  var value = data[normalize(feature)];\n  return value == POLYFILL ? true\n    : value == NATIVE ? false\n    : typeof detection == 'function' ? fails(detection)\n    : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n  return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n\n\n/***/ }),\n\n/***/ 111:\n/***/ (function(module) {\n\nmodule.exports = function (it) {\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\n\n/***/ }),\n\n/***/ 1913:\n/***/ (function(module) {\n\nmodule.exports = false;\n\n\n/***/ }),\n\n/***/ 7850:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(111);\nvar classof = __webpack_require__(4326);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar MATCH = wellKnownSymbol('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.es/ecma262/#sec-isregexp\nmodule.exports = function (it) {\n  var isRegExp;\n  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp');\n};\n\n\n/***/ }),\n\n/***/ 9212:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(9670);\n\nmodule.exports = function (iterator) {\n  var returnMethod = iterator['return'];\n  if (returnMethod !== undefined) {\n    return anObject(returnMethod.call(iterator)).value;\n  }\n};\n\n\n/***/ }),\n\n/***/ 3383:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar fails = __webpack_require__(7293);\nvar getPrototypeOf = __webpack_require__(9518);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar has = __webpack_require__(6656);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar IS_PURE = __webpack_require__(1913);\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\nvar returnThis = function () { return this; };\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\nif ([].keys) {\n  arrayIterator = [].keys();\n  // Safari 8 has buggy iterators w/o `next`\n  if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n  else {\n    PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n    if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n  }\n}\n\nvar NEW_ITERATOR_PROTOTYPE = IteratorPrototype == undefined || fails(function () {\n  var test = {};\n  // FF44- legacy iterators case\n  return IteratorPrototype[ITERATOR].call(test) !== test;\n});\n\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nif ((!IS_PURE || NEW_ITERATOR_PROTOTYPE) && !has(IteratorPrototype, ITERATOR)) {\n  createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis);\n}\n\nmodule.exports = {\n  IteratorPrototype: IteratorPrototype,\n  BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n\n\n/***/ }),\n\n/***/ 7497:\n/***/ (function(module) {\n\nmodule.exports = {};\n\n\n/***/ }),\n\n/***/ 133:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\n\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n  // Chrome 38 Symbol has incorrect toString conversion\n  /* global Symbol -- required for testing */\n  return !String(Symbol());\n});\n\n\n/***/ }),\n\n/***/ 590:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar IS_PURE = __webpack_require__(1913);\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = !fails(function () {\n  var url = new URL('b?a=1&b=2&c=3', 'http://a');\n  var searchParams = url.searchParams;\n  var result = '';\n  url.pathname = 'c%20d';\n  searchParams.forEach(function (value, key) {\n    searchParams['delete']('b');\n    result += key + value;\n  });\n  return (IS_PURE && !url.toJSON)\n    || !searchParams.sort\n    || url.href !== 'http://a/c%20d?a=1&c=3'\n    || searchParams.get('c') !== '3'\n    || String(new URLSearchParams('?a=1')) !== 'a=1'\n    || !searchParams[ITERATOR]\n    // throws in Edge\n    || new URL('https://a@b').username !== 'a'\n    || new URLSearchParams(new URLSearchParams('a=b')).get('a') !== 'b'\n    // not punycoded in Edge\n    || new URL('http://тест').host !== 'xn--e1aybc'\n    // not escaped in Chrome 62-\n    || new URL('http://a#б').hash !== '#%D0%B1'\n    // fails in Chrome 66-\n    || result !== 'a1c3'\n    // throws in Safari\n    || new URL('http://x', undefined).host !== 'x';\n});\n\n\n/***/ }),\n\n/***/ 8536:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar inspectSource = __webpack_require__(2788);\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap));\n\n\n/***/ }),\n\n/***/ 1574:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar fails = __webpack_require__(7293);\nvar objectKeys = __webpack_require__(1956);\nvar getOwnPropertySymbolsModule = __webpack_require__(5181);\nvar propertyIsEnumerableModule = __webpack_require__(5296);\nvar toObject = __webpack_require__(7908);\nvar IndexedObject = __webpack_require__(8361);\n\nvar nativeAssign = Object.assign;\nvar defineProperty = Object.defineProperty;\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\nmodule.exports = !nativeAssign || fails(function () {\n  // should have correct order of operations (Edge bug)\n  if (DESCRIPTORS && nativeAssign({ b: 1 }, nativeAssign(defineProperty({}, 'a', {\n    enumerable: true,\n    get: function () {\n      defineProperty(this, 'b', {\n        value: 3,\n        enumerable: false\n      });\n    }\n  }), { b: 2 })).b !== 1) return true;\n  // should work with symbols and should have deterministic property order (V8 bug)\n  var A = {};\n  var B = {};\n  /* global Symbol -- required for testing */\n  var symbol = Symbol();\n  var alphabet = 'abcdefghijklmnopqrst';\n  A[symbol] = 7;\n  alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n  return nativeAssign({}, A)[symbol] != 7 || objectKeys(nativeAssign({}, B)).join('') != alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length`\n  var T = toObject(target);\n  var argumentsLength = arguments.length;\n  var index = 1;\n  var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n  var propertyIsEnumerable = propertyIsEnumerableModule.f;\n  while (argumentsLength > index) {\n    var S = IndexedObject(arguments[index++]);\n    var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S);\n    var length = keys.length;\n    var j = 0;\n    var key;\n    while (length > j) {\n      key = keys[j++];\n      if (!DESCRIPTORS || propertyIsEnumerable.call(S, key)) T[key] = S[key];\n    }\n  } return T;\n} : nativeAssign;\n\n\n/***/ }),\n\n/***/ 30:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(9670);\nvar defineProperties = __webpack_require__(6048);\nvar enumBugKeys = __webpack_require__(748);\nvar hiddenKeys = __webpack_require__(3501);\nvar html = __webpack_require__(490);\nvar documentCreateElement = __webpack_require__(317);\nvar sharedKey = __webpack_require__(6200);\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n  return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n  activeXDocument.write(scriptTag(''));\n  activeXDocument.close();\n  var temp = activeXDocument.parentWindow.Object;\n  activeXDocument = null; // avoid memory leak\n  return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = documentCreateElement('iframe');\n  var JS = 'java' + SCRIPT + ':';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  html.appendChild(iframe);\n  // https://github.com/zloirock/core-js/issues/475\n  iframe.src = String(JS);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(scriptTag('document.F=Object'));\n  iframeDocument.close();\n  return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n  try {\n    /* global ActiveXObject -- old IE */\n    activeXDocument = document.domain && new ActiveXObject('htmlfile');\n  } catch (error) { /* ignore */ }\n  NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame();\n  var length = enumBugKeys.length;\n  while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n  return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    EmptyConstructor[PROTOTYPE] = anObject(O);\n    result = new EmptyConstructor();\n    EmptyConstructor[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = NullProtoObject();\n  return Properties === undefined ? result : defineProperties(result, Properties);\n};\n\n\n/***/ }),\n\n/***/ 6048:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar definePropertyModule = __webpack_require__(3070);\nvar anObject = __webpack_require__(9670);\nvar objectKeys = __webpack_require__(1956);\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\nmodule.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var keys = objectKeys(Properties);\n  var length = keys.length;\n  var index = 0;\n  var key;\n  while (length > index) definePropertyModule.f(O, key = keys[index++], Properties[key]);\n  return O;\n};\n\n\n/***/ }),\n\n/***/ 3070:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar IE8_DOM_DEFINE = __webpack_require__(4664);\nvar anObject = __webpack_require__(9670);\nvar toPrimitive = __webpack_require__(7593);\n\nvar nativeDefineProperty = Object.defineProperty;\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return nativeDefineProperty(O, P, Attributes);\n  } catch (error) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n\n\n/***/ }),\n\n/***/ 1236:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar propertyIsEnumerableModule = __webpack_require__(5296);\nvar createPropertyDescriptor = __webpack_require__(9114);\nvar toIndexedObject = __webpack_require__(5656);\nvar toPrimitive = __webpack_require__(7593);\nvar has = __webpack_require__(6656);\nvar IE8_DOM_DEFINE = __webpack_require__(4664);\n\nvar nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n  O = toIndexedObject(O);\n  P = toPrimitive(P, true);\n  if (IE8_DOM_DEFINE) try {\n    return nativeGetOwnPropertyDescriptor(O, P);\n  } catch (error) { /* empty */ }\n  if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);\n};\n\n\n/***/ }),\n\n/***/ 8006:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\nvar internalObjectKeys = __webpack_require__(6324);\nvar enumBugKeys = __webpack_require__(748);\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return internalObjectKeys(O, hiddenKeys);\n};\n\n\n/***/ }),\n\n/***/ 5181:\n/***/ (function(__unused_webpack_module, exports) {\n\nexports.f = Object.getOwnPropertySymbols;\n\n\n/***/ }),\n\n/***/ 9518:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar has = __webpack_require__(6656);\nvar toObject = __webpack_require__(7908);\nvar sharedKey = __webpack_require__(6200);\nvar CORRECT_PROTOTYPE_GETTER = __webpack_require__(8544);\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar ObjectPrototype = Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\n  O = toObject(O);\n  if (has(O, IE_PROTO)) return O[IE_PROTO];\n  if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectPrototype : null;\n};\n\n\n/***/ }),\n\n/***/ 6324:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar has = __webpack_require__(6656);\nvar toIndexedObject = __webpack_require__(5656);\nvar indexOf = __webpack_require__(1318).indexOf;\nvar hiddenKeys = __webpack_require__(3501);\n\nmodule.exports = function (object, names) {\n  var O = toIndexedObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (has(O, key = names[i++])) {\n    ~indexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n\n\n/***/ }),\n\n/***/ 1956:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar internalObjectKeys = __webpack_require__(6324);\nvar enumBugKeys = __webpack_require__(748);\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\nmodule.exports = Object.keys || function keys(O) {\n  return internalObjectKeys(O, enumBugKeys);\n};\n\n\n/***/ }),\n\n/***/ 5296:\n/***/ (function(__unused_webpack_module, exports) {\n\n\"use strict\";\n\nvar nativePropertyIsEnumerable = {}.propertyIsEnumerable;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n  var descriptor = getOwnPropertyDescriptor(this, V);\n  return !!descriptor && descriptor.enumerable;\n} : nativePropertyIsEnumerable;\n\n\n/***/ }),\n\n/***/ 7674:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n/* eslint-disable no-proto -- safe */\nvar anObject = __webpack_require__(9670);\nvar aPossiblePrototype = __webpack_require__(6077);\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n  var CORRECT_SETTER = false;\n  var test = {};\n  var setter;\n  try {\n    setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;\n    setter.call(test, []);\n    CORRECT_SETTER = test instanceof Array;\n  } catch (error) { /* empty */ }\n  return function setPrototypeOf(O, proto) {\n    anObject(O);\n    aPossiblePrototype(proto);\n    if (CORRECT_SETTER) setter.call(O, proto);\n    else O.__proto__ = proto;\n    return O;\n  };\n}() : undefined);\n\n\n/***/ }),\n\n/***/ 288:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar TO_STRING_TAG_SUPPORT = __webpack_require__(1694);\nvar classof = __webpack_require__(648);\n\n// `Object.prototype.toString` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nmodule.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {\n  return '[object ' + classof(this) + ']';\n};\n\n\n/***/ }),\n\n/***/ 3887:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar getBuiltIn = __webpack_require__(5005);\nvar getOwnPropertyNamesModule = __webpack_require__(8006);\nvar getOwnPropertySymbolsModule = __webpack_require__(5181);\nvar anObject = __webpack_require__(9670);\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n  var keys = getOwnPropertyNamesModule.f(anObject(it));\n  var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n  return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys;\n};\n\n\n/***/ }),\n\n/***/ 857:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\n\nmodule.exports = global;\n\n\n/***/ }),\n\n/***/ 2248:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar redefine = __webpack_require__(1320);\n\nmodule.exports = function (target, src, options) {\n  for (var key in src) redefine(target, key, src[key], options);\n  return target;\n};\n\n\n/***/ }),\n\n/***/ 1320:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar has = __webpack_require__(6656);\nvar setGlobal = __webpack_require__(3505);\nvar inspectSource = __webpack_require__(2788);\nvar InternalStateModule = __webpack_require__(9909);\n\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(String).split('String');\n\n(module.exports = function (O, key, value, options) {\n  var unsafe = options ? !!options.unsafe : false;\n  var simple = options ? !!options.enumerable : false;\n  var noTargetGet = options ? !!options.noTargetGet : false;\n  var state;\n  if (typeof value == 'function') {\n    if (typeof key == 'string' && !has(value, 'name')) {\n      createNonEnumerableProperty(value, 'name', key);\n    }\n    state = enforceInternalState(value);\n    if (!state.source) {\n      state.source = TEMPLATE.join(typeof key == 'string' ? key : '');\n    }\n  }\n  if (O === global) {\n    if (simple) O[key] = value;\n    else setGlobal(key, value);\n    return;\n  } else if (!unsafe) {\n    delete O[key];\n  } else if (!noTargetGet && O[key]) {\n    simple = true;\n  }\n  if (simple) O[key] = value;\n  else createNonEnumerableProperty(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n  return typeof this == 'function' && getInternalState(this).source || inspectSource(this);\n});\n\n\n/***/ }),\n\n/***/ 7651:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar classof = __webpack_require__(4326);\nvar regexpExec = __webpack_require__(2261);\n\n// `RegExpExec` abstract operation\n// https://tc39.es/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n  var exec = R.exec;\n  if (typeof exec === 'function') {\n    var result = exec.call(R, S);\n    if (typeof result !== 'object') {\n      throw TypeError('RegExp exec method returned something other than an Object or null');\n    }\n    return result;\n  }\n\n  if (classof(R) !== 'RegExp') {\n    throw TypeError('RegExp#exec called on incompatible receiver');\n  }\n\n  return regexpExec.call(R, S);\n};\n\n\n\n/***/ }),\n\n/***/ 2261:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar regexpFlags = __webpack_require__(7066);\nvar stickyHelpers = __webpack_require__(2999);\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n  var re1 = /a/;\n  var re2 = /b*/g;\n  nativeExec.call(re1, 'a');\n  nativeExec.call(re2, 'a');\n  return re1.lastIndex !== 0 || re2.lastIndex !== 0;\n})();\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y || stickyHelpers.BROKEN_CARET;\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\n// eslint-disable-next-line regexp/no-assertion-capturing-group, regexp/no-empty-group -- required for testing\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y;\n\nif (PATCH) {\n  patchedExec = function exec(str) {\n    var re = this;\n    var lastIndex, reCopy, match, i;\n    var sticky = UNSUPPORTED_Y && re.sticky;\n    var flags = regexpFlags.call(re);\n    var source = re.source;\n    var charsAdded = 0;\n    var strCopy = str;\n\n    if (sticky) {\n      flags = flags.replace('y', '');\n      if (flags.indexOf('g') === -1) {\n        flags += 'g';\n      }\n\n      strCopy = String(str).slice(re.lastIndex);\n      // Support anchored sticky behavior.\n      if (re.lastIndex > 0 && (!re.multiline || re.multiline && str[re.lastIndex - 1] !== '\\n')) {\n        source = '(?: ' + source + ')';\n        strCopy = ' ' + strCopy;\n        charsAdded++;\n      }\n      // ^(? + rx + ) is needed, in combination with some str slicing, to\n      // simulate the 'y' flag.\n      reCopy = new RegExp('^(?:' + source + ')', flags);\n    }\n\n    if (NPCG_INCLUDED) {\n      reCopy = new RegExp('^' + source + '$(?!\\\\s)', flags);\n    }\n    if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;\n\n    match = nativeExec.call(sticky ? reCopy : re, strCopy);\n\n    if (sticky) {\n      if (match) {\n        match.input = match.input.slice(charsAdded);\n        match[0] = match[0].slice(charsAdded);\n        match.index = re.lastIndex;\n        re.lastIndex += match[0].length;\n      } else re.lastIndex = 0;\n    } else if (UPDATES_LAST_INDEX_WRONG && match) {\n      re.lastIndex = re.global ? match.index + match[0].length : lastIndex;\n    }\n    if (NPCG_INCLUDED && match && match.length > 1) {\n      // Fix browsers whose `exec` methods don't consistently return `undefined`\n      // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n      nativeReplace.call(match[0], reCopy, function () {\n        for (i = 1; i < arguments.length - 2; i++) {\n          if (arguments[i] === undefined) match[i] = undefined;\n        }\n      });\n    }\n\n    return match;\n  };\n}\n\nmodule.exports = patchedExec;\n\n\n/***/ }),\n\n/***/ 7066:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar anObject = __webpack_require__(9670);\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n  var that = anObject(this);\n  var result = '';\n  if (that.global) result += 'g';\n  if (that.ignoreCase) result += 'i';\n  if (that.multiline) result += 'm';\n  if (that.dotAll) result += 's';\n  if (that.unicode) result += 'u';\n  if (that.sticky) result += 'y';\n  return result;\n};\n\n\n/***/ }),\n\n/***/ 2999:\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar fails = __webpack_require__(7293);\n\n// babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError,\n// so we use an intermediate function.\nfunction RE(s, f) {\n  return RegExp(s, f);\n}\n\nexports.UNSUPPORTED_Y = fails(function () {\n  // babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError\n  var re = RE('a', 'y');\n  re.lastIndex = 2;\n  return re.exec('abcd') != null;\n});\n\nexports.BROKEN_CARET = fails(function () {\n  // https://bugzilla.mozilla.org/show_bug.cgi?id=773687\n  var re = RE('^r', 'gy');\n  re.lastIndex = 2;\n  return re.exec('str') != null;\n});\n\n\n/***/ }),\n\n/***/ 4488:\n/***/ (function(module) {\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n  return it;\n};\n\n\n/***/ }),\n\n/***/ 3505:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar createNonEnumerableProperty = __webpack_require__(8880);\n\nmodule.exports = function (key, value) {\n  try {\n    createNonEnumerableProperty(global, key, value);\n  } catch (error) {\n    global[key] = value;\n  } return value;\n};\n\n\n/***/ }),\n\n/***/ 6340:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar getBuiltIn = __webpack_require__(5005);\nvar definePropertyModule = __webpack_require__(3070);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar DESCRIPTORS = __webpack_require__(9781);\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n  var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n  var defineProperty = definePropertyModule.f;\n\n  if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n    defineProperty(Constructor, SPECIES, {\n      configurable: true,\n      get: function () { return this; }\n    });\n  }\n};\n\n\n/***/ }),\n\n/***/ 8003:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar defineProperty = __webpack_require__(3070).f;\nvar has = __webpack_require__(6656);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (it, TAG, STATIC) {\n  if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {\n    defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG });\n  }\n};\n\n\n/***/ }),\n\n/***/ 6200:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar shared = __webpack_require__(2309);\nvar uid = __webpack_require__(9711);\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n  return keys[key] || (keys[key] = uid(key));\n};\n\n\n/***/ }),\n\n/***/ 5465:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar setGlobal = __webpack_require__(3505);\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n\n\n/***/ }),\n\n/***/ 2309:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar IS_PURE = __webpack_require__(1913);\nvar store = __webpack_require__(5465);\n\n(module.exports = function (key, value) {\n  return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n  version: '3.9.0',\n  mode: IS_PURE ? 'pure' : 'global',\n  copyright: '© 2021 Denis Pushkarev (zloirock.ru)'\n});\n\n\n/***/ }),\n\n/***/ 6707:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(9670);\nvar aFunction = __webpack_require__(3099);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `SpeciesConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-speciesconstructor\nmodule.exports = function (O, defaultConstructor) {\n  var C = anObject(O).constructor;\n  var S;\n  return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aFunction(S);\n};\n\n\n/***/ }),\n\n/***/ 8710:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(9958);\nvar requireObjectCoercible = __webpack_require__(4488);\n\n// `String.prototype.{ codePointAt, at }` methods implementation\nvar createMethod = function (CONVERT_TO_STRING) {\n  return function ($this, pos) {\n    var S = String(requireObjectCoercible($this));\n    var position = toInteger(pos);\n    var size = S.length;\n    var first, second;\n    if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n    first = S.charCodeAt(position);\n    return first < 0xD800 || first > 0xDBFF || position + 1 === size\n      || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF\n        ? CONVERT_TO_STRING ? S.charAt(position) : first\n        : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n  };\n};\n\nmodule.exports = {\n  // `String.prototype.codePointAt` method\n  // https://tc39.es/ecma262/#sec-string.prototype.codepointat\n  codeAt: createMethod(false),\n  // `String.prototype.at` method\n  // https://github.com/mathiasbynens/String.prototype.at\n  charAt: createMethod(true)\n};\n\n\n/***/ }),\n\n/***/ 3197:\n/***/ (function(module) {\n\n\"use strict\";\n\n// based on https://github.com/bestiejs/punycode.js/blob/master/punycode.js\nvar maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\nvar base = 36;\nvar tMin = 1;\nvar tMax = 26;\nvar skew = 38;\nvar damp = 700;\nvar initialBias = 72;\nvar initialN = 128; // 0x80\nvar delimiter = '-'; // '\\x2D'\nvar regexNonASCII = /[^\\0-\\u007E]/; // non-ASCII chars\nvar regexSeparators = /[.\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\nvar OVERFLOW_ERROR = 'Overflow: input needs wider integers to process';\nvar baseMinusTMin = base - tMin;\nvar floor = Math.floor;\nvar stringFromCharCode = String.fromCharCode;\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n */\nvar ucs2decode = function (string) {\n  var output = [];\n  var counter = 0;\n  var length = string.length;\n  while (counter < length) {\n    var value = string.charCodeAt(counter++);\n    if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n      // It's a high surrogate, and there is a next character.\n      var extra = string.charCodeAt(counter++);\n      if ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n        output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n      } else {\n        // It's an unmatched surrogate; only append this code unit, in case the\n        // next code unit is the high surrogate of a surrogate pair.\n        output.push(value);\n        counter--;\n      }\n    } else {\n      output.push(value);\n    }\n  }\n  return output;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n */\nvar digitToBasic = function (digit) {\n  //  0..25 map to ASCII a..z or A..Z\n  // 26..35 map to ASCII 0..9\n  return digit + 22 + 75 * (digit < 26);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n */\nvar adapt = function (delta, numPoints, firstTime) {\n  var k = 0;\n  delta = firstTime ? floor(delta / damp) : delta >> 1;\n  delta += floor(delta / numPoints);\n  for (; delta > baseMinusTMin * tMax >> 1; k += base) {\n    delta = floor(delta / baseMinusTMin);\n  }\n  return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n */\n// eslint-disable-next-line max-statements -- TODO\nvar encode = function (input) {\n  var output = [];\n\n  // Convert the input in UCS-2 to an array of Unicode code points.\n  input = ucs2decode(input);\n\n  // Cache the length.\n  var inputLength = input.length;\n\n  // Initialize the state.\n  var n = initialN;\n  var delta = 0;\n  var bias = initialBias;\n  var i, currentValue;\n\n  // Handle the basic code points.\n  for (i = 0; i < input.length; i++) {\n    currentValue = input[i];\n    if (currentValue < 0x80) {\n      output.push(stringFromCharCode(currentValue));\n    }\n  }\n\n  var basicLength = output.length; // number of basic code points.\n  var handledCPCount = basicLength; // number of code points that have been handled;\n\n  // Finish the basic string with a delimiter unless it's empty.\n  if (basicLength) {\n    output.push(delimiter);\n  }\n\n  // Main encoding loop:\n  while (handledCPCount < inputLength) {\n    // All non-basic code points < n have been handled already. Find the next larger one:\n    var m = maxInt;\n    for (i = 0; i < input.length; i++) {\n      currentValue = input[i];\n      if (currentValue >= n && currentValue < m) {\n        m = currentValue;\n      }\n    }\n\n    // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>, but guard against overflow.\n    var handledCPCountPlusOne = handledCPCount + 1;\n    if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n      throw RangeError(OVERFLOW_ERROR);\n    }\n\n    delta += (m - n) * handledCPCountPlusOne;\n    n = m;\n\n    for (i = 0; i < input.length; i++) {\n      currentValue = input[i];\n      if (currentValue < n && ++delta > maxInt) {\n        throw RangeError(OVERFLOW_ERROR);\n      }\n      if (currentValue == n) {\n        // Represent delta as a generalized variable-length integer.\n        var q = delta;\n        for (var k = base; /* no condition */; k += base) {\n          var t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n          if (q < t) break;\n          var qMinusT = q - t;\n          var baseMinusT = base - t;\n          output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT)));\n          q = floor(qMinusT / baseMinusT);\n        }\n\n        output.push(stringFromCharCode(digitToBasic(q)));\n        bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n        delta = 0;\n        ++handledCPCount;\n      }\n    }\n\n    ++delta;\n    ++n;\n  }\n  return output.join('');\n};\n\nmodule.exports = function (input) {\n  var encoded = [];\n  var labels = input.toLowerCase().replace(regexSeparators, '\\u002E').split('.');\n  var i, label;\n  for (i = 0; i < labels.length; i++) {\n    label = labels[i];\n    encoded.push(regexNonASCII.test(label) ? 'xn--' + encode(label) : label);\n  }\n  return encoded.join('.');\n};\n\n\n/***/ }),\n\n/***/ 6091:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar fails = __webpack_require__(7293);\nvar whitespaces = __webpack_require__(1361);\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n  return fails(function () {\n    return !!whitespaces[METHOD_NAME]() || non[METHOD_NAME]() != non || whitespaces[METHOD_NAME].name !== METHOD_NAME;\n  });\n};\n\n\n/***/ }),\n\n/***/ 3111:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar requireObjectCoercible = __webpack_require__(4488);\nvar whitespaces = __webpack_require__(1361);\n\nvar whitespace = '[' + whitespaces + ']';\nvar ltrim = RegExp('^' + whitespace + whitespace + '*');\nvar rtrim = RegExp(whitespace + whitespace + '*$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n  return function ($this) {\n    var string = String(requireObjectCoercible($this));\n    if (TYPE & 1) string = string.replace(ltrim, '');\n    if (TYPE & 2) string = string.replace(rtrim, '');\n    return string;\n  };\n};\n\nmodule.exports = {\n  // `String.prototype.{ trimLeft, trimStart }` methods\n  // https://tc39.es/ecma262/#sec-string.prototype.trimstart\n  start: createMethod(1),\n  // `String.prototype.{ trimRight, trimEnd }` methods\n  // https://tc39.es/ecma262/#sec-string.prototype.trimend\n  end: createMethod(2),\n  // `String.prototype.trim` method\n  // https://tc39.es/ecma262/#sec-string.prototype.trim\n  trim: createMethod(3)\n};\n\n\n/***/ }),\n\n/***/ 1400:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(9958);\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n  var integer = toInteger(index);\n  return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n\n\n/***/ }),\n\n/***/ 7067:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(9958);\nvar toLength = __webpack_require__(7466);\n\n// `ToIndex` abstract operation\n// https://tc39.es/ecma262/#sec-toindex\nmodule.exports = function (it) {\n  if (it === undefined) return 0;\n  var number = toInteger(it);\n  var length = toLength(number);\n  if (number !== length) throw RangeError('Wrong length or index');\n  return length;\n};\n\n\n/***/ }),\n\n/***/ 5656:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = __webpack_require__(8361);\nvar requireObjectCoercible = __webpack_require__(4488);\n\nmodule.exports = function (it) {\n  return IndexedObject(requireObjectCoercible(it));\n};\n\n\n/***/ }),\n\n/***/ 9958:\n/***/ (function(module) {\n\nvar ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToInteger` abstract operation\n// https://tc39.es/ecma262/#sec-tointeger\nmodule.exports = function (argument) {\n  return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);\n};\n\n\n/***/ }),\n\n/***/ 7466:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(9958);\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n  return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n\n\n/***/ }),\n\n/***/ 7908:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar requireObjectCoercible = __webpack_require__(4488);\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n  return Object(requireObjectCoercible(argument));\n};\n\n\n/***/ }),\n\n/***/ 4590:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toPositiveInteger = __webpack_require__(3002);\n\nmodule.exports = function (it, BYTES) {\n  var offset = toPositiveInteger(it);\n  if (offset % BYTES) throw RangeError('Wrong offset');\n  return offset;\n};\n\n\n/***/ }),\n\n/***/ 3002:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(9958);\n\nmodule.exports = function (it) {\n  var result = toInteger(it);\n  if (result < 0) throw RangeError(\"The argument can't be less than 0\");\n  return result;\n};\n\n\n/***/ }),\n\n/***/ 7593:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(111);\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (input, PREFERRED_STRING) {\n  if (!isObject(input)) return input;\n  var fn, val;\n  if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n  if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val;\n  if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n\n\n/***/ }),\n\n/***/ 1694:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n\n\n/***/ }),\n\n/***/ 9843:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar global = __webpack_require__(7854);\nvar DESCRIPTORS = __webpack_require__(9781);\nvar TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS = __webpack_require__(3832);\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar ArrayBufferModule = __webpack_require__(3331);\nvar anInstance = __webpack_require__(5787);\nvar createPropertyDescriptor = __webpack_require__(9114);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar toLength = __webpack_require__(7466);\nvar toIndex = __webpack_require__(7067);\nvar toOffset = __webpack_require__(4590);\nvar toPrimitive = __webpack_require__(7593);\nvar has = __webpack_require__(6656);\nvar classof = __webpack_require__(648);\nvar isObject = __webpack_require__(111);\nvar create = __webpack_require__(30);\nvar setPrototypeOf = __webpack_require__(7674);\nvar getOwnPropertyNames = __webpack_require__(8006).f;\nvar typedArrayFrom = __webpack_require__(7321);\nvar forEach = __webpack_require__(2092).forEach;\nvar setSpecies = __webpack_require__(6340);\nvar definePropertyModule = __webpack_require__(3070);\nvar getOwnPropertyDescriptorModule = __webpack_require__(1236);\nvar InternalStateModule = __webpack_require__(9909);\nvar inheritIfRequired = __webpack_require__(9587);\n\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar round = Math.round;\nvar RangeError = global.RangeError;\nvar ArrayBuffer = ArrayBufferModule.ArrayBuffer;\nvar DataView = ArrayBufferModule.DataView;\nvar NATIVE_ARRAY_BUFFER_VIEWS = ArrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS;\nvar TYPED_ARRAY_TAG = ArrayBufferViewCore.TYPED_ARRAY_TAG;\nvar TypedArray = ArrayBufferViewCore.TypedArray;\nvar TypedArrayPrototype = ArrayBufferViewCore.TypedArrayPrototype;\nvar aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;\nvar isTypedArray = ArrayBufferViewCore.isTypedArray;\nvar BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\nvar WRONG_LENGTH = 'Wrong length';\n\nvar fromList = function (C, list) {\n  var index = 0;\n  var length = list.length;\n  var result = new (aTypedArrayConstructor(C))(length);\n  while (length > index) result[index] = list[index++];\n  return result;\n};\n\nvar addGetter = function (it, key) {\n  nativeDefineProperty(it, key, { get: function () {\n    return getInternalState(this)[key];\n  } });\n};\n\nvar isArrayBuffer = function (it) {\n  var klass;\n  return it instanceof ArrayBuffer || (klass = classof(it)) == 'ArrayBuffer' || klass == 'SharedArrayBuffer';\n};\n\nvar isTypedArrayIndex = function (target, key) {\n  return isTypedArray(target)\n    && typeof key != 'symbol'\n    && key in target\n    && String(+key) == String(key);\n};\n\nvar wrappedGetOwnPropertyDescriptor = function getOwnPropertyDescriptor(target, key) {\n  return isTypedArrayIndex(target, key = toPrimitive(key, true))\n    ? createPropertyDescriptor(2, target[key])\n    : nativeGetOwnPropertyDescriptor(target, key);\n};\n\nvar wrappedDefineProperty = function defineProperty(target, key, descriptor) {\n  if (isTypedArrayIndex(target, key = toPrimitive(key, true))\n    && isObject(descriptor)\n    && has(descriptor, 'value')\n    && !has(descriptor, 'get')\n    && !has(descriptor, 'set')\n    // TODO: add validation descriptor w/o calling accessors\n    && !descriptor.configurable\n    && (!has(descriptor, 'writable') || descriptor.writable)\n    && (!has(descriptor, 'enumerable') || descriptor.enumerable)\n  ) {\n    target[key] = descriptor.value;\n    return target;\n  } return nativeDefineProperty(target, key, descriptor);\n};\n\nif (DESCRIPTORS) {\n  if (!NATIVE_ARRAY_BUFFER_VIEWS) {\n    getOwnPropertyDescriptorModule.f = wrappedGetOwnPropertyDescriptor;\n    definePropertyModule.f = wrappedDefineProperty;\n    addGetter(TypedArrayPrototype, 'buffer');\n    addGetter(TypedArrayPrototype, 'byteOffset');\n    addGetter(TypedArrayPrototype, 'byteLength');\n    addGetter(TypedArrayPrototype, 'length');\n  }\n\n  $({ target: 'Object', stat: true, forced: !NATIVE_ARRAY_BUFFER_VIEWS }, {\n    getOwnPropertyDescriptor: wrappedGetOwnPropertyDescriptor,\n    defineProperty: wrappedDefineProperty\n  });\n\n  module.exports = function (TYPE, wrapper, CLAMPED) {\n    var BYTES = TYPE.match(/\\d+$/)[0] / 8;\n    var CONSTRUCTOR_NAME = TYPE + (CLAMPED ? 'Clamped' : '') + 'Array';\n    var GETTER = 'get' + TYPE;\n    var SETTER = 'set' + TYPE;\n    var NativeTypedArrayConstructor = global[CONSTRUCTOR_NAME];\n    var TypedArrayConstructor = NativeTypedArrayConstructor;\n    var TypedArrayConstructorPrototype = TypedArrayConstructor && TypedArrayConstructor.prototype;\n    var exported = {};\n\n    var getter = function (that, index) {\n      var data = getInternalState(that);\n      return data.view[GETTER](index * BYTES + data.byteOffset, true);\n    };\n\n    var setter = function (that, index, value) {\n      var data = getInternalState(that);\n      if (CLAMPED) value = (value = round(value)) < 0 ? 0 : value > 0xFF ? 0xFF : value & 0xFF;\n      data.view[SETTER](index * BYTES + data.byteOffset, value, true);\n    };\n\n    var addElement = function (that, index) {\n      nativeDefineProperty(that, index, {\n        get: function () {\n          return getter(this, index);\n        },\n        set: function (value) {\n          return setter(this, index, value);\n        },\n        enumerable: true\n      });\n    };\n\n    if (!NATIVE_ARRAY_BUFFER_VIEWS) {\n      TypedArrayConstructor = wrapper(function (that, data, offset, $length) {\n        anInstance(that, TypedArrayConstructor, CONSTRUCTOR_NAME);\n        var index = 0;\n        var byteOffset = 0;\n        var buffer, byteLength, length;\n        if (!isObject(data)) {\n          length = toIndex(data);\n          byteLength = length * BYTES;\n          buffer = new ArrayBuffer(byteLength);\n        } else if (isArrayBuffer(data)) {\n          buffer = data;\n          byteOffset = toOffset(offset, BYTES);\n          var $len = data.byteLength;\n          if ($length === undefined) {\n            if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n            byteLength = $len - byteOffset;\n            if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n          } else {\n            byteLength = toLength($length) * BYTES;\n            if (byteLength + byteOffset > $len) throw RangeError(WRONG_LENGTH);\n          }\n          length = byteLength / BYTES;\n        } else if (isTypedArray(data)) {\n          return fromList(TypedArrayConstructor, data);\n        } else {\n          return typedArrayFrom.call(TypedArrayConstructor, data);\n        }\n        setInternalState(that, {\n          buffer: buffer,\n          byteOffset: byteOffset,\n          byteLength: byteLength,\n          length: length,\n          view: new DataView(buffer)\n        });\n        while (index < length) addElement(that, index++);\n      });\n\n      if (setPrototypeOf) setPrototypeOf(TypedArrayConstructor, TypedArray);\n      TypedArrayConstructorPrototype = TypedArrayConstructor.prototype = create(TypedArrayPrototype);\n    } else if (TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS) {\n      TypedArrayConstructor = wrapper(function (dummy, data, typedArrayOffset, $length) {\n        anInstance(dummy, TypedArrayConstructor, CONSTRUCTOR_NAME);\n        return inheritIfRequired(function () {\n          if (!isObject(data)) return new NativeTypedArrayConstructor(toIndex(data));\n          if (isArrayBuffer(data)) return $length !== undefined\n            ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES), $length)\n            : typedArrayOffset !== undefined\n              ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES))\n              : new NativeTypedArrayConstructor(data);\n          if (isTypedArray(data)) return fromList(TypedArrayConstructor, data);\n          return typedArrayFrom.call(TypedArrayConstructor, data);\n        }(), dummy, TypedArrayConstructor);\n      });\n\n      if (setPrototypeOf) setPrototypeOf(TypedArrayConstructor, TypedArray);\n      forEach(getOwnPropertyNames(NativeTypedArrayConstructor), function (key) {\n        if (!(key in TypedArrayConstructor)) {\n          createNonEnumerableProperty(TypedArrayConstructor, key, NativeTypedArrayConstructor[key]);\n        }\n      });\n      TypedArrayConstructor.prototype = TypedArrayConstructorPrototype;\n    }\n\n    if (TypedArrayConstructorPrototype.constructor !== TypedArrayConstructor) {\n      createNonEnumerableProperty(TypedArrayConstructorPrototype, 'constructor', TypedArrayConstructor);\n    }\n\n    if (TYPED_ARRAY_TAG) {\n      createNonEnumerableProperty(TypedArrayConstructorPrototype, TYPED_ARRAY_TAG, CONSTRUCTOR_NAME);\n    }\n\n    exported[CONSTRUCTOR_NAME] = TypedArrayConstructor;\n\n    $({\n      global: true, forced: TypedArrayConstructor != NativeTypedArrayConstructor, sham: !NATIVE_ARRAY_BUFFER_VIEWS\n    }, exported);\n\n    if (!(BYTES_PER_ELEMENT in TypedArrayConstructor)) {\n      createNonEnumerableProperty(TypedArrayConstructor, BYTES_PER_ELEMENT, BYTES);\n    }\n\n    if (!(BYTES_PER_ELEMENT in TypedArrayConstructorPrototype)) {\n      createNonEnumerableProperty(TypedArrayConstructorPrototype, BYTES_PER_ELEMENT, BYTES);\n    }\n\n    setSpecies(CONSTRUCTOR_NAME);\n  };\n} else module.exports = function () { /* empty */ };\n\n\n/***/ }),\n\n/***/ 3832:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n/* eslint-disable no-new -- required for testing */\nvar global = __webpack_require__(7854);\nvar fails = __webpack_require__(7293);\nvar checkCorrectnessOfIteration = __webpack_require__(7072);\nvar NATIVE_ARRAY_BUFFER_VIEWS = __webpack_require__(260).NATIVE_ARRAY_BUFFER_VIEWS;\n\nvar ArrayBuffer = global.ArrayBuffer;\nvar Int8Array = global.Int8Array;\n\nmodule.exports = !NATIVE_ARRAY_BUFFER_VIEWS || !fails(function () {\n  Int8Array(1);\n}) || !fails(function () {\n  new Int8Array(-1);\n}) || !checkCorrectnessOfIteration(function (iterable) {\n  new Int8Array();\n  new Int8Array(null);\n  new Int8Array(1.5);\n  new Int8Array(iterable);\n}, true) || fails(function () {\n  // Safari (11+) bug - a reason why even Safari 13 should load a typed array polyfill\n  return new Int8Array(new ArrayBuffer(2), 1, undefined).length !== 1;\n});\n\n\n/***/ }),\n\n/***/ 3074:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar aTypedArrayConstructor = __webpack_require__(260).aTypedArrayConstructor;\nvar speciesConstructor = __webpack_require__(6707);\n\nmodule.exports = function (instance, list) {\n  var C = speciesConstructor(instance, instance.constructor);\n  var index = 0;\n  var length = list.length;\n  var result = new (aTypedArrayConstructor(C))(length);\n  while (length > index) result[index] = list[index++];\n  return result;\n};\n\n\n/***/ }),\n\n/***/ 7321:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar toObject = __webpack_require__(7908);\nvar toLength = __webpack_require__(7466);\nvar getIteratorMethod = __webpack_require__(1246);\nvar isArrayIteratorMethod = __webpack_require__(7659);\nvar bind = __webpack_require__(9974);\nvar aTypedArrayConstructor = __webpack_require__(260).aTypedArrayConstructor;\n\nmodule.exports = function from(source /* , mapfn, thisArg */) {\n  var O = toObject(source);\n  var argumentsLength = arguments.length;\n  var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n  var mapping = mapfn !== undefined;\n  var iteratorMethod = getIteratorMethod(O);\n  var i, length, result, step, iterator, next;\n  if (iteratorMethod != undefined && !isArrayIteratorMethod(iteratorMethod)) {\n    iterator = iteratorMethod.call(O);\n    next = iterator.next;\n    O = [];\n    while (!(step = next.call(iterator)).done) {\n      O.push(step.value);\n    }\n  }\n  if (mapping && argumentsLength > 2) {\n    mapfn = bind(mapfn, arguments[2], 2);\n  }\n  length = toLength(O.length);\n  result = new (aTypedArrayConstructor(this))(length);\n  for (i = 0; length > i; i++) {\n    result[i] = mapping ? mapfn(O[i], i) : O[i];\n  }\n  return result;\n};\n\n\n/***/ }),\n\n/***/ 9711:\n/***/ (function(module) {\n\nvar id = 0;\nvar postfix = Math.random();\n\nmodule.exports = function (key) {\n  return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36);\n};\n\n\n/***/ }),\n\n/***/ 3307:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar NATIVE_SYMBOL = __webpack_require__(133);\n\nmodule.exports = NATIVE_SYMBOL\n  /* global Symbol -- safe */\n  && !Symbol.sham\n  && typeof Symbol.iterator == 'symbol';\n\n\n/***/ }),\n\n/***/ 5112:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar shared = __webpack_require__(2309);\nvar has = __webpack_require__(6656);\nvar uid = __webpack_require__(9711);\nvar NATIVE_SYMBOL = __webpack_require__(133);\nvar USE_SYMBOL_AS_UID = __webpack_require__(3307);\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n  if (!has(WellKnownSymbolsStore, name)) {\n    if (NATIVE_SYMBOL && has(Symbol, name)) WellKnownSymbolsStore[name] = Symbol[name];\n    else WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name);\n  } return WellKnownSymbolsStore[name];\n};\n\n\n/***/ }),\n\n/***/ 1361:\n/***/ (function(module) {\n\n// a string of all valid unicode whitespaces\nmodule.exports = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002' +\n  '\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n\n\n/***/ }),\n\n/***/ 8264:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar global = __webpack_require__(7854);\nvar arrayBufferModule = __webpack_require__(3331);\nvar setSpecies = __webpack_require__(6340);\n\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar ArrayBuffer = arrayBufferModule[ARRAY_BUFFER];\nvar NativeArrayBuffer = global[ARRAY_BUFFER];\n\n// `ArrayBuffer` constructor\n// https://tc39.es/ecma262/#sec-arraybuffer-constructor\n$({ global: true, forced: NativeArrayBuffer !== ArrayBuffer }, {\n  ArrayBuffer: ArrayBuffer\n});\n\nsetSpecies(ARRAY_BUFFER);\n\n\n/***/ }),\n\n/***/ 2222:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar fails = __webpack_require__(7293);\nvar isArray = __webpack_require__(3157);\nvar isObject = __webpack_require__(111);\nvar toObject = __webpack_require__(7908);\nvar toLength = __webpack_require__(7466);\nvar createProperty = __webpack_require__(6135);\nvar arraySpeciesCreate = __webpack_require__(5417);\nvar arrayMethodHasSpeciesSupport = __webpack_require__(1194);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar V8_VERSION = __webpack_require__(7392);\n\nvar IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded';\n\n// We can't use this feature detection in V8 since it causes\n// deoptimization and serious performance degradation\n// https://github.com/zloirock/core-js/issues/679\nvar IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () {\n  var array = [];\n  array[IS_CONCAT_SPREADABLE] = false;\n  return array.concat()[0] !== array;\n});\n\nvar SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat');\n\nvar isConcatSpreadable = function (O) {\n  if (!isObject(O)) return false;\n  var spreadable = O[IS_CONCAT_SPREADABLE];\n  return spreadable !== undefined ? !!spreadable : isArray(O);\n};\n\nvar FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;\n\n// `Array.prototype.concat` method\n// https://tc39.es/ecma262/#sec-array.prototype.concat\n// with adding support of @@isConcatSpreadable and @@species\n$({ target: 'Array', proto: true, forced: FORCED }, {\n  // eslint-disable-next-line no-unused-vars -- required for `.length`\n  concat: function concat(arg) {\n    var O = toObject(this);\n    var A = arraySpeciesCreate(O, 0);\n    var n = 0;\n    var i, k, length, len, E;\n    for (i = -1, length = arguments.length; i < length; i++) {\n      E = i === -1 ? O : arguments[i];\n      if (isConcatSpreadable(E)) {\n        len = toLength(E.length);\n        if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n        for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);\n      } else {\n        if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n        createProperty(A, n++, E);\n      }\n    }\n    A.length = n;\n    return A;\n  }\n});\n\n\n/***/ }),\n\n/***/ 7327:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar $filter = __webpack_require__(2092).filter;\nvar arrayMethodHasSpeciesSupport = __webpack_require__(1194);\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');\n\n// `Array.prototype.filter` method\n// https://tc39.es/ecma262/#sec-array.prototype.filter\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n  filter: function filter(callbackfn /* , thisArg */) {\n    return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\n\n/***/ }),\n\n/***/ 2772:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar $indexOf = __webpack_require__(1318).indexOf;\nvar arrayMethodIsStrict = __webpack_require__(9341);\n\nvar nativeIndexOf = [].indexOf;\n\nvar NEGATIVE_ZERO = !!nativeIndexOf && 1 / [1].indexOf(1, -0) < 0;\nvar STRICT_METHOD = arrayMethodIsStrict('indexOf');\n\n// `Array.prototype.indexOf` method\n// https://tc39.es/ecma262/#sec-array.prototype.indexof\n$({ target: 'Array', proto: true, forced: NEGATIVE_ZERO || !STRICT_METHOD }, {\n  indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n    return NEGATIVE_ZERO\n      // convert -0 to +0\n      ? nativeIndexOf.apply(this, arguments) || 0\n      : $indexOf(this, searchElement, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\n\n/***/ }),\n\n/***/ 6992:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar toIndexedObject = __webpack_require__(5656);\nvar addToUnscopables = __webpack_require__(1223);\nvar Iterators = __webpack_require__(7497);\nvar InternalStateModule = __webpack_require__(9909);\nvar defineIterator = __webpack_require__(654);\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.es/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.es/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.es/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.es/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n  setInternalState(this, {\n    type: ARRAY_ITERATOR,\n    target: toIndexedObject(iterated), // target\n    index: 0,                          // next index\n    kind: kind                         // kind\n  });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n  var state = getInternalState(this);\n  var target = state.target;\n  var kind = state.kind;\n  var index = state.index++;\n  if (!target || index >= target.length) {\n    state.target = undefined;\n    return { value: undefined, done: true };\n  }\n  if (kind == 'keys') return { value: index, done: false };\n  if (kind == 'values') return { value: target[index], done: false };\n  return { value: [index, target[index]], done: false };\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.es/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.es/ecma262/#sec-createmappedargumentsobject\nIterators.Arguments = Iterators.Array;\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n\n/***/ }),\n\n/***/ 1249:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar $map = __webpack_require__(2092).map;\nvar arrayMethodHasSpeciesSupport = __webpack_require__(1194);\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');\n\n// `Array.prototype.map` method\n// https://tc39.es/ecma262/#sec-array.prototype.map\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n  map: function map(callbackfn /* , thisArg */) {\n    return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\n\n/***/ }),\n\n/***/ 7042:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar isObject = __webpack_require__(111);\nvar isArray = __webpack_require__(3157);\nvar toAbsoluteIndex = __webpack_require__(1400);\nvar toLength = __webpack_require__(7466);\nvar toIndexedObject = __webpack_require__(5656);\nvar createProperty = __webpack_require__(6135);\nvar wellKnownSymbol = __webpack_require__(5112);\nvar arrayMethodHasSpeciesSupport = __webpack_require__(1194);\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice');\n\nvar SPECIES = wellKnownSymbol('species');\nvar nativeSlice = [].slice;\nvar max = Math.max;\n\n// `Array.prototype.slice` method\n// https://tc39.es/ecma262/#sec-array.prototype.slice\n// fallback for not array-like ES3 strings and DOM objects\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n  slice: function slice(start, end) {\n    var O = toIndexedObject(this);\n    var length = toLength(O.length);\n    var k = toAbsoluteIndex(start, length);\n    var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n    // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible\n    var Constructor, result, n;\n    if (isArray(O)) {\n      Constructor = O.constructor;\n      // cross-realm fallback\n      if (typeof Constructor == 'function' && (Constructor === Array || isArray(Constructor.prototype))) {\n        Constructor = undefined;\n      } else if (isObject(Constructor)) {\n        Constructor = Constructor[SPECIES];\n        if (Constructor === null) Constructor = undefined;\n      }\n      if (Constructor === Array || Constructor === undefined) {\n        return nativeSlice.call(O, k, fin);\n      }\n    }\n    result = new (Constructor === undefined ? Array : Constructor)(max(fin - k, 0));\n    for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);\n    result.length = n;\n    return result;\n  }\n});\n\n\n/***/ }),\n\n/***/ 561:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar toAbsoluteIndex = __webpack_require__(1400);\nvar toInteger = __webpack_require__(9958);\nvar toLength = __webpack_require__(7466);\nvar toObject = __webpack_require__(7908);\nvar arraySpeciesCreate = __webpack_require__(5417);\nvar createProperty = __webpack_require__(6135);\nvar arrayMethodHasSpeciesSupport = __webpack_require__(1194);\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('splice');\n\nvar max = Math.max;\nvar min = Math.min;\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_LENGTH_EXCEEDED = 'Maximum allowed length exceeded';\n\n// `Array.prototype.splice` method\n// https://tc39.es/ecma262/#sec-array.prototype.splice\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n  splice: function splice(start, deleteCount /* , ...items */) {\n    var O = toObject(this);\n    var len = toLength(O.length);\n    var actualStart = toAbsoluteIndex(start, len);\n    var argumentsLength = arguments.length;\n    var insertCount, actualDeleteCount, A, k, from, to;\n    if (argumentsLength === 0) {\n      insertCount = actualDeleteCount = 0;\n    } else if (argumentsLength === 1) {\n      insertCount = 0;\n      actualDeleteCount = len - actualStart;\n    } else {\n      insertCount = argumentsLength - 2;\n      actualDeleteCount = min(max(toInteger(deleteCount), 0), len - actualStart);\n    }\n    if (len + insertCount - actualDeleteCount > MAX_SAFE_INTEGER) {\n      throw TypeError(MAXIMUM_ALLOWED_LENGTH_EXCEEDED);\n    }\n    A = arraySpeciesCreate(O, actualDeleteCount);\n    for (k = 0; k < actualDeleteCount; k++) {\n      from = actualStart + k;\n      if (from in O) createProperty(A, k, O[from]);\n    }\n    A.length = actualDeleteCount;\n    if (insertCount < actualDeleteCount) {\n      for (k = actualStart; k < len - actualDeleteCount; k++) {\n        from = k + actualDeleteCount;\n        to = k + insertCount;\n        if (from in O) O[to] = O[from];\n        else delete O[to];\n      }\n      for (k = len; k > len - actualDeleteCount + insertCount; k--) delete O[k - 1];\n    } else if (insertCount > actualDeleteCount) {\n      for (k = len - actualDeleteCount; k > actualStart; k--) {\n        from = k + actualDeleteCount - 1;\n        to = k + insertCount - 1;\n        if (from in O) O[to] = O[from];\n        else delete O[to];\n      }\n    }\n    for (k = 0; k < insertCount; k++) {\n      O[k + actualStart] = arguments[k + 2];\n    }\n    O.length = len - actualDeleteCount + insertCount;\n    return A;\n  }\n});\n\n\n/***/ }),\n\n/***/ 8309:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(9781);\nvar defineProperty = __webpack_require__(3070).f;\n\nvar FunctionPrototype = Function.prototype;\nvar FunctionPrototypeToString = FunctionPrototype.toString;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// Function instances `.name` property\n// https://tc39.es/ecma262/#sec-function-instances-name\nif (DESCRIPTORS && !(NAME in FunctionPrototype)) {\n  defineProperty(FunctionPrototype, NAME, {\n    configurable: true,\n    get: function () {\n      try {\n        return FunctionPrototypeToString.call(this).match(nameRE)[1];\n      } catch (error) {\n        return '';\n      }\n    }\n  });\n}\n\n\n/***/ }),\n\n/***/ 489:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar $ = __webpack_require__(2109);\nvar fails = __webpack_require__(7293);\nvar toObject = __webpack_require__(7908);\nvar nativeGetPrototypeOf = __webpack_require__(9518);\nvar CORRECT_PROTOTYPE_GETTER = __webpack_require__(8544);\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetPrototypeOf(1); });\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !CORRECT_PROTOTYPE_GETTER }, {\n  getPrototypeOf: function getPrototypeOf(it) {\n    return nativeGetPrototypeOf(toObject(it));\n  }\n});\n\n\n\n/***/ }),\n\n/***/ 1539:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar TO_STRING_TAG_SUPPORT = __webpack_require__(1694);\nvar redefine = __webpack_require__(1320);\nvar toString = __webpack_require__(288);\n\n// `Object.prototype.toString` method\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nif (!TO_STRING_TAG_SUPPORT) {\n  redefine(Object.prototype, 'toString', toString, { unsafe: true });\n}\n\n\n/***/ }),\n\n/***/ 4916:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar exec = __webpack_require__(2261);\n\n// `RegExp.prototype.exec` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.exec\n$({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, {\n  exec: exec\n});\n\n\n/***/ }),\n\n/***/ 9714:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar redefine = __webpack_require__(1320);\nvar anObject = __webpack_require__(9670);\nvar fails = __webpack_require__(7293);\nvar flags = __webpack_require__(7066);\n\nvar TO_STRING = 'toString';\nvar RegExpPrototype = RegExp.prototype;\nvar nativeToString = RegExpPrototype[TO_STRING];\n\nvar NOT_GENERIC = fails(function () { return nativeToString.call({ source: 'a', flags: 'b' }) != '/a/b'; });\n// FF44- RegExp#toString has a wrong name\nvar INCORRECT_NAME = nativeToString.name != TO_STRING;\n\n// `RegExp.prototype.toString` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.tostring\nif (NOT_GENERIC || INCORRECT_NAME) {\n  redefine(RegExp.prototype, TO_STRING, function toString() {\n    var R = anObject(this);\n    var p = String(R.source);\n    var rf = R.flags;\n    var f = String(rf === undefined && R instanceof RegExp && !('flags' in RegExpPrototype) ? flags.call(R) : rf);\n    return '/' + p + '/' + f;\n  }, { unsafe: true });\n}\n\n\n/***/ }),\n\n/***/ 8783:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar charAt = __webpack_require__(8710).charAt;\nvar InternalStateModule = __webpack_require__(9909);\nvar defineIterator = __webpack_require__(654);\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n  setInternalState(this, {\n    type: STRING_ITERATOR,\n    string: String(iterated),\n    index: 0\n  });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n  var state = getInternalState(this);\n  var string = state.string;\n  var index = state.index;\n  var point;\n  if (index >= string.length) return { value: undefined, done: true };\n  point = charAt(string, index);\n  state.index += point.length;\n  return { value: point, done: false };\n});\n\n\n/***/ }),\n\n/***/ 4723:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar fixRegExpWellKnownSymbolLogic = __webpack_require__(7007);\nvar anObject = __webpack_require__(9670);\nvar toLength = __webpack_require__(7466);\nvar requireObjectCoercible = __webpack_require__(4488);\nvar advanceStringIndex = __webpack_require__(1530);\nvar regExpExec = __webpack_require__(7651);\n\n// @@match logic\nfixRegExpWellKnownSymbolLogic('match', 1, function (MATCH, nativeMatch, maybeCallNative) {\n  return [\n    // `String.prototype.match` method\n    // https://tc39.es/ecma262/#sec-string.prototype.match\n    function match(regexp) {\n      var O = requireObjectCoercible(this);\n      var matcher = regexp == undefined ? undefined : regexp[MATCH];\n      return matcher !== undefined ? matcher.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n    },\n    // `RegExp.prototype[@@match]` method\n    // https://tc39.es/ecma262/#sec-regexp.prototype-@@match\n    function (regexp) {\n      var res = maybeCallNative(nativeMatch, regexp, this);\n      if (res.done) return res.value;\n\n      var rx = anObject(regexp);\n      var S = String(this);\n\n      if (!rx.global) return regExpExec(rx, S);\n\n      var fullUnicode = rx.unicode;\n      rx.lastIndex = 0;\n      var A = [];\n      var n = 0;\n      var result;\n      while ((result = regExpExec(rx, S)) !== null) {\n        var matchStr = String(result[0]);\n        A[n] = matchStr;\n        if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n        n++;\n      }\n      return n === 0 ? null : A;\n    }\n  ];\n});\n\n\n/***/ }),\n\n/***/ 5306:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar fixRegExpWellKnownSymbolLogic = __webpack_require__(7007);\nvar anObject = __webpack_require__(9670);\nvar toLength = __webpack_require__(7466);\nvar toInteger = __webpack_require__(9958);\nvar requireObjectCoercible = __webpack_require__(4488);\nvar advanceStringIndex = __webpack_require__(1530);\nvar getSubstitution = __webpack_require__(647);\nvar regExpExec = __webpack_require__(7651);\n\nvar max = Math.max;\nvar min = Math.min;\n\nvar maybeToString = function (it) {\n  return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nfixRegExpWellKnownSymbolLogic('replace', 2, function (REPLACE, nativeReplace, maybeCallNative, reason) {\n  var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = reason.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE;\n  var REPLACE_KEEPS_$0 = reason.REPLACE_KEEPS_$0;\n  var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0';\n\n  return [\n    // `String.prototype.replace` method\n    // https://tc39.es/ecma262/#sec-string.prototype.replace\n    function replace(searchValue, replaceValue) {\n      var O = requireObjectCoercible(this);\n      var replacer = searchValue == undefined ? undefined : searchValue[REPLACE];\n      return replacer !== undefined\n        ? replacer.call(searchValue, O, replaceValue)\n        : nativeReplace.call(String(O), searchValue, replaceValue);\n    },\n    // `RegExp.prototype[@@replace]` method\n    // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace\n    function (regexp, replaceValue) {\n      if (\n        (!REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE && REPLACE_KEEPS_$0) ||\n        (typeof replaceValue === 'string' && replaceValue.indexOf(UNSAFE_SUBSTITUTE) === -1)\n      ) {\n        var res = maybeCallNative(nativeReplace, regexp, this, replaceValue);\n        if (res.done) return res.value;\n      }\n\n      var rx = anObject(regexp);\n      var S = String(this);\n\n      var functionalReplace = typeof replaceValue === 'function';\n      if (!functionalReplace) replaceValue = String(replaceValue);\n\n      var global = rx.global;\n      if (global) {\n        var fullUnicode = rx.unicode;\n        rx.lastIndex = 0;\n      }\n      var results = [];\n      while (true) {\n        var result = regExpExec(rx, S);\n        if (result === null) break;\n\n        results.push(result);\n        if (!global) break;\n\n        var matchStr = String(result[0]);\n        if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n      }\n\n      var accumulatedResult = '';\n      var nextSourcePosition = 0;\n      for (var i = 0; i < results.length; i++) {\n        result = results[i];\n\n        var matched = String(result[0]);\n        var position = max(min(toInteger(result.index), S.length), 0);\n        var captures = [];\n        // NOTE: This is equivalent to\n        //   captures = result.slice(1).map(maybeToString)\n        // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n        // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n        // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n        for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n        var namedCaptures = result.groups;\n        if (functionalReplace) {\n          var replacerArgs = [matched].concat(captures, position, S);\n          if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n          var replacement = String(replaceValue.apply(undefined, replacerArgs));\n        } else {\n          replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n        }\n        if (position >= nextSourcePosition) {\n          accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n          nextSourcePosition = position + matched.length;\n        }\n      }\n      return accumulatedResult + S.slice(nextSourcePosition);\n    }\n  ];\n});\n\n\n/***/ }),\n\n/***/ 3123:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar fixRegExpWellKnownSymbolLogic = __webpack_require__(7007);\nvar isRegExp = __webpack_require__(7850);\nvar anObject = __webpack_require__(9670);\nvar requireObjectCoercible = __webpack_require__(4488);\nvar speciesConstructor = __webpack_require__(6707);\nvar advanceStringIndex = __webpack_require__(1530);\nvar toLength = __webpack_require__(7466);\nvar callRegExpExec = __webpack_require__(7651);\nvar regexpExec = __webpack_require__(2261);\nvar fails = __webpack_require__(7293);\n\nvar arrayPush = [].push;\nvar min = Math.min;\nvar MAX_UINT32 = 0xFFFFFFFF;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { return !RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\nfixRegExpWellKnownSymbolLogic('split', 2, function (SPLIT, nativeSplit, maybeCallNative) {\n  var internalSplit;\n  if (\n    'abbc'.split(/(b)*/)[1] == 'c' ||\n    // eslint-disable-next-line regexp/no-empty-group -- required for testing\n    'test'.split(/(?:)/, -1).length != 4 ||\n    'ab'.split(/(?:ab)*/).length != 2 ||\n    '.'.split(/(.?)(.?)/).length != 4 ||\n    // eslint-disable-next-line regexp/no-assertion-capturing-group, regexp/no-empty-group -- required for testing\n    '.'.split(/()()/).length > 1 ||\n    ''.split(/.?/).length\n  ) {\n    // based on es5-shim implementation, need to rework it\n    internalSplit = function (separator, limit) {\n      var string = String(requireObjectCoercible(this));\n      var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n      if (lim === 0) return [];\n      if (separator === undefined) return [string];\n      // If `separator` is not a regex, use native split\n      if (!isRegExp(separator)) {\n        return nativeSplit.call(string, separator, lim);\n      }\n      var output = [];\n      var flags = (separator.ignoreCase ? 'i' : '') +\n                  (separator.multiline ? 'm' : '') +\n                  (separator.unicode ? 'u' : '') +\n                  (separator.sticky ? 'y' : '');\n      var lastLastIndex = 0;\n      // Make `global` and avoid `lastIndex` issues by working with a copy\n      var separatorCopy = new RegExp(separator.source, flags + 'g');\n      var match, lastIndex, lastLength;\n      while (match = regexpExec.call(separatorCopy, string)) {\n        lastIndex = separatorCopy.lastIndex;\n        if (lastIndex > lastLastIndex) {\n          output.push(string.slice(lastLastIndex, match.index));\n          if (match.length > 1 && match.index < string.length) arrayPush.apply(output, match.slice(1));\n          lastLength = match[0].length;\n          lastLastIndex = lastIndex;\n          if (output.length >= lim) break;\n        }\n        if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop\n      }\n      if (lastLastIndex === string.length) {\n        if (lastLength || !separatorCopy.test('')) output.push('');\n      } else output.push(string.slice(lastLastIndex));\n      return output.length > lim ? output.slice(0, lim) : output;\n    };\n  // Chakra, V8\n  } else if ('0'.split(undefined, 0).length) {\n    internalSplit = function (separator, limit) {\n      return separator === undefined && limit === 0 ? [] : nativeSplit.call(this, separator, limit);\n    };\n  } else internalSplit = nativeSplit;\n\n  return [\n    // `String.prototype.split` method\n    // https://tc39.es/ecma262/#sec-string.prototype.split\n    function split(separator, limit) {\n      var O = requireObjectCoercible(this);\n      var splitter = separator == undefined ? undefined : separator[SPLIT];\n      return splitter !== undefined\n        ? splitter.call(separator, O, limit)\n        : internalSplit.call(String(O), separator, limit);\n    },\n    // `RegExp.prototype[@@split]` method\n    // https://tc39.es/ecma262/#sec-regexp.prototype-@@split\n    //\n    // NOTE: This cannot be properly polyfilled in engines that don't support\n    // the 'y' flag.\n    function (regexp, limit) {\n      var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== nativeSplit);\n      if (res.done) return res.value;\n\n      var rx = anObject(regexp);\n      var S = String(this);\n      var C = speciesConstructor(rx, RegExp);\n\n      var unicodeMatching = rx.unicode;\n      var flags = (rx.ignoreCase ? 'i' : '') +\n                  (rx.multiline ? 'm' : '') +\n                  (rx.unicode ? 'u' : '') +\n                  (SUPPORTS_Y ? 'y' : 'g');\n\n      // ^(? + rx + ) is needed, in combination with some S slicing, to\n      // simulate the 'y' flag.\n      var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n      var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n      if (lim === 0) return [];\n      if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n      var p = 0;\n      var q = 0;\n      var A = [];\n      while (q < S.length) {\n        splitter.lastIndex = SUPPORTS_Y ? q : 0;\n        var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n        var e;\n        if (\n          z === null ||\n          (e = min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n        ) {\n          q = advanceStringIndex(S, q, unicodeMatching);\n        } else {\n          A.push(S.slice(p, q));\n          if (A.length === lim) return A;\n          for (var i = 1; i <= z.length - 1; i++) {\n            A.push(z[i]);\n            if (A.length === lim) return A;\n          }\n          q = p = e;\n        }\n      }\n      A.push(S.slice(p));\n      return A;\n    }\n  ];\n}, !SUPPORTS_Y);\n\n\n/***/ }),\n\n/***/ 3210:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(2109);\nvar $trim = __webpack_require__(3111).trim;\nvar forcedStringTrimMethod = __webpack_require__(6091);\n\n// `String.prototype.trim` method\n// https://tc39.es/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n  trim: function trim() {\n    return $trim(this);\n  }\n});\n\n\n/***/ }),\n\n/***/ 2990:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar $copyWithin = __webpack_require__(1048);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.copyWithin` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.copywithin\nexportTypedArrayMethod('copyWithin', function copyWithin(target, start /* , end */) {\n  return $copyWithin.call(aTypedArray(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 8927:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar $every = __webpack_require__(2092).every;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.every` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.every\nexportTypedArrayMethod('every', function every(callbackfn /* , thisArg */) {\n  return $every(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 3105:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar $fill = __webpack_require__(1285);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.fill` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.fill\n// eslint-disable-next-line no-unused-vars -- required for `.length`\nexportTypedArrayMethod('fill', function fill(value /* , start, end */) {\n  return $fill.apply(aTypedArray(this), arguments);\n});\n\n\n/***/ }),\n\n/***/ 5035:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar $filter = __webpack_require__(2092).filter;\nvar fromSpeciesAndList = __webpack_require__(3074);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.filter` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.filter\nexportTypedArrayMethod('filter', function filter(callbackfn /* , thisArg */) {\n  var list = $filter(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  return fromSpeciesAndList(this, list);\n});\n\n\n/***/ }),\n\n/***/ 7174:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar $findIndex = __webpack_require__(2092).findIndex;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.findIndex` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.findindex\nexportTypedArrayMethod('findIndex', function findIndex(predicate /* , thisArg */) {\n  return $findIndex(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 4345:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar $find = __webpack_require__(2092).find;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.find` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.find\nexportTypedArrayMethod('find', function find(predicate /* , thisArg */) {\n  return $find(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 2846:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar $forEach = __webpack_require__(2092).forEach;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.forEach` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.foreach\nexportTypedArrayMethod('forEach', function forEach(callbackfn /* , thisArg */) {\n  $forEach(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 4731:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar $includes = __webpack_require__(1318).includes;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.includes` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.includes\nexportTypedArrayMethod('includes', function includes(searchElement /* , fromIndex */) {\n  return $includes(aTypedArray(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 7209:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar $indexOf = __webpack_require__(1318).indexOf;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.indexOf` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.indexof\nexportTypedArrayMethod('indexOf', function indexOf(searchElement /* , fromIndex */) {\n  return $indexOf(aTypedArray(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 6319:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar global = __webpack_require__(7854);\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar ArrayIterators = __webpack_require__(6992);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar Uint8Array = global.Uint8Array;\nvar arrayValues = ArrayIterators.values;\nvar arrayKeys = ArrayIterators.keys;\nvar arrayEntries = ArrayIterators.entries;\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar nativeTypedArrayIterator = Uint8Array && Uint8Array.prototype[ITERATOR];\n\nvar CORRECT_ITER_NAME = !!nativeTypedArrayIterator\n  && (nativeTypedArrayIterator.name == 'values' || nativeTypedArrayIterator.name == undefined);\n\nvar typedArrayValues = function values() {\n  return arrayValues.call(aTypedArray(this));\n};\n\n// `%TypedArray%.prototype.entries` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.entries\nexportTypedArrayMethod('entries', function entries() {\n  return arrayEntries.call(aTypedArray(this));\n});\n// `%TypedArray%.prototype.keys` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.keys\nexportTypedArrayMethod('keys', function keys() {\n  return arrayKeys.call(aTypedArray(this));\n});\n// `%TypedArray%.prototype.values` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.values\nexportTypedArrayMethod('values', typedArrayValues, !CORRECT_ITER_NAME);\n// `%TypedArray%.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype-@@iterator\nexportTypedArrayMethod(ITERATOR, typedArrayValues, !CORRECT_ITER_NAME);\n\n\n/***/ }),\n\n/***/ 8867:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar $join = [].join;\n\n// `%TypedArray%.prototype.join` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.join\n// eslint-disable-next-line no-unused-vars -- required for `.length`\nexportTypedArrayMethod('join', function join(separator) {\n  return $join.apply(aTypedArray(this), arguments);\n});\n\n\n/***/ }),\n\n/***/ 7789:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar $lastIndexOf = __webpack_require__(6583);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.lastIndexOf` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.lastindexof\n// eslint-disable-next-line no-unused-vars -- required for `.length`\nexportTypedArrayMethod('lastIndexOf', function lastIndexOf(searchElement /* , fromIndex */) {\n  return $lastIndexOf.apply(aTypedArray(this), arguments);\n});\n\n\n/***/ }),\n\n/***/ 3739:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar $map = __webpack_require__(2092).map;\nvar speciesConstructor = __webpack_require__(6707);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.map` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.map\nexportTypedArrayMethod('map', function map(mapfn /* , thisArg */) {\n  return $map(aTypedArray(this), mapfn, arguments.length > 1 ? arguments[1] : undefined, function (O, length) {\n    return new (aTypedArrayConstructor(speciesConstructor(O, O.constructor)))(length);\n  });\n});\n\n\n/***/ }),\n\n/***/ 4483:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar $reduceRight = __webpack_require__(3671).right;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.reduceRicht` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduceright\nexportTypedArrayMethod('reduceRight', function reduceRight(callbackfn /* , initialValue */) {\n  return $reduceRight(aTypedArray(this), callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 9368:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar $reduce = __webpack_require__(3671).left;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.reduce` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduce\nexportTypedArrayMethod('reduce', function reduce(callbackfn /* , initialValue */) {\n  return $reduce(aTypedArray(this), callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 2056:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar floor = Math.floor;\n\n// `%TypedArray%.prototype.reverse` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reverse\nexportTypedArrayMethod('reverse', function reverse() {\n  var that = this;\n  var length = aTypedArray(that).length;\n  var middle = floor(length / 2);\n  var index = 0;\n  var value;\n  while (index < middle) {\n    value = that[index];\n    that[index++] = that[--length];\n    that[length] = value;\n  } return that;\n});\n\n\n/***/ }),\n\n/***/ 3462:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar toLength = __webpack_require__(7466);\nvar toOffset = __webpack_require__(4590);\nvar toObject = __webpack_require__(7908);\nvar fails = __webpack_require__(7293);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\nvar FORCED = fails(function () {\n  /* global Int8Array -- safe */\n  new Int8Array(1).set({});\n});\n\n// `%TypedArray%.prototype.set` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.set\nexportTypedArrayMethod('set', function set(arrayLike /* , offset */) {\n  aTypedArray(this);\n  var offset = toOffset(arguments.length > 1 ? arguments[1] : undefined, 1);\n  var length = this.length;\n  var src = toObject(arrayLike);\n  var len = toLength(src.length);\n  var index = 0;\n  if (len + offset > length) throw RangeError('Wrong length');\n  while (index < len) this[offset + index] = src[index++];\n}, FORCED);\n\n\n/***/ }),\n\n/***/ 678:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar speciesConstructor = __webpack_require__(6707);\nvar fails = __webpack_require__(7293);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar $slice = [].slice;\n\nvar FORCED = fails(function () {\n  /* global Int8Array -- safe */\n  new Int8Array(1).slice();\n});\n\n// `%TypedArray%.prototype.slice` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.slice\nexportTypedArrayMethod('slice', function slice(start, end) {\n  var list = $slice.call(aTypedArray(this), start, end);\n  var C = speciesConstructor(this, this.constructor);\n  var index = 0;\n  var length = list.length;\n  var result = new (aTypedArrayConstructor(C))(length);\n  while (length > index) result[index] = list[index++];\n  return result;\n}, FORCED);\n\n\n/***/ }),\n\n/***/ 7462:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar $some = __webpack_require__(2092).some;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.some` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.some\nexportTypedArrayMethod('some', function some(callbackfn /* , thisArg */) {\n  return $some(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n});\n\n\n/***/ }),\n\n/***/ 3824:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar $sort = [].sort;\n\n// `%TypedArray%.prototype.sort` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.sort\nexportTypedArrayMethod('sort', function sort(comparefn) {\n  return $sort.call(aTypedArray(this), comparefn);\n});\n\n\n/***/ }),\n\n/***/ 5021:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar toLength = __webpack_require__(7466);\nvar toAbsoluteIndex = __webpack_require__(1400);\nvar speciesConstructor = __webpack_require__(6707);\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.subarray` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.subarray\nexportTypedArrayMethod('subarray', function subarray(begin, end) {\n  var O = aTypedArray(this);\n  var length = O.length;\n  var beginIndex = toAbsoluteIndex(begin, length);\n  return new (speciesConstructor(O, O.constructor))(\n    O.buffer,\n    O.byteOffset + beginIndex * O.BYTES_PER_ELEMENT,\n    toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - beginIndex)\n  );\n});\n\n\n/***/ }),\n\n/***/ 2974:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar global = __webpack_require__(7854);\nvar ArrayBufferViewCore = __webpack_require__(260);\nvar fails = __webpack_require__(7293);\n\nvar Int8Array = global.Int8Array;\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar $toLocaleString = [].toLocaleString;\nvar $slice = [].slice;\n\n// iOS Safari 6.x fails here\nvar TO_LOCALE_STRING_BUG = !!Int8Array && fails(function () {\n  $toLocaleString.call(new Int8Array(1));\n});\n\nvar FORCED = fails(function () {\n  return [1, 2].toLocaleString() != new Int8Array([1, 2]).toLocaleString();\n}) || !fails(function () {\n  Int8Array.prototype.toLocaleString.call([1, 2]);\n});\n\n// `%TypedArray%.prototype.toLocaleString` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.tolocalestring\nexportTypedArrayMethod('toLocaleString', function toLocaleString() {\n  return $toLocaleString.apply(TO_LOCALE_STRING_BUG ? $slice.call(aTypedArray(this)) : aTypedArray(this), arguments);\n}, FORCED);\n\n\n/***/ }),\n\n/***/ 5016:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\nvar exportTypedArrayMethod = __webpack_require__(260).exportTypedArrayMethod;\nvar fails = __webpack_require__(7293);\nvar global = __webpack_require__(7854);\n\nvar Uint8Array = global.Uint8Array;\nvar Uint8ArrayPrototype = Uint8Array && Uint8Array.prototype || {};\nvar arrayToString = [].toString;\nvar arrayJoin = [].join;\n\nif (fails(function () { arrayToString.call({}); })) {\n  arrayToString = function toString() {\n    return arrayJoin.call(this);\n  };\n}\n\nvar IS_NOT_ARRAY_METHOD = Uint8ArrayPrototype.toString != arrayToString;\n\n// `%TypedArray%.prototype.toString` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.tostring\nexportTypedArrayMethod('toString', arrayToString, IS_NOT_ARRAY_METHOD);\n\n\n/***/ }),\n\n/***/ 2472:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar createTypedArrayConstructor = __webpack_require__(9843);\n\n// `Uint8Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Uint8', function (init) {\n  return function Uint8Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n\n\n/***/ }),\n\n/***/ 4747:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar DOMIterables = __webpack_require__(8324);\nvar forEach = __webpack_require__(8533);\nvar createNonEnumerableProperty = __webpack_require__(8880);\n\nfor (var COLLECTION_NAME in DOMIterables) {\n  var Collection = global[COLLECTION_NAME];\n  var CollectionPrototype = Collection && Collection.prototype;\n  // some Chrome versions have non-configurable methods on DOMTokenList\n  if (CollectionPrototype && CollectionPrototype.forEach !== forEach) try {\n    createNonEnumerableProperty(CollectionPrototype, 'forEach', forEach);\n  } catch (error) {\n    CollectionPrototype.forEach = forEach;\n  }\n}\n\n\n/***/ }),\n\n/***/ 3948:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\nvar global = __webpack_require__(7854);\nvar DOMIterables = __webpack_require__(8324);\nvar ArrayIteratorMethods = __webpack_require__(6992);\nvar createNonEnumerableProperty = __webpack_require__(8880);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar ArrayValues = ArrayIteratorMethods.values;\n\nfor (var COLLECTION_NAME in DOMIterables) {\n  var Collection = global[COLLECTION_NAME];\n  var CollectionPrototype = Collection && Collection.prototype;\n  if (CollectionPrototype) {\n    // some Chrome versions have non-configurable methods on DOMTokenList\n    if (CollectionPrototype[ITERATOR] !== ArrayValues) try {\n      createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues);\n    } catch (error) {\n      CollectionPrototype[ITERATOR] = ArrayValues;\n    }\n    if (!CollectionPrototype[TO_STRING_TAG]) {\n      createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);\n    }\n    if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) {\n      // some Chrome versions have non-configurable methods on DOMTokenList\n      if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {\n        createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);\n      } catch (error) {\n        CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];\n      }\n    }\n  }\n}\n\n\n/***/ }),\n\n/***/ 1637:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`\n__webpack_require__(6992);\nvar $ = __webpack_require__(2109);\nvar getBuiltIn = __webpack_require__(5005);\nvar USE_NATIVE_URL = __webpack_require__(590);\nvar redefine = __webpack_require__(1320);\nvar redefineAll = __webpack_require__(2248);\nvar setToStringTag = __webpack_require__(8003);\nvar createIteratorConstructor = __webpack_require__(4994);\nvar InternalStateModule = __webpack_require__(9909);\nvar anInstance = __webpack_require__(5787);\nvar hasOwn = __webpack_require__(6656);\nvar bind = __webpack_require__(9974);\nvar classof = __webpack_require__(648);\nvar anObject = __webpack_require__(9670);\nvar isObject = __webpack_require__(111);\nvar create = __webpack_require__(30);\nvar createPropertyDescriptor = __webpack_require__(9114);\nvar getIterator = __webpack_require__(8554);\nvar getIteratorMethod = __webpack_require__(1246);\nvar wellKnownSymbol = __webpack_require__(5112);\n\nvar $fetch = getBuiltIn('fetch');\nvar Headers = getBuiltIn('Headers');\nvar ITERATOR = wellKnownSymbol('iterator');\nvar URL_SEARCH_PARAMS = 'URLSearchParams';\nvar URL_SEARCH_PARAMS_ITERATOR = URL_SEARCH_PARAMS + 'Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalParamsState = InternalStateModule.getterFor(URL_SEARCH_PARAMS);\nvar getInternalIteratorState = InternalStateModule.getterFor(URL_SEARCH_PARAMS_ITERATOR);\n\nvar plus = /\\+/g;\nvar sequences = Array(4);\n\nvar percentSequence = function (bytes) {\n  return sequences[bytes - 1] || (sequences[bytes - 1] = RegExp('((?:%[\\\\da-f]{2}){' + bytes + '})', 'gi'));\n};\n\nvar percentDecode = function (sequence) {\n  try {\n    return decodeURIComponent(sequence);\n  } catch (error) {\n    return sequence;\n  }\n};\n\nvar deserialize = function (it) {\n  var result = it.replace(plus, ' ');\n  var bytes = 4;\n  try {\n    return decodeURIComponent(result);\n  } catch (error) {\n    while (bytes) {\n      result = result.replace(percentSequence(bytes--), percentDecode);\n    }\n    return result;\n  }\n};\n\nvar find = /[!'()~]|%20/g;\n\nvar replace = {\n  '!': '%21',\n  \"'\": '%27',\n  '(': '%28',\n  ')': '%29',\n  '~': '%7E',\n  '%20': '+'\n};\n\nvar replacer = function (match) {\n  return replace[match];\n};\n\nvar serialize = function (it) {\n  return encodeURIComponent(it).replace(find, replacer);\n};\n\nvar parseSearchParams = function (result, query) {\n  if (query) {\n    var attributes = query.split('&');\n    var index = 0;\n    var attribute, entry;\n    while (index < attributes.length) {\n      attribute = attributes[index++];\n      if (attribute.length) {\n        entry = attribute.split('=');\n        result.push({\n          key: deserialize(entry.shift()),\n          value: deserialize(entry.join('='))\n        });\n      }\n    }\n  }\n};\n\nvar updateSearchParams = function (query) {\n  this.entries.length = 0;\n  parseSearchParams(this.entries, query);\n};\n\nvar validateArgumentsLength = function (passed, required) {\n  if (passed < required) throw TypeError('Not enough arguments');\n};\n\nvar URLSearchParamsIterator = createIteratorConstructor(function Iterator(params, kind) {\n  setInternalState(this, {\n    type: URL_SEARCH_PARAMS_ITERATOR,\n    iterator: getIterator(getInternalParamsState(params).entries),\n    kind: kind\n  });\n}, 'Iterator', function next() {\n  var state = getInternalIteratorState(this);\n  var kind = state.kind;\n  var step = state.iterator.next();\n  var entry = step.value;\n  if (!step.done) {\n    step.value = kind === 'keys' ? entry.key : kind === 'values' ? entry.value : [entry.key, entry.value];\n  } return step;\n});\n\n// `URLSearchParams` constructor\n// https://url.spec.whatwg.org/#interface-urlsearchparams\nvar URLSearchParamsConstructor = function URLSearchParams(/* init */) {\n  anInstance(this, URLSearchParamsConstructor, URL_SEARCH_PARAMS);\n  var init = arguments.length > 0 ? arguments[0] : undefined;\n  var that = this;\n  var entries = [];\n  var iteratorMethod, iterator, next, step, entryIterator, entryNext, first, second, key;\n\n  setInternalState(that, {\n    type: URL_SEARCH_PARAMS,\n    entries: entries,\n    updateURL: function () { /* empty */ },\n    updateSearchParams: updateSearchParams\n  });\n\n  if (init !== undefined) {\n    if (isObject(init)) {\n      iteratorMethod = getIteratorMethod(init);\n      if (typeof iteratorMethod === 'function') {\n        iterator = iteratorMethod.call(init);\n        next = iterator.next;\n        while (!(step = next.call(iterator)).done) {\n          entryIterator = getIterator(anObject(step.value));\n          entryNext = entryIterator.next;\n          if (\n            (first = entryNext.call(entryIterator)).done ||\n            (second = entryNext.call(entryIterator)).done ||\n            !entryNext.call(entryIterator).done\n          ) throw TypeError('Expected sequence with length 2');\n          entries.push({ key: first.value + '', value: second.value + '' });\n        }\n      } else for (key in init) if (hasOwn(init, key)) entries.push({ key: key, value: init[key] + '' });\n    } else {\n      parseSearchParams(entries, typeof init === 'string' ? init.charAt(0) === '?' ? init.slice(1) : init : init + '');\n    }\n  }\n};\n\nvar URLSearchParamsPrototype = URLSearchParamsConstructor.prototype;\n\nredefineAll(URLSearchParamsPrototype, {\n  // `URLSearchParams.prototype.append` method\n  // https://url.spec.whatwg.org/#dom-urlsearchparams-append\n  append: function append(name, value) {\n    validateArgumentsLength(arguments.length, 2);\n    var state = getInternalParamsState(this);\n    state.entries.push({ key: name + '', value: value + '' });\n    state.updateURL();\n  },\n  // `URLSearchParams.prototype.delete` method\n  // https://url.spec.whatwg.org/#dom-urlsearchparams-delete\n  'delete': function (name) {\n    validateArgumentsLength(arguments.length, 1);\n    var state = getInternalParamsState(this);\n    var entries = state.entries;\n    var key = name + '';\n    var index = 0;\n    while (index < entries.length) {\n      if (entries[index].key === key) entries.splice(index, 1);\n      else index++;\n    }\n    state.updateURL();\n  },\n  // `URLSearchParams.prototype.get` method\n  // https://url.spec.whatwg.org/#dom-urlsearchparams-get\n  get: function get(name) {\n    validateArgumentsLength(arguments.length, 1);\n    var entries = getInternalParamsState(this).entries;\n    var key = name + '';\n    var index = 0;\n    for (; index < entries.length; index++) {\n      if (entries[index].key === key) return entries[index].value;\n    }\n    return null;\n  },\n  // `URLSearchParams.prototype.getAll` method\n  // https://url.spec.whatwg.org/#dom-urlsearchparams-getall\n  getAll: function getAll(name) {\n    validateArgumentsLength(arguments.length, 1);\n    var entries = getInternalParamsState(this).entries;\n    var key = name + '';\n    var result = [];\n    var index = 0;\n    for (; index < entries.length; index++) {\n      if (entries[index].key === key) result.push(entries[index].value);\n    }\n    return result;\n  },\n  // `URLSearchParams.prototype.has` method\n  // https://url.spec.whatwg.org/#dom-urlsearchparams-has\n  has: function has(name) {\n    validateArgumentsLength(arguments.length, 1);\n    var entries = getInternalParamsState(this).entries;\n    var key = name + '';\n    var index = 0;\n    while (index < entries.length) {\n      if (entries[index++].key === key) return true;\n    }\n    return false;\n  },\n  // `URLSearchParams.prototype.set` method\n  // https://url.spec.whatwg.org/#dom-urlsearchparams-set\n  set: function set(name, value) {\n    validateArgumentsLength(arguments.length, 1);\n    var state = getInternalParamsState(this);\n    var entries = state.entries;\n    var found = false;\n    var key = name + '';\n    var val = value + '';\n    var index = 0;\n    var entry;\n    for (; index < entries.length; index++) {\n      entry = entries[index];\n      if (entry.key === key) {\n        if (found) entries.splice(index--, 1);\n        else {\n          found = true;\n          entry.value = val;\n        }\n      }\n    }\n    if (!found) entries.push({ key: key, value: val });\n    state.updateURL();\n  },\n  // `URLSearchParams.prototype.sort` method\n  // https://url.spec.whatwg.org/#dom-urlsearchparams-sort\n  sort: function sort() {\n    var state = getInternalParamsState(this);\n    var entries = state.entries;\n    // Array#sort is not stable in some engines\n    var slice = entries.slice();\n    var entry, entriesIndex, sliceIndex;\n    entries.length = 0;\n    for (sliceIndex = 0; sliceIndex < slice.length; sliceIndex++) {\n      entry = slice[sliceIndex];\n      for (entriesIndex = 0; entriesIndex < sliceIndex; entriesIndex++) {\n        if (entries[entriesIndex].key > entry.key) {\n          entries.splice(entriesIndex, 0, entry);\n          break;\n        }\n      }\n      if (entriesIndex === sliceIndex) entries.push(entry);\n    }\n    state.updateURL();\n  },\n  // `URLSearchParams.prototype.forEach` method\n  forEach: function forEach(callback /* , thisArg */) {\n    var entries = getInternalParamsState(this).entries;\n    var boundFunction = bind(callback, arguments.length > 1 ? arguments[1] : undefined, 3);\n    var index = 0;\n    var entry;\n    while (index < entries.length) {\n      entry = entries[index++];\n      boundFunction(entry.value, entry.key, this);\n    }\n  },\n  // `URLSearchParams.prototype.keys` method\n  keys: function keys() {\n    return new URLSearchParamsIterator(this, 'keys');\n  },\n  // `URLSearchParams.prototype.values` method\n  values: function values() {\n    return new URLSearchParamsIterator(this, 'values');\n  },\n  // `URLSearchParams.prototype.entries` method\n  entries: function entries() {\n    return new URLSearchParamsIterator(this, 'entries');\n  }\n}, { enumerable: true });\n\n// `URLSearchParams.prototype[@@iterator]` method\nredefine(URLSearchParamsPrototype, ITERATOR, URLSearchParamsPrototype.entries);\n\n// `URLSearchParams.prototype.toString` method\n// https://url.spec.whatwg.org/#urlsearchparams-stringification-behavior\nredefine(URLSearchParamsPrototype, 'toString', function toString() {\n  var entries = getInternalParamsState(this).entries;\n  var result = [];\n  var index = 0;\n  var entry;\n  while (index < entries.length) {\n    entry = entries[index++];\n    result.push(serialize(entry.key) + '=' + serialize(entry.value));\n  } return result.join('&');\n}, { enumerable: true });\n\nsetToStringTag(URLSearchParamsConstructor, URL_SEARCH_PARAMS);\n\n$({ global: true, forced: !USE_NATIVE_URL }, {\n  URLSearchParams: URLSearchParamsConstructor\n});\n\n// Wrap `fetch` for correct work with polyfilled `URLSearchParams`\n// https://github.com/zloirock/core-js/issues/674\nif (!USE_NATIVE_URL && typeof $fetch == 'function' && typeof Headers == 'function') {\n  $({ global: true, enumerable: true, forced: true }, {\n    fetch: function fetch(input /* , init */) {\n      var args = [input];\n      var init, body, headers;\n      if (arguments.length > 1) {\n        init = arguments[1];\n        if (isObject(init)) {\n          body = init.body;\n          if (classof(body) === URL_SEARCH_PARAMS) {\n            headers = init.headers ? new Headers(init.headers) : new Headers();\n            if (!headers.has('content-type')) {\n              headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n            }\n            init = create(init, {\n              body: createPropertyDescriptor(0, String(body)),\n              headers: createPropertyDescriptor(0, headers)\n            });\n          }\n        }\n        args.push(init);\n      } return $fetch.apply(this, args);\n    }\n  });\n}\n\nmodule.exports = {\n  URLSearchParams: URLSearchParamsConstructor,\n  getState: getInternalParamsState\n};\n\n\n/***/ }),\n\n/***/ 285:\n/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {\n\n\"use strict\";\n\n// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`\n__webpack_require__(8783);\nvar $ = __webpack_require__(2109);\nvar DESCRIPTORS = __webpack_require__(9781);\nvar USE_NATIVE_URL = __webpack_require__(590);\nvar global = __webpack_require__(7854);\nvar defineProperties = __webpack_require__(6048);\nvar redefine = __webpack_require__(1320);\nvar anInstance = __webpack_require__(5787);\nvar has = __webpack_require__(6656);\nvar assign = __webpack_require__(1574);\nvar arrayFrom = __webpack_require__(8457);\nvar codeAt = __webpack_require__(8710).codeAt;\nvar toASCII = __webpack_require__(3197);\nvar setToStringTag = __webpack_require__(8003);\nvar URLSearchParamsModule = __webpack_require__(1637);\nvar InternalStateModule = __webpack_require__(9909);\n\nvar NativeURL = global.URL;\nvar URLSearchParams = URLSearchParamsModule.URLSearchParams;\nvar getInternalSearchParamsState = URLSearchParamsModule.getState;\nvar setInternalState = InternalStateModule.set;\nvar getInternalURLState = InternalStateModule.getterFor('URL');\nvar floor = Math.floor;\nvar pow = Math.pow;\n\nvar INVALID_AUTHORITY = 'Invalid authority';\nvar INVALID_SCHEME = 'Invalid scheme';\nvar INVALID_HOST = 'Invalid host';\nvar INVALID_PORT = 'Invalid port';\n\nvar ALPHA = /[A-Za-z]/;\nvar ALPHANUMERIC = /[\\d+-.A-Za-z]/;\nvar DIGIT = /\\d/;\nvar HEX_START = /^(0x|0X)/;\nvar OCT = /^[0-7]+$/;\nvar DEC = /^\\d+$/;\nvar HEX = /^[\\dA-Fa-f]+$/;\n/* eslint-disable no-control-regex -- safe */\nvar FORBIDDEN_HOST_CODE_POINT = /[\\u0000\\t\\u000A\\u000D #%/:?@[\\\\]]/;\nvar FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT = /[\\u0000\\t\\u000A\\u000D #/:?@[\\\\]]/;\nvar LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE = /^[\\u0000-\\u001F ]+|[\\u0000-\\u001F ]+$/g;\nvar TAB_AND_NEW_LINE = /[\\t\\u000A\\u000D]/g;\n/* eslint-enable no-control-regex -- safe */\nvar EOF;\n\nvar parseHost = function (url, input) {\n  var result, codePoints, index;\n  if (input.charAt(0) == '[') {\n    if (input.charAt(input.length - 1) != ']') return INVALID_HOST;\n    result = parseIPv6(input.slice(1, -1));\n    if (!result) return INVALID_HOST;\n    url.host = result;\n  // opaque host\n  } else if (!isSpecial(url)) {\n    if (FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT.test(input)) return INVALID_HOST;\n    result = '';\n    codePoints = arrayFrom(input);\n    for (index = 0; index < codePoints.length; index++) {\n      result += percentEncode(codePoints[index], C0ControlPercentEncodeSet);\n    }\n    url.host = result;\n  } else {\n    input = toASCII(input);\n    if (FORBIDDEN_HOST_CODE_POINT.test(input)) return INVALID_HOST;\n    result = parseIPv4(input);\n    if (result === null) return INVALID_HOST;\n    url.host = result;\n  }\n};\n\nvar parseIPv4 = function (input) {\n  var parts = input.split('.');\n  var partsLength, numbers, index, part, radix, number, ipv4;\n  if (parts.length && parts[parts.length - 1] == '') {\n    parts.pop();\n  }\n  partsLength = parts.length;\n  if (partsLength > 4) return input;\n  numbers = [];\n  for (index = 0; index < partsLength; index++) {\n    part = parts[index];\n    if (part == '') return input;\n    radix = 10;\n    if (part.length > 1 && part.charAt(0) == '0') {\n      radix = HEX_START.test(part) ? 16 : 8;\n      part = part.slice(radix == 8 ? 1 : 2);\n    }\n    if (part === '') {\n      number = 0;\n    } else {\n      if (!(radix == 10 ? DEC : radix == 8 ? OCT : HEX).test(part)) return input;\n      number = parseInt(part, radix);\n    }\n    numbers.push(number);\n  }\n  for (index = 0; index < partsLength; index++) {\n    number = numbers[index];\n    if (index == partsLength - 1) {\n      if (number >= pow(256, 5 - partsLength)) return null;\n    } else if (number > 255) return null;\n  }\n  ipv4 = numbers.pop();\n  for (index = 0; index < numbers.length; index++) {\n    ipv4 += numbers[index] * pow(256, 3 - index);\n  }\n  return ipv4;\n};\n\n// eslint-disable-next-line max-statements -- TODO\nvar parseIPv6 = function (input) {\n  var address = [0, 0, 0, 0, 0, 0, 0, 0];\n  var pieceIndex = 0;\n  var compress = null;\n  var pointer = 0;\n  var value, length, numbersSeen, ipv4Piece, number, swaps, swap;\n\n  var char = function () {\n    return input.charAt(pointer);\n  };\n\n  if (char() == ':') {\n    if (input.charAt(1) != ':') return;\n    pointer += 2;\n    pieceIndex++;\n    compress = pieceIndex;\n  }\n  while (char()) {\n    if (pieceIndex == 8) return;\n    if (char() == ':') {\n      if (compress !== null) return;\n      pointer++;\n      pieceIndex++;\n      compress = pieceIndex;\n      continue;\n    }\n    value = length = 0;\n    while (length < 4 && HEX.test(char())) {\n      value = value * 16 + parseInt(char(), 16);\n      pointer++;\n      length++;\n    }\n    if (char() == '.') {\n      if (length == 0) return;\n      pointer -= length;\n      if (pieceIndex > 6) return;\n      numbersSeen = 0;\n      while (char()) {\n        ipv4Piece = null;\n        if (numbersSeen > 0) {\n          if (char() == '.' && numbersSeen < 4) pointer++;\n          else return;\n        }\n        if (!DIGIT.test(char())) return;\n        while (DIGIT.test(char())) {\n          number = parseInt(char(), 10);\n          if (ipv4Piece === null) ipv4Piece = number;\n          else if (ipv4Piece == 0) return;\n          else ipv4Piece = ipv4Piece * 10 + number;\n          if (ipv4Piece > 255) return;\n          pointer++;\n        }\n        address[pieceIndex] = address[pieceIndex] * 256 + ipv4Piece;\n        numbersSeen++;\n        if (numbersSeen == 2 || numbersSeen == 4) pieceIndex++;\n      }\n      if (numbersSeen != 4) return;\n      break;\n    } else if (char() == ':') {\n      pointer++;\n      if (!char()) return;\n    } else if (char()) return;\n    address[pieceIndex++] = value;\n  }\n  if (compress !== null) {\n    swaps = pieceIndex - compress;\n    pieceIndex = 7;\n    while (pieceIndex != 0 && swaps > 0) {\n      swap = address[pieceIndex];\n      address[pieceIndex--] = address[compress + swaps - 1];\n      address[compress + --swaps] = swap;\n    }\n  } else if (pieceIndex != 8) return;\n  return address;\n};\n\nvar findLongestZeroSequence = function (ipv6) {\n  var maxIndex = null;\n  var maxLength = 1;\n  var currStart = null;\n  var currLength = 0;\n  var index = 0;\n  for (; index < 8; index++) {\n    if (ipv6[index] !== 0) {\n      if (currLength > maxLength) {\n        maxIndex = currStart;\n        maxLength = currLength;\n      }\n      currStart = null;\n      currLength = 0;\n    } else {\n      if (currStart === null) currStart = index;\n      ++currLength;\n    }\n  }\n  if (currLength > maxLength) {\n    maxIndex = currStart;\n    maxLength = currLength;\n  }\n  return maxIndex;\n};\n\nvar serializeHost = function (host) {\n  var result, index, compress, ignore0;\n  // ipv4\n  if (typeof host == 'number') {\n    result = [];\n    for (index = 0; index < 4; index++) {\n      result.unshift(host % 256);\n      host = floor(host / 256);\n    } return result.join('.');\n  // ipv6\n  } else if (typeof host == 'object') {\n    result = '';\n    compress = findLongestZeroSequence(host);\n    for (index = 0; index < 8; index++) {\n      if (ignore0 && host[index] === 0) continue;\n      if (ignore0) ignore0 = false;\n      if (compress === index) {\n        result += index ? ':' : '::';\n        ignore0 = true;\n      } else {\n        result += host[index].toString(16);\n        if (index < 7) result += ':';\n      }\n    }\n    return '[' + result + ']';\n  } return host;\n};\n\nvar C0ControlPercentEncodeSet = {};\nvar fragmentPercentEncodeSet = assign({}, C0ControlPercentEncodeSet, {\n  ' ': 1, '\"': 1, '<': 1, '>': 1, '`': 1\n});\nvar pathPercentEncodeSet = assign({}, fragmentPercentEncodeSet, {\n  '#': 1, '?': 1, '{': 1, '}': 1\n});\nvar userinfoPercentEncodeSet = assign({}, pathPercentEncodeSet, {\n  '/': 1, ':': 1, ';': 1, '=': 1, '@': 1, '[': 1, '\\\\': 1, ']': 1, '^': 1, '|': 1\n});\n\nvar percentEncode = function (char, set) {\n  var code = codeAt(char, 0);\n  return code > 0x20 && code < 0x7F && !has(set, char) ? char : encodeURIComponent(char);\n};\n\nvar specialSchemes = {\n  ftp: 21,\n  file: null,\n  http: 80,\n  https: 443,\n  ws: 80,\n  wss: 443\n};\n\nvar isSpecial = function (url) {\n  return has(specialSchemes, url.scheme);\n};\n\nvar includesCredentials = function (url) {\n  return url.username != '' || url.password != '';\n};\n\nvar cannotHaveUsernamePasswordPort = function (url) {\n  return !url.host || url.cannotBeABaseURL || url.scheme == 'file';\n};\n\nvar isWindowsDriveLetter = function (string, normalized) {\n  var second;\n  return string.length == 2 && ALPHA.test(string.charAt(0))\n    && ((second = string.charAt(1)) == ':' || (!normalized && second == '|'));\n};\n\nvar startsWithWindowsDriveLetter = function (string) {\n  var third;\n  return string.length > 1 && isWindowsDriveLetter(string.slice(0, 2)) && (\n    string.length == 2 ||\n    ((third = string.charAt(2)) === '/' || third === '\\\\' || third === '?' || third === '#')\n  );\n};\n\nvar shortenURLsPath = function (url) {\n  var path = url.path;\n  var pathSize = path.length;\n  if (pathSize && (url.scheme != 'file' || pathSize != 1 || !isWindowsDriveLetter(path[0], true))) {\n    path.pop();\n  }\n};\n\nvar isSingleDot = function (segment) {\n  return segment === '.' || segment.toLowerCase() === '%2e';\n};\n\nvar isDoubleDot = function (segment) {\n  segment = segment.toLowerCase();\n  return segment === '..' || segment === '%2e.' || segment === '.%2e' || segment === '%2e%2e';\n};\n\n// States:\nvar SCHEME_START = {};\nvar SCHEME = {};\nvar NO_SCHEME = {};\nvar SPECIAL_RELATIVE_OR_AUTHORITY = {};\nvar PATH_OR_AUTHORITY = {};\nvar RELATIVE = {};\nvar RELATIVE_SLASH = {};\nvar SPECIAL_AUTHORITY_SLASHES = {};\nvar SPECIAL_AUTHORITY_IGNORE_SLASHES = {};\nvar AUTHORITY = {};\nvar HOST = {};\nvar HOSTNAME = {};\nvar PORT = {};\nvar FILE = {};\nvar FILE_SLASH = {};\nvar FILE_HOST = {};\nvar PATH_START = {};\nvar PATH = {};\nvar CANNOT_BE_A_BASE_URL_PATH = {};\nvar QUERY = {};\nvar FRAGMENT = {};\n\n// eslint-disable-next-line max-statements -- TODO\nvar parseURL = function (url, input, stateOverride, base) {\n  var state = stateOverride || SCHEME_START;\n  var pointer = 0;\n  var buffer = '';\n  var seenAt = false;\n  var seenBracket = false;\n  var seenPasswordToken = false;\n  var codePoints, char, bufferCodePoints, failure;\n\n  if (!stateOverride) {\n    url.scheme = '';\n    url.username = '';\n    url.password = '';\n    url.host = null;\n    url.port = null;\n    url.path = [];\n    url.query = null;\n    url.fragment = null;\n    url.cannotBeABaseURL = false;\n    input = input.replace(LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE, '');\n  }\n\n  input = input.replace(TAB_AND_NEW_LINE, '');\n\n  codePoints = arrayFrom(input);\n\n  while (pointer <= codePoints.length) {\n    char = codePoints[pointer];\n    switch (state) {\n      case SCHEME_START:\n        if (char && ALPHA.test(char)) {\n          buffer += char.toLowerCase();\n          state = SCHEME;\n        } else if (!stateOverride) {\n          state = NO_SCHEME;\n          continue;\n        } else return INVALID_SCHEME;\n        break;\n\n      case SCHEME:\n        if (char && (ALPHANUMERIC.test(char) || char == '+' || char == '-' || char == '.')) {\n          buffer += char.toLowerCase();\n        } else if (char == ':') {\n          if (stateOverride && (\n            (isSpecial(url) != has(specialSchemes, buffer)) ||\n            (buffer == 'file' && (includesCredentials(url) || url.port !== null)) ||\n            (url.scheme == 'file' && !url.host)\n          )) return;\n          url.scheme = buffer;\n          if (stateOverride) {\n            if (isSpecial(url) && specialSchemes[url.scheme] == url.port) url.port = null;\n            return;\n          }\n          buffer = '';\n          if (url.scheme == 'file') {\n            state = FILE;\n          } else if (isSpecial(url) && base && base.scheme == url.scheme) {\n            state = SPECIAL_RELATIVE_OR_AUTHORITY;\n          } else if (isSpecial(url)) {\n            state = SPECIAL_AUTHORITY_SLASHES;\n          } else if (codePoints[pointer + 1] == '/') {\n            state = PATH_OR_AUTHORITY;\n            pointer++;\n          } else {\n            url.cannotBeABaseURL = true;\n            url.path.push('');\n            state = CANNOT_BE_A_BASE_URL_PATH;\n          }\n        } else if (!stateOverride) {\n          buffer = '';\n          state = NO_SCHEME;\n          pointer = 0;\n          continue;\n        } else return INVALID_SCHEME;\n        break;\n\n      case NO_SCHEME:\n        if (!base || (base.cannotBeABaseURL && char != '#')) return INVALID_SCHEME;\n        if (base.cannotBeABaseURL && char == '#') {\n          url.scheme = base.scheme;\n          url.path = base.path.slice();\n          url.query = base.query;\n          url.fragment = '';\n          url.cannotBeABaseURL = true;\n          state = FRAGMENT;\n          break;\n        }\n        state = base.scheme == 'file' ? FILE : RELATIVE;\n        continue;\n\n      case SPECIAL_RELATIVE_OR_AUTHORITY:\n        if (char == '/' && codePoints[pointer + 1] == '/') {\n          state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n          pointer++;\n        } else {\n          state = RELATIVE;\n          continue;\n        } break;\n\n      case PATH_OR_AUTHORITY:\n        if (char == '/') {\n          state = AUTHORITY;\n          break;\n        } else {\n          state = PATH;\n          continue;\n        }\n\n      case RELATIVE:\n        url.scheme = base.scheme;\n        if (char == EOF) {\n          url.username = base.username;\n          url.password = base.password;\n          url.host = base.host;\n          url.port = base.port;\n          url.path = base.path.slice();\n          url.query = base.query;\n        } else if (char == '/' || (char == '\\\\' && isSpecial(url))) {\n          state = RELATIVE_SLASH;\n        } else if (char == '?') {\n          url.username = base.username;\n          url.password = base.password;\n          url.host = base.host;\n          url.port = base.port;\n          url.path = base.path.slice();\n          url.query = '';\n          state = QUERY;\n        } else if (char == '#') {\n          url.username = base.username;\n          url.password = base.password;\n          url.host = base.host;\n          url.port = base.port;\n          url.path = base.path.slice();\n          url.query = base.query;\n          url.fragment = '';\n          state = FRAGMENT;\n        } else {\n          url.username = base.username;\n          url.password = base.password;\n          url.host = base.host;\n          url.port = base.port;\n          url.path = base.path.slice();\n          url.path.pop();\n          state = PATH;\n          continue;\n        } break;\n\n      case RELATIVE_SLASH:\n        if (isSpecial(url) && (char == '/' || char == '\\\\')) {\n          state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n        } else if (char == '/') {\n          state = AUTHORITY;\n        } else {\n          url.username = base.username;\n          url.password = base.password;\n          url.host = base.host;\n          url.port = base.port;\n          state = PATH;\n          continue;\n        } break;\n\n      case SPECIAL_AUTHORITY_SLASHES:\n        state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n        if (char != '/' || buffer.charAt(pointer + 1) != '/') continue;\n        pointer++;\n        break;\n\n      case SPECIAL_AUTHORITY_IGNORE_SLASHES:\n        if (char != '/' && char != '\\\\') {\n          state = AUTHORITY;\n          continue;\n        } break;\n\n      case AUTHORITY:\n        if (char == '@') {\n          if (seenAt) buffer = '%40' + buffer;\n          seenAt = true;\n          bufferCodePoints = arrayFrom(buffer);\n          for (var i = 0; i < bufferCodePoints.length; i++) {\n            var codePoint = bufferCodePoints[i];\n            if (codePoint == ':' && !seenPasswordToken) {\n              seenPasswordToken = true;\n              continue;\n            }\n            var encodedCodePoints = percentEncode(codePoint, userinfoPercentEncodeSet);\n            if (seenPasswordToken) url.password += encodedCodePoints;\n            else url.username += encodedCodePoints;\n          }\n          buffer = '';\n        } else if (\n          char == EOF || char == '/' || char == '?' || char == '#' ||\n          (char == '\\\\' && isSpecial(url))\n        ) {\n          if (seenAt && buffer == '') return INVALID_AUTHORITY;\n          pointer -= arrayFrom(buffer).length + 1;\n          buffer = '';\n          state = HOST;\n        } else buffer += char;\n        break;\n\n      case HOST:\n      case HOSTNAME:\n        if (stateOverride && url.scheme == 'file') {\n          state = FILE_HOST;\n          continue;\n        } else if (char == ':' && !seenBracket) {\n          if (buffer == '') return INVALID_HOST;\n          failure = parseHost(url, buffer);\n          if (failure) return failure;\n          buffer = '';\n          state = PORT;\n          if (stateOverride == HOSTNAME) return;\n        } else if (\n          char == EOF || char == '/' || char == '?' || char == '#' ||\n          (char == '\\\\' && isSpecial(url))\n        ) {\n          if (isSpecial(url) && buffer == '') return INVALID_HOST;\n          if (stateOverride && buffer == '' && (includesCredentials(url) || url.port !== null)) return;\n          failure = parseHost(url, buffer);\n          if (failure) return failure;\n          buffer = '';\n          state = PATH_START;\n          if (stateOverride) return;\n          continue;\n        } else {\n          if (char == '[') seenBracket = true;\n          else if (char == ']') seenBracket = false;\n          buffer += char;\n        } break;\n\n      case PORT:\n        if (DIGIT.test(char)) {\n          buffer += char;\n        } else if (\n          char == EOF || char == '/' || char == '?' || char == '#' ||\n          (char == '\\\\' && isSpecial(url)) ||\n          stateOverride\n        ) {\n          if (buffer != '') {\n            var port = parseInt(buffer, 10);\n            if (port > 0xFFFF) return INVALID_PORT;\n            url.port = (isSpecial(url) && port === specialSchemes[url.scheme]) ? null : port;\n            buffer = '';\n          }\n          if (stateOverride) return;\n          state = PATH_START;\n          continue;\n        } else return INVALID_PORT;\n        break;\n\n      case FILE:\n        url.scheme = 'file';\n        if (char == '/' || char == '\\\\') state = FILE_SLASH;\n        else if (base && base.scheme == 'file') {\n          if (char == EOF) {\n            url.host = base.host;\n            url.path = base.path.slice();\n            url.query = base.query;\n          } else if (char == '?') {\n            url.host = base.host;\n            url.path = base.path.slice();\n            url.query = '';\n            state = QUERY;\n          } else if (char == '#') {\n            url.host = base.host;\n            url.path = base.path.slice();\n            url.query = base.query;\n            url.fragment = '';\n            state = FRAGMENT;\n          } else {\n            if (!startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) {\n              url.host = base.host;\n              url.path = base.path.slice();\n              shortenURLsPath(url);\n            }\n            state = PATH;\n            continue;\n          }\n        } else {\n          state = PATH;\n          continue;\n        } break;\n\n      case FILE_SLASH:\n        if (char == '/' || char == '\\\\') {\n          state = FILE_HOST;\n          break;\n        }\n        if (base && base.scheme == 'file' && !startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) {\n          if (isWindowsDriveLetter(base.path[0], true)) url.path.push(base.path[0]);\n          else url.host = base.host;\n        }\n        state = PATH;\n        continue;\n\n      case FILE_HOST:\n        if (char == EOF || char == '/' || char == '\\\\' || char == '?' || char == '#') {\n          if (!stateOverride && isWindowsDriveLetter(buffer)) {\n            state = PATH;\n          } else if (buffer == '') {\n            url.host = '';\n            if (stateOverride) return;\n            state = PATH_START;\n          } else {\n            failure = parseHost(url, buffer);\n            if (failure) return failure;\n            if (url.host == 'localhost') url.host = '';\n            if (stateOverride) return;\n            buffer = '';\n            state = PATH_START;\n          } continue;\n        } else buffer += char;\n        break;\n\n      case PATH_START:\n        if (isSpecial(url)) {\n          state = PATH;\n          if (char != '/' && char != '\\\\') continue;\n        } else if (!stateOverride && char == '?') {\n          url.query = '';\n          state = QUERY;\n        } else if (!stateOverride && char == '#') {\n          url.fragment = '';\n          state = FRAGMENT;\n        } else if (char != EOF) {\n          state = PATH;\n          if (char != '/') continue;\n        } break;\n\n      case PATH:\n        if (\n          char == EOF || char == '/' ||\n          (char == '\\\\' && isSpecial(url)) ||\n          (!stateOverride && (char == '?' || char == '#'))\n        ) {\n          if (isDoubleDot(buffer)) {\n            shortenURLsPath(url);\n            if (char != '/' && !(char == '\\\\' && isSpecial(url))) {\n              url.path.push('');\n            }\n          } else if (isSingleDot(buffer)) {\n            if (char != '/' && !(char == '\\\\' && isSpecial(url))) {\n              url.path.push('');\n            }\n          } else {\n            if (url.scheme == 'file' && !url.path.length && isWindowsDriveLetter(buffer)) {\n              if (url.host) url.host = '';\n              buffer = buffer.charAt(0) + ':'; // normalize windows drive letter\n            }\n            url.path.push(buffer);\n          }\n          buffer = '';\n          if (url.scheme == 'file' && (char == EOF || char == '?' || char == '#')) {\n            while (url.path.length > 1 && url.path[0] === '') {\n              url.path.shift();\n            }\n          }\n          if (char == '?') {\n            url.query = '';\n            state = QUERY;\n          } else if (char == '#') {\n            url.fragment = '';\n            state = FRAGMENT;\n          }\n        } else {\n          buffer += percentEncode(char, pathPercentEncodeSet);\n        } break;\n\n      case CANNOT_BE_A_BASE_URL_PATH:\n        if (char == '?') {\n          url.query = '';\n          state = QUERY;\n        } else if (char == '#') {\n          url.fragment = '';\n          state = FRAGMENT;\n        } else if (char != EOF) {\n          url.path[0] += percentEncode(char, C0ControlPercentEncodeSet);\n        } break;\n\n      case QUERY:\n        if (!stateOverride && char == '#') {\n          url.fragment = '';\n          state = FRAGMENT;\n        } else if (char != EOF) {\n          if (char == \"'\" && isSpecial(url)) url.query += '%27';\n          else if (char == '#') url.query += '%23';\n          else url.query += percentEncode(char, C0ControlPercentEncodeSet);\n        } break;\n\n      case FRAGMENT:\n        if (char != EOF) url.fragment += percentEncode(char, fragmentPercentEncodeSet);\n        break;\n    }\n\n    pointer++;\n  }\n};\n\n// `URL` constructor\n// https://url.spec.whatwg.org/#url-class\nvar URLConstructor = function URL(url /* , base */) {\n  var that = anInstance(this, URLConstructor, 'URL');\n  var base = arguments.length > 1 ? arguments[1] : undefined;\n  var urlString = String(url);\n  var state = setInternalState(that, { type: 'URL' });\n  var baseState, failure;\n  if (base !== undefined) {\n    if (base instanceof URLConstructor) baseState = getInternalURLState(base);\n    else {\n      failure = parseURL(baseState = {}, String(base));\n      if (failure) throw TypeError(failure);\n    }\n  }\n  failure = parseURL(state, urlString, null, baseState);\n  if (failure) throw TypeError(failure);\n  var searchParams = state.searchParams = new URLSearchParams();\n  var searchParamsState = getInternalSearchParamsState(searchParams);\n  searchParamsState.updateSearchParams(state.query);\n  searchParamsState.updateURL = function () {\n    state.query = String(searchParams) || null;\n  };\n  if (!DESCRIPTORS) {\n    that.href = serializeURL.call(that);\n    that.origin = getOrigin.call(that);\n    that.protocol = getProtocol.call(that);\n    that.username = getUsername.call(that);\n    that.password = getPassword.call(that);\n    that.host = getHost.call(that);\n    that.hostname = getHostname.call(that);\n    that.port = getPort.call(that);\n    that.pathname = getPathname.call(that);\n    that.search = getSearch.call(that);\n    that.searchParams = getSearchParams.call(that);\n    that.hash = getHash.call(that);\n  }\n};\n\nvar URLPrototype = URLConstructor.prototype;\n\nvar serializeURL = function () {\n  var url = getInternalURLState(this);\n  var scheme = url.scheme;\n  var username = url.username;\n  var password = url.password;\n  var host = url.host;\n  var port = url.port;\n  var path = url.path;\n  var query = url.query;\n  var fragment = url.fragment;\n  var output = scheme + ':';\n  if (host !== null) {\n    output += '//';\n    if (includesCredentials(url)) {\n      output += username + (password ? ':' + password : '') + '@';\n    }\n    output += serializeHost(host);\n    if (port !== null) output += ':' + port;\n  } else if (scheme == 'file') output += '//';\n  output += url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : '';\n  if (query !== null) output += '?' + query;\n  if (fragment !== null) output += '#' + fragment;\n  return output;\n};\n\nvar getOrigin = function () {\n  var url = getInternalURLState(this);\n  var scheme = url.scheme;\n  var port = url.port;\n  if (scheme == 'blob') try {\n    return new URL(scheme.path[0]).origin;\n  } catch (error) {\n    return 'null';\n  }\n  if (scheme == 'file' || !isSpecial(url)) return 'null';\n  return scheme + '://' + serializeHost(url.host) + (port !== null ? ':' + port : '');\n};\n\nvar getProtocol = function () {\n  return getInternalURLState(this).scheme + ':';\n};\n\nvar getUsername = function () {\n  return getInternalURLState(this).username;\n};\n\nvar getPassword = function () {\n  return getInternalURLState(this).password;\n};\n\nvar getHost = function () {\n  var url = getInternalURLState(this);\n  var host = url.host;\n  var port = url.port;\n  return host === null ? ''\n    : port === null ? serializeHost(host)\n    : serializeHost(host) + ':' + port;\n};\n\nvar getHostname = function () {\n  var host = getInternalURLState(this).host;\n  return host === null ? '' : serializeHost(host);\n};\n\nvar getPort = function () {\n  var port = getInternalURLState(this).port;\n  return port === null ? '' : String(port);\n};\n\nvar getPathname = function () {\n  var url = getInternalURLState(this);\n  var path = url.path;\n  return url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : '';\n};\n\nvar getSearch = function () {\n  var query = getInternalURLState(this).query;\n  return query ? '?' + query : '';\n};\n\nvar getSearchParams = function () {\n  return getInternalURLState(this).searchParams;\n};\n\nvar getHash = function () {\n  var fragment = getInternalURLState(this).fragment;\n  return fragment ? '#' + fragment : '';\n};\n\nvar accessorDescriptor = function (getter, setter) {\n  return { get: getter, set: setter, configurable: true, enumerable: true };\n};\n\nif (DESCRIPTORS) {\n  defineProperties(URLPrototype, {\n    // `URL.prototype.href` accessors pair\n    // https://url.spec.whatwg.org/#dom-url-href\n    href: accessorDescriptor(serializeURL, function (href) {\n      var url = getInternalURLState(this);\n      var urlString = String(href);\n      var failure = parseURL(url, urlString);\n      if (failure) throw TypeError(failure);\n      getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query);\n    }),\n    // `URL.prototype.origin` getter\n    // https://url.spec.whatwg.org/#dom-url-origin\n    origin: accessorDescriptor(getOrigin),\n    // `URL.prototype.protocol` accessors pair\n    // https://url.spec.whatwg.org/#dom-url-protocol\n    protocol: accessorDescriptor(getProtocol, function (protocol) {\n      var url = getInternalURLState(this);\n      parseURL(url, String(protocol) + ':', SCHEME_START);\n    }),\n    // `URL.prototype.username` accessors pair\n    // https://url.spec.whatwg.org/#dom-url-username\n    username: accessorDescriptor(getUsername, function (username) {\n      var url = getInternalURLState(this);\n      var codePoints = arrayFrom(String(username));\n      if (cannotHaveUsernamePasswordPort(url)) return;\n      url.username = '';\n      for (var i = 0; i < codePoints.length; i++) {\n        url.username += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n      }\n    }),\n    // `URL.prototype.password` accessors pair\n    // https://url.spec.whatwg.org/#dom-url-password\n    password: accessorDescriptor(getPassword, function (password) {\n      var url = getInternalURLState(this);\n      var codePoints = arrayFrom(String(password));\n      if (cannotHaveUsernamePasswordPort(url)) return;\n      url.password = '';\n      for (var i = 0; i < codePoints.length; i++) {\n        url.password += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n      }\n    }),\n    // `URL.prototype.host` accessors pair\n    // https://url.spec.whatwg.org/#dom-url-host\n    host: accessorDescriptor(getHost, function (host) {\n      var url = getInternalURLState(this);\n      if (url.cannotBeABaseURL) return;\n      parseURL(url, String(host), HOST);\n    }),\n    // `URL.prototype.hostname` accessors pair\n    // https://url.spec.whatwg.org/#dom-url-hostname\n    hostname: accessorDescriptor(getHostname, function (hostname) {\n      var url = getInternalURLState(this);\n      if (url.cannotBeABaseURL) return;\n      parseURL(url, String(hostname), HOSTNAME);\n    }),\n    // `URL.prototype.port` accessors pair\n    // https://url.spec.whatwg.org/#dom-url-port\n    port: accessorDescriptor(getPort, function (port) {\n      var url = getInternalURLState(this);\n      if (cannotHaveUsernamePasswordPort(url)) return;\n      port = String(port);\n      if (port == '') url.port = null;\n      else parseURL(url, port, PORT);\n    }),\n    // `URL.prototype.pathname` accessors pair\n    // https://url.spec.whatwg.org/#dom-url-pathname\n    pathname: accessorDescriptor(getPathname, function (pathname) {\n      var url = getInternalURLState(this);\n      if (url.cannotBeABaseURL) return;\n      url.path = [];\n      parseURL(url, pathname + '', PATH_START);\n    }),\n    // `URL.prototype.search` accessors pair\n    // https://url.spec.whatwg.org/#dom-url-search\n    search: accessorDescriptor(getSearch, function (search) {\n      var url = getInternalURLState(this);\n      search = String(search);\n      if (search == '') {\n        url.query = null;\n      } else {\n        if ('?' == search.charAt(0)) search = search.slice(1);\n        url.query = '';\n        parseURL(url, search, QUERY);\n      }\n      getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query);\n    }),\n    // `URL.prototype.searchParams` getter\n    // https://url.spec.whatwg.org/#dom-url-searchparams\n    searchParams: accessorDescriptor(getSearchParams),\n    // `URL.prototype.hash` accessors pair\n    // https://url.spec.whatwg.org/#dom-url-hash\n    hash: accessorDescriptor(getHash, function (hash) {\n      var url = getInternalURLState(this);\n      hash = String(hash);\n      if (hash == '') {\n        url.fragment = null;\n        return;\n      }\n      if ('#' == hash.charAt(0)) hash = hash.slice(1);\n      url.fragment = '';\n      parseURL(url, hash, FRAGMENT);\n    })\n  });\n}\n\n// `URL.prototype.toJSON` method\n// https://url.spec.whatwg.org/#dom-url-tojson\nredefine(URLPrototype, 'toJSON', function toJSON() {\n  return serializeURL.call(this);\n}, { enumerable: true });\n\n// `URL.prototype.toString` method\n// https://url.spec.whatwg.org/#URL-stringification-behavior\nredefine(URLPrototype, 'toString', function toString() {\n  return serializeURL.call(this);\n}, { enumerable: true });\n\nif (NativeURL) {\n  var nativeCreateObjectURL = NativeURL.createObjectURL;\n  var nativeRevokeObjectURL = NativeURL.revokeObjectURL;\n  // `URL.createObjectURL` method\n  // https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL\n  // eslint-disable-next-line no-unused-vars -- required for `.length`\n  if (nativeCreateObjectURL) redefine(URLConstructor, 'createObjectURL', function createObjectURL(blob) {\n    return nativeCreateObjectURL.apply(NativeURL, arguments);\n  });\n  // `URL.revokeObjectURL` method\n  // https://developer.mozilla.org/en-US/docs/Web/API/URL/revokeObjectURL\n  // eslint-disable-next-line no-unused-vars -- required for `.length`\n  if (nativeRevokeObjectURL) redefine(URLConstructor, 'revokeObjectURL', function revokeObjectURL(url) {\n    return nativeRevokeObjectURL.apply(NativeURL, arguments);\n  });\n}\n\nsetToStringTag(URLConstructor, 'URL');\n\n$({ global: true, forced: !USE_NATIVE_URL, sham: !DESCRIPTORS }, {\n  URL: URLConstructor\n});\n\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(__webpack_module_cache__[moduleId]) {\n/******/ \t\t\treturn __webpack_module_cache__[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/global */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.g = (function() {\n/******/ \t\t\tif (typeof globalThis === 'object') return globalThis;\n/******/ \t\t\ttry {\n/******/ \t\t\t\treturn this || new Function('return this')();\n/******/ \t\t\t} catch (e) {\n/******/ \t\t\t\tif (typeof window === 'object') return window;\n/******/ \t\t\t}\n/******/ \t\t})();\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t!function() {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = function(exports) {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n// This entry need to be wrapped in an IIFE because it need to be in strict mode.\n!function() {\n\"use strict\";\n// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n  \"Dropzone\": function() { return /* reexport */ Dropzone; },\n  \"default\": function() { return /* binding */ dropzone_dist; }\n});\n\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.concat.js\nvar es_array_concat = __webpack_require__(2222);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.filter.js\nvar es_array_filter = __webpack_require__(7327);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.index-of.js\nvar es_array_index_of = __webpack_require__(2772);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.iterator.js\nvar es_array_iterator = __webpack_require__(6992);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.map.js\nvar es_array_map = __webpack_require__(1249);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.slice.js\nvar es_array_slice = __webpack_require__(7042);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.splice.js\nvar es_array_splice = __webpack_require__(561);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array-buffer.constructor.js\nvar es_array_buffer_constructor = __webpack_require__(8264);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.function.name.js\nvar es_function_name = __webpack_require__(8309);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.object.get-prototype-of.js\nvar es_object_get_prototype_of = __webpack_require__(489);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.object.to-string.js\nvar es_object_to_string = __webpack_require__(1539);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.regexp.exec.js\nvar es_regexp_exec = __webpack_require__(4916);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.regexp.to-string.js\nvar es_regexp_to_string = __webpack_require__(9714);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.iterator.js\nvar es_string_iterator = __webpack_require__(8783);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.match.js\nvar es_string_match = __webpack_require__(4723);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.replace.js\nvar es_string_replace = __webpack_require__(5306);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.split.js\nvar es_string_split = __webpack_require__(3123);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.string.trim.js\nvar es_string_trim = __webpack_require__(3210);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.uint8-array.js\nvar es_typed_array_uint8_array = __webpack_require__(2472);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.copy-within.js\nvar es_typed_array_copy_within = __webpack_require__(2990);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.every.js\nvar es_typed_array_every = __webpack_require__(8927);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.fill.js\nvar es_typed_array_fill = __webpack_require__(3105);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.filter.js\nvar es_typed_array_filter = __webpack_require__(5035);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.find.js\nvar es_typed_array_find = __webpack_require__(4345);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.find-index.js\nvar es_typed_array_find_index = __webpack_require__(7174);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.for-each.js\nvar es_typed_array_for_each = __webpack_require__(2846);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.includes.js\nvar es_typed_array_includes = __webpack_require__(4731);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.index-of.js\nvar es_typed_array_index_of = __webpack_require__(7209);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.iterator.js\nvar es_typed_array_iterator = __webpack_require__(6319);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.join.js\nvar es_typed_array_join = __webpack_require__(8867);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.last-index-of.js\nvar es_typed_array_last_index_of = __webpack_require__(7789);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.map.js\nvar es_typed_array_map = __webpack_require__(3739);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.reduce.js\nvar es_typed_array_reduce = __webpack_require__(9368);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.reduce-right.js\nvar es_typed_array_reduce_right = __webpack_require__(4483);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.reverse.js\nvar es_typed_array_reverse = __webpack_require__(2056);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.set.js\nvar es_typed_array_set = __webpack_require__(3462);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.slice.js\nvar es_typed_array_slice = __webpack_require__(678);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.some.js\nvar es_typed_array_some = __webpack_require__(7462);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.sort.js\nvar es_typed_array_sort = __webpack_require__(3824);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.subarray.js\nvar es_typed_array_subarray = __webpack_require__(5021);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.to-locale-string.js\nvar es_typed_array_to_locale_string = __webpack_require__(2974);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.typed-array.to-string.js\nvar es_typed_array_to_string = __webpack_require__(5016);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.dom-collections.for-each.js\nvar web_dom_collections_for_each = __webpack_require__(4747);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.dom-collections.iterator.js\nvar web_dom_collections_iterator = __webpack_require__(3948);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/web.url.js\nvar web_url = __webpack_require__(285);\n;// CONCATENATED MODULE: ./src/emitter.js\n\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n// The Emitter class provides the ability to call `.on()` on Dropzone to listen\n// to events.\n// It is strongly based on component's emitter class, and I removed the\n// functionality because of the dependency hell with different frameworks.\nvar Emitter = /*#__PURE__*/function () {\n  function Emitter() {\n    _classCallCheck(this, Emitter);\n  }\n\n  _createClass(Emitter, [{\n    key: \"on\",\n    value: // Add an event listener for given event\n    function on(event, fn) {\n      this._callbacks = this._callbacks || {}; // Create namespace for this event\n\n      if (!this._callbacks[event]) {\n        this._callbacks[event] = [];\n      }\n\n      this._callbacks[event].push(fn);\n\n      return this;\n    }\n  }, {\n    key: \"emit\",\n    value: function emit(event) {\n      this._callbacks = this._callbacks || {};\n      var callbacks = this._callbacks[event];\n\n      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n\n      if (callbacks) {\n        var _iterator = _createForOfIteratorHelper(callbacks, true),\n            _step;\n\n        try {\n          for (_iterator.s(); !(_step = _iterator.n()).done;) {\n            var callback = _step.value;\n            callback.apply(this, args);\n          }\n        } catch (err) {\n          _iterator.e(err);\n        } finally {\n          _iterator.f();\n        }\n      } // trigger a corresponding DOM event\n\n\n      if (this.element) {\n        this.element.dispatchEvent(this.makeEvent(\"dropzone:\" + event, {\n          args: args\n        }));\n      }\n\n      return this;\n    }\n  }, {\n    key: \"makeEvent\",\n    value: function makeEvent(eventName, detail) {\n      var params = {\n        bubbles: true,\n        cancelable: true,\n        detail: detail\n      };\n\n      if (typeof window.CustomEvent === \"function\") {\n        return new CustomEvent(eventName, params);\n      } else {\n        // IE 11 support\n        // https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent\n        var evt = document.createEvent(\"CustomEvent\");\n        evt.initCustomEvent(eventName, params.bubbles, params.cancelable, params.detail);\n        return evt;\n      }\n    } // Remove event listener for given event. If fn is not provided, all event\n    // listeners for that event will be removed. If neither is provided, all\n    // event listeners will be removed.\n\n  }, {\n    key: \"off\",\n    value: function off(event, fn) {\n      if (!this._callbacks || arguments.length === 0) {\n        this._callbacks = {};\n        return this;\n      } // specific event\n\n\n      var callbacks = this._callbacks[event];\n\n      if (!callbacks) {\n        return this;\n      } // remove all handlers\n\n\n      if (arguments.length === 1) {\n        delete this._callbacks[event];\n        return this;\n      } // remove specific handler\n\n\n      for (var i = 0; i < callbacks.length; i++) {\n        var callback = callbacks[i];\n\n        if (callback === fn) {\n          callbacks.splice(i, 1);\n          break;\n        }\n      }\n\n      return this;\n    }\n  }]);\n\n  return Emitter;\n}();\n\n\n;// CONCATENATED MODULE: ./src/preview-template.html\n// Module\nvar code = \"<div class=\\\"dz-preview dz-file-preview\\\"> <div class=\\\"dz-image\\\"><img data-dz-thumbnail/></div> <div class=\\\"dz-details\\\"> <div class=\\\"dz-size\\\"><span data-dz-size></span></div> <div class=\\\"dz-filename\\\"><span data-dz-name></span></div> </div> <div class=\\\"dz-progress\\\"> <span class=\\\"dz-upload\\\" data-dz-uploadprogress></span> </div> <div class=\\\"dz-error-message\\\"><span data-dz-errormessage></span></div> <div class=\\\"dz-success-mark\\\"> <svg width=\\\"54px\\\" height=\\\"54px\\\" viewBox=\\\"0 0 54 54\\\" version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\"> <title>Check</title> <g stroke=\\\"none\\\" stroke-width=\\\"1\\\" fill=\\\"none\\\" fill-rule=\\\"evenodd\\\"> <path d=\\\"M23.5,31.8431458 L17.5852419,25.9283877 C16.0248253,24.3679711 13.4910294,24.366835 11.9289322,25.9289322 C10.3700136,27.4878508 10.3665912,30.0234455 11.9283877,31.5852419 L20.4147581,40.0716123 C20.5133999,40.1702541 20.6159315,40.2626649 20.7218615,40.3488435 C22.2835669,41.8725651 24.794234,41.8626202 26.3461564,40.3106978 L43.3106978,23.3461564 C44.8771021,21.7797521 44.8758057,19.2483887 43.3137085,17.6862915 C41.7547899,16.1273729 39.2176035,16.1255422 37.6538436,17.6893022 L23.5,31.8431458 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z\\\" stroke-opacity=\\\"0.198794158\\\" stroke=\\\"#747474\\\" fill-opacity=\\\"0.816519475\\\" fill=\\\"#FFFFFF\\\"></path> </g> </svg> </div> <div class=\\\"dz-error-mark\\\"> <svg width=\\\"54px\\\" height=\\\"54px\\\" viewBox=\\\"0 0 54 54\\\" version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\"> <title>Error</title> <g stroke=\\\"none\\\" stroke-width=\\\"1\\\" fill=\\\"none\\\" fill-rule=\\\"evenodd\\\"> <g stroke=\\\"#747474\\\" stroke-opacity=\\\"0.198794158\\\" fill=\\\"#FFFFFF\\\" fill-opacity=\\\"0.816519475\\\"> <path d=\\\"M32.6568542,29 L38.3106978,23.3461564 C39.8771021,21.7797521 39.8758057,19.2483887 38.3137085,17.6862915 C36.7547899,16.1273729 34.2176035,16.1255422 32.6538436,17.6893022 L27,23.3431458 L21.3461564,17.6893022 C19.7823965,16.1255422 17.2452101,16.1273729 15.6862915,17.6862915 C14.1241943,19.2483887 14.1228979,21.7797521 15.6893022,23.3461564 L21.3431458,29 L15.6893022,34.6538436 C14.1228979,36.2202479 14.1241943,38.7516113 15.6862915,40.3137085 C17.2452101,41.8726271 19.7823965,41.8744578 21.3461564,40.3106978 L27,34.6568542 L32.6538436,40.3106978 C34.2176035,41.8744578 36.7547899,41.8726271 38.3137085,40.3137085 C39.8758057,38.7516113 39.8771021,36.2202479 38.3106978,34.6538436 L32.6568542,29 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z\\\"></path> </g> </g> </svg> </div> </div> \";\n// Exports\n/* harmony default export */ var preview_template = (code);\n;// CONCATENATED MODULE: ./src/options.js\n\n\n\n\n\nfunction options_createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = options_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction options_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return options_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return options_arrayLikeToArray(o, minLen); }\n\nfunction options_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n\n\nvar defaultOptions = {\n  /**\n   * Has to be specified on elements other than form (or when the form\n   * doesn't have an `action` attribute). You can also\n   * provide a function that will be called with `files` and\n   * must return the url (since `v3.12.0`)\n   */\n  url: null,\n\n  /**\n   * Can be changed to `\"put\"` if necessary. You can also provide a function\n   * that will be called with `files` and must return the method (since `v3.12.0`).\n   */\n  method: \"post\",\n\n  /**\n   * Will be set on the XHRequest.\n   */\n  withCredentials: false,\n\n  /**\n   * The timeout for the XHR requests in milliseconds (since `v4.4.0`).\n   * If set to null or 0, no timeout is going to be set.\n   */\n  timeout: null,\n\n  /**\n   * How many file uploads to process in parallel (See the\n   * Enqueuing file uploads documentation section for more info)\n   */\n  parallelUploads: 2,\n\n  /**\n   * Whether to send multiple files in one request. If\n   * this it set to true, then the fallback file input element will\n   * have the `multiple` attribute as well. This option will\n   * also trigger additional events (like `processingmultiple`). See the events\n   * documentation section for more information.\n   */\n  uploadMultiple: false,\n\n  /**\n   * Whether you want files to be uploaded in chunks to your server. This can't be\n   * used in combination with `uploadMultiple`.\n   *\n   * See [chunksUploaded](#config-chunksUploaded) for the callback to finalise an upload.\n   */\n  chunking: false,\n\n  /**\n   * If `chunking` is enabled, this defines whether **every** file should be chunked,\n   * even if the file size is below chunkSize. This means, that the additional chunk\n   * form data will be submitted and the `chunksUploaded` callback will be invoked.\n   */\n  forceChunking: false,\n\n  /**\n   * If `chunking` is `true`, then this defines the chunk size in bytes.\n   */\n  chunkSize: 2000000,\n\n  /**\n   * If `true`, the individual chunks of a file are being uploaded simultaneously.\n   */\n  parallelChunkUploads: false,\n\n  /**\n   * Whether a chunk should be retried if it fails.\n   */\n  retryChunks: false,\n\n  /**\n   * If `retryChunks` is true, how many times should it be retried.\n   */\n  retryChunksLimit: 3,\n\n  /**\n   * The maximum filesize (in bytes) that is allowed to be uploaded.\n   */\n  maxFilesize: 256,\n\n  /**\n   * The name of the file param that gets transferred.\n   * **NOTE**: If you have the option  `uploadMultiple` set to `true`, then\n   * Dropzone will append `[]` to the name.\n   */\n  paramName: \"file\",\n\n  /**\n   * Whether thumbnails for images should be generated\n   */\n  createImageThumbnails: true,\n\n  /**\n   * In MB. When the filename exceeds this limit, the thumbnail will not be generated.\n   */\n  maxThumbnailFilesize: 10,\n\n  /**\n   * If `null`, the ratio of the image will be used to calculate it.\n   */\n  thumbnailWidth: 120,\n\n  /**\n   * The same as `thumbnailWidth`. If both are null, images will not be resized.\n   */\n  thumbnailHeight: 120,\n\n  /**\n   * How the images should be scaled down in case both, `thumbnailWidth` and `thumbnailHeight` are provided.\n   * Can be either `contain` or `crop`.\n   */\n  thumbnailMethod: \"crop\",\n\n  /**\n   * If set, images will be resized to these dimensions before being **uploaded**.\n   * If only one, `resizeWidth` **or** `resizeHeight` is provided, the original aspect\n   * ratio of the file will be preserved.\n   *\n   * The `options.transformFile` function uses these options, so if the `transformFile` function\n   * is overridden, these options don't do anything.\n   */\n  resizeWidth: null,\n\n  /**\n   * See `resizeWidth`.\n   */\n  resizeHeight: null,\n\n  /**\n   * The mime type of the resized image (before it gets uploaded to the server).\n   * If `null` the original mime type will be used. To force jpeg, for example, use `image/jpeg`.\n   * See `resizeWidth` for more information.\n   */\n  resizeMimeType: null,\n\n  /**\n   * The quality of the resized images. See `resizeWidth`.\n   */\n  resizeQuality: 0.8,\n\n  /**\n   * How the images should be scaled down in case both, `resizeWidth` and `resizeHeight` are provided.\n   * Can be either `contain` or `crop`.\n   */\n  resizeMethod: \"contain\",\n\n  /**\n   * The base that is used to calculate the **displayed** filesize. You can\n   * change this to 1024 if you would rather display kibibytes, mebibytes,\n   * etc... 1024 is technically incorrect, because `1024 bytes` are `1 kibibyte`\n   * not `1 kilobyte`. You can change this to `1024` if you don't care about\n   * validity.\n   */\n  filesizeBase: 1000,\n\n  /**\n   * If not `null` defines how many files this Dropzone handles. If it exceeds,\n   * the event `maxfilesexceeded` will be called. The dropzone element gets the\n   * class `dz-max-files-reached` accordingly so you can provide visual\n   * feedback.\n   */\n  maxFiles: null,\n\n  /**\n   * An optional object to send additional headers to the server. Eg:\n   * `{ \"My-Awesome-Header\": \"header value\" }`\n   */\n  headers: null,\n\n  /**\n   * If `true`, the dropzone element itself will be clickable, if `false`\n   * nothing will be clickable.\n   *\n   * You can also pass an HTML element, a CSS selector (for multiple elements)\n   * or an array of those. In that case, all of those elements will trigger an\n   * upload when clicked.\n   */\n  clickable: true,\n\n  /**\n   * Whether hidden files in directories should be ignored.\n   */\n  ignoreHiddenFiles: true,\n\n  /**\n   * The default implementation of `accept` checks the file's mime type or\n   * extension against this list. This is a comma separated list of mime\n   * types or file extensions.\n   *\n   * Eg.: `image/*,application/pdf,.psd`\n   *\n   * If the Dropzone is `clickable` this option will also be used as\n   * [`accept`](https://developer.mozilla.org/en-US/docs/HTML/Element/input#attr-accept)\n   * parameter on the hidden file input as well.\n   */\n  acceptedFiles: null,\n\n  /**\n   * **Deprecated!**\n   * Use acceptedFiles instead.\n   */\n  acceptedMimeTypes: null,\n\n  /**\n   * If false, files will be added to the queue but the queue will not be\n   * processed automatically.\n   * This can be useful if you need some additional user input before sending\n   * files (or if you want want all files sent at once).\n   * If you're ready to send the file simply call `myDropzone.processQueue()`.\n   *\n   * See the [enqueuing file uploads](#enqueuing-file-uploads) documentation\n   * section for more information.\n   */\n  autoProcessQueue: true,\n\n  /**\n   * If false, files added to the dropzone will not be queued by default.\n   * You'll have to call `enqueueFile(file)` manually.\n   */\n  autoQueue: true,\n\n  /**\n   * If `true`, this will add a link to every file preview to remove or cancel (if\n   * already uploading) the file. The `dictCancelUpload`, `dictCancelUploadConfirmation`\n   * and `dictRemoveFile` options are used for the wording.\n   */\n  addRemoveLinks: false,\n\n  /**\n   * Defines where to display the file previews – if `null` the\n   * Dropzone element itself is used. Can be a plain `HTMLElement` or a CSS\n   * selector. The element should have the `dropzone-previews` class so\n   * the previews are displayed properly.\n   */\n  previewsContainer: null,\n\n  /**\n   * Set this to `true` if you don't want previews to be shown.\n   */\n  disablePreviews: false,\n\n  /**\n   * This is the element the hidden input field (which is used when clicking on the\n   * dropzone to trigger file selection) will be appended to. This might\n   * be important in case you use frameworks to switch the content of your page.\n   *\n   * Can be a selector string, or an element directly.\n   */\n  hiddenInputContainer: \"body\",\n\n  /**\n   * If null, no capture type will be specified\n   * If camera, mobile devices will skip the file selection and choose camera\n   * If microphone, mobile devices will skip the file selection and choose the microphone\n   * If camcorder, mobile devices will skip the file selection and choose the camera in video mode\n   * On apple devices multiple must be set to false.  AcceptedFiles may need to\n   * be set to an appropriate mime type (e.g. \"image/*\", \"audio/*\", or \"video/*\").\n   */\n  capture: null,\n\n  /**\n   * **Deprecated**. Use `renameFile` instead.\n   */\n  renameFilename: null,\n\n  /**\n   * A function that is invoked before the file is uploaded to the server and renames the file.\n   * This function gets the `File` as argument and can use the `file.name`. The actual name of the\n   * file that gets used during the upload can be accessed through `file.upload.filename`.\n   */\n  renameFile: null,\n\n  /**\n   * If `true` the fallback will be forced. This is very useful to test your server\n   * implementations first and make sure that everything works as\n   * expected without dropzone if you experience problems, and to test\n   * how your fallbacks will look.\n   */\n  forceFallback: false,\n\n  /**\n   * The text used before any files are dropped.\n   */\n  dictDefaultMessage: \"Drop files here to upload\",\n\n  /**\n   * The text that replaces the default message text it the browser is not supported.\n   */\n  dictFallbackMessage: \"Your browser does not support drag'n'drop file uploads.\",\n\n  /**\n   * The text that will be added before the fallback form.\n   * If you provide a  fallback element yourself, or if this option is `null` this will\n   * be ignored.\n   */\n  dictFallbackText: \"Please use the fallback form below to upload your files like in the olden days.\",\n\n  /**\n   * If the filesize is too big.\n   * `{{filesize}}` and `{{maxFilesize}}` will be replaced with the respective configuration values.\n   */\n  dictFileTooBig: \"File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.\",\n\n  /**\n   * If the file doesn't match the file type.\n   */\n  dictInvalidFileType: \"You can't upload files of this type.\",\n\n  /**\n   * If the server response was invalid.\n   * `{{statusCode}}` will be replaced with the servers status code.\n   */\n  dictResponseError: \"Server responded with {{statusCode}} code.\",\n\n  /**\n   * If `addRemoveLinks` is true, the text to be used for the cancel upload link.\n   */\n  dictCancelUpload: \"Cancel upload\",\n\n  /**\n   * The text that is displayed if an upload was manually canceled\n   */\n  dictUploadCanceled: \"Upload canceled.\",\n\n  /**\n   * If `addRemoveLinks` is true, the text to be used for confirmation when cancelling upload.\n   */\n  dictCancelUploadConfirmation: \"Are you sure you want to cancel this upload?\",\n\n  /**\n   * If `addRemoveLinks` is true, the text to be used to remove a file.\n   */\n  dictRemoveFile: \"Remove file\",\n\n  /**\n   * If this is not null, then the user will be prompted before removing a file.\n   */\n  dictRemoveFileConfirmation: null,\n\n  /**\n   * Displayed if `maxFiles` is st and exceeded.\n   * The string `{{maxFiles}}` will be replaced by the configuration value.\n   */\n  dictMaxFilesExceeded: \"You can not upload any more files.\",\n\n  /**\n   * Allows you to translate the different units. Starting with `tb` for terabytes and going down to\n   * `b` for bytes.\n   */\n  dictFileSizeUnits: {\n    tb: \"TB\",\n    gb: \"GB\",\n    mb: \"MB\",\n    kb: \"KB\",\n    b: \"b\"\n  },\n\n  /**\n   * Called when dropzone initialized\n   * You can add event listeners here\n   */\n  init: function init() {},\n\n  /**\n   * Can be an **object** of additional parameters to transfer to the server, **or** a `Function`\n   * that gets invoked with the `files`, `xhr` and, if it's a chunked upload, `chunk` arguments. In case\n   * of a function, this needs to return a map.\n   *\n   * The default implementation does nothing for normal uploads, but adds relevant information for\n   * chunked uploads.\n   *\n   * This is the same as adding hidden input fields in the form element.\n   */\n  params: function params(files, xhr, chunk) {\n    if (chunk) {\n      return {\n        dzuuid: chunk.file.upload.uuid,\n        dzchunkindex: chunk.index,\n        dztotalfilesize: chunk.file.size,\n        dzchunksize: this.options.chunkSize,\n        dztotalchunkcount: chunk.file.upload.totalChunkCount,\n        dzchunkbyteoffset: chunk.index * this.options.chunkSize\n      };\n    }\n  },\n\n  /**\n   * A function that gets a [file](https://developer.mozilla.org/en-US/docs/DOM/File)\n   * and a `done` function as parameters.\n   *\n   * If the done function is invoked without arguments, the file is \"accepted\" and will\n   * be processed. If you pass an error message, the file is rejected, and the error\n   * message will be displayed.\n   * This function will not be called if the file is too big or doesn't match the mime types.\n   */\n  accept: function accept(file, done) {\n    return done();\n  },\n\n  /**\n   * The callback that will be invoked when all chunks have been uploaded for a file.\n   * It gets the file for which the chunks have been uploaded as the first parameter,\n   * and the `done` function as second. `done()` needs to be invoked when everything\n   * needed to finish the upload process is done.\n   */\n  chunksUploaded: function chunksUploaded(file, done) {\n    done();\n  },\n\n  /**\n   * Gets called when the browser is not supported.\n   * The default implementation shows the fallback input field and adds\n   * a text.\n   */\n  fallback: function fallback() {\n    // This code should pass in IE7... :(\n    var messageElement;\n    this.element.className = \"\".concat(this.element.className, \" dz-browser-not-supported\");\n\n    var _iterator = options_createForOfIteratorHelper(this.element.getElementsByTagName(\"div\"), true),\n        _step;\n\n    try {\n      for (_iterator.s(); !(_step = _iterator.n()).done;) {\n        var child = _step.value;\n\n        if (/(^| )dz-message($| )/.test(child.className)) {\n          messageElement = child;\n          child.className = \"dz-message\"; // Removes the 'dz-default' class\n\n          break;\n        }\n      }\n    } catch (err) {\n      _iterator.e(err);\n    } finally {\n      _iterator.f();\n    }\n\n    if (!messageElement) {\n      messageElement = Dropzone.createElement('<div class=\"dz-message\"><span></span></div>');\n      this.element.appendChild(messageElement);\n    }\n\n    var span = messageElement.getElementsByTagName(\"span\")[0];\n\n    if (span) {\n      if (span.textContent != null) {\n        span.textContent = this.options.dictFallbackMessage;\n      } else if (span.innerText != null) {\n        span.innerText = this.options.dictFallbackMessage;\n      }\n    }\n\n    return this.element.appendChild(this.getFallbackForm());\n  },\n\n  /**\n   * Gets called to calculate the thumbnail dimensions.\n   *\n   * It gets `file`, `width` and `height` (both may be `null`) as parameters and must return an object containing:\n   *\n   *  - `srcWidth` & `srcHeight` (required)\n   *  - `trgWidth` & `trgHeight` (required)\n   *  - `srcX` & `srcY` (optional, default `0`)\n   *  - `trgX` & `trgY` (optional, default `0`)\n   *\n   * Those values are going to be used by `ctx.drawImage()`.\n   */\n  resize: function resize(file, width, height, resizeMethod) {\n    var info = {\n      srcX: 0,\n      srcY: 0,\n      srcWidth: file.width,\n      srcHeight: file.height\n    };\n    var srcRatio = file.width / file.height; // Automatically calculate dimensions if not specified\n\n    if (width == null && height == null) {\n      width = info.srcWidth;\n      height = info.srcHeight;\n    } else if (width == null) {\n      width = height * srcRatio;\n    } else if (height == null) {\n      height = width / srcRatio;\n    } // Make sure images aren't upscaled\n\n\n    width = Math.min(width, info.srcWidth);\n    height = Math.min(height, info.srcHeight);\n    var trgRatio = width / height;\n\n    if (info.srcWidth > width || info.srcHeight > height) {\n      // Image is bigger and needs rescaling\n      if (resizeMethod === \"crop\") {\n        if (srcRatio > trgRatio) {\n          info.srcHeight = file.height;\n          info.srcWidth = info.srcHeight * trgRatio;\n        } else {\n          info.srcWidth = file.width;\n          info.srcHeight = info.srcWidth / trgRatio;\n        }\n      } else if (resizeMethod === \"contain\") {\n        // Method 'contain'\n        if (srcRatio > trgRatio) {\n          height = width / srcRatio;\n        } else {\n          width = height * srcRatio;\n        }\n      } else {\n        throw new Error(\"Unknown resizeMethod '\".concat(resizeMethod, \"'\"));\n      }\n    }\n\n    info.srcX = (file.width - info.srcWidth) / 2;\n    info.srcY = (file.height - info.srcHeight) / 2;\n    info.trgWidth = width;\n    info.trgHeight = height;\n    return info;\n  },\n\n  /**\n   * Can be used to transform the file (for example, resize an image if necessary).\n   *\n   * The default implementation uses `resizeWidth` and `resizeHeight` (if provided) and resizes\n   * images according to those dimensions.\n   *\n   * Gets the `file` as the first parameter, and a `done()` function as the second, that needs\n   * to be invoked with the file when the transformation is done.\n   */\n  transformFile: function transformFile(file, done) {\n    if ((this.options.resizeWidth || this.options.resizeHeight) && file.type.match(/image.*/)) {\n      return this.resizeImage(file, this.options.resizeWidth, this.options.resizeHeight, this.options.resizeMethod, done);\n    } else {\n      return done(file);\n    }\n  },\n\n  /**\n   * A string that contains the template used for each dropped\n   * file. Change it to fulfill your needs but make sure to properly\n   * provide all elements.\n   *\n   * If you want to use an actual HTML element instead of providing a String\n   * as a config option, you could create a div with the id `tpl`,\n   * put the template inside it and provide the element like this:\n   *\n   *     document\n   *       .querySelector('#tpl')\n   *       .innerHTML\n   *\n   */\n  previewTemplate: preview_template,\n\n  /*\n   Those functions register themselves to the events on init and handle all\n   the user interface specific stuff. Overwriting them won't break the upload\n   but can break the way it's displayed.\n   You can overwrite them if you don't like the default behavior. If you just\n   want to add an additional event handler, register it on the dropzone object\n   and don't overwrite those options.\n   */\n  // Those are self explanatory and simply concern the DragnDrop.\n  drop: function drop(e) {\n    return this.element.classList.remove(\"dz-drag-hover\");\n  },\n  dragstart: function dragstart(e) {},\n  dragend: function dragend(e) {\n    return this.element.classList.remove(\"dz-drag-hover\");\n  },\n  dragenter: function dragenter(e) {\n    return this.element.classList.add(\"dz-drag-hover\");\n  },\n  dragover: function dragover(e) {\n    return this.element.classList.add(\"dz-drag-hover\");\n  },\n  dragleave: function dragleave(e) {\n    return this.element.classList.remove(\"dz-drag-hover\");\n  },\n  paste: function paste(e) {},\n  // Called whenever there are no files left in the dropzone anymore, and the\n  // dropzone should be displayed as if in the initial state.\n  reset: function reset() {\n    return this.element.classList.remove(\"dz-started\");\n  },\n  // Called when a file is added to the queue\n  // Receives `file`\n  addedfile: function addedfile(file) {\n    var _this = this;\n\n    if (this.element === this.previewsContainer) {\n      this.element.classList.add(\"dz-started\");\n    }\n\n    if (this.previewsContainer && !this.options.disablePreviews) {\n      file.previewElement = Dropzone.createElement(this.options.previewTemplate.trim());\n      file.previewTemplate = file.previewElement; // Backwards compatibility\n\n      this.previewsContainer.appendChild(file.previewElement);\n\n      var _iterator2 = options_createForOfIteratorHelper(file.previewElement.querySelectorAll(\"[data-dz-name]\"), true),\n          _step2;\n\n      try {\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n          var node = _step2.value;\n          node.textContent = file.name;\n        }\n      } catch (err) {\n        _iterator2.e(err);\n      } finally {\n        _iterator2.f();\n      }\n\n      var _iterator3 = options_createForOfIteratorHelper(file.previewElement.querySelectorAll(\"[data-dz-size]\"), true),\n          _step3;\n\n      try {\n        for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n          node = _step3.value;\n          node.innerHTML = this.filesize(file.size);\n        }\n      } catch (err) {\n        _iterator3.e(err);\n      } finally {\n        _iterator3.f();\n      }\n\n      if (this.options.addRemoveLinks) {\n        file._removeLink = Dropzone.createElement(\"<a class=\\\"dz-remove\\\" href=\\\"javascript:undefined;\\\" data-dz-remove>\".concat(this.options.dictRemoveFile, \"</a>\"));\n        file.previewElement.appendChild(file._removeLink);\n      }\n\n      var removeFileEvent = function removeFileEvent(e) {\n        e.preventDefault();\n        e.stopPropagation();\n\n        if (file.status === Dropzone.UPLOADING) {\n          return Dropzone.confirm(_this.options.dictCancelUploadConfirmation, function () {\n            return _this.removeFile(file);\n          });\n        } else {\n          if (_this.options.dictRemoveFileConfirmation) {\n            return Dropzone.confirm(_this.options.dictRemoveFileConfirmation, function () {\n              return _this.removeFile(file);\n            });\n          } else {\n            return _this.removeFile(file);\n          }\n        }\n      };\n\n      var _iterator4 = options_createForOfIteratorHelper(file.previewElement.querySelectorAll(\"[data-dz-remove]\"), true),\n          _step4;\n\n      try {\n        for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n          var removeLink = _step4.value;\n          removeLink.addEventListener(\"click\", removeFileEvent);\n        }\n      } catch (err) {\n        _iterator4.e(err);\n      } finally {\n        _iterator4.f();\n      }\n    }\n  },\n  // Called whenever a file is removed.\n  removedfile: function removedfile(file) {\n    if (file.previewElement != null && file.previewElement.parentNode != null) {\n      file.previewElement.parentNode.removeChild(file.previewElement);\n    }\n\n    return this._updateMaxFilesReachedClass();\n  },\n  // Called when a thumbnail has been generated\n  // Receives `file` and `dataUrl`\n  thumbnail: function thumbnail(file, dataUrl) {\n    if (file.previewElement) {\n      file.previewElement.classList.remove(\"dz-file-preview\");\n\n      var _iterator5 = options_createForOfIteratorHelper(file.previewElement.querySelectorAll(\"[data-dz-thumbnail]\"), true),\n          _step5;\n\n      try {\n        for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n          var thumbnailElement = _step5.value;\n          thumbnailElement.alt = file.name;\n          thumbnailElement.src = dataUrl;\n        }\n      } catch (err) {\n        _iterator5.e(err);\n      } finally {\n        _iterator5.f();\n      }\n\n      return setTimeout(function () {\n        return file.previewElement.classList.add(\"dz-image-preview\");\n      }, 1);\n    }\n  },\n  // Called whenever an error occurs\n  // Receives `file` and `message`\n  error: function error(file, message) {\n    if (file.previewElement) {\n      file.previewElement.classList.add(\"dz-error\");\n\n      if (typeof message !== \"string\" && message.error) {\n        message = message.error;\n      }\n\n      var _iterator6 = options_createForOfIteratorHelper(file.previewElement.querySelectorAll(\"[data-dz-errormessage]\"), true),\n          _step6;\n\n      try {\n        for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n          var node = _step6.value;\n          node.textContent = message;\n        }\n      } catch (err) {\n        _iterator6.e(err);\n      } finally {\n        _iterator6.f();\n      }\n    }\n  },\n  errormultiple: function errormultiple() {},\n  // Called when a file gets processed. Since there is a cue, not all added\n  // files are processed immediately.\n  // Receives `file`\n  processing: function processing(file) {\n    if (file.previewElement) {\n      file.previewElement.classList.add(\"dz-processing\");\n\n      if (file._removeLink) {\n        return file._removeLink.innerHTML = this.options.dictCancelUpload;\n      }\n    }\n  },\n  processingmultiple: function processingmultiple() {},\n  // Called whenever the upload progress gets updated.\n  // Receives `file`, `progress` (percentage 0-100) and `bytesSent`.\n  // To get the total number of bytes of the file, use `file.size`\n  uploadprogress: function uploadprogress(file, progress, bytesSent) {\n    if (file.previewElement) {\n      var _iterator7 = options_createForOfIteratorHelper(file.previewElement.querySelectorAll(\"[data-dz-uploadprogress]\"), true),\n          _step7;\n\n      try {\n        for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n          var node = _step7.value;\n          node.nodeName === \"PROGRESS\" ? node.value = progress : node.style.width = \"\".concat(progress, \"%\");\n        }\n      } catch (err) {\n        _iterator7.e(err);\n      } finally {\n        _iterator7.f();\n      }\n    }\n  },\n  // Called whenever the total upload progress gets updated.\n  // Called with totalUploadProgress (0-100), totalBytes and totalBytesSent\n  totaluploadprogress: function totaluploadprogress() {},\n  // Called just before the file is sent. Gets the `xhr` object as second\n  // parameter, so you can modify it (for example to add a CSRF token) and a\n  // `formData` object to add additional information.\n  sending: function sending() {},\n  sendingmultiple: function sendingmultiple() {},\n  // When the complete upload is finished and successful\n  // Receives `file`\n  success: function success(file) {\n    if (file.previewElement) {\n      return file.previewElement.classList.add(\"dz-success\");\n    }\n  },\n  successmultiple: function successmultiple() {},\n  // When the upload is canceled.\n  canceled: function canceled(file) {\n    return this.emit(\"error\", file, this.options.dictUploadCanceled);\n  },\n  canceledmultiple: function canceledmultiple() {},\n  // When the upload is finished, either with success or an error.\n  // Receives `file`\n  complete: function complete(file) {\n    if (file._removeLink) {\n      file._removeLink.innerHTML = this.options.dictRemoveFile;\n    }\n\n    if (file.previewElement) {\n      return file.previewElement.classList.add(\"dz-complete\");\n    }\n  },\n  completemultiple: function completemultiple() {},\n  maxfilesexceeded: function maxfilesexceeded() {},\n  maxfilesreached: function maxfilesreached() {},\n  queuecomplete: function queuecomplete() {},\n  addedfiles: function addedfiles() {}\n};\n/* harmony default export */ var src_options = (defaultOptions);\n;// CONCATENATED MODULE: ./src/dropzone.js\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction dropzone_createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = dropzone_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction dropzone_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return dropzone_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return dropzone_arrayLikeToArray(o, minLen); }\n\nfunction dropzone_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction dropzone_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction dropzone_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); } }\n\nfunction dropzone_createClass(Constructor, protoProps, staticProps) { if (protoProps) dropzone_defineProperties(Constructor.prototype, protoProps); if (staticProps) dropzone_defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n\n\n\nvar Dropzone = /*#__PURE__*/function (_Emitter) {\n  _inherits(Dropzone, _Emitter);\n\n  var _super = _createSuper(Dropzone);\n\n  function Dropzone(el, options) {\n    var _this;\n\n    dropzone_classCallCheck(this, Dropzone);\n\n    _this = _super.call(this);\n    var fallback, left;\n    _this.element = el; // For backwards compatibility since the version was in the prototype previously\n\n    _this.version = Dropzone.version;\n    _this.clickableElements = [];\n    _this.listeners = [];\n    _this.files = []; // All files\n\n    if (typeof _this.element === \"string\") {\n      _this.element = document.querySelector(_this.element);\n    } // Not checking if instance of HTMLElement or Element since IE9 is extremely weird.\n\n\n    if (!_this.element || _this.element.nodeType == null) {\n      throw new Error(\"Invalid dropzone element.\");\n    }\n\n    if (_this.element.dropzone) {\n      throw new Error(\"Dropzone already attached.\");\n    } // Now add this dropzone to the instances.\n\n\n    Dropzone.instances.push(_assertThisInitialized(_this)); // Put the dropzone inside the element itself.\n\n    _this.element.dropzone = _assertThisInitialized(_this);\n    var elementOptions = (left = Dropzone.optionsForElement(_this.element)) != null ? left : {};\n    _this.options = Dropzone.extend({}, src_options, elementOptions, options != null ? options : {});\n    _this.options.previewTemplate = _this.options.previewTemplate.replace(/\\n*/g, \"\"); // If the browser failed, just call the fallback and leave\n\n    if (_this.options.forceFallback || !Dropzone.isBrowserSupported()) {\n      return _possibleConstructorReturn(_this, _this.options.fallback.call(_assertThisInitialized(_this)));\n    } // @options.url = @element.getAttribute \"action\" unless @options.url?\n\n\n    if (_this.options.url == null) {\n      _this.options.url = _this.element.getAttribute(\"action\");\n    }\n\n    if (!_this.options.url) {\n      throw new Error(\"No URL provided.\");\n    }\n\n    if (_this.options.acceptedFiles && _this.options.acceptedMimeTypes) {\n      throw new Error(\"You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated.\");\n    }\n\n    if (_this.options.uploadMultiple && _this.options.chunking) {\n      throw new Error(\"You cannot set both: uploadMultiple and chunking.\");\n    } // Backwards compatibility\n\n\n    if (_this.options.acceptedMimeTypes) {\n      _this.options.acceptedFiles = _this.options.acceptedMimeTypes;\n      delete _this.options.acceptedMimeTypes;\n    } // Backwards compatibility\n\n\n    if (_this.options.renameFilename != null) {\n      _this.options.renameFile = function (file) {\n        return _this.options.renameFilename.call(_assertThisInitialized(_this), file.name, file);\n      };\n    }\n\n    if (typeof _this.options.method === \"string\") {\n      _this.options.method = _this.options.method.toUpperCase();\n    }\n\n    if ((fallback = _this.getExistingFallback()) && fallback.parentNode) {\n      // Remove the fallback\n      fallback.parentNode.removeChild(fallback);\n    } // Display previews in the previewsContainer element or the Dropzone element unless explicitly set to false\n\n\n    if (_this.options.previewsContainer !== false) {\n      if (_this.options.previewsContainer) {\n        _this.previewsContainer = Dropzone.getElement(_this.options.previewsContainer, \"previewsContainer\");\n      } else {\n        _this.previewsContainer = _this.element;\n      }\n    }\n\n    if (_this.options.clickable) {\n      if (_this.options.clickable === true) {\n        _this.clickableElements = [_this.element];\n      } else {\n        _this.clickableElements = Dropzone.getElements(_this.options.clickable, \"clickable\");\n      }\n    }\n\n    _this.init();\n\n    return _this;\n  } // Returns all files that have been accepted\n\n\n  dropzone_createClass(Dropzone, [{\n    key: \"getAcceptedFiles\",\n    value: function getAcceptedFiles() {\n      return this.files.filter(function (file) {\n        return file.accepted;\n      }).map(function (file) {\n        return file;\n      });\n    } // Returns all files that have been rejected\n    // Not sure when that's going to be useful, but added for completeness.\n\n  }, {\n    key: \"getRejectedFiles\",\n    value: function getRejectedFiles() {\n      return this.files.filter(function (file) {\n        return !file.accepted;\n      }).map(function (file) {\n        return file;\n      });\n    }\n  }, {\n    key: \"getFilesWithStatus\",\n    value: function getFilesWithStatus(status) {\n      return this.files.filter(function (file) {\n        return file.status === status;\n      }).map(function (file) {\n        return file;\n      });\n    } // Returns all files that are in the queue\n\n  }, {\n    key: \"getQueuedFiles\",\n    value: function getQueuedFiles() {\n      return this.getFilesWithStatus(Dropzone.QUEUED);\n    }\n  }, {\n    key: \"getUploadingFiles\",\n    value: function getUploadingFiles() {\n      return this.getFilesWithStatus(Dropzone.UPLOADING);\n    }\n  }, {\n    key: \"getAddedFiles\",\n    value: function getAddedFiles() {\n      return this.getFilesWithStatus(Dropzone.ADDED);\n    } // Files that are either queued or uploading\n\n  }, {\n    key: \"getActiveFiles\",\n    value: function getActiveFiles() {\n      return this.files.filter(function (file) {\n        return file.status === Dropzone.UPLOADING || file.status === Dropzone.QUEUED;\n      }).map(function (file) {\n        return file;\n      });\n    } // The function that gets called when Dropzone is initialized. You\n    // can (and should) setup event listeners inside this function.\n\n  }, {\n    key: \"init\",\n    value: function init() {\n      var _this2 = this;\n\n      // In case it isn't set already\n      if (this.element.tagName === \"form\") {\n        this.element.setAttribute(\"enctype\", \"multipart/form-data\");\n      }\n\n      if (this.element.classList.contains(\"dropzone\") && !this.element.querySelector(\".dz-message\")) {\n        this.element.appendChild(Dropzone.createElement(\"<div class=\\\"dz-default dz-message\\\"><button class=\\\"dz-button\\\" type=\\\"button\\\">\".concat(this.options.dictDefaultMessage, \"</button></div>\")));\n      }\n\n      if (this.clickableElements.length) {\n        var setupHiddenFileInput = function setupHiddenFileInput() {\n          if (_this2.hiddenFileInput) {\n            _this2.hiddenFileInput.parentNode.removeChild(_this2.hiddenFileInput);\n          }\n\n          _this2.hiddenFileInput = document.createElement(\"input\");\n\n          _this2.hiddenFileInput.setAttribute(\"type\", \"file\");\n\n          if (_this2.options.maxFiles === null || _this2.options.maxFiles > 1) {\n            _this2.hiddenFileInput.setAttribute(\"multiple\", \"multiple\");\n          }\n\n          _this2.hiddenFileInput.className = \"dz-hidden-input\";\n\n          if (_this2.options.acceptedFiles !== null) {\n            _this2.hiddenFileInput.setAttribute(\"accept\", _this2.options.acceptedFiles);\n          }\n\n          if (_this2.options.capture !== null) {\n            _this2.hiddenFileInput.setAttribute(\"capture\", _this2.options.capture);\n          } // Making sure that no one can \"tab\" into this field.\n\n\n          _this2.hiddenFileInput.setAttribute(\"tabindex\", \"-1\"); // Not setting `display=\"none\"` because some browsers don't accept clicks\n          // on elements that aren't displayed.\n\n\n          _this2.hiddenFileInput.style.visibility = \"hidden\";\n          _this2.hiddenFileInput.style.position = \"absolute\";\n          _this2.hiddenFileInput.style.top = \"0\";\n          _this2.hiddenFileInput.style.left = \"0\";\n          _this2.hiddenFileInput.style.height = \"0\";\n          _this2.hiddenFileInput.style.width = \"0\";\n          Dropzone.getElement(_this2.options.hiddenInputContainer, \"hiddenInputContainer\").appendChild(_this2.hiddenFileInput);\n\n          _this2.hiddenFileInput.addEventListener(\"change\", function () {\n            var files = _this2.hiddenFileInput.files;\n\n            if (files.length) {\n              var _iterator = dropzone_createForOfIteratorHelper(files, true),\n                  _step;\n\n              try {\n                for (_iterator.s(); !(_step = _iterator.n()).done;) {\n                  var file = _step.value;\n\n                  _this2.addFile(file);\n                }\n              } catch (err) {\n                _iterator.e(err);\n              } finally {\n                _iterator.f();\n              }\n            }\n\n            _this2.emit(\"addedfiles\", files);\n\n            setupHiddenFileInput();\n          });\n        };\n\n        setupHiddenFileInput();\n      }\n\n      this.URL = window.URL !== null ? window.URL : window.webkitURL; // Setup all event listeners on the Dropzone object itself.\n      // They're not in @setupEventListeners() because they shouldn't be removed\n      // again when the dropzone gets disabled.\n\n      var _iterator2 = dropzone_createForOfIteratorHelper(this.events, true),\n          _step2;\n\n      try {\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n          var eventName = _step2.value;\n          this.on(eventName, this.options[eventName]);\n        }\n      } catch (err) {\n        _iterator2.e(err);\n      } finally {\n        _iterator2.f();\n      }\n\n      this.on(\"uploadprogress\", function () {\n        return _this2.updateTotalUploadProgress();\n      });\n      this.on(\"removedfile\", function () {\n        return _this2.updateTotalUploadProgress();\n      });\n      this.on(\"canceled\", function (file) {\n        return _this2.emit(\"complete\", file);\n      }); // Emit a `queuecomplete` event if all files finished uploading.\n\n      this.on(\"complete\", function (file) {\n        if (_this2.getAddedFiles().length === 0 && _this2.getUploadingFiles().length === 0 && _this2.getQueuedFiles().length === 0) {\n          // This needs to be deferred so that `queuecomplete` really triggers after `complete`\n          return setTimeout(function () {\n            return _this2.emit(\"queuecomplete\");\n          }, 0);\n        }\n      });\n\n      var containsFiles = function containsFiles(e) {\n        if (e.dataTransfer.types) {\n          // Because e.dataTransfer.types is an Object in\n          // IE, we need to iterate like this instead of\n          // using e.dataTransfer.types.some()\n          for (var i = 0; i < e.dataTransfer.types.length; i++) {\n            if (e.dataTransfer.types[i] === \"Files\") return true;\n          }\n        }\n\n        return false;\n      };\n\n      var noPropagation = function noPropagation(e) {\n        // If there are no files, we don't want to stop\n        // propagation so we don't interfere with other\n        // drag and drop behaviour.\n        if (!containsFiles(e)) return;\n        e.stopPropagation();\n\n        if (e.preventDefault) {\n          return e.preventDefault();\n        } else {\n          return e.returnValue = false;\n        }\n      }; // Create the listeners\n\n\n      this.listeners = [{\n        element: this.element,\n        events: {\n          dragstart: function dragstart(e) {\n            return _this2.emit(\"dragstart\", e);\n          },\n          dragenter: function dragenter(e) {\n            noPropagation(e);\n            return _this2.emit(\"dragenter\", e);\n          },\n          dragover: function dragover(e) {\n            // Makes it possible to drag files from chrome's download bar\n            // http://stackoverflow.com/questions/19526430/drag-and-drop-file-uploads-from-chrome-downloads-bar\n            // Try is required to prevent bug in Internet Explorer 11 (SCRIPT65535 exception)\n            var efct;\n\n            try {\n              efct = e.dataTransfer.effectAllowed;\n            } catch (error) {}\n\n            e.dataTransfer.dropEffect = \"move\" === efct || \"linkMove\" === efct ? \"move\" : \"copy\";\n            noPropagation(e);\n            return _this2.emit(\"dragover\", e);\n          },\n          dragleave: function dragleave(e) {\n            return _this2.emit(\"dragleave\", e);\n          },\n          drop: function drop(e) {\n            noPropagation(e);\n            return _this2.drop(e);\n          },\n          dragend: function dragend(e) {\n            return _this2.emit(\"dragend\", e);\n          }\n        } // This is disabled right now, because the browsers don't implement it properly.\n        // \"paste\": (e) =>\n        //   noPropagation e\n        //   @paste e\n\n      }];\n      this.clickableElements.forEach(function (clickableElement) {\n        return _this2.listeners.push({\n          element: clickableElement,\n          events: {\n            click: function click(evt) {\n              // Only the actual dropzone or the message element should trigger file selection\n              if (clickableElement !== _this2.element || evt.target === _this2.element || Dropzone.elementInside(evt.target, _this2.element.querySelector(\".dz-message\"))) {\n                _this2.hiddenFileInput.click(); // Forward the click\n\n              }\n\n              return true;\n            }\n          }\n        });\n      });\n      this.enable();\n      return this.options.init.call(this);\n    } // Not fully tested yet\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.disable();\n      this.removeAllFiles(true);\n\n      if (this.hiddenFileInput != null ? this.hiddenFileInput.parentNode : undefined) {\n        this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput);\n        this.hiddenFileInput = null;\n      }\n\n      delete this.element.dropzone;\n      return Dropzone.instances.splice(Dropzone.instances.indexOf(this), 1);\n    }\n  }, {\n    key: \"updateTotalUploadProgress\",\n    value: function updateTotalUploadProgress() {\n      var totalUploadProgress;\n      var totalBytesSent = 0;\n      var totalBytes = 0;\n      var activeFiles = this.getActiveFiles();\n\n      if (activeFiles.length) {\n        var _iterator3 = dropzone_createForOfIteratorHelper(this.getActiveFiles(), true),\n            _step3;\n\n        try {\n          for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n            var file = _step3.value;\n            totalBytesSent += file.upload.bytesSent;\n            totalBytes += file.upload.total;\n          }\n        } catch (err) {\n          _iterator3.e(err);\n        } finally {\n          _iterator3.f();\n        }\n\n        totalUploadProgress = 100 * totalBytesSent / totalBytes;\n      } else {\n        totalUploadProgress = 100;\n      }\n\n      return this.emit(\"totaluploadprogress\", totalUploadProgress, totalBytes, totalBytesSent);\n    } // @options.paramName can be a function taking one parameter rather than a string.\n    // A parameter name for a file is obtained simply by calling this with an index number.\n\n  }, {\n    key: \"_getParamName\",\n    value: function _getParamName(n) {\n      if (typeof this.options.paramName === \"function\") {\n        return this.options.paramName(n);\n      } else {\n        return \"\".concat(this.options.paramName).concat(this.options.uploadMultiple ? \"[\".concat(n, \"]\") : \"\");\n      }\n    } // If @options.renameFile is a function,\n    // the function will be used to rename the file.name before appending it to the formData\n\n  }, {\n    key: \"_renameFile\",\n    value: function _renameFile(file) {\n      if (typeof this.options.renameFile !== \"function\") {\n        return file.name;\n      }\n\n      return this.options.renameFile(file);\n    } // Returns a form that can be used as fallback if the browser does not support DragnDrop\n    //\n    // If the dropzone is already a form, only the input field and button are returned. Otherwise a complete form element is provided.\n    // This code has to pass in IE7 :(\n\n  }, {\n    key: \"getFallbackForm\",\n    value: function getFallbackForm() {\n      var existingFallback, form;\n\n      if (existingFallback = this.getExistingFallback()) {\n        return existingFallback;\n      }\n\n      var fieldsString = '<div class=\"dz-fallback\">';\n\n      if (this.options.dictFallbackText) {\n        fieldsString += \"<p>\".concat(this.options.dictFallbackText, \"</p>\");\n      }\n\n      fieldsString += \"<input type=\\\"file\\\" name=\\\"\".concat(this._getParamName(0), \"\\\" \").concat(this.options.uploadMultiple ? 'multiple=\"multiple\"' : undefined, \" /><input type=\\\"submit\\\" value=\\\"Upload!\\\"></div>\");\n      var fields = Dropzone.createElement(fieldsString);\n\n      if (this.element.tagName !== \"FORM\") {\n        form = Dropzone.createElement(\"<form action=\\\"\".concat(this.options.url, \"\\\" enctype=\\\"multipart/form-data\\\" method=\\\"\").concat(this.options.method, \"\\\"></form>\"));\n        form.appendChild(fields);\n      } else {\n        // Make sure that the enctype and method attributes are set properly\n        this.element.setAttribute(\"enctype\", \"multipart/form-data\");\n        this.element.setAttribute(\"method\", this.options.method);\n      }\n\n      return form != null ? form : fields;\n    } // Returns the fallback elements if they exist already\n    //\n    // This code has to pass in IE7 :(\n\n  }, {\n    key: \"getExistingFallback\",\n    value: function getExistingFallback() {\n      var getFallback = function getFallback(elements) {\n        var _iterator4 = dropzone_createForOfIteratorHelper(elements, true),\n            _step4;\n\n        try {\n          for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n            var el = _step4.value;\n\n            if (/(^| )fallback($| )/.test(el.className)) {\n              return el;\n            }\n          }\n        } catch (err) {\n          _iterator4.e(err);\n        } finally {\n          _iterator4.f();\n        }\n      };\n\n      for (var _i = 0, _arr = [\"div\", \"form\"]; _i < _arr.length; _i++) {\n        var tagName = _arr[_i];\n        var fallback;\n\n        if (fallback = getFallback(this.element.getElementsByTagName(tagName))) {\n          return fallback;\n        }\n      }\n    } // Activates all listeners stored in @listeners\n\n  }, {\n    key: \"setupEventListeners\",\n    value: function setupEventListeners() {\n      return this.listeners.map(function (elementListeners) {\n        return function () {\n          var result = [];\n\n          for (var event in elementListeners.events) {\n            var listener = elementListeners.events[event];\n            result.push(elementListeners.element.addEventListener(event, listener, false));\n          }\n\n          return result;\n        }();\n      });\n    } // Deactivates all listeners stored in @listeners\n\n  }, {\n    key: \"removeEventListeners\",\n    value: function removeEventListeners() {\n      return this.listeners.map(function (elementListeners) {\n        return function () {\n          var result = [];\n\n          for (var event in elementListeners.events) {\n            var listener = elementListeners.events[event];\n            result.push(elementListeners.element.removeEventListener(event, listener, false));\n          }\n\n          return result;\n        }();\n      });\n    } // Removes all event listeners and cancels all files in the queue or being processed.\n\n  }, {\n    key: \"disable\",\n    value: function disable() {\n      var _this3 = this;\n\n      this.clickableElements.forEach(function (element) {\n        return element.classList.remove(\"dz-clickable\");\n      });\n      this.removeEventListeners();\n      this.disabled = true;\n      return this.files.map(function (file) {\n        return _this3.cancelUpload(file);\n      });\n    }\n  }, {\n    key: \"enable\",\n    value: function enable() {\n      delete this.disabled;\n      this.clickableElements.forEach(function (element) {\n        return element.classList.add(\"dz-clickable\");\n      });\n      return this.setupEventListeners();\n    } // Returns a nicely formatted filesize\n\n  }, {\n    key: \"filesize\",\n    value: function filesize(size) {\n      var selectedSize = 0;\n      var selectedUnit = \"b\";\n\n      if (size > 0) {\n        var units = [\"tb\", \"gb\", \"mb\", \"kb\", \"b\"];\n\n        for (var i = 0; i < units.length; i++) {\n          var unit = units[i];\n          var cutoff = Math.pow(this.options.filesizeBase, 4 - i) / 10;\n\n          if (size >= cutoff) {\n            selectedSize = size / Math.pow(this.options.filesizeBase, 4 - i);\n            selectedUnit = unit;\n            break;\n          }\n        }\n\n        selectedSize = Math.round(10 * selectedSize) / 10; // Cutting of digits\n      }\n\n      return \"<strong>\".concat(selectedSize, \"</strong> \").concat(this.options.dictFileSizeUnits[selectedUnit]);\n    } // Adds or removes the `dz-max-files-reached` class from the form.\n\n  }, {\n    key: \"_updateMaxFilesReachedClass\",\n    value: function _updateMaxFilesReachedClass() {\n      if (this.options.maxFiles != null && this.getAcceptedFiles().length >= this.options.maxFiles) {\n        if (this.getAcceptedFiles().length === this.options.maxFiles) {\n          this.emit(\"maxfilesreached\", this.files);\n        }\n\n        return this.element.classList.add(\"dz-max-files-reached\");\n      } else {\n        return this.element.classList.remove(\"dz-max-files-reached\");\n      }\n    }\n  }, {\n    key: \"drop\",\n    value: function drop(e) {\n      if (!e.dataTransfer) {\n        return;\n      }\n\n      this.emit(\"drop\", e); // Convert the FileList to an Array\n      // This is necessary for IE11\n\n      var files = [];\n\n      for (var i = 0; i < e.dataTransfer.files.length; i++) {\n        files[i] = e.dataTransfer.files[i];\n      } // Even if it's a folder, files.length will contain the folders.\n\n\n      if (files.length) {\n        var items = e.dataTransfer.items;\n\n        if (items && items.length && items[0].webkitGetAsEntry != null) {\n          // The browser supports dropping of folders, so handle items instead of files\n          this._addFilesFromItems(items);\n        } else {\n          this.handleFiles(files);\n        }\n      }\n\n      this.emit(\"addedfiles\", files);\n    }\n  }, {\n    key: \"paste\",\n    value: function paste(e) {\n      if (__guard__(e != null ? e.clipboardData : undefined, function (x) {\n        return x.items;\n      }) == null) {\n        return;\n      }\n\n      this.emit(\"paste\", e);\n      var items = e.clipboardData.items;\n\n      if (items.length) {\n        return this._addFilesFromItems(items);\n      }\n    }\n  }, {\n    key: \"handleFiles\",\n    value: function handleFiles(files) {\n      var _iterator5 = dropzone_createForOfIteratorHelper(files, true),\n          _step5;\n\n      try {\n        for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n          var file = _step5.value;\n          this.addFile(file);\n        }\n      } catch (err) {\n        _iterator5.e(err);\n      } finally {\n        _iterator5.f();\n      }\n    } // When a folder is dropped (or files are pasted), items must be handled\n    // instead of files.\n\n  }, {\n    key: \"_addFilesFromItems\",\n    value: function _addFilesFromItems(items) {\n      var _this4 = this;\n\n      return function () {\n        var result = [];\n\n        var _iterator6 = dropzone_createForOfIteratorHelper(items, true),\n            _step6;\n\n        try {\n          for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n            var item = _step6.value;\n            var entry;\n\n            if (item.webkitGetAsEntry != null && (entry = item.webkitGetAsEntry())) {\n              if (entry.isFile) {\n                result.push(_this4.addFile(item.getAsFile()));\n              } else if (entry.isDirectory) {\n                // Append all files from that directory to files\n                result.push(_this4._addFilesFromDirectory(entry, entry.name));\n              } else {\n                result.push(undefined);\n              }\n            } else if (item.getAsFile != null) {\n              if (item.kind == null || item.kind === \"file\") {\n                result.push(_this4.addFile(item.getAsFile()));\n              } else {\n                result.push(undefined);\n              }\n            } else {\n              result.push(undefined);\n            }\n          }\n        } catch (err) {\n          _iterator6.e(err);\n        } finally {\n          _iterator6.f();\n        }\n\n        return result;\n      }();\n    } // Goes through the directory, and adds each file it finds recursively\n\n  }, {\n    key: \"_addFilesFromDirectory\",\n    value: function _addFilesFromDirectory(directory, path) {\n      var _this5 = this;\n\n      var dirReader = directory.createReader();\n\n      var errorHandler = function errorHandler(error) {\n        return __guardMethod__(console, \"log\", function (o) {\n          return o.log(error);\n        });\n      };\n\n      var readEntries = function readEntries() {\n        return dirReader.readEntries(function (entries) {\n          if (entries.length > 0) {\n            var _iterator7 = dropzone_createForOfIteratorHelper(entries, true),\n                _step7;\n\n            try {\n              for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n                var entry = _step7.value;\n\n                if (entry.isFile) {\n                  entry.file(function (file) {\n                    if (_this5.options.ignoreHiddenFiles && file.name.substring(0, 1) === \".\") {\n                      return;\n                    }\n\n                    file.fullPath = \"\".concat(path, \"/\").concat(file.name);\n                    return _this5.addFile(file);\n                  });\n                } else if (entry.isDirectory) {\n                  _this5._addFilesFromDirectory(entry, \"\".concat(path, \"/\").concat(entry.name));\n                }\n              } // Recursively call readEntries() again, since browser only handle\n              // the first 100 entries.\n              // See: https://developer.mozilla.org/en-US/docs/Web/API/DirectoryReader#readEntries\n\n            } catch (err) {\n              _iterator7.e(err);\n            } finally {\n              _iterator7.f();\n            }\n\n            readEntries();\n          }\n\n          return null;\n        }, errorHandler);\n      };\n\n      return readEntries();\n    } // If `done()` is called without argument the file is accepted\n    // If you call it with an error message, the file is rejected\n    // (This allows for asynchronous validation)\n    //\n    // This function checks the filesize, and if the file.type passes the\n    // `acceptedFiles` check.\n\n  }, {\n    key: \"accept\",\n    value: function accept(file, done) {\n      if (this.options.maxFilesize && file.size > this.options.maxFilesize * 1024 * 1024) {\n        done(this.options.dictFileTooBig.replace(\"{{filesize}}\", Math.round(file.size / 1024 / 10.24) / 100).replace(\"{{maxFilesize}}\", this.options.maxFilesize));\n      } else if (!Dropzone.isValidFile(file, this.options.acceptedFiles)) {\n        done(this.options.dictInvalidFileType);\n      } else if (this.options.maxFiles != null && this.getAcceptedFiles().length >= this.options.maxFiles) {\n        done(this.options.dictMaxFilesExceeded.replace(\"{{maxFiles}}\", this.options.maxFiles));\n        this.emit(\"maxfilesexceeded\", file);\n      } else {\n        this.options.accept.call(this, file, done);\n      }\n    }\n  }, {\n    key: \"addFile\",\n    value: function addFile(file) {\n      var _this6 = this;\n\n      file.upload = {\n        uuid: Dropzone.uuidv4(),\n        progress: 0,\n        // Setting the total upload size to file.size for the beginning\n        // It's actual different than the size to be transmitted.\n        total: file.size,\n        bytesSent: 0,\n        filename: this._renameFile(file) // Not setting chunking information here, because the acutal data — and\n        // thus the chunks — might change if `options.transformFile` is set\n        // and does something to the data.\n\n      };\n      this.files.push(file);\n      file.status = Dropzone.ADDED;\n      this.emit(\"addedfile\", file);\n\n      this._enqueueThumbnail(file);\n\n      this.accept(file, function (error) {\n        if (error) {\n          file.accepted = false;\n\n          _this6._errorProcessing([file], error); // Will set the file.status\n\n        } else {\n          file.accepted = true;\n\n          if (_this6.options.autoQueue) {\n            _this6.enqueueFile(file);\n          } // Will set .accepted = true\n\n        }\n\n        _this6._updateMaxFilesReachedClass();\n      });\n    } // Wrapper for enqueueFile\n\n  }, {\n    key: \"enqueueFiles\",\n    value: function enqueueFiles(files) {\n      var _iterator8 = dropzone_createForOfIteratorHelper(files, true),\n          _step8;\n\n      try {\n        for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n          var file = _step8.value;\n          this.enqueueFile(file);\n        }\n      } catch (err) {\n        _iterator8.e(err);\n      } finally {\n        _iterator8.f();\n      }\n\n      return null;\n    }\n  }, {\n    key: \"enqueueFile\",\n    value: function enqueueFile(file) {\n      var _this7 = this;\n\n      if (file.status === Dropzone.ADDED && file.accepted === true) {\n        file.status = Dropzone.QUEUED;\n\n        if (this.options.autoProcessQueue) {\n          return setTimeout(function () {\n            return _this7.processQueue();\n          }, 0); // Deferring the call\n        }\n      } else {\n        throw new Error(\"This file can't be queued because it has already been processed or was rejected.\");\n      }\n    }\n  }, {\n    key: \"_enqueueThumbnail\",\n    value: function _enqueueThumbnail(file) {\n      var _this8 = this;\n\n      if (this.options.createImageThumbnails && file.type.match(/image.*/) && file.size <= this.options.maxThumbnailFilesize * 1024 * 1024) {\n        this._thumbnailQueue.push(file);\n\n        return setTimeout(function () {\n          return _this8._processThumbnailQueue();\n        }, 0); // Deferring the call\n      }\n    }\n  }, {\n    key: \"_processThumbnailQueue\",\n    value: function _processThumbnailQueue() {\n      var _this9 = this;\n\n      if (this._processingThumbnail || this._thumbnailQueue.length === 0) {\n        return;\n      }\n\n      this._processingThumbnail = true;\n\n      var file = this._thumbnailQueue.shift();\n\n      return this.createThumbnail(file, this.options.thumbnailWidth, this.options.thumbnailHeight, this.options.thumbnailMethod, true, function (dataUrl) {\n        _this9.emit(\"thumbnail\", file, dataUrl);\n\n        _this9._processingThumbnail = false;\n        return _this9._processThumbnailQueue();\n      });\n    } // Can be called by the user to remove a file\n\n  }, {\n    key: \"removeFile\",\n    value: function removeFile(file) {\n      if (file.status === Dropzone.UPLOADING) {\n        this.cancelUpload(file);\n      }\n\n      this.files = without(this.files, file);\n      this.emit(\"removedfile\", file);\n\n      if (this.files.length === 0) {\n        return this.emit(\"reset\");\n      }\n    } // Removes all files that aren't currently processed from the list\n\n  }, {\n    key: \"removeAllFiles\",\n    value: function removeAllFiles(cancelIfNecessary) {\n      // Create a copy of files since removeFile() changes the @files array.\n      if (cancelIfNecessary == null) {\n        cancelIfNecessary = false;\n      }\n\n      var _iterator9 = dropzone_createForOfIteratorHelper(this.files.slice(), true),\n          _step9;\n\n      try {\n        for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n          var file = _step9.value;\n\n          if (file.status !== Dropzone.UPLOADING || cancelIfNecessary) {\n            this.removeFile(file);\n          }\n        }\n      } catch (err) {\n        _iterator9.e(err);\n      } finally {\n        _iterator9.f();\n      }\n\n      return null;\n    } // Resizes an image before it gets sent to the server. This function is the default behavior of\n    // `options.transformFile` if `resizeWidth` or `resizeHeight` are set. The callback is invoked with\n    // the resized blob.\n\n  }, {\n    key: \"resizeImage\",\n    value: function resizeImage(file, width, height, resizeMethod, callback) {\n      var _this10 = this;\n\n      return this.createThumbnail(file, width, height, resizeMethod, true, function (dataUrl, canvas) {\n        if (canvas == null) {\n          // The image has not been resized\n          return callback(file);\n        } else {\n          var resizeMimeType = _this10.options.resizeMimeType;\n\n          if (resizeMimeType == null) {\n            resizeMimeType = file.type;\n          }\n\n          var resizedDataURL = canvas.toDataURL(resizeMimeType, _this10.options.resizeQuality);\n\n          if (resizeMimeType === \"image/jpeg\" || resizeMimeType === \"image/jpg\") {\n            // Now add the original EXIF information\n            resizedDataURL = ExifRestore.restore(file.dataURL, resizedDataURL);\n          }\n\n          return callback(Dropzone.dataURItoBlob(resizedDataURL));\n        }\n      });\n    }\n  }, {\n    key: \"createThumbnail\",\n    value: function createThumbnail(file, width, height, resizeMethod, fixOrientation, callback) {\n      var _this11 = this;\n\n      var fileReader = new FileReader();\n\n      fileReader.onload = function () {\n        file.dataURL = fileReader.result; // Don't bother creating a thumbnail for SVG images since they're vector\n\n        if (file.type === \"image/svg+xml\") {\n          if (callback != null) {\n            callback(fileReader.result);\n          }\n\n          return;\n        }\n\n        _this11.createThumbnailFromUrl(file, width, height, resizeMethod, fixOrientation, callback);\n      };\n\n      fileReader.readAsDataURL(file);\n    } // `mockFile` needs to have these attributes:\n    //\n    //     { name: 'name', size: 12345, imageUrl: '' }\n    //\n    // `callback` will be invoked when the image has been downloaded and displayed.\n    // `crossOrigin` will be added to the `img` tag when accessing the file.\n\n  }, {\n    key: \"displayExistingFile\",\n    value: function displayExistingFile(mockFile, imageUrl, callback, crossOrigin) {\n      var _this12 = this;\n\n      var resizeThumbnail = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n      this.emit(\"addedfile\", mockFile);\n      this.emit(\"complete\", mockFile);\n\n      if (!resizeThumbnail) {\n        this.emit(\"thumbnail\", mockFile, imageUrl);\n        if (callback) callback();\n      } else {\n        var onDone = function onDone(thumbnail) {\n          _this12.emit(\"thumbnail\", mockFile, thumbnail);\n\n          if (callback) callback();\n        };\n\n        mockFile.dataURL = imageUrl;\n        this.createThumbnailFromUrl(mockFile, this.options.thumbnailWidth, this.options.thumbnailHeight, this.options.thumbnailMethod, this.options.fixOrientation, onDone, crossOrigin);\n      }\n    }\n  }, {\n    key: \"createThumbnailFromUrl\",\n    value: function createThumbnailFromUrl(file, width, height, resizeMethod, fixOrientation, callback, crossOrigin) {\n      var _this13 = this;\n\n      // Not using `new Image` here because of a bug in latest Chrome versions.\n      // See https://github.com/enyo/dropzone/pull/226\n      var img = document.createElement(\"img\");\n\n      if (crossOrigin) {\n        img.crossOrigin = crossOrigin;\n      } // fixOrientation is not needed anymore with browsers handling imageOrientation\n\n\n      fixOrientation = getComputedStyle(document.body)[\"imageOrientation\"] == \"from-image\" ? false : fixOrientation;\n\n      img.onload = function () {\n        var loadExif = function loadExif(callback) {\n          return callback(1);\n        };\n\n        if (typeof EXIF !== \"undefined\" && EXIF !== null && fixOrientation) {\n          loadExif = function loadExif(callback) {\n            return EXIF.getData(img, function () {\n              return callback(EXIF.getTag(this, \"Orientation\"));\n            });\n          };\n        }\n\n        return loadExif(function (orientation) {\n          file.width = img.width;\n          file.height = img.height;\n\n          var resizeInfo = _this13.options.resize.call(_this13, file, width, height, resizeMethod);\n\n          var canvas = document.createElement(\"canvas\");\n          var ctx = canvas.getContext(\"2d\");\n          canvas.width = resizeInfo.trgWidth;\n          canvas.height = resizeInfo.trgHeight;\n\n          if (orientation > 4) {\n            canvas.width = resizeInfo.trgHeight;\n            canvas.height = resizeInfo.trgWidth;\n          }\n\n          switch (orientation) {\n            case 2:\n              // horizontal flip\n              ctx.translate(canvas.width, 0);\n              ctx.scale(-1, 1);\n              break;\n\n            case 3:\n              // 180° rotate left\n              ctx.translate(canvas.width, canvas.height);\n              ctx.rotate(Math.PI);\n              break;\n\n            case 4:\n              // vertical flip\n              ctx.translate(0, canvas.height);\n              ctx.scale(1, -1);\n              break;\n\n            case 5:\n              // vertical flip + 90 rotate right\n              ctx.rotate(0.5 * Math.PI);\n              ctx.scale(1, -1);\n              break;\n\n            case 6:\n              // 90° rotate right\n              ctx.rotate(0.5 * Math.PI);\n              ctx.translate(0, -canvas.width);\n              break;\n\n            case 7:\n              // horizontal flip + 90 rotate right\n              ctx.rotate(0.5 * Math.PI);\n              ctx.translate(canvas.height, -canvas.width);\n              ctx.scale(-1, 1);\n              break;\n\n            case 8:\n              // 90° rotate left\n              ctx.rotate(-0.5 * Math.PI);\n              ctx.translate(-canvas.height, 0);\n              break;\n          } // This is a bugfix for iOS' scaling bug.\n\n\n          drawImageIOSFix(ctx, img, resizeInfo.srcX != null ? resizeInfo.srcX : 0, resizeInfo.srcY != null ? resizeInfo.srcY : 0, resizeInfo.srcWidth, resizeInfo.srcHeight, resizeInfo.trgX != null ? resizeInfo.trgX : 0, resizeInfo.trgY != null ? resizeInfo.trgY : 0, resizeInfo.trgWidth, resizeInfo.trgHeight);\n          var thumbnail = canvas.toDataURL(\"image/png\");\n\n          if (callback != null) {\n            return callback(thumbnail, canvas);\n          }\n        });\n      };\n\n      if (callback != null) {\n        img.onerror = callback;\n      }\n\n      return img.src = file.dataURL;\n    } // Goes through the queue and processes files if there aren't too many already.\n\n  }, {\n    key: \"processQueue\",\n    value: function processQueue() {\n      var parallelUploads = this.options.parallelUploads;\n      var processingLength = this.getUploadingFiles().length;\n      var i = processingLength; // There are already at least as many files uploading than should be\n\n      if (processingLength >= parallelUploads) {\n        return;\n      }\n\n      var queuedFiles = this.getQueuedFiles();\n\n      if (!(queuedFiles.length > 0)) {\n        return;\n      }\n\n      if (this.options.uploadMultiple) {\n        // The files should be uploaded in one request\n        return this.processFiles(queuedFiles.slice(0, parallelUploads - processingLength));\n      } else {\n        while (i < parallelUploads) {\n          if (!queuedFiles.length) {\n            return;\n          } // Nothing left to process\n\n\n          this.processFile(queuedFiles.shift());\n          i++;\n        }\n      }\n    } // Wrapper for `processFiles`\n\n  }, {\n    key: \"processFile\",\n    value: function processFile(file) {\n      return this.processFiles([file]);\n    } // Loads the file, then calls finishedLoading()\n\n  }, {\n    key: \"processFiles\",\n    value: function processFiles(files) {\n      var _iterator10 = dropzone_createForOfIteratorHelper(files, true),\n          _step10;\n\n      try {\n        for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n          var file = _step10.value;\n          file.processing = true; // Backwards compatibility\n\n          file.status = Dropzone.UPLOADING;\n          this.emit(\"processing\", file);\n        }\n      } catch (err) {\n        _iterator10.e(err);\n      } finally {\n        _iterator10.f();\n      }\n\n      if (this.options.uploadMultiple) {\n        this.emit(\"processingmultiple\", files);\n      }\n\n      return this.uploadFiles(files);\n    }\n  }, {\n    key: \"_getFilesWithXhr\",\n    value: function _getFilesWithXhr(xhr) {\n      var files;\n      return files = this.files.filter(function (file) {\n        return file.xhr === xhr;\n      }).map(function (file) {\n        return file;\n      });\n    } // Cancels the file upload and sets the status to CANCELED\n    // **if** the file is actually being uploaded.\n    // If it's still in the queue, the file is being removed from it and the status\n    // set to CANCELED.\n\n  }, {\n    key: \"cancelUpload\",\n    value: function cancelUpload(file) {\n      if (file.status === Dropzone.UPLOADING) {\n        var groupedFiles = this._getFilesWithXhr(file.xhr);\n\n        var _iterator11 = dropzone_createForOfIteratorHelper(groupedFiles, true),\n            _step11;\n\n        try {\n          for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n            var groupedFile = _step11.value;\n            groupedFile.status = Dropzone.CANCELED;\n          }\n        } catch (err) {\n          _iterator11.e(err);\n        } finally {\n          _iterator11.f();\n        }\n\n        if (typeof file.xhr !== \"undefined\") {\n          file.xhr.abort();\n        }\n\n        var _iterator12 = dropzone_createForOfIteratorHelper(groupedFiles, true),\n            _step12;\n\n        try {\n          for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n            var _groupedFile = _step12.value;\n            this.emit(\"canceled\", _groupedFile);\n          }\n        } catch (err) {\n          _iterator12.e(err);\n        } finally {\n          _iterator12.f();\n        }\n\n        if (this.options.uploadMultiple) {\n          this.emit(\"canceledmultiple\", groupedFiles);\n        }\n      } else if (file.status === Dropzone.ADDED || file.status === Dropzone.QUEUED) {\n        file.status = Dropzone.CANCELED;\n        this.emit(\"canceled\", file);\n\n        if (this.options.uploadMultiple) {\n          this.emit(\"canceledmultiple\", [file]);\n        }\n      }\n\n      if (this.options.autoProcessQueue) {\n        return this.processQueue();\n      }\n    }\n  }, {\n    key: \"resolveOption\",\n    value: function resolveOption(option) {\n      if (typeof option === \"function\") {\n        for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n          args[_key - 1] = arguments[_key];\n        }\n\n        return option.apply(this, args);\n      }\n\n      return option;\n    }\n  }, {\n    key: \"uploadFile\",\n    value: function uploadFile(file) {\n      return this.uploadFiles([file]);\n    }\n  }, {\n    key: \"uploadFiles\",\n    value: function uploadFiles(files) {\n      var _this14 = this;\n\n      this._transformFiles(files, function (transformedFiles) {\n        if (_this14.options.chunking) {\n          // Chunking is not allowed to be used with `uploadMultiple` so we know\n          // that there is only __one__file.\n          var transformedFile = transformedFiles[0];\n          files[0].upload.chunked = _this14.options.chunking && (_this14.options.forceChunking || transformedFile.size > _this14.options.chunkSize);\n          files[0].upload.totalChunkCount = Math.ceil(transformedFile.size / _this14.options.chunkSize);\n        }\n\n        if (files[0].upload.chunked) {\n          // This file should be sent in chunks!\n          // If the chunking option is set, we **know** that there can only be **one** file, since\n          // uploadMultiple is not allowed with this option.\n          var file = files[0];\n          var _transformedFile = transformedFiles[0];\n          var startedChunkCount = 0;\n          file.upload.chunks = [];\n\n          var handleNextChunk = function handleNextChunk() {\n            var chunkIndex = 0; // Find the next item in file.upload.chunks that is not defined yet.\n\n            while (file.upload.chunks[chunkIndex] !== undefined) {\n              chunkIndex++;\n            } // This means, that all chunks have already been started.\n\n\n            if (chunkIndex >= file.upload.totalChunkCount) return;\n            startedChunkCount++;\n            var start = chunkIndex * _this14.options.chunkSize;\n            var end = Math.min(start + _this14.options.chunkSize, _transformedFile.size);\n            var dataBlock = {\n              name: _this14._getParamName(0),\n              data: _transformedFile.webkitSlice ? _transformedFile.webkitSlice(start, end) : _transformedFile.slice(start, end),\n              filename: file.upload.filename,\n              chunkIndex: chunkIndex\n            };\n            file.upload.chunks[chunkIndex] = {\n              file: file,\n              index: chunkIndex,\n              dataBlock: dataBlock,\n              // In case we want to retry.\n              status: Dropzone.UPLOADING,\n              progress: 0,\n              retries: 0 // The number of times this block has been retried.\n\n            };\n\n            _this14._uploadData(files, [dataBlock]);\n          };\n\n          file.upload.finishedChunkUpload = function (chunk, response) {\n            var allFinished = true;\n            chunk.status = Dropzone.SUCCESS; // Clear the data from the chunk\n\n            chunk.dataBlock = null; // Leaving this reference to xhr intact here will cause memory leaks in some browsers\n\n            chunk.xhr = null;\n\n            for (var i = 0; i < file.upload.totalChunkCount; i++) {\n              if (file.upload.chunks[i] === undefined) {\n                return handleNextChunk();\n              }\n\n              if (file.upload.chunks[i].status !== Dropzone.SUCCESS) {\n                allFinished = false;\n              }\n            }\n\n            if (allFinished) {\n              _this14.options.chunksUploaded(file, function () {\n                _this14._finished(files, response, null);\n              });\n            }\n          };\n\n          if (_this14.options.parallelChunkUploads) {\n            for (var i = 0; i < file.upload.totalChunkCount; i++) {\n              handleNextChunk();\n            }\n          } else {\n            handleNextChunk();\n          }\n        } else {\n          var dataBlocks = [];\n\n          for (var _i2 = 0; _i2 < files.length; _i2++) {\n            dataBlocks[_i2] = {\n              name: _this14._getParamName(_i2),\n              data: transformedFiles[_i2],\n              filename: files[_i2].upload.filename\n            };\n          }\n\n          _this14._uploadData(files, dataBlocks);\n        }\n      });\n    } /// Returns the right chunk for given file and xhr\n\n  }, {\n    key: \"_getChunk\",\n    value: function _getChunk(file, xhr) {\n      for (var i = 0; i < file.upload.totalChunkCount; i++) {\n        if (file.upload.chunks[i] !== undefined && file.upload.chunks[i].xhr === xhr) {\n          return file.upload.chunks[i];\n        }\n      }\n    } // This function actually uploads the file(s) to the server.\n    // If dataBlocks contains the actual data to upload (meaning, that this could either be transformed\n    // files, or individual chunks for chunked upload).\n\n  }, {\n    key: \"_uploadData\",\n    value: function _uploadData(files, dataBlocks) {\n      var _this15 = this;\n\n      var xhr = new XMLHttpRequest(); // Put the xhr object in the file objects to be able to reference it later.\n\n      var _iterator13 = dropzone_createForOfIteratorHelper(files, true),\n          _step13;\n\n      try {\n        for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n          var file = _step13.value;\n          file.xhr = xhr;\n        }\n      } catch (err) {\n        _iterator13.e(err);\n      } finally {\n        _iterator13.f();\n      }\n\n      if (files[0].upload.chunked) {\n        // Put the xhr object in the right chunk object, so it can be associated later, and found with _getChunk\n        files[0].upload.chunks[dataBlocks[0].chunkIndex].xhr = xhr;\n      }\n\n      var method = this.resolveOption(this.options.method, files);\n      var url = this.resolveOption(this.options.url, files);\n      xhr.open(method, url, true); // Setting the timeout after open because of IE11 issue: https://gitlab.com/meno/dropzone/issues/8\n\n      var timeout = this.resolveOption(this.options.timeout, files);\n      if (timeout) xhr.timeout = this.resolveOption(this.options.timeout, files); // Has to be after `.open()`. See https://github.com/enyo/dropzone/issues/179\n\n      xhr.withCredentials = !!this.options.withCredentials;\n\n      xhr.onload = function (e) {\n        _this15._finishedUploading(files, xhr, e);\n      };\n\n      xhr.ontimeout = function () {\n        _this15._handleUploadError(files, xhr, \"Request timedout after \".concat(_this15.options.timeout / 1000, \" seconds\"));\n      };\n\n      xhr.onerror = function () {\n        _this15._handleUploadError(files, xhr);\n      }; // Some browsers do not have the .upload property\n\n\n      var progressObj = xhr.upload != null ? xhr.upload : xhr;\n\n      progressObj.onprogress = function (e) {\n        return _this15._updateFilesUploadProgress(files, xhr, e);\n      };\n\n      var headers = {\n        Accept: \"application/json\",\n        \"Cache-Control\": \"no-cache\",\n        \"X-Requested-With\": \"XMLHttpRequest\"\n      };\n\n      if (this.options.headers) {\n        Dropzone.extend(headers, this.options.headers);\n      }\n\n      for (var headerName in headers) {\n        var headerValue = headers[headerName];\n\n        if (headerValue) {\n          xhr.setRequestHeader(headerName, headerValue);\n        }\n      }\n\n      var formData = new FormData(); // Adding all @options parameters\n\n      if (this.options.params) {\n        var additionalParams = this.options.params;\n\n        if (typeof additionalParams === \"function\") {\n          additionalParams = additionalParams.call(this, files, xhr, files[0].upload.chunked ? this._getChunk(files[0], xhr) : null);\n        }\n\n        for (var key in additionalParams) {\n          var value = additionalParams[key];\n\n          if (Array.isArray(value)) {\n            // The additional parameter contains an array,\n            // so lets iterate over it to attach each value\n            // individually.\n            for (var i = 0; i < value.length; i++) {\n              formData.append(key, value[i]);\n            }\n          } else {\n            formData.append(key, value);\n          }\n        }\n      } // Let the user add additional data if necessary\n\n\n      var _iterator14 = dropzone_createForOfIteratorHelper(files, true),\n          _step14;\n\n      try {\n        for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n          var _file = _step14.value;\n          this.emit(\"sending\", _file, xhr, formData);\n        }\n      } catch (err) {\n        _iterator14.e(err);\n      } finally {\n        _iterator14.f();\n      }\n\n      if (this.options.uploadMultiple) {\n        this.emit(\"sendingmultiple\", files, xhr, formData);\n      }\n\n      this._addFormElementData(formData); // Finally add the files\n      // Has to be last because some servers (eg: S3) expect the file to be the last parameter\n\n\n      for (var _i3 = 0; _i3 < dataBlocks.length; _i3++) {\n        var dataBlock = dataBlocks[_i3];\n        formData.append(dataBlock.name, dataBlock.data, dataBlock.filename);\n      }\n\n      this.submitRequest(xhr, formData, files);\n    } // Transforms all files with this.options.transformFile and invokes done with the transformed files when done.\n\n  }, {\n    key: \"_transformFiles\",\n    value: function _transformFiles(files, done) {\n      var _this16 = this;\n\n      var transformedFiles = []; // Clumsy way of handling asynchronous calls, until I get to add a proper Future library.\n\n      var doneCounter = 0;\n\n      var _loop = function _loop(i) {\n        _this16.options.transformFile.call(_this16, files[i], function (transformedFile) {\n          transformedFiles[i] = transformedFile;\n\n          if (++doneCounter === files.length) {\n            done(transformedFiles);\n          }\n        });\n      };\n\n      for (var i = 0; i < files.length; i++) {\n        _loop(i);\n      }\n    } // Takes care of adding other input elements of the form to the AJAX request\n\n  }, {\n    key: \"_addFormElementData\",\n    value: function _addFormElementData(formData) {\n      // Take care of other input elements\n      if (this.element.tagName === \"FORM\") {\n        var _iterator15 = dropzone_createForOfIteratorHelper(this.element.querySelectorAll(\"input, textarea, select, button\"), true),\n            _step15;\n\n        try {\n          for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n            var input = _step15.value;\n            var inputName = input.getAttribute(\"name\");\n            var inputType = input.getAttribute(\"type\");\n            if (inputType) inputType = inputType.toLowerCase(); // If the input doesn't have a name, we can't use it.\n\n            if (typeof inputName === \"undefined\" || inputName === null) continue;\n\n            if (input.tagName === \"SELECT\" && input.hasAttribute(\"multiple\")) {\n              // Possibly multiple values\n              var _iterator16 = dropzone_createForOfIteratorHelper(input.options, true),\n                  _step16;\n\n              try {\n                for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n                  var option = _step16.value;\n\n                  if (option.selected) {\n                    formData.append(inputName, option.value);\n                  }\n                }\n              } catch (err) {\n                _iterator16.e(err);\n              } finally {\n                _iterator16.f();\n              }\n            } else if (!inputType || inputType !== \"checkbox\" && inputType !== \"radio\" || input.checked) {\n              formData.append(inputName, input.value);\n            }\n          }\n        } catch (err) {\n          _iterator15.e(err);\n        } finally {\n          _iterator15.f();\n        }\n      }\n    } // Invoked when there is new progress information about given files.\n    // If e is not provided, it is assumed that the upload is finished.\n\n  }, {\n    key: \"_updateFilesUploadProgress\",\n    value: function _updateFilesUploadProgress(files, xhr, e) {\n      if (!files[0].upload.chunked) {\n        // Handle file uploads without chunking\n        var _iterator17 = dropzone_createForOfIteratorHelper(files, true),\n            _step17;\n\n        try {\n          for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n            var file = _step17.value;\n\n            if (file.upload.total && file.upload.bytesSent && file.upload.bytesSent == file.upload.total) {\n              // If both, the `total` and `bytesSent` have already been set, and\n              // they are equal (meaning progress is at 100%), we can skip this\n              // file, since an upload progress shouldn't go down.\n              continue;\n            }\n\n            if (e) {\n              file.upload.progress = 100 * e.loaded / e.total;\n              file.upload.total = e.total;\n              file.upload.bytesSent = e.loaded;\n            } else {\n              // No event, so we're at 100%\n              file.upload.progress = 100;\n              file.upload.bytesSent = file.upload.total;\n            }\n\n            this.emit(\"uploadprogress\", file, file.upload.progress, file.upload.bytesSent);\n          }\n        } catch (err) {\n          _iterator17.e(err);\n        } finally {\n          _iterator17.f();\n        }\n      } else {\n        // Handle chunked file uploads\n        // Chunked upload is not compatible with uploading multiple files in one\n        // request, so we know there's only one file.\n        var _file2 = files[0]; // Since this is a chunked upload, we need to update the appropriate chunk\n        // progress.\n\n        var chunk = this._getChunk(_file2, xhr);\n\n        if (e) {\n          chunk.progress = 100 * e.loaded / e.total;\n          chunk.total = e.total;\n          chunk.bytesSent = e.loaded;\n        } else {\n          // No event, so we're at 100%\n          chunk.progress = 100;\n          chunk.bytesSent = chunk.total;\n        } // Now tally the *file* upload progress from its individual chunks\n\n\n        _file2.upload.progress = 0;\n        _file2.upload.total = 0;\n        _file2.upload.bytesSent = 0;\n\n        for (var i = 0; i < _file2.upload.totalChunkCount; i++) {\n          if (_file2.upload.chunks[i] && typeof _file2.upload.chunks[i].progress !== \"undefined\") {\n            _file2.upload.progress += _file2.upload.chunks[i].progress;\n            _file2.upload.total += _file2.upload.chunks[i].total;\n            _file2.upload.bytesSent += _file2.upload.chunks[i].bytesSent;\n          }\n        } // Since the process is a percentage, we need to divide by the amount of\n        // chunks we've used.\n\n\n        _file2.upload.progress = _file2.upload.progress / _file2.upload.totalChunkCount;\n        this.emit(\"uploadprogress\", _file2, _file2.upload.progress, _file2.upload.bytesSent);\n      }\n    }\n  }, {\n    key: \"_finishedUploading\",\n    value: function _finishedUploading(files, xhr, e) {\n      var response;\n\n      if (files[0].status === Dropzone.CANCELED) {\n        return;\n      }\n\n      if (xhr.readyState !== 4) {\n        return;\n      }\n\n      if (xhr.responseType !== \"arraybuffer\" && xhr.responseType !== \"blob\") {\n        response = xhr.responseText;\n\n        if (xhr.getResponseHeader(\"content-type\") && ~xhr.getResponseHeader(\"content-type\").indexOf(\"application/json\")) {\n          try {\n            response = JSON.parse(response);\n          } catch (error) {\n            e = error;\n            response = \"Invalid JSON response from server.\";\n          }\n        }\n      }\n\n      this._updateFilesUploadProgress(files, xhr);\n\n      if (!(200 <= xhr.status && xhr.status < 300)) {\n        this._handleUploadError(files, xhr, response);\n      } else {\n        if (files[0].upload.chunked) {\n          files[0].upload.finishedChunkUpload(this._getChunk(files[0], xhr), response);\n        } else {\n          this._finished(files, response, e);\n        }\n      }\n    }\n  }, {\n    key: \"_handleUploadError\",\n    value: function _handleUploadError(files, xhr, response) {\n      if (files[0].status === Dropzone.CANCELED) {\n        return;\n      }\n\n      if (files[0].upload.chunked && this.options.retryChunks) {\n        var chunk = this._getChunk(files[0], xhr);\n\n        if (chunk.retries++ < this.options.retryChunksLimit) {\n          this._uploadData(files, [chunk.dataBlock]);\n\n          return;\n        } else {\n          console.warn(\"Retried this chunk too often. Giving up.\");\n        }\n      }\n\n      this._errorProcessing(files, response || this.options.dictResponseError.replace(\"{{statusCode}}\", xhr.status), xhr);\n    }\n  }, {\n    key: \"submitRequest\",\n    value: function submitRequest(xhr, formData, files) {\n      if (xhr.readyState != 1) {\n        console.warn(\"Cannot send this request because the XMLHttpRequest.readyState is not OPENED.\");\n        return;\n      }\n\n      xhr.send(formData);\n    } // Called internally when processing is finished.\n    // Individual callbacks have to be called in the appropriate sections.\n\n  }, {\n    key: \"_finished\",\n    value: function _finished(files, responseText, e) {\n      var _iterator18 = dropzone_createForOfIteratorHelper(files, true),\n          _step18;\n\n      try {\n        for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n          var file = _step18.value;\n          file.status = Dropzone.SUCCESS;\n          this.emit(\"success\", file, responseText, e);\n          this.emit(\"complete\", file);\n        }\n      } catch (err) {\n        _iterator18.e(err);\n      } finally {\n        _iterator18.f();\n      }\n\n      if (this.options.uploadMultiple) {\n        this.emit(\"successmultiple\", files, responseText, e);\n        this.emit(\"completemultiple\", files);\n      }\n\n      if (this.options.autoProcessQueue) {\n        return this.processQueue();\n      }\n    } // Called internally when processing is finished.\n    // Individual callbacks have to be called in the appropriate sections.\n\n  }, {\n    key: \"_errorProcessing\",\n    value: function _errorProcessing(files, message, xhr) {\n      var _iterator19 = dropzone_createForOfIteratorHelper(files, true),\n          _step19;\n\n      try {\n        for (_iterator19.s(); !(_step19 = _iterator19.n()).done;) {\n          var file = _step19.value;\n          file.status = Dropzone.ERROR;\n          this.emit(\"error\", file, message, xhr);\n          this.emit(\"complete\", file);\n        }\n      } catch (err) {\n        _iterator19.e(err);\n      } finally {\n        _iterator19.f();\n      }\n\n      if (this.options.uploadMultiple) {\n        this.emit(\"errormultiple\", files, message, xhr);\n        this.emit(\"completemultiple\", files);\n      }\n\n      if (this.options.autoProcessQueue) {\n        return this.processQueue();\n      }\n    }\n  }], [{\n    key: \"initClass\",\n    value: function initClass() {\n      // Exposing the emitter class, mainly for tests\n      this.prototype.Emitter = Emitter;\n      /*\n       This is a list of all available events you can register on a dropzone object.\n        You can register an event handler like this:\n        dropzone.on(\"dragEnter\", function() { });\n        */\n\n      this.prototype.events = [\"drop\", \"dragstart\", \"dragend\", \"dragenter\", \"dragover\", \"dragleave\", \"addedfile\", \"addedfiles\", \"removedfile\", \"thumbnail\", \"error\", \"errormultiple\", \"processing\", \"processingmultiple\", \"uploadprogress\", \"totaluploadprogress\", \"sending\", \"sendingmultiple\", \"success\", \"successmultiple\", \"canceled\", \"canceledmultiple\", \"complete\", \"completemultiple\", \"reset\", \"maxfilesexceeded\", \"maxfilesreached\", \"queuecomplete\"];\n      this.prototype._thumbnailQueue = [];\n      this.prototype._processingThumbnail = false;\n    } // global utility\n\n  }, {\n    key: \"extend\",\n    value: function extend(target) {\n      for (var _len2 = arguments.length, objects = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n        objects[_key2 - 1] = arguments[_key2];\n      }\n\n      for (var _i4 = 0, _objects = objects; _i4 < _objects.length; _i4++) {\n        var object = _objects[_i4];\n\n        for (var key in object) {\n          var val = object[key];\n          target[key] = val;\n        }\n      }\n\n      return target;\n    }\n  }, {\n    key: \"uuidv4\",\n    value: function uuidv4() {\n      return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function (c) {\n        var r = Math.random() * 16 | 0,\n            v = c === \"x\" ? r : r & 0x3 | 0x8;\n        return v.toString(16);\n      });\n    }\n  }]);\n\n  return Dropzone;\n}(Emitter);\n\n\nDropzone.initClass();\nDropzone.version = \"5.9.3\"; // This is a map of options for your different dropzones. Add configurations\n// to this object for your different dropzone elemens.\n//\n// Example:\n//\n//     Dropzone.options.myDropzoneElementId = { maxFilesize: 1 };\n//\n// To disable autoDiscover for a specific element, you can set `false` as an option:\n//\n//     Dropzone.options.myDisabledElementId = false;\n//\n// And in html:\n//\n//     <form action=\"/upload\" id=\"my-dropzone-element-id\" class=\"dropzone\"></form>\n\nDropzone.options = {}; // Returns the options for an element or undefined if none available.\n\nDropzone.optionsForElement = function (element) {\n  // Get the `Dropzone.options.elementId` for this element if it exists\n  if (element.getAttribute(\"id\")) {\n    return Dropzone.options[camelize(element.getAttribute(\"id\"))];\n  } else {\n    return undefined;\n  }\n}; // Holds a list of all dropzone instances\n\n\nDropzone.instances = []; // Returns the dropzone for given element if any\n\nDropzone.forElement = function (element) {\n  if (typeof element === \"string\") {\n    element = document.querySelector(element);\n  }\n\n  if ((element != null ? element.dropzone : undefined) == null) {\n    throw new Error(\"No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone.\");\n  }\n\n  return element.dropzone;\n}; // Set to false if you don't want Dropzone to automatically find and attach to .dropzone elements.\n\n\nDropzone.autoDiscover = true; // Looks for all .dropzone elements and creates a dropzone for them\n\nDropzone.discover = function () {\n  var dropzones;\n\n  if (document.querySelectorAll) {\n    dropzones = document.querySelectorAll(\".dropzone\");\n  } else {\n    dropzones = []; // IE :(\n\n    var checkElements = function checkElements(elements) {\n      return function () {\n        var result = [];\n\n        var _iterator20 = dropzone_createForOfIteratorHelper(elements, true),\n            _step20;\n\n        try {\n          for (_iterator20.s(); !(_step20 = _iterator20.n()).done;) {\n            var el = _step20.value;\n\n            if (/(^| )dropzone($| )/.test(el.className)) {\n              result.push(dropzones.push(el));\n            } else {\n              result.push(undefined);\n            }\n          }\n        } catch (err) {\n          _iterator20.e(err);\n        } finally {\n          _iterator20.f();\n        }\n\n        return result;\n      }();\n    };\n\n    checkElements(document.getElementsByTagName(\"div\"));\n    checkElements(document.getElementsByTagName(\"form\"));\n  }\n\n  return function () {\n    var result = [];\n\n    var _iterator21 = dropzone_createForOfIteratorHelper(dropzones, true),\n        _step21;\n\n    try {\n      for (_iterator21.s(); !(_step21 = _iterator21.n()).done;) {\n        var dropzone = _step21.value;\n\n        // Create a dropzone unless auto discover has been disabled for specific element\n        if (Dropzone.optionsForElement(dropzone) !== false) {\n          result.push(new Dropzone(dropzone));\n        } else {\n          result.push(undefined);\n        }\n      }\n    } catch (err) {\n      _iterator21.e(err);\n    } finally {\n      _iterator21.f();\n    }\n\n    return result;\n  }();\n}; // Some browsers support drag and drog functionality, but not correctly.\n//\n// So I created a blocklist of userAgents. Yes, yes. Browser sniffing, I know.\n// But what to do when browsers *theoretically* support an API, but crash\n// when using it.\n//\n// This is a list of regular expressions tested against navigator.userAgent\n//\n// ** It should only be used on browser that *do* support the API, but\n// incorrectly **\n\n\nDropzone.blockedBrowsers = [// The mac os and windows phone version of opera 12 seems to have a problem with the File drag'n'drop API.\n/opera.*(Macintosh|Windows Phone).*version\\/12/i]; // Checks if the browser is supported\n\nDropzone.isBrowserSupported = function () {\n  var capableBrowser = true;\n\n  if (window.File && window.FileReader && window.FileList && window.Blob && window.FormData && document.querySelector) {\n    if (!(\"classList\" in document.createElement(\"a\"))) {\n      capableBrowser = false;\n    } else {\n      if (Dropzone.blacklistedBrowsers !== undefined) {\n        // Since this has been renamed, this makes sure we don't break older\n        // configuration.\n        Dropzone.blockedBrowsers = Dropzone.blacklistedBrowsers;\n      } // The browser supports the API, but may be blocked.\n\n\n      var _iterator22 = dropzone_createForOfIteratorHelper(Dropzone.blockedBrowsers, true),\n          _step22;\n\n      try {\n        for (_iterator22.s(); !(_step22 = _iterator22.n()).done;) {\n          var regex = _step22.value;\n\n          if (regex.test(navigator.userAgent)) {\n            capableBrowser = false;\n            continue;\n          }\n        }\n      } catch (err) {\n        _iterator22.e(err);\n      } finally {\n        _iterator22.f();\n      }\n    }\n  } else {\n    capableBrowser = false;\n  }\n\n  return capableBrowser;\n};\n\nDropzone.dataURItoBlob = function (dataURI) {\n  // convert base64 to raw binary data held in a string\n  // doesn't handle URLEncoded DataURIs - see SO answer #6850276 for code that does this\n  var byteString = atob(dataURI.split(\",\")[1]); // separate out the mime component\n\n  var mimeString = dataURI.split(\",\")[0].split(\":\")[1].split(\";\")[0]; // write the bytes of the string to an ArrayBuffer\n\n  var ab = new ArrayBuffer(byteString.length);\n  var ia = new Uint8Array(ab);\n\n  for (var i = 0, end = byteString.length, asc = 0 <= end; asc ? i <= end : i >= end; asc ? i++ : i--) {\n    ia[i] = byteString.charCodeAt(i);\n  } // write the ArrayBuffer to a blob\n\n\n  return new Blob([ab], {\n    type: mimeString\n  });\n}; // Returns an array without the rejected item\n\n\nvar without = function without(list, rejectedItem) {\n  return list.filter(function (item) {\n    return item !== rejectedItem;\n  }).map(function (item) {\n    return item;\n  });\n}; // abc-def_ghi -> abcDefGhi\n\n\nvar camelize = function camelize(str) {\n  return str.replace(/[\\-_](\\w)/g, function (match) {\n    return match.charAt(1).toUpperCase();\n  });\n}; // Creates an element from string\n\n\nDropzone.createElement = function (string) {\n  var div = document.createElement(\"div\");\n  div.innerHTML = string;\n  return div.childNodes[0];\n}; // Tests if given element is inside (or simply is) the container\n\n\nDropzone.elementInside = function (element, container) {\n  if (element === container) {\n    return true;\n  } // Coffeescript doesn't support do/while loops\n\n\n  while (element = element.parentNode) {\n    if (element === container) {\n      return true;\n    }\n  }\n\n  return false;\n};\n\nDropzone.getElement = function (el, name) {\n  var element;\n\n  if (typeof el === \"string\") {\n    element = document.querySelector(el);\n  } else if (el.nodeType != null) {\n    element = el;\n  }\n\n  if (element == null) {\n    throw new Error(\"Invalid `\".concat(name, \"` option provided. Please provide a CSS selector or a plain HTML element.\"));\n  }\n\n  return element;\n};\n\nDropzone.getElements = function (els, name) {\n  var el, elements;\n\n  if (els instanceof Array) {\n    elements = [];\n\n    try {\n      var _iterator23 = dropzone_createForOfIteratorHelper(els, true),\n          _step23;\n\n      try {\n        for (_iterator23.s(); !(_step23 = _iterator23.n()).done;) {\n          el = _step23.value;\n          elements.push(this.getElement(el, name));\n        }\n      } catch (err) {\n        _iterator23.e(err);\n      } finally {\n        _iterator23.f();\n      }\n    } catch (e) {\n      elements = null;\n    }\n  } else if (typeof els === \"string\") {\n    elements = [];\n\n    var _iterator24 = dropzone_createForOfIteratorHelper(document.querySelectorAll(els), true),\n        _step24;\n\n    try {\n      for (_iterator24.s(); !(_step24 = _iterator24.n()).done;) {\n        el = _step24.value;\n        elements.push(el);\n      }\n    } catch (err) {\n      _iterator24.e(err);\n    } finally {\n      _iterator24.f();\n    }\n  } else if (els.nodeType != null) {\n    elements = [els];\n  }\n\n  if (elements == null || !elements.length) {\n    throw new Error(\"Invalid `\".concat(name, \"` option provided. Please provide a CSS selector, a plain HTML element or a list of those.\"));\n  }\n\n  return elements;\n}; // Asks the user the question and calls accepted or rejected accordingly\n//\n// The default implementation just uses `window.confirm` and then calls the\n// appropriate callback.\n\n\nDropzone.confirm = function (question, accepted, rejected) {\n  if (window.confirm(question)) {\n    return accepted();\n  } else if (rejected != null) {\n    return rejected();\n  }\n}; // Validates the mime type like this:\n//\n// https://developer.mozilla.org/en-US/docs/HTML/Element/input#attr-accept\n\n\nDropzone.isValidFile = function (file, acceptedFiles) {\n  if (!acceptedFiles) {\n    return true;\n  } // If there are no accepted mime types, it's OK\n\n\n  acceptedFiles = acceptedFiles.split(\",\");\n  var mimeType = file.type;\n  var baseMimeType = mimeType.replace(/\\/.*$/, \"\");\n\n  var _iterator25 = dropzone_createForOfIteratorHelper(acceptedFiles, true),\n      _step25;\n\n  try {\n    for (_iterator25.s(); !(_step25 = _iterator25.n()).done;) {\n      var validType = _step25.value;\n      validType = validType.trim();\n\n      if (validType.charAt(0) === \".\") {\n        if (file.name.toLowerCase().indexOf(validType.toLowerCase(), file.name.length - validType.length) !== -1) {\n          return true;\n        }\n      } else if (/\\/\\*$/.test(validType)) {\n        // This is something like a image/* mime type\n        if (baseMimeType === validType.replace(/\\/.*$/, \"\")) {\n          return true;\n        }\n      } else {\n        if (mimeType === validType) {\n          return true;\n        }\n      }\n    }\n  } catch (err) {\n    _iterator25.e(err);\n  } finally {\n    _iterator25.f();\n  }\n\n  return false;\n}; // Augment jQuery\n\n\nif (typeof jQuery !== \"undefined\" && jQuery !== null) {\n  jQuery.fn.dropzone = function (options) {\n    return this.each(function () {\n      return new Dropzone(this, options);\n    });\n  };\n} // Dropzone file status codes\n\n\nDropzone.ADDED = \"added\";\nDropzone.QUEUED = \"queued\"; // For backwards compatibility. Now, if a file is accepted, it's either queued\n// or uploading.\n\nDropzone.ACCEPTED = Dropzone.QUEUED;\nDropzone.UPLOADING = \"uploading\";\nDropzone.PROCESSING = Dropzone.UPLOADING; // alias\n\nDropzone.CANCELED = \"canceled\";\nDropzone.ERROR = \"error\";\nDropzone.SUCCESS = \"success\";\n/*\n\n Bugfix for iOS 6 and 7\n Source: http://stackoverflow.com/questions/11929099/html5-canvas-drawimage-ratio-bug-ios\n based on the work of https://github.com/stomita/ios-imagefile-megapixel\n\n */\n// Detecting vertical squash in loaded image.\n// Fixes a bug which squash image vertically while drawing into canvas for some images.\n// This is a bug in iOS6 devices. This function from https://github.com/stomita/ios-imagefile-megapixel\n\nvar detectVerticalSquash = function detectVerticalSquash(img) {\n  var iw = img.naturalWidth;\n  var ih = img.naturalHeight;\n  var canvas = document.createElement(\"canvas\");\n  canvas.width = 1;\n  canvas.height = ih;\n  var ctx = canvas.getContext(\"2d\");\n  ctx.drawImage(img, 0, 0);\n\n  var _ctx$getImageData = ctx.getImageData(1, 0, 1, ih),\n      data = _ctx$getImageData.data; // search image edge pixel position in case it is squashed vertically.\n\n\n  var sy = 0;\n  var ey = ih;\n  var py = ih;\n\n  while (py > sy) {\n    var alpha = data[(py - 1) * 4 + 3];\n\n    if (alpha === 0) {\n      ey = py;\n    } else {\n      sy = py;\n    }\n\n    py = ey + sy >> 1;\n  }\n\n  var ratio = py / ih;\n\n  if (ratio === 0) {\n    return 1;\n  } else {\n    return ratio;\n  }\n}; // A replacement for context.drawImage\n// (args are for source and destination).\n\n\nvar drawImageIOSFix = function drawImageIOSFix(ctx, img, sx, sy, sw, sh, dx, dy, dw, dh) {\n  var vertSquashRatio = detectVerticalSquash(img);\n  return ctx.drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh / vertSquashRatio);\n}; // Based on MinifyJpeg\n// Source: http://www.perry.cz/files/ExifRestorer.js\n// http://elicon.blog57.fc2.com/blog-entry-206.html\n\n\nvar ExifRestore = /*#__PURE__*/function () {\n  function ExifRestore() {\n    dropzone_classCallCheck(this, ExifRestore);\n  }\n\n  dropzone_createClass(ExifRestore, null, [{\n    key: \"initClass\",\n    value: function initClass() {\n      this.KEY_STR = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n    }\n  }, {\n    key: \"encode64\",\n    value: function encode64(input) {\n      var output = \"\";\n      var chr1 = undefined;\n      var chr2 = undefined;\n      var chr3 = \"\";\n      var enc1 = undefined;\n      var enc2 = undefined;\n      var enc3 = undefined;\n      var enc4 = \"\";\n      var i = 0;\n\n      while (true) {\n        chr1 = input[i++];\n        chr2 = input[i++];\n        chr3 = input[i++];\n        enc1 = chr1 >> 2;\n        enc2 = (chr1 & 3) << 4 | chr2 >> 4;\n        enc3 = (chr2 & 15) << 2 | chr3 >> 6;\n        enc4 = chr3 & 63;\n\n        if (isNaN(chr2)) {\n          enc3 = enc4 = 64;\n        } else if (isNaN(chr3)) {\n          enc4 = 64;\n        }\n\n        output = output + this.KEY_STR.charAt(enc1) + this.KEY_STR.charAt(enc2) + this.KEY_STR.charAt(enc3) + this.KEY_STR.charAt(enc4);\n        chr1 = chr2 = chr3 = \"\";\n        enc1 = enc2 = enc3 = enc4 = \"\";\n\n        if (!(i < input.length)) {\n          break;\n        }\n      }\n\n      return output;\n    }\n  }, {\n    key: \"restore\",\n    value: function restore(origFileBase64, resizedFileBase64) {\n      if (!origFileBase64.match(\"data:image/jpeg;base64,\")) {\n        return resizedFileBase64;\n      }\n\n      var rawImage = this.decode64(origFileBase64.replace(\"data:image/jpeg;base64,\", \"\"));\n      var segments = this.slice2Segments(rawImage);\n      var image = this.exifManipulation(resizedFileBase64, segments);\n      return \"data:image/jpeg;base64,\".concat(this.encode64(image));\n    }\n  }, {\n    key: \"exifManipulation\",\n    value: function exifManipulation(resizedFileBase64, segments) {\n      var exifArray = this.getExifArray(segments);\n      var newImageArray = this.insertExif(resizedFileBase64, exifArray);\n      var aBuffer = new Uint8Array(newImageArray);\n      return aBuffer;\n    }\n  }, {\n    key: \"getExifArray\",\n    value: function getExifArray(segments) {\n      var seg = undefined;\n      var x = 0;\n\n      while (x < segments.length) {\n        seg = segments[x];\n\n        if (seg[0] === 255 & seg[1] === 225) {\n          return seg;\n        }\n\n        x++;\n      }\n\n      return [];\n    }\n  }, {\n    key: \"insertExif\",\n    value: function insertExif(resizedFileBase64, exifArray) {\n      var imageData = resizedFileBase64.replace(\"data:image/jpeg;base64,\", \"\");\n      var buf = this.decode64(imageData);\n      var separatePoint = buf.indexOf(255, 3);\n      var mae = buf.slice(0, separatePoint);\n      var ato = buf.slice(separatePoint);\n      var array = mae;\n      array = array.concat(exifArray);\n      array = array.concat(ato);\n      return array;\n    }\n  }, {\n    key: \"slice2Segments\",\n    value: function slice2Segments(rawImageArray) {\n      var head = 0;\n      var segments = [];\n\n      while (true) {\n        var length;\n\n        if (rawImageArray[head] === 255 & rawImageArray[head + 1] === 218) {\n          break;\n        }\n\n        if (rawImageArray[head] === 255 & rawImageArray[head + 1] === 216) {\n          head += 2;\n        } else {\n          length = rawImageArray[head + 2] * 256 + rawImageArray[head + 3];\n          var endPoint = head + length + 2;\n          var seg = rawImageArray.slice(head, endPoint);\n          segments.push(seg);\n          head = endPoint;\n        }\n\n        if (head > rawImageArray.length) {\n          break;\n        }\n      }\n\n      return segments;\n    }\n  }, {\n    key: \"decode64\",\n    value: function decode64(input) {\n      var output = \"\";\n      var chr1 = undefined;\n      var chr2 = undefined;\n      var chr3 = \"\";\n      var enc1 = undefined;\n      var enc2 = undefined;\n      var enc3 = undefined;\n      var enc4 = \"\";\n      var i = 0;\n      var buf = []; // remove all characters that are not A-Z, a-z, 0-9, +, /, or =\n\n      var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n\n      if (base64test.exec(input)) {\n        console.warn(\"There were invalid base64 characters in the input text.\\nValid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\\nExpect errors in decoding.\");\n      }\n\n      input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\n\n      while (true) {\n        enc1 = this.KEY_STR.indexOf(input.charAt(i++));\n        enc2 = this.KEY_STR.indexOf(input.charAt(i++));\n        enc3 = this.KEY_STR.indexOf(input.charAt(i++));\n        enc4 = this.KEY_STR.indexOf(input.charAt(i++));\n        chr1 = enc1 << 2 | enc2 >> 4;\n        chr2 = (enc2 & 15) << 4 | enc3 >> 2;\n        chr3 = (enc3 & 3) << 6 | enc4;\n        buf.push(chr1);\n\n        if (enc3 !== 64) {\n          buf.push(chr2);\n        }\n\n        if (enc4 !== 64) {\n          buf.push(chr3);\n        }\n\n        chr1 = chr2 = chr3 = \"\";\n        enc1 = enc2 = enc3 = enc4 = \"\";\n\n        if (!(i < input.length)) {\n          break;\n        }\n      }\n\n      return buf;\n    }\n  }]);\n\n  return ExifRestore;\n}();\n\nExifRestore.initClass();\n/*\n * contentloaded.js\n *\n * Author: Diego Perini (diego.perini at gmail.com)\n * Summary: cross-browser wrapper for DOMContentLoaded\n * Updated: 20101020\n * License: MIT\n * Version: 1.2\n *\n * URL:\n * http://javascript.nwbox.com/ContentLoaded/\n * http://javascript.nwbox.com/ContentLoaded/MIT-LICENSE\n */\n// @win window reference\n// @fn function reference\n\nvar contentLoaded = function contentLoaded(win, fn) {\n  var done = false;\n  var top = true;\n  var doc = win.document;\n  var root = doc.documentElement;\n  var add = doc.addEventListener ? \"addEventListener\" : \"attachEvent\";\n  var rem = doc.addEventListener ? \"removeEventListener\" : \"detachEvent\";\n  var pre = doc.addEventListener ? \"\" : \"on\";\n\n  var init = function init(e) {\n    if (e.type === \"readystatechange\" && doc.readyState !== \"complete\") {\n      return;\n    }\n\n    (e.type === \"load\" ? win : doc)[rem](pre + e.type, init, false);\n\n    if (!done && (done = true)) {\n      return fn.call(win, e.type || e);\n    }\n  };\n\n  var poll = function poll() {\n    try {\n      root.doScroll(\"left\");\n    } catch (e) {\n      setTimeout(poll, 50);\n      return;\n    }\n\n    return init(\"poll\");\n  };\n\n  if (doc.readyState !== \"complete\") {\n    if (doc.createEventObject && root.doScroll) {\n      try {\n        top = !win.frameElement;\n      } catch (error) {}\n\n      if (top) {\n        poll();\n      }\n    }\n\n    doc[add](pre + \"DOMContentLoaded\", init, false);\n    doc[add](pre + \"readystatechange\", init, false);\n    return win[add](pre + \"load\", init, false);\n  }\n}; // As a single function to be able to write tests.\n\n\nDropzone._autoDiscoverFunction = function () {\n  if (Dropzone.autoDiscover) {\n    return Dropzone.discover();\n  }\n};\n\ncontentLoaded(window, Dropzone._autoDiscoverFunction);\n\nfunction __guard__(value, transform) {\n  return typeof value !== \"undefined\" && value !== null ? transform(value) : undefined;\n}\n\nfunction __guardMethod__(obj, methodName, transform) {\n  if (typeof obj !== \"undefined\" && obj !== null && typeof obj[methodName] === \"function\") {\n    return transform(obj, methodName);\n  } else {\n    return undefined;\n  }\n}\n\n\n;// CONCATENATED MODULE: ./tool/dropzone.dist.js\n /// Make Dropzone a global variable.\n\nwindow.Dropzone = Dropzone;\n/* harmony default export */ var dropzone_dist = (Dropzone);\n\n}();\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});","export const HOOKS = [\n    \"onChange\",\n    \"onClose\",\n    \"onDayCreate\",\n    \"onDestroy\",\n    \"onKeyDown\",\n    \"onMonthChange\",\n    \"onOpen\",\n    \"onParseConfig\",\n    \"onReady\",\n    \"onValueUpdate\",\n    \"onYearChange\",\n    \"onPreCalendarPosition\",\n];\nexport const defaults = {\n    _disable: [],\n    allowInput: false,\n    allowInvalidPreload: false,\n    altFormat: \"F j, Y\",\n    altInput: false,\n    altInputClass: \"form-control input\",\n    animate: typeof window === \"object\" &&\n        window.navigator.userAgent.indexOf(\"MSIE\") === -1,\n    ariaDateFormat: \"F j, Y\",\n    autoFillDefaultTime: true,\n    clickOpens: true,\n    closeOnSelect: true,\n    conjunction: \", \",\n    dateFormat: \"Y-m-d\",\n    defaultHour: 12,\n    defaultMinute: 0,\n    defaultSeconds: 0,\n    disable: [],\n    disableMobile: false,\n    enableSeconds: false,\n    enableTime: false,\n    errorHandler: (err) => typeof console !== \"undefined\" && console.warn(err),\n    getWeek: (givenDate) => {\n        const date = new Date(givenDate.getTime());\n        date.setHours(0, 0, 0, 0);\n        date.setDate(date.getDate() + 3 - ((date.getDay() + 6) % 7));\n        var week1 = new Date(date.getFullYear(), 0, 4);\n        return (1 +\n            Math.round(((date.getTime() - week1.getTime()) / 86400000 -\n                3 +\n                ((week1.getDay() + 6) % 7)) /\n                7));\n    },\n    hourIncrement: 1,\n    ignoredFocusElements: [],\n    inline: false,\n    locale: \"default\",\n    minuteIncrement: 5,\n    mode: \"single\",\n    monthSelectorType: \"dropdown\",\n    nextArrow: \"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M13.207 8.472l-7.854 7.854-0.707-0.707 7.146-7.146-7.146-7.148 0.707-0.707 7.854 7.854z' /></svg>\",\n    noCalendar: false,\n    now: new Date(),\n    onChange: [],\n    onClose: [],\n    onDayCreate: [],\n    onDestroy: [],\n    onKeyDown: [],\n    onMonthChange: [],\n    onOpen: [],\n    onParseConfig: [],\n    onReady: [],\n    onValueUpdate: [],\n    onYearChange: [],\n    onPreCalendarPosition: [],\n    plugins: [],\n    position: \"auto\",\n    positionElement: undefined,\n    prevArrow: \"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M5.207 8.471l7.146 7.147-0.707 0.707-7.853-7.854 7.854-7.853 0.707 0.707-7.147 7.146z' /></svg>\",\n    shorthandCurrentMonth: false,\n    showMonths: 1,\n    static: false,\n    time_24hr: false,\n    weekNumbers: false,\n    wrap: false,\n};\n","export const english = {\n    weekdays: {\n        shorthand: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n        longhand: [\n            \"Sunday\",\n            \"Monday\",\n            \"Tuesday\",\n            \"Wednesday\",\n            \"Thursday\",\n            \"Friday\",\n            \"Saturday\",\n        ],\n    },\n    months: {\n        shorthand: [\n            \"Jan\",\n            \"Feb\",\n            \"Mar\",\n            \"Apr\",\n            \"May\",\n            \"Jun\",\n            \"Jul\",\n            \"Aug\",\n            \"Sep\",\n            \"Oct\",\n            \"Nov\",\n            \"Dec\",\n        ],\n        longhand: [\n            \"January\",\n            \"February\",\n            \"March\",\n            \"April\",\n            \"May\",\n            \"June\",\n            \"July\",\n            \"August\",\n            \"September\",\n            \"October\",\n            \"November\",\n            \"December\",\n        ],\n    },\n    daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n    firstDayOfWeek: 0,\n    ordinal: (nth) => {\n        const s = nth % 100;\n        if (s > 3 && s < 21)\n            return \"th\";\n        switch (s % 10) {\n            case 1:\n                return \"st\";\n            case 2:\n                return \"nd\";\n            case 3:\n                return \"rd\";\n            default:\n                return \"th\";\n        }\n    },\n    rangeSeparator: \" to \",\n    weekAbbreviation: \"Wk\",\n    scrollTitle: \"Scroll to increment\",\n    toggleTitle: \"Click to toggle\",\n    amPM: [\"AM\", \"PM\"],\n    yearAriaLabel: \"Year\",\n    monthAriaLabel: \"Month\",\n    hourAriaLabel: \"Hour\",\n    minuteAriaLabel: \"Minute\",\n    time_24hr: false,\n};\nexport default english;\n","export const pad = (number, length = 2) => `000${number}`.slice(length * -1);\nexport const int = (bool) => (bool === true ? 1 : 0);\nexport function debounce(fn, wait) {\n    let t;\n    return function () {\n        clearTimeout(t);\n        t = setTimeout(() => fn.apply(this, arguments), wait);\n    };\n}\nexport const arrayify = (obj) => obj instanceof Array ? obj : [obj];\n","export function toggleClass(elem, className, bool) {\n    if (bool === true)\n        return elem.classList.add(className);\n    elem.classList.remove(className);\n}\nexport function createElement(tag, className, content) {\n    const e = window.document.createElement(tag);\n    className = className || \"\";\n    content = content || \"\";\n    e.className = className;\n    if (content !== undefined)\n        e.textContent = content;\n    return e;\n}\nexport function clearNode(node) {\n    while (node.firstChild)\n        node.removeChild(node.firstChild);\n}\nexport function findParent(node, condition) {\n    if (condition(node))\n        return node;\n    else if (node.parentNode)\n        return findParent(node.parentNode, condition);\n    return undefined;\n}\nexport function createNumberInput(inputClassName, opts) {\n    const wrapper = createElement(\"div\", \"numInputWrapper\"), numInput = createElement(\"input\", \"numInput \" + inputClassName), arrowUp = createElement(\"span\", \"arrowUp\"), arrowDown = createElement(\"span\", \"arrowDown\");\n    if (navigator.userAgent.indexOf(\"MSIE 9.0\") === -1) {\n        numInput.type = \"number\";\n    }\n    else {\n        numInput.type = \"text\";\n        numInput.pattern = \"\\\\d*\";\n    }\n    if (opts !== undefined)\n        for (const key in opts)\n            numInput.setAttribute(key, opts[key]);\n    wrapper.appendChild(numInput);\n    wrapper.appendChild(arrowUp);\n    wrapper.appendChild(arrowDown);\n    return wrapper;\n}\nexport function getEventTarget(event) {\n    try {\n        if (typeof event.composedPath === \"function\") {\n            const path = event.composedPath();\n            return path[0];\n        }\n        return event.target;\n    }\n    catch (error) {\n        return event.target;\n    }\n}\n","import { int, pad } from \"../utils\";\nconst doNothing = () => undefined;\nexport const monthToStr = (monthNumber, shorthand, locale) => locale.months[shorthand ? \"shorthand\" : \"longhand\"][monthNumber];\nexport const revFormat = {\n    D: doNothing,\n    F: function (dateObj, monthName, locale) {\n        dateObj.setMonth(locale.months.longhand.indexOf(monthName));\n    },\n    G: (dateObj, hour) => {\n        dateObj.setHours(parseFloat(hour));\n    },\n    H: (dateObj, hour) => {\n        dateObj.setHours(parseFloat(hour));\n    },\n    J: (dateObj, day) => {\n        dateObj.setDate(parseFloat(day));\n    },\n    K: (dateObj, amPM, locale) => {\n        dateObj.setHours((dateObj.getHours() % 12) +\n            12 * int(new RegExp(locale.amPM[1], \"i\").test(amPM)));\n    },\n    M: function (dateObj, shortMonth, locale) {\n        dateObj.setMonth(locale.months.shorthand.indexOf(shortMonth));\n    },\n    S: (dateObj, seconds) => {\n        dateObj.setSeconds(parseFloat(seconds));\n    },\n    U: (_, unixSeconds) => new Date(parseFloat(unixSeconds) * 1000),\n    W: function (dateObj, weekNum, locale) {\n        const weekNumber = parseInt(weekNum);\n        const date = new Date(dateObj.getFullYear(), 0, 2 + (weekNumber - 1) * 7, 0, 0, 0, 0);\n        date.setDate(date.getDate() - date.getDay() + locale.firstDayOfWeek);\n        return date;\n    },\n    Y: (dateObj, year) => {\n        dateObj.setFullYear(parseFloat(year));\n    },\n    Z: (_, ISODate) => new Date(ISODate),\n    d: (dateObj, day) => {\n        dateObj.setDate(parseFloat(day));\n    },\n    h: (dateObj, hour) => {\n        dateObj.setHours(parseFloat(hour));\n    },\n    i: (dateObj, minutes) => {\n        dateObj.setMinutes(parseFloat(minutes));\n    },\n    j: (dateObj, day) => {\n        dateObj.setDate(parseFloat(day));\n    },\n    l: doNothing,\n    m: (dateObj, month) => {\n        dateObj.setMonth(parseFloat(month) - 1);\n    },\n    n: (dateObj, month) => {\n        dateObj.setMonth(parseFloat(month) - 1);\n    },\n    s: (dateObj, seconds) => {\n        dateObj.setSeconds(parseFloat(seconds));\n    },\n    u: (_, unixMillSeconds) => new Date(parseFloat(unixMillSeconds)),\n    w: doNothing,\n    y: (dateObj, year) => {\n        dateObj.setFullYear(2000 + parseFloat(year));\n    },\n};\nexport const tokenRegex = {\n    D: \"(\\\\w+)\",\n    F: \"(\\\\w+)\",\n    G: \"(\\\\d\\\\d|\\\\d)\",\n    H: \"(\\\\d\\\\d|\\\\d)\",\n    J: \"(\\\\d\\\\d|\\\\d)\\\\w+\",\n    K: \"\",\n    M: \"(\\\\w+)\",\n    S: \"(\\\\d\\\\d|\\\\d)\",\n    U: \"(.+)\",\n    W: \"(\\\\d\\\\d|\\\\d)\",\n    Y: \"(\\\\d{4})\",\n    Z: \"(.+)\",\n    d: \"(\\\\d\\\\d|\\\\d)\",\n    h: \"(\\\\d\\\\d|\\\\d)\",\n    i: \"(\\\\d\\\\d|\\\\d)\",\n    j: \"(\\\\d\\\\d|\\\\d)\",\n    l: \"(\\\\w+)\",\n    m: \"(\\\\d\\\\d|\\\\d)\",\n    n: \"(\\\\d\\\\d|\\\\d)\",\n    s: \"(\\\\d\\\\d|\\\\d)\",\n    u: \"(.+)\",\n    w: \"(\\\\d\\\\d|\\\\d)\",\n    y: \"(\\\\d{2})\",\n};\nexport const formats = {\n    Z: (date) => date.toISOString(),\n    D: function (date, locale, options) {\n        return locale.weekdays.shorthand[formats.w(date, locale, options)];\n    },\n    F: function (date, locale, options) {\n        return monthToStr(formats.n(date, locale, options) - 1, false, locale);\n    },\n    G: function (date, locale, options) {\n        return pad(formats.h(date, locale, options));\n    },\n    H: (date) => pad(date.getHours()),\n    J: function (date, locale) {\n        return locale.ordinal !== undefined\n            ? date.getDate() + locale.ordinal(date.getDate())\n            : date.getDate();\n    },\n    K: (date, locale) => locale.amPM[int(date.getHours() > 11)],\n    M: function (date, locale) {\n        return monthToStr(date.getMonth(), true, locale);\n    },\n    S: (date) => pad(date.getSeconds()),\n    U: (date) => date.getTime() / 1000,\n    W: function (date, _, options) {\n        return options.getWeek(date);\n    },\n    Y: (date) => pad(date.getFullYear(), 4),\n    d: (date) => pad(date.getDate()),\n    h: (date) => (date.getHours() % 12 ? date.getHours() % 12 : 12),\n    i: (date) => pad(date.getMinutes()),\n    j: (date) => date.getDate(),\n    l: function (date, locale) {\n        return locale.weekdays.longhand[date.getDay()];\n    },\n    m: (date) => pad(date.getMonth() + 1),\n    n: (date) => date.getMonth() + 1,\n    s: (date) => date.getSeconds(),\n    u: (date) => date.getTime(),\n    w: (date) => date.getDay(),\n    y: (date) => String(date.getFullYear()).substring(2),\n};\n","import { tokenRegex, revFormat, formats, } from \"./formatting\";\nimport { defaults } from \"../types/options\";\nimport { english } from \"../l10n/default\";\nexport const createDateFormatter = ({ config = defaults, l10n = english, isMobile = false, }) => (dateObj, frmt, overrideLocale) => {\n    const locale = overrideLocale || l10n;\n    if (config.formatDate !== undefined && !isMobile) {\n        return config.formatDate(dateObj, frmt, locale);\n    }\n    return frmt\n        .split(\"\")\n        .map((c, i, arr) => formats[c] && arr[i - 1] !== \"\\\\\"\n        ? formats[c](dateObj, locale, config)\n        : c !== \"\\\\\"\n            ? c\n            : \"\")\n        .join(\"\");\n};\nexport const createDateParser = ({ config = defaults, l10n = english }) => (date, givenFormat, timeless, customLocale) => {\n    if (date !== 0 && !date)\n        return undefined;\n    const locale = customLocale || l10n;\n    let parsedDate;\n    const dateOrig = date;\n    if (date instanceof Date)\n        parsedDate = new Date(date.getTime());\n    else if (typeof date !== \"string\" &&\n        date.toFixed !== undefined)\n        parsedDate = new Date(date);\n    else if (typeof date === \"string\") {\n        const format = givenFormat || (config || defaults).dateFormat;\n        const datestr = String(date).trim();\n        if (datestr === \"today\") {\n            parsedDate = new Date();\n            timeless = true;\n        }\n        else if (/Z$/.test(datestr) ||\n            /GMT$/.test(datestr))\n            parsedDate = new Date(date);\n        else if (config && config.parseDate)\n            parsedDate = config.parseDate(date, format);\n        else {\n            parsedDate =\n                !config || !config.noCalendar\n                    ? new Date(new Date().getFullYear(), 0, 1, 0, 0, 0, 0)\n                    : new Date(new Date().setHours(0, 0, 0, 0));\n            let matched, ops = [];\n            for (let i = 0, matchIndex = 0, regexStr = \"\"; i < format.length; i++) {\n                const token = format[i];\n                const isBackSlash = token === \"\\\\\";\n                const escaped = format[i - 1] === \"\\\\\" || isBackSlash;\n                if (tokenRegex[token] && !escaped) {\n                    regexStr += tokenRegex[token];\n                    const match = new RegExp(regexStr).exec(date);\n                    if (match && (matched = true)) {\n                        ops[token !== \"Y\" ? \"push\" : \"unshift\"]({\n                            fn: revFormat[token],\n                            val: match[++matchIndex],\n                        });\n                    }\n                }\n                else if (!isBackSlash)\n                    regexStr += \".\";\n                ops.forEach(({ fn, val }) => (parsedDate = fn(parsedDate, val, locale) || parsedDate));\n            }\n            parsedDate = matched ? parsedDate : undefined;\n        }\n    }\n    if (!(parsedDate instanceof Date && !isNaN(parsedDate.getTime()))) {\n        config.errorHandler(new Error(`Invalid date provided: ${dateOrig}`));\n        return undefined;\n    }\n    if (timeless === true)\n        parsedDate.setHours(0, 0, 0, 0);\n    return parsedDate;\n};\nexport function compareDates(date1, date2, timeless = true) {\n    if (timeless !== false) {\n        return (new Date(date1.getTime()).setHours(0, 0, 0, 0) -\n            new Date(date2.getTime()).setHours(0, 0, 0, 0));\n    }\n    return date1.getTime() - date2.getTime();\n}\nexport function compareTimes(date1, date2) {\n    return (3600 * (date1.getHours() - date2.getHours()) +\n        60 * (date1.getMinutes() - date2.getMinutes()) +\n        date1.getSeconds() -\n        date2.getSeconds());\n}\nexport const isBetween = (ts, ts1, ts2) => {\n    return ts > Math.min(ts1, ts2) && ts < Math.max(ts1, ts2);\n};\nexport const duration = {\n    DAY: 86400000,\n};\nexport function getDefaultHours(config) {\n    let hours = config.defaultHour;\n    let minutes = config.defaultMinute;\n    let seconds = config.defaultSeconds;\n    if (config.minDate !== undefined) {\n        const minHour = config.minDate.getHours();\n        const minMinutes = config.minDate.getMinutes();\n        const minSeconds = config.minDate.getSeconds();\n        if (hours < minHour) {\n            hours = minHour;\n        }\n        if (hours === minHour && minutes < minMinutes) {\n            minutes = minMinutes;\n        }\n        if (hours === minHour && minutes === minMinutes && seconds < minSeconds)\n            seconds = config.minDate.getSeconds();\n    }\n    if (config.maxDate !== undefined) {\n        const maxHr = config.maxDate.getHours();\n        const maxMinutes = config.maxDate.getMinutes();\n        hours = Math.min(hours, maxHr);\n        if (hours === maxHr)\n            minutes = Math.min(maxMinutes, minutes);\n        if (hours === maxHr && minutes === maxMinutes)\n            seconds = config.maxDate.getSeconds();\n    }\n    return { hours, minutes, seconds };\n}\n","import { defaults as defaultOptions, HOOKS, } from \"./types/options\";\nimport English from \"./l10n/default\";\nimport { arrayify, debounce, int, pad } from \"./utils\";\nimport { clearNode, createElement, createNumberInput, findParent, toggleClass, getEventTarget, } from \"./utils/dom\";\nimport { compareDates, createDateParser, createDateFormatter, duration, isBetween, getDefaultHours, } from \"./utils/dates\";\nimport { tokenRegex, monthToStr } from \"./utils/formatting\";\nimport \"./utils/polyfills\";\nconst DEBOUNCED_CHANGE_MS = 300;\nfunction FlatpickrInstance(element, instanceConfig) {\n    const self = {\n        config: Object.assign(Object.assign({}, defaultOptions), flatpickr.defaultConfig),\n        l10n: English,\n    };\n    self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });\n    self._handlers = [];\n    self.pluginElements = [];\n    self.loadedPlugins = [];\n    self._bind = bind;\n    self._setHoursFromDate = setHoursFromDate;\n    self._positionCalendar = positionCalendar;\n    self.changeMonth = changeMonth;\n    self.changeYear = changeYear;\n    self.clear = clear;\n    self.close = close;\n    self._createElement = createElement;\n    self.destroy = destroy;\n    self.isEnabled = isEnabled;\n    self.jumpToDate = jumpToDate;\n    self.open = open;\n    self.redraw = redraw;\n    self.set = set;\n    self.setDate = setDate;\n    self.toggle = toggle;\n    function setupHelperFunctions() {\n        self.utils = {\n            getDaysInMonth(month = self.currentMonth, yr = self.currentYear) {\n                if (month === 1 && ((yr % 4 === 0 && yr % 100 !== 0) || yr % 400 === 0))\n                    return 29;\n                return self.l10n.daysInMonth[month];\n            },\n        };\n    }\n    function init() {\n        self.element = self.input = element;\n        self.isOpen = false;\n        parseConfig();\n        setupLocale();\n        setupInputs();\n        setupDates();\n        setupHelperFunctions();\n        if (!self.isMobile)\n            build();\n        bindEvents();\n        if (self.selectedDates.length || self.config.noCalendar) {\n            if (self.config.enableTime) {\n                setHoursFromDate(self.config.noCalendar ? self.latestSelectedDateObj : undefined);\n            }\n            updateValue(false);\n        }\n        setCalendarWidth();\n        const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n        if (!self.isMobile && isSafari) {\n            positionCalendar();\n        }\n        triggerEvent(\"onReady\");\n    }\n    function bindToInstance(fn) {\n        return fn.bind(self);\n    }\n    function setCalendarWidth() {\n        const config = self.config;\n        if (config.weekNumbers === false && config.showMonths === 1) {\n            return;\n        }\n        else if (config.noCalendar !== true) {\n            window.requestAnimationFrame(function () {\n                if (self.calendarContainer !== undefined) {\n                    self.calendarContainer.style.visibility = \"hidden\";\n                    self.calendarContainer.style.display = \"block\";\n                }\n                if (self.daysContainer !== undefined) {\n                    const daysWidth = (self.days.offsetWidth + 1) * config.showMonths;\n                    self.daysContainer.style.width = daysWidth + \"px\";\n                    self.calendarContainer.style.width =\n                        daysWidth +\n                            (self.weekWrapper !== undefined\n                                ? self.weekWrapper.offsetWidth\n                                : 0) +\n                            \"px\";\n                    self.calendarContainer.style.removeProperty(\"visibility\");\n                    self.calendarContainer.style.removeProperty(\"display\");\n                }\n            });\n        }\n    }\n    function updateTime(e) {\n        if (self.selectedDates.length === 0) {\n            const defaultDate = self.config.minDate === undefined ||\n                compareDates(new Date(), self.config.minDate) >= 0\n                ? new Date()\n                : new Date(self.config.minDate.getTime());\n            const defaults = getDefaultHours(self.config);\n            defaultDate.setHours(defaults.hours, defaults.minutes, defaults.seconds, defaultDate.getMilliseconds());\n            self.selectedDates = [defaultDate];\n            self.latestSelectedDateObj = defaultDate;\n        }\n        if (e !== undefined && e.type !== \"blur\") {\n            timeWrapper(e);\n        }\n        const prevValue = self._input.value;\n        setHoursFromInputs();\n        updateValue();\n        if (self._input.value !== prevValue) {\n            self._debouncedChange();\n        }\n    }\n    function ampm2military(hour, amPM) {\n        return (hour % 12) + 12 * int(amPM === self.l10n.amPM[1]);\n    }\n    function military2ampm(hour) {\n        switch (hour % 24) {\n            case 0:\n            case 12:\n                return 12;\n            default:\n                return hour % 12;\n        }\n    }\n    function setHoursFromInputs() {\n        if (self.hourElement === undefined || self.minuteElement === undefined)\n            return;\n        let hours = (parseInt(self.hourElement.value.slice(-2), 10) || 0) % 24, minutes = (parseInt(self.minuteElement.value, 10) || 0) % 60, seconds = self.secondElement !== undefined\n            ? (parseInt(self.secondElement.value, 10) || 0) % 60\n            : 0;\n        if (self.amPM !== undefined) {\n            hours = ampm2military(hours, self.amPM.textContent);\n        }\n        const limitMinHours = self.config.minTime !== undefined ||\n            (self.config.minDate &&\n                self.minDateHasTime &&\n                self.latestSelectedDateObj &&\n                compareDates(self.latestSelectedDateObj, self.config.minDate, true) ===\n                    0);\n        const limitMaxHours = self.config.maxTime !== undefined ||\n            (self.config.maxDate &&\n                self.maxDateHasTime &&\n                self.latestSelectedDateObj &&\n                compareDates(self.latestSelectedDateObj, self.config.maxDate, true) ===\n                    0);\n        if (limitMaxHours) {\n            const maxTime = self.config.maxTime !== undefined\n                ? self.config.maxTime\n                : self.config.maxDate;\n            hours = Math.min(hours, maxTime.getHours());\n            if (hours === maxTime.getHours())\n                minutes = Math.min(minutes, maxTime.getMinutes());\n            if (minutes === maxTime.getMinutes())\n                seconds = Math.min(seconds, maxTime.getSeconds());\n        }\n        if (limitMinHours) {\n            const minTime = self.config.minTime !== undefined\n                ? self.config.minTime\n                : self.config.minDate;\n            hours = Math.max(hours, minTime.getHours());\n            if (hours === minTime.getHours() && minutes < minTime.getMinutes())\n                minutes = minTime.getMinutes();\n            if (minutes === minTime.getMinutes())\n                seconds = Math.max(seconds, minTime.getSeconds());\n        }\n        setHours(hours, minutes, seconds);\n    }\n    function setHoursFromDate(dateObj) {\n        const date = dateObj || self.latestSelectedDateObj;\n        if (date) {\n            setHours(date.getHours(), date.getMinutes(), date.getSeconds());\n        }\n    }\n    function setHours(hours, minutes, seconds) {\n        if (self.latestSelectedDateObj !== undefined) {\n            self.latestSelectedDateObj.setHours(hours % 24, minutes, seconds || 0, 0);\n        }\n        if (!self.hourElement || !self.minuteElement || self.isMobile)\n            return;\n        self.hourElement.value = pad(!self.config.time_24hr\n            ? ((12 + hours) % 12) + 12 * int(hours % 12 === 0)\n            : hours);\n        self.minuteElement.value = pad(minutes);\n        if (self.amPM !== undefined)\n            self.amPM.textContent = self.l10n.amPM[int(hours >= 12)];\n        if (self.secondElement !== undefined)\n            self.secondElement.value = pad(seconds);\n    }\n    function onYearInput(event) {\n        const eventTarget = getEventTarget(event);\n        const year = parseInt(eventTarget.value) + (event.delta || 0);\n        if (year / 1000 > 1 ||\n            (event.key === \"Enter\" && !/[^\\d]/.test(year.toString()))) {\n            changeYear(year);\n        }\n    }\n    function bind(element, event, handler, options) {\n        if (event instanceof Array)\n            return event.forEach((ev) => bind(element, ev, handler, options));\n        if (element instanceof Array)\n            return element.forEach((el) => bind(el, event, handler, options));\n        element.addEventListener(event, handler, options);\n        self._handlers.push({\n            remove: () => element.removeEventListener(event, handler),\n        });\n    }\n    function triggerChange() {\n        triggerEvent(\"onChange\");\n    }\n    function bindEvents() {\n        if (self.config.wrap) {\n            [\"open\", \"close\", \"toggle\", \"clear\"].forEach((evt) => {\n                Array.prototype.forEach.call(self.element.querySelectorAll(`[data-${evt}]`), (el) => bind(el, \"click\", self[evt]));\n            });\n        }\n        if (self.isMobile) {\n            setupMobile();\n            return;\n        }\n        const debouncedResize = debounce(onResize, 50);\n        self._debouncedChange = debounce(triggerChange, DEBOUNCED_CHANGE_MS);\n        if (self.daysContainer && !/iPhone|iPad|iPod/i.test(navigator.userAgent))\n            bind(self.daysContainer, \"mouseover\", (e) => {\n                if (self.config.mode === \"range\")\n                    onMouseOver(getEventTarget(e));\n            });\n        bind(window.document.body, \"keydown\", onKeyDown);\n        if (!self.config.inline && !self.config.static)\n            bind(window, \"resize\", debouncedResize);\n        if (window.ontouchstart !== undefined)\n            bind(window.document, \"touchstart\", documentClick);\n        else\n            bind(window.document, \"mousedown\", documentClick);\n        bind(window.document, \"focus\", documentClick, { capture: true });\n        if (self.config.clickOpens === true) {\n            bind(self._input, \"focus\", self.open);\n            bind(self._input, \"click\", self.open);\n        }\n        if (self.daysContainer !== undefined) {\n            bind(self.monthNav, \"click\", onMonthNavClick);\n            bind(self.monthNav, [\"keyup\", \"increment\"], onYearInput);\n            bind(self.daysContainer, \"click\", selectDate);\n        }\n        if (self.timeContainer !== undefined &&\n            self.minuteElement !== undefined &&\n            self.hourElement !== undefined) {\n            const selText = (e) => getEventTarget(e).select();\n            bind(self.timeContainer, [\"increment\"], updateTime);\n            bind(self.timeContainer, \"blur\", updateTime, { capture: true });\n            bind(self.timeContainer, \"click\", timeIncrement);\n            bind([self.hourElement, self.minuteElement], [\"focus\", \"click\"], selText);\n            if (self.secondElement !== undefined)\n                bind(self.secondElement, \"focus\", () => self.secondElement && self.secondElement.select());\n            if (self.amPM !== undefined) {\n                bind(self.amPM, \"click\", (e) => {\n                    updateTime(e);\n                    triggerChange();\n                });\n            }\n        }\n        if (self.config.allowInput) {\n            bind(self._input, \"blur\", onBlur);\n        }\n    }\n    function jumpToDate(jumpDate, triggerChange) {\n        const jumpTo = jumpDate !== undefined\n            ? self.parseDate(jumpDate)\n            : self.latestSelectedDateObj ||\n                (self.config.minDate && self.config.minDate > self.now\n                    ? self.config.minDate\n                    : self.config.maxDate && self.config.maxDate < self.now\n                        ? self.config.maxDate\n                        : self.now);\n        const oldYear = self.currentYear;\n        const oldMonth = self.currentMonth;\n        try {\n            if (jumpTo !== undefined) {\n                self.currentYear = jumpTo.getFullYear();\n                self.currentMonth = jumpTo.getMonth();\n            }\n        }\n        catch (e) {\n            e.message = \"Invalid date supplied: \" + jumpTo;\n            self.config.errorHandler(e);\n        }\n        if (triggerChange && self.currentYear !== oldYear) {\n            triggerEvent(\"onYearChange\");\n            buildMonthSwitch();\n        }\n        if (triggerChange &&\n            (self.currentYear !== oldYear || self.currentMonth !== oldMonth)) {\n            triggerEvent(\"onMonthChange\");\n        }\n        self.redraw();\n    }\n    function timeIncrement(e) {\n        const eventTarget = getEventTarget(e);\n        if (~eventTarget.className.indexOf(\"arrow\"))\n            incrementNumInput(e, eventTarget.classList.contains(\"arrowUp\") ? 1 : -1);\n    }\n    function incrementNumInput(e, delta, inputElem) {\n        const target = e && getEventTarget(e);\n        const input = inputElem ||\n            (target && target.parentNode && target.parentNode.firstChild);\n        const event = createEvent(\"increment\");\n        event.delta = delta;\n        input && input.dispatchEvent(event);\n    }\n    function build() {\n        const fragment = window.document.createDocumentFragment();\n        self.calendarContainer = createElement(\"div\", \"flatpickr-calendar\");\n        self.calendarContainer.tabIndex = -1;\n        if (!self.config.noCalendar) {\n            fragment.appendChild(buildMonthNav());\n            self.innerContainer = createElement(\"div\", \"flatpickr-innerContainer\");\n            if (self.config.weekNumbers) {\n                const { weekWrapper, weekNumbers } = buildWeeks();\n                self.innerContainer.appendChild(weekWrapper);\n                self.weekNumbers = weekNumbers;\n                self.weekWrapper = weekWrapper;\n            }\n            self.rContainer = createElement(\"div\", \"flatpickr-rContainer\");\n            self.rContainer.appendChild(buildWeekdays());\n            if (!self.daysContainer) {\n                self.daysContainer = createElement(\"div\", \"flatpickr-days\");\n                self.daysContainer.tabIndex = -1;\n            }\n            buildDays();\n            self.rContainer.appendChild(self.daysContainer);\n            self.innerContainer.appendChild(self.rContainer);\n            fragment.appendChild(self.innerContainer);\n        }\n        if (self.config.enableTime) {\n            fragment.appendChild(buildTime());\n        }\n        toggleClass(self.calendarContainer, \"rangeMode\", self.config.mode === \"range\");\n        toggleClass(self.calendarContainer, \"animate\", self.config.animate === true);\n        toggleClass(self.calendarContainer, \"multiMonth\", self.config.showMonths > 1);\n        self.calendarContainer.appendChild(fragment);\n        const customAppend = self.config.appendTo !== undefined &&\n            self.config.appendTo.nodeType !== undefined;\n        if (self.config.inline || self.config.static) {\n            self.calendarContainer.classList.add(self.config.inline ? \"inline\" : \"static\");\n            if (self.config.inline) {\n                if (!customAppend && self.element.parentNode)\n                    self.element.parentNode.insertBefore(self.calendarContainer, self._input.nextSibling);\n                else if (self.config.appendTo !== undefined)\n                    self.config.appendTo.appendChild(self.calendarContainer);\n            }\n            if (self.config.static) {\n                const wrapper = createElement(\"div\", \"flatpickr-wrapper\");\n                if (self.element.parentNode)\n                    self.element.parentNode.insertBefore(wrapper, self.element);\n                wrapper.appendChild(self.element);\n                if (self.altInput)\n                    wrapper.appendChild(self.altInput);\n                wrapper.appendChild(self.calendarContainer);\n            }\n        }\n        if (!self.config.static && !self.config.inline)\n            (self.config.appendTo !== undefined\n                ? self.config.appendTo\n                : window.document.body).appendChild(self.calendarContainer);\n    }\n    function createDay(className, date, dayNumber, i) {\n        const dateIsEnabled = isEnabled(date, true), dayElement = createElement(\"span\", \"flatpickr-day \" + className, date.getDate().toString());\n        dayElement.dateObj = date;\n        dayElement.$i = i;\n        dayElement.setAttribute(\"aria-label\", self.formatDate(date, self.config.ariaDateFormat));\n        if (className.indexOf(\"hidden\") === -1 &&\n            compareDates(date, self.now) === 0) {\n            self.todayDateElem = dayElement;\n            dayElement.classList.add(\"today\");\n            dayElement.setAttribute(\"aria-current\", \"date\");\n        }\n        if (dateIsEnabled) {\n            dayElement.tabIndex = -1;\n            if (isDateSelected(date)) {\n                dayElement.classList.add(\"selected\");\n                self.selectedDateElem = dayElement;\n                if (self.config.mode === \"range\") {\n                    toggleClass(dayElement, \"startRange\", self.selectedDates[0] &&\n                        compareDates(date, self.selectedDates[0], true) === 0);\n                    toggleClass(dayElement, \"endRange\", self.selectedDates[1] &&\n                        compareDates(date, self.selectedDates[1], true) === 0);\n                    if (className === \"nextMonthDay\")\n                        dayElement.classList.add(\"inRange\");\n                }\n            }\n        }\n        else {\n            dayElement.classList.add(\"flatpickr-disabled\");\n        }\n        if (self.config.mode === \"range\") {\n            if (isDateInRange(date) && !isDateSelected(date))\n                dayElement.classList.add(\"inRange\");\n        }\n        if (self.weekNumbers &&\n            self.config.showMonths === 1 &&\n            className !== \"prevMonthDay\" &&\n            dayNumber % 7 === 1) {\n            self.weekNumbers.insertAdjacentHTML(\"beforeend\", \"<span class='flatpickr-day'>\" + self.config.getWeek(date) + \"</span>\");\n        }\n        triggerEvent(\"onDayCreate\", dayElement);\n        return dayElement;\n    }\n    function focusOnDayElem(targetNode) {\n        targetNode.focus();\n        if (self.config.mode === \"range\")\n            onMouseOver(targetNode);\n    }\n    function getFirstAvailableDay(delta) {\n        const startMonth = delta > 0 ? 0 : self.config.showMonths - 1;\n        const endMonth = delta > 0 ? self.config.showMonths : -1;\n        for (let m = startMonth; m != endMonth; m += delta) {\n            const month = self.daysContainer.children[m];\n            const startIndex = delta > 0 ? 0 : month.children.length - 1;\n            const endIndex = delta > 0 ? month.children.length : -1;\n            for (let i = startIndex; i != endIndex; i += delta) {\n                const c = month.children[i];\n                if (c.className.indexOf(\"hidden\") === -1 && isEnabled(c.dateObj))\n                    return c;\n            }\n        }\n        return undefined;\n    }\n    function getNextAvailableDay(current, delta) {\n        const givenMonth = current.className.indexOf(\"Month\") === -1\n            ? current.dateObj.getMonth()\n            : self.currentMonth;\n        const endMonth = delta > 0 ? self.config.showMonths : -1;\n        const loopDelta = delta > 0 ? 1 : -1;\n        for (let m = givenMonth - self.currentMonth; m != endMonth; m += loopDelta) {\n            const month = self.daysContainer.children[m];\n            const startIndex = givenMonth - self.currentMonth === m\n                ? current.$i + delta\n                : delta < 0\n                    ? month.children.length - 1\n                    : 0;\n            const numMonthDays = month.children.length;\n            for (let i = startIndex; i >= 0 && i < numMonthDays && i != (delta > 0 ? numMonthDays : -1); i += loopDelta) {\n                const c = month.children[i];\n                if (c.className.indexOf(\"hidden\") === -1 &&\n                    isEnabled(c.dateObj) &&\n                    Math.abs(current.$i - i) >= Math.abs(delta))\n                    return focusOnDayElem(c);\n            }\n        }\n        self.changeMonth(loopDelta);\n        focusOnDay(getFirstAvailableDay(loopDelta), 0);\n        return undefined;\n    }\n    function focusOnDay(current, offset) {\n        const dayFocused = isInView(document.activeElement || document.body);\n        const startElem = current !== undefined\n            ? current\n            : dayFocused\n                ? document.activeElement\n                : self.selectedDateElem !== undefined && isInView(self.selectedDateElem)\n                    ? self.selectedDateElem\n                    : self.todayDateElem !== undefined && isInView(self.todayDateElem)\n                        ? self.todayDateElem\n                        : getFirstAvailableDay(offset > 0 ? 1 : -1);\n        if (startElem === undefined) {\n            self._input.focus();\n        }\n        else if (!dayFocused) {\n            focusOnDayElem(startElem);\n        }\n        else {\n            getNextAvailableDay(startElem, offset);\n        }\n    }\n    function buildMonthDays(year, month) {\n        const firstOfMonth = (new Date(year, month, 1).getDay() - self.l10n.firstDayOfWeek + 7) % 7;\n        const prevMonthDays = self.utils.getDaysInMonth((month - 1 + 12) % 12, year);\n        const daysInMonth = self.utils.getDaysInMonth(month, year), days = window.document.createDocumentFragment(), isMultiMonth = self.config.showMonths > 1, prevMonthDayClass = isMultiMonth ? \"prevMonthDay hidden\" : \"prevMonthDay\", nextMonthDayClass = isMultiMonth ? \"nextMonthDay hidden\" : \"nextMonthDay\";\n        let dayNumber = prevMonthDays + 1 - firstOfMonth, dayIndex = 0;\n        for (; dayNumber <= prevMonthDays; dayNumber++, dayIndex++) {\n            days.appendChild(createDay(prevMonthDayClass, new Date(year, month - 1, dayNumber), dayNumber, dayIndex));\n        }\n        for (dayNumber = 1; dayNumber <= daysInMonth; dayNumber++, dayIndex++) {\n            days.appendChild(createDay(\"\", new Date(year, month, dayNumber), dayNumber, dayIndex));\n        }\n        for (let dayNum = daysInMonth + 1; dayNum <= 42 - firstOfMonth &&\n            (self.config.showMonths === 1 || dayIndex % 7 !== 0); dayNum++, dayIndex++) {\n            days.appendChild(createDay(nextMonthDayClass, new Date(year, month + 1, dayNum % daysInMonth), dayNum, dayIndex));\n        }\n        const dayContainer = createElement(\"div\", \"dayContainer\");\n        dayContainer.appendChild(days);\n        return dayContainer;\n    }\n    function buildDays() {\n        if (self.daysContainer === undefined) {\n            return;\n        }\n        clearNode(self.daysContainer);\n        if (self.weekNumbers)\n            clearNode(self.weekNumbers);\n        const frag = document.createDocumentFragment();\n        for (let i = 0; i < self.config.showMonths; i++) {\n            const d = new Date(self.currentYear, self.currentMonth, 1);\n            d.setMonth(self.currentMonth + i);\n            frag.appendChild(buildMonthDays(d.getFullYear(), d.getMonth()));\n        }\n        self.daysContainer.appendChild(frag);\n        self.days = self.daysContainer.firstChild;\n        if (self.config.mode === \"range\" && self.selectedDates.length === 1) {\n            onMouseOver();\n        }\n    }\n    function buildMonthSwitch() {\n        if (self.config.showMonths > 1 ||\n            self.config.monthSelectorType !== \"dropdown\")\n            return;\n        const shouldBuildMonth = function (month) {\n            if (self.config.minDate !== undefined &&\n                self.currentYear === self.config.minDate.getFullYear() &&\n                month < self.config.minDate.getMonth()) {\n                return false;\n            }\n            return !(self.config.maxDate !== undefined &&\n                self.currentYear === self.config.maxDate.getFullYear() &&\n                month > self.config.maxDate.getMonth());\n        };\n        self.monthsDropdownContainer.tabIndex = -1;\n        self.monthsDropdownContainer.innerHTML = \"\";\n        for (let i = 0; i < 12; i++) {\n            if (!shouldBuildMonth(i))\n                continue;\n            const month = createElement(\"option\", \"flatpickr-monthDropdown-month\");\n            month.value = new Date(self.currentYear, i).getMonth().toString();\n            month.textContent = monthToStr(i, self.config.shorthandCurrentMonth, self.l10n);\n            month.tabIndex = -1;\n            if (self.currentMonth === i) {\n                month.selected = true;\n            }\n            self.monthsDropdownContainer.appendChild(month);\n        }\n    }\n    function buildMonth() {\n        const container = createElement(\"div\", \"flatpickr-month\");\n        const monthNavFragment = window.document.createDocumentFragment();\n        let monthElement;\n        if (self.config.showMonths > 1 ||\n            self.config.monthSelectorType === \"static\") {\n            monthElement = createElement(\"span\", \"cur-month\");\n        }\n        else {\n            self.monthsDropdownContainer = createElement(\"select\", \"flatpickr-monthDropdown-months\");\n            self.monthsDropdownContainer.setAttribute(\"aria-label\", self.l10n.monthAriaLabel);\n            bind(self.monthsDropdownContainer, \"change\", (e) => {\n                const target = getEventTarget(e);\n                const selectedMonth = parseInt(target.value, 10);\n                self.changeMonth(selectedMonth - self.currentMonth);\n                triggerEvent(\"onMonthChange\");\n            });\n            buildMonthSwitch();\n            monthElement = self.monthsDropdownContainer;\n        }\n        const yearInput = createNumberInput(\"cur-year\", { tabindex: \"-1\" });\n        const yearElement = yearInput.getElementsByTagName(\"input\")[0];\n        yearElement.setAttribute(\"aria-label\", self.l10n.yearAriaLabel);\n        if (self.config.minDate) {\n            yearElement.setAttribute(\"min\", self.config.minDate.getFullYear().toString());\n        }\n        if (self.config.maxDate) {\n            yearElement.setAttribute(\"max\", self.config.maxDate.getFullYear().toString());\n            yearElement.disabled =\n                !!self.config.minDate &&\n                    self.config.minDate.getFullYear() === self.config.maxDate.getFullYear();\n        }\n        const currentMonth = createElement(\"div\", \"flatpickr-current-month\");\n        currentMonth.appendChild(monthElement);\n        currentMonth.appendChild(yearInput);\n        monthNavFragment.appendChild(currentMonth);\n        container.appendChild(monthNavFragment);\n        return {\n            container,\n            yearElement,\n            monthElement,\n        };\n    }\n    function buildMonths() {\n        clearNode(self.monthNav);\n        self.monthNav.appendChild(self.prevMonthNav);\n        if (self.config.showMonths) {\n            self.yearElements = [];\n            self.monthElements = [];\n        }\n        for (let m = self.config.showMonths; m--;) {\n            const month = buildMonth();\n            self.yearElements.push(month.yearElement);\n            self.monthElements.push(month.monthElement);\n            self.monthNav.appendChild(month.container);\n        }\n        self.monthNav.appendChild(self.nextMonthNav);\n    }\n    function buildMonthNav() {\n        self.monthNav = createElement(\"div\", \"flatpickr-months\");\n        self.yearElements = [];\n        self.monthElements = [];\n        self.prevMonthNav = createElement(\"span\", \"flatpickr-prev-month\");\n        self.prevMonthNav.innerHTML = self.config.prevArrow;\n        self.nextMonthNav = createElement(\"span\", \"flatpickr-next-month\");\n        self.nextMonthNav.innerHTML = self.config.nextArrow;\n        buildMonths();\n        Object.defineProperty(self, \"_hidePrevMonthArrow\", {\n            get: () => self.__hidePrevMonthArrow,\n            set(bool) {\n                if (self.__hidePrevMonthArrow !== bool) {\n                    toggleClass(self.prevMonthNav, \"flatpickr-disabled\", bool);\n                    self.__hidePrevMonthArrow = bool;\n                }\n            },\n        });\n        Object.defineProperty(self, \"_hideNextMonthArrow\", {\n            get: () => self.__hideNextMonthArrow,\n            set(bool) {\n                if (self.__hideNextMonthArrow !== bool) {\n                    toggleClass(self.nextMonthNav, \"flatpickr-disabled\", bool);\n                    self.__hideNextMonthArrow = bool;\n                }\n            },\n        });\n        self.currentYearElement = self.yearElements[0];\n        updateNavigationCurrentMonth();\n        return self.monthNav;\n    }\n    function buildTime() {\n        self.calendarContainer.classList.add(\"hasTime\");\n        if (self.config.noCalendar)\n            self.calendarContainer.classList.add(\"noCalendar\");\n        const defaults = getDefaultHours(self.config);\n        self.timeContainer = createElement(\"div\", \"flatpickr-time\");\n        self.timeContainer.tabIndex = -1;\n        const separator = createElement(\"span\", \"flatpickr-time-separator\", \":\");\n        const hourInput = createNumberInput(\"flatpickr-hour\", {\n            \"aria-label\": self.l10n.hourAriaLabel,\n        });\n        self.hourElement = hourInput.getElementsByTagName(\"input\")[0];\n        const minuteInput = createNumberInput(\"flatpickr-minute\", {\n            \"aria-label\": self.l10n.minuteAriaLabel,\n        });\n        self.minuteElement = minuteInput.getElementsByTagName(\"input\")[0];\n        self.hourElement.tabIndex = self.minuteElement.tabIndex = -1;\n        self.hourElement.value = pad(self.latestSelectedDateObj\n            ? self.latestSelectedDateObj.getHours()\n            : self.config.time_24hr\n                ? defaults.hours\n                : military2ampm(defaults.hours));\n        self.minuteElement.value = pad(self.latestSelectedDateObj\n            ? self.latestSelectedDateObj.getMinutes()\n            : defaults.minutes);\n        self.hourElement.setAttribute(\"step\", self.config.hourIncrement.toString());\n        self.minuteElement.setAttribute(\"step\", self.config.minuteIncrement.toString());\n        self.hourElement.setAttribute(\"min\", self.config.time_24hr ? \"0\" : \"1\");\n        self.hourElement.setAttribute(\"max\", self.config.time_24hr ? \"23\" : \"12\");\n        self.hourElement.setAttribute(\"maxlength\", \"2\");\n        self.minuteElement.setAttribute(\"min\", \"0\");\n        self.minuteElement.setAttribute(\"max\", \"59\");\n        self.minuteElement.setAttribute(\"maxlength\", \"2\");\n        self.timeContainer.appendChild(hourInput);\n        self.timeContainer.appendChild(separator);\n        self.timeContainer.appendChild(minuteInput);\n        if (self.config.time_24hr)\n            self.timeContainer.classList.add(\"time24hr\");\n        if (self.config.enableSeconds) {\n            self.timeContainer.classList.add(\"hasSeconds\");\n            const secondInput = createNumberInput(\"flatpickr-second\");\n            self.secondElement = secondInput.getElementsByTagName(\"input\")[0];\n            self.secondElement.value = pad(self.latestSelectedDateObj\n                ? self.latestSelectedDateObj.getSeconds()\n                : defaults.seconds);\n            self.secondElement.setAttribute(\"step\", self.minuteElement.getAttribute(\"step\"));\n            self.secondElement.setAttribute(\"min\", \"0\");\n            self.secondElement.setAttribute(\"max\", \"59\");\n            self.secondElement.setAttribute(\"maxlength\", \"2\");\n            self.timeContainer.appendChild(createElement(\"span\", \"flatpickr-time-separator\", \":\"));\n            self.timeContainer.appendChild(secondInput);\n        }\n        if (!self.config.time_24hr) {\n            self.amPM = createElement(\"span\", \"flatpickr-am-pm\", self.l10n.amPM[int((self.latestSelectedDateObj\n                ? self.hourElement.value\n                : self.config.defaultHour) > 11)]);\n            self.amPM.title = self.l10n.toggleTitle;\n            self.amPM.tabIndex = -1;\n            self.timeContainer.appendChild(self.amPM);\n        }\n        return self.timeContainer;\n    }\n    function buildWeekdays() {\n        if (!self.weekdayContainer)\n            self.weekdayContainer = createElement(\"div\", \"flatpickr-weekdays\");\n        else\n            clearNode(self.weekdayContainer);\n        for (let i = self.config.showMonths; i--;) {\n            const container = createElement(\"div\", \"flatpickr-weekdaycontainer\");\n            self.weekdayContainer.appendChild(container);\n        }\n        updateWeekdays();\n        return self.weekdayContainer;\n    }\n    function updateWeekdays() {\n        if (!self.weekdayContainer) {\n            return;\n        }\n        const firstDayOfWeek = self.l10n.firstDayOfWeek;\n        let weekdays = [...self.l10n.weekdays.shorthand];\n        if (firstDayOfWeek > 0 && firstDayOfWeek < weekdays.length) {\n            weekdays = [\n                ...weekdays.splice(firstDayOfWeek, weekdays.length),\n                ...weekdays.splice(0, firstDayOfWeek),\n            ];\n        }\n        for (let i = self.config.showMonths; i--;) {\n            self.weekdayContainer.children[i].innerHTML = `\n      <span class='flatpickr-weekday'>\n        ${weekdays.join(\"</span><span class='flatpickr-weekday'>\")}\n      </span>\n      `;\n        }\n    }\n    function buildWeeks() {\n        self.calendarContainer.classList.add(\"hasWeeks\");\n        const weekWrapper = createElement(\"div\", \"flatpickr-weekwrapper\");\n        weekWrapper.appendChild(createElement(\"span\", \"flatpickr-weekday\", self.l10n.weekAbbreviation));\n        const weekNumbers = createElement(\"div\", \"flatpickr-weeks\");\n        weekWrapper.appendChild(weekNumbers);\n        return {\n            weekWrapper,\n            weekNumbers,\n        };\n    }\n    function changeMonth(value, isOffset = true) {\n        const delta = isOffset ? value : value - self.currentMonth;\n        if ((delta < 0 && self._hidePrevMonthArrow === true) ||\n            (delta > 0 && self._hideNextMonthArrow === true))\n            return;\n        self.currentMonth += delta;\n        if (self.currentMonth < 0 || self.currentMonth > 11) {\n            self.currentYear += self.currentMonth > 11 ? 1 : -1;\n            self.currentMonth = (self.currentMonth + 12) % 12;\n            triggerEvent(\"onYearChange\");\n            buildMonthSwitch();\n        }\n        buildDays();\n        triggerEvent(\"onMonthChange\");\n        updateNavigationCurrentMonth();\n    }\n    function clear(triggerChangeEvent = true, toInitial = true) {\n        self.input.value = \"\";\n        if (self.altInput !== undefined)\n            self.altInput.value = \"\";\n        if (self.mobileInput !== undefined)\n            self.mobileInput.value = \"\";\n        self.selectedDates = [];\n        self.latestSelectedDateObj = undefined;\n        if (toInitial === true) {\n            self.currentYear = self._initialDate.getFullYear();\n            self.currentMonth = self._initialDate.getMonth();\n        }\n        if (self.config.enableTime === true) {\n            const { hours, minutes, seconds } = getDefaultHours(self.config);\n            setHours(hours, minutes, seconds);\n        }\n        self.redraw();\n        if (triggerChangeEvent)\n            triggerEvent(\"onChange\");\n    }\n    function close() {\n        self.isOpen = false;\n        if (!self.isMobile) {\n            if (self.calendarContainer !== undefined) {\n                self.calendarContainer.classList.remove(\"open\");\n            }\n            if (self._input !== undefined) {\n                self._input.classList.remove(\"active\");\n            }\n        }\n        triggerEvent(\"onClose\");\n    }\n    function destroy() {\n        if (self.config !== undefined)\n            triggerEvent(\"onDestroy\");\n        for (let i = self._handlers.length; i--;) {\n            self._handlers[i].remove();\n        }\n        self._handlers = [];\n        if (self.mobileInput) {\n            if (self.mobileInput.parentNode)\n                self.mobileInput.parentNode.removeChild(self.mobileInput);\n            self.mobileInput = undefined;\n        }\n        else if (self.calendarContainer && self.calendarContainer.parentNode) {\n            if (self.config.static && self.calendarContainer.parentNode) {\n                const wrapper = self.calendarContainer.parentNode;\n                wrapper.lastChild && wrapper.removeChild(wrapper.lastChild);\n                if (wrapper.parentNode) {\n                    while (wrapper.firstChild)\n                        wrapper.parentNode.insertBefore(wrapper.firstChild, wrapper);\n                    wrapper.parentNode.removeChild(wrapper);\n                }\n            }\n            else\n                self.calendarContainer.parentNode.removeChild(self.calendarContainer);\n        }\n        if (self.altInput) {\n            self.input.type = \"text\";\n            if (self.altInput.parentNode)\n                self.altInput.parentNode.removeChild(self.altInput);\n            delete self.altInput;\n        }\n        if (self.input) {\n            self.input.type = self.input._type;\n            self.input.classList.remove(\"flatpickr-input\");\n            self.input.removeAttribute(\"readonly\");\n        }\n        [\n            \"_showTimeInput\",\n            \"latestSelectedDateObj\",\n            \"_hideNextMonthArrow\",\n            \"_hidePrevMonthArrow\",\n            \"__hideNextMonthArrow\",\n            \"__hidePrevMonthArrow\",\n            \"isMobile\",\n            \"isOpen\",\n            \"selectedDateElem\",\n            \"minDateHasTime\",\n            \"maxDateHasTime\",\n            \"days\",\n            \"daysContainer\",\n            \"_input\",\n            \"_positionElement\",\n            \"innerContainer\",\n            \"rContainer\",\n            \"monthNav\",\n            \"todayDateElem\",\n            \"calendarContainer\",\n            \"weekdayContainer\",\n            \"prevMonthNav\",\n            \"nextMonthNav\",\n            \"monthsDropdownContainer\",\n            \"currentMonthElement\",\n            \"currentYearElement\",\n            \"navigationCurrentMonth\",\n            \"selectedDateElem\",\n            \"config\",\n        ].forEach((k) => {\n            try {\n                delete self[k];\n            }\n            catch (_) { }\n        });\n    }\n    function isCalendarElem(elem) {\n        if (self.config.appendTo && self.config.appendTo.contains(elem))\n            return true;\n        return self.calendarContainer.contains(elem);\n    }\n    function documentClick(e) {\n        if (self.isOpen && !self.config.inline) {\n            const eventTarget = getEventTarget(e);\n            const isCalendarElement = isCalendarElem(eventTarget);\n            const isInput = eventTarget === self.input ||\n                eventTarget === self.altInput ||\n                self.element.contains(eventTarget) ||\n                (e.path &&\n                    e.path.indexOf &&\n                    (~e.path.indexOf(self.input) ||\n                        ~e.path.indexOf(self.altInput)));\n            const lostFocus = e.type === \"blur\"\n                ? isInput &&\n                    e.relatedTarget &&\n                    !isCalendarElem(e.relatedTarget)\n                : !isInput &&\n                    !isCalendarElement &&\n                    !isCalendarElem(e.relatedTarget);\n            const isIgnored = !self.config.ignoredFocusElements.some((elem) => elem.contains(eventTarget));\n            if (lostFocus && isIgnored) {\n                if (self.timeContainer !== undefined &&\n                    self.minuteElement !== undefined &&\n                    self.hourElement !== undefined &&\n                    self.input.value !== \"\" &&\n                    self.input.value !== undefined) {\n                    updateTime();\n                }\n                self.close();\n                if (self.config &&\n                    self.config.mode === \"range\" &&\n                    self.selectedDates.length === 1) {\n                    self.clear(false);\n                    self.redraw();\n                }\n            }\n        }\n    }\n    function changeYear(newYear) {\n        if (!newYear ||\n            (self.config.minDate && newYear < self.config.minDate.getFullYear()) ||\n            (self.config.maxDate && newYear > self.config.maxDate.getFullYear()))\n            return;\n        const newYearNum = newYear, isNewYear = self.currentYear !== newYearNum;\n        self.currentYear = newYearNum || self.currentYear;\n        if (self.config.maxDate &&\n            self.currentYear === self.config.maxDate.getFullYear()) {\n            self.currentMonth = Math.min(self.config.maxDate.getMonth(), self.currentMonth);\n        }\n        else if (self.config.minDate &&\n            self.currentYear === self.config.minDate.getFullYear()) {\n            self.currentMonth = Math.max(self.config.minDate.getMonth(), self.currentMonth);\n        }\n        if (isNewYear) {\n            self.redraw();\n            triggerEvent(\"onYearChange\");\n            buildMonthSwitch();\n        }\n    }\n    function isEnabled(date, timeless = true) {\n        var _a;\n        const dateToCheck = self.parseDate(date, undefined, timeless);\n        if ((self.config.minDate &&\n            dateToCheck &&\n            compareDates(dateToCheck, self.config.minDate, timeless !== undefined ? timeless : !self.minDateHasTime) < 0) ||\n            (self.config.maxDate &&\n                dateToCheck &&\n                compareDates(dateToCheck, self.config.maxDate, timeless !== undefined ? timeless : !self.maxDateHasTime) > 0))\n            return false;\n        if (!self.config.enable && self.config.disable.length === 0)\n            return true;\n        if (dateToCheck === undefined)\n            return false;\n        const bool = !!self.config.enable, array = (_a = self.config.enable) !== null && _a !== void 0 ? _a : self.config.disable;\n        for (let i = 0, d; i < array.length; i++) {\n            d = array[i];\n            if (typeof d === \"function\" &&\n                d(dateToCheck))\n                return bool;\n            else if (d instanceof Date &&\n                dateToCheck !== undefined &&\n                d.getTime() === dateToCheck.getTime())\n                return bool;\n            else if (typeof d === \"string\") {\n                const parsed = self.parseDate(d, undefined, true);\n                return parsed && parsed.getTime() === dateToCheck.getTime()\n                    ? bool\n                    : !bool;\n            }\n            else if (typeof d === \"object\" &&\n                dateToCheck !== undefined &&\n                d.from &&\n                d.to &&\n                dateToCheck.getTime() >= d.from.getTime() &&\n                dateToCheck.getTime() <= d.to.getTime())\n                return bool;\n        }\n        return !bool;\n    }\n    function isInView(elem) {\n        if (self.daysContainer !== undefined)\n            return (elem.className.indexOf(\"hidden\") === -1 &&\n                elem.className.indexOf(\"flatpickr-disabled\") === -1 &&\n                self.daysContainer.contains(elem));\n        return false;\n    }\n    function onBlur(e) {\n        const isInput = e.target === self._input;\n        if (isInput &&\n            (self.selectedDates.length > 0 || self._input.value.length > 0) &&\n            !(e.relatedTarget && isCalendarElem(e.relatedTarget))) {\n            self.setDate(self._input.value, true, e.target === self.altInput\n                ? self.config.altFormat\n                : self.config.dateFormat);\n        }\n    }\n    function onKeyDown(e) {\n        const eventTarget = getEventTarget(e);\n        const isInput = self.config.wrap\n            ? element.contains(eventTarget)\n            : eventTarget === self._input;\n        const allowInput = self.config.allowInput;\n        const allowKeydown = self.isOpen && (!allowInput || !isInput);\n        const allowInlineKeydown = self.config.inline && isInput && !allowInput;\n        if (e.keyCode === 13 && isInput) {\n            if (allowInput) {\n                self.setDate(self._input.value, true, eventTarget === self.altInput\n                    ? self.config.altFormat\n                    : self.config.dateFormat);\n                return eventTarget.blur();\n            }\n            else {\n                self.open();\n            }\n        }\n        else if (isCalendarElem(eventTarget) ||\n            allowKeydown ||\n            allowInlineKeydown) {\n            const isTimeObj = !!self.timeContainer &&\n                self.timeContainer.contains(eventTarget);\n            switch (e.keyCode) {\n                case 13:\n                    if (isTimeObj) {\n                        e.preventDefault();\n                        updateTime();\n                        focusAndClose();\n                    }\n                    else\n                        selectDate(e);\n                    break;\n                case 27:\n                    e.preventDefault();\n                    focusAndClose();\n                    break;\n                case 8:\n                case 46:\n                    if (isInput && !self.config.allowInput) {\n                        e.preventDefault();\n                        self.clear();\n                    }\n                    break;\n                case 37:\n                case 39:\n                    if (!isTimeObj && !isInput) {\n                        e.preventDefault();\n                        if (self.daysContainer !== undefined &&\n                            (allowInput === false ||\n                                (document.activeElement && isInView(document.activeElement)))) {\n                            const delta = e.keyCode === 39 ? 1 : -1;\n                            if (!e.ctrlKey)\n                                focusOnDay(undefined, delta);\n                            else {\n                                e.stopPropagation();\n                                changeMonth(delta);\n                                focusOnDay(getFirstAvailableDay(1), 0);\n                            }\n                        }\n                    }\n                    else if (self.hourElement)\n                        self.hourElement.focus();\n                    break;\n                case 38:\n                case 40:\n                    e.preventDefault();\n                    const delta = e.keyCode === 40 ? 1 : -1;\n                    if ((self.daysContainer &&\n                        eventTarget.$i !== undefined) ||\n                        eventTarget === self.input ||\n                        eventTarget === self.altInput) {\n                        if (e.ctrlKey) {\n                            e.stopPropagation();\n                            changeYear(self.currentYear - delta);\n                            focusOnDay(getFirstAvailableDay(1), 0);\n                        }\n                        else if (!isTimeObj)\n                            focusOnDay(undefined, delta * 7);\n                    }\n                    else if (eventTarget === self.currentYearElement) {\n                        changeYear(self.currentYear - delta);\n                    }\n                    else if (self.config.enableTime) {\n                        if (!isTimeObj && self.hourElement)\n                            self.hourElement.focus();\n                        updateTime(e);\n                        self._debouncedChange();\n                    }\n                    break;\n                case 9:\n                    if (isTimeObj) {\n                        const elems = [\n                            self.hourElement,\n                            self.minuteElement,\n                            self.secondElement,\n                            self.amPM,\n                        ]\n                            .concat(self.pluginElements)\n                            .filter((x) => x);\n                        const i = elems.indexOf(eventTarget);\n                        if (i !== -1) {\n                            const target = elems[i + (e.shiftKey ? -1 : 1)];\n                            e.preventDefault();\n                            (target || self._input).focus();\n                        }\n                    }\n                    else if (!self.config.noCalendar &&\n                        self.daysContainer &&\n                        self.daysContainer.contains(eventTarget) &&\n                        e.shiftKey) {\n                        e.preventDefault();\n                        self._input.focus();\n                    }\n                    break;\n                default:\n                    break;\n            }\n        }\n        if (self.amPM !== undefined && eventTarget === self.amPM) {\n            switch (e.key) {\n                case self.l10n.amPM[0].charAt(0):\n                case self.l10n.amPM[0].charAt(0).toLowerCase():\n                    self.amPM.textContent = self.l10n.amPM[0];\n                    setHoursFromInputs();\n                    updateValue();\n                    break;\n                case self.l10n.amPM[1].charAt(0):\n                case self.l10n.amPM[1].charAt(0).toLowerCase():\n                    self.amPM.textContent = self.l10n.amPM[1];\n                    setHoursFromInputs();\n                    updateValue();\n                    break;\n            }\n        }\n        if (isInput || isCalendarElem(eventTarget)) {\n            triggerEvent(\"onKeyDown\", e);\n        }\n    }\n    function onMouseOver(elem) {\n        if (self.selectedDates.length !== 1 ||\n            (elem &&\n                (!elem.classList.contains(\"flatpickr-day\") ||\n                    elem.classList.contains(\"flatpickr-disabled\"))))\n            return;\n        const hoverDate = elem\n            ? elem.dateObj.getTime()\n            : self.days.firstElementChild.dateObj.getTime(), initialDate = self.parseDate(self.selectedDates[0], undefined, true).getTime(), rangeStartDate = Math.min(hoverDate, self.selectedDates[0].getTime()), rangeEndDate = Math.max(hoverDate, self.selectedDates[0].getTime());\n        let containsDisabled = false;\n        let minRange = 0, maxRange = 0;\n        for (let t = rangeStartDate; t < rangeEndDate; t += duration.DAY) {\n            if (!isEnabled(new Date(t), true)) {\n                containsDisabled =\n                    containsDisabled || (t > rangeStartDate && t < rangeEndDate);\n                if (t < initialDate && (!minRange || t > minRange))\n                    minRange = t;\n                else if (t > initialDate && (!maxRange || t < maxRange))\n                    maxRange = t;\n            }\n        }\n        for (let m = 0; m < self.config.showMonths; m++) {\n            const month = self.daysContainer.children[m];\n            for (let i = 0, l = month.children.length; i < l; i++) {\n                const dayElem = month.children[i], date = dayElem.dateObj;\n                const timestamp = date.getTime();\n                const outOfRange = (minRange > 0 && timestamp < minRange) ||\n                    (maxRange > 0 && timestamp > maxRange);\n                if (outOfRange) {\n                    dayElem.classList.add(\"notAllowed\");\n                    [\"inRange\", \"startRange\", \"endRange\"].forEach((c) => {\n                        dayElem.classList.remove(c);\n                    });\n                    continue;\n                }\n                else if (containsDisabled && !outOfRange)\n                    continue;\n                [\"startRange\", \"inRange\", \"endRange\", \"notAllowed\"].forEach((c) => {\n                    dayElem.classList.remove(c);\n                });\n                if (elem !== undefined) {\n                    elem.classList.add(hoverDate <= self.selectedDates[0].getTime()\n                        ? \"startRange\"\n                        : \"endRange\");\n                    if (initialDate < hoverDate && timestamp === initialDate)\n                        dayElem.classList.add(\"startRange\");\n                    else if (initialDate > hoverDate && timestamp === initialDate)\n                        dayElem.classList.add(\"endRange\");\n                    if (timestamp >= minRange &&\n                        (maxRange === 0 || timestamp <= maxRange) &&\n                        isBetween(timestamp, initialDate, hoverDate))\n                        dayElem.classList.add(\"inRange\");\n                }\n            }\n        }\n    }\n    function onResize() {\n        if (self.isOpen && !self.config.static && !self.config.inline)\n            positionCalendar();\n    }\n    function open(e, positionElement = self._positionElement) {\n        if (self.isMobile === true) {\n            if (e) {\n                e.preventDefault();\n                const eventTarget = getEventTarget(e);\n                if (eventTarget) {\n                    eventTarget.blur();\n                }\n            }\n            if (self.mobileInput !== undefined) {\n                self.mobileInput.focus();\n                self.mobileInput.click();\n            }\n            triggerEvent(\"onOpen\");\n            return;\n        }\n        else if (self._input.disabled || self.config.inline) {\n            return;\n        }\n        const wasOpen = self.isOpen;\n        self.isOpen = true;\n        if (!wasOpen) {\n            self.calendarContainer.classList.add(\"open\");\n            self._input.classList.add(\"active\");\n            triggerEvent(\"onOpen\");\n            positionCalendar(positionElement);\n        }\n        if (self.config.enableTime === true && self.config.noCalendar === true) {\n            if (self.config.allowInput === false &&\n                (e === undefined ||\n                    !self.timeContainer.contains(e.relatedTarget))) {\n                setTimeout(() => self.hourElement.select(), 50);\n            }\n        }\n    }\n    function minMaxDateSetter(type) {\n        return (date) => {\n            const dateObj = (self.config[`_${type}Date`] = self.parseDate(date, self.config.dateFormat));\n            const inverseDateObj = self.config[`_${type === \"min\" ? \"max\" : \"min\"}Date`];\n            if (dateObj !== undefined) {\n                self[type === \"min\" ? \"minDateHasTime\" : \"maxDateHasTime\"] =\n                    dateObj.getHours() > 0 ||\n                        dateObj.getMinutes() > 0 ||\n                        dateObj.getSeconds() > 0;\n            }\n            if (self.selectedDates) {\n                self.selectedDates = self.selectedDates.filter((d) => isEnabled(d));\n                if (!self.selectedDates.length && type === \"min\")\n                    setHoursFromDate(dateObj);\n                updateValue();\n            }\n            if (self.daysContainer) {\n                redraw();\n                if (dateObj !== undefined)\n                    self.currentYearElement[type] = dateObj.getFullYear().toString();\n                else\n                    self.currentYearElement.removeAttribute(type);\n                self.currentYearElement.disabled =\n                    !!inverseDateObj &&\n                        dateObj !== undefined &&\n                        inverseDateObj.getFullYear() === dateObj.getFullYear();\n            }\n        };\n    }\n    function parseConfig() {\n        const boolOpts = [\n            \"wrap\",\n            \"weekNumbers\",\n            \"allowInput\",\n            \"allowInvalidPreload\",\n            \"clickOpens\",\n            \"time_24hr\",\n            \"enableTime\",\n            \"noCalendar\",\n            \"altInput\",\n            \"shorthandCurrentMonth\",\n            \"inline\",\n            \"static\",\n            \"enableSeconds\",\n            \"disableMobile\",\n        ];\n        const userConfig = Object.assign(Object.assign({}, JSON.parse(JSON.stringify(element.dataset || {}))), instanceConfig);\n        const formats = {};\n        self.config.parseDate = userConfig.parseDate;\n        self.config.formatDate = userConfig.formatDate;\n        Object.defineProperty(self.config, \"enable\", {\n            get: () => self.config._enable,\n            set: (dates) => {\n                self.config._enable = parseDateRules(dates);\n            },\n        });\n        Object.defineProperty(self.config, \"disable\", {\n            get: () => self.config._disable,\n            set: (dates) => {\n                self.config._disable = parseDateRules(dates);\n            },\n        });\n        const timeMode = userConfig.mode === \"time\";\n        if (!userConfig.dateFormat && (userConfig.enableTime || timeMode)) {\n            const defaultDateFormat = flatpickr.defaultConfig.dateFormat || defaultOptions.dateFormat;\n            formats.dateFormat =\n                userConfig.noCalendar || timeMode\n                    ? \"H:i\" + (userConfig.enableSeconds ? \":S\" : \"\")\n                    : defaultDateFormat + \" H:i\" + (userConfig.enableSeconds ? \":S\" : \"\");\n        }\n        if (userConfig.altInput &&\n            (userConfig.enableTime || timeMode) &&\n            !userConfig.altFormat) {\n            const defaultAltFormat = flatpickr.defaultConfig.altFormat || defaultOptions.altFormat;\n            formats.altFormat =\n                userConfig.noCalendar || timeMode\n                    ? \"h:i\" + (userConfig.enableSeconds ? \":S K\" : \" K\")\n                    : defaultAltFormat + ` h:i${userConfig.enableSeconds ? \":S\" : \"\"} K`;\n        }\n        Object.defineProperty(self.config, \"minDate\", {\n            get: () => self.config._minDate,\n            set: minMaxDateSetter(\"min\"),\n        });\n        Object.defineProperty(self.config, \"maxDate\", {\n            get: () => self.config._maxDate,\n            set: minMaxDateSetter(\"max\"),\n        });\n        const minMaxTimeSetter = (type) => (val) => {\n            self.config[type === \"min\" ? \"_minTime\" : \"_maxTime\"] = self.parseDate(val, \"H:i:S\");\n        };\n        Object.defineProperty(self.config, \"minTime\", {\n            get: () => self.config._minTime,\n            set: minMaxTimeSetter(\"min\"),\n        });\n        Object.defineProperty(self.config, \"maxTime\", {\n            get: () => self.config._maxTime,\n            set: minMaxTimeSetter(\"max\"),\n        });\n        if (userConfig.mode === \"time\") {\n            self.config.noCalendar = true;\n            self.config.enableTime = true;\n        }\n        Object.assign(self.config, formats, userConfig);\n        for (let i = 0; i < boolOpts.length; i++)\n            self.config[boolOpts[i]] =\n                self.config[boolOpts[i]] === true ||\n                    self.config[boolOpts[i]] === \"true\";\n        HOOKS.filter((hook) => self.config[hook] !== undefined).forEach((hook) => {\n            self.config[hook] = arrayify(self.config[hook] || []).map(bindToInstance);\n        });\n        self.isMobile =\n            !self.config.disableMobile &&\n                !self.config.inline &&\n                self.config.mode === \"single\" &&\n                !self.config.disable.length &&\n                !self.config.enable &&\n                !self.config.weekNumbers &&\n                /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n        for (let i = 0; i < self.config.plugins.length; i++) {\n            const pluginConf = self.config.plugins[i](self) || {};\n            for (const key in pluginConf) {\n                if (HOOKS.indexOf(key) > -1) {\n                    self.config[key] = arrayify(pluginConf[key])\n                        .map(bindToInstance)\n                        .concat(self.config[key]);\n                }\n                else if (typeof userConfig[key] === \"undefined\")\n                    self.config[key] = pluginConf[key];\n            }\n        }\n        if (!userConfig.altInputClass) {\n            self.config.altInputClass =\n                getInputElem().className + \" \" + self.config.altInputClass;\n        }\n        triggerEvent(\"onParseConfig\");\n    }\n    function getInputElem() {\n        return self.config.wrap\n            ? element.querySelector(\"[data-input]\")\n            : element;\n    }\n    function setupLocale() {\n        if (typeof self.config.locale !== \"object\" &&\n            typeof flatpickr.l10ns[self.config.locale] === \"undefined\")\n            self.config.errorHandler(new Error(`flatpickr: invalid locale ${self.config.locale}`));\n        self.l10n = Object.assign(Object.assign({}, flatpickr.l10ns.default), (typeof self.config.locale === \"object\"\n            ? self.config.locale\n            : self.config.locale !== \"default\"\n                ? flatpickr.l10ns[self.config.locale]\n                : undefined));\n        tokenRegex.K = `(${self.l10n.amPM[0]}|${self.l10n.amPM[1]}|${self.l10n.amPM[0].toLowerCase()}|${self.l10n.amPM[1].toLowerCase()})`;\n        const userConfig = Object.assign(Object.assign({}, instanceConfig), JSON.parse(JSON.stringify(element.dataset || {})));\n        if (userConfig.time_24hr === undefined &&\n            flatpickr.defaultConfig.time_24hr === undefined) {\n            self.config.time_24hr = self.l10n.time_24hr;\n        }\n        self.formatDate = createDateFormatter(self);\n        self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });\n    }\n    function positionCalendar(customPositionElement) {\n        if (typeof self.config.position === \"function\") {\n            return void self.config.position(self, customPositionElement);\n        }\n        if (self.calendarContainer === undefined)\n            return;\n        triggerEvent(\"onPreCalendarPosition\");\n        const positionElement = customPositionElement || self._positionElement;\n        const calendarHeight = Array.prototype.reduce.call(self.calendarContainer.children, ((acc, child) => acc + child.offsetHeight), 0), calendarWidth = self.calendarContainer.offsetWidth, configPos = self.config.position.split(\" \"), configPosVertical = configPos[0], configPosHorizontal = configPos.length > 1 ? configPos[1] : null, inputBounds = positionElement.getBoundingClientRect(), distanceFromBottom = window.innerHeight - inputBounds.bottom, showOnTop = configPosVertical === \"above\" ||\n            (configPosVertical !== \"below\" &&\n                distanceFromBottom < calendarHeight &&\n                inputBounds.top > calendarHeight);\n        const top = window.pageYOffset +\n            inputBounds.top +\n            (!showOnTop ? positionElement.offsetHeight + 2 : -calendarHeight - 2);\n        toggleClass(self.calendarContainer, \"arrowTop\", !showOnTop);\n        toggleClass(self.calendarContainer, \"arrowBottom\", showOnTop);\n        if (self.config.inline)\n            return;\n        let left = window.pageXOffset + inputBounds.left;\n        let isCenter = false;\n        let isRight = false;\n        if (configPosHorizontal === \"center\") {\n            left -= (calendarWidth - inputBounds.width) / 2;\n            isCenter = true;\n        }\n        else if (configPosHorizontal === \"right\") {\n            left -= calendarWidth - inputBounds.width;\n            isRight = true;\n        }\n        toggleClass(self.calendarContainer, \"arrowLeft\", !isCenter && !isRight);\n        toggleClass(self.calendarContainer, \"arrowCenter\", isCenter);\n        toggleClass(self.calendarContainer, \"arrowRight\", isRight);\n        const right = window.document.body.offsetWidth -\n            (window.pageXOffset + inputBounds.right);\n        const rightMost = left + calendarWidth > window.document.body.offsetWidth;\n        const centerMost = right + calendarWidth > window.document.body.offsetWidth;\n        toggleClass(self.calendarContainer, \"rightMost\", rightMost);\n        if (self.config.static)\n            return;\n        self.calendarContainer.style.top = `${top}px`;\n        if (!rightMost) {\n            self.calendarContainer.style.left = `${left}px`;\n            self.calendarContainer.style.right = \"auto\";\n        }\n        else if (!centerMost) {\n            self.calendarContainer.style.left = \"auto\";\n            self.calendarContainer.style.right = `${right}px`;\n        }\n        else {\n            const doc = getDocumentStyleSheet();\n            if (doc === undefined)\n                return;\n            const bodyWidth = window.document.body.offsetWidth;\n            const centerLeft = Math.max(0, bodyWidth / 2 - calendarWidth / 2);\n            const centerBefore = \".flatpickr-calendar.centerMost:before\";\n            const centerAfter = \".flatpickr-calendar.centerMost:after\";\n            const centerIndex = doc.cssRules.length;\n            const centerStyle = `{left:${inputBounds.left}px;right:auto;}`;\n            toggleClass(self.calendarContainer, \"rightMost\", false);\n            toggleClass(self.calendarContainer, \"centerMost\", true);\n            doc.insertRule(`${centerBefore},${centerAfter}${centerStyle}`, centerIndex);\n            self.calendarContainer.style.left = `${centerLeft}px`;\n            self.calendarContainer.style.right = \"auto\";\n        }\n    }\n    function getDocumentStyleSheet() {\n        let editableSheet = null;\n        for (let i = 0; i < document.styleSheets.length; i++) {\n            const sheet = document.styleSheets[i];\n            try {\n                sheet.cssRules;\n            }\n            catch (err) {\n                continue;\n            }\n            editableSheet = sheet;\n            break;\n        }\n        return editableSheet != null ? editableSheet : createStyleSheet();\n    }\n    function createStyleSheet() {\n        const style = document.createElement(\"style\");\n        document.head.appendChild(style);\n        return style.sheet;\n    }\n    function redraw() {\n        if (self.config.noCalendar || self.isMobile)\n            return;\n        buildMonthSwitch();\n        updateNavigationCurrentMonth();\n        buildDays();\n    }\n    function focusAndClose() {\n        self._input.focus();\n        if (window.navigator.userAgent.indexOf(\"MSIE\") !== -1 ||\n            navigator.msMaxTouchPoints !== undefined) {\n            setTimeout(self.close, 0);\n        }\n        else {\n            self.close();\n        }\n    }\n    function selectDate(e) {\n        e.preventDefault();\n        e.stopPropagation();\n        const isSelectable = (day) => day.classList &&\n            day.classList.contains(\"flatpickr-day\") &&\n            !day.classList.contains(\"flatpickr-disabled\") &&\n            !day.classList.contains(\"notAllowed\");\n        const t = findParent(getEventTarget(e), isSelectable);\n        if (t === undefined)\n            return;\n        const target = t;\n        const selectedDate = (self.latestSelectedDateObj = new Date(target.dateObj.getTime()));\n        const shouldChangeMonth = (selectedDate.getMonth() < self.currentMonth ||\n            selectedDate.getMonth() >\n                self.currentMonth + self.config.showMonths - 1) &&\n            self.config.mode !== \"range\";\n        self.selectedDateElem = target;\n        if (self.config.mode === \"single\")\n            self.selectedDates = [selectedDate];\n        else if (self.config.mode === \"multiple\") {\n            const selectedIndex = isDateSelected(selectedDate);\n            if (selectedIndex)\n                self.selectedDates.splice(parseInt(selectedIndex), 1);\n            else\n                self.selectedDates.push(selectedDate);\n        }\n        else if (self.config.mode === \"range\") {\n            if (self.selectedDates.length === 2) {\n                self.clear(false, false);\n            }\n            self.latestSelectedDateObj = selectedDate;\n            self.selectedDates.push(selectedDate);\n            if (compareDates(selectedDate, self.selectedDates[0], true) !== 0)\n                self.selectedDates.sort((a, b) => a.getTime() - b.getTime());\n        }\n        setHoursFromInputs();\n        if (shouldChangeMonth) {\n            const isNewYear = self.currentYear !== selectedDate.getFullYear();\n            self.currentYear = selectedDate.getFullYear();\n            self.currentMonth = selectedDate.getMonth();\n            if (isNewYear) {\n                triggerEvent(\"onYearChange\");\n                buildMonthSwitch();\n            }\n            triggerEvent(\"onMonthChange\");\n        }\n        updateNavigationCurrentMonth();\n        buildDays();\n        updateValue();\n        if (!shouldChangeMonth &&\n            self.config.mode !== \"range\" &&\n            self.config.showMonths === 1)\n            focusOnDayElem(target);\n        else if (self.selectedDateElem !== undefined &&\n            self.hourElement === undefined) {\n            self.selectedDateElem && self.selectedDateElem.focus();\n        }\n        if (self.hourElement !== undefined)\n            self.hourElement !== undefined && self.hourElement.focus();\n        if (self.config.closeOnSelect) {\n            const single = self.config.mode === \"single\" && !self.config.enableTime;\n            const range = self.config.mode === \"range\" &&\n                self.selectedDates.length === 2 &&\n                !self.config.enableTime;\n            if (single || range) {\n                focusAndClose();\n            }\n        }\n        triggerChange();\n    }\n    const CALLBACKS = {\n        locale: [setupLocale, updateWeekdays],\n        showMonths: [buildMonths, setCalendarWidth, buildWeekdays],\n        minDate: [jumpToDate],\n        maxDate: [jumpToDate],\n        clickOpens: [\n            () => {\n                if (self.config.clickOpens === true) {\n                    bind(self._input, \"focus\", self.open);\n                    bind(self._input, \"click\", self.open);\n                }\n                else {\n                    self._input.removeEventListener(\"focus\", self.open);\n                    self._input.removeEventListener(\"click\", self.open);\n                }\n            },\n        ],\n    };\n    function set(option, value) {\n        if (option !== null && typeof option === \"object\") {\n            Object.assign(self.config, option);\n            for (const key in option) {\n                if (CALLBACKS[key] !== undefined)\n                    CALLBACKS[key].forEach((x) => x());\n            }\n        }\n        else {\n            self.config[option] = value;\n            if (CALLBACKS[option] !== undefined)\n                CALLBACKS[option].forEach((x) => x());\n            else if (HOOKS.indexOf(option) > -1)\n                self.config[option] = arrayify(value);\n        }\n        self.redraw();\n        updateValue(true);\n    }\n    function setSelectedDate(inputDate, format) {\n        let dates = [];\n        if (inputDate instanceof Array)\n            dates = inputDate.map((d) => self.parseDate(d, format));\n        else if (inputDate instanceof Date || typeof inputDate === \"number\")\n            dates = [self.parseDate(inputDate, format)];\n        else if (typeof inputDate === \"string\") {\n            switch (self.config.mode) {\n                case \"single\":\n                case \"time\":\n                    dates = [self.parseDate(inputDate, format)];\n                    break;\n                case \"multiple\":\n                    dates = inputDate\n                        .split(self.config.conjunction)\n                        .map((date) => self.parseDate(date, format));\n                    break;\n                case \"range\":\n                    dates = inputDate\n                        .split(self.l10n.rangeSeparator)\n                        .map((date) => self.parseDate(date, format));\n                    break;\n                default:\n                    break;\n            }\n        }\n        else\n            self.config.errorHandler(new Error(`Invalid date supplied: ${JSON.stringify(inputDate)}`));\n        self.selectedDates = (self.config.allowInvalidPreload\n            ? dates\n            : dates.filter((d) => d instanceof Date && isEnabled(d, false)));\n        if (self.config.mode === \"range\")\n            self.selectedDates.sort((a, b) => a.getTime() - b.getTime());\n    }\n    function setDate(date, triggerChange = false, format = self.config.dateFormat) {\n        if ((date !== 0 && !date) || (date instanceof Array && date.length === 0))\n            return self.clear(triggerChange);\n        setSelectedDate(date, format);\n        self.latestSelectedDateObj =\n            self.selectedDates[self.selectedDates.length - 1];\n        self.redraw();\n        jumpToDate(undefined, triggerChange);\n        setHoursFromDate();\n        if (self.selectedDates.length === 0) {\n            self.clear(false);\n        }\n        updateValue(triggerChange);\n        if (triggerChange)\n            triggerEvent(\"onChange\");\n    }\n    function parseDateRules(arr) {\n        return arr\n            .slice()\n            .map((rule) => {\n            if (typeof rule === \"string\" ||\n                typeof rule === \"number\" ||\n                rule instanceof Date) {\n                return self.parseDate(rule, undefined, true);\n            }\n            else if (rule &&\n                typeof rule === \"object\" &&\n                rule.from &&\n                rule.to)\n                return {\n                    from: self.parseDate(rule.from, undefined),\n                    to: self.parseDate(rule.to, undefined),\n                };\n            return rule;\n        })\n            .filter((x) => x);\n    }\n    function setupDates() {\n        self.selectedDates = [];\n        self.now = self.parseDate(self.config.now) || new Date();\n        const preloadedDate = self.config.defaultDate ||\n            ((self.input.nodeName === \"INPUT\" ||\n                self.input.nodeName === \"TEXTAREA\") &&\n                self.input.placeholder &&\n                self.input.value === self.input.placeholder\n                ? null\n                : self.input.value);\n        if (preloadedDate)\n            setSelectedDate(preloadedDate, self.config.dateFormat);\n        self._initialDate =\n            self.selectedDates.length > 0\n                ? self.selectedDates[0]\n                : self.config.minDate &&\n                    self.config.minDate.getTime() > self.now.getTime()\n                    ? self.config.minDate\n                    : self.config.maxDate &&\n                        self.config.maxDate.getTime() < self.now.getTime()\n                        ? self.config.maxDate\n                        : self.now;\n        self.currentYear = self._initialDate.getFullYear();\n        self.currentMonth = self._initialDate.getMonth();\n        if (self.selectedDates.length > 0)\n            self.latestSelectedDateObj = self.selectedDates[0];\n        if (self.config.minTime !== undefined)\n            self.config.minTime = self.parseDate(self.config.minTime, \"H:i\");\n        if (self.config.maxTime !== undefined)\n            self.config.maxTime = self.parseDate(self.config.maxTime, \"H:i\");\n        self.minDateHasTime =\n            !!self.config.minDate &&\n                (self.config.minDate.getHours() > 0 ||\n                    self.config.minDate.getMinutes() > 0 ||\n                    self.config.minDate.getSeconds() > 0);\n        self.maxDateHasTime =\n            !!self.config.maxDate &&\n                (self.config.maxDate.getHours() > 0 ||\n                    self.config.maxDate.getMinutes() > 0 ||\n                    self.config.maxDate.getSeconds() > 0);\n    }\n    function setupInputs() {\n        self.input = getInputElem();\n        if (!self.input) {\n            self.config.errorHandler(new Error(\"Invalid input element specified\"));\n            return;\n        }\n        self.input._type = self.input.type;\n        self.input.type = \"text\";\n        self.input.classList.add(\"flatpickr-input\");\n        self._input = self.input;\n        if (self.config.altInput) {\n            self.altInput = createElement(self.input.nodeName, self.config.altInputClass);\n            self._input = self.altInput;\n            self.altInput.placeholder = self.input.placeholder;\n            self.altInput.disabled = self.input.disabled;\n            self.altInput.required = self.input.required;\n            self.altInput.tabIndex = self.input.tabIndex;\n            self.altInput.type = \"text\";\n            self.input.setAttribute(\"type\", \"hidden\");\n            if (!self.config.static && self.input.parentNode)\n                self.input.parentNode.insertBefore(self.altInput, self.input.nextSibling);\n        }\n        if (!self.config.allowInput)\n            self._input.setAttribute(\"readonly\", \"readonly\");\n        self._positionElement = self.config.positionElement || self._input;\n    }\n    function setupMobile() {\n        const inputType = self.config.enableTime\n            ? self.config.noCalendar\n                ? \"time\"\n                : \"datetime-local\"\n            : \"date\";\n        self.mobileInput = createElement(\"input\", self.input.className + \" flatpickr-mobile\");\n        self.mobileInput.tabIndex = 1;\n        self.mobileInput.type = inputType;\n        self.mobileInput.disabled = self.input.disabled;\n        self.mobileInput.required = self.input.required;\n        self.mobileInput.placeholder = self.input.placeholder;\n        self.mobileFormatStr =\n            inputType === \"datetime-local\"\n                ? \"Y-m-d\\\\TH:i:S\"\n                : inputType === \"date\"\n                    ? \"Y-m-d\"\n                    : \"H:i:S\";\n        if (self.selectedDates.length > 0) {\n            self.mobileInput.defaultValue = self.mobileInput.value = self.formatDate(self.selectedDates[0], self.mobileFormatStr);\n        }\n        if (self.config.minDate)\n            self.mobileInput.min = self.formatDate(self.config.minDate, \"Y-m-d\");\n        if (self.config.maxDate)\n            self.mobileInput.max = self.formatDate(self.config.maxDate, \"Y-m-d\");\n        if (self.input.getAttribute(\"step\"))\n            self.mobileInput.step = String(self.input.getAttribute(\"step\"));\n        self.input.type = \"hidden\";\n        if (self.altInput !== undefined)\n            self.altInput.type = \"hidden\";\n        try {\n            if (self.input.parentNode)\n                self.input.parentNode.insertBefore(self.mobileInput, self.input.nextSibling);\n        }\n        catch (_a) { }\n        bind(self.mobileInput, \"change\", (e) => {\n            self.setDate(getEventTarget(e).value, false, self.mobileFormatStr);\n            triggerEvent(\"onChange\");\n            triggerEvent(\"onClose\");\n        });\n    }\n    function toggle(e) {\n        if (self.isOpen === true)\n            return self.close();\n        self.open(e);\n    }\n    function triggerEvent(event, data) {\n        if (self.config === undefined)\n            return;\n        const hooks = self.config[event];\n        if (hooks !== undefined && hooks.length > 0) {\n            for (let i = 0; hooks[i] && i < hooks.length; i++)\n                hooks[i](self.selectedDates, self.input.value, self, data);\n        }\n        if (event === \"onChange\") {\n            self.input.dispatchEvent(createEvent(\"change\"));\n            self.input.dispatchEvent(createEvent(\"input\"));\n        }\n    }\n    function createEvent(name) {\n        const e = document.createEvent(\"Event\");\n        e.initEvent(name, true, true);\n        return e;\n    }\n    function isDateSelected(date) {\n        for (let i = 0; i < self.selectedDates.length; i++) {\n            if (compareDates(self.selectedDates[i], date) === 0)\n                return \"\" + i;\n        }\n        return false;\n    }\n    function isDateInRange(date) {\n        if (self.config.mode !== \"range\" || self.selectedDates.length < 2)\n            return false;\n        return (compareDates(date, self.selectedDates[0]) >= 0 &&\n            compareDates(date, self.selectedDates[1]) <= 0);\n    }\n    function updateNavigationCurrentMonth() {\n        if (self.config.noCalendar || self.isMobile || !self.monthNav)\n            return;\n        self.yearElements.forEach((yearElement, i) => {\n            const d = new Date(self.currentYear, self.currentMonth, 1);\n            d.setMonth(self.currentMonth + i);\n            if (self.config.showMonths > 1 ||\n                self.config.monthSelectorType === \"static\") {\n                self.monthElements[i].textContent =\n                    monthToStr(d.getMonth(), self.config.shorthandCurrentMonth, self.l10n) + \" \";\n            }\n            else {\n                self.monthsDropdownContainer.value = d.getMonth().toString();\n            }\n            yearElement.value = d.getFullYear().toString();\n        });\n        self._hidePrevMonthArrow =\n            self.config.minDate !== undefined &&\n                (self.currentYear === self.config.minDate.getFullYear()\n                    ? self.currentMonth <= self.config.minDate.getMonth()\n                    : self.currentYear < self.config.minDate.getFullYear());\n        self._hideNextMonthArrow =\n            self.config.maxDate !== undefined &&\n                (self.currentYear === self.config.maxDate.getFullYear()\n                    ? self.currentMonth + 1 > self.config.maxDate.getMonth()\n                    : self.currentYear > self.config.maxDate.getFullYear());\n    }\n    function getDateStr(format) {\n        return self.selectedDates\n            .map((dObj) => self.formatDate(dObj, format))\n            .filter((d, i, arr) => self.config.mode !== \"range\" ||\n            self.config.enableTime ||\n            arr.indexOf(d) === i)\n            .join(self.config.mode !== \"range\"\n            ? self.config.conjunction\n            : self.l10n.rangeSeparator);\n    }\n    function updateValue(triggerChange = true) {\n        if (self.mobileInput !== undefined && self.mobileFormatStr) {\n            self.mobileInput.value =\n                self.latestSelectedDateObj !== undefined\n                    ? self.formatDate(self.latestSelectedDateObj, self.mobileFormatStr)\n                    : \"\";\n        }\n        self.input.value = getDateStr(self.config.dateFormat);\n        if (self.altInput !== undefined) {\n            self.altInput.value = getDateStr(self.config.altFormat);\n        }\n        if (triggerChange !== false)\n            triggerEvent(\"onValueUpdate\");\n    }\n    function onMonthNavClick(e) {\n        const eventTarget = getEventTarget(e);\n        const isPrevMonth = self.prevMonthNav.contains(eventTarget);\n        const isNextMonth = self.nextMonthNav.contains(eventTarget);\n        if (isPrevMonth || isNextMonth) {\n            changeMonth(isPrevMonth ? -1 : 1);\n        }\n        else if (self.yearElements.indexOf(eventTarget) >= 0) {\n            eventTarget.select();\n        }\n        else if (eventTarget.classList.contains(\"arrowUp\")) {\n            self.changeYear(self.currentYear + 1);\n        }\n        else if (eventTarget.classList.contains(\"arrowDown\")) {\n            self.changeYear(self.currentYear - 1);\n        }\n    }\n    function timeWrapper(e) {\n        e.preventDefault();\n        const isKeyDown = e.type === \"keydown\", eventTarget = getEventTarget(e), input = eventTarget;\n        if (self.amPM !== undefined && eventTarget === self.amPM) {\n            self.amPM.textContent =\n                self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n        }\n        const min = parseFloat(input.getAttribute(\"min\")), max = parseFloat(input.getAttribute(\"max\")), step = parseFloat(input.getAttribute(\"step\")), curValue = parseInt(input.value, 10), delta = e.delta ||\n            (isKeyDown ? (e.which === 38 ? 1 : -1) : 0);\n        let newValue = curValue + step * delta;\n        if (typeof input.value !== \"undefined\" && input.value.length === 2) {\n            const isHourElem = input === self.hourElement, isMinuteElem = input === self.minuteElement;\n            if (newValue < min) {\n                newValue =\n                    max +\n                        newValue +\n                        int(!isHourElem) +\n                        (int(isHourElem) && int(!self.amPM));\n                if (isMinuteElem)\n                    incrementNumInput(undefined, -1, self.hourElement);\n            }\n            else if (newValue > max) {\n                newValue =\n                    input === self.hourElement ? newValue - max - int(!self.amPM) : min;\n                if (isMinuteElem)\n                    incrementNumInput(undefined, 1, self.hourElement);\n            }\n            if (self.amPM &&\n                isHourElem &&\n                (step === 1\n                    ? newValue + curValue === 23\n                    : Math.abs(newValue - curValue) > step)) {\n                self.amPM.textContent =\n                    self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n            }\n            input.value = pad(newValue);\n        }\n    }\n    init();\n    return self;\n}\nfunction _flatpickr(nodeList, config) {\n    const nodes = Array.prototype.slice\n        .call(nodeList)\n        .filter((x) => x instanceof HTMLElement);\n    const instances = [];\n    for (let i = 0; i < nodes.length; i++) {\n        const node = nodes[i];\n        try {\n            if (node.getAttribute(\"data-fp-omit\") !== null)\n                continue;\n            if (node._flatpickr !== undefined) {\n                node._flatpickr.destroy();\n                node._flatpickr = undefined;\n            }\n            node._flatpickr = FlatpickrInstance(node, config || {});\n            instances.push(node._flatpickr);\n        }\n        catch (e) {\n            console.error(e);\n        }\n    }\n    return instances.length === 1 ? instances[0] : instances;\n}\nif (typeof HTMLElement !== \"undefined\" &&\n    typeof HTMLCollection !== \"undefined\" &&\n    typeof NodeList !== \"undefined\") {\n    HTMLCollection.prototype.flatpickr = NodeList.prototype.flatpickr = function (config) {\n        return _flatpickr(this, config);\n    };\n    HTMLElement.prototype.flatpickr = function (config) {\n        return _flatpickr([this], config);\n    };\n}\nvar flatpickr = function (selector, config) {\n    if (typeof selector === \"string\") {\n        return _flatpickr(window.document.querySelectorAll(selector), config);\n    }\n    else if (selector instanceof Node) {\n        return _flatpickr([selector], config);\n    }\n    else {\n        return _flatpickr(selector, config);\n    }\n};\nflatpickr.defaultConfig = {};\nflatpickr.l10ns = {\n    en: Object.assign({}, English),\n    default: Object.assign({}, English),\n};\nflatpickr.localize = (l10n) => {\n    flatpickr.l10ns.default = Object.assign(Object.assign({}, flatpickr.l10ns.default), l10n);\n};\nflatpickr.setDefaults = (config) => {\n    flatpickr.defaultConfig = Object.assign(Object.assign({}, flatpickr.defaultConfig), config);\n};\nflatpickr.parseDate = createDateParser({});\nflatpickr.formatDate = createDateFormatter({});\nflatpickr.compareDates = compareDates;\nif (typeof jQuery !== \"undefined\" && typeof jQuery.fn !== \"undefined\") {\n    jQuery.fn.flatpickr = function (config) {\n        return _flatpickr(this, config);\n    };\n}\nDate.prototype.fp_incr = function (days) {\n    return new Date(this.getFullYear(), this.getMonth(), this.getDate() + (typeof days === \"string\" ? parseInt(days, 10) : days));\n};\nif (typeof window !== \"undefined\") {\n    window.flatpickr = flatpickr;\n}\nexport default flatpickr;\n","\"use strict\";\nif (typeof Object.assign !== \"function\") {\n    Object.assign = function (target, ...args) {\n        if (!target) {\n            throw TypeError(\"Cannot convert undefined or null to object\");\n        }\n        for (const source of args) {\n            if (source) {\n                Object.keys(source).forEach((key) => (target[key] = source[key]));\n            }\n        }\n        return target;\n    };\n}\n","function deepFreeze(obj) {\n    if (obj instanceof Map) {\n        obj.clear = obj.delete = obj.set = function () {\n            throw new Error('map is read-only');\n        };\n    } else if (obj instanceof Set) {\n        obj.add = obj.clear = obj.delete = function () {\n            throw new Error('set is read-only');\n        };\n    }\n\n    // Freeze self\n    Object.freeze(obj);\n\n    Object.getOwnPropertyNames(obj).forEach(function (name) {\n        var prop = obj[name];\n\n        // Freeze prop if it is an object\n        if (typeof prop == 'object' && !Object.isFrozen(prop)) {\n            deepFreeze(prop);\n        }\n    });\n\n    return obj;\n}\n\nvar deepFreezeEs6 = deepFreeze;\nvar _default = deepFreeze;\ndeepFreezeEs6.default = _default;\n\n/** @implements CallbackResponse */\nclass Response {\n  /**\n   * @param {CompiledMode} mode\n   */\n  constructor(mode) {\n    // eslint-disable-next-line no-undefined\n    if (mode.data === undefined) mode.data = {};\n\n    this.data = mode.data;\n    this.isMatchIgnored = false;\n  }\n\n  ignoreMatch() {\n    this.isMatchIgnored = true;\n  }\n}\n\n/**\n * @param {string} value\n * @returns {string}\n */\nfunction escapeHTML(value) {\n  return value\n    .replace(/&/g, '&amp;')\n    .replace(/</g, '&lt;')\n    .replace(/>/g, '&gt;')\n    .replace(/\"/g, '&quot;')\n    .replace(/'/g, '&#x27;');\n}\n\n/**\n * performs a shallow merge of multiple objects into one\n *\n * @template T\n * @param {T} original\n * @param {Record<string,any>[]} objects\n * @returns {T} a single new object\n */\nfunction inherit(original, ...objects) {\n  /** @type Record<string,any> */\n  const result = Object.create(null);\n\n  for (const key in original) {\n    result[key] = original[key];\n  }\n  objects.forEach(function(obj) {\n    for (const key in obj) {\n      result[key] = obj[key];\n    }\n  });\n  return /** @type {T} */ (result);\n}\n\n/**\n * @typedef {object} Renderer\n * @property {(text: string) => void} addText\n * @property {(node: Node) => void} openNode\n * @property {(node: Node) => void} closeNode\n * @property {() => string} value\n */\n\n/** @typedef {{kind?: string, sublanguage?: boolean}} Node */\n/** @typedef {{walk: (r: Renderer) => void}} Tree */\n/** */\n\nconst SPAN_CLOSE = '</span>';\n\n/**\n * Determines if a node needs to be wrapped in <span>\n *\n * @param {Node} node */\nconst emitsWrappingTags = (node) => {\n  return !!node.kind;\n};\n\n/** @type {Renderer} */\nclass HTMLRenderer {\n  /**\n   * Creates a new HTMLRenderer\n   *\n   * @param {Tree} parseTree - the parse tree (must support `walk` API)\n   * @param {{classPrefix: string}} options\n   */\n  constructor(parseTree, options) {\n    this.buffer = \"\";\n    this.classPrefix = options.classPrefix;\n    parseTree.walk(this);\n  }\n\n  /**\n   * Adds texts to the output stream\n   *\n   * @param {string} text */\n  addText(text) {\n    this.buffer += escapeHTML(text);\n  }\n\n  /**\n   * Adds a node open to the output stream (if needed)\n   *\n   * @param {Node} node */\n  openNode(node) {\n    if (!emitsWrappingTags(node)) return;\n\n    let className = node.kind;\n    if (!node.sublanguage) {\n      className = `${this.classPrefix}${className}`;\n    }\n    this.span(className);\n  }\n\n  /**\n   * Adds a node close to the output stream (if needed)\n   *\n   * @param {Node} node */\n  closeNode(node) {\n    if (!emitsWrappingTags(node)) return;\n\n    this.buffer += SPAN_CLOSE;\n  }\n\n  /**\n   * returns the accumulated buffer\n  */\n  value() {\n    return this.buffer;\n  }\n\n  // helpers\n\n  /**\n   * Builds a span element\n   *\n   * @param {string} className */\n  span(className) {\n    this.buffer += `<span class=\"${className}\">`;\n  }\n}\n\n/** @typedef {{kind?: string, sublanguage?: boolean, children: Node[]} | string} Node */\n/** @typedef {{kind?: string, sublanguage?: boolean, children: Node[]} } DataNode */\n/**  */\n\nclass TokenTree {\n  constructor() {\n    /** @type DataNode */\n    this.rootNode = { children: [] };\n    this.stack = [this.rootNode];\n  }\n\n  get top() {\n    return this.stack[this.stack.length - 1];\n  }\n\n  get root() { return this.rootNode; }\n\n  /** @param {Node} node */\n  add(node) {\n    this.top.children.push(node);\n  }\n\n  /** @param {string} kind */\n  openNode(kind) {\n    /** @type Node */\n    const node = { kind, children: [] };\n    this.add(node);\n    this.stack.push(node);\n  }\n\n  closeNode() {\n    if (this.stack.length > 1) {\n      return this.stack.pop();\n    }\n    // eslint-disable-next-line no-undefined\n    return undefined;\n  }\n\n  closeAllNodes() {\n    while (this.closeNode());\n  }\n\n  toJSON() {\n    return JSON.stringify(this.rootNode, null, 4);\n  }\n\n  /**\n   * @typedef { import(\"./html_renderer\").Renderer } Renderer\n   * @param {Renderer} builder\n   */\n  walk(builder) {\n    // this does not\n    return this.constructor._walk(builder, this.rootNode);\n    // this works\n    // return TokenTree._walk(builder, this.rootNode);\n  }\n\n  /**\n   * @param {Renderer} builder\n   * @param {Node} node\n   */\n  static _walk(builder, node) {\n    if (typeof node === \"string\") {\n      builder.addText(node);\n    } else if (node.children) {\n      builder.openNode(node);\n      node.children.forEach((child) => this._walk(builder, child));\n      builder.closeNode(node);\n    }\n    return builder;\n  }\n\n  /**\n   * @param {Node} node\n   */\n  static _collapse(node) {\n    if (typeof node === \"string\") return;\n    if (!node.children) return;\n\n    if (node.children.every(el => typeof el === \"string\")) {\n      // node.text = node.children.join(\"\");\n      // delete node.children;\n      node.children = [node.children.join(\"\")];\n    } else {\n      node.children.forEach((child) => {\n        TokenTree._collapse(child);\n      });\n    }\n  }\n}\n\n/**\n  Currently this is all private API, but this is the minimal API necessary\n  that an Emitter must implement to fully support the parser.\n\n  Minimal interface:\n\n  - addKeyword(text, kind)\n  - addText(text)\n  - addSublanguage(emitter, subLanguageName)\n  - finalize()\n  - openNode(kind)\n  - closeNode()\n  - closeAllNodes()\n  - toHTML()\n\n*/\n\n/**\n * @implements {Emitter}\n */\nclass TokenTreeEmitter extends TokenTree {\n  /**\n   * @param {*} options\n   */\n  constructor(options) {\n    super();\n    this.options = options;\n  }\n\n  /**\n   * @param {string} text\n   * @param {string} kind\n   */\n  addKeyword(text, kind) {\n    if (text === \"\") { return; }\n\n    this.openNode(kind);\n    this.addText(text);\n    this.closeNode();\n  }\n\n  /**\n   * @param {string} text\n   */\n  addText(text) {\n    if (text === \"\") { return; }\n\n    this.add(text);\n  }\n\n  /**\n   * @param {Emitter & {root: DataNode}} emitter\n   * @param {string} name\n   */\n  addSublanguage(emitter, name) {\n    /** @type DataNode */\n    const node = emitter.root;\n    node.kind = name;\n    node.sublanguage = true;\n    this.add(node);\n  }\n\n  toHTML() {\n    const renderer = new HTMLRenderer(this, this.options);\n    return renderer.value();\n  }\n\n  finalize() {\n    return true;\n  }\n}\n\n/**\n * @param {string} value\n * @returns {RegExp}\n * */\nfunction escape(value) {\n  return new RegExp(value.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'), 'm');\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction source(re) {\n  if (!re) return null;\n  if (typeof re === \"string\") return re;\n\n  return re.source;\n}\n\n/**\n * @param {...(RegExp | string) } args\n * @returns {string}\n */\nfunction concat(...args) {\n  const joined = args.map((x) => source(x)).join(\"\");\n  return joined;\n}\n\n/**\n * Any of the passed expresssions may match\n *\n * Creates a huge this | this | that | that match\n * @param {(RegExp | string)[] } args\n * @returns {string}\n */\nfunction either(...args) {\n  const joined = '(' + args.map((x) => source(x)).join(\"|\") + \")\";\n  return joined;\n}\n\n/**\n * @param {RegExp} re\n * @returns {number}\n */\nfunction countMatchGroups(re) {\n  return (new RegExp(re.toString() + '|')).exec('').length - 1;\n}\n\n/**\n * Does lexeme start with a regular expression match at the beginning\n * @param {RegExp} re\n * @param {string} lexeme\n */\nfunction startsWith(re, lexeme) {\n  const match = re && re.exec(lexeme);\n  return match && match.index === 0;\n}\n\n// BACKREF_RE matches an open parenthesis or backreference. To avoid\n// an incorrect parse, it additionally matches the following:\n// - [...] elements, where the meaning of parentheses and escapes change\n// - other escape sequences, so we do not misparse escape sequences as\n//   interesting elements\n// - non-matching or lookahead parentheses, which do not capture. These\n//   follow the '(' with a '?'.\nconst BACKREF_RE = /\\[(?:[^\\\\\\]]|\\\\.)*\\]|\\(\\??|\\\\([1-9][0-9]*)|\\\\./;\n\n// join logically computes regexps.join(separator), but fixes the\n// backreferences so they continue to match.\n// it also places each individual regular expression into it's own\n// match group, keeping track of the sequencing of those match groups\n// is currently an exercise for the caller. :-)\n/**\n * @param {(string | RegExp)[]} regexps\n * @param {string} separator\n * @returns {string}\n */\nfunction join(regexps, separator = \"|\") {\n  let numCaptures = 0;\n\n  return regexps.map((regex) => {\n    numCaptures += 1;\n    const offset = numCaptures;\n    let re = source(regex);\n    let out = '';\n\n    while (re.length > 0) {\n      const match = BACKREF_RE.exec(re);\n      if (!match) {\n        out += re;\n        break;\n      }\n      out += re.substring(0, match.index);\n      re = re.substring(match.index + match[0].length);\n      if (match[0][0] === '\\\\' && match[1]) {\n        // Adjust the backreference.\n        out += '\\\\' + String(Number(match[1]) + offset);\n      } else {\n        out += match[0];\n        if (match[0] === '(') {\n          numCaptures++;\n        }\n      }\n    }\n    return out;\n  }).map(re => `(${re})`).join(separator);\n}\n\n// Common regexps\nconst MATCH_NOTHING_RE = /\\b\\B/;\nconst IDENT_RE = '[a-zA-Z]\\\\w*';\nconst UNDERSCORE_IDENT_RE = '[a-zA-Z_]\\\\w*';\nconst NUMBER_RE = '\\\\b\\\\d+(\\\\.\\\\d+)?';\nconst C_NUMBER_RE = '(-?)(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)'; // 0x..., 0..., decimal, float\nconst BINARY_NUMBER_RE = '\\\\b(0b[01]+)'; // 0b...\nconst RE_STARTERS_RE = '!|!=|!==|%|%=|&|&&|&=|\\\\*|\\\\*=|\\\\+|\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\?|\\\\[|\\\\{|\\\\(|\\\\^|\\\\^=|\\\\||\\\\|=|\\\\|\\\\||~';\n\n/**\n* @param { Partial<Mode> & {binary?: string | RegExp} } opts\n*/\nconst SHEBANG = (opts = {}) => {\n  const beginShebang = /^#![ ]*\\//;\n  if (opts.binary) {\n    opts.begin = concat(\n      beginShebang,\n      /.*\\b/,\n      opts.binary,\n      /\\b.*/);\n  }\n  return inherit({\n    className: 'meta',\n    begin: beginShebang,\n    end: /$/,\n    relevance: 0,\n    /** @type {ModeCallback} */\n    \"on:begin\": (m, resp) => {\n      if (m.index !== 0) resp.ignoreMatch();\n    }\n  }, opts);\n};\n\n// Common modes\nconst BACKSLASH_ESCAPE = {\n  begin: '\\\\\\\\[\\\\s\\\\S]', relevance: 0\n};\nconst APOS_STRING_MODE = {\n  className: 'string',\n  begin: '\\'',\n  end: '\\'',\n  illegal: '\\\\n',\n  contains: [BACKSLASH_ESCAPE]\n};\nconst QUOTE_STRING_MODE = {\n  className: 'string',\n  begin: '\"',\n  end: '\"',\n  illegal: '\\\\n',\n  contains: [BACKSLASH_ESCAPE]\n};\nconst PHRASAL_WORDS_MODE = {\n  begin: /\\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\\b/\n};\n/**\n * Creates a comment mode\n *\n * @param {string | RegExp} begin\n * @param {string | RegExp} end\n * @param {Mode | {}} [modeOptions]\n * @returns {Partial<Mode>}\n */\nconst COMMENT = function(begin, end, modeOptions = {}) {\n  const mode = inherit(\n    {\n      className: 'comment',\n      begin,\n      end,\n      contains: []\n    },\n    modeOptions\n  );\n  mode.contains.push(PHRASAL_WORDS_MODE);\n  mode.contains.push({\n    className: 'doctag',\n    begin: '(?:TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):',\n    relevance: 0\n  });\n  return mode;\n};\nconst C_LINE_COMMENT_MODE = COMMENT('//', '$');\nconst C_BLOCK_COMMENT_MODE = COMMENT('/\\\\*', '\\\\*/');\nconst HASH_COMMENT_MODE = COMMENT('#', '$');\nconst NUMBER_MODE = {\n  className: 'number',\n  begin: NUMBER_RE,\n  relevance: 0\n};\nconst C_NUMBER_MODE = {\n  className: 'number',\n  begin: C_NUMBER_RE,\n  relevance: 0\n};\nconst BINARY_NUMBER_MODE = {\n  className: 'number',\n  begin: BINARY_NUMBER_RE,\n  relevance: 0\n};\nconst CSS_NUMBER_MODE = {\n  className: 'number',\n  begin: NUMBER_RE + '(' +\n    '%|em|ex|ch|rem' +\n    '|vw|vh|vmin|vmax' +\n    '|cm|mm|in|pt|pc|px' +\n    '|deg|grad|rad|turn' +\n    '|s|ms' +\n    '|Hz|kHz' +\n    '|dpi|dpcm|dppx' +\n    ')?',\n  relevance: 0\n};\nconst REGEXP_MODE = {\n  // this outer rule makes sure we actually have a WHOLE regex and not simply\n  // an expression such as:\n  //\n  //     3 / something\n  //\n  // (which will then blow up when regex's `illegal` sees the newline)\n  begin: /(?=\\/[^/\\n]*\\/)/,\n  contains: [{\n    className: 'regexp',\n    begin: /\\//,\n    end: /\\/[gimuy]*/,\n    illegal: /\\n/,\n    contains: [\n      BACKSLASH_ESCAPE,\n      {\n        begin: /\\[/,\n        end: /\\]/,\n        relevance: 0,\n        contains: [BACKSLASH_ESCAPE]\n      }\n    ]\n  }]\n};\nconst TITLE_MODE = {\n  className: 'title',\n  begin: IDENT_RE,\n  relevance: 0\n};\nconst UNDERSCORE_TITLE_MODE = {\n  className: 'title',\n  begin: UNDERSCORE_IDENT_RE,\n  relevance: 0\n};\nconst METHOD_GUARD = {\n  // excludes method names from keyword processing\n  begin: '\\\\.\\\\s*' + UNDERSCORE_IDENT_RE,\n  relevance: 0\n};\n\n/**\n * Adds end same as begin mechanics to a mode\n *\n * Your mode must include at least a single () match group as that first match\n * group is what is used for comparison\n * @param {Partial<Mode>} mode\n */\nconst END_SAME_AS_BEGIN = function(mode) {\n  return Object.assign(mode,\n    {\n      /** @type {ModeCallback} */\n      'on:begin': (m, resp) => { resp.data._beginMatch = m[1]; },\n      /** @type {ModeCallback} */\n      'on:end': (m, resp) => { if (resp.data._beginMatch !== m[1]) resp.ignoreMatch(); }\n    });\n};\n\nvar MODES = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    MATCH_NOTHING_RE: MATCH_NOTHING_RE,\n    IDENT_RE: IDENT_RE,\n    UNDERSCORE_IDENT_RE: UNDERSCORE_IDENT_RE,\n    NUMBER_RE: NUMBER_RE,\n    C_NUMBER_RE: C_NUMBER_RE,\n    BINARY_NUMBER_RE: BINARY_NUMBER_RE,\n    RE_STARTERS_RE: RE_STARTERS_RE,\n    SHEBANG: SHEBANG,\n    BACKSLASH_ESCAPE: BACKSLASH_ESCAPE,\n    APOS_STRING_MODE: APOS_STRING_MODE,\n    QUOTE_STRING_MODE: QUOTE_STRING_MODE,\n    PHRASAL_WORDS_MODE: PHRASAL_WORDS_MODE,\n    COMMENT: COMMENT,\n    C_LINE_COMMENT_MODE: C_LINE_COMMENT_MODE,\n    C_BLOCK_COMMENT_MODE: C_BLOCK_COMMENT_MODE,\n    HASH_COMMENT_MODE: HASH_COMMENT_MODE,\n    NUMBER_MODE: NUMBER_MODE,\n    C_NUMBER_MODE: C_NUMBER_MODE,\n    BINARY_NUMBER_MODE: BINARY_NUMBER_MODE,\n    CSS_NUMBER_MODE: CSS_NUMBER_MODE,\n    REGEXP_MODE: REGEXP_MODE,\n    TITLE_MODE: TITLE_MODE,\n    UNDERSCORE_TITLE_MODE: UNDERSCORE_TITLE_MODE,\n    METHOD_GUARD: METHOD_GUARD,\n    END_SAME_AS_BEGIN: END_SAME_AS_BEGIN\n});\n\n// Grammar extensions / plugins\n// See: https://github.com/highlightjs/highlight.js/issues/2833\n\n// Grammar extensions allow \"syntactic sugar\" to be added to the grammar modes\n// without requiring any underlying changes to the compiler internals.\n\n// `compileMatch` being the perfect small example of now allowing a grammar\n// author to write `match` when they desire to match a single expression rather\n// than being forced to use `begin`.  The extension then just moves `match` into\n// `begin` when it runs.  Ie, no features have been added, but we've just made\n// the experience of writing (and reading grammars) a little bit nicer.\n\n// ------\n\n// TODO: We need negative look-behind support to do this properly\n/**\n * Skip a match if it has a preceding dot\n *\n * This is used for `beginKeywords` to prevent matching expressions such as\n * `bob.keyword.do()`. The mode compiler automatically wires this up as a\n * special _internal_ 'on:begin' callback for modes with `beginKeywords`\n * @param {RegExpMatchArray} match\n * @param {CallbackResponse} response\n */\nfunction skipIfhasPrecedingDot(match, response) {\n  const before = match.input[match.index - 1];\n  if (before === \".\") {\n    response.ignoreMatch();\n  }\n}\n\n\n/**\n * `beginKeywords` syntactic sugar\n * @type {CompilerExt}\n */\nfunction beginKeywords(mode, parent) {\n  if (!parent) return;\n  if (!mode.beginKeywords) return;\n\n  // for languages with keywords that include non-word characters checking for\n  // a word boundary is not sufficient, so instead we check for a word boundary\n  // or whitespace - this does no harm in any case since our keyword engine\n  // doesn't allow spaces in keywords anyways and we still check for the boundary\n  // first\n  mode.begin = '\\\\b(' + mode.beginKeywords.split(' ').join('|') + ')(?!\\\\.)(?=\\\\b|\\\\s)';\n  mode.__beforeBegin = skipIfhasPrecedingDot;\n  mode.keywords = mode.keywords || mode.beginKeywords;\n  delete mode.beginKeywords;\n\n  // prevents double relevance, the keywords themselves provide\n  // relevance, the mode doesn't need to double it\n  // eslint-disable-next-line no-undefined\n  if (mode.relevance === undefined) mode.relevance = 0;\n}\n\n/**\n * Allow `illegal` to contain an array of illegal values\n * @type {CompilerExt}\n */\nfunction compileIllegal(mode, _parent) {\n  if (!Array.isArray(mode.illegal)) return;\n\n  mode.illegal = either(...mode.illegal);\n}\n\n/**\n * `match` to match a single expression for readability\n * @type {CompilerExt}\n */\nfunction compileMatch(mode, _parent) {\n  if (!mode.match) return;\n  if (mode.begin || mode.end) throw new Error(\"begin & end are not supported with match\");\n\n  mode.begin = mode.match;\n  delete mode.match;\n}\n\n/**\n * provides the default 1 relevance to all modes\n * @type {CompilerExt}\n */\nfunction compileRelevance(mode, _parent) {\n  // eslint-disable-next-line no-undefined\n  if (mode.relevance === undefined) mode.relevance = 1;\n}\n\n// keywords that should have no default relevance value\nconst COMMON_KEYWORDS = [\n  'of',\n  'and',\n  'for',\n  'in',\n  'not',\n  'or',\n  'if',\n  'then',\n  'parent', // common variable name\n  'list', // common variable name\n  'value' // common variable name\n];\n\nconst DEFAULT_KEYWORD_CLASSNAME = \"keyword\";\n\n/**\n * Given raw keywords from a language definition, compile them.\n *\n * @param {string | Record<string,string|string[]> | Array<string>} rawKeywords\n * @param {boolean} caseInsensitive\n */\nfunction compileKeywords(rawKeywords, caseInsensitive, className = DEFAULT_KEYWORD_CLASSNAME) {\n  /** @type KeywordDict */\n  const compiledKeywords = {};\n\n  // input can be a string of keywords, an array of keywords, or a object with\n  // named keys representing className (which can then point to a string or array)\n  if (typeof rawKeywords === 'string') {\n    compileList(className, rawKeywords.split(\" \"));\n  } else if (Array.isArray(rawKeywords)) {\n    compileList(className, rawKeywords);\n  } else {\n    Object.keys(rawKeywords).forEach(function(className) {\n      // collapse all our objects back into the parent object\n      Object.assign(\n        compiledKeywords,\n        compileKeywords(rawKeywords[className], caseInsensitive, className)\n      );\n    });\n  }\n  return compiledKeywords;\n\n  // ---\n\n  /**\n   * Compiles an individual list of keywords\n   *\n   * Ex: \"for if when while|5\"\n   *\n   * @param {string} className\n   * @param {Array<string>} keywordList\n   */\n  function compileList(className, keywordList) {\n    if (caseInsensitive) {\n      keywordList = keywordList.map(x => x.toLowerCase());\n    }\n    keywordList.forEach(function(keyword) {\n      const pair = keyword.split('|');\n      compiledKeywords[pair[0]] = [className, scoreForKeyword(pair[0], pair[1])];\n    });\n  }\n}\n\n/**\n * Returns the proper score for a given keyword\n *\n * Also takes into account comment keywords, which will be scored 0 UNLESS\n * another score has been manually assigned.\n * @param {string} keyword\n * @param {string} [providedScore]\n */\nfunction scoreForKeyword(keyword, providedScore) {\n  // manual scores always win over common keywords\n  // so you can force a score of 1 if you really insist\n  if (providedScore) {\n    return Number(providedScore);\n  }\n\n  return commonKeyword(keyword) ? 0 : 1;\n}\n\n/**\n * Determines if a given keyword is common or not\n *\n * @param {string} keyword */\nfunction commonKeyword(keyword) {\n  return COMMON_KEYWORDS.includes(keyword.toLowerCase());\n}\n\n// compilation\n\n/**\n * Compiles a language definition result\n *\n * Given the raw result of a language definition (Language), compiles this so\n * that it is ready for highlighting code.\n * @param {Language} language\n * @param {{plugins: HLJSPlugin[]}} opts\n * @returns {CompiledLanguage}\n */\nfunction compileLanguage(language, { plugins }) {\n  /**\n   * Builds a regex with the case sensativility of the current language\n   *\n   * @param {RegExp | string} value\n   * @param {boolean} [global]\n   */\n  function langRe(value, global) {\n    return new RegExp(\n      source(value),\n      'm' + (language.case_insensitive ? 'i' : '') + (global ? 'g' : '')\n    );\n  }\n\n  /**\n    Stores multiple regular expressions and allows you to quickly search for\n    them all in a string simultaneously - returning the first match.  It does\n    this by creating a huge (a|b|c) regex - each individual item wrapped with ()\n    and joined by `|` - using match groups to track position.  When a match is\n    found checking which position in the array has content allows us to figure\n    out which of the original regexes / match groups triggered the match.\n\n    The match object itself (the result of `Regex.exec`) is returned but also\n    enhanced by merging in any meta-data that was registered with the regex.\n    This is how we keep track of which mode matched, and what type of rule\n    (`illegal`, `begin`, end, etc).\n  */\n  class MultiRegex {\n    constructor() {\n      this.matchIndexes = {};\n      // @ts-ignore\n      this.regexes = [];\n      this.matchAt = 1;\n      this.position = 0;\n    }\n\n    // @ts-ignore\n    addRule(re, opts) {\n      opts.position = this.position++;\n      // @ts-ignore\n      this.matchIndexes[this.matchAt] = opts;\n      this.regexes.push([opts, re]);\n      this.matchAt += countMatchGroups(re) + 1;\n    }\n\n    compile() {\n      if (this.regexes.length === 0) {\n        // avoids the need to check length every time exec is called\n        // @ts-ignore\n        this.exec = () => null;\n      }\n      const terminators = this.regexes.map(el => el[1]);\n      this.matcherRe = langRe(join(terminators), true);\n      this.lastIndex = 0;\n    }\n\n    /** @param {string} s */\n    exec(s) {\n      this.matcherRe.lastIndex = this.lastIndex;\n      const match = this.matcherRe.exec(s);\n      if (!match) { return null; }\n\n      // eslint-disable-next-line no-undefined\n      const i = match.findIndex((el, i) => i > 0 && el !== undefined);\n      // @ts-ignore\n      const matchData = this.matchIndexes[i];\n      // trim off any earlier non-relevant match groups (ie, the other regex\n      // match groups that make up the multi-matcher)\n      match.splice(0, i);\n\n      return Object.assign(match, matchData);\n    }\n  }\n\n  /*\n    Created to solve the key deficiently with MultiRegex - there is no way to\n    test for multiple matches at a single location.  Why would we need to do\n    that?  In the future a more dynamic engine will allow certain matches to be\n    ignored.  An example: if we matched say the 3rd regex in a large group but\n    decided to ignore it - we'd need to started testing again at the 4th\n    regex... but MultiRegex itself gives us no real way to do that.\n\n    So what this class creates MultiRegexs on the fly for whatever search\n    position they are needed.\n\n    NOTE: These additional MultiRegex objects are created dynamically.  For most\n    grammars most of the time we will never actually need anything more than the\n    first MultiRegex - so this shouldn't have too much overhead.\n\n    Say this is our search group, and we match regex3, but wish to ignore it.\n\n      regex1 | regex2 | regex3 | regex4 | regex5    ' ie, startAt = 0\n\n    What we need is a new MultiRegex that only includes the remaining\n    possibilities:\n\n      regex4 | regex5                               ' ie, startAt = 3\n\n    This class wraps all that complexity up in a simple API... `startAt` decides\n    where in the array of expressions to start doing the matching. It\n    auto-increments, so if a match is found at position 2, then startAt will be\n    set to 3.  If the end is reached startAt will return to 0.\n\n    MOST of the time the parser will be setting startAt manually to 0.\n  */\n  class ResumableMultiRegex {\n    constructor() {\n      // @ts-ignore\n      this.rules = [];\n      // @ts-ignore\n      this.multiRegexes = [];\n      this.count = 0;\n\n      this.lastIndex = 0;\n      this.regexIndex = 0;\n    }\n\n    // @ts-ignore\n    getMatcher(index) {\n      if (this.multiRegexes[index]) return this.multiRegexes[index];\n\n      const matcher = new MultiRegex();\n      this.rules.slice(index).forEach(([re, opts]) => matcher.addRule(re, opts));\n      matcher.compile();\n      this.multiRegexes[index] = matcher;\n      return matcher;\n    }\n\n    resumingScanAtSamePosition() {\n      return this.regexIndex !== 0;\n    }\n\n    considerAll() {\n      this.regexIndex = 0;\n    }\n\n    // @ts-ignore\n    addRule(re, opts) {\n      this.rules.push([re, opts]);\n      if (opts.type === \"begin\") this.count++;\n    }\n\n    /** @param {string} s */\n    exec(s) {\n      const m = this.getMatcher(this.regexIndex);\n      m.lastIndex = this.lastIndex;\n      let result = m.exec(s);\n\n      // The following is because we have no easy way to say \"resume scanning at the\n      // existing position but also skip the current rule ONLY\". What happens is\n      // all prior rules are also skipped which can result in matching the wrong\n      // thing. Example of matching \"booger\":\n\n      // our matcher is [string, \"booger\", number]\n      //\n      // ....booger....\n\n      // if \"booger\" is ignored then we'd really need a regex to scan from the\n      // SAME position for only: [string, number] but ignoring \"booger\" (if it\n      // was the first match), a simple resume would scan ahead who knows how\n      // far looking only for \"number\", ignoring potential string matches (or\n      // future \"booger\" matches that might be valid.)\n\n      // So what we do: We execute two matchers, one resuming at the same\n      // position, but the second full matcher starting at the position after:\n\n      //     /--- resume first regex match here (for [number])\n      //     |/---- full match here for [string, \"booger\", number]\n      //     vv\n      // ....booger....\n\n      // Which ever results in a match first is then used. So this 3-4 step\n      // process essentially allows us to say \"match at this position, excluding\n      // a prior rule that was ignored\".\n      //\n      // 1. Match \"booger\" first, ignore. Also proves that [string] does non match.\n      // 2. Resume matching for [number]\n      // 3. Match at index + 1 for [string, \"booger\", number]\n      // 4. If #2 and #3 result in matches, which came first?\n      if (this.resumingScanAtSamePosition()) {\n        if (result && result.index === this.lastIndex) ; else { // use the second matcher result\n          const m2 = this.getMatcher(0);\n          m2.lastIndex = this.lastIndex + 1;\n          result = m2.exec(s);\n        }\n      }\n\n      if (result) {\n        this.regexIndex += result.position + 1;\n        if (this.regexIndex === this.count) {\n          // wrap-around to considering all matches again\n          this.considerAll();\n        }\n      }\n\n      return result;\n    }\n  }\n\n  /**\n   * Given a mode, builds a huge ResumableMultiRegex that can be used to walk\n   * the content and find matches.\n   *\n   * @param {CompiledMode} mode\n   * @returns {ResumableMultiRegex}\n   */\n  function buildModeRegex(mode) {\n    const mm = new ResumableMultiRegex();\n\n    mode.contains.forEach(term => mm.addRule(term.begin, { rule: term, type: \"begin\" }));\n\n    if (mode.terminatorEnd) {\n      mm.addRule(mode.terminatorEnd, { type: \"end\" });\n    }\n    if (mode.illegal) {\n      mm.addRule(mode.illegal, { type: \"illegal\" });\n    }\n\n    return mm;\n  }\n\n  /** skip vs abort vs ignore\n   *\n   * @skip   - The mode is still entered and exited normally (and contains rules apply),\n   *           but all content is held and added to the parent buffer rather than being\n   *           output when the mode ends.  Mostly used with `sublanguage` to build up\n   *           a single large buffer than can be parsed by sublanguage.\n   *\n   *             - The mode begin ands ends normally.\n   *             - Content matched is added to the parent mode buffer.\n   *             - The parser cursor is moved forward normally.\n   *\n   * @abort  - A hack placeholder until we have ignore.  Aborts the mode (as if it\n   *           never matched) but DOES NOT continue to match subsequent `contains`\n   *           modes.  Abort is bad/suboptimal because it can result in modes\n   *           farther down not getting applied because an earlier rule eats the\n   *           content but then aborts.\n   *\n   *             - The mode does not begin.\n   *             - Content matched by `begin` is added to the mode buffer.\n   *             - The parser cursor is moved forward accordingly.\n   *\n   * @ignore - Ignores the mode (as if it never matched) and continues to match any\n   *           subsequent `contains` modes.  Ignore isn't technically possible with\n   *           the current parser implementation.\n   *\n   *             - The mode does not begin.\n   *             - Content matched by `begin` is ignored.\n   *             - The parser cursor is not moved forward.\n   */\n\n  /**\n   * Compiles an individual mode\n   *\n   * This can raise an error if the mode contains certain detectable known logic\n   * issues.\n   * @param {Mode} mode\n   * @param {CompiledMode | null} [parent]\n   * @returns {CompiledMode | never}\n   */\n  function compileMode(mode, parent) {\n    const cmode = /** @type CompiledMode */ (mode);\n    if (mode.isCompiled) return cmode;\n\n    [\n      // do this early so compiler extensions generally don't have to worry about\n      // the distinction between match/begin\n      compileMatch\n    ].forEach(ext => ext(mode, parent));\n\n    language.compilerExtensions.forEach(ext => ext(mode, parent));\n\n    // __beforeBegin is considered private API, internal use only\n    mode.__beforeBegin = null;\n\n    [\n      beginKeywords,\n      // do this later so compiler extensions that come earlier have access to the\n      // raw array if they wanted to perhaps manipulate it, etc.\n      compileIllegal,\n      // default to 1 relevance if not specified\n      compileRelevance\n    ].forEach(ext => ext(mode, parent));\n\n    mode.isCompiled = true;\n\n    let keywordPattern = null;\n    if (typeof mode.keywords === \"object\") {\n      keywordPattern = mode.keywords.$pattern;\n      delete mode.keywords.$pattern;\n    }\n\n    if (mode.keywords) {\n      mode.keywords = compileKeywords(mode.keywords, language.case_insensitive);\n    }\n\n    // both are not allowed\n    if (mode.lexemes && keywordPattern) {\n      throw new Error(\"ERR: Prefer `keywords.$pattern` to `mode.lexemes`, BOTH are not allowed. (see mode reference) \");\n    }\n\n    // `mode.lexemes` was the old standard before we added and now recommend\n    // using `keywords.$pattern` to pass the keyword pattern\n    keywordPattern = keywordPattern || mode.lexemes || /\\w+/;\n    cmode.keywordPatternRe = langRe(keywordPattern, true);\n\n    if (parent) {\n      if (!mode.begin) mode.begin = /\\B|\\b/;\n      cmode.beginRe = langRe(mode.begin);\n      if (mode.endSameAsBegin) mode.end = mode.begin;\n      if (!mode.end && !mode.endsWithParent) mode.end = /\\B|\\b/;\n      if (mode.end) cmode.endRe = langRe(mode.end);\n      cmode.terminatorEnd = source(mode.end) || '';\n      if (mode.endsWithParent && parent.terminatorEnd) {\n        cmode.terminatorEnd += (mode.end ? '|' : '') + parent.terminatorEnd;\n      }\n    }\n    if (mode.illegal) cmode.illegalRe = langRe(/** @type {RegExp | string} */ (mode.illegal));\n    if (!mode.contains) mode.contains = [];\n\n    mode.contains = [].concat(...mode.contains.map(function(c) {\n      return expandOrCloneMode(c === 'self' ? mode : c);\n    }));\n    mode.contains.forEach(function(c) { compileMode(/** @type Mode */ (c), cmode); });\n\n    if (mode.starts) {\n      compileMode(mode.starts, parent);\n    }\n\n    cmode.matcher = buildModeRegex(cmode);\n    return cmode;\n  }\n\n  if (!language.compilerExtensions) language.compilerExtensions = [];\n\n  // self is not valid at the top-level\n  if (language.contains && language.contains.includes('self')) {\n    throw new Error(\"ERR: contains `self` is not supported at the top-level of a language.  See documentation.\");\n  }\n\n  // we need a null object, which inherit will guarantee\n  language.classNameAliases = inherit(language.classNameAliases || {});\n\n  return compileMode(/** @type Mode */ (language));\n}\n\n/**\n * Determines if a mode has a dependency on it's parent or not\n *\n * If a mode does have a parent dependency then often we need to clone it if\n * it's used in multiple places so that each copy points to the correct parent,\n * where-as modes without a parent can often safely be re-used at the bottom of\n * a mode chain.\n *\n * @param {Mode | null} mode\n * @returns {boolean} - is there a dependency on the parent?\n * */\nfunction dependencyOnParent(mode) {\n  if (!mode) return false;\n\n  return mode.endsWithParent || dependencyOnParent(mode.starts);\n}\n\n/**\n * Expands a mode or clones it if necessary\n *\n * This is necessary for modes with parental dependenceis (see notes on\n * `dependencyOnParent`) and for nodes that have `variants` - which must then be\n * exploded into their own individual modes at compile time.\n *\n * @param {Mode} mode\n * @returns {Mode | Mode[]}\n * */\nfunction expandOrCloneMode(mode) {\n  if (mode.variants && !mode.cachedVariants) {\n    mode.cachedVariants = mode.variants.map(function(variant) {\n      return inherit(mode, { variants: null }, variant);\n    });\n  }\n\n  // EXPAND\n  // if we have variants then essentially \"replace\" the mode with the variants\n  // this happens in compileMode, where this function is called from\n  if (mode.cachedVariants) {\n    return mode.cachedVariants;\n  }\n\n  // CLONE\n  // if we have dependencies on parents then we need a unique\n  // instance of ourselves, so we can be reused with many\n  // different parents without issue\n  if (dependencyOnParent(mode)) {\n    return inherit(mode, { starts: mode.starts ? inherit(mode.starts) : null });\n  }\n\n  if (Object.isFrozen(mode)) {\n    return inherit(mode);\n  }\n\n  // no special dependency issues, just return ourselves\n  return mode;\n}\n\nvar version = \"10.7.2\";\n\n// @ts-nocheck\n\nfunction hasValueOrEmptyAttribute(value) {\n  return Boolean(value || value === \"\");\n}\n\nfunction BuildVuePlugin(hljs) {\n  const Component = {\n    props: [\"language\", \"code\", \"autodetect\"],\n    data: function() {\n      return {\n        detectedLanguage: \"\",\n        unknownLanguage: false\n      };\n    },\n    computed: {\n      className() {\n        if (this.unknownLanguage) return \"\";\n\n        return \"hljs \" + this.detectedLanguage;\n      },\n      highlighted() {\n        // no idea what language to use, return raw code\n        if (!this.autoDetect && !hljs.getLanguage(this.language)) {\n          console.warn(`The language \"${this.language}\" you specified could not be found.`);\n          this.unknownLanguage = true;\n          return escapeHTML(this.code);\n        }\n\n        let result = {};\n        if (this.autoDetect) {\n          result = hljs.highlightAuto(this.code);\n          this.detectedLanguage = result.language;\n        } else {\n          result = hljs.highlight(this.language, this.code, this.ignoreIllegals);\n          this.detectedLanguage = this.language;\n        }\n        return result.value;\n      },\n      autoDetect() {\n        return !this.language || hasValueOrEmptyAttribute(this.autodetect);\n      },\n      ignoreIllegals() {\n        return true;\n      }\n    },\n    // this avoids needing to use a whole Vue compilation pipeline just\n    // to build Highlight.js\n    render(createElement) {\n      return createElement(\"pre\", {}, [\n        createElement(\"code\", {\n          class: this.className,\n          domProps: { innerHTML: this.highlighted }\n        })\n      ]);\n    }\n    // template: `<pre><code :class=\"className\" v-html=\"highlighted\"></code></pre>`\n  };\n\n  const VuePlugin = {\n    install(Vue) {\n      Vue.component('highlightjs', Component);\n    }\n  };\n\n  return { Component, VuePlugin };\n}\n\n/* plugin itself */\n\n/** @type {HLJSPlugin} */\nconst mergeHTMLPlugin = {\n  \"after:highlightElement\": ({ el, result, text }) => {\n    const originalStream = nodeStream(el);\n    if (!originalStream.length) return;\n\n    const resultNode = document.createElement('div');\n    resultNode.innerHTML = result.value;\n    result.value = mergeStreams(originalStream, nodeStream(resultNode), text);\n  }\n};\n\n/* Stream merging support functions */\n\n/**\n * @typedef Event\n * @property {'start'|'stop'} event\n * @property {number} offset\n * @property {Node} node\n */\n\n/**\n * @param {Node} node\n */\nfunction tag(node) {\n  return node.nodeName.toLowerCase();\n}\n\n/**\n * @param {Node} node\n */\nfunction nodeStream(node) {\n  /** @type Event[] */\n  const result = [];\n  (function _nodeStream(node, offset) {\n    for (let child = node.firstChild; child; child = child.nextSibling) {\n      if (child.nodeType === 3) {\n        offset += child.nodeValue.length;\n      } else if (child.nodeType === 1) {\n        result.push({\n          event: 'start',\n          offset: offset,\n          node: child\n        });\n        offset = _nodeStream(child, offset);\n        // Prevent void elements from having an end tag that would actually\n        // double them in the output. There are more void elements in HTML\n        // but we list only those realistically expected in code display.\n        if (!tag(child).match(/br|hr|img|input/)) {\n          result.push({\n            event: 'stop',\n            offset: offset,\n            node: child\n          });\n        }\n      }\n    }\n    return offset;\n  })(node, 0);\n  return result;\n}\n\n/**\n * @param {any} original - the original stream\n * @param {any} highlighted - stream of the highlighted source\n * @param {string} value - the original source itself\n */\nfunction mergeStreams(original, highlighted, value) {\n  let processed = 0;\n  let result = '';\n  const nodeStack = [];\n\n  function selectStream() {\n    if (!original.length || !highlighted.length) {\n      return original.length ? original : highlighted;\n    }\n    if (original[0].offset !== highlighted[0].offset) {\n      return (original[0].offset < highlighted[0].offset) ? original : highlighted;\n    }\n\n    /*\n    To avoid starting the stream just before it should stop the order is\n    ensured that original always starts first and closes last:\n\n    if (event1 == 'start' && event2 == 'start')\n      return original;\n    if (event1 == 'start' && event2 == 'stop')\n      return highlighted;\n    if (event1 == 'stop' && event2 == 'start')\n      return original;\n    if (event1 == 'stop' && event2 == 'stop')\n      return highlighted;\n\n    ... which is collapsed to:\n    */\n    return highlighted[0].event === 'start' ? original : highlighted;\n  }\n\n  /**\n   * @param {Node} node\n   */\n  function open(node) {\n    /** @param {Attr} attr */\n    function attributeString(attr) {\n      return ' ' + attr.nodeName + '=\"' + escapeHTML(attr.value) + '\"';\n    }\n    // @ts-ignore\n    result += '<' + tag(node) + [].map.call(node.attributes, attributeString).join('') + '>';\n  }\n\n  /**\n   * @param {Node} node\n   */\n  function close(node) {\n    result += '</' + tag(node) + '>';\n  }\n\n  /**\n   * @param {Event} event\n   */\n  function render(event) {\n    (event.event === 'start' ? open : close)(event.node);\n  }\n\n  while (original.length || highlighted.length) {\n    let stream = selectStream();\n    result += escapeHTML(value.substring(processed, stream[0].offset));\n    processed = stream[0].offset;\n    if (stream === original) {\n      /*\n      On any opening or closing tag of the original markup we first close\n      the entire highlighted node stack, then render the original tag along\n      with all the following original tags at the same offset and then\n      reopen all the tags on the highlighted stack.\n      */\n      nodeStack.reverse().forEach(close);\n      do {\n        render(stream.splice(0, 1)[0]);\n        stream = selectStream();\n      } while (stream === original && stream.length && stream[0].offset === processed);\n      nodeStack.reverse().forEach(open);\n    } else {\n      if (stream[0].event === 'start') {\n        nodeStack.push(stream[0].node);\n      } else {\n        nodeStack.pop();\n      }\n      render(stream.splice(0, 1)[0]);\n    }\n  }\n  return result + escapeHTML(value.substr(processed));\n}\n\n/*\n\nFor the reasoning behind this please see:\nhttps://github.com/highlightjs/highlight.js/issues/2880#issuecomment-747275419\n\n*/\n\n/**\n * @type {Record<string, boolean>}\n */\nconst seenDeprecations = {};\n\n/**\n * @param {string} message\n */\nconst error = (message) => {\n  console.error(message);\n};\n\n/**\n * @param {string} message\n * @param {any} args\n */\nconst warn = (message, ...args) => {\n  console.log(`WARN: ${message}`, ...args);\n};\n\n/**\n * @param {string} version\n * @param {string} message\n */\nconst deprecated = (version, message) => {\n  if (seenDeprecations[`${version}/${message}`]) return;\n\n  console.log(`Deprecated as of ${version}. ${message}`);\n  seenDeprecations[`${version}/${message}`] = true;\n};\n\n/*\nSyntax highlighting with language autodetection.\nhttps://highlightjs.org/\n*/\n\nconst escape$1 = escapeHTML;\nconst inherit$1 = inherit;\nconst NO_MATCH = Symbol(\"nomatch\");\n\n/**\n * @param {any} hljs - object that is extended (legacy)\n * @returns {HLJSApi}\n */\nconst HLJS = function(hljs) {\n  // Global internal variables used within the highlight.js library.\n  /** @type {Record<string, Language>} */\n  const languages = Object.create(null);\n  /** @type {Record<string, string>} */\n  const aliases = Object.create(null);\n  /** @type {HLJSPlugin[]} */\n  const plugins = [];\n\n  // safe/production mode - swallows more errors, tries to keep running\n  // even if a single syntax or parse hits a fatal error\n  let SAFE_MODE = true;\n  const fixMarkupRe = /(^(<[^>]+>|\\t|)+|\\n)/gm;\n  const LANGUAGE_NOT_FOUND = \"Could not find the language '{}', did you forget to load/include a language module?\";\n  /** @type {Language} */\n  const PLAINTEXT_LANGUAGE = { disableAutodetect: true, name: 'Plain text', contains: [] };\n\n  // Global options used when within external APIs. This is modified when\n  // calling the `hljs.configure` function.\n  /** @type HLJSOptions */\n  let options = {\n    noHighlightRe: /^(no-?highlight)$/i,\n    languageDetectRe: /\\blang(?:uage)?-([\\w-]+)\\b/i,\n    classPrefix: 'hljs-',\n    tabReplace: null,\n    useBR: false,\n    languages: null,\n    // beta configuration options, subject to change, welcome to discuss\n    // https://github.com/highlightjs/highlight.js/issues/1086\n    __emitter: TokenTreeEmitter\n  };\n\n  /* Utility functions */\n\n  /**\n   * Tests a language name to see if highlighting should be skipped\n   * @param {string} languageName\n   */\n  function shouldNotHighlight(languageName) {\n    return options.noHighlightRe.test(languageName);\n  }\n\n  /**\n   * @param {HighlightedHTMLElement} block - the HTML element to determine language for\n   */\n  function blockLanguage(block) {\n    let classes = block.className + ' ';\n\n    classes += block.parentNode ? block.parentNode.className : '';\n\n    // language-* takes precedence over non-prefixed class names.\n    const match = options.languageDetectRe.exec(classes);\n    if (match) {\n      const language = getLanguage(match[1]);\n      if (!language) {\n        warn(LANGUAGE_NOT_FOUND.replace(\"{}\", match[1]));\n        warn(\"Falling back to no-highlight mode for this block.\", block);\n      }\n      return language ? match[1] : 'no-highlight';\n    }\n\n    return classes\n      .split(/\\s+/)\n      .find((_class) => shouldNotHighlight(_class) || getLanguage(_class));\n  }\n\n  /**\n   * Core highlighting function.\n   *\n   * OLD API\n   * highlight(lang, code, ignoreIllegals, continuation)\n   *\n   * NEW API\n   * highlight(code, {lang, ignoreIllegals})\n   *\n   * @param {string} codeOrlanguageName - the language to use for highlighting\n   * @param {string | HighlightOptions} optionsOrCode - the code to highlight\n   * @param {boolean} [ignoreIllegals] - whether to ignore illegal matches, default is to bail\n   * @param {CompiledMode} [continuation] - current continuation mode, if any\n   *\n   * @returns {HighlightResult} Result - an object that represents the result\n   * @property {string} language - the language name\n   * @property {number} relevance - the relevance score\n   * @property {string} value - the highlighted HTML code\n   * @property {string} code - the original raw code\n   * @property {CompiledMode} top - top of the current mode stack\n   * @property {boolean} illegal - indicates whether any illegal matches were found\n  */\n  function highlight(codeOrlanguageName, optionsOrCode, ignoreIllegals, continuation) {\n    let code = \"\";\n    let languageName = \"\";\n    if (typeof optionsOrCode === \"object\") {\n      code = codeOrlanguageName;\n      ignoreIllegals = optionsOrCode.ignoreIllegals;\n      languageName = optionsOrCode.language;\n      // continuation not supported at all via the new API\n      // eslint-disable-next-line no-undefined\n      continuation = undefined;\n    } else {\n      // old API\n      deprecated(\"10.7.0\", \"highlight(lang, code, ...args) has been deprecated.\");\n      deprecated(\"10.7.0\", \"Please use highlight(code, options) instead.\\nhttps://github.com/highlightjs/highlight.js/issues/2277\");\n      languageName = codeOrlanguageName;\n      code = optionsOrCode;\n    }\n\n    /** @type {BeforeHighlightContext} */\n    const context = {\n      code,\n      language: languageName\n    };\n    // the plugin can change the desired language or the code to be highlighted\n    // just be changing the object it was passed\n    fire(\"before:highlight\", context);\n\n    // a before plugin can usurp the result completely by providing it's own\n    // in which case we don't even need to call highlight\n    const result = context.result\n      ? context.result\n      : _highlight(context.language, context.code, ignoreIllegals, continuation);\n\n    result.code = context.code;\n    // the plugin can change anything in result to suite it\n    fire(\"after:highlight\", result);\n\n    return result;\n  }\n\n  /**\n   * private highlight that's used internally and does not fire callbacks\n   *\n   * @param {string} languageName - the language to use for highlighting\n   * @param {string} codeToHighlight - the code to highlight\n   * @param {boolean?} [ignoreIllegals] - whether to ignore illegal matches, default is to bail\n   * @param {CompiledMode?} [continuation] - current continuation mode, if any\n   * @returns {HighlightResult} - result of the highlight operation\n  */\n  function _highlight(languageName, codeToHighlight, ignoreIllegals, continuation) {\n    /**\n     * Return keyword data if a match is a keyword\n     * @param {CompiledMode} mode - current mode\n     * @param {RegExpMatchArray} match - regexp match data\n     * @returns {KeywordData | false}\n     */\n    function keywordData(mode, match) {\n      const matchText = language.case_insensitive ? match[0].toLowerCase() : match[0];\n      return Object.prototype.hasOwnProperty.call(mode.keywords, matchText) && mode.keywords[matchText];\n    }\n\n    function processKeywords() {\n      if (!top.keywords) {\n        emitter.addText(modeBuffer);\n        return;\n      }\n\n      let lastIndex = 0;\n      top.keywordPatternRe.lastIndex = 0;\n      let match = top.keywordPatternRe.exec(modeBuffer);\n      let buf = \"\";\n\n      while (match) {\n        buf += modeBuffer.substring(lastIndex, match.index);\n        const data = keywordData(top, match);\n        if (data) {\n          const [kind, keywordRelevance] = data;\n          emitter.addText(buf);\n          buf = \"\";\n\n          relevance += keywordRelevance;\n          if (kind.startsWith(\"_\")) {\n            // _ implied for relevance only, do not highlight\n            // by applying a class name\n            buf += match[0];\n          } else {\n            const cssClass = language.classNameAliases[kind] || kind;\n            emitter.addKeyword(match[0], cssClass);\n          }\n        } else {\n          buf += match[0];\n        }\n        lastIndex = top.keywordPatternRe.lastIndex;\n        match = top.keywordPatternRe.exec(modeBuffer);\n      }\n      buf += modeBuffer.substr(lastIndex);\n      emitter.addText(buf);\n    }\n\n    function processSubLanguage() {\n      if (modeBuffer === \"\") return;\n      /** @type HighlightResult */\n      let result = null;\n\n      if (typeof top.subLanguage === 'string') {\n        if (!languages[top.subLanguage]) {\n          emitter.addText(modeBuffer);\n          return;\n        }\n        result = _highlight(top.subLanguage, modeBuffer, true, continuations[top.subLanguage]);\n        continuations[top.subLanguage] = /** @type {CompiledMode} */ (result.top);\n      } else {\n        result = highlightAuto(modeBuffer, top.subLanguage.length ? top.subLanguage : null);\n      }\n\n      // Counting embedded language score towards the host language may be disabled\n      // with zeroing the containing mode relevance. Use case in point is Markdown that\n      // allows XML everywhere and makes every XML snippet to have a much larger Markdown\n      // score.\n      if (top.relevance > 0) {\n        relevance += result.relevance;\n      }\n      emitter.addSublanguage(result.emitter, result.language);\n    }\n\n    function processBuffer() {\n      if (top.subLanguage != null) {\n        processSubLanguage();\n      } else {\n        processKeywords();\n      }\n      modeBuffer = '';\n    }\n\n    /**\n     * @param {Mode} mode - new mode to start\n     */\n    function startNewMode(mode) {\n      if (mode.className) {\n        emitter.openNode(language.classNameAliases[mode.className] || mode.className);\n      }\n      top = Object.create(mode, { parent: { value: top } });\n      return top;\n    }\n\n    /**\n     * @param {CompiledMode } mode - the mode to potentially end\n     * @param {RegExpMatchArray} match - the latest match\n     * @param {string} matchPlusRemainder - match plus remainder of content\n     * @returns {CompiledMode | void} - the next mode, or if void continue on in current mode\n     */\n    function endOfMode(mode, match, matchPlusRemainder) {\n      let matched = startsWith(mode.endRe, matchPlusRemainder);\n\n      if (matched) {\n        if (mode[\"on:end\"]) {\n          const resp = new Response(mode);\n          mode[\"on:end\"](match, resp);\n          if (resp.isMatchIgnored) matched = false;\n        }\n\n        if (matched) {\n          while (mode.endsParent && mode.parent) {\n            mode = mode.parent;\n          }\n          return mode;\n        }\n      }\n      // even if on:end fires an `ignore` it's still possible\n      // that we might trigger the end node because of a parent mode\n      if (mode.endsWithParent) {\n        return endOfMode(mode.parent, match, matchPlusRemainder);\n      }\n    }\n\n    /**\n     * Handle matching but then ignoring a sequence of text\n     *\n     * @param {string} lexeme - string containing full match text\n     */\n    function doIgnore(lexeme) {\n      if (top.matcher.regexIndex === 0) {\n        // no more regexs to potentially match here, so we move the cursor forward one\n        // space\n        modeBuffer += lexeme[0];\n        return 1;\n      } else {\n        // no need to move the cursor, we still have additional regexes to try and\n        // match at this very spot\n        resumeScanAtSamePosition = true;\n        return 0;\n      }\n    }\n\n    /**\n     * Handle the start of a new potential mode match\n     *\n     * @param {EnhancedMatch} match - the current match\n     * @returns {number} how far to advance the parse cursor\n     */\n    function doBeginMatch(match) {\n      const lexeme = match[0];\n      const newMode = match.rule;\n\n      const resp = new Response(newMode);\n      // first internal before callbacks, then the public ones\n      const beforeCallbacks = [newMode.__beforeBegin, newMode[\"on:begin\"]];\n      for (const cb of beforeCallbacks) {\n        if (!cb) continue;\n        cb(match, resp);\n        if (resp.isMatchIgnored) return doIgnore(lexeme);\n      }\n\n      if (newMode && newMode.endSameAsBegin) {\n        newMode.endRe = escape(lexeme);\n      }\n\n      if (newMode.skip) {\n        modeBuffer += lexeme;\n      } else {\n        if (newMode.excludeBegin) {\n          modeBuffer += lexeme;\n        }\n        processBuffer();\n        if (!newMode.returnBegin && !newMode.excludeBegin) {\n          modeBuffer = lexeme;\n        }\n      }\n      startNewMode(newMode);\n      // if (mode[\"after:begin\"]) {\n      //   let resp = new Response(mode);\n      //   mode[\"after:begin\"](match, resp);\n      // }\n      return newMode.returnBegin ? 0 : lexeme.length;\n    }\n\n    /**\n     * Handle the potential end of mode\n     *\n     * @param {RegExpMatchArray} match - the current match\n     */\n    function doEndMatch(match) {\n      const lexeme = match[0];\n      const matchPlusRemainder = codeToHighlight.substr(match.index);\n\n      const endMode = endOfMode(top, match, matchPlusRemainder);\n      if (!endMode) { return NO_MATCH; }\n\n      const origin = top;\n      if (origin.skip) {\n        modeBuffer += lexeme;\n      } else {\n        if (!(origin.returnEnd || origin.excludeEnd)) {\n          modeBuffer += lexeme;\n        }\n        processBuffer();\n        if (origin.excludeEnd) {\n          modeBuffer = lexeme;\n        }\n      }\n      do {\n        if (top.className) {\n          emitter.closeNode();\n        }\n        if (!top.skip && !top.subLanguage) {\n          relevance += top.relevance;\n        }\n        top = top.parent;\n      } while (top !== endMode.parent);\n      if (endMode.starts) {\n        if (endMode.endSameAsBegin) {\n          endMode.starts.endRe = endMode.endRe;\n        }\n        startNewMode(endMode.starts);\n      }\n      return origin.returnEnd ? 0 : lexeme.length;\n    }\n\n    function processContinuations() {\n      const list = [];\n      for (let current = top; current !== language; current = current.parent) {\n        if (current.className) {\n          list.unshift(current.className);\n        }\n      }\n      list.forEach(item => emitter.openNode(item));\n    }\n\n    /** @type {{type?: MatchType, index?: number, rule?: Mode}}} */\n    let lastMatch = {};\n\n    /**\n     *  Process an individual match\n     *\n     * @param {string} textBeforeMatch - text preceeding the match (since the last match)\n     * @param {EnhancedMatch} [match] - the match itself\n     */\n    function processLexeme(textBeforeMatch, match) {\n      const lexeme = match && match[0];\n\n      // add non-matched text to the current mode buffer\n      modeBuffer += textBeforeMatch;\n\n      if (lexeme == null) {\n        processBuffer();\n        return 0;\n      }\n\n      // we've found a 0 width match and we're stuck, so we need to advance\n      // this happens when we have badly behaved rules that have optional matchers to the degree that\n      // sometimes they can end up matching nothing at all\n      // Ref: https://github.com/highlightjs/highlight.js/issues/2140\n      if (lastMatch.type === \"begin\" && match.type === \"end\" && lastMatch.index === match.index && lexeme === \"\") {\n        // spit the \"skipped\" character that our regex choked on back into the output sequence\n        modeBuffer += codeToHighlight.slice(match.index, match.index + 1);\n        if (!SAFE_MODE) {\n          /** @type {AnnotatedError} */\n          const err = new Error('0 width match regex');\n          err.languageName = languageName;\n          err.badRule = lastMatch.rule;\n          throw err;\n        }\n        return 1;\n      }\n      lastMatch = match;\n\n      if (match.type === \"begin\") {\n        return doBeginMatch(match);\n      } else if (match.type === \"illegal\" && !ignoreIllegals) {\n        // illegal match, we do not continue processing\n        /** @type {AnnotatedError} */\n        const err = new Error('Illegal lexeme \"' + lexeme + '\" for mode \"' + (top.className || '<unnamed>') + '\"');\n        err.mode = top;\n        throw err;\n      } else if (match.type === \"end\") {\n        const processed = doEndMatch(match);\n        if (processed !== NO_MATCH) {\n          return processed;\n        }\n      }\n\n      // edge case for when illegal matches $ (end of line) which is technically\n      // a 0 width match but not a begin/end match so it's not caught by the\n      // first handler (when ignoreIllegals is true)\n      if (match.type === \"illegal\" && lexeme === \"\") {\n        // advance so we aren't stuck in an infinite loop\n        return 1;\n      }\n\n      // infinite loops are BAD, this is a last ditch catch all. if we have a\n      // decent number of iterations yet our index (cursor position in our\n      // parsing) still 3x behind our index then something is very wrong\n      // so we bail\n      if (iterations > 100000 && iterations > match.index * 3) {\n        const err = new Error('potential infinite loop, way more iterations than matches');\n        throw err;\n      }\n\n      /*\n      Why might be find ourselves here?  Only one occasion now.  An end match that was\n      triggered but could not be completed.  When might this happen?  When an `endSameasBegin`\n      rule sets the end rule to a specific match.  Since the overall mode termination rule that's\n      being used to scan the text isn't recompiled that means that any match that LOOKS like\n      the end (but is not, because it is not an exact match to the beginning) will\n      end up here.  A definite end match, but when `doEndMatch` tries to \"reapply\"\n      the end rule and fails to match, we wind up here, and just silently ignore the end.\n\n      This causes no real harm other than stopping a few times too many.\n      */\n\n      modeBuffer += lexeme;\n      return lexeme.length;\n    }\n\n    const language = getLanguage(languageName);\n    if (!language) {\n      error(LANGUAGE_NOT_FOUND.replace(\"{}\", languageName));\n      throw new Error('Unknown language: \"' + languageName + '\"');\n    }\n\n    const md = compileLanguage(language, { plugins });\n    let result = '';\n    /** @type {CompiledMode} */\n    let top = continuation || md;\n    /** @type Record<string,CompiledMode> */\n    const continuations = {}; // keep continuations for sub-languages\n    const emitter = new options.__emitter(options);\n    processContinuations();\n    let modeBuffer = '';\n    let relevance = 0;\n    let index = 0;\n    let iterations = 0;\n    let resumeScanAtSamePosition = false;\n\n    try {\n      top.matcher.considerAll();\n\n      for (;;) {\n        iterations++;\n        if (resumeScanAtSamePosition) {\n          // only regexes not matched previously will now be\n          // considered for a potential match\n          resumeScanAtSamePosition = false;\n        } else {\n          top.matcher.considerAll();\n        }\n        top.matcher.lastIndex = index;\n\n        const match = top.matcher.exec(codeToHighlight);\n        // console.log(\"match\", match[0], match.rule && match.rule.begin)\n\n        if (!match) break;\n\n        const beforeMatch = codeToHighlight.substring(index, match.index);\n        const processedCount = processLexeme(beforeMatch, match);\n        index = match.index + processedCount;\n      }\n      processLexeme(codeToHighlight.substr(index));\n      emitter.closeAllNodes();\n      emitter.finalize();\n      result = emitter.toHTML();\n\n      return {\n        // avoid possible breakage with v10 clients expecting\n        // this to always be an integer\n        relevance: Math.floor(relevance),\n        value: result,\n        language: languageName,\n        illegal: false,\n        emitter: emitter,\n        top: top\n      };\n    } catch (err) {\n      if (err.message && err.message.includes('Illegal')) {\n        return {\n          illegal: true,\n          illegalBy: {\n            msg: err.message,\n            context: codeToHighlight.slice(index - 100, index + 100),\n            mode: err.mode\n          },\n          sofar: result,\n          relevance: 0,\n          value: escape$1(codeToHighlight),\n          emitter: emitter\n        };\n      } else if (SAFE_MODE) {\n        return {\n          illegal: false,\n          relevance: 0,\n          value: escape$1(codeToHighlight),\n          emitter: emitter,\n          language: languageName,\n          top: top,\n          errorRaised: err\n        };\n      } else {\n        throw err;\n      }\n    }\n  }\n\n  /**\n   * returns a valid highlight result, without actually doing any actual work,\n   * auto highlight starts with this and it's possible for small snippets that\n   * auto-detection may not find a better match\n   * @param {string} code\n   * @returns {HighlightResult}\n   */\n  function justTextHighlightResult(code) {\n    const result = {\n      relevance: 0,\n      emitter: new options.__emitter(options),\n      value: escape$1(code),\n      illegal: false,\n      top: PLAINTEXT_LANGUAGE\n    };\n    result.emitter.addText(code);\n    return result;\n  }\n\n  /**\n  Highlighting with language detection. Accepts a string with the code to\n  highlight. Returns an object with the following properties:\n\n  - language (detected language)\n  - relevance (int)\n  - value (an HTML string with highlighting markup)\n  - second_best (object with the same structure for second-best heuristically\n    detected language, may be absent)\n\n    @param {string} code\n    @param {Array<string>} [languageSubset]\n    @returns {AutoHighlightResult}\n  */\n  function highlightAuto(code, languageSubset) {\n    languageSubset = languageSubset || options.languages || Object.keys(languages);\n    const plaintext = justTextHighlightResult(code);\n\n    const results = languageSubset.filter(getLanguage).filter(autoDetection).map(name =>\n      _highlight(name, code, false)\n    );\n    results.unshift(plaintext); // plaintext is always an option\n\n    const sorted = results.sort((a, b) => {\n      // sort base on relevance\n      if (a.relevance !== b.relevance) return b.relevance - a.relevance;\n\n      // always award the tie to the base language\n      // ie if C++ and Arduino are tied, it's more likely to be C++\n      if (a.language && b.language) {\n        if (getLanguage(a.language).supersetOf === b.language) {\n          return 1;\n        } else if (getLanguage(b.language).supersetOf === a.language) {\n          return -1;\n        }\n      }\n\n      // otherwise say they are equal, which has the effect of sorting on\n      // relevance while preserving the original ordering - which is how ties\n      // have historically been settled, ie the language that comes first always\n      // wins in the case of a tie\n      return 0;\n    });\n\n    const [best, secondBest] = sorted;\n\n    /** @type {AutoHighlightResult} */\n    const result = best;\n    result.second_best = secondBest;\n\n    return result;\n  }\n\n  /**\n  Post-processing of the highlighted markup:\n\n  - replace TABs with something more useful\n  - replace real line-breaks with '<br>' for non-pre containers\n\n    @param {string} html\n    @returns {string}\n  */\n  function fixMarkup(html) {\n    if (!(options.tabReplace || options.useBR)) {\n      return html;\n    }\n\n    return html.replace(fixMarkupRe, match => {\n      if (match === '\\n') {\n        return options.useBR ? '<br>' : match;\n      } else if (options.tabReplace) {\n        return match.replace(/\\t/g, options.tabReplace);\n      }\n      return match;\n    });\n  }\n\n  /**\n   * Builds new class name for block given the language name\n   *\n   * @param {HTMLElement} element\n   * @param {string} [currentLang]\n   * @param {string} [resultLang]\n   */\n  function updateClassName(element, currentLang, resultLang) {\n    const language = currentLang ? aliases[currentLang] : resultLang;\n\n    element.classList.add(\"hljs\");\n    if (language) element.classList.add(language);\n  }\n\n  /** @type {HLJSPlugin} */\n  const brPlugin = {\n    \"before:highlightElement\": ({ el }) => {\n      if (options.useBR) {\n        el.innerHTML = el.innerHTML.replace(/\\n/g, '').replace(/<br[ /]*>/g, '\\n');\n      }\n    },\n    \"after:highlightElement\": ({ result }) => {\n      if (options.useBR) {\n        result.value = result.value.replace(/\\n/g, \"<br>\");\n      }\n    }\n  };\n\n  const TAB_REPLACE_RE = /^(<[^>]+>|\\t)+/gm;\n  /** @type {HLJSPlugin} */\n  const tabReplacePlugin = {\n    \"after:highlightElement\": ({ result }) => {\n      if (options.tabReplace) {\n        result.value = result.value.replace(TAB_REPLACE_RE, (m) =>\n          m.replace(/\\t/g, options.tabReplace)\n        );\n      }\n    }\n  };\n\n  /**\n   * Applies highlighting to a DOM node containing code. Accepts a DOM node and\n   * two optional parameters for fixMarkup.\n   *\n   * @param {HighlightedHTMLElement} element - the HTML element to highlight\n  */\n  function highlightElement(element) {\n    /** @type HTMLElement */\n    let node = null;\n    const language = blockLanguage(element);\n\n    if (shouldNotHighlight(language)) return;\n\n    // support for v10 API\n    fire(\"before:highlightElement\",\n      { el: element, language: language });\n\n    node = element;\n    const text = node.textContent;\n    const result = language ? highlight(text, { language, ignoreIllegals: true }) : highlightAuto(text);\n\n    // support for v10 API\n    fire(\"after:highlightElement\", { el: element, result, text });\n\n    element.innerHTML = result.value;\n    updateClassName(element, language, result.language);\n    element.result = {\n      language: result.language,\n      // TODO: remove with version 11.0\n      re: result.relevance,\n      relavance: result.relevance\n    };\n    if (result.second_best) {\n      element.second_best = {\n        language: result.second_best.language,\n        // TODO: remove with version 11.0\n        re: result.second_best.relevance,\n        relavance: result.second_best.relevance\n      };\n    }\n  }\n\n  /**\n   * Updates highlight.js global options with the passed options\n   *\n   * @param {Partial<HLJSOptions>} userOptions\n   */\n  function configure(userOptions) {\n    if (userOptions.useBR) {\n      deprecated(\"10.3.0\", \"'useBR' will be removed entirely in v11.0\");\n      deprecated(\"10.3.0\", \"Please see https://github.com/highlightjs/highlight.js/issues/2559\");\n    }\n    options = inherit$1(options, userOptions);\n  }\n\n  /**\n   * Highlights to all <pre><code> blocks on a page\n   *\n   * @type {Function & {called?: boolean}}\n   */\n  // TODO: remove v12, deprecated\n  const initHighlighting = () => {\n    if (initHighlighting.called) return;\n    initHighlighting.called = true;\n\n    deprecated(\"10.6.0\", \"initHighlighting() is deprecated.  Use highlightAll() instead.\");\n\n    const blocks = document.querySelectorAll('pre code');\n    blocks.forEach(highlightElement);\n  };\n\n  // Higlights all when DOMContentLoaded fires\n  // TODO: remove v12, deprecated\n  function initHighlightingOnLoad() {\n    deprecated(\"10.6.0\", \"initHighlightingOnLoad() is deprecated.  Use highlightAll() instead.\");\n    wantsHighlight = true;\n  }\n\n  let wantsHighlight = false;\n\n  /**\n   * auto-highlights all pre>code elements on the page\n   */\n  function highlightAll() {\n    // if we are called too early in the loading process\n    if (document.readyState === \"loading\") {\n      wantsHighlight = true;\n      return;\n    }\n\n    const blocks = document.querySelectorAll('pre code');\n    blocks.forEach(highlightElement);\n  }\n\n  function boot() {\n    // if a highlight was requested before DOM was loaded, do now\n    if (wantsHighlight) highlightAll();\n  }\n\n  // make sure we are in the browser environment\n  if (typeof window !== 'undefined' && window.addEventListener) {\n    window.addEventListener('DOMContentLoaded', boot, false);\n  }\n\n  /**\n   * Register a language grammar module\n   *\n   * @param {string} languageName\n   * @param {LanguageFn} languageDefinition\n   */\n  function registerLanguage(languageName, languageDefinition) {\n    let lang = null;\n    try {\n      lang = languageDefinition(hljs);\n    } catch (error$1) {\n      error(\"Language definition for '{}' could not be registered.\".replace(\"{}\", languageName));\n      // hard or soft error\n      if (!SAFE_MODE) { throw error$1; } else { error(error$1); }\n      // languages that have serious errors are replaced with essentially a\n      // \"plaintext\" stand-in so that the code blocks will still get normal\n      // css classes applied to them - and one bad language won't break the\n      // entire highlighter\n      lang = PLAINTEXT_LANGUAGE;\n    }\n    // give it a temporary name if it doesn't have one in the meta-data\n    if (!lang.name) lang.name = languageName;\n    languages[languageName] = lang;\n    lang.rawDefinition = languageDefinition.bind(null, hljs);\n\n    if (lang.aliases) {\n      registerAliases(lang.aliases, { languageName });\n    }\n  }\n\n  /**\n   * Remove a language grammar module\n   *\n   * @param {string} languageName\n   */\n  function unregisterLanguage(languageName) {\n    delete languages[languageName];\n    for (const alias of Object.keys(aliases)) {\n      if (aliases[alias] === languageName) {\n        delete aliases[alias];\n      }\n    }\n  }\n\n  /**\n   * @returns {string[]} List of language internal names\n   */\n  function listLanguages() {\n    return Object.keys(languages);\n  }\n\n  /**\n    intended usage: When one language truly requires another\n\n    Unlike `getLanguage`, this will throw when the requested language\n    is not available.\n\n    @param {string} name - name of the language to fetch/require\n    @returns {Language | never}\n  */\n  function requireLanguage(name) {\n    deprecated(\"10.4.0\", \"requireLanguage will be removed entirely in v11.\");\n    deprecated(\"10.4.0\", \"Please see https://github.com/highlightjs/highlight.js/pull/2844\");\n\n    const lang = getLanguage(name);\n    if (lang) { return lang; }\n\n    const err = new Error('The \\'{}\\' language is required, but not loaded.'.replace('{}', name));\n    throw err;\n  }\n\n  /**\n   * @param {string} name - name of the language to retrieve\n   * @returns {Language | undefined}\n   */\n  function getLanguage(name) {\n    name = (name || '').toLowerCase();\n    return languages[name] || languages[aliases[name]];\n  }\n\n  /**\n   *\n   * @param {string|string[]} aliasList - single alias or list of aliases\n   * @param {{languageName: string}} opts\n   */\n  function registerAliases(aliasList, { languageName }) {\n    if (typeof aliasList === 'string') {\n      aliasList = [aliasList];\n    }\n    aliasList.forEach(alias => { aliases[alias.toLowerCase()] = languageName; });\n  }\n\n  /**\n   * Determines if a given language has auto-detection enabled\n   * @param {string} name - name of the language\n   */\n  function autoDetection(name) {\n    const lang = getLanguage(name);\n    return lang && !lang.disableAutodetect;\n  }\n\n  /**\n   * Upgrades the old highlightBlock plugins to the new\n   * highlightElement API\n   * @param {HLJSPlugin} plugin\n   */\n  function upgradePluginAPI(plugin) {\n    // TODO: remove with v12\n    if (plugin[\"before:highlightBlock\"] && !plugin[\"before:highlightElement\"]) {\n      plugin[\"before:highlightElement\"] = (data) => {\n        plugin[\"before:highlightBlock\"](\n          Object.assign({ block: data.el }, data)\n        );\n      };\n    }\n    if (plugin[\"after:highlightBlock\"] && !plugin[\"after:highlightElement\"]) {\n      plugin[\"after:highlightElement\"] = (data) => {\n        plugin[\"after:highlightBlock\"](\n          Object.assign({ block: data.el }, data)\n        );\n      };\n    }\n  }\n\n  /**\n   * @param {HLJSPlugin} plugin\n   */\n  function addPlugin(plugin) {\n    upgradePluginAPI(plugin);\n    plugins.push(plugin);\n  }\n\n  /**\n   *\n   * @param {PluginEvent} event\n   * @param {any} args\n   */\n  function fire(event, args) {\n    const cb = event;\n    plugins.forEach(function(plugin) {\n      if (plugin[cb]) {\n        plugin[cb](args);\n      }\n    });\n  }\n\n  /**\n  Note: fixMarkup is deprecated and will be removed entirely in v11\n\n  @param {string} arg\n  @returns {string}\n  */\n  function deprecateFixMarkup(arg) {\n    deprecated(\"10.2.0\", \"fixMarkup will be removed entirely in v11.0\");\n    deprecated(\"10.2.0\", \"Please see https://github.com/highlightjs/highlight.js/issues/2534\");\n\n    return fixMarkup(arg);\n  }\n\n  /**\n   *\n   * @param {HighlightedHTMLElement} el\n   */\n  function deprecateHighlightBlock(el) {\n    deprecated(\"10.7.0\", \"highlightBlock will be removed entirely in v12.0\");\n    deprecated(\"10.7.0\", \"Please use highlightElement now.\");\n\n    return highlightElement(el);\n  }\n\n  /* Interface definition */\n  Object.assign(hljs, {\n    highlight,\n    highlightAuto,\n    highlightAll,\n    fixMarkup: deprecateFixMarkup,\n    highlightElement,\n    // TODO: Remove with v12 API\n    highlightBlock: deprecateHighlightBlock,\n    configure,\n    initHighlighting,\n    initHighlightingOnLoad,\n    registerLanguage,\n    unregisterLanguage,\n    listLanguages,\n    getLanguage,\n    registerAliases,\n    requireLanguage,\n    autoDetection,\n    inherit: inherit$1,\n    addPlugin,\n    // plugins for frameworks\n    vuePlugin: BuildVuePlugin(hljs).VuePlugin\n  });\n\n  hljs.debugMode = function() { SAFE_MODE = false; };\n  hljs.safeMode = function() { SAFE_MODE = true; };\n  hljs.versionString = version;\n\n  for (const key in MODES) {\n    // @ts-ignore\n    if (typeof MODES[key] === \"object\") {\n      // @ts-ignore\n      deepFreezeEs6(MODES[key]);\n    }\n  }\n\n  // merge all the modes/regexs into our main object\n  Object.assign(hljs, MODES);\n\n  // built-in plugins, likely to be moved out of core in the future\n  hljs.addPlugin(brPlugin); // slated to be removed in v11\n  hljs.addPlugin(mergeHTMLPlugin);\n  hljs.addPlugin(tabReplacePlugin);\n  return hljs;\n};\n\n// export an \"instance\" of the highlighter\nvar highlight = HLJS({});\n\nmodule.exports = highlight;\n","const IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*';\nconst KEYWORDS = [\n  \"as\", // for exports\n  \"in\",\n  \"of\",\n  \"if\",\n  \"for\",\n  \"while\",\n  \"finally\",\n  \"var\",\n  \"new\",\n  \"function\",\n  \"do\",\n  \"return\",\n  \"void\",\n  \"else\",\n  \"break\",\n  \"catch\",\n  \"instanceof\",\n  \"with\",\n  \"throw\",\n  \"case\",\n  \"default\",\n  \"try\",\n  \"switch\",\n  \"continue\",\n  \"typeof\",\n  \"delete\",\n  \"let\",\n  \"yield\",\n  \"const\",\n  \"class\",\n  // JS handles these with a special rule\n  // \"get\",\n  // \"set\",\n  \"debugger\",\n  \"async\",\n  \"await\",\n  \"static\",\n  \"import\",\n  \"from\",\n  \"export\",\n  \"extends\"\n];\nconst LITERALS = [\n  \"true\",\n  \"false\",\n  \"null\",\n  \"undefined\",\n  \"NaN\",\n  \"Infinity\"\n];\n\nconst TYPES = [\n  \"Intl\",\n  \"DataView\",\n  \"Number\",\n  \"Math\",\n  \"Date\",\n  \"String\",\n  \"RegExp\",\n  \"Object\",\n  \"Function\",\n  \"Boolean\",\n  \"Error\",\n  \"Symbol\",\n  \"Set\",\n  \"Map\",\n  \"WeakSet\",\n  \"WeakMap\",\n  \"Proxy\",\n  \"Reflect\",\n  \"JSON\",\n  \"Promise\",\n  \"Float64Array\",\n  \"Int16Array\",\n  \"Int32Array\",\n  \"Int8Array\",\n  \"Uint16Array\",\n  \"Uint32Array\",\n  \"Float32Array\",\n  \"Array\",\n  \"Uint8Array\",\n  \"Uint8ClampedArray\",\n  \"ArrayBuffer\",\n  \"BigInt64Array\",\n  \"BigUint64Array\",\n  \"BigInt\"\n];\n\nconst ERROR_TYPES = [\n  \"EvalError\",\n  \"InternalError\",\n  \"RangeError\",\n  \"ReferenceError\",\n  \"SyntaxError\",\n  \"TypeError\",\n  \"URIError\"\n];\n\nconst BUILT_IN_GLOBALS = [\n  \"setInterval\",\n  \"setTimeout\",\n  \"clearInterval\",\n  \"clearTimeout\",\n\n  \"require\",\n  \"exports\",\n\n  \"eval\",\n  \"isFinite\",\n  \"isNaN\",\n  \"parseFloat\",\n  \"parseInt\",\n  \"decodeURI\",\n  \"decodeURIComponent\",\n  \"encodeURI\",\n  \"encodeURIComponent\",\n  \"escape\",\n  \"unescape\"\n];\n\nconst BUILT_IN_VARIABLES = [\n  \"arguments\",\n  \"this\",\n  \"super\",\n  \"console\",\n  \"window\",\n  \"document\",\n  \"localStorage\",\n  \"module\",\n  \"global\" // Node.js\n];\n\nconst BUILT_INS = [].concat(\n  BUILT_IN_GLOBALS,\n  BUILT_IN_VARIABLES,\n  TYPES,\n  ERROR_TYPES\n);\n\n/**\n * @param {string} value\n * @returns {RegExp}\n * */\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction source(re) {\n  if (!re) return null;\n  if (typeof re === \"string\") return re;\n\n  return re.source;\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction lookahead(re) {\n  return concat('(?=', re, ')');\n}\n\n/**\n * @param {...(RegExp | string) } args\n * @returns {string}\n */\nfunction concat(...args) {\n  const joined = args.map((x) => source(x)).join(\"\");\n  return joined;\n}\n\n/*\nLanguage: JavaScript\nDescription: JavaScript (JS) is a lightweight, interpreted, or just-in-time compiled programming language with first-class functions.\nCategory: common, scripting\nWebsite: https://developer.mozilla.org/en-US/docs/Web/JavaScript\n*/\n\n/** @type LanguageFn */\nfunction javascript(hljs) {\n  /**\n   * Takes a string like \"<Booger\" and checks to see\n   * if we can find a matching \"</Booger\" later in the\n   * content.\n   * @param {RegExpMatchArray} match\n   * @param {{after:number}} param1\n   */\n  const hasClosingTag = (match, { after }) => {\n    const tag = \"</\" + match[0].slice(1);\n    const pos = match.input.indexOf(tag, after);\n    return pos !== -1;\n  };\n\n  const IDENT_RE$1 = IDENT_RE;\n  const FRAGMENT = {\n    begin: '<>',\n    end: '</>'\n  };\n  const XML_TAG = {\n    begin: /<[A-Za-z0-9\\\\._:-]+/,\n    end: /\\/[A-Za-z0-9\\\\._:-]+>|\\/>/,\n    /**\n     * @param {RegExpMatchArray} match\n     * @param {CallbackResponse} response\n     */\n    isTrulyOpeningTag: (match, response) => {\n      const afterMatchIndex = match[0].length + match.index;\n      const nextChar = match.input[afterMatchIndex];\n      // nested type?\n      // HTML should not include another raw `<` inside a tag\n      // But a type might: `<Array<Array<number>>`, etc.\n      if (nextChar === \"<\") {\n        response.ignoreMatch();\n        return;\n      }\n      // <something>\n      // This is now either a tag or a type.\n      if (nextChar === \">\") {\n        // if we cannot find a matching closing tag, then we\n        // will ignore it\n        if (!hasClosingTag(match, { after: afterMatchIndex })) {\n          response.ignoreMatch();\n        }\n      }\n    }\n  };\n  const KEYWORDS$1 = {\n    $pattern: IDENT_RE,\n    keyword: KEYWORDS,\n    literal: LITERALS,\n    built_in: BUILT_INS\n  };\n\n  // https://tc39.es/ecma262/#sec-literals-numeric-literals\n  const decimalDigits = '[0-9](_?[0-9])*';\n  const frac = `\\\\.(${decimalDigits})`;\n  // DecimalIntegerLiteral, including Annex B NonOctalDecimalIntegerLiteral\n  // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n  const decimalInteger = `0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*`;\n  const NUMBER = {\n    className: 'number',\n    variants: [\n      // DecimalLiteral\n      { begin: `(\\\\b(${decimalInteger})((${frac})|\\\\.)?|(${frac}))` +\n        `[eE][+-]?(${decimalDigits})\\\\b` },\n      { begin: `\\\\b(${decimalInteger})\\\\b((${frac})\\\\b|\\\\.)?|(${frac})\\\\b` },\n\n      // DecimalBigIntegerLiteral\n      { begin: `\\\\b(0|[1-9](_?[0-9])*)n\\\\b` },\n\n      // NonDecimalIntegerLiteral\n      { begin: \"\\\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\\\b\" },\n      { begin: \"\\\\b0[bB][0-1](_?[0-1])*n?\\\\b\" },\n      { begin: \"\\\\b0[oO][0-7](_?[0-7])*n?\\\\b\" },\n\n      // LegacyOctalIntegerLiteral (does not include underscore separators)\n      // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n      { begin: \"\\\\b0[0-7]+n?\\\\b\" },\n    ],\n    relevance: 0\n  };\n\n  const SUBST = {\n    className: 'subst',\n    begin: '\\\\$\\\\{',\n    end: '\\\\}',\n    keywords: KEYWORDS$1,\n    contains: [] // defined later\n  };\n  const HTML_TEMPLATE = {\n    begin: 'html`',\n    end: '',\n    starts: {\n      end: '`',\n      returnEnd: false,\n      contains: [\n        hljs.BACKSLASH_ESCAPE,\n        SUBST\n      ],\n      subLanguage: 'xml'\n    }\n  };\n  const CSS_TEMPLATE = {\n    begin: 'css`',\n    end: '',\n    starts: {\n      end: '`',\n      returnEnd: false,\n      contains: [\n        hljs.BACKSLASH_ESCAPE,\n        SUBST\n      ],\n      subLanguage: 'css'\n    }\n  };\n  const TEMPLATE_STRING = {\n    className: 'string',\n    begin: '`',\n    end: '`',\n    contains: [\n      hljs.BACKSLASH_ESCAPE,\n      SUBST\n    ]\n  };\n  const JSDOC_COMMENT = hljs.COMMENT(\n    /\\/\\*\\*(?!\\/)/,\n    '\\\\*/',\n    {\n      relevance: 0,\n      contains: [\n        {\n          className: 'doctag',\n          begin: '@[A-Za-z]+',\n          contains: [\n            {\n              className: 'type',\n              begin: '\\\\{',\n              end: '\\\\}',\n              relevance: 0\n            },\n            {\n              className: 'variable',\n              begin: IDENT_RE$1 + '(?=\\\\s*(-)|$)',\n              endsParent: true,\n              relevance: 0\n            },\n            // eat spaces (not newlines) so we can find\n            // types or variables\n            {\n              begin: /(?=[^\\n])\\s/,\n              relevance: 0\n            }\n          ]\n        }\n      ]\n    }\n  );\n  const COMMENT = {\n    className: \"comment\",\n    variants: [\n      JSDOC_COMMENT,\n      hljs.C_BLOCK_COMMENT_MODE,\n      hljs.C_LINE_COMMENT_MODE\n    ]\n  };\n  const SUBST_INTERNALS = [\n    hljs.APOS_STRING_MODE,\n    hljs.QUOTE_STRING_MODE,\n    HTML_TEMPLATE,\n    CSS_TEMPLATE,\n    TEMPLATE_STRING,\n    NUMBER,\n    hljs.REGEXP_MODE\n  ];\n  SUBST.contains = SUBST_INTERNALS\n    .concat({\n      // we need to pair up {} inside our subst to prevent\n      // it from ending too early by matching another }\n      begin: /\\{/,\n      end: /\\}/,\n      keywords: KEYWORDS$1,\n      contains: [\n        \"self\"\n      ].concat(SUBST_INTERNALS)\n    });\n  const SUBST_AND_COMMENTS = [].concat(COMMENT, SUBST.contains);\n  const PARAMS_CONTAINS = SUBST_AND_COMMENTS.concat([\n    // eat recursive parens in sub expressions\n    {\n      begin: /\\(/,\n      end: /\\)/,\n      keywords: KEYWORDS$1,\n      contains: [\"self\"].concat(SUBST_AND_COMMENTS)\n    }\n  ]);\n  const PARAMS = {\n    className: 'params',\n    begin: /\\(/,\n    end: /\\)/,\n    excludeBegin: true,\n    excludeEnd: true,\n    keywords: KEYWORDS$1,\n    contains: PARAMS_CONTAINS\n  };\n\n  return {\n    name: 'Javascript',\n    aliases: ['js', 'jsx', 'mjs', 'cjs'],\n    keywords: KEYWORDS$1,\n    // this will be extended by TypeScript\n    exports: { PARAMS_CONTAINS },\n    illegal: /#(?![$_A-z])/,\n    contains: [\n      hljs.SHEBANG({\n        label: \"shebang\",\n        binary: \"node\",\n        relevance: 5\n      }),\n      {\n        label: \"use_strict\",\n        className: 'meta',\n        relevance: 10,\n        begin: /^\\s*['\"]use (strict|asm)['\"]/\n      },\n      hljs.APOS_STRING_MODE,\n      hljs.QUOTE_STRING_MODE,\n      HTML_TEMPLATE,\n      CSS_TEMPLATE,\n      TEMPLATE_STRING,\n      COMMENT,\n      NUMBER,\n      { // object attr container\n        begin: concat(/[{,\\n]\\s*/,\n          // we need to look ahead to make sure that we actually have an\n          // attribute coming up so we don't steal a comma from a potential\n          // \"value\" container\n          //\n          // NOTE: this might not work how you think.  We don't actually always\n          // enter this mode and stay.  Instead it might merely match `,\n          // <comments up next>` and then immediately end after the , because it\n          // fails to find any actual attrs. But this still does the job because\n          // it prevents the value contain rule from grabbing this instead and\n          // prevening this rule from firing when we actually DO have keys.\n          lookahead(concat(\n            // we also need to allow for multiple possible comments inbetween\n            // the first key:value pairing\n            /(((\\/\\/.*$)|(\\/\\*(\\*[^/]|[^*])*\\*\\/))\\s*)*/,\n            IDENT_RE$1 + '\\\\s*:'))),\n        relevance: 0,\n        contains: [\n          {\n            className: 'attr',\n            begin: IDENT_RE$1 + lookahead('\\\\s*:'),\n            relevance: 0\n          }\n        ]\n      },\n      { // \"value\" container\n        begin: '(' + hljs.RE_STARTERS_RE + '|\\\\b(case|return|throw)\\\\b)\\\\s*',\n        keywords: 'return throw case',\n        contains: [\n          COMMENT,\n          hljs.REGEXP_MODE,\n          {\n            className: 'function',\n            // we have to count the parens to make sure we actually have the\n            // correct bounding ( ) before the =>.  There could be any number of\n            // sub-expressions inside also surrounded by parens.\n            begin: '(\\\\(' +\n            '[^()]*(\\\\(' +\n            '[^()]*(\\\\(' +\n            '[^()]*' +\n            '\\\\)[^()]*)*' +\n            '\\\\)[^()]*)*' +\n            '\\\\)|' + hljs.UNDERSCORE_IDENT_RE + ')\\\\s*=>',\n            returnBegin: true,\n            end: '\\\\s*=>',\n            contains: [\n              {\n                className: 'params',\n                variants: [\n                  {\n                    begin: hljs.UNDERSCORE_IDENT_RE,\n                    relevance: 0\n                  },\n                  {\n                    className: null,\n                    begin: /\\(\\s*\\)/,\n                    skip: true\n                  },\n                  {\n                    begin: /\\(/,\n                    end: /\\)/,\n                    excludeBegin: true,\n                    excludeEnd: true,\n                    keywords: KEYWORDS$1,\n                    contains: PARAMS_CONTAINS\n                  }\n                ]\n              }\n            ]\n          },\n          { // could be a comma delimited list of params to a function call\n            begin: /,/, relevance: 0\n          },\n          {\n            className: '',\n            begin: /\\s/,\n            end: /\\s*/,\n            skip: true\n          },\n          { // JSX\n            variants: [\n              { begin: FRAGMENT.begin, end: FRAGMENT.end },\n              {\n                begin: XML_TAG.begin,\n                // we carefully check the opening tag to see if it truly\n                // is a tag and not a false positive\n                'on:begin': XML_TAG.isTrulyOpeningTag,\n                end: XML_TAG.end\n              }\n            ],\n            subLanguage: 'xml',\n            contains: [\n              {\n                begin: XML_TAG.begin,\n                end: XML_TAG.end,\n                skip: true,\n                contains: ['self']\n              }\n            ]\n          }\n        ],\n        relevance: 0\n      },\n      {\n        className: 'function',\n        beginKeywords: 'function',\n        end: /[{;]/,\n        excludeEnd: true,\n        keywords: KEYWORDS$1,\n        contains: [\n          'self',\n          hljs.inherit(hljs.TITLE_MODE, { begin: IDENT_RE$1 }),\n          PARAMS\n        ],\n        illegal: /%/\n      },\n      {\n        // prevent this from getting swallowed up by function\n        // since they appear \"function like\"\n        beginKeywords: \"while if switch catch for\"\n      },\n      {\n        className: 'function',\n        // we have to count the parens to make sure we actually have the correct\n        // bounding ( ).  There could be any number of sub-expressions inside\n        // also surrounded by parens.\n        begin: hljs.UNDERSCORE_IDENT_RE +\n          '\\\\(' + // first parens\n          '[^()]*(\\\\(' +\n            '[^()]*(\\\\(' +\n              '[^()]*' +\n            '\\\\)[^()]*)*' +\n          '\\\\)[^()]*)*' +\n          '\\\\)\\\\s*\\\\{', // end parens\n        returnBegin:true,\n        contains: [\n          PARAMS,\n          hljs.inherit(hljs.TITLE_MODE, { begin: IDENT_RE$1 }),\n        ]\n      },\n      // hack: prevents detection of keywords in some circumstances\n      // .keyword()\n      // $keyword = x\n      {\n        variants: [\n          { begin: '\\\\.' + IDENT_RE$1 },\n          { begin: '\\\\$' + IDENT_RE$1 }\n        ],\n        relevance: 0\n      },\n      { // ES6 class\n        className: 'class',\n        beginKeywords: 'class',\n        end: /[{;=]/,\n        excludeEnd: true,\n        illegal: /[:\"[\\]]/,\n        contains: [\n          { beginKeywords: 'extends' },\n          hljs.UNDERSCORE_TITLE_MODE\n        ]\n      },\n      {\n        begin: /\\b(?=constructor)/,\n        end: /[{;]/,\n        excludeEnd: true,\n        contains: [\n          hljs.inherit(hljs.TITLE_MODE, { begin: IDENT_RE$1 }),\n          'self',\n          PARAMS\n        ]\n      },\n      {\n        begin: '(get|set)\\\\s+(?=' + IDENT_RE$1 + '\\\\()',\n        end: /\\{/,\n        keywords: \"get set\",\n        contains: [\n          hljs.inherit(hljs.TITLE_MODE, { begin: IDENT_RE$1 }),\n          { begin: /\\(\\)/ }, // eat to avoid empty params\n          PARAMS\n        ]\n      },\n      {\n        begin: /\\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`\n      }\n    ]\n  };\n}\n\nmodule.exports = javascript;\n","/**\n * @param {string} value\n * @returns {RegExp}\n * */\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction source(re) {\n  if (!re) return null;\n  if (typeof re === \"string\") return re;\n\n  return re.source;\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction lookahead(re) {\n  return concat('(?=', re, ')');\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction optional(re) {\n  return concat('(', re, ')?');\n}\n\n/**\n * @param {...(RegExp | string) } args\n * @returns {string}\n */\nfunction concat(...args) {\n  const joined = args.map((x) => source(x)).join(\"\");\n  return joined;\n}\n\n/**\n * Any of the passed expresssions may match\n *\n * Creates a huge this | this | that | that match\n * @param {(RegExp | string)[] } args\n * @returns {string}\n */\nfunction either(...args) {\n  const joined = '(' + args.map((x) => source(x)).join(\"|\") + \")\";\n  return joined;\n}\n\n/*\nLanguage: HTML, XML\nWebsite: https://www.w3.org/XML/\nCategory: common\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction xml(hljs) {\n  // Element names can contain letters, digits, hyphens, underscores, and periods\n  const TAG_NAME_RE = concat(/[A-Z_]/, optional(/[A-Z0-9_.-]*:/), /[A-Z0-9_.-]*/);\n  const XML_IDENT_RE = /[A-Za-z0-9._:-]+/;\n  const XML_ENTITIES = {\n    className: 'symbol',\n    begin: /&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/\n  };\n  const XML_META_KEYWORDS = {\n    begin: /\\s/,\n    contains: [\n      {\n        className: 'meta-keyword',\n        begin: /#?[a-z_][a-z1-9_-]+/,\n        illegal: /\\n/\n      }\n    ]\n  };\n  const XML_META_PAR_KEYWORDS = hljs.inherit(XML_META_KEYWORDS, {\n    begin: /\\(/,\n    end: /\\)/\n  });\n  const APOS_META_STRING_MODE = hljs.inherit(hljs.APOS_STRING_MODE, {\n    className: 'meta-string'\n  });\n  const QUOTE_META_STRING_MODE = hljs.inherit(hljs.QUOTE_STRING_MODE, {\n    className: 'meta-string'\n  });\n  const TAG_INTERNALS = {\n    endsWithParent: true,\n    illegal: /</,\n    relevance: 0,\n    contains: [\n      {\n        className: 'attr',\n        begin: XML_IDENT_RE,\n        relevance: 0\n      },\n      {\n        begin: /=\\s*/,\n        relevance: 0,\n        contains: [\n          {\n            className: 'string',\n            endsParent: true,\n            variants: [\n              {\n                begin: /\"/,\n                end: /\"/,\n                contains: [ XML_ENTITIES ]\n              },\n              {\n                begin: /'/,\n                end: /'/,\n                contains: [ XML_ENTITIES ]\n              },\n              {\n                begin: /[^\\s\"'=<>`]+/\n              }\n            ]\n          }\n        ]\n      }\n    ]\n  };\n  return {\n    name: 'HTML, XML',\n    aliases: [\n      'html',\n      'xhtml',\n      'rss',\n      'atom',\n      'xjb',\n      'xsd',\n      'xsl',\n      'plist',\n      'wsf',\n      'svg'\n    ],\n    case_insensitive: true,\n    contains: [\n      {\n        className: 'meta',\n        begin: /<![a-z]/,\n        end: />/,\n        relevance: 10,\n        contains: [\n          XML_META_KEYWORDS,\n          QUOTE_META_STRING_MODE,\n          APOS_META_STRING_MODE,\n          XML_META_PAR_KEYWORDS,\n          {\n            begin: /\\[/,\n            end: /\\]/,\n            contains: [\n              {\n                className: 'meta',\n                begin: /<![a-z]/,\n                end: />/,\n                contains: [\n                  XML_META_KEYWORDS,\n                  XML_META_PAR_KEYWORDS,\n                  QUOTE_META_STRING_MODE,\n                  APOS_META_STRING_MODE\n                ]\n              }\n            ]\n          }\n        ]\n      },\n      hljs.COMMENT(\n        /<!--/,\n        /-->/,\n        {\n          relevance: 10\n        }\n      ),\n      {\n        begin: /<!\\[CDATA\\[/,\n        end: /\\]\\]>/,\n        relevance: 10\n      },\n      XML_ENTITIES,\n      {\n        className: 'meta',\n        begin: /<\\?xml/,\n        end: /\\?>/,\n        relevance: 10\n      },\n      {\n        className: 'tag',\n        /*\n        The lookahead pattern (?=...) ensures that 'begin' only matches\n        '<style' as a single word, followed by a whitespace or an\n        ending braket. The '$' is needed for the lexeme to be recognized\n        by hljs.subMode() that tests lexemes outside the stream.\n        */\n        begin: /<style(?=\\s|>)/,\n        end: />/,\n        keywords: {\n          name: 'style'\n        },\n        contains: [ TAG_INTERNALS ],\n        starts: {\n          end: /<\\/style>/,\n          returnEnd: true,\n          subLanguage: [\n            'css',\n            'xml'\n          ]\n        }\n      },\n      {\n        className: 'tag',\n        // See the comment in the <style tag about the lookahead pattern\n        begin: /<script(?=\\s|>)/,\n        end: />/,\n        keywords: {\n          name: 'script'\n        },\n        contains: [ TAG_INTERNALS ],\n        starts: {\n          end: /<\\/script>/,\n          returnEnd: true,\n          subLanguage: [\n            'javascript',\n            'handlebars',\n            'xml'\n          ]\n        }\n      },\n      // we need this for now for jSX\n      {\n        className: 'tag',\n        begin: /<>|<\\/>/\n      },\n      // open tag\n      {\n        className: 'tag',\n        begin: concat(\n          /</,\n          lookahead(concat(\n            TAG_NAME_RE,\n            // <tag/>\n            // <tag>\n            // <tag ...\n            either(/\\/>/, />/, /\\s/)\n          ))\n        ),\n        end: /\\/?>/,\n        contains: [\n          {\n            className: 'name',\n            begin: TAG_NAME_RE,\n            relevance: 0,\n            starts: TAG_INTERNALS\n          }\n        ]\n      },\n      // close tag\n      {\n        className: 'tag',\n        begin: concat(\n          /<\\//,\n          lookahead(concat(\n            TAG_NAME_RE, />/\n          ))\n        ),\n        contains: [\n          {\n            className: 'name',\n            begin: TAG_NAME_RE,\n            relevance: 0\n          },\n          {\n            begin: />/,\n            relevance: 0,\n            endsParent: true\n          }\n        ]\n      }\n    ]\n  };\n}\n\nmodule.exports = xml;\n","/*!\n * dist/inputmask\n * https://github.com/RobinHerbots/Inputmask\n * Copyright (c) 2010 - 2021 Robin Herbots\n * Licensed under the MIT license\n * Version: 5.0.6\n */\n!function(e, t) {\n    if (\"object\" == typeof exports && \"object\" == typeof module) module.exports = t(); else if (\"function\" == typeof define && define.amd) define([], t); else {\n        var a = t();\n        for (var i in a) (\"object\" == typeof exports ? exports : e)[i] = a[i];\n    }\n}(this, (function() {\n    return function() {\n        \"use strict\";\n        var e = {\n            4528: function(e) {\n                e.exports = JSON.parse('{\"BACKSPACE\":8,\"BACKSPACE_SAFARI\":127,\"DELETE\":46,\"DOWN\":40,\"END\":35,\"ENTER\":13,\"ESCAPE\":27,\"HOME\":36,\"INSERT\":45,\"LEFT\":37,\"PAGE_DOWN\":34,\"PAGE_UP\":33,\"RIGHT\":39,\"SPACE\":32,\"TAB\":9,\"UP\":38,\"X\":88,\"Z\":90,\"CONTROL\":17,\"PAUSE/BREAK\":19,\"WINDOWS_LEFT\":91,\"WINDOWS_RIGHT\":92,\"KEY_229\":229}');\n            },\n            8741: function(e, t) {\n                Object.defineProperty(t, \"__esModule\", {\n                    value: !0\n                }), t.default = void 0;\n                var a = !(\"undefined\" == typeof window || !window.document || !window.document.createElement);\n                t.default = a;\n            },\n            3976: function(e, t, a) {\n                Object.defineProperty(t, \"__esModule\", {\n                    value: !0\n                }), t.default = void 0;\n                var i, n = (i = a(4528)) && i.__esModule ? i : {\n                    default: i\n                };\n                var r = {\n                    _maxTestPos: 500,\n                    placeholder: \"_\",\n                    optionalmarker: [ \"[\", \"]\" ],\n                    quantifiermarker: [ \"{\", \"}\" ],\n                    groupmarker: [ \"(\", \")\" ],\n                    alternatormarker: \"|\",\n                    escapeChar: \"\\\\\",\n                    mask: null,\n                    regex: null,\n                    oncomplete: function() {},\n                    onincomplete: function() {},\n                    oncleared: function() {},\n                    repeat: 0,\n                    greedy: !1,\n                    autoUnmask: !1,\n                    removeMaskOnSubmit: !1,\n                    clearMaskOnLostFocus: !0,\n                    insertMode: !0,\n                    insertModeVisual: !0,\n                    clearIncomplete: !1,\n                    alias: null,\n                    onKeyDown: function() {},\n                    onBeforeMask: null,\n                    onBeforePaste: function(e, t) {\n                        return \"function\" == typeof t.onBeforeMask ? t.onBeforeMask.call(this, e, t) : e;\n                    },\n                    onBeforeWrite: null,\n                    onUnMask: null,\n                    showMaskOnFocus: !0,\n                    showMaskOnHover: !0,\n                    onKeyValidation: function() {},\n                    skipOptionalPartCharacter: \" \",\n                    numericInput: !1,\n                    rightAlign: !1,\n                    undoOnEscape: !0,\n                    radixPoint: \"\",\n                    _radixDance: !1,\n                    groupSeparator: \"\",\n                    keepStatic: null,\n                    positionCaretOnTab: !0,\n                    tabThrough: !1,\n                    supportsInputType: [ \"text\", \"tel\", \"url\", \"password\", \"search\" ],\n                    ignorables: [ n.default.BACKSPACE, n.default.TAB, n.default[\"PAUSE/BREAK\"], n.default.ESCAPE, n.default.PAGE_UP, n.default.PAGE_DOWN, n.default.END, n.default.HOME, n.default.LEFT, n.default.UP, n.default.RIGHT, n.default.DOWN, n.default.INSERT, n.default.DELETE, 93, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 0, 229 ],\n                    isComplete: null,\n                    preValidation: null,\n                    postValidation: null,\n                    staticDefinitionSymbol: void 0,\n                    jitMasking: !1,\n                    nullable: !0,\n                    inputEventOnly: !1,\n                    noValuePatching: !1,\n                    positionCaretOnClick: \"lvp\",\n                    casing: null,\n                    inputmode: \"text\",\n                    importDataAttributes: !0,\n                    shiftPositions: !0,\n                    usePrototypeDefinitions: !0,\n                    validationEventTimeOut: 3e3\n                };\n                t.default = r;\n            },\n            7392: function(e, t) {\n                Object.defineProperty(t, \"__esModule\", {\n                    value: !0\n                }), t.default = void 0;\n                t.default = {\n                    9: {\n                        validator: \"[0-9\\uff10-\\uff19]\",\n                        definitionSymbol: \"*\"\n                    },\n                    a: {\n                        validator: \"[A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\",\n                        definitionSymbol: \"*\"\n                    },\n                    \"*\": {\n                        validator: \"[0-9\\uff10-\\uff19A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\"\n                    }\n                };\n            },\n            253: function(e, t) {\n                Object.defineProperty(t, \"__esModule\", {\n                    value: !0\n                }), t.default = function(e, t, a) {\n                    if (void 0 === a) return e.__data ? e.__data[t] : null;\n                    e.__data = e.__data || {}, e.__data[t] = a;\n                };\n            },\n            3776: function(e, t, a) {\n                Object.defineProperty(t, \"__esModule\", {\n                    value: !0\n                }), t.on = function(e, t) {\n                    function a(e, a) {\n                        n.addEventListener ? n.addEventListener(e, t, !1) : n.attachEvent && n.attachEvent(\"on\" + e, t), \n                        i[e] = i[e] || {}, i[e][a] = i[e][a] || [], i[e][a].push(t);\n                    }\n                    if (u(this[0])) for (var i = this[0].eventRegistry, n = this[0], r = e.split(\" \"), o = 0; o < r.length; o++) {\n                        var s = r[o].split(\".\"), l = s[0], c = s[1] || \"global\";\n                        a(l, c);\n                    }\n                    return this;\n                }, t.off = function(e, t) {\n                    var a, i;\n                    function n(e, t, n) {\n                        if (e in a == !0) if (i.removeEventListener ? i.removeEventListener(e, n, !1) : i.detachEvent && i.detachEvent(\"on\" + e, n), \n                        \"global\" === t) for (var r in a[e]) a[e][r].splice(a[e][r].indexOf(n), 1); else a[e][t].splice(a[e][t].indexOf(n), 1);\n                    }\n                    function r(e, i) {\n                        var n, r, o = [];\n                        if (e.length > 0) if (void 0 === t) for (n = 0, r = a[e][i].length; n < r; n++) o.push({\n                            ev: e,\n                            namespace: i && i.length > 0 ? i : \"global\",\n                            handler: a[e][i][n]\n                        }); else o.push({\n                            ev: e,\n                            namespace: i && i.length > 0 ? i : \"global\",\n                            handler: t\n                        }); else if (i.length > 0) for (var s in a) for (var l in a[s]) if (l === i) if (void 0 === t) for (n = 0, \n                        r = a[s][l].length; n < r; n++) o.push({\n                            ev: s,\n                            namespace: l,\n                            handler: a[s][l][n]\n                        }); else o.push({\n                            ev: s,\n                            namespace: l,\n                            handler: t\n                        });\n                        return o;\n                    }\n                    if (u(this[0]) && e) {\n                        a = this[0].eventRegistry, i = this[0];\n                        for (var o = e.split(\" \"), s = 0; s < o.length; s++) for (var l = o[s].split(\".\"), c = r(l[0], l[1]), f = 0, d = c.length; f < d; f++) n(c[f].ev, c[f].namespace, c[f].handler);\n                    }\n                    return this;\n                }, t.trigger = function(e) {\n                    if (u(this[0])) for (var t = this[0].eventRegistry, a = this[0], i = \"string\" == typeof e ? e.split(\" \") : [ e.type ], r = 0; r < i.length; r++) {\n                        var s = i[r].split(\".\"), l = s[0], c = s[1] || \"global\";\n                        if (void 0 !== document && \"global\" === c) {\n                            var f, d, p = {\n                                bubbles: !0,\n                                cancelable: !0,\n                                detail: arguments[1]\n                            };\n                            if (document.createEvent) {\n                                try {\n                                    switch (l) {\n                                      case \"input\":\n                                        p.inputType = \"insertText\", f = new InputEvent(l, p);\n                                        break;\n\n                                      default:\n                                        f = new CustomEvent(l, p);\n                                    }\n                                } catch (e) {\n                                    (f = document.createEvent(\"CustomEvent\")).initCustomEvent(l, p.bubbles, p.cancelable, p.detail);\n                                }\n                                e.type && (0, n.default)(f, e), a.dispatchEvent(f);\n                            } else (f = document.createEventObject()).eventType = l, f.detail = arguments[1], \n                            e.type && (0, n.default)(f, e), a.fireEvent(\"on\" + f.eventType, f);\n                        } else if (void 0 !== t[l]) if (arguments[0] = arguments[0].type ? arguments[0] : o.default.Event(arguments[0]), \n                        arguments[0].detail = arguments.slice(1), \"global\" === c) for (var h in t[l]) for (d = 0; d < t[l][h].length; d++) t[l][h][d].apply(a, arguments); else for (d = 0; d < t[l][c].length; d++) t[l][c][d].apply(a, arguments);\n                    }\n                    return this;\n                }, t.Event = void 0;\n                var i, n = l(a(600)), r = l(a(9380)), o = l(a(4963)), s = l(a(8741));\n                function l(e) {\n                    return e && e.__esModule ? e : {\n                        default: e\n                    };\n                }\n                function u(e) {\n                    return e instanceof Element;\n                }\n                t.Event = i, \"function\" == typeof r.default.CustomEvent ? t.Event = i = r.default.CustomEvent : s.default && (t.Event = i = function(e, t) {\n                    t = t || {\n                        bubbles: !1,\n                        cancelable: !1,\n                        detail: void 0\n                    };\n                    var a = document.createEvent(\"CustomEvent\");\n                    return a.initCustomEvent(e, t.bubbles, t.cancelable, t.detail), a;\n                }, i.prototype = r.default.Event.prototype);\n            },\n            600: function(e, t) {\n                function a(e) {\n                    return (a = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(e) {\n                        return typeof e;\n                    } : function(e) {\n                        return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n                    })(e);\n                }\n                Object.defineProperty(t, \"__esModule\", {\n                    value: !0\n                }), t.default = function e() {\n                    var t, i, n, r, o, s, l = arguments[0] || {}, u = 1, c = arguments.length, f = !1;\n                    \"boolean\" == typeof l && (f = l, l = arguments[u] || {}, u++);\n                    \"object\" !== a(l) && \"function\" != typeof l && (l = {});\n                    for (;u < c; u++) if (null != (t = arguments[u])) for (i in t) n = l[i], r = t[i], \n                    l !== r && (f && r && (\"[object Object]\" === Object.prototype.toString.call(r) || (o = Array.isArray(r))) ? (o ? (o = !1, \n                    s = n && Array.isArray(n) ? n : []) : s = n && \"[object Object]\" === Object.prototype.toString.call(n) ? n : {}, \n                    l[i] = e(f, s, r)) : void 0 !== r && (l[i] = r));\n                    return l;\n                };\n            },\n            4963: function(e, t, a) {\n                Object.defineProperty(t, \"__esModule\", {\n                    value: !0\n                }), t.default = void 0;\n                var i = s(a(600)), n = s(a(9380)), r = s(a(253)), o = a(3776);\n                function s(e) {\n                    return e && e.__esModule ? e : {\n                        default: e\n                    };\n                }\n                var l = n.default.document;\n                function u(e) {\n                    return e instanceof u ? e : this instanceof u ? void (null != e && e !== n.default && (this[0] = e.nodeName ? e : void 0 !== e[0] && e[0].nodeName ? e[0] : l.querySelector(e), \n                    void 0 !== this[0] && null !== this[0] && (this[0].eventRegistry = this[0].eventRegistry || {}))) : new u(e);\n                }\n                u.prototype = {\n                    on: o.on,\n                    off: o.off,\n                    trigger: o.trigger\n                }, u.extend = i.default, u.data = r.default, u.Event = o.Event;\n                var c = u;\n                t.default = c;\n            },\n            9845: function(e, t, a) {\n                Object.defineProperty(t, \"__esModule\", {\n                    value: !0\n                }), t.iphone = t.iemobile = t.mobile = t.ie = t.ua = void 0;\n                var i, n = (i = a(9380)) && i.__esModule ? i : {\n                    default: i\n                };\n                var r = n.default.navigator && n.default.navigator.userAgent || \"\", o = r.indexOf(\"MSIE \") > 0 || r.indexOf(\"Trident/\") > 0, s = \"ontouchstart\" in n.default, l = /iemobile/i.test(r), u = /iphone/i.test(r) && !l;\n                t.iphone = u, t.iemobile = l, t.mobile = s, t.ie = o, t.ua = r;\n            },\n            7184: function(e, t) {\n                Object.defineProperty(t, \"__esModule\", {\n                    value: !0\n                }), t.default = function(e) {\n                    return e.replace(a, \"\\\\$1\");\n                };\n                var a = new RegExp(\"(\\\\\" + [ \"/\", \".\", \"*\", \"+\", \"?\", \"|\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", \"\\\\\", \"$\", \"^\" ].join(\"|\\\\\") + \")\", \"gim\");\n            },\n            6030: function(e, t, a) {\n                Object.defineProperty(t, \"__esModule\", {\n                    value: !0\n                }), t.EventHandlers = void 0;\n                var i, n = a(8711), r = (i = a(4528)) && i.__esModule ? i : {\n                    default: i\n                }, o = a(9845), s = a(7215), l = a(7760), u = a(4713);\n                var c = {\n                    keydownEvent: function(e) {\n                        var t = this.inputmask, a = t.opts, i = t.dependencyLib, c = t.maskset, f = this, d = i(f), p = e.keyCode, h = n.caret.call(t, f), v = a.onKeyDown.call(this, e, n.getBuffer.call(t), h, a);\n                        if (void 0 !== v) return v;\n                        if (p === r.default.BACKSPACE || p === r.default.DELETE || o.iphone && p === r.default.BACKSPACE_SAFARI || e.ctrlKey && p === r.default.X && !(\"oncut\" in f)) e.preventDefault(), \n                        s.handleRemove.call(t, f, p, h), (0, l.writeBuffer)(f, n.getBuffer.call(t, !0), c.p, e, f.inputmask._valueGet() !== n.getBuffer.call(t).join(\"\")); else if (p === r.default.END || p === r.default.PAGE_DOWN) {\n                            e.preventDefault();\n                            var m = n.seekNext.call(t, n.getLastValidPosition.call(t));\n                            n.caret.call(t, f, e.shiftKey ? h.begin : m, m, !0);\n                        } else p === r.default.HOME && !e.shiftKey || p === r.default.PAGE_UP ? (e.preventDefault(), \n                        n.caret.call(t, f, 0, e.shiftKey ? h.begin : 0, !0)) : a.undoOnEscape && p === r.default.ESCAPE && !0 !== e.altKey ? ((0, \n                        l.checkVal)(f, !0, !1, t.undoValue.split(\"\")), d.trigger(\"click\")) : !0 === a.tabThrough && p === r.default.TAB ? !0 === e.shiftKey ? (h.end = n.seekPrevious.call(t, h.end, !0), \n                        !0 === u.getTest.call(t, h.end - 1).match.static && h.end--, h.begin = n.seekPrevious.call(t, h.end, !0), \n                        h.begin >= 0 && h.end > 0 && (e.preventDefault(), n.caret.call(t, f, h.begin, h.end))) : (h.begin = n.seekNext.call(t, h.begin, !0), \n                        h.end = n.seekNext.call(t, h.begin, !0), h.end < c.maskLength && h.end--, h.begin <= c.maskLength && (e.preventDefault(), \n                        n.caret.call(t, f, h.begin, h.end))) : e.shiftKey || a.insertModeVisual && !1 === a.insertMode && (p === r.default.RIGHT ? setTimeout((function() {\n                            var e = n.caret.call(t, f);\n                            n.caret.call(t, f, e.begin);\n                        }), 0) : p === r.default.LEFT && setTimeout((function() {\n                            var e = n.translatePosition.call(t, f.inputmask.caretPos.begin);\n                            n.translatePosition.call(t, f.inputmask.caretPos.end);\n                            t.isRTL ? n.caret.call(t, f, e + (e === c.maskLength ? 0 : 1)) : n.caret.call(t, f, e - (0 === e ? 0 : 1));\n                        }), 0));\n                        t.ignorable = a.ignorables.includes(p);\n                    },\n                    keypressEvent: function(e, t, a, i, o) {\n                        var u = this.inputmask || this, c = u.opts, f = u.dependencyLib, d = u.maskset, p = u.el, h = f(p), v = e.which || e.charCode || e.keyCode;\n                        if (!(!0 === t || e.ctrlKey && e.altKey) && (e.ctrlKey || e.metaKey || u.ignorable)) return v === r.default.ENTER && u.undoValue !== u._valueGet(!0) && (u.undoValue = u._valueGet(!0), \n                        setTimeout((function() {\n                            h.trigger(\"change\");\n                        }), 0)), u.skipInputEvent = !0, !0;\n                        if (v) {\n                            44 !== v && 46 !== v || 3 !== e.location || \"\" === c.radixPoint || (v = c.radixPoint.charCodeAt(0));\n                            var m, g = t ? {\n                                begin: o,\n                                end: o\n                            } : n.caret.call(u, p), k = String.fromCharCode(v);\n                            d.writeOutBuffer = !0;\n                            var y = s.isValid.call(u, g, k, i, void 0, void 0, void 0, t);\n                            if (!1 !== y && (n.resetMaskSet.call(u, !0), m = void 0 !== y.caret ? y.caret : n.seekNext.call(u, y.pos.begin ? y.pos.begin : y.pos), \n                            d.p = m), m = c.numericInput && void 0 === y.caret ? n.seekPrevious.call(u, m) : m, \n                            !1 !== a && (setTimeout((function() {\n                                c.onKeyValidation.call(p, v, y);\n                            }), 0), d.writeOutBuffer && !1 !== y)) {\n                                var b = n.getBuffer.call(u);\n                                (0, l.writeBuffer)(p, b, m, e, !0 !== t);\n                            }\n                            if (e.preventDefault(), t) return !1 !== y && (y.forwardPosition = m), y;\n                        }\n                    },\n                    keyupEvent: function(e) {\n                        var t = this.inputmask;\n                        !t.isComposing || e.keyCode !== r.default.KEY_229 && e.keyCode !== r.default.ENTER || t.$el.trigger(\"input\");\n                    },\n                    pasteEvent: function(e) {\n                        var t, a = this.inputmask, i = a.opts, r = a._valueGet(!0), o = n.caret.call(a, this);\n                        a.isRTL && (t = o.end, o.end = o.begin, o.begin = t);\n                        var s = r.substr(0, o.begin), u = r.substr(o.end, r.length);\n                        if (s == (a.isRTL ? n.getBufferTemplate.call(a).slice().reverse() : n.getBufferTemplate.call(a)).slice(0, o.begin).join(\"\") && (s = \"\"), \n                        u == (a.isRTL ? n.getBufferTemplate.call(a).slice().reverse() : n.getBufferTemplate.call(a)).slice(o.end).join(\"\") && (u = \"\"), \n                        window.clipboardData && window.clipboardData.getData) r = s + window.clipboardData.getData(\"Text\") + u; else {\n                            if (!e.clipboardData || !e.clipboardData.getData) return !0;\n                            r = s + e.clipboardData.getData(\"text/plain\") + u;\n                        }\n                        var c = r;\n                        if (\"function\" == typeof i.onBeforePaste) {\n                            if (!1 === (c = i.onBeforePaste.call(a, r, i))) return e.preventDefault();\n                            c || (c = r);\n                        }\n                        return (0, l.checkVal)(this, !0, !1, c.toString().split(\"\"), e), e.preventDefault();\n                    },\n                    inputFallBackEvent: function(e) {\n                        var t = this.inputmask, a = t.opts, i = t.dependencyLib;\n                        var s = this, f = s.inputmask._valueGet(!0), d = (t.isRTL ? n.getBuffer.call(t).slice().reverse() : n.getBuffer.call(t)).join(\"\"), p = n.caret.call(t, s, void 0, void 0, !0);\n                        if (d !== f) {\n                            var h = function(e, i, r) {\n                                for (var o, s, l, c = e.substr(0, r.begin).split(\"\"), f = e.substr(r.begin).split(\"\"), d = i.substr(0, r.begin).split(\"\"), p = i.substr(r.begin).split(\"\"), h = c.length >= d.length ? c.length : d.length, v = f.length >= p.length ? f.length : p.length, m = \"\", g = [], k = \"~\"; c.length < h; ) c.push(k);\n                                for (;d.length < h; ) d.push(k);\n                                for (;f.length < v; ) f.unshift(k);\n                                for (;p.length < v; ) p.unshift(k);\n                                var y = c.concat(f), b = d.concat(p);\n                                for (s = 0, o = y.length; s < o; s++) switch (l = u.getPlaceholder.call(t, n.translatePosition.call(t, s)), \n                                m) {\n                                  case \"insertText\":\n                                    b[s - 1] === y[s] && r.begin == y.length - 1 && g.push(y[s]), s = o;\n                                    break;\n\n                                  case \"insertReplacementText\":\n                                  case \"deleteContentBackward\":\n                                    y[s] === k ? r.end++ : s = o;\n                                    break;\n\n                                  default:\n                                    y[s] !== b[s] && (y[s + 1] !== k && y[s + 1] !== l && void 0 !== y[s + 1] || (b[s] !== l || b[s + 1] !== k) && b[s] !== k ? b[s + 1] === k && b[s] === y[s + 1] ? (m = \"insertText\", \n                                    g.push(y[s]), r.begin--, r.end--) : y[s] !== l && y[s] !== k && (y[s + 1] === k || b[s] !== y[s] && b[s + 1] === y[s + 1]) ? (m = \"insertReplacementText\", \n                                    g.push(y[s]), r.begin--) : y[s] === k ? (m = \"deleteContentBackward\", (n.isMask.call(t, n.translatePosition.call(t, s), !0) || b[s] === a.radixPoint) && r.end++) : s = o : (m = \"insertText\", \n                                    g.push(y[s]), r.begin--, r.end--));\n                                }\n                                return {\n                                    action: m,\n                                    data: g,\n                                    caret: r\n                                };\n                            }(f = function(e, a, i) {\n                                if (o.iemobile) {\n                                    var r = a.replace(n.getBuffer.call(t).join(\"\"), \"\");\n                                    if (1 === r.length) {\n                                        var s = a.split(\"\");\n                                        s.splice(i.begin, 0, r), a = s.join(\"\");\n                                    }\n                                }\n                                return a;\n                            }(0, f, p), d, p);\n                            switch ((s.inputmask.shadowRoot || s.ownerDocument).activeElement !== s && s.focus(), \n                            (0, l.writeBuffer)(s, n.getBuffer.call(t)), n.caret.call(t, s, p.begin, p.end, !0), \n                            h.action) {\n                              case \"insertText\":\n                              case \"insertReplacementText\":\n                                h.data.forEach((function(e, a) {\n                                    var n = new i.Event(\"keypress\");\n                                    n.which = e.charCodeAt(0), t.ignorable = !1, c.keypressEvent.call(s, n);\n                                })), setTimeout((function() {\n                                    t.$el.trigger(\"keyup\");\n                                }), 0);\n                                break;\n\n                              case \"deleteContentBackward\":\n                                var v = new i.Event(\"keydown\");\n                                v.keyCode = r.default.BACKSPACE, c.keydownEvent.call(s, v);\n                                break;\n\n                              default:\n                                (0, l.applyInputValue)(s, f);\n                            }\n                            e.preventDefault();\n                        }\n                    },\n                    compositionendEvent: function(e) {\n                        var t = this.inputmask;\n                        t.isComposing = !1, t.$el.trigger(\"input\");\n                    },\n                    setValueEvent: function(e) {\n                        var t = this.inputmask, a = this, i = e && e.detail ? e.detail[0] : arguments[1];\n                        void 0 === i && (i = a.inputmask._valueGet(!0)), (0, l.applyInputValue)(a, i), (e.detail && void 0 !== e.detail[1] || void 0 !== arguments[2]) && n.caret.call(t, a, e.detail ? e.detail[1] : arguments[2]);\n                    },\n                    focusEvent: function(e) {\n                        var t = this.inputmask, a = t.opts, i = this, r = i.inputmask._valueGet();\n                        a.showMaskOnFocus && r !== n.getBuffer.call(t).join(\"\") && (0, l.writeBuffer)(i, n.getBuffer.call(t), n.seekNext.call(t, n.getLastValidPosition.call(t))), \n                        !0 !== a.positionCaretOnTab || !1 !== t.mouseEnter || s.isComplete.call(t, n.getBuffer.call(t)) && -1 !== n.getLastValidPosition.call(t) || c.clickEvent.apply(i, [ e, !0 ]), \n                        t.undoValue = t._valueGet(!0);\n                    },\n                    invalidEvent: function(e) {\n                        this.inputmask.validationEvent = !0;\n                    },\n                    mouseleaveEvent: function() {\n                        var e = this.inputmask, t = e.opts, a = this;\n                        e.mouseEnter = !1, t.clearMaskOnLostFocus && (a.inputmask.shadowRoot || a.ownerDocument).activeElement !== a && (0, \n                        l.HandleNativePlaceholder)(a, e.originalPlaceholder);\n                    },\n                    clickEvent: function(e, t) {\n                        var a = this.inputmask, i = this;\n                        if ((i.inputmask.shadowRoot || i.ownerDocument).activeElement === i) {\n                            var r = n.determineNewCaretPosition.call(a, n.caret.call(a, i), t);\n                            void 0 !== r && n.caret.call(a, i, r);\n                        }\n                    },\n                    cutEvent: function(e) {\n                        var t = this.inputmask, a = t.maskset, i = this, o = n.caret.call(t, i), u = window.clipboardData || e.clipboardData, c = t.isRTL ? n.getBuffer.call(t).slice(o.end, o.begin) : n.getBuffer.call(t).slice(o.begin, o.end);\n                        u.setData(\"text\", t.isRTL ? c.reverse().join(\"\") : c.join(\"\")), document.execCommand && document.execCommand(\"copy\"), \n                        s.handleRemove.call(t, i, r.default.DELETE, o), (0, l.writeBuffer)(i, n.getBuffer.call(t), a.p, e, t.undoValue !== t._valueGet(!0));\n                    },\n                    blurEvent: function(e) {\n                        var t = this.inputmask, a = t.opts, i = (0, t.dependencyLib)(this), r = this;\n                        if (r.inputmask) {\n                            (0, l.HandleNativePlaceholder)(r, t.originalPlaceholder);\n                            var o = r.inputmask._valueGet(), u = n.getBuffer.call(t).slice();\n                            \"\" !== o && (a.clearMaskOnLostFocus && (-1 === n.getLastValidPosition.call(t) && o === n.getBufferTemplate.call(t).join(\"\") ? u = [] : l.clearOptionalTail.call(t, u)), \n                            !1 === s.isComplete.call(t, u) && (setTimeout((function() {\n                                i.trigger(\"incomplete\");\n                            }), 0), a.clearIncomplete && (n.resetMaskSet.call(t), u = a.clearMaskOnLostFocus ? [] : n.getBufferTemplate.call(t).slice())), \n                            (0, l.writeBuffer)(r, u, void 0, e)), t.undoValue !== t._valueGet(!0) && (t.undoValue = t._valueGet(!0), \n                            i.trigger(\"change\"));\n                        }\n                    },\n                    mouseenterEvent: function() {\n                        var e = this.inputmask, t = e.opts, a = this;\n                        if (e.mouseEnter = !0, (a.inputmask.shadowRoot || a.ownerDocument).activeElement !== a) {\n                            var i = (e.isRTL ? n.getBufferTemplate.call(e).slice().reverse() : n.getBufferTemplate.call(e)).join(\"\");\n                            e.placeholder !== i && a.placeholder !== e.originalPlaceholder && (e.originalPlaceholder = a.placeholder), \n                            t.showMaskOnHover && (0, l.HandleNativePlaceholder)(a, i);\n                        }\n                    },\n                    submitEvent: function() {\n                        var e = this.inputmask, t = e.opts;\n                        e.undoValue !== e._valueGet(!0) && e.$el.trigger(\"change\"), t.clearMaskOnLostFocus && -1 === n.getLastValidPosition.call(e) && e._valueGet && e._valueGet() === n.getBufferTemplate.call(e).join(\"\") && e._valueSet(\"\"), \n                        t.clearIncomplete && !1 === s.isComplete.call(e, n.getBuffer.call(e)) && e._valueSet(\"\"), \n                        t.removeMaskOnSubmit && (e._valueSet(e.unmaskedvalue(), !0), setTimeout((function() {\n                            (0, l.writeBuffer)(e.el, n.getBuffer.call(e));\n                        }), 0));\n                    },\n                    resetEvent: function() {\n                        var e = this.inputmask;\n                        e.refreshValue = !0, setTimeout((function() {\n                            (0, l.applyInputValue)(e.el, e._valueGet(!0));\n                        }), 0);\n                    }\n                };\n                t.EventHandlers = c;\n            },\n            9716: function(e, t, a) {\n                Object.defineProperty(t, \"__esModule\", {\n                    value: !0\n                }), t.EventRuler = void 0;\n                var i = s(a(2394)), n = s(a(4528)), r = a(8711), o = a(7760);\n                function s(e) {\n                    return e && e.__esModule ? e : {\n                        default: e\n                    };\n                }\n                var l = {\n                    on: function(e, t, a) {\n                        var s = e.inputmask.dependencyLib, l = function(t) {\n                            t.originalEvent && (t = t.originalEvent || t, arguments[0] = t);\n                            var l, u = this, c = u.inputmask, f = c ? c.opts : void 0;\n                            if (void 0 === c && \"FORM\" !== this.nodeName) {\n                                var d = s.data(u, \"_inputmask_opts\");\n                                s(u).off(), d && new i.default(d).mask(u);\n                            } else {\n                                if ([ \"submit\", \"reset\", \"setvalue\" ].includes(t.type) || \"FORM\" === this.nodeName || !(u.disabled || u.readOnly && !(\"keydown\" === t.type && t.ctrlKey && 67 === t.keyCode || !1 === f.tabThrough && t.keyCode === n.default.TAB))) {\n                                    switch (t.type) {\n                                      case \"input\":\n                                        if (!0 === c.skipInputEvent || t.inputType && \"insertCompositionText\" === t.inputType) return c.skipInputEvent = !1, \n                                        t.preventDefault();\n                                        break;\n\n                                      case \"keydown\":\n                                        c.skipKeyPressEvent = !1, c.skipInputEvent = c.isComposing = t.keyCode === n.default.KEY_229;\n                                        break;\n\n                                      case \"keyup\":\n                                      case \"compositionend\":\n                                        c.isComposing && (c.skipInputEvent = !1);\n                                        break;\n\n                                      case \"keypress\":\n                                        if (!0 === c.skipKeyPressEvent) return t.preventDefault();\n                                        c.skipKeyPressEvent = !0;\n                                        break;\n\n                                      case \"click\":\n                                      case \"focus\":\n                                        return c.validationEvent ? (c.validationEvent = !1, e.blur(), (0, o.HandleNativePlaceholder)(e, (c.isRTL ? r.getBufferTemplate.call(c).slice().reverse() : r.getBufferTemplate.call(c)).join(\"\")), \n                                        setTimeout((function() {\n                                            e.focus();\n                                        }), f.validationEventTimeOut), !1) : (l = arguments, setTimeout((function() {\n                                            e.inputmask && a.apply(u, l);\n                                        }), 0), !1);\n                                    }\n                                    var p = a.apply(u, arguments);\n                                    return !1 === p && (t.preventDefault(), t.stopPropagation()), p;\n                                }\n                                t.preventDefault();\n                            }\n                        };\n                        [ \"submit\", \"reset\" ].includes(t) ? (l = l.bind(e), null !== e.form && s(e.form).on(t, l)) : s(e).on(t, l), \n                        e.inputmask.events[t] = e.inputmask.events[t] || [], e.inputmask.events[t].push(l);\n                    },\n                    off: function(e, t) {\n                        if (e.inputmask && e.inputmask.events) {\n                            var a = e.inputmask.dependencyLib, i = e.inputmask.events;\n                            for (var n in t && ((i = [])[t] = e.inputmask.events[t]), i) {\n                                for (var r = i[n]; r.length > 0; ) {\n                                    var o = r.pop();\n                                    [ \"submit\", \"reset\" ].includes(n) ? null !== e.form && a(e.form).off(n, o) : a(e).off(n, o);\n                                }\n                                delete e.inputmask.events[n];\n                            }\n                        }\n                    }\n                };\n                t.EventRuler = l;\n            },\n            219: function(e, t, a) {\n                var i = l(a(2394)), n = l(a(4528)), r = l(a(7184)), o = a(8711);\n                function s(e) {\n                    return (s = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(e) {\n                        return typeof e;\n                    } : function(e) {\n                        return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n                    })(e);\n                }\n                function l(e) {\n                    return e && e.__esModule ? e : {\n                        default: e\n                    };\n                }\n                var u = i.default.dependencyLib, c = (new Date).getFullYear(), f = {\n                    d: [ \"[1-9]|[12][0-9]|3[01]\", Date.prototype.setDate, \"day\", Date.prototype.getDate ],\n                    dd: [ \"0[1-9]|[12][0-9]|3[01]\", Date.prototype.setDate, \"day\", function() {\n                        return y(Date.prototype.getDate.call(this), 2);\n                    } ],\n                    ddd: [ \"\" ],\n                    dddd: [ \"\" ],\n                    m: [ \"[1-9]|1[012]\", Date.prototype.setMonth, \"month\", function() {\n                        return Date.prototype.getMonth.call(this) + 1;\n                    } ],\n                    mm: [ \"0[1-9]|1[012]\", Date.prototype.setMonth, \"month\", function() {\n                        return y(Date.prototype.getMonth.call(this) + 1, 2);\n                    } ],\n                    mmm: [ \"\" ],\n                    mmmm: [ \"\" ],\n                    yy: [ \"[0-9]{2}\", Date.prototype.setFullYear, \"year\", function() {\n                        return y(Date.prototype.getFullYear.call(this), 2);\n                    } ],\n                    yyyy: [ \"[0-9]{4}\", Date.prototype.setFullYear, \"year\", function() {\n                        return y(Date.prototype.getFullYear.call(this), 4);\n                    } ],\n                    h: [ \"[1-9]|1[0-2]\", Date.prototype.setHours, \"hours\", Date.prototype.getHours ],\n                    hh: [ \"0[1-9]|1[0-2]\", Date.prototype.setHours, \"hours\", function() {\n                        return y(Date.prototype.getHours.call(this), 2);\n                    } ],\n                    hx: [ function(e) {\n                        return \"[0-9]{\".concat(e, \"}\");\n                    }, Date.prototype.setHours, \"hours\", function(e) {\n                        return Date.prototype.getHours;\n                    } ],\n                    H: [ \"1?[0-9]|2[0-3]\", Date.prototype.setHours, \"hours\", Date.prototype.getHours ],\n                    HH: [ \"0[0-9]|1[0-9]|2[0-3]\", Date.prototype.setHours, \"hours\", function() {\n                        return y(Date.prototype.getHours.call(this), 2);\n                    } ],\n                    Hx: [ function(e) {\n                        return \"[0-9]{\".concat(e, \"}\");\n                    }, Date.prototype.setHours, \"hours\", function(e) {\n                        return function() {\n                            return y(Date.prototype.getHours.call(this), e);\n                        };\n                    } ],\n                    M: [ \"[1-5]?[0-9]\", Date.prototype.setMinutes, \"minutes\", Date.prototype.getMinutes ],\n                    MM: [ \"0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]\", Date.prototype.setMinutes, \"minutes\", function() {\n                        return y(Date.prototype.getMinutes.call(this), 2);\n                    } ],\n                    s: [ \"[1-5]?[0-9]\", Date.prototype.setSeconds, \"seconds\", Date.prototype.getSeconds ],\n                    ss: [ \"0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]\", Date.prototype.setSeconds, \"seconds\", function() {\n                        return y(Date.prototype.getSeconds.call(this), 2);\n                    } ],\n                    l: [ \"[0-9]{3}\", Date.prototype.setMilliseconds, \"milliseconds\", function() {\n                        return y(Date.prototype.getMilliseconds.call(this), 3);\n                    } ],\n                    L: [ \"[0-9]{2}\", Date.prototype.setMilliseconds, \"milliseconds\", function() {\n                        return y(Date.prototype.getMilliseconds.call(this), 2);\n                    } ],\n                    t: [ \"[ap]\", p, \"ampm\", h, 1 ],\n                    tt: [ \"[ap]m\", p, \"ampm\", h, 2 ],\n                    T: [ \"[AP]\", p, \"ampm\", h, 1 ],\n                    TT: [ \"[AP]M\", p, \"ampm\", h, 2 ],\n                    Z: [ \"\" ],\n                    o: [ \"\" ],\n                    S: [ \"\" ]\n                }, d = {\n                    isoDate: \"yyyy-mm-dd\",\n                    isoTime: \"HH:MM:ss\",\n                    isoDateTime: \"yyyy-mm-dd'T'HH:MM:ss\",\n                    isoUtcDateTime: \"UTC:yyyy-mm-dd'T'HH:MM:ss'Z'\"\n                };\n                function p(e) {\n                    e.toLowerCase().includes(\"p\") && this.setHours(this.getHours() + 12);\n                }\n                function h() {}\n                function v(e) {\n                    var t = new RegExp(\"\\\\d+$\").exec(e[0]);\n                    if (t && void 0 !== t[0]) {\n                        var a = f[e[0][0] + \"x\"].slice(\"\");\n                        return a[0] = a[0](t[0]), a[3] = a[3](t[0]), a;\n                    }\n                    if (f[e[0]]) return f[e[0]];\n                }\n                function m(e) {\n                    if (!e.tokenizer) {\n                        var t = [], a = [];\n                        for (var i in f) if (/\\.*x$/.test(i)) {\n                            var n = i[0] + \"\\\\d+\";\n                            -1 === a.indexOf(n) && a.push(n);\n                        } else -1 === t.indexOf(i[0]) && t.push(i[0]);\n                        e.tokenizer = \"(\" + (a.length > 0 ? a.join(\"|\") + \"|\" : \"\") + t.join(\"+|\") + \")+?|.\", \n                        e.tokenizer = new RegExp(e.tokenizer, \"g\");\n                    }\n                    return e.tokenizer;\n                }\n                function g(e, t, a) {\n                    if (void 0 === e.rawday || !isFinite(e.rawday) && new Date(e.date.getFullYear(), isFinite(e.rawmonth) ? e.month : e.date.getMonth() + 1, 0).getDate() >= e.day || \"29\" == e.day && !Number.isFinite(e.rawyear) || new Date(e.date.getFullYear(), isFinite(e.rawmonth) ? e.month : e.date.getMonth() + 1, 0).getDate() >= e.day) return t;\n                    if (\"29\" == e.day) {\n                        var i = P(t.pos, a);\n                        if (\"yyyy\" === i.targetMatch[0] && t.pos - i.targetMatchIndex == 2) return t.remove = t.pos + 1, \n                        t;\n                    } else if (\"02\" == e.month && \"30\" == e.day && void 0 !== t.c) return e.day = \"03\", \n                    e.date.setDate(3), e.date.setMonth(1), t.insert = [ {\n                        pos: t.pos,\n                        c: \"0\"\n                    }, {\n                        pos: t.pos + 1,\n                        c: t.c\n                    } ], t.caret = o.seekNext.call(this, t.pos + 1), t;\n                    return !1;\n                }\n                function k(e, t, a, i) {\n                    var n, o, s = \"\";\n                    for (m(a).lastIndex = 0; n = m(a).exec(e); ) {\n                        if (void 0 === t) if (o = v(n)) s += \"(\" + o[0] + \")\"; else switch (n[0]) {\n                          case \"[\":\n                            s += \"(\";\n                            break;\n\n                          case \"]\":\n                            s += \")?\";\n                            break;\n\n                          default:\n                            s += (0, r.default)(n[0]);\n                        } else if (o = v(n)) if (!0 !== i && o[3]) s += o[3].call(t.date); else o[2] ? s += t[\"raw\" + o[2]] : s += n[0]; else s += n[0];\n                    }\n                    return s;\n                }\n                function y(e, t, a) {\n                    for (e = String(e), t = t || 2; e.length < t; ) e = a ? e + \"0\" : \"0\" + e;\n                    return e;\n                }\n                function b(e, t, a) {\n                    var i, n, r, o = {\n                        date: new Date(1, 0, 1)\n                    }, l = e;\n                    function u(e, t, a) {\n                        if (e[i] = \"ampm\" === i ? t : t.replace(/[^0-9]/g, \"0\"), e[\"raw\" + i] = t, void 0 !== r) {\n                            var n = e[i];\n                            (\"day\" === i && 29 === parseInt(n) || \"month\" === i && 2 === parseInt(n)) && (29 !== parseInt(e.day) || 2 !== parseInt(e.month) || \"\" !== e.year && void 0 !== e.year || e.date.setFullYear(2012, 1, 29)), \n                            \"day\" === i && 0 === parseInt(n) && (n = 1), \"month\" === i && (n = parseInt(n)) > 0 && (n -= 1), \n                            \"year\" === i && n.length < 4 && (n = y(n, 4, !0)), \"\" === n || isNaN(n) || r.call(e.date, n), \n                            \"ampm\" === i && r.call(e.date, n);\n                        }\n                    }\n                    if (\"string\" == typeof l) {\n                        for (m(a).lastIndex = 0; n = m(a).exec(t); ) {\n                            var c = new RegExp(\"\\\\d+$\").exec(n[0]), d = c ? n[0][0] + \"x\" : n[0], p = void 0;\n                            if (c) {\n                                var h = m(a).lastIndex, v = P(n.index, a);\n                                m(a).lastIndex = h, p = l.slice(0, l.indexOf(v.nextMatch[0]));\n                            } else p = l.slice(0, d.length);\n                            Object.prototype.hasOwnProperty.call(f, d) && (i = f[d][2], r = f[d][1], u(o, p)), \n                            l = l.slice(p.length);\n                        }\n                        return o;\n                    }\n                    if (l && \"object\" === s(l) && Object.prototype.hasOwnProperty.call(l, \"date\")) return l;\n                }\n                function x(e, t) {\n                    return k(t.inputFormat, {\n                        date: e\n                    }, t);\n                }\n                function P(e, t) {\n                    var a, i, n = 0, r = 0;\n                    for (m(t).lastIndex = 0; i = m(t).exec(t.inputFormat); ) {\n                        var o = new RegExp(\"\\\\d+$\").exec(i[0]);\n                        if ((n += r = o ? parseInt(o[0]) : i[0].length) >= e) {\n                            a = i, i = m(t).exec(t.inputFormat);\n                            break;\n                        }\n                    }\n                    return {\n                        targetMatchIndex: n - r,\n                        nextMatch: i,\n                        targetMatch: a\n                    };\n                }\n                i.default.extendAliases({\n                    datetime: {\n                        mask: function(e) {\n                            return e.numericInput = !1, f.S = e.i18n.ordinalSuffix.join(\"|\"), e.inputFormat = d[e.inputFormat] || e.inputFormat, \n                            e.displayFormat = d[e.displayFormat] || e.displayFormat || e.inputFormat, e.outputFormat = d[e.outputFormat] || e.outputFormat || e.inputFormat, \n                            e.placeholder = \"\" !== e.placeholder ? e.placeholder : e.inputFormat.replace(/[[\\]]/, \"\"), \n                            e.regex = k(e.inputFormat, void 0, e), e.min = b(e.min, e.inputFormat, e), e.max = b(e.max, e.inputFormat, e), \n                            null;\n                        },\n                        placeholder: \"\",\n                        inputFormat: \"isoDateTime\",\n                        displayFormat: void 0,\n                        outputFormat: void 0,\n                        min: null,\n                        max: null,\n                        skipOptionalPartCharacter: \"\",\n                        i18n: {\n                            dayNames: [ \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\", \"Sunday\" ],\n                            monthNames: [ \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\", \"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\" ],\n                            ordinalSuffix: [ \"st\", \"nd\", \"rd\", \"th\" ]\n                        },\n                        preValidation: function(e, t, a, i, n, r, o, s) {\n                            if (s) return !0;\n                            if (isNaN(a) && e[t] !== a) {\n                                var l = P(t, n);\n                                if (l.nextMatch && l.nextMatch[0] === a && l.targetMatch[0].length > 1) {\n                                    var u = f[l.targetMatch[0]][0];\n                                    if (new RegExp(u).test(\"0\" + e[t - 1])) return e[t] = e[t - 1], e[t - 1] = \"0\", \n                                    {\n                                        fuzzy: !0,\n                                        buffer: e,\n                                        refreshFromBuffer: {\n                                            start: t - 1,\n                                            end: t + 1\n                                        },\n                                        pos: t + 1\n                                    };\n                                }\n                            }\n                            return !0;\n                        },\n                        postValidation: function(e, t, a, i, n, r, o, s) {\n                            var l, u;\n                            if (o) return !0;\n                            if (!1 === i && (((l = P(t + 1, n)).targetMatch && l.targetMatchIndex === t && l.targetMatch[0].length > 1 && void 0 !== f[l.targetMatch[0]] || (l = P(t + 2, n)).targetMatch && l.targetMatchIndex === t + 1 && l.targetMatch[0].length > 1 && void 0 !== f[l.targetMatch[0]]) && (u = f[l.targetMatch[0]][0]), \n                            void 0 !== u && (void 0 !== r.validPositions[t + 1] && new RegExp(u).test(a + \"0\") ? (e[t] = a, \n                            e[t + 1] = \"0\", i = {\n                                pos: t + 2,\n                                caret: t\n                            }) : new RegExp(u).test(\"0\" + a) && (e[t] = \"0\", e[t + 1] = a, i = {\n                                pos: t + 2\n                            })), !1 === i)) return i;\n                            if (i.fuzzy && (e = i.buffer, t = i.pos), (l = P(t, n)).targetMatch && l.targetMatch[0] && void 0 !== f[l.targetMatch[0]]) {\n                                u = f[l.targetMatch[0]][0];\n                                var d = e.slice(l.targetMatchIndex, l.targetMatchIndex + l.targetMatch[0].length);\n                                !1 === new RegExp(u).test(d.join(\"\")) && 2 === l.targetMatch[0].length && r.validPositions[l.targetMatchIndex] && r.validPositions[l.targetMatchIndex + 1] && (r.validPositions[l.targetMatchIndex + 1].input = \"0\");\n                            }\n                            var p = i, h = b(e.join(\"\"), n.inputFormat, n);\n                            return p && h.date.getTime() == h.date.getTime() && (n.prefillYear && (p = function(e, t, a) {\n                                if (e.year !== e.rawyear) {\n                                    var i = c.toString(), n = e.rawyear.replace(/[^0-9]/g, \"\"), r = i.slice(0, n.length), o = i.slice(n.length);\n                                    if (2 === n.length && n === r) {\n                                        var s = new Date(c, e.month - 1, e.day);\n                                        e.day == s.getDate() && (!a.max || a.max.date.getTime() >= s.getTime()) && (e.date.setFullYear(c), \n                                        e.year = i, t.insert = [ {\n                                            pos: t.pos + 1,\n                                            c: o[0]\n                                        }, {\n                                            pos: t.pos + 2,\n                                            c: o[1]\n                                        } ]);\n                                    }\n                                }\n                                return t;\n                            }(h, p, n)), p = function(e, t, a, i, n) {\n                                if (!t) return t;\n                                if (a.min) {\n                                    if (e.rawyear) {\n                                        var r, o = e.rawyear.replace(/[^0-9]/g, \"\"), s = a.min.year.substr(0, o.length);\n                                        if (o < s) {\n                                            var l = P(t.pos, a);\n                                            if (o = e.rawyear.substr(0, t.pos - l.targetMatchIndex + 1).replace(/[^0-9]/g, \"0\"), \n                                            (s = a.min.year.substr(0, o.length)) <= o) return t.remove = l.targetMatchIndex + o.length, \n                                            t;\n                                            if (o = \"yyyy\" === l.targetMatch[0] ? e.rawyear.substr(1, 1) : e.rawyear.substr(0, 1), \n                                            s = a.min.year.substr(2, 1), r = a.max ? a.max.year.substr(2, 1) : o, 1 === o.length && s <= o && o <= r && !0 !== n) return \"yyyy\" === l.targetMatch[0] ? (t.insert = [ {\n                                                pos: t.pos + 1,\n                                                c: o,\n                                                strict: !0\n                                            } ], t.caret = t.pos + 2, i.validPositions[t.pos].input = a.min.year[1]) : (t.insert = [ {\n                                                pos: t.pos + 1,\n                                                c: a.min.year[1],\n                                                strict: !0\n                                            }, {\n                                                pos: t.pos + 2,\n                                                c: o,\n                                                strict: !0\n                                            } ], t.caret = t.pos + 3, i.validPositions[t.pos].input = a.min.year[0]), t;\n                                            t = !1;\n                                        }\n                                    }\n                                    for (var u in e) -1 === u.indexOf(\"raw\") && e[\"raw\".concat(u)] && (e[u], e[\"raw\".concat(u)]);\n                                    t && e.year && e.year === e.rawyear && a.min.date.getTime() == a.min.date.getTime() && (t = a.min.date.getTime() <= e.date.getTime());\n                                }\n                                return t && a.max && a.max.date.getTime() == a.max.date.getTime() && (t = a.max.date.getTime() >= e.date.getTime()), \n                                t;\n                            }(h, p = g.call(this, h, p, n), n, r, s)), void 0 !== t && p && i.pos !== t ? {\n                                buffer: k(n.inputFormat, h, n).split(\"\"),\n                                refreshFromBuffer: {\n                                    start: t,\n                                    end: i.pos\n                                },\n                                pos: i.caret || i.pos\n                            } : p;\n                        },\n                        onKeyDown: function(e, t, a, i) {\n                            e.ctrlKey && e.keyCode === n.default.RIGHT && (this.inputmask._valueSet(x(new Date, i)), \n                            u(this).trigger(\"setvalue\"));\n                        },\n                        onUnMask: function(e, t, a) {\n                            return t ? k(a.outputFormat, b(e, a.inputFormat, a), a, !0) : t;\n                        },\n                        casing: function(e, t, a, i) {\n                            return 0 == t.nativeDef.indexOf(\"[ap]\") ? e.toLowerCase() : 0 == t.nativeDef.indexOf(\"[AP]\") ? e.toUpperCase() : e;\n                        },\n                        onBeforeMask: function(e, t) {\n                            return \"[object Date]\" === Object.prototype.toString.call(e) && (e = x(e, t)), e;\n                        },\n                        insertMode: !1,\n                        shiftPositions: !1,\n                        keepStatic: !1,\n                        inputmode: \"numeric\",\n                        prefillYear: !0\n                    }\n                });\n            },\n            3851: function(e, t, a) {\n                var i, n = (i = a(2394)) && i.__esModule ? i : {\n                    default: i\n                }, r = a(8711), o = a(4713);\n                n.default.extendDefinitions({\n                    A: {\n                        validator: \"[A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\",\n                        casing: \"upper\"\n                    },\n                    \"&\": {\n                        validator: \"[0-9A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\",\n                        casing: \"upper\"\n                    },\n                    \"#\": {\n                        validator: \"[0-9A-Fa-f]\",\n                        casing: \"upper\"\n                    }\n                });\n                var s = new RegExp(\"25[0-5]|2[0-4][0-9]|[01][0-9][0-9]\");\n                function l(e, t, a, i, n) {\n                    return a - 1 > -1 && \".\" !== t.buffer[a - 1] ? (e = t.buffer[a - 1] + e, e = a - 2 > -1 && \".\" !== t.buffer[a - 2] ? t.buffer[a - 2] + e : \"0\" + e) : e = \"00\" + e, \n                    s.test(e);\n                }\n                n.default.extendAliases({\n                    cssunit: {\n                        regex: \"[+-]?[0-9]+\\\\.?([0-9]+)?(px|em|rem|ex|%|in|cm|mm|pt|pc)\"\n                    },\n                    url: {\n                        regex: \"(https?|ftp)://.*\",\n                        autoUnmask: !1,\n                        keepStatic: !1,\n                        tabThrough: !0\n                    },\n                    ip: {\n                        mask: \"i[i[i]].j[j[j]].k[k[k]].l[l[l]]\",\n                        definitions: {\n                            i: {\n                                validator: l\n                            },\n                            j: {\n                                validator: l\n                            },\n                            k: {\n                                validator: l\n                            },\n                            l: {\n                                validator: l\n                            }\n                        },\n                        onUnMask: function(e, t, a) {\n                            return e;\n                        },\n                        inputmode: \"numeric\"\n                    },\n                    email: {\n                        mask: \"*{1,64}[.*{1,64}][.*{1,64}][.*{1,63}]@-{1,63}.-{1,63}[.-{1,63}][.-{1,63}]\",\n                        greedy: !1,\n                        casing: \"lower\",\n                        onBeforePaste: function(e, t) {\n                            return (e = e.toLowerCase()).replace(\"mailto:\", \"\");\n                        },\n                        definitions: {\n                            \"*\": {\n                                validator: \"[0-9\\uff11-\\uff19A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5!#$%&'*+/=?^_`{|}~-]\"\n                            },\n                            \"-\": {\n                                validator: \"[0-9A-Za-z-]\"\n                            }\n                        },\n                        onUnMask: function(e, t, a) {\n                            return e;\n                        },\n                        inputmode: \"email\"\n                    },\n                    mac: {\n                        mask: \"##:##:##:##:##:##\"\n                    },\n                    vin: {\n                        mask: \"V{13}9{4}\",\n                        definitions: {\n                            V: {\n                                validator: \"[A-HJ-NPR-Za-hj-npr-z\\\\d]\",\n                                casing: \"upper\"\n                            }\n                        },\n                        clearIncomplete: !0,\n                        autoUnmask: !0\n                    },\n                    ssn: {\n                        mask: \"999-99-9999\",\n                        postValidation: function(e, t, a, i, n, s, l) {\n                            var u = o.getMaskTemplate.call(this, !0, r.getLastValidPosition.call(this), !0, !0);\n                            return /^(?!219-09-9999|078-05-1120)(?!666|000|9.{2}).{3}-(?!00).{2}-(?!0{4}).{4}$/.test(u.join(\"\"));\n                        }\n                    }\n                });\n            },\n            207: function(e, t, a) {\n                var i = s(a(2394)), n = s(a(4528)), r = s(a(7184)), o = a(8711);\n                function s(e) {\n                    return e && e.__esModule ? e : {\n                        default: e\n                    };\n                }\n                var l = i.default.dependencyLib;\n                function u(e, t) {\n                    for (var a = \"\", n = 0; n < e.length; n++) i.default.prototype.definitions[e.charAt(n)] || t.definitions[e.charAt(n)] || t.optionalmarker[0] === e.charAt(n) || t.optionalmarker[1] === e.charAt(n) || t.quantifiermarker[0] === e.charAt(n) || t.quantifiermarker[1] === e.charAt(n) || t.groupmarker[0] === e.charAt(n) || t.groupmarker[1] === e.charAt(n) || t.alternatormarker === e.charAt(n) ? a += \"\\\\\" + e.charAt(n) : a += e.charAt(n);\n                    return a;\n                }\n                function c(e, t, a, i) {\n                    if (e.length > 0 && t > 0 && (!a.digitsOptional || i)) {\n                        var n = e.indexOf(a.radixPoint), r = !1;\n                        a.negationSymbol.back === e[e.length - 1] && (r = !0, e.length--), -1 === n && (e.push(a.radixPoint), \n                        n = e.length - 1);\n                        for (var o = 1; o <= t; o++) isFinite(e[n + o]) || (e[n + o] = \"0\");\n                    }\n                    return r && e.push(a.negationSymbol.back), e;\n                }\n                function f(e, t) {\n                    var a = 0;\n                    if (\"+\" === e) {\n                        for (a in t.validPositions) ;\n                        a = o.seekNext.call(this, parseInt(a));\n                    }\n                    for (var i in t.tests) if ((i = parseInt(i)) >= a) for (var n = 0, r = t.tests[i].length; n < r; n++) if ((void 0 === t.validPositions[i] || \"-\" === e) && t.tests[i][n].match.def === e) return i + (void 0 !== t.validPositions[i] && \"-\" !== e ? 1 : 0);\n                    return a;\n                }\n                function d(e, t) {\n                    var a = -1;\n                    for (var i in t.validPositions) {\n                        var n = t.validPositions[i];\n                        if (n && n.match.def === e) {\n                            a = parseInt(i);\n                            break;\n                        }\n                    }\n                    return a;\n                }\n                function p(e, t, a, i, n) {\n                    var r = t.buffer ? t.buffer.indexOf(n.radixPoint) : -1, o = (-1 !== r || i && n.jitMasking) && new RegExp(n.definitions[9].validator).test(e);\n                    return n._radixDance && -1 !== r && o && null == t.validPositions[r] ? {\n                        insert: {\n                            pos: r === a ? r + 1 : r,\n                            c: n.radixPoint\n                        },\n                        pos: a\n                    } : o;\n                }\n                i.default.extendAliases({\n                    numeric: {\n                        mask: function(e) {\n                            e.repeat = 0, e.groupSeparator === e.radixPoint && e.digits && \"0\" !== e.digits && (\".\" === e.radixPoint ? e.groupSeparator = \",\" : \",\" === e.radixPoint ? e.groupSeparator = \".\" : e.groupSeparator = \"\"), \n                            \" \" === e.groupSeparator && (e.skipOptionalPartCharacter = void 0), e.placeholder.length > 1 && (e.placeholder = e.placeholder.charAt(0)), \n                            \"radixFocus\" === e.positionCaretOnClick && \"\" === e.placeholder && (e.positionCaretOnClick = \"lvp\");\n                            var t = \"0\", a = e.radixPoint;\n                            !0 === e.numericInput && void 0 === e.__financeInput ? (t = \"1\", e.positionCaretOnClick = \"radixFocus\" === e.positionCaretOnClick ? \"lvp\" : e.positionCaretOnClick, \n                            e.digitsOptional = !1, isNaN(e.digits) && (e.digits = 2), e._radixDance = !1, a = \",\" === e.radixPoint ? \"?\" : \"!\", \n                            \"\" !== e.radixPoint && void 0 === e.definitions[a] && (e.definitions[a] = {}, e.definitions[a].validator = \"[\" + e.radixPoint + \"]\", \n                            e.definitions[a].placeholder = e.radixPoint, e.definitions[a].static = !0, e.definitions[a].generated = !0)) : (e.__financeInput = !1, \n                            e.numericInput = !0);\n                            var i, n = \"[+]\";\n                            if (n += u(e.prefix, e), \"\" !== e.groupSeparator ? (void 0 === e.definitions[e.groupSeparator] && (e.definitions[e.groupSeparator] = {}, \n                            e.definitions[e.groupSeparator].validator = \"[\" + e.groupSeparator + \"]\", e.definitions[e.groupSeparator].placeholder = e.groupSeparator, \n                            e.definitions[e.groupSeparator].static = !0, e.definitions[e.groupSeparator].generated = !0), \n                            n += e._mask(e)) : n += \"9{+}\", void 0 !== e.digits && 0 !== e.digits) {\n                                var o = e.digits.toString().split(\",\");\n                                isFinite(o[0]) && o[1] && isFinite(o[1]) ? n += a + t + \"{\" + e.digits + \"}\" : (isNaN(e.digits) || parseInt(e.digits) > 0) && (e.digitsOptional || e.jitMasking ? (i = n + a + t + \"{0,\" + e.digits + \"}\", \n                                e.keepStatic = !0) : n += a + t + \"{\" + e.digits + \"}\");\n                            } else e.inputmode = \"numeric\";\n                            return n += u(e.suffix, e), n += \"[-]\", i && (n = [ i + u(e.suffix, e) + \"[-]\", n ]), \n                            e.greedy = !1, function(e) {\n                                void 0 === e.parseMinMaxOptions && (null !== e.min && (e.min = e.min.toString().replace(new RegExp((0, \n                                r.default)(e.groupSeparator), \"g\"), \"\"), \",\" === e.radixPoint && (e.min = e.min.replace(e.radixPoint, \".\")), \n                                e.min = isFinite(e.min) ? parseFloat(e.min) : NaN, isNaN(e.min) && (e.min = Number.MIN_VALUE)), \n                                null !== e.max && (e.max = e.max.toString().replace(new RegExp((0, r.default)(e.groupSeparator), \"g\"), \"\"), \n                                \",\" === e.radixPoint && (e.max = e.max.replace(e.radixPoint, \".\")), e.max = isFinite(e.max) ? parseFloat(e.max) : NaN, \n                                isNaN(e.max) && (e.max = Number.MAX_VALUE)), e.parseMinMaxOptions = \"done\");\n                            }(e), n;\n                        },\n                        _mask: function(e) {\n                            return \"(\" + e.groupSeparator + \"999){+|1}\";\n                        },\n                        digits: \"*\",\n                        digitsOptional: !0,\n                        enforceDigitsOnBlur: !1,\n                        radixPoint: \".\",\n                        positionCaretOnClick: \"radixFocus\",\n                        _radixDance: !0,\n                        groupSeparator: \"\",\n                        allowMinus: !0,\n                        negationSymbol: {\n                            front: \"-\",\n                            back: \"\"\n                        },\n                        prefix: \"\",\n                        suffix: \"\",\n                        min: null,\n                        max: null,\n                        SetMaxOnOverflow: !1,\n                        step: 1,\n                        inputType: \"text\",\n                        unmaskAsNumber: !1,\n                        roundingFN: Math.round,\n                        inputmode: \"decimal\",\n                        shortcuts: {\n                            k: \"000\",\n                            m: \"000000\"\n                        },\n                        placeholder: \"0\",\n                        greedy: !1,\n                        rightAlign: !0,\n                        insertMode: !0,\n                        autoUnmask: !1,\n                        skipOptionalPartCharacter: \"\",\n                        usePrototypeDefinitions: !1,\n                        definitions: {\n                            0: {\n                                validator: p\n                            },\n                            1: {\n                                validator: p,\n                                definitionSymbol: \"9\"\n                            },\n                            9: {\n                                validator: \"[0-9\\uff10-\\uff19\\u0660-\\u0669\\u06f0-\\u06f9]\",\n                                definitionSymbol: \"*\"\n                            },\n                            \"+\": {\n                                validator: function(e, t, a, i, n) {\n                                    return n.allowMinus && (\"-\" === e || e === n.negationSymbol.front);\n                                }\n                            },\n                            \"-\": {\n                                validator: function(e, t, a, i, n) {\n                                    return n.allowMinus && e === n.negationSymbol.back;\n                                }\n                            }\n                        },\n                        preValidation: function(e, t, a, i, n, r, o, s) {\n                            var l;\n                            if (!1 !== n.__financeInput && a === n.radixPoint) return !1;\n                            if (l = n.shortcuts && n.shortcuts[a]) {\n                                if (l.length > 1) for (var u = [], c = 0; c < l.length; c++) u.push({\n                                    pos: t + c,\n                                    c: l[c],\n                                    strict: !1\n                                });\n                                return {\n                                    insert: u\n                                };\n                            }\n                            var p = e.indexOf(n.radixPoint), h = t;\n                            if (t = function(e, t, a, i, n) {\n                                return n._radixDance && n.numericInput && t !== n.negationSymbol.back && e <= a && (a > 0 || t == n.radixPoint) && (void 0 === i.validPositions[e - 1] || i.validPositions[e - 1].input !== n.negationSymbol.back) && (e -= 1), \n                                e;\n                            }(t, a, p, r, n), \"-\" === a || a === n.negationSymbol.front) {\n                                if (!0 !== n.allowMinus) return !1;\n                                var v = !1, m = d(\"+\", r), g = d(\"-\", r);\n                                return -1 !== m && (v = [ m, g ]), !1 !== v ? {\n                                    remove: v,\n                                    caret: h - n.negationSymbol.back.length\n                                } : {\n                                    insert: [ {\n                                        pos: f.call(this, \"+\", r),\n                                        c: n.negationSymbol.front,\n                                        fromIsValid: !0\n                                    }, {\n                                        pos: f.call(this, \"-\", r),\n                                        c: n.negationSymbol.back,\n                                        fromIsValid: void 0\n                                    } ],\n                                    caret: h + n.negationSymbol.back.length\n                                };\n                            }\n                            if (a === n.groupSeparator) return {\n                                caret: h\n                            };\n                            if (s) return !0;\n                            if (-1 !== p && !0 === n._radixDance && !1 === i && a === n.radixPoint && void 0 !== n.digits && (isNaN(n.digits) || parseInt(n.digits) > 0) && p !== t) return {\n                                caret: n._radixDance && t === p - 1 ? p + 1 : p\n                            };\n                            if (!1 === n.__financeInput) if (i) {\n                                if (n.digitsOptional) return {\n                                    rewritePosition: o.end\n                                };\n                                if (!n.digitsOptional) {\n                                    if (o.begin > p && o.end <= p) return a === n.radixPoint ? {\n                                        insert: {\n                                            pos: p + 1,\n                                            c: \"0\",\n                                            fromIsValid: !0\n                                        },\n                                        rewritePosition: p\n                                    } : {\n                                        rewritePosition: p + 1\n                                    };\n                                    if (o.begin < p) return {\n                                        rewritePosition: o.begin - 1\n                                    };\n                                }\n                            } else if (!n.showMaskOnHover && !n.showMaskOnFocus && !n.digitsOptional && n.digits > 0 && \"\" === this.__valueGet.call(this.el)) return {\n                                rewritePosition: p\n                            };\n                            return {\n                                rewritePosition: t\n                            };\n                        },\n                        postValidation: function(e, t, a, i, n, r, o) {\n                            if (!1 === i) return i;\n                            if (o) return !0;\n                            if (null !== n.min || null !== n.max) {\n                                var s = n.onUnMask(e.slice().reverse().join(\"\"), void 0, l.extend({}, n, {\n                                    unmaskAsNumber: !0\n                                }));\n                                if (null !== n.min && s < n.min && (s.toString().length > n.min.toString().length || s < 0)) return !1;\n                                if (null !== n.max && s > n.max) return !!n.SetMaxOnOverflow && {\n                                    refreshFromBuffer: !0,\n                                    buffer: c(n.max.toString().replace(\".\", n.radixPoint).split(\"\"), n.digits, n).reverse()\n                                };\n                            }\n                            return i;\n                        },\n                        onUnMask: function(e, t, a) {\n                            if (\"\" === t && !0 === a.nullable) return t;\n                            var i = e.replace(a.prefix, \"\");\n                            return i = (i = i.replace(a.suffix, \"\")).replace(new RegExp((0, r.default)(a.groupSeparator), \"g\"), \"\"), \n                            \"\" !== a.placeholder.charAt(0) && (i = i.replace(new RegExp(a.placeholder.charAt(0), \"g\"), \"0\")), \n                            a.unmaskAsNumber ? (\"\" !== a.radixPoint && -1 !== i.indexOf(a.radixPoint) && (i = i.replace(r.default.call(this, a.radixPoint), \".\")), \n                            i = (i = i.replace(new RegExp(\"^\" + (0, r.default)(a.negationSymbol.front)), \"-\")).replace(new RegExp((0, \n                            r.default)(a.negationSymbol.back) + \"$\"), \"\"), Number(i)) : i;\n                        },\n                        isComplete: function(e, t) {\n                            var a = (t.numericInput ? e.slice().reverse() : e).join(\"\");\n                            return a = (a = (a = (a = (a = a.replace(new RegExp(\"^\" + (0, r.default)(t.negationSymbol.front)), \"-\")).replace(new RegExp((0, \n                            r.default)(t.negationSymbol.back) + \"$\"), \"\")).replace(t.prefix, \"\")).replace(t.suffix, \"\")).replace(new RegExp((0, \n                            r.default)(t.groupSeparator) + \"([0-9]{3})\", \"g\"), \"$1\"), \",\" === t.radixPoint && (a = a.replace((0, \n                            r.default)(t.radixPoint), \".\")), isFinite(a);\n                        },\n                        onBeforeMask: function(e, t) {\n                            var a = t.radixPoint || \",\";\n                            isFinite(t.digits) && (t.digits = parseInt(t.digits)), \"number\" != typeof e && \"number\" !== t.inputType || \"\" === a || (e = e.toString().replace(\".\", a));\n                            var i = \"-\" === e.charAt(0) || e.charAt(0) === t.negationSymbol.front, n = e.split(a), o = n[0].replace(/[^\\-0-9]/g, \"\"), s = n.length > 1 ? n[1].replace(/[^0-9]/g, \"\") : \"\", l = n.length > 1;\n                            e = o + (\"\" !== s ? a + s : s);\n                            var u = 0;\n                            if (\"\" !== a && (u = t.digitsOptional ? t.digits < s.length ? t.digits : s.length : t.digits, \n                            \"\" !== s || !t.digitsOptional)) {\n                                var f = Math.pow(10, u || 1);\n                                e = e.replace((0, r.default)(a), \".\"), isNaN(parseFloat(e)) || (e = (t.roundingFN(parseFloat(e) * f) / f).toFixed(u)), \n                                e = e.toString().replace(\".\", a);\n                            }\n                            if (0 === t.digits && -1 !== e.indexOf(a) && (e = e.substring(0, e.indexOf(a))), \n                            null !== t.min || null !== t.max) {\n                                var d = e.toString().replace(a, \".\");\n                                null !== t.min && d < t.min ? e = t.min.toString().replace(\".\", a) : null !== t.max && d > t.max && (e = t.max.toString().replace(\".\", a));\n                            }\n                            return i && \"-\" !== e.charAt(0) && (e = \"-\" + e), c(e.toString().split(\"\"), u, t, l).join(\"\");\n                        },\n                        onBeforeWrite: function(e, t, a, i) {\n                            function n(e, t) {\n                                if (!1 !== i.__financeInput || t) {\n                                    var a = e.indexOf(i.radixPoint);\n                                    -1 !== a && e.splice(a, 1);\n                                }\n                                if (\"\" !== i.groupSeparator) for (;-1 !== (a = e.indexOf(i.groupSeparator)); ) e.splice(a, 1);\n                                return e;\n                            }\n                            var o, s = function(e, t) {\n                                var a = new RegExp(\"(^\" + (\"\" !== t.negationSymbol.front ? (0, r.default)(t.negationSymbol.front) + \"?\" : \"\") + (0, \n                                r.default)(t.prefix) + \")(.*)(\" + (0, r.default)(t.suffix) + (\"\" != t.negationSymbol.back ? (0, \n                                r.default)(t.negationSymbol.back) + \"?\" : \"\") + \"$)\").exec(e.slice().reverse().join(\"\")), i = a ? a[2] : \"\", n = !1;\n                                return i && (i = i.split(t.radixPoint.charAt(0))[0], n = new RegExp(\"^[0\" + t.groupSeparator + \"]*\").exec(i)), \n                                !(!n || !(n[0].length > 1 || n[0].length > 0 && n[0].length < i.length)) && n;\n                            }(t, i);\n                            if (s) for (var u = t.join(\"\").lastIndexOf(s[0].split(\"\").reverse().join(\"\")) - (s[0] == s.input ? 0 : 1), f = s[0] == s.input ? 1 : 0, d = s[0].length - f; d > 0; d--) delete this.maskset.validPositions[u + d], \n                            delete t[u + d];\n                            if (e) switch (e.type) {\n                              case \"blur\":\n                              case \"checkval\":\n                                if (null !== i.min) {\n                                    var p = i.onUnMask(t.slice().reverse().join(\"\"), void 0, l.extend({}, i, {\n                                        unmaskAsNumber: !0\n                                    }));\n                                    if (null !== i.min && p < i.min) return {\n                                        refreshFromBuffer: !0,\n                                        buffer: c(i.min.toString().replace(\".\", i.radixPoint).split(\"\"), i.digits, i).reverse()\n                                    };\n                                }\n                                if (t[t.length - 1] === i.negationSymbol.front) {\n                                    var h = new RegExp(\"(^\" + (\"\" != i.negationSymbol.front ? (0, r.default)(i.negationSymbol.front) + \"?\" : \"\") + (0, \n                                    r.default)(i.prefix) + \")(.*)(\" + (0, r.default)(i.suffix) + (\"\" != i.negationSymbol.back ? (0, \n                                    r.default)(i.negationSymbol.back) + \"?\" : \"\") + \"$)\").exec(n(t.slice(), !0).reverse().join(\"\"));\n                                    0 == (h ? h[2] : \"\") && (o = {\n                                        refreshFromBuffer: !0,\n                                        buffer: [ 0 ]\n                                    });\n                                } else \"\" !== i.radixPoint && t[0] === i.radixPoint && (o && o.buffer ? o.buffer.shift() : (t.shift(), \n                                o = {\n                                    refreshFromBuffer: !0,\n                                    buffer: n(t)\n                                }));\n                                if (i.enforceDigitsOnBlur) {\n                                    var v = (o = o || {}) && o.buffer || t.slice().reverse();\n                                    o.refreshFromBuffer = !0, o.buffer = c(v, i.digits, i, !0).reverse();\n                                }\n                            }\n                            return o;\n                        },\n                        onKeyDown: function(e, t, a, i) {\n                            var r, o = l(this);\n                            if (e.ctrlKey) switch (e.keyCode) {\n                              case n.default.UP:\n                                return this.inputmask.__valueSet.call(this, parseFloat(this.inputmask.unmaskedvalue()) + parseInt(i.step)), \n                                o.trigger(\"setvalue\"), !1;\n\n                              case n.default.DOWN:\n                                return this.inputmask.__valueSet.call(this, parseFloat(this.inputmask.unmaskedvalue()) - parseInt(i.step)), \n                                o.trigger(\"setvalue\"), !1;\n                            }\n                            if (!e.shiftKey && (e.keyCode === n.default.DELETE || e.keyCode === n.default.BACKSPACE || e.keyCode === n.default.BACKSPACE_SAFARI) && a.begin !== t.length) {\n                                if (t[e.keyCode === n.default.DELETE ? a.begin - 1 : a.end] === i.negationSymbol.front) return r = t.slice().reverse(), \n                                \"\" !== i.negationSymbol.front && r.shift(), \"\" !== i.negationSymbol.back && r.pop(), \n                                o.trigger(\"setvalue\", [ r.join(\"\"), a.begin ]), !1;\n                                if (!0 === i._radixDance) {\n                                    var s = t.indexOf(i.radixPoint);\n                                    if (i.digitsOptional) {\n                                        if (0 === s) return (r = t.slice().reverse()).pop(), o.trigger(\"setvalue\", [ r.join(\"\"), a.begin >= r.length ? r.length : a.begin ]), \n                                        !1;\n                                    } else if (-1 !== s && (a.begin < s || a.end < s || e.keyCode === n.default.DELETE && a.begin === s)) return a.begin !== a.end || e.keyCode !== n.default.BACKSPACE && e.keyCode !== n.default.BACKSPACE_SAFARI || a.begin++, \n                                    (r = t.slice().reverse()).splice(r.length - a.begin, a.begin - a.end + 1), r = c(r, i.digits, i).join(\"\"), \n                                    o.trigger(\"setvalue\", [ r, a.begin >= r.length ? s + 1 : a.begin ]), !1;\n                                }\n                            }\n                        }\n                    },\n                    currency: {\n                        prefix: \"\",\n                        groupSeparator: \",\",\n                        alias: \"numeric\",\n                        digits: 2,\n                        digitsOptional: !1\n                    },\n                    decimal: {\n                        alias: \"numeric\"\n                    },\n                    integer: {\n                        alias: \"numeric\",\n                        inputmode: \"numeric\",\n                        digits: 0\n                    },\n                    percentage: {\n                        alias: \"numeric\",\n                        min: 0,\n                        max: 100,\n                        suffix: \" %\",\n                        digits: 0,\n                        allowMinus: !1\n                    },\n                    indianns: {\n                        alias: \"numeric\",\n                        _mask: function(e) {\n                            return \"(\" + e.groupSeparator + \"99){*|1}(\" + e.groupSeparator + \"999){1|1}\";\n                        },\n                        groupSeparator: \",\",\n                        radixPoint: \".\",\n                        placeholder: \"0\",\n                        digits: 2,\n                        digitsOptional: !1\n                    }\n                });\n            },\n            9380: function(e, t, a) {\n                var i;\n                Object.defineProperty(t, \"__esModule\", {\n                    value: !0\n                }), t.default = void 0;\n                var n = ((i = a(8741)) && i.__esModule ? i : {\n                    default: i\n                }).default ? window : {};\n                t.default = n;\n            },\n            7760: function(e, t, a) {\n                Object.defineProperty(t, \"__esModule\", {\n                    value: !0\n                }), t.applyInputValue = c, t.clearOptionalTail = f, t.checkVal = d, t.HandleNativePlaceholder = function(e, t) {\n                    var a = e ? e.inputmask : this;\n                    if (l.ie) {\n                        if (e.inputmask._valueGet() !== t && (e.placeholder !== t || \"\" === e.placeholder)) {\n                            var i = o.getBuffer.call(a).slice(), n = e.inputmask._valueGet();\n                            if (n !== t) {\n                                var r = o.getLastValidPosition.call(a);\n                                -1 === r && n === o.getBufferTemplate.call(a).join(\"\") ? i = [] : -1 !== r && f.call(a, i), \n                                p(e, i);\n                            }\n                        }\n                    } else e.placeholder !== t && (e.placeholder = t, \"\" === e.placeholder && e.removeAttribute(\"placeholder\"));\n                }, t.unmaskedvalue = function(e) {\n                    var t = e ? e.inputmask : this, a = t.opts, i = t.maskset;\n                    if (e) {\n                        if (void 0 === e.inputmask) return e.value;\n                        e.inputmask && e.inputmask.refreshValue && c(e, e.inputmask._valueGet(!0));\n                    }\n                    var n = [], r = i.validPositions;\n                    for (var s in r) r[s] && r[s].match && (1 != r[s].match.static || Array.isArray(i.metadata) && !0 !== r[s].generatedInput) && n.push(r[s].input);\n                    var l = 0 === n.length ? \"\" : (t.isRTL ? n.reverse() : n).join(\"\");\n                    if (\"function\" == typeof a.onUnMask) {\n                        var u = (t.isRTL ? o.getBuffer.call(t).slice().reverse() : o.getBuffer.call(t)).join(\"\");\n                        l = a.onUnMask.call(t, u, l, a);\n                    }\n                    return l;\n                }, t.writeBuffer = p;\n                var i, n = (i = a(4528)) && i.__esModule ? i : {\n                    default: i\n                }, r = a(4713), o = a(8711), s = a(7215), l = a(9845), u = a(6030);\n                function c(e, t) {\n                    var a = e ? e.inputmask : this, i = a.opts;\n                    e.inputmask.refreshValue = !1, \"function\" == typeof i.onBeforeMask && (t = i.onBeforeMask.call(a, t, i) || t), \n                    d(e, !0, !1, t = t.toString().split(\"\")), a.undoValue = a._valueGet(!0), (i.clearMaskOnLostFocus || i.clearIncomplete) && e.inputmask._valueGet() === o.getBufferTemplate.call(a).join(\"\") && -1 === o.getLastValidPosition.call(a) && e.inputmask._valueSet(\"\");\n                }\n                function f(e) {\n                    e.length = 0;\n                    for (var t, a = r.getMaskTemplate.call(this, !0, 0, !0, void 0, !0); void 0 !== (t = a.shift()); ) e.push(t);\n                    return e;\n                }\n                function d(e, t, a, i, n) {\n                    var l = e ? e.inputmask : this, c = l.maskset, f = l.opts, d = l.dependencyLib, h = i.slice(), v = \"\", m = -1, g = void 0, k = f.skipOptionalPartCharacter;\n                    f.skipOptionalPartCharacter = \"\", o.resetMaskSet.call(l), c.tests = {}, m = f.radixPoint ? o.determineNewCaretPosition.call(l, {\n                        begin: 0,\n                        end: 0\n                    }, !1, !1 === f.__financeInput ? \"radixFocus\" : void 0).begin : 0, c.p = m, l.caretPos = {\n                        begin: m\n                    };\n                    var y = [], b = l.caretPos;\n                    if (h.forEach((function(e, t) {\n                        if (void 0 !== e) {\n                            var i = new d.Event(\"_checkval\");\n                            i.which = e.toString().charCodeAt(0), v += e;\n                            var n = o.getLastValidPosition.call(l, void 0, !0);\n                            !function(e, t) {\n                                for (var a = r.getMaskTemplate.call(l, !0, 0).slice(e, o.seekNext.call(l, e, !1, !1)).join(\"\").replace(/'/g, \"\"), i = a.indexOf(t); i > 0 && \" \" === a[i - 1]; ) i--;\n                                var n = 0 === i && !o.isMask.call(l, e) && (r.getTest.call(l, e).match.nativeDef === t.charAt(0) || !0 === r.getTest.call(l, e).match.static && r.getTest.call(l, e).match.nativeDef === \"'\" + t.charAt(0) || \" \" === r.getTest.call(l, e).match.nativeDef && (r.getTest.call(l, e + 1).match.nativeDef === t.charAt(0) || !0 === r.getTest.call(l, e + 1).match.static && r.getTest.call(l, e + 1).match.nativeDef === \"'\" + t.charAt(0)));\n                                if (!n && i > 0 && !o.isMask.call(l, e, !1, !0)) {\n                                    var s = o.seekNext.call(l, e);\n                                    l.caretPos.begin < s && (l.caretPos = {\n                                        begin: s\n                                    });\n                                }\n                                return n;\n                            }(m, v) ? (g = u.EventHandlers.keypressEvent.call(l, i, !0, !1, a, l.caretPos.begin)) && (m = l.caretPos.begin + 1, \n                            v = \"\") : g = u.EventHandlers.keypressEvent.call(l, i, !0, !1, a, n + 1), g ? (void 0 !== g.pos && c.validPositions[g.pos] && !0 === c.validPositions[g.pos].match.static && void 0 === c.validPositions[g.pos].alternation && (y.push(g.pos), \n                            l.isRTL || (g.forwardPosition = g.pos + 1)), p.call(l, void 0, o.getBuffer.call(l), g.forwardPosition, i, !1), \n                            l.caretPos = {\n                                begin: g.forwardPosition,\n                                end: g.forwardPosition\n                            }, b = l.caretPos) : void 0 === c.validPositions[t] && h[t] === r.getPlaceholder.call(l, t) && o.isMask.call(l, t, !0) ? l.caretPos.begin++ : l.caretPos = b;\n                        }\n                    })), y.length > 0) {\n                        var x, P, E = o.seekNext.call(l, -1, void 0, !1);\n                        if (!s.isComplete.call(l, o.getBuffer.call(l)) && y.length <= E || s.isComplete.call(l, o.getBuffer.call(l)) && y.length > 0 && y.length !== E && 0 === y[0]) for (var S = E; void 0 !== (x = y.shift()); ) {\n                            var _ = new d.Event(\"_checkval\");\n                            if ((P = c.validPositions[x]).generatedInput = !0, _.which = P.input.charCodeAt(0), \n                            (g = u.EventHandlers.keypressEvent.call(l, _, !0, !1, a, S)) && void 0 !== g.pos && g.pos !== x && c.validPositions[g.pos] && !0 === c.validPositions[g.pos].match.static) y.push(g.pos); else if (!g) break;\n                            S++;\n                        }\n                    }\n                    t && p.call(l, e, o.getBuffer.call(l), g ? g.forwardPosition : l.caretPos.begin, n || new d.Event(\"checkval\"), n && \"input\" === n.type && l.undoValue !== l._valueGet(!0)), \n                    f.skipOptionalPartCharacter = k;\n                }\n                function p(e, t, a, i, r) {\n                    var l = e ? e.inputmask : this, u = l.opts, c = l.dependencyLib;\n                    if (i && \"function\" == typeof u.onBeforeWrite) {\n                        var f = u.onBeforeWrite.call(l, i, t, a, u);\n                        if (f) {\n                            if (f.refreshFromBuffer) {\n                                var d = f.refreshFromBuffer;\n                                s.refreshFromBuffer.call(l, !0 === d ? d : d.start, d.end, f.buffer || t), t = o.getBuffer.call(l, !0);\n                            }\n                            void 0 !== a && (a = void 0 !== f.caret ? f.caret : a);\n                        }\n                    }\n                    if (void 0 !== e && (e.inputmask._valueSet(t.join(\"\")), void 0 === a || void 0 !== i && \"blur\" === i.type || o.caret.call(l, e, a, void 0, void 0, void 0 !== i && \"keydown\" === i.type && (i.keyCode === n.default.DELETE || i.keyCode === n.default.BACKSPACE)), \n                    !0 === r)) {\n                        var p = c(e), h = e.inputmask._valueGet();\n                        e.inputmask.skipInputEvent = !0, p.trigger(\"input\"), setTimeout((function() {\n                            h === o.getBufferTemplate.call(l).join(\"\") ? p.trigger(\"cleared\") : !0 === s.isComplete.call(l, t) && p.trigger(\"complete\");\n                        }), 0);\n                    }\n                }\n            },\n            2394: function(e, t, a) {\n                Object.defineProperty(t, \"__esModule\", {\n                    value: !0\n                }), t.default = void 0, a(7149), a(3194);\n                var i = a(157), n = m(a(4963)), r = m(a(9380)), o = a(2391), s = a(4713), l = a(8711), u = a(7215), c = a(7760), f = a(9716), d = m(a(7392)), p = m(a(3976)), h = m(a(8741));\n                function v(e) {\n                    return (v = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(e) {\n                        return typeof e;\n                    } : function(e) {\n                        return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n                    })(e);\n                }\n                function m(e) {\n                    return e && e.__esModule ? e : {\n                        default: e\n                    };\n                }\n                var g = r.default.document, k = \"_inputmask_opts\";\n                function y(e, t, a) {\n                    if (h.default) {\n                        if (!(this instanceof y)) return new y(e, t, a);\n                        this.dependencyLib = n.default, this.el = void 0, this.events = {}, this.maskset = void 0, \n                        !0 !== a && (\"[object Object]\" === Object.prototype.toString.call(e) ? t = e : (t = t || {}, \n                        e && (t.alias = e)), this.opts = n.default.extend(!0, {}, this.defaults, t), this.noMasksCache = t && void 0 !== t.definitions, \n                        this.userOptions = t || {}, b(this.opts.alias, t, this.opts)), this.refreshValue = !1, \n                        this.undoValue = void 0, this.$el = void 0, this.skipKeyPressEvent = !1, this.skipInputEvent = !1, \n                        this.validationEvent = !1, this.ignorable = !1, this.maxLength, this.mouseEnter = !1, \n                        this.originalPlaceholder = void 0, this.isComposing = !1;\n                    }\n                }\n                function b(e, t, a) {\n                    var i = y.prototype.aliases[e];\n                    return i ? (i.alias && b(i.alias, void 0, a), n.default.extend(!0, a, i), n.default.extend(!0, a, t), \n                    !0) : (null === a.mask && (a.mask = e), !1);\n                }\n                y.prototype = {\n                    dataAttribute: \"data-inputmask\",\n                    defaults: p.default,\n                    definitions: d.default,\n                    aliases: {},\n                    masksCache: {},\n                    get isRTL() {\n                        return this.opts.isRTL || this.opts.numericInput;\n                    },\n                    mask: function(e) {\n                        var t = this;\n                        return \"string\" == typeof e && (e = g.getElementById(e) || g.querySelectorAll(e)), \n                        (e = e.nodeName ? [ e ] : Array.isArray(e) ? e : Array.from(e)).forEach((function(e, a) {\n                            var s = n.default.extend(!0, {}, t.opts);\n                            if (function(e, t, a, i) {\n                                function o(t, n) {\n                                    var o = \"\" === i ? t : i + \"-\" + t;\n                                    null !== (n = void 0 !== n ? n : e.getAttribute(o)) && (\"string\" == typeof n && (0 === t.indexOf(\"on\") ? n = r.default[n] : \"false\" === n ? n = !1 : \"true\" === n && (n = !0)), \n                                    a[t] = n);\n                                }\n                                if (!0 === t.importDataAttributes) {\n                                    var s, l, u, c, f = e.getAttribute(i);\n                                    if (f && \"\" !== f && (f = f.replace(/'/g, '\"'), l = JSON.parse(\"{\" + f + \"}\")), \n                                    l) for (c in u = void 0, l) if (\"alias\" === c.toLowerCase()) {\n                                        u = l[c];\n                                        break;\n                                    }\n                                    for (s in o(\"alias\", u), a.alias && b(a.alias, a, t), t) {\n                                        if (l) for (c in u = void 0, l) if (c.toLowerCase() === s.toLowerCase()) {\n                                            u = l[c];\n                                            break;\n                                        }\n                                        o(s, u);\n                                    }\n                                }\n                                n.default.extend(!0, t, a), (\"rtl\" === e.dir || t.rightAlign) && (e.style.textAlign = \"right\");\n                                (\"rtl\" === e.dir || t.numericInput) && (e.dir = \"ltr\", e.removeAttribute(\"dir\"), \n                                t.isRTL = !0);\n                                return Object.keys(a).length;\n                            }(e, s, n.default.extend(!0, {}, t.userOptions), t.dataAttribute)) {\n                                var l = (0, o.generateMaskSet)(s, t.noMasksCache);\n                                void 0 !== l && (void 0 !== e.inputmask && (e.inputmask.opts.autoUnmask = !0, e.inputmask.remove()), \n                                e.inputmask = new y(void 0, void 0, !0), e.inputmask.opts = s, e.inputmask.noMasksCache = t.noMasksCache, \n                                e.inputmask.userOptions = n.default.extend(!0, {}, t.userOptions), e.inputmask.el = e, \n                                e.inputmask.$el = (0, n.default)(e), e.inputmask.maskset = l, n.default.data(e, k, t.userOptions), \n                                i.mask.call(e.inputmask));\n                            }\n                        })), e && e[0] && e[0].inputmask || this;\n                    },\n                    option: function(e, t) {\n                        return \"string\" == typeof e ? this.opts[e] : \"object\" === v(e) ? (n.default.extend(this.userOptions, e), \n                        this.el && !0 !== t && this.mask(this.el), this) : void 0;\n                    },\n                    unmaskedvalue: function(e) {\n                        if (this.maskset = this.maskset || (0, o.generateMaskSet)(this.opts, this.noMasksCache), \n                        void 0 === this.el || void 0 !== e) {\n                            var t = (\"function\" == typeof this.opts.onBeforeMask && this.opts.onBeforeMask.call(this, e, this.opts) || e).split(\"\");\n                            c.checkVal.call(this, void 0, !1, !1, t), \"function\" == typeof this.opts.onBeforeWrite && this.opts.onBeforeWrite.call(this, void 0, l.getBuffer.call(this), 0, this.opts);\n                        }\n                        return c.unmaskedvalue.call(this, this.el);\n                    },\n                    remove: function() {\n                        if (this.el) {\n                            n.default.data(this.el, k, null);\n                            var e = this.opts.autoUnmask ? (0, c.unmaskedvalue)(this.el) : this._valueGet(this.opts.autoUnmask);\n                            e !== l.getBufferTemplate.call(this).join(\"\") ? this._valueSet(e, this.opts.autoUnmask) : this._valueSet(\"\"), \n                            f.EventRuler.off(this.el), Object.getOwnPropertyDescriptor && Object.getPrototypeOf ? Object.getOwnPropertyDescriptor(Object.getPrototypeOf(this.el), \"value\") && this.__valueGet && Object.defineProperty(this.el, \"value\", {\n                                get: this.__valueGet,\n                                set: this.__valueSet,\n                                configurable: !0\n                            }) : g.__lookupGetter__ && this.el.__lookupGetter__(\"value\") && this.__valueGet && (this.el.__defineGetter__(\"value\", this.__valueGet), \n                            this.el.__defineSetter__(\"value\", this.__valueSet)), this.el.inputmask = void 0;\n                        }\n                        return this.el;\n                    },\n                    getemptymask: function() {\n                        return this.maskset = this.maskset || (0, o.generateMaskSet)(this.opts, this.noMasksCache), \n                        l.getBufferTemplate.call(this).join(\"\");\n                    },\n                    hasMaskedValue: function() {\n                        return !this.opts.autoUnmask;\n                    },\n                    isComplete: function() {\n                        return this.maskset = this.maskset || (0, o.generateMaskSet)(this.opts, this.noMasksCache), \n                        u.isComplete.call(this, l.getBuffer.call(this));\n                    },\n                    getmetadata: function() {\n                        if (this.maskset = this.maskset || (0, o.generateMaskSet)(this.opts, this.noMasksCache), \n                        Array.isArray(this.maskset.metadata)) {\n                            var e = s.getMaskTemplate.call(this, !0, 0, !1).join(\"\");\n                            return this.maskset.metadata.forEach((function(t) {\n                                return t.mask !== e || (e = t, !1);\n                            })), e;\n                        }\n                        return this.maskset.metadata;\n                    },\n                    isValid: function(e) {\n                        if (this.maskset = this.maskset || (0, o.generateMaskSet)(this.opts, this.noMasksCache), \n                        e) {\n                            var t = (\"function\" == typeof this.opts.onBeforeMask && this.opts.onBeforeMask.call(this, e, this.opts) || e).split(\"\");\n                            c.checkVal.call(this, void 0, !0, !1, t);\n                        } else e = this.isRTL ? l.getBuffer.call(this).slice().reverse().join(\"\") : l.getBuffer.call(this).join(\"\");\n                        for (var a = l.getBuffer.call(this), i = l.determineLastRequiredPosition.call(this), n = a.length - 1; n > i && !l.isMask.call(this, n); n--) ;\n                        return a.splice(i, n + 1 - i), u.isComplete.call(this, a) && e === (this.isRTL ? l.getBuffer.call(this).slice().reverse().join(\"\") : l.getBuffer.call(this).join(\"\"));\n                    },\n                    format: function(e, t) {\n                        this.maskset = this.maskset || (0, o.generateMaskSet)(this.opts, this.noMasksCache);\n                        var a = (\"function\" == typeof this.opts.onBeforeMask && this.opts.onBeforeMask.call(this, e, this.opts) || e).split(\"\");\n                        c.checkVal.call(this, void 0, !0, !1, a);\n                        var i = this.isRTL ? l.getBuffer.call(this).slice().reverse().join(\"\") : l.getBuffer.call(this).join(\"\");\n                        return t ? {\n                            value: i,\n                            metadata: this.getmetadata()\n                        } : i;\n                    },\n                    setValue: function(e) {\n                        this.el && (0, n.default)(this.el).trigger(\"setvalue\", [ e ]);\n                    },\n                    analyseMask: o.analyseMask\n                }, y.extendDefaults = function(e) {\n                    n.default.extend(!0, y.prototype.defaults, e);\n                }, y.extendDefinitions = function(e) {\n                    n.default.extend(!0, y.prototype.definitions, e);\n                }, y.extendAliases = function(e) {\n                    n.default.extend(!0, y.prototype.aliases, e);\n                }, y.format = function(e, t, a) {\n                    return y(t).format(e, a);\n                }, y.unmask = function(e, t) {\n                    return y(t).unmaskedvalue(e);\n                }, y.isValid = function(e, t) {\n                    return y(t).isValid(e);\n                }, y.remove = function(e) {\n                    \"string\" == typeof e && (e = g.getElementById(e) || g.querySelectorAll(e)), (e = e.nodeName ? [ e ] : e).forEach((function(e) {\n                        e.inputmask && e.inputmask.remove();\n                    }));\n                }, y.setValue = function(e, t) {\n                    \"string\" == typeof e && (e = g.getElementById(e) || g.querySelectorAll(e)), (e = e.nodeName ? [ e ] : e).forEach((function(e) {\n                        e.inputmask ? e.inputmask.setValue(t) : (0, n.default)(e).trigger(\"setvalue\", [ t ]);\n                    }));\n                }, y.dependencyLib = n.default, r.default.Inputmask = y;\n                var x = y;\n                t.default = x;\n            },\n            5296: function(e, t, a) {\n                function i(e) {\n                    return (i = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(e) {\n                        return typeof e;\n                    } : function(e) {\n                        return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n                    })(e);\n                }\n                var n = p(a(9380)), r = p(a(2394)), o = p(a(8741));\n                function s(e, t) {\n                    return !t || \"object\" !== i(t) && \"function\" != typeof t ? function(e) {\n                        if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n                        return e;\n                    }(e) : t;\n                }\n                function l(e) {\n                    var t = \"function\" == typeof Map ? new Map : void 0;\n                    return (l = function(e) {\n                        if (null === e || (a = e, -1 === Function.toString.call(a).indexOf(\"[native code]\"))) return e;\n                        var a;\n                        if (\"function\" != typeof e) throw new TypeError(\"Super expression must either be null or a function\");\n                        if (void 0 !== t) {\n                            if (t.has(e)) return t.get(e);\n                            t.set(e, i);\n                        }\n                        function i() {\n                            return u(e, arguments, d(this).constructor);\n                        }\n                        return i.prototype = Object.create(e.prototype, {\n                            constructor: {\n                                value: i,\n                                enumerable: !1,\n                                writable: !0,\n                                configurable: !0\n                            }\n                        }), f(i, e);\n                    })(e);\n                }\n                function u(e, t, a) {\n                    return (u = c() ? Reflect.construct : function(e, t, a) {\n                        var i = [ null ];\n                        i.push.apply(i, t);\n                        var n = new (Function.bind.apply(e, i));\n                        return a && f(n, a.prototype), n;\n                    }).apply(null, arguments);\n                }\n                function c() {\n                    if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n                    if (Reflect.construct.sham) return !1;\n                    if (\"function\" == typeof Proxy) return !0;\n                    try {\n                        return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], (function() {}))), \n                        !0;\n                    } catch (e) {\n                        return !1;\n                    }\n                }\n                function f(e, t) {\n                    return (f = Object.setPrototypeOf || function(e, t) {\n                        return e.__proto__ = t, e;\n                    })(e, t);\n                }\n                function d(e) {\n                    return (d = Object.setPrototypeOf ? Object.getPrototypeOf : function(e) {\n                        return e.__proto__ || Object.getPrototypeOf(e);\n                    })(e);\n                }\n                function p(e) {\n                    return e && e.__esModule ? e : {\n                        default: e\n                    };\n                }\n                var h = n.default.document;\n                if (o.default && h && h.head && h.head.attachShadow && n.default.customElements && void 0 === n.default.customElements.get(\"input-mask\")) {\n                    var v = function(e) {\n                        !function(e, t) {\n                            if (\"function\" != typeof t && null !== t) throw new TypeError(\"Super expression must either be null or a function\");\n                            e.prototype = Object.create(t && t.prototype, {\n                                constructor: {\n                                    value: e,\n                                    writable: !0,\n                                    configurable: !0\n                                }\n                            }), t && f(e, t);\n                        }(n, e);\n                        var t, a, i = (t = n, a = c(), function() {\n                            var e, i = d(t);\n                            if (a) {\n                                var n = d(this).constructor;\n                                e = Reflect.construct(i, arguments, n);\n                            } else e = i.apply(this, arguments);\n                            return s(this, e);\n                        });\n                        function n() {\n                            var e;\n                            !function(e, t) {\n                                if (!(e instanceof t)) throw new TypeError(\"Cannot call a class as a function\");\n                            }(this, n);\n                            var t = (e = i.call(this)).getAttributeNames(), a = e.attachShadow({\n                                mode: \"closed\"\n                            }), o = h.createElement(\"input\");\n                            for (var s in o.type = \"text\", a.appendChild(o), t) Object.prototype.hasOwnProperty.call(t, s) && o.setAttribute(t[s], e.getAttribute(t[s]));\n                            var l = new r.default;\n                            return l.dataAttribute = \"\", l.mask(o), o.inputmask.shadowRoot = a, e;\n                        }\n                        return n;\n                    }(l(HTMLElement));\n                    n.default.customElements.define(\"input-mask\", v);\n                }\n            },\n            2391: function(e, t, a) {\n                Object.defineProperty(t, \"__esModule\", {\n                    value: !0\n                }), t.generateMaskSet = function(e, t) {\n                    var a;\n                    function n(e, a, n) {\n                        var r, o, s = !1;\n                        if (null !== e && \"\" !== e || ((s = null !== n.regex) ? e = (e = n.regex).replace(/^(\\^)(.*)(\\$)$/, \"$2\") : (s = !0, \n                        e = \".*\")), 1 === e.length && !1 === n.greedy && 0 !== n.repeat && (n.placeholder = \"\"), \n                        n.repeat > 0 || \"*\" === n.repeat || \"+\" === n.repeat) {\n                            var l = \"*\" === n.repeat ? 0 : \"+\" === n.repeat ? 1 : n.repeat;\n                            e = n.groupmarker[0] + e + n.groupmarker[1] + n.quantifiermarker[0] + l + \",\" + n.repeat + n.quantifiermarker[1];\n                        }\n                        return o = s ? \"regex_\" + n.regex : n.numericInput ? e.split(\"\").reverse().join(\"\") : e, \n                        !1 !== n.keepStatic && (o = \"ks_\" + o), void 0 === Inputmask.prototype.masksCache[o] || !0 === t ? (r = {\n                            mask: e,\n                            maskToken: Inputmask.prototype.analyseMask(e, s, n),\n                            validPositions: {},\n                            _buffer: void 0,\n                            buffer: void 0,\n                            tests: {},\n                            excludes: {},\n                            metadata: a,\n                            maskLength: void 0,\n                            jitOffset: {}\n                        }, !0 !== t && (Inputmask.prototype.masksCache[o] = r, r = i.default.extend(!0, {}, Inputmask.prototype.masksCache[o]))) : r = i.default.extend(!0, {}, Inputmask.prototype.masksCache[o]), \n                        r;\n                    }\n                    \"function\" == typeof e.mask && (e.mask = e.mask(e));\n                    if (Array.isArray(e.mask)) {\n                        if (e.mask.length > 1) {\n                            null === e.keepStatic && (e.keepStatic = !0);\n                            var r = e.groupmarker[0];\n                            return (e.isRTL ? e.mask.reverse() : e.mask).forEach((function(t) {\n                                r.length > 1 && (r += e.groupmarker[1] + e.alternatormarker + e.groupmarker[0]), \n                                void 0 !== t.mask && \"function\" != typeof t.mask ? r += t.mask : r += t;\n                            })), n(r += e.groupmarker[1], e.mask, e);\n                        }\n                        e.mask = e.mask.pop();\n                    }\n                    null === e.keepStatic && (e.keepStatic = !1);\n                    a = e.mask && void 0 !== e.mask.mask && \"function\" != typeof e.mask.mask ? n(e.mask.mask, e.mask, e) : n(e.mask, e.mask, e);\n                    return a;\n                }, t.analyseMask = function(e, t, a) {\n                    var i, r, o, s, l, u, c = /(?:[?*+]|\\{[0-9+*]+(?:,[0-9+*]*)?(?:\\|[0-9+*]*)?\\})|[^.?*+^${[]()|\\\\]+|./g, f = /\\[\\^?]?(?:[^\\\\\\]]+|\\\\[\\S\\s]?)*]?|\\\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9][0-9]*|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|c[A-Za-z]|[\\S\\s]?)|\\((?:\\?[:=!]?)?|(?:[?*+]|\\{[0-9]+(?:,[0-9]*)?\\})\\??|[^.?*+^${[()|\\\\]+|./g, d = !1, p = new n.default, h = [], v = [], m = !1;\n                    function g(e, i, n) {\n                        n = void 0 !== n ? n : e.matches.length;\n                        var r = e.matches[n - 1];\n                        if (t) 0 === i.indexOf(\"[\") || d && /\\\\d|\\\\s|\\\\w]/i.test(i) || \".\" === i ? e.matches.splice(n++, 0, {\n                            fn: new RegExp(i, a.casing ? \"i\" : \"\"),\n                            static: !1,\n                            optionality: !1,\n                            newBlockMarker: void 0 === r ? \"master\" : r.def !== i,\n                            casing: null,\n                            def: i,\n                            placeholder: void 0,\n                            nativeDef: i\n                        }) : (d && (i = i[i.length - 1]), i.split(\"\").forEach((function(t, i) {\n                            r = e.matches[n - 1], e.matches.splice(n++, 0, {\n                                fn: /[a-z]/i.test(a.staticDefinitionSymbol || t) ? new RegExp(\"[\" + (a.staticDefinitionSymbol || t) + \"]\", a.casing ? \"i\" : \"\") : null,\n                                static: !0,\n                                optionality: !1,\n                                newBlockMarker: void 0 === r ? \"master\" : r.def !== t && !0 !== r.static,\n                                casing: null,\n                                def: a.staticDefinitionSymbol || t,\n                                placeholder: void 0 !== a.staticDefinitionSymbol ? t : void 0,\n                                nativeDef: (d ? \"'\" : \"\") + t\n                            });\n                        }))), d = !1; else {\n                            var o = a.definitions && a.definitions[i] || a.usePrototypeDefinitions && Inputmask.prototype.definitions[i];\n                            o && !d ? e.matches.splice(n++, 0, {\n                                fn: o.validator ? \"string\" == typeof o.validator ? new RegExp(o.validator, a.casing ? \"i\" : \"\") : new function() {\n                                    this.test = o.validator;\n                                } : new RegExp(\".\"),\n                                static: o.static || !1,\n                                optionality: !1,\n                                newBlockMarker: void 0 === r ? \"master\" : r.def !== (o.definitionSymbol || i),\n                                casing: o.casing,\n                                def: o.definitionSymbol || i,\n                                placeholder: o.placeholder,\n                                nativeDef: i,\n                                generated: o.generated\n                            }) : (e.matches.splice(n++, 0, {\n                                fn: /[a-z]/i.test(a.staticDefinitionSymbol || i) ? new RegExp(\"[\" + (a.staticDefinitionSymbol || i) + \"]\", a.casing ? \"i\" : \"\") : null,\n                                static: !0,\n                                optionality: !1,\n                                newBlockMarker: void 0 === r ? \"master\" : r.def !== i && !0 !== r.static,\n                                casing: null,\n                                def: a.staticDefinitionSymbol || i,\n                                placeholder: void 0 !== a.staticDefinitionSymbol ? i : void 0,\n                                nativeDef: (d ? \"'\" : \"\") + i\n                            }), d = !1);\n                        }\n                    }\n                    function k() {\n                        if (h.length > 0) {\n                            if (g(s = h[h.length - 1], r), s.isAlternator) {\n                                l = h.pop();\n                                for (var e = 0; e < l.matches.length; e++) l.matches[e].isGroup && (l.matches[e].isGroup = !1);\n                                h.length > 0 ? (s = h[h.length - 1]).matches.push(l) : p.matches.push(l);\n                            }\n                        } else g(p, r);\n                    }\n                    function y(e) {\n                        var t = new n.default(!0);\n                        return t.openGroup = !1, t.matches = e, t;\n                    }\n                    function b() {\n                        if ((o = h.pop()).openGroup = !1, void 0 !== o) if (h.length > 0) {\n                            if ((s = h[h.length - 1]).matches.push(o), s.isAlternator) {\n                                l = h.pop();\n                                for (var e = 0; e < l.matches.length; e++) l.matches[e].isGroup = !1, l.matches[e].alternatorGroup = !1;\n                                h.length > 0 ? (s = h[h.length - 1]).matches.push(l) : p.matches.push(l);\n                            }\n                        } else p.matches.push(o); else k();\n                    }\n                    function x(e) {\n                        var t = e.pop();\n                        return t.isQuantifier && (t = y([ e.pop(), t ])), t;\n                    }\n                    t && (a.optionalmarker[0] = void 0, a.optionalmarker[1] = void 0);\n                    for (;i = t ? f.exec(e) : c.exec(e); ) {\n                        if (r = i[0], t) switch (r.charAt(0)) {\n                          case \"?\":\n                            r = \"{0,1}\";\n                            break;\n\n                          case \"+\":\n                          case \"*\":\n                            r = \"{\" + r + \"}\";\n                            break;\n\n                          case \"|\":\n                            if (0 === h.length) {\n                                var P = y(p.matches);\n                                P.openGroup = !0, h.push(P), p.matches = [], m = !0;\n                            }\n                        }\n                        if (d) k(); else switch (r.charAt(0)) {\n                          case \"$\":\n                          case \"^\":\n                            t || k();\n                            break;\n\n                          case \"(?=\":\n                          case \"(?!\":\n                          case \"(?<=\":\n                          case \"(?<!\":\n                            h.push(new n.default(!0));\n                            break;\n\n                          case a.escapeChar:\n                            d = !0, t && k();\n                            break;\n\n                          case a.optionalmarker[1]:\n                          case a.groupmarker[1]:\n                            b();\n                            break;\n\n                          case a.optionalmarker[0]:\n                            h.push(new n.default(!1, !0));\n                            break;\n\n                          case a.groupmarker[0]:\n                            h.push(new n.default(!0));\n                            break;\n\n                          case a.quantifiermarker[0]:\n                            var E = new n.default(!1, !1, !0), S = (r = r.replace(/[{}]/g, \"\")).split(\"|\"), _ = S[0].split(\",\"), M = isNaN(_[0]) ? _[0] : parseInt(_[0]), w = 1 === _.length ? M : isNaN(_[1]) ? _[1] : parseInt(_[1]), O = isNaN(S[1]) ? S[1] : parseInt(S[1]);\n                            \"*\" !== M && \"+\" !== M || (M = \"*\" === w ? 0 : 1), E.quantifier = {\n                                min: M,\n                                max: w,\n                                jit: O\n                            };\n                            var T = h.length > 0 ? h[h.length - 1].matches : p.matches;\n                            if ((i = T.pop()).isAlternator) {\n                                T.push(i), T = i.matches;\n                                var C = new n.default(!0), A = T.pop();\n                                T.push(C), T = C.matches, i = A;\n                            }\n                            i.isGroup || (i = y([ i ])), T.push(i), T.push(E);\n                            break;\n\n                          case a.alternatormarker:\n                            if (h.length > 0) {\n                                var D = (s = h[h.length - 1]).matches[s.matches.length - 1];\n                                u = s.openGroup && (void 0 === D.matches || !1 === D.isGroup && !1 === D.isAlternator) ? h.pop() : x(s.matches);\n                            } else u = x(p.matches);\n                            if (u.isAlternator) h.push(u); else if (u.alternatorGroup ? (l = h.pop(), u.alternatorGroup = !1) : l = new n.default(!1, !1, !1, !0), \n                            l.matches.push(u), h.push(l), u.openGroup) {\n                                u.openGroup = !1;\n                                var B = new n.default(!0);\n                                B.alternatorGroup = !0, h.push(B);\n                            }\n                            break;\n\n                          default:\n                            k();\n                        }\n                    }\n                    m && b();\n                    for (;h.length > 0; ) o = h.pop(), p.matches.push(o);\n                    p.matches.length > 0 && (!function e(i) {\n                        i && i.matches && i.matches.forEach((function(n, r) {\n                            var o = i.matches[r + 1];\n                            (void 0 === o || void 0 === o.matches || !1 === o.isQuantifier) && n && n.isGroup && (n.isGroup = !1, \n                            t || (g(n, a.groupmarker[0], 0), !0 !== n.openGroup && g(n, a.groupmarker[1]))), \n                            e(n);\n                        }));\n                    }(p), v.push(p));\n                    (a.numericInput || a.isRTL) && function e(t) {\n                        for (var i in t.matches = t.matches.reverse(), t.matches) if (Object.prototype.hasOwnProperty.call(t.matches, i)) {\n                            var n = parseInt(i);\n                            if (t.matches[i].isQuantifier && t.matches[n + 1] && t.matches[n + 1].isGroup) {\n                                var r = t.matches[i];\n                                t.matches.splice(i, 1), t.matches.splice(n + 1, 0, r);\n                            }\n                            void 0 !== t.matches[i].matches ? t.matches[i] = e(t.matches[i]) : t.matches[i] = ((o = t.matches[i]) === a.optionalmarker[0] ? o = a.optionalmarker[1] : o === a.optionalmarker[1] ? o = a.optionalmarker[0] : o === a.groupmarker[0] ? o = a.groupmarker[1] : o === a.groupmarker[1] && (o = a.groupmarker[0]), \n                            o);\n                        }\n                        var o;\n                        return t;\n                    }(v[0]);\n                    return v;\n                };\n                var i = r(a(4963)), n = r(a(9695));\n                function r(e) {\n                    return e && e.__esModule ? e : {\n                        default: e\n                    };\n                }\n            },\n            157: function(e, t, a) {\n                Object.defineProperty(t, \"__esModule\", {\n                    value: !0\n                }), t.mask = function() {\n                    var e = this, t = this.opts, a = this.el, i = this.dependencyLib;\n                    s.EventRuler.off(a);\n                    var f = function(t, a) {\n                        \"textarea\" !== t.tagName.toLowerCase() && a.ignorables.push(n.default.ENTER);\n                        var l = t.getAttribute(\"type\"), u = \"input\" === t.tagName.toLowerCase() && a.supportsInputType.includes(l) || t.isContentEditable || \"textarea\" === t.tagName.toLowerCase();\n                        if (!u) if (\"input\" === t.tagName.toLowerCase()) {\n                            var c = document.createElement(\"input\");\n                            c.setAttribute(\"type\", l), u = \"text\" === c.type, c = null;\n                        } else u = \"partial\";\n                        return !1 !== u ? function(t) {\n                            var n, l;\n                            function u() {\n                                return this.inputmask ? this.inputmask.opts.autoUnmask ? this.inputmask.unmaskedvalue() : -1 !== r.getLastValidPosition.call(e) || !0 !== a.nullable ? (this.inputmask.shadowRoot || this.ownerDocument).activeElement === this && a.clearMaskOnLostFocus ? (e.isRTL ? o.clearOptionalTail.call(e, r.getBuffer.call(e).slice()).reverse() : o.clearOptionalTail.call(e, r.getBuffer.call(e).slice())).join(\"\") : n.call(this) : \"\" : n.call(this);\n                            }\n                            function c(e) {\n                                l.call(this, e), this.inputmask && (0, o.applyInputValue)(this, e);\n                            }\n                            if (!t.inputmask.__valueGet) {\n                                if (!0 !== a.noValuePatching) {\n                                    if (Object.getOwnPropertyDescriptor) {\n                                        var f = Object.getPrototypeOf ? Object.getOwnPropertyDescriptor(Object.getPrototypeOf(t), \"value\") : void 0;\n                                        f && f.get && f.set ? (n = f.get, l = f.set, Object.defineProperty(t, \"value\", {\n                                            get: u,\n                                            set: c,\n                                            configurable: !0\n                                        })) : \"input\" !== t.tagName.toLowerCase() && (n = function() {\n                                            return this.textContent;\n                                        }, l = function(e) {\n                                            this.textContent = e;\n                                        }, Object.defineProperty(t, \"value\", {\n                                            get: u,\n                                            set: c,\n                                            configurable: !0\n                                        }));\n                                    } else document.__lookupGetter__ && t.__lookupGetter__(\"value\") && (n = t.__lookupGetter__(\"value\"), \n                                    l = t.__lookupSetter__(\"value\"), t.__defineGetter__(\"value\", u), t.__defineSetter__(\"value\", c));\n                                    t.inputmask.__valueGet = n, t.inputmask.__valueSet = l;\n                                }\n                                t.inputmask._valueGet = function(t) {\n                                    return e.isRTL && !0 !== t ? n.call(this.el).split(\"\").reverse().join(\"\") : n.call(this.el);\n                                }, t.inputmask._valueSet = function(t, a) {\n                                    l.call(this.el, null == t ? \"\" : !0 !== a && e.isRTL ? t.split(\"\").reverse().join(\"\") : t);\n                                }, void 0 === n && (n = function() {\n                                    return this.value;\n                                }, l = function(e) {\n                                    this.value = e;\n                                }, function(t) {\n                                    if (i.valHooks && (void 0 === i.valHooks[t] || !0 !== i.valHooks[t].inputmaskpatch)) {\n                                        var n = i.valHooks[t] && i.valHooks[t].get ? i.valHooks[t].get : function(e) {\n                                            return e.value;\n                                        }, s = i.valHooks[t] && i.valHooks[t].set ? i.valHooks[t].set : function(e, t) {\n                                            return e.value = t, e;\n                                        };\n                                        i.valHooks[t] = {\n                                            get: function(t) {\n                                                if (t.inputmask) {\n                                                    if (t.inputmask.opts.autoUnmask) return t.inputmask.unmaskedvalue();\n                                                    var i = n(t);\n                                                    return -1 !== r.getLastValidPosition.call(e, void 0, void 0, t.inputmask.maskset.validPositions) || !0 !== a.nullable ? i : \"\";\n                                                }\n                                                return n(t);\n                                            },\n                                            set: function(e, t) {\n                                                var a = s(e, t);\n                                                return e.inputmask && (0, o.applyInputValue)(e, t), a;\n                                            },\n                                            inputmaskpatch: !0\n                                        };\n                                    }\n                                }(t.type), function(t) {\n                                    s.EventRuler.on(t, \"mouseenter\", (function() {\n                                        var t = this.inputmask._valueGet(!0);\n                                        t !== (e.isRTL ? r.getBuffer.call(e).reverse() : r.getBuffer.call(e)).join(\"\") && (0, \n                                        o.applyInputValue)(this, t);\n                                    }));\n                                }(t));\n                            }\n                        }(t) : t.inputmask = void 0, u;\n                    }(a, t);\n                    if (!1 !== f) {\n                        e.originalPlaceholder = a.placeholder, e.maxLength = void 0 !== a ? a.maxLength : void 0, \n                        -1 === e.maxLength && (e.maxLength = void 0), \"inputMode\" in a && null === a.getAttribute(\"inputmode\") && (a.inputMode = t.inputmode, \n                        a.setAttribute(\"inputmode\", t.inputmode)), !0 === f && (t.showMaskOnFocus = t.showMaskOnFocus && -1 === [ \"cc-number\", \"cc-exp\" ].indexOf(a.autocomplete), \n                        l.iphone && (t.insertModeVisual = !1), s.EventRuler.on(a, \"submit\", c.EventHandlers.submitEvent), \n                        s.EventRuler.on(a, \"reset\", c.EventHandlers.resetEvent), s.EventRuler.on(a, \"blur\", c.EventHandlers.blurEvent), \n                        s.EventRuler.on(a, \"focus\", c.EventHandlers.focusEvent), s.EventRuler.on(a, \"invalid\", c.EventHandlers.invalidEvent), \n                        s.EventRuler.on(a, \"click\", c.EventHandlers.clickEvent), s.EventRuler.on(a, \"mouseleave\", c.EventHandlers.mouseleaveEvent), \n                        s.EventRuler.on(a, \"mouseenter\", c.EventHandlers.mouseenterEvent), s.EventRuler.on(a, \"paste\", c.EventHandlers.pasteEvent), \n                        s.EventRuler.on(a, \"cut\", c.EventHandlers.cutEvent), s.EventRuler.on(a, \"complete\", t.oncomplete), \n                        s.EventRuler.on(a, \"incomplete\", t.onincomplete), s.EventRuler.on(a, \"cleared\", t.oncleared), \n                        !0 !== t.inputEventOnly && (s.EventRuler.on(a, \"keydown\", c.EventHandlers.keydownEvent), \n                        s.EventRuler.on(a, \"keypress\", c.EventHandlers.keypressEvent), s.EventRuler.on(a, \"keyup\", c.EventHandlers.keyupEvent)), \n                        (l.mobile || t.inputEventOnly) && a.removeAttribute(\"maxLength\"), s.EventRuler.on(a, \"input\", c.EventHandlers.inputFallBackEvent), \n                        s.EventRuler.on(a, \"compositionend\", c.EventHandlers.compositionendEvent)), s.EventRuler.on(a, \"setvalue\", c.EventHandlers.setValueEvent), \n                        r.getBufferTemplate.call(e).join(\"\"), e.undoValue = e._valueGet(!0);\n                        var d = (a.inputmask.shadowRoot || a.ownerDocument).activeElement;\n                        if (\"\" !== a.inputmask._valueGet(!0) || !1 === t.clearMaskOnLostFocus || d === a) {\n                            (0, o.applyInputValue)(a, a.inputmask._valueGet(!0), t);\n                            var p = r.getBuffer.call(e).slice();\n                            !1 === u.isComplete.call(e, p) && t.clearIncomplete && r.resetMaskSet.call(e), t.clearMaskOnLostFocus && d !== a && (-1 === r.getLastValidPosition.call(e) ? p = [] : o.clearOptionalTail.call(e, p)), \n                            (!1 === t.clearMaskOnLostFocus || t.showMaskOnFocus && d === a || \"\" !== a.inputmask._valueGet(!0)) && (0, \n                            o.writeBuffer)(a, p), d === a && r.caret.call(e, a, r.seekNext.call(e, r.getLastValidPosition.call(e)));\n                        }\n                    }\n                };\n                var i, n = (i = a(4528)) && i.__esModule ? i : {\n                    default: i\n                }, r = a(8711), o = a(7760), s = a(9716), l = a(9845), u = a(7215), c = a(6030);\n            },\n            9695: function(e, t) {\n                Object.defineProperty(t, \"__esModule\", {\n                    value: !0\n                }), t.default = function(e, t, a, i) {\n                    this.matches = [], this.openGroup = e || !1, this.alternatorGroup = !1, this.isGroup = e || !1, \n                    this.isOptional = t || !1, this.isQuantifier = a || !1, this.isAlternator = i || !1, \n                    this.quantifier = {\n                        min: 1,\n                        max: 1\n                    };\n                };\n            },\n            3194: function() {\n                Array.prototype.includes || Object.defineProperty(Array.prototype, \"includes\", {\n                    value: function(e, t) {\n                        if (null == this) throw new TypeError('\"this\" is null or not defined');\n                        var a = Object(this), i = a.length >>> 0;\n                        if (0 === i) return !1;\n                        for (var n = 0 | t, r = Math.max(n >= 0 ? n : i - Math.abs(n), 0); r < i; ) {\n                            if (a[r] === e) return !0;\n                            r++;\n                        }\n                        return !1;\n                    }\n                });\n            },\n            7149: function() {\n                function e(t) {\n                    return (e = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(e) {\n                        return typeof e;\n                    } : function(e) {\n                        return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n                    })(t);\n                }\n                \"function\" != typeof Object.getPrototypeOf && (Object.getPrototypeOf = \"object\" === e(\"test\".__proto__) ? function(e) {\n                    return e.__proto__;\n                } : function(e) {\n                    return e.constructor.prototype;\n                });\n            },\n            8711: function(e, t, a) {\n                Object.defineProperty(t, \"__esModule\", {\n                    value: !0\n                }), t.caret = function(e, t, a, i, n) {\n                    var r, o = this, s = this.opts;\n                    if (void 0 === t) return \"selectionStart\" in e && \"selectionEnd\" in e ? (t = e.selectionStart, \n                    a = e.selectionEnd) : window.getSelection ? (r = window.getSelection().getRangeAt(0)).commonAncestorContainer.parentNode !== e && r.commonAncestorContainer !== e || (t = r.startOffset, \n                    a = r.endOffset) : document.selection && document.selection.createRange && (r = document.selection.createRange(), \n                    t = 0 - r.duplicate().moveStart(\"character\", -e.inputmask._valueGet().length), a = t + r.text.length), \n                    {\n                        begin: i ? t : u.call(o, t),\n                        end: i ? a : u.call(o, a)\n                    };\n                    if (Array.isArray(t) && (a = o.isRTL ? t[0] : t[1], t = o.isRTL ? t[1] : t[0]), \n                    void 0 !== t.begin && (a = o.isRTL ? t.begin : t.end, t = o.isRTL ? t.end : t.begin), \n                    \"number\" == typeof t) {\n                        t = i ? t : u.call(o, t), a = \"number\" == typeof (a = i ? a : u.call(o, a)) ? a : t;\n                        var l = parseInt(((e.ownerDocument.defaultView || window).getComputedStyle ? (e.ownerDocument.defaultView || window).getComputedStyle(e, null) : e.currentStyle).fontSize) * a;\n                        if (e.scrollLeft = l > e.scrollWidth ? l : 0, e.inputmask.caretPos = {\n                            begin: t,\n                            end: a\n                        }, s.insertModeVisual && !1 === s.insertMode && t === a && (n || a++), e === (e.inputmask.shadowRoot || e.ownerDocument).activeElement) if (\"setSelectionRange\" in e) e.setSelectionRange(t, a); else if (window.getSelection) {\n                            if (r = document.createRange(), void 0 === e.firstChild || null === e.firstChild) {\n                                var c = document.createTextNode(\"\");\n                                e.appendChild(c);\n                            }\n                            r.setStart(e.firstChild, t < e.inputmask._valueGet().length ? t : e.inputmask._valueGet().length), \n                            r.setEnd(e.firstChild, a < e.inputmask._valueGet().length ? a : e.inputmask._valueGet().length), \n                            r.collapse(!0);\n                            var f = window.getSelection();\n                            f.removeAllRanges(), f.addRange(r);\n                        } else e.createTextRange && ((r = e.createTextRange()).collapse(!0), r.moveEnd(\"character\", a), \n                        r.moveStart(\"character\", t), r.select());\n                    }\n                }, t.determineLastRequiredPosition = function(e) {\n                    var t, a, r = this, s = this.maskset, l = this.dependencyLib, u = i.getMaskTemplate.call(r, !0, o.call(r), !0, !0), c = u.length, f = o.call(r), d = {}, p = s.validPositions[f], h = void 0 !== p ? p.locator.slice() : void 0;\n                    for (t = f + 1; t < u.length; t++) a = i.getTestTemplate.call(r, t, h, t - 1), h = a.locator.slice(), \n                    d[t] = l.extend(!0, {}, a);\n                    var v = p && void 0 !== p.alternation ? p.locator[p.alternation] : void 0;\n                    for (t = c - 1; t > f && (((a = d[t]).match.optionality || a.match.optionalQuantifier && a.match.newBlockMarker || v && (v !== d[t].locator[p.alternation] && 1 != a.match.static || !0 === a.match.static && a.locator[p.alternation] && n.checkAlternationMatch.call(r, a.locator[p.alternation].toString().split(\",\"), v.toString().split(\",\")) && \"\" !== i.getTests.call(r, t)[0].def)) && u[t] === i.getPlaceholder.call(r, t, a.match)); t--) c--;\n                    return e ? {\n                        l: c,\n                        def: d[c] ? d[c].match : void 0\n                    } : c;\n                }, t.determineNewCaretPosition = function(e, t, a) {\n                    var n = this, u = this.maskset, c = this.opts;\n                    t && (n.isRTL ? e.end = e.begin : e.begin = e.end);\n                    if (e.begin === e.end) {\n                        switch (a = a || c.positionCaretOnClick) {\n                          case \"none\":\n                            break;\n\n                          case \"select\":\n                            e = {\n                                begin: 0,\n                                end: r.call(n).length\n                            };\n                            break;\n\n                          case \"ignore\":\n                            e.end = e.begin = l.call(n, o.call(n));\n                            break;\n\n                          case \"radixFocus\":\n                            if (function(e) {\n                                if (\"\" !== c.radixPoint && 0 !== c.digits) {\n                                    var t = u.validPositions;\n                                    if (void 0 === t[e] || t[e].input === i.getPlaceholder.call(n, e)) {\n                                        if (e < l.call(n, -1)) return !0;\n                                        var a = r.call(n).indexOf(c.radixPoint);\n                                        if (-1 !== a) {\n                                            for (var o in t) if (t[o] && a < o && t[o].input !== i.getPlaceholder.call(n, o)) return !1;\n                                            return !0;\n                                        }\n                                    }\n                                }\n                                return !1;\n                            }(e.begin)) {\n                                var f = r.call(n).join(\"\").indexOf(c.radixPoint);\n                                e.end = e.begin = c.numericInput ? l.call(n, f) : f;\n                                break;\n                            }\n\n                          default:\n                            var d = e.begin, p = o.call(n, d, !0), h = l.call(n, -1 !== p || s.call(n, 0) ? p : -1);\n                            if (d <= h) e.end = e.begin = s.call(n, d, !1, !0) ? d : l.call(n, d); else {\n                                var v = u.validPositions[p], m = i.getTestTemplate.call(n, h, v ? v.match.locator : void 0, v), g = i.getPlaceholder.call(n, h, m.match);\n                                if (\"\" !== g && r.call(n)[h] !== g && !0 !== m.match.optionalQuantifier && !0 !== m.match.newBlockMarker || !s.call(n, h, c.keepStatic, !0) && m.match.def === g) {\n                                    var k = l.call(n, h);\n                                    (d >= k || d === h) && (h = k);\n                                }\n                                e.end = e.begin = h;\n                            }\n                        }\n                        return e;\n                    }\n                }, t.getBuffer = r, t.getBufferTemplate = function() {\n                    var e = this.maskset;\n                    void 0 === e._buffer && (e._buffer = i.getMaskTemplate.call(this, !1, 1), void 0 === e.buffer && (e.buffer = e._buffer.slice()));\n                    return e._buffer;\n                }, t.getLastValidPosition = o, t.isMask = s, t.resetMaskSet = function(e) {\n                    var t = this.maskset;\n                    t.buffer = void 0, !0 !== e && (t.validPositions = {}, t.p = 0);\n                }, t.seekNext = l, t.seekPrevious = function(e, t) {\n                    var a = this, n = e - 1;\n                    if (e <= 0) return 0;\n                    for (;n > 0 && (!0 === t && (!0 !== i.getTest.call(a, n).match.newBlockMarker || !s.call(a, n, void 0, !0)) || !0 !== t && !s.call(a, n, void 0, !0)); ) n--;\n                    return n;\n                }, t.translatePosition = u;\n                var i = a(4713), n = a(7215);\n                function r(e) {\n                    var t = this.maskset;\n                    return void 0 !== t.buffer && !0 !== e || (t.buffer = i.getMaskTemplate.call(this, !0, o.call(this), !0), \n                    void 0 === t._buffer && (t._buffer = t.buffer.slice())), t.buffer;\n                }\n                function o(e, t, a) {\n                    var i = this.maskset, n = -1, r = -1, o = a || i.validPositions;\n                    for (var s in void 0 === e && (e = -1), o) {\n                        var l = parseInt(s);\n                        o[l] && (t || !0 !== o[l].generatedInput) && (l <= e && (n = l), l >= e && (r = l));\n                    }\n                    return -1 === n || n == e ? r : -1 == r || e - n < r - e ? n : r;\n                }\n                function s(e, t, a) {\n                    var n = this, r = this.maskset, o = i.getTestTemplate.call(n, e).match;\n                    if (\"\" === o.def && (o = i.getTest.call(n, e).match), !0 !== o.static) return o.fn;\n                    if (!0 === a && void 0 !== r.validPositions[e] && !0 !== r.validPositions[e].generatedInput) return !0;\n                    if (!0 !== t && e > -1) {\n                        if (a) {\n                            var s = i.getTests.call(n, e);\n                            return s.length > 1 + (\"\" === s[s.length - 1].match.def ? 1 : 0);\n                        }\n                        var l = i.determineTestTemplate.call(n, e, i.getTests.call(n, e)), u = i.getPlaceholder.call(n, e, l.match);\n                        return l.match.def !== u;\n                    }\n                    return !1;\n                }\n                function l(e, t, a) {\n                    var n = this;\n                    void 0 === a && (a = !0);\n                    for (var r = e + 1; \"\" !== i.getTest.call(n, r).match.def && (!0 === t && (!0 !== i.getTest.call(n, r).match.newBlockMarker || !s.call(n, r, void 0, !0)) || !0 !== t && !s.call(n, r, void 0, a)); ) r++;\n                    return r;\n                }\n                function u(e) {\n                    var t = this.opts, a = this.el;\n                    return !this.isRTL || \"number\" != typeof e || t.greedy && \"\" === t.placeholder || !a || (e = Math.abs(this._valueGet().length - e)), \n                    e;\n                }\n            },\n            4713: function(e, t) {\n                function a(e, t) {\n                    var a = (null != e.alternation ? e.mloc[i(e)] : e.locator).join(\"\");\n                    if (\"\" !== a) for (;a.length < t; ) a += \"0\";\n                    return a;\n                }\n                function i(e) {\n                    var t = e.locator[e.alternation];\n                    return \"string\" == typeof t && t.length > 0 && (t = t.split(\",\")[0]), void 0 !== t ? t.toString() : \"\";\n                }\n                function n(e, t, a) {\n                    var i = this.opts, n = this.maskset;\n                    if (void 0 !== (t = t || s.call(this, e).match).placeholder || !0 === a) return \"function\" == typeof t.placeholder ? t.placeholder(i) : t.placeholder;\n                    if (!0 === t.static) {\n                        if (e > -1 && void 0 === n.validPositions[e]) {\n                            var r, o = u.call(this, e), l = [];\n                            if (o.length > 1 + (\"\" === o[o.length - 1].match.def ? 1 : 0)) for (var c = 0; c < o.length; c++) if (\"\" !== o[c].match.def && !0 !== o[c].match.optionality && !0 !== o[c].match.optionalQuantifier && (!0 === o[c].match.static || void 0 === r || !1 !== o[c].match.fn.test(r.match.def, n, e, !0, i)) && (l.push(o[c]), \n                            !0 === o[c].match.static && (r = o[c]), l.length > 1 && /[0-9a-bA-Z]/.test(l[0].match.def))) return i.placeholder.charAt(e % i.placeholder.length);\n                        }\n                        return t.def;\n                    }\n                    return i.placeholder.charAt(e % i.placeholder.length);\n                }\n                function r(e, t, a) {\n                    return this.maskset.validPositions[e] || o.call(this, e, u.call(this, e, t ? t.slice() : t, a));\n                }\n                function o(e, t) {\n                    var i = this.opts;\n                    e = e > 0 ? e - 1 : 0;\n                    for (var n, r, o, l = a(s.call(this, e)), u = 0; u < t.length; u++) {\n                        var c = t[u];\n                        n = a(c, l.length);\n                        var f = Math.abs(n - l);\n                        (void 0 === r || \"\" !== n && f < r || o && !i.greedy && o.match.optionality && \"master\" === o.match.newBlockMarker && (!c.match.optionality || !c.match.newBlockMarker) || o && o.match.optionalQuantifier && !c.match.optionalQuantifier) && (r = f, \n                        o = c);\n                    }\n                    return o;\n                }\n                function s(e, t) {\n                    var a = this.maskset;\n                    return a.validPositions[e] ? a.validPositions[e] : (t || u.call(this, e))[0];\n                }\n                function l(e, t, a) {\n                    function i(e) {\n                        for (var t, a = [], i = -1, n = 0, r = e.length; n < r; n++) if (\"-\" === e.charAt(n)) for (t = e.charCodeAt(n + 1); ++i < t; ) a.push(String.fromCharCode(i)); else i = e.charCodeAt(n), \n                        a.push(e.charAt(n));\n                        return a.join(\"\");\n                    }\n                    return e.match.def === t.match.nativeDef || !(!(a.regex || e.match.fn instanceof RegExp && t.match.fn instanceof RegExp) || !0 === e.match.static || !0 === t.match.static) && -1 !== i(t.match.fn.toString().replace(/[[\\]/]/g, \"\")).indexOf(i(e.match.fn.toString().replace(/[[\\]/]/g, \"\")));\n                }\n                function u(e, t, a) {\n                    var i, n = this, r = this.dependencyLib, s = this.maskset, u = this.opts, c = this.el, f = s.maskToken, d = t ? a : 0, p = t ? t.slice() : [ 0 ], h = [], v = !1, m = t ? t.join(\"\") : \"\";\n                    function g(t, a, n, r) {\n                        function o(n, r, f) {\n                            function p(e, t) {\n                                var a = 0 === t.matches.indexOf(e);\n                                return a || t.matches.every((function(i, n) {\n                                    return !0 === i.isQuantifier ? a = p(e, t.matches[n - 1]) : Object.prototype.hasOwnProperty.call(i, \"matches\") && (a = p(e, i)), \n                                    !a;\n                                })), a;\n                            }\n                            function k(e, t, a) {\n                                var i, n;\n                                if ((s.tests[e] || s.validPositions[e]) && (s.tests[e] || [ s.validPositions[e] ]).every((function(e, r) {\n                                    if (e.mloc[t]) return i = e, !1;\n                                    var o = void 0 !== a ? a : e.alternation, s = void 0 !== e.locator[o] ? e.locator[o].toString().indexOf(t) : -1;\n                                    return (void 0 === n || s < n) && -1 !== s && (i = e, n = s), !0;\n                                })), i) {\n                                    var r = i.locator[i.alternation];\n                                    return (i.mloc[t] || i.mloc[r] || i.locator).slice((void 0 !== a ? a : i.alternation) + 1);\n                                }\n                                return void 0 !== a ? k(e, t) : void 0;\n                            }\n                            function y(e, t) {\n                                var a = e.alternation, i = void 0 === t || a === t.alternation && -1 === e.locator[a].toString().indexOf(t.locator[a]);\n                                if (!i && a > t.alternation) for (var n = t.alternation; n < a; n++) if (e.locator[n] !== t.locator[n]) {\n                                    a = n, i = !0;\n                                    break;\n                                }\n                                if (i) {\n                                    e.mloc = e.mloc || {};\n                                    var r = e.locator[a];\n                                    if (void 0 !== r) {\n                                        if (\"string\" == typeof r && (r = r.split(\",\")[0]), void 0 === e.mloc[r] && (e.mloc[r] = e.locator.slice()), \n                                        void 0 !== t) {\n                                            for (var o in t.mloc) \"string\" == typeof o && (o = o.split(\",\")[0]), void 0 === e.mloc[o] && (e.mloc[o] = t.mloc[o]);\n                                            e.locator[a] = Object.keys(e.mloc).join(\",\");\n                                        }\n                                        return !0;\n                                    }\n                                    e.alternation = void 0;\n                                }\n                                return !1;\n                            }\n                            function b(e, t) {\n                                if (e.locator.length !== t.locator.length) return !1;\n                                for (var a = e.alternation + 1; a < e.locator.length; a++) if (e.locator[a] !== t.locator[a]) return !1;\n                                return !0;\n                            }\n                            if (d > e + u._maxTestPos) throw \"Inputmask: There is probably an error in your mask definition or in the code. Create an issue on github with an example of the mask you are using. \" + s.mask;\n                            if (d === e && void 0 === n.matches) return h.push({\n                                match: n,\n                                locator: r.reverse(),\n                                cd: m,\n                                mloc: {}\n                            }), !0;\n                            if (void 0 !== n.matches) {\n                                if (n.isGroup && f !== n) {\n                                    if (n = o(t.matches[t.matches.indexOf(n) + 1], r, f)) return !0;\n                                } else if (n.isOptional) {\n                                    var x = n, P = h.length;\n                                    if (n = g(n, a, r, f)) {\n                                        if (h.forEach((function(e, t) {\n                                            t >= P && (e.match.optionality = !0);\n                                        })), i = h[h.length - 1].match, void 0 !== f || !p(i, x)) return !0;\n                                        v = !0, d = e;\n                                    }\n                                } else if (n.isAlternator) {\n                                    var E, S = n, _ = [], M = h.slice(), w = r.length, O = !1, T = a.length > 0 ? a.shift() : -1;\n                                    if (-1 === T || \"string\" == typeof T) {\n                                        var C, A = d, D = a.slice(), B = [];\n                                        if (\"string\" == typeof T) B = T.split(\",\"); else for (C = 0; C < S.matches.length; C++) B.push(C.toString());\n                                        if (void 0 !== s.excludes[e]) {\n                                            for (var j = B.slice(), R = 0, L = s.excludes[e].length; R < L; R++) {\n                                                var I = s.excludes[e][R].toString().split(\":\");\n                                                r.length == I[1] && B.splice(B.indexOf(I[0]), 1);\n                                            }\n                                            0 === B.length && (delete s.excludes[e], B = j);\n                                        }\n                                        (!0 === u.keepStatic || isFinite(parseInt(u.keepStatic)) && A >= u.keepStatic) && (B = B.slice(0, 1));\n                                        for (var F = 0; F < B.length; F++) {\n                                            C = parseInt(B[F]), h = [], a = \"string\" == typeof T && k(d, C, w) || D.slice();\n                                            var N = S.matches[C];\n                                            if (N && o(N, [ C ].concat(r), f)) n = !0; else if (0 === F && (O = !0), N && N.matches && N.matches.length > S.matches[0].matches.length) break;\n                                            E = h.slice(), d = A, h = [];\n                                            for (var V = 0; V < E.length; V++) {\n                                                var G = E[V], H = !1;\n                                                G.match.jit = G.match.jit || O, G.alternation = G.alternation || w, y(G);\n                                                for (var K = 0; K < _.length; K++) {\n                                                    var U = _[K];\n                                                    if (\"string\" != typeof T || void 0 !== G.alternation && B.includes(G.locator[G.alternation].toString())) {\n                                                        if (G.match.nativeDef === U.match.nativeDef) {\n                                                            H = !0, y(U, G);\n                                                            break;\n                                                        }\n                                                        if (l(G, U, u)) {\n                                                            y(G, U) && (H = !0, _.splice(_.indexOf(U), 0, G));\n                                                            break;\n                                                        }\n                                                        if (l(U, G, u)) {\n                                                            y(U, G);\n                                                            break;\n                                                        }\n                                                        if (Q = U, !0 === (W = G).match.static && !0 !== Q.match.static && Q.match.fn.test(W.match.def, s, e, !1, u, !1)) {\n                                                            b(G, U) || void 0 !== c.inputmask.userOptions.keepStatic ? y(G, U) && (H = !0, _.splice(_.indexOf(U), 0, G)) : u.keepStatic = !0;\n                                                            break;\n                                                        }\n                                                    }\n                                                }\n                                                H || _.push(G);\n                                            }\n                                        }\n                                        h = M.concat(_), d = e, v = h.length > 0, n = _.length > 0, a = D.slice();\n                                    } else n = o(S.matches[T] || t.matches[T], [ T ].concat(r), f);\n                                    if (n) return !0;\n                                } else if (n.isQuantifier && f !== t.matches[t.matches.indexOf(n) - 1]) for (var $ = n, z = a.length > 0 ? a.shift() : 0; z < (isNaN($.quantifier.max) ? z + 1 : $.quantifier.max) && d <= e; z++) {\n                                    var q = t.matches[t.matches.indexOf($) - 1];\n                                    if (n = o(q, [ z ].concat(r), q)) {\n                                        if ((i = h[h.length - 1].match).optionalQuantifier = z >= $.quantifier.min, i.jit = (z + 1) * (q.matches.indexOf(i) + 1) > $.quantifier.jit, \n                                        i.optionalQuantifier && p(i, q)) {\n                                            v = !0, d = e;\n                                            break;\n                                        }\n                                        return i.jit && (s.jitOffset[e] = q.matches.length - q.matches.indexOf(i)), !0;\n                                    }\n                                } else if (n = g(n, a, r, f)) return !0;\n                            } else d++;\n                            var W, Q;\n                        }\n                        for (var f = a.length > 0 ? a.shift() : 0; f < t.matches.length; f++) if (!0 !== t.matches[f].isQuantifier) {\n                            var p = o(t.matches[f], [ f ].concat(n), r);\n                            if (p && d === e) return p;\n                            if (d > e) break;\n                        }\n                    }\n                    if (e > -1) {\n                        if (void 0 === t) {\n                            for (var k, y = e - 1; void 0 === (k = s.validPositions[y] || s.tests[y]) && y > -1; ) y--;\n                            void 0 !== k && y > -1 && (p = function(e, t) {\n                                var a, i = [];\n                                return Array.isArray(t) || (t = [ t ]), t.length > 0 && (void 0 === t[0].alternation || !0 === u.keepStatic ? 0 === (i = o.call(n, e, t.slice()).locator.slice()).length && (i = t[0].locator.slice()) : t.forEach((function(e) {\n                                    \"\" !== e.def && (0 === i.length ? (a = e.alternation, i = e.locator.slice()) : e.locator[a] && -1 === i[a].toString().indexOf(e.locator[a]) && (i[a] += \",\" + e.locator[a]));\n                                }))), i;\n                            }(y, k), m = p.join(\"\"), d = y);\n                        }\n                        if (s.tests[e] && s.tests[e][0].cd === m) return s.tests[e];\n                        for (var b = p.shift(); b < f.length; b++) {\n                            if (g(f[b], p, [ b ]) && d === e || d > e) break;\n                        }\n                    }\n                    return (0 === h.length || v) && h.push({\n                        match: {\n                            fn: null,\n                            static: !0,\n                            optionality: !1,\n                            casing: null,\n                            def: \"\",\n                            placeholder: \"\"\n                        },\n                        locator: [],\n                        mloc: {},\n                        cd: m\n                    }), void 0 !== t && s.tests[e] ? r.extend(!0, [], h) : (s.tests[e] = r.extend(!0, [], h), \n                    s.tests[e]);\n                }\n                Object.defineProperty(t, \"__esModule\", {\n                    value: !0\n                }), t.determineTestTemplate = o, t.getDecisionTaker = i, t.getMaskTemplate = function(e, t, a, i, s) {\n                    var l = this, c = this.opts, f = this.maskset, d = c.greedy;\n                    s && (c.greedy = !1);\n                    t = t || 0;\n                    var p, h, v, m, g = [], k = 0;\n                    do {\n                        if (!0 === e && f.validPositions[k]) v = s && !0 === f.validPositions[k].match.optionality && void 0 === f.validPositions[k + 1] && (!0 === f.validPositions[k].generatedInput || f.validPositions[k].input == c.skipOptionalPartCharacter && k > 0) ? o.call(l, k, u.call(l, k, p, k - 1)) : f.validPositions[k], \n                        h = v.match, p = v.locator.slice(), g.push(!0 === a ? v.input : !1 === a ? h.nativeDef : n.call(l, k, h)); else {\n                            v = r.call(l, k, p, k - 1), h = v.match, p = v.locator.slice();\n                            var y = !0 !== i && (!1 !== c.jitMasking ? c.jitMasking : h.jit);\n                            (m = (m && h.static && h.def !== c.groupSeparator && null === h.fn || f.validPositions[k - 1] && h.static && h.def !== c.groupSeparator && null === h.fn) && f.tests[k] && 1 === f.tests[k].length) || !1 === y || void 0 === y || \"number\" == typeof y && isFinite(y) && y > k ? g.push(!1 === a ? h.nativeDef : n.call(l, k, h)) : m = !1;\n                        }\n                        k++;\n                    } while (!0 !== h.static || \"\" !== h.def || t > k);\n                    \"\" === g[g.length - 1] && g.pop();\n                    !1 === a && void 0 !== f.maskLength || (f.maskLength = k - 1);\n                    return c.greedy = d, g;\n                }, t.getPlaceholder = n, t.getTest = s, t.getTests = u, t.getTestTemplate = r, t.isSubsetOf = l;\n            },\n            7215: function(e, t, a) {\n                Object.defineProperty(t, \"__esModule\", {\n                    value: !0\n                }), t.alternate = l, t.checkAlternationMatch = function(e, t, a) {\n                    for (var i, n = this.opts.greedy ? t : t.slice(0, 1), r = !1, o = void 0 !== a ? a.split(\",\") : [], s = 0; s < o.length; s++) -1 !== (i = e.indexOf(o[s])) && e.splice(i, 1);\n                    for (var l = 0; l < e.length; l++) if (n.includes(e[l])) {\n                        r = !0;\n                        break;\n                    }\n                    return r;\n                }, t.isComplete = c, t.isValid = f, t.refreshFromBuffer = p, t.revalidateMask = v, \n                t.handleRemove = function(e, t, a, i, s) {\n                    var u = this, c = this.maskset, f = this.opts;\n                    if ((f.numericInput || u.isRTL) && (t === r.default.BACKSPACE ? t = r.default.DELETE : t === r.default.DELETE && (t = r.default.BACKSPACE), \n                    u.isRTL)) {\n                        var d = a.end;\n                        a.end = a.begin, a.begin = d;\n                    }\n                    var p, h = o.getLastValidPosition.call(u, void 0, !0);\n                    a.end >= o.getBuffer.call(u).length && h >= a.end && (a.end = h + 1);\n                    t === r.default.BACKSPACE ? a.end - a.begin < 1 && (a.begin = o.seekPrevious.call(u, a.begin)) : t === r.default.DELETE && a.begin === a.end && (a.end = o.isMask.call(u, a.end, !0, !0) ? a.end + 1 : o.seekNext.call(u, a.end) + 1);\n                    if (!1 !== (p = v.call(u, a))) {\n                        if (!0 !== i && !1 !== f.keepStatic || null !== f.regex && -1 !== n.getTest.call(u, a.begin).match.def.indexOf(\"|\")) {\n                            var m = l.call(u, !0);\n                            if (m) {\n                                var g = void 0 !== m.caret ? m.caret : m.pos ? o.seekNext.call(u, m.pos.begin ? m.pos.begin : m.pos) : o.getLastValidPosition.call(u, -1, !0);\n                                (t !== r.default.DELETE || a.begin > g) && a.begin;\n                            }\n                        }\n                        !0 !== i && (c.p = t === r.default.DELETE ? a.begin + p : a.begin, c.p = o.determineNewCaretPosition.call(u, {\n                            begin: c.p,\n                            end: c.p\n                        }, !1).begin);\n                    }\n                };\n                var i, n = a(4713), r = (i = a(4528)) && i.__esModule ? i : {\n                    default: i\n                }, o = a(8711), s = a(6030);\n                function l(e, t, a, i, r, s) {\n                    var u, c, d, p, h, v, m, g, k, y, b, x = this, P = this.dependencyLib, E = this.opts, S = x.maskset, _ = P.extend(!0, {}, S.validPositions), M = P.extend(!0, {}, S.tests), w = !1, O = !1, T = void 0 !== r ? r : o.getLastValidPosition.call(x);\n                    if (s && (y = s.begin, b = s.end, s.begin > s.end && (y = s.end, b = s.begin)), \n                    -1 === T && void 0 === r) u = 0, c = (p = n.getTest.call(x, u)).alternation; else for (;T >= 0; T--) if ((d = S.validPositions[T]) && void 0 !== d.alternation) {\n                        if (p && p.locator[d.alternation] !== d.locator[d.alternation]) break;\n                        u = T, c = S.validPositions[u].alternation, p = d;\n                    }\n                    if (void 0 !== c) {\n                        m = parseInt(u), S.excludes[m] = S.excludes[m] || [], !0 !== e && S.excludes[m].push((0, \n                        n.getDecisionTaker)(p) + \":\" + p.alternation);\n                        var C = [], A = -1;\n                        for (h = m; h < o.getLastValidPosition.call(x, void 0, !0) + 1; h++) -1 === A && e <= h && void 0 !== t && (C.push(t), \n                        A = C.length - 1), (v = S.validPositions[h]) && !0 !== v.generatedInput && (void 0 === s || h < y || h >= b) && C.push(v.input), \n                        delete S.validPositions[h];\n                        for (-1 === A && void 0 !== t && (C.push(t), A = C.length - 1); void 0 !== S.excludes[m] && S.excludes[m].length < 10; ) {\n                            for (S.tests = {}, o.resetMaskSet.call(x, !0), w = !0, h = 0; h < C.length && (g = w.caret || o.getLastValidPosition.call(x, void 0, !0) + 1, \n                            k = C[h], w = f.call(x, g, k, !1, i, !0)); h++) h === A && (O = w), 1 == e && w && (O = {\n                                caretPos: h\n                            });\n                            if (w) break;\n                            if (o.resetMaskSet.call(x), p = n.getTest.call(x, m), S.validPositions = P.extend(!0, {}, _), \n                            S.tests = P.extend(!0, {}, M), !S.excludes[m]) {\n                                O = l.call(x, e, t, a, i, m - 1, s);\n                                break;\n                            }\n                            var D = (0, n.getDecisionTaker)(p);\n                            if (-1 !== S.excludes[m].indexOf(D + \":\" + p.alternation)) {\n                                O = l.call(x, e, t, a, i, m - 1, s);\n                                break;\n                            }\n                            for (S.excludes[m].push(D + \":\" + p.alternation), h = m; h < o.getLastValidPosition.call(x, void 0, !0) + 1; h++) delete S.validPositions[h];\n                        }\n                    }\n                    return O && !1 === E.keepStatic || delete S.excludes[m], O;\n                }\n                function u(e, t, a) {\n                    var i = this.opts, n = this.maskset;\n                    switch (i.casing || t.casing) {\n                      case \"upper\":\n                        e = e.toUpperCase();\n                        break;\n\n                      case \"lower\":\n                        e = e.toLowerCase();\n                        break;\n\n                      case \"title\":\n                        var o = n.validPositions[a - 1];\n                        e = 0 === a || o && o.input === String.fromCharCode(r.default.SPACE) ? e.toUpperCase() : e.toLowerCase();\n                        break;\n\n                      default:\n                        if (\"function\" == typeof i.casing) {\n                            var s = Array.prototype.slice.call(arguments);\n                            s.push(n.validPositions), e = i.casing.apply(this, s);\n                        }\n                    }\n                    return e;\n                }\n                function c(e) {\n                    var t = this, a = this.opts, i = this.maskset;\n                    if (\"function\" == typeof a.isComplete) return a.isComplete(e, a);\n                    if (\"*\" !== a.repeat) {\n                        var r = !1, s = o.determineLastRequiredPosition.call(t, !0), l = o.seekPrevious.call(t, s.l);\n                        if (void 0 === s.def || s.def.newBlockMarker || s.def.optionality || s.def.optionalQuantifier) {\n                            r = !0;\n                            for (var u = 0; u <= l; u++) {\n                                var c = n.getTestTemplate.call(t, u).match;\n                                if (!0 !== c.static && void 0 === i.validPositions[u] && !0 !== c.optionality && !0 !== c.optionalQuantifier || !0 === c.static && e[u] !== n.getPlaceholder.call(t, u, c)) {\n                                    r = !1;\n                                    break;\n                                }\n                            }\n                        }\n                        return r;\n                    }\n                }\n                function f(e, t, a, i, r, s, d) {\n                    var m = this, g = this.dependencyLib, k = this.opts, y = m.maskset;\n                    function b(e) {\n                        return m.isRTL ? e.begin - e.end > 1 || e.begin - e.end == 1 : e.end - e.begin > 1 || e.end - e.begin == 1;\n                    }\n                    a = !0 === a;\n                    var x = e;\n                    function P(e) {\n                        if (void 0 !== e) {\n                            if (void 0 !== e.remove && (Array.isArray(e.remove) || (e.remove = [ e.remove ]), \n                            e.remove.sort((function(e, t) {\n                                return t.pos - e.pos;\n                            })).forEach((function(e) {\n                                v.call(m, {\n                                    begin: e,\n                                    end: e + 1\n                                });\n                            })), e.remove = void 0), void 0 !== e.insert && (Array.isArray(e.insert) || (e.insert = [ e.insert ]), \n                            e.insert.sort((function(e, t) {\n                                return e.pos - t.pos;\n                            })).forEach((function(e) {\n                                \"\" !== e.c && f.call(m, e.pos, e.c, void 0 === e.strict || e.strict, void 0 !== e.fromIsValid ? e.fromIsValid : i);\n                            })), e.insert = void 0), e.refreshFromBuffer && e.buffer) {\n                                var t = e.refreshFromBuffer;\n                                p.call(m, !0 === t ? t : t.start, t.end, e.buffer), e.refreshFromBuffer = void 0;\n                            }\n                            void 0 !== e.rewritePosition && (x = e.rewritePosition, e = !0);\n                        }\n                        return e;\n                    }\n                    function E(t, a, r) {\n                        var s = !1;\n                        return n.getTests.call(m, t).every((function(l, c) {\n                            var f = l.match;\n                            if (o.getBuffer.call(m, !0), !1 !== (s = (!f.jit || void 0 !== y.validPositions[o.seekPrevious.call(m, t)]) && (null != f.fn ? f.fn.test(a, y, t, r, k, b(e)) : (a === f.def || a === k.skipOptionalPartCharacter) && \"\" !== f.def && {\n                                c: n.getPlaceholder.call(m, t, f, !0) || f.def,\n                                pos: t\n                            }))) {\n                                var d = void 0 !== s.c ? s.c : a, p = t;\n                                return d = d === k.skipOptionalPartCharacter && !0 === f.static ? n.getPlaceholder.call(m, t, f, !0) || f.def : d, \n                                !0 !== (s = P(s)) && void 0 !== s.pos && s.pos !== t && (p = s.pos), !0 !== s && void 0 === s.pos && void 0 === s.c ? !1 : (!1 === v.call(m, e, g.extend({}, l, {\n                                    input: u.call(m, d, f, p)\n                                }), i, p) && (s = !1), !1);\n                            }\n                            return !0;\n                        })), s;\n                    }\n                    void 0 !== e.begin && (x = m.isRTL ? e.end : e.begin);\n                    var S = !0, _ = g.extend(!0, {}, y.validPositions);\n                    if (!1 === k.keepStatic && void 0 !== y.excludes[x] && !0 !== r && !0 !== i) for (var M = x; M < (m.isRTL ? e.begin : e.end); M++) void 0 !== y.excludes[M] && (y.excludes[M] = void 0, \n                    delete y.tests[M]);\n                    if (\"function\" == typeof k.preValidation && !0 !== i && !0 !== s && (S = P(S = k.preValidation.call(m, o.getBuffer.call(m), x, t, b(e), k, y, e, a || r))), \n                    !0 === S) {\n                        if (S = E(x, t, a), (!a || !0 === i) && !1 === S && !0 !== s) {\n                            var w = y.validPositions[x];\n                            if (!w || !0 !== w.match.static || w.match.def !== t && t !== k.skipOptionalPartCharacter) {\n                                if (k.insertMode || void 0 === y.validPositions[o.seekNext.call(m, x)] || e.end > x) {\n                                    var O = !1;\n                                    if (y.jitOffset[x] && void 0 === y.validPositions[o.seekNext.call(m, x)] && !1 !== (S = f.call(m, x + y.jitOffset[x], t, !0, !0)) && (!0 !== r && (S.caret = x), \n                                    O = !0), e.end > x && (y.validPositions[x] = void 0), !O && !o.isMask.call(m, x, k.keepStatic && 0 === x)) for (var T = x + 1, C = o.seekNext.call(m, x, !1, 0 !== x); T <= C; T++) if (!1 !== (S = E(T, t, a))) {\n                                        S = h.call(m, x, void 0 !== S.pos ? S.pos : T) || S, x = T;\n                                        break;\n                                    }\n                                }\n                            } else S = {\n                                caret: o.seekNext.call(m, x)\n                            };\n                        }\n                        !1 !== S || !k.keepStatic || !c.call(m, o.getBuffer.call(m)) && 0 !== x || a || !0 === r ? b(e) && y.tests[x] && y.tests[x].length > 1 && k.keepStatic && !a && !0 !== r && (S = l.call(m, !0)) : S = l.call(m, x, t, a, i, void 0, e), \n                        !0 === S && (S = {\n                            pos: x\n                        });\n                    }\n                    if (\"function\" == typeof k.postValidation && !0 !== i && !0 !== s) {\n                        var A = k.postValidation.call(m, o.getBuffer.call(m, !0), void 0 !== e.begin ? m.isRTL ? e.end : e.begin : e, t, S, k, y, a, d);\n                        void 0 !== A && (S = !0 === A ? S : A);\n                    }\n                    S && void 0 === S.pos && (S.pos = x), !1 === S || !0 === s ? (o.resetMaskSet.call(m, !0), \n                    y.validPositions = g.extend(!0, {}, _)) : h.call(m, void 0, x, !0);\n                    var D = P(S);\n                    void 0 !== m.maxLength && (o.getBuffer.call(m).length > m.maxLength && !i && (o.resetMaskSet.call(m, !0), \n                    y.validPositions = g.extend(!0, {}, _), D = !1));\n                    return D;\n                }\n                function d(e, t, a) {\n                    for (var i = this.maskset, r = !1, o = n.getTests.call(this, e), s = 0; s < o.length; s++) {\n                        if (o[s].match && (o[s].match.nativeDef === t.match[a.shiftPositions ? \"def\" : \"nativeDef\"] && (!a.shiftPositions || !t.match.static) || o[s].match.nativeDef === t.match.nativeDef || a.regex && !o[s].match.static && o[s].match.fn.test(t.input))) {\n                            r = !0;\n                            break;\n                        }\n                        if (o[s].match && o[s].match.def === t.match.nativeDef) {\n                            r = void 0;\n                            break;\n                        }\n                    }\n                    return !1 === r && void 0 !== i.jitOffset[e] && (r = d.call(this, e + i.jitOffset[e], t, a)), \n                    r;\n                }\n                function p(e, t, a) {\n                    var i, n, r = this, l = this.maskset, u = this.opts, c = this.dependencyLib, f = u.skipOptionalPartCharacter, d = r.isRTL ? a.slice().reverse() : a;\n                    if (u.skipOptionalPartCharacter = \"\", !0 === e) o.resetMaskSet.call(r), l.tests = {}, \n                    e = 0, t = a.length, n = o.determineNewCaretPosition.call(r, {\n                        begin: 0,\n                        end: 0\n                    }, !1).begin; else {\n                        for (i = e; i < t; i++) delete l.validPositions[i];\n                        n = e;\n                    }\n                    var p = new c.Event(\"keypress\");\n                    for (i = e; i < t; i++) {\n                        p.which = d[i].toString().charCodeAt(0), r.ignorable = !1;\n                        var h = s.EventHandlers.keypressEvent.call(r, p, !0, !1, !1, n);\n                        !1 !== h && void 0 !== h && (n = h.forwardPosition);\n                    }\n                    u.skipOptionalPartCharacter = f;\n                }\n                function h(e, t, a) {\n                    var i = this, r = this.maskset, s = this.dependencyLib;\n                    if (void 0 === e) for (e = t - 1; e > 0 && !r.validPositions[e]; e--) ;\n                    for (var l = e; l < t; l++) {\n                        if (void 0 === r.validPositions[l] && !o.isMask.call(i, l, !1)) if (0 == l ? n.getTest.call(i, l) : r.validPositions[l - 1]) {\n                            var u = n.getTests.call(i, l).slice();\n                            \"\" === u[u.length - 1].match.def && u.pop();\n                            var c, d = n.determineTestTemplate.call(i, l, u);\n                            if (d && (!0 !== d.match.jit || \"master\" === d.match.newBlockMarker && (c = r.validPositions[l + 1]) && !0 === c.match.optionalQuantifier) && ((d = s.extend({}, d, {\n                                input: n.getPlaceholder.call(i, l, d.match, !0) || d.match.def\n                            })).generatedInput = !0, v.call(i, l, d, !0), !0 !== a)) {\n                                var p = r.validPositions[t].input;\n                                return r.validPositions[t] = void 0, f.call(i, t, p, !0, !0);\n                            }\n                        }\n                    }\n                }\n                function v(e, t, a, i) {\n                    var r = this, s = this.maskset, l = this.opts, u = this.dependencyLib;\n                    function c(e, t, a) {\n                        var i = t[e];\n                        if (void 0 !== i && !0 === i.match.static && !0 !== i.match.optionality && (void 0 === t[0] || void 0 === t[0].alternation)) {\n                            var n = a.begin <= e - 1 ? t[e - 1] && !0 === t[e - 1].match.static && t[e - 1] : t[e - 1], r = a.end > e + 1 ? t[e + 1] && !0 === t[e + 1].match.static && t[e + 1] : t[e + 1];\n                            return n && r;\n                        }\n                        return !1;\n                    }\n                    var p = 0, h = void 0 !== e.begin ? e.begin : e, v = void 0 !== e.end ? e.end : e, m = !0;\n                    if (e.begin > e.end && (h = e.end, v = e.begin), i = void 0 !== i ? i : h, h !== v || l.insertMode && void 0 !== s.validPositions[i] && void 0 === a || void 0 === t) {\n                        var g, k = u.extend(!0, {}, s.validPositions), y = o.getLastValidPosition.call(r, void 0, !0);\n                        for (s.p = h, g = y; g >= h; g--) delete s.validPositions[g], void 0 === t && delete s.tests[g + 1];\n                        var b, x, P = i, E = P;\n                        for (t && (s.validPositions[i] = u.extend(!0, {}, t), E++, P++), g = t ? v : v - 1; g <= y; g++) {\n                            if (void 0 !== (b = k[g]) && !0 !== b.generatedInput && (g >= v || g >= h && c(g, k, {\n                                begin: h,\n                                end: v\n                            }))) {\n                                for (;\"\" !== n.getTest.call(r, E).match.def; ) {\n                                    if (!1 !== (x = d.call(r, E, b, l)) || \"+\" === b.match.def) {\n                                        \"+\" === b.match.def && o.getBuffer.call(r, !0);\n                                        var S = f.call(r, E, b.input, \"+\" !== b.match.def, !0);\n                                        if (m = !1 !== S, P = (S.pos || E) + 1, !m && x) break;\n                                    } else m = !1;\n                                    if (m) {\n                                        void 0 === t && b.match.static && g === e.begin && p++;\n                                        break;\n                                    }\n                                    if (!m && E > s.maskLength) break;\n                                    E++;\n                                }\n                                \"\" == n.getTest.call(r, E).match.def && (m = !1), E = P;\n                            }\n                            if (!m) break;\n                        }\n                        if (!m) return s.validPositions = u.extend(!0, {}, k), o.resetMaskSet.call(r, !0), \n                        !1;\n                    } else t && n.getTest.call(r, i).match.cd === t.match.cd && (s.validPositions[i] = u.extend(!0, {}, t));\n                    return o.resetMaskSet.call(r, !0), p;\n                }\n            }\n        }, t = {};\n        function a(i) {\n            var n = t[i];\n            if (void 0 !== n) return n.exports;\n            var r = t[i] = {\n                exports: {}\n            };\n            return e[i](r, r.exports, a), r.exports;\n        }\n        var i = {};\n        return function() {\n            var e, t = i;\n            Object.defineProperty(t, \"__esModule\", {\n                value: !0\n            }), t.default = void 0, a(3851), a(219), a(207), a(5296);\n            var n = ((e = a(2394)) && e.__esModule ? e : {\n                default: e\n            }).default;\n            t.default = n;\n        }(), i;\n    }();\n}));","module.exports = function (list) {\n  var addAsync = function (values, callback, items) {\n    var valuesToAdd = values.splice(0, 50)\n    items = items || []\n    items = items.concat(list.add(valuesToAdd))\n    if (values.length > 0) {\n      setTimeout(function () {\n        addAsync(values, callback, items)\n      }, 1)\n    } else {\n      list.update()\n      callback(items)\n    }\n  }\n  return addAsync\n}\n","module.exports = function (list) {\n  // Add handlers\n  list.handlers.filterStart = list.handlers.filterStart || []\n  list.handlers.filterComplete = list.handlers.filterComplete || []\n\n  return function (filterFunction) {\n    list.trigger('filterStart')\n    list.i = 1 // Reset paging\n    list.reset.filter()\n    if (filterFunction === undefined) {\n      list.filtered = false\n    } else {\n      list.filtered = true\n      var is = list.items\n      for (var i = 0, il = is.length; i < il; i++) {\n        var item = is[i]\n        if (filterFunction(item)) {\n          item.filtered = true\n        } else {\n          item.filtered = false\n        }\n      }\n    }\n    list.update()\n    list.trigger('filterComplete')\n    return list.visibleItems\n  }\n}\n","var classes = require('./utils/classes'),\n  events = require('./utils/events'),\n  extend = require('./utils/extend'),\n  toString = require('./utils/to-string'),\n  getByClass = require('./utils/get-by-class'),\n  fuzzy = require('./utils/fuzzy')\n\nmodule.exports = function (list, options) {\n  options = options || {}\n\n  options = extend(\n    {\n      location: 0,\n      distance: 100,\n      threshold: 0.4,\n      multiSearch: true,\n      searchClass: 'fuzzy-search',\n    },\n    options\n  )\n\n  var fuzzySearch = {\n    search: function (searchString, columns) {\n      // Substract arguments from the searchString or put searchString as only argument\n      var searchArguments = options.multiSearch ? searchString.replace(/ +$/, '').split(/ +/) : [searchString]\n\n      for (var k = 0, kl = list.items.length; k < kl; k++) {\n        fuzzySearch.item(list.items[k], columns, searchArguments)\n      }\n    },\n    item: function (item, columns, searchArguments) {\n      var found = true\n      for (var i = 0; i < searchArguments.length; i++) {\n        var foundArgument = false\n        for (var j = 0, jl = columns.length; j < jl; j++) {\n          if (fuzzySearch.values(item.values(), columns[j], searchArguments[i])) {\n            foundArgument = true\n          }\n        }\n        if (!foundArgument) {\n          found = false\n        }\n      }\n      item.found = found\n    },\n    values: function (values, value, searchArgument) {\n      if (values.hasOwnProperty(value)) {\n        var text = toString(values[value]).toLowerCase()\n\n        if (fuzzy(text, searchArgument, options)) {\n          return true\n        }\n      }\n      return false\n    },\n  }\n\n  events.bind(\n    getByClass(list.listContainer, options.searchClass),\n    'keyup',\n    list.utils.events.debounce(function (e) {\n      var target = e.target || e.srcElement // IE have srcElement\n      list.search(target.value, fuzzySearch.search)\n    }, list.searchDelay)\n  )\n\n  return function (str, columns) {\n    list.search(str, columns, fuzzySearch.search)\n  }\n}\n","var naturalSort = require('string-natural-compare'),\n  getByClass = require('./utils/get-by-class'),\n  extend = require('./utils/extend'),\n  indexOf = require('./utils/index-of'),\n  events = require('./utils/events'),\n  toString = require('./utils/to-string'),\n  classes = require('./utils/classes'),\n  getAttribute = require('./utils/get-attribute'),\n  toArray = require('./utils/to-array')\n\nmodule.exports = function (id, options, values) {\n  var self = this,\n    init,\n    Item = require('./item')(self),\n    addAsync = require('./add-async')(self),\n    initPagination = require('./pagination')(self)\n\n  init = {\n    start: function () {\n      self.listClass = 'list'\n      self.searchClass = 'search'\n      self.sortClass = 'sort'\n      self.page = 10000\n      self.i = 1\n      self.items = []\n      self.visibleItems = []\n      self.matchingItems = []\n      self.searched = false\n      self.filtered = false\n      self.searchColumns = undefined\n      self.searchDelay = 0\n      self.handlers = { updated: [] }\n      self.valueNames = []\n      self.utils = {\n        getByClass: getByClass,\n        extend: extend,\n        indexOf: indexOf,\n        events: events,\n        toString: toString,\n        naturalSort: naturalSort,\n        classes: classes,\n        getAttribute: getAttribute,\n        toArray: toArray,\n      }\n\n      self.utils.extend(self, options)\n\n      self.listContainer = typeof id === 'string' ? document.getElementById(id) : id\n      if (!self.listContainer) {\n        return\n      }\n      self.list = getByClass(self.listContainer, self.listClass, true)\n\n      self.parse = require('./parse')(self)\n      self.templater = require('./templater')(self)\n      self.search = require('./search')(self)\n      self.filter = require('./filter')(self)\n      self.sort = require('./sort')(self)\n      self.fuzzySearch = require('./fuzzy-search')(self, options.fuzzySearch)\n\n      this.handlers()\n      this.items()\n      this.pagination()\n\n      self.update()\n    },\n    handlers: function () {\n      for (var handler in self.handlers) {\n        if (self[handler] && self.handlers.hasOwnProperty(handler)) {\n          self.on(handler, self[handler])\n        }\n      }\n    },\n    items: function () {\n      self.parse(self.list)\n      if (values !== undefined) {\n        self.add(values)\n      }\n    },\n    pagination: function () {\n      if (options.pagination !== undefined) {\n        if (options.pagination === true) {\n          options.pagination = [{}]\n        }\n        if (options.pagination[0] === undefined) {\n          options.pagination = [options.pagination]\n        }\n        for (var i = 0, il = options.pagination.length; i < il; i++) {\n          initPagination(options.pagination[i])\n        }\n      }\n    },\n  }\n\n  /*\n   * Re-parse the List, use if html have changed\n   */\n  this.reIndex = function () {\n    self.items = []\n    self.visibleItems = []\n    self.matchingItems = []\n    self.searched = false\n    self.filtered = false\n    self.parse(self.list)\n  }\n\n  this.toJSON = function () {\n    var json = []\n    for (var i = 0, il = self.items.length; i < il; i++) {\n      json.push(self.items[i].values())\n    }\n    return json\n  }\n\n  /*\n   * Add object to list\n   */\n  this.add = function (values, callback) {\n    if (values.length === 0) {\n      return\n    }\n    if (callback) {\n      addAsync(values.slice(0), callback)\n      return\n    }\n    var added = [],\n      notCreate = false\n    if (values[0] === undefined) {\n      values = [values]\n    }\n    for (var i = 0, il = values.length; i < il; i++) {\n      var item = null\n      notCreate = self.items.length > self.page ? true : false\n      item = new Item(values[i], undefined, notCreate)\n      self.items.push(item)\n      added.push(item)\n    }\n    self.update()\n    return added\n  }\n\n  this.show = function (i, page) {\n    this.i = i\n    this.page = page\n    self.update()\n    return self\n  }\n\n  /* Removes object from list.\n   * Loops through the list and removes objects where\n   * property \"valuename\" === value\n   */\n  this.remove = function (valueName, value, options) {\n    var found = 0\n    for (var i = 0, il = self.items.length; i < il; i++) {\n      if (self.items[i].values()[valueName] == value) {\n        self.templater.remove(self.items[i], options)\n        self.items.splice(i, 1)\n        il--\n        i--\n        found++\n      }\n    }\n    self.update()\n    return found\n  }\n\n  /* Gets the objects in the list which\n   * property \"valueName\" === value\n   */\n  this.get = function (valueName, value) {\n    var matchedItems = []\n    for (var i = 0, il = self.items.length; i < il; i++) {\n      var item = self.items[i]\n      if (item.values()[valueName] == value) {\n        matchedItems.push(item)\n      }\n    }\n    return matchedItems\n  }\n\n  /*\n   * Get size of the list\n   */\n  this.size = function () {\n    return self.items.length\n  }\n\n  /*\n   * Removes all items from the list\n   */\n  this.clear = function () {\n    self.templater.clear()\n    self.items = []\n    return self\n  }\n\n  this.on = function (event, callback) {\n    self.handlers[event].push(callback)\n    return self\n  }\n\n  this.off = function (event, callback) {\n    var e = self.handlers[event]\n    var index = indexOf(e, callback)\n    if (index > -1) {\n      e.splice(index, 1)\n    }\n    return self\n  }\n\n  this.trigger = function (event) {\n    var i = self.handlers[event].length\n    while (i--) {\n      self.handlers[event][i](self)\n    }\n    return self\n  }\n\n  this.reset = {\n    filter: function () {\n      var is = self.items,\n        il = is.length\n      while (il--) {\n        is[il].filtered = false\n      }\n      return self\n    },\n    search: function () {\n      var is = self.items,\n        il = is.length\n      while (il--) {\n        is[il].found = false\n      }\n      return self\n    },\n  }\n\n  this.update = function () {\n    var is = self.items,\n      il = is.length\n\n    self.visibleItems = []\n    self.matchingItems = []\n    self.templater.clear()\n    for (var i = 0; i < il; i++) {\n      if (is[i].matching() && self.matchingItems.length + 1 >= self.i && self.visibleItems.length < self.page) {\n        is[i].show()\n        self.visibleItems.push(is[i])\n        self.matchingItems.push(is[i])\n      } else if (is[i].matching()) {\n        self.matchingItems.push(is[i])\n        is[i].hide()\n      } else {\n        is[i].hide()\n      }\n    }\n    self.trigger('updated')\n    return self\n  }\n\n  init.start()\n}\n","module.exports = function (list) {\n  return function (initValues, element, notCreate) {\n    var item = this\n\n    this._values = {}\n\n    this.found = false // Show if list.searched == true and this.found == true\n    this.filtered = false // Show if list.filtered == true and this.filtered == true\n\n    var init = function (initValues, element, notCreate) {\n      if (element === undefined) {\n        if (notCreate) {\n          item.values(initValues, notCreate)\n        } else {\n          item.values(initValues)\n        }\n      } else {\n        item.elm = element\n        var values = list.templater.get(item, initValues)\n        item.values(values)\n      }\n    }\n\n    this.values = function (newValues, notCreate) {\n      if (newValues !== undefined) {\n        for (var name in newValues) {\n          item._values[name] = newValues[name]\n        }\n        if (notCreate !== true) {\n          list.templater.set(item, item.values())\n        }\n      } else {\n        return item._values\n      }\n    }\n\n    this.show = function () {\n      list.templater.show(item)\n    }\n\n    this.hide = function () {\n      list.templater.hide(item)\n    }\n\n    this.matching = function () {\n      return (\n        (list.filtered && list.searched && item.found && item.filtered) ||\n        (list.filtered && !list.searched && item.filtered) ||\n        (!list.filtered && list.searched && item.found) ||\n        (!list.filtered && !list.searched)\n      )\n    }\n\n    this.visible = function () {\n      return item.elm && item.elm.parentNode == list.list ? true : false\n    }\n\n    init(initValues, element, notCreate)\n  }\n}\n","var classes = require('./utils/classes'),\n  events = require('./utils/events'),\n  List = require('./index')\n\nmodule.exports = function (list) {\n  var isHidden = false\n\n  var refresh = function (pagingList, options) {\n    if (list.page < 1) {\n      list.listContainer.style.display = 'none'\n      isHidden = true\n      return\n    } else if (isHidden) {\n      list.listContainer.style.display = 'block'\n    }\n\n    var item,\n      l = list.matchingItems.length,\n      index = list.i,\n      page = list.page,\n      pages = Math.ceil(l / page),\n      currentPage = Math.ceil(index / page),\n      innerWindow = options.innerWindow || 2,\n      left = options.left || options.outerWindow || 0,\n      right = options.right || options.outerWindow || 0\n\n    right = pages - right\n    pagingList.clear()\n    for (var i = 1; i <= pages; i++) {\n      var className = currentPage === i ? 'active' : ''\n\n      //console.log(i, left, right, currentPage, (currentPage - innerWindow), (currentPage + innerWindow), className);\n\n      if (is.number(i, left, right, currentPage, innerWindow)) {\n        item = pagingList.add({\n          page: i,\n          dotted: false,\n        })[0]\n        if (className) {\n          classes(item.elm).add(className)\n        }\n        item.elm.firstChild.setAttribute('data-i', i)\n        item.elm.firstChild.setAttribute('data-page', page)\n      } else if (is.dotted(pagingList, i, left, right, currentPage, innerWindow, pagingList.size())) {\n        item = pagingList.add({\n          page: '...',\n          dotted: true,\n        })[0]\n        classes(item.elm).add('disabled')\n      }\n    }\n  }\n\n  var is = {\n    number: function (i, left, right, currentPage, innerWindow) {\n      return this.left(i, left) || this.right(i, right) || this.innerWindow(i, currentPage, innerWindow)\n    },\n    left: function (i, left) {\n      return i <= left\n    },\n    right: function (i, right) {\n      return i > right\n    },\n    innerWindow: function (i, currentPage, innerWindow) {\n      return i >= currentPage - innerWindow && i <= currentPage + innerWindow\n    },\n    dotted: function (pagingList, i, left, right, currentPage, innerWindow, currentPageItem) {\n      return (\n        this.dottedLeft(pagingList, i, left, right, currentPage, innerWindow) ||\n        this.dottedRight(pagingList, i, left, right, currentPage, innerWindow, currentPageItem)\n      )\n    },\n    dottedLeft: function (pagingList, i, left, right, currentPage, innerWindow) {\n      return i == left + 1 && !this.innerWindow(i, currentPage, innerWindow) && !this.right(i, right)\n    },\n    dottedRight: function (pagingList, i, left, right, currentPage, innerWindow, currentPageItem) {\n      if (pagingList.items[currentPageItem - 1].values().dotted) {\n        return false\n      } else {\n        return i == right && !this.innerWindow(i, currentPage, innerWindow) && !this.right(i, right)\n      }\n    },\n  }\n\n  return function (options) {\n    var pagingList = new List(list.listContainer.id, {\n      listClass: options.paginationClass || 'pagination',\n      item: options.item || \"<li><a class='page' href='#'></a></li>\",\n      valueNames: ['page', 'dotted'],\n      searchClass: 'pagination-search-that-is-not-supposed-to-exist',\n      sortClass: 'pagination-sort-that-is-not-supposed-to-exist',\n    })\n\n    events.bind(pagingList.listContainer, 'click', function (e) {\n      var target = e.target || e.srcElement,\n        page = list.utils.getAttribute(target, 'data-page'),\n        i = list.utils.getAttribute(target, 'data-i')\n      if (i) {\n        list.show((i - 1) * page + 1, page)\n      }\n    })\n\n    list.on('updated', function () {\n      refresh(pagingList, options)\n    })\n    refresh(pagingList, options)\n  }\n}\n","module.exports = function (list) {\n  var Item = require('./item')(list)\n\n  var getChildren = function (parent) {\n    var nodes = parent.childNodes,\n      items = []\n    for (var i = 0, il = nodes.length; i < il; i++) {\n      // Only textnodes have a data attribute\n      if (nodes[i].data === undefined) {\n        items.push(nodes[i])\n      }\n    }\n    return items\n  }\n\n  var parse = function (itemElements, valueNames) {\n    for (var i = 0, il = itemElements.length; i < il; i++) {\n      list.items.push(new Item(valueNames, itemElements[i]))\n    }\n  }\n  var parseAsync = function (itemElements, valueNames) {\n    var itemsToIndex = itemElements.splice(0, 50) // TODO: If < 100 items, what happens in IE etc?\n    parse(itemsToIndex, valueNames)\n    if (itemElements.length > 0) {\n      setTimeout(function () {\n        parseAsync(itemElements, valueNames)\n      }, 1)\n    } else {\n      list.update()\n      list.trigger('parseComplete')\n    }\n  }\n\n  list.handlers.parseComplete = list.handlers.parseComplete || []\n\n  return function () {\n    var itemsToIndex = getChildren(list.list),\n      valueNames = list.valueNames\n\n    if (list.indexAsync) {\n      parseAsync(itemsToIndex, valueNames)\n    } else {\n      parse(itemsToIndex, valueNames)\n    }\n  }\n}\n","module.exports = function (list) {\n  var item, text, columns, searchString, customSearch\n\n  var prepare = {\n    resetList: function () {\n      list.i = 1\n      list.templater.clear()\n      customSearch = undefined\n    },\n    setOptions: function (args) {\n      if (args.length == 2 && args[1] instanceof Array) {\n        columns = args[1]\n      } else if (args.length == 2 && typeof args[1] == 'function') {\n        columns = undefined\n        customSearch = args[1]\n      } else if (args.length == 3) {\n        columns = args[1]\n        customSearch = args[2]\n      } else {\n        columns = undefined\n      }\n    },\n    setColumns: function () {\n      if (list.items.length === 0) return\n      if (columns === undefined) {\n        columns = list.searchColumns === undefined ? prepare.toArray(list.items[0].values()) : list.searchColumns\n      }\n    },\n    setSearchString: function (s) {\n      s = list.utils.toString(s).toLowerCase()\n      s = s.replace(/[-[\\]{}()*+?.,\\\\^$|#]/g, '\\\\$&') // Escape regular expression characters\n      searchString = s\n    },\n    toArray: function (values) {\n      var tmpColumn = []\n      for (var name in values) {\n        tmpColumn.push(name)\n      }\n      return tmpColumn\n    },\n  }\n  var search = {\n    list: function () {\n      // Extract quoted phrases \"word1 word2\" from original searchString\n      // searchString is converted to lowercase by List.js\n      var words = [],\n        phrase,\n        ss = searchString\n      while ((phrase = ss.match(/\"([^\"]+)\"/)) !== null) {\n        words.push(phrase[1])\n        ss = ss.substring(0, phrase.index) + ss.substring(phrase.index + phrase[0].length)\n      }\n      // Get remaining space-separated words (if any)\n      ss = ss.trim()\n      if (ss.length) words = words.concat(ss.split(/\\s+/))\n      for (var k = 0, kl = list.items.length; k < kl; k++) {\n        var item = list.items[k]\n        item.found = false\n        if (!words.length) continue\n        for (var i = 0, il = words.length; i < il; i++) {\n          var word_found = false\n          for (var j = 0, jl = columns.length; j < jl; j++) {\n            var values = item.values(),\n              column = columns[j]\n            if (values.hasOwnProperty(column) && values[column] !== undefined && values[column] !== null) {\n              var text = typeof values[column] !== 'string' ? values[column].toString() : values[column]\n              if (text.toLowerCase().indexOf(words[i]) !== -1) {\n                // word found, so no need to check it against any other columns\n                word_found = true\n                break\n              }\n            }\n          }\n          // this word not found? no need to check any other words, the item cannot match\n          if (!word_found) break\n        }\n        item.found = word_found\n      }\n    },\n    // Removed search.item() and search.values()\n    reset: function () {\n      list.reset.search()\n      list.searched = false\n    },\n  }\n\n  var searchMethod = function (str) {\n    list.trigger('searchStart')\n\n    prepare.resetList()\n    prepare.setSearchString(str)\n    prepare.setOptions(arguments) // str, cols|searchFunction, searchFunction\n    prepare.setColumns()\n\n    if (searchString === '') {\n      search.reset()\n    } else {\n      list.searched = true\n      if (customSearch) {\n        customSearch(searchString, columns)\n      } else {\n        search.list()\n      }\n    }\n\n    list.update()\n    list.trigger('searchComplete')\n    return list.visibleItems\n  }\n\n  list.handlers.searchStart = list.handlers.searchStart || []\n  list.handlers.searchComplete = list.handlers.searchComplete || []\n\n  list.utils.events.bind(\n    list.utils.getByClass(list.listContainer, list.searchClass),\n    'keyup',\n    list.utils.events.debounce(function (e) {\n      var target = e.target || e.srcElement, // IE have srcElement\n        alreadyCleared = target.value === '' && !list.searched\n      if (!alreadyCleared) {\n        // If oninput already have resetted the list, do nothing\n        searchMethod(target.value)\n      }\n    }, list.searchDelay)\n  )\n\n  // Used to detect click on HTML5 clear button\n  list.utils.events.bind(list.utils.getByClass(list.listContainer, list.searchClass), 'input', function (e) {\n    var target = e.target || e.srcElement\n    if (target.value === '') {\n      searchMethod('')\n    }\n  })\n\n  return searchMethod\n}\n","module.exports = function (list) {\n  var buttons = {\n    els: undefined,\n    clear: function () {\n      for (var i = 0, il = buttons.els.length; i < il; i++) {\n        list.utils.classes(buttons.els[i]).remove('asc')\n        list.utils.classes(buttons.els[i]).remove('desc')\n      }\n    },\n    getOrder: function (btn) {\n      var predefinedOrder = list.utils.getAttribute(btn, 'data-order')\n      if (predefinedOrder == 'asc' || predefinedOrder == 'desc') {\n        return predefinedOrder\n      } else if (list.utils.classes(btn).has('desc')) {\n        return 'asc'\n      } else if (list.utils.classes(btn).has('asc')) {\n        return 'desc'\n      } else {\n        return 'asc'\n      }\n    },\n    getInSensitive: function (btn, options) {\n      var insensitive = list.utils.getAttribute(btn, 'data-insensitive')\n      if (insensitive === 'false') {\n        options.insensitive = false\n      } else {\n        options.insensitive = true\n      }\n    },\n    setOrder: function (options) {\n      for (var i = 0, il = buttons.els.length; i < il; i++) {\n        var btn = buttons.els[i]\n        if (list.utils.getAttribute(btn, 'data-sort') !== options.valueName) {\n          continue\n        }\n        var predefinedOrder = list.utils.getAttribute(btn, 'data-order')\n        if (predefinedOrder == 'asc' || predefinedOrder == 'desc') {\n          if (predefinedOrder == options.order) {\n            list.utils.classes(btn).add(options.order)\n          }\n        } else {\n          list.utils.classes(btn).add(options.order)\n        }\n      }\n    },\n  }\n\n  var sort = function () {\n    list.trigger('sortStart')\n    var options = {}\n\n    var target = arguments[0].currentTarget || arguments[0].srcElement || undefined\n\n    if (target) {\n      options.valueName = list.utils.getAttribute(target, 'data-sort')\n      buttons.getInSensitive(target, options)\n      options.order = buttons.getOrder(target)\n    } else {\n      options = arguments[1] || options\n      options.valueName = arguments[0]\n      options.order = options.order || 'asc'\n      options.insensitive = typeof options.insensitive == 'undefined' ? true : options.insensitive\n    }\n\n    buttons.clear()\n    buttons.setOrder(options)\n\n    // caseInsensitive\n    // alphabet\n    var customSortFunction = options.sortFunction || list.sortFunction || null,\n      multi = options.order === 'desc' ? -1 : 1,\n      sortFunction\n\n    if (customSortFunction) {\n      sortFunction = function (itemA, itemB) {\n        return customSortFunction(itemA, itemB, options) * multi\n      }\n    } else {\n      sortFunction = function (itemA, itemB) {\n        var sort = list.utils.naturalSort\n        sort.alphabet = list.alphabet || options.alphabet || undefined\n        if (!sort.alphabet && options.insensitive) {\n          sort = list.utils.naturalSort.caseInsensitive\n        }\n        return sort(itemA.values()[options.valueName], itemB.values()[options.valueName]) * multi\n      }\n    }\n\n    list.items.sort(sortFunction)\n    list.update()\n    list.trigger('sortComplete')\n  }\n\n  // Add handlers\n  list.handlers.sortStart = list.handlers.sortStart || []\n  list.handlers.sortComplete = list.handlers.sortComplete || []\n\n  buttons.els = list.utils.getByClass(list.listContainer, list.sortClass)\n  list.utils.events.bind(buttons.els, 'click', sort)\n  list.on('searchStart', buttons.clear)\n  list.on('filterStart', buttons.clear)\n\n  return sort\n}\n","var Templater = function (list) {\n  var createItem,\n    templater = this\n\n  var init = function () {\n    var itemSource\n\n    if (typeof list.item === 'function') {\n      createItem = function (values) {\n        var item = list.item(values)\n        return getItemSource(item)\n      }\n      return\n    }\n\n    if (typeof list.item === 'string') {\n      if (list.item.indexOf('<') === -1) {\n        itemSource = document.getElementById(list.item)\n      } else {\n        itemSource = getItemSource(list.item)\n      }\n    } else {\n      /* If item source does not exists, use the first item in list as\n      source for new items */\n      itemSource = getFirstListItem()\n    }\n\n    if (!itemSource) {\n      throw new Error(\"The list needs to have at least one item on init otherwise you'll have to add a template.\")\n    }\n\n    itemSource = createCleanTemplateItem(itemSource, list.valueNames)\n\n    createItem = function () {\n      return itemSource.cloneNode(true)\n    }\n  }\n\n  var createCleanTemplateItem = function (templateNode, valueNames) {\n    var el = templateNode.cloneNode(true)\n    el.removeAttribute('id')\n\n    for (var i = 0, il = valueNames.length; i < il; i++) {\n      var elm = undefined,\n        valueName = valueNames[i]\n      if (valueName.data) {\n        for (var j = 0, jl = valueName.data.length; j < jl; j++) {\n          el.setAttribute('data-' + valueName.data[j], '')\n        }\n      } else if (valueName.attr && valueName.name) {\n        elm = list.utils.getByClass(el, valueName.name, true)\n        if (elm) {\n          elm.setAttribute(valueName.attr, '')\n        }\n      } else {\n        elm = list.utils.getByClass(el, valueName, true)\n        if (elm) {\n          elm.innerHTML = ''\n        }\n      }\n    }\n    return el\n  }\n\n  var getFirstListItem = function () {\n    var nodes = list.list.childNodes\n\n    for (var i = 0, il = nodes.length; i < il; i++) {\n      // Only textnodes have a data attribute\n      if (nodes[i].data === undefined) {\n        return nodes[i].cloneNode(true)\n      }\n    }\n    return undefined\n  }\n\n  var getItemSource = function (itemHTML) {\n    if (typeof itemHTML !== 'string') return undefined\n    if (/<tr[\\s>]/g.exec(itemHTML)) {\n      var tbody = document.createElement('tbody')\n      tbody.innerHTML = itemHTML\n      return tbody.firstElementChild\n    } else if (itemHTML.indexOf('<') !== -1) {\n      var div = document.createElement('div')\n      div.innerHTML = itemHTML\n      return div.firstElementChild\n    }\n    return undefined\n  }\n\n  var getValueName = function (name) {\n    for (var i = 0, il = list.valueNames.length; i < il; i++) {\n      var valueName = list.valueNames[i]\n      if (valueName.data) {\n        var data = valueName.data\n        for (var j = 0, jl = data.length; j < jl; j++) {\n          if (data[j] === name) {\n            return { data: name }\n          }\n        }\n      } else if (valueName.attr && valueName.name && valueName.name == name) {\n        return valueName\n      } else if (valueName === name) {\n        return name\n      }\n    }\n  }\n\n  var setValue = function (item, name, value) {\n    var elm = undefined,\n      valueName = getValueName(name)\n    if (!valueName) return\n    if (valueName.data) {\n      item.elm.setAttribute('data-' + valueName.data, value)\n    } else if (valueName.attr && valueName.name) {\n      elm = list.utils.getByClass(item.elm, valueName.name, true)\n      if (elm) {\n        elm.setAttribute(valueName.attr, value)\n      }\n    } else {\n      elm = list.utils.getByClass(item.elm, valueName, true)\n      if (elm) {\n        elm.innerHTML = value\n      }\n    }\n  }\n\n  this.get = function (item, valueNames) {\n    templater.create(item)\n    var values = {}\n    for (var i = 0, il = valueNames.length; i < il; i++) {\n      var elm = undefined,\n        valueName = valueNames[i]\n      if (valueName.data) {\n        for (var j = 0, jl = valueName.data.length; j < jl; j++) {\n          values[valueName.data[j]] = list.utils.getAttribute(item.elm, 'data-' + valueName.data[j])\n        }\n      } else if (valueName.attr && valueName.name) {\n        elm = list.utils.getByClass(item.elm, valueName.name, true)\n        values[valueName.name] = elm ? list.utils.getAttribute(elm, valueName.attr) : ''\n      } else {\n        elm = list.utils.getByClass(item.elm, valueName, true)\n        values[valueName] = elm ? elm.innerHTML : ''\n      }\n    }\n    return values\n  }\n\n  this.set = function (item, values) {\n    if (!templater.create(item)) {\n      for (var v in values) {\n        if (values.hasOwnProperty(v)) {\n          setValue(item, v, values[v])\n        }\n      }\n    }\n  }\n\n  this.create = function (item) {\n    if (item.elm !== undefined) {\n      return false\n    }\n    item.elm = createItem(item.values())\n    templater.set(item, item.values())\n    return true\n  }\n  this.remove = function (item) {\n    if (item.elm.parentNode === list.list) {\n      list.list.removeChild(item.elm)\n    }\n  }\n  this.show = function (item) {\n    templater.create(item)\n    list.list.appendChild(item.elm)\n  }\n  this.hide = function (item) {\n    if (item.elm !== undefined && item.elm.parentNode === list.list) {\n      list.list.removeChild(item.elm)\n    }\n  }\n  this.clear = function () {\n    /* .innerHTML = ''; fucks up IE */\n    if (list.list.hasChildNodes()) {\n      while (list.list.childNodes.length >= 1) {\n        list.list.removeChild(list.list.firstChild)\n      }\n    }\n  }\n\n  init()\n}\n\nmodule.exports = function (list) {\n  return new Templater(list)\n}\n","/**\n * Module dependencies.\n */\n\nvar index = require('./index-of')\n\n/**\n * Whitespace regexp.\n */\n\nvar re = /\\s+/\n\n/**\n * toString reference.\n */\n\nvar toString = Object.prototype.toString\n\n/**\n * Wrap `el` in a `ClassList`.\n *\n * @param {Element} el\n * @return {ClassList}\n * @api public\n */\n\nmodule.exports = function (el) {\n  return new ClassList(el)\n}\n\n/**\n * Initialize a new ClassList for `el`.\n *\n * @param {Element} el\n * @api private\n */\n\nfunction ClassList(el) {\n  if (!el || !el.nodeType) {\n    throw new Error('A DOM element reference is required')\n  }\n  this.el = el\n  this.list = el.classList\n}\n\n/**\n * Add class `name` if not already present.\n *\n * @param {String} name\n * @return {ClassList}\n * @api public\n */\n\nClassList.prototype.add = function (name) {\n  // classList\n  if (this.list) {\n    this.list.add(name)\n    return this\n  }\n\n  // fallback\n  var arr = this.array()\n  var i = index(arr, name)\n  if (!~i) arr.push(name)\n  this.el.className = arr.join(' ')\n  return this\n}\n\n/**\n * Remove class `name` when present, or\n * pass a regular expression to remove\n * any which match.\n *\n * @param {String|RegExp} name\n * @return {ClassList}\n * @api public\n */\n\nClassList.prototype.remove = function (name) {\n  // classList\n  if (this.list) {\n    this.list.remove(name)\n    return this\n  }\n\n  // fallback\n  var arr = this.array()\n  var i = index(arr, name)\n  if (~i) arr.splice(i, 1)\n  this.el.className = arr.join(' ')\n  return this\n}\n\n/**\n * Toggle class `name`, can force state via `force`.\n *\n * For browsers that support classList, but do not support `force` yet,\n * the mistake will be detected and corrected.\n *\n * @param {String} name\n * @param {Boolean} force\n * @return {ClassList}\n * @api public\n */\n\nClassList.prototype.toggle = function (name, force) {\n  // classList\n  if (this.list) {\n    if ('undefined' !== typeof force) {\n      if (force !== this.list.toggle(name, force)) {\n        this.list.toggle(name) // toggle again to correct\n      }\n    } else {\n      this.list.toggle(name)\n    }\n    return this\n  }\n\n  // fallback\n  if ('undefined' !== typeof force) {\n    if (!force) {\n      this.remove(name)\n    } else {\n      this.add(name)\n    }\n  } else {\n    if (this.has(name)) {\n      this.remove(name)\n    } else {\n      this.add(name)\n    }\n  }\n\n  return this\n}\n\n/**\n * Return an array of classes.\n *\n * @return {Array}\n * @api public\n */\n\nClassList.prototype.array = function () {\n  var className = this.el.getAttribute('class') || ''\n  var str = className.replace(/^\\s+|\\s+$/g, '')\n  var arr = str.split(re)\n  if ('' === arr[0]) arr.shift()\n  return arr\n}\n\n/**\n * Check if class `name` is present.\n *\n * @param {String} name\n * @return {ClassList}\n * @api public\n */\n\nClassList.prototype.has = ClassList.prototype.contains = function (name) {\n  return this.list ? this.list.contains(name) : !!~index(this.array(), name)\n}\n","var bind = window.addEventListener ? 'addEventListener' : 'attachEvent',\n  unbind = window.removeEventListener ? 'removeEventListener' : 'detachEvent',\n  prefix = bind !== 'addEventListener' ? 'on' : '',\n  toArray = require('./to-array')\n\n/**\n * Bind `el` event `type` to `fn`.\n *\n * @param {Element} el, NodeList, HTMLCollection or Array\n * @param {String} type\n * @param {Function} fn\n * @param {Boolean} capture\n * @api public\n */\n\nexports.bind = function (el, type, fn, capture) {\n  el = toArray(el)\n  for (var i = 0, il = el.length; i < il; i++) {\n    el[i][bind](prefix + type, fn, capture || false)\n  }\n}\n\n/**\n * Unbind `el` event `type`'s callback `fn`.\n *\n * @param {Element} el, NodeList, HTMLCollection or Array\n * @param {String} type\n * @param {Function} fn\n * @param {Boolean} capture\n * @api public\n */\n\nexports.unbind = function (el, type, fn, capture) {\n  el = toArray(el)\n  for (var i = 0, il = el.length; i < il; i++) {\n    el[i][unbind](prefix + type, fn, capture || false)\n  }\n}\n\n/**\n * Returns a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * `wait` milliseconds. If `immediate` is true, trigger the function on the\n * leading edge, instead of the trailing.\n *\n * @param {Function} fn\n * @param {Integer} wait\n * @param {Boolean} immediate\n * @api public\n */\n\nexports.debounce = function (fn, wait, immediate) {\n  var timeout\n  return wait\n    ? function () {\n        var context = this,\n          args = arguments\n        var later = function () {\n          timeout = null\n          if (!immediate) fn.apply(context, args)\n        }\n        var callNow = immediate && !timeout\n        clearTimeout(timeout)\n        timeout = setTimeout(later, wait)\n        if (callNow) fn.apply(context, args)\n      }\n    : fn\n}\n","/*\n * Source: https://github.com/segmentio/extend\n */\n\nmodule.exports = function extend(object) {\n  // Takes an unlimited number of extenders.\n  var args = Array.prototype.slice.call(arguments, 1)\n\n  // For each extender, copy their properties on our object.\n  for (var i = 0, source; (source = args[i]); i++) {\n    if (!source) continue\n    for (var property in source) {\n      object[property] = source[property]\n    }\n  }\n\n  return object\n}\n","module.exports = function (text, pattern, options) {\n  // Aproximately where in the text is the pattern expected to be found?\n  var Match_Location = options.location || 0\n\n  //Determines how close the match must be to the fuzzy location (specified above). An exact letter match which is 'distance' characters away from the fuzzy location would score as a complete mismatch. A distance of '0' requires the match be at the exact location specified, a threshold of '1000' would require a perfect match to be within 800 characters of the fuzzy location to be found using a 0.8 threshold.\n  var Match_Distance = options.distance || 100\n\n  // At what point does the match algorithm give up. A threshold of '0.0' requires a perfect match (of both letters and location), a threshold of '1.0' would match anything.\n  var Match_Threshold = options.threshold || 0.4\n\n  if (pattern === text) return true // Exact match\n  if (pattern.length > 32) return false // This algorithm cannot be used\n\n  // Set starting location at beginning text and initialise the alphabet.\n  var loc = Match_Location,\n    s = (function () {\n      var q = {},\n        i\n\n      for (i = 0; i < pattern.length; i++) {\n        q[pattern.charAt(i)] = 0\n      }\n\n      for (i = 0; i < pattern.length; i++) {\n        q[pattern.charAt(i)] |= 1 << (pattern.length - i - 1)\n      }\n\n      return q\n    })()\n\n  // Compute and return the score for a match with e errors and x location.\n  // Accesses loc and pattern through being a closure.\n\n  function match_bitapScore_(e, x) {\n    var accuracy = e / pattern.length,\n      proximity = Math.abs(loc - x)\n\n    if (!Match_Distance) {\n      // Dodge divide by zero error.\n      return proximity ? 1.0 : accuracy\n    }\n    return accuracy + proximity / Match_Distance\n  }\n\n  var score_threshold = Match_Threshold, // Highest score beyond which we give up.\n    best_loc = text.indexOf(pattern, loc) // Is there a nearby exact match? (speedup)\n\n  if (best_loc != -1) {\n    score_threshold = Math.min(match_bitapScore_(0, best_loc), score_threshold)\n    // What about in the other direction? (speedup)\n    best_loc = text.lastIndexOf(pattern, loc + pattern.length)\n\n    if (best_loc != -1) {\n      score_threshold = Math.min(match_bitapScore_(0, best_loc), score_threshold)\n    }\n  }\n\n  // Initialise the bit arrays.\n  var matchmask = 1 << (pattern.length - 1)\n  best_loc = -1\n\n  var bin_min, bin_mid\n  var bin_max = pattern.length + text.length\n  var last_rd\n  for (var d = 0; d < pattern.length; d++) {\n    // Scan for the best match; each iteration allows for one more error.\n    // Run a binary search to determine how far from 'loc' we can stray at this\n    // error level.\n    bin_min = 0\n    bin_mid = bin_max\n    while (bin_min < bin_mid) {\n      if (match_bitapScore_(d, loc + bin_mid) <= score_threshold) {\n        bin_min = bin_mid\n      } else {\n        bin_max = bin_mid\n      }\n      bin_mid = Math.floor((bin_max - bin_min) / 2 + bin_min)\n    }\n    // Use the result from this iteration as the maximum for the next.\n    bin_max = bin_mid\n    var start = Math.max(1, loc - bin_mid + 1)\n    var finish = Math.min(loc + bin_mid, text.length) + pattern.length\n\n    var rd = Array(finish + 2)\n    rd[finish + 1] = (1 << d) - 1\n    for (var j = finish; j >= start; j--) {\n      // The alphabet (s) is a sparse hash, so the following line generates\n      // warnings.\n      var charMatch = s[text.charAt(j - 1)]\n      if (d === 0) {\n        // First pass: exact match.\n        rd[j] = ((rd[j + 1] << 1) | 1) & charMatch\n      } else {\n        // Subsequent passes: fuzzy match.\n        rd[j] = (((rd[j + 1] << 1) | 1) & charMatch) | (((last_rd[j + 1] | last_rd[j]) << 1) | 1) | last_rd[j + 1]\n      }\n      if (rd[j] & matchmask) {\n        var score = match_bitapScore_(d, j - 1)\n        // This match will almost certainly be better than any existing match.\n        // But check anyway.\n        if (score <= score_threshold) {\n          // Told you so.\n          score_threshold = score\n          best_loc = j - 1\n          if (best_loc > loc) {\n            // When passing loc, don't exceed our current distance from loc.\n            start = Math.max(1, 2 * loc - best_loc)\n          } else {\n            // Already passed loc, downhill from here on in.\n            break\n          }\n        }\n      }\n    }\n    // No hope for a (better) match at greater error levels.\n    if (match_bitapScore_(d + 1, loc) > score_threshold) {\n      break\n    }\n    last_rd = rd\n  }\n\n  return best_loc < 0 ? false : true\n}\n","/**\n * A cross-browser implementation of getAttribute.\n * Source found here: http://stackoverflow.com/a/3755343/361337 written by Vivin Paliath\n *\n * Return the value for `attr` at `element`.\n *\n * @param {Element} el\n * @param {String} attr\n * @api public\n */\n\nmodule.exports = function (el, attr) {\n  var result = (el.getAttribute && el.getAttribute(attr)) || null\n  if (!result) {\n    var attrs = el.attributes\n    var length = attrs.length\n    for (var i = 0; i < length; i++) {\n      if (attrs[i] !== undefined) {\n        if (attrs[i].nodeName === attr) {\n          result = attrs[i].nodeValue\n        }\n      }\n    }\n  }\n  return result\n}\n","/**\n * A cross-browser implementation of getElementsByClass.\n * Heavily based on Dustin Diaz's function: http://dustindiaz.com/getelementsbyclass.\n *\n * Find all elements with class `className` inside `container`.\n * Use `single = true` to increase performance in older browsers\n * when only one element is needed.\n *\n * @param {String} className\n * @param {Element} container\n * @param {Boolean} single\n * @api public\n */\n\nvar getElementsByClassName = function (container, className, single) {\n  if (single) {\n    return container.getElementsByClassName(className)[0]\n  } else {\n    return container.getElementsByClassName(className)\n  }\n}\n\nvar querySelector = function (container, className, single) {\n  className = '.' + className\n  if (single) {\n    return container.querySelector(className)\n  } else {\n    return container.querySelectorAll(className)\n  }\n}\n\nvar polyfill = function (container, className, single) {\n  var classElements = [],\n    tag = '*'\n\n  var els = container.getElementsByTagName(tag)\n  var elsLen = els.length\n  var pattern = new RegExp('(^|\\\\s)' + className + '(\\\\s|$)')\n  for (var i = 0, j = 0; i < elsLen; i++) {\n    if (pattern.test(els[i].className)) {\n      if (single) {\n        return els[i]\n      } else {\n        classElements[j] = els[i]\n        j++\n      }\n    }\n  }\n  return classElements\n}\n\nmodule.exports = (function () {\n  return function (container, className, single, options) {\n    options = options || {}\n    if ((options.test && options.getElementsByClassName) || (!options.test && document.getElementsByClassName)) {\n      return getElementsByClassName(container, className, single)\n    } else if ((options.test && options.querySelector) || (!options.test && document.querySelector)) {\n      return querySelector(container, className, single)\n    } else {\n      return polyfill(container, className, single)\n    }\n  }\n})()\n","var indexOf = [].indexOf\n\nmodule.exports = function(arr, obj){\n  if (indexOf) return arr.indexOf(obj);\n  for (var i = 0, il = arr.length; i < il; ++i) {\n    if (arr[i] === obj) return i;\n  }\n  return -1\n}\n","/**\n * Source: https://github.com/timoxley/to-array\n *\n * Convert an array-like object into an `Array`.\n * If `collection` is already an `Array`, then will return a clone of `collection`.\n *\n * @param {Array | Mixed} collection An `Array` or array-like object to convert e.g. `arguments` or `NodeList`\n * @return {Array} Naive conversion of `collection` to a new `Array`.\n * @api public\n */\n\nmodule.exports = function toArray(collection) {\n  if (typeof collection === 'undefined') return []\n  if (collection === null) return [null]\n  if (collection === window) return [window]\n  if (typeof collection === 'string') return [collection]\n  if (isArray(collection)) return collection\n  if (typeof collection.length != 'number') return [collection]\n  if (typeof collection === 'function' && collection instanceof Function) return [collection]\n\n  var arr = [];\n  for (var i = 0, il = collection.length; i < il; i++) {\n    if (Object.prototype.hasOwnProperty.call(collection, i) || i in collection) {\n      arr.push(collection[i])\n    }\n  }\n  if (!arr.length) return []\n  return arr\n}\n\nfunction isArray(arr) {\n  return Object.prototype.toString.call(arr) === '[object Array]'\n}\n","module.exports = function (s) {\n  s = s === undefined ? '' : s\n  s = s === null ? '' : s\n  s = s.toString()\n  return s\n}\n","/*!\n * Quill Editor v1.3.7\n * https://quilljs.com/\n * Copyright (c) 2014, Jason Chen\n * Copyright (c) 2013, salesforce.com\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Quill\"] = factory();\n\telse\n\t\troot[\"Quill\"] = factory();\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 109);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar container_1 = __webpack_require__(17);\nvar format_1 = __webpack_require__(18);\nvar leaf_1 = __webpack_require__(19);\nvar scroll_1 = __webpack_require__(45);\nvar inline_1 = __webpack_require__(46);\nvar block_1 = __webpack_require__(47);\nvar embed_1 = __webpack_require__(48);\nvar text_1 = __webpack_require__(49);\nvar attributor_1 = __webpack_require__(12);\nvar class_1 = __webpack_require__(32);\nvar style_1 = __webpack_require__(33);\nvar store_1 = __webpack_require__(31);\nvar Registry = __webpack_require__(1);\nvar Parchment = {\n    Scope: Registry.Scope,\n    create: Registry.create,\n    find: Registry.find,\n    query: Registry.query,\n    register: Registry.register,\n    Container: container_1.default,\n    Format: format_1.default,\n    Leaf: leaf_1.default,\n    Embed: embed_1.default,\n    Scroll: scroll_1.default,\n    Block: block_1.default,\n    Inline: inline_1.default,\n    Text: text_1.default,\n    Attributor: {\n        Attribute: attributor_1.default,\n        Class: class_1.default,\n        Style: style_1.default,\n        Store: store_1.default,\n    },\n};\nexports.default = Parchment;\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ParchmentError = /** @class */ (function (_super) {\n    __extends(ParchmentError, _super);\n    function ParchmentError(message) {\n        var _this = this;\n        message = '[Parchment] ' + message;\n        _this = _super.call(this, message) || this;\n        _this.message = message;\n        _this.name = _this.constructor.name;\n        return _this;\n    }\n    return ParchmentError;\n}(Error));\nexports.ParchmentError = ParchmentError;\nvar attributes = {};\nvar classes = {};\nvar tags = {};\nvar types = {};\nexports.DATA_KEY = '__blot';\nvar Scope;\n(function (Scope) {\n    Scope[Scope[\"TYPE\"] = 3] = \"TYPE\";\n    Scope[Scope[\"LEVEL\"] = 12] = \"LEVEL\";\n    Scope[Scope[\"ATTRIBUTE\"] = 13] = \"ATTRIBUTE\";\n    Scope[Scope[\"BLOT\"] = 14] = \"BLOT\";\n    Scope[Scope[\"INLINE\"] = 7] = \"INLINE\";\n    Scope[Scope[\"BLOCK\"] = 11] = \"BLOCK\";\n    Scope[Scope[\"BLOCK_BLOT\"] = 10] = \"BLOCK_BLOT\";\n    Scope[Scope[\"INLINE_BLOT\"] = 6] = \"INLINE_BLOT\";\n    Scope[Scope[\"BLOCK_ATTRIBUTE\"] = 9] = \"BLOCK_ATTRIBUTE\";\n    Scope[Scope[\"INLINE_ATTRIBUTE\"] = 5] = \"INLINE_ATTRIBUTE\";\n    Scope[Scope[\"ANY\"] = 15] = \"ANY\";\n})(Scope = exports.Scope || (exports.Scope = {}));\nfunction create(input, value) {\n    var match = query(input);\n    if (match == null) {\n        throw new ParchmentError(\"Unable to create \" + input + \" blot\");\n    }\n    var BlotClass = match;\n    var node = \n    // @ts-ignore\n    input instanceof Node || input['nodeType'] === Node.TEXT_NODE ? input : BlotClass.create(value);\n    return new BlotClass(node, value);\n}\nexports.create = create;\nfunction find(node, bubble) {\n    if (bubble === void 0) { bubble = false; }\n    if (node == null)\n        return null;\n    // @ts-ignore\n    if (node[exports.DATA_KEY] != null)\n        return node[exports.DATA_KEY].blot;\n    if (bubble)\n        return find(node.parentNode, bubble);\n    return null;\n}\nexports.find = find;\nfunction query(query, scope) {\n    if (scope === void 0) { scope = Scope.ANY; }\n    var match;\n    if (typeof query === 'string') {\n        match = types[query] || attributes[query];\n        // @ts-ignore\n    }\n    else if (query instanceof Text || query['nodeType'] === Node.TEXT_NODE) {\n        match = types['text'];\n    }\n    else if (typeof query === 'number') {\n        if (query & Scope.LEVEL & Scope.BLOCK) {\n            match = types['block'];\n        }\n        else if (query & Scope.LEVEL & Scope.INLINE) {\n            match = types['inline'];\n        }\n    }\n    else if (query instanceof HTMLElement) {\n        var names = (query.getAttribute('class') || '').split(/\\s+/);\n        for (var i in names) {\n            match = classes[names[i]];\n            if (match)\n                break;\n        }\n        match = match || tags[query.tagName];\n    }\n    if (match == null)\n        return null;\n    // @ts-ignore\n    if (scope & Scope.LEVEL & match.scope && scope & Scope.TYPE & match.scope)\n        return match;\n    return null;\n}\nexports.query = query;\nfunction register() {\n    var Definitions = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        Definitions[_i] = arguments[_i];\n    }\n    if (Definitions.length > 1) {\n        return Definitions.map(function (d) {\n            return register(d);\n        });\n    }\n    var Definition = Definitions[0];\n    if (typeof Definition.blotName !== 'string' && typeof Definition.attrName !== 'string') {\n        throw new ParchmentError('Invalid definition');\n    }\n    else if (Definition.blotName === 'abstract') {\n        throw new ParchmentError('Cannot register abstract class');\n    }\n    types[Definition.blotName || Definition.attrName] = Definition;\n    if (typeof Definition.keyName === 'string') {\n        attributes[Definition.keyName] = Definition;\n    }\n    else {\n        if (Definition.className != null) {\n            classes[Definition.className] = Definition;\n        }\n        if (Definition.tagName != null) {\n            if (Array.isArray(Definition.tagName)) {\n                Definition.tagName = Definition.tagName.map(function (tagName) {\n                    return tagName.toUpperCase();\n                });\n            }\n            else {\n                Definition.tagName = Definition.tagName.toUpperCase();\n            }\n            var tagNames = Array.isArray(Definition.tagName) ? Definition.tagName : [Definition.tagName];\n            tagNames.forEach(function (tag) {\n                if (tags[tag] == null || Definition.className == null) {\n                    tags[tag] = Definition;\n                }\n            });\n        }\n    }\n    return Definition;\n}\nexports.register = register;\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar diff = __webpack_require__(51);\nvar equal = __webpack_require__(11);\nvar extend = __webpack_require__(3);\nvar op = __webpack_require__(20);\n\n\nvar NULL_CHARACTER = String.fromCharCode(0);  // Placeholder char for embed in diff()\n\n\nvar Delta = function (ops) {\n  // Assume we are given a well formed ops\n  if (Array.isArray(ops)) {\n    this.ops = ops;\n  } else if (ops != null && Array.isArray(ops.ops)) {\n    this.ops = ops.ops;\n  } else {\n    this.ops = [];\n  }\n};\n\n\nDelta.prototype.insert = function (text, attributes) {\n  var newOp = {};\n  if (text.length === 0) return this;\n  newOp.insert = text;\n  if (attributes != null && typeof attributes === 'object' && Object.keys(attributes).length > 0) {\n    newOp.attributes = attributes;\n  }\n  return this.push(newOp);\n};\n\nDelta.prototype['delete'] = function (length) {\n  if (length <= 0) return this;\n  return this.push({ 'delete': length });\n};\n\nDelta.prototype.retain = function (length, attributes) {\n  if (length <= 0) return this;\n  var newOp = { retain: length };\n  if (attributes != null && typeof attributes === 'object' && Object.keys(attributes).length > 0) {\n    newOp.attributes = attributes;\n  }\n  return this.push(newOp);\n};\n\nDelta.prototype.push = function (newOp) {\n  var index = this.ops.length;\n  var lastOp = this.ops[index - 1];\n  newOp = extend(true, {}, newOp);\n  if (typeof lastOp === 'object') {\n    if (typeof newOp['delete'] === 'number' && typeof lastOp['delete'] === 'number') {\n      this.ops[index - 1] = { 'delete': lastOp['delete'] + newOp['delete'] };\n      return this;\n    }\n    // Since it does not matter if we insert before or after deleting at the same index,\n    // always prefer to insert first\n    if (typeof lastOp['delete'] === 'number' && newOp.insert != null) {\n      index -= 1;\n      lastOp = this.ops[index - 1];\n      if (typeof lastOp !== 'object') {\n        this.ops.unshift(newOp);\n        return this;\n      }\n    }\n    if (equal(newOp.attributes, lastOp.attributes)) {\n      if (typeof newOp.insert === 'string' && typeof lastOp.insert === 'string') {\n        this.ops[index - 1] = { insert: lastOp.insert + newOp.insert };\n        if (typeof newOp.attributes === 'object') this.ops[index - 1].attributes = newOp.attributes\n        return this;\n      } else if (typeof newOp.retain === 'number' && typeof lastOp.retain === 'number') {\n        this.ops[index - 1] = { retain: lastOp.retain + newOp.retain };\n        if (typeof newOp.attributes === 'object') this.ops[index - 1].attributes = newOp.attributes\n        return this;\n      }\n    }\n  }\n  if (index === this.ops.length) {\n    this.ops.push(newOp);\n  } else {\n    this.ops.splice(index, 0, newOp);\n  }\n  return this;\n};\n\nDelta.prototype.chop = function () {\n  var lastOp = this.ops[this.ops.length - 1];\n  if (lastOp && lastOp.retain && !lastOp.attributes) {\n    this.ops.pop();\n  }\n  return this;\n};\n\nDelta.prototype.filter = function (predicate) {\n  return this.ops.filter(predicate);\n};\n\nDelta.prototype.forEach = function (predicate) {\n  this.ops.forEach(predicate);\n};\n\nDelta.prototype.map = function (predicate) {\n  return this.ops.map(predicate);\n};\n\nDelta.prototype.partition = function (predicate) {\n  var passed = [], failed = [];\n  this.forEach(function(op) {\n    var target = predicate(op) ? passed : failed;\n    target.push(op);\n  });\n  return [passed, failed];\n};\n\nDelta.prototype.reduce = function (predicate, initial) {\n  return this.ops.reduce(predicate, initial);\n};\n\nDelta.prototype.changeLength = function () {\n  return this.reduce(function (length, elem) {\n    if (elem.insert) {\n      return length + op.length(elem);\n    } else if (elem.delete) {\n      return length - elem.delete;\n    }\n    return length;\n  }, 0);\n};\n\nDelta.prototype.length = function () {\n  return this.reduce(function (length, elem) {\n    return length + op.length(elem);\n  }, 0);\n};\n\nDelta.prototype.slice = function (start, end) {\n  start = start || 0;\n  if (typeof end !== 'number') end = Infinity;\n  var ops = [];\n  var iter = op.iterator(this.ops);\n  var index = 0;\n  while (index < end && iter.hasNext()) {\n    var nextOp;\n    if (index < start) {\n      nextOp = iter.next(start - index);\n    } else {\n      nextOp = iter.next(end - index);\n      ops.push(nextOp);\n    }\n    index += op.length(nextOp);\n  }\n  return new Delta(ops);\n};\n\n\nDelta.prototype.compose = function (other) {\n  var thisIter = op.iterator(this.ops);\n  var otherIter = op.iterator(other.ops);\n  var ops = [];\n  var firstOther = otherIter.peek();\n  if (firstOther != null && typeof firstOther.retain === 'number' && firstOther.attributes == null) {\n    var firstLeft = firstOther.retain;\n    while (thisIter.peekType() === 'insert' && thisIter.peekLength() <= firstLeft) {\n      firstLeft -= thisIter.peekLength();\n      ops.push(thisIter.next());\n    }\n    if (firstOther.retain - firstLeft > 0) {\n      otherIter.next(firstOther.retain - firstLeft);\n    }\n  }\n  var delta = new Delta(ops);\n  while (thisIter.hasNext() || otherIter.hasNext()) {\n    if (otherIter.peekType() === 'insert') {\n      delta.push(otherIter.next());\n    } else if (thisIter.peekType() === 'delete') {\n      delta.push(thisIter.next());\n    } else {\n      var length = Math.min(thisIter.peekLength(), otherIter.peekLength());\n      var thisOp = thisIter.next(length);\n      var otherOp = otherIter.next(length);\n      if (typeof otherOp.retain === 'number') {\n        var newOp = {};\n        if (typeof thisOp.retain === 'number') {\n          newOp.retain = length;\n        } else {\n          newOp.insert = thisOp.insert;\n        }\n        // Preserve null when composing with a retain, otherwise remove it for inserts\n        var attributes = op.attributes.compose(thisOp.attributes, otherOp.attributes, typeof thisOp.retain === 'number');\n        if (attributes) newOp.attributes = attributes;\n        delta.push(newOp);\n\n        // Optimization if rest of other is just retain\n        if (!otherIter.hasNext() && equal(delta.ops[delta.ops.length - 1], newOp)) {\n          var rest = new Delta(thisIter.rest());\n          return delta.concat(rest).chop();\n        }\n\n      // Other op should be delete, we could be an insert or retain\n      // Insert + delete cancels out\n      } else if (typeof otherOp['delete'] === 'number' && typeof thisOp.retain === 'number') {\n        delta.push(otherOp);\n      }\n    }\n  }\n  return delta.chop();\n};\n\nDelta.prototype.concat = function (other) {\n  var delta = new Delta(this.ops.slice());\n  if (other.ops.length > 0) {\n    delta.push(other.ops[0]);\n    delta.ops = delta.ops.concat(other.ops.slice(1));\n  }\n  return delta;\n};\n\nDelta.prototype.diff = function (other, index) {\n  if (this.ops === other.ops) {\n    return new Delta();\n  }\n  var strings = [this, other].map(function (delta) {\n    return delta.map(function (op) {\n      if (op.insert != null) {\n        return typeof op.insert === 'string' ? op.insert : NULL_CHARACTER;\n      }\n      var prep = (delta === other) ? 'on' : 'with';\n      throw new Error('diff() called ' + prep + ' non-document');\n    }).join('');\n  });\n  var delta = new Delta();\n  var diffResult = diff(strings[0], strings[1], index);\n  var thisIter = op.iterator(this.ops);\n  var otherIter = op.iterator(other.ops);\n  diffResult.forEach(function (component) {\n    var length = component[1].length;\n    while (length > 0) {\n      var opLength = 0;\n      switch (component[0]) {\n        case diff.INSERT:\n          opLength = Math.min(otherIter.peekLength(), length);\n          delta.push(otherIter.next(opLength));\n          break;\n        case diff.DELETE:\n          opLength = Math.min(length, thisIter.peekLength());\n          thisIter.next(opLength);\n          delta['delete'](opLength);\n          break;\n        case diff.EQUAL:\n          opLength = Math.min(thisIter.peekLength(), otherIter.peekLength(), length);\n          var thisOp = thisIter.next(opLength);\n          var otherOp = otherIter.next(opLength);\n          if (equal(thisOp.insert, otherOp.insert)) {\n            delta.retain(opLength, op.attributes.diff(thisOp.attributes, otherOp.attributes));\n          } else {\n            delta.push(otherOp)['delete'](opLength);\n          }\n          break;\n      }\n      length -= opLength;\n    }\n  });\n  return delta.chop();\n};\n\nDelta.prototype.eachLine = function (predicate, newline) {\n  newline = newline || '\\n';\n  var iter = op.iterator(this.ops);\n  var line = new Delta();\n  var i = 0;\n  while (iter.hasNext()) {\n    if (iter.peekType() !== 'insert') return;\n    var thisOp = iter.peek();\n    var start = op.length(thisOp) - iter.peekLength();\n    var index = typeof thisOp.insert === 'string' ?\n      thisOp.insert.indexOf(newline, start) - start : -1;\n    if (index < 0) {\n      line.push(iter.next());\n    } else if (index > 0) {\n      line.push(iter.next(index));\n    } else {\n      if (predicate(line, iter.next(1).attributes || {}, i) === false) {\n        return;\n      }\n      i += 1;\n      line = new Delta();\n    }\n  }\n  if (line.length() > 0) {\n    predicate(line, {}, i);\n  }\n};\n\nDelta.prototype.transform = function (other, priority) {\n  priority = !!priority;\n  if (typeof other === 'number') {\n    return this.transformPosition(other, priority);\n  }\n  var thisIter = op.iterator(this.ops);\n  var otherIter = op.iterator(other.ops);\n  var delta = new Delta();\n  while (thisIter.hasNext() || otherIter.hasNext()) {\n    if (thisIter.peekType() === 'insert' && (priority || otherIter.peekType() !== 'insert')) {\n      delta.retain(op.length(thisIter.next()));\n    } else if (otherIter.peekType() === 'insert') {\n      delta.push(otherIter.next());\n    } else {\n      var length = Math.min(thisIter.peekLength(), otherIter.peekLength());\n      var thisOp = thisIter.next(length);\n      var otherOp = otherIter.next(length);\n      if (thisOp['delete']) {\n        // Our delete either makes their delete redundant or removes their retain\n        continue;\n      } else if (otherOp['delete']) {\n        delta.push(otherOp);\n      } else {\n        // We retain either their retain or insert\n        delta.retain(length, op.attributes.transform(thisOp.attributes, otherOp.attributes, priority));\n      }\n    }\n  }\n  return delta.chop();\n};\n\nDelta.prototype.transformPosition = function (index, priority) {\n  priority = !!priority;\n  var thisIter = op.iterator(this.ops);\n  var offset = 0;\n  while (thisIter.hasNext() && offset <= index) {\n    var length = thisIter.peekLength();\n    var nextType = thisIter.peekType();\n    thisIter.next();\n    if (nextType === 'delete') {\n      index -= Math.min(length, index - offset);\n      continue;\n    } else if (nextType === 'insert' && (offset < index || !priority)) {\n      index += length;\n    }\n    offset += length;\n  }\n  return index;\n};\n\n\nmodule.exports = Delta;\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar defineProperty = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) { /**/ }\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\n// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target\nvar setProperty = function setProperty(target, options) {\n\tif (defineProperty && options.name === '__proto__') {\n\t\tdefineProperty(target, options.name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\tvalue: options.newValue,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\ttarget[options.name] = options.newValue;\n\t}\n};\n\n// Return undefined instead of __proto__ if '__proto__' is not an own property\nvar getProperty = function getProperty(obj, name) {\n\tif (name === '__proto__') {\n\t\tif (!hasOwn.call(obj, name)) {\n\t\t\treturn void 0;\n\t\t} else if (gOPD) {\n\t\t\t// In early versions of node, obj['__proto__'] is buggy when obj has\n\t\t\t// __proto__ as an own property. Object.getOwnPropertyDescriptor() works.\n\t\t\treturn gOPD(obj, name).value;\n\t\t}\n\t}\n\n\treturn obj[name];\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone;\n\tvar target = arguments[0];\n\tvar i = 1;\n\tvar length = arguments.length;\n\tvar deep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\tif (target == null || (typeof target !== 'object' && typeof target !== 'function')) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = getProperty(target, name);\n\t\t\t\tcopy = getProperty(options, name);\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: extend(deep, clone, copy) });\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: copy });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.BlockEmbed = exports.bubbleFormats = undefined;\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 _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _extend = __webpack_require__(3);\n\nvar _extend2 = _interopRequireDefault(_extend);\n\nvar _quillDelta = __webpack_require__(2);\n\nvar _quillDelta2 = _interopRequireDefault(_quillDelta);\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _break = __webpack_require__(16);\n\nvar _break2 = _interopRequireDefault(_break);\n\nvar _inline = __webpack_require__(6);\n\nvar _inline2 = _interopRequireDefault(_inline);\n\nvar _text = __webpack_require__(7);\n\nvar _text2 = _interopRequireDefault(_text);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar NEWLINE_LENGTH = 1;\n\nvar BlockEmbed = function (_Parchment$Embed) {\n  _inherits(BlockEmbed, _Parchment$Embed);\n\n  function BlockEmbed() {\n    _classCallCheck(this, BlockEmbed);\n\n    return _possibleConstructorReturn(this, (BlockEmbed.__proto__ || Object.getPrototypeOf(BlockEmbed)).apply(this, arguments));\n  }\n\n  _createClass(BlockEmbed, [{\n    key: 'attach',\n    value: function attach() {\n      _get(BlockEmbed.prototype.__proto__ || Object.getPrototypeOf(BlockEmbed.prototype), 'attach', this).call(this);\n      this.attributes = new _parchment2.default.Attributor.Store(this.domNode);\n    }\n  }, {\n    key: 'delta',\n    value: function delta() {\n      return new _quillDelta2.default().insert(this.value(), (0, _extend2.default)(this.formats(), this.attributes.values()));\n    }\n  }, {\n    key: 'format',\n    value: function format(name, value) {\n      var attribute = _parchment2.default.query(name, _parchment2.default.Scope.BLOCK_ATTRIBUTE);\n      if (attribute != null) {\n        this.attributes.attribute(attribute, value);\n      }\n    }\n  }, {\n    key: 'formatAt',\n    value: function formatAt(index, length, name, value) {\n      this.format(name, value);\n    }\n  }, {\n    key: 'insertAt',\n    value: function insertAt(index, value, def) {\n      if (typeof value === 'string' && value.endsWith('\\n')) {\n        var block = _parchment2.default.create(Block.blotName);\n        this.parent.insertBefore(block, index === 0 ? this : this.next);\n        block.insertAt(0, value.slice(0, -1));\n      } else {\n        _get(BlockEmbed.prototype.__proto__ || Object.getPrototypeOf(BlockEmbed.prototype), 'insertAt', this).call(this, index, value, def);\n      }\n    }\n  }]);\n\n  return BlockEmbed;\n}(_parchment2.default.Embed);\n\nBlockEmbed.scope = _parchment2.default.Scope.BLOCK_BLOT;\n// It is important for cursor behavior BlockEmbeds use tags that are block level elements\n\n\nvar Block = function (_Parchment$Block) {\n  _inherits(Block, _Parchment$Block);\n\n  function Block(domNode) {\n    _classCallCheck(this, Block);\n\n    var _this2 = _possibleConstructorReturn(this, (Block.__proto__ || Object.getPrototypeOf(Block)).call(this, domNode));\n\n    _this2.cache = {};\n    return _this2;\n  }\n\n  _createClass(Block, [{\n    key: 'delta',\n    value: function delta() {\n      if (this.cache.delta == null) {\n        this.cache.delta = this.descendants(_parchment2.default.Leaf).reduce(function (delta, leaf) {\n          if (leaf.length() === 0) {\n            return delta;\n          } else {\n            return delta.insert(leaf.value(), bubbleFormats(leaf));\n          }\n        }, new _quillDelta2.default()).insert('\\n', bubbleFormats(this));\n      }\n      return this.cache.delta;\n    }\n  }, {\n    key: 'deleteAt',\n    value: function deleteAt(index, length) {\n      _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'deleteAt', this).call(this, index, length);\n      this.cache = {};\n    }\n  }, {\n    key: 'formatAt',\n    value: function formatAt(index, length, name, value) {\n      if (length <= 0) return;\n      if (_parchment2.default.query(name, _parchment2.default.Scope.BLOCK)) {\n        if (index + length === this.length()) {\n          this.format(name, value);\n        }\n      } else {\n        _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'formatAt', this).call(this, index, Math.min(length, this.length() - index - 1), name, value);\n      }\n      this.cache = {};\n    }\n  }, {\n    key: 'insertAt',\n    value: function insertAt(index, value, def) {\n      if (def != null) return _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'insertAt', this).call(this, index, value, def);\n      if (value.length === 0) return;\n      var lines = value.split('\\n');\n      var text = lines.shift();\n      if (text.length > 0) {\n        if (index < this.length() - 1 || this.children.tail == null) {\n          _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'insertAt', this).call(this, Math.min(index, this.length() - 1), text);\n        } else {\n          this.children.tail.insertAt(this.children.tail.length(), text);\n        }\n        this.cache = {};\n      }\n      var block = this;\n      lines.reduce(function (index, line) {\n        block = block.split(index, true);\n        block.insertAt(0, line);\n        return line.length;\n      }, index + text.length);\n    }\n  }, {\n    key: 'insertBefore',\n    value: function insertBefore(blot, ref) {\n      var head = this.children.head;\n      _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'insertBefore', this).call(this, blot, ref);\n      if (head instanceof _break2.default) {\n        head.remove();\n      }\n      this.cache = {};\n    }\n  }, {\n    key: 'length',\n    value: function length() {\n      if (this.cache.length == null) {\n        this.cache.length = _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'length', this).call(this) + NEWLINE_LENGTH;\n      }\n      return this.cache.length;\n    }\n  }, {\n    key: 'moveChildren',\n    value: function moveChildren(target, ref) {\n      _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'moveChildren', this).call(this, target, ref);\n      this.cache = {};\n    }\n  }, {\n    key: 'optimize',\n    value: function optimize(context) {\n      _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'optimize', this).call(this, context);\n      this.cache = {};\n    }\n  }, {\n    key: 'path',\n    value: function path(index) {\n      return _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'path', this).call(this, index, true);\n    }\n  }, {\n    key: 'removeChild',\n    value: function removeChild(child) {\n      _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'removeChild', this).call(this, child);\n      this.cache = {};\n    }\n  }, {\n    key: 'split',\n    value: function split(index) {\n      var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n      if (force && (index === 0 || index >= this.length() - NEWLINE_LENGTH)) {\n        var clone = this.clone();\n        if (index === 0) {\n          this.parent.insertBefore(clone, this);\n          return this;\n        } else {\n          this.parent.insertBefore(clone, this.next);\n          return clone;\n        }\n      } else {\n        var next = _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'split', this).call(this, index, force);\n        this.cache = {};\n        return next;\n      }\n    }\n  }]);\n\n  return Block;\n}(_parchment2.default.Block);\n\nBlock.blotName = 'block';\nBlock.tagName = 'P';\nBlock.defaultChild = 'break';\nBlock.allowedChildren = [_inline2.default, _parchment2.default.Embed, _text2.default];\n\nfunction bubbleFormats(blot) {\n  var formats = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (blot == null) return formats;\n  if (typeof blot.formats === 'function') {\n    formats = (0, _extend2.default)(formats, blot.formats());\n  }\n  if (blot.parent == null || blot.parent.blotName == 'scroll' || blot.parent.statics.scope !== blot.statics.scope) {\n    return formats;\n  }\n  return bubbleFormats(blot.parent, formats);\n}\n\nexports.bubbleFormats = bubbleFormats;\nexports.BlockEmbed = BlockEmbed;\nexports.default = Block;\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.overload = exports.expandConfig = undefined;\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\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\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\n__webpack_require__(50);\n\nvar _quillDelta = __webpack_require__(2);\n\nvar _quillDelta2 = _interopRequireDefault(_quillDelta);\n\nvar _editor = __webpack_require__(14);\n\nvar _editor2 = _interopRequireDefault(_editor);\n\nvar _emitter3 = __webpack_require__(8);\n\nvar _emitter4 = _interopRequireDefault(_emitter3);\n\nvar _module = __webpack_require__(9);\n\nvar _module2 = _interopRequireDefault(_module);\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _selection = __webpack_require__(15);\n\nvar _selection2 = _interopRequireDefault(_selection);\n\nvar _extend = __webpack_require__(3);\n\nvar _extend2 = _interopRequireDefault(_extend);\n\nvar _logger = __webpack_require__(10);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _theme = __webpack_require__(34);\n\nvar _theme2 = _interopRequireDefault(_theme);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar debug = (0, _logger2.default)('quill');\n\nvar Quill = function () {\n  _createClass(Quill, null, [{\n    key: 'debug',\n    value: function debug(limit) {\n      if (limit === true) {\n        limit = 'log';\n      }\n      _logger2.default.level(limit);\n    }\n  }, {\n    key: 'find',\n    value: function find(node) {\n      return node.__quill || _parchment2.default.find(node);\n    }\n  }, {\n    key: 'import',\n    value: function _import(name) {\n      if (this.imports[name] == null) {\n        debug.error('Cannot import ' + name + '. Are you sure it was registered?');\n      }\n      return this.imports[name];\n    }\n  }, {\n    key: 'register',\n    value: function register(path, target) {\n      var _this = this;\n\n      var overwrite = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n      if (typeof path !== 'string') {\n        var name = path.attrName || path.blotName;\n        if (typeof name === 'string') {\n          // register(Blot | Attributor, overwrite)\n          this.register('formats/' + name, path, target);\n        } else {\n          Object.keys(path).forEach(function (key) {\n            _this.register(key, path[key], target);\n          });\n        }\n      } else {\n        if (this.imports[path] != null && !overwrite) {\n          debug.warn('Overwriting ' + path + ' with', target);\n        }\n        this.imports[path] = target;\n        if ((path.startsWith('blots/') || path.startsWith('formats/')) && target.blotName !== 'abstract') {\n          _parchment2.default.register(target);\n        } else if (path.startsWith('modules') && typeof target.register === 'function') {\n          target.register();\n        }\n      }\n    }\n  }]);\n\n  function Quill(container) {\n    var _this2 = this;\n\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    _classCallCheck(this, Quill);\n\n    this.options = expandConfig(container, options);\n    this.container = this.options.container;\n    if (this.container == null) {\n      return debug.error('Invalid Quill container', container);\n    }\n    if (this.options.debug) {\n      Quill.debug(this.options.debug);\n    }\n    var html = this.container.innerHTML.trim();\n    this.container.classList.add('ql-container');\n    this.container.innerHTML = '';\n    this.container.__quill = this;\n    this.root = this.addContainer('ql-editor');\n    this.root.classList.add('ql-blank');\n    this.root.setAttribute('data-gramm', false);\n    this.scrollingContainer = this.options.scrollingContainer || this.root;\n    this.emitter = new _emitter4.default();\n    this.scroll = _parchment2.default.create(this.root, {\n      emitter: this.emitter,\n      whitelist: this.options.formats\n    });\n    this.editor = new _editor2.default(this.scroll);\n    this.selection = new _selection2.default(this.scroll, this.emitter);\n    this.theme = new this.options.theme(this, this.options);\n    this.keyboard = this.theme.addModule('keyboard');\n    this.clipboard = this.theme.addModule('clipboard');\n    this.history = this.theme.addModule('history');\n    this.theme.init();\n    this.emitter.on(_emitter4.default.events.EDITOR_CHANGE, function (type) {\n      if (type === _emitter4.default.events.TEXT_CHANGE) {\n        _this2.root.classList.toggle('ql-blank', _this2.editor.isBlank());\n      }\n    });\n    this.emitter.on(_emitter4.default.events.SCROLL_UPDATE, function (source, mutations) {\n      var range = _this2.selection.lastRange;\n      var index = range && range.length === 0 ? range.index : undefined;\n      modify.call(_this2, function () {\n        return _this2.editor.update(null, mutations, index);\n      }, source);\n    });\n    var contents = this.clipboard.convert('<div class=\\'ql-editor\\' style=\"white-space: normal;\">' + html + '<p><br></p></div>');\n    this.setContents(contents);\n    this.history.clear();\n    if (this.options.placeholder) {\n      this.root.setAttribute('data-placeholder', this.options.placeholder);\n    }\n    if (this.options.readOnly) {\n      this.disable();\n    }\n  }\n\n  _createClass(Quill, [{\n    key: 'addContainer',\n    value: function addContainer(container) {\n      var refNode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n      if (typeof container === 'string') {\n        var className = container;\n        container = document.createElement('div');\n        container.classList.add(className);\n      }\n      this.container.insertBefore(container, refNode);\n      return container;\n    }\n  }, {\n    key: 'blur',\n    value: function blur() {\n      this.selection.setRange(null);\n    }\n  }, {\n    key: 'deleteText',\n    value: function deleteText(index, length, source) {\n      var _this3 = this;\n\n      var _overload = overload(index, length, source);\n\n      var _overload2 = _slicedToArray(_overload, 4);\n\n      index = _overload2[0];\n      length = _overload2[1];\n      source = _overload2[3];\n\n      return modify.call(this, function () {\n        return _this3.editor.deleteText(index, length);\n      }, source, index, -1 * length);\n    }\n  }, {\n    key: 'disable',\n    value: function disable() {\n      this.enable(false);\n    }\n  }, {\n    key: 'enable',\n    value: function enable() {\n      var enabled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n      this.scroll.enable(enabled);\n      this.container.classList.toggle('ql-disabled', !enabled);\n    }\n  }, {\n    key: 'focus',\n    value: function focus() {\n      var scrollTop = this.scrollingContainer.scrollTop;\n      this.selection.focus();\n      this.scrollingContainer.scrollTop = scrollTop;\n      this.scrollIntoView();\n    }\n  }, {\n    key: 'format',\n    value: function format(name, value) {\n      var _this4 = this;\n\n      var source = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _emitter4.default.sources.API;\n\n      return modify.call(this, function () {\n        var range = _this4.getSelection(true);\n        var change = new _quillDelta2.default();\n        if (range == null) {\n          return change;\n        } else if (_parchment2.default.query(name, _parchment2.default.Scope.BLOCK)) {\n          change = _this4.editor.formatLine(range.index, range.length, _defineProperty({}, name, value));\n        } else if (range.length === 0) {\n          _this4.selection.format(name, value);\n          return change;\n        } else {\n          change = _this4.editor.formatText(range.index, range.length, _defineProperty({}, name, value));\n        }\n        _this4.setSelection(range, _emitter4.default.sources.SILENT);\n        return change;\n      }, source);\n    }\n  }, {\n    key: 'formatLine',\n    value: function formatLine(index, length, name, value, source) {\n      var _this5 = this;\n\n      var formats = void 0;\n\n      var _overload3 = overload(index, length, name, value, source);\n\n      var _overload4 = _slicedToArray(_overload3, 4);\n\n      index = _overload4[0];\n      length = _overload4[1];\n      formats = _overload4[2];\n      source = _overload4[3];\n\n      return modify.call(this, function () {\n        return _this5.editor.formatLine(index, length, formats);\n      }, source, index, 0);\n    }\n  }, {\n    key: 'formatText',\n    value: function formatText(index, length, name, value, source) {\n      var _this6 = this;\n\n      var formats = void 0;\n\n      var _overload5 = overload(index, length, name, value, source);\n\n      var _overload6 = _slicedToArray(_overload5, 4);\n\n      index = _overload6[0];\n      length = _overload6[1];\n      formats = _overload6[2];\n      source = _overload6[3];\n\n      return modify.call(this, function () {\n        return _this6.editor.formatText(index, length, formats);\n      }, source, index, 0);\n    }\n  }, {\n    key: 'getBounds',\n    value: function getBounds(index) {\n      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n      var bounds = void 0;\n      if (typeof index === 'number') {\n        bounds = this.selection.getBounds(index, length);\n      } else {\n        bounds = this.selection.getBounds(index.index, index.length);\n      }\n      var containerBounds = this.container.getBoundingClientRect();\n      return {\n        bottom: bounds.bottom - containerBounds.top,\n        height: bounds.height,\n        left: bounds.left - containerBounds.left,\n        right: bounds.right - containerBounds.left,\n        top: bounds.top - containerBounds.top,\n        width: bounds.width\n      };\n    }\n  }, {\n    key: 'getContents',\n    value: function getContents() {\n      var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getLength() - index;\n\n      var _overload7 = overload(index, length);\n\n      var _overload8 = _slicedToArray(_overload7, 2);\n\n      index = _overload8[0];\n      length = _overload8[1];\n\n      return this.editor.getContents(index, length);\n    }\n  }, {\n    key: 'getFormat',\n    value: function getFormat() {\n      var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getSelection(true);\n      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n      if (typeof index === 'number') {\n        return this.editor.getFormat(index, length);\n      } else {\n        return this.editor.getFormat(index.index, index.length);\n      }\n    }\n  }, {\n    key: 'getIndex',\n    value: function getIndex(blot) {\n      return blot.offset(this.scroll);\n    }\n  }, {\n    key: 'getLength',\n    value: function getLength() {\n      return this.scroll.length();\n    }\n  }, {\n    key: 'getLeaf',\n    value: function getLeaf(index) {\n      return this.scroll.leaf(index);\n    }\n  }, {\n    key: 'getLine',\n    value: function getLine(index) {\n      return this.scroll.line(index);\n    }\n  }, {\n    key: 'getLines',\n    value: function getLines() {\n      var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Number.MAX_VALUE;\n\n      if (typeof index !== 'number') {\n        return this.scroll.lines(index.index, index.length);\n      } else {\n        return this.scroll.lines(index, length);\n      }\n    }\n  }, {\n    key: 'getModule',\n    value: function getModule(name) {\n      return this.theme.modules[name];\n    }\n  }, {\n    key: 'getSelection',\n    value: function getSelection() {\n      var focus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      if (focus) this.focus();\n      this.update(); // Make sure we access getRange with editor in consistent state\n      return this.selection.getRange()[0];\n    }\n  }, {\n    key: 'getText',\n    value: function getText() {\n      var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getLength() - index;\n\n      var _overload9 = overload(index, length);\n\n      var _overload10 = _slicedToArray(_overload9, 2);\n\n      index = _overload10[0];\n      length = _overload10[1];\n\n      return this.editor.getText(index, length);\n    }\n  }, {\n    key: 'hasFocus',\n    value: function hasFocus() {\n      return this.selection.hasFocus();\n    }\n  }, {\n    key: 'insertEmbed',\n    value: function insertEmbed(index, embed, value) {\n      var _this7 = this;\n\n      var source = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : Quill.sources.API;\n\n      return modify.call(this, function () {\n        return _this7.editor.insertEmbed(index, embed, value);\n      }, source, index);\n    }\n  }, {\n    key: 'insertText',\n    value: function insertText(index, text, name, value, source) {\n      var _this8 = this;\n\n      var formats = void 0;\n\n      var _overload11 = overload(index, 0, name, value, source);\n\n      var _overload12 = _slicedToArray(_overload11, 4);\n\n      index = _overload12[0];\n      formats = _overload12[2];\n      source = _overload12[3];\n\n      return modify.call(this, function () {\n        return _this8.editor.insertText(index, text, formats);\n      }, source, index, text.length);\n    }\n  }, {\n    key: 'isEnabled',\n    value: function isEnabled() {\n      return !this.container.classList.contains('ql-disabled');\n    }\n  }, {\n    key: 'off',\n    value: function off() {\n      return this.emitter.off.apply(this.emitter, arguments);\n    }\n  }, {\n    key: 'on',\n    value: function on() {\n      return this.emitter.on.apply(this.emitter, arguments);\n    }\n  }, {\n    key: 'once',\n    value: function once() {\n      return this.emitter.once.apply(this.emitter, arguments);\n    }\n  }, {\n    key: 'pasteHTML',\n    value: function pasteHTML(index, html, source) {\n      this.clipboard.dangerouslyPasteHTML(index, html, source);\n    }\n  }, {\n    key: 'removeFormat',\n    value: function removeFormat(index, length, source) {\n      var _this9 = this;\n\n      var _overload13 = overload(index, length, source);\n\n      var _overload14 = _slicedToArray(_overload13, 4);\n\n      index = _overload14[0];\n      length = _overload14[1];\n      source = _overload14[3];\n\n      return modify.call(this, function () {\n        return _this9.editor.removeFormat(index, length);\n      }, source, index);\n    }\n  }, {\n    key: 'scrollIntoView',\n    value: function scrollIntoView() {\n      this.selection.scrollIntoView(this.scrollingContainer);\n    }\n  }, {\n    key: 'setContents',\n    value: function setContents(delta) {\n      var _this10 = this;\n\n      var source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _emitter4.default.sources.API;\n\n      return modify.call(this, function () {\n        delta = new _quillDelta2.default(delta);\n        var length = _this10.getLength();\n        var deleted = _this10.editor.deleteText(0, length);\n        var applied = _this10.editor.applyDelta(delta);\n        var lastOp = applied.ops[applied.ops.length - 1];\n        if (lastOp != null && typeof lastOp.insert === 'string' && lastOp.insert[lastOp.insert.length - 1] === '\\n') {\n          _this10.editor.deleteText(_this10.getLength() - 1, 1);\n          applied.delete(1);\n        }\n        var ret = deleted.compose(applied);\n        return ret;\n      }, source);\n    }\n  }, {\n    key: 'setSelection',\n    value: function setSelection(index, length, source) {\n      if (index == null) {\n        this.selection.setRange(null, length || Quill.sources.API);\n      } else {\n        var _overload15 = overload(index, length, source);\n\n        var _overload16 = _slicedToArray(_overload15, 4);\n\n        index = _overload16[0];\n        length = _overload16[1];\n        source = _overload16[3];\n\n        this.selection.setRange(new _selection.Range(index, length), source);\n        if (source !== _emitter4.default.sources.SILENT) {\n          this.selection.scrollIntoView(this.scrollingContainer);\n        }\n      }\n    }\n  }, {\n    key: 'setText',\n    value: function setText(text) {\n      var source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _emitter4.default.sources.API;\n\n      var delta = new _quillDelta2.default().insert(text);\n      return this.setContents(delta, source);\n    }\n  }, {\n    key: 'update',\n    value: function update() {\n      var source = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _emitter4.default.sources.USER;\n\n      var change = this.scroll.update(source); // Will update selection before selection.update() does if text changes\n      this.selection.update(source);\n      return change;\n    }\n  }, {\n    key: 'updateContents',\n    value: function updateContents(delta) {\n      var _this11 = this;\n\n      var source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _emitter4.default.sources.API;\n\n      return modify.call(this, function () {\n        delta = new _quillDelta2.default(delta);\n        return _this11.editor.applyDelta(delta, source);\n      }, source, true);\n    }\n  }]);\n\n  return Quill;\n}();\n\nQuill.DEFAULTS = {\n  bounds: null,\n  formats: null,\n  modules: {},\n  placeholder: '',\n  readOnly: false,\n  scrollingContainer: null,\n  strict: true,\n  theme: 'default'\n};\nQuill.events = _emitter4.default.events;\nQuill.sources = _emitter4.default.sources;\n// eslint-disable-next-line no-undef\nQuill.version =  false ? 'dev' : \"1.3.7\";\n\nQuill.imports = {\n  'delta': _quillDelta2.default,\n  'parchment': _parchment2.default,\n  'core/module': _module2.default,\n  'core/theme': _theme2.default\n};\n\nfunction expandConfig(container, userConfig) {\n  userConfig = (0, _extend2.default)(true, {\n    container: container,\n    modules: {\n      clipboard: true,\n      keyboard: true,\n      history: true\n    }\n  }, userConfig);\n  if (!userConfig.theme || userConfig.theme === Quill.DEFAULTS.theme) {\n    userConfig.theme = _theme2.default;\n  } else {\n    userConfig.theme = Quill.import('themes/' + userConfig.theme);\n    if (userConfig.theme == null) {\n      throw new Error('Invalid theme ' + userConfig.theme + '. Did you register it?');\n    }\n  }\n  var themeConfig = (0, _extend2.default)(true, {}, userConfig.theme.DEFAULTS);\n  [themeConfig, userConfig].forEach(function (config) {\n    config.modules = config.modules || {};\n    Object.keys(config.modules).forEach(function (module) {\n      if (config.modules[module] === true) {\n        config.modules[module] = {};\n      }\n    });\n  });\n  var moduleNames = Object.keys(themeConfig.modules).concat(Object.keys(userConfig.modules));\n  var moduleConfig = moduleNames.reduce(function (config, name) {\n    var moduleClass = Quill.import('modules/' + name);\n    if (moduleClass == null) {\n      debug.error('Cannot load ' + name + ' module. Are you sure you registered it?');\n    } else {\n      config[name] = moduleClass.DEFAULTS || {};\n    }\n    return config;\n  }, {});\n  // Special case toolbar shorthand\n  if (userConfig.modules != null && userConfig.modules.toolbar && userConfig.modules.toolbar.constructor !== Object) {\n    userConfig.modules.toolbar = {\n      container: userConfig.modules.toolbar\n    };\n  }\n  userConfig = (0, _extend2.default)(true, {}, Quill.DEFAULTS, { modules: moduleConfig }, themeConfig, userConfig);\n  ['bounds', 'container', 'scrollingContainer'].forEach(function (key) {\n    if (typeof userConfig[key] === 'string') {\n      userConfig[key] = document.querySelector(userConfig[key]);\n    }\n  });\n  userConfig.modules = Object.keys(userConfig.modules).reduce(function (config, name) {\n    if (userConfig.modules[name]) {\n      config[name] = userConfig.modules[name];\n    }\n    return config;\n  }, {});\n  return userConfig;\n}\n\n// Handle selection preservation and TEXT_CHANGE emission\n// common to modification APIs\nfunction modify(modifier, source, index, shift) {\n  if (this.options.strict && !this.isEnabled() && source === _emitter4.default.sources.USER) {\n    return new _quillDelta2.default();\n  }\n  var range = index == null ? null : this.getSelection();\n  var oldDelta = this.editor.delta;\n  var change = modifier();\n  if (range != null) {\n    if (index === true) index = range.index;\n    if (shift == null) {\n      range = shiftRange(range, change, source);\n    } else if (shift !== 0) {\n      range = shiftRange(range, index, shift, source);\n    }\n    this.setSelection(range, _emitter4.default.sources.SILENT);\n  }\n  if (change.length() > 0) {\n    var _emitter;\n\n    var args = [_emitter4.default.events.TEXT_CHANGE, change, oldDelta, source];\n    (_emitter = this.emitter).emit.apply(_emitter, [_emitter4.default.events.EDITOR_CHANGE].concat(args));\n    if (source !== _emitter4.default.sources.SILENT) {\n      var _emitter2;\n\n      (_emitter2 = this.emitter).emit.apply(_emitter2, args);\n    }\n  }\n  return change;\n}\n\nfunction overload(index, length, name, value, source) {\n  var formats = {};\n  if (typeof index.index === 'number' && typeof index.length === 'number') {\n    // Allow for throwaway end (used by insertText/insertEmbed)\n    if (typeof length !== 'number') {\n      source = value, value = name, name = length, length = index.length, index = index.index;\n    } else {\n      length = index.length, index = index.index;\n    }\n  } else if (typeof length !== 'number') {\n    source = value, value = name, name = length, length = 0;\n  }\n  // Handle format being object, two format name/value strings or excluded\n  if ((typeof name === 'undefined' ? 'undefined' : _typeof(name)) === 'object') {\n    formats = name;\n    source = value;\n  } else if (typeof name === 'string') {\n    if (value != null) {\n      formats[name] = value;\n    } else {\n      source = name;\n    }\n  }\n  // Handle optional source\n  source = source || _emitter4.default.sources.API;\n  return [index, length, formats, source];\n}\n\nfunction shiftRange(range, index, length, source) {\n  if (range == null) return null;\n  var start = void 0,\n      end = void 0;\n  if (index instanceof _quillDelta2.default) {\n    var _map = [range.index, range.index + range.length].map(function (pos) {\n      return index.transformPosition(pos, source !== _emitter4.default.sources.USER);\n    });\n\n    var _map2 = _slicedToArray(_map, 2);\n\n    start = _map2[0];\n    end = _map2[1];\n  } else {\n    var _map3 = [range.index, range.index + range.length].map(function (pos) {\n      if (pos < index || pos === index && source === _emitter4.default.sources.USER) return pos;\n      if (length >= 0) {\n        return pos + length;\n      } else {\n        return Math.max(index, pos + length);\n      }\n    });\n\n    var _map4 = _slicedToArray(_map3, 2);\n\n    start = _map4[0];\n    end = _map4[1];\n  }\n  return new _selection.Range(start, end - start);\n}\n\nexports.expandConfig = expandConfig;\nexports.overload = overload;\nexports.default = Quill;\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\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 _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _text = __webpack_require__(7);\n\nvar _text2 = _interopRequireDefault(_text);\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Inline = function (_Parchment$Inline) {\n  _inherits(Inline, _Parchment$Inline);\n\n  function Inline() {\n    _classCallCheck(this, Inline);\n\n    return _possibleConstructorReturn(this, (Inline.__proto__ || Object.getPrototypeOf(Inline)).apply(this, arguments));\n  }\n\n  _createClass(Inline, [{\n    key: 'formatAt',\n    value: function formatAt(index, length, name, value) {\n      if (Inline.compare(this.statics.blotName, name) < 0 && _parchment2.default.query(name, _parchment2.default.Scope.BLOT)) {\n        var blot = this.isolate(index, length);\n        if (value) {\n          blot.wrap(name, value);\n        }\n      } else {\n        _get(Inline.prototype.__proto__ || Object.getPrototypeOf(Inline.prototype), 'formatAt', this).call(this, index, length, name, value);\n      }\n    }\n  }, {\n    key: 'optimize',\n    value: function optimize(context) {\n      _get(Inline.prototype.__proto__ || Object.getPrototypeOf(Inline.prototype), 'optimize', this).call(this, context);\n      if (this.parent instanceof Inline && Inline.compare(this.statics.blotName, this.parent.statics.blotName) > 0) {\n        var parent = this.parent.isolate(this.offset(), this.length());\n        this.moveChildren(parent);\n        parent.wrap(this);\n      }\n    }\n  }], [{\n    key: 'compare',\n    value: function compare(self, other) {\n      var selfIndex = Inline.order.indexOf(self);\n      var otherIndex = Inline.order.indexOf(other);\n      if (selfIndex >= 0 || otherIndex >= 0) {\n        return selfIndex - otherIndex;\n      } else if (self === other) {\n        return 0;\n      } else if (self < other) {\n        return -1;\n      } else {\n        return 1;\n      }\n    }\n  }]);\n\n  return Inline;\n}(_parchment2.default.Inline);\n\nInline.allowedChildren = [Inline, _parchment2.default.Embed, _text2.default];\n// Lower index means deeper in the DOM tree, since not found (-1) is for embeds\nInline.order = ['cursor', 'inline', // Must be lower\n'underline', 'strike', 'italic', 'bold', 'script', 'link', 'code' // Must be higher\n];\n\nexports.default = Inline;\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar TextBlot = function (_Parchment$Text) {\n  _inherits(TextBlot, _Parchment$Text);\n\n  function TextBlot() {\n    _classCallCheck(this, TextBlot);\n\n    return _possibleConstructorReturn(this, (TextBlot.__proto__ || Object.getPrototypeOf(TextBlot)).apply(this, arguments));\n  }\n\n  return TextBlot;\n}(_parchment2.default.Text);\n\nexports.default = TextBlot;\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\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 _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _eventemitter = __webpack_require__(54);\n\nvar _eventemitter2 = _interopRequireDefault(_eventemitter);\n\nvar _logger = __webpack_require__(10);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar debug = (0, _logger2.default)('quill:events');\n\nvar EVENTS = ['selectionchange', 'mousedown', 'mouseup', 'click'];\n\nEVENTS.forEach(function (eventName) {\n  document.addEventListener(eventName, function () {\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    [].slice.call(document.querySelectorAll('.ql-container')).forEach(function (node) {\n      // TODO use WeakMap\n      if (node.__quill && node.__quill.emitter) {\n        var _node$__quill$emitter;\n\n        (_node$__quill$emitter = node.__quill.emitter).handleDOM.apply(_node$__quill$emitter, args);\n      }\n    });\n  });\n});\n\nvar Emitter = function (_EventEmitter) {\n  _inherits(Emitter, _EventEmitter);\n\n  function Emitter() {\n    _classCallCheck(this, Emitter);\n\n    var _this = _possibleConstructorReturn(this, (Emitter.__proto__ || Object.getPrototypeOf(Emitter)).call(this));\n\n    _this.listeners = {};\n    _this.on('error', debug.error);\n    return _this;\n  }\n\n  _createClass(Emitter, [{\n    key: 'emit',\n    value: function emit() {\n      debug.log.apply(debug, arguments);\n      _get(Emitter.prototype.__proto__ || Object.getPrototypeOf(Emitter.prototype), 'emit', this).apply(this, arguments);\n    }\n  }, {\n    key: 'handleDOM',\n    value: function handleDOM(event) {\n      for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n        args[_key2 - 1] = arguments[_key2];\n      }\n\n      (this.listeners[event.type] || []).forEach(function (_ref) {\n        var node = _ref.node,\n            handler = _ref.handler;\n\n        if (event.target === node || node.contains(event.target)) {\n          handler.apply(undefined, [event].concat(args));\n        }\n      });\n    }\n  }, {\n    key: 'listenDOM',\n    value: function listenDOM(eventName, node, handler) {\n      if (!this.listeners[eventName]) {\n        this.listeners[eventName] = [];\n      }\n      this.listeners[eventName].push({ node: node, handler: handler });\n    }\n  }]);\n\n  return Emitter;\n}(_eventemitter2.default);\n\nEmitter.events = {\n  EDITOR_CHANGE: 'editor-change',\n  SCROLL_BEFORE_UPDATE: 'scroll-before-update',\n  SCROLL_OPTIMIZE: 'scroll-optimize',\n  SCROLL_UPDATE: 'scroll-update',\n  SELECTION_CHANGE: 'selection-change',\n  TEXT_CHANGE: 'text-change'\n};\nEmitter.sources = {\n  API: 'api',\n  SILENT: 'silent',\n  USER: 'user'\n};\n\nexports.default = Emitter;\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Module = function Module(quill) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  _classCallCheck(this, Module);\n\n  this.quill = quill;\n  this.options = options;\n};\n\nModule.DEFAULTS = {};\n\nexports.default = Module;\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nvar levels = ['error', 'warn', 'log', 'info'];\nvar level = 'warn';\n\nfunction debug(method) {\n  if (levels.indexOf(method) <= levels.indexOf(level)) {\n    var _console;\n\n    for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    (_console = console)[method].apply(_console, args); // eslint-disable-line no-console\n  }\n}\n\nfunction namespace(ns) {\n  return levels.reduce(function (logger, method) {\n    logger[method] = debug.bind(console, method, ns);\n    return logger;\n  }, {});\n}\n\ndebug.level = namespace.level = function (newLevel) {\n  level = newLevel;\n};\n\nexports.default = namespace;\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar pSlice = Array.prototype.slice;\nvar objectKeys = __webpack_require__(52);\nvar isArguments = __webpack_require__(53);\n\nvar deepEqual = module.exports = function (actual, expected, opts) {\n  if (!opts) opts = {};\n  // 7.1. All identical values are equivalent, as determined by ===.\n  if (actual === expected) {\n    return true;\n\n  } else if (actual instanceof Date && expected instanceof Date) {\n    return actual.getTime() === expected.getTime();\n\n  // 7.3. Other pairs that do not both pass typeof value == 'object',\n  // equivalence is determined by ==.\n  } else if (!actual || !expected || typeof actual != 'object' && typeof expected != 'object') {\n    return opts.strict ? actual === expected : actual == expected;\n\n  // 7.4. For all other Object pairs, including Array objects, equivalence is\n  // determined by having the same number of owned properties (as verified\n  // with Object.prototype.hasOwnProperty.call), the same set of keys\n  // (although not necessarily the same order), equivalent values for every\n  // corresponding key, and an identical 'prototype' property. Note: this\n  // accounts for both named and indexed properties on Arrays.\n  } else {\n    return objEquiv(actual, expected, opts);\n  }\n}\n\nfunction isUndefinedOrNull(value) {\n  return value === null || value === undefined;\n}\n\nfunction isBuffer (x) {\n  if (!x || typeof x !== 'object' || typeof x.length !== 'number') return false;\n  if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {\n    return false;\n  }\n  if (x.length > 0 && typeof x[0] !== 'number') return false;\n  return true;\n}\n\nfunction objEquiv(a, b, opts) {\n  var i, key;\n  if (isUndefinedOrNull(a) || isUndefinedOrNull(b))\n    return false;\n  // an identical 'prototype' property.\n  if (a.prototype !== b.prototype) return false;\n  //~~~I've managed to break Object.keys through screwy arguments passing.\n  //   Converting to array solves the problem.\n  if (isArguments(a)) {\n    if (!isArguments(b)) {\n      return false;\n    }\n    a = pSlice.call(a);\n    b = pSlice.call(b);\n    return deepEqual(a, b, opts);\n  }\n  if (isBuffer(a)) {\n    if (!isBuffer(b)) {\n      return false;\n    }\n    if (a.length !== b.length) return false;\n    for (i = 0; i < a.length; i++) {\n      if (a[i] !== b[i]) return false;\n    }\n    return true;\n  }\n  try {\n    var ka = objectKeys(a),\n        kb = objectKeys(b);\n  } catch (e) {//happens when one is a string literal and the other isn't\n    return false;\n  }\n  // having the same number of owned properties (keys incorporates\n  // hasOwnProperty)\n  if (ka.length != kb.length)\n    return false;\n  //the same set of keys (although not necessarily the same order),\n  ka.sort();\n  kb.sort();\n  //~~~cheap key test\n  for (i = ka.length - 1; i >= 0; i--) {\n    if (ka[i] != kb[i])\n      return false;\n  }\n  //equivalent values for every corresponding key, and\n  //~~~possibly expensive deep test\n  for (i = ka.length - 1; i >= 0; i--) {\n    key = ka[i];\n    if (!deepEqual(a[key], b[key], opts)) return false;\n  }\n  return typeof a === typeof b;\n}\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Registry = __webpack_require__(1);\nvar Attributor = /** @class */ (function () {\n    function Attributor(attrName, keyName, options) {\n        if (options === void 0) { options = {}; }\n        this.attrName = attrName;\n        this.keyName = keyName;\n        var attributeBit = Registry.Scope.TYPE & Registry.Scope.ATTRIBUTE;\n        if (options.scope != null) {\n            // Ignore type bits, force attribute bit\n            this.scope = (options.scope & Registry.Scope.LEVEL) | attributeBit;\n        }\n        else {\n            this.scope = Registry.Scope.ATTRIBUTE;\n        }\n        if (options.whitelist != null)\n            this.whitelist = options.whitelist;\n    }\n    Attributor.keys = function (node) {\n        return [].map.call(node.attributes, function (item) {\n            return item.name;\n        });\n    };\n    Attributor.prototype.add = function (node, value) {\n        if (!this.canAdd(node, value))\n            return false;\n        node.setAttribute(this.keyName, value);\n        return true;\n    };\n    Attributor.prototype.canAdd = function (node, value) {\n        var match = Registry.query(node, Registry.Scope.BLOT & (this.scope | Registry.Scope.TYPE));\n        if (match == null)\n            return false;\n        if (this.whitelist == null)\n            return true;\n        if (typeof value === 'string') {\n            return this.whitelist.indexOf(value.replace(/[\"']/g, '')) > -1;\n        }\n        else {\n            return this.whitelist.indexOf(value) > -1;\n        }\n    };\n    Attributor.prototype.remove = function (node) {\n        node.removeAttribute(this.keyName);\n    };\n    Attributor.prototype.value = function (node) {\n        var value = node.getAttribute(this.keyName);\n        if (this.canAdd(node, value) && value) {\n            return value;\n        }\n        return '';\n    };\n    return Attributor;\n}());\nexports.default = Attributor;\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.Code = undefined;\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\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 _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _quillDelta = __webpack_require__(2);\n\nvar _quillDelta2 = _interopRequireDefault(_quillDelta);\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _block = __webpack_require__(4);\n\nvar _block2 = _interopRequireDefault(_block);\n\nvar _inline = __webpack_require__(6);\n\nvar _inline2 = _interopRequireDefault(_inline);\n\nvar _text = __webpack_require__(7);\n\nvar _text2 = _interopRequireDefault(_text);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Code = function (_Inline) {\n  _inherits(Code, _Inline);\n\n  function Code() {\n    _classCallCheck(this, Code);\n\n    return _possibleConstructorReturn(this, (Code.__proto__ || Object.getPrototypeOf(Code)).apply(this, arguments));\n  }\n\n  return Code;\n}(_inline2.default);\n\nCode.blotName = 'code';\nCode.tagName = 'CODE';\n\nvar CodeBlock = function (_Block) {\n  _inherits(CodeBlock, _Block);\n\n  function CodeBlock() {\n    _classCallCheck(this, CodeBlock);\n\n    return _possibleConstructorReturn(this, (CodeBlock.__proto__ || Object.getPrototypeOf(CodeBlock)).apply(this, arguments));\n  }\n\n  _createClass(CodeBlock, [{\n    key: 'delta',\n    value: function delta() {\n      var _this3 = this;\n\n      var text = this.domNode.textContent;\n      if (text.endsWith('\\n')) {\n        // Should always be true\n        text = text.slice(0, -1);\n      }\n      return text.split('\\n').reduce(function (delta, frag) {\n        return delta.insert(frag).insert('\\n', _this3.formats());\n      }, new _quillDelta2.default());\n    }\n  }, {\n    key: 'format',\n    value: function format(name, value) {\n      if (name === this.statics.blotName && value) return;\n\n      var _descendant = this.descendant(_text2.default, this.length() - 1),\n          _descendant2 = _slicedToArray(_descendant, 1),\n          text = _descendant2[0];\n\n      if (text != null) {\n        text.deleteAt(text.length() - 1, 1);\n      }\n      _get(CodeBlock.prototype.__proto__ || Object.getPrototypeOf(CodeBlock.prototype), 'format', this).call(this, name, value);\n    }\n  }, {\n    key: 'formatAt',\n    value: function formatAt(index, length, name, value) {\n      if (length === 0) return;\n      if (_parchment2.default.query(name, _parchment2.default.Scope.BLOCK) == null || name === this.statics.blotName && value === this.statics.formats(this.domNode)) {\n        return;\n      }\n      var nextNewline = this.newlineIndex(index);\n      if (nextNewline < 0 || nextNewline >= index + length) return;\n      var prevNewline = this.newlineIndex(index, true) + 1;\n      var isolateLength = nextNewline - prevNewline + 1;\n      var blot = this.isolate(prevNewline, isolateLength);\n      var next = blot.next;\n      blot.format(name, value);\n      if (next instanceof CodeBlock) {\n        next.formatAt(0, index - prevNewline + length - isolateLength, name, value);\n      }\n    }\n  }, {\n    key: 'insertAt',\n    value: function insertAt(index, value, def) {\n      if (def != null) return;\n\n      var _descendant3 = this.descendant(_text2.default, index),\n          _descendant4 = _slicedToArray(_descendant3, 2),\n          text = _descendant4[0],\n          offset = _descendant4[1];\n\n      text.insertAt(offset, value);\n    }\n  }, {\n    key: 'length',\n    value: function length() {\n      var length = this.domNode.textContent.length;\n      if (!this.domNode.textContent.endsWith('\\n')) {\n        return length + 1;\n      }\n      return length;\n    }\n  }, {\n    key: 'newlineIndex',\n    value: function newlineIndex(searchIndex) {\n      var reverse = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n      if (!reverse) {\n        var offset = this.domNode.textContent.slice(searchIndex).indexOf('\\n');\n        return offset > -1 ? searchIndex + offset : -1;\n      } else {\n        return this.domNode.textContent.slice(0, searchIndex).lastIndexOf('\\n');\n      }\n    }\n  }, {\n    key: 'optimize',\n    value: function optimize(context) {\n      if (!this.domNode.textContent.endsWith('\\n')) {\n        this.appendChild(_parchment2.default.create('text', '\\n'));\n      }\n      _get(CodeBlock.prototype.__proto__ || Object.getPrototypeOf(CodeBlock.prototype), 'optimize', this).call(this, context);\n      var next = this.next;\n      if (next != null && next.prev === this && next.statics.blotName === this.statics.blotName && this.statics.formats(this.domNode) === next.statics.formats(next.domNode)) {\n        next.optimize(context);\n        next.moveChildren(this);\n        next.remove();\n      }\n    }\n  }, {\n    key: 'replace',\n    value: function replace(target) {\n      _get(CodeBlock.prototype.__proto__ || Object.getPrototypeOf(CodeBlock.prototype), 'replace', this).call(this, target);\n      [].slice.call(this.domNode.querySelectorAll('*')).forEach(function (node) {\n        var blot = _parchment2.default.find(node);\n        if (blot == null) {\n          node.parentNode.removeChild(node);\n        } else if (blot instanceof _parchment2.default.Embed) {\n          blot.remove();\n        } else {\n          blot.unwrap();\n        }\n      });\n    }\n  }], [{\n    key: 'create',\n    value: function create(value) {\n      var domNode = _get(CodeBlock.__proto__ || Object.getPrototypeOf(CodeBlock), 'create', this).call(this, value);\n      domNode.setAttribute('spellcheck', false);\n      return domNode;\n    }\n  }, {\n    key: 'formats',\n    value: function formats() {\n      return true;\n    }\n  }]);\n\n  return CodeBlock;\n}(_block2.default);\n\nCodeBlock.blotName = 'code-block';\nCodeBlock.tagName = 'PRE';\nCodeBlock.TAB = '  ';\n\nexports.Code = Code;\nexports.default = CodeBlock;\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\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\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\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 _quillDelta = __webpack_require__(2);\n\nvar _quillDelta2 = _interopRequireDefault(_quillDelta);\n\nvar _op = __webpack_require__(20);\n\nvar _op2 = _interopRequireDefault(_op);\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _code = __webpack_require__(13);\n\nvar _code2 = _interopRequireDefault(_code);\n\nvar _cursor = __webpack_require__(24);\n\nvar _cursor2 = _interopRequireDefault(_cursor);\n\nvar _block = __webpack_require__(4);\n\nvar _block2 = _interopRequireDefault(_block);\n\nvar _break = __webpack_require__(16);\n\nvar _break2 = _interopRequireDefault(_break);\n\nvar _clone = __webpack_require__(21);\n\nvar _clone2 = _interopRequireDefault(_clone);\n\nvar _deepEqual = __webpack_require__(11);\n\nvar _deepEqual2 = _interopRequireDefault(_deepEqual);\n\nvar _extend = __webpack_require__(3);\n\nvar _extend2 = _interopRequireDefault(_extend);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ASCII = /^[ -~]*$/;\n\nvar Editor = function () {\n  function Editor(scroll) {\n    _classCallCheck(this, Editor);\n\n    this.scroll = scroll;\n    this.delta = this.getDelta();\n  }\n\n  _createClass(Editor, [{\n    key: 'applyDelta',\n    value: function applyDelta(delta) {\n      var _this = this;\n\n      var consumeNextNewline = false;\n      this.scroll.update();\n      var scrollLength = this.scroll.length();\n      this.scroll.batchStart();\n      delta = normalizeDelta(delta);\n      delta.reduce(function (index, op) {\n        var length = op.retain || op.delete || op.insert.length || 1;\n        var attributes = op.attributes || {};\n        if (op.insert != null) {\n          if (typeof op.insert === 'string') {\n            var text = op.insert;\n            if (text.endsWith('\\n') && consumeNextNewline) {\n              consumeNextNewline = false;\n              text = text.slice(0, -1);\n            }\n            if (index >= scrollLength && !text.endsWith('\\n')) {\n              consumeNextNewline = true;\n            }\n            _this.scroll.insertAt(index, text);\n\n            var _scroll$line = _this.scroll.line(index),\n                _scroll$line2 = _slicedToArray(_scroll$line, 2),\n                line = _scroll$line2[0],\n                offset = _scroll$line2[1];\n\n            var formats = (0, _extend2.default)({}, (0, _block.bubbleFormats)(line));\n            if (line instanceof _block2.default) {\n              var _line$descendant = line.descendant(_parchment2.default.Leaf, offset),\n                  _line$descendant2 = _slicedToArray(_line$descendant, 1),\n                  leaf = _line$descendant2[0];\n\n              formats = (0, _extend2.default)(formats, (0, _block.bubbleFormats)(leaf));\n            }\n            attributes = _op2.default.attributes.diff(formats, attributes) || {};\n          } else if (_typeof(op.insert) === 'object') {\n            var key = Object.keys(op.insert)[0]; // There should only be one key\n            if (key == null) return index;\n            _this.scroll.insertAt(index, key, op.insert[key]);\n          }\n          scrollLength += length;\n        }\n        Object.keys(attributes).forEach(function (name) {\n          _this.scroll.formatAt(index, length, name, attributes[name]);\n        });\n        return index + length;\n      }, 0);\n      delta.reduce(function (index, op) {\n        if (typeof op.delete === 'number') {\n          _this.scroll.deleteAt(index, op.delete);\n          return index;\n        }\n        return index + (op.retain || op.insert.length || 1);\n      }, 0);\n      this.scroll.batchEnd();\n      return this.update(delta);\n    }\n  }, {\n    key: 'deleteText',\n    value: function deleteText(index, length) {\n      this.scroll.deleteAt(index, length);\n      return this.update(new _quillDelta2.default().retain(index).delete(length));\n    }\n  }, {\n    key: 'formatLine',\n    value: function formatLine(index, length) {\n      var _this2 = this;\n\n      var formats = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n      this.scroll.update();\n      Object.keys(formats).forEach(function (format) {\n        if (_this2.scroll.whitelist != null && !_this2.scroll.whitelist[format]) return;\n        var lines = _this2.scroll.lines(index, Math.max(length, 1));\n        var lengthRemaining = length;\n        lines.forEach(function (line) {\n          var lineLength = line.length();\n          if (!(line instanceof _code2.default)) {\n            line.format(format, formats[format]);\n          } else {\n            var codeIndex = index - line.offset(_this2.scroll);\n            var codeLength = line.newlineIndex(codeIndex + lengthRemaining) - codeIndex + 1;\n            line.formatAt(codeIndex, codeLength, format, formats[format]);\n          }\n          lengthRemaining -= lineLength;\n        });\n      });\n      this.scroll.optimize();\n      return this.update(new _quillDelta2.default().retain(index).retain(length, (0, _clone2.default)(formats)));\n    }\n  }, {\n    key: 'formatText',\n    value: function formatText(index, length) {\n      var _this3 = this;\n\n      var formats = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n      Object.keys(formats).forEach(function (format) {\n        _this3.scroll.formatAt(index, length, format, formats[format]);\n      });\n      return this.update(new _quillDelta2.default().retain(index).retain(length, (0, _clone2.default)(formats)));\n    }\n  }, {\n    key: 'getContents',\n    value: function getContents(index, length) {\n      return this.delta.slice(index, index + length);\n    }\n  }, {\n    key: 'getDelta',\n    value: function getDelta() {\n      return this.scroll.lines().reduce(function (delta, line) {\n        return delta.concat(line.delta());\n      }, new _quillDelta2.default());\n    }\n  }, {\n    key: 'getFormat',\n    value: function getFormat(index) {\n      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n      var lines = [],\n          leaves = [];\n      if (length === 0) {\n        this.scroll.path(index).forEach(function (path) {\n          var _path = _slicedToArray(path, 1),\n              blot = _path[0];\n\n          if (blot instanceof _block2.default) {\n            lines.push(blot);\n          } else if (blot instanceof _parchment2.default.Leaf) {\n            leaves.push(blot);\n          }\n        });\n      } else {\n        lines = this.scroll.lines(index, length);\n        leaves = this.scroll.descendants(_parchment2.default.Leaf, index, length);\n      }\n      var formatsArr = [lines, leaves].map(function (blots) {\n        if (blots.length === 0) return {};\n        var formats = (0, _block.bubbleFormats)(blots.shift());\n        while (Object.keys(formats).length > 0) {\n          var blot = blots.shift();\n          if (blot == null) return formats;\n          formats = combineFormats((0, _block.bubbleFormats)(blot), formats);\n        }\n        return formats;\n      });\n      return _extend2.default.apply(_extend2.default, formatsArr);\n    }\n  }, {\n    key: 'getText',\n    value: function getText(index, length) {\n      return this.getContents(index, length).filter(function (op) {\n        return typeof op.insert === 'string';\n      }).map(function (op) {\n        return op.insert;\n      }).join('');\n    }\n  }, {\n    key: 'insertEmbed',\n    value: function insertEmbed(index, embed, value) {\n      this.scroll.insertAt(index, embed, value);\n      return this.update(new _quillDelta2.default().retain(index).insert(_defineProperty({}, embed, value)));\n    }\n  }, {\n    key: 'insertText',\n    value: function insertText(index, text) {\n      var _this4 = this;\n\n      var formats = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n      text = text.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n      this.scroll.insertAt(index, text);\n      Object.keys(formats).forEach(function (format) {\n        _this4.scroll.formatAt(index, text.length, format, formats[format]);\n      });\n      return this.update(new _quillDelta2.default().retain(index).insert(text, (0, _clone2.default)(formats)));\n    }\n  }, {\n    key: 'isBlank',\n    value: function isBlank() {\n      if (this.scroll.children.length == 0) return true;\n      if (this.scroll.children.length > 1) return false;\n      var block = this.scroll.children.head;\n      if (block.statics.blotName !== _block2.default.blotName) return false;\n      if (block.children.length > 1) return false;\n      return block.children.head instanceof _break2.default;\n    }\n  }, {\n    key: 'removeFormat',\n    value: function removeFormat(index, length) {\n      var text = this.getText(index, length);\n\n      var _scroll$line3 = this.scroll.line(index + length),\n          _scroll$line4 = _slicedToArray(_scroll$line3, 2),\n          line = _scroll$line4[0],\n          offset = _scroll$line4[1];\n\n      var suffixLength = 0,\n          suffix = new _quillDelta2.default();\n      if (line != null) {\n        if (!(line instanceof _code2.default)) {\n          suffixLength = line.length() - offset;\n        } else {\n          suffixLength = line.newlineIndex(offset) - offset + 1;\n        }\n        suffix = line.delta().slice(offset, offset + suffixLength - 1).insert('\\n');\n      }\n      var contents = this.getContents(index, length + suffixLength);\n      var diff = contents.diff(new _quillDelta2.default().insert(text).concat(suffix));\n      var delta = new _quillDelta2.default().retain(index).concat(diff);\n      return this.applyDelta(delta);\n    }\n  }, {\n    key: 'update',\n    value: function update(change) {\n      var mutations = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n      var cursorIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;\n\n      var oldDelta = this.delta;\n      if (mutations.length === 1 && mutations[0].type === 'characterData' && mutations[0].target.data.match(ASCII) && _parchment2.default.find(mutations[0].target)) {\n        // Optimization for character changes\n        var textBlot = _parchment2.default.find(mutations[0].target);\n        var formats = (0, _block.bubbleFormats)(textBlot);\n        var index = textBlot.offset(this.scroll);\n        var oldValue = mutations[0].oldValue.replace(_cursor2.default.CONTENTS, '');\n        var oldText = new _quillDelta2.default().insert(oldValue);\n        var newText = new _quillDelta2.default().insert(textBlot.value());\n        var diffDelta = new _quillDelta2.default().retain(index).concat(oldText.diff(newText, cursorIndex));\n        change = diffDelta.reduce(function (delta, op) {\n          if (op.insert) {\n            return delta.insert(op.insert, formats);\n          } else {\n            return delta.push(op);\n          }\n        }, new _quillDelta2.default());\n        this.delta = oldDelta.compose(change);\n      } else {\n        this.delta = this.getDelta();\n        if (!change || !(0, _deepEqual2.default)(oldDelta.compose(change), this.delta)) {\n          change = oldDelta.diff(this.delta, cursorIndex);\n        }\n      }\n      return change;\n    }\n  }]);\n\n  return Editor;\n}();\n\nfunction combineFormats(formats, combined) {\n  return Object.keys(combined).reduce(function (merged, name) {\n    if (formats[name] == null) return merged;\n    if (combined[name] === formats[name]) {\n      merged[name] = combined[name];\n    } else if (Array.isArray(combined[name])) {\n      if (combined[name].indexOf(formats[name]) < 0) {\n        merged[name] = combined[name].concat([formats[name]]);\n      }\n    } else {\n      merged[name] = [combined[name], formats[name]];\n    }\n    return merged;\n  }, {});\n}\n\nfunction normalizeDelta(delta) {\n  return delta.reduce(function (delta, op) {\n    if (op.insert === 1) {\n      var attributes = (0, _clone2.default)(op.attributes);\n      delete attributes['image'];\n      return delta.insert({ image: op.attributes.image }, attributes);\n    }\n    if (op.attributes != null && (op.attributes.list === true || op.attributes.bullet === true)) {\n      op = (0, _clone2.default)(op);\n      if (op.attributes.list) {\n        op.attributes.list = 'ordered';\n      } else {\n        op.attributes.list = 'bullet';\n        delete op.attributes.bullet;\n      }\n    }\n    if (typeof op.insert === 'string') {\n      var text = op.insert.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n      return delta.insert(text, op.attributes);\n    }\n    return delta.push(op);\n  }, new _quillDelta2.default());\n}\n\nexports.default = Editor;\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.Range = undefined;\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\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 _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _clone = __webpack_require__(21);\n\nvar _clone2 = _interopRequireDefault(_clone);\n\nvar _deepEqual = __webpack_require__(11);\n\nvar _deepEqual2 = _interopRequireDefault(_deepEqual);\n\nvar _emitter3 = __webpack_require__(8);\n\nvar _emitter4 = _interopRequireDefault(_emitter3);\n\nvar _logger = __webpack_require__(10);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar debug = (0, _logger2.default)('quill:selection');\n\nvar Range = function Range(index) {\n  var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n  _classCallCheck(this, Range);\n\n  this.index = index;\n  this.length = length;\n};\n\nvar Selection = function () {\n  function Selection(scroll, emitter) {\n    var _this = this;\n\n    _classCallCheck(this, Selection);\n\n    this.emitter = emitter;\n    this.scroll = scroll;\n    this.composing = false;\n    this.mouseDown = false;\n    this.root = this.scroll.domNode;\n    this.cursor = _parchment2.default.create('cursor', this);\n    // savedRange is last non-null range\n    this.lastRange = this.savedRange = new Range(0, 0);\n    this.handleComposition();\n    this.handleDragging();\n    this.emitter.listenDOM('selectionchange', document, function () {\n      if (!_this.mouseDown) {\n        setTimeout(_this.update.bind(_this, _emitter4.default.sources.USER), 1);\n      }\n    });\n    this.emitter.on(_emitter4.default.events.EDITOR_CHANGE, function (type, delta) {\n      if (type === _emitter4.default.events.TEXT_CHANGE && delta.length() > 0) {\n        _this.update(_emitter4.default.sources.SILENT);\n      }\n    });\n    this.emitter.on(_emitter4.default.events.SCROLL_BEFORE_UPDATE, function () {\n      if (!_this.hasFocus()) return;\n      var native = _this.getNativeRange();\n      if (native == null) return;\n      if (native.start.node === _this.cursor.textNode) return; // cursor.restore() will handle\n      // TODO unclear if this has negative side effects\n      _this.emitter.once(_emitter4.default.events.SCROLL_UPDATE, function () {\n        try {\n          _this.setNativeRange(native.start.node, native.start.offset, native.end.node, native.end.offset);\n        } catch (ignored) {}\n      });\n    });\n    this.emitter.on(_emitter4.default.events.SCROLL_OPTIMIZE, function (mutations, context) {\n      if (context.range) {\n        var _context$range = context.range,\n            startNode = _context$range.startNode,\n            startOffset = _context$range.startOffset,\n            endNode = _context$range.endNode,\n            endOffset = _context$range.endOffset;\n\n        _this.setNativeRange(startNode, startOffset, endNode, endOffset);\n      }\n    });\n    this.update(_emitter4.default.sources.SILENT);\n  }\n\n  _createClass(Selection, [{\n    key: 'handleComposition',\n    value: function handleComposition() {\n      var _this2 = this;\n\n      this.root.addEventListener('compositionstart', function () {\n        _this2.composing = true;\n      });\n      this.root.addEventListener('compositionend', function () {\n        _this2.composing = false;\n        if (_this2.cursor.parent) {\n          var range = _this2.cursor.restore();\n          if (!range) return;\n          setTimeout(function () {\n            _this2.setNativeRange(range.startNode, range.startOffset, range.endNode, range.endOffset);\n          }, 1);\n        }\n      });\n    }\n  }, {\n    key: 'handleDragging',\n    value: function handleDragging() {\n      var _this3 = this;\n\n      this.emitter.listenDOM('mousedown', document.body, function () {\n        _this3.mouseDown = true;\n      });\n      this.emitter.listenDOM('mouseup', document.body, function () {\n        _this3.mouseDown = false;\n        _this3.update(_emitter4.default.sources.USER);\n      });\n    }\n  }, {\n    key: 'focus',\n    value: function focus() {\n      if (this.hasFocus()) return;\n      this.root.focus();\n      this.setRange(this.savedRange);\n    }\n  }, {\n    key: 'format',\n    value: function format(_format, value) {\n      if (this.scroll.whitelist != null && !this.scroll.whitelist[_format]) return;\n      this.scroll.update();\n      var nativeRange = this.getNativeRange();\n      if (nativeRange == null || !nativeRange.native.collapsed || _parchment2.default.query(_format, _parchment2.default.Scope.BLOCK)) return;\n      if (nativeRange.start.node !== this.cursor.textNode) {\n        var blot = _parchment2.default.find(nativeRange.start.node, false);\n        if (blot == null) return;\n        // TODO Give blot ability to not split\n        if (blot instanceof _parchment2.default.Leaf) {\n          var after = blot.split(nativeRange.start.offset);\n          blot.parent.insertBefore(this.cursor, after);\n        } else {\n          blot.insertBefore(this.cursor, nativeRange.start.node); // Should never happen\n        }\n        this.cursor.attach();\n      }\n      this.cursor.format(_format, value);\n      this.scroll.optimize();\n      this.setNativeRange(this.cursor.textNode, this.cursor.textNode.data.length);\n      this.update();\n    }\n  }, {\n    key: 'getBounds',\n    value: function getBounds(index) {\n      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n      var scrollLength = this.scroll.length();\n      index = Math.min(index, scrollLength - 1);\n      length = Math.min(index + length, scrollLength - 1) - index;\n      var node = void 0,\n          _scroll$leaf = this.scroll.leaf(index),\n          _scroll$leaf2 = _slicedToArray(_scroll$leaf, 2),\n          leaf = _scroll$leaf2[0],\n          offset = _scroll$leaf2[1];\n      if (leaf == null) return null;\n\n      var _leaf$position = leaf.position(offset, true);\n\n      var _leaf$position2 = _slicedToArray(_leaf$position, 2);\n\n      node = _leaf$position2[0];\n      offset = _leaf$position2[1];\n\n      var range = document.createRange();\n      if (length > 0) {\n        range.setStart(node, offset);\n\n        var _scroll$leaf3 = this.scroll.leaf(index + length);\n\n        var _scroll$leaf4 = _slicedToArray(_scroll$leaf3, 2);\n\n        leaf = _scroll$leaf4[0];\n        offset = _scroll$leaf4[1];\n\n        if (leaf == null) return null;\n\n        var _leaf$position3 = leaf.position(offset, true);\n\n        var _leaf$position4 = _slicedToArray(_leaf$position3, 2);\n\n        node = _leaf$position4[0];\n        offset = _leaf$position4[1];\n\n        range.setEnd(node, offset);\n        return range.getBoundingClientRect();\n      } else {\n        var side = 'left';\n        var rect = void 0;\n        if (node instanceof Text) {\n          if (offset < node.data.length) {\n            range.setStart(node, offset);\n            range.setEnd(node, offset + 1);\n          } else {\n            range.setStart(node, offset - 1);\n            range.setEnd(node, offset);\n            side = 'right';\n          }\n          rect = range.getBoundingClientRect();\n        } else {\n          rect = leaf.domNode.getBoundingClientRect();\n          if (offset > 0) side = 'right';\n        }\n        return {\n          bottom: rect.top + rect.height,\n          height: rect.height,\n          left: rect[side],\n          right: rect[side],\n          top: rect.top,\n          width: 0\n        };\n      }\n    }\n  }, {\n    key: 'getNativeRange',\n    value: function getNativeRange() {\n      var selection = document.getSelection();\n      if (selection == null || selection.rangeCount <= 0) return null;\n      var nativeRange = selection.getRangeAt(0);\n      if (nativeRange == null) return null;\n      var range = this.normalizeNative(nativeRange);\n      debug.info('getNativeRange', range);\n      return range;\n    }\n  }, {\n    key: 'getRange',\n    value: function getRange() {\n      var normalized = this.getNativeRange();\n      if (normalized == null) return [null, null];\n      var range = this.normalizedToRange(normalized);\n      return [range, normalized];\n    }\n  }, {\n    key: 'hasFocus',\n    value: function hasFocus() {\n      return document.activeElement === this.root;\n    }\n  }, {\n    key: 'normalizedToRange',\n    value: function normalizedToRange(range) {\n      var _this4 = this;\n\n      var positions = [[range.start.node, range.start.offset]];\n      if (!range.native.collapsed) {\n        positions.push([range.end.node, range.end.offset]);\n      }\n      var indexes = positions.map(function (position) {\n        var _position = _slicedToArray(position, 2),\n            node = _position[0],\n            offset = _position[1];\n\n        var blot = _parchment2.default.find(node, true);\n        var index = blot.offset(_this4.scroll);\n        if (offset === 0) {\n          return index;\n        } else if (blot instanceof _parchment2.default.Container) {\n          return index + blot.length();\n        } else {\n          return index + blot.index(node, offset);\n        }\n      });\n      var end = Math.min(Math.max.apply(Math, _toConsumableArray(indexes)), this.scroll.length() - 1);\n      var start = Math.min.apply(Math, [end].concat(_toConsumableArray(indexes)));\n      return new Range(start, end - start);\n    }\n  }, {\n    key: 'normalizeNative',\n    value: function normalizeNative(nativeRange) {\n      if (!contains(this.root, nativeRange.startContainer) || !nativeRange.collapsed && !contains(this.root, nativeRange.endContainer)) {\n        return null;\n      }\n      var range = {\n        start: { node: nativeRange.startContainer, offset: nativeRange.startOffset },\n        end: { node: nativeRange.endContainer, offset: nativeRange.endOffset },\n        native: nativeRange\n      };\n      [range.start, range.end].forEach(function (position) {\n        var node = position.node,\n            offset = position.offset;\n        while (!(node instanceof Text) && node.childNodes.length > 0) {\n          if (node.childNodes.length > offset) {\n            node = node.childNodes[offset];\n            offset = 0;\n          } else if (node.childNodes.length === offset) {\n            node = node.lastChild;\n            offset = node instanceof Text ? node.data.length : node.childNodes.length + 1;\n          } else {\n            break;\n          }\n        }\n        position.node = node, position.offset = offset;\n      });\n      return range;\n    }\n  }, {\n    key: 'rangeToNative',\n    value: function rangeToNative(range) {\n      var _this5 = this;\n\n      var indexes = range.collapsed ? [range.index] : [range.index, range.index + range.length];\n      var args = [];\n      var scrollLength = this.scroll.length();\n      indexes.forEach(function (index, i) {\n        index = Math.min(scrollLength - 1, index);\n        var node = void 0,\n            _scroll$leaf5 = _this5.scroll.leaf(index),\n            _scroll$leaf6 = _slicedToArray(_scroll$leaf5, 2),\n            leaf = _scroll$leaf6[0],\n            offset = _scroll$leaf6[1];\n        var _leaf$position5 = leaf.position(offset, i !== 0);\n\n        var _leaf$position6 = _slicedToArray(_leaf$position5, 2);\n\n        node = _leaf$position6[0];\n        offset = _leaf$position6[1];\n\n        args.push(node, offset);\n      });\n      if (args.length < 2) {\n        args = args.concat(args);\n      }\n      return args;\n    }\n  }, {\n    key: 'scrollIntoView',\n    value: function scrollIntoView(scrollingContainer) {\n      var range = this.lastRange;\n      if (range == null) return;\n      var bounds = this.getBounds(range.index, range.length);\n      if (bounds == null) return;\n      var limit = this.scroll.length() - 1;\n\n      var _scroll$line = this.scroll.line(Math.min(range.index, limit)),\n          _scroll$line2 = _slicedToArray(_scroll$line, 1),\n          first = _scroll$line2[0];\n\n      var last = first;\n      if (range.length > 0) {\n        var _scroll$line3 = this.scroll.line(Math.min(range.index + range.length, limit));\n\n        var _scroll$line4 = _slicedToArray(_scroll$line3, 1);\n\n        last = _scroll$line4[0];\n      }\n      if (first == null || last == null) return;\n      var scrollBounds = scrollingContainer.getBoundingClientRect();\n      if (bounds.top < scrollBounds.top) {\n        scrollingContainer.scrollTop -= scrollBounds.top - bounds.top;\n      } else if (bounds.bottom > scrollBounds.bottom) {\n        scrollingContainer.scrollTop += bounds.bottom - scrollBounds.bottom;\n      }\n    }\n  }, {\n    key: 'setNativeRange',\n    value: function setNativeRange(startNode, startOffset) {\n      var endNode = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : startNode;\n      var endOffset = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : startOffset;\n      var force = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n      debug.info('setNativeRange', startNode, startOffset, endNode, endOffset);\n      if (startNode != null && (this.root.parentNode == null || startNode.parentNode == null || endNode.parentNode == null)) {\n        return;\n      }\n      var selection = document.getSelection();\n      if (selection == null) return;\n      if (startNode != null) {\n        if (!this.hasFocus()) this.root.focus();\n        var native = (this.getNativeRange() || {}).native;\n        if (native == null || force || startNode !== native.startContainer || startOffset !== native.startOffset || endNode !== native.endContainer || endOffset !== native.endOffset) {\n\n          if (startNode.tagName == \"BR\") {\n            startOffset = [].indexOf.call(startNode.parentNode.childNodes, startNode);\n            startNode = startNode.parentNode;\n          }\n          if (endNode.tagName == \"BR\") {\n            endOffset = [].indexOf.call(endNode.parentNode.childNodes, endNode);\n            endNode = endNode.parentNode;\n          }\n          var range = document.createRange();\n          range.setStart(startNode, startOffset);\n          range.setEnd(endNode, endOffset);\n          selection.removeAllRanges();\n          selection.addRange(range);\n        }\n      } else {\n        selection.removeAllRanges();\n        this.root.blur();\n        document.body.focus(); // root.blur() not enough on IE11+Travis+SauceLabs (but not local VMs)\n      }\n    }\n  }, {\n    key: 'setRange',\n    value: function setRange(range) {\n      var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      var source = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _emitter4.default.sources.API;\n\n      if (typeof force === 'string') {\n        source = force;\n        force = false;\n      }\n      debug.info('setRange', range);\n      if (range != null) {\n        var args = this.rangeToNative(range);\n        this.setNativeRange.apply(this, _toConsumableArray(args).concat([force]));\n      } else {\n        this.setNativeRange(null);\n      }\n      this.update(source);\n    }\n  }, {\n    key: 'update',\n    value: function update() {\n      var source = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _emitter4.default.sources.USER;\n\n      var oldRange = this.lastRange;\n\n      var _getRange = this.getRange(),\n          _getRange2 = _slicedToArray(_getRange, 2),\n          lastRange = _getRange2[0],\n          nativeRange = _getRange2[1];\n\n      this.lastRange = lastRange;\n      if (this.lastRange != null) {\n        this.savedRange = this.lastRange;\n      }\n      if (!(0, _deepEqual2.default)(oldRange, this.lastRange)) {\n        var _emitter;\n\n        if (!this.composing && nativeRange != null && nativeRange.native.collapsed && nativeRange.start.node !== this.cursor.textNode) {\n          this.cursor.restore();\n        }\n        var args = [_emitter4.default.events.SELECTION_CHANGE, (0, _clone2.default)(this.lastRange), (0, _clone2.default)(oldRange), source];\n        (_emitter = this.emitter).emit.apply(_emitter, [_emitter4.default.events.EDITOR_CHANGE].concat(args));\n        if (source !== _emitter4.default.sources.SILENT) {\n          var _emitter2;\n\n          (_emitter2 = this.emitter).emit.apply(_emitter2, args);\n        }\n      }\n    }\n  }]);\n\n  return Selection;\n}();\n\nfunction contains(parent, descendant) {\n  try {\n    // Firefox inserts inaccessible nodes around video elements\n    descendant.parentNode;\n  } catch (e) {\n    return false;\n  }\n  // IE11 has bug with Text nodes\n  // https://connect.microsoft.com/IE/feedback/details/780874/node-contains-is-incorrect\n  if (descendant instanceof Text) {\n    descendant = descendant.parentNode;\n  }\n  return parent.contains(descendant);\n}\n\nexports.Range = Range;\nexports.default = Selection;\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\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 _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Break = function (_Parchment$Embed) {\n  _inherits(Break, _Parchment$Embed);\n\n  function Break() {\n    _classCallCheck(this, Break);\n\n    return _possibleConstructorReturn(this, (Break.__proto__ || Object.getPrototypeOf(Break)).apply(this, arguments));\n  }\n\n  _createClass(Break, [{\n    key: 'insertInto',\n    value: function insertInto(parent, ref) {\n      if (parent.children.length === 0) {\n        _get(Break.prototype.__proto__ || Object.getPrototypeOf(Break.prototype), 'insertInto', this).call(this, parent, ref);\n      } else {\n        this.remove();\n      }\n    }\n  }, {\n    key: 'length',\n    value: function length() {\n      return 0;\n    }\n  }, {\n    key: 'value',\n    value: function value() {\n      return '';\n    }\n  }], [{\n    key: 'value',\n    value: function value() {\n      return undefined;\n    }\n  }]);\n\n  return Break;\n}(_parchment2.default.Embed);\n\nBreak.blotName = 'break';\nBreak.tagName = 'BR';\n\nexports.default = Break;\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar linked_list_1 = __webpack_require__(44);\nvar shadow_1 = __webpack_require__(30);\nvar Registry = __webpack_require__(1);\nvar ContainerBlot = /** @class */ (function (_super) {\n    __extends(ContainerBlot, _super);\n    function ContainerBlot(domNode) {\n        var _this = _super.call(this, domNode) || this;\n        _this.build();\n        return _this;\n    }\n    ContainerBlot.prototype.appendChild = function (other) {\n        this.insertBefore(other);\n    };\n    ContainerBlot.prototype.attach = function () {\n        _super.prototype.attach.call(this);\n        this.children.forEach(function (child) {\n            child.attach();\n        });\n    };\n    ContainerBlot.prototype.build = function () {\n        var _this = this;\n        this.children = new linked_list_1.default();\n        // Need to be reversed for if DOM nodes already in order\n        [].slice\n            .call(this.domNode.childNodes)\n            .reverse()\n            .forEach(function (node) {\n            try {\n                var child = makeBlot(node);\n                _this.insertBefore(child, _this.children.head || undefined);\n            }\n            catch (err) {\n                if (err instanceof Registry.ParchmentError)\n                    return;\n                else\n                    throw err;\n            }\n        });\n    };\n    ContainerBlot.prototype.deleteAt = function (index, length) {\n        if (index === 0 && length === this.length()) {\n            return this.remove();\n        }\n        this.children.forEachAt(index, length, function (child, offset, length) {\n            child.deleteAt(offset, length);\n        });\n    };\n    ContainerBlot.prototype.descendant = function (criteria, index) {\n        var _a = this.children.find(index), child = _a[0], offset = _a[1];\n        if ((criteria.blotName == null && criteria(child)) ||\n            (criteria.blotName != null && child instanceof criteria)) {\n            return [child, offset];\n        }\n        else if (child instanceof ContainerBlot) {\n            return child.descendant(criteria, offset);\n        }\n        else {\n            return [null, -1];\n        }\n    };\n    ContainerBlot.prototype.descendants = function (criteria, index, length) {\n        if (index === void 0) { index = 0; }\n        if (length === void 0) { length = Number.MAX_VALUE; }\n        var descendants = [];\n        var lengthLeft = length;\n        this.children.forEachAt(index, length, function (child, index, length) {\n            if ((criteria.blotName == null && criteria(child)) ||\n                (criteria.blotName != null && child instanceof criteria)) {\n                descendants.push(child);\n            }\n            if (child instanceof ContainerBlot) {\n                descendants = descendants.concat(child.descendants(criteria, index, lengthLeft));\n            }\n            lengthLeft -= length;\n        });\n        return descendants;\n    };\n    ContainerBlot.prototype.detach = function () {\n        this.children.forEach(function (child) {\n            child.detach();\n        });\n        _super.prototype.detach.call(this);\n    };\n    ContainerBlot.prototype.formatAt = function (index, length, name, value) {\n        this.children.forEachAt(index, length, function (child, offset, length) {\n            child.formatAt(offset, length, name, value);\n        });\n    };\n    ContainerBlot.prototype.insertAt = function (index, value, def) {\n        var _a = this.children.find(index), child = _a[0], offset = _a[1];\n        if (child) {\n            child.insertAt(offset, value, def);\n        }\n        else {\n            var blot = def == null ? Registry.create('text', value) : Registry.create(value, def);\n            this.appendChild(blot);\n        }\n    };\n    ContainerBlot.prototype.insertBefore = function (childBlot, refBlot) {\n        if (this.statics.allowedChildren != null &&\n            !this.statics.allowedChildren.some(function (child) {\n                return childBlot instanceof child;\n            })) {\n            throw new Registry.ParchmentError(\"Cannot insert \" + childBlot.statics.blotName + \" into \" + this.statics.blotName);\n        }\n        childBlot.insertInto(this, refBlot);\n    };\n    ContainerBlot.prototype.length = function () {\n        return this.children.reduce(function (memo, child) {\n            return memo + child.length();\n        }, 0);\n    };\n    ContainerBlot.prototype.moveChildren = function (targetParent, refNode) {\n        this.children.forEach(function (child) {\n            targetParent.insertBefore(child, refNode);\n        });\n    };\n    ContainerBlot.prototype.optimize = function (context) {\n        _super.prototype.optimize.call(this, context);\n        if (this.children.length === 0) {\n            if (this.statics.defaultChild != null) {\n                var child = Registry.create(this.statics.defaultChild);\n                this.appendChild(child);\n                child.optimize(context);\n            }\n            else {\n                this.remove();\n            }\n        }\n    };\n    ContainerBlot.prototype.path = function (index, inclusive) {\n        if (inclusive === void 0) { inclusive = false; }\n        var _a = this.children.find(index, inclusive), child = _a[0], offset = _a[1];\n        var position = [[this, index]];\n        if (child instanceof ContainerBlot) {\n            return position.concat(child.path(offset, inclusive));\n        }\n        else if (child != null) {\n            position.push([child, offset]);\n        }\n        return position;\n    };\n    ContainerBlot.prototype.removeChild = function (child) {\n        this.children.remove(child);\n    };\n    ContainerBlot.prototype.replace = function (target) {\n        if (target instanceof ContainerBlot) {\n            target.moveChildren(this);\n        }\n        _super.prototype.replace.call(this, target);\n    };\n    ContainerBlot.prototype.split = function (index, force) {\n        if (force === void 0) { force = false; }\n        if (!force) {\n            if (index === 0)\n                return this;\n            if (index === this.length())\n                return this.next;\n        }\n        var after = this.clone();\n        this.parent.insertBefore(after, this.next);\n        this.children.forEachAt(index, this.length(), function (child, offset, length) {\n            child = child.split(offset, force);\n            after.appendChild(child);\n        });\n        return after;\n    };\n    ContainerBlot.prototype.unwrap = function () {\n        this.moveChildren(this.parent, this.next);\n        this.remove();\n    };\n    ContainerBlot.prototype.update = function (mutations, context) {\n        var _this = this;\n        var addedNodes = [];\n        var removedNodes = [];\n        mutations.forEach(function (mutation) {\n            if (mutation.target === _this.domNode && mutation.type === 'childList') {\n                addedNodes.push.apply(addedNodes, mutation.addedNodes);\n                removedNodes.push.apply(removedNodes, mutation.removedNodes);\n            }\n        });\n        removedNodes.forEach(function (node) {\n            // Check node has actually been removed\n            // One exception is Chrome does not immediately remove IFRAMEs\n            // from DOM but MutationRecord is correct in its reported removal\n            if (node.parentNode != null &&\n                // @ts-ignore\n                node.tagName !== 'IFRAME' &&\n                document.body.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_CONTAINED_BY) {\n                return;\n            }\n            var blot = Registry.find(node);\n            if (blot == null)\n                return;\n            if (blot.domNode.parentNode == null || blot.domNode.parentNode === _this.domNode) {\n                blot.detach();\n            }\n        });\n        addedNodes\n            .filter(function (node) {\n            return node.parentNode == _this.domNode;\n        })\n            .sort(function (a, b) {\n            if (a === b)\n                return 0;\n            if (a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING) {\n                return 1;\n            }\n            return -1;\n        })\n            .forEach(function (node) {\n            var refBlot = null;\n            if (node.nextSibling != null) {\n                refBlot = Registry.find(node.nextSibling);\n            }\n            var blot = makeBlot(node);\n            if (blot.next != refBlot || blot.next == null) {\n                if (blot.parent != null) {\n                    blot.parent.removeChild(_this);\n                }\n                _this.insertBefore(blot, refBlot || undefined);\n            }\n        });\n    };\n    return ContainerBlot;\n}(shadow_1.default));\nfunction makeBlot(node) {\n    var blot = Registry.find(node);\n    if (blot == null) {\n        try {\n            blot = Registry.create(node);\n        }\n        catch (e) {\n            blot = Registry.create(Registry.Scope.INLINE);\n            [].slice.call(node.childNodes).forEach(function (child) {\n                // @ts-ignore\n                blot.domNode.appendChild(child);\n            });\n            if (node.parentNode) {\n                node.parentNode.replaceChild(blot.domNode, node);\n            }\n            blot.attach();\n        }\n    }\n    return blot;\n}\nexports.default = ContainerBlot;\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar attributor_1 = __webpack_require__(12);\nvar store_1 = __webpack_require__(31);\nvar container_1 = __webpack_require__(17);\nvar Registry = __webpack_require__(1);\nvar FormatBlot = /** @class */ (function (_super) {\n    __extends(FormatBlot, _super);\n    function FormatBlot(domNode) {\n        var _this = _super.call(this, domNode) || this;\n        _this.attributes = new store_1.default(_this.domNode);\n        return _this;\n    }\n    FormatBlot.formats = function (domNode) {\n        if (typeof this.tagName === 'string') {\n            return true;\n        }\n        else if (Array.isArray(this.tagName)) {\n            return domNode.tagName.toLowerCase();\n        }\n        return undefined;\n    };\n    FormatBlot.prototype.format = function (name, value) {\n        var format = Registry.query(name);\n        if (format instanceof attributor_1.default) {\n            this.attributes.attribute(format, value);\n        }\n        else if (value) {\n            if (format != null && (name !== this.statics.blotName || this.formats()[name] !== value)) {\n                this.replaceWith(name, value);\n            }\n        }\n    };\n    FormatBlot.prototype.formats = function () {\n        var formats = this.attributes.values();\n        var format = this.statics.formats(this.domNode);\n        if (format != null) {\n            formats[this.statics.blotName] = format;\n        }\n        return formats;\n    };\n    FormatBlot.prototype.replaceWith = function (name, value) {\n        var replacement = _super.prototype.replaceWith.call(this, name, value);\n        this.attributes.copy(replacement);\n        return replacement;\n    };\n    FormatBlot.prototype.update = function (mutations, context) {\n        var _this = this;\n        _super.prototype.update.call(this, mutations, context);\n        if (mutations.some(function (mutation) {\n            return mutation.target === _this.domNode && mutation.type === 'attributes';\n        })) {\n            this.attributes.build();\n        }\n    };\n    FormatBlot.prototype.wrap = function (name, value) {\n        var wrapper = _super.prototype.wrap.call(this, name, value);\n        if (wrapper instanceof FormatBlot && wrapper.statics.scope === this.statics.scope) {\n            this.attributes.move(wrapper);\n        }\n        return wrapper;\n    };\n    return FormatBlot;\n}(container_1.default));\nexports.default = FormatBlot;\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar shadow_1 = __webpack_require__(30);\nvar Registry = __webpack_require__(1);\nvar LeafBlot = /** @class */ (function (_super) {\n    __extends(LeafBlot, _super);\n    function LeafBlot() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    LeafBlot.value = function (domNode) {\n        return true;\n    };\n    LeafBlot.prototype.index = function (node, offset) {\n        if (this.domNode === node ||\n            this.domNode.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_CONTAINED_BY) {\n            return Math.min(offset, 1);\n        }\n        return -1;\n    };\n    LeafBlot.prototype.position = function (index, inclusive) {\n        var offset = [].indexOf.call(this.parent.domNode.childNodes, this.domNode);\n        if (index > 0)\n            offset += 1;\n        return [this.parent.domNode, offset];\n    };\n    LeafBlot.prototype.value = function () {\n        var _a;\n        return _a = {}, _a[this.statics.blotName] = this.statics.value(this.domNode) || true, _a;\n    };\n    LeafBlot.scope = Registry.Scope.INLINE_BLOT;\n    return LeafBlot;\n}(shadow_1.default));\nexports.default = LeafBlot;\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar equal = __webpack_require__(11);\nvar extend = __webpack_require__(3);\n\n\nvar lib = {\n  attributes: {\n    compose: function (a, b, keepNull) {\n      if (typeof a !== 'object') a = {};\n      if (typeof b !== 'object') b = {};\n      var attributes = extend(true, {}, b);\n      if (!keepNull) {\n        attributes = Object.keys(attributes).reduce(function (copy, key) {\n          if (attributes[key] != null) {\n            copy[key] = attributes[key];\n          }\n          return copy;\n        }, {});\n      }\n      for (var key in a) {\n        if (a[key] !== undefined && b[key] === undefined) {\n          attributes[key] = a[key];\n        }\n      }\n      return Object.keys(attributes).length > 0 ? attributes : undefined;\n    },\n\n    diff: function(a, b) {\n      if (typeof a !== 'object') a = {};\n      if (typeof b !== 'object') b = {};\n      var attributes = Object.keys(a).concat(Object.keys(b)).reduce(function (attributes, key) {\n        if (!equal(a[key], b[key])) {\n          attributes[key] = b[key] === undefined ? null : b[key];\n        }\n        return attributes;\n      }, {});\n      return Object.keys(attributes).length > 0 ? attributes : undefined;\n    },\n\n    transform: function (a, b, priority) {\n      if (typeof a !== 'object') return b;\n      if (typeof b !== 'object') return undefined;\n      if (!priority) return b;  // b simply overwrites us without priority\n      var attributes = Object.keys(b).reduce(function (attributes, key) {\n        if (a[key] === undefined) attributes[key] = b[key];  // null is a valid value\n        return attributes;\n      }, {});\n      return Object.keys(attributes).length > 0 ? attributes : undefined;\n    }\n  },\n\n  iterator: function (ops) {\n    return new Iterator(ops);\n  },\n\n  length: function (op) {\n    if (typeof op['delete'] === 'number') {\n      return op['delete'];\n    } else if (typeof op.retain === 'number') {\n      return op.retain;\n    } else {\n      return typeof op.insert === 'string' ? op.insert.length : 1;\n    }\n  }\n};\n\n\nfunction Iterator(ops) {\n  this.ops = ops;\n  this.index = 0;\n  this.offset = 0;\n};\n\nIterator.prototype.hasNext = function () {\n  return this.peekLength() < Infinity;\n};\n\nIterator.prototype.next = function (length) {\n  if (!length) length = Infinity;\n  var nextOp = this.ops[this.index];\n  if (nextOp) {\n    var offset = this.offset;\n    var opLength = lib.length(nextOp)\n    if (length >= opLength - offset) {\n      length = opLength - offset;\n      this.index += 1;\n      this.offset = 0;\n    } else {\n      this.offset += length;\n    }\n    if (typeof nextOp['delete'] === 'number') {\n      return { 'delete': length };\n    } else {\n      var retOp = {};\n      if (nextOp.attributes) {\n        retOp.attributes = nextOp.attributes;\n      }\n      if (typeof nextOp.retain === 'number') {\n        retOp.retain = length;\n      } else if (typeof nextOp.insert === 'string') {\n        retOp.insert = nextOp.insert.substr(offset, length);\n      } else {\n        // offset should === 0, length should === 1\n        retOp.insert = nextOp.insert;\n      }\n      return retOp;\n    }\n  } else {\n    return { retain: Infinity };\n  }\n};\n\nIterator.prototype.peek = function () {\n  return this.ops[this.index];\n};\n\nIterator.prototype.peekLength = function () {\n  if (this.ops[this.index]) {\n    // Should never return 0 if our index is being managed correctly\n    return lib.length(this.ops[this.index]) - this.offset;\n  } else {\n    return Infinity;\n  }\n};\n\nIterator.prototype.peekType = function () {\n  if (this.ops[this.index]) {\n    if (typeof this.ops[this.index]['delete'] === 'number') {\n      return 'delete';\n    } else if (typeof this.ops[this.index].retain === 'number') {\n      return 'retain';\n    } else {\n      return 'insert';\n    }\n  }\n  return 'retain';\n};\n\nIterator.prototype.rest = function () {\n  if (!this.hasNext()) {\n    return [];\n  } else if (this.offset === 0) {\n    return this.ops.slice(this.index);\n  } else {\n    var offset = this.offset;\n    var index = this.index;\n    var next = this.next();\n    var rest = this.ops.slice(this.index);\n    this.offset = offset;\n    this.index = index;\n    return [next].concat(rest);\n  }\n};\n\n\nmodule.exports = lib;\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports) {\n\nvar clone = (function() {\n'use strict';\n\nfunction _instanceof(obj, type) {\n  return type != null && obj instanceof type;\n}\n\nvar nativeMap;\ntry {\n  nativeMap = Map;\n} catch(_) {\n  // maybe a reference error because no `Map`. Give it a dummy value that no\n  // value will ever be an instanceof.\n  nativeMap = function() {};\n}\n\nvar nativeSet;\ntry {\n  nativeSet = Set;\n} catch(_) {\n  nativeSet = function() {};\n}\n\nvar nativePromise;\ntry {\n  nativePromise = Promise;\n} catch(_) {\n  nativePromise = function() {};\n}\n\n/**\n * Clones (copies) an Object using deep copying.\n *\n * This function supports circular references by default, but if you are certain\n * there are no circular references in your object, you can save some CPU time\n * by calling clone(obj, false).\n *\n * Caution: if `circular` is false and `parent` contains circular references,\n * your program may enter an infinite loop and crash.\n *\n * @param `parent` - the object to be cloned\n * @param `circular` - set to true if the object to be cloned may contain\n *    circular references. (optional - true by default)\n * @param `depth` - set to a number if the object is only to be cloned to\n *    a particular depth. (optional - defaults to Infinity)\n * @param `prototype` - sets the prototype to be used when cloning an object.\n *    (optional - defaults to parent prototype).\n * @param `includeNonEnumerable` - set to true if the non-enumerable properties\n *    should be cloned as well. Non-enumerable properties on the prototype\n *    chain will be ignored. (optional - false by default)\n*/\nfunction clone(parent, circular, depth, prototype, includeNonEnumerable) {\n  if (typeof circular === 'object') {\n    depth = circular.depth;\n    prototype = circular.prototype;\n    includeNonEnumerable = circular.includeNonEnumerable;\n    circular = circular.circular;\n  }\n  // maintain two arrays for circular references, where corresponding parents\n  // and children have the same index\n  var allParents = [];\n  var allChildren = [];\n\n  var useBuffer = typeof Buffer != 'undefined';\n\n  if (typeof circular == 'undefined')\n    circular = true;\n\n  if (typeof depth == 'undefined')\n    depth = Infinity;\n\n  // recurse this function so we don't reset allParents and allChildren\n  function _clone(parent, depth) {\n    // cloning null always returns null\n    if (parent === null)\n      return null;\n\n    if (depth === 0)\n      return parent;\n\n    var child;\n    var proto;\n    if (typeof parent != 'object') {\n      return parent;\n    }\n\n    if (_instanceof(parent, nativeMap)) {\n      child = new nativeMap();\n    } else if (_instanceof(parent, nativeSet)) {\n      child = new nativeSet();\n    } else if (_instanceof(parent, nativePromise)) {\n      child = new nativePromise(function (resolve, reject) {\n        parent.then(function(value) {\n          resolve(_clone(value, depth - 1));\n        }, function(err) {\n          reject(_clone(err, depth - 1));\n        });\n      });\n    } else if (clone.__isArray(parent)) {\n      child = [];\n    } else if (clone.__isRegExp(parent)) {\n      child = new RegExp(parent.source, __getRegExpFlags(parent));\n      if (parent.lastIndex) child.lastIndex = parent.lastIndex;\n    } else if (clone.__isDate(parent)) {\n      child = new Date(parent.getTime());\n    } else if (useBuffer && Buffer.isBuffer(parent)) {\n      if (Buffer.allocUnsafe) {\n        // Node.js >= 4.5.0\n        child = Buffer.allocUnsafe(parent.length);\n      } else {\n        // Older Node.js versions\n        child = new Buffer(parent.length);\n      }\n      parent.copy(child);\n      return child;\n    } else if (_instanceof(parent, Error)) {\n      child = Object.create(parent);\n    } else {\n      if (typeof prototype == 'undefined') {\n        proto = Object.getPrototypeOf(parent);\n        child = Object.create(proto);\n      }\n      else {\n        child = Object.create(prototype);\n        proto = prototype;\n      }\n    }\n\n    if (circular) {\n      var index = allParents.indexOf(parent);\n\n      if (index != -1) {\n        return allChildren[index];\n      }\n      allParents.push(parent);\n      allChildren.push(child);\n    }\n\n    if (_instanceof(parent, nativeMap)) {\n      parent.forEach(function(value, key) {\n        var keyChild = _clone(key, depth - 1);\n        var valueChild = _clone(value, depth - 1);\n        child.set(keyChild, valueChild);\n      });\n    }\n    if (_instanceof(parent, nativeSet)) {\n      parent.forEach(function(value) {\n        var entryChild = _clone(value, depth - 1);\n        child.add(entryChild);\n      });\n    }\n\n    for (var i in parent) {\n      var attrs;\n      if (proto) {\n        attrs = Object.getOwnPropertyDescriptor(proto, i);\n      }\n\n      if (attrs && attrs.set == null) {\n        continue;\n      }\n      child[i] = _clone(parent[i], depth - 1);\n    }\n\n    if (Object.getOwnPropertySymbols) {\n      var symbols = Object.getOwnPropertySymbols(parent);\n      for (var i = 0; i < symbols.length; i++) {\n        // Don't need to worry about cloning a symbol because it is a primitive,\n        // like a number or string.\n        var symbol = symbols[i];\n        var descriptor = Object.getOwnPropertyDescriptor(parent, symbol);\n        if (descriptor && !descriptor.enumerable && !includeNonEnumerable) {\n          continue;\n        }\n        child[symbol] = _clone(parent[symbol], depth - 1);\n        if (!descriptor.enumerable) {\n          Object.defineProperty(child, symbol, {\n            enumerable: false\n          });\n        }\n      }\n    }\n\n    if (includeNonEnumerable) {\n      var allPropertyNames = Object.getOwnPropertyNames(parent);\n      for (var i = 0; i < allPropertyNames.length; i++) {\n        var propertyName = allPropertyNames[i];\n        var descriptor = Object.getOwnPropertyDescriptor(parent, propertyName);\n        if (descriptor && descriptor.enumerable) {\n          continue;\n        }\n        child[propertyName] = _clone(parent[propertyName], depth - 1);\n        Object.defineProperty(child, propertyName, {\n          enumerable: false\n        });\n      }\n    }\n\n    return child;\n  }\n\n  return _clone(parent, depth);\n}\n\n/**\n * Simple flat clone using prototype, accepts only objects, usefull for property\n * override on FLAT configuration object (no nested props).\n *\n * USE WITH CAUTION! This may not behave as you wish if you do not know how this\n * works.\n */\nclone.clonePrototype = function clonePrototype(parent) {\n  if (parent === null)\n    return null;\n\n  var c = function () {};\n  c.prototype = parent;\n  return new c();\n};\n\n// private utility functions\n\nfunction __objToStr(o) {\n  return Object.prototype.toString.call(o);\n}\nclone.__objToStr = __objToStr;\n\nfunction __isDate(o) {\n  return typeof o === 'object' && __objToStr(o) === '[object Date]';\n}\nclone.__isDate = __isDate;\n\nfunction __isArray(o) {\n  return typeof o === 'object' && __objToStr(o) === '[object Array]';\n}\nclone.__isArray = __isArray;\n\nfunction __isRegExp(o) {\n  return typeof o === 'object' && __objToStr(o) === '[object RegExp]';\n}\nclone.__isRegExp = __isRegExp;\n\nfunction __getRegExpFlags(re) {\n  var flags = '';\n  if (re.global) flags += 'g';\n  if (re.ignoreCase) flags += 'i';\n  if (re.multiline) flags += 'm';\n  return flags;\n}\nclone.__getRegExpFlags = __getRegExpFlags;\n\nreturn clone;\n})();\n\nif (typeof module === 'object' && module.exports) {\n  module.exports = clone;\n}\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\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 _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _emitter = __webpack_require__(8);\n\nvar _emitter2 = _interopRequireDefault(_emitter);\n\nvar _block = __webpack_require__(4);\n\nvar _block2 = _interopRequireDefault(_block);\n\nvar _break = __webpack_require__(16);\n\nvar _break2 = _interopRequireDefault(_break);\n\nvar _code = __webpack_require__(13);\n\nvar _code2 = _interopRequireDefault(_code);\n\nvar _container = __webpack_require__(25);\n\nvar _container2 = _interopRequireDefault(_container);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction isLine(blot) {\n  return blot instanceof _block2.default || blot instanceof _block.BlockEmbed;\n}\n\nvar Scroll = function (_Parchment$Scroll) {\n  _inherits(Scroll, _Parchment$Scroll);\n\n  function Scroll(domNode, config) {\n    _classCallCheck(this, Scroll);\n\n    var _this = _possibleConstructorReturn(this, (Scroll.__proto__ || Object.getPrototypeOf(Scroll)).call(this, domNode));\n\n    _this.emitter = config.emitter;\n    if (Array.isArray(config.whitelist)) {\n      _this.whitelist = config.whitelist.reduce(function (whitelist, format) {\n        whitelist[format] = true;\n        return whitelist;\n      }, {});\n    }\n    // Some reason fixes composition issues with character languages in Windows/Chrome, Safari\n    _this.domNode.addEventListener('DOMNodeInserted', function () {});\n    _this.optimize();\n    _this.enable();\n    return _this;\n  }\n\n  _createClass(Scroll, [{\n    key: 'batchStart',\n    value: function batchStart() {\n      this.batch = true;\n    }\n  }, {\n    key: 'batchEnd',\n    value: function batchEnd() {\n      this.batch = false;\n      this.optimize();\n    }\n  }, {\n    key: 'deleteAt',\n    value: function deleteAt(index, length) {\n      var _line = this.line(index),\n          _line2 = _slicedToArray(_line, 2),\n          first = _line2[0],\n          offset = _line2[1];\n\n      var _line3 = this.line(index + length),\n          _line4 = _slicedToArray(_line3, 1),\n          last = _line4[0];\n\n      _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'deleteAt', this).call(this, index, length);\n      if (last != null && first !== last && offset > 0) {\n        if (first instanceof _block.BlockEmbed || last instanceof _block.BlockEmbed) {\n          this.optimize();\n          return;\n        }\n        if (first instanceof _code2.default) {\n          var newlineIndex = first.newlineIndex(first.length(), true);\n          if (newlineIndex > -1) {\n            first = first.split(newlineIndex + 1);\n            if (first === last) {\n              this.optimize();\n              return;\n            }\n          }\n        } else if (last instanceof _code2.default) {\n          var _newlineIndex = last.newlineIndex(0);\n          if (_newlineIndex > -1) {\n            last.split(_newlineIndex + 1);\n          }\n        }\n        var ref = last.children.head instanceof _break2.default ? null : last.children.head;\n        first.moveChildren(last, ref);\n        first.remove();\n      }\n      this.optimize();\n    }\n  }, {\n    key: 'enable',\n    value: function enable() {\n      var enabled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n      this.domNode.setAttribute('contenteditable', enabled);\n    }\n  }, {\n    key: 'formatAt',\n    value: function formatAt(index, length, format, value) {\n      if (this.whitelist != null && !this.whitelist[format]) return;\n      _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'formatAt', this).call(this, index, length, format, value);\n      this.optimize();\n    }\n  }, {\n    key: 'insertAt',\n    value: function insertAt(index, value, def) {\n      if (def != null && this.whitelist != null && !this.whitelist[value]) return;\n      if (index >= this.length()) {\n        if (def == null || _parchment2.default.query(value, _parchment2.default.Scope.BLOCK) == null) {\n          var blot = _parchment2.default.create(this.statics.defaultChild);\n          this.appendChild(blot);\n          if (def == null && value.endsWith('\\n')) {\n            value = value.slice(0, -1);\n          }\n          blot.insertAt(0, value, def);\n        } else {\n          var embed = _parchment2.default.create(value, def);\n          this.appendChild(embed);\n        }\n      } else {\n        _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'insertAt', this).call(this, index, value, def);\n      }\n      this.optimize();\n    }\n  }, {\n    key: 'insertBefore',\n    value: function insertBefore(blot, ref) {\n      if (blot.statics.scope === _parchment2.default.Scope.INLINE_BLOT) {\n        var wrapper = _parchment2.default.create(this.statics.defaultChild);\n        wrapper.appendChild(blot);\n        blot = wrapper;\n      }\n      _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'insertBefore', this).call(this, blot, ref);\n    }\n  }, {\n    key: 'leaf',\n    value: function leaf(index) {\n      return this.path(index).pop() || [null, -1];\n    }\n  }, {\n    key: 'line',\n    value: function line(index) {\n      if (index === this.length()) {\n        return this.line(index - 1);\n      }\n      return this.descendant(isLine, index);\n    }\n  }, {\n    key: 'lines',\n    value: function lines() {\n      var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Number.MAX_VALUE;\n\n      var getLines = function getLines(blot, index, length) {\n        var lines = [],\n            lengthLeft = length;\n        blot.children.forEachAt(index, length, function (child, index, length) {\n          if (isLine(child)) {\n            lines.push(child);\n          } else if (child instanceof _parchment2.default.Container) {\n            lines = lines.concat(getLines(child, index, lengthLeft));\n          }\n          lengthLeft -= length;\n        });\n        return lines;\n      };\n      return getLines(this, index, length);\n    }\n  }, {\n    key: 'optimize',\n    value: function optimize() {\n      var mutations = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n      var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n      if (this.batch === true) return;\n      _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'optimize', this).call(this, mutations, context);\n      if (mutations.length > 0) {\n        this.emitter.emit(_emitter2.default.events.SCROLL_OPTIMIZE, mutations, context);\n      }\n    }\n  }, {\n    key: 'path',\n    value: function path(index) {\n      return _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'path', this).call(this, index).slice(1); // Exclude self\n    }\n  }, {\n    key: 'update',\n    value: function update(mutations) {\n      if (this.batch === true) return;\n      var source = _emitter2.default.sources.USER;\n      if (typeof mutations === 'string') {\n        source = mutations;\n      }\n      if (!Array.isArray(mutations)) {\n        mutations = this.observer.takeRecords();\n      }\n      if (mutations.length > 0) {\n        this.emitter.emit(_emitter2.default.events.SCROLL_BEFORE_UPDATE, source, mutations);\n      }\n      _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'update', this).call(this, mutations.concat([])); // pass copy\n      if (mutations.length > 0) {\n        this.emitter.emit(_emitter2.default.events.SCROLL_UPDATE, source, mutations);\n      }\n    }\n  }]);\n\n  return Scroll;\n}(_parchment2.default.Scroll);\n\nScroll.blotName = 'scroll';\nScroll.className = 'ql-editor';\nScroll.tagName = 'DIV';\nScroll.defaultChild = 'block';\nScroll.allowedChildren = [_block2.default, _block.BlockEmbed, _container2.default];\n\nexports.default = Scroll;\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.SHORTKEY = exports.default = undefined;\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\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\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 _clone = __webpack_require__(21);\n\nvar _clone2 = _interopRequireDefault(_clone);\n\nvar _deepEqual = __webpack_require__(11);\n\nvar _deepEqual2 = _interopRequireDefault(_deepEqual);\n\nvar _extend = __webpack_require__(3);\n\nvar _extend2 = _interopRequireDefault(_extend);\n\nvar _quillDelta = __webpack_require__(2);\n\nvar _quillDelta2 = _interopRequireDefault(_quillDelta);\n\nvar _op = __webpack_require__(20);\n\nvar _op2 = _interopRequireDefault(_op);\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _quill = __webpack_require__(5);\n\nvar _quill2 = _interopRequireDefault(_quill);\n\nvar _logger = __webpack_require__(10);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _module = __webpack_require__(9);\n\nvar _module2 = _interopRequireDefault(_module);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar debug = (0, _logger2.default)('quill:keyboard');\n\nvar SHORTKEY = /Mac/i.test(navigator.platform) ? 'metaKey' : 'ctrlKey';\n\nvar Keyboard = function (_Module) {\n  _inherits(Keyboard, _Module);\n\n  _createClass(Keyboard, null, [{\n    key: 'match',\n    value: function match(evt, binding) {\n      binding = normalize(binding);\n      if (['altKey', 'ctrlKey', 'metaKey', 'shiftKey'].some(function (key) {\n        return !!binding[key] !== evt[key] && binding[key] !== null;\n      })) {\n        return false;\n      }\n      return binding.key === (evt.which || evt.keyCode);\n    }\n  }]);\n\n  function Keyboard(quill, options) {\n    _classCallCheck(this, Keyboard);\n\n    var _this = _possibleConstructorReturn(this, (Keyboard.__proto__ || Object.getPrototypeOf(Keyboard)).call(this, quill, options));\n\n    _this.bindings = {};\n    Object.keys(_this.options.bindings).forEach(function (name) {\n      if (name === 'list autofill' && quill.scroll.whitelist != null && !quill.scroll.whitelist['list']) {\n        return;\n      }\n      if (_this.options.bindings[name]) {\n        _this.addBinding(_this.options.bindings[name]);\n      }\n    });\n    _this.addBinding({ key: Keyboard.keys.ENTER, shiftKey: null }, handleEnter);\n    _this.addBinding({ key: Keyboard.keys.ENTER, metaKey: null, ctrlKey: null, altKey: null }, function () {});\n    if (/Firefox/i.test(navigator.userAgent)) {\n      // Need to handle delete and backspace for Firefox in the general case #1171\n      _this.addBinding({ key: Keyboard.keys.BACKSPACE }, { collapsed: true }, handleBackspace);\n      _this.addBinding({ key: Keyboard.keys.DELETE }, { collapsed: true }, handleDelete);\n    } else {\n      _this.addBinding({ key: Keyboard.keys.BACKSPACE }, { collapsed: true, prefix: /^.?$/ }, handleBackspace);\n      _this.addBinding({ key: Keyboard.keys.DELETE }, { collapsed: true, suffix: /^.?$/ }, handleDelete);\n    }\n    _this.addBinding({ key: Keyboard.keys.BACKSPACE }, { collapsed: false }, handleDeleteRange);\n    _this.addBinding({ key: Keyboard.keys.DELETE }, { collapsed: false }, handleDeleteRange);\n    _this.addBinding({ key: Keyboard.keys.BACKSPACE, altKey: null, ctrlKey: null, metaKey: null, shiftKey: null }, { collapsed: true, offset: 0 }, handleBackspace);\n    _this.listen();\n    return _this;\n  }\n\n  _createClass(Keyboard, [{\n    key: 'addBinding',\n    value: function addBinding(key) {\n      var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var handler = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n      var binding = normalize(key);\n      if (binding == null || binding.key == null) {\n        return debug.warn('Attempted to add invalid keyboard binding', binding);\n      }\n      if (typeof context === 'function') {\n        context = { handler: context };\n      }\n      if (typeof handler === 'function') {\n        handler = { handler: handler };\n      }\n      binding = (0, _extend2.default)(binding, context, handler);\n      this.bindings[binding.key] = this.bindings[binding.key] || [];\n      this.bindings[binding.key].push(binding);\n    }\n  }, {\n    key: 'listen',\n    value: function listen() {\n      var _this2 = this;\n\n      this.quill.root.addEventListener('keydown', function (evt) {\n        if (evt.defaultPrevented) return;\n        var which = evt.which || evt.keyCode;\n        var bindings = (_this2.bindings[which] || []).filter(function (binding) {\n          return Keyboard.match(evt, binding);\n        });\n        if (bindings.length === 0) return;\n        var range = _this2.quill.getSelection();\n        if (range == null || !_this2.quill.hasFocus()) return;\n\n        var _quill$getLine = _this2.quill.getLine(range.index),\n            _quill$getLine2 = _slicedToArray(_quill$getLine, 2),\n            line = _quill$getLine2[0],\n            offset = _quill$getLine2[1];\n\n        var _quill$getLeaf = _this2.quill.getLeaf(range.index),\n            _quill$getLeaf2 = _slicedToArray(_quill$getLeaf, 2),\n            leafStart = _quill$getLeaf2[0],\n            offsetStart = _quill$getLeaf2[1];\n\n        var _ref = range.length === 0 ? [leafStart, offsetStart] : _this2.quill.getLeaf(range.index + range.length),\n            _ref2 = _slicedToArray(_ref, 2),\n            leafEnd = _ref2[0],\n            offsetEnd = _ref2[1];\n\n        var prefixText = leafStart instanceof _parchment2.default.Text ? leafStart.value().slice(0, offsetStart) : '';\n        var suffixText = leafEnd instanceof _parchment2.default.Text ? leafEnd.value().slice(offsetEnd) : '';\n        var curContext = {\n          collapsed: range.length === 0,\n          empty: range.length === 0 && line.length() <= 1,\n          format: _this2.quill.getFormat(range),\n          offset: offset,\n          prefix: prefixText,\n          suffix: suffixText\n        };\n        var prevented = bindings.some(function (binding) {\n          if (binding.collapsed != null && binding.collapsed !== curContext.collapsed) return false;\n          if (binding.empty != null && binding.empty !== curContext.empty) return false;\n          if (binding.offset != null && binding.offset !== curContext.offset) return false;\n          if (Array.isArray(binding.format)) {\n            // any format is present\n            if (binding.format.every(function (name) {\n              return curContext.format[name] == null;\n            })) {\n              return false;\n            }\n          } else if (_typeof(binding.format) === 'object') {\n            // all formats must match\n            if (!Object.keys(binding.format).every(function (name) {\n              if (binding.format[name] === true) return curContext.format[name] != null;\n              if (binding.format[name] === false) return curContext.format[name] == null;\n              return (0, _deepEqual2.default)(binding.format[name], curContext.format[name]);\n            })) {\n              return false;\n            }\n          }\n          if (binding.prefix != null && !binding.prefix.test(curContext.prefix)) return false;\n          if (binding.suffix != null && !binding.suffix.test(curContext.suffix)) return false;\n          return binding.handler.call(_this2, range, curContext) !== true;\n        });\n        if (prevented) {\n          evt.preventDefault();\n        }\n      });\n    }\n  }]);\n\n  return Keyboard;\n}(_module2.default);\n\nKeyboard.keys = {\n  BACKSPACE: 8,\n  TAB: 9,\n  ENTER: 13,\n  ESCAPE: 27,\n  LEFT: 37,\n  UP: 38,\n  RIGHT: 39,\n  DOWN: 40,\n  DELETE: 46\n};\n\nKeyboard.DEFAULTS = {\n  bindings: {\n    'bold': makeFormatHandler('bold'),\n    'italic': makeFormatHandler('italic'),\n    'underline': makeFormatHandler('underline'),\n    'indent': {\n      // highlight tab or tab at beginning of list, indent or blockquote\n      key: Keyboard.keys.TAB,\n      format: ['blockquote', 'indent', 'list'],\n      handler: function handler(range, context) {\n        if (context.collapsed && context.offset !== 0) return true;\n        this.quill.format('indent', '+1', _quill2.default.sources.USER);\n      }\n    },\n    'outdent': {\n      key: Keyboard.keys.TAB,\n      shiftKey: true,\n      format: ['blockquote', 'indent', 'list'],\n      // highlight tab or tab at beginning of list, indent or blockquote\n      handler: function handler(range, context) {\n        if (context.collapsed && context.offset !== 0) return true;\n        this.quill.format('indent', '-1', _quill2.default.sources.USER);\n      }\n    },\n    'outdent backspace': {\n      key: Keyboard.keys.BACKSPACE,\n      collapsed: true,\n      shiftKey: null,\n      metaKey: null,\n      ctrlKey: null,\n      altKey: null,\n      format: ['indent', 'list'],\n      offset: 0,\n      handler: function handler(range, context) {\n        if (context.format.indent != null) {\n          this.quill.format('indent', '-1', _quill2.default.sources.USER);\n        } else if (context.format.list != null) {\n          this.quill.format('list', false, _quill2.default.sources.USER);\n        }\n      }\n    },\n    'indent code-block': makeCodeBlockHandler(true),\n    'outdent code-block': makeCodeBlockHandler(false),\n    'remove tab': {\n      key: Keyboard.keys.TAB,\n      shiftKey: true,\n      collapsed: true,\n      prefix: /\\t$/,\n      handler: function handler(range) {\n        this.quill.deleteText(range.index - 1, 1, _quill2.default.sources.USER);\n      }\n    },\n    'tab': {\n      key: Keyboard.keys.TAB,\n      handler: function handler(range) {\n        this.quill.history.cutoff();\n        var delta = new _quillDelta2.default().retain(range.index).delete(range.length).insert('\\t');\n        this.quill.updateContents(delta, _quill2.default.sources.USER);\n        this.quill.history.cutoff();\n        this.quill.setSelection(range.index + 1, _quill2.default.sources.SILENT);\n      }\n    },\n    'list empty enter': {\n      key: Keyboard.keys.ENTER,\n      collapsed: true,\n      format: ['list'],\n      empty: true,\n      handler: function handler(range, context) {\n        this.quill.format('list', false, _quill2.default.sources.USER);\n        if (context.format.indent) {\n          this.quill.format('indent', false, _quill2.default.sources.USER);\n        }\n      }\n    },\n    'checklist enter': {\n      key: Keyboard.keys.ENTER,\n      collapsed: true,\n      format: { list: 'checked' },\n      handler: function handler(range) {\n        var _quill$getLine3 = this.quill.getLine(range.index),\n            _quill$getLine4 = _slicedToArray(_quill$getLine3, 2),\n            line = _quill$getLine4[0],\n            offset = _quill$getLine4[1];\n\n        var formats = (0, _extend2.default)({}, line.formats(), { list: 'checked' });\n        var delta = new _quillDelta2.default().retain(range.index).insert('\\n', formats).retain(line.length() - offset - 1).retain(1, { list: 'unchecked' });\n        this.quill.updateContents(delta, _quill2.default.sources.USER);\n        this.quill.setSelection(range.index + 1, _quill2.default.sources.SILENT);\n        this.quill.scrollIntoView();\n      }\n    },\n    'header enter': {\n      key: Keyboard.keys.ENTER,\n      collapsed: true,\n      format: ['header'],\n      suffix: /^$/,\n      handler: function handler(range, context) {\n        var _quill$getLine5 = this.quill.getLine(range.index),\n            _quill$getLine6 = _slicedToArray(_quill$getLine5, 2),\n            line = _quill$getLine6[0],\n            offset = _quill$getLine6[1];\n\n        var delta = new _quillDelta2.default().retain(range.index).insert('\\n', context.format).retain(line.length() - offset - 1).retain(1, { header: null });\n        this.quill.updateContents(delta, _quill2.default.sources.USER);\n        this.quill.setSelection(range.index + 1, _quill2.default.sources.SILENT);\n        this.quill.scrollIntoView();\n      }\n    },\n    'list autofill': {\n      key: ' ',\n      collapsed: true,\n      format: { list: false },\n      prefix: /^\\s*?(\\d+\\.|-|\\*|\\[ ?\\]|\\[x\\])$/,\n      handler: function handler(range, context) {\n        var length = context.prefix.length;\n\n        var _quill$getLine7 = this.quill.getLine(range.index),\n            _quill$getLine8 = _slicedToArray(_quill$getLine7, 2),\n            line = _quill$getLine8[0],\n            offset = _quill$getLine8[1];\n\n        if (offset > length) return true;\n        var value = void 0;\n        switch (context.prefix.trim()) {\n          case '[]':case '[ ]':\n            value = 'unchecked';\n            break;\n          case '[x]':\n            value = 'checked';\n            break;\n          case '-':case '*':\n            value = 'bullet';\n            break;\n          default:\n            value = 'ordered';\n        }\n        this.quill.insertText(range.index, ' ', _quill2.default.sources.USER);\n        this.quill.history.cutoff();\n        var delta = new _quillDelta2.default().retain(range.index - offset).delete(length + 1).retain(line.length() - 2 - offset).retain(1, { list: value });\n        this.quill.updateContents(delta, _quill2.default.sources.USER);\n        this.quill.history.cutoff();\n        this.quill.setSelection(range.index - length, _quill2.default.sources.SILENT);\n      }\n    },\n    'code exit': {\n      key: Keyboard.keys.ENTER,\n      collapsed: true,\n      format: ['code-block'],\n      prefix: /\\n\\n$/,\n      suffix: /^\\s+$/,\n      handler: function handler(range) {\n        var _quill$getLine9 = this.quill.getLine(range.index),\n            _quill$getLine10 = _slicedToArray(_quill$getLine9, 2),\n            line = _quill$getLine10[0],\n            offset = _quill$getLine10[1];\n\n        var delta = new _quillDelta2.default().retain(range.index + line.length() - offset - 2).retain(1, { 'code-block': null }).delete(1);\n        this.quill.updateContents(delta, _quill2.default.sources.USER);\n      }\n    },\n    'embed left': makeEmbedArrowHandler(Keyboard.keys.LEFT, false),\n    'embed left shift': makeEmbedArrowHandler(Keyboard.keys.LEFT, true),\n    'embed right': makeEmbedArrowHandler(Keyboard.keys.RIGHT, false),\n    'embed right shift': makeEmbedArrowHandler(Keyboard.keys.RIGHT, true)\n  }\n};\n\nfunction makeEmbedArrowHandler(key, shiftKey) {\n  var _ref3;\n\n  var where = key === Keyboard.keys.LEFT ? 'prefix' : 'suffix';\n  return _ref3 = {\n    key: key,\n    shiftKey: shiftKey,\n    altKey: null\n  }, _defineProperty(_ref3, where, /^$/), _defineProperty(_ref3, 'handler', function handler(range) {\n    var index = range.index;\n    if (key === Keyboard.keys.RIGHT) {\n      index += range.length + 1;\n    }\n\n    var _quill$getLeaf3 = this.quill.getLeaf(index),\n        _quill$getLeaf4 = _slicedToArray(_quill$getLeaf3, 1),\n        leaf = _quill$getLeaf4[0];\n\n    if (!(leaf instanceof _parchment2.default.Embed)) return true;\n    if (key === Keyboard.keys.LEFT) {\n      if (shiftKey) {\n        this.quill.setSelection(range.index - 1, range.length + 1, _quill2.default.sources.USER);\n      } else {\n        this.quill.setSelection(range.index - 1, _quill2.default.sources.USER);\n      }\n    } else {\n      if (shiftKey) {\n        this.quill.setSelection(range.index, range.length + 1, _quill2.default.sources.USER);\n      } else {\n        this.quill.setSelection(range.index + range.length + 1, _quill2.default.sources.USER);\n      }\n    }\n    return false;\n  }), _ref3;\n}\n\nfunction handleBackspace(range, context) {\n  if (range.index === 0 || this.quill.getLength() <= 1) return;\n\n  var _quill$getLine11 = this.quill.getLine(range.index),\n      _quill$getLine12 = _slicedToArray(_quill$getLine11, 1),\n      line = _quill$getLine12[0];\n\n  var formats = {};\n  if (context.offset === 0) {\n    var _quill$getLine13 = this.quill.getLine(range.index - 1),\n        _quill$getLine14 = _slicedToArray(_quill$getLine13, 1),\n        prev = _quill$getLine14[0];\n\n    if (prev != null && prev.length() > 1) {\n      var curFormats = line.formats();\n      var prevFormats = this.quill.getFormat(range.index - 1, 1);\n      formats = _op2.default.attributes.diff(curFormats, prevFormats) || {};\n    }\n  }\n  // Check for astral symbols\n  var length = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]$/.test(context.prefix) ? 2 : 1;\n  this.quill.deleteText(range.index - length, length, _quill2.default.sources.USER);\n  if (Object.keys(formats).length > 0) {\n    this.quill.formatLine(range.index - length, length, formats, _quill2.default.sources.USER);\n  }\n  this.quill.focus();\n}\n\nfunction handleDelete(range, context) {\n  // Check for astral symbols\n  var length = /^[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/.test(context.suffix) ? 2 : 1;\n  if (range.index >= this.quill.getLength() - length) return;\n  var formats = {},\n      nextLength = 0;\n\n  var _quill$getLine15 = this.quill.getLine(range.index),\n      _quill$getLine16 = _slicedToArray(_quill$getLine15, 1),\n      line = _quill$getLine16[0];\n\n  if (context.offset >= line.length() - 1) {\n    var _quill$getLine17 = this.quill.getLine(range.index + 1),\n        _quill$getLine18 = _slicedToArray(_quill$getLine17, 1),\n        next = _quill$getLine18[0];\n\n    if (next) {\n      var curFormats = line.formats();\n      var nextFormats = this.quill.getFormat(range.index, 1);\n      formats = _op2.default.attributes.diff(curFormats, nextFormats) || {};\n      nextLength = next.length();\n    }\n  }\n  this.quill.deleteText(range.index, length, _quill2.default.sources.USER);\n  if (Object.keys(formats).length > 0) {\n    this.quill.formatLine(range.index + nextLength - 1, length, formats, _quill2.default.sources.USER);\n  }\n}\n\nfunction handleDeleteRange(range) {\n  var lines = this.quill.getLines(range);\n  var formats = {};\n  if (lines.length > 1) {\n    var firstFormats = lines[0].formats();\n    var lastFormats = lines[lines.length - 1].formats();\n    formats = _op2.default.attributes.diff(lastFormats, firstFormats) || {};\n  }\n  this.quill.deleteText(range, _quill2.default.sources.USER);\n  if (Object.keys(formats).length > 0) {\n    this.quill.formatLine(range.index, 1, formats, _quill2.default.sources.USER);\n  }\n  this.quill.setSelection(range.index, _quill2.default.sources.SILENT);\n  this.quill.focus();\n}\n\nfunction handleEnter(range, context) {\n  var _this3 = this;\n\n  if (range.length > 0) {\n    this.quill.scroll.deleteAt(range.index, range.length); // So we do not trigger text-change\n  }\n  var lineFormats = Object.keys(context.format).reduce(function (lineFormats, format) {\n    if (_parchment2.default.query(format, _parchment2.default.Scope.BLOCK) && !Array.isArray(context.format[format])) {\n      lineFormats[format] = context.format[format];\n    }\n    return lineFormats;\n  }, {});\n  this.quill.insertText(range.index, '\\n', lineFormats, _quill2.default.sources.USER);\n  // Earlier scroll.deleteAt might have messed up our selection,\n  // so insertText's built in selection preservation is not reliable\n  this.quill.setSelection(range.index + 1, _quill2.default.sources.SILENT);\n  this.quill.focus();\n  Object.keys(context.format).forEach(function (name) {\n    if (lineFormats[name] != null) return;\n    if (Array.isArray(context.format[name])) return;\n    if (name === 'link') return;\n    _this3.quill.format(name, context.format[name], _quill2.default.sources.USER);\n  });\n}\n\nfunction makeCodeBlockHandler(indent) {\n  return {\n    key: Keyboard.keys.TAB,\n    shiftKey: !indent,\n    format: { 'code-block': true },\n    handler: function handler(range) {\n      var CodeBlock = _parchment2.default.query('code-block');\n      var index = range.index,\n          length = range.length;\n\n      var _quill$scroll$descend = this.quill.scroll.descendant(CodeBlock, index),\n          _quill$scroll$descend2 = _slicedToArray(_quill$scroll$descend, 2),\n          block = _quill$scroll$descend2[0],\n          offset = _quill$scroll$descend2[1];\n\n      if (block == null) return;\n      var scrollIndex = this.quill.getIndex(block);\n      var start = block.newlineIndex(offset, true) + 1;\n      var end = block.newlineIndex(scrollIndex + offset + length);\n      var lines = block.domNode.textContent.slice(start, end).split('\\n');\n      offset = 0;\n      lines.forEach(function (line, i) {\n        if (indent) {\n          block.insertAt(start + offset, CodeBlock.TAB);\n          offset += CodeBlock.TAB.length;\n          if (i === 0) {\n            index += CodeBlock.TAB.length;\n          } else {\n            length += CodeBlock.TAB.length;\n          }\n        } else if (line.startsWith(CodeBlock.TAB)) {\n          block.deleteAt(start + offset, CodeBlock.TAB.length);\n          offset -= CodeBlock.TAB.length;\n          if (i === 0) {\n            index -= CodeBlock.TAB.length;\n          } else {\n            length -= CodeBlock.TAB.length;\n          }\n        }\n        offset += line.length + 1;\n      });\n      this.quill.update(_quill2.default.sources.USER);\n      this.quill.setSelection(index, length, _quill2.default.sources.SILENT);\n    }\n  };\n}\n\nfunction makeFormatHandler(format) {\n  return {\n    key: format[0].toUpperCase(),\n    shortKey: true,\n    handler: function handler(range, context) {\n      this.quill.format(format, !context.format[format], _quill2.default.sources.USER);\n    }\n  };\n}\n\nfunction normalize(binding) {\n  if (typeof binding === 'string' || typeof binding === 'number') {\n    return normalize({ key: binding });\n  }\n  if ((typeof binding === 'undefined' ? 'undefined' : _typeof(binding)) === 'object') {\n    binding = (0, _clone2.default)(binding, false);\n  }\n  if (typeof binding.key === 'string') {\n    if (Keyboard.keys[binding.key.toUpperCase()] != null) {\n      binding.key = Keyboard.keys[binding.key.toUpperCase()];\n    } else if (binding.key.length === 1) {\n      binding.key = binding.key.toUpperCase().charCodeAt(0);\n    } else {\n      return null;\n    }\n  }\n  if (binding.shortKey) {\n    binding[SHORTKEY] = binding.shortKey;\n    delete binding.shortKey;\n  }\n  return binding;\n}\n\nexports.default = Keyboard;\nexports.SHORTKEY = SHORTKEY;\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\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 _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _text = __webpack_require__(7);\n\nvar _text2 = _interopRequireDefault(_text);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Cursor = function (_Parchment$Embed) {\n  _inherits(Cursor, _Parchment$Embed);\n\n  _createClass(Cursor, null, [{\n    key: 'value',\n    value: function value() {\n      return undefined;\n    }\n  }]);\n\n  function Cursor(domNode, selection) {\n    _classCallCheck(this, Cursor);\n\n    var _this = _possibleConstructorReturn(this, (Cursor.__proto__ || Object.getPrototypeOf(Cursor)).call(this, domNode));\n\n    _this.selection = selection;\n    _this.textNode = document.createTextNode(Cursor.CONTENTS);\n    _this.domNode.appendChild(_this.textNode);\n    _this._length = 0;\n    return _this;\n  }\n\n  _createClass(Cursor, [{\n    key: 'detach',\n    value: function detach() {\n      // super.detach() will also clear domNode.__blot\n      if (this.parent != null) this.parent.removeChild(this);\n    }\n  }, {\n    key: 'format',\n    value: function format(name, value) {\n      if (this._length !== 0) {\n        return _get(Cursor.prototype.__proto__ || Object.getPrototypeOf(Cursor.prototype), 'format', this).call(this, name, value);\n      }\n      var target = this,\n          index = 0;\n      while (target != null && target.statics.scope !== _parchment2.default.Scope.BLOCK_BLOT) {\n        index += target.offset(target.parent);\n        target = target.parent;\n      }\n      if (target != null) {\n        this._length = Cursor.CONTENTS.length;\n        target.optimize();\n        target.formatAt(index, Cursor.CONTENTS.length, name, value);\n        this._length = 0;\n      }\n    }\n  }, {\n    key: 'index',\n    value: function index(node, offset) {\n      if (node === this.textNode) return 0;\n      return _get(Cursor.prototype.__proto__ || Object.getPrototypeOf(Cursor.prototype), 'index', this).call(this, node, offset);\n    }\n  }, {\n    key: 'length',\n    value: function length() {\n      return this._length;\n    }\n  }, {\n    key: 'position',\n    value: function position() {\n      return [this.textNode, this.textNode.data.length];\n    }\n  }, {\n    key: 'remove',\n    value: function remove() {\n      _get(Cursor.prototype.__proto__ || Object.getPrototypeOf(Cursor.prototype), 'remove', this).call(this);\n      this.parent = null;\n    }\n  }, {\n    key: 'restore',\n    value: function restore() {\n      if (this.selection.composing || this.parent == null) return;\n      var textNode = this.textNode;\n      var range = this.selection.getNativeRange();\n      var restoreText = void 0,\n          start = void 0,\n          end = void 0;\n      if (range != null && range.start.node === textNode && range.end.node === textNode) {\n        var _ref = [textNode, range.start.offset, range.end.offset];\n        restoreText = _ref[0];\n        start = _ref[1];\n        end = _ref[2];\n      }\n      // Link format will insert text outside of anchor tag\n      while (this.domNode.lastChild != null && this.domNode.lastChild !== this.textNode) {\n        this.domNode.parentNode.insertBefore(this.domNode.lastChild, this.domNode);\n      }\n      if (this.textNode.data !== Cursor.CONTENTS) {\n        var text = this.textNode.data.split(Cursor.CONTENTS).join('');\n        if (this.next instanceof _text2.default) {\n          restoreText = this.next.domNode;\n          this.next.insertAt(0, text);\n          this.textNode.data = Cursor.CONTENTS;\n        } else {\n          this.textNode.data = text;\n          this.parent.insertBefore(_parchment2.default.create(this.textNode), this);\n          this.textNode = document.createTextNode(Cursor.CONTENTS);\n          this.domNode.appendChild(this.textNode);\n        }\n      }\n      this.remove();\n      if (start != null) {\n        var _map = [start, end].map(function (offset) {\n          return Math.max(0, Math.min(restoreText.data.length, offset - 1));\n        });\n\n        var _map2 = _slicedToArray(_map, 2);\n\n        start = _map2[0];\n        end = _map2[1];\n\n        return {\n          startNode: restoreText,\n          startOffset: start,\n          endNode: restoreText,\n          endOffset: end\n        };\n      }\n    }\n  }, {\n    key: 'update',\n    value: function update(mutations, context) {\n      var _this2 = this;\n\n      if (mutations.some(function (mutation) {\n        return mutation.type === 'characterData' && mutation.target === _this2.textNode;\n      })) {\n        var range = this.restore();\n        if (range) context.range = range;\n      }\n    }\n  }, {\n    key: 'value',\n    value: function value() {\n      return '';\n    }\n  }]);\n\n  return Cursor;\n}(_parchment2.default.Embed);\n\nCursor.blotName = 'cursor';\nCursor.className = 'ql-cursor';\nCursor.tagName = 'span';\nCursor.CONTENTS = '\\uFEFF'; // Zero width no break space\n\n\nexports.default = Cursor;\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _block = __webpack_require__(4);\n\nvar _block2 = _interopRequireDefault(_block);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Container = function (_Parchment$Container) {\n  _inherits(Container, _Parchment$Container);\n\n  function Container() {\n    _classCallCheck(this, Container);\n\n    return _possibleConstructorReturn(this, (Container.__proto__ || Object.getPrototypeOf(Container)).apply(this, arguments));\n  }\n\n  return Container;\n}(_parchment2.default.Container);\n\nContainer.allowedChildren = [_block2.default, _block.BlockEmbed, Container];\n\nexports.default = Container;\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ColorStyle = exports.ColorClass = exports.ColorAttributor = undefined;\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 _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ColorAttributor = function (_Parchment$Attributor) {\n  _inherits(ColorAttributor, _Parchment$Attributor);\n\n  function ColorAttributor() {\n    _classCallCheck(this, ColorAttributor);\n\n    return _possibleConstructorReturn(this, (ColorAttributor.__proto__ || Object.getPrototypeOf(ColorAttributor)).apply(this, arguments));\n  }\n\n  _createClass(ColorAttributor, [{\n    key: 'value',\n    value: function value(domNode) {\n      var value = _get(ColorAttributor.prototype.__proto__ || Object.getPrototypeOf(ColorAttributor.prototype), 'value', this).call(this, domNode);\n      if (!value.startsWith('rgb(')) return value;\n      value = value.replace(/^[^\\d]+/, '').replace(/[^\\d]+$/, '');\n      return '#' + value.split(',').map(function (component) {\n        return ('00' + parseInt(component).toString(16)).slice(-2);\n      }).join('');\n    }\n  }]);\n\n  return ColorAttributor;\n}(_parchment2.default.Attributor.Style);\n\nvar ColorClass = new _parchment2.default.Attributor.Class('color', 'ql-color', {\n  scope: _parchment2.default.Scope.INLINE\n});\nvar ColorStyle = new ColorAttributor('color', 'color', {\n  scope: _parchment2.default.Scope.INLINE\n});\n\nexports.ColorAttributor = ColorAttributor;\nexports.ColorClass = ColorClass;\nexports.ColorStyle = ColorStyle;\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.sanitize = exports.default = undefined;\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 _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _inline = __webpack_require__(6);\n\nvar _inline2 = _interopRequireDefault(_inline);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Link = function (_Inline) {\n  _inherits(Link, _Inline);\n\n  function Link() {\n    _classCallCheck(this, Link);\n\n    return _possibleConstructorReturn(this, (Link.__proto__ || Object.getPrototypeOf(Link)).apply(this, arguments));\n  }\n\n  _createClass(Link, [{\n    key: 'format',\n    value: function format(name, value) {\n      if (name !== this.statics.blotName || !value) return _get(Link.prototype.__proto__ || Object.getPrototypeOf(Link.prototype), 'format', this).call(this, name, value);\n      value = this.constructor.sanitize(value);\n      this.domNode.setAttribute('href', value);\n    }\n  }], [{\n    key: 'create',\n    value: function create(value) {\n      var node = _get(Link.__proto__ || Object.getPrototypeOf(Link), 'create', this).call(this, value);\n      value = this.sanitize(value);\n      node.setAttribute('href', value);\n      node.setAttribute('rel', 'noopener noreferrer');\n      node.setAttribute('target', '_blank');\n      return node;\n    }\n  }, {\n    key: 'formats',\n    value: function formats(domNode) {\n      return domNode.getAttribute('href');\n    }\n  }, {\n    key: 'sanitize',\n    value: function sanitize(url) {\n      return _sanitize(url, this.PROTOCOL_WHITELIST) ? url : this.SANITIZED_URL;\n    }\n  }]);\n\n  return Link;\n}(_inline2.default);\n\nLink.blotName = 'link';\nLink.tagName = 'A';\nLink.SANITIZED_URL = 'about:blank';\nLink.PROTOCOL_WHITELIST = ['http', 'https', 'mailto', 'tel'];\n\nfunction _sanitize(url, protocols) {\n  var anchor = document.createElement('a');\n  anchor.href = url;\n  var protocol = anchor.href.slice(0, anchor.href.indexOf(':'));\n  return protocols.indexOf(protocol) > -1;\n}\n\nexports.default = Link;\nexports.sanitize = _sanitize;\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\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\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 _keyboard = __webpack_require__(23);\n\nvar _keyboard2 = _interopRequireDefault(_keyboard);\n\nvar _dropdown = __webpack_require__(107);\n\nvar _dropdown2 = _interopRequireDefault(_dropdown);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar optionsCounter = 0;\n\nfunction toggleAriaAttribute(element, attribute) {\n  element.setAttribute(attribute, !(element.getAttribute(attribute) === 'true'));\n}\n\nvar Picker = function () {\n  function Picker(select) {\n    var _this = this;\n\n    _classCallCheck(this, Picker);\n\n    this.select = select;\n    this.container = document.createElement('span');\n    this.buildPicker();\n    this.select.style.display = 'none';\n    this.select.parentNode.insertBefore(this.container, this.select);\n\n    this.label.addEventListener('mousedown', function () {\n      _this.togglePicker();\n    });\n    this.label.addEventListener('keydown', function (event) {\n      switch (event.keyCode) {\n        // Allows the \"Enter\" key to open the picker\n        case _keyboard2.default.keys.ENTER:\n          _this.togglePicker();\n          break;\n\n        // Allows the \"Escape\" key to close the picker\n        case _keyboard2.default.keys.ESCAPE:\n          _this.escape();\n          event.preventDefault();\n          break;\n        default:\n      }\n    });\n    this.select.addEventListener('change', this.update.bind(this));\n  }\n\n  _createClass(Picker, [{\n    key: 'togglePicker',\n    value: function togglePicker() {\n      this.container.classList.toggle('ql-expanded');\n      // Toggle aria-expanded and aria-hidden to make the picker accessible\n      toggleAriaAttribute(this.label, 'aria-expanded');\n      toggleAriaAttribute(this.options, 'aria-hidden');\n    }\n  }, {\n    key: 'buildItem',\n    value: function buildItem(option) {\n      var _this2 = this;\n\n      var item = document.createElement('span');\n      item.tabIndex = '0';\n      item.setAttribute('role', 'button');\n\n      item.classList.add('ql-picker-item');\n      if (option.hasAttribute('value')) {\n        item.setAttribute('data-value', option.getAttribute('value'));\n      }\n      if (option.textContent) {\n        item.setAttribute('data-label', option.textContent);\n      }\n      item.addEventListener('click', function () {\n        _this2.selectItem(item, true);\n      });\n      item.addEventListener('keydown', function (event) {\n        switch (event.keyCode) {\n          // Allows the \"Enter\" key to select an item\n          case _keyboard2.default.keys.ENTER:\n            _this2.selectItem(item, true);\n            event.preventDefault();\n            break;\n\n          // Allows the \"Escape\" key to close the picker\n          case _keyboard2.default.keys.ESCAPE:\n            _this2.escape();\n            event.preventDefault();\n            break;\n          default:\n        }\n      });\n\n      return item;\n    }\n  }, {\n    key: 'buildLabel',\n    value: function buildLabel() {\n      var label = document.createElement('span');\n      label.classList.add('ql-picker-label');\n      label.innerHTML = _dropdown2.default;\n      label.tabIndex = '0';\n      label.setAttribute('role', 'button');\n      label.setAttribute('aria-expanded', 'false');\n      this.container.appendChild(label);\n      return label;\n    }\n  }, {\n    key: 'buildOptions',\n    value: function buildOptions() {\n      var _this3 = this;\n\n      var options = document.createElement('span');\n      options.classList.add('ql-picker-options');\n\n      // Don't want screen readers to read this until options are visible\n      options.setAttribute('aria-hidden', 'true');\n      options.tabIndex = '-1';\n\n      // Need a unique id for aria-controls\n      options.id = 'ql-picker-options-' + optionsCounter;\n      optionsCounter += 1;\n      this.label.setAttribute('aria-controls', options.id);\n\n      this.options = options;\n\n      [].slice.call(this.select.options).forEach(function (option) {\n        var item = _this3.buildItem(option);\n        options.appendChild(item);\n        if (option.selected === true) {\n          _this3.selectItem(item);\n        }\n      });\n      this.container.appendChild(options);\n    }\n  }, {\n    key: 'buildPicker',\n    value: function buildPicker() {\n      var _this4 = this;\n\n      [].slice.call(this.select.attributes).forEach(function (item) {\n        _this4.container.setAttribute(item.name, item.value);\n      });\n      this.container.classList.add('ql-picker');\n      this.label = this.buildLabel();\n      this.buildOptions();\n    }\n  }, {\n    key: 'escape',\n    value: function escape() {\n      var _this5 = this;\n\n      // Close menu and return focus to trigger label\n      this.close();\n      // Need setTimeout for accessibility to ensure that the browser executes\n      // focus on the next process thread and after any DOM content changes\n      setTimeout(function () {\n        return _this5.label.focus();\n      }, 1);\n    }\n  }, {\n    key: 'close',\n    value: function close() {\n      this.container.classList.remove('ql-expanded');\n      this.label.setAttribute('aria-expanded', 'false');\n      this.options.setAttribute('aria-hidden', 'true');\n    }\n  }, {\n    key: 'selectItem',\n    value: function selectItem(item) {\n      var trigger = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n      var selected = this.container.querySelector('.ql-selected');\n      if (item === selected) return;\n      if (selected != null) {\n        selected.classList.remove('ql-selected');\n      }\n      if (item == null) return;\n      item.classList.add('ql-selected');\n      this.select.selectedIndex = [].indexOf.call(item.parentNode.children, item);\n      if (item.hasAttribute('data-value')) {\n        this.label.setAttribute('data-value', item.getAttribute('data-value'));\n      } else {\n        this.label.removeAttribute('data-value');\n      }\n      if (item.hasAttribute('data-label')) {\n        this.label.setAttribute('data-label', item.getAttribute('data-label'));\n      } else {\n        this.label.removeAttribute('data-label');\n      }\n      if (trigger) {\n        if (typeof Event === 'function') {\n          this.select.dispatchEvent(new Event('change'));\n        } else if ((typeof Event === 'undefined' ? 'undefined' : _typeof(Event)) === 'object') {\n          // IE11\n          var event = document.createEvent('Event');\n          event.initEvent('change', true, true);\n          this.select.dispatchEvent(event);\n        }\n        this.close();\n      }\n    }\n  }, {\n    key: 'update',\n    value: function update() {\n      var option = void 0;\n      if (this.select.selectedIndex > -1) {\n        var item = this.container.querySelector('.ql-picker-options').children[this.select.selectedIndex];\n        option = this.select.options[this.select.selectedIndex];\n        this.selectItem(item);\n      } else {\n        this.selectItem(null);\n      }\n      var isActive = option != null && option !== this.select.querySelector('option[selected]');\n      this.label.classList.toggle('ql-active', isActive);\n    }\n  }]);\n\n  return Picker;\n}();\n\nexports.default = Picker;\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _quill = __webpack_require__(5);\n\nvar _quill2 = _interopRequireDefault(_quill);\n\nvar _block = __webpack_require__(4);\n\nvar _block2 = _interopRequireDefault(_block);\n\nvar _break = __webpack_require__(16);\n\nvar _break2 = _interopRequireDefault(_break);\n\nvar _container = __webpack_require__(25);\n\nvar _container2 = _interopRequireDefault(_container);\n\nvar _cursor = __webpack_require__(24);\n\nvar _cursor2 = _interopRequireDefault(_cursor);\n\nvar _embed = __webpack_require__(35);\n\nvar _embed2 = _interopRequireDefault(_embed);\n\nvar _inline = __webpack_require__(6);\n\nvar _inline2 = _interopRequireDefault(_inline);\n\nvar _scroll = __webpack_require__(22);\n\nvar _scroll2 = _interopRequireDefault(_scroll);\n\nvar _text = __webpack_require__(7);\n\nvar _text2 = _interopRequireDefault(_text);\n\nvar _clipboard = __webpack_require__(55);\n\nvar _clipboard2 = _interopRequireDefault(_clipboard);\n\nvar _history = __webpack_require__(42);\n\nvar _history2 = _interopRequireDefault(_history);\n\nvar _keyboard = __webpack_require__(23);\n\nvar _keyboard2 = _interopRequireDefault(_keyboard);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n_quill2.default.register({\n  'blots/block': _block2.default,\n  'blots/block/embed': _block.BlockEmbed,\n  'blots/break': _break2.default,\n  'blots/container': _container2.default,\n  'blots/cursor': _cursor2.default,\n  'blots/embed': _embed2.default,\n  'blots/inline': _inline2.default,\n  'blots/scroll': _scroll2.default,\n  'blots/text': _text2.default,\n\n  'modules/clipboard': _clipboard2.default,\n  'modules/history': _history2.default,\n  'modules/keyboard': _keyboard2.default\n});\n\n_parchment2.default.register(_block2.default, _break2.default, _cursor2.default, _inline2.default, _scroll2.default, _text2.default);\n\nexports.default = _quill2.default;\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Registry = __webpack_require__(1);\nvar ShadowBlot = /** @class */ (function () {\n    function ShadowBlot(domNode) {\n        this.domNode = domNode;\n        // @ts-ignore\n        this.domNode[Registry.DATA_KEY] = { blot: this };\n    }\n    Object.defineProperty(ShadowBlot.prototype, \"statics\", {\n        // Hack for accessing inherited static methods\n        get: function () {\n            return this.constructor;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    ShadowBlot.create = function (value) {\n        if (this.tagName == null) {\n            throw new Registry.ParchmentError('Blot definition missing tagName');\n        }\n        var node;\n        if (Array.isArray(this.tagName)) {\n            if (typeof value === 'string') {\n                value = value.toUpperCase();\n                if (parseInt(value).toString() === value) {\n                    value = parseInt(value);\n                }\n            }\n            if (typeof value === 'number') {\n                node = document.createElement(this.tagName[value - 1]);\n            }\n            else if (this.tagName.indexOf(value) > -1) {\n                node = document.createElement(value);\n            }\n            else {\n                node = document.createElement(this.tagName[0]);\n            }\n        }\n        else {\n            node = document.createElement(this.tagName);\n        }\n        if (this.className) {\n            node.classList.add(this.className);\n        }\n        return node;\n    };\n    ShadowBlot.prototype.attach = function () {\n        if (this.parent != null) {\n            this.scroll = this.parent.scroll;\n        }\n    };\n    ShadowBlot.prototype.clone = function () {\n        var domNode = this.domNode.cloneNode(false);\n        return Registry.create(domNode);\n    };\n    ShadowBlot.prototype.detach = function () {\n        if (this.parent != null)\n            this.parent.removeChild(this);\n        // @ts-ignore\n        delete this.domNode[Registry.DATA_KEY];\n    };\n    ShadowBlot.prototype.deleteAt = function (index, length) {\n        var blot = this.isolate(index, length);\n        blot.remove();\n    };\n    ShadowBlot.prototype.formatAt = function (index, length, name, value) {\n        var blot = this.isolate(index, length);\n        if (Registry.query(name, Registry.Scope.BLOT) != null && value) {\n            blot.wrap(name, value);\n        }\n        else if (Registry.query(name, Registry.Scope.ATTRIBUTE) != null) {\n            var parent = Registry.create(this.statics.scope);\n            blot.wrap(parent);\n            parent.format(name, value);\n        }\n    };\n    ShadowBlot.prototype.insertAt = function (index, value, def) {\n        var blot = def == null ? Registry.create('text', value) : Registry.create(value, def);\n        var ref = this.split(index);\n        this.parent.insertBefore(blot, ref);\n    };\n    ShadowBlot.prototype.insertInto = function (parentBlot, refBlot) {\n        if (refBlot === void 0) { refBlot = null; }\n        if (this.parent != null) {\n            this.parent.children.remove(this);\n        }\n        var refDomNode = null;\n        parentBlot.children.insertBefore(this, refBlot);\n        if (refBlot != null) {\n            refDomNode = refBlot.domNode;\n        }\n        if (this.domNode.parentNode != parentBlot.domNode ||\n            this.domNode.nextSibling != refDomNode) {\n            parentBlot.domNode.insertBefore(this.domNode, refDomNode);\n        }\n        this.parent = parentBlot;\n        this.attach();\n    };\n    ShadowBlot.prototype.isolate = function (index, length) {\n        var target = this.split(index);\n        target.split(length);\n        return target;\n    };\n    ShadowBlot.prototype.length = function () {\n        return 1;\n    };\n    ShadowBlot.prototype.offset = function (root) {\n        if (root === void 0) { root = this.parent; }\n        if (this.parent == null || this == root)\n            return 0;\n        return this.parent.children.offset(this) + this.parent.offset(root);\n    };\n    ShadowBlot.prototype.optimize = function (context) {\n        // TODO clean up once we use WeakMap\n        // @ts-ignore\n        if (this.domNode[Registry.DATA_KEY] != null) {\n            // @ts-ignore\n            delete this.domNode[Registry.DATA_KEY].mutations;\n        }\n    };\n    ShadowBlot.prototype.remove = function () {\n        if (this.domNode.parentNode != null) {\n            this.domNode.parentNode.removeChild(this.domNode);\n        }\n        this.detach();\n    };\n    ShadowBlot.prototype.replace = function (target) {\n        if (target.parent == null)\n            return;\n        target.parent.insertBefore(this, target.next);\n        target.remove();\n    };\n    ShadowBlot.prototype.replaceWith = function (name, value) {\n        var replacement = typeof name === 'string' ? Registry.create(name, value) : name;\n        replacement.replace(this);\n        return replacement;\n    };\n    ShadowBlot.prototype.split = function (index, force) {\n        return index === 0 ? this : this.next;\n    };\n    ShadowBlot.prototype.update = function (mutations, context) {\n        // Nothing to do by default\n    };\n    ShadowBlot.prototype.wrap = function (name, value) {\n        var wrapper = typeof name === 'string' ? Registry.create(name, value) : name;\n        if (this.parent != null) {\n            this.parent.insertBefore(wrapper, this.next);\n        }\n        wrapper.appendChild(this);\n        return wrapper;\n    };\n    ShadowBlot.blotName = 'abstract';\n    return ShadowBlot;\n}());\nexports.default = ShadowBlot;\n\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar attributor_1 = __webpack_require__(12);\nvar class_1 = __webpack_require__(32);\nvar style_1 = __webpack_require__(33);\nvar Registry = __webpack_require__(1);\nvar AttributorStore = /** @class */ (function () {\n    function AttributorStore(domNode) {\n        this.attributes = {};\n        this.domNode = domNode;\n        this.build();\n    }\n    AttributorStore.prototype.attribute = function (attribute, value) {\n        // verb\n        if (value) {\n            if (attribute.add(this.domNode, value)) {\n                if (attribute.value(this.domNode) != null) {\n                    this.attributes[attribute.attrName] = attribute;\n                }\n                else {\n                    delete this.attributes[attribute.attrName];\n                }\n            }\n        }\n        else {\n            attribute.remove(this.domNode);\n            delete this.attributes[attribute.attrName];\n        }\n    };\n    AttributorStore.prototype.build = function () {\n        var _this = this;\n        this.attributes = {};\n        var attributes = attributor_1.default.keys(this.domNode);\n        var classes = class_1.default.keys(this.domNode);\n        var styles = style_1.default.keys(this.domNode);\n        attributes\n            .concat(classes)\n            .concat(styles)\n            .forEach(function (name) {\n            var attr = Registry.query(name, Registry.Scope.ATTRIBUTE);\n            if (attr instanceof attributor_1.default) {\n                _this.attributes[attr.attrName] = attr;\n            }\n        });\n    };\n    AttributorStore.prototype.copy = function (target) {\n        var _this = this;\n        Object.keys(this.attributes).forEach(function (key) {\n            var value = _this.attributes[key].value(_this.domNode);\n            target.format(key, value);\n        });\n    };\n    AttributorStore.prototype.move = function (target) {\n        var _this = this;\n        this.copy(target);\n        Object.keys(this.attributes).forEach(function (key) {\n            _this.attributes[key].remove(_this.domNode);\n        });\n        this.attributes = {};\n    };\n    AttributorStore.prototype.values = function () {\n        var _this = this;\n        return Object.keys(this.attributes).reduce(function (attributes, name) {\n            attributes[name] = _this.attributes[name].value(_this.domNode);\n            return attributes;\n        }, {});\n    };\n    return AttributorStore;\n}());\nexports.default = AttributorStore;\n\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar attributor_1 = __webpack_require__(12);\nfunction match(node, prefix) {\n    var className = node.getAttribute('class') || '';\n    return className.split(/\\s+/).filter(function (name) {\n        return name.indexOf(prefix + \"-\") === 0;\n    });\n}\nvar ClassAttributor = /** @class */ (function (_super) {\n    __extends(ClassAttributor, _super);\n    function ClassAttributor() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    ClassAttributor.keys = function (node) {\n        return (node.getAttribute('class') || '').split(/\\s+/).map(function (name) {\n            return name\n                .split('-')\n                .slice(0, -1)\n                .join('-');\n        });\n    };\n    ClassAttributor.prototype.add = function (node, value) {\n        if (!this.canAdd(node, value))\n            return false;\n        this.remove(node);\n        node.classList.add(this.keyName + \"-\" + value);\n        return true;\n    };\n    ClassAttributor.prototype.remove = function (node) {\n        var matches = match(node, this.keyName);\n        matches.forEach(function (name) {\n            node.classList.remove(name);\n        });\n        if (node.classList.length === 0) {\n            node.removeAttribute('class');\n        }\n    };\n    ClassAttributor.prototype.value = function (node) {\n        var result = match(node, this.keyName)[0] || '';\n        var value = result.slice(this.keyName.length + 1); // +1 for hyphen\n        return this.canAdd(node, value) ? value : '';\n    };\n    return ClassAttributor;\n}(attributor_1.default));\nexports.default = ClassAttributor;\n\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar attributor_1 = __webpack_require__(12);\nfunction camelize(name) {\n    var parts = name.split('-');\n    var rest = parts\n        .slice(1)\n        .map(function (part) {\n        return part[0].toUpperCase() + part.slice(1);\n    })\n        .join('');\n    return parts[0] + rest;\n}\nvar StyleAttributor = /** @class */ (function (_super) {\n    __extends(StyleAttributor, _super);\n    function StyleAttributor() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    StyleAttributor.keys = function (node) {\n        return (node.getAttribute('style') || '').split(';').map(function (value) {\n            var arr = value.split(':');\n            return arr[0].trim();\n        });\n    };\n    StyleAttributor.prototype.add = function (node, value) {\n        if (!this.canAdd(node, value))\n            return false;\n        // @ts-ignore\n        node.style[camelize(this.keyName)] = value;\n        return true;\n    };\n    StyleAttributor.prototype.remove = function (node) {\n        // @ts-ignore\n        node.style[camelize(this.keyName)] = '';\n        if (!node.getAttribute('style')) {\n            node.removeAttribute('style');\n        }\n    };\n    StyleAttributor.prototype.value = function (node) {\n        // @ts-ignore\n        var value = node.style[camelize(this.keyName)];\n        return this.canAdd(node, value) ? value : '';\n    };\n    return StyleAttributor;\n}(attributor_1.default));\nexports.default = StyleAttributor;\n\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Theme = function () {\n  function Theme(quill, options) {\n    _classCallCheck(this, Theme);\n\n    this.quill = quill;\n    this.options = options;\n    this.modules = {};\n  }\n\n  _createClass(Theme, [{\n    key: 'init',\n    value: function init() {\n      var _this = this;\n\n      Object.keys(this.options.modules).forEach(function (name) {\n        if (_this.modules[name] == null) {\n          _this.addModule(name);\n        }\n      });\n    }\n  }, {\n    key: 'addModule',\n    value: function addModule(name) {\n      var moduleClass = this.quill.constructor.import('modules/' + name);\n      this.modules[name] = new moduleClass(this.quill, this.options.modules[name] || {});\n      return this.modules[name];\n    }\n  }]);\n\n  return Theme;\n}();\n\nTheme.DEFAULTS = {\n  modules: {}\n};\nTheme.themes = {\n  'default': Theme\n};\n\nexports.default = Theme;\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\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 _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _text = __webpack_require__(7);\n\nvar _text2 = _interopRequireDefault(_text);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar GUARD_TEXT = '\\uFEFF';\n\nvar Embed = function (_Parchment$Embed) {\n  _inherits(Embed, _Parchment$Embed);\n\n  function Embed(node) {\n    _classCallCheck(this, Embed);\n\n    var _this = _possibleConstructorReturn(this, (Embed.__proto__ || Object.getPrototypeOf(Embed)).call(this, node));\n\n    _this.contentNode = document.createElement('span');\n    _this.contentNode.setAttribute('contenteditable', false);\n    [].slice.call(_this.domNode.childNodes).forEach(function (childNode) {\n      _this.contentNode.appendChild(childNode);\n    });\n    _this.leftGuard = document.createTextNode(GUARD_TEXT);\n    _this.rightGuard = document.createTextNode(GUARD_TEXT);\n    _this.domNode.appendChild(_this.leftGuard);\n    _this.domNode.appendChild(_this.contentNode);\n    _this.domNode.appendChild(_this.rightGuard);\n    return _this;\n  }\n\n  _createClass(Embed, [{\n    key: 'index',\n    value: function index(node, offset) {\n      if (node === this.leftGuard) return 0;\n      if (node === this.rightGuard) return 1;\n      return _get(Embed.prototype.__proto__ || Object.getPrototypeOf(Embed.prototype), 'index', this).call(this, node, offset);\n    }\n  }, {\n    key: 'restore',\n    value: function restore(node) {\n      var range = void 0,\n          textNode = void 0;\n      var text = node.data.split(GUARD_TEXT).join('');\n      if (node === this.leftGuard) {\n        if (this.prev instanceof _text2.default) {\n          var prevLength = this.prev.length();\n          this.prev.insertAt(prevLength, text);\n          range = {\n            startNode: this.prev.domNode,\n            startOffset: prevLength + text.length\n          };\n        } else {\n          textNode = document.createTextNode(text);\n          this.parent.insertBefore(_parchment2.default.create(textNode), this);\n          range = {\n            startNode: textNode,\n            startOffset: text.length\n          };\n        }\n      } else if (node === this.rightGuard) {\n        if (this.next instanceof _text2.default) {\n          this.next.insertAt(0, text);\n          range = {\n            startNode: this.next.domNode,\n            startOffset: text.length\n          };\n        } else {\n          textNode = document.createTextNode(text);\n          this.parent.insertBefore(_parchment2.default.create(textNode), this.next);\n          range = {\n            startNode: textNode,\n            startOffset: text.length\n          };\n        }\n      }\n      node.data = GUARD_TEXT;\n      return range;\n    }\n  }, {\n    key: 'update',\n    value: function update(mutations, context) {\n      var _this2 = this;\n\n      mutations.forEach(function (mutation) {\n        if (mutation.type === 'characterData' && (mutation.target === _this2.leftGuard || mutation.target === _this2.rightGuard)) {\n          var range = _this2.restore(mutation.target);\n          if (range) context.range = range;\n        }\n      });\n    }\n  }]);\n\n  return Embed;\n}(_parchment2.default.Embed);\n\nexports.default = Embed;\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.AlignStyle = exports.AlignClass = exports.AlignAttribute = undefined;\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar config = {\n  scope: _parchment2.default.Scope.BLOCK,\n  whitelist: ['right', 'center', 'justify']\n};\n\nvar AlignAttribute = new _parchment2.default.Attributor.Attribute('align', 'align', config);\nvar AlignClass = new _parchment2.default.Attributor.Class('align', 'ql-align', config);\nvar AlignStyle = new _parchment2.default.Attributor.Style('align', 'text-align', config);\n\nexports.AlignAttribute = AlignAttribute;\nexports.AlignClass = AlignClass;\nexports.AlignStyle = AlignStyle;\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.BackgroundStyle = exports.BackgroundClass = undefined;\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _color = __webpack_require__(26);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar BackgroundClass = new _parchment2.default.Attributor.Class('background', 'ql-bg', {\n  scope: _parchment2.default.Scope.INLINE\n});\nvar BackgroundStyle = new _color.ColorAttributor('background', 'background-color', {\n  scope: _parchment2.default.Scope.INLINE\n});\n\nexports.BackgroundClass = BackgroundClass;\nexports.BackgroundStyle = BackgroundStyle;\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.DirectionStyle = exports.DirectionClass = exports.DirectionAttribute = undefined;\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar config = {\n  scope: _parchment2.default.Scope.BLOCK,\n  whitelist: ['rtl']\n};\n\nvar DirectionAttribute = new _parchment2.default.Attributor.Attribute('direction', 'dir', config);\nvar DirectionClass = new _parchment2.default.Attributor.Class('direction', 'ql-direction', config);\nvar DirectionStyle = new _parchment2.default.Attributor.Style('direction', 'direction', config);\n\nexports.DirectionAttribute = DirectionAttribute;\nexports.DirectionClass = DirectionClass;\nexports.DirectionStyle = DirectionStyle;\n\n/***/ }),\n/* 39 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.FontClass = exports.FontStyle = undefined;\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 _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar config = {\n  scope: _parchment2.default.Scope.INLINE,\n  whitelist: ['serif', 'monospace']\n};\n\nvar FontClass = new _parchment2.default.Attributor.Class('font', 'ql-font', config);\n\nvar FontStyleAttributor = function (_Parchment$Attributor) {\n  _inherits(FontStyleAttributor, _Parchment$Attributor);\n\n  function FontStyleAttributor() {\n    _classCallCheck(this, FontStyleAttributor);\n\n    return _possibleConstructorReturn(this, (FontStyleAttributor.__proto__ || Object.getPrototypeOf(FontStyleAttributor)).apply(this, arguments));\n  }\n\n  _createClass(FontStyleAttributor, [{\n    key: 'value',\n    value: function value(node) {\n      return _get(FontStyleAttributor.prototype.__proto__ || Object.getPrototypeOf(FontStyleAttributor.prototype), 'value', this).call(this, node).replace(/[\"']/g, '');\n    }\n  }]);\n\n  return FontStyleAttributor;\n}(_parchment2.default.Attributor.Style);\n\nvar FontStyle = new FontStyleAttributor('font', 'font-family', config);\n\nexports.FontStyle = FontStyle;\nexports.FontClass = FontClass;\n\n/***/ }),\n/* 40 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.SizeStyle = exports.SizeClass = undefined;\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar SizeClass = new _parchment2.default.Attributor.Class('size', 'ql-size', {\n  scope: _parchment2.default.Scope.INLINE,\n  whitelist: ['small', 'large', 'huge']\n});\nvar SizeStyle = new _parchment2.default.Attributor.Style('size', 'font-size', {\n  scope: _parchment2.default.Scope.INLINE,\n  whitelist: ['10px', '18px', '32px']\n});\n\nexports.SizeClass = SizeClass;\nexports.SizeStyle = SizeStyle;\n\n/***/ }),\n/* 41 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = {\n  'align': {\n    '': __webpack_require__(76),\n    'center': __webpack_require__(77),\n    'right': __webpack_require__(78),\n    'justify': __webpack_require__(79)\n  },\n  'background': __webpack_require__(80),\n  'blockquote': __webpack_require__(81),\n  'bold': __webpack_require__(82),\n  'clean': __webpack_require__(83),\n  'code': __webpack_require__(58),\n  'code-block': __webpack_require__(58),\n  'color': __webpack_require__(84),\n  'direction': {\n    '': __webpack_require__(85),\n    'rtl': __webpack_require__(86)\n  },\n  'float': {\n    'center': __webpack_require__(87),\n    'full': __webpack_require__(88),\n    'left': __webpack_require__(89),\n    'right': __webpack_require__(90)\n  },\n  'formula': __webpack_require__(91),\n  'header': {\n    '1': __webpack_require__(92),\n    '2': __webpack_require__(93)\n  },\n  'italic': __webpack_require__(94),\n  'image': __webpack_require__(95),\n  'indent': {\n    '+1': __webpack_require__(96),\n    '-1': __webpack_require__(97)\n  },\n  'link': __webpack_require__(98),\n  'list': {\n    'ordered': __webpack_require__(99),\n    'bullet': __webpack_require__(100),\n    'check': __webpack_require__(101)\n  },\n  'script': {\n    'sub': __webpack_require__(102),\n    'super': __webpack_require__(103)\n  },\n  'strike': __webpack_require__(104),\n  'underline': __webpack_require__(105),\n  'video': __webpack_require__(106)\n};\n\n/***/ }),\n/* 42 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.getLastChangeIndex = exports.default = undefined;\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 _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _quill = __webpack_require__(5);\n\nvar _quill2 = _interopRequireDefault(_quill);\n\nvar _module = __webpack_require__(9);\n\nvar _module2 = _interopRequireDefault(_module);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar History = function (_Module) {\n  _inherits(History, _Module);\n\n  function History(quill, options) {\n    _classCallCheck(this, History);\n\n    var _this = _possibleConstructorReturn(this, (History.__proto__ || Object.getPrototypeOf(History)).call(this, quill, options));\n\n    _this.lastRecorded = 0;\n    _this.ignoreChange = false;\n    _this.clear();\n    _this.quill.on(_quill2.default.events.EDITOR_CHANGE, function (eventName, delta, oldDelta, source) {\n      if (eventName !== _quill2.default.events.TEXT_CHANGE || _this.ignoreChange) return;\n      if (!_this.options.userOnly || source === _quill2.default.sources.USER) {\n        _this.record(delta, oldDelta);\n      } else {\n        _this.transform(delta);\n      }\n    });\n    _this.quill.keyboard.addBinding({ key: 'Z', shortKey: true }, _this.undo.bind(_this));\n    _this.quill.keyboard.addBinding({ key: 'Z', shortKey: true, shiftKey: true }, _this.redo.bind(_this));\n    if (/Win/i.test(navigator.platform)) {\n      _this.quill.keyboard.addBinding({ key: 'Y', shortKey: true }, _this.redo.bind(_this));\n    }\n    return _this;\n  }\n\n  _createClass(History, [{\n    key: 'change',\n    value: function change(source, dest) {\n      if (this.stack[source].length === 0) return;\n      var delta = this.stack[source].pop();\n      this.stack[dest].push(delta);\n      this.lastRecorded = 0;\n      this.ignoreChange = true;\n      this.quill.updateContents(delta[source], _quill2.default.sources.USER);\n      this.ignoreChange = false;\n      var index = getLastChangeIndex(delta[source]);\n      this.quill.setSelection(index);\n    }\n  }, {\n    key: 'clear',\n    value: function clear() {\n      this.stack = { undo: [], redo: [] };\n    }\n  }, {\n    key: 'cutoff',\n    value: function cutoff() {\n      this.lastRecorded = 0;\n    }\n  }, {\n    key: 'record',\n    value: function record(changeDelta, oldDelta) {\n      if (changeDelta.ops.length === 0) return;\n      this.stack.redo = [];\n      var undoDelta = this.quill.getContents().diff(oldDelta);\n      var timestamp = Date.now();\n      if (this.lastRecorded + this.options.delay > timestamp && this.stack.undo.length > 0) {\n        var delta = this.stack.undo.pop();\n        undoDelta = undoDelta.compose(delta.undo);\n        changeDelta = delta.redo.compose(changeDelta);\n      } else {\n        this.lastRecorded = timestamp;\n      }\n      this.stack.undo.push({\n        redo: changeDelta,\n        undo: undoDelta\n      });\n      if (this.stack.undo.length > this.options.maxStack) {\n        this.stack.undo.shift();\n      }\n    }\n  }, {\n    key: 'redo',\n    value: function redo() {\n      this.change('redo', 'undo');\n    }\n  }, {\n    key: 'transform',\n    value: function transform(delta) {\n      this.stack.undo.forEach(function (change) {\n        change.undo = delta.transform(change.undo, true);\n        change.redo = delta.transform(change.redo, true);\n      });\n      this.stack.redo.forEach(function (change) {\n        change.undo = delta.transform(change.undo, true);\n        change.redo = delta.transform(change.redo, true);\n      });\n    }\n  }, {\n    key: 'undo',\n    value: function undo() {\n      this.change('undo', 'redo');\n    }\n  }]);\n\n  return History;\n}(_module2.default);\n\nHistory.DEFAULTS = {\n  delay: 1000,\n  maxStack: 100,\n  userOnly: false\n};\n\nfunction endsWithNewlineChange(delta) {\n  var lastOp = delta.ops[delta.ops.length - 1];\n  if (lastOp == null) return false;\n  if (lastOp.insert != null) {\n    return typeof lastOp.insert === 'string' && lastOp.insert.endsWith('\\n');\n  }\n  if (lastOp.attributes != null) {\n    return Object.keys(lastOp.attributes).some(function (attr) {\n      return _parchment2.default.query(attr, _parchment2.default.Scope.BLOCK) != null;\n    });\n  }\n  return false;\n}\n\nfunction getLastChangeIndex(delta) {\n  var deleteLength = delta.reduce(function (length, op) {\n    length += op.delete || 0;\n    return length;\n  }, 0);\n  var changeIndex = delta.length() - deleteLength;\n  if (endsWithNewlineChange(delta)) {\n    changeIndex -= 1;\n  }\n  return changeIndex;\n}\n\nexports.default = History;\nexports.getLastChangeIndex = getLastChangeIndex;\n\n/***/ }),\n/* 43 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.BaseTooltip = undefined;\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 _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _extend = __webpack_require__(3);\n\nvar _extend2 = _interopRequireDefault(_extend);\n\nvar _quillDelta = __webpack_require__(2);\n\nvar _quillDelta2 = _interopRequireDefault(_quillDelta);\n\nvar _emitter = __webpack_require__(8);\n\nvar _emitter2 = _interopRequireDefault(_emitter);\n\nvar _keyboard = __webpack_require__(23);\n\nvar _keyboard2 = _interopRequireDefault(_keyboard);\n\nvar _theme = __webpack_require__(34);\n\nvar _theme2 = _interopRequireDefault(_theme);\n\nvar _colorPicker = __webpack_require__(59);\n\nvar _colorPicker2 = _interopRequireDefault(_colorPicker);\n\nvar _iconPicker = __webpack_require__(60);\n\nvar _iconPicker2 = _interopRequireDefault(_iconPicker);\n\nvar _picker = __webpack_require__(28);\n\nvar _picker2 = _interopRequireDefault(_picker);\n\nvar _tooltip = __webpack_require__(61);\n\nvar _tooltip2 = _interopRequireDefault(_tooltip);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ALIGNS = [false, 'center', 'right', 'justify'];\n\nvar COLORS = [\"#000000\", \"#e60000\", \"#ff9900\", \"#ffff00\", \"#008a00\", \"#0066cc\", \"#9933ff\", \"#ffffff\", \"#facccc\", \"#ffebcc\", \"#ffffcc\", \"#cce8cc\", \"#cce0f5\", \"#ebd6ff\", \"#bbbbbb\", \"#f06666\", \"#ffc266\", \"#ffff66\", \"#66b966\", \"#66a3e0\", \"#c285ff\", \"#888888\", \"#a10000\", \"#b26b00\", \"#b2b200\", \"#006100\", \"#0047b2\", \"#6b24b2\", \"#444444\", \"#5c0000\", \"#663d00\", \"#666600\", \"#003700\", \"#002966\", \"#3d1466\"];\n\nvar FONTS = [false, 'serif', 'monospace'];\n\nvar HEADERS = ['1', '2', '3', false];\n\nvar SIZES = ['small', false, 'large', 'huge'];\n\nvar BaseTheme = function (_Theme) {\n  _inherits(BaseTheme, _Theme);\n\n  function BaseTheme(quill, options) {\n    _classCallCheck(this, BaseTheme);\n\n    var _this = _possibleConstructorReturn(this, (BaseTheme.__proto__ || Object.getPrototypeOf(BaseTheme)).call(this, quill, options));\n\n    var listener = function listener(e) {\n      if (!document.body.contains(quill.root)) {\n        return document.body.removeEventListener('click', listener);\n      }\n      if (_this.tooltip != null && !_this.tooltip.root.contains(e.target) && document.activeElement !== _this.tooltip.textbox && !_this.quill.hasFocus()) {\n        _this.tooltip.hide();\n      }\n      if (_this.pickers != null) {\n        _this.pickers.forEach(function (picker) {\n          if (!picker.container.contains(e.target)) {\n            picker.close();\n          }\n        });\n      }\n    };\n    quill.emitter.listenDOM('click', document.body, listener);\n    return _this;\n  }\n\n  _createClass(BaseTheme, [{\n    key: 'addModule',\n    value: function addModule(name) {\n      var module = _get(BaseTheme.prototype.__proto__ || Object.getPrototypeOf(BaseTheme.prototype), 'addModule', this).call(this, name);\n      if (name === 'toolbar') {\n        this.extendToolbar(module);\n      }\n      return module;\n    }\n  }, {\n    key: 'buildButtons',\n    value: function buildButtons(buttons, icons) {\n      buttons.forEach(function (button) {\n        var className = button.getAttribute('class') || '';\n        className.split(/\\s+/).forEach(function (name) {\n          if (!name.startsWith('ql-')) return;\n          name = name.slice('ql-'.length);\n          if (icons[name] == null) return;\n          if (name === 'direction') {\n            button.innerHTML = icons[name][''] + icons[name]['rtl'];\n          } else if (typeof icons[name] === 'string') {\n            button.innerHTML = icons[name];\n          } else {\n            var value = button.value || '';\n            if (value != null && icons[name][value]) {\n              button.innerHTML = icons[name][value];\n            }\n          }\n        });\n      });\n    }\n  }, {\n    key: 'buildPickers',\n    value: function buildPickers(selects, icons) {\n      var _this2 = this;\n\n      this.pickers = selects.map(function (select) {\n        if (select.classList.contains('ql-align')) {\n          if (select.querySelector('option') == null) {\n            fillSelect(select, ALIGNS);\n          }\n          return new _iconPicker2.default(select, icons.align);\n        } else if (select.classList.contains('ql-background') || select.classList.contains('ql-color')) {\n          var format = select.classList.contains('ql-background') ? 'background' : 'color';\n          if (select.querySelector('option') == null) {\n            fillSelect(select, COLORS, format === 'background' ? '#ffffff' : '#000000');\n          }\n          return new _colorPicker2.default(select, icons[format]);\n        } else {\n          if (select.querySelector('option') == null) {\n            if (select.classList.contains('ql-font')) {\n              fillSelect(select, FONTS);\n            } else if (select.classList.contains('ql-header')) {\n              fillSelect(select, HEADERS);\n            } else if (select.classList.contains('ql-size')) {\n              fillSelect(select, SIZES);\n            }\n          }\n          return new _picker2.default(select);\n        }\n      });\n      var update = function update() {\n        _this2.pickers.forEach(function (picker) {\n          picker.update();\n        });\n      };\n      this.quill.on(_emitter2.default.events.EDITOR_CHANGE, update);\n    }\n  }]);\n\n  return BaseTheme;\n}(_theme2.default);\n\nBaseTheme.DEFAULTS = (0, _extend2.default)(true, {}, _theme2.default.DEFAULTS, {\n  modules: {\n    toolbar: {\n      handlers: {\n        formula: function formula() {\n          this.quill.theme.tooltip.edit('formula');\n        },\n        image: function image() {\n          var _this3 = this;\n\n          var fileInput = this.container.querySelector('input.ql-image[type=file]');\n          if (fileInput == null) {\n            fileInput = document.createElement('input');\n            fileInput.setAttribute('type', 'file');\n            fileInput.setAttribute('accept', 'image/png, image/gif, image/jpeg, image/bmp, image/x-icon');\n            fileInput.classList.add('ql-image');\n            fileInput.addEventListener('change', function () {\n              if (fileInput.files != null && fileInput.files[0] != null) {\n                var reader = new FileReader();\n                reader.onload = function (e) {\n                  var range = _this3.quill.getSelection(true);\n                  _this3.quill.updateContents(new _quillDelta2.default().retain(range.index).delete(range.length).insert({ image: e.target.result }), _emitter2.default.sources.USER);\n                  _this3.quill.setSelection(range.index + 1, _emitter2.default.sources.SILENT);\n                  fileInput.value = \"\";\n                };\n                reader.readAsDataURL(fileInput.files[0]);\n              }\n            });\n            this.container.appendChild(fileInput);\n          }\n          fileInput.click();\n        },\n        video: function video() {\n          this.quill.theme.tooltip.edit('video');\n        }\n      }\n    }\n  }\n});\n\nvar BaseTooltip = function (_Tooltip) {\n  _inherits(BaseTooltip, _Tooltip);\n\n  function BaseTooltip(quill, boundsContainer) {\n    _classCallCheck(this, BaseTooltip);\n\n    var _this4 = _possibleConstructorReturn(this, (BaseTooltip.__proto__ || Object.getPrototypeOf(BaseTooltip)).call(this, quill, boundsContainer));\n\n    _this4.textbox = _this4.root.querySelector('input[type=\"text\"]');\n    _this4.listen();\n    return _this4;\n  }\n\n  _createClass(BaseTooltip, [{\n    key: 'listen',\n    value: function listen() {\n      var _this5 = this;\n\n      this.textbox.addEventListener('keydown', function (event) {\n        if (_keyboard2.default.match(event, 'enter')) {\n          _this5.save();\n          event.preventDefault();\n        } else if (_keyboard2.default.match(event, 'escape')) {\n          _this5.cancel();\n          event.preventDefault();\n        }\n      });\n    }\n  }, {\n    key: 'cancel',\n    value: function cancel() {\n      this.hide();\n    }\n  }, {\n    key: 'edit',\n    value: function edit() {\n      var mode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'link';\n      var preview = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n      this.root.classList.remove('ql-hidden');\n      this.root.classList.add('ql-editing');\n      if (preview != null) {\n        this.textbox.value = preview;\n      } else if (mode !== this.root.getAttribute('data-mode')) {\n        this.textbox.value = '';\n      }\n      this.position(this.quill.getBounds(this.quill.selection.savedRange));\n      this.textbox.select();\n      this.textbox.setAttribute('placeholder', this.textbox.getAttribute('data-' + mode) || '');\n      this.root.setAttribute('data-mode', mode);\n    }\n  }, {\n    key: 'restoreFocus',\n    value: function restoreFocus() {\n      var scrollTop = this.quill.scrollingContainer.scrollTop;\n      this.quill.focus();\n      this.quill.scrollingContainer.scrollTop = scrollTop;\n    }\n  }, {\n    key: 'save',\n    value: function save() {\n      var value = this.textbox.value;\n      switch (this.root.getAttribute('data-mode')) {\n        case 'link':\n          {\n            var scrollTop = this.quill.root.scrollTop;\n            if (this.linkRange) {\n              this.quill.formatText(this.linkRange, 'link', value, _emitter2.default.sources.USER);\n              delete this.linkRange;\n            } else {\n              this.restoreFocus();\n              this.quill.format('link', value, _emitter2.default.sources.USER);\n            }\n            this.quill.root.scrollTop = scrollTop;\n            break;\n          }\n        case 'video':\n          {\n            value = extractVideoUrl(value);\n          } // eslint-disable-next-line no-fallthrough\n        case 'formula':\n          {\n            if (!value) break;\n            var range = this.quill.getSelection(true);\n            if (range != null) {\n              var index = range.index + range.length;\n              this.quill.insertEmbed(index, this.root.getAttribute('data-mode'), value, _emitter2.default.sources.USER);\n              if (this.root.getAttribute('data-mode') === 'formula') {\n                this.quill.insertText(index + 1, ' ', _emitter2.default.sources.USER);\n              }\n              this.quill.setSelection(index + 2, _emitter2.default.sources.USER);\n            }\n            break;\n          }\n        default:\n      }\n      this.textbox.value = '';\n      this.hide();\n    }\n  }]);\n\n  return BaseTooltip;\n}(_tooltip2.default);\n\nfunction extractVideoUrl(url) {\n  var match = url.match(/^(?:(https?):\\/\\/)?(?:(?:www|m)\\.)?youtube\\.com\\/watch.*v=([a-zA-Z0-9_-]+)/) || url.match(/^(?:(https?):\\/\\/)?(?:(?:www|m)\\.)?youtu\\.be\\/([a-zA-Z0-9_-]+)/);\n  if (match) {\n    return (match[1] || 'https') + '://www.youtube.com/embed/' + match[2] + '?showinfo=0';\n  }\n  if (match = url.match(/^(?:(https?):\\/\\/)?(?:www\\.)?vimeo\\.com\\/(\\d+)/)) {\n    // eslint-disable-line no-cond-assign\n    return (match[1] || 'https') + '://player.vimeo.com/video/' + match[2] + '/';\n  }\n  return url;\n}\n\nfunction fillSelect(select, values) {\n  var defaultValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n  values.forEach(function (value) {\n    var option = document.createElement('option');\n    if (value === defaultValue) {\n      option.setAttribute('selected', 'selected');\n    } else {\n      option.setAttribute('value', value);\n    }\n    select.appendChild(option);\n  });\n}\n\nexports.BaseTooltip = BaseTooltip;\nexports.default = BaseTheme;\n\n/***/ }),\n/* 44 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar LinkedList = /** @class */ (function () {\n    function LinkedList() {\n        this.head = this.tail = null;\n        this.length = 0;\n    }\n    LinkedList.prototype.append = function () {\n        var nodes = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            nodes[_i] = arguments[_i];\n        }\n        this.insertBefore(nodes[0], null);\n        if (nodes.length > 1) {\n            this.append.apply(this, nodes.slice(1));\n        }\n    };\n    LinkedList.prototype.contains = function (node) {\n        var cur, next = this.iterator();\n        while ((cur = next())) {\n            if (cur === node)\n                return true;\n        }\n        return false;\n    };\n    LinkedList.prototype.insertBefore = function (node, refNode) {\n        if (!node)\n            return;\n        node.next = refNode;\n        if (refNode != null) {\n            node.prev = refNode.prev;\n            if (refNode.prev != null) {\n                refNode.prev.next = node;\n            }\n            refNode.prev = node;\n            if (refNode === this.head) {\n                this.head = node;\n            }\n        }\n        else if (this.tail != null) {\n            this.tail.next = node;\n            node.prev = this.tail;\n            this.tail = node;\n        }\n        else {\n            node.prev = null;\n            this.head = this.tail = node;\n        }\n        this.length += 1;\n    };\n    LinkedList.prototype.offset = function (target) {\n        var index = 0, cur = this.head;\n        while (cur != null) {\n            if (cur === target)\n                return index;\n            index += cur.length();\n            cur = cur.next;\n        }\n        return -1;\n    };\n    LinkedList.prototype.remove = function (node) {\n        if (!this.contains(node))\n            return;\n        if (node.prev != null)\n            node.prev.next = node.next;\n        if (node.next != null)\n            node.next.prev = node.prev;\n        if (node === this.head)\n            this.head = node.next;\n        if (node === this.tail)\n            this.tail = node.prev;\n        this.length -= 1;\n    };\n    LinkedList.prototype.iterator = function (curNode) {\n        if (curNode === void 0) { curNode = this.head; }\n        // TODO use yield when we can\n        return function () {\n            var ret = curNode;\n            if (curNode != null)\n                curNode = curNode.next;\n            return ret;\n        };\n    };\n    LinkedList.prototype.find = function (index, inclusive) {\n        if (inclusive === void 0) { inclusive = false; }\n        var cur, next = this.iterator();\n        while ((cur = next())) {\n            var length = cur.length();\n            if (index < length ||\n                (inclusive && index === length && (cur.next == null || cur.next.length() !== 0))) {\n                return [cur, index];\n            }\n            index -= length;\n        }\n        return [null, 0];\n    };\n    LinkedList.prototype.forEach = function (callback) {\n        var cur, next = this.iterator();\n        while ((cur = next())) {\n            callback(cur);\n        }\n    };\n    LinkedList.prototype.forEachAt = function (index, length, callback) {\n        if (length <= 0)\n            return;\n        var _a = this.find(index), startNode = _a[0], offset = _a[1];\n        var cur, curIndex = index - offset, next = this.iterator(startNode);\n        while ((cur = next()) && curIndex < index + length) {\n            var curLength = cur.length();\n            if (index > curIndex) {\n                callback(cur, index - curIndex, Math.min(length, curIndex + curLength - index));\n            }\n            else {\n                callback(cur, 0, Math.min(curLength, index + length - curIndex));\n            }\n            curIndex += curLength;\n        }\n    };\n    LinkedList.prototype.map = function (callback) {\n        return this.reduce(function (memo, cur) {\n            memo.push(callback(cur));\n            return memo;\n        }, []);\n    };\n    LinkedList.prototype.reduce = function (callback, memo) {\n        var cur, next = this.iterator();\n        while ((cur = next())) {\n            memo = callback(memo, cur);\n        }\n        return memo;\n    };\n    return LinkedList;\n}());\nexports.default = LinkedList;\n\n\n/***/ }),\n/* 45 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar container_1 = __webpack_require__(17);\nvar Registry = __webpack_require__(1);\nvar OBSERVER_CONFIG = {\n    attributes: true,\n    characterData: true,\n    characterDataOldValue: true,\n    childList: true,\n    subtree: true,\n};\nvar MAX_OPTIMIZE_ITERATIONS = 100;\nvar ScrollBlot = /** @class */ (function (_super) {\n    __extends(ScrollBlot, _super);\n    function ScrollBlot(node) {\n        var _this = _super.call(this, node) || this;\n        _this.scroll = _this;\n        _this.observer = new MutationObserver(function (mutations) {\n            _this.update(mutations);\n        });\n        _this.observer.observe(_this.domNode, OBSERVER_CONFIG);\n        _this.attach();\n        return _this;\n    }\n    ScrollBlot.prototype.detach = function () {\n        _super.prototype.detach.call(this);\n        this.observer.disconnect();\n    };\n    ScrollBlot.prototype.deleteAt = function (index, length) {\n        this.update();\n        if (index === 0 && length === this.length()) {\n            this.children.forEach(function (child) {\n                child.remove();\n            });\n        }\n        else {\n            _super.prototype.deleteAt.call(this, index, length);\n        }\n    };\n    ScrollBlot.prototype.formatAt = function (index, length, name, value) {\n        this.update();\n        _super.prototype.formatAt.call(this, index, length, name, value);\n    };\n    ScrollBlot.prototype.insertAt = function (index, value, def) {\n        this.update();\n        _super.prototype.insertAt.call(this, index, value, def);\n    };\n    ScrollBlot.prototype.optimize = function (mutations, context) {\n        var _this = this;\n        if (mutations === void 0) { mutations = []; }\n        if (context === void 0) { context = {}; }\n        _super.prototype.optimize.call(this, context);\n        // We must modify mutations directly, cannot make copy and then modify\n        var records = [].slice.call(this.observer.takeRecords());\n        // Array.push currently seems to be implemented by a non-tail recursive function\n        // so we cannot just mutations.push.apply(mutations, this.observer.takeRecords());\n        while (records.length > 0)\n            mutations.push(records.pop());\n        // TODO use WeakMap\n        var mark = function (blot, markParent) {\n            if (markParent === void 0) { markParent = true; }\n            if (blot == null || blot === _this)\n                return;\n            if (blot.domNode.parentNode == null)\n                return;\n            // @ts-ignore\n            if (blot.domNode[Registry.DATA_KEY].mutations == null) {\n                // @ts-ignore\n                blot.domNode[Registry.DATA_KEY].mutations = [];\n            }\n            if (markParent)\n                mark(blot.parent);\n        };\n        var optimize = function (blot) {\n            // Post-order traversal\n            if (\n            // @ts-ignore\n            blot.domNode[Registry.DATA_KEY] == null ||\n                // @ts-ignore\n                blot.domNode[Registry.DATA_KEY].mutations == null) {\n                return;\n            }\n            if (blot instanceof container_1.default) {\n                blot.children.forEach(optimize);\n            }\n            blot.optimize(context);\n        };\n        var remaining = mutations;\n        for (var i = 0; remaining.length > 0; i += 1) {\n            if (i >= MAX_OPTIMIZE_ITERATIONS) {\n                throw new Error('[Parchment] Maximum optimize iterations reached');\n            }\n            remaining.forEach(function (mutation) {\n                var blot = Registry.find(mutation.target, true);\n                if (blot == null)\n                    return;\n                if (blot.domNode === mutation.target) {\n                    if (mutation.type === 'childList') {\n                        mark(Registry.find(mutation.previousSibling, false));\n                        [].forEach.call(mutation.addedNodes, function (node) {\n                            var child = Registry.find(node, false);\n                            mark(child, false);\n                            if (child instanceof container_1.default) {\n                                child.children.forEach(function (grandChild) {\n                                    mark(grandChild, false);\n                                });\n                            }\n                        });\n                    }\n                    else if (mutation.type === 'attributes') {\n                        mark(blot.prev);\n                    }\n                }\n                mark(blot);\n            });\n            this.children.forEach(optimize);\n            remaining = [].slice.call(this.observer.takeRecords());\n            records = remaining.slice();\n            while (records.length > 0)\n                mutations.push(records.pop());\n        }\n    };\n    ScrollBlot.prototype.update = function (mutations, context) {\n        var _this = this;\n        if (context === void 0) { context = {}; }\n        mutations = mutations || this.observer.takeRecords();\n        // TODO use WeakMap\n        mutations\n            .map(function (mutation) {\n            var blot = Registry.find(mutation.target, true);\n            if (blot == null)\n                return null;\n            // @ts-ignore\n            if (blot.domNode[Registry.DATA_KEY].mutations == null) {\n                // @ts-ignore\n                blot.domNode[Registry.DATA_KEY].mutations = [mutation];\n                return blot;\n            }\n            else {\n                // @ts-ignore\n                blot.domNode[Registry.DATA_KEY].mutations.push(mutation);\n                return null;\n            }\n        })\n            .forEach(function (blot) {\n            if (blot == null ||\n                blot === _this ||\n                //@ts-ignore\n                blot.domNode[Registry.DATA_KEY] == null)\n                return;\n            // @ts-ignore\n            blot.update(blot.domNode[Registry.DATA_KEY].mutations || [], context);\n        });\n        // @ts-ignore\n        if (this.domNode[Registry.DATA_KEY].mutations != null) {\n            // @ts-ignore\n            _super.prototype.update.call(this, this.domNode[Registry.DATA_KEY].mutations, context);\n        }\n        this.optimize(mutations, context);\n    };\n    ScrollBlot.blotName = 'scroll';\n    ScrollBlot.defaultChild = 'block';\n    ScrollBlot.scope = Registry.Scope.BLOCK_BLOT;\n    ScrollBlot.tagName = 'DIV';\n    return ScrollBlot;\n}(container_1.default));\nexports.default = ScrollBlot;\n\n\n/***/ }),\n/* 46 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar format_1 = __webpack_require__(18);\nvar Registry = __webpack_require__(1);\n// Shallow object comparison\nfunction isEqual(obj1, obj2) {\n    if (Object.keys(obj1).length !== Object.keys(obj2).length)\n        return false;\n    // @ts-ignore\n    for (var prop in obj1) {\n        // @ts-ignore\n        if (obj1[prop] !== obj2[prop])\n            return false;\n    }\n    return true;\n}\nvar InlineBlot = /** @class */ (function (_super) {\n    __extends(InlineBlot, _super);\n    function InlineBlot() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    InlineBlot.formats = function (domNode) {\n        if (domNode.tagName === InlineBlot.tagName)\n            return undefined;\n        return _super.formats.call(this, domNode);\n    };\n    InlineBlot.prototype.format = function (name, value) {\n        var _this = this;\n        if (name === this.statics.blotName && !value) {\n            this.children.forEach(function (child) {\n                if (!(child instanceof format_1.default)) {\n                    child = child.wrap(InlineBlot.blotName, true);\n                }\n                _this.attributes.copy(child);\n            });\n            this.unwrap();\n        }\n        else {\n            _super.prototype.format.call(this, name, value);\n        }\n    };\n    InlineBlot.prototype.formatAt = function (index, length, name, value) {\n        if (this.formats()[name] != null || Registry.query(name, Registry.Scope.ATTRIBUTE)) {\n            var blot = this.isolate(index, length);\n            blot.format(name, value);\n        }\n        else {\n            _super.prototype.formatAt.call(this, index, length, name, value);\n        }\n    };\n    InlineBlot.prototype.optimize = function (context) {\n        _super.prototype.optimize.call(this, context);\n        var formats = this.formats();\n        if (Object.keys(formats).length === 0) {\n            return this.unwrap(); // unformatted span\n        }\n        var next = this.next;\n        if (next instanceof InlineBlot && next.prev === this && isEqual(formats, next.formats())) {\n            next.moveChildren(this);\n            next.remove();\n        }\n    };\n    InlineBlot.blotName = 'inline';\n    InlineBlot.scope = Registry.Scope.INLINE_BLOT;\n    InlineBlot.tagName = 'SPAN';\n    return InlineBlot;\n}(format_1.default));\nexports.default = InlineBlot;\n\n\n/***/ }),\n/* 47 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar format_1 = __webpack_require__(18);\nvar Registry = __webpack_require__(1);\nvar BlockBlot = /** @class */ (function (_super) {\n    __extends(BlockBlot, _super);\n    function BlockBlot() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    BlockBlot.formats = function (domNode) {\n        var tagName = Registry.query(BlockBlot.blotName).tagName;\n        if (domNode.tagName === tagName)\n            return undefined;\n        return _super.formats.call(this, domNode);\n    };\n    BlockBlot.prototype.format = function (name, value) {\n        if (Registry.query(name, Registry.Scope.BLOCK) == null) {\n            return;\n        }\n        else if (name === this.statics.blotName && !value) {\n            this.replaceWith(BlockBlot.blotName);\n        }\n        else {\n            _super.prototype.format.call(this, name, value);\n        }\n    };\n    BlockBlot.prototype.formatAt = function (index, length, name, value) {\n        if (Registry.query(name, Registry.Scope.BLOCK) != null) {\n            this.format(name, value);\n        }\n        else {\n            _super.prototype.formatAt.call(this, index, length, name, value);\n        }\n    };\n    BlockBlot.prototype.insertAt = function (index, value, def) {\n        if (def == null || Registry.query(value, Registry.Scope.INLINE) != null) {\n            // Insert text or inline\n            _super.prototype.insertAt.call(this, index, value, def);\n        }\n        else {\n            var after = this.split(index);\n            var blot = Registry.create(value, def);\n            after.parent.insertBefore(blot, after);\n        }\n    };\n    BlockBlot.prototype.update = function (mutations, context) {\n        if (navigator.userAgent.match(/Trident/)) {\n            this.build();\n        }\n        else {\n            _super.prototype.update.call(this, mutations, context);\n        }\n    };\n    BlockBlot.blotName = 'block';\n    BlockBlot.scope = Registry.Scope.BLOCK_BLOT;\n    BlockBlot.tagName = 'P';\n    return BlockBlot;\n}(format_1.default));\nexports.default = BlockBlot;\n\n\n/***/ }),\n/* 48 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar leaf_1 = __webpack_require__(19);\nvar EmbedBlot = /** @class */ (function (_super) {\n    __extends(EmbedBlot, _super);\n    function EmbedBlot() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    EmbedBlot.formats = function (domNode) {\n        return undefined;\n    };\n    EmbedBlot.prototype.format = function (name, value) {\n        // super.formatAt wraps, which is what we want in general,\n        // but this allows subclasses to overwrite for formats\n        // that just apply to particular embeds\n        _super.prototype.formatAt.call(this, 0, this.length(), name, value);\n    };\n    EmbedBlot.prototype.formatAt = function (index, length, name, value) {\n        if (index === 0 && length === this.length()) {\n            this.format(name, value);\n        }\n        else {\n            _super.prototype.formatAt.call(this, index, length, name, value);\n        }\n    };\n    EmbedBlot.prototype.formats = function () {\n        return this.statics.formats(this.domNode);\n    };\n    return EmbedBlot;\n}(leaf_1.default));\nexports.default = EmbedBlot;\n\n\n/***/ }),\n/* 49 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar leaf_1 = __webpack_require__(19);\nvar Registry = __webpack_require__(1);\nvar TextBlot = /** @class */ (function (_super) {\n    __extends(TextBlot, _super);\n    function TextBlot(node) {\n        var _this = _super.call(this, node) || this;\n        _this.text = _this.statics.value(_this.domNode);\n        return _this;\n    }\n    TextBlot.create = function (value) {\n        return document.createTextNode(value);\n    };\n    TextBlot.value = function (domNode) {\n        var text = domNode.data;\n        // @ts-ignore\n        if (text['normalize'])\n            text = text['normalize']();\n        return text;\n    };\n    TextBlot.prototype.deleteAt = function (index, length) {\n        this.domNode.data = this.text = this.text.slice(0, index) + this.text.slice(index + length);\n    };\n    TextBlot.prototype.index = function (node, offset) {\n        if (this.domNode === node) {\n            return offset;\n        }\n        return -1;\n    };\n    TextBlot.prototype.insertAt = function (index, value, def) {\n        if (def == null) {\n            this.text = this.text.slice(0, index) + value + this.text.slice(index);\n            this.domNode.data = this.text;\n        }\n        else {\n            _super.prototype.insertAt.call(this, index, value, def);\n        }\n    };\n    TextBlot.prototype.length = function () {\n        return this.text.length;\n    };\n    TextBlot.prototype.optimize = function (context) {\n        _super.prototype.optimize.call(this, context);\n        this.text = this.statics.value(this.domNode);\n        if (this.text.length === 0) {\n            this.remove();\n        }\n        else if (this.next instanceof TextBlot && this.next.prev === this) {\n            this.insertAt(this.length(), this.next.value());\n            this.next.remove();\n        }\n    };\n    TextBlot.prototype.position = function (index, inclusive) {\n        if (inclusive === void 0) { inclusive = false; }\n        return [this.domNode, index];\n    };\n    TextBlot.prototype.split = function (index, force) {\n        if (force === void 0) { force = false; }\n        if (!force) {\n            if (index === 0)\n                return this;\n            if (index === this.length())\n                return this.next;\n        }\n        var after = Registry.create(this.domNode.splitText(index));\n        this.parent.insertBefore(after, this.next);\n        this.text = this.statics.value(this.domNode);\n        return after;\n    };\n    TextBlot.prototype.update = function (mutations, context) {\n        var _this = this;\n        if (mutations.some(function (mutation) {\n            return mutation.type === 'characterData' && mutation.target === _this.domNode;\n        })) {\n            this.text = this.statics.value(this.domNode);\n        }\n    };\n    TextBlot.prototype.value = function () {\n        return this.text;\n    };\n    TextBlot.blotName = 'text';\n    TextBlot.scope = Registry.Scope.INLINE_BLOT;\n    return TextBlot;\n}(leaf_1.default));\nexports.default = TextBlot;\n\n\n/***/ }),\n/* 50 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar elem = document.createElement('div');\nelem.classList.toggle('test-class', false);\nif (elem.classList.contains('test-class')) {\n  var _toggle = DOMTokenList.prototype.toggle;\n  DOMTokenList.prototype.toggle = function (token, force) {\n    if (arguments.length > 1 && !this.contains(token) === !force) {\n      return force;\n    } else {\n      return _toggle.call(this, token);\n    }\n  };\n}\n\nif (!String.prototype.startsWith) {\n  String.prototype.startsWith = function (searchString, position) {\n    position = position || 0;\n    return this.substr(position, searchString.length) === searchString;\n  };\n}\n\nif (!String.prototype.endsWith) {\n  String.prototype.endsWith = function (searchString, position) {\n    var subjectString = this.toString();\n    if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) {\n      position = subjectString.length;\n    }\n    position -= searchString.length;\n    var lastIndex = subjectString.indexOf(searchString, position);\n    return lastIndex !== -1 && lastIndex === position;\n  };\n}\n\nif (!Array.prototype.find) {\n  Object.defineProperty(Array.prototype, \"find\", {\n    value: function value(predicate) {\n      if (this === null) {\n        throw new TypeError('Array.prototype.find called on null or undefined');\n      }\n      if (typeof predicate !== 'function') {\n        throw new TypeError('predicate must be a function');\n      }\n      var list = Object(this);\n      var length = list.length >>> 0;\n      var thisArg = arguments[1];\n      var value;\n\n      for (var i = 0; i < length; i++) {\n        value = list[i];\n        if (predicate.call(thisArg, value, i, list)) {\n          return value;\n        }\n      }\n      return undefined;\n    }\n  });\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n  // Disable resizing in Firefox\n  document.execCommand(\"enableObjectResizing\", false, false);\n  // Disable automatic linkifying in IE11\n  document.execCommand(\"autoUrlDetect\", false, false);\n});\n\n/***/ }),\n/* 51 */\n/***/ (function(module, exports) {\n\n/**\n * This library modifies the diff-patch-match library by Neil Fraser\n * by removing the patch and match functionality and certain advanced\n * options in the diff function. The original license is as follows:\n *\n * ===\n *\n * Diff Match and Patch\n *\n * Copyright 2006 Google Inc.\n * http://code.google.com/p/google-diff-match-patch/\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/**\n * The data structure representing a diff is an array of tuples:\n * [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']]\n * which means: delete 'Hello', add 'Goodbye' and keep ' world.'\n */\nvar DIFF_DELETE = -1;\nvar DIFF_INSERT = 1;\nvar DIFF_EQUAL = 0;\n\n\n/**\n * Find the differences between two texts.  Simplifies the problem by stripping\n * any common prefix or suffix off the texts before diffing.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {Int} cursor_pos Expected edit position in text1 (optional)\n * @return {Array} Array of diff tuples.\n */\nfunction diff_main(text1, text2, cursor_pos) {\n  // Check for equality (speedup).\n  if (text1 == text2) {\n    if (text1) {\n      return [[DIFF_EQUAL, text1]];\n    }\n    return [];\n  }\n\n  // Check cursor_pos within bounds\n  if (cursor_pos < 0 || text1.length < cursor_pos) {\n    cursor_pos = null;\n  }\n\n  // Trim off common prefix (speedup).\n  var commonlength = diff_commonPrefix(text1, text2);\n  var commonprefix = text1.substring(0, commonlength);\n  text1 = text1.substring(commonlength);\n  text2 = text2.substring(commonlength);\n\n  // Trim off common suffix (speedup).\n  commonlength = diff_commonSuffix(text1, text2);\n  var commonsuffix = text1.substring(text1.length - commonlength);\n  text1 = text1.substring(0, text1.length - commonlength);\n  text2 = text2.substring(0, text2.length - commonlength);\n\n  // Compute the diff on the middle block.\n  var diffs = diff_compute_(text1, text2);\n\n  // Restore the prefix and suffix.\n  if (commonprefix) {\n    diffs.unshift([DIFF_EQUAL, commonprefix]);\n  }\n  if (commonsuffix) {\n    diffs.push([DIFF_EQUAL, commonsuffix]);\n  }\n  diff_cleanupMerge(diffs);\n  if (cursor_pos != null) {\n    diffs = fix_cursor(diffs, cursor_pos);\n  }\n  diffs = fix_emoji(diffs);\n  return diffs;\n};\n\n\n/**\n * Find the differences between two texts.  Assumes that the texts do not\n * have any common prefix or suffix.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @return {Array} Array of diff tuples.\n */\nfunction diff_compute_(text1, text2) {\n  var diffs;\n\n  if (!text1) {\n    // Just add some text (speedup).\n    return [[DIFF_INSERT, text2]];\n  }\n\n  if (!text2) {\n    // Just delete some text (speedup).\n    return [[DIFF_DELETE, text1]];\n  }\n\n  var longtext = text1.length > text2.length ? text1 : text2;\n  var shorttext = text1.length > text2.length ? text2 : text1;\n  var i = longtext.indexOf(shorttext);\n  if (i != -1) {\n    // Shorter text is inside the longer text (speedup).\n    diffs = [[DIFF_INSERT, longtext.substring(0, i)],\n             [DIFF_EQUAL, shorttext],\n             [DIFF_INSERT, longtext.substring(i + shorttext.length)]];\n    // Swap insertions for deletions if diff is reversed.\n    if (text1.length > text2.length) {\n      diffs[0][0] = diffs[2][0] = DIFF_DELETE;\n    }\n    return diffs;\n  }\n\n  if (shorttext.length == 1) {\n    // Single character string.\n    // After the previous speedup, the character can't be an equality.\n    return [[DIFF_DELETE, text1], [DIFF_INSERT, text2]];\n  }\n\n  // Check to see if the problem can be split in two.\n  var hm = diff_halfMatch_(text1, text2);\n  if (hm) {\n    // A half-match was found, sort out the return data.\n    var text1_a = hm[0];\n    var text1_b = hm[1];\n    var text2_a = hm[2];\n    var text2_b = hm[3];\n    var mid_common = hm[4];\n    // Send both pairs off for separate processing.\n    var diffs_a = diff_main(text1_a, text2_a);\n    var diffs_b = diff_main(text1_b, text2_b);\n    // Merge the results.\n    return diffs_a.concat([[DIFF_EQUAL, mid_common]], diffs_b);\n  }\n\n  return diff_bisect_(text1, text2);\n};\n\n\n/**\n * Find the 'middle snake' of a diff, split the problem in two\n * and return the recursively constructed diff.\n * See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @return {Array} Array of diff tuples.\n * @private\n */\nfunction diff_bisect_(text1, text2) {\n  // Cache the text lengths to prevent multiple calls.\n  var text1_length = text1.length;\n  var text2_length = text2.length;\n  var max_d = Math.ceil((text1_length + text2_length) / 2);\n  var v_offset = max_d;\n  var v_length = 2 * max_d;\n  var v1 = new Array(v_length);\n  var v2 = new Array(v_length);\n  // Setting all elements to -1 is faster in Chrome & Firefox than mixing\n  // integers and undefined.\n  for (var x = 0; x < v_length; x++) {\n    v1[x] = -1;\n    v2[x] = -1;\n  }\n  v1[v_offset + 1] = 0;\n  v2[v_offset + 1] = 0;\n  var delta = text1_length - text2_length;\n  // If the total number of characters is odd, then the front path will collide\n  // with the reverse path.\n  var front = (delta % 2 != 0);\n  // Offsets for start and end of k loop.\n  // Prevents mapping of space beyond the grid.\n  var k1start = 0;\n  var k1end = 0;\n  var k2start = 0;\n  var k2end = 0;\n  for (var d = 0; d < max_d; d++) {\n    // Walk the front path one step.\n    for (var k1 = -d + k1start; k1 <= d - k1end; k1 += 2) {\n      var k1_offset = v_offset + k1;\n      var x1;\n      if (k1 == -d || (k1 != d && v1[k1_offset - 1] < v1[k1_offset + 1])) {\n        x1 = v1[k1_offset + 1];\n      } else {\n        x1 = v1[k1_offset - 1] + 1;\n      }\n      var y1 = x1 - k1;\n      while (x1 < text1_length && y1 < text2_length &&\n             text1.charAt(x1) == text2.charAt(y1)) {\n        x1++;\n        y1++;\n      }\n      v1[k1_offset] = x1;\n      if (x1 > text1_length) {\n        // Ran off the right of the graph.\n        k1end += 2;\n      } else if (y1 > text2_length) {\n        // Ran off the bottom of the graph.\n        k1start += 2;\n      } else if (front) {\n        var k2_offset = v_offset + delta - k1;\n        if (k2_offset >= 0 && k2_offset < v_length && v2[k2_offset] != -1) {\n          // Mirror x2 onto top-left coordinate system.\n          var x2 = text1_length - v2[k2_offset];\n          if (x1 >= x2) {\n            // Overlap detected.\n            return diff_bisectSplit_(text1, text2, x1, y1);\n          }\n        }\n      }\n    }\n\n    // Walk the reverse path one step.\n    for (var k2 = -d + k2start; k2 <= d - k2end; k2 += 2) {\n      var k2_offset = v_offset + k2;\n      var x2;\n      if (k2 == -d || (k2 != d && v2[k2_offset - 1] < v2[k2_offset + 1])) {\n        x2 = v2[k2_offset + 1];\n      } else {\n        x2 = v2[k2_offset - 1] + 1;\n      }\n      var y2 = x2 - k2;\n      while (x2 < text1_length && y2 < text2_length &&\n             text1.charAt(text1_length - x2 - 1) ==\n             text2.charAt(text2_length - y2 - 1)) {\n        x2++;\n        y2++;\n      }\n      v2[k2_offset] = x2;\n      if (x2 > text1_length) {\n        // Ran off the left of the graph.\n        k2end += 2;\n      } else if (y2 > text2_length) {\n        // Ran off the top of the graph.\n        k2start += 2;\n      } else if (!front) {\n        var k1_offset = v_offset + delta - k2;\n        if (k1_offset >= 0 && k1_offset < v_length && v1[k1_offset] != -1) {\n          var x1 = v1[k1_offset];\n          var y1 = v_offset + x1 - k1_offset;\n          // Mirror x2 onto top-left coordinate system.\n          x2 = text1_length - x2;\n          if (x1 >= x2) {\n            // Overlap detected.\n            return diff_bisectSplit_(text1, text2, x1, y1);\n          }\n        }\n      }\n    }\n  }\n  // Diff took too long and hit the deadline or\n  // number of diffs equals number of characters, no commonality at all.\n  return [[DIFF_DELETE, text1], [DIFF_INSERT, text2]];\n};\n\n\n/**\n * Given the location of the 'middle snake', split the diff in two parts\n * and recurse.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {number} x Index of split point in text1.\n * @param {number} y Index of split point in text2.\n * @return {Array} Array of diff tuples.\n */\nfunction diff_bisectSplit_(text1, text2, x, y) {\n  var text1a = text1.substring(0, x);\n  var text2a = text2.substring(0, y);\n  var text1b = text1.substring(x);\n  var text2b = text2.substring(y);\n\n  // Compute both diffs serially.\n  var diffs = diff_main(text1a, text2a);\n  var diffsb = diff_main(text1b, text2b);\n\n  return diffs.concat(diffsb);\n};\n\n\n/**\n * Determine the common prefix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the start of each\n *     string.\n */\nfunction diff_commonPrefix(text1, text2) {\n  // Quick check for common null cases.\n  if (!text1 || !text2 || text1.charAt(0) != text2.charAt(0)) {\n    return 0;\n  }\n  // Binary search.\n  // Performance analysis: http://neil.fraser.name/news/2007/10/09/\n  var pointermin = 0;\n  var pointermax = Math.min(text1.length, text2.length);\n  var pointermid = pointermax;\n  var pointerstart = 0;\n  while (pointermin < pointermid) {\n    if (text1.substring(pointerstart, pointermid) ==\n        text2.substring(pointerstart, pointermid)) {\n      pointermin = pointermid;\n      pointerstart = pointermin;\n    } else {\n      pointermax = pointermid;\n    }\n    pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n  }\n  return pointermid;\n};\n\n\n/**\n * Determine the common suffix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the end of each string.\n */\nfunction diff_commonSuffix(text1, text2) {\n  // Quick check for common null cases.\n  if (!text1 || !text2 ||\n      text1.charAt(text1.length - 1) != text2.charAt(text2.length - 1)) {\n    return 0;\n  }\n  // Binary search.\n  // Performance analysis: http://neil.fraser.name/news/2007/10/09/\n  var pointermin = 0;\n  var pointermax = Math.min(text1.length, text2.length);\n  var pointermid = pointermax;\n  var pointerend = 0;\n  while (pointermin < pointermid) {\n    if (text1.substring(text1.length - pointermid, text1.length - pointerend) ==\n        text2.substring(text2.length - pointermid, text2.length - pointerend)) {\n      pointermin = pointermid;\n      pointerend = pointermin;\n    } else {\n      pointermax = pointermid;\n    }\n    pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n  }\n  return pointermid;\n};\n\n\n/**\n * Do the two texts share a substring which is at least half the length of the\n * longer text?\n * This speedup can produce non-minimal diffs.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {Array.<string>} Five element Array, containing the prefix of\n *     text1, the suffix of text1, the prefix of text2, the suffix of\n *     text2 and the common middle.  Or null if there was no match.\n */\nfunction diff_halfMatch_(text1, text2) {\n  var longtext = text1.length > text2.length ? text1 : text2;\n  var shorttext = text1.length > text2.length ? text2 : text1;\n  if (longtext.length < 4 || shorttext.length * 2 < longtext.length) {\n    return null;  // Pointless.\n  }\n\n  /**\n   * Does a substring of shorttext exist within longtext such that the substring\n   * is at least half the length of longtext?\n   * Closure, but does not reference any external variables.\n   * @param {string} longtext Longer string.\n   * @param {string} shorttext Shorter string.\n   * @param {number} i Start index of quarter length substring within longtext.\n   * @return {Array.<string>} Five element Array, containing the prefix of\n   *     longtext, the suffix of longtext, the prefix of shorttext, the suffix\n   *     of shorttext and the common middle.  Or null if there was no match.\n   * @private\n   */\n  function diff_halfMatchI_(longtext, shorttext, i) {\n    // Start with a 1/4 length substring at position i as a seed.\n    var seed = longtext.substring(i, i + Math.floor(longtext.length / 4));\n    var j = -1;\n    var best_common = '';\n    var best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b;\n    while ((j = shorttext.indexOf(seed, j + 1)) != -1) {\n      var prefixLength = diff_commonPrefix(longtext.substring(i),\n                                           shorttext.substring(j));\n      var suffixLength = diff_commonSuffix(longtext.substring(0, i),\n                                           shorttext.substring(0, j));\n      if (best_common.length < suffixLength + prefixLength) {\n        best_common = shorttext.substring(j - suffixLength, j) +\n            shorttext.substring(j, j + prefixLength);\n        best_longtext_a = longtext.substring(0, i - suffixLength);\n        best_longtext_b = longtext.substring(i + prefixLength);\n        best_shorttext_a = shorttext.substring(0, j - suffixLength);\n        best_shorttext_b = shorttext.substring(j + prefixLength);\n      }\n    }\n    if (best_common.length * 2 >= longtext.length) {\n      return [best_longtext_a, best_longtext_b,\n              best_shorttext_a, best_shorttext_b, best_common];\n    } else {\n      return null;\n    }\n  }\n\n  // First check if the second quarter is the seed for a half-match.\n  var hm1 = diff_halfMatchI_(longtext, shorttext,\n                             Math.ceil(longtext.length / 4));\n  // Check again based on the third quarter.\n  var hm2 = diff_halfMatchI_(longtext, shorttext,\n                             Math.ceil(longtext.length / 2));\n  var hm;\n  if (!hm1 && !hm2) {\n    return null;\n  } else if (!hm2) {\n    hm = hm1;\n  } else if (!hm1) {\n    hm = hm2;\n  } else {\n    // Both matched.  Select the longest.\n    hm = hm1[4].length > hm2[4].length ? hm1 : hm2;\n  }\n\n  // A half-match was found, sort out the return data.\n  var text1_a, text1_b, text2_a, text2_b;\n  if (text1.length > text2.length) {\n    text1_a = hm[0];\n    text1_b = hm[1];\n    text2_a = hm[2];\n    text2_b = hm[3];\n  } else {\n    text2_a = hm[0];\n    text2_b = hm[1];\n    text1_a = hm[2];\n    text1_b = hm[3];\n  }\n  var mid_common = hm[4];\n  return [text1_a, text1_b, text2_a, text2_b, mid_common];\n};\n\n\n/**\n * Reorder and merge like edit sections.  Merge equalities.\n * Any edit section can move as long as it doesn't cross an equality.\n * @param {Array} diffs Array of diff tuples.\n */\nfunction diff_cleanupMerge(diffs) {\n  diffs.push([DIFF_EQUAL, '']);  // Add a dummy entry at the end.\n  var pointer = 0;\n  var count_delete = 0;\n  var count_insert = 0;\n  var text_delete = '';\n  var text_insert = '';\n  var commonlength;\n  while (pointer < diffs.length) {\n    switch (diffs[pointer][0]) {\n      case DIFF_INSERT:\n        count_insert++;\n        text_insert += diffs[pointer][1];\n        pointer++;\n        break;\n      case DIFF_DELETE:\n        count_delete++;\n        text_delete += diffs[pointer][1];\n        pointer++;\n        break;\n      case DIFF_EQUAL:\n        // Upon reaching an equality, check for prior redundancies.\n        if (count_delete + count_insert > 1) {\n          if (count_delete !== 0 && count_insert !== 0) {\n            // Factor out any common prefixies.\n            commonlength = diff_commonPrefix(text_insert, text_delete);\n            if (commonlength !== 0) {\n              if ((pointer - count_delete - count_insert) > 0 &&\n                  diffs[pointer - count_delete - count_insert - 1][0] ==\n                  DIFF_EQUAL) {\n                diffs[pointer - count_delete - count_insert - 1][1] +=\n                    text_insert.substring(0, commonlength);\n              } else {\n                diffs.splice(0, 0, [DIFF_EQUAL,\n                                    text_insert.substring(0, commonlength)]);\n                pointer++;\n              }\n              text_insert = text_insert.substring(commonlength);\n              text_delete = text_delete.substring(commonlength);\n            }\n            // Factor out any common suffixies.\n            commonlength = diff_commonSuffix(text_insert, text_delete);\n            if (commonlength !== 0) {\n              diffs[pointer][1] = text_insert.substring(text_insert.length -\n                  commonlength) + diffs[pointer][1];\n              text_insert = text_insert.substring(0, text_insert.length -\n                  commonlength);\n              text_delete = text_delete.substring(0, text_delete.length -\n                  commonlength);\n            }\n          }\n          // Delete the offending records and add the merged ones.\n          if (count_delete === 0) {\n            diffs.splice(pointer - count_insert,\n                count_delete + count_insert, [DIFF_INSERT, text_insert]);\n          } else if (count_insert === 0) {\n            diffs.splice(pointer - count_delete,\n                count_delete + count_insert, [DIFF_DELETE, text_delete]);\n          } else {\n            diffs.splice(pointer - count_delete - count_insert,\n                count_delete + count_insert, [DIFF_DELETE, text_delete],\n                [DIFF_INSERT, text_insert]);\n          }\n          pointer = pointer - count_delete - count_insert +\n                    (count_delete ? 1 : 0) + (count_insert ? 1 : 0) + 1;\n        } else if (pointer !== 0 && diffs[pointer - 1][0] == DIFF_EQUAL) {\n          // Merge this equality with the previous one.\n          diffs[pointer - 1][1] += diffs[pointer][1];\n          diffs.splice(pointer, 1);\n        } else {\n          pointer++;\n        }\n        count_insert = 0;\n        count_delete = 0;\n        text_delete = '';\n        text_insert = '';\n        break;\n    }\n  }\n  if (diffs[diffs.length - 1][1] === '') {\n    diffs.pop();  // Remove the dummy entry at the end.\n  }\n\n  // Second pass: look for single edits surrounded on both sides by equalities\n  // which can be shifted sideways to eliminate an equality.\n  // e.g: A<ins>BA</ins>C -> <ins>AB</ins>AC\n  var changes = false;\n  pointer = 1;\n  // Intentionally ignore the first and last element (don't need checking).\n  while (pointer < diffs.length - 1) {\n    if (diffs[pointer - 1][0] == DIFF_EQUAL &&\n        diffs[pointer + 1][0] == DIFF_EQUAL) {\n      // This is a single edit surrounded by equalities.\n      if (diffs[pointer][1].substring(diffs[pointer][1].length -\n          diffs[pointer - 1][1].length) == diffs[pointer - 1][1]) {\n        // Shift the edit over the previous equality.\n        diffs[pointer][1] = diffs[pointer - 1][1] +\n            diffs[pointer][1].substring(0, diffs[pointer][1].length -\n                                        diffs[pointer - 1][1].length);\n        diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1];\n        diffs.splice(pointer - 1, 1);\n        changes = true;\n      } else if (diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) ==\n          diffs[pointer + 1][1]) {\n        // Shift the edit over the next equality.\n        diffs[pointer - 1][1] += diffs[pointer + 1][1];\n        diffs[pointer][1] =\n            diffs[pointer][1].substring(diffs[pointer + 1][1].length) +\n            diffs[pointer + 1][1];\n        diffs.splice(pointer + 1, 1);\n        changes = true;\n      }\n    }\n    pointer++;\n  }\n  // If shifts were made, the diff needs reordering and another shift sweep.\n  if (changes) {\n    diff_cleanupMerge(diffs);\n  }\n};\n\n\nvar diff = diff_main;\ndiff.INSERT = DIFF_INSERT;\ndiff.DELETE = DIFF_DELETE;\ndiff.EQUAL = DIFF_EQUAL;\n\nmodule.exports = diff;\n\n/*\n * Modify a diff such that the cursor position points to the start of a change:\n * E.g.\n *   cursor_normalize_diff([[DIFF_EQUAL, 'abc']], 1)\n *     => [1, [[DIFF_EQUAL, 'a'], [DIFF_EQUAL, 'bc']]]\n *   cursor_normalize_diff([[DIFF_INSERT, 'new'], [DIFF_DELETE, 'xyz']], 2)\n *     => [2, [[DIFF_INSERT, 'new'], [DIFF_DELETE, 'xy'], [DIFF_DELETE, 'z']]]\n *\n * @param {Array} diffs Array of diff tuples\n * @param {Int} cursor_pos Suggested edit position. Must not be out of bounds!\n * @return {Array} A tuple [cursor location in the modified diff, modified diff]\n */\nfunction cursor_normalize_diff (diffs, cursor_pos) {\n  if (cursor_pos === 0) {\n    return [DIFF_EQUAL, diffs];\n  }\n  for (var current_pos = 0, i = 0; i < diffs.length; i++) {\n    var d = diffs[i];\n    if (d[0] === DIFF_DELETE || d[0] === DIFF_EQUAL) {\n      var next_pos = current_pos + d[1].length;\n      if (cursor_pos === next_pos) {\n        return [i + 1, diffs];\n      } else if (cursor_pos < next_pos) {\n        // copy to prevent side effects\n        diffs = diffs.slice();\n        // split d into two diff changes\n        var split_pos = cursor_pos - current_pos;\n        var d_left = [d[0], d[1].slice(0, split_pos)];\n        var d_right = [d[0], d[1].slice(split_pos)];\n        diffs.splice(i, 1, d_left, d_right);\n        return [i + 1, diffs];\n      } else {\n        current_pos = next_pos;\n      }\n    }\n  }\n  throw new Error('cursor_pos is out of bounds!')\n}\n\n/*\n * Modify a diff such that the edit position is \"shifted\" to the proposed edit location (cursor_position).\n *\n * Case 1)\n *   Check if a naive shift is possible:\n *     [0, X], [ 1, Y] -> [ 1, Y], [0, X]    (if X + Y === Y + X)\n *     [0, X], [-1, Y] -> [-1, Y], [0, X]    (if X + Y === Y + X) - holds same result\n * Case 2)\n *   Check if the following shifts are possible:\n *     [0, 'pre'], [ 1, 'prefix'] -> [ 1, 'pre'], [0, 'pre'], [ 1, 'fix']\n *     [0, 'pre'], [-1, 'prefix'] -> [-1, 'pre'], [0, 'pre'], [-1, 'fix']\n *         ^            ^\n *         d          d_next\n *\n * @param {Array} diffs Array of diff tuples\n * @param {Int} cursor_pos Suggested edit position. Must not be out of bounds!\n * @return {Array} Array of diff tuples\n */\nfunction fix_cursor (diffs, cursor_pos) {\n  var norm = cursor_normalize_diff(diffs, cursor_pos);\n  var ndiffs = norm[1];\n  var cursor_pointer = norm[0];\n  var d = ndiffs[cursor_pointer];\n  var d_next = ndiffs[cursor_pointer + 1];\n\n  if (d == null) {\n    // Text was deleted from end of original string,\n    // cursor is now out of bounds in new string\n    return diffs;\n  } else if (d[0] !== DIFF_EQUAL) {\n    // A modification happened at the cursor location.\n    // This is the expected outcome, so we can return the original diff.\n    return diffs;\n  } else {\n    if (d_next != null && d[1] + d_next[1] === d_next[1] + d[1]) {\n      // Case 1)\n      // It is possible to perform a naive shift\n      ndiffs.splice(cursor_pointer, 2, d_next, d)\n      return merge_tuples(ndiffs, cursor_pointer, 2)\n    } else if (d_next != null && d_next[1].indexOf(d[1]) === 0) {\n      // Case 2)\n      // d[1] is a prefix of d_next[1]\n      // We can assume that d_next[0] !== 0, since d[0] === 0\n      // Shift edit locations..\n      ndiffs.splice(cursor_pointer, 2, [d_next[0], d[1]], [0, d[1]]);\n      var suffix = d_next[1].slice(d[1].length);\n      if (suffix.length > 0) {\n        ndiffs.splice(cursor_pointer + 2, 0, [d_next[0], suffix]);\n      }\n      return merge_tuples(ndiffs, cursor_pointer, 3)\n    } else {\n      // Not possible to perform any modification\n      return diffs;\n    }\n  }\n}\n\n/*\n * Check diff did not split surrogate pairs.\n * Ex. [0, '\\uD83D'], [-1, '\\uDC36'], [1, '\\uDC2F'] -> [-1, '\\uD83D\\uDC36'], [1, '\\uD83D\\uDC2F']\n *     '\\uD83D\\uDC36' === '🐶', '\\uD83D\\uDC2F' === '🐯'\n *\n * @param {Array} diffs Array of diff tuples\n * @return {Array} Array of diff tuples\n */\nfunction fix_emoji (diffs) {\n  var compact = false;\n  var starts_with_pair_end = function(str) {\n    return str.charCodeAt(0) >= 0xDC00 && str.charCodeAt(0) <= 0xDFFF;\n  }\n  var ends_with_pair_start = function(str) {\n    return str.charCodeAt(str.length-1) >= 0xD800 && str.charCodeAt(str.length-1) <= 0xDBFF;\n  }\n  for (var i = 2; i < diffs.length; i += 1) {\n    if (diffs[i-2][0] === DIFF_EQUAL && ends_with_pair_start(diffs[i-2][1]) &&\n        diffs[i-1][0] === DIFF_DELETE && starts_with_pair_end(diffs[i-1][1]) &&\n        diffs[i][0] === DIFF_INSERT && starts_with_pair_end(diffs[i][1])) {\n      compact = true;\n\n      diffs[i-1][1] = diffs[i-2][1].slice(-1) + diffs[i-1][1];\n      diffs[i][1] = diffs[i-2][1].slice(-1) + diffs[i][1];\n\n      diffs[i-2][1] = diffs[i-2][1].slice(0, -1);\n    }\n  }\n  if (!compact) {\n    return diffs;\n  }\n  var fixed_diffs = [];\n  for (var i = 0; i < diffs.length; i += 1) {\n    if (diffs[i][1].length > 0) {\n      fixed_diffs.push(diffs[i]);\n    }\n  }\n  return fixed_diffs;\n}\n\n/*\n * Try to merge tuples with their neigbors in a given range.\n * E.g. [0, 'a'], [0, 'b'] -> [0, 'ab']\n *\n * @param {Array} diffs Array of diff tuples.\n * @param {Int} start Position of the first element to merge (diffs[start] is also merged with diffs[start - 1]).\n * @param {Int} length Number of consecutive elements to check.\n * @return {Array} Array of merged diff tuples.\n */\nfunction merge_tuples (diffs, start, length) {\n  // Check from (start-1) to (start+length).\n  for (var i = start + length - 1; i >= 0 && i >= start - 1; i--) {\n    if (i + 1 < diffs.length) {\n      var left_d = diffs[i];\n      var right_d = diffs[i+1];\n      if (left_d[0] === right_d[1]) {\n        diffs.splice(i, 2, [left_d[0], left_d[1] + right_d[1]]);\n      }\n    }\n  }\n  return diffs;\n}\n\n\n/***/ }),\n/* 52 */\n/***/ (function(module, exports) {\n\nexports = module.exports = typeof Object.keys === 'function'\n  ? Object.keys : shim;\n\nexports.shim = shim;\nfunction shim (obj) {\n  var keys = [];\n  for (var key in obj) keys.push(key);\n  return keys;\n}\n\n\n/***/ }),\n/* 53 */\n/***/ (function(module, exports) {\n\nvar supportsArgumentsClass = (function(){\n  return Object.prototype.toString.call(arguments)\n})() == '[object Arguments]';\n\nexports = module.exports = supportsArgumentsClass ? supported : unsupported;\n\nexports.supported = supported;\nfunction supported(object) {\n  return Object.prototype.toString.call(object) == '[object Arguments]';\n};\n\nexports.unsupported = unsupported;\nfunction unsupported(object){\n  return object &&\n    typeof object == 'object' &&\n    typeof object.length == 'number' &&\n    Object.prototype.hasOwnProperty.call(object, 'callee') &&\n    !Object.prototype.propertyIsEnumerable.call(object, 'callee') ||\n    false;\n};\n\n\n/***/ }),\n/* 54 */\n/***/ (function(module, exports) {\n\n'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n  , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @api private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n  Events.prototype = Object.create(null);\n\n  //\n  // This hack is needed because the `__proto__` property is still inherited in\n  // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n  //\n  if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {Mixed} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @api private\n */\nfunction EE(fn, context, once) {\n  this.fn = fn;\n  this.context = context;\n  this.once = once || false;\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @api public\n */\nfunction EventEmitter() {\n  this._events = new Events();\n  this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @api public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n  var names = []\n    , events\n    , name;\n\n  if (this._eventsCount === 0) return names;\n\n  for (name in (events = this._events)) {\n    if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n  }\n\n  if (Object.getOwnPropertySymbols) {\n    return names.concat(Object.getOwnPropertySymbols(events));\n  }\n\n  return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {String|Symbol} event The event name.\n * @param {Boolean} exists Only check if there are listeners.\n * @returns {Array|Boolean}\n * @api public\n */\nEventEmitter.prototype.listeners = function listeners(event, exists) {\n  var evt = prefix ? prefix + event : event\n    , available = this._events[evt];\n\n  if (exists) return !!available;\n  if (!available) return [];\n  if (available.fn) return [available.fn];\n\n  for (var i = 0, l = available.length, ee = new Array(l); i < l; i++) {\n    ee[i] = available[i].fn;\n  }\n\n  return ee;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {String|Symbol} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @api public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return false;\n\n  var listeners = this._events[evt]\n    , len = arguments.length\n    , args\n    , i;\n\n  if (listeners.fn) {\n    if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n    switch (len) {\n      case 1: return listeners.fn.call(listeners.context), true;\n      case 2: return listeners.fn.call(listeners.context, a1), true;\n      case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n      case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n      case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n      case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n    }\n\n    for (i = 1, args = new Array(len -1); i < len; i++) {\n      args[i - 1] = arguments[i];\n    }\n\n    listeners.fn.apply(listeners.context, args);\n  } else {\n    var length = listeners.length\n      , j;\n\n    for (i = 0; i < length; i++) {\n      if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n      switch (len) {\n        case 1: listeners[i].fn.call(listeners[i].context); break;\n        case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n        case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n        case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n        default:\n          if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n            args[j - 1] = arguments[j];\n          }\n\n          listeners[i].fn.apply(listeners[i].context, args);\n      }\n    }\n  }\n\n  return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {String|Symbol} event The event name.\n * @param {Function} fn The listener function.\n * @param {Mixed} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @api public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n  var listener = new EE(fn, context || this)\n    , evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) this._events[evt] = listener, this._eventsCount++;\n  else if (!this._events[evt].fn) this._events[evt].push(listener);\n  else this._events[evt] = [this._events[evt], listener];\n\n  return this;\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {String|Symbol} event The event name.\n * @param {Function} fn The listener function.\n * @param {Mixed} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @api public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n  var listener = new EE(fn, context || this, true)\n    , evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) this._events[evt] = listener, this._eventsCount++;\n  else if (!this._events[evt].fn) this._events[evt].push(listener);\n  else this._events[evt] = [this._events[evt], listener];\n\n  return this;\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {String|Symbol} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {Mixed} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @api public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return this;\n  if (!fn) {\n    if (--this._eventsCount === 0) this._events = new Events();\n    else delete this._events[evt];\n    return this;\n  }\n\n  var listeners = this._events[evt];\n\n  if (listeners.fn) {\n    if (\n         listeners.fn === fn\n      && (!once || listeners.once)\n      && (!context || listeners.context === context)\n    ) {\n      if (--this._eventsCount === 0) this._events = new Events();\n      else delete this._events[evt];\n    }\n  } else {\n    for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n      if (\n           listeners[i].fn !== fn\n        || (once && !listeners[i].once)\n        || (context && listeners[i].context !== context)\n      ) {\n        events.push(listeners[i]);\n      }\n    }\n\n    //\n    // Reset the array, or remove it completely if we have no more listeners.\n    //\n    if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n    else if (--this._eventsCount === 0) this._events = new Events();\n    else delete this._events[evt];\n  }\n\n  return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {String|Symbol} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @api public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n  var evt;\n\n  if (event) {\n    evt = prefix ? prefix + event : event;\n    if (this._events[evt]) {\n      if (--this._eventsCount === 0) this._events = new Events();\n      else delete this._events[evt];\n    }\n  } else {\n    this._events = new Events();\n    this._eventsCount = 0;\n  }\n\n  return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// This function doesn't apply anymore.\n//\nEventEmitter.prototype.setMaxListeners = function setMaxListeners() {\n  return this;\n};\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n  module.exports = EventEmitter;\n}\n\n\n/***/ }),\n/* 55 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.matchText = exports.matchSpacing = exports.matchNewline = exports.matchBlot = exports.matchAttributor = exports.default = undefined;\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\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\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 _extend2 = __webpack_require__(3);\n\nvar _extend3 = _interopRequireDefault(_extend2);\n\nvar _quillDelta = __webpack_require__(2);\n\nvar _quillDelta2 = _interopRequireDefault(_quillDelta);\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _quill = __webpack_require__(5);\n\nvar _quill2 = _interopRequireDefault(_quill);\n\nvar _logger = __webpack_require__(10);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _module = __webpack_require__(9);\n\nvar _module2 = _interopRequireDefault(_module);\n\nvar _align = __webpack_require__(36);\n\nvar _background = __webpack_require__(37);\n\nvar _code = __webpack_require__(13);\n\nvar _code2 = _interopRequireDefault(_code);\n\nvar _color = __webpack_require__(26);\n\nvar _direction = __webpack_require__(38);\n\nvar _font = __webpack_require__(39);\n\nvar _size = __webpack_require__(40);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar debug = (0, _logger2.default)('quill:clipboard');\n\nvar DOM_KEY = '__ql-matcher';\n\nvar CLIPBOARD_CONFIG = [[Node.TEXT_NODE, matchText], [Node.TEXT_NODE, matchNewline], ['br', matchBreak], [Node.ELEMENT_NODE, matchNewline], [Node.ELEMENT_NODE, matchBlot], [Node.ELEMENT_NODE, matchSpacing], [Node.ELEMENT_NODE, matchAttributor], [Node.ELEMENT_NODE, matchStyles], ['li', matchIndent], ['b', matchAlias.bind(matchAlias, 'bold')], ['i', matchAlias.bind(matchAlias, 'italic')], ['style', matchIgnore]];\n\nvar ATTRIBUTE_ATTRIBUTORS = [_align.AlignAttribute, _direction.DirectionAttribute].reduce(function (memo, attr) {\n  memo[attr.keyName] = attr;\n  return memo;\n}, {});\n\nvar STYLE_ATTRIBUTORS = [_align.AlignStyle, _background.BackgroundStyle, _color.ColorStyle, _direction.DirectionStyle, _font.FontStyle, _size.SizeStyle].reduce(function (memo, attr) {\n  memo[attr.keyName] = attr;\n  return memo;\n}, {});\n\nvar Clipboard = function (_Module) {\n  _inherits(Clipboard, _Module);\n\n  function Clipboard(quill, options) {\n    _classCallCheck(this, Clipboard);\n\n    var _this = _possibleConstructorReturn(this, (Clipboard.__proto__ || Object.getPrototypeOf(Clipboard)).call(this, quill, options));\n\n    _this.quill.root.addEventListener('paste', _this.onPaste.bind(_this));\n    _this.container = _this.quill.addContainer('ql-clipboard');\n    _this.container.setAttribute('contenteditable', true);\n    _this.container.setAttribute('tabindex', -1);\n    _this.matchers = [];\n    CLIPBOARD_CONFIG.concat(_this.options.matchers).forEach(function (_ref) {\n      var _ref2 = _slicedToArray(_ref, 2),\n          selector = _ref2[0],\n          matcher = _ref2[1];\n\n      if (!options.matchVisual && matcher === matchSpacing) return;\n      _this.addMatcher(selector, matcher);\n    });\n    return _this;\n  }\n\n  _createClass(Clipboard, [{\n    key: 'addMatcher',\n    value: function addMatcher(selector, matcher) {\n      this.matchers.push([selector, matcher]);\n    }\n  }, {\n    key: 'convert',\n    value: function convert(html) {\n      if (typeof html === 'string') {\n        this.container.innerHTML = html.replace(/\\>\\r?\\n +\\</g, '><'); // Remove spaces between tags\n        return this.convert();\n      }\n      var formats = this.quill.getFormat(this.quill.selection.savedRange.index);\n      if (formats[_code2.default.blotName]) {\n        var text = this.container.innerText;\n        this.container.innerHTML = '';\n        return new _quillDelta2.default().insert(text, _defineProperty({}, _code2.default.blotName, formats[_code2.default.blotName]));\n      }\n\n      var _prepareMatching = this.prepareMatching(),\n          _prepareMatching2 = _slicedToArray(_prepareMatching, 2),\n          elementMatchers = _prepareMatching2[0],\n          textMatchers = _prepareMatching2[1];\n\n      var delta = traverse(this.container, elementMatchers, textMatchers);\n      // Remove trailing newline\n      if (deltaEndsWith(delta, '\\n') && delta.ops[delta.ops.length - 1].attributes == null) {\n        delta = delta.compose(new _quillDelta2.default().retain(delta.length() - 1).delete(1));\n      }\n      debug.log('convert', this.container.innerHTML, delta);\n      this.container.innerHTML = '';\n      return delta;\n    }\n  }, {\n    key: 'dangerouslyPasteHTML',\n    value: function dangerouslyPasteHTML(index, html) {\n      var source = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _quill2.default.sources.API;\n\n      if (typeof index === 'string') {\n        this.quill.setContents(this.convert(index), html);\n        this.quill.setSelection(0, _quill2.default.sources.SILENT);\n      } else {\n        var paste = this.convert(html);\n        this.quill.updateContents(new _quillDelta2.default().retain(index).concat(paste), source);\n        this.quill.setSelection(index + paste.length(), _quill2.default.sources.SILENT);\n      }\n    }\n  }, {\n    key: 'onPaste',\n    value: function onPaste(e) {\n      var _this2 = this;\n\n      if (e.defaultPrevented || !this.quill.isEnabled()) return;\n      var range = this.quill.getSelection();\n      var delta = new _quillDelta2.default().retain(range.index);\n      var scrollTop = this.quill.scrollingContainer.scrollTop;\n      this.container.focus();\n      this.quill.selection.update(_quill2.default.sources.SILENT);\n      setTimeout(function () {\n        delta = delta.concat(_this2.convert()).delete(range.length);\n        _this2.quill.updateContents(delta, _quill2.default.sources.USER);\n        // range.length contributes to delta.length()\n        _this2.quill.setSelection(delta.length() - range.length, _quill2.default.sources.SILENT);\n        _this2.quill.scrollingContainer.scrollTop = scrollTop;\n        _this2.quill.focus();\n      }, 1);\n    }\n  }, {\n    key: 'prepareMatching',\n    value: function prepareMatching() {\n      var _this3 = this;\n\n      var elementMatchers = [],\n          textMatchers = [];\n      this.matchers.forEach(function (pair) {\n        var _pair = _slicedToArray(pair, 2),\n            selector = _pair[0],\n            matcher = _pair[1];\n\n        switch (selector) {\n          case Node.TEXT_NODE:\n            textMatchers.push(matcher);\n            break;\n          case Node.ELEMENT_NODE:\n            elementMatchers.push(matcher);\n            break;\n          default:\n            [].forEach.call(_this3.container.querySelectorAll(selector), function (node) {\n              // TODO use weakmap\n              node[DOM_KEY] = node[DOM_KEY] || [];\n              node[DOM_KEY].push(matcher);\n            });\n            break;\n        }\n      });\n      return [elementMatchers, textMatchers];\n    }\n  }]);\n\n  return Clipboard;\n}(_module2.default);\n\nClipboard.DEFAULTS = {\n  matchers: [],\n  matchVisual: true\n};\n\nfunction applyFormat(delta, format, value) {\n  if ((typeof format === 'undefined' ? 'undefined' : _typeof(format)) === 'object') {\n    return Object.keys(format).reduce(function (delta, key) {\n      return applyFormat(delta, key, format[key]);\n    }, delta);\n  } else {\n    return delta.reduce(function (delta, op) {\n      if (op.attributes && op.attributes[format]) {\n        return delta.push(op);\n      } else {\n        return delta.insert(op.insert, (0, _extend3.default)({}, _defineProperty({}, format, value), op.attributes));\n      }\n    }, new _quillDelta2.default());\n  }\n}\n\nfunction computeStyle(node) {\n  if (node.nodeType !== Node.ELEMENT_NODE) return {};\n  var DOM_KEY = '__ql-computed-style';\n  return node[DOM_KEY] || (node[DOM_KEY] = window.getComputedStyle(node));\n}\n\nfunction deltaEndsWith(delta, text) {\n  var endText = \"\";\n  for (var i = delta.ops.length - 1; i >= 0 && endText.length < text.length; --i) {\n    var op = delta.ops[i];\n    if (typeof op.insert !== 'string') break;\n    endText = op.insert + endText;\n  }\n  return endText.slice(-1 * text.length) === text;\n}\n\nfunction isLine(node) {\n  if (node.childNodes.length === 0) return false; // Exclude embed blocks\n  var style = computeStyle(node);\n  return ['block', 'list-item'].indexOf(style.display) > -1;\n}\n\nfunction traverse(node, elementMatchers, textMatchers) {\n  // Post-order\n  if (node.nodeType === node.TEXT_NODE) {\n    return textMatchers.reduce(function (delta, matcher) {\n      return matcher(node, delta);\n    }, new _quillDelta2.default());\n  } else if (node.nodeType === node.ELEMENT_NODE) {\n    return [].reduce.call(node.childNodes || [], function (delta, childNode) {\n      var childrenDelta = traverse(childNode, elementMatchers, textMatchers);\n      if (childNode.nodeType === node.ELEMENT_NODE) {\n        childrenDelta = elementMatchers.reduce(function (childrenDelta, matcher) {\n          return matcher(childNode, childrenDelta);\n        }, childrenDelta);\n        childrenDelta = (childNode[DOM_KEY] || []).reduce(function (childrenDelta, matcher) {\n          return matcher(childNode, childrenDelta);\n        }, childrenDelta);\n      }\n      return delta.concat(childrenDelta);\n    }, new _quillDelta2.default());\n  } else {\n    return new _quillDelta2.default();\n  }\n}\n\nfunction matchAlias(format, node, delta) {\n  return applyFormat(delta, format, true);\n}\n\nfunction matchAttributor(node, delta) {\n  var attributes = _parchment2.default.Attributor.Attribute.keys(node);\n  var classes = _parchment2.default.Attributor.Class.keys(node);\n  var styles = _parchment2.default.Attributor.Style.keys(node);\n  var formats = {};\n  attributes.concat(classes).concat(styles).forEach(function (name) {\n    var attr = _parchment2.default.query(name, _parchment2.default.Scope.ATTRIBUTE);\n    if (attr != null) {\n      formats[attr.attrName] = attr.value(node);\n      if (formats[attr.attrName]) return;\n    }\n    attr = ATTRIBUTE_ATTRIBUTORS[name];\n    if (attr != null && (attr.attrName === name || attr.keyName === name)) {\n      formats[attr.attrName] = attr.value(node) || undefined;\n    }\n    attr = STYLE_ATTRIBUTORS[name];\n    if (attr != null && (attr.attrName === name || attr.keyName === name)) {\n      attr = STYLE_ATTRIBUTORS[name];\n      formats[attr.attrName] = attr.value(node) || undefined;\n    }\n  });\n  if (Object.keys(formats).length > 0) {\n    delta = applyFormat(delta, formats);\n  }\n  return delta;\n}\n\nfunction matchBlot(node, delta) {\n  var match = _parchment2.default.query(node);\n  if (match == null) return delta;\n  if (match.prototype instanceof _parchment2.default.Embed) {\n    var embed = {};\n    var value = match.value(node);\n    if (value != null) {\n      embed[match.blotName] = value;\n      delta = new _quillDelta2.default().insert(embed, match.formats(node));\n    }\n  } else if (typeof match.formats === 'function') {\n    delta = applyFormat(delta, match.blotName, match.formats(node));\n  }\n  return delta;\n}\n\nfunction matchBreak(node, delta) {\n  if (!deltaEndsWith(delta, '\\n')) {\n    delta.insert('\\n');\n  }\n  return delta;\n}\n\nfunction matchIgnore() {\n  return new _quillDelta2.default();\n}\n\nfunction matchIndent(node, delta) {\n  var match = _parchment2.default.query(node);\n  if (match == null || match.blotName !== 'list-item' || !deltaEndsWith(delta, '\\n')) {\n    return delta;\n  }\n  var indent = -1,\n      parent = node.parentNode;\n  while (!parent.classList.contains('ql-clipboard')) {\n    if ((_parchment2.default.query(parent) || {}).blotName === 'list') {\n      indent += 1;\n    }\n    parent = parent.parentNode;\n  }\n  if (indent <= 0) return delta;\n  return delta.compose(new _quillDelta2.default().retain(delta.length() - 1).retain(1, { indent: indent }));\n}\n\nfunction matchNewline(node, delta) {\n  if (!deltaEndsWith(delta, '\\n')) {\n    if (isLine(node) || delta.length() > 0 && node.nextSibling && isLine(node.nextSibling)) {\n      delta.insert('\\n');\n    }\n  }\n  return delta;\n}\n\nfunction matchSpacing(node, delta) {\n  if (isLine(node) && node.nextElementSibling != null && !deltaEndsWith(delta, '\\n\\n')) {\n    var nodeHeight = node.offsetHeight + parseFloat(computeStyle(node).marginTop) + parseFloat(computeStyle(node).marginBottom);\n    if (node.nextElementSibling.offsetTop > node.offsetTop + nodeHeight * 1.5) {\n      delta.insert('\\n');\n    }\n  }\n  return delta;\n}\n\nfunction matchStyles(node, delta) {\n  var formats = {};\n  var style = node.style || {};\n  if (style.fontStyle && computeStyle(node).fontStyle === 'italic') {\n    formats.italic = true;\n  }\n  if (style.fontWeight && (computeStyle(node).fontWeight.startsWith('bold') || parseInt(computeStyle(node).fontWeight) >= 700)) {\n    formats.bold = true;\n  }\n  if (Object.keys(formats).length > 0) {\n    delta = applyFormat(delta, formats);\n  }\n  if (parseFloat(style.textIndent || 0) > 0) {\n    // Could be 0.5in\n    delta = new _quillDelta2.default().insert('\\t').concat(delta);\n  }\n  return delta;\n}\n\nfunction matchText(node, delta) {\n  var text = node.data;\n  // Word represents empty line with <o:p>&nbsp;</o:p>\n  if (node.parentNode.tagName === 'O:P') {\n    return delta.insert(text.trim());\n  }\n  if (text.trim().length === 0 && node.parentNode.classList.contains('ql-clipboard')) {\n    return delta;\n  }\n  if (!computeStyle(node.parentNode).whiteSpace.startsWith('pre')) {\n    // eslint-disable-next-line func-style\n    var replacer = function replacer(collapse, match) {\n      match = match.replace(/[^\\u00a0]/g, ''); // \\u00a0 is nbsp;\n      return match.length < 1 && collapse ? ' ' : match;\n    };\n    text = text.replace(/\\r\\n/g, ' ').replace(/\\n/g, ' ');\n    text = text.replace(/\\s\\s+/g, replacer.bind(replacer, true)); // collapse whitespace\n    if (node.previousSibling == null && isLine(node.parentNode) || node.previousSibling != null && isLine(node.previousSibling)) {\n      text = text.replace(/^\\s+/, replacer.bind(replacer, false));\n    }\n    if (node.nextSibling == null && isLine(node.parentNode) || node.nextSibling != null && isLine(node.nextSibling)) {\n      text = text.replace(/\\s+$/, replacer.bind(replacer, false));\n    }\n  }\n  return delta.insert(text);\n}\n\nexports.default = Clipboard;\nexports.matchAttributor = matchAttributor;\nexports.matchBlot = matchBlot;\nexports.matchNewline = matchNewline;\nexports.matchSpacing = matchSpacing;\nexports.matchText = matchText;\n\n/***/ }),\n/* 56 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\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 _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _inline = __webpack_require__(6);\n\nvar _inline2 = _interopRequireDefault(_inline);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Bold = function (_Inline) {\n  _inherits(Bold, _Inline);\n\n  function Bold() {\n    _classCallCheck(this, Bold);\n\n    return _possibleConstructorReturn(this, (Bold.__proto__ || Object.getPrototypeOf(Bold)).apply(this, arguments));\n  }\n\n  _createClass(Bold, [{\n    key: 'optimize',\n    value: function optimize(context) {\n      _get(Bold.prototype.__proto__ || Object.getPrototypeOf(Bold.prototype), 'optimize', this).call(this, context);\n      if (this.domNode.tagName !== this.statics.tagName[0]) {\n        this.replaceWith(this.statics.blotName);\n      }\n    }\n  }], [{\n    key: 'create',\n    value: function create() {\n      return _get(Bold.__proto__ || Object.getPrototypeOf(Bold), 'create', this).call(this);\n    }\n  }, {\n    key: 'formats',\n    value: function formats() {\n      return true;\n    }\n  }]);\n\n  return Bold;\n}(_inline2.default);\n\nBold.blotName = 'bold';\nBold.tagName = ['STRONG', 'B'];\n\nexports.default = Bold;\n\n/***/ }),\n/* 57 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.addControls = exports.default = undefined;\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\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 _quillDelta = __webpack_require__(2);\n\nvar _quillDelta2 = _interopRequireDefault(_quillDelta);\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _quill = __webpack_require__(5);\n\nvar _quill2 = _interopRequireDefault(_quill);\n\nvar _logger = __webpack_require__(10);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _module = __webpack_require__(9);\n\nvar _module2 = _interopRequireDefault(_module);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar debug = (0, _logger2.default)('quill:toolbar');\n\nvar Toolbar = function (_Module) {\n  _inherits(Toolbar, _Module);\n\n  function Toolbar(quill, options) {\n    _classCallCheck(this, Toolbar);\n\n    var _this = _possibleConstructorReturn(this, (Toolbar.__proto__ || Object.getPrototypeOf(Toolbar)).call(this, quill, options));\n\n    if (Array.isArray(_this.options.container)) {\n      var container = document.createElement('div');\n      addControls(container, _this.options.container);\n      quill.container.parentNode.insertBefore(container, quill.container);\n      _this.container = container;\n    } else if (typeof _this.options.container === 'string') {\n      _this.container = document.querySelector(_this.options.container);\n    } else {\n      _this.container = _this.options.container;\n    }\n    if (!(_this.container instanceof HTMLElement)) {\n      var _ret;\n\n      return _ret = debug.error('Container required for toolbar', _this.options), _possibleConstructorReturn(_this, _ret);\n    }\n    _this.container.classList.add('ql-toolbar');\n    _this.controls = [];\n    _this.handlers = {};\n    Object.keys(_this.options.handlers).forEach(function (format) {\n      _this.addHandler(format, _this.options.handlers[format]);\n    });\n    [].forEach.call(_this.container.querySelectorAll('button, select'), function (input) {\n      _this.attach(input);\n    });\n    _this.quill.on(_quill2.default.events.EDITOR_CHANGE, function (type, range) {\n      if (type === _quill2.default.events.SELECTION_CHANGE) {\n        _this.update(range);\n      }\n    });\n    _this.quill.on(_quill2.default.events.SCROLL_OPTIMIZE, function () {\n      var _this$quill$selection = _this.quill.selection.getRange(),\n          _this$quill$selection2 = _slicedToArray(_this$quill$selection, 1),\n          range = _this$quill$selection2[0]; // quill.getSelection triggers update\n\n\n      _this.update(range);\n    });\n    return _this;\n  }\n\n  _createClass(Toolbar, [{\n    key: 'addHandler',\n    value: function addHandler(format, handler) {\n      this.handlers[format] = handler;\n    }\n  }, {\n    key: 'attach',\n    value: function attach(input) {\n      var _this2 = this;\n\n      var format = [].find.call(input.classList, function (className) {\n        return className.indexOf('ql-') === 0;\n      });\n      if (!format) return;\n      format = format.slice('ql-'.length);\n      if (input.tagName === 'BUTTON') {\n        input.setAttribute('type', 'button');\n      }\n      if (this.handlers[format] == null) {\n        if (this.quill.scroll.whitelist != null && this.quill.scroll.whitelist[format] == null) {\n          debug.warn('ignoring attaching to disabled format', format, input);\n          return;\n        }\n        if (_parchment2.default.query(format) == null) {\n          debug.warn('ignoring attaching to nonexistent format', format, input);\n          return;\n        }\n      }\n      var eventName = input.tagName === 'SELECT' ? 'change' : 'click';\n      input.addEventListener(eventName, function (e) {\n        var value = void 0;\n        if (input.tagName === 'SELECT') {\n          if (input.selectedIndex < 0) return;\n          var selected = input.options[input.selectedIndex];\n          if (selected.hasAttribute('selected')) {\n            value = false;\n          } else {\n            value = selected.value || false;\n          }\n        } else {\n          if (input.classList.contains('ql-active')) {\n            value = false;\n          } else {\n            value = input.value || !input.hasAttribute('value');\n          }\n          e.preventDefault();\n        }\n        _this2.quill.focus();\n\n        var _quill$selection$getR = _this2.quill.selection.getRange(),\n            _quill$selection$getR2 = _slicedToArray(_quill$selection$getR, 1),\n            range = _quill$selection$getR2[0];\n\n        if (_this2.handlers[format] != null) {\n          _this2.handlers[format].call(_this2, value);\n        } else if (_parchment2.default.query(format).prototype instanceof _parchment2.default.Embed) {\n          value = prompt('Enter ' + format);\n          if (!value) return;\n          _this2.quill.updateContents(new _quillDelta2.default().retain(range.index).delete(range.length).insert(_defineProperty({}, format, value)), _quill2.default.sources.USER);\n        } else {\n          _this2.quill.format(format, value, _quill2.default.sources.USER);\n        }\n        _this2.update(range);\n      });\n      // TODO use weakmap\n      this.controls.push([format, input]);\n    }\n  }, {\n    key: 'update',\n    value: function update(range) {\n      var formats = range == null ? {} : this.quill.getFormat(range);\n      this.controls.forEach(function (pair) {\n        var _pair = _slicedToArray(pair, 2),\n            format = _pair[0],\n            input = _pair[1];\n\n        if (input.tagName === 'SELECT') {\n          var option = void 0;\n          if (range == null) {\n            option = null;\n          } else if (formats[format] == null) {\n            option = input.querySelector('option[selected]');\n          } else if (!Array.isArray(formats[format])) {\n            var value = formats[format];\n            if (typeof value === 'string') {\n              value = value.replace(/\\\"/g, '\\\\\"');\n            }\n            option = input.querySelector('option[value=\"' + value + '\"]');\n          }\n          if (option == null) {\n            input.value = ''; // TODO make configurable?\n            input.selectedIndex = -1;\n          } else {\n            option.selected = true;\n          }\n        } else {\n          if (range == null) {\n            input.classList.remove('ql-active');\n          } else if (input.hasAttribute('value')) {\n            // both being null should match (default values)\n            // '1' should match with 1 (headers)\n            var isActive = formats[format] === input.getAttribute('value') || formats[format] != null && formats[format].toString() === input.getAttribute('value') || formats[format] == null && !input.getAttribute('value');\n            input.classList.toggle('ql-active', isActive);\n          } else {\n            input.classList.toggle('ql-active', formats[format] != null);\n          }\n        }\n      });\n    }\n  }]);\n\n  return Toolbar;\n}(_module2.default);\n\nToolbar.DEFAULTS = {};\n\nfunction addButton(container, format, value) {\n  var input = document.createElement('button');\n  input.setAttribute('type', 'button');\n  input.classList.add('ql-' + format);\n  if (value != null) {\n    input.value = value;\n  }\n  container.appendChild(input);\n}\n\nfunction addControls(container, groups) {\n  if (!Array.isArray(groups[0])) {\n    groups = [groups];\n  }\n  groups.forEach(function (controls) {\n    var group = document.createElement('span');\n    group.classList.add('ql-formats');\n    controls.forEach(function (control) {\n      if (typeof control === 'string') {\n        addButton(group, control);\n      } else {\n        var format = Object.keys(control)[0];\n        var value = control[format];\n        if (Array.isArray(value)) {\n          addSelect(group, format, value);\n        } else {\n          addButton(group, format, value);\n        }\n      }\n    });\n    container.appendChild(group);\n  });\n}\n\nfunction addSelect(container, format, values) {\n  var input = document.createElement('select');\n  input.classList.add('ql-' + format);\n  values.forEach(function (value) {\n    var option = document.createElement('option');\n    if (value !== false) {\n      option.setAttribute('value', value);\n    } else {\n      option.setAttribute('selected', 'selected');\n    }\n    input.appendChild(option);\n  });\n  container.appendChild(input);\n}\n\nToolbar.DEFAULTS = {\n  container: null,\n  handlers: {\n    clean: function clean() {\n      var _this3 = this;\n\n      var range = this.quill.getSelection();\n      if (range == null) return;\n      if (range.length == 0) {\n        var formats = this.quill.getFormat();\n        Object.keys(formats).forEach(function (name) {\n          // Clean functionality in existing apps only clean inline formats\n          if (_parchment2.default.query(name, _parchment2.default.Scope.INLINE) != null) {\n            _this3.quill.format(name, false);\n          }\n        });\n      } else {\n        this.quill.removeFormat(range, _quill2.default.sources.USER);\n      }\n    },\n    direction: function direction(value) {\n      var align = this.quill.getFormat()['align'];\n      if (value === 'rtl' && align == null) {\n        this.quill.format('align', 'right', _quill2.default.sources.USER);\n      } else if (!value && align === 'right') {\n        this.quill.format('align', false, _quill2.default.sources.USER);\n      }\n      this.quill.format('direction', value, _quill2.default.sources.USER);\n    },\n    indent: function indent(value) {\n      var range = this.quill.getSelection();\n      var formats = this.quill.getFormat(range);\n      var indent = parseInt(formats.indent || 0);\n      if (value === '+1' || value === '-1') {\n        var modifier = value === '+1' ? 1 : -1;\n        if (formats.direction === 'rtl') modifier *= -1;\n        this.quill.format('indent', indent + modifier, _quill2.default.sources.USER);\n      }\n    },\n    link: function link(value) {\n      if (value === true) {\n        value = prompt('Enter link URL:');\n      }\n      this.quill.format('link', value, _quill2.default.sources.USER);\n    },\n    list: function list(value) {\n      var range = this.quill.getSelection();\n      var formats = this.quill.getFormat(range);\n      if (value === 'check') {\n        if (formats['list'] === 'checked' || formats['list'] === 'unchecked') {\n          this.quill.format('list', false, _quill2.default.sources.USER);\n        } else {\n          this.quill.format('list', 'unchecked', _quill2.default.sources.USER);\n        }\n      } else {\n        this.quill.format('list', value, _quill2.default.sources.USER);\n      }\n    }\n  }\n};\n\nexports.default = Toolbar;\nexports.addControls = addControls;\n\n/***/ }),\n/* 58 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <polyline class=\\\"ql-even ql-stroke\\\" points=\\\"5 7 3 9 5 11\\\"></polyline> <polyline class=\\\"ql-even ql-stroke\\\" points=\\\"13 7 15 9 13 11\\\"></polyline> <line class=ql-stroke x1=10 x2=8 y1=5 y2=13></line> </svg>\";\n\n/***/ }),\n/* 59 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\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 _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _picker = __webpack_require__(28);\n\nvar _picker2 = _interopRequireDefault(_picker);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ColorPicker = function (_Picker) {\n  _inherits(ColorPicker, _Picker);\n\n  function ColorPicker(select, label) {\n    _classCallCheck(this, ColorPicker);\n\n    var _this = _possibleConstructorReturn(this, (ColorPicker.__proto__ || Object.getPrototypeOf(ColorPicker)).call(this, select));\n\n    _this.label.innerHTML = label;\n    _this.container.classList.add('ql-color-picker');\n    [].slice.call(_this.container.querySelectorAll('.ql-picker-item'), 0, 7).forEach(function (item) {\n      item.classList.add('ql-primary');\n    });\n    return _this;\n  }\n\n  _createClass(ColorPicker, [{\n    key: 'buildItem',\n    value: function buildItem(option) {\n      var item = _get(ColorPicker.prototype.__proto__ || Object.getPrototypeOf(ColorPicker.prototype), 'buildItem', this).call(this, option);\n      item.style.backgroundColor = option.getAttribute('value') || '';\n      return item;\n    }\n  }, {\n    key: 'selectItem',\n    value: function selectItem(item, trigger) {\n      _get(ColorPicker.prototype.__proto__ || Object.getPrototypeOf(ColorPicker.prototype), 'selectItem', this).call(this, item, trigger);\n      var colorLabel = this.label.querySelector('.ql-color-label');\n      var value = item ? item.getAttribute('data-value') || '' : '';\n      if (colorLabel) {\n        if (colorLabel.tagName === 'line') {\n          colorLabel.style.stroke = value;\n        } else {\n          colorLabel.style.fill = value;\n        }\n      }\n    }\n  }]);\n\n  return ColorPicker;\n}(_picker2.default);\n\nexports.default = ColorPicker;\n\n/***/ }),\n/* 60 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\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 _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _picker = __webpack_require__(28);\n\nvar _picker2 = _interopRequireDefault(_picker);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar IconPicker = function (_Picker) {\n  _inherits(IconPicker, _Picker);\n\n  function IconPicker(select, icons) {\n    _classCallCheck(this, IconPicker);\n\n    var _this = _possibleConstructorReturn(this, (IconPicker.__proto__ || Object.getPrototypeOf(IconPicker)).call(this, select));\n\n    _this.container.classList.add('ql-icon-picker');\n    [].forEach.call(_this.container.querySelectorAll('.ql-picker-item'), function (item) {\n      item.innerHTML = icons[item.getAttribute('data-value') || ''];\n    });\n    _this.defaultItem = _this.container.querySelector('.ql-selected');\n    _this.selectItem(_this.defaultItem);\n    return _this;\n  }\n\n  _createClass(IconPicker, [{\n    key: 'selectItem',\n    value: function selectItem(item, trigger) {\n      _get(IconPicker.prototype.__proto__ || Object.getPrototypeOf(IconPicker.prototype), 'selectItem', this).call(this, item, trigger);\n      item = item || this.defaultItem;\n      this.label.innerHTML = item.innerHTML;\n    }\n  }]);\n\n  return IconPicker;\n}(_picker2.default);\n\nexports.default = IconPicker;\n\n/***/ }),\n/* 61 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Tooltip = function () {\n  function Tooltip(quill, boundsContainer) {\n    var _this = this;\n\n    _classCallCheck(this, Tooltip);\n\n    this.quill = quill;\n    this.boundsContainer = boundsContainer || document.body;\n    this.root = quill.addContainer('ql-tooltip');\n    this.root.innerHTML = this.constructor.TEMPLATE;\n    if (this.quill.root === this.quill.scrollingContainer) {\n      this.quill.root.addEventListener('scroll', function () {\n        _this.root.style.marginTop = -1 * _this.quill.root.scrollTop + 'px';\n      });\n    }\n    this.hide();\n  }\n\n  _createClass(Tooltip, [{\n    key: 'hide',\n    value: function hide() {\n      this.root.classList.add('ql-hidden');\n    }\n  }, {\n    key: 'position',\n    value: function position(reference) {\n      var left = reference.left + reference.width / 2 - this.root.offsetWidth / 2;\n      // root.scrollTop should be 0 if scrollContainer !== root\n      var top = reference.bottom + this.quill.root.scrollTop;\n      this.root.style.left = left + 'px';\n      this.root.style.top = top + 'px';\n      this.root.classList.remove('ql-flip');\n      var containerBounds = this.boundsContainer.getBoundingClientRect();\n      var rootBounds = this.root.getBoundingClientRect();\n      var shift = 0;\n      if (rootBounds.right > containerBounds.right) {\n        shift = containerBounds.right - rootBounds.right;\n        this.root.style.left = left + shift + 'px';\n      }\n      if (rootBounds.left < containerBounds.left) {\n        shift = containerBounds.left - rootBounds.left;\n        this.root.style.left = left + shift + 'px';\n      }\n      if (rootBounds.bottom > containerBounds.bottom) {\n        var height = rootBounds.bottom - rootBounds.top;\n        var verticalShift = reference.bottom - reference.top + height;\n        this.root.style.top = top - verticalShift + 'px';\n        this.root.classList.add('ql-flip');\n      }\n      return shift;\n    }\n  }, {\n    key: 'show',\n    value: function show() {\n      this.root.classList.remove('ql-editing');\n      this.root.classList.remove('ql-hidden');\n    }\n  }]);\n\n  return Tooltip;\n}();\n\nexports.default = Tooltip;\n\n/***/ }),\n/* 62 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\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 _extend = __webpack_require__(3);\n\nvar _extend2 = _interopRequireDefault(_extend);\n\nvar _emitter = __webpack_require__(8);\n\nvar _emitter2 = _interopRequireDefault(_emitter);\n\nvar _base = __webpack_require__(43);\n\nvar _base2 = _interopRequireDefault(_base);\n\nvar _link = __webpack_require__(27);\n\nvar _link2 = _interopRequireDefault(_link);\n\nvar _selection = __webpack_require__(15);\n\nvar _icons = __webpack_require__(41);\n\nvar _icons2 = _interopRequireDefault(_icons);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar TOOLBAR_CONFIG = [[{ header: ['1', '2', '3', false] }], ['bold', 'italic', 'underline', 'link'], [{ list: 'ordered' }, { list: 'bullet' }], ['clean']];\n\nvar SnowTheme = function (_BaseTheme) {\n  _inherits(SnowTheme, _BaseTheme);\n\n  function SnowTheme(quill, options) {\n    _classCallCheck(this, SnowTheme);\n\n    if (options.modules.toolbar != null && options.modules.toolbar.container == null) {\n      options.modules.toolbar.container = TOOLBAR_CONFIG;\n    }\n\n    var _this = _possibleConstructorReturn(this, (SnowTheme.__proto__ || Object.getPrototypeOf(SnowTheme)).call(this, quill, options));\n\n    _this.quill.container.classList.add('ql-snow');\n    return _this;\n  }\n\n  _createClass(SnowTheme, [{\n    key: 'extendToolbar',\n    value: function extendToolbar(toolbar) {\n      toolbar.container.classList.add('ql-snow');\n      this.buildButtons([].slice.call(toolbar.container.querySelectorAll('button')), _icons2.default);\n      this.buildPickers([].slice.call(toolbar.container.querySelectorAll('select')), _icons2.default);\n      this.tooltip = new SnowTooltip(this.quill, this.options.bounds);\n      if (toolbar.container.querySelector('.ql-link')) {\n        this.quill.keyboard.addBinding({ key: 'K', shortKey: true }, function (range, context) {\n          toolbar.handlers['link'].call(toolbar, !context.format.link);\n        });\n      }\n    }\n  }]);\n\n  return SnowTheme;\n}(_base2.default);\n\nSnowTheme.DEFAULTS = (0, _extend2.default)(true, {}, _base2.default.DEFAULTS, {\n  modules: {\n    toolbar: {\n      handlers: {\n        link: function link(value) {\n          if (value) {\n            var range = this.quill.getSelection();\n            if (range == null || range.length == 0) return;\n            var preview = this.quill.getText(range);\n            if (/^\\S+@\\S+\\.\\S+$/.test(preview) && preview.indexOf('mailto:') !== 0) {\n              preview = 'mailto:' + preview;\n            }\n            var tooltip = this.quill.theme.tooltip;\n            tooltip.edit('link', preview);\n          } else {\n            this.quill.format('link', false);\n          }\n        }\n      }\n    }\n  }\n});\n\nvar SnowTooltip = function (_BaseTooltip) {\n  _inherits(SnowTooltip, _BaseTooltip);\n\n  function SnowTooltip(quill, bounds) {\n    _classCallCheck(this, SnowTooltip);\n\n    var _this2 = _possibleConstructorReturn(this, (SnowTooltip.__proto__ || Object.getPrototypeOf(SnowTooltip)).call(this, quill, bounds));\n\n    _this2.preview = _this2.root.querySelector('a.ql-preview');\n    return _this2;\n  }\n\n  _createClass(SnowTooltip, [{\n    key: 'listen',\n    value: function listen() {\n      var _this3 = this;\n\n      _get(SnowTooltip.prototype.__proto__ || Object.getPrototypeOf(SnowTooltip.prototype), 'listen', this).call(this);\n      this.root.querySelector('a.ql-action').addEventListener('click', function (event) {\n        if (_this3.root.classList.contains('ql-editing')) {\n          _this3.save();\n        } else {\n          _this3.edit('link', _this3.preview.textContent);\n        }\n        event.preventDefault();\n      });\n      this.root.querySelector('a.ql-remove').addEventListener('click', function (event) {\n        if (_this3.linkRange != null) {\n          var range = _this3.linkRange;\n          _this3.restoreFocus();\n          _this3.quill.formatText(range, 'link', false, _emitter2.default.sources.USER);\n          delete _this3.linkRange;\n        }\n        event.preventDefault();\n        _this3.hide();\n      });\n      this.quill.on(_emitter2.default.events.SELECTION_CHANGE, function (range, oldRange, source) {\n        if (range == null) return;\n        if (range.length === 0 && source === _emitter2.default.sources.USER) {\n          var _quill$scroll$descend = _this3.quill.scroll.descendant(_link2.default, range.index),\n              _quill$scroll$descend2 = _slicedToArray(_quill$scroll$descend, 2),\n              link = _quill$scroll$descend2[0],\n              offset = _quill$scroll$descend2[1];\n\n          if (link != null) {\n            _this3.linkRange = new _selection.Range(range.index - offset, link.length());\n            var preview = _link2.default.formats(link.domNode);\n            _this3.preview.textContent = preview;\n            _this3.preview.setAttribute('href', preview);\n            _this3.show();\n            _this3.position(_this3.quill.getBounds(_this3.linkRange));\n            return;\n          }\n        } else {\n          delete _this3.linkRange;\n        }\n        _this3.hide();\n      });\n    }\n  }, {\n    key: 'show',\n    value: function show() {\n      _get(SnowTooltip.prototype.__proto__ || Object.getPrototypeOf(SnowTooltip.prototype), 'show', this).call(this);\n      this.root.removeAttribute('data-mode');\n    }\n  }]);\n\n  return SnowTooltip;\n}(_base.BaseTooltip);\n\nSnowTooltip.TEMPLATE = ['<a class=\"ql-preview\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"about:blank\"></a>', '<input type=\"text\" data-formula=\"e=mc^2\" data-link=\"https://quilljs.com\" data-video=\"Embed URL\">', '<a class=\"ql-action\"></a>', '<a class=\"ql-remove\"></a>'].join('');\n\nexports.default = SnowTheme;\n\n/***/ }),\n/* 63 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _core = __webpack_require__(29);\n\nvar _core2 = _interopRequireDefault(_core);\n\nvar _align = __webpack_require__(36);\n\nvar _direction = __webpack_require__(38);\n\nvar _indent = __webpack_require__(64);\n\nvar _blockquote = __webpack_require__(65);\n\nvar _blockquote2 = _interopRequireDefault(_blockquote);\n\nvar _header = __webpack_require__(66);\n\nvar _header2 = _interopRequireDefault(_header);\n\nvar _list = __webpack_require__(67);\n\nvar _list2 = _interopRequireDefault(_list);\n\nvar _background = __webpack_require__(37);\n\nvar _color = __webpack_require__(26);\n\nvar _font = __webpack_require__(39);\n\nvar _size = __webpack_require__(40);\n\nvar _bold = __webpack_require__(56);\n\nvar _bold2 = _interopRequireDefault(_bold);\n\nvar _italic = __webpack_require__(68);\n\nvar _italic2 = _interopRequireDefault(_italic);\n\nvar _link = __webpack_require__(27);\n\nvar _link2 = _interopRequireDefault(_link);\n\nvar _script = __webpack_require__(69);\n\nvar _script2 = _interopRequireDefault(_script);\n\nvar _strike = __webpack_require__(70);\n\nvar _strike2 = _interopRequireDefault(_strike);\n\nvar _underline = __webpack_require__(71);\n\nvar _underline2 = _interopRequireDefault(_underline);\n\nvar _image = __webpack_require__(72);\n\nvar _image2 = _interopRequireDefault(_image);\n\nvar _video = __webpack_require__(73);\n\nvar _video2 = _interopRequireDefault(_video);\n\nvar _code = __webpack_require__(13);\n\nvar _code2 = _interopRequireDefault(_code);\n\nvar _formula = __webpack_require__(74);\n\nvar _formula2 = _interopRequireDefault(_formula);\n\nvar _syntax = __webpack_require__(75);\n\nvar _syntax2 = _interopRequireDefault(_syntax);\n\nvar _toolbar = __webpack_require__(57);\n\nvar _toolbar2 = _interopRequireDefault(_toolbar);\n\nvar _icons = __webpack_require__(41);\n\nvar _icons2 = _interopRequireDefault(_icons);\n\nvar _picker = __webpack_require__(28);\n\nvar _picker2 = _interopRequireDefault(_picker);\n\nvar _colorPicker = __webpack_require__(59);\n\nvar _colorPicker2 = _interopRequireDefault(_colorPicker);\n\nvar _iconPicker = __webpack_require__(60);\n\nvar _iconPicker2 = _interopRequireDefault(_iconPicker);\n\nvar _tooltip = __webpack_require__(61);\n\nvar _tooltip2 = _interopRequireDefault(_tooltip);\n\nvar _bubble = __webpack_require__(108);\n\nvar _bubble2 = _interopRequireDefault(_bubble);\n\nvar _snow = __webpack_require__(62);\n\nvar _snow2 = _interopRequireDefault(_snow);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n_core2.default.register({\n  'attributors/attribute/direction': _direction.DirectionAttribute,\n\n  'attributors/class/align': _align.AlignClass,\n  'attributors/class/background': _background.BackgroundClass,\n  'attributors/class/color': _color.ColorClass,\n  'attributors/class/direction': _direction.DirectionClass,\n  'attributors/class/font': _font.FontClass,\n  'attributors/class/size': _size.SizeClass,\n\n  'attributors/style/align': _align.AlignStyle,\n  'attributors/style/background': _background.BackgroundStyle,\n  'attributors/style/color': _color.ColorStyle,\n  'attributors/style/direction': _direction.DirectionStyle,\n  'attributors/style/font': _font.FontStyle,\n  'attributors/style/size': _size.SizeStyle\n}, true);\n\n_core2.default.register({\n  'formats/align': _align.AlignClass,\n  'formats/direction': _direction.DirectionClass,\n  'formats/indent': _indent.IndentClass,\n\n  'formats/background': _background.BackgroundStyle,\n  'formats/color': _color.ColorStyle,\n  'formats/font': _font.FontClass,\n  'formats/size': _size.SizeClass,\n\n  'formats/blockquote': _blockquote2.default,\n  'formats/code-block': _code2.default,\n  'formats/header': _header2.default,\n  'formats/list': _list2.default,\n\n  'formats/bold': _bold2.default,\n  'formats/code': _code.Code,\n  'formats/italic': _italic2.default,\n  'formats/link': _link2.default,\n  'formats/script': _script2.default,\n  'formats/strike': _strike2.default,\n  'formats/underline': _underline2.default,\n\n  'formats/image': _image2.default,\n  'formats/video': _video2.default,\n\n  'formats/list/item': _list.ListItem,\n\n  'modules/formula': _formula2.default,\n  'modules/syntax': _syntax2.default,\n  'modules/toolbar': _toolbar2.default,\n\n  'themes/bubble': _bubble2.default,\n  'themes/snow': _snow2.default,\n\n  'ui/icons': _icons2.default,\n  'ui/picker': _picker2.default,\n  'ui/icon-picker': _iconPicker2.default,\n  'ui/color-picker': _colorPicker2.default,\n  'ui/tooltip': _tooltip2.default\n}, true);\n\nexports.default = _core2.default;\n\n/***/ }),\n/* 64 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.IndentClass = undefined;\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 _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar IdentAttributor = function (_Parchment$Attributor) {\n  _inherits(IdentAttributor, _Parchment$Attributor);\n\n  function IdentAttributor() {\n    _classCallCheck(this, IdentAttributor);\n\n    return _possibleConstructorReturn(this, (IdentAttributor.__proto__ || Object.getPrototypeOf(IdentAttributor)).apply(this, arguments));\n  }\n\n  _createClass(IdentAttributor, [{\n    key: 'add',\n    value: function add(node, value) {\n      if (value === '+1' || value === '-1') {\n        var indent = this.value(node) || 0;\n        value = value === '+1' ? indent + 1 : indent - 1;\n      }\n      if (value === 0) {\n        this.remove(node);\n        return true;\n      } else {\n        return _get(IdentAttributor.prototype.__proto__ || Object.getPrototypeOf(IdentAttributor.prototype), 'add', this).call(this, node, value);\n      }\n    }\n  }, {\n    key: 'canAdd',\n    value: function canAdd(node, value) {\n      return _get(IdentAttributor.prototype.__proto__ || Object.getPrototypeOf(IdentAttributor.prototype), 'canAdd', this).call(this, node, value) || _get(IdentAttributor.prototype.__proto__ || Object.getPrototypeOf(IdentAttributor.prototype), 'canAdd', this).call(this, node, parseInt(value));\n    }\n  }, {\n    key: 'value',\n    value: function value(node) {\n      return parseInt(_get(IdentAttributor.prototype.__proto__ || Object.getPrototypeOf(IdentAttributor.prototype), 'value', this).call(this, node)) || undefined; // Don't return NaN\n    }\n  }]);\n\n  return IdentAttributor;\n}(_parchment2.default.Attributor.Class);\n\nvar IndentClass = new IdentAttributor('indent', 'ql-indent', {\n  scope: _parchment2.default.Scope.BLOCK,\n  whitelist: [1, 2, 3, 4, 5, 6, 7, 8]\n});\n\nexports.IndentClass = IndentClass;\n\n/***/ }),\n/* 65 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _block = __webpack_require__(4);\n\nvar _block2 = _interopRequireDefault(_block);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Blockquote = function (_Block) {\n  _inherits(Blockquote, _Block);\n\n  function Blockquote() {\n    _classCallCheck(this, Blockquote);\n\n    return _possibleConstructorReturn(this, (Blockquote.__proto__ || Object.getPrototypeOf(Blockquote)).apply(this, arguments));\n  }\n\n  return Blockquote;\n}(_block2.default);\n\nBlockquote.blotName = 'blockquote';\nBlockquote.tagName = 'blockquote';\n\nexports.default = Blockquote;\n\n/***/ }),\n/* 66 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\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 _block = __webpack_require__(4);\n\nvar _block2 = _interopRequireDefault(_block);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Header = function (_Block) {\n  _inherits(Header, _Block);\n\n  function Header() {\n    _classCallCheck(this, Header);\n\n    return _possibleConstructorReturn(this, (Header.__proto__ || Object.getPrototypeOf(Header)).apply(this, arguments));\n  }\n\n  _createClass(Header, null, [{\n    key: 'formats',\n    value: function formats(domNode) {\n      return this.tagName.indexOf(domNode.tagName) + 1;\n    }\n  }]);\n\n  return Header;\n}(_block2.default);\n\nHeader.blotName = 'header';\nHeader.tagName = ['H1', 'H2', 'H3', 'H4', 'H5', 'H6'];\n\nexports.default = Header;\n\n/***/ }),\n/* 67 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.ListItem = undefined;\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 _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _block = __webpack_require__(4);\n\nvar _block2 = _interopRequireDefault(_block);\n\nvar _container = __webpack_require__(25);\n\nvar _container2 = _interopRequireDefault(_container);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ListItem = function (_Block) {\n  _inherits(ListItem, _Block);\n\n  function ListItem() {\n    _classCallCheck(this, ListItem);\n\n    return _possibleConstructorReturn(this, (ListItem.__proto__ || Object.getPrototypeOf(ListItem)).apply(this, arguments));\n  }\n\n  _createClass(ListItem, [{\n    key: 'format',\n    value: function format(name, value) {\n      if (name === List.blotName && !value) {\n        this.replaceWith(_parchment2.default.create(this.statics.scope));\n      } else {\n        _get(ListItem.prototype.__proto__ || Object.getPrototypeOf(ListItem.prototype), 'format', this).call(this, name, value);\n      }\n    }\n  }, {\n    key: 'remove',\n    value: function remove() {\n      if (this.prev == null && this.next == null) {\n        this.parent.remove();\n      } else {\n        _get(ListItem.prototype.__proto__ || Object.getPrototypeOf(ListItem.prototype), 'remove', this).call(this);\n      }\n    }\n  }, {\n    key: 'replaceWith',\n    value: function replaceWith(name, value) {\n      this.parent.isolate(this.offset(this.parent), this.length());\n      if (name === this.parent.statics.blotName) {\n        this.parent.replaceWith(name, value);\n        return this;\n      } else {\n        this.parent.unwrap();\n        return _get(ListItem.prototype.__proto__ || Object.getPrototypeOf(ListItem.prototype), 'replaceWith', this).call(this, name, value);\n      }\n    }\n  }], [{\n    key: 'formats',\n    value: function formats(domNode) {\n      return domNode.tagName === this.tagName ? undefined : _get(ListItem.__proto__ || Object.getPrototypeOf(ListItem), 'formats', this).call(this, domNode);\n    }\n  }]);\n\n  return ListItem;\n}(_block2.default);\n\nListItem.blotName = 'list-item';\nListItem.tagName = 'LI';\n\nvar List = function (_Container) {\n  _inherits(List, _Container);\n\n  _createClass(List, null, [{\n    key: 'create',\n    value: function create(value) {\n      var tagName = value === 'ordered' ? 'OL' : 'UL';\n      var node = _get(List.__proto__ || Object.getPrototypeOf(List), 'create', this).call(this, tagName);\n      if (value === 'checked' || value === 'unchecked') {\n        node.setAttribute('data-checked', value === 'checked');\n      }\n      return node;\n    }\n  }, {\n    key: 'formats',\n    value: function formats(domNode) {\n      if (domNode.tagName === 'OL') return 'ordered';\n      if (domNode.tagName === 'UL') {\n        if (domNode.hasAttribute('data-checked')) {\n          return domNode.getAttribute('data-checked') === 'true' ? 'checked' : 'unchecked';\n        } else {\n          return 'bullet';\n        }\n      }\n      return undefined;\n    }\n  }]);\n\n  function List(domNode) {\n    _classCallCheck(this, List);\n\n    var _this2 = _possibleConstructorReturn(this, (List.__proto__ || Object.getPrototypeOf(List)).call(this, domNode));\n\n    var listEventHandler = function listEventHandler(e) {\n      if (e.target.parentNode !== domNode) return;\n      var format = _this2.statics.formats(domNode);\n      var blot = _parchment2.default.find(e.target);\n      if (format === 'checked') {\n        blot.format('list', 'unchecked');\n      } else if (format === 'unchecked') {\n        blot.format('list', 'checked');\n      }\n    };\n\n    domNode.addEventListener('touchstart', listEventHandler);\n    domNode.addEventListener('mousedown', listEventHandler);\n    return _this2;\n  }\n\n  _createClass(List, [{\n    key: 'format',\n    value: function format(name, value) {\n      if (this.children.length > 0) {\n        this.children.tail.format(name, value);\n      }\n    }\n  }, {\n    key: 'formats',\n    value: function formats() {\n      // We don't inherit from FormatBlot\n      return _defineProperty({}, this.statics.blotName, this.statics.formats(this.domNode));\n    }\n  }, {\n    key: 'insertBefore',\n    value: function insertBefore(blot, ref) {\n      if (blot instanceof ListItem) {\n        _get(List.prototype.__proto__ || Object.getPrototypeOf(List.prototype), 'insertBefore', this).call(this, blot, ref);\n      } else {\n        var index = ref == null ? this.length() : ref.offset(this);\n        var after = this.split(index);\n        after.parent.insertBefore(blot, after);\n      }\n    }\n  }, {\n    key: 'optimize',\n    value: function optimize(context) {\n      _get(List.prototype.__proto__ || Object.getPrototypeOf(List.prototype), 'optimize', this).call(this, context);\n      var next = this.next;\n      if (next != null && next.prev === this && next.statics.blotName === this.statics.blotName && next.domNode.tagName === this.domNode.tagName && next.domNode.getAttribute('data-checked') === this.domNode.getAttribute('data-checked')) {\n        next.moveChildren(this);\n        next.remove();\n      }\n    }\n  }, {\n    key: 'replace',\n    value: function replace(target) {\n      if (target.statics.blotName !== this.statics.blotName) {\n        var item = _parchment2.default.create(this.statics.defaultChild);\n        target.moveChildren(item);\n        this.appendChild(item);\n      }\n      _get(List.prototype.__proto__ || Object.getPrototypeOf(List.prototype), 'replace', this).call(this, target);\n    }\n  }]);\n\n  return List;\n}(_container2.default);\n\nList.blotName = 'list';\nList.scope = _parchment2.default.Scope.BLOCK_BLOT;\nList.tagName = ['OL', 'UL'];\nList.defaultChild = 'list-item';\nList.allowedChildren = [ListItem];\n\nexports.ListItem = ListItem;\nexports.default = List;\n\n/***/ }),\n/* 68 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _bold = __webpack_require__(56);\n\nvar _bold2 = _interopRequireDefault(_bold);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Italic = function (_Bold) {\n  _inherits(Italic, _Bold);\n\n  function Italic() {\n    _classCallCheck(this, Italic);\n\n    return _possibleConstructorReturn(this, (Italic.__proto__ || Object.getPrototypeOf(Italic)).apply(this, arguments));\n  }\n\n  return Italic;\n}(_bold2.default);\n\nItalic.blotName = 'italic';\nItalic.tagName = ['EM', 'I'];\n\nexports.default = Italic;\n\n/***/ }),\n/* 69 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\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 _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _inline = __webpack_require__(6);\n\nvar _inline2 = _interopRequireDefault(_inline);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Script = function (_Inline) {\n  _inherits(Script, _Inline);\n\n  function Script() {\n    _classCallCheck(this, Script);\n\n    return _possibleConstructorReturn(this, (Script.__proto__ || Object.getPrototypeOf(Script)).apply(this, arguments));\n  }\n\n  _createClass(Script, null, [{\n    key: 'create',\n    value: function create(value) {\n      if (value === 'super') {\n        return document.createElement('sup');\n      } else if (value === 'sub') {\n        return document.createElement('sub');\n      } else {\n        return _get(Script.__proto__ || Object.getPrototypeOf(Script), 'create', this).call(this, value);\n      }\n    }\n  }, {\n    key: 'formats',\n    value: function formats(domNode) {\n      if (domNode.tagName === 'SUB') return 'sub';\n      if (domNode.tagName === 'SUP') return 'super';\n      return undefined;\n    }\n  }]);\n\n  return Script;\n}(_inline2.default);\n\nScript.blotName = 'script';\nScript.tagName = ['SUB', 'SUP'];\n\nexports.default = Script;\n\n/***/ }),\n/* 70 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _inline = __webpack_require__(6);\n\nvar _inline2 = _interopRequireDefault(_inline);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Strike = function (_Inline) {\n  _inherits(Strike, _Inline);\n\n  function Strike() {\n    _classCallCheck(this, Strike);\n\n    return _possibleConstructorReturn(this, (Strike.__proto__ || Object.getPrototypeOf(Strike)).apply(this, arguments));\n  }\n\n  return Strike;\n}(_inline2.default);\n\nStrike.blotName = 'strike';\nStrike.tagName = 'S';\n\nexports.default = Strike;\n\n/***/ }),\n/* 71 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _inline = __webpack_require__(6);\n\nvar _inline2 = _interopRequireDefault(_inline);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Underline = function (_Inline) {\n  _inherits(Underline, _Inline);\n\n  function Underline() {\n    _classCallCheck(this, Underline);\n\n    return _possibleConstructorReturn(this, (Underline.__proto__ || Object.getPrototypeOf(Underline)).apply(this, arguments));\n  }\n\n  return Underline;\n}(_inline2.default);\n\nUnderline.blotName = 'underline';\nUnderline.tagName = 'U';\n\nexports.default = Underline;\n\n/***/ }),\n/* 72 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\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 _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _link = __webpack_require__(27);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ATTRIBUTES = ['alt', 'height', 'width'];\n\nvar Image = function (_Parchment$Embed) {\n  _inherits(Image, _Parchment$Embed);\n\n  function Image() {\n    _classCallCheck(this, Image);\n\n    return _possibleConstructorReturn(this, (Image.__proto__ || Object.getPrototypeOf(Image)).apply(this, arguments));\n  }\n\n  _createClass(Image, [{\n    key: 'format',\n    value: function format(name, value) {\n      if (ATTRIBUTES.indexOf(name) > -1) {\n        if (value) {\n          this.domNode.setAttribute(name, value);\n        } else {\n          this.domNode.removeAttribute(name);\n        }\n      } else {\n        _get(Image.prototype.__proto__ || Object.getPrototypeOf(Image.prototype), 'format', this).call(this, name, value);\n      }\n    }\n  }], [{\n    key: 'create',\n    value: function create(value) {\n      var node = _get(Image.__proto__ || Object.getPrototypeOf(Image), 'create', this).call(this, value);\n      if (typeof value === 'string') {\n        node.setAttribute('src', this.sanitize(value));\n      }\n      return node;\n    }\n  }, {\n    key: 'formats',\n    value: function formats(domNode) {\n      return ATTRIBUTES.reduce(function (formats, attribute) {\n        if (domNode.hasAttribute(attribute)) {\n          formats[attribute] = domNode.getAttribute(attribute);\n        }\n        return formats;\n      }, {});\n    }\n  }, {\n    key: 'match',\n    value: function match(url) {\n      return (/\\.(jpe?g|gif|png)$/.test(url) || /^data:image\\/.+;base64/.test(url)\n      );\n    }\n  }, {\n    key: 'sanitize',\n    value: function sanitize(url) {\n      return (0, _link.sanitize)(url, ['http', 'https', 'data']) ? url : '//:0';\n    }\n  }, {\n    key: 'value',\n    value: function value(domNode) {\n      return domNode.getAttribute('src');\n    }\n  }]);\n\n  return Image;\n}(_parchment2.default.Embed);\n\nImage.blotName = 'image';\nImage.tagName = 'IMG';\n\nexports.default = Image;\n\n/***/ }),\n/* 73 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\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 _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _block = __webpack_require__(4);\n\nvar _link = __webpack_require__(27);\n\nvar _link2 = _interopRequireDefault(_link);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ATTRIBUTES = ['height', 'width'];\n\nvar Video = function (_BlockEmbed) {\n  _inherits(Video, _BlockEmbed);\n\n  function Video() {\n    _classCallCheck(this, Video);\n\n    return _possibleConstructorReturn(this, (Video.__proto__ || Object.getPrototypeOf(Video)).apply(this, arguments));\n  }\n\n  _createClass(Video, [{\n    key: 'format',\n    value: function format(name, value) {\n      if (ATTRIBUTES.indexOf(name) > -1) {\n        if (value) {\n          this.domNode.setAttribute(name, value);\n        } else {\n          this.domNode.removeAttribute(name);\n        }\n      } else {\n        _get(Video.prototype.__proto__ || Object.getPrototypeOf(Video.prototype), 'format', this).call(this, name, value);\n      }\n    }\n  }], [{\n    key: 'create',\n    value: function create(value) {\n      var node = _get(Video.__proto__ || Object.getPrototypeOf(Video), 'create', this).call(this, value);\n      node.setAttribute('frameborder', '0');\n      node.setAttribute('allowfullscreen', true);\n      node.setAttribute('src', this.sanitize(value));\n      return node;\n    }\n  }, {\n    key: 'formats',\n    value: function formats(domNode) {\n      return ATTRIBUTES.reduce(function (formats, attribute) {\n        if (domNode.hasAttribute(attribute)) {\n          formats[attribute] = domNode.getAttribute(attribute);\n        }\n        return formats;\n      }, {});\n    }\n  }, {\n    key: 'sanitize',\n    value: function sanitize(url) {\n      return _link2.default.sanitize(url);\n    }\n  }, {\n    key: 'value',\n    value: function value(domNode) {\n      return domNode.getAttribute('src');\n    }\n  }]);\n\n  return Video;\n}(_block.BlockEmbed);\n\nVideo.blotName = 'video';\nVideo.className = 'ql-video';\nVideo.tagName = 'IFRAME';\n\nexports.default = Video;\n\n/***/ }),\n/* 74 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.FormulaBlot = undefined;\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 _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _embed = __webpack_require__(35);\n\nvar _embed2 = _interopRequireDefault(_embed);\n\nvar _quill = __webpack_require__(5);\n\nvar _quill2 = _interopRequireDefault(_quill);\n\nvar _module = __webpack_require__(9);\n\nvar _module2 = _interopRequireDefault(_module);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar FormulaBlot = function (_Embed) {\n  _inherits(FormulaBlot, _Embed);\n\n  function FormulaBlot() {\n    _classCallCheck(this, FormulaBlot);\n\n    return _possibleConstructorReturn(this, (FormulaBlot.__proto__ || Object.getPrototypeOf(FormulaBlot)).apply(this, arguments));\n  }\n\n  _createClass(FormulaBlot, null, [{\n    key: 'create',\n    value: function create(value) {\n      var node = _get(FormulaBlot.__proto__ || Object.getPrototypeOf(FormulaBlot), 'create', this).call(this, value);\n      if (typeof value === 'string') {\n        window.katex.render(value, node, {\n          throwOnError: false,\n          errorColor: '#f00'\n        });\n        node.setAttribute('data-value', value);\n      }\n      return node;\n    }\n  }, {\n    key: 'value',\n    value: function value(domNode) {\n      return domNode.getAttribute('data-value');\n    }\n  }]);\n\n  return FormulaBlot;\n}(_embed2.default);\n\nFormulaBlot.blotName = 'formula';\nFormulaBlot.className = 'ql-formula';\nFormulaBlot.tagName = 'SPAN';\n\nvar Formula = function (_Module) {\n  _inherits(Formula, _Module);\n\n  _createClass(Formula, null, [{\n    key: 'register',\n    value: function register() {\n      _quill2.default.register(FormulaBlot, true);\n    }\n  }]);\n\n  function Formula() {\n    _classCallCheck(this, Formula);\n\n    var _this2 = _possibleConstructorReturn(this, (Formula.__proto__ || Object.getPrototypeOf(Formula)).call(this));\n\n    if (window.katex == null) {\n      throw new Error('Formula module requires KaTeX.');\n    }\n    return _this2;\n  }\n\n  return Formula;\n}(_module2.default);\n\nexports.FormulaBlot = FormulaBlot;\nexports.default = Formula;\n\n/***/ }),\n/* 75 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.CodeToken = exports.CodeBlock = undefined;\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 _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _quill = __webpack_require__(5);\n\nvar _quill2 = _interopRequireDefault(_quill);\n\nvar _module = __webpack_require__(9);\n\nvar _module2 = _interopRequireDefault(_module);\n\nvar _code = __webpack_require__(13);\n\nvar _code2 = _interopRequireDefault(_code);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SyntaxCodeBlock = function (_CodeBlock) {\n  _inherits(SyntaxCodeBlock, _CodeBlock);\n\n  function SyntaxCodeBlock() {\n    _classCallCheck(this, SyntaxCodeBlock);\n\n    return _possibleConstructorReturn(this, (SyntaxCodeBlock.__proto__ || Object.getPrototypeOf(SyntaxCodeBlock)).apply(this, arguments));\n  }\n\n  _createClass(SyntaxCodeBlock, [{\n    key: 'replaceWith',\n    value: function replaceWith(block) {\n      this.domNode.textContent = this.domNode.textContent;\n      this.attach();\n      _get(SyntaxCodeBlock.prototype.__proto__ || Object.getPrototypeOf(SyntaxCodeBlock.prototype), 'replaceWith', this).call(this, block);\n    }\n  }, {\n    key: 'highlight',\n    value: function highlight(_highlight) {\n      var text = this.domNode.textContent;\n      if (this.cachedText !== text) {\n        if (text.trim().length > 0 || this.cachedText == null) {\n          this.domNode.innerHTML = _highlight(text);\n          this.domNode.normalize();\n          this.attach();\n        }\n        this.cachedText = text;\n      }\n    }\n  }]);\n\n  return SyntaxCodeBlock;\n}(_code2.default);\n\nSyntaxCodeBlock.className = 'ql-syntax';\n\nvar CodeToken = new _parchment2.default.Attributor.Class('token', 'hljs', {\n  scope: _parchment2.default.Scope.INLINE\n});\n\nvar Syntax = function (_Module) {\n  _inherits(Syntax, _Module);\n\n  _createClass(Syntax, null, [{\n    key: 'register',\n    value: function register() {\n      _quill2.default.register(CodeToken, true);\n      _quill2.default.register(SyntaxCodeBlock, true);\n    }\n  }]);\n\n  function Syntax(quill, options) {\n    _classCallCheck(this, Syntax);\n\n    var _this2 = _possibleConstructorReturn(this, (Syntax.__proto__ || Object.getPrototypeOf(Syntax)).call(this, quill, options));\n\n    if (typeof _this2.options.highlight !== 'function') {\n      throw new Error('Syntax module requires highlight.js. Please include the library on the page before Quill.');\n    }\n    var timer = null;\n    _this2.quill.on(_quill2.default.events.SCROLL_OPTIMIZE, function () {\n      clearTimeout(timer);\n      timer = setTimeout(function () {\n        _this2.highlight();\n        timer = null;\n      }, _this2.options.interval);\n    });\n    _this2.highlight();\n    return _this2;\n  }\n\n  _createClass(Syntax, [{\n    key: 'highlight',\n    value: function highlight() {\n      var _this3 = this;\n\n      if (this.quill.selection.composing) return;\n      this.quill.update(_quill2.default.sources.USER);\n      var range = this.quill.getSelection();\n      this.quill.scroll.descendants(SyntaxCodeBlock).forEach(function (code) {\n        code.highlight(_this3.options.highlight);\n      });\n      this.quill.update(_quill2.default.sources.SILENT);\n      if (range != null) {\n        this.quill.setSelection(range, _quill2.default.sources.SILENT);\n      }\n    }\n  }]);\n\n  return Syntax;\n}(_module2.default);\n\nSyntax.DEFAULTS = {\n  highlight: function () {\n    if (window.hljs == null) return null;\n    return function (text) {\n      var result = window.hljs.highlightAuto(text);\n      return result.value;\n    };\n  }(),\n  interval: 1000\n};\n\nexports.CodeBlock = SyntaxCodeBlock;\nexports.CodeToken = CodeToken;\nexports.default = Syntax;\n\n/***/ }),\n/* 76 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=3 x2=15 y1=9 y2=9></line> <line class=ql-stroke x1=3 x2=13 y1=14 y2=14></line> <line class=ql-stroke x1=3 x2=9 y1=4 y2=4></line> </svg>\";\n\n/***/ }),\n/* 77 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=15 x2=3 y1=9 y2=9></line> <line class=ql-stroke x1=14 x2=4 y1=14 y2=14></line> <line class=ql-stroke x1=12 x2=6 y1=4 y2=4></line> </svg>\";\n\n/***/ }),\n/* 78 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=15 x2=3 y1=9 y2=9></line> <line class=ql-stroke x1=15 x2=5 y1=14 y2=14></line> <line class=ql-stroke x1=15 x2=9 y1=4 y2=4></line> </svg>\";\n\n/***/ }),\n/* 79 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=15 x2=3 y1=9 y2=9></line> <line class=ql-stroke x1=15 x2=3 y1=14 y2=14></line> <line class=ql-stroke x1=15 x2=3 y1=4 y2=4></line> </svg>\";\n\n/***/ }),\n/* 80 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <g class=\\\"ql-fill ql-color-label\\\"> <polygon points=\\\"6 6.868 6 6 5 6 5 7 5.942 7 6 6.868\\\"></polygon> <rect height=1 width=1 x=4 y=4></rect> <polygon points=\\\"6.817 5 6 5 6 6 6.38 6 6.817 5\\\"></polygon> <rect height=1 width=1 x=2 y=6></rect> <rect height=1 width=1 x=3 y=5></rect> <rect height=1 width=1 x=4 y=7></rect> <polygon points=\\\"4 11.439 4 11 3 11 3 12 3.755 12 4 11.439\\\"></polygon> <rect height=1 width=1 x=2 y=12></rect> <rect height=1 width=1 x=2 y=9></rect> <rect height=1 width=1 x=2 y=15></rect> <polygon points=\\\"4.63 10 4 10 4 11 4.192 11 4.63 10\\\"></polygon> <rect height=1 width=1 x=3 y=8></rect> <path d=M10.832,4.2L11,4.582V4H10.708A1.948,1.948,0,0,1,10.832,4.2Z></path> <path d=M7,4.582L7.168,4.2A1.929,1.929,0,0,1,7.292,4H7V4.582Z></path> <path d=M8,13H7.683l-0.351.8a1.933,1.933,0,0,1-.124.2H8V13Z></path> <rect height=1 width=1 x=12 y=2></rect> <rect height=1 width=1 x=11 y=3></rect> <path d=M9,3H8V3.282A1.985,1.985,0,0,1,9,3Z></path> <rect height=1 width=1 x=2 y=3></rect> <rect height=1 width=1 x=6 y=2></rect> <rect height=1 width=1 x=3 y=2></rect> <rect height=1 width=1 x=5 y=3></rect> <rect height=1 width=1 x=9 y=2></rect> <rect height=1 width=1 x=15 y=14></rect> <polygon points=\\\"13.447 10.174 13.469 10.225 13.472 10.232 13.808 11 14 11 14 10 13.37 10 13.447 10.174\\\"></polygon> <rect height=1 width=1 x=13 y=7></rect> <rect height=1 width=1 x=15 y=5></rect> <rect height=1 width=1 x=14 y=6></rect> <rect height=1 width=1 x=15 y=8></rect> <rect height=1 width=1 x=14 y=9></rect> <path d=M3.775,14H3v1H4V14.314A1.97,1.97,0,0,1,3.775,14Z></path> <rect height=1 width=1 x=14 y=3></rect> <polygon points=\\\"12 6.868 12 6 11.62 6 12 6.868\\\"></polygon> <rect height=1 width=1 x=15 y=2></rect> <rect height=1 width=1 x=12 y=5></rect> <rect height=1 width=1 x=13 y=4></rect> <polygon points=\\\"12.933 9 13 9 13 8 12.495 8 12.933 9\\\"></polygon> <rect height=1 width=1 x=9 y=14></rect> <rect height=1 width=1 x=8 y=15></rect> <path d=M6,14.926V15H7V14.316A1.993,1.993,0,0,1,6,14.926Z></path> <rect height=1 width=1 x=5 y=15></rect> <path d=M10.668,13.8L10.317,13H10v1h0.792A1.947,1.947,0,0,1,10.668,13.8Z></path> <rect height=1 width=1 x=11 y=15></rect> <path d=M14.332,12.2a1.99,1.99,0,0,1,.166.8H15V12H14.245Z></path> <rect height=1 width=1 x=14 y=15></rect> <rect height=1 width=1 x=15 y=11></rect> </g> <polyline class=ql-stroke points=\\\"5.5 13 9 5 12.5 13\\\"></polyline> <line class=ql-stroke x1=11.63 x2=6.38 y1=11 y2=11></line> </svg>\";\n\n/***/ }),\n/* 81 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <rect class=\\\"ql-fill ql-stroke\\\" height=3 width=3 x=4 y=5></rect> <rect class=\\\"ql-fill ql-stroke\\\" height=3 width=3 x=11 y=5></rect> <path class=\\\"ql-even ql-fill ql-stroke\\\" d=M7,8c0,4.031-3,5-3,5></path> <path class=\\\"ql-even ql-fill ql-stroke\\\" d=M14,8c0,4.031-3,5-3,5></path> </svg>\";\n\n/***/ }),\n/* 82 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-stroke d=M5,4H9.5A2.5,2.5,0,0,1,12,6.5v0A2.5,2.5,0,0,1,9.5,9H5A0,0,0,0,1,5,9V4A0,0,0,0,1,5,4Z></path> <path class=ql-stroke d=M5,9h5.5A2.5,2.5,0,0,1,13,11.5v0A2.5,2.5,0,0,1,10.5,14H5a0,0,0,0,1,0,0V9A0,0,0,0,1,5,9Z></path> </svg>\";\n\n/***/ }),\n/* 83 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg class=\\\"\\\" viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=5 x2=13 y1=3 y2=3></line> <line class=ql-stroke x1=6 x2=9.35 y1=12 y2=3></line> <line class=ql-stroke x1=11 x2=15 y1=11 y2=15></line> <line class=ql-stroke x1=15 x2=11 y1=11 y2=15></line> <rect class=ql-fill height=1 rx=0.5 ry=0.5 width=7 x=2 y=14></rect> </svg>\";\n\n/***/ }),\n/* 84 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=\\\"ql-color-label ql-stroke ql-transparent\\\" x1=3 x2=15 y1=15 y2=15></line> <polyline class=ql-stroke points=\\\"5.5 11 9 3 12.5 11\\\"></polyline> <line class=ql-stroke x1=11.63 x2=6.38 y1=9 y2=9></line> </svg>\";\n\n/***/ }),\n/* 85 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <polygon class=\\\"ql-stroke ql-fill\\\" points=\\\"3 11 5 9 3 7 3 11\\\"></polygon> <line class=\\\"ql-stroke ql-fill\\\" x1=15 x2=11 y1=4 y2=4></line> <path class=ql-fill d=M11,3a3,3,0,0,0,0,6h1V3H11Z></path> <rect class=ql-fill height=11 width=1 x=11 y=4></rect> <rect class=ql-fill height=11 width=1 x=13 y=4></rect> </svg>\";\n\n/***/ }),\n/* 86 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <polygon class=\\\"ql-stroke ql-fill\\\" points=\\\"15 12 13 10 15 8 15 12\\\"></polygon> <line class=\\\"ql-stroke ql-fill\\\" x1=9 x2=5 y1=4 y2=4></line> <path class=ql-fill d=M5,3A3,3,0,0,0,5,9H6V3H5Z></path> <rect class=ql-fill height=11 width=1 x=5 y=4></rect> <rect class=ql-fill height=11 width=1 x=7 y=4></rect> </svg>\";\n\n/***/ }),\n/* 87 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M14,16H4a1,1,0,0,1,0-2H14A1,1,0,0,1,14,16Z /> <path class=ql-fill d=M14,4H4A1,1,0,0,1,4,2H14A1,1,0,0,1,14,4Z /> <rect class=ql-fill x=3 y=6 width=12 height=6 rx=1 ry=1 /> </svg>\";\n\n/***/ }),\n/* 88 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M13,16H5a1,1,0,0,1,0-2h8A1,1,0,0,1,13,16Z /> <path class=ql-fill d=M13,4H5A1,1,0,0,1,5,2h8A1,1,0,0,1,13,4Z /> <rect class=ql-fill x=2 y=6 width=14 height=6 rx=1 ry=1 /> </svg>\";\n\n/***/ }),\n/* 89 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M15,8H13a1,1,0,0,1,0-2h2A1,1,0,0,1,15,8Z /> <path class=ql-fill d=M15,12H13a1,1,0,0,1,0-2h2A1,1,0,0,1,15,12Z /> <path class=ql-fill d=M15,16H5a1,1,0,0,1,0-2H15A1,1,0,0,1,15,16Z /> <path class=ql-fill d=M15,4H5A1,1,0,0,1,5,2H15A1,1,0,0,1,15,4Z /> <rect class=ql-fill x=2 y=6 width=8 height=6 rx=1 ry=1 /> </svg>\";\n\n/***/ }),\n/* 90 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M5,8H3A1,1,0,0,1,3,6H5A1,1,0,0,1,5,8Z /> <path class=ql-fill d=M5,12H3a1,1,0,0,1,0-2H5A1,1,0,0,1,5,12Z /> <path class=ql-fill d=M13,16H3a1,1,0,0,1,0-2H13A1,1,0,0,1,13,16Z /> <path class=ql-fill d=M13,4H3A1,1,0,0,1,3,2H13A1,1,0,0,1,13,4Z /> <rect class=ql-fill x=8 y=6 width=8 height=6 rx=1 ry=1 transform=\\\"translate(24 18) rotate(-180)\\\"/> </svg>\";\n\n/***/ }),\n/* 91 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M11.759,2.482a2.561,2.561,0,0,0-3.53.607A7.656,7.656,0,0,0,6.8,6.2C6.109,9.188,5.275,14.677,4.15,14.927a1.545,1.545,0,0,0-1.3-.933A0.922,0.922,0,0,0,2,15.036S1.954,16,4.119,16s3.091-2.691,3.7-5.553c0.177-.826.36-1.726,0.554-2.6L8.775,6.2c0.381-1.421.807-2.521,1.306-2.676a1.014,1.014,0,0,0,1.02.56A0.966,0.966,0,0,0,11.759,2.482Z></path> <rect class=ql-fill height=1.6 rx=0.8 ry=0.8 width=5 x=5.15 y=6.2></rect> <path class=ql-fill d=M13.663,12.027a1.662,1.662,0,0,1,.266-0.276q0.193,0.069.456,0.138a2.1,2.1,0,0,0,.535.069,1.075,1.075,0,0,0,.767-0.3,1.044,1.044,0,0,0,.314-0.8,0.84,0.84,0,0,0-.238-0.619,0.8,0.8,0,0,0-.594-0.239,1.154,1.154,0,0,0-.781.3,4.607,4.607,0,0,0-.781,1q-0.091.15-.218,0.346l-0.246.38c-0.068-.288-0.137-0.582-0.212-0.885-0.459-1.847-2.494-.984-2.941-0.8-0.482.2-.353,0.647-0.094,0.529a0.869,0.869,0,0,1,1.281.585c0.217,0.751.377,1.436,0.527,2.038a5.688,5.688,0,0,1-.362.467,2.69,2.69,0,0,1-.264.271q-0.221-.08-0.471-0.147a2.029,2.029,0,0,0-.522-0.066,1.079,1.079,0,0,0-.768.3A1.058,1.058,0,0,0,9,15.131a0.82,0.82,0,0,0,.832.852,1.134,1.134,0,0,0,.787-0.3,5.11,5.11,0,0,0,.776-0.993q0.141-.219.215-0.34c0.046-.076.122-0.194,0.223-0.346a2.786,2.786,0,0,0,.918,1.726,2.582,2.582,0,0,0,2.376-.185c0.317-.181.212-0.565,0-0.494A0.807,0.807,0,0,1,14.176,15a5.159,5.159,0,0,1-.913-2.446l0,0Q13.487,12.24,13.663,12.027Z></path> </svg>\";\n\n/***/ }),\n/* 92 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M10,4V14a1,1,0,0,1-2,0V10H3v4a1,1,0,0,1-2,0V4A1,1,0,0,1,3,4V8H8V4a1,1,0,0,1,2,0Zm6.06787,9.209H14.98975V7.59863a.54085.54085,0,0,0-.605-.60547h-.62744a1.01119,1.01119,0,0,0-.748.29688L11.645,8.56641a.5435.5435,0,0,0-.022.8584l.28613.30762a.53861.53861,0,0,0,.84717.0332l.09912-.08789a1.2137,1.2137,0,0,0,.2417-.35254h.02246s-.01123.30859-.01123.60547V13.209H12.041a.54085.54085,0,0,0-.605.60547v.43945a.54085.54085,0,0,0,.605.60547h4.02686a.54085.54085,0,0,0,.605-.60547v-.43945A.54085.54085,0,0,0,16.06787,13.209Z /> </svg>\";\n\n/***/ }),\n/* 93 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M16.73975,13.81445v.43945a.54085.54085,0,0,1-.605.60547H11.855a.58392.58392,0,0,1-.64893-.60547V14.0127c0-2.90527,3.39941-3.42187,3.39941-4.55469a.77675.77675,0,0,0-.84717-.78125,1.17684,1.17684,0,0,0-.83594.38477c-.2749.26367-.561.374-.85791.13184l-.4292-.34082c-.30811-.24219-.38525-.51758-.1543-.81445a2.97155,2.97155,0,0,1,2.45361-1.17676,2.45393,2.45393,0,0,1,2.68408,2.40918c0,2.45312-3.1792,2.92676-3.27832,3.93848h2.79443A.54085.54085,0,0,1,16.73975,13.81445ZM9,3A.99974.99974,0,0,0,8,4V8H3V4A1,1,0,0,0,1,4V14a1,1,0,0,0,2,0V10H8v4a1,1,0,0,0,2,0V4A.99974.99974,0,0,0,9,3Z /> </svg>\";\n\n/***/ }),\n/* 94 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=7 x2=13 y1=4 y2=4></line> <line class=ql-stroke x1=5 x2=11 y1=14 y2=14></line> <line class=ql-stroke x1=8 x2=10 y1=14 y2=4></line> </svg>\";\n\n/***/ }),\n/* 95 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <rect class=ql-stroke height=10 width=12 x=3 y=4></rect> <circle class=ql-fill cx=6 cy=7 r=1></circle> <polyline class=\\\"ql-even ql-fill\\\" points=\\\"5 12 5 11 7 9 8 10 11 7 13 9 13 12 5 12\\\"></polyline> </svg>\";\n\n/***/ }),\n/* 96 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=3 x2=15 y1=14 y2=14></line> <line class=ql-stroke x1=3 x2=15 y1=4 y2=4></line> <line class=ql-stroke x1=9 x2=15 y1=9 y2=9></line> <polyline class=\\\"ql-fill ql-stroke\\\" points=\\\"3 7 3 11 5 9 3 7\\\"></polyline> </svg>\";\n\n/***/ }),\n/* 97 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=3 x2=15 y1=14 y2=14></line> <line class=ql-stroke x1=3 x2=15 y1=4 y2=4></line> <line class=ql-stroke x1=9 x2=15 y1=9 y2=9></line> <polyline class=ql-stroke points=\\\"5 7 5 11 3 9 5 7\\\"></polyline> </svg>\";\n\n/***/ }),\n/* 98 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=7 x2=11 y1=7 y2=11></line> <path class=\\\"ql-even ql-stroke\\\" d=M8.9,4.577a3.476,3.476,0,0,1,.36,4.679A3.476,3.476,0,0,1,4.577,8.9C3.185,7.5,2.035,6.4,4.217,4.217S7.5,3.185,8.9,4.577Z></path> <path class=\\\"ql-even ql-stroke\\\" d=M13.423,9.1a3.476,3.476,0,0,0-4.679-.36,3.476,3.476,0,0,0,.36,4.679c1.392,1.392,2.5,2.542,4.679.36S14.815,10.5,13.423,9.1Z></path> </svg>\";\n\n/***/ }),\n/* 99 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=7 x2=15 y1=4 y2=4></line> <line class=ql-stroke x1=7 x2=15 y1=9 y2=9></line> <line class=ql-stroke x1=7 x2=15 y1=14 y2=14></line> <line class=\\\"ql-stroke ql-thin\\\" x1=2.5 x2=4.5 y1=5.5 y2=5.5></line> <path class=ql-fill d=M3.5,6A0.5,0.5,0,0,1,3,5.5V3.085l-0.276.138A0.5,0.5,0,0,1,2.053,3c-0.124-.247-0.023-0.324.224-0.447l1-.5A0.5,0.5,0,0,1,4,2.5v3A0.5,0.5,0,0,1,3.5,6Z></path> <path class=\\\"ql-stroke ql-thin\\\" d=M4.5,10.5h-2c0-.234,1.85-1.076,1.85-2.234A0.959,0.959,0,0,0,2.5,8.156></path> <path class=\\\"ql-stroke ql-thin\\\" d=M2.5,14.846a0.959,0.959,0,0,0,1.85-.109A0.7,0.7,0,0,0,3.75,14a0.688,0.688,0,0,0,.6-0.736,0.959,0.959,0,0,0-1.85-.109></path> </svg>\";\n\n/***/ }),\n/* 100 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=6 x2=15 y1=4 y2=4></line> <line class=ql-stroke x1=6 x2=15 y1=9 y2=9></line> <line class=ql-stroke x1=6 x2=15 y1=14 y2=14></line> <line class=ql-stroke x1=3 x2=3 y1=4 y2=4></line> <line class=ql-stroke x1=3 x2=3 y1=9 y2=9></line> <line class=ql-stroke x1=3 x2=3 y1=14 y2=14></line> </svg>\";\n\n/***/ }),\n/* 101 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg class=\\\"\\\" viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=9 x2=15 y1=4 y2=4></line> <polyline class=ql-stroke points=\\\"3 4 4 5 6 3\\\"></polyline> <line class=ql-stroke x1=9 x2=15 y1=14 y2=14></line> <polyline class=ql-stroke points=\\\"3 14 4 15 6 13\\\"></polyline> <line class=ql-stroke x1=9 x2=15 y1=9 y2=9></line> <polyline class=ql-stroke points=\\\"3 9 4 10 6 8\\\"></polyline> </svg>\";\n\n/***/ }),\n/* 102 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M15.5,15H13.861a3.858,3.858,0,0,0,1.914-2.975,1.8,1.8,0,0,0-1.6-1.751A1.921,1.921,0,0,0,12.021,11.7a0.50013,0.50013,0,1,0,.957.291h0a0.914,0.914,0,0,1,1.053-.725,0.81,0.81,0,0,1,.744.762c0,1.076-1.16971,1.86982-1.93971,2.43082A1.45639,1.45639,0,0,0,12,15.5a0.5,0.5,0,0,0,.5.5h3A0.5,0.5,0,0,0,15.5,15Z /> <path class=ql-fill d=M9.65,5.241a1,1,0,0,0-1.409.108L6,7.964,3.759,5.349A1,1,0,0,0,2.192,6.59178Q2.21541,6.6213,2.241,6.649L4.684,9.5,2.241,12.35A1,1,0,0,0,3.71,13.70722q0.02557-.02768.049-0.05722L6,11.036,8.241,13.65a1,1,0,1,0,1.567-1.24277Q9.78459,12.3777,9.759,12.35L7.316,9.5,9.759,6.651A1,1,0,0,0,9.65,5.241Z /> </svg>\";\n\n/***/ }),\n/* 103 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M15.5,7H13.861a4.015,4.015,0,0,0,1.914-2.975,1.8,1.8,0,0,0-1.6-1.751A1.922,1.922,0,0,0,12.021,3.7a0.5,0.5,0,1,0,.957.291,0.917,0.917,0,0,1,1.053-.725,0.81,0.81,0,0,1,.744.762c0,1.077-1.164,1.925-1.934,2.486A1.423,1.423,0,0,0,12,7.5a0.5,0.5,0,0,0,.5.5h3A0.5,0.5,0,0,0,15.5,7Z /> <path class=ql-fill d=M9.651,5.241a1,1,0,0,0-1.41.108L6,7.964,3.759,5.349a1,1,0,1,0-1.519,1.3L4.683,9.5,2.241,12.35a1,1,0,1,0,1.519,1.3L6,11.036,8.241,13.65a1,1,0,0,0,1.519-1.3L7.317,9.5,9.759,6.651A1,1,0,0,0,9.651,5.241Z /> </svg>\";\n\n/***/ }),\n/* 104 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=\\\"ql-stroke ql-thin\\\" x1=15.5 x2=2.5 y1=8.5 y2=9.5></line> <path class=ql-fill d=M9.007,8C6.542,7.791,6,7.519,6,6.5,6,5.792,7.283,5,9,5c1.571,0,2.765.679,2.969,1.309a1,1,0,0,0,1.9-.617C13.356,4.106,11.354,3,9,3,6.2,3,4,4.538,4,6.5a3.2,3.2,0,0,0,.5,1.843Z></path> <path class=ql-fill d=M8.984,10C11.457,10.208,12,10.479,12,11.5c0,0.708-1.283,1.5-3,1.5-1.571,0-2.765-.679-2.969-1.309a1,1,0,1,0-1.9.617C4.644,13.894,6.646,15,9,15c2.8,0,5-1.538,5-3.5a3.2,3.2,0,0,0-.5-1.843Z></path> </svg>\";\n\n/***/ }),\n/* 105 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-stroke d=M5,3V9a4.012,4.012,0,0,0,4,4H9a4.012,4.012,0,0,0,4-4V3></path> <rect class=ql-fill height=1 rx=0.5 ry=0.5 width=12 x=3 y=15></rect> </svg>\";\n\n/***/ }),\n/* 106 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <rect class=ql-stroke height=12 width=12 x=3 y=3></rect> <rect class=ql-fill height=12 width=1 x=5 y=3></rect> <rect class=ql-fill height=12 width=1 x=12 y=3></rect> <rect class=ql-fill height=2 width=8 x=5 y=8></rect> <rect class=ql-fill height=1 width=3 x=3 y=5></rect> <rect class=ql-fill height=1 width=3 x=3 y=7></rect> <rect class=ql-fill height=1 width=3 x=3 y=10></rect> <rect class=ql-fill height=1 width=3 x=3 y=12></rect> <rect class=ql-fill height=1 width=3 x=12 y=5></rect> <rect class=ql-fill height=1 width=3 x=12 y=7></rect> <rect class=ql-fill height=1 width=3 x=12 y=10></rect> <rect class=ql-fill height=1 width=3 x=12 y=12></rect> </svg>\";\n\n/***/ }),\n/* 107 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <polygon class=ql-stroke points=\\\"7 11 9 13 11 11 7 11\\\"></polygon> <polygon class=ql-stroke points=\\\"7 7 9 5 11 7 7 7\\\"></polygon> </svg>\";\n\n/***/ }),\n/* 108 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.BubbleTooltip = undefined;\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\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 _extend = __webpack_require__(3);\n\nvar _extend2 = _interopRequireDefault(_extend);\n\nvar _emitter = __webpack_require__(8);\n\nvar _emitter2 = _interopRequireDefault(_emitter);\n\nvar _base = __webpack_require__(43);\n\nvar _base2 = _interopRequireDefault(_base);\n\nvar _selection = __webpack_require__(15);\n\nvar _icons = __webpack_require__(41);\n\nvar _icons2 = _interopRequireDefault(_icons);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar TOOLBAR_CONFIG = [['bold', 'italic', 'link'], [{ header: 1 }, { header: 2 }, 'blockquote']];\n\nvar BubbleTheme = function (_BaseTheme) {\n  _inherits(BubbleTheme, _BaseTheme);\n\n  function BubbleTheme(quill, options) {\n    _classCallCheck(this, BubbleTheme);\n\n    if (options.modules.toolbar != null && options.modules.toolbar.container == null) {\n      options.modules.toolbar.container = TOOLBAR_CONFIG;\n    }\n\n    var _this = _possibleConstructorReturn(this, (BubbleTheme.__proto__ || Object.getPrototypeOf(BubbleTheme)).call(this, quill, options));\n\n    _this.quill.container.classList.add('ql-bubble');\n    return _this;\n  }\n\n  _createClass(BubbleTheme, [{\n    key: 'extendToolbar',\n    value: function extendToolbar(toolbar) {\n      this.tooltip = new BubbleTooltip(this.quill, this.options.bounds);\n      this.tooltip.root.appendChild(toolbar.container);\n      this.buildButtons([].slice.call(toolbar.container.querySelectorAll('button')), _icons2.default);\n      this.buildPickers([].slice.call(toolbar.container.querySelectorAll('select')), _icons2.default);\n    }\n  }]);\n\n  return BubbleTheme;\n}(_base2.default);\n\nBubbleTheme.DEFAULTS = (0, _extend2.default)(true, {}, _base2.default.DEFAULTS, {\n  modules: {\n    toolbar: {\n      handlers: {\n        link: function link(value) {\n          if (!value) {\n            this.quill.format('link', false);\n          } else {\n            this.quill.theme.tooltip.edit();\n          }\n        }\n      }\n    }\n  }\n});\n\nvar BubbleTooltip = function (_BaseTooltip) {\n  _inherits(BubbleTooltip, _BaseTooltip);\n\n  function BubbleTooltip(quill, bounds) {\n    _classCallCheck(this, BubbleTooltip);\n\n    var _this2 = _possibleConstructorReturn(this, (BubbleTooltip.__proto__ || Object.getPrototypeOf(BubbleTooltip)).call(this, quill, bounds));\n\n    _this2.quill.on(_emitter2.default.events.EDITOR_CHANGE, function (type, range, oldRange, source) {\n      if (type !== _emitter2.default.events.SELECTION_CHANGE) return;\n      if (range != null && range.length > 0 && source === _emitter2.default.sources.USER) {\n        _this2.show();\n        // Lock our width so we will expand beyond our offsetParent boundaries\n        _this2.root.style.left = '0px';\n        _this2.root.style.width = '';\n        _this2.root.style.width = _this2.root.offsetWidth + 'px';\n        var lines = _this2.quill.getLines(range.index, range.length);\n        if (lines.length === 1) {\n          _this2.position(_this2.quill.getBounds(range));\n        } else {\n          var lastLine = lines[lines.length - 1];\n          var index = _this2.quill.getIndex(lastLine);\n          var length = Math.min(lastLine.length() - 1, range.index + range.length - index);\n          var _bounds = _this2.quill.getBounds(new _selection.Range(index, length));\n          _this2.position(_bounds);\n        }\n      } else if (document.activeElement !== _this2.textbox && _this2.quill.hasFocus()) {\n        _this2.hide();\n      }\n    });\n    return _this2;\n  }\n\n  _createClass(BubbleTooltip, [{\n    key: 'listen',\n    value: function listen() {\n      var _this3 = this;\n\n      _get(BubbleTooltip.prototype.__proto__ || Object.getPrototypeOf(BubbleTooltip.prototype), 'listen', this).call(this);\n      this.root.querySelector('.ql-close').addEventListener('click', function () {\n        _this3.root.classList.remove('ql-editing');\n      });\n      this.quill.on(_emitter2.default.events.SCROLL_OPTIMIZE, function () {\n        // Let selection be restored by toolbar handlers before repositioning\n        setTimeout(function () {\n          if (_this3.root.classList.contains('ql-hidden')) return;\n          var range = _this3.quill.getSelection();\n          if (range != null) {\n            _this3.position(_this3.quill.getBounds(range));\n          }\n        }, 1);\n      });\n    }\n  }, {\n    key: 'cancel',\n    value: function cancel() {\n      this.show();\n    }\n  }, {\n    key: 'position',\n    value: function position(reference) {\n      var shift = _get(BubbleTooltip.prototype.__proto__ || Object.getPrototypeOf(BubbleTooltip.prototype), 'position', this).call(this, reference);\n      var arrow = this.root.querySelector('.ql-tooltip-arrow');\n      arrow.style.marginLeft = '';\n      if (shift === 0) return shift;\n      arrow.style.marginLeft = -1 * shift - arrow.offsetWidth / 2 + 'px';\n    }\n  }]);\n\n  return BubbleTooltip;\n}(_base.BaseTooltip);\n\nBubbleTooltip.TEMPLATE = ['<span class=\"ql-tooltip-arrow\"></span>', '<div class=\"ql-tooltip-editor\">', '<input type=\"text\" data-formula=\"e=mc^2\" data-link=\"https://quilljs.com\" data-video=\"Embed URL\">', '<a class=\"ql-close\"></a>', '</div>'].join('');\n\nexports.BubbleTooltip = BubbleTooltip;\nexports.default = BubbleTheme;\n\n/***/ }),\n/* 109 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(63);\n\n\n/***/ })\n/******/ ])[\"default\"];\n});","'use strict';\n\nvar alphabet;\nvar alphabetIndexMap;\nvar alphabetIndexMapLength = 0;\n\nfunction isNumberCode(code) {\n  return code >= 48 && code <= 57;\n}\n\nfunction naturalCompare(a, b) {\n  var lengthA = (a += '').length;\n  var lengthB = (b += '').length;\n  var aIndex = 0;\n  var bIndex = 0;\n\n  while (aIndex < lengthA && bIndex < lengthB) {\n    var charCodeA = a.charCodeAt(aIndex);\n    var charCodeB = b.charCodeAt(bIndex);\n\n    if (isNumberCode(charCodeA)) {\n      if (!isNumberCode(charCodeB)) {\n        return charCodeA - charCodeB;\n      }\n\n      var numStartA = aIndex;\n      var numStartB = bIndex;\n\n      while (charCodeA === 48 && ++numStartA < lengthA) {\n        charCodeA = a.charCodeAt(numStartA);\n      }\n      while (charCodeB === 48 && ++numStartB < lengthB) {\n        charCodeB = b.charCodeAt(numStartB);\n      }\n\n      var numEndA = numStartA;\n      var numEndB = numStartB;\n\n      while (numEndA < lengthA && isNumberCode(a.charCodeAt(numEndA))) {\n        ++numEndA;\n      }\n      while (numEndB < lengthB && isNumberCode(b.charCodeAt(numEndB))) {\n        ++numEndB;\n      }\n\n      var difference = numEndA - numStartA - numEndB + numStartB; // numA length - numB length\n      if (difference) {\n        return difference;\n      }\n\n      while (numStartA < numEndA) {\n        difference = a.charCodeAt(numStartA++) - b.charCodeAt(numStartB++);\n        if (difference) {\n          return difference;\n        }\n      }\n\n      aIndex = numEndA;\n      bIndex = numEndB;\n      continue;\n    }\n\n    if (charCodeA !== charCodeB) {\n      if (\n        charCodeA < alphabetIndexMapLength &&\n        charCodeB < alphabetIndexMapLength &&\n        alphabetIndexMap[charCodeA] !== -1 &&\n        alphabetIndexMap[charCodeB] !== -1\n      ) {\n        return alphabetIndexMap[charCodeA] - alphabetIndexMap[charCodeB];\n      }\n\n      return charCodeA - charCodeB;\n    }\n\n    ++aIndex;\n    ++bIndex;\n  }\n\n  if (aIndex >= lengthA && bIndex < lengthB && lengthA >= lengthB) {\n    return -1;\n  }\n\n  if (bIndex >= lengthB && aIndex < lengthA && lengthB >= lengthA) {\n    return 1;\n  }\n\n  return lengthA - lengthB;\n}\n\nnaturalCompare.caseInsensitive = naturalCompare.i = function(a, b) {\n  return naturalCompare(('' + a).toLowerCase(), ('' + b).toLowerCase());\n};\n\nObject.defineProperties(naturalCompare, {\n  alphabet: {\n    get: function() {\n      return alphabet;\n    },\n\n    set: function(value) {\n      alphabet = value;\n      alphabetIndexMap = [];\n\n      var i = 0;\n\n      if (alphabet) {\n        for (; i < alphabet.length; i++) {\n          alphabetIndexMap[alphabet.charCodeAt(i)] = i;\n        }\n      }\n\n      alphabetIndexMapLength = alphabetIndexMap.length;\n\n      for (i = 0; i < alphabetIndexMapLength; i++) {\n        if (alphabetIndexMap[i] === undefined) {\n          alphabetIndexMap[i] = -1;\n        }\n      }\n    },\n  },\n});\n\nmodule.exports = naturalCompare;\n"],"names":["factory","window","modules","installedModules","moduleId","exports","module","i","l","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","obj","_AbstractEvent","_AbstractEvent2","default","_AbstractPlugin","_AbstractPlugin2","_closest","_interopRequireDefault","_requestNextAnimationFrame","_SensorEvent","keys","forEach","_Sensor","_Sensor2","_DragEvent","_DraggableEvent","_Plugins","_Sensors","_Draggable","_Draggable2","_MouseSensor","_TouchSensor","_DragSensor","_ForceTouchSensor","_SnappableEvent","_CollidableEvent","_SortableEvent","_SwappableEvent","_DroppableEvent","_Announcement","defaultOptions","_Focusable","_Mirror","_Scrollable","undefined","_extends","assign","target","arguments","length","source","onSortableSorted","duration","easingFunction","horizontal","SwapAnimation","constructor","draggable","super","this","options","getOptions","lastAnimationFrame","attach","on","detach","off","swapAnimation","oldIndex","newIndex","dragEvent","over","cancelAnimationFrame","requestAnimationFrame","animate","from","to","element","style","pointerEvents","width","offsetWidth","transform","height","offsetHeight","addEventListener","resetElementOnTransitionEnd","transition","event","removeEventListener","_SwapAnimation","_SwapAnimation2","onDragStart","onDragStop","onDragOver","onDragOut","onMirrorCreated","onMirrorDestroy","Snappable","firstSource","mirror","canceled","snapInEvent","SnapInEvent","snappable","droppable","trigger","display","classList","remove","getClassNameFor","add","setTimeout","placedTimeout","snapOutEvent","SnapOutEvent","SnapEvent","data","type","cancelable","_Snappable","_Snappable2","_utils","resize","ResizeMirror","lastWidth","lastHeight","resizeMirror","overContainer","parentNode","appendChild","overElement","getDraggableElementsForContainer","requestNextAnimationFrame","overRect","getBoundingClientRect","_ResizeMirror","_ResizeMirror2","onDragMove","onRequestAnimationFrame","Collidable","currentlyCollidingElement","lastCollidingElement","currentAnimationFrame","getCollidables","collidables","Array","slice","document","querySelectorAll","NodeList","HTMLElement","sensorEvent","cancel","collidableInEvent","CollidableInEvent","collidingElement","collidableOutEvent","CollidableOutEvent","enteringCollidable","Boolean","leavingCollidable","closest","includes","CollidableEvent","_Collidable","_Collidable2","onDragOverContainer","defaultAnnouncements","sourceText","textContent","trim","id","overText","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","Sortable","containers","announcements","startIndex","startContainer","destroy","index","indexOf","sortableStartEvent","SortableStartEvent","sortableSortEvent","SortableSortEvent","currentIndex","moves","move","children","oldContainer","newContainer","sortableSortedEvent","SortableSortedEvent","originalSource","sortableStopEvent","SortableStopEvent","emptyOverContainer","differentContainer","sameContainer","moveInsideEmptyContainer","insertBefore","nextElementSibling","moveWithinContainer","moveOutsideContainer","SortableEvent","_Sortable","_Sortable2","swappedElement","Swappable","lastOver","_onDragStart","_onDragOver","_onDragStop","swappableStartEvent","SwappableStartEvent","swappableSwapEvent","SwappableSwapEvent","swap","swappableSwappedEvent","SwappableSwappedEvent","swappableStopEvent","SwappableStopEvent","overParent","sourceParent","callback","tmpElement","createElement","removeChild","withTempElement","SwappableEvent","_Swappable","_Swappable2","dropInDropzone","returnToOriginalDropzone","closestDropzone","getDropzones","dropzone","defaultClasses","Droppable","classes","dropzones","lastDropzone","initialDropzone","droppableStartEvent","DroppableStartEvent","dropzoneElement","contains","droppableStopEvent","DroppableStopEvent","occupiedClass","droppableDroppedEvent","DroppableDroppedEvent","droppableReturnedEvent","DroppableReturnedEvent","DroppableEvent","_Droppable","_Droppable2","__webpack_require__","callbacks","push","copy","splice","caughtErrors","error","console","_Emitter","_Emitter2","onDragPressure","handle","delay","plugins","sensors","Draggable","body","Error","emitter","dragging","defaultPlugins","values","Plugins","map","Plugin","defaultSensors","MouseSensor","TouchSensor","addPlugin","addSensor","draggableInitializedEvent","DraggableInitializedEvent","draggableDestroyEvent","DraggableDestroyEvent","removePlugin","plugin","removeSensor","sensor","activePlugins","filter","activeSensors","Sensor","addContainer","removeContainer","container","isDragging","getDraggableElements","reduce","current","childElement","getSensorEvent","sourceContainer","lastPlacedSource","lastPlacedContainer","clearTimeout","placedTimeoutID","cloneNode","DragStartEvent","applyUserSelect","newSensorEvent","clone","detail","dragMoveEvent","DragMoveEvent","withinCorrectContainer","isLeavingContainer","currentOverContainer","isLeavingDraggable","currentOver","isOverContainer","isOverDraggable","dragOutEvent","DragOutEvent","dragOutContainerEvent","DragOutContainerEvent","dragOverContainerEvent","DragOverContainerEvent","dragOverEvent","DragOverEvent","dragStopEvent","DragStopEvent","originalEvent","dragPressureEvent","DragPressureEvent","pressure","webkitUserSelect","mozUserSelect","msUserSelect","oUserSelect","userSelect","Announcement","Focusable","Mirror","Scrollable","onMouseForceWillBegin","onMouseForceDown","onMouseDown","onMouseForceChange","onMouseMove","onMouseUp","onMouseForceGlobalChange","ForceTouchSensor","mightDrag","preventDefault","elementFromPoint","clientX","clientY","currentTarget","dragStartEvent","DragStartSensorEvent","currentContainer","DragStopSensorEvent","stopPropagation","stopImmediatePropagation","DragMoveSensorEvent","DragPressureSensorEvent","webkitForce","_ForceTouchSensor2","onDragEnd","onDrop","reset","DragSensor","mouseDownTimeout","draggableElement","nativeDraggableElement","dataTransfer","setData","effectAllowed","dropEffect","form","contenteditable","_DragSensor2","onTouchStart","onTouchHold","onTouchEnd","onTouchMove","preventScrolling","passive","currentScrollableParent","tapTimeout","touchMoved","onContextMenu","touch","touches","changedTouches","pageX","pageY","scrollX","scrollY","_TouchSensor2","SensorEvent","onContextMenuWhileDragging","mouseDown","openedContextMenu","button","ctrlKey","metaKey","preventNativeDragStart","_MouseSensor2","createEvent","initEvent","dispatchEvent","lastEvent","_requestNextAnimationFrame2","selector","nodeList","singleElement","isSelector","isFunction","isNodeList","isElement","correspondingUseElement","correspondingElement","currentElement","matchFunction","Element","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","_closest2","scroll","speed","sensitivity","scrollableElements","currentMousePosition","scrollAnimationFrame","scrollableElement","findScrollableElementFrame","scrollable","getScrollableElement","hasDefinedScrollableElements","documentElement","getDocumentScrollingElement","position","getComputedStyle","getPropertyValue","excludeStaticParents","parent","isStaticallyPositioned","overflowRegex","computedStyles","overflow","test","hasOverflow","closestScrollableElement","scrollOffset","x","y","pageYOffset","scrollTop","pageXOffset","scrollLeft","rect","bottomCutOff","bottom","innerHeight","cutOff","top","documentScrollingElement","innerWidth","left","scrollingElement","_Scrollable2","MirrorDestroyEvent","MirrorMoveEvent","MirrorAttachedEvent","MirrorCreatedEvent","MirrorCreateEvent","MirrorEvent","_MirrorEvent","getAppendableContainer","onScroll","onMirrorMove","_objectWithoutProperties","constrainDimensions","xAxis","yAxis","cursorOffsetX","cursorOffsetY","initialScrollOffset","mirrorCreateEvent","isNativeDragEvent","appendableContainer","mirrorCreatedEvent","mirrorAttachedEvent","mirrorMoveEvent","mirrorDestroyEvent","initialState","mirrorClass","Promise","resolve","then","computeMirrorDimensions","calculateMirrorOffset","resetMirror","addMirrorClasses","positionMirror","initial","removeMirrorID","_ref","mirrorOffset","initialX","initialY","args","mirrorEvent","raf","appendTo","querySelector","_ref2","withPromise","sourceRect","_ref3","_ref4","computedSourceStyles","margin","_ref5","_ref6","removeAttribute","withFrame","_ref7","result","frame","reject","_Mirror2","onInitialize","onDestroy","focusable","getElements","getAttribute","tabIndex","elementsWithMissingTabIndex","decorateElement","tabIndexElementPosition","stripElement","_Focusable2","announceEvent","announceMessage","expire","originalTriggerMethod","message","liveRegion","announce","setAttribute","createRegion","_Announcement2","DraggableEvent","AbstractEvent","DragEvent","Sensors","BasePlugin","BaseEvent","_interopRequireWildcard","newObj","e","Map","has","set","delete","Event","bubbles","update","nodeName","clientWidth","a","overflowY","overflowX","wordWrap","boxSizing","parseFloat","paddingTop","paddingBottom","borderTopWidth","borderBottomWidth","isNaN","u","scrollHeight","node","Math","round","right","auto","basePlacements","start","end","clippingParents","viewport","popper","reference","variationPlacements","acc","placement","concat","beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite","modifierPhases","getNodeName","toLowerCase","getWindow","toString","ownerDocument","defaultView","isHTMLElement","isShadowRoot","ShadowRoot","enabled","phase","fn","state","elements","styles","attributes","effect","initialStyles","strategy","arrow","attribute","requires","getBasePlacement","split","includeScale","getLayoutRect","clientRect","abs","offsetLeft","offsetTop","child","rootNode","getRootNode","next","isSameNode","host","isTableElement","getDocumentElement","getParentNode","assignedSlot","getTrueOffsetParent","offsetParent","getOffsetParent","isFirefox","navigator","userAgent","currentNode","css","perspective","contain","willChange","getContainingBlock","getMainAxisFromPlacement","max","min","within","mergePaddingObject","paddingObject","expandToHashMap","hashMap","_state$modifiersData$","arrowElement","popperOffsets","modifiersData","basePlacement","axis","len","padding","rects","toPaddingObject","arrowRect","minProp","maxProp","endDiff","startDiff","arrowOffsetParent","clientSize","clientHeight","centerToReference","center","offset","axisProp","centerOffset","_options$element","requiresIfExists","getVariation","unsetSides","mapToStyles","_Object$assign2","popperRect","variation","offsets","gpuAcceleration","adaptive","roundOffsets","dpr","devicePixelRatio","roundOffsetsByDPR","_ref3$x","_ref3$y","hasX","hasY","sideX","sideY","win","heightProp","widthProp","_Object$assign","commonStyles","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","instance","_options$scroll","_options$resize","scrollParents","scrollParent","hash","getOppositePlacement","replace","matched","getOppositeVariationPlacement","getWindowScroll","getWindowScrollBarX","isScrollParent","_getComputedStyle","getScrollParent","listScrollParents","list","_element$ownerDocumen","isBody","visualViewport","updatedList","rectToClientRect","getClientRectFromMixedType","clippingParent","html","getViewportRect","clientTop","clientLeft","getInnerBoundingClientRect","winScroll","scrollWidth","direction","getDocumentRect","getClippingRect","boundary","rootBoundary","mainClippingParents","clipperElement","getClippingParents","firstClippingParent","clippingRect","accRect","computeOffsets","commonX","commonY","mainAxis","detectOverflow","_options","_options$placement","_options$boundary","_options$rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","altContext","clippingClientRect","contextElement","referenceClientRect","popperClientRect","elementClientRect","overflowOffsets","offsetData","multiply","_skip","_options$mainAxis","checkMainAxis","_options$altAxis","altAxis","checkAltAxis","specifiedFallbackPlacements","fallbackPlacements","_options$flipVariatio","flipVariations","allowedAutoPlacements","preferredPlacement","oppositePlacement","getExpandedFallbackPlacements","placements","_options$allowedAutoP","allowedPlacements","overflows","sort","b","computeAutoPlacement","referenceRect","checksMap","makeFallbackChecks","firstFittingPlacement","_basePlacement","isStartVariation","isVertical","mainVariationSide","altVariationSide","checks","every","check","_loop","_i","fittingPlacement","find","getSideOffsets","preventedOffsets","isAnySideFullyClipped","some","side","preventOverflow","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","_options$offset","invertDistance","skidding","distance","distanceAndSkiddingToXY","_data$state$placement","_options$tether","tether","_options$tetherOffset","tetherOffset","isBasePlacement","tetherOffsetValue","mainSide","altSide","additive","minLen","maxLen","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","clientOffset","offsetModifierValue","tetherMin","tetherMax","preventedOffset","_mainSide","_altSide","_offset","_min","_max","_preventedOffset","getCompositeRect","elementOrVirtualElement","isFixed","isOffsetParentAnElement","offsetParentIsScaled","scaleX","scaleY","isElementScaled","order","modifiers","visited","Set","modifier","dep","depModifier","DEFAULT_OPTIONS","areValidElements","_len","_key","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","pending","orderedModifiers","effectCleanupFns","isDestroyed","setOptions","setOptionsAction","cleanupModifierEffects","orderModifiers","merged","existing","mergeByName","_ref3$options","cleanupFn","noopFn","forceUpdate","_state$elements","_state$orderedModifie","_state$orderedModifie2","onFirstUpdate","createPopper","eventListeners","TRANSITION_END","getSelector","hrefAttr","startsWith","getSelectorFromElement","getElementFromSelector","triggerTransitionEnd","jquery","nodeType","getElement","typeCheckConfig","componentName","config","configTypes","expectedTypes","valueType","match","RegExp","TypeError","toUpperCase","isVisible","getClientRects","isDisabled","ELEMENT_NODE","disabled","hasAttribute","findShadowRoot","attachShadow","root","noop","reflow","getjQuery","jQuery","DOMContentLoadedCallbacks","isRTL","dir","defineJQueryPlugin","$","NAME","JQUERY_NO_CONFLICT","jQueryInterface","Constructor","noConflict","readyState","execute","executeAfterTransition","transitionElement","waitForTransition","emulatedDuration","transitionDuration","transitionDelay","floatTransitionDuration","Number","floatTransitionDelay","getTransitionDurationFromElement","called","handler","getNextActiveElement","activeElement","shouldGetNext","isCycleAllowed","listLength","namespaceRegex","stripNameRegex","stripUidRegex","eventRegistry","uidEvent","customEvents","mouseenter","mouseleave","customEventsRegex","nativeEvents","getUidEvent","uid","getEvent","findHandler","events","delegationSelector","uidEventList","originalHandler","normalizeParams","originalTypeEvent","delegationFn","delegation","typeEvent","getTypeEvent","addHandler","oneOff","wrapFn","relatedTarget","delegateTarget","handlers","previousFn","domElements","EventHandler","apply","bootstrapDelegationHandler","bootstrapHandler","removeHandler","one","inNamespace","isNamespace","elementEvent","namespace","storeElementEvent","handlerKey","removeNamespacedHandlers","keyHandlers","isNative","jQueryEvent","nativeDispatch","defaultPrevented","evt","isPropagationStopped","isImmediatePropagationStopped","isDefaultPrevented","CustomEvent","elementMap","Data","instanceMap","size","BaseComponent","_element","DATA_KEY","dispose","EVENT_KEY","getOwnPropertyNames","propertyName","_queueCallback","isAnimated","static","getInstance","VERSION","enableDismissTrigger","component","method","clickEvent","tagName","getOrCreateInstance","Alert","close","_destroyElement","each","SELECTOR_DATA_TOGGLE$5","Button","toggle","normalizeData","val","normalizeDataKey","chr","Manipulator","setDataAttribute","removeDataAttribute","getDataAttributes","dataset","pureKey","charAt","getDataAttribute","SelectorEngine","findOne","parents","ancestor","prev","previous","previousElementSibling","focusableChildren","focusables","join","el","NAME$b","Default$a","interval","keyboard","slide","pause","wrap","DefaultType$a","ORDER_NEXT","ORDER_PREV","DIRECTION_LEFT","DIRECTION_RIGHT","KEY_TO_DIRECTION","EVENT_SLID","CLASS_NAME_ACTIVE$2","SELECTOR_ACTIVE_ITEM","Carousel","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","touchStartX","touchDeltaX","_config","_getConfig","_indicatorsElement","_touchSupported","maxTouchPoints","_pointerEvent","PointerEvent","_addEventListeners","Default","_slide","nextWhenVisible","hidden","cycle","clearInterval","_updateInterval","setInterval","visibilityState","activeIndex","_getItemIndex","_handleSwipe","absDeltax","_keydown","_addTouchEventListeners","hasPointerPenTouch","pointerType","itemImg","_getItemByOrder","isNext","_triggerSlideEvent","eventDirectionName","targetIndex","fromIndex","_setActiveIndicatorElement","activeIndicator","indicators","parseInt","elementInterval","defaultInterval","directionOrOrder","_directionToOrder","activeElementIndex","nextElement","nextElementIndex","isCycling","directionalClassName","orderClassName","_orderToDirection","triggerSlidEvent","completeCallBack","action","ride","carouselInterface","slideIndex","dataApiClickHandler","carousels","NAME$a","DATA_KEY$9","Default$9","DefaultType$9","CLASS_NAME_SHOW$7","CLASS_NAME_COLLAPSE","CLASS_NAME_COLLAPSING","CLASS_NAME_COLLAPSED","CLASS_NAME_DEEPER_CHILDREN","SELECTOR_DATA_TOGGLE$4","Collapse","_isTransitioning","_triggerArray","toggleList","elem","filterElement","foundElem","_selector","_initializeChildren","_addAriaAndCollapsedClass","_isShown","hide","show","activesData","actives","tempActiveData","elemActive","dimension","_getDimension","scrollSize","triggerArrayLength","selected","triggerArray","isOpen","NAME$9","ESCAPE_KEY$2","SPACE_KEY","ARROW_UP_KEY","ARROW_DOWN_KEY","REGEXP_KEYDOWN","EVENT_CLICK_DATA_API$3","EVENT_KEYDOWN_DATA_API","CLASS_NAME_SHOW$6","SELECTOR_DATA_TOGGLE$3","SELECTOR_MENU","PLACEMENT_TOP","PLACEMENT_TOPEND","PLACEMENT_BOTTOM","PLACEMENT_BOTTOMEND","PLACEMENT_RIGHT","PLACEMENT_LEFT","Default$8","popperConfig","autoClose","DefaultType$8","Dropdown","_popper","_menu","_getMenuElement","_inNavbar","_detectNavbar","DefaultType","getParentFromElement","_createPopper","focus","_completeHide","referenceElement","_getPopperConfig","isDisplayStatic","_getPlacement","parentDropdown","isEnd","_getOffset","popperData","defaultBsPopperConfig","_selectMenuItem","items","toggles","context","composedPath","isMenuTarget","isActive","getToggleButton","clearMenus","dataApiKeydownHandler","SELECTOR_FIXED_CONTENT","SELECTOR_STICKY_CONTENT","ScrollBarHelper","getWidth","documentWidth","_disableOverFlow","_setElementAttributes","calculatedValue","_saveInitialAttribute","styleProp","scrollbarWidth","_applyManipulationCallback","_resetElementAttributes","actualValue","removeProperty","callBack","isOverflowing","Default$7","className","rootElement","clickCallback","DefaultType$7","NAME$8","CLASS_NAME_SHOW$5","EVENT_MOUSEDOWN","Backdrop","_isAppended","_append","_getElement","_emulateAnimation","backdrop","append","Default$6","trapElement","autofocus","DefaultType$6","EVENT_KEY$7","TAB_NAV_BACKWARD","FocusTrap","_isActive","_lastTabNavDirection","activate","_handleFocusin","_handleKeydown","deactivate","shiftKey","NAME$6","EVENT_KEY$6","ESCAPE_KEY$1","Default$5","DefaultType$5","EVENT_HIDDEN$3","EVENT_SHOW$3","EVENT_RESIZE","EVENT_CLICK_DISMISS","EVENT_KEYDOWN_DISMISS$1","EVENT_MOUSEDOWN_DISMISS","CLASS_NAME_OPEN","CLASS_NAME_SHOW$4","CLASS_NAME_STATIC","Modal","_dialog","_backdrop","_initializeBackDrop","_focustrap","_initializeFocusTrap","_ignoreBackdropClick","_scrollBar","_isAnimated","_adjustDialog","_setEscapeEvent","_setResizeEvent","_showBackdrop","_showElement","_hideModal","htmlElement","handleUpdate","modalBody","_triggerBackdropTransition","_resetAdjustments","isModalOverflowing","isBodyOverflowing","paddingLeft","paddingRight","showEvent","allReadyOpen","NAME$5","Default$4","DefaultType$4","CLASS_NAME_SHOW$3","OPEN_SELECTOR","EVENT_HIDDEN$2","Offcanvas","visibility","blur","uriAttributes","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttribute","allowedAttributeList","attributeName","nodeValue","regExp","attributeRegex","DefaultAllowlist","area","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","img","li","ol","pre","small","span","sub","sup","strong","ul","sanitizeHtml","unsafeHtml","allowList","sanitizeFn","createdDocument","DOMParser","parseFromString","elementName","attributeList","allowedAttributes","innerHTML","NAME$4","DISALLOWED_ATTRIBUTES","DefaultType$3","animation","template","title","customClass","sanitize","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","Default$3","Event$2","HIDE","HIDDEN","SHOW","SHOWN","INSERTED","CLICK","FOCUSIN","FOCUSOUT","MOUSEENTER","MOUSELEAVE","CLASS_NAME_FADE$2","CLASS_NAME_SHOW$2","HOVER_STATE_SHOW","HOVER_STATE_OUT","SELECTOR_TOOLTIP_INNER","SELECTOR_MODAL","EVENT_MODAL_HIDE","TRIGGER_HOVER","TRIGGER_FOCUS","Tooltip","_isEnabled","_timeout","_hoverState","_activeTrigger","tip","_setListeners","enable","disable","toggleEnabled","_initializeOnDelegatedTarget","click","_isWithActiveTrigger","_enter","_leave","getTipElement","_hideModalHandler","_disposePopper","isWithContent","shadowRoot","isInTheDom","getTitle","tipId","prefix","floor","random","getElementById","getUID","attachment","_getAttachment","_addAttachmentClass","_resolvePossibleFunction","prevHoverState","_cleanTipClass","setContent","_sanitizeAndSetContent","content","templateElement","setElementContent","updateAttachment","_getDelegateConfig","_handlePopperPlacementChange","_getBasicClassPrefix","eventIn","eventOut","_fixTitle","originalTitleType","dataAttributes","dataAttr","basicClassPrefixRegex","tabClass","token","tClass","Default$2","DefaultType$2","Event$1","Popover","_getContent","NAME$2","EVENT_KEY$2","Default$1","DefaultType$1","CLASS_NAME_DROPDOWN_ITEM","CLASS_NAME_ACTIVE$1","SELECTOR_NAV_LINKS","SELECTOR_LINK_ITEMS","METHOD_POSITION","ScrollSpy","_scrollElement","_offsets","_targets","_activeTarget","_scrollHeight","_process","refresh","autoMethod","offsetMethod","offsetBase","_getScrollTop","_getScrollHeight","targetSelector","targetBCR","item","_getOffsetHeight","maxScroll","_activate","_clear","queries","link","listGroup","navItem","spy","CLASS_NAME_ACTIVE","CLASS_NAME_FADE$1","CLASS_NAME_SHOW$1","SELECTOR_ACTIVE","SELECTOR_ACTIVE_UL","Tab","listElement","itemSelector","hideEvent","complete","active","isTransitioning","_transitionComplete","dropdownChild","dropdownElement","dropdown","CLASS_NAME_HIDE","CLASS_NAME_SHOW","CLASS_NAME_SHOWING","autohide","Toast","_hasMouseInteraction","_hasKeyboardInteraction","_clearTimeout","_maybeScheduleHide","_onInteraction","isInteracting","requestAnimFrame","throttled","thisArg","updateFn","updateArgs","ticking","rest","_toLeftRightCenter","align","_alignStartEnd","isNullOrUndef","isArray","substr","isObject","isNumberFinite","isFinite","finiteOrDefault","defaultValue","valueOrDefault","toDimension","endsWith","loopable","reverse","_elementsEqual","a0","a1","ilen","v0","v1","datasetIndex","clone$1","klen","k","isValidKey","_merger","tval","sval","merge","sources","merger","mergeIf","_mergerIf","indexOfDotOrLength","idx","resolveObjectKey","pos","_capitalize","str","defined","PI","TAU","PITAU","INFINITY","POSITIVE_INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","log10","sign","niceNum","range","roundedRange","almostEquals","niceRange","pow","fraction","isNumber","epsilon","_setMinAndMaxByKey","array","toRadians","degrees","toDegrees","radians","_decimalPlaces","distanceBetweenPoints","pt1","pt2","sqrt","_angleDiff","_normalizeAngle","_angleBetween","angle","sameAngleIsFullCircle","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","atEdge","elasticIn","sin","elasticOut","effects","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","cos","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","A","B","C","D","E","F","f","hex","eq","hexString","v","g","isShort","lim","h","p2b","n2b","b2n","n2p","RGB_RE","HUE_RE","hsl2rgbn","hsv2rgbn","hwb2rgbn","w","rgb","rgb2hsl","calln","hsl2rgb","hue","hueParse","exec","p1","p2","hwb2rgb","hsv2rgb","map$1","Z","Y","X","W","V","U","T","S","R","Q","P","O","N","M","L","K","G","H","I","J","names","OiceXe","antiquewEte","aqua","aquamarRe","azuY","beige","bisque","black","blanKedOmond","Xe","XeviTet","bPwn","burlywood","caMtXe","KartYuse","KocTate","cSO","cSnflowerXe","cSnsilk","crimson","cyan","xXe","xcyan","xgTMnPd","xWay","xgYF","xgYy","xkhaki","xmagFta","xTivegYF","xSange","xScEd","xYd","xsOmon","xsHgYF","xUXe","xUWay","xUgYy","xQe","xviTet","dAppRk","dApskyXe","dimWay","dimgYy","dodgerXe","fiYbrick","flSOwEte","foYstWAn","fuKsia","gaRsbSo","ghostwEte","gTd","gTMnPd","Way","gYF","gYFLw","gYy","honeyMw","hotpRk","RdianYd","Rdigo","ivSy","khaki","lavFMr","lavFMrXsh","lawngYF","NmoncEffon","ZXe","ZcSO","Zcyan","ZgTMnPdLw","ZWay","ZgYF","ZgYy","ZpRk","ZsOmon","ZsHgYF","ZskyXe","ZUWay","ZUgYy","ZstAlXe","ZLw","lime","limegYF","lRF","magFta","maPon","VaquamarRe","VXe","VScEd","VpurpN","VsHgYF","VUXe","VsprRggYF","VQe","VviTetYd","midnightXe","mRtcYam","mistyPse","moccasR","navajowEte","navy","Tdlace","Tive","TivedBb","Sange","SangeYd","ScEd","pOegTMnPd","pOegYF","pOeQe","pOeviTetYd","papayawEp","pHKpuff","peru","pRk","plum","powMrXe","purpN","YbeccapurpN","Yd","Psybrown","PyOXe","saddNbPwn","sOmon","sandybPwn","sHgYF","sHshell","siFna","silver","skyXe","UXe","UWay","UgYy","snow","sprRggYF","stAlXe","tan","teO","tEstN","tomato","Qe","viTet","JHt","wEte","wEtesmoke","Lw","LwgYF","names$1","nameParse","unpacked","tkeys","j","ok","nk","unpack","transparent","modHSL","ratio","tmp","proto","fromObject","input","functionParse","rgbParse","Color","ret","_rgb","_valid","valid","rgbString","hslString","mix","color","weight","me","c1","c2","w2","w1","alpha","clearer","greyscale","opaquer","negate","lighten","darken","saturate","desaturate","rotate","deg","index_esm","isPatternOrGradient","CanvasGradient","CanvasPattern","getHoverColor","overrides","descriptors","getScope$1","scope","defaults","_descriptors","backgroundColor","borderColor","datasets","chart","platform","getDevicePixelRatio","font","family","lineHeight","hover","hoverBackgroundColor","ctx","hoverBorderColor","hoverColor","indexAxis","interaction","intersect","maintainAspectRatio","onHover","onClick","parsing","responsive","scale","scales","showLine","describe","override","route","targetScope","targetName","scopeObject","targetScopeObject","privateName","defineProperties","writable","local","_scriptable","_indexable","_fallback","_measureText","gc","longest","string","textWidth","measureText","_longestText","arrayOfThings","cache","garbageCollect","save","jlen","thing","nestedThing","restore","gcLen","_alignPixel","pixel","currentDevicePixelRatio","halfWidth","clearCanvas","canvas","getContext","resetTransform","clearRect","drawPoint","xOffset","yOffset","cornerRadius","pointStyle","rotation","radius","rad","translate","drawImage","beginPath","arc","closePath","moveTo","lineTo","SQRT1_2","fill","borderWidth","stroke","_isPointInArea","point","clipArea","clip","unclipArea","_steppedLineTo","flip","midpoint","_bezierCurveTo","bezierCurveTo","cp1x","cp2x","cp1y","cp2y","renderText","text","opts","lines","strokeWidth","strokeColor","line","translation","fillStyle","textAlign","textBaseline","setRenderOpts","strokeStyle","lineWidth","strokeText","maxWidth","fillText","decorateText","strikethrough","underline","metrics","actualBoundingBoxLeft","actualBoundingBoxRight","actualBoundingBoxAscent","actualBoundingBoxDescent","yDecoration","decorationWidth","addRoundedRectPath","topLeft","bottomLeft","bottomRight","topRight","LINE_HEIGHT","FONT_STYLE","toLineHeight","_readValueToProps","props","objProps","prop","toTRBL","toTRBLCorners","toPadding","toFont","fallback","warn","toFontString","inputs","info","cacheable","_lookup","table","cmp","mid","hi","lo","_lookupByKey","_rlookupByKey","arrayEvents","unlistenArrayEvents","listener","stub","_chartjs","listeners","_arrayUnique","_createResolver","scopes","prefixes","rootScopes","getTarget","_resolve","_cacheable","_scopes","_rootScopes","_getTarget","Proxy","deleteProperty","_keys","_cached","proxy","readKey","needsSubResolver","createSubResolver","_resolveWithPrefixes","getOwnPropertyDescriptor","Reflect","getPrototypeOf","getKeysFromAllScopes","ownKeys","_storage","_attachContext","subProxy","descriptorDefaults","_proxy","_context","_subProxy","_stack","setContext","receiver","isScriptable","_resolveScriptable","isIndexable","arr","resolver","_resolveArray","_resolveWithContext","allKeys","configurable","scriptable","indexable","_allKeys","resolveFallback","getScope","addScopes","parentScopes","parentFallback","allScopes","addScopesFromKey","subGetTarget","resolveKeysFromAllScopes","EPSILON","getPoint","points","skip","getValueAxis","splineCurve","firstPoint","middlePoint","afterPoint","d01","d12","s01","s12","fa","fb","splineCurveMonotone","valueAxis","pointsLen","deltaK","mK","pointBefore","pointCurrent","pointAfter","slopeDelta","alphaK","betaK","tauK","squaredMagnitude","monotoneAdjust","delta","iPixel","vPixel","monotoneCompute","capControlPoint","pt","_updateBezierControlPoints","loop","controlPoints","spanGaps","cubicInterpolationMode","tension","capBezierPoints","inArea","inAreaPrev","inAreaNext","_isDomSupported","_getParentNode","domNode","parseMaxStyle","styleValue","parentProperty","valueInPixels","positions","getPositionedStyle","suffix","getRelativePosition","borderBox","paddings","borders","box","native","offsetX","offsetY","useOffsetPos","getCanvasPosition","round1","getMaximumSize","bbWidth","bbHeight","aspectRatio","margins","maxHeight","containerSize","containerStyle","containerBorder","containerPadding","getContainerSize","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","setTransform","supportsEventListenerOptions","passiveSupported","readUsedSize","getStyle","_pointInLine","_steppedInterpolation","_bezierInterpolation","cp1","cp2","intlCache","formatNumber","num","locale","cacheKey","JSON","stringify","formatter","Intl","NumberFormat","getNumberFormat","format","getRtlAdapter","rtl","rectX","setWidth","xPlus","leftForLtr","itemWidth","getRightToLeftAdapter","_itemWidth","overrideTextDirection","original","getPropertyPriority","setProperty","prevTextDirection","restoreTextDirection","propertyFn","between","compare","normalize","normalizeSegment","count","_boundSegment","segment","bounds","startBound","endBound","getSegment","prevValue","inside","subStart","shouldStart","shouldStop","_boundSegments","segments","splitByStyles","segmentOptions","baseStyle","readStyle","prevStyle","p0","p0DataIndex","p1DataIndex","_datasetIndex","styleChanged","doSplitByStyles","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","animator","_request","_charts","_running","_lastDate","_notify","anims","date","numSteps","currentStep","_refresh","_update","Date","now","remaining","running","draw","_active","_total","tick","pop","_getAnims","charts","progress","listen","cb","cur","_duration","stop","interpolators","boolean","factor","c0","number","Animation","cfg","currentValue","_fn","_easing","easing","_start","_target","_prop","_from","_to","_promises","elapsed","remain","wait","promises","res","rej","resolved","animationOptions","colors","properties","numbers","animations","visible","Animations","_chart","_properties","configure","animatedProps","option","_animateOptions","newOptions","$shared","$animations","resolveTargetOptions","_createAnimations","anim","all","awaitAll","scaleClip","allowedOverflow","getSortedDatasetIndices","filterVisible","metasets","_getSortedDatasetMetas","applyStack","stack","dsIndex","singleMode","otherValue","isStacked","meta","stacked","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","vScale","positive","getMatchingVisibleMetas","updateStacks","controller","parsed","_cachedMeta","_stacks","iScale","iAxis","vAxis","indexScale","valueScale","getStackKey","_top","_bottom","getFirstScaleId","shift","clearStacks","_parsed","isDirectUpdateMode","cloneIfNotShared","cached","shared","DatasetController","_ctx","_cachedDataOpts","getMeta","_type","_parsing","_data","_objectData","_sharedOptions","_drawStart","_drawCount","enableOptionSharing","$context","_syncList","initialize","linkScales","_stacked","addElements","updateIndex","getDataset","chooseId","xid","xAxisID","yid","yAxisID","rid","rAxisID","iid","iAxisID","vid","vAxisID","xScale","getScaleForId","yScale","rScale","getDatasetMeta","scaleID","_getOtherScale","_destroy","_dataCheck","adata","convertObjectDataToArray","isExtensible","base","datasetElementType","buildOrUpdateElements","resetNewElements","stackChanged","oldStacked","_resyncElements","scopeKeys","datasetScopeKeys","getOptionScopes","createResolver","parse","sorted","_sorted","parseArrayData","parseObjectData","parsePrimitiveData","isNotInOrderComparedToPrev","labels","getLabels","singleScale","xAxisKey","yAxisKey","getParsed","getDataElement","updateRangeFromParsed","parsedValue","NaN","getMinMax","canStack","otherScale","NEGATIVE_INFINITY","otherMin","otherMax","minDefined","maxDefined","getUserBounds","getAllParsedValues","getMaxOverflow","getLabelAndValue","label","getLabelForValue","_clip","toClip","defaultClip","chartArea","resolveDatasetElementOptions","resolveDataElementOptions","dataIndex","raw","createDataContext","createDatasetContext","_resolveElementOptions","dataElementType","elementType","sharing","datasetElementScopeKeys","resolveNamedOptions","freeze","_resolveAnimations","datasetAnimationScopeKeys","getSharedOptions","includeOptions","sharedOptions","_animationsDisabled","updateElement","updateSharedOptions","_setStyle","removeHoverStyle","setHoverStyle","_removeDatasetHoverStyle","_setDatasetHoverStyle","arg1","arg2","numMeta","numData","_insertElements","_removeElements","updateElements","removed","_sync","_onDataPush","_onDataPop","_onDataShift","_onDataSplice","_onDataUnshift","computeMinSampleSize","_cache","$bar","metas","getAllScaleValues","curr","_length","updateMinAndPrev","getPixelForValue","ticks","getPixelForTick","parseValue","entry","startValue","endValue","barStart","barEnd","_custom","parseFloatBar","parseArrayOrPrimitive","isFloatBar","custom","setBorderSkipped","edge","borderSkipped","borderProps","enableBorderRadius","parseEdge","orig","v2","startEnd","BarController","iAxisKey","vAxisKey","bars","getBasePixel","isHorizontal","ruler","_getRuler","firstOpts","vpixels","head","_calculateBarValuePixels","ipixels","_calculateBarIndexPixels","_getStacks","last","grouped","_getStackCount","_getStackIndex","pixels","barThickness","_startPixel","_endPixel","stackCount","categoryPercentage","barPercentage","baseValue","minBarLength","actualBase","floating","getDataVisibility","barSign","halfGrid","getLineWidthForValue","skipNull","maxBarThickness","Infinity","percent","chunk","computeFlexCategoryTraits","thickness","computeFitCategoryTraits","stackIndex","_index_","grid","_value_","beginAtZero","BubbleController","getPixelForDecimal","tooltip","DoughnutController","innerRadius","outerRadius","_getRotation","_getCircumference","circumference","_getRotationExtents","isDatasetVisible","arcs","spacing","getMaxBorderWidth","getMaxOffset","maxSize","cutout","chartWeight","_getRingWeight","ratioX","ratioY","startAngle","endAngle","startX","startY","endX","endY","calcMax","calcMin","maxX","maxY","minX","minY","getRatioAndOffset","maxRadius","radiusLength","_getVisibleDatasetWeightTotal","total","calculateTotal","_getRingWeightOffset","_circumference","animateRotate","calculateCircumference","animationOpts","centerX","centerY","animateScale","metaData","borderAlign","hoverBorderWidth","hoverOffset","ringWeightOffset","legend","generateLabels","legendItem","toggleDataVisibility","tooltipItem","dataLabel","formattedValue","LineController","_dataset","animationsDisabled","pointCount","getStartAndCountOfVisiblePoints","_scaleRanges","newRanges","xmin","xmax","ymin","ymax","changed","scaleRangesChanged","_decimated","animated","maxGapLength","directUpdate","prevParsed","nullData","border","lastPoint","updateControlPoints","PolarAreaController","_updateRadius","minSize","cutoutPercentage","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getIndexAngle","defaultAngle","countVisibleElements","_computeAngle","getDistanceFromCenterForValue","angleLines","circular","pointLabels","PieController","RadarController","_fullLoop","pointPosition","getPointPositionForValue","ScatterController","DateAdapter","formats","timestamp","amount","unit","diff","startOf","weekday","endOf","members","adapters","_date","binarySearch","metaset","lookupMethod","_reversePixels","getRange","optimizedEvaluateItems","getSortedVisibleDatasetMetas","getIntersectItems","useFinalPosition","_minPadding","inRange","getNearestItems","distanceMetric","useX","useY","deltaX","deltaY","getDistanceMetricForAxis","minDistance","getCenterPoint","getAxisItems","rangeMethod","intersectsItem","evaluateAllVisibleItems","Interaction","modes","nearest","STATIC_POSITIONS","filterByPosition","filterDynamicPositionByAxis","sortByWeight","setLayoutDims","layouts","params","stackWeight","placed","buildStacks","vBoxMaxWidth","hBoxMaxHeight","layout","fullSize","availableWidth","availableHeight","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","getPadding","newWidth","outerWidth","newHeight","outerHeight","widthChanged","heightChanged","same","other","getMargins","marginForPositions","fitBoxes","boxes","refitBoxes","refit","setBoxDims","placeBoxes","userPadding","addBox","_layers","z","removeBox","layoutItem","minPadding","layoutBoxes","wrapBoxes","centerHorizontal","centerVertical","leftAndTop","rightAndBottom","vertical","buildLayoutBoxes","verticalBoxes","horizontalBoxes","beforeLayout","visibleVerticalBoxCount","updatePos","change","handleMaxPadding","BasePlatform","acquireContext","releaseContext","isAttached","BasicPlatform","EVENT_TYPES","touchstart","touchmove","touchend","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","isNullOrEmpty","eventListenerOptions","removeListener","createAttachObserver","observer","MutationObserver","entries","addedNodes","added","observe","childList","subtree","createDetachObserver","removedNodes","drpListeningCharts","oldDevicePixelRatio","onWindowResize","createResizeObserver","ResizeObserver","contentRect","listenDevicePixelRatioChanges","releaseObserver","disconnect","unlistenDevicePixelRatioChanges","createProxyAndListen","fromNativeEvent","addListener","DomPlatform","renderHeight","renderWidth","displayWidth","displayHeight","initCanvas","proxies","$proxies","isConnected","tooltipPosition","getProps","hasValue","final","defaultRoutes","formatters","numeric","tickValue","notation","maxTick","calculateDelta","logDelta","numDecimal","minimumFractionDigits","maximumFractionDigits","logarithmic","Ticks","autoSkip","tickOpts","ticksLimit","maxTicksLimit","tickLength","_tickSize","maxScale","maxChart","_maxLength","determineMaxTicks","majorIndices","major","getMajorIndices","numMajorIndices","first","newTicks","ceil","skipMajors","evenMajorSpacing","getEvenSpacing","factors","_factorize","calculateSpacing","avgMajorSpacing","majorStart","majorEnd","grace","drawBorder","drawOnChartArea","drawTicks","tickWidth","tickColor","minRotation","maxRotation","textStrokeWidth","textStrokeColor","autoSkipPadding","labelOffset","minor","crossAlign","showLabelBackdrop","backdropColor","backdropPadding","offsetFromEdge","sample","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","lineValue","getTickMarkLength","getTitleHeight","titleAlign","reverseAlign","Scale","_margins","labelRotation","_range","_gridLineItems","_labelItems","_labelSizes","_longestTextCache","_userMax","_userMin","_suggestedMax","_suggestedMin","_ticksLength","_borderValue","_dataLimitsCached","init","suggestedMin","suggestedMax","getTicks","xLabels","yLabels","beforeUpdate","sampleSize","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","minmax","_addGrace","beforeBuildTicks","buildTicks","afterBuildTicks","samplingEnabled","_convertTicksToLabels","beforeCalculateLabelRotation","calculateLabelRotation","afterCalculateLabelRotation","beforeFit","fit","afterFit","afterUpdate","startPixel","endPixel","reversePixels","_alignToPixels","alignToPixels","_callHooks","notifyPlugins","beforeTickToLabelConversion","generateTickLabels","afterTickToLabelConversion","numTicks","maxLabelDiagonal","_isVisible","labelSizes","_getLabelSizes","maxLabelWidth","widest","maxLabelHeight","highest","asin","titleOpts","gridOpts","titleHeight","tickPadding","angleRadians","labelHeight","labelWidth","_calculatePadding","_handleMargins","isRotated","labelsBelowTicks","offsetRight","isFullSize","_computeLabelSizes","caches","widths","heights","tickFont","fontString","nestedLabel","widestLabelSize","highestLabelSize","_resolveTickFontOptions","valueAt","getValueForPixel","decimal","getDecimalForPixel","getBaseValue","createTickContext","optionTicks","rot","_computeGridLineItems","ticksLength","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","x2","y2","positionAxisID","limit","step","optsAtIndex","lineColor","tickBorderDash","tickBorderDashOffset","_computeLabelItems","tickAndPadding","hTickAndPadding","lineCount","textOffset","_getXAxisLabelAlignment","_getYAxisLabelAlignment","halfCount","labelPadding","_computeLabelArea","drawBackground","fillRect","findIndex","drawGrid","drawLine","setLineDash","lineDashOffset","lastLineWidth","drawLabels","drawTitle","titleX","titleY","titleArgs","tz","gz","axisID","_maxDigits","fontSize","TypedRegistry","isForType","isPrototypeOf","register","parentScope","isIChartComponent","itemDefaults","routes","propertyParts","sourceName","sourceScope","parts","routeDefaults","registerDefaults","unregister","registry","controllers","_typedRegistries","_each","addControllers","addPlugins","addScales","getController","_get","getPlugin","getScale","removeControllers","removeElements","removePlugins","removeScales","typedRegistry","arg","reg","_getRegistryForType","_exec","itemReg","camelMethod","PluginService","_init","notify","hook","_createDescriptors","descriptor","invalidate","_oldCache","_notifyStateChanges","allPlugins","getOpts","pluginOpts","createDescriptors","previousDescriptors","pluginScopeKeys","getIndexAxis","datasetDefaults","determineAxis","scaleOptions","initOptions","chartDefaults","configScales","chartIndexAxis","firstIDs","scaleConf","defaultId","getDefaultScaleIDFromAxis","defaultScaleOptions","defaultID","getAxisFromDefaultScaleID","mergeScaleConfig","initData","keyCache","keysCached","cachedKeys","generate","addIfFound","Config","initConfig","_scopeCache","_resolverCache","clearCache","clear","datasetType","additionalOptionScopes","_cachedScopes","mainScope","resetCache","keyLists","chartOptionScopes","subPrefixes","getResolver","needContext","resolverCache","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","onComplete","onAnimationProgress","onProgress","getCanvas","instances","getChart","Chart","userConfig","initialCanvas","existingChart","OffscreenCanvas","_detectPlatform","_aspectRatio","_metasets","_lastEvent","_listeners","_responsiveListeners","_sortedMetasets","_plugins","_hiddenIndices","attached","_doResize","timeout","debounce","resizeDelay","_initialize","bindEvents","_resizeBeforeDraw","_resize","newSize","newRatio","onResize","render","ensureScalesHaveIDs","axisOptions","buildOrUpdateScales","scaleOpts","updated","isRadial","dposition","dtype","scaleType","hasUpdated","_updateMetasets","_destroyDatasetMeta","_removeUnreferencedMetasets","buildOrUpdateControllers","newControllers","ControllerClass","_resetElements","animsDisabled","setsEqual","unbindEvents","_updateLayout","_updateDatasets","_eventHandler","noArea","_idx","_updateDataset","layers","_drawDatasets","_drawDataset","useClip","getElementsAtEventForMode","setDatasetVisibility","_updateVisibility","toBase64Image","toDataURL","bindUserEvents","bindResponsiveEvents","_add","_remove","detached","updateHoverStyle","getActiveElements","setActiveElements","activeElements","lastActive","_updateHoverStyles","replay","hoverOptions","deactivated","activated","eventFilter","_handleEvent","invalidatePlugins","clipArc","pixelMargin","angleMargin","parseBorderRadius$1","angleDelta","borderRadius","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","outerStart","outerEnd","innerStart","innerEnd","rThetaToXY","theta","pathArc","innerR","spacingOffset","avNogSpacingRadius","angleOffset","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","pCenter","p4","p8","inner","lineJoin","fullCircles","drawFullCircleBorders","version","ArcElement","chartX","chartY","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","atan2","getAngleFromPoint","rAdjust","halfAngle","halfRadius","radiusOffset","drawArc","setStyle","lineCap","pathVars","paramsStart","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","lineMethod","stepped","getLineMethod","fastPathSegment","prevX","lastY","avgX","countX","pointIndex","drawX","truncX","_getSegmentMethod","usePath2D","Path2D","path","_path","strokePathWithCache","segmentMethod","strokePathDirect","LineElement","_points","_segments","_pointsUpdated","findStartAndEnd","solidSegments","_computeSegments","interpolate","_interpolate","_getInterpolationMethod","interpolated","inRange$1","hitRadius","PointElement","mouseX","mouseY","inXRange","inYRange","hoverRadius","getBarBounds","bar","half","skipOrLimit","boundingRects","maxW","maxH","parseBorderWidth","maxR","enableBorder","parseBorderRadius","outer","skipX","skipY","addNormalRectPath","inflateRect","refRect","BarElement","addRectPath","inflateAmount","cleanDecimatedDataset","cleanDecimatedData","plugin_decimation","algorithm","beforeElementsUpdate","getStartAndCountOfVisiblePointsSimplified","threshold","decimated","samples","bucketWidth","sampledIndex","endIndex","maxAreaPoint","maxArea","nextA","avgY","avgRangeStart","avgRangeEnd","avgRangeLength","rangeOffs","rangeTo","pointAx","pointAy","lttbDecimation","minIndex","maxIndex","xMin","dx","lastIndex","intermediateIndex1","intermediateIndex2","minMaxDecimation","decodeFill","fillOption","parseFillOption","simpleArc","computeBoundary","computeCircularBoundary","computeLinearBoundary","findSegmentEnd","buildStackLine","sourcePoints","linesBelow","below","isLineAndNotInHideAnimation","unshift","getLinesBelow","createBoundaryLine","addPointsBelow","sourcePoint","postponed","findPoint","pointValue","linePoints","firstValue","lastValue","pointsFromSegments","resolveTarget","propagate","clipY","getBounds","_getEdge","clipBounds","interpolatedLineTo","interpolatedPoint","_fill","tpoints","targetSegments","tgt","subBounds","fillSources","fillSource","src","notShape","lineLoop","targetLoop","drawfill","getLineByIndex","lineOpts","above","doFill","plugin_filler","afterDatasetsUpdate","_args","$filler","beforeDraw","drawTime","beforeDatasetsDraw","beforeDatasetDraw","getBoxSize","labelOpts","boxHeight","boxWidth","usePointStyle","itemHeight","Legend","_added","legendHitBoxes","_hoveredItem","doughnutMode","legendItems","columnSizes","lineWidths","buildLabels","labelFont","_computeTitleHeight","_fitRows","_fitCols","hitboxes","totalHeight","row","heightLimit","totalWidth","currentColWidth","currentColHeight","adjustHitBoxes","rtlHelper","hitbox","_draw","defaultColor","fontColor","halfFontSize","cursor","textDirection","lineDash","drawOptions","SQRT2","yBoxTop","xBoxLeft","drawLegendBox","_textX","titleFont","titlePadding","topPaddingPlusHalfFontSize","_getLegendItemAt","hitBox","lh","handleEvent","onLeave","isListened","hoveredItem","sameItem","plugin_legend","afterEvent","ci","Title","_padding","textSize","_drawArgs","fontOpts","plugin_title","titleBlock","createTitle","WeakMap","positioners","average","eventPosition","nearestElement","tp","pushOrConcat","toPush","splitNewlines","String","createTooltipItem","getTooltipSize","footer","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","before","after","beforeBody","afterBody","titleSpacing","titleMarginBottom","displayColors","bodySpacing","footerMarginTop","footerSpacing","widthPadding","maxLineWidth","determineXAlign","yAlign","chartWidth","xAlign","caret","caretSize","caretPadding","doesNotFitWithAlign","determineAlignment","determineYAlign","getBackgroundPoint","alignment","paddingAndSize","radiusAndPadding","alignX","alignY","getAlignedX","getBeforeAfterBodyLines","overrideCallbacks","opacity","_eventPosition","_size","_cachedAnimations","_tooltipItems","dataPoints","caretX","caretY","labelColors","labelPointStyles","labelTextColors","tooltipItems","beforeTitle","afterTitle","getBeforeBody","getBody","bodyItems","scoped","beforeLabel","afterLabel","getAfterBody","getFooter","beforeFooter","afterFooter","_createItems","itemSort","labelColor","labelPointStyle","labelTextColor","positionAndSize","backgroundPoint","external","drawCaret","tooltipPoint","caretPosition","getCaretPosition","x3","y3","ptX","ptY","titleColor","_drawColorBox","colorX","rtlColorX","yOffSet","colorY","multiKeyBackground","outerX","innerX","strokeRect","drawBody","bodyAlign","bodyLineHeight","xLinePadding","fillLineOfText","bodyAlignForCalculation","textColor","bodyColor","drawFooter","footerAlign","footerColor","tooltipSize","quadraticCurveTo","_updateAnimationTarget","animX","animY","hasTooltipContent","globalAlpha","positionChanged","_positionChanged","plugin_tooltip","afterInit","afterDraw","labelCount","findOrAddLabel","addIfString","lastIndexOf","CategoryScale","_startValue","_valueRange","generateTicks$1","generationOptions","dataRange","precision","maxTicks","maxDigits","includeBounds","maxSpaces","rmin","rmax","countDefined","minSpacing","niceMin","niceMax","numSpaces","rounded","almostWhole","decimalPlaces","relativeLabelSize","LinearScaleBase","_endValue","handleTickRangeOptions","setMin","setMax","minSign","maxSign","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","getTickLimit","stepSize","computeTickLimit","LinearScale","isMajor","tickVal","LogarithmicScale","_zero","exp","endExp","endSignificand","significand","lastTick","generateTicks","getTickBackdropHeight","determineLimits","fitWithPointLabels","furthestLimits","furthestAngles","valueCount","getPointLabelContext","getPointPosition","drawingArea","plFont","_pointLabels","hLimits","vLimits","_setReductions","_pointLabelItems","tickBackdropHeight","outerDistance","extra","pointLabelPosition","yForAngle","getTextAlignForAngle","leftForTextAlign","buildPointLabelItems","pathRadiusLine","param","RadialLinearScale","setCenterPoint","largestPossibleRadius","radiusReductionLeft","radiusReductionRight","radiusReductionTop","radiusReductionBottom","leftMovement","rightMovement","topMovement","bottomMovement","maxRight","maxLeft","maxTop","maxBottom","scalingFactor","getValueForDistanceFromCenter","scaledDistance","pointLabel","createPointLabelContext","distanceFromCenter","getBasePosition","getPointLabelPosition","drawPointLabels","gridLineOpts","drawRadiusLine","INTERVALS","millisecond","common","steps","second","minute","hour","day","week","month","quarter","year","UNITS","sorter","adapter","_adapter","parser","isoWeekday","_parseOpts","determineUnitForAutoTicks","minUnit","capacity","addTick","time","timestamps","ticksFromTimestamps","majorUnit","setMajorTicks","TimeScale","_unit","_majorUnit","_normalized","displayFormats","normalized","_applyBounds","_getLabelBounds","getLabelTimestamps","timeOpts","_generate","_filterBetween","_getLabelCapacity","determineUnitForFormatting","determineMajorUnit","initOffsets","getDecimalForValue","hasWeekday","getDataTimestamps","tooltipFormat","datetime","_tickFormatFunction","minorFormat","majorFormat","_getLabelSize","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","exampleLabel","prevSource","nextSource","prevTarget","nextTarget","TimeSeriesScale","_table","_minPos","_tableRange","_getTimestampsForTable","buildLookupTable","isMergeableObject","isNonNullObject","stringValue","$$typeof","REACT_ELEMENT_TYPE","isReactElement","isSpecial","for","cloneUnlessOtherwiseSpecified","deepmerge","defaultArrayMerge","getKeys","getOwnPropertySymbols","symbol","propertyIsEnumerable","getEnumerableOwnPropertySymbols","mergeObject","destination","unused","propertyIsUnsafe","customMerge","getMergeFunction","arrayMerge","sourceIsArray","deepmerge_1","__webpack_exports__","global","_ponyfill_js__WEBPACK_IMPORTED_MODULE_0__","self","iterator","location","maxPatternLength","caseSensitive","tokenSeparator","findAllMatches","minMatchCharLength","_","shouldSort","getFn","sortFn","score","tokenize","matchAllTokens","includeMatches","includeScore","verbose","isCaseSensitive","setCollection","_log","_prepareSearchers","tokenSearchers","fullSearcher","_search","weights","results","_computeScore","_sort","_format","_analyze","record","resultMap","arrayIndex","search","pattern","isMatch","output","matchedIndices","nScore","indices","log","patternAlphabet","errors","currentLocation","expectedLocation","symbolObservablePonyfill","observable","Function","originalModule","webpackPolyfill","dist_fuse","fuse_default","cjs","cjs_default","es","randomString","substring","ActionTypes","INIT","REPLACE","PROBE_UNKNOWN_ACTION","isPlainObject","createStore","reducer","preloadedState","enhancer","currentReducer","currentState","currentListeners","nextListeners","isDispatching","ensureCanMutateNextListeners","getState","subscribe","isSubscribed","dispatch","replaceReducer","nextReducer","outerSubscribe","observeState","unsubscribe","getUndefinedStateErrorMessage","actionType","tmpEl","defaultState","groups_defaultState","choices_defaultState","general_defaultState","loading","reducers_general","isLoading","generateChars","getType","isType","sanitise","strToEl","cleanedInput","firldChild","firstChild","sortByScore","cloneObject","appReducer","reducers","reducerKeys","finalReducers","shapeAssertionError","finalReducerKeys","assertReducerShape","hasChanged","nextState","previousStateForKey","nextStateForKey","errorMessage","combineReducers","choiceId","groupId","highlighted","customProperties","placeholder","keyCode","groups","choices","elementId","activateOptions","choice","general","passedState","_defineProperties","store_Store","Store","_store","__REDUX_DEVTOOLS_EXTENSION__","protoProps","staticProps","_proto","onChange","getChoiceById","activeChoices","getGroupById","group","selectableChoices","hasActiveOptions","dropdown_defineProperties","classNames","getChild","activeState","DEFAULT_CONFIG","silent","renderChoiceLimit","maxItemCount","addItems","addItemFilter","removeItems","removeItemButton","editItems","duplicateItemsAllowed","delimiter","paste","searchEnabled","searchChoices","searchFloor","searchResultLimit","searchFields","resetScrollPosition","shouldSortItems","_ref$label","value2","_ref2$label","label2","localeCompare","ignorePunctuation","placeholderValue","searchPlaceholderValue","prependValue","appendValue","renderSelectedChoices","loadingText","noResultsText","noChoicesText","itemSelectText","uniqueItemText","customAddItemText","addItemText","maxItemText","valueComparer","value1","fuseOptions","callbackOnInit","callbackOnCreateTemplates","containerOuter","containerInner","inputCloned","listItems","listSingle","listDropdown","itemSelectable","itemDisabled","itemChoice","groupHeading","focusState","openState","disabledState","highlightedState","selectedState","flippedState","loadingState","noResults","noChoices","EVENTS","ACTION_TYPES","KEY_CODES","TEXT_TYPE","SELECT_ONE_TYPE","SELECT_MULTIPLE_TYPE","container_Container","Container","isFlipped","isFocussed","_onFocus","_onBlur","addEventListeners","removeEventListeners","shouldFlip","dropdownPos","matchMedia","setActiveDescendant","activeDescendantID","removeActiveDescendant","open","addFocusState","removeFocusState","wrapper","nextSibling","utils_wrap","unwrap","addLoadingState","removeLoadingState","input_defineProperties","input_Input","Input","preventPaste","_onPaste","_onInput","_this$element","minWidth","list_List","List","scrollPos","hasChildren","hasChildNodes","scrollToTop","scrollToChildElement","_this","listHeight","listScrollPosition","elementHeight","elementPos","_animateScroll","_scrollDown","strength","_scrollUp","_this2","choiceListScrollTop","continueAnimation","wrapped_element_defineProperties","wrapped_element_WrappedElement","WrappedElement","HTMLInputElement","HTMLSelectElement","conceal","origStyle","reveal","triggerEvent","eventType","customArgs","wrapped_input_defineProperties","WrappedInput","_WrappedElement","subClass","superClass","__proto__","joinedValues","wrapped_select_defineProperties","WrappedSelect","appendDocFragment","fragment","getElementsByTagName","createDocumentFragment","optionData","TEMPLATES","isSelectElement","isSelectOneElement","passedElementType","_containerOuter","_containerInner","itemList","_placeholder","_item","isPlaceholder","deletable","REMOVE_ITEM_TEXT","removeButton","choiceList","choiceGroup","_ref8","_ref9","_ref10","_ref11","selectText","isSelected","choiceDisabled","choiceSelectable","_ref12","_input","inp","autocomplete","autocapitalize","spellcheck","_ref13","notice","_ref14","_ref15","opt","Option","choices_activateChoices","items_highlightItem","groups_addGroup","setIsLoading","choices_defineProperties","IS_IE11","USER_DEFAULTS","choices_Choices","Choices","sourceArray","aKeys","bKeys","invalidConfigOptions","passedElement","_isTextElement","_isSelectOneElement","_isSelectMultipleElement","_isSelectElement","re","_templates","initialised","_initialState","_currentState","_prevState","_currentValue","_canSearch","_isScrollingOnIe","_highlightPosition","_wasTap","_placeholderValue","_generatePlaceholderValue","_baseId","generateId","_direction","elementDirection","_idNames","_presetGroups","optionGroups","_presetOptions","_presetChoices","_presetItems","_render","_onKeyUp","_onKeyDown","_onClick","_onTouchMove","_onTouchEnd","_onMouseDown","_onMouseOver","_onFormReset","_onAKey","_onEnterKey","_onEscapeKey","_onDirectionKey","_onDeleteKey","preventExtensions","templates","_createTemplates","_createElements","_createStructure","_removeEventListeners","clearStore","highlightItem","runEvent","_item$groupId","_item$value","_item$label","groupValue","unhighlightItem","_item$groupId2","_item$value2","_item$label2","highlightAll","unhighlightAll","_this3","removeActiveItemsByValue","_this4","activeItems","_removeItem","removeActiveItems","excludedId","_this5","removeHighlightedItems","_this6","highlightedActiveItems","_triggerChange","showDropdown","preventInputFocus","_this7","distanceFromTopWindow","hideDropdown","preventInputBlur","_this8","getValue","valueOnly","selectedItems","itemValue","setValue","_this9","_setChoiceOrItem","setChoiceByValue","_this10","_findAndSelectChoiceByValue","setChoices","choicesArrayOrFetcher","replaceChoices","_this11","ReferenceError","clearChoices","fetcher","_handleLoadingState","catch","err","_startLoading","groupOrChoice","_addGroup","valueKey","labelKey","_addChoice","_stopLoading","clearInput","shouldSetInputWidth","_isSearching","stateChanged","shouldRenderChoices","shouldRenderItems","_renderChoices","_renderItems","_this12","_this$_store","activeGroups","choiceListFragment","activePlaceholders","activeChoice","_createChoicesFragment","_createGroupsFragment","childNodes","canAddItem","_canAddItem","response","_highlightChoice","_getTemplate","dropdownItem","itemListFragment","_createItemsFragment","_this13","groupChoices","getGroupChoices","dropdownGroup","withinGroup","_this14","_this$config","appendChoice","rendererableChoices","_rendererableChoices$","placeholderChoices","normalChoices","choiceLimit","sortedChoices","_this15","_this$config2","listItem","_selectPlaceholderChoice","placeholderChoice","_addItem","_handleButtonAction","itemId","itemToRemove","_handleItemAction","hasShiftKey","_this16","passedId","_handleChoiceAction","passedKeyCode","hasActiveDropdown","_handleBackspace","lastItem","hasHighlightedItems","setLoading","placeholderItem","_handleSearch","_this$config3","hasUnactiveChoices","resultCount","_searchChoices","isDuplicateValue","existsInArray","newValue","haystack","searchableChoices","needle","choices_filterChoices","_keyDownActions","hasFocusedInput","hasItems","keyString","fromCharCode","BACK_KEY","DELETE_KEY","ENTER_KEY","A_KEY","ESC_KEY","UP_KEY","DOWN_KEY","PAGE_UP_KEY","PAGE_DOWN_KEY","hasCtrlDownKeyPressed","keyDownActions","backKey","deleteKey","outerHTML","userHasRemovedValue","canReactivateChoices","canSearch","enterKey","targetWasButton","highlightedChoice","downKey","pageUpKey","pageDownKey","nextEl","directionInt","selectableChoiceIdentifier","currentEl","startEl","sibling","getAdjacentEl","firstChoice","firstElementChild","isOnScrollbar","_focusActions","_this17","_this18","_blurActions","_this19","passedEl","_ref13$label","_ref13$choiceId","_ref13$groupId","_ref13$customProperti","_ref13$placeholder","_ref13$keyCode","passedValue","passedCustomProperties","passedLabel","passedOptionId","items_addItem","items_removeItem","_ref14$label","_ref14$isSelected","_ref14$isDisabled","_ref14$groupId","_ref14$customProperti","_ref14$placeholder","_ref14$keyCode","choiceLabel","choiceElementId","choices_addChoice","_this20","_ref15$valueKey","_ref15$labelKey","valueOf","isOptDisabled","_this$_templates$temp","userTemplates","_addPredefinedGroups","_addPredefinedChoices","_addPredefinedItems","_this21","placeholderOption","_this22","hasSelectedChoice","firstEnabledChoiceIndex","_this23","_this24","_this25","foundChoice","_this$config4","__webpack_modules__","it","__unused_webpack_exports","wellKnownSymbol","definePropertyModule","UNSCOPABLES","ArrayPrototype","unicode","ArrayBuffer","DataView","NATIVE_ARRAY_BUFFER","DESCRIPTORS","classof","createNonEnumerableProperty","redefine","setPrototypeOf","Int8Array","Int8ArrayPrototype","Uint8ClampedArray","Uint8ClampedArrayPrototype","TypedArray","TypedArrayPrototype","ObjectPrototype","TO_STRING_TAG","TYPED_ARRAY_TAG","NATIVE_ARRAY_BUFFER_VIEWS","opera","TYPED_ARRAY_TAG_REQIRED","TypedArrayConstructorsList","Uint8Array","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigIntArrayConstructorsList","BigInt64Array","BigUint64Array","isTypedArray","klass","aTypedArray","aTypedArrayConstructor","ARRAY","TypedArrayConstructor","exportTypedArrayMethod","KEY","forced","exportTypedArrayStaticMethod","isView","redefineAll","fails","anInstance","toInteger","toLength","toIndex","IEEE754","arrayFill","setToStringTag","InternalStateModule","getInternalState","setInternalState","ARRAY_BUFFER","DATA_VIEW","WRONG_INDEX","NativeArrayBuffer","$ArrayBuffer","$DataView","$DataViewPrototype","RangeError","packIEEE754","pack","unpackIEEE754","packInt8","packInt16","packInt32","unpackInt32","buffer","packFloat32","packFloat64","addGetter","view","isLittleEndian","intIndex","store","byteLength","bytes","byteOffset","conversion","ArrayBufferPrototype","testView","nativeSetInt8","setInt8","getInt8","setUint8","unsafe","bufferLength","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","getFloat64","setInt16","setUint16","setInt32","setUint32","setFloat32","setFloat64","toObject","toAbsoluteIndex","copyWithin","inc","argumentsLength","endPos","$forEach","STRICT_METHOD","arrayMethodIsStrict","callbackfn","callWithSafeIterationClosing","isArrayIteratorMethod","createProperty","getIteratorMethod","arrayLike","mapfn","mapping","iteratorMethod","done","toIndexedObject","createMethod","IS_INCLUDES","$this","IndexedObject","arraySpeciesCreate","TYPE","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","IS_FILTER_OUT","NO_HOLES","that","specificCreate","boundFunction","filterOut","nativeLastIndexOf","NEGATIVE_ZERO","FORCED","searchElement","V8_VERSION","SPECIES","METHOD_NAME","foo","argument","aFunction","IS_RIGHT","memo","originalArray","anObject","iteratorClose","ENTRIES","ITERATOR","SAFE_CLOSING","iteratorWithReturn","SKIP_CLOSING","ITERATION_SUPPORT","TO_STRING_TAG_SUPPORT","classofRaw","CORRECT_ARGUMENTS","tag","tryGet","callee","getOwnPropertyDescriptorModule","IteratorPrototype","createPropertyDescriptor","Iterators","returnThis","IteratorConstructor","bitmap","toPrimitive","propertyKey","createIteratorConstructor","IS_PURE","IteratorsCore","BUGGY_SAFARI_ITERATORS","KEYS","VALUES","Iterable","DEFAULT","IS_SET","CurrentIteratorPrototype","methods","getIterationMethod","KIND","defaultIterator","IterablePrototype","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","EXISTS","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","MediaList","MimeTypeArray","NamedNodeMap","PaintRequestList","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","getBuiltIn","process","versions","v8","setGlobal","copyConstructorProperties","isForced","targetProperty","sourceProperty","TARGET","GLOBAL","STATIC","stat","noTargetGet","sham","regexpExec","REPLACE_SUPPORTS_NAMED_GROUPS","REPLACE_KEEPS_$0","REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE","SPLIT_WORKS_WITH_OVERWRITTEN_EXEC","originalExec","SYMBOL","DELEGATES_TO_SYMBOL","DELEGATES_TO_EXEC","execCalled","flags","nativeRegExpMethod","nativeMethod","regexp","forceStringMethod","stringMethod","regexMethod","variable","SUBSTITUTION_SYMBOLS","SUBSTITUTION_SYMBOLS_NO_NAMED","captures","namedCaptures","replacement","tailPos","symbols","ch","capture","globalThis","LN2","mantissaLength","exponent","mantissa","exponentLength","eMax","eBias","rt","nBits","dummy","Wrapper","NewTarget","NewTargetPrototype","functionToString","inspectSource","NATIVE_WEAK_MAP","objectHas","sharedKey","hiddenKeys","wmget","wmhas","wmset","metadata","facade","STATE","enforce","getterFor","feature","detection","POLYFILL","NATIVE","MATCH","isRegExp","returnMethod","PrototypeOfArrayIteratorPrototype","arrayIterator","NEW_ITERATOR_PROTOTYPE","url","URL","searchParams","pathname","toJSON","href","URLSearchParams","username","objectKeys","getOwnPropertySymbolsModule","propertyIsEnumerableModule","nativeAssign","alphabet","activeXDocument","enumBugKeys","documentCreateElement","IE_PROTO","EmptyConstructor","scriptTag","LT","NullProtoObject","domain","ActiveXObject","iframeDocument","iframe","temp","parentWindow","NullProtoObjectViaActiveX","contentWindow","Properties","__unused_webpack_module","IE8_DOM_DEFINE","nativeDefineProperty","Attributes","nativeGetOwnPropertyDescriptor","internalObjectKeys","CORRECT_PROTOTYPE_GETTER","nativePropertyIsEnumerable","NASHORN_BUG","aPossiblePrototype","setter","CORRECT_SETTER","getOwnPropertyNamesModule","enforceInternalState","TEMPLATE","simple","re1","re2","regexpFlags","stickyHelpers","nativeExec","nativeReplace","patchedExec","UPDATES_LAST_INDEX_WRONG","UNSUPPORTED_Y","BROKEN_CARET","NPCG_INCLUDED","reCopy","sticky","charsAdded","strCopy","multiline","ignoreCase","dotAll","RE","CONSTRUCTOR_NAME","TAG","SHARED","copyright","defaultConstructor","requireObjectCoercible","CONVERT_TO_STRING","charCodeAt","codeAt","maxInt","regexNonASCII","regexSeparators","OVERFLOW_ERROR","stringFromCharCode","digitToBasic","digit","adapt","numPoints","firstTime","baseMinusTMin","encode","counter","ucs2decode","inputLength","bias","basicLength","handledCPCount","handledCPCountPlusOne","q","qMinusT","baseMinusT","encoded","whitespaces","whitespace","ltrim","rtrim","integer","toPositiveInteger","BYTES","PREFERRED_STRING","TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS","ArrayBufferViewCore","ArrayBufferModule","toOffset","typedArrayFrom","setSpecies","inheritIfRequired","BYTES_PER_ELEMENT","WRONG_LENGTH","fromList","isArrayBuffer","isTypedArrayIndex","wrappedGetOwnPropertyDescriptor","wrappedDefineProperty","CLAMPED","GETTER","SETTER","NativeTypedArrayConstructor","TypedArrayConstructorPrototype","exported","addElement","typedArrayOffset","$length","$len","checkCorrectnessOfIteration","iterable","speciesConstructor","postfix","NATIVE_SYMBOL","USE_SYMBOL_AS_UID","WellKnownSymbolsStore","createWellKnownSymbol","withoutSetter","arrayBufferModule","arrayMethodHasSpeciesSupport","IS_CONCAT_SPREADABLE","MAXIMUM_ALLOWED_INDEX_EXCEEDED","IS_CONCAT_SPREADABLE_SUPPORT","SPECIES_SUPPORT","isConcatSpreadable","spreadable","$filter","$indexOf","nativeIndexOf","addToUnscopables","defineIterator","ARRAY_ITERATOR","iterated","kind","Arguments","$map","HAS_SPECIES_SUPPORT","nativeSlice","fin","MAXIMUM_ALLOWED_LENGTH_EXCEEDED","deleteCount","insertCount","actualDeleteCount","actualStart","FunctionPrototype","FunctionPrototypeToString","nameRE","nativeGetPrototypeOf","TO_STRING","RegExpPrototype","nativeToString","NOT_GENERIC","INCORRECT_NAME","rf","STRING_ITERATOR","fixRegExpWellKnownSymbolLogic","advanceStringIndex","regExpExec","nativeMatch","maybeCallNative","matcher","rx","fullUnicode","matchStr","getSubstitution","reason","UNSAFE_SUBSTITUTE","searchValue","replaceValue","replacer","functionalReplace","accumulatedResult","nextSourcePosition","replacerArgs","callRegExpExec","arrayPush","MAX_UINT32","SUPPORTS_Y","SPLIT","nativeSplit","internalSplit","separator","lastLength","lastLastIndex","separatorCopy","splitter","unicodeMatching","$trim","forcedStringTrimMethod","$copyWithin","$every","$fill","fromSpeciesAndList","$findIndex","predicate","$find","$includes","ArrayIterators","arrayValues","arrayKeys","arrayEntries","nativeTypedArrayIterator","CORRECT_ITER_NAME","typedArrayValues","$join","$lastIndexOf","$reduceRight","$reduce","middle","$slice","$some","$sort","comparefn","begin","beginIndex","$toLocaleString","toLocaleString","TO_LOCALE_STRING_BUG","Uint8ArrayPrototype","arrayToString","arrayJoin","IS_NOT_ARRAY_METHOD","createTypedArrayConstructor","DOMIterables","COLLECTION_NAME","Collection","CollectionPrototype","ArrayIteratorMethods","ArrayValues","USE_NATIVE_URL","hasOwn","getIterator","$fetch","Headers","URL_SEARCH_PARAMS","URL_SEARCH_PARAMS_ITERATOR","getInternalParamsState","getInternalIteratorState","plus","sequences","percentSequence","percentDecode","sequence","decodeURIComponent","deserialize","serialize","encodeURIComponent","parseSearchParams","query","updateSearchParams","validateArgumentsLength","passed","required","URLSearchParamsIterator","URLSearchParamsConstructor","entryIterator","entryNext","updateURL","URLSearchParamsPrototype","getAll","found","entriesIndex","sliceIndex","fetch","headers","EOF","arrayFrom","toASCII","URLSearchParamsModule","NativeURL","getInternalSearchParamsState","getInternalURLState","INVALID_SCHEME","INVALID_HOST","INVALID_PORT","ALPHA","ALPHANUMERIC","DIGIT","HEX_START","OCT","DEC","HEX","FORBIDDEN_HOST_CODE_POINT","FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT","LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE","TAB_AND_NEW_LINE","parseHost","codePoints","parseIPv6","parseIPv4","percentEncode","C0ControlPercentEncodeSet","partsLength","part","radix","ipv4","numbersSeen","ipv4Piece","swaps","address","pieceIndex","compress","pointer","char","serializeHost","ignore0","ipv6","maxLength","currStart","currLength","findLongestZeroSequence","fragmentPercentEncodeSet","pathPercentEncodeSet","userinfoPercentEncodeSet","specialSchemes","ftp","file","http","https","ws","wss","scheme","includesCredentials","password","cannotHaveUsernamePasswordPort","cannotBeABaseURL","isWindowsDriveLetter","startsWithWindowsDriveLetter","third","shortenURLsPath","pathSize","isSingleDot","SCHEME_START","SCHEME","NO_SCHEME","SPECIAL_RELATIVE_OR_AUTHORITY","PATH_OR_AUTHORITY","RELATIVE","RELATIVE_SLASH","SPECIAL_AUTHORITY_SLASHES","SPECIAL_AUTHORITY_IGNORE_SLASHES","AUTHORITY","HOST","HOSTNAME","PORT","FILE","FILE_SLASH","FILE_HOST","PATH_START","PATH","CANNOT_BE_A_BASE_URL_PATH","QUERY","FRAGMENT","parseURL","stateOverride","bufferCodePoints","failure","seenAt","seenBracket","seenPasswordToken","port","codePoint","encodedCodePoints","URLConstructor","baseState","urlString","searchParamsState","serializeURL","origin","getOrigin","protocol","getProtocol","getUsername","getPassword","getHost","hostname","getHostname","getPort","getPathname","getSearch","getSearchParams","getHash","URLPrototype","accessorDescriptor","nativeCreateObjectURL","createObjectURL","nativeRevokeObjectURL","revokeObjectURL","blob","__webpack_module_cache__","definition","_createForOfIteratorHelper","allowArrayLike","_arrayLikeToArray","_unsupportedIterableToArray","_e","normalCompletion","didErr","_e2","return","arr2","Dropzone","dropzone_dist","Emitter","_classCallCheck","_callbacks","_step","_iterator","makeEvent","eventName","initCustomEvent","options_createForOfIteratorHelper","options_arrayLikeToArray","options_unsupportedIterableToArray","src_options","withCredentials","parallelUploads","uploadMultiple","chunking","forceChunking","chunkSize","parallelChunkUploads","retryChunks","retryChunksLimit","maxFilesize","paramName","createImageThumbnails","maxThumbnailFilesize","thumbnailWidth","thumbnailHeight","thumbnailMethod","resizeWidth","resizeHeight","resizeMimeType","resizeQuality","resizeMethod","filesizeBase","maxFiles","clickable","ignoreHiddenFiles","acceptedFiles","acceptedMimeTypes","autoProcessQueue","autoQueue","addRemoveLinks","previewsContainer","disablePreviews","hiddenInputContainer","renameFilename","renameFile","forceFallback","dictDefaultMessage","dictFallbackMessage","dictFallbackText","dictFileTooBig","dictInvalidFileType","dictResponseError","dictCancelUpload","dictUploadCanceled","dictCancelUploadConfirmation","dictRemoveFile","dictRemoveFileConfirmation","dictMaxFilesExceeded","dictFileSizeUnits","tb","gb","mb","kb","files","xhr","dzuuid","upload","uuid","dzchunkindex","dztotalfilesize","dzchunksize","dztotalchunkcount","totalChunkCount","dzchunkbyteoffset","accept","chunksUploaded","messageElement","innerText","getFallbackForm","srcX","srcY","srcWidth","srcHeight","srcRatio","trgRatio","trgWidth","trgHeight","transformFile","resizeImage","previewTemplate","drop","dragstart","dragend","dragenter","dragover","dragleave","addedfile","previewElement","_step2","_iterator2","_step3","_iterator3","filesize","_removeLink","_step4","removeFileEvent","status","UPLOADING","confirm","removeFile","_iterator4","removedfile","_updateMaxFilesReachedClass","thumbnail","dataUrl","_step5","_iterator5","thumbnailElement","alt","_step6","_iterator6","errormultiple","processing","processingmultiple","uploadprogress","bytesSent","_step7","_iterator7","totaluploadprogress","sending","sendingmultiple","success","successmultiple","emit","canceledmultiple","completemultiple","maxfilesexceeded","maxfilesreached","queuecomplete","addedfiles","_typeof","dropzone_createForOfIteratorHelper","dropzone_arrayLikeToArray","dropzone_unsupportedIterableToArray","dropzone_classCallCheck","dropzone_defineProperties","dropzone_createClass","_setPrototypeOf","_createSuper","Derived","hasNativeReflectConstruct","construct","_isNativeReflectConstruct","Super","_getPrototypeOf","_possibleConstructorReturn","_assertThisInitialized","_inherits","_super","clickableElements","elementOptions","optionsForElement","extend","isBrowserSupported","getExistingFallback","accepted","getFilesWithStatus","QUEUED","ADDED","setupHiddenFileInput","hiddenFileInput","addFile","webkitURL","updateTotalUploadProgress","getAddedFiles","getUploadingFiles","getQueuedFiles","noPropagation","types","containsFiles","returnValue","efct","clickableElement","elementInside","removeAllFiles","totalUploadProgress","totalBytesSent","totalBytes","getActiveFiles","existingFallback","fieldsString","_getParamName","fields","getFallback","_arr","elementListeners","cancelUpload","setupEventListeners","selectedSize","selectedUnit","units","getAcceptedFiles","webkitGetAsEntry","_addFilesFromItems","handleFiles","clipboardData","isFile","getAsFile","isDirectory","_addFilesFromDirectory","directory","dirReader","createReader","errorHandler","methodName","readEntries","fullPath","isValidFile","uuidv4","filename","_renameFile","_enqueueThumbnail","_errorProcessing","enqueueFile","_step8","_iterator8","processQueue","_thumbnailQueue","_processThumbnailQueue","_processingThumbnail","createThumbnail","without","cancelIfNecessary","_step9","_iterator9","resizedDataURL","ExifRestore","dataURL","dataURItoBlob","fixOrientation","fileReader","FileReader","onload","createThumbnailFromUrl","readAsDataURL","mockFile","imageUrl","crossOrigin","resizeThumbnail","onDone","loadExif","EXIF","getData","getTag","orientation","resizeInfo","drawImageIOSFix","trgX","trgY","onerror","processingLength","queuedFiles","processFiles","processFile","_step10","_iterator10","uploadFiles","_step11","groupedFiles","_getFilesWithXhr","_iterator11","CANCELED","abort","_step12","_iterator12","_groupedFile","_transformFiles","transformedFiles","transformedFile","chunked","_transformedFile","chunks","handleNextChunk","chunkIndex","dataBlock","webkitSlice","retries","_uploadData","finishedChunkUpload","allFinished","SUCCESS","_finished","dataBlocks","_i2","_step13","XMLHttpRequest","_iterator13","resolveOption","_finishedUploading","ontimeout","_handleUploadError","onprogress","_updateFilesUploadProgress","Accept","headerName","headerValue","setRequestHeader","formData","FormData","additionalParams","_getChunk","_step14","_iterator14","_file","_addFormElementData","_i3","submitRequest","doneCounter","_step15","_iterator15","inputName","inputType","_step16","_iterator16","checked","_file2","loaded","_step17","_iterator17","responseType","responseText","getResponseHeader","send","_step18","_iterator18","_step19","_iterator19","ERROR","_len2","objects","_key2","_i4","_objects","initClass","camelize","forElement","autoDiscover","discover","checkElements","_step20","_iterator20","_step21","_iterator21","blockedBrowsers","capableBrowser","File","Blob","blacklistedBrowsers","_step22","_iterator22","dataURI","byteString","atob","mimeString","ab","ia","asc","rejectedItem","els","_step23","_iterator23","_step24","_iterator24","question","rejected","_step25","mimeType","baseMimeType","_iterator25","validType","ACCEPTED","PROCESSING","sx","sy","sw","sh","dy","dw","dh","vertSquashRatio","naturalWidth","ih","naturalHeight","getImageData","ey","py","detectVerticalSquash","KEY_STR","chr1","chr2","chr3","enc1","enc2","enc3","enc4","origFileBase64","resizedFileBase64","rawImage","decode64","slice2Segments","image","exifManipulation","encode64","exifArray","getExifArray","newImageArray","insertExif","seg","imageData","buf","separatePoint","mae","ato","rawImageArray","endPoint","_autoDiscoverFunction","doc","rem","createEventObject","doScroll","frameElement","poll","contentLoaded","HOOKS","_disable","allowInput","allowInvalidPreload","altFormat","altInput","altInputClass","ariaDateFormat","autoFillDefaultTime","clickOpens","closeOnSelect","conjunction","dateFormat","defaultHour","defaultMinute","defaultSeconds","disableMobile","enableSeconds","enableTime","getWeek","givenDate","getTime","setHours","setDate","getDate","getDay","week1","getFullYear","hourIncrement","ignoredFocusElements","inline","minuteIncrement","monthSelectorType","nextArrow","noCalendar","onClose","onDayCreate","onKeyDown","onMonthChange","onOpen","onParseConfig","onReady","onValueUpdate","onYearChange","onPreCalendarPosition","positionElement","prevArrow","shorthandCurrentMonth","showMonths","time_24hr","weekNumbers","english","weekdays","shorthand","longhand","months","daysInMonth","firstDayOfWeek","ordinal","nth","rangeSeparator","weekAbbreviation","scrollTitle","toggleTitle","amPM","yearAriaLabel","monthAriaLabel","hourAriaLabel","minuteAriaLabel","pad","bool","arrayify","toggleClass","clearNode","findParent","condition","createNumberInput","inputClassName","numInput","arrowUp","arrowDown","getEventTarget","doNothing","monthToStr","monthNumber","revFormat","dateObj","monthName","setMonth","getHours","shortMonth","seconds","setSeconds","unixSeconds","weekNum","weekNumber","setFullYear","ISODate","minutes","setMinutes","unixMillSeconds","tokenRegex","toISOString","getMonth","getSeconds","getMinutes","createDateFormatter","l10n","isMobile","frmt","overrideLocale","formatDate","createDateParser","givenFormat","timeless","customLocale","parsedDate","dateOrig","toFixed","datestr","parseDate","ops","matchIndex","regexStr","isBackSlash","escaped","compareDates","date1","date2","getDefaultHours","hours","minDate","minHour","minMinutes","minSeconds","maxDate","maxHr","maxMinutes","FlatpickrInstance","instanceConfig","flatpickr","defaultConfig","bindToInstance","setCalendarWidth","calendarContainer","daysContainer","daysWidth","days","weekWrapper","updateTime","selectedDates","defaultDate","getMilliseconds","latestSelectedDateObj","isKeyDown","eventTarget","curValue","which","isHourElem","hourElement","isMinuteElem","minuteElement","incrementNumInput","timeWrapper","setHoursFromInputs","updateValue","_debouncedChange","secondElement","limitMinHours","minTime","minDateHasTime","maxTime","maxDateHasTime","setHoursFromDate","onYearInput","changeYear","ev","_handlers","triggerChange","jumpToDate","jumpDate","jumpTo","oldYear","currentYear","oldMonth","currentMonth","buildMonthSwitch","redraw","timeIncrement","inputElem","createDay","dayNumber","dateIsEnabled","isEnabled","dayElement","$i","todayDateElem","isDateSelected","selectedDateElem","isDateInRange","insertAdjacentHTML","focusOnDayElem","targetNode","onMouseOver","getFirstAvailableDay","startMonth","endMonth","focusOnDay","dayFocused","isInView","startElem","givenMonth","loopDelta","numMonthDays","changeMonth","getNextAvailableDay","buildMonthDays","firstOfMonth","prevMonthDays","utils","getDaysInMonth","isMultiMonth","prevMonthDayClass","nextMonthDayClass","dayIndex","dayNum","dayContainer","buildDays","frag","shouldBuildMonth","monthsDropdownContainer","buildMonth","monthNavFragment","monthElement","selectedMonth","yearInput","tabindex","yearElement","buildMonths","monthNav","prevMonthNav","yearElements","monthElements","nextMonthNav","buildWeekdays","weekdayContainer","updateWeekdays","isOffset","_hidePrevMonthArrow","_hideNextMonthArrow","updateNavigationCurrentMonth","isCalendarElem","documentClick","isCalendarElement","isInput","lostFocus","isIgnored","timeContainer","newYear","newYearNum","isNewYear","_a","dateToCheck","onBlur","allowKeydown","allowInlineKeydown","isTimeObj","focusAndClose","selectDate","currentYearElement","elems","pluginElements","hoverDate","initialDate","rangeStartDate","rangeEndDate","containsDisabled","minRange","maxRange","dayElem","outOfRange","ts1","ts2","ts","positionCalendar","minMaxDateSetter","inverseDateObj","getInputElem","setupLocale","l10ns","customPositionElement","_positionElement","calendarHeight","calendarWidth","configPos","configPosVertical","configPosHorizontal","inputBounds","distanceFromBottom","showOnTop","isCenter","isRight","rightMost","centerMost","editableSheet","styleSheets","sheet","cssRules","createStyleSheet","getDocumentStyleSheet","bodyWidth","centerLeft","centerBefore","centerAfter","centerIndex","centerStyle","insertRule","msMaxTouchPoints","selectedDate","shouldChangeMonth","selectedIndex","single","loadedPlugins","_bind","_setHoursFromDate","_positionCalendar","triggerChangeEvent","toInitial","mobileInput","_initialDate","_createElement","lastChild","wasOpen","select","CALLBACKS","setSelectedDate","inputDate","dates","parseDateRules","rule","hooks","getDateStr","dObj","mobileFormatStr","onMonthNavClick","isPrevMonth","isNextMonth","boolOpts","_enable","timeMode","defaultDateFormat","defaultAltFormat","_minDate","_maxDate","minMaxTimeSetter","_minTime","_maxTime","pluginConf","parseConfig","setupInputs","preloadedDate","setupDates","yr","__hidePrevMonthArrow","__hideNextMonthArrow","innerContainer","buildWeeks","rContainer","hourInput","minuteInput","military2ampm","secondInput","buildTime","customAppend","build","setupMobile","debouncedResize","ontouchstart","selText","isSafari","_flatpickr","nodes","en","localize","setDefaults","fp_incr","deepFreeze","isFrozen","deepFreezeEs6","_default","Response","isMatchIgnored","ignoreMatch","escapeHTML","inherit","emitsWrappingTags","HTMLRenderer","parseTree","classPrefix","walk","addText","openNode","sublanguage","closeNode","TokenTree","closeAllNodes","builder","_walk","_collapse","TokenTreeEmitter","addKeyword","addSublanguage","toHTML","finalize","BACKREF_RE","IDENT_RE","UNDERSCORE_IDENT_RE","NUMBER_RE","C_NUMBER_RE","BINARY_NUMBER_RE","BACKSLASH_ESCAPE","relevance","APOS_STRING_MODE","illegal","QUOTE_STRING_MODE","PHRASAL_WORDS_MODE","COMMENT","modeOptions","C_LINE_COMMENT_MODE","C_BLOCK_COMMENT_MODE","HASH_COMMENT_MODE","NUMBER_MODE","C_NUMBER_MODE","BINARY_NUMBER_MODE","CSS_NUMBER_MODE","REGEXP_MODE","TITLE_MODE","UNDERSCORE_TITLE_MODE","METHOD_GUARD","MODES","MATCH_NOTHING_RE","RE_STARTERS_RE","SHEBANG","beginShebang","binary","resp","END_SAME_AS_BEGIN","_beginMatch","skipIfhasPrecedingDot","beginKeywords","__beforeBegin","keywords","compileIllegal","_parent","either","compileMatch","compileRelevance","COMMON_KEYWORDS","compileKeywords","rawKeywords","caseInsensitive","compiledKeywords","compileList","keywordList","keyword","pair","scoreForKeyword","providedScore","commonKeyword","compileLanguage","language","langRe","case_insensitive","MultiRegex","matchIndexes","regexes","matchAt","addRule","countMatchGroups","compile","terminators","matcherRe","regexps","numCaptures","regex","out","matchData","ResumableMultiRegex","rules","multiRegexes","regexIndex","getMatcher","resumingScanAtSamePosition","considerAll","m2","compilerExtensions","classNameAliases","compileMode","cmode","isCompiled","ext","keywordPattern","$pattern","lexemes","keywordPatternRe","beginRe","endSameAsBegin","endsWithParent","endRe","terminatorEnd","illegalRe","variants","cachedVariants","variant","dependencyOnParent","starts","expandOrCloneMode","mm","term","buildModeRegex","BuildVuePlugin","hljs","Component","detectedLanguage","unknownLanguage","computed","autoDetect","getLanguage","highlightAuto","highlight","ignoreIllegals","autodetect","class","domProps","VuePlugin","install","Vue","mergeHTMLPlugin","originalStream","nodeStream","resultNode","processed","nodeStack","selectStream","attributeString","attr","stream","mergeStreams","_nodeStream","seenDeprecations","deprecated","escape$1","inherit$1","NO_MATCH","languages","aliases","SAFE_MODE","fixMarkupRe","LANGUAGE_NOT_FOUND","PLAINTEXT_LANGUAGE","disableAutodetect","noHighlightRe","languageDetectRe","tabReplace","useBR","__emitter","shouldNotHighlight","languageName","codeOrlanguageName","optionsOrCode","continuation","fire","_highlight","codeToHighlight","keywordData","matchText","processBuffer","subLanguage","modeBuffer","continuations","processSubLanguage","keywordRelevance","cssClass","processKeywords","startNewMode","endOfMode","matchPlusRemainder","lexeme","endsParent","doIgnore","resumeScanAtSamePosition","doBeginMatch","newMode","beforeCallbacks","excludeBegin","returnBegin","doEndMatch","endMode","returnEnd","excludeEnd","lastMatch","processLexeme","textBeforeMatch","badRule","iterations","md","processContinuations","processedCount","illegalBy","msg","sofar","errorRaised","languageSubset","plaintext","justTextHighlightResult","autoDetection","supersetOf","best","secondBest","second_best","brPlugin","TAB_REPLACE_RE","tabReplacePlugin","highlightElement","block","_class","blockLanguage","currentLang","resultLang","updateClassName","relavance","initHighlighting","wantsHighlight","registerAliases","aliasList","alias","lang","fixMarkup","highlightBlock","userOptions","initHighlightingOnLoad","registerLanguage","languageDefinition","error$1","rawDefinition","unregisterLanguage","listLanguages","requireLanguage","upgradePluginAPI","vuePlugin","debugMode","safeMode","versionString","HLJS","KEYWORDS","LITERALS","BUILT_INS","lookahead","IDENT_RE$1","XML_TAG","isTrulyOpeningTag","afterMatchIndex","nextChar","hasClosingTag","KEYWORDS$1","literal","built_in","frac","decimalInteger","NUMBER","SUBST","HTML_TEMPLATE","CSS_TEMPLATE","TEMPLATE_STRING","SUBST_INTERNALS","SUBST_AND_COMMENTS","PARAMS_CONTAINS","PARAMS","TAG_NAME_RE","XML_ENTITIES","XML_META_KEYWORDS","XML_META_PAR_KEYWORDS","APOS_META_STRING_MODE","QUOTE_META_STRING_MODE","TAG_INTERNALS","_maxTestPos","optionalmarker","quantifiermarker","groupmarker","alternatormarker","escapeChar","mask","oncomplete","onincomplete","oncleared","repeat","greedy","autoUnmask","removeMaskOnSubmit","clearMaskOnLostFocus","insertMode","insertModeVisual","clearIncomplete","onBeforeMask","onBeforePaste","onBeforeWrite","onUnMask","showMaskOnFocus","showMaskOnHover","onKeyValidation","skipOptionalPartCharacter","numericInput","rightAlign","undoOnEscape","radixPoint","_radixDance","groupSeparator","keepStatic","positionCaretOnTab","tabThrough","supportsInputType","ignorables","BACKSPACE","TAB","ESCAPE","PAGE_UP","PAGE_DOWN","END","HOME","UP","DOWN","INSERT","DELETE","isComplete","preValidation","postValidation","staticDefinitionSymbol","jitMasking","nullable","inputEventOnly","noValuePatching","positionCaretOnClick","casing","inputmode","importDataAttributes","shiftPositions","usePrototypeDefinitions","validationEventTimeOut","validator","definitionSymbol","__data","attachEvent","detachEvent","InputEvent","fireEvent","iphone","iemobile","mobile","ie","ua","EventHandlers","keydownEvent","inputmask","dependencyLib","maskset","getBuffer","BACKSPACE_SAFARI","handleRemove","writeBuffer","_valueGet","seekNext","getLastValidPosition","altKey","checkVal","undoValue","seekPrevious","getTest","maskLength","translatePosition","caretPos","ignorable","keypressEvent","charCode","ENTER","skipInputEvent","writeOutBuffer","isValid","resetMaskSet","forwardPosition","keyupEvent","isComposing","KEY_229","$el","pasteEvent","getBufferTemplate","inputFallBackEvent","getPlaceholder","isMask","applyInputValue","compositionendEvent","setValueEvent","focusEvent","mouseEnter","invalidEvent","validationEvent","mouseleaveEvent","HandleNativePlaceholder","originalPlaceholder","determineNewCaretPosition","cutEvent","execCommand","blurEvent","clearOptionalTail","mouseenterEvent","submitEvent","_valueSet","unmaskedvalue","resetEvent","refreshValue","EventRuler","readOnly","skipKeyPressEvent","dd","ddd","dddd","mmm","mmmm","yy","yyyy","hh","hx","HH","Hx","MM","ss","setMilliseconds","tt","TT","isoDate","isoTime","isoDateTime","isoUtcDateTime","tokenizer","rawday","rawmonth","rawyear","targetMatch","targetMatchIndex","insert","nextMatch","inputFormat","extendAliases","i18n","ordinalSuffix","displayFormat","outputFormat","dayNames","monthNames","fuzzy","refreshFromBuffer","validPositions","prefillYear","strict","nativeDef","extendDefinitions","cssunit","ip","definitions","email","mac","vin","ssn","getMaskTemplate","digitsOptional","negationSymbol","back","tests","def","digits","__financeInput","generated","_mask","parseMinMaxOptions","MIN_VALUE","MAX_VALUE","enforceDigitsOnBlur","allowMinus","front","SetMaxOnOverflow","unmaskAsNumber","roundingFN","shortcuts","fromIsValid","rewritePosition","__valueGet","__valueSet","currency","percentage","indianns","generatedInput","alternation","noMasksCache","dataAttribute","masksCache","generateMaskSet","__lookupGetter__","__defineGetter__","__defineSetter__","getemptymask","hasMaskedValue","getmetadata","determineLastRequiredPosition","analyseMask","extendDefaults","unmask","Inputmask","customElements","getAttributeNames","define","maskToken","_buffer","excludes","jitOffset","optionality","newBlockMarker","isAlternator","isGroup","openGroup","alternatorGroup","isQuantifier","quantifier","jit","isContentEditable","__lookupSetter__","valHooks","inputmaskpatch","inputMode","isOptional","selectionStart","selectionEnd","getSelection","getRangeAt","commonAncestorContainer","startOffset","endOffset","selection","createRange","duplicate","moveStart","currentStyle","setSelectionRange","createTextNode","setStart","setEnd","collapse","removeAllRanges","addRange","createTextRange","moveEnd","locator","getTestTemplate","optionalQuantifier","checkAlternationMatch","getTests","determineTestTemplate","mloc","cd","getDecisionTaker","isSubsetOf","alternate","revalidateMask","SPACE","addAsync","valuesToAdd","filterStart","filterComplete","filterFunction","filtered","is","il","visibleItems","getByClass","multiSearch","searchClass","fuzzySearch","searchString","columns","searchArguments","kl","foundArgument","jl","searchArgument","listContainer","srcElement","searchDelay","naturalSort","toArray","Item","initPagination","listClass","sortClass","page","matchingItems","searched","searchColumns","valueNames","templater","pagination","reIndex","json","notCreate","valueName","matchedItems","matching","initValues","_values","newValues","elm","isHidden","pagingList","pages","currentPage","innerWindow","outerWindow","dotted","currentPageItem","dottedLeft","dottedRight","paginationClass","itemElements","parseAsync","itemsToIndex","parseComplete","getChildren","indexAsync","customSearch","prepare","resetList","setColumns","setSearchString","tmpColumn","phrase","words","word_found","column","searchMethod","searchStart","searchComplete","buttons","getOrder","btn","predefinedOrder","getInSensitive","insensitive","setOrder","sortFunction","customSortFunction","multi","itemA","itemB","sortStart","sortComplete","Templater","createItem","createCleanTemplateItem","templateNode","getFirstListItem","getItemSource","itemHTML","tbody","getValueName","itemSource","ClassList","force","unbind","immediate","later","callNow","Match_Location","Match_Distance","Match_Threshold","loc","match_bitapScore_","accuracy","proximity","score_threshold","best_loc","bin_min","bin_mid","matchmask","last_rd","bin_max","finish","rd","charMatch","attrs","getElementsByClassName","classElements","elsLen","polyfill","collection","container_1","format_1","leaf_1","scroll_1","inline_1","block_1","embed_1","text_1","attributor_1","class_1","style_1","store_1","Registry","Parchment","Scope","Format","Leaf","Embed","Scroll","Block","Inline","Text","Attributor","Attribute","Class","Style","extendStatics","__extends","__","ParchmentError","tags","ANY","TEXT_NODE","LEVEL","BLOCK","INLINE","BlotClass","bubble","blot","Definitions","Definition","blotName","attrName","keyName","tagNames","equal","op","NULL_CHARACTER","Delta","newOp","retain","lastOp","chop","partition","failed","changeLength","iter","hasNext","nextOp","compose","thisIter","otherIter","firstOther","peek","firstLeft","peekType","peekLength","thisOp","otherOp","strings","diffResult","opLength","EQUAL","eachLine","newline","priority","transformPosition","nextType","toStr","gOPD","hasOwnConstructor","hasIsPrototypeOf","getProperty","copyIsArray","deep","BlockEmbed","bubbleFormats","_createClass","desc","_extend2","_quillDelta2","_parchment2","_break2","_inline2","_text2","_Parchment$Embed","BLOCK_ATTRIBUTE","insertAt","BLOCK_BLOT","_Parchment$Block","descendants","leaf","tail","ref","statics","defaultChild","allowedChildren","overload","expandConfig","_slicedToArray","_n","_d","_s","sliceIterator","_editor2","_emitter4","_module2","_selection","_selection2","_logger2","_theme2","_defineProperty","debug","Quill","__quill","scrollingContainer","whitelist","editor","theme","addModule","clipboard","history","EDITOR_CHANGE","TEXT_CHANGE","isBlank","SCROLL_UPDATE","mutations","lastRange","modify","contents","convert","setContents","level","imports","overwrite","refNode","setRange","_overload","_overload2","deleteText","scrollIntoView","API","formatLine","formatText","setSelection","SILENT","_overload3","_overload4","_overload5","_overload6","containerBounds","getLength","_overload7","_overload8","getContents","getFormat","_overload9","_overload10","getText","hasFocus","embed","insertEmbed","_overload11","_overload12","insertText","once","dangerouslyPasteHTML","_overload13","_overload14","removeFormat","deleted","applied","applyDelta","_overload15","_overload16","Range","USER","DEFAULTS","import","themeConfig","moduleConfig","moduleClass","toolbar","oldDelta","shiftRange","_emitter","_emitter2","_map","_map2","_map3","_map4","_Parchment$Inline","BLOT","isolate","moveChildren","selfIndex","otherIndex","_parchment","TextBlot","_Parchment$Text","_eventemitter2","_node$__quill$emitter","handleDOM","_EventEmitter","SCROLL_BEFORE_UPDATE","SCROLL_OPTIMIZE","SELECTION_CHANGE","Module","quill","levels","_console","logger","newLevel","pSlice","isArguments","deepEqual","actual","expected","isUndefinedOrNull","isBuffer","ka","objEquiv","attributeBit","ATTRIBUTE","canAdd","Code","_block2","_Inline","CodeBlock","_Block","_descendant","descendant","deleteAt","nextNewline","newlineIndex","prevNewline","isolateLength","formatAt","_descendant3","_descendant4","searchIndex","optimize","_op2","_code2","_cursor2","_block","_clone2","_deepEqual2","ASCII","Editor","getDelta","consumeNextNewline","scrollLength","batchStart","bullet","normalizeDelta","_scroll$line","_scroll$line2","_line$descendant","batchEnd","lengthRemaining","lineLength","codeIndex","codeLength","leaves","formatsArr","blots","combineFormats","_scroll$line3","_scroll$line4","suffixLength","cursorIndex","textBlot","oldValue","CONTENTS","oldText","newText","diffDelta","combined","_toConsumableArray","Selection","composing","savedRange","handleComposition","handleDragging","listenDOM","getNativeRange","textNode","setNativeRange","ignored","_context$range","startNode","endNode","nativeRange","collapsed","_scroll$leaf","_scroll$leaf2","_leaf$position","_leaf$position2","_scroll$leaf3","_scroll$leaf4","_leaf$position3","_leaf$position4","rangeCount","normalizeNative","normalizedToRange","indexes","_position","endContainer","_scroll$leaf5","_scroll$leaf6","_leaf$position5","_leaf$position6","scrollBounds","rangeToNative","oldRange","_getRange","_getRange2","Break","linked_list_1","shadow_1","ContainerBlot","makeBlot","forEachAt","criteria","lengthLeft","childBlot","refBlot","insertInto","targetParent","inclusive","mutation","DOCUMENT_POSITION_CONTAINED_BY","replaceChild","FormatBlot","replaceWith","LeafBlot","INLINE_BLOT","lib","keepNull","Iterator","retOp","_instanceof","nativeMap","nativeSet","nativePromise","depth","includeNonEnumerable","allParents","allChildren","useBuffer","Buffer","_clone","__isArray","__isRegExp","__getRegExpFlags","__isDate","allocUnsafe","keyChild","valueChild","entryChild","allPropertyNames","__objToStr","clonePrototype","_container2","isLine","_Parchment$Scroll","batch","_line","_line2","_line3","_newlineIndex","getLines","takeRecords","SHORTKEY","_quill2","Keyboard","_Module","bindings","addBinding","handleEnter","handleBackspace","handleDelete","handleDeleteRange","binding","_quill$getLine","getLine","_quill$getLine2","_quill$getLeaf","getLeaf","_quill$getLeaf2","leafStart","offsetStart","leafEnd","offsetEnd","prefixText","suffixText","curContext","empty","makeEmbedArrowHandler","where","_quill$getLeaf3","_quill$getLine11","_quill$getLine13","curFormats","prevFormats","nextLength","_quill$getLine15","_quill$getLine17","nextFormats","firstFormats","lastFormats","lineFormats","makeCodeBlockHandler","indent","_quill$scroll$descend","_quill$scroll$descend2","scrollIndex","getIndex","makeFormatHandler","shortKey","cutoff","updateContents","_quill$getLine3","_quill$getLine4","_quill$getLine5","_quill$getLine6","header","_quill$getLine7","_quill$getLine8","_quill$getLine9","_quill$getLine10","Cursor","restoreText","_Parchment$Container","ColorStyle","ColorClass","ColorAttributor","_Parchment$Attributor","_inline","Link","_sanitize","PROTOCOL_WHITELIST","SANITIZED_URL","protocols","anchor","_keyboard2","_dropdown2","optionsCounter","toggleAriaAttribute","Picker","buildPicker","togglePicker","escape","selectItem","buildItem","buildLabel","buildOptions","_embed2","_scroll2","_clipboard2","_history2","ShadowBlot","parentBlot","refDomNode","AttributorStore","ClassAttributor","StyleAttributor","Theme","themes","GUARD_TEXT","contentNode","childNode","leftGuard","rightGuard","prevLength","AlignStyle","AlignClass","AlignAttribute","BackgroundStyle","BackgroundClass","_color","DirectionStyle","DirectionClass","DirectionAttribute","FontClass","FontStyle","FontStyleAttributor","SizeStyle","SizeClass","getLastChangeIndex","History","lastRecorded","ignoreChange","userOnly","undo","redo","dest","changeDelta","undoDelta","maxStack","deleteLength","changeIndex","endsWithNewlineChange","BaseTooltip","_colorPicker2","_iconPicker2","_picker2","_tooltip2","ALIGNS","COLORS","FONTS","HEADERS","SIZES","BaseTheme","_Theme","textbox","pickers","picker","extendToolbar","icons","selects","fillSelect","formula","edit","fileInput","reader","video","_Tooltip","boundsContainer","preview","linkRange","restoreFocus","LinkedList","curNode","curIndex","curLength","OBSERVER_CONFIG","characterData","characterDataOldValue","ScrollBlot","records","mark","markParent","previousSibling","grandChild","InlineBlot","obj1","obj2","isEqual","BlockBlot","EmbedBlot","splitText","_toggle","subjectString","DIFF_DELETE","diff_main","text1","text2","cursor_pos","commonlength","diff_commonPrefix","commonprefix","diff_commonSuffix","commonsuffix","diffs","longtext","shorttext","hm","diff_halfMatchI_","best_longtext_a","best_longtext_b","best_shorttext_a","best_shorttext_b","seed","best_common","prefixLength","text1_a","text1_b","text2_a","text2_b","hm1","hm2","mid_common","diff_halfMatch_","diffs_a","diffs_b","text1_length","text2_length","max_d","v_offset","v_length","k1start","k1end","k2start","k2end","k1","k1_offset","k2_offset","diff_bisectSplit_","k2","diff_bisect_","diff_compute_","diff_cleanupMerge","norm","current_pos","next_pos","split_pos","d_left","d_right","cursor_normalize_diff","ndiffs","cursor_pointer","d_next","merge_tuples","fix_cursor","compact","starts_with_pair_end","ends_with_pair_start","fixed_diffs","fix_emoji","text1a","text2a","text1b","text2b","diffsb","pointermin","pointermax","pointermid","pointerstart","pointerend","count_delete","count_insert","text_delete","text_insert","changes","left_d","right_d","shim","supportsArgumentsClass","supported","unsupported","Events","EE","EventEmitter","_events","_eventsCount","eventNames","exists","available","ee","a2","a3","a4","a5","removeAllListeners","setMaxListeners","prefixed","matchSpacing","matchNewline","matchBlot","matchAttributor","_extend3","_align","_background","_font","DOM_KEY","CLIPBOARD_CONFIG","deltaEndsWith","fontStyle","computeStyle","italic","fontWeight","bold","applyFormat","textIndent","matchAlias","ATTRIBUTE_ATTRIBUTORS","STYLE_ATTRIBUTORS","Clipboard","onPaste","matchers","matchVisual","addMatcher","_prepareMatching","prepareMatching","_prepareMatching2","elementMatchers","textMatchers","traverse","_pair","endText","childrenDelta","nodeHeight","marginTop","marginBottom","whiteSpace","Bold","addControls","Toolbar","_ret","controls","_this$quill$selection","_quill$selection$getR","prompt","addButton","control","addSelect","clean","_picker","ColorPicker","_Picker","colorLabel","IconPicker","defaultItem","rootBounds","verticalShift","_base","_base2","_link2","_icons2","TOOLBAR_CONFIG","SnowTheme","_BaseTheme","buildButtons","buildPickers","SnowTooltip","_BaseTooltip","_core2","_indent","_blockquote2","_header2","_list","_list2","_bold2","_italic2","_script2","_strike2","_underline2","_image2","_video2","_code","_formula2","_syntax2","_toolbar2","_bubble2","_snow2","IndentClass","ListItem","IdentAttributor","Blockquote","Header","_Container","listEventHandler","_bold","Italic","_Bold","Script","Strike","Underline","_link","ATTRIBUTES","Image","Video","_BlockEmbed","FormulaBlot","_Embed","katex","throwOnError","errorColor","Formula","CodeToken","SyntaxCodeBlock","_CodeBlock","cachedText","Syntax","timer","BubbleTooltip","BubbleTheme","lastLine","_bounds","marginLeft","alphabetIndexMap","alphabetIndexMapLength","isNumberCode","naturalCompare","lengthA","lengthB","aIndex","bIndex","charCodeA","charCodeB","numStartA","numStartB","numEndA","numEndB","difference"],"sourceRoot":""}