{"version":3,"file":"js/dlp_bundle.js","mappings":"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QAASikD,GAGpElkD,EAAOC,OACf,CCtBAikD,EAAoBlsD,EAAI,WACvB,GAA0B,iBAAfssD,WAAyB,OAAOA,WAC3C,IACC,OAAOzqD,MAAQ,IAAIsqC,SAAS,cAAb,EAChB,CAAE,MAAOpsC,GACR,GAAsB,iBAAXwI,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCCxB2jD,EAAoB/rD,EAAK8H,IACH,oBAAXo+B,QAA0BA,OAAO4G,aAC1CppC,OAAOC,eAAemE,EAASo+B,OAAO4G,YAAa,CAAElpC,MAAO,WAE7DF,OAAOC,eAAemE,EAAS,aAAc,CAAElE,OAAO,GAAO,qBCJ9D,QACA,QACA,QACA,QACA,OACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QAEA,MACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,OACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,OACA,QACA,QACA,QACA,QACA,QACA,QACA,QAGA,QACA,QACA,QACA,QACA,QACA,QACA,OACA,QACA,QACA","sources":["webpack:///./scripts/external/flowplayer.js","webpack:///./scripts/typescript/debug.ts","webpack:///./scripts/typescript/event-bus.ts","webpack:///./scripts/typescript/exception.ts","webpack:///./scripts/typescript/image-loader.ts","webpack:///./scripts/typescript/languageFragmentsTranslation.ts","webpack:///./scripts/typescript/modal-Dialog.ts","webpack:///./scripts/typescript/modal-scrollLock.ts","webpack:///./scripts/typescript/queryParameterTools.ts","webpack:///./scripts/typescript/sliced-3d.ts","webpack:///./scripts/typescript/text-module.ts","webpack:///./scripts/typescript/video-component.ts","webpack:///webpack/bootstrap","webpack:///webpack/runtime/global","webpack:///webpack/runtime/make namespace object","webpack:///./dlp-bundle.ts"],"sourcesContent":["/*!\r\n\r\n Flowplayer Commercial v7.0.4 (Wednesday, 01. February 2017 10:54AM) | flowplayer.org/license\r\n\r\n*/\r\n/*! (C) WebReflection Mit Style License */\r\n(function (e) { function g(e, t, n, r) { for (var i, s = n.slice(), o = w(t, e), u = 0, a = s.length; u < a; u++) { handler = s[u], typeof handler == \"object\" && typeof handler.handleEvent == \"function\" ? handler.handleEvent(o) : handler.call(e, o); if (o.stoppedImmediatePropagation) break } return i = !o.stoppedPropagation, r && i && e.parentNode ? e.parentNode.dispatchEvent(o) : !o.defaultPrevented } function y(e, t) { return { configurable: !0, get: e, set: t } } function b(e, t, n) { var r = f(t || e, n); u(e, \"textContent\", y(function () { return r.get.call(this) }, function (e) { r.set.call(this, e) })) } function w(e, t) { return e.currentTarget = t, e.eventPhase = e.target === e.currentTarget ? 2 : 3, e } function E(e, t) { var n = e.length; while (n-- && e[n] !== t); return n } function S() { if (this.tagName === \"BR\") return \"\\n\"; var e = this.firstChild, t = []; while (e) e.nodeType !== 8 && e.nodeType !== 7 && t.push(e.textContent), e = e.nextSibling; return t.join(\"\") } function x(e) { return e.nodeType !== 9 && document.documentElement.contains(e) } function T(e) { !n && d.test(document.readyState) && (n = !n, document.detachEvent(r, T), e = document.createEvent(\"Event\"), e.initEvent(i, !0, !0), document.dispatchEvent(e)) } function N(e) { var t; while (t = this.lastChild) this.removeChild(t); e != null && this.appendChild(document.createTextNode(e)) } function C(t, n) { return n || (n = e.event), n.target || (n.target = n.srcElement || n.fromElement || document), n.timeStamp || (n.timeStamp = (new Date).getTime()), n } if (document.createEvent) return; var t = !0, n = !1, r = \"onreadystatechange\", i = \"DOMContentLoaded\", s = \"__IE8__\" + Math.random(), o = e.Object, u = o.defineProperty || function (e, t, n) { e[t] = n.value }, a = o.defineProperties || function (t, n) { for (var r in n) if (l.call(n, r)) try { u(t, r, n[r]) } catch (i) { e.console && console.log(r + \" failed on object:\", t, i.message) } }, f = o.getOwnPropertyDescriptor, l = o.prototype.hasOwnProperty, c = e.Element.prototype, h = e.Text.prototype, p = /^[a-z]+$/, d = /loaded|complete/, v = {}, m = document.createElement(\"div\"); b(e.HTMLCommentElement.prototype, c, \"nodeValue\"), b(e.HTMLScriptElement.prototype, null, \"text\"), b(h, null, \"nodeValue\"), b(e.HTMLTitleElement.prototype, null, \"text\"), u(e.HTMLStyleElement.prototype, \"textContent\", function (e) { return y(function () { return e.get.call(this.styleSheet) }, function (t) { e.set.call(this.styleSheet, t) }) }(f(e.CSSStyleSheet.prototype, \"cssText\"))), a(c, { textContent: { get: S, set: N }, firstElementChild: { get: function () { for (var e = this.childNodes || [], t = 0, n = e.length; t < n; t++)if (e[t].nodeType == 1) return e[t] } }, lastElementChild: { get: function () { for (var e = this.childNodes || [], t = e.length; t--;)if (e[t].nodeType == 1) return e[t] } }, previousElementSibling: { get: function () { var e = this.previousSibling; while (e && e.nodeType != 1) e = e.previousSibling; return e } }, nextElementSibling: { get: function () { var e = this.nextSibling; while (e && e.nodeType != 1) e = e.nextSibling; return e } }, childElementCount: { get: function () { for (var e = 0, t = this.childNodes || [], n = t.length; n--; e += t[n].nodeType == 1); return e } }, addEventListener: { value: function (e, t, n) { var r = this, i = \"on\" + e, o = r[s] || u(r, s, { value: {} })[s], a = o[i] || (o[i] = {}), f = a.h || (a.h = []), c; if (!l.call(a, \"w\")) { a.w = function (e) { return e[s] || g(r, C(r, e), f, !1) }; if (!l.call(v, i)) if (p.test(e)) try { c = document.createEventObject(), c[s] = !0, r.nodeType != 9 && r.parentNode == null && m.appendChild(r), r.fireEvent(i, c), v[i] = !0 } catch (c) { v[i] = !1; while (m.hasChildNodes()) m.removeChild(m.firstChild) } else v[i] = !1; (a.n = v[i]) && r.attachEvent(i, a.w) } E(f, t) < 0 && f[n ? \"unshift\" : \"push\"](t) } }, dispatchEvent: { value: function (e) { var t = this, n = \"on\" + e.type, r = t[s], i = r && r[n], o = !!i, u; return e.target || (e.target = t), o ? i.n ? t.fireEvent(n, e) : g(t, e, i.h, !0) : (u = t.parentNode) ? u.dispatchEvent(e) : !0, !e.defaultPrevented } }, removeEventListener: { value: function (e, t, n) { var r = this, i = \"on\" + e, o = r[s], u = o && o[i], a = u && u.h, f = a ? E(a, t) : -1; -1 < f && a.splice(f, 1) } } }), a(h, { addEventListener: { value: c.addEventListener }, dispatchEvent: { value: c.dispatchEvent }, removeEventListener: { value: c.removeEventListener } }), a(e.XMLHttpRequest.prototype, { addEventListener: { value: function (e, t, n) { var r = this, i = \"on\" + e, o = r[s] || u(r, s, { value: {} })[s], a = o[i] || (o[i] = {}), f = a.h || (a.h = []); E(f, t) < 0 && (r[i] || (r[i] = function () { var t = document.createEvent(\"Event\"); t.initEvent(e, !0, !0), r.dispatchEvent(t) }), f[n ? \"unshift\" : \"push\"](t)) } }, dispatchEvent: { value: function (e) { var t = this, n = \"on\" + e.type, r = t[s], i = r && r[n], o = !!i; return o && (i.n ? t.fireEvent(n, e) : g(t, e, i.h, !0)) } }, removeEventListener: { value: c.removeEventListener } }), a(e.Event.prototype, { bubbles: { value: !0, writable: !0 }, cancelable: { value: !0, writable: !0 }, preventDefault: { value: function () { this.cancelable && (this.defaultPrevented = !0, this.returnValue = !1) } }, stopPropagation: { value: function () { this.stoppedPropagation = !0, this.cancelBubble = !0 } }, stopImmediatePropagation: { value: function () { this.stoppedImmediatePropagation = !0, this.stopPropagation() } }, initEvent: { value: function (e, t, n) { this.type = e, this.bubbles = !!t, this.cancelable = !!n, this.bubbles || this.stopPropagation() } } }), a(e.HTMLDocument.prototype, { textContent: { get: function () { return this.nodeType === 11 ? S.call(this) : null }, set: function (e) { this.nodeType === 11 && N.call(this, e) } }, addEventListener: { value: function (n, s, o) { var u = this; c.addEventListener.call(u, n, s, o), t && n === i && !d.test(u.readyState) && (t = !1, u.attachEvent(r, T), e == top && function a(e) { try { u.documentElement.doScroll(\"left\"), T() } catch (t) { setTimeout(a, 50) } }()) } }, dispatchEvent: { value: c.dispatchEvent }, removeEventListener: { value: c.removeEventListener }, createEvent: { value: function (e) { var t; if (e !== \"Event\") throw new Error(\"unsupported \" + e); return t = document.createEventObject(), t.timeStamp = (new Date).getTime(), t } } }), a(e.Window.prototype, { getComputedStyle: { value: function () { function i(e) { this._ = e } function s() { } var e = /^(?:[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|))(?!px)[a-z%]+$/, t = /^(top|right|bottom|left)$/, n = /\\-([a-z])/g, r = function (e, t) { return t.toUpperCase() }; return i.prototype.getPropertyValue = function (i) { var s = this._, o = s.style, u = s.currentStyle, a = s.runtimeStyle, f, l, c; return i = (i === \"float\" ? \"style-float\" : i).replace(n, r), f = u ? u[i] : o[i], e.test(f) && !t.test(i) && (l = o.left, c = a && a.left, c && (a.left = u.left), o.left = i === \"fontSize\" ? \"1em\" : f, f = o.pixelLeft + \"px\", o.left = l, c && (a.left = c)), f == null ? f : f + \"\" || \"auto\" }, s.prototype.getPropertyValue = function () { return null }, function (e, t) { return t ? new s(e) : new i(e) } }() }, addEventListener: { value: function (t, n, r) { var i = e, o = \"on\" + t, u; i[o] || (i[o] = function (e) { return g(i, C(i, e), u, !1) }), u = i[o][s] || (i[o][s] = []), E(u, n) < 0 && u[r ? \"unshift\" : \"push\"](n) } }, dispatchEvent: { value: function (t) { var n = e[\"on\" + t.type]; return n ? n.call(e, t) !== !1 && !t.defaultPrevented : !0 } }, removeEventListener: { value: function (t, n, r) { var i = \"on\" + t, u = (e[i] || o)[s], a = u ? E(u, n) : -1; -1 < a && u.splice(a, 1) } } }) })(this);\r\n(function (f) { if (typeof exports === \"object\" && typeof module !== \"undefined\") { module.exports = f() } else if (typeof define === \"function\" && define.amd) { define([], f) } else { var g; if (typeof window !== \"undefined\") { g = window } else if (typeof global !== \"undefined\") { g = global } else if (typeof self !== \"undefined\") { g = self } else { g = this } g.flowplayer = f() } })(function () {\r\n var define, module, exports; return (function e(t, n, r) { function s(o, u) { if (!n[o]) { if (!t[o]) { var a = typeof require == \"function\" && require; if (!u && a) return a(o, !0); if (i) return i(o, !0); var f = new Error(\"Cannot find module '\" + o + \"'\"); throw f.code = \"MODULE_NOT_FOUND\", f } var l = n[o] = { exports: {} }; t[o][0].call(l.exports, function (e) { var n = t[o][1][e]; return s(n ? n : e) }, l, l.exports, e, t, n, r) } return n[o].exports } var i = typeof require == \"function\" && require; for (var o = 0; o < r.length; o++)s(r[o]); return s })({\r\n 1: [function (_dereq_, module, exports) {\r\n 'use strict';\r\n var common = module.exports = {},\r\n ClassList = _dereq_('class-list'),\r\n $ = window.jQuery,\r\n punycode = _dereq_('punycode'),\r\n computedStyle = _dereq_('computed-style');\r\n\r\n common.noop = function () { };\r\n common.identity = function (i) { return i; };\r\n\r\n common.removeNode = function (el) {\r\n if (!el || !el.parentNode) return;\r\n el.parentNode.removeChild(el);\r\n };\r\n\r\n common.find = function (query, ctx) {\r\n if ($) return $(query, ctx).toArray();\r\n ctx = ctx || document;\r\n return Array.prototype.map.call(ctx.querySelectorAll(query), function (el) { return el; });\r\n };\r\n\r\n common.text = function (el, txt) {\r\n el[('innerText' in el) ? 'innerText' : 'textContent'] = txt;\r\n };\r\n\r\n common.findDirect = function (query, ctx) {\r\n return common.find(query, ctx).filter(function (node) {\r\n return node.parentNode === ctx;\r\n });\r\n };\r\n\r\n common.hasClass = function (el, kls) {\r\n if (typeof el.className !== 'string') return false;\r\n return ClassList(el).contains(kls);\r\n };\r\n\r\n common.isSameDomain = function (url) {\r\n var w = window.location,\r\n a = common.createElement('a', { href: url });\r\n return w.hostname === a.hostname &&\r\n w.protocol === a.protocol &&\r\n w.port === a.port;\r\n };\r\n\r\n common.css = function (el, property, value) {\r\n if (typeof property === 'object') {\r\n return Object.keys(property).forEach(function (key) {\r\n common.css(el, key, property[key]);\r\n });\r\n }\r\n if (typeof value !== 'undefined') {\r\n if (value === '') return el ? el.style.removeProperty(property) : undefined;\r\n return el ? el.style.setProperty(property, value) : undefined;\r\n }\r\n return el ? computedStyle(el, property) : undefined;\r\n };\r\n\r\n common.createElement = function (tag, attributes, innerHTML) {\r\n try {\r\n var el = document.createElement(tag);\r\n for (var key in attributes) {\r\n if (!attributes.hasOwnProperty(key)) continue;\r\n if (key === 'css') {\r\n common.css(el, attributes[key]);\r\n } else {\r\n common.attr(el, key, attributes[key]);\r\n }\r\n }\r\n el.innerHTML = innerHTML || '';\r\n return el;\r\n } catch (e) {\r\n if (!$) throw e;\r\n return $('<' + tag + '>' + innerHTML + '').attr(attributes)[0];\r\n }\r\n };\r\n\r\n common.toggleClass = function (el, cls, flag) {\r\n if (!el) return;\r\n var classes = ClassList(el);\r\n if (typeof flag === 'undefined') classes.toggle(cls);\r\n else if (flag) classes.add(cls);\r\n else if (!flag) classes.remove(cls);\r\n };\r\n\r\n common.addClass = function (el, cls) {\r\n return common.toggleClass(el, cls, true);\r\n };\r\n\r\n common.removeClass = function (el, cls) {\r\n return common.toggleClass(el, cls, false);\r\n };\r\n\r\n common.append = function (par, child) {\r\n par.appendChild(child);\r\n return par;\r\n };\r\n\r\n common.appendTo = function (child, par) {\r\n common.append(par, child);\r\n return child;\r\n };\r\n\r\n common.prepend = function (par, child) {\r\n par.insertBefore(child, par.firstChild);\r\n };\r\n\r\n\r\n // Inserts `el` after `child` that is child of `par`\r\n common.insertAfter = function (par, child, el) {\r\n if (child == common.lastChild(par)) par.appendChild(el);\r\n var childIndex = Array.prototype.indexOf.call(par.children, child);\r\n par.insertBefore(el, par.children[childIndex + 1]);\r\n };\r\n\r\n common.html = function (elms, val) {\r\n elms = elms.length ? elms : [elms];\r\n elms.forEach(function (elm) {\r\n elm.innerHTML = val;\r\n });\r\n };\r\n\r\n\r\n common.attr = function (el, key, val) {\r\n if (key === 'class') key = 'className';\r\n if (common.hasOwnOrPrototypeProperty(el, key)) {\r\n try {\r\n el[key] = val;\r\n } catch (e) { // Most likely IE not letting set property\r\n if ($) {\r\n $(el).attr(key, val);\r\n } else {\r\n throw e;\r\n }\r\n }\r\n } else {\r\n if (val === false) {\r\n el.removeAttribute(key);\r\n } else {\r\n el.setAttribute(key, val);\r\n }\r\n }\r\n return el;\r\n };\r\n\r\n common.prop = function (el, key, val) {\r\n if (typeof val === 'undefined') {\r\n return el && el[key];\r\n }\r\n el[key] = val;\r\n };\r\n\r\n common.offset = function (el) {\r\n var ret = el.getBoundingClientRect();\r\n if (el.offsetWidth / el.offsetHeight > el.clientWidth / el.clientHeight) { // https://github.com/flowplayer/flowplayer/issues/757\r\n ret = {\r\n left: ret.left * 100,\r\n right: ret.right * 100,\r\n top: ret.top * 100,\r\n bottom: ret.bottom * 100,\r\n width: ret.width * 100,\r\n height: ret.height * 100\r\n };\r\n }\r\n return ret;\r\n };\r\n\r\n common.width = function (el, val) {\r\n /*jshint -W093 */\r\n if (val) return el.style.width = ('' + val).replace(/px$/, '') + 'px';\r\n var ret = common.offset(el).width;\r\n return typeof ret === 'undefined' ? el.offsetWidth : ret;\r\n };\r\n\r\n common.height = function (el, val) {\r\n /*jshint -W093 */\r\n if (val) return el.style.height = ('' + val).replace(/px$/, '') + 'px';\r\n var ret = common.offset(el).height;\r\n return typeof ret === 'undefined' ? el.offsetHeight : ret;\r\n };\r\n\r\n common.lastChild = function (el) {\r\n return el.children[el.children.length - 1];\r\n };\r\n\r\n common.hasParent = function (el, parentSelector) {\r\n var parent = el.parentElement;\r\n while (parent) {\r\n if (common.matches(parent, parentSelector)) return true;\r\n parent = parent.parentElement;\r\n }\r\n return false;\r\n };\r\n\r\n common.createAbsoluteUrl = function (url) {\r\n return common.createElement('a', { href: url }).href; // This won't work on IE7\r\n };\r\n\r\n common.xhrGet = function (url, successCb, errorCb) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.onreadystatechange = function () {\r\n if (this.readyState !== 4) return;\r\n if (this.status >= 400) return errorCb();\r\n successCb(this.responseText);\r\n };\r\n xhr.open('get', url, true);\r\n xhr.send();\r\n };\r\n\r\n common.pick = function (obj, props) {\r\n var ret = {};\r\n props.forEach(function (prop) {\r\n if (obj.hasOwnProperty(prop)) ret[prop] = obj[prop];\r\n });\r\n return ret;\r\n };\r\n\r\n common.hostname = function (host) {\r\n return punycode.toUnicode(host || window.location.hostname);\r\n };\r\n\r\n //Hacks\r\n common.browser = {\r\n webkit: 'WebkitAppearance' in document.documentElement.style\r\n };\r\n\r\n common.getPrototype = function (el) {\r\n /* jshint proto:true */\r\n if (!Object.getPrototypeOf) return el.__proto__;\r\n return Object.getPrototypeOf(el);\r\n };\r\n\r\n common.hasOwnOrPrototypeProperty = function (obj, prop) {\r\n var o = obj;\r\n while (o) {\r\n if (Object.prototype.hasOwnProperty.call(o, prop)) return true;\r\n o = common.getPrototype(o);\r\n }\r\n return false;\r\n };\r\n\r\n\r\n // Polyfill for Element.matches\r\n // adapted from https://developer.mozilla.org/en/docs/Web/API/Element/matches\r\n common.matches = function (elem, selector) {\r\n var proto = Element.prototype,\r\n fn = proto.matches ||\r\n proto.matchesSelector ||\r\n proto.mozMatchesSelector ||\r\n proto.msMatchesSelector ||\r\n proto.oMatchesSelector ||\r\n proto.webkitMatchesSelector ||\r\n function (selector) {\r\n var element = this,\r\n matches = (element.document || element.ownerDocument).querySelectorAll(selector),\r\n i = 0;\r\n while (matches[i] && matches[i] !== element) {\r\n i++;\r\n }\r\n\r\n return matches[i] ? true : false;\r\n };\r\n return fn.call(elem, selector);\r\n };\r\n\r\n\r\n // Polyfill for CSSStyleDeclaration\r\n // from https://github.com/shawnbot/aight\r\n (function (CSSSDProto) {\r\n\r\n function getAttribute(property) {\r\n return property.replace(/-[a-z]/g, function (bit) {\r\n return bit[1].toUpperCase();\r\n });\r\n }\r\n\r\n // patch CSSStyleDeclaration.prototype using IE8's methods\r\n if (typeof CSSSDProto.setAttribute !== \"undefined\") {\r\n CSSSDProto.setProperty = function (property, value) {\r\n return this.setAttribute(getAttribute(property), String(value) /*, important */);\r\n };\r\n CSSSDProto.getPropertyValue = function (property) {\r\n return this.getAttribute(getAttribute(property)) || null;\r\n };\r\n CSSSDProto.removeProperty = function (property) {\r\n var value = this.getPropertyValue(property);\r\n this.removeAttribute(getAttribute(property));\r\n return value;\r\n };\r\n }\r\n\r\n })(window.CSSStyleDeclaration.prototype);\r\n\r\n }, { \"class-list\": 33, \"computed-style\": 34, \"punycode\": 41 }], 2: [function (_dereq_, module, exports) {\r\n 'use strict';\r\n var common = _dereq_('../common');\r\n\r\n // movie required in opts\r\n module.exports = function embed(swf, flashvars, wmode, bgColor) {\r\n wmode = wmode || \"opaque\";\r\n\r\n var id = \"obj\" + (\"\" + Math.random()).slice(2, 15),\r\n tag = ' -1;\r\n\r\n tag += msie ? 'classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\">' :\r\n ' data=\"' + swf + '\" type=\"application/x-shockwave-flash\">';\r\n\r\n var opts = {\r\n width: \"100%\",\r\n height: \"100%\",\r\n allowscriptaccess: \"always\",\r\n wmode: wmode,\r\n quality: \"high\",\r\n flashvars: \"\",\r\n\r\n // https://github.com/flowplayer/flowplayer/issues/13#issuecomment-9369919\r\n movie: swf + (msie ? \"?\" + id : \"\"),\r\n name: id\r\n };\r\n\r\n if (wmode !== 'transparent') opts.bgcolor = bgColor || '#333333';\r\n\r\n // flashvars\r\n Object.keys(flashvars).forEach(function (key) {\r\n opts.flashvars += key + \"=\" + flashvars[key] + \"&\";\r\n });\r\n\r\n // parameters\r\n Object.keys(opts).forEach(function (key) {\r\n tag += '';\r\n });\r\n\r\n tag += \"\";\r\n var el = common.createElement('div', {}, tag);\r\n return common.find('object', el);\r\n\r\n };\r\n\r\n\r\n // Flash is buggy allover\r\n if (window.attachEvent) {\r\n window.attachEvent(\"onbeforeunload\", function () {\r\n window.__flash_savedUnloadHandler = window.__flash_unloadHandler = function () { };\r\n });\r\n }\r\n\r\n\r\n }, { \"../common\": 1 }], 3: [function (_dereq_, module, exports) {\r\n 'use strict';\r\n var flowplayer = _dereq_('../flowplayer'),\r\n common = _dereq_('../common'),\r\n embed = _dereq_('./embed'),\r\n extend = _dereq_('extend-object'),\r\n bean = _dereq_('bean'),\r\n engineImpl;\r\n\r\n engineImpl = function flashEngine(player, root) {\r\n\r\n var conf = player.conf,\r\n loadVideo,\r\n callbackId,\r\n api;\r\n\r\n var suspended, timeouts = [];\r\n\r\n var engine = {\r\n engineName: engineImpl.engineName,\r\n\r\n pick: function (sources) {\r\n\r\n var source = extend({}, (function () {\r\n if (flowplayer.support.flashVideo) {\r\n var selectedSource;\r\n for (var i = 0, source; i < sources.length; i++) {\r\n source = sources[i];\r\n if (/mp4|flv|flash/i.test(source.type)) selectedSource = source;\r\n if (player.conf.swfHls && /mpegurl/i.test(source.type)) selectedSource = source;\r\n if (selectedSource && !/mp4/i.test(selectedSource.type)) return selectedSource;\r\n // Did not find any source or source was video/mp4, let's try find more\r\n }\r\n return selectedSource; // Accept the fact we don't have anything or just an MP4\r\n }\r\n })());\r\n if (!source) return;\r\n if (source.src && !isAbsolute(source.src) && !player.conf.rtmp && !source.rtmp) source.src = common.createAbsoluteUrl(source.src);\r\n return source;\r\n },\r\n\r\n suspendEngine: function () {\r\n suspended = true;\r\n },\r\n resumeEngine: function () {\r\n suspended = false;\r\n },\r\n\r\n load: function (video) {\r\n loadVideo = video;\r\n timeouts.forEach(function (t) { clearTimeout(t); });\r\n\r\n function escapeURL(url) {\r\n return url.replace(/&/g, '%26').replace(/&/g, '%26').replace(/=/g, '%3D');\r\n }\r\n\r\n var html5Tag = common.findDirect('video', root)[0] || common.find('.fp-player > video', root)[0],\r\n url = video.src,\r\n is_absolute = isAbsolute(url);\r\n\r\n var removeTag = function () {\r\n common.removeNode(html5Tag);\r\n };\r\n var hasSupportedSource = function (sources) {\r\n return sources.some(function (src) {\r\n return !!html5Tag.canPlayType(src.type);\r\n });\r\n };\r\n if (flowplayer.support.video &&\r\n common.prop(html5Tag, 'autoplay') &&\r\n hasSupportedSource(video.sources)) bean.one(html5Tag, 'timeupdate', removeTag);\r\n else removeTag();\r\n\r\n // convert to absolute\r\n var rtmp = video.rtmp || conf.rtmp;\r\n if (!is_absolute && !rtmp) url = common.createAbsoluteUrl(url);\r\n\r\n if (api && isHLS(video) && api.data !== common.createAbsoluteUrl(conf.swfHls)) engine.unload();\r\n\r\n if (api) {\r\n ['live', 'preload', 'loop'].forEach(function (prop) {\r\n if (!video.hasOwnProperty(prop)) return;\r\n api.__set(prop, video[prop]);\r\n });\r\n Object.keys(video.flashls || {}).forEach(function (key) {\r\n api.__set('hls_' + key, video.flashls[key]);\r\n });\r\n var providerChangeNeeded = false;\r\n if (!is_absolute && rtmp) api.__set('rtmp', rtmp.url || rtmp);\r\n else {\r\n var oldRtmp = api.__get('rtmp');\r\n providerChangeNeeded = !!oldRtmp;\r\n api.__set('rtmp', null);\r\n }\r\n api.__play(url, providerChangeNeeded || video.rtmp && video.rtmp !== conf.rtmp);\r\n\r\n } else {\r\n\r\n callbackId = \"fpCallback\" + (\"\" + Math.random()).slice(3, 15);\r\n url = escapeURL(url);\r\n\r\n var opts = {\r\n hostname: conf.embedded ? common.hostname(conf.hostname) : common.hostname(location.hostname),\r\n url: url,\r\n callback: callbackId\r\n };\r\n if (root.getAttribute('data-origin')) {\r\n opts.origin = root.getAttribute('data-origin');\r\n }\r\n\r\n // optional conf\r\n ['proxy', 'key', 'autoplay', 'preload', 'subscribe', 'live', 'loop', 'debug', 'splash', 'poster', 'rtmpt'].forEach(function (key) {\r\n if (conf.hasOwnProperty(key)) opts[key] = conf[key];\r\n if (video.hasOwnProperty(key)) opts[key] = video[key];\r\n if ((conf.rtmp || {}).hasOwnProperty(key)) opts[key] = (conf.rtmp || {})[key];\r\n if ((video.rtmp || {}).hasOwnProperty(key)) opts[key] = (video.rtmp || {})[key];\r\n });\r\n if (conf.rtmp) opts.rtmp = conf.rtmp.url || conf.rtmp;\r\n if (video.rtmp) opts.rtmp = video.rtmp.url || video.rtmp;\r\n Object.keys(video.flashls || {}).forEach(function (key) {\r\n var val = video.flashls[key];\r\n opts['hls_' + key] = val;\r\n });\r\n\r\n var hlsQualities = typeof video.hlsQualities !== 'undefined' ? video.hlsQualities : conf.hlsQualities;\r\n if (typeof hlsQualities !== 'undefined') opts.hlsQualities = hlsQualities ? encodeURIComponent(JSON.stringify(hlsQualities)) : hlsQualities;\r\n // bufferTime might be 0\r\n if (conf.bufferTime !== undefined) opts.bufferTime = conf.bufferTime;\r\n\r\n if (is_absolute) delete opts.rtmp;\r\n\r\n // issues #376\r\n if (opts.rtmp) {\r\n opts.rtmp = escapeURL(opts.rtmp);\r\n }\r\n\r\n // issues #733, 906\r\n var bgColor = conf.bgcolor || common.css(root, 'background-color') || '', bg;\r\n if (bgColor.indexOf('rgb') === 0) {\r\n bg = toHex(bgColor);\r\n } else if (bgColor.indexOf('#') === 0) {\r\n bg = toLongHex(bgColor);\r\n }\r\n\r\n // issues #387\r\n opts.initialVolume = player.volumeLevel;\r\n\r\n var swfUrl = isHLS(video) ? conf.swfHls : conf.swf;\r\n\r\n api = embed(swfUrl, opts, conf.wmode, bg)[0];\r\n\r\n var container = common.find('.fp-player', root)[0];\r\n\r\n common.prepend(container, api);\r\n\r\n player.off('quality.flashengine').on('quality.flashengine', function (ev, _api, quality) {\r\n var hlsQualities =\r\n typeof player.video.hlsQualities !== 'undefined' ?\r\n player.video.hlsQualities :\r\n player.conf.hlsQualities;\r\n if (!hlsQualities) return;\r\n api.__quality(quality);\r\n });\r\n\r\n // throw error if no loading occurs\r\n setTimeout(function () {\r\n try {\r\n if (!api.PercentLoaded()) {\r\n return player.trigger(\"error\", [player, { code: 7, url: conf.swf }]);\r\n }\r\n } catch (e) { }\r\n }, 5000);\r\n\r\n // detect disabled flash\r\n //\r\n timeouts.push(setTimeout(function () {\r\n if (typeof api.PercentLoaded === 'undefined') {\r\n player.trigger('flashdisabled', [player]);\r\n }\r\n }, 15000));\r\n timeouts.push(setTimeout(function () {\r\n if (typeof api.PercentLoaded === 'undefined') {\r\n player.trigger('flashdisabled', [player, false]);\r\n }\r\n }, 500));\r\n\r\n player.off('resume.flashhack').on('resume.flashhack', function () {\r\n var timer = setTimeout(function () {\r\n var currentTime = api.__status().time;\r\n var timer2 = setTimeout(function () {\r\n if (player.playing && !player.loading && api.__status().time === currentTime) {\r\n player.trigger('flashdisabled', [player]);\r\n }\r\n }, 400);\r\n timeouts.push(timer2);\r\n player.one('seek.flashhack pause.flashhack load.flashack', function () { clearTimeout(timer2); });\r\n }, 800);\r\n timeouts.push(timer);\r\n player.one('progress', function () {\r\n clearTimeout(timer);\r\n });\r\n });\r\n\r\n\r\n api.pollInterval = setInterval(function () {\r\n if (!api || suspended) return;\r\n var status = api.__status ? api.__status() : null;\r\n\r\n if (!status) return;\r\n\r\n if (player.conf.live || player.live || video.live) {\r\n video.seekOffset = status.seekOffset;\r\n video.duration = status.duration + status.seekOffset;\r\n }\r\n\r\n if (player.playing && status.time && status.time !== player.video.time) player.trigger(\"progress\", [player, status.time]);\r\n\r\n video.buffer = status.buffer / video.bytes * video.duration;\r\n player.trigger(\"buffer\", [player, video.buffer]);\r\n\r\n if (!video.buffered && status.time > 0) {\r\n video.buffered = true;\r\n player.trigger(\"buffered\", [player]);\r\n }\r\n\r\n }, 250);\r\n\r\n // listen\r\n window[callbackId] = function (type, arg) {\r\n var video = loadVideo;\r\n\r\n if (conf.debug) {\r\n if (type.indexOf('debug') === 0 && arg && arg.length) {\r\n console.log.apply(console, ['-- ' + type].concat(arg));\r\n }\r\n else console.log(\"--\", type, arg);\r\n }\r\n\r\n var event = {\r\n type: type\r\n };\r\n\r\n switch (type) {\r\n\r\n // RTMP sends a lot of finish events in vain\r\n // case \"finish\": if (conf.rtmp) return;\r\n case \"ready\": arg = extend(video, arg); break;\r\n case \"click\": event.flash = true; break;\r\n case \"keydown\": event.which = arg; break;\r\n case \"seek\": video.time = arg; break;\r\n case \"status\":\r\n player.trigger(\"progress\", [player, arg.time]);\r\n\r\n if (arg.buffer < video.bytes && !video.buffered) {\r\n video.buffer = arg.buffer / video.bytes * video.duration;\r\n player.trigger(\"buffer\", video.buffer);\r\n } else if (!video.buffered) {\r\n video.buffered = true;\r\n player.trigger(\"buffered\");\r\n }\r\n\r\n break;\r\n case \"metadata\":\r\n var str = atob(arg);\r\n arg = {\r\n key: str.substr(10, 4),\r\n data: str.substr(21)\r\n }\r\n break;\r\n }\r\n if (type === 'click' || type === 'keydown') {\r\n event.target = root;\r\n bean.fire(root, type, [event]);\r\n }\r\n else if (type != 'buffered' && type !== 'unload') {\r\n // add some delay so that player is truly ready after an event\r\n setTimeout(function () { player.trigger(event, [player, arg]); }, 1);\r\n } else if (type === 'unload') {\r\n player.trigger(event, [player, arg]);\r\n }\r\n\r\n };\r\n\r\n }\r\n\r\n },\r\n\r\n // not supported yet\r\n speed: common.noop,\r\n\r\n\r\n unload: function () {\r\n if (api && api.__unload) api.__unload();\r\n try {\r\n if (callbackId && window[callbackId]) delete window[callbackId];\r\n } catch (e) { }\r\n common.find(\"object\", root).forEach(common.removeNode);\r\n api = 0;\r\n player.off('.flashengine');\r\n player.off('.flashhack');\r\n clearInterval(api.pollInterval);\r\n timeouts.forEach(function (t) { clearTimeout(t); });\r\n }\r\n\r\n };\r\n\r\n ['pause', 'resume', 'seek', 'volume'].forEach(function (name) {\r\n\r\n engine[name] = function (arg) {\r\n try {\r\n if (player.ready) {\r\n\r\n if (arg === undefined) {\r\n api[\"__\" + name]();\r\n\r\n } else {\r\n api[\"__\" + name](arg);\r\n }\r\n\r\n }\r\n } catch (e) {\r\n if (typeof api[\"__\" + name] === 'undefined') { //flash lost it's methods\r\n return player.trigger('flashdisabled', [player]);\r\n }\r\n throw e;\r\n }\r\n };\r\n\r\n });\r\n\r\n function toHex(bg) {\r\n function hex(x) {\r\n return (\"0\" + parseInt(x).toString(16)).slice(-2);\r\n }\r\n\r\n bg = bg.match(/^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)$/);\r\n if (!bg) return;\r\n\r\n return '#' + hex(bg[1]) + hex(bg[2]) + hex(bg[3]);\r\n }\r\n\r\n function toLongHex(bg) {\r\n if (bg.length === 7) return bg;\r\n var a = bg.split('').slice(1);\r\n return '#' + a.map(function (i) {\r\n return i + i;\r\n }).join('');\r\n }\r\n\r\n function isHLS(video) {\r\n return /application\\/x-mpegurl/i.test(video.type);\r\n }\r\n\r\n return engine;\r\n\r\n };\r\n\r\n\r\n engineImpl.engineName = 'flash';\r\n engineImpl.canPlay = function (type, conf) {\r\n return flowplayer.support.flashVideo && /video\\/(mp4|flash|flv)/i.test(type) || flowplayer.support.flashVideo && conf.swfHls && /mpegurl/i.test(type);\r\n };\r\n flowplayer.engines.push(engineImpl);\r\n\r\n\r\n\r\n function isAbsolute(url) {\r\n return /^https?:/.test(url);\r\n }\r\n\r\n }, { \"../common\": 1, \"../flowplayer\": 28, \"./embed\": 2, \"bean\": 31, \"extend-object\": 36 }], 4: [function (_dereq_, module, exports) {\r\n 'use strict';\r\n var flowplayer = _dereq_('../flowplayer'),\r\n bean = _dereq_('bean'),\r\n extend = _dereq_('extend-object'),\r\n common = _dereq_('../common');\r\n var VIDEO = document.createElement('video');\r\n\r\n // HTML5 --> Flowplayer event\r\n var EVENTS = {\r\n\r\n // fired\r\n ended: 'finish',\r\n pause: 'pause',\r\n play: 'resume',\r\n //progress: 'buffer',\r\n timeupdate: 'progress',\r\n volumechange: 'volume',\r\n ratechange: 'speed',\r\n //seeking: 'beforeseek',\r\n seeked: 'seek',\r\n // abort: 'resume',\r\n\r\n // not fired\r\n loadeddata: 'ready',\r\n // loadedmetadata: 0,\r\n // canplay: 0,\r\n\r\n // error events\r\n // load: 0,\r\n // emptied: 0,\r\n // empty: 0,\r\n error: 'error',\r\n dataunavailable: 'error',\r\n webkitendfullscreen: !flowplayer.support.inlineVideo && 'unload'\r\n\r\n };\r\n\r\n function round(val, per) {\r\n per = per || 100;\r\n return Math.round(val * per) / per;\r\n }\r\n\r\n function getType(type) {\r\n return /mpegurl/i.test(type) ? \"application/x-mpegurl\" : type;\r\n }\r\n\r\n function canPlay(type) {\r\n if (!/^(video|application)/i.test(type))\r\n type = getType(type);\r\n return !!VIDEO.canPlayType(type).replace(\"no\", '');\r\n }\r\n\r\n function findFromSourcesByType(sources, type) {\r\n var arr = sources.filter(function (s) {\r\n return s.type === type;\r\n });\r\n return arr.length ? arr[0] : null;\r\n }\r\n\r\n var videoTagCache;\r\n var createVideoTag = function (video, autoplay, preload, useCache, inline, subtitles) {\r\n if (typeof autoplay === 'undefined') autoplay = true;\r\n if (typeof preload === 'undefined') preload = 'none';\r\n if (typeof useCache === 'undefined') useCache = true;\r\n if (typeof inline === 'undefined') inline = true;\r\n if (useCache && videoTagCache) {\r\n videoTagCache.type = getType(video.type);\r\n videoTagCache.src = video.src;\r\n common.find('track', videoTagCache).forEach(common.removeNode);\r\n videoTagCache.removeAttribute('crossorigin');\r\n return videoTagCache;\r\n }\r\n var el = document.createElement('video');\r\n el.src = video.src;\r\n el.type = getType(video.type);\r\n var className = 'fp-engine ';\r\n if (subtitles && subtitles.length) className += 'native-subtitles';\r\n el.className = className;\r\n if (flowplayer.support.autoplay) el.autoplay = autoplay ? 'autoplay' : false;\r\n if (flowplayer.support.dataload) el.preload = preload;\r\n if (inline) {\r\n el.setAttribute('webkit-playsinline', 'true');\r\n el.setAttribute('playsinline', 'true');\r\n }\r\n if (subtitles && subtitles.length) {\r\n var setMode = function (mode) {\r\n var tracks = el.textTracks;\r\n if (!tracks.length) return;\r\n tracks[0].mode = mode;\r\n };\r\n if (subtitles.some(function (st) { return !common.isSameDomain(st.src); })) common.attr(el, 'crossorigin', 'anonymous');\r\n if (typeof el.textTracks.addEventListener === 'function') el.textTracks.addEventListener('addtrack', function () {\r\n setMode('disabled');\r\n setMode('showing');\r\n });\r\n subtitles.forEach(function (st) {\r\n el.appendChild(common.createElement('track', {\r\n kind: 'subtitles',\r\n srclang: st.srclang || 'en',\r\n label: st.label || 'en',\r\n src: st.src,\r\n 'default': st['default']\r\n }));\r\n });\r\n }\r\n if (useCache) videoTagCache = el;\r\n return el;\r\n };\r\n\r\n var engine;\r\n\r\n engine = function (player, root) {\r\n\r\n var api = common.findDirect('video', root)[0] || common.find('.fp-player > video', root)[0],\r\n support = flowplayer.support,\r\n conf = player.conf,\r\n self,\r\n timer,\r\n lastBuffer,\r\n volumeLevel;\r\n /*jshint -W093 */\r\n return self = {\r\n engineName: engine.engineName,\r\n\r\n pick: function (sources) {\r\n var source = (function () {\r\n if (support.video) {\r\n if (conf.videoTypePreference) {\r\n var mp4source = findFromSourcesByType(sources, conf.videoTypePreference);\r\n if (mp4source) return mp4source;\r\n }\r\n\r\n for (var i = 0; i < sources.length; i++) {\r\n if (canPlay(sources[i].type)) return sources[i];\r\n }\r\n }\r\n })();\r\n if (!source) return;\r\n if (typeof source.src === 'string') source.src = common.createAbsoluteUrl(source.src);\r\n return source;\r\n },\r\n\r\n load: function (video) {\r\n var container = common.find('.fp-player', root)[0], reload = false, created = false;\r\n if (conf.splash && !api) {\r\n api = createVideoTag(\r\n video,\r\n undefined,\r\n undefined,\r\n undefined,\r\n !conf.disableInline,\r\n flowplayer.support.subtitles && conf.nativesubtitles && video.subtitles\r\n );\r\n common.prepend(container, api);\r\n created = true;\r\n } else if (!api) {\r\n api = createVideoTag(video, !!video.autoplay || !!conf.autoplay, conf.clip.preload || true, false);\r\n common.prepend(container, api);\r\n created = true;\r\n } else {\r\n common.addClass(api, 'fp-engine');\r\n common.find('source,track', api).forEach(common.removeNode);\r\n if (!player.conf.nativesubtitles) common.attr(api, 'crossorigin', false);\r\n reload = api.src === video.src;\r\n }\r\n if (!support.inlineVideo) {\r\n common.css(api, {\r\n position: 'absolute',\r\n top: '-9999em'\r\n });\r\n }\r\n //TODO subtitles support\r\n\r\n // IE does not fire delegated timeupdate events\r\n bean.off(api, 'timeupdate', common.noop);\r\n bean.on(api, 'timeupdate', common.noop);\r\n\r\n common.prop(api, 'loop', false);\r\n player.off('.loophack');\r\n if (video.loop || conf.loop) {\r\n if (/mpegurl/i.test(video.type)) {\r\n player.on('finish.loophack', function () { player.resume(); });\r\n }\r\n else common.prop(api, 'loop', true);\r\n }\r\n\r\n if (typeof volumeLevel !== 'undefined') {\r\n api.volume = volumeLevel;\r\n }\r\n\r\n if (player.video.src && video.src != player.video.src || video.index) common.attr(api, 'autoplay', 'autoplay');\r\n api.src = video.src;\r\n api.type = video.type;\r\n\r\n self._listeners = listen(api, common.find(\"source\", api).concat(api), video) || self._listeners;\r\n\r\n if (reload || (created && !conf.splash)) api.load();\r\n if (support.iOS.iPad && support.iOS.chrome) api.load();\r\n if (api.paused && (video.autoplay || conf.autoplay || conf.splash)) api.play();\r\n },\r\n\r\n pause: function () {\r\n api.pause();\r\n },\r\n\r\n resume: function () {\r\n api.play();\r\n },\r\n\r\n speed: function (val) {\r\n api.playbackRate = val;\r\n },\r\n\r\n seek: function (time) {\r\n try {\r\n var pausedState = player.paused;\r\n api.currentTime = time;\r\n if (pausedState) api.pause();\r\n } catch (ignored) { }\r\n },\r\n\r\n volume: function (level) {\r\n volumeLevel = level;\r\n if (api) {\r\n api.volume = level;\r\n }\r\n },\r\n\r\n unload: function () {\r\n common.find('video.fp-engine', root).forEach(function (videoTag) {\r\n common.attr(videoTag, 'src', '');\r\n common.removeNode(videoTag);\r\n });\r\n if (!support.cachedVideoTag) videoTagCache = null;\r\n timer = clearInterval(timer);\r\n var instanceId = root.getAttribute('data-flowplayer-instance-id');\r\n delete api.listeners[instanceId];\r\n api = 0;\r\n if (self._listeners) Object.keys(self._listeners).forEach(function (typ) {\r\n self._listeners[typ].forEach(function (l) {\r\n root.removeEventListener(typ, l, true);\r\n });\r\n });\r\n }\r\n\r\n };\r\n\r\n function listen(api, sources, video) {\r\n // listen only once\r\n var instanceId = root.getAttribute('data-flowplayer-instance-id');\r\n\r\n if (api.listeners && api.listeners.hasOwnProperty(instanceId)) {\r\n api.listeners[instanceId] = video;\r\n return;\r\n }\r\n (api.listeners || (api.listeners = {}))[instanceId] = video;\r\n\r\n bean.on(sources, 'error', function (e) {\r\n try {\r\n if (canPlay(e.target.getAttribute('type'))) {\r\n player.trigger(\"error\", [player, { code: 4, video: extend(video, { src: api.src, url: api.src }) }]);\r\n }\r\n } catch (er) {\r\n // Most likely: https://bugzilla.mozilla.org/show_bug.cgi?id=208427\r\n }\r\n });\r\n\r\n player.on('shutdown', function () {\r\n bean.off(sources);\r\n bean.off(api, '.dvrhack');\r\n player.off('.loophack');\r\n });\r\n\r\n var eventListeners = {};\r\n //Special event handling for HLS metadata events\r\n\r\n var listenMetadata = function (track) {\r\n if (track.kind !== 'metadata') return;\r\n track.mode = 'hidden';\r\n track.addEventListener('cuechange', function () {\r\n player.trigger('metadata', [player, track.activeCues[0].value]);\r\n }, false);\r\n };\r\n\r\n if (api && api.textTracks && api.textTracks.length) Array.prototype.forEach.call(api.textTracks, listenMetadata);\r\n if (api && api.textTracks && typeof api.textTracks.addEventListener === 'function') api.textTracks.addEventListener('addtrack', function (tev) {\r\n listenMetadata(tev.track);\r\n }, false);\r\n if (player.conf.dvr || player.dvr || video.dvr) {\r\n bean.on(api, 'progress.dvrhack', function () {\r\n if (!api.seekable.length) return;\r\n player.video.duration = api.seekable.end(null);\r\n player.video.seekOffset = api.seekable.start(null);\r\n player.trigger('dvrwindow', [player, {\r\n start: api.seekable.start(null),\r\n end: api.seekable.end(null)\r\n }]);\r\n if (api.currentTime >= api.seekable.start(null)) return;\r\n api.currentTime = api.seekable.start(null);\r\n });\r\n }\r\n\r\n Object.keys(EVENTS).forEach(function (type) {\r\n var flow = EVENTS[type];\r\n if (type === 'webkitendfullscreen' && player.conf.disableInline) flow = 'unload';\r\n if (!flow) return;\r\n var l = function (e) {\r\n video = api.listeners[instanceId];\r\n if (!e.target || !common.hasClass(e.target, 'fp-engine')) return;\r\n\r\n if (conf.debug && !/progress/.test(flow)) console.log(type, \"->\", flow, e);\r\n\r\n var triggerEvent = function () {\r\n player.trigger(flow, [player, arg]);\r\n };\r\n\r\n // no events if player not ready\r\n if (!player.ready && !/ready|error/.test(flow) || !flow || !common.find('video', root).length) {\r\n if (flow === 'resume') player.one('ready', function () { setTimeout(function () { triggerEvent(); }) });\r\n return;\r\n }\r\n var arg;\r\n\r\n if (flow === 'unload') { //Call player unload\r\n player.unload();\r\n return;\r\n }\r\n\r\n switch (flow) {\r\n\r\n case \"ready\":\r\n\r\n arg = extend(video, {\r\n duration: api.duration < Number.MAX_VALUE ? api.duration : 0,\r\n width: api.videoWidth,\r\n height: api.videoHeight,\r\n url: api.currentSrc,\r\n src: api.currentSrc\r\n });\r\n\r\n try {\r\n arg.seekable = /mpegurl/i.test(video ? (video.type || '') : '') && api.duration || api.seekable && api.seekable.end(null) || player.live;\r\n\r\n } catch (ignored) { }\r\n\r\n // buffer\r\n timer = timer || setInterval(function () {\r\n\r\n try {\r\n arg.buffer = api.buffered.end(null);\r\n\r\n } catch (ignored) { }\r\n\r\n if (arg.buffer) {\r\n if (round(arg.buffer, 1000) < round(arg.duration, 1000) && !arg.buffered && arg.buffer !== lastBuffer) {\r\n player.trigger(\"buffer\", [player, arg.buffer]);\r\n lastBuffer = arg.buffer;\r\n\r\n } else if (!arg.buffered && arg.buffer !== lastBuffer) {\r\n arg.buffered = true;\r\n player.trigger(\"buffer\", [player, arg.buffer]).trigger(\"buffered\", e);\r\n lastBuffer = arg.buffer;\r\n clearInterval(timer);\r\n timer = 0;\r\n }\r\n }\r\n\r\n }, 250);\r\n\r\n if (!player.live && !arg.duration && !support.hlsDuration && type === \"loadeddata\") {\r\n var durationChanged = function () {\r\n arg.duration = api.duration;\r\n try {\r\n arg.seekable = api.seekable && api.seekable.end(null);\r\n\r\n } catch (ignored) { }\r\n triggerEvent();\r\n api.removeEventListener('durationchange', durationChanged);\r\n common.toggleClass(root, 'is-live', false);\r\n };\r\n api.addEventListener('durationchange', durationChanged);\r\n\r\n // Ugly hack to handle broken Android devices\r\n var timeUpdated = function () {\r\n if (!player.ready && !api.duration) { // No duration even though the video already plays\r\n arg.duration = 0;\r\n common.addClass(root, 'is-live'); // Make UI believe it's live\r\n triggerEvent();\r\n }\r\n api.removeEventListener('timeupdate', timeUpdated);\r\n };\r\n api.addEventListener('timeupdate', timeUpdated);\r\n return;\r\n }\r\n\r\n break;\r\n\r\n case \"progress\": case \"seek\":\r\n\r\n if (api.currentTime > 0 || player.live) {\r\n arg = Math.max(api.currentTime, 0);\r\n\r\n } else if (flow == 'progress') {\r\n return;\r\n }\r\n break;\r\n\r\n\r\n case \"speed\":\r\n arg = round(api.playbackRate);\r\n break;\r\n\r\n case \"volume\":\r\n arg = round(api.volume);\r\n break;\r\n\r\n case \"error\":\r\n try {\r\n arg = (e.srcElement || e.originalTarget).error;\r\n arg.video = extend(video, { src: api.src, url: api.src });\r\n } catch (er) {\r\n // Most likely https://bugzilla.mozilla.org/show_bug.cgi?id=208427\r\n return;\r\n }\r\n }\r\n\r\n triggerEvent();\r\n\r\n\r\n };\r\n root.addEventListener(type, l, true);\r\n if (!eventListeners[type]) eventListeners[type] = [];\r\n eventListeners[type].push(l);\r\n\r\n });\r\n return eventListeners;\r\n\r\n }\r\n\r\n };\r\n\r\n\r\n engine.canPlay = function (type) {\r\n return flowplayer.support.video && canPlay(type);\r\n };\r\n\r\n engine.engineName = 'html5';\r\n\r\n flowplayer.engines.push(engine);\r\n\r\n }, { \"../common\": 1, \"../flowplayer\": 28, \"bean\": 31, \"extend-object\": 36 }], 5: [function (_dereq_, module, exports) {\r\n 'use strict';\r\n var flowplayer = _dereq_('../flowplayer')\r\n , common = _dereq_('../common')\r\n , bean = _dereq_('bean');\r\n\r\n flowplayer(function (api, root) {\r\n api.on('ready', function () {\r\n var el = common.find('video.fp-engine', root)[0];\r\n if (!el) return;\r\n el.setAttribute('x-webkit-airplay', 'allow');\r\n\r\n if (!window.WebKitPlaybackTargetAvailabilityEvent) return;\r\n el.addEventListener('webkitplaybacktargetavailabilitychanged', function (ev) {\r\n if (ev.availability !== 'available') return;\r\n var btnContainer = common.find('.fp-header', root)[0];\r\n common.find('.fp-airplay', btnContainer).forEach(common.removeNode);\r\n var trigger = common.createElement('a', { 'class': 'fp-airplay fp-icon', title: 'Play on AirPlay device' })\r\n btnContainer.insertBefore(trigger, common.find('.fp-fullscreen', btnContainer)[0]);\r\n\r\n });\r\n\r\n el.addEventListener('webkitcurrentplaybacktargetiswirelesschanged', function () {\r\n var trigger = common.find('.fp-airplay', root)[0];\r\n if (!trigger) return;\r\n common.toggleClass(trigger, 'fp-active', el.webkitCurrentPlaybackTargetIsWireless);\r\n });\r\n\r\n });\r\n\r\n bean.on(root, 'click', '.fp-airplay', function (ev) {\r\n ev.preventDefault();\r\n var video = common.find('video.fp-engine', root)[0];\r\n video.webkitShowPlaybackTargetPicker();\r\n });\r\n\r\n\r\n });\r\n\r\n }, { \"../common\": 1, \"../flowplayer\": 28, \"bean\": 31 }], 6: [function (_dereq_, module, exports) {\r\n 'use strict';\r\n /* global _gat */\r\n var flowplayer = _dereq_('../flowplayer'),\r\n TYPE_RE = _dereq_('./resolve').TYPE_RE,\r\n scriptjs = _dereq_('scriptjs'),\r\n bean = _dereq_('bean');\r\n flowplayer(function (player, root) {\r\n\r\n var id = player.conf.analytics, time = 0, last = 0, timer;\r\n\r\n if (id) {\r\n\r\n // load Analytics script if needed\r\n if (typeof _gat == 'undefined') scriptjs(\"//google-analytics.com/ga.js\");\r\n\r\n var getTracker = function () {\r\n var tracker = _gat._getTracker(id);\r\n tracker._setAllowLinker(true);\r\n return tracker;\r\n };\r\n\r\n var track = function track(e, api, video) {\r\n\r\n video = video || player.video;\r\n\r\n if (time && typeof _gat != 'undefined') {\r\n var tracker = getTracker();\r\n\r\n\r\n // http://code.google.com/apis/analytics/docs/tracking/eventTrackerGuide.html\r\n tracker._trackEvent(\r\n \"Video / Seconds played\",\r\n player.engine.engineName + \"/\" + video.type,\r\n video.title || root.getAttribute(\"title\") || video.src.split(\"/\").slice(-1)[0].replace(TYPE_RE, ''),\r\n Math.round(time / 1000)\r\n );\r\n time = 0;\r\n if (timer) {\r\n clearTimeout(timer);\r\n timer = null;\r\n }\r\n }\r\n\r\n };\r\n\r\n player.bind(\"load unload\", track).bind(\"progress\", function () {\r\n\r\n if (!player.seeking) {\r\n time += last ? (+new Date() - last) : 0;\r\n last = +new Date();\r\n }\r\n\r\n if (!timer) {\r\n timer = setTimeout(function () {\r\n timer = null;\r\n var tracker = getTracker();\r\n tracker._trackEvent('Flowplayer heartbeat', 'Heartbeat', '', 0, true);\r\n }, 10 * 60 * 1000); // heartbeat every 10 minutes\r\n }\r\n\r\n }).bind(\"pause\", function () {\r\n last = 0;\r\n });\r\n\r\n player.bind('shutdown', function () {\r\n bean.off(window, 'unload', track);\r\n });\r\n\r\n bean.on(window, 'unload', track);\r\n\r\n }\r\n\r\n });\r\n\r\n }, { \"../flowplayer\": 28, \"./resolve\": 19, \"bean\": 31, \"scriptjs\": 42 }], 7: [function (_dereq_, module, exports) {\r\n /* global chrome */\r\n /* eslint-disable no-console */\r\n\r\n 'use strict';\r\n var flowplayer = _dereq_('../flowplayer')\r\n , common = _dereq_('../common')\r\n , bean = _dereq_('bean')\r\n , scriptjs = _dereq_('scriptjs');\r\n\r\n\r\n\r\n flowplayer(function (api, root) {\r\n if (api.conf.chromecast === false) return;\r\n scriptjs('https://www.gstatic.com/cv/js/sender/v1/cast_sender.js');\r\n window['__onGCastApiAvailable'] = function (loaded) {\r\n if (!loaded) return;\r\n initialize();\r\n };\r\n\r\n var conf = api.conf.chromecast || {}\r\n , session\r\n , timer\r\n , trigger;\r\n\r\n function initialize() {\r\n var applicationId, sessionRequest, apiConfig;\r\n applicationId = conf.applicationId || chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID;\r\n sessionRequest = new chrome.cast.SessionRequest(applicationId);\r\n apiConfig = new chrome.cast.ApiConfig(\r\n sessionRequest,\r\n sessionListener,\r\n receiverListener\r\n );\r\n chrome.cast.initialize(apiConfig, onInitSuccess, onError);\r\n }\r\n\r\n function sessionListener() {\r\n console.log('sessionListener');\r\n }\r\n\r\n function receiverListener(ev) {\r\n if (ev !== chrome.cast.ReceiverAvailability.AVAILABLE) return;\r\n createUIElements();\r\n }\r\n\r\n function onInitSuccess() {\r\n /* noop */\r\n }\r\n\r\n function onError() {\r\n console.log('onError');\r\n }\r\n\r\n function createUIElements() {\r\n var btnContainer = common.find('.fp-header', root)[0];\r\n common.find('.fp-chromecast', btnContainer).forEach(common.removeNode);\r\n common.find('.fp-chromecast-engine', root).forEach(common.removeNode);\r\n trigger = common.createElement('a', { 'class': 'fp-chromecast fp-icon', title: 'Play on Cast device' })\r\n btnContainer.insertBefore(trigger, common.find('.fp-fullscreen', btnContainer)[0]);\r\n var chromeCastEngine = common.createElement('div', { 'class': 'fp-chromecast-engine' })\r\n , chromeCastStatus = common.createElement('p', { 'class': 'fp-chromecast-engine-status' })\r\n , chromeCastIcon = common.createElement('p', { 'class': 'fp-chromecast-engine-icon' });\r\n chromeCastEngine.appendChild(chromeCastIcon);\r\n chromeCastEngine.appendChild(chromeCastStatus);\r\n var engine = common.find('.fp-engine', root)[0];\r\n if (!engine) common.prepend(common.find('.fp-player', root)[0] || root, chromeCastEngine);\r\n else engine.parentNode.insertBefore(chromeCastEngine, engine);\r\n }\r\n\r\n function destroy() {\r\n clearInterval(timer);\r\n timer = null;\r\n api.release();\r\n common.toggleClass(root, 'is-chromecast', false);\r\n common.toggleClass(trigger, 'fp-active', false);\r\n }\r\n\r\n bean.on(root, 'click', '.fp-chromecast', function (ev) {\r\n ev.preventDefault();\r\n if (session) {\r\n api.trigger('pause', [api]);\r\n session.stop();\r\n session = null;\r\n destroy();\r\n return;\r\n }\r\n if (api.playing) api.pause();\r\n chrome.cast.requestSession(function (s) {\r\n session = s;\r\n var receiverName = session.receiver.friendlyName;\r\n common.html(common.find('.fp-chromecast-engine-status')[0], 'Playing on device ' + receiverName);\r\n var mediaInfo = new chrome.cast.media.MediaInfo(api.video.src);\r\n var request = new chrome.cast.media.LoadRequest(mediaInfo);\r\n session.loadMedia(request, onMediaDiscovered, function onMediaError() { });\r\n\r\n function onMediaDiscovered(media) {\r\n media.addUpdateListener(function (alive) {\r\n if (!session) return; // Already destoryed\r\n timer = timer || setInterval(function () {\r\n api.trigger('progress', [api, media.getEstimatedTime()]);\r\n }, 500);\r\n if (!alive) {\r\n destroy();\r\n api.trigger('finish', [api]);\r\n } else {\r\n common.toggleClass(root, 'is-chromecast', true);\r\n common.toggleClass(trigger, 'fp-active', true);\r\n api.hijack({\r\n pause: function () {\r\n media.pause();\r\n },\r\n resume: function () {\r\n media.play();\r\n },\r\n seek: function (time) {\r\n var req = new chrome.cast.media.SeekRequest();\r\n req.currentTime = time;\r\n media.seek(req);\r\n }\r\n });\r\n }\r\n var playerState = media.playerState;\r\n if (api.paused && playerState === chrome.cast.media.PlayerState.PLAYING) api.trigger('resume', [api]);\r\n if (api.playing && playerState === chrome.cast.media.PlayerState.PAUSED) api.trigger('pause', [api]);\r\n common.toggleClass(root, 'is-loading', playerState === chrome.cast.media.PlayerState.BUFFERING);\r\n });\r\n }\r\n }, function (err) {\r\n console.error('requestSession error', err);\r\n });\r\n });\r\n\r\n });\r\n\r\n }, { \"../common\": 1, \"../flowplayer\": 28, \"bean\": 31, \"scriptjs\": 42 }], 8: [function (_dereq_, module, exports) {\r\n 'use strict';\r\n var flowplayer = _dereq_('../flowplayer'),\r\n common = _dereq_('../common'),\r\n bean = _dereq_('bean');\r\n\r\n flowplayer(function (player, root) {\r\n\r\n var CUE_RE = / ?cue\\d+ ?/;\r\n\r\n var cuepointsDisabled = false;\r\n\r\n function setClass(index) {\r\n root.className = root.className.replace(CUE_RE, \" \");\r\n if (index >= 0) common.addClass(root, 'cue' + index);\r\n }\r\n\r\n var segments = {}, lastFiredSegment = -0.125;\r\n\r\n var fire = function (cue) {\r\n var idx = player.cuepoints.indexOf(cue);\r\n if (!isNaN(cue)) cue = { time: cue };\r\n cue.index = idx;\r\n setClass(idx);\r\n player.trigger('cuepoint', [player, cue]);\r\n };\r\n\r\n player.on(\"progress\", function (e, api, time) {\r\n if (cuepointsDisabled) return;\r\n var segment = segmentForCue(time);\r\n while (lastFiredSegment < segment) {\r\n lastFiredSegment += 0.125;\r\n if (!segments[lastFiredSegment]) continue;\r\n segments[lastFiredSegment].forEach(fire);\r\n }\r\n\r\n }).on(\"unload\", setClass)\r\n .on('beforeseek', function (ev) {\r\n setTimeout(function () {\r\n if (!ev.defaultPrevented) cuepointsDisabled = true;\r\n });\r\n }).on(\"seek\", function (ev, api, time) {\r\n setClass();\r\n lastFiredSegment = segmentForCue(time || 0) - 0.125;\r\n cuepointsDisabled = false;\r\n if (!time && segments[0]) segments[0].forEach(fire);\r\n }).on('ready', function (e, api, video) {\r\n lastFiredSegment = -0.125;\r\n var cues = video.cuepoints || player.conf.cuepoints || [];\r\n player.setCuepoints(cues);\r\n }).on('finish', function () {\r\n lastFiredSegment = -0.125;\r\n });\r\n if (player.conf.generate_cuepoints) {\r\n\r\n player.bind(\"load\", function () {\r\n\r\n // clean up cuepoint elements of previous playlist items\r\n common.find('.fp-cuepoint', root).forEach(common.removeNode);\r\n\r\n });\r\n }\r\n\r\n /**\r\n * API\r\n */\r\n player.setCuepoints = function (cues) {\r\n player.cuepoints = [];\r\n segments = {};\r\n cues.forEach(player.addCuepoint);\r\n return player;\r\n };\r\n player.addCuepoint = function (cue) {\r\n if (!player.cuepoints) player.cuepoints = [];\r\n var segment = segmentForCue(cue);\r\n if (!segments[segment]) segments[segment] = [];\r\n segments[segment].push(cue);\r\n player.cuepoints.push(cue);\r\n\r\n if (player.conf.generate_cuepoints && cue.visible !== false) {\r\n var duration = player.video.duration,\r\n timeline = common.find('.fp-timeline', root)[0];\r\n common.css(timeline, \"overflow\", \"visible\");\r\n\r\n var time = cue.time || cue;\r\n if (time < 0) time = duration + time;\r\n\r\n var el = common.createElement('a', { className: 'fp-cuepoint fp-cuepoint' + (player.cuepoints.length - 1) });\r\n common.css(el, \"left\", (time / duration * 100) + \"%\");\r\n\r\n timeline.appendChild(el);\r\n bean.on(el, 'mousedown', function (e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n player.seek(time);\r\n });\r\n }\r\n return player;\r\n };\r\n\r\n player.removeCuepoint = function (cue) {\r\n var idx = player.cuepoints.indexOf(cue),\r\n segment = segmentForCue(cue);\r\n if (idx === -1) return;\r\n player.cuepoints = player.cuepoints.slice(0, idx).concat(player.cuepoints.slice(idx + 1));\r\n\r\n var sIdx = segments[segment].indexOf(cue);\r\n if (sIdx === -1) return;\r\n segments[segment] = segments[segment].slice(0, sIdx).concat(segments[segment].slice(sIdx + 1));\r\n return player;\r\n };\r\n\r\n function segmentForCue(cue) {\r\n var time = cue && !isNaN(cue.time) ? cue.time : cue;\r\n if (time < 0) time = player.video.duration + time;\r\n return Math.round(time / 0.125) * 0.125;\r\n }\r\n\r\n });\r\n\r\n }, { \"../common\": 1, \"../flowplayer\": 28, \"bean\": 31 }], 9: [function (_dereq_, module, exports) {\r\n 'use strict';\r\n var flowplayer = _dereq_('../flowplayer'),\r\n bean = _dereq_('bean'),\r\n common = _dereq_('../common'),\r\n clipboard = _dereq_('./util/clipboard');\r\n\r\n flowplayer(function (player, root) {\r\n\r\n // no embedding\r\n if (player.conf.embed === false || player.conf.share === false) return;\r\n\r\n var btnContainer = common.find('.fp-share-menu', root)[0],\r\n trigger = common.createElement('a', { \"class\": \"fp-icon fp-embed\", title: 'Copy to your site' }, 'Embed');\r\n\r\n common.append(btnContainer, trigger);\r\n //ui.appendChild(target);\r\n\r\n player.embedCode = function () {\r\n var embedConf = player.conf.embed || {},\r\n video = player.video,\r\n width = embedConf.width || video.width || common.width(root),\r\n height = embedConf.height || video.height || common.height(root),\r\n ratio = player.conf.ratio,\r\n itrunc = '';\r\n }\r\n\r\n if (!ratio || player.conf.adaptiveRatio) ratio = height / width;\r\n return '
' + itrunc + 'position:absolute;top:0;left:0;width:100%;height:100%;\">
';\r\n };\r\n\r\n bean.on(root, 'click', '.fp-embed', function () {\r\n clipboard(player.embedCode(), function () {\r\n player.message('The embed code is now on your clipboard', 2000);\r\n }, function () {\r\n player.textarea(player.embedCode(), 'Copy the code below to embed your video');\r\n });\r\n });\r\n\r\n });\r\n\r\n }, { \"../common\": 1, \"../flowplayer\": 28, \"./util/clipboard\": 27, \"bean\": 31 }], 10: [function (_dereq_, module, exports) {\r\n 'use strict';\r\n /**\r\n * Mimimal jQuery-like event emitter implementation\r\n */\r\n module.exports = function (obj, elem) {\r\n if (!elem) elem = document.createElement('div'); //In this case we always want to trigger (Custom)Events on dom element\r\n var handlers = {}, eventArguments = {};\r\n\r\n var listenEvent = function (type, hndlr, disposable) {\r\n var actualEvent = type.split('.')[0]; //Strip namespace\r\n var internalHandler = function (ev) {\r\n if (disposable) {\r\n elem.removeEventListener(actualEvent, internalHandler);\r\n handlers[type].splice(handlers[type].indexOf(internalHandler), 1);\r\n }\r\n var args = [ev].concat(eventArguments[ev.timeStamp + ev.type] || []);\r\n if (hndlr) hndlr.apply(undefined, args);\r\n };\r\n elem.addEventListener(actualEvent, internalHandler);\r\n\r\n //Store handlers for unbinding\r\n if (!handlers[type]) handlers[type] = [];\r\n handlers[type].push(internalHandler);\r\n };\r\n\r\n obj.on = obj.bind = function (typ, hndlr) {\r\n var types = typ.split(' ');\r\n types.forEach(function (type) {\r\n listenEvent(type, hndlr);\r\n });\r\n return obj; //for chaining\r\n };\r\n\r\n obj.one = function (typ, hndlr) {\r\n var types = typ.split(' ');\r\n types.forEach(function (type) {\r\n listenEvent(type, hndlr, true);\r\n });\r\n return obj;\r\n };\r\n\r\n // Function to check if all items in toBeContained array are in the containing array\r\n var containsAll = function (containing, toBeContained) {\r\n return toBeContained.filter(function (i) {\r\n return containing.indexOf(i) === -1;\r\n }).length === 0;\r\n };\r\n\r\n\r\n obj.off = obj.unbind = function (typ) {\r\n var types = typ.split(' ');\r\n types.forEach(function (type) {\r\n var typeNameSpaces = type.split('.').slice(1),\r\n actualType = type.split('.')[0];\r\n Object.keys(handlers).filter(function (t) {\r\n var handlerNamespaces = t.split('.').slice(1);\r\n return (!actualType || t.indexOf(actualType) === 0) && containsAll(handlerNamespaces, typeNameSpaces);\r\n }).forEach(function (t) {\r\n var registererHandlers = handlers[t],\r\n actualEvent = t.split('.')[0];\r\n handlers[t] = registererHandlers.filter(function (hndlr) {\r\n elem.removeEventListener(actualEvent, hndlr);\r\n return false;\r\n });\r\n });\r\n });\r\n return obj;\r\n };\r\n\r\n obj.trigger = function (typ, args, returnEvent) {\r\n if (!typ) return;\r\n args = (args || []).length ? args || [] : [args];\r\n var event = document.createEvent('Event'), typStr;\r\n typStr = typ.type || typ;\r\n event.initEvent(typStr, false, true);\r\n if (Object.defineProperty) event.preventDefault = function () {\r\n Object.defineProperty(this, 'defaultPrevented', { get: function () { return true; } });\r\n };\r\n eventArguments[event.timeStamp + event.type] = args;\r\n elem.dispatchEvent(event);\r\n return returnEvent ? event : obj;\r\n };\r\n };\r\n\r\n\r\n module.exports.EVENTS = [\r\n 'beforeseek',\r\n 'disable',\r\n 'error',\r\n 'finish',\r\n 'fullscreen',\r\n 'fullscreen-exit',\r\n 'load',\r\n 'mute',\r\n 'pause',\r\n 'progress',\r\n 'ready',\r\n 'resume',\r\n 'seek',\r\n 'speed',\r\n 'stop',\r\n 'unload',\r\n 'volume',\r\n 'boot',\r\n 'shutdown'\r\n ];\r\n\r\n }, {}], 11: [function (_dereq_, module, exports) {\r\n 'use strict';\r\n\r\n var flowplayer = _dereq_('../flowplayer')\r\n , common = _dereq_('../common')\r\n , bean = _dereq_('bean');\r\n\r\n flowplayer(function (api, root) {\r\n var c = api.conf;\r\n\r\n if (c.share === false || !c.facebook) return;\r\n\r\n api.facebook = function () {\r\n var left\r\n , top\r\n , width = 550\r\n , height = 420\r\n , winHeight = screen.height\r\n , winWidth = screen.width\r\n , windowOptions = 'scrollbars=yes,resizable=yes,toolbar=no,location=yes'\r\n , shareUrl = typeof c.facebook === 'string' ? c.facebook : window.location.toString();\r\n left = Math.round((winWidth / 2) - (width / 2));\r\n top = 0;\r\n if (winHeight > height) {\r\n top = Math.round((winHeight / 2) - (height / 2));\r\n }\r\n window.open(\r\n 'https://www.facebook.com/sharer.php?s=100&p[url]=' + encodeURIComponent(shareUrl),\r\n 'sharer',\r\n windowOptions + ',width=' + width + ',height=' + height + ',left=' + left + ',top=' + top\r\n );\r\n };\r\n\r\n var btnContainer = common.find('.fp-share-menu', root)[0]\r\n , trigger = common.createElement('a', { \"class\": \"fp-icon fp-facebook\" }, 'Facebook');\r\n\r\n common.append(btnContainer, trigger);\r\n\r\n bean.on(root, 'click', '.fp-facebook', function () {\r\n api.facebook();\r\n });\r\n });\r\n\r\n }, { \"../common\": 1, \"../flowplayer\": 28, \"bean\": 31 }], 12: [function (_dereq_, module, exports) {\r\n 'use strict';\r\n var flowplayer = _dereq_('../flowplayer'),\r\n bean = _dereq_('bean'),\r\n common = _dereq_('../common'),\r\n FS_ENTER = \"fullscreen\",\r\n FS_EXIT = \"fullscreen-exit\",\r\n FULL_PLAYER,\r\n FS_SUPPORT = flowplayer.support.fullscreen,\r\n ua = navigator.userAgent.toLowerCase(),\r\n IS_SAFARI = /(safari)[ \\/]([\\w.]+)/.exec(ua) && !/(chrome)[ \\/]([\\w.]+)/.exec(ua);\r\n\r\n\r\n // esc button\r\n bean.on(document, \"fullscreenchange.ffscr webkitfullscreenchange.ffscr mozfullscreenchange.ffscr MSFullscreenChange.ffscr\", function (e) {\r\n var el = document.webkitCurrentFullScreenElement || document.mozFullScreenElement || document.fullscreenElement || document.msFullscreenElement || e.target;\r\n if (!FULL_PLAYER && (!el.parentNode || !el.parentNode.getAttribute('data-flowplayer-instance-id'))) return;\r\n var player = FULL_PLAYER || flowplayer(el.parentNode);\r\n if (el && !FULL_PLAYER) {\r\n FULL_PLAYER = player.trigger(FS_ENTER, [el]);\r\n } else {\r\n FULL_PLAYER.trigger(FS_EXIT, [FULL_PLAYER]);\r\n FULL_PLAYER = null;\r\n }\r\n });\r\n\r\n flowplayer(function (player, root) {\r\n\r\n var wrapper = common.createElement('div', { className: 'fp-player' });\r\n Array.prototype.map.call(root.children, common.identity).forEach(function (el) {\r\n if (common.matches(el, '.fp-ratio,script')) return;\r\n wrapper.appendChild(el);\r\n });\r\n root.appendChild(wrapper);\r\n\r\n if (!player.conf.fullscreen) return;\r\n\r\n var win = window,\r\n scrollY,\r\n scrollX;\r\n\r\n player.isFullscreen = false;\r\n\r\n player.fullscreen = function (flag) {\r\n\r\n if (player.disabled) return;\r\n\r\n if (flag === undefined) flag = !player.isFullscreen;\r\n\r\n if (flag) {\r\n scrollY = win.scrollY;\r\n scrollX = win.scrollX;\r\n }\r\n\r\n if (FS_SUPPORT) {\r\n\r\n if (flag) {\r\n ['requestFullScreen', 'webkitRequestFullScreen', 'mozRequestFullScreen', 'msRequestFullscreen'].forEach(function (fName) {\r\n if (typeof wrapper[fName] === 'function') {\r\n wrapper[fName](Element.ALLOW_KEYBOARD_INPUT);\r\n setTimeout(function () {\r\n if (IS_SAFARI && !document.webkitCurrentFullScreenElement && !document.mozFullScreenElement) { // Element.ALLOW_KEYBOARD_INPUT not allowed\r\n wrapper[fName]();\r\n }\r\n });\r\n return false;\r\n }\r\n });\r\n\r\n } else {\r\n ['exitFullscreen', 'webkitCancelFullScreen', 'mozCancelFullScreen', 'msExitFullscreen'].forEach(function (fName) {\r\n if (typeof document[fName] === 'function') {\r\n document[fName]();\r\n return false;\r\n }\r\n });\r\n }\r\n\r\n } else {\r\n player.trigger(flag ? FS_ENTER : FS_EXIT, [player]);\r\n }\r\n\r\n return player;\r\n };\r\n\r\n var lastClick;\r\n\r\n player.on(\"mousedown.fs\", function () {\r\n if (+new Date() - lastClick < 150 && player.ready) player.fullscreen();\r\n lastClick = +new Date();\r\n });\r\n\r\n player.on(FS_ENTER, function () {\r\n common.addClass(root, 'is-fullscreen');\r\n common.toggleClass(root, 'fp-minimal-fullscreen', common.hasClass(root, 'fp-minimal'));\r\n common.removeClass(root, 'fp-minimal');\r\n\r\n if (!FS_SUPPORT) common.css(root, 'position', 'fixed');\r\n player.isFullscreen = true;\r\n\r\n }).on(FS_EXIT, function () {\r\n var oldOpacity;\r\n common.toggleClass(root, 'fp-minimal', common.hasClass(root, 'fp-minimal-fullscreen'));\r\n common.removeClass(root, 'fp-minimal-fullscreen');\r\n if (!FS_SUPPORT && player.engine === \"html5\") {\r\n oldOpacity = root.css('opacity') || '';\r\n common.css(root, 'opacity', 0);\r\n }\r\n if (!FS_SUPPORT) common.css(root, 'position', '');\r\n\r\n common.removeClass(root, 'is-fullscreen');\r\n if (!FS_SUPPORT && player.engine === \"html5\") setTimeout(function () { root.css('opacity', oldOpacity); });\r\n player.isFullscreen = false;\r\n win.scrollTo(scrollX, scrollY);\r\n }).on('unload', function () {\r\n if (player.isFullscreen) player.fullscreen();\r\n });\r\n\r\n player.on('shutdown', function () {\r\n FULL_PLAYER = null;\r\n });\r\n\r\n });\r\n\r\n }, { \"../common\": 1, \"../flowplayer\": 28, \"bean\": 31 }], 13: [function (_dereq_, module, exports) {\r\n 'use strict';\r\n var flowplayer = _dereq_('../flowplayer'),\r\n bean = _dereq_('bean'),\r\n focused,\r\n focusedRoot,\r\n IS_HELP = \"is-help\",\r\n common = _dereq_('../common');\r\n\r\n // keyboard. single global listener\r\n bean.on(document, \"keydown.fp\", function (e) {\r\n\r\n var el = focused,\r\n metaKeyPressed = e.ctrlKey || e.metaKey || e.altKey,\r\n key = e.which,\r\n conf = el && el.conf;\r\n\r\n if (!el || !conf.keyboard || el.disabled) return;\r\n\r\n // help dialog (shift key not truly required)\r\n if ([63, 187, 191].indexOf(key) != -1) {\r\n common.toggleClass(focusedRoot, IS_HELP);\r\n return false;\r\n }\r\n\r\n // close help / unload\r\n if (key == 27 && common.hasClass(focusedRoot, IS_HELP)) {\r\n common.toggleClass(focusedRoot, IS_HELP);\r\n return false;\r\n }\r\n\r\n if (!metaKeyPressed && el.ready) {\r\n\r\n e.preventDefault();\r\n\r\n // slow motion / fast forward\r\n if (e.shiftKey) {\r\n if (key == 39) el.speed(true);\r\n else if (key == 37) el.speed(false);\r\n return;\r\n }\r\n\r\n // 1, 2, 3, 4 ..\r\n if (key < 58 && key > 47) return el.seekTo(key - 48);\r\n\r\n switch (key) {\r\n case 38: case 75: el.volume(el.volumeLevel + 0.15); break; // volume up\r\n case 40: case 74: el.volume(el.volumeLevel - 0.15); break; // volume down\r\n case 39: case 76: el.seeking = true; el.seek(true); break; // forward\r\n case 37: case 72: el.seeking = true; el.seek(false); break; // backward\r\n case 190: el.seekTo(); break; // to last seek position\r\n case 32: el.toggle(); break; // spacebar\r\n case 70: if (conf.fullscreen) el.fullscreen(); break; // toggle fullscreen\r\n case 77: el.mute(); break; // mute\r\n case 81: el.unload(); break; // unload/stop\r\n }\r\n\r\n }\r\n\r\n });\r\n\r\n flowplayer(function (api, root) {\r\n\r\n // no keyboard configured\r\n if (!api.conf.keyboard) return;\r\n\r\n // hover\r\n bean.on(root, \"mouseenter mouseleave\", function (e) {\r\n focused = !api.disabled && e.type == 'mouseover' ? api : 0;\r\n if (focused) focusedRoot = root;\r\n });\r\n\r\n var speedhelp = flowplayer.support.video && api.conf.engine !== \"flash\" &&\r\n !!document.createElement('video').playbackRate ?\r\n '

shift + slower / faster

' : '';\r\n\r\n // TODO: add to player-layout.html\r\n root.appendChild(common.createElement('div', { className: 'fp-help' }, '\\\r\n \\\r\n
\\\r\n

spaceplay / pause

\\\r\n

qunload | stop

\\\r\n

ffullscreen

' + speedhelp + '\\\r\n
\\\r\n
\\\r\n

volume

\\\r\n

mmute

\\\r\n
\\\r\n
\\\r\n

seek

\\\r\n

 . seek to previous\\\r\n

126 seek to 10%, 20% … 60%

\\\r\n
\\\r\n '));\r\n\r\n bean.on(root, 'click', '.fp-close', function () {\r\n common.toggleClass(root, IS_HELP);\r\n });\r\n\r\n api.bind('shutdown', function () {\r\n if (focusedRoot == root) focusedRoot = null;\r\n });\r\n\r\n });\r\n\r\n\r\n }, { \"../common\": 1, \"../flowplayer\": 28, \"bean\": 31 }], 14: [function (_dereq_, module, exports) {\r\n var flowplayer = _dereq_('../flowplayer')\r\n , common = _dereq_('../common')\r\n , bean = _dereq_('bean');\r\n\r\n flowplayer(function (api, root) {\r\n api.showMenu = function (menu, triggerElement) {\r\n var ui = common.find('.fp-ui', root)[0];\r\n common.toggleClass(menu, 'fp-active', true);\r\n setTimeout(function () {\r\n bean.one(document, 'click', function () {\r\n api.hideMenu(menu);\r\n });\r\n });\r\n var coordinates = triggerElement;\r\n if (triggerElement && triggerElement.tagName) {\r\n coordinates = {\r\n left: common.offset(triggerElement).left,\r\n rightFallbackOffset: common.width(triggerElement),\r\n top: common.offset(triggerElement).top + common.height(triggerElement)\r\n };\r\n }\r\n if (!coordinates) return common.css(menu, 'top', 'auto');\r\n coordinates.rightFallbackOffset = coordinates.rightFallbackOffset || 0;\r\n var top = coordinates.top - common.offset(ui).top\r\n , left = coordinates.left - common.offset(ui).left\r\n if (common.width(menu) + left > common.width(ui)) left = left - common.width(menu) + coordinates.rightFallbackOffset;\r\n if (common.height(menu) + top > common.height(ui)) top = top - common.height(menu);\r\n common.css(menu, {\r\n top: top + 'px',\r\n left: left + 'px'\r\n });\r\n };\r\n\r\n api.hideMenu = function (menu) {\r\n common.toggleClass(menu, 'fp-active', false);\r\n common.css(menu, {\r\n top: '-9999em'\r\n });\r\n };\r\n });\r\n\r\n }, { \"../common\": 1, \"../flowplayer\": 28, \"bean\": 31 }], 15: [function (_dereq_, module, exports) {\r\n var flowplayer = _dereq_('../flowplayer')\r\n , common = _dereq_('../common')\r\n , bean = _dereq_('bean');\r\n flowplayer(function (api, root) {\r\n var header = common.find('.fp-header', root)[0]\r\n , ui = common.find('.fp-ui', root)[0];\r\n\r\n api.message = function (txt, ttl) {\r\n var msg = createMessage(txt);\r\n var dismiss = function () {\r\n common.toggleClass(msg, 'fp-shown');\r\n setTimeout(function () { removeMessage(msg); }, 500);\r\n };\r\n if (ttl) setTimeout(dismiss, ttl);\r\n return dismiss;\r\n }\r\n\r\n api.textarea = function (txt) {\r\n var area = document.createElement('textarea');\r\n area.value = txt;\r\n area.className = 'fp-textarea';\r\n ui.appendChild(area);\r\n bean.on(document, 'click.fptextarea', function (ev) {\r\n if (ev.target === area) return area.select();\r\n ev.stopPropagation();\r\n ev.preventDefault();\r\n common.removeNode(area);\r\n bean.off(document, 'click.fptextarea');\r\n });\r\n }\r\n\r\n\r\n function createMessage(txt) {\r\n var msg = common.createElement('div', {\r\n className: 'fp-message'\r\n }, txt);\r\n ui.insertBefore(msg, header);\r\n setTimeout(function () { common.toggleClass(msg, 'fp-shown'); });\r\n return msg;\r\n }\r\n\r\n function removeMessage(msg) {\r\n common.removeNode(msg);\r\n }\r\n });\r\n\r\n }, { \"../common\": 1, \"../flowplayer\": 28, \"bean\": 31 }], 16: [function (_dereq_, module, exports) {\r\n 'use strict';\r\n var flowplayer = _dereq_('../flowplayer'),\r\n isIeMobile = /IEMobile/.test(window.navigator.userAgent),\r\n common = _dereq_('../common'),\r\n bean = _dereq_('bean'),\r\n format = _dereq_('./ui').format,\r\n UA = window.navigator.userAgent;\r\n if (flowplayer.support.touch || isIeMobile) {\r\n\r\n flowplayer(function (player, root) {\r\n var isAndroid = /Android/.test(UA) && !/Firefox/.test(UA) && !/Opera/.test(UA),\r\n isSilk = /Silk/.test(UA),\r\n androidVer = isAndroid ? parseFloat(/Android\\ (\\d\\.\\d)/.exec(UA)[1], 10) : 0;\r\n\r\n // custom load for android\r\n if (isAndroid && !isIeMobile) {\r\n if (!/Chrome/.test(UA) && androidVer < 4) {\r\n var originalLoad = player.load;\r\n player.load = function () {\r\n var ret = originalLoad.apply(player, arguments);\r\n player.trigger('ready', [player, player.video]);\r\n return ret;\r\n };\r\n }\r\n var timer, currentTime = 0;\r\n var resumeTimer = function (api) {\r\n timer = setInterval(function () {\r\n api.video.time = ++currentTime;\r\n api.trigger('progress', [api, currentTime]);\r\n }, 1000);\r\n };\r\n player.bind('ready pause unload', function () {\r\n if (timer) {\r\n clearInterval(timer);\r\n timer = null;\r\n }\r\n });\r\n player.bind('ready', function () {\r\n currentTime = 0;\r\n });\r\n player.bind('resume', function (ev, api) {\r\n if (!api.live) return;\r\n if (currentTime) { return resumeTimer(api); }\r\n player.one('progress', function (ev, api, t) {\r\n if (t === 0) { // https://github.com/flowplayer/flowplayer/issues/727\r\n resumeTimer(api);\r\n }\r\n });\r\n });\r\n }\r\n\r\n // hide volume\r\n if (!flowplayer.support.volume) {\r\n common.addClass(root, 'no-volume');\r\n }\r\n common.addClass(root, 'is-touch');\r\n if (player.sliders && player.sliders.timeline) player.sliders.timeline.disableAnimation();\r\n\r\n // fake mouseover effect with click\r\n var hasMoved = false;\r\n bean.on(root, 'touchmove', function () {\r\n hasMoved = true;\r\n });\r\n bean.on(root, 'touchend click', function (e) {\r\n if (hasMoved) { //not intentional, most likely scrolling\r\n hasMoved = false;\r\n return;\r\n }\r\n\r\n if (player.playing && !common.hasClass(root, 'is-mouseover')) {\r\n common.addClass(root, 'is-mouseover');\r\n common.removeClass(root, 'is-mouseout');\r\n e.preventDefault();\r\n e.stopPropagation();\r\n return;\r\n }\r\n\r\n if (!player.playing && !player.splash && common.hasClass(root, 'is-mouseout') && !common.hasClass(root, 'is-mouseover')) {\r\n setTimeout(function () {\r\n if (!player.disabled && !player.playing && !player.splash) {\r\n player.resume();\r\n }\r\n }, 400);\r\n }\r\n\r\n\r\n });\r\n\r\n // native fullscreen\r\n if (!flowplayer.support.fullscreen && player.conf.native_fullscreen && typeof document.createElement('video').webkitEnterFullScreen === 'function') {\r\n var oldFullscreen = player.fullscreen;\r\n player.fullscreen = function () {\r\n var video = common.find('video.fp-engine', root)[0];\r\n if (!video) return oldFullscreen.apply(player);\r\n player.trigger('fullscreen', [player]);\r\n bean.on(document, 'webkitfullscreenchange.nativefullscreen', function () {\r\n if (document.webkitFullscreenElement !== video) return;\r\n bean.off(document, '.nativefullscreen');\r\n bean.on(document, 'webkitfullscreenchange.nativefullscreen', function () {\r\n if (document.webkitFullscreenElement) return;\r\n bean.off(document, '.nativefullscreen');\r\n player.trigger('fullscreen-exit', [player]);\r\n });\r\n });\r\n video.webkitEnterFullScreen();\r\n bean.one(video, 'webkitendfullscreen', function () {\r\n bean.off(document, 'fullscreenchange.nativefullscreen');\r\n player.trigger('fullscreen-exit', [player]);\r\n common.prop(video, 'controls', true);\r\n common.prop(video, 'controls', false);\r\n });\r\n };\r\n }\r\n\r\n\r\n // Android browser gives video.duration == 1 until second 'timeupdate' event\r\n if (isAndroid || isSilk) player.bind(\"ready\", function () {\r\n\r\n var video = common.find('video.fp-engine', root)[0];\r\n bean.one(video, 'canplay', function () {\r\n video.play();\r\n });\r\n video.play();\r\n\r\n player.bind(\"progress.dur\", function () {\r\n if (player.live || player.conf.live) return;\r\n var duration = video.duration;\r\n\r\n if (duration !== 1) {\r\n player.video.duration = duration;\r\n common.find(\".fp-duration\", root)[0].innerHTML = format(duration);\r\n player.unbind(\"progress.dur\");\r\n }\r\n });\r\n });\r\n\r\n\r\n });\r\n\r\n }\r\n\r\n\r\n }, { \"../common\": 1, \"../flowplayer\": 28, \"./ui\": 24, \"bean\": 31 }], 17: [function (_dereq_, module, exports) {\r\n 'use strict';\r\n var flowplayer = _dereq_('../flowplayer'),\r\n extend = _dereq_('extend-object'),\r\n bean = _dereq_('bean'),\r\n common = _dereq_('../common'),\r\n Resolve = _dereq_('./resolve'),\r\n resolver = new Resolve(),\r\n $ = window.jQuery,\r\n externalRe = /^#/;\r\n flowplayer(function (player, root) {\r\n\r\n var conf = extend({ active: 'is-active', advance: true, query: \".fp-playlist a\" }, player.conf)\r\n , klass = conf.active\r\n , ui = common.find('.fp-ui', root)[0];\r\n\r\n var hasCustomPlaylist = common.hasClass(root, 'fp-custom-playlist') || !!conf.customPlaylist;\r\n common.toggleClass(root, 'fp-custom-playlist', hasCustomPlaylist);\r\n common.toggleClass(root, 'fp-default-playlist', !hasCustomPlaylist);\r\n\r\n // getters\r\n function els() {\r\n return common.find(conf.query, queryRoot());\r\n }\r\n\r\n function queryRoot() {\r\n if (externalRe.test(conf.query)) return;\r\n return root;\r\n }\r\n\r\n function active() {\r\n return common.find(conf.query + \".\" + klass, queryRoot());\r\n }\r\n\r\n\r\n player.play = function (i) {\r\n if (i === undefined) return player.resume();\r\n if (typeof i === 'number' && !player.conf.playlist[i]) return player;\r\n else if (typeof i != 'number') return player.load.apply(null, arguments);\r\n var arg = extend({ index: i }, player.conf.playlist[i]);\r\n player.off('beforeresume.fromfirst'); // Don't start from beginning if clip explicitely chosen\r\n if (i === player.video.index) return player.load(arg, function () { player.resume(); });\r\n player.load(arg, function () {\r\n player.video.index = i;\r\n });\r\n return player;\r\n };\r\n\r\n player.next = function (e) {\r\n if (e) e.preventDefault();\r\n var current = player.video.index;\r\n if (current != -1) {\r\n current = current === player.conf.playlist.length - 1 ? 0 : current + 1;\r\n player.play(current);\r\n }\r\n return player;\r\n };\r\n\r\n player.prev = function (e) {\r\n if (e) e.preventDefault();\r\n var current = player.video.index;\r\n if (current != -1) {\r\n current = current === 0 ? player.conf.playlist.length - 1 : current - 1;\r\n player.play(current);\r\n }\r\n return player;\r\n };\r\n\r\n player.setPlaylist = function (items, keepCurrentIndex) {\r\n player.conf.playlist = items;\r\n if (!keepCurrentIndex) delete player.video.index;\r\n generatePlaylist();\r\n return player;\r\n };\r\n\r\n player.addPlaylistItem = function (item) {\r\n delete player.video.is_last;\r\n return player.setPlaylist(player.conf.playlist.concat([item]), true);\r\n };\r\n\r\n player.removePlaylistItem = function (idx) {\r\n var pl = player.conf.playlist;\r\n return player.setPlaylist(pl.slice(0, idx).concat(pl.slice(idx + 1)));\r\n };\r\n\r\n bean.on(root, 'click', '.fp-next', player.next);\r\n bean.on(root, 'click', '.fp-prev', player.prev);\r\n\r\n if (conf.advance) {\r\n player.off(\"finish.pl\").on(\"finish.pl\", function (e, player) {\r\n // clip looping\r\n if (player.video.loop) return player.seek(0, function () { player.resume(); });\r\n // next clip is found or loop\r\n var next = player.video.index >= 0 ? player.video.index + 1 : undefined;\r\n if (next < player.conf.playlist.length || conf.loop) {\r\n next = next === player.conf.playlist.length ? 0 : next;\r\n common.removeClass(root, 'is-finished');\r\n setTimeout(function () { // Let other finish callbacks fire first\r\n player.play(next);\r\n });\r\n\r\n // stop to last clip, play button starts from 1:st clip\r\n } else {\r\n\r\n // If we have multiple items in playlist, start from first\r\n if (player.conf.playlist.length > 1) {\r\n player.one(\"beforeresume.fromfirst\", function (ev) {\r\n ev.preventDefault();\r\n player.play(0);\r\n });\r\n player.one('seek', function () { player.off('beforeresume.fromfirst'); });\r\n }\r\n }\r\n });\r\n }\r\n\r\n function generatePlaylist() {\r\n var plEl = common.find('.fp-playlist', root)[0]\r\n if (!plEl) {\r\n plEl = common.createElement('div', { className: 'fp-playlist' });\r\n var cntrls = common.find('.fp-next,.fp-prev', root);\r\n if (!cntrls.length) common.insertAfter(root, common.find('video', root)[0], plEl);\r\n else cntrls[0].parentElement.insertBefore(plEl, cntrls[0]);\r\n }\r\n plEl.innerHTML = '';\r\n if (player.conf.playlist[0].length) { // FP5 style playlist\r\n player.conf.playlist = player.conf.playlist.map(function (itm) {\r\n if (typeof itm === 'string') {\r\n var type = itm.split(Resolve.TYPE_RE)[1];\r\n return {\r\n sources: [{\r\n type: type.toLowerCase() === 'm3u8' ? 'application/x-mpegurl' : 'video/' + type,\r\n src: itm\r\n }]\r\n };\r\n }\r\n return {\r\n sources: itm.map(function (src) {\r\n var s = {};\r\n Object.keys(src).forEach(function (k) {\r\n s.type = /mpegurl/i.test(k) ? 'application/x-mpegurl' : 'video/' + k;\r\n s.src = src[k];\r\n });\r\n return s;\r\n })\r\n };\r\n });\r\n }\r\n player.conf.playlist.forEach(function (item, i) {\r\n var href = item.sources[0].src;\r\n plEl.appendChild(common.createElement('a', {\r\n href: href,\r\n className: player.video.index === i ? klass : undefined,\r\n 'data-index': i\r\n }));\r\n });\r\n }\r\n\r\n var playlistInitialized = false;\r\n if (player.conf.playlist.length) { // playlist configured by javascript, generate playlist\r\n playlistInitialized = true;\r\n generatePlaylist();\r\n if (!player.conf.clip || !player.conf.clip.sources.length) {\r\n player.conf.clip = player.conf.playlist[player.conf.startIndex || 0];\r\n }\r\n }\r\n\r\n if (els().length && !playlistInitialized) { //generate playlist from existing elements\r\n player.conf.playlist = [];\r\n delete player.conf.startIndex;\r\n els().forEach(function (el) {\r\n var src = el.href;\r\n el.setAttribute('data-index', player.conf.playlist.length);\r\n var itm = resolver.resolve(src, player.conf.clip.sources);\r\n if ($) {\r\n extend(itm, $(el).data());\r\n }\r\n player.conf.playlist.push(itm);\r\n });\r\n }\r\n\r\n common.find('.fp-prev,.fp-next,.fp-playlist', root).forEach(function (el) {\r\n ui.appendChild(el);\r\n });\r\n\r\n /* click -> play */\r\n bean.on(externalRe.test(conf.query) ? document : root, \"click\", conf.query, function (e) {\r\n e.preventDefault();\r\n var el = e.currentTarget;\r\n var toPlay = Number(el.getAttribute('data-index'));\r\n if (toPlay != -1) {\r\n player.play(toPlay);\r\n }\r\n });\r\n\r\n // highlight\r\n function videoIndex(video) {\r\n if (typeof video.index !== 'undefined') return video.index;\r\n if (typeof player.video.index !== 'undefined') return player.video.index;\r\n return player.conf.startIndex || 0;\r\n }\r\n player.on(\"load\", function (e, api, video) {\r\n if (!player.conf.playlist.length) return;\r\n var prev = active()[0],\r\n prevIndex = prev && prev.getAttribute('data-index'),\r\n index = video.index = videoIndex(video),\r\n el = common.find(conf.query + '[data-index=\"' + index + '\"]', queryRoot())[0],\r\n is_last = index == player.conf.playlist.length - 1;\r\n if (prev) common.removeClass(prev, klass);\r\n if (el) common.addClass(el, klass);\r\n // index\r\n common.removeClass(root, 'video' + prevIndex);\r\n common.addClass(root, 'video' + index);\r\n common.toggleClass(root, \"last-video\", is_last);\r\n\r\n // video properties\r\n video.index = api.video.index = index;\r\n video.is_last = api.video.is_last = is_last;\r\n\r\n // without namespace callback called only once. unknown rason.\r\n }).on(\"unload.pl\", function () {\r\n if (!player.conf.playlist.length) return;\r\n active().forEach(function (el) {\r\n common.toggleClass(el, klass);\r\n });\r\n player.conf.playlist.forEach(function (itm, i) {\r\n common.removeClass(root, 'video' + i);\r\n });\r\n });\r\n\r\n if (player.conf.playlist.length) {\r\n // disable single clip looping\r\n player.conf.loop = false;\r\n }\r\n\r\n\r\n });\r\n\r\n }, { \"../common\": 1, \"../flowplayer\": 28, \"./resolve\": 19, \"bean\": 31, \"extend-object\": 36 }], 18: [function (_dereq_, module, exports) {\r\n var flowplayer = _dereq_('../flowplayer')\r\n , common = _dereq_('../common')\r\n , bean = _dereq_('bean');\r\n\r\n flowplayer(function (api, root) {\r\n var ui = common.find('.fp-ui', root)[0]\r\n , controlbar = common.find('.fp-controls', ui)[0];\r\n\r\n bean.on(root, 'click', '.fp-qsel', function () {\r\n var menu = common.find('.fp-qsel-menu', root)[0];\r\n if (common.hasClass(menu, 'fp-active')) api.hideMenu();\r\n else api.showMenu(menu);\r\n });\r\n\r\n bean.on(root, 'click', '.fp-qsel-menu a', function (ev) {\r\n var q = ev.target.getAttribute('data-quality');\r\n api.quality(q);\r\n });\r\n\r\n api.quality = function (q) {\r\n q = isNaN(Number(q)) ? q : Number(q);\r\n api.trigger('quality', [api, q]);\r\n };\r\n\r\n api.on('quality', function (_ev, _api, q) {\r\n selectQuality(q, _api.video.qualities);\r\n });\r\n\r\n api.on('ready', function (_ev, _api, video) {\r\n removeMenu();\r\n if (!video.qualities || video.qualities.filter(function (q) {\r\n return typeof q.value !== 'undefined' ? q.value > -1 : true;\r\n }).length < 2) return;\r\n createMenu(video.qualities, video.quality);\r\n selectQuality(video.quality, video.qualities);\r\n });\r\n\r\n function removeMenu() {\r\n common.find('.fp-qsel-menu', root).forEach(common.removeNode);\r\n common.find('.fp-qsel', root).forEach(common.removeNode);\r\n }\r\n\r\n function createMenu(qualities) {\r\n controlbar.appendChild(common.createElement('strong', { className: 'fp-qsel' }, 'HD'));\r\n var menu = common.createElement('div', { className: 'fp-menu fp-qsel-menu' }, 'Quality');\r\n qualities.forEach(function (q) {\r\n var a = document.createElement('a')\r\n , quality = typeof q.value !== 'undefined' ? q.value : q;\r\n a.setAttribute('data-quality', quality);\r\n a.innerHTML = q.label || q;\r\n menu.appendChild(a);\r\n });\r\n ui.appendChild(menu);\r\n }\r\n\r\n function selectQuality(quality) {\r\n common.find('.fp-qsel-menu a', root).forEach(function (el) {\r\n common.toggleClass(el, 'fp-selected', el.getAttribute('data-quality') == quality);\r\n common.toggleClass(el, 'fp-color', el.getAttribute('data-quality') == quality);\r\n });\r\n }\r\n\r\n });\r\n\r\n }, { \"../common\": 1, \"../flowplayer\": 28, \"bean\": 31 }], 19: [function (_dereq_, module, exports) {\r\n 'use strict';\r\n var TYPE_RE = /\\.(\\w{3,4})(\\?.*)?$/i,\r\n extend = _dereq_('extend-object');\r\n\r\n function parseSource(el) {\r\n\r\n var src = el.attr(\"src\"),\r\n type = el.attr(\"type\") || \"\",\r\n suffix = src.split(TYPE_RE)[1];\r\n type = type.toLowerCase();\r\n return extend(el.data(), { src: src, suffix: suffix || type, type: type || suffix });\r\n }\r\n\r\n function getType(typ) {\r\n if (/mpegurl/i.test(typ)) return 'application/x-mpegurl';\r\n return 'video/' + typ;\r\n }\r\n\r\n /* Resolves video object from initial configuration and from load() method */\r\n module.exports = function URLResolver() {\r\n var self = this;\r\n\r\n self.sourcesFromVideoTag = function (videoTag, $) {\r\n var sources = [];\r\n // initial sources\r\n $(\"source\", videoTag).each(function () {\r\n sources.push(parseSource($(this)));\r\n });\r\n\r\n if (!sources.length && videoTag.length) sources.push(parseSource(videoTag));\r\n\r\n return sources;\r\n };\r\n\r\n\r\n self.resolve = function (video, sources) {\r\n if (!video) return { sources: sources };\r\n\r\n if (typeof video == 'string') {\r\n video = { src: video, sources: [] };\r\n video.sources = (sources || []).map(function (source) {\r\n var suffix = source.src.split(TYPE_RE)[1];\r\n return { type: source.type, src: video.src.replace(TYPE_RE, '.' + suffix + \"$2\") };\r\n });\r\n }\r\n\r\n if (video instanceof Array) {\r\n video = {\r\n sources: video.map(function (src) {\r\n if (src.type && src.src) return src;\r\n return Object.keys(src).reduce(function (m, typ) {\r\n return extend(m, {\r\n type: getType(typ),\r\n src: src[typ]\r\n });\r\n }, {});\r\n })\r\n };\r\n }\r\n\r\n return video;\r\n };\r\n };\r\n\r\n module.exports.TYPE_RE = TYPE_RE;\r\n\r\n }, { \"extend-object\": 36 }], 20: [function (_dereq_, module, exports) {\r\n 'use strict';\r\n\r\n var flowplayer = _dereq_('../flowplayer')\r\n , common = _dereq_('../common')\r\n , extend = _dereq_('extend-object')\r\n , bean = _dereq_('bean');\r\n\r\n flowplayer(function (api, root) {\r\n var c = api.conf;\r\n if (c.share === false) {\r\n common.find('.fp-share', root).forEach(common.removeNode);\r\n return;\r\n }\r\n\r\n api.shareUrl = function (directEmbed) {\r\n if (directEmbed && c.embed && c.embed.iframe) return c.embed.iframe;\r\n if (typeof api.conf.share === 'string') return api.conf.share;\r\n var title = encodeURIComponent(api.video.title || (common.find('title')[0] || {}).innerHTML || 'Flowplayer Commercial video')\r\n , conf = encodeURIComponent(btoa(JSON.stringify(extend({}, api.conf, api.extensions))))\r\n , redirect = encodeURIComponent(window.location.toString())\r\n , baseUrl = directEmbed ? 'https://flowplayer.org/e/' : 'https://flowplayer.org/s/';\r\n return baseUrl + '?t=' + title + '&c=' + conf + '&r=' + redirect;\r\n };\r\n\r\n var menu = common.createElement('div', { className: 'fp-menu fp-share-menu' }, 'Share')\r\n , ui = common.find('.fp-ui', root)[0];\r\n ui.appendChild(menu);\r\n\r\n var button = common.find('.fp-share', root)[0];\r\n\r\n bean.on(root, 'click', '.fp-share', function (ev) {\r\n ev.preventDefault();\r\n if (common.hasClass(menu, 'fp-active')) api.hideMenu();\r\n else api.showMenu(menu, button);\r\n });\r\n });\r\n\r\n }, { \"../common\": 1, \"../flowplayer\": 28, \"bean\": 31, \"extend-object\": 36 }], 21: [function (_dereq_, module, exports) {\r\n 'use strict';\r\n var flowplayer = _dereq_('../flowplayer'),\r\n common = _dereq_('../common'),\r\n bean = _dereq_('bean');\r\n\r\n flowplayer.defaults.subtitleParser = function (txt) {\r\n var TIMECODE_RE = /^(([0-9]{2}:){1,2}[0-9]{2}[,.][0-9]{3}) --\\> (([0-9]{2}:){1,2}[0-9]{2}[,.][0-9]{3})(.*)/;\r\n\r\n function seconds(timecode) {\r\n var els = timecode.split(':');\r\n if (els.length == 2) els.unshift(0);\r\n return els[0] * 60 * 60 + els[1] * 60 + parseFloat(els[2].replace(',', '.'));\r\n }\r\n\r\n var entries = [];\r\n for (var i = 0, lines = txt.split(\"\\n\"), len = lines.length, entry = {}, title, timecode, text; i < len; i++) {\r\n timecode = TIMECODE_RE.exec(lines[i]);\r\n\r\n if (timecode) {\r\n\r\n // title\r\n title = lines[i - 1];\r\n\r\n // text\r\n text = \"

\" + lines[++i] + \"


\";\r\n while (typeof lines[++i] === 'string' && lines[i].trim() && i < lines.length) text += \"

\" + lines[i] + \"


\";\r\n\r\n // entry\r\n entry = {\r\n title: title,\r\n startTime: seconds(timecode[1]),\r\n endTime: seconds(timecode[3]),\r\n text: text\r\n };\r\n entries.push(entry);\r\n }\r\n }\r\n return entries;\r\n };\r\n\r\n flowplayer(function (p, root) {\r\n var currentPoint, wrap,\r\n subtitleControl, subtitleMenu;\r\n\r\n if (!flowplayer.support.inlineVideo || p.conf.native_fullscreen) p.conf.nativesubtitles = true;\r\n\r\n var createSubtitleControl = function () {\r\n subtitleControl = subtitleControl || common.createElement('strong', { className: 'fp-cc' }, 'CC');\r\n subtitleMenu = subtitleMenu || common.createElement('div', { className: 'fp-menu fp-subtitle-menu' }, 'Closed Captions');\r\n common.find('a', subtitleMenu).forEach(common.removeNode);\r\n subtitleMenu.appendChild(common.createElement('a', { 'data-subtitle-index': -1 }, 'No subtitles'));\r\n (p.video.subtitles || []).forEach(function (st, i) {\r\n var srcLang = st.srclang || 'en',\r\n label = st.label || 'Default (' + srcLang + ')';\r\n var item = common.createElement('a', { 'data-subtitle-index': i }, label);\r\n subtitleMenu.appendChild(item);\r\n });\r\n common.find('.fp-ui', root)[0].appendChild(subtitleMenu);\r\n common.find('.fp-controls', root)[0].appendChild(subtitleControl);\r\n return subtitleControl;\r\n };\r\n\r\n bean.on(root, 'click', '.fp-cc', function () {\r\n if (common.hasClass(subtitleMenu, 'fp-active')) p.hideMenu();\r\n else p.showMenu(subtitleMenu);\r\n });\r\n\r\n bean.on(root, 'click', '.fp-subtitle-menu [data-subtitle-index]', function (ev) {\r\n ev.preventDefault();\r\n var idx = ev.target.getAttribute('data-subtitle-index');\r\n if (idx === '-1') return p.disableSubtitles();\r\n p.loadSubtitles(idx);\r\n });\r\n\r\n var createUIElements = function () {\r\n wrap = common.find('.fp-captions', root)[0];\r\n wrap = wrap || common.appendTo(common.createElement('div', { 'class': 'fp-captions' }), common.find('.fp-player', root)[0]);\r\n Array.prototype.forEach.call(wrap.children, common.removeNode);\r\n createSubtitleControl();\r\n };\r\n\r\n\r\n p.on('ready', function (ev, player, video) {\r\n var conf = player.conf;\r\n if (flowplayer.support.subtitles && conf.nativesubtitles && player.engine.engineName == 'html5') return;\r\n\r\n player.subtitles = [];\r\n\r\n createUIElements();\r\n\r\n common.removeClass(root, 'has-menu');\r\n\r\n p.disableSubtitles();\r\n\r\n common.toggleClass(subtitleControl, 'fp-hidden', !video.subtitles || !video.subtitles.length);\r\n if (!video.subtitles || !video.subtitles.length) return;\r\n\r\n var defaultSubtitle = video.subtitles.filter(function (one) {\r\n return one['default'];\r\n })[0];\r\n if (defaultSubtitle) player.loadSubtitles(video.subtitles.indexOf(defaultSubtitle));\r\n });\r\n\r\n p.bind(\"cuepoint\", function (e, api, cue) {\r\n if (cue.subtitle) {\r\n currentPoint = cue.index;\r\n common.html(wrap, cue.subtitle.text);\r\n common.addClass(wrap, 'fp-shown');\r\n } else if (cue.subtitleEnd) {\r\n common.removeClass(wrap, 'fp-shown');\r\n currentPoint = cue.index;\r\n }\r\n });\r\n\r\n p.bind(\"seek\", function (e, api, time) {\r\n // Clear future subtitles if seeking backwards\r\n if (currentPoint && p.cuepoints[currentPoint] && p.cuepoints[currentPoint].time > time) {\r\n common.removeClass(wrap, 'fp-shown');\r\n currentPoint = null;\r\n }\r\n (p.cuepoints || []).forEach(function (cue) {\r\n var entry = cue.subtitle;\r\n //Trigger cuepoint if start time before seek position and end time nonexistent or in the future\r\n if (entry && currentPoint != cue.index) {\r\n if (time >= cue.time && (!entry.endTime || time <= entry.endTime)) p.trigger(\"cuepoint\", [p, cue]);\r\n } // Also handle cuepoints that act as the removal trigger\r\n else if (cue.subtitleEnd && time >= cue.time && cue.index == currentPoint + 1) p.trigger(\"cuepoint\", [p, cue]);\r\n });\r\n\r\n });\r\n\r\n p.on('unload', function () {\r\n common.find('.fp-captions', root).forEach(common.removeNode);\r\n });\r\n\r\n var setActiveSubtitleClass = function (idx) {\r\n common.toggleClass(common.find('a.fp-selected', subtitleMenu)[0], 'fp-selected');\r\n common.toggleClass(common.find('a[data-subtitle-index=\"' + idx + '\"]', subtitleMenu)[0], 'fp-selected');\r\n };\r\n\r\n p.disableSubtitles = function () {\r\n p.subtitles = [];\r\n (p.cuepoints || []).forEach(function (c) {\r\n if (c.subtitle || c.subtitleEnd) p.removeCuepoint(c);\r\n });\r\n if (wrap) Array.prototype.forEach.call(wrap.children, common.removeNode);\r\n setActiveSubtitleClass(-1);\r\n return p;\r\n };\r\n\r\n p.loadSubtitles = function (i) {\r\n //First remove possible old subtitles\r\n p.disableSubtitles();\r\n\r\n var st = p.video.subtitles[i];\r\n\r\n var url = st.src;\r\n if (!url) return;\r\n setActiveSubtitleClass(i);\r\n common.xhrGet(url, function (txt) {\r\n var entries = p.conf.subtitleParser(txt);\r\n entries.forEach(function (entry) {\r\n var cue = { time: entry.startTime, subtitle: entry, visible: false };\r\n p.subtitles.push(entry);\r\n p.addCuepoint(cue);\r\n p.addCuepoint({ time: entry.endTime, subtitleEnd: entry.title, visible: false });\r\n\r\n // initial cuepoint\r\n if (entry.startTime === 0 && !p.video.time && !p.splash) {\r\n p.trigger(\"cuepoint\", [p, cue]);\r\n }\r\n if (p.splash) p.one('ready', function () { p.trigger('cuepoint', [p, cue]); });\r\n });\r\n }, function () {\r\n p.trigger(\"error\", { code: 8, url: url });\r\n return false;\r\n });\r\n return p;\r\n };\r\n });\r\n\r\n\r\n }, { \"../common\": 1, \"../flowplayer\": 28, \"bean\": 31 }], 22: [function (_dereq_, module, exports) {\r\n 'use strict';\r\n /* global ActiveXObject */\r\n var flowplayer = _dereq_('../flowplayer'),\r\n extend = _dereq_('extend-object');\r\n (function () {\r\n\r\n var parseIOSVersion = function (UA) {\r\n var e = /iP(ad|hone)(; CPU)? OS (\\d+_\\d)/.exec(UA);\r\n if (e && e.length > 1) {\r\n return parseFloat(e[e.length - 1].replace('_', '.'), 10);\r\n }\r\n return 0;\r\n };\r\n\r\n var createVideoTag = function () {\r\n var videoTag = document.createElement('video');\r\n videoTag.loop = true;\r\n videoTag.autoplay = true;\r\n videoTag.preload = true;\r\n return videoTag;\r\n };\r\n\r\n var b = {},\r\n d = document.documentElement.style,\r\n ua = navigator.userAgent.toLowerCase(),\r\n match = /(chrome)[ \\/]([\\w.]+)/.exec(ua) ||\r\n /(safari)[ \\/]([\\w.]+)/.exec(ua) ||\r\n /(webkit)[ \\/]([\\w.]+)/.exec(ua) ||\r\n /(opera)(?:.*version|)[ \\/]([\\w.]+)/.exec(ua) ||\r\n /(msie) ([\\w.]+)/.exec(ua) ||\r\n ua.indexOf(\"compatible\") < 0 && /(mozilla)(?:.*? rv:([\\w.]+)|)/.exec(ua) || [];\r\n\r\n if (match[1]) {\r\n b[match[1]] = true;\r\n b.version = match[2] || \"0\";\r\n }\r\n\r\n var video = createVideoTag(),\r\n UA = navigator.userAgent,\r\n IS_IE = b.msie || /Trident\\/7/.test(UA),\r\n IS_IPAD = /iPad|MeeGo/.test(UA) && !/CriOS/.test(UA),\r\n IS_IPAD_CHROME = /iPad/.test(UA) && /CriOS/.test(UA),\r\n IS_IPHONE = /iP(hone|od)/i.test(UA) && !/iPad/.test(UA) && !/IEMobile/i.test(UA),\r\n IS_ANDROID = /Android/.test(UA) && !/Firefox/.test(UA),\r\n IS_ANDROID_FIREFOX = /Android/.test(UA) && /Firefox/.test(UA),\r\n IS_SILK = /Silk/.test(UA),\r\n IS_WP = /IEMobile/.test(UA),\r\n WP_VER = IS_WP ? parseFloat(/Windows\\ Phone\\ (\\d+\\.\\d+)/.exec(UA)[1], 10) : 0,\r\n IE_MOBILE_VER = IS_WP ? parseFloat(/IEMobile\\/(\\d+\\.\\d+)/.exec(UA)[1], 10) : 0,\r\n IOS_VER = IS_IPAD || IS_IPHONE ? parseIOSVersion(UA) : 0,\r\n ANDROID_VER = IS_ANDROID ? parseFloat(/Android\\ (\\d\\.\\d)/.exec(UA)[1], 10) : 0,\r\n s = extend(flowplayer.support, {\r\n\r\n browser: b,\r\n iOS: {\r\n iPhone: IS_IPHONE,\r\n iPad: IS_IPAD || IS_IPAD_CHROME,\r\n version: IOS_VER,\r\n chrome: IS_IPAD_CHROME\r\n },\r\n android: IS_ANDROID ? {\r\n firefox: IS_ANDROID_FIREFOX,\r\n version: ANDROID_VER\r\n } : false,\r\n subtitles: !!video.addTextTrack,\r\n fullscreen: typeof document.webkitFullscreenEnabled === 'boolean' ? document.webkitFullscreenEnabled : (typeof document.webkitCancelFullScreen == 'function' && !/Mac OS X 10_5.+Version\\/5\\.0\\.\\d Safari/.test(UA)) ||\r\n document.mozFullScreenEnabled ||\r\n typeof document.exitFullscreen == 'function' ||\r\n typeof document.msExitFullscreen == 'function',\r\n inlineBlock: !(IS_IE && b.version < 8),\r\n touch: ('ontouchstart' in window),\r\n dataload: !IS_IPAD && !IS_IPHONE && !IS_WP,\r\n flex: ('flexWrap' in d) || ('WebkitFlexWrap' in d) || ('msFlexWrap' in d),\r\n svg: !!document.createElementNS && !!document.createElementNS('http://www.w3.org/2000/svg', \"svg\").createSVGRect,\r\n zeropreload: !IS_IE && !IS_ANDROID, // IE supports only preload=metadata\r\n volume: !IS_IPAD && !IS_IPHONE && !IS_SILK && !IS_IPAD_CHROME,\r\n cachedVideoTag: !IS_IPAD && !IS_IPHONE && !IS_IPAD_CHROME && !IS_WP,\r\n firstframe: !IS_IPHONE && !IS_IPAD && !IS_ANDROID && !IS_SILK && !IS_IPAD_CHROME && !IS_WP && !IS_ANDROID_FIREFOX,\r\n inlineVideo: (!IS_IPHONE || IOS_VER >= 10) && (!IS_WP || (WP_VER >= 8.1 && IE_MOBILE_VER >= 11)) && (!IS_ANDROID || ANDROID_VER >= 3),\r\n hlsDuration: !IS_ANDROID && (!b.safari || IS_IPAD || IS_IPHONE || IS_IPAD_CHROME),\r\n seekable: !IS_IPAD && !IS_IPAD_CHROME\r\n });\r\n s.autoplay = s.firstframe;\r\n // flashVideo\r\n try {\r\n var plugin = navigator.plugins[\"Shockwave Flash\"],\r\n ver = IS_IE ? new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash\").GetVariable('$version') : plugin.description;\r\n if (!IS_IE && !plugin[0].enabledPlugin) s.flashVideo = false;\r\n else {\r\n\r\n ver = ver.split(/\\D+/);\r\n if (ver.length && !ver[0]) ver = ver.slice(1);\r\n\r\n s.flashVideo = ver[0] > 9 || ver[0] == 9 && ver[3] >= 115;\r\n }\r\n\r\n } catch (ignored) { }\r\n try {\r\n s.video = !!video.canPlayType;\r\n if (s.video) video.canPlayType('video/mp4');\r\n } catch (e) {\r\n s.video = false;\r\n }\r\n\r\n // animation\r\n s.animation = (function () {\r\n var vendors = ['', 'Webkit', 'Moz', 'O', 'ms', 'Khtml'], el = document.createElement('p');\r\n\r\n for (var i = 0; i < vendors.length; i++) {\r\n if (typeof el.style[vendors[i] + 'AnimationName'] !== 'undefined') return true;\r\n }\r\n })();\r\n\r\n\r\n\r\n })();\r\n\r\n\r\n }, { \"../flowplayer\": 28, \"extend-object\": 36 }], 23: [function (_dereq_, module, exports) {\r\n 'use strict';\r\n\r\n var flowplayer = _dereq_('../flowplayer')\r\n , common = _dereq_('../common')\r\n , bean = _dereq_('bean');\r\n\r\n flowplayer(function (api, root) {\r\n var c = api.conf;\r\n\r\n if (c.share === false || c.twitter === false) return;\r\n\r\n\r\n // https://dev.twitter.com/web/intents\r\n api.tweet = function () {\r\n var left\r\n , top\r\n , width = 550\r\n , height = 420\r\n , winHeight = screen.height\r\n , winWidth = screen.width\r\n , windowOptions = 'scrollbars=yes,resizable=yes,toolbar=no,location=yes'\r\n , shareUrl = typeof c.twitter === 'string' ? c.twitter : api.shareUrl();\r\n left = Math.round((winWidth / 2) - (width / 2));\r\n top = 0;\r\n if (winHeight > height) {\r\n top = Math.round((winHeight / 2) - (height / 2));\r\n }\r\n window.open(\r\n 'https://twitter.com/intent/tweet?url=' + encodeURIComponent(shareUrl),\r\n 'intent',\r\n windowOptions + ',width=' + width + ',height=' + height + ',left=' + left + ',top=' + top\r\n );\r\n };\r\n\r\n var btnContainer = common.find('.fp-share-menu', root)[0]\r\n , trigger = common.createElement('a', { \"class\": \"fp-icon fp-twitter\" }, 'Twitter');\r\n\r\n common.append(btnContainer, trigger);\r\n\r\n bean.on(root, 'click', '.fp-twitter', function () {\r\n api.tweet();\r\n });\r\n });\r\n\r\n }, { \"../common\": 1, \"../flowplayer\": 28, \"bean\": 31 }], 24: [function (_dereq_, module, exports) {\r\n (function (Buffer) {\r\n 'use strict';\r\n var flowplayer = _dereq_('../flowplayer'),\r\n common = _dereq_('../common'),\r\n bean = _dereq_('bean'),\r\n slider = _dereq_('./ui/slider'),\r\n barSlider = _dereq_('./ui/bar-slider');\r\n\r\n function zeropad(val) {\r\n val = parseInt(val, 10);\r\n return val >= 10 ? val : \"0\" + val;\r\n }\r\n\r\n // display seconds in hh:mm:ss format\r\n function format(sec, remaining) {\r\n\r\n sec = Math.max(sec || 0, 0);\r\n sec = remaining ? Math.ceil(sec) : Math.floor(sec);\r\n\r\n var h = Math.floor(sec / 3600),\r\n min = Math.floor(sec / 60);\r\n\r\n sec = sec - (min * 60);\r\n\r\n if (h >= 1) {\r\n min -= h * 60;\r\n return h + \":\" + zeropad(min) + \":\" + zeropad(sec);\r\n }\r\n\r\n return zeropad(min) + \":\" + zeropad(sec);\r\n }\r\n\r\n var PLAY_ROUNDED_OUTLINE = Buffer(\"PHN2ZyBjbGFzcz0iZnAtcGxheS1yb3VuZGVkLW91dGxpbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDk5Ljg0NCA5OS44NDM0Ij48ZGVmcz48c3R5bGU+LmZwLWNvbG9yLXBsYXl7b3BhY2l0eTowLjY1O30uY29udHJvbGJ1dHRvbntmaWxsOiNmZmY7fTwvc3R5bGU+CjwvZGVmcz4KPHRpdGxlPnBsYXktcm91bmRlZC1vdXRsaW5lPC90aXRsZT48cGF0aCBjbGFzcz0iZnAtY29sb3ItcGxheSIgZD0iTTQ5LjkyMTctLjA3OGE1MCw1MCwwLDEsMCw1MCw1MEE1MC4wNTY0LDUwLjA1NjQsMCwwLDAsNDkuOTIxNy0uMDc4WiIvPjxwYXRoIGNsYXNzPSJjb250cm9sYnV0dG9uIiBkPSJNNDEuMDM1OSw3MS4xOWE1LjA0OTIsNS4wNDkyLDAsMCwxLTIuNTU3NS0uNjY3M2MtMS44MDMxLTEuMDQxLTIuNzk1OC0zLjEyNDgtMi43OTU4LTUuODY2NFYzNS4xODg3YzAtMi43NDI5Ljk5MzMtNC44MjcyLDIuNzk3LTUuODY3NiwxLjgwMjUtMS4wNDIyLDQuMTAzNC0uODYsNi40OC41MTQzTDcwLjQ3ODIsNDQuNTY3MmMyLjM3NTEsMS4zNzExLDMuNjgyNiwzLjI3MjUsMy42ODMyLDUuMzU0NXMtMS4zMDc2LDMuOTg0NS0zLjY4MzIsNS4zNTYyTDQ0Ljk1OTIsNzAuMDExNEE3LjkzODQsNy45Mzg0LDAsMCwxLDQxLjAzNTksNzEuMTlabS4wMDY1LTQwLjEyM2EyLjY3OTQsMi42Nzk0LDAsMCwwLTEuMzU4Mi4zNDEzYy0xLjAyNjMuNTkyNi0xLjU5MTIsMS45MzQ5LTEuNTkxMiwzLjc4VjY0LjY1NjNjMCwxLjg0NDkuNTY0OSwzLjE4NjYsMS41OTA2LDMuNzc5MSwxLjAyODEuNTkzMiwyLjQ3MzMuNDEwOCw0LjA3LS41MTJMNjkuMjczLDUzLjE5MDZjMS41OTgzLS45MjI3LDIuNDc4LTIuMDgzOCwyLjQ3OC0zLjI2ODlzLS44OC0yLjM0NDUtMi40NzgtMy4yNjY2TDQzLjc1NCwzMS45MjI3QTUuNTY4NSw1LjU2ODUsMCwwLDAsNDEuMDQyMywzMS4wNjcxWiIgZmlsdGVyPSJ1cmwoI2YxKSIvPjwvc3ZnPgo=\", \"base64\")\r\n , PLAY_ROUNDED_FILL = Buffer(\"PHN2ZyBjbGFzcz0iZnAtcGxheS1yb3VuZGVkLWZpbGwiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDEwMCAxMDAiPgogIDxkZWZzPjxzdHlsZT4uYXtmaWxsOiMwMDA7b3BhY2l0eTowLjY1O30uYntmaWxsOiNmZmY7b3BhY2l0eToxLjA7fTwvc3R5bGU+CiAgPC9kZWZzPjx0aXRsZT5wbGF5LXJvdW5kZWQtZmlsbDwvdGl0bGU+CiAgPHBhdGggY2xhc3M9ImZwLWNvbG9yLXBsYXkiIGQ9Ik00OS45MjE3LS4wNzhhNTAsNTAsMCwxLDAsNTAsNTBBNTAuMDU2NCw1MC4wNTY0LDAsMCwwLDQ5LjkyMTctLjA3OFoiLz4KICA8cGF0aCBjbGFzcz0iYiIgZD0iTTM1Ljk0MiwzNS4yMzIzYzAtNC43Mjg5LDMuMzUwNi02LjY2MzcsNy40NDYtNC4yOTcxTDY4LjgzLDQ1LjYyMzVjNC4wOTU2LDIuMzY0LDQuMDk1Niw2LjIzMTksMCw4LjU5NzdMNDMuMzg4LDY4LjkxYy00LjA5NTQsMi4zNjQtNy40NDYuNDMtNy40NDYtNC4yOTc5WiIgZmlsdGVyPSJ1cmwoI2YxKSIvPgogIDwvc3ZnPgogIAo=\", \"base64\")\r\n , PLAY_SHARP_FILL = Buffer(\"PHN2ZyBjbGFzcz0iZnAtcGxheS1zaGFycC1maWxsIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj4KICA8ZGVmcz4KICAgIDxzdHlsZT4uZnAtY29sb3ItcGxheXtvcGFjaXR5OjAuNjU7fS5jb250cm9sYnV0dG9ue2ZpbGw6I2ZmZjt9PC9zdHlsZT4KICA8L2RlZnM+CiAgPHRpdGxlPnBsYXktc2hhcnAtZmlsbDwvdGl0bGU+CiAgPHBhdGggY2xhc3M9ImZwLWNvbG9yLXBsYXkiIGQ9Ik00OS45MjE3LS4wNzhhNTAsNTAsMCwxLDAsNTAsNTBBNTAuMDU2NCw1MC4wNTY0LDAsMCwwLDQ5LjkyMTctLjA3OFoiLz4KICA8cG9seWdvbiBjbGFzcz0iY29udHJvbGJ1dHRvbiIgcG9pbnRzPSI3My42MDEgNTAgMzcuOTY4IDcwLjU3MyAzNy45NjggMjkuNDI3IDczLjYwMSA1MCIgZmlsdGVyPSJ1cmwoI2YxKSIvPgo8L3N2Zz4K\", \"base64\")\r\n , PLAY_SHARP_OUTLINE = Buffer(\"PHN2ZyBjbGFzcz0iZnAtcGxheS1zaGFycC1vdXRsaW5lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA5OS44NDQgOTkuODQzNCI+PGRlZnM+PHN0eWxlPi5jb250cm9sYnV0dG9uYmd7b3BhY2l0eTowLjY1O30uY29udHJvbGJ1dHRvbntmaWxsOiNmZmY7fTwvc3R5bGU+CjwvZGVmcz48dGl0bGU+cGxheS1zaGFycC1vdXRsaW5lPC90aXRsZT48cGF0aCBjbGFzcz0iZnAtY29sb3ItcGxheSIgZD0iTTQ5LjkyMTctLjA3OGE1MCw1MCwwLDEsMCw1MCw1MEE1MC4wNTY0LDUwLjA1NjQsMCwwLDAsNDkuOTIxNy0uMDc4WiIvPjxwYXRoIGNsYXNzPSJjb250cm9sYnV0dG9uIiBkPSJNMzYuOTQ0Myw3Mi4yNDczVjI3LjI5MTZMNzUuODc3Niw0OS43N1ptMi4yLTQxLjE0NTVWNjguNDM3MUw3MS40Nzc2LDQ5Ljc3WiIgZmlsdGVyPSJ1cmwoI2YxKSIvPjwvc3ZnPgo=\", \"base64\")\r\n , PAUSE_ROUNDED_OUTLINE = Buffer(\"PHN2ZyBjbGFzcz0iZnAtcGF1c2Utcm91bmRlZC1vdXRsaW5lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA5OS44NDM0IDk5Ljg0MzQiPjxkZWZzPjxzdHlsZT4uZnAtY29sb3ItcGxheXtvcGFjaXR5OjAuNjU7fS5yZWN0e2ZpbGw6I2ZmZjt9PC9zdHlsZT4KPC9kZWZzPjx0aXRsZT5wYXVzZS1yb3VuZGVkLW91dGxpbmU8L3RpdGxlPjxwYXRoIGNsYXNzPSJmcC1jb2xvci1wbGF5IiBkPSJNNDkuOTIxMi0uMDc4M2E1MCw1MCwwLDEsMCw1MC4wMDA2LDUwQTUwLjA1NjIsNTAuMDU2MiwwLDAsMCw0OS45MjEyLS4wNzgzWiIvPjxnIGNsYXNzPSJjb250cm9sYnV0dG9uIj48cGF0aCBjbGFzcz0icmVjdCIgZD0iTTM5LjAwMzYsNzEuOTcyNmE3LjU2NSw3LjU2NSwwLDAsMS03LjU1Ny03LjU1NnYtMjguOTlhNy41NTY1LDcuNTU2NSwwLDAsMSwxNS4xMTMsMHYyOC45OUE3LjU2NDgsNy41NjQ4LDAsMCwxLDM5LjAwMzYsNzEuOTcyNlptMC00MS45MDRhNS4zNjQ3LDUuMzY0NywwLDAsMC01LjM1OTMsNS4zNTgydjI4Ljk5YTUuMzU4Nyw1LjM1ODcsMCwwLDAsMTAuNzE3NCwwdi0yOC45OUE1LjM2NDUsNS4zNjQ1LDAsMCwwLDM5LjAwMzYsMzAuMDY4NloiIGZpbHRlcj0idXJsKCNmMSkiLz48cGF0aCBjbGFzcz0icmVjdCIgZD0iTTYwLjg0LDcxLjk3MjZhNy41NjQ4LDcuNTY0OCwwLDAsMS03LjU1Ni03LjU1NnYtMjguOTlhNy41NTY1LDcuNTU2NSwwLDAsMSwxNS4xMTMsMHYyOC45OUE3LjU2NSw3LjU2NSwwLDAsMSw2MC44NCw3MS45NzI2Wm0wLTQxLjkwNGE1LjM2NDUsNS4zNjQ1LDAsMCwwLTUuMzU4Miw1LjM1ODJ2MjguOTlhNS4zNTg3LDUuMzU4NywwLDAsMCwxMC43MTc0LDB2LTI4Ljk5QTUuMzY0Nyw1LjM2NDcsMCwwLDAsNjAuODQsMzAuMDY4NloiIGZpbHRlcj0idXJsKCNmMSkiLz48L2c+PC9zdmc+Cg==\", \"base64\")\r\n , PAUSE_ROUNDED_FILL = Buffer(\"PHN2ZyBjbGFzcz0iZnAtcGF1c2Utcm91bmRlZC1maWxsIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj48ZGVmcz48c3R5bGU+LmZwLWNvbG9yLXBsYXl7b3BhY2l0eTowLjY1O30ucmVjdHtmaWxsOiNmZmY7fTwvc3R5bGU+CjwvZGVmcz48dGl0bGU+cGF1c2Utcm91bmRlZC1maWxsPC90aXRsZT48cGF0aCBjbGFzcz0iZnAtY29sb3ItcGxheSIgZD0iTTQ5LjkyMTctLjA3OGE1MCw1MCwwLDEsMCw1MCw1MEE1MC4wNTY0LDUwLjA1NjQsMCwwLDAsNDkuOTIxNy0uMDc4WiIvPjxnIGNsYXNzPSJjb250cm9sYnV0dG9uIiBmaWx0ZXI9InVybCgjZjEpIj48cmVjdCBjbGFzcz0icmVjdCIgeD0iMzEuODQ0IiB5PSIyOC4xMjMxIiB3aWR0aD0iMTMuNDM2MiIgaGVpZ2h0PSI0My41OTczIiByeD0iNi43MTgxIiByeT0iNi43MTgxIi8+PHJlY3QgY2xhc3M9InJlY3QiIHg9IjU0LjU2MzgiIHk9IjI4LjEyMzEiIHdpZHRoPSIxMy40MzYyIiBoZWlnaHQ9IjQzLjU5NzMiIHJ4PSI2LjcxODEiIHJ5PSI2LjcxODEiLz48L2c+PC9zdmc+Cg==\", \"base64\")\r\n , PAUSE_SHARP_FILL = Buffer(\"PHN2ZyBjbGFzcz0iZnAtcGF1c2Utc2hhcnAtZmlsbCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+PGRlZnM+PHN0eWxlPi5mcC1jb2xvci1wbGF5e29wYWNpdHk6MC42NTt9LnJlY3R7ZmlsbDojZmZmO308L3N0eWxlPgo8L2RlZnM+PHRpdGxlPnBhdXNlLXNoYXJwLWZpbGw8L3RpdGxlPjxwYXRoIGNsYXNzPSJmcC1jb2xvci1wbGF5IiBkPSJNNDkuOTIxNy0uMDc4YTUwLDUwLDAsMSwwLDUwLDUwQTUwLjA1NjQsNTAuMDU2NCwwLDAsMCw0OS45MjE3LS4wNzhaIi8+PGcgY2xhc3M9ImNvbnRyb2xidXR0b24iIGZpbHRlcj0idXJsKCNmMSkiPjxyZWN0IGNsYXNzPSJyZWN0IiB4PSIzMy41IiB5PSIzMC4xMDQyIiB3aWR0aD0iMTIuMjYzNCIgaGVpZ2h0PSIzOS43OTE3Ii8+PHJlY3QgY2xhc3M9InJlY3QiIHg9IjU0LjIzNjYiIHk9IjMwLjEwNDIiIHdpZHRoPSIxMi4yNjM0IiBoZWlnaHQ9IjM5Ljc5MTciLz48L2c+PC9zdmc+Cg==\", \"base64\")\r\n , PAUSE_SHARP_OUTLINE = Buffer(\"PHN2ZyBjbGFzcz0iZnAtcGF1c2Utc2hhcnAtb3V0bGluZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgOTkuODQzNCA5OS44NDM0Ij48ZGVmcz48c3R5bGU+LmZwLWNvbG9yLXBsYXl7b3BhY2l0eTowLjY1O30ucmVjdHtmaWxsOiNmZmY7fTwvc3R5bGU+CjwvZGVmcz48dGl0bGU+cGF1c2Utc2hhcnAtb3V0bGluZTwvdGl0bGU+PHBhdGggY2xhc3M9ImZwLWNvbG9yLXBsYXkiIGQ9Ik00OS45MjEyLS4wNzgzYTUwLDUwLDAsMSwwLDUwLjAwMDYsNTBBNTAuMDU2Miw1MC4wNTYyLDAsMCwwLDQ5LjkyMTItLjA3ODNaIi8+PGcgY2xhc3M9ImNvbnRyb2xidXR0b24iIGZpbHRlcj0idXJsKCNmMSkiPjxwYXRoIGNsYXNzPSJyZWN0IiBkPSJNNDYuODcwOSw2OS45NTMxSDMzLjEzODVWMjkuODlINDYuODcwOVpNMzUuMTQxNiw2Ny45NWg5LjcyNjJWMzEuODkzNUgzNS4xNDE2WiIvPjxwYXRoIGNsYXNzPSJyZWN0IiBkPSJNNjYuNzA0Nyw2OS45NTMxSDUyLjk3MjJWMjkuODlINjYuNzA0N1pNNTQuOTc1NCw2Ny45NWg5LjcyNjJWMzEuODkzNUg1NC45NzU0WiIvPjwvZz48L3N2Zz4K\", \"base64\");\r\n\r\n var LOADING_ROUNDED_OUTLINE = Buffer(\"PHN2ZyBjbGFzcz0iZnAtbG9hZGluZy1yb3VuZGVkLW91dGxpbmUiIHdpZHRoPScxMTJweCcgaGVpZ2h0PScxMTJweCcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQiPgogICAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9Ijc2IiBoZWlnaHQ9Ijc2IiBmaWxsPSJyZ2JhKDAsMCwwLDApIiBjbGFzcz0iYmsiPjwvcmVjdD4KICAgIDxjaXJjbGUgY3g9IjAiIGN5PSIwIiByPSIxMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjUgMjUpIiBmaWxsPSJub25lIiBzdHJva2U9InJnYmEoMCwwLDAsLjUpIiBzdHJva2Utd2lkdGg9IjMlIiBjbGFzcz0ic3EiPgogICAgICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJzdHJva2UiIGZyb209InJnYmEoMCwwLDAsMCkiIHRvPSJyZ2JhKDAsMCwwLC41KSIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIGR1cj0iMS42cyIgYmVnaW49IjAuMHMiIHZhbHVlcz0icmdiYSgwLDAsMCwuNSk7cmdiYSgwLDAsMCwwKTtyZ2JhKDAsMCwwLDApO3JnYmEoMCwwLDAsLjUpO3JnYmEoMCwwLDAsLjUpIiBrZXlUaW1lcz0iMDswLjE7MC4yOzAuNDsxIj48L2FuaW1hdGU+CiAgICAgIDxhbmltYXRlVHJhbnNmb3JtIGF0dHJpYnV0ZU5hbWU9InRyYW5zZm9ybSIgdHlwZT0ic2NhbGUiIGFkZGl0aXZlPSJzdW0iIGZyb209IjAuOCIgdG89IjEiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiBiZWdpbj0iMC4wcyIgZHVyPSIxLjZzIiB2YWx1ZXM9IjE7MC44OzAuODsxOzEiIGtleVRpbWVzPSIwOzAuMTswLjI7MC40OzEiPjwvYW5pbWF0ZVRyYW5zZm9ybT4KICAgIDwvY2lyY2xlPgogICAgPGNpcmNsZSBjeD0iMCIgY3k9IjAiIHI9IjEwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1MCAyNSkiIGZpbGw9Im5vbmUiIHN0cm9rZT0icmdiYSgwLDAsMCwuNSkiIHN0cm9rZS13aWR0aD0iMyUiIGNsYXNzPSJzcSI+CiAgICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9InN0cm9rZSIgZnJvbT0icmdiYSgwLDAsMCwwKSIgdG89InJnYmEoMCwwLDAsLjUpIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgZHVyPSIxLjZzIiBiZWdpbj0iMC40cyIgdmFsdWVzPSJyZ2JhKDAsMCwwLC41KTtyZ2JhKDAsMCwwLDApO3JnYmEoMCwwLDAsMCk7cmdiYSgwLDAsMCwuNSk7cmdiYSgwLDAsMCwuNSkiIGtleVRpbWVzPSIwOzAuMTswLjI7MC40OzEiPjwvYW5pbWF0ZT4KICAgICAgPGFuaW1hdGVUcmFuc2Zvcm0gYXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIiB0eXBlPSJzY2FsZSIgYWRkaXRpdmU9InN1bSIgZnJvbT0iMC44IiB0bz0iMSIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIGJlZ2luPSIwLjRzIiBkdXI9IjEuNnMiIHZhbHVlcz0iMTswLjg7MC44OzE7MSIga2V5VGltZXM9IjA7MC4xOzAuMjswLjQ7MSI+PC9hbmltYXRlVHJhbnNmb3JtPgogICAgPC9jaXJjbGU+CiAgICA8Y2lyY2xlIGN4PSIwIiBjeT0iMCIgcj0iMTAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDUwIDUwKSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJyZ2JhKDAsMCwwLC41KSIgc3Ryb2tlLXdpZHRoPSIzJSIgY2xhc3M9InNxIj4KICAgICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0ic3Ryb2tlIiBmcm9tPSJyZ2JhKDAsMCwwLDApIiB0bz0icmdiYSgwLDAsMCwuNSkiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiBkdXI9IjEuNnMiIGJlZ2luPSIwLjhzIiB2YWx1ZXM9InJnYmEoMCwwLDAsLjUpO3JnYmEoMCwwLDAsMCk7cmdiYSgwLDAsMCwwKTtyZ2JhKDAsMCwwLC41KTtyZ2JhKDAsMCwwLC41KSIga2V5VGltZXM9IjA7MC4xOzAuMjswLjQ7MSI+PC9hbmltYXRlPgogICAgICA8YW5pbWF0ZVRyYW5zZm9ybSBhdHRyaWJ1dGVOYW1lPSJ0cmFuc2Zvcm0iIHR5cGU9InNjYWxlIiBhZGRpdGl2ZT0ic3VtIiBmcm9tPSIwLjgiIHRvPSIxIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgYmVnaW49IjAuOHMiIGR1cj0iMS42cyIgdmFsdWVzPSIxOzAuODswLjg7MTsxIiBrZXlUaW1lcz0iMDswLjE7MC4yOzAuNDsxIj48L2FuaW1hdGVUcmFuc2Zvcm0+CiAgICA8L2NpcmNsZT4KICAgIDxjaXJjbGUgY3g9IjAiIGN5PSIwIiByPSIxMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjUgNTApIiBmaWxsPSJub25lIiBzdHJva2U9InJnYmEoMCwwLDAsLjUpIiBzdHJva2Utd2lkdGg9IjMlIiBjbGFzcz0ic3EiPgogICAgICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJzdHJva2UiIGZyb209InJnYmEoMCwwLDAsMCkiIHRvPSJyZ2JhKDAsMCwwLC41KSIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIGR1cj0iMS42cyIgYmVnaW49IjEuMnMiIHZhbHVlcz0icmdiYSgwLDAsMCwuNSk7cmdiYSgwLDAsMCwwKTtyZ2JhKDAsMCwwLDApO3JnYmEoMCwwLDAsLjUpO3JnYmEoMCwwLDAsLjUpIiBrZXlUaW1lcz0iMDswLjE7MC4yOzAuNDsxIj48L2FuaW1hdGU+CiAgICAgIDxhbmltYXRlVHJhbnNmb3JtIGF0dHJpYnV0ZU5hbWU9InRyYW5zZm9ybSIgdHlwZT0ic2NhbGUiIGFkZGl0aXZlPSJzdW0iIGZyb209IjAuOCIgdG89IjEiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiBiZWdpbj0iMS4ycyIgZHVyPSIxLjZzIiB2YWx1ZXM9IjE7MC44OzAuODsxOzEiIGtleVRpbWVzPSIwOzAuMTswLjI7MC40OzEiPjwvYW5pbWF0ZVRyYW5zZm9ybT4KICAgIDwvY2lyY2xlPgo8L3N2Zz4K\", \"base64\")\r\n , LOADING_ROUNDED_FILL = Buffer(\"PHN2ZyBjbGFzcz0iZnAtbG9hZGluZy1yb3VuZGVkLWZpbGwiIHdpZHRoPScxMTJweCcgaGVpZ2h0PScxMTJweCcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQiPgogICAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9Ijc2IiBoZWlnaHQ9Ijc2IiBmaWxsPSJyZ2JhKDAsMCwwLDApIiBjbGFzcz0iYmsiPjwvcmVjdD4KICAgIDxjaXJjbGUgY3g9IjAiIGN5PSIwIiByPSIxMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjUgMjUpIiBmaWxsPSJyZ2JhKDAsMCwwLC41KSIgY2xhc3M9InNxIj4KICAgICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iZmlsbCIgZnJvbT0icmdiYSgwLDAsMCwwKSIgdG89InJnYmEoMCwwLDAsLjUpIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgZHVyPSIxLjZzIiBiZWdpbj0iMC4wcyIgdmFsdWVzPSJyZ2JhKDAsMCwwLC41KTtyZ2JhKDAsMCwwLDApO3JnYmEoMCwwLDAsMCk7cmdiYSgwLDAsMCwuNSk7cmdiYSgwLDAsMCwuNSkiIGtleVRpbWVzPSIwOzAuMTswLjI7MC40OzEiPjwvYW5pbWF0ZT4KICAgICAgPGFuaW1hdGVUcmFuc2Zvcm0gYXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIiB0eXBlPSJzY2FsZSIgYWRkaXRpdmU9InN1bSIgZnJvbT0iMC44IiB0bz0iMSIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIGJlZ2luPSIwLjBzIiBkdXI9IjEuNnMiIHZhbHVlcz0iMTswLjg7MC44OzE7MSIga2V5VGltZXM9IjA7MC4xOzAuMjswLjQ7MSI+PC9hbmltYXRlVHJhbnNmb3JtPgogICAgPC9jaXJjbGU+CiAgICA8Y2lyY2xlIGN4PSIwIiBjeT0iMCIgcj0iMTAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDUwIDI1KSIgZmlsbD0icmdiYSgwLDAsMCwuNSkiIGNsYXNzPSJzcSI+CiAgICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9ImZpbGwiIGZyb209InJnYmEoMCwwLDAsMCkiIHRvPSJyZ2JhKDAsMCwwLC41KSIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIGR1cj0iMS42cyIgYmVnaW49IjAuNHMiIHZhbHVlcz0icmdiYSgwLDAsMCwuNSk7cmdiYSgwLDAsMCwwKTtyZ2JhKDAsMCwwLDApO3JnYmEoMCwwLDAsLjUpO3JnYmEoMCwwLDAsLjUpIiBrZXlUaW1lcz0iMDswLjE7MC4yOzAuNDsxIj48L2FuaW1hdGU+CiAgICAgIDxhbmltYXRlVHJhbnNmb3JtIGF0dHJpYnV0ZU5hbWU9InRyYW5zZm9ybSIgdHlwZT0ic2NhbGUiIGFkZGl0aXZlPSJzdW0iIGZyb209IjAuOCIgdG89IjEiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiBiZWdpbj0iMC40cyIgZHVyPSIxLjZzIiB2YWx1ZXM9IjE7MC44OzAuODsxOzEiIGtleVRpbWVzPSIwOzAuMTswLjI7MC40OzEiPjwvYW5pbWF0ZVRyYW5zZm9ybT4KICAgIDwvY2lyY2xlPgogICAgPGNpcmNsZSBjeD0iMCIgY3k9IjAiIHI9IjEwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1MCA1MCkiIGZpbGw9InJnYmEoMCwwLDAsLjUpIiBjbGFzcz0ic3EiPgogICAgICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJmaWxsIiBmcm9tPSJyZ2JhKDAsMCwwLDApIiB0bz0icmdiYSgwLDAsMCwuNSkiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiBkdXI9IjEuNnMiIGJlZ2luPSIwLjhzIiB2YWx1ZXM9InJnYmEoMCwwLDAsLjUpO3JnYmEoMCwwLDAsMCk7cmdiYSgwLDAsMCwwKTtyZ2JhKDAsMCwwLC41KTtyZ2JhKDAsMCwwLC41KSIga2V5VGltZXM9IjA7MC4xOzAuMjswLjQ7MSI+PC9hbmltYXRlPgogICAgICA8YW5pbWF0ZVRyYW5zZm9ybSBhdHRyaWJ1dGVOYW1lPSJ0cmFuc2Zvcm0iIHR5cGU9InNjYWxlIiBhZGRpdGl2ZT0ic3VtIiBmcm9tPSIwLjgiIHRvPSIxIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgYmVnaW49IjAuOHMiIGR1cj0iMS42cyIgdmFsdWVzPSIxOzAuODswLjg7MTsxIiBrZXlUaW1lcz0iMDswLjE7MC4yOzAuNDsxIj48L2FuaW1hdGVUcmFuc2Zvcm0+CiAgICA8L2NpcmNsZT4KICAgIDxjaXJjbGUgY3g9IjAiIGN5PSIwIiByPSIxMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjUgNTApIiBmaWxsPSJyZ2JhKDAsMCwwLC41KSIgY2xhc3M9InNxIj4KICAgICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iZmlsbCIgZnJvbT0icmdiYSgwLDAsMCwwKSIgdG89InJnYmEoMCwwLDAsLjUpIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgZHVyPSIxLjZzIiBiZWdpbj0iMS4ycyIgdmFsdWVzPSJyZ2JhKDAsMCwwLC41KTtyZ2JhKDAsMCwwLDApO3JnYmEoMCwwLDAsMCk7cmdiYSgwLDAsMCwuNSk7cmdiYSgwLDAsMCwuNSkiIGtleVRpbWVzPSIwOzAuMTswLjI7MC40OzEiPjwvYW5pbWF0ZT4KICAgICAgPGFuaW1hdGVUcmFuc2Zvcm0gYXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIiB0eXBlPSJzY2FsZSIgYWRkaXRpdmU9InN1bSIgZnJvbT0iMC44IiB0bz0iMSIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIGJlZ2luPSIxLjJzIiBkdXI9IjEuNnMiIHZhbHVlcz0iMTswLjg7MC44OzE7MSIga2V5VGltZXM9IjA7MC4xOzAuMjswLjQ7MSI+PC9hbmltYXRlVHJhbnNmb3JtPgogICAgPC9jaXJjbGU+Cjwvc3ZnPgo=\", \"base64\")\r\n , LOADING_SHARP_FILL = Buffer(\"PHN2ZyBjbGFzcz0iZnAtbG9hZGluZy1zaGFycC1maWxsIiB3aWR0aD0nMTEycHgnIGhlaWdodD0nMTEycHgnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDEwMCAxMDAiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIj4KICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iNzYiIGhlaWdodD0iNzYiIGZpbGw9InJnYmEoMCwwLDAsMCkiIGNsYXNzPSJiayI+PC9yZWN0PgogIDxyZWN0IHg9Ii0xMCIgeT0iLTEwIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI1IDI1KSIgZmlsbD0icmdiYSgwLDAsMCwuNSkiIGNsYXNzPSJzcSI+CiAgICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJmaWxsIiBmcm9tPSJyZ2JhKDAsMCwwLDApIiB0bz0icmdiYSgwLDAsMCwuNSkiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiBkdXI9IjEuNnMiIGJlZ2luPSIwLjBzIiB2YWx1ZXM9InJnYmEoMCwwLDAsLjUpO3JnYmEoMCwwLDAsMCk7cmdiYSgwLDAsMCwwKTtyZ2JhKDAsMCwwLC41KTtyZ2JhKDAsMCwwLC41KSIga2V5VGltZXM9IjA7MC4xOzAuMjswLjQ7MSI+PC9hbmltYXRlPgogICAgPGFuaW1hdGVUcmFuc2Zvcm0gYXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIiB0eXBlPSJzY2FsZSIgYWRkaXRpdmU9InN1bSIgZnJvbT0iMC44IiB0bz0iMSIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIGJlZ2luPSIwLjBzIiBkdXI9IjEuNnMiIHZhbHVlcz0iMTswLjg7MC44OzE7MSIga2V5VGltZXM9IjA7MC4xOzAuMjswLjQ7MSI+PC9hbmltYXRlVHJhbnNmb3JtPgogIDwvcmVjdD4KICA8cmVjdCB4PSItMTAiIHk9Ii0xMCIgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1MCAyNSkiIGZpbGw9InJnYmEoMCwwLDAsLjUpIiBjbGFzcz0ic3EiPgogICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0iZmlsbCIgZnJvbT0icmdiYSgwLDAsMCwwKSIgdG89InJnYmEoMCwwLDAsLjUpIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgZHVyPSIxLjZzIiBiZWdpbj0iMC40cyIgdmFsdWVzPSJyZ2JhKDAsMCwwLC41KTtyZ2JhKDAsMCwwLDApO3JnYmEoMCwwLDAsMCk7cmdiYSgwLDAsMCwuNSk7cmdiYSgwLDAsMCwuNSkiIGtleVRpbWVzPSIwOzAuMTswLjI7MC40OzEiPjwvYW5pbWF0ZT4KICAgIDxhbmltYXRlVHJhbnNmb3JtIGF0dHJpYnV0ZU5hbWU9InRyYW5zZm9ybSIgdHlwZT0ic2NhbGUiIGFkZGl0aXZlPSJzdW0iIGZyb209IjAuOCIgdG89IjEiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiBiZWdpbj0iMC40cyIgZHVyPSIxLjZzIiB2YWx1ZXM9IjE7MC44OzAuODsxOzEiIGtleVRpbWVzPSIwOzAuMTswLjI7MC40OzEiPjwvYW5pbWF0ZVRyYW5zZm9ybT4KICA8L3JlY3Q+CiAgPHJlY3QgeD0iLTEwIiB5PSItMTAiIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNTAgNTApIiBmaWxsPSJyZ2JhKDAsMCwwLC41KSIgY2xhc3M9InNxIj4KICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9ImZpbGwiIGZyb209InJnYmEoMCwwLDAsMCkiIHRvPSJyZ2JhKDAsMCwwLC41KSIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIGR1cj0iMS42cyIgYmVnaW49IjAuOHMiIHZhbHVlcz0icmdiYSgwLDAsMCwuNSk7cmdiYSgwLDAsMCwwKTtyZ2JhKDAsMCwwLDApO3JnYmEoMCwwLDAsLjUpO3JnYmEoMCwwLDAsLjUpIiBrZXlUaW1lcz0iMDswLjE7MC4yOzAuNDsxIj48L2FuaW1hdGU+CiAgICA8YW5pbWF0ZVRyYW5zZm9ybSBhdHRyaWJ1dGVOYW1lPSJ0cmFuc2Zvcm0iIHR5cGU9InNjYWxlIiBhZGRpdGl2ZT0ic3VtIiBmcm9tPSIwLjgiIHRvPSIxIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgYmVnaW49IjAuOHMiIGR1cj0iMS42cyIgdmFsdWVzPSIxOzAuODswLjg7MTsxIiBrZXlUaW1lcz0iMDswLjE7MC4yOzAuNDsxIj48L2FuaW1hdGVUcmFuc2Zvcm0+CiAgPC9yZWN0PgogIDxyZWN0IHg9Ii0xMCIgeT0iLTEwIiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI1IDUwKSIgZmlsbD0icmdiYSgwLDAsMCwuNSkiIGNsYXNzPSJzcSI+CiAgICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJmaWxsIiBmcm9tPSJyZ2JhKDAsMCwwLDApIiB0bz0icmdiYSgwLDAsMCwuNSkiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiBkdXI9IjEuNnMiIGJlZ2luPSIxLjJzIiB2YWx1ZXM9InJnYmEoMCwwLDAsLjUpO3JnYmEoMCwwLDAsMCk7cmdiYSgwLDAsMCwwKTtyZ2JhKDAsMCwwLC41KTtyZ2JhKDAsMCwwLC41KSIga2V5VGltZXM9IjA7MC4xOzAuMjswLjQ7MSI+PC9hbmltYXRlPgogICAgPGFuaW1hdGVUcmFuc2Zvcm0gYXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIiB0eXBlPSJzY2FsZSIgYWRkaXRpdmU9InN1bSIgZnJvbT0iMC44IiB0bz0iMSIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIGJlZ2luPSIxLjJzIiBkdXI9IjEuNnMiIHZhbHVlcz0iMTswLjg7MC44OzE7MSIga2V5VGltZXM9IjA7MC4xOzAuMjswLjQ7MSI+PC9hbmltYXRlVHJhbnNmb3JtPgogIDwvcmVjdD4KPC9zdmc+Cg==\", \"base64\")\r\n , LOADING_SHARP_OUTLINE = Buffer(\"PHN2ZyBjbGFzcz0iZnAtbG9hZGluZy1zaGFycC1vdXRsaW5lIiB3aWR0aD0nMTEycHgnIGhlaWdodD0nMTEycHgnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDEwMCAxMDAiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIj4KICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iNzYiIGhlaWdodD0iNzYiIGZpbGw9InJnYmEoMCwwLDAsMCkiIGNsYXNzPSJiayI+PC9yZWN0PgogIDxyZWN0IHg9Ii05IiB5PSItOSIgd2lkdGg9IjE4IiBoZWlnaHQ9IjE4IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNSAyNSkiIGZpbGw9Im5vbmUiIHN0cm9rZT0icmdiYSgwLDAsMCwuNSkiIHN0cm9rZS13aWR0aD0iMyUiIGNsYXNzPSJzcSI+CiAgICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJzdHJva2UiIGZyb209InJnYmEoMCwwLDAsMCkiIHRvPSJyZ2JhKDAsMCwwLC41KSIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIGR1cj0iMS42cyIgYmVnaW49IjAuMHMiIHZhbHVlcz0icmdiYSgwLDAsMCwuNSk7cmdiYSgwLDAsMCwwKTtyZ2JhKDAsMCwwLDApO3JnYmEoMCwwLDAsLjUpO3JnYmEoMCwwLDAsLjUpIiBrZXlUaW1lcz0iMDswLjE7MC4yOzAuNDsxIj48L2FuaW1hdGU+CiAgICAgIDxhbmltYXRlVHJhbnNmb3JtIGF0dHJpYnV0ZU5hbWU9InRyYW5zZm9ybSIgdHlwZT0ic2NhbGUiIGFkZGl0aXZlPSJzdW0iIGZyb209IjAuOCIgdG89IjEiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiBiZWdpbj0iMC4wcyIgZHVyPSIxLjZzIiB2YWx1ZXM9IjE7MC44OzAuODsxOzEiIGtleVRpbWVzPSIwOzAuMTswLjI7MC40OzEiPjwvYW5pbWF0ZVRyYW5zZm9ybT4KICA8L3JlY3Q+CiAgPHJlY3QgeD0iLTkiIHk9Ii05IiB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDUwIDI1KSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJyZ2JhKDAsMCwwLC41KSIgc3Ryb2tlLXdpZHRoPSIzJSIgY2xhc3M9InNxIj4KICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9InN0cm9rZSIgZnJvbT0icmdiYSgwLDAsMCwwKSIgdG89InJnYmEoMCwwLDAsLjUpIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgZHVyPSIxLjZzIiBiZWdpbj0iMC40cyIgdmFsdWVzPSJyZ2JhKDAsMCwwLC41KTtyZ2JhKDAsMCwwLDApO3JnYmEoMCwwLDAsMCk7cmdiYSgwLDAsMCwuNSk7cmdiYSgwLDAsMCwuNSkiIGtleVRpbWVzPSIwOzAuMTswLjI7MC40OzEiPjwvYW5pbWF0ZT4KICAgICAgPGFuaW1hdGVUcmFuc2Zvcm0gYXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIiB0eXBlPSJzY2FsZSIgYWRkaXRpdmU9InN1bSIgZnJvbT0iMC44IiB0bz0iMSIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIGJlZ2luPSIwLjRzIiBkdXI9IjEuNnMiIHZhbHVlcz0iMTswLjg7MC44OzE7MSIga2V5VGltZXM9IjA7MC4xOzAuMjswLjQ7MSI+PC9hbmltYXRlVHJhbnNmb3JtPgogIDwvcmVjdD4KICA8cmVjdCB4PSItOSIgeT0iLTkiIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNTAgNTApIiBmaWxsPSJub25lIiBzdHJva2U9InJnYmEoMCwwLDAsLjUpIiBzdHJva2Utd2lkdGg9IjMlIiBjbGFzcz0ic3EiPgogICAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0ic3Ryb2tlIiBmcm9tPSJyZ2JhKDAsMCwwLDApIiB0bz0icmdiYSgwLDAsMCwuNSkiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiBkdXI9IjEuNnMiIGJlZ2luPSIwLjhzIiB2YWx1ZXM9InJnYmEoMCwwLDAsLjUpO3JnYmEoMCwwLDAsMCk7cmdiYSgwLDAsMCwwKTtyZ2JhKDAsMCwwLC41KTtyZ2JhKDAsMCwwLC41KSIga2V5VGltZXM9IjA7MC4xOzAuMjswLjQ7MSI+PC9hbmltYXRlPgogICAgICA8YW5pbWF0ZVRyYW5zZm9ybSBhdHRyaWJ1dGVOYW1lPSJ0cmFuc2Zvcm0iIHR5cGU9InNjYWxlIiBhZGRpdGl2ZT0ic3VtIiBmcm9tPSIwLjgiIHRvPSIxIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgYmVnaW49IjAuOHMiIGR1cj0iMS42cyIgdmFsdWVzPSIxOzAuODswLjg7MTsxIiBrZXlUaW1lcz0iMDswLjE7MC4yOzAuNDsxIj48L2FuaW1hdGVUcmFuc2Zvcm0+CiAgPC9yZWN0PgogIDxyZWN0IHg9Ii05IiB5PSItOSIgd2lkdGg9IjE4IiBoZWlnaHQ9IjE4IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNSA1MCkiIGZpbGw9Im5vbmUiIHN0cm9rZT0icmdiYSgwLDAsMCwuNSkiIHN0cm9rZS13aWR0aD0iMyUiIGNsYXNzPSJzcSI+CiAgICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJzdHJva2UiIGZyb209InJnYmEoMCwwLDAsMCkiIHRvPSJyZ2JhKDAsMCwwLC41KSIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIGR1cj0iMS42cyIgYmVnaW49IjEuMnMiIHZhbHVlcz0icmdiYSgwLDAsMCwuNSk7cmdiYSgwLDAsMCwwKTtyZ2JhKDAsMCwwLDApO3JnYmEoMCwwLDAsLjUpO3JnYmEoMCwwLDAsLjUpIiBrZXlUaW1lcz0iMDswLjE7MC4yOzAuNDsxIj48L2FuaW1hdGU+CiAgICAgIDxhbmltYXRlVHJhbnNmb3JtIGF0dHJpYnV0ZU5hbWU9InRyYW5zZm9ybSIgdHlwZT0ic2NhbGUiIGFkZGl0aXZlPSJzdW0iIGZyb209IjAuOCIgdG89IjEiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiBiZWdpbj0iMS4ycyIgZHVyPSIxLjZzIiB2YWx1ZXM9IjE7MC44OzAuODsxOzEiIGtleVRpbWVzPSIwOzAuMTswLjI7MC40OzEiPjwvYW5pbWF0ZVRyYW5zZm9ybT4KICA8L3JlY3Q+Cjwvc3ZnPgo=\", \"base64\");\r\n\r\n flowplayer(function (api, root) {\r\n common.find('.fp-filters').forEach(common.removeNode);\r\n try {\r\n var fc;\r\n document.body.appendChild(fc = common.createElement('div', {}, Buffer(\"PHN2ZyBjbGFzcz0iZnAtZmlsdGVycyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMCAwIj4KICA8ZGVmcz4KICAgIDxmaWx0ZXIgaWQ9ImYxIiB4PSItMjAlIiB5PSItMjAlIiB3aWR0aD0iMjAwJSIgaGVpZ2h0PSIyMDAlIj4KICAgICAgPGZlT2Zmc2V0IHJlc3VsdD0ib2ZmT3V0IiBpbj0iU291cmNlQWxwaGEiIGR4PSIwIiBkeT0iMCIgLz4KICAgICAgPGZlQ29sb3JNYXRyaXggcmVzdWx0PSJtYXRyaXhPdXQiIGluPSJvZmZPdXQiIHR5cGU9Im1hdHJpeCIKICAgICAgdmFsdWVzPSIwLjMgMCAwIDAgMCAwIDAuMyAwIDAgMCAwIDAgMC4zIDAgMCAwIDAgMCAwLjQgMCIgLz4KICAgICAgPGZlR2F1c3NpYW5CbHVyIHJlc3VsdD0iYmx1ck91dCIgaW49Im1hdHJpeE91dCIgc3RkRGV2aWF0aW9uPSI0IiAvPgogICAgICA8ZmVCbGVuZCBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJibHVyT3V0IiBtb2RlPSJub3JtYWwiIC8+CiAgICA8L2ZpbHRlcj4KICA8L2RlZnM+Cjwvc3ZnPgo=\", \"base64\")));\r\n common.css(fc, {\r\n width: 0,\r\n height: 0,\r\n overflow: 'hidden',\r\n position: 'absolute',\r\n margin: 0,\r\n padding: 0\r\n });\r\n\r\n } catch (e) { /* omit */ }\r\n\r\n var conf = api.conf,\r\n support = flowplayer.support,\r\n hovertimer;\r\n common.find('.fp-ratio,.fp-ui', root).forEach(common.removeNode);\r\n common.addClass(root, 'flowplayer');\r\n root.appendChild(common.createElement('div', { className: 'fp-ratio' }));\r\n var ui = common.createElement('div', { className: 'fp-ui' }, '\\\r\n
\\\r\n {{ LOADING_SHARP_OUTLINE }}\\\r\n {{ LOADING_SHARP_FILL }}\\\r\n {{ LOADING_ROUNDED_FILL }}\\\r\n {{ LOADING_ROUNDED_OUTLINE }}\\\r\n
\\\r\n
\\\r\n \\\r\n \\\r\n \\\r\n
\\\r\n

\\\r\n
\\\r\n \\\r\n {{ PLAY_ROUNDED_FILL }}\\\r\n {{ PLAY_ROUNDED_OUTLINE }}\\\r\n {{ PLAY_SHARP_FILL }}\\\r\n {{ PLAY_SHARP_OUTLINE }}\\\r\n
\\\r\n
\\\r\n \\\r\n {{ PAUSE_SHARP_OUTLINE }}\\\r\n {{ PAUSE_SHARP_FILL }}\\\r\n {{ PAUSE_ROUNDED_OUTLINE }}\\\r\n {{ PAUSE_ROUNDED_FILL }}\\\r\n
\\\r\n
\\\r\n \\\r\n 00:00\\\r\n
\\\r\n
\\\r\n \\\r\n
\\\r\n
\\\r\n \\\r\n \\\r\n
\\\r\n \\\r\n
\\\r\n \\\r\n
\\\r\n
\\\r\n \\\r\n
'.replace('{{ PAUSE_ROUNDED_FILL }}', PAUSE_ROUNDED_FILL)\r\n .replace('{{ PAUSE_ROUNDED_OUTLINE }}', PAUSE_ROUNDED_OUTLINE)\r\n .replace('{{ PAUSE_SHARP_FILL }}', PAUSE_SHARP_FILL)\r\n .replace('{{ PAUSE_SHARP_OUTLINE }}', PAUSE_SHARP_OUTLINE)\r\n .replace('{{ PLAY_SHARP_OUTLINE }}', PLAY_SHARP_OUTLINE)\r\n .replace('{{ PLAY_SHARP_FILL }}', PLAY_SHARP_FILL)\r\n .replace('{{ PLAY_ROUNDED_OUTLINE }}', PLAY_ROUNDED_OUTLINE)\r\n .replace('{{ PLAY_ROUNDED_FILL }}', PLAY_ROUNDED_FILL)\r\n .replace('{{ LOADING_ROUNDED_OUTLINE }}', LOADING_ROUNDED_OUTLINE)\r\n .replace('{{ LOADING_ROUNDED_FILL }}', LOADING_ROUNDED_FILL)\r\n .replace('{{ LOADING_SHARP_FILL }}', LOADING_SHARP_FILL)\r\n .replace('{{ LOADING_SHARP_OUTLINE }}', LOADING_SHARP_OUTLINE)\r\n .replace(/url\\(#/g, 'url(' + window.location.href.replace(window.location.hash, \"\").replace(/\\#$/g, '') + '#')\r\n );\r\n root.appendChild(ui);\r\n function find(klass) {\r\n return common.find(\".fp-\" + klass, root)[0];\r\n }\r\n\r\n // widgets\r\n var buffer = find(\"buffer\"),\r\n waiting = find('waiting'),\r\n elapsed = find(\"elapsed\"),\r\n ratio = find(\"ratio\"),\r\n speedFlash = find('speed-flash'),\r\n durationEl = find(\"duration\"),\r\n remaining = find('remaining'),\r\n timelineTooltip = find('timestamp'),\r\n origRatio = common.css(ratio, 'padding-top'),\r\n play = find('play'),\r\n pause = find('pause'),\r\n\r\n // sliders\r\n timeline = find(\"timeline\"),\r\n timelineApi = slider(timeline, api.rtl),\r\n\r\n fullscreen = find(\"fullscreen\"),\r\n volumeSlider = find(\"volumebar\"),\r\n volumeApi = barSlider(volumeSlider, { rtl: api.rtl }),\r\n noToggle = common.hasClass(root, 'no-toggle');\r\n\r\n timelineApi.disableAnimation(common.hasClass(root, 'is-touch'));\r\n api.sliders = api.sliders || {};\r\n api.sliders.timeline = timelineApi;\r\n api.sliders.volume = volumeApi;\r\n\r\n var speedAnimationTimers = [];\r\n\r\n // aspect ratio\r\n function setRatio(val) {\r\n common.css(ratio, 'padding-top', val * 100 + \"%\");\r\n if (!support.inlineBlock) common.height(common.find('object', root)[0], common.height(root));\r\n }\r\n\r\n function hover(flag) {\r\n if (flag) {\r\n common.addClass(root, 'is-mouseover');\r\n common.removeClass(root, 'is-mouseout');\r\n } else {\r\n common.addClass(root, 'is-mouseout');\r\n common.removeClass(root, 'is-mouseover');\r\n }\r\n }\r\n\r\n // loading...\r\n if (!support.svg) common.html(waiting, \"

loading …

\");\r\n\r\n if (conf.ratio) setRatio(conf.ratio);\r\n\r\n // no fullscreen in IFRAME\r\n try {\r\n if (!conf.fullscreen) common.removeNode(fullscreen);\r\n\r\n } catch (e) {\r\n common.removeNode(fullscreen);\r\n }\r\n\r\n api.on('dvrwindow', function () {\r\n timelineApi.disable(false);\r\n });\r\n\r\n api.on(\"ready\", function (ev, api, video) {\r\n\r\n var duration = api.video.duration;\r\n\r\n timelineApi.disable(api.disabled || !duration);\r\n\r\n if (conf.adaptiveRatio && !isNaN(video.height / video.width)) setRatio(video.height / video.width, true);\r\n\r\n // initial time & volume\r\n common.html([durationEl, remaining], api.live ? 'Live' : format(duration));\r\n\r\n // do we need additional space for showing hour\r\n common.toggleClass(root, 'is-long', duration >= 3600);\r\n volumeApi.slide(api.volumeLevel);\r\n\r\n if (api.engine.engineName === 'flash') timelineApi.disableAnimation(true, true);\r\n else timelineApi.disableAnimation(false);\r\n common.find('.fp-title', ui).forEach(common.removeNode);\r\n if (video.title) {\r\n\r\n common.prepend(ui, common.createElement('div', {\r\n className: 'fp-message fp-title'\r\n }, video.title));\r\n }\r\n common.toggleClass(root, 'has-title', !!video.title);\r\n\r\n\r\n }).on(\"unload\", function () {\r\n if (!origRatio && !conf.splash) common.css(ratio, \"paddingTop\", \"\");\r\n timelineApi.slide(0);\r\n common.addClass(play, 'fp-visible');\r\n\r\n // buffer\r\n }).on(\"buffer\", function () {\r\n var video = api.video,\r\n max = video.buffer / video.duration;\r\n\r\n if (!video.seekable && support.seekable) timelineApi.max(api.conf.live ? Infinity : max);\r\n if (max < 1) common.css(buffer, \"width\", (max * 100) + \"%\");\r\n else common.css(buffer, 'width', '100%');\r\n }).on(\"speed\", function (e, api, val) {\r\n if (api.video.time) {\r\n common.text(speedFlash, val + \"x\");\r\n common.addClass(speedFlash, 'fp-shown');\r\n speedAnimationTimers = speedAnimationTimers.filter(function (to) {\r\n clearTimeout(to);\r\n return false;\r\n });\r\n speedAnimationTimers.push(setTimeout(function () {\r\n common.addClass(speedFlash, 'fp-hilite');\r\n speedAnimationTimers.push(setTimeout(function () {\r\n common.removeClass(speedFlash, 'fp-hilite');\r\n speedAnimationTimers.push(setTimeout(function () {\r\n common.removeClass(speedFlash, 'fp-shown');\r\n }, 300));\r\n }, 1000));\r\n }));\r\n }\r\n\r\n }).on(\"buffered\", function () {\r\n common.css(buffer, 'width', '100%');\r\n timelineApi.max(1);\r\n\r\n // progress\r\n }).on(\"progress seek\", function (_e, _api, time) {\r\n\r\n var duration = api.video.duration,\r\n offset = api.video.seekOffset || 0;\r\n\r\n time = time || api.video.time;\r\n var percentage = (time - offset) / (duration - offset);\r\n if (!timelineApi.dragging) {\r\n timelineApi.slide(percentage, api.seeking ? 0 : 250);\r\n }\r\n common.toggleClass(root, 'is-live-position', duration - time < conf.livePositionOffset);\r\n\r\n common.html(elapsed, format(time));\r\n common.html(remaining, format(duration - time, true));\r\n\r\n }).on(\"finish resume seek\", function (e) {\r\n common.toggleClass(root, \"is-finished\", e.type == \"finish\");\r\n }).on('resume', function () {\r\n common.addClass(play, 'fp-visible');\r\n setTimeout(function () { common.removeClass(play, 'fp-visible'); }, 300);\r\n }).on('pause', function () {\r\n common.addClass(pause, 'fp-visible');\r\n setTimeout(function () { common.removeClass(pause, 'fp-visible'); }, 300);\r\n }).on(\"stop\", function () {\r\n common.html(elapsed, format(0));\r\n timelineApi.slide(0, 100);\r\n\r\n }).on(\"finish\", function () {\r\n common.html(elapsed, format(api.video.duration));\r\n timelineApi.slide(1, 100);\r\n common.removeClass(root, 'is-seeking');\r\n\r\n // misc\r\n }).on(\"beforeseek\", function () {\r\n //TODO FIXME\r\n //progress.stop();\r\n\r\n }).on(\"volume\", function () {\r\n volumeApi.slide(api.volumeLevel);\r\n\r\n\r\n }).on(\"disable\", function () {\r\n var flag = api.disabled;\r\n timelineApi.disable(flag);\r\n volumeApi.disable(flag);\r\n common.toggleClass(root, 'is-disabled', api.disabled);\r\n\r\n }).on(\"mute\", function (e, api, flag) {\r\n common.toggleClass(root, 'is-muted', flag);\r\n\r\n }).on(\"error\", function (e, api, error) {\r\n common.removeClass(root, 'is-loading');\r\n common.removeClass(root, 'is-seeking');\r\n common.addClass(root, 'is-error');\r\n if (error) {\r\n error.message = conf.errors[error.code];\r\n api.error = true;\r\n\r\n var dismiss = api.message((api.engine && api.engine.engineName || 'html5') + \": \" + error.message);\r\n //common.find('p', el)[0].innerHTML = error.url || video.url || video.src || conf.errorUrls[error.code];\r\n common.removeClass(root, 'is-mouseover');\r\n api.one('load progress', function () { dismiss(); });\r\n }\r\n\r\n\r\n // hover\r\n }).one('resume ready', function () {\r\n var videoTag = common.find('video.fp-engine', root)[0];\r\n if (!videoTag) return;\r\n if (!common.width(videoTag) || !common.height(videoTag)) {\r\n var oldOverflow = root.style.overflow;\r\n root.style.overflow = 'visible';\r\n setTimeout(function () {\r\n if (oldOverflow) root.style.overflow = oldOverflow;\r\n else root.style.removeProperty('overflow');\r\n });\r\n }\r\n });\r\n //Interaction events\r\n bean.on(root, \"mouseenter mouseleave\", function (e) {\r\n if (noToggle) return;\r\n\r\n var is_over = e.type == \"mouseover\",\r\n lastMove;\r\n\r\n // is-mouseover/out\r\n hover(is_over);\r\n\r\n if (is_over) {\r\n\r\n var reg = function () {\r\n hover(true);\r\n lastMove = new Date();\r\n };\r\n api.on(\"pause.x volume.x\", reg);\r\n bean.on(root, 'mousemove.x', reg);\r\n\r\n hovertimer = setInterval(function () {\r\n if (new Date() - lastMove > conf.mouseoutTimeout) {\r\n hover(false);\r\n lastMove = new Date();\r\n }\r\n }, 100);\r\n\r\n } else {\r\n bean.off(root, 'mousemove.x');\r\n api.off(\"pause.x volume.x\");\r\n clearInterval(hovertimer);\r\n }\r\n\r\n\r\n // allow dragging over the player edge\r\n });\r\n bean.on(root, \"mouseleave\", function () {\r\n\r\n if (timelineApi.dragging || volumeApi.dragging) {\r\n common.addClass(root, 'is-mouseover');\r\n common.removeClass(root, 'is-mouseout');\r\n }\r\n\r\n // click\r\n });\r\n bean.on(root, \"click.player\", function (e) {\r\n if (api.disabled) return;\r\n if (common.hasClass(e.target, 'fp-ui') || common.hasClass(e.target, 'fp-engine') || e.flash || common.hasParent(e.target, '.fp-play,.fp-pause')) {\r\n if (e.preventDefault) e.preventDefault();\r\n return api.toggle();\r\n }\r\n });\r\n\r\n bean.on(root, 'mousemove', '.fp-timeline', function (ev) {\r\n var x = ev.pageX || ev.clientX,\r\n delta = x - common.offset(timeline).left,\r\n percentage = delta / common.width(timeline),\r\n seconds = (api.rtl ? 1 - percentage : percentage) * api.video.duration;\r\n if (percentage < 0) return;\r\n common.html(timelineTooltip, format(seconds));\r\n var left = (delta - common.width(timelineTooltip) / 2);\r\n if (left < 0) left = 0;\r\n if (left > common.width(timeline) - common.width(timelineTooltip)) left = false;\r\n if (left !== false) common.css(timelineTooltip, {\r\n left: left + 'px',\r\n right: 'auto'\r\n });\r\n else common.css(timelineTooltip, {\r\n left: 'auto',\r\n right: '0px'\r\n });\r\n\r\n });\r\n\r\n bean.on(root, 'contextmenu', function (ev) {\r\n var w = window;\r\n if (common.hasClass(root, 'is-flash-disabled')) return;\r\n var menu = common.find('.fp-context-menu', root)[0];\r\n if (!menu) return;\r\n ev.preventDefault();\r\n api.showMenu(menu, {\r\n left: ev.clientX - w.scrollX,\r\n top: ev.clientY - w.scrollY\r\n });\r\n bean.on(root, 'click', '.fp-context-menu', function (ev) {\r\n ev.stopPropagation();\r\n });\r\n });\r\n api.on('flashdisabled', function (_e, _a, showMessage) {\r\n common.addClass(root, 'is-flash-disabled');\r\n var dismiss;\r\n if (showMessage !== false) dismiss = api.message('Seems something is blocking Adobe Flash from running');\r\n api.one('ready progress', function () {\r\n common.removeClass(root, 'is-flash-disabled');\r\n if (dismiss) dismiss();\r\n });\r\n });\r\n\r\n // poster -> background image\r\n if (conf.poster) common.css(root, 'background-image', \"url(\" + conf.poster + \")\");\r\n\r\n var bc = common.css(root, 'background-color'),\r\n has_bg = common.css(root, 'background-image') != \"none\" || bc && bc != \"rgba(0, 0, 0, 0)\" && bc != \"transparent\";\r\n\r\n // is-poster class\r\n if (has_bg && !conf.splash) {\r\n if (!conf.poster) conf.poster = true;\r\n var initPoster = function () {\r\n common.addClass(root, \"is-poster\");\r\n common.addClass(play, 'fp-visible');\r\n api.poster = true;\r\n api.one(conf.autoplay ? \"progress seek\" : \"resume seek\", function () {\r\n common.removeClass(root, \"is-poster\");\r\n common.removeClass(play, 'fp-visible');\r\n api.poster = false;\r\n });\r\n }\r\n api.on('stop', function () { initPoster(); });\r\n api.on('ready', function (_ev, _api, video) {\r\n if (video.index || video.autoplay) return; // No poster for playlist items\r\n initPoster();\r\n });\r\n }\r\n\r\n if (typeof conf.splash === 'string') {\r\n common.css(root, 'background-image', \"url('\" + conf.splash + \"')\");\r\n }\r\n\r\n // default background color if not present\r\n if (!has_bg && api.forcedSplash) {\r\n common.css(root, \"background-color\", \"#555\");\r\n }\r\n\r\n bean.on(root, 'click', '.fp-toggle, .fp-play, .fp-playbtn', function () {\r\n if (api.disabled) return;\r\n api.toggle();\r\n });\r\n\r\n /* controlbar elements */\r\n bean.on(root, 'click', '.fp-volumebtn', function () { api.mute(); }); bean.on(root, 'click', '.fp-fullscreen', function () { api.fullscreen(); });\r\n bean.on(root, 'click', '.fp-unload', function () { api.unload(); });\r\n\r\n bean.on(timeline, 'slide', function (val) {\r\n api.seeking = true;\r\n api.seekTo(val * 10);\r\n });\r\n\r\n bean.on(volumeSlider, 'slide', function (val) {\r\n api.volume(val);\r\n });\r\n\r\n // times\r\n\r\n bean.on(root, 'click', '.fp-duration,.fp-remaining', function () {\r\n if (api.dvr) return api.seekTo(10);\r\n common.toggleClass(root, 'is-inverted');\r\n });\r\n\r\n hover(noToggle);\r\n\r\n api.on('shutdown', function () {\r\n bean.off(timeline);\r\n bean.off(volumeSlider);\r\n });\r\n\r\n });\r\n\r\n\r\n module.exports.format = format;\r\n\r\n }).call(this, _dereq_(\"buffer\").Buffer)\r\n }, { \"../common\": 1, \"../flowplayer\": 28, \"./ui/bar-slider\": 25, \"./ui/slider\": 26, \"bean\": 31, \"buffer\": 32 }], 25: [function (_dereq_, module, exports) {\r\n var bean = _dereq_('bean')\r\n , common = _dereq_('../../common');\r\n\r\n function slider(root, opts) {\r\n opts = opts || {};\r\n\r\n var activeClass = opts.activeClass || 'fp-color'\r\n , inactiveClass = opts.inactiveClass || 'fp-grey'\r\n , childSelector = opts.childSelector || 'em'\r\n , rtl = !!opts.rtl\r\n , disabled = false;\r\n\r\n var totalBars = common.find(childSelector, root).length;\r\n\r\n var api = {\r\n unload: function () {\r\n bean.off(root, '.barslider');\r\n },\r\n slide: function (to, trigger) {\r\n common.find(childSelector, root).forEach(function (bar, idx) {\r\n var active = to > idx / totalBars;\r\n common.toggleClass(bar, activeClass, active);\r\n common.toggleClass(bar, inactiveClass, !active);\r\n });\r\n if (trigger) bean.fire(root, 'slide', [to]);\r\n },\r\n disable: function (flag) {\r\n disabled = flag;\r\n }\r\n };\r\n\r\n bean.on(root, 'mousedown.sld touchstart.sld', function (ev) {\r\n ev.preventDefault();\r\n if (disabled) return;\r\n api.slide(getMouseValue(ev), true);\r\n\r\n bean.on(root, 'mousemove.sld touchmove.sld', function (ev) {\r\n ev.preventDefault();\r\n api.slide(getMouseValue(ev), true);\r\n });\r\n\r\n bean.one(document, 'mouseup.sld touchup.sld', function () {\r\n bean.off(root, 'mousemove.sld touchmove.sld');\r\n });\r\n });\r\n\r\n return api;\r\n\r\n function getMouseValue(ev) {\r\n var pageX = ev.pageX || ev.clientX\r\n , offset = common.offset(root)\r\n , size = common.width(root);\r\n\r\n\r\n if (!pageX && ev.originalEvent && ev.originalEvent.touches && ev.originalEvent.touches.length) {\r\n pageX = ev.originalEvent.touches[0].pageX;\r\n }\r\n var delta = pageX - offset.left;\r\n delta = Math.max(0, Math.min(size, delta));\r\n\r\n var value = delta / size;\r\n if (rtl) value = 1 - value;\r\n return value;\r\n }\r\n }\r\n\r\n\r\n module.exports = slider;\r\n\r\n }, { \"../../common\": 1, \"bean\": 31 }], 26: [function (_dereq_, module, exports) {\r\n 'use strict';\r\n // skip IE policies\r\n // document.ondragstart = function () { return false; };\r\n //\r\n var bean = _dereq_('bean'),\r\n common = _dereq_('../../common');\r\n\r\n\r\n // execute function every ms\r\n var throttle = function (fn, delay) {\r\n var locked;\r\n\r\n return function () {\r\n if (!locked) {\r\n fn.apply(this, arguments);\r\n locked = 1;\r\n setTimeout(function () { locked = 0; }, delay);\r\n }\r\n };\r\n };\r\n\r\n\r\n var slider = function (root, rtl) {\r\n\r\n var progress = common.lastChild(root),\r\n disabled,\r\n offset,\r\n width,\r\n height,\r\n vertical,\r\n size,\r\n maxValue,\r\n max,\r\n skipAnimation = false,\r\n\r\n /* private */\r\n calc = function () {\r\n offset = common.offset(root);\r\n width = common.width(root);\r\n height = common.height(root);\r\n\r\n /* exit from fullscreen can mess this up.*/\r\n // vertical = height > width;\r\n\r\n size = vertical ? height : width;\r\n max = toDelta(maxValue);\r\n },\r\n\r\n fire = function (value) {\r\n if (!disabled && value != api.value && (!maxValue || value < maxValue)) {\r\n bean.fire(root, 'slide', [value]);\r\n api.value = value;\r\n }\r\n },\r\n\r\n mousemove = function (e) {\r\n var pageX = e.pageX || e.clientX;\r\n if (!pageX && e.originalEvent && e.originalEvent.touches && e.originalEvent.touches.length) {\r\n pageX = e.originalEvent.touches[0].pageX;\r\n }\r\n var delta = vertical ? e.pageY - offset.top : pageX - offset.left;\r\n delta = Math.max(0, Math.min(max || size, delta));\r\n\r\n var value = delta / size;\r\n if (vertical) value = 1 - value;\r\n if (rtl) value = 1 - value;\r\n return move(value, 0, true);\r\n },\r\n\r\n move = function (value, speed) {\r\n if (speed === undefined) { speed = 0; }\r\n if (value > 1) value = 1;\r\n\r\n var to = (Math.round(value * 1000) / 10) + \"%\";\r\n\r\n if (!maxValue || value <= maxValue) {\r\n if (skipAnimation) {\r\n common.removeClass(progress, 'animated');\r\n } else {\r\n common.addClass(progress, 'animated');\r\n common.css(progress, 'transition-duration', (speed || 0) + 'ms');\r\n }\r\n common.css(progress, 'width', to);\r\n }\r\n\r\n return value;\r\n },\r\n\r\n toDelta = function (value) {\r\n return Math.max(0, Math.min(size, vertical ? (1 - value) * height : value * width));\r\n },\r\n\r\n /* public */\r\n api = {\r\n\r\n max: function (value) {\r\n maxValue = value;\r\n },\r\n\r\n disable: function (flag) {\r\n disabled = flag;\r\n },\r\n\r\n slide: function (value, speed, fireEvent) {\r\n calc();\r\n if (fireEvent) fire(value);\r\n move(value, speed);\r\n },\r\n\r\n // Should animation be handled via css\r\n disableAnimation: function (value, alsoCssAnimations) {\r\n skipAnimation = value !== false;\r\n common.toggleClass(root, 'no-animation', !!alsoCssAnimations);\r\n }\r\n\r\n };\r\n\r\n calc();\r\n\r\n // bound dragging into document\r\n bean.on(root, 'mousedown.sld touchstart', function (e) {\r\n e.preventDefault();\r\n\r\n if (!disabled) {\r\n // begin --> recalculate. allows dynamic resizing of the slider\r\n var delayedFire = throttle(fire, 100);\r\n calc();\r\n api.dragging = true;\r\n common.addClass(root, 'is-dragging');\r\n fire(mousemove(e));\r\n\r\n bean.on(document, 'mousemove.sld touchmove.sld', function (e) {\r\n e.preventDefault();\r\n delayedFire(mousemove(e));\r\n\r\n });\r\n bean.one(document, 'mouseup touchend', function () {\r\n api.dragging = false;\r\n common.removeClass(root, 'is-dragging');\r\n bean.off(document, 'mousemove.sld touchmove.sld');\r\n });\r\n\r\n }\r\n\r\n });\r\n return api;\r\n };\r\n\r\n module.exports = slider;\r\n\r\n }, { \"../../common\": 1, \"bean\": 31 }], 27: [function (_dereq_, module, exports) {\r\n\r\n\r\n var clipboard = module.exports = function (text, successCallback, errorCallback) {\r\n try {\r\n doCopy(text);\r\n successCallback();\r\n } catch (e) {\r\n errorCallback(e);\r\n }\r\n };\r\n\r\n function doCopy(text) {\r\n var textArea = document.createElement('textarea');\r\n textArea.value = text;\r\n textArea.style.opacity = 0;\r\n textArea.style.position = 'absolute';\r\n document.body.appendChild(textArea);\r\n textArea.select();\r\n var success = document.execCommand('copy');\r\n document.body.removeChild(textArea);\r\n if (!success) throw new Error('Unsuccessfull');\r\n }\r\n\r\n }, {}], 28: [function (_dereq_, module, exports) {\r\n 'use strict';\r\n var extend = _dereq_('extend-object'),\r\n isFunction = _dereq_('is-function'),\r\n bean = _dereq_('bean'),\r\n slider = _dereq_('./ext/ui/slider'),\r\n barSlider = _dereq_('./ext/ui/bar-slider'),\r\n common = _dereq_('./common'),\r\n events = _dereq_('./ext/events');\r\n\r\n var instances = [],\r\n extensions = [];\r\n\r\n\r\n var oldHandler = window.onbeforeunload;\r\n window.onbeforeunload = function (ev) {\r\n instances.forEach(function (api) {\r\n if (api.conf.splash) {\r\n api.unload();\r\n } else {\r\n api.bind(\"error\", function () {\r\n common.find('.flowplayer.is-error .fp-message').forEach(common.removeNode);\r\n });\r\n }\r\n });\r\n if (oldHandler) return oldHandler(ev);\r\n };\r\n\r\n var supportLocalStorage = false;\r\n try {\r\n if (typeof window.localStorage == \"object\") {\r\n window.localStorage.flowplayerTestStorage = \"test\";\r\n supportLocalStorage = true;\r\n }\r\n } catch (ignored) { }\r\n\r\n var isSafari = /Safari/.exec(navigator.userAgent) && !/Chrome/.exec(navigator.userAgent),\r\n m = /(\\d+\\.\\d+) Safari/.exec(navigator.userAgent),\r\n safariVersion = m ? Number(m[1]) : 100;\r\n\r\n /* flowplayer() */\r\n var flowplayer = module.exports = function (fn, opts, callback) {\r\n if (isFunction(fn)) return extensions.push(fn);\r\n if (typeof fn == 'number' || typeof fn === 'undefined') return instances[fn || 0];\r\n if (fn.nodeType) { // Is an element\r\n if (fn.getAttribute('data-flowplayer-instance-id') !== null) { // Already flowplayer instance\r\n return instances[fn.getAttribute('data-flowplayer-instance-id')];\r\n }\r\n if (!opts) return; // Can't initialize without data\r\n return initializePlayer(fn, opts, callback);\r\n }\r\n if (fn.jquery) return flowplayer(fn[0], opts, callback);\r\n if (typeof fn === 'string') {\r\n var el = common.find(fn)[0];\r\n return el && flowplayer(el, opts, callback);\r\n }\r\n };\r\n\r\n extend(flowplayer, {\r\n\r\n version: '7.0.4',\r\n\r\n engines: [],\r\n\r\n extensions: [],\r\n\r\n conf: {},\r\n\r\n set: function (key, value) {\r\n if (typeof key === 'string') flowplayer.conf[key] = value;\r\n else extend(flowplayer.conf, key);\r\n },\r\n\r\n registerExtension: function (js, css) {\r\n flowplayer.extensions.push([js, css]);\r\n },\r\n\r\n support: {},\r\n\r\n defaults: {\r\n\r\n debug: supportLocalStorage ? !!localStorage.flowplayerDebug : false,\r\n\r\n // true = forced playback\r\n disabled: false,\r\n\r\n fullscreen: window == window.top,\r\n\r\n // keyboard shortcuts\r\n keyboard: true,\r\n\r\n // default aspect ratio\r\n ratio: 9 / 16,\r\n\r\n adaptiveRatio: false,\r\n\r\n rtmp: 0,\r\n\r\n proxy: 'best',\r\n\r\n hlsQualities: true,\r\n\r\n splash: false,\r\n\r\n live: false,\r\n livePositionOffset: 120,\r\n\r\n swf: \"//releases.flowplayer.org/7.0.4/commercial/flowplayer.swf\",\r\n swfHls: \"//releases.flowplayer.org/7.0.4/commercial/flowplayerhls.swf\",\r\n\r\n speeds: [0.25, 0.5, 1, 1.5, 2],\r\n\r\n tooltip: true,\r\n\r\n mouseoutTimeout: 5000,\r\n\r\n // initial volume level\r\n volume: !supportLocalStorage ? 1 : localStorage.muted == \"true\" ? 0 : !isNaN(localStorage.volume) ? localStorage.volume || 1 : 1,\r\n\r\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#error-codes\r\n errors: [\r\n\r\n // video exceptions\r\n '',\r\n 'Video loading aborted',\r\n 'Network error',\r\n 'Video not properly encoded',\r\n 'Video file not found',\r\n\r\n // player exceptions\r\n 'Unsupported video',\r\n 'Skin not found',\r\n 'SWF file not found',\r\n 'Subtitles not found',\r\n 'Invalid RTMP URL',\r\n 'Unsupported video format. Try installing Adobe Flash.'\r\n ],\r\n errorUrls: ['', '', '', '', '', '', '', '', '', '',\r\n 'http://get.adobe.com/flashplayer/'\r\n ],\r\n playlist: [],\r\n\r\n hlsFix: isSafari && safariVersion < 8,\r\n\r\n disableInline: false\r\n\r\n },\r\n // Expose utilities for plugins\r\n bean: bean,\r\n common: common,\r\n slider: slider,\r\n barSlider: barSlider,\r\n extend: extend\r\n\r\n\r\n\r\n });\r\n\r\n // keep track of players\r\n var playerCount = 0;\r\n\r\n var URLResolver = _dereq_('./ext/resolve');\r\n\r\n\r\n\r\n if (typeof window.jQuery !== 'undefined') {\r\n var $ = window.jQuery;\r\n // auto-install (any video tag with parent .flowplayer)\r\n $(function () {\r\n if (typeof $.fn.flowplayer == 'function') {\r\n $('.flowplayer:has(video,script[type=\"application/json\"])').flowplayer();\r\n }\r\n });\r\n\r\n // jQuery plugin\r\n var videoTagConfig = function (videoTag) {\r\n if (!videoTag.length) return {};\r\n var clip = videoTag.data() || {}, conf = {};\r\n $.each(['autoplay', 'loop', 'preload', 'poster'], function (i, key) {\r\n var val = videoTag.attr(key);\r\n if (val !== undefined && ['autoplay', 'poster'].indexOf(key) !== -1) conf[key] = val ? val : true;\r\n else if (val !== undefined) clip[key] = val ? val : true;\r\n });\r\n clip.subtitles = videoTag.find('track').map(function () {\r\n var tr = $(this);\r\n return {\r\n src: tr.attr('src'),\r\n kind: tr.attr('kind'),\r\n label: tr.attr('label'),\r\n srclang: tr.attr('srclang'),\r\n 'default': tr.prop('default')\r\n };\r\n }).get();\r\n\r\n clip.sources = (new URLResolver()).sourcesFromVideoTag(videoTag, $);\r\n return extend(conf, { clip: clip });\r\n };\r\n $.fn.flowplayer = function (opts, callback) {\r\n return this.each(function () {\r\n if (typeof opts == 'string') opts = { swf: opts };\r\n if (isFunction(opts)) { callback = opts; opts = {}; }\r\n var root = $(this),\r\n scriptConf = root.find('script[type=\"application/json\"]'),\r\n confObject = scriptConf.length ? JSON.parse(scriptConf.text()) : videoTagConfig(root.find('video')),\r\n conf = $.extend({}, opts || {}, confObject, root.data());\r\n var api = initializePlayer(this, conf, callback);\r\n events.EVENTS.forEach(function (evName) {\r\n api.on(evName + '.jquery', function (ev) {\r\n root.trigger.call(root, ev.type, ev.detail && ev.detail.args);\r\n });\r\n });\r\n root.data('flowplayer', api);\r\n });\r\n };\r\n }\r\n\r\n function initializePlayer(element, opts, callback) {\r\n if (opts && opts.embed) opts.embed = extend({}, flowplayer.defaults.embed, opts.embed);\r\n\r\n var root = element,\r\n conf = extend({}, flowplayer.defaults, flowplayer.conf, opts),\r\n storage = {},\r\n lastSeekPosition,\r\n engine,\r\n urlResolver = new URLResolver();\r\n\r\n common.addClass(root, 'is-loading');\r\n common.toggleClass(root, 'no-flex', !flowplayer.support.flex);\r\n common.toggleClass(root, 'no-svg', !flowplayer.support.svg);\r\n try {\r\n storage = supportLocalStorage ? window.localStorage : storage;\r\n } catch (e) { }\r\n\r\n if (conf.aspectRatio && typeof conf.aspectRatio === 'string') {\r\n var parts = conf.aspectRatio.split(/[:\\/]/);\r\n conf.ratio = parts[1] / parts[0];\r\n }\r\n\r\n var isRTL = (root.currentStyle && root.currentStyle.direction === 'rtl') ||\r\n (window.getComputedStyle && window.getComputedStyle(root, null) !== null && window.getComputedStyle(root, null).getPropertyValue('direction') === 'rtl');\r\n\r\n if (isRTL) common.addClass(root, 'is-rtl');\r\n\r\n /*** API ***/\r\n var api = {\r\n\r\n // properties\r\n conf: conf,\r\n currentSpeed: 1,\r\n volumeLevel: conf.muted ? 0 : typeof conf.volume === \"undefined\" ? storage.volume * 1 : conf.volume,\r\n video: {},\r\n\r\n // states\r\n disabled: false,\r\n finished: false,\r\n loading: false,\r\n muted: storage.muted == \"true\" || conf.muted,\r\n paused: false,\r\n playing: false,\r\n ready: false,\r\n splash: false,\r\n rtl: isRTL,\r\n\r\n // methods\r\n //\r\n hijack: function (hijack) {\r\n try {\r\n api.engine.suspendEngine();\r\n } catch (e) { /* */ }\r\n api.hijacked = hijack;\r\n },\r\n release: function () {\r\n try {\r\n api.engine.resumeEngine();\r\n } catch (e) { /* */ }\r\n api.hijacked = false;\r\n },\r\n load: function (video, callback) {\r\n\r\n if (api.error || api.loading) return;\r\n api.video = {};\r\n\r\n api.finished = false;\r\n\r\n video = video || conf.clip;\r\n\r\n // resolve URL\r\n video = extend({}, urlResolver.resolve(video, conf.clip.sources));\r\n if (api.playing || api.engine) video.autoplay = true;\r\n var engineImpl = selectEngine(video);\r\n if (!engineImpl) return setTimeout(function () { api.trigger(\"error\", [api, { code: flowplayer.support.flashVideo ? 5 : 10 }]); }) && api;\r\n if (!engineImpl.engineName) throw new Error('engineName property of factory should be exposed');\r\n if (!api.engine || engineImpl.engineName !== api.engine.engineName) {\r\n api.ready = false;\r\n if (api.engine) {\r\n api.engine.unload();\r\n api.conf.autoplay = true;\r\n }\r\n engine = api.engine = engineImpl(api, root);\r\n api.one('ready', function () {\r\n setTimeout(function () {\r\n if (api.muted) api.mute(true, true);\r\n else engine.volume(api.volumeLevel);\r\n });\r\n });\r\n }\r\n\r\n extend(video, engine.pick(video.sources.filter(function (source) { // Filter out sources explicitely configured for some other engine\r\n if (!source.engine) return true;\r\n return source.engine === engine.engineName;\r\n })));\r\n\r\n if (video.src) {\r\n var e = api.trigger('load', [api, video, engine], true);\r\n if (!e.defaultPrevented) {\r\n engine.load(video);\r\n\r\n // callback\r\n if (isFunction(video)) callback = video;\r\n if (callback) api.one(\"ready\", callback);\r\n } else {\r\n api.loading = false;\r\n }\r\n }\r\n\r\n return api;\r\n },\r\n\r\n pause: function (fn) {\r\n if (api.hijacked) return api.hijacked.pause(fn) | api;\r\n\r\n if (api.ready && !api.seeking && !api.loading) {\r\n engine.pause();\r\n api.one(\"pause\", fn);\r\n }\r\n return api;\r\n },\r\n\r\n resume: function () {\r\n var ev = api.trigger('beforeresume', [api], true);\r\n if (ev.defaultPrevented) return;\r\n if (api.hijacked) return api.hijacked.resume() | api;\r\n\r\n if (api.ready && api.paused) {\r\n engine.resume();\r\n\r\n // Firefox (+others?) does not fire \"resume\" after finish\r\n if (api.finished) {\r\n api.trigger(\"resume\", [api]);\r\n api.finished = false;\r\n }\r\n }\r\n\r\n return api;\r\n },\r\n\r\n toggle: function () {\r\n return api.ready ? api.paused ? api.resume() : api.pause() : api.load();\r\n },\r\n\r\n /*\r\n seek(1.4) -> 1.4s time\r\n seek(true) -> 10% forward\r\n seek(false) -> 10% backward\r\n */\r\n seek: function (time, callback) {\r\n if (typeof time == \"boolean\") {\r\n var delta = api.video.duration * 0.1;\r\n time = api.video.time + (time ? delta : -delta);\r\n time = Math.min(Math.max(time, 0), api.video.duration - 0.1);\r\n }\r\n if (api.hijacked) return api.hijacked.seek(time, callback) | api;\r\n if (api.ready) {\r\n lastSeekPosition = time;\r\n var ev = api.trigger('beforeseek', [api, time], true);\r\n if (!ev.defaultPrevented) {\r\n engine.seek(time);\r\n if (isFunction(callback)) api.one(\"seek\", callback);\r\n } else {\r\n api.seeking = false;\r\n common.toggleClass(root, 'is-seeking', api.seeking); // remove loading indicator\r\n }\r\n }\r\n return api;\r\n },\r\n\r\n /*\r\n seekTo(1) -> 10%\r\n seekTo(2) -> 20%\r\n seekTo(3) -> 30%\r\n ...\r\n seekTo() -> last position\r\n */\r\n seekTo: function (position, fn) {\r\n if (position === undefined) return api.seek(lastSeekPosition, fn);\r\n if (api.video.seekOffset !== undefined) { // Live stream\r\n return api.seek(api.video.seekOffset + (api.video.duration - api.video.seekOffset) * 0.1 * position, fn);\r\n }\r\n return api.seek(api.video.duration * 0.1 * position, fn);\r\n },\r\n\r\n mute: function (flag, skipStore) {\r\n if (flag === undefined) flag = !api.muted;\r\n if (!skipStore) {\r\n storage.muted = api.muted = flag;\r\n storage.volume = !isNaN(storage.volume) ? storage.volume : conf.volume; // make sure storage has volume\r\n }\r\n api.volume(flag ? 0 : storage.volume, true);\r\n api.trigger(\"mute\", [api, flag]);\r\n return api;\r\n },\r\n\r\n volume: function (level, skipStore) {\r\n if (api.ready) {\r\n level = Math.min(Math.max(level, 0), 1);\r\n if (!skipStore) storage.volume = level;\r\n engine.volume(level);\r\n }\r\n\r\n return api;\r\n },\r\n\r\n speed: function (val, callback) {\r\n\r\n if (api.ready) {\r\n\r\n // increase / decrease\r\n if (typeof val == \"boolean\") {\r\n val = conf.speeds[conf.speeds.indexOf(api.currentSpeed) + (val ? 1 : -1)] || api.currentSpeed;\r\n }\r\n\r\n engine.speed(val);\r\n if (callback) root.one(\"speed\", callback);\r\n }\r\n\r\n return api;\r\n },\r\n\r\n\r\n stop: function () {\r\n if (api.ready) {\r\n api.pause();\r\n api.seek(0, function () {\r\n api.trigger(\"stop\", [api]);\r\n });\r\n }\r\n return api;\r\n },\r\n\r\n unload: function () {\r\n\r\n if (conf.splash) {\r\n api.trigger(\"unload\", [api]);\r\n if (engine) {\r\n engine.unload();\r\n api.engine = engine = 0;\r\n }\r\n } else {\r\n api.stop();\r\n }\r\n return api;\r\n },\r\n\r\n shutdown: function () {\r\n api.unload();\r\n api.trigger('shutdown', [api]);\r\n bean.off(root);\r\n delete instances[root.getAttribute('data-flowplayer-instance-id')];\r\n root.removeAttribute('data-flowplayer-instance-id');\r\n },\r\n\r\n disable: function (flag) {\r\n if (flag === undefined) flag = !api.disabled;\r\n\r\n if (flag != api.disabled) {\r\n api.disabled = flag;\r\n api.trigger(\"disable\", flag);\r\n }\r\n return api;\r\n },\r\n\r\n registerExtension: function (jsUrls, cssUrls) {\r\n jsUrls = jsUrls || [];\r\n cssUrls = cssUrls || [];\r\n if (typeof jsUrls === 'string') jsUrls = [jsUrls];\r\n if (typeof cssUrls === 'string') cssUrls = [cssUrls];\r\n jsUrls.forEach(function (url) { api.extensions.js.push(url); });\r\n cssUrls.forEach(function (url) { api.extensions.css.push(url); });\r\n }\r\n\r\n };\r\n\r\n api.conf = extend(api.conf, conf);\r\n api.extensions = { js: [], css: [] };\r\n flowplayer.extensions.forEach(function (i) {\r\n api.registerExtension(i[0], i[1]);\r\n });\r\n /* event binding / unbinding */\r\n events(api);\r\n\r\n var selectEngine = function (clip) {\r\n var engine;\r\n var engines = flowplayer.engines;\r\n if (conf.engine) {\r\n var eng = engines.filter(function (e) { return e.engineName === conf.engine; })[0];\r\n if (eng && clip.sources.some(function (source) {\r\n if (source.engine && source.engine !== eng.engineName) return false;\r\n return eng.canPlay(source.type, api.conf);\r\n })) return eng;\r\n }\r\n if (conf.enginePreference) engines = flowplayer.engines.filter(function (one) { return conf.enginePreference.indexOf(one.engineName) > -1; }).sort(function (a, b) {\r\n return conf.enginePreference.indexOf(a.engineName) - conf.enginePreference.indexOf(b.engineName);\r\n });\r\n clip.sources.some(function (source) {\r\n var eng = engines.filter(function (engine) {\r\n if (source.engine && source.engine !== engine.engineName) return false;\r\n return engine.canPlay(source.type, api.conf);\r\n }).shift();\r\n if (eng) engine = eng;\r\n return !!eng;\r\n });\r\n return engine;\r\n };\r\n\r\n /*** Behaviour ***/\r\n if (!root.getAttribute('data-flowplayer-instance-id')) { // Only bind once\r\n root.setAttribute('data-flowplayer-instance-id', playerCount++);\r\n\r\n\r\n api.on('boot', function () {\r\n\r\n // splash\r\n if (conf.splash || common.hasClass(root, \"is-splash\") || !flowplayer.support.firstframe) {\r\n api.forcedSplash = !conf.splash && !common.hasClass(root, \"is-splash\");\r\n api.splash = conf.autoplay = true;\r\n if (!conf.splash) conf.splash = true;\r\n common.addClass(root, \"is-splash\");\r\n }\r\n\r\n if (conf.splash) common.find('video', root).forEach(common.removeNode);\r\n\r\n if (conf.dvr || conf.live || common.hasClass(root, 'is-live')) {\r\n api.live = conf.live = true;\r\n api.dvr = conf.dvr = !!conf.dvr || common.hasClass(root, 'is-dvr');\r\n common.addClass(root, 'is-live');\r\n common.toggleClass(root, 'is-dvr', api.dvr);\r\n }\r\n\r\n // extensions\r\n extensions.forEach(function (e) {\r\n e(api, root);\r\n });\r\n\r\n // instances\r\n instances.push(api);\r\n\r\n // start\r\n if (conf.splash) api.unload(); else api.load();\r\n\r\n // disabled\r\n if (conf.disabled) api.disable();\r\n\r\n // initial callback\r\n api.one(\"ready\", callback);\r\n\r\n\r\n }).on(\"load\", function (e, api, video) {\r\n\r\n // unload others\r\n if (conf.splash) {\r\n common.find('.flowplayer.is-ready,.flowplayer.is-loading').forEach(function (el) {\r\n var playerId = el.getAttribute('data-flowplayer-instance-id');\r\n if (playerId === root.getAttribute('data-flowplayer-instance-id')) return;\r\n var a = instances[Number(playerId)];\r\n if (a && a.conf.splash) a.unload();\r\n });\r\n\r\n }\r\n\r\n // loading\r\n common.addClass(root, \"is-loading\");\r\n api.loading = true;\r\n\r\n if (typeof video.live !== 'undefined' || typeof video.dvr !== 'undefined') {\r\n common.toggleClass(root, 'is-live', video.dvr || video.live);\r\n common.toggleClass(root, 'is-dvr', !!video.dvr);\r\n api.live = video.dvr || video.live;\r\n api.dvr = !!video.dvr;\r\n }\r\n\r\n\r\n }).on(\"ready\", function (e, api, video) {\r\n video.time = 0;\r\n api.video = video;\r\n\r\n common.removeClass(root, \"is-loading\");\r\n api.loading = false;\r\n\r\n // saved state\r\n if (api.muted) api.mute(true, true);\r\n else api.volume(api.volumeLevel);\r\n\r\n // see https://github.com/flowplayer/flowplayer/issues/479\r\n\r\n var hlsFix = api.conf.hlsFix && /mpegurl/i.exec(video.type);\r\n common.toggleClass(root, 'hls-fix', !!hlsFix);\r\n\r\n }).on(\"unload\", function () {\r\n common.removeClass(root, \"is-loading\");\r\n api.loading = false;\r\n\r\n\r\n }).on(\"ready unload\", function (e) {\r\n var is_ready = e.type == \"ready\";\r\n common.toggleClass(root, 'is-splash', !is_ready);\r\n common.toggleClass(root, 'is-ready', is_ready);\r\n api.ready = is_ready;\r\n api.splash = !is_ready;\r\n\r\n\r\n }).on(\"progress\", function (e, api, time) {\r\n api.video.time = time;\r\n }).on('buffer', function (e, api, buffer) {\r\n api.video.buffer = buffer;\r\n }).on(\"speed\", function (e, api, val) {\r\n api.currentSpeed = val;\r\n\r\n }).on(\"volume\", function (e, api, level) {\r\n api.volumeLevel = Math.round(level * 100) / 100;\r\n if (!api.muted) storage.volume = level;\r\n else if (level) api.mute(false);\r\n\r\n\r\n }).on(\"beforeseek seek\", function (e) {\r\n api.seeking = e.type == \"beforeseek\";\r\n common.toggleClass(root, 'is-seeking', api.seeking);\r\n\r\n }).on(\"ready pause resume unload finish stop\", function (e) {\r\n\r\n // PAUSED: pause / finish\r\n api.paused = /pause|finish|unload|stop/.test(e.type);\r\n api.paused = api.paused || e.type === 'ready' && !conf.autoplay && !api.playing;\r\n\r\n // the opposite\r\n api.playing = !api.paused;\r\n\r\n // CSS classes\r\n common.toggleClass(root, 'is-paused', api.paused);\r\n common.toggleClass(root, 'is-playing', api.playing);\r\n\r\n // sanity check\r\n if (!api.load.ed) api.pause();\r\n\r\n }).on(\"finish\", function () {\r\n api.finished = true;\r\n\r\n }).on(\"error\", function () {\r\n });\r\n }\r\n\r\n // boot\r\n api.trigger('boot', [api, root]);\r\n return api;\r\n }\r\n\r\n }, { \"./common\": 1, \"./ext/events\": 10, \"./ext/resolve\": 19, \"./ext/ui/bar-slider\": 25, \"./ext/ui/slider\": 26, \"bean\": 31, \"extend-object\": 36, \"is-function\": 39 }], 29: [function (_dereq_, module, exports) {\r\n /* eslint-disable no-unused-vars */\r\n\r\n //Flowplayer with extensions\r\n\r\n _dereq_('es5-shim');\r\n\r\n var flowplayer = module.exports = _dereq_('./flowplayer');\r\n //\r\n\r\n //Support needed before engines\r\n _dereq_('./ext/support');\r\n\r\n //Engines\r\n _dereq_('./engine/embed');\r\n _dereq_('./engine/html5');\r\n _dereq_('./engine/flash');\r\n\r\n //Extensions\r\n //require('./ext/slider'); //TODO enable\r\n _dereq_('./ext/ui');\r\n _dereq_('./ext/message');\r\n _dereq_('./ext/keyboard');\r\n _dereq_('./ext/playlist');\r\n _dereq_('./ext/cuepoint');\r\n _dereq_('./ext/subtitle');\r\n _dereq_('./ext/analytics');\r\n _dereq_('./ext/share');\r\n _dereq_('./ext/facebook');\r\n _dereq_('./ext/twitter');\r\n _dereq_('./ext/embed');\r\n _dereq_('./ext/airplay');\r\n _dereq_('./ext/chromecast');\r\n _dereq_('./ext/qsel');\r\n _dereq_('./ext/menu');\r\n //Have to add fullscreen last\r\n _dereq_('./ext/fullscreen');\r\n\r\n _dereq_('./ext/mobile');\r\n flowplayer(function (o, e) { function r(o) { var e = \"ab.ca,ac.ac,ac.ae,ac.at,ac.be,ac.cn,ac.il,ac.in,ac.jp,ac.kr,ac.sg,ac.th,ac.uk,ad.jp,adm.br,adv.br,ah.cn,am.br,arq.br,art.br,arts.ro,asn.au,asso.fr,asso.mc,bc.ca,bio.br,biz.pl,biz.tr,bj.cn,br.com,cn.com,cng.br,cnt.br,co.ac,co.at,co.de,co.gl,co.hk,co.id,co.il,co.in,co.jp,co.kr,co.mg,co.ms,co.nz,co.th,co.uk,co.ve,co.vi,co.za,com.ag,com.ai,com.ar,com.au,com.br,com.cn,com.co,com.cy,com.de,com.do,com.ec,com.es,com.fj,com.fr,com.gl,com.gt,com.hk,com.hr,com.hu,com.kg,com.ki,com.lc,com.mg,com.mm,com.ms,com.mt,com.mu,com.mx,com.my,com.na,com.nf,com.ng,com.ni,com.pa,com.ph,com.pl,com.pt,com.qa,com.ro,com.ru,com.sb,com.sc,com.sg,com.sv,com.tr,com.tw,com.ua,com.uy,com.ve,com.vn,cp.tz,cq.cn,de.com,de.org,ecn.br,ed.jp,edu.au,edu.cn,edu.hk,edu.mm,edu.my,edu.pl,edu.pt,edu.qa,edu.sg,edu.tr,edu.tw,eng.br,ernet.in,esp.br,etc.br,eti.br,eu.com,eu.int,eu.lv,firm.in,firm.ro,fm.br,fot.br,fst.br,g12.br,gb.com,gb.net,gd.cn,gen.in,go.jp,go.kr,go.th,gov.au,gov.az,gov.br,gov.cn,gov.il,gov.in,gov.mm,gov.my,gov.qa,gov.sg,gov.tr,gov.tw,gov.uk,govt.nz,gr.jp,gs.cn,gv.ac,gv.at,gx.cn,gz.cn,he.cn,hi.cn,hk.cn,hl.cn,hu.com,id.au,idv.tw,in.ua,ind.br,ind.in,inf.br,info.pl,info.ro,info.tr,info.ve,iwi.nz,jl.cn,jor.br,js.cn,jus.br,k12.il,k12.tr,kr.com,lel.br,lg.jp,ln.cn,ltd.uk,maori.nz,mb.ca,me.uk,med.br,mi.th,mil.br,mil.uk,mo.cn,mod.uk,muni.il,nb.ca,ne.jp,ne.kr,net.ag,net.ai,net.au,net.br,net.cn,net.do,net.gl,net.hk,net.il,net.in,net.kg,net.ki,net.lc,net.mg,net.mm,net.mu,net.ni,net.nz,net.pl,net.ru,net.sb,net.sc,net.sg,net.th,net.tr,net.tw,net.uk,net.ve,nf.ca,nhs.uk,nm.cn,nm.kr,no.com,nom.br,nom.ni,nom.ro,ns.ca,nt.ca,nt.ro,ntr.br,nx.cn,odo.br,off.ai,on.ca,or.ac,or.at,or.jp,or.kr,or.th,org.ag,org.ai,org.au,org.br,org.cn,org.do,org.es,org.gl,org.hk,org.in,org.kg,org.ki,org.lc,org.mg,org.mm,org.ms,org.nf,org.ng,org.ni,org.nz,org.pl,org.ro,org.ru,org.sb,org.sc,org.sg,org.tr,org.tw,org.uk,org.ve,pe.ca,plc.uk,police.uk,ppg.br,presse.fr,pro.br,psc.br,psi.br,qc.ca,qc.com,qh.cn,rec.br,rec.ro,res.in,sa.com,sc.cn,sch.uk,se.com,se.net,sh.cn,sk.ca,slg.br,sn.cn,store.ro,tj.cn,tm.fr,tm.mc,tm.ro,tmp.br,tur.br,tv.br,tv.tr,tw.cn,uk.com,uk.net,us.com,uy.com,vet.br,waw.pl,web.ve,www.ro,xj.cn,xz.cn,yk.ca,yn.cn,zj.cn,zlg.br\".split(\",\"); o = o.toLowerCase(); var r = o.split(\".\"), n = r.length; if (n < 2 || /^\\d+$/.test(r[n - 1])) return o; var c = r.slice(-2).join(\".\"); return n >= 3 && e.indexOf(c) >= 0 ? r.slice(-3).join(\".\") : c } function n(o, e) { e = r(e); for (var n = 0, c = e.length - 1; c >= 0; c--)n += 5285928321 * e.charCodeAt(c); for (n = (\"\" + n).substring(0, 7), c = 0; c < o.length; c++)if (n === o[c].substring(1, 8)) return 1 } var c = function (o) { return \"none\" !== window.getComputedStyle(o).display }, t = o.conf, a = flowplayer.common, m = a.createElement, i = t.swf.indexOf(\"flowplayer.org\") && t.e && e.getAttribute(\"data-origin\"), g = i ? function (o) { var e = document.createElement(\"a\"); return e.href = o, a.hostname(e.hostname) }(i) : a.hostname(), l = (document, t.key); if (\"file:\" == location.protocol && (g = \"localhost\"), o.load.ed = 1, t.hostname = g, t.origin = i || location.href, i && function (o, e) { -1 === o.className.split(\" \").indexOf(e) && (o.className += \" \" + e) }(e, \"is-embedded\"), \"string\" == typeof l && (l = l.split(/,\\s*/)), l && \"function\" == typeof n && n(l, g)) { if (t.logo) { var s = a.find(\".fp-player\", e)[0], p = m(\"a\", { className: \"fp-logo\" }); i && (p.href = i), t.embed && t.embed.popup && (p.target = \"_blank\"); var u = m(\"img\", { src: t.logo }); p.appendChild(u), (s || e).appendChild(p) } } else { var p = m(\"a\", { href: \"https://flowplayer.org/hello/?from=player\" }); e.appendChild(p); var d = m(\"div\", { className: \"fp-context-menu fp-menu\" }, '© 2017 FlowplayerAbout FlowplayerGPL based license'), f = window.location.href.indexOf(\"localhost\"), s = a.find(\".fp-player\", e)[0]; 7 !== f && (s || e).appendChild(d), o.on(\"pause resume finish unload ready\", function (o, r) { var n = -1; if (r.video.src) for (var t = [[\"org\", \"flowplayer\", \"drive\"], [\"org\", \"flowplayer\", \"my\"], [\"org\", \"flowplayer\", \"cdn\"]], a = 0; a < t.length && -1 === (n = r.video.src.indexOf(\"://\" + t[a].reverse().join(\".\"))); a++); if (/pause|resume/.test(o.type) && \"flash\" != r.engine.engineName && 4 != n && 5 != n) { var m = { display: \"block\", position: \"absolute\", left: \"16px\", bottom: \"70px\", zIndex: 99999, width: \"100px\", height: \"20px\", backgroundImage: \"url(\" + [\".png\", \"logo\", \"/\", \".net\", \".cloudfront\", \"d32wqyuo10o653\", \"//\"].reverse().join(\"\") + \")\" }; for (var i in m) m.hasOwnProperty(i) && (p.style[i] = m[i]); r.load.ed = c(p) && (7 === f || d.parentNode == e || d.parentNode == s), r.load.ed || r.pause() } else p.style.display = \"none\" }) } });\r\n\r\n\r\n }, { \"./engine/embed\": 2, \"./engine/flash\": 3, \"./engine/html5\": 4, \"./ext/airplay\": 5, \"./ext/analytics\": 6, \"./ext/chromecast\": 7, \"./ext/cuepoint\": 8, \"./ext/embed\": 9, \"./ext/facebook\": 11, \"./ext/fullscreen\": 12, \"./ext/keyboard\": 13, \"./ext/menu\": 14, \"./ext/message\": 15, \"./ext/mobile\": 16, \"./ext/playlist\": 17, \"./ext/qsel\": 18, \"./ext/share\": 20, \"./ext/subtitle\": 21, \"./ext/support\": 22, \"./ext/twitter\": 23, \"./ext/ui\": 24, \"./flowplayer\": 28, \"es5-shim\": 35 }], 30: [function (_dereq_, module, exports) {\r\n 'use strict'\r\n\r\n exports.byteLength = byteLength\r\n exports.toByteArray = toByteArray\r\n exports.fromByteArray = fromByteArray\r\n\r\n var lookup = []\r\n var revLookup = []\r\n var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\r\n\r\n var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\r\n for (var i = 0, len = code.length; i < len; ++i) {\r\n lookup[i] = code[i]\r\n revLookup[code.charCodeAt(i)] = i\r\n }\r\n\r\n revLookup['-'.charCodeAt(0)] = 62\r\n revLookup['_'.charCodeAt(0)] = 63\r\n\r\n function placeHoldersCount(b64) {\r\n var len = b64.length\r\n if (len % 4 > 0) {\r\n throw new Error('Invalid string. Length must be a multiple of 4')\r\n }\r\n\r\n // the number of equal signs (place holders)\r\n // if there are two placeholders, than the two characters before it\r\n // represent one byte\r\n // if there is only one, then the three characters before it represent 2 bytes\r\n // this is just a cheap hack to not do indexOf twice\r\n return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0\r\n }\r\n\r\n function byteLength(b64) {\r\n // base64 is 4/3 + up to two characters of the original data\r\n return b64.length * 3 / 4 - placeHoldersCount(b64)\r\n }\r\n\r\n function toByteArray(b64) {\r\n var i, j, l, tmp, placeHolders, arr\r\n var len = b64.length\r\n placeHolders = placeHoldersCount(b64)\r\n\r\n arr = new Arr(len * 3 / 4 - placeHolders)\r\n\r\n // if there are placeholders, only get up to the last complete 4 chars\r\n l = placeHolders > 0 ? len - 4 : len\r\n\r\n var L = 0\r\n\r\n for (i = 0, j = 0; i < l; i += 4, j += 3) {\r\n tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]\r\n arr[L++] = (tmp >> 16) & 0xFF\r\n arr[L++] = (tmp >> 8) & 0xFF\r\n arr[L++] = tmp & 0xFF\r\n }\r\n\r\n if (placeHolders === 2) {\r\n tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)\r\n arr[L++] = tmp & 0xFF\r\n } else if (placeHolders === 1) {\r\n tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)\r\n arr[L++] = (tmp >> 8) & 0xFF\r\n arr[L++] = tmp & 0xFF\r\n }\r\n\r\n return arr\r\n }\r\n\r\n function tripletToBase64(num) {\r\n return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]\r\n }\r\n\r\n function encodeChunk(uint8, start, end) {\r\n var tmp\r\n var output = []\r\n for (var i = start; i < end; i += 3) {\r\n tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])\r\n output.push(tripletToBase64(tmp))\r\n }\r\n return output.join('')\r\n }\r\n\r\n function fromByteArray(uint8) {\r\n var tmp\r\n var len = uint8.length\r\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\r\n var output = ''\r\n var parts = []\r\n var maxChunkLength = 16383 // must be multiple of 3\r\n\r\n // go through the array every three bytes, we'll deal with trailing stuff later\r\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\r\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\r\n }\r\n\r\n // pad the end with zeros, but make sure to not forget the extra bytes\r\n if (extraBytes === 1) {\r\n tmp = uint8[len - 1]\r\n output += lookup[tmp >> 2]\r\n output += lookup[(tmp << 4) & 0x3F]\r\n output += '=='\r\n } else if (extraBytes === 2) {\r\n tmp = (uint8[len - 2] << 8) + (uint8[len - 1])\r\n output += lookup[tmp >> 10]\r\n output += lookup[(tmp >> 4) & 0x3F]\r\n output += lookup[(tmp << 2) & 0x3F]\r\n output += '='\r\n }\r\n\r\n parts.push(output)\r\n\r\n return parts.join('')\r\n }\r\n\r\n }, {}], 31: [function (_dereq_, module, exports) {\r\n /*!\r\n * Bean - copyright (c) Jacob Thornton 2011-2012\r\n * https://github.com/fat/bean\r\n * MIT license\r\n */\r\n (function (name, context, definition) {\r\n if (typeof module != 'undefined' && module.exports) module.exports = definition()\r\n else if (typeof define == 'function' && define.amd) define(definition)\r\n else context[name] = definition()\r\n })('bean', this, function (name, context) {\r\n name = name || 'bean'\r\n context = context || this\r\n\r\n var win = window\r\n , old = context[name]\r\n , namespaceRegex = /[^\\.]*(?=\\..*)\\.|.*/\r\n , nameRegex = /\\..*/\r\n , addEvent = 'addEventListener'\r\n , removeEvent = 'removeEventListener'\r\n , doc = document || {}\r\n , root = doc.documentElement || {}\r\n , W3C_MODEL = root[addEvent]\r\n , eventSupport = W3C_MODEL ? addEvent : 'attachEvent'\r\n , ONE = {} // singleton for quick matching making add() do one()\r\n\r\n , slice = Array.prototype.slice\r\n , str2arr = function (s, d) { return s.split(d || ' ') }\r\n , isString = function (o) { return typeof o == 'string' }\r\n , isFunction = function (o) { return typeof o == 'function' }\r\n\r\n // events that we consider to be 'native', anything not in this list will\r\n // be treated as a custom event\r\n , standardNativeEvents =\r\n 'click dblclick mouseup mousedown contextmenu ' + // mouse buttons\r\n 'mousewheel mousemultiwheel DOMMouseScroll ' + // mouse wheel\r\n 'mouseover mouseout mousemove selectstart selectend ' + // mouse movement\r\n 'keydown keypress keyup ' + // keyboard\r\n 'orientationchange ' + // mobile\r\n 'focus blur change reset select submit ' + // form elements\r\n 'load unload beforeunload resize move DOMContentLoaded ' + // window\r\n 'readystatechange message ' + // window\r\n 'error abort scroll ' // misc\r\n // element.fireEvent('onXYZ'... is not forgiving if we try to fire an event\r\n // that doesn't actually exist, so make sure we only do these on newer browsers\r\n , w3cNativeEvents =\r\n 'show ' + // mouse buttons\r\n 'input invalid ' + // form elements\r\n 'touchstart touchmove touchend touchcancel ' + // touch\r\n 'gesturestart gesturechange gestureend ' + // gesture\r\n 'textinput ' + // TextEvent\r\n 'readystatechange pageshow pagehide popstate ' + // window\r\n 'hashchange offline online ' + // window\r\n 'afterprint beforeprint ' + // printing\r\n 'dragstart dragenter dragover dragleave drag drop dragend ' + // dnd\r\n 'loadstart progress suspend emptied stalled loadmetadata ' + // media\r\n 'loadeddata canplay canplaythrough playing waiting seeking ' + // media\r\n 'seeked ended durationchange timeupdate play pause ratechange ' + // media\r\n 'volumechange cuechange ' + // media\r\n 'checking noupdate downloading cached updateready obsolete ' // appcache\r\n\r\n // convert to a hash for quick lookups\r\n , nativeEvents = (function (hash, events, i) {\r\n for (i = 0; i < events.length; i++) events[i] && (hash[events[i]] = 1)\r\n return hash\r\n }({}, str2arr(standardNativeEvents + (W3C_MODEL ? w3cNativeEvents : ''))))\r\n\r\n // custom events are events that we *fake*, they are not provided natively but\r\n // we can use native events to generate them\r\n , customEvents = (function () {\r\n var isAncestor = 'compareDocumentPosition' in root\r\n ? function (element, container) {\r\n return container.compareDocumentPosition && (container.compareDocumentPosition(element) & 16) === 16\r\n }\r\n : 'contains' in root\r\n ? function (element, container) {\r\n container = container.nodeType === 9 || container === window ? root : container\r\n return container !== element && container.contains(element)\r\n }\r\n : function (element, container) {\r\n while (element = element.parentNode) if (element === container) return 1\r\n return 0\r\n }\r\n , check = function (event) {\r\n var related = event.relatedTarget\r\n return !related\r\n ? related == null\r\n : (related !== this && related.prefix !== 'xul' && !/document/.test(this.toString())\r\n && !isAncestor(related, this))\r\n }\r\n\r\n return {\r\n mouseenter: { base: 'mouseover', condition: check }\r\n , mouseleave: { base: 'mouseout', condition: check }\r\n , mousewheel: { base: /Firefox/.test(navigator.userAgent) ? 'DOMMouseScroll' : 'mousewheel' }\r\n }\r\n }())\r\n\r\n // we provide a consistent Event object across browsers by taking the actual DOM\r\n // event object and generating a new one from its properties.\r\n , Event = (function () {\r\n // a whitelist of properties (for different event types) tells us what to check for and copy\r\n var commonProps = str2arr('altKey attrChange attrName bubbles cancelable ctrlKey currentTarget ' +\r\n 'detail eventPhase getModifierState isTrusted metaKey relatedNode relatedTarget shiftKey ' +\r\n 'srcElement target timeStamp type view which propertyName')\r\n , mouseProps = commonProps.concat(str2arr('button buttons clientX clientY dataTransfer ' +\r\n 'fromElement offsetX offsetY pageX pageY screenX screenY toElement'))\r\n , mouseWheelProps = mouseProps.concat(str2arr('wheelDelta wheelDeltaX wheelDeltaY wheelDeltaZ ' +\r\n 'axis')) // 'axis' is FF specific\r\n , keyProps = commonProps.concat(str2arr('char charCode key keyCode keyIdentifier ' +\r\n 'keyLocation location'))\r\n , textProps = commonProps.concat(str2arr('data'))\r\n , touchProps = commonProps.concat(str2arr('touches targetTouches changedTouches scale rotation'))\r\n , messageProps = commonProps.concat(str2arr('data origin source'))\r\n , stateProps = commonProps.concat(str2arr('state'))\r\n , overOutRegex = /over|out/\r\n // some event types need special handling and some need special properties, do that all here\r\n , typeFixers = [\r\n { // key events\r\n reg: /key/i\r\n , fix: function (event, newEvent) {\r\n newEvent.keyCode = event.keyCode || event.which\r\n return keyProps\r\n }\r\n }\r\n , { // mouse events\r\n reg: /click|mouse(?!(.*wheel|scroll))|menu|drag|drop/i\r\n , fix: function (event, newEvent, type) {\r\n newEvent.rightClick = event.which === 3 || event.button === 2\r\n newEvent.pos = { x: 0, y: 0 }\r\n if (event.pageX || event.pageY) {\r\n newEvent.clientX = event.pageX\r\n newEvent.clientY = event.pageY\r\n } else if (event.clientX || event.clientY) {\r\n newEvent.clientX = event.clientX + doc.body.scrollLeft + root.scrollLeft\r\n newEvent.clientY = event.clientY + doc.body.scrollTop + root.scrollTop\r\n }\r\n if (overOutRegex.test(type)) {\r\n newEvent.relatedTarget = event.relatedTarget\r\n || event[(type == 'mouseover' ? 'from' : 'to') + 'Element']\r\n }\r\n return mouseProps\r\n }\r\n }\r\n , { // mouse wheel events\r\n reg: /mouse.*(wheel|scroll)/i\r\n , fix: function () { return mouseWheelProps }\r\n }\r\n , { // TextEvent\r\n reg: /^text/i\r\n , fix: function () { return textProps }\r\n }\r\n , { // touch and gesture events\r\n reg: /^touch|^gesture/i\r\n , fix: function () { return touchProps }\r\n }\r\n , { // message events\r\n reg: /^message$/i\r\n , fix: function () { return messageProps }\r\n }\r\n , { // popstate events\r\n reg: /^popstate$/i\r\n , fix: function () { return stateProps }\r\n }\r\n , { // everything else\r\n reg: /.*/\r\n , fix: function () { return commonProps }\r\n }\r\n ]\r\n , typeFixerMap = {} // used to map event types to fixer functions (above), a basic cache mechanism\r\n\r\n , Event = function (event, element, isNative) {\r\n if (!arguments.length) return\r\n event = event || ((element.ownerDocument || element.document || element).parentWindow || win).event\r\n this.originalEvent = event\r\n this.isNative = isNative\r\n this.isBean = true\r\n\r\n if (!event) return\r\n\r\n var type = event.type\r\n , target = event.target || event.srcElement\r\n , i, l, p, props, fixer\r\n\r\n this.target = target && target.nodeType === 3 ? target.parentNode : target\r\n\r\n if (isNative) { // we only need basic augmentation on custom events, the rest expensive & pointless\r\n fixer = typeFixerMap[type]\r\n if (!fixer) { // haven't encountered this event type before, map a fixer function for it\r\n for (i = 0, l = typeFixers.length; i < l; i++) {\r\n if (typeFixers[i].reg.test(type)) { // guaranteed to match at least one, last is .*\r\n typeFixerMap[type] = fixer = typeFixers[i].fix\r\n break\r\n }\r\n }\r\n }\r\n\r\n props = fixer(event, this, type)\r\n for (i = props.length; i--;) {\r\n if (!((p = props[i]) in this) && p in event) this[p] = event[p]\r\n }\r\n }\r\n }\r\n\r\n // preventDefault() and stopPropagation() are a consistent interface to those functions\r\n // on the DOM, stop() is an alias for both of them together\r\n Event.prototype.preventDefault = function () {\r\n if (this.originalEvent.preventDefault) this.originalEvent.preventDefault()\r\n else this.originalEvent.returnValue = false\r\n }\r\n Event.prototype.stopPropagation = function () {\r\n if (this.originalEvent.stopPropagation) this.originalEvent.stopPropagation()\r\n else this.originalEvent.cancelBubble = true\r\n }\r\n Event.prototype.stop = function () {\r\n this.preventDefault()\r\n this.stopPropagation()\r\n this.stopped = true\r\n }\r\n // stopImmediatePropagation() has to be handled internally because we manage the event list for\r\n // each element\r\n // note that originalElement may be a Bean#Event object in some situations\r\n Event.prototype.stopImmediatePropagation = function () {\r\n if (this.originalEvent.stopImmediatePropagation) this.originalEvent.stopImmediatePropagation()\r\n this.isImmediatePropagationStopped = function () { return true }\r\n }\r\n Event.prototype.isImmediatePropagationStopped = function () {\r\n return this.originalEvent.isImmediatePropagationStopped && this.originalEvent.isImmediatePropagationStopped()\r\n }\r\n Event.prototype.clone = function (currentTarget) {\r\n //TODO: this is ripe for optimisation, new events are *expensive*\r\n // improving this will speed up delegated events\r\n var ne = new Event(this, this.element, this.isNative)\r\n ne.currentTarget = currentTarget\r\n return ne\r\n }\r\n\r\n return Event\r\n }())\r\n\r\n // if we're in old IE we can't do onpropertychange on doc or win so we use doc.documentElement for both\r\n , targetElement = function (element, isNative) {\r\n return !W3C_MODEL && !isNative && (element === doc || element === win) ? root : element\r\n }\r\n\r\n /**\r\n * Bean maintains an internal registry for event listeners. We don't touch elements, objects\r\n * or functions to identify them, instead we store everything in the registry.\r\n * Each event listener has a RegEntry object, we have one 'registry' for the whole instance.\r\n */\r\n , RegEntry = (function () {\r\n // each handler is wrapped so we can handle delegation and custom events\r\n var wrappedHandler = function (element, fn, condition, args) {\r\n var call = function (event, eargs) {\r\n return fn.apply(element, args ? slice.call(eargs, event ? 0 : 1).concat(args) : eargs)\r\n }\r\n , findTarget = function (event, eventElement) {\r\n return fn.__beanDel ? fn.__beanDel.ft(event.target, element) : eventElement\r\n }\r\n , handler = condition\r\n ? function (event) {\r\n var target = findTarget(event, this) // deleated event\r\n if (condition.apply(target, arguments)) {\r\n if (event) event.currentTarget = target\r\n return call(event, arguments)\r\n }\r\n }\r\n : function (event) {\r\n if (fn.__beanDel) event = event.clone(findTarget(event)) // delegated event, fix the fix\r\n return call(event, arguments)\r\n }\r\n handler.__beanDel = fn.__beanDel\r\n return handler\r\n }\r\n\r\n , RegEntry = function (element, type, handler, original, namespaces, args, root) {\r\n var customType = customEvents[type]\r\n , isNative\r\n\r\n if (type == 'unload') {\r\n // self clean-up\r\n handler = once(removeListener, element, type, handler, original)\r\n }\r\n\r\n if (customType) {\r\n if (customType.condition) {\r\n handler = wrappedHandler(element, handler, customType.condition, args)\r\n }\r\n type = customType.base || type\r\n }\r\n\r\n this.isNative = isNative = nativeEvents[type] && !!element[eventSupport]\r\n this.customType = !W3C_MODEL && !isNative && type\r\n this.element = element\r\n this.type = type\r\n this.original = original\r\n this.namespaces = namespaces\r\n this.eventType = W3C_MODEL || isNative ? type : 'propertychange'\r\n this.target = targetElement(element, isNative)\r\n this[eventSupport] = !!this.target[eventSupport]\r\n this.root = root\r\n this.handler = wrappedHandler(element, handler, null, args)\r\n }\r\n\r\n // given a list of namespaces, is our entry in any of them?\r\n RegEntry.prototype.inNamespaces = function (checkNamespaces) {\r\n var i, j, c = 0\r\n if (!checkNamespaces) return true\r\n if (!this.namespaces) return false\r\n for (i = checkNamespaces.length; i--;) {\r\n for (j = this.namespaces.length; j--;) {\r\n if (checkNamespaces[i] == this.namespaces[j]) c++\r\n }\r\n }\r\n return checkNamespaces.length === c\r\n }\r\n\r\n // match by element, original fn (opt), handler fn (opt)\r\n RegEntry.prototype.matches = function (checkElement, checkOriginal, checkHandler) {\r\n return this.element === checkElement &&\r\n (!checkOriginal || this.original === checkOriginal) &&\r\n (!checkHandler || this.handler === checkHandler)\r\n }\r\n\r\n return RegEntry\r\n }())\r\n\r\n , registry = (function () {\r\n // our map stores arrays by event type, just because it's better than storing\r\n // everything in a single array.\r\n // uses '$' as a prefix for the keys for safety and 'r' as a special prefix for\r\n // rootListeners so we can look them up fast\r\n var map = {}\r\n\r\n // generic functional search of our registry for matching listeners,\r\n // `fn` returns false to break out of the loop\r\n , forAll = function (element, type, original, handler, root, fn) {\r\n var pfx = root ? 'r' : '$'\r\n if (!type || type == '*') {\r\n // search the whole registry\r\n for (var t in map) {\r\n if (t.charAt(0) == pfx) {\r\n forAll(element, t.substr(1), original, handler, root, fn)\r\n }\r\n }\r\n } else {\r\n var i = 0, l, list = map[pfx + type], all = element == '*'\r\n if (!list) return\r\n for (l = list.length; i < l; i++) {\r\n if ((all || list[i].matches(element, original, handler)) && !fn(list[i], list, i, type)) return\r\n }\r\n }\r\n }\r\n\r\n , has = function (element, type, original, root) {\r\n // we're not using forAll here simply because it's a bit slower and this\r\n // needs to be fast\r\n var i, list = map[(root ? 'r' : '$') + type]\r\n if (list) {\r\n for (i = list.length; i--;) {\r\n if (!list[i].root && list[i].matches(element, original, null)) return true\r\n }\r\n }\r\n return false\r\n }\r\n\r\n , get = function (element, type, original, root) {\r\n var entries = []\r\n forAll(element, type, original, null, root, function (entry) {\r\n return entries.push(entry)\r\n })\r\n return entries\r\n }\r\n\r\n , put = function (entry) {\r\n var has = !entry.root && !this.has(entry.element, entry.type, null, false)\r\n , key = (entry.root ? 'r' : '$') + entry.type\r\n ; (map[key] || (map[key] = [])).push(entry)\r\n return has\r\n }\r\n\r\n , del = function (entry) {\r\n forAll(entry.element, entry.type, null, entry.handler, entry.root, function (entry, list, i) {\r\n list.splice(i, 1)\r\n entry.removed = true\r\n if (list.length === 0) delete map[(entry.root ? 'r' : '$') + entry.type]\r\n return false\r\n })\r\n }\r\n\r\n // dump all entries, used for onunload\r\n , entries = function () {\r\n var t, entries = []\r\n for (t in map) {\r\n if (t.charAt(0) == '$') entries = entries.concat(map[t])\r\n }\r\n return entries\r\n }\r\n\r\n return { has: has, get: get, put: put, del: del, entries: entries }\r\n }())\r\n\r\n // we need a selector engine for delegated events, use querySelectorAll if it exists\r\n // but for older browsers we need Qwery, Sizzle or similar\r\n , selectorEngine\r\n , setSelectorEngine = function (e) {\r\n if (!arguments.length) {\r\n selectorEngine = doc.querySelectorAll\r\n ? function (s, r) {\r\n return r.querySelectorAll(s)\r\n }\r\n : function () {\r\n throw new Error('Bean: No selector engine installed') // eeek\r\n }\r\n } else {\r\n selectorEngine = e\r\n }\r\n }\r\n\r\n // we attach this listener to each DOM event that we need to listen to, only once\r\n // per event type per DOM element\r\n , rootListener = function (event, type) {\r\n if (!W3C_MODEL && type && event && event.propertyName != '_on' + type) return\r\n\r\n var listeners = registry.get(this, type || event.type, null, false)\r\n , l = listeners.length\r\n , i = 0\r\n\r\n event = new Event(event, this, true)\r\n if (type) event.type = type\r\n\r\n // iterate through all handlers registered for this type, calling them unless they have\r\n // been removed by a previous handler or stopImmediatePropagation() has been called\r\n for (; i < l && !event.isImmediatePropagationStopped(); i++) {\r\n if (!listeners[i].removed) listeners[i].handler.call(this, event)\r\n }\r\n }\r\n\r\n // add and remove listeners to DOM elements\r\n , listener = W3C_MODEL\r\n ? function (element, type, add) {\r\n // new browsers\r\n element[add ? addEvent : removeEvent](type, rootListener, false)\r\n }\r\n : function (element, type, add, custom) {\r\n // IE8 and below, use attachEvent/detachEvent and we have to piggy-back propertychange events\r\n // to simulate event bubbling etc.\r\n var entry\r\n if (add) {\r\n registry.put(entry = new RegEntry(\r\n element\r\n , custom || type\r\n , function (event) { // handler\r\n rootListener.call(element, event, custom)\r\n }\r\n , rootListener\r\n , null\r\n , null\r\n , true // is root\r\n ))\r\n if (custom && element['_on' + custom] == null) element['_on' + custom] = 0\r\n entry.target.attachEvent('on' + entry.eventType, entry.handler)\r\n } else {\r\n entry = registry.get(element, custom || type, rootListener, true)[0]\r\n if (entry) {\r\n entry.target.detachEvent('on' + entry.eventType, entry.handler)\r\n registry.del(entry)\r\n }\r\n }\r\n }\r\n\r\n , once = function (rm, element, type, fn, originalFn) {\r\n // wrap the handler in a handler that does a remove as well\r\n return function () {\r\n fn.apply(this, arguments)\r\n rm(element, type, originalFn)\r\n }\r\n }\r\n\r\n , removeListener = function (element, orgType, handler, namespaces) {\r\n var type = orgType && orgType.replace(nameRegex, '')\r\n , handlers = registry.get(element, type, null, false)\r\n , removed = {}\r\n , i, l\r\n\r\n for (i = 0, l = handlers.length; i < l; i++) {\r\n if ((!handler || handlers[i].original === handler) && handlers[i].inNamespaces(namespaces)) {\r\n // TODO: this is problematic, we have a registry.get() and registry.del() that\r\n // both do registry searches so we waste cycles doing this. Needs to be rolled into\r\n // a single registry.forAll(fn) that removes while finding, but the catch is that\r\n // we'll be splicing the arrays that we're iterating over. Needs extra tests to\r\n // make sure we don't screw it up. @rvagg\r\n registry.del(handlers[i])\r\n if (!removed[handlers[i].eventType] && handlers[i][eventSupport])\r\n removed[handlers[i].eventType] = { t: handlers[i].eventType, c: handlers[i].type }\r\n }\r\n }\r\n // check each type/element for removed listeners and remove the rootListener where it's no longer needed\r\n for (i in removed) {\r\n if (!registry.has(element, removed[i].t, null, false)) {\r\n // last listener of this type, remove the rootListener\r\n listener(element, removed[i].t, false, removed[i].c)\r\n }\r\n }\r\n }\r\n\r\n // set up a delegate helper using the given selector, wrap the handler function\r\n , delegate = function (selector, fn) {\r\n //TODO: findTarget (therefore $) is called twice, once for match and once for\r\n // setting e.currentTarget, fix this so it's only needed once\r\n var findTarget = function (target, root) {\r\n var i, array = isString(selector) ? selectorEngine(selector, root) : selector\r\n for (; target && target !== root; target = target.parentNode) {\r\n for (i = array.length; i--;) {\r\n if (array[i] === target) return target\r\n }\r\n }\r\n }\r\n , handler = function (e) {\r\n var match = findTarget(e.target, this)\r\n if (match) fn.apply(match, arguments)\r\n }\r\n\r\n // __beanDel isn't pleasant but it's a private function, not exposed outside of Bean\r\n handler.__beanDel = {\r\n ft: findTarget // attach it here for customEvents to use too\r\n , selector: selector\r\n }\r\n return handler\r\n }\r\n\r\n , fireListener = W3C_MODEL ? function (isNative, type, element) {\r\n // modern browsers, do a proper dispatchEvent()\r\n var evt = doc.createEvent(isNative ? 'HTMLEvents' : 'UIEvents')\r\n evt[isNative ? 'initEvent' : 'initUIEvent'](type, true, true, win, 1)\r\n element.dispatchEvent(evt)\r\n } : function (isNative, type, element) {\r\n // old browser use onpropertychange, just increment a custom property to trigger the event\r\n element = targetElement(element, isNative)\r\n isNative ? element.fireEvent('on' + type, doc.createEventObject()) : element['_on' + type]++\r\n }\r\n\r\n /**\r\n * Public API: off(), on(), add(), (remove()), one(), fire(), clone()\r\n */\r\n\r\n /**\r\n * off(element[, eventType(s)[, handler ]])\r\n */\r\n , off = function (element, typeSpec, fn) {\r\n var isTypeStr = isString(typeSpec)\r\n , k, type, namespaces, i\r\n\r\n if (isTypeStr && typeSpec.indexOf(' ') > 0) {\r\n // off(el, 't1 t2 t3', fn) or off(el, 't1 t2 t3')\r\n typeSpec = str2arr(typeSpec)\r\n for (i = typeSpec.length; i--;)\r\n off(element, typeSpec[i], fn)\r\n return element\r\n }\r\n\r\n type = isTypeStr && typeSpec.replace(nameRegex, '')\r\n if (type && customEvents[type]) type = customEvents[type].base\r\n\r\n if (!typeSpec || isTypeStr) {\r\n // off(el) or off(el, t1.ns) or off(el, .ns) or off(el, .ns1.ns2.ns3)\r\n if (namespaces = isTypeStr && typeSpec.replace(namespaceRegex, '')) namespaces = str2arr(namespaces, '.')\r\n removeListener(element, type, fn, namespaces)\r\n } else if (isFunction(typeSpec)) {\r\n // off(el, fn)\r\n removeListener(element, null, typeSpec)\r\n } else {\r\n // off(el, { t1: fn1, t2, fn2 })\r\n for (k in typeSpec) {\r\n if (typeSpec.hasOwnProperty(k)) off(element, k, typeSpec[k])\r\n }\r\n }\r\n\r\n return element\r\n }\r\n\r\n /**\r\n * on(element, eventType(s)[, selector], handler[, args ])\r\n */\r\n , on = function (element, events, selector, fn) {\r\n var originalFn, type, types, i, args, entry, first\r\n\r\n //TODO: the undefined check means you can't pass an 'args' argument, fix this perhaps?\r\n if (selector === undefined && typeof events == 'object') {\r\n //TODO: this can't handle delegated events\r\n for (type in events) {\r\n if (events.hasOwnProperty(type)) {\r\n on.call(this, element, type, events[type])\r\n }\r\n }\r\n return\r\n }\r\n\r\n if (!isFunction(selector)) {\r\n // delegated event\r\n originalFn = fn\r\n args = slice.call(arguments, 4)\r\n fn = delegate(selector, originalFn, selectorEngine)\r\n } else {\r\n args = slice.call(arguments, 3)\r\n fn = originalFn = selector\r\n }\r\n\r\n types = str2arr(events)\r\n\r\n // special case for one(), wrap in a self-removing handler\r\n if (this === ONE) {\r\n fn = once(off, element, events, fn, originalFn)\r\n }\r\n\r\n for (i = types.length; i--;) {\r\n // add new handler to the registry and check if it's the first for this element/type\r\n first = registry.put(entry = new RegEntry(\r\n element\r\n , types[i].replace(nameRegex, '') // event type\r\n , fn\r\n , originalFn\r\n , str2arr(types[i].replace(namespaceRegex, ''), '.') // namespaces\r\n , args\r\n , false // not root\r\n ))\r\n if (entry[eventSupport] && first) {\r\n // first event of this type on this element, add root listener\r\n listener(element, entry.eventType, true, entry.customType)\r\n }\r\n }\r\n\r\n return element\r\n }\r\n\r\n /**\r\n * add(element[, selector], eventType(s), handler[, args ])\r\n *\r\n * Deprecated: kept (for now) for backward-compatibility\r\n */\r\n , add = function (element, events, fn, delfn) {\r\n return on.apply(\r\n null\r\n , !isString(fn)\r\n ? slice.call(arguments)\r\n : [element, fn, events, delfn].concat(arguments.length > 3 ? slice.call(arguments, 5) : [])\r\n )\r\n }\r\n\r\n /**\r\n * one(element, eventType(s)[, selector], handler[, args ])\r\n */\r\n , one = function () {\r\n return on.apply(ONE, arguments)\r\n }\r\n\r\n /**\r\n * fire(element, eventType(s)[, args ])\r\n *\r\n * The optional 'args' argument must be an array, if no 'args' argument is provided\r\n * then we can use the browser's DOM event system, otherwise we trigger handlers manually\r\n */\r\n , fire = function (element, type, args) {\r\n var types = str2arr(type)\r\n , i, j, l, names, handlers\r\n\r\n for (i = types.length; i--;) {\r\n type = types[i].replace(nameRegex, '')\r\n if (names = types[i].replace(namespaceRegex, '')) names = str2arr(names, '.')\r\n if (!names && !args && element[eventSupport]) {\r\n fireListener(nativeEvents[type], type, element)\r\n } else {\r\n // non-native event, either because of a namespace, arguments or a non DOM element\r\n // iterate over all listeners and manually 'fire'\r\n handlers = registry.get(element, type, null, false)\r\n args = [false].concat(args)\r\n for (j = 0, l = handlers.length; j < l; j++) {\r\n if (handlers[j].inNamespaces(names)) {\r\n handlers[j].handler.apply(element, args)\r\n }\r\n }\r\n }\r\n }\r\n return element\r\n }\r\n\r\n /**\r\n * clone(dstElement, srcElement[, eventType ])\r\n *\r\n * TODO: perhaps for consistency we should allow the same flexibility in type specifiers?\r\n */\r\n , clone = function (element, from, type) {\r\n var handlers = registry.get(from, type, null, false)\r\n , l = handlers.length\r\n , i = 0\r\n , args, beanDel\r\n\r\n for (; i < l; i++) {\r\n if (handlers[i].original) {\r\n args = [element, handlers[i].type]\r\n if (beanDel = handlers[i].handler.__beanDel) args.push(beanDel.selector)\r\n args.push(handlers[i].original)\r\n on.apply(null, args)\r\n }\r\n }\r\n return element\r\n }\r\n\r\n , bean = {\r\n 'on': on\r\n , 'add': add\r\n , 'one': one\r\n , 'off': off\r\n , 'remove': off\r\n , 'clone': clone\r\n , 'fire': fire\r\n , 'Event': Event\r\n , 'setSelectorEngine': setSelectorEngine\r\n , 'noConflict': function () {\r\n context[name] = old\r\n return this\r\n }\r\n }\r\n\r\n // for IE, clean up on unload to avoid leaks\r\n if (win.attachEvent) {\r\n var cleanup = function () {\r\n var i, entries = registry.entries()\r\n for (i in entries) {\r\n if (entries[i].type && entries[i].type !== 'unload') off(entries[i].element, entries[i].type)\r\n }\r\n win.detachEvent('onunload', cleanup)\r\n win.CollectGarbage && win.CollectGarbage()\r\n }\r\n win.attachEvent('onunload', cleanup)\r\n }\r\n\r\n // initialize selector engine to internal default (qSA or throw Error)\r\n setSelectorEngine()\r\n\r\n return bean\r\n });\r\n\r\n }, {}], 32: [function (_dereq_, module, exports) {\r\n (function (global) {\r\n /*!\r\n * The buffer module from node.js, for the browser.\r\n *\r\n * @author Feross Aboukhadijeh \r\n * @license MIT\r\n */\r\n /* eslint-disable no-proto */\r\n\r\n 'use strict'\r\n\r\n var base64 = _dereq_('base64-js')\r\n var ieee754 = _dereq_('ieee754')\r\n var isArray = _dereq_('isarray')\r\n\r\n exports.Buffer = Buffer\r\n exports.SlowBuffer = SlowBuffer\r\n exports.INSPECT_MAX_BYTES = 50\r\n\r\n /**\r\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\r\n * === true Use Uint8Array implementation (fastest)\r\n * === false Use Object implementation (most compatible, even IE6)\r\n *\r\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\r\n * Opera 11.6+, iOS 4.2+.\r\n *\r\n * Due to various browser bugs, sometimes the Object implementation will be used even\r\n * when the browser supports typed arrays.\r\n *\r\n * Note:\r\n *\r\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\r\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\r\n *\r\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\r\n *\r\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\r\n * incorrect length in some situations.\r\n \r\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\r\n * get the Object implementation, which is slower but behaves correctly.\r\n */\r\n Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\r\n ? global.TYPED_ARRAY_SUPPORT\r\n : typedArraySupport()\r\n\r\n /*\r\n * Export kMaxLength after typed array support is determined.\r\n */\r\n exports.kMaxLength = kMaxLength()\r\n\r\n function typedArraySupport() {\r\n try {\r\n var arr = new Uint8Array(1)\r\n arr.__proto__ = { __proto__: Uint8Array.prototype, foo: function () { return 42 } }\r\n return arr.foo() === 42 && // typed array instances can be augmented\r\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\r\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\r\n } catch (e) {\r\n return false\r\n }\r\n }\r\n\r\n function kMaxLength() {\r\n return Buffer.TYPED_ARRAY_SUPPORT\r\n ? 0x7fffffff\r\n : 0x3fffffff\r\n }\r\n\r\n function createBuffer(that, length) {\r\n if (kMaxLength() < length) {\r\n throw new RangeError('Invalid typed array length')\r\n }\r\n if (Buffer.TYPED_ARRAY_SUPPORT) {\r\n // Return an augmented `Uint8Array` instance, for best performance\r\n that = new Uint8Array(length)\r\n that.__proto__ = Buffer.prototype\r\n } else {\r\n // Fallback: Return an object instance of the Buffer class\r\n if (that === null) {\r\n that = new Buffer(length)\r\n }\r\n that.length = length\r\n }\r\n\r\n return that\r\n }\r\n\r\n /**\r\n * The Buffer constructor returns instances of `Uint8Array` that have their\r\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\r\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\r\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\r\n * returns a single octet.\r\n *\r\n * The `Uint8Array` prototype remains unmodified.\r\n */\r\n\r\n function Buffer(arg, encodingOrOffset, length) {\r\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\r\n return new Buffer(arg, encodingOrOffset, length)\r\n }\r\n\r\n // Common case.\r\n if (typeof arg === 'number') {\r\n if (typeof encodingOrOffset === 'string') {\r\n throw new Error(\r\n 'If encoding is specified then the first argument must be a string'\r\n )\r\n }\r\n return allocUnsafe(this, arg)\r\n }\r\n return from(this, arg, encodingOrOffset, length)\r\n }\r\n\r\n Buffer.poolSize = 8192 // not used by this implementation\r\n\r\n // TODO: Legacy, not needed anymore. Remove in next major version.\r\n Buffer._augment = function (arr) {\r\n arr.__proto__ = Buffer.prototype\r\n return arr\r\n }\r\n\r\n function from(that, value, encodingOrOffset, length) {\r\n if (typeof value === 'number') {\r\n throw new TypeError('\"value\" argument must not be a number')\r\n }\r\n\r\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\r\n return fromArrayBuffer(that, value, encodingOrOffset, length)\r\n }\r\n\r\n if (typeof value === 'string') {\r\n return fromString(that, value, encodingOrOffset)\r\n }\r\n\r\n return fromObject(that, value)\r\n }\r\n\r\n /**\r\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\r\n * if value is a number.\r\n * Buffer.from(str[, encoding])\r\n * Buffer.from(array)\r\n * Buffer.from(buffer)\r\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\r\n **/\r\n Buffer.from = function (value, encodingOrOffset, length) {\r\n return from(null, value, encodingOrOffset, length)\r\n }\r\n\r\n if (Buffer.TYPED_ARRAY_SUPPORT) {\r\n Buffer.prototype.__proto__ = Uint8Array.prototype\r\n Buffer.__proto__ = Uint8Array\r\n if (typeof Symbol !== 'undefined' && Symbol.species &&\r\n Buffer[Symbol.species] === Buffer) {\r\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\r\n Object.defineProperty(Buffer, Symbol.species, {\r\n value: null,\r\n configurable: true\r\n })\r\n }\r\n }\r\n\r\n function assertSize(size) {\r\n if (typeof size !== 'number') {\r\n throw new TypeError('\"size\" argument must be a number')\r\n } else if (size < 0) {\r\n throw new RangeError('\"size\" argument must not be negative')\r\n }\r\n }\r\n\r\n function alloc(that, size, fill, encoding) {\r\n assertSize(size)\r\n if (size <= 0) {\r\n return createBuffer(that, size)\r\n }\r\n if (fill !== undefined) {\r\n // Only pay attention to encoding if it's a string. This\r\n // prevents accidentally sending in a number that would\r\n // be interpretted as a start offset.\r\n return typeof encoding === 'string'\r\n ? createBuffer(that, size).fill(fill, encoding)\r\n : createBuffer(that, size).fill(fill)\r\n }\r\n return createBuffer(that, size)\r\n }\r\n\r\n /**\r\n * Creates a new filled Buffer instance.\r\n * alloc(size[, fill[, encoding]])\r\n **/\r\n Buffer.alloc = function (size, fill, encoding) {\r\n return alloc(null, size, fill, encoding)\r\n }\r\n\r\n function allocUnsafe(that, size) {\r\n assertSize(size)\r\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\r\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\r\n for (var i = 0; i < size; ++i) {\r\n that[i] = 0\r\n }\r\n }\r\n return that\r\n }\r\n\r\n /**\r\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\r\n * */\r\n Buffer.allocUnsafe = function (size) {\r\n return allocUnsafe(null, size)\r\n }\r\n /**\r\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\r\n */\r\n Buffer.allocUnsafeSlow = function (size) {\r\n return allocUnsafe(null, size)\r\n }\r\n\r\n function fromString(that, string, encoding) {\r\n if (typeof encoding !== 'string' || encoding === '') {\r\n encoding = 'utf8'\r\n }\r\n\r\n if (!Buffer.isEncoding(encoding)) {\r\n throw new TypeError('\"encoding\" must be a valid string encoding')\r\n }\r\n\r\n var length = byteLength(string, encoding) | 0\r\n that = createBuffer(that, length)\r\n\r\n var actual = that.write(string, encoding)\r\n\r\n if (actual !== length) {\r\n // Writing a hex string, for example, that contains invalid characters will\r\n // cause everything after the first invalid character to be ignored. (e.g.\r\n // 'abxxcd' will be treated as 'ab')\r\n that = that.slice(0, actual)\r\n }\r\n\r\n return that\r\n }\r\n\r\n function fromArrayLike(that, array) {\r\n var length = array.length < 0 ? 0 : checked(array.length) | 0\r\n that = createBuffer(that, length)\r\n for (var i = 0; i < length; i += 1) {\r\n that[i] = array[i] & 255\r\n }\r\n return that\r\n }\r\n\r\n function fromArrayBuffer(that, array, byteOffset, length) {\r\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\r\n\r\n if (byteOffset < 0 || array.byteLength < byteOffset) {\r\n throw new RangeError('\\'offset\\' is out of bounds')\r\n }\r\n\r\n if (array.byteLength < byteOffset + (length || 0)) {\r\n throw new RangeError('\\'length\\' is out of bounds')\r\n }\r\n\r\n if (byteOffset === undefined && length === undefined) {\r\n array = new Uint8Array(array)\r\n } else if (length === undefined) {\r\n array = new Uint8Array(array, byteOffset)\r\n } else {\r\n array = new Uint8Array(array, byteOffset, length)\r\n }\r\n\r\n if (Buffer.TYPED_ARRAY_SUPPORT) {\r\n // Return an augmented `Uint8Array` instance, for best performance\r\n that = array\r\n that.__proto__ = Buffer.prototype\r\n } else {\r\n // Fallback: Return an object instance of the Buffer class\r\n that = fromArrayLike(that, array)\r\n }\r\n return that\r\n }\r\n\r\n function fromObject(that, obj) {\r\n if (Buffer.isBuffer(obj)) {\r\n var len = checked(obj.length) | 0\r\n that = createBuffer(that, len)\r\n\r\n if (that.length === 0) {\r\n return that\r\n }\r\n\r\n obj.copy(that, 0, 0, len)\r\n return that\r\n }\r\n\r\n if (obj) {\r\n if ((typeof ArrayBuffer !== 'undefined' &&\r\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\r\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\r\n return createBuffer(that, 0)\r\n }\r\n return fromArrayLike(that, obj)\r\n }\r\n\r\n if (obj.type === 'Buffer' && isArray(obj.data)) {\r\n return fromArrayLike(that, obj.data)\r\n }\r\n }\r\n\r\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\r\n }\r\n\r\n function checked(length) {\r\n // Note: cannot use `length < kMaxLength()` here because that fails when\r\n // length is NaN (which is otherwise coerced to zero.)\r\n if (length >= kMaxLength()) {\r\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\r\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\r\n }\r\n return length | 0\r\n }\r\n\r\n function SlowBuffer(length) {\r\n if (+length != length) { // eslint-disable-line eqeqeq\r\n length = 0\r\n }\r\n return Buffer.alloc(+length)\r\n }\r\n\r\n Buffer.isBuffer = function isBuffer(b) {\r\n return !!(b != null && b._isBuffer)\r\n }\r\n\r\n Buffer.compare = function compare(a, b) {\r\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\r\n throw new TypeError('Arguments must be Buffers')\r\n }\r\n\r\n if (a === b) return 0\r\n\r\n var x = a.length\r\n var y = b.length\r\n\r\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\r\n if (a[i] !== b[i]) {\r\n x = a[i]\r\n y = b[i]\r\n break\r\n }\r\n }\r\n\r\n if (x < y) return -1\r\n if (y < x) return 1\r\n return 0\r\n }\r\n\r\n Buffer.isEncoding = function isEncoding(encoding) {\r\n switch (String(encoding).toLowerCase()) {\r\n case 'hex':\r\n case 'utf8':\r\n case 'utf-8':\r\n case 'ascii':\r\n case 'latin1':\r\n case 'binary':\r\n case 'base64':\r\n case 'ucs2':\r\n case 'ucs-2':\r\n case 'utf16le':\r\n case 'utf-16le':\r\n return true\r\n default:\r\n return false\r\n }\r\n }\r\n\r\n Buffer.concat = function concat(list, length) {\r\n if (!isArray(list)) {\r\n throw new TypeError('\"list\" argument must be an Array of Buffers')\r\n }\r\n\r\n if (list.length === 0) {\r\n return Buffer.alloc(0)\r\n }\r\n\r\n var i\r\n if (length === undefined) {\r\n length = 0\r\n for (i = 0; i < list.length; ++i) {\r\n length += list[i].length\r\n }\r\n }\r\n\r\n var buffer = Buffer.allocUnsafe(length)\r\n var pos = 0\r\n for (i = 0; i < list.length; ++i) {\r\n var buf = list[i]\r\n if (!Buffer.isBuffer(buf)) {\r\n throw new TypeError('\"list\" argument must be an Array of Buffers')\r\n }\r\n buf.copy(buffer, pos)\r\n pos += buf.length\r\n }\r\n return buffer\r\n }\r\n\r\n function byteLength(string, encoding) {\r\n if (Buffer.isBuffer(string)) {\r\n return string.length\r\n }\r\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\r\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\r\n return string.byteLength\r\n }\r\n if (typeof string !== 'string') {\r\n string = '' + string\r\n }\r\n\r\n var len = string.length\r\n if (len === 0) return 0\r\n\r\n // Use a for loop to avoid recursion\r\n var loweredCase = false\r\n for (; ;) {\r\n switch (encoding) {\r\n case 'ascii':\r\n case 'latin1':\r\n case 'binary':\r\n return len\r\n case 'utf8':\r\n case 'utf-8':\r\n case undefined:\r\n return utf8ToBytes(string).length\r\n case 'ucs2':\r\n case 'ucs-2':\r\n case 'utf16le':\r\n case 'utf-16le':\r\n return len * 2\r\n case 'hex':\r\n return len >>> 1\r\n case 'base64':\r\n return base64ToBytes(string).length\r\n default:\r\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\r\n encoding = ('' + encoding).toLowerCase()\r\n loweredCase = true\r\n }\r\n }\r\n }\r\n Buffer.byteLength = byteLength\r\n\r\n function slowToString(encoding, start, end) {\r\n var loweredCase = false\r\n\r\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\r\n // property of a typed array.\r\n\r\n // This behaves neither like String nor Uint8Array in that we set start/end\r\n // to their upper/lower bounds if the value passed is out of range.\r\n // undefined is handled specially as per ECMA-262 6th Edition,\r\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\r\n if (start === undefined || start < 0) {\r\n start = 0\r\n }\r\n // Return early if start > this.length. Done here to prevent potential uint32\r\n // coercion fail below.\r\n if (start > this.length) {\r\n return ''\r\n }\r\n\r\n if (end === undefined || end > this.length) {\r\n end = this.length\r\n }\r\n\r\n if (end <= 0) {\r\n return ''\r\n }\r\n\r\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\r\n end >>>= 0\r\n start >>>= 0\r\n\r\n if (end <= start) {\r\n return ''\r\n }\r\n\r\n if (!encoding) encoding = 'utf8'\r\n\r\n while (true) {\r\n switch (encoding) {\r\n case 'hex':\r\n return hexSlice(this, start, end)\r\n\r\n case 'utf8':\r\n case 'utf-8':\r\n return utf8Slice(this, start, end)\r\n\r\n case 'ascii':\r\n return asciiSlice(this, start, end)\r\n\r\n case 'latin1':\r\n case 'binary':\r\n return latin1Slice(this, start, end)\r\n\r\n case 'base64':\r\n return base64Slice(this, start, end)\r\n\r\n case 'ucs2':\r\n case 'ucs-2':\r\n case 'utf16le':\r\n case 'utf-16le':\r\n return utf16leSlice(this, start, end)\r\n\r\n default:\r\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\r\n encoding = (encoding + '').toLowerCase()\r\n loweredCase = true\r\n }\r\n }\r\n }\r\n\r\n // The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\r\n // Buffer instances.\r\n Buffer.prototype._isBuffer = true\r\n\r\n function swap(b, n, m) {\r\n var i = b[n]\r\n b[n] = b[m]\r\n b[m] = i\r\n }\r\n\r\n Buffer.prototype.swap16 = function swap16() {\r\n var len = this.length\r\n if (len % 2 !== 0) {\r\n throw new RangeError('Buffer size must be a multiple of 16-bits')\r\n }\r\n for (var i = 0; i < len; i += 2) {\r\n swap(this, i, i + 1)\r\n }\r\n return this\r\n }\r\n\r\n Buffer.prototype.swap32 = function swap32() {\r\n var len = this.length\r\n if (len % 4 !== 0) {\r\n throw new RangeError('Buffer size must be a multiple of 32-bits')\r\n }\r\n for (var i = 0; i < len; i += 4) {\r\n swap(this, i, i + 3)\r\n swap(this, i + 1, i + 2)\r\n }\r\n return this\r\n }\r\n\r\n Buffer.prototype.swap64 = function swap64() {\r\n var len = this.length\r\n if (len % 8 !== 0) {\r\n throw new RangeError('Buffer size must be a multiple of 64-bits')\r\n }\r\n for (var i = 0; i < len; i += 8) {\r\n swap(this, i, i + 7)\r\n swap(this, i + 1, i + 6)\r\n swap(this, i + 2, i + 5)\r\n swap(this, i + 3, i + 4)\r\n }\r\n return this\r\n }\r\n\r\n Buffer.prototype.toString = function toString() {\r\n var length = this.length | 0\r\n if (length === 0) return ''\r\n if (arguments.length === 0) return utf8Slice(this, 0, length)\r\n return slowToString.apply(this, arguments)\r\n }\r\n\r\n Buffer.prototype.equals = function equals(b) {\r\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\r\n if (this === b) return true\r\n return Buffer.compare(this, b) === 0\r\n }\r\n\r\n Buffer.prototype.inspect = function inspect() {\r\n var str = ''\r\n var max = exports.INSPECT_MAX_BYTES\r\n if (this.length > 0) {\r\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\r\n if (this.length > max) str += ' ... '\r\n }\r\n return ''\r\n }\r\n\r\n Buffer.prototype.compare = function compare(target, start, end, thisStart, thisEnd) {\r\n if (!Buffer.isBuffer(target)) {\r\n throw new TypeError('Argument must be a Buffer')\r\n }\r\n\r\n if (start === undefined) {\r\n start = 0\r\n }\r\n if (end === undefined) {\r\n end = target ? target.length : 0\r\n }\r\n if (thisStart === undefined) {\r\n thisStart = 0\r\n }\r\n if (thisEnd === undefined) {\r\n thisEnd = this.length\r\n }\r\n\r\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\r\n throw new RangeError('out of range index')\r\n }\r\n\r\n if (thisStart >= thisEnd && start >= end) {\r\n return 0\r\n }\r\n if (thisStart >= thisEnd) {\r\n return -1\r\n }\r\n if (start >= end) {\r\n return 1\r\n }\r\n\r\n start >>>= 0\r\n end >>>= 0\r\n thisStart >>>= 0\r\n thisEnd >>>= 0\r\n\r\n if (this === target) return 0\r\n\r\n var x = thisEnd - thisStart\r\n var y = end - start\r\n var len = Math.min(x, y)\r\n\r\n var thisCopy = this.slice(thisStart, thisEnd)\r\n var targetCopy = target.slice(start, end)\r\n\r\n for (var i = 0; i < len; ++i) {\r\n if (thisCopy[i] !== targetCopy[i]) {\r\n x = thisCopy[i]\r\n y = targetCopy[i]\r\n break\r\n }\r\n }\r\n\r\n if (x < y) return -1\r\n if (y < x) return 1\r\n return 0\r\n }\r\n\r\n // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\r\n // OR the last index of `val` in `buffer` at offset <= `byteOffset`.\r\n //\r\n // Arguments:\r\n // - buffer - a Buffer to search\r\n // - val - a string, Buffer, or number\r\n // - byteOffset - an index into `buffer`; will be clamped to an int32\r\n // - encoding - an optional encoding, relevant is val is a string\r\n // - dir - true for indexOf, false for lastIndexOf\r\n function bidirectionalIndexOf(buffer, val, byteOffset, encoding, dir) {\r\n // Empty buffer means no match\r\n if (buffer.length === 0) return -1\r\n\r\n // Normalize byteOffset\r\n if (typeof byteOffset === 'string') {\r\n encoding = byteOffset\r\n byteOffset = 0\r\n } else if (byteOffset > 0x7fffffff) {\r\n byteOffset = 0x7fffffff\r\n } else if (byteOffset < -0x80000000) {\r\n byteOffset = -0x80000000\r\n }\r\n byteOffset = +byteOffset // Coerce to Number.\r\n if (isNaN(byteOffset)) {\r\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\r\n byteOffset = dir ? 0 : (buffer.length - 1)\r\n }\r\n\r\n // Normalize byteOffset: negative offsets start from the end of the buffer\r\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\r\n if (byteOffset >= buffer.length) {\r\n if (dir) return -1\r\n else byteOffset = buffer.length - 1\r\n } else if (byteOffset < 0) {\r\n if (dir) byteOffset = 0\r\n else return -1\r\n }\r\n\r\n // Normalize val\r\n if (typeof val === 'string') {\r\n val = Buffer.from(val, encoding)\r\n }\r\n\r\n // Finally, search either indexOf (if dir is true) or lastIndexOf\r\n if (Buffer.isBuffer(val)) {\r\n // Special case: looking for empty string/buffer always fails\r\n if (val.length === 0) {\r\n return -1\r\n }\r\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\r\n } else if (typeof val === 'number') {\r\n val = val & 0xFF // Search for a byte value [0-255]\r\n if (Buffer.TYPED_ARRAY_SUPPORT &&\r\n typeof Uint8Array.prototype.indexOf === 'function') {\r\n if (dir) {\r\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\r\n } else {\r\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\r\n }\r\n }\r\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\r\n }\r\n\r\n throw new TypeError('val must be string, number or Buffer')\r\n }\r\n\r\n function arrayIndexOf(arr, val, byteOffset, encoding, dir) {\r\n var indexSize = 1\r\n var arrLength = arr.length\r\n var valLength = val.length\r\n\r\n if (encoding !== undefined) {\r\n encoding = String(encoding).toLowerCase()\r\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\r\n encoding === 'utf16le' || encoding === 'utf-16le') {\r\n if (arr.length < 2 || val.length < 2) {\r\n return -1\r\n }\r\n indexSize = 2\r\n arrLength /= 2\r\n valLength /= 2\r\n byteOffset /= 2\r\n }\r\n }\r\n\r\n function read(buf, i) {\r\n if (indexSize === 1) {\r\n return buf[i]\r\n } else {\r\n return buf.readUInt16BE(i * indexSize)\r\n }\r\n }\r\n\r\n var i\r\n if (dir) {\r\n var foundIndex = -1\r\n for (i = byteOffset; i < arrLength; i++) {\r\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\r\n if (foundIndex === -1) foundIndex = i\r\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\r\n } else {\r\n if (foundIndex !== -1) i -= i - foundIndex\r\n foundIndex = -1\r\n }\r\n }\r\n } else {\r\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\r\n for (i = byteOffset; i >= 0; i--) {\r\n var found = true\r\n for (var j = 0; j < valLength; j++) {\r\n if (read(arr, i + j) !== read(val, j)) {\r\n found = false\r\n break\r\n }\r\n }\r\n if (found) return i\r\n }\r\n }\r\n\r\n return -1\r\n }\r\n\r\n Buffer.prototype.includes = function includes(val, byteOffset, encoding) {\r\n return this.indexOf(val, byteOffset, encoding) !== -1\r\n }\r\n\r\n Buffer.prototype.indexOf = function indexOf(val, byteOffset, encoding) {\r\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\r\n }\r\n\r\n Buffer.prototype.lastIndexOf = function lastIndexOf(val, byteOffset, encoding) {\r\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\r\n }\r\n\r\n function hexWrite(buf, string, offset, length) {\r\n offset = Number(offset) || 0\r\n var remaining = buf.length - offset\r\n if (!length) {\r\n length = remaining\r\n } else {\r\n length = Number(length)\r\n if (length > remaining) {\r\n length = remaining\r\n }\r\n }\r\n\r\n // must be an even number of digits\r\n var strLen = string.length\r\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\r\n\r\n if (length > strLen / 2) {\r\n length = strLen / 2\r\n }\r\n for (var i = 0; i < length; ++i) {\r\n var parsed = parseInt(string.substr(i * 2, 2), 16)\r\n if (isNaN(parsed)) return i\r\n buf[offset + i] = parsed\r\n }\r\n return i\r\n }\r\n\r\n function utf8Write(buf, string, offset, length) {\r\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\r\n }\r\n\r\n function asciiWrite(buf, string, offset, length) {\r\n return blitBuffer(asciiToBytes(string), buf, offset, length)\r\n }\r\n\r\n function latin1Write(buf, string, offset, length) {\r\n return asciiWrite(buf, string, offset, length)\r\n }\r\n\r\n function base64Write(buf, string, offset, length) {\r\n return blitBuffer(base64ToBytes(string), buf, offset, length)\r\n }\r\n\r\n function ucs2Write(buf, string, offset, length) {\r\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\r\n }\r\n\r\n Buffer.prototype.write = function write(string, offset, length, encoding) {\r\n // Buffer#write(string)\r\n if (offset === undefined) {\r\n encoding = 'utf8'\r\n length = this.length\r\n offset = 0\r\n // Buffer#write(string, encoding)\r\n } else if (length === undefined && typeof offset === 'string') {\r\n encoding = offset\r\n length = this.length\r\n offset = 0\r\n // Buffer#write(string, offset[, length][, encoding])\r\n } else if (isFinite(offset)) {\r\n offset = offset | 0\r\n if (isFinite(length)) {\r\n length = length | 0\r\n if (encoding === undefined) encoding = 'utf8'\r\n } else {\r\n encoding = length\r\n length = undefined\r\n }\r\n // legacy write(string, encoding, offset, length) - remove in v0.13\r\n } else {\r\n throw new Error(\r\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\r\n )\r\n }\r\n\r\n var remaining = this.length - offset\r\n if (length === undefined || length > remaining) length = remaining\r\n\r\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\r\n throw new RangeError('Attempt to write outside buffer bounds')\r\n }\r\n\r\n if (!encoding) encoding = 'utf8'\r\n\r\n var loweredCase = false\r\n for (; ;) {\r\n switch (encoding) {\r\n case 'hex':\r\n return hexWrite(this, string, offset, length)\r\n\r\n case 'utf8':\r\n case 'utf-8':\r\n return utf8Write(this, string, offset, length)\r\n\r\n case 'ascii':\r\n return asciiWrite(this, string, offset, length)\r\n\r\n case 'latin1':\r\n case 'binary':\r\n return latin1Write(this, string, offset, length)\r\n\r\n case 'base64':\r\n // Warning: maxLength not taken into account in base64Write\r\n return base64Write(this, string, offset, length)\r\n\r\n case 'ucs2':\r\n case 'ucs-2':\r\n case 'utf16le':\r\n case 'utf-16le':\r\n return ucs2Write(this, string, offset, length)\r\n\r\n default:\r\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\r\n encoding = ('' + encoding).toLowerCase()\r\n loweredCase = true\r\n }\r\n }\r\n }\r\n\r\n Buffer.prototype.toJSON = function toJSON() {\r\n return {\r\n type: 'Buffer',\r\n data: Array.prototype.slice.call(this._arr || this, 0)\r\n }\r\n }\r\n\r\n function base64Slice(buf, start, end) {\r\n if (start === 0 && end === buf.length) {\r\n return base64.fromByteArray(buf)\r\n } else {\r\n return base64.fromByteArray(buf.slice(start, end))\r\n }\r\n }\r\n\r\n function utf8Slice(buf, start, end) {\r\n end = Math.min(buf.length, end)\r\n var res = []\r\n\r\n var i = start\r\n while (i < end) {\r\n var firstByte = buf[i]\r\n var codePoint = null\r\n var bytesPerSequence = (firstByte > 0xEF) ? 4\r\n : (firstByte > 0xDF) ? 3\r\n : (firstByte > 0xBF) ? 2\r\n : 1\r\n\r\n if (i + bytesPerSequence <= end) {\r\n var secondByte, thirdByte, fourthByte, tempCodePoint\r\n\r\n switch (bytesPerSequence) {\r\n case 1:\r\n if (firstByte < 0x80) {\r\n codePoint = firstByte\r\n }\r\n break\r\n case 2:\r\n secondByte = buf[i + 1]\r\n if ((secondByte & 0xC0) === 0x80) {\r\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\r\n if (tempCodePoint > 0x7F) {\r\n codePoint = tempCodePoint\r\n }\r\n }\r\n break\r\n case 3:\r\n secondByte = buf[i + 1]\r\n thirdByte = buf[i + 2]\r\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\r\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\r\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\r\n codePoint = tempCodePoint\r\n }\r\n }\r\n break\r\n case 4:\r\n secondByte = buf[i + 1]\r\n thirdByte = buf[i + 2]\r\n fourthByte = buf[i + 3]\r\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\r\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\r\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\r\n codePoint = tempCodePoint\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (codePoint === null) {\r\n // we did not generate a valid codePoint so insert a\r\n // replacement char (U+FFFD) and advance only 1 byte\r\n codePoint = 0xFFFD\r\n bytesPerSequence = 1\r\n } else if (codePoint > 0xFFFF) {\r\n // encode to utf16 (surrogate pair dance)\r\n codePoint -= 0x10000\r\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\r\n codePoint = 0xDC00 | codePoint & 0x3FF\r\n }\r\n\r\n res.push(codePoint)\r\n i += bytesPerSequence\r\n }\r\n\r\n return decodeCodePointsArray(res)\r\n }\r\n\r\n // Based on http://stackoverflow.com/a/22747272/680742, the browser with\r\n // the lowest limit is Chrome, with 0x10000 args.\r\n // We go 1 magnitude less, for safety\r\n var MAX_ARGUMENTS_LENGTH = 0x1000\r\n\r\n function decodeCodePointsArray(codePoints) {\r\n var len = codePoints.length\r\n if (len <= MAX_ARGUMENTS_LENGTH) {\r\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\r\n }\r\n\r\n // Decode in chunks to avoid \"call stack size exceeded\".\r\n var res = ''\r\n var i = 0\r\n while (i < len) {\r\n res += String.fromCharCode.apply(\r\n String,\r\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\r\n )\r\n }\r\n return res\r\n }\r\n\r\n function asciiSlice(buf, start, end) {\r\n var ret = ''\r\n end = Math.min(buf.length, end)\r\n\r\n for (var i = start; i < end; ++i) {\r\n ret += String.fromCharCode(buf[i] & 0x7F)\r\n }\r\n return ret\r\n }\r\n\r\n function latin1Slice(buf, start, end) {\r\n var ret = ''\r\n end = Math.min(buf.length, end)\r\n\r\n for (var i = start; i < end; ++i) {\r\n ret += String.fromCharCode(buf[i])\r\n }\r\n return ret\r\n }\r\n\r\n function hexSlice(buf, start, end) {\r\n var len = buf.length\r\n\r\n if (!start || start < 0) start = 0\r\n if (!end || end < 0 || end > len) end = len\r\n\r\n var out = ''\r\n for (var i = start; i < end; ++i) {\r\n out += toHex(buf[i])\r\n }\r\n return out\r\n }\r\n\r\n function utf16leSlice(buf, start, end) {\r\n var bytes = buf.slice(start, end)\r\n var res = ''\r\n for (var i = 0; i < bytes.length; i += 2) {\r\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\r\n }\r\n return res\r\n }\r\n\r\n Buffer.prototype.slice = function slice(start, end) {\r\n var len = this.length\r\n start = ~~start\r\n end = end === undefined ? len : ~~end\r\n\r\n if (start < 0) {\r\n start += len\r\n if (start < 0) start = 0\r\n } else if (start > len) {\r\n start = len\r\n }\r\n\r\n if (end < 0) {\r\n end += len\r\n if (end < 0) end = 0\r\n } else if (end > len) {\r\n end = len\r\n }\r\n\r\n if (end < start) end = start\r\n\r\n var newBuf\r\n if (Buffer.TYPED_ARRAY_SUPPORT) {\r\n newBuf = this.subarray(start, end)\r\n newBuf.__proto__ = Buffer.prototype\r\n } else {\r\n var sliceLen = end - start\r\n newBuf = new Buffer(sliceLen, undefined)\r\n for (var i = 0; i < sliceLen; ++i) {\r\n newBuf[i] = this[i + start]\r\n }\r\n }\r\n\r\n return newBuf\r\n }\r\n\r\n /*\r\n * Need to make sure that buffer isn't trying to write out of bounds.\r\n */\r\n function checkOffset(offset, ext, length) {\r\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\r\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\r\n }\r\n\r\n Buffer.prototype.readUIntLE = function readUIntLE(offset, byteLength, noAssert) {\r\n offset = offset | 0\r\n byteLength = byteLength | 0\r\n if (!noAssert) checkOffset(offset, byteLength, this.length)\r\n\r\n var val = this[offset]\r\n var mul = 1\r\n var i = 0\r\n while (++i < byteLength && (mul *= 0x100)) {\r\n val += this[offset + i] * mul\r\n }\r\n\r\n return val\r\n }\r\n\r\n Buffer.prototype.readUIntBE = function readUIntBE(offset, byteLength, noAssert) {\r\n offset = offset | 0\r\n byteLength = byteLength | 0\r\n if (!noAssert) {\r\n checkOffset(offset, byteLength, this.length)\r\n }\r\n\r\n var val = this[offset + --byteLength]\r\n var mul = 1\r\n while (byteLength > 0 && (mul *= 0x100)) {\r\n val += this[offset + --byteLength] * mul\r\n }\r\n\r\n return val\r\n }\r\n\r\n Buffer.prototype.readUInt8 = function readUInt8(offset, noAssert) {\r\n if (!noAssert) checkOffset(offset, 1, this.length)\r\n return this[offset]\r\n }\r\n\r\n Buffer.prototype.readUInt16LE = function readUInt16LE(offset, noAssert) {\r\n if (!noAssert) checkOffset(offset, 2, this.length)\r\n return this[offset] | (this[offset + 1] << 8)\r\n }\r\n\r\n Buffer.prototype.readUInt16BE = function readUInt16BE(offset, noAssert) {\r\n if (!noAssert) checkOffset(offset, 2, this.length)\r\n return (this[offset] << 8) | this[offset + 1]\r\n }\r\n\r\n Buffer.prototype.readUInt32LE = function readUInt32LE(offset, noAssert) {\r\n if (!noAssert) checkOffset(offset, 4, this.length)\r\n\r\n return ((this[offset]) |\r\n (this[offset + 1] << 8) |\r\n (this[offset + 2] << 16)) +\r\n (this[offset + 3] * 0x1000000)\r\n }\r\n\r\n Buffer.prototype.readUInt32BE = function readUInt32BE(offset, noAssert) {\r\n if (!noAssert) checkOffset(offset, 4, this.length)\r\n\r\n return (this[offset] * 0x1000000) +\r\n ((this[offset + 1] << 16) |\r\n (this[offset + 2] << 8) |\r\n this[offset + 3])\r\n }\r\n\r\n Buffer.prototype.readIntLE = function readIntLE(offset, byteLength, noAssert) {\r\n offset = offset | 0\r\n byteLength = byteLength | 0\r\n if (!noAssert) checkOffset(offset, byteLength, this.length)\r\n\r\n var val = this[offset]\r\n var mul = 1\r\n var i = 0\r\n while (++i < byteLength && (mul *= 0x100)) {\r\n val += this[offset + i] * mul\r\n }\r\n mul *= 0x80\r\n\r\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\r\n\r\n return val\r\n }\r\n\r\n Buffer.prototype.readIntBE = function readIntBE(offset, byteLength, noAssert) {\r\n offset = offset | 0\r\n byteLength = byteLength | 0\r\n if (!noAssert) checkOffset(offset, byteLength, this.length)\r\n\r\n var i = byteLength\r\n var mul = 1\r\n var val = this[offset + --i]\r\n while (i > 0 && (mul *= 0x100)) {\r\n val += this[offset + --i] * mul\r\n }\r\n mul *= 0x80\r\n\r\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\r\n\r\n return val\r\n }\r\n\r\n Buffer.prototype.readInt8 = function readInt8(offset, noAssert) {\r\n if (!noAssert) checkOffset(offset, 1, this.length)\r\n if (!(this[offset] & 0x80)) return (this[offset])\r\n return ((0xff - this[offset] + 1) * -1)\r\n }\r\n\r\n Buffer.prototype.readInt16LE = function readInt16LE(offset, noAssert) {\r\n if (!noAssert) checkOffset(offset, 2, this.length)\r\n var val = this[offset] | (this[offset + 1] << 8)\r\n return (val & 0x8000) ? val | 0xFFFF0000 : val\r\n }\r\n\r\n Buffer.prototype.readInt16BE = function readInt16BE(offset, noAssert) {\r\n if (!noAssert) checkOffset(offset, 2, this.length)\r\n var val = this[offset + 1] | (this[offset] << 8)\r\n return (val & 0x8000) ? val | 0xFFFF0000 : val\r\n }\r\n\r\n Buffer.prototype.readInt32LE = function readInt32LE(offset, noAssert) {\r\n if (!noAssert) checkOffset(offset, 4, this.length)\r\n\r\n return (this[offset]) |\r\n (this[offset + 1] << 8) |\r\n (this[offset + 2] << 16) |\r\n (this[offset + 3] << 24)\r\n }\r\n\r\n Buffer.prototype.readInt32BE = function readInt32BE(offset, noAssert) {\r\n if (!noAssert) checkOffset(offset, 4, this.length)\r\n\r\n return (this[offset] << 24) |\r\n (this[offset + 1] << 16) |\r\n (this[offset + 2] << 8) |\r\n (this[offset + 3])\r\n }\r\n\r\n Buffer.prototype.readFloatLE = function readFloatLE(offset, noAssert) {\r\n if (!noAssert) checkOffset(offset, 4, this.length)\r\n return ieee754.read(this, offset, true, 23, 4)\r\n }\r\n\r\n Buffer.prototype.readFloatBE = function readFloatBE(offset, noAssert) {\r\n if (!noAssert) checkOffset(offset, 4, this.length)\r\n return ieee754.read(this, offset, false, 23, 4)\r\n }\r\n\r\n Buffer.prototype.readDoubleLE = function readDoubleLE(offset, noAssert) {\r\n if (!noAssert) checkOffset(offset, 8, this.length)\r\n return ieee754.read(this, offset, true, 52, 8)\r\n }\r\n\r\n Buffer.prototype.readDoubleBE = function readDoubleBE(offset, noAssert) {\r\n if (!noAssert) checkOffset(offset, 8, this.length)\r\n return ieee754.read(this, offset, false, 52, 8)\r\n }\r\n\r\n function checkInt(buf, value, offset, ext, max, min) {\r\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\r\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\r\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\r\n }\r\n\r\n Buffer.prototype.writeUIntLE = function writeUIntLE(value, offset, byteLength, noAssert) {\r\n value = +value\r\n offset = offset | 0\r\n byteLength = byteLength | 0\r\n if (!noAssert) {\r\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\r\n checkInt(this, value, offset, byteLength, maxBytes, 0)\r\n }\r\n\r\n var mul = 1\r\n var i = 0\r\n this[offset] = value & 0xFF\r\n while (++i < byteLength && (mul *= 0x100)) {\r\n this[offset + i] = (value / mul) & 0xFF\r\n }\r\n\r\n return offset + byteLength\r\n }\r\n\r\n Buffer.prototype.writeUIntBE = function writeUIntBE(value, offset, byteLength, noAssert) {\r\n value = +value\r\n offset = offset | 0\r\n byteLength = byteLength | 0\r\n if (!noAssert) {\r\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\r\n checkInt(this, value, offset, byteLength, maxBytes, 0)\r\n }\r\n\r\n var i = byteLength - 1\r\n var mul = 1\r\n this[offset + i] = value & 0xFF\r\n while (--i >= 0 && (mul *= 0x100)) {\r\n this[offset + i] = (value / mul) & 0xFF\r\n }\r\n\r\n return offset + byteLength\r\n }\r\n\r\n Buffer.prototype.writeUInt8 = function writeUInt8(value, offset, noAssert) {\r\n value = +value\r\n offset = offset | 0\r\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\r\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\r\n this[offset] = (value & 0xff)\r\n return offset + 1\r\n }\r\n\r\n function objectWriteUInt16(buf, value, offset, littleEndian) {\r\n if (value < 0) value = 0xffff + value + 1\r\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\r\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\r\n (littleEndian ? i : 1 - i) * 8\r\n }\r\n }\r\n\r\n Buffer.prototype.writeUInt16LE = function writeUInt16LE(value, offset, noAssert) {\r\n value = +value\r\n offset = offset | 0\r\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\r\n if (Buffer.TYPED_ARRAY_SUPPORT) {\r\n this[offset] = (value & 0xff)\r\n this[offset + 1] = (value >>> 8)\r\n } else {\r\n objectWriteUInt16(this, value, offset, true)\r\n }\r\n return offset + 2\r\n }\r\n\r\n Buffer.prototype.writeUInt16BE = function writeUInt16BE(value, offset, noAssert) {\r\n value = +value\r\n offset = offset | 0\r\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\r\n if (Buffer.TYPED_ARRAY_SUPPORT) {\r\n this[offset] = (value >>> 8)\r\n this[offset + 1] = (value & 0xff)\r\n } else {\r\n objectWriteUInt16(this, value, offset, false)\r\n }\r\n return offset + 2\r\n }\r\n\r\n function objectWriteUInt32(buf, value, offset, littleEndian) {\r\n if (value < 0) value = 0xffffffff + value + 1\r\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\r\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\r\n }\r\n }\r\n\r\n Buffer.prototype.writeUInt32LE = function writeUInt32LE(value, offset, noAssert) {\r\n value = +value\r\n offset = offset | 0\r\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\r\n if (Buffer.TYPED_ARRAY_SUPPORT) {\r\n this[offset + 3] = (value >>> 24)\r\n this[offset + 2] = (value >>> 16)\r\n this[offset + 1] = (value >>> 8)\r\n this[offset] = (value & 0xff)\r\n } else {\r\n objectWriteUInt32(this, value, offset, true)\r\n }\r\n return offset + 4\r\n }\r\n\r\n Buffer.prototype.writeUInt32BE = function writeUInt32BE(value, offset, noAssert) {\r\n value = +value\r\n offset = offset | 0\r\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\r\n if (Buffer.TYPED_ARRAY_SUPPORT) {\r\n this[offset] = (value >>> 24)\r\n this[offset + 1] = (value >>> 16)\r\n this[offset + 2] = (value >>> 8)\r\n this[offset + 3] = (value & 0xff)\r\n } else {\r\n objectWriteUInt32(this, value, offset, false)\r\n }\r\n return offset + 4\r\n }\r\n\r\n Buffer.prototype.writeIntLE = function writeIntLE(value, offset, byteLength, noAssert) {\r\n value = +value\r\n offset = offset | 0\r\n if (!noAssert) {\r\n var limit = Math.pow(2, 8 * byteLength - 1)\r\n\r\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\r\n }\r\n\r\n var i = 0\r\n var mul = 1\r\n var sub = 0\r\n this[offset] = value & 0xFF\r\n while (++i < byteLength && (mul *= 0x100)) {\r\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\r\n sub = 1\r\n }\r\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\r\n }\r\n\r\n return offset + byteLength\r\n }\r\n\r\n Buffer.prototype.writeIntBE = function writeIntBE(value, offset, byteLength, noAssert) {\r\n value = +value\r\n offset = offset | 0\r\n if (!noAssert) {\r\n var limit = Math.pow(2, 8 * byteLength - 1)\r\n\r\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\r\n }\r\n\r\n var i = byteLength - 1\r\n var mul = 1\r\n var sub = 0\r\n this[offset + i] = value & 0xFF\r\n while (--i >= 0 && (mul *= 0x100)) {\r\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\r\n sub = 1\r\n }\r\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\r\n }\r\n\r\n return offset + byteLength\r\n }\r\n\r\n Buffer.prototype.writeInt8 = function writeInt8(value, offset, noAssert) {\r\n value = +value\r\n offset = offset | 0\r\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\r\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\r\n if (value < 0) value = 0xff + value + 1\r\n this[offset] = (value & 0xff)\r\n return offset + 1\r\n }\r\n\r\n Buffer.prototype.writeInt16LE = function writeInt16LE(value, offset, noAssert) {\r\n value = +value\r\n offset = offset | 0\r\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\r\n if (Buffer.TYPED_ARRAY_SUPPORT) {\r\n this[offset] = (value & 0xff)\r\n this[offset + 1] = (value >>> 8)\r\n } else {\r\n objectWriteUInt16(this, value, offset, true)\r\n }\r\n return offset + 2\r\n }\r\n\r\n Buffer.prototype.writeInt16BE = function writeInt16BE(value, offset, noAssert) {\r\n value = +value\r\n offset = offset | 0\r\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\r\n if (Buffer.TYPED_ARRAY_SUPPORT) {\r\n this[offset] = (value >>> 8)\r\n this[offset + 1] = (value & 0xff)\r\n } else {\r\n objectWriteUInt16(this, value, offset, false)\r\n }\r\n return offset + 2\r\n }\r\n\r\n Buffer.prototype.writeInt32LE = function writeInt32LE(value, offset, noAssert) {\r\n value = +value\r\n offset = offset | 0\r\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\r\n if (Buffer.TYPED_ARRAY_SUPPORT) {\r\n this[offset] = (value & 0xff)\r\n this[offset + 1] = (value >>> 8)\r\n this[offset + 2] = (value >>> 16)\r\n this[offset + 3] = (value >>> 24)\r\n } else {\r\n objectWriteUInt32(this, value, offset, true)\r\n }\r\n return offset + 4\r\n }\r\n\r\n Buffer.prototype.writeInt32BE = function writeInt32BE(value, offset, noAssert) {\r\n value = +value\r\n offset = offset | 0\r\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\r\n if (value < 0) value = 0xffffffff + value + 1\r\n if (Buffer.TYPED_ARRAY_SUPPORT) {\r\n this[offset] = (value >>> 24)\r\n this[offset + 1] = (value >>> 16)\r\n this[offset + 2] = (value >>> 8)\r\n this[offset + 3] = (value & 0xff)\r\n } else {\r\n objectWriteUInt32(this, value, offset, false)\r\n }\r\n return offset + 4\r\n }\r\n\r\n function checkIEEE754(buf, value, offset, ext, max, min) {\r\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\r\n if (offset < 0) throw new RangeError('Index out of range')\r\n }\r\n\r\n function writeFloat(buf, value, offset, littleEndian, noAssert) {\r\n if (!noAssert) {\r\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\r\n }\r\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\r\n return offset + 4\r\n }\r\n\r\n Buffer.prototype.writeFloatLE = function writeFloatLE(value, offset, noAssert) {\r\n return writeFloat(this, value, offset, true, noAssert)\r\n }\r\n\r\n Buffer.prototype.writeFloatBE = function writeFloatBE(value, offset, noAssert) {\r\n return writeFloat(this, value, offset, false, noAssert)\r\n }\r\n\r\n function writeDouble(buf, value, offset, littleEndian, noAssert) {\r\n if (!noAssert) {\r\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\r\n }\r\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\r\n return offset + 8\r\n }\r\n\r\n Buffer.prototype.writeDoubleLE = function writeDoubleLE(value, offset, noAssert) {\r\n return writeDouble(this, value, offset, true, noAssert)\r\n }\r\n\r\n Buffer.prototype.writeDoubleBE = function writeDoubleBE(value, offset, noAssert) {\r\n return writeDouble(this, value, offset, false, noAssert)\r\n }\r\n\r\n // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\r\n Buffer.prototype.copy = function copy(target, targetStart, start, end) {\r\n if (!start) start = 0\r\n if (!end && end !== 0) end = this.length\r\n if (targetStart >= target.length) targetStart = target.length\r\n if (!targetStart) targetStart = 0\r\n if (end > 0 && end < start) end = start\r\n\r\n // Copy 0 bytes; we're done\r\n if (end === start) return 0\r\n if (target.length === 0 || this.length === 0) return 0\r\n\r\n // Fatal error conditions\r\n if (targetStart < 0) {\r\n throw new RangeError('targetStart out of bounds')\r\n }\r\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\r\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\r\n\r\n // Are we oob?\r\n if (end > this.length) end = this.length\r\n if (target.length - targetStart < end - start) {\r\n end = target.length - targetStart + start\r\n }\r\n\r\n var len = end - start\r\n var i\r\n\r\n if (this === target && start < targetStart && targetStart < end) {\r\n // descending copy from end\r\n for (i = len - 1; i >= 0; --i) {\r\n target[i + targetStart] = this[i + start]\r\n }\r\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\r\n // ascending copy from start\r\n for (i = 0; i < len; ++i) {\r\n target[i + targetStart] = this[i + start]\r\n }\r\n } else {\r\n Uint8Array.prototype.set.call(\r\n target,\r\n this.subarray(start, start + len),\r\n targetStart\r\n )\r\n }\r\n\r\n return len\r\n }\r\n\r\n // Usage:\r\n // buffer.fill(number[, offset[, end]])\r\n // buffer.fill(buffer[, offset[, end]])\r\n // buffer.fill(string[, offset[, end]][, encoding])\r\n Buffer.prototype.fill = function fill(val, start, end, encoding) {\r\n // Handle string cases:\r\n if (typeof val === 'string') {\r\n if (typeof start === 'string') {\r\n encoding = start\r\n start = 0\r\n end = this.length\r\n } else if (typeof end === 'string') {\r\n encoding = end\r\n end = this.length\r\n }\r\n if (val.length === 1) {\r\n var code = val.charCodeAt(0)\r\n if (code < 256) {\r\n val = code\r\n }\r\n }\r\n if (encoding !== undefined && typeof encoding !== 'string') {\r\n throw new TypeError('encoding must be a string')\r\n }\r\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\r\n throw new TypeError('Unknown encoding: ' + encoding)\r\n }\r\n } else if (typeof val === 'number') {\r\n val = val & 255\r\n }\r\n\r\n // Invalid ranges are not set to a default, so can range check early.\r\n if (start < 0 || this.length < start || this.length < end) {\r\n throw new RangeError('Out of range index')\r\n }\r\n\r\n if (end <= start) {\r\n return this\r\n }\r\n\r\n start = start >>> 0\r\n end = end === undefined ? this.length : end >>> 0\r\n\r\n if (!val) val = 0\r\n\r\n var i\r\n if (typeof val === 'number') {\r\n for (i = start; i < end; ++i) {\r\n this[i] = val\r\n }\r\n } else {\r\n var bytes = Buffer.isBuffer(val)\r\n ? val\r\n : utf8ToBytes(new Buffer(val, encoding).toString())\r\n var len = bytes.length\r\n for (i = 0; i < end - start; ++i) {\r\n this[i + start] = bytes[i % len]\r\n }\r\n }\r\n\r\n return this\r\n }\r\n\r\n // HELPER FUNCTIONS\r\n // ================\r\n\r\n var INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\r\n\r\n function base64clean(str) {\r\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\r\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\r\n // Node converts strings with length < 2 to ''\r\n if (str.length < 2) return ''\r\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\r\n while (str.length % 4 !== 0) {\r\n str = str + '='\r\n }\r\n return str\r\n }\r\n\r\n function stringtrim(str) {\r\n if (str.trim) return str.trim()\r\n return str.replace(/^\\s+|\\s+$/g, '')\r\n }\r\n\r\n function toHex(n) {\r\n if (n < 16) return '0' + n.toString(16)\r\n return n.toString(16)\r\n }\r\n\r\n function utf8ToBytes(string, units) {\r\n units = units || Infinity\r\n var codePoint\r\n var length = string.length\r\n var leadSurrogate = null\r\n var bytes = []\r\n\r\n for (var i = 0; i < length; ++i) {\r\n codePoint = string.charCodeAt(i)\r\n\r\n // is surrogate component\r\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\r\n // last char was a lead\r\n if (!leadSurrogate) {\r\n // no lead yet\r\n if (codePoint > 0xDBFF) {\r\n // unexpected trail\r\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\r\n continue\r\n } else if (i + 1 === length) {\r\n // unpaired lead\r\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\r\n continue\r\n }\r\n\r\n // valid lead\r\n leadSurrogate = codePoint\r\n\r\n continue\r\n }\r\n\r\n // 2 leads in a row\r\n if (codePoint < 0xDC00) {\r\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\r\n leadSurrogate = codePoint\r\n continue\r\n }\r\n\r\n // valid surrogate pair\r\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\r\n } else if (leadSurrogate) {\r\n // valid bmp char, but last char was a lead\r\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\r\n }\r\n\r\n leadSurrogate = null\r\n\r\n // encode utf8\r\n if (codePoint < 0x80) {\r\n if ((units -= 1) < 0) break\r\n bytes.push(codePoint)\r\n } else if (codePoint < 0x800) {\r\n if ((units -= 2) < 0) break\r\n bytes.push(\r\n codePoint >> 0x6 | 0xC0,\r\n codePoint & 0x3F | 0x80\r\n )\r\n } else if (codePoint < 0x10000) {\r\n if ((units -= 3) < 0) break\r\n bytes.push(\r\n codePoint >> 0xC | 0xE0,\r\n codePoint >> 0x6 & 0x3F | 0x80,\r\n codePoint & 0x3F | 0x80\r\n )\r\n } else if (codePoint < 0x110000) {\r\n if ((units -= 4) < 0) break\r\n bytes.push(\r\n codePoint >> 0x12 | 0xF0,\r\n codePoint >> 0xC & 0x3F | 0x80,\r\n codePoint >> 0x6 & 0x3F | 0x80,\r\n codePoint & 0x3F | 0x80\r\n )\r\n } else {\r\n throw new Error('Invalid code point')\r\n }\r\n }\r\n\r\n return bytes\r\n }\r\n\r\n function asciiToBytes(str) {\r\n var byteArray = []\r\n for (var i = 0; i < str.length; ++i) {\r\n // Node's code seems to be doing this and not & 0x7F..\r\n byteArray.push(str.charCodeAt(i) & 0xFF)\r\n }\r\n return byteArray\r\n }\r\n\r\n function utf16leToBytes(str, units) {\r\n var c, hi, lo\r\n var byteArray = []\r\n for (var i = 0; i < str.length; ++i) {\r\n if ((units -= 2) < 0) break\r\n\r\n c = str.charCodeAt(i)\r\n hi = c >> 8\r\n lo = c % 256\r\n byteArray.push(lo)\r\n byteArray.push(hi)\r\n }\r\n\r\n return byteArray\r\n }\r\n\r\n function base64ToBytes(str) {\r\n return base64.toByteArray(base64clean(str))\r\n }\r\n\r\n function blitBuffer(src, dst, offset, length) {\r\n for (var i = 0; i < length; ++i) {\r\n if ((i + offset >= dst.length) || (i >= src.length)) break\r\n dst[i + offset] = src[i]\r\n }\r\n return i\r\n }\r\n\r\n function isnan(val) {\r\n return val !== val // eslint-disable-line no-self-compare\r\n }\r\n\r\n }).call(this, typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\r\n }, { \"base64-js\": 30, \"ieee754\": 37, \"isarray\": 40 }], 33: [function (_dereq_, module, exports) {\r\n // contains, add, remove, toggle\r\n var indexof = _dereq_('indexof')\r\n\r\n module.exports = ClassList\r\n\r\n function ClassList(elem) {\r\n var cl = elem.classList\r\n\r\n if (cl) {\r\n return cl\r\n }\r\n\r\n var classList = {\r\n add: add\r\n , remove: remove\r\n , contains: contains\r\n , toggle: toggle\r\n , toString: $toString\r\n , length: 0\r\n , item: item\r\n }\r\n\r\n return classList\r\n\r\n function add(token) {\r\n var list = getTokens()\r\n if (indexof(list, token) > -1) {\r\n return\r\n }\r\n list.push(token)\r\n setTokens(list)\r\n }\r\n\r\n function remove(token) {\r\n var list = getTokens()\r\n , index = indexof(list, token)\r\n\r\n if (index === -1) {\r\n return\r\n }\r\n\r\n list.splice(index, 1)\r\n setTokens(list)\r\n }\r\n\r\n function contains(token) {\r\n return indexof(getTokens(), token) > -1\r\n }\r\n\r\n function toggle(token) {\r\n if (contains(token)) {\r\n remove(token)\r\n return false\r\n } else {\r\n add(token)\r\n return true\r\n }\r\n }\r\n\r\n function $toString() {\r\n return elem.className\r\n }\r\n\r\n function item(index) {\r\n var tokens = getTokens()\r\n return tokens[index] || null\r\n }\r\n\r\n function getTokens() {\r\n var className = elem.className\r\n\r\n return filter(className.split(\" \"), isTruthy)\r\n }\r\n\r\n function setTokens(list) {\r\n var length = list.length\r\n\r\n elem.className = list.join(\" \")\r\n classList.length = length\r\n\r\n for (var i = 0; i < list.length; i++) {\r\n classList[i] = list[i]\r\n }\r\n\r\n delete list[length]\r\n }\r\n }\r\n\r\n function filter(arr, fn) {\r\n var ret = []\r\n for (var i = 0; i < arr.length; i++) {\r\n if (fn(arr[i])) ret.push(arr[i])\r\n }\r\n return ret\r\n }\r\n\r\n function isTruthy(value) {\r\n return !!value\r\n }\r\n\r\n }, { \"indexof\": 38 }], 34: [function (_dereq_, module, exports) {\r\n // DEV: We don't use var but favor parameters since these play nicer with minification\r\n function computedStyle(el, prop, getComputedStyle, style) {\r\n getComputedStyle = window.getComputedStyle;\r\n style =\r\n // If we have getComputedStyle\r\n getComputedStyle ?\r\n // Query it\r\n // TODO: From CSS-Query notes, we might need (node, null) for FF\r\n getComputedStyle(el) :\r\n\r\n // Otherwise, we are in IE and use currentStyle\r\n el.currentStyle;\r\n if (style) {\r\n return style\r\n [\r\n // Switch to camelCase for CSSOM\r\n // DEV: Grabbed from jQuery\r\n // https://github.com/jquery/jquery/blob/1.9-stable/src/css.js#L191-L194\r\n // https://github.com/jquery/jquery/blob/1.9-stable/src/core.js#L593-L597\r\n prop.replace(/-(\\w)/gi, function (word, letter) {\r\n return letter.toUpperCase();\r\n })\r\n ];\r\n }\r\n }\r\n\r\n module.exports = computedStyle;\r\n\r\n }, {}], 35: [function (_dereq_, module, exports) {\r\n /*!\r\n * https://github.com/es-shims/es5-shim\r\n * @license es5-shim Copyright 2009-2015 by contributors, MIT License\r\n * see https://github.com/es-shims/es5-shim/blob/master/LICENSE\r\n */\r\n\r\n // vim: ts=4 sts=4 sw=4 expandtab\r\n\r\n // Add semicolon to prevent IIFE from being passed as argument to concatenated code.\r\n ;\r\n\r\n // UMD (Universal Module Definition)\r\n // see https://github.com/umdjs/umd/blob/master/templates/returnExports.js\r\n (function (root, factory) {\r\n 'use strict';\r\n\r\n /* global define, exports, module */\r\n if (typeof define === 'function' && define.amd) {\r\n // AMD. Register as an anonymous module.\r\n define(factory);\r\n } else if (typeof exports === 'object') {\r\n // Node. Does not work with strict CommonJS, but\r\n // only CommonJS-like enviroments that support module.exports,\r\n // like Node.\r\n module.exports = factory();\r\n } else {\r\n // Browser globals (root is window)\r\n root.returnExports = factory();\r\n }\r\n }(this, function () {\r\n /**\r\n * Brings an environment as close to ECMAScript 5 compliance\r\n * as is possible with the facilities of erstwhile engines.\r\n *\r\n * Annotated ES5: http://es5.github.com/ (specific links below)\r\n * ES5 Spec: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf\r\n * Required reading: http://javascriptweblog.wordpress.com/2011/12/05/extending-javascript-natives/\r\n */\r\n\r\n // Shortcut to an often accessed properties, in order to avoid multiple\r\n // dereference that costs universally. This also holds a reference to known-good\r\n // functions.\r\n var $Array = Array;\r\n var ArrayPrototype = $Array.prototype;\r\n var $Object = Object;\r\n var ObjectPrototype = $Object.prototype;\r\n var $Function = Function;\r\n var FunctionPrototype = $Function.prototype;\r\n var $String = String;\r\n var StringPrototype = $String.prototype;\r\n var $Number = Number;\r\n var NumberPrototype = $Number.prototype;\r\n var array_slice = ArrayPrototype.slice;\r\n var array_splice = ArrayPrototype.splice;\r\n var array_push = ArrayPrototype.push;\r\n var array_unshift = ArrayPrototype.unshift;\r\n var array_concat = ArrayPrototype.concat;\r\n var array_join = ArrayPrototype.join;\r\n var call = FunctionPrototype.call;\r\n var apply = FunctionPrototype.apply;\r\n var max = Math.max;\r\n var min = Math.min;\r\n\r\n // Having a toString local variable name breaks in Opera so use to_string.\r\n var to_string = ObjectPrototype.toString;\r\n\r\n /* global Symbol */\r\n /* eslint-disable one-var-declaration-per-line, no-redeclare, max-statements-per-line */\r\n var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';\r\n var isCallable; /* inlined from https://npmjs.com/is-callable */ var fnToStr = Function.prototype.toString, constructorRegex = /^\\s*class /, isES6ClassFn = function isES6ClassFn(value) { try { var fnStr = fnToStr.call(value); var singleStripped = fnStr.replace(/\\/\\/.*\\n/g, ''); var multiStripped = singleStripped.replace(/\\/\\*[.\\s\\S]*\\*\\//g, ''); var spaceStripped = multiStripped.replace(/\\n/mg, ' ').replace(/ {2}/g, ' '); return constructorRegex.test(spaceStripped); } catch (e) { return false; /* not a function */ } }, tryFunctionObject = function tryFunctionObject(value) { try { if (isES6ClassFn(value)) { return false; } fnToStr.call(value); return true; } catch (e) { return false; } }, fnClass = '[object Function]', genClass = '[object GeneratorFunction]', isCallable = function isCallable(value) { if (!value) { return false; } if (typeof value !== 'function' && typeof value !== 'object') { return false; } if (hasToStringTag) { return tryFunctionObject(value); } if (isES6ClassFn(value)) { return false; } var strClass = to_string.call(value); return strClass === fnClass || strClass === genClass; };\r\n\r\n var isRegex; /* inlined from https://npmjs.com/is-regex */ var regexExec = RegExp.prototype.exec, tryRegexExec = function tryRegexExec(value) { try { regexExec.call(value); return true; } catch (e) { return false; } }, regexClass = '[object RegExp]'; isRegex = function isRegex(value) { if (typeof value !== 'object') { return false; } return hasToStringTag ? tryRegexExec(value) : to_string.call(value) === regexClass; };\r\n var isString; /* inlined from https://npmjs.com/is-string */ var strValue = String.prototype.valueOf, tryStringObject = function tryStringObject(value) { try { strValue.call(value); return true; } catch (e) { return false; } }, stringClass = '[object String]'; isString = function isString(value) { if (typeof value === 'string') { return true; } if (typeof value !== 'object') { return false; } return hasToStringTag ? tryStringObject(value) : to_string.call(value) === stringClass; };\r\n /* eslint-enable one-var-declaration-per-line, no-redeclare, max-statements-per-line */\r\n\r\n /* inlined from http://npmjs.com/define-properties */\r\n var supportsDescriptors = $Object.defineProperty && (function () {\r\n try {\r\n var obj = {};\r\n $Object.defineProperty(obj, 'x', { enumerable: false, value: obj });\r\n for (var _ in obj) { // jscs:ignore disallowUnusedVariables\r\n return false;\r\n }\r\n return obj.x === obj;\r\n } catch (e) { /* this is ES3 */\r\n return false;\r\n }\r\n }());\r\n var defineProperties = (function (has) {\r\n // Define configurable, writable, and non-enumerable props\r\n // if they don't exist.\r\n var defineProperty;\r\n if (supportsDescriptors) {\r\n defineProperty = function (object, name, method, forceAssign) {\r\n if (!forceAssign && (name in object)) {\r\n return;\r\n }\r\n $Object.defineProperty(object, name, {\r\n configurable: true,\r\n enumerable: false,\r\n writable: true,\r\n value: method\r\n });\r\n };\r\n } else {\r\n defineProperty = function (object, name, method, forceAssign) {\r\n if (!forceAssign && (name in object)) {\r\n return;\r\n }\r\n object[name] = method;\r\n };\r\n }\r\n return function defineProperties(object, map, forceAssign) {\r\n for (var name in map) {\r\n if (has.call(map, name)) {\r\n defineProperty(object, name, map[name], forceAssign);\r\n }\r\n }\r\n };\r\n }(ObjectPrototype.hasOwnProperty));\r\n\r\n //\r\n // Util\r\n // ======\r\n //\r\n\r\n /* replaceable with https://npmjs.com/package/es-abstract /helpers/isPrimitive */\r\n var isPrimitive = function isPrimitive(input) {\r\n var type = typeof input;\r\n return input === null || (type !== 'object' && type !== 'function');\r\n };\r\n\r\n var isActualNaN = $Number.isNaN || function isActualNaN(x) {\r\n return x !== x;\r\n };\r\n\r\n var ES = {\r\n // ES5 9.4\r\n // http://es5.github.com/#x9.4\r\n // http://jsperf.com/to-integer\r\n /* replaceable with https://npmjs.com/package/es-abstract ES5.ToInteger */\r\n ToInteger: function ToInteger(num) {\r\n var n = +num;\r\n if (isActualNaN(n)) {\r\n n = 0;\r\n } else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0)) {\r\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\r\n }\r\n return n;\r\n },\r\n\r\n /* replaceable with https://npmjs.com/package/es-abstract ES5.ToPrimitive */\r\n ToPrimitive: function ToPrimitive(input) {\r\n var val, valueOf, toStr;\r\n if (isPrimitive(input)) {\r\n return input;\r\n }\r\n valueOf = input.valueOf;\r\n if (isCallable(valueOf)) {\r\n val = valueOf.call(input);\r\n if (isPrimitive(val)) {\r\n return val;\r\n }\r\n }\r\n toStr = input.toString;\r\n if (isCallable(toStr)) {\r\n val = toStr.call(input);\r\n if (isPrimitive(val)) {\r\n return val;\r\n }\r\n }\r\n throw new TypeError();\r\n },\r\n\r\n // ES5 9.9\r\n // http://es5.github.com/#x9.9\r\n /* replaceable with https://npmjs.com/package/es-abstract ES5.ToObject */\r\n ToObject: function (o) {\r\n if (o == null) { // this matches both null and undefined\r\n throw new TypeError(\"can't convert \" + o + ' to object');\r\n }\r\n return $Object(o);\r\n },\r\n\r\n /* replaceable with https://npmjs.com/package/es-abstract ES5.ToUint32 */\r\n ToUint32: function ToUint32(x) {\r\n return x >>> 0;\r\n }\r\n };\r\n\r\n //\r\n // Function\r\n // ========\r\n //\r\n\r\n // ES-5 15.3.4.5\r\n // http://es5.github.com/#x15.3.4.5\r\n\r\n var Empty = function Empty() { };\r\n\r\n defineProperties(FunctionPrototype, {\r\n bind: function bind(that) { // .length is 1\r\n // 1. Let Target be the this value.\r\n var target = this;\r\n // 2. If IsCallable(Target) is false, throw a TypeError exception.\r\n if (!isCallable(target)) {\r\n throw new TypeError('Function.prototype.bind called on incompatible ' + target);\r\n }\r\n // 3. Let A be a new (possibly empty) internal list of all of the\r\n // argument values provided after thisArg (arg1, arg2 etc), in order.\r\n // XXX slicedArgs will stand in for \"A\" if used\r\n var args = array_slice.call(arguments, 1); // for normal call\r\n // 4. Let F be a new native ECMAScript object.\r\n // 11. Set the [[Prototype]] internal property of F to the standard\r\n // built-in Function prototype object as specified in 15.3.3.1.\r\n // 12. Set the [[Call]] internal property of F as described in\r\n // 15.3.4.5.1.\r\n // 13. Set the [[Construct]] internal property of F as described in\r\n // 15.3.4.5.2.\r\n // 14. Set the [[HasInstance]] internal property of F as described in\r\n // 15.3.4.5.3.\r\n var bound;\r\n var binder = function () {\r\n\r\n if (this instanceof bound) {\r\n // 15.3.4.5.2 [[Construct]]\r\n // When the [[Construct]] internal method of a function object,\r\n // F that was created using the bind function is called with a\r\n // list of arguments ExtraArgs, the following steps are taken:\r\n // 1. Let target be the value of F's [[TargetFunction]]\r\n // internal property.\r\n // 2. If target has no [[Construct]] internal method, a\r\n // TypeError exception is thrown.\r\n // 3. Let boundArgs be the value of F's [[BoundArgs]] internal\r\n // property.\r\n // 4. Let args be a new list containing the same values as the\r\n // list boundArgs in the same order followed by the same\r\n // values as the list ExtraArgs in the same order.\r\n // 5. Return the result of calling the [[Construct]] internal\r\n // method of target providing args as the arguments.\r\n\r\n var result = apply.call(\r\n target,\r\n this,\r\n array_concat.call(args, array_slice.call(arguments))\r\n );\r\n if ($Object(result) === result) {\r\n return result;\r\n }\r\n return this;\r\n\r\n } else {\r\n // 15.3.4.5.1 [[Call]]\r\n // When the [[Call]] internal method of a function object, F,\r\n // which was created using the bind function is called with a\r\n // this value and a list of arguments ExtraArgs, the following\r\n // steps are taken:\r\n // 1. Let boundArgs be the value of F's [[BoundArgs]] internal\r\n // property.\r\n // 2. Let boundThis be the value of F's [[BoundThis]] internal\r\n // property.\r\n // 3. Let target be the value of F's [[TargetFunction]] internal\r\n // property.\r\n // 4. Let args be a new list containing the same values as the\r\n // list boundArgs in the same order followed by the same\r\n // values as the list ExtraArgs in the same order.\r\n // 5. Return the result of calling the [[Call]] internal method\r\n // of target providing boundThis as the this value and\r\n // providing args as the arguments.\r\n\r\n // equiv: target.call(this, ...boundArgs, ...args)\r\n return apply.call(\r\n target,\r\n that,\r\n array_concat.call(args, array_slice.call(arguments))\r\n );\r\n\r\n }\r\n\r\n };\r\n\r\n // 15. If the [[Class]] internal property of Target is \"Function\", then\r\n // a. Let L be the length property of Target minus the length of A.\r\n // b. Set the length own property of F to either 0 or L, whichever is\r\n // larger.\r\n // 16. Else set the length own property of F to 0.\r\n\r\n var boundLength = max(0, target.length - args.length);\r\n\r\n // 17. Set the attributes of the length own property of F to the values\r\n // specified in 15.3.5.1.\r\n var boundArgs = [];\r\n for (var i = 0; i < boundLength; i++) {\r\n array_push.call(boundArgs, '$' + i);\r\n }\r\n\r\n // XXX Build a dynamic function with desired amount of arguments is the only\r\n // way to set the length property of a function.\r\n // In environments where Content Security Policies enabled (Chrome extensions,\r\n // for ex.) all use of eval or Function costructor throws an exception.\r\n // However in all of these environments Function.prototype.bind exists\r\n // and so this code will never be executed.\r\n bound = $Function('binder', 'return function (' + array_join.call(boundArgs, ',') + '){ return binder.apply(this, arguments); }')(binder);\r\n\r\n if (target.prototype) {\r\n Empty.prototype = target.prototype;\r\n bound.prototype = new Empty();\r\n // Clean up dangling references.\r\n Empty.prototype = null;\r\n }\r\n\r\n // TODO\r\n // 18. Set the [[Extensible]] internal property of F to true.\r\n\r\n // TODO\r\n // 19. Let thrower be the [[ThrowTypeError]] function Object (13.2.3).\r\n // 20. Call the [[DefineOwnProperty]] internal method of F with\r\n // arguments \"caller\", PropertyDescriptor {[[Get]]: thrower, [[Set]]:\r\n // thrower, [[Enumerable]]: false, [[Configurable]]: false}, and\r\n // false.\r\n // 21. Call the [[DefineOwnProperty]] internal method of F with\r\n // arguments \"arguments\", PropertyDescriptor {[[Get]]: thrower,\r\n // [[Set]]: thrower, [[Enumerable]]: false, [[Configurable]]: false},\r\n // and false.\r\n\r\n // TODO\r\n // NOTE Function objects created using Function.prototype.bind do not\r\n // have a prototype property or the [[Code]], [[FormalParameters]], and\r\n // [[Scope]] internal properties.\r\n // XXX can't delete prototype in pure-js.\r\n\r\n // 22. Return F.\r\n return bound;\r\n }\r\n });\r\n\r\n // _Please note: Shortcuts are defined after `Function.prototype.bind` as we\r\n // use it in defining shortcuts.\r\n var owns = call.bind(ObjectPrototype.hasOwnProperty);\r\n var toStr = call.bind(ObjectPrototype.toString);\r\n var arraySlice = call.bind(array_slice);\r\n var arraySliceApply = apply.bind(array_slice);\r\n var strSlice = call.bind(StringPrototype.slice);\r\n var strSplit = call.bind(StringPrototype.split);\r\n var strIndexOf = call.bind(StringPrototype.indexOf);\r\n var pushCall = call.bind(array_push);\r\n var isEnum = call.bind(ObjectPrototype.propertyIsEnumerable);\r\n var arraySort = call.bind(ArrayPrototype.sort);\r\n\r\n //\r\n // Array\r\n // =====\r\n //\r\n\r\n var isArray = $Array.isArray || function isArray(obj) {\r\n return toStr(obj) === '[object Array]';\r\n };\r\n\r\n // ES5 15.4.4.12\r\n // http://es5.github.com/#x15.4.4.13\r\n // Return len+argCount.\r\n // [bugfix, ielt8]\r\n // IE < 8 bug: [].unshift(0) === undefined but should be \"1\"\r\n var hasUnshiftReturnValueBug = [].unshift(0) !== 1;\r\n defineProperties(ArrayPrototype, {\r\n unshift: function () {\r\n array_unshift.apply(this, arguments);\r\n return this.length;\r\n }\r\n }, hasUnshiftReturnValueBug);\r\n\r\n // ES5 15.4.3.2\r\n // http://es5.github.com/#x15.4.3.2\r\n // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/isArray\r\n defineProperties($Array, { isArray: isArray });\r\n\r\n // The IsCallable() check in the Array functions\r\n // has been replaced with a strict check on the\r\n // internal class of the object to trap cases where\r\n // the provided function was actually a regular\r\n // expression literal, which in V8 and\r\n // JavaScriptCore is a typeof \"function\". Only in\r\n // V8 are regular expression literals permitted as\r\n // reduce parameters, so it is desirable in the\r\n // general case for the shim to match the more\r\n // strict and common behavior of rejecting regular\r\n // expressions.\r\n\r\n // ES5 15.4.4.18\r\n // http://es5.github.com/#x15.4.4.18\r\n // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/array/forEach\r\n\r\n // Check failure of by-index access of string characters (IE < 9)\r\n // and failure of `0 in boxedString` (Rhino)\r\n var boxedString = $Object('a');\r\n var splitString = boxedString[0] !== 'a' || !(0 in boxedString);\r\n\r\n var properlyBoxesContext = function properlyBoxed(method) {\r\n // Check node 0.6.21 bug where third parameter is not boxed\r\n var properlyBoxesNonStrict = true;\r\n var properlyBoxesStrict = true;\r\n var threwException = false;\r\n if (method) {\r\n try {\r\n method.call('foo', function (_, __, context) {\r\n if (typeof context !== 'object') {\r\n properlyBoxesNonStrict = false;\r\n }\r\n });\r\n\r\n method.call([1], function () {\r\n 'use strict';\r\n\r\n properlyBoxesStrict = typeof this === 'string';\r\n }, 'x');\r\n } catch (e) {\r\n threwException = true;\r\n }\r\n }\r\n return !!method && !threwException && properlyBoxesNonStrict && properlyBoxesStrict;\r\n };\r\n\r\n defineProperties(ArrayPrototype, {\r\n forEach: function forEach(callbackfn/*, thisArg*/) {\r\n var object = ES.ToObject(this);\r\n var self = splitString && isString(this) ? strSplit(this, '') : object;\r\n var i = -1;\r\n var length = ES.ToUint32(self.length);\r\n var T;\r\n if (arguments.length > 1) {\r\n T = arguments[1];\r\n }\r\n\r\n // If no callback function or if callback is not a callable function\r\n if (!isCallable(callbackfn)) {\r\n throw new TypeError('Array.prototype.forEach callback must be a function');\r\n }\r\n\r\n while (++i < length) {\r\n if (i in self) {\r\n // Invoke the callback function with call, passing arguments:\r\n // context, property value, property key, thisArg object\r\n if (typeof T === 'undefined') {\r\n callbackfn(self[i], i, object);\r\n } else {\r\n callbackfn.call(T, self[i], i, object);\r\n }\r\n }\r\n }\r\n }\r\n }, !properlyBoxesContext(ArrayPrototype.forEach));\r\n\r\n // ES5 15.4.4.19\r\n // http://es5.github.com/#x15.4.4.19\r\n // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/map\r\n defineProperties(ArrayPrototype, {\r\n map: function map(callbackfn/*, thisArg*/) {\r\n var object = ES.ToObject(this);\r\n var self = splitString && isString(this) ? strSplit(this, '') : object;\r\n var length = ES.ToUint32(self.length);\r\n var result = $Array(length);\r\n var T;\r\n if (arguments.length > 1) {\r\n T = arguments[1];\r\n }\r\n\r\n // If no callback function or if callback is not a callable function\r\n if (!isCallable(callbackfn)) {\r\n throw new TypeError('Array.prototype.map callback must be a function');\r\n }\r\n\r\n for (var i = 0; i < length; i++) {\r\n if (i in self) {\r\n if (typeof T === 'undefined') {\r\n result[i] = callbackfn(self[i], i, object);\r\n } else {\r\n result[i] = callbackfn.call(T, self[i], i, object);\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n }, !properlyBoxesContext(ArrayPrototype.map));\r\n\r\n // ES5 15.4.4.20\r\n // http://es5.github.com/#x15.4.4.20\r\n // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/filter\r\n defineProperties(ArrayPrototype, {\r\n filter: function filter(callbackfn/*, thisArg*/) {\r\n var object = ES.ToObject(this);\r\n var self = splitString && isString(this) ? strSplit(this, '') : object;\r\n var length = ES.ToUint32(self.length);\r\n var result = [];\r\n var value;\r\n var T;\r\n if (arguments.length > 1) {\r\n T = arguments[1];\r\n }\r\n\r\n // If no callback function or if callback is not a callable function\r\n if (!isCallable(callbackfn)) {\r\n throw new TypeError('Array.prototype.filter callback must be a function');\r\n }\r\n\r\n for (var i = 0; i < length; i++) {\r\n if (i in self) {\r\n value = self[i];\r\n if (typeof T === 'undefined' ? callbackfn(value, i, object) : callbackfn.call(T, value, i, object)) {\r\n pushCall(result, value);\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n }, !properlyBoxesContext(ArrayPrototype.filter));\r\n\r\n // ES5 15.4.4.16\r\n // http://es5.github.com/#x15.4.4.16\r\n // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/every\r\n defineProperties(ArrayPrototype, {\r\n every: function every(callbackfn/*, thisArg*/) {\r\n var object = ES.ToObject(this);\r\n var self = splitString && isString(this) ? strSplit(this, '') : object;\r\n var length = ES.ToUint32(self.length);\r\n var T;\r\n if (arguments.length > 1) {\r\n T = arguments[1];\r\n }\r\n\r\n // If no callback function or if callback is not a callable function\r\n if (!isCallable(callbackfn)) {\r\n throw new TypeError('Array.prototype.every callback must be a function');\r\n }\r\n\r\n for (var i = 0; i < length; i++) {\r\n if (i in self && !(typeof T === 'undefined' ? callbackfn(self[i], i, object) : callbackfn.call(T, self[i], i, object))) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n }, !properlyBoxesContext(ArrayPrototype.every));\r\n\r\n // ES5 15.4.4.17\r\n // http://es5.github.com/#x15.4.4.17\r\n // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/some\r\n defineProperties(ArrayPrototype, {\r\n some: function some(callbackfn/*, thisArg */) {\r\n var object = ES.ToObject(this);\r\n var self = splitString && isString(this) ? strSplit(this, '') : object;\r\n var length = ES.ToUint32(self.length);\r\n var T;\r\n if (arguments.length > 1) {\r\n T = arguments[1];\r\n }\r\n\r\n // If no callback function or if callback is not a callable function\r\n if (!isCallable(callbackfn)) {\r\n throw new TypeError('Array.prototype.some callback must be a function');\r\n }\r\n\r\n for (var i = 0; i < length; i++) {\r\n if (i in self && (typeof T === 'undefined' ? callbackfn(self[i], i, object) : callbackfn.call(T, self[i], i, object))) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n }, !properlyBoxesContext(ArrayPrototype.some));\r\n\r\n // ES5 15.4.4.21\r\n // http://es5.github.com/#x15.4.4.21\r\n // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/reduce\r\n var reduceCoercesToObject = false;\r\n if (ArrayPrototype.reduce) {\r\n reduceCoercesToObject = typeof ArrayPrototype.reduce.call('es5', function (_, __, ___, list) {\r\n return list;\r\n }) === 'object';\r\n }\r\n defineProperties(ArrayPrototype, {\r\n reduce: function reduce(callbackfn/*, initialValue*/) {\r\n var object = ES.ToObject(this);\r\n var self = splitString && isString(this) ? strSplit(this, '') : object;\r\n var length = ES.ToUint32(self.length);\r\n\r\n // If no callback function or if callback is not a callable function\r\n if (!isCallable(callbackfn)) {\r\n throw new TypeError('Array.prototype.reduce callback must be a function');\r\n }\r\n\r\n // no value to return if no initial value and an empty array\r\n if (length === 0 && arguments.length === 1) {\r\n throw new TypeError('reduce of empty array with no initial value');\r\n }\r\n\r\n var i = 0;\r\n var result;\r\n if (arguments.length >= 2) {\r\n result = arguments[1];\r\n } else {\r\n do {\r\n if (i in self) {\r\n result = self[i++];\r\n break;\r\n }\r\n\r\n // if array contains no values, no initial value to return\r\n if (++i >= length) {\r\n throw new TypeError('reduce of empty array with no initial value');\r\n }\r\n } while (true);\r\n }\r\n\r\n for (; i < length; i++) {\r\n if (i in self) {\r\n result = callbackfn(result, self[i], i, object);\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n }, !reduceCoercesToObject);\r\n\r\n // ES5 15.4.4.22\r\n // http://es5.github.com/#x15.4.4.22\r\n // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/reduceRight\r\n var reduceRightCoercesToObject = false;\r\n if (ArrayPrototype.reduceRight) {\r\n reduceRightCoercesToObject = typeof ArrayPrototype.reduceRight.call('es5', function (_, __, ___, list) {\r\n return list;\r\n }) === 'object';\r\n }\r\n defineProperties(ArrayPrototype, {\r\n reduceRight: function reduceRight(callbackfn/*, initial*/) {\r\n var object = ES.ToObject(this);\r\n var self = splitString && isString(this) ? strSplit(this, '') : object;\r\n var length = ES.ToUint32(self.length);\r\n\r\n // If no callback function or if callback is not a callable function\r\n if (!isCallable(callbackfn)) {\r\n throw new TypeError('Array.prototype.reduceRight callback must be a function');\r\n }\r\n\r\n // no value to return if no initial value, empty array\r\n if (length === 0 && arguments.length === 1) {\r\n throw new TypeError('reduceRight of empty array with no initial value');\r\n }\r\n\r\n var result;\r\n var i = length - 1;\r\n if (arguments.length >= 2) {\r\n result = arguments[1];\r\n } else {\r\n do {\r\n if (i in self) {\r\n result = self[i--];\r\n break;\r\n }\r\n\r\n // if array contains no values, no initial value to return\r\n if (--i < 0) {\r\n throw new TypeError('reduceRight of empty array with no initial value');\r\n }\r\n } while (true);\r\n }\r\n\r\n if (i < 0) {\r\n return result;\r\n }\r\n\r\n do {\r\n if (i in self) {\r\n result = callbackfn(result, self[i], i, object);\r\n }\r\n } while (i--);\r\n\r\n return result;\r\n }\r\n }, !reduceRightCoercesToObject);\r\n\r\n // ES5 15.4.4.14\r\n // http://es5.github.com/#x15.4.4.14\r\n // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf\r\n var hasFirefox2IndexOfBug = ArrayPrototype.indexOf && [0, 1].indexOf(1, 2) !== -1;\r\n defineProperties(ArrayPrototype, {\r\n indexOf: function indexOf(searchElement/*, fromIndex */) {\r\n var self = splitString && isString(this) ? strSplit(this, '') : ES.ToObject(this);\r\n var length = ES.ToUint32(self.length);\r\n\r\n if (length === 0) {\r\n return -1;\r\n }\r\n\r\n var i = 0;\r\n if (arguments.length > 1) {\r\n i = ES.ToInteger(arguments[1]);\r\n }\r\n\r\n // handle negative indices\r\n i = i >= 0 ? i : max(0, length + i);\r\n for (; i < length; i++) {\r\n if (i in self && self[i] === searchElement) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n }, hasFirefox2IndexOfBug);\r\n\r\n // ES5 15.4.4.15\r\n // http://es5.github.com/#x15.4.4.15\r\n // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/lastIndexOf\r\n var hasFirefox2LastIndexOfBug = ArrayPrototype.lastIndexOf && [0, 1].lastIndexOf(0, -3) !== -1;\r\n defineProperties(ArrayPrototype, {\r\n lastIndexOf: function lastIndexOf(searchElement/*, fromIndex */) {\r\n var self = splitString && isString(this) ? strSplit(this, '') : ES.ToObject(this);\r\n var length = ES.ToUint32(self.length);\r\n\r\n if (length === 0) {\r\n return -1;\r\n }\r\n var i = length - 1;\r\n if (arguments.length > 1) {\r\n i = min(i, ES.ToInteger(arguments[1]));\r\n }\r\n // handle negative indices\r\n i = i >= 0 ? i : length - Math.abs(i);\r\n for (; i >= 0; i--) {\r\n if (i in self && searchElement === self[i]) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n }, hasFirefox2LastIndexOfBug);\r\n\r\n // ES5 15.4.4.12\r\n // http://es5.github.com/#x15.4.4.12\r\n var spliceNoopReturnsEmptyArray = (function () {\r\n var a = [1, 2];\r\n var result = a.splice();\r\n return a.length === 2 && isArray(result) && result.length === 0;\r\n }());\r\n defineProperties(ArrayPrototype, {\r\n // Safari 5.0 bug where .splice() returns undefined\r\n splice: function splice(start, deleteCount) {\r\n if (arguments.length === 0) {\r\n return [];\r\n } else {\r\n return array_splice.apply(this, arguments);\r\n }\r\n }\r\n }, !spliceNoopReturnsEmptyArray);\r\n\r\n var spliceWorksWithEmptyObject = (function () {\r\n var obj = {};\r\n ArrayPrototype.splice.call(obj, 0, 0, 1);\r\n return obj.length === 1;\r\n }());\r\n defineProperties(ArrayPrototype, {\r\n splice: function splice(start, deleteCount) {\r\n if (arguments.length === 0) {\r\n return [];\r\n }\r\n var args = arguments;\r\n this.length = max(ES.ToInteger(this.length), 0);\r\n if (arguments.length > 0 && typeof deleteCount !== 'number') {\r\n args = arraySlice(arguments);\r\n if (args.length < 2) {\r\n pushCall(args, this.length - start);\r\n } else {\r\n args[1] = ES.ToInteger(deleteCount);\r\n }\r\n }\r\n return array_splice.apply(this, args);\r\n }\r\n }, !spliceWorksWithEmptyObject);\r\n var spliceWorksWithLargeSparseArrays = (function () {\r\n // Per https://github.com/es-shims/es5-shim/issues/295\r\n // Safari 7/8 breaks with sparse arrays of size 1e5 or greater\r\n var arr = new $Array(1e5);\r\n // note: the index MUST be 8 or larger or the test will false pass\r\n arr[8] = 'x';\r\n arr.splice(1, 1);\r\n // note: this test must be defined *after* the indexOf shim\r\n // per https://github.com/es-shims/es5-shim/issues/313\r\n return arr.indexOf('x') === 7;\r\n }());\r\n var spliceWorksWithSmallSparseArrays = (function () {\r\n // Per https://github.com/es-shims/es5-shim/issues/295\r\n // Opera 12.15 breaks on this, no idea why.\r\n var n = 256;\r\n var arr = [];\r\n arr[n] = 'a';\r\n arr.splice(n + 1, 0, 'b');\r\n return arr[n] === 'a';\r\n }());\r\n defineProperties(ArrayPrototype, {\r\n splice: function splice(start, deleteCount) {\r\n var O = ES.ToObject(this);\r\n var A = [];\r\n var len = ES.ToUint32(O.length);\r\n var relativeStart = ES.ToInteger(start);\r\n var actualStart = relativeStart < 0 ? max((len + relativeStart), 0) : min(relativeStart, len);\r\n var actualDeleteCount = min(max(ES.ToInteger(deleteCount), 0), len - actualStart);\r\n\r\n var k = 0;\r\n var from;\r\n while (k < actualDeleteCount) {\r\n from = $String(actualStart + k);\r\n if (owns(O, from)) {\r\n A[k] = O[from];\r\n }\r\n k += 1;\r\n }\r\n\r\n var items = arraySlice(arguments, 2);\r\n var itemCount = items.length;\r\n var to;\r\n if (itemCount < actualDeleteCount) {\r\n k = actualStart;\r\n var maxK = len - actualDeleteCount;\r\n while (k < maxK) {\r\n from = $String(k + actualDeleteCount);\r\n to = $String(k + itemCount);\r\n if (owns(O, from)) {\r\n O[to] = O[from];\r\n } else {\r\n delete O[to];\r\n }\r\n k += 1;\r\n }\r\n k = len;\r\n var minK = len - actualDeleteCount + itemCount;\r\n while (k > minK) {\r\n delete O[k - 1];\r\n k -= 1;\r\n }\r\n } else if (itemCount > actualDeleteCount) {\r\n k = len - actualDeleteCount;\r\n while (k > actualStart) {\r\n from = $String(k + actualDeleteCount - 1);\r\n to = $String(k + itemCount - 1);\r\n if (owns(O, from)) {\r\n O[to] = O[from];\r\n } else {\r\n delete O[to];\r\n }\r\n k -= 1;\r\n }\r\n }\r\n k = actualStart;\r\n for (var i = 0; i < items.length; ++i) {\r\n O[k] = items[i];\r\n k += 1;\r\n }\r\n O.length = len - actualDeleteCount + itemCount;\r\n\r\n return A;\r\n }\r\n }, !spliceWorksWithLargeSparseArrays || !spliceWorksWithSmallSparseArrays);\r\n\r\n var originalJoin = ArrayPrototype.join;\r\n var hasStringJoinBug;\r\n try {\r\n hasStringJoinBug = Array.prototype.join.call('123', ',') !== '1,2,3';\r\n } catch (e) {\r\n hasStringJoinBug = true;\r\n }\r\n if (hasStringJoinBug) {\r\n defineProperties(ArrayPrototype, {\r\n join: function join(separator) {\r\n var sep = typeof separator === 'undefined' ? ',' : separator;\r\n return originalJoin.call(isString(this) ? strSplit(this, '') : this, sep);\r\n }\r\n }, hasStringJoinBug);\r\n }\r\n\r\n var hasJoinUndefinedBug = [1, 2].join(undefined) !== '1,2';\r\n if (hasJoinUndefinedBug) {\r\n defineProperties(ArrayPrototype, {\r\n join: function join(separator) {\r\n var sep = typeof separator === 'undefined' ? ',' : separator;\r\n return originalJoin.call(this, sep);\r\n }\r\n }, hasJoinUndefinedBug);\r\n }\r\n\r\n var pushShim = function push(item) {\r\n var O = ES.ToObject(this);\r\n var n = ES.ToUint32(O.length);\r\n var i = 0;\r\n while (i < arguments.length) {\r\n O[n + i] = arguments[i];\r\n i += 1;\r\n }\r\n O.length = n + i;\r\n return n + i;\r\n };\r\n\r\n var pushIsNotGeneric = (function () {\r\n var obj = {};\r\n var result = Array.prototype.push.call(obj, undefined);\r\n return result !== 1 || obj.length !== 1 || typeof obj[0] !== 'undefined' || !owns(obj, 0);\r\n }());\r\n defineProperties(ArrayPrototype, {\r\n push: function push(item) {\r\n if (isArray(this)) {\r\n return array_push.apply(this, arguments);\r\n }\r\n return pushShim.apply(this, arguments);\r\n }\r\n }, pushIsNotGeneric);\r\n\r\n // This fixes a very weird bug in Opera 10.6 when pushing `undefined\r\n var pushUndefinedIsWeird = (function () {\r\n var arr = [];\r\n var result = arr.push(undefined);\r\n return result !== 1 || arr.length !== 1 || typeof arr[0] !== 'undefined' || !owns(arr, 0);\r\n }());\r\n defineProperties(ArrayPrototype, { push: pushShim }, pushUndefinedIsWeird);\r\n\r\n // ES5 15.2.3.14\r\n // http://es5.github.io/#x15.4.4.10\r\n // Fix boxed string bug\r\n defineProperties(ArrayPrototype, {\r\n slice: function (start, end) {\r\n var arr = isString(this) ? strSplit(this, '') : this;\r\n return arraySliceApply(arr, arguments);\r\n }\r\n }, splitString);\r\n\r\n var sortIgnoresNonFunctions = (function () {\r\n try {\r\n [1, 2].sort(null);\r\n [1, 2].sort({});\r\n return true;\r\n } catch (e) { }\r\n return false;\r\n }());\r\n var sortThrowsOnRegex = (function () {\r\n // this is a problem in Firefox 4, in which `typeof /a/ === 'function'`\r\n try {\r\n [1, 2].sort(/a/);\r\n return false;\r\n } catch (e) { }\r\n return true;\r\n }());\r\n var sortIgnoresUndefined = (function () {\r\n // applies in IE 8, for one.\r\n try {\r\n [1, 2].sort(undefined);\r\n return true;\r\n } catch (e) { }\r\n return false;\r\n }());\r\n defineProperties(ArrayPrototype, {\r\n sort: function sort(compareFn) {\r\n if (typeof compareFn === 'undefined') {\r\n return arraySort(this);\r\n }\r\n if (!isCallable(compareFn)) {\r\n throw new TypeError('Array.prototype.sort callback must be a function');\r\n }\r\n return arraySort(this, compareFn);\r\n }\r\n }, sortIgnoresNonFunctions || !sortIgnoresUndefined || !sortThrowsOnRegex);\r\n\r\n //\r\n // Object\r\n // ======\r\n //\r\n\r\n // ES5 15.2.3.14\r\n // http://es5.github.com/#x15.2.3.14\r\n\r\n // http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation\r\n var hasDontEnumBug = !isEnum({ 'toString': null }, 'toString');\r\n var hasProtoEnumBug = isEnum(function () { }, 'prototype');\r\n var hasStringEnumBug = !owns('x', '0');\r\n var equalsConstructorPrototype = function (o) {\r\n var ctor = o.constructor;\r\n return ctor && ctor.prototype === o;\r\n };\r\n var blacklistedKeys = {\r\n $window: true,\r\n $console: true,\r\n $parent: true,\r\n $self: true,\r\n $frame: true,\r\n $frames: true,\r\n $frameElement: true,\r\n $webkitIndexedDB: true,\r\n $webkitStorageInfo: true,\r\n $external: true\r\n };\r\n var hasAutomationEqualityBug = (function () {\r\n /* globals window */\r\n if (typeof window === 'undefined') {\r\n return false;\r\n }\r\n for (var k in window) {\r\n try {\r\n if (!blacklistedKeys['$' + k] && owns(window, k) && window[k] !== null && typeof window[k] === 'object') {\r\n equalsConstructorPrototype(window[k]);\r\n }\r\n } catch (e) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }());\r\n var equalsConstructorPrototypeIfNotBuggy = function (object) {\r\n if (typeof window === 'undefined' || !hasAutomationEqualityBug) {\r\n return equalsConstructorPrototype(object);\r\n }\r\n try {\r\n return equalsConstructorPrototype(object);\r\n } catch (e) {\r\n return false;\r\n }\r\n };\r\n var dontEnums = [\r\n 'toString',\r\n 'toLocaleString',\r\n 'valueOf',\r\n 'hasOwnProperty',\r\n 'isPrototypeOf',\r\n 'propertyIsEnumerable',\r\n 'constructor'\r\n ];\r\n var dontEnumsLength = dontEnums.length;\r\n\r\n // taken directly from https://github.com/ljharb/is-arguments/blob/master/index.js\r\n // can be replaced with require('is-arguments') if we ever use a build process instead\r\n var isStandardArguments = function isArguments(value) {\r\n return toStr(value) === '[object Arguments]';\r\n };\r\n var isLegacyArguments = function isArguments(value) {\r\n return value !== null &&\r\n typeof value === 'object' &&\r\n typeof value.length === 'number' &&\r\n value.length >= 0 &&\r\n !isArray(value) &&\r\n isCallable(value.callee);\r\n };\r\n var isArguments = isStandardArguments(arguments) ? isStandardArguments : isLegacyArguments;\r\n\r\n defineProperties($Object, {\r\n keys: function keys(object) {\r\n var isFn = isCallable(object);\r\n var isArgs = isArguments(object);\r\n var isObject = object !== null && typeof object === 'object';\r\n var isStr = isObject && isString(object);\r\n\r\n if (!isObject && !isFn && !isArgs) {\r\n throw new TypeError('Object.keys called on a non-object');\r\n }\r\n\r\n var theKeys = [];\r\n var skipProto = hasProtoEnumBug && isFn;\r\n if ((isStr && hasStringEnumBug) || isArgs) {\r\n for (var i = 0; i < object.length; ++i) {\r\n pushCall(theKeys, $String(i));\r\n }\r\n }\r\n\r\n if (!isArgs) {\r\n for (var name in object) {\r\n if (!(skipProto && name === 'prototype') && owns(object, name)) {\r\n pushCall(theKeys, $String(name));\r\n }\r\n }\r\n }\r\n\r\n if (hasDontEnumBug) {\r\n var skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\r\n for (var j = 0; j < dontEnumsLength; j++) {\r\n var dontEnum = dontEnums[j];\r\n if (!(skipConstructor && dontEnum === 'constructor') && owns(object, dontEnum)) {\r\n pushCall(theKeys, dontEnum);\r\n }\r\n }\r\n }\r\n return theKeys;\r\n }\r\n });\r\n\r\n var keysWorksWithArguments = $Object.keys && (function () {\r\n // Safari 5.0 bug\r\n return $Object.keys(arguments).length === 2;\r\n }(1, 2));\r\n var keysHasArgumentsLengthBug = $Object.keys && (function () {\r\n var argKeys = $Object.keys(arguments);\r\n return arguments.length !== 1 || argKeys.length !== 1 || argKeys[0] !== 1;\r\n }(1));\r\n var originalKeys = $Object.keys;\r\n defineProperties($Object, {\r\n keys: function keys(object) {\r\n if (isArguments(object)) {\r\n return originalKeys(arraySlice(object));\r\n } else {\r\n return originalKeys(object);\r\n }\r\n }\r\n }, !keysWorksWithArguments || keysHasArgumentsLengthBug);\r\n\r\n //\r\n // Date\r\n // ====\r\n //\r\n\r\n var hasNegativeMonthYearBug = new Date(-3509827329600292).getUTCMonth() !== 0;\r\n var aNegativeTestDate = new Date(-1509842289600292);\r\n var aPositiveTestDate = new Date(1449662400000);\r\n var hasToUTCStringFormatBug = aNegativeTestDate.toUTCString() !== 'Mon, 01 Jan -45875 11:59:59 GMT';\r\n var hasToDateStringFormatBug;\r\n var hasToStringFormatBug;\r\n var timeZoneOffset = aNegativeTestDate.getTimezoneOffset();\r\n if (timeZoneOffset < -720) {\r\n hasToDateStringFormatBug = aNegativeTestDate.toDateString() !== 'Tue Jan 02 -45875';\r\n hasToStringFormatBug = !(/^Thu Dec 10 2015 \\d\\d:\\d\\d:\\d\\d GMT[-\\+]\\d\\d\\d\\d(?: |$)/).test(aPositiveTestDate.toString());\r\n } else {\r\n hasToDateStringFormatBug = aNegativeTestDate.toDateString() !== 'Mon Jan 01 -45875';\r\n hasToStringFormatBug = !(/^Wed Dec 09 2015 \\d\\d:\\d\\d:\\d\\d GMT[-\\+]\\d\\d\\d\\d(?: |$)/).test(aPositiveTestDate.toString());\r\n }\r\n\r\n var originalGetFullYear = call.bind(Date.prototype.getFullYear);\r\n var originalGetMonth = call.bind(Date.prototype.getMonth);\r\n var originalGetDate = call.bind(Date.prototype.getDate);\r\n var originalGetUTCFullYear = call.bind(Date.prototype.getUTCFullYear);\r\n var originalGetUTCMonth = call.bind(Date.prototype.getUTCMonth);\r\n var originalGetUTCDate = call.bind(Date.prototype.getUTCDate);\r\n var originalGetUTCDay = call.bind(Date.prototype.getUTCDay);\r\n var originalGetUTCHours = call.bind(Date.prototype.getUTCHours);\r\n var originalGetUTCMinutes = call.bind(Date.prototype.getUTCMinutes);\r\n var originalGetUTCSeconds = call.bind(Date.prototype.getUTCSeconds);\r\n var originalGetUTCMilliseconds = call.bind(Date.prototype.getUTCMilliseconds);\r\n var dayName = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\r\n var monthName = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\r\n var daysInMonth = function daysInMonth(month, year) {\r\n return originalGetDate(new Date(year, month, 0));\r\n };\r\n\r\n defineProperties(Date.prototype, {\r\n getFullYear: function getFullYear() {\r\n if (!this || !(this instanceof Date)) {\r\n throw new TypeError('this is not a Date object.');\r\n }\r\n var year = originalGetFullYear(this);\r\n if (year < 0 && originalGetMonth(this) > 11) {\r\n return year + 1;\r\n }\r\n return year;\r\n },\r\n getMonth: function getMonth() {\r\n if (!this || !(this instanceof Date)) {\r\n throw new TypeError('this is not a Date object.');\r\n }\r\n var year = originalGetFullYear(this);\r\n var month = originalGetMonth(this);\r\n if (year < 0 && month > 11) {\r\n return 0;\r\n }\r\n return month;\r\n },\r\n getDate: function getDate() {\r\n if (!this || !(this instanceof Date)) {\r\n throw new TypeError('this is not a Date object.');\r\n }\r\n var year = originalGetFullYear(this);\r\n var month = originalGetMonth(this);\r\n var date = originalGetDate(this);\r\n if (year < 0 && month > 11) {\r\n if (month === 12) {\r\n return date;\r\n }\r\n var days = daysInMonth(0, year + 1);\r\n return (days - date) + 1;\r\n }\r\n return date;\r\n },\r\n getUTCFullYear: function getUTCFullYear() {\r\n if (!this || !(this instanceof Date)) {\r\n throw new TypeError('this is not a Date object.');\r\n }\r\n var year = originalGetUTCFullYear(this);\r\n if (year < 0 && originalGetUTCMonth(this) > 11) {\r\n return year + 1;\r\n }\r\n return year;\r\n },\r\n getUTCMonth: function getUTCMonth() {\r\n if (!this || !(this instanceof Date)) {\r\n throw new TypeError('this is not a Date object.');\r\n }\r\n var year = originalGetUTCFullYear(this);\r\n var month = originalGetUTCMonth(this);\r\n if (year < 0 && month > 11) {\r\n return 0;\r\n }\r\n return month;\r\n },\r\n getUTCDate: function getUTCDate() {\r\n if (!this || !(this instanceof Date)) {\r\n throw new TypeError('this is not a Date object.');\r\n }\r\n var year = originalGetUTCFullYear(this);\r\n var month = originalGetUTCMonth(this);\r\n var date = originalGetUTCDate(this);\r\n if (year < 0 && month > 11) {\r\n if (month === 12) {\r\n return date;\r\n }\r\n var days = daysInMonth(0, year + 1);\r\n return (days - date) + 1;\r\n }\r\n return date;\r\n }\r\n }, hasNegativeMonthYearBug);\r\n\r\n defineProperties(Date.prototype, {\r\n toUTCString: function toUTCString() {\r\n if (!this || !(this instanceof Date)) {\r\n throw new TypeError('this is not a Date object.');\r\n }\r\n var day = originalGetUTCDay(this);\r\n var date = originalGetUTCDate(this);\r\n var month = originalGetUTCMonth(this);\r\n var year = originalGetUTCFullYear(this);\r\n var hour = originalGetUTCHours(this);\r\n var minute = originalGetUTCMinutes(this);\r\n var second = originalGetUTCSeconds(this);\r\n return dayName[day] + ', ' +\r\n (date < 10 ? '0' + date : date) + ' ' +\r\n monthName[month] + ' ' +\r\n year + ' ' +\r\n (hour < 10 ? '0' + hour : hour) + ':' +\r\n (minute < 10 ? '0' + minute : minute) + ':' +\r\n (second < 10 ? '0' + second : second) + ' GMT';\r\n }\r\n }, hasNegativeMonthYearBug || hasToUTCStringFormatBug);\r\n\r\n // Opera 12 has `,`\r\n defineProperties(Date.prototype, {\r\n toDateString: function toDateString() {\r\n if (!this || !(this instanceof Date)) {\r\n throw new TypeError('this is not a Date object.');\r\n }\r\n var day = this.getDay();\r\n var date = this.getDate();\r\n var month = this.getMonth();\r\n var year = this.getFullYear();\r\n return dayName[day] + ' ' +\r\n monthName[month] + ' ' +\r\n (date < 10 ? '0' + date : date) + ' ' +\r\n year;\r\n }\r\n }, hasNegativeMonthYearBug || hasToDateStringFormatBug);\r\n\r\n // can't use defineProperties here because of toString enumeration issue in IE <= 8\r\n if (hasNegativeMonthYearBug || hasToStringFormatBug) {\r\n Date.prototype.toString = function toString() {\r\n if (!this || !(this instanceof Date)) {\r\n throw new TypeError('this is not a Date object.');\r\n }\r\n var day = this.getDay();\r\n var date = this.getDate();\r\n var month = this.getMonth();\r\n var year = this.getFullYear();\r\n var hour = this.getHours();\r\n var minute = this.getMinutes();\r\n var second = this.getSeconds();\r\n var timezoneOffset = this.getTimezoneOffset();\r\n var hoursOffset = Math.floor(Math.abs(timezoneOffset) / 60);\r\n var minutesOffset = Math.floor(Math.abs(timezoneOffset) % 60);\r\n return dayName[day] + ' ' +\r\n monthName[month] + ' ' +\r\n (date < 10 ? '0' + date : date) + ' ' +\r\n year + ' ' +\r\n (hour < 10 ? '0' + hour : hour) + ':' +\r\n (minute < 10 ? '0' + minute : minute) + ':' +\r\n (second < 10 ? '0' + second : second) + ' GMT' +\r\n (timezoneOffset > 0 ? '-' : '+') +\r\n (hoursOffset < 10 ? '0' + hoursOffset : hoursOffset) +\r\n (minutesOffset < 10 ? '0' + minutesOffset : minutesOffset);\r\n };\r\n if (supportsDescriptors) {\r\n $Object.defineProperty(Date.prototype, 'toString', {\r\n configurable: true,\r\n enumerable: false,\r\n writable: true\r\n });\r\n }\r\n }\r\n\r\n // ES5 15.9.5.43\r\n // http://es5.github.com/#x15.9.5.43\r\n // This function returns a String value represent the instance in time\r\n // represented by this Date object. The format of the String is the Date Time\r\n // string format defined in 15.9.1.15. All fields are present in the String.\r\n // The time zone is always UTC, denoted by the suffix Z. If the time value of\r\n // this object is not a finite Number a RangeError exception is thrown.\r\n var negativeDate = -62198755200000;\r\n var negativeYearString = '-000001';\r\n var hasNegativeDateBug = Date.prototype.toISOString && new Date(negativeDate).toISOString().indexOf(negativeYearString) === -1;\r\n var hasSafari51DateBug = Date.prototype.toISOString && new Date(-1).toISOString() !== '1969-12-31T23:59:59.999Z';\r\n\r\n var getTime = call.bind(Date.prototype.getTime);\r\n\r\n defineProperties(Date.prototype, {\r\n toISOString: function toISOString() {\r\n if (!isFinite(this) || !isFinite(getTime(this))) {\r\n // Adope Photoshop requires the second check.\r\n throw new RangeError('Date.prototype.toISOString called on non-finite value.');\r\n }\r\n\r\n var year = originalGetUTCFullYear(this);\r\n\r\n var month = originalGetUTCMonth(this);\r\n // see https://github.com/es-shims/es5-shim/issues/111\r\n year += Math.floor(month / 12);\r\n month = (month % 12 + 12) % 12;\r\n\r\n // the date time string format is specified in 15.9.1.15.\r\n var result = [month + 1, originalGetUTCDate(this), originalGetUTCHours(this), originalGetUTCMinutes(this), originalGetUTCSeconds(this)];\r\n year = (\r\n (year < 0 ? '-' : (year > 9999 ? '+' : '')) +\r\n strSlice('00000' + Math.abs(year), (0 <= year && year <= 9999) ? -4 : -6)\r\n );\r\n\r\n for (var i = 0; i < result.length; ++i) {\r\n // pad months, days, hours, minutes, and seconds to have two digits.\r\n result[i] = strSlice('00' + result[i], -2);\r\n }\r\n // pad milliseconds to have three digits.\r\n return (\r\n year + '-' + arraySlice(result, 0, 2).join('-') +\r\n 'T' + arraySlice(result, 2).join(':') + '.' +\r\n strSlice('000' + originalGetUTCMilliseconds(this), -3) + 'Z'\r\n );\r\n }\r\n }, hasNegativeDateBug || hasSafari51DateBug);\r\n\r\n // ES5 15.9.5.44\r\n // http://es5.github.com/#x15.9.5.44\r\n // This function provides a String representation of a Date object for use by\r\n // JSON.stringify (15.12.3).\r\n var dateToJSONIsSupported = (function () {\r\n try {\r\n return Date.prototype.toJSON &&\r\n new Date(NaN).toJSON() === null &&\r\n new Date(negativeDate).toJSON().indexOf(negativeYearString) !== -1 &&\r\n Date.prototype.toJSON.call({ // generic\r\n toISOString: function () { return true; }\r\n });\r\n } catch (e) {\r\n return false;\r\n }\r\n }());\r\n if (!dateToJSONIsSupported) {\r\n Date.prototype.toJSON = function toJSON(key) {\r\n // When the toJSON method is called with argument key, the following\r\n // steps are taken:\r\n\r\n // 1. Let O be the result of calling ToObject, giving it the this\r\n // value as its argument.\r\n // 2. Let tv be ES.ToPrimitive(O, hint Number).\r\n var O = $Object(this);\r\n var tv = ES.ToPrimitive(O);\r\n // 3. If tv is a Number and is not finite, return null.\r\n if (typeof tv === 'number' && !isFinite(tv)) {\r\n return null;\r\n }\r\n // 4. Let toISO be the result of calling the [[Get]] internal method of\r\n // O with argument \"toISOString\".\r\n var toISO = O.toISOString;\r\n // 5. If IsCallable(toISO) is false, throw a TypeError exception.\r\n if (!isCallable(toISO)) {\r\n throw new TypeError('toISOString property is not callable');\r\n }\r\n // 6. Return the result of calling the [[Call]] internal method of\r\n // toISO with O as the this value and an empty argument list.\r\n return toISO.call(O);\r\n\r\n // NOTE 1 The argument is ignored.\r\n\r\n // NOTE 2 The toJSON function is intentionally generic; it does not\r\n // require that its this value be a Date object. Therefore, it can be\r\n // transferred to other kinds of objects for use as a method. However,\r\n // it does require that any such object have a toISOString method. An\r\n // object is free to use the argument key to filter its\r\n // stringification.\r\n };\r\n }\r\n\r\n // ES5 15.9.4.2\r\n // http://es5.github.com/#x15.9.4.2\r\n // based on work shared by Daniel Friesen (dantman)\r\n // http://gist.github.com/303249\r\n var supportsExtendedYears = Date.parse('+033658-09-27T01:46:40.000Z') === 1e15;\r\n var acceptsInvalidDates = !isNaN(Date.parse('2012-04-04T24:00:00.500Z')) || !isNaN(Date.parse('2012-11-31T23:59:59.000Z')) || !isNaN(Date.parse('2012-12-31T23:59:60.000Z'));\r\n var doesNotParseY2KNewYear = isNaN(Date.parse('2000-01-01T00:00:00.000Z'));\r\n if (doesNotParseY2KNewYear || acceptsInvalidDates || !supportsExtendedYears) {\r\n // XXX global assignment won't work in embeddings that use\r\n // an alternate object for the context.\r\n /* global Date: true */\r\n /* eslint-disable no-undef */\r\n var maxSafeUnsigned32Bit = Math.pow(2, 31) - 1;\r\n var hasSafariSignedIntBug = isActualNaN(new Date(1970, 0, 1, 0, 0, 0, maxSafeUnsigned32Bit + 1).getTime());\r\n /* eslint-disable no-implicit-globals */\r\n Date = (function (NativeDate) {\r\n /* eslint-enable no-implicit-globals */\r\n /* eslint-enable no-undef */\r\n // Date.length === 7\r\n var DateShim = function Date(Y, M, D, h, m, s, ms) {\r\n var length = arguments.length;\r\n var date;\r\n if (this instanceof NativeDate) {\r\n var seconds = s;\r\n var millis = ms;\r\n if (hasSafariSignedIntBug && length >= 7 && ms > maxSafeUnsigned32Bit) {\r\n // work around a Safari 8/9 bug where it treats the seconds as signed\r\n var msToShift = Math.floor(ms / maxSafeUnsigned32Bit) * maxSafeUnsigned32Bit;\r\n var sToShift = Math.floor(msToShift / 1e3);\r\n seconds += sToShift;\r\n millis -= sToShift * 1e3;\r\n }\r\n date = length === 1 && $String(Y) === Y ? // isString(Y)\r\n // We explicitly pass it through parse:\r\n new NativeDate(DateShim.parse(Y)) :\r\n // We have to manually make calls depending on argument\r\n // length here\r\n length >= 7 ? new NativeDate(Y, M, D, h, m, seconds, millis) :\r\n length >= 6 ? new NativeDate(Y, M, D, h, m, seconds) :\r\n length >= 5 ? new NativeDate(Y, M, D, h, m) :\r\n length >= 4 ? new NativeDate(Y, M, D, h) :\r\n length >= 3 ? new NativeDate(Y, M, D) :\r\n length >= 2 ? new NativeDate(Y, M) :\r\n length >= 1 ? new NativeDate(Y instanceof NativeDate ? +Y : Y) :\r\n new NativeDate();\r\n } else {\r\n date = NativeDate.apply(this, arguments);\r\n }\r\n if (!isPrimitive(date)) {\r\n // Prevent mixups with unfixed Date object\r\n defineProperties(date, { constructor: DateShim }, true);\r\n }\r\n return date;\r\n };\r\n\r\n // 15.9.1.15 Date Time String Format.\r\n var isoDateExpression = new RegExp('^' +\r\n '(\\\\d{4}|[+-]\\\\d{6})' + // four-digit year capture or sign +\r\n // 6-digit extended year\r\n '(?:-(\\\\d{2})' + // optional month capture\r\n '(?:-(\\\\d{2})' + // optional day capture\r\n '(?:' + // capture hours:minutes:seconds.milliseconds\r\n 'T(\\\\d{2})' + // hours capture\r\n ':(\\\\d{2})' + // minutes capture\r\n '(?:' + // optional :seconds.milliseconds\r\n ':(\\\\d{2})' + // seconds capture\r\n '(?:(\\\\.\\\\d{1,}))?' + // milliseconds capture\r\n ')?' +\r\n '(' + // capture UTC offset component\r\n 'Z|' + // UTC capture\r\n '(?:' + // offset specifier +/-hours:minutes\r\n '([-+])' + // sign capture\r\n '(\\\\d{2})' + // hours offset capture\r\n ':(\\\\d{2})' + // minutes offset capture\r\n ')' +\r\n ')?)?)?)?' +\r\n '$');\r\n\r\n var months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365];\r\n\r\n var dayFromMonth = function dayFromMonth(year, month) {\r\n var t = month > 1 ? 1 : 0;\r\n return (\r\n months[month] +\r\n Math.floor((year - 1969 + t) / 4) -\r\n Math.floor((year - 1901 + t) / 100) +\r\n Math.floor((year - 1601 + t) / 400) +\r\n 365 * (year - 1970)\r\n );\r\n };\r\n\r\n var toUTC = function toUTC(t) {\r\n var s = 0;\r\n var ms = t;\r\n if (hasSafariSignedIntBug && ms > maxSafeUnsigned32Bit) {\r\n // work around a Safari 8/9 bug where it treats the seconds as signed\r\n var msToShift = Math.floor(ms / maxSafeUnsigned32Bit) * maxSafeUnsigned32Bit;\r\n var sToShift = Math.floor(msToShift / 1e3);\r\n s += sToShift;\r\n ms -= sToShift * 1e3;\r\n }\r\n return $Number(new NativeDate(1970, 0, 1, 0, 0, s, ms));\r\n };\r\n\r\n // Copy any custom methods a 3rd party library may have added\r\n for (var key in NativeDate) {\r\n if (owns(NativeDate, key)) {\r\n DateShim[key] = NativeDate[key];\r\n }\r\n }\r\n\r\n // Copy \"native\" methods explicitly; they may be non-enumerable\r\n defineProperties(DateShim, {\r\n now: NativeDate.now,\r\n UTC: NativeDate.UTC\r\n }, true);\r\n DateShim.prototype = NativeDate.prototype;\r\n defineProperties(DateShim.prototype, {\r\n constructor: DateShim\r\n }, true);\r\n\r\n // Upgrade Date.parse to handle simplified ISO 8601 strings\r\n var parseShim = function parse(string) {\r\n var match = isoDateExpression.exec(string);\r\n if (match) {\r\n // parse months, days, hours, minutes, seconds, and milliseconds\r\n // provide default values if necessary\r\n // parse the UTC offset component\r\n var year = $Number(match[1]),\r\n month = $Number(match[2] || 1) - 1,\r\n day = $Number(match[3] || 1) - 1,\r\n hour = $Number(match[4] || 0),\r\n minute = $Number(match[5] || 0),\r\n second = $Number(match[6] || 0),\r\n millisecond = Math.floor($Number(match[7] || 0) * 1000),\r\n // When time zone is missed, local offset should be used\r\n // (ES 5.1 bug)\r\n // see https://bugs.ecmascript.org/show_bug.cgi?id=112\r\n isLocalTime = Boolean(match[4] && !match[8]),\r\n signOffset = match[9] === '-' ? 1 : -1,\r\n hourOffset = $Number(match[10] || 0),\r\n minuteOffset = $Number(match[11] || 0),\r\n result;\r\n var hasMinutesOrSecondsOrMilliseconds = minute > 0 || second > 0 || millisecond > 0;\r\n if (\r\n hour < (hasMinutesOrSecondsOrMilliseconds ? 24 : 25) &&\r\n minute < 60 && second < 60 && millisecond < 1000 &&\r\n month > -1 && month < 12 && hourOffset < 24 &&\r\n minuteOffset < 60 && // detect invalid offsets\r\n day > -1 &&\r\n day < (dayFromMonth(year, month + 1) - dayFromMonth(year, month))\r\n ) {\r\n result = (\r\n (dayFromMonth(year, month) + day) * 24 +\r\n hour +\r\n hourOffset * signOffset\r\n ) * 60;\r\n result = (\r\n (result + minute + minuteOffset * signOffset) * 60 +\r\n second\r\n ) * 1000 + millisecond;\r\n if (isLocalTime) {\r\n result = toUTC(result);\r\n }\r\n if (-8.64e15 <= result && result <= 8.64e15) {\r\n return result;\r\n }\r\n }\r\n return NaN;\r\n }\r\n return NativeDate.parse.apply(this, arguments);\r\n };\r\n defineProperties(DateShim, { parse: parseShim });\r\n\r\n return DateShim;\r\n }(Date));\r\n /* global Date: false */\r\n }\r\n\r\n // ES5 15.9.4.4\r\n // http://es5.github.com/#x15.9.4.4\r\n if (!Date.now) {\r\n Date.now = function now() {\r\n return new Date().getTime();\r\n };\r\n }\r\n\r\n //\r\n // Number\r\n // ======\r\n //\r\n\r\n // ES5.1 15.7.4.5\r\n // http://es5.github.com/#x15.7.4.5\r\n var hasToFixedBugs = NumberPrototype.toFixed && (\r\n (0.00008).toFixed(3) !== '0.000' ||\r\n (0.9).toFixed(0) !== '1' ||\r\n (1.255).toFixed(2) !== '1.25' ||\r\n (1000000000000000128).toFixed(0) !== '1000000000000000128'\r\n );\r\n\r\n var toFixedHelpers = {\r\n base: 1e7,\r\n size: 6,\r\n data: [0, 0, 0, 0, 0, 0],\r\n multiply: function multiply(n, c) {\r\n var i = -1;\r\n var c2 = c;\r\n while (++i < toFixedHelpers.size) {\r\n c2 += n * toFixedHelpers.data[i];\r\n toFixedHelpers.data[i] = c2 % toFixedHelpers.base;\r\n c2 = Math.floor(c2 / toFixedHelpers.base);\r\n }\r\n },\r\n divide: function divide(n) {\r\n var i = toFixedHelpers.size;\r\n var c = 0;\r\n while (--i >= 0) {\r\n c += toFixedHelpers.data[i];\r\n toFixedHelpers.data[i] = Math.floor(c / n);\r\n c = (c % n) * toFixedHelpers.base;\r\n }\r\n },\r\n numToString: function numToString() {\r\n var i = toFixedHelpers.size;\r\n var s = '';\r\n while (--i >= 0) {\r\n if (s !== '' || i === 0 || toFixedHelpers.data[i] !== 0) {\r\n var t = $String(toFixedHelpers.data[i]);\r\n if (s === '') {\r\n s = t;\r\n } else {\r\n s += strSlice('0000000', 0, 7 - t.length) + t;\r\n }\r\n }\r\n }\r\n return s;\r\n },\r\n pow: function pow(x, n, acc) {\r\n return (n === 0 ? acc : (n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc)));\r\n },\r\n log: function log(x) {\r\n var n = 0;\r\n var x2 = x;\r\n while (x2 >= 4096) {\r\n n += 12;\r\n x2 /= 4096;\r\n }\r\n while (x2 >= 2) {\r\n n += 1;\r\n x2 /= 2;\r\n }\r\n return n;\r\n }\r\n };\r\n\r\n var toFixedShim = function toFixed(fractionDigits) {\r\n var f, x, s, m, e, z, j, k;\r\n\r\n // Test for NaN and round fractionDigits down\r\n f = $Number(fractionDigits);\r\n f = isActualNaN(f) ? 0 : Math.floor(f);\r\n\r\n if (f < 0 || f > 20) {\r\n throw new RangeError('Number.toFixed called with invalid number of decimals');\r\n }\r\n\r\n x = $Number(this);\r\n\r\n if (isActualNaN(x)) {\r\n return 'NaN';\r\n }\r\n\r\n // If it is too big or small, return the string value of the number\r\n if (x <= -1e21 || x >= 1e21) {\r\n return $String(x);\r\n }\r\n\r\n s = '';\r\n\r\n if (x < 0) {\r\n s = '-';\r\n x = -x;\r\n }\r\n\r\n m = '0';\r\n\r\n if (x > 1e-21) {\r\n // 1e-21 < x < 1e21\r\n // -70 < log2(x) < 70\r\n e = toFixedHelpers.log(x * toFixedHelpers.pow(2, 69, 1)) - 69;\r\n z = (e < 0 ? x * toFixedHelpers.pow(2, -e, 1) : x / toFixedHelpers.pow(2, e, 1));\r\n z *= 0x10000000000000; // Math.pow(2, 52);\r\n e = 52 - e;\r\n\r\n // -18 < e < 122\r\n // x = z / 2 ^ e\r\n if (e > 0) {\r\n toFixedHelpers.multiply(0, z);\r\n j = f;\r\n\r\n while (j >= 7) {\r\n toFixedHelpers.multiply(1e7, 0);\r\n j -= 7;\r\n }\r\n\r\n toFixedHelpers.multiply(toFixedHelpers.pow(10, j, 1), 0);\r\n j = e - 1;\r\n\r\n while (j >= 23) {\r\n toFixedHelpers.divide(1 << 23);\r\n j -= 23;\r\n }\r\n\r\n toFixedHelpers.divide(1 << j);\r\n toFixedHelpers.multiply(1, 1);\r\n toFixedHelpers.divide(2);\r\n m = toFixedHelpers.numToString();\r\n } else {\r\n toFixedHelpers.multiply(0, z);\r\n toFixedHelpers.multiply(1 << (-e), 0);\r\n m = toFixedHelpers.numToString() + strSlice('0.00000000000000000000', 2, 2 + f);\r\n }\r\n }\r\n\r\n if (f > 0) {\r\n k = m.length;\r\n\r\n if (k <= f) {\r\n m = s + strSlice('0.0000000000000000000', 0, f - k + 2) + m;\r\n } else {\r\n m = s + strSlice(m, 0, k - f) + '.' + strSlice(m, k - f);\r\n }\r\n } else {\r\n m = s + m;\r\n }\r\n\r\n return m;\r\n };\r\n defineProperties(NumberPrototype, { toFixed: toFixedShim }, hasToFixedBugs);\r\n\r\n var hasToPrecisionUndefinedBug = (function () {\r\n try {\r\n return 1.0.toPrecision(undefined) === '1';\r\n } catch (e) {\r\n return true;\r\n }\r\n }());\r\n var originalToPrecision = NumberPrototype.toPrecision;\r\n defineProperties(NumberPrototype, {\r\n toPrecision: function toPrecision(precision) {\r\n return typeof precision === 'undefined' ? originalToPrecision.call(this) : originalToPrecision.call(this, precision);\r\n }\r\n }, hasToPrecisionUndefinedBug);\r\n\r\n //\r\n // String\r\n // ======\r\n //\r\n\r\n // ES5 15.5.4.14\r\n // http://es5.github.com/#x15.5.4.14\r\n\r\n // [bugfix, IE lt 9, firefox 4, Konqueror, Opera, obscure browsers]\r\n // Many browsers do not split properly with regular expressions or they\r\n // do not perform the split correctly under obscure conditions.\r\n // See http://blog.stevenlevithan.com/archives/cross-browser-split\r\n // I've tested in many browsers and this seems to cover the deviant ones:\r\n // 'ab'.split(/(?:ab)*/) should be [\"\", \"\"], not [\"\"]\r\n // '.'.split(/(.?)(.?)/) should be [\"\", \".\", \"\", \"\"], not [\"\", \"\"]\r\n // 'tesst'.split(/(s)*/) should be [\"t\", undefined, \"e\", \"s\", \"t\"], not\r\n // [undefined, \"t\", undefined, \"e\", ...]\r\n // ''.split(/.?/) should be [], not [\"\"]\r\n // '.'.split(/()()/) should be [\".\"], not [\"\", \"\", \".\"]\r\n\r\n if (\r\n 'ab'.split(/(?:ab)*/).length !== 2 ||\r\n '.'.split(/(.?)(.?)/).length !== 4 ||\r\n 'tesst'.split(/(s)*/)[1] === 't' ||\r\n 'test'.split(/(?:)/, -1).length !== 4 ||\r\n ''.split(/.?/).length ||\r\n '.'.split(/()()/).length > 1\r\n ) {\r\n (function () {\r\n var compliantExecNpcg = typeof (/()??/).exec('')[1] === 'undefined'; // NPCG: nonparticipating capturing group\r\n var maxSafe32BitInt = Math.pow(2, 32) - 1;\r\n\r\n StringPrototype.split = function (separator, limit) {\r\n var string = String(this);\r\n if (typeof separator === 'undefined' && limit === 0) {\r\n return [];\r\n }\r\n\r\n // If `separator` is not a regex, use native split\r\n if (!isRegex(separator)) {\r\n return strSplit(this, separator, limit);\r\n }\r\n\r\n var output = [];\r\n var flags = (separator.ignoreCase ? 'i' : '') +\r\n (separator.multiline ? 'm' : '') +\r\n (separator.unicode ? 'u' : '') + // in ES6\r\n (separator.sticky ? 'y' : ''), // Firefox 3+ and ES6\r\n lastLastIndex = 0,\r\n // Make `global` and avoid `lastIndex` issues by working with a copy\r\n separator2, match, lastIndex, lastLength;\r\n var separatorCopy = new RegExp(separator.source, flags + 'g');\r\n if (!compliantExecNpcg) {\r\n // Doesn't need flags gy, but they don't hurt\r\n separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\r\n }\r\n /* Values for `limit`, per the spec:\r\n * If undefined: 4294967295 // maxSafe32BitInt\r\n * If 0, Infinity, or NaN: 0\r\n * If positive number: limit = Math.floor(limit); if (limit > 4294967295) limit -= 4294967296;\r\n * If negative number: 4294967296 - Math.floor(Math.abs(limit))\r\n * If other: Type-convert, then use the above rules\r\n */\r\n var splitLimit = typeof limit === 'undefined' ? maxSafe32BitInt : ES.ToUint32(limit);\r\n match = separatorCopy.exec(string);\r\n while (match) {\r\n // `separatorCopy.lastIndex` is not reliable cross-browser\r\n lastIndex = match.index + match[0].length;\r\n if (lastIndex > lastLastIndex) {\r\n pushCall(output, strSlice(string, lastLastIndex, match.index));\r\n // Fix browsers whose `exec` methods don't consistently return `undefined` for\r\n // nonparticipating capturing groups\r\n if (!compliantExecNpcg && match.length > 1) {\r\n /* eslint-disable no-loop-func */\r\n match[0].replace(separator2, function () {\r\n for (var i = 1; i < arguments.length - 2; i++) {\r\n if (typeof arguments[i] === 'undefined') {\r\n match[i] = void 0;\r\n }\r\n }\r\n });\r\n /* eslint-enable no-loop-func */\r\n }\r\n if (match.length > 1 && match.index < string.length) {\r\n array_push.apply(output, arraySlice(match, 1));\r\n }\r\n lastLength = match[0].length;\r\n lastLastIndex = lastIndex;\r\n if (output.length >= splitLimit) {\r\n break;\r\n }\r\n }\r\n if (separatorCopy.lastIndex === match.index) {\r\n separatorCopy.lastIndex++; // Avoid an infinite loop\r\n }\r\n match = separatorCopy.exec(string);\r\n }\r\n if (lastLastIndex === string.length) {\r\n if (lastLength || !separatorCopy.test('')) {\r\n pushCall(output, '');\r\n }\r\n } else {\r\n pushCall(output, strSlice(string, lastLastIndex));\r\n }\r\n return output.length > splitLimit ? arraySlice(output, 0, splitLimit) : output;\r\n };\r\n }());\r\n\r\n // [bugfix, chrome]\r\n // If separator is undefined, then the result array contains just one String,\r\n // which is the this value (converted to a String). If limit is not undefined,\r\n // then the output array is truncated so that it contains no more than limit\r\n // elements.\r\n // \"0\".split(undefined, 0) -> []\r\n } else if ('0'.split(void 0, 0).length) {\r\n StringPrototype.split = function split(separator, limit) {\r\n if (typeof separator === 'undefined' && limit === 0) {\r\n return [];\r\n }\r\n return strSplit(this, separator, limit);\r\n };\r\n }\r\n\r\n var str_replace = StringPrototype.replace;\r\n var replaceReportsGroupsCorrectly = (function () {\r\n var groups = [];\r\n 'x'.replace(/x(.)?/g, function (match, group) {\r\n pushCall(groups, group);\r\n });\r\n return groups.length === 1 && typeof groups[0] === 'undefined';\r\n }());\r\n\r\n if (!replaceReportsGroupsCorrectly) {\r\n StringPrototype.replace = function replace(searchValue, replaceValue) {\r\n var isFn = isCallable(replaceValue);\r\n var hasCapturingGroups = isRegex(searchValue) && (/\\)[*?]/).test(searchValue.source);\r\n if (!isFn || !hasCapturingGroups) {\r\n return str_replace.call(this, searchValue, replaceValue);\r\n } else {\r\n var wrappedReplaceValue = function (match) {\r\n var length = arguments.length;\r\n var originalLastIndex = searchValue.lastIndex;\r\n searchValue.lastIndex = 0;\r\n var args = searchValue.exec(match) || [];\r\n searchValue.lastIndex = originalLastIndex;\r\n pushCall(args, arguments[length - 2], arguments[length - 1]);\r\n return replaceValue.apply(this, args);\r\n };\r\n return str_replace.call(this, searchValue, wrappedReplaceValue);\r\n }\r\n };\r\n }\r\n\r\n // ECMA-262, 3rd B.2.3\r\n // Not an ECMAScript standard, although ECMAScript 3rd Edition has a\r\n // non-normative section suggesting uniform semantics and it should be\r\n // normalized across all browsers\r\n // [bugfix, IE lt 9] IE < 9 substr() with negative value not working in IE\r\n var string_substr = StringPrototype.substr;\r\n var hasNegativeSubstrBug = ''.substr && '0b'.substr(-1) !== 'b';\r\n defineProperties(StringPrototype, {\r\n substr: function substr(start, length) {\r\n var normalizedStart = start;\r\n if (start < 0) {\r\n normalizedStart = max(this.length + start, 0);\r\n }\r\n return string_substr.call(this, normalizedStart, length);\r\n }\r\n }, hasNegativeSubstrBug);\r\n\r\n // ES5 15.5.4.20\r\n // whitespace from: http://es5.github.io/#x15.5.4.20\r\n var ws = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\r\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028' +\r\n '\\u2029\\uFEFF';\r\n var zeroWidth = '\\u200b';\r\n var wsRegexChars = '[' + ws + ']';\r\n var trimBeginRegexp = new RegExp('^' + wsRegexChars + wsRegexChars + '*');\r\n var trimEndRegexp = new RegExp(wsRegexChars + wsRegexChars + '*$');\r\n var hasTrimWhitespaceBug = StringPrototype.trim && (ws.trim() || !zeroWidth.trim());\r\n defineProperties(StringPrototype, {\r\n // http://blog.stevenlevithan.com/archives/faster-trim-javascript\r\n // http://perfectionkills.com/whitespace-deviations/\r\n trim: function trim() {\r\n if (typeof this === 'undefined' || this === null) {\r\n throw new TypeError(\"can't convert \" + this + ' to object');\r\n }\r\n return $String(this).replace(trimBeginRegexp, '').replace(trimEndRegexp, '');\r\n }\r\n }, hasTrimWhitespaceBug);\r\n var trim = call.bind(String.prototype.trim);\r\n\r\n var hasLastIndexBug = StringPrototype.lastIndexOf && 'abcあい'.lastIndexOf('あい', 2) !== -1;\r\n defineProperties(StringPrototype, {\r\n lastIndexOf: function lastIndexOf(searchString) {\r\n if (typeof this === 'undefined' || this === null) {\r\n throw new TypeError(\"can't convert \" + this + ' to object');\r\n }\r\n var S = $String(this);\r\n var searchStr = $String(searchString);\r\n var numPos = arguments.length > 1 ? $Number(arguments[1]) : NaN;\r\n var pos = isActualNaN(numPos) ? Infinity : ES.ToInteger(numPos);\r\n var start = min(max(pos, 0), S.length);\r\n var searchLen = searchStr.length;\r\n var k = start + searchLen;\r\n while (k > 0) {\r\n k = max(0, k - searchLen);\r\n var index = strIndexOf(strSlice(S, k, start + searchLen), searchStr);\r\n if (index !== -1) {\r\n return k + index;\r\n }\r\n }\r\n return -1;\r\n }\r\n }, hasLastIndexBug);\r\n\r\n var originalLastIndexOf = StringPrototype.lastIndexOf;\r\n defineProperties(StringPrototype, {\r\n lastIndexOf: function lastIndexOf(searchString) {\r\n return originalLastIndexOf.apply(this, arguments);\r\n }\r\n }, StringPrototype.lastIndexOf.length !== 1);\r\n\r\n // ES-5 15.1.2.2\r\n /* eslint-disable radix */\r\n if (parseInt(ws + '08') !== 8 || parseInt(ws + '0x16') !== 22) {\r\n /* eslint-enable radix */\r\n /* global parseInt: true */\r\n parseInt = (function (origParseInt) {\r\n var hexRegex = /^[\\-+]?0[xX]/;\r\n return function parseInt(str, radix) {\r\n var string = trim(String(str));\r\n var defaultedRadix = $Number(radix) || (hexRegex.test(string) ? 16 : 10);\r\n return origParseInt(string, defaultedRadix);\r\n };\r\n }(parseInt));\r\n }\r\n\r\n // https://es5.github.io/#x15.1.2.3\r\n if (1 / parseFloat('-0') !== -Infinity) {\r\n /* global parseFloat: true */\r\n parseFloat = (function (origParseFloat) {\r\n return function parseFloat(string) {\r\n var inputString = trim(String(string));\r\n var result = origParseFloat(inputString);\r\n return result === 0 && strSlice(inputString, 0, 1) === '-' ? -0 : result;\r\n };\r\n }(parseFloat));\r\n }\r\n\r\n if (String(new RangeError('test')) !== 'RangeError: test') {\r\n var errorToStringShim = function toString() {\r\n if (typeof this === 'undefined' || this === null) {\r\n throw new TypeError(\"can't convert \" + this + ' to object');\r\n }\r\n var name = this.name;\r\n if (typeof name === 'undefined') {\r\n name = 'Error';\r\n } else if (typeof name !== 'string') {\r\n name = $String(name);\r\n }\r\n var msg = this.message;\r\n if (typeof msg === 'undefined') {\r\n msg = '';\r\n } else if (typeof msg !== 'string') {\r\n msg = $String(msg);\r\n }\r\n if (!name) {\r\n return msg;\r\n }\r\n if (!msg) {\r\n return name;\r\n }\r\n return name + ': ' + msg;\r\n };\r\n // can't use defineProperties here because of toString enumeration issue in IE <= 8\r\n Error.prototype.toString = errorToStringShim;\r\n }\r\n\r\n if (supportsDescriptors) {\r\n var ensureNonEnumerable = function (obj, prop) {\r\n if (isEnum(obj, prop)) {\r\n var desc = Object.getOwnPropertyDescriptor(obj, prop);\r\n if (desc.configurable) {\r\n desc.enumerable = false;\r\n Object.defineProperty(obj, prop, desc);\r\n }\r\n }\r\n };\r\n ensureNonEnumerable(Error.prototype, 'message');\r\n if (Error.prototype.message !== '') {\r\n Error.prototype.message = '';\r\n }\r\n ensureNonEnumerable(Error.prototype, 'name');\r\n }\r\n\r\n if (String(/a/mig) !== '/a/gim') {\r\n var regexToString = function toString() {\r\n var str = '/' + this.source + '/';\r\n if (this.global) {\r\n str += 'g';\r\n }\r\n if (this.ignoreCase) {\r\n str += 'i';\r\n }\r\n if (this.multiline) {\r\n str += 'm';\r\n }\r\n return str;\r\n };\r\n // can't use defineProperties here because of toString enumeration issue in IE <= 8\r\n RegExp.prototype.toString = regexToString;\r\n }\r\n }));\r\n\r\n }, {}], 36: [function (_dereq_, module, exports) {\r\n var arr = [];\r\n var each = arr.forEach;\r\n var slice = arr.slice;\r\n\r\n\r\n module.exports = function (obj) {\r\n each.call(slice.call(arguments, 1), function (source) {\r\n if (source) {\r\n for (var prop in source) {\r\n obj[prop] = source[prop];\r\n }\r\n }\r\n });\r\n return obj;\r\n };\r\n\r\n }, {}], 37: [function (_dereq_, module, exports) {\r\n exports.read = function (buffer, offset, isLE, mLen, nBytes) {\r\n var e, m\r\n var eLen = nBytes * 8 - mLen - 1\r\n var eMax = (1 << eLen) - 1\r\n var eBias = eMax >> 1\r\n var nBits = -7\r\n var i = isLE ? (nBytes - 1) : 0\r\n var d = isLE ? -1 : 1\r\n var s = buffer[offset + i]\r\n\r\n i += d\r\n\r\n e = s & ((1 << (-nBits)) - 1)\r\n s >>= (-nBits)\r\n nBits += eLen\r\n for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) { }\r\n\r\n m = e & ((1 << (-nBits)) - 1)\r\n e >>= (-nBits)\r\n nBits += mLen\r\n for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) { }\r\n\r\n if (e === 0) {\r\n e = 1 - eBias\r\n } else if (e === eMax) {\r\n return m ? NaN : ((s ? -1 : 1) * Infinity)\r\n } else {\r\n m = m + Math.pow(2, mLen)\r\n e = e - eBias\r\n }\r\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\r\n }\r\n\r\n exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\r\n var e, m, c\r\n var eLen = nBytes * 8 - mLen - 1\r\n var eMax = (1 << eLen) - 1\r\n var eBias = eMax >> 1\r\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\r\n var i = isLE ? 0 : (nBytes - 1)\r\n var d = isLE ? 1 : -1\r\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\r\n\r\n value = Math.abs(value)\r\n\r\n if (isNaN(value) || value === Infinity) {\r\n m = isNaN(value) ? 1 : 0\r\n e = eMax\r\n } else {\r\n e = Math.floor(Math.log(value) / Math.LN2)\r\n if (value * (c = Math.pow(2, -e)) < 1) {\r\n e--\r\n c *= 2\r\n }\r\n if (e + eBias >= 1) {\r\n value += rt / c\r\n } else {\r\n value += rt * Math.pow(2, 1 - eBias)\r\n }\r\n if (value * c >= 2) {\r\n e++\r\n c /= 2\r\n }\r\n\r\n if (e + eBias >= eMax) {\r\n m = 0\r\n e = eMax\r\n } else if (e + eBias >= 1) {\r\n m = (value * c - 1) * Math.pow(2, mLen)\r\n e = e + eBias\r\n } else {\r\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\r\n e = 0\r\n }\r\n }\r\n\r\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) { }\r\n\r\n e = (e << mLen) | m\r\n eLen += mLen\r\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) { }\r\n\r\n buffer[offset + i - d] |= s * 128\r\n }\r\n\r\n }, {}], 38: [function (_dereq_, module, exports) {\r\n\r\n var indexOf = [].indexOf;\r\n\r\n module.exports = function (arr, obj) {\r\n if (indexOf) return arr.indexOf(obj);\r\n for (var i = 0; i < arr.length; ++i) {\r\n if (arr[i] === obj) return i;\r\n }\r\n return -1;\r\n };\r\n }, {}], 39: [function (_dereq_, module, exports) {\r\n module.exports = isFunction\r\n\r\n var toString = Object.prototype.toString\r\n\r\n function isFunction(fn) {\r\n var string = toString.call(fn)\r\n return string === '[object Function]' ||\r\n (typeof fn === 'function' && string !== '[object RegExp]') ||\r\n (typeof window !== 'undefined' &&\r\n // IE8 and below\r\n (fn === window.setTimeout ||\r\n fn === window.alert ||\r\n fn === window.confirm ||\r\n fn === window.prompt))\r\n };\r\n\r\n }, {}], 40: [function (_dereq_, module, exports) {\r\n var toString = {}.toString;\r\n\r\n module.exports = Array.isArray || function (arr) {\r\n return toString.call(arr) == '[object Array]';\r\n };\r\n\r\n }, {}], 41: [function (_dereq_, module, exports) {\r\n (function (global) {\r\n /*! https://mths.be/punycode v1.4.1 by @mathias */\r\n ; (function (root) {\r\n\r\n /** Detect free variables */\r\n var freeExports = typeof exports == 'object' && exports &&\r\n !exports.nodeType && exports;\r\n var freeModule = typeof module == 'object' && module &&\r\n !module.nodeType && module;\r\n var freeGlobal = typeof global == 'object' && global;\r\n if (\r\n freeGlobal.global === freeGlobal ||\r\n freeGlobal.window === freeGlobal ||\r\n freeGlobal.self === freeGlobal\r\n ) {\r\n root = freeGlobal;\r\n }\r\n\r\n /**\r\n * The `punycode` object.\r\n * @name punycode\r\n * @type Object\r\n */\r\n var punycode,\r\n\r\n /** Highest positive signed 32-bit float value */\r\n maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\r\n\r\n /** Bootstring parameters */\r\n base = 36,\r\n tMin = 1,\r\n tMax = 26,\r\n skew = 38,\r\n damp = 700,\r\n initialBias = 72,\r\n initialN = 128, // 0x80\r\n delimiter = '-', // '\\x2D'\r\n\r\n /** Regular expressions */\r\n regexPunycode = /^xn--/,\r\n regexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\r\n regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\r\n\r\n /** Error messages */\r\n errors = {\r\n 'overflow': 'Overflow: input needs wider integers to process',\r\n 'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\r\n 'invalid-input': 'Invalid input'\r\n },\r\n\r\n /** Convenience shortcuts */\r\n baseMinusTMin = base - tMin,\r\n floor = Math.floor,\r\n stringFromCharCode = String.fromCharCode,\r\n\r\n /** Temporary variable */\r\n key;\r\n\r\n /*--------------------------------------------------------------------------*/\r\n\r\n /**\r\n * A generic error utility function.\r\n * @private\r\n * @param {String} type The error type.\r\n * @returns {Error} Throws a `RangeError` with the applicable error message.\r\n */\r\n function error(type) {\r\n throw new RangeError(errors[type]);\r\n }\r\n\r\n /**\r\n * A generic `Array#map` utility function.\r\n * @private\r\n * @param {Array} array The array to iterate over.\r\n * @param {Function} callback The function that gets called for every array\r\n * item.\r\n * @returns {Array} A new array of values returned by the callback function.\r\n */\r\n function map(array, fn) {\r\n var length = array.length;\r\n var result = [];\r\n while (length--) {\r\n result[length] = fn(array[length]);\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * A simple `Array#map`-like wrapper to work with domain name strings or email\r\n * addresses.\r\n * @private\r\n * @param {String} domain The domain name or email address.\r\n * @param {Function} callback The function that gets called for every\r\n * character.\r\n * @returns {Array} A new string of characters returned by the callback\r\n * function.\r\n */\r\n function mapDomain(string, fn) {\r\n var parts = string.split('@');\r\n var result = '';\r\n if (parts.length > 1) {\r\n // In email addresses, only the domain name should be punycoded. Leave\r\n // the local part (i.e. everything up to `@`) intact.\r\n result = parts[0] + '@';\r\n string = parts[1];\r\n }\r\n // Avoid `split(regex)` for IE8 compatibility. See #17.\r\n string = string.replace(regexSeparators, '\\x2E');\r\n var labels = string.split('.');\r\n var encoded = map(labels, fn).join('.');\r\n return result + encoded;\r\n }\r\n\r\n /**\r\n * Creates an array containing the numeric code points of each Unicode\r\n * character in the string. While JavaScript uses UCS-2 internally,\r\n * this function will convert a pair of surrogate halves (each of which\r\n * UCS-2 exposes as separate characters) into a single code point,\r\n * matching UTF-16.\r\n * @see `punycode.ucs2.encode`\r\n * @see \r\n * @memberOf punycode.ucs2\r\n * @name decode\r\n * @param {String} string The Unicode input string (UCS-2).\r\n * @returns {Array} The new array of code points.\r\n */\r\n function ucs2decode(string) {\r\n var output = [],\r\n counter = 0,\r\n length = string.length,\r\n value,\r\n extra;\r\n while (counter < length) {\r\n value = string.charCodeAt(counter++);\r\n if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\r\n // high surrogate, and there is a next character\r\n extra = string.charCodeAt(counter++);\r\n if ((extra & 0xFC00) == 0xDC00) { // low surrogate\r\n output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\r\n } else {\r\n // unmatched surrogate; only append this code unit, in case the next\r\n // code unit is the high surrogate of a surrogate pair\r\n output.push(value);\r\n counter--;\r\n }\r\n } else {\r\n output.push(value);\r\n }\r\n }\r\n return output;\r\n }\r\n\r\n /**\r\n * Creates a string based on an array of numeric code points.\r\n * @see `punycode.ucs2.decode`\r\n * @memberOf punycode.ucs2\r\n * @name encode\r\n * @param {Array} codePoints The array of numeric code points.\r\n * @returns {String} The new Unicode string (UCS-2).\r\n */\r\n function ucs2encode(array) {\r\n return map(array, function (value) {\r\n var output = '';\r\n if (value > 0xFFFF) {\r\n value -= 0x10000;\r\n output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\r\n value = 0xDC00 | value & 0x3FF;\r\n }\r\n output += stringFromCharCode(value);\r\n return output;\r\n }).join('');\r\n }\r\n\r\n /**\r\n * Converts a basic code point into a digit/integer.\r\n * @see `digitToBasic()`\r\n * @private\r\n * @param {Number} codePoint The basic numeric code point value.\r\n * @returns {Number} The numeric value of a basic code point (for use in\r\n * representing integers) in the range `0` to `base - 1`, or `base` if\r\n * the code point does not represent a value.\r\n */\r\n function basicToDigit(codePoint) {\r\n if (codePoint - 48 < 10) {\r\n return codePoint - 22;\r\n }\r\n if (codePoint - 65 < 26) {\r\n return codePoint - 65;\r\n }\r\n if (codePoint - 97 < 26) {\r\n return codePoint - 97;\r\n }\r\n return base;\r\n }\r\n\r\n /**\r\n * Converts a digit/integer into a basic code point.\r\n * @see `basicToDigit()`\r\n * @private\r\n * @param {Number} digit The numeric value of a basic code point.\r\n * @returns {Number} The basic code point whose value (when used for\r\n * representing integers) is `digit`, which needs to be in the range\r\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\r\n * used; else, the lowercase form is used. The behavior is undefined\r\n * if `flag` is non-zero and `digit` has no uppercase form.\r\n */\r\n function digitToBasic(digit, flag) {\r\n // 0..25 map to ASCII a..z or A..Z\r\n // 26..35 map to ASCII 0..9\r\n return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\r\n }\r\n\r\n /**\r\n * Bias adaptation function as per section 3.4 of RFC 3492.\r\n * https://tools.ietf.org/html/rfc3492#section-3.4\r\n * @private\r\n */\r\n function adapt(delta, numPoints, firstTime) {\r\n var k = 0;\r\n delta = firstTime ? floor(delta / damp) : delta >> 1;\r\n delta += floor(delta / numPoints);\r\n for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\r\n delta = floor(delta / baseMinusTMin);\r\n }\r\n return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\r\n }\r\n\r\n /**\r\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\r\n * symbols.\r\n * @memberOf punycode\r\n * @param {String} input The Punycode string of ASCII-only symbols.\r\n * @returns {String} The resulting string of Unicode symbols.\r\n */\r\n function decode(input) {\r\n // Don't use UCS-2\r\n var output = [],\r\n inputLength = input.length,\r\n out,\r\n i = 0,\r\n n = initialN,\r\n bias = initialBias,\r\n basic,\r\n j,\r\n index,\r\n oldi,\r\n w,\r\n k,\r\n digit,\r\n t,\r\n /** Cached calculation results */\r\n baseMinusT;\r\n\r\n // Handle the basic code points: let `basic` be the number of input code\r\n // points before the last delimiter, or `0` if there is none, then copy\r\n // the first basic code points to the output.\r\n\r\n basic = input.lastIndexOf(delimiter);\r\n if (basic < 0) {\r\n basic = 0;\r\n }\r\n\r\n for (j = 0; j < basic; ++j) {\r\n // if it's not a basic code point\r\n if (input.charCodeAt(j) >= 0x80) {\r\n error('not-basic');\r\n }\r\n output.push(input.charCodeAt(j));\r\n }\r\n\r\n // Main decoding loop: start just after the last delimiter if any basic code\r\n // points were copied; start at the beginning otherwise.\r\n\r\n for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\r\n\r\n // `index` is the index of the next character to be consumed.\r\n // Decode a generalized variable-length integer into `delta`,\r\n // which gets added to `i`. The overflow checking is easier\r\n // if we increase `i` as we go, then subtract off its starting\r\n // value at the end to obtain `delta`.\r\n for (oldi = i, w = 1, k = base; /* no condition */; k += base) {\r\n\r\n if (index >= inputLength) {\r\n error('invalid-input');\r\n }\r\n\r\n digit = basicToDigit(input.charCodeAt(index++));\r\n\r\n if (digit >= base || digit > floor((maxInt - i) / w)) {\r\n error('overflow');\r\n }\r\n\r\n i += digit * w;\r\n t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\r\n\r\n if (digit < t) {\r\n break;\r\n }\r\n\r\n baseMinusT = base - t;\r\n if (w > floor(maxInt / baseMinusT)) {\r\n error('overflow');\r\n }\r\n\r\n w *= baseMinusT;\r\n\r\n }\r\n\r\n out = output.length + 1;\r\n bias = adapt(i - oldi, out, oldi == 0);\r\n\r\n // `i` was supposed to wrap around from `out` to `0`,\r\n // incrementing `n` each time, so we'll fix that now:\r\n if (floor(i / out) > maxInt - n) {\r\n error('overflow');\r\n }\r\n\r\n n += floor(i / out);\r\n i %= out;\r\n\r\n // Insert `n` at position `i` of the output\r\n output.splice(i++, 0, n);\r\n\r\n }\r\n\r\n return ucs2encode(output);\r\n }\r\n\r\n /**\r\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\r\n * Punycode string of ASCII-only symbols.\r\n * @memberOf punycode\r\n * @param {String} input The string of Unicode symbols.\r\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\r\n */\r\n function encode(input) {\r\n var n,\r\n delta,\r\n handledCPCount,\r\n basicLength,\r\n bias,\r\n j,\r\n m,\r\n q,\r\n k,\r\n t,\r\n currentValue,\r\n output = [],\r\n /** `inputLength` will hold the number of code points in `input`. */\r\n inputLength,\r\n /** Cached calculation results */\r\n handledCPCountPlusOne,\r\n baseMinusT,\r\n qMinusT;\r\n\r\n // Convert the input in UCS-2 to Unicode\r\n input = ucs2decode(input);\r\n\r\n // Cache the length\r\n inputLength = input.length;\r\n\r\n // Initialize the state\r\n n = initialN;\r\n delta = 0;\r\n bias = initialBias;\r\n\r\n // Handle the basic code points\r\n for (j = 0; j < inputLength; ++j) {\r\n currentValue = input[j];\r\n if (currentValue < 0x80) {\r\n output.push(stringFromCharCode(currentValue));\r\n }\r\n }\r\n\r\n handledCPCount = basicLength = output.length;\r\n\r\n // `handledCPCount` is the number of code points that have been handled;\r\n // `basicLength` is the number of basic code points.\r\n\r\n // Finish the basic string - if it is not empty - with a delimiter\r\n if (basicLength) {\r\n output.push(delimiter);\r\n }\r\n\r\n // Main encoding loop:\r\n while (handledCPCount < inputLength) {\r\n\r\n // All non-basic code points < n have been handled already. Find the next\r\n // larger one:\r\n for (m = maxInt, j = 0; j < inputLength; ++j) {\r\n currentValue = input[j];\r\n if (currentValue >= n && currentValue < m) {\r\n m = currentValue;\r\n }\r\n }\r\n\r\n // Increase `delta` enough to advance the decoder's state to ,\r\n // but guard against overflow\r\n handledCPCountPlusOne = handledCPCount + 1;\r\n if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\r\n error('overflow');\r\n }\r\n\r\n delta += (m - n) * handledCPCountPlusOne;\r\n n = m;\r\n\r\n for (j = 0; j < inputLength; ++j) {\r\n currentValue = input[j];\r\n\r\n if (currentValue < n && ++delta > maxInt) {\r\n error('overflow');\r\n }\r\n\r\n if (currentValue == n) {\r\n // Represent delta as a generalized variable-length integer\r\n for (q = delta, k = base; /* no condition */; k += base) {\r\n t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\r\n if (q < t) {\r\n break;\r\n }\r\n qMinusT = q - t;\r\n baseMinusT = base - t;\r\n output.push(\r\n stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\r\n );\r\n q = floor(qMinusT / baseMinusT);\r\n }\r\n\r\n output.push(stringFromCharCode(digitToBasic(q, 0)));\r\n bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\r\n delta = 0;\r\n ++handledCPCount;\r\n }\r\n }\r\n\r\n ++delta;\r\n ++n;\r\n\r\n }\r\n return output.join('');\r\n }\r\n\r\n /**\r\n * Converts a Punycode string representing a domain name or an email address\r\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\r\n * it doesn't matter if you call it on a string that has already been\r\n * converted to Unicode.\r\n * @memberOf punycode\r\n * @param {String} input The Punycoded domain name or email address to\r\n * convert to Unicode.\r\n * @returns {String} The Unicode representation of the given Punycode\r\n * string.\r\n */\r\n function toUnicode(input) {\r\n return mapDomain(input, function (string) {\r\n return regexPunycode.test(string)\r\n ? decode(string.slice(4).toLowerCase())\r\n : string;\r\n });\r\n }\r\n\r\n /**\r\n * Converts a Unicode string representing a domain name or an email address to\r\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\r\n * i.e. it doesn't matter if you call it with a domain that's already in\r\n * ASCII.\r\n * @memberOf punycode\r\n * @param {String} input The domain name or email address to convert, as a\r\n * Unicode string.\r\n * @returns {String} The Punycode representation of the given domain name or\r\n * email address.\r\n */\r\n function toASCII(input) {\r\n return mapDomain(input, function (string) {\r\n return regexNonASCII.test(string)\r\n ? 'xn--' + encode(string)\r\n : string;\r\n });\r\n }\r\n\r\n /*--------------------------------------------------------------------------*/\r\n\r\n /** Define the public API */\r\n punycode = {\r\n /**\r\n * A string representing the current Punycode.js version number.\r\n * @memberOf punycode\r\n * @type String\r\n */\r\n 'version': '1.4.1',\r\n /**\r\n * An object of methods to convert from JavaScript's internal character\r\n * representation (UCS-2) to Unicode code points, and back.\r\n * @see \r\n * @memberOf punycode\r\n * @type Object\r\n */\r\n 'ucs2': {\r\n 'decode': ucs2decode,\r\n 'encode': ucs2encode\r\n },\r\n 'decode': decode,\r\n 'encode': encode,\r\n 'toASCII': toASCII,\r\n 'toUnicode': toUnicode\r\n };\r\n\r\n /** Expose `punycode` */\r\n // Some AMD build optimizers, like r.js, check for specific condition patterns\r\n // like the following:\r\n if (\r\n typeof define == 'function' &&\r\n typeof define.amd == 'object' &&\r\n define.amd\r\n ) {\r\n define('punycode', function () {\r\n return punycode;\r\n });\r\n } else if (freeExports && freeModule) {\r\n if (module.exports == freeExports) {\r\n // in Node.js, io.js, or RingoJS v0.8.0+\r\n freeModule.exports = punycode;\r\n } else {\r\n // in Narwhal or RingoJS v0.7.0-\r\n for (key in punycode) {\r\n punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\r\n }\r\n }\r\n } else {\r\n // in Rhino or a web browser\r\n root.punycode = punycode;\r\n }\r\n\r\n }(this));\r\n\r\n }).call(this, typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\r\n }, {}], 42: [function (_dereq_, module, exports) {\r\n /*!\r\n * $script.js JS loader & dependency manager\r\n * https://github.com/ded/script.js\r\n * (c) Dustin Diaz 2014 | License MIT\r\n */\r\n\r\n (function (name, definition) {\r\n if (typeof module != 'undefined' && module.exports) module.exports = definition()\r\n else if (typeof define == 'function' && define.amd) define(definition)\r\n else this[name] = definition()\r\n })('$script', function () {\r\n var doc = document\r\n , head = doc.getElementsByTagName('head')[0]\r\n , s = 'string'\r\n , f = false\r\n , push = 'push'\r\n , readyState = 'readyState'\r\n , onreadystatechange = 'onreadystatechange'\r\n , list = {}\r\n , ids = {}\r\n , delay = {}\r\n , scripts = {}\r\n , scriptpath\r\n , urlArgs\r\n\r\n function every(ar, fn) {\r\n for (var i = 0, j = ar.length; i < j; ++i) if (!fn(ar[i])) return f\r\n return 1\r\n }\r\n function each(ar, fn) {\r\n every(ar, function (el) {\r\n return !fn(el)\r\n })\r\n }\r\n\r\n function $script(paths, idOrDone, optDone) {\r\n paths = paths[push] ? paths : [paths]\r\n var idOrDoneIsDone = idOrDone && idOrDone.call\r\n , done = idOrDoneIsDone ? idOrDone : optDone\r\n , id = idOrDoneIsDone ? paths.join('') : idOrDone\r\n , queue = paths.length\r\n function loopFn(item) {\r\n return item.call ? item() : list[item]\r\n }\r\n function callback() {\r\n if (!--queue) {\r\n list[id] = 1\r\n done && done()\r\n for (var dset in delay) {\r\n every(dset.split('|'), loopFn) && !each(delay[dset], loopFn) && (delay[dset] = [])\r\n }\r\n }\r\n }\r\n setTimeout(function () {\r\n each(paths, function loading(path, force) {\r\n if (path === null) return callback()\r\n\r\n if (!force && !/^https?:\\/\\//.test(path) && scriptpath) {\r\n path = (path.indexOf('.js') === -1) ? scriptpath + path + '.js' : scriptpath + path;\r\n }\r\n\r\n if (scripts[path]) {\r\n if (id) ids[id] = 1\r\n return (scripts[path] == 2) ? callback() : setTimeout(function () { loading(path, true) }, 0)\r\n }\r\n\r\n scripts[path] = 1\r\n if (id) ids[id] = 1\r\n create(path, callback)\r\n })\r\n }, 0)\r\n return $script\r\n }\r\n\r\n function create(path, fn) {\r\n var el = doc.createElement('script'), loaded\r\n el.onload = el.onerror = el[onreadystatechange] = function () {\r\n if ((el[readyState] && !(/^c|loade/.test(el[readyState]))) || loaded) return;\r\n el.onload = el[onreadystatechange] = null\r\n loaded = 1\r\n scripts[path] = 2\r\n fn()\r\n }\r\n el.async = 1\r\n el.src = urlArgs ? path + (path.indexOf('?') === -1 ? '?' : '&') + urlArgs : path;\r\n head.insertBefore(el, head.lastChild)\r\n }\r\n\r\n $script.get = create\r\n\r\n $script.order = function (scripts, id, done) {\r\n (function callback(s) {\r\n s = scripts.shift()\r\n !scripts.length ? $script(s, id, done) : $script(s, callback)\r\n }())\r\n }\r\n\r\n $script.path = function (p) {\r\n scriptpath = p\r\n }\r\n $script.urlArgs = function (str) {\r\n urlArgs = str;\r\n }\r\n $script.ready = function (deps, ready, req) {\r\n deps = deps[push] ? deps : [deps]\r\n var missing = [];\r\n !each(deps, function (dep) {\r\n list[dep] || missing[push](dep);\r\n }) && every(deps, function (dep) { return list[dep] }) ?\r\n ready() : !function (key) {\r\n delay[key] = delay[key] || []\r\n delay[key][push](ready)\r\n req && req(missing)\r\n }(deps.join('|'))\r\n return $script\r\n }\r\n\r\n $script.done = function (idOrDone) {\r\n $script([null], idOrDone)\r\n }\r\n\r\n return $script\r\n });\r\n\r\n }, {}]\r\n }, {}, [29])(29)\r\n});\r\n","import { QueryParameterToolSet } from \"./queryParameterTools\";\r\n\r\nexport class Debug {\r\n private static _instance: Debug;\r\n \r\n private constructor() {\r\n const scopes: NodeListOf = document.querySelectorAll('.scope-dlp') as NodeListOf;\r\n\r\n if (!scopes) {\r\n return;\r\n }\r\n\r\n if (scopes.length > 0) {\r\n this.removeUnusedDebugElements(scopes);\r\n }\r\n\r\n this.bindEvents(scopes);\r\n }\r\n\r\n static get instance() {\r\n return this._instance || (this._instance = new this());\r\n }\r\n\r\n private bindEvents(scopes: NodeListOf): void {\r\n \r\n if(scopes.length > 0)\r\n {\r\n const scopesArray: Array = Array.prototype.slice.call(scopes);\r\n const lastScope: HTMLElement = scopesArray[scopesArray.length - 1];\r\n\r\n const button: Element = lastScope.querySelector('.dlp-debug-button');\r\n if (button) {\r\n button.addEventListener('click', ()=>{ this.toggleDebug(scopesArray); });\r\n }\r\n\r\n for (const scope of scopesArray)\r\n {\r\n const noCacheButton: Element = scope.querySelector('.dlp-debug-nocachebutton');\r\n if (noCacheButton) {\r\n noCacheButton.addEventListener('click', this.redirectToNonCacheable);\r\n }\r\n }\r\n }\r\n }\r\n\r\n private toggleDebug(scopes: Array): void {\r\n for (const scope of scopes)\r\n {\r\n const elements: NodeListOf = scope.querySelectorAll('.debug-dlp');\r\n const elementsArray: Array = Array.prototype.slice.call(elements);\r\n\r\n for (let element of elementsArray) {\r\n element.classList.toggle('show');\r\n }\r\n }\r\n }\r\n\r\n private redirectToNonCacheable(eventContext): void {\r\n\r\n const disableCacheKey = eventContext.currentTarget.getAttribute(\"disablecachekey\");\r\n if (disableCacheKey) {\r\n if (QueryParameterToolSet.instance) {\r\n let newAddress = window.location.href.split(\"?\")[0] + QueryParameterToolSet.instance.append(disableCacheKey, \"true\", null);\r\n window.location.href = newAddress;\r\n }\r\n }\r\n }\r\n\r\n private removeUnusedDebugElements(scopes: NodeListOf): void {\r\n // during dlp grid cration we have debug bar for each grid element.\r\n // It is not needed. Only first one can stay and doo all the job.\r\n const scopesArray: Array = Array.prototype.slice.call(scopes);\r\n \r\n const lastIndex: number = scopesArray.length - 1;\r\n let dlpNavigationKey: string = \"\";\r\n\r\n for (let i: number = 0; i <= lastIndex; i++) {\r\n const scope: HTMLElement = scopesArray[i];\r\n const debugBarElement: HTMLElement = scope.querySelector('.debuginfo');\r\n const testButtonsContainer: HTMLElement = scope.querySelector('.test-buttons-container');\r\n\r\n if (!debugBarElement && !testButtonsContainer) {\r\n continue;\r\n }\r\n\r\n if (lastIndex === i) {\r\n\r\n let result: string = \"NavKey: \";\r\n if (dlpNavigationKey.length > 0) {\r\n result += dlpNavigationKey + \", \" + testButtonsContainer.querySelector('.dlp-NavigationKey').textContent;\r\n } else {\r\n result += testButtonsContainer.querySelector('.dlp-NavigationKey').textContent;\r\n }\r\n\r\n testButtonsContainer.querySelector('.dlp-NavigationKey')\r\n .textContent = result;\r\n }\r\n else {\r\n\r\n if (dlpNavigationKey.length === 0) {\r\n dlpNavigationKey += \" \" + testButtonsContainer.querySelector('.dlp-NavigationKey').textContent;\r\n }\r\n else {\r\n dlpNavigationKey +=\r\n \", \" + testButtonsContainer.querySelector('.dlp-NavigationKey').textContent;\r\n }\r\n\r\n \r\n\r\n scope.removeChild(debugBarElement);\r\n scope.removeChild(testButtonsContainer);\r\n } \r\n }\r\n }\r\n}\r\n\r\nDebug.instance;\r\n","import { CallbackLists, ICallback, IEventBus, ISubscription, ISubscriptionId } from \"../typings/event-bus\";\r\nimport { EventName } from \"../typings/event-name\";\r\n\r\nexport class EventBus implements IEventBus {\r\n private static _instance: EventBus;\r\n private callbackLists: CallbackLists;\r\n\r\n private constructor() {\r\n this.callbackLists = [];\r\n }\r\n\r\n static get instance() {\r\n return this._instance || (this._instance = new this());\r\n }\r\n\r\n subscribe(eventName: EventName | EventName[], callback: ICallback): ISubscriptionId[] {\r\n if (this.isArray(eventName)) {\r\n const subscriptionsIds: ISubscriptionId[] = [];\r\n\r\n for (const message of eventName) {\r\n subscriptionsIds.push(this.createSubscription(message, callback));\r\n }\r\n\r\n return subscriptionsIds;\r\n } else {\r\n return [this.createSubscription(eventName, callback)];\r\n }\r\n }\r\n\r\n subscribeMultiple(subscriptions: ISubscription[]): ISubscriptionId[] {\r\n const subscriptionIds: ISubscriptionId[] = [];\r\n\r\n if (!subscriptions) {\r\n return subscriptionIds;\r\n }\r\n\r\n for (const subscription of subscriptions) {\r\n const subscriptionId: ISubscriptionId = this.addSubscription(subscription);\r\n\r\n subscriptionIds.push(subscriptionId);\r\n }\r\n return subscriptionIds;\r\n }\r\n\r\n unsubscribe(subscriptionId: ISubscriptionId | ISubscriptionId[]): void {\r\n if (this.isArray(subscriptionId)) {\r\n this.unSubscribeMultiple(subscriptionId);\r\n } else {\r\n this.removeSubscription(subscriptionId);\r\n }\r\n }\r\n\r\n publish(eventName: EventName, payload?: any): void {\r\n if (!this.callbackLists[eventName]) {\r\n return;\r\n }\r\n\r\n // to prevent to also iterate over subscriptions, which are created while iterating\r\n const callbacksClone: ICallback[] = this.callbackLists[eventName].slice(0);\r\n for (const callback of callbacksClone) {\r\n if (callback) {\r\n callback(payload);\r\n }\r\n }\r\n }\r\n\r\n private createSubscription(eventName: EventName, callback: ICallback): ISubscriptionId {\r\n return this.addSubscription({\r\n eventName: eventName,\r\n callback: callback\r\n });\r\n }\r\n\r\n private addSubscription(subscription: ISubscription): ISubscriptionId {\r\n if (!this.callbackLists[subscription.eventName]) {\r\n this.callbackLists[subscription.eventName] = [];\r\n }\r\n\r\n const subscriptionId: ISubscriptionId = {\r\n eventName: subscription.eventName,\r\n id: (this.callbackLists[subscription.eventName].push(subscription.callback)) - 1\r\n };\r\n\r\n return subscriptionId;\r\n }\r\n\r\n private unSubscribeMultiple(subscriptionIds: ISubscriptionId[]): void {\r\n for (const subscriptionId of subscriptionIds) {\r\n this.removeSubscription(subscriptionId);\r\n }\r\n }\r\n\r\n private removeSubscription(subscriptionId: ISubscriptionId): void {\r\n const subscription: ICallback = this.callbackLists[subscriptionId.eventName][subscriptionId.id];\r\n if (subscription) {\r\n this.callbackLists[subscriptionId.eventName][subscriptionId.id] = undefined;\r\n }\r\n }\r\n\r\n private isArray(element: any): element is any[] {\r\n return Array.isArray(element);\r\n }\r\n}","import { IEventBus } from \"../typings/event-bus\";\r\nimport { IExceptionInfo } from \"../typings/exception\";\r\nimport { EventBus } from \"./event-bus\";\r\n\r\nexport class Exception {\r\n private static _instance: Exception;\r\n private readonly eventBus: IEventBus;\r\n private readonly scope: Element;\r\n\r\n private constructor() {\r\n this.scope = document.querySelector('.scope-dlp');\r\n\r\n if (!this.scope) {\r\n return;\r\n }\r\n \r\n this.eventBus = EventBus.instance;\r\n this.bindEvents();\r\n }\r\n\r\n static get instance() {\r\n return this._instance || (this._instance = new this());\r\n }\r\n\r\n private bindEvents(): void {\r\n const exceptionIcon: Element = this.scope.querySelector('.debuginfo.dlp');\r\n if (exceptionIcon) {\r\n exceptionIcon.addEventListener('click', (event) => {\r\n this.toggleExceptionDetail(event);\r\n });\r\n \r\n document.addEventListener(\"DOMContentLoaded\", () => {\r\n this.eventBus.subscribe(\"DebugError\", () => {\r\n this.handleError.bind(this);\r\n });\r\n \r\n this.showExceptionIcon();\r\n });\r\n }\r\n }\r\n\r\n private toggleExceptionDetail(eventContext): void {\r\n const exceptionsDetailContainer: Element = this.scope.querySelector('.exception-details');\r\n if (exceptionsDetailContainer) {\r\n exceptionsDetailContainer.classList.toggle('dlp-show-exception-detail');\r\n }\r\n }\r\n\r\n private handleError(eventContext, eventData:IExceptionInfo): void {\r\n let exceptionDetail: Element = this.scope.querySelector('.exception-details');\r\n if (!exceptionDetail) {\r\n this.scope.insertAdjacentHTML('afterbegin', '
');\r\n exceptionDetail = this.scope.querySelector('.exception-details');\r\n }\r\n\r\n const exceptionSimpleBar: Element = exceptionDetail.querySelector('.simplebar');\r\n const errorTitle: string = '
' + eventData.message + '
';\r\n let errorDetail: string = \"\";\r\n if (eventData.details) {\r\n errorDetail = '
' + eventData.details + '
';\r\n }\r\n let errorDetailString: string = '
' + errorTitle + errorDetail + '
';\r\n exceptionSimpleBar.insertAdjacentHTML('beforeend', errorDetailString);\r\n this.showExceptionIcon();\r\n }\r\n\r\n private showExceptionIcon(): void {\r\n const exceptionIcon: Element = this.scope.querySelector('.debuginfo.dlp');\r\n if (exceptionIcon) {\r\n const exceptionContainer: Element = this.scope.querySelector('.exception-container');\r\n\r\n if (exceptionContainer) {\r\n exceptionIcon.classList.remove('dlp-hide-debuginfo');\r\n }\r\n }\r\n }\r\n}\r\n\r\nException.instance;\r\n","import { IEventBus, ISubscriptionId } from \"../typings/event-bus\";\r\nimport { EventBus } from \"./event-bus\";\r\n\r\nexport class ImageLoader {\r\n private static _instance: ImageLoader;\r\n private readonly eventBus: IEventBus;\r\n private lazyLoadSubscriptions: ISubscriptionId[];\r\n private lazyLoadingDistance: number = 500;\r\n private callbackActive: boolean = false;\r\n\r\n private constructor() {\r\n if (!this.fetchImages().length) {\r\n return;\r\n }\r\n\r\n this.eventBus = EventBus.instance;\r\n\r\n this.registerEvents();\r\n this.loadImagesNearViewport();\r\n }\r\n\r\n private fetchImages():HTMLImageElement[] {\r\n const images: NodeListOf = document.querySelector('.scope-dlp').querySelectorAll('img[data-src]');\r\n return Array.prototype.slice.call(images);\r\n }\r\n\r\n private registerEvents(): void {\r\n this.lazyLoadSubscriptions = this.eventBus.subscribe([\"OrientationHasChanged\", \"WindowScrolled\", \"WindowSizeHasChanged\"],\r\n this.loadImagesNearViewport.bind(this)\r\n );\r\n }\r\n\r\n private loadImagesNearViewport(): void {\r\n if (this.callbackActive) {\r\n return;\r\n }\r\n\r\n this.callbackActive = true;\r\n\r\n for (const image of this.fetchImages()) {\r\n const rect: ClientRect = image.getBoundingClientRect();\r\n if ((rect.bottom > 0 && (rect.top - this.lazyLoadingDistance) > window.innerHeight) ||\r\n (rect.top < 0 && rect.bottom < 0)) {\r\n continue;\r\n }\r\n this.loadImage(image as HTMLImageElement);\r\n }\r\n this.unsubscribeEvents();\r\n this.callbackActive = false;\r\n }\r\n\r\n private loadImage(image: HTMLImageElement): void {\r\n if (image.hasAttribute('data-srcset')) {\r\n image.srcset = image.getAttribute('data-srcset');\r\n image.removeAttribute('data-srcset');\r\n }\r\n image.src = image.getAttribute('data-src');\r\n image.removeAttribute('data-src');\r\n }\r\n\r\n private unsubscribeEvents(): void {\r\n if (!this.fetchImages().length) {\r\n this.eventBus.unsubscribe(this.lazyLoadSubscriptions);\r\n }\r\n }\r\n\r\n static get instance() {\r\n return this._instance || (this._instance = new this());\r\n }\r\n}\r\n\r\nImageLoader.instance;","import { ITranslation } from \"../typings/languageFragmentsTranslation\";\r\n\r\nexport class LanguageFragmentsTranslation {\r\n private static _instance: LanguageFragmentsTranslation;\r\n\r\n private constructor() {\r\n const scriptElement: HTMLElement = document.getElementById('translated-page-urls');\r\n\r\n if (scriptElement && scriptElement.innerText) {\r\n this.appendTranslatedPageUrls(scriptElement);\r\n }\r\n }\r\n\r\n static get instance() {\r\n return this._instance || (this._instance = new this());\r\n }\r\n\r\n private appendTranslatedPageUrls(scriptElement: HTMLElement): void {\r\n const translations: ITranslation[] = JSON.parse(scriptElement.innerText).translations;\r\n const dlpNavigationKey: HTMLElement = document.querySelector('.scope-dlp');\r\n\r\n // decode urls and append url:\r\n for (const translation of translations) {\r\n let decodedUrl: string;\r\n\r\n if (translation.obfuscation === 'l10n') {\r\n // no further actions are needed:\r\n return;\r\n }\r\n else {\r\n // append url with dlp key, usually needed for preview from editor:\r\n decodedUrl = window.atob(translation.url);\r\n\r\n if(dlpNavigationKey.dataset.dlpnavigationkey)\r\n decodedUrl += '/' + dlpNavigationKey.dataset.dlpnavigationkey;\r\n }\r\n\r\n const url = window.btoa(decodedUrl);\r\n\r\n translation.url = url;\r\n }\r\n\r\n const result = { translations: translations };\r\n\r\n scriptElement.innerText = JSON.stringify(result);\r\n }\r\n}\r\n\r\nLanguageFragmentsTranslation.instance;\r\n","import { IEventBus } from \"../typings/event-bus\";\r\nimport { IScrollLock } from \"../typings/modal-scrollLock\";\r\nimport { EventBus } from \"./event-bus\";\r\nimport { ScrollLock } from \"./modal-scrollLock\";\r\n\r\nexport class ModalDialog {\r\n private readonly scopes: NodeListOf;\r\n private readonly scrollLock: IScrollLock;\r\n private readonly eventBus: IEventBus;\r\n private static _instance: ModalDialog;\r\n\r\n private constructor() {\r\n this.scopes = document.querySelectorAll('.scope-dlp') as NodeListOf;\r\n this.scrollLock = ScrollLock.instance;\r\n this.eventBus = EventBus.instance;\r\n\r\n if(!this.scopes) {\r\n return;\r\n }\r\n \r\n this.initModalDialogComponent();\r\n }\r\n\r\n static get instance() {\r\n return this._instance || (this._instance = new this());\r\n }\r\n \r\n private initModalDialogComponent() : void {\r\n const scopesArray: Array = Array.prototype.slice.call(this.scopes);\r\n\r\n for (const scope of scopesArray)\r\n {\r\n const dlpToggleModals: NodeListOf = scope.querySelectorAll('.dlp-toggle-modal') as NodeListOf;\r\n const dlpToggleModalsArray: Array = Array.prototype.slice.call(dlpToggleModals);\r\n\r\n for (const dlpToggleModal of dlpToggleModalsArray) {\r\n dlpToggleModal.addEventListener('click',() => { this.openCloseModal(dlpToggleModal, scope); });\r\n }\r\n }\r\n }\r\n \r\n private openCloseModal(dlpToggleModal: HTMLElement, scope: HTMLElement): void {\r\n const modalId: String = this.readModalId(dlpToggleModal);\r\n\r\n if (this.isVideoModalInMobileShop(dlpToggleModal)) {\r\n return;\r\n }\r\n\r\n if (!modalId) {\r\n return;\r\n }\r\n \r\n const modalElements: NodeListOf = scope.querySelectorAll('[data-dlp-modalid=\"' + modalId + '\"]') as NodeListOf;\r\n const modalElementsArray: Array = Array.prototype.slice.call(modalElements);\r\n let modalDialog: HTMLElement;\r\n let modalDialogParent: HTMLElement;\r\n \r\n for (const modalElement of modalElementsArray) {\r\n if (modalElement.classList.contains('dlp-modalDialog')){\r\n modalDialog = modalElement;\r\n }\r\n else {\r\n modalDialogParent = modalElement;\r\n }\r\n } \r\n \r\n if (!modalDialog || !modalDialogParent) {\r\n return;\r\n }\r\n\r\n if (modalDialog.classList.contains('dlp-show-modal')) {\r\n this.close(modalDialog, modalDialogParent);\r\n } else {\r\n this.open(modalDialog, scope);\r\n }\r\n }\r\n\r\n private readModalId(dlpToggleModal: HTMLElement): string {\r\n const guidContainer: HTMLElement = dlpToggleModal.closest('[data-dlp-modalid]') as HTMLElement;\r\n \r\n if (!guidContainer) {\r\n return undefined;\r\n }\r\n\r\n return guidContainer.getAttribute('data-dlp-modalid');\r\n }\r\n\r\n private open(overlay: HTMLElement, scope: HTMLElement): void {\r\n scope.appendChild(overlay);\r\n this.scrollTextToTop(overlay);\r\n\r\n overlay.classList.add('dlp-show-modal');\r\n this.scrollLock.lock();\r\n\r\n this.eventBus.publish(\"VideoPlay\", overlay);\r\n }\r\n\r\n private close(overlay: HTMLElement, modalDialog: HTMLElement): void {\r\n overlay.classList.remove('dlp-show-modal');\r\n this.scrollLock.unlock();\r\n\r\n this.eventBus.publish(\"VideoStop\", overlay);\r\n\r\n modalDialog.appendChild(overlay);\r\n }\r\n\r\n private scrollTextToTop(overlay: HTMLElement): void {\r\n const textScrollContainer: HTMLElement = overlay.querySelector('.text-scrollbar-container') as HTMLElement;\r\n \r\n if (textScrollContainer) {\r\n // works on ie nad other browsers:\r\n textScrollContainer.scrollTop = 0;\r\n }\r\n }\r\n\r\n private isVideoModalInMobileShop(element: HTMLElement): boolean {\r\n const isVideo: boolean = (element).classList.contains('dlp-video-link');\r\n const isInMobileShop: boolean = document.documentElement.classList.contains('mobileshop');\r\n\r\n return isVideo && isInMobileShop;\r\n }\r\n}\r\n\r\nModalDialog.instance;","import { IScrollLock } from \"../typings/modal-scrollLock\";\r\n\r\nexport class ScrollLock implements IScrollLock {\r\n private static _instance: IScrollLock;\r\n\r\n private constructor() {\r\n }\r\n\r\n static get instance() {\r\n return this._instance || (this._instance = new this());\r\n }\r\n\r\n lock(): void {\r\n const style = document.body.style;\r\n\r\n /*\r\n * Use scrollY and pageYOffset due to cross browser compatibility issues\r\n */\r\n if (window.scrollY) {\r\n style.top = '-' + window.scrollY + \"px\";\r\n } else {\r\n style.top = '-' + window.pageYOffset + \"px\";\r\n }\r\n\r\n //Add !important here to counter the 'position: relative !important' from ESMF custom-bootstrap. \r\n style.setProperty(\"position\", \"fixed\", \"important\");\r\n style.setProperty(\"left\", \"0\");\r\n style.setProperty(\"right\", \"0\");\r\n style.overflowY = 'scroll';\r\n };\r\n\r\n unlock(): void {\r\n const topPosition: number = - parseInt(document.body.style.top);\r\n const style = document.body.style;\r\n\r\n style.top = '';\r\n style.position = '';\r\n style.overflowY = '';\r\n\r\n window.scrollTo(0, topPosition);\r\n };\r\n}\r\n","import { IQueryParameterToolSet } from \"../typings/queryParameterTools\";\r\n\r\nexport class QueryParameterToolSet implements IQueryParameterToolSet {\r\n private static _instance: IQueryParameterToolSet;\r\n\r\n private constructor() {\r\n }\r\n\r\n static get instance() {\r\n return this._instance || (this._instance = new this());\r\n }\r\n\r\n get(queryString: string): Object {\r\n if (!queryString) {\r\n queryString = window.location.search;\r\n }\r\n\r\n const parameters: Object = {};\r\n if (queryString && queryString.length) {\r\n const query = queryString[0] === \"?\" ? queryString.substring(1) : queryString;\r\n const vars = query.split(\"&\");\r\n for (let i = 0; i < vars.length; i++) {\r\n if (vars[i]) {\r\n const pair = vars[i].split(\"=\");\r\n if (pair[0]) {\r\n parameters[pair[0]] = pair[1] ? pair[1] : \"\";\r\n }\r\n }\r\n }\r\n }\r\n\r\n return parameters;\r\n\r\n }\r\n\r\n append(paramName: string, paramValue: string, queryString: string): string {\r\n const parameters: Object = this.get(queryString);\r\n\r\n parameters[paramName] = paramValue;\r\n\r\n let newQuery = \"?\";\r\n let connector = \"\";\r\n for (const key in parameters) {\r\n if (parameters.hasOwnProperty(key)) {\r\n newQuery += (connector + key + \"=\" + parameters[key]);\r\n connector = \"&\";\r\n }\r\n }\r\n\r\n return newQuery;\r\n }\r\n}\r\n\r\nQueryParameterToolSet.instance;\r\n","import { Sliced3DFileLoader } from \"./sliced-3d-fileLoader\";\r\n\r\nexport class Sliced3D {\r\n private readonly scopes: NodeListOf;\r\n private static _instance: Sliced3D;\r\n\r\n private constructor() {\r\n this.scopes = document.querySelectorAll('.scope-dlp') as NodeListOf;\r\n \r\n if(!this.scopes) {\r\n return;\r\n }\r\n\r\n document.addEventListener(\"DOMContentLoaded\", () => {\r\n this.initSliced3DComponent();\r\n });\r\n }\r\n\r\n static get instance() {\r\n return this._instance || (this._instance = new this());\r\n }\r\n \r\n private initSliced3DComponent() : void {\r\n const scopesArray: Array = Array.prototype.slice.call(this.scopes);\r\n \r\n for (const scope of scopesArray)\r\n {\r\n let sliced3DViews: NodeListOf = scope.querySelectorAll('.dlp_scs_first_image') as NodeListOf;\r\n\r\n if(sliced3DViews && sliced3DViews.length > 0) {\r\n const imageContainers: Array = Array.prototype.slice.call(sliced3DViews);\r\n\r\n for (const imageContainer of imageContainers) {\r\n this.addSliced3DEx(imageContainer);\r\n }\r\n }\r\n }\r\n }\r\n\r\n private addSliced3DEx(imageContainer: HTMLElement) {\r\n const slicedImage = imageContainer.querySelector('.scs_first_image') as HTMLImageElement;\r\n\r\n if(slicedImage) {\r\n const naturalWidth: number = slicedImage.naturalWidth / 2;\r\n imageContainer.style.width = naturalWidth.toString() + 'px';\r\n }\r\n }\r\n\r\n private addSliced3D(sliced3DView: HTMLElement, imageUrl: string) {\r\n const slicedImage = document.createElement(\"img\");\r\n slicedImage.src = imageUrl;\r\n sliced3DView.getElementsByTagName('div')[0].appendChild(slicedImage);\r\n slicedImage.addEventListener('load', (event) => {\r\n const image: HTMLImageElement = event.target as HTMLImageElement;\r\n const naturalWidth: number = image.naturalWidth / 2;\r\n sliced3DView.style.width = naturalWidth.toString() + 'px';\r\n });\r\n }\r\n}\r\n\r\nSliced3D.instance;","import { IEventBus } from \"../typings/event-bus\";\r\nimport { EventBus } from \"./event-bus\";\r\n\r\nexport class TextModules {\r\n private readonly textContainerHeight: number = 235;\r\n private readonly claimDescriptionTextContainerHeight: number = 320;\r\n private static _instance: TextModules;\r\n private eventBus: IEventBus;\r\n private callbackActive: boolean = false;\r\n\r\n private constructor() {\r\n const scopes: NodeListOf = document.querySelectorAll('.scope-dlp') as NodeListOf;\r\n\r\n if(!scopes) {\r\n return;\r\n }\r\n \r\n this.init(scopes);\r\n }\r\n\r\n static get instance() {\r\n return this._instance || (this._instance = new this());\r\n }\r\n \r\n private init(scopes: NodeListOf): void {\r\n this.eventBus = EventBus.instance;\r\n const scopesArray: Array = Array.prototype.slice.call(scopes);\r\n \r\n this.initThrowAllScopes(scopesArray);\r\n this.registerEvents(scopesArray);\r\n }\r\n \r\n private initThrowAllScopes(scopesArray: Array): void {\r\n for (const scope of scopesArray)\r\n {\r\n // regular page layout\r\n const regularPageLayout: HTMLElement = scope.querySelector('.regular-page-layout') as HTMLElement;\r\n const tabletLayout: HTMLElement = scope.querySelector('.tablet-layout') as HTMLElement;\r\n \r\n if(regularPageLayout && window.getComputedStyle(regularPageLayout).display !== 'none') {\r\n this.initializeTextModules(scope);\r\n this.initializeClaimDescriptionTexts(scope);\r\n \r\n }\r\n\r\n if(tabletLayout && window.getComputedStyle(tabletLayout).display !== 'none') {\r\n this.initializeTextModules(scope);\r\n this.initializeClaimDescriptionTexts(scope);\r\n \r\n }\r\n }\r\n }\r\n \r\n private updateTextSlots(scopesArray: Array) {\r\n\r\n if (this.callbackActive) {\r\n return;\r\n }\r\n\r\n this.callbackActive = true;\r\n this.initThrowAllScopes(scopesArray);\r\n \r\n this.callbackActive = false;\r\n }\r\n \r\n private registerEvents(scopesArray: Array): void {\r\n this.eventBus.subscribe([\"OrientationHasChanged\", \"WindowSizeHasChanged\"],\r\n this.updateTextSlots.bind(this, scopesArray)\r\n );\r\n }\r\n\r\n private initializeTextModules(scope: HTMLElement): void {\r\n const textModules: NodeListOf = scope.querySelectorAll('.dlp-text-module') as NodeListOf;\r\n const textModulesArray: Array = Array.prototype.slice.call(textModules);\r\n\r\n // usual text slot fade area handling\r\n for (const textModule of textModulesArray) {\r\n this.setFadeAreaVisibility(textModule, '.text-slot', this.textContainerHeight);\r\n }\r\n }\r\n\r\n private initializeClaimDescriptionTexts(scope: HTMLElement): void {\r\n const claimDescriptionTexts: NodeListOf = scope.querySelectorAll('.claim-description-container') as NodeListOf;\r\n const claimDescriptionTextsArray: Array = Array.prototype.slice.call(claimDescriptionTexts);\r\n\r\n // content template claim + description fade area handling \r\n for (let claimDescriptionText of claimDescriptionTextsArray) {\r\n this.setFadeAreaVisibility(claimDescriptionText, '.claim-description-text',\r\n this.claimDescriptionTextContainerHeight);\r\n }\r\n }\r\n\r\n private setFadeAreaVisibility(textModule: HTMLElement, selector: string,\r\n textContainerHeight: number): void {\r\n const textContent: HTMLElement = textModule.querySelector(selector) as HTMLElement;\r\n this.setFadeAreaVisibilityForSlot(textContent, textContainerHeight);\r\n\r\n const textContentWide: HTMLElement = textModule.querySelector(selector + '.wide') as HTMLElement;\r\n this.setFadeAreaVisibilityForSlot(textContentWide, textContainerHeight);\r\n }\r\n\r\n private setFadeAreaVisibilityForSlot(slot: HTMLElement, textContainerHeight: number): void {\r\n const textSlotHeight: number = slot.querySelector('.short-text-container').clientHeight;\r\n const classToAdd: string = textContainerHeight <= textSlotHeight ? 'visible' : 'hidden';\r\n \r\n let classList = slot.querySelector('.short-text-fade-area-container').classList; \r\n\r\n /*\r\n * Remove one by one as our good old best friend IE is not capable of removing all together :-)\r\n */\r\n classList.remove('visible');\r\n classList.remove('hidden');\r\n classList.add(classToAdd);\r\n }\r\n}\r\n\r\nTextModules.instance;\r\n","import { IEventBus } from \"../typings/event-bus\";\r\nimport { Flowplayer, FlowplayerApi } from \"../typings/flowplayerEx\";\r\nimport { IVideoComponent } from \"../typings/video-component\";\r\nimport { EventBus } from \"./event-bus\";\r\n\r\nlet flowplayer: Flowplayer.Static;\r\n\r\nexport class VideoComponent implements IVideoComponent {\r\n private readonly eventBus: IEventBus;\r\n private flowplayerInstances: FlowplayerApi[] = [];\r\n private isMobile: boolean;\r\n private static _instance: IVideoComponent;\r\n\r\n private constructor() {\r\n const scopes: NodeListOf = document.querySelectorAll('.scope-dlp') as NodeListOf;\r\n\r\n if (!scopes) {\r\n return;\r\n }\r\n this.eventBus = EventBus.instance;\r\n\r\n this.initVideoComponent(scopes);\r\n this.subscribeGlobalVideoEvents();\r\n }\r\n\r\n static get instance() {\r\n return this._instance || (this._instance = new this());\r\n }\r\n\r\n private initVideoComponent(scopes: NodeListOf): void {\r\n // media query breakpoints do not suffice the required behaviour :(\r\n this.isMobile = document.documentElement.classList.contains('mobileshop');\r\n \r\n // no need to initialize flow player under mobile devices\r\n if (this.isMobile === true) {\r\n return;\r\n }\r\n\r\n const scopesArray: Array = Array.prototype.slice.call(scopes);\r\n const flowplayerLicenseKeys: string = scopesArray[0].getAttribute('data-fp-lic');\r\n \r\n flowplayer = require('../external/flowplayer');\r\n\r\n for (const scope of scopesArray)\r\n {\r\n // collect all video containers after document is ready:\r\n const videoContainerElements: NodeListOf = scope.querySelectorAll('.video-container');\r\n const videoContainerElementsArray: Element[] = Array.prototype.slice.call(videoContainerElements);\r\n\r\n for (const videoContainer of videoContainerElementsArray) {\r\n const videoLink: Element = videoContainer.querySelector('.dlp-video-link');\r\n const videoComponentElement: Element = videoContainer.querySelector('.dlp-video-component');\r\n\r\n if (videoLink) {\r\n this.bindVideoLinkEvents(videoLink);\r\n }\r\n\r\n if (videoLink && videoComponentElement) {\r\n this.injectFlowplayer(videoLink, videoComponentElement, flowplayerLicenseKeys);\r\n }\r\n\r\n }\r\n }\r\n }\r\n\r\n private subscribeGlobalVideoEvents(): void {\r\n this.eventBus.subscribeMultiple([\r\n {\r\n eventName: \"VideoPlay\",\r\n callback: (scope: HTMLElement) => {this.play(scope);}\r\n },\r\n {\r\n eventName: \"VideoStop\",\r\n callback: (scope: HTMLElement) => {this.stop(scope);}\r\n }]);\r\n }\r\n\r\n private bindVideoLinkEvents(videoLink: Element): void {\r\n videoLink.addEventListener('click', (event: MouseEvent) => {\r\n if (!this.isMobile) {\r\n event.preventDefault(); // Should trigger a modal, but not follow link\r\n }\r\n }, true);\r\n }\r\n\r\n private injectFlowplayer(videoLink: Element, videoComponentElement: Element, flowplayerLicenseKeys: string): void {\r\n \r\n const videoSourceUrl: string = videoLink.getAttribute('href');\r\n const videoSourceType: string = videoLink.getAttribute('type');\r\n const flowplayerInstance: FlowplayerApi = flowplayer(videoComponentElement,\r\n {\r\n clip: {\r\n sources: [\r\n {\r\n type: videoSourceType,\r\n src: videoSourceUrl\r\n }\r\n ]\r\n },\r\n key: flowplayerLicenseKeys,\r\n keyboard: false,\r\n splash: true,\r\n muted: true,\r\n share: false,\r\n fullscreen: false,\r\n });\r\n \r\n /* fullscreen mode was dissabled in flowplayerInstance options, according to it.\r\n * So the following code is not needed till fullscreen will be true again*/\r\n /* flowplayerInstance.one('ready', () => {\r\n this.moveFullscreenButton(videoComponentElement);\r\n });*/\r\n\r\n this.flowplayerInstances.push(flowplayerInstance);\r\n }\r\n\r\n private moveFullscreenButton(videoComponentElement: Element): void {\r\n const fsButton: Element = videoComponentElement.querySelector('.fp-fullscreen');\r\n const controls: Element = videoComponentElement.querySelector('.fp-controls');\r\n \r\n if(!fsButton || !controls)\r\n {\r\n return;\r\n }\r\n \r\n controls.appendChild(fsButton);\r\n }\r\n\r\n private getFlowplayerInstanceId(scope: Element): number {\r\n const flowplayerElement: Element = scope.querySelector('.flowplayer');\r\n \r\n if(!flowplayerElement) {\r\n return;\r\n }\r\n\r\n let flowplayerInstanceId: string = flowplayerElement.getAttribute('data-flowplayer-instance-id');\r\n \r\n return Number(flowplayerInstanceId);\r\n }\r\n\r\n stop(scope: HTMLElement): void {\r\n // Get flowplayer instance of the video in scope\r\n const instanceId: number = this.getFlowplayerInstanceId(scope);\r\n\r\n if (typeof instanceId === 'undefined') {\r\n return;\r\n }\r\n\r\n const flowplayerInstance: FlowplayerApi = this.flowplayerInstances[instanceId];\r\n\r\n // If the video is playing, pause it before unloading\r\n if (!flowplayerInstance.paused) {\r\n flowplayerInstance.pause();\r\n }\r\n\r\n // Unload video and return to splash state\r\n if (!flowplayerInstance.splash) {\r\n flowplayerInstance.unload();\r\n }\r\n }\r\n\r\n play(scope: HTMLElement): void {\r\n const instanceId: number = this.getFlowplayerInstanceId(scope);\r\n\r\n if (typeof instanceId === 'undefined') {\r\n return;\r\n }\r\n\r\n const flowplayerInstance: FlowplayerApi = this.flowplayerInstances[instanceId];\r\n\r\n if (!flowplayerInstance.splash) {\r\n flowplayerInstance.resume();\r\n } else {\r\n flowplayerInstance.load();\r\n }\r\n }\r\n}\r\n\r\nVideoComponent.instance;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// css:\r\nimport './styles/sass/dlp.lib.scss';\r\nimport './styles/sass/action-image.scss';\r\nimport './styles/sass/claim-element.scss';\r\nimport './styles/sass/content-size.scss';\r\nimport './styles/sass/cross-selling.scss';\r\nimport './styles/sass/debug.scss';\r\nimport './styles/sass/default-image.scss';\r\nimport './styles/sass/default-style-elements.scss';\r\nimport './styles/sass/description.scss';\r\nimport './styles/sass/error.scss';\r\nimport './styles/sass/exception.scss';\r\nimport './styles/sass/eye-catcher.scss';\r\nimport './styles/sass/fsiview.scss';\r\nimport './styles/sass/icn.scss';\r\nimport './styles/sass/modal-dialog.scss';\r\nimport './styles/sass/module-groups.scss';\r\nimport './styles/sass/order-link.scss';\r\nimport './styles/sass/price.scss';\r\nimport './styles/sass/text-module.scss';\r\nimport './styles/sass/video.scss';\r\n\r\nimport './styles/sass/templates/1a_ai_3dmi_cs.scss';\r\nimport './styles/sass/templates/1a_ai_3dmi_cs.lib.scss';\r\nimport './styles/sass/templates/1b_2xai_3dmi.scss';\r\nimport './styles/sass/templates/1b_2xai_3dmi.lib.scss';\r\nimport './styles/sass/templates/2_ai_3dmi_tm.scss';\r\nimport './styles/sass/templates/2_ai_3dmi_tm.lib.scss';\r\nimport './styles/sass/templates/3_ai_sc_mi.scss';\r\nimport './styles/sass/templates/3_ai_sc_mi.lib.scss';\r\nimport './styles/sass/templates/4_ai_s3d.scss';\r\nimport './styles/sass/templates/4_ai_s3d.lib.scss';\r\nimport './styles/sass/templates/5_ai_3dmi_video.scss';\r\nimport './styles/sass/templates/5_ai_3dmi_video.lib.scss';\r\nimport './styles/sass/templates/6_ai_3dmi_claim.scss';\r\nimport './styles/sass/templates/6_ai_3dmi_claim.lib.scss';\r\nimport './styles/sass/templates/7a_ai_3dmi.scss';\r\nimport './styles/sass/templates/7a_ai_3dmi.lib.scss';\r\nimport './styles/sass/templates/7b_2xai_3dmi.scss';\r\nimport './styles/sass/templates/7b_2xai_3dmi.lib.scss';\r\nimport './styles/sass/templates/8_3dmi_cs.scss';\r\nimport './styles/sass/templates/8_3dmi_cs.lib.scss';\r\nimport './styles/sass/templates/9_3dmi.scss';\r\nimport './styles/sass/templates/9_3dmi.lib.scss';\r\nimport './styles/sass/templates/content_ai_claim.scss';\r\nimport './styles/sass/templates/content_ai_claim.lib.scss';\r\nimport './styles/sass/templates/cross-article.lib.scss';\r\nimport './styles/sass/templates/crossArticle-actionImage.scss';\r\nimport './styles/sass/templates/crossArticle-threeDview.scss';\r\nimport './styles/sass/templates/crossArticle-withImage.scss';\r\nimport './styles/sass/templates/defaultImage-threeDview.scss';\r\n\r\n// scripts:\r\nimport './scripts/typescript/video-component';\r\nimport './scripts/typescript/text-module';\r\nimport './scripts/typescript/sliced-3d';\r\nimport './scripts/typescript/queryParameterTools';\r\nimport './scripts/typescript/modal-scrollLock';\r\nimport './scripts/typescript/modal-Dialog';\r\nimport './scripts/typescript/image-loader';\r\nimport './scripts/typescript/exception';\r\nimport './scripts/typescript/debug';\r\nimport './scripts/typescript/languageFragmentsTranslation';"],"names":["e","g","t","n","r","i","s","slice","o","currentTarget","eventPhase","target","w","u","a","length","handler","handleEvent","call","stoppedImmediatePropagation","stoppedPropagation","parentNode","dispatchEvent","defaultPrevented","y","configurable","get","set","b","f","this","E","S","tagName","firstChild","nodeType","push","textContent","nextSibling","join","T","d","test","document","readyState","detachEvent","createEvent","initEvent","N","lastChild","removeChild","appendChild","createTextNode","C","event","srcElement","fromElement","timeStamp","Date","getTime","Math","random","Object","defineProperty","value","defineProperties","l","console","log","message","getOwnPropertyDescriptor","prototype","hasOwnProperty","c","Element","h","Text","p","v","m","createElement","HTMLCommentElement","HTMLScriptElement","HTMLTitleElement","HTMLStyleElement","styleSheet","CSSStyleSheet","firstElementChild","childNodes","lastElementChild","previousElementSibling","previousSibling","nextElementSibling","childElementCount","addEventListener","createEventObject","fireEvent","hasChildNodes","attachEvent","type","removeEventListener","splice","XMLHttpRequest","Event","bubbles","writable","cancelable","preventDefault","returnValue","stopPropagation","cancelBubble","stopImmediatePropagation","HTMLDocument","top","documentElement","doScroll","setTimeout","Error","Window","getComputedStyle","_","toUpperCase","getPropertyValue","style","currentStyle","runtimeStyle","replace","left","pixelLeft","module","exports","code","_dereq_","common","ClassList","$","window","jQuery","punycode","computedStyle","noop","identity","removeNode","el","find","query","ctx","toArray","Array","map","querySelectorAll","text","txt","findDirect","filter","node","hasClass","kls","className","contains","isSameDomain","url","location","href","hostname","protocol","port","css","property","keys","forEach","key","removeProperty","undefined","setProperty","tag","attributes","innerHTML","attr","toggleClass","cls","flag","classes","toggle","add","remove","addClass","removeClass","append","par","child","appendTo","prepend","insertBefore","insertAfter","childIndex","indexOf","children","html","elms","val","elm","hasOwnOrPrototypeProperty","removeAttribute","setAttribute","prop","offset","ret","getBoundingClientRect","offsetWidth","offsetHeight","clientWidth","clientHeight","right","bottom","width","height","hasParent","parentSelector","parent","parentElement","matches","createAbsoluteUrl","xhrGet","successCb","errorCb","xhr","onreadystatechange","status","responseText","open","send","pick","obj","props","host","toUnicode","browser","webkit","getPrototype","getPrototypeOf","__proto__","elem","selector","proto","fn","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","element","ownerDocument","CSSSDProto","getAttribute","bit","String","CSSStyleDeclaration","swf","flashvars","wmode","bgColor","id","msie","navigator","userAgent","opts","allowscriptaccess","quality","movie","name","bgcolor","__flash_savedUnloadHandler","__flash_unloadHandler","engineImpl","flowplayer","embed","extend","bean","isAbsolute","player","root","loadVideo","callbackId","api","suspended","conf","timeouts","engine","engineName","sources","source","support","flashVideo","selectedSource","swfHls","src","rtmp","suspendEngine","resumeEngine","load","video","escapeURL","clearTimeout","html5Tag","is_absolute","removeTag","some","canPlayType","one","isHLS","data","unload","__set","flashls","providerChangeNeeded","__get","__play","embedded","callback","origin","hlsQualities","encodeURIComponent","JSON","stringify","bufferTime","bg","hex","x","parseInt","toString","match","toHex","split","toLongHex","initialVolume","volumeLevel","swfUrl","container","off","on","ev","_api","__quality","PercentLoaded","trigger","timer","currentTime","__status","time","timer2","playing","loading","pollInterval","setInterval","live","seekOffset","duration","buffer","bytes","buffered","arg","debug","apply","concat","flash","which","str","atob","substr","fire","speed","__unload","clearInterval","ready","canPlay","engines","videoTagCache","VIDEO","EVENTS","ended","pause","play","timeupdate","volumechange","ratechange","seeked","loadeddata","error","dataunavailable","webkitendfullscreen","inlineVideo","round","per","getType","createVideoTag","autoplay","preload","useCache","inline","subtitles","dataload","setMode","mode","tracks","textTracks","st","kind","srclang","label","self","lastBuffer","videoTypePreference","mp4source","arr","findFromSourcesByType","reload","created","splash","disableInline","nativesubtitles","clip","position","loop","resume","volume","index","_listeners","instanceId","listeners","er","eventListeners","listenMetadata","track","activeCues","tev","dvr","seekable","end","start","flow","triggerEvent","Number","MAX_VALUE","videoWidth","videoHeight","currentSrc","ignored","hlsDuration","durationChanged","timeUpdated","max","playbackRate","originalTarget","listen","iOS","iPad","chrome","paused","seek","pausedState","level","videoTag","cachedVideoTag","typ","WebKitPlaybackTargetAvailabilityEvent","availability","btnContainer","title","webkitCurrentPlaybackTargetIsWireless","webkitShowPlaybackTargetPicker","TYPE_RE","scriptjs","analytics","last","_gat","getTracker","tracker","_getTracker","_setAllowLinker","_trackEvent","bind","seeking","chromecast","loaded","applicationId","sessionRequest","apiConfig","cast","media","DEFAULT_MEDIA_RECEIVER_APP_ID","SessionRequest","ApiConfig","sessionListener","receiverListener","initialize","onInitSuccess","onError","session","stop","destroy","requestSession","receiverName","receiver","friendlyName","mediaInfo","MediaInfo","request","LoadRequest","loadMedia","addUpdateListener","alive","getEstimatedTime","hijack","req","SeekRequest","playerState","PlayerState","PLAYING","PAUSED","BUFFERING","err","ReceiverAvailability","AVAILABLE","chromeCastEngine","chromeCastStatus","chromeCastIcon","createUIElements","release","CUE_RE","cuepointsDisabled","setClass","segments","lastFiredSegment","cue","idx","cuepoints","isNaN","segmentForCue","segment","cues","setCuepoints","generate_cuepoints","addCuepoint","visible","timeline","removeCuepoint","sIdx","clipboard","share","embedCode","embedConf","ratio","itrunc","shareUrl","adaptiveRatio","textarea","handlers","eventArguments","listenEvent","hndlr","disposable","actualEvent","internalHandler","args","unbind","typeNameSpaces","actualType","containing","handlerNamespaces","registererHandlers","returnEvent","typStr","facebook","winHeight","screen","winWidth","windowOptions","FULL_PLAYER","FS_ENTER","FS_EXIT","FS_SUPPORT","fullscreen","ua","toLowerCase","IS_SAFARI","exec","webkitCurrentFullScreenElement","mozFullScreenElement","fullscreenElement","msFullscreenElement","wrapper","scrollY","scrollX","lastClick","win","isFullscreen","disabled","fName","ALLOW_KEYBOARD_INPUT","oldOpacity","scrollTo","focused","focusedRoot","IS_HELP","metaKeyPressed","ctrlKey","metaKey","altKey","keyboard","shiftKey","seekTo","mute","speedhelp","showMenu","menu","triggerElement","ui","hideMenu","coordinates","rightFallbackOffset","header","ttl","msg","createMessage","dismiss","removeMessage","area","select","isIeMobile","format","UA","touch","isAndroid","isSilk","androidVer","parseFloat","originalLoad","arguments","resumeTimer","sliders","disableAnimation","hasMoved","native_fullscreen","webkitEnterFullScreen","oldFullscreen","webkitFullscreenElement","Resolve","resolver","externalRe","active","advance","klass","hasCustomPlaylist","customPlaylist","els","queryRoot","generatePlaylist","plEl","cntrls","playlist","itm","k","item","next","current","prev","setPlaylist","items","keepCurrentIndex","addPlaylistItem","is_last","removePlaylistItem","pl","playlistInitialized","startIndex","resolve","toPlay","prevIndex","videoIndex","controlbar","selectQuality","q","_ev","qualities","createMenu","parseSource","suffix","sourcesFromVideoTag","each","reduce","directEmbed","iframe","btoa","extensions","button","defaults","subtitleParser","TIMECODE_RE","seconds","timecode","unshift","entries","lines","len","entry","trim","startTime","endTime","currentPoint","wrap","subtitleControl","subtitleMenu","disableSubtitles","loadSubtitles","srcLang","defaultSubtitle","subtitle","subtitleEnd","setActiveSubtitleClass","version","IS_IE","IS_IPAD","IS_IPAD_CHROME","IS_IPHONE","IS_ANDROID","IS_ANDROID_FIREFOX","IS_SILK","IS_WP","WP_VER","IE_MOBILE_VER","IOS_VER","parseIOSVersion","ANDROID_VER","iPhone","android","firefox","addTextTrack","webkitFullscreenEnabled","webkitCancelFullScreen","mozFullScreenEnabled","exitFullscreen","msExitFullscreen","inlineBlock","flex","svg","createElementNS","createSVGRect","zeropreload","firstframe","safari","plugin","plugins","ver","ActiveXObject","GetVariable","description","enabledPlugin","animation","vendors","twitter","tweet","Buffer","slider","barSlider","zeropad","sec","remaining","ceil","floor","min","PLAY_ROUNDED_OUTLINE","PLAY_ROUNDED_FILL","PLAY_SHARP_FILL","PLAY_SHARP_OUTLINE","PAUSE_ROUNDED_OUTLINE","PAUSE_ROUNDED_FILL","PAUSE_SHARP_FILL","PAUSE_SHARP_OUTLINE","LOADING_ROUNDED_OUTLINE","LOADING_ROUNDED_FILL","LOADING_SHARP_FILL","LOADING_SHARP_OUTLINE","fc","body","overflow","margin","padding","hovertimer","hash","waiting","elapsed","speedFlash","durationEl","timelineTooltip","origRatio","timelineApi","rtl","volumeSlider","volumeApi","noToggle","speedAnimationTimers","setRatio","hover","disable","slide","Infinity","to","_e","percentage","dragging","livePositionOffset","errors","oldOverflow","lastMove","is_over","reg","mouseoutTimeout","delta","pageX","clientX","clientY","_a","showMessage","poster","bc","has_bg","initPoster","forcedSplash","activeClass","inactiveClass","childSelector","totalBars","bar","getMouseValue","size","originalEvent","touches","maxValue","progress","skipAnimation","calc","toDelta","mousemove","move","alsoCssAnimations","delayedFire","delay","locked","successCallback","errorCallback","textArea","opacity","success","execCommand","doCopy","isFunction","events","instances","oldHandler","onbeforeunload","supportLocalStorage","localStorage","flowplayerTestStorage","isSafari","safariVersion","initializePlayer","jquery","registerExtension","js","flowplayerDebug","proxy","speeds","tooltip","muted","errorUrls","hlsFix","playerCount","URLResolver","scriptConf","confObject","parse","tr","videoTagConfig","evName","detail","lastSeekPosition","storage","urlResolver","aspectRatio","parts","isRTL","direction","currentSpeed","finished","hijacked","selectEngine","skipStore","shutdown","jsUrls","cssUrls","eng","enginePreference","sort","shift","playerId","is_ready","ed","charCodeAt","substring","logo","popup","reverse","display","zIndex","backgroundImage","byteLength","b64","placeHoldersCount","toByteArray","j","tmp","placeHolders","Arr","L","revLookup","fromByteArray","uint8","extraBytes","output","maxChunkLength","len2","encodeChunk","lookup","Uint8Array","num","definition","context","selectorEngine","forAll","has","put","isAncestor","check","old","namespaceRegex","nameRegex","addEvent","doc","W3C_MODEL","eventSupport","ONE","str2arr","isString","nativeEvents","customEvents","compareDocumentPosition","mouseenter","base","condition","related","relatedTarget","prefix","mouseleave","mousewheel","commonProps","mouseProps","mouseWheelProps","keyProps","textProps","touchProps","messageProps","stateProps","overOutRegex","typeFixers","fix","newEvent","keyCode","rightClick","pos","pageY","scrollLeft","scrollTop","typeFixerMap","isNative","parentWindow","isBean","fixer","stopped","isImmediatePropagationStopped","clone","ne","targetElement","RegEntry","wrappedHandler","eargs","findTarget","eventElement","__beanDel","ft","original","namespaces","customType","once","removeListener","eventType","inNamespaces","checkNamespaces","checkElement","checkOriginal","checkHandler","registry","pfx","list","all","charAt","del","removed","setSelectorEngine","rootListener","propertyName","listener","custom","rm","originalFn","orgType","fireListener","evt","typeSpec","isTypeStr","types","first","array","delegate","delfn","from","beanDel","names","cleanup","CollectGarbage","global","base64","ieee754","isArray","kMaxLength","TYPED_ARRAY_SUPPORT","createBuffer","that","RangeError","encodingOrOffset","allocUnsafe","TypeError","ArrayBuffer","byteOffset","fromArrayLike","fromArrayBuffer","string","encoding","isEncoding","actual","write","fromString","isBuffer","checked","copy","fromObject","assertSize","isView","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","dir","arrayIndexOf","lastIndexOf","indexSize","arrLength","valLength","read","buf","readUInt16BE","foundIndex","found","hexWrite","strLen","parsed","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","latin1Write","base64Write","ucs2Write","units","hi","lo","utf16leToBytes","res","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","MAX_ARGUMENTS_LENGTH","fromCharCode","decodeCodePointsArray","SlowBuffer","alloc","INSPECT_MAX_BYTES","foo","subarray","typedArraySupport","poolSize","_augment","Symbol","species","fill","allocUnsafeSlow","_isBuffer","compare","swap16","swap32","swap64","equals","inspect","thisStart","thisEnd","thisCopy","targetCopy","includes","isFinite","toJSON","_arr","out","checkOffset","ext","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","pow","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","INVALID_BASE64_RE","leadSurrogate","stringtrim","base64clean","dst","indexof","isTruthy","cl","classList","token","getTokens","setTokens","word","letter","factory","returnExports","isRegex","$Array","ArrayPrototype","$Object","ObjectPrototype","$Function","Function","FunctionPrototype","$String","StringPrototype","$Number","NumberPrototype","array_slice","array_splice","array_push","array_unshift","array_concat","array_join","to_string","hasToStringTag","toStringTag","fnToStr","constructorRegex","isES6ClassFn","spaceStripped","isCallable","tryFunctionObject","strClass","regexExec","RegExp","tryRegexExec","strValue","valueOf","tryStringObject","supportsDescriptors","enumerable","object","method","forceAssign","isPrimitive","input","isActualNaN","ES","abs","toStr","Empty","bound","boundLength","boundArgs","result","owns","arraySlice","arraySliceApply","strSlice","strSplit","strIndexOf","pushCall","isEnum","propertyIsEnumerable","arraySort","hasUnshiftReturnValueBug","boxedString","splitString","properlyBoxesContext","properlyBoxesNonStrict","properlyBoxesStrict","threwException","__","callbackfn","every","reduceCoercesToObject","___","reduceRightCoercesToObject","reduceRight","hasFirefox2IndexOfBug","searchElement","hasFirefox2LastIndexOfBug","spliceNoopReturnsEmptyArray","deleteCount","spliceWorksWithEmptyObject","spliceWorksWithLargeSparseArrays","spliceWorksWithSmallSparseArrays","O","A","relativeStart","actualStart","actualDeleteCount","itemCount","maxK","minK","hasStringJoinBug","originalJoin","separator","sep","hasJoinUndefinedBug","pushShim","pushIsNotGeneric","pushUndefinedIsWeird","sortIgnoresNonFunctions","sortThrowsOnRegex","sortIgnoresUndefined","compareFn","hasDontEnumBug","hasProtoEnumBug","hasStringEnumBug","equalsConstructorPrototype","ctor","constructor","blacklistedKeys","$window","$console","$parent","$self","$frame","$frames","$frameElement","$webkitIndexedDB","$webkitStorageInfo","$external","hasAutomationEqualityBug","dontEnums","dontEnumsLength","isStandardArguments","isArguments","callee","isFn","isArgs","isObject","isStr","theKeys","skipProto","skipConstructor","equalsConstructorPrototypeIfNotBuggy","dontEnum","keysWorksWithArguments","keysHasArgumentsLengthBug","argKeys","originalKeys","hasToDateStringFormatBug","hasToStringFormatBug","hasNegativeMonthYearBug","getUTCMonth","aNegativeTestDate","aPositiveTestDate","hasToUTCStringFormatBug","toUTCString","getTimezoneOffset","toDateString","originalGetFullYear","getFullYear","originalGetMonth","getMonth","originalGetDate","getDate","originalGetUTCFullYear","getUTCFullYear","originalGetUTCMonth","originalGetUTCDate","getUTCDate","originalGetUTCDay","getUTCDay","originalGetUTCHours","getUTCHours","originalGetUTCMinutes","getUTCMinutes","originalGetUTCSeconds","getUTCSeconds","originalGetUTCMilliseconds","getUTCMilliseconds","dayName","monthName","daysInMonth","month","year","date","day","hour","minute","second","getDay","getHours","getMinutes","getSeconds","timezoneOffset","hoursOffset","minutesOffset","negativeDate","negativeYearString","hasNegativeDateBug","toISOString","hasSafari51DateBug","NaN","tv","toISO","supportsExtendedYears","acceptsInvalidDates","maxSafeUnsigned32Bit","hasSafariSignedIntBug","NativeDate","DateShim","Y","M","D","ms","millis","msToShift","sToShift","isoDateExpression","months","dayFromMonth","now","UTC","millisecond","isLocalTime","Boolean","signOffset","hourOffset","minuteOffset","toUTC","hasToFixedBugs","toFixed","toFixedHelpers","multiply","c2","divide","numToString","acc","x2","fractionDigits","z","compliantExecNpcg","maxSafe32BitInt","hasToPrecisionUndefinedBug","toPrecision","originalToPrecision","precision","separator2","lastIndex","lastLength","flags","ignoreCase","multiline","unicode","sticky","lastLastIndex","separatorCopy","splitLimit","groups","str_replace","group","searchValue","replaceValue","hasCapturingGroups","originalLastIndex","string_substr","hasNegativeSubstrBug","normalizedStart","ws","wsRegexChars","trimBeginRegexp","trimEndRegexp","hasTrimWhitespaceBug","hasLastIndexBug","searchString","searchStr","numPos","searchLen","origParseInt","hexRegex","origParseFloat","originalLastIndexOf","radix","defaultedRadix","inputString","ensureNonEnumerable","desc","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","rt","LN2","alert","confirm","prompt","freeExports","freeModule","freeGlobal","maxInt","tMin","tMax","skew","damp","initialBias","initialN","delimiter","regexPunycode","regexNonASCII","regexSeparators","baseMinusTMin","stringFromCharCode","mapDomain","ucs2decode","extra","counter","ucs2encode","digitToBasic","digit","adapt","numPoints","firstTime","decode","basic","oldi","baseMinusT","inputLength","bias","encode","handledCPCount","basicLength","currentValue","handledCPCountPlusOne","qMinusT","scriptpath","urlArgs","head","getElementsByTagName","ids","scripts","ar","$script","paths","idOrDone","optDone","idOrDoneIsDone","done","queue","loopFn","dset","path","force","create","onload","onerror","async","order","deps","missing","dep","scopes","removeUnusedDebugElements","bindEvents","_instance","querySelector","toggleDebug","noCacheButton","redirectToNonCacheable","elements","eventContext","disableCacheKey","QueryParameterToolSet","instance","newAddress","scopesArray","dlpNavigationKey","scope","debugBarElement","testButtonsContainer","Debug","callbackLists","subscribe","eventName","subscriptionsIds","createSubscription","subscribeMultiple","subscriptions","subscriptionIds","subscription","subscriptionId","addSubscription","unsubscribe","unSubscribeMultiple","removeSubscription","publish","payload","EventBus","eventBus","exceptionIcon","toggleExceptionDetail","handleError","showExceptionIcon","exceptionsDetailContainer","eventData","exceptionDetail","insertAdjacentHTML","exceptionSimpleBar","errorTitle","errorDetail","details","errorDetailString","Exception","lazyLoadingDistance","callbackActive","fetchImages","registerEvents","loadImagesNearViewport","images","lazyLoadSubscriptions","image","rect","innerHeight","loadImage","unsubscribeEvents","hasAttribute","srcset","ImageLoader","scriptElement","getElementById","innerText","appendTranslatedPageUrls","translations","translation","decodedUrl","obfuscation","dataset","dlpnavigationkey","LanguageFragmentsTranslation","scrollLock","ScrollLock","initModalDialogComponent","dlpToggleModals","dlpToggleModal","openCloseModal","modalId","readModalId","isVideoModalInMobileShop","modalDialog","modalDialogParent","modalElements","modalElement","close","guidContainer","closest","overlay","scrollTextToTop","lock","unlock","textScrollContainer","isVideo","isInMobileShop","ModalDialog","pageYOffset","overflowY","topPosition","queryString","search","parameters","vars","pair","paramName","paramValue","newQuery","connector","initSliced3DComponent","sliced3DViews","imageContainer","addSliced3DEx","slicedImage","naturalWidth","addSliced3D","sliced3DView","imageUrl","Sliced3D","textContainerHeight","claimDescriptionTextContainerHeight","init","initThrowAllScopes","regularPageLayout","tabletLayout","initializeTextModules","initializeClaimDescriptionTexts","updateTextSlots","textModules","textModule","setFadeAreaVisibility","claimDescriptionTexts","claimDescriptionText","setFadeAreaVisibilityForSlot","textContentWide","slot","classToAdd","TextModules","flowplayerInstances","initVideoComponent","subscribeGlobalVideoEvents","isMobile","flowplayerLicenseKeys","videoContainerElements","videoContainer","videoLink","videoComponentElement","bindVideoLinkEvents","injectFlowplayer","videoSourceUrl","videoSourceType","flowplayerInstance","moveFullscreenButton","fsButton","controls","getFlowplayerInstanceId","flowplayerElement","flowplayerInstanceId","VideoComponent","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","globalThis"],"sourceRoot":""}