\";\n return div.innerHTML.indexOf('
') > 0\n}\n\n// #3663: IE encodes newlines inside attribute values while other browsers don't\nvar shouldDecodeNewlines = inBrowser ? getShouldDecode(false) : false;\n// #6828: chrome encodes content in a[href]\nvar shouldDecodeNewlinesForHref = inBrowser ? getShouldDecode(true) : false;\n\n/* */\n\nvar idToTemplate = cached(function (id) {\n var el = query(id);\n return el && el.innerHTML\n});\n\nvar mount = Vue$3.prototype.$mount;\nVue$3.prototype.$mount = function (\n el,\n hydrating\n) {\n el = el && query(el);\n\n /* istanbul ignore if */\n if (el === document.body || el === document.documentElement) {\n process.env.NODE_ENV !== 'production' && warn(\n \"Do not mount Vue to or - mount to normal elements instead.\"\n );\n return this\n }\n\n var options = this.$options;\n // resolve template/el and convert to render function\n if (!options.render) {\n var template = options.template;\n if (template) {\n if (typeof template === 'string') {\n if (template.charAt(0) === '#') {\n template = idToTemplate(template);\n /* istanbul ignore if */\n if (process.env.NODE_ENV !== 'production' && !template) {\n warn(\n (\"Template element not found or is empty: \" + (options.template)),\n this\n );\n }\n }\n } else if (template.nodeType) {\n template = template.innerHTML;\n } else {\n if (process.env.NODE_ENV !== 'production') {\n warn('invalid template option:' + template, this);\n }\n return this\n }\n } else if (el) {\n template = getOuterHTML(el);\n }\n if (template) {\n /* istanbul ignore if */\n if (process.env.NODE_ENV !== 'production' && config.performance && mark) {\n mark('compile');\n }\n\n var ref = compileToFunctions(template, {\n shouldDecodeNewlines: shouldDecodeNewlines,\n shouldDecodeNewlinesForHref: shouldDecodeNewlinesForHref,\n delimiters: options.delimiters,\n comments: options.comments\n }, this);\n var render = ref.render;\n var staticRenderFns = ref.staticRenderFns;\n options.render = render;\n options.staticRenderFns = staticRenderFns;\n\n /* istanbul ignore if */\n if (process.env.NODE_ENV !== 'production' && config.performance && mark) {\n mark('compile end');\n measure((\"vue \" + (this._name) + \" compile\"), 'compile', 'compile end');\n }\n }\n }\n return mount.call(this, el, hydrating)\n};\n\n/**\n * Get outerHTML of elements, taking care\n * of SVG elements in IE as well.\n */\nfunction getOuterHTML (el) {\n if (el.outerHTML) {\n return el.outerHTML\n } else {\n var container = document.createElement('div');\n container.appendChild(el.cloneNode(true));\n return container.innerHTML\n }\n}\n\nVue$3.compile = compileToFunctions;\n\nexport default Vue$3;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue/dist/vue.esm.js\n// module id = 7+uW\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar buildURL = require('./../helpers/buildURL');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\nvar btoa = (typeof window !== 'undefined' && window.btoa && window.btoa.bind(window)) || require('./../helpers/btoa');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n var loadEvent = 'onreadystatechange';\n var xDomain = false;\n\n // For IE 8/9 CORS support\n // Only supports POST and GET calls and doesn't returns the response headers.\n // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest.\n if (process.env.NODE_ENV !== 'test' &&\n typeof window !== 'undefined' &&\n window.XDomainRequest && !('withCredentials' in request) &&\n !isURLSameOrigin(config.url)) {\n request = new window.XDomainRequest();\n loadEvent = 'onload';\n xDomain = true;\n request.onprogress = function handleProgress() {};\n request.ontimeout = function handleTimeout() {};\n }\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password || '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n // Listen for ready state\n request[loadEvent] = function handleLoad() {\n if (!request || (request.readyState !== 4 && !xDomain)) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n var response = {\n data: responseData,\n // IE sends 1223 instead of 204 (https://github.com/axios/axios/issues/201)\n status: request.status === 1223 ? 204 : request.status,\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(resolve, reject, response);\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED',\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n var cookies = require('./../helpers/cookies');\n\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (config.withCredentials) {\n request.withCredentials = true;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n if (config.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken) {\n // Handle cancellation\n config.cancelToken.promise.then(function onCanceled(cancel) {\n if (!request) {\n return;\n }\n\n request.abort();\n reject(cancel);\n // Clean up request\n request = null;\n });\n }\n\n if (requestData === undefined) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/adapters/xhr.js\n// module id = 7GwW\n// module chunks = 0","module.exports =\n/******/ (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\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// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\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 = 212);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ function(module, exports) {\n\n/* globals __VUE_SSR_CONTEXT__ */\n\n// this module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle\n\nmodule.exports = function normalizeComponent (\n rawScriptExports,\n compiledTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier /* server only */\n) {\n var esModule\n var scriptExports = rawScriptExports = rawScriptExports || {}\n\n // ES6 modules interop\n var type = typeof rawScriptExports.default\n if (type === 'object' || type === 'function') {\n esModule = rawScriptExports\n scriptExports = rawScriptExports.default\n }\n\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (compiledTemplate) {\n options.render = compiledTemplate.render\n options.staticRenderFns = compiledTemplate.staticRenderFns\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = injectStyles\n }\n\n if (hook) {\n var functional = options.functional\n var existing = functional\n ? options.render\n : options.beforeCreate\n if (!functional) {\n // inject component registration as beforeCreate hook\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n } else {\n // register for functioal component in vue file\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return existing(h, context)\n }\n }\n }\n\n return {\n esModule: esModule,\n exports: scriptExports,\n options: options\n }\n}\n\n\n/***/ },\n\n/***/ 116:\n/***/ function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ },\n\n/***/ 134:\n/***/ function(module, exports, __webpack_require__) {\n\nfunction injectStyle (ssrContext) {\n __webpack_require__(116)\n}\nvar Component = __webpack_require__(0)(\n /* script */\n __webpack_require__(56),\n /* template */\n __webpack_require__(186),\n /* styles */\n injectStyle,\n /* scopeId */\n null,\n /* moduleIdentifier (server only) */\n null\n)\n\nmodule.exports = Component.exports\n\n\n/***/ },\n\n/***/ 17:\n/***/ function(module, exports) {\n\nmodule.exports = require(\"mint-ui/lib/font/style.css\");\n\n/***/ },\n\n/***/ 186:\n/***/ function(module, exports) {\n\nmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('a', {\n staticClass: \"mint-cell\",\n attrs: {\n \"href\": _vm.href\n }\n }, [(_vm.isLink) ? _c('span', {\n staticClass: \"mint-cell-mask\"\n }) : _vm._e(), _vm._v(\" \"), _c('div', {\n staticClass: \"mint-cell-left\"\n }, [_vm._t(\"left\")], 2), _vm._v(\" \"), _c('div', {\n staticClass: \"mint-cell-wrapper\"\n }, [_c('div', {\n staticClass: \"mint-cell-title\"\n }, [_vm._t(\"icon\", [(_vm.icon) ? _c('i', {\n staticClass: \"mintui\",\n class: 'mintui-' + _vm.icon\n }) : _vm._e()]), _vm._v(\" \"), _vm._t(\"title\", [_c('span', {\n staticClass: \"mint-cell-text\",\n domProps: {\n \"textContent\": _vm._s(_vm.title)\n }\n }), _vm._v(\" \"), (_vm.label) ? _c('span', {\n staticClass: \"mint-cell-label\",\n domProps: {\n \"textContent\": _vm._s(_vm.label)\n }\n }) : _vm._e()])], 2), _vm._v(\" \"), _c('div', {\n staticClass: \"mint-cell-value\",\n class: {\n 'is-link': _vm.isLink\n }\n }, [_vm._t(\"default\", [_c('span', {\n domProps: {\n \"textContent\": _vm._s(_vm.value)\n }\n })])], 2), _vm._v(\" \"), (_vm.isLink) ? _c('i', {\n staticClass: \"mint-cell-allow-right\"\n }) : _vm._e()]), _vm._v(\" \"), _c('div', {\n staticClass: \"mint-cell-right\"\n }, [_vm._t(\"right\")], 2)])\n},staticRenderFns: []}\n\n/***/ },\n\n/***/ 212:\n/***/ function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(22);\n\n\n/***/ },\n\n/***/ 22:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_cell_vue__ = __webpack_require__(134);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_cell_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__src_cell_vue__);\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/* harmony reexport (default from non-hamory) */ __webpack_require__.d(exports, \"default\", function() { return __WEBPACK_IMPORTED_MODULE_0__src_cell_vue___default.a; });\n\n\n\n/***/ },\n\n/***/ 56:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\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\nif (true) {\n __webpack_require__(17);\n}\n\n/**\n * mt-cell\n * @module components/cell\n * @desc 单元格\n * @param {string|Object} [to] - 跳转链接,使用 vue-router 的情况下 to 会传递给 router.push,否则作为 a 标签的 href 属性处理\n * @param {string} [icon] - 图标,提供 more, back,或者自定义的图标(传入不带前缀的图标类名,最后拼接成 .mintui-xxx)\n * @param {string} [title] - 标题\n * @param {string} [label] - 备注信息\n * @param {boolean} [is-link=false] - 可点击的链接\n * @param {string} [value] - 右侧显示文字\n * @param {slot} - 同 value, 会覆盖 value 属性\n * @param {slot} [title] - 同 title, 会覆盖 title 属性\n * @param {slot} [icon] - 同 icon, 会覆盖 icon 属性,例如可以传入图片\n *\n * @example\n *
\n *
\n * 描述文字啊哈
\n * \n */\n/* harmony default export */ exports[\"default\"] = {\n name: 'mt-cell',\n\n props: {\n to: [String, Object],\n icon: String,\n title: String,\n label: String,\n isLink: Boolean,\n value: {}\n },\n\n computed: {\n href: function href() {\n var this$1 = this;\n\n if (this.to && !this.added && this.$router) {\n var resolved = this.$router.match(this.to);\n if (!resolved.matched.length) return this.to;\n\n this.$nextTick(function () {\n this$1.added = true;\n this$1.$el.addEventListener('click', this$1.handleClick);\n });\n return resolved.fullPath || resolved.path;\n }\n return this.to;\n }\n },\n\n methods: {\n handleClick: function handleClick($event) {\n $event.preventDefault();\n this.$router.push(this.href);\n }\n }\n};\n\n\n/***/ }\n\n/******/ });\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/mint-ui/lib/cell/index.js\n// module id = 7YS2\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%40/gi, '@').\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n }\n\n if (!utils.isArray(val)) {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/helpers/buildURL.js\n// module id = DQCr\n// module chunks = 0","\n/**\n * chimee-plugin-mobile-state v0.0.13\n * (c) 2017 yandeqiang\n * Released under ISC\n */\n\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.chimeePluginMobileState = factory());\n}(this, (function () { 'use strict';\n\nfunction __$styleInject(css, returnValue) {\n if (typeof document === 'undefined') {\n return returnValue;\n }\n css = css || '';\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n head.appendChild(style);\n \n if (style.styleSheet){\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n return returnValue;\n}\n\nvar commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n\n\nfunction unwrapExports (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nvar classCallCheck = createCommonjsModule(function (module, exports) {\nexports.__esModule = true;\n\nexports.default = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n});\n\nvar _classCallCheck = unwrapExports(classCallCheck);\n\nvar _global = createCommonjsModule(function (module) {\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n});\n\nvar _core = createCommonjsModule(function (module) {\nvar core = module.exports = { version: '2.5.1' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n});\n\nvar _core_1 = _core.version;\n\nvar _aFunction = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n\n// optional / simple context binding\n\nvar _ctx = function (fn, that, length) {\n _aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\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\nvar _isObject = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\nvar _anObject = function (it) {\n if (!_isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n\nvar _fails = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n\n// Thank's IE8 for his funny defineProperty\nvar _descriptors = !_fails(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n\nvar document$1 = _global.document;\n// typeof document.createElement is 'object' in old IE\nvar is = _isObject(document$1) && _isObject(document$1.createElement);\nvar _domCreate = function (it) {\n return is ? document$1.createElement(it) : {};\n};\n\nvar _ie8DomDefine = !_descriptors && !_fails(function () {\n return Object.defineProperty(_domCreate('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n\n// 7.1.1 ToPrimitive(input [, PreferredType])\n\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nvar _toPrimitive = function (it, S) {\n if (!_isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !_isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !_isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !_isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n\nvar dP = Object.defineProperty;\n\nvar f = _descriptors ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n _anObject(O);\n P = _toPrimitive(P, true);\n _anObject(Attributes);\n if (_ie8DomDefine) try {\n return dP(O, P, Attributes);\n } catch (e) { /* 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\nvar _objectDp = {\n\tf: f\n};\n\nvar _propertyDesc = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n\nvar _hide = _descriptors ? function (object, key, value) {\n return _objectDp.f(object, key, _propertyDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var IS_WRAP = type & $export.W;\n var exports = IS_GLOBAL ? _core : _core[name] || (_core[name] = {});\n var expProto = exports[PROTOTYPE];\n var target = IS_GLOBAL ? _global : IS_STATIC ? _global[name] : (_global[name] || {})[PROTOTYPE];\n var key, own, out;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n if (own && key in exports) continue;\n // export native or passed\n out = own ? target[key] : source[key];\n // prevent global pollution for namespaces\n exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n // bind timers to global for call from export context\n : IS_BIND && own ? _ctx(out, _global)\n // wrap global constructors for prevent change them in library\n : IS_WRAP && target[key] == out ? (function (C) {\n var F = function (a, b, c) {\n if (this instanceof C) {\n switch (arguments.length) {\n case 0: return new C();\n case 1: return new C(a);\n case 2: return new C(a, b);\n } return new C(a, b, c);\n } return C.apply(this, arguments);\n };\n F[PROTOTYPE] = C[PROTOTYPE];\n return F;\n // make static versions for prototype methods\n })(out) : IS_PROTO && typeof out == 'function' ? _ctx(Function.call, out) : out;\n // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n if (IS_PROTO) {\n (exports.virtual || (exports.virtual = {}))[key] = out;\n // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n if (type & $export.R && expProto && !expProto[key]) _hide(expProto, key, out);\n }\n }\n};\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nvar _export = $export;\n\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n_export(_export.S + _export.F * !_descriptors, 'Object', { defineProperty: _objectDp.f });\n\nvar $Object = _core.Object;\nvar defineProperty$2 = function defineProperty(it, key, desc) {\n return $Object.defineProperty(it, key, desc);\n};\n\nvar defineProperty = createCommonjsModule(function (module) {\nmodule.exports = { \"default\": defineProperty$2, __esModule: true };\n});\n\nunwrapExports(defineProperty);\n\nvar createClass = createCommonjsModule(function (module, exports) {\nexports.__esModule = true;\n\n\n\nvar _defineProperty2 = _interopRequireDefault(defineProperty);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n (0, _defineProperty2.default)(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n});\n\nvar _createClass = unwrapExports(createClass);\n\n// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nvar _toInteger = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n\n// 7.2.1 RequireObjectCoercible(argument)\nvar _defined = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n\n// true -> String#at\n// false -> String#codePointAt\nvar _stringAt = function (TO_STRING) {\n return function (that, pos) {\n var s = String(_defined(that));\n var i = _toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n\nvar _library = true;\n\nvar _redefine = _hide;\n\nvar hasOwnProperty = {}.hasOwnProperty;\nvar _has = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n\nvar _iterators = {};\n\nvar toString = {}.toString;\n\nvar _cof = function (it) {\n return toString.call(it).slice(8, -1);\n};\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\n\n// eslint-disable-next-line no-prototype-builtins\nvar _iobject = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return _cof(it) == 'String' ? it.split('') : Object(it);\n};\n\n// to indexed object, toObject with fallback for non-array-like ES3 strings\n\n\nvar _toIobject = function (it) {\n return _iobject(_defined(it));\n};\n\n// 7.1.15 ToLength\n\nvar min = Math.min;\nvar _toLength = function (it) {\n return it > 0 ? min(_toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n\nvar max = Math.max;\nvar min$1 = Math.min;\nvar _toAbsoluteIndex = function (index, length) {\n index = _toInteger(index);\n return index < 0 ? max(index + length, 0) : min$1(index, length);\n};\n\n// false -> Array#indexOf\n// true -> Array#includes\n\n\n\nvar _arrayIncludes = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = _toIobject($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\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nvar SHARED = '__core-js_shared__';\nvar store = _global[SHARED] || (_global[SHARED] = {});\nvar _shared = function (key) {\n return store[key] || (store[key] = {});\n};\n\nvar id = 0;\nvar px = Math.random();\nvar _uid = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n\nvar shared = _shared('keys');\n\nvar _sharedKey = function (key) {\n return shared[key] || (shared[key] = _uid(key));\n};\n\nvar arrayIndexOf = _arrayIncludes(false);\nvar IE_PROTO$1 = _sharedKey('IE_PROTO');\n\nvar _objectKeysInternal = function (object, names) {\n var O = _toIobject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO$1) _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 ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n\n// IE 8- don't enum bug keys\nvar _enumBugKeys = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n\n// 19.1.2.14 / 15.2.3.14 Object.keys(O)\n\n\n\nvar _objectKeys = Object.keys || function keys(O) {\n return _objectKeysInternal(O, _enumBugKeys);\n};\n\nvar _objectDps = _descriptors ? Object.defineProperties : function defineProperties(O, Properties) {\n _anObject(O);\n var keys = _objectKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) _objectDp.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n\nvar document$2 = _global.document;\nvar _html = document$2 && document$2.documentElement;\n\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n\n\n\nvar IE_PROTO = _sharedKey('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE$1 = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = _domCreate('iframe');\n var i = _enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n _html.appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE$1][_enumBugKeys[i]];\n return createDict();\n};\n\nvar _objectCreate = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE$1] = _anObject(O);\n result = new Empty();\n Empty[PROTOTYPE$1] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : _objectDps(result, Properties);\n};\n\nvar _wks = createCommonjsModule(function (module) {\nvar store = _shared('wks');\n\nvar Symbol = _global.Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : _uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n});\n\nvar def = _objectDp.f;\n\nvar TAG = _wks('toStringTag');\n\nvar _setToStringTag = function (it, tag, stat) {\n if (it && !_has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\n_hide(IteratorPrototype, _wks('iterator'), function () { return this; });\n\nvar _iterCreate = function (Constructor, NAME, next) {\n Constructor.prototype = _objectCreate(IteratorPrototype, { next: _propertyDesc(1, next) });\n _setToStringTag(Constructor, NAME + ' Iterator');\n};\n\n// 7.1.13 ToObject(argument)\n\nvar _toObject = function (it) {\n return Object(_defined(it));\n};\n\n// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\n\n\nvar IE_PROTO$2 = _sharedKey('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nvar _objectGpo = Object.getPrototypeOf || function (O) {\n O = _toObject(O);\n if (_has(O, IE_PROTO$2)) return O[IE_PROTO$2];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n\nvar ITERATOR = _wks('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nvar _iterDefine = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n _iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = _objectGpo($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n _setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!_library && !_has(IteratorPrototype, ITERATOR)) _hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!_library || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n _hide(proto, ITERATOR, $default);\n }\n // Plug for library\n _iterators[NAME] = $default;\n _iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) _redefine(proto, key, methods[key]);\n } else _export(_export.P + _export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n\nvar $at = _stringAt(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\n_iterDefine(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n\nvar _iterStep = function (done, value) {\n return { value: value, done: !!done };\n};\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nvar es6_array_iterator = _iterDefine(Array, 'Array', function (iterated, kind) {\n this._t = _toIobject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return _iterStep(1);\n }\n if (kind == 'keys') return _iterStep(0, index);\n if (kind == 'values') return _iterStep(0, O[index]);\n return _iterStep(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\n_iterators.Arguments = _iterators.Array;\n\nvar TO_STRING_TAG = _wks('toStringTag');\n\nvar DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +\n 'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +\n 'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +\n 'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +\n 'TextTrackList,TouchList').split(',');\n\nfor (var i = 0; i < DOMIterables.length; i++) {\n var NAME = DOMIterables[i];\n var Collection = _global[NAME];\n var proto = Collection && Collection.prototype;\n if (proto && !proto[TO_STRING_TAG]) _hide(proto, TO_STRING_TAG, NAME);\n _iterators[NAME] = _iterators.Array;\n}\n\nvar f$1 = _wks;\n\nvar _wksExt = {\n\tf: f$1\n};\n\nvar iterator$2 = _wksExt.f('iterator');\n\nvar iterator = createCommonjsModule(function (module) {\nmodule.exports = { \"default\": iterator$2, __esModule: true };\n});\n\nunwrapExports(iterator);\n\nvar _meta = createCommonjsModule(function (module) {\nvar META = _uid('meta');\n\n\nvar setDesc = _objectDp.f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !_fails(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!_isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!_has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!_has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !_has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n});\n\nvar _meta_1 = _meta.KEY;\nvar _meta_2 = _meta.NEED;\nvar _meta_3 = _meta.fastKey;\nvar _meta_4 = _meta.getWeak;\nvar _meta_5 = _meta.onFreeze;\n\nvar defineProperty$4 = _objectDp.f;\nvar _wksDefine = function (name) {\n var $Symbol = _core.Symbol || (_core.Symbol = _library ? {} : _global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty$4($Symbol, name, { value: _wksExt.f(name) });\n};\n\nvar f$2 = Object.getOwnPropertySymbols;\n\nvar _objectGops = {\n\tf: f$2\n};\n\nvar f$3 = {}.propertyIsEnumerable;\n\nvar _objectPie = {\n\tf: f$3\n};\n\n// all enumerable object keys, includes symbols\n\n\n\nvar _enumKeys = function (it) {\n var result = _objectKeys(it);\n var getSymbols = _objectGops.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = _objectPie.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n\n// 7.2.2 IsArray(argument)\n\nvar _isArray = Array.isArray || function isArray(arg) {\n return _cof(arg) == 'Array';\n};\n\n// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\n\nvar hiddenKeys = _enumBugKeys.concat('length', 'prototype');\n\nvar f$5 = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return _objectKeysInternal(O, hiddenKeys);\n};\n\nvar _objectGopn = {\n\tf: f$5\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\n\nvar gOPN$1 = _objectGopn.f;\nvar toString$1 = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN$1(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nvar f$4 = function getOwnPropertyNames(it) {\n return windowNames && toString$1.call(it) == '[object Window]' ? getWindowNames(it) : gOPN$1(_toIobject(it));\n};\n\nvar _objectGopnExt = {\n\tf: f$4\n};\n\nvar gOPD$1 = Object.getOwnPropertyDescriptor;\n\nvar f$6 = _descriptors ? gOPD$1 : function getOwnPropertyDescriptor(O, P) {\n O = _toIobject(O);\n P = _toPrimitive(P, true);\n if (_ie8DomDefine) try {\n return gOPD$1(O, P);\n } catch (e) { /* empty */ }\n if (_has(O, P)) return _propertyDesc(!_objectPie.f.call(O, P), O[P]);\n};\n\nvar _objectGopd = {\n\tf: f$6\n};\n\n// ECMAScript 6 symbols shim\n\n\n\n\n\nvar META = _meta.KEY;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar gOPD = _objectGopd.f;\nvar dP$2 = _objectDp.f;\nvar gOPN = _objectGopnExt.f;\nvar $Symbol = _global.Symbol;\nvar $JSON = _global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE$2 = 'prototype';\nvar HIDDEN = _wks('_hidden');\nvar TO_PRIMITIVE = _wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = _shared('symbol-registry');\nvar AllSymbols = _shared('symbols');\nvar OPSymbols = _shared('op-symbols');\nvar ObjectProto$1 = Object[PROTOTYPE$2];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = _global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE$2] || !QObject[PROTOTYPE$2].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = _descriptors && _fails(function () {\n return _objectCreate(dP$2({}, 'a', {\n get: function () { return dP$2(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto$1, key);\n if (protoDesc) delete ObjectProto$1[key];\n dP$2(it, key, D);\n if (protoDesc && it !== ObjectProto$1) dP$2(ObjectProto$1, key, protoDesc);\n} : dP$2;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _objectCreate($Symbol[PROTOTYPE$2]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto$1) $defineProperty(OPSymbols, key, D);\n _anObject(it);\n key = _toPrimitive(key, true);\n _anObject(D);\n if (_has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!_has(it, HIDDEN)) dP$2(it, HIDDEN, _propertyDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (_has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _objectCreate(D, { enumerable: _propertyDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP$2(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n _anObject(it);\n var keys = _enumKeys(P = _toIobject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _objectCreate(it) : $defineProperties(_objectCreate(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = _toPrimitive(key, true));\n if (this === ObjectProto$1 && _has(AllSymbols, key) && !_has(OPSymbols, key)) return false;\n return E || !_has(this, key) || !_has(AllSymbols, key) || _has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = _toIobject(it);\n key = _toPrimitive(key, true);\n if (it === ObjectProto$1 && _has(AllSymbols, key) && !_has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && _has(AllSymbols, key) && !(_has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(_toIobject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!_has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto$1;\n var names = gOPN(IS_OP ? OPSymbols : _toIobject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (_has(AllSymbols, key = names[i++]) && (IS_OP ? _has(ObjectProto$1, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = _uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto$1) $set.call(OPSymbols, value);\n if (_has(this, HIDDEN) && _has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, _propertyDesc(1, value));\n };\n if (_descriptors && setter) setSymbolDesc(ObjectProto$1, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n _redefine($Symbol[PROTOTYPE$2], 'toString', function toString() {\n return this._k;\n });\n\n _objectGopd.f = $getOwnPropertyDescriptor;\n _objectDp.f = $defineProperty;\n _objectGopn.f = _objectGopnExt.f = $getOwnPropertyNames;\n _objectPie.f = $propertyIsEnumerable;\n _objectGops.f = $getOwnPropertySymbols;\n\n if (_descriptors && !_library) {\n _redefine(ObjectProto$1, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n _wksExt.f = function (name) {\n return wrap(_wks(name));\n };\n}\n\n_export(_export.G + _export.W + _export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)_wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = _objectKeys(_wks.store), k = 0; wellKnownSymbols.length > k;) _wksDefine(wellKnownSymbols[k++]);\n\n_export(_export.S + _export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return _has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n_export(_export.S + _export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && _export(_export.S + _export.F * (!USE_NATIVE || _fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n if (it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n replacer = args[1];\n if (typeof replacer == 'function') $replacer = replacer;\n if ($replacer || !_isArray(replacer)) replacer = function (key, value) {\n if ($replacer) value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE$2][TO_PRIMITIVE] || _hide($Symbol[PROTOTYPE$2], TO_PRIMITIVE, $Symbol[PROTOTYPE$2].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\n_setToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\n_setToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\n_setToStringTag(_global.JSON, 'JSON', true);\n\n_wksDefine('asyncIterator');\n\n_wksDefine('observable');\n\nvar symbol$2 = _core.Symbol;\n\nvar symbol = createCommonjsModule(function (module) {\nmodule.exports = { \"default\": symbol$2, __esModule: true };\n});\n\nunwrapExports(symbol);\n\nvar _typeof_1 = createCommonjsModule(function (module, exports) {\nexports.__esModule = true;\n\n\n\nvar _iterator2 = _interopRequireDefault(iterator);\n\n\n\nvar _symbol2 = _interopRequireDefault(symbol);\n\nvar _typeof = typeof _symbol2.default === \"function\" && typeof _iterator2.default === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = typeof _symbol2.default === \"function\" && _typeof(_iterator2.default) === \"symbol\" ? function (obj) {\n return typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n} : function (obj) {\n return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n};\n});\n\nvar _typeof = unwrapExports(_typeof_1);\n\n// most Object methods by ES6 should accept primitives\n\n\n\nvar _objectSap = function (KEY, exec) {\n var fn = (_core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n _export(_export.S + _export.F * _fails(function () { fn(1); }), 'Object', exp);\n};\n\n// 19.1.2.14 Object.keys(O)\n\n\n\n_objectSap('keys', function () {\n return function keys(it) {\n return _objectKeys(_toObject(it));\n };\n});\n\nvar keys$1 = _core.Object.keys;\n\nvar keys = createCommonjsModule(function (module) {\nmodule.exports = { \"default\": keys$1, __esModule: true };\n});\n\nunwrapExports(keys);\n\n// 20.1.2.3 Number.isInteger(number)\n\nvar floor$1 = Math.floor;\nvar _isInteger = function isInteger(it) {\n return !_isObject(it) && isFinite(it) && floor$1(it) === it;\n};\n\n// 20.1.2.3 Number.isInteger(number)\n\n\n_export(_export.S, 'Number', { isInteger: _isInteger });\n\nvar isInteger$2 = _core.Number.isInteger;\n\nvar isInteger$1 = createCommonjsModule(function (module) {\nmodule.exports = { \"default\": isInteger$2, __esModule: true };\n});\n\nunwrapExports(isInteger$1);\n\nvar _stringWs = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n\nvar space = '[' + _stringWs + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = _fails(function () {\n return !!_stringWs[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : _stringWs[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n _export(_export.P + _export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(_defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nvar _stringTrim = exporter;\n\nvar $parseFloat = _global.parseFloat;\nvar $trim = _stringTrim.trim;\n\nvar _parseFloat$3 = 1 / $parseFloat(_stringWs + '-0') !== -Infinity ? function parseFloat(str) {\n var string = $trim(String(str), 3);\n var result = $parseFloat(string);\n return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n\n// 20.1.2.12 Number.parseFloat(string)\n_export(_export.S + _export.F * (Number.parseFloat != _parseFloat$3), 'Number', { parseFloat: _parseFloat$3 });\n\nvar _parseFloat$1 = parseFloat;\n\nvar _parseFloat = createCommonjsModule(function (module) {\nmodule.exports = { \"default\": _parseFloat$1, __esModule: true };\n});\n\nunwrapExports(_parseFloat);\n\n/**\n * toxic-predicate-functions v0.1.5\n * (c) 2017 toxic-johann\n * Released under MIT\n */\n\n/**\n * is void element or not ? Means it will return true when val is undefined or null\n */\nfunction isVoid(obj) {\n return obj === undefined || obj === null;\n}\n/**\n * to check whether a variable is array\n */\nfunction isArray$1(arr) {\n return Array.isArray(arr);\n}\n\n/**\n * is it a function or not\n */\nfunction isFunction(obj) {\n return typeof obj === 'function';\n}\n\n/**\n * is it an object or not\n */\nfunction isObject$1(obj) {\n // incase of arrow function and array\n return Object(obj) === obj && String(obj) === '[object Object]' && !isFunction(obj) && !isArray$1(obj);\n}\n/**\n * to tell you if it's a real number\n */\nfunction isNumber(obj) {\n return typeof obj === 'number';\n}\n/**\n * is it a string\n */\nfunction isString(str) {\n return typeof str === 'string' || str instanceof String;\n}\n/**\n * is Boolean or not\n */\nfunction isBoolean(bool) {\n return typeof bool === 'boolean';\n}\n/**\n * is Primitive type or not, whick means it will return true when data is number/string/boolean/undefined/null\n */\nfunction isPrimitive(val) {\n return isVoid(val) || isBoolean(val) || isString(val) || isNumber(val);\n}\n\n/**\n * chimee-helper-log v0.1.2\n * (c) 2017 toxic-johann\n * Released under MIT\n */\n\nfunction formatter(tag, msg) {\n if (!isString(tag)) throw new TypeError('Log\\'s method only acccept string as argument, but not ' + tag + ' in ' + (typeof tag === 'undefined' ? 'undefined' : _typeof(tag)));\n if (!isString(msg)) return '[' + Log.GLOBAL_TAG + '] > ' + tag;\n tag = Log.FORCE_GLOBAL_TAG ? Log.GLOBAL_TAG : tag || Log.GLOBAL_TAG;\n return '[' + tag + '] > ' + msg;\n}\n/**\n * Log Object\n */\n\nvar Log = function () {\n function Log() {\n _classCallCheck(this, Log);\n }\n\n _createClass(Log, null, [{\n key: 'error',\n\n /**\n * equal to console.error, output `[${tag}] > {$msg}`\n * @param {string} tag optional, the header of log \n * @param {string} msg the message\n */\n\n /**\n * @member {boolean}\n */\n\n /**\n * @member {boolean}\n */\n\n /**\n * @member {boolean}\n */\n value: function error(tag, msg) {\n if (!Log.ENABLE_ERROR) {\n return;\n }\n\n (console.error || console.warn || console.log)(formatter(tag, msg));\n }\n /**\n * equal to console.info, output `[${tag}] > {$msg}`\n * @param {string} tag optional, the header of log \n * @param {string} msg the message\n */\n\n /**\n * @member {boolean}\n */\n\n /**\n * @member {boolean}\n */\n\n /**\n * @member {boolean}\n */\n\n /**\n * @member {string}\n */\n\n }, {\n key: 'info',\n value: function info(tag, msg) {\n if (!Log.ENABLE_INFO) {\n return;\n }\n (console.info || console.log)(formatter(tag, msg));\n }\n /**\n * equal to console.warn, output `[${tag}] > {$msg}`\n * @param {string} tag optional, the header of log \n * @param {string} msg the message\n */\n\n }, {\n key: 'warn',\n value: function warn(tag, msg) {\n if (!Log.ENABLE_WARN) {\n return;\n }\n (console.warn || console.log)(formatter(tag, msg));\n }\n /**\n * equal to console.debug, output `[${tag}] > {$msg}`\n * @param {string} tag optional, the header of log \n * @param {string} msg the message\n */\n\n }, {\n key: 'debug',\n value: function debug(tag, msg) {\n if (!Log.ENABLE_DEBUG) {\n return;\n }\n (console.debug || console.log)(formatter(tag, msg));\n }\n /**\n * equal to console.verbose, output `[${tag}] > {$msg}`\n * @param {string} tag optional, the header of log \n * @param {string} msg the message\n */\n\n }, {\n key: 'verbose',\n value: function verbose(tag, msg) {\n if (!Log.ENABLE_VERBOSE) {\n return;\n }\n console.log(formatter(tag, msg));\n }\n }]);\n\n return Log;\n}();\n\nLog.GLOBAL_TAG = 'chimee';\nLog.FORCE_GLOBAL_TAG = false;\nLog.ENABLE_ERROR = true;\nLog.ENABLE_INFO = true;\nLog.ENABLE_WARN = true;\nLog.ENABLE_DEBUG = true;\nLog.ENABLE_VERBOSE = true;\n\nvar uaParser = createCommonjsModule(function (module, exports) {\n/**\n * UAParser.js v0.7.17\n * Lightweight JavaScript-based User-Agent string parser\n * https://github.com/faisalman/ua-parser-js\n *\n * Copyright © 2012-2016 Faisal Salman
\n * Dual licensed under GPLv2 & MIT\n */\n\n(function (window, undefined) {\n\n var LIBVERSION = '0.7.17',\n EMPTY = '',\n UNKNOWN = '?',\n FUNC_TYPE = 'function',\n UNDEF_TYPE = 'undefined',\n OBJ_TYPE = 'object',\n STR_TYPE = 'string',\n MAJOR = 'major', // deprecated\n MODEL = 'model',\n NAME = 'name',\n TYPE = 'type',\n VENDOR = 'vendor',\n VERSION = 'version',\n ARCHITECTURE= 'architecture',\n CONSOLE = 'console',\n MOBILE = 'mobile',\n TABLET = 'tablet',\n SMARTTV = 'smarttv',\n WEARABLE = 'wearable',\n EMBEDDED = 'embedded';\n\n\n ///////////\n // Helper\n //////////\n\n\n var util = {\n extend : function (regexes, extensions) {\n var margedRegexes = {};\n for (var i in regexes) {\n if (extensions[i] && extensions[i].length % 2 === 0) {\n margedRegexes[i] = extensions[i].concat(regexes[i]);\n } else {\n margedRegexes[i] = regexes[i];\n }\n }\n return margedRegexes;\n },\n has : function (str1, str2) {\n if (typeof str1 === \"string\") {\n return str2.toLowerCase().indexOf(str1.toLowerCase()) !== -1;\n } else {\n return false;\n }\n },\n lowerize : function (str) {\n return str.toLowerCase();\n },\n major : function (version) {\n return typeof(version) === STR_TYPE ? version.replace(/[^\\d\\.]/g,'').split(\".\")[0] : undefined;\n },\n trim : function (str) {\n return str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n }\n };\n\n\n ///////////////\n // Map helper\n //////////////\n\n\n var mapper = {\n\n rgx : function (ua, arrays) {\n\n //var result = {},\n var i = 0, j, k, p, q, matches, match;//, args = arguments;\n\n /*// construct object barebones\n for (p = 0; p < args[1].length; p++) {\n q = args[1][p];\n result[typeof q === OBJ_TYPE ? q[0] : q] = undefined;\n }*/\n\n // loop through all regexes maps\n while (i < arrays.length && !matches) {\n\n var regex = arrays[i], // even sequence (0,2,4,..)\n props = arrays[i + 1]; // odd sequence (1,3,5,..)\n j = k = 0;\n\n // try matching uastring with regexes\n while (j < regex.length && !matches) {\n\n matches = regex[j++].exec(ua);\n\n if (!!matches) {\n for (p = 0; p < props.length; p++) {\n match = matches[++k];\n q = props[p];\n // check if given property is actually array\n if (typeof q === OBJ_TYPE && q.length > 0) {\n if (q.length == 2) {\n if (typeof q[1] == FUNC_TYPE) {\n // assign modified match\n this[q[0]] = q[1].call(this, match);\n } else {\n // assign given value, ignore regex match\n this[q[0]] = q[1];\n }\n } else if (q.length == 3) {\n // check whether function or regex\n if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {\n // call function (usually string mapper)\n this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;\n } else {\n // sanitize match using given regex\n this[q[0]] = match ? match.replace(q[1], q[2]) : undefined;\n }\n } else if (q.length == 4) {\n this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;\n }\n } else {\n this[q] = match ? match : undefined;\n }\n }\n }\n }\n i += 2;\n }\n // console.log(this);\n //return this;\n },\n\n str : function (str, map) {\n\n for (var i in map) {\n // check if array\n if (typeof map[i] === OBJ_TYPE && map[i].length > 0) {\n for (var j = 0; j < map[i].length; j++) {\n if (util.has(map[i][j], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n } else if (util.has(map[i], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n return str;\n }\n };\n\n\n ///////////////\n // String map\n //////////////\n\n\n var maps = {\n\n browser : {\n oldsafari : {\n version : {\n '1.0' : '/8',\n '1.2' : '/1',\n '1.3' : '/3',\n '2.0' : '/412',\n '2.0.2' : '/416',\n '2.0.3' : '/417',\n '2.0.4' : '/419',\n '?' : '/'\n }\n }\n },\n\n device : {\n amazon : {\n model : {\n 'Fire Phone' : ['SD', 'KF']\n }\n },\n sprint : {\n model : {\n 'Evo Shift 4G' : '7373KT'\n },\n vendor : {\n 'HTC' : 'APA',\n 'Sprint' : 'Sprint'\n }\n }\n },\n\n os : {\n windows : {\n version : {\n 'ME' : '4.90',\n 'NT 3.11' : 'NT3.51',\n 'NT 4.0' : 'NT4.0',\n '2000' : 'NT 5.0',\n 'XP' : ['NT 5.1', 'NT 5.2'],\n 'Vista' : 'NT 6.0',\n '7' : 'NT 6.1',\n '8' : 'NT 6.2',\n '8.1' : 'NT 6.3',\n '10' : ['NT 6.4', 'NT 10.0'],\n 'RT' : 'ARM'\n }\n }\n }\n };\n\n\n //////////////\n // Regex map\n /////////////\n\n\n var regexes = {\n\n browser : [[\n\n // Presto based\n /(opera\\smini)\\/([\\w\\.-]+)/i, // Opera Mini\n /(opera\\s[mobiletab]+).+version\\/([\\w\\.-]+)/i, // Opera Mobi/Tablet\n /(opera).+version\\/([\\w\\.]+)/i, // Opera > 9.80\n /(opera)[\\/\\s]+([\\w\\.]+)/i // Opera < 9.80\n ], [NAME, VERSION], [\n\n /(opios)[\\/\\s]+([\\w\\.]+)/i // Opera mini on iphone >= 8.0\n ], [[NAME, 'Opera Mini'], VERSION], [\n\n /\\s(opr)\\/([\\w\\.]+)/i // Opera Webkit\n ], [[NAME, 'Opera'], VERSION], [\n\n // Mixed\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(lunascape|maxthon|netfront|jasmine|blazer)[\\/\\s]?([\\w\\.]+)*/i,\n // Lunascape/Maxthon/Netfront/Jasmine/Blazer\n\n // Trident based\n /(avant\\s|iemobile|slim|baidu)(?:browser)?[\\/\\s]?([\\w\\.]*)/i,\n // Avant/IEMobile/SlimBrowser/Baidu\n /(?:ms|\\()(ie)\\s([\\w\\.]+)/i, // Internet Explorer\n\n // Webkit/KHTML based\n /(rekonq)\\/([\\w\\.]+)*/i, // Rekonq\n /(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser)\\/([\\w\\.-]+)/i\n // Chromium/Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser\n ], [NAME, VERSION], [\n\n /(trident).+rv[:\\s]([\\w\\.]+).+like\\sgecko/i // IE11\n ], [[NAME, 'IE'], VERSION], [\n\n /(edge)\\/((\\d+)?[\\w\\.]+)/i // Microsoft Edge\n ], [NAME, VERSION], [\n\n /(yabrowser)\\/([\\w\\.]+)/i // Yandex\n ], [[NAME, 'Yandex'], VERSION], [\n\n /(puffin)\\/([\\w\\.]+)/i // Puffin\n ], [[NAME, 'Puffin'], VERSION], [\n\n /((?:[\\s\\/])uc?\\s?browser|(?:juc.+)ucweb)[\\/\\s]?([\\w\\.]+)/i\n // UCBrowser\n ], [[NAME, 'UCBrowser'], VERSION], [\n\n /(comodo_dragon)\\/([\\w\\.]+)/i // Comodo Dragon\n ], [[NAME, /_/g, ' '], VERSION], [\n\n /(micromessenger)\\/([\\w\\.]+)/i // WeChat\n ], [[NAME, 'WeChat'], VERSION], [\n\n /(QQ)\\/([\\d\\.]+)/i // QQ, aka ShouQ\n ], [NAME, VERSION], [\n\n /m?(qqbrowser)[\\/\\s]?([\\w\\.]+)/i // QQBrowser\n ], [NAME, VERSION], [\n\n /xiaomi\\/miuibrowser\\/([\\w\\.]+)/i // MIUI Browser\n ], [VERSION, [NAME, 'MIUI Browser']], [\n\n /;fbav\\/([\\w\\.]+);/i // Facebook App for iOS & Android\n ], [VERSION, [NAME, 'Facebook']], [\n\n /headlesschrome(?:\\/([\\w\\.]+)|\\s)/i // Chrome Headless\n ], [VERSION, [NAME, 'Chrome Headless']], [\n\n /\\swv\\).+(chrome)\\/([\\w\\.]+)/i // Chrome WebView\n ], [[NAME, /(.+)/, '$1 WebView'], VERSION], [\n\n /((?:oculus|samsung)browser)\\/([\\w\\.]+)/i\n ], [[NAME, /(.+(?:g|us))(.+)/, '$1 $2'], VERSION], [ // Oculus / Samsung Browser\n\n /android.+version\\/([\\w\\.]+)\\s+(?:mobile\\s?safari|safari)*/i // Android Browser\n ], [VERSION, [NAME, 'Android Browser']], [\n\n /(chrome|omniweb|arora|[tizenoka]{5}\\s?browser)\\/v?([\\w\\.]+)/i\n // Chrome/OmniWeb/Arora/Tizen/Nokia\n ], [NAME, VERSION], [\n\n /(dolfin)\\/([\\w\\.]+)/i // Dolphin\n ], [[NAME, 'Dolphin'], VERSION], [\n\n /((?:android.+)crmo|crios)\\/([\\w\\.]+)/i // Chrome for Android/iOS\n ], [[NAME, 'Chrome'], VERSION], [\n\n /(coast)\\/([\\w\\.]+)/i // Opera Coast\n ], [[NAME, 'Opera Coast'], VERSION], [\n\n /fxios\\/([\\w\\.-]+)/i // Firefox for iOS\n ], [VERSION, [NAME, 'Firefox']], [\n\n /version\\/([\\w\\.]+).+?mobile\\/\\w+\\s(safari)/i // Mobile Safari\n ], [VERSION, [NAME, 'Mobile Safari']], [\n\n /version\\/([\\w\\.]+).+?(mobile\\s?safari|safari)/i // Safari & Safari Mobile\n ], [VERSION, NAME], [\n\n /webkit.+?(gsa)\\/([\\w\\.]+).+?(mobile\\s?safari|safari)(\\/[\\w\\.]+)/i // Google Search Appliance on iOS\n ], [[NAME, 'GSA'], VERSION], [\n\n /webkit.+?(mobile\\s?safari|safari)(\\/[\\w\\.]+)/i // Safari < 3.0\n ], [NAME, [VERSION, mapper.str, maps.browser.oldsafari.version]], [\n\n /(konqueror)\\/([\\w\\.]+)/i, // Konqueror\n /(webkit|khtml)\\/([\\w\\.]+)/i\n ], [NAME, VERSION], [\n\n // Gecko based\n /(navigator|netscape)\\/([\\w\\.-]+)/i // Netscape\n ], [[NAME, 'Netscape'], VERSION], [\n /(swiftfox)/i, // Swiftfox\n /(icedragon|iceweasel|camino|chimera|fennec|maemo\\sbrowser|minimo|conkeror)[\\/\\s]?([\\w\\.\\+]+)/i,\n // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror\n /(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix)\\/([\\w\\.-]+)/i,\n // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix\n /(mozilla)\\/([\\w\\.]+).+rv\\:.+gecko\\/\\d+/i, // Mozilla\n\n // Other\n /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir)[\\/\\s]?([\\w\\.]+)/i,\n // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir\n /(links)\\s\\(([\\w\\.]+)/i, // Links\n /(gobrowser)\\/?([\\w\\.]+)*/i, // GoBrowser\n /(ice\\s?browser)\\/v?([\\w\\._]+)/i, // ICE Browser\n /(mosaic)[\\/\\s]([\\w\\.]+)/i // Mosaic\n ], [NAME, VERSION]\n\n /* /////////////////////\n // Media players BEGIN\n ////////////////////////\n\n , [\n\n /(apple(?:coremedia|))\\/((\\d+)[\\w\\._]+)/i, // Generic Apple CoreMedia\n /(coremedia) v((\\d+)[\\w\\._]+)/i\n ], [NAME, VERSION], [\n\n /(aqualung|lyssna|bsplayer)\\/((\\d+)?[\\w\\.-]+)/i // Aqualung/Lyssna/BSPlayer\n ], [NAME, VERSION], [\n\n /(ares|ossproxy)\\s((\\d+)[\\w\\.-]+)/i // Ares/OSSProxy\n ], [NAME, VERSION], [\n\n /(audacious|audimusicstream|amarok|bass|core|dalvik|gnomemplayer|music on console|nsplayer|psp-internetradioplayer|videos)\\/((\\d+)[\\w\\.-]+)/i,\n // Audacious/AudiMusicStream/Amarok/BASS/OpenCORE/Dalvik/GnomeMplayer/MoC\n // NSPlayer/PSP-InternetRadioPlayer/Videos\n /(clementine|music player daemon)\\s((\\d+)[\\w\\.-]+)/i, // Clementine/MPD\n /(lg player|nexplayer)\\s((\\d+)[\\d\\.]+)/i,\n /player\\/(nexplayer|lg player)\\s((\\d+)[\\w\\.-]+)/i // NexPlayer/LG Player\n ], [NAME, VERSION], [\n /(nexplayer)\\s((\\d+)[\\w\\.-]+)/i // Nexplayer\n ], [NAME, VERSION], [\n\n /(flrp)\\/((\\d+)[\\w\\.-]+)/i // Flip Player\n ], [[NAME, 'Flip Player'], VERSION], [\n\n /(fstream|nativehost|queryseekspider|ia-archiver|facebookexternalhit)/i\n // FStream/NativeHost/QuerySeekSpider/IA Archiver/facebookexternalhit\n ], [NAME], [\n\n /(gstreamer) souphttpsrc (?:\\([^\\)]+\\)){0,1} libsoup\\/((\\d+)[\\w\\.-]+)/i\n // Gstreamer\n ], [NAME, VERSION], [\n\n /(htc streaming player)\\s[\\w_]+\\s\\/\\s((\\d+)[\\d\\.]+)/i, // HTC Streaming Player\n /(java|python-urllib|python-requests|wget|libcurl)\\/((\\d+)[\\w\\.-_]+)/i,\n // Java/urllib/requests/wget/cURL\n /(lavf)((\\d+)[\\d\\.]+)/i // Lavf (FFMPEG)\n ], [NAME, VERSION], [\n\n /(htc_one_s)\\/((\\d+)[\\d\\.]+)/i // HTC One S\n ], [[NAME, /_/g, ' '], VERSION], [\n\n /(mplayer)(?:\\s|\\/)(?:(?:sherpya-){0,1}svn)(?:-|\\s)(r\\d+(?:-\\d+[\\w\\.-]+){0,1})/i\n // MPlayer SVN\n ], [NAME, VERSION], [\n\n /(mplayer)(?:\\s|\\/|[unkow-]+)((\\d+)[\\w\\.-]+)/i // MPlayer\n ], [NAME, VERSION], [\n\n /(mplayer)/i, // MPlayer (no other info)\n /(yourmuze)/i, // YourMuze\n /(media player classic|nero showtime)/i // Media Player Classic/Nero ShowTime\n ], [NAME], [\n\n /(nero (?:home|scout))\\/((\\d+)[\\w\\.-]+)/i // Nero Home/Nero Scout\n ], [NAME, VERSION], [\n\n /(nokia\\d+)\\/((\\d+)[\\w\\.-]+)/i // Nokia\n ], [NAME, VERSION], [\n\n /\\s(songbird)\\/((\\d+)[\\w\\.-]+)/i // Songbird/Philips-Songbird\n ], [NAME, VERSION], [\n\n /(winamp)3 version ((\\d+)[\\w\\.-]+)/i, // Winamp\n /(winamp)\\s((\\d+)[\\w\\.-]+)/i,\n /(winamp)mpeg\\/((\\d+)[\\w\\.-]+)/i\n ], [NAME, VERSION], [\n\n /(ocms-bot|tapinradio|tunein radio|unknown|winamp|inlight radio)/i // OCMS-bot/tap in radio/tunein/unknown/winamp (no other info)\n // inlight radio\n ], [NAME], [\n\n /(quicktime|rma|radioapp|radioclientapplication|soundtap|totem|stagefright|streamium)\\/((\\d+)[\\w\\.-]+)/i\n // QuickTime/RealMedia/RadioApp/RadioClientApplication/\n // SoundTap/Totem/Stagefright/Streamium\n ], [NAME, VERSION], [\n\n /(smp)((\\d+)[\\d\\.]+)/i // SMP\n ], [NAME, VERSION], [\n\n /(vlc) media player - version ((\\d+)[\\w\\.]+)/i, // VLC Videolan\n /(vlc)\\/((\\d+)[\\w\\.-]+)/i,\n /(xbmc|gvfs|xine|xmms|irapp)\\/((\\d+)[\\w\\.-]+)/i, // XBMC/gvfs/Xine/XMMS/irapp\n /(foobar2000)\\/((\\d+)[\\d\\.]+)/i, // Foobar2000\n /(itunes)\\/((\\d+)[\\d\\.]+)/i // iTunes\n ], [NAME, VERSION], [\n\n /(wmplayer)\\/((\\d+)[\\w\\.-]+)/i, // Windows Media Player\n /(windows-media-player)\\/((\\d+)[\\w\\.-]+)/i\n ], [[NAME, /-/g, ' '], VERSION], [\n\n /windows\\/((\\d+)[\\w\\.-]+) upnp\\/[\\d\\.]+ dlnadoc\\/[\\d\\.]+ (home media server)/i\n // Windows Media Server\n ], [VERSION, [NAME, 'Windows']], [\n\n /(com\\.riseupradioalarm)\\/((\\d+)[\\d\\.]*)/i // RiseUP Radio Alarm\n ], [NAME, VERSION], [\n\n /(rad.io)\\s((\\d+)[\\d\\.]+)/i, // Rad.io\n /(radio.(?:de|at|fr))\\s((\\d+)[\\d\\.]+)/i\n ], [[NAME, 'rad.io'], VERSION]\n\n //////////////////////\n // Media players END\n ////////////////////*/\n\n ],\n\n cpu : [[\n\n /(?:(amd|x(?:(?:86|64)[_-])?|wow|win)64)[;\\)]/i // AMD64\n ], [[ARCHITECTURE, 'amd64']], [\n\n /(ia32(?=;))/i // IA32 (quicktime)\n ], [[ARCHITECTURE, util.lowerize]], [\n\n /((?:i[346]|x)86)[;\\)]/i // IA32\n ], [[ARCHITECTURE, 'ia32']], [\n\n // PocketPC mistakenly identified as PowerPC\n /windows\\s(ce|mobile);\\sppc;/i\n ], [[ARCHITECTURE, 'arm']], [\n\n /((?:ppc|powerpc)(?:64)?)(?:\\smac|;|\\))/i // PowerPC\n ], [[ARCHITECTURE, /ower/, '', util.lowerize]], [\n\n /(sun4\\w)[;\\)]/i // SPARC\n ], [[ARCHITECTURE, 'sparc']], [\n\n /((?:avr32|ia64(?=;))|68k(?=\\))|arm(?:64|(?=v\\d+;))|(?=atmel\\s)avr|(?:irix|mips|sparc)(?:64)?(?=;)|pa-risc)/i\n // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC\n ], [[ARCHITECTURE, util.lowerize]]\n ],\n\n device : [[\n\n /\\((ipad|playbook);[\\w\\s\\);-]+(rim|apple)/i // iPad/PlayBook\n ], [MODEL, VENDOR, [TYPE, TABLET]], [\n\n /applecoremedia\\/[\\w\\.]+ \\((ipad)/ // iPad\n ], [MODEL, [VENDOR, 'Apple'], [TYPE, TABLET]], [\n\n /(apple\\s{0,1}tv)/i // Apple TV\n ], [[MODEL, 'Apple TV'], [VENDOR, 'Apple']], [\n\n /(archos)\\s(gamepad2?)/i, // Archos\n /(hp).+(touchpad)/i, // HP TouchPad\n /(hp).+(tablet)/i, // HP Tablet\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /\\s(nook)[\\w\\s]+build\\/(\\w+)/i, // Nook\n /(dell)\\s(strea[kpr\\s\\d]*[\\dko])/i // Dell Streak\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /(kf[A-z]+)\\sbuild\\/[\\w\\.]+.*silk\\//i // Kindle Fire HD\n ], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [\n /(sd|kf)[0349hijorstuw]+\\sbuild\\/[\\w\\.]+.*silk\\//i // Fire Phone\n ], [[MODEL, mapper.str, maps.device.amazon.model], [VENDOR, 'Amazon'], [TYPE, MOBILE]], [\n\n /\\((ip[honed|\\s\\w*]+);.+(apple)/i // iPod/iPhone\n ], [MODEL, VENDOR, [TYPE, MOBILE]], [\n /\\((ip[honed|\\s\\w*]+);/i // iPod/iPhone\n ], [MODEL, [VENDOR, 'Apple'], [TYPE, MOBILE]], [\n\n /(blackberry)[\\s-]?(\\w+)/i, // BlackBerry\n /(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[\\s_-]?([\\w-]+)*/i,\n // BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron\n /(hp)\\s([\\w\\s]+\\w)/i, // HP iPAQ\n /(asus)-?(\\w+)/i // Asus\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n /\\(bb10;\\s(\\w+)/i // BlackBerry 10\n ], [MODEL, [VENDOR, 'BlackBerry'], [TYPE, MOBILE]], [\n // Asus Tablets\n /android.+(transfo[prime\\s]{4,10}\\s\\w+|eeepc|slider\\s\\w+|nexus 7|padfone)/i\n ], [MODEL, [VENDOR, 'Asus'], [TYPE, TABLET]], [\n\n /(sony)\\s(tablet\\s[ps])\\sbuild\\//i, // Sony\n /(sony)?(?:sgp.+)\\sbuild\\//i\n ], [[VENDOR, 'Sony'], [MODEL, 'Xperia Tablet'], [TYPE, TABLET]], [\n /android.+\\s([c-g]\\d{4}|so[-l]\\w+)\\sbuild\\//i\n ], [MODEL, [VENDOR, 'Sony'], [TYPE, MOBILE]], [\n\n /\\s(ouya)\\s/i, // Ouya\n /(nintendo)\\s([wids3u]+)/i // Nintendo\n ], [VENDOR, MODEL, [TYPE, CONSOLE]], [\n\n /android.+;\\s(shield)\\sbuild/i // Nvidia\n ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [\n\n /(playstation\\s[34portablevi]+)/i // Playstation\n ], [MODEL, [VENDOR, 'Sony'], [TYPE, CONSOLE]], [\n\n /(sprint\\s(\\w+))/i // Sprint Phones\n ], [[VENDOR, mapper.str, maps.device.sprint.vendor], [MODEL, mapper.str, maps.device.sprint.model], [TYPE, MOBILE]], [\n\n /(lenovo)\\s?(S(?:5000|6000)+(?:[-][\\w+]))/i // Lenovo tablets\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /(htc)[;_\\s-]+([\\w\\s]+(?=\\))|\\w+)*/i, // HTC\n /(zte)-(\\w+)*/i, // ZTE\n /(alcatel|geeksphone|lenovo|nexian|panasonic|(?=;\\s)sony)[_\\s-]?([\\w-]+)*/i\n // Alcatel/GeeksPhone/Lenovo/Nexian/Panasonic/Sony\n ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [\n\n /(nexus\\s9)/i // HTC Nexus 9\n ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [\n\n /d\\/huawei([\\w\\s-]+)[;\\)]/i,\n /(nexus\\s6p)/i // Huawei\n ], [MODEL, [VENDOR, 'Huawei'], [TYPE, MOBILE]], [\n\n /(microsoft);\\s(lumia[\\s\\w]+)/i // Microsoft Lumia\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /[\\s\\(;](xbox(?:\\sone)?)[\\s\\);]/i // Microsoft Xbox\n ], [MODEL, [VENDOR, 'Microsoft'], [TYPE, CONSOLE]], [\n /(kin\\.[onetw]{3})/i // Microsoft Kin\n ], [[MODEL, /\\./g, ' '], [VENDOR, 'Microsoft'], [TYPE, MOBILE]], [\n\n // Motorola\n /\\s(milestone|droid(?:[2-4x]|\\s(?:bionic|x2|pro|razr))?(:?\\s4g)?)[\\w\\s]+build\\//i,\n /mot[\\s-]?(\\w+)*/i,\n /(XT\\d{3,4}) build\\//i,\n /(nexus\\s6)/i\n ], [MODEL, [VENDOR, 'Motorola'], [TYPE, MOBILE]], [\n /android.+\\s(mz60\\d|xoom[\\s2]{0,2})\\sbuild\\//i\n ], [MODEL, [VENDOR, 'Motorola'], [TYPE, TABLET]], [\n\n /hbbtv\\/\\d+\\.\\d+\\.\\d+\\s+\\([\\w\\s]*;\\s*(\\w[^;]*);([^;]*)/i // HbbTV devices\n ], [[VENDOR, util.trim], [MODEL, util.trim], [TYPE, SMARTTV]], [\n\n /hbbtv.+maple;(\\d+)/i\n ], [[MODEL, /^/, 'SmartTV'], [VENDOR, 'Samsung'], [TYPE, SMARTTV]], [\n\n /\\(dtv[\\);].+(aquos)/i // Sharp\n ], [MODEL, [VENDOR, 'Sharp'], [TYPE, SMARTTV]], [\n\n /android.+((sch-i[89]0\\d|shw-m380s|gt-p\\d{4}|gt-n\\d+|sgh-t8[56]9|nexus 10))/i,\n /((SM-T\\w+))/i\n ], [[VENDOR, 'Samsung'], MODEL, [TYPE, TABLET]], [ // Samsung\n /smart-tv.+(samsung)/i\n ], [VENDOR, [TYPE, SMARTTV], MODEL], [\n /((s[cgp]h-\\w+|gt-\\w+|galaxy\\snexus|sm-\\w[\\w\\d]+))/i,\n /(sam[sung]*)[\\s-]*(\\w+-?[\\w-]*)*/i,\n /sec-((sgh\\w+))/i\n ], [[VENDOR, 'Samsung'], MODEL, [TYPE, MOBILE]], [\n\n /sie-(\\w+)*/i // Siemens\n ], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [\n\n /(maemo|nokia).*(n900|lumia\\s\\d+)/i, // Nokia\n /(nokia)[\\s_-]?([\\w-]+)*/i\n ], [[VENDOR, 'Nokia'], MODEL, [TYPE, MOBILE]], [\n\n /android\\s3\\.[\\s\\w;-]{10}(a\\d{3})/i // Acer\n ], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [\n\n /android.+([vl]k\\-?\\d{3})\\s+build/i // LG Tablet\n ], [MODEL, [VENDOR, 'LG'], [TYPE, TABLET]], [\n /android\\s3\\.[\\s\\w;-]{10}(lg?)-([06cv9]{3,4})/i // LG Tablet\n ], [[VENDOR, 'LG'], MODEL, [TYPE, TABLET]], [\n /(lg) netcast\\.tv/i // LG SmartTV\n ], [VENDOR, MODEL, [TYPE, SMARTTV]], [\n /(nexus\\s[45])/i, // LG\n /lg[e;\\s\\/-]+(\\w+)*/i,\n /android.+lg(\\-?[\\d\\w]+)\\s+build/i\n ], [MODEL, [VENDOR, 'LG'], [TYPE, MOBILE]], [\n\n /android.+(ideatab[a-z0-9\\-\\s]+)/i // Lenovo\n ], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [\n\n /linux;.+((jolla));/i // Jolla\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /((pebble))app\\/[\\d\\.]+\\s/i // Pebble\n ], [VENDOR, MODEL, [TYPE, WEARABLE]], [\n\n /android.+;\\s(oppo)\\s?([\\w\\s]+)\\sbuild/i // OPPO\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /crkey/i // Google Chromecast\n ], [[MODEL, 'Chromecast'], [VENDOR, 'Google']], [\n\n /android.+;\\s(glass)\\s\\d/i // Google Glass\n ], [MODEL, [VENDOR, 'Google'], [TYPE, WEARABLE]], [\n\n /android.+;\\s(pixel c)\\s/i // Google Pixel C\n ], [MODEL, [VENDOR, 'Google'], [TYPE, TABLET]], [\n\n /android.+;\\s(pixel xl|pixel)\\s/i // Google Pixel\n ], [MODEL, [VENDOR, 'Google'], [TYPE, MOBILE]], [\n\n /android.+(\\w+)\\s+build\\/hm\\1/i, // Xiaomi Hongmi 'numeric' models\n /android.+(hm[\\s\\-_]*note?[\\s_]*(?:\\d\\w)?)\\s+build/i, // Xiaomi Hongmi\n /android.+(mi[\\s\\-_]*(?:one|one[\\s_]plus|note lte)?[\\s_]*(?:\\d\\w)?)\\s+build/i, // Xiaomi Mi\n /android.+(redmi[\\s\\-_]*(?:note)?(?:[\\s_]*[\\w\\s]+)?)\\s+build/i // Redmi Phones\n ], [[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, MOBILE]], [\n /android.+(mi[\\s\\-_]*(?:pad)?(?:[\\s_]*[\\w\\s]+)?)\\s+build/i // Mi Pad tablets\n ],[[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, TABLET]], [\n /android.+;\\s(m[1-5]\\snote)\\sbuild/i // Meizu Tablet\n ], [MODEL, [VENDOR, 'Meizu'], [TYPE, TABLET]], [\n\n /android.+a000(1)\\s+build/i // OnePlus\n ], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [\n\n /android.+[;\\/]\\s*(RCT[\\d\\w]+)\\s+build/i // RCA Tablets\n ], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(Venue[\\d\\s]*)\\s+build/i // Dell Venue Tablets\n ], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(Q[T|M][\\d\\w]+)\\s+build/i // Verizon Tablet\n ], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s+(Barnes[&\\s]+Noble\\s+|BN[RT])(V?.*)\\s+build/i // Barnes & Noble Tablet\n ], [[VENDOR, 'Barnes & Noble'], MODEL, [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s+(TM\\d{3}.*\\b)\\s+build/i // Barnes & Noble Tablet\n ], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(zte)?.+(k\\d{2})\\s+build/i // ZTE K Series Tablet\n ], [[VENDOR, 'ZTE'], MODEL, [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(gen\\d{3})\\s+build.*49h/i // Swiss GEN Mobile\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [\n\n /android.+[;\\/]\\s*(zur\\d{3})\\s+build/i // Swiss ZUR Tablet\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*((Zeki)?TB.*\\b)\\s+build/i // Zeki Tablets\n ], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [\n\n /(android).+[;\\/]\\s+([YR]\\d{2}x?.*)\\s+build/i,\n /android.+[;\\/]\\s+(Dragon[\\-\\s]+Touch\\s+|DT)(.+)\\s+build/i // Dragon Touch Tablet\n ], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(NS-?.+)\\s+build/i // Insignia Tablets\n ], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*((NX|Next)-?.+)\\s+build/i // NextBook Tablets\n ], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(Xtreme\\_?)?(V(1[045]|2[015]|30|40|60|7[05]|90))\\s+build/i\n ], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [ // Voice Xtreme Phones\n\n /android.+[;\\/]\\s*(LVTEL\\-?)?(V1[12])\\s+build/i // LvTel Phones\n ], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [\n\n /android.+[;\\/]\\s*(V(100MD|700NA|7011|917G).*\\b)\\s+build/i // Envizen Tablets\n ], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(Le[\\s\\-]+Pan)[\\s\\-]+(.*\\b)\\s+build/i // Le Pan Tablets\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(Trio[\\s\\-]*.*)\\s+build/i // MachSpeed Tablets\n ], [MODEL, [VENDOR, 'MachSpeed'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(Trinity)[\\-\\s]*(T\\d{3})\\s+build/i // Trinity Tablets\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*TU_(1491)\\s+build/i // Rotor Tablets\n ], [MODEL, [VENDOR, 'Rotor'], [TYPE, TABLET]], [\n\n /android.+(KS(.+))\\s+build/i // Amazon Kindle Tablets\n ], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [\n\n /android.+(Gigaset)[\\s\\-]+(Q.+)\\s+build/i // Gigaset Tablets\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /\\s(tablet|tab)[;\\/]/i, // Unidentifiable Tablet\n /\\s(mobile)(?:[;\\/]|\\ssafari)/i // Unidentifiable Mobile\n ], [[TYPE, util.lowerize], VENDOR, MODEL], [\n\n /(android.+)[;\\/].+build/i // Generic Android Device\n ], [MODEL, [VENDOR, 'Generic']]\n\n\n /*//////////////////////////\n // TODO: move to string map\n ////////////////////////////\n\n /(C6603)/i // Sony Xperia Z C6603\n ], [[MODEL, 'Xperia Z C6603'], [VENDOR, 'Sony'], [TYPE, MOBILE]], [\n /(C6903)/i // Sony Xperia Z 1\n ], [[MODEL, 'Xperia Z 1'], [VENDOR, 'Sony'], [TYPE, MOBILE]], [\n\n /(SM-G900[F|H])/i // Samsung Galaxy S5\n ], [[MODEL, 'Galaxy S5'], [VENDOR, 'Samsung'], [TYPE, MOBILE]], [\n /(SM-G7102)/i // Samsung Galaxy Grand 2\n ], [[MODEL, 'Galaxy Grand 2'], [VENDOR, 'Samsung'], [TYPE, MOBILE]], [\n /(SM-G530H)/i // Samsung Galaxy Grand Prime\n ], [[MODEL, 'Galaxy Grand Prime'], [VENDOR, 'Samsung'], [TYPE, MOBILE]], [\n /(SM-G313HZ)/i // Samsung Galaxy V\n ], [[MODEL, 'Galaxy V'], [VENDOR, 'Samsung'], [TYPE, MOBILE]], [\n /(SM-T805)/i // Samsung Galaxy Tab S 10.5\n ], [[MODEL, 'Galaxy Tab S 10.5'], [VENDOR, 'Samsung'], [TYPE, TABLET]], [\n /(SM-G800F)/i // Samsung Galaxy S5 Mini\n ], [[MODEL, 'Galaxy S5 Mini'], [VENDOR, 'Samsung'], [TYPE, MOBILE]], [\n /(SM-T311)/i // Samsung Galaxy Tab 3 8.0\n ], [[MODEL, 'Galaxy Tab 3 8.0'], [VENDOR, 'Samsung'], [TYPE, TABLET]], [\n\n /(T3C)/i // Advan Vandroid T3C\n ], [MODEL, [VENDOR, 'Advan'], [TYPE, TABLET]], [\n /(ADVAN T1J\\+)/i // Advan Vandroid T1J+\n ], [[MODEL, 'Vandroid T1J+'], [VENDOR, 'Advan'], [TYPE, TABLET]], [\n /(ADVAN S4A)/i // Advan Vandroid S4A\n ], [[MODEL, 'Vandroid S4A'], [VENDOR, 'Advan'], [TYPE, MOBILE]], [\n\n /(V972M)/i // ZTE V972M\n ], [MODEL, [VENDOR, 'ZTE'], [TYPE, MOBILE]], [\n\n /(i-mobile)\\s(IQ\\s[\\d\\.]+)/i // i-mobile IQ\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n /(IQ6.3)/i // i-mobile IQ IQ 6.3\n ], [[MODEL, 'IQ 6.3'], [VENDOR, 'i-mobile'], [TYPE, MOBILE]], [\n /(i-mobile)\\s(i-style\\s[\\d\\.]+)/i // i-mobile i-STYLE\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n /(i-STYLE2.1)/i // i-mobile i-STYLE 2.1\n ], [[MODEL, 'i-STYLE 2.1'], [VENDOR, 'i-mobile'], [TYPE, MOBILE]], [\n\n /(mobiistar touch LAI 512)/i // mobiistar touch LAI 512\n ], [[MODEL, 'Touch LAI 512'], [VENDOR, 'mobiistar'], [TYPE, MOBILE]], [\n\n /////////////\n // END TODO\n ///////////*/\n\n ],\n\n engine : [[\n\n /windows.+\\sedge\\/([\\w\\.]+)/i // EdgeHTML\n ], [VERSION, [NAME, 'EdgeHTML']], [\n\n /(presto)\\/([\\w\\.]+)/i, // Presto\n /(webkit|trident|netfront|netsurf|amaya|lynx|w3m)\\/([\\w\\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m\n /(khtml|tasman|links)[\\/\\s]\\(?([\\w\\.]+)/i, // KHTML/Tasman/Links\n /(icab)[\\/\\s]([23]\\.[\\d\\.]+)/i // iCab\n ], [NAME, VERSION], [\n\n /rv\\:([\\w\\.]+).*(gecko)/i // Gecko\n ], [VERSION, NAME]\n ],\n\n os : [[\n\n // Windows based\n /microsoft\\s(windows)\\s(vista|xp)/i // Windows (iTunes)\n ], [NAME, VERSION], [\n /(windows)\\snt\\s6\\.2;\\s(arm)/i, // Windows RT\n /(windows\\sphone(?:\\sos)*)[\\s\\/]?([\\d\\.\\s]+\\w)*/i, // Windows Phone\n /(windows\\smobile|windows)[\\s\\/]?([ntce\\d\\.\\s]+\\w)/i\n ], [NAME, [VERSION, mapper.str, maps.os.windows.version]], [\n /(win(?=3|9|n)|win\\s9x\\s)([nt\\d\\.]+)/i\n ], [[NAME, 'Windows'], [VERSION, mapper.str, maps.os.windows.version]], [\n\n // Mobile/Embedded OS\n /\\((bb)(10);/i // BlackBerry 10\n ], [[NAME, 'BlackBerry'], VERSION], [\n /(blackberry)\\w*\\/?([\\w\\.]+)*/i, // Blackberry\n /(tizen)[\\/\\s]([\\w\\.]+)/i, // Tizen\n /(android|webos|palm\\sos|qnx|bada|rim\\stablet\\sos|meego|contiki)[\\/\\s-]?([\\w\\.]+)*/i,\n // Android/WebOS/Palm/QNX/Bada/RIM/MeeGo/Contiki\n /linux;.+(sailfish);/i // Sailfish OS\n ], [NAME, VERSION], [\n /(symbian\\s?os|symbos|s60(?=;))[\\/\\s-]?([\\w\\.]+)*/i // Symbian\n ], [[NAME, 'Symbian'], VERSION], [\n /\\((series40);/i // Series 40\n ], [NAME], [\n /mozilla.+\\(mobile;.+gecko.+firefox/i // Firefox OS\n ], [[NAME, 'Firefox OS'], VERSION], [\n\n // Console\n /(nintendo|playstation)\\s([wids34portablevu]+)/i, // Nintendo/Playstation\n\n // GNU/Linux based\n /(mint)[\\/\\s\\(]?(\\w+)*/i, // Mint\n /(mageia|vectorlinux)[;\\s]/i, // Mageia/VectorLinux\n /(joli|[kxln]?ubuntu|debian|[open]*suse|gentoo|(?=\\s)arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus)[\\/\\s-]?(?!chrom)([\\w\\.-]+)*/i,\n // Joli/Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware\n // Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus\n /(hurd|linux)\\s?([\\w\\.]+)*/i, // Hurd/Linux\n /(gnu)\\s?([\\w\\.]+)*/i // GNU\n ], [NAME, VERSION], [\n\n /(cros)\\s[\\w]+\\s([\\w\\.]+\\w)/i // Chromium OS\n ], [[NAME, 'Chromium OS'], VERSION],[\n\n // Solaris\n /(sunos)\\s?([\\w\\.]+\\d)*/i // Solaris\n ], [[NAME, 'Solaris'], VERSION], [\n\n // BSD based\n /\\s([frentopc-]{0,4}bsd|dragonfly)\\s?([\\w\\.]+)*/i // FreeBSD/NetBSD/OpenBSD/PC-BSD/DragonFly\n ], [NAME, VERSION],[\n\n /(haiku)\\s(\\w+)/i // Haiku\n ], [NAME, VERSION],[\n\n /cfnetwork\\/.+darwin/i,\n /ip[honead]+(?:.*os\\s([\\w]+)\\slike\\smac|;\\sopera)/i // iOS\n ], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [\n\n /(mac\\sos\\sx)\\s?([\\w\\s\\.]+\\w)*/i,\n /(macintosh|mac(?=_powerpc)\\s)/i // Mac OS\n ], [[NAME, 'Mac OS'], [VERSION, /_/g, '.']], [\n\n // Other\n /((?:open)?solaris)[\\/\\s-]?([\\w\\.]+)*/i, // Solaris\n /(aix)\\s((\\d)(?=\\.|\\)|\\s)[\\w\\.]*)*/i, // AIX\n /(plan\\s9|minix|beos|os\\/2|amigaos|morphos|risc\\sos|openvms)/i,\n // Plan9/Minix/BeOS/OS2/AmigaOS/MorphOS/RISCOS/OpenVMS\n /(unix)\\s?([\\w\\.]+)*/i // UNIX\n ], [NAME, VERSION]\n ]\n };\n\n\n /////////////////\n // Constructor\n ////////////////\n /*\n var Browser = function (name, version) {\n this[NAME] = name;\n this[VERSION] = version;\n };\n var CPU = function (arch) {\n this[ARCHITECTURE] = arch;\n };\n var Device = function (vendor, model, type) {\n this[VENDOR] = vendor;\n this[MODEL] = model;\n this[TYPE] = type;\n };\n var Engine = Browser;\n var OS = Browser;\n */\n var UAParser = function (uastring, extensions) {\n\n if (typeof uastring === 'object') {\n extensions = uastring;\n uastring = undefined;\n }\n\n if (!(this instanceof UAParser)) {\n return new UAParser(uastring, extensions).getResult();\n }\n\n var ua = uastring || ((window && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY);\n var rgxmap = extensions ? util.extend(regexes, extensions) : regexes;\n //var browser = new Browser();\n //var cpu = new CPU();\n //var device = new Device();\n //var engine = new Engine();\n //var os = new OS();\n\n this.getBrowser = function () {\n var browser = { name: undefined, version: undefined };\n mapper.rgx.call(browser, ua, rgxmap.browser);\n browser.major = util.major(browser.version); // deprecated\n return browser;\n };\n this.getCPU = function () {\n var cpu = { architecture: undefined };\n mapper.rgx.call(cpu, ua, rgxmap.cpu);\n return cpu;\n };\n this.getDevice = function () {\n var device = { vendor: undefined, model: undefined, type: undefined };\n mapper.rgx.call(device, ua, rgxmap.device);\n return device;\n };\n this.getEngine = function () {\n var engine = { name: undefined, version: undefined };\n mapper.rgx.call(engine, ua, rgxmap.engine);\n return engine;\n };\n this.getOS = function () {\n var os = { name: undefined, version: undefined };\n mapper.rgx.call(os, ua, rgxmap.os);\n return os;\n };\n this.getResult = function () {\n return {\n ua : this.getUA(),\n browser : this.getBrowser(),\n engine : this.getEngine(),\n os : this.getOS(),\n device : this.getDevice(),\n cpu : this.getCPU()\n };\n };\n this.getUA = function () {\n return ua;\n };\n this.setUA = function (uastring) {\n ua = uastring;\n //browser = new Browser();\n //cpu = new CPU();\n //device = new Device();\n //engine = new Engine();\n //os = new OS();\n return this;\n };\n return this;\n };\n\n UAParser.VERSION = LIBVERSION;\n UAParser.BROWSER = {\n NAME : NAME,\n MAJOR : MAJOR, // deprecated\n VERSION : VERSION\n };\n UAParser.CPU = {\n ARCHITECTURE : ARCHITECTURE\n };\n UAParser.DEVICE = {\n MODEL : MODEL,\n VENDOR : VENDOR,\n TYPE : TYPE,\n CONSOLE : CONSOLE,\n MOBILE : MOBILE,\n SMARTTV : SMARTTV,\n TABLET : TABLET,\n WEARABLE: WEARABLE,\n EMBEDDED: EMBEDDED\n };\n UAParser.ENGINE = {\n NAME : NAME,\n VERSION : VERSION\n };\n UAParser.OS = {\n NAME : NAME,\n VERSION : VERSION\n };\n //UAParser.Utils = util;\n\n ///////////\n // Export\n //////////\n\n\n // check js environment\n if ('object' !== UNDEF_TYPE) {\n // nodejs env\n if ('object' !== UNDEF_TYPE && module.exports) {\n exports = module.exports = UAParser;\n }\n // TODO: test!!!!!!!!\n /*\n if (require && require.main === module && process) {\n // cli\n var jsonize = function (arr) {\n var res = [];\n for (var i in arr) {\n res.push(new UAParser(arr[i]).getResult());\n }\n process.stdout.write(JSON.stringify(res, null, 2) + '\\n');\n };\n if (process.stdin.isTTY) {\n // via args\n jsonize(process.argv.slice(2));\n } else {\n // via pipe\n var str = '';\n process.stdin.on('readable', function() {\n var read = process.stdin.read();\n if (read !== null) {\n str += read;\n }\n });\n process.stdin.on('end', function () {\n jsonize(str.replace(/\\n$/, '').split('\\n'));\n });\n }\n }\n */\n exports.UAParser = UAParser;\n } else {\n // requirejs env (optional)\n if (typeof(undefined) === FUNC_TYPE && undefined.amd) {\n undefined(function () {\n return UAParser;\n });\n } else if (window) {\n // browser env\n window.UAParser = UAParser;\n }\n }\n\n // jQuery/Zepto specific (optional)\n // Note:\n // In AMD env the global scope should be kept clean, but jQuery is an exception.\n // jQuery always exports to global scope, unless jQuery.noConflict(true) is used,\n // and we should catch that.\n var $ = window && (window.jQuery || window.Zepto);\n if (typeof $ !== UNDEF_TYPE) {\n var parser = new UAParser();\n $.ua = parser.getResult();\n $.ua.get = function () {\n return parser.getUA();\n };\n $.ua.set = function (uastring) {\n parser.setUA(uastring);\n var result = parser.getResult();\n for (var prop in result) {\n $.ua[prop] = result[prop];\n }\n };\n }\n\n})(typeof window === 'object' ? window : commonjsGlobal);\n});\n\nvar uaParser_1 = uaParser.UAParser;\n\n// call something on iterator step with safe closing on error\n\nvar _iterCall = 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 (e) {\n var ret = iterator['return'];\n if (ret !== undefined) _anObject(ret.call(iterator));\n throw e;\n }\n};\n\n// check on default Array iterator\n\nvar ITERATOR$1 = _wks('iterator');\nvar ArrayProto = Array.prototype;\n\nvar _isArrayIter = function (it) {\n return it !== undefined && (_iterators.Array === it || ArrayProto[ITERATOR$1] === it);\n};\n\nvar _createProperty = function (object, index, value) {\n if (index in object) _objectDp.f(object, index, _propertyDesc(0, value));\n else object[index] = value;\n};\n\n// getting tag from 19.1.3.6 Object.prototype.toString()\n\nvar TAG$1 = _wks('toStringTag');\n// ES3 wrong here\nvar ARG = _cof(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 (e) { /* empty */ }\n};\n\nvar _classof = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG$1)) == 'string' ? T\n // builtinTag case\n : ARG ? _cof(O)\n // ES3 arguments fallback\n : (B = _cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n\nvar ITERATOR$2 = _wks('iterator');\n\nvar core_getIteratorMethod = _core.getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR$2]\n || it['@@iterator']\n || _iterators[_classof(it)];\n};\n\nvar ITERATOR$3 = _wks('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR$3]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n \n} catch (e) { /* empty */ }\n\nvar _iterDetect = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR$3]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR$3] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n\n_export(_export.S + _export.F * !_iterDetect(function (iter) { }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = _toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = core_getIteratorMethod(O);\n var length, result, step, iterator;\n if (mapping) mapfn = _ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && _isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n _createProperty(result, index, mapping ? _iterCall(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = _toLength(O.length);\n for (result = new C(length); length > index; index++) {\n _createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n\nvar from$1 = _core.Array.from;\n\nvar from = createCommonjsModule(function (module) {\nmodule.exports = { \"default\": from$1, __esModule: true };\n});\n\nvar _Array$from = unwrapExports(from);\n\nvar toConsumableArray = createCommonjsModule(function (module, exports) {\nexports.__esModule = true;\n\n\n\nvar _from2 = _interopRequireDefault(from);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n } else {\n return (0, _from2.default)(arr);\n }\n};\n});\n\nunwrapExports(toConsumableArray);\n\n/**\n * toxic-utils v0.1.6\n * (c) 2017 toxic-johann\n * Released under MIT\n */\n\n/**\n * the handler to generate an deep traversal handler\n * @param {Function} fn the function you wanna run when you reach in the deep property\n * @return {Function} the handler\n */\nfunction genTraversalHandler(fn) {\n function recursiveFn(source, target, key) {\n if (isArray$1(source) || isObject$1(source)) {\n target = isPrimitive(target) ? isObject$1(source) ? {} : [] : target;\n for (var _key in source) {\n // $FlowFixMe: support computed key here\n target[_key] = recursiveFn(source[_key], target[_key], _key);\n }\n return target;\n }\n return fn(source, target, key);\n }\n return recursiveFn;\n}\nvar _deepAssign = genTraversalHandler(function (val) {\n return val;\n});\n/**\n * merge multiple objects\n * @param {...Object} args [description]\n * @return {merge-object} [description]\n */\nfunction deepAssign() {\n for (var _len = arguments.length, args = Array(_len), _key2 = 0; _key2 < _len; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n if (args.length < 2) {\n throw new Error('deepAssign accept two and more argument');\n }\n for (var i = args.length - 1; i > -1; i--) {\n if (isPrimitive(args[i])) {\n throw new TypeError('deepAssign only accept non primitive type');\n }\n }\n var target = args.shift();\n args.forEach(function (source) {\n return _deepAssign(source, target);\n });\n return target;\n}\n\nvar _anInstance = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n\nvar _forOf = createCommonjsModule(function (module) {\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : core_getIteratorMethod(iterable);\n var f = _ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (_isArrayIter(iterFn)) for (length = _toLength(iterable.length); length > index; index++) {\n result = entries ? f(_anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = _iterCall(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n});\n\n// 7.3.20 SpeciesConstructor(O, defaultConstructor)\n\n\nvar SPECIES = _wks('species');\nvar _speciesConstructor = function (O, D) {\n var C = _anObject(O).constructor;\n var S;\n return C === undefined || (S = _anObject(C)[SPECIES]) == undefined ? D : _aFunction(S);\n};\n\n// fast apply, http://jsperf.lnkit.com/fast-apply/5\nvar _invoke = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n\nvar process$1 = _global.process;\nvar setTask = _global.setImmediate;\nvar clearTask = _global.clearImmediate;\nvar MessageChannel = _global.MessageChannel;\nvar Dispatch = _global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer;\nvar channel;\nvar port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n _invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (_cof(process$1) == 'process') {\n defer = function (id) {\n process$1.nextTick(_ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(_ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = _ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (_global.addEventListener && typeof postMessage == 'function' && !_global.importScripts) {\n defer = function (id) {\n _global.postMessage(id + '', '*');\n };\n _global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in _domCreate('script')) {\n defer = function (id) {\n _html.appendChild(_domCreate('script'))[ONREADYSTATECHANGE] = function () {\n _html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(_ctx(run, id, 1), 0);\n };\n }\n}\nvar _task = {\n set: setTask,\n clear: clearTask\n};\n\nvar macrotask = _task.set;\nvar Observer = _global.MutationObserver || _global.WebKitMutationObserver;\nvar process$2 = _global.process;\nvar Promise = _global.Promise;\nvar isNode$2 = _cof(process$2) == 'process';\n\nvar _microtask = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode$2 && (parent = process$2.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode$2) {\n notify = function () {\n process$2.nextTick(flush);\n };\n // browsers with MutationObserver\n } else if (Observer) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(_global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n\n// 25.4.1.5 NewPromiseCapability(C)\n\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = _aFunction(resolve);\n this.reject = _aFunction(reject);\n}\n\nvar f$7 = function (C) {\n return new PromiseCapability(C);\n};\n\nvar _newPromiseCapability = {\n\tf: f$7\n};\n\nvar _perform = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n\nvar _promiseResolve = function (C, x) {\n _anObject(C);\n if (_isObject(x) && x.constructor === C) return x;\n var promiseCapability = _newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n\nvar _redefineAll = function (target, src, safe) {\n for (var key in src) {\n if (safe && target[key]) target[key] = src[key];\n else _hide(target, key, src[key]);\n } return target;\n};\n\nvar SPECIES$1 = _wks('species');\n\nvar _setSpecies = function (KEY) {\n var C = typeof _core[KEY] == 'function' ? _core[KEY] : _global[KEY];\n if (_descriptors && C && !C[SPECIES$1]) _objectDp.f(C, SPECIES$1, {\n configurable: true,\n get: function () { return this; }\n });\n};\n\nvar task = _task.set;\nvar microtask = _microtask();\n\n\n\nvar PROMISE = 'Promise';\nvar TypeError$1 = _global.TypeError;\nvar process = _global.process;\nvar $Promise = _global[PROMISE];\nvar isNode$1 = _classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal;\nvar newGenericPromiseCapability;\nvar OwnPromiseCapability;\nvar Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = _newPromiseCapability.f;\n\nvar USE_NATIVE$1 = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[_wks('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode$1 || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return _isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError$1('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(_global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = _perform(function () {\n if (isNode$1) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = _global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = _global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode$1 || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n if (promise._h == 1) return false;\n var chain = promise._a || promise._c;\n var i = 0;\n var reaction;\n while (chain.length > i) {\n reaction = chain[i++];\n if (reaction.fail || !isUnhandled(reaction.promise)) return false;\n } return true;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(_global, function () {\n var handler;\n if (isNode$1) {\n process.emit('rejectionHandled', promise);\n } else if (handler = _global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError$1(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, _ctx($resolve, wrapper, 1), _ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE$1) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n _anInstance(this, $Promise, PROMISE, '_h');\n _aFunction(executor);\n Internal.call(this);\n try {\n executor(_ctx($resolve, this, 1), _ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = _redefineAll($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(_speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode$1 ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = _ctx($resolve, promise, 1);\n this.reject = _ctx($reject, promise, 1);\n };\n _newPromiseCapability.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n_export(_export.G + _export.W + _export.F * !USE_NATIVE$1, { Promise: $Promise });\n_setToStringTag($Promise, PROMISE);\n_setSpecies(PROMISE);\nWrapper = _core[PROMISE];\n\n// statics\n_export(_export.S + _export.F * !USE_NATIVE$1, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n_export(_export.S + _export.F * (_library || !USE_NATIVE$1), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return _promiseResolve(_library && this === Wrapper ? $Promise : this, x);\n }\n});\n_export(_export.S + _export.F * !(USE_NATIVE$1 && _iterDetect(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = _perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n _forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = _perform(function () {\n _forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n\n_export(_export.P + _export.R, 'Promise', { 'finally': function (onFinally) {\n var C = _speciesConstructor(this, _core.Promise || _global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return _promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return _promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n\n// https://github.com/tc39/proposal-promise-try\n\n\n\n\n_export(_export.S, 'Promise', { 'try': function (callbackfn) {\n var promiseCapability = _newPromiseCapability.f(this);\n var result = _perform(callbackfn);\n (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);\n return promiseCapability.promise;\n} });\n\nvar promise$1 = _core.Promise;\n\nvar promise = createCommonjsModule(function (module) {\nmodule.exports = { \"default\": promise$1, __esModule: true };\n});\n\nunwrapExports(promise);\n\n/**\n * chimee-helper-utils v0.2.0\n * (c) 2017 toxic-johann\n * Released under MIT\n */\n\n// ********************** judgement ************************\n/**\n * check if the code running in browser environment (not include worker env)\n * @returns {Boolean}\n */\nvar inBrowser = typeof window !== 'undefined' && Object.prototype.toString.call(window) !== '[object Object]';\n\n// requestAnimationFrame\nvar raf = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame || window.oRequestAnimationFrame || function (cb) {\n return setTimeout(cb, 17);\n};\n\n// cancelAnimationFrame\nvar caf = window.cancelAnimationFrame || window.mozCancelAnimationFrame || window.webkitCancelAnimationFrame || window.webkitCancelRequestAnimationFrame || window.msCancelAnimationFrame || window.oCancelAnimationFrame || function (id) {\n clearTimeout(id);\n};\n\n// 19.1.2.1 Object.assign(target, source, ...)\n\n\n\n\n\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nvar _objectAssign = !$assign || _fails(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = _toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = _objectGops.f;\n var isEnum = _objectPie.f;\n while (aLen > index) {\n var S = _iobject(arguments[index++]);\n var keys = getSymbols ? _objectKeys(S).concat(getSymbols(S)) : _objectKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n\n// 19.1.3.1 Object.assign(target, source)\n\n\n_export(_export.S + _export.F, 'Object', { assign: _objectAssign });\n\nvar assign$1 = _core.Object.assign;\n\nvar assign = createCommonjsModule(function (module) {\nmodule.exports = { \"default\": assign$1, __esModule: true };\n});\n\nvar _Object$assign = unwrapExports(assign);\n\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n_export(_export.S, 'Object', { create: _objectCreate });\n\nvar $Object$1 = _core.Object;\nvar create$1 = function create(P, D) {\n return $Object$1.create(P, D);\n};\n\nvar create = createCommonjsModule(function (module) {\nmodule.exports = { \"default\": create$1, __esModule: true };\n});\n\nvar _Object$create = unwrapExports(create);\n\n/**\n * chimee-helper-events v0.1.0\n * (c) 2017 toxic-johann\n * Released under MIT\n */\n\n/**\n* @module event\n* @author huzunjie\n* @description 自定义事件基础类\n*/\n\n/* 缓存事件监听方法及包装,内部数据格式:\n * targetIndex_: [ [\n * function(){ ... handler ... },\n * function(){ ... handlerWrap ... handler.apply(target, arguments) ... },\n * isOnce\n * ]]\n */\nvar _evtListenerCache = _Object$create(null);\n_evtListenerCache.count = 0;\n\n/**\n * 得到某对象的某事件类型对应的监听队列数组\n * @param {Object} target 发生事件的对象\n * @param {String} type 事件类型(这里的时间类型不只是名称,还是缓存标识,可以通过添加后缀来区分)\n * @return {Array}\n */\nfunction getEvtTypeCache(target, type) {\n\n var evtId = target.__evt_id;\n if (!evtId) {\n\n /* 设置__evt_id不可枚举 */\n Object.defineProperty(target, '__evt_id', {\n writable: true,\n enumerable: false,\n configurable: true\n });\n\n /* 空对象初始化绑定索引 */\n evtId = target.__evt_id = ++_evtListenerCache.count;\n }\n\n var typeCacheKey = evtId + '_' + type;\n var evtTypeCache = _evtListenerCache[typeCacheKey];\n if (!evtTypeCache) {\n evtTypeCache = _evtListenerCache[typeCacheKey] = [];\n }\n\n return evtTypeCache;\n}\n\n/**\n * 触发事件监听方法\n * @param {Object} target 发生事件的对象\n * @param {String} type 事件类型\n * @param {Object} eventObj 触发事件时要传回的event对象\n * @return {undefined}\n */\nfunction emitEventCache(target, type, eventObj) {\n var evt = _Object$create(null);\n evt.type = type;\n evt.target = target;\n if (eventObj) {\n _Object$assign(evt, isObject$1(eventObj) ? eventObj : { data: eventObj });\n }\n getEvtTypeCache(target, type).forEach(function (item) {\n (item[1] || item[0]).apply(target, [evt]);\n });\n}\n\n/**\n * 添加事件监听到缓存\n * @param {Object} target 发生事件的对象\n * @param {String} type 事件类型\n * @param {Function} handler 监听函数\n * @param {Boolean} isOnce 是否单次执行\n * @param {Function} handlerWrap\n * @return {undefined}\n */\nfunction addEventCache(target, type, handler) {\n var isOnce = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var handlerWrap = arguments[4];\n\n if (isFunction(isOnce) && !handlerWrap) {\n handlerWrap = isOnce;\n isOnce = undefined;\n }\n var handlers = [handler, undefined, isOnce];\n if (isOnce && !handlerWrap) {\n handlerWrap = function handlerWrap() {\n removeEventCache(target, type, handler, isOnce);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n handler.apply(target, args);\n };\n }\n if (handlerWrap) {\n handlers[1] = handlerWrap;\n }\n getEvtTypeCache(target, type).push(handlers);\n}\n\n/**\n * 移除事件监听\n * @param {Object} target 发生事件的对象\n * @param {String} type 事件类型\n * @param {Function} handler 监听函数\n * @return {undefined}\n */\nfunction removeEventCache(target, type, handler) {\n var isOnce = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n var typeCache = getEvtTypeCache(target, type);\n\n if (handler || isOnce) {\n /* 有指定 handler 则清除对应监听 */\n var handlerId = -1;\n var handlerWrap = void 0;\n typeCache.find(function (item, i) {\n if ((!handler || item[0] === handler) && (!isOnce || item[2])) {\n handlerId = i;\n handlerWrap = item[1];\n return true;\n }\n });\n if (handlerId !== -1) {\n typeCache.splice(handlerId, 1);\n }\n return handlerWrap;\n } else {\n /* 未指定 handler 则清除type对应的所有监听 */\n typeCache.length = 0;\n }\n}\n\n/**\n * @class CustEvent\n * @description\n * Event 自定义事件类\n * 1. 可以使用不传参得到的实例作为eventBus使用\n * 2. 可以通过指定target,用多个实例操作同一target对象的事件管理\n * 3. 当设定target时,可以通过设置assign为true,来给target实现\"on\\once\\off\\emit\"方法\n * @param {Object} target 发生事件的对象(空则默认为event实例)\n * @param {Boolean} assign 是否将\"on\\once\\off\\emit\"方法实现到target对象上\n * @return {event}\n */\nvar CustEvent = function () {\n function CustEvent(target, assign$$1) {\n var _this = this;\n\n _classCallCheck(this, CustEvent);\n\n /* 设置__target不可枚举 */\n Object.defineProperty(this, '__target', {\n writable: true,\n enumerable: false,\n configurable: true\n });\n this.__target = this;\n\n if (target) {\n\n if ((typeof target === 'undefined' ? 'undefined' : _typeof(target)) !== 'object') {\n throw new Error('CusEvent target are not object');\n }\n this.__target = target;\n\n /* 为target实现on\\once\\off\\emit */\n if (assign$$1) {\n ['on', 'once', 'off', 'emit'].forEach(function (mth) {\n target[mth] = _this[mth];\n });\n }\n }\n }\n\n /**\n * 添加事件监听\n * @param {String} type 事件类型\n * @param {Function} handler 监听函数\n * @param {Boolean} isOnce 单次监听类型\n * @return {event}\n */\n\n\n _createClass(CustEvent, [{\n key: 'on',\n value: function on(type, handler) {\n var isOnce = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n addEventCache(this.__target, type, handler, isOnce);\n return this;\n }\n\n /**\n * 添加事件监听,并且只执行一次\n * @param {String} type 事件类型\n * @param {Function} handler 监听函数\n * @return {event}\n */\n\n }, {\n key: 'once',\n value: function once(type, handler) {\n return this.on(type, handler, true);\n }\n\n /**\n * 移除事件监听\n * @param {String} type 事件类型\n * @param {Function} handler 监听函数(不指定handler则清除type对应的所有事件监听)\n * @param {Boolean} isOnce 单次监听类型\n * @return {event}\n */\n\n }, {\n key: 'off',\n value: function off(type, handler) {\n var isOnce = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n removeEventCache(this.__target, type, handler, isOnce);\n return this;\n }\n\n /**\n * 触发事件监听函数\n * @param {String} type 事件类型\n * @return {event}\n */\n\n }, {\n key: 'emit',\n value: function emit(type, data) {\n emitEventCache(this.__target, type, { data: data });\n return this;\n }\n }]);\n\n return CustEvent;\n}();\n\n/**\n * chimee-helper-dom v0.1.7\n * (c) 2017 huzunjie\n * Released under MIT\n */\n\n/**\n * chimee-helper-events v0.1.0\n * (c) 2017 toxic-johann\n * Released under MIT\n */\n\n/**\n* @module event\n* @author huzunjie\n* @description 自定义事件基础类\n*/\n\n/* 缓存事件监听方法及包装,内部数据格式:\n * targetIndex_: [ [\n * function(){ ... handler ... },\n * function(){ ... handlerWrap ... handler.apply(target, arguments) ... },\n * isOnce\n * ]]\n */\nvar _evtListenerCache$1 = _Object$create(null);\n_evtListenerCache$1.count = 0;\n\n/**\n * 得到某对象的某事件类型对应的监听队列数组\n * @param {Object} target 发生事件的对象\n * @param {String} type 事件类型(这里的时间类型不只是名称,还是缓存标识,可以通过添加后缀来区分)\n * @return {Array}\n */\nfunction getEvtTypeCache$1(target, type) {\n\n var evtId = target.__evt_id;\n if (!evtId) {\n\n /* 设置__evt_id不可枚举 */\n Object.defineProperty(target, '__evt_id', {\n writable: true,\n enumerable: false,\n configurable: true\n });\n\n /* 空对象初始化绑定索引 */\n evtId = target.__evt_id = ++_evtListenerCache$1.count;\n }\n\n var typeCacheKey = evtId + '_' + type;\n var evtTypeCache = _evtListenerCache$1[typeCacheKey];\n if (!evtTypeCache) {\n evtTypeCache = _evtListenerCache$1[typeCacheKey] = [];\n }\n\n return evtTypeCache;\n}\n\n/**\n * 触发事件监听方法\n * @param {Object} target 发生事件的对象\n * @param {String} type 事件类型\n * @param {Object} eventObj 触发事件时要传回的event对象\n * @return {undefined}\n */\nfunction emitEventCache$1(target, type, eventObj) {\n var evt = _Object$create(null);\n evt.type = type;\n evt.target = target;\n if (eventObj) {\n _Object$assign(evt, isObject$1(eventObj) ? eventObj : { data: eventObj });\n }\n getEvtTypeCache$1(target, type).forEach(function (item) {\n (item[1] || item[0]).apply(target, [evt]);\n });\n}\n\n/**\n * 添加事件监听到缓存\n * @param {Object} target 发生事件的对象\n * @param {String} type 事件类型\n * @param {Function} handler 监听函数\n * @param {Boolean} isOnce 是否单次执行\n * @param {Function} handlerWrap\n * @return {undefined}\n */\nfunction addEventCache$1(target, type, handler) {\n var isOnce = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var handlerWrap = arguments[4];\n\n if (isFunction(isOnce) && !handlerWrap) {\n handlerWrap = isOnce;\n isOnce = undefined;\n }\n var handlers = [handler, undefined, isOnce];\n if (isOnce && !handlerWrap) {\n handlerWrap = function handlerWrap() {\n removeEventCache$1(target, type, handler, isOnce);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n handler.apply(target, args);\n };\n }\n if (handlerWrap) {\n handlers[1] = handlerWrap;\n }\n getEvtTypeCache$1(target, type).push(handlers);\n}\n\n/**\n * 移除事件监听\n * @param {Object} target 发生事件的对象\n * @param {String} type 事件类型\n * @param {Function} handler 监听函数\n * @return {undefined}\n */\nfunction removeEventCache$1(target, type, handler) {\n var isOnce = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n var typeCache = getEvtTypeCache$1(target, type);\n\n if (handler || isOnce) {\n /* 有指定 handler 则清除对应监听 */\n var handlerId = -1;\n var handlerWrap = void 0;\n typeCache.find(function (item, i) {\n if ((!handler || item[0] === handler) && (!isOnce || item[2])) {\n handlerId = i;\n handlerWrap = item[1];\n return true;\n }\n });\n if (handlerId !== -1) {\n typeCache.splice(handlerId, 1);\n }\n return handlerWrap;\n } else {\n /* 未指定 handler 则清除type对应的所有监听 */\n typeCache.length = 0;\n }\n}\n\n/**\n * @class CustEvent\n * @description\n * Event 自定义事件类\n * 1. 可以使用不传参得到的实例作为eventBus使用\n * 2. 可以通过指定target,用多个实例操作同一target对象的事件管理\n * 3. 当设定target时,可以通过设置assign为true,来给target实现\"on\\once\\off\\emit\"方法\n * @param {Object} target 发生事件的对象(空则默认为event实例)\n * @param {Boolean} assign 是否将\"on\\once\\off\\emit\"方法实现到target对象上\n * @return {event}\n */\nvar CustEvent$1 = function () {\n function CustEvent(target, assign$$1) {\n var _this = this;\n\n _classCallCheck(this, CustEvent);\n\n /* 设置__target不可枚举 */\n Object.defineProperty(this, '__target', {\n writable: true,\n enumerable: false,\n configurable: true\n });\n this.__target = this;\n\n if (target) {\n\n if ((typeof target === 'undefined' ? 'undefined' : _typeof(target)) !== 'object') {\n throw new Error('CusEvent target are not object');\n }\n this.__target = target;\n\n /* 为target实现on\\once\\off\\emit */\n if (assign$$1) {\n ['on', 'once', 'off', 'emit'].forEach(function (mth) {\n target[mth] = _this[mth];\n });\n }\n }\n }\n\n /**\n * 添加事件监听\n * @param {String} type 事件类型\n * @param {Function} handler 监听函数\n * @param {Boolean} isOnce 单次监听类型\n * @return {event}\n */\n\n\n _createClass(CustEvent, [{\n key: 'on',\n value: function on(type, handler) {\n var isOnce = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n addEventCache$1(this.__target, type, handler, isOnce);\n return this;\n }\n\n /**\n * 添加事件监听,并且只执行一次\n * @param {String} type 事件类型\n * @param {Function} handler 监听函数\n * @return {event}\n */\n\n }, {\n key: 'once',\n value: function once(type, handler) {\n return this.on(type, handler, true);\n }\n\n /**\n * 移除事件监听\n * @param {String} type 事件类型\n * @param {Function} handler 监听函数(不指定handler则清除type对应的所有事件监听)\n * @param {Boolean} isOnce 单次监听类型\n * @return {event}\n */\n\n }, {\n key: 'off',\n value: function off(type, handler) {\n var isOnce = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n removeEventCache$1(this.__target, type, handler, isOnce);\n return this;\n }\n\n /**\n * 触发事件监听函数\n * @param {String} type 事件类型\n * @return {event}\n */\n\n }, {\n key: 'emit',\n value: function emit(type, data) {\n emitEventCache$1(this.__target, type, { data: data });\n return this;\n }\n }]);\n\n return CustEvent;\n}();\n\n/**\n * chimee-helper-utils v0.2.0\n * (c) 2017 toxic-johann\n * Released under MIT\n */\n\n// ********************** judgement ************************\n/**\n * check if the code running in browser environment (not include worker env)\n * @returns {Boolean}\n */\nvar inBrowser$1 = typeof window !== 'undefined' && Object.prototype.toString.call(window) !== '[object Object]';\n\n// ********************** 对象操作 ************************\n/**\n * 转变一个类数组对象为数组\n */\nfunction makeArray$1(obj) {\n return _Array$from(obj);\n}\n\n/**\n* @module dom\n* @author huzunjie\n* @description 一些常用的DOM判断及操作方法,可以使用dom.$('*')包装DOM,实现类jQuery的链式操作;当然这里的静态方法也可以直接使用。\n*/\n\nvar _divEl = document.createElement('div');\nvar _textAttrName = 'innerText';\n'textContent' in _divEl && (_textAttrName = 'textContent');\nvar _arrPrototype = Array.prototype;\n\n/**\n * 读取HTML元素属性值\n * @param {HTMLElement} el 目标元素\n * @param {String} attrName 目标属性名称\n * @return {String}\n */\nfunction getAttr(el, attrName) {\n return el.getAttribute(attrName);\n}\n\n/**\n * 设置HTML元素属性值\n * @param {HTMLElement} el 目标元素\n * @param {String} attrName 目标属性名称\n * @param {String} attrVal 目标属性值\n */\nfunction setAttr(el, attrName, attrVal) {\n if (attrVal === undefined) {\n el.removeAttribute(attrName);\n } else {\n el.setAttribute(attrName, attrVal);\n }\n}\n\n/**\n * 为HTML元素添加className\n * @param {HTMLElement} el 目标元素\n * @param {String} cls 要添加的className(多个以空格分割)\n */\nfunction addClassName(el, cls) {\n if (!cls || !(cls = cls.trim())) {\n return;\n }\n var clsArr = cls.split(/\\s+/);\n if (el.classList) {\n clsArr.forEach(function (c) {\n return el.classList.add(c);\n });\n } else {\n var curCls = ' ' + (el.className || '') + ' ';\n clsArr.forEach(function (c) {\n curCls.indexOf(' ' + c + ' ') === -1 && (curCls += ' ' + c);\n });\n el.className = curCls.trim();\n }\n}\n\n/**\n * 为HTML元素移除className\n * @param {HTMLElement} el 目标元素\n * @param {String} cls 要移除的className(多个以空格分割)\n */\nfunction removeClassName(el, cls) {\n if (!cls || !(cls = cls.trim())) {\n return;\n }\n\n var clsArr = cls.split(/\\s+/);\n if (el.classList) {\n clsArr.forEach(function (c) {\n return el.classList.remove(c);\n });\n } else {\n var curCls = ' ' + el.className + ' ';\n clsArr.forEach(function (c) {\n var tar = ' ' + c + ' ';\n while (curCls.indexOf(tar) !== -1) {\n curCls = curCls.replace(tar, ' ');\n }\n });\n el.className = curCls.trim();\n }\n}\n\n/**\n * 检查HTML元素是否已设置className\n * @param {HTMLElement} el 目标元素\n * @param {String} className 要检查的className\n * @return {Boolean}\n */\nfunction hasClassName(el, className) {\n return new RegExp('(?:^|\\\\s)' + className + '(?=\\\\s|$)').test(el.className);\n}\n\n/**\n * addEventListener 是否已支持 passive\n * @return {Boolean}\n */\nvar supportsPassive = false;\ntry {\n var opts = Object.defineProperty({}, 'passive', {\n get: function get() {\n supportsPassive = true;\n }\n });\n window.addEventListener('test', null, opts);\n} catch (e) {}\n\n/**\n * 为HTML元素移除事件监听\n * @param {HTMLElement} el 目标元素\n * @param {String} type 事件名称\n * @param {Function} handler 处理函数\n * @param {Boolean} once 是否只监听一次\n * @param {Boolean} capture 是否在捕获阶段的监听\n */\nfunction removeEvent(el, type, handler) {\n var once = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var capture = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n if (capture !== undefined && !isBoolean(capture) && supportsPassive) {\n capture = { passive: true };\n }\n if (once) {\n /* 尝试从缓存中读取包装后的方法 */\n var handlerWrap = removeEventCache$1(el, type + '_once', handler);\n if (handlerWrap) {\n handler = handlerWrap;\n }\n }\n el.removeEventListener(type, handler, capture);\n}\n\n/**\n * 为HTML元素添加事件监听\n * @param {HTMLElement} el 目标元素\n * @param {String} type 事件名称\n * @param {Function} handler 处理函数\n * @param {Boolean} once 是否只监听一次\n * @param {Boolean} capture 是否在捕获阶段监听\n */\nfunction addEvent(el, type, handler) {\n var once = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var capture = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n if (capture !== undefined && !isBoolean(capture) && supportsPassive) {\n capture = { passive: true };\n }\n if (once) {\n var oldHandler = handler;\n handler = function () {\n return function () {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n oldHandler.apply(this, args);\n removeEvent(el, type, handler, once, capture);\n };\n }();\n /* 将包装后的方法记录到缓存中 */\n addEventCache$1(el, type + '_once', oldHandler, handler);\n }\n\n el.addEventListener(type, handler, capture);\n}\n\n/**\n * 为HTML元素添加事件代理\n * @param {HTMLElement} el 目标元素\n * @param {String} selector 要被代理的元素\n * @param {String} type 事件名称\n * @param {Function} handler 处理函数\n * @param {Boolean} capture 是否在捕获阶段监听\n */\nfunction addDelegate(el, selector, type, handler) {\n var capture = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n if (capture !== undefined && !isBoolean(capture) && supportsPassive) {\n capture = { passive: true };\n }\n var handlerWrap = function handlerWrap(e) {\n var targetElsArr = findParents(e.target || e.srcElement, el, true);\n var targetElArr = query(selector, el, true);\n var retEl = void 0;\n if (targetElArr.find) {\n retEl = targetElArr.find(function (seEl) {\n return targetElsArr.find(function (tgEl) {\n return seEl === tgEl;\n });\n });\n } else {\n // Fixed IE11 Array.find not defined bug\n targetElArr.forEach(function (seEl) {\n return !retEl && targetElsArr.forEach(function (tgEl) {\n if (!retEl && seEl === tgEl) {\n retEl = tgEl;\n }\n });\n });\n }\n retEl && handler.apply(retEl, arguments);\n };\n /* 将包装后的方法记录到缓存中 */\n addEventCache$1(el, type + '_delegate_' + selector, handler, handlerWrap);\n el.addEventListener(type, handlerWrap, capture);\n}\n\n/**\n * 为HTML元素移除事件代理\n * @param {HTMLElement} el 目标元素\n * @param {String} selector 要被代理的元素\n * @param {String} type 事件名称\n * @param {Function} handler 处理函数\n * @param {Boolean} capture 是否在捕获阶段监听\n */\nfunction removeDelegate(el, selector, type, handler) {\n var capture = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n if (capture !== undefined && !isBoolean(capture) && supportsPassive) {\n capture = { passive: true };\n }\n /* 尝试从缓存中读取包装后的方法 */\n var handlerWrap = removeEventCache$1(el, type + '_delegate_' + selector, handler);\n handlerWrap && el.removeEventListener(type, handlerWrap, capture);\n}\n\n/**\n * 读取HTML元素样式值\n * @param {HTMLElement} el 目标元素\n * @param {String} key 样式key\n * @return {String}\n */\nfunction getStyle(el, key) {\n return (el.currentStyle || document.defaultView.getComputedStyle(el, null))[key] || el.style[key];\n}\n\n/**\n * 设置HTML元素样式值\n * @param {HTMLElement} el 目标元素\n * @param {String} key 样式key\n * @param {String} val 样式值\n */\nfunction setStyle(el, key, val) {\n if (isObject$1(key)) {\n for (var k in key) {\n setStyle(el, k, key[k]);\n }\n } else {\n el.style[key] = val;\n }\n}\n\n/**\n * 根据选择器查询目标元素\n * @param {String} selector 选择器,用于 querySelectorAll\n * @param {HTMLElement} container 父容器\n * @param {Boolean} toArray 强制输出为数组\n * @return {NodeList|Array}\n */\nfunction query(selector) {\n var container = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document;\n var toArray = arguments[2];\n\n var retNodeList = container.querySelectorAll(selector);\n return toArray ? _Array$from(retNodeList) : retNodeList;\n}\n\n/**\n * 从DOM树中移除el\n * @param {HTMLElement} el 目标元素\n */\nfunction removeEl(el) {\n el.parentNode.removeChild(el);\n}\n\n/**\n * 查找元素的父节点们\n * @param {HTMLElement} el 目标元素\n * @param {HTMLElement} endEl 最大父容器(不指定则找到html)\n * @param {Boolean} haveEl 包含当前元素\n * @param {Boolean} haveEndEl 包含设定的最大父容器\n */\nfunction findParents(el) {\n var endEl = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var haveEl = arguments[2];\n var haveEndEl = arguments[3];\n\n var retEls = [];\n if (haveEl) {\n retEls.push(el);\n }\n while (el && el.parentNode !== endEl) {\n el = el.parentNode;\n el && retEls.push(el);\n }\n if (haveEndEl) {\n retEls.push(endEl);\n }\n return retEls;\n}\n\n/**\n * 根据选择器查询并得到目标元素的wrap包装器\n * @param {String} selector 选择器,另外支持 HTMLString||NodeList||NodeArray||HTMLElement\n * @param {HTMLElement} container 父容器\n * @return {Object}\n */\nfunction $(selector, container) {\n return selector.constructor === NodeWrap ? selector : new NodeWrap(selector, container);\n}\n\n/**\n * @class NodeWrap\n * @description\n * NodeWrap DOM包装器,用以实现基本的链式操作\n * new dom.NodeWrap('*') 相当于 dom.$('*')\n * 这里面用于DOM操作的属性方法都是基于上面静态方法实现,有需要可以随时修改补充\n * @param {String} selector 选择器(兼容 String||HTMLString||NodeList||NodeArray||HTMLElement)\n * @param {HTMLElement} container 父容器(默认为document)\n */\n\nvar NodeWrap = function () {\n function NodeWrap(selector) {\n var container = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document;\n\n _classCallCheck(this, NodeWrap);\n\n var _this = this;\n _this.selector = selector;\n\n /* String||NodeList||HTMLElement 识别处理 */\n var elsArr = void 0;\n if (selector && selector.constructor === NodeList) {\n /* 支持直接传入NodeList来构建包装器 */\n elsArr = makeArray$1(selector);\n } else if (isArray$1(selector)) {\n /* 支持直接传入Node数组来构建包装器 */\n elsArr = selector;\n } else if (isString(selector)) {\n if (selector.indexOf('<') === 0) {\n /* 支持直接传入HTML字符串来新建DOM并构建包装器 */\n _divEl.innerHTML = selector;\n elsArr = query('*', _divEl, true);\n } else {\n /* 支持直接传入字符串选择器来查找DOM并构建包装器 */\n elsArr = query(selector, container, true);\n }\n } else {\n /* 其他任意对象直接构建包装器 */\n elsArr = [selector];\n }\n _Object$assign(_this, elsArr);\n\n /* NodeWrap本意可以 extends Array省略构造方法中下面这部分代码,但目前编译不支持 */\n _this.length = elsArr.length;\n }\n\n /**\n * 循环遍历DOM集合\n * @param {Function} fn 遍历函数 fn(item, i)\n * @return {Object}\n */\n\n\n _createClass(NodeWrap, [{\n key: 'each',\n value: function each() {\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n _arrPrototype.forEach.apply(this, args);\n return this;\n }\n }, {\n key: 'push',\n\n\n /**\n * 添加元素到DOM集合\n * @param {HTMLElement} el 要加入的元素\n * @return {this}\n */\n value: function push() {\n for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n _arrPrototype.push.apply(this, args);\n return this;\n }\n }, {\n key: 'splice',\n\n\n /**\n * 截取DOM集合片段,并得到新的包装器splice\n * @param {Nubmer} start\n * @param {Nubmer} count\n * @return {NodeWrap} 新的DOM集合包装器\n */\n value: function splice() {\n for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n return $(_arrPrototype.splice.apply(this, args));\n }\n }, {\n key: 'find',\n\n\n /**\n * 查找子元素\n * @param {String} selector 选择器\n * @return {NodeWrap} 新的DOM集合包装器\n */\n value: function find(selector) {\n var childs = [];\n this.each(function (el) {\n childs = childs.concat(query(selector, el, true));\n });\n var childsWrap = $(childs);\n childsWrap.parent = this;\n childsWrap.selector = selector;\n return childsWrap;\n }\n\n /**\n * 添加子元素\n * @param {HTMLElement} childEls 要添加的HTML元素\n * @return {this}\n */\n\n }, {\n key: 'append',\n value: function append(childEls) {\n var childsWrap = $(childEls);\n var firstEl = this[0];\n childsWrap.each(function (newEl) {\n return firstEl.appendChild(newEl);\n });\n return this;\n }\n\n /**\n * 将元素集合添加到指定容器\n * @param {HTMLElement} parentEl 要添加到父容器\n * @return {this}\n */\n\n }, {\n key: 'appendTo',\n value: function appendTo(parentEl) {\n $(parentEl).append(this);\n return this;\n }\n\n /**\n * DOM集合text内容读写操作\n * @param {String} val 文本内容(如果有设置该参数则执行写操作,否则执行读操作)\n * @return {this}\n */\n\n }, {\n key: 'text',\n value: function text(val) {\n if (arguments.length === 0) {\n return this[0][_textAttrName];\n }\n return this.each(function (el) {\n el[_textAttrName] = val;\n });\n }\n\n /**\n * DOM集合HTML内容读写操作\n * @param {String} html html内容(如果有设置该参数则执行写操作,否则执行读操作)\n * @return {this}\n */\n\n }, {\n key: 'html',\n value: function html(_html) {\n if (arguments.length === 0) {\n return this[0].innerHTML;\n }\n return this.each(function (el) {\n el.innerHTML = _html;\n });\n }\n\n /**\n * DOM集合属性读写操作\n * @param {String} name 属性名称\n * @param {String} val 属性值(如果有设置该参数则执行写操作,否则执行读操作)\n * @return {this}\n */\n\n }, {\n key: 'attr',\n value: function attr(name, val) {\n if (arguments.length === 1) {\n return getAttr(this[0], name);\n }\n return this.each(function (el) {\n return setAttr(el, name, val);\n });\n }\n\n /**\n * DOM集合dataset读写操作\n * @param {String} key 键名\n * @param {Any} val 键值(如果有设置该参数则执行写操作,否则执行读操作)\n * @return {this}\n */\n\n }, {\n key: 'data',\n value: function data(key, val) {\n if (arguments.length === 0) {\n return this[0].dataset || {};\n }\n if (arguments.length === 1) {\n return (this[0].dataset || {})[key];\n }\n return this.each(function (el) {\n (el.dataset || (el.dataset = {}))[key] = val;\n });\n }\n\n /**\n * DOM集合样式读写操作\n * @param {String} key 样式key\n * @param {String} val 样式值(如果有设置该参数则执行写操作,否则执行读操作)\n * @return {this}\n */\n\n }, {\n key: 'css',\n value: function css(key, val) {\n if (arguments.length === 1 && !isObject$1(key)) {\n return getStyle(this[0], key);\n }\n return this.each(function (el) {\n return setStyle(el, key, val);\n });\n }\n\n /**\n * 为DOM集合增加className\n * @param {String} cls 要增加的className\n * @return {this}\n */\n\n }, {\n key: 'addClass',\n value: function addClass(cls) {\n return this.each(function (el) {\n return addClassName(el, cls);\n });\n }\n\n /**\n * 移除当前DOM集合的className\n * @param {String} cls 要移除的className\n * @return {this}\n */\n\n }, {\n key: 'removeClass',\n value: function removeClass(cls) {\n return this.each(function (el) {\n return removeClassName(el, cls);\n });\n }\n\n /**\n * 检查索引0的DOM是否有className\n * @param {String} cls 要检查的className\n * @return {this}\n */\n\n }, {\n key: 'hasClass',\n value: function hasClass(cls) {\n return hasClassName(this[0], cls);\n }\n\n /**\n * 为DOM集合添加事件监听\n * @param {String} type 事件名称\n * @param {Function} handler 处理函数\n * @param {Boolean} once 是否只监听一次\n * @param {Boolean} capture 是否在捕获阶段监听\n * @return {this}\n */\n\n }, {\n key: 'on',\n value: function on(type, handler) {\n var once = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var capture = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n return this.each(function (el) {\n return addEvent(el, type, handler, once, capture);\n });\n }\n\n /**\n * 为DOM集合解除事件监听\n * @param {String} type 事件名称\n * @param {Function} handler 处理函数\n * @param {Boolean} once 是否只监听一次\n * @param {Boolean} capture 是否在捕获阶段监听\n * @return {this}\n */\n\n }, {\n key: 'off',\n value: function off(type, handler) {\n var once = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var capture = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n return this.each(function (el) {\n return removeEvent(el, type, handler, once, capture);\n });\n }\n\n /**\n * 为DOM集合绑定事件代理\n * @param {String} selector 目标子元素选择器\n * @param {String} type 事件名称\n * @param {Function} handler 处理函数\n * @param {Boolean} capture 是否在捕获阶段监听\n * @return {this}\n */\n\n }, {\n key: 'delegate',\n value: function delegate(selector, type, handler) {\n var capture = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n return this.each(function (el) {\n return addDelegate(el, selector, type, handler, capture);\n });\n }\n\n /**\n * 为DOM集合解绑事件代理\n * @param {String} selector 目标子元素选择器\n * @param {String} type 事件名称\n * @param {Function} handler 处理函数\n * @param {Boolean} capture 是否在捕获阶段监听\n * @return {this}\n */\n\n }, {\n key: 'undelegate',\n value: function undelegate(selector, type, handler) {\n var capture = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n return this.each(function (el) {\n return removeDelegate(el, selector, type, handler, capture);\n });\n }\n\n /**\n * 从DOM树中移除\n * @return {this}\n */\n\n }, {\n key: 'remove',\n value: function remove() {\n return this.each(function (el) {\n return removeEl(el);\n });\n }\n }]);\n\n return NodeWrap;\n}();\n\n/**\n * chimee-helper v0.2.8\n * (c) 2017 toxic-johann\n * Released under MIT\n */\n\n__$styleInject(\"video::-webkit-media-controls-start-playback-button{display:none}chimee-state svg{width:100%;height:100%}@-webkit-keyframes a{0%{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes a{0%{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}chimee-state{position:absolute;top:0;left:0;width:100%;height:100%;font-size:24px}chimee-state-error,chimee-state-loading,chimee-state-pause,chimee-state-play{display:none;position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}chimee-state-pause,chimee-state-play{width:2em;height:2em;-webkit-box-sizing:content-box;box-sizing:content-box;-webkit-box-sizing:initial;box-sizing:initial}chimee-state-loading{width:2em;height:2em;-webkit-transform:none;transform:none;margin:-1em;-webkit-animation:.9s a linear infinite;animation:.9s a linear infinite}chimee-state-error{display:none;font-size:16px;z-index:1;color:#ffcf00;text-shadow:0 0 3px red;font-weight:100}chimee-state.error chimee-state-error,chimee-state.loading chimee-state-loading,chimee-state.play chimee-state-play{display:inline-block}\", undefined);\n\n/**\n * chimee-plugin-gesture v0.0.12\n * (c) 2017 yandeqiang\n * Released under ISC\n */\n\nfunction unwrapExports$1 (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nfunction createCommonjsModule$1(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nvar classCallCheck$1 = createCommonjsModule$1(function (module, exports) {\nexports.__esModule = true;\n\nexports.default = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n});\n\nvar _classCallCheck$1 = unwrapExports$1(classCallCheck$1);\n\nvar _global$2 = createCommonjsModule$1(function (module) {\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n});\n\nvar _core$2 = createCommonjsModule$1(function (module) {\nvar core = module.exports = { version: '2.5.1' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n});\n\nvar _core_1$1 = _core$2.version;\n\nvar _aFunction$2 = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n\n// optional / simple context binding\n\nvar _ctx$2 = function (fn, that, length) {\n _aFunction$2(fn);\n if (that === undefined) return fn;\n switch (length) {\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\nvar _isObject$2 = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\nvar _anObject$2 = function (it) {\n if (!_isObject$2(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n\nvar _fails$2 = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n\n// Thank's IE8 for his funny defineProperty\nvar _descriptors$2 = !_fails$2(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n\nvar document$3 = _global$2.document;\n// typeof document.createElement is 'object' in old IE\nvar is$1 = _isObject$2(document$3) && _isObject$2(document$3.createElement);\nvar _domCreate$2 = function (it) {\n return is$1 ? document$3.createElement(it) : {};\n};\n\nvar _ie8DomDefine$2 = !_descriptors$2 && !_fails$2(function () {\n return Object.defineProperty(_domCreate$2('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n\n// 7.1.1 ToPrimitive(input [, PreferredType])\n\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nvar _toPrimitive$2 = function (it, S) {\n if (!_isObject$2(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !_isObject$2(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !_isObject$2(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !_isObject$2(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n\nvar dP$3 = Object.defineProperty;\n\nvar f$8 = _descriptors$2 ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n _anObject$2(O);\n P = _toPrimitive$2(P, true);\n _anObject$2(Attributes);\n if (_ie8DomDefine$2) try {\n return dP$3(O, P, Attributes);\n } catch (e) { /* 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\nvar _objectDp$2 = {\n\tf: f$8\n};\n\nvar _propertyDesc$2 = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n\nvar _hide$2 = _descriptors$2 ? function (object, key, value) {\n return _objectDp$2.f(object, key, _propertyDesc$2(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n\nvar PROTOTYPE$3 = 'prototype';\n\nvar $export$2 = function (type, name, source) {\n var IS_FORCED = type & $export$2.F;\n var IS_GLOBAL = type & $export$2.G;\n var IS_STATIC = type & $export$2.S;\n var IS_PROTO = type & $export$2.P;\n var IS_BIND = type & $export$2.B;\n var IS_WRAP = type & $export$2.W;\n var exports = IS_GLOBAL ? _core$2 : _core$2[name] || (_core$2[name] = {});\n var expProto = exports[PROTOTYPE$3];\n var target = IS_GLOBAL ? _global$2 : IS_STATIC ? _global$2[name] : (_global$2[name] || {})[PROTOTYPE$3];\n var key, own, out;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n if (own && key in exports) continue;\n // export native or passed\n out = own ? target[key] : source[key];\n // prevent global pollution for namespaces\n exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n // bind timers to global for call from export context\n : IS_BIND && own ? _ctx$2(out, _global$2)\n // wrap global constructors for prevent change them in library\n : IS_WRAP && target[key] == out ? (function (C) {\n var F = function (a, b, c) {\n if (this instanceof C) {\n switch (arguments.length) {\n case 0: return new C();\n case 1: return new C(a);\n case 2: return new C(a, b);\n } return new C(a, b, c);\n } return C.apply(this, arguments);\n };\n F[PROTOTYPE$3] = C[PROTOTYPE$3];\n return F;\n // make static versions for prototype methods\n })(out) : IS_PROTO && typeof out == 'function' ? _ctx$2(Function.call, out) : out;\n // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n if (IS_PROTO) {\n (exports.virtual || (exports.virtual = {}))[key] = out;\n // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n if (type & $export$2.R && expProto && !expProto[key]) _hide$2(expProto, key, out);\n }\n }\n};\n// type bitmap\n$export$2.F = 1; // forced\n$export$2.G = 2; // global\n$export$2.S = 4; // static\n$export$2.P = 8; // proto\n$export$2.B = 16; // bind\n$export$2.W = 32; // wrap\n$export$2.U = 64; // safe\n$export$2.R = 128; // real proto method for `library`\nvar _export$2 = $export$2;\n\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n_export$2(_export$2.S + _export$2.F * !_descriptors$2, 'Object', { defineProperty: _objectDp$2.f });\n\nvar $Object$2 = _core$2.Object;\nvar defineProperty$2$1 = function defineProperty(it, key, desc) {\n return $Object$2.defineProperty(it, key, desc);\n};\n\nvar defineProperty$5 = createCommonjsModule$1(function (module) {\nmodule.exports = { \"default\": defineProperty$2$1, __esModule: true };\n});\n\nunwrapExports$1(defineProperty$5);\n\nvar createClass$1 = createCommonjsModule$1(function (module, exports) {\nexports.__esModule = true;\n\n\n\nvar _defineProperty2 = _interopRequireDefault(defineProperty$5);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n (0, _defineProperty2.default)(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n});\n\nvar _createClass$1 = unwrapExports$1(createClass$1);\n\nfunction getDistance(x, y, x1, y1) {\n\n return Math.sqrt(Math.pow(x1 - x, 2) + Math.pow(y1 - y, 2));\n}\n\nfunction getSpeed(s, t) {\n return s / t;\n}\n\nfunction isArray$2(arr) {\n return Array.isArray(arr);\n}\n\n/**\n * 手势判断组件\n * 目前判断的手势\n * 单点操作\n * tap\n * swipe\n * pan\n */\n\nvar Gesture = function () {\n function Gesture() {\n _classCallCheck$1(this, Gesture);\n\n // this.events = events;\n // ['tap', 'swipe', 'panstart', 'panmove', 'panend', 'press'].forEach(item => {\n // this[item] = events[item].bind(host);\n // })\n\n // 手势该有的几个状态\n // swipe tapping pressing\n\n this.startTime = 0;\n this.endTime = 0;\n this.event = {};\n this.status = '';\n }\n\n _createClass$1(Gesture, [{\n key: 'touchstart',\n value: function touchstart(evt) {\n // 当前 touch 点\n this.startTouch = evt.changedTouches[0];\n\n // 开始时间\n this.startTime = Date.now();\n\n this.status = 'tapping';\n }\n }, {\n key: 'touchmove',\n value: function touchmove(evt) {\n\n var touch = evt.changedTouches[0];\n\n var distance = getDistance(this.startTouch.clientX, this.startTouch.clientY, touch.clientX, touch.clientY);\n\n if (this.status === 'tapping' && distance > 10) {\n this.status = 'panning';\n this.fire('panstart', evt);\n } else if (this.status === 'panning') {\n this.fire('panmove', evt);\n }\n }\n }, {\n key: 'touchend',\n value: function touchend(evt) {\n\n this.endTouch = evt.changedTouches[0];\n\n var time = Date.now();\n var distance = getDistance(this.startTouch.clientX, this.startTouch.clientY, this.endTouch.clientX, this.endTouch.clientY);\n var interval = time - this.startTime;\n\n // 时间 <= 250ms 距离小于 10 px 则认为是 tap\n if (interval <= 250 && distance < 10) {\n this.fire('tap', evt);\n time - this.endTime < 300 && this.fire('doubletap', evt);\n }\n\n // 时间 > 250ms 距离小于 10 px 则认为是 press\n interval > 250 && distance < 10 && this.fire('press', evt);\n\n var speed = getSpeed(distance, interval);\n\n // 距离大于 10 px , 速度大于 0.3 则认为是 swipe\n speed > 0.3 && distance >= 10 && this.fire('swipe', evt);\n\n // 处于 panning 则触发 panend 事件\n this.status === 'panning' && this.fire('panend', evt);\n\n this.endTime = Date.now();\n }\n }, {\n key: 'touchcancel',\n value: function touchcancel(evt) {}\n }, {\n key: 'on',\n value: function on(type, func) {\n if (isArray$2(this.event[type])) {\n this.event[type].push(func);\n } else {\n this.event[type] = [func];\n }\n }\n }, {\n key: 'fire',\n value: function fire(type, evt) {\n if (!isArray$2(this.event[type])) return;\n this.event[type].forEach(function (item) {\n item(evt);\n });\n }\n }]);\n\n return Gesture;\n}();\n\nvar baseMobileEvent = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\nvar supportGesture = ['tap', 'swipe', 'panstart', 'panmove', 'panend', 'press', 'doubletap'];\nfunction gestureFactory() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$name = _ref.name,\n name = _ref$name === undefined ? 'chimeeGesture' : _ref$name,\n el = _ref.el,\n _ref$level = _ref.level,\n level = _ref$level === undefined ? 0 : _ref$level,\n _ref$inner = _ref.inner,\n inner = _ref$inner === undefined ? true : _ref$inner,\n autoFocus = _ref.autoFocus,\n className = _ref.className,\n _beforeCreate = _ref.beforeCreate,\n _create = _ref.create,\n init = _ref.init,\n inited = _ref.inited,\n _destroy = _ref.destroy,\n data = _ref.data,\n computed = _ref.computed,\n _ref$events = _ref.events,\n events = _ref$events === undefined ? {} : _ref$events,\n _ref$methods = _ref.methods,\n methods = _ref$methods === undefined ? {} : _ref$methods,\n _ref$penetrate = _ref.penetrate,\n penetrate = _ref$penetrate === undefined ? false : _ref$penetrate,\n _ref$operable = _ref.operable,\n operable = _ref$operable === undefined ? true : _ref$operable;\n\n return {\n name: name,\n el: el,\n level: level,\n inner: inner,\n autoFocus: autoFocus,\n className: className,\n data: data,\n computed: computed,\n beforeCreate: function beforeCreate(config) {\n var _this = this;\n\n this.gesture = new Gesture();\n this.c_gesture = new Gesture();\n this.w_gesture = new Gesture();\n this.d_gesture = new Gesture();\n baseMobileEvent.forEach(function (item) {\n config.events[item] = function (evt) {\n _this.gesture[item](evt);\n };\n config.events['c_' + item] = function (evt) {\n _this.c_gesture[item](evt);\n };\n config.events['w_' + item] = function (evt) {\n _this.w_gesture[item](evt);\n };\n });\n\n supportGesture.forEach(function (item) {\n _this.gesture.on(item, function (evt) {\n var func = config.events[item];\n func && func.call(_this, evt);\n });\n _this.c_gesture.on(item, function (evt) {\n var func = config.events['c_' + item];\n func && func.call(_this, evt);\n });\n _this.w_gesture.on(item, function (evt) {\n var func = config.events['w_' + item];\n func && func.call(_this, evt);\n });\n _this.d_gesture.on(item, function (evt) {\n var func = config.events['d_' + item];\n func && func.call(_this, evt);\n });\n });\n\n _beforeCreate && _beforeCreate.call(this);\n },\n create: function create() {\n var _this2 = this;\n\n this._i = this._i || 0;\n this._i++;\n baseMobileEvent.forEach(function (item) {\n var key = '__' + item;\n _this2[key] = function (evt) {\n _this2.d_gesture[item](evt);\n };\n addEvent(_this2.$dom, item, _this2[key]);\n });\n\n _create && _create.call(this);\n },\n\n init: init,\n inited: inited,\n destroy: function destroy() {\n var _this3 = this;\n\n baseMobileEvent.forEach(function (item) {\n var key = '__' + item;\n removeEvent(_this3.$dom, item, _this3[key]);\n });\n\n _destroy && _destroy.call(this);\n },\n\n methods: methods,\n penetrate: penetrate,\n operable: operable,\n events: events\n };\n}\n\nvar playStr = \"\\n\";\n\nvar loadingStr = \"\";\n\nvar defaultConfig = {\n errorTips: '加载失败,请刷新重试',\n icon: {\n loading: loadingStr,\n play: playStr\n },\n expectTime: 3e4 // 超过最长加载时间则报错\n};\n\nvar chimeeState = gestureFactory({\n name: 'chimeeState',\n el: '\\n \\n \\n \\n \\n \\n ',\n init: function init() {\n this.config = isObject$1(this.$config) ? deepAssign(defaultConfig, this.$config) : defaultConfig;\n this._addInnerHtml();\n },\n inited: function inited() {\n // 存在 src 并且 设置了 prelaod 的情况下, 显示 loading\n this.src && this.preload !== 'none' && this.showState('loading', true);\n },\n\n penetrate: true,\n operable: true,\n destroy: function destroy() {\n this.clearTimeout();\n },\n\n events: {\n pause: function pause() {\n this.showState('play', true);\n },\n play: function play() {\n this.showState('play', false);\n },\n loadedmetadata: function loadedmetadata() {\n this.playing();\n this.showState('play', true);\n },\n playing: function playing() {\n this.playing();\n },\n loadstart: function loadstart() {\n this.waiting('loadstart');\n },\n waiting: function waiting() {\n this.waiting();\n },\n\n // 卡顿(FLV|HLS加载异常待内部特供事件)\n // stalled () {\n // this.showLoading();\n // },\n timeupdate: function timeupdate() {\n this.clearTimeout();\n },\n panstart: function panstart(evt) {\n this.emit('state-panstart', evt);\n },\n panmove: function panmove(evt) {\n this.emit('state-panmove', evt);\n },\n panend: function panend(evt) {\n this.emit('state-panend', evt);\n },\n tap: function tap(evt) {\n this.emit('state-tap', evt);\n },\n d_tap: function d_tap(evt) {\n if (evt.path.indexOf(this.$dom.querySelector('chimee-state-play') !== -1)) this.play();\n }\n },\n methods: {\n playing: function playing() {\n this.clearTimeout();\n this.showState('loading', false);\n this.showState('error', false);\n },\n waiting: function waiting(status) {\n var _this = this;\n\n this.clearTimeout();\n // 加载超过30秒则超时显示异常\n this._timeout = setTimeout(function () {\n return _this.showState('error', true);\n }, this.config.expectTime);\n (status === 'loadstart' || !this.paused) && this.showState('loading', true);\n },\n clearTimeout: function (_clearTimeout) {\n function clearTimeout() {\n return _clearTimeout.apply(this, arguments);\n }\n\n clearTimeout.toString = function () {\n return _clearTimeout.toString();\n };\n\n return clearTimeout;\n }(function () {\n if (this._timeout) {\n clearTimeout(this._timeout);\n this._timeout = null;\n }\n }),\n showState: function showState(state, show) {\n show && this.emit('state-change', state);\n this.$dom.className = show ? state : '';\n },\n _addInnerHtml: function _addInnerHtml() {\n var dom = $(this.$dom);\n dom.find('chimee-state-loading').html(this.config.icon.loading);\n dom.find('chimee-state-play').html(this.config.icon.play);\n dom.find('chimee-state-error').html(this.config.errorTips);\n }\n }\n});\n\nreturn chimeeState;\n\n})));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/chimee-plugin-mobile-state/lib/index.browser.js\n// module id = DeS0\n// module chunks = 0","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = DuR2\n// module chunks = 0","\n/** chimeeMobilePlayer\n * chimee-mobile-player v0.2.5\n * (c) 2017-2018 yandeqiang\n * Released under MIT\n */\n\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.ChimeeMobilePlayer = factory());\n}(this, (function () { 'use strict';\n\nvar commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction unwrapExports (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\n// 7.2.1 RequireObjectCoercible(argument)\nvar _defined = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n\n// 7.1.13 ToObject(argument)\n\nvar _toObject = function (it) {\n return Object(_defined(it));\n};\n\nvar hasOwnProperty = {}.hasOwnProperty;\nvar _has = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n\nvar _global = createCommonjsModule(function (module) {\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n});\n\nvar SHARED = '__core-js_shared__';\nvar store = _global[SHARED] || (_global[SHARED] = {});\nvar _shared = function (key) {\n return store[key] || (store[key] = {});\n};\n\nvar id = 0;\nvar px = Math.random();\nvar _uid = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n\nvar shared = _shared('keys');\n\nvar _sharedKey = function (key) {\n return shared[key] || (shared[key] = _uid(key));\n};\n\n// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\n\n\nvar IE_PROTO = _sharedKey('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nvar _objectGpo = 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 ? ObjectProto : null;\n};\n\nvar _core = createCommonjsModule(function (module) {\nvar core = module.exports = { version: '2.5.3' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n});\nvar _core_1 = _core.version;\n\nvar _aFunction = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n\n// optional / simple context binding\n\nvar _ctx = function (fn, that, length) {\n _aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\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\nvar _isObject = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\nvar _anObject = function (it) {\n if (!_isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n\nvar _fails = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n\n// Thank's IE8 for his funny defineProperty\nvar _descriptors = !_fails(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n\nvar document$1 = _global.document;\n// typeof document.createElement is 'object' in old IE\nvar is = _isObject(document$1) && _isObject(document$1.createElement);\nvar _domCreate = function (it) {\n return is ? document$1.createElement(it) : {};\n};\n\nvar _ie8DomDefine = !_descriptors && !_fails(function () {\n return Object.defineProperty(_domCreate('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n\n// 7.1.1 ToPrimitive(input [, PreferredType])\n\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nvar _toPrimitive = function (it, S) {\n if (!_isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !_isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !_isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !_isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n\nvar dP = Object.defineProperty;\n\nvar f = _descriptors ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n _anObject(O);\n P = _toPrimitive(P, true);\n _anObject(Attributes);\n if (_ie8DomDefine) try {\n return dP(O, P, Attributes);\n } catch (e) { /* 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\nvar _objectDp = {\n\tf: f\n};\n\nvar _propertyDesc = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n\nvar _hide = _descriptors ? function (object, key, value) {\n return _objectDp.f(object, key, _propertyDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var IS_WRAP = type & $export.W;\n var exports = IS_GLOBAL ? _core : _core[name] || (_core[name] = {});\n var expProto = exports[PROTOTYPE];\n var target = IS_GLOBAL ? _global : IS_STATIC ? _global[name] : (_global[name] || {})[PROTOTYPE];\n var key, own, out;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n if (own && key in exports) continue;\n // export native or passed\n out = own ? target[key] : source[key];\n // prevent global pollution for namespaces\n exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n // bind timers to global for call from export context\n : IS_BIND && own ? _ctx(out, _global)\n // wrap global constructors for prevent change them in library\n : IS_WRAP && target[key] == out ? (function (C) {\n var F = function (a, b, c) {\n if (this instanceof C) {\n switch (arguments.length) {\n case 0: return new C();\n case 1: return new C(a);\n case 2: return new C(a, b);\n } return new C(a, b, c);\n } return C.apply(this, arguments);\n };\n F[PROTOTYPE] = C[PROTOTYPE];\n return F;\n // make static versions for prototype methods\n })(out) : IS_PROTO && typeof out == 'function' ? _ctx(Function.call, out) : out;\n // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n if (IS_PROTO) {\n (exports.virtual || (exports.virtual = {}))[key] = out;\n // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n if (type & $export.R && expProto && !expProto[key]) _hide(expProto, key, out);\n }\n }\n};\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nvar _export = $export;\n\n// most Object methods by ES6 should accept primitives\n\n\n\nvar _objectSap = function (KEY, exec) {\n var fn = (_core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n _export(_export.S + _export.F * _fails(function () { fn(1); }), 'Object', exp);\n};\n\n// 19.1.2.9 Object.getPrototypeOf(O)\n\n\n\n_objectSap('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return _objectGpo(_toObject(it));\n };\n});\n\nvar getPrototypeOf = _core.Object.getPrototypeOf;\n\nvar getPrototypeOf$1 = createCommonjsModule(function (module) {\nmodule.exports = { \"default\": getPrototypeOf, __esModule: true };\n});\n\nvar _Object$getPrototypeOf = unwrapExports(getPrototypeOf$1);\n\nvar classCallCheck = createCommonjsModule(function (module, exports) {\n\nexports.__esModule = true;\n\nexports.default = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n});\n\nvar _classCallCheck = unwrapExports(classCallCheck);\n\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n_export(_export.S + _export.F * !_descriptors, 'Object', { defineProperty: _objectDp.f });\n\nvar $Object = _core.Object;\nvar defineProperty = function defineProperty(it, key, desc) {\n return $Object.defineProperty(it, key, desc);\n};\n\nvar defineProperty$1 = createCommonjsModule(function (module) {\nmodule.exports = { \"default\": defineProperty, __esModule: true };\n});\n\nvar _Object$defineProperty = unwrapExports(defineProperty$1);\n\nvar createClass = createCommonjsModule(function (module, exports) {\n\nexports.__esModule = true;\n\n\n\nvar _defineProperty2 = _interopRequireDefault(defineProperty$1);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n (0, _defineProperty2.default)(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n});\n\nvar _createClass = unwrapExports(createClass);\n\n// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nvar _toInteger = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n\n// true -> String#at\n// false -> String#codePointAt\nvar _stringAt = function (TO_STRING) {\n return function (that, pos) {\n var s = String(_defined(that));\n var i = _toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n\nvar _library = true;\n\nvar _redefine = _hide;\n\nvar _iterators = {};\n\nvar toString = {}.toString;\n\nvar _cof = function (it) {\n return toString.call(it).slice(8, -1);\n};\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\n\n// eslint-disable-next-line no-prototype-builtins\nvar _iobject = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return _cof(it) == 'String' ? it.split('') : Object(it);\n};\n\n// to indexed object, toObject with fallback for non-array-like ES3 strings\n\n\nvar _toIobject = function (it) {\n return _iobject(_defined(it));\n};\n\n// 7.1.15 ToLength\n\nvar min = Math.min;\nvar _toLength = function (it) {\n return it > 0 ? min(_toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n\nvar max = Math.max;\nvar min$1 = Math.min;\nvar _toAbsoluteIndex = function (index, length) {\n index = _toInteger(index);\n return index < 0 ? max(index + length, 0) : min$1(index, length);\n};\n\n// false -> Array#indexOf\n// true -> Array#includes\n\n\n\nvar _arrayIncludes = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = _toIobject($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\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nvar arrayIndexOf = _arrayIncludes(false);\nvar IE_PROTO$1 = _sharedKey('IE_PROTO');\n\nvar _objectKeysInternal = function (object, names) {\n var O = _toIobject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO$1) _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 ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n\n// IE 8- don't enum bug keys\nvar _enumBugKeys = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n\n// 19.1.2.14 / 15.2.3.14 Object.keys(O)\n\n\n\nvar _objectKeys = Object.keys || function keys(O) {\n return _objectKeysInternal(O, _enumBugKeys);\n};\n\nvar _objectDps = _descriptors ? Object.defineProperties : function defineProperties(O, Properties) {\n _anObject(O);\n var keys = _objectKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) _objectDp.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n\nvar document$2 = _global.document;\nvar _html = document$2 && document$2.documentElement;\n\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n\n\n\nvar IE_PROTO$2 = _sharedKey('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE$1 = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = _domCreate('iframe');\n var i = _enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n _html.appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE$1][_enumBugKeys[i]];\n return createDict();\n};\n\nvar _objectCreate = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE$1] = _anObject(O);\n result = new Empty();\n Empty[PROTOTYPE$1] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO$2] = O;\n } else result = createDict();\n return Properties === undefined ? result : _objectDps(result, Properties);\n};\n\nvar _wks = createCommonjsModule(function (module) {\nvar store = _shared('wks');\n\nvar Symbol = _global.Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : _uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n});\n\nvar def = _objectDp.f;\n\nvar TAG = _wks('toStringTag');\n\nvar _setToStringTag = function (it, tag, stat) {\n if (it && !_has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\n_hide(IteratorPrototype, _wks('iterator'), function () { return this; });\n\nvar _iterCreate = function (Constructor, NAME, next) {\n Constructor.prototype = _objectCreate(IteratorPrototype, { next: _propertyDesc(1, next) });\n _setToStringTag(Constructor, NAME + ' Iterator');\n};\n\nvar ITERATOR = _wks('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nvar _iterDefine = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n _iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = (!BUGGY && $native) || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = _objectGpo($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n _setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!_library && !_has(IteratorPrototype, ITERATOR)) _hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!_library || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n _hide(proto, ITERATOR, $default);\n }\n // Plug for library\n _iterators[NAME] = $default;\n _iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) _redefine(proto, key, methods[key]);\n } else _export(_export.P + _export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n\nvar $at = _stringAt(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\n_iterDefine(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n\nvar _iterStep = function (done, value) {\n return { value: value, done: !!done };\n};\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nvar es6_array_iterator = _iterDefine(Array, 'Array', function (iterated, kind) {\n this._t = _toIobject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return _iterStep(1);\n }\n if (kind == 'keys') return _iterStep(0, index);\n if (kind == 'values') return _iterStep(0, O[index]);\n return _iterStep(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\n_iterators.Arguments = _iterators.Array;\n\nvar TO_STRING_TAG = _wks('toStringTag');\n\nvar DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +\n 'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +\n 'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +\n 'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +\n 'TextTrackList,TouchList').split(',');\n\nfor (var i = 0; i < DOMIterables.length; i++) {\n var NAME = DOMIterables[i];\n var Collection = _global[NAME];\n var proto = Collection && Collection.prototype;\n if (proto && !proto[TO_STRING_TAG]) _hide(proto, TO_STRING_TAG, NAME);\n _iterators[NAME] = _iterators.Array;\n}\n\nvar f$1 = _wks;\n\nvar _wksExt = {\n\tf: f$1\n};\n\nvar iterator = _wksExt.f('iterator');\n\nvar iterator$1 = createCommonjsModule(function (module) {\nmodule.exports = { \"default\": iterator, __esModule: true };\n});\n\nunwrapExports(iterator$1);\n\nvar _meta = createCommonjsModule(function (module) {\nvar META = _uid('meta');\n\n\nvar setDesc = _objectDp.f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !_fails(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!_isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!_has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!_has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !_has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n});\nvar _meta_1 = _meta.KEY;\nvar _meta_2 = _meta.NEED;\nvar _meta_3 = _meta.fastKey;\nvar _meta_4 = _meta.getWeak;\nvar _meta_5 = _meta.onFreeze;\n\nvar defineProperty$2 = _objectDp.f;\nvar _wksDefine = function (name) {\n var $Symbol = _core.Symbol || (_core.Symbol = _library ? {} : _global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty$2($Symbol, name, { value: _wksExt.f(name) });\n};\n\nvar f$2 = Object.getOwnPropertySymbols;\n\nvar _objectGops = {\n\tf: f$2\n};\n\nvar f$3 = {}.propertyIsEnumerable;\n\nvar _objectPie = {\n\tf: f$3\n};\n\n// all enumerable object keys, includes symbols\n\n\n\nvar _enumKeys = function (it) {\n var result = _objectKeys(it);\n var getSymbols = _objectGops.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = _objectPie.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n\n// 7.2.2 IsArray(argument)\n\nvar _isArray = Array.isArray || function isArray(arg) {\n return _cof(arg) == 'Array';\n};\n\n// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\n\nvar hiddenKeys = _enumBugKeys.concat('length', 'prototype');\n\nvar f$4 = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return _objectKeysInternal(O, hiddenKeys);\n};\n\nvar _objectGopn = {\n\tf: f$4\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\n\nvar gOPN = _objectGopn.f;\nvar toString$1 = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nvar f$5 = function getOwnPropertyNames(it) {\n return windowNames && toString$1.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(_toIobject(it));\n};\n\nvar _objectGopnExt = {\n\tf: f$5\n};\n\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar f$6 = _descriptors ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = _toIobject(O);\n P = _toPrimitive(P, true);\n if (_ie8DomDefine) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (_has(O, P)) return _propertyDesc(!_objectPie.f.call(O, P), O[P]);\n};\n\nvar _objectGopd = {\n\tf: f$6\n};\n\n// ECMAScript 6 symbols shim\n\n\n\n\n\nvar META = _meta.KEY;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar gOPD$1 = _objectGopd.f;\nvar dP$1 = _objectDp.f;\nvar gOPN$1 = _objectGopnExt.f;\nvar $Symbol = _global.Symbol;\nvar $JSON = _global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE$2 = 'prototype';\nvar HIDDEN = _wks('_hidden');\nvar TO_PRIMITIVE = _wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = _shared('symbol-registry');\nvar AllSymbols = _shared('symbols');\nvar OPSymbols = _shared('op-symbols');\nvar ObjectProto$1 = Object[PROTOTYPE$2];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = _global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE$2] || !QObject[PROTOTYPE$2].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = _descriptors && _fails(function () {\n return _objectCreate(dP$1({}, 'a', {\n get: function () { return dP$1(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD$1(ObjectProto$1, key);\n if (protoDesc) delete ObjectProto$1[key];\n dP$1(it, key, D);\n if (protoDesc && it !== ObjectProto$1) dP$1(ObjectProto$1, key, protoDesc);\n} : dP$1;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _objectCreate($Symbol[PROTOTYPE$2]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto$1) $defineProperty(OPSymbols, key, D);\n _anObject(it);\n key = _toPrimitive(key, true);\n _anObject(D);\n if (_has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!_has(it, HIDDEN)) dP$1(it, HIDDEN, _propertyDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (_has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _objectCreate(D, { enumerable: _propertyDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP$1(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n _anObject(it);\n var keys = _enumKeys(P = _toIobject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _objectCreate(it) : $defineProperties(_objectCreate(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = _toPrimitive(key, true));\n if (this === ObjectProto$1 && _has(AllSymbols, key) && !_has(OPSymbols, key)) return false;\n return E || !_has(this, key) || !_has(AllSymbols, key) || _has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = _toIobject(it);\n key = _toPrimitive(key, true);\n if (it === ObjectProto$1 && _has(AllSymbols, key) && !_has(OPSymbols, key)) return;\n var D = gOPD$1(it, key);\n if (D && _has(AllSymbols, key) && !(_has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN$1(_toIobject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!_has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto$1;\n var names = gOPN$1(IS_OP ? OPSymbols : _toIobject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (_has(AllSymbols, key = names[i++]) && (IS_OP ? _has(ObjectProto$1, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = _uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto$1) $set.call(OPSymbols, value);\n if (_has(this, HIDDEN) && _has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, _propertyDesc(1, value));\n };\n if (_descriptors && setter) setSymbolDesc(ObjectProto$1, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n _redefine($Symbol[PROTOTYPE$2], 'toString', function toString() {\n return this._k;\n });\n\n _objectGopd.f = $getOwnPropertyDescriptor;\n _objectDp.f = $defineProperty;\n _objectGopn.f = _objectGopnExt.f = $getOwnPropertyNames;\n _objectPie.f = $propertyIsEnumerable;\n _objectGops.f = $getOwnPropertySymbols;\n\n if (_descriptors && !_library) {\n _redefine(ObjectProto$1, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n _wksExt.f = function (name) {\n return wrap(_wks(name));\n };\n}\n\n_export(_export.G + _export.W + _export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)_wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = _objectKeys(_wks.store), k = 0; wellKnownSymbols.length > k;) _wksDefine(wellKnownSymbols[k++]);\n\n_export(_export.S + _export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return _has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n_export(_export.S + _export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && _export(_export.S + _export.F * (!USE_NATIVE || _fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!_isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!_isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE$2][TO_PRIMITIVE] || _hide($Symbol[PROTOTYPE$2], TO_PRIMITIVE, $Symbol[PROTOTYPE$2].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\n_setToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\n_setToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\n_setToStringTag(_global.JSON, 'JSON', true);\n\n_wksDefine('asyncIterator');\n\n_wksDefine('observable');\n\nvar symbol = _core.Symbol;\n\nvar symbol$1 = createCommonjsModule(function (module) {\nmodule.exports = { \"default\": symbol, __esModule: true };\n});\n\nunwrapExports(symbol$1);\n\nvar _typeof_1 = createCommonjsModule(function (module, exports) {\n\nexports.__esModule = true;\n\n\n\nvar _iterator2 = _interopRequireDefault(iterator$1);\n\n\n\nvar _symbol2 = _interopRequireDefault(symbol$1);\n\nvar _typeof = typeof _symbol2.default === \"function\" && typeof _iterator2.default === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = typeof _symbol2.default === \"function\" && _typeof(_iterator2.default) === \"symbol\" ? function (obj) {\n return typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n} : function (obj) {\n return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n};\n});\n\nvar _typeof = unwrapExports(_typeof_1);\n\nvar possibleConstructorReturn = createCommonjsModule(function (module, exports) {\n\nexports.__esModule = true;\n\n\n\nvar _typeof3 = _interopRequireDefault(_typeof_1);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && ((typeof call === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(call)) === \"object\" || typeof call === \"function\") ? call : self;\n};\n});\n\nvar _possibleConstructorReturn = unwrapExports(possibleConstructorReturn);\n\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\n\n\nvar check = function (O, proto) {\n _anObject(O);\n if (!_isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nvar _setProto = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = _ctx(Function.call, _objectGopd.f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n\n// 19.1.3.19 Object.setPrototypeOf(O, proto)\n\n_export(_export.S, 'Object', { setPrototypeOf: _setProto.set });\n\nvar setPrototypeOf = _core.Object.setPrototypeOf;\n\nvar setPrototypeOf$1 = createCommonjsModule(function (module) {\nmodule.exports = { \"default\": setPrototypeOf, __esModule: true };\n});\n\nunwrapExports(setPrototypeOf$1);\n\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n_export(_export.S, 'Object', { create: _objectCreate });\n\nvar $Object$1 = _core.Object;\nvar create = function create(P, D) {\n return $Object$1.create(P, D);\n};\n\nvar create$1 = createCommonjsModule(function (module) {\nmodule.exports = { \"default\": create, __esModule: true };\n});\n\nvar _Object$create = unwrapExports(create$1);\n\nvar inherits = createCommonjsModule(function (module, exports) {\n\nexports.__esModule = true;\n\n\n\nvar _setPrototypeOf2 = _interopRequireDefault(setPrototypeOf$1);\n\n\n\nvar _create2 = _interopRequireDefault(create$1);\n\n\n\nvar _typeof3 = _interopRequireDefault(_typeof_1);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(superClass)));\n }\n\n subClass.prototype = (0, _create2.default)(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf2.default ? (0, _setPrototypeOf2.default)(subClass, superClass) : subClass.__proto__ = superClass;\n};\n});\n\nvar _inherits = unwrapExports(inherits);\n\n// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n\nvar $getOwnPropertyDescriptor$1 = _objectGopd.f;\n\n_objectSap('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor$1(_toIobject(it), key);\n };\n});\n\nvar $Object$2 = _core.Object;\nvar getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n return $Object$2.getOwnPropertyDescriptor(it, key);\n};\n\nvar getOwnPropertyDescriptor$1 = createCommonjsModule(function (module) {\nmodule.exports = { \"default\": getOwnPropertyDescriptor, __esModule: true };\n});\n\nvar _Object$getOwnPropertyDescriptor = unwrapExports(getOwnPropertyDescriptor$1);\n\nvar _redefineAll = function (target, src, safe) {\n for (var key in src) {\n if (safe && target[key]) target[key] = src[key];\n else _hide(target, key, src[key]);\n } return target;\n};\n\nvar _anInstance = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n\n// call something on iterator step with safe closing on error\n\nvar _iterCall = 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 (e) {\n var ret = iterator['return'];\n if (ret !== undefined) _anObject(ret.call(iterator));\n throw e;\n }\n};\n\n// check on default Array iterator\n\nvar ITERATOR$1 = _wks('iterator');\nvar ArrayProto = Array.prototype;\n\nvar _isArrayIter = function (it) {\n return it !== undefined && (_iterators.Array === it || ArrayProto[ITERATOR$1] === it);\n};\n\n// getting tag from 19.1.3.6 Object.prototype.toString()\n\nvar TAG$1 = _wks('toStringTag');\n// ES3 wrong here\nvar ARG = _cof(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 (e) { /* empty */ }\n};\n\nvar _classof = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG$1)) == 'string' ? T\n // builtinTag case\n : ARG ? _cof(O)\n // ES3 arguments fallback\n : (B = _cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n\nvar ITERATOR$2 = _wks('iterator');\n\nvar core_getIteratorMethod = _core.getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR$2]\n || it['@@iterator']\n || _iterators[_classof(it)];\n};\n\nvar _forOf = createCommonjsModule(function (module) {\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : core_getIteratorMethod(iterable);\n var f = _ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (_isArrayIter(iterFn)) for (length = _toLength(iterable.length); length > index; index++) {\n result = entries ? f(_anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = _iterCall(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n});\n\nvar SPECIES = _wks('species');\n\nvar _setSpecies = function (KEY) {\n var C = typeof _core[KEY] == 'function' ? _core[KEY] : _global[KEY];\n if (_descriptors && C && !C[SPECIES]) _objectDp.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n\nvar _validateCollection = function (it, TYPE) {\n if (!_isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n\nvar dP$2 = _objectDp.f;\n\n\n\n\n\n\n\n\n\nvar fastKey = _meta.fastKey;\n\nvar SIZE = _descriptors ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nvar _collectionStrong = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n _anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = _objectCreate(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) _forOf(iterable, IS_MAP, that[ADDER], that);\n });\n _redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = _validateCollection(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = _validateCollection(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n _validateCollection(this, NAME);\n var f = _ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(_validateCollection(this, NAME), key);\n }\n });\n if (_descriptors) dP$2(C.prototype, 'size', {\n get: function () {\n return _validateCollection(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n _iterDefine(C, NAME, function (iterated, kind) {\n this._t = _validateCollection(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return _iterStep(1);\n }\n // return step by kind\n if (kind == 'keys') return _iterStep(0, entry.k);\n if (kind == 'values') return _iterStep(0, entry.v);\n return _iterStep(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n _setSpecies(NAME);\n }\n};\n\nvar SPECIES$1 = _wks('species');\n\nvar _arraySpeciesConstructor = function (original) {\n var C;\n if (_isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || _isArray(C.prototype))) C = undefined;\n if (_isObject(C)) {\n C = C[SPECIES$1];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n\n// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\n\n\nvar _arraySpeciesCreate = function (original, length) {\n return new (_arraySpeciesConstructor(original))(length);\n};\n\n// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\n\n\n\n\n\nvar _arrayMethods = function (TYPE, $create) {\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 NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || _arraySpeciesCreate;\n return function ($this, callbackfn, that) {\n var O = _toObject($this);\n var self = _iobject(O);\n var f = _ctx(callbackfn, that, 3);\n var length = _toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n\nvar dP$3 = _objectDp.f;\nvar each = _arrayMethods(0);\n\n\nvar _collection = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = _global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n if (!_descriptors || typeof C != 'function' || !(IS_WEAK || proto.forEach && !_fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n _redefineAll(C.prototype, methods);\n _meta.NEED = true;\n } else {\n C = wrapper(function (target, iterable) {\n _anInstance(target, C, NAME, '_c');\n target._c = new Base();\n if (iterable != undefined) _forOf(iterable, IS_MAP, target[ADDER], target);\n });\n each('add,clear,delete,forEach,get,has,set,keys,values,entries,toJSON'.split(','), function (KEY) {\n var IS_ADDER = KEY == 'add' || KEY == 'set';\n if (KEY in proto && !(IS_WEAK && KEY == 'clear')) _hide(C.prototype, KEY, function (a, b) {\n _anInstance(this, C, KEY);\n if (!IS_ADDER && IS_WEAK && !_isObject(a)) return KEY == 'get' ? undefined : false;\n var result = this._c[KEY](a === 0 ? 0 : a, b);\n return IS_ADDER ? this : result;\n });\n });\n IS_WEAK || dP$3(C.prototype, 'size', {\n get: function () {\n return this._c.size;\n }\n });\n }\n\n _setToStringTag(C, NAME);\n\n O[NAME] = C;\n _export(_export.G + _export.W + _export.F, O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nvar es6_map = _collection(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = _collectionStrong.getEntry(_validateCollection(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return _collectionStrong.def(_validateCollection(this, MAP), key === 0 ? 0 : key, value);\n }\n}, _collectionStrong, true);\n\nvar _arrayFromIterable = function (iter, ITERATOR) {\n var result = [];\n _forOf(iter, false, result.push, result, ITERATOR);\n return result;\n};\n\n// https://github.com/DavidBruant/Map-Set.prototype.toJSON\n\n\nvar _collectionToJson = function (NAME) {\n return function toJSON() {\n if (_classof(this) != NAME) throw TypeError(NAME + \"#toJSON isn't generic\");\n return _arrayFromIterable(this);\n };\n};\n\n// https://github.com/DavidBruant/Map-Set.prototype.toJSON\n\n\n_export(_export.P + _export.R, 'Map', { toJSON: _collectionToJson('Map') });\n\n// https://tc39.github.io/proposal-setmap-offrom/\n\n\nvar _setCollectionOf = function (COLLECTION) {\n _export(_export.S, COLLECTION, { of: function of() {\n var length = arguments.length;\n var A = new Array(length);\n while (length--) A[length] = arguments[length];\n return new this(A);\n } });\n};\n\n// https://tc39.github.io/proposal-setmap-offrom/#sec-map.of\n_setCollectionOf('Map');\n\n// https://tc39.github.io/proposal-setmap-offrom/\n\n\n\n\n\nvar _setCollectionFrom = function (COLLECTION) {\n _export(_export.S, COLLECTION, { from: function from(source /* , mapFn, thisArg */) {\n var mapFn = arguments[1];\n var mapping, A, n, cb;\n _aFunction(this);\n mapping = mapFn !== undefined;\n if (mapping) _aFunction(mapFn);\n if (source == undefined) return new this();\n A = [];\n if (mapping) {\n n = 0;\n cb = _ctx(mapFn, arguments[2], 2);\n _forOf(source, false, function (nextItem) {\n A.push(cb(nextItem, n++));\n });\n } else {\n _forOf(source, false, A.push, A);\n }\n return new this(A);\n } });\n};\n\n// https://tc39.github.io/proposal-setmap-offrom/#sec-map.from\n_setCollectionFrom('Map');\n\nvar map = _core.Map;\n\nvar map$1 = createCommonjsModule(function (module) {\nmodule.exports = { \"default\": map, __esModule: true };\n});\n\nvar _Map = unwrapExports(map$1);\n\nvar _createProperty = function (object, index, value) {\n if (index in object) _objectDp.f(object, index, _propertyDesc(0, value));\n else object[index] = value;\n};\n\nvar ITERATOR$3 = _wks('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR$3]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n} catch (e) { /* empty */ }\n\nvar _iterDetect = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR$3]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR$3] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n\n_export(_export.S + _export.F * !_iterDetect(function (iter) { }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = _toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = core_getIteratorMethod(O);\n var length, result, step, iterator;\n if (mapping) mapfn = _ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && _isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n _createProperty(result, index, mapping ? _iterCall(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = _toLength(O.length);\n for (result = new C(length); length > index; index++) {\n _createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n\nvar from = _core.Array.from;\n\nvar from$1 = createCommonjsModule(function (module) {\nmodule.exports = { \"default\": from, __esModule: true };\n});\n\nvar _Array$from = unwrapExports(from$1);\n\nvar toConsumableArray = createCommonjsModule(function (module, exports) {\n\nexports.__esModule = true;\n\n\n\nvar _from2 = _interopRequireDefault(from$1);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n } else {\n return (0, _from2.default)(arr);\n }\n};\n});\n\nvar _toConsumableArray = unwrapExports(toConsumableArray);\n\n// 7.3.20 SpeciesConstructor(O, defaultConstructor)\n\n\nvar SPECIES$2 = _wks('species');\nvar _speciesConstructor = function (O, D) {\n var C = _anObject(O).constructor;\n var S;\n return C === undefined || (S = _anObject(C)[SPECIES$2]) == undefined ? D : _aFunction(S);\n};\n\n// fast apply, http://jsperf.lnkit.com/fast-apply/5\nvar _invoke = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n\nvar process = _global.process;\nvar setTask = _global.setImmediate;\nvar clearTask = _global.clearImmediate;\nvar MessageChannel = _global.MessageChannel;\nvar Dispatch = _global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n _invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (_cof(process) == 'process') {\n defer = function (id) {\n process.nextTick(_ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(_ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = _ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (_global.addEventListener && typeof postMessage == 'function' && !_global.importScripts) {\n defer = function (id) {\n _global.postMessage(id + '', '*');\n };\n _global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in _domCreate('script')) {\n defer = function (id) {\n _html.appendChild(_domCreate('script'))[ONREADYSTATECHANGE] = function () {\n _html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(_ctx(run, id, 1), 0);\n };\n }\n}\nvar _task = {\n set: setTask,\n clear: clearTask\n};\n\nvar macrotask = _task.set;\nvar Observer = _global.MutationObserver || _global.WebKitMutationObserver;\nvar process$1 = _global.process;\nvar Promise = _global.Promise;\nvar isNode = _cof(process$1) == 'process';\n\nvar _microtask = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process$1.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process$1.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(_global.navigator && _global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(_global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n\n// 25.4.1.5 NewPromiseCapability(C)\n\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = _aFunction(resolve);\n this.reject = _aFunction(reject);\n}\n\nvar f$7 = function (C) {\n return new PromiseCapability(C);\n};\n\nvar _newPromiseCapability = {\n\tf: f$7\n};\n\nvar _perform = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n\nvar _promiseResolve = function (C, x) {\n _anObject(C);\n if (_isObject(x) && x.constructor === C) return x;\n var promiseCapability = _newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n\nvar task = _task.set;\nvar microtask = _microtask();\n\n\n\nvar PROMISE = 'Promise';\nvar TypeError$1 = _global.TypeError;\nvar process$2 = _global.process;\nvar $Promise = _global[PROMISE];\nvar isNode$1 = _classof(process$2) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = _newPromiseCapability.f;\n\nvar USE_NATIVE$1 = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[_wks('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode$1 || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return _isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError$1('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(_global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = _perform(function () {\n if (isNode$1) {\n process$2.emit('unhandledRejection', value, promise);\n } else if (handler = _global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = _global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode$1 || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(_global, function () {\n var handler;\n if (isNode$1) {\n process$2.emit('rejectionHandled', promise);\n } else if (handler = _global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError$1(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, _ctx($resolve, wrapper, 1), _ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE$1) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n _anInstance(this, $Promise, PROMISE, '_h');\n _aFunction(executor);\n Internal.call(this);\n try {\n executor(_ctx($resolve, this, 1), _ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = _redefineAll($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(_speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode$1 ? process$2.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = _ctx($resolve, promise, 1);\n this.reject = _ctx($reject, promise, 1);\n };\n _newPromiseCapability.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n_export(_export.G + _export.W + _export.F * !USE_NATIVE$1, { Promise: $Promise });\n_setToStringTag($Promise, PROMISE);\n_setSpecies(PROMISE);\nWrapper = _core[PROMISE];\n\n// statics\n_export(_export.S + _export.F * !USE_NATIVE$1, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n_export(_export.S + _export.F * (_library || !USE_NATIVE$1), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return _promiseResolve(_library && this === Wrapper ? $Promise : this, x);\n }\n});\n_export(_export.S + _export.F * !(USE_NATIVE$1 && _iterDetect(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = _perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n _forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = _perform(function () {\n _forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n\n_export(_export.P + _export.R, 'Promise', { 'finally': function (onFinally) {\n var C = _speciesConstructor(this, _core.Promise || _global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return _promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return _promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n\n// https://github.com/tc39/proposal-promise-try\n\n\n\n\n_export(_export.S, 'Promise', { 'try': function (callbackfn) {\n var promiseCapability = _newPromiseCapability.f(this);\n var result = _perform(callbackfn);\n (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);\n return promiseCapability.promise;\n} });\n\nvar promise = _core.Promise;\n\nvar promise$1 = createCommonjsModule(function (module) {\nmodule.exports = { \"default\": promise, __esModule: true };\n});\n\nvar _Promise = unwrapExports(promise$1);\n\n// 19.1.2.14 Object.keys(O)\n\n\n\n_objectSap('keys', function () {\n return function keys(it) {\n return _objectKeys(_toObject(it));\n };\n});\n\nvar keys = _core.Object.keys;\n\nvar keys$1 = createCommonjsModule(function (module) {\nmodule.exports = { \"default\": keys, __esModule: true };\n});\n\nvar _Object$keys = unwrapExports(keys$1);\n\n// 20.1.2.3 Number.isInteger(number)\n\nvar floor$1 = Math.floor;\nvar _isInteger = function isInteger(it) {\n return !_isObject(it) && isFinite(it) && floor$1(it) === it;\n};\n\n// 20.1.2.3 Number.isInteger(number)\n\n\n_export(_export.S, 'Number', { isInteger: _isInteger });\n\nvar isInteger = _core.Number.isInteger;\n\nvar isInteger$1 = createCommonjsModule(function (module) {\nmodule.exports = { \"default\": isInteger, __esModule: true };\n});\n\nvar _Number$isInteger = unwrapExports(isInteger$1);\n\nvar _stringWs = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n\nvar space = '[' + _stringWs + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = _fails(function () {\n return !!_stringWs[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : _stringWs[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n _export(_export.P + _export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(_defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nvar _stringTrim = exporter;\n\nvar $parseFloat = _global.parseFloat;\nvar $trim = _stringTrim.trim;\n\nvar _parseFloat = 1 / $parseFloat(_stringWs + '-0') !== -Infinity ? function parseFloat(str) {\n var string = $trim(String(str), 3);\n var result = $parseFloat(string);\n return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n\n// 20.1.2.12 Number.parseFloat(string)\n_export(_export.S + _export.F * (Number.parseFloat != _parseFloat), 'Number', { parseFloat: _parseFloat });\n\nvar _parseFloat$1 = parseFloat;\n\nvar _parseFloat$2 = createCommonjsModule(function (module) {\nmodule.exports = { \"default\": _parseFloat$1, __esModule: true };\n});\n\nvar _Number$parseFloat = unwrapExports(_parseFloat$2);\n\n/**\n * to check whether the object is defined or not\n */\nfunction defined(obj) {\n return typeof obj !== 'undefined';\n}\n/**\n * is void element or not ? Means it will return true when val is undefined or null\n */\nfunction isVoid(obj) {\n return obj === undefined || obj === null;\n}\n/**\n * to check whether a variable is array\n */\nfunction isArray(arr) {\n return Array.isArray(arr);\n}\n\n/**\n * is it a function or not\n */\nfunction isFunction(obj) {\n return typeof obj === 'function';\n}\n\n/**\n * is it an object or not\n */\nfunction isObject(obj) {\n // incase of arrow function and array\n return Object(obj) === obj && String(obj) === '[object Object]' && !isFunction(obj) && !isArray(obj);\n}\n/**\n * to tell you if it's a real number\n */\nfunction isNumber(obj) {\n return typeof obj === 'number';\n}\n/**\n * to tell you if the val can be transfer into number\n */\nfunction isNumeric(obj) {\n return !isArray(obj) && obj - _Number$parseFloat(obj) + 1 >= 0;\n}\n/**\n * is it an interget or not\n */\nfunction isInteger$2(num) {\n return _Number$isInteger(num);\n}\n\n/**\n * return true when the value is \"\", {}, [], 0, null, undefined, false.\n */\nfunction isEmpty(obj) {\n if (isArray(obj)) {\n return obj.length === 0;\n } else if (isObject(obj)) {\n return _Object$keys(obj).length === 0;\n } else {\n return !obj;\n }\n}\n/**\n * is it an event or not\n */\nfunction isEvent(obj) {\n return obj instanceof Event || (obj && obj.originalEvent) instanceof Event;\n}\n/**\n * is it a string\n */\nfunction isString(str) {\n return typeof str === 'string' || str instanceof String;\n}\n/**\n * is Boolean or not\n */\nfunction isBoolean(bool) {\n return typeof bool === 'boolean';\n}\n/**\n * is a promise or not\n */\nfunction isPromise(obj) {\n return !!obj && ((typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' || typeof obj === 'function') && typeof obj.then === 'function';\n}\n/**\n * is Primitive type or not, whick means it will return true when data is number/string/boolean/undefined/null\n */\nfunction isPrimitive(val) {\n return isVoid(val) || isBoolean(val) || isString(val) || isNumber(val);\n}\n/**\n * to test if a HTML node\n */\nfunction isNode$2(obj) {\n return !!((typeof Node === 'undefined' ? 'undefined' : _typeof(Node)) === 'object' ? obj instanceof Node : obj && (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && typeof obj.nodeType === 'number' && typeof obj.nodeName === 'string');\n}\n/**\n * to test if a HTML element\n */\nfunction isElement(obj) {\n return !!((typeof HTMLElement === 'undefined' ? 'undefined' : _typeof(HTMLElement)) === 'object' ? obj instanceof HTMLElement : obj && (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && obj !== null && obj.nodeType === 1 && typeof obj.nodeName === 'string');\n}\n/**\n * check if node B is node A's posterrity or not\n */\nfunction isPosterityNode(parent, child) {\n if (!isNode$2(parent) || !isNode$2(child)) {\n return false;\n }\n while (child.parentNode) {\n child = child.parentNode;\n if (child === parent) {\n return true;\n }\n }\n return false;\n}\n/**\n * check if the string is an HTMLString\n */\nfunction isHTMLString(str) {\n return (/<[^>]+?>/.test(str)\n );\n}\n/**\n * check if is an error\n */\nfunction isError(val) {\n return val instanceof Error;\n}\n\nfunction formatter(tag, msg) {\n if (!isString(tag)) throw new TypeError('Log\\'s method only acccept string as argument, but not ' + tag + ' in ' + (typeof tag === 'undefined' ? 'undefined' : _typeof(tag)));\n if (!isString(msg)) return '[' + Log.GLOBAL_TAG + '] > ' + tag;\n tag = Log.FORCE_GLOBAL_TAG ? Log.GLOBAL_TAG : tag || Log.GLOBAL_TAG;\n return '[' + tag + '] > ' + msg;\n}\n/**\n * Log Object\n */\n\nvar Log = function () {\n function Log() {\n _classCallCheck(this, Log);\n }\n\n _createClass(Log, null, [{\n key: 'error',\n\n /**\n * equal to console.error, output `[${tag}] > {$msg}`\n * @param {string} tag optional, the header of log \n * @param {string} msg the message\n */\n\n /**\n * @member {boolean}\n */\n\n /**\n * @member {boolean}\n */\n\n /**\n * @member {boolean}\n */\n value: function error(tag, msg) {\n if (!Log.ENABLE_ERROR) {\n return;\n }\n\n (console.error || console.warn || console.log).call(console, formatter(tag, msg));\n }\n /**\n * equal to console.info, output `[${tag}] > {$msg}`\n * @param {string} tag optional, the header of log \n * @param {string} msg the message\n */\n\n /**\n * @member {boolean}\n */\n\n /**\n * @member {boolean}\n */\n\n /**\n * @member {boolean}\n */\n\n /**\n * @member {string}\n */\n\n }, {\n key: 'info',\n value: function info(tag, msg) {\n if (!Log.ENABLE_INFO) {\n return;\n }\n (console.info || console.log).call(console, formatter(tag, msg));\n }\n /**\n * equal to console.warn, output `[${tag}] > {$msg}`\n * @param {string} tag optional, the header of log \n * @param {string} msg the message\n */\n\n }, {\n key: 'warn',\n value: function warn(tag, msg) {\n if (!Log.ENABLE_WARN) {\n return;\n }\n (console.warn || console.log).call(console, formatter(tag, msg));\n }\n /**\n * equal to console.debug, output `[${tag}] > {$msg}`\n * @param {string} tag optional, the header of log \n * @param {string} msg the message\n */\n\n }, {\n key: 'debug',\n value: function debug(tag, msg) {\n if (!Log.ENABLE_DEBUG) {\n return;\n }\n (console.debug || console.log).call(console, formatter(tag, msg));\n }\n /**\n * equal to console.verbose, output `[${tag}] > {$msg}`\n * @param {string} tag optional, the header of log \n * @param {string} msg the message\n */\n\n }, {\n key: 'verbose',\n value: function verbose(tag, msg) {\n if (!Log.ENABLE_VERBOSE) {\n return;\n }\n console.log(formatter(tag, msg));\n }\n }]);\n\n return Log;\n}();\n\nLog.GLOBAL_TAG = 'chimee';\nLog.FORCE_GLOBAL_TAG = false;\nLog.ENABLE_ERROR = true;\nLog.ENABLE_INFO = true;\nLog.ENABLE_WARN = true;\nLog.ENABLE_DEBUG = true;\nLog.ENABLE_VERBOSE = true;\n\nvar uaParser = createCommonjsModule(function (module, exports) {\n/**\n * UAParser.js v0.7.17\n * Lightweight JavaScript-based User-Agent string parser\n * https://github.com/faisalman/ua-parser-js\n *\n * Copyright © 2012-2016 Faisal Salman \n * Dual licensed under GPLv2 & MIT\n */\n\n(function (window, undefined) {\n\n //////////////\n // Constants\n /////////////\n\n\n var LIBVERSION = '0.7.17',\n EMPTY = '',\n UNKNOWN = '?',\n FUNC_TYPE = 'function',\n UNDEF_TYPE = 'undefined',\n OBJ_TYPE = 'object',\n STR_TYPE = 'string',\n MAJOR = 'major', // deprecated\n MODEL = 'model',\n NAME = 'name',\n TYPE = 'type',\n VENDOR = 'vendor',\n VERSION = 'version',\n ARCHITECTURE= 'architecture',\n CONSOLE = 'console',\n MOBILE = 'mobile',\n TABLET = 'tablet',\n SMARTTV = 'smarttv',\n WEARABLE = 'wearable',\n EMBEDDED = 'embedded';\n\n\n ///////////\n // Helper\n //////////\n\n\n var util = {\n extend : function (regexes, extensions) {\n var margedRegexes = {};\n for (var i in regexes) {\n if (extensions[i] && extensions[i].length % 2 === 0) {\n margedRegexes[i] = extensions[i].concat(regexes[i]);\n } else {\n margedRegexes[i] = regexes[i];\n }\n }\n return margedRegexes;\n },\n has : function (str1, str2) {\n if (typeof str1 === \"string\") {\n return str2.toLowerCase().indexOf(str1.toLowerCase()) !== -1;\n } else {\n return false;\n }\n },\n lowerize : function (str) {\n return str.toLowerCase();\n },\n major : function (version) {\n return typeof(version) === STR_TYPE ? version.replace(/[^\\d\\.]/g,'').split(\".\")[0] : undefined;\n },\n trim : function (str) {\n return str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n }\n };\n\n\n ///////////////\n // Map helper\n //////////////\n\n\n var mapper = {\n\n rgx : function (ua, arrays) {\n\n //var result = {},\n var i = 0, j, k, p, q, matches, match;//, args = arguments;\n\n /*// construct object barebones\n for (p = 0; p < args[1].length; p++) {\n q = args[1][p];\n result[typeof q === OBJ_TYPE ? q[0] : q] = undefined;\n }*/\n\n // loop through all regexes maps\n while (i < arrays.length && !matches) {\n\n var regex = arrays[i], // even sequence (0,2,4,..)\n props = arrays[i + 1]; // odd sequence (1,3,5,..)\n j = k = 0;\n\n // try matching uastring with regexes\n while (j < regex.length && !matches) {\n\n matches = regex[j++].exec(ua);\n\n if (!!matches) {\n for (p = 0; p < props.length; p++) {\n match = matches[++k];\n q = props[p];\n // check if given property is actually array\n if (typeof q === OBJ_TYPE && q.length > 0) {\n if (q.length == 2) {\n if (typeof q[1] == FUNC_TYPE) {\n // assign modified match\n this[q[0]] = q[1].call(this, match);\n } else {\n // assign given value, ignore regex match\n this[q[0]] = q[1];\n }\n } else if (q.length == 3) {\n // check whether function or regex\n if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {\n // call function (usually string mapper)\n this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;\n } else {\n // sanitize match using given regex\n this[q[0]] = match ? match.replace(q[1], q[2]) : undefined;\n }\n } else if (q.length == 4) {\n this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;\n }\n } else {\n this[q] = match ? match : undefined;\n }\n }\n }\n }\n i += 2;\n }\n // console.log(this);\n //return this;\n },\n\n str : function (str, map) {\n\n for (var i in map) {\n // check if array\n if (typeof map[i] === OBJ_TYPE && map[i].length > 0) {\n for (var j = 0; j < map[i].length; j++) {\n if (util.has(map[i][j], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n } else if (util.has(map[i], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n return str;\n }\n };\n\n\n ///////////////\n // String map\n //////////////\n\n\n var maps = {\n\n browser : {\n oldsafari : {\n version : {\n '1.0' : '/8',\n '1.2' : '/1',\n '1.3' : '/3',\n '2.0' : '/412',\n '2.0.2' : '/416',\n '2.0.3' : '/417',\n '2.0.4' : '/419',\n '?' : '/'\n }\n }\n },\n\n device : {\n amazon : {\n model : {\n 'Fire Phone' : ['SD', 'KF']\n }\n },\n sprint : {\n model : {\n 'Evo Shift 4G' : '7373KT'\n },\n vendor : {\n 'HTC' : 'APA',\n 'Sprint' : 'Sprint'\n }\n }\n },\n\n os : {\n windows : {\n version : {\n 'ME' : '4.90',\n 'NT 3.11' : 'NT3.51',\n 'NT 4.0' : 'NT4.0',\n '2000' : 'NT 5.0',\n 'XP' : ['NT 5.1', 'NT 5.2'],\n 'Vista' : 'NT 6.0',\n '7' : 'NT 6.1',\n '8' : 'NT 6.2',\n '8.1' : 'NT 6.3',\n '10' : ['NT 6.4', 'NT 10.0'],\n 'RT' : 'ARM'\n }\n }\n }\n };\n\n\n //////////////\n // Regex map\n /////////////\n\n\n var regexes = {\n\n browser : [[\n\n // Presto based\n /(opera\\smini)\\/([\\w\\.-]+)/i, // Opera Mini\n /(opera\\s[mobiletab]+).+version\\/([\\w\\.-]+)/i, // Opera Mobi/Tablet\n /(opera).+version\\/([\\w\\.]+)/i, // Opera > 9.80\n /(opera)[\\/\\s]+([\\w\\.]+)/i // Opera < 9.80\n ], [NAME, VERSION], [\n\n /(opios)[\\/\\s]+([\\w\\.]+)/i // Opera mini on iphone >= 8.0\n ], [[NAME, 'Opera Mini'], VERSION], [\n\n /\\s(opr)\\/([\\w\\.]+)/i // Opera Webkit\n ], [[NAME, 'Opera'], VERSION], [\n\n // Mixed\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(lunascape|maxthon|netfront|jasmine|blazer)[\\/\\s]?([\\w\\.]+)*/i,\n // Lunascape/Maxthon/Netfront/Jasmine/Blazer\n\n // Trident based\n /(avant\\s|iemobile|slim|baidu)(?:browser)?[\\/\\s]?([\\w\\.]*)/i,\n // Avant/IEMobile/SlimBrowser/Baidu\n /(?:ms|\\()(ie)\\s([\\w\\.]+)/i, // Internet Explorer\n\n // Webkit/KHTML based\n /(rekonq)\\/([\\w\\.]+)*/i, // Rekonq\n /(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser)\\/([\\w\\.-]+)/i\n // Chromium/Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser\n ], [NAME, VERSION], [\n\n /(trident).+rv[:\\s]([\\w\\.]+).+like\\sgecko/i // IE11\n ], [[NAME, 'IE'], VERSION], [\n\n /(edge)\\/((\\d+)?[\\w\\.]+)/i // Microsoft Edge\n ], [NAME, VERSION], [\n\n /(yabrowser)\\/([\\w\\.]+)/i // Yandex\n ], [[NAME, 'Yandex'], VERSION], [\n\n /(puffin)\\/([\\w\\.]+)/i // Puffin\n ], [[NAME, 'Puffin'], VERSION], [\n\n /((?:[\\s\\/])uc?\\s?browser|(?:juc.+)ucweb)[\\/\\s]?([\\w\\.]+)/i\n // UCBrowser\n ], [[NAME, 'UCBrowser'], VERSION], [\n\n /(comodo_dragon)\\/([\\w\\.]+)/i // Comodo Dragon\n ], [[NAME, /_/g, ' '], VERSION], [\n\n /(micromessenger)\\/([\\w\\.]+)/i // WeChat\n ], [[NAME, 'WeChat'], VERSION], [\n\n /(QQ)\\/([\\d\\.]+)/i // QQ, aka ShouQ\n ], [NAME, VERSION], [\n\n /m?(qqbrowser)[\\/\\s]?([\\w\\.]+)/i // QQBrowser\n ], [NAME, VERSION], [\n\n /xiaomi\\/miuibrowser\\/([\\w\\.]+)/i // MIUI Browser\n ], [VERSION, [NAME, 'MIUI Browser']], [\n\n /;fbav\\/([\\w\\.]+);/i // Facebook App for iOS & Android\n ], [VERSION, [NAME, 'Facebook']], [\n\n /headlesschrome(?:\\/([\\w\\.]+)|\\s)/i // Chrome Headless\n ], [VERSION, [NAME, 'Chrome Headless']], [\n\n /\\swv\\).+(chrome)\\/([\\w\\.]+)/i // Chrome WebView\n ], [[NAME, /(.+)/, '$1 WebView'], VERSION], [\n\n /((?:oculus|samsung)browser)\\/([\\w\\.]+)/i\n ], [[NAME, /(.+(?:g|us))(.+)/, '$1 $2'], VERSION], [ // Oculus / Samsung Browser\n\n /android.+version\\/([\\w\\.]+)\\s+(?:mobile\\s?safari|safari)*/i // Android Browser\n ], [VERSION, [NAME, 'Android Browser']], [\n\n /(chrome|omniweb|arora|[tizenoka]{5}\\s?browser)\\/v?([\\w\\.]+)/i\n // Chrome/OmniWeb/Arora/Tizen/Nokia\n ], [NAME, VERSION], [\n\n /(dolfin)\\/([\\w\\.]+)/i // Dolphin\n ], [[NAME, 'Dolphin'], VERSION], [\n\n /((?:android.+)crmo|crios)\\/([\\w\\.]+)/i // Chrome for Android/iOS\n ], [[NAME, 'Chrome'], VERSION], [\n\n /(coast)\\/([\\w\\.]+)/i // Opera Coast\n ], [[NAME, 'Opera Coast'], VERSION], [\n\n /fxios\\/([\\w\\.-]+)/i // Firefox for iOS\n ], [VERSION, [NAME, 'Firefox']], [\n\n /version\\/([\\w\\.]+).+?mobile\\/\\w+\\s(safari)/i // Mobile Safari\n ], [VERSION, [NAME, 'Mobile Safari']], [\n\n /version\\/([\\w\\.]+).+?(mobile\\s?safari|safari)/i // Safari & Safari Mobile\n ], [VERSION, NAME], [\n\n /webkit.+?(gsa)\\/([\\w\\.]+).+?(mobile\\s?safari|safari)(\\/[\\w\\.]+)/i // Google Search Appliance on iOS\n ], [[NAME, 'GSA'], VERSION], [\n\n /webkit.+?(mobile\\s?safari|safari)(\\/[\\w\\.]+)/i // Safari < 3.0\n ], [NAME, [VERSION, mapper.str, maps.browser.oldsafari.version]], [\n\n /(konqueror)\\/([\\w\\.]+)/i, // Konqueror\n /(webkit|khtml)\\/([\\w\\.]+)/i\n ], [NAME, VERSION], [\n\n // Gecko based\n /(navigator|netscape)\\/([\\w\\.-]+)/i // Netscape\n ], [[NAME, 'Netscape'], VERSION], [\n /(swiftfox)/i, // Swiftfox\n /(icedragon|iceweasel|camino|chimera|fennec|maemo\\sbrowser|minimo|conkeror)[\\/\\s]?([\\w\\.\\+]+)/i,\n // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror\n /(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix)\\/([\\w\\.-]+)/i,\n // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix\n /(mozilla)\\/([\\w\\.]+).+rv\\:.+gecko\\/\\d+/i, // Mozilla\n\n // Other\n /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir)[\\/\\s]?([\\w\\.]+)/i,\n // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir\n /(links)\\s\\(([\\w\\.]+)/i, // Links\n /(gobrowser)\\/?([\\w\\.]+)*/i, // GoBrowser\n /(ice\\s?browser)\\/v?([\\w\\._]+)/i, // ICE Browser\n /(mosaic)[\\/\\s]([\\w\\.]+)/i // Mosaic\n ], [NAME, VERSION]\n\n /* /////////////////////\n // Media players BEGIN\n ////////////////////////\n\n , [\n\n /(apple(?:coremedia|))\\/((\\d+)[\\w\\._]+)/i, // Generic Apple CoreMedia\n /(coremedia) v((\\d+)[\\w\\._]+)/i\n ], [NAME, VERSION], [\n\n /(aqualung|lyssna|bsplayer)\\/((\\d+)?[\\w\\.-]+)/i // Aqualung/Lyssna/BSPlayer\n ], [NAME, VERSION], [\n\n /(ares|ossproxy)\\s((\\d+)[\\w\\.-]+)/i // Ares/OSSProxy\n ], [NAME, VERSION], [\n\n /(audacious|audimusicstream|amarok|bass|core|dalvik|gnomemplayer|music on console|nsplayer|psp-internetradioplayer|videos)\\/((\\d+)[\\w\\.-]+)/i,\n // Audacious/AudiMusicStream/Amarok/BASS/OpenCORE/Dalvik/GnomeMplayer/MoC\n // NSPlayer/PSP-InternetRadioPlayer/Videos\n /(clementine|music player daemon)\\s((\\d+)[\\w\\.-]+)/i, // Clementine/MPD\n /(lg player|nexplayer)\\s((\\d+)[\\d\\.]+)/i,\n /player\\/(nexplayer|lg player)\\s((\\d+)[\\w\\.-]+)/i // NexPlayer/LG Player\n ], [NAME, VERSION], [\n /(nexplayer)\\s((\\d+)[\\w\\.-]+)/i // Nexplayer\n ], [NAME, VERSION], [\n\n /(flrp)\\/((\\d+)[\\w\\.-]+)/i // Flip Player\n ], [[NAME, 'Flip Player'], VERSION], [\n\n /(fstream|nativehost|queryseekspider|ia-archiver|facebookexternalhit)/i\n // FStream/NativeHost/QuerySeekSpider/IA Archiver/facebookexternalhit\n ], [NAME], [\n\n /(gstreamer) souphttpsrc (?:\\([^\\)]+\\)){0,1} libsoup\\/((\\d+)[\\w\\.-]+)/i\n // Gstreamer\n ], [NAME, VERSION], [\n\n /(htc streaming player)\\s[\\w_]+\\s\\/\\s((\\d+)[\\d\\.]+)/i, // HTC Streaming Player\n /(java|python-urllib|python-requests|wget|libcurl)\\/((\\d+)[\\w\\.-_]+)/i,\n // Java/urllib/requests/wget/cURL\n /(lavf)((\\d+)[\\d\\.]+)/i // Lavf (FFMPEG)\n ], [NAME, VERSION], [\n\n /(htc_one_s)\\/((\\d+)[\\d\\.]+)/i // HTC One S\n ], [[NAME, /_/g, ' '], VERSION], [\n\n /(mplayer)(?:\\s|\\/)(?:(?:sherpya-){0,1}svn)(?:-|\\s)(r\\d+(?:-\\d+[\\w\\.-]+){0,1})/i\n // MPlayer SVN\n ], [NAME, VERSION], [\n\n /(mplayer)(?:\\s|\\/|[unkow-]+)((\\d+)[\\w\\.-]+)/i // MPlayer\n ], [NAME, VERSION], [\n\n /(mplayer)/i, // MPlayer (no other info)\n /(yourmuze)/i, // YourMuze\n /(media player classic|nero showtime)/i // Media Player Classic/Nero ShowTime\n ], [NAME], [\n\n /(nero (?:home|scout))\\/((\\d+)[\\w\\.-]+)/i // Nero Home/Nero Scout\n ], [NAME, VERSION], [\n\n /(nokia\\d+)\\/((\\d+)[\\w\\.-]+)/i // Nokia\n ], [NAME, VERSION], [\n\n /\\s(songbird)\\/((\\d+)[\\w\\.-]+)/i // Songbird/Philips-Songbird\n ], [NAME, VERSION], [\n\n /(winamp)3 version ((\\d+)[\\w\\.-]+)/i, // Winamp\n /(winamp)\\s((\\d+)[\\w\\.-]+)/i,\n /(winamp)mpeg\\/((\\d+)[\\w\\.-]+)/i\n ], [NAME, VERSION], [\n\n /(ocms-bot|tapinradio|tunein radio|unknown|winamp|inlight radio)/i // OCMS-bot/tap in radio/tunein/unknown/winamp (no other info)\n // inlight radio\n ], [NAME], [\n\n /(quicktime|rma|radioapp|radioclientapplication|soundtap|totem|stagefright|streamium)\\/((\\d+)[\\w\\.-]+)/i\n // QuickTime/RealMedia/RadioApp/RadioClientApplication/\n // SoundTap/Totem/Stagefright/Streamium\n ], [NAME, VERSION], [\n\n /(smp)((\\d+)[\\d\\.]+)/i // SMP\n ], [NAME, VERSION], [\n\n /(vlc) media player - version ((\\d+)[\\w\\.]+)/i, // VLC Videolan\n /(vlc)\\/((\\d+)[\\w\\.-]+)/i,\n /(xbmc|gvfs|xine|xmms|irapp)\\/((\\d+)[\\w\\.-]+)/i, // XBMC/gvfs/Xine/XMMS/irapp\n /(foobar2000)\\/((\\d+)[\\d\\.]+)/i, // Foobar2000\n /(itunes)\\/((\\d+)[\\d\\.]+)/i // iTunes\n ], [NAME, VERSION], [\n\n /(wmplayer)\\/((\\d+)[\\w\\.-]+)/i, // Windows Media Player\n /(windows-media-player)\\/((\\d+)[\\w\\.-]+)/i\n ], [[NAME, /-/g, ' '], VERSION], [\n\n /windows\\/((\\d+)[\\w\\.-]+) upnp\\/[\\d\\.]+ dlnadoc\\/[\\d\\.]+ (home media server)/i\n // Windows Media Server\n ], [VERSION, [NAME, 'Windows']], [\n\n /(com\\.riseupradioalarm)\\/((\\d+)[\\d\\.]*)/i // RiseUP Radio Alarm\n ], [NAME, VERSION], [\n\n /(rad.io)\\s((\\d+)[\\d\\.]+)/i, // Rad.io\n /(radio.(?:de|at|fr))\\s((\\d+)[\\d\\.]+)/i\n ], [[NAME, 'rad.io'], VERSION]\n\n //////////////////////\n // Media players END\n ////////////////////*/\n\n ],\n\n cpu : [[\n\n /(?:(amd|x(?:(?:86|64)[_-])?|wow|win)64)[;\\)]/i // AMD64\n ], [[ARCHITECTURE, 'amd64']], [\n\n /(ia32(?=;))/i // IA32 (quicktime)\n ], [[ARCHITECTURE, util.lowerize]], [\n\n /((?:i[346]|x)86)[;\\)]/i // IA32\n ], [[ARCHITECTURE, 'ia32']], [\n\n // PocketPC mistakenly identified as PowerPC\n /windows\\s(ce|mobile);\\sppc;/i\n ], [[ARCHITECTURE, 'arm']], [\n\n /((?:ppc|powerpc)(?:64)?)(?:\\smac|;|\\))/i // PowerPC\n ], [[ARCHITECTURE, /ower/, '', util.lowerize]], [\n\n /(sun4\\w)[;\\)]/i // SPARC\n ], [[ARCHITECTURE, 'sparc']], [\n\n /((?:avr32|ia64(?=;))|68k(?=\\))|arm(?:64|(?=v\\d+;))|(?=atmel\\s)avr|(?:irix|mips|sparc)(?:64)?(?=;)|pa-risc)/i\n // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC\n ], [[ARCHITECTURE, util.lowerize]]\n ],\n\n device : [[\n\n /\\((ipad|playbook);[\\w\\s\\);-]+(rim|apple)/i // iPad/PlayBook\n ], [MODEL, VENDOR, [TYPE, TABLET]], [\n\n /applecoremedia\\/[\\w\\.]+ \\((ipad)/ // iPad\n ], [MODEL, [VENDOR, 'Apple'], [TYPE, TABLET]], [\n\n /(apple\\s{0,1}tv)/i // Apple TV\n ], [[MODEL, 'Apple TV'], [VENDOR, 'Apple']], [\n\n /(archos)\\s(gamepad2?)/i, // Archos\n /(hp).+(touchpad)/i, // HP TouchPad\n /(hp).+(tablet)/i, // HP Tablet\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /\\s(nook)[\\w\\s]+build\\/(\\w+)/i, // Nook\n /(dell)\\s(strea[kpr\\s\\d]*[\\dko])/i // Dell Streak\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /(kf[A-z]+)\\sbuild\\/[\\w\\.]+.*silk\\//i // Kindle Fire HD\n ], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [\n /(sd|kf)[0349hijorstuw]+\\sbuild\\/[\\w\\.]+.*silk\\//i // Fire Phone\n ], [[MODEL, mapper.str, maps.device.amazon.model], [VENDOR, 'Amazon'], [TYPE, MOBILE]], [\n\n /\\((ip[honed|\\s\\w*]+);.+(apple)/i // iPod/iPhone\n ], [MODEL, VENDOR, [TYPE, MOBILE]], [\n /\\((ip[honed|\\s\\w*]+);/i // iPod/iPhone\n ], [MODEL, [VENDOR, 'Apple'], [TYPE, MOBILE]], [\n\n /(blackberry)[\\s-]?(\\w+)/i, // BlackBerry\n /(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[\\s_-]?([\\w-]+)*/i,\n // BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron\n /(hp)\\s([\\w\\s]+\\w)/i, // HP iPAQ\n /(asus)-?(\\w+)/i // Asus\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n /\\(bb10;\\s(\\w+)/i // BlackBerry 10\n ], [MODEL, [VENDOR, 'BlackBerry'], [TYPE, MOBILE]], [\n // Asus Tablets\n /android.+(transfo[prime\\s]{4,10}\\s\\w+|eeepc|slider\\s\\w+|nexus 7|padfone)/i\n ], [MODEL, [VENDOR, 'Asus'], [TYPE, TABLET]], [\n\n /(sony)\\s(tablet\\s[ps])\\sbuild\\//i, // Sony\n /(sony)?(?:sgp.+)\\sbuild\\//i\n ], [[VENDOR, 'Sony'], [MODEL, 'Xperia Tablet'], [TYPE, TABLET]], [\n /android.+\\s([c-g]\\d{4}|so[-l]\\w+)\\sbuild\\//i\n ], [MODEL, [VENDOR, 'Sony'], [TYPE, MOBILE]], [\n\n /\\s(ouya)\\s/i, // Ouya\n /(nintendo)\\s([wids3u]+)/i // Nintendo\n ], [VENDOR, MODEL, [TYPE, CONSOLE]], [\n\n /android.+;\\s(shield)\\sbuild/i // Nvidia\n ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [\n\n /(playstation\\s[34portablevi]+)/i // Playstation\n ], [MODEL, [VENDOR, 'Sony'], [TYPE, CONSOLE]], [\n\n /(sprint\\s(\\w+))/i // Sprint Phones\n ], [[VENDOR, mapper.str, maps.device.sprint.vendor], [MODEL, mapper.str, maps.device.sprint.model], [TYPE, MOBILE]], [\n\n /(lenovo)\\s?(S(?:5000|6000)+(?:[-][\\w+]))/i // Lenovo tablets\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /(htc)[;_\\s-]+([\\w\\s]+(?=\\))|\\w+)*/i, // HTC\n /(zte)-(\\w+)*/i, // ZTE\n /(alcatel|geeksphone|lenovo|nexian|panasonic|(?=;\\s)sony)[_\\s-]?([\\w-]+)*/i\n // Alcatel/GeeksPhone/Lenovo/Nexian/Panasonic/Sony\n ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [\n\n /(nexus\\s9)/i // HTC Nexus 9\n ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [\n\n /d\\/huawei([\\w\\s-]+)[;\\)]/i,\n /(nexus\\s6p)/i // Huawei\n ], [MODEL, [VENDOR, 'Huawei'], [TYPE, MOBILE]], [\n\n /(microsoft);\\s(lumia[\\s\\w]+)/i // Microsoft Lumia\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /[\\s\\(;](xbox(?:\\sone)?)[\\s\\);]/i // Microsoft Xbox\n ], [MODEL, [VENDOR, 'Microsoft'], [TYPE, CONSOLE]], [\n /(kin\\.[onetw]{3})/i // Microsoft Kin\n ], [[MODEL, /\\./g, ' '], [VENDOR, 'Microsoft'], [TYPE, MOBILE]], [\n\n // Motorola\n /\\s(milestone|droid(?:[2-4x]|\\s(?:bionic|x2|pro|razr))?(:?\\s4g)?)[\\w\\s]+build\\//i,\n /mot[\\s-]?(\\w+)*/i,\n /(XT\\d{3,4}) build\\//i,\n /(nexus\\s6)/i\n ], [MODEL, [VENDOR, 'Motorola'], [TYPE, MOBILE]], [\n /android.+\\s(mz60\\d|xoom[\\s2]{0,2})\\sbuild\\//i\n ], [MODEL, [VENDOR, 'Motorola'], [TYPE, TABLET]], [\n\n /hbbtv\\/\\d+\\.\\d+\\.\\d+\\s+\\([\\w\\s]*;\\s*(\\w[^;]*);([^;]*)/i // HbbTV devices\n ], [[VENDOR, util.trim], [MODEL, util.trim], [TYPE, SMARTTV]], [\n\n /hbbtv.+maple;(\\d+)/i\n ], [[MODEL, /^/, 'SmartTV'], [VENDOR, 'Samsung'], [TYPE, SMARTTV]], [\n\n /\\(dtv[\\);].+(aquos)/i // Sharp\n ], [MODEL, [VENDOR, 'Sharp'], [TYPE, SMARTTV]], [\n\n /android.+((sch-i[89]0\\d|shw-m380s|gt-p\\d{4}|gt-n\\d+|sgh-t8[56]9|nexus 10))/i,\n /((SM-T\\w+))/i\n ], [[VENDOR, 'Samsung'], MODEL, [TYPE, TABLET]], [ // Samsung\n /smart-tv.+(samsung)/i\n ], [VENDOR, [TYPE, SMARTTV], MODEL], [\n /((s[cgp]h-\\w+|gt-\\w+|galaxy\\snexus|sm-\\w[\\w\\d]+))/i,\n /(sam[sung]*)[\\s-]*(\\w+-?[\\w-]*)*/i,\n /sec-((sgh\\w+))/i\n ], [[VENDOR, 'Samsung'], MODEL, [TYPE, MOBILE]], [\n\n /sie-(\\w+)*/i // Siemens\n ], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [\n\n /(maemo|nokia).*(n900|lumia\\s\\d+)/i, // Nokia\n /(nokia)[\\s_-]?([\\w-]+)*/i\n ], [[VENDOR, 'Nokia'], MODEL, [TYPE, MOBILE]], [\n\n /android\\s3\\.[\\s\\w;-]{10}(a\\d{3})/i // Acer\n ], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [\n\n /android.+([vl]k\\-?\\d{3})\\s+build/i // LG Tablet\n ], [MODEL, [VENDOR, 'LG'], [TYPE, TABLET]], [\n /android\\s3\\.[\\s\\w;-]{10}(lg?)-([06cv9]{3,4})/i // LG Tablet\n ], [[VENDOR, 'LG'], MODEL, [TYPE, TABLET]], [\n /(lg) netcast\\.tv/i // LG SmartTV\n ], [VENDOR, MODEL, [TYPE, SMARTTV]], [\n /(nexus\\s[45])/i, // LG\n /lg[e;\\s\\/-]+(\\w+)*/i,\n /android.+lg(\\-?[\\d\\w]+)\\s+build/i\n ], [MODEL, [VENDOR, 'LG'], [TYPE, MOBILE]], [\n\n /android.+(ideatab[a-z0-9\\-\\s]+)/i // Lenovo\n ], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [\n\n /linux;.+((jolla));/i // Jolla\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /((pebble))app\\/[\\d\\.]+\\s/i // Pebble\n ], [VENDOR, MODEL, [TYPE, WEARABLE]], [\n\n /android.+;\\s(oppo)\\s?([\\w\\s]+)\\sbuild/i // OPPO\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /crkey/i // Google Chromecast\n ], [[MODEL, 'Chromecast'], [VENDOR, 'Google']], [\n\n /android.+;\\s(glass)\\s\\d/i // Google Glass\n ], [MODEL, [VENDOR, 'Google'], [TYPE, WEARABLE]], [\n\n /android.+;\\s(pixel c)\\s/i // Google Pixel C\n ], [MODEL, [VENDOR, 'Google'], [TYPE, TABLET]], [\n\n /android.+;\\s(pixel xl|pixel)\\s/i // Google Pixel\n ], [MODEL, [VENDOR, 'Google'], [TYPE, MOBILE]], [\n\n /android.+(\\w+)\\s+build\\/hm\\1/i, // Xiaomi Hongmi 'numeric' models\n /android.+(hm[\\s\\-_]*note?[\\s_]*(?:\\d\\w)?)\\s+build/i, // Xiaomi Hongmi\n /android.+(mi[\\s\\-_]*(?:one|one[\\s_]plus|note lte)?[\\s_]*(?:\\d\\w)?)\\s+build/i, // Xiaomi Mi\n /android.+(redmi[\\s\\-_]*(?:note)?(?:[\\s_]*[\\w\\s]+)?)\\s+build/i // Redmi Phones\n ], [[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, MOBILE]], [\n /android.+(mi[\\s\\-_]*(?:pad)?(?:[\\s_]*[\\w\\s]+)?)\\s+build/i // Mi Pad tablets\n ],[[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, TABLET]], [\n /android.+;\\s(m[1-5]\\snote)\\sbuild/i // Meizu Tablet\n ], [MODEL, [VENDOR, 'Meizu'], [TYPE, TABLET]], [\n\n /android.+a000(1)\\s+build/i // OnePlus\n ], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [\n\n /android.+[;\\/]\\s*(RCT[\\d\\w]+)\\s+build/i // RCA Tablets\n ], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(Venue[\\d\\s]*)\\s+build/i // Dell Venue Tablets\n ], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(Q[T|M][\\d\\w]+)\\s+build/i // Verizon Tablet\n ], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s+(Barnes[&\\s]+Noble\\s+|BN[RT])(V?.*)\\s+build/i // Barnes & Noble Tablet\n ], [[VENDOR, 'Barnes & Noble'], MODEL, [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s+(TM\\d{3}.*\\b)\\s+build/i // Barnes & Noble Tablet\n ], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(zte)?.+(k\\d{2})\\s+build/i // ZTE K Series Tablet\n ], [[VENDOR, 'ZTE'], MODEL, [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(gen\\d{3})\\s+build.*49h/i // Swiss GEN Mobile\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [\n\n /android.+[;\\/]\\s*(zur\\d{3})\\s+build/i // Swiss ZUR Tablet\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*((Zeki)?TB.*\\b)\\s+build/i // Zeki Tablets\n ], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [\n\n /(android).+[;\\/]\\s+([YR]\\d{2}x?.*)\\s+build/i,\n /android.+[;\\/]\\s+(Dragon[\\-\\s]+Touch\\s+|DT)(.+)\\s+build/i // Dragon Touch Tablet\n ], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(NS-?.+)\\s+build/i // Insignia Tablets\n ], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*((NX|Next)-?.+)\\s+build/i // NextBook Tablets\n ], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(Xtreme\\_?)?(V(1[045]|2[015]|30|40|60|7[05]|90))\\s+build/i\n ], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [ // Voice Xtreme Phones\n\n /android.+[;\\/]\\s*(LVTEL\\-?)?(V1[12])\\s+build/i // LvTel Phones\n ], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [\n\n /android.+[;\\/]\\s*(V(100MD|700NA|7011|917G).*\\b)\\s+build/i // Envizen Tablets\n ], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(Le[\\s\\-]+Pan)[\\s\\-]+(.*\\b)\\s+build/i // Le Pan Tablets\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(Trio[\\s\\-]*.*)\\s+build/i // MachSpeed Tablets\n ], [MODEL, [VENDOR, 'MachSpeed'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(Trinity)[\\-\\s]*(T\\d{3})\\s+build/i // Trinity Tablets\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*TU_(1491)\\s+build/i // Rotor Tablets\n ], [MODEL, [VENDOR, 'Rotor'], [TYPE, TABLET]], [\n\n /android.+(KS(.+))\\s+build/i // Amazon Kindle Tablets\n ], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [\n\n /android.+(Gigaset)[\\s\\-]+(Q.+)\\s+build/i // Gigaset Tablets\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /\\s(tablet|tab)[;\\/]/i, // Unidentifiable Tablet\n /\\s(mobile)(?:[;\\/]|\\ssafari)/i // Unidentifiable Mobile\n ], [[TYPE, util.lowerize], VENDOR, MODEL], [\n\n /(android.+)[;\\/].+build/i // Generic Android Device\n ], [MODEL, [VENDOR, 'Generic']]\n\n\n /*//////////////////////////\n // TODO: move to string map\n ////////////////////////////\n\n /(C6603)/i // Sony Xperia Z C6603\n ], [[MODEL, 'Xperia Z C6603'], [VENDOR, 'Sony'], [TYPE, MOBILE]], [\n /(C6903)/i // Sony Xperia Z 1\n ], [[MODEL, 'Xperia Z 1'], [VENDOR, 'Sony'], [TYPE, MOBILE]], [\n\n /(SM-G900[F|H])/i // Samsung Galaxy S5\n ], [[MODEL, 'Galaxy S5'], [VENDOR, 'Samsung'], [TYPE, MOBILE]], [\n /(SM-G7102)/i // Samsung Galaxy Grand 2\n ], [[MODEL, 'Galaxy Grand 2'], [VENDOR, 'Samsung'], [TYPE, MOBILE]], [\n /(SM-G530H)/i // Samsung Galaxy Grand Prime\n ], [[MODEL, 'Galaxy Grand Prime'], [VENDOR, 'Samsung'], [TYPE, MOBILE]], [\n /(SM-G313HZ)/i // Samsung Galaxy V\n ], [[MODEL, 'Galaxy V'], [VENDOR, 'Samsung'], [TYPE, MOBILE]], [\n /(SM-T805)/i // Samsung Galaxy Tab S 10.5\n ], [[MODEL, 'Galaxy Tab S 10.5'], [VENDOR, 'Samsung'], [TYPE, TABLET]], [\n /(SM-G800F)/i // Samsung Galaxy S5 Mini\n ], [[MODEL, 'Galaxy S5 Mini'], [VENDOR, 'Samsung'], [TYPE, MOBILE]], [\n /(SM-T311)/i // Samsung Galaxy Tab 3 8.0\n ], [[MODEL, 'Galaxy Tab 3 8.0'], [VENDOR, 'Samsung'], [TYPE, TABLET]], [\n\n /(T3C)/i // Advan Vandroid T3C\n ], [MODEL, [VENDOR, 'Advan'], [TYPE, TABLET]], [\n /(ADVAN T1J\\+)/i // Advan Vandroid T1J+\n ], [[MODEL, 'Vandroid T1J+'], [VENDOR, 'Advan'], [TYPE, TABLET]], [\n /(ADVAN S4A)/i // Advan Vandroid S4A\n ], [[MODEL, 'Vandroid S4A'], [VENDOR, 'Advan'], [TYPE, MOBILE]], [\n\n /(V972M)/i // ZTE V972M\n ], [MODEL, [VENDOR, 'ZTE'], [TYPE, MOBILE]], [\n\n /(i-mobile)\\s(IQ\\s[\\d\\.]+)/i // i-mobile IQ\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n /(IQ6.3)/i // i-mobile IQ IQ 6.3\n ], [[MODEL, 'IQ 6.3'], [VENDOR, 'i-mobile'], [TYPE, MOBILE]], [\n /(i-mobile)\\s(i-style\\s[\\d\\.]+)/i // i-mobile i-STYLE\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n /(i-STYLE2.1)/i // i-mobile i-STYLE 2.1\n ], [[MODEL, 'i-STYLE 2.1'], [VENDOR, 'i-mobile'], [TYPE, MOBILE]], [\n\n /(mobiistar touch LAI 512)/i // mobiistar touch LAI 512\n ], [[MODEL, 'Touch LAI 512'], [VENDOR, 'mobiistar'], [TYPE, MOBILE]], [\n\n /////////////\n // END TODO\n ///////////*/\n\n ],\n\n engine : [[\n\n /windows.+\\sedge\\/([\\w\\.]+)/i // EdgeHTML\n ], [VERSION, [NAME, 'EdgeHTML']], [\n\n /(presto)\\/([\\w\\.]+)/i, // Presto\n /(webkit|trident|netfront|netsurf|amaya|lynx|w3m)\\/([\\w\\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m\n /(khtml|tasman|links)[\\/\\s]\\(?([\\w\\.]+)/i, // KHTML/Tasman/Links\n /(icab)[\\/\\s]([23]\\.[\\d\\.]+)/i // iCab\n ], [NAME, VERSION], [\n\n /rv\\:([\\w\\.]+).*(gecko)/i // Gecko\n ], [VERSION, NAME]\n ],\n\n os : [[\n\n // Windows based\n /microsoft\\s(windows)\\s(vista|xp)/i // Windows (iTunes)\n ], [NAME, VERSION], [\n /(windows)\\snt\\s6\\.2;\\s(arm)/i, // Windows RT\n /(windows\\sphone(?:\\sos)*)[\\s\\/]?([\\d\\.\\s]+\\w)*/i, // Windows Phone\n /(windows\\smobile|windows)[\\s\\/]?([ntce\\d\\.\\s]+\\w)/i\n ], [NAME, [VERSION, mapper.str, maps.os.windows.version]], [\n /(win(?=3|9|n)|win\\s9x\\s)([nt\\d\\.]+)/i\n ], [[NAME, 'Windows'], [VERSION, mapper.str, maps.os.windows.version]], [\n\n // Mobile/Embedded OS\n /\\((bb)(10);/i // BlackBerry 10\n ], [[NAME, 'BlackBerry'], VERSION], [\n /(blackberry)\\w*\\/?([\\w\\.]+)*/i, // Blackberry\n /(tizen)[\\/\\s]([\\w\\.]+)/i, // Tizen\n /(android|webos|palm\\sos|qnx|bada|rim\\stablet\\sos|meego|contiki)[\\/\\s-]?([\\w\\.]+)*/i,\n // Android/WebOS/Palm/QNX/Bada/RIM/MeeGo/Contiki\n /linux;.+(sailfish);/i // Sailfish OS\n ], [NAME, VERSION], [\n /(symbian\\s?os|symbos|s60(?=;))[\\/\\s-]?([\\w\\.]+)*/i // Symbian\n ], [[NAME, 'Symbian'], VERSION], [\n /\\((series40);/i // Series 40\n ], [NAME], [\n /mozilla.+\\(mobile;.+gecko.+firefox/i // Firefox OS\n ], [[NAME, 'Firefox OS'], VERSION], [\n\n // Console\n /(nintendo|playstation)\\s([wids34portablevu]+)/i, // Nintendo/Playstation\n\n // GNU/Linux based\n /(mint)[\\/\\s\\(]?(\\w+)*/i, // Mint\n /(mageia|vectorlinux)[;\\s]/i, // Mageia/VectorLinux\n /(joli|[kxln]?ubuntu|debian|[open]*suse|gentoo|(?=\\s)arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus)[\\/\\s-]?(?!chrom)([\\w\\.-]+)*/i,\n // Joli/Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware\n // Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus\n /(hurd|linux)\\s?([\\w\\.]+)*/i, // Hurd/Linux\n /(gnu)\\s?([\\w\\.]+)*/i // GNU\n ], [NAME, VERSION], [\n\n /(cros)\\s[\\w]+\\s([\\w\\.]+\\w)/i // Chromium OS\n ], [[NAME, 'Chromium OS'], VERSION],[\n\n // Solaris\n /(sunos)\\s?([\\w\\.]+\\d)*/i // Solaris\n ], [[NAME, 'Solaris'], VERSION], [\n\n // BSD based\n /\\s([frentopc-]{0,4}bsd|dragonfly)\\s?([\\w\\.]+)*/i // FreeBSD/NetBSD/OpenBSD/PC-BSD/DragonFly\n ], [NAME, VERSION],[\n\n /(haiku)\\s(\\w+)/i // Haiku\n ], [NAME, VERSION],[\n\n /cfnetwork\\/.+darwin/i,\n /ip[honead]+(?:.*os\\s([\\w]+)\\slike\\smac|;\\sopera)/i // iOS\n ], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [\n\n /(mac\\sos\\sx)\\s?([\\w\\s\\.]+\\w)*/i,\n /(macintosh|mac(?=_powerpc)\\s)/i // Mac OS\n ], [[NAME, 'Mac OS'], [VERSION, /_/g, '.']], [\n\n // Other\n /((?:open)?solaris)[\\/\\s-]?([\\w\\.]+)*/i, // Solaris\n /(aix)\\s((\\d)(?=\\.|\\)|\\s)[\\w\\.]*)*/i, // AIX\n /(plan\\s9|minix|beos|os\\/2|amigaos|morphos|risc\\sos|openvms)/i,\n // Plan9/Minix/BeOS/OS2/AmigaOS/MorphOS/RISCOS/OpenVMS\n /(unix)\\s?([\\w\\.]+)*/i // UNIX\n ], [NAME, VERSION]\n ]\n };\n\n\n /////////////////\n // Constructor\n ////////////////\n /*\n var Browser = function (name, version) {\n this[NAME] = name;\n this[VERSION] = version;\n };\n var CPU = function (arch) {\n this[ARCHITECTURE] = arch;\n };\n var Device = function (vendor, model, type) {\n this[VENDOR] = vendor;\n this[MODEL] = model;\n this[TYPE] = type;\n };\n var Engine = Browser;\n var OS = Browser;\n */\n var UAParser = function (uastring, extensions) {\n\n if (typeof uastring === 'object') {\n extensions = uastring;\n uastring = undefined;\n }\n\n if (!(this instanceof UAParser)) {\n return new UAParser(uastring, extensions).getResult();\n }\n\n var ua = uastring || ((window && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY);\n var rgxmap = extensions ? util.extend(regexes, extensions) : regexes;\n //var browser = new Browser();\n //var cpu = new CPU();\n //var device = new Device();\n //var engine = new Engine();\n //var os = new OS();\n\n this.getBrowser = function () {\n var browser = { name: undefined, version: undefined };\n mapper.rgx.call(browser, ua, rgxmap.browser);\n browser.major = util.major(browser.version); // deprecated\n return browser;\n };\n this.getCPU = function () {\n var cpu = { architecture: undefined };\n mapper.rgx.call(cpu, ua, rgxmap.cpu);\n return cpu;\n };\n this.getDevice = function () {\n var device = { vendor: undefined, model: undefined, type: undefined };\n mapper.rgx.call(device, ua, rgxmap.device);\n return device;\n };\n this.getEngine = function () {\n var engine = { name: undefined, version: undefined };\n mapper.rgx.call(engine, ua, rgxmap.engine);\n return engine;\n };\n this.getOS = function () {\n var os = { name: undefined, version: undefined };\n mapper.rgx.call(os, ua, rgxmap.os);\n return os;\n };\n this.getResult = function () {\n return {\n ua : this.getUA(),\n browser : this.getBrowser(),\n engine : this.getEngine(),\n os : this.getOS(),\n device : this.getDevice(),\n cpu : this.getCPU()\n };\n };\n this.getUA = function () {\n return ua;\n };\n this.setUA = function (uastring) {\n ua = uastring;\n //browser = new Browser();\n //cpu = new CPU();\n //device = new Device();\n //engine = new Engine();\n //os = new OS();\n return this;\n };\n return this;\n };\n\n UAParser.VERSION = LIBVERSION;\n UAParser.BROWSER = {\n NAME : NAME,\n MAJOR : MAJOR, // deprecated\n VERSION : VERSION\n };\n UAParser.CPU = {\n ARCHITECTURE : ARCHITECTURE\n };\n UAParser.DEVICE = {\n MODEL : MODEL,\n VENDOR : VENDOR,\n TYPE : TYPE,\n CONSOLE : CONSOLE,\n MOBILE : MOBILE,\n SMARTTV : SMARTTV,\n TABLET : TABLET,\n WEARABLE: WEARABLE,\n EMBEDDED: EMBEDDED\n };\n UAParser.ENGINE = {\n NAME : NAME,\n VERSION : VERSION\n };\n UAParser.OS = {\n NAME : NAME,\n VERSION : VERSION\n };\n //UAParser.Utils = util;\n\n ///////////\n // Export\n //////////\n\n\n // check js environment\n if ('object' !== UNDEF_TYPE) {\n // nodejs env\n if ('object' !== UNDEF_TYPE && module.exports) {\n exports = module.exports = UAParser;\n }\n // TODO: test!!!!!!!!\n /*\n if (require && require.main === module && process) {\n // cli\n var jsonize = function (arr) {\n var res = [];\n for (var i in arr) {\n res.push(new UAParser(arr[i]).getResult());\n }\n process.stdout.write(JSON.stringify(res, null, 2) + '\\n');\n };\n if (process.stdin.isTTY) {\n // via args\n jsonize(process.argv.slice(2));\n } else {\n // via pipe\n var str = '';\n process.stdin.on('readable', function() {\n var read = process.stdin.read();\n if (read !== null) {\n str += read;\n }\n });\n process.stdin.on('end', function () {\n jsonize(str.replace(/\\n$/, '').split('\\n'));\n });\n }\n }\n */\n exports.UAParser = UAParser;\n } else {\n // requirejs env (optional)\n if (typeof(undefined) === FUNC_TYPE && undefined.amd) {\n undefined(function () {\n return UAParser;\n });\n } else if (window) {\n // browser env\n window.UAParser = UAParser;\n }\n }\n\n // jQuery/Zepto specific (optional)\n // Note:\n // In AMD env the global scope should be kept clean, but jQuery is an exception.\n // jQuery always exports to global scope, unless jQuery.noConflict(true) is used,\n // and we should catch that.\n var $ = window && (window.jQuery || window.Zepto);\n if (typeof $ !== UNDEF_TYPE) {\n var parser = new UAParser();\n $.ua = parser.getResult();\n $.ua.get = function () {\n return parser.getUA();\n };\n $.ua.set = function (uastring) {\n parser.setUA(uastring);\n var result = parser.getResult();\n for (var prop in result) {\n $.ua[prop] = result[prop];\n }\n };\n }\n\n})(typeof window === 'object' ? window : commonjsGlobal);\n});\nvar uaParser_1 = uaParser.UAParser;\n\n/**\n * the handler to generate an deep traversal handler\n * @param {Function} fn the function you wanna run when you reach in the deep property\n * @return {Function} the handler\n */\nfunction genTraversalHandler(fn) {\n var setter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (target, key, value) {\n target[key] = value;\n };\n\n // use recursive to move what in source to the target\n // if you do not provide a target, we will create a new target\n function recursiveFn(source, target, key) {\n if (isArray(source) || isObject(source)) {\n target = isPrimitive(target) ? isObject(source) ? {} : [] : target;\n for (var _key in source) {\n // $FlowFixMe: support computed key here\n setter(target, _key, recursiveFn(source[_key], target[_key], _key));\n // target[key] = recursiveFn(source[key], target[key], key);\n }\n return target;\n }\n return fn(source, target, key);\n }\n return recursiveFn;\n}\nvar _deepAssign = genTraversalHandler(function (val) {\n return val;\n});\n/**\n * deeply clone an object\n * @param {Array|Object} source if you pass in other type, it will throw an error\n * @return {clone-target} the new Object\n */\nfunction deepClone(source) {\n if (isPrimitive(source)) {\n throw new TypeError('deepClone only accept non primitive type');\n }\n return _deepAssign(source);\n}\n/**\n * merge multiple objects\n * @param {...Object} args [description]\n * @return {merge-object} [description]\n */\nfunction deepAssign() {\n for (var _len = arguments.length, args = Array(_len), _key2 = 0; _key2 < _len; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n if (args.length < 2) {\n throw new Error('deepAssign accept two and more argument');\n }\n for (var i = args.length - 1; i > -1; i--) {\n if (isPrimitive(args[i])) {\n throw new TypeError('deepAssign only accept non primitive type');\n }\n }\n var target = args.shift();\n args.forEach(function (source) {\n return _deepAssign(source, target);\n });\n return target;\n}\n\n/**\n * camelize any string, e.g hello world -> helloWorld\n * @param {string} str only accept string!\n * @return {string} camelize string\n */\nfunction camelize(str, isBig) {\n return str.replace(/(^|[^a-zA-Z]+)([a-zA-Z])/g, function (match, spilt, initials, index) {\n return !isBig && index === 0 ? initials.toLowerCase() : initials.toUpperCase();\n });\n}\n/**\n * hypenate any string e.g hello world -> hello-world\n * @param {string} str only accept string\n * @return {string}\n */\nfunction hypenate(str) {\n return camelize(str).replace(/([A-Z])/g, function (match) {\n return '-' + match.toLowerCase();\n });\n}\n\n/**\n * bind the function with some context. we have some fallback strategy here\n * @param {function} fn the function which we need to bind the context on\n * @param {any} context the context object\n */\nfunction bind(fn, context) {\n if (fn.bind) {\n return fn.bind(context);\n } else if (fn.apply) {\n return function __autobind__() {\n for (var _len2 = arguments.length, args = Array(_len2), _key3 = 0; _key3 < _len2; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n return fn.apply(context, args);\n };\n } else {\n return function __autobind__() {\n for (var _len3 = arguments.length, args = Array(_len3), _key4 = 0; _key4 < _len3; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n return fn.call.apply(fn, [context].concat(_toConsumableArray(args)));\n };\n }\n}\n\n/**\n * get an deep property\n */\nfunction getDeepProperty(obj, keys) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n _ref$throwError = _ref.throwError,\n throwError = _ref$throwError === undefined ? false : _ref$throwError,\n backup = _ref.backup;\n\n if (isString(keys)) {\n keys = keys.split('.');\n }\n if (!isArray(keys)) {\n throw new TypeError('keys of getDeepProperty must be string or Array');\n }\n var read = [];\n var target = obj;\n for (var i = 0, len = keys.length; i < len; i++) {\n var key = keys[i];\n if (isVoid(target)) {\n if (throwError) {\n throw new Error('obj' + (read.length > 0 ? '.' + read.join('.') : ' itself') + ' is ' + target);\n } else {\n return backup;\n }\n }\n target = target[key];\n read.push(key);\n }\n return target;\n}\n\n// ********************** judgement ************************\n/**\n * check if the code running in browser environment (not include worker env)\n * @returns {Boolean}\n */\nvar inBrowser = typeof window !== 'undefined' && Object.prototype.toString.call(window) !== '[object Object]';\n\n// ********************** 对象操作 ************************\n/**\n * 转变一个类数组对象为数组\n */\nfunction makeArray(obj) {\n return _Array$from(obj);\n}\n\n/**\n * sort Object attributes by function\n * and transfer them into array\n * @param {Object} obj Object form from numric\n * @param {Function} fn sort function\n * @return {Array} the sorted attirbutes array\n */\nfunction transObjectAttrIntoArray(obj) {\n var fn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (a, b) {\n return +a - +b;\n };\n\n return _Object$keys(obj).sort(fn).reduce(function (order, key) {\n return order.concat(obj[key]);\n }, []);\n}\n/**\n * run a queue one by one.If include function reject or return false it will stop\n * @param {Array} queue the queue which we want to run one by one\n * @return {Promise} tell us whether a queue run finished\n */\nfunction runRejectableQueue(queue) {\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 return new _Promise(function (resolve, reject) {\n var step = function step(index) {\n if (index >= queue.length) {\n resolve();\n return;\n }\n var result = isFunction(queue[index]) ? queue[index].apply(queue, _toConsumableArray(args)) : queue[index];\n if (result === false) return reject('stop');\n return _Promise.resolve(result).then(function () {\n return step(index + 1);\n }).catch(function (err) {\n return reject(err || 'stop');\n });\n };\n step(0);\n });\n}\n/**\n * run a queue one by one.If include function return false it will stop\n * @param {Array} queue the queue which we want to run one by one\n * @return {boolean} tell the user if the queue run finished\n */\nfunction runStoppableQueue(queue) {\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 var step = function step(index) {\n if (index >= queue.length) {\n return true;\n }\n var result = isFunction(queue[index]) ? queue[index].apply(queue, _toConsumableArray(args)) : queue[index];\n if (result === false) return false;\n return step(++index);\n };\n return step(0);\n}\n\n// requestAnimationFrame\nvar raf = inBrowser && (window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame || window.oRequestAnimationFrame) || function (cb) {\n return setTimeout(cb, 17);\n};\n\n// cancelAnimationFrame\nvar caf = inBrowser && (window.cancelAnimationFrame || window.mozCancelAnimationFrame || window.webkitCancelAnimationFrame || window.webkitCancelRequestAnimationFrame || window.msCancelAnimationFrame || window.oCancelAnimationFrame) || function (id) {\n clearTimeout(id);\n};\n\n// 根据要求的位数,将9格式化为 09\\009\\0009...\nfunction strRepeat(num, bit) {\n var pBit = bit;\n num = '' + (num || '');\n var numLen = num.length;\n bit = (bit || numLen) - numLen;\n var paddingStr = bit > 0 ? num.repeat ? '0'.repeat(bit) : new Array(bit + 1).join('0') : '';\n return (paddingStr + num).slice(0, pBit);\n}\n\n// video 时间格式化\nfunction formatTime(time) {\n var hh = Math.floor(time / 3600);\n time = Math.floor(time % 3600);\n var mm = strRepeat(Math.floor(time / 60), 2);\n time = Math.floor(time % 60);\n var ss = strRepeat(time, 2);\n return hh >= 1 ? hh + ':' + mm + ':' + ss : mm + ':' + ss;\n}\n\n// 19.1.2.1 Object.assign(target, source, ...)\n\n\n\n\n\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nvar _objectAssign = !$assign || _fails(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = _toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = _objectGops.f;\n var isEnum = _objectPie.f;\n while (aLen > index) {\n var S = _iobject(arguments[index++]);\n var keys = getSymbols ? _objectKeys(S).concat(getSymbols(S)) : _objectKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n\n// 19.1.3.1 Object.assign(target, source)\n\n\n_export(_export.S + _export.F, 'Object', { assign: _objectAssign });\n\nvar assign = _core.Object.assign;\n\nvar assign$1 = createCommonjsModule(function (module) {\nmodule.exports = { \"default\": assign, __esModule: true };\n});\n\nvar _Object$assign = unwrapExports(assign$1);\n\n/**\n* @module event\n* @author huzunjie\n* @description 自定义事件基础类\n*/\n\n/* 缓存事件监听方法及包装,内部数据格式:\n * targetIndex_: [ [\n * function(){ ... handler ... },\n * function(){ ... handlerWrap ... handler.apply(target, arguments) ... },\n * isOnce\n * ]]\n */\nvar _evtListenerCache = _Object$create(null);\n_evtListenerCache.count = 0;\n\n/**\n * 得到某对象的某事件类型对应的监听队列数组\n * @param {Object} target 发生事件的对象\n * @param {String} type 事件类型(这里的时间类型不只是名称,还是缓存标识,可以通过添加后缀来区分)\n * @return {Array}\n */\nfunction getEvtTypeCache(target, type) {\n\n var evtId = target.__evt_id;\n if (!evtId) {\n\n /* 设置__evt_id不可枚举 */\n Object.defineProperty(target, '__evt_id', {\n writable: true,\n enumerable: false,\n configurable: true\n });\n\n /* 空对象初始化绑定索引 */\n evtId = target.__evt_id = ++_evtListenerCache.count;\n }\n\n var typeCacheKey = evtId + '_' + type;\n var evtTypeCache = _evtListenerCache[typeCacheKey];\n if (!evtTypeCache) {\n evtTypeCache = _evtListenerCache[typeCacheKey] = [];\n }\n\n return evtTypeCache;\n}\n\n/**\n * 触发事件监听方法\n * @param {Object} target 发生事件的对象\n * @param {String} type 事件类型\n * @param {Object} eventObj 触发事件时要传回的event对象\n * @return {undefined}\n */\nfunction emitEventCache(target, type, eventObj) {\n var evt = _Object$create(null);\n evt.type = type;\n evt.target = target;\n if (eventObj) {\n _Object$assign(evt, isObject(eventObj) ? eventObj : { data: eventObj });\n }\n getEvtTypeCache(target, type).forEach(function (item) {\n (item[1] || item[0]).apply(target, [evt]);\n });\n}\n\n/**\n * 添加事件监听到缓存\n * @param {Object} target 发生事件的对象\n * @param {String} type 事件类型\n * @param {Function} handler 监听函数\n * @param {Boolean} isOnce 是否单次执行\n * @param {Function} handlerWrap\n * @return {undefined}\n */\nfunction addEventCache(target, type, handler) {\n var isOnce = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var handlerWrap = arguments[4];\n\n if (isFunction(isOnce) && !handlerWrap) {\n handlerWrap = isOnce;\n isOnce = undefined;\n }\n var handlers = [handler, undefined, isOnce];\n if (isOnce && !handlerWrap) {\n handlerWrap = function handlerWrap() {\n removeEventCache(target, type, handler, isOnce);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n handler.apply(target, args);\n };\n }\n if (handlerWrap) {\n handlers[1] = handlerWrap;\n }\n getEvtTypeCache(target, type).push(handlers);\n}\n\n/**\n * 移除事件监听\n * @param {Object} target 发生事件的对象\n * @param {String} type 事件类型\n * @param {Function} handler 监听函数\n * @return {undefined}\n */\nfunction removeEventCache(target, type, handler) {\n var isOnce = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n var typeCache = getEvtTypeCache(target, type);\n\n if (handler || isOnce) {\n /* 有指定 handler 则清除对应监听 */\n var handlerId = -1;\n var handlerWrap = void 0;\n typeCache.find(function (item, i) {\n if ((!handler || item[0] === handler) && (!isOnce || item[2])) {\n handlerId = i;\n handlerWrap = item[1];\n return true;\n }\n });\n if (handlerId !== -1) {\n typeCache.splice(handlerId, 1);\n }\n return handlerWrap;\n } else {\n /* 未指定 handler 则清除type对应的所有监听 */\n typeCache.length = 0;\n }\n}\n\n/**\n * @class CustEvent\n * @description\n * Event 自定义事件类\n * 1. 可以使用不传参得到的实例作为eventBus使用\n * 2. 可以通过指定target,用多个实例操作同一target对象的事件管理\n * 3. 当设定target时,可以通过设置assign为true,来给target实现\"on\\once\\off\\emit\"方法\n * @param {Object} target 发生事件的对象(空则默认为event实例)\n * @param {Boolean} assign 是否将\"on\\once\\off\\emit\"方法实现到target对象上\n * @return {event}\n */\nvar CustEvent = function () {\n function CustEvent(target, assign) {\n var _this = this;\n\n _classCallCheck(this, CustEvent);\n\n /* 设置__target不可枚举 */\n Object.defineProperty(this, '__target', {\n writable: true,\n enumerable: false,\n configurable: true\n });\n this.__target = this;\n\n if (target) {\n\n if ((typeof target === 'undefined' ? 'undefined' : _typeof(target)) !== 'object') {\n throw new Error('CusEvent target are not object');\n }\n this.__target = target;\n\n /* 为target实现on\\once\\off\\emit */\n if (assign) {\n ['on', 'once', 'off', 'emit'].forEach(function (mth) {\n target[mth] = _this[mth];\n });\n }\n }\n }\n\n /**\n * 添加事件监听\n * @param {String} type 事件类型\n * @param {Function} handler 监听函数\n * @param {Boolean} isOnce 单次监听类型\n * @return {event}\n */\n\n\n _createClass(CustEvent, [{\n key: 'on',\n value: function on(type, handler) {\n var isOnce = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n addEventCache(this.__target, type, handler, isOnce);\n return this;\n }\n\n /**\n * 添加事件监听,并且只执行一次\n * @param {String} type 事件类型\n * @param {Function} handler 监听函数\n * @return {event}\n */\n\n }, {\n key: 'once',\n value: function once(type, handler) {\n return this.on(type, handler, true);\n }\n\n /**\n * 移除事件监听\n * @param {String} type 事件类型\n * @param {Function} handler 监听函数(不指定handler则清除type对应的所有事件监听)\n * @param {Boolean} isOnce 单次监听类型\n * @return {event}\n */\n\n }, {\n key: 'off',\n value: function off(type, handler) {\n var isOnce = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n removeEventCache(this.__target, type, handler, isOnce);\n return this;\n }\n\n /**\n * 触发事件监听函数\n * @param {String} type 事件类型\n * @return {event}\n */\n\n }, {\n key: 'emit',\n value: function emit(type, data) {\n emitEventCache(this.__target, type, { data: data });\n return this;\n }\n }]);\n\n return CustEvent;\n}();\n\n/**\n * @module dom\n * @author huzunjie\n * @description 一些常用的DOM判断及操作方法,可以使用dom.$('*')包装DOM,实现类jQuery的链式操作;当然这里的静态方法也可以直接使用。\n */\n\nvar _divEl = inBrowser ? document.createElement('div') : {};\nvar _textAttrName = 'innerText';\n'textContent' in _divEl && (_textAttrName = 'textContent');\nvar _arrPrototype = Array.prototype;\n\n/**\n * 读取HTML元素属性值\n * @param {HTMLElement} el 目标元素\n * @param {String} attrName 目标属性名称\n * @return {String}\n */\nfunction getAttr(el, attrName) {\n return el.getAttribute(attrName);\n}\n\n/**\n * 设置HTML元素属性值\n * @param {HTMLElement} el 目标元素\n * @param {String} attrName 目标属性名称\n * @param {String} attrVal 目标属性值\n */\nfunction setAttr(el, attrName, attrVal) {\n if (attrVal === undefined) {\n el.removeAttribute(attrName);\n } else {\n el.setAttribute(attrName, attrVal);\n }\n}\n\n/**\n * 为HTML元素添加className\n * @param {HTMLElement} el 目标元素\n * @param {String} cls 要添加的className(多个以空格分割)\n */\nfunction addClassName(el, cls) {\n if (!cls || !(cls = cls.trim())) {\n return;\n }\n var clsArr = cls.split(/\\s+/);\n if (el.classList) {\n clsArr.forEach(function (c) {\n return el.classList.add(c);\n });\n } else {\n var curCls = ' ' + (el.className || '') + ' ';\n clsArr.forEach(function (c) {\n curCls.indexOf(' ' + c + ' ') === -1 && (curCls += ' ' + c);\n });\n el.className = curCls.trim();\n }\n}\n\n/**\n * 为HTML元素移除className\n * @param {HTMLElement} el 目标元素\n * @param {String} cls 要移除的className(多个以空格分割)\n */\nfunction removeClassName(el, cls) {\n if (!cls || !(cls = cls.trim())) {\n return;\n }\n\n var clsArr = cls.split(/\\s+/);\n if (el.classList) {\n clsArr.forEach(function (c) {\n return el.classList.remove(c);\n });\n } else {\n var curCls = ' ' + el.className + ' ';\n clsArr.forEach(function (c) {\n var tar = ' ' + c + ' ';\n while (curCls.indexOf(tar) !== -1) {\n curCls = curCls.replace(tar, ' ');\n }\n });\n el.className = curCls.trim();\n }\n}\n\n/**\n * 检查HTML元素是否已设置className\n * @param {HTMLElement} el 目标元素\n * @param {String} className 要检查的className\n * @return {Boolean}\n */\nfunction hasClassName(el, className) {\n return new RegExp('(?:^|\\\\s)' + className + '(?=\\\\s|$)').test(el.className);\n}\n\n/**\n * addEventListener 是否已支持 passive\n * @return {Boolean}\n */\nvar supportsPassive = false;\ntry {\n var opts = Object.defineProperty({}, 'passive', {\n get: function get() {\n supportsPassive = true;\n }\n });\n if (inBrowser) window.addEventListener('test', null, opts);\n} catch (e) {\n console.error(e);\n}\n\n/**\n * 为HTML元素移除事件监听\n * @param {HTMLElement} el 目标元素\n * @param {String} type 事件名称\n * @param {Function} handler 处理函数\n * @param {Boolean} once 是否只监听一次\n * @param {Boolean} capture 是否在捕获阶段的监听\n */\nfunction removeEvent(el, type, handler) {\n var once = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var capture = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n if (capture !== undefined && !isBoolean(capture) && supportsPassive) {\n capture = { passive: true };\n }\n if (once) {\n /* 尝试从缓存中读取包装后的方法 */\n var handlerWrap = removeEventCache(el, type + '_once', handler);\n if (handlerWrap) {\n handler = handlerWrap;\n }\n }\n el.removeEventListener(type, handler, capture);\n}\n\n/**\n * 为HTML元素添加事件监听\n * @param {HTMLElement} el 目标元素\n * @param {String} type 事件名称\n * @param {Function} handler 处理函数\n * @param {Boolean} once 是否只监听一次\n * @param {Boolean|Object} capture 是否在捕获阶段监听,这里也可以传入 { passive: true } 表示被动模式\n */\nfunction addEvent(el, type, handler) {\n var once = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var capture = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n if (capture !== undefined && !isBoolean(capture) && supportsPassive) {\n capture = { passive: true };\n }\n if (once) {\n var oldHandler = handler;\n handler = function () {\n return function () {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n oldHandler.apply(this, args);\n removeEvent(el, type, handler, once, capture);\n };\n }();\n /* 将包装后的方法记录到缓存中 */\n addEventCache(el, type + '_once', oldHandler, handler);\n }\n\n el.addEventListener(type, handler, capture);\n}\n\n/**\n * 为HTML元素添加事件代理\n * @param {HTMLElement} el 目标元素\n * @param {String} selector 要被代理的元素\n * @param {String} type 事件名称\n * @param {Function} handler 处理函数\n * @param {Boolean} capture 是否在捕获阶段监听\n */\nfunction addDelegate(el, selector, type, handler) {\n var capture = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n if (capture !== undefined && !isBoolean(capture) && supportsPassive) {\n capture = { passive: true };\n }\n var handlerWrap = function handlerWrap(e) {\n var targetElsArr = findParents(e.target || e.srcElement, el, true);\n var targetElArr = query(selector, el, true);\n var retEl = void 0;\n if (targetElArr.find) {\n retEl = targetElArr.find(function (seEl) {\n return targetElsArr.find(function (tgEl) {\n return seEl === tgEl;\n });\n });\n } else {\n // Fixed IE11 Array.find not defined bug\n targetElArr.forEach(function (seEl) {\n return !retEl && targetElsArr.forEach(function (tgEl) {\n if (!retEl && seEl === tgEl) {\n retEl = tgEl;\n }\n });\n });\n }\n retEl && handler.apply(retEl, arguments);\n };\n /* 将包装后的方法记录到缓存中 */\n addEventCache(el, type + '_delegate_' + selector, handler, handlerWrap);\n el.addEventListener(type, handlerWrap, capture);\n}\n\n/**\n * 为HTML元素移除事件代理\n * @param {HTMLElement} el 目标元素\n * @param {String} selector 要被代理的元素\n * @param {String} type 事件名称\n * @param {Function} handler 处理函数\n * @param {Boolean} capture 是否在捕获阶段监听\n */\nfunction removeDelegate(el, selector, type, handler) {\n var capture = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n if (capture !== undefined && !isBoolean(capture) && supportsPassive) {\n capture = { passive: true };\n }\n /* 尝试从缓存中读取包装后的方法 */\n var handlerWrap = removeEventCache(el, type + '_delegate_' + selector, handler);\n handlerWrap && el.removeEventListener(type, handlerWrap, capture);\n}\n\n/**\n * 读取HTML元素样式值\n * @param {HTMLElement} el 目标元素\n * @param {String} key 样式key\n * @return {String}\n */\nfunction getStyle(el, key) {\n return (el.currentStyle || document.defaultView.getComputedStyle(el, null))[key] || el.style[key];\n}\n\n/**\n * 设置HTML元素样式值\n * @param {HTMLElement} el 目标元素\n * @param {String} key 样式key\n * @param {String} val 样式值\n */\nfunction setStyle(el, key, val) {\n if (isObject(key)) {\n for (var k in key) {\n setStyle(el, k, key[k]);\n }\n } else {\n el.style[key] = val;\n }\n}\n\n/**\n * 根据选择器查询目标元素\n * @param {String} selector 选择器,用于 querySelectorAll\n * @param {HTMLElement} container 父容器\n * @param {Boolean} toArray 强制输出为数组\n * @return {NodeList|Array}\n */\nfunction query(selector) {\n var container = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document;\n var toArray = arguments[2];\n\n var retNodeList = container.querySelectorAll(selector);\n return toArray ? _Array$from(retNodeList) : retNodeList;\n}\n\n/**\n * 从DOM树中移除el\n * @param {HTMLElement} el 目标元素\n */\nfunction removeEl(el) {\n el.parentNode.removeChild(el);\n}\n\n/**\n * 查找元素的父节点们\n * @param {HTMLElement} el 目标元素\n * @param {HTMLElement} endEl 最大父容器(不指定则找到html)\n * @param {Boolean} haveEl 包含当前元素\n * @param {Boolean} haveEndEl 包含设定的最大父容器\n */\nfunction findParents(el) {\n var endEl = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var haveEl = arguments[2];\n var haveEndEl = arguments[3];\n\n var retEls = [];\n if (haveEl) {\n retEls.push(el);\n }\n while (el && el.parentNode !== endEl) {\n el = el.parentNode;\n el && retEls.push(el);\n }\n if (haveEndEl) {\n retEls.push(endEl);\n }\n return retEls;\n}\n\n/**\n * @class NodeWrap\n * @description\n * NodeWrap DOM包装器,用以实现基本的链式操作\n * new dom.NodeWrap('*') 相当于 dom.$('*')\n * 这里面用于DOM操作的属性方法都是基于上面静态方法实现,有需要可以随时修改补充\n * @param {String} selector 选择器(兼容 String||HTMLString||NodeList||NodeArray||HTMLElement)\n * @param {HTMLElement} container 父容器(默认为document)\n */\n\nvar NodeWrap = function () {\n function NodeWrap(selector) {\n var container = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document;\n\n _classCallCheck(this, NodeWrap);\n\n var _this = this;\n _this.selector = selector;\n\n /* String||NodeList||HTMLElement 识别处理 */\n var elsArr = void 0;\n if (selector && selector.constructor === NodeList) {\n /* 支持直接传入NodeList来构建包装器 */\n elsArr = makeArray(selector);\n } else if (isArray(selector)) {\n /* 支持直接传入Node数组来构建包装器 */\n elsArr = selector;\n } else if (isString(selector)) {\n if (selector.indexOf('<') === 0) {\n /* 支持直接传入HTML字符串来新建DOM并构建包装器 */\n _divEl.innerHTML = selector;\n elsArr = query('*', _divEl, true);\n } else {\n /* 支持直接传入字符串选择器来查找DOM并构建包装器 */\n elsArr = query(selector, container, true);\n }\n } else {\n /* 其他任意对象直接构建包装器 */\n elsArr = [selector];\n }\n _Object$assign(_this, elsArr);\n\n /* NodeWrap本意可以 extends Array省略构造方法中下面这部分代码,但目前编译不支持 */\n _this.length = elsArr.length;\n }\n\n /**\n * 循环遍历DOM集合\n * @param {Function} fn 遍历函数 fn(item, i)\n * @return {Object}\n */\n\n\n _createClass(NodeWrap, [{\n key: 'each',\n value: function each() {\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n _arrPrototype.forEach.apply(this, args);\n return this;\n }\n\n /**\n * 添加元素到DOM集合\n * @param {HTMLElement} el 要加入的元素\n * @return {this}\n */\n\n }, {\n key: 'push',\n value: function push() {\n for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n _arrPrototype.push.apply(this, args);\n return this;\n }\n\n /**\n * 截取DOM集合片段,并得到新的包装器splice\n * @param {Nubmer} start\n * @param {Nubmer} count\n * @return {NodeWrap} 新的DOM集合包装器\n */\n\n }, {\n key: 'splice',\n value: function splice() {\n for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n return $(_arrPrototype.splice.apply(this, args));\n }\n\n /**\n * 查找子元素\n * @param {String} selector 选择器\n * @return {NodeWrap} 新的DOM集合包装器\n */\n\n }, {\n key: 'find',\n value: function find(selector) {\n var childs = [];\n this.each(function (el) {\n childs = childs.concat(query(selector, el, true));\n });\n var childsWrap = $(childs);\n childsWrap.parent = this;\n childsWrap.selector = selector;\n return childsWrap;\n }\n\n /**\n * 添加子元素\n * @param {HTMLElement} childEls 要添加的HTML元素\n * @return {this}\n */\n\n }, {\n key: 'append',\n value: function append(childEls) {\n var childsWrap = $(childEls);\n var firstEl = this[0];\n childsWrap.each(function (newEl) {\n return firstEl.appendChild(newEl);\n });\n return this;\n }\n\n /**\n * 将元素集合添加到指定容器\n * @param {HTMLElement} parentEl 要添加到父容器\n * @return {this}\n */\n\n }, {\n key: 'appendTo',\n value: function appendTo(parentEl) {\n $(parentEl).append(this);\n return this;\n }\n\n /**\n * DOM集合text内容读写操作\n * @param {String} val 文本内容(如果有设置该参数则执行写操作,否则执行读操作)\n * @return {this}\n */\n\n }, {\n key: 'text',\n value: function text(val) {\n if (arguments.length === 0) {\n return this[0][_textAttrName];\n }\n return this.each(function (el) {\n el[_textAttrName] = val;\n });\n }\n\n /**\n * DOM集合HTML内容读写操作\n * @param {String} html html内容(如果有设置该参数则执行写操作,否则执行读操作)\n * @return {this}\n */\n\n }, {\n key: 'html',\n value: function html(_html) {\n if (arguments.length === 0) {\n return this[0].innerHTML;\n }\n return this.each(function (el) {\n el.innerHTML = _html;\n });\n }\n\n /**\n * DOM集合属性读写操作\n * @param {String} name 属性名称\n * @param {String} val 属性值(如果有设置该参数则执行写操作,否则执行读操作)\n * @return {this}\n */\n\n }, {\n key: 'attr',\n value: function attr(name, val) {\n if (arguments.length === 1) {\n return getAttr(this[0], name);\n }\n return this.each(function (el) {\n return setAttr(el, name, val);\n });\n }\n\n /**\n * DOM集合dataset读写操作\n * @param {String} key 键名\n * @param {Any} val 键值(如果有设置该参数则执行写操作,否则执行读操作)\n * @return {this}\n */\n\n }, {\n key: 'data',\n value: function data(key, val) {\n if (arguments.length === 0) {\n return this[0].dataset || {};\n }\n if (arguments.length === 1) {\n return (this[0].dataset || {})[key];\n }\n return this.each(function (el) {\n (el.dataset || (el.dataset = {}))[key] = val;\n });\n }\n\n /**\n * DOM集合样式读写操作\n * @param {String} key 样式key\n * @param {String} val 样式值(如果有设置该参数则执行写操作,否则执行读操作)\n * @return {this}\n */\n\n }, {\n key: 'css',\n value: function css(key, val) {\n if (arguments.length === 1 && !isObject(key)) {\n return getStyle(this[0], key);\n }\n return this.each(function (el) {\n return setStyle(el, key, val);\n });\n }\n\n /**\n * 为DOM集合增加className\n * @param {String} cls 要增加的className\n * @return {this}\n */\n\n }, {\n key: 'addClass',\n value: function addClass(cls) {\n return this.each(function (el) {\n return addClassName(el, cls);\n });\n }\n\n /**\n * 移除当前DOM集合的className\n * @param {String} cls 要移除的className\n * @return {this}\n */\n\n }, {\n key: 'removeClass',\n value: function removeClass(cls) {\n return this.each(function (el) {\n return removeClassName(el, cls);\n });\n }\n\n /**\n * 检查索引0的DOM是否有className\n * @param {String} cls 要检查的className\n * @return {this}\n */\n\n }, {\n key: 'hasClass',\n value: function hasClass(cls) {\n return hasClassName(this[0], cls);\n }\n\n /**\n * 为DOM集合添加事件监听\n * @param {String} type 事件名称\n * @param {Function} handler 处理函数\n * @param {Boolean} once 是否只监听一次\n * @param {Boolean} capture 是否在捕获阶段监听\n * @return {this}\n */\n\n }, {\n key: 'on',\n value: function on(type, handler) {\n var once = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var capture = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n return this.each(function (el) {\n return addEvent(el, type, handler, once, capture);\n });\n }\n\n /**\n * 为DOM集合解除事件监听\n * @param {String} type 事件名称\n * @param {Function} handler 处理函数\n * @param {Boolean} once 是否只监听一次\n * @param {Boolean} capture 是否在捕获阶段监听\n * @return {this}\n */\n\n }, {\n key: 'off',\n value: function off(type, handler) {\n var once = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var capture = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n return this.each(function (el) {\n return removeEvent(el, type, handler, once, capture);\n });\n }\n\n /**\n * 为DOM集合绑定事件代理\n * @param {String} selector 目标子元素选择器\n * @param {String} type 事件名称\n * @param {Function} handler 处理函数\n * @param {Boolean} capture 是否在捕获阶段监听\n * @return {this}\n */\n\n }, {\n key: 'delegate',\n value: function delegate(selector, type, handler) {\n var capture = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n return this.each(function (el) {\n return addDelegate(el, selector, type, handler, capture);\n });\n }\n\n /**\n * 为DOM集合解绑事件代理\n * @param {String} selector 目标子元素选择器\n * @param {String} type 事件名称\n * @param {Function} handler 处理函数\n * @param {Boolean} capture 是否在捕获阶段监听\n * @return {this}\n */\n\n }, {\n key: 'undelegate',\n value: function undelegate(selector, type, handler) {\n var capture = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n return this.each(function (el) {\n return removeDelegate(el, selector, type, handler, capture);\n });\n }\n\n /**\n * 从DOM树中移除\n * @return {this}\n */\n\n }, {\n key: 'remove',\n value: function remove() {\n return this.each(function (el) {\n return removeEl(el);\n });\n }\n }]);\n\n return NodeWrap;\n}();\n\nfunction $(selector, container) {\n return selector.constructor === NodeWrap ? selector : new NodeWrap(selector, container);\n}\n\n// all object keys, includes non-enumerable and symbols\n\n\n\nvar Reflect = _global.Reflect;\nvar _ownKeys = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = _objectGopn.f(_anObject(it));\n var getSymbols = _objectGops.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n\n// https://github.com/tc39/proposal-object-getownpropertydescriptors\n\n\n\n\n\n\n_export(_export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = _toIobject(object);\n var getDesc = _objectGopd.f;\n var keys = _ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) _createProperty(result, key, desc);\n }\n return result;\n }\n});\n\nvar getOwnPropertyDescriptors = _core.Object.getOwnPropertyDescriptors;\n\nvar getOwnPropertyDescriptors$1 = createCommonjsModule(function (module) {\nmodule.exports = { \"default\": getOwnPropertyDescriptors, __esModule: true };\n});\n\nvar _Object$getOwnPropertyDescriptors = unwrapExports(getOwnPropertyDescriptors$1);\n\nvar getOwnPropertySymbols = _core.Object.getOwnPropertySymbols;\n\nvar getOwnPropertySymbols$1 = createCommonjsModule(function (module) {\nmodule.exports = { \"default\": getOwnPropertySymbols, __esModule: true };\n});\n\nvar _Object$getOwnPropertySymbols = unwrapExports(getOwnPropertySymbols$1);\n\n// 19.1.2.7 Object.getOwnPropertyNames(O)\n_objectSap('getOwnPropertyNames', function () {\n return _objectGopnExt.f;\n});\n\nvar $Object$3 = _core.Object;\nvar getOwnPropertyNames = function getOwnPropertyNames(it) {\n return $Object$3.getOwnPropertyNames(it);\n};\n\nvar getOwnPropertyNames$1 = createCommonjsModule(function (module) {\nmodule.exports = { \"default\": getOwnPropertyNames, __esModule: true };\n});\n\nvar _Object$getOwnPropertyNames = unwrapExports(getOwnPropertyNames$1);\n\n/**\n * bind the function with some context. we have some fallback strategy here\n * @param {function} fn the function which we need to bind the context on\n * @param {any} context the context object\n */\nfunction bind$1(fn, context) {\n if (fn.bind) {\n return fn.bind(context);\n } else if (fn.apply) {\n return function __autobind__() {\n for (var _len2 = arguments.length, args = Array(_len2), _key3 = 0; _key3 < _len2; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n return fn.apply(context, args);\n };\n } else {\n return function __autobind__() {\n for (var _len3 = arguments.length, args = Array(_len3), _key4 = 0; _key4 < _len3; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n return fn.call.apply(fn, [context].concat(_toConsumableArray(args)));\n };\n }\n}\n\n/**\n * get an deep property\n */\nfunction getDeepProperty$1(obj, keys) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n _ref$throwError = _ref.throwError,\n throwError = _ref$throwError === undefined ? false : _ref$throwError,\n backup = _ref.backup;\n\n if (isString(keys)) {\n keys = keys.split('.');\n }\n if (!isArray(keys)) {\n throw new TypeError('keys of getDeepProperty must be string or Array');\n }\n var read = [];\n var target = obj;\n for (var i = 0, len = keys.length; i < len; i++) {\n var key = keys[i];\n if (isVoid(target)) {\n if (throwError) {\n throw new Error('obj' + (read.length > 0 ? '.' + read.join('.') : ' itself') + ' is ' + target);\n } else {\n return backup;\n }\n }\n target = target[key];\n read.push(key);\n }\n return target;\n}\n\nvar ITERATOR$4 = _wks('iterator');\n\nvar core_isIterable = _core.isIterable = function (it) {\n var O = Object(it);\n return O[ITERATOR$4] !== undefined\n || '@@iterator' in O\n // eslint-disable-next-line no-prototype-builtins\n || _iterators.hasOwnProperty(_classof(O));\n};\n\nvar isIterable = core_isIterable;\n\nvar isIterable$1 = createCommonjsModule(function (module) {\nmodule.exports = { \"default\": isIterable, __esModule: true };\n});\n\nunwrapExports(isIterable$1);\n\nvar core_getIterator = _core.getIterator = function (it) {\n var iterFn = core_getIteratorMethod(it);\n if (typeof iterFn != 'function') throw TypeError(it + ' is not iterable!');\n return _anObject(iterFn.call(it));\n};\n\nvar getIterator = core_getIterator;\n\nvar getIterator$1 = createCommonjsModule(function (module) {\nmodule.exports = { \"default\": getIterator, __esModule: true };\n});\n\nunwrapExports(getIterator$1);\n\nvar slicedToArray = createCommonjsModule(function (module, exports) {\n\nexports.__esModule = true;\n\n\n\nvar _isIterable3 = _interopRequireDefault(isIterable$1);\n\n\n\nvar _getIterator3 = _interopRequireDefault(getIterator$1);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = (0, _getIterator3.default)(arr), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if ((0, _isIterable3.default)(Object(arr))) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n}();\n});\n\nvar _slicedToArray = unwrapExports(slicedToArray);\n\nvar getWeak = _meta.getWeak;\n\n\n\n\n\n\n\nvar arrayFind = _arrayMethods(5);\nvar arrayFindIndex = _arrayMethods(6);\nvar id$1 = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nvar _collectionWeak = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n _anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id$1++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) _forOf(iterable, IS_MAP, that[ADDER], that);\n });\n _redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!_isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(_validateCollection(this, NAME))['delete'](key);\n return data && _has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!_isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(_validateCollection(this, NAME)).has(key);\n return data && _has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(_anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n\nvar es6_weakMap = createCommonjsModule(function (module) {\nvar each = _arrayMethods(0);\n\n\n\n\n\n\n\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = _meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = _collectionWeak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (_isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(_validateCollection(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return _collectionWeak.def(_validateCollection(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = _collection(WEAK_MAP, wrapper, methods, _collectionWeak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (_fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = _collectionWeak.getConstructor(wrapper, WEAK_MAP);\n _objectAssign(InternalMap.prototype, methods);\n _meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n _redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (_isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n});\n\n// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.of\n_setCollectionOf('WeakMap');\n\n// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.from\n_setCollectionFrom('WeakMap');\n\nvar weakMap = _core.WeakMap;\n\nvar weakMap$1 = createCommonjsModule(function (module) {\nmodule.exports = { \"default\": weakMap, __esModule: true };\n});\n\nvar _WeakMap = unwrapExports(weakMap$1);\n\nvar defineProperty$3 = createCommonjsModule(function (module, exports) {\n\nexports.__esModule = true;\n\n\n\nvar _defineProperty2 = _interopRequireDefault(defineProperty$1);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (obj, key, value) {\n if (key in obj) {\n (0, _defineProperty2.default)(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});\n\nvar _defineProperty = unwrapExports(defineProperty$3);\n\n// 19.1.2.15 Object.preventExtensions(O)\n\nvar meta = _meta.onFreeze;\n\n_objectSap('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && _isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n\nvar preventExtensions = _core.Object.preventExtensions;\n\nvar preventExtensions$1 = createCommonjsModule(function (module) {\nmodule.exports = { \"default\": preventExtensions, __esModule: true };\n});\n\nunwrapExports(preventExtensions$1);\n\nvar getOwnPropertyDescriptor$2 = _Object$getOwnPropertyDescriptor;\n// ********************** 对象操作 ************************\n/**\n * sort Object attributes by function\n * and transfer them into array\n * @param {Object} obj Object form from numric\n * @param {Function} fn sort function\n * @return {Array} the sorted attirbutes array\n */\n\n\n/**\n * to check if an descriptor\n * @param {anything} desc\n */\nfunction isDescriptor(desc) {\n if (!desc || !desc.hasOwnProperty) {\n return false;\n }\n\n var keys = ['value', 'initializer', 'get', 'set'];\n\n for (var i = 0, l = keys.length; i < l; i++) {\n if (desc.hasOwnProperty(keys[i])) {\n return true;\n }\n }\n return false;\n}\n/**\n * to check if the descirptor is an accessor descriptor\n * @param {descriptor} desc it should be a descriptor better\n */\nfunction isAccessorDescriptor(desc) {\n return !!desc && (isFunction(desc.get) || isFunction(desc.set)) && isBoolean(desc.configurable) && isBoolean(desc.enumerable) && desc.writable === undefined;\n}\n/**\n * to check if the descirptor is an data descriptor\n * @param {descriptor} desc it should be a descriptor better\n */\nfunction isDataDescriptor(desc) {\n return !!desc && desc.hasOwnProperty('value') && isBoolean(desc.configurable) && isBoolean(desc.enumerable) && isBoolean(desc.writable);\n}\n/**\n * to check if the descirptor is an initiallizer descriptor\n * @param {descriptor} desc it should be a descriptor better\n */\nfunction isInitializerDescriptor(desc) {\n return !!desc && isFunction(desc.initializer) && isBoolean(desc.configurable) && isBoolean(desc.enumerable) && isBoolean(desc.writable);\n}\n/**\n * set one value on the object\n * @param {string} key\n */\nfunction createDefaultSetter(key) {\n return function set(newValue) {\n _Object$defineProperty(this, key, {\n configurable: true,\n writable: true,\n // IS enumerable when reassigned by the outside word\n enumerable: true,\n value: newValue\n });\n return newValue;\n };\n}\n\n/**\n * Compress many function into one function, but this function only accept one arguments;\n * @param {Array} fns the array of function we need to compress into one function\n * @param {string} errmsg When we check that there is something is not function, we will throw an error, you can set your own error message\n */\nfunction compressOneArgFnArray(fns) {\n var errmsg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'You must pass me an array of function';\n\n if (!isArray(fns) || fns.length < 1) {\n throw new TypeError(errmsg);\n }\n if (fns.length === 1) {\n if (!isFunction(fns[0])) {\n throw new TypeError(errmsg);\n }\n return fns[0];\n }\n return fns.reduce(function (prev, curr) {\n if (!isFunction(curr) || !isFunction(prev)) throw new TypeError(errmsg);\n return function (value) {\n return bind$1(curr, this)(bind$1(prev, this)(value));\n };\n });\n}\n\nfunction getOwnKeysFn() {\n var getOwnPropertyNames = _Object$getOwnPropertyNames,\n getOwnPropertySymbols = _Object$getOwnPropertySymbols;\n\n return isFunction(getOwnPropertySymbols) ? function (obj) {\n // $FlowFixMe: do not support symwbol yet\n return _Array$from(getOwnPropertyNames(obj).concat(getOwnPropertySymbols(obj)));\n } : getOwnPropertyNames;\n}\n\nvar getOwnKeys = getOwnKeysFn();\n\nfunction getOwnPropertyDescriptorsFn() {\n // $FlowFixMe: In some environment, Object.getOwnPropertyDescriptors has been implemented;\n return isFunction(_Object$getOwnPropertyDescriptors) ? _Object$getOwnPropertyDescriptors : function (obj) {\n return getOwnKeys(obj).reduce(function (descs, key) {\n descs[key] = getOwnPropertyDescriptor$2(obj, key);\n return descs;\n }, {});\n };\n}\n\nvar getOwnPropertyDescriptors$2 = getOwnPropertyDescriptorsFn();\n\nfunction compressMultipleDecorators() {\n for (var _len = arguments.length, fns = Array(_len), _key = 0; _key < _len; _key++) {\n fns[_key] = arguments[_key];\n }\n\n if (!fns.length) throw new TypeError('You must pass in decorators in compressMultipleDecorators');\n fns.forEach(function (fn) {\n if (!isFunction(fn)) throw new TypeError('Decorators must be a function, but not \"' + fn + '\" in ' + (typeof fn === 'undefined' ? 'undefined' : _typeof(fn)));\n });\n if (fns.length === 1) return fns[0];\n return function (obj, prop, descirptor) {\n // $FlowFixMe: the reduce will return a descriptor\n return fns.reduce(function (descirptor, fn) {\n return fn(obj, prop, descirptor);\n }, descirptor);\n };\n}\n\nfunction accessor() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n get = _ref.get,\n set = _ref.set;\n\n var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref2$preGet = _ref2.preGet,\n preGet = _ref2$preGet === undefined ? false : _ref2$preGet,\n _ref2$preSet = _ref2.preSet,\n preSet = _ref2$preSet === undefined ? true : _ref2$preSet;\n\n if (!isFunction(get) && !isFunction(set) && !(isArray(get) && get.length > 0) && !(isArray(set) && set.length > 0)) throw new TypeError(\"@accessor need a getter or setter. If you don't need to add setter/getter. You should remove @accessor\");\n var errmsg = '@accessor only accept function or array of function as getter/setter';\n get = isArray(get) ? compressOneArgFnArray(get, errmsg) : get;\n set = isArray(set) ? compressOneArgFnArray(set, errmsg) : set;\n return function (obj, prop, descriptor) {\n var _ref3 = descriptor || {},\n _ref3$configurable = _ref3.configurable,\n configurable = _ref3$configurable === undefined ? true : _ref3$configurable,\n _ref3$enumerable = _ref3.enumerable,\n enumerable = _ref3$enumerable === undefined ? true : _ref3$enumerable;\n\n var hasGet = isFunction(get);\n var hasSet = isFunction(set);\n var handleGet = function handleGet(value) {\n // $FlowFixMe: it's really function here\n return hasGet ? bind$1(get, this)(value) : value;\n };\n var handleSet = function handleSet(value) {\n // $FlowFixMe: it's really function here\n return hasSet ? bind$1(set, this)(value) : value;\n };\n if (isAccessorDescriptor(descriptor)) {\n var originGet = descriptor.get,\n originSet = descriptor.set;\n\n var hasOriginGet = isFunction(originGet);\n var hasOriginSet = isFunction(originSet);\n var getter = hasOriginGet || hasGet ? function () {\n var _this = this;\n\n var boundGetter = bind$1(handleGet, this);\n var originBoundGetter = function originBoundGetter() {\n return hasOriginGet\n // $FlowFixMe: we have do a check here\n ? bind$1(originGet, _this)() : undefined;\n };\n var order = preGet ? [boundGetter, originBoundGetter] : [originBoundGetter, boundGetter];\n // $FlowFixMe: it's all function here\n return order.reduce(function (value, fn) {\n return fn(value);\n }, undefined);\n } : undefined;\n var setter = hasOriginSet || hasSet ? function (val) {\n var _this2 = this;\n\n var boundSetter = bind$1(handleSet, this);\n var originBoundSetter = function originBoundSetter(value) {\n return hasOriginSet\n // $FlowFixMe: flow act like a retarded child on optional property\n ? bind$1(originSet, _this2)(value) : value;\n };\n var order = preSet ? [boundSetter, originBoundSetter] : [originBoundSetter, boundSetter];\n return order.reduce(function (value, fn) {\n return fn(value);\n }, val);\n } : undefined;\n return {\n get: getter,\n set: setter,\n configurable: configurable,\n enumerable: enumerable\n };\n } else if (isInitializerDescriptor(descriptor)) {\n // $FlowFixMe: disjoint union is horrible, descriptor is initializerDescriptor now\n var initializer = descriptor.initializer;\n\n var value = void 0;\n var inited = false;\n return {\n get: function get() {\n var boundFn = bind$1(handleGet, this);\n if (inited) return boundFn(value);\n value = bind$1(initializer, this)();\n inited = true;\n return boundFn(value);\n },\n set: function set(val) {\n var boundFn = bind$1(handleSet, this);\n value = preSet ? boundFn(val) : val;\n inited = true;\n if (!preSet) {\n boundFn(value);\n }\n return value;\n },\n\n configurable: configurable,\n enumerable: enumerable\n };\n } else {\n // $FlowFixMe: disjoint union is horrible, descriptor is DataDescriptor now\n var _ref4 = descriptor || {},\n _value = _ref4.value;\n\n return {\n get: function get() {\n return bind$1(handleGet, this)(_value);\n },\n set: function set(val) {\n var boundFn = bind$1(handleSet, this);\n _value = preSet ? boundFn(val) : val;\n if (!preSet) {\n boundFn(_value);\n }\n return _value;\n },\n\n configurable: configurable,\n enumerable: enumerable\n };\n }\n };\n}\n\nfunction before() {\n for (var _len = arguments.length, fns = Array(_len), _key = 0; _key < _len; _key++) {\n fns[_key] = arguments[_key];\n }\n\n if (fns.length === 0) throw new Error(\"@before accept at least one parameter. If you don't need to preprocess before your function, do not add @before decorators\");\n if (fns.length > 2 && isDescriptor(fns[2])) {\n throw new Error('You may use @before straightly, @before return decorators, you should call it before you set it as decorator.');\n }\n for (var i = fns.length - 1; i > -1; i--) {\n if (!isFunction(fns[i])) throw new TypeError('@before only accept function parameter');\n }\n return function (obj, prop, descriptor) {\n var _ref = descriptor || {},\n fn = _ref.value,\n configurable = _ref.configurable,\n enumerable = _ref.enumerable,\n writable = _ref.writable;\n\n if (!isFunction(fn)) throw new TypeError('@before can only be used on function, please check the property \"' + prop + '\" is a method or not.');\n var handler = function handler() {\n var _this = this;\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var paras = fns.reduce(function (paras, fn) {\n var result = bind$1(fn, _this).apply(undefined, _toConsumableArray(paras));\n return result === undefined ? paras : isArray(result) ? result\n // $FlowFixMe: what the hell, it can be anything\n : [result];\n }, args);\n return bind$1(fn, this).apply(undefined, _toConsumableArray(paras));\n };\n return {\n value: handler,\n configurable: configurable,\n enumerable: enumerable,\n writable: writable\n };\n };\n}\n\nfunction after() {\n for (var _len = arguments.length, fns = Array(_len), _key = 0; _key < _len; _key++) {\n fns[_key] = arguments[_key];\n }\n\n if (fns.length === 0) throw new Error(\"@after accept at least one parameter. If you don't need to preprocess after your function, do not add @after decorators\");\n if (fns.length > 2 && isDescriptor(fns[2])) {\n throw new Error('You may have used @after straightly. @after return decorators. You should call it before you use it as decorators');\n }\n var fn = compressOneArgFnArray(fns, '@after only accept function parameter');\n return function (obj, prop, descriptor) {\n var _ref = descriptor || {},\n value = _ref.value,\n configurable = _ref.configurable,\n enumerable = _ref.enumerable,\n writable = _ref.writable;\n\n if (!isFunction(value)) throw new TypeError('@after can only be used on function, please checkout your property \"' + prop + '\" is a method or not.');\n var handler = function handler() {\n var ret = bind$1(value, this).apply(undefined, arguments);\n return bind$1(fn, this)(ret);\n };\n return {\n value: handler,\n configurable: configurable,\n enumerable: enumerable,\n writable: writable\n };\n };\n}\n\nfunction initialize() {\n for (var _len = arguments.length, fns = Array(_len), _key = 0; _key < _len; _key++) {\n fns[_key] = arguments[_key];\n }\n\n if (fns.length === 0) throw new Error(\"@initialize accept at least one parameter. If you don't need to initialize your value, do not add @initialize.\");\n if (fns.length > 2 && isDescriptor(fns[2])) {\n throw new Error('You may use @initialize straightly, @initialize return decorators, you need to call it');\n }\n var fn = compressOneArgFnArray(fns, '@initialize only accept function parameter');\n return function (obj, prop, descriptor) {\n if (descriptor === undefined) {\n return {\n value: bind$1(fn, obj)(),\n configurable: true,\n writable: true,\n enumerable: true\n };\n }\n if (isAccessorDescriptor(descriptor)) {\n var hasBeenReset = false;\n var originSet = descriptor.set;\n\n return accessor({\n get: function get(value) {\n if (hasBeenReset) return value;\n return bind$1(fn, this)(value);\n },\n\n set: originSet ? function (value) {\n hasBeenReset = true;\n return value;\n } : undefined\n })(obj, prop, descriptor);\n }\n /**\n * when we set decorator on propery\n * we will get a descriptor with initializer\n * as they will be attach on the instance later\n * so, we need to substitute the initializer function\n */\n if (isInitializerDescriptor(descriptor)) {\n // $FlowFixMe: useless disjoint union\n var initializer = descriptor.initializer;\n\n var handler = function handler() {\n return bind$1(fn, this)(bind$1(initializer, this)());\n };\n return {\n initializer: handler,\n configurable: descriptor.configurable,\n // $FlowFixMe: useless disjoint union\n writable: descriptor.writable,\n enumerable: descriptor.enumerable\n };\n }\n // $FlowFixMe: useless disjoint union\n var value = bind$1(fn, this)(descriptor.value);\n return {\n value: value,\n // $FlowFixMe: useless disjoint union\n writable: descriptor.writable,\n configurable: descriptor.configurable,\n enumerable: descriptor.enumerable\n };\n };\n}\n\nvar getOwnPropertyDescriptor$1$1 = _Object$getOwnPropertyDescriptor;\nvar defineProperty$4 = _Object$defineProperty;\n\nfunction setAlias(root, prop, _ref, obj, key, _ref2) {\n var configurable = _ref.configurable,\n enumerable = _ref.enumerable;\n var force = _ref2.force,\n omit = _ref2.omit;\n\n var originDesc = getOwnPropertyDescriptor$1$1(obj, key);\n if (originDesc !== undefined) {\n if (omit) return;\n // TODO: we should add an github link here\n if (!force) throw new Error('\"' + prop + '\" is an existing property, if you want to override it, please set \"force\" true in @alias option.');\n if (!originDesc.configurable) {\n throw new Error('property \"' + prop + '\" is unconfigurable.');\n }\n }\n defineProperty$4(obj, key, {\n get: function get() {\n return root[prop];\n },\n set: function set(value) {\n root[prop] = value;\n return prop;\n },\n\n configurable: configurable,\n enumerable: enumerable\n });\n}\nfunction alias(other, key, option) {\n // set argument into right position\n if (arguments.length === 2) {\n if (isString(other)) {\n // $FlowFixMe: i will check this later\n option = key;\n key = other;\n other = undefined;\n }\n } else if (arguments.length === 1) {\n // $FlowFixMe: i will check this later\n key = other;\n other = undefined;\n }\n // argument validate\n if (!isString(key)) throw new TypeError('@alias need a string as a key to find the porperty to set alias on');\n var illegalObjErrorMsg = 'If you want to use @alias to set alias on other instance, you must pass in a legal instance';\n if (other !== undefined && isPrimitive(other)) throw new TypeError(illegalObjErrorMsg);\n\n var _ref3 = isObject(option) ? option : { force: false, omit: false },\n force = _ref3.force,\n omit = _ref3.omit;\n\n return function (obj, prop, descriptor) {\n descriptor = descriptor || {\n value: undefined,\n configurable: true,\n writable: true,\n enumerable: true\n };\n function getTargetAndName(other, obj, key) {\n var target = isPrimitive(other) ? obj : other;\n var keys = key.split('.');\n\n var _keys$slice = keys.slice(-1),\n _keys$slice2 = _slicedToArray(_keys$slice, 1),\n name = _keys$slice2[0];\n\n target = getDeepProperty$1(target, keys.slice(0, -1), { throwError: true });\n if (isPrimitive(target)) {\n throw new TypeError(illegalObjErrorMsg);\n }\n return {\n target: target,\n name: name\n };\n }\n if (isInitializerDescriptor(descriptor)) {\n return initialize(function (value) {\n var _getTargetAndName = getTargetAndName(other, this, key),\n target = _getTargetAndName.target,\n name = _getTargetAndName.name;\n\n setAlias(this, prop, descriptor, target, name, { force: force, omit: omit });\n return value;\n })(obj, prop, descriptor);\n }\n if (isAccessorDescriptor(descriptor)) {\n var inited = void 0;\n var handler = function handler(value) {\n if (inited) return value;\n\n var _getTargetAndName2 = getTargetAndName(other, this, key),\n target = _getTargetAndName2.target,\n name = _getTargetAndName2.name;\n\n setAlias(this, prop, descriptor, target, name, { force: force, omit: omit });\n inited = true;\n return value;\n };\n return accessor({ get: handler, set: handler })(obj, prop, descriptor);\n }\n\n var _getTargetAndName3 = getTargetAndName(other, obj, key),\n target = _getTargetAndName3.target,\n name = _getTargetAndName3.name;\n\n setAlias(obj, prop, descriptor, target, name, { force: force, omit: omit });\n return descriptor;\n };\n}\n\nvar defineProperty$1$1 = _Object$defineProperty;\n\nfunction classify(decorator) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n requirement = _ref.requirement,\n _ref$customArgs = _ref.customArgs,\n customArgs = _ref$customArgs === undefined ? false : _ref$customArgs;\n\n return function () {\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 var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref2$exclude = _ref2.exclude,\n exclude = _ref2$exclude === undefined ? [] : _ref2$exclude,\n _ref2$include = _ref2.include,\n include = _ref2$include === undefined ? [] : _ref2$include,\n _ref2$construct = _ref2.construct,\n construct = _ref2$construct === undefined ? false : _ref2$construct,\n _ref2$self = _ref2.self,\n self = _ref2$self === undefined ? false : _ref2$self;\n\n if (!isArray(exclude)) throw new TypeError('options.exclude must be an array');\n if (!isArray(include)) throw new TypeError('options.include must be an array');\n return function (Klass) {\n var isClass = isFunction(Klass);\n if (!self && !isClass) throw new TypeError('@' + decorator.name + 'Class can only be used on class');\n if (self && isPrimitive(Klass)) throw new TypeError('@' + decorator.name + 'Class must be used on non-primitive type value in \\'self\\' mode');\n var prototype = self ? Klass : Klass.prototype;\n if (isVoid(prototype)) throw new Error('The prototype of the ' + Klass.name + ' is empty, please check it');\n var descs = getOwnPropertyDescriptors$2(prototype);\n getOwnKeys(prototype).concat(include).forEach(function (key) {\n var desc = descs[key];\n if (key === 'constructor' && !construct || self && isClass && ['name', 'length', 'prototype'].indexOf(key) > -1 || exclude.indexOf(key) > -1 || isFunction(requirement) && requirement(prototype, key, desc, { self: self }) === false) return;\n defineProperty$1$1(prototype, key, (customArgs ? decorator.apply(undefined, _toConsumableArray(args)) : decorator)(prototype, key, desc));\n });\n };\n };\n}\n\nvar autobindClass = classify(autobind, {\n requirement: function requirement(obj, prop, desc) {\n // $FlowFixMe: it's data descriptor now\n return isDataDescriptor(desc) && isFunction(desc.value);\n }\n});\n\nvar mapStore = void 0;\n// save bound function for super\nfunction getBoundSuper(obj, fn) {\n if (typeof _WeakMap === 'undefined') {\n throw new Error('Using @autobind on ' + fn.name + '() requires WeakMap support due to its use of super.' + fn.name + '()');\n }\n\n if (!mapStore) {\n mapStore = new _WeakMap();\n }\n\n if (mapStore.has(obj) === false) {\n mapStore.set(obj, new _WeakMap());\n }\n\n var superStore = mapStore.get(obj);\n // $FlowFixMe: already insure superStore is not undefined\n if (superStore.has(fn) === false) {\n // $FlowFixMe: already insure superStore is not undefined\n superStore.set(fn, bind$1(fn, obj));\n }\n // $FlowFixMe: already insure superStore is not undefined\n return superStore.get(fn);\n}\n/**\n * auto bind the function on the class, just support function\n * @param {Object} obj Target Object\n * @param {string} prop prop strong\n * @param {Object} descriptor\n */\nfunction autobind(obj, prop, descriptor) {\n if (arguments.length === 1) return autobindClass()(obj);\n\n var _ref = descriptor || {},\n fn = _ref.value,\n configurable = _ref.configurable;\n\n if (!isFunction(fn)) {\n throw new TypeError('@autobind can only be used on functions, not \"' + fn + '\" in ' + (typeof fn === 'undefined' ? 'undefined' : _typeof(fn)) + ' on property \"' + prop + '\"');\n }\n var constructor = obj.constructor;\n\n return {\n configurable: configurable,\n enumerable: false,\n get: function get() {\n var _this = this;\n\n var boundFn = function boundFn() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return fn.call.apply(fn, [_this].concat(_toConsumableArray(args)));\n };\n // Someone accesses the property directly on the prototype on which it is\n // actually defined on, i.e. Class.prototype.hasOwnProperty(key)\n if (this === obj) {\n return fn;\n }\n // Someone accesses the property directly on a prototype,\n // but it was found up the chain, not defined directly on it\n // i.e. Class.prototype.hasOwnProperty(key) == false && key in Class.prototype\n if (this.constructor !== constructor && _Object$getPrototypeOf(this).constructor === constructor) {\n return fn;\n }\n\n // Autobound method calling super.sameMethod() which is also autobound and so on.\n if (this.constructor !== constructor && prop in this.constructor.prototype) {\n return getBoundSuper(this, fn);\n }\n _Object$defineProperty(this, prop, {\n configurable: true,\n writable: true,\n // NOT enumerable when it's a bound method\n enumerable: false,\n value: boundFn\n });\n\n return boundFn;\n },\n\n set: createDefaultSetter(prop)\n };\n}\n\nvar defineProperty$2$1 = _Object$defineProperty;\n/**\n * make one attr only can be read, but could not be rewrited/ deleted\n * @param {Object} obj\n * @param {string} prop\n * @param {Object} descriptor\n * @return {descriptor}\n */\n\nfunction frozen(obj, prop, descriptor) {\n if (descriptor === undefined) {\n return {\n value: undefined,\n writable: false,\n enumerable: false,\n configurable: false\n };\n }\n descriptor.enumerable = false;\n descriptor.configurable = false;\n if (isAccessorDescriptor(descriptor)) {\n var _get = descriptor.get;\n\n descriptor.set = undefined;\n if (!isFunction(_get)) {\n return;\n }\n return {\n get: function get() {\n var value = bind$1(_get, this)();\n defineProperty$2$1(this, prop, {\n value: value,\n writable: false,\n configurable: false,\n enumerable: false\n });\n return value;\n },\n\n set: undefined,\n configurable: false,\n enumerable: false\n };\n }\n // $FlowFixMe: comeon, can disjoint union be reliable?\n descriptor.writable = false;\n return descriptor;\n}\n\nvar getOwnPropertyDescriptor$2$1 = _Object$getOwnPropertyDescriptor;\nvar defineProperty$3$1 = _Object$defineProperty;\n\nfunction waituntil(key) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n other = _ref.other;\n\n if (!isFunction(key) && !isPromise(key) && !isString(key)) throw new TypeError('@waitUntil only accept Function, Promise or String');\n return function (obj, prop, descriptor) {\n var _ref2 = descriptor || {},\n _value = _ref2.value,\n configurable = _ref2.configurable;\n\n if (!isFunction(_value)) throw new TypeError('@waituntil can only be used on function, but not ' + _value + ' on property \"' + prop + '\"');\n var binded = false;\n var waitingQueue = [];\n var canIRun = isPromise(key) ? function () {\n return key;\n } : isFunction(key) ? key : function () {\n // $FlowFixMe: We have use isPromise to exclude\n var keys = key.split('.');\n var prop = keys.slice(-1);\n var originTarget = isPrimitive(other) ? this : other;\n if (!binded) {\n var target = getDeepProperty$1(originTarget, keys.slice(0, -1));\n if (isVoid(target)) return target;\n var _descriptor = getOwnPropertyDescriptor$2$1(target, prop);\n /**\n * create a setter hook here\n * when it get ture, it will run all function in waiting queue immediately\n */\n var set = function set(value) {\n if (value === true) {\n while (waitingQueue.length > 0) {\n waitingQueue[0]();\n waitingQueue.shift();\n }\n }\n return value;\n };\n var desc = isDescriptor(_descriptor) ? accessor({ set: set })(target, prop, _descriptor) : accessor({ set: set })(target, prop, {\n value: undefined,\n configurable: true,\n enumerable: true,\n writable: true\n });\n defineProperty$3$1(target, prop, desc);\n binded = true;\n }\n return getDeepProperty$1(originTarget, keys);\n };\n return {\n value: function value() {\n var _this = this;\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var boundFn = bind$1(_value, this);\n var runnable = bind$1(canIRun, this).apply(undefined, args);\n if (isPromise(runnable)) {\n return _Promise.resolve(runnable).then(function () {\n return bind$1(_value, _this).apply(undefined, args);\n });\n } else if (runnable === true) {\n return bind$1(_value, this).apply(undefined, args);\n } else {\n return new _Promise(function (resolve) {\n var cb = function cb() {\n boundFn.apply(undefined, args);\n resolve();\n };\n waitingQueue.push(cb);\n });\n }\n },\n\n // function should not be enmuerable\n enumerable: false,\n configurable: configurable,\n // as we have delay this function\n // it's not a good idea to change it\n writable: false\n };\n };\n}\n\nfunction nonenumerable(obj, prop, descriptor) {\n if (descriptor === undefined) {\n return {\n value: undefined,\n enumerable: false,\n configurable: true,\n writable: true\n };\n }\n descriptor.enumerable = false;\n return descriptor;\n}\n\nvar defineProperty$6 = _Object$defineProperty;\nvar getOwnPropertyDescriptor$3 = _Object$getOwnPropertyDescriptor;\n\n\nfunction applyDecorators(Class, props) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n _ref$self = _ref.self,\n self = _ref$self === undefined ? false : _ref$self,\n _ref$omit = _ref.omit,\n omit = _ref$omit === undefined ? false : _ref$omit;\n\n var isPropsFunction = isFunction(props);\n if (isPropsFunction || isArray(props)) {\n // apply decorators on class\n if (!isFunction(Class)) throw new TypeError('If you want to decorator class, you must pass it a legal class');\n // $FlowFixMe: Terrible union, it's function now\n if (isPropsFunction) props(Class);else {\n // $FlowFixMe: Terrible union, it's array now\n for (var i = 0, len = props.length; i < len; i++) {\n // $FlowFixMe: Terrible union, it's array now\n var fn = props[i];\n if (!isFunction(fn)) throw new TypeError('If you want to decorate an class, you must pass it function or array of function');\n fn(Class);\n }\n }\n return Class;\n }\n if (!self && !isFunction(Class)) throw new TypeError('applyDecorators only accept class as first arguments. If you want to modify instance, you should set options.self true.');\n if (self && isPrimitive(Class)) throw new TypeError(\"We can't apply docorators on a primitive value, even in self mode\");\n if (!isObject(props)) throw new TypeError('applyDecorators only accept object as second arguments');\n var prototype = self ? Class : Class.prototype;\n if (isVoid(prototype)) throw new Error('The class muse have a prototype, please take a check');\n for (var key in props) {\n var value = props[key];\n var decorators = isArray(value) ? value : [value];\n var handler = void 0;\n try {\n handler = compressMultipleDecorators.apply(undefined, _toConsumableArray(decorators));\n } catch (err) {\n throw new Error('The decorators set on props must be Function or Array of Function');\n }\n var descriptor = getOwnPropertyDescriptor$3(prototype, key);\n if (descriptor && !descriptor.configurable) {\n if (!omit) throw new Error(key + ' of ' + prototype + ' is unconfigurable');\n continue;\n }\n defineProperty$6(prototype, key, handler(prototype, key, descriptor));\n }\n return Class;\n}\n\nvar arrayChangeMethod = ['push', 'pop', 'unshift', 'shift', 'splice', 'sort', 'reverse'];\n\nfunction deepProxy(value, hook, _ref) {\n var _operateProps;\n\n var diff = _ref.diff,\n operationPrefix = _ref.operationPrefix;\n\n var mapStore = {};\n var arrayChanging = false;\n var proxyValue = new Proxy(value, {\n get: function get(target, property, receiver) {\n var value = target[property];\n if (isArray(target) && arrayChangeMethod.indexOf(property) > -1) {\n return function () {\n arrayChanging = true;\n bind$1(value, receiver).apply(undefined, arguments);\n arrayChanging = false;\n hook();\n };\n }\n if (mapStore[property] === true) return value;\n if (isObject(value) || isArray(value)) {\n var _proxyValue = mapStore[property] || deepProxy(value, hook, { diff: diff, operationPrefix: operationPrefix });\n mapStore[property] = _proxyValue;\n return _proxyValue;\n }\n mapStore[property] = true;\n return value;\n },\n set: function set(target, property, value) {\n var oldVal = target[property];\n var newVal = isObject(value) || isArray(value) ? deepProxy(value, hook, { diff: diff, operationPrefix: operationPrefix }) : value;\n target[property] = newVal;\n mapStore[property] = true;\n if (arrayChanging || diff && oldVal === newVal) return true;\n hook();\n return true;\n },\n deleteProperty: function deleteProperty(target, property) {\n delete target[property];\n delete mapStore[property];\n if (arrayChanging) return true;\n hook();\n return true;\n }\n });\n var operateProps = (_operateProps = {}, _defineProperty(_operateProps, operationPrefix + 'set', [initialize(function (method) {\n return function (property, val) {\n // $FlowFixMe: we have check the computed value\n proxyValue[property] = val;\n };\n }), nonenumerable]), _defineProperty(_operateProps, operationPrefix + 'del', [initialize(function (method) {\n return function (property) {\n // $FlowFixMe: we have check the computed value\n delete proxyValue[property];\n };\n }), nonenumerable]), _operateProps);\n applyDecorators(proxyValue, operateProps, { self: true });\n return proxyValue;\n}\n\nfunction deepObserve(value, hook, _ref2) {\n var _this = this,\n _operateProps2;\n\n var operationPrefix = _ref2.operationPrefix,\n diff = _ref2.diff;\n\n var mapStore = {};\n var arrayChanging = false;\n function getPropertyDecorators(keys) {\n var oldVal = void 0;\n return keys.reduce(function (props, key) {\n props[key] = [accessor({\n set: function set(value) {\n oldVal = this[key];\n return value;\n }\n }), accessor({\n get: function get(val) {\n if (mapStore[key]) return val;\n if (isObject(val) || isArray(val)) {\n deepObserve(val, hook, { operationPrefix: operationPrefix, diff: diff });\n }\n mapStore[key] = true;\n return val;\n },\n set: function set(val) {\n if (isObject(val) || isArray(val)) deepObserve(val, hook, { operationPrefix: operationPrefix, diff: diff });\n mapStore[key] = true;\n if (!arrayChanging && (!diff || oldVal !== val)) hook();\n return val;\n }\n }, { preSet: false })];\n return props;\n }, {});\n }\n var props = getPropertyDecorators(getOwnKeys(value));\n applyDecorators(value, props, { self: true, omit: true });\n if (isArray(value)) {\n var methodProps = arrayChangeMethod.reduce(function (props, key) {\n props[key] = [initialize(function (method) {\n method = isFunction(method) ? method\n // $FlowFixMe: we have check the key\n : Array.prototype[key];\n return function () {\n var originLength = value.length;\n arrayChanging = true;\n bind$1(method, value).apply(undefined, arguments);\n arrayChanging = false;\n if (originLength < value.length) {\n var keys = new Array(value.length - originLength).fill(1).map(function (value, index) {\n return (index + originLength).toString();\n });\n var _props = getPropertyDecorators(keys);\n applyDecorators(value, _props, { self: true, omit: true });\n }\n hook();\n };\n }), nonenumerable];\n return props;\n }, {});\n applyDecorators(value, methodProps, { self: true });\n }\n var operateProps = (_operateProps2 = {}, _defineProperty(_operateProps2, operationPrefix + 'set', [initialize(function (method) {\n return function (property, val) {\n var _ref3 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n disable = _ref3.disable,\n isNewVal = _ref3.isNewVal;\n\n isNewVal = isNewVal || getOwnKeys(value).indexOf(property) === -1;\n if (isFunction(method)) {\n bind$1(method, _this)(property, val, { disable: true, isNewVal: isNewVal });\n }\n if (isNewVal) {\n var _props2 = getPropertyDecorators([property]);\n applyDecorators(value, _props2, { self: true, omit: true });\n }\n if (!disable) {\n value[property] = val;\n }\n };\n }), nonenumerable]), _defineProperty(_operateProps2, operationPrefix + 'del', [initialize(function (method) {\n return function (property) {\n if (isFunction(method)) {\n bind$1(method, _this)(property);\n } else {\n delete value[property];\n }\n hook();\n };\n }), nonenumerable]), _operateProps2);\n applyDecorators(value, operateProps, { self: true });\n return value;\n}\n\nfunction watch() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var option = isObject(args[args.length - 1]) ? args[args.length - 1] : {};\n // $FlowFixMe: we have check if it's an object\n var deep = option.deep,\n omit = option.omit,\n other = option.other,\n _option$operationPref = option.operationPrefix,\n operationPrefix = _option$operationPref === undefined ? '__' : _option$operationPref,\n _option$diff = option.diff,\n diff = _option$diff === undefined ? true : _option$diff;\n // $FlowFixMe: we have check if it's an object\n\n var proxy = option.proxy;\n\n if (typeof Proxy !== 'function') {\n proxy = false;\n }\n if (!args.length) throw new TypeError('You must pass a function or a string to find the hanlder function.');\n if (other !== undefined && isPrimitive(other)) throw new TypeError('If you want us to trigger function on the other instance, you must pass in a legal instance');\n if (!isString(operationPrefix)) throw new TypeError('operationPrefix must be an string');\n return function (obj, prop, descriptor) {\n var fns = args.reduce(function (fns, keyOrFn, index) {\n if (!isString(keyOrFn) && !isFunction(keyOrFn)) {\n if (!index || index !== args.length - 1) throw new TypeError('You can only pass function or string as handler');\n return fns;\n }\n fns.push(isString(keyOrFn) ? function (newVal, oldVal) {\n var target = other || obj;\n // $FlowFixMe: we have ensure it must be a string\n var fn = getDeepProperty$1(target, keyOrFn);\n if (!isFunction(fn)) {\n if (!omit) throw new Error('You pass in a function for us to trigger, please ensure the property to be a function or set omit flag true');\n return;\n }\n return bind$1(fn, this)(newVal, oldVal);\n } : keyOrFn);\n return fns;\n }, []);\n var handler = function handler(newVal, oldVal) {\n var _this2 = this;\n\n fns.forEach(function (fn) {\n return bind$1(fn, _this2)(newVal, oldVal);\n });\n };\n var inited = false;\n var oldVal = void 0;\n var newVal = void 0;\n var proxyValue = void 0;\n return compressMultipleDecorators(accessor({\n set: function set(value) {\n var _this3 = this;\n\n oldVal = this[prop];\n proxyValue = undefined;\n var hook = function hook() {\n return bind$1(handler, _this3)(newVal, oldVal);\n };\n return deep && (isObject(value) || isArray(value)) ? proxy ? deepProxy(value, hook, { diff: diff, operationPrefix: operationPrefix }) : deepObserve(value, hook, { operationPrefix: operationPrefix, diff: diff }) : value;\n },\n get: function get(value) {\n var _this4 = this;\n\n if (proxyValue) return proxyValue;\n if (!inited) {\n inited = true;\n var hook = function hook() {\n return bind$1(handler, _this4)(newVal, oldVal);\n };\n if (deep && (isObject(value) || isArray(value))) {\n if (proxy) {\n proxyValue = deepProxy(value, hook, { diff: diff, operationPrefix: operationPrefix });\n oldVal = proxyValue;\n newVal = proxyValue;\n return proxyValue;\n }\n deepObserve(value, hook, { operationPrefix: operationPrefix, diff: diff });\n }\n oldVal = value;\n newVal = value;\n }\n return value;\n }\n }, { preSet: true }), accessor({\n set: function set(value) {\n newVal = value;\n if (!diff || oldVal !== value) bind$1(handler, this)(newVal, oldVal);\n oldVal = value;\n return value;\n }\n }, { preSet: false }))(obj, prop, descriptor);\n };\n}\n\nfunction runnable(key) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n other = _ref.other,\n backup = _ref.backup;\n\n if (!isFunction(key) && !isString(key)) throw new TypeError('@runnable only accept Function or String');\n return function (obj, prop, descriptor) {\n var _ref2 = descriptor || {},\n _value = _ref2.value,\n configurable = _ref2.configurable;\n\n if (!isFunction(_value)) throw new TypeError('@runnable can only be used on method, but not ' + _value + ' on property \"' + prop + '\".');\n var canIRun = isFunction(key) ? key : function () {\n var keys = key.split('.');\n var originTarget = isPrimitive(other) ? this : other;\n return getDeepProperty$1(originTarget, keys);\n };\n backup = isFunction(backup) ? backup : function () {};\n return {\n value: function value() {\n if (bind$1(canIRun, this).apply(undefined, arguments) === true) {\n return bind$1(_value, this).apply(undefined, arguments);\n } else {\n // $FlowFixMe: I have reassign it when it's not a function\n return bind$1(backup, this).apply(undefined, arguments);\n }\n },\n\n // function should not be enmuerable\n enumerable: false,\n configurable: configurable,\n // as we have delay this function\n // it's not a good idea to change it\n writable: false\n };\n };\n}\n\nfunction nonconfigurable(obj, prop, descriptor) {\n if (descriptor === undefined) {\n return {\n value: undefined,\n enumerable: true,\n configurable: true,\n writable: true\n };\n }\n descriptor.configurable = true;\n return descriptor;\n}\n\nfunction string() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var defaultValue = isString(args[0]) ? args.shift() : '';\n args.unshift(function (value) {\n return isString(value) ? value : defaultValue;\n });\n return initialize.apply(undefined, args);\n}\n\nfunction boolean() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var defaultValue = isBoolean(args[0]) ? args.shift() : false;\n args.unshift(function (value) {\n return isBoolean(value) ? value : defaultValue;\n });\n return initialize.apply(undefined, args);\n}\n\nfunction string$1() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var defaultValue = isString(args[0]) ? args.shift() : '';\n args.unshift(function (value) {\n return isString(value) ? value : defaultValue;\n });\n return accessor({ set: args, get: args });\n}\n\nfunction boolean$1() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var defaultValue = isBoolean(args[0]) ? args.shift() : false;\n args.unshift(function (value) {\n return isBoolean(value) ? value : defaultValue;\n });\n return accessor({ set: args, get: args });\n}\n\nfunction number$1() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var defaultValue = isNumber(args[0]) ? args.shift() : 0;\n args.unshift(function (value) {\n return isNumber(value) ? value : defaultValue;\n });\n return accessor({ set: args, get: args });\n}\n\nvar before$1 = classify(before, {\n requirement: function requirement(obj, prop, desc) {\n // $FlowFixMe: it's data descriptor now\n return isDataDescriptor(desc) && isFunction(desc.value);\n },\n\n customArgs: true\n});\n\nvar after$1 = classify(after, {\n requirement: function requirement(obj, prop, desc) {\n // $FlowFixMe: it's data descriptor now\n return isDataDescriptor(desc) && isFunction(desc.value);\n },\n\n customArgs: true\n});\n\nvar runnable$1 = classify(runnable, {\n requirement: function requirement(obj, prop, desc) {\n // $FlowFixMe: it's data descriptor now\n return isDataDescriptor(desc) && isFunction(desc.value);\n },\n\n customArgs: true\n});\n\nvar waituntil$1 = classify(waituntil, {\n requirement: function requirement(obj, prop, desc) {\n // $FlowFixMe: it's data descriptor now\n return isDataDescriptor(desc) && isFunction(desc.value);\n },\n\n customArgs: true\n});\n\n// 20.1.2.4 Number.isNaN(number)\n\n\n_export(_export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n\nvar isNan = _core.Number.isNaN;\n\nvar isNan$1 = createCommonjsModule(function (module) {\nmodule.exports = { \"default\": isNan, __esModule: true };\n});\n\nvar _Number$isNaN = unwrapExports(isNan$1);\n\nvar $JSON$1 = _core.JSON || (_core.JSON = { stringify: JSON.stringify });\nvar stringify = function stringify(it) { // eslint-disable-line no-unused-vars\n return $JSON$1.stringify.apply($JSON$1, arguments);\n};\n\nvar stringify$1 = createCommonjsModule(function (module) {\nmodule.exports = { \"default\": stringify, __esModule: true };\n});\n\nunwrapExports(stringify$1);\n\nvar get = createCommonjsModule(function (module, exports) {\n\nexports.__esModule = true;\n\n\n\nvar _getPrototypeOf2 = _interopRequireDefault(getPrototypeOf$1);\n\n\n\nvar _getOwnPropertyDescriptor2 = _interopRequireDefault(getOwnPropertyDescriptor$1);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function get(object, property, receiver) {\n if (object === null) object = Function.prototype;\n var desc = (0, _getOwnPropertyDescriptor2.default)(object, property);\n\n if (desc === undefined) {\n var parent = (0, _getPrototypeOf2.default)(object);\n\n if (parent === null) {\n return undefined;\n } else {\n return get(parent, property, receiver);\n }\n } else if (\"value\" in desc) {\n return desc.value;\n } else {\n var getter = desc.get;\n\n if (getter === undefined) {\n return undefined;\n }\n\n return getter.call(receiver);\n }\n};\n});\n\nvar _get = unwrapExports(get);\n\nvar VENDOR_PREFIXES = ['', 'o', 'ms', 'moz', 'webkit', 'webkitCurrent'];\n\nvar SYNONYMS = [['', ''], // empty\n['exit', 'cancel'], // firefox & old webkits expect cancelFullScreen instead of exitFullscreen\n['screen', 'Screen']];\n\nvar DESKTOP_FULLSCREEN_STYLE = {\n position: 'fixed',\n zIndex: '2147483647',\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n overflow: 'hidden',\n width: '100%',\n height: '100%'\n};\n\nvar FULLSCREEN_CHANGE = ['fullscreenchange', 'webkitfullscreenchange', 'mozfullscreenchange', 'MSFullscreenChange'];\n\nvar FULLSCREEN_ERROR = ['fullscreenerror', 'webkitfullscreenerror', 'mozfullscreenerror', 'MSFullscreenError'];\n\nvar supportDocument = typeof document !== 'undefined';\n\nfunction setStyle$1(el, key, val) {\n if (isObject(key)) {\n for (var k in key) {\n setStyle$1(el, k, key[k]);\n }\n } else {\n // $FlowFixMe: we found it\n el.style[key] = val;\n }\n}\n\nfunction native(target, name) {\n var option = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (isObject(name)) {\n option = name;\n }\n if (isString(target)) {\n name = target;\n }\n var _option = option,\n _option$keyOnly = _option.keyOnly,\n keyOnly = _option$keyOnly === undefined ? false : _option$keyOnly;\n /* istanbul ignore if */\n\n if (!supportDocument) {\n return keyOnly ? '' : undefined;\n }\n if (!isElement(target)) {\n target = document;\n }\n if (!isString(name)) throw new Error('You must pass in a string as name, but not ' + (typeof name === 'undefined' ? 'undefined' : _typeof(name)) + '.');\n for (var i = 0; i < SYNONYMS.length; i++) {\n name = name.replace(SYNONYMS[i][0], SYNONYMS[i][1]);\n for (var j = 0; j < VENDOR_PREFIXES.length; j++) {\n var prefixed = j === 0 ? name : VENDOR_PREFIXES[j] + name.charAt(0).toUpperCase() + name.substr(1);\n // $FlowFixMe: we support document computed property here\n if (target[prefixed] !== undefined) return keyOnly ? prefixed : target[prefixed];\n }\n }\n return keyOnly ? '' : undefined;\n}\n\nfunction dispatchEvent(element, name) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n _ref$bubbles = _ref.bubbles,\n bubbles = _ref$bubbles === undefined ? true : _ref$bubbles,\n _ref$cancelable = _ref.cancelable,\n cancelable = _ref$cancelable === undefined ? true : _ref$cancelable;\n\n var event = void 0;\n /* istanbul ignore else */\n if (isFunction(Event)) {\n event = new Event(name, {\n bubbles: bubbles,\n cancelable: cancelable\n });\n } else if (supportDocument && document.createEvent) {\n event = document.createEvent('HTMLEvents');\n event.initEvent(name, true, true);\n } else if (supportDocument && document.createEventObject) {\n // $FlowFixMe: IE < 9\n event = document.createEventObject();\n event.eventType = name;\n event.eventName = name;\n }\n /* istanbul ignore next */\n if (!isObject(event) && !isEvent(event)) throw new Error(\"We can't create an object on this browser, please report to author\");\n /* istanbul ignore else */\n if (element.dispatchEvent) {\n element.dispatchEvent(event);\n // $FlowFixMe: IE < 9\n } else if (element.fireEvent) {\n // $FlowFixMe: IE < 9\n element.fireEvent('on' + event.eventType, event); // can trigger only real event (e.g. 'click')\n // $FlowFixMe: support computed key\n } else if (element[name]) {\n // $FlowFixMe: support computed key\n element[name]();\n // $FlowFixMe: support computed key\n } else if (element['on' + name]) {\n // $FlowFixMe: support computed key\n element['on' + name]();\n }\n}\n\nvar _dec, _dec2, _dec3, _dec4, _dec5, _class, _class2;\n\nfunction _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {\n var desc = {};\n Object['ke' + 'ys'](descriptor).forEach(function (key) {\n desc[key] = descriptor[key];\n });\n desc.enumerable = !!desc.enumerable;\n desc.configurable = !!desc.configurable;\n\n if ('value' in desc || desc.initializer) {\n desc.writable = true;\n }\n\n desc = decorators.slice().reverse().reduce(function (desc, decorator) {\n return decorator(target, property, desc) || desc;\n }, desc);\n\n if (context && desc.initializer !== void 0) {\n desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n desc.initializer = undefined;\n }\n\n if (desc.initializer === void 0) {\n Object['define' + 'Property'](target, property, desc);\n desc = null;\n }\n\n return desc;\n}\nvar fullscreenEnabled = native('fullscreenEnabled');\nvar useStyleFirst = false;\n\nvar ESFullScreen = (_dec = autobindClass(), _dec2 = alias('requestFullscreen'), _dec3 = alias('exitFullscreen'), _dec4 = alias('addEventListener'), _dec5 = alias('removeEventListener'), _dec(_class = (_class2 = function () {\n function ESFullScreen() {\n _classCallCheck(this, ESFullScreen);\n\n this._fullscreenElement = null;\n this.isNativelySupport = defined(native('fullscreenElement')) && (!defined(fullscreenEnabled) || fullscreenEnabled === true);\n this._openKey = supportDocument ? native(document.body || document.documentElement, 'requestFullscreen', { keyOnly: true }) : '';\n this._exitKey = native('exitFullscreen', { keyOnly: true });\n this._useStyleFirst = false;\n this.hasUsedStyle = false;\n }\n\n _createClass(ESFullScreen, [{\n key: 'open',\n value: function open(element) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref$force = _ref.force,\n force = _ref$force === undefined ? false : _ref$force;\n var originElement = this.fullscreenElement;\n if (originElement && originElement !== element) {\n if (!force) {\n dispatchEvent(document, 'fullscreenerror');\n return false;\n }\n this.exit();\n }\n\n if (!this.useStyleFirst) {\n if (this.isNativelySupport) {\n // $FlowFixMe: support computed key on HTMLElment here\n isFunction(element[this._openKey]) && element[this._openKey]();\n return true;\n }\n\n // add wekitEnterFullscreen support as required in https://github.com/toxic-johann/es-fullscreen/issues/4\n /* istanbul ignore if */\n if (element instanceof HTMLVideoElement && element.webkitSupportsFullscreen &&\n // $FlowFixMe: support webkitEnterFullscreen on some werid safari\n isFunction(element.webkitEnterFullscreen)) {\n element.webkitEnterFullscreen();\n this._fullscreenElement = element;\n return true;\n }\n }\n\n this._savedStyles = _Object$keys(DESKTOP_FULLSCREEN_STYLE).reduce(function (styles, key) {\n // $FlowFixMe: support string here\n styles[key] = element.style[key];\n return styles;\n }, {});\n setStyle$1(element, DESKTOP_FULLSCREEN_STYLE);\n\n /* istanbul ignore else */\n if (document.body) {\n this._bodyOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n }\n /* istanbul ignore else */\n if (document.documentElement) {\n this._htmlOverflow = document.documentElement.style.overflow;\n document.documentElement.style.overflow = 'hidden';\n }\n this._fullscreenElement = element;\n this.hasUsedStyle = true;\n dispatchEvent(element, 'fullscreenchange');\n return true;\n }\n }, {\n key: 'exit',\n value: function exit() {\n if (!this.isFullscreen) return false;\n if (this.isNativelySupport && !this.useStyleFirst && !this.hasUsedStyle) {\n // $FlowFixMe: support document computed key here\n document[this._exitKey]();\n return true;\n }\n // $FlowFixMe: element is an Elment here\n var element = this._fullscreenElement;\n setStyle$1(element, this._savedStyles);\n /* istanbul ignore else */\n if (document.body) document.body.style.overflow = this._bodyOverflow;\n /* istanbul ignore else */\n if (document.documentElement) document.documentElement.style.overflow = this._htmlOverflow;\n\n this._fullscreenElement = null;\n this._savedStyles = {};\n dispatchEvent(element, 'fullscreenchange');\n return true;\n }\n }, {\n key: 'on',\n value: function on(name, fn) {\n var element = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : document;\n\n this._handleEvent(element, 'addEventListener', name, fn);\n }\n }, {\n key: 'off',\n value: function off(name, fn) {\n var element = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : document;\n\n this._handleEvent(element, 'removeEventListener', name, fn);\n }\n }, {\n key: '_handleEvent',\n value: function _handleEvent(element, behavior, name, fn) {\n var names = name === 'fullscreenchange' ? FULLSCREEN_CHANGE : name === 'fullscreenerror' ? FULLSCREEN_ERROR : [name];\n names.forEach(function (name) {\n // $FlowFixMe: support computed attribute here\n element[behavior](name, fn);\n });\n }\n }, {\n key: 'useStyleFirst',\n get: function get() {\n return useStyleFirst;\n },\n set: function set(value) {\n value = !!value;\n if (value === useStyleFirst) return value;\n useStyleFirst = value;\n dispatchEvent(document, 'esfullscreenmethodchange');\n return value;\n }\n }, {\n key: 'fullscreenElement',\n get: function get() {\n var element = ['fullscreenElement', 'webkitFullscreenElement', 'mozFullScreenElement', 'msFullscreenElement'].reduce(function (element, key) {\n // $FlowFixMe: support computed element on document\n return element || document[key];\n }, null);\n return element || this._fullscreenElement;\n }\n }, {\n key: 'isFullscreen',\n get: function get() {\n return isElement(this.fullscreenElement);\n }\n }]);\n\n return ESFullScreen;\n}(), _applyDecoratedDescriptor(_class2.prototype, 'open', [_dec2], _Object$getOwnPropertyDescriptor(_class2.prototype, 'open'), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, 'exit', [_dec3], _Object$getOwnPropertyDescriptor(_class2.prototype, 'exit'), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, 'on', [_dec4], _Object$getOwnPropertyDescriptor(_class2.prototype, 'on'), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, 'off', [_dec5], _Object$getOwnPropertyDescriptor(_class2.prototype, 'off'), _class2.prototype), _class2)) || _class);\n\nvar index = new ESFullScreen();\n\nvar isEnum$1 = _objectPie.f;\nvar _objectToArray = function (isEntries) {\n return function (it) {\n var O = _toIobject(it);\n var keys = _objectKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum$1.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n\n// https://github.com/tc39/proposal-object-values-entries\n\nvar $entries = _objectToArray(true);\n\n_export(_export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n\nvar entries = _core.Object.entries;\n\nvar entries$1 = createCommonjsModule(function (module) {\nmodule.exports = { \"default\": entries, __esModule: true };\n});\n\nvar _Object$entries = unwrapExports(entries$1);\n\nvar tempCurrentTime = 0;\n\nvar NativeVideoKernel = function (_CustEvent) {\n _inherits(NativeVideoKernel, _CustEvent);\n\n _createClass(NativeVideoKernel, null, [{\n key: 'isSupport',\n\n /* istanbul ignore next */\n value: function isSupport() {\n return true;\n }\n }]);\n\n function NativeVideoKernel(videoElement, config, customConfig) {\n _classCallCheck(this, NativeVideoKernel);\n\n var _this = _possibleConstructorReturn(this, (NativeVideoKernel.__proto__ || _Object$getPrototypeOf(NativeVideoKernel)).call(this));\n\n if (!isElement(videoElement)) throw new Error('You must pass in an legal video element but not ' + (typeof videoElement === 'undefined' ? 'undefined' : _typeof(videoElement)));\n _this.video = videoElement;\n _this.config = config;\n _this.customConfig = customConfig;\n return _this;\n }\n\n _createClass(NativeVideoKernel, [{\n key: 'load',\n value: function load(src) {\n this.video.setAttribute('src', src);\n this.video.src = src;\n }\n }, {\n key: 'startLoad',\n value: function startLoad(src) {\n /* istanbul ignore next */\n var currentTime = this.video.currentTime || tempCurrentTime;\n this.load(src);\n this.seek(currentTime);\n }\n\n // https://developer.mozilla.org/de/docs/Web/HTML/Using_HTML5_audio_and_video#Stopping_the_download_of_media\n\n }, {\n key: 'stopLoad',\n value: function stopLoad() {\n tempCurrentTime = this.video.currentTime;\n this.video.src = '';\n this.video.removeAttribute('src');\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n /* istanbul ignore next */\n if (isElement(this.video)) this.stopLoad();\n }\n }, {\n key: 'play',\n value: function play() {\n return this.video.play();\n }\n }, {\n key: 'pause',\n value: function pause() {\n return this.video.pause();\n }\n }, {\n key: 'refresh',\n value: function refresh() {\n this.video.src = this.config.src;\n }\n }, {\n key: 'attachMedia',\n value: function attachMedia() {}\n }, {\n key: 'seek',\n value: function seek(seconds) {\n this.video.currentTime = seconds;\n }\n }]);\n\n return NativeVideoKernel;\n}(CustEvent);\n\nvar defaultConfig = {\n isLive: false, // vod or live\n box: '', // box type : native mp4 hls flv\n preset: {},\n presetConfig: {}\n};\n\nvar LOG_TAG = 'chimee-kernel';\nvar kernelEvents = ['mediaInfo', 'heartbeat', 'error'];\nvar boxSuffixMap = {\n flv: '.flv',\n hls: '.m3u8',\n mp4: '.mp4'\n};\n\nvar ChimeeKernel = function (_CustEvent) {\n _inherits(ChimeeKernel, _CustEvent);\n\n /**\n * kernelWrapper\n * @param {any} wrap videoElement\n * @param {any} option\n * @class kernel\n */\n function ChimeeKernel(videoElement, config) {\n _classCallCheck(this, ChimeeKernel);\n\n var _this = _possibleConstructorReturn(this, (ChimeeKernel.__proto__ || _Object$getPrototypeOf(ChimeeKernel)).call(this));\n\n _this.VERSION = '1.4.0';\n\n if (!isElement(videoElement)) throw new Error('You must pass in an video element to the chimee-kernel');\n // copy and maintain only one config for chimee-kernel\n // actually kernel is disposable in most situation nowaday\n _this.config = deepAssign({}, defaultConfig, config);\n _this.videoElement = videoElement;\n _this.initVideoKernel();\n _this.bindEvents(_this.videoKernel);\n return _this;\n }\n\n _createClass(ChimeeKernel, [{\n key: 'destroy',\n value: function destroy() {\n this.bindEvents(this.videoKernel, true);\n this.videoKernel.destroy();\n }\n }, {\n key: 'initVideoKernel',\n value: function initVideoKernel() {\n var config = this.config;\n var box = this.chooseBox(config);\n this.box = box;\n var VideoKernel = this.chooseVideoKernel(this.box, config.preset);\n\n if (!isFunction(VideoKernel)) throw new Error('We can\\'t find video kernel for ' + box + '. Please check your config and make sure it\\'s installed or provided');\n\n var customConfig = config.presetConfig[this.box] || {};\n\n // TODO: nowaday, kernels all get config from one config\n // it's not a good way, because custom config may override kernel config\n // so we may remove this code later\n deepAssign(config, customConfig);\n\n this.videoKernel = new VideoKernel(this.videoElement, config, customConfig);\n }\n\n // return the config box\n // or choose the right one according to the src\n\n }, {\n key: 'chooseBox',\n value: function chooseBox(_ref) {\n var src = _ref.src,\n box = _ref.box;\n\n if (isString(box) && box) return box;\n src = src.toLowerCase();\n for (var key in boxSuffixMap) {\n var suffix = boxSuffixMap[key];\n if (src.indexOf(suffix) > -1) return key;\n }\n return 'native';\n }\n\n // choose the right video kernel according to the box setting\n\n }, {\n key: 'chooseVideoKernel',\n value: function chooseVideoKernel(box, preset) {\n switch (box) {\n case 'native':\n // $FlowFixMe: it's the same as videoKernel\n return NativeVideoKernel;\n case 'mp4':\n return this.getMp4Kernel(preset.mp4);\n case 'flv':\n case 'hls':\n return preset[box];\n default:\n throw new Error('We currently do not support box ' + box + ', please contact us through https://github.com/Chimeejs/chimee/issues.');\n }\n }\n\n // fetch the legal mp4 kernel\n // if it's not exist or not support\n // we will fall back to the native video kernel\n\n }, {\n key: 'getMp4Kernel',\n value: function getMp4Kernel(mp4Kernel) {\n var hasLegalMp4Kernel = mp4Kernel && isFunction(mp4Kernel.isSupport);\n // $FlowFixMe: we have make sure it's an kernel now\n var supportMp4Kernel = hasLegalMp4Kernel && mp4Kernel.isSupport();\n // $FlowFixMe: we have make sure it's an kernel now\n if (supportMp4Kernel) return mp4Kernel;\n if (hasLegalMp4Kernel) this.warnLog('mp4 decode is not support in this browser, we will switch to the native video kernel');\n this.box = 'native';\n // $FlowFixMe: it's the same as videoKernel\n return NativeVideoKernel;\n }\n }, {\n key: 'errorLog',\n value: function errorLog() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n this.emit('error', new Error(args[0]));\n return Log.error.apply(Log, [LOG_TAG].concat(args));\n }\n }, {\n key: 'warnLog',\n value: function warnLog() {\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return Log.warn.apply(Log, [LOG_TAG].concat(args));\n }\n }, {\n key: 'bindEvents',\n value: function bindEvents(videoKernel) {\n var _this2 = this;\n\n var remove = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n kernelEvents.forEach(function (eventName) {\n /* istanbul ignore next */\n // $FlowFixMe: we have make sure it's legal now\n videoKernel[remove ? 'off' : 'on'](eventName, function () {\n var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n data = _ref2.data;\n\n _this2.emit(eventName, data);\n });\n });\n }\n }, {\n key: 'attachMedia',\n value: function attachMedia() {\n this.videoKernel.attachMedia();\n }\n }, {\n key: 'load',\n value: function load() {\n var src = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.config.src;\n\n this.config.src = src;\n this.videoKernel.load(src);\n }\n }, {\n key: 'startLoad',\n value: function startLoad() {\n /* istanbul ignore if */\n if (!isFunction(this.videoKernel.startLoad)) throw new Error('This video kernel do not support startLoad, please contact us on https://github.com/Chimeejs/chimee/issues');\n this.videoKernel.startLoad(this.config.src);\n }\n }, {\n key: 'stopLoad',\n value: function stopLoad() {\n /* istanbul ignore else */\n if (isFunction(this.videoKernel.stopLoad)) this.videoKernel.stopLoad();\n }\n }, {\n key: 'play',\n value: function play() {\n this.videoKernel.play();\n }\n }, {\n key: 'pause',\n value: function pause() {\n this.videoKernel.pause();\n }\n }, {\n key: 'seek',\n value: function seek(seconds) {\n if (!isNumber(seconds)) {\n this.errorLog('When you try to seek, you must offer us a number, but not ' + (typeof seconds === 'undefined' ? 'undefined' : _typeof(seconds)));\n return;\n }\n this.videoKernel.seek(seconds);\n }\n }, {\n key: 'refresh',\n value: function refresh() {\n this.videoKernel.refresh();\n }\n }, {\n key: 'currentTime',\n get: function get() {\n return this.videoElement.currentTime || 0;\n }\n }]);\n\n return ChimeeKernel;\n}(CustEvent);\n\nvar _global$1 = createCommonjsModule(function (module) {\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n});\n\nvar _core$1 = createCommonjsModule(function (module) {\nvar core = module.exports = { version: '2.5.3' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n});\nvar _core_1$1 = _core$1.version;\n\nvar _isObject$1 = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\nvar _anObject$1 = function (it) {\n if (!_isObject$1(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n\nvar _fails$1 = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n\n// Thank's IE8 for his funny defineProperty\nvar _descriptors$1 = !_fails$1(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n\nvar document$3 = _global$1.document;\n// typeof document.createElement is 'object' in old IE\nvar is$1 = _isObject$1(document$3) && _isObject$1(document$3.createElement);\nvar _domCreate$1 = function (it) {\n return is$1 ? document$3.createElement(it) : {};\n};\n\nvar _ie8DomDefine$1 = !_descriptors$1 && !_fails$1(function () {\n return Object.defineProperty(_domCreate$1('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n\n// 7.1.1 ToPrimitive(input [, PreferredType])\n\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nvar _toPrimitive$1 = function (it, S) {\n if (!_isObject$1(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !_isObject$1(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !_isObject$1(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !_isObject$1(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n\nvar dP$4 = Object.defineProperty;\n\nvar f$8 = _descriptors$1 ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n _anObject$1(O);\n P = _toPrimitive$1(P, true);\n _anObject$1(Attributes);\n if (_ie8DomDefine$1) try {\n return dP$4(O, P, Attributes);\n } catch (e) { /* 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\nvar _objectDp$1 = {\n\tf: f$8\n};\n\nvar _propertyDesc$1 = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n\nvar _hide$1 = _descriptors$1 ? function (object, key, value) {\n return _objectDp$1.f(object, key, _propertyDesc$1(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n\nvar hasOwnProperty$1 = {}.hasOwnProperty;\nvar _has$1 = function (it, key) {\n return hasOwnProperty$1.call(it, key);\n};\n\nvar id$2 = 0;\nvar px$1 = Math.random();\nvar _uid$1 = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id$2 + px$1).toString(36));\n};\n\nvar _redefine$1 = createCommonjsModule(function (module) {\nvar SRC = _uid$1('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\n_core$1.inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) _has$1(val, 'name') || _hide$1(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) _has$1(val, SRC) || _hide$1(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === _global$1) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n _hide$1(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n _hide$1(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n});\n\nvar _aFunction$1 = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n\n// optional / simple context binding\n\nvar _ctx$1 = function (fn, that, length) {\n _aFunction$1(fn);\n if (that === undefined) return fn;\n switch (length) {\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\nvar PROTOTYPE$3 = 'prototype';\n\nvar $export$1 = function (type, name, source) {\n var IS_FORCED = type & $export$1.F;\n var IS_GLOBAL = type & $export$1.G;\n var IS_STATIC = type & $export$1.S;\n var IS_PROTO = type & $export$1.P;\n var IS_BIND = type & $export$1.B;\n var target = IS_GLOBAL ? _global$1 : IS_STATIC ? _global$1[name] || (_global$1[name] = {}) : (_global$1[name] || {})[PROTOTYPE$3];\n var exports = IS_GLOBAL ? _core$1 : _core$1[name] || (_core$1[name] = {});\n var expProto = exports[PROTOTYPE$3] || (exports[PROTOTYPE$3] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? _ctx$1(out, _global$1) : IS_PROTO && typeof out == 'function' ? _ctx$1(Function.call, out) : out;\n // extend global\n if (target) _redefine$1(target, key, out, type & $export$1.U);\n // export\n if (exports[key] != out) _hide$1(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\n_global$1.core = _core$1;\n// type bitmap\n$export$1.F = 1; // forced\n$export$1.G = 2; // global\n$export$1.S = 4; // static\n$export$1.P = 8; // proto\n$export$1.B = 16; // bind\n$export$1.W = 32; // wrap\n$export$1.U = 64; // safe\n$export$1.R = 128; // real proto method for `library`\nvar _export$1 = $export$1;\n\n// https://github.com/tc39/proposal-global\n\n\n_export$1(_export$1.G, { global: _global$1 });\n\nvar global$1 = _core$1.global;\n\nvar videoEvents = ['abort', 'canplay', 'canplaythrough', 'durationchange', 'emptied', 'encrypted', 'ended', 'error', 'interruptbegin', 'interruptend', 'loadeddata', 'loadedmetadata', 'loadstart', 'mozaudioavailable', 'pause', 'play', 'playing', 'progress', 'ratechange', 'seeked', 'seeking', 'stalled', 'suspend', 'timeupdate', 'volumechange', 'waiting'];\nvar videoReadOnlyProperties = ['buffered', 'currentSrc', 'duration', 'error', 'ended', 'networkState', 'paused', 'readyState', 'seekable', 'sinkId', 'controlsList', 'tabIndex', 'dataset', 'offsetHeight', 'offsetLeft', 'offsetParent', 'offsetTop', 'offsetWidth'];\nvar domEvents = ['beforeinput', 'blur', 'click', 'compositionend', 'compositionstart', 'compositionupdate', 'dblclick', 'focus', 'focusin', 'focusout', 'input', 'keydown', 'keypress', 'keyup', 'mousedown', 'mouseenter', 'mouseleave', 'mousemove', 'mouseout', 'mouseover', 'mouseup', 'resize', 'scroll', 'select', 'wheel', 'mousewheel', 'fullscreenchange', 'contextmenu', 'touchstart', 'touchmove', 'touchend'];\nvar passiveEvents = ['wheel', 'mousewheel', 'touchstart', 'touchmove'];\nvar selfProcessorEvents = ['silentLoad', 'fullscreen'];\nvar kernelMethods = ['play', 'pause', 'seek', 'startLoad', 'stopLoad'];\nvar dispatcherMethods = ['load'];\nvar kernelEvents$1 = ['mediaInfo', 'heartbeat', 'error'];\nvar domMethods = ['focus', 'fullscreen', 'requestFullscreen', 'exitFullscreen'];\nvar videoMethods = ['canPlayType', 'captureStream', 'setSinkId'];\n\nvar _dec$1, _dec2$1, _dec3$1, _dec4$1, _class$1;\n\nfunction _applyDecoratedDescriptor$1(target, property, decorators, descriptor, context) {\n var desc = {};\n Object['ke' + 'ys'](descriptor).forEach(function (key) {\n desc[key] = descriptor[key];\n });\n desc.enumerable = !!desc.enumerable;\n desc.configurable = !!desc.configurable;\n\n if ('value' in desc || desc.initializer) {\n desc.writable = true;\n }\n\n desc = decorators.slice().reverse().reduce(function (desc, decorator) {\n return decorator(target, property, desc) || desc;\n }, desc);\n\n if (context && desc.initializer !== void 0) {\n desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n desc.initializer = undefined;\n }\n\n if (desc.initializer === void 0) {\n Object['define' + 'Property'](target, property, desc);\n desc = null;\n }\n\n return desc;\n}\nvar secondaryReg = /^(before|after|_)/;\nfunction secondaryChecker(key) {\n if (key.match(secondaryReg)) {\n return false;\n }\n return true;\n}\n/**\n * \n * event Bus class. Bus take charge of commuication between plugins and user.\n * Some of the event may trigger the kernel to do some task.\n * An event will run in four lifecycle\n * before -> processor -> main -> after -> side effect(_)\n * -------------------- emit period ----------------\n * before: once an event emit, it will run through plugins in bubble to know is it possible to run.\n * processor: if sth need to be done on kernel. It will tell kernel. If kernel will trigger event later, it will break down here. Else will run into trigger period\n * -------------------- trigger period -----------------\n * main: this procedure will trigger the main event in bubble, which means it can be stop in one plugin.\n * after: once event run through all events. It will trigger after event. This event will be trigger in broadcast way.\n * side effect(_): This events will always trigger once we bump into trigger period. So that you can know if the events been blocked. But it's not advice to listen on this effect.\n *
\n */\nvar Bus = (_dec$1 = runnable(secondaryChecker), _dec2$1 = runnable(secondaryChecker, {\n backup: function backup() {\n return false;\n }\n}), _dec3$1 = runnable(secondaryChecker), _dec4$1 = runnable(secondaryChecker, {\n backup: function backup() {\n return false;\n }\n}), _class$1 = function () {\n /**\n * @param {Dispatcheer} dispatcher bus rely on dispatcher, so you mush pass dispatcher at first when you generate Bus.\n * @return {Bus}\n */\n\n /**\n * the handler set of all events\n * @type {Object}\n * @member events\n */\n function Bus(dispatcher) {\n _classCallCheck(this, Bus);\n\n this.events = {};\n this.onceMap = {};\n\n /**\n * the referrence to dispatcher\n * @type {Dispatcher}\n */\n this.__dispatcher = dispatcher;\n }\n /**\n * [Can only be called in dispatcher]bind event on bus.\n * @param {string} id plugin's id\n * @param {string} key event's name\n * @param {fn} handler function\n */\n\n\n _createClass(Bus, [{\n key: 'on',\n value: function on(id, key, fn) {\n var _getEventStage2 = this._getEventStage(key),\n stage = _getEventStage2.stage,\n eventName = _getEventStage2.key;\n\n this._addEvent([eventName, stage, id], fn);\n }\n /**\n * [Can only be called in dispatcher]remove event off bus. Only suggest one by one.\n * @param {string} id plugin's id\n * @param {string} key event's name\n * @param {fn} handler function\n */\n\n }, {\n key: 'off',\n value: function off(id, key, fn) {\n var _getEventStage3 = this._getEventStage(key),\n stage = _getEventStage3.stage,\n eventName = _getEventStage3.key;\n\n var keys = [eventName, stage, id];\n var deleted = this._removeEvent(keys, fn);\n if (deleted) return;\n var handler = this._getHandlerFromOnceMap(keys, fn);\n if (isFunction(handler)) {\n this._removeEvent(keys, handler) && this._removeFromOnceMap(keys, fn, handler);\n }\n }\n /**\n * [Can only be called in dispatcher]bind event on bus and remove it once event is triggered.\n * @param {string} id plugin's id\n * @param {string} key event's name\n * @param {Function} fn handler function\n */\n\n }, {\n key: 'once',\n value: function once(id, key, fn) {\n var _getEventStage4 = this._getEventStage(key),\n stage = _getEventStage4.stage,\n eventName = _getEventStage4.key;\n\n var bus = this;\n var keys = [eventName, stage, id];\n var handler = function handler() {\n // keep the this so that it can run\n bind(fn, this).apply(undefined, arguments);\n bus._removeEvent(keys, handler);\n bus._removeFromOnceMap(keys, fn, handler);\n };\n this._addEvent(keys, handler);\n this._addToOnceMap(keys, fn, handler);\n }\n /**\n * [Can only be called in dispatcher]emit an event, which will run before -> processor period.\n * It may stop in before period.\n * @param {string} key event's name\n * @param {anything} args other argument will be passed into handler\n * @return {Promise} this promise maybe useful if the event would not trigger kernel event. In that will you can know if it runs successful. But you can know if the event been stopped by the promise.\n */\n\n }, {\n key: 'emit',\n value: function emit(key) {\n var _this = this;\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 var event = this.events[key];\n if (isEmpty(event)) {\n if (selfProcessorEvents.indexOf(key) > -1) return _Promise.resolve();\n // $FlowFixMe: conditional return here\n return this._eventProcessor.apply(this, [key, { sync: false }].concat(_toConsumableArray(args)));\n }\n var beforeQueue = this._getEventQueue(event.before, this.__dispatcher.order);\n return runRejectableQueue.apply(undefined, [beforeQueue].concat(_toConsumableArray(args))).then(function () {\n if (selfProcessorEvents.indexOf(key) > -1) return;\n return _this._eventProcessor.apply(_this, [key, { sync: false }].concat(_toConsumableArray(args)));\n }).catch(function (error) {\n if (isError(error)) _this.__dispatcher.throwError(error);\n return _Promise.reject(error);\n });\n }\n /**\n * [Can only be called in dispatcher]emit an event, which will run before -> processor period synchronize.\n * It may stop in before period.\n * @param {string} key event's name\n * @param {anything} args other argument will be passed into handler\n * @return {Promise} this promise maybe useful if the event would not trigger kernel event. In that will you can know if it runs successful. But you can know if the event been stopped by the promise.\n */\n\n }, {\n key: 'emitSync',\n value: function emitSync(key) {\n var event = this.events[key];\n\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 if (isEmpty(event)) {\n if (selfProcessorEvents.indexOf(key) > -1) return true;\n // $FlowFixMe: conditional return here\n return this._eventProcessor.apply(this, [key, { sync: true }].concat(_toConsumableArray(args)));\n }\n var beforeQueue = this._getEventQueue(event.before, this.__dispatcher.order);\n return runStoppableQueue.apply(undefined, [beforeQueue].concat(_toConsumableArray(args))) && (selfProcessorEvents.indexOf(key) > -1 ||\n // $FlowFixMe: conditional return here\n this._eventProcessor.apply(this, [key, { sync: true }].concat(_toConsumableArray(args))));\n }\n /**\n * [Can only be called in dispatcher]trigger an event, which will run main -> after -> side effect period\n * @param {string} key event's name\n * @param {anything} args\n * @return {Promise|undefined} you can know if event trigger finished~ However, if it's unlegal\n */\n\n }, {\n key: 'trigger',\n value: function trigger(key) {\n var _this2 = this;\n\n for (var _len3 = arguments.length, args = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n\n var event = this.events[key];\n if (isEmpty(event)) {\n return _Promise.resolve(true);\n }\n var mainQueue = this._getEventQueue(event.main, this.__dispatcher.order);\n return runRejectableQueue.apply(undefined, [mainQueue].concat(_toConsumableArray(args))).then(function () {\n var afterQueue = _this2._getEventQueue(event.after, _this2.__dispatcher.order);\n return runRejectableQueue.apply(undefined, [afterQueue].concat(_toConsumableArray(args)));\n }).then(function () {\n return _this2._runSideEffectEvent.apply(_this2, [key, _this2.__dispatcher.order].concat(_toConsumableArray(args)));\n }).catch(function (error) {\n if (isError(error)) _this2.__dispatcher.throwError(error);\n return _this2._runSideEffectEvent.apply(_this2, [key, _this2.__dispatcher.order].concat(_toConsumableArray(args)));\n });\n }\n /**\n * [Can only be called in dispatcher]trigger an event, which will run main -> after -> side effect period in synchronize\n * @param {string} key event's name\n * @param {anything} args\n * @return {boolean} you can know if event trigger finished~ However, if it's unlegal\n */\n\n }, {\n key: 'triggerSync',\n value: function triggerSync(key) {\n var event = this.events[key];\n if (isEmpty(event)) {\n return true;\n }\n var mainQueue = this._getEventQueue(event.main, this.__dispatcher.order);\n var afterQueue = this._getEventQueue(event.after, this.__dispatcher.order);\n\n for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n\n var result = runStoppableQueue.apply(undefined, [mainQueue].concat(_toConsumableArray(args))) && runStoppableQueue.apply(undefined, [afterQueue].concat(_toConsumableArray(args)));\n this._runSideEffectEvent.apply(this, [key, this.__dispatcher.order].concat(_toConsumableArray(args)));\n return result;\n }\n /**\n * destroy hook which will be called when object destroy\n */\n\n }, {\n key: 'destroy',\n value: function destroy() {\n delete this.events;\n delete this.__dispatcher;\n }\n /**\n * add event into bus\n * @private\n * @param {Array} keys keys map pointing to position to put event handler\n * @param {function} fn handler to put\n */\n\n }, {\n key: '_addEvent',\n value: function _addEvent(keys, fn) {\n keys = deepClone(keys);\n var id = keys.pop();\n var target = keys.reduce(function (target, key) {\n target[key] = target[key] || {};\n return target[key];\n }, this.events);\n // events will store like {play: {main: {plugin: []}}}\n target[id] = target[id] || [];\n target[id].push(fn);\n }\n /**\n * remove event from bus\n * @private\n * @param {Array} keys keys map pointing to position to get event handler\n * @param {function} fn handler to put\n */\n\n }, {\n key: '_removeEvent',\n value: function _removeEvent(keys, fn) {\n keys = deepClone(keys);\n var id = keys.pop();\n var target = this.events;\n for (var i = 0, len = keys.length; i < len; i++) {\n var son = target[keys[i]];\n // if we can't find the event binder, just return\n if (isEmpty(son)) return;\n target = son;\n }\n var queue = target[id] || [];\n var index$$1 = queue.indexOf(fn);\n var hasFn = index$$1 > -1;\n // if we found handler remove it\n if (hasFn) {\n queue.splice(index$$1, 1);\n }\n // if this plugin has no event binding, we remove this event session, which make us perform faster in emit & trigger period.\n if (queue.length < 1) {\n delete target[id];\n }\n return hasFn;\n }\n }, {\n key: '_addToOnceMap',\n value: function _addToOnceMap(keys, fn, handler) {\n var key = keys.join('-');\n var map = this.onceMap[key] = this.onceMap[key] || new _Map();\n if (!map.has(fn)) map.set(fn, []);\n var handlers = map.get(fn);\n // $FlowFixMe: flow do not understand map yet\n handlers.push(handler);\n }\n }, {\n key: '_removeFromOnceMap',\n value: function _removeFromOnceMap(keys, fn, handler) {\n var key = keys.join('-');\n var map = this.onceMap[key];\n // do not need to check now\n // if(isVoid(map) || !map.has(fn)) return;\n var handlers = map.get(fn);\n var index$$1 = handlers.indexOf(handler);\n handlers.splice(index$$1, 1);\n if (isEmpty(handlers)) map.delete(fn);\n }\n }, {\n key: '_getHandlerFromOnceMap',\n value: function _getHandlerFromOnceMap(keys, fn) {\n var key = keys.join('-');\n var map = this.onceMap[key];\n if (isVoid(map) || !map.has(fn)) return;\n var handlers = map.get(fn);\n return handlers[0];\n }\n /**\n * get event stage by evnet key name\n * @private\n * @param {key} key event's name\n * @return {stage} event stage\n */\n\n }, {\n key: '_getEventStage',\n value: function _getEventStage(key) {\n var secondaryCheck = key.match(secondaryReg);\n var stage = secondaryCheck && secondaryCheck[0] || 'main';\n if (secondaryCheck) {\n key = camelize(key.replace(secondaryReg, ''));\n }\n return { stage: stage, key: key };\n }\n /**\n * get event handlers queue to run\n * @private\n * @param {Object} handlerSet the object include all handler\n * @param {Array} Array form of plugin id\n * @return {Array} event handler in queue to run\n */\n\n }, {\n key: '_getEventQueue',\n value: function _getEventQueue(handlerSet, order) {\n var _this3 = this;\n\n order = isArray(order) ? order.concat(['_vm']) : ['_vm'];\n return isEmpty(handlerSet) ? [] : order.reduce(function (queue, id) {\n if (isEmpty(handlerSet[id]) || !isArray(handlerSet[id]) ||\n // in case plugins is missed\n // _vm indicate the user. This is the function for user\n !_this3.__dispatcher.plugins[id] && id !== '_vm') {\n return queue;\n }\n return queue.concat(handlerSet[id].map(function (fn) {\n // bind context for plugin instance\n return bind(fn, _this3.__dispatcher.plugins[id] || _this3.__dispatcher.vm);\n }));\n }, []);\n }\n /**\n * event processor period. If event needs call kernel function.\n * I will called here.\n * If kernel will reponse. I will stop here.\n * Else I will trigger next period.\n * @param {string} key event's name\n * @param {boolean} options.sync we will take triggerSync if true, otherwise we will run trigger. default is false\n * @param {anything} args\n * @return {Promise|undefined}\n */\n\n }, {\n key: '_eventProcessor',\n value: function _eventProcessor(key, _ref) {\n var sync = _ref.sync;\n\n var isKernelMethod = kernelMethods.indexOf(key) > -1;\n var isDomMethod = domMethods.indexOf(key) > -1;\n var isDispatcherMethod = dispatcherMethods.indexOf(key) > -1;\n\n for (var _len5 = arguments.length, args = Array(_len5 > 2 ? _len5 - 2 : 0), _key5 = 2; _key5 < _len5; _key5++) {\n args[_key5 - 2] = arguments[_key5];\n }\n\n if (isKernelMethod || isDomMethod || isDispatcherMethod) {\n if (isDispatcherMethod) {\n var _dispatcher;\n\n (_dispatcher = this.__dispatcher)[key].apply(_dispatcher, _toConsumableArray(args));\n } else {\n var _dispatcher2;\n\n (_dispatcher2 = this.__dispatcher[isKernelMethod ? 'kernel' : 'dom'])[key].apply(_dispatcher2, _toConsumableArray(args));\n }\n if (videoEvents.indexOf(key) > -1 || domEvents.indexOf(key) > -1) return true;\n }\n // $FlowFixMe: flow do not support computed sytax on classs, but it's ok here\n return this[sync ? 'triggerSync' : 'trigger'].apply(this, [key].concat(_toConsumableArray(args)));\n }\n /**\n * run side effect period\n * @param {string} key event's name\n * @param {args} args\n */\n\n }, {\n key: '_runSideEffectEvent',\n value: function _runSideEffectEvent(key, order) {\n for (var _len6 = arguments.length, args = Array(_len6 > 2 ? _len6 - 2 : 0), _key6 = 2; _key6 < _len6; _key6++) {\n args[_key6 - 2] = arguments[_key6];\n }\n\n var event = this.events[key];\n if (isEmpty(event)) {\n return false;\n }\n var queue = this._getEventQueue(event._, order);\n queue.forEach(function (run) {\n return run.apply(undefined, _toConsumableArray(args));\n });\n return true;\n }\n }]);\n\n return Bus;\n}(), _applyDecoratedDescriptor$1(_class$1.prototype, 'emit', [_dec$1], _Object$getOwnPropertyDescriptor(_class$1.prototype, 'emit'), _class$1.prototype), _applyDecoratedDescriptor$1(_class$1.prototype, 'emitSync', [_dec2$1], _Object$getOwnPropertyDescriptor(_class$1.prototype, 'emitSync'), _class$1.prototype), _applyDecoratedDescriptor$1(_class$1.prototype, 'trigger', [_dec3$1], _Object$getOwnPropertyDescriptor(_class$1.prototype, 'trigger'), _class$1.prototype), _applyDecoratedDescriptor$1(_class$1.prototype, 'triggerSync', [_dec4$1], _Object$getOwnPropertyDescriptor(_class$1.prototype, 'triggerSync'), _class$1.prototype), _class$1);\n\n/**\n * checker for on, off, once function\n * @param {string} key\n * @param {Function} fn\n */\nfunction eventBinderCheck(key, fn) {\n if (!isString(key)) throw new TypeError('key parameter must be String');\n if (!isFunction(fn)) throw new TypeError('fn parameter must be Function');\n}\n/**\n * checker for attr or css function\n */\nfunction attrAndStyleCheck() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n if (args.length > 2) {\n return ['set'].concat(args);\n }\n if (args.length === 2) {\n if (['video', 'container', 'wrapper', 'videoElement'].indexOf(args[0]) > -1) {\n return ['get'].concat(args);\n }\n return ['set', 'container'].concat(args);\n }\n return ['get', 'container'].concat(args);\n}\n\nvar _dec$1$1, _dec2$1$1, _class$1$1, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7;\n\nfunction _initDefineProp(target, property, descriptor, context) {\n if (!descriptor) return;\n\n _Object$defineProperty(target, property, {\n enumerable: descriptor.enumerable,\n configurable: descriptor.configurable,\n writable: descriptor.writable,\n value: descriptor.initializer ? descriptor.initializer.call(context) : void 0\n });\n}\n\nfunction _applyDecoratedDescriptor$1$1(target, property, decorators, descriptor, context) {\n var desc = {};\n Object['ke' + 'ys'](descriptor).forEach(function (key) {\n desc[key] = descriptor[key];\n });\n desc.enumerable = !!desc.enumerable;\n desc.configurable = !!desc.configurable;\n\n if ('value' in desc || desc.initializer) {\n desc.writable = true;\n }\n\n desc = decorators.slice().reverse().reduce(function (desc, decorator) {\n return decorator(target, property, desc) || desc;\n }, desc);\n\n if (context && desc.initializer !== void 0) {\n desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n desc.initializer = undefined;\n }\n\n if (desc.initializer === void 0) {\n Object['define' + 'Property'](target, property, desc);\n desc = null;\n }\n\n return desc;\n}\n\nfunction stringOrVoid(value) {\n return isString(value) ? value : undefined;\n}\n\nfunction accessorVideoProperty(property) {\n return accessor({\n get: function get$$1(value) {\n return this.dispatcher.videoConfigReady && this.inited ? this.dom.videoElement[property] : value;\n },\n set: function set(value) {\n if (!this.dispatcher.videoConfigReady) return value;\n this.dom.videoElement[property] = value;\n return value;\n }\n });\n}\n\nfunction accessorVideoAttribute(attribute) {\n var _ref = isObject(attribute) ? attribute : {\n set: attribute,\n get: attribute,\n isBoolean: false\n },\n _set = _ref.set,\n _get$$1 = _ref.get,\n isBoolean$$1 = _ref.isBoolean;\n\n return accessor({\n get: function get$$1(value) {\n return this.dispatcher.videoConfigReady && this.inited ? this.dom.videoElement[_get$$1] : value;\n },\n set: function set(value) {\n if (!this.dispatcher.videoConfigReady) return value;\n var val = isBoolean$$1 ? value ? '' : undefined\n /* istanbul ignore next */\n : value === null ? undefined : value;\n this.dom.setAttr('video', _set, val);\n return value;\n }\n }, {\n preSet: false\n });\n}\n\nfunction accessorCustomAttribute(attribute, isBoolean$$1) {\n return accessor({\n get: function get$$1(value) {\n var attrValue = this.dom.getAttr('video', attribute);\n return this.dispatcher.videoConfigReady && this.inited ? isBoolean$$1 ? !!attrValue : attrValue : value;\n },\n set: function set(value) {\n if (!this.dispatcher.videoConfigReady) return value;\n var val = isBoolean$$1 ? value || undefined : value === null ? undefined : value;\n this.dom.setAttr('video', attribute, val);\n return value;\n }\n });\n}\n\nfunction accessorWidthAndHeight(property) {\n return accessor({\n get: function get$$1(value) {\n if (!this.dispatcher.videoConfigReady || !this.inited) return value;\n var attr = this.dom.getAttr('video', property);\n var prop = this.dom.videoElement[property];\n if (isNumeric(attr) && isNumber(prop)) return prop;\n return attr || undefined;\n },\n set: function set(value) {\n if (!this.dispatcher.videoConfigReady) return value;\n var val = void 0;\n if (value === undefined || isNumber(value)) {\n val = value;\n } else if (isString(value) && !_Number$isNaN(parseFloat(value))) {\n val = value;\n }\n this.dom.setAttr('video', property, val);\n return val;\n }\n });\n}\n\nvar accessorMap = {\n src: [string$1(), accessor({\n set: function set(val) {\n // must check val !== this.src here\n // as we will set config.src in the video\n // the may cause dead lock\n if (this.dispatcher.readySync && this.autoload && val !== this.src) this.needToLoadSrc = true;\n return val;\n }\n }), accessor({\n set: function set(val) {\n if (this.needToLoadSrc) {\n // unlock it at first, to avoid deadlock\n this.needToLoadSrc = false;\n this.dispatcher.bus.emit('load', val);\n }\n return val;\n }\n }, { preSet: false })],\n autoload: boolean$1(),\n autoplay: [boolean$1(), accessorVideoProperty('autoplay')],\n controls: [boolean$1(), accessorVideoProperty('controls')],\n width: [accessorWidthAndHeight('width')],\n height: [accessorWidthAndHeight('height')],\n crossOrigin: [accessor({ set: stringOrVoid }), accessorVideoAttribute({ set: 'crossorigin', get: 'crossOrigin' })],\n loop: [boolean$1(), accessorVideoProperty('loop')],\n defaultMuted: [boolean$1(), accessorVideoAttribute({ get: 'defaultMuted', set: 'muted', isBoolean: true })],\n muted: [boolean$1(), accessorVideoProperty('muted')],\n preload: [accessor({\n set: function set(value) {\n var options = ['none', 'auto', 'metadata', ''];\n return options.indexOf(value) > -1 ? value : 'none';\n }\n }, {\n preSet: true\n }), accessorVideoAttribute('preload')],\n poster: [\n // 因为如果在 video 上随便加一个字符串,他会将其拼接到地址上,所以这里要避免\n // 单元测试无法检测\n string$1(), accessor({\n get: function get$$1(value) {\n return this.dispatcher.videoConfigReady && this.inited ? this.dom.videoElement.poster : value;\n },\n set: function set(value) {\n if (!this.dispatcher.videoConfigReady) return value;\n if (value.length) this.dom.setAttr('video', 'poster', value);\n return value;\n }\n })],\n playsInline: [accessor({\n get: function get$$1(value) {\n var playsInline = this.dom.videoElement.playsInline;\n return this.dispatcher.videoConfigReady && this.inited ? playsInline === undefined ? value : playsInline : value;\n },\n set: function set(value) {\n if (!this.dispatcher.videoConfigReady) return value;\n this.dom.videoElement.playsInline = value;\n var val = value ? '' : undefined;\n this.dom.setAttr('video', 'playsinline', val);\n this.dom.setAttr('video', 'webkit-playsinline', val);\n this.dom.setAttr('video', 'x5-playsinline', val);\n return value;\n }\n }), boolean$1()],\n x5VideoPlayerFullscreen: [accessor({\n set: function set(value) {\n return !!value;\n },\n get: function get$$1(value) {\n return !!value;\n }\n }), accessorCustomAttribute('x5-video-player-fullscreen', true)],\n x5VideoOrientation: [accessor({ set: stringOrVoid }), accessorCustomAttribute('x5-video-orientation')],\n x5VideoPlayerType: [accessor({\n set: function set(value) {\n if (!this.dispatcher.videoConfigReady) return value;\n var val = value === 'h5' ? 'h5' : undefined;\n this.dom.setAttr('video', 'x5-video-player-type', val);\n return value;\n },\n get: function get$$1() {\n return this.dom.getAttr('video', 'x5-video-player-type') ? 'h5' : undefined;\n }\n })],\n xWebkitAirplay: [accessor({\n set: function set(value) {\n return !!value;\n },\n get: function get$$1(value) {\n return !!value;\n }\n }), accessorCustomAttribute('x-webkit-airplay', true)],\n playbackRate: [number$1(1), accessorVideoProperty('playbackRate')],\n defaultPlaybackRate: [accessorVideoProperty('defaultPlaybackRate'), number$1(1)],\n disableRemotePlayback: [boolean$1(), accessorVideoProperty('disableRemotePlayback')],\n volume: [number$1(1), accessorVideoProperty('volume')]\n};\n\nvar VideoConfig = (_dec$1$1 = boolean(), _dec2$1$1 = string(function (str) {\n return str.toLocaleLowerCase();\n}), _class$1$1 = function () {\n\n // 转为供 kernel 使用的内部参数\n function VideoConfig(dispatcher, config) {\n _classCallCheck(this, VideoConfig);\n\n _initDefineProp(this, 'needToLoadSrc', _descriptor, this);\n\n _initDefineProp(this, 'changeWatchable', _descriptor2, this);\n\n _initDefineProp(this, 'inited', _descriptor3, this);\n\n this.src = '';\n\n _initDefineProp(this, 'isLive', _descriptor4, this);\n\n _initDefineProp(this, 'box', _descriptor5, this);\n\n this.preset = {};\n this.presetConfig = {};\n this.autoload = true;\n this.autoplay = false;\n this.controls = false;\n this.width = '100%';\n this.height = '100%';\n this.crossOrigin = undefined;\n this.loop = false;\n this.defaultMuted = false;\n this.muted = false;\n this.preload = 'auto';\n this.poster = undefined;\n this.playsInline = false;\n this.x5VideoPlayerFullscreen = false;\n this.x5VideoOrientation = undefined;\n this.x5VideoPlayerType = undefined;\n this.xWebkitAirplay = false;\n this.playbackRate = 1;\n this.defaultPlaybackRate = 1;\n this.disableRemotePlayback = false;\n this.volume = 1;\n\n _initDefineProp(this, '_kernelProperty', _descriptor6, this);\n\n _initDefineProp(this, '_realDomAttr', _descriptor7, this);\n\n applyDecorators(this, accessorMap, { self: true });\n Object.defineProperty(this, 'dispatcher', {\n value: dispatcher,\n enumerable: false,\n writable: false,\n configurable: false\n });\n Object.defineProperty(this, 'dom', {\n value: dispatcher.dom,\n enumerable: false,\n writable: false,\n configurable: false\n });\n deepAssign(this, config);\n }\n\n // 此处 box 只能置空,因为 kernel 会自动根据你的安装 kernel 和相关地址作智能判断。\n // 曾经 bug 详见 https://github.com/Chimeejs/chimee-kernel/issues/1\n\n // kernels 不在 videoConfig 上设置默认值,防止判断出错\n\n\n _createClass(VideoConfig, [{\n key: 'init',\n value: function init() {\n var _this = this;\n\n this._realDomAttr.forEach(function (key) {\n // $FlowFixMe: we have check the computed here\n _this[key] = _this[key];\n });\n this.inited = true;\n }\n }]);\n\n return VideoConfig;\n}(), _descriptor = _applyDecoratedDescriptor$1$1(_class$1$1.prototype, 'needToLoadSrc', [nonenumerable], {\n enumerable: true,\n initializer: function initializer() {\n return false;\n }\n}), _descriptor2 = _applyDecoratedDescriptor$1$1(_class$1$1.prototype, 'changeWatchable', [nonenumerable], {\n enumerable: true,\n initializer: function initializer() {\n return true;\n }\n}), _descriptor3 = _applyDecoratedDescriptor$1$1(_class$1$1.prototype, 'inited', [nonenumerable], {\n enumerable: true,\n initializer: function initializer() {\n return false;\n }\n}), _descriptor4 = _applyDecoratedDescriptor$1$1(_class$1$1.prototype, 'isLive', [_dec$1$1, nonconfigurable], {\n enumerable: true,\n initializer: function initializer() {\n return false;\n }\n}), _descriptor5 = _applyDecoratedDescriptor$1$1(_class$1$1.prototype, 'box', [_dec2$1$1, nonconfigurable], {\n enumerable: true,\n initializer: function initializer() {\n return '';\n }\n}), _descriptor6 = _applyDecoratedDescriptor$1$1(_class$1$1.prototype, '_kernelProperty', [frozen], {\n enumerable: true,\n initializer: function initializer() {\n return ['isLive', 'box', 'preset', 'kernels', 'presetConfig'];\n }\n}), _descriptor7 = _applyDecoratedDescriptor$1$1(_class$1$1.prototype, '_realDomAttr', [frozen], {\n enumerable: true,\n initializer: function initializer() {\n return ['src', 'controls', 'width', 'height', 'crossOrigin', 'loop', 'muted', 'preload', 'poster', 'autoplay', 'playsInline', 'x5VideoPlayerFullscreen', 'x5VideoOrientation', 'xWebkitAirplay', 'playbackRate', 'defaultPlaybackRate', 'autoload', 'disableRemotePlayback', 'defaultMuted', 'volume', 'x5VideoPlayerType'];\n }\n}), _class$1$1);\n\nvar _dec$2, _dec2$2, _dec3$1$1, _dec4$1$1, _dec5$1, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _dec18, _dec19, _class$2, _class2$1;\n\nfunction _applyDecoratedDescriptor$2(target, property, decorators, descriptor, context) {\n var desc = {};\n Object['ke' + 'ys'](descriptor).forEach(function (key) {\n desc[key] = descriptor[key];\n });\n desc.enumerable = !!desc.enumerable;\n desc.configurable = !!desc.configurable;\n\n if ('value' in desc || desc.initializer) {\n desc.writable = true;\n }\n\n desc = decorators.slice().reverse().reduce(function (desc, decorator) {\n return decorator(target, property, desc) || desc;\n }, desc);\n\n if (context && desc.initializer !== void 0) {\n desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n desc.initializer = undefined;\n }\n\n if (desc.initializer === void 0) {\n Object['define' + 'Property'](target, property, desc);\n desc = null;\n }\n\n return desc;\n}\nvar VideoWrapper = (_dec$2 = autobindClass(), _dec2$2 = alias('silentLoad'), _dec3$1$1 = alias('fullScreen'), _dec4$1$1 = alias('$fullScreen'), _dec5$1 = alias('fullscreen'), _dec6 = alias('emit'), _dec7 = alias('emitSync'), _dec8 = alias('on'), _dec9 = alias('addEventListener'), _dec10 = before(eventBinderCheck), _dec11 = alias('off'), _dec12 = alias('removeEventListener'), _dec13 = before(eventBinderCheck), _dec14 = alias('once'), _dec15 = before(eventBinderCheck), _dec16 = alias('css'), _dec17 = before(attrAndStyleCheck), _dec18 = alias('attr'), _dec19 = before(attrAndStyleCheck), _dec$2(_class$2 = (_class2$1 = function () {\n function VideoWrapper() {\n _classCallCheck(this, VideoWrapper);\n\n this.__events = {};\n this.__unwatchHandlers = [];\n }\n\n _createClass(VideoWrapper, [{\n key: '__wrapAsVideo',\n value: function __wrapAsVideo(videoConfig) {\n var _this = this;\n\n // bind video read only properties on instance, so that you can get info like buffered\n videoReadOnlyProperties.forEach(function (key) {\n _Object$defineProperty(_this, key, {\n get: function get$$1() {\n return this.__dispatcher.dom.videoElement[key];\n },\n\n set: undefined,\n configurable: false,\n enumerable: false\n });\n });\n // bind videoMethods like canplaytype on instance\n videoMethods.forEach(function (key) {\n _Object$defineProperty(_this, key, {\n get: function get$$1() {\n var video = this.__dispatcher.dom.videoElement;\n return bind(video[key], video);\n },\n\n set: undefined,\n configurable: false,\n enumerable: false\n });\n });\n // bind video config properties on instance, so that you can just set src by this\n var props = videoConfig._realDomAttr.concat(videoConfig._kernelProperty).reduce(function (props, key) {\n props[key] = [accessor({\n get: function get$$1() {\n // $FlowFixMe: support computed key here\n return videoConfig[key];\n },\n set: function set(value) {\n // $FlowFixMe: support computed key here\n videoConfig[key] = value;\n return value;\n }\n }), nonenumerable];\n return props;\n }, {});\n applyDecorators(this, props, { self: true });\n kernelMethods.forEach(function (key) {\n _Object$defineProperty(_this, key, {\n value: function value() {\n var _this2 = this;\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return new _Promise(function (resolve) {\n var _dispatcher$bus;\n\n _this2.__dispatcher.bus.once(_this2.__id, '_' + key, resolve);\n (_dispatcher$bus = _this2.__dispatcher.bus)[/^(seek)$/.test(key) ? 'emitSync' : 'emit'].apply(_dispatcher$bus, [key].concat(_toConsumableArray(args)));\n });\n },\n\n configurable: true,\n enumerable: false,\n writable: true\n });\n });\n domMethods.forEach(function (key) {\n if (key === 'fullscreen') return;\n _Object$defineProperty(_this, key, {\n value: function value() {\n var _dispatcher$dom;\n\n return (_dispatcher$dom = this.__dispatcher.dom)[key].apply(_dispatcher$dom, arguments);\n },\n\n configurable: true,\n enumerable: false,\n writable: true\n });\n });\n }\n }, {\n key: '$watch',\n value: function $watch(key, handler) {\n var _this3 = this;\n\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n deep = _ref.deep,\n _ref$diff = _ref.diff,\n diff = _ref$diff === undefined ? true : _ref$diff,\n other = _ref.other,\n _ref$proxy = _ref.proxy,\n proxy = _ref$proxy === undefined ? false : _ref$proxy;\n\n if (!isString(key) && !isArray(key)) throw new TypeError('$watch only accept string and Array as key to find the target to spy on, but not ' + key + ', whose type is ' + (typeof key === 'undefined' ? 'undefined' : _typeof(key)));\n var watching = true;\n var watcher = function watcher() {\n if (watching && (!(this instanceof VideoConfig) || this.dispatcher.changeWatchable)) bind(handler, this).apply(undefined, arguments);\n };\n var unwatcher = function unwatcher() {\n watching = false;\n var index$$1 = _this3.__unwatchHandlers.indexOf(unwatcher);\n if (index$$1 > -1) _this3.__unwatchHandlers.splice(index$$1, 1);\n };\n var keys = isString(key) ? key.split('.') : key;\n var property = keys.pop();\n var videoConfig = this.__dispatcher.videoConfig;\n var target = keys.length === 0 && !other && videoConfig._realDomAttr.indexOf(property) > -1 ? videoConfig : ['isFullscreen', 'fullscreenElement'].indexOf(property) > -1 ? this.__dispatcher.dom : getDeepProperty(other || this, keys, { throwError: true });\n applyDecorators(target, _defineProperty({}, property, watch(watcher, { deep: deep, diff: diff, proxy: proxy })), { self: true });\n this.__unwatchHandlers.push(unwatcher);\n return unwatcher;\n }\n }, {\n key: '$set',\n value: function $set(obj, property, value) {\n if (!isObject(obj) && !isArray(obj)) throw new TypeError('$set only support Array or Object, but not ' + obj + ', whose type is ' + (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)));\n // $FlowFixMe: we have custom this function\n if (!isFunction(obj.__set)) {\n // $FlowFixMe: we support computed string on array here\n obj[property] = value;\n return;\n }\n obj.__set(property, value);\n }\n }, {\n key: '$del',\n value: function $del(obj, property) {\n if (!isObject(obj) && !isArray(obj)) throw new TypeError('$del only support Array or Object, but not ' + obj + ', whose type is ' + (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)));\n // $FlowFixMe: we have custom this function\n if (!isFunction(obj.__del)) {\n // $FlowFixMe: we support computed string on array here\n delete obj[property];\n return;\n }\n obj.__del(property);\n }\n }, {\n key: 'load',\n value: function load() {\n var _this4 = this;\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return new _Promise(function (resolve) {\n var _dispatcher$bus2;\n\n _this4.__dispatcher.bus.once(_this4.__id, '_load', resolve);\n (_dispatcher$bus2 = _this4.__dispatcher.bus).emit.apply(_dispatcher$bus2, ['load'].concat(args));\n });\n }\n }, {\n key: '$silentLoad',\n value: function $silentLoad() {\n var _this5 = this;\n\n for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n return this.__dispatcher.bus.emit('silentLoad').then(function () {\n var _dispatcher;\n\n return (_dispatcher = _this5.__dispatcher).silentLoad.apply(_dispatcher, args);\n }).then(function (result) {\n _this5.__dispatcher.bus.trigger('silentLoad', result);\n });\n }\n\n /**\n * call fullscreen api on some specific element\n * @param {boolean} flag true means fullscreen and means exit fullscreen\n * @param {string} element the element you want to fullscreen, default it's container, you can choose from video | container | wrapper\n */\n\n }, {\n key: '$fullscreen',\n value: function $fullscreen() {\n var flag = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var element = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'container';\n\n if (!this.__dispatcher.bus.emitSync('fullscreen', flag, element)) return false;\n var result = this.__dispatcher.dom.fullscreen(flag, element);\n this.__dispatcher.bus.triggerSync('fullscreen', flag, element);\n return result;\n }\n\n /**\n * emit an event\n * @param {string} key event's name\n * @param {...args} args\n */\n\n }, {\n key: '$emit',\n value: function $emit(key) {\n var _dispatcher$bus3;\n\n if (!isString(key)) throw new TypeError('emit key parameter must be String');\n\n for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n\n (_dispatcher$bus3 = this.__dispatcher.bus).emit.apply(_dispatcher$bus3, [key].concat(_toConsumableArray(args)));\n }\n\n /**\n * emit a sync event\n * @param {string} key event's name\n * @param {...args} args\n */\n\n }, {\n key: '$emitSync',\n value: function $emitSync(key) {\n var _dispatcher$bus4;\n\n if (!isString(key)) throw new TypeError('emitSync key parameter must be String');\n\n for (var _len5 = arguments.length, args = Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {\n args[_key5 - 1] = arguments[_key5];\n }\n\n return (_dispatcher$bus4 = this.__dispatcher.bus).emitSync.apply(_dispatcher$bus4, [key].concat(_toConsumableArray(args)));\n }\n\n /**\n * bind event handler through this function\n * @param {string} key event's name\n * @param {Function} fn event's handler\n */\n\n }, {\n key: '$on',\n value: function $on(key, fn) {\n this.__dispatcher.bus.on(this.__id, key, fn);\n // set on __events as mark so that i can destroy it when i destroy\n this.__addEvents(key, fn);\n }\n /**\n * remove event handler through this function\n * @param {string} key event's name\n * @param {Function} fn event's handler\n */\n\n }, {\n key: '$off',\n value: function $off(key, fn) {\n this.__dispatcher.bus.off(this.__id, key, fn);\n this.__removeEvents(key, fn);\n }\n /**\n * bind one time event handler\n * @param {string} key event's name\n * @param {Function} fn event's handler\n */\n\n }, {\n key: '$once',\n value: function $once(key, fn) {\n var self = this;\n var boundFn = function boundFn() {\n bind(fn, this).apply(undefined, arguments);\n self.__removeEvents(key, boundFn);\n };\n self.__addEvents(key, boundFn);\n this.__dispatcher.bus.once(this.__id, key, boundFn);\n }\n\n /**\n * set style\n * @param {string} element optional, default to be video, you can choose from video | container | wrapper\n * @param {string} attribute the atrribue name\n * @param {any} value optional, when it's no offer, we consider you want to get the attribute's value. When it's offered, we consider you to set the attribute's value, if the value you passed is undefined, that means you want to remove the value;\n */\n\n }, {\n key: '$css',\n value: function $css(method) {\n var _dispatcher$dom2;\n\n for (var _len6 = arguments.length, args = Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) {\n args[_key6 - 1] = arguments[_key6];\n }\n\n return (_dispatcher$dom2 = this.__dispatcher.dom)[method + 'Style'].apply(_dispatcher$dom2, args);\n }\n\n /**\n * set attr\n * @param {string} element optional, default to be video, you can choose from video | container | wrapper\n * @param {string} attribute the atrribue nameß\n * @param {any} value optional, when it's no offer, we consider you want to get the attribute's value. When it's offered, we consider you to set the attribute's value, if the value you passed is undefined, that means you want to remove the value;\n */\n\n }, {\n key: '$attr',\n value: function $attr(method) {\n var _dispatcher$dom3;\n\n for (var _len7 = arguments.length, args = Array(_len7 > 1 ? _len7 - 1 : 0), _key7 = 1; _key7 < _len7; _key7++) {\n args[_key7 - 1] = arguments[_key7];\n }\n\n if (method === 'set' && /video/.test(args[0])) {\n if (!this.__dispatcher.videoConfigReady) {\n return args[2];\n }\n if (this.__dispatcher.videoConfig._realDomAttr.indexOf(args[1]) > -1) {\n var key = args[1],\n val = args[2];\n\n this.__dispatcher.videoConfig[key] = val;\n return val;\n }\n }\n return (_dispatcher$dom3 = this.__dispatcher.dom)[method + 'Attr'].apply(_dispatcher$dom3, args);\n }\n }, {\n key: '__addEvents',\n value: function __addEvents(key, fn) {\n this.__events[key] = this.__events[key] || [];\n this.__events[key].push(fn);\n }\n }, {\n key: '__removeEvents',\n value: function __removeEvents(key, fn) {\n if (isEmpty(this.__events[key])) return;\n var index$$1 = this.__events[key].indexOf(fn);\n if (index$$1 < 0) return;\n this.__events[key].splice(index$$1, 1);\n if (isEmpty(this.__events[key])) delete this.__events[key];\n }\n }, {\n key: '__destroy',\n value: function __destroy() {\n var _this6 = this;\n\n this.__unwatchHandlers.forEach(function (unwatcher) {\n return unwatcher();\n });\n _Object$keys(this.__events).forEach(function (key) {\n if (!isArray(_this6.__events[key])) return;\n _this6.__events[key].forEach(function (fn) {\n return _this6.$off(key, fn);\n });\n });\n delete this.__events;\n }\n }, {\n key: 'currentTime',\n get: function get$$1() {\n return this.__dispatcher.kernel.currentTime;\n },\n set: function set(second) {\n this.__dispatcher.bus.emitSync('seek', second);\n }\n }, {\n key: '$plugins',\n get: function get$$1() {\n return this.__dispatcher.plugins;\n }\n }, {\n key: '$pluginOrder',\n get: function get$$1() {\n return this.__dispatcher.order;\n }\n }, {\n key: '$wrapper',\n get: function get$$1() {\n return this.__dispatcher.dom.wrapper;\n }\n }, {\n key: '$container',\n get: function get$$1() {\n return this.__dispatcher.dom.container;\n }\n }, {\n key: '$video',\n get: function get$$1() {\n return this.__dispatcher.dom.videoElement;\n }\n }, {\n key: 'isFullscreen',\n get: function get$$1() {\n return this.__dispatcher.dom.isFullscreen;\n }\n }, {\n key: 'fullscreenElement',\n get: function get$$1() {\n return this.__dispatcher.dom.fullscreenElement;\n }\n }, {\n key: 'container',\n get: function get$$1() {\n return this.__dispatcher.containerConfig;\n },\n set: function set(config) {\n if (!isObject(config)) {\n throw new Error('The config of container must be Object, but not ' + (typeof config === 'undefined' ? 'undefined' : _typeof(config)) + '.');\n }\n deepAssign(this.__dispatcher.containerConfig, config);\n return this.__dispatcher.container;\n }\n }]);\n\n return VideoWrapper;\n}(), _applyDecoratedDescriptor$2(_class2$1.prototype, '$silentLoad', [_dec2$2], _Object$getOwnPropertyDescriptor(_class2$1.prototype, '$silentLoad'), _class2$1.prototype), _applyDecoratedDescriptor$2(_class2$1.prototype, '$fullscreen', [_dec3$1$1, _dec4$1$1, _dec5$1], _Object$getOwnPropertyDescriptor(_class2$1.prototype, '$fullscreen'), _class2$1.prototype), _applyDecoratedDescriptor$2(_class2$1.prototype, '$emit', [_dec6], _Object$getOwnPropertyDescriptor(_class2$1.prototype, '$emit'), _class2$1.prototype), _applyDecoratedDescriptor$2(_class2$1.prototype, '$emitSync', [_dec7], _Object$getOwnPropertyDescriptor(_class2$1.prototype, '$emitSync'), _class2$1.prototype), _applyDecoratedDescriptor$2(_class2$1.prototype, '$on', [_dec8, _dec9, _dec10], _Object$getOwnPropertyDescriptor(_class2$1.prototype, '$on'), _class2$1.prototype), _applyDecoratedDescriptor$2(_class2$1.prototype, '$off', [_dec11, _dec12, _dec13], _Object$getOwnPropertyDescriptor(_class2$1.prototype, '$off'), _class2$1.prototype), _applyDecoratedDescriptor$2(_class2$1.prototype, '$once', [_dec14, _dec15], _Object$getOwnPropertyDescriptor(_class2$1.prototype, '$once'), _class2$1.prototype), _applyDecoratedDescriptor$2(_class2$1.prototype, '$css', [_dec16, _dec17], _Object$getOwnPropertyDescriptor(_class2$1.prototype, '$css'), _class2$1.prototype), _applyDecoratedDescriptor$2(_class2$1.prototype, '$attr', [_dec18, _dec19], _Object$getOwnPropertyDescriptor(_class2$1.prototype, '$attr'), _class2$1.prototype), _applyDecoratedDescriptor$2(_class2$1.prototype, '$plugins', [nonenumerable], _Object$getOwnPropertyDescriptor(_class2$1.prototype, '$plugins'), _class2$1.prototype), _applyDecoratedDescriptor$2(_class2$1.prototype, '$pluginOrder', [nonenumerable], _Object$getOwnPropertyDescriptor(_class2$1.prototype, '$pluginOrder'), _class2$1.prototype), _applyDecoratedDescriptor$2(_class2$1.prototype, '$wrapper', [nonenumerable], _Object$getOwnPropertyDescriptor(_class2$1.prototype, '$wrapper'), _class2$1.prototype), _applyDecoratedDescriptor$2(_class2$1.prototype, '$container', [nonenumerable], _Object$getOwnPropertyDescriptor(_class2$1.prototype, '$container'), _class2$1.prototype), _applyDecoratedDescriptor$2(_class2$1.prototype, '$video', [nonenumerable], _Object$getOwnPropertyDescriptor(_class2$1.prototype, '$video'), _class2$1.prototype), _class2$1)) || _class$2);\n\nvar _dec$3, _class$3;\n\n/**\n * \n * Plugin is the class for plugin developer.\n * When we use a plugin, we will generate an instance of plugin.\n * Developer can do most of things base on this plugin\n *
\n */\nvar Plugin = (_dec$3 = autobindClass(), _dec$3(_class$3 = function (_VideoWrapper) {\n _inherits(Plugin, _VideoWrapper);\n\n /**\n * \n * to create a plugin, we need three parameter\n * 1. the config of a plugin\n * 2. the dispatcher\n * 3. this option for plugin to read\n * this is the plugin base class, which you can get on Chimee\n * You can just extends it and then install\n * But in that way you must remember to pass the arguments to super()\n *
\n * @param {string} PluginConfig.id camelize from plugin's name or class name.\n * @param {string} PluginConfig.name plugin's name or class name\n * @param {Number} PluginConfig.level the level of z-index\n * @param {Boolean} PluginConfig.operable to tell if the plugin can be operable, if not, we will add pointer-events: none on it.\n * @param {Function} PluginConfig.create the create function which we will called when plugin is used. sth like constructor in object style.\n * @param {Function} PluginConfig.destroy function to be called when we destroy a plugin\n * @param {Object} PluginConfig.events You can set some events handler in this object, we will bind it once you use the plugin.\n * @param {Object} PluginConfig.data dataset we will bind on data in object style\n * @param {Object<{get: Function, set: Function}} PluginConfig.computed dataset we will handle by getter and setter\n * @param {Object} PluginConfig.methods some function we will bind on plugin\n * @param {string|HTMLElment} PluginConfig.el can be string or HTMLElement, we will use this to create the dom for plugin\n * @param {boolean} PluginConfig.penetrate boolean to let us do we need to forward the dom events for this plugin.\n * @param {Dispatcher} dispatcher referrence of dispatcher\n * @param {Object} option PluginOption that will pass to the plugin\n * @return {Plugin} plugin instance\n */\n function Plugin() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n id = _ref.id,\n name = _ref.name,\n _ref$level = _ref.level,\n level = _ref$level === undefined ? 0 : _ref$level,\n _ref$operable = _ref.operable,\n operable = _ref$operable === undefined ? true : _ref$operable,\n beforeCreate = _ref.beforeCreate,\n create = _ref.create,\n init = _ref.init,\n inited = _ref.inited,\n destroy = _ref.destroy,\n _ref$events = _ref.events,\n events = _ref$events === undefined ? {} : _ref$events,\n _ref$data = _ref.data,\n data = _ref$data === undefined ? {} : _ref$data,\n _ref$computed = _ref.computed,\n computed = _ref$computed === undefined ? {} : _ref$computed,\n _ref$methods = _ref.methods,\n methods = _ref$methods === undefined ? {} : _ref$methods,\n el = _ref.el,\n _ref$penetrate = _ref.penetrate,\n penetrate = _ref$penetrate === undefined ? false : _ref$penetrate,\n _ref$inner = _ref.inner,\n inner = _ref$inner === undefined ? true : _ref$inner,\n autoFocus = _ref.autoFocus,\n className = _ref.className;\n\n var dispatcher = arguments[1];\n var option = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : { name: name };\n\n _classCallCheck(this, Plugin);\n\n var _this = _possibleConstructorReturn(this, (Plugin.__proto__ || _Object$getPrototypeOf(Plugin)).call(this));\n\n _this.destroyed = false;\n _this.VERSION = '0.9.5';\n _this.__operable = true;\n _this.__level = 0;\n\n if (isEmpty(dispatcher)) {\n throw new TypeError('lack of dispatcher');\n }\n if (!isString(id)) {\n throw new TypeError('id of PluginConfig must be string');\n }\n _this.__id = id;\n _this.__dispatcher = dispatcher;\n _this.$videoConfig = _this.__dispatcher.videoConfig;\n _this.__wrapAsVideo(_this.$videoConfig);\n _this.beforeCreate = _this.beforeCreate || beforeCreate;\n try {\n isFunction(_this.beforeCreate) && _this.beforeCreate({\n events: events,\n data: data,\n computed: computed,\n methods: methods\n }, option);\n } catch (error) {\n _this.$throwError(error);\n }\n // bind plugin methods into instance\n if (!isEmpty(methods) && isObject(methods)) {\n _Object$keys(methods).forEach(function (key) {\n var fn = methods[key];\n if (!isFunction(fn)) throw new TypeError('plugins methods must be Function');\n _Object$defineProperty(_this, key, {\n value: bind(fn, _this),\n writable: true,\n enumerable: false,\n configurable: true\n });\n });\n }\n // hook plugin events on bus\n if (!isEmpty(events) && isObject(events)) {\n _Object$keys(events).forEach(function (key) {\n if (!isFunction(events[key])) throw new TypeError('plugins events hook must bind with Function');\n _this.$on(key, events[key]);\n });\n }\n // bind data into plugin instance\n if (!isEmpty(data) && isObject(data)) {\n deepAssign(_this, data);\n }\n // set the computed member by getter and setter\n if (!isEmpty(computed) && isObject(computed)) {\n var props = _Object$keys(computed).reduce(function (props, key) {\n var val = computed[key];\n if (isFunction(val)) {\n props[key] = accessor({ get: val });\n return props;\n }\n if (isObject(val) && (isFunction(val.get) || isFunction(val.set))) {\n props[key] = accessor(val);\n return props;\n }\n return props;\n }, {});\n applyDecorators(_this, props, { self: true });\n }\n /**\n * the create Function of plugin\n * @type {Function}\n */\n _this.create = _this.create || create;\n /**\n * this init Function of plugin\n * which will be called when we start to create the video player\n * the plugin can handle some config here\n * @type {Function}\n */\n _this.init = _this.init || init;\n /**\n * this inited Function of plugin\n * which will be called when we have created the video player\n * @type {Function}\n */\n _this.inited = _this.inited || inited;\n /**\n * the destroy Function of plugin\n * @type {Function}\n */\n _this.destroy = _this.destroy || destroy;\n /**\n * the dom node of whole plugin\n * @type {HTMLElement}\n */\n _this.$dom = _this.__dispatcher.dom.insertPlugin(_this.__id, el, { penetrate: penetrate, inner: inner, autoFocus: autoFocus, className: className });\n // now we can frozen inner, autoFocus and penetrate\n _this.$inner = inner;\n _this.$autoFocus = autoFocus;\n _this.$penetrate = penetrate;\n applyDecorators(_this, {\n $inner: frozen,\n $autoFocus: frozen,\n $penetrate: frozen\n }, { self: true });\n /**\n * to tell us if the plugin can be operable, can be dynamic change\n * @type {boolean}\n */\n _this.$operable = isBoolean(option.operable) ? option.operable : operable;\n _this.__level = isInteger$2(option.level) ? option.level : level;\n /**\n * pluginOption, so it's easy for plugin developer to check the config\n * @type {Object}\n */\n _this.$config = option;\n try {\n isFunction(_this.create) && _this.create();\n } catch (error) {\n _this.$throwError(error);\n }\n return _this;\n }\n /**\n * call for init lifecycle hook, which mainly handle the original config of video and kernel.\n * @param {VideoConfig} videoConfig the original config of the videoElement or Kernel\n */\n\n\n _createClass(Plugin, [{\n key: '__init',\n value: function __init(videoConfig) {\n try {\n isFunction(this.init) && this.init(videoConfig);\n } catch (error) {\n this.$throwError(error);\n }\n }\n /**\n * call for inited lifecycle hook, which just to tell the plugin we have inited.\n */\n\n }, {\n key: '__inited',\n value: function __inited() {\n var _this2 = this;\n\n var result = void 0;\n try {\n result = isFunction(this.inited) && this.inited();\n } catch (error) {\n this.$throwError(error);\n }\n this.readySync = !isPromise(result);\n this.ready = this.readySync ? _Promise.resolve()\n // $FlowFixMe: it's promise now\n : result.then(function (ret) {\n _this2.readySync = true;\n return ret;\n }).catch(function (error) {\n if (isError(error)) return _this2.$throwError(error);\n return _Promise.reject(error);\n });\n return this.readySync || this.ready;\n }\n\n /**\n * set the plugin to be the top of all plugins\n */\n\n }, {\n key: '$bumpToTop',\n value: function $bumpToTop() {\n var topLevel = this.__dispatcher._getTopLevel(this.$inner);\n this.$level = topLevel + 1;\n }\n }, {\n key: '$throwError',\n value: function $throwError(error) {\n this.__dispatcher.throwError(error);\n }\n /**\n * officail destroy function for plugin\n * we will call user destory function in this method\n */\n\n }, {\n key: '$destroy',\n value: function $destroy() {\n isFunction(this.destroy) && this.destroy();\n _get(Plugin.prototype.__proto__ || _Object$getPrototypeOf(Plugin.prototype), '__destroy', this).call(this);\n this.__dispatcher.dom.removePlugin(this.__id);\n delete this.__dispatcher;\n delete this.$dom;\n this.destroyed = true;\n }\n /**\n * to tell us if the plugin can be operable, can be dynamic change\n * @type {boolean}\n */\n\n }, {\n key: '$operable',\n set: function set(val) {\n if (!isBoolean(val)) return;\n this.$dom.style.pointerEvents = val ? 'auto' : 'none';\n this.__operable = val;\n },\n get: function get$$1() {\n return this.__operable;\n }\n /**\n * the z-index level, higher when you set higher\n * @type {boolean}\n */\n\n }, {\n key: '$level',\n set: function set(val) {\n if (!isInteger$2(val)) return;\n this.__level = val;\n this.__dispatcher._sortZIndex();\n },\n get: function get$$1() {\n return this.__level;\n }\n }]);\n\n return Plugin;\n}(VideoWrapper)) || _class$3);\n\nvar _dec$4, _dec2$3, _dec3$2, _dec4$2, _dec5$1$1, _dec6$1, _class$4;\n\nfunction _applyDecoratedDescriptor$3(target, property, decorators, descriptor, context) {\n var desc = {};\n Object['ke' + 'ys'](descriptor).forEach(function (key) {\n desc[key] = descriptor[key];\n });\n desc.enumerable = !!desc.enumerable;\n desc.configurable = !!desc.configurable;\n\n if ('value' in desc || desc.initializer) {\n desc.writable = true;\n }\n\n desc = decorators.slice().reverse().reduce(function (desc, decorator) {\n return decorator(target, property, desc) || desc;\n }, desc);\n\n if (context && desc.initializer !== void 0) {\n desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n desc.initializer = undefined;\n }\n\n if (desc.initializer === void 0) {\n Object['define' + 'Property'](target, property, desc);\n desc = null;\n }\n\n return desc;\n}\nfunction targetCheck(target) {\n if (target === 'video') target = 'videoElement';\n if (!isElement(this[target])) throw new TypeError('Your target \"' + target + '\" is not a legal HTMLElement');\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 return [target].concat(args);\n}\nfunction attrOperationCheck(target, attr, val) {\n if (!isString(attr)) throw new TypeError('to handle dom\\'s attribute or style, your attr parameter must be string, but not ' + attr + ' in ' + (typeof attr === 'undefined' ? 'undefined' : _typeof(attr)));\n if (!isString(target)) throw new TypeError('to handle dom\\'s attribute or style, your target parameter must be string, , but not ' + target + ' in ' + (typeof target === 'undefined' ? 'undefined' : _typeof(target)));\n return [target, attr, val];\n}\n/**\n * \n * Dom work for Dispatcher.\n * It take charge of dom management of Dispatcher.\n *
\n */\nvar Dom = (_dec$4 = waituntil('__dispatcher.videoConfigReady'), _dec2$3 = before(attrOperationCheck, targetCheck), _dec3$2 = before(attrOperationCheck, targetCheck), _dec4$2 = before(attrOperationCheck, targetCheck), _dec5$1$1 = before(attrOperationCheck, targetCheck), _dec6$1 = before(targetCheck), _class$4 = function () {\n /**\n * to mark is the mouse in the video area\n */\n\n /**\n * Array to store all video dom event handler\n */\n\n /**\n * Array to store all video dom event handler\n */\n\n /**\n * the html to restore when we are destroyed\n */\n function Dom(wrapper, dispatcher) {\n var _this = this;\n\n _classCallCheck(this, Dom);\n\n this.plugins = {};\n this.originHTML = '';\n this.videoEventHandlerList = [];\n this.videoDomEventHandlerList = [];\n this.containerDomEventHandlerList = [];\n this.wrapperDomEventHandlerList = [];\n this.__domEventHandlerList = {};\n this.__mouseInVideo = false;\n this.__videoExtendedNodes = [];\n this.isFullscreen = false;\n this.fullscreenElement = undefined;\n\n this.__dispatcher = dispatcher;\n if (!isElement(wrapper) && !isString(wrapper)) throw new TypeError('Wrapper can only be string or HTMLElement, but not ' + (typeof wrapper === 'undefined' ? 'undefined' : _typeof(wrapper)));\n var $wrapper = $(wrapper);\n if ($wrapper.length === 0) {\n throw new TypeError('Can not get dom node accroding wrapper. Please check your wrapper');\n }\n /**\n * the referrence of the dom wrapper of whole Chimee\n */\n // $FlowFixMe: support computed key on nodewrap\n this.wrapper = $wrapper[0];\n this.originHTML = this.wrapper.innerHTML;\n // if we find video element inside wrapper\n // we use it\n // or we create a video element by ourself.\n // $FlowFixMe: support computed key on nodewrap\n var videoElement = $wrapper.find('video')[0];\n if (!videoElement) {\n videoElement = document.createElement('video');\n }\n /**\n * referrence of video's dom element\n */\n this.installVideo(videoElement);\n this._addDomEvents(this.container, this.containerDomEventHandlerList, function (key) {\n return function () {\n var _dispatcher$bus;\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return (_dispatcher$bus = _this.__dispatcher.bus).triggerSync.apply(_dispatcher$bus, ['c_' + key].concat(_toConsumableArray(args)));\n };\n });\n this._addDomEvents(this.wrapper, this.wrapperDomEventHandlerList, function (key) {\n return function () {\n var _dispatcher$bus2;\n\n for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n return (_dispatcher$bus2 = _this.__dispatcher.bus).triggerSync.apply(_dispatcher$bus2, ['w_' + key].concat(_toConsumableArray(args)));\n };\n });\n this._fullscreenMonitor();\n index.on('fullscreenchange', this._fullscreenMonitor);\n }\n /**\n * collection of video extension nodes\n * some nodes can be regarded as part of video (such as penetrate element)\n * so we store them here\n */\n\n /**\n * Object to store different plugin's dom event handlers\n */\n\n /**\n * Array to store all container dom event handler\n */\n\n /**\n * Array to store all video event handler\n */\n\n /**\n * all plugin's dom element set\n */\n\n\n _createClass(Dom, [{\n key: 'installVideo',\n value: function installVideo(videoElement) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref$bindEvent = _ref.bindEvent,\n bindEvent = _ref$bindEvent === undefined ? true : _ref$bindEvent;\n\n this.__videoExtendedNodes.push(videoElement);\n setAttr(videoElement, 'tabindex', -1);\n this._autoFocusToVideo(videoElement);\n if (!isElement(this.container)) {\n // create container\n if (videoElement.parentElement && isElement(videoElement.parentElement) && videoElement.parentElement !== this.wrapper) {\n this.container = videoElement.parentElement;\n } else {\n this.container = document.createElement('container');\n $(this.container).append(videoElement);\n }\n } else {\n var container = this.container;\n if (container.childNodes.length === 0) {\n container.appendChild(videoElement);\n } else {\n container.insertBefore(videoElement, container.childNodes[0]);\n }\n }\n // check container.position\n if (this.container.parentElement !== this.wrapper) {\n $(this.wrapper).append(this.container);\n }\n if (bindEvent) this.bindVideoEvents(videoElement);\n this.videoElement = videoElement;\n return videoElement;\n }\n }, {\n key: 'bindVideoEvents',\n value: function bindVideoEvents(videoElement) {\n var _this2 = this;\n\n videoEvents.forEach(function (key) {\n var fn = function fn() {\n var _dispatcher$bus3;\n\n for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n return (_dispatcher$bus3 = _this2.__dispatcher.bus).trigger.apply(_dispatcher$bus3, [key].concat(_toConsumableArray(args)));\n };\n _this2.videoEventHandlerList.push(fn);\n addEvent(videoElement, key, fn);\n });\n this._addDomEvents(videoElement, this.videoDomEventHandlerList, function (key) {\n return _this2._getEventHandler(key, { penetrate: true });\n });\n }\n }, {\n key: 'removeVideo',\n value: function removeVideo() {\n var _this3 = this;\n\n var videoElement = this.videoElement;\n this._autoFocusToVideo(this.videoElement, false);\n videoEvents.forEach(function (key, index$$1) {\n removeEvent(_this3.videoElement, key, _this3.videoEventHandlerList[index$$1]);\n });\n this.videoEventHandlerList = [];\n domEvents.forEach(function (key, index$$1) {\n removeEvent(_this3.videoElement, key, _this3.videoDomEventHandlerList[index$$1]);\n });\n this.videoDomEventHandlerList = [];\n $(videoElement).remove();\n delete this.videoElement;\n return videoElement;\n }\n\n /**\n * each plugin has its own dom node, this function will create one or them.\n * we support multiple kind of el\n * 1. Element, we will append this dom node on wrapper straight\n * 2. HTMLString, we will create dom based on this HTMLString and append it on wrapper\n * 3. string, we will transfer this string into hypen string, then we create a custom elment called by this and bind it on wrapper\n * 4. nothing, we will create a div and bind it on the wrapper\n */\n\n }, {\n key: 'insertPlugin',\n value: function insertPlugin(id, el) {\n var _this4 = this;\n\n var option = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (!isString(id)) throw new TypeError('insertPlugin id parameter must be string');\n if (isElement(this.plugins[id])) {\n this.removePlugin(id);\n }\n if (isString(el)) {\n if (isHTMLString(el)) {\n var outer = document.createElement('div');\n outer.innerHTML = el;\n el = outer.children[0];\n } else {\n el = document.createElement(hypenate(el));\n }\n } else if (isObject(el)) {\n // $FlowFixMe: we have check el's type here and make sure it's an object\n option = el;\n }\n var _option = option,\n inner = _option.inner,\n penetrate = _option.penetrate,\n autoFocus = _option.autoFocus;\n var _option2 = option,\n className = _option2.className;\n\n var node = el && isElement(el) ? el : document.createElement('div');\n if (isArray(className)) {\n className = className.join(' ');\n }\n if (isString(className)) {\n addClassName(node, className);\n }\n this.plugins[id] = node;\n var outerElement = inner ? this.container : this.wrapper;\n var originElement = inner ? this.videoElement : this.container;\n if (isBoolean(autoFocus) ? autoFocus : inner) this._autoFocusToVideo(node);\n // auto forward the event if this plugin can be penetrate\n if (penetrate) {\n this.__domEventHandlerList[id] = this.__domEventHandlerList[id] || [];\n this._addDomEvents(node, this.__domEventHandlerList[id], function (key) {\n return _this4._getEventHandler(key, { penetrate: penetrate });\n });\n this.__videoExtendedNodes.push(node);\n }\n if (outerElement.lastChild === originElement) {\n outerElement.appendChild(node);\n return node;\n }\n outerElement.insertBefore(node, originElement.nextSibling);\n return node;\n }\n\n /**\n * remove plugin's dom\n */\n\n }, {\n key: 'removePlugin',\n value: function removePlugin(id) {\n var _this5 = this;\n\n if (!isString(id)) return;\n var dom = this.plugins[id];\n if (isElement(dom)) {\n dom.parentNode && dom.parentNode.removeChild(dom);\n this._autoFocusToVideo(dom, true);\n }\n if (!isEmpty(this.__domEventHandlerList[id])) {\n domEvents.forEach(function (key, index$$1) {\n removeEvent(_this5.plugins[id], key, _this5.__domEventHandlerList[id][index$$1]);\n });\n delete this.__domEventHandlerList[id];\n }\n delete this.plugins[id];\n }\n\n /**\n * Set zIndex for a plugins list\n */\n\n }, {\n key: 'setPluginsZIndex',\n value: function setPluginsZIndex(plugins) {\n var _this6 = this;\n\n // $FlowFixMe: there are videoElment and container here\n plugins.forEach(function (key, index$$1) {\n return setStyle(key.match(/^(videoElement|container)$/) ? _this6[key] : _this6.plugins[key], 'z-index', ++index$$1);\n });\n }\n\n /**\n * set attribute on our dom\n * @param {string} attr attribute's name\n * @param {anything} val attribute's value\n * @param {string} target the HTMLElemnt string name, only support video/wrapper/container now\n */\n\n }, {\n key: 'setAttr',\n value: function setAttr$$1(target, attr, val) {\n // $FlowFixMe: flow do not support computed property/element on class, which is silly here.\n setAttr(this[target], attr, val);\n }\n }, {\n key: 'getAttr',\n value: function getAttr$$1(target, attr) {\n // $FlowFixMe: flow do not support computed property/element on class, which is silly here.\n return getAttr(this[target], attr);\n }\n }, {\n key: 'setStyle',\n value: function setStyle$$1(target, attr, val) {\n // $FlowFixMe: flow do not support computed property/element on class, which is silly here.\n setStyle(this[target], attr, val);\n }\n }, {\n key: 'getStyle',\n value: function getStyle$$1(target, attr) {\n // $FlowFixMe: flow do not support computed property/element on class, which is silly here.\n return getStyle(this[target], attr);\n }\n }, {\n key: 'requestFullscreen',\n value: function requestFullscreen(target) {\n // $FlowFixMe: flow do not support computed property/element on document, which is silly here.\n return index.open(this[target]);\n }\n }, {\n key: 'exitFullscreen',\n value: function exitFullscreen() {\n return index.exit();\n }\n }, {\n key: 'fullscreen',\n value: function fullscreen() {\n var request = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var target = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'container';\n\n for (var _len5 = arguments.length, args = Array(_len5 > 2 ? _len5 - 2 : 0), _key5 = 2; _key5 < _len5; _key5++) {\n args[_key5 - 2] = arguments[_key5];\n }\n\n return request ? this.requestFullscreen.apply(this, [target].concat(_toConsumableArray(args))) : this.exitFullscreen.apply(this, _toConsumableArray(args));\n }\n }, {\n key: 'focus',\n value: function focus() {\n this.videoElement.focus();\n }\n\n /**\n * function called when we distory\n */\n\n }, {\n key: 'destroy',\n value: function destroy() {\n var _this7 = this;\n\n this.removeVideo();\n domEvents.forEach(function (key, index$$1) {\n removeEvent(_this7.container, key, _this7.containerDomEventHandlerList[index$$1]);\n removeEvent(_this7.wrapper, key, _this7.wrapperDomEventHandlerList[index$$1]);\n });\n index.off('fullscreenchange', this._fullscreenMonitor);\n this.wrapper.innerHTML = this.originHTML;\n delete this.wrapper;\n delete this.plugins;\n }\n\n /**\n * bind all dom events on one element\n * we will use passive mode if it support\n */\n\n }, {\n key: '_addDomEvents',\n value: function _addDomEvents(element, handlerList, handlerGenerate) {\n domEvents.forEach(function (key) {\n var fn = handlerGenerate(key);\n handlerList.push(fn);\n if (passiveEvents.indexOf(key) > -1) {\n addEvent(element, key, fn, false, { passive: true });\n return;\n }\n addEvent(element, key, fn);\n });\n }\n }, {\n key: '_autoFocusToVideo',\n value: function _autoFocusToVideo(element) {\n var remove = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n if (!isElement(element)) return;\n (remove ? removeEvent : addEvent)(element, 'mouseup', this._focusToVideo, false, true);\n (remove ? removeEvent : addEvent)(element, 'touchend', this._focusToVideo, false, true);\n }\n }, {\n key: '_focusToVideo',\n value: function _focusToVideo() {\n var x = window.scrollX;\n var y = window.scrollY;\n isFunction(this.videoElement.focus) && this.videoElement.focus();\n window.scrollTo(x, y);\n }\n }, {\n key: '_fullscreenMonitor',\n value: function _fullscreenMonitor(evt) {\n var element = index.fullscreenElement;\n var original = this.isFullscreen;\n if (!element || !isPosterityNode(this.wrapper, element) && element !== this.wrapper) {\n this.isFullscreen = false;\n this.fullscreenElement = undefined;\n } else {\n this.isFullscreen = true;\n this.fullscreenElement = this.wrapper === element ? 'wrapper' : this.container === element ? 'container' : this.videoElement === element ? 'video' : element;\n }\n if (isEvent(evt) && original !== this.isFullscreen) {\n this.__dispatcher.bus.triggerSync('fullscreenchange', evt);\n }\n }\n\n /**\n * get the event handler for dom to bind\n */\n\n }, {\n key: '_getEventHandler',\n value: function _getEventHandler(key, _ref2) {\n var _this8 = this;\n\n var penetrate = _ref2.penetrate;\n\n if (!penetrate || ['mouseenter', 'mouseleave'].indexOf(key) < 0) {\n return function () {\n var _dispatcher$bus4;\n\n for (var _len6 = arguments.length, args = Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n args[_key6] = arguments[_key6];\n }\n\n (_dispatcher$bus4 = _this8.__dispatcher.bus).triggerSync.apply(_dispatcher$bus4, [key].concat(args));\n };\n }\n var insideVideo = function insideVideo(node) {\n return _this8.__videoExtendedNodes.indexOf(node) > -1 || _this8.__videoExtendedNodes.reduce(function (flag, video) {\n if (flag) return flag;\n return isPosterityNode(video, node);\n }, false);\n };\n return function () {\n for (var _len7 = arguments.length, args = Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n args[_key7] = arguments[_key7];\n }\n\n var _args$ = args[0],\n toElement = _args$.toElement,\n currentTarget = _args$.currentTarget,\n relatedTarget = _args$.relatedTarget,\n type = _args$.type;\n\n var to = toElement || relatedTarget;\n if (_this8.__mouseInVideo && type === 'mouseleave' && !insideVideo(to)) {\n var _dispatcher$bus5;\n\n _this8.__mouseInVideo = false;\n return (_dispatcher$bus5 = _this8.__dispatcher.bus).triggerSync.apply(_dispatcher$bus5, ['mouseleave'].concat(args));\n }\n if (!_this8.__mouseInVideo && type === 'mouseenter' && insideVideo(currentTarget)) {\n var _dispatcher$bus6;\n\n _this8.__mouseInVideo = true;\n return (_dispatcher$bus6 = _this8.__dispatcher.bus).triggerSync.apply(_dispatcher$bus6, ['mouseenter'].concat(args));\n }\n };\n }\n }]);\n\n return Dom;\n}(), _applyDecoratedDescriptor$3(_class$4.prototype, 'setAttr', [_dec$4, _dec2$3], _Object$getOwnPropertyDescriptor(_class$4.prototype, 'setAttr'), _class$4.prototype), _applyDecoratedDescriptor$3(_class$4.prototype, 'getAttr', [_dec3$2], _Object$getOwnPropertyDescriptor(_class$4.prototype, 'getAttr'), _class$4.prototype), _applyDecoratedDescriptor$3(_class$4.prototype, 'setStyle', [_dec4$2], _Object$getOwnPropertyDescriptor(_class$4.prototype, 'setStyle'), _class$4.prototype), _applyDecoratedDescriptor$3(_class$4.prototype, 'getStyle', [_dec5$1$1], _Object$getOwnPropertyDescriptor(_class$4.prototype, 'getStyle'), _class$4.prototype), _applyDecoratedDescriptor$3(_class$4.prototype, 'requestFullscreen', [_dec6$1], _Object$getOwnPropertyDescriptor(_class$4.prototype, 'requestFullscreen'), _class$4.prototype), _applyDecoratedDescriptor$3(_class$4.prototype, '_focusToVideo', [autobind], _Object$getOwnPropertyDescriptor(_class$4.prototype, '_focusToVideo'), _class$4.prototype), _applyDecoratedDescriptor$3(_class$4.prototype, '_fullscreenMonitor', [autobind], _Object$getOwnPropertyDescriptor(_class$4.prototype, '_fullscreenMonitor'), _class$4.prototype), _class$4);\n\nvar defaultContainerConfig = {\n width: '100%',\n height: '100%',\n position: 'relative',\n display: 'block'\n};\n\n// base css controller for container and wrapper\n\nvar Vessel = function Vessel(dispatcher, target, config) {\n var _this = this;\n\n _classCallCheck(this, Vessel);\n\n this.__dispatcher = dispatcher;\n this.__target = target;\n ['width', 'height', 'position', 'display'].forEach(function (key) {\n _Object$defineProperty(_this, key, {\n get: function get$$1() {\n return this.__dispatcher.dom.getStyle(this.__target, key);\n },\n set: function set(value) {\n if (isNumber(value)) {\n value = value + 'px';\n }\n if (!isString(value)) {\n throw new Error('The value of ' + key + ' in ' + this.__target + 'Config must be string, but not ' + (typeof value === 'undefined' ? 'undefined' : _typeof(value)) + '.');\n }\n this.__dispatcher.dom.setStyle(this.__target, key, value);\n // return value;\n },\n\n configurable: true,\n enumerable: true\n });\n });\n deepAssign(this, config);\n};\n\nvar _dec$5, _dec2$4, _dec3$3, _dec4$3, _dec5$2, _class$5;\n\nfunction _applyDecoratedDescriptor$4(target, property, decorators, descriptor, context) {\n var desc = {};\n Object['ke' + 'ys'](descriptor).forEach(function (key) {\n desc[key] = descriptor[key];\n });\n desc.enumerable = !!desc.enumerable;\n desc.configurable = !!desc.configurable;\n\n if ('value' in desc || desc.initializer) {\n desc.writable = true;\n }\n\n desc = decorators.slice().reverse().reduce(function (desc, decorator) {\n return decorator(target, property, desc) || desc;\n }, desc);\n\n if (context && desc.initializer !== void 0) {\n desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n desc.initializer = undefined;\n }\n\n if (desc.initializer === void 0) {\n Object['define' + 'Property'](target, property, desc);\n desc = null;\n }\n\n return desc;\n}\nvar pluginConfigSet = {};\nvar kernelsSet = {};\nfunction convertNameIntoId(name) {\n if (!isString(name)) throw new Error('Plugin\\'s name must be a string, but not \"' + name + '\" in ' + (typeof name === 'undefined' ? 'undefined' : _typeof(name)));\n return camelize(name);\n}\nfunction checkPluginConfig(config) {\n if (isFunction(config)) {\n if (!(config.prototype instanceof Plugin)) {\n throw new TypeError('Your are trying to install plugin ' + config.name + ', but it\\'s not extends from Chimee.plugin.');\n }\n return;\n }\n if (!isObject(config) || isEmpty(config)) throw new TypeError('plugin\\'s config must be an Object, but not \"' + config + '\" in ' + (typeof config === 'undefined' ? 'undefined' : _typeof(config)));\n var name = config.name;\n\n if (!isString(name) || name.length < 1) throw new TypeError('plugin must have a legal namea, but not \"' + name + '\" in ' + (typeof name === 'undefined' ? 'undefined' : _typeof(name)));\n}\n/**\n * \n * Dispatcher is the hub of plugins, user, and video kernel.\n * It take charge of plugins install, use and remove\n * It also offer a bridge to let user handle video kernel.\n *
\n */\nvar Dispatcher = (_dec$5 = before(convertNameIntoId), _dec2$4 = before(checkPluginConfig), _dec3$3 = before(convertNameIntoId), _dec4$3 = before(convertNameIntoId), _dec5$2 = before(convertNameIntoId), _class$5 = function () {\n /**\n * @param {UserConfig} config UserConfig for whole Chimee player\n * @param {Chimee} vm referrence of outer class\n * @return {Dispatcher}\n */\n\n /**\n * the synchronous ready flag\n * @type {boolean}\n * @member readySync\n */\n\n /**\n * all plugins instance set\n * @type {Object}\n * @member plugins\n */\n function Dispatcher(config, vm) {\n var _this = this;\n\n _classCallCheck(this, Dispatcher);\n\n this.plugins = {};\n this.order = [];\n this.readySync = false;\n this.zIndexMap = {\n inner: [],\n outer: []\n };\n this.changeWatchable = true;\n this.kernelEventHandlerList = [];\n\n if (!isObject(config)) throw new TypeError('UserConfig must be an Object, but not \"' + config + '\" in ' + (typeof config === 'undefined' ? 'undefined' : _typeof(config)));\n /**\n * dom Manager\n * @type {Dom}\n */\n this.dom = new Dom(config.wrapper, this);\n /**\n * eventBus\n * @type {Bus}\n */\n this.bus = new Bus(this);\n /**\n * Chimee's referrence\n * @type {[type]}\n */\n this.vm = vm;\n /**\n * tell user have Chimee installed finished\n * @type {Promises}\n */\n this.videoConfigReady = false;\n // create the videoconfig\n this.videoConfig = new VideoConfig(this, config);\n // support both plugin and plugins here as people often cofuse both\n // $FlowFixMe: we support plugins here, which should be illegal\n if (isArray(config.plugins) && !isArray(config.plugin)) {\n config.plugin = config.plugins;\n delete config.plugins;\n }\n // use the plugin user want to use\n this._initUserPlugin(config.plugin);\n // add default config for container\n var containerConfig = deepAssign({}, defaultContainerConfig, config.container || {});\n // trigger the init life hook of plugin\n this.order.forEach(function (key) {\n return _this.plugins[key].__init(_this.videoConfig, containerConfig);\n });\n this.videoConfigReady = true;\n this.videoConfig.init();\n this.containerConfig = new Vessel(this, 'container', containerConfig);\n /**\n * video kernel\n * @type {Kernel}\n */\n this.kernel = this._createKernel(this.dom.videoElement, this.videoConfig);\n this._bindKernelEvents(this.kernel);\n // trigger auto load event\n var asyncInitedTasks = [];\n this.order.forEach(function (key) {\n var ready = _this.plugins[key].__inited();\n if (isPromise(ready)) {\n asyncInitedTasks.push(ready);\n }\n });\n this.readySync = asyncInitedTasks.length === 0;\n // tell them we have inited the whold player\n this.ready = this.readySync ? _Promise.resolve() : _Promise.all(asyncInitedTasks).then(function () {\n _this.readySync = true;\n _this.bus.trigger('ready');\n _this._autoloadVideoSrcAtFirst();\n });\n if (this.readySync) this._autoloadVideoSrcAtFirst();\n }\n /**\n * use a plugin, which means we will new a plugin instance and include int this Chimee instance\n * @param {Object|string} option you can just set a plugin name or plugin config\n * @return {Promise}\n */\n\n // to save the kernel event handler, so that we can remove it when we destroy the kernel\n\n /**\n * the z-index map of the dom, it contain some important infomation\n * @type {Object}\n * @member zIndexMap\n */\n\n /**\n * plugin's order\n * @type {Array}\n * @member order\n */\n\n\n _createClass(Dispatcher, [{\n key: 'use',\n value: function use(option) {\n if (isString(option)) option = { name: option, alias: undefined };\n if (!isObject(option) || isObject(option) && !isString(option.name)) {\n throw new TypeError('pluginConfig do not match requirement');\n }\n if (!isString(option.alias)) option.alias = undefined;\n var _option = option,\n name = _option.name,\n alias$$1 = _option.alias;\n\n option.name = alias$$1 || name;\n delete option.alias;\n var key = camelize(name);\n var id = camelize(alias$$1 || name);\n var pluginOption = option;\n var pluginConfig = Dispatcher.getPluginConfig(key);\n if (isEmpty(pluginConfig)) throw new TypeError('You have not installed plugin ' + key);\n if (isObject(pluginConfig)) {\n pluginConfig.id = id;\n }\n var plugin = isFunction(pluginConfig) ? new pluginConfig({ id: id }, this, pluginOption) // eslint-disable-line \n : new Plugin(pluginConfig, this, pluginOption);\n this.plugins[id] = plugin;\n _Object$defineProperty(this.vm, id, {\n value: plugin,\n configurable: true,\n enumerable: false,\n writable: false\n });\n this.order.push(id);\n this._sortZIndex();\n if (this.videoConfigReady) plugin.__inited();\n return plugin.ready;\n }\n /**\n * unuse an plugin, we will destroy the plugin instance and exlude it\n * @param {string} name plugin's name\n */\n\n }, {\n key: 'unuse',\n value: function unuse(id) {\n var plugin = this.plugins[id];\n if (!isObject(plugin) || !isFunction(plugin.$destroy)) {\n delete this.plugins[id];\n return;\n }\n plugin.$destroy();\n var orderIndex = this.order.indexOf(id);\n if (orderIndex > -1) {\n this.order.splice(orderIndex, 1);\n }\n delete this.plugins[id];\n delete this.vm[id];\n }\n }, {\n key: 'throwError',\n value: function throwError(error) {\n this.vm.__throwError(error);\n }\n }, {\n key: 'silentLoad',\n value: function silentLoad(src) {\n var _this2 = this;\n\n var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _option$duration = option.duration,\n duration = _option$duration === undefined ? 3 : _option$duration,\n _option$bias = option.bias,\n bias = _option$bias === undefined ? 0 : _option$bias,\n _option$repeatTimes = option.repeatTimes,\n repeatTimes = _option$repeatTimes === undefined ? 0 : _option$repeatTimes,\n _option$increment = option.increment,\n increment = _option$increment === undefined ? 0 : _option$increment,\n _option$isLive = option.isLive,\n isLive = _option$isLive === undefined ? this.videoConfig.isLive : _option$isLive,\n _option$box = option.box,\n box = _option$box === undefined ? this.videoConfig.box : _option$box,\n _option$kernels = option.kernels,\n kernels = _option$kernels === undefined ? this.videoConfig.kernels : _option$kernels,\n _option$preset = option.preset,\n preset = _option$preset === undefined ? this.videoConfig.preset : _option$preset;\n // all live stream seem as immediate mode\n // it's impossible to seek on live stream\n\n var immediate = option.immediate || isLive;\n // form the base config for kernel\n // it should be the same as the config now\n var config = { isLive: isLive, box: box, src: src, kernels: kernels, preset: preset };\n // build tasks accroding repeat times\n var tasks = new Array(repeatTimes + 1).fill(1).map(function (value, index$$1) {\n return function () {\n return new _Promise(function (resolve, reject) {\n // if abort, give up and reject\n if (option.abort) reject({ error: true, message: 'user abort the mission' });\n var video = document.createElement('video');\n var idealTime = _this2.kernel.currentTime + duration + increment * index$$1;\n video.muted = true;\n var newVideoReady = false;\n var kernel = void 0;\n var _videoError = void 0;\n var videoCanplay = void 0;\n var videoLoadedmetadata = void 0;\n // bind time update on old video\n // when we bump into the switch point and ready\n // we switch\n var oldVideoTimeupdate = function oldVideoTimeupdate() {\n var currentTime = _this2.kernel.currentTime;\n if (bias <= 0 && currentTime >= idealTime || bias > 0 && (Math.abs(idealTime - currentTime) <= bias && newVideoReady || currentTime - idealTime > bias)) {\n removeEvent(_this2.dom.videoElement, 'timeupdate', oldVideoTimeupdate);\n removeEvent(video, 'error', _videoError, true);\n if (!newVideoReady) {\n removeEvent(video, 'canplay', videoCanplay, true);\n removeEvent(video, 'loadedmetadata', videoLoadedmetadata, true);\n kernel.destroy();\n return resolve();\n }\n return reject({\n error: false,\n video: video,\n kernel: kernel\n });\n }\n };\n videoCanplay = function videoCanplay() {\n newVideoReady = true;\n // you can set it immediately run by yourself\n if (immediate) {\n removeEvent(_this2.dom.videoElement, 'timeupdate', oldVideoTimeupdate);\n removeEvent(video, 'error', _videoError, true);\n return reject({\n error: false,\n video: video,\n kernel: kernel\n });\n }\n };\n videoLoadedmetadata = function videoLoadedmetadata() {\n if (!isLive) kernel.seek(idealTime);\n };\n _videoError = function videoError(evt) {\n removeEvent(video, 'canplay', videoCanplay, true);\n removeEvent(video, 'loadedmetadata', videoLoadedmetadata, true);\n removeEvent(_this2.dom.videoElement, 'timeupdate', oldVideoTimeupdate);\n kernel.off('error', _videoError);\n var error = void 0;\n if (evt.target === kernel) {\n var message = evt.data.errmsg;\n\n Log.error(\"chimee's silentload bump into a kernel error\", message);\n error = new Error(message);\n } else {\n error = !isEmpty(video.error) ? new Error(video.error.message) : new Error('unknow video error');\n Log.error(\"chimee's silentload\", error.message);\n }\n kernel.destroy();\n _this2._silentLoadTempKernel = undefined;\n return index$$1 === repeatTimes ? reject(error) : resolve(error);\n };\n addEvent(video, 'canplay', videoCanplay, true);\n addEvent(video, 'loadedmetadata', videoLoadedmetadata, true);\n addEvent(video, 'error', _videoError, true);\n kernel = _this2._createKernel(video, config);\n _this2._silentLoadTempKernel = kernel;\n kernel.on('error', _videoError);\n addEvent(_this2.dom.videoElement, 'timeupdate', oldVideoTimeupdate);\n kernel.load();\n });\n };\n });\n return runRejectableQueue(tasks).then(function () {\n var message = 'The silentLoad for ' + src + ' timed out. Please set a longer duration or check your network';\n return _Promise.reject(new Error(message));\n }).catch(function (data) {\n if (isError(data)) {\n return _Promise.reject(data);\n }\n if (data.error) {\n return _Promise.reject(new Error(data.message));\n }\n var video = data.video,\n kernel = data.kernel;\n\n if (option.abort) {\n kernel.destroy();\n return _Promise.reject(new Error('user abort the mission'));\n }\n var paused = _this2.dom.videoElement.paused;\n if (paused) {\n _this2.switchKernel({ video: video, kernel: kernel, config: config });\n return _Promise.resolve();\n }\n return new _Promise(function (resolve) {\n addEvent(video, 'play', function () {\n _this2.switchKernel({ video: video, kernel: kernel, config: config });\n resolve();\n }, true);\n video.play();\n });\n });\n }\n }, {\n key: 'load',\n value: function load(srcOrOption) {\n var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var src = isString(srcOrOption) ? srcOrOption : isObject(srcOrOption) && isString(srcOrOption.src) ? srcOrOption.src : '';\n if (isObject(srcOrOption)) {\n delete srcOrOption.src;\n option = srcOrOption;\n }\n var oldBox = this.kernel.box;\n var videoConfig = this.videoConfig;\n var _option2 = option,\n _option2$isLive = _option2.isLive,\n isLive = _option2$isLive === undefined ? videoConfig.isLive : _option2$isLive,\n _option2$box = _option2.box,\n box = _option2$box === undefined ? videoConfig.box : _option2$box,\n _option2$preset = _option2.preset,\n preset = _option2$preset === undefined ? videoConfig.preset : _option2$preset,\n _option2$kernels = _option2.kernels,\n kernels = _option2$kernels === undefined ? videoConfig.kernels : _option2$kernels;\n\n if (box !== 'native' || box !== oldBox || !isEmpty(option)) {\n var video = document.createElement('video');\n var config = { isLive: isLive, box: box, preset: preset, src: src, kernels: kernels };\n var kernel = this._createKernel(video, config);\n this.switchKernel({ video: video, kernel: kernel, config: config });\n }\n var originAutoLoad = this.videoConfig.autoload;\n this._changeUnwatchable(this.videoConfig, 'autoload', false);\n this.videoConfig.src = src || this.videoConfig.src;\n this.kernel.load(this.videoConfig.src);\n this._changeUnwatchable(this.videoConfig, 'autoload', originAutoLoad);\n }\n }, {\n key: 'switchKernel',\n value: function switchKernel(_ref) {\n var _this3 = this;\n\n var video = _ref.video,\n kernel = _ref.kernel,\n config = _ref.config;\n\n var oldKernel = this.kernel;\n var originVideoConfig = deepClone(this.videoConfig);\n this.dom.removeVideo();\n this.dom.installVideo(video, { bindEvent: false });\n // as we will reset the currentVideoConfig on the new video\n // it will trigger the watch function as they maybe differnet\n // because video config will return the real situation\n // so we need to stop them\n this.videoConfig.changeWatchable = false;\n this.videoConfig.autoload = false;\n this.videoConfig.src = config.src;\n this.videoConfig._realDomAttr.forEach(function (key) {\n // $FlowFixMe: support computed key here\n if (key !== 'src') _this3.videoConfig[key] = originVideoConfig[key];\n });\n this.videoConfig.changeWatchable = true;\n this._bindKernelEvents(oldKernel, true);\n this._bindKernelEvents(kernel);\n this.kernel = kernel;\n this._silentLoadTempKernel = undefined;\n var isLive = config.isLive,\n box = config.box,\n preset = config.preset,\n kernels = config.kernels;\n\n _Object$assign(this.videoConfig, { isLive: isLive, box: box, preset: preset, kernels: kernels });\n // const config = {}\n oldKernel.destroy();\n // delay video event binding\n // so that people can't feel the default value change\n setTimeout(function () {\n return _this3.dom.bindVideoEvents(video);\n });\n }\n /**\n * destroy function called when dispatcher destroyed\n */\n\n }, {\n key: 'destroy',\n value: function destroy() {\n for (var _key in this.plugins) {\n this.unuse(_key);\n }\n this.bus.destroy();\n delete this.bus;\n this.dom.destroy();\n delete this.dom;\n this._bindKernelEvents(this.kernel, true);\n this.kernel.destroy();\n delete this.kernel;\n delete this.vm;\n delete this.plugins;\n delete this.order;\n }\n /**\n * use a set of plugin\n * @param {Array} configs a set of plugin config\n * @return {Array} a set of Promise indicate the plugin install stage\n */\n\n }, {\n key: '_initUserPlugin',\n value: function _initUserPlugin() {\n var _this4 = this;\n\n var configs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n if (!isArray(configs)) {\n configs = [];\n }\n return configs.map(function (config) {\n return _this4.use(config);\n });\n }\n /**\n * sort zIndex of plugins to make plugin display in order\n */\n\n }, {\n key: '_sortZIndex',\n value: function _sortZIndex() {\n var _this5 = this;\n\n var _order$reduce = this.order.reduce(function (levelSet, key) {\n var plugin = _this5.plugins[key];\n if (isEmpty(plugin)) return levelSet;\n var set = levelSet[plugin.$inner ? 'inner' : 'outer'];\n var level = plugin.$level;\n set[level] = set[level] || [];\n set[level].push(key);\n return levelSet;\n }, { inner: {}, outer: {} }),\n inner = _order$reduce.inner,\n outer = _order$reduce.outer;\n\n inner[0] = inner[0] || [];\n inner[0].unshift('videoElement');\n outer[0] = outer[0] || [];\n outer[0].unshift('container');\n var innerOrderArr = transObjectAttrIntoArray(inner);\n var outerOrderArr = transObjectAttrIntoArray(outer);\n this.dom.setPluginsZIndex(innerOrderArr);\n this.dom.setPluginsZIndex(outerOrderArr);\n this.zIndexMap.inner = innerOrderArr;\n this.zIndexMap.outer = outerOrderArr;\n }\n /**\n * get the top element's level\n * @param {boolean} inner get the inner array or the outer array\n */\n\n }, {\n key: '_getTopLevel',\n value: function _getTopLevel(inner) {\n var arr = this.zIndexMap[inner ? 'inner' : 'outer'];\n var plugin = this.plugins[arr[arr.length - 1]];\n return isEmpty(plugin) ? 0 : plugin.$level;\n }\n }, {\n key: '_autoloadVideoSrcAtFirst',\n value: function _autoloadVideoSrcAtFirst() {\n if (this.videoConfig.autoload) {\n if (\"production\" !== 'prodution' && !this.videoConfig.src) {\n Log.warn('You have not set the src, so you better set autoload to be false. Accroding to https://github.com/Chimeejs/chimee/blob/master/doc/zh-cn/chimee-api.md#src.');\n return;\n }\n this.bus.emit('load', this.videoConfig.src);\n }\n }\n }, {\n key: '_changeUnwatchable',\n value: function _changeUnwatchable(object, property, value) {\n this.changeWatchable = false;\n object[property] = value;\n this.changeWatchable = true;\n }\n }, {\n key: '_createKernel',\n value: function _createKernel(video, config) {\n var kernels = config.kernels,\n preset = config.preset;\n var presetConfig = {};\n var newPreset = {};\n if (isArray(kernels)) {\n // SKC means SingleKernelConfig\n newPreset = kernels.reduce(function (kernels, keyOrSKC) {\n // if it is a string key, it means the kernel has been pre installed.\n if (isString(keyOrSKC)) {\n var kernelFn = kernelsSet[keyOrSKC];\n if (!isFunction(kernelFn)) {\n Log.warn('You have not installed kernel for ' + keyOrSKC + '.');\n return kernels;\n }\n kernels[keyOrSKC] = kernelFn;\n return kernels;\n }\n // if it is a SingleKernelConfig, it means user may pass in some config here\n // so we need to extract the handler\n // get the name of the handler\n // and collect the config for the handler\n if (isObject(keyOrSKC)) {\n var name = keyOrSKC.name,\n handler = keyOrSKC.handler;\n // if the handler is a pure string, it means the kernel has been pre installed\n\n if (isString(handler)) {\n var _kernelFn = kernelsSet[handler];\n if (!isFunction(_kernelFn)) {\n Log.warn('You have not installed kernel for ' + handler + '.');\n return kernels;\n }\n kernels[handler] = _kernelFn;\n presetConfig[handler] = keyOrSKC;\n return kernels;\n }\n // if the handler is a function, it means that the user pass in the kernel directly\n // if the provide name, we use it as kernel name\n // if they do not provide name, we just use the function's name\n if (isFunction(handler)) {\n var kernelName = name || handler.name;\n kernels[kernelName] = handler;\n presetConfig[kernelName] = keyOrSKC;\n return kernels;\n }\n Log.warn('When you pass in an SingleKernelConfig in Array, you must clarify it\\'s handler, we only support handler in string or function but not ' + (typeof handler === 'undefined' ? 'undefined' : _typeof(handler)));\n return kernels;\n }\n Log.warn('If you pass in kernels as array, you must pass in kernels in string or function, but not ' + (typeof keyOrSKC === 'undefined' ? 'undefined' : _typeof(keyOrSKC)));\n return kernels;\n }, {});\n }\n\n if (isObject(kernels)) {\n // SKC means SingleKernelConfig\n _Object$keys(kernels).forEach(function (key) {\n var fnOrSKC = kernels[key];\n // if it's a function, means we need to do nothing\n if (isFunction(fnOrSKC)) {\n newPreset[key] = fnOrSKC;\n return;\n }\n if (isObject(fnOrSKC)) {\n var handler = fnOrSKC.handler;\n // if handler is an string, it means user has pre install it\n\n if (isString(handler)) {\n var kernelFn = kernelsSet[handler];\n if (!isFunction(kernelFn)) {\n Log.warn('You have not installed kernel for ' + handler + '.');\n return;\n }\n newPreset[key] = kernelFn;\n presetConfig[key] = fnOrSKC;\n return;\n }\n if (isFunction(handler)) {\n newPreset[key] = handler;\n presetConfig[key] = fnOrSKC;\n return;\n }\n Log.warn('When you pass in an SingleKernelConfig in Object, you must clarify it\\'s handler, we only support handler in string or function but not ' + (typeof handler === 'undefined' ? 'undefined' : _typeof(handler)));\n return;\n }\n Log.warn('If you pass in kernels as object, you must pass in kernels in string or function, but not ' + (typeof fnOrSKC === 'undefined' ? 'undefined' : _typeof(fnOrSKC)));\n return kernels;\n });\n }\n config.preset = _Object$assign(newPreset, preset);\n config.presetConfig = presetConfig;\n var kernel = new ChimeeKernel(video, config);\n return kernel;\n }\n }, {\n key: '_bindKernelEvents',\n value: function _bindKernelEvents(kernel) {\n var _this6 = this;\n\n var remove = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n kernelEvents$1.forEach(function (key, index$$1) {\n if (!remove) {\n var _fn = function _fn() {\n var _bus;\n\n for (var _len = arguments.length, args = Array(_len), _key2 = 0; _key2 < _len; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return (_bus = _this6.bus).triggerSync.apply(_bus, [key].concat(_toConsumableArray(args)));\n };\n kernel.on(key, _fn);\n _this6.kernelEventHandlerList.push(_fn);\n return;\n }\n var fn = _this6.kernelEventHandlerList[index$$1];\n kernel.off(key, fn);\n });\n if (remove) {\n this.kernelEventHandlerList = [];\n kernel.off('error', this.throwError);\n } else {\n kernel.on('error', this.throwError);\n }\n }\n /**\n * static method to install plugin\n * we will store the plugin config\n * @type {string} plugin's id\n */\n\n }], [{\n key: 'install',\n value: function install(config) {\n var name = config.name;\n\n var id = camelize(name);\n if (!isEmpty(pluginConfigSet[id])) {\n }\n var pluginConfig = isFunction(config) ? config : deepAssign({ id: id }, config);\n pluginConfigSet[id] = pluginConfig;\n return id;\n }\n }, {\n key: 'hasInstalled',\n value: function hasInstalled(id) {\n return !isEmpty(pluginConfigSet[id]);\n }\n }, {\n key: 'uninstall',\n value: function uninstall(id) {\n delete pluginConfigSet[id];\n }\n /**\n * get Plugin config based on plugin's id\n * @type {[type]}\n */\n\n }, {\n key: 'getPluginConfig',\n value: function getPluginConfig(id) {\n return pluginConfigSet[id];\n }\n }, {\n key: 'installKernel',\n value: function installKernel(key, value) {\n var tasks = isObject(key) ? _Object$entries(key) : [[key, value]];\n tasks.forEach(function (_ref2) {\n var _ref3 = _slicedToArray(_ref2, 2),\n key = _ref3[0],\n value = _ref3[1];\n\n if (!isFunction(value)) throw new Error('The kernel you install on ' + key + ' must be a Function, but not ' + (typeof value === 'undefined' ? 'undefined' : _typeof(value)));\n if (isFunction(kernelsSet[key])) Log.warn('You have alrady install a kernel on ' + key + ', and now we will replace it');\n kernelsSet[key] = value;\n });\n }\n\n // only use for debug in internal\n\n }, {\n key: 'uninstallKernel',\n value: function uninstallKernel(key) {\n delete kernelsSet[key];\n }\n }, {\n key: 'hasInstalledKernel',\n value: function hasInstalledKernel(key) {\n return isFunction(kernelsSet[key]);\n }\n }]);\n\n return Dispatcher;\n}(), _applyDecoratedDescriptor$4(_class$5.prototype, 'unuse', [_dec$5], _Object$getOwnPropertyDescriptor(_class$5.prototype, 'unuse'), _class$5.prototype), _applyDecoratedDescriptor$4(_class$5.prototype, 'throwError', [autobind], _Object$getOwnPropertyDescriptor(_class$5.prototype, 'throwError'), _class$5.prototype), _applyDecoratedDescriptor$4(_class$5, 'install', [_dec2$4], _Object$getOwnPropertyDescriptor(_class$5, 'install'), _class$5), _applyDecoratedDescriptor$4(_class$5, 'hasInstalled', [_dec3$3], _Object$getOwnPropertyDescriptor(_class$5, 'hasInstalled'), _class$5), _applyDecoratedDescriptor$4(_class$5, 'uninstall', [_dec4$3], _Object$getOwnPropertyDescriptor(_class$5, 'uninstall'), _class$5), _applyDecoratedDescriptor$4(_class$5, 'getPluginConfig', [_dec5$2], _Object$getOwnPropertyDescriptor(_class$5, 'getPluginConfig'), _class$5), _class$5);\n\nvar _class$6, _descriptor$1;\n\nfunction _initDefineProp$1(target, property, descriptor, context) {\n if (!descriptor) return;\n\n _Object$defineProperty(target, property, {\n enumerable: descriptor.enumerable,\n configurable: descriptor.configurable,\n writable: descriptor.writable,\n value: descriptor.initializer ? descriptor.initializer.call(context) : void 0\n });\n}\n\nfunction _applyDecoratedDescriptor$5(target, property, decorators, descriptor, context) {\n var desc = {};\n Object['ke' + 'ys'](descriptor).forEach(function (key) {\n desc[key] = descriptor[key];\n });\n desc.enumerable = !!desc.enumerable;\n desc.configurable = !!desc.configurable;\n\n if ('value' in desc || desc.initializer) {\n desc.writable = true;\n }\n\n desc = decorators.slice().reverse().reduce(function (desc, decorator) {\n return decorator(target, property, desc) || desc;\n }, desc);\n\n if (context && desc.initializer !== void 0) {\n desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n desc.initializer = undefined;\n }\n\n if (desc.initializer === void 0) {\n Object['define' + 'Property'](target, property, desc);\n desc = null;\n }\n\n return desc;\n}\nvar GlobalConfig = (_class$6 = function () {\n _createClass(GlobalConfig, [{\n key: 'silent',\n get: function get$$1() {\n return this._silent;\n },\n set: function set(val) {\n var _this = this;\n\n val = !!val;\n this._silent = val;\n _Object$keys(this.log).forEach(function (key) {\n _this.log[key] = !val;\n });\n }\n }]);\n\n function GlobalConfig() {\n _classCallCheck(this, GlobalConfig);\n\n this.log = {\n error: true,\n info: true,\n warn: true,\n debug: true,\n verbose: true\n };\n\n _initDefineProp$1(this, '_silent', _descriptor$1, this);\n\n this.errorHandler = undefined;\n\n var props = _Object$keys(this.log).reduce(function (props, key) {\n props[key] = accessor({\n get: function get$$1() {\n // $FlowFixMe: we have check the keys\n return Log['ENABLE_' + key.toUpperCase()];\n },\n set: function set(val) {\n // $FlowFixMe: we have check the keys\n Log['ENABLE_' + key.toUpperCase()] = val;\n if (val === true) this.silent = false;\n return val;\n }\n });\n return props;\n }, {});\n applyDecorators(this.log, props, { self: true });\n }\n\n return GlobalConfig;\n}(), _descriptor$1 = _applyDecoratedDescriptor$5(_class$6.prototype, '_silent', [nonenumerable], {\n enumerable: true,\n initializer: function initializer() {\n return false;\n }\n}), _class$6);\n\nvar _dec$6, _class$7, _class2$1$1, _descriptor$2, _descriptor2$1, _descriptor3$1, _init, _init2, _init3, _init4, _init5, _init6, _init7, _init8, _init9, _class3, _temp;\n\nfunction _initDefineProp$2(target, property, descriptor, context) {\n if (!descriptor) return;\n\n _Object$defineProperty(target, property, {\n enumerable: descriptor.enumerable,\n configurable: descriptor.configurable,\n writable: descriptor.writable,\n value: descriptor.initializer ? descriptor.initializer.call(context) : void 0\n });\n}\n\nfunction _applyDecoratedDescriptor$6(target, property, decorators, descriptor, context) {\n var desc = {};\n Object['ke' + 'ys'](descriptor).forEach(function (key) {\n desc[key] = descriptor[key];\n });\n desc.enumerable = !!desc.enumerable;\n desc.configurable = !!desc.configurable;\n\n if ('value' in desc || desc.initializer) {\n desc.writable = true;\n }\n\n desc = decorators.slice().reverse().reduce(function (desc, decorator) {\n return decorator(target, property, desc) || desc;\n }, desc);\n\n if (context && desc.initializer !== void 0) {\n desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n desc.initializer = undefined;\n }\n\n if (desc.initializer === void 0) {\n Object['define' + 'Property'](target, property, desc);\n desc = null;\n }\n\n return desc;\n}\n\nvar Chimee = (_dec$6 = autobindClass(), _dec$6(_class$7 = (_class2$1$1 = (_temp = _class3 = function (_VideoWrapper) {\n _inherits(Chimee, _VideoWrapper);\n\n function Chimee(config) {\n _classCallCheck(this, Chimee);\n\n /* istanbul ignore if */\n var _this = _possibleConstructorReturn(this, (Chimee.__proto__ || _Object$getPrototypeOf(Chimee)).call(this));\n\n _this.destroyed = false;\n\n _initDefineProp$2(_this, '__id', _descriptor$2, _this);\n\n _initDefineProp$2(_this, 'version', _descriptor2$1, _this);\n\n _initDefineProp$2(_this, 'config', _descriptor3$1, _this);\n if (isString(config) || isElement(config)) {\n config = {\n wrapper: config,\n controls: true\n };\n } else if (isObject(config)) {\n if (!config.wrapper) throw new Error('You must pass in an legal object');\n } else {\n throw new Error('You must pass in an Object containing wrapper or string or element to new a Chimee');\n }\n // $FlowFixMe: we have check wrapper here\n _this.__dispatcher = new Dispatcher(config, _this);\n _this.ready = _this.__dispatcher.ready;\n _this.readySync = _this.__dispatcher.readySync;\n _this.__wrapAsVideo(_this.__dispatcher.videoConfig);\n return _this;\n }\n\n _createClass(Chimee, [{\n key: 'destroy',\n value: function destroy() {\n _get(Chimee.prototype.__proto__ || _Object$getPrototypeOf(Chimee.prototype), '__destroy', this).call(this);\n this.__dispatcher.destroy();\n // $FlowFixMe: normal obejct define\n Object.defineProperty(this, '__dispatcher', {\n get: function get$$1() {\n throw new Error('This instance has been destroyed.');\n },\n\n enumerable: true,\n configurable: true\n });\n this.destroyed = true;\n }\n }, {\n key: 'use',\n value: function use(option) {\n this.__dispatcher.use(option);\n }\n }, {\n key: 'unuse',\n value: function unuse(name) {\n this.__dispatcher.unuse(name);\n }\n }, {\n key: '__throwError',\n value: function __throwError(error) {\n if (isString(error)) error = new Error(error);\n var errorHandler = this.config.errorHandler || Chimee.config.errorHandler;\n if (isFunction(errorHandler)) return errorHandler(error);\n if (Chimee.config.silent) return;\n if (isError(error)) throw error;else console.error(error);\n }\n }]);\n\n return Chimee;\n}(VideoWrapper), _class3.plugin = Plugin, _class3.config = new GlobalConfig(), _class3.install = Dispatcher.install, _class3.uninstall = Dispatcher.uninstall, _class3.hasInstalled = Dispatcher.hasInstalled, _class3.installKernel = Dispatcher.installKernel, _class3.uninstallKernel = Dispatcher.uninstallKernel, _class3.hasInstalledKernel = Dispatcher.hasInstalledKernel, _class3.getPluginConfig = Dispatcher.getPluginConfig, _temp), _descriptor$2 = _applyDecoratedDescriptor$6(_class2$1$1.prototype, '__id', [frozen], {\n enumerable: true,\n initializer: function initializer() {\n return '_vm';\n }\n}), _descriptor2$1 = _applyDecoratedDescriptor$6(_class2$1$1.prototype, 'version', [frozen], {\n enumerable: true,\n initializer: function initializer() {\n return '0.9.5';\n }\n}), _descriptor3$1 = _applyDecoratedDescriptor$6(_class2$1$1.prototype, 'config', [frozen], {\n enumerable: true,\n initializer: function initializer() {\n return {\n errorHandler: undefined\n };\n }\n}), _applyDecoratedDescriptor$6(_class2$1$1, 'plugin', [frozen], (_init = _Object$getOwnPropertyDescriptor(_class2$1$1, 'plugin'), _init = _init ? _init.value : undefined, {\n enumerable: true,\n configurable: true,\n writable: true,\n initializer: function initializer() {\n return _init;\n }\n}), _class2$1$1), _applyDecoratedDescriptor$6(_class2$1$1, 'config', [frozen], (_init2 = _Object$getOwnPropertyDescriptor(_class2$1$1, 'config'), _init2 = _init2 ? _init2.value : undefined, {\n enumerable: true,\n configurable: true,\n writable: true,\n initializer: function initializer() {\n return _init2;\n }\n}), _class2$1$1), _applyDecoratedDescriptor$6(_class2$1$1, 'install', [frozen], (_init3 = _Object$getOwnPropertyDescriptor(_class2$1$1, 'install'), _init3 = _init3 ? _init3.value : undefined, {\n enumerable: true,\n configurable: true,\n writable: true,\n initializer: function initializer() {\n return _init3;\n }\n}), _class2$1$1), _applyDecoratedDescriptor$6(_class2$1$1, 'uninstall', [frozen], (_init4 = _Object$getOwnPropertyDescriptor(_class2$1$1, 'uninstall'), _init4 = _init4 ? _init4.value : undefined, {\n enumerable: true,\n configurable: true,\n writable: true,\n initializer: function initializer() {\n return _init4;\n }\n}), _class2$1$1), _applyDecoratedDescriptor$6(_class2$1$1, 'hasInstalled', [frozen], (_init5 = _Object$getOwnPropertyDescriptor(_class2$1$1, 'hasInstalled'), _init5 = _init5 ? _init5.value : undefined, {\n enumerable: true,\n configurable: true,\n writable: true,\n initializer: function initializer() {\n return _init5;\n }\n}), _class2$1$1), _applyDecoratedDescriptor$6(_class2$1$1, 'installKernel', [frozen], (_init6 = _Object$getOwnPropertyDescriptor(_class2$1$1, 'installKernel'), _init6 = _init6 ? _init6.value : undefined, {\n enumerable: true,\n configurable: true,\n writable: true,\n initializer: function initializer() {\n return _init6;\n }\n}), _class2$1$1), _applyDecoratedDescriptor$6(_class2$1$1, 'uninstallKernel', [frozen], (_init7 = _Object$getOwnPropertyDescriptor(_class2$1$1, 'uninstallKernel'), _init7 = _init7 ? _init7.value : undefined, {\n enumerable: true,\n configurable: true,\n writable: true,\n initializer: function initializer() {\n return _init7;\n }\n}), _class2$1$1), _applyDecoratedDescriptor$6(_class2$1$1, 'hasInstalledKernel', [frozen], (_init8 = _Object$getOwnPropertyDescriptor(_class2$1$1, 'hasInstalledKernel'), _init8 = _init8 ? _init8.value : undefined, {\n enumerable: true,\n configurable: true,\n writable: true,\n initializer: function initializer() {\n return _init8;\n }\n}), _class2$1$1), _applyDecoratedDescriptor$6(_class2$1$1, 'getPluginConfig', [frozen], (_init9 = _Object$getOwnPropertyDescriptor(_class2$1$1, 'getPluginConfig'), _init9 = _init9 ? _init9.value : undefined, {\n enumerable: true,\n configurable: true,\n writable: true,\n initializer: function initializer() {\n return _init9;\n }\n}), _class2$1$1), _class2$1$1)) || _class$7);\n\nfunction unwrapExports$1 (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nfunction createCommonjsModule$1(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nvar classCallCheck$1 = createCommonjsModule$1(function (module, exports) {\nexports.__esModule = true;\n\nexports.default = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n});\n\nvar _classCallCheck$1 = unwrapExports$1(classCallCheck$1);\n\nvar _global$2 = createCommonjsModule$1(function (module) {\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n});\n\nvar _core$2 = createCommonjsModule$1(function (module) {\nvar core = module.exports = { version: '2.5.1' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n});\n\nvar _core_1$2 = _core$2.version;\n\nvar _aFunction$2 = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n\n// optional / simple context binding\n\nvar _ctx$2 = function (fn, that, length) {\n _aFunction$2(fn);\n if (that === undefined) return fn;\n switch (length) {\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\nvar _isObject$2 = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\nvar _anObject$2 = function (it) {\n if (!_isObject$2(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n\nvar _fails$2 = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n\n// Thank's IE8 for his funny defineProperty\nvar _descriptors$2 = !_fails$2(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n\nvar document$4 = _global$2.document;\n// typeof document.createElement is 'object' in old IE\nvar is$2 = _isObject$2(document$4) && _isObject$2(document$4.createElement);\nvar _domCreate$2 = function (it) {\n return is$2 ? document$4.createElement(it) : {};\n};\n\nvar _ie8DomDefine$2 = !_descriptors$2 && !_fails$2(function () {\n return Object.defineProperty(_domCreate$2('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n\n// 7.1.1 ToPrimitive(input [, PreferredType])\n\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nvar _toPrimitive$2 = function (it, S) {\n if (!_isObject$2(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !_isObject$2(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !_isObject$2(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !_isObject$2(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n\nvar dP$5 = Object.defineProperty;\n\nvar f$9 = _descriptors$2 ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n _anObject$2(O);\n P = _toPrimitive$2(P, true);\n _anObject$2(Attributes);\n if (_ie8DomDefine$2) try {\n return dP$5(O, P, Attributes);\n } catch (e) { /* 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\nvar _objectDp$2 = {\n\tf: f$9\n};\n\nvar _propertyDesc$2 = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n\nvar _hide$2 = _descriptors$2 ? function (object, key, value) {\n return _objectDp$2.f(object, key, _propertyDesc$2(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n\nvar PROTOTYPE$4 = 'prototype';\n\nvar $export$2 = function (type, name, source) {\n var IS_FORCED = type & $export$2.F;\n var IS_GLOBAL = type & $export$2.G;\n var IS_STATIC = type & $export$2.S;\n var IS_PROTO = type & $export$2.P;\n var IS_BIND = type & $export$2.B;\n var IS_WRAP = type & $export$2.W;\n var exports = IS_GLOBAL ? _core$2 : _core$2[name] || (_core$2[name] = {});\n var expProto = exports[PROTOTYPE$4];\n var target = IS_GLOBAL ? _global$2 : IS_STATIC ? _global$2[name] : (_global$2[name] || {})[PROTOTYPE$4];\n var key, own, out;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n if (own && key in exports) continue;\n // export native or passed\n out = own ? target[key] : source[key];\n // prevent global pollution for namespaces\n exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n // bind timers to global for call from export context\n : IS_BIND && own ? _ctx$2(out, _global$2)\n // wrap global constructors for prevent change them in library\n : IS_WRAP && target[key] == out ? (function (C) {\n var F = function (a, b, c) {\n if (this instanceof C) {\n switch (arguments.length) {\n case 0: return new C();\n case 1: return new C(a);\n case 2: return new C(a, b);\n } return new C(a, b, c);\n } return C.apply(this, arguments);\n };\n F[PROTOTYPE$4] = C[PROTOTYPE$4];\n return F;\n // make static versions for prototype methods\n })(out) : IS_PROTO && typeof out == 'function' ? _ctx$2(Function.call, out) : out;\n // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n if (IS_PROTO) {\n (exports.virtual || (exports.virtual = {}))[key] = out;\n // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n if (type & $export$2.R && expProto && !expProto[key]) _hide$2(expProto, key, out);\n }\n }\n};\n// type bitmap\n$export$2.F = 1; // forced\n$export$2.G = 2; // global\n$export$2.S = 4; // static\n$export$2.P = 8; // proto\n$export$2.B = 16; // bind\n$export$2.W = 32; // wrap\n$export$2.U = 64; // safe\n$export$2.R = 128; // real proto method for `library`\nvar _export$2 = $export$2;\n\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n_export$2(_export$2.S + _export$2.F * !_descriptors$2, 'Object', { defineProperty: _objectDp$2.f });\n\nvar $Object$4 = _core$2.Object;\nvar defineProperty$2$2 = function defineProperty(it, key, desc) {\n return $Object$4.defineProperty(it, key, desc);\n};\n\nvar defineProperty$7 = createCommonjsModule$1(function (module) {\nmodule.exports = { \"default\": defineProperty$2$2, __esModule: true };\n});\n\nunwrapExports$1(defineProperty$7);\n\nvar createClass$1 = createCommonjsModule$1(function (module, exports) {\nexports.__esModule = true;\n\n\n\nvar _defineProperty2 = _interopRequireDefault(defineProperty$7);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n (0, _defineProperty2.default)(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n});\n\nvar _createClass$1 = unwrapExports$1(createClass$1);\n\nfunction getDistance(x, y, x1, y1) {\n\n return Math.sqrt(Math.pow(x1 - x, 2) + Math.pow(y1 - y, 2));\n}\n\nfunction getSpeed(s, t) {\n return s / t;\n}\n\nfunction isArray$1(arr) {\n return Array.isArray(arr);\n}\n\n/**\n * 手势判断组件\n * 目前判断的手势\n * 单点操作\n * tap\n * swipe\n * pan\n */\n\nvar Gesture = function () {\n function Gesture() {\n _classCallCheck$1(this, Gesture);\n\n // this.events = events;\n // ['tap', 'swipe', 'panstart', 'panmove', 'panend', 'press'].forEach(item => {\n // this[item] = events[item].bind(host);\n // })\n\n // 手势该有的几个状态\n // swipe tapping pressing\n\n this.startTime = 0;\n this.endTime = 0;\n this.event = {};\n this.status = '';\n }\n\n _createClass$1(Gesture, [{\n key: 'touchstart',\n value: function touchstart(evt) {\n // 当前 touch 点\n this.startTouch = evt.changedTouches[0];\n\n // 开始时间\n this.startTime = Date.now();\n\n this.status = 'tapping';\n }\n }, {\n key: 'touchmove',\n value: function touchmove(evt) {\n\n var touch = evt.changedTouches[0];\n\n var distance = getDistance(this.startTouch.clientX, this.startTouch.clientY, touch.clientX, touch.clientY);\n\n if (this.status === 'tapping' && distance > 10) {\n this.status = 'panning';\n this.fire('panstart', evt);\n } else if (this.status === 'panning') {\n this.fire('panmove', evt);\n }\n }\n }, {\n key: 'touchend',\n value: function touchend(evt) {\n\n this.endTouch = evt.changedTouches[0];\n\n var time = Date.now();\n var distance = getDistance(this.startTouch.clientX, this.startTouch.clientY, this.endTouch.clientX, this.endTouch.clientY);\n var interval = time - this.startTime;\n\n // 时间 <= 250ms 距离小于 10 px 则认为是 tap\n if (interval <= 250 && distance < 10) {\n this.fire('tap', evt);\n time - this.endTime < 300 && this.fire('doubletap', evt);\n }\n\n // 时间 > 250ms 距离小于 10 px 则认为是 press\n interval > 250 && distance < 10 && this.fire('press', evt);\n\n var speed = getSpeed(distance, interval);\n\n // 距离大于 10 px , 速度大于 0.3 则认为是 swipe\n speed > 0.3 && distance >= 10 && this.fire('swipe', evt);\n\n // 处于 panning 则触发 panend 事件\n this.status === 'panning' && this.fire('panend', evt);\n\n this.endTime = Date.now();\n }\n }, {\n key: 'touchcancel',\n value: function touchcancel(evt) {}\n }, {\n key: 'on',\n value: function on(type, func) {\n if (isArray$1(this.event[type])) {\n this.event[type].push(func);\n } else {\n this.event[type] = [func];\n }\n }\n }, {\n key: 'fire',\n value: function fire(type, evt) {\n if (!isArray$1(this.event[type])) return;\n this.event[type].forEach(function (item) {\n item(evt);\n });\n }\n }]);\n\n return Gesture;\n}();\n\nvar baseMobileEvent = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\nvar supportGesture = ['tap', 'swipe', 'panstart', 'panmove', 'panend', 'press', 'doubletap'];\nfunction gestureFactory() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$name = _ref.name,\n name = _ref$name === undefined ? 'chimeeGesture' : _ref$name,\n el = _ref.el,\n _ref$level = _ref.level,\n level = _ref$level === undefined ? 0 : _ref$level,\n _ref$inner = _ref.inner,\n inner = _ref$inner === undefined ? true : _ref$inner,\n autoFocus = _ref.autoFocus,\n className = _ref.className,\n _beforeCreate = _ref.beforeCreate,\n _create = _ref.create,\n init = _ref.init,\n inited = _ref.inited,\n _destroy = _ref.destroy,\n data = _ref.data,\n computed = _ref.computed,\n _ref$events = _ref.events,\n events = _ref$events === undefined ? {} : _ref$events,\n _ref$methods = _ref.methods,\n methods = _ref$methods === undefined ? {} : _ref$methods,\n _ref$penetrate = _ref.penetrate,\n penetrate = _ref$penetrate === undefined ? false : _ref$penetrate,\n _ref$operable = _ref.operable,\n operable = _ref$operable === undefined ? true : _ref$operable;\n\n return {\n name: name,\n el: el,\n level: level,\n inner: inner,\n autoFocus: autoFocus,\n className: className,\n data: data,\n computed: computed,\n beforeCreate: function beforeCreate(config) {\n var _this = this;\n\n this.gesture = new Gesture();\n this.c_gesture = new Gesture();\n this.w_gesture = new Gesture();\n this.d_gesture = new Gesture();\n baseMobileEvent.forEach(function (item) {\n config.events[item] = function (evt) {\n _this.gesture[item](evt);\n };\n config.events['c_' + item] = function (evt) {\n _this.c_gesture[item](evt);\n };\n config.events['w_' + item] = function (evt) {\n _this.w_gesture[item](evt);\n };\n });\n\n supportGesture.forEach(function (item) {\n _this.gesture.on(item, function (evt) {\n var func = config.events[item];\n func && func.call(_this, evt);\n });\n _this.c_gesture.on(item, function (evt) {\n var func = config.events['c_' + item];\n func && func.call(_this, evt);\n });\n _this.w_gesture.on(item, function (evt) {\n var func = config.events['w_' + item];\n func && func.call(_this, evt);\n });\n _this.d_gesture.on(item, function (evt) {\n var func = config.events['d_' + item];\n func && func.call(_this, evt);\n });\n });\n\n _beforeCreate && _beforeCreate.call(this);\n },\n create: function create() {\n var _this2 = this;\n\n this._i = this._i || 0;\n this._i++;\n baseMobileEvent.forEach(function (item) {\n var key = '__' + item;\n _this2[key] = function (evt) {\n _this2.d_gesture[item](evt);\n };\n addEvent(_this2.$dom, item, _this2[key]);\n });\n\n _create && _create.call(this);\n },\n\n init: init,\n inited: inited,\n destroy: function destroy() {\n var _this3 = this;\n\n baseMobileEvent.forEach(function (item) {\n var key = '__' + item;\n removeEvent(_this3.$dom, item, _this3[key]);\n });\n\n _destroy && _destroy.call(this);\n },\n\n methods: methods,\n penetrate: penetrate,\n operable: operable,\n events: events\n };\n}\n\n/**\n * 为HTML元素添加事件代理\n * @param {HTMLElement} host 目标对象\n * @param {String} selector 要被代理的元素\n * @param {String} type 事件名称\n * @param {Function} handler 处理函数\n * @param {Boolean} capture 是否在捕获阶段监听\n */\nfunction addDelegate$1(host, selector, type, handler) {\n\n var el = host.$dom;\n var handlerWrap = function handlerWrap(e) {\n var targetElsArr = findParents(e.target || e.srcElement, el, true);\n var targetElArr = query(selector, el, true);\n var retEl = void 0;\n if (targetElArr.find) {\n retEl = targetElArr.find(function (seEl) {\n return targetElsArr.find(function (tgEl) {\n return seEl === tgEl;\n });\n });\n } else {\n // Fixed IE11 Array.find not defined bug\n targetElArr.forEach(function (seEl) {\n return !retEl && targetElsArr.forEach(function (tgEl) {\n if (!retEl && seEl === tgEl) {\n retEl = tgEl;\n }\n });\n });\n }\n retEl && handler.apply(retEl, arguments);\n };\n /* 将包装后的方法记录到缓存中 */\n addEventCache(el, type + '_delegate_' + selector, handler, handlerWrap);\n host.events[type] = isArray(host.events[type]) ? host.events[type] : [];\n host.events[type].push(handlerWrap);\n}\n\n/**\n * 为HTML元素移除事件代理\n * @param {HTMLElement} host 目标对象\n * @param {String} selector 要被代理的元素\n * @param {String} type 事件名称\n * @param {Function} handler 处理函数\n * @param {Boolean} capture 是否在捕获阶段监听\n */\nfunction removeDelegate$1(host, selector, type, handler) {\n\n var el = host.$dom;\n /* 尝试从缓存中读取包装后的方法 */\n var handlerWrap = removeEventCache(el, type + '_delegate_' + selector, handler);\n if (handlerWrap) {\n var index = host.events[type].indexOf(handlerWrap);\n host.events[type].splice(index, 1);\n }\n}\n\nfunction fireEvent(host, type, evt) {\n isArray(host.events[type]) && host.events[type].forEach(function (item) {\n item(evt);\n });\n}\n\nvar Base = function () {\n function Base(parent) {\n _classCallCheck(this, Base);\n\n this.parent = parent;\n }\n\n _createClass(Base, [{\n key: 'create',\n value: function create() {\n this.createEl();\n this.addAllEvent();\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.removeAllEvent();\n }\n }, {\n key: 'createEl',\n value: function createEl() {\n this.$dom = document.createElement(this.option.tag);\n this.$dom.innerHTML = this.option.html;\n this.parent.$wrap.appendChild(this.$dom);\n }\n }, {\n key: 'addAllEvent',\n value: function addAllEvent() {\n var _this = this;\n\n this.option.defaultEvent && _Object$keys(this.option.defaultEvent).forEach(function (item) {\n var key = _this.option.defaultEvent[item];\n _this[key] = bind(_this[key], _this);\n addDelegate$1(_this.parent, _this.option.tag, item, _this[key], false, false);\n });\n this.option.event && _Object$keys(this.option.event).forEach(function (item) {\n var key = '__' + item;\n _this[key] = bind(_this.option.event[item], _this);\n addDelegate$1(_this.parent, _this.option.tag, item, _this[key], false, false);\n });\n }\n }, {\n key: 'removeAllEvent',\n value: function removeAllEvent() {\n var _this2 = this;\n\n this.option.defaultEvent && _Object$keys(this.option.defaultEvent).forEach(function (item) {\n var key = _this2.option.defaultEvent[item];\n _this2[key] = bind(_this2[key], _this2);\n removeDelegate$1(_this2.parent, _this2.option.tag, item, _this2[key], false, false);\n });\n this.option.event && _Object$keys(this.option.event).forEach(function (item) {\n var key = '__' + item;\n _this2[key] = bind(_this2.option.event[item], _this2);\n removeDelegate$1(_this2.parent, _this2.option.tag, item, _this2[key], false, false);\n });\n }\n }]);\n\n return Base;\n}();\n\n/**\n * 自定义组件配置\n */\n\nvar Component = function (_Base) {\n _inherits(Component, _Base);\n\n function Component(parent, option) {\n _classCallCheck(this, Component);\n\n var _this = _possibleConstructorReturn(this, (Component.__proto__ || _Object$getPrototypeOf(Component)).call(this, parent));\n\n _this.option = option;\n _this.init();\n return _this;\n }\n\n _createClass(Component, [{\n key: 'init',\n value: function init() {\n _get(Component.prototype.__proto__ || _Object$getPrototypeOf(Component.prototype), 'create', this).call(this);\n addClassName(this.$dom, 'chimee-flex-component');\n }\n }]);\n\n return Component;\n}(Base);\n\n/**\n * play 配置\n */\n\nvar defaultOption = {\n tag: 'chimee-control-state',\n html: '\\n \\n \\n ',\n animate: {\n icon: '\\n \\n ',\n path: {\n play: {\n left: 'M0.921875,0.265625L0.921875,197.074852L95.7890625,149L96.2929688,49Z',\n right: 'M90.3142151,45.9315226L90.3142151,151.774115L201.600944,99.9938782L201.600944,98.0237571Z'\n },\n pause: {\n left: 'M0.921875,1.265625L0.921875,198.074852L79.3611677,198.074852L79.3611677,0.258923126Z',\n right: 'M126.921875,1.265625L126.921875,198.074852L205.361168,198.074852L205.361168,0.258923126Z'\n }\n }\n },\n defaultEvent: {\n tap: 'tap'\n }\n};\n\nvar Play = function (_Base) {\n _inherits(Play, _Base);\n\n function Play(parent, option) {\n _classCallCheck(this, Play);\n\n var _this = _possibleConstructorReturn(this, (Play.__proto__ || _Object$getPrototypeOf(Play)).call(this, parent));\n\n _this.option = deepAssign(defaultOption, isObject(option) ? option : {});\n _this.animate = false;\n _this.init();\n return _this;\n }\n\n _createClass(Play, [{\n key: 'init',\n value: function init() {\n // 创建 html / 绑定事件\n _get(Play.prototype.__proto__ || _Object$getPrototypeOf(Play.prototype), 'create', this).call(this);\n this.$dom = $(this.$dom);\n this.$dom.addClass('chimee-flex-component');\n\n // 判断是否是默认或者用户提供 icon\n if (this.option.icon && this.option.icon.play && this.option.icon.pause) {\n this.$play = this.$dom.find('chimee-control-state-play');\n this.$pause = this.$dom.find('chimee-control-state-pause');\n this.$play.html(this.option.icon.play);\n this.$pause.html(this.option.icon.pause);\n } else if (!this.option.bitmap) {\n this.animate = true;\n this.option.animate.path = this.option.path ? this.option.path : this.option.animate.path;\n this.$dom.html(this.option.animate.icon);\n this.$left = this.$dom.find('.left');\n this.$right = this.$dom.find('.right');\n }\n this.changeState('pause');\n }\n }, {\n key: 'changeState',\n value: function changeState(state) {\n var nextState = state === 'play' ? 'pause' : 'play';\n this.state = state;\n addClassName(this.parent.$dom, nextState);\n removeClassName(this.parent.$dom, state);\n this.animate && this.setPath(nextState);\n }\n }, {\n key: 'setPath',\n value: function setPath(state) {\n var path = this.option.animate.path;\n if (state === 'play') {\n this.$left.attr('d', path.play.left);\n this.$right.attr('d', path.play.right);\n } else {\n this.$left.attr('d', path.pause.left);\n this.$right.attr('d', path.pause.right);\n }\n }\n }, {\n key: 'tap',\n value: function tap(e) {\n var nextState = this.state === 'play' ? 'pause' : 'play';\n this.changeState(nextState);\n this.parent.$emit(nextState);\n }\n }]);\n\n return Play;\n}(Base);\n\nvar _class$8;\n\nfunction _applyDecoratedDescriptor$7(target, property, decorators, descriptor, context) {\n var desc = {};\n Object['ke' + 'ys'](descriptor).forEach(function (key) {\n desc[key] = descriptor[key];\n });\n desc.enumerable = !!desc.enumerable;\n desc.configurable = !!desc.configurable;\n\n if ('value' in desc || desc.initializer) {\n desc.writable = true;\n }\n\n desc = decorators.slice().reverse().reduce(function (desc, decorator) {\n return decorator(target, property, desc) || desc;\n }, desc);\n\n if (context && desc.initializer !== void 0) {\n desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n desc.initializer = undefined;\n }\n\n if (desc.initializer === void 0) {\n Object['define' + 'Property'](target, property, desc);\n desc = null;\n }\n\n return desc;\n}\n\n/**\n * Screen 配置\n */\n\nvar defaultOption$1 = {\n tag: 'chimee-screen',\n html: '\\n \\n \\n \\n \\n \\n \\n ',\n defaultEvent: {\n tap: 'tap'\n }\n};\n\nvar Screen = (_class$8 = function (_Base) {\n _inherits(Screen, _Base);\n\n function Screen(parent, option) {\n _classCallCheck(this, Screen);\n\n var _this = _possibleConstructorReturn(this, (Screen.__proto__ || _Object$getPrototypeOf(Screen)).call(this, parent));\n\n _this.state = 'small';\n _this.option = deepAssign(defaultOption$1, isObject(option) ? option : {});\n _this.init();\n return _this;\n }\n\n _createClass(Screen, [{\n key: 'init',\n value: function init() {\n _get(Screen.prototype.__proto__ || _Object$getPrototypeOf(Screen.prototype), 'create', this).call(this);\n this.$dom = $(this.$dom);\n this.changeState(this.state);\n // addClassName(this.$dom, 'flex-item');\n this.$dom.addClass('chimee-flex-component');\n\n this.$full = this.$dom.find('chimee-screen-full');\n this.$small = this.$dom.find('chimee-screen-small');\n // 判断是否是默认或者用户提供 icon\n if (this.option.icon && this.option.icon.full && this.option.icon.small) {\n // if((!this.option.icon.play && this.option.icon.puase) || (this.option.icon.play && !this.option.icon.puase)) {\n // console.warn(`Please provide a play and pause icon!If you can't, we will use default icon!`);\n // }\n this.$full.html(this.option.icon.full);\n this.$small.html(this.option.icon.small);\n } else if (this.option.bitmap) {\n this.$full.html('');\n this.$small.html('');\n }\n }\n }, {\n key: 'changeState',\n value: function changeState(state) {\n var removeState = state === 'small' ? 'full' : 'small';\n addClassName(this.parent.$dom, state);\n removeClassName(this.parent.$dom, removeState);\n }\n }, {\n key: 'tap',\n value: function tap() {\n var full = false;\n if (this.state === 'small') {\n this.state = 'full';\n full = true;\n } else {\n this.state = 'small';\n full = false;\n }\n this.changeState(this.state);\n this.parent.$fullscreen(full, 'container');\n if (full) {\n this.watch_screen = this.parent.$watch('isFullscreen', this.screenChange);\n } else {\n this.watch_screen();\n }\n }\n }, {\n key: 'screenChange',\n value: function screenChange() {\n if (!this.parent.fullscreenElement) return;\n this.state = 'small';\n this.changeState('small');\n this.parent.$fullscreen(false, 'container');\n }\n }]);\n\n return Screen;\n}(Base), _applyDecoratedDescriptor$7(_class$8.prototype, 'screenChange', [autobind], _Object$getOwnPropertyDescriptor(_class$8.prototype, 'screenChange'), _class$8.prototype), _class$8);\n\nvar _class$9;\n\nfunction _applyDecoratedDescriptor$8(target, property, decorators, descriptor, context) {\n var desc = {};\n Object['ke' + 'ys'](descriptor).forEach(function (key) {\n desc[key] = descriptor[key];\n });\n desc.enumerable = !!desc.enumerable;\n desc.configurable = !!desc.configurable;\n\n if ('value' in desc || desc.initializer) {\n desc.writable = true;\n }\n\n desc = decorators.slice().reverse().reduce(function (desc, decorator) {\n return decorator(target, property, desc) || desc;\n }, desc);\n\n if (context && desc.initializer !== void 0) {\n desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n desc.initializer = undefined;\n }\n\n if (desc.initializer === void 0) {\n Object['define' + 'Property'](target, property, desc);\n desc = null;\n }\n\n return desc;\n}\n\nvar defaultOption$2 = {\n tag: 'chimee-progressbar',\n html: '\\n \\n \\n \\n \\n \\n '\n};\n\nvar ProgressBar = (_class$9 = function (_Base) {\n _inherits(ProgressBar, _Base);\n\n function ProgressBar(parent, option) {\n _classCallCheck(this, ProgressBar);\n\n var _this = _possibleConstructorReturn(this, (ProgressBar.__proto__ || _Object$getPrototypeOf(ProgressBar)).call(this, parent));\n\n _this.option = deepAssign(defaultOption$2, isObject(option) ? option : {});\n _this.visiable = option !== false;\n _this.init();\n return _this;\n }\n\n _createClass(ProgressBar, [{\n key: 'init',\n value: function init() {\n _get(ProgressBar.prototype.__proto__ || _Object$getPrototypeOf(ProgressBar.prototype), 'create', this).call(this);\n this.$dom = $(this.$dom);\n this.$buffer = this.$dom.find('chimee-progressbar-buffer');\n this.$all = this.$dom.find('chimee-progressbar-all');\n this.$ball = this.$dom.find('chimee-progressbar-ball');\n this.$dom.addClass('chimee-flex-component');\n\n // css 配置\n !this.visiable && this.$dom.css('visibility', 'hidden');\n this.addEvent();\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.removeEvent();\n // 解绑全屏监听事件\n this.watch_screen && this.watch_screen();\n _get(ProgressBar.prototype.__proto__ || _Object$getPrototypeOf(ProgressBar.prototype), 'destroy', this).call(this);\n }\n }, {\n key: 'addEvent',\n value: function addEvent$$1() {\n addDelegate$1(this.parent, 'chimee-progressbar', 'tap', this.tap);\n addDelegate$1(this.parent, 'chimee-progressbar', 'panstart', this.mousedown);\n }\n }, {\n key: 'removeEvent',\n value: function removeEvent$$1() {\n removeDelegate$1(this.parent, 'chimee-progressbar', 'tap', this.tap);\n removeDelegate$1(this.parent, 'chimee-progressbar', 'panstart', this.mousedown);\n }\n\n /**\n * 缓存进度条更新 progress 事件\n */\n\n }, {\n key: 'progress',\n value: function progress() {\n var buffer = 0;\n try {\n buffer = this.parent.buffered.end(0);\n } catch (e) {}\n var bufferWidth = buffer / this.parent.duration * 100 + '%';\n this.$buffer.css('width', bufferWidth);\n }\n\n /**\n * requestAnimationFrame 来更新进度条, timeupdate 事件\n */\n\n }, {\n key: 'update',\n value: function update() {\n var time = this._currentTime !== undefined ? this._currentTime : this.parent.currentTime;\n var timePer = time ? time / this.parent.duration : 0;\n this.$all.css('width', timePer * 100 + '%');\n }\n }, {\n key: 'tap',\n value: function tap(e) {\n this._currentTime = (e.clientX - this.$dom[0].offsetLeft) / this.$dom[0].offsetWidth * this.parent.duration;\n this.update();\n this.parent.currentTime = this._currentTime;\n this._currentTime = undefined;\n }\n }, {\n key: 'mousedown',\n value: function mousedown(e) {\n this._currentTime = (e.clientX - this.$dom[0].offsetLeft) / this.$dom[0].offsetWidth * this.parent.duration;\n this.startX = e.clientX;\n this.startTime = this._currentTime;\n addDelegate$1(this.parent, this.option.tag, 'panmove', this.draging);\n addDelegate$1(this.parent, this.option.tag, 'panend', this.dragEnd);\n }\n\n /**\n * 开始拖拽\n * @param {EventObject} e 鼠标事件\n */\n\n }, {\n key: 'draging',\n value: function draging(e) {\n this.endX = e.clientX;\n var dragTime = (this.endX - this.startX) / this.$dom[0].offsetWidth * this.parent.duration;\n var dragAfterTime = +(this.startTime + dragTime).toFixed(2);\n this._currentTime = dragAfterTime < 0 ? 0 : dragAfterTime > this.parent.duration ? this.parent.duration : dragAfterTime;\n this.update();\n }\n\n /**\n * 结束拖拽\n */\n\n }, {\n key: 'dragEnd',\n value: function dragEnd() {\n this.startX = 0;\n this.startTime = 0;\n this.parent.currentTime = this._currentTime;\n this._currentTime = undefined;\n removeDelegate$1(this.parent, this.option.tag, 'panmove', this.draging);\n removeDelegate$1(this.parent, this.option.tag, 'panend', this.dragEnd);\n }\n }]);\n\n return ProgressBar;\n}(Base), _applyDecoratedDescriptor$8(_class$9.prototype, 'tap', [autobind], _Object$getOwnPropertyDescriptor(_class$9.prototype, 'tap'), _class$9.prototype), _applyDecoratedDescriptor$8(_class$9.prototype, 'mousedown', [autobind], _Object$getOwnPropertyDescriptor(_class$9.prototype, 'mousedown'), _class$9.prototype), _applyDecoratedDescriptor$8(_class$9.prototype, 'draging', [autobind], _Object$getOwnPropertyDescriptor(_class$9.prototype, 'draging'), _class$9.prototype), _applyDecoratedDescriptor$8(_class$9.prototype, 'dragEnd', [autobind], _Object$getOwnPropertyDescriptor(_class$9.prototype, 'dragEnd'), _class$9.prototype), _class$9);\n\n/**\n * currentTime 配置\n */\n\nvar defaultOption$3 = {\n tag: 'chimee-current-time',\n html: '\\n 00:00\\n '\n};\n\nvar CurrentTime = function (_Base) {\n _inherits(CurrentTime, _Base);\n\n function CurrentTime(parent, option) {\n _classCallCheck(this, CurrentTime);\n\n var _this = _possibleConstructorReturn(this, (CurrentTime.__proto__ || _Object$getPrototypeOf(CurrentTime)).call(this, parent));\n\n _this.option = deepAssign(defaultOption$3, isObject(option) ? option : {});\n _this.init();\n return _this;\n }\n\n _createClass(CurrentTime, [{\n key: 'init',\n value: function init() {\n _get(CurrentTime.prototype.__proto__ || _Object$getPrototypeOf(CurrentTime.prototype), 'create', this).call(this);\n this.$dom = $(this.$dom);\n this.$dom.addClass('chimee-flex-component');\n }\n }, {\n key: 'updateCurrent',\n value: function updateCurrent() {\n this.$dom.text(formatTime(this.parent.currentTime));\n }\n }]);\n\n return CurrentTime;\n}(Base);\n\n/**\n * totalTime 配置\n */\n\nvar defaultOption$4 = {\n tag: 'chimee-total-time',\n html: '\\n 00:00\\n '\n};\n\nvar TotalTime = function (_Base) {\n _inherits(TotalTime, _Base);\n\n function TotalTime(parent, option) {\n _classCallCheck(this, TotalTime);\n\n var _this = _possibleConstructorReturn(this, (TotalTime.__proto__ || _Object$getPrototypeOf(TotalTime)).call(this, parent));\n\n _this.option = deepAssign(defaultOption$4, isObject(option) ? option : {});\n _this.init();\n return _this;\n }\n\n _createClass(TotalTime, [{\n key: 'init',\n value: function init() {\n _get(TotalTime.prototype.__proto__ || _Object$getPrototypeOf(TotalTime.prototype), 'create', this).call(this);\n this.$dom = $(this.$dom);\n this.$dom.addClass('chimee-flex-component');\n }\n }, {\n key: 'updateTotal',\n value: function updateTotal() {\n this.$dom.text(formatTime(this.parent.duration));\n }\n }]);\n\n return TotalTime;\n}(Base);\n\nfunction hundleChildren(plugin) {\n var childConfig = {};\n if (!plugin.$config.children) {\n childConfig = plugin.isLive ? {\n play: true, // 底部播放暂停按钮\n currentTime: false, // 播放时间\n progressBar: false, // 播放进度控制条\n totalTime: false, // 总时间\n screen: true // 全屏控制\n } : {\n play: true, // 底部播放暂停按钮\n currentTime: true, // 播放时间\n progressBar: true, // 播放进度控制条\n totalTime: true, // 总时间\n screen: true // 全屏控制\n };\n } else {\n childConfig = plugin.$config.children;\n }\n return childConfig;\n}\n\n/**\n * 1. 将所有的 ui component 输出到 html 结构中\n * 2. 为这些 component 绑定响应的事件\n * @param {*} dom 所有 ui 节点的子容器\n * @param {*} config 关于 ui 的一些列设置\n * @return {Array} 所有子节点\n */\n\nfunction createChild(plugin) {\n var childConfig = plugin.config.children = hundleChildren(plugin);\n var children = {};\n _Object$keys(childConfig).forEach(function (item) {\n switch (item) {\n case 'play':\n if (childConfig.play) {\n children.play = new Play(plugin, childConfig.play);\n }\n break;\n case 'currentTime':\n if (childConfig.currentTime) {\n children.currentTime = new CurrentTime(plugin, childConfig.currentTime);\n }\n break;\n case 'progressBar':\n children.progressBar = new ProgressBar(plugin, childConfig.progressBar);\n break;\n case 'totalTime':\n if (childConfig.totalTime) {\n children.totalTime = new TotalTime(plugin, childConfig.totalTime);\n }\n break;\n case 'screen':\n if (childConfig.screen) {\n children.screen = new Screen(plugin, childConfig.screen);\n }\n break;\n default:\n children[item] = new Component(plugin, childConfig[item]);\n break;\n }\n });\n\n return children;\n}\n\nvar majorColorStyle = '\\n .chimee-flex-component svg *{\\n fill: majorColor;\\n stroke: majorColor;\\n }\\n chimee-progressbar-all{\\n background: majorColor;\\n }\\n chimee-volume.chimee-flex-component chimee-volume-bar-all{\\n background: majorColor; \\n }\\n chimee-clarity-list li:hover,\\n chimee-clarity-list li.active {\\n color: majorColor;\\n }\\n';\n\nvar hoverColorStyle = '\\n .chimee-flex-component svg:hover *{\\n fill: hoverColor;\\n stroke: hoverColor;\\n }\\n';\n\n/**\n * 插件默认配置\n */\n\nvar defaultConfig$1 = {\n hideBarTime: 2000\n};\n\nvar barStatus = {\n timer: null,\n show: true\n};\n\nvar mobiControlbar = gestureFactory({\n name: 'chimeeMobiControlbar',\n el: 'chimee-control',\n data: {\n children: {},\n show: false\n },\n level: 99,\n operable: true,\n penetrate: false,\n create: function create() {\n this.environment = new uaParser().getResult();\n },\n init: function init(videoConfig) {\n if (videoConfig.controls) {\n this.show = true;\n videoConfig.controls = false;\n }\n var _this = this;\n applyDecorators(videoConfig, {\n controls: accessor({\n get: function get() {\n return _this.show;\n },\n set: function set(value) {\n _this.show = Boolean(value);\n _this._display();\n return false;\n }\n }, { preSet: true })\n }, { self: true });\n this.config = isObject(this.$config) ? deepAssign(defaultConfig$1, this.$config) : defaultConfig$1;\n this.$dom.innerHTML = '';\n this.$wrap = this.$dom.querySelector('chimee-control-wrap');\n\n this.events = {};\n this.children = createChild(this);\n this._setStyle();\n\n // 增加 window / document 的全局监听\n this._addGlobalEvent();\n\n // 监听全屏事件\n\n this.watch_fullscreen = this.$watch('isFullscreen', this._mousemove);\n },\n destroy: function destroy() {\n window.clearTimeout(barStatus.timer);\n barStatus.show = false;\n this._removeGlobalEvent();\n this.watch_fullscreen && this.watch_fullscreen();\n },\n inited: function inited() {\n for (var i in this.children) {\n this.children[i].inited && this.children[i].inited();\n }\n },\n\n events: {\n play: function play() {\n this.children.play && this.children.play.changeState('play');\n this._hideItself();\n },\n pause: function pause() {\n this.children.play && this.children.play.changeState('pause');\n this._showItself();\n },\n load: function load() {},\n durationchange: function durationchange() {\n this.children.totalTime && this.children.totalTime.updateTotal();\n },\n timeupdate: function timeupdate() {\n this._progressUpdate();\n },\n progress: function progress() {\n this.children.progressBar && this.children.progressBar.progress();\n },\n volumechange: function volumechange() {\n this.children.volume && this.children.volume.update();\n },\n tap: function tap(evt) {\n this._mousemove();\n },\n d_tap: function d_tap(evt) {\n !this.paused && this._mousemove();\n fireEvent(this, 'tap', evt.changedTouches[0]);\n },\n d_panstart: function d_panstart(evt) {\n !this.paused && this._mousemove();\n fireEvent(this, 'panstart', evt.changedTouches[0]);\n },\n d_panmove: function d_panmove(evt) {\n !this.paused && this._mousemove();\n fireEvent(this, 'panmove', evt.changedTouches[0]);\n },\n d_panend: function d_panend(evt) {\n !this.paused && this._mousemove();\n fireEvent(this, 'panend', evt.changedTouches[0]);\n }\n },\n methods: {\n _progressUpdate: function _progressUpdate() {\n this.children.progressBar && this.children.progressBar.update();\n this.children.currentTime && this.children.currentTime.updateCurrent();\n },\n _hideItself: function _hideItself() {\n var _this2 = this;\n\n window.clearTimeout(barStatus.timer);\n barStatus.timer = setTimeout(function () {\n var bottom = -_this2.$wrap.offsetHeight;\n setStyle(_this2.$wrap, {\n bottom: bottom + 'px'\n });\n setStyle(_this2.$dom, {\n visibility: 'hidden'\n });\n barStatus.show = false;\n _this2.$emit('barHide');\n }, this.config.hideBarTime);\n },\n _showItself: function _showItself() {\n window.clearTimeout(barStatus.timer);\n setStyle(this.$wrap, {\n bottom: '0'\n });\n setStyle(this.$dom, {\n visibility: 'visible'\n });\n !barStatus.show && this.$emit('barShow');\n barStatus.show = true;\n },\n _display: function _display() {\n var display = this.show ? 'block' : 'none';\n setStyle(this.$dom, {\n display: display\n });\n },\n _mousemove: function _mousemove(e) {\n if (this.paused) return;\n this._showItself();\n this._hideItself();\n },\n _setStyle: function _setStyle() {\n var css = '';\n css += this.config.majorColor ? majorColorStyle.replace(/majorColor/g, this.config.majorColor) : '';\n css += this.config.hoverColor ? hoverColorStyle.replace(/hoverColor/g, this.config.hoverColor) : '';\n var style = document.createElement('style');\n style.setAttribute('type', 'text/css');\n style.innerHTML = css;\n document.head.appendChild(style);\n },\n _weixinJSBridgeReady: function _weixinJSBridgeReady() {\n // console.log(this.environment.os === 'iOS', window.WeixinJSBridge)\n window.WeixinJSBridge && this.environment.os.name === 'iOS' && this.load();\n },\n\n // 增加一些全局事件监听\n _addGlobalEvent: function _addGlobalEvent() {\n addEvent(window, 'orientationchange', this._mousemove);\n addEvent(document, 'WeixinJSBridgeReady', this._weixinJSBridgeReady);\n },\n\n // 去除一些全局事件监听\n _removeGlobalEvent: function _removeGlobalEvent() {\n removeEvent(window, 'orientationchange', this._mousemove);\n removeEvent(document, 'WeixinJSBridgeReady', this._weixinJSBridgeReady);\n }\n }\n});\n\nvar playStr = \"\\n\";\n\nvar loadingStr = \"\";\n\nvar defaultConfig$2 = {\n errorTips: '加载失败,请刷新重试',\n icon: {\n loading: loadingStr,\n play: playStr\n },\n expectTime: 3e4 // 超过最长加载时间则报错\n};\n\nvar chimeeState = gestureFactory({\n name: 'chimeeState',\n el: '\\n \\n \\n \\n \\n \\n ',\n init: function init() {\n this.config = isObject(this.$config) ? deepAssign(defaultConfig$2, this.$config) : defaultConfig$2;\n this._addInnerHtml();\n },\n inited: function inited() {\n // 存在 src 并且 设置了 prelaod || autoplay 的情况下, 显示 loading\n this.src && (this.preload === 'auto' || this.preload === 'metadata' || this.preload === '' || this.autoplay === true) && this.showState('loading', true);\n },\n\n penetrate: true,\n operable: true,\n destroy: function destroy() {\n this.clearTimeout();\n },\n\n events: {\n pause: function pause() {\n this.showState('play', true);\n },\n play: function play() {\n this.showState('play', false);\n },\n loadedmetadata: function loadedmetadata() {\n this.playing();\n this.showState('play', true);\n },\n playing: function playing() {\n this.playing();\n },\n\n // loadstart () {\n // this.waiting();\n // },\n waiting: function waiting() {\n this.waiting();\n },\n\n // 卡顿(FLV|HLS加载异常待内部特供事件)\n // stalled () {\n // this.showLoading();\n // },\n timeupdate: function timeupdate() {\n this.clearTimeout();\n },\n panstart: function panstart(evt) {\n this.emit('state-panstart', evt);\n },\n panmove: function panmove(evt) {\n this.emit('state-panmove', evt);\n },\n panend: function panend(evt) {\n this.emit('state-panend', evt);\n },\n tap: function tap(evt) {\n this.emit('state-tap', evt);\n },\n d_tap: function d_tap(evt) {\n var playElem = this.$dom.querySelector('chimee-state-play');\n if (playElem.contains(evt.target)) {\n this.play();\n }\n }\n },\n methods: {\n playing: function playing() {\n this.clearTimeout();\n this.showState('loading', false);\n this.showState('error', false);\n },\n waiting: function waiting() {\n var _this = this;\n\n this.clearTimeout();\n // 加载超过30秒则超时显示异常\n this._timeout = setTimeout(function () {\n return _this.showState('error', true);\n }, this.config.expectTime);\n !this.paused && this.showState('loading', true);\n },\n clearTimeout: function (_clearTimeout) {\n function clearTimeout() {\n return _clearTimeout.apply(this, arguments);\n }\n\n clearTimeout.toString = function () {\n return _clearTimeout.toString();\n };\n\n return clearTimeout;\n }(function () {\n if (this._timeout) {\n clearTimeout(this._timeout);\n this._timeout = null;\n }\n }),\n showState: function showState(state, show) {\n show && this.emit('state-change', state);\n this.$dom.className = show ? state : '';\n },\n _addInnerHtml: function _addInnerHtml() {\n var dom = $(this.$dom);\n dom.find('chimee-state-loading').html(this.config.icon.loading);\n dom.find('chimee-state-play').html(this.config.icon.play);\n dom.find('chimee-state-error').html(this.config.errorTips);\n }\n }\n});\n\nfunction uiIsAvailable(defaultDisableUA, ua) {\n return defaultDisableUA.every(function (item) {\n return !ua.match(item);\n });\n}\n\nfunction reduceArray(arr1, arr2) {\n if (!isArray(arr2)) return arr1;\n var result = [];\n arr1.forEach(function (item) {\n if (arr2.indexOf(item) === -1) result.push(item);\n });\n return result;\n}\n\nvar DEFAULT_DISABLE_UA = [];\nvar innerPlugins = [mobiControlbar.name, chimeeState.name];\n\nChimee.install(mobiControlbar);\nChimee.install(chimeeState);\n\nfunction handlePlugins(config) {\n config.plugin = config.plugin || config.plugins;\n if (!isArray(config.plugin)) config.plugin = [];\n var configPluginNames = config.plugin.map(function (item) {\n return isObject(item) ? item.name : item;\n });\n innerPlugins.forEach(function (name) {\n if (configPluginNames.indexOf(name) > -1) return;\n config.plugin.push(name);\n });\n config.plugin = reduceArray(config.plugin, config.removeInnerPlugins);\n}\n\nvar ChimeeMobilePlayer = function (_Chimee) {\n _inherits(ChimeeMobilePlayer, _Chimee);\n\n function ChimeeMobilePlayer(config) {\n _classCallCheck(this, ChimeeMobilePlayer);\n\n if (!isObject(config)) throw new TypeError('You must pass an Object as config when you new ChimeePlayer');\n var defaultDisableUA = config.disableUA === undefined ? DEFAULT_DISABLE_UA : config.disableUA;\n var isUIAvailable = uiIsAvailable(defaultDisableUA, window.navigator.userAgent);\n\n // 添加UI插件\n if (isUIAvailable) handlePlugins(config);\n\n config.box = config.box === undefined ? 'native' : config.box;\n\n var _this = _possibleConstructorReturn(this, (ChimeeMobilePlayer.__proto__ || _Object$getPrototypeOf(ChimeeMobilePlayer)).call(this, config));\n\n _this.hlsWarn(_this.box);\n _this.ready.then(function () {\n _this.$watch('box', function (box) {\n return _this.hlsWarn(box);\n });\n });\n return _this;\n }\n\n _createClass(ChimeeMobilePlayer, [{\n key: 'hlsWarn',\n value: function hlsWarn(box) {\n if (box === 'hls') {\n Log.warn('chimee-mobile-player', 'Mobile support m3u8, you do not need to use hls box. See more https://github.com/Chimeejs/chimee-mobile-player/blob/master/README.md#%E4%B8%BA%E4%BB%80%E4%B9%88%E7%A7%BB%E5%8A%A8%E7%AB%AF%E4%B8%8D%E8%83%BD%E6%92%AD%E6%94%BE-m3u8-%E7%9B%B4%E6%92%AD%E6%B5%81');\n }\n }\n }]);\n\n return ChimeeMobilePlayer;\n}(Chimee);\n// 暴露手势工厂方法\n\n\nChimeeMobilePlayer.gestureFactory = gestureFactory;\n\nreturn ChimeeMobilePlayer;\n\n})));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/chimee-mobile-player/lib/chimee-mobile-player.browser.js\n// module id = Dukh\n// module chunks = 0","'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/core/createError.js\n// module id = FtD3\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/helpers/isURLSameOrigin.js\n// module id = GHBc\n// module chunks = 0","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/helpers/bind.js\n// module id = JP+z\n// module chunks = 0","'use strict';\n\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('./adapters/xhr');\n } else if (typeof process !== 'undefined') {\n // For node use HTTP adapter\n adapter = require('./adapters/http');\n }\n return adapter;\n}\n\nvar defaults = {\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Content-Type');\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n if (utils.isObject(data)) {\n setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\n\ndefaults.headers = {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/defaults.js\n// module id = KCLY\n// module chunks = 0","module.exports =\n/******/ (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\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// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\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 = 230);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ function(module, exports) {\n\n/* globals __VUE_SSR_CONTEXT__ */\n\n// this module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle\n\nmodule.exports = function normalizeComponent (\n rawScriptExports,\n compiledTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier /* server only */\n) {\n var esModule\n var scriptExports = rawScriptExports = rawScriptExports || {}\n\n // ES6 modules interop\n var type = typeof rawScriptExports.default\n if (type === 'object' || type === 'function') {\n esModule = rawScriptExports\n scriptExports = rawScriptExports.default\n }\n\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (compiledTemplate) {\n options.render = compiledTemplate.render\n options.staticRenderFns = compiledTemplate.staticRenderFns\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = injectStyles\n }\n\n if (hook) {\n var functional = options.functional\n var existing = functional\n ? options.render\n : options.beforeCreate\n if (!functional) {\n // inject component registration as beforeCreate hook\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n } else {\n // register for functioal component in vue file\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return existing(h, context)\n }\n }\n }\n\n return {\n esModule: esModule,\n exports: scriptExports,\n options: options\n }\n}\n\n\n/***/ },\n\n/***/ 100:\n/***/ function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ },\n\n/***/ 149:\n/***/ function(module, exports, __webpack_require__) {\n\nfunction injectStyle (ssrContext) {\n __webpack_require__(100)\n}\nvar Component = __webpack_require__(0)(\n /* script */\n __webpack_require__(71),\n /* template */\n __webpack_require__(169),\n /* styles */\n injectStyle,\n /* scopeId */\n null,\n /* moduleIdentifier (server only) */\n null\n)\n\nmodule.exports = Component.exports\n\n\n/***/ },\n\n/***/ 169:\n/***/ function(module, exports) {\n\nmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('div', {\n staticClass: \"mt-progress\"\n }, [_vm._t(\"start\"), _vm._v(\" \"), _c('div', {\n staticClass: \"mt-progress-content\"\n }, [_c('div', {\n staticClass: \"mt-progress-runway\",\n style: ({\n height: _vm.barHeight + 'px'\n })\n }), _vm._v(\" \"), _c('div', {\n staticClass: \"mt-progress-progress\",\n style: ({\n width: _vm.value + '%',\n height: _vm.barHeight + 'px'\n })\n })]), _vm._v(\" \"), _vm._t(\"end\")], 2)\n},staticRenderFns: []}\n\n/***/ },\n\n/***/ 230:\n/***/ function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(38);\n\n\n/***/ },\n\n/***/ 38:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_progress_vue__ = __webpack_require__(149);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_progress_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__src_progress_vue__);\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/* harmony reexport (default from non-hamory) */ __webpack_require__.d(exports, \"default\", function() { return __WEBPACK_IMPORTED_MODULE_0__src_progress_vue___default.a; });\n\n\n\n/***/ },\n\n/***/ 71:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\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//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ exports[\"default\"] = {\n name: 'mt-progress',\n\n props: {\n value: Number,\n barHeight: {\n type: Number,\n default: 3\n }\n }\n};\n\n\n/***/ }\n\n/******/ });\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/mint-ui/lib/progress/index.js\n// module id = PJK7\n// module chunks = 0","/*!\n * Determine if an object is a Buffer\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nmodule.exports = function (obj) {\n return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)\n}\n\nfunction isBuffer (obj) {\n return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/is-buffer/index.js\n// module id = Re3r\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn(data, headers);\n });\n\n return data;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/core/transformData.js\n// module id = TNV1\n// module chunks = 0","/*!\n * clipboard.js v2.0.1\n * https://zenorocha.github.io/clipboard.js\n * \n * Licensed MIT © Zeno Rocha\n */\n!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return function(t){function e(o){if(n[o])return n[o].exports;var r=n[o]={i:o,l:!1,exports:{}};return t[o].call(r.exports,r,r.exports,e),r.l=!0,r.exports}var n={};return e.m=t,e.c=n,e.i=function(t){return t},e.d=function(t,n,o){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:o})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,\"a\",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p=\"\",e(e.s=3)}([function(t,e,n){var o,r,i;!function(a,c){r=[t,n(7)],o=c,void 0!==(i=\"function\"==typeof o?o.apply(e,r):o)&&(t.exports=i)}(0,function(t,e){\"use strict\";function n(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}var o=function(t){return t&&t.__esModule?t:{default:t}}(e),r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},i=function(){function t(t,e){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.container=t.container,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=\"\"}},{key:\"initSelection\",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:\"selectFake\",value:function(){var t=this,e=\"rtl\"==document.documentElement.getAttribute(\"dir\");this.removeFake(),this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=this.container.addEventListener(\"click\",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement(\"textarea\"),this.fakeElem.style.fontSize=\"12pt\",this.fakeElem.style.border=\"0\",this.fakeElem.style.padding=\"0\",this.fakeElem.style.margin=\"0\",this.fakeElem.style.position=\"absolute\",this.fakeElem.style[e?\"right\":\"left\"]=\"-9999px\";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+\"px\",this.fakeElem.setAttribute(\"readonly\",\"\"),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=(0,o.default)(this.fakeElem),this.copyText()}},{key:\"removeFake\",value:function(){this.fakeHandler&&(this.container.removeEventListener(\"click\",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:\"selectTarget\",value:function(){this.selectedText=(0,o.default)(this.target),this.copyText()}},{key:\"copyText\",value:function(){var t=void 0;try{t=document.execCommand(this.action)}catch(e){t=!1}this.handleResult(t)}},{key:\"handleResult\",value:function(t){this.emitter.emit(t?\"success\":\"error\",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:\"clearSelection\",value:function(){this.trigger&&this.trigger.focus(),window.getSelection().removeAllRanges()}},{key:\"destroy\",value:function(){this.removeFake()}},{key:\"action\",set:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"copy\";if(this._action=t,\"copy\"!==this._action&&\"cut\"!==this._action)throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"')},get:function(){return this._action}},{key:\"target\",set:function(t){if(void 0!==t){if(!t||\"object\"!==(void 0===t?\"undefined\":r(t))||1!==t.nodeType)throw new Error('Invalid \"target\" value, use a valid Element');if(\"copy\"===this.action&&t.hasAttribute(\"disabled\"))throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');if(\"cut\"===this.action&&(t.hasAttribute(\"readonly\")||t.hasAttribute(\"disabled\")))throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');this._target=t}},get:function(){return this._target}}]),t}();t.exports=a})},function(t,e,n){function o(t,e,n){if(!t&&!e&&!n)throw new Error(\"Missing required arguments\");if(!c.string(e))throw new TypeError(\"Second argument must be a String\");if(!c.fn(n))throw new TypeError(\"Third argument must be a Function\");if(c.node(t))return r(t,e,n);if(c.nodeList(t))return i(t,e,n);if(c.string(t))return a(t,e,n);throw new TypeError(\"First argument must be a String, HTMLElement, HTMLCollection, or NodeList\")}function r(t,e,n){return t.addEventListener(e,n),{destroy:function(){t.removeEventListener(e,n)}}}function i(t,e,n){return Array.prototype.forEach.call(t,function(t){t.addEventListener(e,n)}),{destroy:function(){Array.prototype.forEach.call(t,function(t){t.removeEventListener(e,n)})}}}function a(t,e,n){return u(document.body,t,e,n)}var c=n(6),u=n(5);t.exports=o},function(t,e){function n(){}n.prototype={on:function(t,e,n){var o=this.e||(this.e={});return(o[t]||(o[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){function o(){r.off(t,o),e.apply(n,arguments)}var r=this;return o._=e,this.on(t,o,n)},emit:function(t){var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),o=0,r=n.length;for(o;o0&&void 0!==arguments[0]?arguments[0]:{};this.action=\"function\"==typeof t.action?t.action:this.defaultAction,this.target=\"function\"==typeof t.target?t.target:this.defaultTarget,this.text=\"function\"==typeof t.text?t.text:this.defaultText,this.container=\"object\"===d(t.container)?t.container:document.body}},{key:\"listenClick\",value:function(t){var e=this;this.listener=(0,f.default)(t,\"click\",function(t){return e.onClick(t)})}},{key:\"onClick\",value:function(t){var e=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new l.default({action:this.action(e),target:this.target(e),text:this.text(e),container:this.container,trigger:e,emitter:this})}},{key:\"defaultAction\",value:function(t){return u(\"action\",t)}},{key:\"defaultTarget\",value:function(t){var e=u(\"target\",t);if(e)return document.querySelector(e)}},{key:\"defaultText\",value:function(t){return u(\"text\",t)}},{key:\"destroy\",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:\"isSupported\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[\"copy\",\"cut\"],e=\"string\"==typeof t?[t]:t,n=!!document.queryCommandSupported;return e.forEach(function(t){n=n&&!!document.queryCommandSupported(t)}),n}}]),e}(s.default);t.exports=p})},function(t,e){function n(t,e){for(;t&&t.nodeType!==o;){if(\"function\"==typeof t.matches&&t.matches(e))return t;t=t.parentNode}}var o=9;if(\"undefined\"!=typeof Element&&!Element.prototype.matches){var r=Element.prototype;r.matches=r.matchesSelector||r.mozMatchesSelector||r.msMatchesSelector||r.oMatchesSelector||r.webkitMatchesSelector}t.exports=n},function(t,e,n){function o(t,e,n,o,r){var a=i.apply(this,arguments);return t.addEventListener(n,a,r),{destroy:function(){t.removeEventListener(n,a,r)}}}function r(t,e,n,r,i){return\"function\"==typeof t.addEventListener?o.apply(null,arguments):\"function\"==typeof n?o.bind(null,document).apply(null,arguments):(\"string\"==typeof t&&(t=document.querySelectorAll(t)),Array.prototype.map.call(t,function(t){return o(t,e,n,r,i)}))}function i(t,e,n,o){return function(n){n.delegateTarget=a(n.target,e),n.delegateTarget&&o.call(t,n)}}var a=n(4);t.exports=r},function(t,e){e.node=function(t){return void 0!==t&&t instanceof HTMLElement&&1===t.nodeType},e.nodeList=function(t){var n=Object.prototype.toString.call(t);return void 0!==t&&(\"[object NodeList]\"===n||\"[object HTMLCollection]\"===n)&&\"length\"in t&&(0===t.length||e.node(t[0]))},e.string=function(t){return\"string\"==typeof t||t instanceof String},e.fn=function(t){return\"[object Function]\"===Object.prototype.toString.call(t)}},function(t,e){function n(t){var e;if(\"SELECT\"===t.nodeName)t.focus(),e=t.value;else if(\"INPUT\"===t.nodeName||\"TEXTAREA\"===t.nodeName){var n=t.hasAttribute(\"readonly\");n||t.setAttribute(\"readonly\",\"\"),t.select(),t.setSelectionRange(0,t.value.length),n||t.removeAttribute(\"readonly\"),e=t.value}else{t.hasAttribute(\"contenteditable\")&&t.focus();var o=window.getSelection(),r=document.createRange();r.selectNodeContents(t),o.removeAllRanges(),o.addRange(r),e=o.toString()}return e}t.exports=n}])});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/clipboard/dist/clipboard.min.js\n// module id = W1rN\n// module chunks = 0","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/process/browser.js\n// module id = W2nU\n// module chunks = 0","'use strict';\n\nvar defaults = require('./../defaults');\nvar utils = require('./../utils');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = utils.merge({\n url: arguments[0]\n }, arguments[1]);\n }\n\n config = utils.merge(defaults, this.defaults, { method: 'get' }, config);\n config.method = config.method.toLowerCase();\n\n // Hook up interceptors middleware\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\n\nmodule.exports = Axios;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/core/Axios.js\n// module id = XmWM\n// module chunks = 0","module.exports =\n/******/ (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\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// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\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 = 216);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ function(module, exports) {\n\n/* globals __VUE_SSR_CONTEXT__ */\n\n// this module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle\n\nmodule.exports = function normalizeComponent (\n rawScriptExports,\n compiledTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier /* server only */\n) {\n var esModule\n var scriptExports = rawScriptExports = rawScriptExports || {}\n\n // ES6 modules interop\n var type = typeof rawScriptExports.default\n if (type === 'object' || type === 'function') {\n esModule = rawScriptExports\n scriptExports = rawScriptExports.default\n }\n\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (compiledTemplate) {\n options.render = compiledTemplate.render\n options.staticRenderFns = compiledTemplate.staticRenderFns\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = injectStyles\n }\n\n if (hook) {\n var functional = options.functional\n var existing = functional\n ? options.render\n : options.beforeCreate\n if (!functional) {\n // inject component registration as beforeCreate hook\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n } else {\n // register for functioal component in vue file\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return existing(h, context)\n }\n }\n }\n\n return {\n esModule: esModule,\n exports: scriptExports,\n options: options\n }\n}\n\n\n/***/ },\n\n/***/ 119:\n/***/ function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ },\n\n/***/ 12:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\n * v-clickoutside\n * @desc 点击元素外面才会触发的事件\n * @example\n * ```vue\n * \n * ```\n */\nvar clickoutsideContext = '@@clickoutsideContext';\n\n/* harmony default export */ exports[\"a\"] = {\n bind: function bind(el, binding, vnode) {\n var documentHandler = function(e) {\n if (vnode.context && !el.contains(e.target)) {\n vnode.context[el[clickoutsideContext].methodName]();\n }\n };\n el[clickoutsideContext] = {\n documentHandler: documentHandler,\n methodName: binding.expression,\n arg: binding.arg || 'click'\n };\n document.addEventListener(el[clickoutsideContext].arg, documentHandler);\n },\n\n update: function update(el, binding) {\n el[clickoutsideContext].methodName = binding.expression;\n },\n\n unbind: function unbind(el) {\n document.removeEventListener(\n el[clickoutsideContext].arg,\n el[clickoutsideContext].documentHandler);\n },\n\n install: function install(Vue) {\n Vue.directive('clickoutside', {\n bind: this.bind,\n unbind: this.unbind\n });\n }\n};\n\n\n/***/ },\n\n/***/ 137:\n/***/ function(module, exports, __webpack_require__) {\n\nfunction injectStyle (ssrContext) {\n __webpack_require__(119)\n}\nvar Component = __webpack_require__(0)(\n /* script */\n __webpack_require__(59),\n /* template */\n __webpack_require__(188),\n /* styles */\n injectStyle,\n /* scopeId */\n null,\n /* moduleIdentifier (server only) */\n null\n)\n\nmodule.exports = Component.exports\n\n\n/***/ },\n\n/***/ 188:\n/***/ function(module, exports) {\n\nmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('x-cell', {\n directives: [{\n name: \"clickoutside\",\n rawName: \"v-clickoutside\",\n value: (_vm.doCloseActive),\n expression: \"doCloseActive\"\n }],\n staticClass: \"mint-field\",\n class: [{\n 'is-textarea': _vm.type === 'textarea',\n 'is-nolabel': !_vm.label\n }],\n attrs: {\n \"title\": _vm.label\n }\n }, [(_vm.type === 'textarea') ? _c('textarea', {\n directives: [{\n name: \"model\",\n rawName: \"v-model\",\n value: (_vm.currentValue),\n expression: \"currentValue\"\n }],\n ref: \"textarea\",\n staticClass: \"mint-field-core\",\n attrs: {\n \"placeholder\": _vm.placeholder,\n \"rows\": _vm.rows,\n \"disabled\": _vm.disabled,\n \"readonly\": _vm.readonly\n },\n domProps: {\n \"value\": (_vm.currentValue)\n },\n on: {\n \"change\": function($event) {\n _vm.$emit('change', _vm.currentValue)\n },\n \"input\": function($event) {\n if ($event.target.composing) { return; }\n _vm.currentValue = $event.target.value\n }\n }\n }) : _c('input', {\n ref: \"input\",\n staticClass: \"mint-field-core\",\n attrs: {\n \"placeholder\": _vm.placeholder,\n \"number\": _vm.type === 'number',\n \"type\": _vm.type,\n \"disabled\": _vm.disabled,\n \"readonly\": _vm.readonly\n },\n domProps: {\n \"value\": _vm.currentValue\n },\n on: {\n \"change\": function($event) {\n _vm.$emit('change', _vm.currentValue)\n },\n \"focus\": function($event) {\n _vm.active = true\n },\n \"input\": _vm.handleInput\n }\n }), _vm._v(\" \"), (!_vm.disableClear) ? _c('div', {\n directives: [{\n name: \"show\",\n rawName: \"v-show\",\n value: (_vm.currentValue && _vm.type !== 'textarea' && _vm.active),\n expression: \"currentValue && type !== 'textarea' && active\"\n }],\n staticClass: \"mint-field-clear\",\n on: {\n \"click\": _vm.handleClear\n }\n }, [_c('i', {\n staticClass: \"mintui mintui-field-error\"\n })]) : _vm._e(), _vm._v(\" \"), (_vm.state) ? _c('span', {\n staticClass: \"mint-field-state\",\n class: ['is-' + _vm.state]\n }, [_c('i', {\n staticClass: \"mintui\",\n class: ['mintui-field-' + _vm.state]\n })]) : _vm._e(), _vm._v(\" \"), _c('div', {\n staticClass: \"mint-field-other\"\n }, [_vm._t(\"default\")], 2)])\n},staticRenderFns: []}\n\n/***/ },\n\n/***/ 216:\n/***/ function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(25);\n\n\n/***/ },\n\n/***/ 25:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_field_vue__ = __webpack_require__(137);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_field_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__src_field_vue__);\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/* harmony reexport (default from non-hamory) */ __webpack_require__.d(exports, \"default\", function() { return __WEBPACK_IMPORTED_MODULE_0__src_field_vue___default.a; });\n\n\n\n/***/ },\n\n/***/ 3:\n/***/ function(module, exports) {\n\nmodule.exports = require(\"mint-ui/lib/cell\");\n\n/***/ },\n\n/***/ 4:\n/***/ function(module, exports) {\n\nmodule.exports = require(\"mint-ui/lib/cell/style.css\");\n\n/***/ },\n\n/***/ 59:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_mint_ui_packages_cell_index_js__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_mint_ui_packages_cell_index_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_mint_ui_packages_cell_index_js__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_mint_ui_src_utils_clickoutside__ = __webpack_require__(12);\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//\n//\n//\n\n\n\nif (true) {\n __webpack_require__(4);\n}\n\n/**\n * mt-field\n * @desc 编辑器,依赖 cell\n * @module components/field\n *\n * @param {string} [type=text] - field 类型,接受 text, textarea 等\n * @param {string} [label] - 标签\n * @param {string} [rows] - textarea 的 rows\n * @param {string} [placeholder] - placeholder\n * @param {string} [disabled] - disabled\n * @param {string} [readonly] - readonly\n * @param {string} [state] - 表单校验状态样式,接受 error, warning, success\n *\n * @example\n *
\n *
\n *
\n *
\n */\n/* harmony default export */ exports[\"default\"] = {\n name: 'mt-field',\n\n data: function data() {\n return {\n active: false,\n currentValue: this.value\n };\n },\n\n directives: {\n Clickoutside: __WEBPACK_IMPORTED_MODULE_1_mint_ui_src_utils_clickoutside__[\"a\" /* default */]\n },\n\n props: {\n type: {\n type: String,\n default: 'text'\n },\n rows: String,\n label: String,\n placeholder: String,\n readonly: Boolean,\n disabled: Boolean,\n disableClear: Boolean,\n state: {\n type: String,\n default: 'default'\n },\n value: {},\n attr: Object\n },\n\n components: { XCell: __WEBPACK_IMPORTED_MODULE_0_mint_ui_packages_cell_index_js___default.a },\n\n methods: {\n doCloseActive: function doCloseActive() {\n this.active = false;\n },\n\n handleInput: function handleInput(evt) {\n this.currentValue = evt.target.value;\n },\n\n handleClear: function handleClear() {\n if (this.disabled || this.readonly) return;\n this.currentValue = '';\n }\n },\n\n watch: {\n value: function value(val) {\n this.currentValue = val;\n },\n\n currentValue: function currentValue(val) {\n this.$emit('input', val);\n },\n\n attr: {\n immediate: true,\n handler: function handler(attrs) {\n var this$1 = this;\n\n this.$nextTick(function () {\n var target = [this$1.$refs.input, this$1.$refs.textarea];\n target.forEach(function (el) {\n if (!el || !attrs) return;\n Object.keys(attrs).map(function (name) { return el.setAttribute(name, attrs[name]); });\n });\n });\n }\n }\n }\n};\n\n\n/***/ }\n\n/******/ });\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/mint-ui/lib/field/index.js\n// module id = ZQVe\n// module chunks = 0","module.exports =\n/******/ (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\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// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\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 = 222);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 1:\n/***/ function(module, exports) {\n\nmodule.exports = require(\"vue\");\n\n/***/ },\n\n/***/ 222:\n/***/ function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(30);\n\n\n/***/ },\n\n/***/ 30:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_mint_ui_src_style_empty_css__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_mint_ui_src_style_empty_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_mint_ui_src_style_empty_css__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_infinite_scroll_js__ = __webpack_require__(88);\n/* harmony reexport (binding) */ __webpack_require__.d(exports, \"default\", function() { return __WEBPACK_IMPORTED_MODULE_1__src_infinite_scroll_js__[\"a\"]; });\n\n\n\n\n/***/ },\n\n/***/ 5:\n/***/ function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ },\n\n/***/ 87:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_vue__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_vue__);\n\nvar ctx = '@@InfiniteScroll';\n\nvar throttle = function(fn, delay) {\n var now, lastExec, timer, context, args; //eslint-disable-line\n\n var execute = function() {\n fn.apply(context, args);\n lastExec = now;\n };\n\n return function() {\n context = this;\n args = arguments;\n\n now = Date.now();\n\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n\n if (lastExec) {\n var diff = delay - (now - lastExec);\n if (diff < 0) {\n execute();\n } else {\n timer = setTimeout(function () {\n execute();\n }, diff);\n }\n } else {\n execute();\n }\n };\n};\n\nvar getScrollTop = function(element) {\n if (element === window) {\n return Math.max(window.pageYOffset || 0, document.documentElement.scrollTop);\n }\n\n return element.scrollTop;\n};\n\nvar getComputedStyle = __WEBPACK_IMPORTED_MODULE_0_vue___default.a.prototype.$isServer ? {} : document.defaultView.getComputedStyle;\n\nvar getScrollEventTarget = function(element) {\n var currentNode = element;\n // bugfix, see http://w3help.org/zh-cn/causes/SD9013 and http://stackoverflow.com/questions/17016740/onscroll-function-is-not-working-for-chrome\n while (currentNode && currentNode.tagName !== 'HTML' && currentNode.tagName !== 'BODY' && currentNode.nodeType === 1) {\n var overflowY = getComputedStyle(currentNode).overflowY;\n if (overflowY === 'scroll' || overflowY === 'auto') {\n return currentNode;\n }\n currentNode = currentNode.parentNode;\n }\n return window;\n};\n\nvar getVisibleHeight = function(element) {\n if (element === window) {\n return document.documentElement.clientHeight;\n }\n\n return element.clientHeight;\n};\n\nvar getElementTop = function(element) {\n if (element === window) {\n return getScrollTop(window);\n }\n return element.getBoundingClientRect().top + getScrollTop(window);\n};\n\nvar isAttached = function(element) {\n var currentNode = element.parentNode;\n while (currentNode) {\n if (currentNode.tagName === 'HTML') {\n return true;\n }\n if (currentNode.nodeType === 11) {\n return false;\n }\n currentNode = currentNode.parentNode;\n }\n return false;\n};\n\nvar doBind = function() {\n if (this.binded) return; // eslint-disable-line\n this.binded = true;\n\n var directive = this;\n var element = directive.el;\n\n directive.scrollEventTarget = getScrollEventTarget(element);\n directive.scrollListener = throttle(doCheck.bind(directive), 200);\n directive.scrollEventTarget.addEventListener('scroll', directive.scrollListener);\n\n var disabledExpr = element.getAttribute('infinite-scroll-disabled');\n var disabled = false;\n\n if (disabledExpr) {\n this.vm.$watch(disabledExpr, function(value) {\n directive.disabled = value;\n if (!value && directive.immediateCheck) {\n doCheck.call(directive);\n }\n });\n disabled = Boolean(directive.vm[disabledExpr]);\n }\n directive.disabled = disabled;\n\n var distanceExpr = element.getAttribute('infinite-scroll-distance');\n var distance = 0;\n if (distanceExpr) {\n distance = Number(directive.vm[distanceExpr] || distanceExpr);\n if (isNaN(distance)) {\n distance = 0;\n }\n }\n directive.distance = distance;\n\n var immediateCheckExpr = element.getAttribute('infinite-scroll-immediate-check');\n var immediateCheck = true;\n if (immediateCheckExpr) {\n immediateCheck = Boolean(directive.vm[immediateCheckExpr]);\n }\n directive.immediateCheck = immediateCheck;\n\n if (immediateCheck) {\n doCheck.call(directive);\n }\n\n var eventName = element.getAttribute('infinite-scroll-listen-for-event');\n if (eventName) {\n directive.vm.$on(eventName, function() {\n doCheck.call(directive);\n });\n }\n};\n\nvar doCheck = function(force) {\n var scrollEventTarget = this.scrollEventTarget;\n var element = this.el;\n var distance = this.distance;\n\n if (force !== true && this.disabled) return; //eslint-disable-line\n var viewportScrollTop = getScrollTop(scrollEventTarget);\n var viewportBottom = viewportScrollTop + getVisibleHeight(scrollEventTarget);\n\n var shouldTrigger = false;\n\n if (scrollEventTarget === element) {\n shouldTrigger = scrollEventTarget.scrollHeight - viewportBottom <= distance;\n } else {\n var elementBottom = getElementTop(element) - getElementTop(scrollEventTarget) + element.offsetHeight + viewportScrollTop;\n\n shouldTrigger = viewportBottom + distance >= elementBottom;\n }\n\n if (shouldTrigger && this.expression) {\n this.expression();\n }\n};\n\n/* harmony default export */ exports[\"a\"] = {\n bind: function bind(el, binding, vnode) {\n el[ctx] = {\n el: el,\n vm: vnode.context,\n expression: binding.value\n };\n var args = arguments;\n var cb = function() {\n el[ctx].vm.$nextTick(function() {\n if (isAttached(el)) {\n doBind.call(el[ctx], args);\n }\n\n el[ctx].bindTryCount = 0;\n\n var tryBind = function() {\n if (el[ctx].bindTryCount > 10) return; //eslint-disable-line\n el[ctx].bindTryCount++;\n if (isAttached(el)) {\n doBind.call(el[ctx], args);\n } else {\n setTimeout(tryBind, 50);\n }\n };\n\n tryBind();\n });\n };\n if (el[ctx].vm._isMounted) {\n cb();\n return;\n }\n el[ctx].vm.$on('hook:mounted', cb);\n },\n\n unbind: function unbind(el) {\n if (el[ctx] && el[ctx].scrollEventTarget) {\n el[ctx].scrollEventTarget.removeEventListener('scroll', el[ctx].scrollListener);\n }\n }\n};\n\n\n/***/ },\n\n/***/ 88:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__directive__ = __webpack_require__(87);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_mint_ui_src_style_empty_css__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_mint_ui_src_style_empty_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_mint_ui_src_style_empty_css__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_vue__);\n\n\n\n\nvar install = function(Vue) {\n Vue.directive('InfiniteScroll', __WEBPACK_IMPORTED_MODULE_0__directive__[\"a\" /* default */]);\n};\n\nif (!__WEBPACK_IMPORTED_MODULE_2_vue___default.a.prototype.$isServer && window.Vue) {\n window.infiniteScroll = __WEBPACK_IMPORTED_MODULE_0__directive__[\"a\" /* default */];\n __WEBPACK_IMPORTED_MODULE_2_vue___default.a.use(install); // eslint-disable-line\n}\n\n__WEBPACK_IMPORTED_MODULE_0__directive__[\"a\" /* default */].install = install;\n/* harmony default export */ exports[\"a\"] = __WEBPACK_IMPORTED_MODULE_0__directive__[\"a\" /* default */];\n\n\n/***/ }\n\n/******/ });\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/mint-ui/lib/infinite-scroll/index.js\n// module id = bCKv\n// module chunks = 0","'use strict';\n\nvar bind = require('./helpers/bind');\nvar isBuffer = require('is-buffer');\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = merge(result[key], val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/utils.js\n// module id = cGG2\n// module chunks = 0","/*!\n * Vue-Lazyload.js v1.2.6\n * (c) 2018 Awe
\n * Released under the MIT License.\n */\n!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):t.VueLazyload=e()}(this,function(){\"use strict\";function t(t){return t.constructor&&\"function\"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}function e(t){t=t||{};var e=arguments.length,i=0;if(1===e)return t;for(;++i-1?t.splice(n,1):void 0}}function a(t,e){for(var n=!1,r=0,i=t.length;re[0])return 1;if(t[0]===e[0]){if(-1!==e[1].indexOf(\".webp\",e[1].length-5))return 1;if(-1!==t[1].indexOf(\".webp\",t[1].length-5))return-1}return 0});for(var l=\"\",d=void 0,c=r.length,h=0;h=o){l=d[1];break}return l}}function u(t,e){for(var n=void 0,r=0,i=t.length;r=e?s():n=setTimeout(s,e)}}}function c(t){return null!==t&&\"object\"===(void 0===t?\"undefined\":p(t))}function h(t){if(!(t instanceof Object))return[];if(Object.keys)return Object.keys(t);var e=[];for(var n in t)t.hasOwnProperty(n)&&e.push(n);return e}function f(t){for(var e=t.length,n=[],r=0;r0&&void 0!==arguments[0]?arguments[0]:1;return E?window.devicePixelRatio||t:t},T=function(){if(E){var t=!1;try{var e=Object.defineProperty({},\"passive\",{get:function(){t=!0}});window.addEventListener(\"test\",null,e)}catch(t){}return t}}(),S={on:function(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];T?t.addEventListener(e,n,{capture:r,passive:!0}):t.addEventListener(e,n,r)},off:function(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];t.removeEventListener(e,n,r)}},I=function(t,e,n){var r=new Image;r.src=t.src,r.onload=function(){e({naturalHeight:r.naturalHeight,naturalWidth:r.naturalWidth,src:r.src})},r.onerror=function(t){n(t)}},O=function(t,e){return\"undefined\"!=typeof getComputedStyle?getComputedStyle(t,null).getPropertyValue(e):t.style[e]},$=function(t){return O(t,\"overflow\")+O(t,\"overflow-y\")+O(t,\"overflow-x\")},x=function(t){if(E){if(!(t instanceof HTMLElement))return window;for(var e=t;e&&e!==document.body&&e!==document.documentElement&&e.parentNode;){if(/(scroll|auto)/.test($(e)))return e;e=e.parentNode}return window}},H={},Q=function(){function t(e){var n=e.el,r=e.src,i=e.error,o=e.loading,a=e.bindType,s=e.$parent,u=e.options,l=e.elRenderer;b(this,t),this.el=n,this.src=r,this.error=i,this.loading=o,this.bindType=a,this.attempt=0,this.naturalHeight=0,this.naturalWidth=0,this.options=u,this.rect=null,this.$parent=s,this.elRenderer=l,this.performanceData={init:Date.now(),loadStart:0,loadEnd:0},this.filter(),this.initState(),this.render(\"loading\",!1)}return y(t,[{key:\"initState\",value:function(){\"dataset\"in this.el?this.el.dataset.src=this.src:this.el.setAttribute(\"data-src\",this.src),this.state={error:!1,loaded:!1,rendered:!1}}},{key:\"record\",value:function(t){this.performanceData[t]=Date.now()}},{key:\"update\",value:function(t){var e=t.src,n=t.loading,r=t.error,i=this.src;this.src=e,this.loading=n,this.error=r,this.filter(),i!==this.src&&(this.attempt=0,this.initState())}},{key:\"getRect\",value:function(){this.rect=this.el.getBoundingClientRect()}},{key:\"checkInView\",value:function(){return this.getRect(),this.rect.topthis.options.preLoadTop&&this.rect.left0}},{key:\"filter\",value:function(){var t=this;h(this.options.filter).map(function(e){t.options.filter[e](t,t.options)})}},{key:\"renderLoading\",value:function(t){var e=this;I({src:this.loading},function(n){e.render(\"loading\",!1),t()},function(){t(),e.options.silent||console.warn(\"VueLazyload log: load failed with loading image(\"+e.loading+\")\")})}},{key:\"load\",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:v;return this.attempt>this.options.attempt-1&&this.state.error?(this.options.silent||console.log(\"VueLazyload log: \"+this.src+\" tried too more than \"+this.options.attempt+\" times\"),void e()):this.state.loaded||H[this.src]?(this.state.loaded=!0,e(),this.render(\"loaded\",!0)):void this.renderLoading(function(){t.attempt++,t.record(\"loadStart\"),I({src:t.src},function(n){t.naturalHeight=n.naturalHeight,t.naturalWidth=n.naturalWidth,t.state.loaded=!0,t.state.error=!1,t.record(\"loadEnd\"),t.render(\"loaded\",!1),H[t.src]=1,e()},function(e){!t.options.silent&&console.error(e),t.state.error=!0,t.state.loaded=!1,t.render(\"error\",!1)})})}},{key:\"render\",value:function(t,e){this.elRenderer(this,t,e)}},{key:\"performance\",value:function(){var t=\"loading\",e=0;return this.state.loaded&&(t=\"loaded\",e=(this.performanceData.loadEnd-this.performanceData.loadStart)/1e3),this.state.error&&(t=\"error\"),{src:this.src,state:t,time:e}}},{key:\"destroy\",value:function(){this.el=null,this.src=null,this.error=null,this.loading=null,this.bindType=null,this.attempt=0}}]),t}(),C=\"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\",R=[\"scroll\",\"wheel\",\"mousewheel\",\"resize\",\"animationend\",\"transitionend\",\"touchmove\"],W={rootMargin:\"0px\",threshold:0},B=function(t){return function(){function e(t){var n=t.preLoad,r=t.error,i=t.throttleWait,o=t.preLoadTop,a=t.dispatchEvent,s=t.loading,u=t.attempt,c=t.silent,h=void 0===c||c,f=t.scale,v=t.listenEvents,p=(t.hasbind,t.filter),y=t.adapter,g=t.observer,m=t.observerOptions;b(this,e),this.version=\"1.2.6\",this.mode=k.event,this.ListenerQueue=[],this.TargetIndex=0,this.TargetQueue=[],this.options={silent:h,dispatchEvent:!!a,throttleWait:i||200,preLoad:n||1.3,preLoadTop:o||0,error:r||C,loading:s||C,attempt:u||3,scale:f||j(f),ListenEvents:v||R,hasbind:!1,supportWebp:l(),filter:p||{},adapter:y||{},observer:!!g,observerOptions:m||W},this._initEvent(),this.lazyLoadHandler=d(this._lazyLoadHandler.bind(this),this.options.throttleWait),this.setMode(this.options.observer?k.observer:k.event)}return y(e,[{key:\"config\",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};_(this.options,t)}},{key:\"performance\",value:function(){var t=[];return this.ListenerQueue.map(function(e){t.push(e.performance())}),t}},{key:\"addLazyBox\",value:function(t){this.ListenerQueue.push(t),E&&(this._addListenerTarget(window),this._observer&&this._observer.observe(t.el),t.$el&&t.$el.parentNode&&this._addListenerTarget(t.$el.parentNode))}},{key:\"add\",value:function(e,n,r){var i=this;if(a(this.ListenerQueue,function(t){return t.el===e}))return this.update(e,n),t.nextTick(this.lazyLoadHandler);var o=this._valueFormatter(n.value),u=o.src,l=o.loading,d=o.error;t.nextTick(function(){u=s(e,i.options.scale)||u,i._observer&&i._observer.observe(e);var o=Object.keys(n.modifiers)[0],a=void 0;o&&(a=r.context.$refs[o],a=a?a.$el||a:document.getElementById(o)),a||(a=x(e));var c=new Q({bindType:n.arg,$parent:a,el:e,loading:l,error:d,src:u,elRenderer:i._elRenderer.bind(i),options:i.options});i.ListenerQueue.push(c),E&&(i._addListenerTarget(window),i._addListenerTarget(a)),i.lazyLoadHandler(),t.nextTick(function(){return i.lazyLoadHandler()})})}},{key:\"update\",value:function(e,n){var r=this,i=this._valueFormatter(n.value),o=i.src,a=i.loading,l=i.error;o=s(e,this.options.scale)||o;var d=u(this.ListenerQueue,function(t){return t.el===e});d&&d.update({src:o,loading:a,error:l}),this._observer&&(this._observer.unobserve(e),this._observer.observe(e)),this.lazyLoadHandler(),t.nextTick(function(){return r.lazyLoadHandler()})}},{key:\"remove\",value:function(t){if(t){this._observer&&this._observer.unobserve(t);var e=u(this.ListenerQueue,function(e){return e.el===t});e&&(this._removeListenerTarget(e.$parent),this._removeListenerTarget(window),o(this.ListenerQueue,e)&&e.destroy())}}},{key:\"removeComponent\",value:function(t){t&&(o(this.ListenerQueue,t),this._observer&&this._observer.unobserve(t.el),t.$parent&&t.$el.parentNode&&this._removeListenerTarget(t.$el.parentNode),this._removeListenerTarget(window))}},{key:\"setMode\",value:function(t){var e=this;A||t!==k.observer||(t=k.event),this.mode=t,t===k.event?(this._observer&&(this.ListenerQueue.forEach(function(t){e._observer.unobserve(t.el)}),this._observer=null),this.TargetQueue.forEach(function(t){e._initListen(t.el,!0)})):(this.TargetQueue.forEach(function(t){e._initListen(t.el,!1)}),this._initIntersectionObserver())}},{key:\"_addListenerTarget\",value:function(t){if(t){var e=u(this.TargetQueue,function(e){return e.el===t});return e?e.childrenCount++:(e={el:t,id:++this.TargetIndex,childrenCount:1,listened:!0},this.mode===k.event&&this._initListen(e.el,!0),this.TargetQueue.push(e)),this.TargetIndex}}},{key:\"_removeListenerTarget\",value:function(t){var e=this;this.TargetQueue.forEach(function(n,r){n.el===t&&(--n.childrenCount||(e._initListen(n.el,!1),e.TargetQueue.splice(r,1),n=null))})}},{key:\"_initListen\",value:function(t,e){var n=this;this.options.ListenEvents.forEach(function(r){return S[e?\"on\":\"off\"](t,r,n.lazyLoadHandler)})}},{key:\"_initEvent\",value:function(){var t=this;this.Event={listeners:{loading:[],loaded:[],error:[]}},this.$on=function(e,n){t.Event.listeners[e]||(t.Event.listeners[e]=[]),t.Event.listeners[e].push(n)},this.$once=function(e,n){function r(){i.$off(e,r),n.apply(i,arguments)}var i=t;t.$on(e,r)},this.$off=function(e,n){if(!n){if(!t.Event.listeners[e])return;return void(t.Event.listeners[e].length=0)}o(t.Event.listeners[e],n)},this.$emit=function(e,n,r){t.Event.listeners[e]&&t.Event.listeners[e].forEach(function(t){return t(n,r)})}}},{key:\"_lazyLoadHandler\",value:function(){var t=this,e=[];this.ListenerQueue.forEach(function(t,n){if(!t.state.error&&t.state.loaded)return e.push(t);t.checkInView()&&t.load()}),e.forEach(function(e){return o(t.ListenerQueue,e)})}},{key:\"_initIntersectionObserver\",value:function(){var t=this;A&&(this._observer=new IntersectionObserver(this._observerHandler.bind(this),this.options.observerOptions),this.ListenerQueue.length&&this.ListenerQueue.forEach(function(e){t._observer.observe(e.el)}))}},{key:\"_observerHandler\",value:function(t,e){var n=this;t.forEach(function(t){t.isIntersecting&&n.ListenerQueue.forEach(function(e){if(e.el===t.target){if(e.state.loaded)return n._observer.unobserve(e.el);e.load()}})})}},{key:\"_elRenderer\",value:function(t,e,n){if(t.el){var r=t.el,i=t.bindType,o=void 0;switch(e){case\"loading\":o=t.loading;break;case\"error\":o=t.error;break;default:o=t.src}if(i?r.style[i]='url(\"'+o+'\")':r.getAttribute(\"src\")!==o&&r.setAttribute(\"src\",o),r.setAttribute(\"lazy\",e),this.$emit(e,t,n),this.options.adapter[e]&&this.options.adapter[e](t,this.options),this.options.dispatchEvent){var a=new z(e,{detail:t});r.dispatchEvent(a)}}}},{key:\"_valueFormatter\",value:function(t){var e=t,n=this.options.loading,r=this.options.error;return c(t)&&(t.src||this.options.silent||console.error(\"Vue Lazyload warning: miss src with \"+t),e=t.src,n=t.loading||this.options.loading,r=t.error||this.options.error),{src:e,loading:n,error:r}}}]),e}()},D=function(t){return{props:{tag:{type:String,default:\"div\"}},render:function(t){return!1===this.show?t(this.tag):t(this.tag,null,this.$slots.default)},data:function(){return{el:null,state:{loaded:!1},rect:{},show:!1}},mounted:function(){this.el=this.$el,t.addLazyBox(this),t.lazyLoadHandler()},beforeDestroy:function(){t.removeComponent(this)},methods:{getRect:function(){this.rect=this.$el.getBoundingClientRect()},checkInView:function(){return this.getRect(),E&&this.rect.top0&&this.rect.left0},load:function(){this.show=!0,this.state.loaded=!0,this.$emit(\"show\",this)}}}},V=function(){function t(e){var n=e.lazy;b(this,t),this.lazy=n,n.lazyContainerMananger=this,this._queue=[]}return y(t,[{key:\"bind\",value:function(t,e,n){var r=new N({el:t,binding:e,vnode:n,lazy:this.lazy});this._queue.push(r)}},{key:\"update\",value:function(t,e,n){var r=u(this._queue,function(e){return e.el===t});r&&r.update({el:t,binding:e,vnode:n})}},{key:\"unbind\",value:function(t,e,n){var r=u(this._queue,function(e){return e.el===t});r&&(r.clear(),o(this._queue,r))}}]),t}(),M={selector:\"img\"},N=function(){function t(e){var n=e.el,r=e.binding,i=e.vnode,o=e.lazy;b(this,t),this.el=null,this.vnode=i,this.binding=r,this.options={},this.lazy=o,this._queue=[],this.update({el:n,binding:r})}return y(t,[{key:\"update\",value:function(t){var e=this,n=t.el,r=t.binding;this.el=n,this.options=_({},M,r.value),this.getImgs().forEach(function(t){e.lazy.add(t,_({},e.binding,{value:{src:\"dataset\"in t?t.dataset.src:t.getAttribute(\"data-src\"),error:\"dataset\"in t?t.dataset.error:t.getAttribute(\"data-error\"),loading:\"dataset\"in t?t.dataset.loading:t.getAttribute(\"data-loading\")}}),e.vnode)})}},{key:\"getImgs\",value:function(){return f(this.el.querySelectorAll(this.options.selector))}},{key:\"clear\",value:function(){var t=this;this.getImgs().forEach(function(e){return t.lazy.remove(e)}),this.vnode=null,this.binding=null,this.lazy=null}}]),t}(),P=function(t){return{props:{src:[String,Object],tag:{type:String,default:\"img\"}},render:function(t){return t(this.tag,{attrs:{src:this.renderSrc}},this.$slots.default)},data:function(){return{el:null,options:{src:\"\",error:\"\",loading:\"\",attempt:t.options.attempt},state:{loaded:!1,error:!1,attempt:0},rect:{},renderSrc:\"\"}},watch:{src:function(){this.init(),t.addLazyBox(this),t.lazyLoadHandler()}},created:function(){this.init(),this.renderSrc=this.options.loading},mounted:function(){this.el=this.$el,t.addLazyBox(this),t.lazyLoadHandler()},beforeDestroy:function(){t.removeComponent(this)},methods:{init:function(){var e=t._valueFormatter(this.src),n=e.src,r=e.loading,i=e.error;this.state.loaded=!1,this.options.src=n,this.options.error=i,this.options.loading=r,this.renderSrc=this.options.loading},getRect:function(){this.rect=this.$el.getBoundingClientRect()},checkInView:function(){return this.getRect(),E&&this.rect.top0&&this.rect.left0},load:function(){var e=this,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:v;if(this.state.attempt>this.options.attempt-1&&this.state.error)return t.options.silent||console.log(\"VueLazyload log: \"+this.options.src+\" tried too more than \"+this.options.attempt+\" times\"),void n();var r=this.options.src;I({src:r},function(t){var n=t.src;e.renderSrc=n,e.state.loaded=!0},function(t){e.state.attempt++,e.renderSrc=e.options.error,e.state.error=!0})}}}};return{install:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=B(t),r=new n(e),i=new V({lazy:r}),o=\"2\"===t.version.split(\".\")[0];t.prototype.$Lazyload=r,e.lazyComponent&&t.component(\"lazy-component\",D(r)),e.lazyImage&&t.component(\"lazy-image\",P(r)),o?(t.directive(\"lazy\",{bind:r.add.bind(r),update:r.update.bind(r),componentUpdated:r.lazyLoadHandler.bind(r),unbind:r.remove.bind(r)}),t.directive(\"lazy-container\",{bind:i.bind.bind(i),update:i.update.bind(i),unbind:i.unbind.bind(i)})):(t.directive(\"lazy\",{bind:r.lazyLoadHandler.bind(r),update:function(t,e){_(this.vm.$refs,this.vm.$els),r.add(this.el,{modifiers:this.modifiers||{},arg:this.arg,value:t,oldValue:e},{context:this.vm})},unbind:function(){r.remove(this.el)}}),t.directive(\"lazy-container\",{update:function(t,e){i.update(this.el,{modifiers:this.modifiers||{},arg:this.arg,value:t,oldValue:e},{context:this.vm})},unbind:function(){i.unbind(this.el)}}))}}});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-lazyload/vue-lazyload.js\n// module id = cTzj\n// module chunks = 0","'use strict';\n\nvar Cancel = require('./Cancel');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/cancel/CancelToken.js\n// module id = cWxy\n// module chunks = 0","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/helpers/isAbsoluteURL.js\n// module id = dIwP\n// module chunks = 0","'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/cancel/Cancel.js\n// module id = dVOP\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/core/InterceptorManager.js\n// module id = fuGk\n// module chunks = 0","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE\n * @version v4.2.2+97478eb6\n */\n\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.ES6Promise = factory());\n}(this, (function () { 'use strict';\n\nfunction objectOrFunction(x) {\n var type = typeof x;\n return x !== null && (type === 'object' || type === 'function');\n}\n\nfunction isFunction(x) {\n return typeof x === 'function';\n}\n\n\n\nvar _isArray = void 0;\nif (Array.isArray) {\n _isArray = Array.isArray;\n} else {\n _isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n}\n\nvar isArray = _isArray;\n\nvar len = 0;\nvar vertxNext = void 0;\nvar customSchedulerFn = void 0;\n\nvar asap = function asap(callback, arg) {\n queue[len] = callback;\n queue[len + 1] = arg;\n len += 2;\n if (len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (customSchedulerFn) {\n customSchedulerFn(flush);\n } else {\n scheduleFlush();\n }\n }\n};\n\nfunction setScheduler(scheduleFn) {\n customSchedulerFn = scheduleFn;\n}\n\nfunction setAsap(asapFn) {\n asap = asapFn;\n}\n\nvar browserWindow = typeof window !== 'undefined' ? window : undefined;\nvar browserGlobal = browserWindow || {};\nvar BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;\nvar isNode = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n// test for web worker but not in IE10\nvar isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';\n\n// node\nfunction useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function () {\n return process.nextTick(flush);\n };\n}\n\n// vertx\nfunction useVertxTimer() {\n if (typeof vertxNext !== 'undefined') {\n return function () {\n vertxNext(flush);\n };\n }\n\n return useSetTimeout();\n}\n\nfunction useMutationObserver() {\n var iterations = 0;\n var observer = new BrowserMutationObserver(flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function () {\n node.data = iterations = ++iterations % 2;\n };\n}\n\n// web worker\nfunction useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = flush;\n return function () {\n return channel.port2.postMessage(0);\n };\n}\n\nfunction useSetTimeout() {\n // Store setTimeout reference so es6-promise will be unaffected by\n // other code modifying setTimeout (like sinon.useFakeTimers())\n var globalSetTimeout = setTimeout;\n return function () {\n return globalSetTimeout(flush, 1);\n };\n}\n\nvar queue = new Array(1000);\nfunction flush() {\n for (var i = 0; i < len; i += 2) {\n var callback = queue[i];\n var arg = queue[i + 1];\n\n callback(arg);\n\n queue[i] = undefined;\n queue[i + 1] = undefined;\n }\n\n len = 0;\n}\n\nfunction attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return useVertxTimer();\n } catch (e) {\n return useSetTimeout();\n }\n}\n\nvar scheduleFlush = void 0;\n// Decide what async method to use to triggering processing of queued callbacks:\nif (isNode) {\n scheduleFlush = useNextTick();\n} else if (BrowserMutationObserver) {\n scheduleFlush = useMutationObserver();\n} else if (isWorker) {\n scheduleFlush = useMessageChannel();\n} else if (browserWindow === undefined && typeof require === 'function') {\n scheduleFlush = attemptVertx();\n} else {\n scheduleFlush = useSetTimeout();\n}\n\nfunction then(onFulfillment, onRejection) {\n var parent = this;\n\n var child = new this.constructor(noop);\n\n if (child[PROMISE_ID] === undefined) {\n makePromise(child);\n }\n\n var _state = parent._state;\n\n\n if (_state) {\n var callback = arguments[_state - 1];\n asap(function () {\n return invokeCallback(_state, child, callback, parent._result);\n });\n } else {\n subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n}\n\n/**\n `Promise.resolve` returns a promise that will become resolved with the\n passed `value`. It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n resolve(1);\n });\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.resolve(1);\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n @method resolve\n @static\n @param {Any} value value that the returned promise will be resolved with\n Useful for tooling.\n @return {Promise} a promise that will become fulfilled with the given\n `value`\n*/\nfunction resolve$1(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(noop);\n resolve(promise, object);\n return promise;\n}\n\nvar PROMISE_ID = Math.random().toString(36).substring(16);\n\nfunction noop() {}\n\nvar PENDING = void 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\n\nvar GET_THEN_ERROR = new ErrorObject();\n\nfunction selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n}\n\nfunction cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n}\n\nfunction getThen(promise) {\n try {\n return promise.then;\n } catch (error) {\n GET_THEN_ERROR.error = error;\n return GET_THEN_ERROR;\n }\n}\n\nfunction tryThen(then$$1, value, fulfillmentHandler, rejectionHandler) {\n try {\n then$$1.call(value, fulfillmentHandler, rejectionHandler);\n } catch (e) {\n return e;\n }\n}\n\nfunction handleForeignThenable(promise, thenable, then$$1) {\n asap(function (promise) {\n var sealed = false;\n var error = tryThen(then$$1, thenable, function (value) {\n if (sealed) {\n return;\n }\n sealed = true;\n if (thenable !== value) {\n resolve(promise, value);\n } else {\n fulfill(promise, value);\n }\n }, function (reason) {\n if (sealed) {\n return;\n }\n sealed = true;\n\n reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n reject(promise, error);\n }\n }, promise);\n}\n\nfunction handleOwnThenable(promise, thenable) {\n if (thenable._state === FULFILLED) {\n fulfill(promise, thenable._result);\n } else if (thenable._state === REJECTED) {\n reject(promise, thenable._result);\n } else {\n subscribe(thenable, undefined, function (value) {\n return resolve(promise, value);\n }, function (reason) {\n return reject(promise, reason);\n });\n }\n}\n\nfunction handleMaybeThenable(promise, maybeThenable, then$$1) {\n if (maybeThenable.constructor === promise.constructor && then$$1 === then && maybeThenable.constructor.resolve === resolve$1) {\n handleOwnThenable(promise, maybeThenable);\n } else {\n if (then$$1 === GET_THEN_ERROR) {\n reject(promise, GET_THEN_ERROR.error);\n GET_THEN_ERROR.error = null;\n } else if (then$$1 === undefined) {\n fulfill(promise, maybeThenable);\n } else if (isFunction(then$$1)) {\n handleForeignThenable(promise, maybeThenable, then$$1);\n } else {\n fulfill(promise, maybeThenable);\n }\n }\n}\n\nfunction resolve(promise, value) {\n if (promise === value) {\n reject(promise, selfFulfillment());\n } else if (objectOrFunction(value)) {\n handleMaybeThenable(promise, value, getThen(value));\n } else {\n fulfill(promise, value);\n }\n}\n\nfunction publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n publish(promise);\n}\n\nfunction fulfill(promise, value) {\n if (promise._state !== PENDING) {\n return;\n }\n\n promise._result = value;\n promise._state = FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n asap(publish, promise);\n }\n}\n\nfunction reject(promise, reason) {\n if (promise._state !== PENDING) {\n return;\n }\n promise._state = REJECTED;\n promise._result = reason;\n\n asap(publishRejection, promise);\n}\n\nfunction subscribe(parent, child, onFulfillment, onRejection) {\n var _subscribers = parent._subscribers;\n var length = _subscribers.length;\n\n\n parent._onerror = null;\n\n _subscribers[length] = child;\n _subscribers[length + FULFILLED] = onFulfillment;\n _subscribers[length + REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n asap(publish, parent);\n }\n}\n\nfunction publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) {\n return;\n }\n\n var child = void 0,\n callback = void 0,\n detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n}\n\nfunction ErrorObject() {\n this.error = null;\n}\n\nvar TRY_CATCH_ERROR = new ErrorObject();\n\nfunction tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch (e) {\n TRY_CATCH_ERROR.error = e;\n return TRY_CATCH_ERROR;\n }\n}\n\nfunction invokeCallback(settled, promise, callback, detail) {\n var hasCallback = isFunction(callback),\n value = void 0,\n error = void 0,\n succeeded = void 0,\n failed = void 0;\n\n if (hasCallback) {\n value = tryCatch(callback, detail);\n\n if (value === TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value.error = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n reject(promise, cannotReturnOwn());\n return;\n }\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n resolve(promise, value);\n } else if (failed) {\n reject(promise, error);\n } else if (settled === FULFILLED) {\n fulfill(promise, value);\n } else if (settled === REJECTED) {\n reject(promise, value);\n }\n}\n\nfunction initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value) {\n resolve(promise, value);\n }, function rejectPromise(reason) {\n reject(promise, reason);\n });\n } catch (e) {\n reject(promise, e);\n }\n}\n\nvar id = 0;\nfunction nextId() {\n return id++;\n}\n\nfunction makePromise(promise) {\n promise[PROMISE_ID] = id++;\n promise._state = undefined;\n promise._result = undefined;\n promise._subscribers = [];\n}\n\nfunction validationError() {\n return new Error('Array Methods must be provided an Array');\n}\n\nfunction validationError() {\n return new Error('Array Methods must be provided an Array');\n}\n\nvar Enumerator = function () {\n function Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(noop);\n\n if (!this.promise[PROMISE_ID]) {\n makePromise(this.promise);\n }\n\n if (isArray(input)) {\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate(input);\n if (this._remaining === 0) {\n fulfill(this.promise, this._result);\n }\n }\n } else {\n reject(this.promise, validationError());\n }\n }\n\n Enumerator.prototype._enumerate = function _enumerate(input) {\n for (var i = 0; this._state === PENDING && i < input.length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n Enumerator.prototype._eachEntry = function _eachEntry(entry, i) {\n var c = this._instanceConstructor;\n var resolve$$1 = c.resolve;\n\n\n if (resolve$$1 === resolve$1) {\n var _then = getThen(entry);\n\n if (_then === then && entry._state !== PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof _then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === Promise$1) {\n var promise = new c(noop);\n handleMaybeThenable(promise, entry, _then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function (resolve$$1) {\n return resolve$$1(entry);\n }), i);\n }\n } else {\n this._willSettleAt(resolve$$1(entry), i);\n }\n };\n\n Enumerator.prototype._settledAt = function _settledAt(state, i, value) {\n var promise = this.promise;\n\n\n if (promise._state === PENDING) {\n this._remaining--;\n\n if (state === REJECTED) {\n reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n fulfill(promise, this._result);\n }\n };\n\n Enumerator.prototype._willSettleAt = function _willSettleAt(promise, i) {\n var enumerator = this;\n\n subscribe(promise, undefined, function (value) {\n return enumerator._settledAt(FULFILLED, i, value);\n }, function (reason) {\n return enumerator._settledAt(REJECTED, i, reason);\n });\n };\n\n return Enumerator;\n}();\n\n/**\n `Promise.all` accepts an array of promises, and returns a new promise which\n is fulfilled with an array of fulfillment values for the passed promises, or\n rejected with the reason of the first passed promise to be rejected. It casts all\n elements of the passed iterable to promises as it runs this algorithm.\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = resolve(2);\n let promise3 = resolve(3);\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // The array here would be [ 1, 2, 3 ];\n });\n ```\n\n If any of the `promises` given to `all` are rejected, the first promise\n that is rejected will be given as an argument to the returned promises's\n rejection handler. For example:\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = reject(new Error(\"2\"));\n let promise3 = reject(new Error(\"3\"));\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // Code here never runs because there are rejected promises!\n }, function(error) {\n // error.message === \"2\"\n });\n ```\n\n @method all\n @static\n @param {Array} entries array of promises\n @param {String} label optional string for labeling the promise.\n Useful for tooling.\n @return {Promise} promise that is fulfilled when all `promises` have been\n fulfilled, or rejected if any of them become rejected.\n @static\n*/\nfunction all(entries) {\n return new Enumerator(this, entries).promise;\n}\n\n/**\n `Promise.race` returns a new promise which is settled in the same way as the\n first passed promise to settle.\n\n Example:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 2');\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // result === 'promise 2' because it was resolved before promise1\n // was resolved.\n });\n ```\n\n `Promise.race` is deterministic in that only the state of the first\n settled promise matters. For example, even if other promises given to the\n `promises` array argument are resolved, but the first settled promise has\n become rejected before the other promises became fulfilled, the returned\n promise will become rejected:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n reject(new Error('promise 2'));\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // Code here never runs\n }, function(reason){\n // reason.message === 'promise 2' because promise 2 became rejected before\n // promise 1 became fulfilled\n });\n ```\n\n An example real-world use case is implementing timeouts:\n\n ```javascript\n Promise.race([ajax('foo.json'), timeout(5000)])\n ```\n\n @method race\n @static\n @param {Array} promises array of promises to observe\n Useful for tooling.\n @return {Promise} a promise which settles in the same way as the first passed\n promise to settle.\n*/\nfunction race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (!isArray(entries)) {\n return new Constructor(function (_, reject) {\n return reject(new TypeError('You must pass an array to race.'));\n });\n } else {\n return new Constructor(function (resolve, reject) {\n var length = entries.length;\n for (var i = 0; i < length; i++) {\n Constructor.resolve(entries[i]).then(resolve, reject);\n }\n });\n }\n}\n\n/**\n `Promise.reject` returns a promise rejected with the passed `reason`.\n It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n reject(new Error('WHOOPS'));\n });\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.reject(new Error('WHOOPS'));\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n @method reject\n @static\n @param {Any} reason value that the returned promise will be rejected with.\n Useful for tooling.\n @return {Promise} a promise rejected with the given `reason`.\n*/\nfunction reject$1(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(noop);\n reject(promise, reason);\n return promise;\n}\n\nfunction needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n}\n\nfunction needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n}\n\n/**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n let promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n let xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {Function} resolver\n Useful for tooling.\n @constructor\n*/\n\nvar Promise$1 = function () {\n function Promise(resolver) {\n this[PROMISE_ID] = nextId();\n this._result = this._state = undefined;\n this._subscribers = [];\n\n if (noop !== resolver) {\n typeof resolver !== 'function' && needsResolver();\n this instanceof Promise ? initializePromise(this, resolver) : needsNew();\n }\n }\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n Chaining\n --------\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n Assimilation\n ------------\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n If the assimliated promise rejects, then the downstream promise will also reject.\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n Simple Example\n --------------\n Synchronous Example\n ```javascript\n let result;\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n Errback Example\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n Promise Example;\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n Advanced Example\n --------------\n Synchronous Example\n ```javascript\n let author, books;\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n Errback Example\n ```js\n function foundBooks(books) {\n }\n function failure(reason) {\n }\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n Promise Example;\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n\n\n Promise.prototype.catch = function _catch(onRejection) {\n return this.then(null, onRejection);\n };\n\n /**\n `finally` will be invoked regardless of the promise's fate just as native\n try/catch/finally behaves\n \n Synchronous example:\n \n ```js\n findAuthor() {\n if (Math.random() > 0.5) {\n throw new Error();\n }\n return new Author();\n }\n \n try {\n return findAuthor(); // succeed or fail\n } catch(error) {\n return findOtherAuther();\n } finally {\n // always runs\n // doesn't affect the return value\n }\n ```\n \n Asynchronous example:\n \n ```js\n findAuthor().catch(function(reason){\n return findOtherAuther();\n }).finally(function(){\n // author was either found, or not\n });\n ```\n \n @method finally\n @param {Function} callback\n @return {Promise}\n */\n\n\n Promise.prototype.finally = function _finally(callback) {\n var promise = this;\n var constructor = promise.constructor;\n\n return promise.then(function (value) {\n return constructor.resolve(callback()).then(function () {\n return value;\n });\n }, function (reason) {\n return constructor.resolve(callback()).then(function () {\n throw reason;\n });\n });\n };\n\n return Promise;\n}();\n\nPromise$1.prototype.then = then;\nPromise$1.all = all;\nPromise$1.race = race;\nPromise$1.resolve = resolve$1;\nPromise$1.reject = reject$1;\nPromise$1._setScheduler = setScheduler;\nPromise$1._setAsap = setAsap;\nPromise$1._asap = asap;\n\n/*global self*/\nfunction polyfill() {\n var local = void 0;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P) {\n var promiseToString = null;\n try {\n promiseToString = Object.prototype.toString.call(P.resolve());\n } catch (e) {\n // silently ignored\n }\n\n if (promiseToString === '[object Promise]' && !P.cast) {\n return;\n }\n }\n\n local.Promise = Promise$1;\n}\n\n// Strange compat..\nPromise$1.polyfill = polyfill;\nPromise$1.Promise = Promise$1;\n\nreturn Promise$1;\n\n})));\n\n\n\n//# sourceMappingURL=es6-promise.map\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/es6-promise/dist/es6-promise.js\n// module id = hKoQ\n// module chunks = 0","\n/**\n * chimee-plugin-mobile-controlbar v0.0.9\n * (c) 2017 yandeqiang\n * Released under ISC\n */\n\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.chimeePluginMobileControlbar = factory());\n}(this, (function () { 'use strict';\n\nfunction __$styleInject(css, returnValue) {\n if (typeof document === 'undefined') {\n return returnValue;\n }\n css = css || '';\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n head.appendChild(style);\n \n if (style.styleSheet){\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n return returnValue;\n}\n\n__$styleInject(\"container{position:relative;-webkit-tap-highlight-color:rgba(255,255,255,0)}container,video{display:block;width:100%;height:100%;background:#000;outline:none}video:focus{outline:none}.chimee-flex-component svg:hover g,.chimee-flex-component svg g{fill:#fff;stroke:#fff}chimee-clarity-list,chimee-control-state-pause,chimee-control-state-play,chimee-screen-full,chimee-screen-small{display:none}chimee-control.full chimee-screen-full,chimee-control.pause chimee-control-state-pause,chimee-control.play chimee-control-state-play,chimee-control.small chimee-screen-small{display:inline-block;width:1.4em;height:100%}chimee-control{position:absolute;bottom:0;left:0;display:block;width:100%;height:4em;font-size:10px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;font-family:Roboto,Arial,Helvetica,sans-serif;-webkit-transition:visibility .5s ease;transition:visibility .5s ease}chimee-control:focus{outline:none}chimee-control-wrap{position:absolute;left:0;bottom:0;width:100%;height:4em;line-height:4em;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;background:rgba(0,0,0,.5);-webkit-transition:bottom .5s ease;transition:bottom .5s ease;pointer-events:auto}.chimee-flex-component{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;height:4em;cursor:pointer}.chimee-flex-component svg{vertical-align:middle;width:1.8em;height:1.8em}chimee-control-state.chimee-flex-component{-ms-flex-preferred-size:3em;flex-basis:3em;text-align:right;margin-right:1em}chimee-control-state .left,chimee-control-state .right{-webkit-transition:d .2s ease-in-out;transition:d .2s ease-in-out}chimee-current-time.chimee-flex-component,chimee-total-time.chimee-flex-component{color:#fff;font-size:1.5em;font-weight:400;text-align:center;white-space:nowrap}chimee-current-time+chimee-total-time:before{content:\\\"/\\\";padding:4px}chimee-progressbar.chimee-flex-component{position:relative;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;margin:0 1.5em}.chimee-progressbar-line{position:absolute;top:1.8em;left:0;display:inline-block;height:8px;border-radius:4px}chimee-progressbar-bg{width:100%;background:#4c4c4c}chimee-progressbar-buffer{width:0;background:#6f6f6f}chimee-progressbar-all{background:#de698c}chimee-progressbar-ball{content:\\\"\\\";position:absolute;right:-1em;top:-.4em;display:inline-block;width:1.4em;height:1.4em;border-radius:1.4em;background:#fff;pointer-events:none}chimee-screen.chimee-flex-component{-ms-flex-preferred-size:3em;flex-basis:3em;text-align:left;margin-left:1em}\", undefined);\n\nvar commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n\n\nfunction unwrapExports$1 (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nfunction createCommonjsModule$1(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nvar classCallCheck$1 = createCommonjsModule$1(function (module, exports) {\nexports.__esModule = true;\n\nexports.default = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n});\n\nvar _classCallCheck$1 = unwrapExports$1(classCallCheck$1);\n\nvar _global$1 = createCommonjsModule$1(function (module) {\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n});\n\nvar _core$1 = createCommonjsModule$1(function (module) {\nvar core = module.exports = { version: '2.5.1' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n});\n\nvar _core_1$1 = _core$1.version;\n\nvar _aFunction$1 = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n\n// optional / simple context binding\n\nvar _ctx$1 = function (fn, that, length) {\n _aFunction$1(fn);\n if (that === undefined) return fn;\n switch (length) {\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\nvar _isObject$1 = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\nvar _anObject$1 = function (it) {\n if (!_isObject$1(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n\nvar _fails$1 = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n\n// Thank's IE8 for his funny defineProperty\nvar _descriptors$1 = !_fails$1(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n\nvar document$2 = _global$1.document;\n// typeof document.createElement is 'object' in old IE\nvar is$1 = _isObject$1(document$2) && _isObject$1(document$2.createElement);\nvar _domCreate$1 = function (it) {\n return is$1 ? document$2.createElement(it) : {};\n};\n\nvar _ie8DomDefine$1 = !_descriptors$1 && !_fails$1(function () {\n return Object.defineProperty(_domCreate$1('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n\n// 7.1.1 ToPrimitive(input [, PreferredType])\n\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nvar _toPrimitive$1 = function (it, S) {\n if (!_isObject$1(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !_isObject$1(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !_isObject$1(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !_isObject$1(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n\nvar dP$1 = Object.defineProperty;\n\nvar f$1 = _descriptors$1 ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n _anObject$1(O);\n P = _toPrimitive$1(P, true);\n _anObject$1(Attributes);\n if (_ie8DomDefine$1) try {\n return dP$1(O, P, Attributes);\n } catch (e) { /* 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\nvar _objectDp$1 = {\n\tf: f$1\n};\n\nvar _propertyDesc$1 = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n\nvar _hide$1 = _descriptors$1 ? function (object, key, value) {\n return _objectDp$1.f(object, key, _propertyDesc$1(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n\nvar PROTOTYPE$1 = 'prototype';\n\nvar $export$1 = function (type, name, source) {\n var IS_FORCED = type & $export$1.F;\n var IS_GLOBAL = type & $export$1.G;\n var IS_STATIC = type & $export$1.S;\n var IS_PROTO = type & $export$1.P;\n var IS_BIND = type & $export$1.B;\n var IS_WRAP = type & $export$1.W;\n var exports = IS_GLOBAL ? _core$1 : _core$1[name] || (_core$1[name] = {});\n var expProto = exports[PROTOTYPE$1];\n var target = IS_GLOBAL ? _global$1 : IS_STATIC ? _global$1[name] : (_global$1[name] || {})[PROTOTYPE$1];\n var key, own, out;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n if (own && key in exports) continue;\n // export native or passed\n out = own ? target[key] : source[key];\n // prevent global pollution for namespaces\n exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n // bind timers to global for call from export context\n : IS_BIND && own ? _ctx$1(out, _global$1)\n // wrap global constructors for prevent change them in library\n : IS_WRAP && target[key] == out ? (function (C) {\n var F = function (a, b, c) {\n if (this instanceof C) {\n switch (arguments.length) {\n case 0: return new C();\n case 1: return new C(a);\n case 2: return new C(a, b);\n } return new C(a, b, c);\n } return C.apply(this, arguments);\n };\n F[PROTOTYPE$1] = C[PROTOTYPE$1];\n return F;\n // make static versions for prototype methods\n })(out) : IS_PROTO && typeof out == 'function' ? _ctx$1(Function.call, out) : out;\n // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n if (IS_PROTO) {\n (exports.virtual || (exports.virtual = {}))[key] = out;\n // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n if (type & $export$1.R && expProto && !expProto[key]) _hide$1(expProto, key, out);\n }\n }\n};\n// type bitmap\n$export$1.F = 1; // forced\n$export$1.G = 2; // global\n$export$1.S = 4; // static\n$export$1.P = 8; // proto\n$export$1.B = 16; // bind\n$export$1.W = 32; // wrap\n$export$1.U = 64; // safe\n$export$1.R = 128; // real proto method for `library`\nvar _export$1 = $export$1;\n\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n_export$1(_export$1.S + _export$1.F * !_descriptors$1, 'Object', { defineProperty: _objectDp$1.f });\n\nvar $Object$1 = _core$1.Object;\nvar defineProperty$2$1 = function defineProperty(it, key, desc) {\n return $Object$1.defineProperty(it, key, desc);\n};\n\nvar defineProperty$1 = createCommonjsModule$1(function (module) {\nmodule.exports = { \"default\": defineProperty$2$1, __esModule: true };\n});\n\nvar _Object$defineProperty = unwrapExports$1(defineProperty$1);\n\nvar createClass$1 = createCommonjsModule$1(function (module, exports) {\nexports.__esModule = true;\n\n\n\nvar _defineProperty2 = _interopRequireDefault(defineProperty$1);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n (0, _defineProperty2.default)(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n});\n\nvar _createClass$1 = unwrapExports$1(createClass$1);\n\n// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nvar _toInteger = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n\n// 7.2.1 RequireObjectCoercible(argument)\nvar _defined = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n\n// true -> String#at\n// false -> String#codePointAt\nvar _stringAt = function (TO_STRING) {\n return function (that, pos) {\n var s = String(_defined(that));\n var i = _toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n\nvar _library = true;\n\nvar _redefine = _hide$1;\n\nvar hasOwnProperty = {}.hasOwnProperty;\nvar _has = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n\nvar _iterators = {};\n\nvar toString = {}.toString;\n\nvar _cof = function (it) {\n return toString.call(it).slice(8, -1);\n};\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\n\n// eslint-disable-next-line no-prototype-builtins\nvar _iobject = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return _cof(it) == 'String' ? it.split('') : Object(it);\n};\n\n// to indexed object, toObject with fallback for non-array-like ES3 strings\n\n\nvar _toIobject = function (it) {\n return _iobject(_defined(it));\n};\n\n// 7.1.15 ToLength\n\nvar min = Math.min;\nvar _toLength = function (it) {\n return it > 0 ? min(_toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n\nvar max = Math.max;\nvar min$1 = Math.min;\nvar _toAbsoluteIndex = function (index, length) {\n index = _toInteger(index);\n return index < 0 ? max(index + length, 0) : min$1(index, length);\n};\n\n// false -> Array#indexOf\n// true -> Array#includes\n\n\n\nvar _arrayIncludes = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = _toIobject($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\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nvar SHARED = '__core-js_shared__';\nvar store = _global$1[SHARED] || (_global$1[SHARED] = {});\nvar _shared = function (key) {\n return store[key] || (store[key] = {});\n};\n\nvar id = 0;\nvar px = Math.random();\nvar _uid = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n\nvar shared = _shared('keys');\n\nvar _sharedKey = function (key) {\n return shared[key] || (shared[key] = _uid(key));\n};\n\nvar arrayIndexOf = _arrayIncludes(false);\nvar IE_PROTO$1 = _sharedKey('IE_PROTO');\n\nvar _objectKeysInternal = function (object, names) {\n var O = _toIobject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO$1) _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 ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n\n// IE 8- don't enum bug keys\nvar _enumBugKeys = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n\n// 19.1.2.14 / 15.2.3.14 Object.keys(O)\n\n\n\nvar _objectKeys = Object.keys || function keys(O) {\n return _objectKeysInternal(O, _enumBugKeys);\n};\n\nvar _objectDps = _descriptors$1 ? Object.defineProperties : function defineProperties(O, Properties) {\n _anObject$1(O);\n var keys = _objectKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) _objectDp$1.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n\nvar document$3 = _global$1.document;\nvar _html = document$3 && document$3.documentElement;\n\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n\n\n\nvar IE_PROTO = _sharedKey('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE$2 = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = _domCreate$1('iframe');\n var i = _enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n _html.appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE$2][_enumBugKeys[i]];\n return createDict();\n};\n\nvar _objectCreate = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE$2] = _anObject$1(O);\n result = new Empty();\n Empty[PROTOTYPE$2] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : _objectDps(result, Properties);\n};\n\nvar _wks = createCommonjsModule$1(function (module) {\nvar store = _shared('wks');\n\nvar Symbol = _global$1.Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : _uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n});\n\nvar def = _objectDp$1.f;\n\nvar TAG = _wks('toStringTag');\n\nvar _setToStringTag = function (it, tag, stat) {\n if (it && !_has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\n_hide$1(IteratorPrototype, _wks('iterator'), function () { return this; });\n\nvar _iterCreate = function (Constructor, NAME, next) {\n Constructor.prototype = _objectCreate(IteratorPrototype, { next: _propertyDesc$1(1, next) });\n _setToStringTag(Constructor, NAME + ' Iterator');\n};\n\n// 7.1.13 ToObject(argument)\n\nvar _toObject = function (it) {\n return Object(_defined(it));\n};\n\n// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\n\n\nvar IE_PROTO$2 = _sharedKey('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nvar _objectGpo = Object.getPrototypeOf || function (O) {\n O = _toObject(O);\n if (_has(O, IE_PROTO$2)) return O[IE_PROTO$2];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n\nvar ITERATOR = _wks('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nvar _iterDefine = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n _iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = _objectGpo($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n _setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!_library && !_has(IteratorPrototype, ITERATOR)) _hide$1(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!_library || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n _hide$1(proto, ITERATOR, $default);\n }\n // Plug for library\n _iterators[NAME] = $default;\n _iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) _redefine(proto, key, methods[key]);\n } else _export$1(_export$1.P + _export$1.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n\nvar $at = _stringAt(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\n_iterDefine(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n\nvar _iterStep = function (done, value) {\n return { value: value, done: !!done };\n};\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nvar es6_array_iterator = _iterDefine(Array, 'Array', function (iterated, kind) {\n this._t = _toIobject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return _iterStep(1);\n }\n if (kind == 'keys') return _iterStep(0, index);\n if (kind == 'values') return _iterStep(0, O[index]);\n return _iterStep(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\n_iterators.Arguments = _iterators.Array;\n\nvar TO_STRING_TAG = _wks('toStringTag');\n\nvar DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +\n 'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +\n 'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +\n 'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +\n 'TextTrackList,TouchList').split(',');\n\nfor (var i = 0; i < DOMIterables.length; i++) {\n var NAME = DOMIterables[i];\n var Collection = _global$1[NAME];\n var proto = Collection && Collection.prototype;\n if (proto && !proto[TO_STRING_TAG]) _hide$1(proto, TO_STRING_TAG, NAME);\n _iterators[NAME] = _iterators.Array;\n}\n\nvar f$2 = _wks;\n\nvar _wksExt = {\n\tf: f$2\n};\n\nvar iterator$2 = _wksExt.f('iterator');\n\nvar iterator = createCommonjsModule$1(function (module) {\nmodule.exports = { \"default\": iterator$2, __esModule: true };\n});\n\nunwrapExports$1(iterator);\n\nvar _meta = createCommonjsModule$1(function (module) {\nvar META = _uid('meta');\n\n\nvar setDesc = _objectDp$1.f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !_fails$1(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!_isObject$1(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!_has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!_has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !_has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n});\n\nvar _meta_1 = _meta.KEY;\nvar _meta_2 = _meta.NEED;\nvar _meta_3 = _meta.fastKey;\nvar _meta_4 = _meta.getWeak;\nvar _meta_5 = _meta.onFreeze;\n\nvar defineProperty$4 = _objectDp$1.f;\nvar _wksDefine = function (name) {\n var $Symbol = _core$1.Symbol || (_core$1.Symbol = _library ? {} : _global$1.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty$4($Symbol, name, { value: _wksExt.f(name) });\n};\n\nvar f$3 = Object.getOwnPropertySymbols;\n\nvar _objectGops = {\n\tf: f$3\n};\n\nvar f$4 = {}.propertyIsEnumerable;\n\nvar _objectPie = {\n\tf: f$4\n};\n\n// all enumerable object keys, includes symbols\n\n\n\nvar _enumKeys = function (it) {\n var result = _objectKeys(it);\n var getSymbols = _objectGops.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = _objectPie.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n\n// 7.2.2 IsArray(argument)\n\nvar _isArray = Array.isArray || function isArray(arg) {\n return _cof(arg) == 'Array';\n};\n\n// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\n\nvar hiddenKeys = _enumBugKeys.concat('length', 'prototype');\n\nvar f$6 = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return _objectKeysInternal(O, hiddenKeys);\n};\n\nvar _objectGopn = {\n\tf: f$6\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\n\nvar gOPN$1 = _objectGopn.f;\nvar toString$1 = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN$1(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nvar f$5 = function getOwnPropertyNames(it) {\n return windowNames && toString$1.call(it) == '[object Window]' ? getWindowNames(it) : gOPN$1(_toIobject(it));\n};\n\nvar _objectGopnExt = {\n\tf: f$5\n};\n\nvar gOPD$1 = Object.getOwnPropertyDescriptor;\n\nvar f$7 = _descriptors$1 ? gOPD$1 : function getOwnPropertyDescriptor(O, P) {\n O = _toIobject(O);\n P = _toPrimitive$1(P, true);\n if (_ie8DomDefine$1) try {\n return gOPD$1(O, P);\n } catch (e) { /* empty */ }\n if (_has(O, P)) return _propertyDesc$1(!_objectPie.f.call(O, P), O[P]);\n};\n\nvar _objectGopd = {\n\tf: f$7\n};\n\n// ECMAScript 6 symbols shim\n\n\n\n\n\nvar META = _meta.KEY;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar gOPD = _objectGopd.f;\nvar dP$2 = _objectDp$1.f;\nvar gOPN = _objectGopnExt.f;\nvar $Symbol = _global$1.Symbol;\nvar $JSON = _global$1.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE$3 = 'prototype';\nvar HIDDEN = _wks('_hidden');\nvar TO_PRIMITIVE = _wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = _shared('symbol-registry');\nvar AllSymbols = _shared('symbols');\nvar OPSymbols = _shared('op-symbols');\nvar ObjectProto$1 = Object[PROTOTYPE$3];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = _global$1.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE$3] || !QObject[PROTOTYPE$3].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = _descriptors$1 && _fails$1(function () {\n return _objectCreate(dP$2({}, 'a', {\n get: function () { return dP$2(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto$1, key);\n if (protoDesc) delete ObjectProto$1[key];\n dP$2(it, key, D);\n if (protoDesc && it !== ObjectProto$1) dP$2(ObjectProto$1, key, protoDesc);\n} : dP$2;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _objectCreate($Symbol[PROTOTYPE$3]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto$1) $defineProperty(OPSymbols, key, D);\n _anObject$1(it);\n key = _toPrimitive$1(key, true);\n _anObject$1(D);\n if (_has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!_has(it, HIDDEN)) dP$2(it, HIDDEN, _propertyDesc$1(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (_has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _objectCreate(D, { enumerable: _propertyDesc$1(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP$2(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n _anObject$1(it);\n var keys = _enumKeys(P = _toIobject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _objectCreate(it) : $defineProperties(_objectCreate(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = _toPrimitive$1(key, true));\n if (this === ObjectProto$1 && _has(AllSymbols, key) && !_has(OPSymbols, key)) return false;\n return E || !_has(this, key) || !_has(AllSymbols, key) || _has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = _toIobject(it);\n key = _toPrimitive$1(key, true);\n if (it === ObjectProto$1 && _has(AllSymbols, key) && !_has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && _has(AllSymbols, key) && !(_has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(_toIobject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!_has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto$1;\n var names = gOPN(IS_OP ? OPSymbols : _toIobject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (_has(AllSymbols, key = names[i++]) && (IS_OP ? _has(ObjectProto$1, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = _uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto$1) $set.call(OPSymbols, value);\n if (_has(this, HIDDEN) && _has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, _propertyDesc$1(1, value));\n };\n if (_descriptors$1 && setter) setSymbolDesc(ObjectProto$1, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n _redefine($Symbol[PROTOTYPE$3], 'toString', function toString() {\n return this._k;\n });\n\n _objectGopd.f = $getOwnPropertyDescriptor;\n _objectDp$1.f = $defineProperty;\n _objectGopn.f = _objectGopnExt.f = $getOwnPropertyNames;\n _objectPie.f = $propertyIsEnumerable;\n _objectGops.f = $getOwnPropertySymbols;\n\n if (_descriptors$1 && !_library) {\n _redefine(ObjectProto$1, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n _wksExt.f = function (name) {\n return wrap(_wks(name));\n };\n}\n\n_export$1(_export$1.G + _export$1.W + _export$1.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)_wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = _objectKeys(_wks.store), k = 0; wellKnownSymbols.length > k;) _wksDefine(wellKnownSymbols[k++]);\n\n_export$1(_export$1.S + _export$1.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return _has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n_export$1(_export$1.S + _export$1.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && _export$1(_export$1.S + _export$1.F * (!USE_NATIVE || _fails$1(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n if (it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n replacer = args[1];\n if (typeof replacer == 'function') $replacer = replacer;\n if ($replacer || !_isArray(replacer)) replacer = function (key, value) {\n if ($replacer) value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE$3][TO_PRIMITIVE] || _hide$1($Symbol[PROTOTYPE$3], TO_PRIMITIVE, $Symbol[PROTOTYPE$3].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\n_setToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\n_setToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\n_setToStringTag(_global$1.JSON, 'JSON', true);\n\n_wksDefine('asyncIterator');\n\n_wksDefine('observable');\n\nvar symbol$2 = _core$1.Symbol;\n\nvar symbol = createCommonjsModule$1(function (module) {\nmodule.exports = { \"default\": symbol$2, __esModule: true };\n});\n\nunwrapExports$1(symbol);\n\nvar _typeof_1 = createCommonjsModule$1(function (module, exports) {\nexports.__esModule = true;\n\n\n\nvar _iterator2 = _interopRequireDefault(iterator);\n\n\n\nvar _symbol2 = _interopRequireDefault(symbol);\n\nvar _typeof = typeof _symbol2.default === \"function\" && typeof _iterator2.default === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = typeof _symbol2.default === \"function\" && _typeof(_iterator2.default) === \"symbol\" ? function (obj) {\n return typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n} : function (obj) {\n return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n};\n});\n\nvar _typeof = unwrapExports$1(_typeof_1);\n\n// most Object methods by ES6 should accept primitives\n\n\n\nvar _objectSap = function (KEY, exec) {\n var fn = (_core$1.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n _export$1(_export$1.S + _export$1.F * _fails$1(function () { fn(1); }), 'Object', exp);\n};\n\n// 19.1.2.14 Object.keys(O)\n\n\n\n_objectSap('keys', function () {\n return function keys(it) {\n return _objectKeys(_toObject(it));\n };\n});\n\nvar keys$1 = _core$1.Object.keys;\n\nvar keys = createCommonjsModule$1(function (module) {\nmodule.exports = { \"default\": keys$1, __esModule: true };\n});\n\nvar _Object$keys = unwrapExports$1(keys);\n\n// 20.1.2.3 Number.isInteger(number)\n\nvar floor$1 = Math.floor;\nvar _isInteger = function isInteger(it) {\n return !_isObject$1(it) && isFinite(it) && floor$1(it) === it;\n};\n\n// 20.1.2.3 Number.isInteger(number)\n\n\n_export$1(_export$1.S, 'Number', { isInteger: _isInteger });\n\nvar isInteger$2 = _core$1.Number.isInteger;\n\nvar isInteger$1 = createCommonjsModule$1(function (module) {\nmodule.exports = { \"default\": isInteger$2, __esModule: true };\n});\n\nunwrapExports$1(isInteger$1);\n\nvar _stringWs = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n\nvar space = '[' + _stringWs + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = _fails$1(function () {\n return !!_stringWs[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : _stringWs[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n _export$1(_export$1.P + _export$1.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(_defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nvar _stringTrim = exporter;\n\nvar $parseFloat = _global$1.parseFloat;\nvar $trim = _stringTrim.trim;\n\nvar _parseFloat$3 = 1 / $parseFloat(_stringWs + '-0') !== -Infinity ? function parseFloat(str) {\n var string = $trim(String(str), 3);\n var result = $parseFloat(string);\n return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n\n// 20.1.2.12 Number.parseFloat(string)\n_export$1(_export$1.S + _export$1.F * (Number.parseFloat != _parseFloat$3), 'Number', { parseFloat: _parseFloat$3 });\n\nvar _parseFloat$1 = parseFloat;\n\nvar _parseFloat = createCommonjsModule$1(function (module) {\nmodule.exports = { \"default\": _parseFloat$1, __esModule: true };\n});\n\nunwrapExports$1(_parseFloat);\n\n/**\n * toxic-predicate-functions v0.1.5\n * (c) 2017 toxic-johann\n * Released under MIT\n */\n\n/**\n * is void element or not ? Means it will return true when val is undefined or null\n */\nfunction isVoid(obj) {\n return obj === undefined || obj === null;\n}\n/**\n * to check whether a variable is array\n */\nfunction isArray$2(arr) {\n return Array.isArray(arr);\n}\n\n/**\n * is it a function or not\n */\nfunction isFunction(obj) {\n return typeof obj === 'function';\n}\n\n/**\n * is it an object or not\n */\nfunction isObject$1(obj) {\n // incase of arrow function and array\n return Object(obj) === obj && String(obj) === '[object Object]' && !isFunction(obj) && !isArray$2(obj);\n}\n/**\n * to tell you if it's a real number\n */\nfunction isNumber(obj) {\n return typeof obj === 'number';\n}\n/**\n * is it a string\n */\nfunction isString(str) {\n return typeof str === 'string' || str instanceof String;\n}\n/**\n * is Boolean or not\n */\nfunction isBoolean(bool) {\n return typeof bool === 'boolean';\n}\n/**\n * is Primitive type or not, whick means it will return true when data is number/string/boolean/undefined/null\n */\nfunction isPrimitive(val) {\n return isVoid(val) || isBoolean(val) || isString(val) || isNumber(val);\n}\n\n/**\n * chimee-helper-log v0.1.2\n * (c) 2017 toxic-johann\n * Released under MIT\n */\n\nfunction formatter(tag, msg) {\n if (!isString(tag)) throw new TypeError('Log\\'s method only acccept string as argument, but not ' + tag + ' in ' + (typeof tag === 'undefined' ? 'undefined' : _typeof(tag)));\n if (!isString(msg)) return '[' + Log.GLOBAL_TAG + '] > ' + tag;\n tag = Log.FORCE_GLOBAL_TAG ? Log.GLOBAL_TAG : tag || Log.GLOBAL_TAG;\n return '[' + tag + '] > ' + msg;\n}\n/**\n * Log Object\n */\n\nvar Log = function () {\n function Log() {\n _classCallCheck$1(this, Log);\n }\n\n _createClass$1(Log, null, [{\n key: 'error',\n\n /**\n * equal to console.error, output `[${tag}] > {$msg}`\n * @param {string} tag optional, the header of log \n * @param {string} msg the message\n */\n\n /**\n * @member {boolean}\n */\n\n /**\n * @member {boolean}\n */\n\n /**\n * @member {boolean}\n */\n value: function error(tag, msg) {\n if (!Log.ENABLE_ERROR) {\n return;\n }\n\n (console.error || console.warn || console.log)(formatter(tag, msg));\n }\n /**\n * equal to console.info, output `[${tag}] > {$msg}`\n * @param {string} tag optional, the header of log \n * @param {string} msg the message\n */\n\n /**\n * @member {boolean}\n */\n\n /**\n * @member {boolean}\n */\n\n /**\n * @member {boolean}\n */\n\n /**\n * @member {string}\n */\n\n }, {\n key: 'info',\n value: function info(tag, msg) {\n if (!Log.ENABLE_INFO) {\n return;\n }\n (console.info || console.log)(formatter(tag, msg));\n }\n /**\n * equal to console.warn, output `[${tag}] > {$msg}`\n * @param {string} tag optional, the header of log \n * @param {string} msg the message\n */\n\n }, {\n key: 'warn',\n value: function warn(tag, msg) {\n if (!Log.ENABLE_WARN) {\n return;\n }\n (console.warn || console.log)(formatter(tag, msg));\n }\n /**\n * equal to console.debug, output `[${tag}] > {$msg}`\n * @param {string} tag optional, the header of log \n * @param {string} msg the message\n */\n\n }, {\n key: 'debug',\n value: function debug(tag, msg) {\n if (!Log.ENABLE_DEBUG) {\n return;\n }\n (console.debug || console.log)(formatter(tag, msg));\n }\n /**\n * equal to console.verbose, output `[${tag}] > {$msg}`\n * @param {string} tag optional, the header of log \n * @param {string} msg the message\n */\n\n }, {\n key: 'verbose',\n value: function verbose(tag, msg) {\n if (!Log.ENABLE_VERBOSE) {\n return;\n }\n console.log(formatter(tag, msg));\n }\n }]);\n\n return Log;\n}();\n\nLog.GLOBAL_TAG = 'chimee';\nLog.FORCE_GLOBAL_TAG = false;\nLog.ENABLE_ERROR = true;\nLog.ENABLE_INFO = true;\nLog.ENABLE_WARN = true;\nLog.ENABLE_DEBUG = true;\nLog.ENABLE_VERBOSE = true;\n\nvar uaParser = createCommonjsModule$1(function (module, exports) {\n/**\n * UAParser.js v0.7.17\n * Lightweight JavaScript-based User-Agent string parser\n * https://github.com/faisalman/ua-parser-js\n *\n * Copyright © 2012-2016 Faisal Salman \n * Dual licensed under GPLv2 & MIT\n */\n\n(function (window, undefined) {\n\n var LIBVERSION = '0.7.17',\n EMPTY = '',\n UNKNOWN = '?',\n FUNC_TYPE = 'function',\n UNDEF_TYPE = 'undefined',\n OBJ_TYPE = 'object',\n STR_TYPE = 'string',\n MAJOR = 'major', // deprecated\n MODEL = 'model',\n NAME = 'name',\n TYPE = 'type',\n VENDOR = 'vendor',\n VERSION = 'version',\n ARCHITECTURE= 'architecture',\n CONSOLE = 'console',\n MOBILE = 'mobile',\n TABLET = 'tablet',\n SMARTTV = 'smarttv',\n WEARABLE = 'wearable',\n EMBEDDED = 'embedded';\n\n\n ///////////\n // Helper\n //////////\n\n\n var util = {\n extend : function (regexes, extensions) {\n var margedRegexes = {};\n for (var i in regexes) {\n if (extensions[i] && extensions[i].length % 2 === 0) {\n margedRegexes[i] = extensions[i].concat(regexes[i]);\n } else {\n margedRegexes[i] = regexes[i];\n }\n }\n return margedRegexes;\n },\n has : function (str1, str2) {\n if (typeof str1 === \"string\") {\n return str2.toLowerCase().indexOf(str1.toLowerCase()) !== -1;\n } else {\n return false;\n }\n },\n lowerize : function (str) {\n return str.toLowerCase();\n },\n major : function (version) {\n return typeof(version) === STR_TYPE ? version.replace(/[^\\d\\.]/g,'').split(\".\")[0] : undefined;\n },\n trim : function (str) {\n return str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n }\n };\n\n\n ///////////////\n // Map helper\n //////////////\n\n\n var mapper = {\n\n rgx : function (ua, arrays) {\n\n //var result = {},\n var i = 0, j, k, p, q, matches, match;//, args = arguments;\n\n /*// construct object barebones\n for (p = 0; p < args[1].length; p++) {\n q = args[1][p];\n result[typeof q === OBJ_TYPE ? q[0] : q] = undefined;\n }*/\n\n // loop through all regexes maps\n while (i < arrays.length && !matches) {\n\n var regex = arrays[i], // even sequence (0,2,4,..)\n props = arrays[i + 1]; // odd sequence (1,3,5,..)\n j = k = 0;\n\n // try matching uastring with regexes\n while (j < regex.length && !matches) {\n\n matches = regex[j++].exec(ua);\n\n if (!!matches) {\n for (p = 0; p < props.length; p++) {\n match = matches[++k];\n q = props[p];\n // check if given property is actually array\n if (typeof q === OBJ_TYPE && q.length > 0) {\n if (q.length == 2) {\n if (typeof q[1] == FUNC_TYPE) {\n // assign modified match\n this[q[0]] = q[1].call(this, match);\n } else {\n // assign given value, ignore regex match\n this[q[0]] = q[1];\n }\n } else if (q.length == 3) {\n // check whether function or regex\n if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {\n // call function (usually string mapper)\n this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;\n } else {\n // sanitize match using given regex\n this[q[0]] = match ? match.replace(q[1], q[2]) : undefined;\n }\n } else if (q.length == 4) {\n this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;\n }\n } else {\n this[q] = match ? match : undefined;\n }\n }\n }\n }\n i += 2;\n }\n // console.log(this);\n //return this;\n },\n\n str : function (str, map) {\n\n for (var i in map) {\n // check if array\n if (typeof map[i] === OBJ_TYPE && map[i].length > 0) {\n for (var j = 0; j < map[i].length; j++) {\n if (util.has(map[i][j], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n } else if (util.has(map[i], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n return str;\n }\n };\n\n\n ///////////////\n // String map\n //////////////\n\n\n var maps = {\n\n browser : {\n oldsafari : {\n version : {\n '1.0' : '/8',\n '1.2' : '/1',\n '1.3' : '/3',\n '2.0' : '/412',\n '2.0.2' : '/416',\n '2.0.3' : '/417',\n '2.0.4' : '/419',\n '?' : '/'\n }\n }\n },\n\n device : {\n amazon : {\n model : {\n 'Fire Phone' : ['SD', 'KF']\n }\n },\n sprint : {\n model : {\n 'Evo Shift 4G' : '7373KT'\n },\n vendor : {\n 'HTC' : 'APA',\n 'Sprint' : 'Sprint'\n }\n }\n },\n\n os : {\n windows : {\n version : {\n 'ME' : '4.90',\n 'NT 3.11' : 'NT3.51',\n 'NT 4.0' : 'NT4.0',\n '2000' : 'NT 5.0',\n 'XP' : ['NT 5.1', 'NT 5.2'],\n 'Vista' : 'NT 6.0',\n '7' : 'NT 6.1',\n '8' : 'NT 6.2',\n '8.1' : 'NT 6.3',\n '10' : ['NT 6.4', 'NT 10.0'],\n 'RT' : 'ARM'\n }\n }\n }\n };\n\n\n //////////////\n // Regex map\n /////////////\n\n\n var regexes = {\n\n browser : [[\n\n // Presto based\n /(opera\\smini)\\/([\\w\\.-]+)/i, // Opera Mini\n /(opera\\s[mobiletab]+).+version\\/([\\w\\.-]+)/i, // Opera Mobi/Tablet\n /(opera).+version\\/([\\w\\.]+)/i, // Opera > 9.80\n /(opera)[\\/\\s]+([\\w\\.]+)/i // Opera < 9.80\n ], [NAME, VERSION], [\n\n /(opios)[\\/\\s]+([\\w\\.]+)/i // Opera mini on iphone >= 8.0\n ], [[NAME, 'Opera Mini'], VERSION], [\n\n /\\s(opr)\\/([\\w\\.]+)/i // Opera Webkit\n ], [[NAME, 'Opera'], VERSION], [\n\n // Mixed\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(lunascape|maxthon|netfront|jasmine|blazer)[\\/\\s]?([\\w\\.]+)*/i,\n // Lunascape/Maxthon/Netfront/Jasmine/Blazer\n\n // Trident based\n /(avant\\s|iemobile|slim|baidu)(?:browser)?[\\/\\s]?([\\w\\.]*)/i,\n // Avant/IEMobile/SlimBrowser/Baidu\n /(?:ms|\\()(ie)\\s([\\w\\.]+)/i, // Internet Explorer\n\n // Webkit/KHTML based\n /(rekonq)\\/([\\w\\.]+)*/i, // Rekonq\n /(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser)\\/([\\w\\.-]+)/i\n // Chromium/Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser\n ], [NAME, VERSION], [\n\n /(trident).+rv[:\\s]([\\w\\.]+).+like\\sgecko/i // IE11\n ], [[NAME, 'IE'], VERSION], [\n\n /(edge)\\/((\\d+)?[\\w\\.]+)/i // Microsoft Edge\n ], [NAME, VERSION], [\n\n /(yabrowser)\\/([\\w\\.]+)/i // Yandex\n ], [[NAME, 'Yandex'], VERSION], [\n\n /(puffin)\\/([\\w\\.]+)/i // Puffin\n ], [[NAME, 'Puffin'], VERSION], [\n\n /((?:[\\s\\/])uc?\\s?browser|(?:juc.+)ucweb)[\\/\\s]?([\\w\\.]+)/i\n // UCBrowser\n ], [[NAME, 'UCBrowser'], VERSION], [\n\n /(comodo_dragon)\\/([\\w\\.]+)/i // Comodo Dragon\n ], [[NAME, /_/g, ' '], VERSION], [\n\n /(micromessenger)\\/([\\w\\.]+)/i // WeChat\n ], [[NAME, 'WeChat'], VERSION], [\n\n /(QQ)\\/([\\d\\.]+)/i // QQ, aka ShouQ\n ], [NAME, VERSION], [\n\n /m?(qqbrowser)[\\/\\s]?([\\w\\.]+)/i // QQBrowser\n ], [NAME, VERSION], [\n\n /xiaomi\\/miuibrowser\\/([\\w\\.]+)/i // MIUI Browser\n ], [VERSION, [NAME, 'MIUI Browser']], [\n\n /;fbav\\/([\\w\\.]+);/i // Facebook App for iOS & Android\n ], [VERSION, [NAME, 'Facebook']], [\n\n /headlesschrome(?:\\/([\\w\\.]+)|\\s)/i // Chrome Headless\n ], [VERSION, [NAME, 'Chrome Headless']], [\n\n /\\swv\\).+(chrome)\\/([\\w\\.]+)/i // Chrome WebView\n ], [[NAME, /(.+)/, '$1 WebView'], VERSION], [\n\n /((?:oculus|samsung)browser)\\/([\\w\\.]+)/i\n ], [[NAME, /(.+(?:g|us))(.+)/, '$1 $2'], VERSION], [ // Oculus / Samsung Browser\n\n /android.+version\\/([\\w\\.]+)\\s+(?:mobile\\s?safari|safari)*/i // Android Browser\n ], [VERSION, [NAME, 'Android Browser']], [\n\n /(chrome|omniweb|arora|[tizenoka]{5}\\s?browser)\\/v?([\\w\\.]+)/i\n // Chrome/OmniWeb/Arora/Tizen/Nokia\n ], [NAME, VERSION], [\n\n /(dolfin)\\/([\\w\\.]+)/i // Dolphin\n ], [[NAME, 'Dolphin'], VERSION], [\n\n /((?:android.+)crmo|crios)\\/([\\w\\.]+)/i // Chrome for Android/iOS\n ], [[NAME, 'Chrome'], VERSION], [\n\n /(coast)\\/([\\w\\.]+)/i // Opera Coast\n ], [[NAME, 'Opera Coast'], VERSION], [\n\n /fxios\\/([\\w\\.-]+)/i // Firefox for iOS\n ], [VERSION, [NAME, 'Firefox']], [\n\n /version\\/([\\w\\.]+).+?mobile\\/\\w+\\s(safari)/i // Mobile Safari\n ], [VERSION, [NAME, 'Mobile Safari']], [\n\n /version\\/([\\w\\.]+).+?(mobile\\s?safari|safari)/i // Safari & Safari Mobile\n ], [VERSION, NAME], [\n\n /webkit.+?(gsa)\\/([\\w\\.]+).+?(mobile\\s?safari|safari)(\\/[\\w\\.]+)/i // Google Search Appliance on iOS\n ], [[NAME, 'GSA'], VERSION], [\n\n /webkit.+?(mobile\\s?safari|safari)(\\/[\\w\\.]+)/i // Safari < 3.0\n ], [NAME, [VERSION, mapper.str, maps.browser.oldsafari.version]], [\n\n /(konqueror)\\/([\\w\\.]+)/i, // Konqueror\n /(webkit|khtml)\\/([\\w\\.]+)/i\n ], [NAME, VERSION], [\n\n // Gecko based\n /(navigator|netscape)\\/([\\w\\.-]+)/i // Netscape\n ], [[NAME, 'Netscape'], VERSION], [\n /(swiftfox)/i, // Swiftfox\n /(icedragon|iceweasel|camino|chimera|fennec|maemo\\sbrowser|minimo|conkeror)[\\/\\s]?([\\w\\.\\+]+)/i,\n // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror\n /(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix)\\/([\\w\\.-]+)/i,\n // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix\n /(mozilla)\\/([\\w\\.]+).+rv\\:.+gecko\\/\\d+/i, // Mozilla\n\n // Other\n /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir)[\\/\\s]?([\\w\\.]+)/i,\n // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir\n /(links)\\s\\(([\\w\\.]+)/i, // Links\n /(gobrowser)\\/?([\\w\\.]+)*/i, // GoBrowser\n /(ice\\s?browser)\\/v?([\\w\\._]+)/i, // ICE Browser\n /(mosaic)[\\/\\s]([\\w\\.]+)/i // Mosaic\n ], [NAME, VERSION]\n\n /* /////////////////////\n // Media players BEGIN\n ////////////////////////\n\n , [\n\n /(apple(?:coremedia|))\\/((\\d+)[\\w\\._]+)/i, // Generic Apple CoreMedia\n /(coremedia) v((\\d+)[\\w\\._]+)/i\n ], [NAME, VERSION], [\n\n /(aqualung|lyssna|bsplayer)\\/((\\d+)?[\\w\\.-]+)/i // Aqualung/Lyssna/BSPlayer\n ], [NAME, VERSION], [\n\n /(ares|ossproxy)\\s((\\d+)[\\w\\.-]+)/i // Ares/OSSProxy\n ], [NAME, VERSION], [\n\n /(audacious|audimusicstream|amarok|bass|core|dalvik|gnomemplayer|music on console|nsplayer|psp-internetradioplayer|videos)\\/((\\d+)[\\w\\.-]+)/i,\n // Audacious/AudiMusicStream/Amarok/BASS/OpenCORE/Dalvik/GnomeMplayer/MoC\n // NSPlayer/PSP-InternetRadioPlayer/Videos\n /(clementine|music player daemon)\\s((\\d+)[\\w\\.-]+)/i, // Clementine/MPD\n /(lg player|nexplayer)\\s((\\d+)[\\d\\.]+)/i,\n /player\\/(nexplayer|lg player)\\s((\\d+)[\\w\\.-]+)/i // NexPlayer/LG Player\n ], [NAME, VERSION], [\n /(nexplayer)\\s((\\d+)[\\w\\.-]+)/i // Nexplayer\n ], [NAME, VERSION], [\n\n /(flrp)\\/((\\d+)[\\w\\.-]+)/i // Flip Player\n ], [[NAME, 'Flip Player'], VERSION], [\n\n /(fstream|nativehost|queryseekspider|ia-archiver|facebookexternalhit)/i\n // FStream/NativeHost/QuerySeekSpider/IA Archiver/facebookexternalhit\n ], [NAME], [\n\n /(gstreamer) souphttpsrc (?:\\([^\\)]+\\)){0,1} libsoup\\/((\\d+)[\\w\\.-]+)/i\n // Gstreamer\n ], [NAME, VERSION], [\n\n /(htc streaming player)\\s[\\w_]+\\s\\/\\s((\\d+)[\\d\\.]+)/i, // HTC Streaming Player\n /(java|python-urllib|python-requests|wget|libcurl)\\/((\\d+)[\\w\\.-_]+)/i,\n // Java/urllib/requests/wget/cURL\n /(lavf)((\\d+)[\\d\\.]+)/i // Lavf (FFMPEG)\n ], [NAME, VERSION], [\n\n /(htc_one_s)\\/((\\d+)[\\d\\.]+)/i // HTC One S\n ], [[NAME, /_/g, ' '], VERSION], [\n\n /(mplayer)(?:\\s|\\/)(?:(?:sherpya-){0,1}svn)(?:-|\\s)(r\\d+(?:-\\d+[\\w\\.-]+){0,1})/i\n // MPlayer SVN\n ], [NAME, VERSION], [\n\n /(mplayer)(?:\\s|\\/|[unkow-]+)((\\d+)[\\w\\.-]+)/i // MPlayer\n ], [NAME, VERSION], [\n\n /(mplayer)/i, // MPlayer (no other info)\n /(yourmuze)/i, // YourMuze\n /(media player classic|nero showtime)/i // Media Player Classic/Nero ShowTime\n ], [NAME], [\n\n /(nero (?:home|scout))\\/((\\d+)[\\w\\.-]+)/i // Nero Home/Nero Scout\n ], [NAME, VERSION], [\n\n /(nokia\\d+)\\/((\\d+)[\\w\\.-]+)/i // Nokia\n ], [NAME, VERSION], [\n\n /\\s(songbird)\\/((\\d+)[\\w\\.-]+)/i // Songbird/Philips-Songbird\n ], [NAME, VERSION], [\n\n /(winamp)3 version ((\\d+)[\\w\\.-]+)/i, // Winamp\n /(winamp)\\s((\\d+)[\\w\\.-]+)/i,\n /(winamp)mpeg\\/((\\d+)[\\w\\.-]+)/i\n ], [NAME, VERSION], [\n\n /(ocms-bot|tapinradio|tunein radio|unknown|winamp|inlight radio)/i // OCMS-bot/tap in radio/tunein/unknown/winamp (no other info)\n // inlight radio\n ], [NAME], [\n\n /(quicktime|rma|radioapp|radioclientapplication|soundtap|totem|stagefright|streamium)\\/((\\d+)[\\w\\.-]+)/i\n // QuickTime/RealMedia/RadioApp/RadioClientApplication/\n // SoundTap/Totem/Stagefright/Streamium\n ], [NAME, VERSION], [\n\n /(smp)((\\d+)[\\d\\.]+)/i // SMP\n ], [NAME, VERSION], [\n\n /(vlc) media player - version ((\\d+)[\\w\\.]+)/i, // VLC Videolan\n /(vlc)\\/((\\d+)[\\w\\.-]+)/i,\n /(xbmc|gvfs|xine|xmms|irapp)\\/((\\d+)[\\w\\.-]+)/i, // XBMC/gvfs/Xine/XMMS/irapp\n /(foobar2000)\\/((\\d+)[\\d\\.]+)/i, // Foobar2000\n /(itunes)\\/((\\d+)[\\d\\.]+)/i // iTunes\n ], [NAME, VERSION], [\n\n /(wmplayer)\\/((\\d+)[\\w\\.-]+)/i, // Windows Media Player\n /(windows-media-player)\\/((\\d+)[\\w\\.-]+)/i\n ], [[NAME, /-/g, ' '], VERSION], [\n\n /windows\\/((\\d+)[\\w\\.-]+) upnp\\/[\\d\\.]+ dlnadoc\\/[\\d\\.]+ (home media server)/i\n // Windows Media Server\n ], [VERSION, [NAME, 'Windows']], [\n\n /(com\\.riseupradioalarm)\\/((\\d+)[\\d\\.]*)/i // RiseUP Radio Alarm\n ], [NAME, VERSION], [\n\n /(rad.io)\\s((\\d+)[\\d\\.]+)/i, // Rad.io\n /(radio.(?:de|at|fr))\\s((\\d+)[\\d\\.]+)/i\n ], [[NAME, 'rad.io'], VERSION]\n\n //////////////////////\n // Media players END\n ////////////////////*/\n\n ],\n\n cpu : [[\n\n /(?:(amd|x(?:(?:86|64)[_-])?|wow|win)64)[;\\)]/i // AMD64\n ], [[ARCHITECTURE, 'amd64']], [\n\n /(ia32(?=;))/i // IA32 (quicktime)\n ], [[ARCHITECTURE, util.lowerize]], [\n\n /((?:i[346]|x)86)[;\\)]/i // IA32\n ], [[ARCHITECTURE, 'ia32']], [\n\n // PocketPC mistakenly identified as PowerPC\n /windows\\s(ce|mobile);\\sppc;/i\n ], [[ARCHITECTURE, 'arm']], [\n\n /((?:ppc|powerpc)(?:64)?)(?:\\smac|;|\\))/i // PowerPC\n ], [[ARCHITECTURE, /ower/, '', util.lowerize]], [\n\n /(sun4\\w)[;\\)]/i // SPARC\n ], [[ARCHITECTURE, 'sparc']], [\n\n /((?:avr32|ia64(?=;))|68k(?=\\))|arm(?:64|(?=v\\d+;))|(?=atmel\\s)avr|(?:irix|mips|sparc)(?:64)?(?=;)|pa-risc)/i\n // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC\n ], [[ARCHITECTURE, util.lowerize]]\n ],\n\n device : [[\n\n /\\((ipad|playbook);[\\w\\s\\);-]+(rim|apple)/i // iPad/PlayBook\n ], [MODEL, VENDOR, [TYPE, TABLET]], [\n\n /applecoremedia\\/[\\w\\.]+ \\((ipad)/ // iPad\n ], [MODEL, [VENDOR, 'Apple'], [TYPE, TABLET]], [\n\n /(apple\\s{0,1}tv)/i // Apple TV\n ], [[MODEL, 'Apple TV'], [VENDOR, 'Apple']], [\n\n /(archos)\\s(gamepad2?)/i, // Archos\n /(hp).+(touchpad)/i, // HP TouchPad\n /(hp).+(tablet)/i, // HP Tablet\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /\\s(nook)[\\w\\s]+build\\/(\\w+)/i, // Nook\n /(dell)\\s(strea[kpr\\s\\d]*[\\dko])/i // Dell Streak\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /(kf[A-z]+)\\sbuild\\/[\\w\\.]+.*silk\\//i // Kindle Fire HD\n ], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [\n /(sd|kf)[0349hijorstuw]+\\sbuild\\/[\\w\\.]+.*silk\\//i // Fire Phone\n ], [[MODEL, mapper.str, maps.device.amazon.model], [VENDOR, 'Amazon'], [TYPE, MOBILE]], [\n\n /\\((ip[honed|\\s\\w*]+);.+(apple)/i // iPod/iPhone\n ], [MODEL, VENDOR, [TYPE, MOBILE]], [\n /\\((ip[honed|\\s\\w*]+);/i // iPod/iPhone\n ], [MODEL, [VENDOR, 'Apple'], [TYPE, MOBILE]], [\n\n /(blackberry)[\\s-]?(\\w+)/i, // BlackBerry\n /(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[\\s_-]?([\\w-]+)*/i,\n // BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron\n /(hp)\\s([\\w\\s]+\\w)/i, // HP iPAQ\n /(asus)-?(\\w+)/i // Asus\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n /\\(bb10;\\s(\\w+)/i // BlackBerry 10\n ], [MODEL, [VENDOR, 'BlackBerry'], [TYPE, MOBILE]], [\n // Asus Tablets\n /android.+(transfo[prime\\s]{4,10}\\s\\w+|eeepc|slider\\s\\w+|nexus 7|padfone)/i\n ], [MODEL, [VENDOR, 'Asus'], [TYPE, TABLET]], [\n\n /(sony)\\s(tablet\\s[ps])\\sbuild\\//i, // Sony\n /(sony)?(?:sgp.+)\\sbuild\\//i\n ], [[VENDOR, 'Sony'], [MODEL, 'Xperia Tablet'], [TYPE, TABLET]], [\n /android.+\\s([c-g]\\d{4}|so[-l]\\w+)\\sbuild\\//i\n ], [MODEL, [VENDOR, 'Sony'], [TYPE, MOBILE]], [\n\n /\\s(ouya)\\s/i, // Ouya\n /(nintendo)\\s([wids3u]+)/i // Nintendo\n ], [VENDOR, MODEL, [TYPE, CONSOLE]], [\n\n /android.+;\\s(shield)\\sbuild/i // Nvidia\n ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [\n\n /(playstation\\s[34portablevi]+)/i // Playstation\n ], [MODEL, [VENDOR, 'Sony'], [TYPE, CONSOLE]], [\n\n /(sprint\\s(\\w+))/i // Sprint Phones\n ], [[VENDOR, mapper.str, maps.device.sprint.vendor], [MODEL, mapper.str, maps.device.sprint.model], [TYPE, MOBILE]], [\n\n /(lenovo)\\s?(S(?:5000|6000)+(?:[-][\\w+]))/i // Lenovo tablets\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /(htc)[;_\\s-]+([\\w\\s]+(?=\\))|\\w+)*/i, // HTC\n /(zte)-(\\w+)*/i, // ZTE\n /(alcatel|geeksphone|lenovo|nexian|panasonic|(?=;\\s)sony)[_\\s-]?([\\w-]+)*/i\n // Alcatel/GeeksPhone/Lenovo/Nexian/Panasonic/Sony\n ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [\n\n /(nexus\\s9)/i // HTC Nexus 9\n ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [\n\n /d\\/huawei([\\w\\s-]+)[;\\)]/i,\n /(nexus\\s6p)/i // Huawei\n ], [MODEL, [VENDOR, 'Huawei'], [TYPE, MOBILE]], [\n\n /(microsoft);\\s(lumia[\\s\\w]+)/i // Microsoft Lumia\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /[\\s\\(;](xbox(?:\\sone)?)[\\s\\);]/i // Microsoft Xbox\n ], [MODEL, [VENDOR, 'Microsoft'], [TYPE, CONSOLE]], [\n /(kin\\.[onetw]{3})/i // Microsoft Kin\n ], [[MODEL, /\\./g, ' '], [VENDOR, 'Microsoft'], [TYPE, MOBILE]], [\n\n // Motorola\n /\\s(milestone|droid(?:[2-4x]|\\s(?:bionic|x2|pro|razr))?(:?\\s4g)?)[\\w\\s]+build\\//i,\n /mot[\\s-]?(\\w+)*/i,\n /(XT\\d{3,4}) build\\//i,\n /(nexus\\s6)/i\n ], [MODEL, [VENDOR, 'Motorola'], [TYPE, MOBILE]], [\n /android.+\\s(mz60\\d|xoom[\\s2]{0,2})\\sbuild\\//i\n ], [MODEL, [VENDOR, 'Motorola'], [TYPE, TABLET]], [\n\n /hbbtv\\/\\d+\\.\\d+\\.\\d+\\s+\\([\\w\\s]*;\\s*(\\w[^;]*);([^;]*)/i // HbbTV devices\n ], [[VENDOR, util.trim], [MODEL, util.trim], [TYPE, SMARTTV]], [\n\n /hbbtv.+maple;(\\d+)/i\n ], [[MODEL, /^/, 'SmartTV'], [VENDOR, 'Samsung'], [TYPE, SMARTTV]], [\n\n /\\(dtv[\\);].+(aquos)/i // Sharp\n ], [MODEL, [VENDOR, 'Sharp'], [TYPE, SMARTTV]], [\n\n /android.+((sch-i[89]0\\d|shw-m380s|gt-p\\d{4}|gt-n\\d+|sgh-t8[56]9|nexus 10))/i,\n /((SM-T\\w+))/i\n ], [[VENDOR, 'Samsung'], MODEL, [TYPE, TABLET]], [ // Samsung\n /smart-tv.+(samsung)/i\n ], [VENDOR, [TYPE, SMARTTV], MODEL], [\n /((s[cgp]h-\\w+|gt-\\w+|galaxy\\snexus|sm-\\w[\\w\\d]+))/i,\n /(sam[sung]*)[\\s-]*(\\w+-?[\\w-]*)*/i,\n /sec-((sgh\\w+))/i\n ], [[VENDOR, 'Samsung'], MODEL, [TYPE, MOBILE]], [\n\n /sie-(\\w+)*/i // Siemens\n ], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [\n\n /(maemo|nokia).*(n900|lumia\\s\\d+)/i, // Nokia\n /(nokia)[\\s_-]?([\\w-]+)*/i\n ], [[VENDOR, 'Nokia'], MODEL, [TYPE, MOBILE]], [\n\n /android\\s3\\.[\\s\\w;-]{10}(a\\d{3})/i // Acer\n ], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [\n\n /android.+([vl]k\\-?\\d{3})\\s+build/i // LG Tablet\n ], [MODEL, [VENDOR, 'LG'], [TYPE, TABLET]], [\n /android\\s3\\.[\\s\\w;-]{10}(lg?)-([06cv9]{3,4})/i // LG Tablet\n ], [[VENDOR, 'LG'], MODEL, [TYPE, TABLET]], [\n /(lg) netcast\\.tv/i // LG SmartTV\n ], [VENDOR, MODEL, [TYPE, SMARTTV]], [\n /(nexus\\s[45])/i, // LG\n /lg[e;\\s\\/-]+(\\w+)*/i,\n /android.+lg(\\-?[\\d\\w]+)\\s+build/i\n ], [MODEL, [VENDOR, 'LG'], [TYPE, MOBILE]], [\n\n /android.+(ideatab[a-z0-9\\-\\s]+)/i // Lenovo\n ], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [\n\n /linux;.+((jolla));/i // Jolla\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /((pebble))app\\/[\\d\\.]+\\s/i // Pebble\n ], [VENDOR, MODEL, [TYPE, WEARABLE]], [\n\n /android.+;\\s(oppo)\\s?([\\w\\s]+)\\sbuild/i // OPPO\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /crkey/i // Google Chromecast\n ], [[MODEL, 'Chromecast'], [VENDOR, 'Google']], [\n\n /android.+;\\s(glass)\\s\\d/i // Google Glass\n ], [MODEL, [VENDOR, 'Google'], [TYPE, WEARABLE]], [\n\n /android.+;\\s(pixel c)\\s/i // Google Pixel C\n ], [MODEL, [VENDOR, 'Google'], [TYPE, TABLET]], [\n\n /android.+;\\s(pixel xl|pixel)\\s/i // Google Pixel\n ], [MODEL, [VENDOR, 'Google'], [TYPE, MOBILE]], [\n\n /android.+(\\w+)\\s+build\\/hm\\1/i, // Xiaomi Hongmi 'numeric' models\n /android.+(hm[\\s\\-_]*note?[\\s_]*(?:\\d\\w)?)\\s+build/i, // Xiaomi Hongmi\n /android.+(mi[\\s\\-_]*(?:one|one[\\s_]plus|note lte)?[\\s_]*(?:\\d\\w)?)\\s+build/i, // Xiaomi Mi\n /android.+(redmi[\\s\\-_]*(?:note)?(?:[\\s_]*[\\w\\s]+)?)\\s+build/i // Redmi Phones\n ], [[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, MOBILE]], [\n /android.+(mi[\\s\\-_]*(?:pad)?(?:[\\s_]*[\\w\\s]+)?)\\s+build/i // Mi Pad tablets\n ],[[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, TABLET]], [\n /android.+;\\s(m[1-5]\\snote)\\sbuild/i // Meizu Tablet\n ], [MODEL, [VENDOR, 'Meizu'], [TYPE, TABLET]], [\n\n /android.+a000(1)\\s+build/i // OnePlus\n ], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [\n\n /android.+[;\\/]\\s*(RCT[\\d\\w]+)\\s+build/i // RCA Tablets\n ], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(Venue[\\d\\s]*)\\s+build/i // Dell Venue Tablets\n ], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(Q[T|M][\\d\\w]+)\\s+build/i // Verizon Tablet\n ], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s+(Barnes[&\\s]+Noble\\s+|BN[RT])(V?.*)\\s+build/i // Barnes & Noble Tablet\n ], [[VENDOR, 'Barnes & Noble'], MODEL, [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s+(TM\\d{3}.*\\b)\\s+build/i // Barnes & Noble Tablet\n ], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(zte)?.+(k\\d{2})\\s+build/i // ZTE K Series Tablet\n ], [[VENDOR, 'ZTE'], MODEL, [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(gen\\d{3})\\s+build.*49h/i // Swiss GEN Mobile\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [\n\n /android.+[;\\/]\\s*(zur\\d{3})\\s+build/i // Swiss ZUR Tablet\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*((Zeki)?TB.*\\b)\\s+build/i // Zeki Tablets\n ], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [\n\n /(android).+[;\\/]\\s+([YR]\\d{2}x?.*)\\s+build/i,\n /android.+[;\\/]\\s+(Dragon[\\-\\s]+Touch\\s+|DT)(.+)\\s+build/i // Dragon Touch Tablet\n ], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(NS-?.+)\\s+build/i // Insignia Tablets\n ], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*((NX|Next)-?.+)\\s+build/i // NextBook Tablets\n ], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(Xtreme\\_?)?(V(1[045]|2[015]|30|40|60|7[05]|90))\\s+build/i\n ], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [ // Voice Xtreme Phones\n\n /android.+[;\\/]\\s*(LVTEL\\-?)?(V1[12])\\s+build/i // LvTel Phones\n ], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [\n\n /android.+[;\\/]\\s*(V(100MD|700NA|7011|917G).*\\b)\\s+build/i // Envizen Tablets\n ], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(Le[\\s\\-]+Pan)[\\s\\-]+(.*\\b)\\s+build/i // Le Pan Tablets\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(Trio[\\s\\-]*.*)\\s+build/i // MachSpeed Tablets\n ], [MODEL, [VENDOR, 'MachSpeed'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(Trinity)[\\-\\s]*(T\\d{3})\\s+build/i // Trinity Tablets\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*TU_(1491)\\s+build/i // Rotor Tablets\n ], [MODEL, [VENDOR, 'Rotor'], [TYPE, TABLET]], [\n\n /android.+(KS(.+))\\s+build/i // Amazon Kindle Tablets\n ], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [\n\n /android.+(Gigaset)[\\s\\-]+(Q.+)\\s+build/i // Gigaset Tablets\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /\\s(tablet|tab)[;\\/]/i, // Unidentifiable Tablet\n /\\s(mobile)(?:[;\\/]|\\ssafari)/i // Unidentifiable Mobile\n ], [[TYPE, util.lowerize], VENDOR, MODEL], [\n\n /(android.+)[;\\/].+build/i // Generic Android Device\n ], [MODEL, [VENDOR, 'Generic']]\n\n\n /*//////////////////////////\n // TODO: move to string map\n ////////////////////////////\n\n /(C6603)/i // Sony Xperia Z C6603\n ], [[MODEL, 'Xperia Z C6603'], [VENDOR, 'Sony'], [TYPE, MOBILE]], [\n /(C6903)/i // Sony Xperia Z 1\n ], [[MODEL, 'Xperia Z 1'], [VENDOR, 'Sony'], [TYPE, MOBILE]], [\n\n /(SM-G900[F|H])/i // Samsung Galaxy S5\n ], [[MODEL, 'Galaxy S5'], [VENDOR, 'Samsung'], [TYPE, MOBILE]], [\n /(SM-G7102)/i // Samsung Galaxy Grand 2\n ], [[MODEL, 'Galaxy Grand 2'], [VENDOR, 'Samsung'], [TYPE, MOBILE]], [\n /(SM-G530H)/i // Samsung Galaxy Grand Prime\n ], [[MODEL, 'Galaxy Grand Prime'], [VENDOR, 'Samsung'], [TYPE, MOBILE]], [\n /(SM-G313HZ)/i // Samsung Galaxy V\n ], [[MODEL, 'Galaxy V'], [VENDOR, 'Samsung'], [TYPE, MOBILE]], [\n /(SM-T805)/i // Samsung Galaxy Tab S 10.5\n ], [[MODEL, 'Galaxy Tab S 10.5'], [VENDOR, 'Samsung'], [TYPE, TABLET]], [\n /(SM-G800F)/i // Samsung Galaxy S5 Mini\n ], [[MODEL, 'Galaxy S5 Mini'], [VENDOR, 'Samsung'], [TYPE, MOBILE]], [\n /(SM-T311)/i // Samsung Galaxy Tab 3 8.0\n ], [[MODEL, 'Galaxy Tab 3 8.0'], [VENDOR, 'Samsung'], [TYPE, TABLET]], [\n\n /(T3C)/i // Advan Vandroid T3C\n ], [MODEL, [VENDOR, 'Advan'], [TYPE, TABLET]], [\n /(ADVAN T1J\\+)/i // Advan Vandroid T1J+\n ], [[MODEL, 'Vandroid T1J+'], [VENDOR, 'Advan'], [TYPE, TABLET]], [\n /(ADVAN S4A)/i // Advan Vandroid S4A\n ], [[MODEL, 'Vandroid S4A'], [VENDOR, 'Advan'], [TYPE, MOBILE]], [\n\n /(V972M)/i // ZTE V972M\n ], [MODEL, [VENDOR, 'ZTE'], [TYPE, MOBILE]], [\n\n /(i-mobile)\\s(IQ\\s[\\d\\.]+)/i // i-mobile IQ\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n /(IQ6.3)/i // i-mobile IQ IQ 6.3\n ], [[MODEL, 'IQ 6.3'], [VENDOR, 'i-mobile'], [TYPE, MOBILE]], [\n /(i-mobile)\\s(i-style\\s[\\d\\.]+)/i // i-mobile i-STYLE\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n /(i-STYLE2.1)/i // i-mobile i-STYLE 2.1\n ], [[MODEL, 'i-STYLE 2.1'], [VENDOR, 'i-mobile'], [TYPE, MOBILE]], [\n\n /(mobiistar touch LAI 512)/i // mobiistar touch LAI 512\n ], [[MODEL, 'Touch LAI 512'], [VENDOR, 'mobiistar'], [TYPE, MOBILE]], [\n\n /////////////\n // END TODO\n ///////////*/\n\n ],\n\n engine : [[\n\n /windows.+\\sedge\\/([\\w\\.]+)/i // EdgeHTML\n ], [VERSION, [NAME, 'EdgeHTML']], [\n\n /(presto)\\/([\\w\\.]+)/i, // Presto\n /(webkit|trident|netfront|netsurf|amaya|lynx|w3m)\\/([\\w\\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m\n /(khtml|tasman|links)[\\/\\s]\\(?([\\w\\.]+)/i, // KHTML/Tasman/Links\n /(icab)[\\/\\s]([23]\\.[\\d\\.]+)/i // iCab\n ], [NAME, VERSION], [\n\n /rv\\:([\\w\\.]+).*(gecko)/i // Gecko\n ], [VERSION, NAME]\n ],\n\n os : [[\n\n // Windows based\n /microsoft\\s(windows)\\s(vista|xp)/i // Windows (iTunes)\n ], [NAME, VERSION], [\n /(windows)\\snt\\s6\\.2;\\s(arm)/i, // Windows RT\n /(windows\\sphone(?:\\sos)*)[\\s\\/]?([\\d\\.\\s]+\\w)*/i, // Windows Phone\n /(windows\\smobile|windows)[\\s\\/]?([ntce\\d\\.\\s]+\\w)/i\n ], [NAME, [VERSION, mapper.str, maps.os.windows.version]], [\n /(win(?=3|9|n)|win\\s9x\\s)([nt\\d\\.]+)/i\n ], [[NAME, 'Windows'], [VERSION, mapper.str, maps.os.windows.version]], [\n\n // Mobile/Embedded OS\n /\\((bb)(10);/i // BlackBerry 10\n ], [[NAME, 'BlackBerry'], VERSION], [\n /(blackberry)\\w*\\/?([\\w\\.]+)*/i, // Blackberry\n /(tizen)[\\/\\s]([\\w\\.]+)/i, // Tizen\n /(android|webos|palm\\sos|qnx|bada|rim\\stablet\\sos|meego|contiki)[\\/\\s-]?([\\w\\.]+)*/i,\n // Android/WebOS/Palm/QNX/Bada/RIM/MeeGo/Contiki\n /linux;.+(sailfish);/i // Sailfish OS\n ], [NAME, VERSION], [\n /(symbian\\s?os|symbos|s60(?=;))[\\/\\s-]?([\\w\\.]+)*/i // Symbian\n ], [[NAME, 'Symbian'], VERSION], [\n /\\((series40);/i // Series 40\n ], [NAME], [\n /mozilla.+\\(mobile;.+gecko.+firefox/i // Firefox OS\n ], [[NAME, 'Firefox OS'], VERSION], [\n\n // Console\n /(nintendo|playstation)\\s([wids34portablevu]+)/i, // Nintendo/Playstation\n\n // GNU/Linux based\n /(mint)[\\/\\s\\(]?(\\w+)*/i, // Mint\n /(mageia|vectorlinux)[;\\s]/i, // Mageia/VectorLinux\n /(joli|[kxln]?ubuntu|debian|[open]*suse|gentoo|(?=\\s)arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus)[\\/\\s-]?(?!chrom)([\\w\\.-]+)*/i,\n // Joli/Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware\n // Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus\n /(hurd|linux)\\s?([\\w\\.]+)*/i, // Hurd/Linux\n /(gnu)\\s?([\\w\\.]+)*/i // GNU\n ], [NAME, VERSION], [\n\n /(cros)\\s[\\w]+\\s([\\w\\.]+\\w)/i // Chromium OS\n ], [[NAME, 'Chromium OS'], VERSION],[\n\n // Solaris\n /(sunos)\\s?([\\w\\.]+\\d)*/i // Solaris\n ], [[NAME, 'Solaris'], VERSION], [\n\n // BSD based\n /\\s([frentopc-]{0,4}bsd|dragonfly)\\s?([\\w\\.]+)*/i // FreeBSD/NetBSD/OpenBSD/PC-BSD/DragonFly\n ], [NAME, VERSION],[\n\n /(haiku)\\s(\\w+)/i // Haiku\n ], [NAME, VERSION],[\n\n /cfnetwork\\/.+darwin/i,\n /ip[honead]+(?:.*os\\s([\\w]+)\\slike\\smac|;\\sopera)/i // iOS\n ], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [\n\n /(mac\\sos\\sx)\\s?([\\w\\s\\.]+\\w)*/i,\n /(macintosh|mac(?=_powerpc)\\s)/i // Mac OS\n ], [[NAME, 'Mac OS'], [VERSION, /_/g, '.']], [\n\n // Other\n /((?:open)?solaris)[\\/\\s-]?([\\w\\.]+)*/i, // Solaris\n /(aix)\\s((\\d)(?=\\.|\\)|\\s)[\\w\\.]*)*/i, // AIX\n /(plan\\s9|minix|beos|os\\/2|amigaos|morphos|risc\\sos|openvms)/i,\n // Plan9/Minix/BeOS/OS2/AmigaOS/MorphOS/RISCOS/OpenVMS\n /(unix)\\s?([\\w\\.]+)*/i // UNIX\n ], [NAME, VERSION]\n ]\n };\n\n\n /////////////////\n // Constructor\n ////////////////\n /*\n var Browser = function (name, version) {\n this[NAME] = name;\n this[VERSION] = version;\n };\n var CPU = function (arch) {\n this[ARCHITECTURE] = arch;\n };\n var Device = function (vendor, model, type) {\n this[VENDOR] = vendor;\n this[MODEL] = model;\n this[TYPE] = type;\n };\n var Engine = Browser;\n var OS = Browser;\n */\n var UAParser = function (uastring, extensions) {\n\n if (typeof uastring === 'object') {\n extensions = uastring;\n uastring = undefined;\n }\n\n if (!(this instanceof UAParser)) {\n return new UAParser(uastring, extensions).getResult();\n }\n\n var ua = uastring || ((window && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY);\n var rgxmap = extensions ? util.extend(regexes, extensions) : regexes;\n //var browser = new Browser();\n //var cpu = new CPU();\n //var device = new Device();\n //var engine = new Engine();\n //var os = new OS();\n\n this.getBrowser = function () {\n var browser = { name: undefined, version: undefined };\n mapper.rgx.call(browser, ua, rgxmap.browser);\n browser.major = util.major(browser.version); // deprecated\n return browser;\n };\n this.getCPU = function () {\n var cpu = { architecture: undefined };\n mapper.rgx.call(cpu, ua, rgxmap.cpu);\n return cpu;\n };\n this.getDevice = function () {\n var device = { vendor: undefined, model: undefined, type: undefined };\n mapper.rgx.call(device, ua, rgxmap.device);\n return device;\n };\n this.getEngine = function () {\n var engine = { name: undefined, version: undefined };\n mapper.rgx.call(engine, ua, rgxmap.engine);\n return engine;\n };\n this.getOS = function () {\n var os = { name: undefined, version: undefined };\n mapper.rgx.call(os, ua, rgxmap.os);\n return os;\n };\n this.getResult = function () {\n return {\n ua : this.getUA(),\n browser : this.getBrowser(),\n engine : this.getEngine(),\n os : this.getOS(),\n device : this.getDevice(),\n cpu : this.getCPU()\n };\n };\n this.getUA = function () {\n return ua;\n };\n this.setUA = function (uastring) {\n ua = uastring;\n //browser = new Browser();\n //cpu = new CPU();\n //device = new Device();\n //engine = new Engine();\n //os = new OS();\n return this;\n };\n return this;\n };\n\n UAParser.VERSION = LIBVERSION;\n UAParser.BROWSER = {\n NAME : NAME,\n MAJOR : MAJOR, // deprecated\n VERSION : VERSION\n };\n UAParser.CPU = {\n ARCHITECTURE : ARCHITECTURE\n };\n UAParser.DEVICE = {\n MODEL : MODEL,\n VENDOR : VENDOR,\n TYPE : TYPE,\n CONSOLE : CONSOLE,\n MOBILE : MOBILE,\n SMARTTV : SMARTTV,\n TABLET : TABLET,\n WEARABLE: WEARABLE,\n EMBEDDED: EMBEDDED\n };\n UAParser.ENGINE = {\n NAME : NAME,\n VERSION : VERSION\n };\n UAParser.OS = {\n NAME : NAME,\n VERSION : VERSION\n };\n //UAParser.Utils = util;\n\n ///////////\n // Export\n //////////\n\n\n // check js environment\n if ('object' !== UNDEF_TYPE) {\n // nodejs env\n if ('object' !== UNDEF_TYPE && module.exports) {\n exports = module.exports = UAParser;\n }\n // TODO: test!!!!!!!!\n /*\n if (require && require.main === module && process) {\n // cli\n var jsonize = function (arr) {\n var res = [];\n for (var i in arr) {\n res.push(new UAParser(arr[i]).getResult());\n }\n process.stdout.write(JSON.stringify(res, null, 2) + '\\n');\n };\n if (process.stdin.isTTY) {\n // via args\n jsonize(process.argv.slice(2));\n } else {\n // via pipe\n var str = '';\n process.stdin.on('readable', function() {\n var read = process.stdin.read();\n if (read !== null) {\n str += read;\n }\n });\n process.stdin.on('end', function () {\n jsonize(str.replace(/\\n$/, '').split('\\n'));\n });\n }\n }\n */\n exports.UAParser = UAParser;\n } else {\n // requirejs env (optional)\n if (typeof(undefined) === FUNC_TYPE && undefined.amd) {\n undefined(function () {\n return UAParser;\n });\n } else if (window) {\n // browser env\n window.UAParser = UAParser;\n }\n }\n\n // jQuery/Zepto specific (optional)\n // Note:\n // In AMD env the global scope should be kept clean, but jQuery is an exception.\n // jQuery always exports to global scope, unless jQuery.noConflict(true) is used,\n // and we should catch that.\n var $ = window && (window.jQuery || window.Zepto);\n if (typeof $ !== UNDEF_TYPE) {\n var parser = new UAParser();\n $.ua = parser.getResult();\n $.ua.get = function () {\n return parser.getUA();\n };\n $.ua.set = function (uastring) {\n parser.setUA(uastring);\n var result = parser.getResult();\n for (var prop in result) {\n $.ua[prop] = result[prop];\n }\n };\n }\n\n})(typeof window === 'object' ? window : commonjsGlobal);\n});\n\nvar uaParser_1 = uaParser.UAParser;\n\n// call something on iterator step with safe closing on error\n\nvar _iterCall = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(_anObject$1(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) _anObject$1(ret.call(iterator));\n throw e;\n }\n};\n\n// check on default Array iterator\n\nvar ITERATOR$1 = _wks('iterator');\nvar ArrayProto = Array.prototype;\n\nvar _isArrayIter = function (it) {\n return it !== undefined && (_iterators.Array === it || ArrayProto[ITERATOR$1] === it);\n};\n\nvar _createProperty = function (object, index, value) {\n if (index in object) _objectDp$1.f(object, index, _propertyDesc$1(0, value));\n else object[index] = value;\n};\n\n// getting tag from 19.1.3.6 Object.prototype.toString()\n\nvar TAG$1 = _wks('toStringTag');\n// ES3 wrong here\nvar ARG = _cof(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 (e) { /* empty */ }\n};\n\nvar _classof = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG$1)) == 'string' ? T\n // builtinTag case\n : ARG ? _cof(O)\n // ES3 arguments fallback\n : (B = _cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n\nvar ITERATOR$2 = _wks('iterator');\n\nvar core_getIteratorMethod = _core$1.getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR$2]\n || it['@@iterator']\n || _iterators[_classof(it)];\n};\n\nvar ITERATOR$3 = _wks('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR$3]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n \n} catch (e) { /* empty */ }\n\nvar _iterDetect = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR$3]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR$3] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n\n_export$1(_export$1.S + _export$1.F * !_iterDetect(function (iter) { }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = _toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = core_getIteratorMethod(O);\n var length, result, step, iterator;\n if (mapping) mapfn = _ctx$1(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && _isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n _createProperty(result, index, mapping ? _iterCall(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = _toLength(O.length);\n for (result = new C(length); length > index; index++) {\n _createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n\nvar from$1 = _core$1.Array.from;\n\nvar from = createCommonjsModule$1(function (module) {\nmodule.exports = { \"default\": from$1, __esModule: true };\n});\n\nvar _Array$from = unwrapExports$1(from);\n\nvar toConsumableArray = createCommonjsModule$1(function (module, exports) {\nexports.__esModule = true;\n\n\n\nvar _from2 = _interopRequireDefault(from);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n } else {\n return (0, _from2.default)(arr);\n }\n};\n});\n\nvar _toConsumableArray = unwrapExports$1(toConsumableArray);\n\n/**\n * toxic-utils v0.1.6\n * (c) 2017 toxic-johann\n * Released under MIT\n */\n\n/**\n * the handler to generate an deep traversal handler\n * @param {Function} fn the function you wanna run when you reach in the deep property\n * @return {Function} the handler\n */\nfunction genTraversalHandler(fn) {\n function recursiveFn(source, target, key) {\n if (isArray$2(source) || isObject$1(source)) {\n target = isPrimitive(target) ? isObject$1(source) ? {} : [] : target;\n for (var _key in source) {\n // $FlowFixMe: support computed key here\n target[_key] = recursiveFn(source[_key], target[_key], _key);\n }\n return target;\n }\n return fn(source, target, key);\n }\n return recursiveFn;\n}\nvar _deepAssign = genTraversalHandler(function (val) {\n return val;\n});\n/**\n * merge multiple objects\n * @param {...Object} args [description]\n * @return {merge-object} [description]\n */\nfunction deepAssign() {\n for (var _len = arguments.length, args = Array(_len), _key2 = 0; _key2 < _len; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n if (args.length < 2) {\n throw new Error('deepAssign accept two and more argument');\n }\n for (var i = args.length - 1; i > -1; i--) {\n if (isPrimitive(args[i])) {\n throw new TypeError('deepAssign only accept non primitive type');\n }\n }\n var target = args.shift();\n args.forEach(function (source) {\n return _deepAssign(source, target);\n });\n return target;\n}\n\n/**\n * bind the function with some context. we have some fallback strategy here\n * @param {function} fn the function which we need to bind the context on\n * @param {any} context the context object\n */\nfunction bind(fn, context) {\n if (fn.bind) {\n return fn.bind(context);\n } else if (fn.apply) {\n return function __autobind__() {\n for (var _len2 = arguments.length, args = Array(_len2), _key3 = 0; _key3 < _len2; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n return fn.apply(context, args);\n };\n } else {\n return function __autobind__() {\n for (var _len3 = arguments.length, args = Array(_len3), _key4 = 0; _key4 < _len3; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n return fn.call.apply(fn, [context].concat(_toConsumableArray(args)));\n };\n }\n}\n\nvar _anInstance = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n\nvar _forOf = createCommonjsModule$1(function (module) {\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : core_getIteratorMethod(iterable);\n var f = _ctx$1(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (_isArrayIter(iterFn)) for (length = _toLength(iterable.length); length > index; index++) {\n result = entries ? f(_anObject$1(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = _iterCall(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n});\n\n// 7.3.20 SpeciesConstructor(O, defaultConstructor)\n\n\nvar SPECIES = _wks('species');\nvar _speciesConstructor = function (O, D) {\n var C = _anObject$1(O).constructor;\n var S;\n return C === undefined || (S = _anObject$1(C)[SPECIES]) == undefined ? D : _aFunction$1(S);\n};\n\n// fast apply, http://jsperf.lnkit.com/fast-apply/5\nvar _invoke = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n\nvar process$1 = _global$1.process;\nvar setTask = _global$1.setImmediate;\nvar clearTask = _global$1.clearImmediate;\nvar MessageChannel = _global$1.MessageChannel;\nvar Dispatch = _global$1.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer;\nvar channel;\nvar port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n _invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (_cof(process$1) == 'process') {\n defer = function (id) {\n process$1.nextTick(_ctx$1(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(_ctx$1(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = _ctx$1(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (_global$1.addEventListener && typeof postMessage == 'function' && !_global$1.importScripts) {\n defer = function (id) {\n _global$1.postMessage(id + '', '*');\n };\n _global$1.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in _domCreate$1('script')) {\n defer = function (id) {\n _html.appendChild(_domCreate$1('script'))[ONREADYSTATECHANGE] = function () {\n _html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(_ctx$1(run, id, 1), 0);\n };\n }\n}\nvar _task = {\n set: setTask,\n clear: clearTask\n};\n\nvar macrotask = _task.set;\nvar Observer = _global$1.MutationObserver || _global$1.WebKitMutationObserver;\nvar process$2 = _global$1.process;\nvar Promise = _global$1.Promise;\nvar isNode$2 = _cof(process$2) == 'process';\n\nvar _microtask = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode$2 && (parent = process$2.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode$2) {\n notify = function () {\n process$2.nextTick(flush);\n };\n // browsers with MutationObserver\n } else if (Observer) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(_global$1, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n\n// 25.4.1.5 NewPromiseCapability(C)\n\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = _aFunction$1(resolve);\n this.reject = _aFunction$1(reject);\n}\n\nvar f$8 = function (C) {\n return new PromiseCapability(C);\n};\n\nvar _newPromiseCapability = {\n\tf: f$8\n};\n\nvar _perform = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n\nvar _promiseResolve = function (C, x) {\n _anObject$1(C);\n if (_isObject$1(x) && x.constructor === C) return x;\n var promiseCapability = _newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n\nvar _redefineAll = function (target, src, safe) {\n for (var key in src) {\n if (safe && target[key]) target[key] = src[key];\n else _hide$1(target, key, src[key]);\n } return target;\n};\n\nvar SPECIES$1 = _wks('species');\n\nvar _setSpecies = function (KEY) {\n var C = typeof _core$1[KEY] == 'function' ? _core$1[KEY] : _global$1[KEY];\n if (_descriptors$1 && C && !C[SPECIES$1]) _objectDp$1.f(C, SPECIES$1, {\n configurable: true,\n get: function () { return this; }\n });\n};\n\nvar task = _task.set;\nvar microtask = _microtask();\n\n\n\nvar PROMISE = 'Promise';\nvar TypeError$1 = _global$1.TypeError;\nvar process = _global$1.process;\nvar $Promise = _global$1[PROMISE];\nvar isNode$1 = _classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal;\nvar newGenericPromiseCapability;\nvar OwnPromiseCapability;\nvar Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = _newPromiseCapability.f;\n\nvar USE_NATIVE$1 = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[_wks('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode$1 || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return _isObject$1(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError$1('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(_global$1, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = _perform(function () {\n if (isNode$1) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = _global$1.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = _global$1.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode$1 || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n if (promise._h == 1) return false;\n var chain = promise._a || promise._c;\n var i = 0;\n var reaction;\n while (chain.length > i) {\n reaction = chain[i++];\n if (reaction.fail || !isUnhandled(reaction.promise)) return false;\n } return true;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(_global$1, function () {\n var handler;\n if (isNode$1) {\n process.emit('rejectionHandled', promise);\n } else if (handler = _global$1.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError$1(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, _ctx$1($resolve, wrapper, 1), _ctx$1($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE$1) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n _anInstance(this, $Promise, PROMISE, '_h');\n _aFunction$1(executor);\n Internal.call(this);\n try {\n executor(_ctx$1($resolve, this, 1), _ctx$1($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = _redefineAll($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(_speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode$1 ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = _ctx$1($resolve, promise, 1);\n this.reject = _ctx$1($reject, promise, 1);\n };\n _newPromiseCapability.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n_export$1(_export$1.G + _export$1.W + _export$1.F * !USE_NATIVE$1, { Promise: $Promise });\n_setToStringTag($Promise, PROMISE);\n_setSpecies(PROMISE);\nWrapper = _core$1[PROMISE];\n\n// statics\n_export$1(_export$1.S + _export$1.F * !USE_NATIVE$1, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n_export$1(_export$1.S + _export$1.F * (_library || !USE_NATIVE$1), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return _promiseResolve(_library && this === Wrapper ? $Promise : this, x);\n }\n});\n_export$1(_export$1.S + _export$1.F * !(USE_NATIVE$1 && _iterDetect(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = _perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n _forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = _perform(function () {\n _forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n\n_export$1(_export$1.P + _export$1.R, 'Promise', { 'finally': function (onFinally) {\n var C = _speciesConstructor(this, _core$1.Promise || _global$1.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return _promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return _promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n\n// https://github.com/tc39/proposal-promise-try\n\n\n\n\n_export$1(_export$1.S, 'Promise', { 'try': function (callbackfn) {\n var promiseCapability = _newPromiseCapability.f(this);\n var result = _perform(callbackfn);\n (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);\n return promiseCapability.promise;\n} });\n\nvar promise$1 = _core$1.Promise;\n\nvar promise = createCommonjsModule$1(function (module) {\nmodule.exports = { \"default\": promise$1, __esModule: true };\n});\n\nunwrapExports$1(promise);\n\n/**\n * chimee-helper-utils v0.2.0\n * (c) 2017 toxic-johann\n * Released under MIT\n */\n\n// ********************** judgement ************************\n/**\n * check if the code running in browser environment (not include worker env)\n * @returns {Boolean}\n */\nvar inBrowser = typeof window !== 'undefined' && Object.prototype.toString.call(window) !== '[object Object]';\n\n// requestAnimationFrame\nvar raf = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame || window.oRequestAnimationFrame || function (cb) {\n return setTimeout(cb, 17);\n};\n\n// cancelAnimationFrame\nvar caf = window.cancelAnimationFrame || window.mozCancelAnimationFrame || window.webkitCancelAnimationFrame || window.webkitCancelRequestAnimationFrame || window.msCancelAnimationFrame || window.oCancelAnimationFrame || function (id) {\n clearTimeout(id);\n};\n\n// 根据要求的位数,将9格式化为 09\\009\\0009...\nfunction strRepeat(num, bit) {\n var pBit = bit;\n num = '' + (num || '');\n var numLen = num.length;\n bit = (bit || numLen) - numLen;\n var paddingStr = bit > 0 ? num.repeat ? '0'.repeat(bit) : new Array(bit + 1).join('0') : '';\n return (paddingStr + num).slice(0, pBit);\n}\n\n// video 时间格式化\nfunction formatTime(time) {\n var hh = Math.floor(time / 3600);\n time = Math.floor(time % 3600);\n var mm = strRepeat(Math.floor(time / 60), 2);\n time = Math.floor(time % 60);\n var ss = strRepeat(time, 2);\n return hh >= 1 ? hh + ':' + mm + ':' + ss : mm + ':' + ss;\n}\n\n// 19.1.2.1 Object.assign(target, source, ...)\n\n\n\n\n\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nvar _objectAssign = !$assign || _fails$1(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = _toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = _objectGops.f;\n var isEnum = _objectPie.f;\n while (aLen > index) {\n var S = _iobject(arguments[index++]);\n var keys = getSymbols ? _objectKeys(S).concat(getSymbols(S)) : _objectKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n\n// 19.1.3.1 Object.assign(target, source)\n\n\n_export$1(_export$1.S + _export$1.F, 'Object', { assign: _objectAssign });\n\nvar assign$1 = _core$1.Object.assign;\n\nvar assign = createCommonjsModule$1(function (module) {\nmodule.exports = { \"default\": assign$1, __esModule: true };\n});\n\nvar _Object$assign = unwrapExports$1(assign);\n\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n_export$1(_export$1.S, 'Object', { create: _objectCreate });\n\nvar $Object$2 = _core$1.Object;\nvar create$1 = function create(P, D) {\n return $Object$2.create(P, D);\n};\n\nvar create = createCommonjsModule$1(function (module) {\nmodule.exports = { \"default\": create$1, __esModule: true };\n});\n\nvar _Object$create = unwrapExports$1(create);\n\n/**\n * chimee-helper-events v0.1.0\n * (c) 2017 toxic-johann\n * Released under MIT\n */\n\n/**\n* @module event\n* @author huzunjie\n* @description 自定义事件基础类\n*/\n\n/* 缓存事件监听方法及包装,内部数据格式:\n * targetIndex_: [ [\n * function(){ ... handler ... },\n * function(){ ... handlerWrap ... handler.apply(target, arguments) ... },\n * isOnce\n * ]]\n */\nvar _evtListenerCache = _Object$create(null);\n_evtListenerCache.count = 0;\n\n/**\n * 得到某对象的某事件类型对应的监听队列数组\n * @param {Object} target 发生事件的对象\n * @param {String} type 事件类型(这里的时间类型不只是名称,还是缓存标识,可以通过添加后缀来区分)\n * @return {Array}\n */\nfunction getEvtTypeCache(target, type) {\n\n var evtId = target.__evt_id;\n if (!evtId) {\n\n /* 设置__evt_id不可枚举 */\n Object.defineProperty(target, '__evt_id', {\n writable: true,\n enumerable: false,\n configurable: true\n });\n\n /* 空对象初始化绑定索引 */\n evtId = target.__evt_id = ++_evtListenerCache.count;\n }\n\n var typeCacheKey = evtId + '_' + type;\n var evtTypeCache = _evtListenerCache[typeCacheKey];\n if (!evtTypeCache) {\n evtTypeCache = _evtListenerCache[typeCacheKey] = [];\n }\n\n return evtTypeCache;\n}\n\n/**\n * 触发事件监听方法\n * @param {Object} target 发生事件的对象\n * @param {String} type 事件类型\n * @param {Object} eventObj 触发事件时要传回的event对象\n * @return {undefined}\n */\nfunction emitEventCache(target, type, eventObj) {\n var evt = _Object$create(null);\n evt.type = type;\n evt.target = target;\n if (eventObj) {\n _Object$assign(evt, isObject$1(eventObj) ? eventObj : { data: eventObj });\n }\n getEvtTypeCache(target, type).forEach(function (item) {\n (item[1] || item[0]).apply(target, [evt]);\n });\n}\n\n/**\n * 添加事件监听到缓存\n * @param {Object} target 发生事件的对象\n * @param {String} type 事件类型\n * @param {Function} handler 监听函数\n * @param {Boolean} isOnce 是否单次执行\n * @param {Function} handlerWrap\n * @return {undefined}\n */\nfunction addEventCache(target, type, handler) {\n var isOnce = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var handlerWrap = arguments[4];\n\n if (isFunction(isOnce) && !handlerWrap) {\n handlerWrap = isOnce;\n isOnce = undefined;\n }\n var handlers = [handler, undefined, isOnce];\n if (isOnce && !handlerWrap) {\n handlerWrap = function handlerWrap() {\n removeEventCache(target, type, handler, isOnce);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n handler.apply(target, args);\n };\n }\n if (handlerWrap) {\n handlers[1] = handlerWrap;\n }\n getEvtTypeCache(target, type).push(handlers);\n}\n\n/**\n * 移除事件监听\n * @param {Object} target 发生事件的对象\n * @param {String} type 事件类型\n * @param {Function} handler 监听函数\n * @return {undefined}\n */\nfunction removeEventCache(target, type, handler) {\n var isOnce = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n var typeCache = getEvtTypeCache(target, type);\n\n if (handler || isOnce) {\n /* 有指定 handler 则清除对应监听 */\n var handlerId = -1;\n var handlerWrap = void 0;\n typeCache.find(function (item, i) {\n if ((!handler || item[0] === handler) && (!isOnce || item[2])) {\n handlerId = i;\n handlerWrap = item[1];\n return true;\n }\n });\n if (handlerId !== -1) {\n typeCache.splice(handlerId, 1);\n }\n return handlerWrap;\n } else {\n /* 未指定 handler 则清除type对应的所有监听 */\n typeCache.length = 0;\n }\n}\n\n/**\n * @class CustEvent\n * @description\n * Event 自定义事件类\n * 1. 可以使用不传参得到的实例作为eventBus使用\n * 2. 可以通过指定target,用多个实例操作同一target对象的事件管理\n * 3. 当设定target时,可以通过设置assign为true,来给target实现\"on\\once\\off\\emit\"方法\n * @param {Object} target 发生事件的对象(空则默认为event实例)\n * @param {Boolean} assign 是否将\"on\\once\\off\\emit\"方法实现到target对象上\n * @return {event}\n */\nvar CustEvent = function () {\n function CustEvent(target, assign$$1) {\n var _this = this;\n\n _classCallCheck$1(this, CustEvent);\n\n /* 设置__target不可枚举 */\n Object.defineProperty(this, '__target', {\n writable: true,\n enumerable: false,\n configurable: true\n });\n this.__target = this;\n\n if (target) {\n\n if ((typeof target === 'undefined' ? 'undefined' : _typeof(target)) !== 'object') {\n throw new Error('CusEvent target are not object');\n }\n this.__target = target;\n\n /* 为target实现on\\once\\off\\emit */\n if (assign$$1) {\n ['on', 'once', 'off', 'emit'].forEach(function (mth) {\n target[mth] = _this[mth];\n });\n }\n }\n }\n\n /**\n * 添加事件监听\n * @param {String} type 事件类型\n * @param {Function} handler 监听函数\n * @param {Boolean} isOnce 单次监听类型\n * @return {event}\n */\n\n\n _createClass$1(CustEvent, [{\n key: 'on',\n value: function on(type, handler) {\n var isOnce = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n addEventCache(this.__target, type, handler, isOnce);\n return this;\n }\n\n /**\n * 添加事件监听,并且只执行一次\n * @param {String} type 事件类型\n * @param {Function} handler 监听函数\n * @return {event}\n */\n\n }, {\n key: 'once',\n value: function once(type, handler) {\n return this.on(type, handler, true);\n }\n\n /**\n * 移除事件监听\n * @param {String} type 事件类型\n * @param {Function} handler 监听函数(不指定handler则清除type对应的所有事件监听)\n * @param {Boolean} isOnce 单次监听类型\n * @return {event}\n */\n\n }, {\n key: 'off',\n value: function off(type, handler) {\n var isOnce = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n removeEventCache(this.__target, type, handler, isOnce);\n return this;\n }\n\n /**\n * 触发事件监听函数\n * @param {String} type 事件类型\n * @return {event}\n */\n\n }, {\n key: 'emit',\n value: function emit(type, data) {\n emitEventCache(this.__target, type, { data: data });\n return this;\n }\n }]);\n\n return CustEvent;\n}();\n\n/**\n * chimee-helper-dom v0.1.7\n * (c) 2017 huzunjie\n * Released under MIT\n */\n\n/**\n * chimee-helper-events v0.1.0\n * (c) 2017 toxic-johann\n * Released under MIT\n */\n\n/**\n* @module event\n* @author huzunjie\n* @description 自定义事件基础类\n*/\n\n/* 缓存事件监听方法及包装,内部数据格式:\n * targetIndex_: [ [\n * function(){ ... handler ... },\n * function(){ ... handlerWrap ... handler.apply(target, arguments) ... },\n * isOnce\n * ]]\n */\nvar _evtListenerCache$1 = _Object$create(null);\n_evtListenerCache$1.count = 0;\n\n/**\n * 得到某对象的某事件类型对应的监听队列数组\n * @param {Object} target 发生事件的对象\n * @param {String} type 事件类型(这里的时间类型不只是名称,还是缓存标识,可以通过添加后缀来区分)\n * @return {Array}\n */\nfunction getEvtTypeCache$1(target, type) {\n\n var evtId = target.__evt_id;\n if (!evtId) {\n\n /* 设置__evt_id不可枚举 */\n Object.defineProperty(target, '__evt_id', {\n writable: true,\n enumerable: false,\n configurable: true\n });\n\n /* 空对象初始化绑定索引 */\n evtId = target.__evt_id = ++_evtListenerCache$1.count;\n }\n\n var typeCacheKey = evtId + '_' + type;\n var evtTypeCache = _evtListenerCache$1[typeCacheKey];\n if (!evtTypeCache) {\n evtTypeCache = _evtListenerCache$1[typeCacheKey] = [];\n }\n\n return evtTypeCache;\n}\n\n/**\n * 触发事件监听方法\n * @param {Object} target 发生事件的对象\n * @param {String} type 事件类型\n * @param {Object} eventObj 触发事件时要传回的event对象\n * @return {undefined}\n */\nfunction emitEventCache$1(target, type, eventObj) {\n var evt = _Object$create(null);\n evt.type = type;\n evt.target = target;\n if (eventObj) {\n _Object$assign(evt, isObject$1(eventObj) ? eventObj : { data: eventObj });\n }\n getEvtTypeCache$1(target, type).forEach(function (item) {\n (item[1] || item[0]).apply(target, [evt]);\n });\n}\n\n/**\n * 添加事件监听到缓存\n * @param {Object} target 发生事件的对象\n * @param {String} type 事件类型\n * @param {Function} handler 监听函数\n * @param {Boolean} isOnce 是否单次执行\n * @param {Function} handlerWrap\n * @return {undefined}\n */\nfunction addEventCache$1(target, type, handler) {\n var isOnce = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var handlerWrap = arguments[4];\n\n if (isFunction(isOnce) && !handlerWrap) {\n handlerWrap = isOnce;\n isOnce = undefined;\n }\n var handlers = [handler, undefined, isOnce];\n if (isOnce && !handlerWrap) {\n handlerWrap = function handlerWrap() {\n removeEventCache$1(target, type, handler, isOnce);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n handler.apply(target, args);\n };\n }\n if (handlerWrap) {\n handlers[1] = handlerWrap;\n }\n getEvtTypeCache$1(target, type).push(handlers);\n}\n\n/**\n * 移除事件监听\n * @param {Object} target 发生事件的对象\n * @param {String} type 事件类型\n * @param {Function} handler 监听函数\n * @return {undefined}\n */\nfunction removeEventCache$1(target, type, handler) {\n var isOnce = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n var typeCache = getEvtTypeCache$1(target, type);\n\n if (handler || isOnce) {\n /* 有指定 handler 则清除对应监听 */\n var handlerId = -1;\n var handlerWrap = void 0;\n typeCache.find(function (item, i) {\n if ((!handler || item[0] === handler) && (!isOnce || item[2])) {\n handlerId = i;\n handlerWrap = item[1];\n return true;\n }\n });\n if (handlerId !== -1) {\n typeCache.splice(handlerId, 1);\n }\n return handlerWrap;\n } else {\n /* 未指定 handler 则清除type对应的所有监听 */\n typeCache.length = 0;\n }\n}\n\n/**\n * @class CustEvent\n * @description\n * Event 自定义事件类\n * 1. 可以使用不传参得到的实例作为eventBus使用\n * 2. 可以通过指定target,用多个实例操作同一target对象的事件管理\n * 3. 当设定target时,可以通过设置assign为true,来给target实现\"on\\once\\off\\emit\"方法\n * @param {Object} target 发生事件的对象(空则默认为event实例)\n * @param {Boolean} assign 是否将\"on\\once\\off\\emit\"方法实现到target对象上\n * @return {event}\n */\nvar CustEvent$1 = function () {\n function CustEvent(target, assign$$1) {\n var _this = this;\n\n _classCallCheck$1(this, CustEvent);\n\n /* 设置__target不可枚举 */\n Object.defineProperty(this, '__target', {\n writable: true,\n enumerable: false,\n configurable: true\n });\n this.__target = this;\n\n if (target) {\n\n if ((typeof target === 'undefined' ? 'undefined' : _typeof(target)) !== 'object') {\n throw new Error('CusEvent target are not object');\n }\n this.__target = target;\n\n /* 为target实现on\\once\\off\\emit */\n if (assign$$1) {\n ['on', 'once', 'off', 'emit'].forEach(function (mth) {\n target[mth] = _this[mth];\n });\n }\n }\n }\n\n /**\n * 添加事件监听\n * @param {String} type 事件类型\n * @param {Function} handler 监听函数\n * @param {Boolean} isOnce 单次监听类型\n * @return {event}\n */\n\n\n _createClass$1(CustEvent, [{\n key: 'on',\n value: function on(type, handler) {\n var isOnce = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n addEventCache$1(this.__target, type, handler, isOnce);\n return this;\n }\n\n /**\n * 添加事件监听,并且只执行一次\n * @param {String} type 事件类型\n * @param {Function} handler 监听函数\n * @return {event}\n */\n\n }, {\n key: 'once',\n value: function once(type, handler) {\n return this.on(type, handler, true);\n }\n\n /**\n * 移除事件监听\n * @param {String} type 事件类型\n * @param {Function} handler 监听函数(不指定handler则清除type对应的所有事件监听)\n * @param {Boolean} isOnce 单次监听类型\n * @return {event}\n */\n\n }, {\n key: 'off',\n value: function off(type, handler) {\n var isOnce = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n removeEventCache$1(this.__target, type, handler, isOnce);\n return this;\n }\n\n /**\n * 触发事件监听函数\n * @param {String} type 事件类型\n * @return {event}\n */\n\n }, {\n key: 'emit',\n value: function emit(type, data) {\n emitEventCache$1(this.__target, type, { data: data });\n return this;\n }\n }]);\n\n return CustEvent;\n}();\n\n/**\n * chimee-helper-utils v0.2.0\n * (c) 2017 toxic-johann\n * Released under MIT\n */\n\n// ********************** judgement ************************\n/**\n * check if the code running in browser environment (not include worker env)\n * @returns {Boolean}\n */\nvar inBrowser$1 = typeof window !== 'undefined' && Object.prototype.toString.call(window) !== '[object Object]';\n\n// ********************** 对象操作 ************************\n/**\n * 转变一个类数组对象为数组\n */\nfunction makeArray$1(obj) {\n return _Array$from(obj);\n}\n\n/**\n* @module dom\n* @author huzunjie\n* @description 一些常用的DOM判断及操作方法,可以使用dom.$('*')包装DOM,实现类jQuery的链式操作;当然这里的静态方法也可以直接使用。\n*/\n\nvar _divEl = document.createElement('div');\nvar _textAttrName = 'innerText';\n'textContent' in _divEl && (_textAttrName = 'textContent');\nvar _arrPrototype = Array.prototype;\n\n/**\n * 读取HTML元素属性值\n * @param {HTMLElement} el 目标元素\n * @param {String} attrName 目标属性名称\n * @return {String}\n */\nfunction getAttr(el, attrName) {\n return el.getAttribute(attrName);\n}\n\n/**\n * 设置HTML元素属性值\n * @param {HTMLElement} el 目标元素\n * @param {String} attrName 目标属性名称\n * @param {String} attrVal 目标属性值\n */\nfunction setAttr(el, attrName, attrVal) {\n if (attrVal === undefined) {\n el.removeAttribute(attrName);\n } else {\n el.setAttribute(attrName, attrVal);\n }\n}\n\n/**\n * 为HTML元素添加className\n * @param {HTMLElement} el 目标元素\n * @param {String} cls 要添加的className(多个以空格分割)\n */\nfunction addClassName(el, cls) {\n if (!cls || !(cls = cls.trim())) {\n return;\n }\n var clsArr = cls.split(/\\s+/);\n if (el.classList) {\n clsArr.forEach(function (c) {\n return el.classList.add(c);\n });\n } else {\n var curCls = ' ' + (el.className || '') + ' ';\n clsArr.forEach(function (c) {\n curCls.indexOf(' ' + c + ' ') === -1 && (curCls += ' ' + c);\n });\n el.className = curCls.trim();\n }\n}\n\n/**\n * 为HTML元素移除className\n * @param {HTMLElement} el 目标元素\n * @param {String} cls 要移除的className(多个以空格分割)\n */\nfunction removeClassName(el, cls) {\n if (!cls || !(cls = cls.trim())) {\n return;\n }\n\n var clsArr = cls.split(/\\s+/);\n if (el.classList) {\n clsArr.forEach(function (c) {\n return el.classList.remove(c);\n });\n } else {\n var curCls = ' ' + el.className + ' ';\n clsArr.forEach(function (c) {\n var tar = ' ' + c + ' ';\n while (curCls.indexOf(tar) !== -1) {\n curCls = curCls.replace(tar, ' ');\n }\n });\n el.className = curCls.trim();\n }\n}\n\n/**\n * 检查HTML元素是否已设置className\n * @param {HTMLElement} el 目标元素\n * @param {String} className 要检查的className\n * @return {Boolean}\n */\nfunction hasClassName(el, className) {\n return new RegExp('(?:^|\\\\s)' + className + '(?=\\\\s|$)').test(el.className);\n}\n\n/**\n * addEventListener 是否已支持 passive\n * @return {Boolean}\n */\nvar supportsPassive = false;\ntry {\n var opts = Object.defineProperty({}, 'passive', {\n get: function get() {\n supportsPassive = true;\n }\n });\n window.addEventListener('test', null, opts);\n} catch (e) {}\n\n/**\n * 为HTML元素移除事件监听\n * @param {HTMLElement} el 目标元素\n * @param {String} type 事件名称\n * @param {Function} handler 处理函数\n * @param {Boolean} once 是否只监听一次\n * @param {Boolean} capture 是否在捕获阶段的监听\n */\nfunction removeEvent(el, type, handler) {\n var once = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var capture = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n if (capture !== undefined && !isBoolean(capture) && supportsPassive) {\n capture = { passive: true };\n }\n if (once) {\n /* 尝试从缓存中读取包装后的方法 */\n var handlerWrap = removeEventCache$1(el, type + '_once', handler);\n if (handlerWrap) {\n handler = handlerWrap;\n }\n }\n el.removeEventListener(type, handler, capture);\n}\n\n/**\n * 为HTML元素添加事件监听\n * @param {HTMLElement} el 目标元素\n * @param {String} type 事件名称\n * @param {Function} handler 处理函数\n * @param {Boolean} once 是否只监听一次\n * @param {Boolean} capture 是否在捕获阶段监听\n */\nfunction addEvent(el, type, handler) {\n var once = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var capture = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n if (capture !== undefined && !isBoolean(capture) && supportsPassive) {\n capture = { passive: true };\n }\n if (once) {\n var oldHandler = handler;\n handler = function () {\n return function () {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n oldHandler.apply(this, args);\n removeEvent(el, type, handler, once, capture);\n };\n }();\n /* 将包装后的方法记录到缓存中 */\n addEventCache$1(el, type + '_once', oldHandler, handler);\n }\n\n el.addEventListener(type, handler, capture);\n}\n\n/**\n * 为HTML元素添加事件代理\n * @param {HTMLElement} el 目标元素\n * @param {String} selector 要被代理的元素\n * @param {String} type 事件名称\n * @param {Function} handler 处理函数\n * @param {Boolean} capture 是否在捕获阶段监听\n */\nfunction addDelegate(el, selector, type, handler) {\n var capture = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n if (capture !== undefined && !isBoolean(capture) && supportsPassive) {\n capture = { passive: true };\n }\n var handlerWrap = function handlerWrap(e) {\n var targetElsArr = findParents(e.target || e.srcElement, el, true);\n var targetElArr = query(selector, el, true);\n var retEl = void 0;\n if (targetElArr.find) {\n retEl = targetElArr.find(function (seEl) {\n return targetElsArr.find(function (tgEl) {\n return seEl === tgEl;\n });\n });\n } else {\n // Fixed IE11 Array.find not defined bug\n targetElArr.forEach(function (seEl) {\n return !retEl && targetElsArr.forEach(function (tgEl) {\n if (!retEl && seEl === tgEl) {\n retEl = tgEl;\n }\n });\n });\n }\n retEl && handler.apply(retEl, arguments);\n };\n /* 将包装后的方法记录到缓存中 */\n addEventCache$1(el, type + '_delegate_' + selector, handler, handlerWrap);\n el.addEventListener(type, handlerWrap, capture);\n}\n\n/**\n * 为HTML元素移除事件代理\n * @param {HTMLElement} el 目标元素\n * @param {String} selector 要被代理的元素\n * @param {String} type 事件名称\n * @param {Function} handler 处理函数\n * @param {Boolean} capture 是否在捕获阶段监听\n */\nfunction removeDelegate(el, selector, type, handler) {\n var capture = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n if (capture !== undefined && !isBoolean(capture) && supportsPassive) {\n capture = { passive: true };\n }\n /* 尝试从缓存中读取包装后的方法 */\n var handlerWrap = removeEventCache$1(el, type + '_delegate_' + selector, handler);\n handlerWrap && el.removeEventListener(type, handlerWrap, capture);\n}\n\n/**\n * 读取HTML元素样式值\n * @param {HTMLElement} el 目标元素\n * @param {String} key 样式key\n * @return {String}\n */\nfunction getStyle(el, key) {\n return (el.currentStyle || document.defaultView.getComputedStyle(el, null))[key] || el.style[key];\n}\n\n/**\n * 设置HTML元素样式值\n * @param {HTMLElement} el 目标元素\n * @param {String} key 样式key\n * @param {String} val 样式值\n */\nfunction setStyle(el, key, val) {\n if (isObject$1(key)) {\n for (var k in key) {\n setStyle(el, k, key[k]);\n }\n } else {\n el.style[key] = val;\n }\n}\n\n/**\n * 根据选择器查询目标元素\n * @param {String} selector 选择器,用于 querySelectorAll\n * @param {HTMLElement} container 父容器\n * @param {Boolean} toArray 强制输出为数组\n * @return {NodeList|Array}\n */\nfunction query(selector) {\n var container = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document;\n var toArray = arguments[2];\n\n var retNodeList = container.querySelectorAll(selector);\n return toArray ? _Array$from(retNodeList) : retNodeList;\n}\n\n/**\n * 从DOM树中移除el\n * @param {HTMLElement} el 目标元素\n */\nfunction removeEl(el) {\n el.parentNode.removeChild(el);\n}\n\n/**\n * 查找元素的父节点们\n * @param {HTMLElement} el 目标元素\n * @param {HTMLElement} endEl 最大父容器(不指定则找到html)\n * @param {Boolean} haveEl 包含当前元素\n * @param {Boolean} haveEndEl 包含设定的最大父容器\n */\nfunction findParents(el) {\n var endEl = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var haveEl = arguments[2];\n var haveEndEl = arguments[3];\n\n var retEls = [];\n if (haveEl) {\n retEls.push(el);\n }\n while (el && el.parentNode !== endEl) {\n el = el.parentNode;\n el && retEls.push(el);\n }\n if (haveEndEl) {\n retEls.push(endEl);\n }\n return retEls;\n}\n\n/**\n * 根据选择器查询并得到目标元素的wrap包装器\n * @param {String} selector 选择器,另外支持 HTMLString||NodeList||NodeArray||HTMLElement\n * @param {HTMLElement} container 父容器\n * @return {Object}\n */\nfunction $(selector, container) {\n return selector.constructor === NodeWrap ? selector : new NodeWrap(selector, container);\n}\n\n/**\n * @class NodeWrap\n * @description\n * NodeWrap DOM包装器,用以实现基本的链式操作\n * new dom.NodeWrap('*') 相当于 dom.$('*')\n * 这里面用于DOM操作的属性方法都是基于上面静态方法实现,有需要可以随时修改补充\n * @param {String} selector 选择器(兼容 String||HTMLString||NodeList||NodeArray||HTMLElement)\n * @param {HTMLElement} container 父容器(默认为document)\n */\n\nvar NodeWrap = function () {\n function NodeWrap(selector) {\n var container = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document;\n\n _classCallCheck$1(this, NodeWrap);\n\n var _this = this;\n _this.selector = selector;\n\n /* String||NodeList||HTMLElement 识别处理 */\n var elsArr = void 0;\n if (selector && selector.constructor === NodeList) {\n /* 支持直接传入NodeList来构建包装器 */\n elsArr = makeArray$1(selector);\n } else if (isArray$2(selector)) {\n /* 支持直接传入Node数组来构建包装器 */\n elsArr = selector;\n } else if (isString(selector)) {\n if (selector.indexOf('<') === 0) {\n /* 支持直接传入HTML字符串来新建DOM并构建包装器 */\n _divEl.innerHTML = selector;\n elsArr = query('*', _divEl, true);\n } else {\n /* 支持直接传入字符串选择器来查找DOM并构建包装器 */\n elsArr = query(selector, container, true);\n }\n } else {\n /* 其他任意对象直接构建包装器 */\n elsArr = [selector];\n }\n _Object$assign(_this, elsArr);\n\n /* NodeWrap本意可以 extends Array省略构造方法中下面这部分代码,但目前编译不支持 */\n _this.length = elsArr.length;\n }\n\n /**\n * 循环遍历DOM集合\n * @param {Function} fn 遍历函数 fn(item, i)\n * @return {Object}\n */\n\n\n _createClass$1(NodeWrap, [{\n key: 'each',\n value: function each() {\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n _arrPrototype.forEach.apply(this, args);\n return this;\n }\n }, {\n key: 'push',\n\n\n /**\n * 添加元素到DOM集合\n * @param {HTMLElement} el 要加入的元素\n * @return {this}\n */\n value: function push() {\n for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n _arrPrototype.push.apply(this, args);\n return this;\n }\n }, {\n key: 'splice',\n\n\n /**\n * 截取DOM集合片段,并得到新的包装器splice\n * @param {Nubmer} start\n * @param {Nubmer} count\n * @return {NodeWrap} 新的DOM集合包装器\n */\n value: function splice() {\n for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n return $(_arrPrototype.splice.apply(this, args));\n }\n }, {\n key: 'find',\n\n\n /**\n * 查找子元素\n * @param {String} selector 选择器\n * @return {NodeWrap} 新的DOM集合包装器\n */\n value: function find(selector) {\n var childs = [];\n this.each(function (el) {\n childs = childs.concat(query(selector, el, true));\n });\n var childsWrap = $(childs);\n childsWrap.parent = this;\n childsWrap.selector = selector;\n return childsWrap;\n }\n\n /**\n * 添加子元素\n * @param {HTMLElement} childEls 要添加的HTML元素\n * @return {this}\n */\n\n }, {\n key: 'append',\n value: function append(childEls) {\n var childsWrap = $(childEls);\n var firstEl = this[0];\n childsWrap.each(function (newEl) {\n return firstEl.appendChild(newEl);\n });\n return this;\n }\n\n /**\n * 将元素集合添加到指定容器\n * @param {HTMLElement} parentEl 要添加到父容器\n * @return {this}\n */\n\n }, {\n key: 'appendTo',\n value: function appendTo(parentEl) {\n $(parentEl).append(this);\n return this;\n }\n\n /**\n * DOM集合text内容读写操作\n * @param {String} val 文本内容(如果有设置该参数则执行写操作,否则执行读操作)\n * @return {this}\n */\n\n }, {\n key: 'text',\n value: function text(val) {\n if (arguments.length === 0) {\n return this[0][_textAttrName];\n }\n return this.each(function (el) {\n el[_textAttrName] = val;\n });\n }\n\n /**\n * DOM集合HTML内容读写操作\n * @param {String} html html内容(如果有设置该参数则执行写操作,否则执行读操作)\n * @return {this}\n */\n\n }, {\n key: 'html',\n value: function html(_html) {\n if (arguments.length === 0) {\n return this[0].innerHTML;\n }\n return this.each(function (el) {\n el.innerHTML = _html;\n });\n }\n\n /**\n * DOM集合属性读写操作\n * @param {String} name 属性名称\n * @param {String} val 属性值(如果有设置该参数则执行写操作,否则执行读操作)\n * @return {this}\n */\n\n }, {\n key: 'attr',\n value: function attr(name, val) {\n if (arguments.length === 1) {\n return getAttr(this[0], name);\n }\n return this.each(function (el) {\n return setAttr(el, name, val);\n });\n }\n\n /**\n * DOM集合dataset读写操作\n * @param {String} key 键名\n * @param {Any} val 键值(如果有设置该参数则执行写操作,否则执行读操作)\n * @return {this}\n */\n\n }, {\n key: 'data',\n value: function data(key, val) {\n if (arguments.length === 0) {\n return this[0].dataset || {};\n }\n if (arguments.length === 1) {\n return (this[0].dataset || {})[key];\n }\n return this.each(function (el) {\n (el.dataset || (el.dataset = {}))[key] = val;\n });\n }\n\n /**\n * DOM集合样式读写操作\n * @param {String} key 样式key\n * @param {String} val 样式值(如果有设置该参数则执行写操作,否则执行读操作)\n * @return {this}\n */\n\n }, {\n key: 'css',\n value: function css(key, val) {\n if (arguments.length === 1 && !isObject$1(key)) {\n return getStyle(this[0], key);\n }\n return this.each(function (el) {\n return setStyle(el, key, val);\n });\n }\n\n /**\n * 为DOM集合增加className\n * @param {String} cls 要增加的className\n * @return {this}\n */\n\n }, {\n key: 'addClass',\n value: function addClass(cls) {\n return this.each(function (el) {\n return addClassName(el, cls);\n });\n }\n\n /**\n * 移除当前DOM集合的className\n * @param {String} cls 要移除的className\n * @return {this}\n */\n\n }, {\n key: 'removeClass',\n value: function removeClass(cls) {\n return this.each(function (el) {\n return removeClassName(el, cls);\n });\n }\n\n /**\n * 检查索引0的DOM是否有className\n * @param {String} cls 要检查的className\n * @return {this}\n */\n\n }, {\n key: 'hasClass',\n value: function hasClass(cls) {\n return hasClassName(this[0], cls);\n }\n\n /**\n * 为DOM集合添加事件监听\n * @param {String} type 事件名称\n * @param {Function} handler 处理函数\n * @param {Boolean} once 是否只监听一次\n * @param {Boolean} capture 是否在捕获阶段监听\n * @return {this}\n */\n\n }, {\n key: 'on',\n value: function on(type, handler) {\n var once = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var capture = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n return this.each(function (el) {\n return addEvent(el, type, handler, once, capture);\n });\n }\n\n /**\n * 为DOM集合解除事件监听\n * @param {String} type 事件名称\n * @param {Function} handler 处理函数\n * @param {Boolean} once 是否只监听一次\n * @param {Boolean} capture 是否在捕获阶段监听\n * @return {this}\n */\n\n }, {\n key: 'off',\n value: function off(type, handler) {\n var once = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var capture = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n return this.each(function (el) {\n return removeEvent(el, type, handler, once, capture);\n });\n }\n\n /**\n * 为DOM集合绑定事件代理\n * @param {String} selector 目标子元素选择器\n * @param {String} type 事件名称\n * @param {Function} handler 处理函数\n * @param {Boolean} capture 是否在捕获阶段监听\n * @return {this}\n */\n\n }, {\n key: 'delegate',\n value: function delegate(selector, type, handler) {\n var capture = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n return this.each(function (el) {\n return addDelegate(el, selector, type, handler, capture);\n });\n }\n\n /**\n * 为DOM集合解绑事件代理\n * @param {String} selector 目标子元素选择器\n * @param {String} type 事件名称\n * @param {Function} handler 处理函数\n * @param {Boolean} capture 是否在捕获阶段监听\n * @return {this}\n */\n\n }, {\n key: 'undelegate',\n value: function undelegate(selector, type, handler) {\n var capture = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n return this.each(function (el) {\n return removeDelegate(el, selector, type, handler, capture);\n });\n }\n\n /**\n * 从DOM树中移除\n * @return {this}\n */\n\n }, {\n key: 'remove',\n value: function remove() {\n return this.each(function (el) {\n return removeEl(el);\n });\n }\n }]);\n\n return NodeWrap;\n}();\n\n/**\n * chimee-helper v0.2.8\n * (c) 2017 toxic-johann\n * Released under MIT\n */\n\n/**\n * chimee-plugin-gesture v0.0.12\n * (c) 2017 yandeqiang\n * Released under ISC\n */\n\nfunction unwrapExports (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nvar classCallCheck = createCommonjsModule(function (module, exports) {\nexports.__esModule = true;\n\nexports.default = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n});\n\nvar _classCallCheck = unwrapExports(classCallCheck);\n\nvar _global = createCommonjsModule(function (module) {\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n});\n\nvar _core = createCommonjsModule(function (module) {\nvar core = module.exports = { version: '2.5.1' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n});\n\nvar _core_1 = _core.version;\n\nvar _aFunction = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n\n// optional / simple context binding\n\nvar _ctx = function (fn, that, length) {\n _aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\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\nvar _isObject = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\nvar _anObject = function (it) {\n if (!_isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n\nvar _fails = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n\n// Thank's IE8 for his funny defineProperty\nvar _descriptors = !_fails(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n\nvar document$1 = _global.document;\n// typeof document.createElement is 'object' in old IE\nvar is = _isObject(document$1) && _isObject(document$1.createElement);\nvar _domCreate = function (it) {\n return is ? document$1.createElement(it) : {};\n};\n\nvar _ie8DomDefine = !_descriptors && !_fails(function () {\n return Object.defineProperty(_domCreate('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n\n// 7.1.1 ToPrimitive(input [, PreferredType])\n\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nvar _toPrimitive = function (it, S) {\n if (!_isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !_isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !_isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !_isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n\nvar dP = Object.defineProperty;\n\nvar f = _descriptors ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n _anObject(O);\n P = _toPrimitive(P, true);\n _anObject(Attributes);\n if (_ie8DomDefine) try {\n return dP(O, P, Attributes);\n } catch (e) { /* 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\nvar _objectDp = {\n\tf: f\n};\n\nvar _propertyDesc = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n\nvar _hide = _descriptors ? function (object, key, value) {\n return _objectDp.f(object, key, _propertyDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var IS_WRAP = type & $export.W;\n var exports = IS_GLOBAL ? _core : _core[name] || (_core[name] = {});\n var expProto = exports[PROTOTYPE];\n var target = IS_GLOBAL ? _global : IS_STATIC ? _global[name] : (_global[name] || {})[PROTOTYPE];\n var key, own, out;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n if (own && key in exports) continue;\n // export native or passed\n out = own ? target[key] : source[key];\n // prevent global pollution for namespaces\n exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n // bind timers to global for call from export context\n : IS_BIND && own ? _ctx(out, _global)\n // wrap global constructors for prevent change them in library\n : IS_WRAP && target[key] == out ? (function (C) {\n var F = function (a, b, c) {\n if (this instanceof C) {\n switch (arguments.length) {\n case 0: return new C();\n case 1: return new C(a);\n case 2: return new C(a, b);\n } return new C(a, b, c);\n } return C.apply(this, arguments);\n };\n F[PROTOTYPE] = C[PROTOTYPE];\n return F;\n // make static versions for prototype methods\n })(out) : IS_PROTO && typeof out == 'function' ? _ctx(Function.call, out) : out;\n // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n if (IS_PROTO) {\n (exports.virtual || (exports.virtual = {}))[key] = out;\n // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n if (type & $export.R && expProto && !expProto[key]) _hide(expProto, key, out);\n }\n }\n};\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nvar _export = $export;\n\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n_export(_export.S + _export.F * !_descriptors, 'Object', { defineProperty: _objectDp.f });\n\nvar $Object = _core.Object;\nvar defineProperty$2 = function defineProperty(it, key, desc) {\n return $Object.defineProperty(it, key, desc);\n};\n\nvar defineProperty = createCommonjsModule(function (module) {\nmodule.exports = { \"default\": defineProperty$2, __esModule: true };\n});\n\nunwrapExports(defineProperty);\n\nvar createClass = createCommonjsModule(function (module, exports) {\nexports.__esModule = true;\n\n\n\nvar _defineProperty2 = _interopRequireDefault(defineProperty);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n (0, _defineProperty2.default)(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n});\n\nvar _createClass = unwrapExports(createClass);\n\nfunction getDistance(x, y, x1, y1) {\n\n return Math.sqrt(Math.pow(x1 - x, 2) + Math.pow(y1 - y, 2));\n}\n\nfunction getSpeed(s, t) {\n return s / t;\n}\n\nfunction isArray(arr) {\n return Array.isArray(arr);\n}\n\n/**\n * 手势判断组件\n * 目前判断的手势\n * 单点操作\n * tap\n * swipe\n * pan\n */\n\nvar Gesture = function () {\n function Gesture() {\n _classCallCheck(this, Gesture);\n\n // this.events = events;\n // ['tap', 'swipe', 'panstart', 'panmove', 'panend', 'press'].forEach(item => {\n // this[item] = events[item].bind(host);\n // })\n\n // 手势该有的几个状态\n // swipe tapping pressing\n\n this.startTime = 0;\n this.endTime = 0;\n this.event = {};\n this.status = '';\n }\n\n _createClass(Gesture, [{\n key: 'touchstart',\n value: function touchstart(evt) {\n // 当前 touch 点\n this.startTouch = evt.changedTouches[0];\n\n // 开始时间\n this.startTime = Date.now();\n\n this.status = 'tapping';\n }\n }, {\n key: 'touchmove',\n value: function touchmove(evt) {\n\n var touch = evt.changedTouches[0];\n\n var distance = getDistance(this.startTouch.clientX, this.startTouch.clientY, touch.clientX, touch.clientY);\n\n if (this.status === 'tapping' && distance > 10) {\n this.status = 'panning';\n this.fire('panstart', evt);\n } else if (this.status === 'panning') {\n this.fire('panmove', evt);\n }\n }\n }, {\n key: 'touchend',\n value: function touchend(evt) {\n\n this.endTouch = evt.changedTouches[0];\n\n var time = Date.now();\n var distance = getDistance(this.startTouch.clientX, this.startTouch.clientY, this.endTouch.clientX, this.endTouch.clientY);\n var interval = time - this.startTime;\n\n // 时间 <= 250ms 距离小于 10 px 则认为是 tap\n if (interval <= 250 && distance < 10) {\n this.fire('tap', evt);\n time - this.endTime < 300 && this.fire('doubletap', evt);\n }\n\n // 时间 > 250ms 距离小于 10 px 则认为是 press\n interval > 250 && distance < 10 && this.fire('press', evt);\n\n var speed = getSpeed(distance, interval);\n\n // 距离大于 10 px , 速度大于 0.3 则认为是 swipe\n speed > 0.3 && distance >= 10 && this.fire('swipe', evt);\n\n // 处于 panning 则触发 panend 事件\n this.status === 'panning' && this.fire('panend', evt);\n\n this.endTime = Date.now();\n }\n }, {\n key: 'touchcancel',\n value: function touchcancel(evt) {}\n }, {\n key: 'on',\n value: function on(type, func) {\n if (isArray(this.event[type])) {\n this.event[type].push(func);\n } else {\n this.event[type] = [func];\n }\n }\n }, {\n key: 'fire',\n value: function fire(type, evt) {\n if (!isArray(this.event[type])) return;\n this.event[type].forEach(function (item) {\n item(evt);\n });\n }\n }]);\n\n return Gesture;\n}();\n\nvar baseMobileEvent = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\nvar supportGesture = ['tap', 'swipe', 'panstart', 'panmove', 'panend', 'press', 'doubletap'];\nfunction gestureFactory() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref$name = _ref.name,\n name = _ref$name === undefined ? 'chimeeGesture' : _ref$name,\n el = _ref.el,\n _ref$level = _ref.level,\n level = _ref$level === undefined ? 0 : _ref$level,\n _ref$inner = _ref.inner,\n inner = _ref$inner === undefined ? true : _ref$inner,\n autoFocus = _ref.autoFocus,\n className = _ref.className,\n _beforeCreate = _ref.beforeCreate,\n _create = _ref.create,\n init = _ref.init,\n inited = _ref.inited,\n _destroy = _ref.destroy,\n data = _ref.data,\n computed = _ref.computed,\n _ref$events = _ref.events,\n events = _ref$events === undefined ? {} : _ref$events,\n _ref$methods = _ref.methods,\n methods = _ref$methods === undefined ? {} : _ref$methods,\n _ref$penetrate = _ref.penetrate,\n penetrate = _ref$penetrate === undefined ? false : _ref$penetrate,\n _ref$operable = _ref.operable,\n operable = _ref$operable === undefined ? true : _ref$operable;\n\n return {\n name: name,\n el: el,\n level: level,\n inner: inner,\n autoFocus: autoFocus,\n className: className,\n data: data,\n computed: computed,\n beforeCreate: function beforeCreate(config) {\n var _this = this;\n\n this.gesture = new Gesture();\n this.c_gesture = new Gesture();\n this.w_gesture = new Gesture();\n this.d_gesture = new Gesture();\n baseMobileEvent.forEach(function (item) {\n config.events[item] = function (evt) {\n _this.gesture[item](evt);\n };\n config.events['c_' + item] = function (evt) {\n _this.c_gesture[item](evt);\n };\n config.events['w_' + item] = function (evt) {\n _this.w_gesture[item](evt);\n };\n });\n\n supportGesture.forEach(function (item) {\n _this.gesture.on(item, function (evt) {\n var func = config.events[item];\n func && func.call(_this, evt);\n });\n _this.c_gesture.on(item, function (evt) {\n var func = config.events['c_' + item];\n func && func.call(_this, evt);\n });\n _this.w_gesture.on(item, function (evt) {\n var func = config.events['w_' + item];\n func && func.call(_this, evt);\n });\n _this.d_gesture.on(item, function (evt) {\n var func = config.events['d_' + item];\n func && func.call(_this, evt);\n });\n });\n\n _beforeCreate && _beforeCreate.call(this);\n },\n create: function create() {\n var _this2 = this;\n\n this._i = this._i || 0;\n this._i++;\n baseMobileEvent.forEach(function (item) {\n var key = '__' + item;\n _this2[key] = function (evt) {\n _this2.d_gesture[item](evt);\n };\n addEvent(_this2.$dom, item, _this2[key]);\n });\n\n _create && _create.call(this);\n },\n\n init: init,\n inited: inited,\n destroy: function destroy() {\n var _this3 = this;\n\n baseMobileEvent.forEach(function (item) {\n var key = '__' + item;\n removeEvent(_this3.$dom, item, _this3[key]);\n });\n\n _destroy && _destroy.call(this);\n },\n\n methods: methods,\n penetrate: penetrate,\n operable: operable,\n events: events\n };\n}\n\n// all object keys, includes non-enumerable and symbols\n\n\n\nvar Reflect = _global$1.Reflect;\nvar _ownKeys = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = _objectGopn.f(_anObject$1(it));\n var getSymbols = _objectGops.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n\n// https://github.com/tc39/proposal-object-getownpropertydescriptors\n\n\n\n\n\n\n_export$1(_export$1.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = _toIobject(object);\n var getDesc = _objectGopd.f;\n var keys = _ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) _createProperty(result, key, desc);\n }\n return result;\n }\n});\n\nvar getOwnPropertyDescriptors$2 = _core$1.Object.getOwnPropertyDescriptors;\n\nvar getOwnPropertyDescriptors$1 = createCommonjsModule$1(function (module) {\nmodule.exports = { \"default\": getOwnPropertyDescriptors$2, __esModule: true };\n});\n\nvar _Object$getOwnPropertyDescriptors = unwrapExports$1(getOwnPropertyDescriptors$1);\n\nvar getOwnPropertySymbols$1 = _core$1.Object.getOwnPropertySymbols;\n\nvar getOwnPropertySymbols = createCommonjsModule$1(function (module) {\nmodule.exports = { \"default\": getOwnPropertySymbols$1, __esModule: true };\n});\n\nvar _Object$getOwnPropertySymbols = unwrapExports$1(getOwnPropertySymbols);\n\n// 19.1.2.7 Object.getOwnPropertyNames(O)\n_objectSap('getOwnPropertyNames', function () {\n return _objectGopnExt.f;\n});\n\nvar $Object$3 = _core$1.Object;\nvar getOwnPropertyNames$1 = function getOwnPropertyNames(it) {\n return $Object$3.getOwnPropertyNames(it);\n};\n\nvar getOwnPropertyNames = createCommonjsModule$1(function (module) {\nmodule.exports = { \"default\": getOwnPropertyNames$1, __esModule: true };\n});\n\nvar _Object$getOwnPropertyNames = unwrapExports$1(getOwnPropertyNames);\n\n// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n\nvar $getOwnPropertyDescriptor$1 = _objectGopd.f;\n\n_objectSap('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor$1(_toIobject(it), key);\n };\n});\n\nvar $Object$4 = _core$1.Object;\nvar getOwnPropertyDescriptor$2$1 = function getOwnPropertyDescriptor(it, key) {\n return $Object$4.getOwnPropertyDescriptor(it, key);\n};\n\nvar getOwnPropertyDescriptor$1$1 = createCommonjsModule$1(function (module) {\nmodule.exports = { \"default\": getOwnPropertyDescriptor$2$1, __esModule: true };\n});\n\nvar _Object$getOwnPropertyDescriptor = unwrapExports$1(getOwnPropertyDescriptor$1$1);\n\nvar ITERATOR$4 = _wks('iterator');\n\nvar core_isIterable = _core$1.isIterable = function (it) {\n var O = Object(it);\n return O[ITERATOR$4] !== undefined\n || '@@iterator' in O\n // eslint-disable-next-line no-prototype-builtins\n || _iterators.hasOwnProperty(_classof(O));\n};\n\nvar isIterable$2 = core_isIterable;\n\nvar isIterable = createCommonjsModule$1(function (module) {\nmodule.exports = { \"default\": isIterable$2, __esModule: true };\n});\n\nunwrapExports$1(isIterable);\n\nvar core_getIterator = _core$1.getIterator = function (it) {\n var iterFn = core_getIteratorMethod(it);\n if (typeof iterFn != 'function') throw TypeError(it + ' is not iterable!');\n return _anObject$1(iterFn.call(it));\n};\n\nvar getIterator$2 = core_getIterator;\n\nvar getIterator = createCommonjsModule$1(function (module) {\nmodule.exports = { \"default\": getIterator$2, __esModule: true };\n});\n\nunwrapExports$1(getIterator);\n\nvar slicedToArray = createCommonjsModule$1(function (module, exports) {\nexports.__esModule = true;\n\n\n\nvar _isIterable3 = _interopRequireDefault(isIterable);\n\n\n\nvar _getIterator3 = _interopRequireDefault(getIterator);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = (0, _getIterator3.default)(arr), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if ((0, _isIterable3.default)(Object(arr))) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n}();\n});\n\nunwrapExports$1(slicedToArray);\n\n// 19.1.2.9 Object.getPrototypeOf(O)\n\n\n\n_objectSap('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return _objectGpo(_toObject(it));\n };\n});\n\nvar getPrototypeOf$1 = _core$1.Object.getPrototypeOf;\n\nvar getPrototypeOf = createCommonjsModule$1(function (module) {\nmodule.exports = { \"default\": getPrototypeOf$1, __esModule: true };\n});\n\nvar _Object$getPrototypeOf = unwrapExports$1(getPrototypeOf);\n\nvar SPECIES$2 = _wks('species');\n\nvar _arraySpeciesConstructor = function (original) {\n var C;\n if (_isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || _isArray(C.prototype))) C = undefined;\n if (_isObject$1(C)) {\n C = C[SPECIES$2];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n\n// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\n\n\nvar _arraySpeciesCreate = function (original, length) {\n return new (_arraySpeciesConstructor(original))(length);\n};\n\n// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\n\n\n\n\n\nvar _arrayMethods = function (TYPE, $create) {\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 NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || _arraySpeciesCreate;\n return function ($this, callbackfn, that) {\n var O = _toObject($this);\n var self = _iobject(O);\n var f = _ctx$1(callbackfn, that, 3);\n var length = _toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n\nvar _validateCollection = function (it, TYPE) {\n if (!_isObject$1(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n\nvar getWeak = _meta.getWeak;\n\n\n\n\n\n\n\nvar arrayFind = _arrayMethods(5);\nvar arrayFindIndex = _arrayMethods(6);\nvar id$1 = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nvar _collectionWeak = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n _anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id$1++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) _forOf(iterable, IS_MAP, that[ADDER], that);\n });\n _redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!_isObject$1(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(_validateCollection(this, NAME))['delete'](key);\n return data && _has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!_isObject$1(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(_validateCollection(this, NAME)).has(key);\n return data && _has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(_anObject$1(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n\nvar dP$3 = _objectDp$1.f;\nvar each = _arrayMethods(0);\n\n\nvar _collection = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = _global$1[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n if (!_descriptors$1 || typeof C != 'function' || !(IS_WEAK || proto.forEach && !_fails$1(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n _redefineAll(C.prototype, methods);\n _meta.NEED = true;\n } else {\n C = wrapper(function (target, iterable) {\n _anInstance(target, C, NAME, '_c');\n target._c = new Base();\n if (iterable != undefined) _forOf(iterable, IS_MAP, target[ADDER], target);\n });\n each('add,clear,delete,forEach,get,has,set,keys,values,entries,toJSON'.split(','), function (KEY) {\n var IS_ADDER = KEY == 'add' || KEY == 'set';\n if (KEY in proto && !(IS_WEAK && KEY == 'clear')) _hide$1(C.prototype, KEY, function (a, b) {\n _anInstance(this, C, KEY);\n if (!IS_ADDER && IS_WEAK && !_isObject$1(a)) return KEY == 'get' ? undefined : false;\n var result = this._c[KEY](a === 0 ? 0 : a, b);\n return IS_ADDER ? this : result;\n });\n });\n IS_WEAK || dP$3(C.prototype, 'size', {\n get: function () {\n return this._c.size;\n }\n });\n }\n\n _setToStringTag(C, NAME);\n\n O[NAME] = C;\n _export$1(_export$1.G + _export$1.W + _export$1.F, O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n\nvar es6_weakMap = createCommonjsModule$1(function (module) {\nvar each = _arrayMethods(0);\n\n\n\n\n\n\n\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = _meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = _collectionWeak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (_isObject$1(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(_validateCollection(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return _collectionWeak.def(_validateCollection(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = _collection(WEAK_MAP, wrapper, methods, _collectionWeak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (_fails$1(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = _collectionWeak.getConstructor(wrapper, WEAK_MAP);\n _objectAssign(InternalMap.prototype, methods);\n _meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n _redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (_isObject$1(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n});\n\n// https://tc39.github.io/proposal-setmap-offrom/\n\n\nvar _setCollectionOf = function (COLLECTION) {\n _export$1(_export$1.S, COLLECTION, { of: function of() {\n var length = arguments.length;\n var A = Array(length);\n while (length--) A[length] = arguments[length];\n return new this(A);\n } });\n};\n\n// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.of\n_setCollectionOf('WeakMap');\n\n// https://tc39.github.io/proposal-setmap-offrom/\n\n\n\n\n\nvar _setCollectionFrom = function (COLLECTION) {\n _export$1(_export$1.S, COLLECTION, { from: function from(source /* , mapFn, thisArg */) {\n var mapFn = arguments[1];\n var mapping, A, n, cb;\n _aFunction$1(this);\n mapping = mapFn !== undefined;\n if (mapping) _aFunction$1(mapFn);\n if (source == undefined) return new this();\n A = [];\n if (mapping) {\n n = 0;\n cb = _ctx$1(mapFn, arguments[2], 2);\n _forOf(source, false, function (nextItem) {\n A.push(cb(nextItem, n++));\n });\n } else {\n _forOf(source, false, A.push, A);\n }\n return new this(A);\n } });\n};\n\n// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.from\n_setCollectionFrom('WeakMap');\n\nvar weakMap$1 = _core$1.WeakMap;\n\nvar weakMap = createCommonjsModule$1(function (module) {\nmodule.exports = { \"default\": weakMap$1, __esModule: true };\n});\n\nvar _WeakMap = unwrapExports$1(weakMap);\n\nvar defineProperty$6$1 = createCommonjsModule$1(function (module, exports) {\nexports.__esModule = true;\n\n\n\nvar _defineProperty2 = _interopRequireDefault(defineProperty$1);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (obj, key, value) {\n if (key in obj) {\n (0, _defineProperty2.default)(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});\n\nunwrapExports$1(defineProperty$6$1);\n\n// 19.1.2.15 Object.preventExtensions(O)\n\nvar meta = _meta.onFreeze;\n\n_objectSap('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && _isObject$1(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n\nvar preventExtensions$2 = _core$1.Object.preventExtensions;\n\nvar preventExtensions$1 = createCommonjsModule$1(function (module) {\nmodule.exports = { \"default\": preventExtensions$2, __esModule: true };\n});\n\nunwrapExports$1(preventExtensions$1);\n\n/**\n * toxic-decorators v0.3.8\n * (c) 2017 toxic-johann\n * Released under GPL-3.0\n */\n\nvar getOwnPropertyDescriptor = _Object$getOwnPropertyDescriptor;\n/**\n * to check if the descirptor is an accessor descriptor\n * @param {descriptor} desc it should be a descriptor better\n */\nfunction isAccessorDescriptor(desc) {\n return !!desc && (isFunction(desc.get) || isFunction(desc.set)) && isBoolean(desc.configurable) && isBoolean(desc.enumerable) && desc.writable === undefined;\n}\n/**\n * to check if the descirptor is an data descriptor\n * @param {descriptor} desc it should be a descriptor better\n */\nfunction isDataDescriptor(desc) {\n return !!desc && desc.hasOwnProperty('value') && isBoolean(desc.configurable) && isBoolean(desc.enumerable) && isBoolean(desc.writable);\n}\n/**\n * to check if the descirptor is an initiallizer descriptor\n * @param {descriptor} desc it should be a descriptor better\n */\nfunction isInitializerDescriptor(desc) {\n return !!desc && isFunction(desc.initializer) && isBoolean(desc.configurable) && isBoolean(desc.enumerable) && isBoolean(desc.writable);\n}\n/**\n * set one value on the object\n * @param {string} key\n */\nfunction createDefaultSetter(key) {\n return function set(newValue) {\n _Object$defineProperty(this, key, {\n configurable: true,\n writable: true,\n // IS enumerable when reassigned by the outside word\n enumerable: true,\n value: newValue\n });\n return newValue;\n };\n}\n\n/**\n * Compress many function into one function, but this function only accept one arguments;\n * @param {Array} fns the array of function we need to compress into one function\n * @param {string} errmsg When we check that there is something is not function, we will throw an error, you can set your own error message\n */\nfunction compressOneArgFnArray(fns) {\n var errmsg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'You must pass me an array of function';\n\n if (!isArray$2(fns) || fns.length < 1) {\n throw new TypeError(errmsg);\n }\n if (fns.length === 1) {\n if (!isFunction(fns[0])) {\n throw new TypeError(errmsg);\n }\n return fns[0];\n }\n return fns.reduce(function (prev, curr) {\n if (!isFunction(curr) || !isFunction(prev)) throw new TypeError(errmsg);\n return function (value) {\n return bind(curr, this)(bind(prev, this)(value));\n };\n });\n}\n/**\n * just a method to call console.warn, maybe i will add some handler on it someday\n * @param {anything} args\n */\nfunction warn(message) {\n if (isFunction(console.warn)) return console.warn(message);\n console.log(message);\n}\n\nfunction getOwnKeysFn() {\n var getOwnPropertyNames$$1 = _Object$getOwnPropertyNames,\n getOwnPropertySymbols$$1 = _Object$getOwnPropertySymbols;\n\n return isFunction(getOwnPropertySymbols$$1) ? function (obj) {\n // $FlowFixMe: do not support symwbol yet\n return _Array$from(getOwnPropertyNames$$1(obj).concat(getOwnPropertySymbols$$1(obj)));\n } : getOwnPropertyNames$$1;\n}\n\nvar getOwnKeys = getOwnKeysFn();\n\nfunction getOwnPropertyDescriptorsFn() {\n // $FlowFixMe: In some environment, Object.getOwnPropertyDescriptors has been implemented;\n return isFunction(_Object$getOwnPropertyDescriptors) ? _Object$getOwnPropertyDescriptors : function (obj) {\n return getOwnKeys(obj).reduce(function (descs, key) {\n descs[key] = getOwnPropertyDescriptor(obj, key);\n return descs;\n }, {});\n };\n}\n\nvar getOwnPropertyDescriptors = getOwnPropertyDescriptorsFn();\n\nfunction compressMultipleDecorators() {\n for (var _len = arguments.length, fns = Array(_len), _key = 0; _key < _len; _key++) {\n fns[_key] = arguments[_key];\n }\n\n if (!fns.length) throw new TypeError('You must pass in decorators in compressMultipleDecorators');\n fns.forEach(function (fn) {\n if (!isFunction(fn)) throw new TypeError('Decorators must be a function, but not \"' + fn + '\" in ' + (typeof fn === 'undefined' ? 'undefined' : _typeof(fn)));\n });\n if (fns.length === 1) return fns[0];\n return function (obj, prop, descirptor) {\n // $FlowFixMe: the reduce will return a descriptor\n return fns.reduce(function (descirptor, fn) {\n return fn(obj, prop, descirptor);\n }, descirptor);\n };\n}\n\nfunction accessor() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n get = _ref.get,\n set = _ref.set;\n\n var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref2$preGet = _ref2.preGet,\n preGet = _ref2$preGet === undefined ? false : _ref2$preGet,\n _ref2$preSet = _ref2.preSet,\n preSet = _ref2$preSet === undefined ? true : _ref2$preSet;\n\n if (!isFunction(get) && !isFunction(set) && !(isArray$2(get) && get.length > 0) && !(isArray$2(set) && set.length > 0)) throw new TypeError(\"@accessor need a getter or setter. If you don't need to add setter/getter. You should remove @accessor\");\n var errmsg = '@accessor only accept function or array of function as getter/setter';\n get = isArray$2(get) ? compressOneArgFnArray(get, errmsg) : get;\n set = isArray$2(set) ? compressOneArgFnArray(set, errmsg) : set;\n return function (obj, prop, descriptor) {\n var _ref3 = descriptor || {},\n _ref3$configurable = _ref3.configurable,\n configurable = _ref3$configurable === undefined ? true : _ref3$configurable,\n _ref3$enumerable = _ref3.enumerable,\n enumerable = _ref3$enumerable === undefined ? true : _ref3$enumerable;\n\n var hasGet = isFunction(get);\n var hasSet = isFunction(set);\n var handleGet = function handleGet(value) {\n // $FlowFixMe: it's really function here\n return hasGet ? bind(get, this)(value) : value;\n };\n var handleSet = function handleSet(value) {\n // $FlowFixMe: it's really function here\n return hasSet ? bind(set, this)(value) : value;\n };\n if (isAccessorDescriptor(descriptor)) {\n var originGet = descriptor.get,\n originSet = descriptor.set;\n\n var hasOriginGet = isFunction(originGet);\n var hasOriginSet = isFunction(originSet);\n if (\"development\" !== 'production' && !hasOriginGet && hasGet) {\n warn('You are trying to set getter via @accessor on ' + prop + ' without getter. That\\'s not a good idea.');\n }\n if (\"development\" !== 'production' && !hasOriginSet && hasSet) {\n warn('You are trying to set setter via @accessor on ' + prop + ' without setter. That\\'s not a good idea.');\n }\n var getter = hasOriginGet || hasGet ? function () {\n var _this = this;\n\n var boundGetter = bind(handleGet, this);\n var originBoundGetter = function originBoundGetter() {\n return hasOriginGet\n // $FlowFixMe: we have do a check here\n ? bind(originGet, _this)() : undefined;\n };\n var order = preGet ? [boundGetter, originBoundGetter] : [originBoundGetter, boundGetter];\n // $FlowFixMe: it's all function here\n return order.reduce(function (value, fn) {\n return fn(value);\n }, undefined);\n } : undefined;\n var setter = hasOriginSet || hasSet ? function (val) {\n var _this2 = this;\n\n var boundSetter = bind(handleSet, this);\n var originBoundSetter = function originBoundSetter(value) {\n return hasOriginSet\n // $FlowFixMe: flow act like a retarded child on optional property\n ? bind(originSet, _this2)(value) : value;\n };\n var order = preSet ? [boundSetter, originBoundSetter] : [originBoundSetter, boundSetter];\n return order.reduce(function (value, fn) {\n return fn(value);\n }, val);\n } : undefined;\n return {\n get: getter,\n set: setter,\n configurable: configurable,\n enumerable: enumerable\n };\n } else if (isInitializerDescriptor(descriptor)) {\n // $FlowFixMe: disjoint union is horrible, descriptor is initializerDescriptor now\n var initializer = descriptor.initializer;\n\n var value = void 0;\n var inited = false;\n return {\n get: function get() {\n var boundFn = bind(handleGet, this);\n if (inited) return boundFn(value);\n value = bind(initializer, this)();\n inited = true;\n return boundFn(value);\n },\n set: function set(val) {\n var boundFn = bind(handleSet, this);\n value = preSet ? boundFn(val) : val;\n inited = true;\n if (!preSet) {\n boundFn(value);\n }\n return value;\n },\n\n configurable: configurable,\n enumerable: enumerable\n };\n } else {\n // $FlowFixMe: disjoint union is horrible, descriptor is DataDescriptor now\n var _ref4 = descriptor || {},\n _value = _ref4.value;\n\n return {\n get: function get() {\n return bind(handleGet, this)(_value);\n },\n set: function set(val) {\n var boundFn = bind(handleSet, this);\n _value = preSet ? boundFn(val) : val;\n if (!preSet) {\n boundFn(_value);\n }\n return _value;\n },\n\n configurable: configurable,\n enumerable: enumerable\n };\n }\n };\n}\n\nvar defineProperty$1$1 = _Object$defineProperty;\n\nfunction classify(decorator) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n requirement = _ref.requirement,\n _ref$customArgs = _ref.customArgs,\n customArgs = _ref$customArgs === undefined ? false : _ref$customArgs;\n\n return function () {\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 var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref2$exclude = _ref2.exclude,\n exclude = _ref2$exclude === undefined ? [] : _ref2$exclude,\n _ref2$include = _ref2.include,\n include = _ref2$include === undefined ? [] : _ref2$include,\n _ref2$construct = _ref2.construct,\n construct = _ref2$construct === undefined ? false : _ref2$construct,\n _ref2$self = _ref2.self,\n self = _ref2$self === undefined ? false : _ref2$self;\n\n if (!isArray$2(exclude)) throw new TypeError('options.exclude must be an array');\n if (!isArray$2(include)) throw new TypeError('options.include must be an array');\n return function (Klass) {\n var isClass = isFunction(Klass);\n if (!self && !isClass) throw new TypeError('@' + decorator.name + 'Class can only be used on class');\n if (self && isPrimitive(Klass)) throw new TypeError('@' + decorator.name + 'Class must be used on non-primitive type value in \\'self\\' mode');\n var prototype = self ? Klass : Klass.prototype;\n if (isVoid(prototype)) throw new Error('The prototype of the ' + Klass.name + ' is empty, please check it');\n var descs = getOwnPropertyDescriptors(prototype);\n getOwnKeys(prototype).concat(include).forEach(function (key) {\n var desc = descs[key];\n if (key === 'constructor' && !construct || self && isClass && ['name', 'length', 'prototype'].indexOf(key) > -1 || exclude.indexOf(key) > -1 || isFunction(requirement) && requirement(prototype, key, desc, { self: self }) === false) return;\n defineProperty$1$1(prototype, key, (customArgs ? decorator.apply(undefined, _toConsumableArray(args)) : decorator)(prototype, key, desc));\n });\n };\n };\n}\n\nvar autobindClass = classify(autobind, {\n requirement: function requirement(obj, prop, desc) {\n // $FlowFixMe: it's data descriptor now\n return isDataDescriptor(desc) && isFunction(desc.value);\n }\n});\n\nvar mapStore = void 0;\n// save bound function for super\nfunction getBoundSuper(obj, fn) {\n if (typeof _WeakMap === 'undefined') {\n throw new Error('Using @autobind on ' + fn.name + '() requires WeakMap support due to its use of super.' + fn.name + '()');\n }\n\n if (!mapStore) {\n mapStore = new _WeakMap();\n }\n\n if (mapStore.has(obj) === false) {\n mapStore.set(obj, new _WeakMap());\n }\n\n var superStore = mapStore.get(obj);\n // $FlowFixMe: already insure superStore is not undefined\n if (superStore.has(fn) === false) {\n // $FlowFixMe: already insure superStore is not undefined\n superStore.set(fn, bind(fn, obj));\n }\n // $FlowFixMe: already insure superStore is not undefined\n return superStore.get(fn);\n}\n/**\n * auto bind the function on the class, just support function\n * @param {Object} obj Target Object\n * @param {string} prop prop strong\n * @param {Object} descriptor\n */\nfunction autobind(obj, prop, descriptor) {\n if (arguments.length === 1) return autobindClass()(obj);\n\n var _ref = descriptor || {},\n fn = _ref.value,\n configurable = _ref.configurable;\n\n if (!isFunction(fn)) {\n throw new TypeError('@autobind can only be used on functions, not \"' + fn + '\" in ' + (typeof fn === 'undefined' ? 'undefined' : _typeof(fn)) + ' on property \"' + prop + '\"');\n }\n var constructor = obj.constructor;\n\n return {\n configurable: configurable,\n enumerable: false,\n get: function get() {\n var _this = this;\n\n var boundFn = function boundFn() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return fn.call.apply(fn, [_this].concat(_toConsumableArray(args)));\n };\n // Someone accesses the property directly on the prototype on which it is\n // actually defined on, i.e. Class.prototype.hasOwnProperty(key)\n if (this === obj) {\n return fn;\n }\n // Someone accesses the property directly on a prototype,\n // but it was found up the chain, not defined directly on it\n // i.e. Class.prototype.hasOwnProperty(key) == false && key in Class.prototype\n if (this.constructor !== constructor && _Object$getPrototypeOf(this).constructor === constructor) {\n return fn;\n }\n\n // Autobound method calling super.sameMethod() which is also autobound and so on.\n if (this.constructor !== constructor && prop in this.constructor.prototype) {\n return getBoundSuper(this, fn);\n }\n _Object$defineProperty(this, prop, {\n configurable: true,\n writable: true,\n // NOT enumerable when it's a bound method\n enumerable: false,\n value: boundFn\n });\n\n return boundFn;\n },\n\n set: createDefaultSetter(prop)\n };\n}\n\nvar defineProperty$6 = _Object$defineProperty;\nvar getOwnPropertyDescriptor$3 = _Object$getOwnPropertyDescriptor;\n\n\nfunction applyDecorators(Class, props) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n _ref$self = _ref.self,\n self = _ref$self === undefined ? false : _ref$self,\n _ref$omit = _ref.omit,\n omit = _ref$omit === undefined ? false : _ref$omit;\n\n var isPropsFunction = isFunction(props);\n if (isPropsFunction || isArray$2(props)) {\n // apply decorators on class\n if (!isFunction(Class)) throw new TypeError('If you want to decorator class, you must pass it a legal class');\n // $FlowFixMe: Terrible union, it's function now\n if (isPropsFunction) props(Class);else {\n // $FlowFixMe: Terrible union, it's array now\n for (var i = 0, len = props.length; i < len; i++) {\n // $FlowFixMe: Terrible union, it's array now\n var fn = props[i];\n if (!isFunction(fn)) throw new TypeError('If you want to decorate an class, you must pass it function or array of function');\n fn(Class);\n }\n }\n return Class;\n }\n if (!self && !isFunction(Class)) throw new TypeError('applyDecorators only accept class as first arguments. If you want to modify instance, you should set options.self true.');\n if (self && isPrimitive(Class)) throw new TypeError(\"We can't apply docorators on a primitive value, even in self mode\");\n if (!isObject$1(props)) throw new TypeError('applyDecorators only accept object as second arguments');\n var prototype = self ? Class : Class.prototype;\n if (isVoid(prototype)) throw new Error('The class muse have a prototype, please take a check');\n for (var key in props) {\n var value = props[key];\n var decorators = isArray$2(value) ? value : [value];\n var handler = void 0;\n try {\n handler = compressMultipleDecorators.apply(undefined, _toConsumableArray(decorators));\n } catch (err) {\n /* istanbul ignore else */\n warn(err && err.message);\n throw new Error('The decorators set on props must be Function or Array of Function');\n }\n var descriptor = getOwnPropertyDescriptor$3(prototype, key);\n if (descriptor && !descriptor.configurable) {\n if (!omit) throw new Error(key + ' of ' + prototype + ' is unconfigurable');\n continue;\n }\n defineProperty$6(prototype, key, handler(prototype, key, descriptor));\n }\n return Class;\n}\n\nvar possibleConstructorReturn = createCommonjsModule$1(function (module, exports) {\nexports.__esModule = true;\n\n\n\nvar _typeof3 = _interopRequireDefault(_typeof_1);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && ((typeof call === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(call)) === \"object\" || typeof call === \"function\") ? call : self;\n};\n});\n\nvar _possibleConstructorReturn = unwrapExports$1(possibleConstructorReturn);\n\nvar get$1 = createCommonjsModule$1(function (module, exports) {\nexports.__esModule = true;\n\n\n\nvar _getPrototypeOf2 = _interopRequireDefault(getPrototypeOf);\n\n\n\nvar _getOwnPropertyDescriptor2 = _interopRequireDefault(getOwnPropertyDescriptor$1$1);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function get(object, property, receiver) {\n if (object === null) object = Function.prototype;\n var desc = (0, _getOwnPropertyDescriptor2.default)(object, property);\n\n if (desc === undefined) {\n var parent = (0, _getPrototypeOf2.default)(object);\n\n if (parent === null) {\n return undefined;\n } else {\n return get(parent, property, receiver);\n }\n } else if (\"value\" in desc) {\n return desc.value;\n } else {\n var getter = desc.get;\n\n if (getter === undefined) {\n return undefined;\n }\n\n return getter.call(receiver);\n }\n};\n});\n\nvar _get = unwrapExports$1(get$1);\n\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\n\n\nvar check = function (O, proto) {\n _anObject$1(O);\n if (!_isObject$1(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nvar _setProto = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = _ctx$1(Function.call, _objectGopd.f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n\n// 19.1.3.19 Object.setPrototypeOf(O, proto)\n\n_export$1(_export$1.S, 'Object', { setPrototypeOf: _setProto.set });\n\nvar setPrototypeOf$2 = _core$1.Object.setPrototypeOf;\n\nvar setPrototypeOf = createCommonjsModule$1(function (module) {\nmodule.exports = { \"default\": setPrototypeOf$2, __esModule: true };\n});\n\nunwrapExports$1(setPrototypeOf);\n\nvar inherits = createCommonjsModule$1(function (module, exports) {\nexports.__esModule = true;\n\n\n\nvar _setPrototypeOf2 = _interopRequireDefault(setPrototypeOf);\n\n\n\nvar _create2 = _interopRequireDefault(create);\n\n\n\nvar _typeof3 = _interopRequireDefault(_typeof_1);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(superClass)));\n }\n\n subClass.prototype = (0, _create2.default)(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf2.default ? (0, _setPrototypeOf2.default)(subClass, superClass) : subClass.__proto__ = superClass;\n};\n});\n\nvar _inherits = unwrapExports$1(inherits);\n\n/**\n * 为HTML元素添加事件代理\n * @param {HTMLElement} host 目标对象\n * @param {String} selector 要被代理的元素\n * @param {String} type 事件名称\n * @param {Function} handler 处理函数\n * @param {Boolean} capture 是否在捕获阶段监听\n */\nfunction addDelegate$1(host, selector, type, handler) {\n var el = host.$dom;\n var handlerWrap = function handlerWrap(e) {\n var targetElsArr = findParents(e.target || e.srcElement, el, true);\n var targetElArr = query(selector, el, true);\n var retEl = void 0;\n if (targetElArr.find) {\n retEl = targetElArr.find(function (seEl) {\n return targetElsArr.find(function (tgEl) {\n return seEl === tgEl;\n });\n });\n } else {\n // Fixed IE11 Array.find not defined bug\n targetElArr.forEach(function (seEl) {\n return !retEl && targetElsArr.forEach(function (tgEl) {\n if (!retEl && seEl === tgEl) {\n retEl = tgEl;\n }\n });\n });\n }\n retEl && handler.apply(retEl, arguments);\n };\n /* 将包装后的方法记录到缓存中 */\n addEventCache(el, type + '_delegate_' + selector, handler, handlerWrap);\n host.events[type] = isArray$2(host.events[type]) ? host.events[type] : [];\n host.events[type].push(handlerWrap);\n}\n\n/**\n * 为HTML元素移除事件代理\n * @param {HTMLElement} host 目标对象\n * @param {String} selector 要被代理的元素\n * @param {String} type 事件名称\n * @param {Function} handler 处理函数\n * @param {Boolean} capture 是否在捕获阶段监听\n */\nfunction removeDelegate$1(host, selector, type, handler) {\n var el = host.$dom;\n /* 尝试从缓存中读取包装后的方法 */\n var handlerWrap = removeEventCache(el, type + '_delegate_' + selector, handler);\n if (handlerWrap) {\n var index = host.events[type].indexOf(handlerWrap);\n host.events[type].splice(index, 1);\n }\n}\n\nfunction fireEvent(host, type, evt) {\n isArray$2(host.events[type]) && host.events[type].forEach(function (item) {\n item(evt);\n });\n}\n\nvar Base = function () {\n function Base(parent) {\n _classCallCheck$1(this, Base);\n\n this.parent = parent;\n }\n\n _createClass$1(Base, [{\n key: 'create',\n value: function create() {\n this.createEl();\n this.addAllEvent();\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.removeAllEvent();\n }\n }, {\n key: 'createEl',\n value: function createEl() {\n this.$dom = document.createElement(this.option.tag);\n this.$dom.innerHTML = this.option.html;\n this.parent.$wrap.appendChild(this.$dom);\n }\n }, {\n key: 'addAllEvent',\n value: function addAllEvent() {\n var _this = this;\n\n this.option.defaultEvent && _Object$keys(this.option.defaultEvent).forEach(function (item) {\n var key = _this.option.defaultEvent[item];\n _this[key] = bind(_this[key], _this);\n addDelegate$1(_this.parent, _this.option.tag, item, _this[key], false, false);\n });\n this.option.event && _Object$keys(this.option.event).forEach(function (item) {\n var key = '__' + item;\n _this[key] = bind(_this.option.event[item], _this);\n addDelegate$1(_this.parent, _this.option.tag, item, _this[key], false, false);\n });\n }\n }, {\n key: 'removeAllEvent',\n value: function removeAllEvent() {\n var _this2 = this;\n\n this.option.defaultEvent && _Object$keys(this.option.defaultEvent).forEach(function (item) {\n var key = _this2.option.defaultEvent[item];\n _this2[key] = bind(_this2[key], _this2);\n removeDelegate$1(_this2.parent, _this2.option.tag, item, _this2[key], false, false);\n });\n this.option.event && _Object$keys(this.option.event).forEach(function (item) {\n var key = '__' + item;\n _this2[key] = bind(_this2.option.event[item], _this2);\n removeDelegate$1(_this2.parent, _this2.option.tag, item, _this2[key], false, false);\n });\n }\n }]);\n\n return Base;\n}();\n\n/**\n * 自定义组件配置\n */\n\nvar Component = function (_Base) {\n _inherits(Component, _Base);\n\n function Component(parent, option) {\n _classCallCheck$1(this, Component);\n\n var _this = _possibleConstructorReturn(this, (Component.__proto__ || _Object$getPrototypeOf(Component)).call(this, parent));\n\n _this.option = option;\n _this.init();\n return _this;\n }\n\n _createClass$1(Component, [{\n key: 'init',\n value: function init() {\n _get(Component.prototype.__proto__ || _Object$getPrototypeOf(Component.prototype), 'create', this).call(this);\n addClassName(this.$dom, 'chimee-flex-component');\n }\n }]);\n\n return Component;\n}(Base);\n\n/**\n * play 配置\n */\n\nvar defaultOption = {\n tag: 'chimee-control-state',\n html: '\\n \\n \\n ',\n animate: {\n icon: '\\n \\n ',\n path: {\n play: {\n left: 'M0.921875,0.265625L0.921875,197.074852L95.7890625,149L96.2929688,49Z',\n right: 'M90.3142151,45.9315226L90.3142151,151.774115L201.600944,99.9938782L201.600944,98.0237571Z'\n },\n pause: {\n left: 'M0.921875,1.265625L0.921875,198.074852L79.3611677,198.074852L79.3611677,0.258923126Z',\n right: 'M126.921875,1.265625L126.921875,198.074852L205.361168,198.074852L205.361168,0.258923126Z'\n }\n }\n },\n defaultEvent: {\n tap: 'tap'\n }\n};\n\nvar Play = function (_Base) {\n _inherits(Play, _Base);\n\n function Play(parent, option) {\n _classCallCheck$1(this, Play);\n\n var _this = _possibleConstructorReturn(this, (Play.__proto__ || _Object$getPrototypeOf(Play)).call(this, parent));\n\n _this.option = deepAssign(defaultOption, isObject$1(option) ? option : {});\n _this.animate = false;\n _this.init();\n return _this;\n }\n\n _createClass$1(Play, [{\n key: 'init',\n value: function init() {\n // 创建 html / 绑定事件\n _get(Play.prototype.__proto__ || _Object$getPrototypeOf(Play.prototype), 'create', this).call(this);\n this.$dom = $(this.$dom);\n this.$dom.addClass('chimee-flex-component');\n\n // 判断是否是默认或者用户提供 icon\n if (this.option.icon && this.option.icon.play && this.option.icon.pause) {\n this.$play = this.$dom.find('chimee-control-state-play');\n this.$pause = this.$dom.find('chimee-control-state-pause');\n this.$play.html(this.option.icon.play);\n this.$pause.html(this.option.icon.pause);\n } else if (!this.option.bitmap) {\n this.animate = true;\n this.option.animate.path = this.option.path ? this.option.path : this.option.animate.path;\n this.$dom.html(this.option.animate.icon);\n this.$left = this.$dom.find('.left');\n this.$right = this.$dom.find('.right');\n }\n this.changeState('pause');\n }\n }, {\n key: 'changeState',\n value: function changeState(state) {\n var nextState = state === 'play' ? 'pause' : 'play';\n this.state = state;\n addClassName(this.parent.$dom, nextState);\n removeClassName(this.parent.$dom, state);\n this.animate && this.setPath(nextState);\n }\n }, {\n key: 'setPath',\n value: function setPath(state) {\n var path = this.option.animate.path;\n if (state === 'play') {\n this.$left.attr('d', path.play.left);\n this.$right.attr('d', path.play.right);\n } else {\n this.$left.attr('d', path.pause.left);\n this.$right.attr('d', path.pause.right);\n }\n }\n }, {\n key: 'tap',\n value: function tap(e) {\n var nextState = this.state === 'play' ? 'pause' : 'play';\n this.changeState(nextState);\n this.parent.$emit(nextState);\n }\n }]);\n\n return Play;\n}(Base);\n\nvar _class;\n\nfunction _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {\n var desc = {};\n Object['ke' + 'ys'](descriptor).forEach(function (key) {\n desc[key] = descriptor[key];\n });\n desc.enumerable = !!desc.enumerable;\n desc.configurable = !!desc.configurable;\n\n if ('value' in desc || desc.initializer) {\n desc.writable = true;\n }\n\n desc = decorators.slice().reverse().reduce(function (desc, decorator) {\n return decorator(target, property, desc) || desc;\n }, desc);\n\n if (context && desc.initializer !== void 0) {\n desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n desc.initializer = undefined;\n }\n\n if (desc.initializer === void 0) {\n Object['define' + 'Property'](target, property, desc);\n desc = null;\n }\n\n return desc;\n}\n\n/**\n * Screen 配置\n */\n\nvar defaultOption$1 = {\n tag: 'chimee-screen',\n html: '\\n \\n \\n \\n \\n \\n \\n ',\n defaultEvent: {\n tap: 'tap'\n }\n};\n\nvar Screen = (_class = function (_Base) {\n _inherits(Screen, _Base);\n\n function Screen(parent, option) {\n _classCallCheck$1(this, Screen);\n\n var _this = _possibleConstructorReturn(this, (Screen.__proto__ || _Object$getPrototypeOf(Screen)).call(this, parent));\n\n _this.state = 'small';\n _this.option = deepAssign(defaultOption$1, isObject$1(option) ? option : {});\n _this.init();\n return _this;\n }\n\n _createClass$1(Screen, [{\n key: 'init',\n value: function init() {\n _get(Screen.prototype.__proto__ || _Object$getPrototypeOf(Screen.prototype), 'create', this).call(this);\n this.$dom = $(this.$dom);\n this.changeState(this.state);\n // addClassName(this.$dom, 'flex-item');\n this.$dom.addClass('chimee-flex-component');\n\n this.$full = this.$dom.find('chimee-screen-full');\n this.$small = this.$dom.find('chimee-screen-small');\n // 判断是否是默认或者用户提供 icon\n if (this.option.icon && this.option.icon.full && this.option.icon.small) {\n // if((!this.option.icon.play && this.option.icon.puase) || (this.option.icon.play && !this.option.icon.puase)) {\n // console.warn(`Please provide a play and pause icon!If you can't, we will use default icon!`);\n // }\n this.$full.html(this.option.icon.full);\n this.$small.html(this.option.icon.small);\n } else if (this.option.bitmap) {\n this.$full.html('');\n this.$small.html('');\n }\n }\n }, {\n key: 'changeState',\n value: function changeState(state) {\n var removeState = state === 'small' ? 'full' : 'small';\n addClassName(this.parent.$dom, state);\n removeClassName(this.parent.$dom, removeState);\n }\n }, {\n key: 'tap',\n value: function tap() {\n var full = false;\n if (this.state === 'small') {\n this.state = 'full';\n full = true;\n } else {\n this.state = 'small';\n full = false;\n }\n this.changeState(this.state);\n this.parent.$fullscreen(full, 'container');\n if (full) {\n this.watch_screen = this.parent.$watch('isFullscreen', this.screenChange);\n } else {\n this.watch_screen();\n }\n }\n }, {\n key: 'screenChange',\n value: function screenChange() {\n if (!this.parent.fullscreenElement) return;\n this.state = 'small';\n this.changeState('small');\n this.parent.$fullscreen(false, 'container');\n }\n }]);\n\n return Screen;\n}(Base), _applyDecoratedDescriptor(_class.prototype, 'screenChange', [autobind], _Object$getOwnPropertyDescriptor(_class.prototype, 'screenChange'), _class.prototype), _class);\n\nvar _class$1;\n\nfunction _applyDecoratedDescriptor$1(target, property, decorators, descriptor, context) {\n var desc = {};\n Object['ke' + 'ys'](descriptor).forEach(function (key) {\n desc[key] = descriptor[key];\n });\n desc.enumerable = !!desc.enumerable;\n desc.configurable = !!desc.configurable;\n\n if ('value' in desc || desc.initializer) {\n desc.writable = true;\n }\n\n desc = decorators.slice().reverse().reduce(function (desc, decorator) {\n return decorator(target, property, desc) || desc;\n }, desc);\n\n if (context && desc.initializer !== void 0) {\n desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n desc.initializer = undefined;\n }\n\n if (desc.initializer === void 0) {\n Object['define' + 'Property'](target, property, desc);\n desc = null;\n }\n\n return desc;\n}\n\nvar defaultOption$2 = {\n tag: 'chimee-progressbar',\n html: '\\n \\n \\n \\n \\n \\n '\n};\n\nvar ProgressBar = (_class$1 = function (_Base) {\n _inherits(ProgressBar, _Base);\n\n function ProgressBar(parent, option) {\n _classCallCheck$1(this, ProgressBar);\n\n var _this = _possibleConstructorReturn(this, (ProgressBar.__proto__ || _Object$getPrototypeOf(ProgressBar)).call(this, parent));\n\n _this.option = deepAssign(defaultOption$2, isObject$1(option) ? option : {});\n _this.visiable = option !== false;\n _this.init();\n return _this;\n }\n\n _createClass$1(ProgressBar, [{\n key: 'init',\n value: function init() {\n _get(ProgressBar.prototype.__proto__ || _Object$getPrototypeOf(ProgressBar.prototype), 'create', this).call(this);\n this.$dom = $(this.$dom);\n this.$buffer = this.$dom.find('chimee-progressbar-buffer');\n this.$all = this.$dom.find('chimee-progressbar-all');\n this.$ball = this.$dom.find('chimee-progressbar-ball');\n this.$dom.addClass('chimee-flex-component');\n\n // css 配置\n !this.visiable && this.$dom.css('visibility', 'hidden');\n this.addEvent();\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.removeEvent();\n // 解绑全屏监听事件\n this.watch_screen && this.watch_screen();\n _get(ProgressBar.prototype.__proto__ || _Object$getPrototypeOf(ProgressBar.prototype), 'destroy', this).call(this);\n }\n }, {\n key: 'addEvent',\n value: function addEvent() {\n addDelegate$1(this.parent, 'chimee-progressbar', 'tap', this.tap);\n addDelegate$1(this.parent, 'chimee-progressbar', 'panstart', this.mousedown);\n }\n }, {\n key: 'removeEvent',\n value: function removeEvent() {\n removeDelegate$1(this.parent, 'chimee-progressbar', 'tap', this.tap);\n removeDelegate$1(this.parent, 'chimee-progressbar', 'panstart', this.mousedown);\n }\n\n /**\n * 缓存进度条更新 progress 事件\n */\n\n }, {\n key: 'progress',\n value: function progress() {\n var buffer = 0;\n try {\n buffer = this.parent.buffered.end(0);\n } catch (e) {}\n var bufferWidth = buffer / this.parent.duration * 100 + '%';\n this.$buffer.css('width', bufferWidth);\n }\n\n /**\n * requestAnimationFrame 来更新进度条, timeupdate 事件\n */\n\n }, {\n key: 'update',\n value: function update() {\n var time = this._currentTime !== undefined ? this._currentTime : this.parent.currentTime;\n var timePer = time ? time / this.parent.duration : 0;\n this.$all.css('width', timePer * 100 + '%');\n }\n }, {\n key: 'tap',\n value: function tap(e) {\n this._currentTime = (e.clientX - this.$dom[0].offsetLeft) / this.$dom[0].offsetWidth * this.parent.duration;\n this.update();\n this.parent.currentTime = this._currentTime;\n }\n }, {\n key: 'mousedown',\n value: function mousedown(e) {\n\n this._currentTime = (e.clientX - this.$dom[0].offsetLeft) / this.$dom[0].offsetWidth * this.parent.duration;\n this.startX = e.clientX;\n this.startTime = this._currentTime;\n addDelegate$1(this.parent, this.option.tag, 'panmove', this.draging);\n addDelegate$1(this.parent, this.option.tag, 'panend', this.dragEnd);\n }\n\n /**\n * 开始拖拽\n * @param {EventObject} e 鼠标事件\n */\n\n }, {\n key: 'draging',\n value: function draging(e) {\n this.endX = e.clientX;\n var dragTime = (this.endX - this.startX) / this.$dom[0].offsetWidth * this.parent.duration;\n var dragAfterTime = +(this.startTime + dragTime).toFixed(2);\n this._currentTime = dragAfterTime < 0 ? 0 : dragAfterTime > this.parent.duration ? this.parent.duration : dragAfterTime;\n this.update();\n }\n\n /**\n * 结束拖拽\n */\n\n }, {\n key: 'dragEnd',\n value: function dragEnd() {\n this.startX = 0;\n this.startTime = 0;\n this.parent.currentTime = this._currentTime;\n this._currentTime = undefined;\n removeDelegate$1(this.parent, this.option.tag, 'panmove', this.draging);\n removeDelegate$1(this.parent, this.option.tag, 'panend', this.dragEnd);\n }\n }]);\n\n return ProgressBar;\n}(Base), _applyDecoratedDescriptor$1(_class$1.prototype, 'tap', [autobind], _Object$getOwnPropertyDescriptor(_class$1.prototype, 'tap'), _class$1.prototype), _applyDecoratedDescriptor$1(_class$1.prototype, 'mousedown', [autobind], _Object$getOwnPropertyDescriptor(_class$1.prototype, 'mousedown'), _class$1.prototype), _applyDecoratedDescriptor$1(_class$1.prototype, 'draging', [autobind], _Object$getOwnPropertyDescriptor(_class$1.prototype, 'draging'), _class$1.prototype), _applyDecoratedDescriptor$1(_class$1.prototype, 'dragEnd', [autobind], _Object$getOwnPropertyDescriptor(_class$1.prototype, 'dragEnd'), _class$1.prototype), _class$1);\n\n/**\n * currentTime 配置\n */\n\nvar defaultOption$3 = {\n tag: 'chimee-current-time',\n html: '\\n 00:00\\n '\n};\n\nvar CurrentTime = function (_Base) {\n _inherits(CurrentTime, _Base);\n\n function CurrentTime(parent, option) {\n _classCallCheck$1(this, CurrentTime);\n\n var _this = _possibleConstructorReturn(this, (CurrentTime.__proto__ || _Object$getPrototypeOf(CurrentTime)).call(this, parent));\n\n _this.option = deepAssign(defaultOption$3, isObject$1(option) ? option : {});\n _this.init();\n return _this;\n }\n\n _createClass$1(CurrentTime, [{\n key: 'init',\n value: function init() {\n _get(CurrentTime.prototype.__proto__ || _Object$getPrototypeOf(CurrentTime.prototype), 'create', this).call(this);\n this.$dom = $(this.$dom);\n this.$dom.addClass('chimee-flex-component');\n }\n }, {\n key: 'updateCurrent',\n value: function updateCurrent() {\n this.$dom.text(formatTime(this.parent.currentTime));\n }\n }]);\n\n return CurrentTime;\n}(Base);\n\n/**\n * totalTime 配置\n */\n\nvar defaultOption$4 = {\n tag: 'chimee-total-time',\n html: '\\n 00:00\\n '\n};\n\nvar TotalTime = function (_Base) {\n _inherits(TotalTime, _Base);\n\n function TotalTime(parent, option) {\n _classCallCheck$1(this, TotalTime);\n\n var _this = _possibleConstructorReturn(this, (TotalTime.__proto__ || _Object$getPrototypeOf(TotalTime)).call(this, parent));\n\n _this.option = deepAssign(defaultOption$4, isObject$1(option) ? option : {});\n _this.init();\n return _this;\n }\n\n _createClass$1(TotalTime, [{\n key: 'init',\n value: function init() {\n _get(TotalTime.prototype.__proto__ || _Object$getPrototypeOf(TotalTime.prototype), 'create', this).call(this);\n this.$dom = $(this.$dom);\n this.$dom.addClass('chimee-flex-component');\n }\n }, {\n key: 'updateTotal',\n value: function updateTotal() {\n this.$dom.text(formatTime(this.parent.duration));\n }\n }]);\n\n return TotalTime;\n}(Base);\n\nfunction hundleChildren(plugin) {\n var childConfig = {};\n if (!plugin.$config.children) {\n childConfig = plugin.isLive ? {\n play: true, // 底部播放暂停按钮\n currentTime: false, // 播放时间\n progressBar: false, // 播放进度控制条\n totalTime: false, // 总时间\n screen: true // 全屏控制\n } : {\n play: true, // 底部播放暂停按钮\n currentTime: true, // 播放时间\n progressBar: true, // 播放进度控制条\n totalTime: true, // 总时间\n screen: true // 全屏控制\n };\n } else {\n childConfig = plugin.$config.children;\n }\n return childConfig;\n}\n\n/**\n * 1. 将所有的 ui component 输出到 html 结构中\n * 2. 为这些 component 绑定响应的事件\n * @param {*} dom 所有 ui 节点的子容器\n * @param {*} config 关于 ui 的一些列设置\n * @return {Array} 所有子节点\n */\n\nfunction createChild(plugin) {\n var childConfig = plugin.config.children = hundleChildren(plugin);\n var children = {};\n _Object$keys(childConfig).forEach(function (item) {\n switch (item) {\n case 'play':\n if (childConfig.play) {\n children.play = new Play(plugin, childConfig.play);\n }\n break;\n case 'currentTime':\n if (childConfig.currentTime) {\n children.currentTime = new CurrentTime(plugin, childConfig.currentTime);\n }\n break;\n case 'progressBar':\n children.progressBar = new ProgressBar(plugin, childConfig.progressBar);\n break;\n case 'totalTime':\n if (childConfig.totalTime) {\n children.totalTime = new TotalTime(plugin, childConfig.totalTime);\n }\n break;\n case 'screen':\n if (childConfig.screen) {\n children.screen = new Screen(plugin, childConfig.screen);\n }\n break;\n default:\n children[item] = new Component(plugin, childConfig[item]);\n break;\n }\n });\n\n return children;\n}\n\nvar majorColorStyle = '\\n .chimee-flex-component svg *{\\n fill: majorColor;\\n stroke: majorColor;\\n }\\n chimee-progressbar-all{\\n background: majorColor;\\n }\\n chimee-volume.chimee-flex-component chimee-volume-bar-all{\\n background: majorColor; \\n }\\n chimee-clarity-list li:hover,\\n chimee-clarity-list li.active {\\n color: majorColor;\\n }\\n';\n\nvar hoverColorStyle = '\\n .chimee-flex-component svg:hover *{\\n fill: hoverColor;\\n stroke: hoverColor;\\n }\\n';\n\n/**\n * 插件默认配置\n */\n\nvar defaultConfig = {\n hideBarTime: 2000\n};\n\nvar mobiControlbar = gestureFactory({\n name: 'chimeeMobiControlbar',\n el: 'chimee-control',\n data: {\n children: {},\n show: false,\n disabled: false\n },\n level: 99,\n operable: true,\n penetrate: false,\n create: function create() {\n this.environment = new uaParser().getResult();\n },\n init: function init(videoConfig) {\n if (videoConfig.controls) {\n this.show = true;\n videoConfig.controls = false;\n }\n var _this = this;\n applyDecorators(videoConfig, {\n controls: accessor({\n get: function get() {\n return _this.show;\n },\n set: function set(value) {\n _this.show = Boolean(value);\n _this._display();\n return false;\n }\n }, { preSet: true })\n }, { self: true });\n this.config = isObject$1(this.$config) ? deepAssign(defaultConfig, this.$config) : defaultConfig;\n this.$dom.innerHTML = '';\n this.$wrap = this.$dom.querySelector('chimee-control-wrap');\n\n this.events = {};\n this.children = createChild(this);\n this._setStyle();\n\n // 增加 window / document 的全局监听\n this._addGlobalEvent();\n\n // 监听全屏事件\n\n this.watch_fullscreen = this.$watch('isFullscreen', this._mousemove);\n },\n destroy: function destroy() {\n window.clearTimeout(this.timeId);\n this._removeGlobalEvent();\n this.watch_fullscreen && this.watch_fullscreen();\n },\n inited: function inited() {\n for (var i in this.children) {\n this.children[i].inited && this.children[i].inited();\n }\n },\n\n events: {\n // 视频事件\n loadstart: function loadstart() {\n this._disable(true);\n },\n loadedmetadata: function loadedmetadata() {\n this._disable(false);\n },\n play: function play() {\n this.children.play && this.children.play.changeState('play');\n this._hideItself();\n },\n pause: function pause() {\n this.children.play && this.children.play.changeState('pause');\n this._showItself();\n },\n load: function load() {},\n durationchange: function durationchange() {\n this.children.totalTime && this.children.totalTime.updateTotal();\n },\n timeupdate: function timeupdate() {\n this._progressUpdate();\n },\n progress: function progress() {\n this.children.progressBar && this.children.progressBar.progress();\n },\n volumechange: function volumechange() {\n this.children.volume && this.children.volume.update();\n },\n tap: function tap(evt) {\n this._mousemove();\n },\n d_tap: function d_tap(evt) {\n !this.paused && this._mousemove();\n fireEvent(this, 'tap', evt.changedTouches[0]);\n },\n d_panstart: function d_panstart(evt) {\n !this.paused && this._mousemove();\n fireEvent(this, 'panstart', evt.changedTouches[0]);\n },\n d_panmove: function d_panmove(evt) {\n !this.paused && this._mousemove();\n fireEvent(this, 'panmove', evt.changedTouches[0]);\n },\n d_panend: function d_panend(evt) {\n !this.paused && this._mousemove();\n fireEvent(this, 'panend', evt.changedTouches[0]);\n }\n },\n methods: {\n _progressUpdate: function _progressUpdate() {\n this.children.progressBar && this.children.progressBar.update();\n this.children.currentTime && this.children.currentTime.updateCurrent();\n },\n _hideItself: function _hideItself() {\n var _this2 = this;\n\n window.clearTimeout(this.timeId);\n this.timeId = setTimeout(function () {\n var bottom = -_this2.$wrap.offsetHeight;\n setStyle(_this2.$wrap, {\n bottom: bottom + 'px'\n });\n setStyle(_this2.$dom, {\n visibility: 'hidden'\n });\n }, this.config.hideBarTime);\n },\n _showItself: function _showItself() {\n window.clearTimeout(this.timeId);\n setStyle(this.$wrap, {\n bottom: '0'\n });\n setStyle(this.$dom, {\n visibility: 'visible'\n });\n },\n _display: function _display() {\n var display = this.show ? 'block' : 'none';\n setStyle(this.$dom, {\n display: display\n });\n },\n _mousemove: function _mousemove(e) {\n if (this.paused) return;\n this._showItself();\n this._hideItself();\n },\n\n // controlbar 不可以点\n // 键盘/鼠标事件不监听\n _disable: function _disable(disabled) {\n if (!this.show) return;\n this.disabled = disabled;\n setStyle(this.$wrap, 'pointerEvents', disabled ? 'none' : 'auto');\n },\n _setStyle: function _setStyle() {\n var css = '';\n css += this.config.majorColor ? majorColorStyle.replace(/majorColor/g, this.config.majorColor) : '';\n css += this.config.hoverColor ? hoverColorStyle.replace(/hoverColor/g, this.config.hoverColor) : '';\n var style = document.createElement('style');\n style.setAttribute('type', 'text/css');\n style.innerHTML = css;\n document.head.appendChild(style);\n },\n _weixinJSBridgeReady: function _weixinJSBridgeReady() {\n // console.log(this.environment.os === 'iOS', window.WeixinJSBridge)\n window.WeixinJSBridge && this.environment.os.name === 'iOS' && this.load();\n },\n\n // 增加一些全局事件监听\n _addGlobalEvent: function _addGlobalEvent() {\n addEvent(window, 'orientationchange', this._mousemove);\n addEvent(document, 'WeixinJSBridgeReady', this._weixinJSBridgeReady);\n },\n\n // 去除一些全局事件监听\n _removeGlobalEvent: function _removeGlobalEvent() {\n removeEvent(window, 'orientationchange', this._mousemove);\n removeEvent(document, 'WeixinJSBridgeReady', this._weixinJSBridgeReady);\n }\n }\n});\n\nreturn mobiControlbar;\n\n})));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/chimee-plugin-mobile-controlbar/lib/index.browser.js\n// module id = m4OH\n// module chunks = 0","module.exports = require('./lib/axios');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/index.js\n// module id = mtWM\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/helpers/parseHeaders.js\n// module id = oJlt\n// module chunks = 0","module.exports =\n/******/ (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\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// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\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 = 234);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ function(module, exports) {\n\n/* globals __VUE_SSR_CONTEXT__ */\n\n// this module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle\n\nmodule.exports = function normalizeComponent (\n rawScriptExports,\n compiledTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier /* server only */\n) {\n var esModule\n var scriptExports = rawScriptExports = rawScriptExports || {}\n\n // ES6 modules interop\n var type = typeof rawScriptExports.default\n if (type === 'object' || type === 'function') {\n esModule = rawScriptExports\n scriptExports = rawScriptExports.default\n }\n\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (compiledTemplate) {\n options.render = compiledTemplate.render\n options.staticRenderFns = compiledTemplate.staticRenderFns\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = injectStyles\n }\n\n if (hook) {\n var functional = options.functional\n var existing = functional\n ? options.render\n : options.beforeCreate\n if (!functional) {\n // inject component registration as beforeCreate hook\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n } else {\n // register for functioal component in vue file\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return existing(h, context)\n }\n }\n }\n\n return {\n esModule: esModule,\n exports: scriptExports,\n options: options\n }\n}\n\n\n/***/ },\n\n/***/ 10:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n\n/* harmony default export */ exports[\"default\"] = {\n computed: {\n spinnerColor: function spinnerColor() {\n return this.color || this.$parent.color || '#ccc';\n },\n\n spinnerSize: function spinnerSize() {\n return (this.size || this.$parent.size || 28) + 'px';\n }\n },\n\n props: {\n size: Number,\n color: String\n }\n};\n\n\n/***/ },\n\n/***/ 103:\n/***/ function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ },\n\n/***/ 107:\n/***/ function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ },\n\n/***/ 11:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__common_vue__ = __webpack_require__(6);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__common_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__common_vue__);\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ exports[\"default\"] = {\n name: 'fading-circle',\n\n mixins: [__WEBPACK_IMPORTED_MODULE_0__common_vue___default.a],\n\n created: function created() {\n if (this.$isServer) return;\n this.styleNode = document.createElement('style');\n var css = \".circle-color-\" + (this._uid) + \" > div::before { background-color: \" + (this.spinnerColor) + \"; }\";\n\n this.styleNode.type = 'text/css';\n this.styleNode.rel = 'stylesheet';\n this.styleNode.title = 'fading circle style';\n document.getElementsByTagName('head')[0].appendChild(this.styleNode);\n this.styleNode.appendChild(document.createTextNode(css));\n },\n\n destroyed: function destroyed() {\n if (this.styleNode) {\n this.styleNode.parentNode.removeChild(this.styleNode);\n }\n }\n};\n\n\n/***/ },\n\n/***/ 114:\n/***/ function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ },\n\n/***/ 14:\n/***/ function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ },\n\n/***/ 15:\n/***/ function(module, exports, __webpack_require__) {\n\nfunction injectStyle (ssrContext) {\n __webpack_require__(14)\n}\nvar Component = __webpack_require__(0)(\n /* script */\n __webpack_require__(11),\n /* template */\n __webpack_require__(16),\n /* styles */\n injectStyle,\n /* scopeId */\n null,\n /* moduleIdentifier (server only) */\n null\n)\n\nmodule.exports = Component.exports\n\n\n/***/ },\n\n/***/ 153:\n/***/ function(module, exports, __webpack_require__) {\n\nvar Component = __webpack_require__(0)(\n /* script */\n __webpack_require__(75),\n /* template */\n __webpack_require__(190),\n /* styles */\n null,\n /* scopeId */\n null,\n /* moduleIdentifier (server only) */\n null\n)\n\nmodule.exports = Component.exports\n\n\n/***/ },\n\n/***/ 154:\n/***/ function(module, exports, __webpack_require__) {\n\nfunction injectStyle (ssrContext) {\n __webpack_require__(114)\n}\nvar Component = __webpack_require__(0)(\n /* script */\n __webpack_require__(76),\n /* template */\n __webpack_require__(184),\n /* styles */\n injectStyle,\n /* scopeId */\n null,\n /* moduleIdentifier (server only) */\n null\n)\n\nmodule.exports = Component.exports\n\n\n/***/ },\n\n/***/ 155:\n/***/ function(module, exports, __webpack_require__) {\n\nfunction injectStyle (ssrContext) {\n __webpack_require__(107)\n}\nvar Component = __webpack_require__(0)(\n /* script */\n __webpack_require__(77),\n /* template */\n __webpack_require__(176),\n /* styles */\n injectStyle,\n /* scopeId */\n null,\n /* moduleIdentifier (server only) */\n null\n)\n\nmodule.exports = Component.exports\n\n\n/***/ },\n\n/***/ 156:\n/***/ function(module, exports, __webpack_require__) {\n\nfunction injectStyle (ssrContext) {\n __webpack_require__(103)\n}\nvar Component = __webpack_require__(0)(\n /* script */\n __webpack_require__(78),\n /* template */\n __webpack_require__(172),\n /* styles */\n injectStyle,\n /* scopeId */\n null,\n /* moduleIdentifier (server only) */\n null\n)\n\nmodule.exports = Component.exports\n\n\n/***/ },\n\n/***/ 16:\n/***/ function(module, exports) {\n\nmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('div', {\n class: ['mint-spinner-fading-circle circle-color-' + _vm._uid],\n style: ({\n width: _vm.spinnerSize,\n height: _vm.spinnerSize\n })\n }, _vm._l((12), function(n) {\n return _c('div', {\n staticClass: \"mint-spinner-fading-circle-circle\",\n class: ['is-circle' + (n + 1)]\n })\n }))\n},staticRenderFns: []}\n\n/***/ },\n\n/***/ 172:\n/***/ function(module, exports) {\n\nmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('div', {\n staticClass: \"mint-spinner-triple-bounce\"\n }, [_c('div', {\n staticClass: \"mint-spinner-triple-bounce-bounce1\",\n style: (_vm.bounceStyle)\n }), _vm._v(\" \"), _c('div', {\n staticClass: \"mint-spinner-triple-bounce-bounce2\",\n style: (_vm.bounceStyle)\n }), _vm._v(\" \"), _c('div', {\n staticClass: \"mint-spinner-triple-bounce-bounce3\",\n style: (_vm.bounceStyle)\n })])\n},staticRenderFns: []}\n\n/***/ },\n\n/***/ 176:\n/***/ function(module, exports) {\n\nmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('div', {\n staticClass: \"mint-spinner-snake\",\n style: ({\n 'border-top-color': _vm.spinnerColor,\n 'border-left-color': _vm.spinnerColor,\n 'border-bottom-color': _vm.spinnerColor,\n 'height': _vm.spinnerSize,\n 'width': _vm.spinnerSize\n })\n })\n},staticRenderFns: []}\n\n/***/ },\n\n/***/ 184:\n/***/ function(module, exports) {\n\nmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('div', {\n staticClass: \"mint-spinner-double-bounce\",\n style: ({\n width: _vm.spinnerSize,\n height: _vm.spinnerSize\n })\n }, [_c('div', {\n staticClass: \"mint-spinner-double-bounce-bounce1\",\n style: ({\n backgroundColor: _vm.spinnerColor\n })\n }), _vm._v(\" \"), _c('div', {\n staticClass: \"mint-spinner-double-bounce-bounce2\",\n style: ({\n backgroundColor: _vm.spinnerColor\n })\n })])\n},staticRenderFns: []}\n\n/***/ },\n\n/***/ 190:\n/***/ function(module, exports) {\n\nmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n return _c('span', [_c(_vm.spinner, {\n tag: \"component\"\n })], 1)\n},staticRenderFns: []}\n\n/***/ },\n\n/***/ 234:\n/***/ function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(42);\n\n\n/***/ },\n\n/***/ 42:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_spinner__ = __webpack_require__(153);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_spinner___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__src_spinner__);\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/* harmony reexport (default from non-hamory) */ __webpack_require__.d(exports, \"default\", function() { return __WEBPACK_IMPORTED_MODULE_0__src_spinner___default.a; });\n\n\n\n/***/ },\n\n/***/ 6:\n/***/ function(module, exports, __webpack_require__) {\n\nvar Component = __webpack_require__(0)(\n /* script */\n __webpack_require__(10),\n /* template */\n null,\n /* styles */\n null,\n /* scopeId */\n null,\n /* moduleIdentifier (server only) */\n null\n)\n\nmodule.exports = Component.exports\n\n\n/***/ },\n\n/***/ 75:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//\n//\n//\n//\n\nvar SPINNERS = [\n 'snake',\n 'double-bounce',\n 'triple-bounce',\n 'fading-circle'\n];\nvar parseSpinner = function(index) {\n if ({}.toString.call(index) === '[object Number]') {\n if (SPINNERS.length <= index) {\n console.warn((\"'\" + index + \"' spinner not found, use the default spinner.\"));\n index = 0;\n }\n return SPINNERS[index];\n }\n\n if (SPINNERS.indexOf(index) === -1) {\n console.warn((\"'\" + index + \"' spinner not found, use the default spinner.\"));\n index = SPINNERS[0];\n }\n return index;\n};\n\n/**\n * mt-spinner\n * @module components/spinner\n * @desc 加载动画\n * @param {(string|number)} [type=snake] - 显示类型,传入类型名或者类型 id,可选 `snake`, `dobule-bounce`, `triple-bounce`, `fading-circle`\n * @param {number} size - 尺寸\n * @param {string} color - 颜色\n *\n * @example\n * \n *\n * \n * \n *\n * \n * \n */\n/* harmony default export */ exports[\"default\"] = {\n name: 'mt-spinner',\n\n computed: {\n spinner: function spinner() {\n return (\"spinner-\" + (parseSpinner(this.type)));\n }\n },\n\n components: {\n SpinnerSnake: __webpack_require__(155),\n SpinnerDoubleBounce: __webpack_require__(154),\n SpinnerTripleBounce: __webpack_require__(156),\n SpinnerFadingCircle: __webpack_require__(15)\n },\n\n props: {\n type: {\n default: 0\n },\n size: {\n type: Number,\n default: 28\n },\n color: {\n type: String,\n default: '#ccc'\n }\n }\n};\n\n\n/***/ },\n\n/***/ 76:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__common_vue__ = __webpack_require__(6);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__common_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__common_vue__);\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ exports[\"default\"] = {\n name: 'double-bounce',\n\n mixins: [__WEBPACK_IMPORTED_MODULE_0__common_vue___default.a]\n};\n\n\n/***/ },\n\n/***/ 77:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__common_vue__ = __webpack_require__(6);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__common_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__common_vue__);\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ exports[\"default\"] = {\n name: 'snake',\n\n mixins: [__WEBPACK_IMPORTED_MODULE_0__common_vue___default.a]\n};\n\n\n/***/ },\n\n/***/ 78:\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__common_vue__ = __webpack_require__(6);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__common_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__common_vue__);\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ exports[\"default\"] = {\n name: 'triple-bounce',\n\n mixins: [__WEBPACK_IMPORTED_MODULE_0__common_vue___default.a],\n\n computed: {\n spinnerSize: function spinnerSize() {\n return ((this.size || this.$parent.size || 28) / 3) + 'px';\n },\n\n bounceStyle: function bounceStyle() {\n return {\n width: this.spinnerSize,\n height: this.spinnerSize,\n backgroundColor: this.spinnerColor\n };\n }\n }\n};\n\n\n/***/ }\n\n/******/ });\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/mint-ui/lib/spinner/index.js\n// module id = oobK\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/helpers/cookies.js\n// module id = p1b6\n// module chunks = 0","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/cancel/isCancel.js\n// module id = pBtG\n// module chunks = 0","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/helpers/spread.js\n// module id = pxG4\n// module chunks = 0","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/helpers/combineURLs.js\n// module id = qRfI\n// module chunks = 0","\n;(function(win, lib) {\n var doc = win.document;\n var docEl = doc.documentElement;\n var metaEl = doc.querySelector('meta[name=\"viewport\"]');\n var flexibleEl = doc.querySelector('meta[name=\"flexible\"]');\n var dpr = 0;\n var scale = 0;\n var tid;\n var flexible = lib.flexible || (lib.flexible = {});\n\n if (metaEl) {\n console.warn('将根据已有的meta标签来设置缩放比例');\n var match = metaEl.getAttribute('content').match(/initial\\-scale=([\\d\\.]+)/);\n if (match) {\n scale = parseFloat(match[1]);\n dpr = parseInt(1 / scale);\n }\n } else if (flexibleEl) {\n var content = flexibleEl.getAttribute('content');\n if (content) {\n var initialDpr = content.match(/initial\\-dpr=([\\d\\.]+)/);\n var maximumDpr = content.match(/maximum\\-dpr=([\\d\\.]+)/);\n if (initialDpr) {\n dpr = parseFloat(initialDpr[1]);\n scale = parseFloat((1 / dpr).toFixed(2));\n }\n if (maximumDpr) {\n dpr = parseFloat(maximumDpr[1]);\n scale = parseFloat((1 / dpr).toFixed(2));\n }\n }\n }\n\n if (!dpr && !scale) {\n var isAndroid = win.navigator.appVersion.match(/android/gi);\n var isIPhone = win.navigator.appVersion.match(/iphone/gi);\n var devicePixelRatio = win.devicePixelRatio;\n if (isIPhone) {\n // iOS下,对于2和3的屏,用2倍的方案,其余的用1倍方案\n if (devicePixelRatio >= 3 && (!dpr || dpr >= 3)) {\n dpr = 3;\n } else if (devicePixelRatio >= 2 && (!dpr || dpr >= 2)){\n dpr = 2;\n } else {\n dpr = 1;\n }\n } else {\n // 其他设备下,仍旧使用1倍的方案\n dpr = 1;\n }\n scale = 1 / dpr;\n }\n\n docEl.setAttribute('data-dpr', dpr);\n if (!metaEl) {\n metaEl = doc.createElement('meta');\n metaEl.setAttribute('name', 'viewport');\n metaEl.setAttribute('content', 'initial-scale=' + scale + ', maximum-scale=' + scale + ', minimum-scale=' + scale + ', user-scalable=no');\n if (docEl.firstElementChild) {\n docEl.firstElementChild.appendChild(metaEl);\n } else {\n var wrap = doc.createElement('div');\n wrap.appendChild(metaEl);\n doc.write(wrap.innerHTML);\n }\n }\n\n function refreshRem(){\n var width = docEl.getBoundingClientRect().width;\n if (width / dpr > 540) {\n width = 540 * dpr;\n }\n var rem = width / 10;\n docEl.style.fontSize = rem + 'px';\n flexible.rem = win.rem = rem;\n }\n\n win.addEventListener('resize', function() {\n clearTimeout(tid);\n tid = setTimeout(refreshRem, 300);\n }, false);\n win.addEventListener('pageshow', function(e) {\n if (e.persisted) {\n clearTimeout(tid);\n tid = setTimeout(refreshRem, 300);\n }\n }, false);\n\n if (doc.readyState === 'complete') {\n doc.body.style.fontSize = 12 * dpr + 'px';\n } else {\n doc.addEventListener('DOMContentLoaded', function(e) {\n doc.body.style.fontSize = 12 * dpr + 'px';\n }, false);\n }\n\n\n refreshRem();\n\n flexible.dpr = win.dpr = dpr;\n flexible.refreshRem = refreshRem;\n flexible.rem2px = function(d) {\n var val = parseFloat(d) * this.rem;\n if (typeof d === 'string' && d.match(/rem$/)) {\n val += 'px';\n }\n return val;\n }\n flexible.px2rem = function(d) {\n var val = parseFloat(d) / this.rem;\n if (typeof d === 'string' && d.match(/px$/)) {\n val += 'rem';\n }\n return val;\n }\n\n})(window, window['lib'] || (window['lib'] = {}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/lib-flexible/flexible.js\n// module id = sVYa\n// module chunks = 0","'use strict';\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n if (code) {\n error.code = code;\n }\n error.request = request;\n error.response = response;\n return error;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/core/enhanceError.js\n// module id = t8qj\n// module chunks = 0","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Factory for creating new instances\naxios.create = function create(instanceConfig) {\n return createInstance(utils.merge(defaults, instanceConfig));\n};\n\n// Expose Cancel & CancelToken\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/axios.js\n// module id = tIFN\n// module chunks = 0","'use strict';\n\n// btoa polyfill for IE<10 courtesy https://github.com/davidchambers/Base64.js\n\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\nfunction E() {\n this.message = 'String contains an invalid character';\n}\nE.prototype = new Error;\nE.prototype.code = 5;\nE.prototype.name = 'InvalidCharacterError';\n\nfunction btoa(input) {\n var str = String(input);\n var output = '';\n for (\n // initialize result and counter\n var block, charCode, idx = 0, map = chars;\n // if the next str index does not exist:\n // change the mapping table to \"=\"\n // check if d has no fractional digits\n str.charAt(idx | 0) || (map = '=', idx % 1);\n // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\n output += map.charAt(63 & block >> 8 - idx % 1 * 8)\n ) {\n charCode = str.charCodeAt(idx += 3 / 4);\n if (charCode > 0xFF) {\n throw new E();\n }\n block = block << 8 | charCode;\n }\n return output;\n}\n\nmodule.exports = btoa;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/helpers/btoa.js\n// module id = thJu\n// module chunks = 0",";(function () {\n\t'use strict';\n\n\t/**\n\t * @preserve FastClick: polyfill to remove click delays on browsers with touch UIs.\n\t *\n\t * @codingstandard ftlabs-jsv2\n\t * @copyright The Financial Times Limited [All Rights Reserved]\n\t * @license MIT License (see LICENSE.txt)\n\t */\n\n\t/*jslint browser:true, node:true*/\n\t/*global define, Event, Node*/\n\n\n\t/**\n\t * Instantiate fast-clicking listeners on the specified layer.\n\t *\n\t * @constructor\n\t * @param {Element} layer The layer to listen on\n\t * @param {Object} [options={}] The options to override the defaults\n\t */\n\tfunction FastClick(layer, options) {\n\t\tvar oldOnClick;\n\n\t\toptions = options || {};\n\n\t\t/**\n\t\t * Whether a click is currently being tracked.\n\t\t *\n\t\t * @type boolean\n\t\t */\n\t\tthis.trackingClick = false;\n\n\n\t\t/**\n\t\t * Timestamp for when click tracking started.\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.trackingClickStart = 0;\n\n\n\t\t/**\n\t\t * The element being tracked for a click.\n\t\t *\n\t\t * @type EventTarget\n\t\t */\n\t\tthis.targetElement = null;\n\n\n\t\t/**\n\t\t * X-coordinate of touch start event.\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.touchStartX = 0;\n\n\n\t\t/**\n\t\t * Y-coordinate of touch start event.\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.touchStartY = 0;\n\n\n\t\t/**\n\t\t * ID of the last touch, retrieved from Touch.identifier.\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.lastTouchIdentifier = 0;\n\n\n\t\t/**\n\t\t * Touchmove boundary, beyond which a click will be cancelled.\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.touchBoundary = options.touchBoundary || 10;\n\n\n\t\t/**\n\t\t * The FastClick layer.\n\t\t *\n\t\t * @type Element\n\t\t */\n\t\tthis.layer = layer;\n\n\t\t/**\n\t\t * The minimum time between tap(touchstart and touchend) events\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.tapDelay = options.tapDelay || 200;\n\n\t\t/**\n\t\t * The maximum time for a tap\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.tapTimeout = options.tapTimeout || 700;\n\n\t\tif (FastClick.notNeeded(layer)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Some old versions of Android don't have Function.prototype.bind\n\t\tfunction bind(method, context) {\n\t\t\treturn function() { return method.apply(context, arguments); };\n\t\t}\n\n\n\t\tvar methods = ['onMouse', 'onClick', 'onTouchStart', 'onTouchMove', 'onTouchEnd', 'onTouchCancel'];\n\t\tvar context = this;\n\t\tfor (var i = 0, l = methods.length; i < l; i++) {\n\t\t\tcontext[methods[i]] = bind(context[methods[i]], context);\n\t\t}\n\n\t\t// Set up event handlers as required\n\t\tif (deviceIsAndroid) {\n\t\t\tlayer.addEventListener('mouseover', this.onMouse, true);\n\t\t\tlayer.addEventListener('mousedown', this.onMouse, true);\n\t\t\tlayer.addEventListener('mouseup', this.onMouse, true);\n\t\t}\n\n\t\tlayer.addEventListener('click', this.onClick, true);\n\t\tlayer.addEventListener('touchstart', this.onTouchStart, false);\n\t\tlayer.addEventListener('touchmove', this.onTouchMove, false);\n\t\tlayer.addEventListener('touchend', this.onTouchEnd, false);\n\t\tlayer.addEventListener('touchcancel', this.onTouchCancel, false);\n\n\t\t// Hack is required for browsers that don't support Event#stopImmediatePropagation (e.g. Android 2)\n\t\t// which is how FastClick normally stops click events bubbling to callbacks registered on the FastClick\n\t\t// layer when they are cancelled.\n\t\tif (!Event.prototype.stopImmediatePropagation) {\n\t\t\tlayer.removeEventListener = function(type, callback, capture) {\n\t\t\t\tvar rmv = Node.prototype.removeEventListener;\n\t\t\t\tif (type === 'click') {\n\t\t\t\t\trmv.call(layer, type, callback.hijacked || callback, capture);\n\t\t\t\t} else {\n\t\t\t\t\trmv.call(layer, type, callback, capture);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tlayer.addEventListener = function(type, callback, capture) {\n\t\t\t\tvar adv = Node.prototype.addEventListener;\n\t\t\t\tif (type === 'click') {\n\t\t\t\t\tadv.call(layer, type, callback.hijacked || (callback.hijacked = function(event) {\n\t\t\t\t\t\tif (!event.propagationStopped) {\n\t\t\t\t\t\t\tcallback(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t}), capture);\n\t\t\t\t} else {\n\t\t\t\t\tadv.call(layer, type, callback, capture);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\t// If a handler is already declared in the element's onclick attribute, it will be fired before\n\t\t// FastClick's onClick handler. Fix this by pulling out the user-defined handler function and\n\t\t// adding it as listener.\n\t\tif (typeof layer.onclick === 'function') {\n\n\t\t\t// Android browser on at least 3.2 requires a new reference to the function in layer.onclick\n\t\t\t// - the old one won't work if passed to addEventListener directly.\n\t\t\toldOnClick = layer.onclick;\n\t\t\tlayer.addEventListener('click', function(event) {\n\t\t\t\toldOnClick(event);\n\t\t\t}, false);\n\t\t\tlayer.onclick = null;\n\t\t}\n\t}\n\n\t/**\n\t* Windows Phone 8.1 fakes user agent string to look like Android and iPhone.\n\t*\n\t* @type boolean\n\t*/\n\tvar deviceIsWindowsPhone = navigator.userAgent.indexOf(\"Windows Phone\") >= 0;\n\n\t/**\n\t * Android requires exceptions.\n\t *\n\t * @type boolean\n\t */\n\tvar deviceIsAndroid = navigator.userAgent.indexOf('Android') > 0 && !deviceIsWindowsPhone;\n\n\n\t/**\n\t * iOS requires exceptions.\n\t *\n\t * @type boolean\n\t */\n\tvar deviceIsIOS = /iP(ad|hone|od)/.test(navigator.userAgent) && !deviceIsWindowsPhone;\n\n\n\t/**\n\t * iOS 4 requires an exception for select elements.\n\t *\n\t * @type boolean\n\t */\n\tvar deviceIsIOS4 = deviceIsIOS && (/OS 4_\\d(_\\d)?/).test(navigator.userAgent);\n\n\n\t/**\n\t * iOS 6.0-7.* requires the target element to be manually derived\n\t *\n\t * @type boolean\n\t */\n\tvar deviceIsIOSWithBadTarget = deviceIsIOS && (/OS [6-7]_\\d/).test(navigator.userAgent);\n\n\t/**\n\t * BlackBerry requires exceptions.\n\t *\n\t * @type boolean\n\t */\n\tvar deviceIsBlackBerry10 = navigator.userAgent.indexOf('BB10') > 0;\n\n\t/**\n\t * Determine whether a given element requires a native click.\n\t *\n\t * @param {EventTarget|Element} target Target DOM element\n\t * @returns {boolean} Returns true if the element needs a native click\n\t */\n\tFastClick.prototype.needsClick = function(target) {\n\t\tswitch (target.nodeName.toLowerCase()) {\n\n\t\t// Don't send a synthetic click to disabled inputs (issue #62)\n\t\tcase 'button':\n\t\tcase 'select':\n\t\tcase 'textarea':\n\t\t\tif (target.disabled) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tbreak;\n\t\tcase 'input':\n\n\t\t\t// File inputs need real clicks on iOS 6 due to a browser bug (issue #68)\n\t\t\tif ((deviceIsIOS && target.type === 'file') || target.disabled) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tbreak;\n\t\tcase 'label':\n\t\tcase 'iframe': // iOS8 homescreen apps can prevent events bubbling into frames\n\t\tcase 'video':\n\t\t\treturn true;\n\t\t}\n\n\t\treturn (/\\bneedsclick\\b/).test(target.className);\n\t};\n\n\n\t/**\n\t * Determine whether a given element requires a call to focus to simulate click into element.\n\t *\n\t * @param {EventTarget|Element} target Target DOM element\n\t * @returns {boolean} Returns true if the element requires a call to focus to simulate native click.\n\t */\n\tFastClick.prototype.needsFocus = function(target) {\n\t\tswitch (target.nodeName.toLowerCase()) {\n\t\tcase 'textarea':\n\t\t\treturn true;\n\t\tcase 'select':\n\t\t\treturn !deviceIsAndroid;\n\t\tcase 'input':\n\t\t\tswitch (target.type) {\n\t\t\tcase 'button':\n\t\t\tcase 'checkbox':\n\t\t\tcase 'file':\n\t\t\tcase 'image':\n\t\t\tcase 'radio':\n\t\t\tcase 'submit':\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// No point in attempting to focus disabled inputs\n\t\t\treturn !target.disabled && !target.readOnly;\n\t\tdefault:\n\t\t\treturn (/\\bneedsfocus\\b/).test(target.className);\n\t\t}\n\t};\n\n\n\t/**\n\t * Send a click event to the specified element.\n\t *\n\t * @param {EventTarget|Element} targetElement\n\t * @param {Event} event\n\t */\n\tFastClick.prototype.sendClick = function(targetElement, event) {\n\t\tvar clickEvent, touch;\n\n\t\t// On some Android devices activeElement needs to be blurred otherwise the synthetic click will have no effect (#24)\n\t\tif (document.activeElement && document.activeElement !== targetElement) {\n\t\t\tdocument.activeElement.blur();\n\t\t}\n\n\t\ttouch = event.changedTouches[0];\n\n\t\t// Synthesise a click event, with an extra attribute so it can be tracked\n\t\tclickEvent = document.createEvent('MouseEvents');\n\t\tclickEvent.initMouseEvent(this.determineEventType(targetElement), true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null);\n\t\tclickEvent.forwardedTouchEvent = true;\n\t\ttargetElement.dispatchEvent(clickEvent);\n\t};\n\n\tFastClick.prototype.determineEventType = function(targetElement) {\n\n\t\t//Issue #159: Android Chrome Select Box does not open with a synthetic click event\n\t\tif (deviceIsAndroid && targetElement.tagName.toLowerCase() === 'select') {\n\t\t\treturn 'mousedown';\n\t\t}\n\n\t\treturn 'click';\n\t};\n\n\n\t/**\n\t * @param {EventTarget|Element} targetElement\n\t */\n\tFastClick.prototype.focus = function(targetElement) {\n\t\tvar length;\n\n\t\t// Issue #160: on iOS 7, some input elements (e.g. date datetime month) throw a vague TypeError on setSelectionRange. These elements don't have an integer value for the selectionStart and selectionEnd properties, but unfortunately that can't be used for detection because accessing the properties also throws a TypeError. Just check the type instead. Filed as Apple bug #15122724.\n\t\tif (deviceIsIOS && targetElement.setSelectionRange && targetElement.type.indexOf('date') !== 0 && targetElement.type !== 'time' && targetElement.type !== 'month') {\n\t\t\tlength = targetElement.value.length;\n\t\t\ttargetElement.setSelectionRange(length, length);\n\t\t} else {\n\t\t\ttargetElement.focus();\n\t\t}\n\t};\n\n\n\t/**\n\t * Check whether the given target element is a child of a scrollable layer and if so, set a flag on it.\n\t *\n\t * @param {EventTarget|Element} targetElement\n\t */\n\tFastClick.prototype.updateScrollParent = function(targetElement) {\n\t\tvar scrollParent, parentElement;\n\n\t\tscrollParent = targetElement.fastClickScrollParent;\n\n\t\t// Attempt to discover whether the target element is contained within a scrollable layer. Re-check if the\n\t\t// target element was moved to another parent.\n\t\tif (!scrollParent || !scrollParent.contains(targetElement)) {\n\t\t\tparentElement = targetElement;\n\t\t\tdo {\n\t\t\t\tif (parentElement.scrollHeight > parentElement.offsetHeight) {\n\t\t\t\t\tscrollParent = parentElement;\n\t\t\t\t\ttargetElement.fastClickScrollParent = parentElement;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tparentElement = parentElement.parentElement;\n\t\t\t} while (parentElement);\n\t\t}\n\n\t\t// Always update the scroll top tracker if possible.\n\t\tif (scrollParent) {\n\t\t\tscrollParent.fastClickLastScrollTop = scrollParent.scrollTop;\n\t\t}\n\t};\n\n\n\t/**\n\t * @param {EventTarget} targetElement\n\t * @returns {Element|EventTarget}\n\t */\n\tFastClick.prototype.getTargetElementFromEventTarget = function(eventTarget) {\n\n\t\t// On some older browsers (notably Safari on iOS 4.1 - see issue #56) the event target may be a text node.\n\t\tif (eventTarget.nodeType === Node.TEXT_NODE) {\n\t\t\treturn eventTarget.parentNode;\n\t\t}\n\n\t\treturn eventTarget;\n\t};\n\n\n\t/**\n\t * On touch start, record the position and scroll offset.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.onTouchStart = function(event) {\n\t\tvar targetElement, touch, selection;\n\n\t\t// Ignore multiple touches, otherwise pinch-to-zoom is prevented if both fingers are on the FastClick element (issue #111).\n\t\tif (event.targetTouches.length > 1) {\n\t\t\treturn true;\n\t\t}\n\n\t\ttargetElement = this.getTargetElementFromEventTarget(event.target);\n\t\ttouch = event.targetTouches[0];\n\n\t\tif (deviceIsIOS) {\n\n\t\t\t// Only trusted events will deselect text on iOS (issue #49)\n\t\t\tselection = window.getSelection();\n\t\t\tif (selection.rangeCount && !selection.isCollapsed) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (!deviceIsIOS4) {\n\n\t\t\t\t// Weird things happen on iOS when an alert or confirm dialog is opened from a click event callback (issue #23):\n\t\t\t\t// when the user next taps anywhere else on the page, new touchstart and touchend events are dispatched\n\t\t\t\t// with the same identifier as the touch event that previously triggered the click that triggered the alert.\n\t\t\t\t// Sadly, there is an issue on iOS 4 that causes some normal touch events to have the same identifier as an\n\t\t\t\t// immediately preceeding touch event (issue #52), so this fix is unavailable on that platform.\n\t\t\t\t// Issue 120: touch.identifier is 0 when Chrome dev tools 'Emulate touch events' is set with an iOS device UA string,\n\t\t\t\t// which causes all touch events to be ignored. As this block only applies to iOS, and iOS identifiers are always long,\n\t\t\t\t// random integers, it's safe to to continue if the identifier is 0 here.\n\t\t\t\tif (touch.identifier && touch.identifier === this.lastTouchIdentifier) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tthis.lastTouchIdentifier = touch.identifier;\n\n\t\t\t\t// If the target element is a child of a scrollable layer (using -webkit-overflow-scrolling: touch) and:\n\t\t\t\t// 1) the user does a fling scroll on the scrollable layer\n\t\t\t\t// 2) the user stops the fling scroll with another tap\n\t\t\t\t// then the event.target of the last 'touchend' event will be the element that was under the user's finger\n\t\t\t\t// when the fling scroll was started, causing FastClick to send a click event to that layer - unless a check\n\t\t\t\t// is made to ensure that a parent layer was not scrolled before sending a synthetic click (issue #42).\n\t\t\t\tthis.updateScrollParent(targetElement);\n\t\t\t}\n\t\t}\n\n\t\tthis.trackingClick = true;\n\t\tthis.trackingClickStart = event.timeStamp;\n\t\tthis.targetElement = targetElement;\n\n\t\tthis.touchStartX = touch.pageX;\n\t\tthis.touchStartY = touch.pageY;\n\n\t\t// Prevent phantom clicks on fast double-tap (issue #36)\n\t\tif ((event.timeStamp - this.lastClickTime) < this.tapDelay) {\n\t\t\tevent.preventDefault();\n\t\t}\n\n\t\treturn true;\n\t};\n\n\n\t/**\n\t * Based on a touchmove event object, check whether the touch has moved past a boundary since it started.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.touchHasMoved = function(event) {\n\t\tvar touch = event.changedTouches[0], boundary = this.touchBoundary;\n\n\t\tif (Math.abs(touch.pageX - this.touchStartX) > boundary || Math.abs(touch.pageY - this.touchStartY) > boundary) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t};\n\n\n\t/**\n\t * Update the last position.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.onTouchMove = function(event) {\n\t\tif (!this.trackingClick) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// If the touch has moved, cancel the click tracking\n\t\tif (this.targetElement !== this.getTargetElementFromEventTarget(event.target) || this.touchHasMoved(event)) {\n\t\t\tthis.trackingClick = false;\n\t\t\tthis.targetElement = null;\n\t\t}\n\n\t\treturn true;\n\t};\n\n\n\t/**\n\t * Attempt to find the labelled control for the given label element.\n\t *\n\t * @param {EventTarget|HTMLLabelElement} labelElement\n\t * @returns {Element|null}\n\t */\n\tFastClick.prototype.findControl = function(labelElement) {\n\n\t\t// Fast path for newer browsers supporting the HTML5 control attribute\n\t\tif (labelElement.control !== undefined) {\n\t\t\treturn labelElement.control;\n\t\t}\n\n\t\t// All browsers under test that support touch events also support the HTML5 htmlFor attribute\n\t\tif (labelElement.htmlFor) {\n\t\t\treturn document.getElementById(labelElement.htmlFor);\n\t\t}\n\n\t\t// If no for attribute exists, attempt to retrieve the first labellable descendant element\n\t\t// the list of which is defined here: http://www.w3.org/TR/html5/forms.html#category-label\n\t\treturn labelElement.querySelector('button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea');\n\t};\n\n\n\t/**\n\t * On touch end, determine whether to send a click event at once.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.onTouchEnd = function(event) {\n\t\tvar forElement, trackingClickStart, targetTagName, scrollParent, touch, targetElement = this.targetElement;\n\n\t\tif (!this.trackingClick) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Prevent phantom clicks on fast double-tap (issue #36)\n\t\tif ((event.timeStamp - this.lastClickTime) < this.tapDelay) {\n\t\t\tthis.cancelNextClick = true;\n\t\t\treturn true;\n\t\t}\n\n\t\tif ((event.timeStamp - this.trackingClickStart) > this.tapTimeout) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Reset to prevent wrong click cancel on input (issue #156).\n\t\tthis.cancelNextClick = false;\n\n\t\tthis.lastClickTime = event.timeStamp;\n\n\t\ttrackingClickStart = this.trackingClickStart;\n\t\tthis.trackingClick = false;\n\t\tthis.trackingClickStart = 0;\n\n\t\t// On some iOS devices, the targetElement supplied with the event is invalid if the layer\n\t\t// is performing a transition or scroll, and has to be re-detected manually. Note that\n\t\t// for this to function correctly, it must be called *after* the event target is checked!\n\t\t// See issue #57; also filed as rdar://13048589 .\n\t\tif (deviceIsIOSWithBadTarget) {\n\t\t\ttouch = event.changedTouches[0];\n\n\t\t\t// In certain cases arguments of elementFromPoint can be negative, so prevent setting targetElement to null\n\t\t\ttargetElement = document.elementFromPoint(touch.pageX - window.pageXOffset, touch.pageY - window.pageYOffset) || targetElement;\n\t\t\ttargetElement.fastClickScrollParent = this.targetElement.fastClickScrollParent;\n\t\t}\n\n\t\ttargetTagName = targetElement.tagName.toLowerCase();\n\t\tif (targetTagName === 'label') {\n\t\t\tforElement = this.findControl(targetElement);\n\t\t\tif (forElement) {\n\t\t\t\tthis.focus(targetElement);\n\t\t\t\tif (deviceIsAndroid) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\ttargetElement = forElement;\n\t\t\t}\n\t\t} else if (this.needsFocus(targetElement)) {\n\n\t\t\t// Case 1: If the touch started a while ago (best guess is 100ms based on tests for issue #36) then focus will be triggered anyway. Return early and unset the target element reference so that the subsequent click will be allowed through.\n\t\t\t// Case 2: Without this exception for input elements tapped when the document is contained in an iframe, then any inputted text won't be visible even though the value attribute is updated as the user types (issue #37).\n\t\t\tif ((event.timeStamp - trackingClickStart) > 100 || (deviceIsIOS && window.top !== window && targetTagName === 'input')) {\n\t\t\t\tthis.targetElement = null;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthis.focus(targetElement);\n\t\t\tthis.sendClick(targetElement, event);\n\n\t\t\t// Select elements need the event to go through on iOS 4, otherwise the selector menu won't open.\n\t\t\t// Also this breaks opening selects when VoiceOver is active on iOS6, iOS7 (and possibly others)\n\t\t\tif (!deviceIsIOS || targetTagName !== 'select') {\n\t\t\t\tthis.targetElement = null;\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\tif (deviceIsIOS && !deviceIsIOS4) {\n\n\t\t\t// Don't send a synthetic click event if the target element is contained within a parent layer that was scrolled\n\t\t\t// and this tap is being used to stop the scrolling (usually initiated by a fling - issue #42).\n\t\t\tscrollParent = targetElement.fastClickScrollParent;\n\t\t\tif (scrollParent && scrollParent.fastClickLastScrollTop !== scrollParent.scrollTop) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t// Prevent the actual click from going though - unless the target node is marked as requiring\n\t\t// real clicks or if it is in the whitelist in which case only non-programmatic clicks are permitted.\n\t\tif (!this.needsClick(targetElement)) {\n\t\t\tevent.preventDefault();\n\t\t\tthis.sendClick(targetElement, event);\n\t\t}\n\n\t\treturn false;\n\t};\n\n\n\t/**\n\t * On touch cancel, stop tracking the click.\n\t *\n\t * @returns {void}\n\t */\n\tFastClick.prototype.onTouchCancel = function() {\n\t\tthis.trackingClick = false;\n\t\tthis.targetElement = null;\n\t};\n\n\n\t/**\n\t * Determine mouse events which should be permitted.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.onMouse = function(event) {\n\n\t\t// If a target element was never set (because a touch event was never fired) allow the event\n\t\tif (!this.targetElement) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (event.forwardedTouchEvent) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Programmatically generated events targeting a specific element should be permitted\n\t\tif (!event.cancelable) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Derive and check the target element to see whether the mouse event needs to be permitted;\n\t\t// unless explicitly enabled, prevent non-touch click events from triggering actions,\n\t\t// to prevent ghost/doubleclicks.\n\t\tif (!this.needsClick(this.targetElement) || this.cancelNextClick) {\n\n\t\t\t// Prevent any user-added listeners declared on FastClick element from being fired.\n\t\t\tif (event.stopImmediatePropagation) {\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t} else {\n\n\t\t\t\t// Part of the hack for browsers that don't support Event#stopImmediatePropagation (e.g. Android 2)\n\t\t\t\tevent.propagationStopped = true;\n\t\t\t}\n\n\t\t\t// Cancel the event\n\t\t\tevent.stopPropagation();\n\t\t\tevent.preventDefault();\n\n\t\t\treturn false;\n\t\t}\n\n\t\t// If the mouse event is permitted, return true for the action to go through.\n\t\treturn true;\n\t};\n\n\n\t/**\n\t * On actual clicks, determine whether this is a touch-generated click, a click action occurring\n\t * naturally after a delay after a touch (which needs to be cancelled to avoid duplication), or\n\t * an actual click which should be permitted.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.onClick = function(event) {\n\t\tvar permitted;\n\n\t\t// It's possible for another FastClick-like library delivered with third-party code to fire a click event before FastClick does (issue #44). In that case, set the click-tracking flag back to false and return early. This will cause onTouchEnd to return early.\n\t\tif (this.trackingClick) {\n\t\t\tthis.targetElement = null;\n\t\t\tthis.trackingClick = false;\n\t\t\treturn true;\n\t\t}\n\n\t\t// Very odd behaviour on iOS (issue #18): if a submit element is present inside a form and the user hits enter in the iOS simulator or clicks the Go button on the pop-up OS keyboard the a kind of 'fake' click event will be triggered with the submit-type input element as the target.\n\t\tif (event.target.type === 'submit' && event.detail === 0) {\n\t\t\treturn true;\n\t\t}\n\n\t\tpermitted = this.onMouse(event);\n\n\t\t// Only unset targetElement if the click is not permitted. This will ensure that the check for !targetElement in onMouse fails and the browser's click doesn't go through.\n\t\tif (!permitted) {\n\t\t\tthis.targetElement = null;\n\t\t}\n\n\t\t// If clicks are permitted, return true for the action to go through.\n\t\treturn permitted;\n\t};\n\n\n\t/**\n\t * Remove all FastClick's event listeners.\n\t *\n\t * @returns {void}\n\t */\n\tFastClick.prototype.destroy = function() {\n\t\tvar layer = this.layer;\n\n\t\tif (deviceIsAndroid) {\n\t\t\tlayer.removeEventListener('mouseover', this.onMouse, true);\n\t\t\tlayer.removeEventListener('mousedown', this.onMouse, true);\n\t\t\tlayer.removeEventListener('mouseup', this.onMouse, true);\n\t\t}\n\n\t\tlayer.removeEventListener('click', this.onClick, true);\n\t\tlayer.removeEventListener('touchstart', this.onTouchStart, false);\n\t\tlayer.removeEventListener('touchmove', this.onTouchMove, false);\n\t\tlayer.removeEventListener('touchend', this.onTouchEnd, false);\n\t\tlayer.removeEventListener('touchcancel', this.onTouchCancel, false);\n\t};\n\n\n\t/**\n\t * Check whether FastClick is needed.\n\t *\n\t * @param {Element} layer The layer to listen on\n\t */\n\tFastClick.notNeeded = function(layer) {\n\t\tvar metaViewport;\n\t\tvar chromeVersion;\n\t\tvar blackberryVersion;\n\t\tvar firefoxVersion;\n\n\t\t// Devices that don't support touch don't need FastClick\n\t\tif (typeof window.ontouchstart === 'undefined') {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Chrome version - zero for other browsers\n\t\tchromeVersion = +(/Chrome\\/([0-9]+)/.exec(navigator.userAgent) || [,0])[1];\n\n\t\tif (chromeVersion) {\n\n\t\t\tif (deviceIsAndroid) {\n\t\t\t\tmetaViewport = document.querySelector('meta[name=viewport]');\n\n\t\t\t\tif (metaViewport) {\n\t\t\t\t\t// Chrome on Android with user-scalable=\"no\" doesn't need FastClick (issue #89)\n\t\t\t\t\tif (metaViewport.content.indexOf('user-scalable=no') !== -1) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\t// Chrome 32 and above with width=device-width or less don't need FastClick\n\t\t\t\t\tif (chromeVersion > 31 && document.documentElement.scrollWidth <= window.outerWidth) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Chrome desktop doesn't need FastClick (issue #15)\n\t\t\t} else {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tif (deviceIsBlackBerry10) {\n\t\t\tblackberryVersion = navigator.userAgent.match(/Version\\/([0-9]*)\\.([0-9]*)/);\n\n\t\t\t// BlackBerry 10.3+ does not require Fastclick library.\n\t\t\t// https://github.com/ftlabs/fastclick/issues/251\n\t\t\tif (blackberryVersion[1] >= 10 && blackberryVersion[2] >= 3) {\n\t\t\t\tmetaViewport = document.querySelector('meta[name=viewport]');\n\n\t\t\t\tif (metaViewport) {\n\t\t\t\t\t// user-scalable=no eliminates click delay.\n\t\t\t\t\tif (metaViewport.content.indexOf('user-scalable=no') !== -1) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\t// width=device-width (or less than device-width) eliminates click delay.\n\t\t\t\t\tif (document.documentElement.scrollWidth <= window.outerWidth) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// IE10 with -ms-touch-action: none or manipulation, which disables double-tap-to-zoom (issue #97)\n\t\tif (layer.style.msTouchAction === 'none' || layer.style.touchAction === 'manipulation') {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Firefox version - zero for other browsers\n\t\tfirefoxVersion = +(/Firefox\\/([0-9]+)/.exec(navigator.userAgent) || [,0])[1];\n\n\t\tif (firefoxVersion >= 27) {\n\t\t\t// Firefox 27+ does not have tap delay if the content is not zoomable - https://bugzilla.mozilla.org/show_bug.cgi?id=922896\n\n\t\t\tmetaViewport = document.querySelector('meta[name=viewport]');\n\t\t\tif (metaViewport && (metaViewport.content.indexOf('user-scalable=no') !== -1 || document.documentElement.scrollWidth <= window.outerWidth)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t// IE11: prefixed -ms-touch-action is no longer supported and it's recomended to use non-prefixed version\n\t\t// http://msdn.microsoft.com/en-us/library/windows/apps/Hh767313.aspx\n\t\tif (layer.style.touchAction === 'none' || layer.style.touchAction === 'manipulation') {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t};\n\n\n\t/**\n\t * Factory method for creating a FastClick object\n\t *\n\t * @param {Element} layer The layer to listen on\n\t * @param {Object} [options={}] The options to override the defaults\n\t */\n\tFastClick.attach = function(layer, options) {\n\t\treturn new FastClick(layer, options);\n\t};\n\n\n\tif (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine(function() {\n\t\t\treturn FastClick;\n\t\t});\n\t} else if (typeof module !== 'undefined' && module.exports) {\n\t\tmodule.exports = FastClick.attach;\n\t\tmodule.exports.FastClick = FastClick;\n\t} else {\n\t\twindow.FastClick = FastClick;\n\t}\n}());\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/fastclick/lib/fastclick.js\n// module id = v5o6\n// module chunks = 0","var Clipboard = require('clipboard/dist/clipboard.min.js') // FIXME: workaround for browserify\n\nvar VueClipboard = {\n install: function (Vue) {\n Vue.prototype.$copyText = function (text, container) {\n return new Promise(function (resolve, reject) {\n var fake_el = document.createElement('button');\n var clipboard = new Clipboard(fake_el, {\n text: function () { return text },\n action: function () { return 'copy' },\n container: typeof container === 'object' ? container : document.body\n });\n clipboard.on('success', function (e) {\n clipboard.destroy();\n resolve(e);\n });\n clipboard.on('error', function (e) {\n clipboard.destroy();\n reject(e);\n });\n fake_el.click();\n });\n };\n\n Vue.directive('clipboard', {\n bind: function (el, binding, vnode) {\n if(binding.arg === 'success') {\n el._v_clipboard_success = binding.value\n } else if(binding.arg === 'error') {\n el._v_clipboard_error = binding.value\n } else {\n var clipboard = new Clipboard(el, {\n text: function () { return binding.value },\n action: function () { return binding.arg === 'cut' ? 'cut' : 'copy' }\n })\n clipboard.on('success', function (e) {\n var callback = el._v_clipboard_success\n callback && callback(e)\n })\n clipboard.on('error', function (e) {\n var callback = el._v_clipboard_error\n callback && callback(e)\n })\n el._v_clipboard = clipboard\n }\n },\n update: function (el, binding) {\n if(binding.arg === 'success') {\n el._v_clipboard_success = binding.value\n } else if(binding.arg === 'error') {\n el._v_clipboard_error = binding.value\n } else {\n el._v_clipboard.text = function () { return binding.value }\n el._v_clipboard.action = function () { return binding.arg === 'cut' ? 'cut' : 'copy' }\n }\n },\n unbind: function (el, binding) {\n if(binding.arg === 'success') {\n delete el._v_clipboard_success\n } else if(binding.arg === 'error') {\n delete el._v_clipboard_error\n } else {\n el._v_clipboard.destroy()\n delete el._v_clipboard\n }\n }\n })\n }\n}\n\nif (typeof exports == \"object\") {\n module.exports = VueClipboard\n} else if (typeof define == \"function\" && define.amd) {\n define([], function() {\n return VueClipboard\n })\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-clipboard2/vue-clipboard.js\n// module id = wvfG\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\nvar isAbsoluteURL = require('./../helpers/isAbsoluteURL');\nvar combineURLs = require('./../helpers/combineURLs');\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Support baseURL config\n if (config.baseURL && !isAbsoluteURL(config.url)) {\n config.url = combineURLs(config.baseURL, config.url);\n }\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData(\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers || {}\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData(\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData(\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/core/dispatchRequest.js\n// module id = xLtR\n// module chunks = 0"],"sourceRoot":""}